diff --git a/.github/workflows/node.js.yml b/.github/workflows/node.js.yml index ca29e7cf..4df5ff65 100644 --- a/.github/workflows/node.js.yml +++ b/.github/workflows/node.js.yml @@ -5,9 +5,9 @@ name: Node.js CI on: push: - branches: [ master ] + branches: [ master, dev, danfo/typescript ] pull_request: - branches: [ master ] + branches: [ master, dev ] jobs: test: @@ -16,7 +16,7 @@ jobs: strategy: matrix: - node-version: [10.x, 12.x, 14.x] + node-version: [12.x, 14.x] steps: - uses: actions/checkout@v2 @@ -24,7 +24,4 @@ jobs: uses: actions/setup-node@v1 with: node-version: ${{ matrix.node-version }} - - run: cd danfojs-node && yarn - - run: cd danfojs-node && yarn test - - run: cd danfojs-browser && yarn - - run: cd danfojs-browser && yarn test + - run: yarn test diff --git a/.gitignore b/.gitignore index 211887f2..1313f538 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,5 @@ .editorconfig -node_modules \ No newline at end of file +node_modules +test/fixtures/* +test/samples/* +*.xlsx diff --git a/README.md b/README.md index 656a905d..8f880afe 100644 --- a/README.md +++ b/README.md @@ -47,145 +47,168 @@ easy and intuitive. It is heavily inspired by [Pandas](https://pandas.pydata.org - Robust data preprocessing functions like [OneHotEncoders](https://danfo.jsdata.org/api-reference/general-functions/danfo.onehotencoder), [LabelEncoders](https://danfo.jsdata.org/api-reference/general-functions/danfo.labelencoder), and scalers like [StandardScaler](https://danfo.jsdata.org/api-reference/general-functions/danfo.standardscaler) and [MinMaxScaler](https://danfo.jsdata.org/api-reference/general-functions/danfo.minmaxscaler) are supported on DataFrame and Series +## Installation +There are three ways to install and use Danfo.js in your application +* For Nodejs applications, you can install the [__danfojs-node__]() version via package managers like yarn and/or npm: -To use Danfo.js via script tags, copy and paste the CDN below to the body of your HTML file +```bash +npm install danfojs-node + +or + +yarn add danfojs-node +``` +For client-side applications built with frameworks like React, Vue, Next.js, etc, you can install the [__danfojs__]() version: + +```bash +npm install danfojs + +or + +yarn add danfojs +``` + +For use directly in HTML files, you can add the latest script tag from [JsDelivr](https://www.jsdelivr.com/package/npm/danfojs) to your HTML file: + ```html - + ``` See all available versions [here](https://www.jsdelivr.com/package/npm/danfojs) ### Example Usage in the Browser -> See the example below in [Code Sandbox](https://codepen.io/risingodegua/pen/bGwPGMG) +> Run in [Code Sandbox](https://codepen.io/risingodegua/pen/bGwPGMG) ```html - - - - - + + + + Document - - - + +
- - - + + ``` Output in Browser: ![](assets/browser-out.gif) -## How to install -Danfo.js is hosted on NPM, and can installed via package managers like npm and yarn - -```sh -npm install danfojs-node -``` - ### Example usage in Nodejs ```javascript const dfd = require("danfojs-node") +const file_url = "https://web.stanford.edu/class/archive/cs/cs109/cs109.1166/stuff/titanic.csv" +dfd.readCSV(file_url) + .then(df => { + //prints the first five columns + df.head().print() + + // Calculate descriptive statistics for all numerical columns + df.describe().print() -dfd.read_csv("https://web.stanford.edu/class/archive/cs/cs109/cs109.1166/stuff/titanic.csv") - .then(df => { - //prints the first five columns - df.head().print() + //prints the shape of the data + console.log(df.shape); - //Calculate descriptive statistics for all numerical columns - df.describe().print() + //prints all column names + console.log(df.columns); - //prints the shape of the data - console.log(df.shape); + // //prints the inferred dtypes of each column + df.ctypes.print() - //prints all column names - console.log(df.column_names); + //selecting a column by subsetting + df['Name'].print() - //prints the inferred dtypes of each column - df.ctypes.print() + //drop columns by names + cols_2_remove = ['Age', 'Pclass'] + df_drop = df.drop({ columns: cols_2_remove, axis: 1 }) + df_drop.print() - //selecting a column by subsetting - df['Name'].print() - //drop columns by names - cols_2_remove = ['Age', 'Pclass'] - df_drop = df.drop({ columns: cols_2_remove, axis: 1 }) - df_drop.print() + //select columns by dtypes + let str_cols = df_drop.selectDtypes(["string"]) + let num_cols = df_drop.selectDtypes(["int32", "float32"]) + str_cols.print() + num_cols.print() - //select columns by dtypes - let str_cols = df_drop.select_dtypes(["string"]) - let num_cols = df_drop.select_dtypes(["int32", "float32"]) - str_cols.print() - num_cols.print() + //add new column to Dataframe + let new_vals = df['Fare'].round(1) + df_drop.addColumn("fare_round", new_vals, { inplace: true }) + df_drop.print() - //add new column to Dataframe - let new_vals = df['Fare'].round().values - df_drop.addColumn({ column: "fare_round", value: new_vals}) - df_drop.print() + df_drop['fare_round'].round(2).print(5) - df_drop['fare_round'].print(5) + //prints the number of occurence each value in the column + df_drop['Survived'].valueCounts().print() - //prints the number of occurence each value in the column - df_drop['Survived'].value_counts().print() + //print the last ten elementa of a DataFrame + df_drop.tail(10).print() - //print the last ten elementa of a DataFrame - df_drop.tail(10).print() + //prints the number of missing values in a DataFrame + df_drop.isNa().sum().print() - //prints the number of missing values in a DataFrame - df_drop.isna().sum().print() + }).catch(err => { + console.log(err); + }) - }).catch(err => { - console.log(err); - }) ``` Output in Node Console: ![](assets/node-rec.gif) - -> If you want to use Danfo in frontend frameworks like React/Vue, read this [guide](https://danfo.jsdata.org/examples/using-danfojs-in-react) - -#### You can play with Danfo.js on Dnotebooks playground [here](https://playnotebook.jsdata.org/demo) +## Notebook support +* You can use Danfo.js on Dnotebooks playground [here](https://playnotebook.jsdata.org/demo) +* VsCode nodejs notebook extension now supports Danfo.js. See guide [here](https://marketplace.visualstudio.com/items?itemName=donjayamanne.typescript-notebook) #### [See the Official Getting Started Guide](https://danfo.jsdata.org/getting-started) ## Documentation The official documentation can be found [here](https://danfo.jsdata.org) +## Danfo.js Official Book + +![image](https://user-images.githubusercontent.com/29900845/134811659-25ff6b05-8e0d-415f-a60c-03ab1d33fd71.jpeg) + + +We recently published a book titled "Building Data Driven Applications with Danfo.js". Read more about it [here](https://danfo.jsdata.org/building-data-driven-applications-with-danfo.js-book) + ## Discussion and Development Development discussions take place [here](https://github.com/opensource9ja/danfojs/discussions). @@ -196,4 +219,4 @@ All contributions, bug reports, bug fixes, documentation improvements, enhanceme #### Created by [Rising Odegua](https://github.com/risenW) and [Stephen Oni](https://github.com/steveoni) -Danfo.js - Open Source JavaScript library for manipulating data. | Product Hunt Embed +Danfo.js - Open Source JavaScript library for manipulating data. | Product Hunt Embed \ No newline at end of file diff --git a/danfojs-browser/lib/bundle.js b/danfojs-browser/lib/bundle.js deleted file mode 100644 index 2daa2df0..00000000 --- a/danfojs-browser/lib/bundle.js +++ /dev/null @@ -1,3 +0,0 @@ -/*! For license information please see bundle.js.LICENSE.txt */ -var dfd;dfd=(()=>{var __webpack_modules__={7228:e=>{e.exports=function(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n{e.exports=function(e){if(Array.isArray(e))return e}},3646:(e,t,n)=>{var r=n(7228);e.exports=function(e){if(Array.isArray(e))return r(e)}},1506:e=>{e.exports=function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}},8926:e=>{function t(e,t,n,r,a,s,i){try{var o=e[s](i),l=o.value}catch(e){return void n(e)}o.done?t(l):Promise.resolve(l).then(r,a)}e.exports=function(e){return function(){var n=this,r=arguments;return new Promise((function(a,s){var i=e.apply(n,r);function o(e){t(i,a,s,o,l,"next",e)}function l(e){t(i,a,s,o,l,"throw",e)}o(void 0)}))}}},4575:e=>{e.exports=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}},3913:e=>{function t(e,t){for(var n=0;n{var r=n(8331);function a(t,n,s){return"undefined"!=typeof Reflect&&Reflect.get?e.exports=a=Reflect.get:e.exports=a=function(e,t,n){var a=r(e,t);if(a){var s=Object.getOwnPropertyDescriptor(a,t);return s.get?s.get.call(n):s.value}},a(t,n,s||t)}e.exports=a},9754:e=>{function t(n){return e.exports=t=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},t(n)}e.exports=t},2205:(e,t,n)=>{var r=n(9489);e.exports=function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&r(e,t)}},6860:e=>{e.exports=function(e){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}},3884:e=>{e.exports=function(e,t){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(e)){var n=[],r=!0,a=!1,s=void 0;try{for(var i,o=e[Symbol.iterator]();!(r=(i=o.next()).done)&&(n.push(i.value),!t||n.length!==t);r=!0);}catch(e){a=!0,s=e}finally{try{r||null==o.return||o.return()}finally{if(a)throw s}}return n}}},521:e=>{e.exports=function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}},8206:e=>{e.exports=function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}},8585:(e,t,n)=>{var r=n(8),a=n(1506);e.exports=function(e,t){return!t||"object"!==r(t)&&"function"!=typeof t?a(e):t}},9489:e=>{function t(n,r){return e.exports=t=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},t(n,r)}e.exports=t},3038:(e,t,n)=>{var r=n(2858),a=n(3884),s=n(379),i=n(521);e.exports=function(e,t){return r(e)||a(e,t)||s(e,t)||i()}},8331:(e,t,n)=>{var r=n(9754);e.exports=function(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=r(e)););return e}},319:(e,t,n)=>{var r=n(3646),a=n(6860),s=n(379),i=n(8206);e.exports=function(e){return r(e)||a(e)||s(e)||i()}},8:e=>{function t(n){return"function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?e.exports=t=function(e){return typeof e}:e.exports=t=function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t(n)}e.exports=t},379:(e,t,n)=>{var r=n(7228);e.exports=function(e,t){if(e){if("string"==typeof e)return r(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?r(e,t):void 0}}},7757:(e,t,n)=>{e.exports=n(5666)},7091:(e,t,n)=>{"use strict";n.r(t),n.d(t,{Abs:()=>Ge,Acos:()=>Xe,Acosh:()=>Ke,AdadeltaOptimizer:()=>Vo,AdagradOptimizer:()=>Ho,AdamOptimizer:()=>Ko,AdamaxOptimizer:()=>el,Add:()=>qe,AddN:()=>Ye,All:()=>Je,Any:()=>Ze,ArgMax:()=>Qe,ArgMin:()=>et,Asin:()=>tt,Asinh:()=>nt,Atan:()=>rt,Atan2:()=>st,Atanh:()=>at,AvgPool:()=>it,AvgPool3D:()=>lt,AvgPool3DGrad:()=>ut,AvgPoolGrad:()=>ot,BatchMatMul:()=>ct,BatchToSpaceND:()=>ht,Bincount:()=>ft,BroadcastTo:()=>dt,Callback:()=>xx,CallbackList:()=>xy,Cast:()=>pt,Ceil:()=>mt,ClipByValue:()=>gt,Complex:()=>yt,ComplexAbs:()=>bt,Concat:()=>vt,Conv2D:()=>wt,Conv2DBackpropFilter:()=>_t,Conv2DBackpropInput:()=>xt,Conv3D:()=>kt,Conv3DBackpropFilterV2:()=>Et,Conv3DBackpropInputV2:()=>Ct,Cos:()=>St,Cosh:()=>Nt,CropAndResize:()=>At,Cumsum:()=>It,CustomCallback:()=>Cy,DataStorage:()=>V,DenseBincount:()=>Dt,DepthToSpace:()=>Tt,DepthwiseConv2dNative:()=>Ft,DepthwiseConv2dNativeBackpropFilter:()=>Rt,DepthwiseConv2dNativeBackpropInput:()=>Ot,Diag:()=>Mt,Dilation2D:()=>Bt,Dilation2DBackpropFilter:()=>Pt,Dilation2DBackpropInput:()=>$t,ENV:()=>Ve,EarlyStopping:()=>Cx,Einsum:()=>zt,Elu:()=>Wt,EluGrad:()=>Ut,Environment:()=>Le,Equal:()=>jt,Erf:()=>Vt,Exp:()=>Ht,ExpandDims:()=>Gt,Expm1:()=>Xt,FFT:()=>Kt,Fill:()=>qt,FlipLeftRight:()=>Yt,Floor:()=>Jt,FloorDiv:()=>Zt,FromPixels:()=>Wr,FusedBatchNorm:()=>Qt,FusedConv2D:()=>jr,FusedDepthwiseConv2D:()=>Hr,GatherNd:()=>tn,GatherV2:()=>en,GraphModel:()=>Lk,Greater:()=>nn,GreaterEqual:()=>rn,History:()=>Ey,IFFT:()=>sn,Identity:()=>an,Imag:()=>on,InputSpec:()=>uy,IsFinite:()=>ln,IsInf:()=>un,IsNan:()=>cn,KernelBackend:()=>j,LRN:()=>_n,LRNGrad:()=>xn,LayerVariable:()=>iy,LayersModel:()=>Db,LeakyRelu:()=>hn,Less:()=>fn,LessEqual:()=>dn,LinSpace:()=>pn,Log:()=>mn,Log1p:()=>gn,LogSoftmax:()=>wn,LogicalAnd:()=>yn,LogicalNot:()=>bn,LogicalOr:()=>vn,Max:()=>kn,MaxPool:()=>Cn,MaxPool3D:()=>Nn,MaxPool3DGrad:()=>In,MaxPoolGrad:()=>Sn,MaxPoolWithArgmax:()=>An,Maximum:()=>En,Mean:()=>Dn,Min:()=>Tn,Minimum:()=>Fn,MirrorPad:()=>Rn,Mod:()=>On,MomentumOptimizer:()=>nl,Multinomial:()=>Mn,Multiply:()=>Bn,Neg:()=>$n,NonMaxSuppressionV3:()=>Ln,NonMaxSuppressionV4:()=>zn,NonMaxSuppressionV5:()=>Wn,NotEqual:()=>Pn,OP_SCOPE_SUFFIX:()=>Ja,OneHot:()=>Vn,OnesLike:()=>Un,Optimizer:()=>Uo,Pack:()=>jn,PadV2:()=>Hn,Pool:()=>Gn,Pow:()=>Xn,Prelu:()=>Kn,Prod:()=>qn,RMSPropOptimizer:()=>rl,RNN:()=>Bv,Range:()=>Yn,Rank:()=>Ea,Real:()=>Jn,RealDiv:()=>Lt,Reciprocal:()=>Zn,Reduction:()=>Sf,Relu:()=>Qn,Relu6:()=>sr,Reshape:()=>er,ResizeBilinear:()=>rr,ResizeBilinearGrad:()=>ar,ResizeNearestNeighbor:()=>tr,ResizeNearestNeighborGrad:()=>nr,Reverse:()=>ir,RotateWithOffset:()=>Ur,Round:()=>or,Rsqrt:()=>lr,SGDOptimizer:()=>tl,ScatterNd:()=>ur,Select:()=>cr,Selu:()=>hr,Sequential:()=>Rb,Sigmoid:()=>gr,Sign:()=>mr,Sin:()=>dr,Sinh:()=>pr,Slice:()=>fr,Softmax:()=>xr,Softplus:()=>yr,SpaceToBatchND:()=>wr,SparseFillEmptyRows:()=>kr,SparseReshape:()=>Er,SparseToDense:()=>Cr,SplitV:()=>_r,Sqrt:()=>br,Square:()=>Nr,SquaredDifference:()=>Sr,Step:()=>zr,StridedSlice:()=>Ir,Sub:()=>Ar,Sum:()=>vr,SymbolicTensor:()=>cy,Tan:()=>Dr,Tanh:()=>Tr,Tensor:()=>_a,TensorBuffer:()=>ya,Tile:()=>Fr,TopK:()=>Rr,Transform:()=>Or,Transpose:()=>Mr,Unique:()=>Br,Unpack:()=>$r,UnsortedSegmentSum:()=>Pr,Variable:()=>ka,ZerosLike:()=>Lr,_FusedMatMul:()=>Vr,abs:()=>qo,acos:()=>al,acosh:()=>sl,add:()=>No,addN:()=>il,all:()=>ol,any:()=>ll,argMax:()=>ul,argMin:()=>cl,asin:()=>hl,asinh:()=>fl,atan:()=>dl,atan2:()=>pl,atanh:()=>ml,avgPool:()=>Dl,avgPool3d:()=>Tl,backend:()=>Co,backend_util:()=>g,basicLSTMCell:()=>Bl,batchNorm:()=>Pl,batchNorm2d:()=>Ll,batchNorm3d:()=>zl,batchNorm4d:()=>Wl,batchToSpaceND:()=>$l,bincount:()=>Ul,booleanMaskAsync:()=>Dh,broadcastTo:()=>Vl,browser:()=>l,buffer:()=>Xs,callbacks:()=>Sx,cast:()=>Ks,ceil:()=>jl,clipByValue:()=>Hl,clone:()=>qs,complex:()=>Qa,concat:()=>Fl,concat1d:()=>Gl,concat2d:()=>Xl,concat3d:()=>Kl,concat4d:()=>ql,constraints:()=>b,conv1d:()=>Jl,conv2d:()=>Yl,conv2dTranspose:()=>Ql,conv3d:()=>eu,conv3dTranspose:()=>nu,copyRegisteredKernels:()=>ta,cos:()=>ru,cosh:()=>au,cosineWindow:()=>Lh,cumsum:()=>su,customGrad:()=>Lo,data:()=>W,denseBincount:()=>iu,deprecationWarn:()=>lo,depthToSpace:()=>ou,depthwiseConv2d:()=>lu,deregisterOp:()=>Fx,device_util:()=>s,diag:()=>uu,dilation2d:()=>cu,disableDeprecationWarnings:()=>oo,dispose:()=>mo,disposeVariables:()=>uo,div:()=>Ao,divNoNan:()=>du,dot:()=>pu,dropout:()=>$h,einsum:()=>mu,elu:()=>gu,enableDebugMode:()=>io,enableProdMode:()=>so,enclosingPowerOfTwo:()=>Ph,engine:()=>co,env:()=>We,equal:()=>hu,erf:()=>yu,exp:()=>bu,expandDims:()=>vu,expm1:()=>wu,eye:()=>xu,fft:()=>ih,fill:()=>jo,findBackend:()=>xo,findBackendFactory:()=>ko,floor:()=>ku,floorDiv:()=>Io,fused:()=>p,gather:()=>Eu,gatherND:()=>Bh,gather_util:()=>u,getBackend:()=>wo,getGradient:()=>qr,getKernel:()=>Kr,getKernelsForBackend:()=>Yr,grad:()=>Oo,grads:()=>Mo,greater:()=>Cu,greaterEqual:()=>Su,ifft:()=>oh,imag:()=>Nu,image:()=>zf,inTopKAsync:()=>zh,initializers:()=>v,input:()=>$b,io:()=>i,irfft:()=>lh,isFinite:()=>Iu,isInf:()=>Au,isNaN:()=>Du,keep:()=>go,kernel_impls:()=>y,layers:()=>w,leakyRelu:()=>Tu,less:()=>Fu,lessEqual:()=>Ru,linalg:()=>Wf,linspace:()=>Ou,loadGraphModel:()=>zk,loadLayersModel:()=>Bb,localResponseNormalization:()=>Mu,log:()=>Bu,log1p:()=>$u,logSigmoid:()=>zu,logSoftmax:()=>Vu,logSumExp:()=>Zu,logicalAnd:()=>Qu,logicalNot:()=>ec,logicalOr:()=>tc,logicalXor:()=>nc,losses:()=>Uf,matMul:()=>pi,math:()=>o,max:()=>Wu,maxPool:()=>rc,maxPool3d:()=>ac,maxPoolWithArgmax:()=>sc,maximum:()=>Qo,mean:()=>ic,memory:()=>ho,meshgrid:()=>uc,metrics:()=>_,min:()=>cc,minimum:()=>hc,mirrorPad:()=>fc,mod:()=>dc,model:()=>Ob,models:()=>x,moments:()=>pc,movingAverage:()=>Rh,mul:()=>Do,multiRNNCell:()=>mc,multinomial:()=>gc,neg:()=>Pu,nextFrame:()=>Xf,norm:()=>Fh,notEqual:()=>yc,oneHot:()=>mi,ones:()=>lc,onesLike:()=>bc,op:()=>Za,outerProduct:()=>vc,pad:()=>wc,pad1d:()=>_c,pad2d:()=>xc,pad3d:()=>kc,pad4d:()=>Ec,pool:()=>Sc,pow:()=>Go,prelu:()=>Nc,print:()=>Ys,prod:()=>Ic,profile:()=>fo,rand:()=>Ac,randomGamma:()=>Oc,randomNormal:()=>Mc,randomUniform:()=>Bc,range:()=>$c,ready:()=>vo,real:()=>Pc,reciprocal:()=>Lc,registerBackend:()=>Eo,registerCallbackConstructor:()=>Pb,registerGradient:()=>Zr,registerKernel:()=>Jr,registerOp:()=>Dx,regularizers:()=>k,relu:()=>zc,relu6:()=>Wc,removeBackend:()=>_o,reshape:()=>Al,reverse:()=>Uc,reverse1d:()=>Vc,reverse2d:()=>jc,reverse3d:()=>Hc,reverse4d:()=>Gc,rfft:()=>ch,round:()=>Xc,rsqrt:()=>Kc,scalar:()=>Wo,scatterND:()=>Oh,scatter_util:()=>c,selu:()=>qc,separableConv2d:()=>Yc,sequential:()=>Mb,serialization:()=>f,setBackend:()=>bo,setPlatform:()=>So,setdiff1dAsync:()=>Jc,sigmoid:()=>Rl,sign:()=>Zc,signal:()=>Lf,sin:()=>Qc,sinh:()=>eh,slice:()=>Ol,slice1d:()=>th,slice2d:()=>nh,slice3d:()=>rh,slice4d:()=>ah,slice_util:()=>h,softmax:()=>sh,softplus:()=>Lu,spaceToBatchND:()=>Cc,sparse:()=>Vf,sparseToDense:()=>Mh,spectral:()=>Pf,split:()=>uh,sqrt:()=>To,square:()=>Fo,squaredDifference:()=>hh,squeeze:()=>fh,stack:()=>dh,step:()=>ph,stridedSlice:()=>mh,sub:()=>Xo,sum:()=>Uu,sumOutType:()=>Ta,tan:()=>gh,tanh:()=>Ml,tensor:()=>ts,tensor1d:()=>yh,tensor2d:()=>bh,tensor3d:()=>bi,tensor4d:()=>vh,tensor5d:()=>wh,tensor6d:()=>_h,tensor_util:()=>a,test_util:()=>d,tidy:()=>po,tile:()=>_u,time:()=>yo,topk:()=>xh,train:()=>Hf,transpose:()=>gi,truncatedNormal:()=>kh,unique:()=>Eh,unregisterGradient:()=>ea,unregisterKernel:()=>Qr,unsortedSegmentSum:()=>Ch,unstack:()=>Sh,upcastType:()=>Da,util:()=>r,valueAndGrad:()=>Bo,valueAndGrads:()=>$o,variable:()=>Nh,variableGrads:()=>Po,version:()=>qP,version_converter:()=>Wk,version_core:()=>ao,version_layers:()=>sb,where:()=>fu,whereAsync:()=>Ah,zeros:()=>oc,zerosLike:()=>Ro});var r={};n.r(r),n.d(r,{arraysEqual:()=>se,assert:()=>Q,assertNonNegativeIntegerDimensions:()=>Me,assertNonNull:()=>te,assertShapesMatch:()=>ee,bytesFromStringArray:()=>xe,bytesPerElement:()=>_e,checkConversionForErrors:()=>ye,clamp:()=>K,computeStrides:()=>Ae,createScalarValue:()=>ra,createShuffledIndices:()=>ue,decodeString:()=>la,distSquared:()=>Z,encodeString:()=>oa,fetch:()=>ia,flatten:()=>ne,getArrayFromDType:()=>ge,getTypedArrayFromDType:()=>me,hasEncodingLoss:()=>ve,indexToLoc:()=>$e,inferDtype:()=>Se,inferFromImplicitShape:()=>fe,isBoolean:()=>Ee,isFunction:()=>Ne,isInt:()=>ie,isNumber:()=>Ce,isPromise:()=>Pe,isScalarShape:()=>ae,isString:()=>ke,isTypedArray:()=>we,isValidDtype:()=>be,locToIndex:()=>Be,makeOnesTypedArray:()=>Fe,makeZerosNestedTypedArray:()=>Oe,makeZerosTypedArray:()=>Re,nearestDivisor:()=>Ie,nearestLargerEven:()=>q,now:()=>sa,parseAxisParam:()=>de,randUniform:()=>J,repeatedTry:()=>he,rightPad:()=>ce,shuffle:()=>G,shuffleCombo:()=>X,sizeFromShape:()=>re,sizeToSquarishShape:()=>le,squeezeShape:()=>pe,sum:()=>Y,tanh:()=>oe,toNestedArray:()=>Te,toTypedArray:()=>aa});var a={};n.r(a),n.d(a,{assertTypesMatch:()=>Ra,getTensorsInContainer:()=>Ma,isTensorInList:()=>Oa,makeTypesMatch:()=>Fa});var s={};n.r(s),n.d(s,{isBrowser:()=>ja,isMobile:()=>Va});var i={};n.r(i),n.d(i,{browserFiles:()=>ei,browserHTTPRequest:()=>ui,concatenateArrayBuffers:()=>ls,copyModel:()=>Vs,decodeWeights:()=>as,encodeWeights:()=>rs,fromMemory:()=>fi,getLoadHandlers:()=>gs,getModelArtifactsInfoForJSON:()=>cs,getSaveHandlers:()=>ms,http:()=>li,isHTTPScheme:()=>ii,listModels:()=>Ws,loadWeights:()=>ri,moveModel:()=>js,registerLoadRouter:()=>ps,registerSaveRouter:()=>ds,removeModel:()=>Us,weightsLoaderFactory:()=>ai,withSaveHandler:()=>di});var o={};n.r(o),n.d(o,{confusionMatrix:()=>yi});var l={};n.r(l),n.d(l,{fromPixels:()=>ki,fromPixelsAsync:()=>_i,toPixels:()=>xi});var u={};n.r(u),n.d(u,{prepareAndValidate:()=>Ei});var c={};n.r(c),n.d(c,{calculateShapes:()=>Ni,validateInput:()=>Si,validateUpdateShape:()=>Ci});var h={};n.r(h),n.d(h,{assertParamsValid:()=>Ii,computeFlatOffset:()=>Wi,computeOutShape:()=>Di,getNormalizedAxes:()=>Oi,isSliceContinous:()=>zi,maskToAxes:()=>Ai,parseSliceParams:()=>Ui,sliceInfo:()=>Vi,startForAxis:()=>Pi,startIndicesWithElidedDims:()=>Mi,stopForAxis:()=>Li,stopIndicesWithElidedDims:()=>Bi,stridesForAxis:()=>$i,stridesWithElidedDims:()=>Ti});var f={};n.r(f),n.d(f,{Serializable:()=>ji,SerializationMap:()=>Hi,registerClass:()=>Gi});var d={};n.r(d),n.d(d,{TEST_EPSILON_FLOAT16:()=>Xi,encodeStrings:()=>ro,expectArrayBuffersEqual:()=>no,expectArraysClose:()=>Ki,expectArraysEqual:()=>Zi,expectNumbersClose:()=>Qi,expectPromiseToFail:()=>Ji,expectValuesInRange:()=>to,testEpsilon:()=>qi});var p={};n.r(p),n.d(p,{conv2d:()=>Gh,depthwiseConv2d:()=>qh,matMul:()=>Yh});var m={};n.r(m),n.d(m,{collectGatherOpShapeInfo:()=>Fd,computeOutShape:()=>Td,segOpComputeOptimalWindowSize:()=>Dd});var g={};n.r(g),n.d(g,{ERF_A1:()=>od,ERF_A2:()=>ld,ERF_A3:()=>ud,ERF_A4:()=>cd,ERF_A5:()=>hd,ERF_P:()=>id,PARALLELIZE_THRESHOLD:()=>Yf,SELU_SCALE:()=>sd,SELU_SCALEALPHA:()=>ad,applyActivation:()=>jh,assertAndGetBroadcastShape:()=>Zo,assertAxesAreInnerMostDims:()=>Ku,assertParamsConsistent:()=>Kf,assignToTypedArray:()=>vd,axesAreInnerMostDims:()=>ju,calculateShapes:()=>Ni,checkEinsumDimSizes:()=>Cd,combineLocations:()=>Hu,complexWithEvenIndex:()=>gd,complexWithOddIndex:()=>yd,computeConv2DInfo:()=>vl,computeConv3DInfo:()=>wl,computeDefaultPad:()=>_l,computeDilation2DInfo:()=>gl,computeOptimalWindowSize:()=>Jf,computeOutAndReduceShapes:()=>Gu,computeOutShape:()=>qf,computePool2DInfo:()=>yl,computePool3DInfo:()=>bl,convertConv2DDataFormat:()=>Il,decodeEinsumEquation:()=>kd,eitherStridesOrDilationsAreOne:()=>Nl,expandShapeToKeepDim:()=>Xu,exponent:()=>_d,exponents:()=>wd,fromStringArrayToUint8:()=>Od,fromUint8ToStringArray:()=>Rd,getAxesPermutation:()=>qu,getBroadcastDims:()=>Yo,getComplexWithIndex:()=>bd,getEinsumComputePath:()=>Sd,getEinsumPermutation:()=>Ed,getFusedBiasGradient:()=>Vh,getFusedDyActivation:()=>Uh,getImageCenter:()=>Zf,getInnerMostAxes:()=>Ju,getPermuted:()=>ed,getReductionAxes:()=>Jo,getReshaped:()=>Qf,getReshapedPermuted:()=>td,getSliceBeginCoords:()=>nd,getSliceSize:()=>rd,getUndoAxesPermutation:()=>Yu,isIdentityPermutation:()=>Nd,log:()=>dd,mergeRealAndImagArrays:()=>pd,prepareAndValidate:()=>Ei,prepareSplitSize:()=>Ad,segment_util:()=>m,shouldFuse:()=>Hh,slice_util:()=>h,splitRealAndImagArrays:()=>md,tupleValuesAreOne:()=>Sl,upcastType:()=>Da,validateInput:()=>Si,validateUpdateShape:()=>Ci,warn:()=>fd});var y={};n.r(y),n.d(y,{nonMaxSuppressionV3Impl:()=>uf,nonMaxSuppressionV4Impl:()=>cf,nonMaxSuppressionV5Impl:()=>hf,whereImpl:()=>Ih});var b={};n.r(b),n.d(b,{maxNorm:()=>Im,minMaxNorm:()=>Tm,nonNeg:()=>Dm,unitNorm:()=>Am});var v={};n.r(v),n.d(v,{constant:()=>Pg,glorotNormal:()=>Hg,glorotUniform:()=>jg,heNormal:()=>Gg,heUniform:()=>Xg,identity:()=>Ug,leCunNormal:()=>Kg,leCunUniform:()=>qg,ones:()=>$g,orthogonal:()=>Yg,randomNormal:()=>zg,randomUniform:()=>Lg,truncatedNormal:()=>Wg,varianceScaling:()=>Vg,zeros:()=>Bg});var w={};n.r(w),n.d(w,{Layer:()=>py,RNN:()=>Bv,RNNCell:()=>$v,activation:()=>r_,add:()=>f_,alphaDropout:()=>nx,average:()=>d_,averagePooling1d:()=>x_,averagePooling2d:()=>C_,averagePooling3d:()=>I_,avgPool1d:()=>k_,avgPool2d:()=>S_,avgPool3d:()=>A_,avgPooling1d:()=>E_,avgPooling2d:()=>N_,avgPooling3d:()=>D_,batchNormalization:()=>v_,bidirectional:()=>K_,concatenate:()=>p_,conv1d:()=>Kw,conv2d:()=>qw,conv2dTranspose:()=>Yw,conv3d:()=>Jw,conv3dTranspose:()=>Zw,convLstm2d:()=>j_,convLstm2dCell:()=>H_,cropping2D:()=>e_,dense:()=>a_,depthwiseConv2d:()=>n_,dot:()=>b_,dropout:()=>s_,elu:()=>Uw,embedding:()=>h_,flatten:()=>o_,gaussianDropout:()=>tx,gaussianNoise:()=>ex,globalAveragePooling1d:()=>T_,globalAveragePooling2d:()=>F_,globalMaxPool1d:()=>Y_,globalMaxPool2d:()=>J_,globalMaxPooling1d:()=>R_,globalMaxPooling2d:()=>O_,gru:()=>P_,gruCell:()=>L_,input:()=>$b,inputLayer:()=>Ww,layerNormalization:()=>w_,leakyReLU:()=>jw,lstm:()=>z_,lstmCell:()=>W_,masking:()=>rx,maxPool1d:()=>Z_,maxPool2d:()=>Q_,maxPooling1d:()=>M_,maxPooling2d:()=>B_,maxPooling3d:()=>$_,maximum:()=>m_,minimum:()=>g_,multiply:()=>y_,permute:()=>c_,prelu:()=>Hw,reLU:()=>Vw,repeatVector:()=>l_,reshape:()=>u_,rnn:()=>G_,separableConv2d:()=>Qw,simpleRNN:()=>U_,simpleRNNCell:()=>V_,softmax:()=>Gw,spatialDropout1d:()=>i_,stackedRNNCells:()=>X_,thresholdedReLU:()=>Xw,timeDistributed:()=>q_,upSampling2d:()=>t_,zeroPadding2d:()=>__});var _={};n.r(_),n.d(_,{MAPE:()=>px,MSE:()=>yx,binaryAccuracy:()=>ax,binaryCrossentropy:()=>sx,categoricalAccuracy:()=>ox,categoricalCrossentropy:()=>lx,cosineProximity:()=>hx,mape:()=>mx,meanAbsoluteError:()=>fx,meanAbsolutePercentageError:()=>dx,meanSquaredError:()=>gx,mse:()=>bx,precision:()=>ux,recall:()=>cx,sparseCategoricalAccuracy:()=>ix});var x={};n.r(x),n.d(x,{modelFromJSON:()=>Fb});var k={};n.r(k),n.d(k,{l1:()=>wx,l1l2:()=>vx,l2:()=>_x});var E={};n.r(E),n.d(E,{json:()=>zx});var C={};n.r(C),n.d(C,{json:()=>Wx});var S={};n.r(S),n.d(S,{json:()=>Ux});var N={};n.r(N),n.d(N,{json:()=>Vx});var I={};n.r(I),n.d(I,{json:()=>jx});var A={};n.r(A),n.d(A,{json:()=>Hx});var D={};n.r(D),n.d(D,{json:()=>Gx});var T={};n.r(T),n.d(T,{json:()=>Xx});var F={};n.r(F),n.d(F,{json:()=>Kx});var R={};n.r(R),n.d(R,{json:()=>qx});var O={};n.r(O),n.d(O,{json:()=>Yx});var M={};n.r(M),n.d(M,{json:()=>Jx});var B={};n.r(B),n.d(B,{json:()=>Zx});var $={};n.r($),n.d($,{json:()=>Qx});var P={};n.r(P),n.d(P,{json:()=>ek});var L={};n.r(L),n.d(L,{json:()=>tk});var z={};n.r(z),n.d(z,{json:()=>nk});var W={};n.r(W),n.d(W,{CSVDataset:()=>AE,Dataset:()=>yE,FileDataSource:()=>WE,TextLineDataset:()=>xE,URLDataSource:()=>UE,array:()=>vE,csv:()=>VE,func:()=>jE,generator:()=>HE,microphone:()=>XE,version_data:()=>KE,webcam:()=>GE,zip:()=>wE});var U={};n.r(U),n.d(U,{addImpl:()=>SC,bincountImpl:()=>bS,bincountReduceImpl:()=>vS,ceilImpl:()=>xS,concatImpl:()=>IS,expImpl:()=>_N,expm1Impl:()=>SN,floorImpl:()=>VN,gatherV2Impl:()=>ZN,greaterImpl:()=>eI,lessImpl:()=>dI,linSpaceImpl:()=>vI,logImpl:()=>_I,maxImpl:()=>BI,maximumImpl:()=>LI,minimumImpl:()=>qI,multiplyImpl:()=>nN,negImpl:()=>sA,notEqualImpl:()=>dA,prodImpl:()=>SA,rangeImpl:()=>IA,rsqrtImpl:()=>zA,simpleAbsImpl:()=>MC,sliceImpl:()=>pS,sparseFillEmptyRowsImpl:()=>iD,sparseReshapeImpl:()=>lD,squaredDifferenceImpl:()=>mD,stridedSliceImpl:()=>wD,subImpl:()=>FN,tileImpl:()=>CD,topKImpl:()=>SD,transposeImpl:()=>UC,uniqueImpl:()=>TD});class V{constructor(e,t){this.backend=e,this.dataMover=t,this.data=new WeakMap,this.dataIdsCount=0}get(e){return this.data.has(e)||this.dataMover.moveData(this.backend,e),this.data.get(e)}set(e,t){this.dataIdsCount++,this.data.set(e,t)}has(e){return this.data.has(e)}delete(e){return this.dataIdsCount--,this.data.delete(e)}numDataIds(){return this.dataIdsCount}}class j{refCount(e){return H("refCount")}incRef(e){return H("incRef")}timerAvailable(){return!0}time(e){return H("time")}read(e){return H("read")}readSync(e){return H("readSync")}numDataIds(){return H("numDataIds")}disposeData(e,t){return H("disposeData")}write(e,t,n){return H("write")}move(e,t,n,r,a){return H("move")}memory(){return H("memory")}floatPrecision(){return H("floatPrecision")}epsilon(){return 32===this.floatPrecision()?1e-7:1e-4}dispose(){return H("dispose")}}function H(e){throw new Error(`'${e}' not yet implemented or not found in the registry. This kernel may not be supported by the tfjs backend you have chosen`)}function G(e){let t=e.length,n=0,r=0;for(;t>0;)r=Math.random()*t|0,t--,n=e[t],e[t]=e[r],e[r]=n}function X(e,t){if(e.length!==t.length)throw new Error(`Array sizes must match to be shuffled together First array length was ${e.length}Second array length was ${t.length}`);let n,r,a=e.length,s=0;for(;a>0;)s=Math.random()*a|0,a--,n=e[a],r=t[a],e[a]=e[s],t[a]=t[s],e[s]=n,t[s]=r}function K(e,t,n){return Math.max(e,Math.min(t,n))}function q(e){return e%2==0?e:e+1}function Y(e){let t=0;for(let n=0;nn+` Shapes ${e} and ${t} must match`))}function te(e){Q(null!=e,(()=>"The input to the tensor constructor must be a non-null value."))}function ne(e,t=[],n=!1){if(null==t&&(t=[]),Array.isArray(e)||we(e)&&!n)for(let r=0;r0),n){return new Promise(((r,a)=>{let s=0;const i=()=>{if(e())return void r();s++;const o=t(s);null!=n&&s>=n?a():setTimeout(i,o)};i()}))}function fe(e,t){let n=1,r=-1;for(let t=0;t=0)n*=e[t];else if(-1===e[t]){if(-1!==r)throw Error(`Shapes can only have 1 implicit size. Found -1 at dim ${r} and dim ${t}`);r=t}else if(e[t]<0)throw Error(`Shapes can not be < 0. Found ${e[t]} at dim ${t}`);if(-1===r){if(t>0&&t!==n)throw Error(`Size(${t}) must match the product of shape ${e}`);return e}if(0===n)throw Error(`Cannot infer the missing size in [${e}] when there are 0 elements`);if(t%n!=0)throw Error(`The implicit shape can't be a fractional number. Got ${t} / ${n}`);const a=e.slice();return a[r]=t/n,a}function de(e,t){const n=t.length;return Q((e=null==e?t.map(((e,t)=>t)):[].concat(e)).every((e=>e>=-n&&e`All values in axis param must be in range [-${n}, ${n}) but got axis ${e}`)),Q(e.every((e=>ie(e))),(()=>`All values in axis param must be integers but got axis ${e}`)),e.map((e=>e<0?n+e:e))}function pe(e,t){const n=[],r=[],a=null!=t&&Array.isArray(t)&&0===t.length,s=null==t||a?null:de(t,e).sort();let i=0;for(let t=0;tt)&&1===e[t]&&(n.push(e[t]),r.push(t)),s[i]<=t&&i++}1!==e[t]&&(n.push(e[t]),r.push(t))}return{newShape:n,keptDims:r}}function me(e,t){let n=null;if(null==e||"float32"===e)n=new Float32Array(t);else if("int32"===e)n=new Int32Array(t);else{if("bool"!==e)throw new Error(`Unknown data type ${e}`);n=new Uint8Array(t)}return n}function ge(e,t){let n=null;if(null==e||"float32"===e)n=new Float32Array(t);else if("int32"===e)n=new Int32Array(t);else if("bool"===e)n=new Uint8Array(t);else{if("string"!==e)throw new Error(`Unknown data type ${e}`);n=new Array(t)}return n}function ye(e,t){for(let n=0;nt+=e.length)),t}function ke(e){return"string"==typeof e||e instanceof String}function Ee(e){return"boolean"==typeof e}function Ce(e){return"number"==typeof e}function Se(e){return Array.isArray(e)?Se(e[0]):e instanceof Float32Array?"float32":e instanceof Int32Array||e instanceof Uint8Array?"int32":Ce(e)?"float32":ke(e)?"string":Ee(e)?"bool":"float32"}function Ne(e){return!!(e&&e.constructor&&e.call&&e.apply)}function Ie(e,t){for(let n=t;n=0;--r)n[r]=n[r+1]*e[r+1];return n}function De(e,t,n,r=!1){const a=new Array;if(1===t.length){const s=t[0]*(r?2:1);for(let t=0;te*t))*(r?2:1);for(let t=0;te*t))*(n?2:1);if(0===r)return[];if(r!==t.length)throw new Error(`[${e}] does not match the input size ${t.length}${n?" for a complex tensor":""}.`);return De(0,e,t,n)}function Fe(e,t){const n=Re(e,t);for(let e=0;ee*t),1);if(null==t||"float32"===t)return Te(e,new Float32Array(n));if("int32"===t)return Te(e,new Int32Array(n));if("bool"===t)return Te(e,new Uint8Array(n));throw new Error(`Unknown data type ${t}`)}function Me(e){e.forEach((t=>{Q(Number.isInteger(t)&&t>=0,(()=>`Tensor must have a shape comprised of positive integers but got shape [${e}].`))}))}function Be(e,t,n){if(0===t)return 0;if(1===t)return e[0];let r=e[e.length-1];for(let t=0;t{const[t,n]=e.split(":");this.urlFlags[t]=function(e,t){if("true"===(t=t.toLowerCase())||"false"===t)return"true"===t;if(""+ +t===t)return+t;throw new Error(`Could not parse value flag value ${t} for flag ${e}.`)}(t,n)}))}}function ze(e){const t={};return e.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g,((e,...n)=>(function(e,t,n){e[decodeURIComponent(t)]=decodeURIComponent(n||"")}(t,n[0],n[1]),n.join("=")))),t}function We(){return Ve}let Ue,Ve=null;function je(){if(null==Ue){let e;if("undefined"!=typeof window)e=window;else if(void 0!==n.g)e=n.g;else if("undefined"!=typeof process)e=process;else{if("undefined"==typeof self)throw new Error("Could not find a global object");e=self}Ue=e}return Ue}function He(e,t){const n=function(){const e=je();return null==e._tfGlobals&&(e._tfGlobals=new Map),e._tfGlobals}();if(n.has(e))return n.get(e);{const r=t();return n.set(e,r),n.get(e)}}const Ge="Abs",Xe="Acos",Ke="Acosh",qe="Add",Ye="AddN",Je="All",Ze="Any",Qe="ArgMax",et="ArgMin",tt="Asin",nt="Asinh",rt="Atan",at="Atanh",st="Atan2",it="AvgPool",ot="AvgPoolGrad",lt="AvgPool3D",ut="AvgPool3DGrad",ct="BatchMatMul",ht="BatchToSpaceND",ft="Bincount",dt="BroadcastTo",pt="Cast",mt="Ceil",gt="ClipByValue",yt="Complex",bt="ComplexAbs",vt="Concat",wt="Conv2D",_t="Conv2DBackpropFilter",xt="Conv2DBackpropInput",kt="Conv3D",Et="Conv3DBackpropFilterV2",Ct="Conv3DBackpropInputV2",St="Cos",Nt="Cosh",It="Cumsum",At="CropAndResize",Dt="DenseBincount",Tt="DepthToSpace",Ft="DepthwiseConv2dNative",Rt="DepthwiseConv2dNativeBackpropFilter",Ot="DepthwiseConv2dNativeBackpropInput",Mt="Diag",Bt="Dilation2D",$t="Dilation2DBackpropInput",Pt="Dilation2DBackpropFilter",Lt="RealDiv",zt="Einsum",Wt="Elu",Ut="EluGrad",Vt="Erf",jt="Equal",Ht="Exp",Gt="ExpandDims",Xt="Expm1",Kt="FFT",qt="Fill",Yt="FlipLeftRight",Jt="Floor",Zt="FloorDiv",Qt="FusedBatchNorm",en="GatherV2",tn="GatherNd",nn="Greater",rn="GreaterEqual",an="Identity",sn="IFFT",on="Imag",ln="IsFinite",un="IsInf",cn="IsNan",hn="LeakyRelu",fn="Less",dn="LessEqual",pn="LinSpace",mn="Log",gn="Log1p",yn="LogicalAnd",bn="LogicalNot",vn="LogicalOr",wn="LogSoftmax",_n="LRN",xn="LRNGrad",kn="Max",En="Maximum",Cn="MaxPool",Sn="MaxPoolGrad",Nn="MaxPool3D",In="MaxPool3DGrad",An="MaxPoolWithArgmax",Dn="Mean",Tn="Min",Fn="Minimum",Rn="MirrorPad",On="Mod",Mn="Multinomial",Bn="Multiply",$n="Neg",Pn="NotEqual",Ln="NonMaxSuppressionV3",zn="NonMaxSuppressionV4",Wn="NonMaxSuppressionV5",Un="OnesLike",Vn="OneHot",jn="Pack",Hn="PadV2",Gn="Pool",Xn="Pow",Kn="Prelu",qn="Prod",Yn="Range",Jn="Real",Zn="Reciprocal",Qn="Relu",er="Reshape",tr="ResizeNearestNeighbor",nr="ResizeNearestNeighborGrad",rr="ResizeBilinear",ar="ResizeBilinearGrad",sr="Relu6",ir="Reverse",or="Round",lr="Rsqrt",ur="ScatterNd",cr="Select",hr="Selu",fr="Slice",dr="Sin",pr="Sinh",mr="Sign",gr="Sigmoid",yr="Softplus",br="Sqrt",vr="Sum",wr="SpaceToBatchND",_r="SplitV",xr="Softmax",kr="SparseFillEmptyRows",Er="SparseReshape",Cr="SparseToDense",Sr="SquaredDifference",Nr="Square",Ir="StridedSlice",Ar="Sub",Dr="Tan",Tr="Tanh",Fr="Tile",Rr="TopK",Or="Transform",Mr="Transpose",Br="Unique",$r="Unpack",Pr="UnsortedSegmentSum",Lr="ZerosLike",zr="Step",Wr="FromPixels",Ur="RotateWithOffset",Vr="_FusedMatMul",jr="FusedConv2D",Hr="FusedDepthwiseConv2D",Gr=He("kernelRegistry",(()=>new Map)),Xr=He("gradRegistry",(()=>new Map));function Kr(e,t){const n=na(e,t);return Gr.get(n)}function qr(e){return Xr.get(e)}function Yr(e){const t=Gr.entries(),n=[];for(;;){const{done:r,value:a}=t.next();if(r)break;const[s,i]=a,[o]=s.split("_");o===e&&n.push(i)}return n}function Jr(e){const{kernelName:t,backendName:n}=e,r=na(t,n);Gr.has(r)&&console.warn(`The kernel '${t}' for backend '${n}' is already registered`),Gr.set(r,e)}function Zr(e){const{kernelName:t}=e;Xr.has(t)&&We().getBool("DEBUG")&&console.warn(`Overriding the gradient for '${t}'`),Xr.set(t,e)}function Qr(e,t){const n=na(e,t);if(!Gr.has(n))throw new Error(`The kernel '${e}' for backend '${t}' is not registered`);Gr.delete(n)}function ea(e){if(!Xr.has(e))throw new Error(`The gradient '${e}' for backend is not registered`);Xr.delete(e)}function ta(e,t){Yr(e).forEach((e=>{Jr(Object.assign({},e,{backendName:t}))}))}function na(e,t){return`${t}_${e}`}function ra(e,t){return"string"===t?oa(e):aa([e],t)}function aa(e,t){if("string"===t)throw new Error("Cannot convert a string[] to a TypedArray");if(Array.isArray(e)&&(e=ne(e)),We().getBool("DEBUG")&&ye(e,t),function(e,t){return e instanceof Float32Array&&"float32"===t||e instanceof Int32Array&&"int32"===t||e instanceof Uint8Array&&"bool"===t}(e,t))return e;if(null==t||"float32"===t||"complex64"===t)return new Float32Array(e);if("int32"===t)return new Int32Array(e);if("bool"===t){const t=new Uint8Array(e.length);for(let n=0;n{r=n()};let s;const i=sa();if(this.backendTimer.timerAvailable())s=this.backendTimer.time(a);else{a();for(const e of r)e.dataSync();s=Promise.resolve({kernelMs:sa()-i})}if(We().getBool("CHECK_COMPUTATION_FOR_ERRORS"))for(let t=0;t{ca(t,n.dtype,e)}))}return{kernelName:e,outputs:r,inputs:t,timeMs:s.then((e=>e.kernelMs)),extraInfo:s.then((e=>null!=e.getExtraProfileInfo?e.getExtraProfileInfo():""))}}logKernelProfile(e){const{kernelName:t,outputs:n,timeMs:r,inputs:a,extraInfo:s}=e;n.forEach((e=>{Promise.all([e.data(),r,s]).then((n=>{this.logger.logKernelProfile(t,e,n[0],n[1],a,n[2])}))}))}}function ca(e,t,n){if("float32"!==t)return!1;for(let t=0;t0?r:""} `}}console.log(`%c${o}\t%c${i}\t%c${l}D ${c}\t%c${u}\t%c${h}\t%c${s}`,"font-weight:bold","color:red","color:blue","color: orange","color: green","color: steelblue")}}function fa(e,t,n,r){const a=Ae(t),s=function(e,t,n,r){const a=re(t),s=r[r.length-1],i=new Array(s).fill(0),o=t.length,l="complex64"===n?ga(e):e;if(o>1)for(let e=0;e" "+e)).join("\n")),l.join("\n")}function da(e,t,n){let r;return r=Array.isArray(e)?`${parseFloat(e[0].toFixed(7))} + ${parseFloat(e[1].toFixed(7))}j`:ke(e)?`'${e}'`:"bool"===n?pa(e):parseFloat(e.toFixed(7)).toString(),ce(r,t)}function pa(e){return 0===e?"false":"true"}function ma(e,t,n,r,a,s=!0){const i="complex64"===n?2:1,o=t[0],l=t.length;if(0===l)return"complex64"===n?[da(ga(e)[0],0,n)]:"bool"===n?[pa(e[0])]:[e[0].toString()];if(1===l){if(o>20){const t=3*i;let r=Array.from(e.slice(0,t)),s=Array.from(e.slice((o-3)*i,o*i));return"complex64"===n&&(r=ga(r),s=ga(s)),["["+r.map(((e,t)=>da(e,a[t],n))).join(", ")+", ..., "+s.map(((e,t)=>da(e,a[o-3+t],n))).join(", ")+"]"]}return["["+("complex64"===n?ga(e):Array.from(e)).map(((e,t)=>da(e,a[t],n))).join(", ")+"]"]}const u=t.slice(1),c=r.slice(1),h=r[0]*i,f=[];if(o>20){for(let t=0;t<3;t++){const r=t*h,s=r+h;f.push(...ma(e.slice(r,s),u,n,c,a,!1))}f.push("...");for(let t=o-3;t`Length of values '${e}' does not match the size inferred by the shape '${this.size}'.`))}if("complex64"===t)throw new Error("complex64 dtype TensorBuffers are not supported. Please create a TensorBuffer for the real and imaginary parts separately and call tf.complex(real, imag).");this.values=n||ge(t,this.size),this.strides=Ae(e)}set(e,...t){0===t.length&&(t=[0]),Q(t.length===this.rank,(()=>`The number of provided coordinates (${t.length}) must match the rank (${this.rank})`));const n=this.locToIndex(t);this.values[n]=e}get(...e){0===e.length&&(e=[0]);let t=0;for(const n of e){if(n<0||n>=this.shape[t]){const t=`Requested out of range element at ${e}. Buffer shape=${this.shape}`;throw new Error(t)}t++}let n=e[e.length-1];for(let t=0;tla(e)))}catch(e){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}}return e}dataSync(){this.throwIfDisposed();const e=ba().readSync(this.dataId);if("string"===this.dtype)try{return e.map((e=>la(e)))}catch(e){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}return e}async bytes(){this.throwIfDisposed();const e=await ba().read(this.dataId);return"string"===this.dtype?e:new Uint8Array(e.buffer)}dispose(){this.isDisposed||(ba().disposeTensor(this),this.isDisposedInternal=!0)}get isDisposed(){return this.isDisposedInternal}throwIfDisposed(){if(this.isDisposed)throw new Error("Tensor is disposed.")}print(e=!1){return va.print(this,e)}clone(){return this.throwIfDisposed(),va.clone(this)}toString(e=!1){return fa(this.dataSync(),this.shape,this.dtype,e)}cast(e){return this.throwIfDisposed(),va.cast(this,e)}variable(e=!0,t,n){return this.throwIfDisposed(),ba().makeVariable(this,e,t,n)}}function xa(){return He("Tensor",(()=>_a))}Object.defineProperty(_a,Symbol.hasInstance,{value:e=>!!e&&null!=e.data&&null!=e.dataSync&&null!=e.throwIfDisposed}),xa();class ka extends _a{constructor(e,t,n,r){super(e.shape,e.dtype,e.dataId,r),this.trainable=t,this.name=n}assign(e){if(e.dtype!==this.dtype)throw new Error(`dtype of the new value (${e.dtype}) and previous value (${this.dtype}) must match`);if(!se(e.shape,this.shape))throw new Error(`shape of the new value (${e.shape}) and previous value (${this.shape}) must match`);ba().disposeTensor(this),this.dataId=e.dataId,ba().incRef(this,null)}dispose(){ba().disposeVariable(this),this.isDisposedInternal=!0}}var Ea,Ca,Sa,Na,Ia;Object.defineProperty(ka,Symbol.hasInstance,{value:e=>e instanceof _a&&null!=e.assign&&e.assign instanceof Function}),function(e){e.R0="R0",e.R1="R1",e.R2="R2",e.R3="R3",e.R4="R4",e.R5="R5",e.R6="R6"}(Ea||(Ea={})),function(e){e.float32="float32",e.int32="int32",e.bool="int32",e.complex64="complex64"}(Ca||(Ca={})),function(e){e.float32="float32",e.int32="int32",e.bool="bool",e.complex64="complex64"}(Sa||(Sa={})),function(e){e.float32="float32",e.int32="float32",e.bool="float32",e.complex64="complex64"}(Na||(Na={})),function(e){e.float32="complex64",e.int32="complex64",e.bool="complex64",e.complex64="complex64"}(Ia||(Ia={}));const Aa={float32:Na,int32:Ca,bool:Sa,complex64:Ia};function Da(e,t){if("string"===e||"string"===t){if("string"===e&&"string"===t)return"string";throw new Error(`Can not upcast ${e} with ${t}`)}return Aa[e][t]}function Ta(e){return Da(e,"int32")}function Fa(e,t){if(e.dtype===t.dtype)return[e,t];const n=Da(e.dtype,t.dtype);return[e.cast(n),t.cast(n)]}function Ra(e,t){Q(e.dtype===t.dtype,(()=>`The dtypes of the first(${e.dtype}) and second(${t.dtype}) input must match`))}function Oa(e,t){return t.some((t=>t.id===e.id))}function Ma(e){const t=[];return Ba(e,t,new Set),t}function Ba(e,t,n){if(null==e)return;if(e instanceof _a)return void t.push(e);if(r=e,!Array.isArray(r)&&"object"!=typeof r)return;var r;const a=e;for(const e in a){const r=a[e];n.has(r)||(n.add(r),Ba(r,t,n))}}function $a(e){return null!=e.kernelName}class Pa{constructor(){this.registeredVariables={},this.nextTapeNodeId=0,this.numBytes=0,this.numTensors=0,this.numStringTensors=0,this.numDataBuffers=0,this.gradientDepth=0,this.kernelDepth=0,this.scopeStack=[],this.numDataMovesStack=[],this.nextScopeId=0,this.tensorInfo=new WeakMap,this.profiling=!1,this.activeProfile={newBytes:0,newTensors:0,peakBytes:0,kernels:[],result:null,get kernelNames(){return Array.from(new Set(this.kernels.map((e=>e.name))))}}}dispose(){for(const e in this.registeredVariables)this.registeredVariables[e].dispose()}}class La{constructor(e){this.ENV=e,this.registry={},this.registryFactory={},this.pendingBackendInitId=0,this.state=new Pa}async ready(){if(null!=this.pendingBackendInit)return this.pendingBackendInit.then((()=>{}));if(null!=this.backendInstance)return;const e=this.getSortedBackends();for(let t=0;t{null!=e.setupFunc&&e.setupFunc(this.backendInstance)}))}disposeRegisteredKernels(e){Yr(e).forEach((t=>{null!=t.disposeFunc&&t.disposeFunc(this.registry[e])}))}initializeBackend(e){const t=this.registryFactory[e];if(null==t)throw new Error(`Cannot initialize backend ${e}, no registration found.`);try{const n=t.factory();if(!n||n instanceof j||"function"!=typeof n.then)return this.registry[e]=n,{success:!0,asyncInit:!1};{const t=++this.pendingBackendInitId,r=n.then((n=>!(t(tthis.registryFactory[t].priority-this.registryFactory[e].priority))}initializeBackendsAndReturnBest(){const e=this.getSortedBackends();for(let t=0;tthis.startScope(r)),(()=>this.endScope(n)),(()=>(n=t(),n instanceof Promise&&console.error("Cannot return a Promise inside of tidy."),n)))}scopedRun(e,t,n){e();try{const e=n();return t(),e}catch(e){throw t(),e}}nextTensorId(){return La.nextTensorId++}nextVariableId(){return La.nextVariableId++}clone(e){const t=Wa.runKernel(an,{x:e}),n={x:e};return this.addTapeNode(this.state.activeScope.name,n,[t],(e=>({x:()=>{const t={x:e};return Wa.runKernel(pt,t,{dtype:"float32"})}})),[],{}),t}runKernel(e,t,n){if(null==Kr(e,this.backendName))throw new Error(`Kernel '${e}' not registered for backend '${this.backendName}'`);return this.runKernelFunc({kernelName:e,inputs:t,attrs:n})}shouldCheckForMemLeaks(){return this.ENV.getBool("IS_TEST")}checkKernelForMemLeak(e,t,n){const r=this.backend.numDataIds();let a=0;n.forEach((e=>{a+="complex64"===e.dtype?3:1}));const s=this.state.numDataMovesStack[this.state.numDataMovesStack.length-1],i=r-t-a-s;if(i>0)throw new Error(`Backend '${this.backendName}' has an internal memory leak (${i} data ids) after running '${e}'`)}runKernelFunc(e){let t,n=[];const r=this.isTapeOn(),a=this.state.numBytes,s=this.state.numTensors;let i,o;this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack.push(0),null==this.backendName&&this.backend;const l=$a(e)?e.kernelName:null!=this.state.activeScope?this.state.activeScope.name:"";if($a(e)){const{kernelName:t,inputs:a,attrs:s}=e;null==this.backendName&&this.backend;const l=Kr(t,this.backendName);Q(null!=l,(()=>`Cannot find registered kernel '${t}' for backend '${this.backendName}'`)),i=()=>{const e=this.backend.numDataIds();o=l.kernelFunc({inputs:a,attrs:s,backend:this.backend});const i=Array.isArray(o)?o:[o];this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(t,e,i);const u=i.map((e=>{if(null!=e.rank)return e;const{dataId:t,shape:n,dtype:r}=e;return this.makeTensorFromDataId(t,n,r)}));if(r){const e=this.getTensorsForGradient(t,a,u);n=this.saveTensorsForBackwardMode(e)}return u}}else{const{forwardFunc:t}=e,a=e=>{r&&(n=e.map((e=>this.keep(this.clone(e)))))};i=()=>{const e=this.backend.numDataIds();o=this.tidy((()=>t(this.backend,a)));const n=Array.isArray(o)?o:[o];return this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(l,e,n),n}}const{inputs:u,attrs:c}=e,h=$a(e)?null:e.backwardsFunc;let f;return this.scopedRun((()=>this.state.kernelDepth++),(()=>this.state.kernelDepth--),(()=>{this.ENV.getBool("DEBUG")||this.state.profiling?(f=this.profiler.profileKernel(l,u,(()=>i())),this.ENV.getBool("DEBUG")&&this.profiler.logKernelProfile(f),t=f.outputs):t=i()})),r&&this.addTapeNode(l,u,t,h,n,c),this.state.profiling&&this.state.activeProfile.kernels.push({name:l,bytesAdded:this.state.numBytes-a,totalBytesSnapshot:this.state.numBytes,tensorsAdded:this.state.numTensors-s,totalTensorsSnapshot:this.state.numTensors,inputShapes:Object.keys(u).map((e=>null!=u[e]?u[e].shape:null)),outputShapes:t.map((e=>e.shape)),kernelTimeMs:f.timeMs,extraInfo:f.extraInfo}),Array.isArray(o)?t:t[0]}saveTensorsForBackwardMode(e){return e.map((e=>this.keep(this.clone(e))))}getTensorsForGradient(e,t,n){const r=qr(e);if(null!=r){const e=r.inputsToSave||[],a=r.outputsToSave||[];let s;r.saveAllInputs?(Q(Array.isArray(t),(()=>"saveAllInputs is true, expected inputs to be an array.")),s=Object.keys(t).map((e=>t[e]))):s=e.map((e=>t[e]));const i=n.filter(((e,t)=>a[t]));return s.concat(i)}return[]}makeTensor(e,t,n,r){if(null==e)throw new Error("Values passed to engine.makeTensor() are null");n=n||"float32",r=r||this.backend;let a=e;"string"===n&&ke(e[0])&&(a=e.map((e=>oa(e))));const s=r.write(a,t,n),i=new _a(t,n,s,this.nextTensorId());if(this.trackTensor(i,r),"string"===n){const e=this.state.tensorInfo.get(s),t=xe(a);this.state.numBytes+=t-e.bytes,e.bytes=t}return i}makeTensorFromDataId(e,t,n,r){const a=new _a(t,n=n||"float32",e,this.nextTensorId());return this.trackTensor(a,r),a}makeVariable(e,t=!0,n,r){n=n||this.nextVariableId().toString(),null!=r&&r!==e.dtype&&(e=e.cast(r));const a=new ka(e,t,n,this.nextTensorId());if(null!=this.state.registeredVariables[a.name])throw new Error(`Variable with name ${a.name} was already registered`);return this.state.registeredVariables[a.name]=a,this.incRef(a,this.backend),a}trackTensor(e,t){this.state.numTensors++,"string"===e.dtype&&this.state.numStringTensors++;let n=0;"complex64"!==e.dtype&&"string"!==e.dtype&&(n=e.size*_e(e.dtype)),this.state.numBytes+=n,this.state.tensorInfo.has(e.dataId)||(this.state.numDataBuffers++,this.state.tensorInfo.set(e.dataId,{backend:t||this.backend,dtype:e.dtype,shape:e.shape,bytes:n})),e instanceof ka||this.track(e)}incRef(e,t){this.trackTensor(e,t),this.backend.incRef(e.dataId)}removeDataId(e,t){this.state.tensorInfo.has(e)&&this.state.tensorInfo.get(e).backend===t&&(this.state.tensorInfo.delete(e),this.state.numDataBuffers--)}disposeTensor(e){if(!this.state.tensorInfo.has(e.dataId))return;const t=this.state.tensorInfo.get(e.dataId);if(this.state.numTensors--,"string"===e.dtype&&(this.state.numStringTensors--,this.state.numBytes-=t.bytes),"complex64"!==e.dtype&&"string"!==e.dtype){const t=e.size*_e(e.dtype);this.state.numBytes-=t}t.backend.disposeData(e.dataId)&&this.removeDataId(e.dataId,t.backend)}disposeVariables(){for(const e in this.state.registeredVariables){const t=this.state.registeredVariables[e];this.disposeVariable(t)}}disposeVariable(e){this.disposeTensor(e),null!=this.state.registeredVariables[e.name]&&delete this.state.registeredVariables[e.name]}memory(){const e=this.backend.memory();return e.numTensors=this.state.numTensors,e.numDataBuffers=this.state.numDataBuffers,e.numBytes=this.state.numBytes,this.state.numStringTensors>0&&(e.unreliable=!0,null==e.reasons&&(e.reasons=[]),e.reasons.push("Memory usage by string tensors is approximate (2 bytes per character)")),e}async profile(e){this.state.profiling=!0;const t=this.state.numBytes,n=this.state.numTensors;this.state.activeProfile.kernels=[],this.state.activeProfile.result=await e(),this.state.profiling=!1,this.state.activeProfile.peakBytes=Math.max(...this.state.activeProfile.kernels.map((e=>e.totalBytesSnapshot))),this.state.activeProfile.newBytes=this.state.numBytes-t,this.state.activeProfile.newTensors=this.state.numTensors-n;for(const e of this.state.activeProfile.kernels)e.kernelTimeMs=await e.kernelTimeMs,e.extraInfo=await e.extraInfo;return this.state.activeProfile}isTapeOn(){return this.state.gradientDepth>0&&0===this.state.kernelDepth}addTapeNode(e,t,n,r,a,s){const i={id:this.state.nextTapeNodeId++,kernelName:e,inputs:t,outputs:n,saved:a},o=qr(e);null!=o&&(r=o.gradFunc),null!=r&&(i.gradient=e=>(e=e.map(((e,t)=>{if(null==e){const e=n[t],r=Re(e.size,e.dtype);return this.makeTensor(r,e.shape,e.dtype)}return e})),r(e.length>1?e:e[0],a,s))),this.state.activeTape.push(i)}keep(e){return e.kept=!0,e}startTape(){0===this.state.gradientDepth&&(this.state.activeTape=[]),this.state.gradientDepth++}endTape(){this.state.gradientDepth--}startScope(e){const t={track:[],name:"unnamed scope",id:this.state.nextScopeId++};e&&(t.name=e),this.state.scopeStack.push(t),this.state.activeScope=t}endScope(e){const t=Ma(e),n=new Set(t.map((e=>e.id)));for(let e=0;e{e.kept||e.scopeId!==r.id||this.track(e)}))}gradients(e,t,n,r=!1){if(Q(t.length>0,(()=>"gradients() received an empty list of xs.")),null!=n&&"float32"!==n.dtype)throw new Error(`dy must have 'float32' dtype, but has '${n.dtype}'`);const a=this.scopedRun((()=>this.startTape()),(()=>this.endTape()),(()=>this.tidy("forward",e)));Q(a instanceof _a,(()=>"The result y returned by f() must be a tensor."));const s=function(e,t,n){const r={},a={};for(let e=0;er[e.id]=!0)),o=!0,a[s.id]=!0;break}if(o)break}}const s={};s[n.id]=!0;const i={};for(let t=e.length-1;t>=0;t--){const n=e[t],r=n.inputs;for(let e=0;e0)throw new Error("Cannot compute gradient of y=f(x) with respect to x. Make sure that the f you passed encloses all operations that lead from x to y.");return this.tidy("backward",(()=>{const e={};e[a.id]=null==n?function(e){const t=Fe(re(e),"float32");return Wa.makeTensor(t,e,"float32")}(a.shape):n,function(e,t,n,r){for(let a=t.length-1;a>=0;a--){const s=t[a],i=[];if(s.outputs.forEach((t=>{const n=e[t.id];null!=n?i.push(n):i.push(null)})),null==s.gradient)throw new Error(`Cannot compute gradient: gradient function not found for ${s.kernelName}.`);const o=s.gradient(i);for(const t in s.inputs){if(!(t in o))throw new Error(`Cannot backprop through input ${t}. Available gradients found: ${Object.keys(o)}.`);const a=n((()=>o[t]()));if("float32"!==a.dtype)throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input ${t} must have 'float32' dtype, but has '${a.dtype}'`);const i=s.inputs[t];if(!se(a.shape,i.shape))throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input '${t}' has shape '${a.shape}', which does not match the shape of the input '${i.shape}'`);if(null==e[i.id])e[i.id]=a;else{const t=e[i.id];e[i.id]=r(t,a),t.dispose()}}}}(e,s,(e=>this.tidy(e)),Ua);const r=t.map((t=>e[t.id]));return 0===this.state.gradientDepth&&(this.state.activeTape.forEach((e=>{for(const t of e.saved)t.dispose()})),this.state.activeTape=null),{value:a,grads:r}}))}customGrad(e){return Q(Ne(e),(()=>"The f passed in customGrad(f) must be a function.")),(...t)=>{let n;Q(t.every((e=>e instanceof _a)),(()=>"The args passed in customGrad(f)(x1, x2,...) must all be tensors"));const r={};return t.forEach(((e,t)=>{r[t]=e})),this.runKernelFunc({forwardFunc:(r,a)=>(n=e(...t,a),Q(n.value instanceof _a,(()=>"The function f passed in customGrad(f) must return an object where `obj.value` is a tensor")),Q(Ne(n.gradFunc),(()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function.")),n.value),backwardsFunc:(e,r)=>{const a=n.gradFunc(e,r),s=Array.isArray(a)?a:[a];Q(s.length===t.length,(()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns the same number of tensors as inputs passed to f(...).")),Q(s.every((e=>e instanceof _a)),(()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns a list of only tensors."));const i={};return s.forEach(((e,t)=>{i[t]=()=>e})),i},inputs:r})}}readSync(e){return this.state.tensorInfo.get(e).backend.readSync(e)}read(e){return this.state.tensorInfo.get(e).backend.read(e)}async time(e){const t=sa(),n=await this.backend.time(e);return n.wallMs=sa()-t,n}track(e){return null!=this.state.activeScope&&(e.scopeId=this.state.activeScope.id,this.state.activeScope.track.push(e)),e}get registeredVariables(){return this.state.registeredVariables}reset(){this.pendingBackendInitId++,this.state.dispose(),this.ENV.reset(),this.state=new Pa;for(const e in this.registry)this.disposeRegisteredKernels(e),this.registry[e].dispose(),delete this.registry[e];this.backendName=null,this.backendInstance=null,this.pendingBackendInit=null}}function za(){const e=je();if(null==e._tfengine){const t=new Le(e);e._tfengine=new La(t)}var t;return t=e._tfengine.ENV,Ve=t,ba=()=>e._tfengine,e._tfengine}La.nextTensorId=0,La.nextVariableId=0;const Wa=za();function Ua(e,t){const n={a:e,b:t};return Wa.runKernel(qe,n)}function Va(e){if(e||"undefined"!=typeof navigator&&null!=navigator){if(e||(e=navigator),"ReactNative"===e.product)return!0;const t=e.userAgent||e.vendor||window.opera;return/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(t)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(t.substr(0,4))}return!1}function ja(){return"undefined"!=typeof window&&null!=window.document||"undefined"!=typeof WorkerGlobalScope}const Ha=We();function Ga(e,t){let n=e;if(we(e))return"string"===t?[]:[e.length];if(!Array.isArray(e))return[];const r=[];for(;Array.isArray(n)||we(n)&&"string"!==t;)r.push(n.length),n=n[0];return Array.isArray(e)&&We().getBool("TENSORLIKE_CHECK_SHAPE_CONSISTENCY")&&Xa(e,r,[]),r}function Xa(e,t,n){if(n=n||[],!Array.isArray(e)&&!we(e))return void Q(0===t.length,(()=>`Element arr[${n.join("][")}] is a primitive, but should be an array/TypedArray of ${t[0]} elements`));Q(t.length>0,(()=>`Element arr[${n.join("][")}] should be a primitive, but is an array of ${e.length} elements`)),Q(e.length===t[0],(()=>`Element arr[${n.join("][")}] should have ${t[0]} elements, but has ${e.length} elements`));const r=t.slice(1);for(let t=0;t=0&&(a=r),Ka(r,a,t,n),null==e||!we(e)&&!Array.isArray(e)&&"number"!=typeof e&&"boolean"!=typeof e&&"string"!=typeof e){const r=null==e?"null":e.constructor.name;throw new Error(`Argument '${t}' passed to '${n}' must be a Tensor or TensorLike, but got '${r}'`)}const s=Ga(e,a);we(e)||Array.isArray(e)||(e=[e]);const i="string"!==a?aa(e,a):ne(e,[],!0);return Wa.makeTensor(i,s,a)}function Ya(e,t,n,r="numeric"){if(!Array.isArray(e))throw new Error(`Argument ${t} passed to ${n} must be a \`Tensor[]\` or \`TensorLike[]\``);return e.map(((e,a)=>qa(e,`${t}[${a}]`,n,r)))}Ha.registerFlag("DEBUG",(()=>!1),(e=>{e&&console.warn("Debugging mode is ON. The output of every math call will be downloaded to CPU and checked for NaNs. This significantly impacts performance.")})),Ha.registerFlag("IS_BROWSER",(()=>ja())),Ha.registerFlag("IS_NODE",(()=>"undefined"!=typeof process&&void 0!==process.versions&&void 0!==process.versions.node)),Ha.registerFlag("IS_CHROME",(()=>"undefined"!=typeof navigator&&null!=navigator&&null!=navigator.userAgent&&/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor))),Ha.registerFlag("PROD",(()=>!1)),Ha.registerFlag("TENSORLIKE_CHECK_SHAPE_CONSISTENCY",(()=>Ha.getBool("DEBUG"))),Ha.registerFlag("DEPRECATION_WARNINGS_ENABLED",(()=>!0)),Ha.registerFlag("IS_TEST",(()=>!1)),Ha.registerFlag("CHECK_COMPUTATION_FOR_ERRORS",(()=>!0)),Ha.registerFlag("WRAP_TO_IMAGEBITMAP",(()=>!1));const Ja="__op";function Za(e){const t=Object.keys(e);if(1!==t.length)throw new Error(`Please provide an object with a single key (operation name) mapping to a function. Got an object with ${t.length} keys.`);let n=t[0];const r=e[n];n.endsWith("_")&&(n=n.substring(0,n.length-1)),n+=Ja;const a=(...e)=>{Wa.startScope(n);try{const t=r(...e);return Pe(t)&&console.error("Cannot return a Promise inside of tidy."),Wa.endScope(t),t}catch(e){throw Wa.endScope(null),e}};return Object.defineProperty(a,"name",{value:n,configurable:!0}),a}const Qa=Za({complex_:function(e,t){const n=qa(e,"real","complex"),r=qa(t,"imag","complex");ee(n.shape,r.shape,`real and imag shapes, ${n.shape} and ${r.shape}, must match in call to tf.complex().`);const a={real:n,imag:r};return Wa.runKernel(yt,a)}});function es(e,t,n,r){if(null==r&&(r=Se(e)),"complex64"===r)throw new Error("Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).");if(!we(e)&&!Array.isArray(e)&&"number"!=typeof e&&"boolean"!=typeof e&&"string"!=typeof e)throw new Error("values passed to tensor(values) must be a number/boolean/string or an array of numbers/booleans/strings, or a TypedArray");if(null!=t){Me(t);const e=re(t),r=re(n);Q(e===r,(()=>`Based on the provided shape, [${t}], the tensor should have ${e} values but has ${r}`));for(let e=0;e`Error creating a new Tensor. Inferred shape (${n}) does not match the provided shape (${t}). `))}}return we(e)||Array.isArray(e)||(e=[e]),t=t||n,e="string"!==r?aa(e,r):ne(e,[],!0),Wa.makeTensor(e,t,r)}function ts(e,t,n){return es(e,t,Ga(e,n),n)}const ns={float32:4,float16:2,int32:4,uint16:2,uint8:1,bool:1,complex64:8};async function rs(e,t){const n=[],r=[],a=Array.isArray(e)?e.map((e=>e.name)):Object.keys(e);for(let s=0;s{const t=await o.bytes(),n=t.reduce(((e,t)=>e+t.length),0)+4*t.length,r=new Uint8Array(n);let a=0;for(let e=0;e{if(t+=e.byteLength,n.push(e.byteLength===e.buffer.byteLength?e:new e.constructor(e)),!(e instanceof Float32Array||e instanceof Int32Array||e instanceof Uint8Array))throw new Error(`Unsupported TypedArray subtype: ${e.constructor.name}`)}));const r=new Uint8Array(t);let a=0;return n.forEach((e=>{r.set(new Uint8Array(e.buffer),a),a+=e.byteLength})),r.buffer}const is="undefined"!=typeof Buffer&&("undefined"==typeof Blob||"undefined"==typeof atob||"undefined"==typeof btoa);function os(e){return is?Buffer.byteLength(e):new Blob([e]).size}function ls(e){if(1===e.length)return e[0];let t=0;e.forEach((e=>{t+=e.byteLength}));const n=new Uint8Array(t);let r=0;return e.forEach((e=>{n.set(new Uint8Array(e),r),r+=e.byteLength})),n.buffer}function us(e){for(e=e.trim();e.endsWith("/");)e=e.slice(0,e.length-1);const t=e.split("/");return t[t.length-1]}function cs(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("Expected JSON model topology, received ArrayBuffer.");return{dateSaved:new Date,modelTopologyType:"JSON",modelTopologyBytes:null==e.modelTopology?0:os(JSON.stringify(e.modelTopology)),weightSpecsBytes:null==e.weightSpecs?0:os(JSON.stringify(e.weightSpecs)),weightDataBytes:null==e.weightData?0:e.weightData.byteLength}}function hs(){const e=function(){const e=e=>{let t=e<<13,n=0;for(;0==(8388608&t);)n-=8388608,t<<=1;return t&=-8388609,n+=947912704,t|n},t=new Uint32Array(2048);t[0]=0;for(let n=1;n<1024;n++)t[n]=e(n);for(let e=1024;e<2048;e++)t[e]=939524096+(e-1024<<13);return t}(),t=function(){const e=new Uint32Array(64);e[0]=0,e[31]=1199570944,e[32]=2147483648,e[63]=3347054592;for(let t=1;t<31;t++)e[t]=t<<23;for(let t=33;t<63;t++)e[t]=2147483648+(t-32<<23);return e}(),n=function(){const e=new Uint32Array(64);for(let t=0;t<64;t++)e[t]=1024;return e[0]=e[32]=0,e}();return r=>{const a=new ArrayBuffer(4*r.length),s=new Uint32Array(a);for(let a=0;a>10]+(1023&i)]+t[i>>10];s[a]=o}return new Float32Array(a)}}class fs{constructor(){this.saveRouters=[],this.loadRouters=[]}static getInstance(){return null==fs.instance&&(fs.instance=new fs),fs.instance}static registerSaveRouter(e){fs.getInstance().saveRouters.push(e)}static registerLoadRouter(e){fs.getInstance().loadRouters.push(e)}static getSaveHandlers(e){return fs.getHandlers(e,"save")}static getLoadHandlers(e,t){return fs.getHandlers(e,"load",t)}static getHandlers(e,t,n){const r=[];return("load"===t?fs.getInstance().loadRouters:fs.getInstance().saveRouters).forEach((t=>{const a=t(e,n);null!==a&&r.push(a)})),r}}const ds=e=>fs.registerSaveRouter(e),ps=e=>fs.registerLoadRouter(e),ms=e=>fs.getSaveHandlers(e),gs=(e,t)=>fs.getLoadHandlers(e,t),ys="tensorflowjs",bs="models_store",vs="model_info_store";function ws(){if(!We().getBool("IS_BROWSER"))throw new Error("Failed to obtain IndexedDB factory because the current environmentis not a web browser.");const e="undefined"==typeof window?self:window,t=e.indexedDB||e.mozIndexedDB||e.webkitIndexedDB||e.msIndexedDB||e.shimIndexedDB;if(null==t)throw new Error("The current browser does not appear to support IndexedDB.");return t}function _s(e){const t=e.result;t.createObjectStore(bs,{keyPath:"modelPath"}),t.createObjectStore(vs,{keyPath:"modelPath"})}class xs{constructor(e){if(this.indexedDB=ws(),null==e||!e)throw new Error("For IndexedDB, modelPath must not be null, undefined or empty.");this.modelPath=e}async save(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet.");return this.databaseAction(this.modelPath,e)}async load(){return this.databaseAction(this.modelPath)}databaseAction(e,t){return new Promise(((e,n)=>{const r=this.indexedDB.open(ys,1);r.onupgradeneeded=()=>_s(r),r.onsuccess=()=>{const a=r.result;if(null==t){const t=a.transaction(bs,"readonly"),r=t.objectStore(bs).get(this.modelPath);r.onsuccess=()=>{if(null==r.result)return a.close(),n(new Error(`Cannot find model with path '${this.modelPath}' in IndexedDB.`));e(r.result.modelArtifacts)},r.onerror=e=>(a.close(),n(r.error)),t.oncomplete=()=>a.close()}else{const r=cs(t),s=a.transaction(vs,"readwrite");let i=s.objectStore(vs);const o=i.put({modelPath:this.modelPath,modelArtifactsInfo:r});let l;o.onsuccess=()=>{l=a.transaction(bs,"readwrite");const o=l.objectStore(bs).put({modelPath:this.modelPath,modelArtifacts:t,modelArtifactsInfo:r});o.onsuccess=()=>e({modelArtifactsInfo:r}),o.onerror=e=>{i=s.objectStore(vs);const t=i.delete(this.modelPath);t.onsuccess=()=>(a.close(),n(o.error)),t.onerror=e=>(a.close(),n(o.error))}},o.onerror=e=>(a.close(),n(o.error)),s.oncomplete=()=>{null==l?a.close():l.oncomplete=()=>a.close()}}},r.onerror=e=>n(r.error)}))}}xs.URL_SCHEME="indexeddb://";const ks=e=>{return We().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(xs.URL_SCHEME)?(t=e.slice(xs.URL_SCHEME.length),new xs(t)):null;var t};fs.registerSaveRouter(ks),fs.registerLoadRouter(ks);class Es{constructor(){this.indexedDB=ws()}async listModels(){return new Promise(((e,t)=>{const n=this.indexedDB.open(ys,1);n.onupgradeneeded=()=>_s(n),n.onsuccess=()=>{const r=n.result,a=r.transaction(vs,"readonly"),s=a.objectStore(vs).getAll();s.onsuccess=()=>{const t={};for(const e of s.result)t[e.modelPath]=e.modelArtifactsInfo;e(t)},s.onerror=e=>(r.close(),t(s.error)),a.oncomplete=()=>r.close()},n.onerror=e=>t(n.error)}))}async removeModel(e){var t;return e=(t=e).startsWith(xs.URL_SCHEME)?t.slice(xs.URL_SCHEME.length):t,new Promise(((t,n)=>{const r=this.indexedDB.open(ys,1);r.onupgradeneeded=()=>_s(r),r.onsuccess=()=>{const a=r.result,s=a.transaction(vs,"readwrite"),i=s.objectStore(vs),o=i.get(e);let l;o.onsuccess=()=>{if(null==o.result)return a.close(),n(new Error(`Cannot find model with path '${e}' in IndexedDB.`));{const r=i.delete(e),s=()=>{l=a.transaction(bs,"readwrite");const r=l.objectStore(bs).delete(e);r.onsuccess=()=>t(o.result.modelArtifactsInfo),r.onerror=e=>n(o.error)};r.onsuccess=s,r.onerror=e=>(s(),a.close(),n(o.error))}},o.onerror=e=>(a.close(),n(o.error)),s.oncomplete=()=>{null==l?a.close():l.oncomplete=()=>a.close()}},r.onerror=e=>n(r.error)}))}}const Cs="/",Ss="tensorflowjs_models",Ns="info",Is="model_topology",As="weight_specs",Ds="weight_data",Ts="model_metadata";function Fs(e){return{info:[Ss,e,Ns].join(Cs),topology:[Ss,e,Is].join(Cs),weightSpecs:[Ss,e,As].join(Cs),weightData:[Ss,e,Ds].join(Cs),modelMetadata:[Ss,e,Ts].join(Cs)}}function Rs(e){const t=e.split(Cs);if(t.length<3)throw new Error(`Invalid key format: ${e}`);return t.slice(1,t.length-1).join(Cs)}class Os{constructor(e){if(!We().getBool("IS_BROWSER")||"undefined"==typeof window||void 0===window.localStorage)throw new Error("The current environment does not support local storage.");if(this.LS=window.localStorage,null==e||!e)throw new Error("For local storage, modelPath must not be null, undefined or empty.");this.modelPath=e,this.keys=Fs(this.modelPath)}async save(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet.");{const t=JSON.stringify(e.modelTopology),n=JSON.stringify(e.weightSpecs),r=cs(e);try{this.LS.setItem(this.keys.info,JSON.stringify(r)),this.LS.setItem(this.keys.topology,t),this.LS.setItem(this.keys.weightSpecs,n),this.LS.setItem(this.keys.weightData,function(e){if(is)return Buffer.from(e).toString("base64");const t=new Uint8Array(e);let n="";for(let e=0,r=t.length;e{return We().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(Os.URL_SCHEME)?(t=e.slice(Os.URL_SCHEME.length),new Os(t)):null;var t};fs.registerSaveRouter(Ms),fs.registerLoadRouter(Ms);class Bs{constructor(){Q(We().getBool("IS_BROWSER"),(()=>"Current environment is not a web browser")),Q("undefined"==typeof window||void 0!==window.localStorage,(()=>"Current browser does not appear to support localStorage")),this.LS=window.localStorage}async listModels(){const e={},t=Ss+Cs,n=Cs+Ns;for(let r=0;r"scheme must not be undefined or null.")),e.endsWith($s)&&(e=e.slice(0,e.indexOf($s))),Q(e.length>0,(()=>"scheme must not be an empty string."));const n=Ps.getInstance();Q(null==n.managers[e],(()=>`A model store manager is already registered for scheme '${e}'.`)),n.managers[e]=t}static getManager(e){const t=this.getInstance().managers[e];if(null==t)throw new Error(`Cannot find model manager for scheme '${e}'`);return t}static getSchemes(){return Object.keys(this.getInstance().managers)}}function Ls(e){if(-1===e.indexOf($s))throw new Error(`The url string provided does not contain a scheme. Supported schemes are: ${Ps.getSchemes().join(",")}`);return{scheme:e.split($s)[0],path:e.split($s)[1]}}async function zs(e,t,n=!1){Q(e!==t,(()=>`Old path and new path are the same: '${e}'`));const r=fs.getLoadHandlers(e);Q(r.length>0,(()=>`Copying failed because no load handler is found for source URL ${e}.`)),Q(r.length<2,(()=>`Copying failed because more than one (${r.length}) load handlers for source URL ${e}.`));const a=r[0],s=fs.getSaveHandlers(t);Q(s.length>0,(()=>`Copying failed because no save handler is found for destination URL ${t}.`)),Q(s.length<2,(()=>`Copying failed because more than one (${r.length}) save handlers for destination URL ${t}.`));const i=s[0],o=Ls(e).scheme,l=Ls(e).path,u=o===Ls(e).scheme,c=await a.load();n&&u&&await Ps.getManager(o).removeModel(l);const h=await i.save(c);return n&&!u&&await Ps.getManager(o).removeModel(l),h.modelArtifactsInfo}async function Ws(){const e=Ps.getSchemes(),t={};for(const n of e){const e=await Ps.getManager(n).listModels();for(const r in e)t[n+$s+r]=e[r]}return t}async function Us(e){const t=Ls(e);return Ps.getManager(t.scheme).removeModel(t.path)}async function Vs(e,t){return zs(e,t,!1)}async function js(e,t){return zs(e,t,!0)}class Hs{fetch(e,t){return fetch(e,t)}now(){return performance.now()}encode(e,t){if("utf-8"!==t&&"utf8"!==t)throw new Error(`Browser's encoder only supports utf-8, but got ${t}`);return null==this.textEncoder&&(this.textEncoder=new TextEncoder),this.textEncoder.encode(e)}decode(e,t){return new TextDecoder(t).decode(e)}}if(We().get("IS_BROWSER")){We().setPlatform("browser",new Hs);try{Ps.registerManager(Os.URL_SCHEME,new Bs)}catch(e){}try{Ps.registerManager(xs.URL_SCHEME,new Es)}catch(e){}}let Gs;function Xs(e,t="float32",n){return t=t||"float32",Me(e),new ya(e,t,n)}We().get("IS_NODE")&&We().setPlatform("node",new class{constructor(){this.util=n(1758),this.textEncoder=new this.util.TextEncoder}fetch(e,t){return null!=We().global.fetch?We().global.fetch(e,t):(null==Gs&&(Gs=n(8352)),Gs(e,t))}now(){const e=process.hrtime();return 1e3*e[0]+e[1]/1e6}encode(e,t){if("utf-8"!==t&&"utf8"!==t)throw new Error(`Node built-in encoder only supports utf-8, but got ${t}`);return this.textEncoder.encode(e)}decode(e,t){return 0===e.length?"":new this.util.TextDecoder(t).decode(e)}});const Ks=Za({cast_:function(e,t){const n=qa(e,"x","cast");if(!be(t))throw new Error(`Failed to cast to unknown dtype ${t}`);if("string"===t&&"string"!==n.dtype||"string"!==t&&"string"===n.dtype)throw new Error("Only strings can be casted to strings");const r={x:n},a={dtype:t};return Wa.runKernel(pt,r,a)}}),qs=Za({clone_:function(e){const t={x:qa(e,"x","clone","string_or_numeric")};return Wa.runKernel(an,t)}});function Ys(e,t=!1){console.log(e.toString(t))}function Js(e){return new Promise((e=>setTimeout(e))).then(e)}za(),va={buffer:Xs,cast:Ks,clone:qs,print:Ys};class Zs{constructor(e){if(!We().getBool("IS_BROWSER"))throw new Error("browserDownloads() cannot proceed because the current environment is not a browser.");e.startsWith(Zs.URL_SCHEME)&&(e=e.slice(Zs.URL_SCHEME.length)),null!=e&&0!==e.length||(e="model"),this.modelTopologyFileName=e+".json",this.weightDataFileName=e+".weights.bin"}async save(e){if("undefined"==typeof document)throw new Error("Browser downloads are not supported in this environment since `document` is not present");const t=window.URL.createObjectURL(new Blob([e.weightData],{type:"application/octet-stream"}));if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserDownloads.save() does not support saving model topology in binary formats yet.");{const n=[{paths:["./"+this.weightDataFileName],weights:e.weightSpecs}],r={modelTopology:e.modelTopology,format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy,weightsManifest:n};null!=e.signature&&(r.signature=e.signature),null!=e.userDefinedMetadata&&(r.userDefinedMetadata=e.userDefinedMetadata),null!=e.modelInitializer&&(r.modelInitializer=e.modelInitializer);const a=window.URL.createObjectURL(new Blob([JSON.stringify(r)],{type:"application/json"})),s=null==this.jsonAnchor?document.createElement("a"):this.jsonAnchor;if(s.download=this.modelTopologyFileName,s.href=a,await Js((()=>s.dispatchEvent(new MouseEvent("click")))),null!=e.weightData){const e=null==this.weightDataAnchor?document.createElement("a"):this.weightDataAnchor;e.download=this.weightDataFileName,e.href=t,await Js((()=>e.dispatchEvent(new MouseEvent("click"))))}return{modelArtifactsInfo:cs(e)}}}}Zs.URL_SCHEME="downloads://";class Qs{constructor(e){if(null==e||e.length<1)throw new Error(`When calling browserFiles, at least 1 file is required, but received ${e}`);this.files=e}async load(){const e=this.files[0],t=this.files.slice(1);return new Promise(((n,r)=>{const a=new FileReader;a.onload=a=>{const s=JSON.parse(a.target.result),i=s.modelTopology;if(null==i)return void r(new Error(`modelTopology field is missing from file ${e.name}`));0===t.length&&n({modelTopology:i});const o=s.weightsManifest;if(null==o)return void r(new Error(`weightManifest field is missing from file ${e.name}`));let l;try{l=this.checkManifestAndWeightFiles(o,t)}catch(e){return void r(e)}const u=[],c=[],h=[];o.forEach((e=>{e.paths.forEach((e=>{c.push(e),h.push(null)})),u.push(...e.weights)})),o.forEach((e=>{e.paths.forEach((e=>{const t=new FileReader;t.onload=t=>{const r=t.target.result,a=c.indexOf(e);if(h[a]=r,-1===h.indexOf(null)){const e={modelTopology:i,weightSpecs:u,weightData:ls(h),format:s.format,generatedBy:s.generatedBy,convertedBy:s.convertedBy};null!=s.signature&&(e.signature=s.signature),null!=s.userDefinedMetadata&&(e.userDefinedMetadata=s.userDefinedMetadata),null!=s.modelInitializer&&(e.modelInitializer=s.modelInitializer),n(e)}},t.onerror=t=>r(`Failed to weights data from file of path '${e}'.`),t.readAsArrayBuffer(l[e])}))}))},a.onerror=t=>r(`Failed to read model topology and weights manifest JSON from file '${e.name}'. BrowserFiles supports loading Keras-style tf.Model artifacts only.`),a.readAsText(e)}))}checkManifestAndWeightFiles(e,t){const n=[],r=t.map((e=>us(e.name))),a={};for(const s of e)s.paths.forEach((e=>{const s=us(e);if(-1!==n.indexOf(s))throw new Error(`Duplicate file basename found in weights manifest: '${s}'`);if(n.push(s),-1===r.indexOf(s))throw new Error(`Weight file with basename '${s}' is not provided.`);a[e]=t[r.indexOf(s)]}));if(n.length!==t.length)throw new Error(`Mismatch in the number of files in weights manifest (${n.length}) and the number of weight files provided (${t.length}).`);return a}}function ei(e){return new Qs(e)}function ti(e,t,n,r){!function(e){Q(null!=e&&Array.isArray(e)&&e.length>0,(()=>"promises must be a none empty array"))}(e),function(e,t){Q(e>=0&&e<=1,(()=>`Progress fraction must be in range [0, 1], but got startFraction ${e}`)),Q(t>=0&&t<=1,(()=>`Progress fraction must be in range [0, 1], but got endFraction ${t}`)),Q(t>=e,(()=>`startFraction must be no more than endFraction, but got startFraction ${e} and endFraction ${t}`))}(n=null==n?0:n,r=null==r?1:r);let a=0;return Promise.all(e.map((s=>(s.then((s=>{const i=n+ ++a/e.length*(r-n);return t(i),s})),s))))}async function ni(e,t){null==t&&(t={});const n=null==t.fetchFunc?We().platform.fetch:t.fetchFunc,r=e.map((e=>n(e,t.requestInit,{isBinary:!0}))),a=(null==t.onProgress?await Promise.all(r):await ti(r,t.onProgress,0,.5)).map((e=>e.arrayBuffer()));return null==t.onProgress?await Promise.all(a):await ti(a,t.onProgress,.5,1)}async function ri(e,t="",n,r){return ai((e=>ni(e,{requestInit:r})))(e,t,n)}function ai(e){return async(t,n="",r)=>{const a=t.map((()=>!1)),s={},i=null!=r?r.map((()=>!1)):[],o=[];if(t.forEach(((e,t)=>{let n=0;e.weights.forEach((e=>{const l="quantization"in e?e.quantization.dtype:e.dtype,u=ns[l]*re(e.shape),c=()=>{a[t]=!0,null==s[t]&&(s[t]=[]),s[t].push({manifestEntry:e,groupOffset:n,sizeBytes:u})};null!=r?r.forEach(((t,n)=>{t===e.name&&(c(),i[n]=!0)})):c(),o.push(e.name),n+=u}))})),!i.every((e=>e))){const e=r.filter(((e,t)=>!i[t]));throw new Error(`Could not find weights in manifest with names: ${e.join(", ")}. \nManifest JSON has weights with names: ${o.join(", ")}.`)}const l=a.reduce(((e,t,n)=>(t&&e.push(n),e)),[]),u=[];l.forEach((e=>{t[e].paths.forEach((e=>{const t=n+(n.endsWith("/")?"":"/")+e;u.push(t)}))}));const c=await e(u),h={};let f=0;return l.forEach((e=>{const n=t[e].paths.length;let r=0;for(let e=0;e{const t=as(a.slice(e.groupOffset,e.groupOffset+e.sizeBytes),[e.manifestEntry]);for(const e in t)h[e]=t[e]})),f+=n})),h}}fs.registerSaveRouter((e=>We().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(Zs.URL_SCHEME)?function(e="model"){return new Zs(e)}(e.slice(Zs.URL_SCHEME.length)):null));class si{constructor(e,t){if(this.DEFAULT_METHOD="POST",null==t&&(t={}),this.weightPathPrefix=t.weightPathPrefix,this.onProgress=t.onProgress,this.weightUrlConverter=t.weightUrlConverter,null!=t.fetchFunc?(Q("function"==typeof t.fetchFunc,(()=>"Must pass a function that matches the signature of `fetch` (see https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)")),this.fetch=t.fetchFunc):this.fetch=We().platform.fetch,Q(null!=e&&e.length>0,(()=>"URL path for http must not be null, undefined or empty.")),Array.isArray(e)&&Q(2===e.length,(()=>`URL paths for http must have a length of 2, (actual length is ${e.length}).`)),this.path=e,null!=t.requestInit&&null!=t.requestInit.body)throw new Error("requestInit is expected to have no pre-existing body, but has one.");this.requestInit=t.requestInit||{}}async save(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserHTTPRequest.save() does not support saving model topology in binary formats yet.");const t=Object.assign({method:this.DEFAULT_METHOD},this.requestInit);t.body=new FormData;const n=[{paths:["./model.weights.bin"],weights:e.weightSpecs}],r={modelTopology:e.modelTopology,format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy,weightsManifest:n};null!=e.signature&&(r.signature=e.signature),null!=e.userDefinedMetadata&&(r.userDefinedMetadata=e.userDefinedMetadata),null!=e.modelInitializer&&(r.modelInitializer=e.modelInitializer),t.body.append("model.json",new Blob([JSON.stringify(r)],{type:"application/json"}),"model.json"),null!=e.weightData&&t.body.append("model.weights.bin",new Blob([e.weightData],{type:"application/octet-stream"}),"model.weights.bin");const a=await this.fetch(this.path,t);if(a.ok)return{modelArtifactsInfo:cs(e),responses:[a]};throw new Error(`BrowserHTTPRequest.save() failed due to HTTP response status ${a.status}.`)}async load(){const e=await this.fetch(this.path,this.requestInit);if(!e.ok)throw new Error(`Request to ${this.path} failed with status code ${e.status}. Please verify this URL points to the model JSON of the model to load.`);let t;try{t=await e.json()}catch(e){let t=`Failed to parse model JSON of response from ${this.path}.`;throw this.path.endsWith(".pb")?t+=" Your path contains a .pb file extension. Support for .pb models have been removed in TensorFlow.js 1.0 in favor of .json models. You can re-convert your Python TensorFlow model using the TensorFlow.js 1.0 conversion scripts or you can convert your.pb models with the 'pb2json'NPM script in the tensorflow/tfjs-converter repository.":t+=" Please make sure the server is serving valid JSON for this request.",new Error(t)}const n=t.modelTopology,r=t.weightsManifest,a=t.generatedBy,s=t.convertedBy,i=t.format,o=t.signature,l=t.userDefinedMetadata;if(null==n&&null==r)throw new Error(`The JSON from HTTP path ${this.path} contains neither model topology or manifest for weights.`);let u,c;if(null!=r){const e=await this.loadWeights(r);[u,c]=e}const h={modelTopology:n,weightSpecs:u,weightData:c,generatedBy:a,convertedBy:s,format:i};null!=o&&(h.signature=o),null!=l&&(h.userDefinedMetadata=l);const f=t.modelInitializer;return f&&(h.modelInitializer=f),h}async loadWeights(e){const t=Array.isArray(this.path)?this.path[1]:this.path,[n,r]=function(e){const t=e.lastIndexOf("/"),n=e.lastIndexOf("?");return[e.substring(0,t)+"/",n>t?e.substring(n):""]}(t),a=this.weightPathPrefix||n,s=[];for(const t of e)s.push(...t.weights);const i=[],o=[];for(const t of e)for(const e of t.paths)null!=this.weightUrlConverter?o.push(this.weightUrlConverter(e)):i.push(a+e+r);return this.weightUrlConverter&&i.push(...await Promise.all(o)),[s,ls(await ni(i,{requestInit:this.requestInit,fetchFunc:this.fetch,onProgress:this.onProgress}))]}}function ii(e){return null!=e.match(si.URL_SCHEME_REGEX)}si.URL_SCHEME_REGEX=/^https?:\/\//;const oi=(e,t)=>{if("undefined"==typeof fetch&&(null==t||null==t.fetchFunc))return null;{let n=!0;if(n=Array.isArray(e)?e.every((e=>ii(e))):ii(e),n)return li(e,t)}return null};function li(e,t){return new si(e,t)}function ui(e,t){return li(e,t)}fs.registerSaveRouter(oi),fs.registerLoadRouter(oi);class ci{constructor(e){this.modelArtifacts=e}async load(){return this.modelArtifacts}}class hi{constructor(e){this.saveHandler=e}async save(e){return this.saveHandler(e)}}function fi(e,t,n,r){return 1===arguments.length?null!=e.modelTopology||null!=e.weightSpecs?new ci(e):(console.warn("Please call tf.io.fromMemory() with only one argument. The argument should be of type ModelArtifacts. The multi-argument signature of tf.io.fromMemory() has been deprecated and will be removed in a future release."),new ci({modelTopology:e})):(console.warn("Please call tf.io.fromMemory() with only one argument. The argument should be of type ModelArtifacts. The multi-argument signature of tf.io.fromMemory() has been deprecated and will be removed in a future release."),new ci({modelTopology:e,weightSpecs:t,weightData:n,trainingConfig:r}))}function di(e){return new hi(e)}const pi=Za({matMul_:function(e,t,n=!1,r=!1){let a=qa(e,"a","matMul"),s=qa(t,"b","matMul");[a,s]=Fa(a,s);const i={a,b:s},o={transposeA:n,transposeB:r};return Wa.runKernel(ct,i,o)}}),mi=Za({oneHot_:function(e,t,n=1,r=0){if(t<2)throw new Error(`Error in oneHot: depth must be >=2, but it is ${t}`);const a={indices:qa(e,"indices","oneHot","int32")},s={depth:t,onValue:n,offValue:r};return Wa.runKernel(Vn,a,s)}}),gi=Za({transpose_:function(e,t){const n=qa(e,"x","transpose");if(null==t&&(t=n.shape.map(((e,t)=>t)).reverse()),Q(n.rank===t.length,(()=>`Error in transpose: rank of input ${n.rank} must match length of perm ${t}.`)),t.forEach((e=>{Q(e>=0&&e"All entries in 'perm' must be between 0 and "+(n.rank-1)+` but got ${t}`))})),n.rank<=1)return n.clone();const r={x:n},a={perm:t};return Wa.runKernel(Mr,r,a)}}),yi=Za({confusionMatrix_:function(e,t,n){const r=qa(e,"labels","confusionMatrix"),a=qa(t,"predictions","confusionMatrix");Q(null==n||n>0&&Number.isInteger(n),(()=>`If provided, numClasses must be a positive integer, but got ${n}`)),Q(1===r.rank,(()=>`Expected the rank of labels to be 1, but got ${r.rank}`)),Q(1===a.rank,(()=>`Expected the rank of predictions to be 1, but got ${a.rank}`)),Q(r.shape[0]===a.shape[0],(()=>`Mismatch in the number of examples: ${r.shape[0]} vs. ${a.shape[0]}. Labels and predictions should have the same number of elements.`)),Q(n>0&&Number.isInteger(n),(()=>`numClasses is required to be a positive integer, but got ${n}`));const s=mi(Ks(r,"int32"),n),i=mi(Ks(a,"int32"),n),o=gi(s),l=pi(o,i);return Ks(l,"int32")}});function bi(e,t,n){if(te(e),null!=t&&3!==t.length)throw new Error("tensor3d() requires shape to have three numbers");const r=Ga(e,n);if(3!==r.length&&1!==r.length)throw new Error("tensor3d() requires values to be number[][][] or flat/TypedArray");if(1===r.length&&null==t)throw new Error("tensor3d() requires shape to be provided when `values` are a flat array");return es(e,t,r,n)}let vi;function wi(e,t=3){if(t>4)throw new Error("Cannot construct Tensor with more than 4 channels from pixels.");if(null==e)throw new Error("pixels passed to tf.browser.fromPixels() can not be null");let n=!1,r=!1,a=!1,s=!1,i=!1,o=!1;if(e.data instanceof Uint8Array)n=!0;else if("undefined"!=typeof ImageData&&e instanceof ImageData)r=!0;else if("undefined"!=typeof HTMLVideoElement&&e instanceof HTMLVideoElement)a=!0;else if("undefined"!=typeof HTMLImageElement&&e instanceof HTMLImageElement)s=!0;else if(null!=e.getContext)i=!0;else{if(!("undefined"!=typeof ImageBitmap&&e instanceof ImageBitmap))throw new Error(`pixels passed to tf.browser.fromPixels() must be either an HTMLVideoElement, HTMLImageElement, HTMLCanvasElement, ImageData in browser, or OffscreenCanvas, ImageData in webworker or {data: Uint32Array, width: number, height: number}, but was ${e.constructor.name}`);o=!0}if(a){const t=2;if(a&&e.readyState element.")}if(null!=Kr(Wr,Wa.backendName)){const n={pixels:e},r={numChannels:t};return Wa.runKernel(Wr,n,r)}const[l,u]=a?[e.videoWidth,e.videoHeight]:[e.width,e.height];let c,h;if(i?c=e.getContext("2d").getImageData(0,0,l,u).data:r||n?c=e.data:(s||a||o)&&(null==vi&&(vi=document.createElement("canvas").getContext("2d")),vi.canvas.width=l,vi.canvas.height=u,vi.drawImage(e,0,0,l,u),c=vi.getImageData(0,0,l,u).data),4===t)h=new Int32Array(c);else{const e=l*u;h=new Int32Array(e*t);for(let n=0;n4||2===s)throw new Error(`toPixels only supports depth of size 1, 3 or 4 but got ${s}`);if("float32"!==n.dtype&&"int32"!==n.dtype)throw new Error(`Unsupported type for toPixels: ${n.dtype}. Please use float32 or int32 tensors.`);const i=await n.data(),o="float32"===n.dtype?255:1,l=new Uint8ClampedArray(a*r*4);for(let e=0;e1)throw new Error(`Tensor values for a float32 Tensor must be in the range [0 - 1] but encountered ${a}.`)}else if("int32"===n.dtype&&(a<0||a>255))throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${a}.`);1===s?(t[0]=a*o,t[1]=a*o,t[2]=a*o):t[r]=a*o}const r=4*e;l[r+0]=Math.round(t[0]),l[r+1]=Math.round(t[1]),l[r+2]=Math.round(t[2]),l[r+3]=Math.round(t[3])}if(null!=t){t.width=a,t.height=r;const e=t.getContext("2d"),n=new ImageData(l,a,r);e.putImageData(n,0,0)}return n!==e&&n.dispose(),l}const ki=Za({fromPixels_:wi});function Ei(e,t){const n=e.shape.length,r=t.shape.length;if(n<1)throw new Error(`tf.gatherND() expects the input to be rank 1 or higher, but the rank was ${n}.`);if(r<1)throw new Error(`tf.gatherND() expects the indices to be rank 1 or higher, but the rank was ${r}.`);if("int32"!==t.dtype)throw new Error(`tf.gatherND() expects the indices to be int32 type, but the dtype was ${t.dtype}.`);if(t.shape[r-1]>n)throw new Error(`index innermost dimension length must be <= tensor rank; saw: ${t.shape[r-1]} vs. ${n}`);if(0===re(e.shape))throw new Error(`Requested more than 0 entries, but input is empty. Input shape: ${e.shape}.`);const a=t.shape,s=a[a.length-1];let i=1;for(let e=0;ee/u)),1].slice(0,s);return[l,i,u,c]}function Ci(e,t,n){const r=t.rank>1?t.shape[t.rank-1]:1,a=t.rank>1?t.rank-1:1,s=`Must have updates.shape = indices.shape[:batchDim] + shape[sliceDim:], got updates.shape: ${n.shape}, indices.shape: ${t.shape}, shape: ${e}, sliceDim: ${r}, and batchDim: ${a}.`;if(n.rank1?t.shape[r-1]:1,s=n.length;let i=1;for(let e=a;e`Error in slice${r}D: Length of begin ${t} must match the rank of the array (${r}).`)),Q(r===n.length,(()=>`Error in slice${r}D: Length of size ${n} must match the rank of the array (${r}).`));for(let a=0;a`Error in slice${r}D: begin[${a}] + size[${a}] (${t[a]+n[a]}) would overflow input.shape[${a}] (${e.shape[a]})`))}function Ai(e){const t=[];let n=0;for(;e>0;)1&e&&t.push(n),e/=2,n++;return t}function Di(e,t,n){const r=[];for(let a=0;a0){const l=t[0],u=n+1;c=Mi(i,l,u,r,e),h=Bi(o,l,u,a,e),f=Ti(s,l,u,e)}else for(let t=0;t-1)s[a]=0;else{const i=Fi(t,n,a);let o=r[i];e&1<-1)s[a]=Number.MAX_SAFE_INTEGER;else{const i=Fi(t,n,a);let o=r[i];e&1<0?Number.MIN_SAFE_INTEGER:Number.MAX_SAFE_INTEGER);const l=r[a];return i<0&&(i+=l),i=K(0,i,l-1),i}function Li(e,t,n,r,a,s){let i=t[a];const o=n[a]||1;(e&1<0?Number.MAX_SAFE_INTEGER:Number.MIN_SAFE_INTEGER);const l=r[a];return i<0&&(i+=l),i=o>0?K(0,i,l):K(-1,i,l-1),i}function zi(e,t,n){let r=n.length;for(let e=0;e1){r=e;break}for(let a=r+1;a0||n[a]!==e[a])return!1;return!0}function Wi(e,t){let n=e.length>0?e[e.length-1]:1;for(let r=0;r{Q(-1!==e,(()=>"slice() does not support negative begin indexing."))})),s=null==n?new Array(a).fill(-1):"number"==typeof n?[n,...new Array(a-1).fill(-1)]:n.lengtht>=0?t:(Q(-1===t,(()=>`Negative size values should be exactly -1 but got ${t} for the slice() size at index ${n}.`)),e.shape[n]-r[n]))),[r,s]}function Vi(e,t,n,r,a,s,i,o,l){let u=t.slice(),c=n.slice(),h=r;null==r&&(h=new Array(u.length));const f=Ai(i);if(f.length>1)throw new Error("Multiple ellipses in slice is not allowed.");if(0!==i&&0!==o)throw new Error("Using both ellipsisMask and newAxisMask is not yet supported.");if(0!==i&&0!==l)throw new Error("Using both ellipsisMask and shrinkAxisMask is not yet supported.");const d=e.length-u.length,p=Ai(o),m=e.slice();p.forEach((e=>{u[e]=0,c[e]=1,m.splice(e,0,1)}));const{begin:g,end:y,strides:b}=Oi(m,f,d,u,c,h,a,s,i);u=g,c=y,h=b;const v=Ai(l);v.forEach((e=>{c[e]=u[e]+1,h[e]=1}));const w=Di(u,c,h),_=w.filter(((e,t)=>-1===v.indexOf(t)));return{nonStrided:h.every((e=>1===e)),$begin:u,$end:c,$strides:h,size:w,newShape:m,outShape:_}}class ji{getClassName(){return this.constructor.className}static fromConfig(e,t){return new e(t)}}class Hi{constructor(){this.classNameMap={}}static getMap(){return null==Hi.instance&&(Hi.instance=new Hi),Hi.instance}static register(e){Hi.getMap().classNameMap[e.className]=[e,e.fromConfig]}}function Gi(e){Q(null!=e.className,(()=>"Class being registered does not have the static className property defined.")),Q("string"==typeof e.className,(()=>"className is required to be a string, but got type "+typeof e.className)),Q(e.className.length>0,(()=>"Class being registered has an empty-string as its className, which is disallowed.")),Hi.register(e)}const Xi=.1;function Ki(e,t,n){return null==n&&(n=qi()),Yi(e,t,((e,t)=>eo(e,t,n)))}function qi(){return 32===Wa.backend.floatPrecision()?.001:Xi}function Yi(e,t,n){let r=!0;if((we(e)||we(t))&&(r=!1),we(e)&&we(t)&&(r=!0),r){const n=e.constructor.name,r=t.constructor.name;if(n!==r)throw new Error(`Arrays are of different type. Actual: ${n}. Expected: ${r}`)}if(Array.isArray(e)&&Array.isArray(t)){const n=Ga(e),r=Ga(t);if(!se(n,r))throw new Error(`Arrays have different shapes. Actual: [${n}]. Expected: [${r}]`)}const a=we(e)?e:ne(e),s=we(t)?t:ne(t);if(a.length!==s.length)throw new Error(`Arrays have different lengths actual: ${a.length} vs expected: ${s.length}.\nActual: ${a}.\nExpected: ${s}.`);for(let e=0;et.fail()),(()=>t()))}function Zi(e,t){const n="string"==typeof t||"number"==typeof t||"boolean"==typeof t?[t]:t;return ke(e)||ke(e[0])||ke(t)||ke(t[0])?Yi(e,n,((e,t)=>e==t)):Yi(e,t,((e,t)=>eo(e,t,0)))}function Qi(e,t,n){if(null==n&&(n=qi()),!eo(e,t,n))throw new Error(`Numbers differ: actual === ${e}, expected === ${t}`)}function eo(e,t,n){return!isFinite(e)&&!isFinite(t)||!(isNaN(e)||isNaN(t)||Math.abs(e-t)>n)}function to(e,t,n){for(let r=0;rn)throw new Error(`Value out of range:${e[r]} low: ${t}, high: ${n}`)}function no(e,t){expect(new Float32Array(e)).toEqual(new Float32Array(t))}function ro(e){for(let t=0;te.dispose()))}function go(e){return Wa.keep(e)}function yo(e){return Wa.time(e)}function bo(e){return Wa.setBackend(e)}function vo(){return Wa.ready()}function wo(){return Wa.backendName}function _o(e){Wa.removeBackend(e)}function xo(e){return Wa.findBackend(e)}function ko(e){return Wa.findBackendFactory(e)}function Eo(e,t,n=1){return Wa.registerBackend(e,t,n)}function Co(){return Wa.backend}function So(e,t){We().setPlatform(e,t)}wa=lo;const No=Za({add_:function(e,t){let n=qa(e,"a","add"),r=qa(t,"b","add");[n,r]=Fa(n,r);const a={a:n,b:r};return Wa.runKernel(qe,a)}}),Io=Za({floorDiv_:function(e,t){let n=qa(e,"a","floorDiv"),r=qa(t,"b","floorDiv");[n,r]=Fa(n,r);const a={a:n,b:r};return Wa.runKernel(Zt,a)}}),Ao=Za({div_:function(e,t){let n=qa(e,"a","div"),r=qa(t,"b","div");if([n,r]=Fa(n,r),"int32"===n.dtype&&"int32"===r.dtype)return Io(n,r);const a={a:n,b:r};return Wa.runKernel(Lt,a,{})}}),Do=Za({mul_:function(e,t){let n=qa(e,"a","mul"),r=qa(t,"b","mul");[n,r]=Fa(n,r);const a={a:n,b:r};return Wa.runKernel(Bn,a)}}),To=Za({sqrt_:function(e){const t={x:qa(e,"x","sqrt")};return Wa.runKernel(br,t)}}),Fo=Za({square_:function(e){const t=qa(e,"x","square");return Wa.runKernel("Square",{x:t},{})}}),Ro=Za({zerosLike_:function(e){const t={x:qa(e,"x","zerosLike")};return Wa.runKernel(Lr,t)}});function Oo(e){return Q(Ne(e),(()=>"The f passed in grad(f) must be a function")),(t,n)=>{const r=qa(t,"x","tf.grad","string_or_numeric"),a=null!=n?qa(n,"dy","tf.grad"):null;return Wa.tidy((()=>{const{value:t,grads:n}=Wa.gradients((()=>e(r)),[r],a);return null!=a&&ee(t.shape,a.shape,"The shape of dy passed in grad(f)(x, dy) must match the shape returned by f(x)"),zo(n),n[0]}))}}function Mo(e){return Q(Ne(e),(()=>"The f passed in grads(f) must be a function")),(t,n)=>{Q(Array.isArray(t),(()=>"The args passed in grads(f)(args) must be an array of `Tensor`s or `TensorLike`s"));const r=Ya(t,"args","tf.grads","string_or_numeric"),a=null!=n?qa(n,"dy","tf.grads"):null;return Wa.tidy((()=>{const{value:t,grads:n}=Wa.gradients((()=>e(...r)),r,a);return null!=a&&ee(t.shape,a.shape,"The shape of dy passed in grads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),zo(n),n}))}}function Bo(e){return Q(Ne(e),(()=>"The f passed in valueAndGrad(f) must be a function")),(t,n)=>{Q(t instanceof _a,(()=>"The x passed in valueAndGrad(f)(x) must be a tensor")),Q(null==n||n instanceof _a,(()=>"The dy passed in valueAndGrad(f)(x, dy) must be a tensor"));const{grads:r,value:a}=Wa.gradients((()=>e(t)),[t],n);return zo(r),{grad:r[0],value:a}}}function $o(e){return Q(Ne(e),(()=>"The f passed in valueAndGrads(f) must be a function")),(t,n)=>{Q(Array.isArray(t)&&t.every((e=>e instanceof _a)),(()=>"The args passed in valueAndGrads(f)(args) must be array of tensors")),Q(null==n||n instanceof _a,(()=>"The dy passed in valueAndGrads(f)(args, dy) must be a tensor"));const r=Wa.gradients((()=>e(...t)),t,n);return null!=n&&ee(r.value.shape,n.shape,"The shape of dy passed in valueAndGrads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),zo(r.grads),r}}function Po(e,t){Q(Ne(e),(()=>"The f passed in variableGrads(f) must be a function")),Q(null==t||Array.isArray(t)&&t.every((e=>e instanceof ka)),(()=>"The varList passed in variableGrads(f, varList) must be an array of variables"));const n=null!=t;if(!n){t=[];for(const e in Wa.registeredVariables)t.push(Wa.registeredVariables[e])}const r=n?t.filter((e=>!e.trainable)):null,a=t.length;Q((t=t.filter((e=>e.trainable))).length>0,(()=>`variableGrads() expects at least one of the input variables to be trainable, but none of the ${a} variables is trainable.`));const{value:s,grads:i}=Wa.gradients(e,t,null,!0);Q(i.some((e=>null!=e)),(()=>"Cannot find a connection between any variable and the result of the loss function y=f(x). Please make sure the operations that use variables are inside the function f passed to minimize().")),Q(0===s.rank,(()=>`The f passed in variableGrads(f) must return a scalar, but it returned a rank-${s.rank} tensor`));const o={};return t.forEach(((e,t)=>{null!=i[t]&&(o[e.name]=i[t])})),null!=r&&r.forEach((e=>o[e.name]=null)),{value:s,grads:o}}function Lo(e){return Wa.customGrad(e)}function zo(e){if(e.filter((e=>null==e)).length>0)throw new Error("Cannot compute gradient of y=f(x) with respect to x. Make sure that\n the f you passed encloses all operations that lead from x to y.")}function Wo(e,t){if((we(e)&&"string"!==t||Array.isArray(e))&&"complex64"!==t)throw new Error("Error creating a new Scalar: value must be a primitive (number|boolean|string)");if("string"===t&&we(e)&&!(e instanceof Uint8Array))throw new Error("When making a scalar from encoded string, the value must be `Uint8Array`.");return es(e,[],[],t)}class Uo extends ji{minimize(e,t=!1,n){const{value:r,grads:a}=this.computeGradients(e,n);if(null!=n){const e=n.map((e=>({name:e.name,tensor:a[e.name]})));this.applyGradients(e)}else this.applyGradients(a);return mo(a),t?r:(r.dispose(),null)}get iterations(){return null==this.iterations_&&(this.iterations_=0),this.iterations_}incrementIterations(){this.iterations_=this.iterations+1}computeGradients(e,t){return Po(e,t)}dispose(){null!=this.iterations_&&mo(this.iterations_)}async saveIterations(){return null==this.iterations_&&(this.iterations_=0),{name:"iter",tensor:Wo(this.iterations_,"int32")}}async getWeights(){throw new Error("getWeights() is not implemented for this optimizer yet.")}async setWeights(e){throw new Error(`setWeights() is not implemented for this optimizer class ${this.getClassName()}`)}async extractIterations(e){return this.iterations_=(await e[0].tensor.data())[0],e.slice(1)}}Object.defineProperty(Uo,Symbol.hasInstance,{value:e=>null!=e.minimize&&null!=e.computeGradients&&null!=e.applyGradients});class Vo extends Uo{constructor(e,t,n=null){super(),this.learningRate=e,this.rho=t,this.epsilon=n,this.accumulatedGrads=[],this.accumulatedUpdates=[],null==n&&(this.epsilon=Wa.backend.epsilon())}applyGradients(e){(Array.isArray(e)?e.map((e=>e.name)):Object.keys(e)).forEach(((t,n)=>{const r=Wa.registeredVariables[t];null==this.accumulatedGrads[n]&&(this.accumulatedGrads[n]={originalName:`${t}/accum_grad`,variable:po((()=>Ro(r).variable(!1)))}),null==this.accumulatedUpdates[n]&&(this.accumulatedUpdates[n]={originalName:`${t}/accum_var`,variable:po((()=>Ro(r).variable(!1)))});const a=Array.isArray(e)?e[n].tensor:e[t];if(null==a)return;const s=this.accumulatedGrads[n].variable,i=this.accumulatedUpdates[n].variable;po((()=>{const e=No(Do(s,this.rho),Do(Fo(a),1-this.rho)),t=Do(Ao(To(No(i,this.epsilon)),To(No(s,this.epsilon))),a),n=No(Do(i,this.rho),Do(Fo(t),1-this.rho));s.assign(e),i.assign(n);const o=No(Do(t,-this.learningRate),r);r.assign(o)}))})),this.incrementIterations()}dispose(){null!=this.accumulatedUpdates&&(mo(this.accumulatedGrads.map((e=>e.variable))),mo(this.accumulatedUpdates.map((e=>e.variable))))}async getWeights(){const e=[...this.accumulatedGrads,...this.accumulatedUpdates];return[await this.saveIterations()].concat(e.map((e=>({name:e.originalName,tensor:e.variable}))))}async setWeights(e){const t=(e=await this.extractIterations(e)).length/2;this.accumulatedGrads=e.slice(0,t).map((e=>({originalName:e.name,variable:e.tensor.variable(!1)}))),this.accumulatedUpdates=e.slice(t,2*t).map((e=>({originalName:e.name,variable:e.tensor.variable(!1)})))}getConfig(){return{learningRate:this.learningRate,rho:this.rho,epsilon:this.epsilon}}static fromConfig(e,t){return new e(t.learningRate,t.rho,t.epsilon)}}function jo(e,t,n){const r={shape:e,value:t,dtype:n};return Wa.runKernel(qt,{},r)}Vo.className="Adadelta",Gi(Vo);class Ho extends Uo{constructor(e,t=.1){super(),this.learningRate=e,this.initialAccumulatorValue=t,this.accumulatedGrads=[]}applyGradients(e){(Array.isArray(e)?e.map((e=>e.name)):Object.keys(e)).forEach(((t,n)=>{const r=Wa.registeredVariables[t];if(null==this.accumulatedGrads[n]){const e=!1;this.accumulatedGrads[n]={originalName:`${t}/accumulator`,variable:po((()=>jo(r.shape,this.initialAccumulatorValue).variable(e)))}}const a=Array.isArray(e)?e[n].tensor:e[t];if(null==a)return;const s=this.accumulatedGrads[n].variable;po((()=>{const e=No(s,Fo(a));s.assign(e);const t=No(Do(Ao(a,To(No(e,Wa.backend.epsilon()))),-this.learningRate),r);r.assign(t)}))})),this.incrementIterations()}dispose(){null!=this.accumulatedGrads&&mo(this.accumulatedGrads.map((e=>e.variable)))}async getWeights(){return[await this.saveIterations()].concat(this.accumulatedGrads.map((e=>({name:e.originalName,tensor:e.variable}))))}async setWeights(e){e=await this.extractIterations(e),this.accumulatedGrads=e.map((e=>({originalName:e.name,variable:e.tensor.variable(!1)})))}getConfig(){return{learningRate:this.learningRate,initialAccumulatorValue:this.initialAccumulatorValue}}static fromConfig(e,t){return new e(t.learningRate,t.initialAccumulatorValue)}}Ho.className="Adagrad",Gi(Ho);const Go=Za({pow_:function(e,t){let n=qa(e,"base","pow"),r=qa(t,"exp","pow");[n,r]=Fa(n,r);const a={a:n,b:r};return Wa.runKernel(Xn,a)}}),Xo=Za({sub_:function(e,t){let n=qa(e,"a","sub"),r=qa(t,"b","sub");[n,r]=Fa(n,r);const a={a:n,b:r};return Wa.runKernel(Ar,a)}});class Ko extends Uo{constructor(e,t,n,r=null){super(),this.learningRate=e,this.beta1=t,this.beta2=n,this.epsilon=r,this.accumulatedFirstMoment=[],this.accumulatedSecondMoment=[],po((()=>{this.accBeta1=Wo(t).variable(),this.accBeta2=Wo(n).variable()})),null==r&&(this.epsilon=Wa.backend.epsilon())}applyGradients(e){const t=Array.isArray(e)?e.map((e=>e.name)):Object.keys(e);po((()=>{const n=Xo(1,this.accBeta1),r=Xo(1,this.accBeta2);t.forEach(((t,a)=>{const s=Wa.registeredVariables[t];null==this.accumulatedFirstMoment[a]&&(this.accumulatedFirstMoment[a]={originalName:`${t}/m`,variable:po((()=>Ro(s).variable(!1)))}),null==this.accumulatedSecondMoment[a]&&(this.accumulatedSecondMoment[a]={originalName:`${t}/v`,variable:po((()=>Ro(s).variable(!1)))});const i=Array.isArray(e)?e[a].tensor:e[t];if(null==i)return;const o=this.accumulatedFirstMoment[a].variable,l=this.accumulatedSecondMoment[a].variable,u=No(Do(o,this.beta1),Do(i,1-this.beta1)),c=No(Do(l,this.beta2),Do(Fo(i),1-this.beta2)),h=Ao(u,n),f=Ao(c,r);o.assign(u),l.assign(c);const d=No(Do(Ao(h,No(To(f),this.epsilon)),-this.learningRate),s);s.assign(d)})),this.accBeta1.assign(Do(this.accBeta1,this.beta1)),this.accBeta2.assign(Do(this.accBeta2,this.beta2))})),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.accBeta2.dispose(),null!=this.accumulatedFirstMoment&&mo(this.accumulatedFirstMoment.map((e=>e.variable))),null!=this.accumulatedSecondMoment&&mo(this.accumulatedSecondMoment.map((e=>e.variable)))}async getWeights(){const e=[...this.accumulatedFirstMoment,...this.accumulatedSecondMoment];return[await this.saveIterations()].concat(e.map((e=>({name:e.originalName,tensor:e.variable}))))}async setWeights(e){e=await this.extractIterations(e),po((()=>{this.accBeta1.assign(Go(this.beta1,this.iterations_+1)),this.accBeta2.assign(Go(this.beta2,this.iterations_+1))}));const t=e.length/2;this.accumulatedFirstMoment=e.slice(0,t).map((e=>({originalName:e.name,variable:e.tensor.variable(!1)}))),this.accumulatedSecondMoment=e.slice(t,2*t).map((e=>({originalName:e.name,variable:e.tensor.variable(!1)})))}getConfig(){return{learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon}}static fromConfig(e,t){return new e(t.learningRate,t.beta1,t.beta2,t.epsilon)}}Ko.className="Adam",Gi(Ko);const qo=Za({abs_:function(e){const t=qa(e,"x","abs");if("complex64"===t.dtype){const e={x:t};return Wa.runKernel(bt,e)}{const e={x:t};return Wa.runKernel(Ge,e)}}});function Yo(e,t){const n=e.length,r=[];for(let a=0;a1&&1===i&&r.unshift(s)}return r}function Jo(e,t){const n=[];for(let r=0;r1)&&n.unshift(s)}return n}function Zo(e,t){const n=[],r=Math.max(e.length,t.length);for(let a=0;a{this.iteration=Wo(0).variable(),this.accBeta1=Wo(t).variable()})),null==r&&(this.epsilon=Wa.backend.epsilon())}applyGradients(e){const t=Array.isArray(e)?e.map((e=>e.name)):Object.keys(e);po((()=>{const n=Xo(1,this.accBeta1),r=Ao(-this.learningRate,No(Do(this.iteration,this.decay),1));t.forEach(((t,a)=>{const s=Wa.registeredVariables[t];null==this.accumulatedFirstMoment[a]&&(this.accumulatedFirstMoment[a]={originalName:`${t}/m`,variable:Ro(s).variable(!1)}),null==this.accumulatedWeightedInfNorm[a]&&(this.accumulatedWeightedInfNorm[a]={originalName:`${t}/v`,variable:Ro(s).variable(!1)});const i=Array.isArray(e)?e[a].tensor:e[t];if(null==i)return;const o=this.accumulatedFirstMoment[a].variable,l=this.accumulatedWeightedInfNorm[a].variable,u=No(Do(o,this.beta1),Do(i,1-this.beta1)),c=Do(l,this.beta2),h=qo(i),f=Qo(c,h);o.assign(u),l.assign(f);const d=No(Do(Ao(r,n),Ao(u,No(f,this.epsilon))),s);s.assign(d)})),this.iteration.assign(No(this.iteration,1)),this.accBeta1.assign(Do(this.accBeta1,this.beta1))})),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.iteration.dispose(),null!=this.accumulatedFirstMoment&&mo(this.accumulatedFirstMoment.map((e=>e.variable))),null!=this.accumulatedWeightedInfNorm&&mo(this.accumulatedWeightedInfNorm.map((e=>e.variable)))}async getWeights(){throw new Error("getWeights() is not implemented for Adamax yet.")}async setWeights(e){throw new Error("setWeights() is not implemented for Adamax yet.")}getConfig(){return{learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon,decay:this.decay}}static fromConfig(e,t){return new e(t.learningRate,t.beta1,t.beta2,t.epsilon,t.decay)}}el.className="Adamax",Gi(el);class tl extends Uo{constructor(e){super(),this.learningRate=e,this.setLearningRate(e)}applyGradients(e){(Array.isArray(e)?e.map((e=>e.name)):Object.keys(e)).forEach(((t,n)=>{const r=Array.isArray(e)?e[n].tensor:e[t];if(null==r)return;const a=Wa.registeredVariables[t];po((()=>{const e=No(Do(this.c,r),a);a.assign(e)}))})),this.incrementIterations()}setLearningRate(e){this.learningRate=e,null!=this.c&&this.c.dispose(),this.c=go(Wo(-e))}dispose(){this.c.dispose()}async getWeights(){return[await this.saveIterations()]}async setWeights(e){if(0!==(e=await this.extractIterations(e)).length)throw new Error("SGD optimizer does not have settable weights.")}getConfig(){return{learningRate:this.learningRate}}static fromConfig(e,t){return new e(t.learningRate)}}tl.className="SGD",Gi(tl);class nl extends tl{constructor(e,t,n=!1){super(e),this.learningRate=e,this.momentum=t,this.useNesterov=n,this.accumulations=[],this.m=Wo(this.momentum)}applyGradients(e){(Array.isArray(e)?e.map((e=>e.name)):Object.keys(e)).forEach(((t,n)=>{const r=Wa.registeredVariables[t];if(null==this.accumulations[n]){const e=!1;this.accumulations[n]={originalName:`${t}/momentum`,variable:po((()=>Ro(r).variable(e)))}}const a=this.accumulations[n].variable,s=Array.isArray(e)?e[n].tensor:e[t];null!=s&&po((()=>{let e;const t=No(Do(this.m,a),s);e=this.useNesterov?No(Do(this.c,No(s,Do(t,this.m))),r):No(Do(this.c,t),r),a.assign(t),r.assign(e)}))})),this.incrementIterations()}dispose(){this.m.dispose(),null!=this.accumulations&&mo(this.accumulations.map((e=>e.variable)))}setMomentum(e){this.momentum=e}async getWeights(){return[await this.saveIterations()].concat(this.accumulations.map((e=>({name:e.originalName,tensor:e.variable}))))}async setWeights(e){e=await this.extractIterations(e),this.accumulations=e.map((e=>({originalName:e.name,variable:e.tensor.variable(!1)})))}getConfig(){return{learningRate:this.learningRate,momentum:this.momentum,useNesterov:this.useNesterov}}static fromConfig(e,t){return new e(t.learningRate,t.momentum,t.useNesterov)}}nl.className="Momentum",Gi(nl);class rl extends Uo{constructor(e,t=.9,n=0,r=null,a=!1){if(super(),this.learningRate=e,this.decay=t,this.momentum=n,this.epsilon=r,this.accumulatedMeanSquares=[],this.accumulatedMoments=[],this.accumulatedMeanGrads=[],this.centered=a,null==r&&(this.epsilon=Wa.backend.epsilon()),null==e)throw new Error("learningRate for RMSPropOptimizer must be defined.")}applyGradients(e){(Array.isArray(e)?e.map((e=>e.name)):Object.keys(e)).forEach(((t,n)=>{const r=Wa.registeredVariables[t],a=!1;null==this.accumulatedMeanSquares[n]&&(this.accumulatedMeanSquares[n]={originalName:`${t}/rms`,variable:po((()=>Ro(r).variable(a)))}),null==this.accumulatedMoments[n]&&(this.accumulatedMoments[n]={originalName:`${t}/momentum`,variable:po((()=>Ro(r).variable(a)))}),null==this.accumulatedMeanGrads[n]&&this.centered&&(this.accumulatedMeanGrads[n]={originalName:`${t}/mg`,variable:po((()=>Ro(r).variable(a)))});const s=Array.isArray(e)?e[n].tensor:e[t];if(null==s)return;const i=this.accumulatedMeanSquares[n].variable,o=this.accumulatedMoments[n].variable;po((()=>{const e=No(Do(i,this.decay),Do(Fo(s),1-this.decay));if(this.centered){const t=this.accumulatedMeanGrads[n].variable,a=No(Do(t,this.decay),Do(s,1-this.decay)),l=Ao(Do(s,this.learningRate),To(Xo(e,No(Fo(a),this.epsilon)))),u=No(Do(o,this.momentum),l);i.assign(e),t.assign(a),o.assign(u);const c=Xo(r,u);r.assign(c)}else{const e=No(Do(i,this.decay),Do(Fo(s),1-this.decay)),t=No(Do(o,this.momentum),Ao(Do(s,this.learningRate),To(No(e,this.epsilon))));i.assign(e),o.assign(t);const n=Xo(r,t);r.assign(n)}}))})),this.incrementIterations()}dispose(){null!=this.accumulatedMeanSquares&&mo(this.accumulatedMeanSquares.map((e=>e.variable))),null!=this.accumulatedMeanGrads&&this.centered&&mo(this.accumulatedMeanGrads.map((e=>e.variable))),null!=this.accumulatedMoments&&mo(this.accumulatedMoments.map((e=>e.variable)))}async getWeights(){const e=[...this.accumulatedMeanSquares,...this.accumulatedMoments];return this.centered&&e.push(...this.accumulatedMeanGrads),[await this.saveIterations()].concat(e.map((e=>({name:e.originalName,tensor:e.variable}))))}async setWeights(e){e=await this.extractIterations(e);const t=this.centered?e.length/3:e.length/2,n=!1;this.accumulatedMeanSquares=e.slice(0,t).map((e=>({originalName:e.name,variable:e.tensor.variable(n)}))),this.accumulatedMoments=e.slice(t,2*t).map((e=>({originalName:e.name,variable:e.tensor.variable(n)}))),this.centered&&(this.accumulatedMeanGrads=e.slice(2*t,3*t).map((e=>({originalName:e.name,variable:e.tensor.variable(n)}))))}getConfig(){return{learningRate:this.learningRate,decay:this.decay,momentum:this.momentum,epsilon:this.epsilon,centered:this.centered}}static fromConfig(e,t){return new e(t.learningRate,t.decay,t.momentum,t.epsilon,t.centered)}}rl.className="RMSProp",Gi(rl);const al=Za({acos_:function(e){const t={x:qa(e,"x","acos")};return Wa.runKernel(Xe,t)}}),sl=Za({acosh_:function(e){const t={x:qa(e,"x","acosh")};return Wa.runKernel(Ke,t)}}),il=Za({addN_:function(e){Q(Array.isArray(e),(()=>"The argument passed to tf.addN() must be a list of tensors")),Q(e.length>=1,(()=>`Must pass at least one tensor to tf.addN(), but got ${e.length}`));const t=e.map(((e,t)=>qa(e,`tensors${t}`,"addN"))),n=t[0];t.forEach((e=>{if(e.dtype!==n.dtype)throw new Error("All tensors passed to tf.addN() must have the same dtype")})),t.forEach((e=>{if(!se(e.shape,n.shape))throw new Error("All tensors passed to tf.addN() must have the same shape")}));const r=t;return Wa.runKernel(Ye,r)}}),ol=Za({all_:function(e,t=null,n=!1){const r={x:qa(e,"x","all","bool")},a={axis:t,keepDims:n};return Wa.runKernel(Je,r,a)}}),ll=Za({any_:function(e,t=null,n=!1){const r={x:qa(e,"x","any","bool")},a={axis:t,keepDims:n};return Wa.runKernel(Ze,r,a)}}),ul=Za({argMax_:function(e,t=0){const n={x:qa(e,"x","argMax")},r={axis:t};return Wa.runKernel(Qe,n,r)}}),cl=Za({argMin_:function(e,t=0){const n={x:qa(e,"x","argMin")},r={axis:t};return Wa.runKernel(et,n,r)}}),hl=Za({asin_:function(e){const t={x:qa(e,"x","asin")};return Wa.runKernel(tt,t)}}),fl=Za({asinh_:function(e){const t={x:qa(e,"x","asinh")};return Wa.runKernel(nt,t)}}),dl=Za({atan_:function(e){const t={x:qa(e,"x","atan")};return Wa.runKernel(rt,t)}}),pl=Za({atan2_:function(e,t){let n=qa(e,"a","atan2"),r=qa(t,"b","atan2");[n,r]=Fa(n,r);const a={a:n,b:r};return Wa.runKernel(st,a)}}),ml=Za({atanh_:function(e){const t={x:qa(e,"x","atanh")};return Wa.runKernel(at,t)}});function gl(e,t,n,r,a="NHWC",s){return vl(e,[...t,e[3]],n,s,r,null,null,Il(a))}function yl(e,t,n,r,a,s,i="channelsLast"){const[o,l]=xl(t);let u;if("channelsLast"===i)u=[o,l,e[3],e[3]];else{if("channelsFirst"!==i)throw new Error(`Unknown dataFormat ${i}`);u=[o,l,e[1],e[1]]}return vl(e,u,n,r,a,s,!1,i)}function bl(e,t,n,r,a,s,i="NDHWC"){const[o,l,u]=kl(t);let c,h;if("NDHWC"===i)h="channelsLast",c=[o,l,u,e[4],e[4]];else{if("NCDHW"!==i)throw new Error(`Unknown dataFormat ${i}`);h="channelsFirst",c=[o,l,u,e[1],e[1]]}return wl(e,c,n,r,a,!1,h,s)}function vl(e,t,n,r,a,s,i=!1,o="channelsLast"){let[l,u,c,h]=[-1,-1,-1,-1];if("channelsLast"===o)[l,u,c,h]=e;else{if("channelsFirst"!==o)throw new Error(`Unknown dataFormat ${o}`);[l,h,u,c]=e}const[f,d,,p]=t,[m,g]=xl(n),[y,b]=xl(r),v=El(f,y),w=El(d,b),{padInfo:_,outHeight:x,outWidth:k}=function(e,t,n,r,a,s,i,o,l){let u,c,h;if("number"==typeof e){u={top:e,bottom:e,left:e,right:e,type:0===e?"VALID":"NUMBER"};const a=function(e,t,n,r,a){null==r&&(r=_l(e,t,n));const s=e[1];return[Cl((e[0]-t+2*r)/n+1,a),Cl((s-t+2*r)/n+1,a)]}([t,n],s,r,e,o);c=a[0],h=a[1]}else if("same"===e){c=Math.ceil(t/r),h=Math.ceil(n/a);const e=Math.max(0,(c-1)*r+s-t),o=Math.max(0,(h-1)*a+i-n),l=Math.floor(e/2),f=e-l,d=Math.floor(o/2);u={top:l,bottom:f,left:d,right:o-d,type:"SAME"}}else if("valid"===e)u={top:0,bottom:0,left:0,right:0,type:"VALID"},c=Math.ceil((t-s+1)/r),h=Math.ceil((n-i+1)/a);else{if("object"!=typeof e)throw Error(`Unknown padding parameter: ${e}`);{const f="channelsLast"===l?e[1][0]:e[2][0],d="channelsLast"===l?e[1][1]:e[2][1],p="channelsLast"===l?e[2][0]:e[3][0],m="channelsLast"===l?e[2][1]:e[3][1];u={top:f,bottom:d,left:p,right:m,type:0===f&&0===d&&0===p&&0===m?"VALID":"EXPLICIT"},c=Cl((t-s+f+d)/r+1,o),h=Cl((n-i+p+m)/a+1,o)}}return{padInfo:u,outHeight:c,outWidth:h}}(a,u,c,m,g,v,w,s,o),E=i?p*h:p;let C;return"channelsFirst"===o?C=[l,E,x,k]:"channelsLast"===o&&(C=[l,x,k,E]),{batchSize:l,dataFormat:o,inHeight:u,inWidth:c,inChannels:h,outHeight:x,outWidth:k,outChannels:E,padInfo:_,strideHeight:m,strideWidth:g,filterHeight:f,filterWidth:d,effectiveFilterHeight:v,effectiveFilterWidth:w,dilationHeight:y,dilationWidth:b,inShape:e,outShape:C,filterShape:t}}function wl(e,t,n,r,a,s=!1,i="channelsLast",o){let[l,u,c,h,f]=[-1,-1,-1,-1,-1];if("channelsLast"===i)[l,u,c,h,f]=e;else{if("channelsFirst"!==i)throw new Error(`Unknown dataFormat ${i}`);[l,f,u,c,h]=e}const[d,p,m,,g]=t,[y,b,v]=kl(n),[w,_,x]=kl(r),k=El(d,w),E=El(p,_),C=El(m,x),{padInfo:S,outDepth:N,outHeight:I,outWidth:A}=function(e,t,n,r,a,s,i,o,l,u,c){let h,f,d,p;if("number"==typeof e){h={top:e,bottom:e,left:e,right:e,front:e,back:e,type:0===e?"VALID":"NUMBER"};const s=function(e,t,n,r,a,s){null==a&&(a=_l(e,t,r));const i=e[1],o=e[2];return[Cl((e[0]-t+2*a)/r+1,s),Cl((i-t+2*a)/r+1,s),Cl((o-t+2*a)/r+1,s),1]}([t,n,r,1],o,0,a,e,c);f=s[0],d=s[1],p=s[2]}else if("same"===e){f=Math.ceil(t/a),d=Math.ceil(n/s),p=Math.ceil(r/i);const e=(f-1)*a+o-t,c=(d-1)*s+l-n,m=(p-1)*i+u-r,g=Math.floor(e/2),y=e-g,b=Math.floor(c/2),v=c-b,w=Math.floor(m/2);h={top:b,bottom:v,left:w,right:m-w,front:g,back:y,type:"SAME"}}else{if("valid"!==e)throw Error(`Unknown padding parameter: ${e}`);h={top:0,bottom:0,left:0,right:0,front:0,back:0,type:"VALID"},f=Math.ceil((t-o+1)/a),d=Math.ceil((n-l+1)/s),p=Math.ceil((r-u+1)/i)}return{padInfo:h,outDepth:f,outHeight:d,outWidth:p}}(a,u,c,h,y,b,v,k,E,C,o),D=s?g*f:g;let T;return"channelsFirst"===i?T=[l,D,N,I,A]:"channelsLast"===i&&(T=[l,N,I,A,D]),{batchSize:l,dataFormat:i,inDepth:u,inHeight:c,inWidth:h,inChannels:f,outDepth:N,outHeight:I,outWidth:A,outChannels:D,padInfo:S,strideDepth:y,strideHeight:b,strideWidth:v,filterDepth:d,filterHeight:p,filterWidth:m,effectiveFilterDepth:k,effectiveFilterHeight:E,effectiveFilterWidth:C,dilationDepth:w,dilationHeight:_,dilationWidth:x,inShape:e,outShape:T,filterShape:t}}function _l(e,t,n,r=1){const a=El(t,r);return Math.floor((e[0]*(n-1)-n+a)/2)}function xl(e){return"number"==typeof e?[e,e,e]:2===e.length?[e[0],e[1],1]:e}function kl(e){return"number"==typeof e?[e,e,e]:e}function El(e,t){return t<=1?e:e+(e-1)*(t-1)}function Cl(e,t){if(!t)return Math.trunc(e);switch(t){case"round":return Math.round(e);case"ceil":return Math.ceil(e);case"floor":return Math.floor(e);default:throw new Error(`Unknown roundingMode ${t}`)}}function Sl(e){const[t,n,r]=xl(e);return 1===t&&1===n&&1===r}function Nl(e,t){return Sl(e)||Sl(t)}function Il(e){if("NHWC"===e)return"channelsLast";if("NCHW"===e)return"channelsFirst";throw new Error(`Unknown dataFormat ${e}`)}const Al=Za({reshape_:function(e,t){const n={x:qa(e,"x","reshape","string_or_numeric")},r={shape:t};return Wa.runKernel(er,n,r)}}),Dl=Za({avgPool_:function(e,t,n,r,a){const s=qa(e,"x","avgPool","float32");Q(Nl(n,1),(()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${n} and dilations '1'`));let i=s,o=!1;3===s.rank&&(o=!0,i=Al(s,[1,s.shape[0],s.shape[1],s.shape[2]])),Q(4===i.rank,(()=>`Error in avgPool: x must be rank 4 but got rank ${i.rank}.`)),null!=a&&Q(ie(r),(()=>`Error in avgPool: pad must be an integer when using, dimRoundingMode ${a} but got pad ${r}.`));const l={x:i},u={filterSize:t,strides:n,pad:r,dimRoundingMode:a};let c=Wa.runKernel(it,l,u);return c=Ks(c,s.dtype),o?Al(c,[c.shape[1],c.shape[2],c.shape[3]]):c}}),Tl=Za({avgPool3d_:function(e,t,n,r,a,s="NDHWC"){const i=qa(e,"x","avgPool3d","float32");let o=i,l=!1;4===i.rank&&(l=!0,o=Al(i,[1,i.shape[0],i.shape[1],i.shape[2],i.shape[3]])),Q(5===o.rank,(()=>`Error in avgPool3d: x must be rank 5 but got rank ${o.rank}.`)),Q("NDHWC"===s,(()=>`Error in avgPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`)),null!=a&&Q(ie(r),(()=>`Error in avgPool3d: pad must be an integer when using, dimRoundingMode ${a} but got pad ${r}.`));const u={x:o},c={filterSize:t,strides:n,pad:r,dimRoundingMode:a,dataFormat:s};let h=Wa.runKernel(lt,u,c);return h=Ks(h,o.dtype),l?Al(h,[h.shape[1],h.shape[2],h.shape[3],h.shape[4]]):h}}),Fl=Za({concat_:function(e,t=0){Q(e.length>=1,(()=>"Pass at least one tensor to concat"));const n=Ya(e,"tensors","concat","string_or_numeric");if("complex64"===n[0].dtype&&n.forEach((e=>{if("complex64"!==e.dtype)throw new Error(`Cannot concatenate complex64 tensors with a tensor\n with dtype ${e.dtype}. `)})),1===n.length)return qs(n[0]);const r=n,a={axis:t};return Wa.runKernel(vt,r,a)}}),Rl=Za({sigmoid_:function(e){const t={x:qa(e,"x","sigmoid")};return Wa.runKernel(gr,t)}}),Ol=Za({slice_:function(e,t,n){const r=qa(e,"x","slice","string_or_numeric");if(0===r.rank)throw new Error("Slicing scalar is not possible");const a={x:r},s={begin:t,size:n};return Wa.runKernel(fr,a,s)}}),Ml=Za({tanh_:function(e){const t={x:qa(e,"x","tanh")};return Wa.runKernel(Tr,t)}}),Bl=Za({basicLSTMCell_:function(e,t,n,r,a,s){const i=qa(e,"forgetBias","basicLSTMCell"),o=qa(t,"lstmKernel","basicLSTMCell"),l=qa(n,"lstmBias","basicLSTMCell"),u=qa(r,"data","basicLSTMCell"),c=qa(a,"c","basicLSTMCell"),h=qa(s,"h","basicLSTMCell"),f=Fl([u,h],1),d=pi(f,o),p=No(d,l),m=p.shape[0],g=p.shape[1]/4,y=[m,g],b=Ol(p,[0,0],y),v=Ol(p,[0,g],y),w=Ol(p,[0,2*g],y),_=Ol(p,[0,3*g],y),x=No(Do(Rl(b),Ml(v)),Do(c,Rl(No(i,w))));return[x,Do(Ml(x),Rl(_))]}}),$l=Za({batchToSpaceND_:function(e,t,n){const r=qa(e,"x","batchToSpaceND"),a=t.reduce(((e,t)=>e*t));Q(r.rank>=1+t.length,(()=>`input rank is ${r.rank} but should be > than blockShape.length ${t.length}`)),Q(n.length===t.length,(()=>`crops.length is ${n.length} but should be equal to blockShape.length ${t.length}`)),Q(r.shape[0]%a==0,(()=>`input tensor batch is ${r.shape[0]} but is not divisible by the product of the elements of blockShape ${t.join(" * ")} === ${a}`));const s={x:r},i={blockShape:t,crops:n};return Wa.runKernel(ht,s,i)}}),Pl=Za({batchNorm_:function(e,t,n,r,a,s){null==s&&(s=.001);const i=qa(e,"x","batchNorm"),o=qa(t,"mean","batchNorm"),l=qa(n,"variance","batchNorm");let u,c;null!=a&&(u=qa(a,"scale","batchNorm")),null!=r&&(c=qa(r,"offset","batchNorm")),Q(o.rank===l.rank,(()=>"Batch normalization gradient requires mean and variance to have equal ranks.")),Q(null==c||o.rank===c.rank,(()=>"Batch normalization gradient requires mean and offset to have equal ranks.")),Q(null==u||o.rank===u.rank,(()=>"Batch normalization gradient requires mean and scale to have equal ranks."));const h={x:function(e){let t;return t=0===e.rank||1===e.rank?Al(e,[1,1,1,e.size]):2===e.rank?Al(e,[1,1,e.shape[0],e.shape[1]]):3===e.rank?Al(e,[1,e.shape[0],e.shape[1],e.shape[2]]):e,t}(i),scale:u,offset:c,mean:o,variance:l},f={varianceEpsilon:s},d=Wa.runKernel(Qt,h,f);return Al(d,i.shape)}}),Ll=Za({batchNorm2d_:function(e,t,n,r,a,s){const i=qa(e,"x","batchNorm"),o=qa(t,"mean","batchNorm"),l=qa(n,"variance","batchNorm");let u,c;return null!=a&&(u=qa(a,"scale","batchNorm")),null!=r&&(c=qa(r,"offset","batchNorm")),Q(2===i.rank,(()=>`Error in batchNorm2D: x must be rank 2 but got rank ${i.rank}.`)),Q(2===o.rank||1===o.rank,(()=>`Error in batchNorm2D: mean must be rank 2 or rank 1 but got rank ${o.rank}.`)),Q(2===l.rank||1===l.rank,(()=>`Error in batchNorm2D: variance must be rank 2 or rank 1 but got rank ${l.rank}.`)),null!=u&&Q(2===u.rank||1===u.rank,(()=>`Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank ${u.rank}.`)),null!=c&&Q(2===c.rank||1===c.rank,(()=>`Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank ${c.rank}.`)),Pl(i,o,l,c,u,s)}}),zl=Za({batchNorm3d_:function(e,t,n,r,a,s){const i=qa(e,"x","batchNorm"),o=qa(t,"mean","batchNorm"),l=qa(n,"variance","batchNorm");let u,c;return null!=a&&(u=qa(a,"scale","batchNorm")),null!=r&&(c=qa(r,"offset","batchNorm")),Q(3===i.rank,(()=>`Error in batchNorm3D: x must be rank 3 but got rank ${i.rank}.`)),Q(3===o.rank||1===o.rank,(()=>`Error in batchNorm3D: mean must be rank 3 or rank 1 but got rank ${o.rank}.`)),Q(3===l.rank||1===l.rank,(()=>`Error in batchNorm3D: variance must be rank 3 or rank 1 but got rank ${l.rank}.`)),null!=u&&Q(3===u.rank||1===u.rank,(()=>`Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank ${u.rank}.`)),null!=c&&Q(3===c.rank||1===c.rank,(()=>`Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank ${c.rank}.`)),Pl(i,o,l,c,u,s)}}),Wl=Za({batchNorm4d_:function(e,t,n,r,a,s){const i=qa(e,"x","batchNorm"),o=qa(t,"mean","batchNorm"),l=qa(n,"variance","batchNorm");let u,c;return null!=a&&(u=qa(a,"scale","batchNorm")),null!=r&&(c=qa(r,"offset","batchNorm")),Q(4===i.rank,(()=>`Error in batchNorm4D: x must be rank 4 but got rank ${i.rank}.`)),Q(4===o.rank||1===o.rank,(()=>`Error in batchNorm4D: mean must be rank 4 or rank 1 but got rank ${o.rank}.`)),Q(4===l.rank||1===l.rank,(()=>`Error in batchNorm4D: variance must be rank 4 or rank 1 but got rank ${l.rank}.`)),null!=u&&Q(4===u.rank||1===u.rank,(()=>`Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank ${u.rank}.`)),null!=c&&Q(4===c.rank||1===c.rank,(()=>`Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank ${c.rank}.`)),Pl(i,o,l,c,u,s)}}),Ul=Za({bincount_:function(e,t,n){const r=qa(e,"x","bincount"),a=qa(t,"weights","bincount");Q("int32"===r.dtype,(()=>`Error in bincount: input dtype must be int32, but got ${r.dtype}`)),Q(n>=0,(()=>`size must be non-negative, but got ${n}.`)),Q(a.size===r.size||0===a.size,(()=>`Error in bincount: weights must have the same size as input or0-length, but got input shape: ${r.shape}, weights shape: ${a.shape}.`));const s={x:r,weights:a},i={size:n};return Wa.runKernel(ft,s,i)}}),Vl=Za({broadcastTo_:function(e,t){let n=qa(e,"broadcastTo","x");const r=n.shape;if(t.some((e=>!(e>0)||e%1!=0)))throw new Error(`broadcastTo(): Invalid broadcast shape [${t}].`);if(t.lengthn.rank){const e=n.shape.slice();for(;e.length=0;e--)if(a[e]===t[e])s[e]=1;else if(1!==n.shape[e])throw new Error(`broadcastTo(): [${r}] cannot be broadcast to [${t}].`);if(0===s.map(((e,t)=>e>1?t:-1)).filter((e=>e>=0)).length)return qs(n);const i={x:n},o={reps:s};return Wa.runKernel(Fr,i,o)}}),jl=Za({ceil_:function(e){const t={x:qa(e,"x","ceil")};return Wa.runKernel(mt,t)}}),Hl=Za({clipByValue_:function(e,t,n){const r=qa(e,"x","clipByValue");Q(t<=n,(()=>`Error in clip: min (${t}) must be less than or equal to max (${n}).`));const a={x:r},s={clipValueMin:t,clipValueMax:n};return Wa.runKernel(gt,a,s)}}),Gl=Za({concat1d_:function(e){return Fl(e,0)}}),Xl=Za({concat2d_:function(e,t){return Fl(e,t)}}),Kl=Za({concat3d_:function(e,t){return Fl(e,t)}}),ql=Za({concat4d_:function(e,t){return Fl(e,t)}}),Yl=Za({conv2d_:function(e,t,n,r,a="NHWC",s=[1,1],i){const o=qa(e,"x","conv2d"),l=qa(t,"filter","conv2d");let u=o,c=!1;3===o.rank&&(c=!0,u=Al(o,[1,o.shape[0],o.shape[1],o.shape[2]])),Q(4===u.rank,(()=>`Error in conv2d: input must be rank 4, but got rank ${u.rank}.`)),Q(4===l.rank,(()=>`Error in conv2d: filter must be rank 4, but got rank ${l.rank}.`)),null!=i&&Q(ie(r),(()=>`Error in conv2d: pad must be an integer when using, dimRoundingMode ${i} but got pad ${r}.`));const h="NHWC"===a?u.shape[3]:u.shape[1];Q(h===l.shape[2],(()=>`Error in conv2d: depth of input (${h}) must match input depth for filter ${l.shape[2]}.`)),Q(Nl(n,s),(()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${n} and dilations '${s}'`));const f={x:u,filter:l},d={strides:n,pad:r,dataFormat:a,dilations:s,dimRoundingMode:i},p=Wa.runKernel(wt,f,d);return c?Al(p,[p.shape[1],p.shape[2],p.shape[3]]):p}}),Jl=Za({conv1d_:function(e,t,n,r,a="NWC",s=1,i){const o=qa(e,"x","conv1d"),l=qa(t,"filter","conv1d");let u=o,c=!1;2===o.rank&&(c=!0,u=Al(o,[1,o.shape[0],o.shape[1]])),Q(3===u.rank,(()=>`Error in conv1d: input must be rank 3, but got rank ${u.rank}.`)),Q(3===l.rank,(()=>`Error in conv1d: filter must be rank 3, but got rank ${l.rank}.`)),null!=i&&Q(ie(r),(()=>`Error in conv1d: pad must be an integer when using, dimRoundingMode ${i} but got pad ${r}.`)),Q(u.shape[2]===l.shape[1],(()=>`Error in conv1d: depth of input (${u.shape[2]}) must match input depth for filter ${l.shape[1]}.`)),Q(Nl(n,s),(()=>`Error in conv1D: Either stride or dilation must be 1. Got stride ${n} and dilation '${s}'`)),Q("NWC"===a,(()=>`Error in conv1d: got dataFormat of ${a} but only NWC is currently supported.`));const h=Al(l,[1,l.shape[0],l.shape[1],l.shape[2]]),f=Al(u,[u.shape[0],1,u.shape[1],u.shape[2]]),d=Yl(f,h,[1,n],r,"NHWC",[1,s],i);return Al(d,c?[d.shape[2],d.shape[3]]:[d.shape[0],d.shape[2],d.shape[3]])}}),Zl=Za({conv2DBackpropInput_:function(e,t,n,r,a,s="NHWC",i){Q(e.length===t.rank,(()=>`Length of inShape (${e.length}) and rank of dy (${t.rank}) must match`));let o=e,l=t,u=!1;3===t.rank&&(u=!0,l=Al(t,[1,t.shape[0],t.shape[1],t.shape[2]]),o=[1,e[0],e[1],e[2]]),Q(4===o.length,(()=>`Error in conv2dDerInput: inShape must be length 4, but got length ${o.length}.`)),Q(4===l.rank,(()=>`Error in conv2dDerInput: dy must be rank 4, but got rank ${l.rank}`)),Q(4===n.rank,(()=>`Error in conv2dDerInput: filter must be rank 4, but got rank ${n.rank}`));const c="NHWC"===s?o[3]:o[1],h="NHWC"===s?l.shape[3]:l.shape[1];Q(c===n.shape[2],(()=>`Error in conv2dDerInput: depth of input (${c}) must match input depth for filter ${n.shape[2]}.`)),Q(h===n.shape[3],(()=>`Error in conv2dDerInput: depth of output (${h}) must match output depth for filter ${n.shape[3]}.`)),null!=i&&Q(ie(a),(()=>`Error in conv2dDerInput: pad must be an integer when using, dimRoundingMode ${i} but got pad ${a}.`));const f={dy:l,filter:n},d={strides:r,pad:a,dataFormat:s,dimRoundingMode:i,inputShape:o},p=Wa.runKernel(xt,f,d);return u?Al(p,[p.shape[1],p.shape[2],p.shape[3]]):p}}),Ql=Za({conv2dTranspose_:function(e,t,n,r,a,s){const i=qa(e,"x","conv2dTranspose"),o=qa(t,"filter","conv2dTranspose");return Zl(n,i,o,r,a,"NHWC",s)}}),eu=Za({conv3d_:function(e,t,n,r,a="NDHWC",s=[1,1,1]){const i=qa(e,"x","conv3d"),o=qa(t,"filter","conv3d");let l=i,u=!1;4===i.rank&&(u=!0,l=Al(i,[1,i.shape[0],i.shape[1],i.shape[2],i.shape[3]])),Q(5===l.rank,(()=>`Error in conv3d: input must be rank 5, but got rank ${l.rank}.`)),Q(5===o.rank,(()=>`Error in conv3d: filter must be rank 5, but got rank ${o.rank}.`)),Q(l.shape[4]===o.shape[3],(()=>`Error in conv3d: depth of input (${l.shape[4]}) must match input depth for filter ${o.shape[3]}.`)),Q(Nl(n,s),(()=>`Error in conv3D: Either strides or dilations must be 1. Got strides ${n} and dilations '${s}'`)),Q("NDHWC"===a,(()=>`Error in conv3d: got dataFormat of ${a} but only NDHWC is currently supported.`));const c={x:l,filter:o},h={strides:n,pad:r,dataFormat:a,dilations:s},f=Wa.runKernel(kt,c,h);return u?Al(f,[f.shape[1],f.shape[2],f.shape[3],f.shape[4]]):f}}),tu=Za({conv3DBackpropInput_:function(e,t,n,r,a){Q(e.length===t.rank,(()=>`Length of inShape (${e.length}) and rank of dy (${t.rank}) must match`));let s=e,i=t,o=!1;4===t.rank&&(o=!0,i=Al(t,[1,t.shape[0],t.shape[1],t.shape[2],t.shape[3]]),s=[1,e[0],e[1],e[2],e[3]]);const l=s[4],u=i.shape[4];Q(5===s.length,(()=>`Error in conv3dDerInput: inShape must be length 5, but got length ${s.length}.`)),Q(5===i.rank,(()=>`Error in conv3dDerInput: dy must be rank 5, but got rank ${i.rank}`)),Q(5===n.rank,(()=>`Error in conv3dDerInput: filter must be rank 5, but got rank ${n.rank}`)),Q(l===n.shape[3],(()=>`Error in conv3dDerInput: depth of input (${l}) must match input depth for filter ${n.shape[3]}.`)),Q(u===n.shape[4],(()=>`Error in conv3dDerInput: depth of output (${u}) must match output depth for filter ${n.shape[4]}.`));const c={dy:i,filter:n},h={pad:a,strides:r,inputShape:s},f=Wa.runKernel(Ct,c,h);return o?Al(f,[f.shape[1],f.shape[2],f.shape[3],f.shape[4]]):f}}),nu=Za({conv3dTranspose_:function(e,t,n,r,a){const s=qa(e,"x","conv3dTranspose"),i=qa(t,"filter","conv3dTranspose");return tu(n,s,i,r,a)}}),ru=Za({cos_:function(e){const t={x:qa(e,"x","cos")};return Wa.runKernel(St,t)}}),au=Za({cosh_:function(e){const t={x:qa(e,"x","cosh")};return Wa.runKernel(Nt,t)}}),su=Za({cumsum_:function(e,t=0,n=!1,r=!1){const a={x:qa(e,"x","cumsum")},s={axis:t,exclusive:n,reverse:r};return Wa.runKernel(It,a,s)}}),iu=Za({denseBincount_:function(e,t,n,r=!1){const a=qa(e,"x","denseBincount"),s=qa(t,"weights","denseBincount");Q("int32"===a.dtype,(()=>`Error in denseBincount: input dtype must be int32, but got ${a.dtype}`)),Q(a.rank<=2,(()=>`Error in denseBincount: input must be at most rank 2, but got rank ${a.rank}.`)),Q(n>=0,(()=>`size must be non-negative, but got ${n}.`)),Q(s.size===a.size||0===s.size,(()=>`Error in denseBincount: weights must have the same shape as x or 0-length, but got x shape: ${a.shape}, weights shape: ${s.shape}.`));const i={x:a,weights:s},o={size:n,binaryOutput:r};return Wa.runKernel(Dt,i,o)}}),ou=Za({depthToSpace_:function(e,t,n="NHWC"){const r=qa(e,"x","depthToSpace"),a="NHWC"===n?r.shape[1]:r.shape[2],s="NHWC"===n?r.shape[2]:r.shape[3],i="NHWC"===n?r.shape[3]:r.shape[1];Q(a*t>=0,(()=>`Negative dimension size caused by overflow when multiplying\n ${a} and ${t} for depthToSpace with input shape\n ${r.shape}`)),Q(s*t>=0,(()=>`Negative dimension size caused by overflow when multiplying\n ${s} and ${t} for depthToSpace with input shape\n ${r.shape}`)),Q(i%(t*t)==0,(()=>`Dimension size must be evenly divisible by ${t*t} but is ${i} for depthToSpace with input shape ${r.shape}`));const o={x:r},l={blockSize:t,dataFormat:n};return Wa.runKernel(Tt,o,l)}}),lu=Za({depthwiseConv2d_:function(e,t,n,r,a="NHWC",s=[1,1],i){const o=qa(e,"x","depthwiseConv2d"),l=qa(t,"filter","depthwiseConv2d");let u=o,c=!1;3===o.rank&&(c=!0,u=Al(o,[1,o.shape[0],o.shape[1],o.shape[2]])),Q(4===u.rank,(()=>`Error in depthwiseConv2d: input must be rank 4, but got rank ${u.rank}.`)),Q(4===l.rank,(()=>`Error in depthwiseConv2d: filter must be rank 4, but got rank ${l.rank}.`)),Q(u.shape[3]===l.shape[2],(()=>`Error in depthwiseConv2d: number of input channels (${u.shape[3]}) must match the inChannels dimension in filter ${l.shape[2]}.`)),null!=i&&Q(ie(r),(()=>`Error in depthwiseConv2d: pad must be an integer when using, dimRoundingMode ${i} but got pad ${r}.`));const h={x:u,filter:l},f={strides:n,pad:r,dataFormat:a,dilations:s,dimRoundingMode:i},d=Wa.runKernel(Ft,h,f);return c?Al(d,[d.shape[1],d.shape[2],d.shape[3]]):d}}),uu=Za({diag_:function(e){const t={x:qa(e,"x","diag")};return Wa.runKernel(Mt,t)}}),cu=Za({dilation2d_:function(e,t,n,r,a=[1,1],s="NHWC"){const i=qa(e,"x","dilation2d"),o=qa(t,"filter","dilation2d");Q(3===i.rank||4===i.rank,(()=>`Error in dilation2d: input must be rank 3 or 4, but got rank ${i.rank}.`)),Q(3===o.rank,(()=>`Error in dilation2d: filter must be rank 3, but got rank ${o.rank}.`)),Q("NHWC"===s,(()=>`Error in dilation2d: Only NHWC is currently supported, but got dataFormat of ${s}`));let l=i,u=!1;3===i.rank&&(l=Al(i,[1,i.shape[0],i.shape[1],i.shape[2]]),u=!0);const c={x:l,filter:o},h={strides:n,pad:r,dilations:a},f=Wa.runKernel(Bt,c,h);return u?Al(f,[f.shape[1],f.shape[2],f.shape[3]]):f}}),hu=Za({equal_:function(e,t){let n=qa(e,"a","equal"),r=qa(t,"b","equal");[n,r]=Fa(n,r),Zo(n.shape,r.shape);const a={a:n,b:r};return Wa.runKernel(jt,a)}}),fu=Za({where_:function(e,t,n){const r=qa(t,"a","where"),a=qa(n,"b","where"),s=qa(e,"condition","where","bool"),i=Zo(Zo(s.shape,r.shape),a.shape),o={condition:Vl(s,i),t:Vl(r,i),e:Vl(a,i)};return Wa.runKernel(cr,o)}}),du=Za({divNoNan_:function(e,t){let n=qa(e,"a","div"),r=qa(t,"b","div");[n,r]=Fa(n,r);const a=Ao(n,r),s=Ro(a),i=hu(r,s);return fu(i,s,a)}}),pu=Za({dot_:function(e,t){const n=qa(e,"t1","dot"),r=qa(t,"t2","dot");Q(!(1!==n.rank&&2!==n.rank||1!==r.rank&&2!==r.rank),(()=>`Error in dot: inputs must all be rank 1 or 2, but got ranks ${n.rank} and ${r.rank}.`));const a=1===n.rank?n.size:n.shape[1],s=1===r.rank?r.size:r.shape[0];if(Q(a===s,(()=>`Error in dot: inner dimensions of inputs must match, but got ${a} and ${s}.`)),1===n.rank&&1===r.rank){const e=Al(n,[1,-1]),t=Al(r,[-1,1]),a=pi(e,t);return Al(a,[])}if(1===n.rank&&2===r.rank){const e=Al(n,[1,-1]),t=Al(r,[r.shape[0],r.shape[1]]),a=pi(e,t);return Al(a,[a.size])}if(2===n.rank&&1===r.rank){const e=Al(r,[-1,1]),t=pi(n,e);return Al(t,[t.size])}{const e=Al(r,[r.shape[0],r.shape[1]]);return pi(n,e)}}}),mu=Za({einsum_:function(e,...t){const n=t.map(((e,t)=>qa(e,`tensors${t}`,"einsum"))),r={equation:e};return Wa.runKernel(zt,n,r)}}),gu=Za({elu_:function(e){const t={x:qa(e,"x","elu")};return Wa.runKernel(Wt,t)}}),yu=Za({erf_:function(e){let t=qa(e,"x","erf");Q("int32"===t.dtype||"float32"===t.dtype,(()=>"Input dtype must be `int32` or `float32`.")),"int32"===t.dtype&&(t=Ks(t,"float32"));const n={x:t};return Wa.runKernel(Vt,n)}}),bu=Za({exp_:function(e){const t={x:qa(e,"x","exp")};return Wa.runKernel(Ht,t)}}),vu=Za({expandDims_:function(e,t=0){const n=qa(e,"x","expandDims","string_or_numeric");Q(t<=n.rank,(()=>"Axis must be <= rank of the tensor"));const r={input:n},a={dim:t};return Wa.runKernel(Gt,r,a)}}),wu=Za({expm1_:function(e){const t={x:qa(e,"x","expm1")};return Wa.runKernel(Xt,t)}}),_u=Za({tile_:function(e,t){const n=qa(e,"x","tile","string_or_numeric");Q(n.rank===t.length,(()=>`Error in transpose: rank of input ${n.rank} must match length of reps ${t}.`));const r={x:n},a={reps:t};return Wa.runKernel(Fr,r,a)}}),xu=Za({eye_:function(e,t,n,r="float32"){null==t&&(t=e);const a=Xs([e,t],r),s=e<=t?e:t;for(let e=0;e`Error in localResponseNormalization: x must be rank 3 or 4 but got\n rank ${s.rank}.`)),Q(ie(t),(()=>`Error in localResponseNormalization: depthRadius must be an integer but got depthRadius ${t}.`));let i=s,o=!1;3===s.rank&&(o=!0,i=Al(s,[1,s.shape[0],s.shape[1],s.shape[2]]));const l={x:i},u={depthRadius:t,bias:n,alpha:r,beta:a},c=Wa.runKernel(_n,l,u);return o?Al(c,[c.shape[1],c.shape[2],c.shape[3]]):c}}),Bu=Za({log_:function(e){const t={x:qa(e,"x","log")};return Wa.runKernel(mn,t)}}),$u=Za({log1p_:function(e){const t={x:qa(e,"x","log1p")};return Wa.runKernel(gn,t)}}),Pu=Za({neg_:function(e){const t={x:qa(e,"x","neg")};return Wa.runKernel($n,t)}}),Lu=Za({softplus_:function(e){const t={x:qa(e,"x","softplus")};return Wa.runKernel(yr,t)}}),zu=Za({logSigmoid_:function(e){const t=qa(e,"x","logSigmoid");return Lo((e=>({value:Pu(Lu(Pu(e))),gradFunc:t=>Do(t,Rl(Pu(e)))})))(t)}}),Wu=Za({max_:function(e,t=null,n=!1){const r={x:qa(e,"x","max")},a={reductionIndices:t,keepDims:n};return Wa.runKernel(kn,r,a)}}),Uu=Za({sum_:function(e,t=null,n=!1){let r=qa(e,"x","sum");"bool"===r.dtype&&(r=Ks(r,"int32"));const a={x:r},s={axis:t,keepDims:n};return Wa.runKernel(vr,a,s)}}),Vu=Za({logSoftmax_:function(e,t=-1){const n=qa(e,"logits","logSoftmax");if(-1===t&&(t=n.rank-1),t!==n.rank-1)throw Error(`Log Softmax along a non-last dimension is not yet supported. Logits was rank ${n.rank} and axis was ${t}`);return Lo(((e,n)=>{const r=Wu(e,t,!0),a=Xo(e,r),s=Xo(Ks(a,"float32"),Bu(Uu(bu(a),t,!0)));return n([s]),{value:s,gradFunc:(e,n)=>{const[r]=n,a=bu(r);return Xo(e,Do(Uu(e,t,!0),a))}}}))(n)}});function ju(e,t){for(let n=0;ne[t]))]}function Xu(e,t){return Hu(e,t.map((e=>1)),t)}function Ku(e,t,n){Q(ju(t,n),(()=>`${e} supports only inner-most axes for now. Got axes ${t} and rank-${n} input.`))}function qu(e,t){if(ju(e,t))return null;const n=[];for(let r=0;rn.push(e))),n}function Yu(e){return e.map(((e,t)=>[t,e])).sort(((e,t)=>e[1]-t[1])).map((e=>e[0]))}function Ju(e,t){const n=[];for(let r=t-e;r`Error in maxPool: input must be rank 4 but got rank ${i.rank}.`)),Q(Nl(n,1),(()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${n} and dilations '1'`)),null!=a&&Q(ie(r),(()=>`Error in maxPool: pad must be an integer when using, dimRoundingMode ${a} but got pad ${r}.`));const l={x:i},u={filterSize:t,strides:n,pad:r,dimRoundingMode:a},c=Wa.runKernel(Cn,l,u);return o?Al(c,[c.shape[1],c.shape[2],c.shape[3]]):c}}),ac=Za({maxPool3d_:function(e,t=[1,1,1],n,r,a,s="NDHWC"){const i=qa(e,"x","maxPool3d");let o=i,l=!1;4===i.rank&&(l=!0,o=Al(i,[1,i.shape[0],i.shape[1],i.shape[2],i.shape[3]])),Q(5===o.rank,(()=>`Error in maxPool3d: x must be rank 5 but got rank ${o.rank}.`)),Q("NDHWC"===s,(()=>`Error in maxPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`)),null!=a&&Q(ie(r),(()=>`Error in maxPool3d: pad must be an integer when using, dimRoundingMode ${a} but got pad ${r}.`));const u={x:o},c={filterSize:t,strides:n,pad:r,dimRoundingMode:a,dataFormat:s},h=Wa.runKernel(Nn,u,c);return l?Al(h,[h.shape[1],h.shape[2],h.shape[3],h.shape[4]]):h}}),sc=Za({maxPoolWithArgmax_:function(e,t,n,r,a=!1){const s={x:qa(e,"x","maxPoolWithArgmax")},i={filterSize:t,strides:n,pad:r,includeBatchInIndex:a},o=Wa.runKernel(An,s,i);return{result:o[0],indexes:o[1]}}}),ic=Za({mean_:function(e,t=null,n=!1){const r={x:qa(e,"x","mean")},a={axis:t,keepDims:n};return Wa.runKernel(Dn,r,a)}});function oc(e,t="float32"){if("complex64"===t){const t=oc(e,"float32"),n=oc(e,"float32");return Qa(t,n)}const n=Re(re(e),t);return Wa.makeTensor(n,e,t)}function lc(e,t="float32"){if("complex64"===t){const t=lc(e,"float32"),n=oc(e,"float32");return Qa(t,n)}const n=Fe(re(e),t);return Wa.makeTensor(n,e,t)}function uc(e,t,{indexing:n="xy"}={}){if("xy"!==n&&"ij"!==n)throw new TypeError(`${n} is not a valid third argument to meshgrid`);if(void 0===e)return[];let r=qa(e,"x","meshgrid",e instanceof _a?e.dtype:"float32");if(void 0===t)return[r];let a=qa(t,"y","meshgrid",t instanceof _a?t.dtype:"float32");const s=re(r.shape),i=re(a.shape);return"xy"===n?(r=Al(r,[1,-1]),a=Al(a,[-1,1]),[pi(lc([i,1],r.dtype),r),pi(a,lc([1,s],a.dtype))]):(r=Al(r,[-1,1]),a=Al(a,[1,-1]),[pi(r,lc([1,i],r.dtype)),pi(lc([s,1],a.dtype),a)])}const cc=Za({min_:function(e,t=null,n=!1){const r={x:qa(e,"x","min")},a={axis:t,keepDims:n};return Wa.runKernel(Tn,r,a)}}),hc=Za({minimum_:function(e,t){let n=qa(e,"a","minimum"),r=qa(t,"b","minimum");[n,r]=Fa(n,r),"bool"===n.dtype&&(n=Ks(n,"int32"),r=Ks(r,"int32")),Zo(n.shape,r.shape);const a={a:n,b:r};return Wa.runKernel(Fn,a)}}),fc=Za({mirrorPad_:function(e,t,n){Q("reflect"===n||"symmetric"===n,(()=>`Invalid mode. Mode must be either reflect or symmetric. Got ${n}.`));const r=qa(e,"x","mirrorPad");if(0===r.rank)throw new Error("mirrorPad(scalar) is not defined. Pass non-scalar to mirrorPad");Q(t.length===r.rank,(()=>`Padding doesn't match input. Must be ${r.rank}. Got ${t.length}.`));const a="reflect"===n?1:0;for(let e=0;e"Invalid number of paddings. Must be length of 2 each.")),Q(t[e][0]>=0&&t[e][0]<=r.shape[e]-a&&t[e][1]>=0&&t[e][1]<=r.shape[e]-a,(()=>`Padding in dimension ${e} cannot be greater than or equal to ${r.shape[e]-a} or less than 0 for input of shape ${r.shape}`));const s={paddings:t,mode:n},i={x:r};return Wa.runKernel(Rn,i,s)}}),dc=Za({mod_:function(e,t){let n=qa(e,"a","mod"),r=qa(t,"b","mod");[n,r]=Fa(n,r);const a={a:n,b:r};return Wa.runKernel(On,a)}}),pc=Za({moments_:function(e,t=null,n=!1){const r=de(t,(e=qa(e,"x","moments")).shape),a=ic(e,r,n);let s=a.shape;n||(s=Xu(a.shape,r));const i=Fo(Xo(Ks(e,"float32"),Al(a,s)));return{mean:a,variance:ic(i,r,n)}}}),mc=Za({multiRNNCell_:function(e,t,n,r){const a=qa(t,"data","multiRNNCell"),s=Ya(n,"c","multiRNNCell"),i=Ya(r,"h","multiRNNCell");let o=a;const l=[];for(let t=0;t2)throw new Error(`Rank of probabilities must be 1 or 2, but is ${i}`);n=n||Math.random();const o={logits:1===i?Al(a,[1,-1]):a},l={numSamples:t,seed:n,normalized:r},u=Wa.runKernel(Mn,o,l);return 1===i?Al(u,[u.size]):u}}),yc=Za({notEqual_:function(e,t){let n=qa(e,"a","notEqual"),r=qa(t,"b","notEqual");[n,r]=Fa(n,r),Zo(n.shape,r.shape);const a={a:n,b:r};return Wa.runKernel(Pn,a)}}),bc=Za({onesLike_:function(e){const t={x:qa(e,"x","onesLike")};return Wa.runKernel(Un,t)}}),vc=Za({outerProduct_:function(e,t){const n=qa(e,"v1","outerProduct"),r=qa(t,"v2","outerProduct");Q(1===n.rank&&1===r.rank,(()=>`Error in outerProduct: inputs must be rank 1, but got ranks ${n.rank} and ${r.rank}.`));const a=Al(n,[-1,1]),s=Al(r,[1,-1]);return pi(a,s)}}),wc=Za({pad_:function(e,t,n=0){const r=qa(e,"x","pad");if(0===r.rank)throw new Error("pad(scalar) is not defined. Pass non-scalar to pad");const a={paddings:t,constantValue:n},s={x:r};return Wa.runKernel(Hn,s,a)}}),_c=Za({pad1d_:function(e,t,n=0){return Q(2===t.length,(()=>"Invalid number of paddings. Must be length of 2.")),wc(e,[t],n)}}),xc=Za({pad2d_:function(e,t,n=0){return Q(2===t.length&&2===t[0].length&&2===t[1].length,(()=>"Invalid number of paddings. Must be length of 2 each.")),wc(e,t,n)}}),kc=Za({pad3d_:function(e,t,n=0){return Q(3===t.length&&2===t[0].length&&2===t[1].length&&2===t[2].length,(()=>"Invalid number of paddings. Must be length of 2 each.")),wc(e,t,n)}}),Ec=Za({pad4d_:function(e,t,n=0){return Q(4===t.length&&2===t[0].length&&2===t[1].length&&2===t[2].length&&2===t[3].length,(()=>"Invalid number of paddings. Must be length of 2 each.")),wc(e,t,n)}}),Cc=Za({spaceToBatchND_:function(e,t,n){const r=qa(e,"x","spaceToBatchND");Q(r.rank>=1+t.length,(()=>`input rank ${r.rank} should be > than [blockShape] ${t.length}`)),Q(n.length===t.length,(()=>`paddings.shape[0] ${n.length} must be equal to [blockShape] ${t.length}`)),Q(r.shape.reduce(((e,r,a)=>a>0&&a<=t.length?e&&(r+n[a-1][0]+n[a-1][1])%t[a-1]==0:e),!0),(()=>`input spatial dimensions ${r.shape.slice(1)} with paddings ${n.toString()} must be divisible by blockShapes ${t.toString()}`));const a={x:r},s={blockShape:t,paddings:n};return Wa.runKernel(wr,a,s)}}),Sc=Za({pool_:function(e,t,n,r,a,s){null==a&&(a=[1,1]),null==s&&(s=1),0===r&&(r="valid");const i=qa(e,"x","maxPool");let o=i,l=!1;3===i.rank&&(l=!0,o=Al(i,[1,i.shape[0],i.shape[1],i.shape[2]])),Q(Nl(s,a),(()=>`Error in pool: Either strides or dilations must be 1. Got strides ${s} and dilations '${a}'`));const u=yl(o.shape,t,s,a,r),c=[u.dilationHeight,u.dilationWidth];let h;h="same"===r?function(e,t){const n=e.map(((e,n)=>e+(e-1)*(t[n]-1))).map((e=>e-1)),r=n.map((e=>Math.floor(e/2))),a=n.map(((e,t)=>e-r[t]));return n.map(((e,t)=>[r[t],a[t]]))}([u.filterHeight,u.filterWidth],c):[[0,0],[0,0]];const f=1===c[0]&&1===c[1],[d,p]=function(e,t,n){const r=n.map((e=>e[0])),a=n.map((e=>e[1])),s=e.concat(r,a),i=t.map(((e,t)=>(e-s[t]%e)%e)),o=a.map(((e,t)=>e+i[t]));return[t.map(((e,t)=>[r[t],o[t]])),t.map(((e,t)=>[0,i[t]]))]}([u.inHeight,u.inWidth],c,h),m=f?r:"valid",g=f?o:Cc(o,c,d),y=("avg"===n?()=>Dl(g,t,s,m):()=>rc(g,t,s,m))(),b=f?y:$l(y,c,p);return l?Al(b,[b.shape[1],b.shape[2],b.shape[3]]):b}}),Nc=Za({prelu_:function(e,t){const n={x:qa(e,"x","prelu"),alpha:qa(t,"alpha","prelu")};return Wa.runKernel(Kn,n)}}),Ic=Za({prod_:function(e,t=null,n=!1){let r=qa(e,"x","prod");"bool"===r.dtype&&(r=Ks(r,"int32"));const a={x:r},s={axis:t,keepDims:n};return Wa.runKernel(qn,a,s)}}),Ac=Za({rand_:function(e,t,n){const r=re(e);let a=null;if(null==n||"float32"===n)a=new Float32Array(r);else if("int32"===n)a=new Int32Array(r);else{if("bool"!==n)throw new Error(`Unknown data type ${n}`);a=new Uint8Array(r)}for(let e=0;e=1||0===s);const i=Math.sqrt(-2*Math.log(s)/s);e=this.mean+this.stdDev*r*i,t=this.mean+this.stdDev*a*i,this.truncated&&!this.isValidTruncated(e)||(n=!0)}return this.truncated&&!this.isValidTruncated(t)||(this.nextVal=this.convertValue(t)),this.convertValue(e)}convertValue(e){return null==this.dtype||"float32"===this.dtype?e:Math.round(e)}isValidTruncated(e){return e<=this.upper&&e>=this.lower}}class Fc{constructor(e,t,n,r){this.alpha=e,this.beta=1/t,this.dtype=n;const a=r||Math.random();this.randu=Dc.alea(a.toString()),this.randn=new Tc(0,1,n,!1,this.randu()),this.d=e<1?e+2/3:e-1/3,this.c=1/Math.sqrt(9*this.d)}nextValue(){let e,t,n,r,a,s;for(;;){do{r=this.randn.nextValue(),s=1+this.c*r}while(s<=0);if(s*=s*s,e=r*r,t=1-.331*e*e,n=.5*e+this.d*(1-s+Math.log(s)),a=this.randu(),anull==this.dtype||"float32"===this.dtype,this.min=e,this.range=t-e,this.dtype=n,null==r&&(r=Math.random()),"number"==typeof r&&(r=r.toString()),!this.canReturnFloat()&&this.range<=1)throw new Error(`The difference between ${e} - ${t} <= 1 and dtype is not float`);this.random=Dc.alea(r)}convertValue(e){return this.canReturnFloat()?e:Math.round(e)}nextValue(){return this.convertValue(this.min+this.range*this.random())}}const Oc=Za({randomGamma_:function(e,t,n=1,r="float32",a){if(null==n&&(n=1),null==r&&(r="float32"),"float32"!==r&&"int32"!==r)throw new Error(`Unsupported data type ${r}`);const s=new Fc(t,n,r,a),i=Xs(e,r);for(let e=0;e`Error in reverse1D: x must be rank 1 but got rank ${t.rank}.`)),Uc(t,0)}}),jc=Za({reverse2d_:function(e,t){const n=qa(e,"x","reverse");return Q(2===n.rank,(()=>`Error in reverse2D: x must be rank 2 but got rank ${n.rank}.`)),Uc(n,t)}}),Hc=Za({reverse3d_:function(e,t){const n=qa(e,"x","reverse");return Q(3===n.rank,(()=>`Error in reverse3D: x must be rank 3 but got rank ${n.rank}.`)),Uc(n,t)}}),Gc=Za({reverse4d_:function(e,t){const n=qa(e,"x","reverse");return Q(4===n.rank,(()=>`Error in reverse4D: x must be rank 4 but got rank ${n.rank}.`)),Uc(n,t)}}),Xc=Za({round_:function(e){const t={x:qa(e,"x","round")};return Wa.runKernel(or,t)}}),Kc=Za({rsqrt_:function(e){const t={x:qa(e,"x","rsqrt")};return Wa.runKernel(lr,t)}}),qc=Za({selu_:function(e){const t={x:qa(e,"x","selu")};return Wa.runKernel(hr,t)}}),Yc=Za({separableConv2d_:function(e,t,n,r,a,s=[1,1],i="NHWC"){const o=qa(e,"x","separableConv2d"),l=qa(t,"depthwiseFilter","separableConv2d"),u=qa(n,"pointwiseFilter","separableConv2d");let c=o,h=!1;if(3===o.rank&&(h=!0,c=Al(o,[1,o.shape[0],o.shape[1],o.shape[2]])),"NCHW"===i)throw new Error("separableConv2d currently does not support dataFormat NCHW; only NHWC is supported");Q(4===c.rank,(()=>`Error in separableConv2d: input must be rank 4, but got rank ${c.rank}.`)),Q(4===l.rank,(()=>`Error in separableConv2d: depthwise filter must be rank 4, but got rank ${l.rank}.`)),Q(4===u.rank,(()=>`Error in separableConv2d: pointwise filter must be rank 4, but got rank ${l.rank}.`)),Q(1===u.shape[0],(()=>`Error in separableConv2d: the first dimension of pointwise filter must be 1, but got ${u.shape[0]}.`)),Q(1===u.shape[1],(()=>`Error in separableConv2d: the second dimension of pointwise filter must be 1, but got ${u.shape[1]}.`));const f=l.shape[2],d=l.shape[3];Q(u.shape[2]===f*d,(()=>`Error in separableConv2d: the third dimension of pointwise filter must be ${f*d}, but got ${u.shape[2]}.`));const p=lu(c,l,r,a,i,s),m=Yl(p,u,1,"valid",i);return h?Al(m,[m.shape[1],m.shape[2],m.shape[3]]):m}}),Jc=async function(e,t){const n=qa(e,"x","setdiff1d"),r=qa(t,"y","setdiff1d");Q(n.dtype===r.dtype,(()=>`x and y should have the same dtype, but got x (${n.dtype}) and y (${r.dtype}).`)),Q(1===n.rank,(()=>`x should be 1D tensor, but got x (${n.shape}).`)),Q(1===r.rank,(()=>`y should be 1D tensor, but got y (${r.shape}).`));const a=await n.data(),s=await r.data(),i=new Set(s);let o=0;for(let e=0;e`slice1d expects a rank-1 tensor, but got a rank-${r.rank} tensor`)),Ol(r,[t],[n])}}),nh=Za({slice2d_:function(e,t,n){const r=qa(e,"x","slice2d");return Q(2===r.rank,(()=>`slice2d expects a rank-2 tensor, but got a rank-${r.rank} tensor`)),Ol(r,t,n)}}),rh=Za({slice3d_:function(e,t,n){const r=qa(e,"x","slice3d");return Q(3===r.rank,(()=>`slice3d expects a rank-3 tensor, but got a rank-${r.rank} tensor`)),Ol(r,t,n)}}),ah=Za({slice4d_:function(e,t,n){const r=qa(e,"x","slice4d");return Q(4===r.rank,(()=>`slice4d expects a rank-4 tensor, but got a rank-${r.rank} tensor`)),Ol(r,t,n)}}),sh=Za({softmax_:function(e,t=-1){const n=qa(e,"logits","softmax","float32");if(-1===t&&(t=n.rank-1),t!==n.rank-1)throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${n.rank} and dim was ${t}`);const r={logits:n},a={dim:t};return Wa.runKernel(xr,r,a)}}),ih=Za({fft_:function(e){Q("complex64"===e.dtype,(()=>`The dtype for tf.spectral.fft() must be complex64 but got ${e.dtype}.`));const t={input:e};return Wa.runKernel(Kt,t)}}),oh=Za({ifft_:function(e){Q("complex64"===e.dtype,(()=>`The dtype for tf.spectral.ifft() must be complex64 but got ${e.dtype}.`));const t={input:e};return Wa.runKernel(sn,t)}}),lh=Za({irfft_:function(e){const t=e.shape[e.shape.length-1],n=e.size/t;let r;if(t<=2){const a=Al(e,[n,t]);r=oh(a)}else{const a=[n,2*(t-1)],s=Al(Pc(e),[n,t]),i=Al(Nu(e),[n,t]),o=Uc(Ol(s,[0,1],[n,t-2]),1),l=Do(Uc(Ol(i,[0,1],[n,t-2]),1),Wo(-1)),u=Fl([s,o],1),c=Fl([i,l],1),h=Al(Qa(u,c),[a[0],a[1]]);r=oh(h)}if(r=Pc(r),3===e.rank&&0!==e.shape[0]){const t=r,n=e.shape[0];r=Al(r,[n,r.shape[0]/n,r.shape[1]]),t.dispose()}return r}}),uh=Za({split_:function(e,t,n=0){const r={x:qa(e,"x","split")},a={numOrSizeSplits:t,axis:n};return Wa.runKernel(_r,r,a)}}),ch=Za({rfft_:function(e,t){Q("float32"===e.dtype,(()=>`The dtype for rfft() must be real value but got ${e.dtype}`));let n=e.shape[e.shape.length-1];const r=e.size/n;let a;if(null!=t&&t0)),s=e.shape.map((e=>e));s[e.shape.length-1]=t,a=Ol(e,r,s),n=t}else if(null!=t&&t>n){const r=e.shape.map((e=>e));r[e.shape.length-1]=t-n,a=Fl([e,oc(r)],e.shape.length-1),n=t}else a=e;const s=Ro(a),i=Al(Qa(a,s),[r,n]),o=ih(i),l=Math.floor(n/2)+1,u=Pc(o),c=Nu(o),h=uh(u,[l,n-l],u.shape.length-1),f=uh(c,[l,n-l],c.shape.length-1),d=a.shape.slice();return d[a.shape.length-1]=l,Al(Qa(h[0],f[0]),d)}}),hh=Za({squaredDifference_:function(e,t){let n=qa(e,"a","squaredDifference"),r=qa(t,"b","squaredDifference");[n,r]=Fa(n,r),Zo(n.shape,r.shape);const a={a:n,b:r};return Wa.runKernel(Sr,a,{})}}),fh=Za({squeeze_:function(e,t){const n=qa(e,"x","squeeze");return Al(n,pe(n.shape,t).newShape)}}),dh=Za({stack_:function(e,t=0){const n=Ya(e,"tensors","stack","string_or_numeric");Q(n.length>=1,(()=>"Pass at least one tensor to tf.stack")),n.length>0&&Q(t<=n[0].rank,(()=>"Axis must be <= rank of the tensor"));const r=n,a={axis:t};return Wa.runKernel(jn,r,a)}}),ph=Za({step_:function(e,t=0){const n={x:qa(e,"x","step")},r={alpha:t};return Wa.runKernel(zr,n,r)}}),mh=Za({stridedSlice_:function(e,t,n,r,a=0,s=0,i=0,o=0,l=0){const u={x:qa(e,"x","stridedSlice")},c={begin:t,end:n,strides:r,beginMask:a,endMask:s,ellipsisMask:i,newAxisMask:o,shrinkAxisMask:l};return Wa.runKernel(Ir,u,c)}}),gh=Za({tan_:function(e){const t={x:qa(e,"x","tan")};return Wa.runKernel(Dr,t)}});function yh(e,t){te(e);const n=Ga(e,t);if(1!==n.length)throw new Error("tensor1d() requires values to be a flat/TypedArray");return es(e,null,n,t)}function bh(e,t,n){if(te(e),null!=t&&2!==t.length)throw new Error("tensor2d() requires shape to have two numbers");const r=Ga(e,n);if(2!==r.length&&1!==r.length)throw new Error("tensor2d() requires values to be number[][] or flat/TypedArray");if(1===r.length&&null==t)throw new Error("tensor2d() requires shape to be provided when `values` are a flat/TypedArray");return es(e,t,r,n)}function vh(e,t,n){if(te(e),null!=t&&4!==t.length)throw new Error("tensor4d() requires shape to have four numbers");const r=Ga(e,n);if(4!==r.length&&1!==r.length)throw new Error("tensor4d() requires values to be number[][][][] or flat/TypedArray");if(1===r.length&&null==t)throw new Error("tensor4d() requires shape to be provided when `values` are a flat array");return es(e,t,r,n)}function wh(e,t,n){if(te(e),null!=t&&5!==t.length)throw new Error("tensor5d() requires shape to have five numbers");const r=Ga(e,n);if(5!==r.length&&1!==r.length)throw new Error("tensor5d() requires values to be number[][][][][] or flat/TypedArray");if(1===r.length&&null==t)throw new Error("tensor5d() requires shape to be provided when `values` are a flat array");return es(e,t,r,n)}function _h(e,t,n){if(te(e),null!=t&&6!==t.length)throw new Error("tensor6d() requires shape to have six numbers");const r=Ga(e,n);if(6!==r.length&&1!==r.length)throw new Error("tensor6d() requires values to be number[][][][][][] or flat/TypedArray");if(1===r.length&&null==t)throw new Error("tensor6d() requires shape to be provided when `values` are a flat array");return es(e,t=t||r,r,n)}const xh=Za({topk_:function(e,t=1,n=!0){const r=qa(e,"x","topk");if(0===r.rank)throw new Error("topk() expects the input to be of rank 1 or higher");const a=r.shape[r.shape.length-1];if(t>a)throw new Error(`'k' passed to topk() must be <= the last dimension (${a}) but got ${t}`);const s={x:r},i={k:t,sorted:n},[o,l]=Wa.runKernel(Rr,s,i);return{values:o,indices:l}}}),kh=Za({truncatedNormal_:function(e,t=0,n=1,r,a){if(null!=r&&"bool"===r)throw new Error("Unsupported data type $ { dtype }");const s=new Tc(t,n,r,!0,a),i=Xs(e,r);for(let e=0;e0,(()=>"The input tensor must be at least 1D"));const r={x:n},a={axis:t},[s,i]=Wa.runKernel(Br,r,a);return{values:s,indices:i}}}),Ch=Za({unsortedSegmentSum_:function(e,t,n){const r=qa(e,"x","unsortedSegmentSum"),a=qa(t,"segmentIds","unsortedSegmentSum","int32");Q(ie(n),(()=>"numSegments must be of dtype int"));const s={x:r,segmentIds:a},i={numSegments:n};return Wa.runKernel(Pr,s,i)}}),Sh=Za({unstack_:function(e,t=0){const n=qa(e,"x","unstack","string_or_numeric");Q(t>=-n.shape.length&&t`Axis = ${t} is not in [-${n.shape.length}, ${n.shape.length})`));const r={value:n},a={axis:t};return Wa.runKernel($r,r,a)}});function Nh(e,t=!0,n,r){return Wa.makeVariable(e,t,n,r)}function Ih(e,t){const n=[];for(let e=0;e0,(()=>"mask cannot be scalar")),ee(o.slice(s,s+i),a.shape,"mask's shape must match the first K dimensions of tensor's shape,");let l=1;for(let e=s;e"Shape mismatch in v and x"));const l=Wo(1),u=Xo(l,o);let c=Do(Xo(i,s),u);if(a){Q(null!=r,(()=>"When using zeroDebias: true, step is required."));const e=qa(r,"step","movingAverage");c=Ao(c,Xo(l,Go(o,e)))}return No(s,c)}}),Oh=Za({scatterND_:function(e,t,n){const r=qa(e,"indices","scatterND","int32"),a=qa(t,"updates","scatterND");Si(a,r,n);const s={indices:r,updates:a},i={shape:n};return Wa.runKernel(ur,s,i)}}),Mh=Za({sparseToDense_:function(e,t,n,r=0){const a=qa(e,"sparseIndices","sparseToDense","int32"),s=qa(t,"sparseValues","sparseToDense"),i=qa(r,"defaultValue","sparseToDense",s.dtype);!function(e,t,n,r){if("int32"!==e.dtype)throw new Error(`tf.sparseToDense() expects the indices to be int32 type, but the dtype was ${e.dtype}.`);if(e.rank>2)throw new Error(`sparseIndices should be a scalar, vector, or matrix, but got shape ${e.shape}.`);const a=e.rank>0?e.shape[0]:1,s=e.rank>1?e.shape[1]:1;if(n.length!==s)throw new Error(`outputShape has incorrect number of elements:, ${n.length}, should be: ${s}.`);const i=t.size;if(0!==t.rank&&(1!==t.rank||i!==a))throw new Error(`sparseValues has incorrect shape ${t.shape}, should be [] or [${a}]`);if(t.dtype!==r.dtype)throw new Error("sparseValues.dtype must match defaultValues.dtype")}(a,s,n,i);const o={sparseIndices:a,sparseValues:s,defaultValue:i},l={outputShape:n};return Wa.runKernel(Cr,o,l)}}),Bh=Za({gatherND_:function(e,t){const n=qa(t,"indices","gatherND","int32"),r={params:qa(e,"x","gatherND"),indices:n};return Wa.runKernel(tn,r)}}),$h=Za({dropout_:function(e,t,n,r){const a=qa(e,"x","dropout");if(Q("float32"===a.dtype,(()=>`x has to be a floating point tensor since it's going to be scaled, but got a ${a.dtype} tensor instead.`)),Q(t>=0&&t<1,(()=>`rate must be a float in the range [0, 1), but got ${t}.`)),0===t)return e instanceof _a?a.clone():a;const s=function(e,t){if(null==t)return e.shape.slice();if(se(e.shape,t))return t;if(e.shape.length===t.length){const n=[];for(let r=0;r1,(()=>`inTopK() expects the predictions to be of rank 2 or higher, but got ${r.rank}`)),Q(r.rank-1===a.rank,(()=>`predictions rank should be 1 larger than targets rank, but got predictions rank ${r.rank} and targets rank ${a.rank}`)),ee(r.shape.slice(0,r.shape.length-1),a.shape,"predictions's shape should be align with the targets' shape, except the last dimension.");const s=r.shape[r.shape.length-1];Q(n>0&&n<=s,(()=>`'k' passed to inTopK() must be > 0 && <= the predictions last dimension (${s}), but got ${n}`));const i=await r.data(),o=await a.data(),[l,u]=[i.length/s,s],c=me("bool",l);for(let e=0;et.value-e.value)),c[e]=0;for(let t=0;t`Error in conv2dDerFilter: input must be rank 4, but got shape ${o.shape}.`)),Q(4===l.rank,(()=>`Error in conv2dDerFilter: dy must be rank 4, but got shape ${l.shape}.`)),Q(4===n.length,(()=>`Error in conv2dDerFilter: filterShape must be length 4, but got ${n}.`));const u="NHWC"===s?o.shape[3]:o.shape[1],c="NHWC"===s?l.shape[3]:l.shape[1];Q(u===n[2],(()=>`Error in conv2dDerFilter: depth of input ${u}) must match input depth in filter (${n[2]}.`)),Q(c===n[3],(()=>`Error in conv2dDerFilter: depth of dy (${c}) must match output depth for filter (${n[3]}).`)),null!=i&&Q(ie(a),(()=>`Error in conv2dDerFilter: pad must be an integer when using, dimRoundingMode ${i} but got pad ${a}.`));const h={x:o,dy:l},f={strides:r,pad:a,dataFormat:s,dimRoundingMode:i,filterShape:n};return Wa.runKernel(_t,h,f)}});function Uh(e,t,n){if(null==n||"linear"===n)return e;if("relu"===n)return Do(e,ph(t));throw new Error(`Cannot compute gradient for fused activation ${n}.`)}function Vh(e,t){let n=t;const r=Jo(e.shape,t.shape);return r.length>0&&(n=Uu(n,r)),Al(n,e.shape)}function jh(e,t,n,r){if("linear"===t)return e;if("relu"===t)return zc(e);if("elu"===t)return gu(e);if("relu6"===t)return Wc(e);if("prelu"===t)return Nc(e,n);if("leakyrelu"===t)return Tu(e,r);if("sigmoid"===t)return Rl(e);throw new Error(`Unknown fused activation ${t}.`)}const Hh=(e,t)=>!(e>0)||"linear"===t,Gh=Za({fusedConv2d_:function({x:e,filter:t,strides:n,pad:r,dataFormat:a="NHWC",dilations:s=[1,1],dimRoundingMode:i,bias:o,activation:l="linear",preluActivationWeights:u,leakyreluAlpha:c}){if(l=l||"linear",!1===Hh(Wa.state.gradientDepth,l)){let h=Yl(e,t,n,r,a,s,i);return null!=o&&(h=No(h,o)),jh(h,l,u,c)}const h=qa(e,"x","conv2d"),f=qa(t,"filter","conv2d");let d=h,p=!1;3===h.rank&&(p=!0,d=Al(h,[1,h.shape[0],h.shape[1],h.shape[2]])),Q(4===d.rank,(()=>`Error in fused conv2d: input must be rank 4, but got rank ${d.rank}.`)),Q(4===f.rank,(()=>`Error in fused conv2d: filter must be rank 4, but got rank ${f.rank}.`)),null!=i&&Q(ie(r),(()=>`Error in fused conv2d: pad must be an integer when using, dimRoundingMode ${i} but got pad ${r}.`)),Q(d.shape[3]===f.shape[2],(()=>`Error in conv2d: depth of input (${d.shape[3]}) must match input depth for filter ${f.shape[2]}.`)),Q(Nl(n,s),(()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${n} and dilations '${s}'`)),Q("NHWC"===a,(()=>`Error in conv2d: got dataFormat of ${a} but only NHWC is currently supported.`));const m=vl(d.shape,f.shape,n,s,r,i);let g,y;null!=o&&(g=qa(o,"bias","fused conv2d"),[g]=Fa(g,h),Zo(m.outShape,g.shape)),null!=u&&(y=qa(u,"prelu weights","fused conv2d"));const b=(e,t)=>{const[a,i,o,u]=t,c=Uh(e,o,l);Q(Sl(s),(()=>`Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${s}'`));const h=[Zl(i.shape,c,a,n,r),Wh(i,c,a.shape,n,r)];if(null!=u){const e=Vh(u,c);h.push(e)}return h},v={x:d,filter:f,bias:g,preluActivationWeights:y},w={strides:n,pad:r,dataFormat:a,dilations:s,dimRoundingMode:i,activation:l,leakyreluAlpha:c};return null==o?Lo(((e,t,n)=>{let r=Wa.runKernel(jr,v,w);return n([t,e,r]),p&&(r=Al(r,[r.shape[1],r.shape[2],r.shape[3]])),{value:r,gradFunc:b}}))(d,f):Lo(((e,t,n,r)=>{let a=Wa.runKernel(jr,v,w);return r([t,e,a,n]),p&&(a=Al(a,[a.shape[1],a.shape[2],a.shape[3]])),{value:a,gradFunc:b}}))(d,f,g)}}),Xh=Za({depthwiseConv2dNativeBackpropFilter_:function(e,t,n,r,a,s=[1,1],i){let o=e;3===e.rank&&(o=Al(e,[1,e.shape[0],e.shape[1],e.shape[2]]));let l=t;3===l.rank&&(l=Al(t,[1,t.shape[0],t.shape[1],t.shape[2]]));const u={x:o,dy:l},c={strides:r,pad:a,dimRoundingMode:i,dilations:s,filterShape:n};return Wa.runKernel(Rt,u,c)}}),Kh=Za({depthwiseConv2dNativeBackpropInput_:function(e,t,n,r,a,s=[1,1],i){let o=t,l=!1;3===t.rank&&(l=!0,o=Al(t,[1,t.shape[0],t.shape[1],t.shape[2]]));const u={dy:o,filter:n},c={strides:r,pad:a,dimRoundingMode:i,dilations:s,inputShape:e},h=Wa.runKernel(Ot,u,c);return l?Al(h,[h.shape[1],h.shape[2],h.shape[3]]):h}}),qh=Za({fusedDepthwiseConv2d_:function({x:e,filter:t,strides:n,pad:r,dataFormat:a="NHWC",dilations:s=[1,1],dimRoundingMode:i,bias:o,activation:l="linear",preluActivationWeights:u,leakyreluAlpha:c}){if(!1===Hh(Wa.state.gradientDepth,l)){let h=lu(e,t,n,r,a,s,i);return null!=o&&(h=No(h,o)),jh(h,l,u,c)}const h=qa(e,"x","depthwiseConv2d"),f=qa(t,"filter","depthwiseConv2d");let d=h,p=!1;3===h.rank&&(p=!0,d=Al(h,[1,h.shape[0],h.shape[1],h.shape[2]])),Q(4===d.rank,(()=>`Error in fused depthwiseConv2d: input must be rank 4, but got rank ${d.rank}.`)),Q(4===f.rank,(()=>`Error in fused depthwiseConv2d: filter must be rank 4, but got rank ${f.rank}.`)),Q(d.shape[3]===f.shape[2],(()=>`Error in fused depthwiseConv2d: number of input channels (${d.shape[3]}) must match the inChannels dimension in filter ${f.shape[2]}.`)),null==s&&(s=[1,1]),Q(Nl(n,s),(()=>`Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides ${n} and dilations '${s}'`)),null!=i&&Q(ie(r),(()=>`Error in fused depthwiseConv2d: pad must be an integer when using dimRoundingMode ${i} but got pad ${r}.`));const m=vl(d.shape,f.shape,n,s,r,i,!0);let g,y;null!=o&&(g=qa(o,"bias","fused conv2d"),[g]=Fa(g,h),Zo(m.outShape,g.shape)),null!=u&&(y=qa(u,"prelu weights","fused depthwiseConv2d"));const b=(e,t)=>{Q(Sl(s),(()=>`Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '${s}'`));const[a,o,u,c]=t,h=Uh(e,u,l),f=Kh(o.shape,h,a,n,r,s,i),d=Xh(o,h,a.shape,n,r,s,i);return null!=c?[f,d,Vh(g,h)]:[f,d]},v={x:d,filter:f,bias:g,preluActivationWeights:y},w={strides:n,pad:r,dataFormat:a,dilations:s,dimRoundingMode:i,activation:l,leakyreluAlpha:c};return null==o?Lo(((e,t,n)=>{let r=Wa.runKernel(Hr,v,w);return n([t,e,r]),p&&(r=Al(r,[r.shape[1],r.shape[2],r.shape[3]])),{value:r,gradFunc:b}}))(d,f):Lo(((e,t,n,r)=>{let a=Wa.runKernel(Hr,v,w);return r([t,e,a,n]),p&&(a=Al(a,[a.shape[1],a.shape[2],a.shape[3]])),{value:a,gradFunc:b}}))(d,f,g)}}),Yh=Za({fusedMatMul_:function({a:e,b:t,transposeA:n=!1,transposeB:r=!1,bias:a,activation:s="linear",preluActivationWeights:i,leakyreluAlpha:o}){if(!1===Hh(Wa.state.gradientDepth,s)){let l=pi(e,t,n,r);return null!=a&&(l=No(l,a)),jh(l,s,i,o)}let l=qa(e,"a","fused matMul"),u=qa(t,"b","fused matMul");[l,u]=Fa(l,u);const c=n?l.shape[l.rank-2]:l.shape[l.rank-1],h=r?u.shape[u.rank-1]:u.shape[u.rank-2],f=n?l.shape[l.rank-1]:l.shape[l.rank-2],d=r?u.shape[u.rank-2]:u.shape[u.rank-1],p=l.shape.slice(0,-2),m=u.shape.slice(0,-2),g=re(p),y=re(m);Q(l.rank>=2&&u.rank>=2&&l.rank===u.rank,(()=>`Error in fused matMul: inputs must have the same rank of at least 2, got ranks ${l.rank} and ${u.rank}.`)),Q(se(p,m),(()=>`Error in fused matMul: outer dimensions (${p}) and (${m}) of Tensors with shapes ${l.shape} and ${u.shape} must match.`)),Q(c===h,(()=>`Error in fused matMul: inner shapes (${c}) and (${h}) of Tensors with shapes ${l.shape} and ${u.shape} and transposeA=${n} and transposeB=${r} must match.`));const b=l.shape.slice(0,-2).concat([f,d]),v=Al(l,n?[g,c,f]:[g,f,c]),w=Al(u,r?[y,d,h]:[y,h,d]);let _,x;null!=a&&(_=qa(a,"bias","fused matMul"),[_]=Fa(_,l),Zo(b,_.shape)),null!=i&&(x=qa(i,"prelu weights","fused matMul"));const k=(e,t)=>{const[i,o,l,u]=t,c=Uh(Al(e,l.shape),l,s);let h,f;return n||r?!n&&r?(h=pi(c,o,!1,!1),f=pi(c,i,!0,!1)):n&&!r?(h=pi(o,c,!1,!0),f=pi(i,c,!1,!1)):(h=pi(o,c,!0,!0),f=pi(c,i,!0,!0)):(h=pi(c,o,!1,!0),f=pi(i,c,!0,!1)),null!=a?[h,f,Vh(u,c)]:[h,f]},E={a:v,b:w,bias:_,preluActivationWeights:x},C={transposeA:n,transposeB:r,activation:s,leakyreluAlpha:o};return null==a?Lo(((e,t,n)=>{const r=Wa.runKernel(Vr,E,C);return n([e,t,r]),{value:Al(r,b),gradFunc:k}}))(v,w):Lo(((e,t,n,r)=>{const a=Wa.runKernel(Vr,E,C);return r([e,t,a,n]),{value:Al(a,b),gradFunc:k}}))(v,w,_)}}),Jh=Za({hammingWindow_:function(e){return Lh(e,.54,.46)}}),Zh=Za({hannWindow_:function(e){return Lh(e,.5,.5)}}),Qh=Za({frame_:function(e,t,n,r=!1,a=0){let s=0;const i=[];for(;s+t<=e.size;)i.push(Ol(e,s,t)),s+=n;if(r)for(;s`Error in cropAndResize: image must be rank 4,but got rank ${i.rank}.`)),Q(2===o.rank&&4===o.shape[1],(()=>`Error in cropAndResize: boxes must be have size [${u},4] but had shape ${o.shape}.`)),Q(1===l.rank&&l.shape[0]===u,(()=>`Error in cropAndResize: boxInd must be have size [${u}] but had shape ${o.shape}.`)),Q(2===r.length,(()=>`Error in cropAndResize: cropSize must be of length 2, but got length ${r.length}.`)),Q(r[0]>=1&&r[1]>=1,(()=>`cropSize must be atleast [1,1], but was ${r}`)),Q("bilinear"===a||"nearest"===a,(()=>`method must be bilinear or nearest, but was ${a}`));const c={image:i,boxes:o,boxInd:l},h={method:a,extrapolationValue:s,cropSize:r};return Wa.runKernel(At,c,h)}}),nf=Za({flipLeftRight_:function(e){const t=qa(e,"image","flipLeftRight","float32");Q(4===t.rank,(()=>`Error in flipLeftRight: image must be rank 4,but got rank ${t.rank}.`));const n={image:t};return Wa.runKernel(Yt,n,{})}}),rf=Za({rotateWithOffset_:function(e,t,n=0,r=.5){const a=qa(e,"image","rotateWithOffset","float32");Q(4===a.rank,(()=>`Error in rotateWithOffset: image must be rank 4,but got rank ${a.rank}.`));const s={image:a},i={radians:t,fillValue:n,center:r};return Wa.runKernel(Ur,s,i)}});function af(e,t,n,r,a,s){null==r&&(r=.5),null==a&&(a=Number.NEGATIVE_INFINITY),null==s&&(s=0);const i=e.shape[0];return n=Math.min(n,i),Q(0<=r&&r<=1,(()=>`iouThreshold must be in [0, 1], but was '${r}'`)),Q(2===e.rank,(()=>`boxes must be a 2D tensor, but was of rank '${e.rank}'`)),Q(4===e.shape[1],(()=>`boxes must have 4 columns, but 2nd dimension was ${e.shape[1]}`)),Q(1===t.rank,(()=>"scores must be a 1D tensor")),Q(t.shape[0]===i,(()=>`scores has incompatible shape with boxes. Expected ${i}, but was ${t.shape[0]}`)),Q(0<=s&&s<=1,(()=>`softNmsSigma must be in [0, 1], but was '${s}'`)),{maxOutputSize:n,iouThreshold:r,scoreThreshold:a,softNmsSigma:s}}const sf=Za({nonMaxSuppression_:function(e,t,n,r=.5,a=Number.NEGATIVE_INFINITY){const s=qa(e,"boxes","nonMaxSuppression"),i=qa(t,"scores","nonMaxSuppression"),o=af(s,i,n,r,a),l={maxOutputSize:n=o.maxOutputSize,iouThreshold:r=o.iouThreshold,scoreThreshold:a=o.scoreThreshold};return Wa.runKernel(Ln,{boxes:s,scores:i},l)}});function of(e,t,n){const r=function(e,t,n){return function(e,t,n){let r=0,a=e.length,s=0,i=!1;for(;r>>1);const o=n(t,e[s]);o>0?r=s+1:(a=s,i=!o)}return i?r:-r-1}(e,t,n||lf)}(e,t,n),a=r<0?-(r+1):r;e.splice(a,0,t)}function lf(e,t){return e>t?1:ea&&u.push({score:t[e],boxIndex:e,suppressBeginIndex:0});u.sort(mf);const c=s>0?-.5/s:0,h=[],f=[];for(;h.length0;){const t=u.pop(),{score:n,boxIndex:s,suppressBeginIndex:i}=t;if(n=i;--n){const i=df(e,s,h[n]);if(i>=r){o=!0;break}if(t.score=t.score*pf(r,c,i),t.score<=a)break}t.suppressBeginIndex=h.length,o||(t.score===n?(h.push(s),f.push(t.score)):t.score>a&&of(u,t,mf))}const d=h.length,p=n-d;o&&p>0&&(h.push(...new Array(p).fill(0)),f.push(...new Array(p).fill(0)));const m={selectedIndices:h};return i&&(m.selectedScores=f),l&&(m.validOutputs=d),m}function df(e,t,n){const r=e.subarray(4*t,4*t+4),a=e.subarray(4*n,4*n+4),s=Math.min(r[0],r[2]),i=Math.min(r[1],r[3]),o=Math.max(r[0],r[2]),l=Math.max(r[1],r[3]),u=Math.min(a[0],a[2]),c=Math.min(a[1],a[3]),h=Math.max(a[0],a[2]),f=Math.max(a[1],a[3]),d=(o-s)*(l-i),p=(h-u)*(f-c);if(d<=0||p<=0)return 0;const m=Math.max(s,u),g=Math.max(i,c),y=Math.min(o,h),b=Math.min(l,f),v=Math.max(y-m,0)*Math.max(b-g,0);return v/(d+p-v)}function pf(e,t,n){const r=Math.exp(t*n*n);return n<=e?r:0}function mf(e,t){return e.score-t.score||e.score===t.score&&t.boxIndex-e.boxIndex}const gf=Za({nonMaxSuppressionWithScore_:function(e,t,n,r=.5,a=Number.NEGATIVE_INFINITY,s=0){const i=qa(e,"boxes","nonMaxSuppression"),o=qa(t,"scores","nonMaxSuppression"),l=af(i,o,n,r,a,s),u={boxes:i,scores:o},c={maxOutputSize:n=l.maxOutputSize,iouThreshold:r=l.iouThreshold,scoreThreshold:a=l.scoreThreshold,softNmsSigma:s=l.softNmsSigma},h=Wa.runKernel(Wn,u,c);return{selectedIndices:h[0],selectedScores:h[1]}}}),yf=Za({nonMaxSuppressionPadded_:function(e,t,n,r=.5,a=Number.NEGATIVE_INFINITY,s=!1){const i=qa(e,"boxes","nonMaxSuppression"),o=qa(t,"scores","nonMaxSuppression"),l=af(i,o,n,r,a,null),u={boxes:i,scores:o},c={maxOutputSize:l.maxOutputSize,iouThreshold:l.iouThreshold,scoreThreshold:l.scoreThreshold,padToMaxOutputSize:s},h=Wa.runKernel(zn,u,c);return{selectedIndices:h[0],validOutputs:h[1]}}}),bf=Za({resizeBilinear_:function(e,t,n=!1,r=!1){const a=qa(e,"images","resizeBilinear");Q(3===a.rank||4===a.rank,(()=>`Error in resizeBilinear: x must be rank 3 or 4, but got rank ${a.rank}.`)),Q(2===t.length,(()=>`Error in resizeBilinear: new shape must 2D, but got shape ${t}.`)),Q(!1===r||!1===n,(()=>"Error in resizeBilinear: If halfPixelCenters is true, alignCorners must be false."));let s=a,i=!1;3===a.rank&&(i=!0,s=Al(a,[1,a.shape[0],a.shape[1],a.shape[2]]));const[]=t,o={images:s},l={alignCorners:n,halfPixelCenters:r,size:t},u=Wa.runKernel(rr,o,l);return i?Al(u,[u.shape[1],u.shape[2],u.shape[3]]):u}}),vf=Za({resizeNearestNeighbor_:function(e,t,n=!1,r=!1){const a=qa(e,"images","resizeNearestNeighbor");Q(3===a.rank||4===a.rank,(()=>`Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${a.rank}.`)),Q(2===t.length,(()=>`Error in resizeNearestNeighbor: new shape must 2D, but got shape ${t}.`)),Q("float32"===a.dtype||"int32"===a.dtype,(()=>"`images` must have `int32` or `float32` as dtype")),Q(!1===r||!1===n,(()=>"Error in resizeNearestNeighbor: If halfPixelCenters is true, alignCorners must be false."));let s=a,i=!1;3===a.rank&&(i=!0,s=Al(a,[1,a.shape[0],a.shape[1],a.shape[2]]));const[]=t,o={images:s},l={alignCorners:n,halfPixelCenters:r,size:t},u=Wa.runKernel(tr,o,l);return i?Al(u,[u.shape[1],u.shape[2],u.shape[3]]):u}}),wf=Za({threshold_:function(e,t="binary",n=!1,r=.5){const a=qa(e,"image","threshold"),s=a.shape[0]*a.shape[1];let i,o,l,u,c=Do(yh([r]),255);if(Q(3===a.rank,(()=>`Error in threshold: image must be rank 3,but got rank ${a.rank}.`)),Q(3===a.shape[2]||1===a.shape[2],(()=>`Error in threshold: image color channel must be equal to 3 or 1but got ${a.shape[2]}.`)),Q("int32"===a.dtype||"float32"===a.dtype,(()=>`Error in dtype: image dtype must be int32 or float32,but got dtype ${a.dtype}.`)),Q("otsu"===t||"binary"===t,(()=>`Method must be binary or otsu, but was ${t}`)),3===a.shape[2]){[i,o,l]=uh(a,[1,1,1],-1);const e=Do(i,.2989),t=Do(o,.587),n=Do(l,.114);u=No(No(e,t),n)}else u=e;"otsu"===t&&(c=function(e,t){let n,r,a,s,i,o,l=yh([-1]),u=yh([0]),c=yh([0]);for(let h=0;h`Error in transform: image must be rank 4,but got rank ${i.rank}.`)),Q(2===o.rank&&(o.shape[0]===i.shape[0]||1===o.shape[0])&&8===o.shape[1],(()=>"Error in transform: Input transform should be batch x 8 or 1 x 8")),Q(null==s||2===s.length,(()=>`Error in transform: outputShape must be [height, width] or null, but got ${s}.`));const l={image:i,transforms:o},u={interpolation:n,fillMode:r,fillValue:a,outputShape:s};return Wa.runKernel(Or,l,u)}}),xf=Za({bandPart_:function(e,t,n){Q(t%1==0,(()=>`bandPart(): numLower must be an integer, got ${t}.`)),Q(n%1==0,(()=>`bandPart(): numUpper must be an integer, got ${n}.`));const r=qa(e,"a","bandPart");Q(r.rank>=2,(()=>`bandPart(): Rank must be at least 2, got ${r.rank}.`));const a=r.shape,[s,i]=r.shape.slice(-2);if(!(t<=s))throw new Error(`bandPart(): numLower (${t}) must not be greater than the number of rows (${s}).`);if(!(n<=i))throw new Error(`bandPart(): numUpper (${n}) must not be greater than the number of columns (${i}).`);t<0&&(t=s),n<0&&(n=i);const o=Al($c(0,s,1,"int32"),[-1,1]),l=$c(0,i,1,"int32"),u=Xo(o,l),c=Qu(Ru(u,Wo(+t,"int32")),Su(u,Wo(-n,"int32"))),h=oc([s,i],r.dtype);return Al(dh(Sh(Al(r,[-1,s,i])).map((e=>fu(c,e,h)))),a)}}),kf=Za({gramSchmidt_:function(e){let t;if(Array.isArray(e)){t=!1,Q(null!=e&&e.length>0,(()=>"Gram-Schmidt process: input must not be null, undefined, or empty"));const n=e[0].shape[0];for(let t=1;t`Gram-Schmidt: Non-unique lengths found in the input vectors: (${e[t].shape[0]} vs. ${n})`))}else t=!0,e=uh(e,e.shape[0],0).map((e=>fh(e,[0])));Q(e.length<=e[0].shape[0],(()=>`Gram-Schmidt: Number of vectors (${e.length}) exceeds number of dimensions (${e[0].shape[0]}).`));const n=[],r=e;for(let t=0;t{let e=r[t];if(t>0)for(let r=0;r{Q(2===e.shape.length,(()=>`qr2d() requires a 2D Tensor, but got a ${e.shape.length}D Tensor.`));const n=e.shape[0],r=e.shape[1];let a=xu(n),s=qs(e);const i=bh([[1]],[1,1]);let o=qs(i);const l=n>=r?r:n;for(let e=0;e{const t=Ol(s,[e,e],[n-e,1]),l=Fh(t),u=Ol(s,[e,e],[1,1]),c=fu(Cu(u,0),bh([[-1]]),bh([[1]])),h=Xo(u,Do(c,l)),f=Ao(t,h);o=1===f.shape[0]?qs(i):Fl([i,Ol(f,[1,0],[f.shape[0]-1,f.shape[1]])],0);const d=Pu(Ao(pi(c,h),l)),p=Ol(s,[e,0],[n-e,r]),m=Do(d,o),g=gi(o);if(0===e)s=Xo(p,pi(m,pi(g,p)));else{const t=Xo(p,pi(m,pi(g,p)));s=Fl([Ol(s,[0,0],[e,r]),t],0)}const y=gi(m),b=Ol(a,[0,e],[n,a.shape[1]-e]);if(0===e)a=Xo(b,pi(pi(b,o),y));else{const t=Xo(b,pi(pi(b,o),y));a=Fl([Ol(a,[0,0],[n,e]),t],1)}return[o,s,a]})),mo([t,l,u])}return!t&&n>r&&(a=Ol(a,[0,0],[n,r]),s=Ol(s,[0,0],[r,r])),[a,s]}))}const Cf=Za({qr_:function(e,t=!1){if(Q(e.rank>=2,(()=>`qr() requires input tensor to have a rank >= 2, but got rank ${e.rank}`)),2===e.rank)return Ef(e,t);{const n=e.shape.slice(0,e.shape.length-2).reduce(((e,t)=>e*t)),r=Sh(Al(e,[n,e.shape[e.shape.length-2],e.shape[e.shape.length-1]]),0),a=[],s=[];return r.forEach((e=>{const[n,r]=Ef(e,t);a.push(n),s.push(r)})),[Al(dh(a,0),e.shape),Al(dh(s,0),e.shape)]}}});var Sf;!function(e){e[e.NONE=0]="NONE",e[e.MEAN=1]="MEAN",e[e.SUM=2]="SUM",e[e.SUM_BY_NONZERO_WEIGHTS=3]="SUM_BY_NONZERO_WEIGHTS"}(Sf||(Sf={}));const Nf=Za({computeWeightedLoss_:function(e,t,n=Sf.SUM_BY_NONZERO_WEIGHTS){const r=qa(e,"losses","computeWeightedLoss");let a=null;null!=t&&(a=qa(t,"weights","computeWeightedLoss"));const s=null==a?r:Do(r,a);if(n===Sf.NONE)return s;if(n===Sf.SUM)return Uu(s);if(n===Sf.MEAN){if(null==a)return ic(s);{const e=r.size/a.size,t=Ao(Uu(s),Uu(a));return e>1?Ao(t,Wo(e)):t}}if(n===Sf.SUM_BY_NONZERO_WEIGHTS){if(null==a)return Ao(Uu(s),Wo(r.size));{const e=Do(a,lc(r.shape)),t=Ks(Uu(yc(e,Wo(0))),"float32");return Ao(Uu(s),t)}}throw Error(`Unknown reduction: ${n}`)}}),If=Za({absoluteDifference_:function(e,t,n,r=Sf.SUM_BY_NONZERO_WEIGHTS){const a=qa(e,"labels","absoluteDifference"),s=qa(t,"predictions","absoluteDifference");let i=null;null!=n&&(i=qa(n,"weights","absoluteDifference")),ee(a.shape,s.shape,"Error in absoluteDifference: ");const o=qo(Xo(a,s));return Nf(o,i,r)}}),Af=Za({cosineDistance_:function(e,t,n,r,a=Sf.SUM_BY_NONZERO_WEIGHTS){const s=qa(e,"labels","cosineDistance"),i=qa(t,"predictions","cosineDistance");let o=null;null!=r&&(o=qa(r,"weights","cosineDistance")),ee(s.shape,i.shape,"Error in cosineDistance: ");const l=Wo(1),u=Xo(l,Uu(Do(s,i),n,!0));return Nf(u,o,a)}}),Df=Za({hingeLoss_:function(e,t,n,r=Sf.SUM_BY_NONZERO_WEIGHTS){let a=qa(e,"labels","hingeLoss");const s=qa(t,"predictions","hingeLoss");let i=null;null!=n&&(i=qa(n,"weights","hingeLoss")),ee(a.shape,s.shape,"Error in hingeLoss: ");const o=Wo(1);a=Xo(Do(Wo(2),a),o);const l=zc(Xo(o,Do(a,s)));return Nf(l,i,r)}}),Tf=Za({huberLoss_:function(e,t,n,r=1,a=Sf.SUM_BY_NONZERO_WEIGHTS){const s=qa(e,"labels","huberLoss"),i=qa(t,"predictions","huberLoss");let o=null;null!=n&&(o=qa(n,"weights","huberLoss")),ee(s.shape,i.shape,"Error in huberLoss: ");const l=Wo(r),u=qo(Xo(i,s)),c=hc(u,l),h=Xo(u,c),f=No(Do(Wo(.5),Fo(c)),Do(l,h));return Nf(f,o,a)}}),Ff=Za({logLoss_:function(e,t,n,r=1e-7,a=Sf.SUM_BY_NONZERO_WEIGHTS){const s=qa(e,"labels","logLoss"),i=qa(t,"predictions","logLoss");let o=null;null!=n&&(o=qa(n,"weights","logLoss")),ee(s.shape,i.shape,"Error in logLoss: ");const l=Wo(1),u=Wo(r),c=Pu(Do(s,Bu(No(i,u)))),h=Do(Xo(l,s),Bu(No(Xo(l,i),u))),f=Xo(c,h);return Nf(f,o,a)}}),Rf=Za({meanSquaredError_:function(e,t,n,r=Sf.SUM_BY_NONZERO_WEIGHTS){const a=qa(e,"labels","meanSquaredError"),s=qa(t,"predictions","meanSquaredError");let i=null;null!=n&&(i=qa(n,"weights","meanSquaredError")),ee(a.shape,s.shape,"Error in meanSquaredError: ");const o=hh(a,s);return Nf(o,i,r)}}),Of=Za({sigmoidCrossEntropy_:function(e,t,n,r=0,a=Sf.SUM_BY_NONZERO_WEIGHTS){let s=qa(e,"multiClassLabels","sigmoidCrossEntropy");const i=qa(t,"logits","sigmoidCrossEntropy");let o=null;if(null!=n&&(o=qa(n,"weights","sigmoidCrossEntropy")),ee(s.shape,i.shape,"Error in sigmoidCrossEntropy: "),r>0){const e=Wo(r),t=Wo(1),n=Wo(.5);s=No(Do(s,Xo(t,e)),Do(n,e))}const l=function(e,t){const n=qa(e,"labels","sigmoidCrossEntropyWithLogits"),r=qa(t,"logits","sigmoidCrossEntropyWithLogits");ee(n.shape,r.shape,"Error in sigmoidCrossEntropyWithLogits: ");const a=zc(r),s=Do(r,n),i=$u(bu(Pu(qo(r))));return No(Xo(a,s),i)}(s,i);return Nf(l,o,a)}}),Mf=Za({softmaxCrossEntropy_:function(e,t,n,r=0,a=Sf.SUM_BY_NONZERO_WEIGHTS){let s=qa(e,"onehotLabels","softmaxCrossEntropy");const i=qa(t,"logits","softmaxCrossEntropy");let o=null;if(null!=n&&(o=qa(n,"weights","softmaxCrossEntropy")),ee(s.shape,i.shape,"Error in softmaxCrossEntropy: "),r>0){const e=Wo(r),t=Wo(1),n=Wo(s.shape[1]);s=No(Do(s,Xo(t,e)),Ao(e,n))}const l=function(e,t,n=-1){if(-1===n&&(n=t.rank-1),n!==t.rank-1)throw Error(`Softmax cross entropy along a non-last dimension is not yet supported. Labels / logits was rank ${t.rank} and dim was ${n}`);return Lo(((e,t,r)=>{const a=Zu(t,[n],!0),s=Xo(Ks(t,"float32"),a);r([e,s]);const i=Pu(Do(s,e));return{value:Uu(i,[n]),gradFunc:(e,t)=>{const[r,a]=t,s=Xu(e.shape,[n]);return[Do(Al(e,s),Xo(Ks(r,"float32"),bu(a))),Do(Al(e,s),Xo(bu(a),Ks(r,"float32")))]}}}))(e,t)}(s,i);return Nf(l,o,a)}}),Bf=Za({sparseFillEmptyRows_:function(e,t,n,r){const a=qa(e,"indices","sparseFillEmptyRows"),s=qa(t,"values","sparseFillEmptyRows"),i=qa(n,"denseShape","sparseFillEmptyRows"),o=qa(r,"defaultValue","sparseFillEmptyRows",s.dtype);if(2!==a.rank)throw new Error(`Indices should be Tensor2D but received shape\n ${a.shape}`);if(1!==s.rank)throw new Error(`Values should be Tensor1D but received shape ${s.shape}`);if(1!==i.rank)throw new Error(`Dense shape should be Tensor1D but received shape ${i.shape}`);if(0!==o.rank)throw new Error(`Default value should be a scalar but received shape ${o.shape}`);const l={indices:a,values:s,denseShape:i,defaultValue:o},u=Wa.runKernel(kr,l);return{outputIndices:u[0],outputValues:u[1],emptyRowIndicator:u[2],reverseIndexMap:u[3]}}}),$f=Za({sparseReshape_:function(e,t,n){const r=qa(e,"inputIndices","sparseReshape"),a=qa(t,"inputShape","sparseReshape"),s=qa(n,"newShape","sparseReshape");if(2!==r.rank)throw new Error(`Input indices should be Tensor2D but received shape\n ${r.shape}`);if(1!==a.rank)throw new Error(`Input shape should be Tensor1D but received shape ${a.shape}`);if(1!==s.rank)throw new Error(`New shape should be Tensor1D but received shape ${s.shape}`);const i={inputIndices:r,inputShape:a,newShape:s},o=Wa.runKernel(Er,i);return{outputIndices:o[0],outputShape:o[1]}}}),Pf={fft:ih,ifft:oh,rfft:ch,irfft:lh},Lf={hammingWindow:Jh,hannWindow:Zh,frame:Qh,stft:ef},zf={flipLeftRight:nf,resizeNearestNeighbor:vf,resizeBilinear:bf,rotateWithOffset:rf,cropAndResize:tf,nonMaxSuppression:sf,nonMaxSuppressionAsync:async function(e,t,n,r=.5,a=Number.NEGATIVE_INFINITY){const s=qa(e,"boxes","nonMaxSuppressionAsync"),i=qa(t,"scores","nonMaxSuppressionAsync"),o=af(s,i,n,r,a);n=o.maxOutputSize,r=o.iouThreshold,a=o.scoreThreshold;const l=await Promise.all([s.data(),i.data()]),u=l[0],c=l[1],{selectedIndices:h}=uf(u,c,n,r,a);return s!==e&&s.dispose(),i!==t&&i.dispose(),yh(h,"int32")},nonMaxSuppressionWithScore:gf,nonMaxSuppressionWithScoreAsync:async function(e,t,n,r=.5,a=Number.NEGATIVE_INFINITY,s=0){const i=qa(e,"boxes","nonMaxSuppressionAsync"),o=qa(t,"scores","nonMaxSuppressionAsync"),l=af(i,o,n,r,a,s);n=l.maxOutputSize,r=l.iouThreshold,a=l.scoreThreshold,s=l.softNmsSigma;const u=await Promise.all([i.data(),o.data()]),c=u[0],h=u[1],{selectedIndices:f,selectedScores:d}=hf(c,h,n,r,a,s);return i!==e&&i.dispose(),o!==t&&o.dispose(),{selectedIndices:yh(f,"int32"),selectedScores:yh(d)}},nonMaxSuppressionPadded:yf,nonMaxSuppressionPaddedAsync:async function(e,t,n,r=.5,a=Number.NEGATIVE_INFINITY,s=!1){const i=qa(e,"boxes","nonMaxSuppressionAsync"),o=qa(t,"scores","nonMaxSuppressionAsync"),l=af(i,o,n,r,a,null),u=l.maxOutputSize,c=l.iouThreshold,h=l.scoreThreshold,[f,d]=await Promise.all([i.data(),o.data()]),{selectedIndices:p,validOutputs:m}=cf(f,d,u,c,h,s);return i!==e&&i.dispose(),o!==t&&o.dispose(),{selectedIndices:yh(p,"int32"),validOutputs:Wo(m,"int32")}},threshold:wf,transform:_f},Wf={bandPart:xf,gramSchmidt:kf,qr:Cf},Uf={absoluteDifference:If,computeWeightedLoss:Nf,cosineDistance:Af,hingeLoss:Df,huberLoss:Tf,logLoss:Ff,meanSquaredError:Rf,sigmoidCrossEntropy:Of,softmaxCrossEntropy:Mf},Vf={sparseFillEmptyRows:Bf,sparseReshape:$f};class jf{static sgd(e){return new tl(e)}static momentum(e,t,n=!1){return new nl(e,t,n)}static rmsprop(e,t=.9,n=0,r=null,a=!1){return new rl(e,t,n,r,a)}static adam(e=.001,t=.9,n=.999,r=null){return new Ko(e,t,n,r)}static adadelta(e=.001,t=.95,n=null){return new Vo(e,t,n)}static adamax(e=.002,t=.9,n=.999,r=null,a=0){return new el(e,t,n,r,a)}static adagrad(e,t=.1){return new Ho(e,t)}}const Hf={sgd:jf.sgd,momentum:jf.momentum,adadelta:jf.adadelta,adagrad:jf.adagrad,rmsprop:jf.rmsprop,adamax:jf.adamax,adam:jf.adam},Gf="undefined"!=typeof requestAnimationFrame?requestAnimationFrame:"undefined"!=typeof setImmediate?setImmediate:e=>e();function Xf(){return new Promise((e=>Gf((()=>e()))))}function Kf(e,t){const n=e[0].length;e.forEach(((e,t)=>{Q(e.length===n,(()=>`Error in concat${n}D: rank of tensors[${t}] must be the same as the rank of the rest (${n})`))})),Q(t>=0&&t`Error in concat${n}D: axis must be between 0 and ${n-1}.`));const r=e[0];e.forEach(((e,a)=>{for(let s=0;s`Error in concat${n}D: Shape of tensors[${a}] (${e}) does not match the shape of the rest (${r}) along the non-concatenated axis ${a}.`))}))}function qf(e,t){const n=e[0].slice();for(let r=1;r=2*t+1||r%2==1?a.push(r):n.push(r);r.push(...n),r.push(0),r.push(...a)}return r}function td(e,t,n,r=!0){const a=[];r?a.push(e[0]/n):a.push(e[0]*n);for(let n=1;n/g;function kd(e,t){const n=((e=e.replace(/\s/g,"")).length-e.replace(xd,"").length)/"->".length;if(n<1)throw new Error("Equations without an arrow are not supported.");if(n>1)throw new Error('Equation must contain exactly one arrow ("->").');const[r,a]=e.split("->");Q(-1===r.indexOf("..."),(()=>'The ellipsis notation ("...") is not supported yet.'));const s=r.split(","),i=s.length;if(t!==i)throw new Error(`Expected ${i} input tensors, received ${t}`);if(i>2)throw new Error("Support for more than 2 input tensors is not implemented yet.");const o=[];for(let e=0;e-1!==e.indexOf(t))))throw new Error(`Output subscripts contain the label ${t} not present in the input subscripts.`);-1===o.indexOf(t)&&o.push(t)}for(let e=0;e-1!==e)),{permutationIndices:n,expandDims:r}}function Cd(e,t,n){const r=new Array(e);for(let e=0;e`Expected dimension ${r[t[e][n]]} at axis ${n} of input shaped ${JSON.stringify(a)}, but got dimension ${a[n]}`))}}function Sd(e,t){const n=e,r=[];let a=0;0===e.length&&n.push(-1),a=e.length+1;for(let e=0;ee===t))}function Id(e,t){const n=[];for(let r=0;r"Number of splits must evenly divide the axis.")),r=new Array(t).fill(e.shape[n]/t);else{Q(t.reduce(((e,t)=>(-1===t&&(e+=1),e)),0)<=1,(()=>"There should be only one negative value in split array."));const a=t.indexOf(-1);if(-1!==a){const r=t.reduce(((e,t)=>t>0?e+t:e));t[a]=e.shape[n]-r}Q(e.shape[n]===t.reduce(((e,t)=>e+t)),(()=>"The sum of sizes must match the size of the axis dimension.")),r=t}return r}function Dd(e,t){let n,r=!1;for(e<=Yf?(n=e,r=!0):n=Ie(e,Math.floor(Math.sqrt(e)));!r;)n>t||n===e?r=!0:n=Ie(e,n+1);return n}function Td(e,t,n){const r=[],a=e.length;for(let s=0;sa))throw new Error(`Expect batchDims in the range of [-${a}, ${a}], but got ${r}`);if(r<0&&(r+=a),r>s)throw new Error(`batchDims (${r}) must be less than rank(x) (\n ${s}).`);if(nla(e)))}catch(e){throw new Error(`Failed to decode encoded string bytes into utf-8, error: ${e}`)}}function Od(e){return e.map((e=>oa(e)))}const Md={kernelName:Ge,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>Do(e,ph(Ks(n,"float32"),-1))}}},Bd={kernelName:Xe,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>{const t=Fo(Ks(n,"float32")),r=To(Xo(Wo(1),t));return Pu(Ao(e,r))}}}},$d={kernelName:Ke,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>{const t=To(Xo(Fo(Ks(n,"float32")),1));return Ao(e,t)}}}},Pd={kernelName:qe,inputsToSave:["a","b"],gradFunc:(e,t)=>{const[n,r]=t,a=Zo(n.shape,r.shape);return{a:()=>{let t=e;const r=Jo(n.shape,a);return r.length>0&&(t=Uu(t,r)),Al(t,n.shape)},b:()=>{let t=e;const n=Jo(r.shape,a);return n.length>0&&(t=Uu(t,n)),Al(t,r.shape)}}}},Ld={kernelName:Ye,saveAllInputs:!0,gradFunc:(e,t)=>{const n={};return t.forEach(((t,r)=>{n[r]=()=>e.clone()})),n}},zd={kernelName:Qe,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>Ro(n)}}},Wd={kernelName:et,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>Ro(n)}}},Ud={kernelName:tt,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>Ao(e,To(Xo(Wo(1),Fo(Ks(n,"float32")))))}}},Vd={kernelName:nt,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>{const t=To(No(Wo(1),Fo(Ks(n,"float32"))));return Ao(e,t)}}}},jd={kernelName:st,inputsToSave:["a","b"],gradFunc:(e,t)=>{const[n,r]=t,a=Zo(n.shape,r.shape);return{a:()=>{const t=No(Fo(n),Fo(r));let s=Do(e,Ao(r,t));const i=Jo(n.shape,a);return i.length>0&&(s=Uu(s,i)),Al(s,n.shape)},b:()=>{const t=No(Fo(n),Fo(r));let s=Pu(Do(e,Ao(n,t)));const i=Jo(r.shape,a);return i.length>0&&(s=Uu(s,i)),Al(s,r.shape)}}}},Hd={kernelName:rt,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>Ao(e,No(Fo(Ks(n,"float32")),1))}}},Gd={kernelName:at,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>Ao(e,Xo(Wo(1),Fo(Ks(n,"float32"))))}}},Xd=Za({avgPool3dGrad_:function(e,t,n,r,a,s){const i=qa(e,"dy","avgPool3dGrad"),o=qa(t,"input","avgPool3dGrad");let l=i,u=o,c=!1;4===o.rank&&(c=!0,l=Al(i,[1,i.shape[0],i.shape[1],i.shape[2],i.shape[3]]),u=Al(o,[1,o.shape[0],o.shape[1],o.shape[2],o.shape[3]])),Q(5===l.rank,(()=>`Error in avgPool3dGrad: dy must be rank 5 but got rank ${l.rank}.`)),Q(5===u.rank,(()=>`Error in avgPool3dGrad: input must be rank 5 but got rank ${u.rank}.`)),null!=s&&Q(ie(a),(()=>`Error in avgPool3dGrad: pad must be an integer when using, dimRoundingMode ${s} but got pad ${a}.`));const h={dy:l,input:u},f={filterSize:n,strides:r,pad:a,dimRoundingMode:s},d=Wa.runKernel(ut,h,f);return c?Al(d,[d.shape[1],d.shape[2],d.shape[3],d.shape[4]]):d}}),Kd={kernelName:lt,inputsToSave:["x"],gradFunc:(e,t,n)=>{const[r]=t,{filterSize:a,strides:s,pad:i,dimRoundingMode:o}=n;return{x:()=>Xd(e,r,a,s,i,o)}}},qd=Za({avgPoolGrad_:function(e,t,n,r,a){const s=qa(e,"dy","avgPoolGrad"),i=qa(t,"input","avgPoolGrad");Q(i.rank===s.rank,(()=>`Rank of input (${i.rank}) does not match rank of dy (${s.rank})`));let o=i,l=s,u=!1;3===i.rank&&(u=!0,o=Al(i,[1,i.shape[0],i.shape[1],i.shape[2]]),l=Al(s,[1,s.shape[0],s.shape[1],s.shape[2]])),Q(4===l.rank,(()=>`Error in avgPoolGrad: dy must be rank 4 but got rank ${l.rank}.`)),Q(4===o.rank,(()=>`Error in avgPoolGrad: input must be rank 4 but got rank ${o.rank}.`));const c={dy:l,input:o},h={filterSize:n,strides:r,pad:a},f=Wa.runKernel(ot,c,h);return u?Al(f,[f.shape[1],f.shape[2],f.shape[3]]):f}}),Yd={kernelName:it,inputsToSave:["x"],gradFunc:(e,t,n)=>{const[r]=t,{filterSize:a,strides:s,pad:i}=n;return{x:()=>qd(e,r,a,s,i)}}},Jd={kernelName:ct,inputsToSave:["a","b"],gradFunc:(e,t,n)=>{const[r,a]=t,{transposeA:s,transposeB:i}=n;return s||i?!s&&i?{a:()=>pi(e,a,!1,!1),b:()=>pi(e,r,!0,!1)}:s&&!i?{a:()=>pi(a,e,!1,!0),b:()=>pi(r,e,!1,!1)}:{a:()=>pi(a,e,!0,!0),b:()=>pi(e,r,!0,!0)}:{a:()=>pi(e,a,!1,!0),b:()=>pi(r,e,!0,!1)}}},Zd={kernelName:ht,gradFunc:(e,t,n)=>{const{blockShape:r,crops:a}=n;return{x:()=>Cc(e,r,a)}}},Qd={kernelName:dt,gradFunc:(e,t,n)=>{const r=n,a=r.inputShape,s=r.shape,i=Array.from(s);for(let e=a.length-1;e>=0;e--)if(a[e]===s[e])i[e]=1;else if(1!==a[e])throw new Error(`broadcastTo(): [${a}] cannot be broadcast to [${s}].`);const o=[];for(let e=0;e1&&o.push(e);return{x:()=>Uu(e,o,!0)}}},ep={kernelName:pt,gradFunc:e=>({x:()=>e.clone()})},tp={kernelName:mt,gradFunc:e=>({x:()=>Ro(e)})},np={kernelName:gt,inputsToSave:["x"],gradFunc:(e,t,n)=>{const[r]=t,{clipValueMin:a,clipValueMax:s}=n;return{x:()=>fu(Qu(Su(r,a),Ru(r,s)),e,Ro(e))}}},rp={kernelName:bt,inputsToSave:["x"],gradFunc:Md.gradFunc},ap={kernelName:vt,saveAllInputs:!0,gradFunc:(e,t,n)=>{const r=t.map((e=>e.shape)),{axis:a}=n,s=de(a,t[0].shape)[0],i=r.map((e=>e[s]));return uh(e,i,s).map((e=>()=>e))}},sp={kernelName:wt,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{const[r,a]=t,{dilations:s,strides:i,pad:o,dataFormat:l}=n;return Q(Sl(s),(()=>`Error in gradient of conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${s}'`)),{x:()=>Zl(r.shape,e,a,i,o,l),filter:()=>Wh(r,e,a.shape,i,o,l)}}},ip={kernelName:xt,inputsToSave:["dy","filter"],gradFunc:(e,t,n)=>{const[r,a]=t,{strides:s,pad:i,dataFormat:o,dimRoundingMode:l}=n;return{dy:()=>Yl(e,a,s,i,o,1,l),filter:()=>Wh(e,r,a.shape,s,i,o,l)}}},op=Za({conv3DBackpropFilter_:function(e,t,n,r,a){let s=e;4===e.rank&&(s=Al(e,[1,e.shape[0],e.shape[1],e.shape[2],e.shape[3]]));let i=t;4===i.rank&&(i=Al(t,[1,t.shape[0],t.shape[1],t.shape[2],t.shape[3]])),Q(5===s.rank,(()=>`Error in conv3dDerFilter: input must be rank 5, but got shape ${s.shape}.`)),Q(5===i.rank,(()=>`Error in conv3dDerFilter: dy must be rank 5, but got shape ${i.shape}.`)),Q(5===n.length,(()=>`Error in conv3dDerFilter: filterShape must be length 5, but got ${n}.`)),Q(s.shape[4]===n[3],(()=>`Error in conv3dDerFilter: depth of input ${s.shape[4]}) must match input depth in filter (${n[3]}.`)),Q(i.shape[4]===n[4],(()=>`Error in conv3dDerFilter: depth of dy (${i.shape[4]}) must match output depth for filter (${n[4]}).`));const o={x:s,dy:i},l={strides:r,pad:a,filterShape:n};return Wa.runKernel(Et,o,l)}}),lp={kernelName:kt,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{const{dilations:r,strides:a,pad:s}=n;Q(Sl(r),(()=>`Error in gradient of conv3D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${r}'`));const[i,o]=t;return{x:()=>tu(i.shape,e,o,a,s),filter:()=>op(i,e,o.shape,a,s)}}},up={kernelName:St,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>Do(Pu(Qc(Ks(n,"float32"))),e)}}},cp={kernelName:Nt,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>Do(eh(Ks(n,"float32")),e)}}},hp={kernelName:It,inputsToSave:["x"],gradFunc:(e,t,n)=>{const[r]=t,{axis:a,exclusive:s,reverse:i}=n;return{x:()=>{const t=qu([a],r.rank);let n=su(e,a,s,!i);return null!=t&&(n=gi(n,t)),n}}}},fp={kernelName:Ft,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{const{dilations:r,strides:a,pad:s,dimRoundingMode:i}=n,o=null==r?[1,1]:r;Q(Sl(o),(()=>`Error in gradient of depthwiseConv2dNative: dilation rates greater than 1 are not yet supported. Got dilations '${o}'`));const[l,u]=t;return Q(4===l.rank,(()=>`Error in gradient of depthwiseConv2dNative: input must be rank 4, but got rank ${l.rank}.`)),Q(4===u.rank,(()=>`Error in gradient of depthwiseConv2dNative: filter must be rank 4, but got rank ${u.rank}.`)),Q(l.shape[3]===u.shape[2],(()=>`Error in gradient of depthwiseConv2d: number of input channels (${l.shape[3]}) must match the inChannels dimension in filter ${u.shape[2]}.`)),Q(Nl(a,o),(()=>`Error in gradient of depthwiseConv2d: Either strides or dilations must be 1. Got strides ${a} and dilations '${o}'.`)),null!=i&&Q(ie(s),(()=>`Error in depthwiseConv2d: pad must be an integer when using, dimRoundingMode ${i} but got pad ${s}.`)),{x:()=>Kh(l.shape,e,u,a,s,r,i),filter:()=>Xh(l,e,u.shape,a,s,r,i)}}},dp={kernelName:Bt,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{const[r,a]=t,s={x:r,filter:a,dy:e},i={x:r,filter:a,dy:e};return{x:()=>Wa.runKernel($t,s,n),filter:()=>Wa.runKernel(Pt,i,n)}}},pp={kernelName:Wt,outputsToSave:[!0],gradFunc:(e,t)=>{const[n]=t,r={dy:e,y:n};return{x:()=>Wa.runKernel(Ut,r)}}},mp={kernelName:Vt,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t,r=Do(bu(Pu(Fo(n))),2/Math.sqrt(Math.PI));return{x:()=>Do(e,r)}}},gp={kernelName:Ht,outputsToSave:[!0],gradFunc:(e,t)=>{const[n]=t;return{x:()=>Do(e,n)}}},yp={kernelName:Gt,inputsToSave:["input"],gradFunc:(e,t)=>{const[n]=t;return{input:()=>Al(e,n.shape)}}},bp={kernelName:Xt,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>Do(e,bu(n))}}},vp={kernelName:Jt,gradFunc:e=>({x:()=>Ro(e)})},wp={kernelName:Zt,inputsToSave:["a","b"],gradFunc:(e,t)=>{const[n,r]=t,a=Zo(n.shape,r.shape);return{a:()=>{const t=Ao(e,Ks(r,"float32")),s=Jo(n.shape,a);return s.length>0?Al(Uu(t,s),n.shape):t},b:()=>{let t=Do(e,Ks(n,"float32"));const s=Jo(r.shape,a);s.length>0&&(t=Al(Uu(t,s),r.shape));const i=Fo(r);return Pu(Ao(t,Ks(i,"float32")))}}}},_p={kernelName:Qt,inputsToSave:["x","mean","variance","scale"],gradFunc:(e,t,n)=>{const{varianceEpsilon:r}=n,[a,s,i,o]=t,l=null==o?Wo(1):o,u=Jo(s.shape,a.shape),c=[];if(1===s.rank){for(let e=0;e1===s.rank?Al(Do(Do(e,_u(Al(d,[1,1,1,s.shape[0]]),c)),l),a.shape):Al(Do(Do(e,d),l),a.shape),mean:()=>{let e=Do(Do(d,Wo(-1)),f);return 1===s.rank&&(e=Uu(e,u)),Al(e,s.shape)},variance:()=>{let e=Do(Do(p,h),f);return 1===s.rank&&(e=Uu(e,u)),Al(e,s.shape)},scale:()=>{const t=Do(h,d);let n=Do(e,t);return 1===s.rank&&(n=Uu(n,u)),Al(n,s.shape)},offset:()=>{let t=e;return 1===s.rank&&(t=Uu(t,u)),Al(t,s.shape)}}}},xp={kernelName:en,inputsToSave:["x","indices"],gradFunc:(e,t,n)=>{const[r,a]=t,{axis:s}=n,i=de(s,r.shape)[0];return{x:()=>{const t=r.shape,n=a.size,o=t.slice(0,i),l=o.length,u=t.slice(s,t.length).slice(1),c=u.length,h=kp(0,l),f=kp(l+1,l+1+c),d=Ep([o,[n],u]),p=Al(e,d),m=Al(a,[n]),g=Ep([[l],h,f]),y=gi(p,g);let b=Ch(y,m,r.shape[i]);const v=Yu(g);return b=gi(b,v),b},indices:()=>a}}};function kp(e,t){const n=[];for(let r=e;r{const[n,r]=t;return{a:()=>Ro(n),b:()=>Ro(r)}}},Sp={kernelName:an,gradFunc:e=>({x:()=>Ks(e,"float32")})},Np={kernelName:ln,gradFunc:e=>({x:()=>Ro(e)})},Ip={kernelName:un,gradFunc:e=>({x:()=>Ro(e)})},Ap={kernelName:cn,gradFunc:e=>({x:()=>Ro(e)})},Dp={kernelName:hn,inputsToSave:["x"],gradFunc:(e,t,n)=>{const[r]=t,{alpha:a}=n,s=Cu(r,0);return{x:()=>fu(s,e,Do(e,a))}}},Tp={kernelName:gn,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>Ao(e,No(n,1))}}},Fp={kernelName:mn,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>Ao(e,Ks(n,"float32"))}}},Rp={kernelName:wn,inputsToSave:[],outputsToSave:[!0],gradFunc:(e,t,n)=>{const[r]=t,{axis:a}=n;return{logits:()=>{const t=bu(r);return Xo(e,Do(Uu(e,a,!0),t))}}}},Op=Za({localResponseNormalizationBackprop_:function(e,t,n,r=5,a=1,s=1,i=.5){const o={x:e,y:t,dy:n},l={depthRadius:r,bias:a,alpha:s,beta:i};return Wa.runKernel(xn,o,l)}}),Mp={kernelName:_n,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{const[r,a]=t,{depthRadius:s,bias:i,alpha:o,beta:l}=n;return{x:()=>Op(r,a,e,s,i,o,l)}}};function Bp(e,t,n,r){return t.rankDo(e,Ks(hu(n,t),e.dtype))}}const $p={kernelName:kn,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{const r=n,{reductionIndices:a}=r,s=t[0],i=Bp(e,t[1],s,de(a,s.shape));return{x:()=>i.x()}}},Pp={kernelName:En,inputsToSave:["a","b"],gradFunc:(e,t)=>{const[n,r]=t;return{a:()=>Do(e,Ks(Su(n,r),"float32")),b:()=>Do(e,Ks(Fu(n,r),"float32"))}}},Lp=Za({maxPool3dGrad_:function(e,t,n,r,a,s,i){const o=qa(e,"dy","maxPool3dGrad"),l=qa(t,"input","maxPool3dGrad"),u=qa(n,"output","maxPool3dGrad");let c=o,h=l,f=u,d=!1;4===l.rank&&(d=!0,c=Al(o,[1,o.shape[0],o.shape[1],o.shape[2],o.shape[3]]),h=Al(l,[1,l.shape[0],l.shape[1],l.shape[2],l.shape[3]]),f=Al(u,[1,u.shape[0],u.shape[1],u.shape[2],u.shape[3]])),Q(5===c.rank,(()=>`Error in maxPool3dGrad: dy must be rank 5 but got rank ${c.rank}.`)),Q(5===h.rank,(()=>`Error in maxPool3dGrad: input must be rank 5 but got rank ${h.rank}.`)),Q(5===f.rank,(()=>`Error in maxPool3dGrad: output must be rank 5 but got rank ${f.rank}.`)),null!=i&&Q(ie(s),(()=>`Error in maxPool3dGrad: pad must be an integer when using, dimRoundingMode ${i} but got pad ${s}.`));const p={dy:c,input:h,output:f},m={filterSize:r,strides:a,pad:s,dimRoundingMode:i},g=Wa.runKernel(In,p,m);return d?Al(g,[g.shape[1],g.shape[2],g.shape[3],g.shape[4]]):g}}),zp={kernelName:Nn,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{const[r,a]=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=n;return{x:()=>Lp(e,r,a,s,i,o,l)}}},Wp=Za({maxPoolGrad_:function(e,t,n,r,a,s,i){const o=qa(e,"dy","maxPoolGrad"),l=qa(t,"input","maxPoolGrad"),u=qa(n,"output","maxPoolGrad");Q(l.rank===o.rank,(()=>`Rank of input (${l.rank}) does not match rank of dy (${o.rank})`)),Q(4===o.rank,(()=>`Error in maxPoolGrad: dy must be rank 4 but got rank ${o.rank}.`)),Q(4===l.rank,(()=>`Error in maxPoolGrad: input must be rank 4 but got rank ${l.rank}.`)),null!=i&&Q(ie(s),(()=>`Error in maxPoolGrad: pad must be an integer when using, dimRoundingMode ${i} but got pad ${s}.`));const c={dy:o,input:l,output:u},h={filterSize:r,strides:a,pad:s,dimRoundingMode:i};return Wa.runKernel(Sn,c,h)}}),Up={kernelName:Hn,inputsToSave:["x"],gradFunc:(e,t,n)=>{const r=t[0],{paddings:a}=n,s=a.map((e=>e[0]));return{x:()=>Ol(e,s,r.shape)}}},Vp={kernelName:wr,gradFunc:(e,t,n)=>{const{blockShape:r,paddings:a}=n;return{x:()=>$l(e,r,a)}}},jp={kernelName:_r,gradFunc:(e,t,n)=>{const{axis:r}=n;return{x:()=>Fl(e,r)}}},Hp=[Md,Bd,$d,Pd,Ld,zd,Wd,Ud,Vd,jd,Hd,Gd,Kd,Yd,Jd,Zd,Qd,ep,tp,np,rp,ap,ip,sp,lp,up,cp,hp,fp,dp,{kernelName:Lt,inputsToSave:["a","b"],gradFunc:(e,t)=>{const[n,r]=t,a=Zo(n.shape,r.shape);return{a:()=>{const t=Ao(e,Ks(r,"float32")),s=Jo(n.shape,a);return s.length>0?Al(Uu(t,s),n.shape):t},b:()=>{let t=Do(e,Ks(n,"float32"));const s=Jo(r.shape,a);s.length>0&&(t=Al(Uu(t,s),r.shape));const i=Fo(r);return Pu(Ao(t,Ks(i,"float32")))}}}},pp,mp,gp,yp,bp,wp,vp,_p,xp,Cp,Sp,Np,Ip,Ap,Dp,Tp,Fp,Rp,Mp,$p,$p,Pp,zp,{kernelName:Cn,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{const[r,a]=t,{filterSize:s,strides:i,pad:o}=n;return{x:()=>Wp(e,r,a,s,i,o)}}},{kernelName:Dn,inputsToSave:["x"],gradFunc:(e,t,n)=>{const[r]=t,{axis:a}=n,s=de(a,r.shape),i=re(Gu(r.shape,s)[1]);return{x:()=>{const t=r.shape.slice();s.forEach((e=>{t[e]=1}));const n=Al(e,t);return Ao(Do(n,lc(r.shape,"float32")),i)}}}},{kernelName:Tn,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{const r=n,{axis:a}=r,[s,i]=t,o=Bp(e,i,s,de(a,s.shape));return{x:()=>o.x()}}},{kernelName:Fn,inputsToSave:["a","b"],gradFunc:(e,t)=>{const[n,r]=t;return{a:()=>Do(e,Ks(Ru(n,r),"float32")),b:()=>Do(e,Ks(Cu(n,r),"float32"))}}},{kernelName:Rn,inputsToSave:["x"],gradFunc:(e,t,n)=>{const r=t[0],{paddings:a}=n,s=a.map((e=>e[0]));return{x:()=>Ol(e,s,r.shape)}}},{kernelName:On,inputsToSave:["a","b"],gradFunc:(e,t)=>{const[n,r]=t,a=Zo(n.shape,r.shape);return{a:()=>{const t=Jo(n.shape,a);return t.length>0?Al(Uu(e,t),n.shape):e},b:()=>{const t=Do(e,Pu(ku(Ao(n,r)))),s=Jo(r.shape,a);return s.length>0?Al(Uu(t,s),r.shape):t}}}},{kernelName:Bn,inputsToSave:["a","b"],gradFunc:(e,t)=>{const[n,r]=t,a=Zo(n.shape,r.shape);return{a:()=>{const t=Do(e,Ks(r,"float32")),s=Jo(n.shape,a);return s.length>0?Al(Uu(t,s),n.shape):t},b:()=>{const t=Do(e,Ks(n,"float32")),s=Jo(r.shape,a);return s.length>0?Al(Uu(t,s),r.shape):t}}}},{kernelName:$n,gradFunc:e=>({x:()=>Pu(e)})},{kernelName:Vn,inputsToSave:["indices"],gradFunc:(e,t)=>{const n=t[0];return{indices:()=>oc(n.shape,"float32")}}},{kernelName:Un,gradFunc:e=>({x:()=>Ro(e)})},{kernelName:jn,saveAllInputs:!0,gradFunc:(e,t,n)=>{const{axis:r}=n;return Sh(e,r).map((e=>()=>e))}},Up,Up,{kernelName:Xn,inputsToSave:["a","b"],outputsToSave:[!0],gradFunc:(e,t)=>{const[n,r,a]=t,s=n,i=r,o=Zo(s.shape,i.shape);return{a:()=>{const t=Ks(i,"float32");let n=Do(e,Do(t,Go(s,Xo(t,Wo(1)))));const r=Jo(s.shape,o);return r.length>0&&(n=Uu(n,r)),Al(n,s.shape)},b:()=>{const t=Cu(s,0),n=fu(t,Bu(s),Ro(s));let r=Do(e,Do(a,n));const l=Jo(i.shape,o);return l.length>0&&(r=Uu(r,l)),Al(r,i.shape)}}}},{kernelName:Kn,inputsToSave:["x","alpha"],gradFunc:(e,t)=>{const[n,r]=t,a=Cu(n,0);return{x:()=>fu(a,e,Do(e,r)),alpha:()=>{let t=fu(a,Ro(e),Do(e,n));const s=Jo(r.shape,e.shape);return s.length>0&&(t=Uu(t,s)),Al(t,r.shape)}}}},{kernelName:Zn,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>Ao(e,Pu(Fo(n)))}}},{kernelName:sr,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t,r=Do(Ru(n,6),ph(n));return{x:()=>Do(e,Ks(r,"float32"))}}},{kernelName:Qn,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>Do(e,Ks(ph(n),"float32"))}}},{kernelName:er,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>Al(e,n.shape)}}},{kernelName:rr,inputsToSave:["images"],gradFunc:(e,t,n)=>{const[r]=t,a={dy:e,images:r};return{images:()=>Wa.runKernel(ar,a,n)}}},{kernelName:tr,inputsToSave:["images"],gradFunc:(e,t,n)=>{const[r]=t,a={dy:e,images:r};return{images:()=>Wa.runKernel(nr,a,n)}}},{kernelName:ir,gradFunc:(e,t,n)=>{const{dims:r}=n,a=de(r,e.shape);return{x:()=>Uc(e,a)}}},{kernelName:or,gradFunc:e=>({x:()=>Ro(e)})},{kernelName:lr,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>Pu(Ao(e,Do(Go(n,1.5),2)))}}},{kernelName:cr,inputsToSave:["condition"],gradFunc:(e,t)=>{const[n]=t;return{condition:()=>Ks(Ro(n),"float32"),t:()=>Do(e,Ks(n,e.dtype)),e:()=>Do(e,Ks(ec(n),e.dtype))}}},{kernelName:hr,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>{const t=Cu(n,Wo(0)),r=Wo(ad),a=Wo(sd),s=Do(e,a),i=Do(Do(e,r),bu(Ks(n,"float32")));return fu(t,s,i)}}}},{kernelName:gr,outputsToSave:[!0],gradFunc:(e,t)=>{const[n]=t;return{x:()=>Do(e,Do(n,Xo(Wo(1),n)))}}},{kernelName:mr,gradFunc:e=>({x:()=>Ro(e)})},{kernelName:dr,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>Do(ru(Ks(n,"float32")),e)}}},{kernelName:pr,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>Do(au(Ks(n,"float32")),e)}}},{kernelName:fr,inputsToSave:["x"],gradFunc:(e,t,n)=>{const[r]=t,{begin:a,size:s}=n,i=r.shape,[o,l]=Ui(r,a,s),u=[];for(let t=0;twc(e,u)}}},{kernelName:xr,outputsToSave:[!0],gradFunc:(e,t,n)=>{const[r]=t,{dim:a}=n,s=Do(e,r);return{logits:()=>Xo(s,Do(Uu(s,[a],!0),r))}}},{kernelName:yr,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>Do(e,Rl(n))}}},Vp,Vp,jp,jp,{kernelName:br,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>Ao(e,Do(To(Ks(n,"float32")),2))}}},{kernelName:Sr,inputsToSave:["a","b"],gradFunc:(e,t)=>{const[n,r]=t,a=Wo(2);return{a:()=>Do(e,Do(a,Xo(n,r))),b:()=>Do(e,Do(a,Xo(r,n)))}}},{kernelName:Nr,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>Do(e,Do(Ks(n,"float32"),2))}}},{kernelName:zr,gradFunc:e=>({x:()=>Ro(e)})},{kernelName:Ar,inputsToSave:["a","b"],gradFunc:(e,t)=>{const[n,r]=t,a=Zo(n.shape,r.shape);return{a:()=>{let t=e;const r=Jo(n.shape,a);return r.length>0&&(t=Uu(t,r)),Al(t,n.shape)},b:()=>{let t=e;const n=Jo(r.shape,a);return n.length>0&&(t=Uu(t,n)),Al(Pu(t),r.shape)}}}},{kernelName:vr,inputsToSave:["x"],gradFunc:(e,t,n)=>{const[r]=t,a=r.shape.slice(),{axis:s}=n;de(s,r.shape).forEach((e=>{a[e]=1}));const i=Al(e,a),o=Do(i,lc(r.shape,"float32"));return{x:()=>o}}},{kernelName:Dr,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>Ao(e,Fo(ru(n)))}}},{kernelName:Tr,outputsToSave:[!0],gradFunc:(e,t)=>{const[n]=t;return{x:()=>Do(Xo(Wo(1),Fo(n)),e)}}},{kernelName:Fr,inputsToSave:["x"],gradFunc:(e,t,n)=>{const[r]=t,{reps:a}=n;return{x:()=>{let t=Ro(r);if(1===r.rank)for(let n=0;n{const r=n,{perm:a}=r,s=Yu(a);return{x:()=>gi(e,s)}}},{kernelName:$r,gradFunc:(e,t,n)=>{const r=n,{axis:a}=r;return{value:()=>dh(e,a)}}},{kernelName:Pr,inputsToSave:["segmentIds"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>function(e,t){const n=Qo(t,Ro(t)),r=Eu(e,n);let a=Su(t,Wo(0,"int32"));const s=r.rank-a.rank;for(let e=0;e({x:()=>Ro(e)})}];for(const e of Hp)Zr(e);let Gp;function Xp(){return null==Gp&&(Gp=Co().epsilon()),Gp}xa().prototype.abs=function(){return this.throwIfDisposed(),qo(this)},xa().prototype.acos=function(){return this.throwIfDisposed(),al(this)},xa().prototype.acosh=function(){return this.throwIfDisposed(),sl(this)},xa().prototype.add=function(e){return this.throwIfDisposed(),No(this,e)},xa().prototype.all=function(e,t){return this.throwIfDisposed(),ol(this,e,t)},xa().prototype.any=function(e,t){return this.throwIfDisposed(),ll(this,e,t)},xa().prototype.argMax=function(e){return this.throwIfDisposed(),ul(this,e)},xa().prototype.argMin=function(e){return this.throwIfDisposed(),cl(this,e)},xa().prototype.asScalar=function(){return this.throwIfDisposed(),Q(1===this.size,(()=>"The array must have only 1 element.")),Al(this,[])},xa().prototype.asType=function(e){return this.throwIfDisposed(),Ks(this,e)},xa().prototype.as1D=function(){return this.throwIfDisposed(),Al(this,[this.size])},xa().prototype.as2D=function(e,t){return this.throwIfDisposed(),Al(this,[e,t])},xa().prototype.as3D=function(e,t,n){return this.throwIfDisposed(),Al(this,[e,t,n])},xa().prototype.as4D=function(e,t,n,r){return this.throwIfDisposed(),Al(this,[e,t,n,r])},xa().prototype.as5D=function(e,t,n,r,a){return this.throwIfDisposed(),Al(this,[e,t,n,r,a])},xa().prototype.asin=function(){return this.throwIfDisposed(),hl(this)},xa().prototype.asinh=function(){return this.throwIfDisposed(),fl(this)},xa().prototype.atan=function(){return this.throwIfDisposed(),dl(this)},xa().prototype.atan2=function(e){return this.throwIfDisposed(),pl(this,e)},xa().prototype.atanh=function(){return this.throwIfDisposed(),ml(this)},xa().prototype.avgPool=function(e,t,n,r){return this.throwIfDisposed(),Dl(this,e,t,n,r)},xa().prototype.batchToSpaceND=function(e,t){return this.throwIfDisposed(),$l(this,e,t)},xa().prototype.batchNorm=function(e,t,n,r,a){return this.throwIfDisposed(),Pl(this,e,t,n,r,a)},xa().prototype.broadcastTo=function(e){return this.throwIfDisposed(),Vl(this,e)},xa().prototype.cast=function(e){return this.throwIfDisposed(),Ks(this,e)},xa().prototype.ceil=function(){return this.throwIfDisposed(),jl(this)},xa().prototype.clipByValue=function(e,t){return this.throwIfDisposed(),Hl(this,e,t)},xa().prototype.concat=function(e,t){return this.throwIfDisposed(),e instanceof _a&&(e=[e]),Fl([this,...e],t)},xa().prototype.conv1d=function(e,t,n,r,a,s){return this.throwIfDisposed(),Jl(this,e,t,n,r,a,s)},xa().prototype.conv2dTranspose=function(e,t,n,r,a){return this.throwIfDisposed(),Ql(this,e,t,n,r,a)},xa().prototype.conv2d=function(e,t,n,r,a,s){return this.throwIfDisposed(),Yl(this,e,t,n,r,a,s)},xa().prototype.cos=function(){return this.throwIfDisposed(),ru(this)},xa().prototype.cosh=function(){return this.throwIfDisposed(),au(this)},xa().prototype.cumsum=function(e,t,n){return this.throwIfDisposed(),su(this,e,t,n)},xa().prototype.depthToSpace=function(e,t){return this.throwIfDisposed(),ou(this,e,t)},xa().prototype.depthwiseConv2d=function(e,t,n,r,a,s){return this.throwIfDisposed(),lu(this,e,t,n,r,a,s)},xa().prototype.dilation2d=function(e,t,n,r,a){return this.throwIfDisposed(),cu(this,e,t,n,r,a)},xa().prototype.divNoNan=function(e){return this.throwIfDisposed(),du(this,e)},xa().prototype.div=function(e){return this.throwIfDisposed(),Ao(this,e)},xa().prototype.dot=function(e){return this.throwIfDisposed(),pu(this,e)},xa().prototype.elu=function(){return this.throwIfDisposed(),gu(this)},xa().prototype.equal=function(e){return this.throwIfDisposed(),hu(this,e)},xa().prototype.erf=function(){return this.throwIfDisposed(),yu(this)},xa().prototype.exp=function(){return this.throwIfDisposed(),bu(this)},xa().prototype.expandDims=function(e){return this.throwIfDisposed(),vu(this,e)},xa().prototype.expm1=function(){return this.throwIfDisposed(),wu(this)},xa().prototype.fft=function(){return this.throwIfDisposed(),ih(this)},xa().prototype.flatten=function(){return this.throwIfDisposed(),Al(this,[this.size])},xa().prototype.floor=function(){return this.throwIfDisposed(),ku(this)},xa().prototype.floorDiv=function(e){return this.throwIfDisposed(),Io(this,e)},xa().prototype.gather=function(e,t){return this.throwIfDisposed(),Eu(this,e,t)},xa().prototype.greaterEqual=function(e){return this.throwIfDisposed(),Su(this,e)},xa().prototype.greater=function(e){return this.throwIfDisposed(),Cu(this,e)},xa().prototype.ifft=function(){return this.throwIfDisposed(),oh(this)},xa().prototype.irfft=function(){return this.throwIfDisposed(),lh(this)},xa().prototype.isFinite=function(){return this.throwIfDisposed(),Iu(this)},xa().prototype.isInf=function(){return this.throwIfDisposed(),Au(this)},xa().prototype.isNaN=function(){return this.throwIfDisposed(),Du(this)},xa().prototype.leakyRelu=function(e){return this.throwIfDisposed(),Tu(this,e)},xa().prototype.lessEqual=function(e){return this.throwIfDisposed(),Ru(this,e)},xa().prototype.less=function(e){return this.throwIfDisposed(),Fu(this,e)},xa().prototype.localResponseNormalization=function(e,t,n,r){return this.throwIfDisposed(),Mu(this,e,t,n,r)},xa().prototype.logSigmoid=function(){return this.throwIfDisposed(),zu(this)},xa().prototype.logSoftmax=function(e){return this.throwIfDisposed(),Vu(this,e)},xa().prototype.logSumExp=function(e,t){return this.throwIfDisposed(),Zu(this,e,t)},xa().prototype.log=function(){return this.throwIfDisposed(),Bu(this)},xa().prototype.log1p=function(){return this.throwIfDisposed(),$u(this)},xa().prototype.logicalAnd=function(e){return this.throwIfDisposed(),Qu(this,e)},xa().prototype.logicalNot=function(){return this.throwIfDisposed(),ec(this)},xa().prototype.logicalOr=function(e){return this.throwIfDisposed(),tc(this,e)},xa().prototype.logicalXor=function(e){return this.throwIfDisposed(),nc(this,e)},xa().prototype.matMul=function(e,t,n){return this.throwIfDisposed(),pi(this,e,t,n)},xa().prototype.maxPool=function(e,t,n,r){return this.throwIfDisposed(),rc(this,e,t,n,r)},xa().prototype.max=function(e,t){return this.throwIfDisposed(),Wu(this,e,t)},xa().prototype.maximum=function(e){return this.throwIfDisposed(),Qo(this,e)},xa().prototype.mean=function(e,t){return this.throwIfDisposed(),ic(this,e,t)},xa().prototype.min=function(e,t){return this.throwIfDisposed(),cc(this,e,t)},xa().prototype.minimum=function(e){return this.throwIfDisposed(),hc(this,e)},xa().prototype.mirrorPad=function(e,t){return this.throwIfDisposed(),fc(this,e,t)},xa().prototype.mod=function(e){return this.throwIfDisposed(),dc(this,e)},xa().prototype.mul=function(e){return this.throwIfDisposed(),Do(this,e)},xa().prototype.neg=function(){return this.throwIfDisposed(),Pu(this)},xa().prototype.norm=function(e,t,n){return this.throwIfDisposed(),Fh(this,e,t,n)},xa().prototype.notEqual=function(e){return this.throwIfDisposed(),yc(this,e)},xa().prototype.oneHot=function(e,t=1,n=0){return this.throwIfDisposed(),mi(this,e,t,n)},xa().prototype.onesLike=function(){return this.throwIfDisposed(),bc(this)},xa().prototype.pad=function(e,t){return this.throwIfDisposed(),wc(this,e,t)},xa().prototype.pool=function(e,t,n,r,a){return this.throwIfDisposed(),Sc(this,e,t,n,r,a)},xa().prototype.pow=function(e){return this.throwIfDisposed(),Go(this,e)},xa().prototype.prelu=function(e){return this.throwIfDisposed(),Nc(this,e)},xa().prototype.prod=function(e,t){return this.throwIfDisposed(),Ic(this,e,t)},xa().prototype.reciprocal=function(){return this.throwIfDisposed(),Lc(this)},xa().prototype.relu=function(){return this.throwIfDisposed(),zc(this)},xa().prototype.relu6=function(){return this.throwIfDisposed(),Wc(this)},xa().prototype.reshapeAs=function(e){return this.throwIfDisposed(),Al(this,e.shape)},xa().prototype.reshape=function(e){return this.throwIfDisposed(),Al(this,e)},xa().prototype.resizeBilinear=function(e,t,n){return this.throwIfDisposed(),bf(this,e,t,n)},xa().prototype.resizeNearestNeighbor=function(e,t,n){return this.throwIfDisposed(),vf(this,e,t,n)},xa().prototype.reverse=function(e){return this.throwIfDisposed(),Uc(this,e)},xa().prototype.rfft=function(){return this.throwIfDisposed(),ch(this)},xa().prototype.round=function(){return this.throwIfDisposed(),Xc(this)},xa().prototype.rsqrt=function(){return this.throwIfDisposed(),Kc(this)},xa().prototype.selu=function(){return this.throwIfDisposed(),qc(this)},xa().prototype.separableConv2d=function(e,t,n,r,a,s){return this.throwIfDisposed(),Yc(this,e,t,n,r,a,s)},xa().prototype.sigmoid=function(){return this.throwIfDisposed(),Rl(this)},xa().prototype.sign=function(){return this.throwIfDisposed(),Zc(this)},xa().prototype.sin=function(){return this.throwIfDisposed(),Qc(this)},xa().prototype.sinh=function(){return this.throwIfDisposed(),eh(this)},xa().prototype.slice=function(e,t){return this.throwIfDisposed(),Ol(this,e,t)},xa().prototype.softmax=function(e){return this.throwIfDisposed(),sh(this,e)},xa().prototype.softplus=function(){return this.throwIfDisposed(),Lu(this)},xa().prototype.spaceToBatchND=function(e,t){return this.throwIfDisposed(),Cc(this,e,t)},xa().prototype.split=function(e,t){return this.throwIfDisposed(),uh(this,e,t)},xa().prototype.sqrt=function(){return this.throwIfDisposed(),To(this)},xa().prototype.square=function(){return this.throwIfDisposed(),Fo(this)},xa().prototype.squaredDifference=function(e){return this.throwIfDisposed(),hh(this,e)},xa().prototype.squeeze=function(e){return this.throwIfDisposed(),fh(this,e)},xa().prototype.stack=function(e,t){this.throwIfDisposed();const n=e instanceof _a?[this,e]:[this,...e];return dh(n,t)},xa().prototype.step=function(e){return this.throwIfDisposed(),ph(this,e)},xa().prototype.stridedSlice=function(e,t,n,r,a,s,i,o){return this.throwIfDisposed(),mh(this,e,t,n,r,a,s,i,o)},xa().prototype.sub=function(e){return this.throwIfDisposed(),Xo(this,e)},xa().prototype.sum=function(e,t){return this.throwIfDisposed(),Uu(this,e,t)},xa().prototype.tan=function(){return this.throwIfDisposed(),gh(this)},xa().prototype.tanh=function(){return this.throwIfDisposed(),Ml(this)},xa().prototype.tile=function(e){return this.throwIfDisposed(),_u(this,e)},xa().prototype.toBool=function(){return this.throwIfDisposed(),Ks(this,"bool")},xa().prototype.toFloat=function(){return this.throwIfDisposed(),Ks(this,"float32")},xa().prototype.toInt=function(){return this.throwIfDisposed(),Ks(this,"int32")},xa().prototype.topk=function(e,t){return this.throwIfDisposed(),xh(this,e,t)},xa().prototype.transpose=function(e){return this.throwIfDisposed(),gi(this,e)},xa().prototype.unique=function(e){return this.throwIfDisposed(),Eh(this,e)},xa().prototype.unsortedSegmentSum=function(e,t){return this.throwIfDisposed(),Ch(this,e,t)},xa().prototype.unstack=function(e){return this.throwIfDisposed(),Sh(this,e)},xa().prototype.where=function(e,t){return this.throwIfDisposed(),fu(e,this,t)},xa().prototype.zerosLike=function(){return this.throwIfDisposed(),Ro(this)};class Kp extends Error{constructor(e){super(e),Object.setPrototypeOf(this,Kp.prototype)}}class qp extends Error{constructor(e){super(e),Object.setPrototypeOf(this,qp.prototype)}}class Yp extends Error{constructor(e){super(e),Object.setPrototypeOf(this,Yp.prototype)}}class Jp extends Error{constructor(e){super(e),Object.setPrototypeOf(this,Jp.prototype)}}class Zp extends Error{constructor(e){super(e),Object.setPrototypeOf(this,Zp.prototype)}}function Qp(e,t){if(Array.isArray(e)){let n=[];for(let r=0;rt.toUpperCase()))}Error;let im={};function om(e){if(null==e)return null;const t={};return t.className=e.getClassName(),t.config=e.getConfig(),t}function lm(e){if(null!=e&&"object"==typeof e)if(Array.isArray(e))e.forEach((e=>lm(e)));else{const t=Object.keys(e);for(const n of t){const t=e[n];null!=t&&"object"==typeof t&&(Array.isArray(t)||"ndarray"!==t.type||"number"!=typeof t.value?lm(t):e[n]=t.value)}}}function um(e,t={},n={},r="object",a=!1){if("string"==typeof e){const a=e;let s;if(a in n)s=n[a];else if(a in im)s=im[a];else if(s=t[a],null==s)throw new Yp(`Unknown ${r}: ${e}. This may be due to one of the following reasons:\n1. The ${r} is defined in Python, in which case it needs to be ported to TensorFlow.js or your JavaScript code.\n2. The custom ${r} is defined in JavaScript, but is not registered properly with tf.serialization.registerClass().`);return s}{const s=e;if(null==s.className||null==s.config)throw new Yp(`${r}: Improper config format: ${JSON.stringify(s)}.\n'className' and 'config' must set.`);const i=s.className;let o,l;if(i in n?[o,l]=n[i]:i in im?[o,l]=im.className:i in t&&([o,l]=t[i]),null==o)throw new Yp(`Unknown ${r}: ${i}. This may be due to one of the following reasons:\n1. The ${r} is defined in Python, in which case it needs to be ported to TensorFlow.js or your JavaScript code.\n2. The custom ${r} is defined in JavaScript, but is not registered properly with tf.serialization.registerClass().`);if(null!=l){const e={};for(const t of Object.keys(im))e[t]=im[t];for(const t of Object.keys(n))e[t]=n[t];s.config.customObjects=e;const t=Object.assign({},im);for(const e of Object.keys(n))im[e]=n[e];lm(s.config);const r=l(o,s.config,n,a);return im=Object.assign({},t),r}{const e=Object.assign({},im);for(const e of Object.keys(n))im[e]=n[e];const t=new o(s.config);return im=Object.assign({},e),t}}}function cm(e,t){return-1*function(e,t){return et?1:0}(e,t)}function hm(e){if(null==e)return e;const t=[];for(const n of e)-1===t.indexOf(n)&&t.push(n);return t}function fm(e){if(null==e)throw new Yp(`Invalid value in obj: ${JSON.stringify(e)}`);for(const t in e)if(e.hasOwnProperty(t))return!1;return!0}function dm(e,t,n){if(null!=n&&e.indexOf(n)<0)throw new Yp(`${n} is not a valid ${t}. Valid values are ${e} or null/undefined.`)}function pm(e,t,n=0,r=1/0){return em(n>=0),em(r>=n),Array.isArray(e)&&e.length>=n&&e.length<=r&&e.every((e=>typeof e===t))}function mm(e,t){Array.isArray(e)?(Q(e.length>0,(()=>`${t} is unexpectedly an empty array.`)),e.forEach(((e,n)=>mm(e,`element ${n+1} of ${t}`)))):Q(Number.isInteger(e)&&e>0,(()=>`Expected ${t} to be a positive integer, but got ${gm(e)}.`))}function gm(e){return null===e?"null":Array.isArray(e)?"["+e.map((e=>gm(e))).join(",")+"]":"string"==typeof e?`"${e}"`:`${e}`}function ym(e){return"relu"===e?"relu":"linear"===e?"linear":"elu"===e?"elu":null}function bm(e,t){return po((()=>To(Uu(Do(e,e),t,!0))))}class vm extends ji{getConfig(){return{}}}class wm extends vm{constructor(e){super(),this.defaultMaxValue=2,this.defaultAxis=0,this.maxValue=null!=e.maxValue?e.maxValue:this.defaultMaxValue,this.axis=null!=e.axis?e.axis:this.defaultAxis}apply(e){return po((()=>{const t=bm(e,this.axis),n=Hl(t,0,this.maxValue);return Do(e,Ao(n,No(Xp(),t)))}))}getConfig(){return{maxValue:this.maxValue,axis:this.axis}}}wm.className="MaxNorm",Gi(wm);class _m extends vm{constructor(e){super(),this.defaultAxis=0,this.axis=null!=e.axis?e.axis:this.defaultAxis}apply(e){return po((()=>Ao(e,No(Xp(),bm(e,this.axis)))))}getConfig(){return{axis:this.axis}}}_m.className="UnitNorm",Gi(_m);class xm extends vm{apply(e){return zc(e)}}xm.className="NonNeg",Gi(xm);class km extends vm{constructor(e){super(),this.defaultMinValue=0,this.defaultMaxValue=1,this.defaultRate=1,this.defaultAxis=0,this.minValue=null!=e.minValue?e.minValue:this.defaultMinValue,this.maxValue=null!=e.maxValue?e.maxValue:this.defaultMaxValue,this.rate=null!=e.rate?e.rate:this.defaultRate,this.axis=null!=e.axis?e.axis:this.defaultAxis}apply(e){return po((()=>{const t=bm(e,this.axis),n=No(Do(this.rate,Hl(t,this.minValue,this.maxValue)),Do(1-this.rate,t));return Do(e,Ao(n,No(Xp(),t)))}))}getConfig(){return{minValue:this.minValue,maxValue:this.maxValue,rate:this.rate,axis:this.axis}}}km.className="MinMaxNorm",Gi(km);const Em={maxNorm:"MaxNorm",minMaxNorm:"MinMaxNorm",nonNeg:"NonNeg",unitNorm:"UnitNorm"};function Cm(e){return om(e)}function Sm(e,t={}){return um(e,Hi.getMap().classNameMap,t,"constraint")}function Nm(e){return null==e?null:"string"==typeof e?Sm({className:e in Em?Em[e]:e,config:{}}):e instanceof vm?e:Sm(e)}function Im(e){return new wm(e)}function Am(e){return new _m(e)}function Dm(){return new xm}function Tm(e){return new km(e)}const Fm=["channelsFirst","channelsLast"],Rm=["nearest","bilinear"],Om=["valid","same","causal"],Mm=["max","avg"],Bm=["sum","mul","concat","ave"],$m=new Map;function Pm(e){dm(Fm,"DataFormat",e)}function Lm(e){dm(Om,"PaddingMode",e)}function zm(e){dm(Mm,"PoolMode",e)}const Wm=[];function Um(e,t){Wm.push(e);try{const e=t();return Wm.pop(),e}catch(e){throw Wm.pop(),e}}function Vm(e){if(!Gm(e))throw new Error("Not a valid tensor name: '"+e+"'");return(0===Wm.length?"":Wm.join("/")+"/")+e}function jm(e){if(!Gm(e))throw new Error("Not a valid tensor name: '"+e+"'");$m.has(e)||$m.set(e,0);const t=$m.get(e);if($m.set(e,$m.get(e)+1),t>0){const n=`${e}_${t}`;return $m.set(n,1),n}return e}const Hm=new RegExp(/^[A-Za-z0-9][-A-Za-z0-9\._\/]*$/);function Gm(e){return!!e.match(Hm)}function Xm(e,t,n){null==t&&(t=0),null==n&&(n=e.length);let r=1;for(let a=t;a{switch(e.rank){case 1:return th(e,t,n);case 2:return nh(e,[t,0],[n,e.shape[1]]);case 3:return rh(e,[t,0,0],[n,e.shape[1],e.shape[2]]);case 4:return ah(e,[t,0,0,0],[n,e.shape[1],e.shape[2],e.shape[3]]);case 5:return Ol(e,[t,0,0,0,0],[n,e.shape[1],e.shape[2],e.shape[3],e.shape[4]]);case 6:return Ol(e,[t,0,0,0,0,0],[n,e.shape[1],e.shape[2],e.shape[3],e.shape[4],e.shape[5]]);default:throw new Yp(`sliceAlongFirstAxis() received an unsupported tensor rank: ${e.rank}`)}}))}function tg(e,t,n){return po((()=>{switch(e.rank){case 1:return th(e,t,n);case 2:return nh(e,[0,t],[e.shape[0],n]);case 3:return rh(e,[0,0,t],[e.shape[0],e.shape[1],n]);case 4:return ah(e,[0,0,0,t],[e.shape[0],e.shape[1],e.shape[2],n]);default:throw new Yp(`sliceAlongLastAxis() received an unsupported tensor rank: ${e.rank}`)}}))}function ng(e,t,n,r){return po((()=>{switch(e.rank){case 1:return th(e,t,n);case 2:switch(r){case 1:return eg(e,t,n);case 2:return tg(e,t,n);default:throw new Yp(`The axis is not within the rank of the tensor ${r}`)}case 3:switch(r){case 1:return eg(e,t,n);case 2:return rh(e,[0,t,0],[e.shape[0],n,e.shape[2]]);case 3:return tg(e,t,n);default:throw new Yp(`The axis is not within the rank of the tensor ${r}`)}case 4:switch(r){case 1:return eg(e,t,n);case 2:return ah(e,[0,t,0,0],[e.shape[0],n,e.shape[2],e.shape[3]]);case 3:return ah(e,[0,0,t,0],[e.shape[0],e.shape[1],n,e.shape[3]]);case 4:return tg(e,t,n);default:throw new Yp(`The axis is not within the rank of the tensor ${r}`)}default:throw new Yp(`sliceAlongLastAxis() received an unsupported tensor rank: ${e.rank}`)}}))}function rg(e,t=-1){let n;return t<0&&(n=e[0].rank,t=0!==n?n:0),t===e[0].rank&&(t=-1),Fl(e,t)}function ag(e,t){switch(e.rank){case 1:return Gl([e,t]);case 2:return Xl([e,t],0);case 3:return Kl([e,t],0);case 4:return ql([e,t],0);default:throw new Yp(`concatAlongFirstAxis() received an unsupported tensor rank: ${e.rank}`)}}function sg(e,t){if(Array.isArray(t)||(t=[t]),e.rank!==t.length)throw new Yp(`The length of input n (${t.length}) does not match the number of dimensions in input x (${e.rank})`);return _u(e,t)}function ig(e,t=0,n=1,r,a){return Mc(e,t,n,r,a)}function og(e,t,n,r){if(e.rank<2||t.rank<2)throw new Jp(`dot requires both inputs to be rank >= 2 but got x shape = ${e.shape} and y shape = ${t.shape}`);if(t.rank>=3&&e.shape.slice(-1)[0]!==t.shape.slice(-2)[0])throw new Jp(`If rank y >= 3, then the second last dim of y must equal the last dim of x but got x shape = ${e.shape} and y shape = ${t.shape}`);if(2===e.rank&&2===t.rank)return Yh({a:e,b:t,transposeA:!1,transposeB:!1,bias:r?cg(e.rank,r,"channelsLast"):null,activation:n});{const a=e.shape.slice(),s=a.pop();e=e.reshape([-1,s]);const i=t.shape.slice(),o=i.pop(),l=i.pop(),u=[...i,o],c=Array.from({length:t.rank},((e,n)=>0===n?t.rank-2:n<=t.rank-2?n-1:n));t=t.transpose(c).reshape([l,-1]);const h=[...a,...u];return Yh({a:e,b:t,transposeA:!1,transposeB:!1,bias:r?cg(e.rank,r,"channelsLast"):null,activation:n}).reshape(h)}}function lg(e,t,n){return po((()=>(t=Array.isArray(t)?yh(t,"int32"):t.toInt(),Eu(e,t,n))))}function ug(e){return Do(e,e)}function cg(e,t,n){const r=t.shape;if(1!==t.rank&&t.rank!==e)throw new Yp(`Unexpected bias dimensions: ${t.rank}; expected it to be 1 or ${e}`);if(5===e){if("channelsFirst"===n)return 1===r.length?t.reshape([1,r[0],1,1,1]):t.reshape([1,r[3],r[0],r[1],r[2]]);if("channelsLast"===n)return 1===r.length?t.reshape([1,1,1,1,r[0]]):t.reshape([1].concat(r))}else if(4===e){if("channelsFirst"===n)return 1===r.length?t.reshape([1,r[0],1,1]):t.reshape([1,r[2],r[0],r[1]]);if("channelsLast"===n)return 1===r.length?t.reshape([1,1,1,r[0]]):t.reshape([1].concat(r))}else if(3===e){if("channelsFirst"===n)return 1===r.length?t.reshape([1,r[0],1]):t.reshape([1,r[1],r[0]]);if("channelsLast"===n)return 1===r.length?t.reshape([1,1,r[0]]):t.reshape([1].concat(r))}else if(e<3)return t;throw new Yp(`Unsupported input rank by biasAdd: ${t.rank}`)}function hg(e,t,n){return po((()=>(null==n&&(n="channelsLast"),Pm(n),e.add(cg(e.rank,t,n)))))}function fg(e,t,n,r){return po((()=>$h(e,t,n,r)))}function dg(e,t,n=!1){return n?e():t()}const pg=["fanIn","fanOut","fanAvg"],mg=["normal","uniform","truncatedNormal"];class gg extends ji{fromConfigUsesCustomObjects(){return!1}getConfig(){return{}}}class yg extends gg{apply(e,t){return oc(e,t)}}yg.className="Zeros",Gi(yg);class bg extends gg{apply(e,t){return lc(e,t)}}bg.className="Ones",Gi(bg);class vg extends gg{constructor(e){if(super(),"object"!=typeof e)throw new Yp(`Expected argument of type ConstantConfig but got ${e}`);if(void 0===e.value)throw new Yp(`config must have value set but got ${e}`);this.value=e.value}apply(e,t){return po((()=>Do(Wo(this.value),lc(e,t))))}getConfig(){return{value:this.value}}}vg.className="Constant",Gi(vg);class wg extends gg{constructor(e){super(),this.DEFAULT_MINVAL=-.05,this.DEFAULT_MAXVAL=.05,this.minval=e.minval||this.DEFAULT_MINVAL,this.maxval=e.maxval||this.DEFAULT_MAXVAL,this.seed=e.seed}apply(e,t){return Bc(e,this.minval,this.maxval,t)}getConfig(){return{minval:this.minval,maxval:this.maxval,seed:this.seed}}}wg.className="RandomUniform",Gi(wg);class _g extends gg{constructor(e){super(),this.DEFAULT_MEAN=0,this.DEFAULT_STDDEV=.05,this.mean=e.mean||this.DEFAULT_MEAN,this.stddev=e.stddev||this.DEFAULT_STDDEV,this.seed=e.seed}apply(e,t){if("float32"!==(t=t||"float32")&&"int32"!==t)throw new Jp(`randomNormal does not support dType ${t}.`);return ig(e,this.mean,this.stddev,t,this.seed)}getConfig(){return{mean:this.mean,stddev:this.stddev,seed:this.seed}}}_g.className="RandomNormal",Gi(_g);class xg extends gg{constructor(e){super(),this.DEFAULT_MEAN=0,this.DEFAULT_STDDEV=.05,this.mean=e.mean||this.DEFAULT_MEAN,this.stddev=e.stddev||this.DEFAULT_STDDEV,this.seed=e.seed}apply(e,t){if("float32"!==(t=t||"float32")&&"int32"!==t)throw new Jp(`truncatedNormal does not support dType ${t}.`);return kh(e,this.mean,this.stddev,t,this.seed)}getConfig(){return{mean:this.mean,stddev:this.stddev,seed:this.seed}}}xg.className="TruncatedNormal",Gi(xg);class kg extends gg{constructor(e){super(),this.gain=null!=e.gain?e.gain:1}apply(e,t){return po((()=>{if(2!==e.length||e[0]!==e[1])throw new Yp("Identity matrix initializer can only be used for 2D square matrices.");return Do(this.gain,xu(e[0]))}))}getConfig(){return{gain:this.gain}}}kg.className="Identity",Gi(kg);class Eg extends gg{constructor(e){if(super(),e.scale<0)throw new Yp(`scale must be a positive float. Got: ${e.scale}`);var t;this.scale=null==e.scale?1:e.scale,this.mode=null==e.mode?"fanIn":e.mode,t=this.mode,dm(pg,"FanMode",t),this.distribution=null==e.distribution?"normal":e.distribution,function(e){dm(mg,"Distribution",e)}(this.distribution),this.seed=e.seed}apply(e,t){const n=function(e,t="channelsLast"){let n,r;if(Pm(t),2===e.length)n=e[0],r=e[1];else if(-1!==[3,4,5].indexOf(e.length)){if("channelsFirst"===t){const t=Xm(e,2);n=e[1]*t,r=e[0]*t}else if("channelsLast"===t){const t=Xm(e,0,e.length-2);n=e[e.length-2]*t,r=e[e.length-1]*t}}else{const t=Xm(e);n=Math.sqrt(t),r=Math.sqrt(t)}return[n,r]}(e),r=n[0],a=n[1];let s=this.scale;if("fanIn"===this.mode?s/=Math.max(1,r):"fanOut"===this.mode?s/=Math.max(1,a):s/=Math.max(1,(r+a)/2),"normal"===this.distribution){const n=Math.sqrt(s);if("float32"!==(t=t||"float32")&&"int32"!==t)throw new Jp(`${this.getClassName()} does not support dType ${t}.`);return kh(e,0,n,t,this.seed)}{const n=Math.sqrt(3*s);return Bc(e,-n,n,t)}}getConfig(){return{scale:this.scale,mode:this.mode,distribution:this.distribution,seed:this.seed}}}Eg.className="VarianceScaling",Gi(Eg);class Cg extends Eg{constructor(e){super({scale:1,mode:"fanAvg",distribution:"uniform",seed:null==e?null:e.seed})}getClassName(){return Eg.className}}Cg.className="GlorotUniform",Gi(Cg);class Sg extends Eg{constructor(e){super({scale:1,mode:"fanAvg",distribution:"normal",seed:null==e?null:e.seed})}getClassName(){return Eg.className}}Sg.className="GlorotNormal",Gi(Sg);class Ng extends Eg{constructor(e){super({scale:2,mode:"fanIn",distribution:"normal",seed:null==e?null:e.seed})}getClassName(){return Eg.className}}Ng.className="HeNormal",Gi(Ng);class Ig extends Eg{constructor(e){super({scale:2,mode:"fanIn",distribution:"uniform",seed:null==e?null:e.seed})}getClassName(){return Eg.className}}Ig.className="HeUniform",Gi(Ig);class Ag extends Eg{constructor(e){super({scale:1,mode:"fanIn",distribution:"normal",seed:null==e?null:e.seed})}getClassName(){return Eg.className}}Ag.className="LeCunNormal",Gi(Ag);class Dg extends Eg{constructor(e){super({scale:1,mode:"fanIn",distribution:"uniform",seed:null==e?null:e.seed})}getClassName(){return Eg.className}}Dg.className="LeCunNormal",Gi(Dg);class Tg extends gg{constructor(e){if(super(),this.DEFAULT_GAIN=1,this.gain=null==e.gain?this.DEFAULT_GAIN:e.gain,this.seed=e.seed,null!=this.seed)throw new Jp("Random seed is not implemented for Orthogonal Initializer yet.")}apply(e,t){return po((()=>{if(e.length<2)throw new Jp("Shape must be at least 2D.");e[0]*e[1]>2e3&&console.warn(`Orthogonal initializer is being called on a matrix with more than 2000 (${e[0]*e[1]}) elements: Slowness may result.`);const t=ig(e[0]>e[1]?[e[1],e[0]]:e,0,1,"float32");let n=Wf.gramSchmidt(t);return e[0]>e[1]&&(n=n.transpose()),Do(this.gain,n)}))}getConfig(){return{gain:this.gain,seed:this.seed}}}Tg.className="Orthogonal",Gi(Tg);const Fg={constant:"Constant",glorotNormal:"GlorotNormal",glorotUniform:"GlorotUniform",heNormal:"HeNormal",heUniform:"HeUniform",identity:"Identity",leCunNormal:"LeCunNormal",leCunUniform:"LeCunUniform",ones:"Ones",orthogonal:"Orthogonal",randomNormal:"RandomNormal",randomUniform:"RandomUniform",truncatedNormal:"TruncatedNormal",varianceScaling:"VarianceScaling",zeros:"Zeros"};function Rg(e,t={}){return um(e,Hi.getMap().classNameMap,t,"initializer")}function Og(e){return om(e)}function Mg(e){if("string"==typeof e){const t=e in Fg?Fg[e]:e;if("GlorotNormal"===t)return new Sg;if("GlorotUniform"===t)return new Cg;if("HeNormal"===t)return new Ng;if("HeUniform"===t)return new Ig;if("LeCunNormal"===t)return new Ag;if("LeCunUniform"===t)return new Dg;{const e={};return e.className=t,e.config={},Rg(e)}}return e instanceof gg?e:Rg(e)}function Bg(){return new yg}function $g(){return new bg}function Pg(e){return new vg(e)}function Lg(e){return new wg(e)}function zg(e){return new _g(e)}function Wg(e){return new xg(e)}function Ug(e){return new kg(e)}function Vg(e){return new Eg(e)}function jg(e){return new Cg(e)}function Hg(e){return new Sg(e)}function Gg(e){return new Ng(e)}function Xg(e){return new Ig(e)}function Kg(e){return new Ag(e)}function qg(e){return new Dg(e)}function Yg(e){return new Tg(e)}let Jg=0;function Zg(){return Jg++}const Qg={};function ey(e=""){return e in Qg||(Qg[e]=0),Qg[e]+=1,e+Qg[e].toString()}function ty(e){return Array.isArray(e)&&Array.isArray(e[0])}function ny(e){return 0===e.length?[]:Array.isArray(e[0])?e:[e]}function ry(e){let t;if(Array.isArray(e)){if(1!==e.length)throw new Yp(`Expected Tensor length to be 1; got ${e.length}`);t=e[0]}else t=e;return t}function ay(e){if(Array.isArray(e)&&Array.isArray(e[0])){if(1===e.length)return(e=e)[0];throw new Yp(`Expected exactly 1 Shape; got ${e.length}`)}return e}function sy(e){let t=0;for(const n of e)0===n.shape.length?t+=1:t+=n.shape.reduce(((e,t)=>e*t));return t}class iy{constructor(e,t="float32",n="Variable",r=!0,a=null){this.dtype=null==t?"float32":t,this.shape=e.shape,this.id=Zg(),n=null==n?"Variable":n,this.originalName=Vm(n),this.name=jm(this.originalName),this.trainable_=r,this.constraint=a,this.val=Nh(e,this.trainable_,this.name,this.dtype)}read(){return this.assertNotDisposed(),this.val}write(e){return this.assertNotDisposed(),function(e,t){if(e.shape.toString()!==t.shape.toString())throw new Error("Shape mismatch: "+JSON.stringify(e.shape)+" vs. "+JSON.stringify(t.shape))}(this.val,e),this.val.id!==e.id&&(this.val.assign(e),null!=this.constraint&&this.val.assign(this.constraint.apply(this.val))),this}dispose(){this.assertNotDisposed(),this.val.dispose()}assertNotDisposed(){if(this.val.isDisposed)throw new Error(`LayersVariable ${this.name} is already disposed.`)}get trainable(){return this.trainable_}set trainable(e){this.trainable_=e,this.val.trainable=e}}function oy(e){return e.map((e=>e.read()))}function ly(e){e.forEach((e=>{e[0].write(e[1])}))}class uy{constructor(e){this.dtype=e.dtype,this.shape=e.shape,null!=e.shape?this.ndim=e.shape.length:this.ndim=e.ndim,this.maxNDim=e.maxNDim,this.minNDim=e.minNDim,this.axes=e.axes||{}}}class cy{constructor(e,t,n,r,a,s,i){this.dtype=e,this.shape=t,this.sourceLayer=n,this.inputs=r,this.callArgs=a,this.outputTensorIndex=i,this.id=Zg(),null!=s&&(this.originalName=Vm(s),this.name=jm(this.originalName)),this.rank=t.length}}let hy=0;class fy{constructor(e,t){this.callArgs=t,this.id=hy++,this.outboundLayer=e.outboundLayer,this.inboundLayers=e.inboundLayers,this.nodeIndices=e.nodeIndices,this.tensorIndices=e.tensorIndices,this.inputTensors=e.inputTensors,this.outputTensors=e.outputTensors,this.inputMasks=e.inputMasks,this.outputMasks=e.outputMasks,this.inputShapes=e.inputShapes,this.outputShapes=e.outputShapes;for(const t of e.inboundLayers)null!=t&&t.outboundNodes.push(this);e.outboundLayer.inboundNodes.push(this)}getConfig(){const e=[];for(const t of this.inboundLayers)null!=t?e.push(t.name):e.push(null);return{outboundLayer:this.outboundLayer?this.outboundLayer.name:null,inboundLayers:e,nodeIndices:this.nodeIndices,tensorIndices:this.tensorIndices}}}let dy=0;class py extends ji{constructor(e={}){super(),this._callHook=null,this._addedWeightNames=[],this._stateful=!1,this.id=dy++,this.activityRegularizer=null,this.inputSpec=null,this.supportsMasking=!1,this._trainableWeights=[],this._nonTrainableWeights=[],this._losses=[],this._updates=[],this._built=!1,this.inboundNodes=[],this.outboundNodes=[];let t=e.name;if(!t){const e=this.getClassName();t=am(e)+"_"+ey(e)}if(this.name=t,this.trainable_=null==e.trainable||e.trainable,null!=e.inputShape||null!=e.batchInputShape){let t;if(null!=e.batchInputShape)t=e.batchInputShape;else if(null!=e.inputShape){let n=null;null!=e.batchSize&&(n=e.batchSize),t=[n].concat(e.inputShape)}this.batchInputShape=t;let n=e.dtype;null==n&&(n=e.inputDType),null==n&&(n="float32"),this.dtype=n}null!=e.weights?this.initialWeights=e.weights:this.initialWeights=null,this._refCount=null,this.fastWeightInitDuringBuild=!1}static nodeKey(e,t){return e.name+"_ib-"+t.toString()}getNodeAtIndex(e,t){if(0===this.inboundNodes.length)throw new qp(`The layer has never been called and thus has no defined ${t}.`);if(this.inboundNodes.length<=e)throw new Yp(`Asked to get ${t} at node ${e}, but the layer has only ${this.inboundNodes.length} inbound nodes.`);return this.inboundNodes[e]}getInputAt(e){return nm(this.getNodeAtIndex(e,"input").inputTensors)}getOutputAt(e){return nm(this.getNodeAtIndex(e,"output").outputTensors)}get input(){if(this.inboundNodes.length>1)throw new Kp(`Layer ${this.name} has multiple inbound nodes, hence the notion of "layer input" is ill-defined. Use \`getInputAt(nodeIndex)\` instead.`);if(0===this.inboundNodes.length)throw new Kp(`Layer ${this.name} is not connected, no input to return.`);return nm(this.getNodeAtIndex(0,"input").inputTensors)}get output(){if(0===this.inboundNodes.length)throw new Kp(`Layer ${this.name} has no inbound nodes.`);if(this.inboundNodes.length>1)throw new Kp(`Layer ${this.name} has multiple inbound nodes, hence the notion of "layer output" is ill-defined. Use \`getOutputAt(nodeIndex)\` instead.`);return nm(this.getNodeAtIndex(0,"output").outputTensors)}get losses(){return this._losses}calculateLosses(){return this.losses.map((e=>e()))}get updates(){return this._updates}get built(){return this._built}set built(e){this._built=e}get trainable(){return this.trainable_}set trainable(e){this._trainableWeights.forEach((t=>t.trainable=e)),this.trainable_=e}get trainableWeights(){return this.trainable_?this._trainableWeights.filter((e=>e.trainable)):[]}set trainableWeights(e){this._trainableWeights=e}get nonTrainableWeights(){return this.trainable?this._trainableWeights.filter((e=>!e.trainable)).concat(this._nonTrainableWeights):this._trainableWeights.concat(this._nonTrainableWeights)}set nonTrainableWeights(e){this._nonTrainableWeights=e}get weights(){return this.trainableWeights.concat(this.nonTrainableWeights)}get stateful(){return this._stateful}resetStates(){if(!this.stateful)throw new Error("Cannot call the resetStates() method of a non-stateful Layer object.")}assertInputCompatibility(e){if(e=rm(e),null==this.inputSpec||0===this.inputSpec.length)return;const t=rm(this.inputSpec);if(e.length!==t.length)throw new Yp(`Layer ${this.name} expects ${t.length} inputs, but it received ${e.length} input tensors. Input received: ${e}`);for(let n=0;na.maxNDim)throw new Yp(`Input ${n} is incompatible with layer ${this.name}: expected max_ndim=${a.maxNDim}, found ndim=${s}`);if(null!=a.minNDim&&s=0?e[r]:e[e.length+r];if(null!=s&&-1===[s,null].indexOf(i))throw new Yp(`Input ${n} is incompatible with layer ${this.name}: expected axis ${r} of input shape to have value ${s} but got shape ${e}.`)}}if(null!=a.shape)for(let e=0;e{if(!this.built){this.assertInputCompatibility(e);const t=[];for(const n of rm(e))t.push(n.shape);this.build(nm(t)),this.built=!0,this.initialWeights&&this.setWeights(this.initialWeights),null===this._refCount&&a&&(this._refCount=1)}if(this.assertInputCompatibility(e),a){let r=this.call(e,t);const a=rm(r),s=[];for(let e of a)-1!==n.indexOf(e)&&(e=e.clone()),s.push(e);if(r=nm(s),null!=this.activityRegularizer)throw new Jp("Layer invocation in the presence of activity regularizer(s) is not supported yet.");return r}{const n=function(e){e=rm(e);const t=[];for(const n of e)t.push(n.shape);return nm(t)}(e),r=this.computeOutputShape(n);let a;const s="float32";if(this.warnOnIncompatibleInputShape(Array.isArray(e)?n[0]:n),a=null!=r&&r.length>0&&Array.isArray(r[0])?r.map(((n,r)=>new cy(s,n,this,rm(e),t,this.name,r))):new cy(s,r,this,rm(e),t,this.name),this.addInboundNode(e,a,null,null,n,r,t),this._refCount++,null!=this.activityRegularizer)throw new Jp("Layer invocation in the presence of activity regularizer(s) is not supported yet.");return a}}))}warnOnIncompatibleInputShape(e){if(null!=this.batchInputShape)if(e.length!==this.batchInputShape.length)console.warn(`The rank of the input tensor provided (shape: ${JSON.stringify(e)}) does not match that of the batchInputShape (${JSON.stringify(this.batchInputShape)}) of the layer ${this.name}`);else{let t=!1;this.batchInputShape.forEach(((n,r)=>{null!=n&&null!=e[r]&&e[r]!==n&&(t=!0)})),t&&console.warn(`The shape of the input tensor (${JSON.stringify(e)}) does not match the expectation of layer ${this.name}: ${JSON.stringify(this.batchInputShape)}`)}}get outputShape(){if(null==this.inboundNodes||0===this.inboundNodes.length)throw new Kp(`The layer ${this.name} has never been called and thus has no defined output shape.`);const e=[];for(const t of this.inboundNodes){const n=JSON.stringify(t.outputShapes);-1===e.indexOf(n)&&e.push(n)}if(1===e.length){const e=this.inboundNodes[0].outputShapes;return Array.isArray(e)&&Array.isArray(e[0])&&1===e.length?e[0]:e}throw new Kp(`The layer ${this.name} has multiple inbound nodes with different output shapes. Hence the notion of "output shape" is ill-defined for the layer.`)}countParams(){if(!this.built)throw new qp(`You tried to call countParams() on ${this.name}, but the layer is not built yet. Build it first by calling build(batchInputShape).`);return sy(this.weights)}build(e){this.built=!0}getWeights(e=!1){return oy(e?this.trainableWeights:this.weights)}setWeights(e){po((()=>{const t=this.weights;if(t.length!==e.length)throw new Yp(`You called setWeights(weights) on layer "${this.name}" with a weight list of length ${e.length}, but the layer was expecting ${t.length} weights. Provided weights: ${e}...`);if(0===t.length)return;const n=[],r=oy(t);for(let a=0;aa.apply(l.read()))),null==s&&(s=!0),s?this._trainableWeights.push(l):this._nonTrainableWeights.push(l),l}setFastWeightInitDuringBuild(e){this.fastWeightInitDuringBuild=e}addLoss(e){null==e||Array.isArray(e)&&0===e.length||(e=rm(e),void 0!==this._losses&&null!==this._losses&&this.losses.push(...e))}computeOutputShape(e){return e}computeMask(e,t){if(!this.supportsMasking){if(null!=t){if(!Array.isArray(t))throw new TypeError(`Layer ${this.name} does not support masking, but was passed an inputMask.`);t.forEach((e=>{if(null!=e)throw new TypeError(`Layer ${this.name} does not support masking, but was passed an inputMask.`)}))}return null}return t}addInboundNode(e,t,n,r,a,s,i=null){const o=rm(e);t=rm(t),n=rm(n),r=rm(r),a=ny(a),s=ny(s);const l=[],u=[],c=[];for(const e of o)l.push(e.sourceLayer),u.push(e.nodeIndex),c.push(e.tensorIndex);new fy({outboundLayer:this,inboundLayers:l,nodeIndices:u,tensorIndices:c,inputTensors:o,outputTensors:t,inputMasks:n,outputMasks:r,inputShapes:a,outputShapes:s},i);for(let e=0;ee.dispose())),this.weights.length}assertNotDisposed(){if(0===this._refCount)throw new Error(`Layer '${this.name}' is already disposed.`)}dispose(){if(!this.built)throw new Error(`Cannot dispose Layer ${this.name} because it has not been built yet.`);if(null===this._refCount)throw new Error(`Cannot dispose Layer ${this.name} because it has not been used yet.`);this.assertNotDisposed();let e=0;return 0==--this._refCount&&(e=this.disposeWeights()),{refCountAfterDispose:this._refCount,numDisposedVariables:e}}}function my(e,t,n){if((null==t||null!=n&&n>0)&&(t=e.sourceLayer,n=e.nodeIndex),0===t.inboundNodes.length)return[e];{const e=t.inboundNodes[n];if(0===e.inboundLayers.length)return e.inputTensors;{const t=[];for(let n=0;n0){const a=await Promise.all(t);for(let t=0;tNo(this.totals[e],Do(r,n))));this.totals[e]=a,null!=t&&t.dispose()}}}async onEpochEnd(e,t){if(null!=t)for(const e of this.params.metrics)null!=this.totals[e]&&("number"==typeof this.totals[e]?t[e]=this.totals[e]/this.seen:po((()=>{const n=Do(Ao(1,this.seen),this.totals[e]);t[e]=n,this.totals[e].dispose(),go(t[e])})))}}class Ey extends _y{async onTrainBegin(e){this.epoch=[],this.history={}}async onEpochEnd(e,t){null==t&&(t={}),this.epoch.push(e);for(const e in t)null==this.history[e]&&(this.history[e]=[]),this.history[e].push(t[e])}async syncData(){const e=[],t=[],n=[];for(const r in this.history){const a=this.history[r];for(let s=0;s{const s=sa();return s-rnew Cy(e,t)))}class Ny{constructor(){}static registerCallbackConstructor(e,t){Q(e>=0&&Number.isInteger(e),(()=>`Verbosity level is expected to be an integer >= 0, but got ${e}`)),Ny.checkForDuplicate(t),null==Ny.constructors[e]&&(Ny.constructors[e]=[]),Ny.constructors[e].push(t)}static checkForDuplicate(e){for(const t in Ny.constructors)Ny.constructors[+t].forEach((t=>{if(t===e)throw new Yp("Duplicate callback constructor.")}))}static clear(){Ny.constructors={}}static createCallbacks(e){const t=[];for(const n in Ny.constructors){const r=+n;e>=r&&t.push(...Ny.constructors[r])}return t.map((e=>new e))}}function Iy(e,t,n,r,a,s,i,o,l){const u=new Ey,c=[new ky,...Ny.createCallbacks(t)];null!=e&&c.push(...e),c.push(u);const h=new xy(c);return h.setParams({epochs:n,initialEpoch:r,samples:a,steps:s,batchSize:i,verbose:t,doValidation:o,metrics:l}),{callbackList:h,history:u}}function Ay(e,t={},n=!1){return um(e,Hi.getMap().classNameMap,t,"layer",n)}function Dy(e,t){return po((()=>{"float32"!==e.dtype&&(e=e.asType("float32"));const n=Uu(ug(e),t,!0),r=jo(n.shape,Xp()),a=To(Qo(n,r));return Ao(e,a)}))}function Ty(e,t){return po((()=>ic(ug(Xo(t,e)),-1)))}function Fy(e,t){return po((()=>ic(qo(Xo(t,e)),-1)))}function Ry(e,t){return po((()=>{const n=Xo(e,t),r=Hl(qo(e),Xp(),Number.MAX_VALUE),a=qo(Ao(n,r));return Do(100,ic(a,-1))}))}function Oy(e,t,n=!1){return po((()=>{if(n)t=sh(t);else{const e=Uu(t,t.shape.length-1,!0);t=Ao(t,e)}return t=Hl(t,Xp(),1-Xp()),Pu(Uu(Do(e.toFloat(),Bu(t)),t.shape.length-1))}))}function My(e,t,n=!1){return po((()=>{const r=ku(function(e){const t=[Xm(e.shape)];return e.reshape(t)}(e)).toInt(),a=(t=Hl(t,Xp(),1-Xp())).shape;return Oy(mi(r,a[a.length-1]).reshape(a),t,n)}))}function By(e,t){return po((()=>{let n;return n=Hl(t,Xp(),1-Xp()),n=Bu(Ao(n,Xo(1,n))),ic(function(e,t){if(!se(e.shape,t.shape))throw new Yp(`logits and labels must have the same shape, but got shapes ${JSON.stringify(e.shape)} and ${JSON.stringify(t.shape)}`);return po((()=>{const n=t.relu(),r=t.abs().neg();return n.sub(t.mul(e)).add(r.exp().log1p())}))}(e,n),-1)}))}function $y(e,t){return po((()=>{const n=Dy(e,-1),r=Dy(t,-1),a=Do(n,r);return Pu(Uu(a,-1))}))}Ny.constructors={};const Py={meanSquaredError:Ty,meanAbsoluteError:Fy,meanAbsolutePercentageError:Ry,meanSquaredLogarithmicError:function(e,t){return po((()=>{const n=Hl(t,Xp(),Number.MAX_VALUE),r=Bu(No(1,n)),a=Hl(e,Xp(),Number.MAX_VALUE),s=Bu(No(1,a));return ic(ug(Xo(r,s)),-1)}))},squaredHinge:function(e,t){return po((()=>{const n=Qo(0,Xo(1,Do(e,t)));return ic(ug(n),-1)}))},hinge:function(e,t){return po((()=>{const n=Qo(0,Xo(1,Do(e,t)));return ic(n,-1)}))},categoricalHinge:function(e,t){return po((()=>{const n=Uu(Do(e,t),-1),r=Wu(Do(Xo(1,e),t),-1);return Qo(0,No(1,Xo(r,n)))}))},logcosh:function(e,t){return po((()=>{const n=Math.log(2),r=Xo(t,e),a=Xo(No(r,Lu(Do(-2,r))),n);return ic(a,-1)}))},categoricalCrossentropy:Oy,sparseCategoricalCrossentropy:My,binaryCrossentropy:By,kullbackLeiblerDivergence:function(e,t){return po((()=>{const n=Hl(e,Xp(),1),r=Hl(t,Xp(),1);return Uu(Do(e,Bu(Ao(n,r))),-1)}))},poisson:function(e,t){return po((()=>{const n=Bu(No(Xp(),t));return ic(Xo(t,Do(e,n)),-1)}))},cosineProximity:$y};function Ly(e){if("string"==typeof e){if(e in Py)return Py[e];let t=`Unknown loss ${e}`;throw e.toLowerCase().includes("softmaxcrossentropy")&&(t=`Unknown loss ${e}. Use "categoricalCrossentropy" as the string name for tf.losses.softmaxCrossEntropy`),new Yp(t)}return e}function zy(e,t){return po((()=>{const n=Do(.5,bc(t)),r=Zm(Cu(t,n),e.dtype);return ic(hu(e,r),-1)}))}function Wy(e,t){return po((()=>Zm(hu(ul(e,-1),ul(t,-1)),"float32")))}function Uy(e,t){return po((()=>Qu(e.equal(1),t.equal(1)).sum().cast("float32")))}function Vy(e,t){return po((()=>{const n=Uy(e,t),r=function(e,t){return po((()=>Qu(e.equal(0),t.equal(1)).sum().cast("float32")))}(e,t),a=n.add(r);return fu(Cu(a,0),n.div(a),0).cast("float32")}))}function jy(e,t){return By(e,t)}function Hy(e,t){return e.rank===t.rank&&(e=e.squeeze([e.rank-1])),(t=t.argMax(-1)).dtype!==e.dtype&&(t=t.asType(e.dtype)),hu(e,t).asType("float32")}const Gy=Oy,Xy=My,Ky={binaryAccuracy:zy,categoricalAccuracy:Wy,precision:Vy,categoricalCrossentropy:Gy,sparseCategoricalCrossentropy:Xy,mse:Ty,MSE:Ty,mae:Fy,MAE:Fy,mape:Ry,MAPE:Ry,cosine:$y};function qy(e){if("string"==typeof e&&e in Ky)return Ky[e];if("string"!=typeof e&&null!=e)return e;throw new Yp(`Unknown metric ${e}`)}function Yy(e){if(em(null!==e,`Unknown LossOrMetricFn ${e}`),"string"==typeof e)return e;{let t;for(const n of Object.keys(Py))if(Py[n]===e){t=n;break}if(void 0!==t)return t;for(const n of Object.keys(Ky))if(Ky[n]===e){t=n;break}return void 0!==t?t:e.name}}function Jy(e,t,n=!1){if(null==e||"object"!=typeof e||Object.getPrototypeOf(e)!==Object.prototype||!Zy(e))throw new Error("User-defined metadata is expected to be a JSON object, but is not.");if(n){const n=JSON.stringify(e);n.length>1048576&&console.warn(`User-defined metadata of model "${t}" is too large in size (length=${n.length} when serialized). It is not recommended to store such large objects in user-defined metadata. Please make sure its serialized length is <= 1048576.`)}}function Zy(e){if(null===e)return!0;if("object"==typeof e){if(Object.getPrototypeOf(e)===Object.prototype){const t=Object.keys(e);for(const n of t){if("string"!=typeof n)return!1;if(!Zy(e[n]))return!1}return!0}if(Array.isArray(e)){for(const t of e)if(!Zy(t))return!1;return!0}return!1}{const t=typeof e;return"string"===t||"number"===t||"boolean"===t}}function Qy(e,t,n=console.log){let r="";for(let n=0;n0&&(r=r.slice(0,r.length-1)+" "),r+=e[n],r=r.slice(0,t[n]),r+=" ".repeat(t[n]-r.length);n(r)}function eb(e,t,n){let r;try{r=JSON.stringify(e.outputShape)}catch(e){r="multiple"}Qy([`${e.name} (${e.getClassName()})`,r,e.countParams().toString()],t,n)}function tb(e,t,n,r){let a;try{a=JSON.stringify(e.outputShape)}catch(e){a="multiple"}const s=[];for(const t of e.inboundNodes)if(!(null!=n&&n.length>0&&-1===n.indexOf(t)))for(let e=0;ee.name)),l=[],u=t.names();for(const e of o)-1!==u.indexOf(e)?l.push(t.getValue(e)):l.push(null);null!=r&&(r.maxNumTensors=-1/0,r.minNumTensors=1/0);const c=o.join(",")+"|"+t.names().join(",");let h,f;if(null==ob[c]){const e=function(e,t){Q(null!=e&&e.length>0,(()=>"Expected at least one fetch, got none"));let n=[],r={};if(1===e.length){const a=hb(e[0],t);n=a.sorted,r=a.recipientMap}else{const a=new Set;for(const s of e){const{sorted:e,recipientMap:i}=hb(s,t);for(const t of e)a.has(t.name)||(n.push(t),a.add(t.name));for(const e in i)null==r[e]&&(r[e]=new Set),i[e].forEach((t=>r[e].add(t)))}}return{sorted:n,recipientCounts:cb(r)}}(i,t);h=e.sorted,f=e.recipientCounts,ob[c]=h,lb[c]=f}h=ob[c],f={},a||Object.assign(f,lb[c]);const d=new ib(t);for(let e=0;er.maxNumTensors&&(r.maxNumTensors=e),e0;){const e=s[s.length-1];if(n.has(e.name)){s.pop();continue}const t=i[i.length-1]===s.length-1;if(0===e.inputs.length||t)s.pop(),r.push(e),n.add(e.name),t&&i.pop();else{i.push(s.length-1);for(const t of e.inputs)null==a[t.name]&&(a[t.name]=new Set),a[t.name].add(e.name),n.has(t.name)||s.push(t)}}return{sorted:r,recipientMap:a}}function fb(e){let t;if(1===e.sourceLayer.inboundNodes.length)t=e.sourceLayer.output;else{let n=null;for(let t=0;te.name))}`);hm(this.outputs).length!==this.outputs.length&&console.warn(`The list of outputs passed to the model is redundant. All outputs should only appear once. Found: ${this.outputs.map((e=>e.name))}`),this.inputLayers=[],this.inputLayersNodeIndices=[],this.inputLayersTensorIndices=[],this.outputLayers=[],this.outputLayersNodeIndices=[],this.outputLayersTensorIndices=[],this.layers=[],this.internalContainerRefs=[];for(const e of this.outputs){const t=e.sourceLayer,n=e.nodeIndex,r=e.tensorIndex;this.outputLayers.push(t),this.outputLayersNodeIndices.push(n),this.outputLayersTensorIndices.push(r)}for(const e of this.inputs){const t=e.sourceLayer,n=e.nodeIndex,r=e.tensorIndex;em(0===n,"input layer has >1 nodes"),em(0===r,"input layer has >1 tensors"),this.inputLayers.push(t),this.inputLayersNodeIndices.push(n),this.inputLayersTensorIndices.push(r)}this.inputNames=[],this.outputNames=[],this.feedInputShapes=[],this.feedInputNames=[],this.feedOutputNames=[];for(let t=0;te.shape)),this.internalOutputShapes=this.outputs.map((e=>e.shape));const t={},n={},r={},a={},s={},i=[],o=(e,t,n,r,a,l)=>{null!=r&&null!=a&&null!=l||(r=e.sourceLayer,a=e.nodeIndex,l=e.tensorIndex);const u=r.inboundNodes[a];if(-1!==n.indexOf(u))throw new qp(`The tensor ${e.name} at layer "${r.name}" is part of a cycle.`);if(-1!==t.indexOf(u))return;this.containerNodes.add(db.nodeKey(r,a)),r.id in s||(s[r.id]=Object.keys(s).length),-1===n.indexOf(u)&&n.push(u);const c=u.inboundLayers.length;for(let e=0;e=0;)n.splice(n.indexOf(u),1);i.push(u)},l=[],u=[];for(const e of this.outputs)o(e,l,u);const c=i.slice().reverse();for(const e of c){n[e.id]=e,e.id in t||(t[e.id]=0);let s=t[e.id];const i=null==r[e.outboundLayer.id]?0:r[e.outboundLayer.id];s=Math.max(s,i),r[e.outboundLayer.id]=s,a[e.outboundLayer.id]=e.outboundLayer,t[e.id]=s;for(let r=0;rparseInt(e,10))).sort(cm);this.layers=[];for(const e of d){const t=f[e];t.sort(((e,t)=>{const n=s[e.id],r=s[t.id];return nr?1:0}));for(const e of t)e instanceof db&&this.internalContainerRefs.push(e),this.layers.push(e)}this.layersByDepth=f,d=Object.keys(h).map((e=>parseInt(e,10))).sort(cm);const p=this.inputs.slice(),m=[];for(const e of d)for(const t of h[e]){const e=t.outboundLayer;if(null!=e){for(const n of t.inputTensors)if(-1===p.indexOf(n))throw new qp(`Graph disconnected: cannot obtain value for tensor ${n} at layer "${e.name}". The following previous layers were accessed without issue: ${m}`);for(const e of t.outputTensors)p.push(e);m.push(e.name)}}this.nodesByDepth=h;const g=this.layers.map((e=>e.name));for(const e of g){const t=g.filter((t=>t===e)).length;if(1!==t)throw new qp(`The name "${e}" is used ${t} times in the model. All layer names should be unique. Layer names: `+JSON.stringify(g))}this.outboundNodes=[],this.inboundNodes=[],new fy({outboundLayer:this,inboundLayers:[],nodeIndices:[],tensorIndices:[],inputTensors:this.inputs,outputTensors:this.outputs,inputMasks:this.inputs.map((e=>null)),outputMasks:this.outputs.map((e=>null)),inputShapes:this.inputs.map((e=>e.shape)),outputShapes:this.outputs.map((e=>e.shape))}),this.built=!0,this._refCount=1}assertNotDisposed(){if(0===this._refCount)throw new Error(`Container '${this.name}' is already disposed.`)}dispose(){this.assertNotDisposed();const e={refCountAfterDispose:null,numDisposedVariables:0};if(0==--this._refCount){for(const t of this.layers)e.numDisposedVariables+=t.dispose().numDisposedVariables;for(const t of this.internalContainerRefs)e.numDisposedVariables+=t.dispose().numDisposedVariables}return e.refCountAfterDispose=this._refCount,e}get trainable(){return this.trainable_}set trainable(e){this.layers.forEach((t=>{t._trainableWeights.forEach((t=>t.trainable=e))})),this.trainable_=e}get trainableWeights(){if(this._trainableWeights.length>0)throw new Yp("Container instance unexpectedly contains _trainableWeights.The trainable weights of a Container are a union of the trainable weights of its consituent Layers. Its own _trainableWeights must remain an empty Array.");if(!this.trainable)return[];let e=[];for(const t of this.layers)e=e.concat(t.trainableWeights);return e}get nonTrainableWeights(){const e=[];for(const t of this.layers)e.push(...t.nonTrainableWeights);if(!this.trainable){const t=[];for(const e of this.layers)t.push(...e.trainableWeights);return t.concat(e)}return e}get weights(){return this.trainableWeights.concat(this.nonTrainableWeights)}loadWeights(e,t=!0){const n={};let r=0;for(const e of this.layers)for(const t of e.weights){if(null!=n[t.originalName])throw new Yp(`Duplicate weight name: ${t.originalName}`);n[t.originalName]=t,r++}const a=[];for(const r in e){let s=r;if(null==n[r]){const e=r.split("/");s=e.slice(0,-2).concat([e[e.length-1]]).join("/")}if(null!=n[s])a.push([n[s],e[r]]);else if(t)throw new Yp(`Provided weight data has no target variable: ${r}`);delete n[s]}if(t){const e=[];for(const t in n)e.push(t);if(e.length>0)throw new Yp(`${e.length} of ${r} weights are not set: ${e}`)}ly(a)}updatedConfig(){const e=this.getConfig(),t={};return t.className=this.getClassName(),t.config=e,t.kerasVersion=`tfjs-layers ${sb}`,t.backend="TensorFlow.js",t}toJSON(e,t=!0){const n=ab(this.updatedConfig());return t?JSON.stringify(n):n}call(e,t){return po((()=>{e=rm(e);const n=new ib;for(let t=0;t{let n;return e=rm(e),n=null==t?Qp(null,e.length):rm(t),this.runInternalGraph(e,n)[1]}))}computeOutputShape(e){const t=ny(e);if(t.length!==this.inputLayers.length)throw new Yp(`Invalid inputShape argument ${e}: model has ${this.inputLayers.length} tensor inputs.`);const n={};for(let e=0;eparseInt(e,10))).sort(cm);if(r.length>1)for(const e of r){const t=this.nodesByDepth[e];for(const e of t){const t=e.outboundLayer;if(-1!==this.inputLayers.map((e=>e.id)).indexOf(t.id))continue;const r=[];for(let t=0;tparseInt(e,10))).sort(cm);for(const e of r){const t=this.nodesByDepth[e];for(const e of t){const t=e.outboundLayer,r=e.inputTensors,a=e.outputTensors,s=new Array;for(const e of r)e.id in n&&s.push(n[e.id]);if(s.length===r.length){let r,i,o,l,u={};if(null!=e.callArgs&&(u=e.callArgs),1===s.length){const[e,n]=s[0];null==u.mask&&(u.mask=n),o=rm(t.call(e,u)),l=rm(t.computeMask(e,n)),r=[e],i=[n]}else r=s.map((e=>e[0])),i=s.map((e=>e[1])),null==u.mask&&(u.mask=i),o=rm(t.call(r,u)),l=rm(t.computeMask(r,i));if(t.activityRegularizer)throw new Jp("LayersModel invocation with concrete Tensor value(s) in the presence of activity regularizer(s) is not supported yet.");for(let e=0;e{const e=[];for(const t of this.layers)for(let n=0;n0){const e=[];for(let n=0;n0&&e.apply(nm(n),r)}function l(e){const n=e.name,s=Ay(e,null!=t.customObjects?t.customObjects:{});s.setFastWeightInitDuringBuild(r),a[n]=s,e.inboundNodes.forEach((e=>{if(!(e instanceof Array))throw new Yp(`Corrupted configuration, expected array for nodeData: ${e}`);i(s,e)}))}const u=t.name,c=t.layers;for(const e of c)l(e);for(;!fm(s);)for(const e of c){const t=a[e.name];if(t.name in s){const e=s[t.name];delete s[t.name];for(const n of e)o(t,n)}}const h=[],f=[],d=t.inputLayers;for(const e of d){const t=e[0],n=e[1],r=e[2];em(t in a);const s=a[t].inboundNodes[n].outputTensors;h.push(s[r])}const p=t.outputLayers;for(const e of p){const t=e[0],n=e[1],r=e[2];em(t in a);const s=a[t].inboundNodes[n].outputTensors;f.push(s[r])}return new e({inputs:h,outputs:f,name:u})}get stateful(){if(this._stateful)throw new Yp("Container instance unexpectedly has _stateful = true. The statefulness of a Container is determined by the Layers it contains. Its _stateful property must remain the default false.");for(const e of this.layers)if(e.stateful)return!0;return!1}resetStates(){po((()=>{this.layers.forEach((e=>{e.stateful&&e.resetStates()}))}))}}function pb(e,t){return function(e,t,n){const r=t.length;if(null==e||Array.isArray(e)&&0===e.length)return t.map((e=>null));if(1===r)return Array.isArray(e)&&1===e.length?e:"object"==typeof e&&t[0]in e?[e[t[0]]]:[e];if(Array.isArray(e)){if(e.length!==r)throw new Error(`Provided ${n} is an array of ${e.length} element(s), but the model has ${r} outputs. Make sure a set of weights is provided for each model output.`);return e}if("object"==typeof e&&Object.keys(e).length>0&&"object"==typeof e[Object.keys(e)[0]]){const n=[];return t.forEach((t=>{t in e?n.push(e[t]):n.push(null)})),n}throw new Error(`The model has multiple (${r}) outputs, so ${n} must be either an array with ${r} elements or an object with ${t} keys. Provided ${n} not understood: ${JSON.stringify(e)}`)}(e,t,"classWeight")}async function mb(e,t,n,r){if(null!=t||null!=r)throw new Error("Support sampleWeight is not implemented yet");if(null!=n){const t=po((()=>{if(1===e.shape.length)return e.clone();if(2===e.shape.length){if(e.shape[1]>1){const t=1;return e.argMax(t)}if(1===e.shape[1])return e.reshape([e.shape[0]]);throw new Error(`Encountered unexpected last-dimension size (${e.shape[1]}) during handling of class weights. The size is expected to be >= 1.`)}throw new Error(`Unexpected rank of target (y) tensor (${e.rank}) during handling of class weights. The rank is expected to be 1 or 2.`)})),r=Array.from(await t.data());mo(t);const a=[];return r.forEach((e=>{if(null==n[e])throw new Error(`classWeight must contain all classes in the training data. The class ${e} exists in the data but not in classWeight`);a.push(n[e])})),yh(a,"float32")}return null}function gb(e,t){return Do(e,t)}function yb(e,t){let n,r;const a=t;n=a.xs,r=a.ys,Q(null!=n&&null!=r,(()=>`A Dataset iterator for fitDataset() is expected to generate objects of the form \`{xs: xVal, ys: yVal}\`, where the two values may be \`tf.Tensor\`, an array of Tensors, or a map of string to Tensor. The provided Dataset instead generates ${t}`));const s=bb("input",e.inputNames,n),i=bb("output",e.outputNames,r),o=s[0].shape[0];Q(s.length===e.inputs.length,(()=>`LayersModel has ${e.inputs.length} inputs, but the dataset provides ${s.length} inputs. (Expected input keys: ${JSON.stringify(e.inputNames)})`)),Q(i.length===e.outputs.length,(()=>`LayersModel has ${e.outputs.length} outputs, but the dataset provides ${i.length} outputs. (Expected output keys: ${JSON.stringify(e.outputNames)})`));for(let t=0;t`Batch size mismatch: input ${e.inputNames[t]} has ${s[t].shape[0]}; expected ${o} based on input ${e.inputNames[0]}.`));for(let t=0;t`Batch size mismatch: output ${e.outputNames[t]} has ${i[t].shape[0]}; expected ${o} based on input ${e.inputNames[0]}.`));return{xs:s,ys:i}}function bb(e,t,n){if(n instanceof _a)return[n];if(Array.isArray(n))return Q(n.length===t.length,(()=>`Received an array of ${n.length} Tensors, but expected ${t.length} to match the ${e} keys ${t}.`)),n;{const r=[];for(const a of t){if(null==n[a])throw new Yp(`The feature data generated by the dataset lacks the required ${e} key '${a}'.`);r.push(n[a])}return r}}function vb(e){return"function"==typeof e.iterator}function wb(e){Q(e>0&&Number.isInteger(e),(()=>`batchSize is required to be a positive integer, but got ${e}`))}function _b(e,t,n){return null==e?[null]:Array.isArray(e)?e.map((e=>eg(e,t,n-t))):eg(e,t,n-t)}function xb(e,t){return po((()=>null==e?null:Array.isArray(e)?e.map((e=>xb(e,t))):lg(e,"int32"===t.dtype?t:t.toInt())))}function kb(e,t){const n=[];let r=0,a=null;for(;r=e&&(a=e),n.push([r,a]),r=a;return n}function Eb(e){const t=[];e instanceof _a&&(e=[e]);for(let n=0;nn.push(e.id)));else if(null!=t)for(const e in t){const r=t[e];n.push(r.id)}const r=[];if(e instanceof _a)-1===n.indexOf(e.id)&&r.push(e);else if(Array.isArray(e))e.forEach((e=>{-1===n.indexOf(e.id)&&r.push(e)}));else if(null!=e)for(const t in e){const a=e[t];-1===n.indexOf(a.id)&&r.push(a)}r.forEach((e=>{e.isDisposed||e.dispose()}))}function Sb(e){return Array.isArray(e)}function Nb(e){return!function(e){return e instanceof _a}(e)&&!Sb(e)}function Ib(e,t,n,r=!0,a=""){if(null==t||0===t.length){if(null!=e){let t=!1;if(Sb(e)&&e.length>0)t=!0;else if(Nb(e)){for(const n in e)if(e.hasOwnProperty(n)){t=!0;break}}else t=!0;if(t)throw new Yp(`Error when checking model ${a} expected no data, but got ${e}`)}return[]}if(null==e)return t.map((e=>null));let s;if(Nb(e)){e=e,s=[];for(const n of t){if(null==e[n])throw new Yp(`No data provided for "${n}". Need data for each key in: ${t}`);s.push(e[n])}}else if(Sb(e)){if((e=e).length!==t.length)throw new Yp(`Error when checking model ${a}: the Array of Tensors that you are passing to your model is not the size the model expected. Expected to see ${t.length} Tensor(s), but instead got the following list of Tensor(s): ${e}`);s=e}else{if(e=e,t.length>1)throw new Yp(`The model ${a} expects ${t.length} Tensor(s), but only received one Tensor. Found: Tensor with shape ${e.shape}`);s=[e]}if(s=Eb(s),null!=n)for(let e=0;e=0&&o!==l)throw new Yp(`Error when checking ${a}: expected ${t[e]} to have shape [${n[e]}], but got array with shape [${i.shape}].`)}}return s}function Ab(e,t,n,r=!0,a=""){let s;if(Array.isArray(e)){if(e.length!==t.length)throw new Yp(`Error when checking model ${a}: the Array of Tensors that you are passing to your model is not the size the the model expected. Expected to see ${t.length} Tensor(s), but instead got ${e.length} Tensors(s).`);s=e}else{if(t.length>1)throw new Yp(`The model expects ${t.length} ${a} Tensors, but only received one Tensor. Found: array with shape ${JSON.stringify(e.shape)}.`);s=[e]}if(null!=n)for(let e=0;e1||1===e.length&&e[0].inboundLayers.length>1){t=!1;break}r.push(...e)}if(t)for(const n of e.layers){let e=!1;for(const a of n.inboundNodes)if(-1!==r.indexOf(a)){if(e){t=!1;break}e=!0}if(!t)break}return t}(e),s=["Layer (type)","Output shape","Param #"];let i;if(a?(t=t||65,n=n||[.45,.85,1]):(t=t||98,n=n||[.33,.55,.67,1]),n[n.length-1]<=1&&(n=n.map((e=>Math.floor(t*e)))),!a){s.push("Receives inputs"),i=[];for(const t in e.nodesByDepth)i.push(...e.nodesByDepth[t])}r("_".repeat(t)),Qy(s,n,r),r("=".repeat(t));const o=e.layers;for(let e=0;eHf.adagrad(.01),Adadelta:()=>Hf.adadelta(1,.95,Xp()),Adam:()=>Hf.adam(.001,.9,.999,Xp()),Adamax:()=>Hf.adamax(.002,.9,.999,Xp(),0),RMSProp:()=>Hf.rmsprop(.001,.9,0,Xp()),SGD:()=>Hf.sgd(.01)};if(t.adagrad=t.Adagrad,t.adadelta=t.Adadelta,t.adam=t.Adam,t.adamax=t.Adamax,t.rmsprop=t.RMSProp,t.sgd=t.SGD,e in t)return t[e]();throw new Yp(`Unknown Optimizer ${e}`)}(e.optimizer),this.isOptimizerOwned=!0;else{if(!(e.optimizer instanceof Uo))throw new Yp("User-defined optimizer must be an instance of tf.Optimizer.");this.optimizer_=e.optimizer,this.isOptimizerOwned=!1}let t=[];if(Array.isArray(e.loss)||"string"==typeof e.loss||"function"==typeof e.loss)if(Array.isArray(e.loss)){if(e.loss.length!==this.outputs.length)throw new Yp(`When passing an Array as loss, it should have one entry per model output. The model has ${this.outputs.length} output(s), but you passed loss=${e.loss}.`);const n=e.loss;t=n.map((e=>Ly(e)))}else{const n=Ly(e.loss);this.outputs.forEach((e=>{t.push(n)}))}else{e.loss=e.loss;for(const t in e.loss)if(-1===this.outputNames.indexOf(t))throw new Yp(`Unknown entry in loss dictionary: "${t}". Only expected the following keys: ${this.outputNames}`);for(const n of this.outputNames)null==e.loss[n]&&console.warn(`Output "${n}" is missing from loss dictionary. We assume this was done on purpose, and we will not be expecting data to be passed to ${n} during training`),t.push(Ly(e.loss[n]))}this.lossFunctions=t,this.feedOutputNames=[],this.feedOutputShapes=[],this.feedLossFns=[];for(let e=0;e{for(let e=0;e1&&(this.metricsTensors.push([t,e]),this.metricsNames.push(this.outputNames[e]+"_loss"))}}));const r=function(e,t){if(null==e||Array.isArray(e)&&0===e.length)return t.map((e=>[]));let n;if("string"==typeof e||"function"==typeof e)n=[e];else{if(!Array.isArray(e)&&"object"!=typeof e)throw new TypeError(`Type of metrics argument not understood. Expected an string,function, Array, or Object, found: ${e}`);n=e}if(Array.isArray(n))return t.map((e=>n));{const e=[];for(const r of t){let t=n.hasOwnProperty(r)?n[r]:[];Array.isArray(t)||(t=[t]),e.push(t)}return e}}(e.metrics,this.outputNames),a=(e,t,n)=>{this.outputNames.length>1&&(t=this.outputNames[e]+"_"+t),this.metricsNames.push(t),this.metricsTensors.push([n,e])};Um("metric",(()=>{for(let e=0;e{let n,r,s;for(const i of t){if("string"==typeof i&&-1!==["accuracy","acc","crossentropy","ce"].indexOf(i)){const t=this.internalOutputShapes[e];let a;1===t[t.length-1]||this.lossFunctions[e]===By?-1!==["accuracy","acc"].indexOf(i)?r=zy:-1!==["crossentropy","ce"].indexOf(i)&&(r=jy):this.lossFunctions[e]===My?-1!==["accuracy","acc"].indexOf(i)?r=Hy:-1!==["crossentropy","ce"].indexOf(i)&&(r=Xy):-1!==["accuracy","acc"].indexOf(i)?r=Wy:-1!==["crossentropy","ce"].indexOf(i)&&(r=Gy),-1!==["accuracy","acc"].indexOf(i)?a="acc":-1!==["crossentropy","ce"].indexOf(i)&&(a="ce"),s=r,n=""+a}else{const e=qy(i);s=e,n=""+Yy(i)}let t;Um(n,(()=>{t=s})),a(e,n,t)}})(r[e])})),this.collectedTrainableWeights=this.trainableWeights}checkTrainableWeightsConsistency(){null!=this.collectedTrainableWeights&&this.trainableWeights.length!==this.collectedTrainableWeights.length&&console.warn("Discrepancy between trainableweights and collected trainable weights. Did you set `model.trainable` without calling `model.compile()` afterwards?")}evaluate(e,t,n={}){const r=null==n.batchSize?32:n.batchSize;wb(r);const a=this.standardizeUserDataXY(e,t,!0,r);try{const s=a[0].concat(a[1]);this.makeTestFunction();const i=this.testFunction;return nm(this.testLoop(i,s,r,n.verbose,n.steps))}finally{Cb(a[0],e),Cb(a[1],t)}}async evaluateDataset(e,t){return this.makeTestFunction(),async function(e,t,n){const r=null!=(n=n||{}).batches,a=e.testFunction;let s=[];if(n.verbose>0)throw new Jp("Verbose mode is not implemented yet.");Q(!r||n.batches>0&&Number.isInteger(n.batches),(()=>`Test loop expects \`batches\` to be a positive integer, but received ${JSON.stringify(n.batches)}`));const i="function"==typeof t.next?t:await t.iterator();let o=0,l=0;for(;!r||l{if(t.value){const{xs:n,ys:r}=yb(e,t.value),i=n.concat(r),u=po((()=>a(i)));if(mo(i),0===l)for(let e=0;eNo(s[e],Do(c,t)))),l>0&&mo(n)}mo(u),o+=c,++l}return s})),t.done){r&&console.warn(`Your dataset iterator ran out of data during evaluateDataset(). Interrupting evalution. Make sure that your dataset can generate at least \`batches\` batches (in this case, ${n.batches} batches). You may need to use the repeat() function when building your dataset.`);break}}for(let e=0;ee.name));for(let r=0;r0){const n=[];throw t.forEach(((t,r)=>{null==t&&n.push(e[r])})),new Yp(`Cannot find SymbolicTensors for output name(s): ${JSON.stringify(n)}`)}return t}predictLoop(e,t=32,n=!1){return po((()=>{const r=this.checkNumSamples(e);if(n)throw new Jp("Verbose predictLoop() is not implemented yet.");const a=kb(r,t),s=this.outputs.map((e=>[]));for(let t=0;t{const n=a[t][0],r=a[t][1],s=_b(e,n,r),i=[];if(Array.isArray(s))for(let e=0;es[t].push(e)));return nm(s.map((e=>Fl(e,0))))}))}predict(e,t={}){const n=Eb(e);Ab(n,this.inputNames,this.feedInputShapes,!1);try{const r=null==t.batchSize?32:t.batchSize;return wb(r),this.predictLoop(n,r)}finally{Cb(n,e)}}predictOnBatch(e){Ab(e,this.inputNames,this.feedInputShapes,!0);const t=(Array.isArray(e)?e[0]:e).shape[0];return this.predictLoop(e,t)}standardizeUserDataXY(e,t,n=!0,r){if(null==this.optimizer_)throw new qp("You must compile a model before training/testing. Use LayersModel.compile(modelCompileArgs).");const a=[];for(let e=0;ee.shape[0])));r.sort();const a=hm(t.map((e=>e.shape[0])));if(a.sort(),r.length>1)throw new Yp(`All input Tensors (x) should have the same number of samples. Got array shapes: ${JSON.stringify(e.map((e=>e.shape)))}`);if(a.length>1)throw new Yp(`All target Tensors (y) should have the same number of samples. Got array shapes: ${JSON.stringify(t.map((e=>e.shape)))}`);if(r.length>0&&a.length>0&&!se(r,a))throw new Yp(`Input Tensors should have the same number of samples as target Tensors. Found ${r[0]} input sample(s) and ${a[0]} target sample(s).`)}(e=Ib(e,this.feedInputNames,this.feedInputShapes,!1,"input"),t=Ib(t,this.feedOutputNames,a,!1,"target")),function(e,t,n){const r=[Ty,By,Oy];for(let a=0;a0&&e[0].shape[0]%r!=0)throw new Yp(`In a stateful network, you should only pass inputs with a number of samples that is divisible by the batch size ${r}. Found: ${e[0].shape[0]} sample(s).`);return[e,t]}async standardizeUserData(e,t,n,r,a=!0,s){const[i,o]=this.standardizeUserDataXY(e,t,a,s);if(null!=n)throw new Error("sample weight is not supported yet.");let l=null;if(null!=r){const e=pb(r,this.outputNames);l=[];for(let t=0;t{const s=this.checkNumSamples(t,n,a,"steps"),i=[];if(r>0)throw new Jp("Verbose mode is not implemented yet.");if(null!=a)throw new Jp("steps mode in testLoop() is not implemented yet");{const r=kb(s,n),a=yh(Jm(0,s));for(let n=0;n1&&(a+=`_${tm(e.slice(0,n),r)}`),t.push(a)}return t}makeTrainFunction(){return e=>{const t=[],n=e.slice(0,this.inputs.length),r=e.slice(this.inputs.length,this.inputs.length+this.outputs.length),a=e.slice(this.inputs.length+this.outputs.length,this.inputs.length+2*this.outputs.length),s=[],i=this.collectedTrainableWeights.map((e=>e.read()));return[this.optimizer_.minimize((()=>{const e=[];for(let t=0;t1&&e{l=No(l,e)})),l}),!0,i)].concat(s)}}makeTestFunction(){this.testFunction=e=>po((()=>{const t=[];let n;const r=e.slice(0,this.inputs.length),a=e.slice(this.inputs.length,this.inputs.length+this.outputs.length),s=[];for(let e=0;e0){if(m=!0,2!==r.validationData.length)throw 3===r.validationData.length?new Jp("validationData including sample weights is not supported yet."):new Yp(`When passing validation data, it must contain 2 (valX, valY) or 3 (valX, valY, valSampleWeight) items; ${r.validationData} is invalid.`);i=r.validationData[0],o=r.validationData[1];const t=!0,n=await e.standardizeUserData(i,o,null,null,t,h);l=n[0],u=n[1],p=l.concat(u)}else if(null!=r.validationSplit&&r.validationSplit>0&&r.validationSplit<1){m=!0;const e=Math.floor(a[0].shape[0]*(1-r.validationSplit)),t=a[0].shape[0];l=_b(a,e,t),a=_b(a,0,e),u=_b(s,e,t),s=_b(s,0,e),p=l.concat(u)}else null!=r.validationSteps&&(m=!0);const g=a.concat(s).concat(c);e.checkTrainableWeightsConsistency();const y=e.makeTrainFunction(),b=e.getDedupedMetricsNames();let v,w;m?(e.makeTestFunction(),v=e.testFunction,w=b.slice().concat(b.map((e=>"val_"+e)))):(v=null,p=[],w=b.slice());const _=Sy(r.callbacks,r.yieldEvery);return await async function(e,t,n,r,a,s,i,o,l,u,c,h,f,d,p){null==a&&(a=32),null==s&&(s=1),null==c&&(c=!0),null==f&&(f=0);let m=!1;null!=l&&null!=u&&(m=!0);const g=e.checkNumSamples(n,a,d,"steps_per_epoch");let y;null!=g&&(y=Jm(0,g)),null==i&&(i=1);const{callbackList:b,history:v}=Iy(o,i,s,f,g,d,a,m,h);b.setModel(e),e.history=v,await b.onTrainBegin(),e.stopTraining_=!1;for(let i=f;i{const f=o[c][0],d=o[c][1],p=eg(i,f,d-f);h.batch=c,h.size=d-f;const g=xb(n,p),y=t(g);for(let e=0;e"You must compile a model before training/testing. Use LayersModel.compile(modelCompileConfig).")),Q(null!=n,(()=>"For fitDataset(), the 2nd argument (config) is required, but it is not provided in this call.")),Q(null!=n.epochs&&n.epochs>0&&Number.isInteger(n.epochs),(()=>`For fitDataset(), config.epochs is expected to be a positive integer, but got ${n.epochs}`)),Q(!r||n.batchesPerEpoch>0&&Number.isInteger(n.batchesPerEpoch),(()=>`For fitDataset(), config.batchesPerEpoch is expected to be a positive integer if specified, but got ${n.batchesPerEpoch}`)),Q(null==n.validationSplit,(()=>"`validationSplit` is not supported by `fitDataset()`. Use validationData instead.")),e.isTraining)throw new Error("Cannot start training because another fit() call is ongoing.");e.isTraining=!0;try{const a=null!=n.validationData;let s,i;if(a)if(vb(n.validationData))Q(null==n.validationBatches||n.validationBatches>0&&Number.isInteger(n.validationBatches),(()=>`For fitDataset() with dataset-based validation, config.validationBatches is expected not to be provided, or to be a positive integer, but got ${n.validationBatches}`));else{const e=function(e){if(3===e.length)throw new Jp("Validation with sample weights is not implemented yet.");return{xs:e[0],ys:e[1]}}(n.validationData);s=e.xs,i=e.ys}const o=e.makeTrainFunction(),l=e.getDedupedMetricsNames();let u;u=a?l.slice().concat(l.map((e=>"val_"+e))):l.slice();const c=Sy(n.callbacks,n.yieldEvery),h=null==n.verbose?1:n.verbose,{callbackList:f,history:d}=Iy(c,h,n.epochs,null,null,function(e,t){let n=null;return null!=t.batchesPerEpoch?n=t.batchesPerEpoch:Number.isFinite(e.size)&&(n=e.size),n}(t,n),null,a,u);f.setModel(e),e.history=d,await f.onTrainBegin(),e.stopTraining_=!1;let p=null==n.initialEpoch?0:n.initialEpoch,m=await t.iterator();for(;p=n.batchesPerEpoch:t.done){if(a){let t;t=vb(n.validationData)?rm(await e.evaluateDataset(n.validationData,{batches:n.validationBatches})):rm(e.evaluate(s,i,{batchSize:null==n.validationBatchSize?32:n.validationBatchSize,verbose:0}));for(let n=0;nam(e)))}else{const t=Object.keys(this.loss);e={};const n=this.loss;for(const r of t){if("string"!=typeof n[r])throw new Error("Serialization of non-string loss is not supported.");e[r]=am(n[r])}}return e}getMetricIdentifiers(){if("string"==typeof this.metrics||"function"==typeof this.metrics)return[am(Yy(this.metrics))];if(Array.isArray(this.metrics))return this.metrics.map((e=>am(Yy(e))));{const e={};for(const t in this.metrics)e[t]=am(Yy(this.metrics[t]));return e}}getTrainingConfig(){return{loss:this.getLossIdentifiers(),metrics:this.getMetricIdentifiers(),optimizer_config:{class_name:this.optimizer.getClassName(),config:this.optimizer.getConfig()}}}loadTrainingConfig(e){if(null!=e.weighted_metrics)throw new Error("Loading weight_metrics is not supported yet.");if(null!=e.loss_weights)throw new Error("Loading loss_weights is not supported yet.");if(null!=e.sample_weight_mode)throw new Error("Loading sample_weight_mode is not supported yet.");const t=Ay(rb(e.optimizer_config));let n,r;if("string"==typeof e.loss)n=sm(e.loss);else if(Array.isArray(e.loss))n=e.loss.map((e=>sm(e)));else if(null!=e.loss){n={};for(const t in e.loss)n[t]=sm(e.loss[t])}if(Array.isArray(e.metrics))r=e.metrics.map((e=>sm(e)));else if(null!=e.metrics){r={};for(const t in e.metrics)r[t]=sm(e.metrics[t])}this.compile({loss:n,metrics:r,optimizer:t})}async save(e,t){if("string"==typeof e){const t=ms(e);if(0===t.length)throw new Yp(`Cannot find any save handlers for URL '${e}'`);if(t.length>1)throw new Yp(`Found more than one (${t.length}) save handlers for URL '${e}'`);e=t[0]}if(null==e.save)throw new Yp("LayersModel.save() cannot proceed because the IOHandler provided does not have the `save` attribute defined.");const n=await rs(this.getNamedWeights(t)),r={modelTopology:this.toJSON(null,!1),format:"layers-model",generatedBy:`TensorFlow.js tfjs-layers v${sb}`,convertedBy:null};if(null!=t&&t.includeOptimizer&&null!=this.optimizer){r.trainingConfig=this.getTrainingConfig();const e="optimizer",{data:t,specs:a}=await rs(await this.optimizer.getWeights(),e);n.specs.push(...a),n.data=ls([n.data,t])}if(null!=this.userDefinedMetadata){const e=!0;Jy(this.userDefinedMetadata,this.name,e),r.userDefinedMetadata=this.userDefinedMetadata}return r.weightData=n.data,r.weightSpecs=n.specs,e.save(r)}setUserDefinedMetadata(e){Jy(e,this.name),this.userDefinedMetadata=e}getUserDefinedMetadata(){return this.userDefinedMetadata}}Db.className="Model",Gi(Db);class Tb extends Db{}async function Fb(e,t){"modelTopology"in e||(e={modelTopology:e});let n=(e=e).modelTopology;null!=n.model_config&&(n=n.model_config);const r=Ay(rb(n),t);if(null!=e.weightsManifest){const t=await ri(e.weightsManifest,e.pathPrefix,r.weights.map((e=>e.originalName))),n={};for(const e of r.weights)n[e.originalName]=t[e.originalName];r.loadWeights(n),mo(t)}return r}Tb.className="Functional",Gi(Tb);class Rb extends Db{constructor(e){if(super({inputs:[],outputs:[]}),e=e||{},this.trainable=!0,this.built=!1,this.name=null!=e.name?e.name:ey("sequential_"),null!=e.layers)for(const t of e.layers)this.add(t)}checkShape(e){if(e.inboundNodes[0].outputTensors[0].shape.some((e=>e<0)))throw new Yp(`Negative dimension size caused by adding layer ${e.name} with input shape [${e.inboundNodes[0].inputTensors[0].shape}]`)}add(e){const t=e instanceof Rb||e instanceof Db;let n;if(t){if(n=e,1!==n.outputs.length)throw new Yp("All layers in a Sequential model should have a single output tensor. For multi-output layers, use the functional API.");if(1!==n.inputs.length)throw new Yp("All layers in a Sequential model should have a single input tensor. For multi-input layers, use the functional API.")}if(0===this.outputs.length){if(0===e.inboundNodes.length){if(null==e.batchInputShape)throw new Yp("The first layer in a Sequential model must get an `inputShape` or `batchInputShape` argument.");const t=yy({batchShape:e.batchInputShape,dtype:e.dtype,name:e.name+"_input"});e.apply(t)}if(t)this.outputs=n.outputs,this.inputs=n.inputs;else{if(1!==e.inboundNodes.length)throw new Yp(`A layer added to a Sequential model must not already be connected somewhere else. LayersModel received layer ${e.name} which has ${e.inboundNodes.length} pre-existing inbound connections.`);if(1!==e.inboundNodes[0].outputTensors.length)throw new Yp("All layers in a Sequential model should have a single output tensor. For multi-output layers, use the functional API.");this.checkShape(e),this.outputs=[e.inboundNodes[0].outputTensors[0]],this.inputs=my(this.outputs[0])}this.inboundNodes=[],new fy({outboundLayer:this,inboundLayers:[],nodeIndices:[],tensorIndices:[],inputTensors:this.inputs,outputTensors:this.outputs,inputMasks:Qp(null,this.inputs.length),outputMasks:[null],inputShapes:this.inputs.map((e=>e.shape)),outputShapes:this.outputs[0].shape})}else{const t=e.apply(this.outputs[0]);if(Array.isArray(t))throw new TypeError("All layers in a Sequential model should have a single output tensor. For multi-output layers, use the functional API.");this.checkShape(e),this.outputs=[t],this.inboundNodes[0].outputTensors=this.outputs,this.inboundNodes[0].outputShapes=[this.outputs[0].shape]}this.layers.push(e),this.built=!1}pop(){if(0===this.layers.length)throw new TypeError("There are no layers in the model.");if(this.layers.pop(),0===this.layers.length)this.outputs=[],this.inboundNodes=[],this.outboundNodes=[];else{const e=this.layers.length-1;this.layers[e].outboundNodes=[],this.outputs=[this.layers[e].output],this.inboundNodes[0].outputTensors=this.outputs,this.inboundNodes[0].outputShapes=[this.outputs[0].shape]}}call(e,t){return null==this.model&&this.build(),this.model.call(e,t)}build(e){if(ay(e),0===this.inputs.length||0===this.outputs.length)throw new TypeError("Sequential model cannot be built: model is empty. Add some layers first.");this.model=new Db({inputs:this.inputs,outputs:this.outputs[0],name:this.name+"_model"}),this.model.trainable=this.trainable,this.supportsMasking=this.model.supportsMasking,this.inputLayers=this.model.inputLayers,this.inputLayersNodeIndices=this.model.inputLayersNodeIndices,this.inputLayersTensorIndices=this.model.inputLayersTensorIndices,this.outputLayers=this.model.outputLayers,this.outputLayersNodeIndices=this.model.outputLayersNodeIndices,this.outputLayersTensorIndices=this.model.outputLayersTensorIndices,this.nodesByDepth=this.model.nodesByDepth,this.containerNodes=this.model.containerNodes,this.outputNames=this.model.outputNames,this.inputNames=this.model.inputNames,this.built=!0}countParams(){return this.built||this.build(),super.countParams()}summary(e,t,n=console.log){this.built||this.build(),super.summary(e,t,n)}setWeights(e){null==this.model&&this.build(),this.model.setWeights(e)}evaluate(e,t,n={}){if(!this.built)throw new qp("The model needs to be compiled before being used.");return this.model.evaluate(e,t,n)}async evaluateDataset(e,t){if(!this.built)throw new qp("The model needs to be compiled before being used.");return this.model.evaluateDataset(e,t)}predict(e,t={}){return null==this.model&&this.build(),this.model.predict(e,t)}predictOnBatch(e){return null==this.model&&this.build(),this.model.predictOnBatch(e)}compile(e){this.build(),this.model.compile(e),this.optimizer_=this.model.optimizer,this.isOptimizerOwned=this.model.isOptimizerOwned,this.loss=this.model.loss,this.metrics=this.model.metrics,this.metricsTensors=this.model.metricsTensors,this.metricsNames=this.model.metricsNames}get optimizer(){return null==this.model?void 0:this.model.optimizer}set optimizer(e){this.model.optimizer=e}async fit(e,t,n={}){if(!this.built)throw new qp("The model needs to be compiled before being used.");return this.model.fit(e,t,n)}async fitDataset(e,t){if(!this.built)throw new qp("The model needs to be compiled before being used.");return this.model.fitDataset(e,t)}async trainOnBatch(e,t){return this.model.trainOnBatch(e,t)}static fromConfig(e,t,n={},r=!1){let a,s={};if(t instanceof Array){if(null==t[0].className||"Merge"===t[0].className)throw new Yp("Legacy serialization format not supported yet.");a=t}else Q(null!=t.layers,(()=>"When the config data for a Sequential model is not an Array, it must be an Object that contains the 'layers' field.")),a=t.layers,delete t.layers,s=t;const i=new e(s);if(!(i instanceof Rb))throw new Jp(`Sequential.fromConfig called on non-Sequential input: ${i}`);for(const e of a){const t=Ay(e,void 0,r);r&&t.setFastWeightInitDuringBuild(!0),i.add(t)}return i}set stopTraining(e){if(null==this.model)throw new Yp("Cannot set the stopTraining property of a sequential model before it is compiled.");this.model.stopTraining=e}get stopTraining(){if(null==this.model)throw new Yp("Cannot get the stopTraining property of a sequential model before it is compiled.");return this.model.stopTraining}getConfig(){const e=[];for(const t of this.layers){const n={};n.className=t.getClassName(),n.config=t.getConfig(),e.push(n)}return{name:this.name,layers:e}}}function Ob(e){return new Db(e)}function Mb(e){return new Rb(e)}function Bb(e,t){return null==t&&(t={}),async function(e,t){if(null==t&&(t={}),"string"==typeof e){const n=gs(e,t);if(0===n.length)n.push(ui(e,t));else if(n.length>1)throw new Yp(`Found more than one (${n.length}) load handlers for URL '${e}'`);e=n[0]}return async function(e,t,n){if(null==n&&(n={}),null==e.load)throw new Yp("Cannot proceed with model loading because the IOHandler provided does not have the `load` method implemented.");const r=await e.load();let a=r.modelTopology;null!=a.model_config&&(a=a.model_config);const s=null==n.strict||n.strict,i=null!=r.weightData&&null!=r.weightSpecs&&s,o=Ay(rb(a),void 0,i),l=r.trainingConfig;if(null!=l&&o.loadTrainingConfig(l),null!=r.userDefinedMetadata&&o.setUserDefinedMetadata(r.userDefinedMetadata),null!=r.weightData){if(null==r.weightSpecs)throw new Yp("LayersModel artifacts contains weight data, but not weight specs. Therefore loading of weights cannot proceed.");const{modelWeights:e,optimizerWeights:t}=function(e,t){const n=as(e,t),r={},a=[];return t.forEach((e=>{"optimizer"===e.group?a.push({name:e.name,tensor:n[e.name]}):r[e.name]=n[e.name]})),{modelWeights:r,optimizerWeights:a}}(r.weightData,r.weightSpecs);o.loadWeights(e,s),null!=o.optimizer&&t.length>0&&await o.optimizer.setWeights(t),mo(e),mo(t.map((e=>e.tensor)))}return o}(e,0,t)}(e,t)}function $b(e){return yy(e)}function Pb(e,t){Ny.registerCallbackConstructor(e,t)}Rb.className="Sequential",Gi(Rb);class Lb extends ji{getConfig(){return{}}}class zb extends Lb{apply(e,t=1){return function(e,t=1){if(1!==t)throw new Jp(`Support for alpha values other than 1 (${t}) is not implemented yet.`);return gu(e)}(e,t)}}zb.className="elu",Gi(zb);class Wb extends Lb{apply(e){return qc(e)}}Wb.className="selu",Gi(Wb);class Ub extends Lb{apply(e){return zc(e)}}Ub.className="relu",Gi(Ub);class Vb extends Lb{apply(e){return po((()=>hc(6,zc(e))))}}Vb.className="relu6",Gi(Vb);class jb extends Lb{apply(e){return e}}jb.className="linear",Gi(jb);class Hb extends Lb{apply(e){return Rl(e)}}Hb.className="sigmoid",Gi(Hb);class Gb extends Lb{apply(e){return function(e){return po((()=>{const t=No(.5,Do(.2,e));return Hl(t,0,1)}))}(e)}}Gb.className="hardSigmoid",Gi(Gb);class Xb extends Lb{apply(e){return Lu(e)}}Xb.className="softplus",Gi(Xb);class Kb extends Lb{apply(e){return function(e){return po((()=>Ao(e,qo(e).add(1))))}(e)}}Kb.className="softsign",Gi(Kb);class qb extends Lb{apply(e){return Ml(e)}}qb.className="tanh",Gi(qb);class Yb extends Lb{apply(e,t=-1){return sh(e,t)}}Yb.className="softmax",Gi(Yb);class Jb extends Lb{apply(e,t=-1){return Vu(e,t)}}Jb.className="logSoftmax",Gi(Jb);class Zb extends Lb{apply(e,t=1){return po((()=>Rl(e.mul(t)).mul(e)))}}Zb.className="swish",Gi(Zb);class Qb extends Lb{apply(e){return po((()=>Do(e,Ml(Lu(e)))))}}function ev(e){return e.getClassName()}function tv(e,t={}){return um(e,Hi.getMap().classNameMap,t,"activation")}function nv(e){if(null==e){return tv({className:"linear",config:{}})}if("string"==typeof e){const t={};return t.className=e,t.config={},tv(t)}return e instanceof Lb?e:tv(e)}function rv(e){if(null!=e&&"object"!=typeof e)throw new Error(`Argument to L1L2 regularizer's constructor is expected to be an object, but received: ${e}`)}Qb.className="mish",Gi(Qb);class av extends ji{}class sv extends av{constructor(e){super(),rv(e),this.l1=null==e||null==e.l1?.01:e.l1,this.l2=null==e||null==e.l2?.01:e.l2,this.hasL1=0!==this.l1,this.hasL2=0!==this.l2}apply(e){return po((()=>{let t=oc([1]);return this.hasL1&&(t=No(t,Uu(Do(this.l1,qo(e))))),this.hasL2&&(t=No(t,Uu(Do(this.l2,ug(e))))),t.asScalar()}))}getConfig(){return{l1:this.l1,l2:this.l2}}static fromConfig(e,t){return new e({l1:t.l1,l2:t.l2})}}sv.className="L1L2",Gi(sv);const iv={l1l2:"L1L2"};function ov(e){return om(e)}function lv(e,t={}){return um(e,Hi.getMap().classNameMap,t,"regularizer")}function uv(e){return null==e?null:"string"==typeof e?lv({className:e in iv?iv[e]:e,config:{}}):e instanceof av?e:lv(e)}class cv extends py{constructor(e){super(null==e?{}:e),this.supportsMasking=!0,null!=e&&(this.maxValue=e.maxValue)}call(e,t){e=ry(e);let n=zc(e);return null!=this.maxValue&&(n=Hl(n,0,this.maxValue)),n}computeOutputShape(e){return e}getConfig(){const e={maxValue:this.maxValue},t=super.getConfig();return Object.assign(e,t),e}}cv.className="ReLU",Gi(cv);class hv extends py{constructor(e){super(null==e?{}:e),this.DEFAULT_ALPHA=.3,null==e&&(e={}),this.alpha=null==e.alpha?this.DEFAULT_ALPHA:e.alpha}call(e,t){const n=ry(e);return Tu(n,this.alpha)}computeOutputShape(e){return e}getConfig(){const e={alpha:this.alpha},t=super.getConfig();return Object.assign(e,t),e}}hv.className="LeakyReLU",Gi(hv);class fv extends py{constructor(e){if(super(null==e?{}:e),this.DEFAULT_ALPHA_INITIALIZER="zeros",null==e&&(e={}),this.supportsMasking=!0,this.alphaInitializer=Mg(e.alphaInitializer||this.DEFAULT_ALPHA_INITIALIZER),this.alphaRegularizer=uv(e.alphaRegularizer),this.alphaConstraint=Nm(e.alphaConstraint),null==e.sharedAxes)this.sharedAxes=null;else if(Array.isArray(e.sharedAxes))this.sharedAxes=e.sharedAxes;else{if("number"!=typeof e.sharedAxes)throw new Yp(`Expected sharedAxes to be a number or an array of numbers, but got ${e.sharedAxes}`);this.sharedAxes=[e.sharedAxes]}}build(e){const t=(e=ay(e)).slice(1);if(null!=this.sharedAxes)for(const e of this.sharedAxes)t[e-1]=1;this.alpha=this.addWeight("alpha",t,"float32",this.alphaInitializer,this.alphaRegularizer,!0,this.alphaConstraint);const n={};if(null!=this.sharedAxes)for(let t=1;t(Pm(t),"channelsFirst"===t?gi(e,[0,2,3,1]):e)))}function wv(e,t){return po((()=>(Pm(t),"channelsFirst"===t?gi(e,[0,2,3,4,1]):e)))}function _v(e,t,n,r=[1,1],a="valid",s,i,o=null){return po((()=>{if(null==s&&(s="channelsLast"),Pm(s),3!==e.rank&&4!==e.rank)throw new Yp(`conv2dWithBiasActivation expects input to be of rank 3 or 4, but received ${e.rank}.`);if(3!==t.rank&&4!==t.rank)throw new Yp(`conv2dWithBiasActivation expects kernel to be of rank 3 or 4, but received ${e.rank}.`);let l=vv(e,s);if("causal"===a)throw new Jp("The support for CAUSAL padding mode in conv1dWithBias is not implemented yet.");return l=Gh({x:l,filter:t,strides:r,pad:"same"===a?"same":"valid",dilations:i,dataFormat:"NHWC",bias:n,activation:o}),"channelsFirst"===s&&(l=gi(l,[0,3,1,2])),l}))}mv.className="Softmax",Gi(mv);class xv extends py{constructor(e,t){if(super(t),this.bias=null,this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_BIAS_INITIALIZER="zeros",xv.verifyArgs(t),this.rank=e,mm(this.rank,"rank"),1!==this.rank&&2!==this.rank&&3!==this.rank)throw new Jp(`Convolution layer for rank other than 1, 2, or 3 (${this.rank}) is not implemented yet.`);if(this.kernelSize=gv(t.kernelSize,e,"kernelSize"),this.strides=gv(null==t.strides?1:t.strides,e,"strides"),this.padding=null==t.padding?"valid":t.padding,Lm(this.padding),this.dataFormat=null==t.dataFormat?"channelsLast":t.dataFormat,Pm(this.dataFormat),this.activation=nv(t.activation),this.useBias=null==t.useBias||t.useBias,this.biasInitializer=Mg(t.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.biasConstraint=Nm(t.biasConstraint),this.biasRegularizer=uv(t.biasRegularizer),this.activityRegularizer=uv(t.activityRegularizer),this.dilationRate=gv(null==t.dilationRate?1:t.dilationRate,e,"dilationRate"),1===this.rank&&Array.isArray(this.dilationRate)&&1!==this.dilationRate.length)throw new Yp(`dilationRate must be a number or an array of a single number for 1D convolution, but received ${JSON.stringify(this.dilationRate)}`);if(2===this.rank){if("number"==typeof this.dilationRate)this.dilationRate=[this.dilationRate,this.dilationRate];else if(2!==this.dilationRate.length)throw new Yp(`dilationRate must be a number or array of two numbers for 2D convolution, but received ${JSON.stringify(this.dilationRate)}`)}else if(3===this.rank)if("number"==typeof this.dilationRate)this.dilationRate=[this.dilationRate,this.dilationRate,this.dilationRate];else if(3!==this.dilationRate.length)throw new Yp(`dilationRate must be a number or array of three numbers for 3D convolution, but received ${JSON.stringify(this.dilationRate)}`)}static verifyArgs(e){if(em("kernelSize"in e,"required key 'kernelSize' not in config"),"number"!=typeof e.kernelSize&&!pm(e.kernelSize,"number",1,3))throw new Yp(`BaseConv expects config.kernelSize to be number or number[] with length 1, 2, or 3, but received ${JSON.stringify(e.kernelSize)}.`)}getConfig(){const e={kernelSize:this.kernelSize,strides:this.strides,padding:this.padding,dataFormat:this.dataFormat,dilationRate:this.dilationRate,activation:ev(this.activation),useBias:this.useBias,biasInitializer:Og(this.biasInitializer),biasRegularizer:ov(this.biasRegularizer),activityRegularizer:ov(this.activityRegularizer),biasConstraint:Cm(this.biasConstraint)},t=super.getConfig();return Object.assign(e,t),e}}class kv extends xv{constructor(e,t){super(e,t),this.kernel=null,kv.verifyArgs(t),this.filters=t.filters,mm(this.filters,"filters"),this.kernelInitializer=Mg(t.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.kernelConstraint=Nm(t.kernelConstraint),this.kernelRegularizer=uv(t.kernelRegularizer)}build(e){e=ay(e);const t="channelsFirst"===this.dataFormat?1:e.length-1;if(null==e[t])throw new Yp(`The channel dimension of the input should be defined. Found ${e[t]}`);const n=e[t],r=this.kernelSize.concat([n,this.filters]);this.kernel=this.addWeight("kernel",r,null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.useBias&&(this.bias=this.addWeight("bias",[this.filters],null,this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint)),this.inputSpec=[{ndim:this.rank+2,axes:{[t]:n}}],this.built=!0}call(e,t){return po((()=>{let t;e=ry(e);const n=null==this.bias?null:this.bias.read(),r=ym(this.activation.getClassName());if(null!=r&&2===this.rank)t=_v(e,this.kernel.read(),n,this.strides,this.padding,this.dataFormat,this.dilationRate,r);else{if(1===this.rank)t=function(e,t,n,r=1,a="valid",s,i=1){return po((()=>{if(null==s&&(s="channelsLast"),Pm(s),3!==e.shape.length)throw new Yp(`The input of a conv1dWithBias operation should be 3, but is ${e.shape.length} instead.`);if(3!==t.shape.length)throw new Yp(`The kernel for a conv1dWithBias operation should be 3, but is ${t.shape.length} instead`);if(null!=n&&1!==n.shape.length)throw new Yp(`The bias for a conv1dWithBias operation should be 1, but is ${t.shape.length} instead`);if("channelsFirst"===s&&(e=gi(e,[0,2,1])),"causal"===a)throw new Jp("The support for CAUSAL padding mode in conv1dWithBias is not implemented yet.");let o=Jl(e,t,r,"same"===a?"same":"valid","NWC",i);return null!=n&&(o=hg(o,n)),o}))}(e,this.kernel.read(),n,this.strides[0],this.padding,this.dataFormat,this.dilationRate[0]);else if(2===this.rank)t=_v(e,this.kernel.read(),n,this.strides,this.padding,this.dataFormat,this.dilationRate);else{if(3!==this.rank)throw new Jp("convolutions greater than 3D are not implemented yet.");t=function(e,t,n,r=[1,1,1],a="valid",s,i){return po((()=>{if(null==s&&(s="channelsLast"),Pm(s),4!==e.rank&&5!==e.rank)throw new Yp(`conv3dWithBias expects input to be of rank 4 or 5, but received ${e.rank}.`);if(4!==t.rank&&5!==t.rank)throw new Yp(`conv3dWithBias expects kernel to be of rank 4 or 5, but received ${e.rank}.`);let o=wv(e,s);if("causal"===a)throw new Jp("The support for CAUSAL padding mode in conv3dWithBias is not implemented yet.");return o=eu(o,t,r,"same"===a?"same":"valid","NDHWC",i),null!=n&&(o=hg(o,n)),"channelsFirst"===s&&(o=gi(o,[0,4,1,2,3])),o}))}(e,this.kernel.read(),n,this.strides,this.padding,this.dataFormat,this.dilationRate)}null!=this.activation&&(t=this.activation.apply(t))}return t}))}computeOutputShape(e){e=ay(e);const t=[],n="channelsLast"===this.dataFormat?e.slice(1,e.length-1):e.slice(2);for(let e=0;e 0 but got ${JSON.stringify(e.filters)}`)}}class Ev extends kv{constructor(e){super(2,e),Ev.verifyArgs(e)}getConfig(){const e=super.getConfig();return delete e.rank,e}static verifyArgs(e){if("number"!=typeof e.kernelSize&&!pm(e.kernelSize,"number",1,2))throw new Yp(`Conv2D expects config.kernelSize to be number or number[] with length 1 or 2, but received ${JSON.stringify(e.kernelSize)}.`)}}Ev.className="Conv2D",Gi(Ev);class Cv extends kv{constructor(e){super(3,e),Cv.verifyArgs(e)}getConfig(){const e=super.getConfig();return delete e.rank,e}static verifyArgs(e){if("number"!=typeof e.kernelSize&&(!Array.isArray(e.kernelSize)||1!==e.kernelSize.length&&3!==e.kernelSize.length))throw new Yp(`Conv3D expects config.kernelSize to be number or [number, number, number], but received ${JSON.stringify(e.kernelSize)}.`)}}Cv.className="Conv3D",Gi(Cv);class Sv extends Ev{constructor(e){if(super(e),this.inputSpec=[new uy({ndim:4})],"same"!==this.padding&&"valid"!==this.padding)throw new Yp(`Conv2DTranspose currently supports only padding modes 'same' and 'valid', but received padding mode ${this.padding}`)}build(e){if(4!==(e=ay(e)).length)throw new Yp("Input should have rank 4; Received input shape: "+JSON.stringify(e));const t="channelsFirst"===this.dataFormat?1:e.length-1;if(null==e[t])throw new Yp("The channel dimension of the inputs should be defined. Found `None`.");const n=e[t],r=this.kernelSize.concat([this.filters,n]);this.kernel=this.addWeight("kernel",r,"float32",this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.useBias&&(this.bias=this.addWeight("bias",[this.filters],"float32",this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint)),this.inputSpec=[new uy({ndim:4,axes:{[t]:n}})],this.built=!0}call(e,t){return po((()=>{let t=ry(e);if(4!==t.shape.length)throw new Yp(`Conv2DTranspose.call() expects input tensor to be rank-4, but received a tensor of rank-${t.shape.length}`);const n=t.shape,r=n[0];let a,s;"channelsFirst"===this.dataFormat?(a=2,s=3):(a=1,s=2);const i=n[a],o=n[s],l=this.kernelSize[0],u=this.kernelSize[1],c=this.strides[0],h=this.strides[1],f=[r,bv(i,c,l,this.padding),bv(o,h,u,this.padding),this.filters];"channelsLast"!==this.dataFormat&&(t=gi(t,[0,2,3,1]));let d=Ql(t,this.kernel.read(),f,this.strides,this.padding);return"channelsLast"!==this.dataFormat&&(d=gi(d,[0,3,1,2])),null!=this.bias&&(d=hg(d,this.bias.read(),this.dataFormat)),null!=this.activation&&(d=this.activation.apply(d)),d}))}computeOutputShape(e){const t=(e=ay(e)).slice();let n,r,a;"channelsFirst"===this.dataFormat?(n=1,r=2,a=3):(n=3,r=1,a=2);const s=this.kernelSize[0],i=this.kernelSize[1],o=this.strides[0],l=this.strides[1];return t[n]=this.filters,t[r]=bv(t[r],o,s,this.padding),t[a]=bv(t[a],l,i,this.padding),t}getConfig(){const e=super.getConfig();return delete e.dilationRate,e}}Sv.className="Conv2DTranspose",Gi(Sv);class Nv extends Cv{constructor(e){if(super(e),this.inputSpec=[new uy({ndim:5})],"same"!==this.padding&&"valid"!==this.padding)throw new Yp(`Conv3DTranspose currently supports only padding modes 'same' and 'valid', but received padding mode ${this.padding}`)}build(e){if(5!==(e=ay(e)).length)throw new Yp("Input should have rank 5; Received input shape: "+JSON.stringify(e));const t="channelsFirst"===this.dataFormat?1:e.length-1;if(null==e[t])throw new Yp("The channel dimension of the inputs should be defined. Found `None`.");const n=e[t],r=this.kernelSize.concat([this.filters,n]);this.kernel=this.addWeight("kernel",r,"float32",this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.useBias&&(this.bias=this.addWeight("bias",[this.filters],"float32",this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint)),this.inputSpec=[new uy({ndim:5,axes:{[t]:n}})],this.built=!0}call(e,t){return po((()=>{let t=ry(e);if(5!==t.shape.length)throw new Yp(`Conv3DTranspose.call() expects input tensor to be rank-4, but received a tensor of rank-${t.shape.length}`);const n=t.shape,r=n[0];let a,s,i;"channelsFirst"===this.dataFormat?(i=2,a=3,s=4):(i=1,a=2,s=3);const o=n[i],l=n[a],u=n[s],c=this.kernelSize[0],h=this.kernelSize[1],f=this.kernelSize[2],d=this.strides[0],p=this.strides[1],m=this.strides[2],g=[r,bv(o,d,c,this.padding),bv(l,p,h,this.padding),bv(u,m,f,this.padding),this.filters];"channelsLast"!==this.dataFormat&&(t=gi(t,[0,2,3,4,1]));let y=nu(t,this.kernel.read(),g,this.strides,this.padding);return"channelsLast"!==this.dataFormat&&(y=gi(y,[0,4,1,2,3])),null!==this.bias&&(y=hg(y,this.bias.read(),this.dataFormat)),null!==this.activation&&(y=this.activation.apply(y)),y}))}computeOutputShape(e){const t=(e=ay(e)).slice();let n,r,a,s;"channelsFirst"===this.dataFormat?(n=1,r=2,a=3,s=4):(n=4,r=1,a=2,s=3);const i=this.kernelSize[0],o=this.kernelSize[1],l=this.kernelSize[2],u=this.strides[0],c=this.strides[1],h=this.strides[2];return t[n]=this.filters,t[r]=bv(t[r],u,i,this.padding),t[a]=bv(t[a],c,o,this.padding),t[s]=bv(t[s],h,l,this.padding),t}getConfig(){const e=super.getConfig();return delete e.dilationRate,e}}Nv.className="Conv3DTranspose",Gi(Nv);class Iv extends kv{constructor(e,t){if(super(e,t),this.DEFAULT_DEPTHWISE_INITIALIZER="glorotUniform",this.DEFAULT_POINTWISE_INITIALIZER="glorotUniform",this.depthwiseKernel=null,this.pointwiseKernel=null,null==t.filters)throw new Yp("The `filters` configuration field is required by SeparableConv, but is unspecified.");if(null!=t.kernelInitializer||null!=t.kernelRegularizer||null!=t.kernelConstraint)throw new Yp("Fields kernelInitializer, kernelRegularizer and kernelConstraint are invalid for SeparableConv2D. Use depthwiseInitializer, depthwiseRegularizer, depthwiseConstraint, pointwiseInitializer, pointwiseRegularizer and pointwiseConstraint instead.");if(null!=t.padding&&"same"!==t.padding&&"valid"!==t.padding)throw new Yp(`SeparableConv${this.rank}D supports only padding modes: 'same' and 'valid', but received ${JSON.stringify(t.padding)}`);this.depthMultiplier=null==t.depthMultiplier?1:t.depthMultiplier,this.depthwiseInitializer=Mg(t.depthwiseInitializer||this.DEFAULT_DEPTHWISE_INITIALIZER),this.depthwiseRegularizer=uv(t.depthwiseRegularizer),this.depthwiseConstraint=Nm(t.depthwiseConstraint),this.pointwiseInitializer=Mg(t.depthwiseInitializer||this.DEFAULT_POINTWISE_INITIALIZER),this.pointwiseRegularizer=uv(t.pointwiseRegularizer),this.pointwiseConstraint=Nm(t.pointwiseConstraint)}build(e){if((e=ay(e)).length{let t;if(e=ry(e),1===this.rank)throw new Jp("1D separable convolution is not implemented yet.");return 2===this.rank&&("channelsFirst"===this.dataFormat&&(e=gi(e,[0,2,3,1])),t=Yc(e,this.depthwiseKernel.read(),this.pointwiseKernel.read(),this.strides,this.padding,this.dilationRate,"NHWC")),this.useBias&&(t=hg(t,this.bias.read(),this.dataFormat)),null!=this.activation&&(t=this.activation.apply(t)),"channelsFirst"===this.dataFormat&&(t=gi(t,[0,3,1,2])),t}))}getConfig(){const e=super.getConfig();return delete e.rank,delete e.kernelInitializer,delete e.kernelRegularizer,delete e.kernelConstraint,e.depthwiseInitializer=Og(this.depthwiseInitializer),e.pointwiseInitializer=Og(this.pointwiseInitializer),e.depthwiseRegularizer=ov(this.depthwiseRegularizer),e.pointwiseRegularizer=ov(this.pointwiseRegularizer),e.depthwiseConstraint=Cm(this.depthwiseConstraint),e.pointwiseConstraint=Cm(this.pointwiseConstraint),e}}Iv.className="SeparableConv";class Av extends Iv{constructor(e){super(2,e)}}Av.className="SeparableConv2D",Gi(Av);class Dv extends kv{constructor(e){super(1,e),Dv.verifyArgs(e),this.inputSpec=[{ndim:3}]}getConfig(){const e=super.getConfig();return delete e.rank,delete e.dataFormat,e}static verifyArgs(e){if("number"!=typeof e.kernelSize&&!pm(e.kernelSize,"number",1,1))throw new Yp(`Conv1D expects config.kernelSize to be number or number[] with length 1, but received ${JSON.stringify(e.kernelSize)}.`)}}Dv.className="Conv1D",Gi(Dv);class Tv extends py{constructor(e){super(e),"number"==typeof e.cropping?this.cropping=[[e.cropping,e.cropping],[e.cropping,e.cropping]]:"number"==typeof e.cropping[0]?this.cropping=[[e.cropping[0],e.cropping[0]],[e.cropping[1],e.cropping[1]]]:this.cropping=e.cropping,this.dataFormat=void 0===e.dataFormat?"channelsLast":e.dataFormat,this.inputSpec=[{ndim:4}]}computeOutputShape(e){return"channelsFirst"===this.dataFormat?[e[0],e[1],e[2]-this.cropping[0][0]-this.cropping[0][1],e[3]-this.cropping[1][0]-this.cropping[1][1]]:[e[0],e[1]-this.cropping[0][0]-this.cropping[0][1],e[2]-this.cropping[1][0]-this.cropping[1][1],e[3]]}call(e,t){return po((()=>{if(e=ry(e),"channelsLast"===this.dataFormat){const t=ng(e,this.cropping[0][0],e.shape[1]-this.cropping[0][0]-this.cropping[0][1],2);return ng(t,this.cropping[1][0],e.shape[2]-this.cropping[1][1]-this.cropping[1][0],3)}{const t=ng(e,this.cropping[0][0],e.shape[2]-this.cropping[0][0]-this.cropping[0][1],3);return ng(t,this.cropping[1][0],e.shape[3]-this.cropping[1][1]-this.cropping[1][0],4)}}))}getConfig(){const e={cropping:this.cropping,dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}}Tv.className="Cropping2D",Gi(Tv);class Fv extends py{constructor(e){var t;super(e),this.DEFAULT_SIZE=[2,2],this.inputSpec=[{ndim:4}],this.size=null==e.size?this.DEFAULT_SIZE:e.size,this.dataFormat=null==e.dataFormat?"channelsLast":e.dataFormat,Pm(this.dataFormat),this.interpolation=null==e.interpolation?"nearest":e.interpolation,t=this.interpolation,dm(Rm,"InterpolationFormat",t)}computeOutputShape(e){if("channelsFirst"===this.dataFormat){const t=null==e[2]?null:this.size[0]*e[2],n=null==e[3]?null:this.size[1]*e[3];return[e[0],e[1],t,n]}{const t=null==e[1]?null:this.size[0]*e[1],n=null==e[2]?null:this.size[1]*e[2];return[e[0],t,n,e[3]]}}call(e,t){return po((()=>{let t=ry(e);const n=t.shape;if("channelsFirst"===this.dataFormat){t=gi(t,[0,2,3,1]);const e=this.size[0]*n[2],r=this.size[1]*n[3],a="nearest"===this.interpolation?t.resizeNearestNeighbor([e,r]):t.resizeBilinear([e,r]);return gi(a,[0,3,1,2])}{const e=this.size[0]*n[1],r=this.size[1]*n[2];return"nearest"===this.interpolation?t.resizeNearestNeighbor([e,r]):t.resizeBilinear([e,r])}}))}getConfig(){const e={size:this.size,dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}}Fv.className="UpSampling2D",Gi(Fv);class Rv extends xv{constructor(e){super(2,e),this.depthwiseKernel=null,this.depthMultiplier=null==e.depthMultiplier?1:e.depthMultiplier,this.depthwiseInitializer=Mg(e.depthwiseInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.depthwiseConstraint=Nm(e.depthwiseConstraint),this.depthwiseRegularizer=uv(e.depthwiseRegularizer)}build(e){if((e=ay(e)).length<4)throw new Yp(`Inputs to DepthwiseConv2D should have rank 4. Received input shape: ${JSON.stringify(e)}.`);const t="channelsFirst"===this.dataFormat?1:3;if(null==e[t]||e[t]<0)throw new Yp(`The channel dimension of the inputs to DepthwiseConv2D should be defined, but is not (${e[t]}).`);const n=e[t],r=[this.kernelSize[0],this.kernelSize[1],n,this.depthMultiplier];this.depthwiseKernel=this.addWeight("depthwise_kernel",r,null,this.depthwiseInitializer,this.depthwiseRegularizer,!0,this.depthwiseConstraint),this.useBias?this.bias=this.addWeight("bias",[n*this.depthMultiplier],null,this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint):this.bias=null,this.built=!0}call(e,t){return po((()=>{let t=function(e,t,n=[1,1],r="valid",a,s){return po((()=>{null==a&&(a="channelsLast"),Pm(a);let i=vv(e,a);if(4!==e.rank)throw new Yp(`Input for depthwiseConv2d is required to be 4-D, but is instead ${e.rank}-D`);if(4!==t.rank)throw new Yp(`depthwiseKernel is required to be 4-D, but is instead ${t.rank}-D`);return i=lu(i,t,n,"same"===r?"same":"valid","NHWC",s),"channelsFirst"===a&&(i=gi(i,[0,3,1,2])),i}))}(e=ry(e),this.depthwiseKernel.read(),this.strides,this.padding,this.dataFormat,null);return this.useBias&&(t=hg(t,this.bias.read(),this.dataFormat)),null!=this.activation&&(t=this.activation.apply(t)),t}))}computeOutputShape(e){e=ay(e);const t="channelsFirst"===this.dataFormat?e[2]:e[1],n="channelsFirst"===this.dataFormat?e[3]:e[2],r="channelsFirst"===this.dataFormat?e[1]*this.depthMultiplier:e[3]*this.depthMultiplier,a=yv(t,this.kernelSize[0],this.padding,this.strides[0]),s=yv(n,this.kernelSize[1],this.padding,this.strides[1]);return"channelsFirst"===this.dataFormat?[e[0],r,a,s]:[e[0],a,s,r]}getConfig(){const e=super.getConfig();return e.depthMultiplier=this.depthMultiplier,e.depthwiseInitializer=Og(this.depthwiseInitializer),e.depthwiseRegularizer=ov(this.depthwiseRegularizer),e.depthwiseConstraint=Cm(this.depthwiseRegularizer),e}}function Ov(e,t,n,r){if(Array.isArray(e)){if(null!=t||null!=n)throw new Yp("When inputs is an array, neither initialState or constants should be provided");null!=r&&(n=e.slice(e.length-r,e.length),e=e.slice(0,e.length-r)),e.length>1&&(t=e.slice(1,e.length)),e=e[0]}function a(e){return null==e||Array.isArray(e)?e:[e]}return{inputs:e,initialState:t=a(t),constants:n=a(n)}}function Mv(e,t,n,r=!1,a,s,i=!1,o=!1){return po((()=>{const l=t.shape.length;if(l<3)throw new Yp(`Input should be at least 3D, but is ${l}D.`);const u=[1,0].concat(Jm(2,l));if(t=gi(t,u),null!=s)throw new Jp("The rnn() functoin of the deeplearn.js backend does not support constants yet.");i&&console.warn("Backend rnn(): the unroll = true option is not applicable to the imperative deeplearn.js backend."),null!=a&&((a=a.asType("bool").asType("float32")).rank===l-1&&(a=vu(a,-1)),a=gi(a,u)),r&&(t=Uc(t,0),null!=a&&(a=Uc(a,0)));const c=[];let h,f=n;const d=t.shape[0],p=Sh(t);let m,g;null!=a&&(m=Sh(a));for(let t=0;te(n,f)));if(null==a)h=r[0],f=r[1];else{const e=po((()=>{const e=m[t],n=bc(e).sub(e);return{output:r[0].mul(e).add(f[0].mul(n)),newStates:f.map(((t,a)=>r[1][a].mul(e).add(t.mul(n))))}}));h=e.output,f=e.newStates}o&&c.push(h)}return o&&(g=dh(c,1)),[h,g,f]}))}Rv.className="DepthwiseConv2D",Gi(Rv);class Bv extends py{constructor(e){let t;if(super(e),null==e.cell)throw new Yp("cell property is missing for the constructor of RNN.");if(t=Array.isArray(e.cell)?new jv({cells:e.cell}):e.cell,null==t.stateSize)throw new Yp("The RNN cell should have an attribute `stateSize` (tuple of integers, one integer per RNN state).");this.cell=t,this.returnSequences=null!=e.returnSequences&&e.returnSequences,this.returnState=null!=e.returnState&&e.returnState,this.goBackwards=null!=e.goBackwards&&e.goBackwards,this._stateful=null!=e.stateful&&e.stateful,this.unroll=null!=e.unroll&&e.unroll,this.supportsMasking=!0,this.inputSpec=[new uy({ndim:3})],this.stateSpec=null,this.states_=null,this.numConstants=null,this.keptStates=[]}getStates(){return null==this.states_?Jm(0,Array.isArray(this.cell.stateSize)?this.cell.stateSize.length:1).map((e=>null)):this.states_}setStates(e){this.states_=e}computeOutputShape(e){ty(e)&&(e=e[0]),e=e;let t=this.cell.stateSize;Array.isArray(t)||(t=[t]);const n=t[0];let r;if(r=this.returnSequences?[e[0],e[1],n]:[e[0],n],this.returnState){const n=[];for(const r of t)n.push([e[0],r]);return[r].concat(n)}return r}computeMask(e,t){return po((()=>{Array.isArray(t)&&(t=t[0]);const e=this.returnSequences?t:null;if(this.returnState){const t=this.states.map((e=>null));return[e].concat(t)}return e}))}get states(){if(null==this.states_){const e=Array.isArray(this.cell.stateSize)?this.cell.stateSize.length:1,t=[];for(let n=0;ne.shape[e.shape.length-1])),a))throw new Yp(`An initialState was passed that is not compatible with cell.stateSize. Received stateSpec=${this.stateSpec}; However cell.stateSize is ${this.cell.stateSize}`)}else this.stateSpec=a.map((e=>new uy({shape:[null,e]})));this.stateful&&this.resetStates()}resetStates(e,t=!1){po((()=>{if(!this.stateful)throw new Kp("Cannot call resetStates() on an RNN Layer that is not stateful.");const n=this.inputSpec[0].shape[0];if(null==n)throw new Yp("If an RNN is stateful, it needs to know its batch size. Specify the batch size of your input tensors: \n- If using a Sequential model, specify the batch size by passing a `batchInputShape` option to your first layer.\n- If using the functional API, specify the batch size by passing a `batchShape` option to your Input layer.");if(null==this.states_)Array.isArray(this.cell.stateSize)?this.states_=this.cell.stateSize.map((e=>oc([n,e]))):this.states_=[oc([n,this.cell.stateSize])];else if(null==e)mo(this.states_),null!=this.keptStates&&(mo(this.keptStates),this.keptStates=[]),Array.isArray(this.cell.stateSize)?this.states_=this.cell.stateSize.map((e=>oc([n,e]))):this.states_[0]=oc([n,this.cell.stateSize]);else{if(Array.isArray(e)||(e=[e]),e.length!==this.states_.length)throw new Yp(`Layer ${this.name} expects ${this.states_.length} state(s), but it received ${e.length} state value(s). Input received: ${e}`);!0===t?this.keptStates.push(this.states_.slice()):mo(this.states_);for(let t=0;tgo(e.clone())))}))}apply(e,t){let n=null==t?null:t.initialState,r=null==t?null:t.constants;null==t&&(t={});const a=Ov(e,n,r,this.numConstants);e=a.inputs,n=a.initialState,r=a.constants;let s=[],i=[];if(null!=n){t.initialState=n,s=s.concat(n),this.stateSpec=[];for(const e of n)this.stateSpec.push(new uy({shape:e.shape}));i=i.concat(this.stateSpec)}if(null!=r&&(t.constants=r,s=s.concat(r),this.numConstants=r.length),s[0]instanceof cy){const n=[e].concat(s),r=this.inputSpec.concat(i),a=this.inputSpec;this.inputSpec=r;const o=super.apply(n,t);return this.inputSpec=a,o}return super.apply(e,t)}call(e,t){return po((()=>{const n=null==t?null:t.mask,r=null==t?null:t.training;let a=null==t?null:t.initialState;e=ry(e),null==a&&(a=this.stateful?this.states_:this.getInitialState(e));const s=Array.isArray(this.cell.stateSize)?this.cell.stateSize.length:1;if(a.length!==s)throw new Yp(`RNN Layer has ${s} state(s) but was passed ${a.length} initial state(s).`);this.unroll&&console.warn("Ignoring unroll = true for RNN layer, due to imperative backend.");const i={training:r},o=Mv(((e,t)=>{const n=this.cell.call([e].concat(t),i);return[n[0],n.slice(1)]}),e,a,this.goBackwards,n,null,this.unroll,this.returnSequences),l=o[0],u=o[1],c=o[2];this.stateful&&this.resetStates(c,r);const h=this.returnSequences?u:l;return this.returnState?[h].concat(c):h}))}getInitialState(e){return po((()=>{let t=oc(e.shape);return t=Uu(t,[1,2]),t=Qm(t),Array.isArray(this.cell.stateSize)?this.cell.stateSize.map((e=>e>1?sg(t,[1,e]):t)):this.cell.stateSize>1?[sg(t,[1,this.cell.stateSize])]:[t]}))}get trainableWeights(){return this.trainable?this.cell.trainableWeights:[]}get nonTrainableWeights(){return this.trainable?this.cell.nonTrainableWeights:this.cell.weights}setFastWeightInitDuringBuild(e){super.setFastWeightInitDuringBuild(e),null!=this.cell&&this.cell.setFastWeightInitDuringBuild(e)}getConfig(){const e=super.getConfig(),t={returnSequences:this.returnSequences,returnState:this.returnState,goBackwards:this.goBackwards,stateful:this.stateful,unroll:this.unroll};null!=this.numConstants&&(t.numConstants=this.numConstants);const n=this.cell.getConfig();return this.getClassName()===Bv.className&&(t.cell={className:this.cell.getClassName(),config:n}),Object.assign({},n,e,t)}static fromConfig(e,t,n={}){const r=Ay(t.cell,n);return new e(Object.assign(t,{cell:r}))}}Bv.className="RNN",Gi(Bv);class $v extends py{}class Pv extends $v{constructor(e){super(e),this.DEFAULT_ACTIVATION="tanh",this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_RECURRENT_INITIALIZER="orthogonal",this.DEFAULT_BIAS_INITIALIZER="zeros",this.units=e.units,mm(this.units,"units"),this.activation=nv(null==e.activation?this.DEFAULT_ACTIVATION:e.activation),this.useBias=null==e.useBias||e.useBias,this.kernelInitializer=Mg(e.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.recurrentInitializer=Mg(e.recurrentInitializer||this.DEFAULT_RECURRENT_INITIALIZER),this.biasInitializer=Mg(e.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.kernelRegularizer=uv(e.kernelRegularizer),this.recurrentRegularizer=uv(e.recurrentRegularizer),this.biasRegularizer=uv(e.biasRegularizer),this.kernelConstraint=Nm(e.kernelConstraint),this.recurrentConstraint=Nm(e.recurrentConstraint),this.biasConstraint=Nm(e.biasConstraint),this.dropout=qm([1,Ym([0,null==e.dropout?0:e.dropout])]),this.recurrentDropout=qm([1,Ym([0,null==e.recurrentDropout?0:e.recurrentDropout])]),this.stateSize=this.units,this.dropoutMask=null,this.recurrentDropoutMask=null}build(e){e=ay(e),this.kernel=this.addWeight("kernel",[e[e.length-1],this.units],null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.recurrentKernel=this.addWeight("recurrent_kernel",[this.units,this.units],null,this.recurrentInitializer,this.recurrentRegularizer,!0,this.recurrentConstraint),this.useBias?this.bias=this.addWeight("bias",[this.units],null,this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint):this.bias=null,this.built=!0}call(e,t){return po((()=>{if(2!==(e=e).length)throw new Yp(`SimpleRNNCell expects 2 input Tensors, got ${e.length}.`);let n=e[1];e=e[0];const r=null!=t.training&&t.training;let a;0bc(e),rate:this.dropout,training:r})),0bc(n),rate:this.recurrentDropout,training:r}));const s=this.dropoutMask,i=this.recurrentDropoutMask;a=og(null!=s?Do(e,s):e,this.kernel.read()),null!=this.bias&&(a=hg(a,this.bias.read())),null!=i&&(n=Do(n,i));let o=No(a,og(n,this.recurrentKernel.read()));return null!=this.activation&&(o=this.activation.apply(o)),[o,o]}))}getConfig(){const e=super.getConfig(),t={units:this.units,activation:ev(this.activation),useBias:this.useBias,kernelInitializer:Og(this.kernelInitializer),recurrentInitializer:Og(this.recurrentInitializer),biasInitializer:Og(this.biasInitializer),kernelRegularizer:ov(this.kernelRegularizer),recurrentRegularizer:ov(this.recurrentRegularizer),biasRegularizer:ov(this.biasRegularizer),activityRegularizer:ov(this.activityRegularizer),kernelConstraint:Cm(this.kernelConstraint),recurrentConstraint:Cm(this.recurrentConstraint),biasConstraint:Cm(this.biasConstraint),dropout:this.dropout,recurrentDropout:this.recurrentDropout};return Object.assign({},e,t)}}Pv.className="SimpleRNNCell",Gi(Pv);class Lv extends Bv{constructor(e){e.cell=new Pv(e),super(e)}call(e,t){return po((()=>{null!=this.cell.dropoutMask&&(mo(this.cell.dropoutMask),this.cell.dropoutMask=null),null!=this.cell.recurrentDropoutMask&&(mo(this.cell.recurrentDropoutMask),this.cell.recurrentDropoutMask=null);const n=null==t?null:t.mask,r=null==t?null:t.training,a=null==t?null:t.initialState;return super.call(e,{mask:n,training:r,initialState:a})}))}static fromConfig(e,t){return new e(t)}}Lv.className="SimpleRNN",Gi(Lv);class zv extends $v{constructor(e){if(super(e),this.DEFAULT_ACTIVATION="tanh",this.DEFAULT_RECURRENT_ACTIVATION="hardSigmoid",this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_RECURRENT_INITIALIZER="orthogonal",this.DEFAULT_BIAS_INITIALIZER="zeros",e.resetAfter)throw new Yp("GRUCell does not support reset_after parameter set to true.");this.units=e.units,mm(this.units,"units"),this.activation=nv(void 0===e.activation?this.DEFAULT_ACTIVATION:e.activation),this.recurrentActivation=nv(void 0===e.recurrentActivation?this.DEFAULT_RECURRENT_ACTIVATION:e.recurrentActivation),this.useBias=null==e.useBias||e.useBias,this.kernelInitializer=Mg(e.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.recurrentInitializer=Mg(e.recurrentInitializer||this.DEFAULT_RECURRENT_INITIALIZER),this.biasInitializer=Mg(e.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.kernelRegularizer=uv(e.kernelRegularizer),this.recurrentRegularizer=uv(e.recurrentRegularizer),this.biasRegularizer=uv(e.biasRegularizer),this.kernelConstraint=Nm(e.kernelConstraint),this.recurrentConstraint=Nm(e.recurrentConstraint),this.biasConstraint=Nm(e.biasConstraint),this.dropout=qm([1,Ym([0,null==e.dropout?0:e.dropout])]),this.recurrentDropout=qm([1,Ym([0,null==e.recurrentDropout?0:e.recurrentDropout])]),this.implementation=e.implementation,this.stateSize=this.units,this.dropoutMask=null,this.recurrentDropoutMask=null}build(e){const t=(e=ay(e))[e.length-1];this.kernel=this.addWeight("kernel",[t,3*this.units],null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.recurrentKernel=this.addWeight("recurrent_kernel",[this.units,3*this.units],null,this.recurrentInitializer,this.recurrentRegularizer,!0,this.recurrentConstraint),this.useBias?this.bias=this.addWeight("bias",[3*this.units],null,this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint):this.bias=null,this.built=!0}call(e,t){return po((()=>{if(2!==(e=e).length)throw new Yp(`GRUCell expects 2 input Tensors (inputs, h, c), got ${e.length}.`);const n=null!=t.training&&t.training;let r=e[1];e=e[0],0bc(e),rate:this.dropout,training:n,count:3})),0bc(r),rate:this.recurrentDropout,training:n,count:3}));const a=this.dropoutMask,s=this.recurrentDropoutMask;let i,o,l;0{null!=this.cell.dropoutMask&&(mo(this.cell.dropoutMask),this.cell.dropoutMask=null),null!=this.cell.recurrentDropoutMask&&(mo(this.cell.recurrentDropoutMask),this.cell.recurrentDropoutMask=null);const n=null==t?null:t.mask,r=null==t?null:t.training,a=null==t?null:t.initialState;return super.call(e,{mask:n,training:r,initialState:a})}))}static fromConfig(e,t){return 0===t.implmentation&&(t.implementation=1),new e(t)}}Wv.className="GRU",Gi(Wv);class Uv extends $v{constructor(e){super(e),this.DEFAULT_ACTIVATION="tanh",this.DEFAULT_RECURRENT_ACTIVATION="hardSigmoid",this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_RECURRENT_INITIALIZER="orthogonal",this.DEFAULT_BIAS_INITIALIZER="zeros",this.units=e.units,mm(this.units,"units"),this.activation=nv(void 0===e.activation?this.DEFAULT_ACTIVATION:e.activation),this.recurrentActivation=nv(void 0===e.recurrentActivation?this.DEFAULT_RECURRENT_ACTIVATION:e.recurrentActivation),this.useBias=null==e.useBias||e.useBias,this.kernelInitializer=Mg(e.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.recurrentInitializer=Mg(e.recurrentInitializer||this.DEFAULT_RECURRENT_INITIALIZER),this.biasInitializer=Mg(e.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.unitForgetBias=e.unitForgetBias,this.kernelRegularizer=uv(e.kernelRegularizer),this.recurrentRegularizer=uv(e.recurrentRegularizer),this.biasRegularizer=uv(e.biasRegularizer),this.kernelConstraint=Nm(e.kernelConstraint),this.recurrentConstraint=Nm(e.recurrentConstraint),this.biasConstraint=Nm(e.biasConstraint),this.dropout=qm([1,Ym([0,null==e.dropout?0:e.dropout])]),this.recurrentDropout=qm([1,Ym([0,null==e.recurrentDropout?0:e.recurrentDropout])]),this.implementation=e.implementation,this.stateSize=[this.units,this.units],this.dropoutMask=null,this.recurrentDropoutMask=null}build(e){var t;const n=(e=ay(e))[e.length-1];let r;if(this.kernel=this.addWeight("kernel",[n,4*this.units],null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.recurrentKernel=this.addWeight("recurrent_kernel",[this.units,4*this.units],null,this.recurrentInitializer,this.recurrentRegularizer,!0,this.recurrentConstraint),this.useBias){if(this.unitForgetBias){const e=this.biasInitializer,n=this.units;r=new((t=class extends gg{apply(t,r){const a=e.apply([n]),s=(new bg).apply([n]),i=e.apply([2*n]);return ag(ag(a,s),i)}}).className="CustomInit",t)}else r=this.biasInitializer;this.bias=this.addWeight("bias",[4*this.units],null,r,this.biasRegularizer,!0,this.biasConstraint)}else this.bias=null;this.built=!0}call(e,t){return po((()=>{const n=null!=t.training&&t.training;if(3!==(e=e).length)throw new Yp(`LSTMCell expects 3 input Tensors (inputs, h, c), got ${e.length}.`);let r=e[1];const a=e[2];e=e[0],0bc(e),rate:this.dropout,training:n,count:4})),0bc(r),rate:this.recurrentDropout,training:n,count:4}));const s=this.dropoutMask,i=this.recurrentDropoutMask;let o,l,u,c;0{null!=this.cell.dropoutMask&&(mo(this.cell.dropoutMask),this.cell.dropoutMask=null),null!=this.cell.recurrentDropoutMask&&(mo(this.cell.recurrentDropoutMask),this.cell.recurrentDropoutMask=null);const n=null==t?null:t.mask,r=null==t?null:t.training,a=null==t?null:t.initialState;return super.call(e,{mask:n,training:r,initialState:a})}))}static fromConfig(e,t){return 0===t.implmentation&&(t.implementation=1),new e(t)}}Vv.className="LSTM",Gi(Vv);class jv extends $v{constructor(e){super(e),this.cells=e.cells}get stateSize(){const e=[];for(const t of this.cells.slice().reverse())Array.isArray(t.stateSize)?e.push(...t.stateSize):e.push(t.stateSize);return e}call(e,t){return po((()=>{let n=(e=e).slice(1);const r=[];for(const e of this.cells.slice().reverse())Array.isArray(e.stateSize)?r.push(n.splice(0,e.stateSize.length)):r.push(n.splice(0,1));r.reverse();const a=[];let s;for(let i=0;i{Um(`RNNCell_${r}`,(()=>{n.build(e),t=Array.isArray(n.stateSize)?n.stateSize[0]:n.stateSize,e=[e[0],t]}))})),this.built=!0}getConfig(){const e=super.getConfig(),t={cells:this.cells.map((e=>({className:e.getClassName(),config:e.getConfig()})))};return Object.assign({},e,t)}static fromConfig(e,t,n={}){const r=[];for(const e of t.cells)r.push(Ay(e,n));return new e({cells:r})}get trainableWeights(){if(!this.trainable)return[];const e=[];for(const t of this.cells)e.push(...t.trainableWeights);return e}get nonTrainableWeights(){const e=[];for(const t of this.cells)e.push(...t.nonTrainableWeights);if(!this.trainable){const t=[];for(const e of this.cells)t.push(...e.trainableWeights);return t.concat(e)}return e}getWeights(){const e=[];for(const t of this.cells)e.push(...t.weights);return oy(e)}setWeights(e){const t=[];for(const n of this.cells){const r=n.weights.length,a=e.splice(r);for(let e=0;efg(t(),n),i=()=>dg(s,t,r);return!a||a<=1?go(i().clone()):Array(a).fill(void 0).map(i).map((e=>go(e.clone())))}jv.className="StackedRNNCells",Gi(jv);class Gv extends Bv{constructor(e){if(e.unroll)throw new Jp("Unrolling is not possible with convolutional RNNs.");if(Array.isArray(e.cell))throw new Jp("It is not possible at the moment to stack convolutional cells.");super(e),this.inputSpec=[new uy({ndim:5})]}call(e,t){return po((()=>{if(null!=this.cell.dropoutMask&&(mo(this.cell.dropoutMask),this.cell.dropoutMask=null),null!=this.cell.recurrentDropoutMask&&(mo(this.cell.recurrentDropoutMask),this.cell.recurrentDropoutMask=null),t&&t.constants)throw new Yp("ConvRNN2D cell does not support constants");const n=null==t?null:t.mask,r=null==t?null:t.training,a=null==t?null:t.initialState;return super.call(e,{mask:n,training:r,initialState:a})}))}computeOutputShape(e){let t=this.computeSingleOutputShape(e);return this.returnSequences||(t=[t[0],...t.slice(2)]),this.returnState&&(t=[t,...Array(2).fill([e[0],...t.slice(-3)])]),t}getInitialState(e){return po((()=>{const{stateSize:t}=this.cell,n=e.shape,r=this.computeSingleOutputShape(n),a=oc([r[0],...r.slice(2)]);return Array.isArray(t)?Array(t.length).fill(a):[a]}))}resetStates(e,t=!1){po((()=>{if(!this.stateful)throw new Kp("Cannot call resetStates() on an RNN Layer that is not stateful.");const n=this.inputSpec[0].shape,r=this.computeSingleOutputShape(n),a=[r[0],...r.slice(2)];if(null==n[0])throw new Yp("If an RNN is stateful, it needs to know its batch size. Specify the batch size of your input tensors: \n- If using a Sequential model, specify the batch size by passing a `batchInputShape` option to your first layer.\n- If using the functional API, specify the batch size by passing a `batchShape` option to your Input layer.");if(null==this.getStates())Array.isArray(this.cell.stateSize)?this.states_=this.cell.stateSize.map((()=>oc(a))):this.states_=[oc(a)];else if(null==e)mo(this.states_),null!=this.keptStates&&(mo(this.keptStates),this.keptStates=[]),Array.isArray(this.cell.stateSize)?this.states_=this.cell.stateSize.map((()=>oc(a))):this.states_[0]=oc(a);else{if(Array.isArray(e)||(e=[e]),e.length!==this.states_.length)throw new Yp(`Layer ${this.name} expects ${this.states_.length} state(s), but it received ${e.length} state value(s). Input received: ${e}`);t?this.keptStates.push(this.states_.slice()):mo(this.states_);for(let t=0;tgo(e.clone())))}))}computeSingleOutputShape(e){const{dataFormat:t,filters:n,kernelSize:r,padding:a,strides:s,dilationRate:i}=this.cell,o="channelsFirst"===t,l=e[o?3:2],u=e[o?4:3],c=yv(l,r[0],a,s[0],i[0]),h=yv(u,r[1],a,s[1],i[1]);return[...e.slice(0,2),...o?[n,c,h]:[c,h,n]]}}Gv.className="ConvRNN2D";class Xv extends Uv{constructor(e){const{filters:t,kernelSize:n,strides:r,padding:a,dataFormat:s,dilationRate:i}=e;super(Object.assign({},e,{units:t})),this.filters=t,mm(this.filters,"filters"),this.kernelSize=gv(n,2,"kernelSize"),this.kernelSize.forEach((e=>mm(e,"kernelSize"))),this.strides=gv(r||1,2,"strides"),this.strides.forEach((e=>mm(e,"strides"))),this.padding=a||"valid",Lm(this.padding),this.dataFormat=s||"channelsLast",Pm(this.dataFormat),this.dilationRate=gv(i||1,2,"dilationRate"),this.dilationRate.forEach((e=>mm(e,"dilationRate")))}build(e){var t;e=ay(e);const n="channelsFirst"===this.dataFormat?1:e.length-1;if(null==e[n])throw new Yp(`The channel dimension of the input should be defined. Found ${e[n]}`);const r=e[n],a=this.kernelSize.concat([r,4*this.filters]);this.kernel=this.addWeight("kernel",a,null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint);const s=this.kernelSize.concat([this.filters,4*this.filters]);if(this.recurrentKernel=this.addWeight("recurrent_kernel",s,null,this.recurrentInitializer,this.recurrentRegularizer,!0,this.recurrentConstraint),this.useBias){let e;if(this.unitForgetBias){const n=this.biasInitializer,r=this.filters;e=new((t=class extends gg{apply(e,t){return rg([n.apply([r]),lc([r]),n.apply([2*r])])}}).className="CustomInit",t)}else e=this.biasInitializer;this.bias=this.addWeight("bias",[4*this.filters],null,e,this.biasRegularizer,!0,this.biasConstraint)}this.built=!0}call(e,t){return po((()=>{if(3!==e.length)throw new Yp(`ConvLSTM2DCell expects 3 input Tensors (inputs, h, c), got ${e.length}.`);const n=t.training||!1,r=e[0],a=e[1],s=e[2];0bc(r),rate:this.dropout,training:n,count:4}));const i=this.dropoutMask,o=(e,t,n)=>t&&t[n]?Do(t[n],e):e;let l=o(r,i,0),u=o(r,i,1),c=o(r,i,2),h=o(r,i,3);0bc(a),rate:this.recurrentDropout,training:n,count:4}));const f=this.recurrentDropoutMask;let d=o(a,f,0),p=o(a,f,1),m=o(a,f,2),g=o(a,f,3);const[y,b,v,w]=uh(this.kernel.read(),4,3),[_,x,k,E]=this.useBias?uh(this.bias.read(),4):[null,null,null,null];l=this.inputConv(l,y,_,this.padding),u=this.inputConv(u,b,x,this.padding),c=this.inputConv(c,v,k,this.padding),h=this.inputConv(h,w,E,this.padding);const[C,S,N,I]=uh(this.recurrentKernel.read(),4,3);d=this.recurrentConv(d,C),p=this.recurrentConv(p,S),m=this.recurrentConv(m,N),g=this.recurrentConv(g,I);const A=this.recurrentActivation.apply(No(l,d)),D=this.recurrentActivation.apply(No(u,p)),T=No(Do(D,s),Do(A,this.activation.apply(No(c,m)))),F=Do(this.recurrentActivation.apply(No(h,g)),this.activation.apply(T));return[F,F,T]}))}getConfig(){const e=super.getConfig(),{units:t}=e,n=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(r=Object.getOwnPropertySymbols(e);a{this.invokeCallHook(e,t);const n=ry(e);if(0fg(n,this.rate,r,this.seed)),(()=>n),e)}return e}))}getConfig(){const e={rate:this.rate,noiseShape:this.noiseShape,seed:this.seed},t=super.getConfig();return Object.assign(e,t),e}dispose(){return super.dispose()}}qv.className="Dropout",Gi(qv);class Yv extends qv{constructor(e){super(e),this.inputSpec=[{ndim:3}]}getNoiseShape(e){const t=e.shape;return[t[0],1,t[2]]}}Yv.className="SpatialDropout1D",Gi(Yv);class Jv extends py{constructor(e){if(super(e),this.activation=null,this.useBias=!0,this.kernel=null,this.bias=null,this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_BIAS_INITIALIZER="zeros",null==e.batchInputShape&&null==e.inputShape&&null!=e.inputDim){let t=null;null!=e.batchSize&&(t=e.batchSize),this.batchInputShape=[t,e.inputDim]}this.units=e.units,mm(this.units,"units"),this.activation=nv(e.activation),null!=e.useBias&&(this.useBias=e.useBias),this.kernelInitializer=Mg(e.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.biasInitializer=Mg(e.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.kernelConstraint=Nm(e.kernelConstraint),this.biasConstraint=Nm(e.biasConstraint),this.kernelRegularizer=uv(e.kernelRegularizer),this.biasRegularizer=uv(e.biasRegularizer),this.activityRegularizer=uv(e.activityRegularizer),this.supportsMasking=!0,this.inputSpec=[{minNDim:2}]}build(e){const t=(e=ay(e))[e.length-1];null==this.kernel&&(this.kernel=this.addWeight("kernel",[t,this.units],null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.useBias&&(this.bias=this.addWeight("bias",[this.units],null,this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint))),this.inputSpec=[{minNDim:2,axes:{[-1]:t}}],this.built=!0}computeOutputShape(e){const t=(e=ay(e)).slice();return t[t.length-1]=this.units,t}call(e,t){return po((()=>{this.invokeCallHook(e,t);const n=ry(e),r=ym(this.activation.getClassName());let a;return null!=r?a=og(n,this.kernel.read(),r,this.bias?this.bias.read():null):(a=og(n,this.kernel.read()),null!=this.bias&&(a=hg(a,this.bias.read())),null!=this.activation&&(a=this.activation.apply(a))),a}))}getConfig(){const e={units:this.units,activation:ev(this.activation),useBias:this.useBias,kernelInitializer:Og(this.kernelInitializer),biasInitializer:Og(this.biasInitializer),kernelRegularizer:ov(this.kernelRegularizer),biasRegularizer:ov(this.biasRegularizer),activityRegularizer:ov(this.activityRegularizer),kernelConstraint:Cm(this.kernelConstraint),biasConstraint:Cm(this.biasConstraint)},t=super.getConfig();return Object.assign(e,t),e}}Jv.className="Dense",Gi(Jv);class Zv extends py{constructor(e){super(e=e||{}),this.inputSpec=[{minNDim:3}],this.dataFormat=e.dataFormat}computeOutputShape(e){e=ay(e);for(const t of e.slice(1))if(null==t)throw new Yp(`The shape of the input to "Flatten" is not fully defined (got ${e.slice(1)}). Make sure to pass a complete "input_shape" or "batch_input_shape" argument to the first layer in your model.`);return[e[0],Xm(e,1)]}call(e,t){return po((()=>{this.invokeCallHook(e,t);let n=ry(e);if("channelsFirst"===this.dataFormat&&n.rank>1){const e=[0];for(let t=2;t{this.invokeCallHook(e,t);const n=ry(e);return this.activation.apply(n)}))}getConfig(){const e={activation:ev(this.activation)},t=super.getConfig();return Object.assign(e,t),e}}Qv.className="Activation",Gi(Qv);class ew extends py{constructor(e){super(e),this.n=e.n,this.inputSpec=[{ndim:2}]}computeOutputShape(e){return[e[0],this.n,e[1]]}call(e,t){return po((()=>{return e=ry(e),t=e,n=this.n,po((()=>{if(2!==t.shape.length)throw new Yp(`repeat() expects a rank-2 tensor, but received a rank-${t.shape.length} tensor.`);return sg(Qm(t,1),[1,n,1])}));var t,n}))}getConfig(){const e={n:this.n},t=super.getConfig();return Object.assign(e,t),e}}ew.className="RepeatVector",Gi(ew);class tw extends py{constructor(e){super(e),this.targetShape=e.targetShape;for(let e=0;e{this.invokeCallHook(e,t);const n=ry(e),r=n.shape,a=r.slice(0,1).concat(this.fixUnknownDimension(r.slice(1),this.targetShape));return n.reshape(a)}))}getConfig(){const e={targetShape:this.targetShape},t=super.getConfig();return Object.assign(e,t),e}}tw.className="Reshape",Gi(tw);class nw extends py{constructor(e){if(super(e),null==e.dims)throw new Error("Required configuration field `dims` is missing during Permute constructor call.");if(!Array.isArray(e.dims))throw new Error(`Permute constructor requires \`dims\` to be an Array, but received ${e.dims} instead.`);const t=Jm(1,e.dims.length+1);if(!se(e.dims.slice().sort(),t))throw new Error("Invalid permutation `dims`: "+JSON.stringify(e.dims)+" `dims` must contain consecutive integers starting from 1.");this.dims=e.dims,this.dimsIncludingBatch=[0].concat(this.dims),this.inputSpec=[new uy({ndim:this.dims.length+1})]}computeOutputShape(e){const t=(e=ay(e)).slice();return this.dims.forEach(((n,r)=>{t[r+1]=e[n]})),t}call(e,t){return gi(ry(e),this.dimsIncludingBatch)}getConfig(){const e={dims:this.dims},t=super.getConfig();return Object.assign(e,t),e}}nw.className="Permute",Gi(nw);class rw extends py{constructor(e){super(null==e?{}:e),this.supportsMasking=!0,this.maskValue=null!=e?null==e.maskValue?0:e.maskValue:0}computeOutputShape(e){return e}getConfig(){const e=super.getConfig(),t={maskValue:this.maskValue};return Object.assign(t,e),t}computeMask(e,t){const n=ry(e);return ll(yc(n,this.maskValue),-1)}call(e,t){return po((()=>{this.invokeCallHook(e,t);const n=ry(e),r=ll(yc(n,this.maskValue),-1,!0);return n.mul(r.asType(n.dtype))}))}}rw.className="Masking",Gi(rw);class aw extends py{constructor(e){if(super(e),this.embeddings=null,this.DEFAULT_EMBEDDINGS_INITIALIZER="randomUniform",null==e.batchInputShape&&null==e.inputShape){let t=null;null!=e.batchSize&&(t=e.batchSize),null==e.inputLength?this.batchInputShape=[t,null]:this.batchInputShape=[t].concat(rm(e.inputLength))}this.inputDim=e.inputDim,mm(this.inputDim,"inputDim"),this.outputDim=e.outputDim,mm(this.outputDim,"outputDim"),this.embeddingsInitializer=Mg(e.embeddingsInitializer||this.DEFAULT_EMBEDDINGS_INITIALIZER),this.embeddingsRegularizer=uv(e.embeddingsRegularizer),this.activityRegularizer=uv(e.activityRegularizer),this.embeddingsConstraint=Nm(e.embeddingsConstraint),this.maskZero=e.maskZero,this.supportsMasking=e.maskZero,this.inputLength=e.inputLength}build(e){this.embeddings=this.addWeight("embeddings",[this.inputDim,this.outputDim],this.dtype,this.embeddingsInitializer,this.embeddingsRegularizer,!0,this.embeddingsConstraint),this.built=!0}warnOnIncompatibleInputShape(e){}computeMask(e,t){return po((()=>this.maskZero?(e=ry(e),yc(e,Ro(e))):null))}computeOutputShape(e){if(e=ay(e),null==this.inputLength)return[...e,this.outputDim];const t=rm(this.inputLength);if(t.length!==e.length-1)throw new Yp(`"inputLength" is ${this.inputLength}, but received input shape has shape ${e}`);{let n=0;for(let r=0;r{this.invokeCallHook(e,t);let n=ry(e);return"int32"!==n.dtype&&(n=Zm(n,"int32")),lg(this.embeddings.read(),n.as1D()).reshape(ay(this.computeOutputShape(n.shape)))}))}getConfig(){const e={inputDim:this.inputDim,outputDim:this.outputDim,embeddingsInitializer:Og(this.embeddingsInitializer),embeddingsRegularizer:ov(this.embeddingsRegularizer),activityRegularizer:ov(this.activityRegularizer),embeddingsConstraint:Cm(this.embeddingsConstraint),maskZero:this.maskZero,inputLength:this.inputLength},t=super.getConfig();return Object.assign(e,t),e}}aw.className="Embedding",Gi(aw);class sw extends py{constructor(e){super(e||{}),this.supportsMasking=!0}mergeFunction(e){throw new Jp}computeElementwiseOpOutputShape(e,t){if(null==e||null==t)return null;if(e.length1)throw new Yp(`Can not merge tensors with different batch sizes. Got tensors with shapes: ${JSON.stringify(e)}.`);let n=null==e[0]?null:e[0].slice(1);for(let t=1;te.length));-1===e.indexOf(null)&&1===hm(r).length?this.reshapeRequired=!1:this.reshapeRequired=!0}call(e,t){return po((()=>{if(e=e,this.reshapeRequired){const t=[],n=e.map((e=>e.rank));if(-1===n.indexOf(null)){const r=Ym(n);for(let n of e){const e=n.rank;for(let t=0;t1){const a=Jm(1,e).concat([0]);t.push(gi(r,a)),n=!0}else t.push(r)}let r=this.mergeFunction(t);const a=r.rank;if(n)if(null==a){const e=r.shape,t=e[e.length-1],n=[t].concat(e.slice(0,e.length-1));r=gi(r.reshape([-1,t]),[1,0]).reshape(n)}else if(a>1){const e=[a-1].concat(Jm(0,a-1));r=gi(r,e)}return r}}return this.mergeFunction(e)}))}computeOutputShape(e){let t;t=null==(e=e)[0]?null:e[0].slice(1);for(let n=1;n{if(null==t)return null;if(!Array.isArray(t))throw new Yp("`mask` should be an Array");if(!Array.isArray(e))throw new Yp("`inputs` should be an Array");if(t.length!==e.length)throw new Yp(`The Array 'inputs' and 'mask' are expected to have the same length, but have different lengths (${e.length} vs ${t.length})`);if(t.every((e=>null==e)))return null;let n=(t=t.map((e=>null==e?e:vu(e,0))))[0];for(let e=1;e{let t=e[0].clone();for(let n=1;n{let t=e[0].clone();for(let n=1;n{let t=e[0].clone();for(let n=1;n{let t=e[0];for(let n=1;n{let t=e[0];for(let n=1;n1)throw new Yp("A `Concatenate` layer requires inputs with matching shapes except for the concat axis. Got input shapes: "+JSON.stringify(e))}mergeFunction(e){return po((()=>rg(e,this.axis)))}computeOutputShape(e){if(!Array.isArray(e)||!Array.isArray(e[0]))throw new Yp("A `Concatenate` layer should be called on a list of inputs.");const t=e,n=t[0].slice(),r=this.axis<0?n.length+this.axis:this.axis;for(const e of t.slice(1)){if(null==n[r]||null==e[r]){n[r]=null;break}n[r]+=e[r]}return n}computeMask(e,t){if(null==t)return null;if(!Array.isArray(t))throw new Yp("`mask` should be an array for Concatenate");if(!Array.isArray(e))throw new Yp("`inputs` should be an array for Concatenate");if(t.length!==e.length)throw new Yp(`Mismatch in the length of mask (${t.length}) and the legnth of inputs (${e.length})`);return po((()=>{let n=!0;if(t.forEach((e=>{null==e||(n=!1)})),n)return null;const r=[];for(let n=0;n"A `Dot` layer should be called on a list of exactly 2 inputs."));const t=e[0],n=e[1];if(t.length>3||n.length>3)throw new Jp("Dot layer does not support tensors of 4D or higher rank yet.");const r=this.interpretAxes(t,n);if(t[r[0]]!==n[r[1]])throw new Yp(`Dimension incompatibility: ${t[r[0]]} !== ${n[r[1]]}`)}mergeFunction(e){if(2!==e.length)throw new Yp(`A \`Dot\` layer must be called on exactly 2 inputs, but received ${e.length} input(s).`);let t,n=e[0],r=e[1];return t=Array.isArray(this.axes)?this.axes.map(((t,n)=>fw(t,e[n].shape.length))):[fw(this.axes,n.shape.length),fw(this.axes,r.shape.length)],this.normalize&&(n=Dy(n,t[0]),r=Dy(r,t[1])),function(e,t,n){if(e.shape.length>3||t.shape.length>3)throw new Jp("batchDot is not implemented for tensors of 4D or higher rank yet");if(Q(e.shape.length>=2,(()=>`batchDot requires the rank of x to be >= 2, but got ${e.shape.length}`)),Q(e.shape.length>=2,(()=>`batchDot requires the rank of y to be >= 2, but got ${t.shape.length}`)),"number"==typeof n&&(n=[n,n]),"complex64"===e.dtype||"complex64"===t.dtype)throw new Jp("batchDot is not implemented for complex64-type Tensors yet.");const r=e.shape.length,a=t.shape.length;null==n&&(n=[r-1,a-2]);const s=n;return po((()=>{let n,i;if(r>a){n=r-a;const e=[];for(let t=0;tr){n=a-r;const t=[];for(let e=0;e0){let e;e=r>a?r+a-3:r-1;const t=[];for(let r=e;r"A `Dot` layer should be called on a list of exactly 2 inputs."));const t=e[0].slice(),n=e[1].slice();if(t.length>3||n.length>3)throw new Jp("Dot layer does not support tensors of 4D or higher rank yet.");const r=this.interpretAxes(t,n);t.splice(r[0],1),n.splice(r[1],1),n.splice(0,1);const a=t.concat(n);return 1===a.length&&a.push(1),a}computeMask(e,t){return null}getConfig(){const e={axes:this.axes,normalize:this.normalize},t=super.getConfig();return Object.assign(e,t),e}}dw.className="Dot",Gi(dw);class pw extends py{constructor(e){super(e),this.supportsMasking=!0,this.stddev=e.stddev}computeOutputShape(e){return e}getConfig(){const e=super.getConfig(),t={stddev:this.stddev};return Object.assign(t,e),t}call(e,t){return po((()=>{this.invokeCallHook(e,t);const n=ry(e);return dg((()=>ig(n.shape,0,this.stddev).add(n)),(()=>n),t.training||!1)}))}}pw.className="GaussianNoise",Gi(pw);class mw extends py{constructor(e){super(e),this.supportsMasking=!0,this.rate=e.rate}computeOutputShape(e){return e}getConfig(){const e=super.getConfig(),t={rate:this.rate};return Object.assign(t,e),t}call(e,t){return po((()=>{this.invokeCallHook(e,t);const n=ry(e);return this.rate>0&&this.rate<1?dg((()=>{const e=Math.sqrt(this.rate/(1-this.rate));return n.mul(ig(n.shape,1,e))}),(()=>n),t.training||!1):n}))}}mw.className="GaussianDropout",Gi(mw);class gw extends py{constructor(e){super(e),this.supportsMasking=!0,this.rate=e.rate,this.noiseShape=e.noiseShape}_getNoiseShape(e){return this.noiseShape||ry(e).shape}computeOutputShape(e){return e}getConfig(){const e=super.getConfig(),t={rate:this.rate};return Object.assign(t,e),t}call(e,t){return po((()=>{if(this.rate<1&&this.rate>0){const n=this._getNoiseShape(e);return dg((()=>{const t=ry(e),r=-1.7580993408473766;let a=Su(Bc(n),this.rate);a=Zm(a,"float32");const s=((1-this.rate)*(1+this.rate*r**2))**-.5,i=-s*r*this.rate;return t.mul(a).add(a.add(-1).mul(r)).mul(s).add(i)}),(()=>ry(e)),t.training||!1)}return e}))}}function yw(e,t,n,r,a,s=.001){let i;if(2===e.rank)i=Ll(e,t,n,r,a,s);else if(3===e.rank)i=zl(e,t,n,r,a,s);else{if(4!==e.rank)throw new Jp(`batchNormalization is not implemented for array of rank ${e.rank} yet`);i=Wl(e,t,n,r,a,s)}return i}gw.className="AlphaDropout",Gi(gw);class bw extends py{constructor(e){null==e&&(e={}),super(e),this.supportsMasking=!0,this.axis=null==e.axis?-1:e.axis,this.momentum=null==e.momentum?.99:e.momentum,this.epsilon=null==e.epsilon?.001:e.epsilon,this.center=null==e.center||e.center,this.scale=null==e.scale||e.scale,this.betaInitializer=Mg(e.betaInitializer||"zeros"),this.gammaInitializer=Mg(e.gammaInitializer||"ones"),this.movingMeanInitializer=Mg(e.movingMeanInitializer||"zeros"),this.movingVarianceInitializer=Mg(e.movingVarianceInitializer||"ones"),this.betaConstraint=Nm(e.betaConstraint),this.gammaConstraint=Nm(e.gammaConstraint),this.betaRegularizer=uv(e.betaRegularizer),this.gammaRegularizer=uv(e.gammaRegularizer)}build(e){e=ay(e);const t=this.axis>=0?this.axis:this.axis+e.length,n=e[t];if(null==n)throw new Yp(`Axis ${t} of input tensor should have a defined dimension but the layer received an input with shape ${JSON.stringify(e)}.`);this.inputSpec=[new uy({ndim:e.length,axes:{[t]:n}})];const r=[n];this.scale&&(this.gamma=this.addWeight("gamma",r,null,this.gammaInitializer,this.gammaRegularizer,!0,this.gammaConstraint)),this.center&&(this.beta=this.addWeight("beta",r,null,this.betaInitializer,this.betaRegularizer,!0,this.betaConstraint)),this.movingMean=this.addWeight("moving_mean",r,null,this.movingMeanInitializer,null,!1),this.movingVariance=this.addWeight("moving_variance",r,null,this.movingVarianceInitializer,null,!1),this.built=!0}call(e,t){return po((()=>{const n=null!=t.training&&t.training,r=ry(e),a=r.shape,s=a.length,i=Jm(0,s),o=this.axis>=0?this.axis:this.axis+s;i.splice(o,1);const l=Qp(1,s);l[o]=a[o];const u=i.slice();u.sort();const c=!se(u,Jm(0,s).slice(0,s-1));if(!n)return(()=>{if(c){const e=this.movingMean.read().reshape(l),t=this.movingVariance.read().reshape(l),n=this.center?this.beta.read().reshape(l):null,a=this.scale?this.gamma.read().reshape(l):null;return yw(r,e,t,n,a,this.epsilon)}return yw(r,this.movingMean.read(),this.movingVariance.read(),null==this.beta?null:this.beta.read(),null==this.gamma?null:this.gamma.read(),this.epsilon)})();const[h,f,d]=function(e,t,n,r,a=.001){return se(r.slice().sort(),Jm(0,e.rank-1))?function(e,t,n,r,a=.001){return po((()=>{const s=pc(e,r),i=s.mean,o=s.variance;return[yw(e,i,o,n,t,a),i,o]}))}(e,t,n,r,a):function(e,t,n,r,a=.001){return po((()=>{const s=pc(e,r),i=s.mean,o=s.variance,l=[];for(const t of Jm(0,e.rank))-1!==r.indexOf(t)?l.push(1):l.push(e.shape[t]);const u=i.reshape(l),c=o.reshape(l),h=null==t?null:t.reshape(l),f=null==n?null:n.reshape(l);return[yw(e,u,c,f,h,a),i,o]}))}(e,t,n,r,a)}(r,this.gamma.read(),this.beta.read(),i,this.epsilon),p=(e,t,n)=>{po((()=>{const r=1-n,a=e.read(),s=a.sub(t).mul(r);e.write(a.sub(s))}))};return(()=>{p(this.movingMean,f,this.momentum),p(this.movingVariance,d,this.momentum)})(),h}))}getConfig(){const e={axis:this.axis,momentum:this.momentum,epsilon:this.epsilon,center:this.center,scale:this.scale,betaInitializer:Og(this.betaInitializer),gammaInitializer:Og(this.gammaInitializer),movingMeanInitializer:Og(this.movingMeanInitializer),movingVarianceInitializer:Og(this.movingVarianceInitializer),betaRegularizer:ov(this.betaRegularizer),gammaRegularizer:ov(this.gammaRegularizer),betaConstraint:Cm(this.betaConstraint),gammaConstraint:Cm(this.gammaConstraint)},t=super.getConfig();return Object.assign(e,t),e}}bw.className="BatchNormalization",Gi(bw);class vw extends py{constructor(e){if(null==e&&(e={}),super(e),this.axis=null==e.axis?-1:e.axis,"number"==typeof this.axis){if(!Number.isInteger(this.axis))throw new Error(`Expected axis to be an integer, but received ${this.axis}`)}else{if(!Array.isArray(this.axis))throw new Error(`Expected axis to be an integer or an array of integers, but received ${JSON.stringify(this.axis)}`);for(const e of this.axis)if(!Number.isInteger(e))throw new Error(`Expected axis to be an array of integers, but received ${JSON.stringify(this.axis)}`)}this.epsilon=null==e.epsilon?.001:e.epsilon,this.center=null==e.center||e.center,this.scale=null==e.scale||e.scale,this.betaInitializer=Mg(e.betaInitializer||"zeros"),this.gammaInitializer=Mg(e.gammaInitializer||"ones"),this.betaRegularizer=uv(e.betaRegularizer),this.gammaRegularizer=uv(e.gammaRegularizer),this.supportsMasking=!0}build(e){const t=(e=ay(e)).length;"number"==typeof this.axis&&(this.axis=[this.axis]);for(let e=0;e=t)throw new Error(`Invalid axis: ${e}`);if(this.axis.length!==hm(this.axis).length)throw new Error(`Found duplicate axes in: ${this.axis}`);const n=this.axis.map((t=>e[t]));this.scale?this.gamma=this.addWeight("gamma",n,"float32",this.gammaInitializer,this.gammaRegularizer,!0):this.gamma=null,this.center?this.beta=this.addWeight("beta",n,"float32",this.betaInitializer,this.betaRegularizer,!0):this.beta=null,this.built=!0}call(e,t){const n=ry(e),r=n.shape,a=r.length;return po((()=>{let{mean:e,variance:t}=pc(n,this.axis,!0);const s=Qp(1,a);for(const e of this.axis)s[e]=r[e];const i=e=>null!=e&&e.shape.length!==a&&this.axis!==[a-1]?e.reshape(s):e;let o=i(this.gamma.read()),l=i(this.beta.read());const u=[],c=[];for(let e=0;e=0?e[2]+this.padding[0][0]+this.padding[0][1]:null,n=null!=e[3]&&e[3]>=0?e[3]+this.padding[1][0]+this.padding[1][1]:null,[e[0],e[1],t,n]):(t=null!=e[1]&&e[1]>=0?e[1]+this.padding[0][0]+this.padding[0][1]:null,n=null!=e[2]&&e[2]>=0?e[2]+this.padding[1][0]+this.padding[1][1]:null,[e[0],t,n,e[3]])}call(e,t){return po((()=>{return t=ry(e),n=this.padding,r=this.dataFormat,po((()=>{if(4!==t.rank)throw new Yp(`temporalPadding expects input tensor to be 4-D, but received a ${t.rank}-D tensor.`);if(null==n&&(n=[[1,1],[1,1]]),2!==n.length||2!==n[0].length||2!==n[1].length)throw new Yp("spatial2dPadding expects `padding` to be an Array of two Arrays, each of which is an Array of two integers.");if(null==r&&(r="channelsLast"),"channelsLast"!==r&&"channelsFirst"!==r)throw new Yp(`Unknown data format: ${r}. Supported data formats are 'channelsLast' and 'channelsFirst.`);let e;return e="channelsFirst"===r?[[0,0],[0,0],n[0],n[1]]:[[0,0],n[0],n[1],[0,0]],wc(t,e)}));var t,n,r}))}getConfig(){const e={padding:this.padding,dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}}function _w(e,t,n,r,a,s){return po((()=>{let i;Pm(a),zm(s),Lm(r),null==n&&(n=[1,1]),null==r&&(r="valid"),null==a&&(a="channelsLast"),null==s&&(s="max"),e=vv(e,a);const o="same"===r?"same":"valid";return i="max"===s?rc(e,t,n,o):Dl(e,t,n,o),"channelsFirst"===a&&(i=gi(i,[0,3,1,2])),i}))}function xw(e,t,n,r,a,s){return po((()=>{let i;Pm(a),zm(s),Lm(r),null==n&&(n=[1,1,1]),null==r&&(r="valid"),null==a&&(a="channelsLast"),null==s&&(s="max"),e=wv(e,a);const o="same"===r?"same":"valid";return i="max"===s?ac(e,t,n,o):Tl(e,t,n,o),"channelsFirst"===a&&(i=gi(i,[0,4,1,2,3])),i}))}ww.className="ZeroPadding2D",Gi(ww);class kw extends py{constructor(e){if(null==e.poolSize&&(e.poolSize=2),super(e),"number"==typeof e.poolSize)this.poolSize=[e.poolSize];else{if(!Array.isArray(e.poolSize)||1!==e.poolSize.length||"number"!=typeof e.poolSize[0])throw new Yp(`poolSize for 1D convolutional layer must be a number or an Array of a single number, but received ${JSON.stringify(e.poolSize)}`);this.poolSize=e.poolSize}if(mm(this.poolSize,"poolSize"),null==e.strides)this.strides=this.poolSize;else if("number"==typeof e.strides)this.strides=[e.strides];else{if(!Array.isArray(e.strides)||1!==e.strides.length||"number"!=typeof e.strides[0])throw new Yp(`strides for 1D convolutional layer must be a number or an Array of a single number, but received ${JSON.stringify(e.strides)}`);this.strides=e.strides}mm(this.strides,"strides"),this.padding=null==e.padding?"valid":e.padding,Lm(this.padding),this.inputSpec=[new uy({ndim:3})]}computeOutputShape(e){const t=yv((e=ay(e))[1],this.poolSize[0],this.padding,this.strides[0]);return[e[0],t,e[2]]}call(e,t){return po((()=>{this.invokeCallHook(e,t),e=Qm(ry(e),2);const n=this.poolingFunction(ry(e),[this.poolSize[0],1],[this.strides[0],1],this.padding,"channelsLast");return fh(n,[2])}))}getConfig(){const e={poolSize:this.poolSize,padding:this.padding,strides:this.strides},t=super.getConfig();return Object.assign(e,t),e}}class Ew extends kw{constructor(e){super(e)}poolingFunction(e,t,n,r,a){return Pm(a),Lm(r),_w(e,t,n,r,a,"max")}}Ew.className="MaxPooling1D",Gi(Ew);class Cw extends kw{constructor(e){super(e)}poolingFunction(e,t,n,r,a){return Pm(a),Lm(r),_w(e,t,n,r,a,"avg")}}Cw.className="AveragePooling1D",Gi(Cw);class Sw extends py{constructor(e){if(null==e.poolSize&&(e.poolSize=[2,2]),super(e),this.poolSize=Array.isArray(e.poolSize)?e.poolSize:[e.poolSize,e.poolSize],null==e.strides)this.strides=this.poolSize;else if(Array.isArray(e.strides)){if(2!==e.strides.length)throw new Yp(`If the strides property of a 2D pooling layer is an Array, it is expected to have a length of 2, but received length ${e.strides.length}.`);this.strides=e.strides}else this.strides=[e.strides,e.strides];mm(this.poolSize,"poolSize"),mm(this.strides,"strides"),this.padding=null==e.padding?"valid":e.padding,this.dataFormat=null==e.dataFormat?"channelsLast":e.dataFormat,Pm(this.dataFormat),Lm(this.padding),this.inputSpec=[new uy({ndim:4})]}computeOutputShape(e){e=ay(e);let t="channelsFirst"===this.dataFormat?e[2]:e[1],n="channelsFirst"===this.dataFormat?e[3]:e[2];return t=yv(t,this.poolSize[0],this.padding,this.strides[0]),n=yv(n,this.poolSize[1],this.padding,this.strides[1]),"channelsFirst"===this.dataFormat?[e[0],e[1],t,n]:[e[0],t,n,e[3]]}call(e,t){return po((()=>(this.invokeCallHook(e,t),this.poolingFunction(ry(e),this.poolSize,this.strides,this.padding,this.dataFormat))))}getConfig(){const e={poolSize:this.poolSize,padding:this.padding,strides:this.strides,dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}}class Nw extends Sw{constructor(e){super(e)}poolingFunction(e,t,n,r,a){return Pm(a),Lm(r),_w(e,t,n,r,a,"max")}}Nw.className="MaxPooling2D",Gi(Nw);class Iw extends Sw{constructor(e){super(e)}poolingFunction(e,t,n,r,a){return Pm(a),Lm(r),_w(e,t,n,r,a,"avg")}}Iw.className="AveragePooling2D",Gi(Iw);class Aw extends py{constructor(e){if(null==e.poolSize&&(e.poolSize=[2,2,2]),super(e),this.poolSize=Array.isArray(e.poolSize)?e.poolSize:[e.poolSize,e.poolSize,e.poolSize],null==e.strides)this.strides=this.poolSize;else if(Array.isArray(e.strides)){if(3!==e.strides.length)throw new Yp(`If the strides property of a 3D pooling layer is an Array, it is expected to have a length of 3, but received length ${e.strides.length}.`);this.strides=e.strides}else this.strides=[e.strides,e.strides,e.strides];mm(this.poolSize,"poolSize"),mm(this.strides,"strides"),this.padding=null==e.padding?"valid":e.padding,this.dataFormat=null==e.dataFormat?"channelsLast":e.dataFormat,Pm(this.dataFormat),Lm(this.padding),this.inputSpec=[new uy({ndim:5})]}computeOutputShape(e){e=ay(e);let t="channelsFirst"===this.dataFormat?e[2]:e[1],n="channelsFirst"===this.dataFormat?e[3]:e[2],r="channelsFirst"===this.dataFormat?e[4]:e[3];return t=yv(t,this.poolSize[0],this.padding,this.strides[0]),n=yv(n,this.poolSize[1],this.padding,this.strides[1]),r=yv(r,this.poolSize[2],this.padding,this.strides[2]),"channelsFirst"===this.dataFormat?[e[0],e[1],t,n,r]:[e[0],t,n,r,e[4]]}call(e,t){return po((()=>(this.invokeCallHook(e,t),this.poolingFunction(ry(e),this.poolSize,this.strides,this.padding,this.dataFormat))))}getConfig(){const e={poolSize:this.poolSize,padding:this.padding,strides:this.strides,dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}}class Dw extends Aw{constructor(e){super(e)}poolingFunction(e,t,n,r,a){return Pm(a),Lm(r),xw(e,t,n,r,a,"max")}}Dw.className="MaxPooling3D",Gi(Dw);class Tw extends Aw{constructor(e){super(e)}poolingFunction(e,t,n,r,a){return Pm(a),Lm(r),xw(e,t,n,r,a,"avg")}}Tw.className="AveragePooling3D",Gi(Tw);class Fw extends py{constructor(e){super(e),this.inputSpec=[new uy({ndim:3})]}computeOutputShape(e){return[e[0],e[2]]}call(e,t){throw new Jp}}class Rw extends Fw{constructor(e){super(e||{})}call(e,t){return po((()=>{const t=ry(e);return ic(t,1)}))}}Rw.className="GlobalAveragePooling1D",Gi(Rw);class Ow extends Fw{constructor(e){super(e||{})}call(e,t){return po((()=>{const t=ry(e);return Wu(t,1)}))}}Ow.className="GlobalMaxPooling1D",Gi(Ow);class Mw extends py{constructor(e){super(e),this.dataFormat=null==e.dataFormat?"channelsLast":e.dataFormat,Pm(this.dataFormat),this.inputSpec=[new uy({ndim:4})]}computeOutputShape(e){return e=e,"channelsLast"===this.dataFormat?[e[0],e[3]]:[e[0],e[1]]}call(e,t){throw new Jp}getConfig(){const e={dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}}class Bw extends Mw{call(e,t){return po((()=>{const t=ry(e);return"channelsLast"===this.dataFormat?ic(t,[1,2]):ic(t,[2,3])}))}}Bw.className="GlobalAveragePooling2D",Gi(Bw);class $w extends Mw{call(e,t){return po((()=>{const t=ry(e);return"channelsLast"===this.dataFormat?Wu(t,[1,2]):Wu(t,[2,3])}))}}$w.className="GlobalMaxPooling2D",Gi($w);class Pw extends py{constructor(e){super(e),this.layer=e.layer}build(e){this.built=!0}get trainable(){return null!=this.layer&&this.layer.trainable}set trainable(e){null!=this.layer&&(this.layer.trainable=e)}get trainableWeights(){return this.layer.trainableWeights}get nonTrainableWeights(){return this.layer.nonTrainableWeights}get updates(){return this.layer._updates}get losses(){return this.layer.losses}getWeights(){return this.layer.getWeights()}setWeights(e){this.layer.setWeights(e)}getConfig(){const e={layer:{className:this.layer.getClassName(),config:this.layer.getConfig()}},t=super.getConfig();return Object.assign(e,t),e}setFastWeightInitDuringBuild(e){super.setFastWeightInitDuringBuild(e),null!=this.layer&&this.layer.setFastWeightInitDuringBuild(e)}static fromConfig(e,t,n={}){const r=Ay(t.layer,n);delete t.layer;const a={layer:r};return Object.assign(a,t),new e(a)}}class Lw extends Pw{constructor(e){super(e),this.supportsMasking=!0}build(e){if((e=ay(e)).length<3)throw new Yp(`TimeDistributed layer expects an input shape >= 3D, but received input shape ${JSON.stringify(e)}`);this.inputSpec=[{shape:e}];const t=[e[0]].concat(e.slice(2));this.layer.built||(this.layer.build(t),this.layer.built=!0),super.build(e)}computeOutputShape(e){const t=[(e=ay(e))[0]].concat(e.slice(2)),n=this.layer.computeOutputShape(t),r=e[1];return[n[0],r].concat(n.slice(1))}call(e,t){return po((()=>Mv(((e,n)=>[ry(this.layer.call(e,t)),[]]),e=ry(e),[],!1,null,null,!1,!0)[1]))}}Lw.className="TimeDistributed",Gi(Lw);class zw extends Pw{constructor(e){super(e);const t=e.layer.getConfig(),n={};n.className=e.layer.getClassName(),n.config=t,this.forwardLayer=Ay(n),t.goBackwards=!0!==t.goBackwards;const r={};var a;if(r.className=e.layer.getClassName(),r.config=t,this.backwardLayer=Ay(r),this.forwardLayer.name="forward_"+this.forwardLayer.name,this.backwardLayer.name="backward_"+this.backwardLayer.name,this.mergeMode=void 0===e.mergeMode?"concat":e.mergeMode,a=this.mergeMode,dm(Bm,"BidirectionalMergeMode",a),e.weights)throw new Jp("weights support is not implemented for Bidirectional layer yet.");this._stateful=e.layer.stateful,this.returnSequences=e.layer.returnSequences,this.returnState=e.layer.returnState,this.supportsMasking=!0,this._trainable=!0,this.inputSpec=e.layer.inputSpec,this.numConstants=null}get trainable(){return this._trainable}set trainable(e){this._trainable=e,null!=this.forwardLayer&&(this.forwardLayer.trainable=e),null!=this.backwardLayer&&(this.backwardLayer.trainable=e)}getWeights(){return this.forwardLayer.getWeights().concat(this.backwardLayer.getWeights())}setWeights(e){const t=e.length,n=Math.floor(t/2);this.forwardLayer.setWeights(e.slice(0,n)),this.backwardLayer.setWeights(e.slice(n))}computeOutputShape(e){let t,n,r,a=this.forwardLayer.computeOutputShape(e);return Array.isArray(a)&&Array.isArray(a[0])||(a=[a]),a=a,this.returnState?(r=a.slice(1),t=a[0]):t=a[0],t=t,"concat"===this.mergeMode?(t[t.length-1]*=2,n=[t]):n=null==this.mergeMode?[t,t.slice()]:[t],this.returnState?null==this.mergeMode?n.concat(r).concat(r.slice()):[t].concat(r).concat(r.slice()):nm(n)}apply(e,t){let n=null==t?null:t.initialState,r=null==t?null:t.constants;null==t&&(t={});const a=Ov(e,n,r,this.numConstants);if(e=a.inputs,n=a.initialState,r=a.constants,Array.isArray(e)&&(n=e.slice(1),e=e[0]),(null==n||0===n.length)&&null==r)return super.apply(e,t);const s=[],i=[];if(null!=n){const e=n.length;if(e%2>0)throw new Yp("When passing `initialState` to a Bidrectional RNN, the state should be an Array containing the states of the underlying RNNs.");t.initialState=n,s.push(...n);const r=n.map((e=>new uy({shape:e.shape})));this.forwardLayer.stateSpec=r.slice(0,e/2),this.backwardLayer.stateSpec=r.slice(e/2),i.push(...r)}if(null!=r)throw new Jp("Support for constants in Bidirectional layers is not implemented yet.");const o=s[0]instanceof cy;for(const e of s)if(e instanceof cy!==o)throw new Yp("The initial state of a Bidirectional layer cannot be specified as a mix of symbolic and non-symbolic tensors");if(o){const n=[e].concat(s),r=this.inputSpec.concat(i),a=this.inputSpec;this.inputSpec=r;const o=super.apply(n,t);return this.inputSpec=a,o}return super.apply(e,t)}call(e,t){return po((()=>{const n=t.initialState;let r,a,s,i;if(null==n)r=this.forwardLayer.call(e,t),a=this.backwardLayer.call(e,t);else{const s=n.slice(0,n.length/2),i=n.slice(n.length/2);r=this.forwardLayer.call(e,Object.assign(t,{initialState:s})),a=this.backwardLayer.call(e,Object.assign(t,{initialState:i}))}return this.returnState&&(Array.isArray(r)&&(s=r.slice(1).concat(a.slice(1))),r=r[0],a=a[0]),this.returnSequences&&(a=Uc(a,1)),"concat"===this.mergeMode?i=rg([r,a]):"sum"===this.mergeMode?i=No(r,a):"ave"===this.mergeMode?i=Do(.5,No(r,a)):"mul"===this.mergeMode?i=Do(r,a):null==this.mergeMode&&(i=[r,a]),this.returnState?null==this.mergeMode?i.concat(s):[i].concat(s):i}))}resetStates(e){this.forwardLayer.resetStates(),this.backwardLayer.resetStates()}build(e){Um(this.forwardLayer.name,(()=>{this.forwardLayer.build(e)})),Um(this.backwardLayer.name,(()=>{this.backwardLayer.build(e)})),this.built=!0}computeMask(e,t){let n;if(Array.isArray(t)&&(t=t[0]),n=this.returnSequences?null==this.mergeMode?[t,t]:t:null==this.mergeMode?[null,null]:null,this.returnState){const e=this.forwardLayer.states.map((e=>null));return Array.isArray(n)?n.concat(e).concat(e):[n].concat(e).concat(e)}return n}get trainableWeights(){return this.forwardLayer.trainableWeights.concat(this.backwardLayer.trainableWeights)}get nonTrainableWeights(){return this.forwardLayer.nonTrainableWeights.concat(this.backwardLayer.nonTrainableWeights)}setFastWeightInitDuringBuild(e){super.setFastWeightInitDuringBuild(e),null!=this.forwardLayer&&this.forwardLayer.setFastWeightInitDuringBuild(e),null!=this.backwardLayer&&this.backwardLayer.setFastWeightInitDuringBuild(e)}getConfig(){const e={mergeMode:this.mergeMode},t=super.getConfig();return Object.assign(e,t),e}static fromConfig(e,t){const n=Ay(t.layer);if(delete t.layer,null!=t.numConstants)throw new Jp("Deserialization of a Bidirectional layer with numConstants present is not supported yet.");const r=t;return r.layer=n,new e(r)}}function Ww(e){return new gy(e)}function Uw(e){return new dv(e)}function Vw(e){return new cv(e)}function jw(e){return new hv(e)}function Hw(e){return new fv(e)}function Gw(e){return new mv(e)}function Xw(e){return new pv(e)}function Kw(e){return new Dv(e)}function qw(e){return new Ev(e)}function Yw(e){return new Sv(e)}function Jw(e){return new Cv(e)}function Zw(e){return new Nv(e)}function Qw(e){return new Av(e)}function e_(e){return new Tv(e)}function t_(e){return new Fv(e)}function n_(e){return new Rv(e)}function r_(e){return new Qv(e)}function a_(e){return new Jv(e)}function s_(e){return new qv(e)}function i_(e){return new Yv(e)}function o_(e){return new Zv(e)}function l_(e){return new ew(e)}function u_(e){return new tw(e)}function c_(e){return new nw(e)}function h_(e){return new aw(e)}function f_(e){return new iw(e)}function d_(e){return new lw(e)}function p_(e){return new hw(e)}function m_(e){return new uw(e)}function g_(e){return new cw(e)}function y_(e){return new ow(e)}function b_(e){return new dw(e)}function v_(e){return new bw(e)}function w_(e){return new vw(e)}function __(e){return new ww(e)}function x_(e){return new Cw(e)}function k_(e){return x_(e)}function E_(e){return x_(e)}function C_(e){return new Iw(e)}function S_(e){return C_(e)}function N_(e){return C_(e)}function I_(e){return new Tw(e)}function A_(e){return I_(e)}function D_(e){return I_(e)}function T_(e){return new Rw(e)}function F_(e){return new Bw(e)}function R_(e){return new Ow(e)}function O_(e){return new $w(e)}function M_(e){return new Ew(e)}function B_(e){return new Nw(e)}function $_(e){return new Dw(e)}function P_(e){return new Wv(e)}function L_(e){return new zv(e)}function z_(e){return new Vv(e)}function W_(e){return new Uv(e)}function U_(e){return new Lv(e)}function V_(e){return new Pv(e)}function j_(e){return new Kv(e)}function H_(e){return new Xv(e)}function G_(e){return new Bv(e)}function X_(e){return new jv(e)}function K_(e){return new zw(e)}function q_(e){return new Lw(e)}zw.className="Bidirectional",Gi(zw);const Y_=R_,J_=O_,Z_=M_,Q_=B_;function ex(e){return new pw(e)}function tx(e){return new mw(e)}function nx(e){return new gw(e)}function rx(e){return new rw(e)}function ax(e,t){return zy(e,t)}function sx(e,t){return jy(e,t)}function ix(e,t){return Hy(e,t)}function ox(e,t){return Wy(e,t)}function lx(e,t){return Gy(e,t)}function ux(e,t){return Vy(e,t)}function cx(e,t){return function(e,t){return po((()=>{const n=Uy(e,t),r=function(e,t){return po((()=>Qu(e.equal(1),t.equal(0)).sum().cast("float32")))}(e,t),a=n.add(r);return fu(Cu(a,0),n.div(a),0).cast("float32")}))}(e,t)}function hx(e,t){return $y(e,t)}function fx(e,t){return Fy(e,t)}function dx(e,t){return Ry(e,t)}function px(e,t){return Ry(e,t)}function mx(e,t){return Ry(e,t)}function gx(e,t){return Ty(e,t)}function yx(e,t){return Ty(e,t)}function bx(e,t){return Ty(e,t)}function vx(e){return new sv(e)}function wx(e){return rv(t=e),new sv({l1:null!=t?t.l1:null,l2:0});var t}function _x(e){return rv(t=e),new sv({l2:null!=t?t.l2:null,l1:0});var t}class xx extends _y{constructor(){super(...arguments),this.model=null}setModel(e){if(!(e instanceof Db))throw new Error("model must be a LayersModel, not some other Container");this.model=e}}function kx(e,t){return et}class Cx extends xx{constructor(e){if(super(),null==e&&(e={}),e.restoreBestWeights)throw new Jp("restoreBestWeights = True is not implemented in EarlyStopping yet.");this.monitor=e.monitor||"val_loss",this.minDelta=Math.abs(e.minDelta||0),this.patience=e.patience||0,this.verbose=e.verbose||0,this.mode=e.mode||"auto",this.baseline=e.baseline,-1===["auto","min","max"].indexOf(this.mode)&&(console.warn(`EarlyStopping mode '${this.mode}' is invalid. Falling back to mode 'auto'.`),this.mode="auto"),"min"===this.mode?this.monitorFunc=kx:"max"===this.mode||-1!==this.monitor.indexOf("acc")?this.monitorFunc=Ex:this.monitorFunc=kx,this.monitorFunc===kx&&(this.minDelta*=-1)}async onTrainBegin(e){this.wait=0,this.stoppedEpoch=0,null!=this.baseline?this.best=this.baseline:this.best=this.monitorFunc===kx?1/0:-1/0}async onEpochEnd(e,t){await by(t);const n=this.getMonitorValue(t);null!=n&&(this.monitorFunc(n-this.minDelta,this.best)?(this.best=n,this.wait=0):(this.wait++,this.wait>=this.patience&&(this.stoppedEpoch=e,this.model.stopTraining=!0)))}async onTrainEnd(e){this.stoppedEpoch>0&&this.verbose&&console.log(`Epoch ${this.stoppedEpoch}: early stopping.`)}getMonitorValue(e){null==e&&(e={});const t=e[this.monitor];return null==t&&console.warn(`Metric for EarlyStopping ${this.monitor} is not available. Available metrics are: ${Object.keys(e)}`),t}}const Sx={earlyStopping:function(e){return new Cx(e)}};var Nx,Ix;!function(e){e[e.DT_INVALID=0]="DT_INVALID",e[e.DT_FLOAT=1]="DT_FLOAT",e[e.DT_DOUBLE=2]="DT_DOUBLE",e[e.DT_INT32=3]="DT_INT32",e[e.DT_UINT8=4]="DT_UINT8",e[e.DT_INT16=5]="DT_INT16",e[e.DT_INT8=6]="DT_INT8",e[e.DT_STRING=7]="DT_STRING",e[e.DT_COMPLEX64=8]="DT_COMPLEX64",e[e.DT_INT64=9]="DT_INT64",e[e.DT_BOOL=10]="DT_BOOL",e[e.DT_QINT8=11]="DT_QINT8",e[e.DT_QUINT8=12]="DT_QUINT8",e[e.DT_QINT32=13]="DT_QINT32",e[e.DT_BFLOAT16=14]="DT_BFLOAT16",e[e.DT_FLOAT_REF=101]="DT_FLOAT_REF",e[e.DT_DOUBLE_REF=102]="DT_DOUBLE_REF",e[e.DT_INT32_REF=103]="DT_INT32_REF",e[e.DT_UINT8_REF=104]="DT_UINT8_REF",e[e.DT_INT16_REF=105]="DT_INT16_REF",e[e.DT_INT8_REF=106]="DT_INT8_REF",e[e.DT_STRING_REF=107]="DT_STRING_REF",e[e.DT_COMPLEX64_REF=108]="DT_COMPLEX64_REF",e[e.DT_INT64_REF=109]="DT_INT64_REF",e[e.DT_BOOL_REF=110]="DT_BOOL_REF",e[e.DT_QINT8_REF=111]="DT_QINT8_REF",e[e.DT_QUINT8_REF=112]="DT_QUINT8_REF",e[e.DT_QINT32_REF=113]="DT_QINT32_REF",e[e.DT_BFLOAT16_REF=114]="DT_BFLOAT16_REF"}(Nx||(Nx={})),function(e){let t;!function(e){e[e.LEGACY=0]="LEGACY",e[e.V1=1]="V1",e[e.V2=2]="V2"}(t=e.CheckpointFormatVersion||(e.CheckpointFormatVersion={}))}(Ix||(Ix={}));const Ax={};function Dx(e,t){const n={tfOpName:e,category:"custom",inputs:[],attrs:[],customExecutor:t};Ax[e]=n}function Tx(e){return Ax[e]}function Fx(e){delete Ax[e]}function Rx(e,t,n,r,a){const s=t.inputParams[e];if(s&&void 0!==s.inputIndexStart){const e=s.inputIndexStart,i=0===s.inputIndexEnd?void 0:void 0===s.inputIndexEnd?e+1:s.inputIndexEnd;if("tensor"===s.type)return Ox(t.inputNames[s.inputIndexStart],n,r,a);if("tensors"===s.type)return t.inputNames.slice(e,i).map((e=>Ox(e,n,r,a)));const o=Ox(t.inputNames.slice(e)[0],n,r,a),l=o.dataSync();return"number"===s.type?l[0]:Te(o.shape,l)}const i=t.attrParams[e];return i&&i.value}function Ox(e,t,n,r){const[a,s]=$x(e);if(null!=r){const e=r.getHashTableHandleByName(a);if(null!=e)return e}const i=n.currentContextIds.find((e=>!!t[Bx(a,e)]));return void 0!==i?t[Bx(a,i)][s]:void 0}function Mx(e,t){const[n,r]=$x(e);return[Bx(n,t&&t.currentContextId),r]}function Bx(e,t){return t?`${e}-${t}`:e}function $x(e){const t=e.split(":");return 1===t.length?[e,0]:[t[0],Number(t[t.length-1])]}function Px(e,t,n){let r=Rx("pad",e,t,n);if("explicit"===r){r=Rx("explicitPaddings",e,t,n);const a=[[0,0],[0,0],[0,0],[0,0]];for(let e=0;e<4;e++)a[e][0]=r[2*e],a[e][1]=r[2*e+1];return a}return r}function Lx(e){return e.kept?e:qs(e)}const zx=[{tfOpName:"Add",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"AddV2",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"AddN",category:"arithmetic",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}]},{tfOpName:"BiasAdd",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"Sub",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"RealDiv",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Div",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"DivNoNan",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"FloorDiv",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Mul",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Maximum",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Minimum",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Pow",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"SquaredDifference",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Mod",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"FloorMod",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}],Wx=[{tfOpName:"Abs",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Acos",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Asin",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Atan",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Atan2",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"y",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Ceil",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ClipByValue",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"clipValueMin",type:"number"},{start:2,name:"clipValueMax",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Complex",category:"basic_math",inputs:[{start:0,name:"real",type:"tensor"},{start:1,name:"imag",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ComplexAbs",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Cos",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Cosh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Elu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Exp",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Floor",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Log",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Imag",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"Tout",name:"outputType",type:"dtype",notSupported:!0}]},{tfOpName:"Neg",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Real",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"Tout",name:"outputType",type:"dtype",notSupported:!0}]},{tfOpName:"Prelu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"alpha",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Relu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Relu6",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Selu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sigmoid",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sin",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sinh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sqrt",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Rsqrt",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Square",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Tan",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Tanh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sign",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Round",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Expm1",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Log1p",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Reciprocal",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Softplus",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Asinh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Acosh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Atanh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Erf",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Prod",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axes",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool",notSupported:!0},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LeakyRelu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"alpha",name:"alpha",type:"number",defaultValue:.2},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"IsNan",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}],Ux=[{tfOpName:"EmptyTensorList",category:"control",inputs:[{start:0,name:"elementShape",type:"shape"},{start:1,name:"maxNumElements",type:"number"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"LoopCond",category:"control",inputs:[{start:0,name:"pred",type:"tensor"}]},{tfOpName:"Switch",category:"control",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"pred",type:"tensor"}]},{tfOpName:"Merge",category:"control",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}]},{tfOpName:"Enter",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"frame_name",name:"frameName",type:"string"},{tfName:"is_constant",name:"isConstant",type:"bool"}]},{tfOpName:"Exit",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"NextIteration",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"TensorArrayV3",category:"control",inputs:[{start:0,name:"size",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"element_shape",name:"elementShape",type:"shape"},{tfName:"dynamic_size",name:"dynamicSize",type:"bool"},{tfName:"clear_after_read",name:"clearAfterRead",type:"bool"},{tfName:"identical_element_shapes",name:"identicalElementShapes",type:"bool"},{tfName:"tensor_array_name",name:"name",type:"string"}]},{tfOpName:"TensorArrayWriteV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"tensor",type:"tensor"},{start:3,name:"flowIn",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"TensorArrayReadV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"flowIn",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"TensorArrayGatherV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"flowIn",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"element_shape",name:"elementShape",type:"shape"}]},{tfOpName:"TensorArrayScatterV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"tensor",type:"tensor"},{start:3,name:"flowIn",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"TensorArrayConcatV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"flowIn",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"element_shape_except0",name:"elementShapeExcept0",type:"shape",notSupported:!0}]},{tfOpName:"TensorArraySplitV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"tensor",type:"tensor"},{start:2,name:"lengths",type:"number[]"},{start:3,name:"flowIn",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"TensorArraySizeV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"flowIn",type:"number"}]},{tfOpName:"TensorArrayCloseV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"}]},{tfOpName:"StatelessIf",category:"control",inputs:[{start:0,name:"cond",type:"tensor"},{start:1,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"then_branch",name:"thenBranch",type:"func"},{tfName:"else_branch",name:"elseBranch",type:"func"}]},{tfOpName:"If",category:"control",inputs:[{start:0,name:"cond",type:"tensor"},{start:1,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"then_branch",name:"thenBranch",type:"func"},{tfName:"else_branch",name:"elseBranch",type:"func"}]},{tfOpName:"StatelessWhile",category:"control",inputs:[{start:0,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"cond",name:"cond",type:"func"},{tfName:"body",name:"body",type:"func"}]},{tfOpName:"While",category:"control",inputs:[{start:0,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"cond",name:"cond",type:"func"},{tfName:"body",name:"body",type:"func"}]},{tfOpName:"TensorListScatter",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListScatterV2",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"elementShape",type:"shape"},{start:3,name:"numElements",type:"number"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListGather",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListGetItem",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListSetItem",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"tensor",type:"tensor"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListReserve",category:"control",inputs:[{start:0,name:"elementShape",type:"shape"},{start:1,name:"numElements",type:"number"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListFromTensor",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListStack",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"},{tfName:"num_elements",name:"numElements",type:"dtype"}]},{tfOpName:"TensorListSplit",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"elementShape",type:"shape"},{start:2,name:"lengths",type:"number[]"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListConcat",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"}],attrs:[{tfName:"element_shape",name:"elementShape",type:"shape"},{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListPopBack",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListPushBack",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"tensor",type:"tensor"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]}],Vx=[{tfOpName:"AvgPool",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MaxPool",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[],notSupported:!0},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MaxPoolWithArgmax",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"include_batch_in_index",name:"includeBatchInIndex",type:"bool"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"AvgPool3D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MaxPool3D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Conv1D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"stride",name:"stride",type:"number"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NWC"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"dilation",name:"dilation",type:"number",defaultValue:1}]},{tfOpName:"Conv2D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"useCudnnOnGpu",name:"useCudnnOnGpu",type:"bool"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"_FusedConv2D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"},{start:2,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"num_args",name:"numArgs",type:"number"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"use_cudnn_on_gpu",name:"useCudnnOnGpu",type:"bool",defaultValue:!0},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"dilations",name:"dilations",type:"number[]",defaultValue:[1,1,1,1]},{tfName:"fused_ops",name:"fusedOps",type:"string[]",defaultValue:[]},{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:1e-4},{tfName:"leakyrelu_alpha",name:"leakyreluAlpha",type:"number"}]},{tfOpName:"Conv2DBackpropInput",category:"convolution",inputs:[{start:2,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"},{start:0,name:"outputShape",type:"number[]"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]",notSupported:!0}]},{tfOpName:"DepthwiseConv2d",category:"convolution",inputs:[{start:0,name:"input",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"DepthwiseConv2dNative",category:"convolution",inputs:[{start:0,name:"input",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"FusedDepthwiseConv2dNative",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"},{start:2,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"num_args",name:"numArgs",type:"number"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"dilations",name:"dilations",type:"number[]",defaultValue:[1,1,1,1]},{tfName:"fused_ops",name:"fusedOps",type:"string[]",defaultValue:[]},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]}]},{tfOpName:"Conv3D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"Dilation2D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"rates",name:"dilations",type:"number[]"},{tfName:"padding",name:"pad",type:"string"}]}],jx=[{tfOpName:"Fill",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"},{start:1,name:"value",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"LinSpace",category:"creation",inputs:[{start:0,name:"start",type:"number"},{start:1,name:"stop",type:"number"},{start:2,name:"num",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"OneHot",category:"creation",inputs:[{start:0,name:"indices",type:"tensor"},{start:1,name:"depth",type:"number"},{start:2,name:"onValue",type:"number",defaultValue:1},{start:3,name:"offValue",type:"number",defaultValue:0}],attrs:[{tfName:"axis",name:"axis",type:"number",notSupported:!0},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Ones",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"OnesLike",category:"creation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"}]},{tfOpName:"RandomUniform",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"minval",name:"minval",type:"number",defaultValue:0},{tfName:"maxval",name:"maxval",type:"number",defaultValue:1},{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"seed",name:"seed",type:"number",defaultValue:0},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,notSupported:!0},{tfName:"T",name:"T",type:"number",notSupported:!0}]},{tfOpName:"Range",category:"creation",inputs:[{start:0,name:"start",type:"number"},{start:1,name:"stop",type:"number"},{start:2,name:"step",type:"number",defaultValue:0}],attrs:[{tfName:"Tidx",name:"dtype",type:"dtype"}]},{tfOpName:"TruncatedNormal",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"means",name:"mean",type:"number",defaultValue:0},{tfName:"stddev",name:"stdDev",type:"number",defaultValue:1},{tfName:"seed",name:"seed",type:"number"},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,notSupported:!0},{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"T",name:"T",type:"number",notSupported:!0}]},{tfOpName:"Zeros",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"ZerosLike",category:"creation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"Multinomial",category:"creation",inputs:[{start:0,name:"logits",type:"tensor"},{start:1,name:"numSamples",type:"number"}],attrs:[{tfName:"seed",name:"seed",type:"number"},{tfName:"seed2",name:"seed2",type:"number"},{tfName:"T",name:"dtype",type:"dtype"},{tfName:"output_dtype",name:"output_dtype",type:"dtype"}]}],Hx=[{tfOpName:"NonMaxSuppressionV2",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"}]},{tfOpName:"NonMaxSuppressionV3",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"},{start:4,name:"scoreThreshold",type:"number"}]},{tfOpName:"NonMaxSuppressionV4",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"},{start:4,name:"scoreThreshold",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"T_threshold",name:"threshold",type:"dtype",notSupported:!0},{tfName:"pad_to_max_output_size",name:"padToMaxOutputSize",type:"bool"}]},{tfOpName:"NonMaxSuppressionV5",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"},{start:4,name:"scoreThreshold",type:"number"},{start:5,name:"softNmsSigma",type:"number"}]},{tfOpName:"Where",category:"dynamic",inputs:[{start:0,name:"condition",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ListDiff",category:"dynamic",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"y",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}],Gx=[{tfOpName:"TopKV2",category:"evaluation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"k",type:"number"}],attrs:[{tfName:"sorted",name:"sorted",type:"bool"}]},{tfOpName:"Unique",category:"evaluation",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"UniqueV2",category:"evaluation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]}],Xx=[{tfOpName:"PlaceholderWithDefault",category:"graph",inputs:[{start:0,name:"default",type:"tensor"}],attrs:[{tfName:"shape",name:"shape",type:"shape"},{tfName:"dtype",name:"dtype",type:"dtype"}]},{tfOpName:"Placeholder",category:"graph",attrs:[{tfName:"shape",name:"shape",type:"shape"},{tfName:"dtype",name:"dtype",type:"dtype"}]},{tfOpName:"Const",category:"graph"},{tfOpName:"Identity",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"IdentityN",category:"graph",inputs:[{start:0,end:0,name:"x",type:"tensors"}]},{tfOpName:"Snapshot",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"Rank",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"Size",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"Shape",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"ShapeN",category:"graph",inputs:[{start:0,end:0,name:"x",type:"tensors"}]},{tfOpName:"Print",category:"graph",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"data",type:"tensors"}],attrs:[{tfName:"message",name:"message",type:"string"},{tfName:"first_n",name:"firstN",type:"number",notSupported:!0},{tfName:"summarize",name:"summarize",type:"number",defaultValue:3}]},{tfOpName:"NoOp",category:"graph",inputs:[]},{tfOpName:"StopGradient",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"FakeQuantWithMinMaxVars",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"min",name:"min",type:"number"},{tfName:"max",name:"max",type:"number"}]}],Kx=[{tfOpName:"HashTable",category:"hash_table",inputs:[],attrs:[{tfName:"shared_name",name:"sharedName",type:"string"},{tfName:"use_node_name_sharing",name:"useNodeNameSharing",type:"bool"},{tfName:"key_dtype",name:"keyDType",type:"dtype"},{tfName:"value_dtype",name:"valueDType",type:"dtype"}]},{tfOpName:"HashTableV2",category:"hash_table",inputs:[],attrs:[{tfName:"shared_name",name:"sharedName",type:"string"},{tfName:"use_node_name_sharing",name:"useNodeNameSharing",type:"bool"},{tfName:"key_dtype",name:"keyDType",type:"dtype"},{tfName:"value_dtype",name:"valueDType",type:"dtype"}]},{tfOpName:"LookupTableImport",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"values",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableImportV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"values",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableFind",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableFindV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableSize",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"}]},{tfOpName:"LookupTableSizeV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"}]}],qx=[{tfOpName:"ResizeBilinear",category:"image",inputs:[{start:0,name:"images",type:"tensor"},{start:1,name:"size",type:"number[]"}],attrs:[{tfName:"align_corners",name:"alignCorners",type:"bool"},{tfName:"half_pixel_centers",name:"halfPixelCenters",type:"bool"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ResizeNearestNeighbor",category:"image",inputs:[{start:0,name:"images",type:"tensor"},{start:1,name:"size",type:"number[]"}],attrs:[{tfName:"align_corners",name:"alignCorners",type:"bool"},{tfName:"half_pixel_centers",name:"halfPixelCenters",type:"bool"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"CropAndResize",category:"image",inputs:[{start:0,name:"image",type:"tensor"},{start:1,name:"boxes",type:"tensor"},{start:2,name:"boxInd",type:"tensor"},{start:3,name:"cropSize",type:"number[]"}],attrs:[{tfName:"method",name:"method",type:"string"},{tfName:"extrapolation_value",name:"extrapolationValue",type:"number"}]}],Yx=[{tfOpName:"Equal",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"NotEqual",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Greater",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"GreaterEqual",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Less",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LessEqual",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LogicalAnd",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LogicalNot",category:"logical",inputs:[{start:0,name:"a",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LogicalOr",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Select",category:"logical",inputs:[{start:0,name:"condition",type:"tensor"},{start:1,name:"a",type:"tensor"},{start:2,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"SelectV2",category:"logical",inputs:[{start:0,name:"condition",type:"tensor"},{start:1,name:"a",type:"tensor"},{start:2,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}],Jx=[{tfOpName:"_FusedMatMul",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"},{start:2,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"num_args",name:"numArgs",type:"number"},{tfName:"fused_ops",name:"fusedOps",type:"string[]",defaultValue:[]},{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:1e-4},{tfName:"transpose_a",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"transpose_b",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MatMul",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"transpose_a",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"transpose_b",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"BatchMatMul",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"adj_x",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"adj_y",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"BatchMatMulV2",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"adj_x",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"adj_y",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Transpose",category:"matrices",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"perm",type:"number[]"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Einsum",category:"matrices",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}],attrs:[{tfName:"equation",name:"equation",type:"string"},{tfName:"N",name:"n",type:"number",defaultValue:2},{tfName:"T",name:"dtype",type:"dtype"}]}],Zx=[{tfOpName:"FusedBatchNorm",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"scale",type:"tensor"},{start:2,name:"offset",type:"tensor"},{start:3,name:"mean",type:"tensor"},{start:4,name:"variance",type:"tensor"}],attrs:[{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:.001},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"FusedBatchNormV2",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"scale",type:"tensor"},{start:2,name:"offset",type:"tensor"},{start:3,name:"mean",type:"tensor"},{start:4,name:"variance",type:"tensor"}],attrs:[{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:.001},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"FusedBatchNormV3",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"scale",type:"tensor"},{start:2,name:"offset",type:"tensor"},{start:3,name:"mean",type:"tensor"},{start:4,name:"variance",type:"tensor"}],attrs:[{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:.001},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"LRN",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"depth_radius",name:"radius",type:"number",defaultValue:5},{tfName:"bias",name:"bias",type:"number",defaultValue:1},{tfName:"alpha",name:"alpha",type:"number",defaultValue:1},{tfName:"beta",name:"beta",type:"number",defaultValue:.5}]},{tfOpName:"Softmax",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"LogSoftmax",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"SparseToDense",category:"normalization",inputs:[{start:0,name:"sparseIndices",type:"tensor"},{start:1,name:"outputShape",type:"number[]"},{start:2,name:"sparseValues",type:"tensor"},{start:3,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"validate_indices",name:"validateIndices",type:"bool",defaultValue:!0,notSupported:!0}]}],Qx=[{tfOpName:"Bincount",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"size",type:"number"},{start:2,name:"weights",type:"tensor"}]},{tfOpName:"DenseBincount",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"size",type:"number"},{start:2,name:"weights",type:"tensor"}],attrs:[{tfName:"binary_output",name:"binaryOutput",type:"bool"}]},{tfOpName:"Max",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Mean",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Min",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Sum",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"All",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Any",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"ArgMax",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]},{tfOpName:"ArgMin",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]},{tfOpName:"Prod",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Cumsum",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}],attrs:[{tfName:"exclusive",name:"exclusive",type:"bool"},{tfName:"reverse",name:"reverse",type:"bool"}]}],ek=[{tfOpName:"ConcatV2",category:"slice_join",inputs:[{start:0,end:-1,name:"tensors",type:"tensors"},{start:-1,name:"axis",type:"number"}],attrs:[{tfName:"N",name:"n",type:"number",defaultValue:2}]},{tfOpName:"Concat",category:"slice_join",inputs:[{start:1,end:0,name:"tensors",type:"tensors"},{start:0,name:"axis",type:"number"}],attrs:[{tfName:"N",name:"n",type:"number",defaultValue:2}]},{tfOpName:"GatherV2",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"axis",type:"number",defaultValue:0}],attrs:[{tfName:"batch_dims",name:"batchDims",type:"number",defaultValue:0}]},{tfOpName:"Gather",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"indices",type:"tensor"}],attrs:[{tfName:"validate_indices",name:"validateIndices",type:"bool",notSupported:!0}]},{tfOpName:"Reverse",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"dims",type:"bool[]"}]},{tfOpName:"ReverseV2",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}]},{tfOpName:"Slice",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"begin",type:"number[]"},{start:2,name:"size",type:"number[]"}]},{tfOpName:"StridedSlice",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"begin",type:"number[]"},{start:2,name:"end",type:"number[]"},{start:3,name:"strides",type:"number[]"}],attrs:[{tfName:"begin_mask",name:"beginMask",type:"number",defaultValue:0},{tfName:"end_mask",name:"endMask",type:"number",defaultValue:0},{tfName:"new_axis_mask",name:"newAxisMask",type:"number",defaultValue:0},{tfName:"ellipsis_mask",name:"ellipsisMask",type:"number",defaultValue:0},{tfName:"shrink_axis_mask",name:"shrinkAxisMask",type:"number",defaultValue:0}]},{tfOpName:"Pack",category:"slice_join",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}],attrs:[{tfName:"axis",name:"axis",type:"number",defaultValue:0}]},{tfOpName:"Unpack",category:"slice_join",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"axis",name:"axis",type:"number",defaultValue:0},{tfName:"num",name:"num",type:"number",defaultValue:0,notSupported:!0}]},{tfOpName:"Tile",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"reps",type:"number[]"}]},{tfOpName:"Split",category:"slice_join",inputs:[{start:0,name:"axis",type:"number",defaultValue:0},{start:1,name:"x",type:"tensor"}],attrs:[{tfName:"num_split",name:"numOrSizeSplits",type:"number",defaultValue:1}]},{tfOpName:"SplitV",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"numOrSizeSplits",type:"number[]"},{start:2,name:"axis",type:"number",defaultValue:0}]},{tfOpName:"ScatterNd",category:"slice_join",inputs:[{start:0,name:"indices",type:"tensor"},{start:1,name:"values",type:"tensor"},{start:2,name:"shape",type:"number[]"}]},{tfOpName:"GatherNd",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"indices",type:"tensor"}]},{tfOpName:"SparseToDense",category:"slice_join",inputs:[{start:0,name:"sparseIndices",type:"tensor"},{start:1,name:"outputShape",type:"number[]"},{start:2,name:"sparseValues",type:"tensor"},{start:3,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"validate_indices",name:"validateIndices",type:"bool",defaultValue:!1,notSupported:!0}]}],tk=[{tfOpName:"FFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"IFFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"RFFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"fft_length",type:"number",notSupported:!0}]},{tfOpName:"IRFFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"fft_length",type:"number",notSupported:!0}]}],nk=[{tfOpName:"Cast",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"SrcT",name:"sdtype",type:"dtype",notSupported:!0},{tfName:"DstT",name:"dtype",type:"dtype"}]},{tfOpName:"ExpandDims",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]},{tfOpName:"MirrorPad",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"padding",type:"number[]"}],attrs:[{tfName:"mode",name:"mode",type:"string"}]},{tfOpName:"Pad",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"padding",type:"number[]"}],attrs:[{tfName:"constant_value",name:"constantValue",type:"number",defaultValue:0}]},{tfOpName:"PadV2",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"padding",type:"number[]"},{start:2,name:"constantValue",type:"number",defaultValue:0}]},{tfOpName:"Reshape",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"shape",type:"number[]"}]},{tfOpName:"Squeeze",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"axis",tfDeprecatedName:"squeeze_dims",name:"axis",type:"number[]"}]},{tfOpName:"SpaceToBatchND",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"blockShape",type:"number[]"},{start:2,name:"paddings",type:"number[]"}]},{tfOpName:"BatchToSpaceND",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"blockShape",type:"number[]"},{start:2,name:"crops",type:"number[]"}]},{tfOpName:"DepthToSpace",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"block_size",name:"blockSize",type:"number"},{tfName:"data_format",name:"dataFormat",type:"string"}]},{tfOpName:"BroadcastTo",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"shape",type:"number[]"}],attrs:[]}];class rk{static get Instance(){return this._instance||(this._instance=new this)}constructor(){const e=[].concat(...[E,C,S,N,I,A,D,O,R,T,M,B,$,P,L,z,F].map((e=>e.json)));this.opMappers=e.reduce(((e,t)=>(e[t.tfOpName]=t,e)),{})}transformGraph(e,t={}){const n=e.node,r=[],a=[],s=[],i=n.reduce(((e,t)=>(e[t.name]=this.mapNode(t),t.op.startsWith("Placeholder")?r.push(e[t.name]):"Const"===t.op?a.push(e[t.name]):null!=t.input&&0!==t.input.length||s.push(e[t.name]),e)),{});let o=[];const l=[];let u={},c={};null!=t&&(u=this.mapSignatureEntries(t.inputs),c=this.mapSignatureEntries(t.outputs));const h=Object.keys(i);h.forEach((e=>{const t=i[e];t.inputNames.forEach((e=>{const[n]=Mx(e);t.inputs.push(i[n]),i[n].children.push(t)}))})),0===Object.keys(c).length?h.forEach((e=>{const t=i[e];0===t.children.length&&l.push(t)})):Object.keys(c).forEach((e=>{const[t]=Mx(e),n=i[t];null!=n&&(n.signatureKey=c[e],l.push(n))})),Object.keys(u).length>0?Object.keys(u).forEach((e=>{const[t]=Mx(e),n=i[t];n&&(n.signatureKey=u[e],o.push(n))})):o=r;let f={};null!=e.library&&null!=e.library.function&&(f=e.library.function.reduce(((e,t)=>(e[t.signature.name]=this.mapFunction(t),e)),{}));const d={nodes:i,inputs:o,outputs:l,weights:a,placeholders:r,signature:t,functions:f};return s.length>0&&(d.initNodes=s),d}mapSignatureEntries(e){return Object.keys(e||{}).reduce(((t,n)=>(t[e[n].name]=n,t)),{})}mapNode(e){const t=Tx(e.op)||this.opMappers[e.op]||{};null==e.attr&&(e.attr={});const n={name:e.name,op:e.op,category:t.category,inputNames:(e.input||[]).map((e=>e.startsWith("^")?e.substr(1):e)),inputs:[],children:[],inputParams:{},attrParams:{},rawAttrs:e.attr};return null!=t.inputs&&(n.inputParams=t.inputs.reduce(((e,t)=>(e[t.name]={type:t.type,inputIndexStart:t.start,inputIndexEnd:t.end},e)),{})),null!=t.attrs&&(n.attrParams=t.attrs.reduce(((t,n)=>{const r=n.type;let a;switch(n.type){case"string":a=sk(e.attr,n.tfName,n.defaultValue),void 0===a&&n.tfDeprecatedName&&(a=sk(e.attr,n.tfDeprecatedName,n.defaultValue));break;case"string[]":a=mk(e.attr,n.tfName,n.defaultValue),void 0===a&&n.tfDeprecatedName&&(a=mk(e.attr,n.tfDeprecatedName,n.defaultValue));break;case"number":a=ok(e.attr,n.tfName,n.defaultValue||0),void 0===a&&n.tfDeprecatedName&&(a=ok(e.attr,n.tfDeprecatedName,n.defaultValue));break;case"number[]":a=pk(e.attr,n.tfName,n.defaultValue),void 0===a&&n.tfDeprecatedName&&(a=pk(e.attr,n.tfDeprecatedName,n.defaultValue));break;case"bool":a=ik(e.attr,n.tfName,n.defaultValue),void 0===a&&n.tfDeprecatedName&&(a=ik(e.attr,n.tfDeprecatedName,n.defaultValue));break;case"bool[]":a=yk(e.attr,n.tfName,n.defaultValue),void 0===a&&n.tfDeprecatedName&&(a=yk(e.attr,n.tfDeprecatedName,n.defaultValue));break;case"shape":a=dk(e.attr,n.tfName,n.defaultValue),void 0===a&&n.tfDeprecatedName&&(a=dk(e.attr,n.tfDeprecatedName,n.defaultValue));break;case"shape[]":a=gk(e.attr,n.tfName,n.defaultValue),void 0===a&&n.tfDeprecatedName&&(a=gk(e.attr,n.tfDeprecatedName,n.defaultValue));break;case"dtype":a=ck(e.attr,n.tfName,n.defaultValue),void 0===a&&n.tfDeprecatedName&&(a=ck(e.attr,n.tfDeprecatedName,n.defaultValue));break;case"dtype[]":a=hk(e.attr,n.tfName,n.defaultValue),void 0===a&&n.tfDeprecatedName&&(a=hk(e.attr,n.tfDeprecatedName,n.defaultValue));break;case"func":a=uk(e.attr,n.tfName,n.defaultValue),void 0===a&&n.tfDeprecatedName&&(a=uk(e.attr,n.tfDeprecatedName,n.defaultValue));break;case"tensor":case"tensors":break;default:throw new Error(`Unsupported param type: ${n.type} for op: ${e.op}`)}return t[n.name]={value:a,type:r},t}),{})),n}mapFunction(e){const t=e.nodeDef,n=[];let r={};null!=t&&(r=t.reduce(((e,t)=>(e[t.name]=this.mapNode(t),"Const"===t.op&&n.push(e[t.name]),e)),{}));const a=[],s=[];e.signature.inputArg.forEach((e=>{const[t]=Mx(e.name),n={name:t,op:"Placeholder",inputs:[],inputNames:[],category:"graph",inputParams:{},attrParams:{dtype:{value:lk(e.type),type:"dtype"}},children:[]};n.signatureKey=e.name,a.push(n),r[t]=n})),Object.keys(r).forEach((e=>{const t=r[e];t.inputNames.forEach((e=>{const[n]=Mx(e);t.inputs.push(r[n]),r[n].children.push(t)}))}));const i=e.ret;e.signature.outputArg.forEach((e=>{const[t,n]=Mx(i[e.name]),a=r[t];null!=a&&(a.defaultOutput=n,s.push(a))}));const o=this.mapArgsToSignature(e);return{nodes:r,inputs:a,outputs:s,weights:n,placeholders:[],signature:o}}mapArgsToSignature(e){return{methodName:e.signature.name,inputs:e.signature.inputArg.reduce(((e,t)=>(e[t.name]=this.mapArgToTensorInfo(t),e)),{}),outputs:e.signature.outputArg.reduce(((t,n)=>(t[n.name]=this.mapArgToTensorInfo(n,e.ret),t)),{})}}mapArgToTensorInfo(e,t){let n=e.name;return null!=t&&(n=t[n]),{name:n,dtype:e.type}}}function ak(e,t){const n=Array.isArray(e)?String.fromCharCode.apply(null,e):function(e){const t=We().global;if(void 0!==t.atob)return t.atob(e);if("undefined"!=typeof Buffer)return new Buffer(e,"base64").toString();throw new Error("Unable to decode base64 in this environment. Missing built-in atob() or Buffer()")}(e);return t?n:n.toLowerCase()}function sk(e,t,n,r=!1){const a=e[t];return null!=a?ak(a.s,r):n}function ik(e,t,n){const r=e[t];return r?r.b:n}function ok(e,t,n){const r=e[t]||{},a=null!=r.i?r.i:null!=r.f?r.f:n;return"number"==typeof a?a:parseInt(a,10)}function lk(e){switch("string"==typeof e&&(e=Nx[e]),e){case Nx.DT_FLOAT:return"float32";case Nx.DT_INT32:case Nx.DT_INT64:case Nx.DT_INT8:case Nx.DT_UINT8:return"int32";case Nx.DT_BOOL:return"bool";case Nx.DT_DOUBLE:return"float32";case Nx.DT_STRING:return"string";default:return null}}function uk(e,t,n){const r=e[t];return r&&r.func?r.func.name:n}function ck(e,t,n){const r=e[t];return r&&r.type?lk(r.type):n}function hk(e,t,n){const r=e[t];return r&&r.list&&r.list.type?r.list.type.map((e=>lk(e))):n}function fk(e){if(!e.unknownRank)return null!=e.dim?e.dim.map((e=>"number"==typeof e.size?e.size:parseInt(e.size,10))):[]}function dk(e,t,n){const r=e[t];return r&&r.shape?fk(r.shape):n}function pk(e,t,n){const r=e[t];return r?((r.list.f&&r.list.f.length?r.list.f:r.list.i)||[]).map((e=>"number"==typeof e?e:parseInt(e,10))):n}function mk(e,t,n,r=!1){const a=e[t];return a&&a.list&&a.list.s?a.list.s.map((e=>ak(e,r))):n}function gk(e,t,n){const r=e[t];return r&&r.list&&r.list.shape?r.list.shape.map((e=>fk(e))):n}function yk(e,t,n){const r=e[t];return r&&r.list&&r.list.b?r.list.b:n}class bk{constructor(e,t,n){this.node=e,this.tensorMap=t,this.context=n,this.inputs=[],this.attrs={},this.inputs=e.inputNames.map((e=>this.getInput(e))),null!=e.rawAttrs&&(this.attrs=Object.keys(e.rawAttrs).reduce(((e,t)=>(e[t]=this.getAttr(t),e)),{}))}getInput(e){return Ox(e,this.tensorMap,this.context)}getAttr(e,t){const n=this.node.rawAttrs[e];if(null!=n.tensor)return Ox(e,this.tensorMap,this.context);if(null!=n.i||null!=n.f)return ok(this.node.rawAttrs,e,t);if(null!=n.s)return sk(this.node.rawAttrs,e,t);if(null!=n.b)return ik(this.node.rawAttrs,e,t);if(null!=n.shape)return dk(this.node.rawAttrs,e,t);if(null!=n.type)return ck(this.node.rawAttrs,e,t);if(null!=n.list){if(null!=n.list.i||null!=n.list.f)return pk(this.node.rawAttrs,e,t);if(null!=n.list.s)return mk(this.node.rawAttrs,e,t);if(null!=n.list.shape)return gk(this.node.rawAttrs,e,t);if(null!=n.list.b)return yk(this.node.rawAttrs,e,t);if(null!=n.list.type)return hk(this.node.rawAttrs,e,t)}return t}}function vk(e,t,n=""){if("number"!=typeof e&&"number"!=typeof t){Q(e.length===t.length,(()=>n+` Shapes ${e} and ${t} must match`));for(let r=0;rn+` Shapes ${e} and ${t} must match`))}}}function wk(e){return"number"!=typeof e&&!e.some((e=>e<0))}function _k(e,t,n){let r=xk(e,n);const a=!wk(r);if(a&&0===t.length)throw new Error(`Tried to calculate elements of an empty list with non-fully-defined elementShape: ${r}`);if(a&&t.forEach((e=>{r=xk(e.shape,r)})),!wk(r))throw new Error(`Non-fully-defined elementShape: ${r}`);return r}function xk(e,t){if("number"==typeof e)return t;if("number"==typeof t)return e;if(e.length!==t.length)throw new Error(`Incompatible ranks during merge: ${e} vs. ${t}`);const n=[];for(let r=0;r=0&&s>=0&&a!==s)throw new Error(`Incompatible shape during merge: ${e} vs. ${t}`);n[r]=a>=0?a:s}return n}class kk{constructor(e,t,n,r,a,s,i){this.name=e,this.dtype=t,this.maxSize=n,this.elementShape=r,this.identicalElementShapes=a,this.dynamicSize=s,this.clearAfterRead=i,this.tensors=[],this.closed_=!1,this.idTensor=Wo(0),go(this.idTensor)}get id(){return this.idTensor.id}get closed(){return this.closed_}clearAndClose(e){this.tensors.forEach((t=>{null!=e&&e.has(t.tensor.id)||t.tensor.dispose()})),this.tensors=[],this.closed_=!0,this.idTensor.dispose()}size(){return this.tensors.length}read(e){if(this.closed_)throw new Error(`TensorArray ${this.name} has already been closed.`);if(e<0||e>=this.size())throw new Error(`Tried to read from index ${e}, but array size is: ${this.size()}`);const t=this.tensors[e];if(t.cleared)throw new Error(`TensorArray ${this.name}: Could not read index ${e} twice because it was cleared after a previous read (perhaps try setting clear_after_read = false?).`);return this.clearAfterRead&&(t.cleared=!0),t.read=!0,t.tensor}readMany(e){return e.map((e=>this.read(e)))}write(e,t){if(this.closed_)throw new Error(`TensorArray ${this.name} has already been closed.`);if(e<0||!this.dynamicSize&&e>=this.maxSize)throw new Error(`Tried to write to index ${e}, but array is not resizeable and size is: ${this.maxSize}`);const n=this.tensors[e]||{};if(t.dtype!==this.dtype)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e},\n because the value dtype is ${t.dtype}, but TensorArray dtype is ${this.dtype}.`);if(0!==this.size()||null!=this.elementShape&&0!==this.elementShape.length||(this.elementShape=t.shape),vk(this.elementShape,t.shape,`TensorArray ${this.name}: Could not write to TensorArray index ${e}.`),n.read)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, because it has already been read.`);if(n.written)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, because it has already been written.`);n.tensor=t,go(t),n.written=!0,this.tensors[e]=n}writeMany(e,t){if(e.length!==t.length)throw new Error(`TensorArray ${this.name}: could not write multiple tensors,because the index size: ${e.length} is not the same as tensors size: ${t.length}.`);e.forEach(((e,n)=>this.write(e,t[n])))}gather(e,t){if(t&&t!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but gather requested dtype ${t}`);if(e)e=e.slice(0,this.size());else{e=[];for(let t=0;t=this.maxSize)throw new Error(`Max index must be < array size (${n} vs. ${this.maxSize})`);this.writeMany(e,Sh(t,0))}split(e,t){if(t.dtype!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but tensor has dtype ${t.dtype}`);let n=0;const r=e.map((e=>(n+=e,n)));if(n!==t.shape[0])throw new Error(`Expected sum of lengths to be equal to\n tensor.shape[0], but sum of lengths is\n ${n}, and tensor's shape is: ${t.shape}`);if(!this.dynamicSize&&e.length!==this.maxSize)throw new Error(`TensorArray's size is not equal to the size of lengths (${this.maxSize} vs. ${e.length}), and the TensorArray is not marked as dynamically resizeable`);const a=0===n?0:t.size/n,s=[];po((()=>{t=Al(t,[1,n,a]);for(let n=0;n{if(n!==e.dtype)throw new Error(`Invalid data types; op elements ${n}, but list elements ${e.dtype}`);vk(t,e.shape,"TensorList shape mismatch: "),go(e)})),this.idTensor=Wo(0),this.maxNumElements=r,go(this.idTensor)}get id(){return this.idTensor.id}copy(){return new Ek([...this.tensors],this.elementShape,this.elementDtype)}clearAndClose(e){this.tensors.forEach((t=>{null!=e&&e.has(t.id)||t.dispose()})),this.tensors.length=0,this.idTensor.dispose()}size(){return this.tensors.length}stack(e,t,n=-1){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);if(-1!==n&&this.tensors.length!==n)throw new Error(`Operation expected a list with ${n} elements but got a list with ${this.tensors.length} elements.`);vk(e,this.elementShape,"TensorList shape mismatch: ");const r=_k(this.elementShape,this.tensors,e);return po((()=>{const e=this.tensors.map((e=>Al(e,r)));return dh(e,0)}))}popBack(e,t){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);if(0===this.size())throw new Error("Trying to pop from an empty list.");const n=_k(this.elementShape,this.tensors,e),r=this.tensors.pop();return vk(r.shape,e,"TensorList shape mismatch: "),Al(r,n)}pushBack(e){if(e.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${e.dtype}, but list elements ${this.elementDtype}`);if(vk(e.shape,this.elementShape,"TensorList shape mismatch: "),this.maxNumElements===this.size())throw new Error("Trying to push element into a full list.");go(e),this.tensors.push(e)}resize(e){if(e<0)throw new Error(`TensorListResize expects size to be non-negative. Got: ${e}`);if(-1!==this.maxNumElements&&e>this.maxNumElements)throw new Error(`TensorListResize input size ${e} is greater maxNumElement ${this.maxNumElements}.`);this.tensors.length=e}getItem(e,t,n){if(n!==this.elementDtype)throw new Error(`Invalid data types; op elements ${n}, but list elements ${this.elementDtype}`);if(e<0||e>this.tensors.length)throw new Error(`Trying to access element ${e} in a list with ${this.tensors.length} elements.`);if(null==this.tensors[e])throw new Error(`element at index ${e} is null.`);vk(this.tensors[e].shape,t,"TensorList shape mismatch: ");const r=_k(this.elementShape,this.tensors,t);return Al(this.tensors[e],r)}setItem(e,t){if(t.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t.dtype}, but list elements ${this.elementDtype}`);if(e<0||-1!==this.maxNumElements&&e>=this.maxNumElements)throw new Error(`Trying to set element ${e} in a list with max ${this.maxNumElements} elements.`);vk(this.elementShape,t.shape,"TensorList shape mismatch: "),go(t),this.tensors[e]=t}gather(e,t,n){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);vk(this.elementShape,n,"TensorList shape mismatch: "),e=e.slice(0,this.size());const r=_k(this.elementShape,this.tensors,n);return 0===e.length?ts([],[0].concat(r)):po((()=>{const t=e.map((e=>Al(this.tensors[e],r)));return dh(t,0)}))}concat(e,t){if(e&&e!==this.elementDtype)throw new Error(`TensorList dtype is ${this.elementDtype} but concat requested dtype ${e}`);vk(this.elementShape,t,"TensorList shape mismatch: ");const n=_k(this.elementShape,this.tensors,t);return 0===this.size()?ts([],[0].concat(n)):po((()=>{const e=this.tensors.map((e=>Al(e,n)));return Fl(e,0)}))}}function Ck(e,t,n){const[r,a]=Rx("fusedOps",e,t,n),s="biasadd"===r,i="prelu"===a,o="fusedbatchnorm"===r,l=Rx("numArgs",e,t,n);if(s){if(i&&2!==l)throw new Error("FusedConv2d and DepthwiseConv2d with BiasAdd and Prelu must have two extra arguments: bias and alpha.");if(!i&&1!==l)throw new Error("FusedConv2d and DepthwiseConv2d with BiasAdd must have one extra argument: bias.")}if(o)throw new Error("FusedConv2d and DepthwiseConv2d with FusedBatchNorm is not supported");const u=Rx("strides",e,t,n),c=Px(e,t,n),h=Rx("dataFormat",e,t,n).toUpperCase(),f=Rx("dilations",e,t,n),[d,p]=Rx("args",e,t,n);return{stride:u,pad:c,dataFormat:h,dilations:f,biasArg:d,preluArg:p,activationFunc:a,leakyreluAlpha:Rx("leakyreluAlpha",e,t,n)}}function Sk(e,t,n){return{boxes:Rx("boxes",e,t,n),scores:Rx("scores",e,t,n),maxOutputSize:Rx("maxOutputSize",e,t,n),iouThreshold:Rx("iouThreshold",e,t,n),scoreThreshold:Rx("scoreThreshold",e,t,n),softNmsSigma:Rx("softNmsSigma",e,t,n)}}class Nk{constructor(e,t){this.keyDType=e,this.valueDType=t,this.handle=Wo(0),this.tensorMap=new Map,go(this.handle)}get id(){return this.handle.id}clearAndClose(){this.tensorMap.forEach((e=>e.dispose())),this.tensorMap.clear(),this.handle.dispose()}size(){return this.tensorMap.size}tensorSize(){return Wo(this.size(),"int32")}async import(e,t){this.checkKeyAndValueTensor(e,t);const n=await e.data();return this.tensorMap.forEach((e=>e.dispose())),this.tensorMap.clear(),po((()=>{const e=Sh(t),r=n.length,a=e.length;Q(r===a,(()=>`The number of elements doesn't match, keys has ${r} elements, the values has ${a} elements.`));for(let t=0;t{const e=[];for(let r=0;r{switch(e.category){case"arithmetic":return po((()=>((e,t,n)=>{switch(e.op){case"BiasAdd":case"AddV2":case"Add":return[No(Rx("a",e,t,n),Rx("b",e,t,n))];case"AddN":return[il(Rx("tensors",e,t,n))];case"FloorMod":case"Mod":return[dc(Rx("a",e,t,n),Rx("b",e,t,n))];case"Mul":return[Do(Rx("a",e,t,n),Rx("b",e,t,n))];case"RealDiv":case"Div":return[Ao(Rx("a",e,t,n),Rx("b",e,t,n))];case"DivNoNan":return[du(Rx("a",e,t,n),Rx("b",e,t,n))];case"FloorDiv":return[Io(Rx("a",e,t,n),Rx("b",e,t,n))];case"Sub":return[Xo(Rx("a",e,t,n),Rx("b",e,t,n))];case"Minimum":return[hc(Rx("a",e,t,n),Rx("b",e,t,n))];case"Maximum":return[Qo(Rx("a",e,t,n),Rx("b",e,t,n))];case"Pow":return[Go(Rx("a",e,t,n),Rx("b",e,t,n))];case"SquaredDifference":return[hh(Rx("a",e,t,n),Rx("b",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}})(e,t,n)));case"basic_math":return po((()=>((e,t,n)=>{switch(e.op){case"Abs":case"ComplexAbs":return[qo(Rx("x",e,t,n))];case"Acos":return[al(Rx("x",e,t,n))];case"Acosh":return[sl(Rx("x",e,t,n))];case"Asin":return[hl(Rx("x",e,t,n))];case"Asinh":return[fl(Rx("x",e,t,n))];case"Atan":return[dl(Rx("x",e,t,n))];case"Atan2":return[pl(Rx("x",e,t,n),Rx("y",e,t,n))];case"Atanh":return[ml(Rx("x",e,t,n))];case"Ceil":return[jl(Rx("x",e,t,n))];case"Complex":return[Qa(Rx("real",e,t,n),Rx("imag",e,t,n))];case"Cos":return[ru(Rx("x",e,t,n))];case"Cosh":return[au(Rx("x",e,t,n))];case"Elu":return[gu(Rx("x",e,t,n))];case"Erf":return[yu(Rx("x",e,t,n))];case"Exp":return[bu(Rx("x",e,t,n))];case"Expm1":return[wu(Rx("x",e,t,n))];case"Floor":return[ku(Rx("x",e,t,n))];case"Log":return[Bu(Rx("x",e,t,n))];case"Log1p":return[$u(Rx("x",e,t,n))];case"Imag":return[Nu(Rx("x",e,t,n))];case"Neg":return[Pu(Rx("x",e,t,n))];case"Reciprocal":return[Lc(Rx("x",e,t,n))];case"Real":return[Pc(Rx("x",e,t,n))];case"Relu":return[zc(Rx("x",e,t,n))];case"Round":return[Xc(Rx("x",e,t,n))];case"Selu":return[qc(Rx("x",e,t,n))];case"Sigmoid":return[Rl(Rx("x",e,t,n))];case"Sin":return[Qc(Rx("x",e,t,n))];case"Sign":return[Zc(Rx("x",e,t,n))];case"Sinh":return[eh(Rx("x",e,t,n))];case"Softplus":return[Lu(Rx("x",e,t,n))];case"Sqrt":return[To(Rx("x",e,t,n))];case"Square":return[Fo(Rx("x",e,t,n))];case"Tanh":return[Ml(Rx("x",e,t,n))];case"Tan":return[gh(Rx("x",e,t,n))];case"ClipByValue":return[Hl(Rx("x",e,t,n),Rx("clipValueMin",e,t,n),Rx("clipValueMax",e,t,n))];case"Relu6":return[Wc(Rx("x",e,t,n))];case"Rsqrt":return[Kc(Ox(e.inputNames[0],t,n))];case"Prod":return[Ic(Rx("x",e,t,n),Rx("axes",e,t,n))];case"LeakyRelu":return[Tu(Rx("x",e,t,n),Rx("alpha",e,t,n))];case"Prelu":return[Nc(Rx("x",e,t,n),Rx("alpha",e,t,n))];case"IsNan":return[Du(Ox(e.inputNames[0],t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}})(e,t,n)));case"control":return(async(e,t,n)=>{switch(e.op){case"If":case"StatelessIf":{const r=Rx("thenBranch",e,t,n),a=Rx("elseBranch",e,t,n),s=Rx("cond",e,t,n),i=Rx("args",e,t,n);return(await s.data())[0]?n.functionMap[r].executeFunctionAsync(i,n.tensorArrayMap,n.tensorListMap):n.functionMap[a].executeFunctionAsync(i,n.tensorArrayMap,n.tensorListMap)}case"While":case"StatelessWhile":{const r=Rx("body",e,t,n),a=Rx("cond",e,t,n),s=Rx("args",e,t,n),i=await n.functionMap[a].executeFunctionAsync(s,n.tensorArrayMap,n.tensorListMap),o=s.map((e=>e.id));let l=await i[0].data();i.forEach((e=>{e.kept||-1!==o.indexOf(e.id)||e.dispose()}));let u=s;for(;l[0];){const e=u;u=await n.functionMap[r].executeFunctionAsync(u,n.tensorArrayMap,n.tensorListMap);const t=u.map((e=>e.id));e.forEach((e=>{e.kept||-1!==o.indexOf(e.id)||-1!==t.indexOf(e.id)||e.dispose()}));const s=await n.functionMap[a].executeFunctionAsync(u,n.tensorArrayMap,n.tensorListMap);l=await s[0].data(),s.forEach((e=>{e.kept||-1!==o.indexOf(e.id)||-1!==t.indexOf(e.id)||e.dispose()}))}return u}case"LoopCond":return[Lx(Rx("pred",e,t,n))];case"Switch":{const r=Rx("pred",e,t,n);let a=Rx("data",e,t,n);return a.kept||(a=Lx(a)),(await r.data())[0]?[void 0,a]:[a,void 0]}case"Merge":{const r=e.inputNames.find((e=>void 0!==Ox(e,t,n)));return r?[Lx(Ox(r,t,n))]:void 0}case"Enter":{const r=Rx("frameName",e,t,n),a=Rx("tensor",e,t,n);return n.enterFrame(r),[Lx(a)]}case"Exit":{const r=Rx("tensor",e,t,n);return n.exitFrame(),[Lx(r)]}case"NextIteration":{const r=Rx("tensor",e,t,n);return n.nextIteration(),[Lx(r)]}case"TensorArrayV3":{const r=Rx("size",e,t,n),a=Rx("dtype",e,t,n),s=Rx("elementShape",e,t,n),i=Rx("dynamicSize",e,t,n),o=Rx("clearAfterRead",e,t,n),l=Rx("identicalElementShapes",e,t,n),u=Rx("name",e,t,n),c=new kk(u,a,r,s,l,i,o);return n.addTensorArray(c),[c.idTensor,Wo(1)]}case"TensorArrayWriteV3":{const r=Rx("tensorArrayId",e,t,n),a=Rx("index",e,t,n),s=Rx("tensor",e,t,n),i=n.getTensorArray(r.id);return i.write(a,s),[i.idTensor]}case"TensorArrayReadV3":{const r=Rx("tensorArrayId",e,t,n),a=Rx("index",e,t,n);return[n.getTensorArray(r.id).read(a)]}case"TensorArrayGatherV3":{const r=Rx("tensorArrayId",e,t,n),a=Rx("indices",e,t,n),s=Rx("dtype",e,t,n);return[n.getTensorArray(r.id).gather(a,s)]}case"TensorArrayScatterV3":{const r=Rx("tensorArrayId",e,t,n),a=Rx("indices",e,t,n),s=Rx("tensor",e,t,n),i=n.getTensorArray(r.id);return i.scatter(a,s),[i.idTensor]}case"TensorArrayConcatV3":{const r=Rx("tensorArrayId",e,t,n),a=n.getTensorArray(r.id),s=Rx("dtype",e,t,n);return[a.concat(s)]}case"TensorArraySplitV3":{const r=Rx("tensorArrayId",e,t,n),a=Rx("tensor",e,t,n),s=Rx("lengths",e,t,n),i=n.getTensorArray(r.id);return i.split(s,a),[i.idTensor]}case"TensorArraySizeV3":{const r=Rx("tensorArrayId",e,t,n);return[Wo(n.getTensorArray(r.id).size(),"int32")]}case"TensorArrayCloseV3":{const r=Rx("tensorArrayId",e,t,n),a=n.getTensorArray(r.id);return a.clearAndClose(),[a.idTensor]}case"TensorListSetItem":{const r=Rx("tensorListId",e,t,n),a=Rx("index",e,t,n),s=Rx("tensor",e,t,n),i=n.getTensorList(r.id);return i.setItem(a,s),[i.idTensor]}case"TensorListGetItem":{const r=Rx("tensorListId",e,t,n),a=Rx("index",e,t,n),s=Rx("elementShape",e,t,n),i=Rx("elementDType",e,t,n);return[n.getTensorList(r.id).getItem(a,s,i)]}case"TensorListScatterV2":case"TensorListScatter":{const r=Rx("indices",e,t,n),a=function(e,t,n,r){if(t.length!==e.shape[0])throw new Error(`Expected len(indices) == tensor.shape[0], but saw: ${t.length} vs. ${e.shape[0]}`);const a=Math.max(...t);if(null!=r&&-1!==r&&a>=r)throw new Error(`Max index must be < array size (${a} vs. ${r})`);const s=new Ek([],n,e.dtype,r),i=Sh(e,0);return t.forEach(((e,t)=>{s.setItem(e,i[t])})),s}(Rx("tensor",e,t,n),r,Rx("elementShape",e,t,n),Rx("numElements",e,t,n));return n.addTensorList(a),[a.idTensor]}case"TensorListReserve":case"EmptyTensorList":{const r=Rx("elementShape",e,t,n),a=Rx("elementDType",e,t,n);let s;s="TensorListReserve"===e.op?"numElements":"maxNumElements";const i=function(e,t,n){return new Ek([],e,t,n)}(r,a,Rx(s,e,t,n));return n.addTensorList(i),[i.idTensor]}case"TensorListGather":{const r=Rx("tensorListId",e,t,n),a=Rx("indices",e,t,n),s=Rx("elementShape",e,t,n),i=Rx("elementDType",e,t,n);return[n.getTensorList(r.id).gather(a,i,s)]}case"TensorListStack":{const r=Rx("tensorListId",e,t,n),a=Rx("elementShape",e,t,n),s=Rx("elementDType",e,t,n),i=Rx("numElements",e,t,n);return[n.getTensorList(r.id).stack(a,s,i)]}case"TensorListFromTensor":{const r=function(e,t,n){const r=e.dtype;if(e.shape.length<1)throw new Error(`Tensor must be at least a vector, but saw shape: ${e.shape}`);if(e.dtype!==n)throw new Error(`Invalid data types; op elements ${e.dtype}, but list elements ${n}`);vk(e.shape.slice(1),t,"TensorList shape mismatch: ");const a=Sh(e);return new Ek(a,t,r)}(Rx("tensor",e,t,n),Rx("elementShape",e,t,n),Rx("elementDType",e,t,n));return n.addTensorList(r),[r.idTensor]}case"TensorListConcat":{const r=Rx("tensorListId",e,t,n),a=n.getTensorList(r.id),s=Rx("dtype",e,t,n),i=Rx("elementShape",e,t,n);return[a.concat(s,i)]}case"TensorListPushBack":{const r=Rx("tensorListId",e,t,n),a=Rx("tensor",e,t,n),s=n.getTensorList(r.id);return s.pushBack(a),[s.idTensor]}case"TensorListPopBack":{const r=Rx("tensorListId",e,t,n),a=Rx("elementShape",e,t,n),s=Rx("elementDType",e,t,n);return[n.getTensorList(r.id).popBack(a,s)]}case"TensorListSplit":{const r=Rx("tensor",e,t,n),a=Rx("elementShape",e,t,n),s=function(e,t,n){let r=0;const a=t.map((e=>(r+=e,r)));if(r!==e.shape[0])throw new Error(`Expected sum of lengths to be equal to\n tensor.shape[0], but sum of lengths is\n ${r}, and tensor's shape is: ${e.shape}`);const s=xk(e.shape.slice(1),n),i=0===r?0:e.size/r,o=po((()=>{const n=[];e=Al(e,[1,r,i]);for(let r=0;r((e,t,n)=>{switch(e.op){case"Conv1D":{const r=Rx("stride",e,t,n),a=Rx("pad",e,t,n),s=Rx("dataFormat",e,t,n).toUpperCase(),i=Rx("dilation",e,t,n);return[Jl(Rx("x",e,t,n),Rx("filter",e,t,n),r,a,s,i)]}case"Conv2D":{const r=Rx("strides",e,t,n),a=Px(e,t,n),s=Rx("dataFormat",e,t,n).toUpperCase(),i=Rx("dilations",e,t,n);return[Yl(Rx("x",e,t,n),Rx("filter",e,t,n),[r[1],r[2]],a,s,[i[1],i[2]])]}case"_FusedConv2D":{const{stride:r,pad:a,dataFormat:s,dilations:i,biasArg:o,preluArg:l,activationFunc:u,leakyreluAlpha:c}=Ck(e,t,n);return[Gh({x:Rx("x",e,t,n),filter:Rx("filter",e,t,n),strides:[r[1],r[2]],pad:a,dataFormat:s,dilations:[i[1],i[2]],bias:o,activation:u,preluActivationWeights:l,leakyreluAlpha:c})]}case"FusedDepthwiseConv2dNative":{const{stride:r,pad:a,dataFormat:s,dilations:i,biasArg:o,preluArg:l,activationFunc:u,leakyreluAlpha:c}=Ck(e,t,n);return[qh({x:Rx("x",e,t,n),filter:Rx("filter",e,t,n),strides:[r[1],r[2]],pad:a,dataFormat:s,dilations:[i[1],i[2]],bias:o,activation:u,preluActivationWeights:l,leakyreluAlpha:c})]}case"Conv2DBackpropInput":case"Conv2dTranspose":{const r=Rx("outputShape",e,t,n),a=Rx("strides",e,t,n),s=Px(e,t,n);return[Ql(Rx("x",e,t,n),Rx("filter",e,t,n),r,[a[1],a[2]],s)]}case"DepthwiseConv2dNative":case"DepthwiseConv2d":{const r=Rx("strides",e,t,n),a=Px(e,t,n),s=Rx("dilations",e,t,n),i=Rx("dataFormat",e,t,n).toUpperCase();return[lu(Rx("input",e,t,n),Rx("filter",e,t,n),[r[1],r[2]],a,i,[s[1],s[2]])]}case"Conv3D":{const r=Rx("strides",e,t,n),a=Rx("pad",e,t,n),s=Rx("dataFormat",e,t,n).toUpperCase(),i=Rx("dilations",e,t,n);return[eu(Rx("x",e,t,n),Rx("filter",e,t,n),[r[1],r[2],r[3]],a,s,[i[1],i[2],i[3]])]}case"AvgPool":{const r=Rx("strides",e,t,n),a=Rx("pad",e,t,n),s=Rx("kernelSize",e,t,n);return[Dl(Rx("x",e,t,n),[s[1],s[2]],[r[1],r[2]],a)]}case"MaxPool":{const r=Rx("strides",e,t,n),a=Rx("pad",e,t,n),s=Rx("kernelSize",e,t,n);return[rc(Rx("x",e,t,n),[s[1],s[2]],[r[1],r[2]],a)]}case"MaxPoolWithArgmax":{const r=Rx("strides",e,t,n),a=Rx("pad",e,t,n),s=Rx("kernelSize",e,t,n),i=Rx("includeBatchInIndex",e,t,n),{result:o,indexes:l}=sc(Rx("x",e,t,n),[s[1],s[2]],[r[1],r[2]],a,i);return[o,l]}case"AvgPool3D":{const r=Rx("strides",e,t,n),a=Rx("pad",e,t,n),s=Rx("kernelSize",e,t,n);return[Tl(Rx("x",e,t,n),[s[1],s[2],s[3]],[r[1],r[2],r[3]],a)]}case"MaxPool3D":{const r=Rx("strides",e,t,n),a=Rx("pad",e,t,n),s=Rx("kernelSize",e,t,n);return[ac(Rx("x",e,t,n),[s[1],s[2],s[3]],[r[1],r[2],r[3]],a)]}case"Dilation2D":{const r=Rx("strides",e,t,n),a=Rx("pad",e,t,n),s=Rx("dilations",e,t,n),i=r[1],o=r[2],l=s[1],u=s[2];return[cu(Rx("x",e,t,n),Rx("filter",e,t,n),[i,o],a,[l,u],"NHWC")]}default:throw TypeError(`Node type ${e.op} is not implemented`)}})(e,t,n)));case"creation":return po((()=>((e,t,n)=>{switch(e.op){case"Fill":{const r=Rx("shape",e,t,n),a=Rx("dtype",e,t,n);return[jo(r,Rx("value",e,t,n),a)]}case"LinSpace":return[Ou(Rx("start",e,t,n),Rx("stop",e,t,n),Rx("num",e,t,n))];case"Multinomial":{const r=Rx("logits",e,t,n),a=Rx("numSamples",e,t,n),s=Rx("seed",e,t,n);return[gc(r,a,s)]}case"OneHot":{const r=Rx("indices",e,t,n),a=Rx("depth",e,t,n),s=Rx("onValue",e,t,n),i=Rx("offValue",e,t,n);return[mi(r,a,s,i)]}case"Ones":return[lc(Rx("shape",e,t,n),Rx("dtype",e,t,n))];case"OnesLike":return[bc(Rx("x",e,t,n))];case"RandomUniform":return[Bc(Rx("shape",e,t,n),Rx("minval",e,t,n),Rx("maxval",e,t,n),Rx("dtype",e,t,n))];case"Range":return[$c(Rx("start",e,t,n),Rx("stop",e,t,n),Rx("step",e,t,n),Rx("dtype",e,t,n))];case"TruncatedNormal":{const r=Rx("shape",e,t,n),a=Rx("mean",e,t,n),s=Rx("stdDev",e,t,n),i=Rx("seed",e,t,n);return[kh(r,a,s,Rx("dtype",e,t,n),i)]}case"Zeros":return[oc(Rx("shape",e,t,n),Rx("dtype",e,t,n))];case"ZerosLike":return[Ro(Rx("x",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}})(e,t,n)));case"dynamic":return(async(e,t,n)=>{switch(e.op){case"NonMaxSuppressionV5":{const{boxes:r,scores:a,maxOutputSize:s,iouThreshold:i,scoreThreshold:o,softNmsSigma:l}=Sk(e,t,n),u=await zf.nonMaxSuppressionWithScoreAsync(r,a,s,i,o,l);return[u.selectedIndices,u.selectedScores]}case"NonMaxSuppressionV4":{const{boxes:r,scores:a,maxOutputSize:s,iouThreshold:i,scoreThreshold:o}=Sk(e,t,n),l=Rx("padToMaxOutputSize",e,t,n),u=await zf.nonMaxSuppressionPaddedAsync(r,a,s,i,o,l);return[u.selectedIndices,u.validOutputs]}case"NonMaxSuppressionV3":case"NonMaxSuppressionV2":{const{boxes:r,scores:a,maxOutputSize:s,iouThreshold:i,scoreThreshold:o}=Sk(e,t,n);return[await zf.nonMaxSuppressionAsync(r,a,s,i,o)]}case"Where":{const r=Ks(Rx("condition",e,t,n),"bool"),a=[await Ah(r)];return r.dispose(),a}case"ListDiff":return Jc(Rx("x",e,t,n),Rx("y",e,t,n));default:throw TypeError(`Node type ${e.op} is not implemented`)}})(e,t,n);case"evaluation":return po((()=>((e,t,n)=>{switch(e.op){case"TopKV2":{const r=Rx("x",e,t,n),a=Rx("k",e,t,n),s=Rx("sorted",e,t,n),i=xh(r,a,s);return[i.values,i.indices]}case"Unique":{const r=Rx("x",e,t,n),a=Eh(r);return[a.values,a.indices]}case"UniqueV2":{const r=Rx("x",e,t,n),a=Rx("axis",e,t,n),s=Eh(r,a);return[s.values,s.indices]}default:throw TypeError(`Node type ${e.op} is not implemented`)}})(e,t,n)));case"image":return po((()=>((e,t,n)=>{switch(e.op){case"ResizeBilinear":{const r=Rx("images",e,t,n),a=Rx("size",e,t,n),s=Rx("alignCorners",e,t,n),i=Rx("halfPixelCenters",e,t,n);return[zf.resizeBilinear(r,[a[0],a[1]],s,i)]}case"ResizeNearestNeighbor":{const r=Rx("images",e,t,n),a=Rx("size",e,t,n),s=Rx("alignCorners",e,t,n),i=Rx("halfPixelCenters",e,t,n);return[zf.resizeNearestNeighbor(r,[a[0],a[1]],s,i)]}case"CropAndResize":{const r=Rx("image",e,t,n),a=Rx("boxes",e,t,n),s=Rx("boxInd",e,t,n),i=Rx("cropSize",e,t,n),o=Rx("method",e,t,n),l=Rx("extrapolationValue",e,t,n);return[zf.cropAndResize(r,a,s,i,o,l)]}default:throw TypeError(`Node type ${e.op} is not implemented`)}})(e,t,n)));case"graph":return po((()=>((e,t,n)=>{switch(e.op){case"Const":return t[e.name];case"PlaceholderWithDefault":const r=Rx("default",e,t,n);return[Ox(e.name,t,n)||r];case"Placeholder":return[Ox(e.name,t,n)];case"Identity":case"StopGradient":case"FakeQuantWithMinMaxVars":return[Lx(Rx("x",e,t,n))];case"IdentityN":return Rx("x",e,t,n).map((e=>Lx(e)));case"Snapshot":return[Lx(Rx("x",e,t,n))];case"Shape":return[yh(Rx("x",e,t,n).shape,"int32")];case"ShapeN":return Rx("x",e,t,n).map((e=>yh(e.shape)));case"Size":return[Wo(Rx("x",e,t,n).size,"int32")];case"Rank":return[Wo(Rx("x",e,t,n).rank,"int32")];case"NoOp":return[Wo(1)];case"Print":const a=Rx("x",e,t,n),s=Rx("data",e,t,n),i=Rx("message",e,t,n),o=Rx("summarize",e,t,n);console.warn("The graph has a tf.print() operation,usually used for debugging, which slows down performance."),console.log(i);for(let e=0;e((e,t,n)=>{switch(e.op){case"Equal":return[hu(Rx("a",e,t,n),Rx("b",e,t,n))];case"NotEqual":return[yc(Rx("a",e,t,n),Rx("b",e,t,n))];case"Greater":return[Cu(Rx("a",e,t,n),Rx("b",e,t,n))];case"GreaterEqual":return[Su(Rx("a",e,t,n),Rx("b",e,t,n))];case"Less":return[Fu(Rx("a",e,t,n),Rx("b",e,t,n))];case"LessEqual":return[Ru(Rx("a",e,t,n),Rx("b",e,t,n))];case"LogicalAnd":return[Qu(Rx("a",e,t,n),Rx("b",e,t,n))];case"LogicalNot":return[ec(Rx("a",e,t,n))];case"LogicalOr":return[tc(Rx("a",e,t,n),Rx("b",e,t,n))];case"Select":case"SelectV2":return[fu(Rx("condition",e,t,n),Rx("a",e,t,n),Rx("b",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}})(e,t,n)));case"matrices":return po((()=>((e,t,n)=>{switch(e.op){case"BatchMatMul":case"BatchMatMulV2":case"MatMul":return[pi(Rx("a",e,t,n),Rx("b",e,t,n),Rx("transposeA",e,t,n),Rx("transposeB",e,t,n))];case"Einsum":return[mu(Rx("equation",e,t,n),...Rx("tensors",e,t,n))];case"Transpose":return[gi(Rx("x",e,t,n),Rx("perm",e,t,n))];case"_FusedMatMul":const[r,a]=Rx("fusedOps",e,t,n),s="biasadd"===r,i="prelu"===a,o=Rx("numArgs",e,t,n),l=Rx("leakyreluAlpha",e,t,n);if(s){if(i&&2!==o)throw new Error("Fused MatMul with BiasAdd and Prelu must have two extra arguments: bias and alpha.");if(!i&&1!==o)throw new Error("Fused MatMul with BiasAdd must have one extra argument: bias.")}const[u,c]=Rx("args",e,t,n);return[Yh({a:Rx("a",e,t,n),b:Rx("b",e,t,n),transposeA:Rx("transposeA",e,t,n),transposeB:Rx("transposeB",e,t,n),bias:u,activation:a,preluActivationWeights:c,leakyreluAlpha:l})];default:throw TypeError(`Node type ${e.op} is not implemented`)}})(e,t,n)));case"normalization":return po((()=>((e,t,n)=>{switch(e.op){case"FusedBatchNorm":case"FusedBatchNormV2":case"FusedBatchNormV3":return[Pl(Rx("x",e,t,n),Rx("mean",e,t,n),Rx("variance",e,t,n),Rx("offset",e,t,n),Rx("scale",e,t,n),Rx("epsilon",e,t,n))];case"LRN":return[Mu(Rx("x",e,t,n),Rx("radius",e,t,n),Rx("bias",e,t,n),Rx("alpha",e,t,n),Rx("beta",e,t,n))];case"Softmax":return[sh(Rx("x",e,t,n))];case"LogSoftmax":return[Vu(Rx("x",e,t,n))];case"SparseToDense":return[Mh(Rx("sparseIndices",e,t,n),Rx("outputShape",e,t,n),Rx("sparseValues",e,t,n),Rx("defaultValue",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}})(e,t,n)));case"reduction":return po((()=>((e,t,n)=>{switch(e.op){case"Max":{const r=Rx("axis",e,t,n),a=Rx("keepDims",e,t,n);return[Wu(Rx("x",e,t,n),r,a)]}case"Mean":{const r=Rx("axis",e,t,n),a=Rx("keepDims",e,t,n);return[ic(Rx("x",e,t,n),r,a)]}case"Min":{const r=Rx("axis",e,t,n),a=Rx("keepDims",e,t,n);return[cc(Rx("x",e,t,n),r,a)]}case"Sum":{const r=Rx("axis",e,t,n),a=Rx("keepDims",e,t,n);return[Uu(Rx("x",e,t,n),r,a)]}case"All":{const r=Rx("axis",e,t,n),a=Rx("keepDims",e,t,n);return[ol(Rx("x",e,t,n),r,a)]}case"Any":{const r=Rx("axis",e,t,n),a=Rx("keepDims",e,t,n);return[ll(Rx("x",e,t,n),r,a)]}case"ArgMax":{const r=Rx("axis",e,t,n);return[ul(Rx("x",e,t,n),r)]}case"ArgMin":{const r=Rx("axis",e,t,n);return[cl(Rx("x",e,t,n),r)]}case"Prod":{const r=Rx("axis",e,t,n),a=Rx("keepDims",e,t,n);return[Ic(Rx("x",e,t,n),r,a)]}case"Cumsum":{const r=Rx("axis",e,t,n),a=Rx("exclusive",e,t,n),s=Rx("reverse",e,t,n);return[su(Rx("x",e,t,n),r,a,s)]}case"Bincount":const r=Rx("x",e,t,n),a=Rx("weights",e,t,n),s=Rx("size",e,t,n);return[Ul(r,a,s)];case"DenseBincount":{const r=Rx("x",e,t,n),a=Rx("weights",e,t,n),s=Rx("size",e,t,n),i=Rx("binaryOutput",e,t,n);return[iu(r,a,s,i)]}default:throw TypeError(`Node type ${e.op} is not implemented`)}})(e,t,n)));case"slice_join":return po((()=>((e,t,n)=>{switch(e.op){case"ConcatV2":case"Concat":{const r=Rx("n",e,t,n),a=Rx("axis",e,t,n);let s=Rx("tensors",e,t,n);return s=s.slice(0,r),[Fl(s,a)]}case"Gather":{const r=Rx("x",e,t,n),a=Rx("indices",e,t,n);return[Eu(r,Ks(a,"int32"),0)]}case"GatherV2":{const r=Rx("axis",e,t,n),a=Rx("batchDims",e,t,n),s=Rx("x",e,t,n),i=Rx("indices",e,t,n);return[Eu(s,Ks(i,"int32"),r,a)]}case"Reverse":{const r=Rx("dims",e,t,n),a=[];for(let e=0;e{const r=Rx("axis",e,t,n),a=Rx("tensors",e,t,n),s=a[0].shape,i=fh(a[0]).shape,o=a.map((e=>{const t=se(e.shape,s);if(!t&&!se(fh(e).shape,i))throw new Error("the input tensors shape does not match");return t?e:Al(e,s)}));return[dh(o,r)]}));case"Unpack":{const r=Rx("axis",e,t,n),a=Rx("tensor",e,t,n);return Sh(a,r)}case"Tile":{const r=Rx("reps",e,t,n);return[_u(Rx("x",e,t,n),r)]}case"Split":case"SplitV":{const r=Rx("axis",e,t,n),a=Rx("numOrSizeSplits",e,t,n),s=Rx("x",e,t,n);return uh(s,a,r)}case"ScatterNd":{const r=Rx("indices",e,t,n),a=Rx("values",e,t,n),s=Rx("shape",e,t,n);return[Oh(r,a,s)]}case"GatherNd":{const r=Rx("x",e,t,n),a=Rx("indices",e,t,n);return[Bh(r,a)]}case"SparseToDense":{const r=Rx("sparseIndices",e,t,n),a=Rx("outputShape",e,t,n),s=Rx("sparseValues",e,t,n),i=Rx("defaultValue",e,t,n);return[Mh(r,s,a,s.dtype===i.dtype?i:Ks(i,s.dtype))]}default:throw TypeError(`Node type ${e.op} is not implemented`)}})(e,t,n)));case"sparse":return po((()=>((e,t,n)=>{switch(e.op){case"SparseReshape":{const{outputIndices:r,outputShape:a}=Vf.sparseReshape(Rx("inputIndices",e,t,n),Rx("inputShape",e,t,n),Rx("newShape",e,t,n));return[r,a]}default:throw TypeError(`Node type ${e.op} is not implemented`)}})(e,t,n)));case"spectral":return po((()=>((e,t,n)=>{switch(e.op){case"FFT":return[ih(Rx("x",e,t,n))];case"IFFT":return[oh(Rx("x",e,t,n))];case"RFFT":return[ch(Rx("x",e,t,n))];case"IRFFT":return[lh(Rx("x",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}})(e,t,n)));case"transformation":return po((()=>((e,t,n)=>{switch(e.op){case"Cast":return[Ks(Rx("x",e,t,n),Rx("dtype",e,t,n))];case"ExpandDims":{const r=Rx("axis",e,t,n);return[vu(Rx("x",e,t,n),r)]}case"Squeeze":{const r=Rx("axis",e,t,n);return[fh(Rx("x",e,t,n),r)]}case"Reshape":return[Al(Rx("x",e,t,n),Rx("shape",e,t,n))];case"MirrorPad":return[fc(Rx("x",e,t,n),Rx("padding",e,t,n),Rx("mode",e,t,n))];case"PadV2":case"Pad":return[wc(Rx("x",e,t,n),Rx("padding",e,t,n),Rx("constantValue",e,t,n))];case"SpaceToBatchND":{const r=Rx("blockShape",e,t,n),a=Rx("paddings",e,t,n);return[Cc(Rx("x",e,t,n),r,a)]}case"BatchToSpaceND":{const r=Rx("blockShape",e,t,n),a=Rx("crops",e,t,n);return[$l(Rx("x",e,t,n),r,a)]}case"DepthToSpace":{const r=Rx("blockSize",e,t,n),a=Rx("dataFormat",e,t,n).toUpperCase();return[ou(Rx("x",e,t,n),r,a)]}case"BroadcastTo":return[Vl(Rx("x",e,t,n),Rx("shape",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}})(e,t,n)));case"hash_table":return(async(e,t,n,r)=>{switch(e.op){case"HashTable":case"HashTableV2":{const a=Rx("keyDType",e,t,n),s=Rx("valueDType",e,t,n),i=new Nk(a,s);return r.addHashTable(e.name,i),[i.handle]}case"LookupTableImport":case"LookupTableImportV2":{const a=Rx("tableHandle",e,t,n,r),s=Rx("keys",e,t,n),i=Rx("values",e,t,n),o=r.getHashTableById(a.id);return[await o.import(s,i)]}case"LookupTableFind":case"LookupTableFindV2":{const a=Rx("tableHandle",e,t,n,r),s=Rx("keys",e,t,n),i=Rx("defaultValue",e,t,n),o=r.getHashTableById(a.id);return[await o.find(s,i)]}case"LookupTableSize":case"LookupTableSizeV2":{const a=Rx("tableHandle",e,t,n,r);return[r.getHashTableById(a.id).tensorSize()]}default:throw TypeError(`Node type ${e.op} is not implemented`)}})(e,t,n,r);case"custom":const a=Tx(e.op);if(a&&a.customExecutor)return a.customExecutor(new bk(e,t,n));throw TypeError(`Custom op ${e.op} is not registered.`);default:throw TypeError(`Unknown op '${e.op}'. File an issue at https://github.com/tensorflow/tfjs/issues so we can add it, or register a custom execution with tf.registerOp()`)}})(e,t,n);return Pe(a)?a.then((e=>[].concat(e))):[].concat(a)}class Ak{constructor(e={},t={},n={},r={}){this.weightMap=e,this.tensorArrayMap=t,this.tensorListMap=n,this.functionMap=r,this.rootContext={id:0,frameName:"",iterationId:0},this.contexts=[this.rootContext],this.lastId=0,this.generateCurrentContextIds()}newFrame(e,t){return{id:e,frameName:t,iterationId:0}}set currentContext(e){this.contexts!==e&&(this.contexts=e,this.generateCurrentContextIds())}get currentContext(){return this.contexts}get currentContextId(){return this._currentContextIds[0]}get currentContextIds(){return this._currentContextIds}generateCurrentContextIds(){const e=[];for(let t=0;t0===e.id&&0===e.iterationId?"":`${e.frameName}-${e.iterationId}`)).join("/"):""}enterFrame(e){this.contexts&&(this.lastId++,this.contexts=this.contexts.slice(),this.contexts.push(this.newFrame(this.lastId,e)),this._currentContextIds.unshift(this.contextIdforContexts(this.contexts)))}exitFrame(){if(!(this.contexts&&this.contexts.length>1))throw new Error("Cannot exit frame, the context is empty");this.contexts=this.contexts.slice(),this.contexts.splice(-1),this.currentContextIds.shift()}nextIteration(){if(!(this.contexts&&this.contexts.length>0))throw new Error("Cannot increase frame iteration, the context is empty");{this.contexts=this.contexts.slice(),this.lastId++;const e=Object.assign({},this.contexts[this.contexts.length-1]);e.iterationId+=1,e.id=this.lastId,this.contexts.splice(-1,1,e),this._currentContextIds.splice(0,1,this.contextIdforContexts(this.contexts))}}getWeight(e){return this.weightMap[e]}addTensorArray(e){this.tensorArrayMap[e.id]=e}getTensorArray(e){return this.tensorArrayMap[e]}addTensorList(e){this.tensorListMap[e.id]=e}getTensorList(e){return this.tensorListMap[e]}dispose(e){for(const t in this.tensorArrayMap)this.tensorArrayMap[t].clearAndClose(e);for(const t in this.tensorListMap)this.tensorListMap[t].clearAndClose(e)}}function Dk(e,t,n,r){const a=new Set,s=[];let i=null,o=null;const l=new Set,u=Object.keys(e).map((e=>$x(e)[0]));let c=[];null!=r&&(c=r.map((e=>$x(e.name)[0])));const h=[...t];for(;h.length>0;){const e=h.pop();(Ok(e)||Mk(e)||Bk(e))&&null==i&&(i=e,o=i.children.map((e=>e.name)).filter((e=>a.has(e)))),a.add(e.name),null==n[e.name]&&-1===u.indexOf(e.name)&&-1===c.indexOf(e.name)&&(0!==e.inputs.length?e.inputs.forEach((e=>{l.has(e.name)||(l.add(e.name),h.push(e))})):s.push(e.name))}return{inputs:e,outputs:t,usedNodes:a,missingInputs:s,dynamicNode:i,syncInputs:o}}const Tk=["Switch","Merge","Enter","Exit","NextIteration","StatelessIf","StatelessWhile","if","While"],Fk=["NonMaxSuppressionV2","NonMaxSuppressionV3","NonMaxSuppressionV5","Where"],Rk=["HashTable","HashTableV2","LookupTableImport","LookupTableImportV2","LookupTableFind","LookupTableFindV2","LookupTableSize","LookupTableSizeV2"];function Ok(e){return Tk.indexOf(e.op)>=0}function Mk(e){return Fk.indexOf(e.op)>=0}function Bk(e){return Rk.indexOf(e.op)>=0}class $k{constructor(e,t){this.graph=e,this.parent=t,this.compiledMap=new Map,this._weightMap={},this.SEPERATOR=",",this._functions={},this._functionExecutorMap={},this._outputs=e.outputs,this._inputs=e.inputs,this._initNodes=e.initNodes,this._signature=e.signature,this._functions=e.functions,null!=e.functions&&Object.keys(e.functions).forEach((t=>{this._functionExecutorMap[t]=new $k(e.functions[t],this)}))}get weightIds(){return this.parent?this.parent.weightIds:this._weightIds}get functionExecutorMap(){return this.parent?this.parent.functionExecutorMap:this._functionExecutorMap}get weightMap(){return this.parent?this.parent.weightMap:this._weightMap}set weightMap(e){const t=Object.keys(e).map((t=>e[t].map((e=>e.id))));this._weightIds=[].concat(...t),this._weightMap=e}set resourceManager(e){this._resourceManager=e}get inputs(){return this._inputs.map((e=>({name:e.name,shape:e.attrParams.shape?e.attrParams.shape.value:void 0,dtype:e.attrParams.dtype?e.attrParams.dtype.value:void 0})))}get outputs(){return this._outputs.map((e=>({name:e.name,shape:e.attrParams.shape?e.attrParams.shape.value:void 0,dtype:e.attrParams.dtype?e.attrParams.dtype.value:void 0})))}get inputNodes(){return this._inputs.map((e=>e.signatureKey||e.name))}get outputNodes(){return this._outputs.map((e=>{const t=e.signatureKey||e.name;return e.defaultOutput?`${t}:${e.defaultOutput}`:t}))}get functions(){return Object.keys(this._functions).reduce(((e,t)=>(e[t]=this._functions[t].signature,e)),{})}getCompilationKey(e,t){const n=e.map((e=>e.name)).sort(),r=t.map((e=>e.name)).sort();return n.join(this.SEPERATOR)+"--"+r.join(this.SEPERATOR)}compile(e,t){const n=Dk(e,t,this.weightMap,this._initNodes),{missingInputs:r,dynamicNode:a,syncInputs:s}=n;if(null!=a)throw new Error(`This execution contains the node '${a.name}', which has the dynamic op '${a.op}'. Please use model.executeAsync() instead. Alternatively, to avoid the dynamic ops, specify the inputs [${s}]`);if(r.length>0){const n=t.map((e=>e.name)),a=Object.keys(e);throw new Error(`Cannot compute the outputs [${n}] from the provided inputs [${a}]. Missing the following inputs: [${r}]`)}return function(e,t,n){const{usedNodes:r,inputs:a}=n,s=[],i=Object.keys(a).map((e=>$x(e)[0])).map((t=>e.nodes[t])),o=e.initNodes;i.forEach((e=>{r.has(e.name)&&s.push(e)})),e.weights.forEach((e=>{r.has(e.name)&&s.push(e)})),null!=o&&o.forEach((e=>{r.has(e.name)&&s.push(e)}));const l=new Set,u=[];for(;s.length>0;){const e=s.pop();l.add(e.name),t[e.name]||u.push(e),e.children.forEach((e=>{!l.has(e.name)&&r.has(e.name)&&e.inputs.every((e=>l.has(e.name)))&&s.push(e)}))}return u}(this.graph,this.weightMap,n)}execute(e,t){e=this.mapInputs(e);const n=Object.keys(e).sort();this.checkInputs(e),this.checkInputShapeAndType(e),t=this.mapOutputs(t),this.checkOutputs(t);const r=n.map((e=>this.graph.nodes[$x(e)[0]])),a=t.map((e=>$x(e)[0]));let s=a.map((e=>this.graph.nodes[e]));0===s.length&&(s=this._outputs);const i=this.getCompilationKey(r,s);let o=this.compiledMap.get(i);null==o&&(o=this.compile(e,s),this.compiledMap.set(i,o));const l={},u={};return po((()=>{const n=new Ak(this.weightMap,l,u,this.functionExecutorMap),r=Object.assign({},this.weightMap);Object.keys(e).forEach((t=>{const[n,a]=$x(t),s=[];s[a]=e[t],r[n]=s}));const s=this.getFrozenTensorIds(r),i={};for(let e=0;eOx(e,r,n)))}))}getFrozenTensorIds(e){const t=[].concat.apply([],Object.keys(e).map((t=>e[t])).map((e=>e.map((e=>e.id)))));return new Set(t)}checkTensorForDisposal(e,t,n,r,a,s,i){"control"!==t.category&&-1===s.indexOf(e)&&(n[e].forEach((e=>{null!=e&&(i[e.id]=(i[e.id]||0)+t.children.length)})),t.inputs.forEach((e=>{if("control"!==e.category){const t=function(e,t,n){return t[Bx(e,n.currentContextId)]}(e.name,n,r);null!=t&&t.forEach((e=>{if(e&&!e.kept&&!a.has(e.id)){const t=i[e.id];1===t?(e.dispose(),delete i[e.id]):null!=t&&i[e.id]--}}))}})))}async executeAsync(e,t){return this._executeAsync(e,t)}async _executeAsync(e,t,n=!1,r={},a={}){n||(e=this.mapInputs(e),this.checkInputs(e),this.checkInputShapeAndType(e),t=this.mapOutputs(t),this.checkOutputs(t));const s=new Ak(this.weightMap,r,a,this.functionExecutorMap),i=await this.executeWithControlFlow(e,s,t,n),o=t.map((e=>Ox(e,i,s))),l=o.map((e=>e.id)),u=Object.keys(e).map((t=>e[t].id)),c=new Set([...l,...u,...this.weightIds]);return Object.keys(i).forEach((e=>{i[e].forEach((e=>{!e||e.kept||e.isDisposed||c.has(e.id)||e.dispose()}))})),null==this.parent&&s.dispose(c),o}async executeFunctionAsync(e,t,n){const r=e.reduce(((e,t,n)=>(e[this.inputs[n].name]=t,e)),{});return this._executeAsync(r,this.outputNodes,!0,t,n)}async executeWithControlFlow(e,t,n,r){const a=Object.keys(e),s=a.map((e=>this.graph.nodes[$x(e)[0]])),i=n.map((e=>$x(e)[0]));let o=i.map((e=>this.graph.nodes[e]));0===o.length&&(o=this._outputs);const{usedNodes:l,missingInputs:u,dynamicNode:c,syncInputs:h}=Dk(e,o,this.weightMap,this._initNodes),f=[...s,...this.graph.weights,...this._initNodes||[]].map((e=>({node:e,contexts:t.currentContext}))),d=Object.assign({},this.weightMap);Object.keys(e).forEach((t=>{const[n,r]=$x(t),a=[];a[r]=e[t],d[n]=a}));const p={},m=this.getFrozenTensorIds(d),g={};for(;f.length>0;){const e=this.processStack(s,f,t,d,g,m,i,p,l);await Promise.all(e)}null!=c||r||console.warn("This model execution did not contain any nodes with control flow or dynamic output shapes. You can use model.execute() instead.");const y=o.filter((e=>!Ok(e)&&!Ox(e.name,d,t))).map((e=>e.name));if(y.length>0){let e="";throw null!=c&&(e=`Alternatively, to avoid the dynamic ops, use model.execute() and specify the inputs [${h}]`),new Error(`Cannot compute the outputs [${y}] from the provided inputs [${a}]. Consider providing the following inputs: [${u}]. ${e}`)}return d}processStack(e,t,n,r,a,s,i,o,l){const u=[];for(;t.length>0;){const e=t.pop();n.currentContext=e.contexts;let c="";if("Enter"===e.node.op&&Rx("isConstant",e.node,r,n)&&([c]=Mx(e.node.name,n)),null==r[e.node.name]){const h=Ik(e.node,r,n,this._resourceManager);c||([c]=Mx(e.node.name,n));const f=n.currentContext;Pe(h)?u.push(h.then((u=>(r[c]=u,n.currentContext=f,this.checkTensorForDisposal(c,e.node,r,n,s,i,o),this.processChildNodes(e.node,t,n,r,a,l),u)))):(r[c]=h,this.checkTensorForDisposal(c,e.node,r,n,s,i,o),this.processChildNodes(e.node,t,n,r,a,l))}else this.processChildNodes(e.node,t,n,r,a,l)}return u}processChildNodes(e,t,n,r,a,s){e.children.forEach((e=>{const[i]=Mx(e.name,n);!a[i]&&s.has(e.name)&&("Merge"===e.op?e.inputNames.some((e=>!!Ox(e,r,n)))&&(a[i]=!0,t.push({contexts:n.currentContext,node:e})):e.inputNames.every((e=>!!Ox(e,r,n)))&&(a[i]=!0,t.push({contexts:n.currentContext,node:e})))}))}dispose(){Object.keys(this.weightMap).forEach((e=>this.weightMap[e].forEach((e=>e.dispose()))))}checkInputShapeAndType(e){Object.keys(e).forEach((t=>{const n=e[t],[r]=$x(t),a=this.graph.nodes[r];if(a.attrParams.shape&&a.attrParams.shape.value){const e=a.attrParams.shape.value;Q(e.length===n.shape.length&&n.shape.every(((t,n)=>-1===e[n]||e[n]===t)),(()=>`The shape of dict['${a.name}'] provided in model.execute(dict) must be [${e}], but was [${n.shape}]`))}a.attrParams.dtype&&a.attrParams.dtype.value&&Q(n.dtype===a.attrParams.dtype.value,(()=>`The dtype of dict['${a.name}'] provided in model.execute(dict) must be ${a.attrParams.dtype.value}, but was ${n.dtype}`))}))}mapInputs(e){const t={};for(const n in e)null!=this._signature&&null!=this._signature.inputs&&null!=this._signature.inputs[n]?t[this._signature.inputs[n].name]=e[n]:t[n]=e[n];return t}checkInputs(e){const t=Object.keys(e).filter((e=>{const[t]=$x(e);return null==this.graph.nodes[t]}));if(t.length>0)throw new Error(`The dict provided in model.execute(dict) has keys: [${t}] that are not part of graph`)}mapOutputs(e){return e.map((e=>null!=this._signature&&null!=this._signature.outputs&&null!=this._signature.outputs[e]?this._signature.outputs[e].name:e),{})}checkOutputs(e){e.forEach((e=>{const[t]=$x(e);if(!this.graph.nodes[t])throw new Error(`The output '${e}' is not found in the graph`)}))}}class Pk{constructor(e={},t={}){this.hashTableNameToHandle=e,this.hashTableMap=t}addHashTable(e,t){this.hashTableNameToHandle[e]=t.handle,this.hashTableMap[t.id]=t}getHashTableHandleByName(e){return this.hashTableNameToHandle[e]}getHashTableById(e){return this.hashTableMap[e]}dispose(){for(const e in this.hashTableMap)this.hashTableMap[e].clearAndClose(),delete this.hashTableMap[e];for(const e in this.hashTableNameToHandle)this.hashTableNameToHandle[e].dispose(),delete this.hashTableNameToHandle[e]}}class Lk{constructor(e,t={}){this.modelUrl=e,this.loadOptions=t,this.version="n/a",null==t&&(this.loadOptions={}),this.resourceManager=new Pk}get modelVersion(){return this.version}get inputNodes(){return this.executor.inputNodes}get outputNodes(){return this.executor.outputNodes}get inputs(){return this.executor.inputs}get outputs(){return this.executor.outputs}get weights(){return this.executor.weightMap}get metadata(){return this.artifacts.userDefinedMetadata}get modelSignature(){return this.signature}findIOHandler(){const e=this.modelUrl;if(null!=e.load)this.handler=e;else if(null!=this.loadOptions.requestInit)this.handler=ui(e,this.loadOptions);else{const t=gs(e,this.loadOptions);if(0===t.length)t.push(ui(e,this.loadOptions));else if(t.length>1)throw new Error(`Found more than one (${t.length}) load handlers for URL '${[e]}'`);this.handler=t[0]}}async load(){if(this.findIOHandler(),null==this.handler.load)throw new Error("Cannot proceed with model loading because the IOHandler provided does not have the `load` method implemented.");const e=await this.handler.load();return this.loadSync(e)}loadSync(e){this.artifacts=e;const t=this.artifacts.modelTopology;let n;n=null!=this.artifacts.userDefinedMetadata&&null!=this.artifacts.userDefinedMetadata.signature?this.artifacts.userDefinedMetadata.signature:this.artifacts.signature,this.signature=n,this.version=`${t.versions.producer}.${t.versions.minConsumer}`;const r=as(this.artifacts.weightData,this.artifacts.weightSpecs);if(this.executor=new $k(rk.Instance.transformGraph(t,this.signature)),this.executor.weightMap=this.convertTensorMapToTensorsMap(r),this.executor.resourceManager=this.resourceManager,null!=e.modelInitializer&&null!=e.modelInitializer.node){const t=rk.Instance.transformGraph(e.modelInitializer);this.initializer=new $k(t),this.initializer.weightMap=this.executor.weightMap,this.initializer.resourceManager=this.resourceManager,this.initializer.executeAsync({},[])}return!0}async save(e,t){if("string"==typeof e){const t=ms(e);if(0===t.length)throw new Error(`Cannot find any save handlers for URL '${e}'`);if(t.length>1)throw new Error(`Found more than one (${t.length}) save handlers for URL '${e}'`);e=t[0]}if(null==e.save)throw new Error("GraphModel.save() cannot proceed because the IOHandler provided does not have the `save` attribute defined.");return e.save(this.artifacts)}predict(e,t){return this.execute(e,this.outputNodes)}normalizeInputs(e){if(!(e instanceof _a||Array.isArray(e)))return e;if((e=Array.isArray(e)?e:[e]).length!==this.inputNodes.length)throw new Error(`Input tensor count mismatch,the graph model has ${this.inputNodes.length} placeholders, while there are ${e.length} input tensors.`);return this.inputNodes.reduce(((t,n,r)=>(t[n]=e[r],t)),{})}normalizeOutputs(e){return e=e||this.outputNodes,Array.isArray(e)?e:[e]}execute(e,t){e=this.normalizeInputs(e),t=this.normalizeOutputs(t);const n=this.executor.execute(e,t);return n.length>1?n:n[0]}async executeAsync(e,t){e=this.normalizeInputs(e),t=this.normalizeOutputs(t);const n=await this.executor.executeAsync(e,t);return n.length>1?n:n[0]}convertTensorMapToTensorsMap(e){return Object.keys(e).reduce(((t,n)=>(t[n]=[e[n]],t)),{})}dispose(){this.executor.dispose(),this.initializer&&this.initializer.dispose(),this.resourceManager.dispose()}}async function zk(e,t={}){if(null==e)throw new Error("modelUrl in loadGraphModel() cannot be null. Please provide a url or an IOHandler that loads the model");null==t&&(t={}),t.fromTFHub&&null==e.load&&(e.endsWith("/")||(e+="/"),e=`${e}model.json?tfjs-format=file`);const n=new Lk(e,t);return await n.load(),n}const Wk="3.6.0";function Uk(e,t,n=new Map,r=new Set){if(null==e)return null;if(r.has(e))throw new Error("Circular references are not supported.");if(n.has(e))return n.get(e);const a=t(e);if(a.recurse&&null!==a.value)throw new Error("A deep map function may not return both a value and recurse=true.");if(a.recurse){if(Xk(e)){const a=Array.isArray(e)?[]:{};r.add(e);for(const s in e){const i=Uk(e[s],t,n,r);a[s]=i}return r.delete(e),a}throw new Error(`Can't recurse into non-iterable type: ${e}`)}return n.set(e,a.value),a.value}function Vk(e,t=Hk){return jk(e,t)}function jk(e,t,n=new Set){const r=e[0];if(n.has(r))throw new Error("Circular references are not supported.");const a=t(e);if(a.recurse&&null!==a.value)throw new Error("A deep zip function may not return both a value and recurse=true.");if(a.recurse){if(Xk(r)){const a=Array.isArray(r)?[]:{};n.add(r);for(const s in r){const r=jk(e.map((e=>e[s])),t,n);a[s]=r}return n.delete(r),a}throw new Error(`Can't recurse into non-iterable type: ${r}`)}return a.value}function Hk(e){return null===e?null:Xk(e[0])?{value:null,recurse:!0}:{value:e,recurse:!1}}async function Gk(e,t){const n=new Map;Uk(e,t,n);for(const e of Array.from(n.keys())){const t=n.get(e);if(Pe(t)){const r=await t;n.set(e,r)}}return Uk(e,t,n)}function Xk(e){return null!=e&&!ArrayBuffer.isView(e)&&(Array.isArray(e)||"object"==typeof e&&!(e instanceof _a))}function Kk(e){return e instanceof _a?{value:e.clone(),recurse:!1}:Xk(e)?{value:null,recurse:!0}:{value:e,recurse:!1}}class qk{constructor(e){if(this.capacity=e,this.begin=0,this.end=0,null==e)throw new RangeError("Can't create a ring buffer of unknown capacity.");if(e<1)throw new RangeError("Can't create ring buffer of capacity < 1.");this.data=new Array(e),this.doubledCapacity=2*e}wrap(e){for(;e<0;)e+=this.doubledCapacity;return e%this.doubledCapacity}get(e){if(e<0)throw new RangeError("Can't get item at a negative index.");return this.data[e%this.capacity]}set(e,t){if(e<0)throw new RangeError("Can't set item at a negative index.");this.data[e%this.capacity]=t}length(){let e=this.end-this.begin;return e<0&&(e=this.doubledCapacity+e),e}isFull(){return this.length()===this.capacity}isEmpty(){return 0===this.length()}push(e){if(this.isFull())throw new RangeError("Ring buffer is full.");this.set(this.end,e),this.end=this.wrap(this.end+1)}pushAll(e){for(const t of e)this.push(t)}pop(){if(this.isEmpty())throw new RangeError("Ring buffer is empty.");this.end=this.wrap(this.end-1);const e=this.get(this.end);return this.set(this.end,void 0),e}unshift(e){if(this.isFull())throw new RangeError("Ring buffer is full.");this.begin=this.wrap(this.begin-1),this.set(this.begin,e)}shift(){if(this.isEmpty())throw new RangeError("Ring buffer is empty.");const e=this.get(this.begin);return this.set(this.begin,void 0),this.begin=this.wrap(this.begin+1),e}shuffleExcise(e){if(this.isEmpty())throw new RangeError("Ring buffer is empty.");const t=this.wrap(this.begin+e),n=this.get(t);return this.set(t,this.pop()),n}}class Yk extends qk{constructor(){super(Yk.INITIAL_CAPACITY)}isFull(){return!1}push(e){super.isFull()&&this.expand(),super.push(e)}unshift(e){super.isFull()&&this.expand(),super.unshift(e)}expand(){const e=2*this.capacity,t=new Array(e),n=this.length();for(let e=0;e!0===e))}rowMajorBatch(e,t=!0){return new sE(this,e,t)}columnMajorBatch(e,t=!0,n=Hk){return this.rowMajorBatch(e,t).map((e=>Vk(e,n)))}concatenate(e,t){return new fE(Jk([this,e]),t)}take(e){return e<0||null==e?this:new aE(this,e)}skip(e){return e<0||null==e?this:new rE(this,e)}prefetch(e){return new mE(this,e)}shuffle(e,t){return new gE(this,e,t)}serial(){return new nE(this)}}class eE extends Qk{constructor(e){super(),this.items=e,this.trav=0}summary(){return`Array of ${this.items.length} items`}async next(){if(this.trav>=this.items.length)return{value:null,done:!0};const e=this.items[this.trav];return this.trav++,{value:(t=e,function(e,t){return Uk(e,t)}(t,Kk)),done:!1};var t}}class tE extends Qk{constructor(e){super(),this.nextFn=e}summary(){return"Function call"}async next(){try{return this.nextFn()}catch(e){throw e.message=`Error thrown while iterating through a dataset: ${e.message}`,e}}}class nE extends Qk{constructor(e){super(),this.upstream=e,this.lastRead=Promise.resolve({value:null,done:!1})}summary(){return`${this.upstream.summary()} -> Serial`}async next(){return this.lastRead=this.lastRead.then((()=>this.serialNext())),this.lastRead}async serialNext(){return this.upstream.next()}}class rE extends Qk{constructor(e,t){super(),this.upstream=e,this.maxCount=t,this.count=0,this.lastRead=Promise.resolve({value:null,done:!1})}summary(){return`${this.upstream.summary()} -> Skip`}async next(){return this.lastRead=this.lastRead.then((()=>this.serialNext())),this.lastRead}async serialNext(){for(;this.count++ Take`}async next(){return this.count++>=this.maxCount?{value:null,done:!0}:this.upstream.next()}}class sE extends Qk{constructor(e,t,n=!0){super(),this.upstream=e,this.batchSize=t,this.enableSmallLastBatch=n,this.lastRead=Promise.resolve({value:null,done:!1})}summary(){return`${this.upstream.summary()} -> RowMajorBatch`}async next(){return this.lastRead=this.lastRead.then((()=>this.serialNext())),this.lastRead}async serialNext(){const e=[];for(;e.length0?{value:e,done:!1}:{value:null,done:!0};e.push(t.value)}return{value:e,done:!1}}}class iE extends Qk{constructor(e,t){super(),this.upstream=e,this.predicate=t,this.lastRead=Promise.resolve({value:null,done:!1})}summary(){return`${this.upstream.summary()} -> Filter`}async next(){return this.lastRead=this.lastRead.then((()=>this.serialNext())),this.lastRead}async serialNext(){for(;;){const e=await this.upstream.next();if(e.done||this.predicate(e.value))return e;mo(e.value)}}}class oE extends Qk{constructor(e,t){super(),this.upstream=e,this.transform=t}summary(){return`${this.upstream.summary()} -> Map`}async next(){const e=await this.upstream.next();if(e.done)return{value:null,done:!0};const t=Ma(e.value),n=this.transform(e.value),r=Ma(n);for(const e of t)Oa(e,r)||e.dispose();return{value:n,done:!1}}}class lE extends Qk{constructor(e,t){super(),this.upstream=e,this.handler=t,this.count=0,this.lastRead=Promise.resolve({value:null,done:!1})}summary(){return`${this.upstream.summary()} -> handleErrors`}async next(){return this.lastRead=this.lastRead.then((()=>this.serialNext())),this.lastRead}async serialNext(){for(;;)try{return await this.upstream.next()}catch(e){if(!this.handler(e))return{value:null,done:!0}}}}class uE extends Qk{constructor(e,t){super(),this.upstream=e,this.transform=t}summary(){return`${this.upstream.summary()} -> AsyncMap`}async next(){const e=await this.upstream.next();if(e.done)return{value:null,done:!0};const t=Ma(e.value),n=await this.transform(e.value),r=Ma(n);for(const e of t)Oa(e,r)||e.dispose();return{value:n,done:!1}}}class cE extends Qk{constructor(){super(),this.outputQueue=new Yk,this.lastRead=Promise.resolve({value:null,done:!1})}async next(){return this.lastRead=this.lastRead.then((()=>this.serialNext())),this.lastRead}async serialNext(){for(;0===this.outputQueue.length();)if(!await this.pump())return{value:null,done:!0};return{value:this.outputQueue.shift(),done:!1}}}class hE extends cE{constructor(e,t){super(),this.upstream=e,this.transform=t}summary(){return`${this.upstream.summary()} -> Flatmap`}async pump(){const e=await this.upstream.next();if(e.done)return!1;const t=Ma(e.value),n=this.transform(e.value),r=Ma(n);this.outputQueue.pushAll(n);for(const e of t)Oa(e,r)||e.dispose();return!0}}class fE extends Qk{constructor(e,t){super(),this.baseErrorHandler=t,this.lastRead=null,this.iterator=null,this.moreIterators=e}summary(){return"TODO: fill in upstream of chained summaries -> Chained"}async next(){return this.lastRead=this.readFromChain(this.lastRead),this.lastRead}async readFromChain(e){if(await e,null==this.iterator){const e=await this.moreIterators.next();if(e.done)return{value:null,done:!0};this.iterator=e.value,null!=this.baseErrorHandler&&(this.iterator=this.iterator.handleErrors(this.baseErrorHandler))}const t=await this.iterator.next();return t.done?(this.iterator=null,this.readFromChain(e)):t}}var dE;!function(e){e[e.FAIL=0]="FAIL",e[e.SHORTEST=1]="SHORTEST",e[e.LONGEST=2]="LONGEST"}(dE||(dE={}));class pE extends Qk{constructor(e,t=dE.FAIL){super(),this.iterators=e,this.mismatchMode=t,this.count=0,this.currentPromise=null}summary(){return"{TODO: fill in upstream of zip summaries} -> Zip"}async nextState(e){await e;let t=0,n=0;const r=await Gk(this.iterators,(function(e){return e instanceof Qk?{value:e.next().then((e=>(t++,e.done&&n++,e.value))),recurse:!1}:{value:null,recurse:!0}}));if(t===n)return{value:null,done:!0};if(n>0)switch(this.mismatchMode){case dE.FAIL:throw new Error(`Zipped streams should have the same length. Mismatched at element ${this.count}.`);case dE.SHORTEST:return{value:null,done:!0};case dE.LONGEST:}return this.count++,{value:r,done:!1}}async next(){return this.currentPromise=this.nextState(this.currentPromise),this.currentPromise}}class mE extends Qk{constructor(e,t){super(),this.upstream=e,this.bufferSize=t,this.buffer=new qk(t)}summary(){return`${this.upstream.summary()} -> Prefetch`}refill(){for(;!this.buffer.isFull();){const e=this.upstream.next();this.buffer.push(e)}}next(){return this.refill(),this.buffer.shift()}}class gE extends mE{constructor(e,t,n){super(e,t),this.upstream=e,this.windowSize=t,this.upstreamExhausted=!1,this.random=Dc.alea(n||sa().toString()),this.lastRead=Promise.resolve({value:null,done:!1})}async next(){return this.lastRead=this.lastRead.then((()=>this.serialNext())),this.lastRead}randomInt(e){return Math.floor(this.random()*e)}chooseIndex(){return this.randomInt(this.buffer.length())}async serialNext(){for(this.upstreamExhausted||this.refill();!this.buffer.isEmpty();){const e=this.chooseIndex(),t=await this.buffer.shuffleExcise(e);if(!t.done)return this.refill(),t;this.upstreamExhausted=!0}return{value:null,done:!0}}}class yE{constructor(){this.size=null}batch(e,t=!0){const n=this;let r;return Q(e>0,(()=>`batchSize needs to be positive, but it is\n ${e}`)),r=this.size===1/0||null==this.size?this.size:t?Math.ceil(this.size/e):Math.floor(this.size/e),bE((async()=>(await n.iterator()).columnMajorBatch(e,t,_E)),r)}concatenate(e){const t=this;let n;return n=this.size===1/0||e.size===1/0?1/0:null!=this.size&&null!=e.size?this.size+e.size:null,bE((async()=>(await t.iterator()).concatenate(await e.iterator())),n)}filter(e){const t=this;let n;return n=this.size===1/0?1/0:null,bE((async()=>(await t.iterator()).filter((t=>po((()=>e(t)))))),n)}async forEachAsync(e){return(await this.iterator()).forEachAsync(e)}map(e){const t=this;return bE((async()=>(await t.iterator()).map((t=>po((()=>e(t)))))),this.size)}mapAsync(e){const t=this;return bE((async()=>(await t.iterator()).mapAsync(e)),this.size)}prefetch(e){if(null==e)throw new RangeError("`Dataset.prefetch()` requires bufferSize to be specified.");const t=this;return bE((async()=>(await t.iterator()).prefetch(e)),this.size)}repeat(e){const t=this;let n;return n=null!=this.size&&e>0?this.size*e:0===e?0:null!=this.size&&(void 0===e||e<0)?1/0:null,bE((async()=>{return n=Zk((async()=>({value:await t.iterator(),done:!1}))).take(e),new fE(n,r);var n,r}),n)}skip(e){const t=this;let n;return n=null!=this.size&&e>=0&&this.size>=e?this.size-e:null!=this.size&&(this.size(await t.iterator()).skip(e)),n)}shuffle(e,t,n=!0){if(null==e||e<0)throw null==this.size?new RangeError("`Dataset.shuffle()` requires bufferSize to be specified."):new RangeError(`\`Dataset.shuffle()\` requires bufferSize to be specified. If your data fits in main memory (for regular JS objects), and/or GPU memory (for \`tf.Tensor\`s), consider setting bufferSize to the dataset size (${this.size} elements)`);const r=this,a=Dc.alea(t||sa().toString());return bE((async()=>{let t=a.int32();return n&&(t+=a.int32()),(await r.iterator()).shuffle(e,t.toString())}),this.size)}take(e){const t=this;let n;return n=null!=this.size&&this.size>e?e:null!=this.size&&this.size<=e?this.size:null,bE((async()=>(await t.iterator()).take(e)),n)}async toArray(){if(this.size===1/0)throw new Error("Can not convert infinite data stream to array.");return(await this.iterator()).toArray()}async toArrayForTest(){if(this.size===1/0)throw new Error("Can not convert infinite data stream to array.");return(await this.iterator()).toArrayForTest()}}function bE(e,t=null){return new class extends yE{constructor(){super(...arguments),this.size=t}async iterator(){return e()}}}function vE(e){return bE((async()=>Jk(e)),e.length)}function wE(e){if(!Xk(e))throw new Error("The argument to zip() must be an object or array.");let t;if(Array.isArray(e))for(let n=0;nfunction(e,t=dE.FAIL){return new pE(e,t)}(await Gk(e,(e=>{if(e instanceof yE)return{value:e.iterator(),recurse:!1};if(Xk(e))return{value:null,recurse:!0};throw new Error("Leaves of the structure passed to zip() must be Datasets, not primitives.")})),dE.SHORTEST)),t)}function _E(e){if(null===e)return null;return null==(t=e[0])||null===(n=t)||"object"!=typeof n&&"function"!=typeof n||Array.isArray(t)||"object"==typeof t&&t instanceof _a||we(t)?{value:function(e){if(0===e.length)throw new Error("Can't make a batch of zero elements.");return e[0]instanceof _a?dh(e):ts(e)}(e),recurse:!1}:{value:null,recurse:!0};var t,n}yE.MAX_BUFFER_SIZE=1e4;class xE extends yE{constructor(e){super(),this.input=e}async iterator(){return(await this.input.iterator()).decodeUTF8().split("\n").map((e=>(e.endsWith("\r")&&(e=e.slice(0,-1)),e)))}}const kE='"',EE=Symbol("out"),CE=Symbol("field"),SE=Symbol("quote"),NE=Symbol("quoteafterquote"),IE=Symbol("quoteinquote");class AE extends yE{constructor(e,t){super(),this.input=e,this.hasHeader=!0,this.fullColumnNames=null,this.columnNamesValidated=!1,this.columnConfigs=null,this.configuredColumnsOnly=!1,this.delimiter=",",this.delimWhitespace=!1,this.base=new xE(e),t||(t={}),this.hasHeader=!1!==t.hasHeader,this.fullColumnNames=t.columnNames,this.columnConfigs=t.columnConfigs,this.configuredColumnsOnly=t.configuredColumnsOnly,t.delimWhitespace?(Q(null==t.delimiter,(()=>"Delimiter should not be provided when delimWhitespace is true.")),this.delimWhitespace=!0,this.delimiter=" "):this.delimiter=t.delimiter?t.delimiter:","}async columnNames(){return this.columnNamesValidated||await this.setColumnNames(),this.configuredColumnsOnly?Object.keys(this.columnConfigs):this.fullColumnNames}async setColumnNames(){const e=await this.maybeReadHeaderLine();if(!this.fullColumnNames&&!e)throw new Error("Column names must be provided if there is no header line.");this.fullColumnNames&&e&&Q(e.length===this.fullColumnNames.length,(()=>"The length of provided columnNames ("+this.fullColumnNames.length.toString()+") does not match the length of the header line read from file ("+e.length.toString()+").")),this.fullColumnNames||(this.fullColumnNames=e);const t=this.fullColumnNames.reduce(((e,t)=>(e[t]=e[t]+1||1,e)),{}),n=Object.keys(t).filter((e=>t[e]>1));if(Q(0===n.length,(()=>"Duplicate column names found: "+n.toString())),this.columnConfigs)for(const e of Object.keys(this.columnConfigs))if(-1===this.fullColumnNames.indexOf(e))throw new Error('The key "'+e+'" provided in columnConfigs does not match any of the column names ('+this.fullColumnNames.toString()+").");this.columnNamesValidated=!0}async maybeReadHeaderLine(){if(this.hasHeader){const e=await this.base.iterator(),t=await e.next();if(t.done)throw new Error("No data was found for CSV parsing.");const n=t.value;return this.parseRow(n,!1)}return null}async iterator(){this.columnNamesValidated||await this.setColumnNames();let e=await this.base.iterator();return this.hasHeader&&(e=e.skip(1)),e.map((e=>this.makeDataElement(e)))}makeDataElement(e){const t=this.parseRow(e),n={},r={};for(let a=0;a14||!Number.isInteger(t))throw new Error(`Invalid fftSize: it must be a power of 2 between 2 to 4 and 2 to 14, but got ${this.fftSize}`);if(this.numFrames=e.numFramesPerSpectrogram||43,this.sampleRateHz=e.sampleRateHz,this.columnTruncateLength=e.columnTruncateLength||this.fftSize,this.audioTrackConstraints=e.audioTrackConstraints,this.smoothingTimeConstant=e.smoothingTimeConstant||0,this.includeSpectrogram=!1!==e.includeSpectrogram,this.includeWaveform=!0===e.includeWaveform,!this.includeSpectrogram&&!this.includeWaveform)throw new Error("Both includeSpectrogram and includeWaveform are false. At least one type of data should be returned.")}summary(){return"microphone"}static async create(e={}){if(We().get("IS_NODE"))throw new Error("microphone API is only supported in browser environment.");const t=new DE(e);return await t.start(),t}async start(){try{this.stream=await navigator.mediaDevices.getUserMedia({audio:null==this.audioTrackConstraints||this.audioTrackConstraints,video:!1})}catch(e){throw new Error(`Error thrown while initializing video stream: ${e.message}`)}if(!this.stream)throw new Error("Could not obtain audio from microphone.");const e=window.AudioContext||window.webkitAudioContext;if(this.audioContext=new e,this.sampleRateHz){if(this.audioContext.sampleRate!==this.sampleRateHz)throw new Error(`Mismatch in sampling rate: Expected: ${this.sampleRateHz}; Actual: ${this.audioContext.sampleRate}`)}else this.sampleRateHz=this.audioContext.sampleRate;const t=this.audioContext.createMediaStreamSource(this.stream);this.analyser=this.audioContext.createAnalyser(),this.analyser.fftSize=2*this.fftSize,this.analyser.smoothingTimeConstant=this.smoothingTimeConstant,t.connect(this.analyser),this.freqData=new Float32Array(this.fftSize),this.timeData=new Float32Array(this.fftSize)}async next(){if(this.isClosed)return{value:null,done:!0};let e,t;const n=await this.getAudioData();if(this.includeSpectrogram){const t=this.flattenQueue(n.freqDataQueue);e=this.getTensorFromAudioDataArray(t,[this.numFrames,this.columnTruncateLength,1])}if(this.includeWaveform){const e=this.flattenQueue(n.timeDataQueue);t=this.getTensorFromAudioDataArray(e,[this.numFrames*this.fftSize,1])}return{value:{spectrogram:e,waveform:t},done:!1}}async capture(){return(await this.next()).value}async getAudioData(){const e=[],t=[];let n=0;return new Promise((r=>{const a=setInterval((()=>{this.includeSpectrogram&&(this.analyser.getFloatFrequencyData(this.freqData),this.freqData[0]===-1/0&&r({freqDataQueue:e,timeDataQueue:t}),e.push(this.freqData.slice(0,this.columnTruncateLength))),this.includeWaveform&&(this.analyser.getFloatTimeDomainData(this.timeData),t.push(this.timeData.slice())),++n===this.numFrames&&(clearInterval(a),r({freqDataQueue:e,timeDataQueue:t}))}),this.fftSize/this.sampleRateHz*1e3)}))}stop(){this.isClosed||(this.isClosed=!0,this.analyser.disconnect(),this.audioContext.close(),null!=this.stream&&this.stream.getTracks().length>0&&this.stream.getTracks()[0].stop())}toArray(){throw new Error("Can not convert infinite audio stream to array.")}getSampleRate(){return this.sampleRateHz}flattenQueue(e){const t=e[0].length,n=new Float32Array(e.length*t);return e.forEach(((e,r)=>n.set(e,r*t))),n}getTensorFromAudioDataArray(e,t){const n=new Float32Array(re(t));return n.set(e,n.length-e.length),ts(n,t)}}class TE extends Qk{constructor(e,t){if(super(),this.webcamVideoElement=e,this.webcamConfig=t,this.isClosed=!0,this.resize=!1,this.needToResize())if(this.resize=!0,this.cropSize=[this.webcamConfig.resizeHeight,this.webcamConfig.resizeWidth],this.cropBoxInd=yh([0],"int32"),this.webcamConfig.centerCrop){const e=1*this.webcamConfig.resizeWidth/this.webcamVideoElement.width,t=1*this.webcamConfig.resizeHeight/this.webcamVideoElement.height,n=(1-e)/2,r=(1-t)/2,a=n+e,s=t+r;this.cropBox=bh([r,n,s,a],[1,4])}else this.cropBox=bh([0,0,1,1],[1,4])}summary(){return"webcam"}static async create(e,t={}){if(We().get("IS_NODE"))throw new Error("tf.data.webcam is only supported in browser environment.");if(!e){if(e=document.createElement("video"),!t.resizeWidth||!t.resizeHeight)throw new Error("Please provide webcam video element, or resizeWidth and resizeHeight to create a hidden video element.");e.width=t.resizeWidth,e.height=t.resizeHeight}const n=new TE(e,t);return await n.start(),n}async start(){this.webcamConfig.facingMode&&Q("user"===this.webcamConfig.facingMode||"environment"===this.webcamConfig.facingMode,(()=>`Invalid webcam facing mode: ${this.webcamConfig.facingMode}. Please provide 'user' or 'environment'`));try{this.stream=await navigator.mediaDevices.getUserMedia({video:{deviceId:this.webcamConfig.deviceId,facingMode:this.webcamConfig.facingMode?this.webcamConfig.facingMode:"user",width:this.webcamVideoElement.width,height:this.webcamVideoElement.height}})}catch(e){throw e.message=`Error thrown while initializing video stream: ${e.message}`,e}if(!this.stream)throw new Error("Could not obtain video from webcam.");try{this.webcamVideoElement.srcObject=this.stream}catch(e){console.log(e),this.webcamVideoElement.src=window.URL.createObjectURL(this.stream)}return this.webcamVideoElement.play(),this.isClosed=!1,new Promise((e=>{this.webcamVideoElement.onloadedmetadata=()=>{e()}}))}async next(){if(this.isClosed)return{value:null,done:!0};let e;try{e=ki(this.webcamVideoElement)}catch(e){throw new Error(`Error thrown converting video to pixels: ${JSON.stringify(e)}`)}if(!this.resize)return{value:e,done:!1};try{return{value:this.cropAndResizeFrame(e),done:!1}}catch(e){throw new Error(`Error thrown cropping the video: ${e.message}`)}finally{e.dispose()}}needToResize(){return!(!this.webcamConfig.resizeWidth||!this.webcamConfig.resizeHeight||this.webcamVideoElement.width===this.webcamConfig.resizeWidth&&this.webcamVideoElement.height===this.webcamConfig.resizeHeight)}cropAndResizeFrame(e){return po((()=>{const t=vu(Ks(e,"float32"),0);let n;n=zf.cropAndResize(t,this.cropBox,this.cropBoxInd,this.cropSize,"bilinear");const r=n.shape;return Al(n,r.slice(1))}))}async capture(){return(await this.next()).value}stop(){this.stream.getTracks().forEach((e=>e.stop()));try{this.webcamVideoElement.srcObject=null}catch(e){console.log(e),this.webcamVideoElement.src=null}this.isClosed=!0}toArray(){throw new Error("Can not convert infinite video stream to array.")}}class FE{}class RE extends Qk{split(e){return new OE(this,e)}}class OE extends RE{constructor(e,t){super(),this.upstream=e,this.impl=new ME(e,t)}summary(){return this.impl.summary()}async next(){return this.impl.next()}}class ME extends cE{constructor(e,t){super(),this.upstream=e,this.separator=t,this.carryover=""}summary(){return`${this.upstream.summary()} -> Split('${this.separator}')`}async pump(){const e=await this.upstream.next();if(e.done)return""!==this.carryover&&(this.outputQueue.push(this.carryover),this.carryover="",!0);const t=e.value.split(this.separator);t[0]=this.carryover+t[0];for(const e of t.slice(0,-1))this.outputQueue.push(e);return this.carryover=t[t.length-1],!0}}class BE extends Qk{decodeUTF8(){return new $E(this)}}class $E extends RE{constructor(e){super(),this.upstream=e,this.impl=new PE(e)}summary(){return this.impl.summary()}async next(){return this.impl.next()}}class PE extends cE{constructor(e){if(super(),this.upstream=e,We().get("IS_BROWSER"))this.decoder=new TextDecoder("utf-8");else{const{StringDecoder:e}=n(4589);this.decoder=new e("utf8")}}summary(){return`${this.upstream.summary()} -> Utf8`}async pump(){const e=await this.upstream.next();let t,n;return!e.done&&(t=e.value,n=We().get("IS_BROWSER")?this.decoder.decode(t,{stream:!0}):this.decoder.write(Buffer.from(t.buffer)),this.outputQueue.push(n),!0)}}class LE extends BE{constructor(e,t={}){super(),this.file=e,this.options=t,Q(e instanceof Uint8Array||!!We().get("IS_BROWSER")&&(e instanceof File||e instanceof Blob),(()=>"FileChunkIterator only supports File, Blob and Uint8Array right now.")),this.offset=t.offset||0,this.chunkSize=t.chunkSize||1048576}summary(){return`FileChunks ${this.file}`}async next(){if(this.offset>=(this.file instanceof Uint8Array?this.file.byteLength:this.file.size))return{value:null,done:!0};const e=new Promise(((e,t)=>{const n=this.offset+this.chunkSize;if(this.file instanceof Uint8Array)e(new Uint8Array(this.file.slice(this.offset,n)));else{const r=new FileReader;r.onload=n=>{let a=r.result;if(a instanceof ArrayBuffer&&(a=new Uint8Array(a)),!(a instanceof Uint8Array))return t(new TypeError("FileReader returned unknown type."));e(a)},r.onabort=e=>t(new Error("Aborted")),r.onerror=e=>t(new Error(e.type));const a=this.file.slice(this.offset,n);r.readAsArrayBuffer(a)}this.offset=n}));return{value:await e,done:!1}}}function zE(e){return"string"==typeof e&&"file://"===e.substr(0,7)}class WE extends FE{constructor(e,t={}){super(),this.input=e,this.options=t}async iterator(){if(zE(this.input)&&We().get("IS_NODE")){const e=n(2993);this.input=e.readFileSync(this.input.substr(7))}return new LE(this.input,this.options)}}class UE extends FE{constructor(e,t={}){super(),this.url=e,this.fileOptions=t}async iterator(){return zE(this.url)?new WE(this.url,this.fileOptions).iterator():async function(e,t={}){let n,r;var a;"string"==typeof e?n=e:(n=e.url,r={method:(a=e).method,headers:a.headers,body:a.body,mode:a.mode,credentials:a.credentials,cache:a.cache,redirect:a.redirect,referrer:a.referrer,integrity:a.integrity});const s=await ia(n,r);if(s.ok){const e=new Uint8Array(await s.arrayBuffer());return new LE(e,t)}throw new Error(s.statusText)}(this.url,this.fileOptions)}}function VE(e,t={}){return new AE(new UE(e),t)}function jE(e){const t=Zk(e);return bE((async()=>t))}function HE(e){return bE((async()=>{const t=await e();return Zk((()=>t.next()))}))}async function GE(e,t){return TE.create(e,t)}async function XE(e){return DE.create(e)}const KE="3.6.0";function qE(e,t){Array.isArray(e)||(e=[e]),e.forEach((e=>{null!=e&&Q("complex64"!==e.dtype,(()=>`${t} does not support complex64 tensors in the CPU backend.`))}))}const YE=Ih;class JE extends j{constructor(){super(),this.blockSize=48,this.firstUse=!0,this.data=new V(this,co())}nextDataId(){return JE.nextDataId++}write(e,t,n){this.firstUse&&(this.firstUse=!1,We().get("IS_NODE")&&fd("\n============================\nHi there 👋. Looks like you are running TensorFlow.js in Node.js. To speed things up dramatically, install our node backend, which binds to TensorFlow C++, by running npm i @tensorflow/tfjs-node, or npm i @tensorflow/tfjs-node-gpu if you have CUDA. Then call require('@tensorflow/tfjs-node'); (-gpu suffix for CUDA) at the start of your program. Visit https://github.com/tensorflow/tfjs-node for more details.\n============================"));const r={id:this.nextDataId()};return this.data.set(r,{values:e,dtype:n,refCount:1}),r}makeTensorInfo(e,t,n){let r;if("string"===t&&null!=n&&n.length>0&&ke(n[0])){const a=n.map((e=>oa(e)));r=this.write(a,e,t)}else r=this.write(n,e,t);return{dataId:r,shape:e,dtype:t}}refCount(e){return this.data.has(e)?this.data.get(e).refCount:0}incRef(e){this.data.get(e).refCount++}decRef(e){this.data.has(e)&&this.data.get(e).refCount--}move(e,t,n,r,a){this.data.set(e,{values:t,dtype:r,refCount:a})}numDataIds(){return this.data.numDataIds()}async read(e){return this.readSync(e)}readSync(e){const{dtype:t,complexTensorInfos:n}=this.data.get(e);return"complex64"===t?pd(this.readSync(n.real.dataId),this.readSync(n.imag.dataId)):this.data.get(e).values}bufferSync(e){const t=this.readSync(e.dataId);let n=t;if("string"===e.dtype)try{n=t.map((e=>la(e)))}catch(e){throw new Error("Failed to decode encoded string bytes into utf-8")}return Xs(e.shape,e.dtype,n)}makeOutput(e,t,n){const r=this.write(e,t,n);return co().makeTensorFromDataId(r,t,n,this)}disposeData(e,t=!1){if(this.data.has(e)){if(this.data.get(e).refCount--,!t&&this.data.get(e).refCount>0)return!1;const{complexTensorInfos:n}=this.data.get(e);null!=n&&(this.disposeData(n.real.dataId,!0),this.disposeData(n.imag.dataId,!0)),this.data.delete(e)}return!0}disposeIntermediateTensorInfo(e){this.disposeData(e.dataId)}async time(e){const t=sa();return e(),{kernelMs:sa()-t}}memory(){return{unreliable:!0,reasons:["The reported memory is an upper bound. Due to automatic garbage collection, the true allocated memory may be less."]}}where(e){qE([e],"where");const t=this.readSync(e.dataId);return YE(e.shape,t)}dispose(){}floatPrecision(){return 32}epsilon(){return super.epsilon()}}function ZE(e,t,n){return({inputs:r,attrs:a,backend:s})=>{const{x:i}=r;if(qE(i,e),"string"===i.dtype||"string"===n)throw new Error("unaryKernelFunc does not support string input/output");const o=s,l=o.data.get(i.dataId).values,u=re(i.shape),c=n||i.dtype,h=ge(c,u);for(let e=0;e{const{x:i}=r;if(qE(i,e),"string"===i.dtype||"string"===n)throw new Error("unaryKernelFunc does not support string input/output");const o=s,l=o.data.get(i.dataId).values,u=n||i.dtype,c=t(l,u,a);return o.makeTensorInfo(i.shape,u,c)}}JE.nextDataId=0,Eo("cpu",(()=>new JE),1);const eC=ZE(Wt,(e=>e>=0?e:Math.exp(e)-1)),tC={kernelName:Wt,backendName:"cpu",kernelFunc:eC};function nC(e){const{inputs:t,backend:n}=e,{x:r}=t;return n.incRef(r.dataId),{dataId:r.dataId,shape:r.shape,dtype:r.dtype}}const rC={kernelName:an,backendName:"cpu",kernelFunc:nC};function aC(e){const{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{alpha:s}=r;qE([a],"leakyRelu");const i=re(a.shape),o=n.data.get(a.dataId).values,l=me("float32",i);for(let e=0;e{const i=Zo(t,n),o=i.length,l=Ae(i),u=me(s,re(i)),c=t.length,h=n.length,f=Ae(t),d=Ae(n),p=Yo(t,i),m=Yo(n,i);if(p.length+m.length===0)for(let t=0;ts[e]=0));const i=Be(s,c,f),g=n.slice(-h);m.forEach((e=>g[e]=0));const y=Be(g,h,d);u[t]=e(r[i],a[y])}return[u,i]}}const oC=iC(((e,t)=>e<0?t*e:e));function lC(e){const{inputs:t,backend:n}=e,{x:r,alpha:a}=t;qE([r,a],"prelu");const s=n.data.get(r.dataId).values,i=n.data.get(a.dataId).values,[o,l]=oC(r.shape,a.shape,s,i,r.dtype);return n.makeTensorInfo(l,r.dtype,o)}const uC={kernelName:Kn,backendName:"cpu",kernelFunc:lC},cC=ZE(Qn,(e=>Math.max(0,e))),hC={kernelName:Qn,backendName:"cpu",kernelFunc:cC},fC=ZE(sr,(e=>Math.min(Math.max(0,e),6))),dC={kernelName:sr,backendName:"cpu",kernelFunc:fC},pC=ZE(gr,(e=>1/(1+Math.exp(-e)))),mC={kernelName:gr,backendName:"cpu",kernelFunc:pC};function gC(e,t,n,r,a){if("linear"===n)return nC({inputs:{x:t},backend:e});if("relu"===n)return cC({inputs:{x:t},backend:e});if("elu"===n)return eC({inputs:{x:t},backend:e});if("relu6"===n)return fC({inputs:{x:t},backend:e});if("prelu"===n)return lC({inputs:{x:t,alpha:r},backend:e});if("leakyrelu"===n)return aC({inputs:{x:t},backend:e,attrs:{alpha:a}});if("sigmoid"===n)return pC({inputs:{x:t},backend:e});throw new Error(`Activation ${n} has not been implemented for the CPU backend.`)}function yC(e){const{inputs:t,backend:n}=e,{real:r,imag:a}=t,s=n.data.get(r.dataId).values,i=n.data.get(a.dataId).values,o=n.makeTensorInfo(r.shape,"complex64");return n.data.get(o.dataId).complexTensorInfos={real:n.makeTensorInfo(r.shape,"float32",s),imag:n.makeTensorInfo(a.shape,"float32",i)},o}const bC={kernelName:yt,backendName:"cpu",kernelFunc:yC};function vC(e,t,n="float32"){if("complex64"===n)return yC({inputs:{real:vC(e,t,"float32"),imag:vC(e,t,"float32")},backend:e});const r=Re(re(t),n);return e.makeTensorInfo(t,n,r)}function wC(e){const{inputs:t,backend:n}=e,{input:r}=t,a=n.data.get(r.dataId).complexTensorInfos.real,s=n.data.get(a.dataId).values;return n.makeTensorInfo(a.shape,a.dtype,s)}const _C={kernelName:Jn,backendName:"cpu",kernelFunc:wC};function xC(e){const{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{dtype:s}=r;if("complex64"===s){if("complex64"===a.dtype)return nC({inputs:{x:a},backend:n});const e=vC(n,a.shape,a.dtype),t=xC({inputs:{x:a},backend:n,attrs:{dtype:"float32"}}),r=yC({inputs:{real:t,imag:e},backend:n});return n.disposeIntermediateTensorInfo(e),n.disposeIntermediateTensorInfo(t),r}if("complex64"===a.dtype){const e=wC({inputs:{input:a},backend:n}),t=xC({inputs:{x:e},backend:n,attrs:{dtype:s}});return n.disposeIntermediateTensorInfo(e),t}if(!ve(a.dtype,s)){const e=nC({inputs:{x:a},backend:n});return{dataId:e.dataId,shape:e.shape,dtype:s}}if("int32"===s){const e=n.data.get(a.dataId).values,t=Int32Array.from(e);return n.makeTensorInfo(a.shape,"int32",t)}if("bool"===s){const e=n.data.get(a.dataId).values,t=aa([0],a.dtype),[r,s]=iC(((e,t)=>e!==t?1:0))(a.shape,[],e,t,"bool");return n.makeTensorInfo(s,"bool",r)}throw new Error(`Error in Cast: failed to cast ${a.dtype} to ${s}`)}const kC={kernelName:pt,backendName:"cpu",kernelFunc:xC};function EC(e,t,n,r){return null==n?({inputs:n,backend:a})=>{const{a:s,b:i}=n,o=a;qE([s,i],e);const l=o.data.get(s.dataId).values,u=o.data.get(i.dataId).values,c=r||s.dtype,[h,f]=t(s.shape,i.shape,l,u,c);return o.makeTensorInfo(f,c,h)}:({inputs:e,backend:a})=>{const{a:s,b:i}=e,o=a;if("complex64"===s.dtype||"complex64"===i.dtype){const e=xC({inputs:{x:s},backend:o,attrs:{dtype:"complex64"}}),t=o.data.get(e.dataId),r=t.complexTensorInfos.real,a=t.complexTensorInfos.imag,l=o.data.get(r.dataId).values,u=o.data.get(a.dataId).values,c=xC({inputs:{x:i},backend:o,attrs:{dtype:"complex64"}}),h=o.data.get(c.dataId),f=h.complexTensorInfos.real,d=h.complexTensorInfos.imag,p=o.data.get(f.dataId).values,m=o.data.get(d.dataId).values,[g,y,b]=n(s.shape,i.shape,l,u,p,m),v=o.makeTensorInfo(b,"float32",g),w=o.makeTensorInfo(b,"float32",y),_=yC({inputs:{real:v,imag:w},backend:o});return o.disposeIntermediateTensorInfo(e),o.disposeIntermediateTensorInfo(c),o.disposeIntermediateTensorInfo(v),o.disposeIntermediateTensorInfo(w),_}{const e=o.data.get(s.dataId).values,n=o.data.get(i.dataId).values,a=r||s.dtype,[l,u]=t(s.shape,i.shape,e,n,a);return o.makeTensorInfo(u,a,l)}}}function CC(e){return(t,n,r,a,s,i)=>{const o=Zo(t,n),l=re(o),u=o.length,c=Ae(o),h=me("float32",l),f=me("float32",l),d=Yo(t,o),p=Yo(n,o),m=pd(r,a),g=pd(s,i),y=t.length,b=Ae(t),v=n.length,w=Ae(n);if(d.length+p.length===0)for(let t=0;tr[e]=0));const a=Be(r,y,b),s=n.slice(-v);p.forEach((e=>s[e]=0));const i=Be(s,v,w),o=e(m[2*a],m[2*a+1],g[2*i],g[2*i+1]);h[t]=o.real,f[t]=o.imag}return[h,f,o]}}const SC=iC(((e,t)=>e+t)),NC=CC(((e,t,n,r)=>({real:e+n,imag:t+r}))),IC=EC(qe,SC,NC),AC={kernelName:qe,backendName:"cpu",kernelFunc:IC};function DC(e){const{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{shape:s}=r,i=re(a.shape),o=fe(s,i),l=re(o);Q(i===l,(()=>`The new shape (${o}) has ${l} elements and the old shape (${a.shape}) has ${i} elements. The new shape and old shape must have the same number of elements.`)),n.incRef(a.dataId);const u=n.data.get(a.dataId);if(null!=u.complexTensorInfos){const e=u.complexTensorInfos.real,t=u.complexTensorInfos.imag;e.shape=o,t.shape=o}return{dataId:a.dataId,shape:o,dtype:a.dtype}}const TC={kernelName:er,backendName:"cpu",kernelFunc:DC};function FC(e){const{inputs:t,backend:n,attrs:r}=e,{a,b:s}=t,{transposeA:i,transposeB:o}=r;qE([a,s],"matMul");const l=a.shape.length,u=s.shape.length,c=i?a.shape[l-2]:a.shape[l-1],h=o?s.shape[u-1]:s.shape[u-2],f=i?a.shape[l-1]:a.shape[l-2],d=o?s.shape[u-2]:s.shape[u-1],p=a.shape.slice(0,-2),m=s.shape.slice(0,-2),g=re(p),y=re(m);Q(l>=2&&u>=2&&(g===y||1===g||1===y),(()=>`Error in matMul: the input batch dimensions must either be the same or at least one input batch dimension must be 1. Got input batch dimensions of (${p}) and (${m}).`));const b=(g>y?a.shape.slice(0,-2):s.shape.slice(0,-2)).concat([f,d]);Q(c===h,(()=>`Error in matMul: inner shapes (${c}) and (${h}) of Tensors with shapes ${a.shape} and ${s.shape} and transposeA=${i} and transposeB=${o} must match.`));const v=o?[y,d,h]:[y,h,d],w=DC({inputs:{x:a},backend:n,attrs:{shape:i?[g,c,f]:[g,f,c]}}),_=DC({inputs:{x:s},backend:n,attrs:{shape:v}}),x=i?w.shape[1]:w.shape[2],k=i?w.shape[2]:w.shape[1],E=o?_.shape[1]:_.shape[2],C=Math.max(g,y),S=n.data.get(w.dataId).values,N=n.data.get(_.dataId).values,I=Ae(w.shape),A=Ae(_.shape),[D,T,F]=i?[I[0],1,I[1]]:[I[0],I[1],1],[R,O,M]=o?[1,A[1],A[0]]:[A[1],1,A[0]],B=k*E,$=Xs([C,k,E],w.dtype),P=$.values,L=n.blockSize;for(let e=0;e{const{x:t}=e.inputs,n=e.backend;qE(t,"abs");let r=new Float32Array(re(t.shape));return r=MC(n.data.get(t.dataId).values),n.makeOutput(r,t.shape,"float32")}},$C=ZE(Xe,(e=>Math.acos(e))),PC={kernelName:Xe,backendName:"cpu",kernelFunc:$C},LC=ZE(Ke,(e=>Math.acosh(e))),zC={kernelName:Ke,backendName:"cpu",kernelFunc:LC},WC={kernelName:Ye,backendName:"cpu",kernelFunc:function(e){const{inputs:t,backend:n}=e,r=t;qE(t,"addN");const a=r.map((e=>n.data.get(e.dataId).values)),s=Xs(r[0].shape,r[0].dtype),i=s.values;for(let e=0;en&&(n=a,r=e)}f[e]=r}return u.forEach((e=>n.disposeIntermediateTensorInfo(e))),n.makeTensorInfo(c,"int32",f)}},KC={kernelName:et,backendName:"cpu",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s}=r;qE(a,"argMin");let i=de(s,a.shape);const o=qu(i,a.shape.length);let l=a;const u=[];null!=o&&(l=VC({inputs:{x:a},backend:n,attrs:{perm:o}}),u.push(l),i=Ju(i.length,l.shape.length)),i=[i[0]],Ku("argMin",i,l.shape.length);const[c,h]=Gu(l.shape,i),f=Re(re(c),"int32"),d=re(h),p=n.data.get(l.dataId).values;for(let e=0;en.disposeIntermediateTensorInfo(e))),n.makeTensorInfo(c,"int32",f)}},qC=ZE(tt,(e=>Math.asin(e))),YC={kernelName:tt,backendName:"cpu",kernelFunc:qC},JC=ZE(nt,(e=>Math.asinh(e))),ZC={kernelName:nt,backendName:"cpu",kernelFunc:JC},QC=ZE(rt,(e=>Math.atan(e))),eS={kernelName:rt,backendName:"cpu",kernelFunc:QC},tS=iC(((e,t)=>Math.atan2(e,t))),nS=EC(st,tS),rS={kernelName:st,backendName:"cpu",kernelFunc:nS},aS=ZE(at,(e=>Math.atanh(e))),sS={kernelName:at,backendName:"cpu",kernelFunc:aS};function iS(e,t,n,r,a,s){const i=a.strideHeight,o=a.strideWidth,l=a.dilationHeight,u=a.dilationWidth,c=a.effectiveFilterHeight,h=a.effectiveFilterWidth,f=a.padInfo.top,d=a.padInfo.left,p="max"===s?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,m=Xs(a.outShape,n),g=m.values,y=a.outShape[1]*a.outShape[2]*a.outShape[3],b=a.outShape[2]*a.outShape[3],v=a.outShape[3];for(let t=0;ty?y=i:"avg"===s&&(b+=i,w++)}if(isNaN(y))break}g[k+n*v+t]="avg"===s?b/w:y}}}return m}function oS(e,t,n,r,a=!1,s=!1){const i=Xs(r.outShape,"int32"),o=r.strideHeight,l=r.strideWidth,u=r.dilationHeight,c=r.dilationWidth,h=r.effectiveFilterHeight,f=r.effectiveFilterWidth,d=r.padInfo.top,p=r.padInfo.left,m=Xs(t,n,e);for(let e=0;ew&&(w=u,_=a?s?((e*r.inHeight+n)*r.inWidth+o)*r.inChannels+t:(n*r.inWidth+o)*r.inChannels+t:i*f+l)}}i.set(_,e,n,o,t)}}return i}function lS(e,t,n,r,a,s){const i=a.strideDepth,o=a.strideHeight,l=a.strideWidth,u=a.dilationDepth,c=a.dilationHeight,h=a.dilationWidth,f=a.effectiveFilterDepth,d=a.effectiveFilterHeight,p=a.effectiveFilterWidth,m=a.padInfo.front,g=a.padInfo.top,y=a.padInfo.left,b="max"===s?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,v=Xs(a.outShape,n),w=v.values,_=a.outShape[1]*a.outShape[2]*a.outShape[3]*a.outShape[4],x=a.outShape[2]*a.outShape[3]*a.outShape[4],k=a.outShape[3]*a.outShape[4],E=a.outShape[4];for(let t=0;tx?x=a:"avg"===s&&(k+=a,C++),isNaN(x))break}if(isNaN(x))break}if(isNaN(x))break}w[g+t]="avg"===s?k/C:x}}}}return v}const uS={kernelName:it,backendName:"cpu",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{x:a}=t;qE(a,"avgPool");const{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=r;Q(Nl(i,1),(()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${i} and dilations '1'`));const u=yl(a.shape,s,i,1,o,l);let c;if(1===u.filterWidth&&1===u.filterHeight&&se(u.inShape,u.outShape))c=nC({inputs:{x:a},backend:n});else{const e=n.data.get(a.dataId).values,t=Ae(a.shape),r=iS(e,a.shape,a.dtype,t,u,"avg");c=n.makeTensorInfo(u.outShape,a.dtype,r.values)}return c}},cS={kernelName:lt,backendName:"cpu",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l,dataFormat:u}=r;qE(a,"avgPool3d");const c=bl(a.shape,s,i,1,o,l,u),h=lS(n.data.get(a.dataId).values,a.shape,a.dtype,Ae(a.shape),c,"avg");return n.makeTensorInfo(h.shape,"float32",h.values)}},hS={kernelName:ut,backendName:"cpu",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{dy:a,input:s}=t,{filterSize:i,strides:o,pad:l,dimRoundingMode:u}=r;qE([a,s],"avgPool3DGrad");const c=bl(s.shape,i,o,1,l,u),h=c.strideDepth,f=c.strideHeight,d=c.strideWidth,p=c.filterDepth,m=c.filterHeight,g=c.filterWidth,y=c.dilationDepth,b=c.dilationHeight,v=c.dilationWidth,w=c.effectiveFilterDepth,_=c.effectiveFilterHeight,x=c.effectiveFilterWidth,k=w-1-c.padInfo.front,E=x-1-c.padInfo.left,C=_-1-c.padInfo.top,S=Xs(s.shape,"float32"),N=1/(p*m*g),I=n.bufferSync(a);for(let e=0;e=c.outDepth||Math.floor(r)!==r))for(let n=0;n<_;n+=b){const a=(i+n)/f;if(!(a<0||a>=c.outHeight||Math.floor(a)!==a))for(let n=0;n=c.outWidth||Math.floor(s)!==s||(l+=I.get(e,r,a,s,t))}}}S.set(l*N,e,n,r,a,t)}return n.makeTensorInfo(S.shape,S.dtype,S.values)}},fS={kernelName:ot,backendName:"cpu",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{dy:a,input:s}=t,i=s;qE([a,s],"avgPoolGrad");const{filterSize:o,strides:l,pad:u}=r,c=yl(i.shape,o,l,1,u),h=c.strideHeight,f=c.strideWidth,d=c.filterHeight,p=c.filterWidth,m=c.dilationHeight,g=c.dilationWidth,y=c.effectiveFilterHeight,b=c.effectiveFilterWidth,v=b-1-c.padInfo.left,w=y-1-c.padInfo.top,_=Xs(i.shape,"float32"),x=1/(d*p),k=n.data.get(a.dataId).values,E=Xs(a.shape,"float32",k);for(let e=0;e=c.outHeight||Math.floor(r)!==r))for(let n=0;n=c.outWidth||Math.floor(a)!==a||(i+=E.get(e,r,a,t))}}_.set(i*x,e,n,r,t)}return n.makeTensorInfo(_.shape,_.dtype,_.values)}},dS={kernelName:Qt,backendName:"cpu",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{x:a,scale:s,offset:i,mean:o,variance:l}=t;Q(o.shape.length===l.shape.length,(()=>"Batch normalization gradient requires mean and variance to have equal ranks.")),Q(null==i||o.shape.length===i.shape.length,(()=>"Batch normalization gradient requires mean and offset to have equal ranks.")),Q(null==s||o.shape.length===s.shape.length,(()=>"Batch normalization gradient requires mean and scale to have equal ranks.")),qE([a,o,l,s,i],"batchNorm");let{varianceEpsilon:u}=r;null==u&&(u=.001);const c=n.data.get(a.dataId).values,h=n.data.get(o.dataId).values,f=n.data.get(l.dataId).values,d=s?n.data.get(s.dataId).values:new Float32Array([1]),p=i?n.data.get(i.dataId).values:new Float32Array([0]),m=new Float32Array(c.length),g=p.length,y=d.length,b=f.length,v=h.length;let w=0,_=0,x=0,k=0;for(let e=0;e=g&&(w=0),_>=v&&(_=0),x>=y&&(x=0),k>=b&&(k=0);return n.makeTensorInfo(a.shape,a.dtype,m)}};function pS(e,t,n,r,a){const s=zi(r,t,n),i=re(n),o=Ae(r);if(s){const n=Wi(t,o);return"string"===a?e.slice(n,n+i):e.subarray(n,n+i)}const l=Xs(r,a,"string"===a?Rd(e):e),u=Xs(n,a);for(let e=0;ee+t[n]));u.set(l.get(...r),...n)}return"string"===a?Od(u.values):u.values}function mS(e){const{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{begin:s,size:i}=r;qE(a,"slice");const[o,l]=Ui(a,s,i);Ii(a,o,l);const u=pS(n.data.get(a.dataId).values,o,l,a.shape,a.dtype);return n.makeTensorInfo(l,a.dtype,u)}const gS={kernelName:fr,backendName:"cpu",kernelFunc:mS},yS={kernelName:ht,backendName:"cpu",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{blockShape:s,crops:i}=r;qE([a],"batchToSpaceND");const o=s.reduce(((e,t)=>e*t)),l=Qf(a.shape,s,o),u=ed(l.length,s.length),c=td(a.shape,s,o),h=nd(i,s.length),f=rd(c,i,s.length),d=DC({inputs:{x:a},backend:n,attrs:{shape:l}}),p=VC({inputs:{x:d},backend:n,attrs:{perm:u}}),m=DC({inputs:{x:p},backend:n,attrs:{shape:c}}),g=mS({inputs:{x:m},backend:n,attrs:{begin:h,size:f}});return n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(p),n.disposeIntermediateTensorInfo(m),g}};function bS(e,t,n,r,a){const s=re(r),i=Re(a,n);for(let n=0;n=a||(i[r]+=s>0?t[n]:1)}return i}function vS(e,t,n,r=!1){const a=e.shape[0],s=e.shape[1],i=Xs([a,n],t.dtype);for(let o=0;o=n||(r?i.set(1,o,s):t.size>0?i.set(i.get(o,s)+t.get(o,a),o,s):i.set(i.get(o,s)+1,o,s))}return i}const wS={kernelName:ft,backendName:"cpu",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{x:a,weights:s}=t,{size:i}=r,o=bS(n.data.get(a.dataId).values,n.data.get(s.dataId).values,s.dtype,s.shape,i);return n.makeTensorInfo([i],s.dtype,o)}};function _S(e){return(t,n,r)=>{const a=me(n,t.length);for(let n=0;nMath.ceil(e))),kS=QE(mt,xS),ES={kernelName:mt,backendName:"cpu",kernelFunc:kS},CS=ZE(gt,((e,t)=>{const n=t;return e>n.clipValueMax?n.clipValueMax:e{const{x:t}=e.inputs,n=e.backend,r=new Float32Array(re(t.shape)),a=n.data.get(t.dataId),s=a.complexTensorInfos.real,i=a.complexTensorInfos.imag,o=n.data.get(s.dataId).values,l=n.data.get(i.dataId).values;for(let e=0;e{const n=re(e.shape);a.set(e.vals,t),t+=n}))}else{let r=0;e.forEach((e=>{const s="string"===n?Rd(e.vals):e.vals;let i=0;for(let n=0;ne.shape)),s);if(0===re(i))return n.makeTensorInfo(i,t[0].dtype,[]);const o=t.filter((e=>re(e.shape)>0));if(1===o.length)return nC({inputs:{x:o[0]},backend:n});if(Kf(o.map((e=>e.shape)),s),"complex64"===o[0].dtype){const e=o.map((e=>wC({inputs:{input:e},backend:n}))),t=o.map((e=>AS({inputs:{input:e},backend:n}))),r=TS({inputs:e,backend:n,attrs:{axis:s}}),a=TS({inputs:t,backend:n,attrs:{axis:s}}),i=yC({inputs:{real:r,imag:a},backend:n});return e.forEach((e=>n.disposeIntermediateTensorInfo(e))),t.forEach((e=>n.disposeIntermediateTensorInfo(e))),n.disposeIntermediateTensorInfo(r),n.disposeIntermediateTensorInfo(a),i}const l=o.map((e=>{const t=re(e.shape.slice(s));return DC({inputs:{x:e},backend:n,attrs:{shape:[-1,t]}})})),u=l.map((e=>({vals:n.data.get(e.dataId).values,shape:e.shape})));i=qf(l.map((e=>e.shape)),1);const c=1===l[0].shape[0],h=IS(u,i,t[0].dtype,c),f=qf(o.map((e=>e.shape)),s),d=n.makeTensorInfo(f,t[0].dtype,h);return l.forEach((e=>n.disposeIntermediateTensorInfo(e))),d}const FS={kernelName:vt,backendName:"cpu",kernelFunc:TS};function RS(e){const{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s}=t,{strides:i,pad:o,dataFormat:l,dilations:u,dimRoundingMode:c}=r;qE([a,s],"conv2d");const h=Il(l),f=vl(a.shape,s.shape,i,u,o,c,!1,h),d=f.filterHeight,p=f.filterWidth,m=f.dilationHeight,g=f.dilationWidth,y=f.padInfo.left,b=f.padInfo.top,v="channelsLast"===f.dataFormat,w=new ya(f.outShape,a.dtype),_=Ae(a.shape),x=Ae(s.shape),k=_[0],E=v?_[1]:_[2],C=v?_[2]:1,S=v?1:_[1],N=w.strides[0],I=v?w.strides[1]:w.strides[2],A=v?w.strides[2]:1,D=v?1:w.strides[1],T=n.data.get(a.dataId).values,F=n.data.get(s.dataId).values,R=w.values;for(let e=0;e=f.inHeight)continue;const s=e*x[0],i=t+n*E;for(let e=0;e=f.inWidth)continue;const a=i+r*C;let o=s+e*x[1];for(let e=0;e=u.inDepth)continue;const s=e*C[0],i=t+n*E[1];for(let e=0;e=u.inHeight)continue;const a=s+e*C[1],o=i+r*E[2];for(let e=0;e=u.inWidth)continue;const s=a+e*C[2],i=o+t*u.inChannels;let l=s;for(let e=0;eMath.cos(e))),WS={kernelName:St,backendName:"cpu",kernelFunc:zS},US=ZE(Nt,(e=>Math.cosh(e))),VS={kernelName:Nt,backendName:"cpu",kernelFunc:US},jS={kernelName:At,backendName:"cpu",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{image:a,boxes:s,boxInd:i}=t,{cropSize:o,method:l,extrapolationValue:u}=r,[c,h,f,d]=a.shape,p=s.shape[0],[m,g]=o,y=Xs([p,m,g,d],"float32"),b=n.data.get(s.dataId).values,v=n.data.get(i.dataId).values,w=n.data.get(a.dataId).values,_=Ae(a.shape),x=Ae(y.shape);for(let e=0;e=c)continue;const o=m>1?(a-n)*(h-1)/(m-1):0,p=g>1?(s-r)*(f-1)/(g-1):0;for(let t=0;t1?n*(h-1)+t*o:.5*(n+a)*(h-1);if(c<0||c>h-1)for(let n=0;n1?r*(f-1)+l*p:.5*(r+s)*(f-1);if(c<0||c>f-1){for(let n=0;n1?r*(f-1)+n*p:.5*(r+s)*(f-1);if(a<0||a>f-1){for(let r=0;re+p-t-1:(e,t)=>e+t;for(let e=0;e`Only NHWC dataFormat supported on CPU for depthToSpace. Got ${i}`)),Q(s>1,(()=>`blockSize should be > 1 for depthToSpace, but was: ${s}`));const o=a.shape[0],l=a.shape[1],u=a.shape[2],c=a.shape[3],h=l*s,f=u*s,d=c/(s*s),p=n.data.get(a.dataId).values,m=new Float32Array(o*h*f*d);let g=0;for(let e=0;e`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${i} and dilations '${f}'`));const d=vl(a.shape,s.shape,i,f,o,u,!0),{filterHeight:p,filterWidth:m,dilationHeight:g,dilationWidth:y,padInfo:b}=d,v=b.left,w=b.top,_=d.outChannels/d.inChannels,x=new ya(d.outShape,a.dtype),k=n.data.get(a.dataId).values,E=n.data.get(s.dataId).values,C=x.values;for(let e=0;e=d.inHeight)continue;const s=e*h[0],i=t+n*c[1];for(let e=0;e=d.inWidth)continue;const a=s+e*h[1],o=i+r*d.inChannels;let l=t,u=a;for(let e=0;e{const{x:r,filter:a}=e,{strides:s,pad:i,dilations:o}=n,l=t,u=l.data.get(r.dataId).values,c=r.shape.length,h=l.data.get(a.dataId).values,f=a.shape.length,{batchSize:d,inHeight:p,inWidth:m,inChannels:g,outHeight:y,outWidth:b,padInfo:v,strideHeight:w,strideWidth:_,filterHeight:x,filterWidth:k,dilationHeight:E,dilationWidth:C,outShape:S}=gl(r.shape,a.shape,s,i,"NHWC",o),N=re(S),I=S.length,A=ge(r.dtype,N);for(let e=0;e=0&&s=0&&dl&&(l=m)}}}A[Be([e,t,s,o],I,Ae(S))]=l}}}return{dataId:l.write(aa(A,r.dtype),S,r.dtype),shape:S,dtype:r.dtype}}},eN={kernelName:Pt,backendName:"cpu",kernelFunc:({inputs:e,backend:t,attrs:n})=>{const{x:r,filter:a,dy:s}=e,{strides:i,pad:o,dilations:l}=n,u=t,c=Te(r.shape,u.data.get(r.dataId).values),h=Te(a.shape,u.data.get(a.dataId).values),{batchSize:f,inHeight:d,inWidth:p,inChannels:m,outHeight:g,outWidth:y,padInfo:b,strideHeight:v,strideWidth:w,filterHeight:_,filterWidth:x,dilationHeight:k,dilationWidth:E,outShape:C}=gl(r.shape,a.shape,i,o,"NHWC",l);Q(s.rank===C.length,(()=>`Error in ${Pt}, dy must have the same rank as output ${C.length}, but got ${s.rank}`));const S=Te(C,u.data.get(s.dataId).values),N=Oe(a.shape,a.dtype);for(let e=0;e=0&&r=0&&ui&&(i=a,o=t,l=n)}}}N[o][l][s]+=S[e][t][r][s]}}}return{dataId:u.write(aa(N,r.dtype),a.shape,a.dtype),shape:a.shape,dtype:a.dtype}}},tN={kernelName:$t,backendName:"cpu",kernelFunc:({inputs:e,backend:t,attrs:n})=>{const{x:r,filter:a,dy:s}=e,{strides:i,pad:o,dilations:l}=n,u=t,c=Te(r.shape,u.data.get(r.dataId).values),h=Te(a.shape,u.data.get(a.dataId).values),{batchSize:f,inHeight:d,inWidth:p,inChannels:m,outHeight:g,outWidth:y,padInfo:b,strideHeight:v,strideWidth:w,filterHeight:_,filterWidth:x,dilationHeight:k,dilationWidth:E,outShape:C}=gl(r.shape,a.shape,i,o,"NHWC",l);Q(s.rank===C.length,(()=>`Error in ${$t}, dy must have the same rank as output ${C.length}, but got ${s.rank}`));const S=Te(C,u.data.get(s.dataId).values),N=Oe(r.shape,r.dtype);for(let e=0;e=0&&r=0&&ui&&(i=a,o=r,l=u)}}}N[e][o][l][s]+=S[e][t][r][s]}}}return{dataId:u.write(aa(N,r.dtype),r.shape,r.dtype),shape:r.shape,dtype:r.dtype}}},nN=iC(((e,t)=>e*t)),rN=CC(((e,t,n,r)=>({real:e*n-t*r,imag:e*r+t*n}))),aN=EC(Bn,nN,rN),sN={kernelName:Bn,backendName:"cpu",kernelFunc:aN};function iN(e){const{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,keepDims:i}=r;let o;qE(a,"sum"),o="bool"===a.dtype?xC({inputs:{x:a},backend:n,attrs:{dtype:"int32"}}):nC({inputs:{x:a},backend:n});const l=o.shape.length,u=de(s,o.shape),c=qu(u,l);let h=u,f=o;null!=c&&(f=VC({inputs:{x:o},backend:n,attrs:{perm:c}}),h=Ju(h.length,l)),Ku("sum",h,f.shape.length);const[d,p]=Gu(f.shape,h);let m=vC(n,d,Da(f.dtype,"int32"));const g=re(p),y=n.data.get(m.dataId).values,b=n.data.get(f.dataId).values;for(let e=0;e=0&&(f=iN({inputs:{x:f},backend:n,attrs:{axis:u[e]-(i.length-d),keepDims:!1}}),p.push(f)),d--)}for(const e of p)e!==f&&n.disposeIntermediateTensorInfo(e);return f}},uN={kernelName:Ut,backendName:"cpu",kernelFunc:function(e){const{inputs:t,backend:n}=e,{dy:r,y:a}=t;qE([r,a],"eluGrad");const s=new Float32Array(re(a.shape)),i=n.data.get(a.dataId).values,o=n.data.get(r.dataId).values;for(let e=0;e=1?o[e]:o[e]*(t+1)}return n.makeTensorInfo(a.shape,"float32",s)}},cN=iC(((e,t)=>e===t?1:0)),hN=EC(jt,cN,null,"bool"),fN={kernelName:jt,backendName:"cpu",kernelFunc:hN},dN=id,pN=od,mN=ld,gN=ud,yN=cd,bN=hd,vN=ZE(Vt,(e=>{const t=Math.sign(e),n=Math.abs(e),r=1/(1+dN*n);return t*(1-((((bN*r+yN)*r+gN)*r+mN)*r+pN)*r*Math.exp(-n*n))})),wN={kernelName:Vt,backendName:"cpu",kernelFunc:vN},_N=_S((e=>Math.exp(e))),xN=QE(Ht,_N),kN={kernelName:Ht,backendName:"cpu",kernelFunc:xN};function EN(e){const{inputs:t,backend:n,attrs:r}=e,{input:a}=t,{dim:s}=r,i=a.shape.length,o=a.shape.slice();let l=s;return s<0&&(Q(-(i+1)<=s,(()=>`Axis must be in the interval [${-(i+1)}, ${i}]`)),l=i+s+1),o.splice(l,0,1),DC({inputs:{x:a},backend:n,attrs:{shape:o}})}const CN={kernelName:Gt,backendName:"cpu",kernelFunc:EN},SN=_S((e=>Math.expm1(e))),NN=QE(Xt,SN),IN={kernelName:Xt,backendName:"cpu",kernelFunc:NN},AN=iC(((e,t)=>e/t)),DN=EC(Lt,AN),TN={kernelName:Lt,backendName:"cpu",kernelFunc:DN},FN=iC(((e,t)=>e-t)),RN=CC(((e,t,n,r)=>({real:e-n,imag:t-r}))),ON=EC(Ar,FN,RN),MN={kernelName:Ar,backendName:"cpu",kernelFunc:ON};function BN(e,t,n){const r=e.shape,a=r[0],s=r[1],i=n.data.get(e.dataId),o=i.complexTensorInfos.real,l=i.complexTensorInfos.imag,u=[a,s],c=re(u),h=me("float32",c),f=me("float32",c);for(let e=0;e{const{image:r}=e,a=n,s=me(r.dtype,re(r.shape)),[i,o,l,u]=r.shape,c=a.data.get(r.dataId).values;for(let e=0;e=0&&fMath.floor(e))),jN=QE(Jt,VN),HN={kernelName:Jt,backendName:"cpu",kernelFunc:jN},GN=iC(((e,t)=>Math.floor(e/t))),XN=EC(Zt,GN,null,"int32"),KN={kernelName:Zt,backendName:"cpu",kernelFunc:XN},qN={kernelName:jr,backendName:"cpu",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dataFormat:c,dilations:h,dimRoundingMode:f,activation:d,leakyreluAlpha:p}=r;let m=RS({inputs:{x:a,filter:s},backend:n,attrs:{strides:l,pad:u,dataFormat:c,dilations:h,dimRoundingMode:f}});if(i){const e=m;m=IC({inputs:{a:m,b:i},backend:n}),n.disposeIntermediateTensorInfo(e)}if(d){const e=m;m=gC(n,m,d,o,p),n.disposeIntermediateTensorInfo(e)}return m}},YN={kernelName:Hr,backendName:"cpu",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dataFormat:c,dilations:h,dimRoundingMode:f,activation:d,leakyreluAlpha:p}=r;let m=KS({inputs:{x:a,filter:s},backend:n,attrs:{strides:l,pad:u,dataFormat:c,dilations:h,dimRoundingMode:f}});if(i){const e=m;m=IC({inputs:{a:m,b:i},backend:n}),n.disposeIntermediateTensorInfo(e)}if(d){const e=m;m=gC(n,m,d,o,p),n.disposeIntermediateTensorInfo(e)}return m}},JN={kernelName:tn,backendName:"cpu",kernelFunc:function(e){const{inputs:t,backend:n}=e,{params:r,indices:a}=t,s=re(r.shape),i=a.shape,o=i[i.length-1],[l,u,c,h]=Ei(r,a);if(0===u)return n.makeTensorInfo(l,r.dtype,[]);const f=Xs([u,c],r.dtype),d=n.data.get(a.dataId).values,p=n.data.get(r.dataId).values;for(let e=0;e=s/c)throw new Error(`Invalid indices: ${t} does not index into ${r.shape}`);for(let t=0;te>t?1:0)),tI=EC(nn,eI,null,"bool"),nI={kernelName:nn,backendName:"cpu",kernelFunc:tI},rI=iC(((e,t)=>e>=t?1:0)),aI=EC(rn,rI,null,"bool"),sI={kernelName:rn,backendName:"cpu",kernelFunc:aI},iI={kernelName:sn,backendName:"cpu",kernelFunc:function(e){const{inputs:t,backend:n}=e,{input:r}=t,a=re(r.shape),s=r.shape[r.shape.length-1],i=DC({inputs:{x:r},backend:n,attrs:{shape:[a/s,s]}}),o=BN(i,!0,n),l=DC({inputs:{x:o},backend:n,attrs:{shape:r.shape}});return n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(o),l}},oI=ZE(ln,(e=>Number.isFinite(e)?1:0),"bool"),lI={kernelName:ln,backendName:"cpu",kernelFunc:oI},uI=ZE(un,(e=>Math.abs(e)===1/0?1:0),"bool"),cI={kernelName:un,backendName:"cpu",kernelFunc:uI},hI=ZE(cn,(e=>Number.isNaN(e)?1:0),"bool"),fI={kernelName:cn,backendName:"cpu",kernelFunc:hI},dI=iC(((e,t)=>ee<=t?1:0)),yI=EC(dn,gI,null,"bool"),bI={kernelName:dn,backendName:"cpu",kernelFunc:yI};function vI(e,t,n){const r=(t-e)/(n-1),a=Re(n,"float32");a[0]=e;for(let e=1;eMath.log(e))),xI=QE(mn,_I),kI={kernelName:mn,backendName:"cpu",kernelFunc:xI},EI=ZE(gn,(e=>Math.log1p(e))),CI={kernelName:gn,backendName:"cpu",kernelFunc:EI},SI=iC(((e,t)=>e&&t)),NI=EC(yn,SI,null,"bool"),II={kernelName:yn,backendName:"cpu",kernelFunc:NI},AI=ZE(bn,(e=>e?0:1),"bool"),DI={kernelName:bn,backendName:"cpu",kernelFunc:AI},TI=iC(((e,t)=>e||t)),FI=EC(vn,TI,null,"bool"),RI={kernelName:vn,backendName:"cpu",kernelFunc:FI},OI={kernelName:_n,backendName:"cpu",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{depthRadius:s,bias:i,alpha:o,beta:l}=r;qE(a,"LRN");const u=a.shape[3],c=u-1,h=n.data.get(a.dataId).values,f=re(a.shape),d=new Float32Array(f);function p(e){const t=e%u;let n=e-t+Math.max(0,t-s);const r=e-t+Math.min(t+s,c);let a=0;for(;n<=r;n++){const e=h[n];a+=e*e}return a}for(let e=0;es&&(s=t)}a[n]=s}return a}function $I(e){const{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{reductionIndices:s,keepDims:i}=r,o=n;let l=a.shape;const u=l.length,c=de(s,l);let h=c;const f=qu(h,u);let d=o.data.get(a.dataId).values;if(null!=f){const e=new Array(u);for(let t=0;tMath.max(e,t))),zI=EC(En,LI),WI={kernelName:En,backendName:"cpu",kernelFunc:zI},UI={kernelName:Cn,backendName:"cpu",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{x:a}=t;qE(a,"maxPool");const{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=r;Q(Nl(i,1),(()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${i} and dilations '1'`));const u=yl(a.shape,s,i,1,o,l);let c;if(1===u.filterWidth&&1===u.filterHeight&&se(u.inShape,u.outShape))c=nC({inputs:{x:a},backend:n});else{const e=n.data.get(a.dataId).values,t=Ae(a.shape),r=iS(e,a.shape,a.dtype,t,u,"max");c=n.makeTensorInfo(u.outShape,a.dtype,r.values)}return c}},VI={kernelName:Nn,backendName:"cpu",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l,dataFormat:u}=r;qE(a,"maxPool3d");const c=bl(a.shape,s,i,1,o,l,u),h=lS(n.data.get(a.dataId).values,a.shape,a.dtype,Ae(a.shape),c,"max");return n.makeTensorInfo(h.shape,"float32",h.values)}},jI={kernelName:In,backendName:"cpu",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{dy:a,input:s}=t,{filterSize:i,strides:o,pad:l,dimRoundingMode:u}=r;qE([a,s],"maxPool3DGrad");const c=bl(s.shape,i,o,1,l,u),h=function(e,t){const n=Xs(t.outShape,"int32"),r=t.strideDepth,a=t.strideHeight,s=t.strideWidth,i=t.dilationDepth,o=t.dilationHeight,l=t.dilationWidth,u=t.effectiveFilterDepth,c=t.effectiveFilterHeight,h=t.effectiveFilterWidth,f=t.padInfo.front,d=t.padInfo.top,p=t.padInfo.left;for(let m=0;m=E&&(E=o,C=n*c*h+a*c+i)}}}n.set(C,m,y,r,a,g)}}}return n}(n.bufferSync(s),c),f=c.strideDepth,d=c.strideHeight,p=c.strideWidth,m=c.dilationDepth,g=c.dilationHeight,y=c.dilationWidth,b=c.effectiveFilterDepth,v=c.effectiveFilterHeight,w=c.effectiveFilterWidth,_=b-1-c.padInfo.front,x=w-1-c.padInfo.left,k=v-1-c.padInfo.top,E=Xs(s.shape,"float32"),C=n.bufferSync(a);for(let e=0;e=c.outDepth||Math.floor(r)!==r))for(let a=0;a=c.outHeight||Math.floor(s)!==s))for(let i=0;i=c.outWidth||Math.floor(u)!==u)continue;const f=b*v*w-1-h.get(e,r,s,u,t)===n*v*w+a*w+i?1:0;0!==f&&(l+=C.get(e,r,s,u,t)*f)}}}E.set(l,e,n,r,a,t)}return n.makeTensorInfo(E.shape,E.dtype,E.values)}},HI={kernelName:Sn,backendName:"cpu",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{dy:a,input:s,output:i}=t,o=s;qE([s,i],"maxPoolGrad");const{filterSize:l,strides:u,pad:c,dimRoundingMode:h}=r,f=yl(o.shape,l,u,1,c,h),d=n.data.get(o.dataId).values,p=Xs(f.outShape,o.dtype,oS(d,o.shape,o.dtype,f).values),m=f.strideHeight,g=f.strideWidth,y=f.dilationHeight,b=f.dilationWidth,v=f.effectiveFilterHeight,w=f.effectiveFilterWidth,_=w-1-f.padInfo.left,x=v-1-f.padInfo.top,k=Xs(o.shape,"float32"),E=n.data.get(a.dataId).values,C=Xs(a.shape,"float32",E);for(let e=0;e=f.outHeight||Math.floor(r)!==r))for(let a=0;a=f.outWidth||Math.floor(o)!==o)continue;const l=v*w-1-p.get(e,r,o,t)===n*w+a?1:0;0!==l&&(i+=C.get(e,r,o,t)*l)}}k.set(i,e,n,r,t)}return n.makeTensorInfo(k.shape,k.dtype,k.values)}},GI={kernelName:An,backendName:"cpu",kernelFunc:({inputs:e,attrs:t,backend:n})=>{const{x:r}=e,{filterSize:a,strides:s,pad:i,includeBatchInIndex:o}=t,l=n;qE(r,"MaxPoolWithArgmax");const u=l.data.get(r.dataId).values,c=yl(r.shape,a,s,[1,1],i),[h,f]=function(e,t,n,r,a){const s=iS(e,0,n,Ae(t),a,"max"),i=oS(e,t,n,a,!0,r);return[s.values,i.values]}(u,r.shape,r.dtype,o,c),d=l.write(h,c.outShape,r.dtype),p=l.write(f,c.outShape,r.dtype);return[{dataId:d,shape:c.outShape,dtype:r.dtype},{dataId:p,shape:c.outShape,dtype:"int32"}]}},XI={kernelName:Dn,backendName:"cpu",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,keepDims:i}=r,o=de(s,a.shape),l=re(Gu(a.shape,o)[1]),u=[],c=n.makeTensorInfo([],"float32",new Float32Array([l]));u.push(c);const h=xC({inputs:{x:a},backend:n,attrs:{dtype:"float32"}});u.push(h);const f=DN({inputs:{a:h,b:c},backend:n});u.push(f);const d=iN({inputs:{x:f},backend:n,attrs:{axis:s,keepDims:i}});return u.forEach((e=>n.disposeIntermediateTensorInfo(e))),d}},KI={kernelName:Tn,backendName:"cpu",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,keepDims:i}=r;qE(a,"min");const o=de(s,a.shape);let l=o;const u=qu(l,a.shape.length);let c=a;null!=u&&(c=VC({inputs:{x:a},backend:n,attrs:{perm:u}}),l=Ju(l.length,a.shape.length)),Ku("min",l,c.shape.length);const[h,f]=Gu(c.shape,l),d=re(f),p=Re(re(h),c.dtype),m=n.data.get(c.dataId).values;for(let e=0;eMath.min(e,t))),YI=EC(Fn,qI),JI={kernelName:Fn,backendName:"cpu",kernelFunc:YI},ZI={kernelName:Rn,backendName:"cpu",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{paddings:s,mode:i}=r;qE(a,"mirrorPad");const o=s.map(((e,t)=>e[0]+a.shape[t]+e[1])),l=s.map((e=>e[0])),u=s.map(((e,t)=>e[0]+a.shape[t])),c="reflect"===i?0:1,h=n.data.get(a.dataId).values,f=a.shape.length,d=Ae(a.shape),p=re(o),m=o.length,g=Ae(o),y=me(a.dtype,p);for(let e=0;e=u[e]&&(t[e]=2*(u[e]-1)-t[e]+c);t=t.map(((e,t)=>e-l[t]));const n=Be(t,f,d);y[e]=h[n]}return{dataId:n.write(y,o,a.dtype),shape:o,dtype:a.dtype}}},QI=iC(((e,t)=>{const n=e%t;return e<0&&t<0||e>=0&&t>=0?n:(n+t)%t})),eA=EC(On,QI),tA={kernelName:On,backendName:"cpu",kernelFunc:eA};function nA(e){const{inputs:t,backend:n,attrs:r}=e,{logits:a}=t,{dim:s}=r,i=a.shape.length;let o=s;if(-1===o&&(o=i-1),o!==i-1)throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${i} and dim was ${o}`);const l=de([o],a.shape),u=$I({inputs:{x:a},backend:n,attrs:{reductionIndices:l,keepDims:!1}}),c=Xu(u.shape,l),h=DC({inputs:{x:u},backend:n,attrs:{shape:c}}),f=ON({inputs:{a,b:h},backend:n}),d=xN({inputs:{x:f},backend:n}),p=iN({inputs:{x:d},backend:n,attrs:{axis:l,keepDims:!1}}),m=DC({inputs:{x:p},backend:n,attrs:{shape:c}}),g=DN({inputs:{a:d,b:m},backend:n});return n.disposeIntermediateTensorInfo(u),n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(f),n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(p),n.disposeIntermediateTensorInfo(m),g}const rA={kernelName:xr,backendName:"cpu",kernelFunc:nA},aA={kernelName:Mn,backendName:"cpu",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{logits:a}=t,{numSamples:s,seed:i,normalized:o}=r;qE(a,"multinomial");const l=o?a:nA({inputs:{logits:a},backend:n,attrs:{dim:-1}}),u=l.shape[0],c=l.shape[1],h=n.data.get(l.dataId).values,f=[u,s],d=Re(re(f),"int32");for(let e=0;ee!==t?1:0)),pA=EC(Pn,dA,null,"bool"),mA={kernelName:Pn,backendName:"cpu",kernelFunc:pA},gA={kernelName:Vn,backendName:"cpu",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{indices:a}=t,{depth:s,onValue:i,offValue:o}=r;qE(a,"oneHot");const l=re(a.shape),u=new Float32Array(l*s);u.fill(o);const c=n.data.get(a.dataId).values;for(let e=0;e=0&&c[e]{ee(s,e.shape,"All tensors passed to stack must have matching shapes"),Q(i===e.dtype,(()=>"All tensors passed to stack must have matching dtypes"))}));const o=[],l=TS({inputs:t.map((e=>{const t=EN({inputs:{input:e},backend:n,attrs:{dim:a}});return o.push(t),t})),backend:n,attrs:{axis:a}});return o.forEach((e=>n.disposeIntermediateTensorInfo(e))),l}const _A={kernelName:jn,backendName:"cpu",kernelFunc:wA},xA={kernelName:Hn,backendName:"cpu",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{paddings:s,constantValue:i}=r;qE(a,"pad");const o=s.map(((e,t)=>e[0]+a.shape[t]+e[1])),l=s.map((e=>e[0])),u=n.data.get(a.dataId).values,c=re(a.shape),h=a.shape.length,f=Ae(a.shape),d=re(o),p=o.length,m=Ae(o),g=me(a.dtype,d);0!==i&&g.fill(i);for(let e=0;ee+l[t])),p,m)]=u[e];return{dataId:n.write(g,o,a.dtype),shape:o,dtype:a.dtype}}},kA=iC(((e,t)=>Math.pow(e,t))),EA=EC(Xn,kA),CA={kernelName:Xn,backendName:"cpu",kernelFunc:EA};function SA(e,t,n,r){const[a,s]=Gu(e,r),i=Da(t,"int32"),o=Re(re(a),i),l=re(s);for(let e=0;en.disposeIntermediateTensorInfo(e))),n.makeTensorInfo(y,g,p)}};function IA(e,t,n,r){if(e===t||e1)return Re(0,r);const a=Re(Math.abs(Math.ceil((t-e)/n)),r);t1/e)),TA={kernelName:Zn,backendName:"cpu",kernelFunc:DA},FA={kernelName:rr,backendName:"cpu",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{images:a}=t,{alignCorners:s,halfPixelCenters:i,size:o}=r;qE(a,"resizeBilinear");const l=Ae(a.shape),[u,c]=o,[h,f,d,p]=a.shape,m=n.data.get(a.dataId).values,g=new Float32Array(re([h,u,c,p])),y=[s&&u>1?f-1:f,s&&c>1?d-1:d],b=[s&&u>1?u-1:u,s&&c>1?c-1:c];let v=0;const w=y[0]/b[0],_=y[1]/b[1];for(let e=0;e1?u-1:u,i&&d>1?c-1:c],g=[i&&f>1?f-1:f,i&&d>1?d-1:d],y=m[0]/g[0],b=m[1]/g[1],v=n.data.get(s.dataId).values;let w=0;for(let e=0;e1?f-1:f,s&&c>1?d-1:d],b=[s&&u>1?u-1:u,s&&c>1?c-1:c],v=y[0]/b[0],w=y[1]/b[1];let _=0;for(let e=0;e1?c-1:c,i&&p>1?h-1:h],b=[i&&d>1?d-1:d,i&&p>1?p-1:p],v=y[0]/b[0],w=y[1]/b[1],_=1/v,x=1/w,k=2*Math.ceil(_)+2,E=2*Math.ceil(x)+2;for(let e=0;e=d)continue;const f=t+u*l[1],m=u*v;if(e===Math.min(c-1,i?Math.round(m):Math.floor(m)))for(let e=0;e=p)continue;const a=f+t*l[2],s=t*w;r===Math.min(h-1,i?Math.round(s):Math.floor(s))&&(o+=g[a+n])}}m[s+n]=o}}}}return n.makeTensorInfo(a.shape,a.dtype,m)}},BA={kernelName:ir,backendName:"cpu",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{dims:s}=r;qE(a,"reverse");const i=a.shape.length,o=de(s,a.shape);if(0===i)return nC({inputs:{x:a},backend:n});const l=new ya(a.shape,a.dtype),u=n.bufferSync(a);for(let e=0;en[e]=a.shape[e]-1-n[e])),l.set(u.get(...n),...t)}return n.makeTensorInfo(l.shape,l.dtype,l.values)}},$A={kernelName:Ur,backendName:"cpu",kernelFunc:({inputs:e,attrs:t,backend:n})=>{const{image:r}=e,{radians:a,fillValue:s,center:i}=t,o=n,l=me(r.dtype,re(r.shape)),[u,c,h,f]=r.shape,[d,p]=Zf(i,c,h),m=Math.sin(a),g=Math.cos(a),y=o.data.get(r.dataId).values;for(let e=0;e=0&&w=0&&_{const t=Math.floor(e);return e-t<.5?Math.floor(e):e-t>.5?Math.ceil(e):t%2==0?t:t+1})),LA={kernelName:or,backendName:"cpu",kernelFunc:PA},zA=_S((e=>1/Math.sqrt(e))),WA=QE(lr,zA),UA={kernelName:lr,backendName:"cpu",kernelFunc:WA};function VA(e,t,n,r,a,s,i,o,l,u){const c=[r/a,a],h=e.values,f=t.values;if(0===r)return Xs(n,t.dtype);const d=Xs(c,t.dtype);d.values.fill(l);for(let e=0;e=r/a)throw new Error(`Invalid indices: ${s} does not index into ${n}`);for(let n=0;n1||1===a.shape.length?1:re(a.shape.slice(1));for(let e=0;ee>=0?XA*e:GA*(Math.exp(e)-1))),qA={kernelName:hr,backendName:"cpu",kernelFunc:KA},YA=ZE(mr,(e=>e<0?-1:e>0?1:0)),JA={kernelName:mr,backendName:"cpu",kernelFunc:YA},ZA=ZE(dr,(e=>Math.sin(e))),QA={kernelName:dr,backendName:"cpu",kernelFunc:ZA},eD=ZE(pr,(e=>Math.sinh(e))),tD={kernelName:pr,backendName:"cpu",kernelFunc:eD},nD=Math.log(1.1920928955078125e-7)+2,rD=ZE(yr,(e=>{const t=e>-nD,n=e=l)throw new Error(`indices(${t}, 0) is invalid: ${n} >= ${l}`);++p[n],f=f&&n>=d,d=n}let m=!0;for(let e=0;e0&&(p[e]+=p[e-1])}if(m&&f){const t=e,n=r;for(let e=0;eNumber(e))))),n.makeTensorInfo([m.length],r.dtype,new Int32Array(m))]}};function lD(e,t,n,r,a){const s=re(r),i=t[0],o=a.length,l=[];let u=1,c=-1;for(let e=0;e0){d[f-1]=1;for(let e=f-2;e>=0;--e)d[e]=d[e+1]*r[e+1]}const p=[];if(o>0){p[o-1]=1;for(let e=o-2;e>=0;--e)p[e]=p[e+1]*l[e+1]}const m=ge(n,i*o);for(let t=0;t{const t=[...c];t[o]=e;const r=mS({inputs:{x:a},backend:n,attrs:{begin:u,size:t}});return u[o]+=e,r}))}},fD=ZE(br,(e=>Math.sqrt(e))),dD={kernelName:br,backendName:"cpu",kernelFunc:fD},pD={kernelName:Nr,backendName:"cpu",kernelFunc:({inputs:e,backend:t})=>{const{x:n}=e,r=t;qE(n,"square");const a=r.data.get(n.dataId).values,s=new Float32Array(a.length);for(let e=0;e{const n=e-t;return n*n})),gD=EC(Sr,mD),yD={kernelName:Sr,backendName:"cpu",kernelFunc:gD},bD=ZE(zr,((e,t)=>{const n=t;return isNaN(e)?NaN:e>0?1:n.alpha})),vD={kernelName:zr,backendName:"cpu",kernelFunc:bD};function wD(e,t,n,r){const a=Xs(e,t.dtype);for(let e=0;e0===e)))w=n.makeTensorInfo(b,a.dtype,[]);else{const e=wD(b,n.bufferSync(v),m,p);w=n.makeTensorInfo(e.shape,e.dtype,e.values)}const _=DC({inputs:{x:w},backend:n,attrs:{shape:b}});return n.disposeIntermediateTensorInfo(v),n.disposeIntermediateTensorInfo(w),_}},xD=ZE(Dr,(e=>Math.tan(e))),kD={kernelName:Dr,backendName:"cpu",kernelFunc:xD},ED=ZE(Tr,(e=>Math.tanh(e)));function CD(e,t){const n=new Array(e.rank);for(let r=0;rt.value-e.value));const i=t*r,c=l.subarray(i,i+r),h=u.subarray(i,i+r);for(let e=0;et-1)if(t<=1)n=0;else{const e=2*t;n-=e*Math.trunc(n/e),n>=t&&(n=e-n-1)}return K(0,n,t-1)}(e,t);case"wrap":return function(e,t){let n=e;if(n<0)if(t<=1)n=0;else{const e=t-1;n+=t*(Math.trunc(-n/e)+1)}else if(n>t-1)if(t<=1)n=0;else{const e=t-1;n-=t*Math.trunc(n/e)}return K(0,n,t-1)}(e,t);case"nearest":return function(e,t){return K(0,e,t-1)}(e,t);case"constant":default:return function(e,t){return e}(e)}}function ID(e,t,n,r,a,s,i,o,l,u,c){return 0<=o&&o{for(let n=0;nn.disposeIntermediateTensorInfo(e))),h}},bA];for(const e of FD)Jr(e);const RD={},OD={alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0};function MD(e){if(!(e in RD)){const t=function(e){if(1!==e&&2!==e)throw new Error("Cannot get WebGL rendering context, WebGL is disabled.");const t=function(e){if("undefined"!=typeof OffscreenCanvas&&2===e)return new OffscreenCanvas(300,150);if("undefined"!=typeof document)return document.createElement("canvas");throw new Error("Cannot create a canvas in this context")}(e);return t.addEventListener("webglcontextlost",(t=>{t.preventDefault(),delete RD[e]}),!1),1===e?t.getContext("webgl",OD)||t.getContext("experimental-webgl",OD):t.getContext("webgl2",OD)}(e);if(null===t)return console.log("Could not get context for WebGL version",e),null;RD[e]=t}const t=RD[e];return t.isContextLost()?(delete RD[e],MD(e)):(t.disable(t.DEPTH_TEST),t.disable(t.STENCIL_TEST),t.disable(t.BLEND),t.disable(t.DITHER),t.disable(t.POLYGON_OFFSET_FILL),t.disable(t.SAMPLE_COVERAGE),t.enable(t.SCISSOR_TEST),t.enable(t.CULL_FACE),t.cullFace(t.BACK),RD[e])}var BD,$D,PD;function LD(e,t){return[t,e]}function zD(e){const t=re(e);return le(Math.ceil(t/4))}function WD(e,t){return[Math.max(1,Math.ceil(t/2)),Math.max(1,Math.ceil(e/2))]}function UD(e,t){const n=e;let r,a,s,i,o,l,u,c,h,f;return 2===We().getNumber("WEBGL_VERSION")?(r=n.R32F,a=n.R16F,s=n.RGBA16F,i=n.RGBA32F,o=n.RED,u=4,c=1,h=n.HALF_FLOAT,f=n.FLOAT):(r=e.RGBA,a=e.RGBA,s=e.RGBA,i=n.RGBA,o=e.RGBA,u=4,c=4,h=null!=t?t.HALF_FLOAT_OES:null,f=e.FLOAT),l=e.RGBA,{internalFormatFloat:r,internalFormatHalfFloat:a,internalFormatPackedHalfFloat:s,internalFormatPackedFloat:i,textureFormatFloat:o,downloadTextureFormat:l,downloadUnpackNumChannels:u,defaultNumChannels:c,textureTypeHalfFloat:h,textureTypeFloat:f}}function VD(e,t){const n=t();return We().getBool("DEBUG")&&function(e){const t=e.getError();if(t!==e.NO_ERROR)throw new Error("WebGL Error: "+function(e,t){switch(t){case e.NO_ERROR:return"NO_ERROR";case e.INVALID_ENUM:return"INVALID_ENUM";case e.INVALID_VALUE:return"INVALID_VALUE";case e.INVALID_OPERATION:return"INVALID_OPERATION";case e.INVALID_FRAMEBUFFER_OPERATION:return"INVALID_FRAMEBUFFER_OPERATION";case e.OUT_OF_MEMORY:return"OUT_OF_MEMORY";case e.CONTEXT_LOST_WEBGL:return"CONTEXT_LOST_WEBGL";default:return`Unknown error code ${t}`}}(e,t))}(e),n}function jD(e){return!!(We().getBool("WEBGL_RENDER_FLOAT32_ENABLED")||0===e||5.96e-8e.getExtension(t)),'Extension "'+t+'" not supported on this browser.')}!function(e){e[e.DENSE=0]="DENSE",e[e.SHARED_BATCH=1]="SHARED_BATCH"}(BD||(BD={})),function(e){e[e.RENDER=0]="RENDER",e[e.UPLOAD=1]="UPLOAD",e[e.PIXELS=2]="PIXELS",e[e.DOWNLOAD=3]="DOWNLOAD"}($D||($D={})),function(e){e[e.UNPACKED_FLOAT16=0]="UNPACKED_FLOAT16",e[e.UNPACKED_FLOAT32=1]="UNPACKED_FLOAT32",e[e.PACKED_4X1_UNSIGNED_BYTE=2]="PACKED_4X1_UNSIGNED_BYTE",e[e.PACKED_2X2_FLOAT32=3]="PACKED_2X2_FLOAT32",e[e.PACKED_2X2_FLOAT16=4]="PACKED_2X2_FLOAT16"}(PD||(PD={}));const GD=/ERROR: [0-9]+:([0-9]+):/g;function XD(e,t){if(VD(e,(()=>e.validateProgram(t))),!1===e.getProgramParameter(t,e.VALIDATE_STATUS))throw console.log(e.getProgramInfoLog(t)),new Error("Shader program validation failed.")}function KD(e,t,n,r,a,s,i){const o=e.getAttribLocation(t,n);return-1!==o&&(VD(e,(()=>e.bindBuffer(e.ARRAY_BUFFER,r))),VD(e,(()=>e.vertexAttribPointer(o,a,e.FLOAT,!1,s,i))),VD(e,(()=>e.enableVertexAttribArray(o))),!0)}function qD(e,t,n,r){VD(e,(()=>function(e,t,n){(function(e,t){const n=e.MAX_COMBINED_TEXTURE_IMAGE_UNITS-1,r=t+e.TEXTURE0;if(rn)throw new Error(`textureUnit must be in [gl.TEXTURE0, gl.TEXTURE${n}].`)})(e,n),VD(e,(()=>e.activeTexture(e.TEXTURE0+n))),VD(e,(()=>e.bindTexture(e.TEXTURE_2D,t)))}(e,t,r))),VD(e,(()=>e.uniform1i(n,r)))}function YD(e,t,n){VD(e,(()=>e.bindFramebuffer(e.FRAMEBUFFER,n))),VD(e,(()=>e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,t,0)))}function JD(e,t){VD(e,(()=>e.bindFramebuffer(e.FRAMEBUFFER,t))),VD(e,(()=>e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,null,0)))}function ZD(e){const t=e.checkFramebufferStatus(e.FRAMEBUFFER);if(t!==e.FRAMEBUFFER_COMPLETE)throw new Error("Error binding framebuffer: "+function(e,t){switch(t){case e.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:return"FRAMEBUFFER_INCOMPLETE_ATTACHMENT";case e.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:return"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT";case e.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:return"FRAMEBUFFER_INCOMPLETE_DIMENSIONS";case e.FRAMEBUFFER_UNSUPPORTED:return"FRAMEBUFFER_UNSUPPORTED";default:return`unknown error ${t}`}}(e,t))}function QD(e,t,n){const r=VD(e,(()=>t()));if(null==r)throw new Error(n);return r}function eT(e,t=2){return re(e.slice(0,e.length-t))}function tT(e){if(0===e.length)throw Error("Cannot get rows and columns of an empty shape array.");return[e.length>1?e[e.length-2]:1,e[e.length-1]]}function nT(e){let t=[1,1,1];return 0===e.length||1===e.length&&1===e[0]||(t=[eT(e),...tT(e)]),t}function rT(e){return e%2==0}function aT(e,t){if(se(e=e.slice(-2),t=t.slice(-2)))return!0;if(!e.length||!t.length)return!0;if(0===e[0]||0===e[1]||0===t[0]||0===t[1])return!0;if(e.length!==t.length){const n=e.slice(-1)[0],r=t.slice(-1)[0];if(n===r)return!0;if(rT(n)&&rT(r)&&(1===e[0]||1===t[0]))return!0}return e[1]===t[1]&&rT(e[0])&&rT(t[0])}let sT,iT;function oT(e,t){return null!=e.getExtension(t)}function lT(e){try{if(null!=MD(e))return!0}catch(e){return console.log("Error when getting WebGL context: ",e),!1}return!1}function uT(e){const t=UD(e),n=e.createTexture();e.bindTexture(e.TEXTURE_2D,n),e.texImage2D(e.TEXTURE_2D,0,t.internalFormatFloat,1,1,0,t.textureFormatFloat,t.textureTypeFloat,null);const r=e.createFramebuffer();e.bindFramebuffer(e.FRAMEBUFFER,r),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,n,0);const a=e.checkFramebufferStatus(e.FRAMEBUFFER)===e.FRAMEBUFFER_COMPLETE;return e.bindTexture(e.TEXTURE_2D,null),e.bindFramebuffer(e.FRAMEBUFFER,null),e.deleteTexture(n),e.deleteFramebuffer(r),a}function cT(e,t){Array.isArray(e)||(e=[e]),e.forEach((e=>{null!=e&&Q("complex64"!==e.dtype,(()=>`${t} does not support complex64 tensors in the WebGL backend.`))}))}const hT=We();function fT(){let e,t,n,r,a,s,i,o,l,u;return 2===We().getNumber("WEBGL_VERSION")?(e="#version 300 es",t="in",n="out",r="in",a="texture",s="outputColor",i="out vec4 outputColor;",o="\n bool isnan_custom(float val) {\n return (val > 0.0 || val < 0.0) ? false : val != 0.0;\n }\n\n bvec4 isnan_custom(vec4 val) {\n return bvec4(isnan_custom(val.x),\n isnan_custom(val.y), isnan_custom(val.z), isnan_custom(val.w));\n }\n\n #define isnan(value) isnan_custom(value)\n ",l="",u="\n #define round(value) newRound(value)\n int newRound(float value) {\n return int(floor(value + 0.5));\n }\n\n ivec4 newRound(vec4 value) {\n return ivec4(floor(value + vec4(0.5)));\n }\n "):(e="",t="attribute",n="varying",r="varying",a="texture2D",s="gl_FragColor",i="",o="\n #define isnan(value) isnan_custom(value)\n bool isnan_custom(float val) {\n return (val > 0. || val < 1. || val == 0.) ? false : true;\n }\n bvec4 isnan_custom(vec4 val) {\n return bvec4(isnan(val.x), isnan(val.y), isnan(val.z), isnan(val.w));\n }\n ",l="\n uniform float INFINITY;\n\n bool isinf(float val) {\n return abs(val) == INFINITY;\n }\n bvec4 isinf(vec4 val) {\n return equal(abs(val), vec4(INFINITY));\n }\n ",u="\n int round(float value) {\n return int(floor(value + 0.5));\n }\n\n ivec4 round(vec4 value) {\n return ivec4(floor(value + vec4(0.5)));\n }\n "),{version:e,attribute:t,varyingVs:n,varyingFs:r,texture2D:a,output:s,defineOutput:i,defineSpecialNaN:o,defineSpecialInf:l,defineRound:u}}function dT(e,t,n="index"){const r=Ae(t);return r.map(((t,a)=>`int ${e[a]} = ${n} / ${t}; ${a===r.length-1?`int ${e[a+1]} = ${n} - ${e[a]} * ${t}`:`index -= ${e[a]} * ${t}`};`)).join("")}function pT(e){const t=Ae(e).map((e=>e.toString()));return`\n int getFlatIndex(ivec3 coords) {\n return coords.x * ${t[0]} + coords.y * ${t[1]} + coords.z;\n }\n`}hT.registerFlag("HAS_WEBGL",(()=>hT.getNumber("WEBGL_VERSION")>0)),hT.registerFlag("WEBGL_VERSION",(()=>lT(2)?2:lT(1)?1:0)),hT.registerFlag("WEBGL_CHECK_NUMERICAL_PROBLEMS",(()=>!1)),hT.registerFlag("WEBGL_BUFFER_SUPPORTED",(()=>2===hT.get("WEBGL_VERSION"))),hT.registerFlag("WEBGL_CPU_FORWARD",(()=>!0)),hT.registerFlag("WEBGL_FORCE_F16_TEXTURES",(()=>!1)),hT.registerFlag("WEBGL_PACK",(()=>hT.getBool("HAS_WEBGL"))),hT.registerFlag("WEBGL_PACK_NORMALIZATION",(()=>hT.getBool("WEBGL_PACK"))),hT.registerFlag("WEBGL_PACK_CLIP",(()=>hT.getBool("WEBGL_PACK"))),hT.registerFlag("WEBGL_PACK_DEPTHWISECONV",(()=>hT.getBool("WEBGL_PACK"))),hT.registerFlag("WEBGL_PACK_BINARY_OPERATIONS",(()=>hT.getBool("WEBGL_PACK"))),hT.registerFlag("WEBGL_PACK_UNARY_OPERATIONS",(()=>hT.getBool("WEBGL_PACK"))),hT.registerFlag("WEBGL_PACK_ARRAY_OPERATIONS",(()=>hT.getBool("WEBGL_PACK"))),hT.registerFlag("WEBGL_PACK_IMAGE_OPERATIONS",(()=>hT.getBool("WEBGL_PACK"))),hT.registerFlag("WEBGL_PACK_REDUCE",(()=>hT.getBool("WEBGL_PACK"))),hT.registerFlag("WEBGL_LAZILY_UNPACK",(()=>hT.getBool("WEBGL_PACK"))),hT.registerFlag("WEBGL_CONV_IM2COL",(()=>hT.getBool("WEBGL_PACK"))),hT.registerFlag("WEBGL_MAX_TEXTURE_SIZE",(()=>function(e){if(null==sT){const t=MD(e);sT=t.getParameter(t.MAX_TEXTURE_SIZE)}return sT}(hT.getNumber("WEBGL_VERSION")))),hT.registerFlag("WEBGL_MAX_TEXTURES_IN_SHADER",(()=>function(e){if(null==iT){const t=MD(e);iT=t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS)}return Math.min(16,iT)}(hT.getNumber("WEBGL_VERSION")))),hT.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION",(()=>{const e=hT.getNumber("WEBGL_VERSION");return 0===e?0:function(e){if(0===e)return 0;let t;const n=MD(e);return t=oT(n,"EXT_disjoint_timer_query_webgl2")&&2===e?2:oT(n,"EXT_disjoint_timer_query")?1:0,t}(e)})),hT.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE",(()=>hT.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0&&!Va())),hT.registerFlag("WEBGL_RENDER_FLOAT32_CAPABLE",(()=>function(e){if(0===e)return!1;const t=MD(e);if(1===e){if(!oT(t,"OES_texture_float"))return!1}else if(!oT(t,"EXT_color_buffer_float"))return!1;return uT(t)}(hT.getNumber("WEBGL_VERSION")))),hT.registerFlag("WEBGL_RENDER_FLOAT32_ENABLED",(()=>!hT.getBool("WEBGL_FORCE_F16_TEXTURES")&&hT.getBool("WEBGL_RENDER_FLOAT32_CAPABLE"))),hT.registerFlag("WEBGL_DOWNLOAD_FLOAT_ENABLED",(()=>function(e){if(0===e)return!1;const t=MD(e);if(1!==e){if(oT(t,"EXT_color_buffer_float"))return uT(t);const e="EXT_color_buffer_half_float";if(oT(t,e)){const n=t.getExtension(e);return function(e,t){const n=UD(e,t),r=e.createTexture();e.bindTexture(e.TEXTURE_2D,r),e.texImage2D(e.TEXTURE_2D,0,n.internalFormatHalfFloat,1,1,0,n.textureFormatFloat,n.textureTypeHalfFloat,null);const a=e.createFramebuffer();e.bindFramebuffer(e.FRAMEBUFFER,a),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,r,0);const s=e.checkFramebufferStatus(e.FRAMEBUFFER)===e.FRAMEBUFFER_COMPLETE;return e.bindTexture(e.TEXTURE_2D,null),e.bindFramebuffer(e.FRAMEBUFFER,null),e.deleteTexture(r),e.deleteFramebuffer(a),s}(t,n)}return!1}return!!oT(t,"OES_texture_float")&&!!oT(t,"WEBGL_color_buffer_float")&&uT(t)}(hT.getNumber("WEBGL_VERSION")))),hT.registerFlag("WEBGL_FENCE_API_ENABLED",(()=>{return 2===(e=hT.getNumber("WEBGL_VERSION"))&&null!=MD(e).fenceSync;var e})),hT.registerFlag("WEBGL_SIZE_UPLOAD_UNIFORM",(()=>hT.getBool("WEBGL_RENDER_FLOAT32_ENABLED")?4:0)),hT.registerFlag("WEBGL_DELETE_TEXTURE_THRESHOLD",(()=>-1),(e=>{if(e<0&&-1!==e)throw new Error(`WEBGL_DELETE_TEXTURE_THRESHOLD must be -1 (indicating never delete) or at least 0, but got ${e}.`)})),hT.registerFlag("WEBGL_FLUSH_THRESHOLD",(()=>Va()&&hT.getBool("IS_CHROME")?1:-1),(e=>{if(e<0&&-1!==e)throw new Error(`WEBGL_FLUSH_THRESHOLD must be -1 (indicating never manual flush) or at least 0, but got ${e}.`)}));const mT="\n const float FLOAT_MAX = 1.70141184e38;\n const float FLOAT_MIN = 1.17549435e-38;\n\n lowp vec4 encode_float(highp float v) {\n if (isnan(v)) {\n return vec4(255, 255, 255, 255);\n }\n\n highp float av = abs(v);\n\n if(av < FLOAT_MIN) {\n return vec4(0.0, 0.0, 0.0, 0.0);\n } else if(v > FLOAT_MAX) {\n return vec4(0.0, 0.0, 128.0, 127.0) / 255.0;\n } else if(v < -FLOAT_MAX) {\n return vec4(0.0, 0.0, 128.0, 255.0) / 255.0;\n }\n\n highp vec4 c = vec4(0,0,0,0);\n\n highp float e = floor(log2(av));\n highp float m = exp2(fract(log2(av))) - 1.0;\n\n c[2] = floor(128.0 * m);\n m -= c[2] / 128.0;\n c[1] = floor(32768.0 * m);\n m -= c[1] / 32768.0;\n c[0] = floor(8388608.0 * m);\n\n highp float ebias = e + 127.0;\n c[3] = floor(ebias / 2.0);\n ebias -= c[3] * 2.0;\n c[2] += floor(ebias) * 128.0;\n\n c[3] += 128.0 * step(0.0, -v);\n\n return c / 255.0;\n }\n";class gT{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outPackingScheme=BD.DENSE;const t=zD(e),n=fT();this.outputShape=e,this.userCode=`\n ivec3 outCoordsFromFlatIndex(int index) {\n ${dT(["r","c","d"],e)}\n return ivec3(r, c, d);\n }\n\n void main() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2(${t[0]}, ${t[1]}));\n int index = 4 * (resTexRC.x * ${t[1]} + resTexRC.y);\n\n vec4 result = vec4(0.);\n\n for (int i=0; i<4; i++) {\n int flatIndex = index + i;\n ivec3 rc = outCoordsFromFlatIndex(flatIndex);\n result[i] = getA(rc.x, rc.y, rc.z);\n }\n\n ${n.output} = result;\n }\n `}}class yT{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outPackingScheme=BD.DENSE;const t=zD(e),n=fT();this.outputShape=e,this.userCode=`\n ivec3 outCoordsFromFlatIndex(int index) {\n ${dT(["r","c","d"],e)}\n return ivec3(r, c, d);\n }\n\n void main() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2(${t[0]}, ${t[1]}));\n int index = 4 * (resTexRC.x * ${t[1]} + resTexRC.y);\n\n vec4 result = vec4(0.);\n\n for (int i=0; i<4; i++) {\n int flatIndex = index + i;\n ivec3 rc = outCoordsFromFlatIndex(flatIndex);\n result[i] = getChannel(getA(rc.x, rc.y, rc.z), vec2(rc.y, rc.z));\n }\n\n ${n.output} = result;\n }\n `}}class bT{constructor(e){this.variableNames=["A"],this.outTexUsage=$D.DOWNLOAD;const t=fT();this.outputShape=e,this.userCode=`\n ${mT}\n\n void main() {\n float x = getAAtOutCoords();\n ${t.output} = encode_float(x);\n }\n `}}class vT{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outTexUsage=$D.DOWNLOAD;const t=fT();this.outputShape=e,this.userCode=`\n ${mT}\n\n void main() {\n ivec3 coords = getOutputCoords();\n float x = getChannel(getAAtOutCoords(), vec2(coords.y, coords.z));\n ${t.output} = encode_float(x);\n }\n `}}class wT{constructor(e,t,n=!1){this.variableNames=["A"];const r=fT(),[a,s]=t;this.outputShape=e;let i="result";n&&(i="floor(result * 255. + 0.5)"),this.userCode=`\n ${pT(e)}\n\n void main() {\n ivec3 coords = getOutputCoords();\n\n int flatIndex = getFlatIndex(coords);\n int offset = imod(flatIndex, 4);\n\n flatIndex = idiv(flatIndex, 4, 1.);\n\n int r = flatIndex / ${s};\n int c = imod(flatIndex, ${s});\n vec2 uv = (vec2(c, r) + halfCR) / vec2(${s}.0, ${a}.0);\n vec4 values = ${r.texture2D}(A, uv);\n\n float result;\n\n if(offset == 0) {\n result = values[0];\n } else if(offset == 1) {\n result = values[1];\n } else if(offset == 2) {\n result = values[2];\n } else {\n result = values[3];\n }\n\n ${r.output} = vec4(${i}, 0., 0., 0.);\n }\n `}}class _T{constructor(e,t,n=!1){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0;const r=fT(),[a,s]=t;this.outputShape=e;let i="",o="result";n&&(o="floor(result * 255. + 0.5)");for(let t=0;t<=1;t++)for(let n=0;n<=1;n++){const o=2*t+n;i+=`\n localCoords = coords;\n if(localCoords[2] + ${n} < ${e[2]}) {\n localCoords[2] += ${n};\n if(localCoords[1] + ${t} < ${e[1]}) {\n localCoords[1] += ${t};\n\n flatIndex = getFlatIndex(localCoords);\n offset = imod(flatIndex, 4);\n\n flatIndex = idiv(flatIndex, 4, 1.);\n\n r = flatIndex / ${s};\n c = imod(flatIndex, ${s});\n uv = (vec2(c, r) + halfCR) / vec2(${s}.0, ${a}.0);\n values = ${r.texture2D}(A, uv);\n\n if(offset == 0) {\n result[${o}] = values[0];\n } else if(offset == 1) {\n result[${o}] = values[1];\n } else if(offset == 2) {\n result[${o}] = values[2];\n } else {\n result[${o}] = values[3];\n }\n }\n }\n `}this.userCode=`\n ${pT(e)}\n\n void main() {\n ivec3 coords = getOutputCoords();\n\n vec4 result = vec4(0.);\n int flatIndex, r, c, offset;\n ivec3 localCoords;\n vec2 uv;\n vec4 values;\n\n ${i}\n\n ${r.output} = ${o};\n }\n `}}function xT(e,t,n,r,a,s){!function(e,t){const n=We().getNumber("WEBGL_MAX_TEXTURE_SIZE");if(e<=0||t<=0)throw new Error(`Requested texture size [${e}x${t}] is invalid.`);if(e>n||t>n)throw new Error(`Requested texture size [${e}x${t}] greater than WebGL maximum on this browser / GPU [${n}x${n}].`)}(t,n);const i=function(e){return QD(e,(()=>e.createTexture()),"Unable to create WebGLTexture.")}(e),o=e.TEXTURE_2D;return VD(e,(()=>e.bindTexture(o,i))),VD(e,(()=>e.texParameteri(o,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE))),VD(e,(()=>e.texParameteri(o,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE))),VD(e,(()=>e.texParameteri(o,e.TEXTURE_MIN_FILTER,e.NEAREST))),VD(e,(()=>e.texParameteri(o,e.TEXTURE_MAG_FILTER,e.NEAREST))),VD(e,(()=>e.texImage2D(o,0,r,t,n,0,a,s,null))),VD(e,(()=>e.bindTexture(e.TEXTURE_2D,null))),i}function kT(e){return e.internalFormatFloat}function ET(e){return e.internalFormatHalfFloat}function CT(e){return e.downloadTextureFormat}function ST(e){return e.internalFormatPackedFloat}function NT(e){return e.internalFormatPackedHalfFloat}class IT{constructor(e){this.outputTexture=null,this.program=null,this.disposed=!1,this.vertexAttrsAreBound=!1,this.itemsToPoll=[];const t=We().getNumber("WEBGL_VERSION");null!=e?(this.gl=e,function(e,t){RD[e]=t}(t,e)):this.gl=MD(t);let n="WEBGL_color_buffer_float";const r="EXT_color_buffer_half_float";if(1===We().getNumber("WEBGL_VERSION")){const e="OES_texture_float",t="OES_texture_half_float";if(this.textureFloatExtension=HD(this.gl,e),oT(this.gl,t))this.textureHalfFloatExtension=HD(this.gl,t);else if(We().get("WEBGL_FORCE_F16_TEXTURES"))throw new Error("GL context does not support half float textures, yet the environment flag WEBGL_FORCE_F16_TEXTURES is set to true.");if(this.colorBufferFloatExtension=this.gl.getExtension(n),oT(this.gl,r))this.colorBufferHalfFloatExtension=HD(this.gl,r);else if(We().get("WEBGL_FORCE_F16_TEXTURES"))throw new Error("GL context does not support color renderable half floats, yet the environment flag WEBGL_FORCE_F16_TEXTURES is set to true.")}else if(n="EXT_color_buffer_float",oT(this.gl,n))this.colorBufferFloatExtension=this.gl.getExtension(n);else{if(!oT(this.gl,r))throw new Error("GL context does not support color renderable floats");this.colorBufferHalfFloatExtension=this.gl.getExtension(r)}this.vertexBuffer=function(e){return function(e,t){const n=QD(e,(()=>e.createBuffer()),"Unable to create WebGLBuffer");return VD(e,(()=>e.bindBuffer(e.ARRAY_BUFFER,n))),VD(e,(()=>e.bufferData(e.ARRAY_BUFFER,t,e.STATIC_DRAW))),n}(e,new Float32Array([-1,1,0,0,1,-1,-1,0,0,0,1,1,0,1,1,1,-1,0,1,0]))}(this.gl),this.indexBuffer=function(e){return function(e,t){const n=QD(e,(()=>e.createBuffer()),"Unable to create WebGLBuffer");return VD(e,(()=>e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,n))),VD(e,(()=>e.bufferData(e.ELEMENT_ARRAY_BUFFER,t,e.STATIC_DRAW))),n}(e,new Uint16Array([0,1,2,2,1,3]))}(this.gl),this.framebuffer=function(e){return QD(e,(()=>e.createFramebuffer()),"Unable to create WebGLFramebuffer.")}(this.gl),this.textureConfig=UD(this.gl,this.textureHalfFloatExtension)}get debug(){return We().getBool("DEBUG")}dispose(){if(this.disposed)return;null!=this.program&&console.warn("Disposing a GPGPUContext that still has a bound WebGLProgram. This is probably a resource leak, delete the program with GPGPUContext.deleteProgram before disposing."),null!=this.outputTexture&&console.warn("Disposing a GPGPUContext that still has a bound output matrix texture. This is probably a resource leak, delete the output matrix texture with GPGPUContext.deleteMatrixTexture before disposing.");const e=this.gl;VD(e,(()=>e.finish())),VD(e,(()=>e.bindFramebuffer(e.FRAMEBUFFER,null))),VD(e,(()=>e.deleteFramebuffer(this.framebuffer))),VD(e,(()=>e.bindBuffer(e.ARRAY_BUFFER,null))),VD(e,(()=>e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null))),VD(e,(()=>e.deleteBuffer(this.indexBuffer))),this.disposed=!0}createFloat32MatrixTexture(e,t){return this.throwIfDisposed(),function(e,t,n,r){const[a,s]=LD(t,n);return xT(e,a,s,kT(r),r.textureFormatFloat,e.FLOAT)}(this.gl,e,t,this.textureConfig)}createFloat16MatrixTexture(e,t){return this.throwIfDisposed(),function(e,t,n,r){const[a,s]=LD(t,n);return xT(e,a,s,ET(r),r.textureFormatFloat,r.textureTypeHalfFloat)}(this.gl,e,t,this.textureConfig)}createUnsignedBytesMatrixTexture(e,t){return this.throwIfDisposed(),function(e,t,n,r){const[a,s]=LD(t,n);return xT(e,a,s,CT(r),e.RGBA,e.UNSIGNED_BYTE)}(this.gl,e,t,this.textureConfig)}uploadPixelDataToTexture(e,t){this.throwIfDisposed(),function(e,t,n){VD(e,(()=>e.bindTexture(e.TEXTURE_2D,t))),n.data instanceof Uint8Array?VD(e,(()=>e.texImage2D(e.TEXTURE_2D,0,e.RGBA,n.width,n.height,0,e.RGBA,e.UNSIGNED_BYTE,n.data))):VD(e,(()=>e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,n))),VD(e,(()=>e.bindTexture(e.TEXTURE_2D,null)))}(this.gl,e,t)}uploadDenseMatrixToTexture(e,t,n,r){this.throwIfDisposed(),function(e,t,n,r,a,s){let i,o,l;VD(e,(()=>e.bindTexture(e.TEXTURE_2D,t))),a instanceof Uint8Array?(i=new Uint8Array(n*r*4),o=e.UNSIGNED_BYTE,l=e.RGBA):(i=new Float32Array(n*r*4),o=e.FLOAT,l=s.internalFormatPackedFloat),i.set(a),VD(e,(()=>e.texImage2D(e.TEXTURE_2D,0,l,n,r,0,e.RGBA,o,i))),VD(e,(()=>e.bindTexture(e.TEXTURE_2D,null)))}(this.gl,e,t,n,r,this.textureConfig)}createFloat16PackedMatrixTexture(e,t){return this.throwIfDisposed(),function(e,t,n,r){const[a,s]=WD(t,n);return xT(e,a,s,NT(r),e.RGBA,r.textureTypeHalfFloat)}(this.gl,e,t,this.textureConfig)}createPackedMatrixTexture(e,t){return this.throwIfDisposed(),function(e,t,n,r){const[a,s]=WD(t,n);return xT(e,a,s,ST(r),e.RGBA,e.FLOAT)}(this.gl,e,t,this.textureConfig)}deleteMatrixTexture(e){this.throwIfDisposed(),this.outputTexture===e&&(JD(this.gl,this.framebuffer),this.outputTexture=null),VD(this.gl,(()=>this.gl.deleteTexture(e)))}downloadByteEncodedFloatMatrixFromOutputTexture(e,t,n){return this.downloadMatrixDriver(e,(()=>function(e,t,n,r){const[a,s]=LD(t,n),i=new Uint8Array(t*n*4);return VD(e,(()=>e.readPixels(0,0,a,s,r.downloadTextureFormat,e.UNSIGNED_BYTE,i))),new Float32Array(i.buffer)}(this.gl,t,n,this.textureConfig)))}downloadPackedMatrixFromBuffer(e,t,n,r,a,s){return function(e,t,n,r,a,s,i,o){const l=e,u=new Float32Array(function(e,t){const[n,r]=WD(e,t);return n*r*4}(s,i));return l.bindBuffer(l.PIXEL_PACK_BUFFER,t),l.getBufferSubData(l.PIXEL_PACK_BUFFER,0,u),l.bindBuffer(l.PIXEL_PACK_BUFFER,null),u}(this.gl,e,0,0,0,a,s,this.textureConfig)}downloadFloat32MatrixFromBuffer(e,t){return function(e,t,n){const r=e,a=new Float32Array(n);return r.bindBuffer(r.PIXEL_PACK_BUFFER,t),r.getBufferSubData(r.PIXEL_PACK_BUFFER,0,a),r.bindBuffer(r.PIXEL_PACK_BUFFER,null),a}(this.gl,e,t)}createBufferFromTexture(e,t,n){this.bindTextureToFrameBuffer(e);const r=function(e,t,n,r){const a=e.createBuffer();VD(e,(()=>e.bindBuffer(e.PIXEL_PACK_BUFFER,a)));const s=16*t*n;return VD(e,(()=>e.bufferData(e.PIXEL_PACK_BUFFER,s,e.STREAM_READ))),VD(e,(()=>e.readPixels(0,0,n,t,e.RGBA,e.FLOAT,0))),VD(e,(()=>e.bindBuffer(e.PIXEL_PACK_BUFFER,null))),a}(this.gl,t,n,this.textureConfig);return this.unbindTextureToFrameBuffer(),r}createAndWaitForFence(){const e=this.createFence(this.gl);return this.pollFence(e)}createFence(e){let t,n;if(We().getBool("WEBGL_FENCE_API_ENABLED")){const r=e,a=r.fenceSync(r.SYNC_GPU_COMMANDS_COMPLETE,0);e.flush(),n=()=>{const e=r.clientWaitSync(a,0,0);return e===r.ALREADY_SIGNALED||e===r.CONDITION_SATISFIED},t=a}else We().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0?(t=this.beginQuery(),this.endQuery(),n=()=>this.isQueryAvailable(t,We().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))):n=()=>!0;return{query:t,isFencePassed:n}}downloadMatrixFromPackedTexture(e,t,n){return this.downloadMatrixDriver(e,(()=>function(e,t,n){const r=new Float32Array(t*n*4);return VD(e,(()=>e.readPixels(0,0,n,t,e.RGBA,e.FLOAT,r))),r}(this.gl,t,n)))}createProgram(e){this.throwIfDisposed();const t=this.gl,n=function(e,t){const n=QD(e,(()=>e.createShader(e.FRAGMENT_SHADER)),"Unable to create fragment WebGLShader.");if(VD(e,(()=>e.shaderSource(n,t))),VD(e,(()=>e.compileShader(n))),!1===e.getShaderParameter(n,e.COMPILE_STATUS))throw function(e,t){const n=GD.exec(t);if(null==n)return console.log(`Couldn't parse line number in error: ${t}`),void console.log(e);const r=+n[1],a=e.split("\n"),s=a.length.toString().length+2,i=a.map(((e,t)=>ce((t+1).toString(),s)+e));let o=0;for(let e=0;ee.createShader(e.VERTEX_SHADER)),"Unable to create vertex WebGLShader.");if(VD(e,(()=>e.shaderSource(n,t))),VD(e,(()=>e.compileShader(n))),!1===e.getShaderParameter(n,e.COMPILE_STATUS))throw console.log(e.getShaderInfoLog(n)),new Error("Failed to compile vertex shader.");return n}(e,`${t.version}\n precision highp float;\n ${t.attribute} vec3 clipSpacePos;\n ${t.attribute} vec2 uv;\n ${t.varyingVs} vec2 resultUV;\n\n void main() {\n gl_Position = vec4(clipSpacePos, 1);\n resultUV = uv;\n }`)}(t));const r=function(e){return QD(e,(()=>e.createProgram()),"Unable to create WebGLProgram.")}(t);return VD(t,(()=>t.attachShader(r,this.vertexShader))),VD(t,(()=>t.attachShader(r,n))),function(e,t){if(VD(e,(()=>e.linkProgram(t))),!1===e.getProgramParameter(t,e.LINK_STATUS))throw console.log(e.getProgramInfoLog(t)),new Error("Failed to link vertex and fragment shaders.")}(t,r),this.debug&&XD(t,r),this.vertexAttrsAreBound||(this.setProgram(r),this.vertexAttrsAreBound=function(e,t,n){return VD(e,(()=>e.bindBuffer(e.ARRAY_BUFFER,n))),KD(e,t,"clipSpacePos",n,3,20,0)&&KD(e,t,"uv",n,2,20,12)}(t,this.program,this.vertexBuffer)),r}deleteProgram(e){this.throwIfDisposed(),e===this.program&&(this.program=null),null!=e&&VD(this.gl,(()=>this.gl.deleteProgram(e)))}setProgram(e){this.throwIfDisposed(),this.program=e,null!=this.program&&this.debug&&XD(this.gl,this.program),VD(this.gl,(()=>this.gl.useProgram(e)))}getUniformLocation(e,t,n=!0){return this.throwIfDisposed(),n?function(e,t,n){return QD(e,(()=>e.getUniformLocation(t,n)),'uniform "'+n+'" not present in program.')}(this.gl,e,t):function(e,t,n){return e.getUniformLocation(t,n)}(this.gl,e,t)}getAttributeLocation(e,t){return this.throwIfDisposed(),VD(this.gl,(()=>this.gl.getAttribLocation(e,t)))}getUniformLocationNoThrow(e,t){return this.throwIfDisposed(),this.gl.getUniformLocation(e,t)}setInputMatrixTexture(e,t,n){this.throwIfDisposed(),this.throwIfNoProgram(),qD(this.gl,e,t,n)}setOutputMatrixTexture(e,t,n){this.setOutputMatrixTextureDriver(e,n,t)}setOutputPackedMatrixTexture(e,t,n){this.throwIfDisposed();const[r,a]=WD(t,n);this.setOutputMatrixTextureDriver(e,r,a)}setOutputMatrixWriteRegion(e,t,n,r){this.setOutputMatrixWriteRegionDriver(n,e,r,t)}setOutputPackedMatrixWriteRegion(e,t,n,r){throw new Error("setOutputPackedMatrixWriteRegion not implemented.")}debugValidate(){null!=this.program&&XD(this.gl,this.program),ZD(this.gl)}executeProgram(){this.throwIfDisposed(),this.throwIfNoProgram();const e=this.gl;this.debug&&this.debugValidate(),VD(e,(()=>e.drawElements(e.TRIANGLES,6,e.UNSIGNED_SHORT,0)))}blockUntilAllProgramsCompleted(){this.throwIfDisposed(),VD(this.gl,(()=>this.gl.finish()))}getQueryTimerExtension(){return null==this.disjointQueryTimerExtension&&(this.disjointQueryTimerExtension=HD(this.gl,2===We().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")?"EXT_disjoint_timer_query_webgl2":"EXT_disjoint_timer_query")),this.disjointQueryTimerExtension}getQueryTimerExtensionWebGL2(){return this.getQueryTimerExtension()}getQueryTimerExtensionWebGL1(){return this.getQueryTimerExtension()}beginQuery(){if(2===We().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")){const e=this.gl,t=this.getQueryTimerExtensionWebGL2(),n=e.createQuery();return e.beginQuery(t.TIME_ELAPSED_EXT,n),n}const e=this.getQueryTimerExtensionWebGL1(),t=e.createQueryEXT();return e.beginQueryEXT(e.TIME_ELAPSED_EXT,t),t}endQuery(){if(2===We().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")){const e=this.gl,t=this.getQueryTimerExtensionWebGL2();return void e.endQuery(t.TIME_ELAPSED_EXT)}const e=this.getQueryTimerExtensionWebGL1();e.endQueryEXT(e.TIME_ELAPSED_EXT)}async waitForQueryAndGetTime(e){return await he((()=>this.disposed||this.isQueryAvailable(e,We().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")))),this.getQueryTime(e,We().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))}getQueryTime(e,t){if(0===t)return null;if(2===t){const t=this.gl;return t.getQueryParameter(e,t.QUERY_RESULT)/1e6}{const t=this.getQueryTimerExtensionWebGL1();return t.getQueryObjectEXT(e,t.QUERY_RESULT_EXT)/1e6}}isQueryAvailable(e,t){if(0===t)return!0;if(2===t){const t=this.gl,n=this.getQueryTimerExtensionWebGL2(),r=t.getQueryParameter(e,t.QUERY_RESULT_AVAILABLE);return null==this.disjoint&&(this.disjoint=this.gl.getParameter(n.GPU_DISJOINT_EXT)),r&&!this.disjoint}{const t=this.getQueryTimerExtensionWebGL1(),n=t.getQueryObjectEXT(e,t.QUERY_RESULT_AVAILABLE_EXT);return null==this.disjoint&&(this.disjoint=this.gl.getParameter(t.GPU_DISJOINT_EXT)),n&&!this.disjoint}}pollFence(e){return new Promise((t=>{this.addItemToPoll((()=>e.isFencePassed()),(()=>t()))}))}pollItems(){const e=function(e){let t=0;for(;te.isDoneFn)));for(let t=0;t<=e;++t){const{resolveFn:e}=this.itemsToPoll[t];e()}this.itemsToPoll=this.itemsToPoll.slice(e+1)}addItemToPoll(e,t){this.itemsToPoll.push({isDoneFn:e,resolveFn:t}),this.itemsToPoll.length>1||he((()=>(this.pollItems(),0===this.itemsToPoll.length)))}bindTextureToFrameBuffer(e){this.throwIfDisposed(),YD(this.gl,e,this.framebuffer),this.debug&&ZD(this.gl)}unbindTextureToFrameBuffer(){null!=this.outputTexture?(YD(this.gl,this.outputTexture,this.framebuffer),this.debug&&ZD(this.gl)):JD(this.gl,this.framebuffer)}downloadMatrixDriver(e,t){this.bindTextureToFrameBuffer(e);const n=t();return this.unbindTextureToFrameBuffer(),n}setOutputMatrixTextureDriver(e,t,n){this.throwIfDisposed();const r=this.gl;YD(r,e,this.framebuffer),this.debug&&ZD(r),this.outputTexture=e,VD(r,(()=>r.viewport(0,0,t,n))),VD(r,(()=>r.scissor(0,0,t,n)))}setOutputMatrixWriteRegionDriver(e,t,n,r){this.throwIfDisposed(),VD(this.gl,(()=>this.gl.scissor(e,t,n,r)))}throwIfDisposed(){if(this.disposed)throw new Error("Attempted to use disposed GPGPUContext.")}throwIfNoProgram(){if(null==this.program)throw new Error("No GPU program is currently set.")}}const{getBroadcastDims:AT}=g;function DT(e,t,n,r){const a=[];e.forEach((e=>{const t=re(e.shapeInfo.logicalShape);e.shapeInfo.isUniform?a.push(`uniform float ${e.name}${t>1?`[${t}]`:""};`):(a.push(`uniform sampler2D ${e.name};`),a.push(`uniform int offset${e.name};`))}));const s=a.join("\n"),i=e.map((e=>function(e,t,n=!1){let r="";r+=n?FT(e):TT(e);const a=e.shapeInfo.logicalShape,s=t.logicalShape;return a.length<=s.length&&(r+=n?function(e,t){const n=e.name,r=n.charAt(0).toUpperCase()+n.slice(1),a="get"+r+"AtOutCoords",s=e.shapeInfo.logicalShape.length,i=t.logicalShape.length,o=AT(e.shapeInfo.logicalShape,t.logicalShape),l=LT(i),u=i-s;let c;const h=["x","y","z","w","u","v"];c=0===s?"":i<2&&o.length>=1?"coords = 0;":o.map((e=>`coords.${h[e+u]} = 0;`)).join("\n");let f="";f=i<2&&s>0?"coords":e.shapeInfo.logicalShape.map(((e,t)=>`coords.${h[t+u]}`)).join(", ");let d="return outputValue;";const p=1===re(e.shapeInfo.logicalShape),m=1===re(t.logicalShape);if(1!==s||p||m){if(p&&!m)d=1===i?"\n return vec4(outputValue.x, outputValue.x, 0., 0.);\n ":"\n return vec4(outputValue.x);\n ";else if(o.length){const e=s-2,t=s-1;o.indexOf(e)>-1&&o.indexOf(t)>-1?d="return vec4(outputValue.x);":o.indexOf(e)>-1?d="return vec4(outputValue.x, outputValue.y, outputValue.x, outputValue.y);":o.indexOf(t)>-1&&(d="return vec4(outputValue.xx, outputValue.zz);")}}else d="\n return vec4(outputValue.xy, outputValue.xy);\n ";return`\n vec4 ${a}() {\n ${l} coords = getOutputCoords();\n ${c}\n vec4 outputValue = get${r}(${f});\n ${d}\n }\n `}(e,t):function(e,t){const n=e.name,r=n.charAt(0).toUpperCase()+n.slice(1),a="get"+r+"AtOutCoords",s=t.texShape,i=e.shapeInfo.texShape,o=e.shapeInfo.logicalShape.length,l=t.logicalShape.length;if(!e.shapeInfo.isUniform&&o===l&&null==e.shapeInfo.flatOffset&&se(i,s))return`\n float ${a}() {\n return sampleTexture(${n}, resultUV);\n }\n `;const u=LT(l),c=AT(e.shapeInfo.logicalShape,t.logicalShape),h=l-o;let f;const d=["x","y","z","w","u","v"];f=0===o?"":l<2&&c.length>=1?"coords = 0;":c.map((e=>`coords.${d[e+h]} = 0;`)).join("\n");let p="";return p=l<2&&o>0?"coords":e.shapeInfo.logicalShape.map(((e,t)=>`coords.${d[t+h]}`)).join(", "),`\n float ${a}() {\n ${u} coords = getOutputCoords();\n ${f}\n return get${r}(${p});\n }\n `}(e,t)),r}(e,t,r))).join("\n"),o=t.texShape,l=fT(),u=function(e){return`\n float sampleTexture(sampler2D textureSampler, vec2 uv) {\n return ${e.texture2D}(textureSampler, uv).r;\n }\n `}(l);let c,h,f=function(e){return`${e.version}\n precision highp float;\n precision highp int;\n precision highp sampler2D;\n ${e.varyingFs} vec2 resultUV;\n ${e.defineOutput}\n const vec2 halfCR = vec2(0.5, 0.5);\n\n struct ivec5\n {\n int x;\n int y;\n int z;\n int w;\n int u;\n };\n\n struct ivec6\n {\n int x;\n int y;\n int z;\n int w;\n int u;\n int v;\n };\n\n uniform float NAN;\n ${e.defineSpecialNaN}\n ${e.defineSpecialInf}\n ${e.defineRound}\n\n int imod(int x, int y) {\n return x - y * (x / y);\n }\n\n int idiv(int a, int b, float sign) {\n int res = a / b;\n int mod = imod(a, b);\n if (sign < 0. && mod != 0) {\n res -= 1;\n }\n return res;\n }\n\n //Based on the work of Dave Hoskins\n //https://www.shadertoy.com/view/4djSRW\n #define HASHSCALE1 443.8975\n float random(float seed){\n vec2 p = resultUV * seed;\n vec3 p3 = fract(vec3(p.xyx) * HASHSCALE1);\n p3 += dot(p3, p3.yzx + 19.19);\n return fract((p3.x + p3.y) * p3.z);\n }\n\n ${RT}\n ${OT}\n ${MT}\n `}(l);return t.isPacked?(c=function(e,t){switch(e.length){case 0:return"\n int getOutputCoords() {\n return 0;\n }\n ";case 1:return function(e,t){const n=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)];return 1===n[0]?`\n int getOutputCoords() {\n return 2 * int(resultUV.x * ${n[1]}.0);\n }\n `:1===n[1]?`\n int getOutputCoords() {\n return 2 * int(resultUV.y * ${n[0]}.0);\n }\n `:`\n int getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2(${n[0]}, ${n[1]}));\n return 2 * (resTexRC.x * ${n[1]} + resTexRC.y);\n }\n `}(0,t);case 2:return function(e,t){const n=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)];if(se(e,t))return`\n ivec2 getOutputCoords() {\n return 2 * ivec2(resultUV.yx * vec2(${n[0]}, ${n[1]}));\n }\n `;const r=Math.ceil(e[1]/2);return`\n ivec2 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2(${n[0]}, ${n[1]}));\n\n int index = resTexRC.x * ${n[1]} + resTexRC.y;\n int r = 2 * (index / ${r});\n int c = imod(index, ${r}) * 2;\n\n return ivec2(r, c);\n }\n `}(e,t);case 3:return function(e,t){const n=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)],r=Math.ceil(e[2]/2),a=r*Math.ceil(e[1]/2);return`\n ivec3 getOutputCoords() {\n ivec2 resTexRC = ivec2(resultUV.yx *\n vec2(${n[0]}, ${n[1]}));\n int index = resTexRC.x * ${n[1]} + resTexRC.y;\n\n int b = index / ${a};\n index -= b * ${a};\n\n int r = 2 * (index / ${r});\n int c = imod(index, ${r}) * 2;\n\n return ivec3(b, r, c);\n }\n `}(e,t);default:return function(e,t){const n=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)],r=Math.ceil(e[e.length-1]/2),a=r*Math.ceil(e[e.length-2]/2);let s=a,i="",o="b, r, c";for(let t=2;te[t])).join(", ")}function UT(e,t){if(e.length!==t.length)throw Error(`Binary was compiled with ${e.length} inputs, but was executed with ${t.length} inputs`);e.forEach(((e,n)=>{const r=e.logicalShape,a=t[n],s=a.shape;if(!se(r,s))throw Error(`Binary was compiled with different shapes than the current args. Shapes ${r} and ${s} must match`);if(e.isUniform&&a.isUniform)return;const i=e.texShape,o=a.isUniform?null:a.texData.texShape;if(!se(i,o))throw Error(`Binary was compiled with different texture shapes than the current args. Shape ${i} and ${o} must match`)}))}const{addImpl:VT,bincountImpl:jT,bincountReduceImpl:HT,ceilImpl:GT,concatImpl:XT,expImpl:KT,expm1Impl:qT,floorImpl:YT,gatherV2Impl:JT,greaterImpl:ZT,lessImpl:QT,linSpaceImpl:eF,logImpl:tF,maxImpl:nF,maximumImpl:rF,minimumImpl:aF,multiplyImpl:sF,negImpl:iF,prodImpl:oF,rangeImpl:lF,rsqrtImpl:uF,simpleAbsImpl:cF,sliceImpl:hF,sparseFillEmptyRowsImpl:fF,sparseReshapeImpl:dF,stridedSliceImpl:pF,subImpl:mF,tileImpl:gF,topKImpl:yF,transposeImpl:bF,uniqueImpl:vF}=U;function wF(e,t){return["x","y","z","w","u","v"].slice(0,t).map((t=>`${e}.${t}`))}function _F(e,t){return 1===t?[e]:wF(e,t)}class xF{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outputShape=e;const t=e.length;if(0===t)this.userCode="\n void main() {\n setOutput(vec4(getA(), 0., 0., 0.));\n }\n ";else{const n=_F("rc",t),r=LT(t),a=function(e,t,n){if(1===e)return`rc > ${t[0]}`;let r="";for(let a=e-2;a= ${t[a]}`,a= ${t};\n bool rEdge = rp1 >= ${n};\n `}(t,e[e.length-1],e[e.length-2],n),i=function(e,t){const n=e.length,r=function(e,t){const n=[];for(let r=0;r<=1;r++)for(let a=0;a<=1;a++){let s=`${0===r?"r":"rp1"}, ${0===a?"c":"cp1"}`;for(let n=2;n= ${e[0]} ? 0. : getA(rc + 1),\n 0, 0`:`getA(${r[0]}),\n cEdge ? 0. : getA(${r[1]}),\n rEdge ? 0. : getA(${r[2]}),\n rEdge || cEdge ? 0. : getA(${r[3]})`}(e,n);this.userCode=`\n void main() {\n ${r} rc = getOutputCoords();\n\n if(${a}) {\n setOutput(vec4(0));\n } else {\n ${s}\n\n setOutput(vec4(${i}));\n }\n }\n `}}}class kF{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e;let n="";for(let e=0;e<4;e++){let t="thisRC = rc;";e%2==1&&(t+="thisRC.z += 1;"),e>1&&(t+="thisRC.y += 1;"),n+=`\n ${t}\n ${e>0?"if(thisRC.y < rows && thisRC.z < cols){":""}\n int flatIndex = getFlatIndex(thisRC);\n\n ivec3 inputRC = inputCoordsFromReshapedOutCoords(flatIndex);\n vec2 inputRCInnerDims = vec2(float(inputRC.y),float(inputRC.z));\n\n result[${e}] =\n getChannel(getA(inputRC.x, inputRC.y, inputRC.z), inputRCInnerDims);\n ${e>0?"}":""}\n `}var r;this.userCode=`\n ${r=t,`\n ivec3 inputCoordsFromReshapedOutCoords(int index) {\n ${dT(["r","c","d"],r)}\n return ivec3(r, c, d);\n }\n `}\n ${pT(e)}\n\n void main() {\n ivec3 rc = getOutputCoords();\n\n vec4 result = vec4(0.);\n\n ivec3 thisRC;\n int rows = ${e[1]};\n int cols = ${e[2]};\n\n ${n}\n\n setOutput(result);\n }\n `}}class EF{constructor(e){this.gpgpu=e,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0,this.freeTextures={},this.logEnabled=!1,this.usedTextures={}}acquireTexture(e,t,n){const r=SF(t,n),a=NF(e,r,n);a in this.freeTextures||(this.freeTextures[a]=[]),a in this.usedTextures||(this.usedTextures[a]=[]);const s=CF(e,r,this.gpgpu.gl,this.gpgpu.textureConfig,n);if(this.freeTextures[a].length>0){this.numFreeTextures--,this.numUsedTextures++,this._numBytesFree-=s,this.log();const e=this.freeTextures[a].shift();return this.usedTextures[a].push(e),e}let i;return r===PD.PACKED_2X2_FLOAT32?i=this.gpgpu.createPackedMatrixTexture(e[0],e[1]):r===PD.PACKED_2X2_FLOAT16?i=this.gpgpu.createFloat16PackedMatrixTexture(e[0],e[1]):r===PD.UNPACKED_FLOAT32?i=this.gpgpu.createFloat32MatrixTexture(e[0],e[1]):r===PD.UNPACKED_FLOAT16?i=this.gpgpu.createFloat16MatrixTexture(e[0],e[1]):r===PD.PACKED_4X1_UNSIGNED_BYTE&&(i=this.gpgpu.createUnsignedBytesMatrixTexture(e[0],e[1])),this.usedTextures[a].push(i),this.numUsedTextures++,this._numBytesAllocated+=s,this.log(),i}releaseTexture(e,t,n,r){if(null==this.freeTextures)return;const a=SF(n,r),s=NF(t,a,r);s in this.freeTextures||(this.freeTextures[s]=[]);const i=CF(t,a,this.gpgpu.gl,this.gpgpu.textureConfig,r),o=We().get("WEBGL_DELETE_TEXTURE_THRESHOLD");-1!==o&&this._numBytesAllocated>o?(this.gpgpu.deleteMatrixTexture(e),this._numBytesAllocated-=i):(this.freeTextures[s].push(e),this.numFreeTextures++,this._numBytesFree+=i),this.numUsedTextures--;const l=this.usedTextures[s],u=l.indexOf(e);if(u<0)throw new Error("Cannot release a texture that was never provided by this texture manager");l.splice(u,1),this.log()}log(){if(!this.logEnabled)return;const e=this.numFreeTextures+this.numUsedTextures;console.log("Free/Used",`${this.numFreeTextures} / ${this.numUsedTextures}`,`(${e})`);const t=this._numBytesFree/this._numBytesAllocated;console.log(`Bytes allocated: ${this._numBytesAllocated}`),console.log(`Bytes unused: ${this._numBytesFree} (${Math.round(100*t)}%)`)}get numBytesAllocated(){return this._numBytesAllocated}get numBytesFree(){return this._numBytesFree}getNumUsedTextures(){return this.numUsedTextures}getNumFreeTextures(){return this.numFreeTextures}dispose(){if(null!=this.freeTextures){for(const e in this.freeTextures)this.freeTextures[e].forEach((e=>{this.gpgpu.deleteMatrixTexture(e)}));for(const e in this.usedTextures)this.usedTextures[e].forEach((e=>{this.gpgpu.deleteMatrixTexture(e)}));this.freeTextures=null,this.usedTextures=null,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0}}}function CF(e,t,n,r,a){const s=function(e,t){switch(e){case PD.PACKED_2X2_FLOAT32:return ST(t);case PD.PACKED_2X2_FLOAT16:return NT(t);case PD.UNPACKED_FLOAT32:return kT(t);case PD.UNPACKED_FLOAT16:return ET(t);case PD.PACKED_4X1_UNSIGNED_BYTE:return CT(t);default:throw new Error(`Unknown physical texture type ${e}`)}}(t,r);let i;if(a){const[t,n]=WD(e[0],e[1]);i=t*n}else{const[t,n]=LD(e[0],e[1]);i=t*n}return i*function(e,t){const n=e;if(t===n.R32F)return 4;if(t===n.R16F)return 2;if(t===n.RGBA32F)return 16;if(t===e.RGBA)return 16;if(t===n.RGBA16F)return 8;throw new Error(`Unknown internal format ${t}`)}(n,s)}function SF(e,t){if(e===$D.UPLOAD)return PD.PACKED_2X2_FLOAT32;if(e===$D.RENDER||null==e)return function(e){return We().getBool("WEBGL_RENDER_FLOAT32_ENABLED")?e?PD.PACKED_2X2_FLOAT32:PD.UNPACKED_FLOAT32:e?PD.PACKED_2X2_FLOAT16:PD.UNPACKED_FLOAT16}(t);if(e===$D.DOWNLOAD||e===$D.PIXELS)return PD.PACKED_4X1_UNSIGNED_BYTE;throw new Error(`Unknown logical texture type ${e}`)}function NF(e,t,n){return`${e[0]}_${e[1]}_${t}_${n}`}class IF{constructor(e,t){this.variableNames=["A"],this.outputShape=e,this.userCode=`\n float unaryOperation(float x) {\n ${t}\n }\n\n void main() {\n float x = getAAtOutCoords();\n float y = unaryOperation(x);\n\n setOutput(y);\n }\n `}}const AF="return abs(x);",DF="return x;";class TF{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.userCode=`\n vec4 unaryOperation(vec4 x) {\n ${t}\n }\n\n void main() {\n vec4 x = getAAtOutCoords();\n vec4 y = unaryOperation(x);\n\n setOutput(y);\n }\n `}}class FF{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outputShape=e;const t=e.length,n=_F("rc",t),r=LT(t),a=function(e,t){if(1===e)return"rc";let n="";for(let r=0;rt.push(e)))}const t=this.texData.get(e),{values:n,shape:r,slice:a,dtype:s,complexTensorInfos:i,isPacked:o}=t;if(null!=a){let t;t=o?new TF(r,DF):new IF(r,DF);const n=this.runWebGLProgram(t,[{dataId:e,shape:r,dtype:s}],s),a=this.read(n.dataId);return this.disposeIntermediateTensorInfo(n),a}if(null!=n)return this.convertAndCacheOnCPU(e);if(!We().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")&&2===We().getNumber("WEBGL_VERSION"))throw new Error("tensor.data() with WEBGL_DOWNLOAD_FLOAT_ENABLED=false and WEBGL_VERSION=2 not yet supported.");let l,u,c=null;if("complex64"!==s&&We().get("WEBGL_BUFFER_SUPPORTED")){l=this.decode(e);const t=this.texData.get(l.dataId);c=this.gpgpu.createBufferFromTexture(t.texture,...zD(r))}if(this.pendingRead.set(e,[]),"complex64"!==s&&await this.gpgpu.createAndWaitForFence(),"complex64"===s){const e=await Promise.all([this.read(i.real.dataId),this.read(i.imag.dataId)]);u=pd(e[0],e[1])}else if(null==c)u=this.getValuesFromTexture(e);else{const e=re(r);u=this.gpgpu.downloadFloat32MatrixFromBuffer(c,e)}null!=l&&this.disposeIntermediateTensorInfo(l);const h=this.convertAndCacheOnCPU(e,u),f=this.pendingRead.get(e);return this.pendingRead.delete(e),f.forEach((e=>e(h))),this.pendingDisposal.has(e)&&(this.pendingDisposal.delete(e),this.disposeData(e)&&co().removeDataId(e,this),this.pendingDeletes--),h}bufferSync(e){const t=this.readSync(e.dataId);let n=t;if("string"===e.dtype)try{n=t.map((e=>la(e)))}catch(e){throw new Error("Failed to decode encoded string bytes into utf-8")}return Xs(e.shape,e.dtype,n)}checkNumericalProblems(e){if(null!=e)for(let t=0;t0}async time(e){const t=this.activeTimers,n=[];let r=!1;null==this.programTimersStack?(this.programTimersStack=n,r=!0):this.activeTimers.push(n),this.activeTimers=n,e();const a=ne(this.activeTimers.map((e=>e.query))).filter((e=>null!=e)),s=ne(this.activeTimers.map((e=>e.name))).filter((e=>null!=e));this.activeTimers=t,r&&(this.programTimersStack=null);const i={uploadWaitMs:this.uploadWaitMs,downloadWaitMs:this.downloadWaitMs,kernelMs:null,wallMs:null};if(We().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0){const e=await Promise.all(a);i.kernelMs=Y(e),i.getExtraProfileInfo=()=>e.map(((e,t)=>({name:s[t],ms:e}))).map((e=>`${e.name}: ${e.ms}`)).join(", ")}else i.kernelMs={error:"WebGL query timers are not supported in this environment."};return this.uploadWaitMs=0,this.downloadWaitMs=0,i}memory(){return{unreliable:!1,numBytesInGPU:this.numBytesInGPU,numBytesInGPUAllocated:this.textureManager.numBytesAllocated,numBytesInGPUFree:this.textureManager.numBytesFree}}startTimer(){return We().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?this.gpgpu.beginQuery():{startMs:sa(),endMs:null}}endTimer(e){return We().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?(this.gpgpu.endQuery(),e):(e.endMs=sa(),e)}async getQueryTime(e){if(We().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0)return this.gpgpu.waitForQueryAndGetTime(e);const t=e;return t.endMs-t.startMs}disposeData(e,t=!1){if(this.pendingDisposal.has(e))return!1;if(!this.texData.has(e))return!0;if(t?this.texData.get(e).refCount=0:this.texData.get(e).refCount--,!t&&this.texData.get(e).refCount>0)return!1;if(this.pendingRead.has(e))return this.pendingDisposal.add(e),this.pendingDeletes++,!1;this.releaseGPUData(e);const{complexTensorInfos:n}=this.texData.get(e);return null!=n&&(this.disposeData(n.real.dataId,t),this.disposeData(n.imag.dataId,t)),this.texData.delete(e),!0}releaseGPUData(e){const{texture:t,dtype:n,texShape:r,usage:a,isPacked:s,slice:i}=this.texData.get(e),o=i&&i.origDataId||e,l=this.dataRefCount.get(o);l>1?this.dataRefCount.set(o,l-1):(this.dataRefCount.delete(o),null!=t&&(this.numBytesInGPU-=this.computeBytes(r,n),this.textureManager.releaseTexture(t,r,a,s)));const u=this.texData.get(e);u.texture=null,u.texShape=null,u.isPacked=!1,u.slice=null}getTexture(e){return this.uploadToGPU(e),this.texData.get(e).texture}getDataInfo(e){return this.texData.get(e)}shouldExecuteOnCPU(e,t=128){return We().getBool("WEBGL_CPU_FORWARD")&&e.every((e=>null==this.texData.get(e.dataId).texture&&re(e.shape)0&&ke(n[0])){const a=n.map((e=>oa(e)));r=this.write(a,e,t)}else r=this.write(n,e,t);return this.texData.get(r).usage=null,{dataId:r,shape:e,dtype:t}}makeOutput(e,t,n){const{dataId:r}=this.makeTensorInfo(e,t,n);return co().makeTensorFromDataId(r,e,t,this)}unpackTensor(e){const t=new FF(e.shape);return this.runWebGLProgram(t,[e],e.dtype)}packTensor(e){const t=new xF(e.shape);return this.runWebGLProgram(t,[e],e.dtype,null,!0)}packedReshape(e,t){const n=[eT(e.shape),...tT(e.shape)],r={dtype:e.dtype,shape:n,dataId:e.dataId},a=[eT(t),...tT(t)],s=new kF(a,n),i=this.runWebGLProgram(s,[r],e.dtype,null,!0);return{dataId:i.dataId,shape:t,dtype:i.dtype}}decode(e){const t=this.texData.get(e),{isPacked:n,shape:r,dtype:a}=t,s=nT(r);let i;return i=n?new yT(s):new gT(s),{dtype:a,shape:r,dataId:this.runWebGLProgram(i,[{shape:s,dtype:a,dataId:e}],a,null,!0).dataId}}runWebGLProgram(e,t,n,r,a=!1){const s=this.makeTensorInfo(e.outputShape,n),i=this.texData.get(s.dataId);if(e.packedOutput&&(i.isPacked=!0),e.outPackingScheme===BD.DENSE){const t=zD(e.outputShape);i.texShape=t.map((e=>2*e))}if(null!=e.outTexUsage&&(i.usage=e.outTexUsage),0===re(s.shape))return i.values=me(s.dtype,0),s;const o=[],l=t.map((t=>{if("complex64"===t.dtype)throw new Error("GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.");let n=this.texData.get(t.dataId);if(null==n.texture){if(!e.packedInputs&&re(t.shape)<=We().getNumber("WEBGL_SIZE_UPLOAD_UNIFORM"))return{shape:t.shape,texData:null,isUniform:!0,uniformValues:n.values};e.packedInputs&&(n.isPacked=!0,n.shape=t.shape)}else if(!!n.isPacked!=!!e.packedInputs)t=n.isPacked?this.unpackTensor(t):this.packTensor(t),o.push(t),n=this.texData.get(t.dataId);else if(n.isPacked&&!aT(n.shape,t.shape)){const e=t,r=t.shape;t.shape=n.shape,t=this.packedReshape(t,r),o.push(t),n=this.texData.get(t.dataId),e.shape=r}return this.uploadToGPU(t.dataId),{shape:t.shape,texData:n,isUniform:!1}}));this.uploadToGPU(s.dataId);const u={shape:s.shape,texData:i,isUniform:!1},c=function(e,t,n){let r="";t.concat(n).forEach((e=>{const t=null!=e.texData&&null!=e.texData.slice&&e.texData.slice.flatOffset>0,n=e.isUniform?"uniform":e.texData.texShape;r+=`${e.shape}_${n}_${t}`}));const a=e.userCode;let s=e.constructor.name;return s+="_"+r+"_"+a,s}(e,l,u),h=this.getAndSaveBinary(c,(()=>function(e,t,n,r){const a=t.userCode,s=n.map(((e,n)=>{const r={logicalShape:e.shape,texShape:e.isUniform?null:e.texData.texShape,isUniform:e.isUniform,isPacked:!e.isUniform&&e.texData.isPacked,flatOffset:null};return null!=e.texData&&null!=e.texData.slice&&e.texData.slice.flatOffset>0&&(r.flatOffset=e.texData.slice.flatOffset),{name:t.variableNames[n],shapeInfo:r}})),i=s.map((e=>e.shapeInfo)),o={logicalShape:r.shape,texShape:r.texData.texShape,isUniform:!1,isPacked:r.texData.isPacked,flatOffset:null},l=DT(s,o,a,t.packedInputs),u=e.createProgram(l);let c=null;const h=e.getUniformLocation(u,"NAN",!1);1===We().getNumber("WEBGL_VERSION")&&(c=e.getUniformLocation(u,"INFINITY",!1));const f={};for(let n=0;n{const a=t.program.variableNames[r],s=t.uniformLocations[a],i=t.uniformLocations[`offset${a}`];if(null!=s)if(n.isUniform)if(re(n.shape)<2)e.gl.uniform1f(s,n.uniformValues[0]);else{let t=n.uniformValues;t instanceof Float32Array||(t=new Float32Array(t)),e.gl.uniform1fv(s,t)}else null!=n.texData.slice&&null!=i&&e.gl.uniform1i(i,n.texData.slice.flatOffset),e.setInputMatrixTexture(n.texData.texture,s,r)})),null!=a&&a(e,t.webGLProgram),e.executeProgram()}(this.gpgpu,h,l,u,r),o.forEach((e=>this.disposeIntermediateTensorInfo(e))),f&&(d=this.endTimer(d),this.activeTimers.push({name:e.constructor.name,query:this.getQueryTime(d)}));const p=We().get("WEBGL_FLUSH_THRESHOLD");if(p>0){const e=sa();e-this.lastGlFlushTime>p&&(this.gpgpu.gl.flush(),this.lastGlFlushTime=e)}if(!We().getBool("WEBGL_LAZILY_UNPACK")&&i.isPacked&&!1===a){const e=this.unpackTensor(s);return this.disposeIntermediateTensorInfo(s),e}return s}compileAndRun(e,t,n,r,a=!1){return n=n||t[0].dtype,this.runWebGLProgram(e,t,n,r,a)}getAndSaveBinary(e,t){return e in this.binaryCache||(this.binaryCache[e]=t()),this.binaryCache[e]}getTextureManager(){return this.textureManager}dispose(){this.disposed||(We().getBool("IS_TEST")||Object.keys(this.binaryCache).forEach((e=>{this.gpgpu.deleteProgram(this.binaryCache[e].webGLProgram),delete this.binaryCache[e]})),this.textureManager.dispose(),null!=this.canvas&&"undefined"!=typeof HTMLCanvasElement&&this.canvas instanceof HTMLCanvasElement?this.canvas.remove():this.canvas=null,this.gpgpuCreatedLocally&&(this.gpgpu.program=null,this.gpgpu.dispose()),this.disposed=!0)}floatPrecision(){return null==this.floatPrecisionValue&&(this.floatPrecisionValue=po((()=>{if(!We().get("WEBGL_RENDER_FLOAT32_ENABLED")){const e=We().getBool("DEBUG");We().set("DEBUG",!1);const t=this.abs(Wo(1e-8)).dataSync()[0];if(We().set("DEBUG",e),t>0)return 32}return 16}))),this.floatPrecisionValue}epsilon(){return 32===this.floatPrecision()?1e-7:1e-4}uploadToGPU(e){const t=this.texData.get(e),{shape:n,dtype:r,values:a,texture:s,usage:i,isPacked:o}=t;if(null!=s)return;const l=null!=this.activeTimers;let u;l&&(u=sa());let c=t.texShape;if(null==c&&(c=function(e,t=!1){let n=We().getNumber("WEBGL_MAX_TEXTURE_SIZE");if(t&&(n*=2,1===(e=e.map(((t,n)=>n>=e.length-2?q(e[n]):e[n]))).length&&(e=[2,e[0]])),2!==e.length){const t=pe(e);e=t.newShape}let r=re(e);if(e.length<=1&&r<=n)return[1,r];if(2===e.length&&e[0]<=n&&e[1]<=n)return e;if(3===e.length&&e[0]*e[1]<=n&&e[2]<=n)return[e[0]*e[1],e[2]];if(3===e.length&&e[0]<=n&&e[1]*e[2]<=n)return[e[0],e[1]*e[2]];if(4===e.length&&e[0]*e[1]*e[2]<=n&&e[3]<=n)return[e[0]*e[1]*e[2],e[3]];if(4===e.length&&e[0]<=n&&e[1]*e[2]*e[3]<=n)return[e[0],e[1]*e[2]*e[3]];if(t){const t=eT(e);let n=2,a=2;return e.length&&([n,a]=tT(e)),r=t*(n/2)*(a/2),le(r).map((e=>2*e))}return le(r)}(n,o),t.texShape=c),null!=a){const e=nT(n);let s,i=c[1],h=c[0];const f=a instanceof Uint8Array;o?([i,h]=WD(c[0],c[1]),s=new _T(e,[h,i],f)):s=new wT(e,[h,i],f);const d=this.makeTensorInfo([h,i],r);this.texData.get(d.dataId).usage=f?$D.PIXELS:$D.UPLOAD,this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(d.dataId),i,h,a);const p=!0,m=this.runWebGLProgram(s,[d],r,null,p),g=this.texData.get(m.dataId);t.texture=g.texture,t.texShape=g.texShape,t.isPacked=g.isPacked,t.usage=g.usage,this.disposeIntermediateTensorInfo(d),this.texData.delete(m.dataId),t.values=null,l&&(this.uploadWaitMs+=sa()-u)}else{const e=this.acquireTexture(c,i,r,o);t.texture=e}}convertAndCacheOnCPU(e,t){const n=this.texData.get(e),{dtype:r}=n;return this.releaseGPUData(e),null!=t&&(n.values=function(e,t){if("float32"===t||"complex64"===t)return e;if("int32"===t||"bool"===t){const n="int32"===t?new Int32Array(e.length):new Uint8Array(e.length);for(let t=0;t1024*this.numMBBeforeWarning*1024){const e=(this.numBytesInGPU/1024/1024).toFixed(2);this.warnedAboutMemory=!0,console.warn(`High memory usage in GPU: ${e} MB, most likely due to a memory leak`)}return this.textureManager.acquireTexture(e,t,r)}computeBytes(e,t){return e[0]*e[1]*_e(t)}}MF.nextDataId=0,ja()&&Eo("webgl",(()=>new MF),2);class BF{constructor(e,t,n){this.variableNames=["A","B"],this.outputShape=Zo(t,n),this.userCode=`\n float binaryOperation(float a, float b) {\n ${e}\n }\n\n void main() {\n float a = getAAtOutCoords();\n float b = getBAtOutCoords();\n setOutput(binaryOperation(a, b));\n }\n `}}class $F{constructor(e,t,n,r=!1){this.variableNames=["A","B"],this.supportsBroadcasting=!0,this.packedInputs=!0,this.packedOutput=!0,this.outputShape=Zo(t,n);const a=this.outputShape.length;let s="";if(r)if(0===a||1===re(this.outputShape))s="\n result.y = 0.;\n result.z = 0.;\n result.w = 0.;\n ";else if(s=`\n ${LT(a)} coords = getOutputCoords();\n `,1===a)s+=`\n result.y = (coords + 1) >= ${this.outputShape[0]} ? 0. : result.y;\n result.z = 0.;\n result.w = 0.;\n `;else{const e=_F("coords",a);s+=`\n bool nextRowOutOfBounds =\n (${e[a-2]} + 1) >= ${this.outputShape[a-2]};\n bool nextColOutOfBounds =\n (${e[a-1]} + 1) >= ${this.outputShape[a-1]};\n result.y = nextColOutOfBounds ? 0. : result.y;\n result.z = nextRowOutOfBounds ? 0. : result.z;\n result.w = nextColOutOfBounds || nextRowOutOfBounds ? 0. : result.w;\n `}this.userCode=`\n vec4 binaryOperation(vec4 a, vec4 b) {\n ${e}\n }\n\n void main() {\n vec4 a = getAAtOutCoords();\n vec4 b = getBAtOutCoords();\n\n vec4 result = binaryOperation(a, b);\n ${s}\n\n setOutput(result);\n }\n `}}function PF(e){const{inputs:t,backend:n}=e,{x:r}=t;return n.incRef(r.dataId),{dataId:r.dataId,shape:r.shape,dtype:r.dtype}}const LF={kernelName:an,backendName:"webgl",kernelFunc:PF};function zF(e){const{inputs:t,backend:n}=e,{real:r,imag:a}=t,s=n.makeTensorInfo(r.shape,"complex64"),i=n.texData.get(s.dataId),o=PF({inputs:{x:r},backend:n}),l=PF({inputs:{x:a},backend:n});return i.complexTensorInfos={real:o,imag:l},s}const WF={kernelName:yt,backendName:"webgl",kernelFunc:zF},UF="return (a < 0.) ? b * a : a;",VF="\n vec4 aLessThanZero = vec4(lessThan(a, vec4(0.)));\n return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);\n",jF={kernelName:hn,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{alpha:s}=r,i=n.makeTensorInfo([],"float32",ra(s,"float32")),o=We().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new $F(VF,a.shape,i.shape):new BF(UF,a.shape,i.shape),l=n.runWebGLProgram(o,[a,i],a.dtype);return n.disposeIntermediateTensorInfo(i),l}},HF="return (a < 0.) ? b * a : a;",GF="\n vec4 aLessThanZero = vec4(lessThan(a, vec4(0.)));\n return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);\n",XF={kernelName:Kn,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n}=e,{x:r,alpha:a}=t,s=We().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new $F(GF,r.shape,a.shape):new BF(HF,r.shape,a.shape);return n.runWebGLProgram(s,[r,a],r.dtype)}};function KF({opSnippet:e,packedOpSnippet:t,cpuKernelImpl:n,dtype:r}){return({inputs:a,backend:s})=>{const{x:i}=a,o=s,l=r||i.dtype;if(o.shouldExecuteOnCPU([i])&&null!=n){const e=o.texData.get(i.dataId),t=n(e.values,l);return o.makeTensorInfo(i.shape,l,t)}let u;return u=We().getBool("WEBGL_PACK_UNARY_OPERATIONS")&&null!=t?new TF(i.shape,t):new IF(i.shape,e),o.runWebGLProgram(u,[i],l)}}function qF({opSnippet:e,packedOpSnippet:t,checkOutOfBounds:n=!1,supportsComplex:r=!1,cpuKernelImpl:a,dtype:s}){return({inputs:i,backend:o})=>{const{a:l,b:u}=i,c=o;if(r&&"complex64"===l.dtype){const t=c.texData.get(l.dataId),n=c.texData.get(u.dataId),[r,a]=[[t.complexTensorInfos.real,n.complexTensorInfos.real],[t.complexTensorInfos.imag,n.complexTensorInfos.imag]].map((t=>{const[n,r]=t,a={dataId:n.dataId,dtype:n.dtype,shape:l.shape},s={dataId:r.dataId,dtype:r.dtype,shape:u.shape},i=new BF(e,l.shape,u.shape);return c.runWebGLProgram(i,[a,s],Da(n.dtype,r.dtype))})),s=zF({inputs:{real:r,imag:a},backend:c});return c.disposeIntermediateTensorInfo(r),c.disposeIntermediateTensorInfo(a),s}const h=s||Da(l.dtype,u.dtype);if(c.shouldExecuteOnCPU([l,u])&&null!=a){const e=c.texData.get(l.dataId),t=c.texData.get(u.dataId),[n,r]=a(l.shape,u.shape,e.values,t.values,h),s=c.makeTensorInfo(r,h);return c.texData.get(s.dataId).values=n,s}let f;return f=We().getBool("WEBGL_PACK_BINARY_OPERATIONS")&&null!=t?new $F(t,l.shape,u.shape,n):new BF(e,l.shape,u.shape),c.runWebGLProgram(f,[l,u],h)}}function YF(e,t=!1){if("linear"===e)return"return x;";if("relu"===e)return t?"\n vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0)));\n bvec4 isNaN = isnan(x);\n\n result.r = isNaN.r ? x.r : result.r;\n result.g = isNaN.g ? x.g : result.g;\n result.b = isNaN.b ? x.b : result.b;\n result.a = isNaN.a ? x.a : result.a;\n\n return result;\n":"if (isnan(x)) return x;\n return (x < 0.0) ? 0.0 : x;\n";if("elu"===e)return t?"\n vec4 result;\n\n result.r = (x.r >= 0.0) ? x.r : (exp(x.r) - 1.0);\n result.g = (x.g >= 0.0) ? x.g : (exp(x.g) - 1.0);\n result.b = (x.b >= 0.0) ? x.b : (exp(x.b) - 1.0);\n result.a = (x.a >= 0.0) ? x.a : (exp(x.a) - 1.0);\n\n return result;\n":"return (x >= 0.0) ? x : (exp(x) - 1.0);";if("relu6"===e)return t?"\n vec4 result = min(x, vec4(6.)) * vec4(greaterThanEqual(x, vec4(0.0)));\n bvec4 isNaN = isnan(x);\n\n result.r = isNaN.r ? x.r : result.r;\n result.g = isNaN.g ? x.g : result.g;\n result.b = isNaN.b ? x.b : result.b;\n result.a = isNaN.a ? x.a : result.a;\n\n return result;\n":"if (isnan(x)) return x;\n return (x < 0.0) ? 0.0 : min(6.0, x);\n";if("prelu"===e)return t?GF:HF;if("leakyrelu"===e)return t?VF:UF;if("sigmoid"===e)return"return 1.0 / (1.0 + exp(-1.0 * x));";throw new Error(`Activation ${e} has not been implemented for the WebGL backend.`)}class JF{constructor(e,t,n,r=!1,a=!1,s=!1,i=null,o=!1,l=!1){this.variableNames=["matrixA","matrixB"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=n;const u=r?e[1]:e[2],c=Math.ceil(u/2),h=r?"i * 2, rc.y":"rc.y, i * 2",f=a?"rc.z, i * 2":"i * 2, rc.z",d=r?["a.xxyy","a.zzww"]:["a.xxzz","a.yyww"],p=a?["b.xzxz","b.ywyw"]:["b.xyxy","b.zwzw"];let m="",g="";i&&(m=o?`vec4 activation(vec4 a) {\n vec4 b = getPreluActivationWeightsAtOutCoords();\n ${i}\n }`:l?`vec4 activation(vec4 a) {\n vec4 b = getLeakyreluAlphaAtOutCoords();\n ${i}\n }`:`vec4 activation(vec4 x) {\n ${i}\n }`,g="result = activation(result);");const y=s?"result += getBiasAtOutCoords();":"";s&&this.variableNames.push("bias"),o&&this.variableNames.push("preluActivationWeights"),l&&this.variableNames.push("leakyreluAlpha");let b="rc.x",v="rc.x";e[0]`The new shape (${l}) has ${u} elements and the old shape (${a.shape}) has ${o} elements. The new shape and old shape must have the same number of elements.`));const c=i.texData.get(a.dataId);return!c.isPacked||aT(a.shape,l)||null!==c.texture&&aT(c.shape,l)?(i.incRef(a.dataId),{dataId:a.dataId,shape:l,dtype:a.dtype}):function(e,t,n){const r=[eT(e.shape),...tT(e.shape)],a={dtype:e.dtype,shape:r,dataId:e.dataId},s=[eT(t),...tT(t)],i=new kF(s,r),o=n.runWebGLProgram(i,[a],e.dtype,null,!0);return{dataId:o.dataId,shape:t,dtype:o.dtype}}(a,l,i)}const rR={kernelName:er,backendName:"webgl",kernelFunc:nR};class aR{constructor(e,t){this.variableNames=["x"];const{windowSize:n,batchSize:r,inSize:a,outSize:s}=e;this.outputShape=[r,s];const i=4*Math.floor(n/4),o=n%4;let l="sumValue += dot(values, ones);";if(null!=t){const e=1/t;l=`sumValue += dot(values * ${ie(e)?e.toPrecision(2):e}, ones);`}let u="";a%n>0&&(u=`\n if (inIdx < 0 || inIdx >= ${a}) {\n return 0.0;\n }\n `),this.userCode=`\n const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n float getValue(int batch, int inIdx) {\n ${u}\n return getX(batch, inIdx);\n }\n\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int outIdx = coords[1];\n int inOffset = outIdx * ${n};\n\n float sumValue = 0.0;\n\n for (int i = 0; i < ${i}; i += 4) {\n int inIdx = inOffset + i;\n vec4 values = vec4(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n getValue(batch, inIdx + 3)\n );\n\n ${l}\n }\n\n int inIdx = inOffset + ${i};\n if (${1===o}) {\n vec4 values = vec4(getValue(batch, inIdx), 0.0, 0.0, 0.0);\n\n ${l}\n } else if (${2===o}) {\n vec4 values = vec4(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1), 0.0, 0.0);\n\n ${l}\n } else if (${3===o}) {\n vec4 values = vec4(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2), 0.0);\n\n ${l}\n }\n setOutput(sumValue);\n }\n `}}class sR{constructor(e,t){this.variableNames=["x"];const{windowSize:n,batchSize:r,inSize:a,outSize:s}=e;this.outputShape=[r,s];let i="0.0",o="";"prod"===t?i="1.0":"min"===t?(i="1.0 / 1e-20",o="min"):"max"===t&&(i="-1.0 / 1e-20",o="max");let l=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;"sum"===t?l="sumValue":"prod"===t?l="prodValue":"all"===t?l="allValue":"any"===t&&(l="anyValue");const u=4*Math.floor(n/4),c=n%4;let h=`\n if (${"sum"===t}) {\n sumValue += dot(values, ones);\n } else if (${"prod"===t}) {\n vec2 tmp = vec2(values[0], values[1]) * vec2(values[2], values[3]);\n prodValue *= tmp[0] * tmp[1];\n } else {\n minMaxValue = ${o}(values, minMaxValue);\n }\n `,f="vec4";"all"===t?(i="1.0",h="\n bool reducedAllValue = all(values);\n float floatedReducedAllValue = float(reducedAllValue);\n allValue = float(allValue >= 1.0 && floatedReducedAllValue >= 1.0);\n ",f="bvec4"):"any"===t&&(i="0.0",h="\n bool reducedAnyValue = any(values);\n float floatedReducedAnyValue = float(reducedAnyValue);\n anyValue = float(anyValue >= 1.0 || floatedReducedAnyValue >= 1.0);\n ",f="bvec4");let d="";a%n>0&&(d=`\n if (inIdx < 0 || inIdx >= ${a}) {\n return initializationValue;\n }\n `),this.userCode=`\n const float initializationValue = ${i};\n const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n float getValue(int batch, int inIdx) {\n ${d}\n return getX(batch, inIdx);\n }\n\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int outIdx = coords[1];\n int inOffset = outIdx * ${n};\n\n vec4 minMaxValue = vec4(${i});\n float prodValue = 1.0;\n float sumValue = 0.0;\n float allValue = 1.0;\n float anyValue = 0.0;\n\n for (int i = 0; i < ${u}; i += 4) {\n int inIdx = inOffset + i;\n ${f} values = ${f}(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n getValue(batch, inIdx + 3)\n );\n\n ${h}\n }\n\n int inIdx = inOffset + ${u};\n if (${1===c}) {\n ${f} values = ${f}(\n getValue(batch, inIdx),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n ${h}\n } else if (${2===c}) {\n ${f} values = ${f}(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n initializationValue,\n initializationValue\n );\n\n ${h}\n } else if (${3===c}) {\n ${f} values = ${f}(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n initializationValue\n );\n\n ${h}\n }\n setOutput(${l});\n }\n `}}function iR(e,t,n,r){const a=function(e){const t=[];for(;0===t.length||1!==t[t.length-1].outSize;){const n=t.length?t[t.length-1].outSize:e[1],r=Jf(n);t.push({inSize:n,windowSize:r,outSize:Math.ceil(n/r)})}return t}(e.shape);let s=e;for(let i=0;i6)throw Error(`Transpose for rank ${t} is not yet supported`);const n=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u","resRC.v"],r=new Array(t);for(let t=0;t6)throw Error(`Packed transpose for rank ${this.rank} is not yet supported.`);const r=LT(this.rank),a=wF("rc",this.rank),s=new Array(this.rank);for(let e=0;e=2&&c>=2&&(y===b||1===y||1===b),(()=>`Error in matMul: the input batch dimensions must either be the same or at least one input batch dimension must be 1. Got input batch dimensions of (${m}) and (${g}).`));const v=(y>b?e.shape.slice(0,-2):t.shape.slice(0,-2)).concat([d,p]);Q(h===f,(()=>`Error in matMul: inner shapes (${h}) and (${f}) of Tensors with shapes ${e.shape} and ${t.shape} and transposeA=${n} and transposeB=${r} must match.`));const w=n?[y,h,d]:[y,d,h],_=r?[b,p,f]:[b,f,p],x=nR({inputs:{x:e},backend:a,attrs:{shape:w}}),k=nR({inputs:{x:t},backend:a,attrs:{shape:_}}),E=[x,k],C=Math.max(y,b),S=n?x.shape[1]:x.shape[2],N=null!=s,I=null!=i,A="leakyrelu"===l,D=null!=l?YF(l,!0):null;let T;if((1===d||1===p)&&S>1e3&&!1===(N||I||A||null!=D)){let e=x,t=k;n&&(e=fR({inputs:{x},backend:a,attrs:{perm:[0,2,1]}}),E.push(e)),r&&(t=fR({inputs:{x:k},backend:a,attrs:{perm:[0,2,1]}}),E.push(t));const s=1===p;let i=e;1!==p&&(i=nR({inputs:{x:e},backend:a,attrs:{shape:[C,S,1]}}),E.push(i));const o=1===p?2:1;let l=t;s&&(l=nR({inputs:{x:t},backend:a,attrs:{shape:[C,1,S]}}),E.push(l));const u=eR({inputs:{a:i,b:l},backend:a});T=cR({inputs:{x:u},backend:a,attrs:{axis:o,keepDims:!0}}),E.push(u)}else{const l=Da(e.dtype,t.dtype),u=new JF(w,_,[C,d,p],n,r,N,D,I,A),c=[x,k];if(null!=s&&c.push(s),I&&c.push(i),A){const e=a.makeTensorInfo([],"float32",ra(o,"float32"));c.push(e),E.push(e)}T=a.runWebGLProgram(u,c,l)}const F=nR({inputs:{x:T},backend:a,attrs:{shape:v}});E.push(T);for(const e of E)a.disposeIntermediateTensorInfo(e);return F}const mR={kernelName:Vr,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{a,b:s,bias:i,preluActivationWeights:o}=t,{transposeA:l,transposeB:u,activation:c,leakyreluAlpha:h}=r;return pR({a,b:s,transposeA:l,transposeB:u,backend:n,bias:i,preluActivationWeights:o,leakyreluAlpha:h,activation:c})}},gR="return abs(x);",yR={kernelName:Ge,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n}=e,{x:r}=t;if(n.shouldExecuteOnCPU([r])&&"complex64"!==r.dtype){const e=n.texData.get(r.dataId),t=cF(e.values);return n.makeTensorInfo(r.shape,r.dtype,t)}let a;return a=We().getBool("WEBGL_PACK_UNARY_OPERATIONS")?new TF(r.shape,gR):new IF(r.shape,gR),n.runWebGLProgram(a,[r],r.dtype)}},bR=KF({opSnippet:"if (isnan(x)) return x;\n if (abs(x) > 1.) {\n return NAN;\n }\n return acos(x);\n"}),vR={kernelName:Xe,backendName:"webgl",kernelFunc:bR},wR=KF({opSnippet:"if (isnan(x)) return x;\n if (x < 1.0) return NAN;\nreturn log(x + sqrt(x * x - 1.0));"}),_R={kernelName:Ke,backendName:"webgl",kernelFunc:wR},xR="return a + b;",kR=qF({opSnippet:xR,packedOpSnippet:xR,supportsComplex:!0,cpuKernelImpl:VT}),ER={kernelName:qe,backendName:"webgl",kernelFunc:kR};class CR{constructor(e,t){this.outputShape=[],this.outputShape=e,this.variableNames=t.map(((e,t)=>`T${t}`));const n=[];this.variableNames.forEach((e=>{n.push(`float v${e} = get${e}AtOutCoords();`)}));const r=this.variableNames.map((e=>`v${e}`)).join(" + ");this.userCode=`\n void main() {\n ${n.join("\n ")}\n\n float result = ${r};\n setOutput(result);\n }\n `}}class SR{constructor(e,t){this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.variableNames=t.map(((e,t)=>`T${t}`));const n=[];this.variableNames.forEach((e=>{n.push(`vec4 v${e} = get${e}AtOutCoords();`)}));const r=this.variableNames.map((e=>`v${e}`)).join(" + ");this.userCode=`\n void main() {\n ${n.join("\n ")}\n\n vec4 result = ${r};\n setOutput(result);\n }\n `}}const NR={kernelName:Ye,backendName:"webgl",kernelFunc:function e(t){const{inputs:n,backend:r}=t,a=n;if(1===a.length)return PF({inputs:{x:a[0]},backend:r});if(a.length>We().get("WEBGL_MAX_TEXTURES_IN_SHADER")){const t=Math.floor(a.length/2),n=e({inputs:a.slice(0,t),backend:r}),s=e({inputs:a.slice(t),backend:r});return e({inputs:[n,s],backend:r})}const s=a.map((e=>e.dtype)).reduce(((e,t)=>Da(e,t))),i=a.map((e=>e.shape)),o=We().getBool("WEBGL_PACK")?new SR(a[0].shape,i):new CR(a[0].shape,i);return r.runWebGLProgram(o,a,s)}},IR={kernelName:Je,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,keepDims:i}=r,o=a.shape.length,l=de(s,a.shape);let u=l;const c=qu(u,o);let h=a;null!=c&&(h=fR({inputs:{x:a},backend:n,attrs:{perm:c}}),u=Ju(u.length,o)),Ku("all",u,o);const[f,d]=Gu(h.shape,u),p=nR({inputs:{x:h},backend:n,attrs:{shape:[-1,re(d)]}}),m=iR(p,p.dtype,"all",n);let g;return g=nR(i?{inputs:{x:m},backend:n,attrs:{shape:Xu(f,l)}}:{inputs:{x:m},backend:n,attrs:{shape:f}}),n.disposeIntermediateTensorInfo(p),n.disposeIntermediateTensorInfo(m),null!=c&&n.disposeIntermediateTensorInfo(h),g}},AR={kernelName:Ze,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,keepDims:i}=r,o=a.shape.length,l=de(s,a.shape);let u=l;const c=qu(u,o);let h=a;null!=c&&(h=fR({inputs:{x:a},backend:n,attrs:{perm:c}}),u=Ju(u.length,o)),Ku("any",u,o);const[f,d]=Gu(h.shape,u),p=nR({inputs:{x:h},backend:n,attrs:{shape:[-1,re(d)]}}),m=iR(p,p.dtype,"any",n);let g;return g=nR(i?{inputs:{x:m},backend:n,attrs:{shape:Xu(f,l)}}:{inputs:{x:m},backend:n,attrs:{shape:f}}),n.disposeIntermediateTensorInfo(p),n.disposeIntermediateTensorInfo(m),null!=c&&n.disposeIntermediateTensorInfo(h),g}};class DR{constructor(e,t,n){this.variableNames=["A"];const{windowSize:r,batchSize:a,outSize:s}=e;n||this.variableNames.push("bestIndicesA"),this.outputShape=[a,s];const i="max"===t?">":"<",o=n?"inOffset + i;":"round(getBestIndicesA(batch, inOffset + i));";this.userCode=`\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int outIdx = coords[1];\n int inOffset = outIdx * ${r};\n\n int bestIndex = inOffset;\n float bestValue = getA(batch, bestIndex);\n\n for (int i = 0; i < ${r}; i++) {\n int inIdx = ${o};\n float candidate = getA(batch, inIdx);\n if (candidate ${i} bestValue) {\n bestValue = candidate;\n bestIndex = inIdx;\n }\n }\n setOutput(float(bestIndex));\n }\n `}}class TR{constructor(e,t,n,r){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,Q(e.length>2,(()=>`Packed arg${n.charAt(0).toUpperCase()+n.slice(1)} supports only inputs with rank above 2.`));const a=e[e.length-1],s=Math.ceil(a/t);this.outputShape=e.slice(0,-1),s>1&&this.outputShape.push(s),r||this.variableNames.push("bestIndicesA");const i=this.outputShape,o=i.length,l=LT(o),u=_F("coords",o);let c,h;if(1===s){h=o+1;const e=LT(h);c=`\n ${e} sourceLocR = ${e}(${u.join()}, 0);\n ++${u[o-1]};\n ${e} sourceLocG = ${e}(${u.join()}, 0);\n ++${u[o-2]};\n ${e} sourceLocA = ${e}(${u.join()}, 0);\n --${u[o-1]};\n ${e} sourceLocB = ${e}(${u.join()}, 0);\n --${u[o-2]};`}else h=o,c=`\n ${l} sourceLocR = coords;\n ++${u[o-1]};\n ${l} sourceLocG = coords;\n ++${u[o-2]};\n ${l} sourceLocA = coords;\n --${u[o-1]};\n ${l} sourceLocB = coords;\n --${u[o-2]};`;const f=["x","y","z","w","u","v"].slice(0,h),d="."+f[h-1],p=f.map((e=>"int "+e)),m=_F("sourceLocR",h-1).concat("inIdx.r"),g=_F("sourceLocG",h-1).concat("inIdx.g"),y=_F("sourceLocB",h-1).concat("inIdx.b"),b=_F("sourceLocA",h-1).concat("inIdx.a"),v="max"===n?"greaterThan":"lessThan",w=r?"":`\n inIdx = round(vec4(getBestIndicesAChannel(${m.join()}),\n getBestIndicesAChannel(${g.join()}),\n getBestIndicesAChannel(${y.join()}),\n getBestIndicesAChannel(${b.join()})));`,_=`vec4(\n getAChannel(${m.join()}),\n hasNextCol ? getAChannel(${g.join()}) : 0.,\n hasNextRow ? getAChannel(${y.join()}) : 0.,\n hasNextRow && hasNextCol ? getAChannel(${b.join()}) : 0.)`,x=r?"":`\n float getBestIndicesAChannel(${p.join()}) {\n return getChannel(getBestIndicesA(${f.join()}),\n vec2(${f.slice(-2).join()}));\n }`;this.userCode=`\n float getAChannel(${p.join()}) {\n return getChannel(getA(${f.join()}),\n vec2(${f.slice(-2).join()}));\n }\n ${x}\n void main() {\n ${l} coords = getOutputCoords();\n bool hasNextCol = ${u[o-1]} < ${i[o-1]-1};\n bool hasNextRow = ${u[o-2]} < ${i[o-2]-1};\n ${c}\n ivec4 srcIdx = ivec4(sourceLocR${d}, sourceLocG${d},\n sourceLocB${d}, sourceLocA${d}) * ${t};\n ivec4 inIdx = srcIdx;\n vec4 bestIndex = vec4(inIdx);\n vec4 bestValue = ${_};\n\n for (int i = 0; i < ${t}; i++) {\n inIdx = srcIdx;\n ${w}\n vec4 candidate = ${_};\n bvec4 nan = isnan(candidate);\n bvec4 replace = bvec4(\n vec4(${v}(candidate, bestValue)) * (vec4(1.0) - vec4(nan)));\n\n bestValue = vec4(replace.x ? candidate.x : bestValue.x,\n replace.y ? candidate.y : bestValue.y,\n replace.z ? candidate.z : bestValue.z,\n replace.w ? candidate.w : bestValue.w);\n bestIndex = mix(bestIndex, vec4(inIdx), vec4(replace));\n srcIdx++;\n }\n setOutput(bestIndex);\n }\n `}}function FR(e,t,n,r=null){let a=t.shape[0],s=t.shape[1];null!=r&&(a=r.shape[0],s=r.shape[1]);const i=Jf(s),o={windowSize:i,inSize:s,batchSize:a,outSize:Math.ceil(s/i)},l=new DR(o,n,null==r),u=[t];null!=r&&u.push(r);const c=e.runWebGLProgram(l,u,"int32");if(1===c.shape[1])return c;const h=FR(e,t,n,c);return e.disposeIntermediateTensorInfo(c),h}function RR(e,t,n,r=null){const a=null!=r?r.shape:t.shape,s=Jf(a[a.length-1]),i=new TR(a,s,n,null==r),o=null==r?[t]:[t,r],l=e.runWebGLProgram(i,o,"int32");if(l.shape.length===t.shape.length){const r=RR(e,t,n,l);return e.disposeIntermediateTensorInfo(l),r}return l}function OR(e,t,n,r){const a=[n];if(Ku("arg"+r.charAt(0).toUpperCase()+r.slice(1),a,t.shape.length),!We().getBool("WEBGL_PACK_REDUCE")||t.shape.length<=2){const n=[],[s,i]=Gu(t.shape,a),o=re(i),l=nR({inputs:{x:t},backend:e,attrs:{shape:[-1,o]}});n.push(l);const u=FR(e,l,r);n.push(u);const c=nR({inputs:{x:u},backend:e,attrs:{shape:s}});return n.forEach((t=>e.disposeIntermediateTensorInfo(t))),c}return RR(e,t,r)}const MR={kernelName:Qe,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s}=r;let i=de(s,a.shape);const o=qu(i,a.shape.length);let l=a;const u=[];null!=o&&(l=fR({inputs:{x:a},backend:n,attrs:{perm:o}}),u.push(l),i=Ju(i.length,l.shape.length)),Ku("argMax",[i[0]],l.shape.length);const c=OR(n,l,i[0],"max");return u.forEach((e=>n.disposeIntermediateTensorInfo(e))),c}},BR={kernelName:et,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s}=r;let i=de(s,a.shape);const o=qu(i,a.shape.length);let l=a;const u=[];null!=o&&(l=fR({inputs:{x:a},backend:n,attrs:{perm:o}}),u.push(l),i=Ju(i.length,l.shape.length)),Ku("argMin",[i[0]],l.shape.length);const c=OR(n,l,i[0],"min");return u.forEach((e=>n.disposeIntermediateTensorInfo(e))),c}},$R=KF({opSnippet:"if (isnan(x)) return x;\n if (abs(x) > 1.) {\n return NAN;\n }\n return asin(x);\n"}),PR={kernelName:tt,backendName:"webgl",kernelFunc:$R},LR=KF({opSnippet:"if (isnan(x)) return x;return log(x + sqrt(x * x + 1.0));"}),zR={kernelName:nt,backendName:"webgl",kernelFunc:LR},WR=KF({opSnippet:"if (isnan(x)) return x;\n return atan(x);\n"}),UR={kernelName:rt,backendName:"webgl",kernelFunc:WR},VR=qF({opSnippet:"\n if (isnan(a)) return a;\n if (isnan(b)) return b;\n\n return atan(a, b);\n",packedOpSnippet:"\n vec4 result = atan(a, b);\n vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0));\n \n result.r = isNaN.r > 0. ? NAN : result.r;\n result.g = isNaN.g > 0. ? NAN : result.g;\n result.b = isNaN.b > 0. ? NAN : result.b;\n result.a = isNaN.a > 0. ? NAN : result.a;\n\n return result;\n"}),jR={kernelName:st,backendName:"webgl",kernelFunc:VR},HR=KF({opSnippet:"if (isnan(x)) return x;\n if ((x < -1.0) || (x > 1.0)) return NAN;\nreturn (log(1.0 + x) - log(1.0 - x)) / 2.0;"}),GR={kernelName:at,backendName:"webgl",kernelFunc:HR};class XR{constructor(e,t,n,r=!1,a=!1){if(this.variableNames=["x"],"avg"===t&&n)throw new Error("Cannot compute positions for average pool.");const s=e.filterWidth,i=e.strideHeight,o=e.strideWidth,l=e.dilationHeight,u=e.dilationWidth,c=e.effectiveFilterHeight,h=e.effectiveFilterWidth,f=e.padInfo.top,d=e.padInfo.left;this.outputShape=e.outShape;const p="avg"===t,m=`((batch * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + d`,g=`(xR * ${e.inWidth} + xC) * ${e.inChannels} + d`;let y="0.0";if(p||(y="-1.0 / 1e-20"),n){const t=">=";return void(this.userCode=`\n const ivec2 strides = ivec2(${i}, ${o});\n const ivec2 pads = ivec2(${f}, ${d});\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d = coords[3];\n\n ivec2 xRCCorner = coords.yz * strides - pads;\n int xRCorner = xRCCorner.x;\n int xCCorner = xRCCorner.y;\n\n // max/min x(?, ?, d) to get y(yR, yC, d).\n // ? = to be determined\n float minMaxValue = 0.0;\n float minMaxValueFound = 0.0;\n int minMaxPosition = 0;\n float avgValue = 0.0;\n\n for (int wR = 0; wR < ${c};\n wR += ${l}) {\n int xR = xRCorner + wR;\n\n if (xR < 0 || xR >= ${e.inHeight}) {\n continue;\n }\n\n for (int wC = 0; wC < ${h};\n wC += ${u}) {\n int xC = xCCorner + wC;\n\n if (xC < 0 || xC >= ${e.inWidth}) {\n continue;\n }\n\n float value = getX(batch, xR, xC, d);\n\n // If a min / max value has already been found, use it. If not,\n // use the current value.\n float currMinMaxValue = mix(\n value, minMaxValue, minMaxValueFound);\n if (value ${t} currMinMaxValue) {\n minMaxValue = value;\n minMaxValueFound = 1.0;\n minMaxPosition = ${r?a?m:g:`wR * ${h} + wC`};\n }\n }\n }\n setOutput(float(minMaxPosition));\n }\n `)}let b=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;"avg"===t&&(b="avgValue / count");const v=4*Math.floor(s/4),w=s%4,_=`\n if (${p}) {\n avgValue += dot(values, ones);\n } else {\n minMaxValue = max(values, minMaxValue);\n }\n `;this.userCode=`\n const ivec2 strides = ivec2(${i}, ${o});\n const ivec2 pads = ivec2(${f}, ${d});\n const float initializationValue = ${y};\n const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n float count = 0.0;\n\n float getValue(int batch, int xR, int xC, int d) {\n if (xC < 0 || xC >= ${e.inWidth}) {\n return initializationValue;\n }\n count += 1.0;\n return getX(batch, xR, xC, d);\n }\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d = coords[3];\n\n ivec2 xRCCorner = coords.yz * strides - pads;\n int xRCorner = xRCCorner.x;\n int xCCorner = xRCCorner.y;\n\n // max/min x(?, ?, d) to get y(yR, yC, d).\n // ? = to be determined\n vec4 minMaxValue = vec4(${y});\n float avgValue = 0.0;\n count = 0.0;\n\n for (int wR = 0; wR < ${c};\n wR += ${l}) {\n int xR = xRCorner + wR;\n\n if (xR < 0 || xR >= ${e.inHeight}) {\n continue;\n }\n\n for (int wC = 0; wC < ${v}; wC += 4) {\n int xC = xCCorner + wC * ${u};\n\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n getValue(batch, xR, xC + ${u}, d),\n getValue(batch, xR, xC + 2 * ${u}, d),\n getValue(batch, xR, xC + 3 * ${u}, d)\n );\n\n ${_}\n }\n\n int xC = xCCorner + ${v};\n if (${1===w}) {\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n ${_}\n } else if (${2===w}) {\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n getValue(batch, xR, xC + ${u}, d),\n initializationValue,\n initializationValue\n );\n\n ${_}\n } else if (${3===w}) {\n vec4 values = vec4(\n getValue(batch, xR, xC, d),\n getValue(batch, xR, xC + ${u}, d),\n getValue(batch, xR, xC + 2 * ${u}, d),\n initializationValue\n );\n\n ${_}\n }\n }\n setOutput(${b});\n }\n `}}class KR{constructor(e,t,n,r=!1,a=!1){if(this.variableNames=["x"],"avg"===t&&n)throw new Error("Cannot compute positions for average pool.");const s=e.filterWidth,i=e.strideDepth,o=e.strideHeight,l=e.strideWidth,u=e.dilationDepth,c=e.dilationHeight,h=e.dilationWidth,f=e.effectiveFilterDepth,d=e.effectiveFilterHeight,p=e.effectiveFilterWidth,m=e.padInfo.front,g=e.padInfo.top,y=e.padInfo.left;this.outputShape=e.outShape;const b="avg"===t;let v="0.0";if(b||(v="-1.0 / 1e-20"),n){const t=">=";return void(this.userCode=`\n const ivec3 strides =\n ivec3(${i}, ${o}, ${l});\n const ivec3 pads = ivec3(${m}, ${g}, ${y});\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int ch = coords.u;\n\n ivec3 xCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;\n int xDCorner = xCorner.x;\n int xRCorner = xCorner.y;\n int xCCorner = xCorner.z;\n\n // max/min x(?, ?, ?, ch) to get y(yD, yR, yC, ch).\n // ? = to be determined\n float minMaxValue = 0.0;\n float minMaxValueFound = 0.0;\n int minMaxPosition = 0;\n\n for (int wD = 0; wD < ${f};\n wD += ${u}) {\n int xD = xDCorner + wD;\n\n if (xD < 0 || xD >= ${e.inDepth}) {\n continue;\n }\n\n for (int wR = 0; wR < ${d};\n wR += ${c}) {\n int xR = xRCorner + wR;\n\n if (xR < 0 || xR >= ${e.inHeight}) {\n continue;\n }\n\n for (int wC = 0; wC < ${p};\n wC += ${h}) {\n int xC = xCCorner + wC;\n\n if (xC < 0 || xC >= ${e.inWidth}) {\n continue;\n }\n\n float value = getX(batch, xD, xR, xC, ch);\n\n // If a min / max value has already been found, use it. If not,\n // use the current value.\n float currMinMaxValue = mix(\n value, minMaxValue, minMaxValueFound);\n if (value ${t} currMinMaxValue) {\n minMaxValue = value;\n minMaxValueFound = 1.0;\n minMaxPosition = ${r?a?`(((batch * ${e.inDepth} + xD) * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + ch`:`((xD * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + ch`:`wD * ${d} * ${p} +\n wR * ${p} + wC`};\n }\n }\n }\n }\n setOutput(float(minMaxPosition));\n }\n `)}let w=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;"avg"===t&&(w="avgValue / count");const _=4*Math.floor(s/4),x=s%4,k=`\n if (${b}) {\n avgValue += dot(values, ones);\n } else {\n minMaxValue = max(values, minMaxValue);\n }\n `;this.userCode=`\n const ivec3 strides =\n ivec3(${i}, ${o}, ${l});\n const ivec3 pads = ivec3(${m}, ${g}, ${y});\n const float initializationValue = ${v};\n const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n float count = 0.0;\n\n float getValue(int batch, int xD, int xR, int xC, int ch) {\n if (xC < 0 || xC >= ${e.inWidth}) {\n return initializationValue;\n }\n count += 1.0;\n return getX(batch, xD, xR, xC, ch);\n }\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int ch = coords.u;\n\n ivec3 xCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;\n int xDCorner = xCorner.x;\n int xRCorner = xCorner.y;\n int xCCorner = xCorner.z;\n\n // max/min x(?, ?, ?, d) to get y(yD, yR, yC, ch).\n // ? = to be determined\n vec4 minMaxValue = vec4(${v});\n float avgValue = 0.0;\n count = 0.0;\n\n for (int wD = 0; wD < ${f};\n wD += ${u}) {\n int xD = xDCorner + wD;\n\n if (xD < 0 || xD >= ${e.inDepth}) {\n continue;\n }\n\n for (int wR = 0; wR < ${d};\n wR += ${c}) {\n int xR = xRCorner + wR;\n\n if (xR < 0 || xR >= ${e.inHeight}) {\n continue;\n }\n\n for (int wC = 0; wC < ${_}; wC += 4) {\n int xC = xCCorner + wC * ${h};\n\n vec4 values = vec4(\n getValue(batch, xD, xR, xC, ch),\n getValue(batch, xD, xR, xC + ${h}, ch),\n getValue(batch, xD, xR, xC + 2 * ${h}, ch),\n getValue(batch, xD, xR, xC + 3 * ${h}, ch)\n );\n\n ${k}\n }\n\n int xC = xCCorner + ${_};\n if (${1===x}) {\n vec4 values = vec4(\n getValue(batch, xD, xR, xC, ch),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n ${k}\n } else if (${2===x}) {\n vec4 values = vec4(\n getValue(batch, xD, xR, xC, ch),\n getValue(batch, xD, xR, xC + ${h}, ch),\n initializationValue,\n initializationValue\n );\n\n ${k}\n } else if (${3===x}) {\n vec4 values = vec4(\n getValue(batch, xD, xR, xC, ch),\n getValue(batch, xD, xR, xC + ${h}, ch),\n getValue(batch, xD, xR, xC + 2 * ${h}, ch),\n initializationValue\n );\n\n ${k}\n }\n }\n setOutput(${w});\n }\n }\n `}}const qR={kernelName:it,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{x:a}=t;cT(a,"avgPool");const{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=r;Q(Nl(i,1),(()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${i} and dilations '1'`));const u=yl(a.shape,s,i,1,o,l);if(1===u.filterWidth&&1===u.filterHeight&&se(u.inShape,u.outShape))return PF({inputs:{x:a},backend:n});const c=new XR(u,"avg",!1);return n.runWebGLProgram(c,[a],"float32")}},YR={kernelName:lt,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l,dataFormat:u}=r,c=bl(a.shape,s,i,[1,1,1],o,l,u),h=new KR(c,"avg",!1);return n.runWebGLProgram(h,[a],"float32")}};class JR{constructor(e){this.variableNames=["dy"],this.outputShape=e.inShape;const t=e.filterHeight,n=e.filterWidth,r=e.strideHeight,a=e.strideWidth,s=e.dilationHeight,i=e.dilationWidth,o=e.effectiveFilterHeight,l=e.effectiveFilterWidth,u=o-1-e.padInfo.top,c=l-1-e.padInfo.left,h=1/(t*n);this.userCode=`\n const ivec2 pads = ivec2(${u}, ${c});\n const float avgMultiplier = float(${h});\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n\n ivec2 dyRCCorner = coords.yz - pads;\n int dyRCorner = dyRCCorner.x;\n int dyCCorner = dyRCCorner.y;\n\n // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n for (int wR = 0; wR < ${o};\n wR += ${s}) {\n float dyR = float(dyRCorner + wR) / ${r}.0;\n\n if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n for (int wC = 0; wC < ${l};\n wC+= ${i}) {\n float dyC = float(dyCCorner + wC) / ${a}.0;\n\n if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n float dyValue = getDy(b, idyR, idyC, d);\n\n dotProd += dyValue * avgMultiplier;\n }\n }\n setOutput(dotProd);\n }\n `}}class ZR{constructor(e){this.variableNames=["dy"],this.outputShape=e.inShape;const t=e.filterDepth,n=e.filterHeight,r=e.filterWidth,a=e.strideDepth,s=e.strideHeight,i=e.strideWidth,o=e.dilationDepth,l=e.dilationHeight,u=e.dilationWidth,c=e.effectiveFilterDepth,h=e.effectiveFilterHeight,f=e.effectiveFilterWidth,d=c-1-e.padInfo.front,p=h-1-e.padInfo.top,m=f-1-e.padInfo.left,g=1/(t*n*r);this.userCode=`\n const ivec3 pads = ivec3(${d}, ${p}, ${m});\n const float avgMultiplier = float(${g});\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int ch = coords.u;\n\n ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;\n int dyDCorner = dyCorner.x;\n int dyRCorner = dyCorner.y;\n int dyCCorner = dyCorner.z;\n\n // Convolve dy(?, ?, ?, d) with pos mask(:, :, :, ch) to get\n // dx(xD, xR, xC, ch).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n\n for (int wD = 0; wD < ${c};\n wD += ${o}) {\n float dyD = float(dyDCorner + wD) / ${a}.0;\n\n if (dyD < 0.0 || dyD >= ${e.outDepth}.0 || fract(dyD) > 0.0) {\n continue;\n }\n int idyD = int(dyD);\n\n for (int wR = 0; wR < ${h};\n wR += ${l}) {\n float dyR = float(dyRCorner + wR) / ${s}.0;\n\n if (dyR < 0.0 || dyR >= ${e.outHeight}.0 ||\n fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n for (int wC = 0; wC < ${f};\n wC += ${u}) {\n float dyC = float(dyCCorner + wC) / ${i}.0;\n\n if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n float dyValue = getDy(batch, idyD, idyR, idyC, ch);\n\n dotProd += dyValue * avgMultiplier;\n }\n }\n }\n setOutput(dotProd);\n }\n `}}const QR={kernelName:ut,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{dy:a,input:s}=t,i=s,{filterSize:o,strides:l,pad:u,dimRoundingMode:c}=r,h=bl(i.shape,o,l,[1,1,1],u,c),f=new ZR(h);return n.runWebGLProgram(f,[a],i.dtype)}},eO={kernelName:ot,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{dy:a,input:s}=t,i=s;cT([a,s],"avgPoolGrad");const{filterSize:o,strides:l,pad:u}=r,c=yl(i.shape,o,l,1,u),h=new JR(c);return n.runWebGLProgram(h,[a],i.dtype)}},tO={kernelName:ct,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{a,b:s}=t,{transposeA:i,transposeB:o}=r;return pR({a,b:s,transposeA:i,transposeB:o,backend:n})}};class nO{constructor(e,t,n,r,a,s){this.outputShape=[],this.variableNames=["x","mean","variance"],Zo(e,t),Zo(e,n);let i="0.0";null!=r&&(Zo(e,r),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");let o="1.0";null!=a&&(Zo(e,a),this.variableNames.push("scale"),o="getScaleAtOutCoords()"),this.outputShape=e,this.userCode=`\n void main() {\n float x = getXAtOutCoords();\n float mean = getMeanAtOutCoords();\n float variance = getVarianceAtOutCoords();\n float offset = ${i};\n float scale = ${o};\n float inv = scale * inversesqrt(variance + float(${s}));\n setOutput(dot(vec3(x, -mean, offset), vec3(inv, inv, 1)));\n }\n `}}class rO{constructor(e,t,n,r,a,s){this.packedInputs=!0,this.packedOutput=!0,this.variableNames=["x","mean","variance"],Zo(e,t),Zo(e,n);let i="vec4(0.0)";null!=r&&(Zo(e,r),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");let o="vec4(1.0)";null!=a&&(Zo(e,a),this.variableNames.push("scale"),o="getScaleAtOutCoords()"),this.outputShape=e,this.userCode=`\n void main() {\n vec4 offset = ${i};\n vec4 scale = ${o};\n\n vec4 x = getXAtOutCoords();\n vec4 mean = getMeanAtOutCoords();\n vec4 variance = getVarianceAtOutCoords();\n\n vec4 inv = scale * inversesqrt(variance + vec4(${s}));\n\n setOutput((x - mean) * inv + offset);\n }\n `}}const aO={kernelName:Qt,backendName:"webgl",kernelFunc:({inputs:e,backend:t,attrs:n})=>{const{x:r,mean:a,variance:s,offset:i,scale:o}=e;Q(a.shape.length===s.shape.length,(()=>"Batch normalization gradient requires mean and variance to have equal ranks.")),Q(null==i||a.shape.length===i.shape.length,(()=>"Batch normalization gradient requires mean and offset to have equal ranks.")),Q(null==o||a.shape.length===o.shape.length,(()=>"Batch normalization gradient requires mean and scale to have equal ranks."));let{varianceEpsilon:l}=n;null==l&&(l=.001);const u=[r,a,s];let c=null;null!=i&&(c=i.shape,u.push(i));let h=null;null!=o&&(h=o.shape,u.push(o));const f=We().getBool("WEBGL_PACK_NORMALIZATION")?new rO(r.shape,a.shape,s.shape,c,h,l):new nO(r.shape,a.shape,s.shape,c,h,l);return t.runWebGLProgram(f,u,u[0].dtype)}};class sO{constructor(e){this.variableNames=["source"],this.outputShape=e,this.rank=e.length;const t=LT(this.rank),n=`uniform int start[${this.rank}];`,r=function(e){if(1===e)return"sourceLoc";if(e<=6)return iO.slice(0,e).map((e=>"sourceLoc."+e)).join(",");throw Error(`Slicing for rank ${e} is not yet supported`)}(this.rank);let a;a=`\n ${t} sourceLoc;\n ${t} coords = getOutputCoords();\n ${e.map(((e,t)=>`sourceLoc.${iO[t]} = start[${t}] + coords.${iO[t]};`)).join("\n")}\n `,this.userCode=`\n ${n}\n void main() {\n ${a}\n setOutput(getSource(${r}));\n }\n `}getCustomSetupFunc(e){if(e.length!==this.rank)throw Error(`The rank (${this.rank}) of the program must match the length of start (${e.length})`);return(t,n)=>{null==this.startLoc&&(this.startLoc=t.getUniformLocationNoThrow(n,"start"),null==this.startLoc)||t.gl.uniform1iv(this.startLoc,e)}}}const iO=["x","y","z","w","u","v"];class oO{constructor(e){this.variableNames=["source"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.rank=e.length;const t=LT(this.rank),n=_F("coords",this.rank),r=_F("sourceLoc",this.rank),a=1===this.rank?"sourceLoc":`vec2(${r.slice(-2).join()})`,s=`getChannel(getSource(${r.join()}), ${a})`,i=`\n result.x = ${s};\n if (++${n[this.rank-1]} < ${e[this.rank-1]}) {\n ++${r[this.rank-1]};\n result.y = ${s};\n --${r[this.rank-1]};\n }\n `,o=1===this.rank?"":`\n --${n[this.rank-1]};\n if (++${n[this.rank-2]} < ${e[this.rank-2]}) {\n ++${r[this.rank-2]};\n result.z = ${s};\n if (++${n[this.rank-1]} < ${e[this.rank-1]}) {\n ++${r[this.rank-1]};\n result.w = ${s};\n }\n }\n `,l=this.rank<=4?`sourceLoc = coords +\n ${t}(${e.map(((e,t)=>`start[${t}]`)).join()});`:e.map(((e,t)=>`${r[t]} = ${n[t]} + start[${t}];`)).join("\n");this.userCode=`\n uniform int start[${this.rank}];\n void main() {\n ${t} coords = getOutputCoords();\n ${t} sourceLoc;\n ${l}\n vec4 result = vec4(0.);\n ${i}\n ${o}\n setOutput(result);\n }\n `}getCustomSetupFunc(e){if(e.length!==this.rank)throw Error(`The rank (${this.rank}) of the program must match the length of start (${e.length})`);return(t,n)=>{null==this.startLoc&&(this.startLoc=t.getUniformLocationNoThrow(n,"start"),null==this.startLoc)||t.gl.uniform1iv(this.startLoc,e)}}}function lO(e){const{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{begin:s,size:i}=r,[o,l]=Ui(a,s,i);if(Ii(a,o,l),0===re(l))return n.makeTensorInfo(l,a.dtype,[]);if(n.shouldExecuteOnCPU([a])||"string"===a.dtype){const e=n.texData.get(a.dataId),t=hF(e.values,o,l,a.shape,a.dtype);return n.makeTensorInfo(l,a.dtype,t)}const{isPacked:u}=n.texData.get(a.dataId),c=zi(a.shape,o,l);if(u||!c){const e=We().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new oO(l):new sO(l),t=e.getCustomSetupFunc(o);return n.runWebGLProgram(e,[a],a.dtype,t)}return n.uploadToGPU(a.dataId),function(e,t,n,r){const a=r.texData.get(e.dataId),s=r.makeTensorInfo(n,e.dtype),i=r.texData.get(s.dataId);Object.assign(i,a),i.refCount=1,i.shape=n,i.dtype=e.dtype;let o=Wi(t,Ae(e.shape));a.slice&&(o+=a.slice.flatOffset),i.slice={flatOffset:o,origDataId:a.slice&&a.slice.origDataId||e.dataId};const l=r.dataRefCount.get(i.slice.origDataId)||1;return r.dataRefCount.set(i.slice.origDataId,l+1),s}(a,o,l,n)}const uO={kernelName:fr,backendName:"webgl",kernelFunc:lO},cO={kernelName:ht,backendName:"webgl",kernelFunc:e=>{const{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{blockShape:s,crops:i}=r;Q(a.shape.length<=4,(()=>"batchToSpaceND for rank > 4 with a WebGL backend not implemented yet"));const o=s.reduce(((e,t)=>e*t)),l=Qf(a.shape,s,o),u=ed(l.length,s.length),c=td(a.shape,s,o),h=nd(i,s.length),f=rd(c,i,s.length),d=[],p=nR({inputs:{x:a},backend:n,attrs:{shape:l}}),m=fR({inputs:{x:p},backend:n,attrs:{perm:u}}),g=nR({inputs:{x:m},backend:n,attrs:{shape:c}}),y=lO({inputs:{x:g},backend:n,attrs:{begin:h,size:f}});return d.push(p),d.push(m),d.push(g),d.forEach((e=>n.disposeIntermediateTensorInfo(e))),y}},hO={kernelName:ft,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{x:a,weights:s}=t,{size:i}=r,o=n.readSync(a.dataId),l=n.readSync(s.dataId),u=jT(o,l,s.dtype,s.shape,i);return n.makeTensorInfo([i],s.dtype,u)}},fO=qF({opSnippet:"return float(a != b);",dtype:"bool"}),dO={kernelName:Pn,backendName:"webgl",kernelFunc:fO};function pO(e){const{inputs:t,backend:n}=e,{input:r}=t;return PF({inputs:{x:n.texData.get(r.dataId).complexTensorInfos.real},backend:n})}const mO={kernelName:Jn,backendName:"webgl",kernelFunc:pO},gO={kernelName:pt,backendName:"webgl",kernelFunc:function e(t){const{inputs:n,backend:r,attrs:a}=t,{x:s}=n,{dtype:i}=a;if("complex64"===i){if("complex64"===s.dtype)return PF({inputs:{x:s},backend:r});const t=oc(s.shape),n=e({inputs:{x:s},backend:r,attrs:{dtype:"float32"}}),a=zF({inputs:{real:n,imag:t},backend:r});return t.dispose(),r.disposeIntermediateTensorInfo(n),a}if("complex64"===s.dtype){const t=pO({inputs:{input:s},backend:r}),n=e({inputs:{x:t},backend:r,attrs:{dtype:i}});return r.disposeIntermediateTensorInfo(t),n}if(!ve(s.dtype,i)){const e=PF({inputs:{x:s},backend:r});return{dataId:e.dataId,shape:e.shape,dtype:i}}if("int32"===i)return function(e,t){const n=new IF(e.shape,"return float(int(x));"),r=t.runWebGLProgram(n,[e],"int32");return{dataId:r.dataId,shape:r.shape,dtype:r.dtype}}(s,r);if("bool"===i){const e=r.makeTensorInfo([],"bool",me("bool",1)),t=fO({inputs:{a:s,b:e},backend:r});return r.disposeIntermediateTensorInfo(e),t}throw new Error(`Error in Cast: failed to cast ${s.dtype} to ${i}`)}},yO="return ceil(x);",bO=KF({opSnippet:yO,packedOpSnippet:yO,cpuKernelImpl:GT}),vO={kernelName:mt,backendName:"webgl",kernelFunc:bO};class wO{constructor(e){this.variableNames=["A"],this.outputShape=e,this.userCode="\n uniform float minVal;\n uniform float maxVal;\n\n void main() {\n float value = getAAtOutCoords();\n if (isnan(value)) {\n setOutput(value);\n return;\n }\n\n setOutput(clamp(value, minVal, maxVal));\n }\n "}getCustomSetupFunc(e,t){return(n,r)=>{null==this.minLoc&&(this.minLoc=n.getUniformLocationNoThrow(r,"minVal"),this.maxLoc=n.getUniformLocationNoThrow(r,"maxVal")),n.gl.uniform1f(this.minLoc,e),n.gl.uniform1f(this.maxLoc,t)}}}class _O{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.userCode="\n uniform float minVal;\n uniform float maxVal;\n\n void main() {\n vec4 value = getAAtOutCoords();\n\n if (any(isnan(value))) {\n setOutput(value);\n return;\n }\n\n setOutput(clamp(value, vec4(minVal), vec4(maxVal)));\n }\n "}getCustomSetupFunc(e,t){return(n,r)=>{null==this.minLoc&&(this.minLoc=n.getUniformLocationNoThrow(r,"minVal"),this.maxLoc=n.getUniformLocationNoThrow(r,"maxVal")),n.gl.uniform1f(this.minLoc,e),n.gl.uniform1f(this.maxLoc,t)}}}const xO={kernelName:gt,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{clipValueMin:s,clipValueMax:i}=r;let o;o=We().getBool("WEBGL_PACK_CLIP")?new _O(a.shape):new wO(a.shape);const l=o.getCustomSetupFunc(s,i);return n.runWebGLProgram(o,[a],a.dtype,l)}};class kO{constructor(e){this.variableNames=["real","imag"],this.outputShape=e,this.userCode="\n void main() {\n float re = abs(getRealAtOutCoords());\n float im = abs(getImagAtOutCoords());\n float mx = max(re, im);\n\n // sadly the length function in glsl is not underflow-safe\n // (at least not on Intel GPUs). So the safe solution is\n // to ensure underflow-safety in all cases.\n setOutput(\n mx == 0.0 ? 0.0 : mx * length(vec2(1, min(re, im)/mx))\n );\n }\n "}}function EO(e,t){return{dataId:t.dataId,dtype:t.dtype,shape:e.shape}}const CO={kernelName:bt,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n}=e,{x:r}=t,a=n.texData.get(r.dataId),s=new kO(r.shape),i=[EO(r,a.complexTensorInfos.real),EO(r,a.complexTensorInfos.imag)];return n.runWebGLProgram(s,i,i[0].dtype)}};class SO{constructor(e){this.outputShape=[],this.outputShape=qf(e,1),this.variableNames=e.map(((e,t)=>`T${t}`));const t=new Array(e.length-1);t[0]=e[0][1];for(let n=1;n`T${t}`));const o=new Array(e.length-1);o[0]=e[0][t];for(let n=1;n= ${o[e-1]}) {\n return getChannel(\n getT${e}(${IO(i,l,t)}),\n vec2(${IO(u,l,t)}));\n }`}const f=o.length,d=o[o.length-1];h+=`\n return getChannel(\n getT${f}(${IO(i,l,d)}),\n vec2(${IO(u,l,d)}));`,this.userCode=`\n float getValue(${i.map((e=>"int "+e))}) {\n ${h}\n }\n\n void main() {\n ${a} coords = getOutputCoords();\n vec4 result = vec4(getValue(${s}), 0., 0., 0.);\n\n ${s[r-1]} = ${s[r-1]} + 1;\n if (${s[r-1]} < ${n[r-1]}) {\n result.g = getValue(${s});\n }\n\n ${s[r-2]} = ${s[r-2]} + 1;\n if (${s[r-2]} < ${n[r-2]}) {\n result.a = getValue(${s});\n }\n\n ${s[r-1]} = ${s[r-1]} - 1;\n if (${s[r-2]} < ${n[r-2]} &&\n ${s[r-1]} < ${n[r-1]}) {\n result.b = getValue(${s});\n }\n setOutput(result);\n }\n `}}function IO(e,t,n){const r=e.indexOf(t);return e.map(((e,t)=>t===r?`${e} - ${n}`:e)).join()}function AO(e){const{inputs:t,backend:n}=e,{input:r}=t;return PF({inputs:{x:n.texData.get(r.dataId).complexTensorInfos.imag},backend:n})}const DO={kernelName:on,backendName:"webgl",kernelFunc:AO};function TO(e,t,n){const r=e[0].dtype;if("complex64"===r){const r=e.map((e=>pO({inputs:{input:e},backend:n}))),a=e.map((e=>AO({inputs:{input:e},backend:n}))),s=TO(r,t,n),i=TO(a,t,n),o=zF({inputs:{real:s,imag:i},backend:n});return r.forEach((e=>n.disposeIntermediateTensorInfo(e))),a.forEach((e=>n.disposeIntermediateTensorInfo(e))),n.disposeIntermediateTensorInfo(s),n.disposeIntermediateTensorInfo(i),o}let a=n.shouldExecuteOnCPU(e);if("string"===r&&(a=!0),a){const a=e.map((e=>{const r=re(e.shape.slice(t));return nR({inputs:{x:e},backend:n,attrs:{shape:[-1,r]}})})),s=a.map((e=>({vals:n.readSync(e.dataId),shape:e.shape}))),i=qf(a.map((e=>e.shape)),1),o=1===a[0].shape[0],l=XT(s,i,r,o),u=qf(e.map((e=>e.shape)),t),c=n.makeTensorInfo(u,r,l);return a.forEach((e=>n.disposeIntermediateTensorInfo(e))),c}if(e.length>We().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER")){const r=Math.floor(e.length/2),a=TO(e.slice(0,r),t,n),s=TO(e.slice(r),t,n),i=TO([a,s],t,n);return n.disposeIntermediateTensorInfo(a),n.disposeIntermediateTensorInfo(s),i}if(We().getBool("WEBGL_PACK_ARRAY_OPERATIONS")&&e[0].shape.length>1){const a=new NO(e.map((e=>e.shape)),t);return n.runWebGLProgram(a,e,r)}const{tensors2D:s,outShape:i}=function(e,t,n){const r=qf(e.map((e=>e.shape)),t);return{tensors2D:e.map((e=>nR({inputs:{x:e},attrs:{shape:[-1,re(e.shape.slice(t))]},backend:n}))),outShape:r}}(e,t,n),o=new SO(s.map((e=>e.shape))),l=n.runWebGLProgram(o,s,r);s.forEach((e=>n.disposeIntermediateTensorInfo(e)));const u=nR({inputs:{x:l},attrs:{shape:i},backend:n});return n.disposeIntermediateTensorInfo(l),u}function FO(e){const{inputs:t,backend:n,attrs:r}=e,{axis:a}=r,s=de(a,t[0].shape)[0],i=qf(t.map((e=>e.shape)),s);if(0===re(i))return n.makeTensorInfo(i,t[0].dtype,[]);const o=t.filter((e=>re(e.shape)>0));return 1===o.length?PF({inputs:{x:o[0]},backend:n}):(Kf(o.map((e=>e.shape)),s),TO(o,s,n))}const RO={kernelName:vt,backendName:"webgl",kernelFunc:FO};class OO{constructor(e,t=!1,n=null,r=!1,a=!1){this.variableNames=["x","W"],this.outputShape=e.outShape;const s=e.padInfo.top,i=e.padInfo.left,o=e.strideHeight,l=e.strideWidth,u=e.dilationHeight,c=e.dilationWidth,h=e.filterHeight,f=e.filterWidth,d=4*Math.floor(e.inChannels/4),p=e.inChannels%4,m="channelsLast"===e.dataFormat,g=m?1:2,y=m?2:3,b=m?3:1;let v="",w="";n&&(v=r?`float activation(float a) {\n float b = getPreluActivationWeightsAtOutCoords();\n ${n}\n }`:a?`float activation(float a) {\n float b = getLeakyreluAlphaAtOutCoords();\n ${n}\n }`:`\n float activation(float x) {\n ${n}\n }\n `,w="result = activation(result);");const _=t?"result += getBiasAtOutCoords();":"";t&&this.variableNames.push("bias"),r&&this.variableNames.push("preluActivationWeights"),a&&this.variableNames.push("leakyreluAlpha"),this.userCode=`\n ${v}\n\n const ivec2 strides = ivec2(${o}, ${l});\n const ivec2 pads = ivec2(${s}, ${i});\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d2 = coords[${b}];\n\n ivec2 xRCCorner =\n ivec2(coords[${g}], coords[${y}]) * strides - pads;\n int xRCorner = xRCCorner.x;\n int xCCorner = xRCCorner.y;\n\n // Convolve x(?, ?, d1) with w(:, :, d1, d2) to get y(yR, yC, d2).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n for (int wR = 0; wR < ${h}; wR++) {\n int xR = xRCorner + wR * ${u};\n\n if (xR < 0 || xR >= ${e.inHeight}) {\n continue;\n }\n\n for (int wC = 0; wC < ${f}; wC++) {\n int xC = xCCorner + wC * ${c};\n\n if (xC < 0 || xC >= ${e.inWidth}) {\n continue;\n }\n\n for (int d1 = 0; d1 < ${d}; d1 += 4) {\n vec4 wValues = vec4(\n getW(wR, wC, d1, d2),\n getW(wR, wC, d1 + 1, d2),\n getW(wR, wC, d1 + 2, d2),\n getW(wR, wC, d1 + 3, d2)\n );\n\n if (${m}) {\n vec4 xValues = vec4(\n getX(batch, xR, xC, d1),\n getX(batch, xR, xC, d1 + 1),\n getX(batch, xR, xC, d1 + 2),\n getX(batch, xR, xC, d1 + 3)\n );\n dotProd += dot(xValues, wValues);\n } else {\n vec4 xValues = vec4(\n getX(batch, d1, xR, xC),\n getX(batch, d1 + 1, xR, xC),\n getX(batch, d1 + 2, xR, xC),\n getX(batch, d1 + 3, xR, xC)\n );\n dotProd += dot(xValues, wValues);\n }\n }\n\n if (${1===p}) {\n\n if (${m}) {\n dotProd +=\n getX(batch, xR, xC, ${d}) *\n getW(wR, wC, ${d}, d2);\n } else {\n dotProd +=\n getX(batch, ${d}, xR, xC) *\n getW(wR, wC, ${d}, d2);\n }\n\n } else if (${2===p}) {\n vec2 wValues = vec2(\n getW(wR, wC, ${d}, d2),\n getW(wR, wC, ${d} + 1, d2)\n );\n\n if (${m}) {\n vec2 xValues = vec2(\n getX(batch, xR, xC, ${d}),\n getX(batch, xR, xC, ${d} + 1)\n );\n dotProd += dot(xValues, wValues);\n } else {\n vec2 xValues = vec2(\n getX(batch, ${d}, xR, xC),\n getX(batch, ${d} + 1, xR, xC)\n );\n dotProd += dot(xValues, wValues);\n }\n\n } else if (${3===p}) {\n vec3 wValues = vec3(\n getW(wR, wC, ${d}, d2),\n getW(wR, wC, ${d} + 1, d2),\n getW(wR, wC, ${d} + 2, d2)\n );\n\n if (${m}) {\n vec3 xValues = vec3(\n getX(batch, xR, xC, ${d}),\n getX(batch, xR, xC, ${d} + 1),\n getX(batch, xR, xC, ${d} + 2)\n );\n dotProd += dot(xValues, wValues);\n } else {\n vec3 xValues = vec3(\n getX(batch, ${d}, xR, xC),\n getX(batch, ${d} + 1, xR, xC),\n getX(batch, ${d} + 2, xR, xC)\n );\n dotProd += dot(xValues, wValues);\n }\n\n }\n }\n }\n\n float result = dotProd;\n ${_}\n ${w}\n setOutput(result);\n }\n `}}class MO{constructor(e){this.variableNames=["x","W"],this.outputShape=e.outShape;const t=e.padInfo.front,n=e.padInfo.top,r=e.padInfo.left,a=e.strideDepth,s=e.strideHeight,i=e.strideWidth,o=e.dilationDepth,l=e.dilationHeight,u=e.dilationWidth,c=e.filterDepth,h=e.filterHeight,f=e.filterWidth,d=4*Math.floor(e.inChannels/4),p=e.inChannels%4;this.userCode=`\n const ivec3 strides = ivec3(${a}, ${s}, ${i});\n const ivec3 pads = ivec3(${t}, ${n}, ${r});\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int d2 = coords.u;\n\n ivec3 xFRCCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;\n int xFCorner = xFRCCorner.x;\n int xRCorner = xFRCCorner.y;\n int xCCorner = xFRCCorner.z;\n\n // Convolve x(?, ?, ?, d1) with w(:, :, :, d1, d2) to get\n // y(yF, yR, yC, d2). ? = to be determined. : = across all\n // values in that axis.\n float dotProd = 0.0;\n for (int wF = 0; wF < ${c}; wF++) {\n int xF = xFCorner + wF * ${o};\n\n if (xF < 0 || xF >= ${e.inDepth}) {\n continue;\n }\n\n for (int wR = 0; wR < ${h}; wR++) {\n int xR = xRCorner + wR * ${l};\n\n if (xR < 0 || xR >= ${e.inHeight}) {\n continue;\n }\n\n for (int wC = 0; wC < ${f}; wC++) {\n int xC = xCCorner + wC * ${u};\n\n if (xC < 0 || xC >= ${e.inWidth}) {\n continue;\n }\n\n for (int d1 = 0; d1 < ${d}; d1 += 4) {\n vec4 xValues = vec4(\n getX(batch, xF, xR, xC, d1),\n getX(batch, xF, xR, xC, d1 + 1),\n getX(batch, xF, xR, xC, d1 + 2),\n getX(batch, xF, xR, xC, d1 + 3)\n );\n vec4 wValues = vec4(\n getW(wF, wR, wC, d1, d2),\n getW(wF, wR, wC, d1 + 1, d2),\n getW(wF, wR, wC, d1 + 2, d2),\n getW(wF, wR, wC, d1 + 3, d2)\n );\n\n dotProd += dot(xValues, wValues);\n }\n\n if (${1===p}) {\n dotProd +=\n getX(batch, xF, xR, xC, ${d}) *\n getW(wF, wR, wC, ${d}, d2);\n } else if (${2===p}) {\n vec2 xValues = vec2(\n getX(batch, xF, xR, xC, ${d}),\n getX(batch, xF, xR, xC, ${d} + 1)\n );\n vec2 wValues = vec2(\n getW(wF, wR, wC, ${d}, d2),\n getW(wF, wR, wC, ${d} + 1, d2)\n );\n dotProd += dot(xValues, wValues);\n } else if (${3===p}) {\n vec3 xValues = vec3(\n getX(batch, xF, xR, xC, ${d}),\n getX(batch, xF, xR, xC, ${d} + 1),\n getX(batch, xF, xR, xC, ${d} + 2)\n );\n vec3 wValues = vec3(\n getW(wF, wR, wC, ${d}, d2),\n getW(wF, wR, wC, ${d} + 1, d2),\n getW(wF, wR, wC, ${d} + 2, d2)\n );\n dotProd += dot(xValues, wValues);\n }\n }\n }\n }\n setOutput(dotProd);\n }\n `}}class BO{constructor(e,t,n){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e;const{filterWidth:r,inChannels:a,strideWidth:s,strideHeight:i,padInfo:o,outWidth:l,dilationWidth:u,dilationHeight:c,dataFormat:h}=n,{left:f,top:d}=o,p=a*r,m=fT(),g="channelsLast"===h,y=g?0:1,b=g?1:2;let v="";for(let n=0;n<=1;n++)for(let r=0;r<=1;r++)v+=`\n blockIndex = rc.y + ${r};\n pos = rc.x + ${n};\n\n if(blockIndex < ${e[1]} && pos < ${e[0]}) {\n offsetY = int(blockIndex / (${l})) * ${i} - ${d};\n d0 = offsetY + ${c} * (pos / ${p});\n\n if(d0 < ${t[y]} && d0 >= 0) {\n\n offsetX = int(mod(float(blockIndex), ${l}.) * ${s}. - ${f}.);\n d1 = offsetX + ${u} * (int(mod(float(pos), ${p}.) / ${a}.));\n\n if(d1 < ${t[b]} && d1 >= 0) {\n\n ch = int(mod(float(pos), ${a}.));\n\n if (${g}) {\n innerDims = vec2(d1, ch);\n result[${2*n+r}] = getChannel(\n getA(d0, int(innerDims.x),\n int(innerDims.y)), innerDims);\n } else {\n innerDims = vec2(d0, d1);\n result[${2*n+r}] = getChannel(\n getA(ch, int(innerDims.x),\n int(innerDims.y)), innerDims);\n }\n }\n }\n }\n `;this.userCode=`\n void main() {\n ivec2 rc = getOutputCoords();\n\n vec4 result = vec4(0);\n\n int blockIndex, pos, offsetY, d0, offsetX, d1, ch;\n vec2 innerDims;\n\n ${v}\n\n ${m.output} = result;\n }\n `}}function $O({x:e,filter:t,convInfo:n,backend:r,bias:a=null,preluActivationWeights:s=null,leakyreluAlpha:i=0,activation:o=null}){const l=e.shape,u=r.texData.get(e.dataId),c=n.inChannels,h=l[0]*l[1]*l[2],f=n.outChannels,d="channelsLast"===n.dataFormat;let p;const m=[],g=(1===h||1===f)&&c>1e3,y=l[2]%2!=0&&!!u.isPacked;if(!g&&We().getBool("WEBGL_LAZILY_UNPACK")&&We().getBool("WEBGL_PACK_BINARY_OPERATIONS")&&y){const c=d?l[0]*l[1]*(l[2]+1):l[0]*l[2]*(l[3]+1),h={dataId:e.dataId,shape:[1,c,n.inChannels],dtype:e.dtype},f=u.shape;u.shape=u.shape.slice(),u.shape[u.shape.length-2]++,Q(aT(u.shape,h.shape),(()=>`packed reshape ${u.shape} to ${h.shape} isn't free`));const g=nR({inputs:{x:t},backend:r,attrs:{shape:[1,n.inChannels,n.outChannels]}});m.push(g);const y=pR({a:h,b:g,backend:r,transposeA:!1,transposeB:!1,bias:a,activation:o,preluActivationWeights:s,leakyreluAlpha:i}),b=r.texData.get(y.dataId);Q(b.isPacked,(()=>"batchMatMul result is expected to be packed")),u.shape=f,b.shape=n.outShape,p=PF({inputs:{x:y},backend:r}),p.shape=n.outShape,m.push(y)}else{const u=nR({inputs:{x:e},backend:r,attrs:{shape:[1,d?l[0]*l[1]*l[2]:l[0]*l[2]*l[3],n.inChannels]}}),c=nR({inputs:{x:t},backend:r,attrs:{shape:[1,n.inChannels,n.outChannels]}}),h=pR({a:u,b:c,transposeA:!1,transposeB:!1,backend:r,bias:a,activation:o,preluActivationWeights:s,leakyreluAlpha:i});p=nR({inputs:{x:h},backend:r,attrs:{shape:n.outShape}}),m.push(u),m.push(c),m.push(h)}for(const e of m)r.disposeIntermediateTensorInfo(e);return p}function PO({x:e,filter:t,convInfo:n,backend:r,bias:a=null,preluActivationWeights:s=null,leakyreluAlpha:i=0,activation:o=null}){const{filterWidth:l,filterHeight:u,inChannels:c,outWidth:h,outHeight:f,dataFormat:d}=n,p="channelsLast"===d,m=l*u*c,g=f*h,y=[m,g],b=[],v=nR({inputs:{x:e},backend:r,attrs:{shape:e.shape.slice(1)}}),w=nR({inputs:{x:t},backend:r,attrs:{shape:[1,m,re(t.shape)/m]}});b.push(v),b.push(w);const _=new BO(y,v.shape,n),x=r.runWebGLProgram(_,[v],"float32"),k=nR({inputs:{x},backend:r,attrs:{shape:[1,y[0],y[1]]}});b.push(x),b.push(k);const E=null!=a,C=null!=s,S="leakyrelu"===o,N=o?YF(o,!0):null,I=new JF(k.shape,w.shape,[1,g,n.outChannels],!0,!1,E,N,C,S),A=[k,w];if(a&&A.push(a),C&&A.push(s),S){const e=r.makeTensorInfo([],"float32",ra(i,"float32"));A.push(e),b.push(e)}const D=r.runWebGLProgram(I,A,"float32"),T=nR({inputs:{x:D},backend:r,attrs:{shape:p?[1,f,h,n.outChannels]:[1,n.outChannels,f,h]}});b.push(D);for(const e of b)r.disposeIntermediateTensorInfo(e);return T}const LO={kernelName:wt,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s}=t,{strides:i,pad:o,dataFormat:l,dilations:u,dimRoundingMode:c}=r,h=Il(l),f=vl(a.shape,s.shape,i,u,o,c,!1,h);let d;if(1!==f.filterHeight||1!==f.filterWidth||1!==f.dilationHeight||1!==f.dilationWidth||1!==f.strideHeight||1!==f.strideWidth||"SAME"!==f.padInfo.type&&"VALID"!==f.padInfo.type)if(We().getBool("WEBGL_CONV_IM2COL")&&1===a.shape[0])d=PO({x:a,filter:s,convInfo:f,backend:n});else{const e=new OO(f);d=n.runWebGLProgram(e,[a,s],"float32")}else d=$O({x:a,filter:s,convInfo:f,backend:n});const p=nR({inputs:{x:d},backend:n,attrs:{shape:f.outShape}});return n.disposeIntermediateTensorInfo(d),p}};class zO{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;const t=e.strideHeight,n=e.strideWidth,r=e.padInfo.top,a=e.padInfo.left,s="channelsLast"===e.dataFormat;this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int wR = coords.x;\n int wC = coords.y;\n int d1 = coords.z;\n int d2 = coords.w;\n\n // Convolve x(?, ?, d1) with dy(:, :, d2) to get dw(wR, wC, d1, d2).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n\n for (int b = 0; b < ${e.batchSize}; b++) {\n for (int yR = 0; yR < ${e.outHeight}; yR++) {\n int xR = wR + yR * ${t} - ${r};\n\n if (xR < 0 || xR >= ${e.inHeight}) {\n continue;\n }\n\n for (int yC = 0; yC < ${e.outWidth}; yC++) {\n int xC = wC + yC * ${n} - ${a};\n\n if (xC < 0 || xC >= ${e.inWidth}) {\n continue;\n }\n\n if (${s}) {\n float dyValue = getDy(b, yR, yC, d2);\n float xValue = getX(b, xR, xC, d1);\n dotProd += (xValue * dyValue);\n } else {\n float dyValue = getDy(b, d2, yR, yC);\n float xValue = getX(b, d1, xR, xC);\n dotProd += (xValue * dyValue);\n }\n\n }\n }\n }\n setOutput(dotProd);\n }\n `}}class WO{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;const t=e.filterHeight,n=e.filterWidth,r=e.strideHeight,a=e.strideWidth,s="channelsLast"===e.dataFormat,i=t-1-e.padInfo.top,o=n-1-e.padInfo.left,l=s?1:2,u=s?2:3,c=s?3:1;this.userCode=`\n const ivec2 pads = ivec2(${i}, ${o});\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d1 = coords[${c}];\n\n ivec2 dyCorner = ivec2(coords[${l}], coords[${u}]) - pads;\n int dyRCorner = dyCorner.x;\n int dyCCorner = dyCorner.y;\n\n // Convolve dy(?, ?, d2) with w(:, :, d1, d2) to compute dx(xR, xC, d1).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n for (int wR = 0; wR < ${t}; wR++) {\n float dyR = float(dyRCorner + wR) / ${r}.0;\n\n if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n int wRPerm = ${t} - 1 - wR;\n\n for (int wC = 0; wC < ${n}; wC++) {\n float dyC = float(dyCCorner + wC) / ${a}.0;\n\n if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n int wCPerm = ${n} - 1 - wC;\n\n for (int d2 = 0; d2 < ${e.outChannels}; d2++) {\n\n if (${s}) {\n float xValue = getDy(batch, idyR, idyC, d2);\n float wValue = getW(wRPerm, wCPerm, d1, d2);\n dotProd += xValue * wValue;\n } else {\n float xValue = getDy(batch, d2, idyR, idyC);\n float wValue = getW(wRPerm, wCPerm, d1, d2);\n dotProd += xValue * wValue;\n }\n\n }\n }\n }\n setOutput(dotProd);\n }\n `}}class UO{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;const t=e.strideDepth,n=e.strideHeight,r=e.strideWidth,a=e.padInfo.front,s=e.padInfo.top,i=e.padInfo.left;this.userCode=`\n void main() {\n ivec5 coords = getOutputCoords();\n int wF = coords.x;\n int wR = coords.y;\n int wC = coords.z;\n int d1 = coords.w;\n int d2 = coords.u;\n\n float dotProd = 0.0;\n\n for (int b = 0; b < ${e.batchSize}; b++) {\n for (int yF = 0; yF < ${e.outDepth}; yF++) {\n int xF = wF + yF * ${t} - ${a};\n\n if (xF < 0 || xF >= ${e.inDepth}) {\n continue;\n }\n\n for (int yR = 0; yR < ${e.outHeight}; yR++) {\n int xR = wR + yR * ${n} - ${s};\n\n if (xR < 0 || xR >= ${e.inHeight}) {\n continue;\n }\n\n for (int yC = 0; yC < ${e.outWidth}; yC++) {\n int xC = wC + yC * ${r} - ${i};\n\n if (xC < 0 || xC >= ${e.inWidth}) {\n continue;\n }\n\n float dyValue = getDy(b, yF, yR, yC, d2);\n float xValue = getX(b, xF, xR, xC, d1);\n dotProd += (xValue * dyValue);\n }\n }\n }\n }\n setOutput(dotProd);\n }\n `}}class VO{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;const t=e.filterDepth,n=e.filterHeight,r=e.filterWidth,a=e.strideDepth,s=e.strideHeight,i=e.strideWidth,o=t-1-e.padInfo.front,l=n-1-e.padInfo.top,u=r-1-e.padInfo.left;this.userCode=`\n const ivec3 pads = ivec3(${o}, ${l}, ${u});\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int d1 = coords.u;\n\n\n ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;\n int dyFCorner = dyCorner.x;\n int dyRCorner = dyCorner.y;\n int dyCCorner = dyCorner.z;\n\n float dotProd = 0.0;\n for (int wF = 0; wF < ${t}; wF++) {\n float dyF = float(dyFCorner + wF) / ${a}.0;\n\n if (dyF < 0.0 || dyF >= ${e.outDepth}.0 || fract(dyF) > 0.0) {\n continue;\n }\n int idyF = int(dyF);\n\n int wFPerm = ${t} - 1 - wF;\n\n for (int wR = 0; wR < ${n}; wR++) {\n float dyR = float(dyRCorner + wR) / ${s}.0;\n\n if (dyR < 0.0 || dyR >= ${e.outHeight}.0 ||\n fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n int wRPerm = ${n} - 1 - wR;\n\n for (int wC = 0; wC < ${r}; wC++) {\n float dyC = float(dyCCorner + wC) / ${i}.0;\n\n if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n int wCPerm = ${r} - 1 - wC;\n\n for (int d2 = 0; d2 < ${e.outChannels}; d2++) {\n float xValue = getDy(batch, idyF, idyR, idyC, d2);\n float wValue = getW(wFPerm, wRPerm, wCPerm, d1, d2);\n dotProd += xValue * wValue;\n }\n }\n }\n }\n setOutput(dotProd);\n }\n `}}const jO={kernelName:_t,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{x:a,dy:s}=t,{strides:i,pad:o,dataFormat:l,dimRoundingMode:u,filterShape:c}=r,h=Il(l),f=vl(a.shape,c,i,1,o,u,!1,h),d=new zO(f);return n.runWebGLProgram(d,[a,s],"float32")}},HO={kernelName:xt,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{dy:a,filter:s}=t,{inputShape:i,strides:o,pad:l,dataFormat:u,dimRoundingMode:c}=r,h=Il(u),f=vl(i,s.shape,o,1,l,c,!1,h),d=new WO(f);return n.runWebGLProgram(d,[a,s],"float32")}},GO={kernelName:kt,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s}=t,{strides:i,pad:o,dilations:l}=r,u=wl(a.shape,s.shape,i,l,o),c=new MO(u);return n.runWebGLProgram(c,[a,s],"float32")}},XO={kernelName:Et,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{x:a,dy:s}=t,{strides:i,pad:o,filterShape:l}=r,u=wl(a.shape,l,i,1,o),c=new UO(u);return n.runWebGLProgram(c,[a,s],"float32")}},KO={kernelName:Ct,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{dy:a,filter:s}=t,{pad:i,strides:o,inputShape:l}=r,u=wl(l,s.shape,o,1,i),c=new VO(u);return n.runWebGLProgram(c,[a,s],"float32")}},qO=KF({opSnippet:"if (isnan(x)) return x;\n return cos(x);\n"}),YO={kernelName:St,backendName:"webgl",kernelFunc:qO},JO=KF({opSnippet:"\n float e2x = exp(-x);\n return (e2x + 1.0 / e2x) / 2.0;\n"}),ZO={kernelName:Nt,backendName:"webgl",kernelFunc:JO};class QO{constructor(e,t,n,r,a){this.variableNames=["Image","Boxes","BoxInd"],this.outputShape=[];const[s,i,o,l]=e,[u]=t,[c,h]=n;this.outputShape=[u,c,h,l];const f="bilinear"===r?1:0,[d,p]=[i-1+".0",o-1+".0"],[m,g,y]=c>1?[""+(i-1)/(c-1),"(y2-y1) * height_ratio",`y1*${d} + float(y)*(height_scale)`]:["0.0","0.0",`0.5 * (y1+y2) * ${d}`],[b,v,w]=h>1?[""+(o-1)/(h-1),"(x2-x1) * width_ratio",`x1*${p} + float(x)*(width_scale)`]:["0.0","0.0",`0.5 * (x1+x2) * ${p}`];this.userCode=`\n const float height_ratio = float(${m});\n const float width_ratio = float(${b});\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int y = coords[1];\n int x = coords[2];\n int d = coords[3];\n\n // get box vals\n float y1 = getBoxes(b,0);\n float x1 = getBoxes(b,1);\n float y2 = getBoxes(b,2);\n float x2 = getBoxes(b,3);\n\n // get image in batch index\n int bInd = round(getBoxInd(b));\n if(bInd < 0 || bInd >= ${s}) {\n return;\n }\n\n float height_scale = ${g};\n float width_scale = ${v};\n\n float in_y = ${y};\n if( in_y < 0.0 || in_y > ${d} ) {\n setOutput(float(${a}));\n return;\n }\n float in_x = ${w};\n if( in_x < 0.0 || in_x > ${p} ) {\n setOutput(float(${a}));\n return;\n }\n\n vec2 sourceFracIndexCR = vec2(in_x,in_y);\n if(${f} == 1) {\n // Compute the four integer indices.\n ivec2 sourceFloorCR = ivec2(sourceFracIndexCR);\n ivec2 sourceCeilCR = ivec2(ceil(sourceFracIndexCR));\n\n float topLeft = getImage(b, sourceFloorCR.y, sourceFloorCR.x, d);\n float bottomLeft = getImage(b, sourceCeilCR.y, sourceFloorCR.x, d);\n float topRight = getImage(b, sourceFloorCR.y, sourceCeilCR.x, d);\n float bottomRight = getImage(b, sourceCeilCR.y, sourceCeilCR.x, d);\n\n vec2 fracCR = sourceFracIndexCR - vec2(sourceFloorCR);\n\n float top = topLeft + (topRight - topLeft) * fracCR.x;\n float bottom = bottomLeft + (bottomRight - bottomLeft) * fracCR.x;\n float newValue = top + (bottom - top) * fracCR.y;\n setOutput(newValue);\n } else {\n // Compute the coordinators of nearest neighbor point.\n ivec2 sourceNearestCR = ivec2(floor(\n sourceFracIndexCR + vec2(0.5,0.5)));\n float newValue = getImage(b, sourceNearestCR.y, sourceNearestCR.x, d);\n setOutput(newValue);\n }\n }\n `}}const eM={kernelName:At,backendName:"webgl",kernelFunc:e=>{const{inputs:t,backend:n,attrs:r}=e,{image:a,boxes:s,boxInd:i}=t,{cropSize:o,method:l,extrapolationValue:u}=r,c=new QO(a.shape,s.shape,o,l,u);return n.runWebGLProgram(c,[a,s,i],"float32")}};class tM{constructor(e,t,n){this.variableNames=["x"],this.outputShape=e;const r=e.length,a=t?"0.0":`getX(${nM(r,"coords")})`,s=e[e.length-1];let i="",o="";t?(i=n?"end != "+(s-1):"end != 0",o=n?"end + 1":"end - 1"):(i=n?`end + pow2 < ${s}`:"end >= pow2",o=n?"end + pow2":"end - pow2"),this.userCode=`\n uniform float index;\n void main() {\n ${LT(r)} coords = getOutputCoords();\n int end = ${rM(r,"coords")};\n float val = ${a};\n int pow2 = int(pow(2.0, index));\n if (${i}) {\n int idx = ${o};\n ${rM(r,"coords")} = idx;\n val += getX(${nM(r,"coords")});\n }\n setOutput(val);\n }\n `}getCustomSetupFunc(e){return(t,n)=>{null==this.index&&(this.index=t.getUniformLocation(n,"index")),t.gl.uniform1f(this.index,e)}}}function nM(e,t){if(1===e)return`${t}`;if(2===e)return`${t}.x, ${t}.y`;if(3===e)return`${t}.x, ${t}.y, ${t}.z`;if(4===e)return`${t}.x, ${t}.y, ${t}.z, ${t}.w`;throw Error(`Cumulative sum for rank ${e} is not yet supported`)}function rM(e,t){if(1===e)return`${t}`;if(2===e)return`${t}.y`;if(3===e)return`${t}.z`;if(4===e)return`${t}.w`;throw Error(`Cumulative sum for rank ${e} is not yet supported`)}const aM={kernelName:It,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,exclusive:i,reverse:o}=r,l=a.shape.length,u=qu([s],l);let c=a;null!=u&&(c=fR({inputs:{x:a},backend:n,attrs:{perm:u}}));const h=Ju(1,l)[0];if(h!==l-1)throw new Error(`WebGL cumsum shader expects an inner-most axis=${a.shape.length-1} but got axis=${s}`);const f=c.shape[h];let d=PF({inputs:{x:c},backend:n});for(let e=0;e<=Math.ceil(Math.log2(f))-1;e++){const t=new tM(c.shape,!1,o),r=t.getCustomSetupFunc(e),a=d;d=n.runWebGLProgram(t,[d],d.dtype,r),n.disposeIntermediateTensorInfo(a)}if(i){const e=new tM(c.shape,i,o),t=d;d=n.runWebGLProgram(e,[d],d.dtype),n.disposeIntermediateTensorInfo(t)}if(null!=u){const e=fR({inputs:{x:d},backend:n,attrs:{perm:Yu(u)}});return n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(c),e}return d}},sM={kernelName:Dt,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{x:a,weights:s}=t,{size:i,binaryOutput:o}=r;if(1===a.shape.length){const e=n.readSync(a.dataId),t=n.readSync(s.dataId),r=jT(e,t,s.dtype,s.shape,i);return n.makeTensorInfo([i],s.dtype,r)}if(2===a.shape.length){const e=n.bufferSync(a),t=n.bufferSync(s),r=HT(e,t,i,o);return n.makeTensorInfo(r.shape,s.dtype,r.values)}throw new Error(`Error in denseBincount: input must be at most rank 2, but got rank${a.shape.length}.`)}};class iM{constructor(e,t,n){this.variableNames=["x"],this.outputShape=[],this.outputShape=e,this.blockSize=t,this.dataFormat=n,this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int h = ${this.getHeightCoordString()};\n int w = ${this.getWidthCoordString()};\n int d = ${this.getDepthCoordString()};\n\n int in_h = h / ${t};\n int offset_h = imod(h, ${t});\n int in_w = w / ${t};\n int offset_w = imod(w, ${t});\n int offset_d = (offset_h * ${t} + offset_w) *\n ${this.getOutputDepthSize()};\n int in_d = d + offset_d;\n\n float result = ${this.getInputSamplingString()};\n setOutput(result);\n }\n `}getHeightCoordString(){return"NHWC"===this.dataFormat?"coords[1]":"coords[2]"}getWidthCoordString(){return"NHWC"===this.dataFormat?"coords[2]":"coords[3]"}getDepthCoordString(){return"NHWC"===this.dataFormat?"coords[3]":"coords[1]"}getOutputDepthSize(){return"NHWC"===this.dataFormat?this.outputShape[3]:this.outputShape[1]}getInputSamplingString(){return"NHWC"===this.dataFormat?"getX(b, in_h, in_w, in_d)":"getX(b, in_d, in_h, in_w)"}}const oM={kernelName:Tt,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{blockSize:s,dataFormat:i}=r;Q(s>1,(()=>`blockSize should be > 1 for depthToSpace, but was: ${s}`));const o=a.shape[0],l="NHWC"===i?a.shape[1]:a.shape[2],u="NHWC"===i?a.shape[2]:a.shape[3],c="NHWC"===i?a.shape[3]:a.shape[1],h=l*s,f=u*s,d=c/(s*s),p=new iM("NHWC"===i?[o,h,f,d]:[o,d,h,f],s,i);return n.runWebGLProgram(p,[a],a.dtype)}};class lM{constructor(e,t=!1,n=null,r=!1,a=!1){this.variableNames=["x","W"],this.outputShape=e.outShape;const s=e.inHeight,i=e.inWidth,o=e.padInfo.top,l=e.padInfo.left,u=e.strideHeight,c=e.strideWidth,h=e.dilationHeight,f=e.dilationWidth,d=e.filterHeight,p=e.filterWidth,m=e.outChannels/e.inChannels;let g="",y="";n&&(g=r?`float activation(float a) {\n float b = getPreluActivationWeightsAtOutCoords();\n ${n}\n }`:a?`float activation(float a) {\n float b = getLeakyreluAlphaAtOutCoords();\n ${n}\n }`:`\n float activation(float x) {\n ${n}\n }\n `,y="result = activation(result);");const b=t?"result += getBiasAtOutCoords();":"";t&&this.variableNames.push("bias"),r&&this.variableNames.push("preluActivationWeights"),a&&this.variableNames.push("leakyreluAlpha"),this.userCode=`\n ${g}\n\n const ivec2 strides = ivec2(${u}, ${c});\n const ivec2 pads = ivec2(${o}, ${l});\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords.x;\n ivec2 xRCCorner = coords.yz * strides - pads;\n int d2 = coords.w;\n int d1 = d2 / ${m};\n int q = d2 - d1 * ${m};\n\n int xRCorner = xRCCorner.x;\n int xCCorner = xRCCorner.y;\n\n // Convolve x(?, ?, d1) with w(:, :, d1, q) to get y(yR, yC, d2).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n // TO DO(dsmilkov): Flatten the two for loops and vec4 the operations.\n for (int wR = 0; wR < ${d}; wR++) {\n int xR = xRCorner + wR * ${h};\n\n if (xR < 0 || xR >= ${s}) {\n continue;\n }\n\n for (int wC = 0; wC < ${p}; wC++) {\n int xC = xCCorner + wC * ${f};\n\n if (xC < 0 || xC >= ${i}) {\n continue;\n }\n\n float xVal = getX(batch, xR, xC, d1);\n float wVal = getW(wR, wC, d1, q);\n dotProd += xVal * wVal;\n }\n }\n\n float result = dotProd;\n ${b}\n ${y}\n setOutput(result);\n }\n `}}class uM{constructor(e,t=!1,n=null,r=!1,a=!1){this.variableNames=["x","W"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e.outShape;const s=e.outChannels/e.inChannels,i=e.inHeight,o=e.inWidth,l=e.padInfo.top,u=e.padInfo.left,c=e.strideHeight,h=e.strideWidth,f=e.dilationHeight,d=e.dilationWidth,p=e.filterHeight,m=e.filterWidth,g=m;let y="\n int xR; int xC; int xCOffset;\n vec4 wTexel; vec4 previous; vec4 final;";for(let e=0;e=0 && xR < ${i}) {\n `;for(let t=0;t<(g+1)/2;t++){const n=2*t,r=n*d;if(y+=`\n xC = xCCorner + ${r};\n `,1===h){if(n= 0 && xCOffset < ${o} && xTexelC${r}Ready == 0) {\n xTexelC${r} = getX(batch, xR, xCOffset, d1);\n\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if (xCOffset + 1 >= ${o}) {\n xTexelC${r}.zw = vec2(0.0);\n }\n xTexelC${r}Ready = 1;\n }\n `,y+=1===d&&r>0?`\n xC${n} = vec4(xTexelC${r-2}.zw, xTexelC${r}.xy);\n `:`\n xCOffset = xC + 1 - 2;\n\n if (xCOffset >= 0 && xCOffset < ${o}) {\n previous = getX(batch, xR, xCOffset, d1);\n\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if (xCOffset + 1 >= ${o}) {\n previous.zw = vec2(0.0);\n }\n\n xC${n} = vec4(previous.zw, xTexelC${r}.xy);\n } else {\n xC${n} = vec4(0.0, 0.0, xTexelC${r}.xy);\n }\n `):y+=`\n if (xC >= 0 && xC < ${o} && xTexelC${r}Ready == 0) {\n xTexelC${r} = getX(batch, xR, xC, d1);\n if (xC + 1 >= ${o}) {\n xTexelC${r}.zw = vec2(0.0);\n }\n xTexelC${r}Ready = 1;\n }\n\n xC${n} = xTexelC${r};\n `,r+1= 0 && xCOffset < ${o} && xTexelC${r+2}Ready == 0) {\n xTexelC${r+2} = getX(batch, xR, xCOffset, d1);\n\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if (xCOffset + 1 >= ${o}) {\n xTexelC${r+2}.zw = vec2(0.0);\n }\n xTexelC${r+2}Ready = 1;\n }\n `,d>1&&(y+=`\n xCOffset -= 2;\n if (xCOffset >= 0 && xCOffset < ${o} && xTexelC${r}Ready == 0) {\n xTexelC${r} = getX(batch, xR, xCOffset, d1);\n xTexelC${r}Ready = 1;\n }\n `),y+=`\n xC${n+1} = vec4(xTexelC${r}.zw, xTexelC${r+2}.xy);\n `):y+=1===e?`\n xC${n+1} = xTexelC${r};\n `:`\n xCOffset = xC + ${e};\n\n if (xCOffset >= 0 && xCOffset < ${o} && xTexelC${r+2}Ready == 0) {\n xTexelC${r+2} = getX(batch, xR, xCOffset, d1);\n if (xCOffset + 1 >= ${o}) {\n xTexelC${r+2}.zw = vec2(0.0);\n }\n xTexelC${r+2}Ready = 1;\n }\n\n xC${n+1} = xTexelC${r+2};\n `}}else r= 0 && xCOffset < ${o} && xTexelC${r}Ready == 0) {\n xTexelC${r} = getX(batch, xR, xCOffset, d1);\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if (xCOffset + 1 >= ${o}) {\n xTexelC${r}.zw = vec2(0.0);\n }\n xTexelC${r}Ready = 1;\n }\n\n if(xC + 1 >= 0 && xC + 1 < ${o} && xTexelC${r+2}Ready == 0) {\n xTexelC${r+2} = getX(batch, xR, xC + 1, d1);\n // Need to manually clear unused channels in case\n // we're reading from recycled texture.\n if (xC + 2 >= ${o}) {\n xTexelC${r+2}.zw = vec2(0.0);\n }\n xTexelC${r+2}Ready = 1;\n }\n\n xC${n} = vec4(xTexelC${r}.zw, xTexelC${r+2}.zw);\n `,r+1= 0 && xCOffset < ${o}) {\n final = getX(batch, xR, xCOffset, d1);\n }\n xC${n+1} = vec4(xTexelC${r+2}.xy, final.xy);\n `)):(y+=`\n if(xC >= 0 && xC < ${o} && xTexelC${r}Ready == 0) {\n xTexelC${r} = getX(batch, xR, xC, d1);\n if (xC + 1 >= ${o}) {\n xTexelC${r}.zw = vec2(0.0);\n }\n xTexelC${r}Ready = 1;\n }\n\n xCOffset = xC + ${h};\n if(xCOffset >= 0 && xCOffset < ${o} && xTexelC${r+2}Ready == 0) {\n xTexelC${r+2} = getX(batch, xR, xCOffset, d1);\n if (xCOffset + 1 >= ${o}) {\n xTexelC${r+2}.zw = vec2(0.);\n }\n xTexelC${r+2}Ready = 1;\n }\n\n xC${n} = vec4(\n xTexelC${r}.xy, xTexelC${r+2}.xy);\n `,r+1`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${i} and dilations '${c}'`));const h=vl(a.shape,s.shape,i,c,o,u,!0);let f;return f=We().getBool("WEBGL_PACK_DEPTHWISECONV")&&h.strideWidth<=2&&h.outChannels/h.inChannels==1?new uM(h):new lM(h),n.runWebGLProgram(f,[a,s],"float32")}};class hM{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;const t=e.strideHeight,n=e.strideWidth,r=e.padInfo.top,a=e.padInfo.left,s=e.outChannels/e.inChannels;this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int wR = coords.x;\n int wC = coords.y;\n int d1 = coords.z;\n int dm = coords.w;\n int d2 = d1 * ${s} + dm;\n\n float dotProd = 0.0;\n\n // TO DO: Vec4 over the batch size\n for (int b = 0; b < ${e.batchSize}; b++) {\n for (int yR = 0; yR < ${e.outHeight}; yR++) {\n int xR = wR + yR * ${t} - ${r};\n\n if (xR < 0 || xR >= ${e.inHeight}) {\n continue;\n }\n\n for (int yC = 0; yC < ${e.outWidth}; yC++) {\n int xC = wC + yC * ${n} - ${a};\n\n if (xC < 0 || xC >= ${e.inWidth}) {\n continue;\n }\n\n float dyValue = getDy(b, yR, yC, d2);\n float xValue = getX(b, xR, xC, d1);\n dotProd += (xValue * dyValue);\n }\n }\n }\n setOutput(dotProd);\n }\n `}}class fM{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;const t=e.filterHeight,n=e.filterWidth,r=e.strideHeight,a=e.strideWidth,s=t-1-e.padInfo.top,i=n-1-e.padInfo.left,o=e.outChannels/e.inChannels;this.userCode=`\n const ivec2 pads = ivec2(${s}, ${i});\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords[0];\n int d1 = coords[3];\n ivec2 dyCorner = coords.yz - pads;\n int dyRCorner = dyCorner.x;\n int dyCCorner = dyCorner.y;\n\n float dotProd = 0.0;\n\n for (int wR = 0; wR < ${t}; wR++) {\n float dyR = float(dyRCorner + wR) / ${r}.0;\n\n if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n int wRPerm = ${t} - 1 - wR;\n\n for (int wC = 0; wC < ${n}; wC++) {\n float dyC = float(dyCCorner + wC) / ${a}.0;\n\n if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n int wCPerm = ${n} - 1 - wC;\n\n // TO DO: Vec4 over the channelMul\n for (int dm = 0; dm < ${o}; dm++) {\n int d2 = d1 * ${o} + dm;\n float xValue = getDy(batch, idyR, idyC, d2);\n float wValue = getW(wRPerm, wCPerm, d1, dm);\n dotProd += xValue * wValue;\n }\n }\n }\n setOutput(dotProd);\n }\n `}}const dM={kernelName:Rt,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{x:a,dy:s}=t,{strides:i,dilations:o,pad:l,dimRoundingMode:u,filterShape:c}=r,h=vl(a.shape,c,i,o,l,u,!0),f=new hM(h);return n.runWebGLProgram(f,[a,s],"float32")}},pM={kernelName:Ot,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{dy:a,filter:s}=t,{strides:i,dilations:o,pad:l,dimRoundingMode:u,inputShape:c}=r,h=vl(c,s.shape,i,o,l,u,!0),f=new fM(h);return n.runWebGLProgram(f,[a,s],"float32")}};class mM{constructor(e){this.variableNames=["X"],this.outputShape=[e,e],this.userCode="\n void main() {\n ivec2 coords = getOutputCoords();\n float val = coords[0] == coords[1] ? getX(coords[0]) : 0.0;\n setOutput(val);\n }\n "}}const gM={kernelName:Mt,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n}=e,{x:r}=t,a=[...r.shape,...r.shape],s=re(r.shape),i=nR({inputs:{x:r},backend:n,attrs:{shape:[s]}}),o=new mM(s),l=n.runWebGLProgram(o,[i],i.dtype),u=nR({inputs:{x:l},backend:n,attrs:{shape:a}});return n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(l),u}};class yM{constructor(e){this.variableNames=["x","W"],this.outputShape=e.outShape;const{inHeight:t,inWidth:n,padInfo:r,strideHeight:a,strideWidth:s,filterHeight:i,filterWidth:o,dilationHeight:l,dilationWidth:u}=e,{top:c,left:h}=r;this.userCode=`\n const ivec2 strides = ivec2(${a}, ${s});\n const ivec2 pads = ivec2(${c}, ${h});\n const float neg_infinity = -3.4e38;\n\n void main() {\n ivec4 coords = getOutputCoords();\n int batch = coords.x;\n int d1 = coords.w;\n ivec2 outTopLeftCorner =\n coords.yz * strides - pads;\n int hBeg = outTopLeftCorner.x;\n int wBeg = outTopLeftCorner.y;\n\n float curVal = neg_infinity;\n for (int h = 0; h < ${i}; h++) {\n int hIn = hBeg + h * ${l};\n\n if (hIn >= 0 && hIn < ${t}) {\n for (int w = 0; w < ${o}; w++) {\n int wIn = wBeg + w * ${u};\n\n if (wIn >= 0 && wIn < ${n}) {\n float xVal = getX(batch, hIn, wIn, d1);\n float wVal = getW(h, w, d1);\n\n float val = xVal + wVal;\n if (val > curVal) {\n curVal = val;\n }\n }\n }\n }\n }\n\n float result = curVal;\n setOutput(result);\n }\n `}}const bM={kernelName:Bt,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s}=t,{strides:i,pad:o,dilations:l}=r,u=gl(a.shape,s.shape,i,o,"NHWC",l);let c;const h=new yM(u);c=n.runWebGLProgram(h,[a,s],"float32");const f=nR({inputs:{x:c},backend:n,attrs:{shape:u.outShape}});return n.disposeIntermediateTensorInfo(c),f}},vM={kernelName:zt,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{equation:a}=r,s=t,{allDims:i,summedDims:o,idDims:l}=kd(a,s.length);Cd(i.length,l,s);const{path:u,steps:c}=Sd(o,l),h=c.length;let f=null,d=i.length;const p=[];for(let e=0;e=0&&(f=cR({inputs:{x:f},backend:n,attrs:{axis:u[e]-(i.length-d),keepDims:!1}}),p.push(f)),d--)}for(const e of p)e!==f&&n.disposeIntermediateTensorInfo(e);return f}},wM=KF({opSnippet:"return (x >= 0.0) ? x : (exp(x) - 1.0);",packedOpSnippet:"\n vec4 result;\n\n result.r = (x.r >= 0.0) ? x.r : (exp(x.r) - 1.0);\n result.g = (x.g >= 0.0) ? x.g : (exp(x.g) - 1.0);\n result.b = (x.b >= 0.0) ? x.b : (exp(x.b) - 1.0);\n result.a = (x.a >= 0.0) ? x.a : (exp(x.a) - 1.0);\n\n return result;\n"}),_M={kernelName:Wt,backendName:"webgl",kernelFunc:wM},xM={kernelName:Ut,backendName:"webgl",kernelFunc:e=>{const{inputs:t,backend:n}=e,{dy:r,y:a}=t,s=We().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new $F("\n vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.)));\n return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0))));\n",r.shape,a.shape):new BF("return (b >= 1.0) ? a : a * (b + 1.0);",r.shape,a.shape);return n.runWebGLProgram(s,[r,a],r.dtype)}},kM=qF({opSnippet:"return float(a == b);",packedOpSnippet:"\n return vec4(equal(a, b));\n",dtype:"bool"}),EM={kernelName:jt,backendName:"webgl",kernelFunc:kM},CM=KF({opSnippet:`\n // Error function is calculated approximately with elementary function.\n // See "Handbook of Mathematical Functions with Formulas,\n // Graphs, and Mathematical Tables", Abramowitz and Stegun.\n float p = ${id};\n float a1 = ${od};\n float a2 = ${ld};\n float a3 = ${ud};\n float a4 = ${cd};\n float a5 = ${hd};\n\n float sign = sign(x);\n x = abs(x);\n float t = 1.0 / (1.0 + p * x);\n return sign * (1.0 - (((((a5*t + a4)*t) + a3)*t + a2)*t + a1)*t*exp(-x*x));\n`}),SM={kernelName:Vt,backendName:"webgl",kernelFunc:CM},NM="return exp(x);",IM=KF({opSnippet:NM,packedOpSnippet:NM,cpuKernelImpl:KT}),AM={kernelName:Ht,backendName:"webgl",kernelFunc:IM};function DM(e){const{inputs:t,attrs:n,backend:r}=e,{dim:a}=n,{input:s}=t,i=s.shape.length,o=s.shape.slice();let l=a;return a<0&&(Q(-(i+1)<=a,(()=>`Axis must be in the interval [${-(i+1)}, ${i}]`)),l=i+a+1),o.splice(l,0,1),nR({inputs:{x:s},backend:r,attrs:{shape:o}})}const TM={kernelName:Gt,backendName:"webgl",kernelFunc:DM},FM="return exp(x) - 1.0;",RM=KF({opSnippet:FM,packedOpSnippet:FM,cpuKernelImpl:qT}),OM={kernelName:Xt,backendName:"webgl",kernelFunc:RM};class MM{constructor(e,t,n){this.variableNames=["real","imag"];const r=t[1];this.outputShape=t;const a=n?`2.0 * ${Math.PI}`:`-2.0 * ${Math.PI}`,s=n?`${r}.0`:"1.0";let i;if("real"===e)i="return real * expR - imag * expI;";else{if("imag"!==e)throw new Error(`FFT component must be either "real" or "imag", got ${e}.`);i="return real * expI + imag * expR;"}this.userCode=`\n const float exponentMultiplier = ${a};\n\n float unaryOpComplex(float real, float expR, float imag, float expI) {\n ${i}\n }\n\n float mulMatDFT(int batch, int index) {\n float indexRatio = float(index) / float(${r});\n float exponentMultiplierTimesIndexRatio =\n exponentMultiplier * indexRatio;\n\n float result = 0.0;\n\n for (int i = 0; i < ${r}; i++) {\n // x = (-2|2 * PI / N) * index * i;\n float x = exponentMultiplierTimesIndexRatio * float(i);\n float expR = cos(x);\n float expI = sin(x);\n float real = getReal(batch, i);\n float imag = getImag(batch, i);\n\n result +=\n unaryOpComplex(real, expR, imag, expI) / ${s};\n }\n\n return result;\n }\n\n void main() {\n ivec2 coords = getOutputCoords();\n setOutput(mulMatDFT(coords[0], coords[1]));\n }\n `}}function BM(e,t,n){const r=n.texData.get(e.dataId),a=re(e.shape),s=e.shape[e.shape.length-1],i=nR({inputs:{x:e},backend:n,attrs:{shape:[a/s,s]}}),o=i.shape,l=new MM("real",o,t),u=new MM("imag",o,t),c=[{dataId:r.complexTensorInfos.real.dataId,dtype:r.complexTensorInfos.real.dtype,shape:o},{dataId:r.complexTensorInfos.imag.dataId,dtype:r.complexTensorInfos.imag.dtype,shape:o}],h=n.runWebGLProgram(l,c,"float32"),f=n.runWebGLProgram(u,c,"float32"),d=zF({inputs:{real:h,imag:f},backend:n});n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(f);const p=nR({inputs:{x:d},backend:n,attrs:{shape:e.shape}});return n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(d),p}const $M={kernelName:Kt,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n}=e,{input:r}=t;return BM(r,!1,n)}};class PM{constructor(e,t){this.outputShape=[],this.variableNames=["x"],this.outputShape=e,this.userCode="\n uniform float value;\n void main() {\n // Input can be obtained from uniform value.\n setOutput(value);\n }\n "}getCustomSetupFunc(e){return(t,n)=>{null==this.valueLoc&&(this.valueLoc=t.getUniformLocationNoThrow(n,"value")),t.gl.uniform1f(this.valueLoc,e)}}}function LM(e){const{backend:t,attrs:n}=e,{shape:r,value:a}=n;let{dtype:s}=n;if(s=s||Se(a),"string"===s){const e=ge(s,re(r));return e.fill(a),t.makeTensorInfo(r,s,e)}{const e=new PM(r,a),n=e.getCustomSetupFunc(a);return t.runWebGLProgram(e,[],s,n)}}const zM={kernelName:qt,backendName:"webgl",kernelFunc:LM};class WM{constructor(e){this.variableNames=["Image"],this.outputShape=[];const t=e[2];this.outputShape=e,this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int x = coords[2];\n\n int coordX = ${t} - x;\n float outputValue;\n if(coordX >= 0 && coordX < ${t}) {\n outputValue = getImage(coords[0], coords[1], coordX, coords[3]);\n } else {\n outputValue = getImage(coords[0], coords[1], coords[2], coords[3]);\n }\n setOutput(outputValue);\n }\n `}}const UM={kernelName:Yt,backendName:"webgl",kernelFunc:({inputs:e,backend:t})=>{const{image:n}=e,r=t,a=new WM(n.shape);return r.runWebGLProgram(a,[n],n.dtype)}},VM="return floor(x);",jM=KF({opSnippet:VM,packedOpSnippet:VM,cpuKernelImpl:YT}),HM={kernelName:Jt,backendName:"webgl",kernelFunc:jM},GM=qF({opSnippet:"\n float s = sign(a) * sign(b);\n int ia = round(a);\n int ib = round(b);\n if (ib != 0) {\n // Windows (D3D) wants guaranteed non-zero int division at compile-time.\n return float(idiv(ia, ib, s));\n } else {\n return NAN;\n }\n",packedOpSnippet:"\n ivec4 ia = round(a);\n ivec4 ib = round(b);\n bvec4 cond = notEqual(ib, ivec4(0));\n ivec4 result = ivec4(0);\n vec4 s = sign(a) * sign(b);\n\n // Windows (D3D) wants guaranteed non-zero int division at compile-time.\n if (cond[0]) {\n result[0] = idiv(ia[0], ib[0], s[0]);\n }\n if (cond[1]) {\n result[1] = idiv(ia[1], ib[1], s[1]);\n }\n if (cond[2]) {\n result[2] = idiv(ia[2], ib[2], s[2]);\n }\n if (cond[3]) {\n result[3] = idiv(ia[3], ib[3], s[3]);\n }\n return vec4(result);\n",dtype:"int32"}),XM={kernelName:Zt,backendName:"webgl",kernelFunc:GM};class KM{constructor(e){this.variableNames=["A"];const t=fT(),[n,r]=e;this.outputShape=e,this.userCode=`\n void main() {\n ivec3 coords = getOutputCoords();\n int texR = coords[0];\n int texC = coords[1];\n int depth = coords[2];\n vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${r}.0, ${n}.0);\n\n vec4 values = ${t.texture2D}(A, uv);\n float value;\n if (depth == 0) {\n value = values.r;\n } else if (depth == 1) {\n value = values.g;\n } else if (depth == 2) {\n value = values.b;\n } else if (depth == 3) {\n value = values.a;\n }\n\n setOutput(floor(value * 255.0 + 0.5));\n }\n `}}class qM{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0;const t=fT(),[n,r]=e;this.outputShape=e,this.userCode=`\n void main() {\n ivec3 coords = getOutputCoords();\n int texR = coords[0];\n int texC = coords[1];\n int depth = coords[2];\n\n vec4 result = vec4(0.);\n\n for(int row=0; row<=1; row++) {\n for(int col=0; col<=1; col++) {\n texC = coords[1] + row;\n depth = coords[2] + col;\n\n vec2 uv = (vec2(texC, texR) + halfCR) /\n vec2(${r}.0, ${n}.0);\n vec4 values = ${t.texture2D}(A, uv);\n float value;\n if (depth == 0) {\n value = values.r;\n } else if (depth == 1) {\n value = values.g;\n } else if (depth == 2) {\n value = values.b;\n } else if (depth == 3) {\n value = values.a;\n }\n\n result[row * 2 + col] = floor(value * 255.0 + 0.5);\n }\n }\n\n ${t.output} = result;\n }\n `}}const YM={kernelName:Wr,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e;let{pixels:a}=t;const{numChannels:s}=r,i="undefined"!=typeof HTMLVideoElement&&a instanceof HTMLVideoElement,o="undefined"!=typeof HTMLImageElement&&a instanceof HTMLImageElement,[l,u]=i?[a.videoWidth,a.videoHeight]:[a.width,a.height],c=[u,l],h=[u,l,s];(o||i)&&(null==JM&&(JM=document.createElement("canvas").getContext("2d")),JM.canvas.width=l,JM.canvas.height=u,JM.drawImage(a,0,0,l,u),a=JM.canvas);const f=n.makeTensorInfo(c,"int32");n.texData.get(f.dataId).usage=$D.PIXELS,n.gpgpu.uploadPixelDataToTexture(n.getTexture(f.dataId),a);const d=We().getBool("WEBGL_PACK")?new qM(h):new KM(h),p=n.runWebGLProgram(d,[f],"int32");return n.disposeData(f.dataId),p}};let JM;const ZM={kernelName:jr,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dataFormat:c,dilations:h,dimRoundingMode:f,activation:d,leakyreluAlpha:p}=r,m=Il(c),g=vl(a.shape,s.shape,l,h,u,f,!1,m);let y;const b=[];if(1!==g.filterHeight||1!==g.filterWidth||1!==g.dilationHeight||1!==g.dilationWidth||1!==g.strideHeight||1!==g.strideWidth||"SAME"!==g.padInfo.type&&"VALID"!==g.padInfo.type)if(We().getBool("WEBGL_CONV_IM2COL")&&1===a.shape[0])y=PO({x:a,filter:s,convInfo:g,backend:n,bias:i,activation:d,preluActivationWeights:o,leakyreluAlpha:p});else{const e=null!=i,t=null!=o,r="leakyrelu"===d,l=d?YF(d,!1):null,u=new OO(g,e,l,t,r),c=[a,s];if(i&&c.push(i),o&&c.push(o),r){const e=n.makeTensorInfo([],"float32",ra(p,"float32"));c.push(e),b.push(e)}y=n.runWebGLProgram(u,c,"float32")}else y=$O({x:a,filter:s,convInfo:g,backend:n,bias:i,activation:d,preluActivationWeights:o,leakyreluAlpha:p});const v=nR({inputs:{x:y},backend:n,attrs:{shape:g.outShape}});return b.push(y),b.forEach((e=>n.disposeIntermediateTensorInfo(e))),v}},QM={kernelName:Hr,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dilations:c,dimRoundingMode:h,activation:f,leakyreluAlpha:d}=r,p=[];let m=c;null==m&&(m=[1,1]),Q(Nl(l,m),(()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${l} and dilations '${m}'`));const g=vl(a.shape,s.shape,l,m,u,h,!0),y=We().getBool("WEBGL_PACK_DEPTHWISECONV")&&g.strideWidth<=2&&g.outChannels/g.inChannels==1,b=f?YF(f,y):null,v=[a,s],w=null!=i,_=null!=o,x="leakyrelu"===f;if(w&&v.push(i),_&&v.push(o),x){const e=n.makeTensorInfo([],"float32",ra(d,"float32"));v.push(e),p.push(e)}let k;k=y?new uM(g,w,b,_,x):new lM(g,w,b,_,x);const E=n.runWebGLProgram(k,v,"float32");return p.forEach((e=>n.disposeIntermediateTensorInfo(e))),E}};class eB{constructor(e,t,n){this.sliceDim=e,this.strides=t,this.variableNames=["x","indices"],this.outputShape=n;const r=LT(t.length),a=LT(n.length),s=this.sliceDim>1?"strides[j]":"strides";this.userCode=`\n ${r} strides = ${r}(${this.strides});\n void main() {\n ${a} coords = getOutputCoords();\n int flattenIndex = 0;\n for (int j = 0; j < ${this.sliceDim}; j++) {\n int index = round(getIndices(coords[0], j));\n flattenIndex += index * ${s};\n }\n setOutput(getX(flattenIndex, coords[1]));\n }\n `}}const tB={kernelName:tn,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n}=e,{params:r,indices:a}=t,s=a.shape,i=s[s.length-1],[o,l,u,c]=Ei(r,a),h=nR({inputs:{x:a},backend:n,attrs:{shape:[l,i]}}),f=nR({inputs:{x:r},backend:n,attrs:{shape:[re(r.shape)/u,u]}}),d=new eB(i,c,[l,u]),p=n.runWebGLProgram(d,[f,h],f.dtype),m=nR({inputs:{x:p},backend:n,attrs:{shape:o}});return n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(f),n.disposeIntermediateTensorInfo(p),m}};class nB{constructor(e,t){this.variableNames=["A","indices"],this.outputShape=t,this.rank=t.length;const n=LT(this.rank),r=function(e,t){const n=["resRC.x","resRC.y","resRC.z","resRC.w"],r=[];for(let t=0;tn.disposeIntermediateTensorInfo(e))),n.makeTensorInfo(l.outputShape,r.dtype,r.values)}const p=new nB(h.shape,d),m=n.runWebGLProgram(p,[h,f],h.dtype);c.push(m);const g=nR({inputs:{x:m},backend:n,attrs:{shape:l.outputShape}});return c.forEach((e=>n.disposeIntermediateTensorInfo(e))),g}},aB=qF({opSnippet:"return float(a > b);",packedOpSnippet:"\n return vec4(greaterThan(a, b));\n",cpuKernelImpl:ZT,dtype:"bool"}),sB={kernelName:nn,backendName:"webgl",kernelFunc:aB},iB=qF({opSnippet:"return float(a >= b);",packedOpSnippet:"\n return vec4(greaterThanEqual(a, b));\n",dtype:"bool"}),oB={kernelName:rn,backendName:"webgl",kernelFunc:iB},lB={kernelName:sn,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n}=e,{input:r}=t;return BM(r,!0,n)}},uB=KF({opSnippet:"return float(!isnan(x) && !isinf(x));",dtype:"bool"}),cB={kernelName:ln,backendName:"webgl",kernelFunc:uB},hB=KF({opSnippet:"return float(isinf(x));",dtype:"bool"}),fB={kernelName:un,backendName:"webgl",kernelFunc:hB},dB=KF({opSnippet:"return float(isnan(x));",dtype:"bool"}),pB={kernelName:cn,backendName:"webgl",kernelFunc:dB},mB=qF({opSnippet:"return float(a < b);",packedOpSnippet:"\n return vec4(lessThan(a, b));\n",cpuKernelImpl:QT,dtype:"bool"}),gB={kernelName:fn,backendName:"webgl",kernelFunc:mB},yB=qF({opSnippet:"return float(a <= b);",packedOpSnippet:"\n return vec4(lessThanEqual(a, b));\n",dtype:"bool"}),bB={kernelName:dn,backendName:"webgl",kernelFunc:yB},vB={kernelName:pn,backendName:"webgl",kernelFunc:function(e){const{backend:t,attrs:n}=e,{start:r,stop:a,num:s}=n,i=eF(r,a,s);return t.makeTensorInfo([i.length],"float32",i)}},wB=KF({opSnippet:"if (x < 0.0) return NAN;\n return log(x);",packedOpSnippet:"\n vec4 result = log(x);\n vec4 isNaN = vec4(lessThan(x, vec4(0.0)));\n result.r = isNaN.r == 1.0 ? NAN : result.r;\n result.g = isNaN.g == 1.0 ? NAN : result.g;\n result.b = isNaN.b == 1.0 ? NAN : result.b;\n result.a = isNaN.a == 1.0 ? NAN : result.a;\n\n return result;\n",cpuKernelImpl:tF}),_B={kernelName:mn,backendName:"webgl",kernelFunc:wB},xB=KF({opSnippet:"return log(1.0 + x);"}),kB={kernelName:gn,backendName:"webgl",kernelFunc:xB},EB=qF({opSnippet:"return float(a >= 1.0 && b >= 1.0);",packedOpSnippet:"\n return vec4(\n vec4(greaterThanEqual(a, vec4(1.0))) *\n vec4(greaterThanEqual(b, vec4(1.0))));\n",dtype:"bool"}),CB={kernelName:yn,backendName:"webgl",kernelFunc:EB},SB=KF({opSnippet:"return float(!(x >= 1.0));"}),NB={kernelName:bn,backendName:"webgl",kernelFunc:SB},IB=qF({opSnippet:"return float(a >= 1.0 || b >= 1.0);",packedOpSnippet:"\n return min(\n vec4(greaterThanEqual(a, vec4(1.0))) +\n vec4(greaterThanEqual(b, vec4(1.0))),\n vec4(1.0));\n",dtype:"bool"}),AB={kernelName:vn,backendName:"webgl",kernelFunc:IB};class DB{constructor(e,t,n,r,a){this.variableNames=["x"],this.outputShape=[];const s=t,i=e[3]-1;let o;this.outputShape=e;const l=`float(${n}) + float(${r}) * sum`;o=.5===a?`inversesqrt(${l})`:1===a?`1.0/(${l})`:`exp(log(${l}) * float(-${a}));`,this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int r = coords[1];\n int c = coords[2];\n int d = coords[3];\n float x = getX(b, r, c, d);\n float sum = 0.0;\n for (int j = -${s}; j <= ${s}; j++) {\n int idx = d + j;\n if (idx >= 0 && idx <= ${i}) {\n float z = getX(b, r, c, idx);\n sum += z * z;\n }\n }\n float val = x * ${o};\n setOutput(val);\n }\n `}}class TB{constructor(e,t,n,r,a){this.variableNames=["x"],this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0;const s=t,i=e[3]-1;let o;this.outputShape=e;const l=`float(${n}) + float(${r}) * sum`;o=.5===a?`inversesqrt(${l})`:1===a?`1.0/(${l})`:`exp(log(${l}) * float(-${a}));`,this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords.x;\n int r = coords.y;\n int c = coords.z;\n int d = coords.w;\n\n bool hasNextCol = d < ${this.outputShape[3]};\n bool hasNextRow = c < ${this.outputShape[2]};\n\n vec4 sum = vec4(0.);\n vec4 xFragAtOutputCoords = getX(b, r, c, d);\n\n vec4 xAtOutputCoords = vec4(\n getChannel(xFragAtOutputCoords, vec2(c, d)),\n hasNextCol ?\n getChannel(xFragAtOutputCoords, vec2(c, d + 1)) : 0.0,\n hasNextRow ?\n getChannel(xFragAtOutputCoords , vec2(c + 1, d)) : 0.0,\n (hasNextRow && hasNextCol) ?\n getChannel(xFragAtOutputCoords, vec2(c + 1, d + 1)) : 0.0\n );\n\n int firstChannel = d - ${s};\n vec2 cache = vec2(0.);\n if(firstChannel >= 0){\n vec4 firstChannelFrag = getX(b, r, c, firstChannel);\n cache.x = getChannel(firstChannelFrag, vec2(c, firstChannel));\n if(hasNextRow){\n cache.y = getChannel(firstChannelFrag, vec2(c + 1, firstChannel));\n }\n }\n\n ivec2 depth = ivec2(d, d + 1);\n for (int j = - ${s}; j <= ${s}; j++) {\n ivec2 idx = depth + j;\n bvec2 aboveLowerBound = greaterThanEqual(idx, ivec2(0));\n bvec2 belowUpperBound = lessThanEqual(idx, ivec2(${i}));\n\n bool depthInRange = aboveLowerBound.x && belowUpperBound.x;\n bool depthPlusOneInRange = aboveLowerBound.y && belowUpperBound.y;\n\n if(depthInRange || depthPlusOneInRange){\n vec4 z = vec4(0.);\n vec4 xFragAtCurrentDepth;\n z.xz = cache.xy;\n if(depthPlusOneInRange && hasNextCol){\n xFragAtCurrentDepth = idx.y != d ?\n getX(b, r, c, idx.y) : xFragAtOutputCoords;\n z.y = getChannel(xFragAtCurrentDepth, vec2(c, idx.y));\n if(hasNextRow){\n z.w = getChannel(xFragAtCurrentDepth, vec2(c + 1, idx.y));\n }\n }\n cache.xy = z.yw;\n sum += z * z;\n }\n }\n vec4 result = xAtOutputCoords * ${o};\n setOutput(result);\n }\n `}}const FB={kernelName:_n,backendName:"webgl",kernelFunc:e=>{const{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{depthRadius:s,bias:i,alpha:o,beta:l}=r,u=We().getBool("WEBGL_PACK_NORMALIZATION")?new TB(a.shape,s,i,o,l):new DB(a.shape,s,i,o,l);return n.runWebGLProgram(u,[a],a.dtype)}};class RB{constructor(e,t,n,r,a){this.variableNames=["inputImage","outputImage","dy"],this.outputShape=[],this.outputShape=e,this.depth=e[3],this.depthRadius=t,this.bias=n,this.alpha=r,this.beta=a,this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int r = coords[1];\n int c = coords[2];\n\n float result = 0.0;\n for (int d = 0; d < ${this.depth}; ++d) {\n int depthBegin = int(max(0.0, float(d - ${t})));\n int depthEnd = int(min(float(${this.depth}),\n float(d + ${t} + 1)));\n\n const int MIN_DEPTH_BEGIN = 0;\n const int MAX_DEPTH_END = ${this.depth};\n\n float norm = 0.0;\n for (int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k) {\n if (k < depthBegin){\n continue;\n }\n else if (k >= depthBegin && k < depthEnd) {\n norm += getInputImage(b, r, c, k) * getInputImage(b, r, c, k);\n }\n else {\n break;\n }\n }\n\n norm = float(${r}) * norm + float(${n});\n\n for(int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k){\n if (k < depthBegin){\n continue;\n }\n else if (k >= depthBegin && k < depthEnd){\n float dyi = -2.0 * float(${r})\n * float(${a})\n * getInputImage(b ,r ,c, k) * getOutputImage(b, r, c, d)\n / norm;\n if (k == d) {\n dyi += pow(norm, -1.0 * ${a});\n }\n if (k == coords[3]) {\n dyi *= getDy(b, r, c, d);\n result += dyi;\n }\n }\n else {\n break;\n }\n }\n }\n setOutput(result);\n }\n `}}const OB={kernelName:xn,backendName:"webgl",kernelFunc:e=>{const{inputs:t,backend:n,attrs:r}=e,{x:a,y:s,dy:i}=t,{depthRadius:o,bias:l,alpha:u,beta:c}=r,h=new RB(a.shape,o,l,u,c);return n.runWebGLProgram(h,[a,s,i],a.dtype)}};function MB(e){const{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{reductionIndices:s,keepDims:i}=r,o=a.shape.length,l=de(s,a.shape);let u=l;const c=qu(u,o),h=null!=c,f=n.shouldExecuteOnCPU([a]);let d=a;if(h){if(f){const e=n.texData.get(d.dataId).values,t=new Array(o);for(let e=0;e 0. ? NAN : result.r;\n result.g = isNaN.g > 0. ? NAN : result.g;\n result.b = isNaN.b > 0. ? NAN : result.b;\n result.a = isNaN.a > 0. ? NAN : result.a;\n\n return result;\n",cpuKernelImpl:rF}),PB={kernelName:En,backendName:"webgl",kernelFunc:$B},LB={kernelName:Cn,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{x:a}=t;cT(a,"maxPool");const{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=r;Q(Nl(i,1),(()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${i} and dilations '1'`));const u=yl(a.shape,s,i,1,o,l);if(1===u.filterWidth&&1===u.filterHeight&&se(u.inShape,u.outShape))return PF({inputs:{x:a},backend:n});const c=new XR(u,"max",!1);return n.runWebGLProgram(c,[a],a.dtype)}},zB={kernelName:Nn,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{filterSize:s,strides:i,pad:o,dataFormat:l,dimRoundingMode:u}=r,c=bl(a.shape,s,i,[1,1,1],o,u,l),h=new KR(c,"max",!1);return n.runWebGLProgram(h,[a],a.dtype)}};class WB{constructor(e){this.variableNames=["dy","maxPos"],this.outputShape=e.inShape;const t=e.strideHeight,n=e.strideWidth,r=e.dilationHeight,a=e.effectiveFilterHeight,s=e.effectiveFilterWidth,i=a-1-e.padInfo.top,o=s-1-e.padInfo.left,l=a*s-1;this.userCode=`\n const ivec2 pads = ivec2(${i}, ${o});\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n\n ivec2 dyRCCorner = coords.yz - pads;\n int dyRCorner = dyRCCorner.x;\n int dyCCorner = dyRCCorner.y;\n\n // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n for (int wR = 0; wR < ${a};\n wR += ${r}) {\n float dyR = float(dyRCorner + wR) / ${t}.0;\n\n if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n for (int wC = 0; wC < ${s}; wC++) {\n float dyC = float(dyCCorner + wC) / ${n}.0;\n\n if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n float dyValue = getDy(b, idyR, idyC, d);\n int maxPosValue = ${l} - int(getMaxPos(b, idyR, idyC, d));\n\n // Get the current value, check it against the value from the\n // position matrix.\n int curPosValue = wR * ${s} + wC;\n float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0);\n\n dotProd += dyValue * mask;\n }\n }\n setOutput(dotProd);\n }\n `}}class UB{constructor(e){this.variableNames=["dy","maxPos"],this.outputShape=e.inShape;const t=e.strideDepth,n=e.strideHeight,r=e.strideWidth,a=e.dilationDepth,s=e.dilationHeight,i=e.dilationWidth,o=e.effectiveFilterDepth,l=e.effectiveFilterHeight,u=e.effectiveFilterWidth,c=o-1-e.padInfo.front,h=l-1-e.padInfo.top,f=u-1-e.padInfo.left,d=o*l*u-1;this.userCode=`\n const ivec3 pads = ivec3(${c}, ${h}, ${f});\n\n void main() {\n ivec5 coords = getOutputCoords();\n int batch = coords.x;\n int ch = coords.u;\n\n ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;\n int dyDCorner = dyCorner.x;\n int dyRCorner = dyCorner.y;\n int dyCCorner = dyCorner.z;\n\n // Convolve dy(?, ?, ?, ch) with pos mask(:, :, :, d) to get\n // dx(xD, xR, xC, ch).\n // ? = to be determined. : = across all values in that axis.\n float dotProd = 0.0;\n\n for (int wD = 0; wD < ${o};\n wD += ${a}) {\n float dyD = float(dyDCorner + wD) / ${t}.0;\n\n if (dyD < 0.0 || dyD >= ${e.outDepth}.0 || fract(dyD) > 0.0) {\n continue;\n }\n int idyD = int(dyD);\n\n for (int wR = 0; wR < ${l};\n wR += ${s}) {\n float dyR = float(dyRCorner + wR) / ${n}.0;\n\n if (dyR < 0.0 || dyR >= ${e.outHeight}.0 ||\n fract(dyR) > 0.0) {\n continue;\n }\n int idyR = int(dyR);\n\n for (int wC = 0; wC < ${u};\n wC += ${i}) {\n float dyC = float(dyCCorner + wC) / ${r}.0;\n\n if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||\n fract(dyC) > 0.0) {\n continue;\n }\n int idyC = int(dyC);\n\n float dyValue = getDy(batch, idyD, idyR, idyC, ch);\n int maxPosValue = ${d} -\n int(getMaxPos(batch, idyD, idyR, idyC, ch));\n\n // Get the current value, check it against the value from the\n // position matrix.\n int curPosValue =\n wD * ${l} * ${u} +\n wR * ${u} + wC;\n float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0);\n\n dotProd += dyValue * mask;\n }\n }\n }\n setOutput(dotProd);\n }\n `}}const VB={kernelName:In,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{dy:a,input:s}=t,i=s,{filterSize:o,strides:l,pad:u,dimRoundingMode:c}=r,h=bl(i.shape,o,l,[1,1,1],u,c),f=new KR(h,"max",!0),d=n.runWebGLProgram(f,[i],i.dtype),p=new UB(h),m=n.runWebGLProgram(p,[a,d],i.dtype);return n.disposeIntermediateTensorInfo(d),m}},jB={kernelName:Sn,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{dy:a,input:s,output:i}=t,o=s;cT([s,i],"maxPoolGrad");const{filterSize:l,strides:u,pad:c,dimRoundingMode:h}=r,f=yl(o.shape,l,u,1,c,h),d=new XR(f,"max",!0),p=n.runWebGLProgram(d,[o],o.dtype),m=new WB(f),g=n.runWebGLProgram(m,[a,p],o.dtype);return n.disposeIntermediateTensorInfo(p),g}},HB={kernelName:An,backendName:"webgl",kernelFunc:({inputs:e,attrs:t,backend:n})=>{const{x:r}=e,{filterSize:a,strides:s,pad:i,includeBatchInIndex:o}=t,l=n;Q(4===r.shape.length,(()=>`Error in maxPool: input must be rank 4 but got rank ${r.shape.length}.`));const u=[1,1];Q(Nl(s,u),(()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${s} and dilations '${u}'`));const c=yl(r.shape,a,s,u,i),[h,f]=function(e,t,n,r){let a=new XR(n,"max",!1);const s=r.runWebGLProgram(a,[e],"float32");return a=new XR(n,"max",!0,!0,t),[s,r.runWebGLProgram(a,[e],"float32")]}(r,o,c,l);return[h,f]}},GB={kernelName:Dn,backendName:"webgl",kernelFunc:({inputs:e,attrs:t,backend:n})=>{const{x:r}=e,{keepDims:a,axis:s}=t,i=n,o=r.shape.length,l=de(s,r.shape);let u=l;const c=qu(u,o),h=null!=c,f=i.shouldExecuteOnCPU([r]),d=[];let p=r;if(h){if(f){const e=i.texData.get(p.dataId).values,t=new Array(o);for(let e=0;e 0. ? NAN : result.r;\n result.g = isNaN.g > 0. ? NAN : result.g;\n result.b = isNaN.b > 0. ? NAN : result.b;\n result.a = isNaN.a > 0. ? NAN : result.a;\n\n return result;\n",cpuKernelImpl:aF}),qB={kernelName:Fn,backendName:"webgl",kernelFunc:KB};class YB{constructor(e,t,n){this.variableNames=["x"],this.outputShape=t.map(((t,n)=>t[0]+e[n]+t[1]));const r=e.length,a=LT(r),s=t.map((e=>e[0])).join(","),i=t.map(((t,n)=>t[0]+e[n])).join(","),o=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,r),l="reflect"===n?0:1;this.userCode=1!==r?`\n ${a} start = ${a}(${s});\n ${a} end = ${a}(${i});\n\n void main() {\n ${a} outC = getOutputCoords();\n for (int i = 0; i < ${r}; i++) {\n if (outC[i] < start[i]) {\n outC[i] = start[i] * 2 - outC[i] - ${l};\n } else if(outC[i] >= end[i]) {\n outC[i] = (end[i] - 1) * 2 - outC[i] + ${l};\n }\n }\n ${a} coords = outC - start;\n setOutput(getX(${o}));\n }\n `:`\n int start = ${s};\n int end = ${i};\n\n void main() {\n int outC = getOutputCoords();\n if (outC < start) {\n outC = start * 2 - outC - ${l};\n } else if(outC >= end) {\n outC = (end - 1) * 2 - outC + ${l};\n }\n setOutput(getX(outC - start));\n }\n `}}class JB{constructor(e,t,n){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t.map(((t,n)=>t[0]+e[n]+t[1]));const r=e.length,a=LT(r),s=t.map((e=>e[0])).join(","),i=t.map(((t,n)=>t[0]+e[n])).join(","),o=_F("rc",r),l=_F("source",r),u=`${o[r-1]} < ${this.outputShape[r-1]}`,c=1===r?"source":`vec2(${l.slice(-2).join()})`,h="reflect"===n?0:1;let f="";if(1===r){const e=`\n ${a} source = rc;\n if (source < start) {\n source = start * 2 - source - ${h};\n } else if (source >= end) {\n source = (end - 1) * 2 - source + ${h};\n }\n source -= start;\n `;f=`\n ${a} rc = outputLoc;\n ${e}\n result[0] = getChannel(getX(${l.join()}), ${c});\n ${o[r-1]} += 1;\n if(${u}) {\n ${e}\n result[1] = getChannel(getX(${l.join()}), ${c});\n }\n `}else{const e=`\n ${a} source = rc;\n ${a} lt = ${a}(lessThan(source, start));\n ${a} gte = ${a}(greaterThanEqual(source, end));\n ${a} orig = 1 - (lt + gte);\n source = orig * source +\n lt * (start * 2 - source - ${h}) +\n gte * ((end - 1) * 2 - source + ${h});\n source -= start;\n `;f=`\n ${a} rc = outputLoc;\n ${e}\n result[0] = getChannel(getX(${l.join()}), ${c});\n ${o[r-1]} += 1;\n if(${u}) {\n ${e}\n result[1] = getChannel(getX(${l.join()}), ${c});\n }\n rc = outputLoc;\n ${o[r-2]} += 1;\n if(${o[r-2]} < ${this.outputShape[r-2]}) {\n ${e}\n result[2] = getChannel(getX(${l.join()}), ${c});\n ${o[r-1]} += 1;\n if(${u}) {\n ${e}\n result[3] = getChannel(getX(${l.join()}), ${c});\n }\n }\n `}this.userCode=`\n const ${a} start = ${a}(${s});\n const ${a} end = ${a}(${i});\n\n void main() {\n ${a} outputLoc = getOutputCoords();\n vec4 result = vec4(0.);\n ${f}\n setOutput(result);\n }\n `}}const ZB={kernelName:Rn,backendName:"webgl",kernelFunc:({inputs:e,backend:t,attrs:n})=>{const{x:r}=e,{paddings:a,mode:s}=n,i=We().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new JB(r.shape,a,s):new YB(r.shape,a,s);return t.runWebGLProgram(i,[r],r.dtype)}},QB=qF({opSnippet:"if (b == 0.0) return NAN;\n return mod(a, b);",packedOpSnippet:"\n vec4 result = mod(a, b);\n vec4 isNaN = vec4(equal(b, vec4(0.0)));\n \n result.r = isNaN.r > 0. ? NAN : result.r;\n result.g = isNaN.g > 0. ? NAN : result.g;\n result.b = isNaN.b > 0. ? NAN : result.b;\n result.a = isNaN.a > 0. ? NAN : result.a;\n\n return result;\n"}),e$={kernelName:On,backendName:"webgl",kernelFunc:QB};class t${constructor(e,t,n){this.variableNames=["probs"],this.outputShape=[e,n],this.userCode=`\n uniform float seed;\n\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n\n float r = random(seed);\n float cdf = 0.0;\n\n for (int i = 0; i < ${t-1}; i++) {\n cdf += getProbs(batch, i);\n\n if (r < cdf) {\n setOutput(float(i));\n return;\n }\n }\n\n // If no other event happened, last event happened.\n setOutput(float(${t-1}));\n }\n `}getCustomSetupFunc(e){return(t,n)=>{null==this.seedLoc&&(this.seedLoc=t.getUniformLocation(n,"seed")),t.gl.uniform1f(this.seedLoc,e)}}}const n$=qF({opSnippet:"\nif (a == b) {\n return 1.0;\n};\nreturn a / b;",packedOpSnippet:"\n // vec4 one = vec4(equal(a, b));\n // return one + (vec4(1.0) - one) * a / b;\n vec4 result = a / b;\n if(a.x == b.x) {\n result.x = 1.;\n }\n if(a.y == b.y) {\n result.y = 1.;\n }\n if(a.z == b.z) {\n result.z = 1.;\n }\n if(a.w == b.w) {\n result.w = 1.;\n }\n\n return result;\n",checkOutOfBounds:!0}),r$={kernelName:Lt,backendName:"webgl",kernelFunc:n$},a$="return a - b;",s$=qF({opSnippet:a$,packedOpSnippet:a$,supportsComplex:!0,cpuKernelImpl:mF}),i$={kernelName:Ar,backendName:"webgl",kernelFunc:s$};function o$(e){const{inputs:t,backend:n,attrs:r}=e,{logits:a}=t,{dim:s}=r,i=de([s],a.shape),o=MB({inputs:{x:a},backend:n,attrs:{reductionIndices:i,keepDims:!1}}),l=Xu(o.shape,i),u=nR({inputs:{x:o},backend:n,attrs:{shape:l}}),c=s$({inputs:{a,b:u},backend:n}),h=IM({inputs:{x:c},backend:n}),f=cR({inputs:{x:h},backend:n,attrs:{axis:i,keepDims:!1}}),d=nR({inputs:{x:f},backend:n,attrs:{shape:l}}),p=n$({inputs:{a:h,b:d},backend:n});return n.disposeIntermediateTensorInfo(o),n.disposeIntermediateTensorInfo(u),n.disposeIntermediateTensorInfo(c),n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(f),n.disposeIntermediateTensorInfo(d),p}const l$={kernelName:xr,backendName:"webgl",kernelFunc:o$},u$={kernelName:Mn,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{logits:a}=t,{numSamples:s,seed:i,normalized:o}=r,l=o?a:o$({inputs:{logits:a},backend:n,attrs:{dim:a.shape.length-1}}),u=l.shape[0],c=l.shape[1],h=new t$(u,c,s),f=h.getCustomSetupFunc(i),d=n.runWebGLProgram(h,[l],"int32",f);return o||n.disposeIntermediateTensorInfo(l),d}},c$="return -x;",h$={kernelName:$n,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n}=e,{x:r}=t;if(n.shouldExecuteOnCPU([r])){const e=n.texData.get(r.dataId),[t,a]=iF(e.values,r.shape,r.dtype);return n.makeTensorInfo(a,r.dtype,t)}let a;return a=We().getBool("WEBGL_PACK_UNARY_OPERATIONS")?new TF(r.shape,c$):new IF(r.shape,c$),n.runWebGLProgram(a,[r],r.dtype)}},f$=uf,d$={kernelName:Ln,backendName:"webgl",kernelFunc:function(e){fd("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");const{inputs:t,backend:n,attrs:r}=e,{boxes:a,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l}=r,u=n.readSync(a.dataId),c=n.readSync(s.dataId),{selectedIndices:h}=f$(u,c,i,o,l);return n.makeTensorInfo([h.length],"int32",new Int32Array(h))}},p$=cf,m$={kernelName:zn,backendName:"webgl",kernelFunc:function(e){fd("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");const{inputs:t,backend:n,attrs:r}=e,{boxes:a,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l,padToMaxOutputSize:u}=r,c=n.readSync(a.dataId),h=n.readSync(s.dataId),{selectedIndices:f,validOutputs:d}=p$(c,h,i,o,l,u);return[n.makeTensorInfo([f.length],"int32",new Int32Array(f)),n.makeTensorInfo([],"int32",new Int32Array([d]))]}},g$=hf,y$={kernelName:Wn,backendName:"webgl",kernelFunc:function(e){fd("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");const{inputs:t,backend:n,attrs:r}=e,{boxes:a,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l,softNmsSigma:u}=r,c=n.readSync(a.dataId),h=n.readSync(s.dataId),f=i,d=o,p=l,m=u,{selectedIndices:g,selectedScores:y}=g$(c,h,f,d,p,m);return[n.makeTensorInfo([g.length],"int32",new Int32Array(g)),n.makeTensorInfo([y.length],"float32",new Float32Array(y))]}};class b${constructor(e,t,n,r){this.variableNames=["indices"],this.outputShape=[e,t],this.userCode=`\n void main() {\n ivec2 coords = getOutputCoords();\n int index = round(getIndices(coords.x));\n setOutput(mix(float(${r}), float(${n}),\n float(index == coords.y)));\n }\n `}}const v$={kernelName:Vn,backendName:"webgl",kernelFunc:e=>{const{inputs:t,backend:n,attrs:r}=e,{indices:a}=t,{depth:s,onValue:i,offValue:o}=r,l=re(a.shape),u=new b$(l,s,i,o),c=nR({inputs:{x:a},backend:n,attrs:{shape:[l]}}),h=n.runWebGLProgram(u,[c],a.dtype);n.disposeIntermediateTensorInfo(c);const f=nR({inputs:{x:h},backend:n,attrs:{shape:[...a.shape,s]}});return n.disposeIntermediateTensorInfo(h),f}};function w$(e){const{inputs:t,backend:n}=e,{x:r}=t;if("complex64"===r.dtype){const e=pO({inputs:{input:r},backend:n}),t=w$({inputs:{x:e},backend:n}),a=AO({inputs:{input:r},backend:n}),s=w$({inputs:{x:a},backend:n}),i=zF({inputs:{real:t,imag:s},backend:n});return n.disposeIntermediateTensorInfo(e),n.disposeIntermediateTensorInfo(t),n.disposeIntermediateTensorInfo(a),n.disposeIntermediateTensorInfo(s),i}return LM({attrs:{shape:r.shape,dtype:r.dtype,value:"string"===r.dtype?"":0},backend:n})}const _$={kernelName:Lr,backendName:"webgl",kernelFunc:w$},x$={kernelName:Un,backendName:"webgl",kernelFunc:function e(t){const{inputs:n,backend:r}=t,{x:a}=n;if("string"===a.dtype)throw new Error("onesLike is not supported under string dtype");if("complex64"===a.dtype){const t=pO({inputs:{input:a},backend:r}),n=e({inputs:{x:t},backend:r}),s=AO({inputs:{input:a},backend:r}),i=w$({inputs:{x:s},backend:r}),o=zF({inputs:{real:n,imag:i},backend:r});return r.disposeIntermediateTensorInfo(t),r.disposeIntermediateTensorInfo(n),r.disposeIntermediateTensorInfo(s),r.disposeIntermediateTensorInfo(i),o}return LM({attrs:{shape:a.shape,dtype:a.dtype,value:1},backend:r})}},k$={kernelName:jn,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{axis:a}=r;if(1===t.length)return DM({inputs:{input:t[0]},backend:n,attrs:{dim:a}});const s=t[0].shape,i=t[0].dtype;t.forEach((e=>{ee(s,e.shape,"All tensors passed to stack must have matching shapes"),Q(i===e.dtype,(()=>"All tensors passed to stack must have matching dtypes"))}));const o=[],l=FO({inputs:t.map((e=>{const t=DM({inputs:{input:e},backend:n,attrs:{dim:a}});return o.push(t),t})),backend:n,attrs:{axis:a}});return o.forEach((e=>n.disposeIntermediateTensorInfo(e))),l}};class E${constructor(e,t,n){this.variableNames=["x"],this.outputShape=t.map(((t,n)=>t[0]+e[n]+t[1]));const r=e.length,a=LT(r),s=t.map((e=>e[0])).join(","),i=t.map(((t,n)=>t[0]+e[n])).join(","),o=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,r);this.userCode=1!==r?`\n ${a} start = ${a}(${s});\n ${a} end = ${a}(${i});\n uniform float value;\n\n void main() {\n ${a} outC = getOutputCoords();\n if (any(lessThan(outC, start)) || any(greaterThanEqual(outC, end))) {\n setOutput(value);\n } else {\n ${a} coords = outC - start;\n setOutput(getX(${o}));\n }\n }\n `:`\n int start = ${s};\n int end = ${i};\n uniform float value;\n\n void main() {\n int outC = getOutputCoords();\n if (outC < start || outC >= end) {\n setOutput(value);\n } else {\n setOutput(getX(outC - start));\n }\n }\n `}getCustomSetupFunc(e){return(t,n)=>{null==this.valueLoc&&(this.valueLoc=t.getUniformLocationNoThrow(n,"value")),t.gl.uniform1f(this.valueLoc,e)}}}class C${constructor(e,t,n){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t.map(((t,n)=>t[0]+e[n]+t[1]));const r=e.length,a=LT(r),s=t.map((e=>e[0])).join(","),i=t.map(((t,n)=>t[0]+e[n])).join(","),o=_F("rc",r),l=_F("source",r),u=`${o[r-1]} < ${this.outputShape[r-1]}`,c=1===r?"source":`vec2(${l.slice(-2).join()})`,h=[`${a} rc = outputLoc;`,`${o[r-1]} += 1;\n if(${u}) {\n `,1===r?"":`}\n rc = outputLoc;\n ${o[r-2]} += 1;\n if(${o[r-2]} < ${this.outputShape[r-2]}) {`,1===r?"":` ${o[r-1]} += 1;\n if(${u}) {`],f=1===r?"rc < start || rc >= end":"any(lessThan(rc, start)) || any(greaterThanEqual(rc, end))";let d="";for(let e=0,t=1===r?2:4;e{null==this.valueLoc&&(this.valueLoc=t.getUniformLocationNoThrow(n,"value")),t.gl.uniform1f(this.valueLoc,e)}}}const S$=e=>{const{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{paddings:s,constantValue:i}=r,o=We().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new C$(a.shape,s,i):new E$(a.shape,s,i),l=o.getCustomSetupFunc(i);return n.runWebGLProgram(o,[a],a.dtype,l)},N$={kernelName:Hn,backendName:"webgl",kernelFunc:S$},I$=qF({opSnippet:"\n if(a < 0.0 && floor(b) < b){\n return NAN;\n }\n if (b == 0.0) {\n return 1.0;\n }\n return (round(mod(b, 2.0)) != 1) ?\n pow(abs(a), b) : sign(a) * pow(abs(a), b);\n",packedOpSnippet:"\n // isModRound1 has 1 for components with round(mod(b, 2.0)) == 1, 0 otherwise.\n vec4 isModRound1 = vec4(equal(round(mod(b, 2.0)), ivec4(1)));\n vec4 multiplier = sign(a) * isModRound1 + (vec4(1.0) - isModRound1);\n vec4 result = multiplier * pow(abs(a), b);\n\n // Ensure that a^0 = 1, including 0^0 = 1 as this correspond to TF and JS\n bvec4 isExpZero = equal(b, vec4(0.0));\n result.r = isExpZero.r ? 1.0 : result.r;\n result.g = isExpZero.g ? 1.0 : result.g;\n result.b = isExpZero.b ? 1.0 : result.b;\n result.a = isExpZero.a ? 1.0 : result.a;\n\n vec4 isNaN = vec4(lessThan(a, vec4(0.0))) * vec4(lessThan(floor(b), b));\n \n result.r = isNaN.r > 0. ? NAN : result.r;\n result.g = isNaN.g > 0. ? NAN : result.g;\n result.b = isNaN.b > 0. ? NAN : result.b;\n result.a = isNaN.a > 0. ? NAN : result.a;\n\n return result;\n"}),A$={kernelName:Xn,backendName:"webgl",kernelFunc:I$},D$={kernelName:qn,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,keepDims:i}=r,o=a.shape.length,l=[],u=de(s,a.shape);let c=u;const h=qu(c,o);let f,d=a;if(null!=h&&(d=fR({inputs:{x:a},backend:n,attrs:{perm:h}}),c=Ju(c.length,o),l.push(d)),Ku("prod",c,o),n.shouldExecuteOnCPU([d])){const e=n.texData.get(d.dataId).values,{outVals:t,outShape:r,outDtype:a}=oF(d.shape,d.dtype,e,c);f=n.makeTensorInfo(r,a,t)}else{const[e,t]=Gu(d.shape,c),r=re(t),s=nR({inputs:{x:d},backend:n,attrs:{shape:[-1,r]}}),i=iR(s,Ta(a.dtype),"prod",n);f=nR({inputs:{x:i},backend:n,attrs:{shape:e}}),l.push(s),l.push(i)}if(i){l.push(f);const e=Xu(f.shape,u);f=nR({inputs:{x:f},backend:n,attrs:{shape:e}})}return l.forEach((e=>n.disposeIntermediateTensorInfo(e))),f}},T$=e=>{const{backend:t,attrs:n}=e,{start:r,stop:a,step:s,dtype:i}=n,o=lF(r,a,s,i);return t.makeTensorInfo([o.length],i,o)},F$={kernelName:Yn,backendName:"webgl",kernelFunc:T$},R$=KF({opSnippet:"return 1.0 / x;"}),O$={kernelName:Zn,backendName:"webgl",kernelFunc:R$},M$=KF({opSnippet:"if (isnan(x)) return x;\n return (x < 0.0) ? 0.0 : x;\n",packedOpSnippet:"\n vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0)));\n bvec4 isNaN = isnan(x);\n\n result.r = isNaN.r ? x.r : result.r;\n result.g = isNaN.g ? x.g : result.g;\n result.b = isNaN.b ? x.b : result.b;\n result.a = isNaN.a ? x.a : result.a;\n\n return result;\n"}),B$={kernelName:Qn,backendName:"webgl",kernelFunc:M$},$$=KF({opSnippet:"if (isnan(x)) return x;\n return (x < 0.0) ? 0.0 : min(6.0, x);\n",packedOpSnippet:"\n vec4 result = min(x, vec4(6.)) * vec4(greaterThanEqual(x, vec4(0.0)));\n bvec4 isNaN = isnan(x);\n\n result.r = isNaN.r ? x.r : result.r;\n result.g = isNaN.g ? x.g : result.g;\n result.b = isNaN.b ? x.b : result.b;\n result.a = isNaN.a ? x.a : result.a;\n\n return result;\n"}),P$={kernelName:sr,backendName:"webgl",kernelFunc:$$};class L${constructor(e,t,n,r,a){this.variableNames=["A"],this.outputShape=[];const[s,i,o,l]=e;this.outputShape=[s,t,n,l];const u=[r&&t>1?i-1:i,r&&n>1?o-1:o],c=[r&&t>1?t-1:t,r&&n>1?n-1:n];let h;h=a?"(vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC - vec2(0.5)":"vec2(yRC) * effectiveInputOverOutputRatioRC",this.userCode=`\n const vec2 effectiveInputOverOutputRatioRC = vec2(\n ${u[0]/c[0]},\n ${u[1]/c[1]});\n const vec2 inputShapeRC = vec2(${i}.0, ${o}.0);\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n ivec2 yRC = coords.yz;\n\n // Fractional source index.\n vec2 sourceFracIndexRC = ${h};\n\n // Compute the four integer indices.\n ivec2 sourceFloorRC = ivec2(max(sourceFracIndexRC, vec2(0.0)));\n ivec2 sourceCeilRC = ivec2(\n min(inputShapeRC - 1.0, ceil(sourceFracIndexRC)));\n\n float topLeft = getA(b, sourceFloorRC.x, sourceFloorRC.y, d);\n float bottomLeft = getA(b, sourceCeilRC.x, sourceFloorRC.y, d);\n float topRight = getA(b, sourceFloorRC.x, sourceCeilRC.y, d);\n float bottomRight = getA(b, sourceCeilRC.x, sourceCeilRC.y, d);\n\n vec2 fracRC = sourceFracIndexRC - vec2(sourceFloorRC);\n\n float top = topLeft + (topRight - topLeft) * fracRC.y;\n float bottom = bottomLeft + (bottomRight - bottomLeft) * fracRC.y;\n float newValue = top + (bottom - top) * fracRC.x;\n\n setOutput(newValue);\n }\n `}}class z${constructor(e,t,n,r,a){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];const[s,i,o,l]=e;this.outputShape=[s,t,n,l];const u=[r&&t>1?i-1:i,r&&n>1?o-1:o],c=[r&&t>1?t-1:t,r&&n>1?n-1:n];let h;h=a?"(vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC - vec3(0.5)":"vec3(yRC) * effectiveInputOverOutputRatioRC",this.userCode=`\n const vec3 effectiveInputOverOutputRatioRC = vec3(\n ${u[0]/c[0]},\n ${u[1]/c[1]},\n ${u[1]/c[1]});\n const vec3 inputShapeRC = vec3(${i}.0, ${o}.0,\n ${o}.0);\n\n float getAValue(int b, int r, int c, int d) {\n return getChannel(getA(b, r, c, d), vec2(c, d));\n }\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n // Calculate values for next column in yRC.z.\n ivec3 yRC = coords.yzz + ivec3(0, 0, 1);\n\n // Fractional source index.\n vec3 sourceFracIndexRC = ${h};\n\n // Compute the four integer indices.\n ivec3 sourceFloorRC = ivec3(max(sourceFracIndexRC, vec3(0.0)));\n ivec3 sourceCeilRC = ivec3(\n min(inputShapeRC - 1.0, ceil(sourceFracIndexRC)));\n\n // Should we calculate next column and row elements in 2x2 packed cell.\n bool hasNextCol = d < ${l-1};\n bool hasNextRow = coords.z < ${n-1};\n\n // In parallel, construct four corners for all four components in\n // packed 2x2 cell.\n vec4 topLeft = vec4(\n getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d),\n hasNextCol ? getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d + 1)\n : 0.0,\n hasNextRow ? getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d)\n : 0.0,\n (hasNextRow && hasNextCol) ?\n getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d + 1) : 0.0);\n\n vec4 bottomLeft = vec4(\n getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d),\n hasNextCol ? getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d + 1)\n : 0.0,\n hasNextRow ? getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d)\n : 0.0,\n (hasNextRow && hasNextCol) ?\n getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d + 1) : 0.0);\n\n vec4 topRight = vec4(\n getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d),\n hasNextCol ? getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d + 1)\n : 0.0,\n hasNextRow ? getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d)\n : 0.0,\n (hasNextRow && hasNextCol) ?\n getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d + 1) : 0.0);\n\n vec4 bottomRight = vec4(\n getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d),\n hasNextCol ? getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d + 1)\n : 0.0,\n hasNextRow ? getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d)\n : 0.0,\n (hasNextRow && hasNextCol) ?\n getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d + 1) : 0.0);\n\n vec3 fracRC = sourceFracIndexRC - vec3(sourceFloorRC);\n\n vec4 top = mix(topLeft, topRight, fracRC.yyzz);\n vec4 bottom = mix(bottomLeft, bottomRight, fracRC.yyzz);\n vec4 newValue = mix(top, bottom, fracRC.x);\n\n setOutput(newValue);\n }\n `}}const W$={kernelName:rr,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{images:a}=t,{alignCorners:s,halfPixelCenters:i,size:o}=r,[l,u]=o,c=We().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new z$(a.shape,l,u,s,i):new L$(a.shape,l,u,s,i);return n.runWebGLProgram(c,[a],"float32")}};class U${constructor(e,t,n){this.variableNames=["dy"],this.outputShape=[],this.outputShape=t;const[,r,a]=t,[,s,i]=e,o=[n&&s>1?r-1:r,n&&i>1?a-1:a],l=[n&&s>1?s-1:s,n&&i>1?i-1:i],u=o[0]/l[0],c=o[1]/l[1],h=1/u,f=1/c,d=2*Math.ceil(h)+2,p=2*Math.ceil(f)+2;this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n int r = coords[1];\n int c = coords[2];\n\n float accumulator = 0.0;\n\n const float heightScale = float(${u});\n const float widthScale = float(${c});\n\n const float invHeightScale = float(${h});\n const float invWidthScale = float(${f});\n\n const int winHeight = int(${d});\n const int winWidth = int(${p});\n\n // Compute bounds for where in dy we will look\n float startRLerp = floor(float(r) * invHeightScale);\n int startDyR = int(startRLerp - float(winHeight / 2));\n\n float startCLerp = floor(float(c) * invWidthScale);\n int startDyC = int(startCLerp - float(winWidth / 2));\n\n // Loop over dy\n for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) {\n int dyR = dyROffset + startDyR;\n\n // Guard against the window exceeding the bounds of dy\n if (dyR < 0 || dyR >= ${s}) {\n continue;\n }\n\n for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) {\n int dyC = dyCOffset + startDyC;\n\n // Guard against the window exceeding the bounds of dy\n if (dyC < 0 || dyC >= ${i}) {\n continue;\n }\n\n float dxR = float(dyR) * heightScale;\n int topDxRIndex = int(floor(dxR));\n int bottomDxRIndex = int(min(ceil(dxR), ${r-1}.0));\n float dxRLerp = dxR - float(topDxRIndex);\n float inverseDxRLerp = 1.0 - dxRLerp;\n\n float dxC = float(dyC) * widthScale;\n int leftDxCIndex = int(floor(dxC));\n int rightDxCIndex = int(min(ceil(dxC), ${a-1}.0));\n float dxCLerp = dxC - float(leftDxCIndex);\n float inverseDxCLerp = 1.0 - dxCLerp;\n\n if (r == topDxRIndex && c == leftDxCIndex) {\n // topLeft\n accumulator +=\n getDy(b, dyR, dyC, d) * inverseDxRLerp * inverseDxCLerp;\n }\n\n if (r == topDxRIndex && c == rightDxCIndex) {\n // topRight\n accumulator += getDy(b, dyR, dyC, d) * inverseDxRLerp * dxCLerp;\n }\n\n if (r == bottomDxRIndex && c == leftDxCIndex) {\n // bottomLeft\n accumulator += getDy(b, dyR, dyC, d) * dxRLerp * inverseDxCLerp;\n }\n\n if (r == bottomDxRIndex && c == rightDxCIndex) {\n // bottomRight\n accumulator += getDy(b, dyR, dyC, d) * dxRLerp * dxCLerp;\n }\n }\n }\n // End loop over dy\n\n setOutput(accumulator);\n }\n `}}const V$={kernelName:ar,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{images:a,dy:s}=t,{alignCorners:i}=r,o=new U$(s.shape,a.shape,i);return n.runWebGLProgram(o,[s],s.dtype)}};class j${constructor(e,t,n,r,a){this.variableNames=["A"],this.outputShape=[];const[s,i,o,l]=e;this.outputShape=[s,t,n,l];const u=[r&&t>1?i-1:i,r&&n>1?o-1:o],c=[r&&t>1?t-1:t,r&&n>1?n-1:n],h=r?"0.5":"0.0";let f;f=a?"max((vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC, vec2(0.0))":"vec2(yRC) * effectiveInputOverOutputRatioRC",this.userCode=`\n const vec2 effectiveInputOverOutputRatioRC = vec2(\n ${u[0]/c[0]},\n ${u[1]/c[1]});\n const vec2 inputShapeRC = vec2(${i}.0, ${o}.0);\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n ivec2 yRC = coords.yz;\n\n // Fractional source index.\n vec2 sourceFracIndexRC = ${f};\n\n // Compute the coordinators of nearest neighbor point.\n ivec2 sourceNearestRC = ivec2(\n min(inputShapeRC - 1.0, floor(sourceFracIndexRC + ${h})));\n float newValue = getA(b, sourceNearestRC.x, sourceNearestRC.y, d);\n\n setOutput(newValue);\n }\n `}}class H${constructor(e,t,n,r,a){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];const[s,i,o,l]=e;this.outputShape=[s,t,n,l];const u=[r&&t>1?i-1:i,r&&n>1?o-1:o],c=[r&&t>1?t-1:t,r&&n>1?n-1:n],h=r?"0.5":"0.0";let f;f=a?"max((vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC, vec3(0.0))":"vec3(yRC) * effectiveInputOverOutputRatioRC",this.userCode=`\n const vec3 effectiveInputOverOutputRatioRC = vec3(\n ${u[0]/c[0]},\n ${u[1]/c[1]},\n ${u[1]/c[1]});\n const vec3 inputShapeRC = vec3(${i}.0, ${o}.0,\n ${o}.0);\n\n float getAValue(int b, int r, int c, int d) {\n return getChannel(getA(b, r, c, d), vec2(c, d));\n }\n\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n // Calculate values for next column in yRC.z.\n ivec3 yRC = coords.yzz + ivec3(0, 0, 1);\n\n // Fractional source index.\n vec3 sourceFracIndexRC = ${f};\n\n // Compute the coordinators of nearest neighbor point.\n ivec3 sourceNearestRC = ivec3(\n min(inputShapeRC - 1.0, floor(sourceFracIndexRC + ${h})));\n\n // Should we calculate next column and row elements in 2x2 packed cell.\n bool hasNextCol = d < ${l-1};\n bool hasNextRow = coords.z < ${n-1};\n\n vec4 newValue = vec4(\n getAValue(b, sourceNearestRC.x, sourceNearestRC.y, d),\n hasNextCol ? getAValue(b, sourceNearestRC.x, sourceNearestRC.y, d + 1)\n : 0.0,\n hasNextRow ? getAValue(b, sourceNearestRC.x, sourceNearestRC.z, d)\n : 0.0,\n (hasNextRow && hasNextCol) ?\n getAValue(b, sourceNearestRC.x, sourceNearestRC.z, d + 1) : 0.0);\n\n setOutput(newValue);\n }\n `}}const G$={kernelName:tr,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{images:a}=t,{alignCorners:s,halfPixelCenters:i,size:o}=r,[l,u]=o,c=We().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new H$(a.shape,l,u,s,i):new j$(a.shape,l,u,s,i);return n.runWebGLProgram(c,[a],a.dtype)}};class X${constructor(e,t,n){this.variableNames=["dy"],this.outputShape=[],this.outputShape=t;const[,r,a]=t,[,s,i]=e,o=[n&&s>1?r-1:r,n&&i>1?a-1:a],l=[n&&s>1?s-1:s,n&&i>1?i-1:i],u=o[0]/l[0],c=o[1]/l[1],h=1/u,f=1/c,d=2*Math.ceil(h)+2,p=2*Math.ceil(f)+2;this.userCode=`\n void main() {\n ivec4 coords = getOutputCoords();\n int b = coords[0];\n int d = coords[3];\n int r = coords[1];\n int c = coords[2];\n\n float accumulator = 0.0;\n\n const float heightScale = float(${u});\n const float widthScale = float(${c});\n\n const float invHeightScale = float(${h});\n const float invWidthScale = float(${f});\n\n const int winHeight = int(${d});\n const int winWidth = int(${p});\n\n // Compute bounds for where in dy we will look\n float startRLerp = floor(float(r) * invHeightScale);\n int startDyR = int(floor(startRLerp - float(winHeight / 2)));\n\n float startCLerp = floor(float(c) * invWidthScale);\n int startDyC = int(floor(startCLerp - float(winWidth / 2)));\n\n // Loop over dy\n for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) {\n int dyR = dyROffset + startDyR;\n\n // Guard against the window exceeding the bounds of dy\n if (dyR < 0 || dyR >= ${s}) {\n continue;\n }\n\n for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) {\n int dyC = dyCOffset + startDyC;\n\n // Guard against the window exceeding the bounds of dy\n if (dyC < 0 || dyC >= ${i}) {\n continue;\n }\n\n float sourceFracRow =\n float(${o[0]}) *\n (float(dyR) / float(${l[0]}));\n\n float sourceFracCol =\n float(${o[1]}) *\n (float(dyC) / float(${l[1]}));\n\n int sourceNearestRow = int(min(\n float(int(${r}) - 1),\n ${n} ? float(round(sourceFracRow)) :\n float(floor(sourceFracRow))));\n\n int sourceNearestCol = int(min(\n float(int(${a}) - 1),\n ${n} ? float(round(sourceFracCol)) :\n float(floor(sourceFracCol))));\n\n if (r == sourceNearestRow && c == sourceNearestCol) {\n accumulator += getDy(b, dyR, dyC, d);\n }\n }\n }\n // End loop over dy\n\n setOutput(accumulator);\n }\n `}}const K$={kernelName:nr,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{images:a,dy:s}=t,{alignCorners:i}=r,o=new X$(s.shape,a.shape,i);return n.runWebGLProgram(o,[s],s.dtype)}};class q${constructor(e,t){this.variableNames=["x"];const n=e.length;if(n>4)throw new Error(`WebGL backend: Reverse of rank-${n} tensor is not yet supported`);if(this.outputShape=e,1===n)return void(this.userCode=`\n void main() {\n int coord = getOutputCoords();\n setOutput(getX(${e[0]} - coord - 1));\n }\n `);const r=e.map(((n,r)=>(n=>-1!==t.indexOf(n)&&1!==e[n]?`${e[n]} - coords[${n}] - 1`:`coords[${n}]`)(r))).join(","),a=LT(n);this.userCode=`\n void main() {\n ${a} coords = getOutputCoords();\n setOutput(getX(${r}));\n }\n `}}class Y${constructor(e,t){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0;const n=e.length;if(n>4)throw new Error(`WebGL backend: Reverse of rank-${n} tensor is not yet supported`);this.outputShape=e;const r=_F("rc",n),a=`${r[n-1]} + 1 < ${this.outputShape[n-1]}`,s=`${r[n-2]} + 1 < ${this.outputShape[n-2]}`,i=LT(n);function o(n){const r=e.map(((r,a)=>function(n,r){return-1!==t.indexOf(n)&&1!==e[n]?`${e[n]} - ${r[n]} - 1`:`${r[n]}`}(a,n)));return`getChannel(getX(${r.join(",")}), vec2(${r.slice(-2).join(",")}))`}this.userCode=1===n?`\n void main(){\n int rc = getOutputCoords();\n vec4 result = vec4(0.);\n result.r = getChannel(getX(${e[0]} - rc - 1),\n ${e[0]} - rc - 1);\n if(${a}){\n result.g = getChannel(getX(${e[0]} - (rc + 1) - 1),\n ${e[0]} - (rc + 1) - 1);\n }\n setOutput(result);\n }\n `:`\n void main() {\n ${i} rc = getOutputCoords();\n vec4 result = vec4(0.);\n result.r = ${function(e){return o(e)}(r.slice())};\n if(${a}){\n result.g = ${function(e){return e[n-1]="("+e[n-1]+" + 1)",o(e)}(r.slice())};\n }\n if(${s}) {\n result.b = ${function(e){return e[n-2]="("+e[n-2]+" + 1)",o(e)}(r.slice())};\n if(${a}) {\n result.a = ${function(e){return e[n-1]="("+e[n-1]+" + 1)",e[n-2]="("+e[n-2]+" + 1)",o(e)}(r.slice())};\n }\n }\n setOutput(result);\n }\n `}}const J$={kernelName:ir,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{dims:s}=r,i=a.shape.length,o=de(s,a.shape);if(0===i)return PF({inputs:{x:a},backend:n});const l=We().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new Y$(a.shape,o):new q$(a.shape,o);return n.runWebGLProgram(l,[a],a.dtype)}};class Z${constructor(e,t){this.variableNames=["Image"],this.outputShape=[];const n=e[1],r=e[2];this.outputShape=e;let a="";a="number"==typeof t?`float outputValue = ${t.toFixed(2)};`:`\n vec3 fill = vec3(${t.join(",")});\n float outputValue = fill[coords[3]];`,this.userCode=`\n uniform vec4 params;\n void main() {\n ivec4 coords = getOutputCoords();\n int x = coords[2];\n int y = coords[1];\n float coordXFloat = (float(x) - params[0]) * params[3] -\n (float(y) - params[1]) * params[2];\n float coordYFloat = (float(x) - params[0]) * params[2] +\n (float(y) - params[1]) * params[3];\n int coordX = int(round(coordXFloat + params[0]));\n int coordY = int(round(coordYFloat + params[1]));\n ${a}\n if(coordX >= 0 && coordX < ${r} && coordY >= 0 && coordY < ${n}) {\n outputValue = getImage(coords[0], coordY, coordX, coords[3]);\n }\n setOutput(outputValue);\n }\n `}getCustomSetupFunc(e,t,n,r){return(a,s)=>{null==this.paramsLoc&&(this.paramsLoc=a.getUniformLocationNoThrow(s,"params")),a.gl.uniform4f(this.paramsLoc,e,t,n,r)}}}const Q$={kernelName:Ur,backendName:"webgl",kernelFunc:({inputs:e,attrs:t,backend:n})=>{const{image:r}=e,{radians:a,fillValue:s,center:i}=t,o=n,l=new Z$(r.shape,s),[u,c]=Zf(i,r.shape[1],r.shape[2]),h=l.getCustomSetupFunc(u,c,Math.sin(a),Math.cos(a));return o.runWebGLProgram(l,[r],r.dtype,h)}},eP=KF({opSnippet:"\n // OpenGL ES does not support round function.\n // The algorithm is based on banker's rounding.\n float base = floor(x);\n if ((x - base) < 0.5) {\n return floor(x);\n } else if ((x - base) > 0.5) {\n return ceil(x);\n } else {\n if (mod(base, 2.0) == 0.0) {\n return base;\n } else {\n return base + 1.0;\n }\n }\n"}),tP={kernelName:or,backendName:"webgl",kernelFunc:eP},nP=KF({opSnippet:"return inversesqrt(x);",cpuKernelImpl:uF}),rP={kernelName:lr,backendName:"webgl",kernelFunc:nP};class aP{constructor(e,t,n,r,a,s,i=!0){this.variableNames=["updates","indices","defaultValue"],this.outputShape=s;const o=LT(a.length),l=LT(s.length);let u="";1===n?u="i":2===n&&(u="i, j");const c=`getIndices(${u})`;let h="";1===r?h="i":2===r&&(h="i, coords[1]");const f=`getUpdates(${h})`,d=t>1?"strides[j]":"strides";this.userCode=`\n ${o} strides = ${o}(${a});\n\n void main() {\n ${l} coords = getOutputCoords();\n float sum = 0.0;\n bool found = false;\n for (int i = 0; i < ${e}; i++) {\n int flattenedIndex = 0;\n for (int j = 0; j < ${t}; j++) {\n int index = round(${c});\n flattenedIndex += index * ${d};\n }\n if (flattenedIndex == coords[0]) {\n sum += ${f};\n found = true;\n }\n }\n setOutput(mix(getDefaultValue(), sum, float(found)));\n }\n `}}const sP={kernelName:ur,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{indices:a,updates:s}=t,{shape:i}=r,{sliceRank:o,numUpdates:l,sliceSize:u,strides:c,outputSize:h}=Ni(0,a,i),f=[h/u,u];if(0===h)return n.makeTensorInfo(i,a.dtype);const d=nR({inputs:{x:a},backend:n,attrs:{shape:[l,o]}}),p=nR({inputs:{x:s},backend:n,attrs:{shape:[l,u]}}),m=n.makeTensorInfo([],"float32",new Float32Array([0])),g=new aP(l,o,d.shape.length,p.shape.length,c,f),y=n.runWebGLProgram(g,[p,d,m],p.dtype),b=nR({inputs:{x:y},backend:n,attrs:{shape:i}});return n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(p),n.disposeIntermediateTensorInfo(y),n.disposeIntermediateTensorInfo(m),b}};class iP{constructor(e,t,n){let r,a;if(this.variableNames=["c","a","b"],this.outputShape=t,n>4)throw Error(`Where for rank ${n} is not yet supported`);if(1===n)a="resRC",r="resRC";else{const n=["resRC.x","resRC.y","resRC.z","resRC.w"],s=[],i=[];for(let r=0;r= 1.0) {\n setOutput(getA(${a}));\n } else {\n setOutput(getB(${a}));\n }\n }\n `}}const oP={kernelName:cr,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n}=e,{condition:r,t:a,e:s}=t,i=new iP(r.shape.length,a.shape,a.shape.length);return n.runWebGLProgram(i,[r,a,s],Da(a.dtype,s.dtype))}},lP=KF({opSnippet:`\n // Stable and Attracting Fixed Point (0, 1) for Normalized Weights.\n // see: https://arxiv.org/abs/1706.02515\n float scaleAlpha = ${ad};\n float scale = ${sd};\n return (x >= 0.0) ? scale * x : scaleAlpha * (exp(x) - 1.0);\n`}),uP={kernelName:hr,backendName:"webgl",kernelFunc:lP},cP=KF({opSnippet:"return 1.0 / (1.0 + exp(-1.0 * x));"}),hP={kernelName:gr,backendName:"webgl",kernelFunc:cP},fP=KF({opSnippet:"\n if (isnan(x)) { return 0.0; }\n return sign(x);\n"}),dP={kernelName:mr,backendName:"webgl",kernelFunc:fP},pP=KF({opSnippet:"if (isnan(x)) return x;\n return sin(x);\n"}),mP={kernelName:dr,backendName:"webgl",kernelFunc:pP},gP=KF({opSnippet:"\n float e2x = exp(x);\n return (e2x - 1.0 / e2x) / 2.0;\n"}),yP={kernelName:pr,backendName:"webgl",kernelFunc:gP},bP=KF({opSnippet:"\n float epsilon = 1.1920928955078125e-7;\n float threshold = log(epsilon) + 2.0;\n\n bool too_large = x > -threshold;\n bool too_small = x < threshold;\n\n float result;\n float exp_x = exp(x);\n\n if (too_large){\n result = x;\n }\n else if (too_small){\n result = exp_x;\n }\n else{\n result = log(exp_x + 1.0);\n }\n return result;\n"}),vP={kernelName:yr,backendName:"webgl",kernelFunc:bP},wP={kernelName:wr,backendName:"webgl",kernelFunc:e=>{const{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{blockShape:s,paddings:i}=r;Q(a.shape.length<=4,(()=>"spaceToBatchND for rank > 4 with a WebGL backend not implemented yet"));const o=s.reduce(((e,t)=>e*t)),l=[[0,0]];l.push(...i);for(let e=1+s.length;en.disposeIntermediateTensorInfo(e))),g}},_P={kernelName:kr,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n}=e,{indices:r,values:a,denseShape:s,defaultValue:i}=t;if(1!==s.shape.length)throw new Error(`Dense shape must be a vector, saw:\n ${s.shape}`);if(2!==r.shape.length)throw new Error(`Indices must be a matrix, saw:\n ${r.shape}`);if(1!==a.shape.length)throw new Error(`Values must be a vector, saw:\n ${a.shape}`);if(0!==i.shape.length)throw new Error(`Default value must be a scalar, saw:\n ${i.shape}`);const o=n.readSync(r.dataId),l=n.readSync(a.dataId),u=n.readSync(s.dataId),c=n.readSync(i.dataId)[0],[h,f,d,p,m]=fF(o,r.shape,r.dtype,l,a.dtype,u,c);return[n.makeTensorInfo(f,r.dtype,h),n.makeTensorInfo([f[0]],a.dtype,d),n.makeTensorInfo([p.length],"bool",new Uint8Array(p.map((e=>Number(e))))),n.makeTensorInfo([m.length],r.dtype,new Int32Array(m))]}},xP={kernelName:Er,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n}=e,{inputIndices:r,inputShape:a,newShape:s}=t;if(2!==r.shape.length)throw new Error(`Input indices should be a matrix but received shape ${r.shape}`);if(1!==a.shape.length)throw new Error(`Input shape should be a vector but received shape ${a.shape}`);if(1!==s.shape.length)throw new Error(`Target shape should be a vector but received shape ${s.shape}`);const i=Array.from(n.readSync(a.dataId)),o=n.readSync(r.dataId),l=Array.from(n.readSync(s.dataId)),[u,c,h]=dF(o,r.shape,r.dtype,i,l);return[n.makeTensorInfo(c,r.dtype,u),n.makeTensorInfo([h.length],s.dtype,new Int32Array(h))]}},kP={kernelName:Cr,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{sparseIndices:a,sparseValues:s,defaultValue:i}=t,{outputShape:o}=r,{sliceRank:l,numUpdates:u,strides:c,outputSize:h}=Ni(0,a,o),f=new aP(u,l,a.shape.length,s.shape.length,c,[h,1],!1),d=n.runWebGLProgram(f,[s,a,i],s.dtype),p=nR({inputs:{x:d},backend:n,attrs:{shape:o}});return n.disposeIntermediateTensorInfo(d),p}},EP={kernelName:_r,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{numOrSizeSplits:s,axis:i}=r,o=de(i,a.shape)[0],l=Ad(a,s,o),u=a.shape.length,c=new Array(u).fill(0),h=a.shape.slice();return l.map((e=>{const t=[...h];t[o]=e;const r=lO({inputs:{x:a},backend:n,attrs:{begin:c,size:t}});return c[o]+=e,r}))}},CP=KF({opSnippet:"return sqrt(x);"}),SP={kernelName:br,backendName:"webgl",kernelFunc:CP},NP=KF({opSnippet:"return x * x;"}),IP={kernelName:Nr,backendName:"webgl",kernelFunc:NP},AP="return (a - b) * (a - b);",DP=qF({opSnippet:AP,packedOpSnippet:AP}),TP={kernelName:Sr,backendName:"webgl",kernelFunc:DP},FP={kernelName:zr,backendName:"webgl",kernelFunc:function({inputs:e,attrs:t,backend:n}){const{x:r}=e,a=`if (isnan(x)) return x;\n return x > 0.0 ? 1.0 : float(${t.alpha});\n `,s=new IF(r.shape,a);return n.runWebGLProgram(s,[r],r.dtype)}};class RP{constructor(e,t,n){this.variableNames=["x"],this.outputShape=n;const r=n.length,a=LT(n.length),s=LT(n.length);let i="";if(1===r)i="coords * strides + begin";else{let e=0;i=n.map(((t,r)=>(e++,1===n.length?`coords * strides[${r}] + begin[${r}]`:`coords[${e-1}] * strides[${r}] + begin[${r}]`))).join(",")}this.userCode=`\n ${a} begin = ${a}(${e});\n ${a} strides = ${a}(${t});\n\n void main() {\n ${s} coords = getOutputCoords();\n setOutput(getX(${i}));\n }\n `}}const OP={kernelName:Ir,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{begin:s,end:i,strides:o,beginMask:l,endMask:u,ellipsisMask:c,newAxisMask:h,shrinkAxisMask:f}=r,{nonStrided:d,$begin:p,$strides:m,size:g,newShape:y,outShape:b}=Vi(a.shape,s,i,o,l,u,c,h,f),v=nR({inputs:{x:a},backend:n,attrs:{shape:y}});let w;if(d){const e=lO({inputs:{x:v},backend:n,attrs:{begin:p,size:g}});w=nR({inputs:{x:e},backend:n,attrs:{shape:b}}),n.disposeIntermediateTensorInfo(e)}else if(b.some((e=>0===e)))w=n.makeTensorInfo(b,a.dtype,[]);else if(n.shouldExecuteOnCPU([v])){const e=n.texData.get(v.dataId).values,t=Xs(v.shape,v.dtype,e),r=pF(b,t,m,p);w=n.makeTensorInfo(b,v.dtype,r.values)}else{const e=new RP(p,m,b);w=n.runWebGLProgram(e,[v],v.dtype)}const _=nR({inputs:{x:w},backend:n,attrs:{shape:b}});return n.disposeIntermediateTensorInfo(v),n.disposeIntermediateTensorInfo(w),_}},MP=KF({opSnippet:"return tan(x);"}),BP={kernelName:Dr,backendName:"webgl",kernelFunc:MP},$P=KF({opSnippet:"\n float e2x = exp(-2.0 * abs(x));\n return sign(x) * (1.0 - e2x) / (1.0 + e2x);\n"}),PP={kernelName:Tr,backendName:"webgl",kernelFunc:$P};class LP{constructor(e,t){this.variableNames=["A"];const n=new Array(e.length);for(let r=0;r5)throw Error(`Tile for rank ${t} is not yet supported`);if(1===t)return`imod(resRC, ${e[0]})`;const n=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u"],r=[];for(let t=0;t5){const e=n.readSync(a.dataId),t="string"===a.dtype?e.map((e=>la(e))):e,r=Xs(a.shape,a.dtype,t),i=gF(r,s);return n.makeTensorInfo(i.shape,i.dtype,i.values)}const i=new LP(a.shape,s);return n.runWebGLProgram(i,[a],a.dtype)}const WP={kernelName:Fr,backendName:"webgl",kernelFunc:zP},UP={kernelName:Rr,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{k:s,sorted:i}=r,o=n.readSync(a.dataId),[l,u]=yF(o,a.shape,a.dtype,s,i);return[n.makeTensorInfo(l.shape,l.dtype,l.values),n.makeTensorInfo(u.shape,u.dtype,u.values)]}};class VP{constructor(e,t,n,r,a,s){this.variableNames=["Image","Transforms"],this.outputShape=s;const i="nearest"===n?1:2;let o;switch(r){case"constant":o=1;break;case"reflect":o=2;break;case"wrap":o=3;break;case"nearest":o=4;break;default:o=1}this.userCode=`\n float mapCoord(float outCoord, float len) {\n float inCoord = outCoord;\n if(${o} == 2) {\n if (inCoord < 0.0) {\n if (len <= 1.0) {\n inCoord = 0.0;\n } else {\n float sz2 = 2.0 * len;\n if (inCoord < sz2) {\n inCoord = sz2 * float(int(float(-inCoord / sz2))) +\n inCoord;\n }\n inCoord = inCoord < -len ? inCoord + sz2 : -inCoord - 1.0;\n }\n } else if (inCoord > len - 1.0) {\n if (len <= 1.0) {\n inCoord = 0.0;\n } else {\n float sz2 = 2.0 * len;\n inCoord -= sz2 * float(int(float(inCoord / sz2)));\n if (inCoord >= len) {\n inCoord = sz2 - inCoord - 1.0;\n }\n }\n }\n return clamp(inCoord, 0.0, len - 1.0);\n } else if (${o} == 3) {\n if (inCoord < 0.0) {\n if (len <= 1.0) {\n inCoord = 0.0;\n } else {\n float sz = len - 1.0;\n inCoord += len * (float(int(float(-inCoord / sz))) + 1.0);\n }\n } else if (inCoord > len - 1.0) {\n if (len <= 1.0) {\n inCoord = 0.0;\n } else {\n float sz = len - 1.0;\n inCoord -= len * float(int(float(inCoord / sz)));\n }\n }\n return clamp(inCoord, 0.0, len - 1.0);\n } else if (${o} == 4) {\n return clamp(outCoord, 0.0, len - 1.0);\n } else {\n return outCoord;\n }\n }\n\n float readWithFillValue(int batch, int coordY, int coordX,\n int channel) {\n float outputValue;\n if (0 <= coordY && coordY < ${e} && 0 <= coordX && coordX < ${t}) {\n outputValue = getImage(batch, coordY, coordX, channel);\n } else {\n outputValue = float(${a});\n }\n return outputValue;\n }\n\n void main() {\n ivec4 coords = getOutputCoords();\n float outputValue;\n int batch = coords[0];\n int x = coords[2];\n int y = coords[1];\n int channel = coords[3];\n float xf = float(x);\n float yf = float(y);\n float a1 = getTransforms(batch, 0);\n float a2 = getTransforms(batch, 1);\n float a3 = getTransforms(batch, 2);\n float b1 = getTransforms(batch, 3);\n float b2 = getTransforms(batch, 4);\n float b3 = getTransforms(batch, 5);\n float c1 = getTransforms(batch, 6);\n float c2 = getTransforms(batch, 7);\n float projection = c1 * xf + c2 * yf + 1.0;\n if (projection == 0.0) {\n outputValue = float(${a});\n } else {\n float inX = (a1 * xf + a2 * yf + a3) / projection;\n float inY = (b1 * xf + b2 * yf + b3) / projection;\n float mapX = mapCoord(inX, float(${t}));\n float mapY = mapCoord(inY, float(${e}));\n\n if (${i} == 1) {\n int coordY = int(round(mapY));\n int coordX = int(round(mapX));\n outputValue = readWithFillValue(batch, coordY, coordX,\n channel);\n } else {\n float yFloor = floor(mapY);\n float xFloor = floor(mapX);\n float yCeil = yFloor + 1.0;\n float xCeil = xFloor + 1.0;\n float valueYFloor = (xCeil - mapX) *\n readWithFillValue(batch, int(yFloor), int(xFloor), channel) +\n (mapX - xFloor) *\n readWithFillValue(batch, int(yFloor), int(xCeil), channel);\n float valueYCeil = (xCeil - mapX) *\n readWithFillValue(batch, int(yCeil), int(xFloor), channel) +\n (mapX - xFloor) *\n readWithFillValue(batch, int(yCeil), int(xCeil), channel);\n outputValue = (yCeil - mapY) * valueYFloor +\n (mapY - yFloor) * valueYCeil;\n }\n }\n setOutput(outputValue);\n }\n `}}const jP={kernelName:Or,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{image:a,transforms:s}=t,{interpolation:i,fillMode:o,fillValue:l,outputShape:u}=r,[c,h,f,d]=a.shape,[p,m]=null!=u?u:[h,f],g=new VP(h,f,i,o,l,[c,p,m,d]);return n.runWebGLProgram(g,[a,s],"float32")}},HP={kernelName:Br,backendName:"webgl",kernelFunc:function(e){const{inputs:t,attrs:n,backend:r}=e,{axis:a}=n,{x:s}=t;cT(s,"unique"),console.warn("WARNING: ","UI might be locked temporarily as data is being downloaded");const i=r.readSync(s.dataId),{outputValues:o,outputShape:l,indices:u}=vF(i,a,s.shape,s.dtype);return[r.makeTensorInfo(l,s.dtype,o),r.makeTensorInfo([u.length],"int32",u)]}},GP={kernelName:$r,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{value:a}=t;let{axis:s}=r;s<0&&(s+=a.shape.length);const i=a,o=i.shape.length,l=a.shape[s],u=new Array(o-1);let c=0;for(let e=0;en.disposeIntermediateTensorInfo(e))),p}};class XP{constructor(e,t){this.variableNames=["x","segmentIds"];const n=e.windowSize,r=e.batchSize,a=e.inSize,s=e.numSegments,i=s*Math.ceil(a/n);this.outputShape=[r,i];const o=4*Math.floor(n/4),l=n%4,u="\n sumValue += dot(values, segFilter);\n ";let c="";a%n>0&&(c=`\n if (inIdx < 0 || inIdx >= ${a}) {\n return initializationValue;\n }\n `);let h="";a%n>0&&(h=`\n if (inIdx < 0 || inIdx >= ${a}) {\n return -1.0;\n }\n `),this.userCode=`\n const float initializationValue = 0.0;\n\n float getValue(int batch, int inIdx) {\n ${c}\n return getX(batch, inIdx);\n }\n\n float getSegmentIdAtIndex(int inIdx) {\n ${h}\n return getSegmentIds(inIdx);\n }\n\n void main() {\n ivec2 coords = getOutputCoords();\n int batch = coords[0];\n int outIdx = coords[1];\n int inOffset = int(floor(float(outIdx) / float(\n ${s})) * float(${n}));\n int currentSeg = int(mod(float(outIdx), float(${s})));\n\n float sumValue = 0.0;\n\n for (int i = 0; i < ${o}; i += 4) {\n int inIdx = inOffset + i;\n vec4 values = vec4(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n getValue(batch, inIdx + 3)\n );\n\n vec4 segFilter = vec4(\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 3)) == currentSeg ? 1 : 0\n );\n\n ${u}\n }\n\n int inIdx = inOffset + ${o};\n if (${1===l}) {\n vec4 values = vec4(\n getValue(batch, inIdx),\n initializationValue,\n initializationValue,\n initializationValue\n );\n\n int inIdxSeg = int(getSegmentIdAtIndex(inIdx));\n\n vec4 segFilter = vec4(\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n 0,\n 0,\n 0\n );\n\n ${u}\n } else if (${2===l}) {\n vec4 values = vec4(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n initializationValue,\n initializationValue\n );\n\n vec4 segFilter = vec4(\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\n 0,\n 0\n );\n\n ${u}\n } else if (${3===l}) {\n vec4 values = vec4(\n getValue(batch, inIdx),\n getValue(batch, inIdx + 1),\n getValue(batch, inIdx + 2),\n initializationValue\n );\n\n vec4 segFilter = vec4(\n int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\n int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0,\n 0\n );\n\n ${u}\n }\n setOutput(sumValue);\n }\n `}}const KP=[FB,OB,mR,yR,vR,_R,ER,NR,IR,AR,MR,BR,PR,zR,jR,UR,GR,YR,qR,QR,eO,tO,aO,cO,hO,gO,vO,xO,CO,WF,RO,jO,HO,LO,XO,KO,GO,YO,ZO,eM,aM,sM,oM,dM,pM,cM,gM,bM,vM,_M,xM,EM,SM,AM,TM,OM,$M,zM,UM,HM,XM,YM,ZM,QM,tB,rB,sB,oB,LF,lB,DO,cB,fB,pB,jF,gB,bB,vB,kB,_B,CB,NB,AB,BB,zB,LB,VB,jB,HB,PB,GB,XB,qB,ZB,e$,u$,tR,h$,d$,m$,y$,dO,v$,x$,k$,N$,A$,XF,D$,F$,mO,r$,O$,P$,B$,rR,W$,V$,G$,K$,J$,Q$,tP,rP,sP,oP,uP,hP,dP,mP,yP,uO,l$,vP,wP,_P,xP,kP,EP,SP,IP,TP,FP,OP,i$,hR,BP,PP,WP,UP,jP,dR,HP,GP,{kernelName:Pr,backendName:"webgl",kernelFunc:function(e){const{inputs:t,backend:n,attrs:r}=e,{x:a,segmentIds:s}=t,{numSegments:i}=r,o=a.shape.length,l=[];let u=0;const c=qu([u],o);let h=a;null!=c&&(h=fR({inputs:{x:a},backend:n,attrs:{perm:c}}),l.push(h),u=Ju(1,o)[0]);const f=Td(h.shape,u,i),d=re([h.shape[u]]),p=nR({inputs:{x:h},backend:n,attrs:{shape:[-1,d]}});l.push(p);const m=Ta(a.dtype),g=(e,t,r,a,s)=>{const i=e.shape[0],o=e.shape[1],u=Dd(o,s),c=new XP({windowSize:u,inSize:o,batchSize:i,numSegments:s},t),h=n.compileAndRun(c,[e,r],a);if(l.push(h),h.shape[1]===s)return h;const f=T$({backend:n,attrs:{start:0,stop:s,step:1,dtype:"float32"}}),d=zP({inputs:{x:f},backend:n,attrs:{reps:[o/u]}});return l.push(f),l.push(d),g(h,t,d,a,s)},y=nR({inputs:{x:g(p,"unsortedSegmentSum",s,m,i)},backend:n,attrs:{shape:f}});let b=y;if(null!=c){l.push(y);const e=Yu(c);b=fR({inputs:{x:b},backend:n,attrs:{perm:e}})}return l.forEach((e=>n.disposeIntermediateTensorInfo(e))),b}},_$];for(const e of KP)Jr(e);const qP={"tfjs-core":ao,"tfjs-backend-cpu":"3.6.0","tfjs-backend-webgl":"3.6.0","tfjs-data":KE,"tfjs-layers":sb,"tfjs-converter":Wk,tfjs:"3.6.0"}},4538:(e,t,n)=>{"use strict";e.exports=n(4063)},4658:e=>{"use strict";const t="[\ud800-\udbff][\udc00-\udfff]";e.exports=e=>e&&e.exact?new RegExp(`^${t}$`):new RegExp(t,"g")},7737:(e,t,n)=>{"use strict";n.d(t,{z:()=>o});var r=n(4575),a=n.n(r),s=n(3913),i=n.n(s),o=function(){function e(){a()(this,e),this.table_width=17,this.table_truncate=16,this.dtype_test_lim=10,this.table_max_row=21,this.table_max_col_in_console=7}return i()(e,[{key:"set_width",value:function(e){this.table_width=e}},{key:"set_max_col_in_console",value:function(e){this.table_max_col_in_console=e}},{key:"set_row_num",value:function(e){this.table_max_row=e}},{key:"set_truncate",value:function(e){this.table_truncate=e}},{key:"set_dtype_test_lim",value:function(e){this.dtype_test_lim=e}},{key:"get_width",get:function(){return this.table_width}},{key:"get_max_col_in_console",get:function(){return this.table_max_col_in_console}},{key:"get_max_row",get:function(){return this.table_max_row}},{key:"get_truncate",get:function(){return this.table_truncate}},{key:"get_dtype_test_lim",get:function(){return this.dtype_test_lim}}]),e}()},5291:(e,t,n)=>{"use strict";n.d(t,{z:()=>p});var r=n(8),a=n.n(r),s=n(319),i=n.n(s),o=n(4575),l=n.n(o),u=n(3676),c=n(697),h=n(3938),f=new c.c,d=function e(t){l()(this,e),f.__in_object(t,"df_list","df_list not found: specify the list of dataframe"),f.__in_object(t,"axis","axis not found: specify the axis");var n,r,s=null;if(!Array.isArray(t.df_list))throw new Error("df_list must be an Array of dataFrames/Series");if(n=t.df_list,"number"!=typeof t.axis)throw new Error("axis must be a number");r=0==t.axis||1==t.axis?t.axis:1;var o=Object.assign({},n);if(1==r){var c=[],d={},p=0,m=Object.keys(o)[0];for(var g in s=o[m].index,o){var y=o[g].columns,b=o[g].values.length;for(var v in b>p&&(p=b),y){var w=y[v];if(w in d){var _=d[w],x="".concat(w,"_").concat(_+1);c.push(x),d[w]=_+1}else c.push(w),d[w]=1}}var k=new Array(p);for(var E in n){for(var C=n[E].values,S=0;S0)for(var w=0;w{"use strict";__webpack_require__.d(__webpack_exports__,{N:()=>DataFrame});var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(319),_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default=__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__),_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(3038),_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1___default=__webpack_require__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1__),_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(7757),_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_2___default=__webpack_require__.n(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_2__),_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__(8926),_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3___default=__webpack_require__.n(_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3__),_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__(4575),_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_4___default=__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_4__),_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__(3913),_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_5___default=__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_5__),_babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6__=__webpack_require__(6525),_babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6___default=__webpack_require__.n(_babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6__),_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__=__webpack_require__(2205),_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default=__webpack_require__.n(_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7__),_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_8__=__webpack_require__(8585),_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_8___default=__webpack_require__.n(_babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_8__),_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_9__=__webpack_require__(9754),_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_9___default=__webpack_require__.n(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_9__),_tensorflow_tfjs__WEBPACK_IMPORTED_MODULE_10__=__webpack_require__(7091),_generic__WEBPACK_IMPORTED_MODULE_18__=__webpack_require__(2847),_series__WEBPACK_IMPORTED_MODULE_12__=__webpack_require__(3938),_utils__WEBPACK_IMPORTED_MODULE_11__=__webpack_require__(697),_groupby__WEBPACK_IMPORTED_MODULE_15__=__webpack_require__(7398),_plotting_plot__WEBPACK_IMPORTED_MODULE_16__=__webpack_require__(4564),_indexing__WEBPACK_IMPORTED_MODULE_13__=__webpack_require__(9365),_concat_js__WEBPACK_IMPORTED_MODULE_17__=__webpack_require__(5291),mathjs__WEBPACK_IMPORTED_MODULE_14__=__webpack_require__(3346);function _createSuper(e){var t=_isNativeReflectConstruct();return function(){var n,r=_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_9___default()(e);if(t){var a=_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_9___default()(this).constructor;n=Reflect.construct(r,arguments,a)}else n=r.apply(this,arguments);return _babel_runtime_helpers_possibleConstructorReturn__WEBPACK_IMPORTED_MODULE_8___default()(this,n)}}function _isNativeReflectConstruct(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}var utils=new _utils__WEBPACK_IMPORTED_MODULE_11__.c,DataFrame=function(_Ndframe){_babel_runtime_helpers_inherits__WEBPACK_IMPORTED_MODULE_7___default()(DataFrame,_Ndframe);var _super=_createSuper(DataFrame),_sample,_to_csv;function DataFrame(e,t){var n;return _babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_4___default()(this,DataFrame),(n=_super.call(this,e,t))._set_column_property(),n}return _babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_5___default()(DataFrame,[{key:"_set_column_property",value:function(){var e=this,t=this.col_data,n=this.column_names;t.forEach((function(t,r){e[n[r]]=null,Object.defineProperty(e,n[r],{get:function(){return new _series__WEBPACK_IMPORTED_MODULE_12__.F(this.col_data[r],{columns:n[r],index:this.index})},set:function(e){this.addColumn({column:n[r],value:e})}})}))}},{key:"to_csv",value:(_to_csv=_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3___default()(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_2___default().mark((function e(){var t,n,r,a=arguments;return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_2___default().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=a.length>0&&void 0!==a[0]?a[0]:"",e.next=3,_babel_runtime_helpers_get__WEBPACK_IMPORTED_MODULE_6___default()(_babel_runtime_helpers_getPrototypeOf__WEBPACK_IMPORTED_MODULE_9___default()(DataFrame.prototype),"to_csv",this).call(this);case 3:return n=e.sent,"undefined"==typeof window?__webpack_require__(2993).writeFileSync(t,n,(function(e){return e&&console.error(e)})):(r="data:text/csv;charset=utf-8,"+n,window.open(encodeURI(r))),e.abrupt("return",n);case 6:case"end":return e.stop()}}),e,this)}))),function(){return _to_csv.apply(this,arguments)})},{key:"drop",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=["columns","index","inplace","axis"];utils._throw_wrong_params_error(t,n),t.inplace=t.inplace||!1,"axis"in t||(t.axis=1);var r=null;if(r="index"in t&&0==t.axis?t.index:t.columns,1==t.axis){if(!("columns"in t))throw Error("No column found. Axis of 1 must be accompanied by an array of column(s) names");var a=this,s={},i=[],o=r.map((function(e){var t=a.columns.indexOf(e);if(-1==t)throw new Error('column "'.concat(e,'" does not exist'));return t}));if(this.col_data.forEach((function(e,t){o.includes(t)||(s[a.column_names[t]]=e,i.push(a.dtypes[t]))})),!t.inplace){var l=a.columns,u=Object.keys(s),c=new DataFrame(s,{index:a.index,dtypes:i});return c.__set_col_property(c,c.col_data,u,l),c}var h=a.columns,f=Object.keys(s);this.__update_frame_in_place(null,null,s,null,i),this.__set_col_property(a,a.col_data,f,h)}else{if(!utils.__key_in_object(t,"index"))throw Error("No index label found. Axis of 0 must be accompanied by an array of index labels");r.forEach((function(t){if(!e.index.includes(t))throw new Error("".concat(t," does not exist in index"))}));var d,p,m=this.values,g=[];if("string"==typeof r[0]?(this.index.forEach((function(e,t){r.includes(e)&&g.push(t)})),d=utils.__remove_arr(m,g),p=utils.__remove_arr(this.index,g)):(d=utils.__remove_arr(m,r),p=utils.__remove_arr(this.index,r)),!t.inplace)return new DataFrame(d,{columns:this.columns,index:p});this.row_data_tensor=_tensorflow_tfjs__WEBPACK_IMPORTED_MODULE_10__.tensor(d),this.data=d,this.__set_index(p)}}},{key:"loc",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=["columns","rows"];utils._throw_wrong_params_error(e,t),e.type="loc";var n=(0,_indexing__WEBPACK_IMPORTED_MODULE_13__.j)(this,e),r=_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1___default()(n,3),a=r[0],s=r[1],i=r[2],o={columns:s},l=new DataFrame(a,o);return l.__set_index(i),l}},{key:"iloc",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=["columns","rows"];utils._throw_wrong_params_error(e,t),e.type="iloc";var n=(0,_indexing__WEBPACK_IMPORTED_MODULE_13__.j)(this,e),r=_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1___default()(n,3),a=r[0],s=r[1],i=r[2],o={columns:s},l=new DataFrame(a,o);return l.__set_index(i),l}},{key:"head",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:5;if(e>this.values.length||e<1)return this;var t=this.values.slice(0,e),n=this.index.slice(0,e),r={columns:this.column_names,index:n},a=new DataFrame(t,r);return a}},{key:"tail",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:5,t=this.values.length;if(e>t||e<1)return this;var n=this.values.slice(t-e),r=this.index.slice(t-e),a={columns:this.column_names,index:r},s=new DataFrame(n,a);return s}},{key:"sample",value:(_sample=_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_3___default()(_babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_2___default().mark((function e(){var t,n,r,a,s=arguments;return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_2___default().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t=s.length>0&&void 0!==s[0]?s[0]:-1,n=s.length>1&&void 0!==s[1]?s[1]:1,!(t>this.shape[0])){e.next=4;break}throw new Error("Sample size n cannot be bigger than size of dataset");case 4:if(!(t<-1||0==t)){e.next=6;break}throw new Error("Sample size cannot be less than -1 or 0");case 6:return t=-1===t?this.shape[0]:t,e.next=9,_tensorflow_tfjs__WEBPACK_IMPORTED_MODULE_10__.data.array(this.index).shuffle(t,n).take(t).toArray();case 9:return r=e.sent,a=this.iloc({rows:r}),e.abrupt("return",a);case 12:case"end":return e.stop()}}),e,this)}))),function(){return _sample.apply(this,arguments)})},{key:"add",value:function(e,t){if(this.__frame_is_compactible_for_operation){var n=this.__get_ops_tensors([this,e],t),r=n[0].add(n[1]),a=this.columns;return this.__get_df_from_tensor(r,a)}throw Error("TypeError: Dtypes of columns must be Float of Int")}},{key:"sub",value:function(e,t){if(this.__frame_is_compactible_for_operation){var n=this.__get_ops_tensors([this,e],t),r=n[0].sub(n[1]),a=this.columns;return this.__get_df_from_tensor(r,a)}throw Error("TypeError: Dtypes of columns must be Float of Int")}},{key:"mul",value:function(e,t){if(this.__frame_is_compactible_for_operation){var n=this.__get_ops_tensors([this,e],t),r=n[0].mul(n[1]),a=this.columns;return this.__get_df_from_tensor(r,a)}throw Error("TypeError: Dtypes of columns must be Float of Int")}},{key:"div",value:function(e,t){if(this.__frame_is_compactible_for_operation){var n=this.__get_ops_tensors([this,e],t),r=n[0].div(n[1]),a=this.columns;return this.__get_df_from_tensor(r,a)}throw Error("TypeError: Dtypes of columns must be Float of Int")}},{key:"pow",value:function(e,t){if(this.__frame_is_compactible_for_operation){var n=this.__get_ops_tensors([this,e],t),r=n[0].pow(n[1]),a=this.columns;return this.__get_df_from_tensor(r,a)}throw Error("TypeError: Dtypes of columns must be Float of Int")}},{key:"mod",value:function(e,t){if(this.__frame_is_compactible_for_operation){var n=this.__get_ops_tensors([this,e],t),r=n[0].mod(n[1]),a=this.columns;return this.__get_df_from_tensor(r,a)}throw Error("TypeError: Dtypes of columns must be Float of Int")}},{key:"mean",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;if(this.__frame_is_compactible_for_operation()){var t,n=[];(1==e?this.col_data:this.values).map((function(e){var t=utils._remove_nans(e),r=_tensorflow_tfjs__WEBPACK_IMPORTED_MODULE_10__.tensor(t).mean().arraySync();n.push(Number(r.toFixed(5)))})),t=1==e?this.column_names:this.index;var r=new _series__WEBPACK_IMPORTED_MODULE_12__.F(n,{columns:"sum",index:t});return r}throw Error("Dtype Error: Operation can not be performed on string type")}},{key:"median",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;if(this.__frame_is_compactible_for_operation){var t,n;1==e?(t=this.col_data_tensor.arraySync(),n=this.column_names):(t=this.row_data_tensor.arraySync(),n=this.index);var r=utils.__median(t,!1),a=new _series__WEBPACK_IMPORTED_MODULE_12__.F(r,{index:n});return a}throw Error("TypeError: Dtypes of columns must be Float of Int")}},{key:"min",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;if(this.__frame_is_compactible_for_operation){var t=this.__get_tensor_and_idx(this,e),n=t[0],r=t[1],a=n.min(t[2]),s=new _series__WEBPACK_IMPORTED_MODULE_12__.F(a.arraySync(),{index:r});return s}throw Error("TypeError: Dtypes of columns must be Float of Int")}},{key:"max",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;if(this.__frame_is_compactible_for_operation){var t=this.__get_tensor_and_idx(this,e),n=t[0],r=t[1],a=n.max(t[2]),s=new _series__WEBPACK_IMPORTED_MODULE_12__.F(a.arraySync(),{index:r});return s}throw Error("TypeError: Dtypes of columns must be Float of Int")}},{key:"std",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;if(this.__frame_is_compactible_for_operation){var t,n=this.col_data_tensor.arraySync();t=1==e?this.column_names:this.index;var r=(0,mathjs__WEBPACK_IMPORTED_MODULE_14__.qoR)(n,e),a=new _series__WEBPACK_IMPORTED_MODULE_12__.F(r,{index:t});return a}throw Error("TypeError: Dtypes of columns must be Float of Int")}},{key:"var",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;if(this.__frame_is_compactible_for_operation){var t,n=this.col_data_tensor.arraySync();t=1==e?this.column_names:this.index;var r=(0,mathjs__WEBPACK_IMPORTED_MODULE_14__.CAK)(n,e),a=new _series__WEBPACK_IMPORTED_MODULE_12__.F(r,{index:t});return a}throw Error("TypeError: Dtypes of columns must be Float of Int")}},{key:"count",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;if(this.__frame_is_compactible_for_operation){var t,n;1==e?(t=this.col_data_tensor.arraySync(),n=this.column_names):(t=this.row_data_tensor.arraySync(),n=this.index);var r=utils.__count_nan(t,!0,!1),a=new _series__WEBPACK_IMPORTED_MODULE_12__.F(r,{index:n});return a}throw Error("TypeError: Dtypes of columns must be Float of Int")}},{key:"round",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;if(this.__frame_is_compactible_for_operation){var t=this.values,n=this.index,r=utils.__round(t,e,!1),a={columns:this.column_names,index:n},s=new DataFrame(r,a);return s}throw Error("TypeError: Dtypes of columns must be Float of Int")}},{key:"__cum_ops",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1?arguments[1]:void 0;if(0!=e&&1!=e)throw new Error("axis must be between 0 or 1");if(this.__frame_is_compactible_for_operation){var n=[],r=null;r=0==e?this.col_data:this.values;for(var a=0;ai?(i=u,o.push(u)):o.push(i);break;case"min":u0&&void 0!==arguments[0]?arguments[0]:{};e=utils.__key_in_object(t,"axis")?t.axis:0;var n=this.__cum_ops(e,"sum");return n}},{key:"cummin",value:function(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};e=utils.__key_in_object(t,"axis")?t.axis:0;var n=this.__cum_ops(e,"min");return n}},{key:"cummax",value:function(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};e=utils.__key_in_object(t,"axis")?t.axis:0;var n=this.__cum_ops(e,"max");return n}},{key:"cumprod",value:function(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};e=utils.__key_in_object(t,"axis")?t.axis:0;var n=this.__cum_ops(e,"prod");return n}},{key:"copy",value:function(){return new DataFrame(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(this.values),{columns:_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(this.column_names),index:this.index,dtypes:this.dtypes})}},{key:"reset_index",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(!e){var t=this.copy();return t.__reset_index(),t}this.__reset_index()}},{key:"set_index",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=["key","drop","inplace"];if(utils._throw_wrong_params_error(e,t),!utils.__key_in_object(e,"key"))throw Error("Index ValueError: You must specify an array of index");if(utils.__key_in_object(e,"inplace")||(e.inplace=!1),utils.__key_in_object(e,"drop")||(e.drop=!0),Array.isArray(e.key)&&e.key.length!=this.index.length)throw Error("Index LengthError: Lenght of new Index array ".concat(e.key.length," must match lenght of existing index ").concat(this.index.length));if("string"==typeof e.key&&this.column_names.includes(e.key)&&(e.key_name=e.key,e.key=this[e.key].values),!e.inplace){var n=this.copy();return n.__set_index(e.key),e.drop&&"string"==typeof e.key_name&&n.drop({columns:[e.key_name],axis:1,inplace:!0}),n}this.__set_index(e.key),e.drop&&"string"==typeof e.key_name&&this.drop({columns:[e.key_name],inplace:!0,axis:1})}},{key:"describe",value:function(){var e=this.select_dtypes(["float32","int32"]),t=e.column_names,n={};return t.forEach((function(t){var r=e[t],a=[r.count(),r.mean(),r.std(),r.min(),r.median(),r.max(),r.var()];n[t]=a})),new DataFrame(n,{index:["count","mean","std","min","median","max","variance"]}).round(6)}},{key:"select_dtypes",value:function(e){var t=this.dtypes,n=this.column_names,r={},a=this.col_data,s=["float32","int32","string","boolean"];return null==e?this.copy():(e.forEach((function(e){if(!s.includes(e))throw Error("Dtype Error: dtype ".concat(e," not supported."))})),t.forEach((function(t,s){e.includes(t)&&(r[n[s]]=a[s])})),new DataFrame(r))}},{key:"sum",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{axis:1};if(this.__frame_is_compactible_for_operation()){var t,n=[];(1==e.axis?this.col_data:this.values).map((function(e){var t=utils._remove_nans(e),r=_tensorflow_tfjs__WEBPACK_IMPORTED_MODULE_10__.tensor(t).sum().arraySync();n.push(Number(r.toFixed(5)))})),t=1==e.axis?this.column_names:this.index;var r=new _series__WEBPACK_IMPORTED_MODULE_12__.F(n,{columns:"sum",index:t});return r}throw Error("Dtype Error: Operation can not be performed on string type")}},{key:"abs",value:function(){var e=this.values,t=_tensorflow_tfjs__WEBPACK_IMPORTED_MODULE_10__.tensor(e).abs().arraySync();return new DataFrame(utils.__round(t,2,!1),{columns:this.column_names,index:this.index})}},{key:"__get_tensor_and_idx",value:function(e,t){var n,r,a;return 1==t?(n=e.row_data_tensor,r=e.column_names,a=0):(n=e.row_data_tensor,r=e.index,a=1),[n,r,a]}},{key:"query",value:function query(kwargs){var operators=[">","<","<=",">=","==","!="],column_index,operator,value;if(utils.__key_in_object(kwargs,"inplace")||(kwargs.inplace=!1),!utils.__key_in_object(kwargs,"column"))throw new Error("specify the column");if(!this.columns.includes(kwargs.column))throw new Error("column ".concat(kwargs.column," does not exist"));if(column_index=this.columns.indexOf(kwargs.column),!utils.__key_in_object(kwargs,"is"))throw new Error("specify an operator in param [is]");if(!operators.includes(kwargs.is))throw new Error(" ".concat(kwargs.is," is not a supported logical operator"));if(operator=kwargs.is,!utils.__key_in_object(kwargs,"to"))throw new Error("specify a value in param [to]");value=kwargs.to;for(var data=this.values,index=this.index,new_data=[],new_index=[],i=0;i0&&void 0!==arguments[0]?arguments[0]:{},n=["columns","values","inplace"];if(utils._throw_wrong_params_error(t,n),utils.__key_in_object(t,"inplace")||(t.inplace=!1),utils.__key_in_object(t,"columns")){if(t.columns.map((function(t){if(!e.column_names.includes(t))throw Error("Value Error: Specified columns must be one of ".concat(e.column_names,", got ").concat(t))})),t.columns.length!=t.values.length)throw Error("Lenght Error: The lenght of the columns names must be equal to the lenght of the values,\n got column of length ".concat(t.columns.length," but values of length ").concat(t.values.length));var r=this.col_data;t.columns.map((function(n,a){var s=e.column_names.indexOf(n),i=e.col_data[s],o=[];i.map((function(e){isNaN(e)&&"string"!=typeof e?o.push(t.values[a]):o.push(e)})),r[s]=o}));var a={};if(r.map((function(t,n){a[e.column_names[n]]=t})),!t.inplace)return new DataFrame(a,{index:this.index});this.__update_frame_in_place(null,null,a,null,null)}else{if(!utils.__key_in_object(t,"values"))throw Error("Value Error: Please specify a fill value");var s;s=Array.isArray(t.values)?t.values[0]:t.values;for(var i=[],o=this.values,l=this.columns,u=0;u0&&void 0!==arguments[0]?arguments[0]:{},t=e.axis||0,n=e.inplace||!1;if(0!=t&&1!=t)throw new Error("axis must either be 1 or 0");var r=null,a=null;0==t?(r=this.values,a=this.columns):(r=this.col_data,a=[]);for(var s=[],i=0;i0&&void 0!==arguments[0]?arguments[0]:{},n=["replace","with","in"];if(utils._throw_wrong_params_error(t,n),utils.__key_in_object(t,"in")){if(t.in.map((function(t){if(!e.column_names.includes(t))throw Error("Value Error: Specified columns must be one of ".concat(e.column_names,", got ").concat(t))})),utils.__key_in_object(t,"replace")&&utils.__key_in_object(t,"with")){var r={};return this.column_names.map((function(n,a){if(t.in.includes(n)){var s=e.col_data[a],i=[];s.map((function(e){e==t.replace?i.push(t.with):i.push(e)})),r[n]=i}else r[n]=e.col_data[a]})),new DataFrame(r,{columns:this.column_names,index:this.index})}throw Error("Params Error: Must specify both 'replace' and 'with' parameters.")}if(utils.__key_in_object(t,"replace")&&utils.__key_in_object(t,"with")){var a=[],s=this.values;s.map((function(e){var n=[];e.map((function(e){e==t.replace?n.push(t.with):n.push(e)})),a.push(n)}));var i=new DataFrame(a,{index:this.index,columns:this.column_names});return i}throw Error("Params Error: Must specify both 'replace' and 'with' parameters.")}},{key:"__logical_ops",value:function(e,t,n){var r,a;if(utils.__is_number(e))a=e;else if(e.series)if(0==n){if(e.values.length!=this.shape[0])throw Error("Shape Error: Operands could not be broadcast together with shapes ".concat(this.shape," and ").concat(e.values.length,"."));a=_tensorflow_tfjs__WEBPACK_IMPORTED_MODULE_10__.tensor(e.values)}else{if(e.values.length!=this.shape[1])throw Error("Shape Error: Operands could not be broadcast together with shapes ".concat(this.shape," and ").concat(e.values.length,"."));a=_tensorflow_tfjs__WEBPACK_IMPORTED_MODULE_10__.tensor(e.values)}else a=Array.isArray(e)?_tensorflow_tfjs__WEBPACK_IMPORTED_MODULE_10__.tensor(e):e.row_data_tensor;switch(t){case"lt":r=_tensorflow_tfjs__WEBPACK_IMPORTED_MODULE_10__.tensor(this.values).less(a).arraySync();break;case"gt":r=_tensorflow_tfjs__WEBPACK_IMPORTED_MODULE_10__.tensor(this.values).greater(a).arraySync();break;case"le":r=_tensorflow_tfjs__WEBPACK_IMPORTED_MODULE_10__.tensor(this.values).lessEqual(a).arraySync();break;case"ge":r=_tensorflow_tfjs__WEBPACK_IMPORTED_MODULE_10__.tensor(this.values).greaterEqual(a).arraySync();break;case"ne":r=_tensorflow_tfjs__WEBPACK_IMPORTED_MODULE_10__.tensor(this.values).notEqual(a).arraySync();break;case"eq":r=_tensorflow_tfjs__WEBPACK_IMPORTED_MODULE_10__.tensor(this.values).equal(a).arraySync()}return new DataFrame(utils.__map_int_to_bool(r,2),{columns:this.column_names,index:this.index})}},{key:"__get_df_from_tensor",value:function(e,t){for(var n=e.shape[0],r=[],a=0;a0&&void 0!==arguments[0]?arguments[0]:{};if(!utils.__key_in_object(e,"column"))throw Error("Value Error: Please specify a column to cast");if(!utils.__key_in_object(e,"dtype"))throw Error("Value Error: Please specify dtype to cast to");if(!this.column_names.includes(e.column))throw Error("'".concat(e.column,"' not found in columns"));var t=this.column_names.indexOf(e.column),n=this.col_types,r=this.col_data;n[t]=e.dtype;var a=[],s=r[t];switch(e.dtype){case"float32":s.map((function(e){a.push(Number(e))})),r[t]=a;break;case"int32":s.map((function(e){a.push(Number(Number(e).toFixed()))})),r[t]=a;break;case"string":s.map((function(e){a.push(String(e))})),r[t]=a}var i={};this.column_names.forEach((function(e,t){i[e]=r[t]}));var o=new DataFrame(i,{dtypes:n,index:this.index});return o}},{key:"unique",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;if(null==t||t>1||t<0)throw Error("Axis Error: Please specify a correct axis. Axis must either be '0' or '1', got ".concat(t));var n={};if(1==t){var r=this.column_names;r.forEach((function(t){n[t]=e[t].unique().values}))}else{var a=this.values,s=this.index;a.forEach((function(e,t){var r=new Set(e);n[s[t]]=Array.from(r)}))}return n}},{key:"nunique",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1;if(null==t||t>1||t<0)throw Error("Axis Error: Please specify a correct axis. Axis must either be '0' or '1', got ".concat(t));var n=[];if(1==t){var r=this.column_names;r.forEach((function(t){n.push(e[t].unique().values.length)}));var a=new _series__WEBPACK_IMPORTED_MODULE_12__.F(n,{index:this.column_names});return a}var s=this.values;s.forEach((function(e){var t=new Set(e);n.push(Array.from(t).length)}));var i=new _series__WEBPACK_IMPORTED_MODULE_12__.F(n,{index:this.index});return i}},{key:"rename",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=["mapper","inplace","axis"];if(utils._throw_wrong_params_error(e,t),utils.__key_in_object(e,"inplace")||(e.inplace=!1),utils.__key_in_object(e,"axis")||(e.axis=1),!utils.__key_in_object(e,"mapper"))throw Error("Please specify a mapper object");if(1==e.axis){var n=Object.keys(e.mapper),r=Object.values(e.mapper),a=_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default()(this.column_names);if(n.forEach((function(e,t){if(!a.includes(e))throw Error("Label Error: Specified column '".concat(e,"' not found in column axis"));var n=a.indexOf(e);a[n]=r[t]})),!e.inplace){var s=this.copy();return s.columns=a,s.__set_col_property(s,s.col_data,a,n),s}this.columns=a,this.__set_col_property(this,this.col_data,a,n)}else{var i=Object.keys(e.mapper),o=this.index,l=[];if(o.forEach((function(t){i.includes(t)?l.push(e.mapper[t]):l.push(t)})),!e.inplace){var u=this.copy();return u.__set_index(l),u}this.__set_index(l)}}},{key:"sort_index",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=void 0!==e.inplace&&e.inplace,n=void 0===e.ascending||e.ascending,r=this.index,a=this.__sort_by(r,r,n),s=_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1___default()(a,2),i=s[0],o=s[1];if(!t){var l=this.copy();return l.__update_frame_in_place(i,null,null,o,null),l}this.__update_frame_in_place(i,null,null,o,null)}},{key:"sort_values",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(!utils.__key_in_object(e,"by"))throw Error("use col_name to specify column name");var t=void 0!==e.inplace&&e.inplace,n=void 0===e.ascending||e.ascending,r=this.index,a=this.column(e.by).values,s=this.__sort_by(a,r,n),i=_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1___default()(s,2),o=i[0],l=i[1];if(!t){var u=this.copy();return u.__update_frame_in_place(o,null,null,l,null),u}this.__update_frame_in_place(o,null,null,l,null)}},{key:"__set_col_property",value:function(e,t,n,r){r.forEach((function(t){delete e[t]})),t.forEach((function(t,r){Object.defineProperty(e,n[r],{get:function(){return new _series__WEBPACK_IMPORTED_MODULE_12__.F(t,{columns:n[r],index:e.index})},set:function(e){this.addColumn({column:n[r],value:e})}})}))}},{key:"__update_frame_in_place",value:function(e,t,n,r,a){if(null!=e)this.data=e;else if(null!=n){var s=utils._get_row_and_col_values(n);this.data=s[0],this.columns=s[1],t=s[1]}null!=n?(this.col_data=Object.values(n),this.columns=Object.keys(n),t=Object.keys(n)):null!=e&&(this.col_data=utils.__get_col_values(e)),null!=t&&(this.columns=t),null!=r&&(this.index_arr=r),null!=a&&(this.col_types=a)}},{key:"__sort_by",value:function(e,t,n){for(var r=this.values,a=utils.__sort(e,n),s=utils.__get_duplicate(e),i=[],o=[],l=0;l{"use strict";n.d(t,{Z:()=>_});var r=n(7757),a=n.n(r),s=n(8926),i=n.n(s),o=n(3038),l=n.n(o),u=n(319),c=n.n(u),h=n(4575),f=n.n(h),d=n(3913),p=n.n(d),m=n(7091),g=n(107),y=n(697),b=n(7737),v=new y.c,w=new b.z,_=function(){function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(f()(this,e),this.kwargs=n,t instanceof m.Tensor&&(t=t.arraySync()),v.__is_1D_array(t))this.series=!0,this._read_array(t);else if(this.series=!1,v.__is_object(t[0]))this._read_object(t,1);else if(v.__is_object(t))this._read_object(t,2);else{if(!(Array.isArray(t[0])||v.__is_number(t[0])||v.__is_string(t[0])))throw new Error("File format not supported");this._read_array(t)}}var t,n;return p()(e,[{key:"_read_array",value:function(e){if(this.data=v.__replace_undefined_with_NaN(e,this.series),this.row_data_tensor=(0,m.tensor)(this.data),this.series?this.col_data=[this.values]:this.col_data=v.__get_col_values(this.data),this.col_data_tensor=(0,m.tensor)(this.col_data),"index"in this.kwargs?this.__set_index(this.kwargs.index):this.index_arr=c()(Array(this.row_data_tensor.shape[0]).keys()),1==this.ndim)"columns"in this.kwargs?this.columns=this.kwargs.columns:this.columns=["0"];else if("columns"in this.kwargs){if(this.kwargs.columns.length!=Number(this.row_data_tensor.shape[1]))throw"Column length mismatch. You provided a column of length ".concat(this.kwargs.columns.length," but data has length of ").concat(this.row_data_tensor.shape[1]);this.columns=this.kwargs.columns}else this.columns=c()(Array(this.row_data_tensor.shape[1]).keys());"dtypes"in this.kwargs?this._set_col_types(this.kwargs.dtypes,!1):this._set_col_types(null,!0)}},{key:"_read_object",value:function(e,t){if(2==t){var n=v._get_row_and_col_values(e),r=l()(n,2),a=r[0],s=r[1];this.kwargs.columns=s,this._read_array(a)}else{var i=e.map((function(e){return Object.values(e)}));if(this.data=v.__replace_undefined_with_NaN(i,this.series),this.row_data_tensor=(0,m.tensor)(this.data),this.kwargs.columns=Object.keys(Object.values(e)[0]),this.series?this.col_data=[this.values]:this.col_data=v.__get_col_values(this.data),this.col_data_tensor=(0,m.tensor)(this.col_data),"index"in this.kwargs?this.__set_index(this.kwargs.index):this.index_arr=c()(Array(this.row_data_tensor.shape[0]).keys()),1==this.ndim)this.kwargs.columns?this.columns=this.kwargs.columns:this.columns=["0"];else if("columns"in this.kwargs){if(this.kwargs.columns.length!=Number(this.row_data_tensor.shape[1]))throw"Column length mismatch. You provided a column of length ".concat(this.kwargs.columns.length," but data has column length of ").concat(this.row_data_tensor.shape[1]);this.columns=this.kwargs.columns}else this.columns=c()(Array(this.row_data_tensor.shape[1]).keys());"dtypes"in this.kwargs?this._set_col_types(this.kwargs.dtypes,!1):this._set_col_types(null,!0)}}},{key:"_set_col_types",value:function(e,t){var n=["float32","int32","string","boolean"];if(t)this.series?this.col_types=v.__get_t(this.values):this.col_types=v.__get_t(this.col_data);else if(this.series)this.col_types=e;else{if(e.length!=this.columns.length)throw new Error("length Mixmatch: Length of specified dtypes is ".concat(e.length,", but length of columns is ").concat(this.columns.length));if(!Array.isArray(e))throw new Error("dtypes must be an Array of types");e.forEach((function(e,t){if(!n.includes(e))throw new Error("dtype error: dtype specified at index ".concat(t," is not supported"))})),this.col_types=e}}},{key:"__set_index",value:function(e){if(!Array.isArray(e))throw Error("Value Error: index must be an array");if(e.length>this.shape[0]||e.lengthr){var l,u,c,h=this.columns.slice(0,4),f=this.columns.slice(i-4);if(o=[""].concat(h).concat(["..."]).concat(f),this.values.length>n){var d=this.iloc({rows:["0:".concat(n)],columns:["0:4"]}),p=this.iloc({rows:["0:".concat(n)],columns:["".concat(i-4,":")]});l=this.index.slice(0,n),u=d.values,c=p.values}else{var m=this.iloc({rows:["0:"],columns:["0:4"]}),y=this.iloc({rows:["0:"],columns:["".concat(i-4,":")]});l=this.index.slice(0,n),u=m.values,c=y.values}l.map((function(e,t){var n=[e].concat(u[t]).concat(["..."]).concat(c[t]);a.push(n)}))}else{var b,v;if(o=[""].concat(this.columns),this.values.length>n){var _=this.loc({rows:["0:".concat(n)],columns:this.columns});b=_.index,v=_.values}else v=this.values,b=this.index;b.forEach((function(e,t){var n=[e].concat(v[t]);a.push(n)}))}s[0]=10;for(var x=1;x{"use strict";__webpack_require__.d(__webpack_exports__,{X:()=>GroupBy});var _babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__(319),_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0___default=__webpack_require__.n(_babel_runtime_helpers_toConsumableArray__WEBPACK_IMPORTED_MODULE_0__),_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__(3038),_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1___default=__webpack_require__.n(_babel_runtime_helpers_slicedToArray__WEBPACK_IMPORTED_MODULE_1__),_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__(4575),_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2___default=__webpack_require__.n(_babel_runtime_helpers_classCallCheck__WEBPACK_IMPORTED_MODULE_2__),_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__(3913),_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3___default=__webpack_require__.n(_babel_runtime_helpers_createClass__WEBPACK_IMPORTED_MODULE_3__),_frame__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__(3676),_utils__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__(697),_series__WEBPACK_IMPORTED_MODULE_6__=__webpack_require__(3938);function _createForOfIteratorHelper(e,t){var n;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(n=_unsupportedIterableToArray(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,a=function(){};return{s:a,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var s,i=!0,o=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return i=e.done,e},e:function(e){o=!0,s=e},f:function(){try{i||null==n.return||n.return()}finally{if(o)throw s}}}}function _unsupportedIterableToArray(e,t){if(e){if("string"==typeof e)return _arrayLikeToArray(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?_arrayLikeToArray(e,t):void 0}}function _arrayLikeToArray(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&void 0!==arguments[0]?arguments[0]:{},t=Object.keys(e),n=t.map((function(t){return e[t].toLocaleLowerCase()})),r=this.col(t),a=r.arithemetic(n),s=this.to_DataFrame(r.key_col,r.group_col_name,a,n);return s}},{key:"to_DataFrame",value:function(e,t,n,r){var a=[];!function e(t,n,r){if(Array.isArray(n))if(Array.isArray(n[0])){var s,i=_createForOfIteratorHelper(n[0].map((function(e,t){return n.map((function(e){return e[t]}))})));try{for(i.s();!(s=i.n()).done;){var o=s.value;a.push(t.concat(o))}}catch(e){i.e(e)}finally{i.f()}}else a.push(t.concat(n));else for(var l=0,u=Object.entries(n);l{"use strict";n.d(t,{j:()=>a});var r=new(n(697).c),a=function(e,t){var n=null,a=null,s=!1;if(Object.prototype.hasOwnProperty.call(t,"rows")){if(!Array.isArray(t.rows))throw new Error("rows parameter must be a Array");if(1==t.rows.length&&"string"==typeof t.rows[0])if(t.rows[0].includes(":")){var i=t.rows[0].split(":");if("loc"==t.type){var o,l;o=isNaN(Number(i[0]))?e.index.indexOf(i[0]):Number(i[0]),l=isNaN(Number(i[1]))?e.index.lastIndexOf(i[1])-1||e.values.length-1:Number(i[1])-1||e.values.length-1,n=r.__range(o,l)}else{var u=parseInt(i[0])||0,c=parseInt(i[1])-1||e.values.length-1;"number"==typeof u&&"number"==typeof c&&(n=r.__range(u,c))}}else{if("loc"!=t.type)throw new Error("Slice index must be separated by ':'");var h=[];e.index.map((function(e,n){t.rows[0]==e&&h.push(n)})),n=h}else if("loc"==t.type){var f=[];e.index.map((function(e,n){t.rows.includes(e)&&f.push(n)})),n=f}else n=t.rows}else t.type,n=r.__range(0,Number(e.shape[0])-1);if(Object.prototype.hasOwnProperty.call(t,"columns")){if(!Array.isArray(t.columns))throw new Error("columns must be a list");if(1==t.columns.length&&t.columns[0].includes(":")){var d,p,m=t.columns[0].split(":");"iloc"==t.type?(d=""==m[0]?0:parseInt(m[0])||0,p=""==m[1]?parseInt(e.columns.length-1):parseInt(m[1])-1==0?0:parseInt(m[1])-1):(d=parseInt(e.columns.indexOf(m[0])),p=parseInt(e.columns.indexOf(m[1]))-1),"number"==typeof d&&"number"==typeof p&&(a=r.__range(d,p),s=!0)}else a=t.columns}else a="loc"==t.type?e.column_names:r.__range(0,Number(e.shape[1])-1);for(var g=e.values,y=[],b=0;bw)throw new Error("Specified row index ".concat(v," is bigger than maximum row index of ").concat(w));if(Array.isArray(g[0])){var _=g[v],x=[];for(var k in a){var E;if("loc"!=t.type||s){E=a[k];var C=e.columns.length-1;if(E>C)throw new Error("column index ".concat(E," is bigger than ").concat(C))}else if(-1==(E=e.columns.indexOf(a[k])))throw new Error("Column ".concat(a[k]," does not exist"));var S=_[E];x.push(S)}y.push(x)}else y.push(g[v])}var N=[];"iloc"==t.type||s?a.map((function(t){N.push(e.columns[t])})):N=a;var I=[];return n.forEach((function(t){I.push(e.index[t])})),[y,N,I]}},3938:(e,t,n)=>{"use strict";n.d(t,{F:()=>R});var r=n(3038),a=n.n(r),s=n(319),i=n.n(s),o=n(7757),l=n.n(o),u=n(8926),c=n.n(u),h=n(4575),f=n.n(h),d=n(3913),p=n.n(d),m=n(2205),g=n.n(m),y=n(8585),b=n.n(y),v=n(9754),w=n.n(v),_=n(7091),x=n(3346),k=n(697),E=n(1745),C=n(2847),S=n(107),N=n(7737),I=n(9187),A=n(4564),D=n(9365);var T=new k.c,F=new N.z,R=function(e){g()(o,e);var t,n,r,s=(n=o,r=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,t=w()(n);if(r){var a=w()(this).constructor;e=Reflect.construct(t,arguments,a)}else e=t.apply(this,arguments);return b()(this,e)});function o(e,t){var n;return f()(this,o),Array.isArray(e[0])||T.__is_object(e[0])?(e=T.__convert_2D_to_1D(e),n=s.call(this,e,t)):n=s.call(this,e,t),b()(n)}return p()(o,[{key:"head",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:5;if(e>this.shape[0]||e<1)return new o(this.values,{columns:this.column_names});var t=this.values.slice(0,e);return new o(t,{columns:this.column_names})}},{key:"tail",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:5;if(e>this.values.length||e<1)return new o(this.values,{columns:this.column_names});var t=this.values.slice(this.shape[0]-e),n=this.index.slice(this.shape[0]-e),r=new o(t,{columns:this.column_names,index:n});return r}},{key:"sample",value:(t=c()(l().mark((function e(){var t,n,r,a,s=arguments;return l().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t=s.length>0&&void 0!==s[0]?s[0]:5,n=s.length>1&&void 0!==s[1]?s[1]:1,!(t>this.shape[0])){e.next=4;break}throw new Error("Sample size n cannot be bigger than size of dataset");case 4:if(!(t<-1||0==t)){e.next=6;break}throw new Error("Sample size cannot be less than -1 or 0");case 6:return t=-1===t?this.shape[0]:t,e.next=9,_.data.array(this.index).shuffle(t,n).take(t).toArray();case 9:return r=e.sent,a=this.iloc(r),e.abrupt("return",a);case 12:case"end":return e.stop()}}),e,this)}))),function(){return t.apply(this,arguments)})},{key:"add",value:function(e){return T.__is_number(e)?new o(this.row_data_tensor.add(e).arraySync(),{columns:this.column_names}):this.__check_series_op_compactibility?new o(this.tensor.add(e.tensor).arraySync(),{columns:this.column_names}):void 0}},{key:"sub",value:function(e){return T.__is_number(e)?new o(this.tensor.sub(e).arraySync(),{columns:this.column_names}):this.__check_series_op_compactibility?new o(this.tensor.sub(e.tensor).arraySync(),{columns:this.column_names}):void 0}},{key:"mul",value:function(e){return T.__is_number(e)?new o(this.tensor.mul(e).arraySync(),{columns:this.column_names}):this.__check_series_op_compactibility?new o(this.tensor.mul(e.tensor).arraySync(),{columns:this.column_names}):void 0}},{key:"div",value:function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];if(T.__is_number(e)){var n=this.tensor.div(e);return new o(n.arraySync(),{columns:this.column_names,dtypes:[n.dtype]})}if(this.__check_series_op_compactibility){var r;r=t?"float32":"int32";var a=this.tensor.asType(r),s=e.tensor.asType(r),i=a.div(s);return new o(i.arraySync(),{columns:this.column_names,dtypes:[i.dtype]})}}},{key:"pow",value:function(e){return T.__is_number(e)?new o(this.tensor.pow(e).arraySync(),{columns:this.column_names}):this.__check_series_op_compactibility?new o(this.tensor.pow(e.tensor).arraySync(),{columns:this.column_names}):void 0}},{key:"mod",value:function(e){return T.__is_number(e)?new o(this.tensor.mod(e).arraySync(),{columns:this.column_names}):this.__check_series_op_compactibility?new o(this.tensor.mod(e.tensor).arraySync(),{columns:this.column_names}):void 0}},{key:"mean",value:function(){T._throw_str_dtype_error(this,"mean");var e=T._remove_nans(this.values);return _.tensor(e).mean().arraySync()}},{key:"median",value:function(){T._throw_str_dtype_error(this,"median");var e=T._remove_nans(this.values);return(0,x.C2o)(e)}},{key:"mode",value:function(){T._throw_str_dtype_error(this,"median");var e=T._remove_nans(this.values);return(0,x.xJM)(e)}},{key:"min",value:function(){return T._throw_str_dtype_error(this,"min"),this.row_data_tensor.min().arraySync()}},{key:"max",value:function(){return T._throw_str_dtype_error(this,"max"),this.row_data_tensor.max().arraySync()}},{key:"sum",value:function(){if(T._throw_str_dtype_error(this,"sum"),"boolean"==this.dtypes[0]){var e=T._remove_nans(this.values),t=_.tensor(e).sum().arraySync();return Number(t)}var n=T._remove_nans(this.values),r=_.tensor(n).sum().arraySync();return Number(r.toFixed(5))}},{key:"count",value:function(){return T.__count_nan(this.values,!0,!0)}},{key:"maximum",value:function(e){if(T.__is_number(e)){var t=this.row_data_tensor.maximum(e);return new o(t.arraySync(),{columns:this.column_names,dtypes:t.dtype,index:this.index})}if(this.__check_series_op_compactibility){var n=this.row_data_tensor,r=e.tensor;return new o(n.maximum(r).arraySync(),{columns:this.column_names,index:this.index})}}},{key:"minimum",value:function(e){if(T.__is_number(e)){var t=this.row_data_tensor.minimum(e);return new o(t.arraySync(),{columns:this.column_names,dtypes:t.dtype,index:this.index})}if(this.__check_series_op_compactibility){var n=this.tensor,r=e.tensor;return new o(n.minimum(r).arraySync(),{columns:this.column_names,index:this.index})}}},{key:"round",value:function(e){return T.__is_undefined(e)?new o(_.round(this.row_data_tensor).arraySync(),{columns:this.column_names,index:this.index}):new o(T.__round(this.values,e,!0),{columns:this.column_names,index:this.index})}},{key:"std",value:function(){T._throw_str_dtype_error(this,"std");var e=T._remove_nans(this.values);return(0,x.qoR)(e)}},{key:"var",value:function(){T._throw_str_dtype_error(this,"std");var e=T._remove_nans(this.values);return(0,x.CAK)(e)}},{key:"isna",value:function(){return new o(this.__isna(),{index:this.index,columns:this.column_names,dtypes:["boolean"]})}},{key:"fillna",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=["value","inplace"];if(T._throw_wrong_params_error(e,t),e.inplace=e.inplace||!1,!("value"in e))throw Error("Value Error: Must specify value to replace with");var n=[];if(this.values.forEach((function(t){isNaN(t)&&"string"!=typeof t?n.push(e.value):n.push(t)})),!e.inplace){var r=new o(n,{columns:this.column_names,index:this.index,dtypes:this.dtypes});return r}this.data=n}},{key:"sort_values",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=["inplace","ascending"];T._throw_wrong_params_error(t,n),"ascending"in t||(t.ascending=!0),"inplace"in t||(t.inplace=!1);var r=[],a=i()(this.values),s=T.__range(0,this.index.length-1),l=T._sort_arr_with_index(s,a,this.dtypes[0]);if(l.forEach((function(t){r.push(e.values[t])})),t.ascending&&(r=r.reverse(),l=l.reverse()),!t.inplace){var u=new o(r,{columns:this.column_names,index:l});return u}this.data=r,this.__set_index(l)}},{key:"copy",value:function(){return new o(i()(this.values),{columns:i()(this.column_names),index:i()(this.index),dtypes:i()(this.dtypes[0])})}},{key:"describe",value:function(){return"string"==this.dtypes[0]?null:new o([this.count(),this.mean(),this.std(),this.min(),this.median(),this.max(),this.var()],{columns:this.columns,index:["count","mean","std","min","median","max","variance"]})}},{key:"reset_index",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=["inplace"];if(T._throw_wrong_params_error(e,t),e.inplace=e.inplace||!1,!e.inplace){var n=this.copy();return n.__reset_index(),n}this.__reset_index()}},{key:"set_index",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=["index","inplace"];if(T._throw_wrong_params_error(e,t),e.inplace=e.inplace||!1,!("index"in e))throw Error("Index ValueError: You must specify an array of index");if(e.index.length!=this.index.length)throw Error("Index LengthError: Lenght of new Index array ".concat(e.index.length," must match lenght of existing index ").concat(this.index.length));if(!e.inplace){var n=this.copy();return n.__set_index(e.index),n}this.index_arr=e.index}},{key:"__check_series_op_compactibility",value:function(e){if(T.__is_undefined(e.series))throw Error("param [other] must be a Series or a single value that can be broadcasted");if(e.values.length!=this.values.length)throw Error("Shape Error: Series shape do not match");if("float"!=this.dtypes[0]||"int"!=this.dtypes[0])throw Error("dtype Error: Cannot perform operation on type ".concat(this.dtypes[0]," with type ").concat(e.dtypes[0]));if("float"!=e.dtypes[0]||"int"!=e.dtypes[0])throw Error("dtype Error: Cannot perform operation on type ".concat(e.dtypes[0]," with type ").concat(this.dtypes[0]));return!0}},{key:"map",value:function(e){var t=T.__is_function(e);return new o(this.data.map((function(n){if(t)return e(n);if(T.__is_object(e))return n in e?e[n]:NaN;throw new Error("callable must either be a function or an object")})),{columns:this.column_names,index:this.index})}},{key:"apply",value:function(e){if(!T.__is_function(e))throw new Error("the arguement most be a function");return new o(this.data.map((function(t){return e(t)})),{columns:this.column_names,index:this.index})}},{key:"unique",value:function(){var e=new Set(this.values);return new o(Array.from(e))}},{key:"nunique",value:function(){return this.unique().values.length}},{key:"value_counts",value:function(){for(var e=this.values,t={},n=0;n0&&void 0!==arguments[0]?arguments[0]:{},t=["replace","with","inplace"];if(T._throw_wrong_params_error(e,t),e.inplace=e.inplace||!1,!("replace"in e))throw Error("Params Error: Must specify param 'replace'");if(!("with"in e))throw Error("Params Error: Must specify param 'with'");var n=[],r=this.values;if(r.forEach((function(t){t==e.replace?n.push(e.with):n.push(t)})),!e.inplace){var a=new o(n,{index:this.index,columns:this.columns,dtypes:this.dtypes});return a}this.data=n}},{key:"dropna",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=["inplace"];T._throw_wrong_params_error(e,t),e.inplace=e.inplace||!1;var n=this.values,r=this.index,a=[],s=[],i=this.isna().values;if(i.forEach((function(e,t){e||(a.push(n[t]),s.push(r[t]))})),!e.inplace){var l=new o(a,{columns:this.column_names,index:s,dtypes:this.dtypes});return l}this.index_arr=s,this.data=a}},{key:"argsort",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=this.sort_values({ascending:e}).index,n=new o(t);return n}},{key:"argmax",value:function(){return this.row_data_tensor.argMax().arraySync()}},{key:"argmin",value:function(){return this.row_data_tensor.argMin().arraySync()}},{key:"drop_duplicates",value:function(){var e,t,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=["inplace","keep"];T._throw_wrong_params_error(n,r),n.inplace=n.inplace||!1,n.keep=n.keep||"first","last"==n.keep?(e=this.values.reverse(),t=this.index.reverse()):(e=this.values,t=this.index);var a=[],s=[];if(e.forEach((function(e,n){s.includes(e)||(a.push(t[n]),s.push(e))})),"last"==n.keep&&(s=s.reverse(),a=a.reverse()),!n.inplace){var i=new o(s,{index:a,columns:this.column_names,dtypes:this.dtypes});return i}this.data=s,this.index_arr=a}},{key:"toString",value:function(){var e,t,n=F.get_max_row,r=[],a={},s=[""].concat(this.columns);this.values.length>n?(t=this.values.slice(0,n),e=this.index.slice(0,n)):(t=this.values,e=this.index),e.forEach((function(e,n){var a=[e].concat(t[n]);r.push(a)})),a[0]=10,a[1]={width:20,truncate:20};var i=[s].concat(r);return(0,S.Kz)(i,{columns:a})}},{key:"__bool_ops",value:function(e,t){var n,r=this.values;if("number"==typeof e)n=i()(r).fill(e);else{if(!(e instanceof o))throw new Error("Value Error: 'other' must be an instance of Series");n=e.values}if(r.length!==n.length)throw new Error("Length Error: Both series must be of the same length");for(var a=[],s=0;su,a.push(c);break;case"le":c=l<=u,a.push(c);break;case"ge":c=l>=u,a.push(c);break;case"ne":c=l!=u,a.push(c);break;case"eq":c=l===u,a.push(c)}}return new o(a)}},{key:"__cum_ops",value:function(e){for(var t=this.values,n=t[0],r=[n],a=1;an?(r.push(s),n=s):r.push(n);break;case"min":s1&&void 0!==arguments[1]&&arguments[1];if(!t){var n=this.copy();if(Array.isArray(e))e.forEach((function(e,t){n.data.push(e),n.index_arr.push(t)}));else if(e instanceof o){var r=e.values,a=e.index;r.forEach((function(e,t){n.data.push(e),n.index_arr.push(a[t])}))}else n.data.push(e),n.index_arr.push(0);return n}var s=this;if(Array.isArray(e))e.forEach((function(e,t){s.data.push(e),s.index_arr.push(t)}));else if(e instanceof o){var i=e.values,l=e.index;i.forEach((function(e,t){s.data.push(e),s.index_arr.push(l[t])}))}else s.data.push(e),s.index_arr.push(0)}},{key:"tensor",get:function(){return _.tensor(this.values).asType(this.dtypes[0])}},{key:"dtype",get:function(){return this.dtypes[0]}},{key:"str",get:function(){if("string"==this.dtypes[0])return new E.W(this);throw new Error("Cannot call accessor str on non-string type")}},{key:"dt",get:function(){var e=new I.p({data:this});return e.preprocessed(),e}}]),o}(C.Z)},1745:(e,t,n)=>{"use strict";n.d(t,{W:()=>l});var r=n(4575),a=n.n(r),s=n(3913),i=n.n(s),o=n(3938),l=function(){function e(t){a()(this,e),this.series=t,this.array=t.values}return i()(e,[{key:"toLowerCase",value:function(){var e=[];return this.array.map((function(t){isNaN(t)&&"string"!=typeof t?e.push(t):e.push(t.toLowerCase())})),this.__create_new_sf_from(e,this.series)}},{key:"toUpperCase",value:function(){var e=[];return this.array.map((function(t){isNaN(t)&&"string"!=typeof t?e.push(t):e.push(t.toUpperCase())})),this.__create_new_sf_from(e,this.series)}},{key:"capitalize",value:function(){var e=[];return this.array.map((function(t){if(isNaN(t)&&"string"!=typeof t)e.push(t);else{var n=t.slice(0,1),r=t.slice(1),a="".concat(n.toUpperCase()).concat(r.toLowerCase());e.push(a)}})),this.__create_new_sf_from(e,this.series)}},{key:"charAt",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=[];this.array.map((function(n){isNaN(n)&&"string"!=typeof n?t.push(n):t.push(n.charAt(e))}));var n=this.__create_new_sf_from(t,this.series);return n}},{key:"concat",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;if(Array.isArray(e)){for(var n=[],r=0;r0&&void 0!==arguments[0]?arguments[0]:"",t=[];this.array.forEach((function(n){isNaN(n)&&"string"!=typeof n?t.push(!1):t.push(n.startsWith(e))}));var n=this.__create_new_sf_from(t,this.series);return n}},{key:"endsWith",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=[];this.array.map((function(n){isNaN(n)&&"string"!=typeof n?t.push(!1):t.push(n.endsWith(e))}));var n=this.__create_new_sf_from(t,this.series);return n}},{key:"includes",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=[];this.array.map((function(n){isNaN(n)&&"string"!=typeof n?t.push(!1):t.push(n.includes(e))}));var n=this.__create_new_sf_from(t,this.series);return n}},{key:"indexOf",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=[];this.array.map((function(n){isNaN(n)&&"string"!=typeof n?t.push(-1):t.push(n.indexOf(e))}));var n=this.__create_new_sf_from(t,this.series);return n}},{key:"lastIndexOf",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=[];this.array.map((function(n){isNaN(n)&&"string"!=typeof n?t.push(-1):t.push(n.lastIndexOf(e))}));var n=this.__create_new_sf_from(t,this.series);return n}},{key:"replace",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",n=[];this.array.map((function(r){isNaN(r)&&"string"!=typeof r?n.push(r):n.push(r.replace(e,t))}));var r=this.__create_new_sf_from(n,this.series);return r}},{key:"repeat",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,t=[];this.array.map((function(n){isNaN(n)&&"string"!=typeof n?t.push(n):t.push(n.repeat(e))}));var n=this.__create_new_sf_from(t,this.series);return n}},{key:"search",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=[];this.array.map((function(n){isNaN(n)&&"string"!=typeof n?t.push(-1):t.push(n.search(e))}));var n=this.__create_new_sf_from(t,this.series);return n}},{key:"slice",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=[];this.array.map((function(r){isNaN(r)&&"string"!=typeof r?n.push(r):n.push(r.slice(e,t))}));var r=this.__create_new_sf_from(n,this.series);return r}},{key:"split",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:" ",t=[];this.array.map((function(n){isNaN(n)&&"string"!=typeof n?t.push(n):t.push(n.split(e))}));var n=this.__create_new_sf_from(t,this.series);return n}},{key:"substr",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=[];this.array.map((function(r){isNaN(r)&&"string"!=typeof r?n.push(r):n.push(r.substr(e,t))}));var r=this.__create_new_sf_from(n,this.series);return r}},{key:"substring",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,n=[];this.array.map((function(r){isNaN(r)&&"string"!=typeof r?n.push(r):n.push(r.substring(e,t))}));var r=this.__create_new_sf_from(n,this.series);return r}},{key:"trim",value:function(){var e=[];return this.array.map((function(t){isNaN(t)&&"string"!=typeof t?e.push(t):e.push(t.trim())})),this.__create_new_sf_from(e,this.series)}},{key:"join",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:" ",n=[];this.array.map((function(r){if(isNaN(r)&&"string"!=typeof r)n.push(r);else{var a=e,s="".concat(r).concat(t).concat(a);n.push(s)}}));var r=this.__create_new_sf_from(n,this.series);return r}},{key:"len",value:function(){var e=[];return this.array.map((function(t){isNaN(t)&&"string"!=typeof t?e.push(t):e.push(t.length)})),this.__create_new_sf_from(e,this.series)}},{key:"__create_new_sf_from",value:function(e,t){return new o.F(e,{columns:t.column_names,index:t.index})}}]),e}()},9187:(e,t,n)=>{"use strict";n.d(t,{p:()=>c,J:()=>h});var r=n(4575),a=n.n(r),s=n(3913),i=n.n(s),o=n(697),l=n(3938),u=new o.c,c=function(){function e(t){a()(this,e),u.__in_object(t,"data","specify the data"),t.data instanceof l.F?this.data=t.data.values:this.data=t.data,this.format=t.format||null,this.keys={Y:4,m:2,H:2,M:2,S:2,b:3,d:2,"-":1},this.__in_format=["%Y-m-d%","%m-d-Y%","%m-d-Y H%M%S%"],this.__monthName=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],this.__weekName=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]}return i()(e,[{key:"preprocessed",value:function(){var e=null;this.format&&(e=this.generate_format()),this.date_list=[];for(var t=0;t4?n+=":"+e.slice(r,r+s):4==a?n+=" "+e.slice(r,r+s):a>0&&a<=2&&(n+="-"+e.slice(r,r+s)),r+=s}return n}},{key:"generate_format",value:function(){var e=this.format.split(""),t=this;return e.filter((function(e){return u.__key_in_object(t.keys,e)})).map((function(e){return t.keys[e]}))}},{key:"is_timestamp",value:function(e){var t=parseInt(e),n=String(t);return!(isNaN(t)||n.length{"use strict";n.d(t,{c:()=>d});var r=n(3038),a=n.n(r),s=n(8),i=n.n(s),o=n(4575),l=n.n(o),u=n(3913),c=n.n(u),h=n(7091),f=new(n(7737).z),d=function(){function e(){l()(this,e)}return c()(e,[{key:"remove",value:function(e,t){return e.filter((function(e,n){return n!=t}))}},{key:"__remove_arr",value:function(e,t){return e.filter((function(e,n){return!t.includes(n)}))}},{key:"__is_string",value:function(e){return"string"==typeof e||e instanceof String}},{key:"__is_number",value:function(e){return"number"==typeof e&&isFinite(e)}},{key:"__is_object",value:function(e){return e&&"object"===i()(e)&&e.constructor&&"Object"===e.constructor.name}},{key:"__is_null",value:function(e){return null===e}},{key:"__is_undefined",value:function(e){return void 0===e}},{key:"__sample_from_iter",value:function(e,t,n){var r=e.length;if(t<0||t>r)throw new RangeError("Sample larger than population or is negative");if(n||r<=(t<=5?21:21+Math.pow(4,Math.ceil(Math.log(3*t,4))))){n||(e=Array.prototype.slice.call(e));for(var a=0;a1&&void 0!==arguments[1])||arguments[1],n=arguments.length>2?arguments[2]:void 0;if(n){var r=0,a=0;return e.forEach((function(e){Number.isNaN(e)?r+=1:a+=1})),t?a:r}var s=[];return e.forEach((function(e){var n=0,r=0;e.forEach((function(e){Number.isNaN(e)?n+=1:r+=1})),t?s.push(r):s.push(n)})),s}},{key:"__median",value:function(e,t){if(t){var n=e.slice().sort((function(e,t){return e-t})),r=Math.floor(n.length/2);return n.length%2==0?(n[r-1]+n[r])/2:n[r]}var a=[];return e.map((function(e){var t=e.slice().sort((function(e,t){return e-t})),n=Math.floor(t.length/2);t.length%2==0?a.push((t[n-1]+t[n])/2):a.push(t[n])})),a}},{key:"__mode",value:function(e){var t,n=[],r=[],a=0;for(t in e.forEach((function(e){r[e]=(r[e]||0)+1,r[e]>a&&(a=r[e])})),r)this.__key_in_object(r,t)&&r[t]===a&&n.push(Number(t));return n}},{key:"__round",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2,n=arguments.length>2?arguments[2]:void 0;if(t<0&&(t=1),n){var r=[];return e.map((function(e){r.push(Number(e.toFixed(t)))})),r}var a=[];return e.map((function(e){var n=[];e.map((function(e){n.push(Number(e.toFixed(t)))})),a.push(n)})),a}},{key:"__is_function",value:function(e){return"function"==typeof e}},{key:"__randgen",value:function(e,t,n){var r=[];function a(e,t){return Math.floor(Math.random()*(t-e)+e)}function s(e,r){if(!r.includes(e))return e;s(e=a(t,n),r)}for(var i=0;i1&&void 0!==arguments[1])||arguments[1],n=e.slice();return n.sort((function(e,n){return t?"string"==typeof e&&"string"==typeof n?e.charCodeAt()-n.charCodeAt():e-n:"string"==typeof e&&"string"==typeof n?n.charCodeAt()-e.charCodeAt():n-e}))}},{key:"__is_browser_env",value:function(){return new Function("try {return this===window;}catch(e){ return false;}")()}},{key:"__is_node_env",value:function(){return new Function("try {return this===global;}catch(e){return false;}")()}},{key:"_throw_str_dtype_error",value:function(e,t){if("string"==e.dtypes[0])throw Error("dtype error: String data type does not support ".concat(t," operation"))}},{key:"_remove_nans",value:function(e){return e.filter((function(e){return!isNaN(e)&&"string"!=typeof e}))}},{key:"_replace_nan_with_null",value:function(e){return e.map((function(e){return isNaN(e)?null:e}))}},{key:"__get_duplicate",value:function(e){var t={},n={};for(var r in e.forEach((function(e,n){e in t?(t[e].count+=1,t[e].index.push(n)):(t[e]={},t[e].count=1,t[e].index=[n])})),t)t[r].count>=2&&(n[r]={},n[r].count=t[r].count,n[r].index=t[r].index);return n}},{key:"_sort_arr_with_index",value:function(e,t,n){var r=e.map((function(e,n){return[t[n],e]}));return"string"==n?r.sort():r.sort((function(e,t){var n=a()(e,1)[0];return a()(t,1)[0]-n})),r.map((function(e){return a()(e,2)[1]}))}}]),e}()},2476:(e,t,n)=>{"use strict";n.r(t),n.d(t,{Configs:()=>W.z,DataFrame:()=>i.N,LabelEncoder:()=>A,MinMaxScaler:()=>F,NDframe:()=>r.Z,OneHotEncoder:()=>D,Series:()=>s.F,StandardScaler:()=>R,Str:()=>U.W,Utils:()=>k.c,_version:()=>V,concat:()=>N.z,date_range:()=>M,get_dummies:()=>z,merge:()=>S,read_csv:()=>p,read_excel:()=>g,read_json:()=>m,tf:()=>a,to_datetime:()=>o.J});var r=n(2847),a=n(7091),s=n(3938),i=n(3676),o=n(9187),l=n(7757),u=n.n(l),c=n(8926),h=n.n(c),f=n(7869),d=n.n(f),p=function(){var e=h()(u().mark((function e(t){var n,r,s,o,l,c=arguments;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=c.length>1&&void 0!==c[1]?c[1]:{},r=n.start,s=n.end,t.startsWith("https")||t.startsWith("http")||t.startsWith("blob")){e.next=4;break}throw new Error("Cannot read local file in browser environment");case 4:return o=[],e.next=7,a.data.csv(t,n).skip(r).take(s).forEachAsync((function(e){return o.push(e)}));case 7:return l=new i.N(o),e.abrupt("return",l);case 9:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),m=function(){var e=h()(u().mark((function e(t){var n,r,a;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,fetch(t,{method:"Get"});case 2:return n=e.sent,e.next=5,n.json();case 5:return r=e.sent,a=new i.N(r),e.abrupt("return",a);case 8:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),g=function(){var e=h()(u().mark((function e(t){var n,r,a,s,o,l,c,h,f,p,m,g,y,b,v,w=arguments;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=w.length>1&&void 0!==w[1]?w[1]:{},r=n.sheet,a=n.header_index,s=n.data_index,a||(a=1),s||(s=a+1),e.prev=4,e.next=7,fetch(t,{method:"Get"});case 7:return l=e.sent,e.next=10,l.arrayBuffer();case 10:for(l=e.sent,l=new Uint8Array(l),o=d().read(l,{type:"array"}),c=o.Sheets[r||o.SheetNames[0]],h=d().utils.decode_range(c["!ref"]),f=[],p=[],m=a-1;m<=h.e.r;++m){for(g=[],y=h.s.c;y<=h.e.c;++y)b=void 0,m==a-1&&(b=d().utils.encode_cell({c:y,r:a-1}),c[b]&&f.push(c[b].v)),m>=s-1&&(b=d().utils.encode_cell({c:y,r:m}),c[b]&&g.push(c[b].v));m>=s-1&&p.push(g)}return v=new i.N(p,{columns:f}),e.abrupt("return",v);case 21:throw e.prev=21,e.t0=e.catch(4),new Error(e.t0);case 24:case"end":return e.stop()}}),e,null,[[4,21]])})));return function(t){return e.apply(this,arguments)}}(),y=n(319),b=n.n(y),v=n(4575),w=n.n(v),_=n(3913),x=n.n(_),k=n(697),E=new k.c,C=function(){function e(t){var n=this;if(w()(this,e),E.__in_object(t,"left"),E.__in_object(t,"right"),E.__in_object(t,"on"),E.__key_in_object(t,"how")?this.how=t.how:(this.how="inner",t.how="inner"),this.left=null,this.right=null,this.on=null,!(t.left instanceof i.N&&t.right instanceof i.N))throw new Error("The left and right key value must be a dataFrame");if(this.left=t.left,this.right=t.right,!Array.isArray(t.on))throw new Error("key 'on' must be a list");if(this.on=t.on,!["outer","inner","left","right"].includes(t.how))throw new Error("".concat(t.how," specify in keyword how is not recognise"));this.how=t.how,this.left_col_index=[],this.right_col_index=[];for(var r=0;r3&&void 0!==arguments[3]?arguments[3]:null,s=null,i=null,o=null,l=null;if(e&&t){s=new Date(e),o=this.freq_type(s,this.freq),i=new Date(t),l=this.freq_type(i,this.freq);var u=s.getFullYear(),c=i.getFullYear();u(l=a?n*a-1:n-1)&&(l+=o);var p=O.__range(o,l);a&&(p=this.offset_count(p,a));var m=p.map((function(e){return r.set_dateProps(s,r.freq,e)})),g=this.toLocalString(m);return g}if(t&&!e){i=new Date(t),o=(l=this.freq_type(i,this.freq))-n+1;var y=O.__range(o,l);a&&(y=this.offset_count(y,a));var b=y.map((function(e){return r.set_dateProps(i,r.freq,e)})),v=this.toLocalString(b);return v}}},{key:"freq_type",value:function(e,t){var n=null;switch(t){case"M":n=e.getMonth();break;case"Y":n=e.getFullYear();break;case"s":n=e.getSeconds();break;case"D":n=e.getDate();break;case"H":n=e.getHours();break;case"m":n=e.getMinutes()}return n}},{key:"offset_count",value:function(e,t){for(var n=[],r=0;r11?e%12==0?[n=e/12,e-(t=e)]:[n,e-t]:[n,e]}))}},{key:"day_end",value:function(e,t){for(var n=this.month_end(e,t),r=O.__range(e.getMonth(),n),a=this.month_range(r),s=0,i=0;i0&&void 0!==arguments[0]?arguments[0]:{};P.__in_object(e,"data","data not provided");var t=e.prefix||null,n=e.prefix_sep||["_"],r=e.columns||null,a=!1,s=null;if(Array.isArray(e.data)?s=e.data:e.data instanceof i.N?(s=e.data,a=!0):s=e.data.values,a){var o=[];if(r?r.forEach((function(e){var t=r.indexOf(e);o.push(t)})):(r=[],s.col_types.map((function(e,t){if("string"==e){var n=s.columns[t];r.push(n),o.push(t)}}))),t){if(!Array.isArray(t))throw new Error("prefix for dataframe must be an array");if(t.length!=r.length)throw new Error("prefix must be the same length with the number of onehot encoding column")}else t=r;var l=s.values,u=s.columns,c=s.col_data,h=[];o.forEach((function(e){h.push(c[e])}));var f=[],d=[];h.forEach((function(e,r){var a=L(e,t[r],n),s=$()(a,2),i=s[0],o=s[1];f.push.apply(f,b()(o)),0==d.length?d.push.apply(d,b()(i)):i.forEach((function(e,t){var n;(n=d[t]).push.apply(n,b()(e))}))}));var p=l.map((function(e,t){var n=e.slice(),r=P.__remove_arr(n,o);return r.push.apply(r,b()(d[t])),r})),m=P.__remove_arr(u,o);return m.push.apply(m,f),new i.N(p,{columns:m})}var g=L(s,t,n),y=$()(g,2),v=y[0],w=y[1];return new i.N(v,{columns:w})},W=n(7737),U=n(1745),V="0.2.7"},4564:(e,t,n)=>{"use strict";n.d(t,{X:()=>h});var r=n(4575),a=n.n(r),s=n(3913),i=n.n(s),o=n(697),l=n(3938),u=new o.c;try{var c=Plotly.version;console.info("Using Plotly version ".concat(c))}catch(e){console.info("Plotly CDN not found. If you need to make Plots, then add the Plotly CDN to your script")}var h=function(){function e(t,n){a()(this,e),this.div=n,this.ndframe=t}return i()(e,[{key:"line",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=this.__get_plot_params(t),r=n[0],a=n[1];if(this.ndframe instanceof l.F){var s={},i=this.ndframe.values;a.forEach((function(e){"layout"!=e&&(s[e]=t[e])})),s.y=i,s.type="line",Plotly.newPlot(this.div,[s],r.layout,r)}else if(u.__key_in_object(r,"x")&&u.__key_in_object(r,"y")){if(!this.ndframe.column_names.includes(r.x))throw Error("Column Error: ".concat(r.x," not found in columns"));if(!this.ndframe.column_names.includes(r.y))throw Error("Column Error: ".concat(r.y," not found in columns"));var o=this.ndframe[r.x].values,c=this.ndframe[r.y].values,h={};h.x=o,h.y=c;var f={},d={};f.title=r.x,d.title=r.y,r.layout.xaxis=f,r.layout.yaxis=d,Plotly.newPlot(this.div,[h],r.layout,r)}else if(u.__key_in_object(r,"x")||u.__key_in_object(r,"y")){var p=[];(u.__key_in_object(r,"columns")?this.____check_if_cols_exist(r.columns):this.ndframe.column_names).forEach((function(n){var s={};a.forEach((function(e){s[e]=t[e]})),u.__key_in_object(r,"x")?(s.x=e.ndframe[r.x].values,s.y=e.ndframe[n].values,s.name=n):(s.y=e.ndframe[r.y].values,s.x=e.ndframe[n].values,s.name=n),p.push(s)})),Plotly.newPlot(this.div,p,r.layout,r)}else{var m=[];(u.__key_in_object(r,"columns")?this.____check_if_cols_exist(r.columns):this.ndframe.column_names).forEach((function(n){var r={};a.forEach((function(e){r[e]=t[e]})),r.x=e.ndframe.index,r.y=e.ndframe[n].values,r.name=n,m.push(r)})),Plotly.newPlot(this.div,m,r.layout,r)}}},{key:"bar",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=this.__get_plot_params(t),r=n[0],a=n[1];if(this.ndframe instanceof l.F){var s={},i=this.ndframe.values;a.forEach((function(e){"layout"==!e&&(s[e]=t[e])})),s.y=i,s.type="bar",Plotly.newPlot(this.div,[s],r.layout,r)}else if(u.__key_in_object(r,"x")&&u.__key_in_object(r,"y")){if(!this.ndframe.column_names.includes(r.x))throw Error("Column Error: ".concat(r.x," not found in columns"));if(!this.ndframe.column_names.includes(r.y))throw Error("Column Error: ".concat(r.y," not found in columns"));var o=this.ndframe[r.x].values,c=this.ndframe[r.y].values,h={};h.x=o,h.y=c,h.type="bar";var f={},d={};f.title=r.x,d.title=r.y,r.layout.xaxis=f,r.layout.yaxis=d,Plotly.newPlot(this.div,[h],r.layout,r)}else if(u.__key_in_object(r,"x")||u.__key_in_object(r,"y")){var p={};a.forEach((function(e){"layout"==!e&&(p[e]=t[e])})),u.__key_in_object(r,"x")?p.y=this.ndframe[r.x].values:p.y=this.ndframe[r.y].values,p.type="bar",Plotly.newPlot(this.div,[p],r.layout,r)}else{var m=[];(u.__key_in_object(r,"columns")?this.____check_if_cols_exist(r.columns):this.ndframe.column_names).forEach((function(t){var n={};n.x=e.ndframe.index,n.y=e.ndframe[t].values,n.name=t,n.type="bar",m.push(n)})),Plotly.newPlot(this.div,m,r.layout,r)}}},{key:"scatter",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=this.__get_plot_params(t),r=n[0],a=n[1];if(this.ndframe instanceof l.F){var s={};a.forEach((function(e){"layout"==!e&&(s[e]=t[e])})),s.x=this.ndframe.values,s.y=this.ndframe.index,s.type="scatter",s.mode="markers",Plotly.newPlot(this.div,[s],r.layout,r)}else if(u.__key_in_object(r,"x")&&u.__key_in_object(r,"y")){if(!this.ndframe.column_names.includes(r.x))throw Error("Column Error: ".concat(r.x," not found in columns"));if(!this.ndframe.column_names.includes(r.y))throw Error("Column Error: ".concat(r.y," not found in columns"));var i=this.ndframe[r.x].values,o=this.ndframe[r.y].values,c={};c.x=i,c.y=o,c.type="scatter",c.mode="markers";var h={},f={};h.title=r.x,f.title=r.y,r.layout.xaxis=h,r.layout.yaxis=f,Plotly.newPlot(this.div,[c],r.layout,r)}else if(u.__key_in_object(r,"x")||u.__key_in_object(r,"y")){var d={};a.forEach((function(e){"layout"==!e&&(d[e]=t[e])})),u.__key_in_object(r,"x")?(d.y=this.ndframe.index,d.x=this.ndframe[r.x].values):(d.x=this.ndframe.index,d.y=this.ndframe[r.y].values),d.type="scatter",d.mode="markers",Plotly.newPlot(this.div,[d],r.layout,r)}else{var p=[];(u.__key_in_object(r,"columns")?this.____check_if_cols_exist(r.columns):this.ndframe.column_names).forEach((function(t){var n={};n.y=e.ndframe.index,n.x=e.ndframe[t].values,n.name=t,n.type="scatter",n.mode="markers",p.push(n)})),Plotly.newPlot(this.div,p,r.layout,r)}}},{key:"hist",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=this.__get_plot_params(t),r=n[0],a=n[1];if(this.ndframe instanceof l.F){var s={};a.forEach((function(e){"layout"==!e&&(s[e]=t[e])})),s.x=this.ndframe.values,s.type="histogram",Plotly.newPlot(this.div,[s],r.layout,r)}else if(u.__key_in_object(r,"x")){var i={};a.forEach((function(e){"layout"==!e&&(i[e]=t[e])})),i.x=this.ndframe[r.x].values,i.type="histogram",Plotly.newPlot(this.div,[i],r.layout,r)}else if(u.__key_in_object(r,"y")){var o={};a.forEach((function(e){"layout"==!e&&(o[e]=t[e])})),o.y=this.ndframe[r.y].values,o.type="histogram",Plotly.newPlot(this.div,[o],r.layout,r)}else{var c=[];(u.__key_in_object(r,"columns")?this.____check_if_cols_exist(r.columns):this.ndframe.column_names).forEach((function(t){var n={};n.x=e.ndframe[t].values,n.name=t,n.type="histogram",c.push(n)})),Plotly.newPlot(this.div,c,r.layout,r)}}},{key:"pie",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=this.__get_plot_params(t),r=n[0];if(this.ndframe instanceof l.F){var a=[{values:this.ndframe.values,labels:this.ndframe.index,type:"pie",name:r.labels,hoverinfo:"label+percent+name",automargin:!0}];Plotly.newPlot(this.div,a,r.layout,r)}else if(u.__key_in_object(r,"values")&&u.__key_in_object(r,"labels")){if(!this.ndframe.column_names.includes(r.labels))throw Error("Column Error: ".concat(r.labels," not found in columns. labels name must be one of [ ").concat(this.ndframe.column_names,"]"));if(!this.ndframe.column_names.includes(r.values))throw Error("Column Error: ".concat(r.values," not found in columns. value name must be one of [ ").concat(this.ndframe.column_names,"]"));var s=[{values:this.ndframe[r.values].values,labels:this.ndframe[r.labels].values,type:"pie",name:r.labels,hoverinfo:"label+percent+name",automargin:!0}];Plotly.newPlot(this.div,s,r.layout,r)}else{var i;if(i=u.__key_in_object(r,"columns")?this.____check_if_cols_exist(r.columns):this.ndframe.column_names,u.__key_in_object(r,"row_pos")){if(r.row_pos.length!=i.length-1)throw Error("Lenght of row_pos array must be equal to number of columns. Got ".concat(r.row_pos.length,", expected ").concat(i.length-1))}else{for(var o=[],c=0;c0&&void 0!==arguments[0]?arguments[0]:{},n=this.__get_plot_params(t),r=n[0],a=n[1];if(this.ndframe instanceof l.F){var s={},i=this.ndframe.values;a.forEach((function(e){"layout"==!e&&(s[e]=t[e])})),s.y=i,s.type="box",Plotly.newPlot(this.div,[s],r.layout,r)}else if(u.__key_in_object(r,"x")&&u.__key_in_object(r,"y")){if(!this.ndframe.column_names.includes(r.x))throw Error("Column Error: ".concat(r.x," not found in columns"));if(!this.ndframe.column_names.includes(r.y))throw Error("Column Error: ".concat(r.y," not found in columns"));var o=this.ndframe[r.x].values,c=this.ndframe[r.y].values,h={};h.x=o,h.y=c,h.type="box";var f={},d={};f.title=r.x,d.title=r.y,r.layout.xaxis=f,r.layout.yaxis=d,Plotly.newPlot(this.div,[h],r.layout,r)}else if(u.__key_in_object(r,"x")||u.__key_in_object(r,"y")){var p={};a.forEach((function(e){"layout"==!e&&(p[e]=t[e])})),u.__key_in_object(r,"x")?(p.x=this.ndframe[r.x].values,p.y=this.ndframe.index,p.type="box"):(p.x=this.ndframe.index,p.y=r.y,p.type="box"),Plotly.newPlot(this.div,[p],r.layout,r)}else{var m=[];(u.__key_in_object(r,"columns")?this.____check_if_cols_exist(r.columns):this.ndframe.column_names).forEach((function(n){var r={};a.forEach((function(e){r[e]=t[e]})),r.y=e.ndframe[n].values,r.name=n,r.type="box",m.push(r)})),Plotly.newPlot(this.div,m,r.layout,r)}}},{key:"violin",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=this.__get_plot_params(t),r=n[0],a=n[1];if(this.ndframe instanceof l.F){var s={},i=this.ndframe.values;a.forEach((function(e){"layout"==!e&&(s[e]=t[e])})),s.y=i,s.type="violin",Plotly.newPlot(this.div,[s],r.layout,r)}else if(u.__key_in_object(r,"x")&&u.__key_in_object(r,"y")){if(!this.ndframe.column_names.includes(r.x))throw Error("Column Error: ".concat(r.x," not found in columns"));if(!this.ndframe.column_names.includes(r.y))throw Error("Column Error: ".concat(r.y," not found in columns"));var o=this.ndframe[r.x].values,c=this.ndframe[r.y].values,h={};h.x=o,h.y=c,h.type="violin";var f={},d={};f.title=r.x,d.title=r.y,r.layout.xaxis=f,r.layout.yaxis=d,Plotly.newPlot(this.div,[h],r.layout,r)}else if(u.__key_in_object(r,"x")||u.__key_in_object(r,"y")){var p={};a.forEach((function(e){"layout"==!e&&(p[e]=t[e])})),u.__key_in_object(r,"x")?(p.x=this.ndframe[r.x].values,p.y=this.ndframe.index,p.type="violin"):(p.x=this.ndframe.index,p.y=r.y,p.type="violin"),Plotly.newPlot(this.div,[p],r.layout,r)}else{var m=[];(u.__key_in_object(r,"columns")?this.____check_if_cols_exist(r.columns):this.ndframe.column_names).forEach((function(n){var r={};a.forEach((function(e){r[e]=t[e]})),r.y=e.ndframe[n].values,r.name=n,r.type="violin",m.push(r)})),Plotly.newPlot(this.div,m,r.layout,r)}}},{key:"table",value:function(){var e,t=this,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=this.__get_plot_params(n),a=r[0],s={},i={},o=[];u.__key_in_object(a,"columns")?(a.columns.forEach((function(e){if(!t.ndframe.column_names.includes(e))throw Error("Column Error: ".concat(e," not found in columns. Columns should be one of [ ").concat(t.ndframe.column_names," ]"));var n=t.ndframe.column_names.indexOf(e);o.push(t.ndframe.col_data[n])})),e=a.columns):(e=this.ndframe.column_names,o=this.ndframe.col_data),s.values=e,i.values=o,a.header_style&&Object.keys(a.header_style).forEach((function(e){s[e]=a.header_style[e]})),a.cell_style&&Object.keys(a.cell_style).forEach((function(e){i[e]=a.cell_style[e]}));var l=[{type:"table",header:s,cells:i}];Plotly.newPlot(this.div,l,a.layout,a)}},{key:"__get_plot_params",value:function(e){var t=Object.keys(e),n={};return t.forEach((function(t){n[t]=e[t]})),u.__key_in_object(e,"layout")||(n.layout={}),[n,t]}},{key:"____check_if_cols_exist",value:function(e){var t=this;return e.forEach((function(e){if(!t.ndframe.column_names.includes(e))throw Error("Column Error: ".concat(e," not found in columns. Columns should be one of [ ").concat(t.ndframe.column_names," ]"))})),e}}]),e}()},1977:function(e,t){var n;!function(r){"use strict";var a=function(e){return.5*(Math.exp(e)+Math.exp(-e))},s=function(e){return.5*(Math.exp(e)-Math.exp(-e))},i=function(){throw SyntaxError("Invalid Param")};function o(e,t){var n=Math.abs(e),r=Math.abs(t);return 0===e?Math.log(r):0===t?Math.log(n):n<3e3&&r<3e3?.5*Math.log(e*e+t*t):Math.log(e/Math.cos(Math.atan2(t,e)))}function l(e,t){if(!(this instanceof l))return new l(e,t);var n=function(e,t){var n={re:0,im:0};if(null==e)n.re=n.im=0;else if(void 0!==t)n.re=e,n.im=t;else switch(typeof e){case"object":if("im"in e&&"re"in e)n.re=e.re,n.im=e.im;else if("abs"in e&&"arg"in e){if(!Number.isFinite(e.abs)&&Number.isFinite(e.arg))return l.INFINITY;n.re=e.abs*Math.cos(e.arg),n.im=e.abs*Math.sin(e.arg)}else if("r"in e&&"phi"in e){if(!Number.isFinite(e.r)&&Number.isFinite(e.phi))return l.INFINITY;n.re=e.r*Math.cos(e.phi),n.im=e.r*Math.sin(e.phi)}else 2===e.length?(n.re=e[0],n.im=e[1]):i();break;case"string":n.im=n.re=0;var r=e.match(/\d+\.?\d*e[+-]?\d+|\d+\.?\d*|\.\d+|./g),a=1,s=0;null===r&&i();for(var o=0;o0&&i();break;case"number":n.im=0,n.re=e;break;default:i()}return isNaN(n.re)||isNaN(n.im),n}(e,t);this.re=n.re,this.im=n.im}l.prototype={re:0,im:0,sign:function(){var e=this.abs();return new l(this.re/e,this.im/e)},add:function(e,t){var n=new l(e,t);return this.isInfinite()&&n.isInfinite()?l.NAN:this.isInfinite()||n.isInfinite()?l.INFINITY:new l(this.re+n.re,this.im+n.im)},sub:function(e,t){var n=new l(e,t);return this.isInfinite()&&n.isInfinite()?l.NAN:this.isInfinite()||n.isInfinite()?l.INFINITY:new l(this.re-n.re,this.im-n.im)},mul:function(e,t){var n=new l(e,t);return this.isInfinite()&&n.isZero()||this.isZero()&&n.isInfinite()?l.NAN:this.isInfinite()||n.isInfinite()?l.INFINITY:0===n.im&&0===this.im?new l(this.re*n.re,0):new l(this.re*n.re-this.im*n.im,this.re*n.im+this.im*n.re)},div:function(e,t){var n=new l(e,t);if(this.isZero()&&n.isZero()||this.isInfinite()&&n.isInfinite())return l.NAN;if(this.isInfinite()||n.isZero())return l.INFINITY;if(this.isZero()||n.isInfinite())return l.ZERO;e=this.re,t=this.im;var r,a,s=n.re,i=n.im;return 0===i?new l(e/s,t/s):Math.abs(s)=0)return new l(Math.pow(e,n.re),0);if(0===e)switch((n.re%4+4)%4){case 0:return new l(Math.pow(t,n.re),0);case 1:return new l(0,Math.pow(t,n.re));case 2:return new l(-Math.pow(t,n.re),0);case 3:return new l(0,-Math.pow(t,n.re))}}if(0===e&&0===t&&n.re>0&&n.im>=0)return l.ZERO;var r=Math.atan2(t,e),a=o(e,t);return e=Math.exp(n.re*a-n.im*r),t=n.im*a+n.re*r,new l(e*Math.cos(t),e*Math.sin(t))},sqrt:function(){var e,t,n=this.re,r=this.im,a=this.abs();if(n>=0){if(0===r)return new l(Math.sqrt(n),0);e=.5*Math.sqrt(2*(a+n))}else e=Math.abs(r)/Math.sqrt(2*(a-n));return t=n<=0?.5*Math.sqrt(2*(a-n)):Math.abs(r)/Math.sqrt(2*(a+n)),new l(e,r<0?-t:t)},exp:function(){var e=Math.exp(this.re);return this.im,new l(e*Math.cos(this.im),e*Math.sin(this.im))},expm1:function(){var e=this.re,t=this.im;return new l(Math.expm1(e)*Math.cos(t)+function(e){var t=Math.PI/4;if(e<-t||e>t)return Math.cos(e)-1;var n=e*e;return n*(n*(1/24+n*(-1/720+n*(1/40320+n*(-1/3628800+n*(1/4790014600+n*(-1/87178291200+n*(1/20922789888e3)))))))-.5)}(t),Math.exp(e)*Math.sin(t))},log:function(){var e=this.re,t=this.im;return new l(o(e,t),Math.atan2(t,e))},abs:function(){return e=this.re,t=this.im,n=Math.abs(e),r=Math.abs(t),n<3e3&&r<3e3?Math.sqrt(n*n+r*r):(n1&&0===t,r=1-e,a=1+e,s=r*r+t*t,i=0!==s?new l((a*r-t*t)/s,(t*r+a*t)/s):new l(-1!==e?e/0:0,0!==t?t/0:0),u=i.re;return i.re=o(i.re,i.im)/2,i.im=Math.atan2(i.im,u)/2,n&&(i.im=-i.im),i},acoth:function(){var e=this.re,t=this.im;if(0===e&&0===t)return new l(0,Math.PI/2);var n=e*e+t*t;return 0!==n?new l(e/n,-t/n).atanh():new l(0!==e?e/0:0,0!==t?-t/0:0).atanh()},acsch:function(){var e=this.re,t=this.im;if(0===t)return new l(0!==e?Math.log(e+Math.sqrt(e*e+1)):1/0,0);var n=e*e+t*t;return 0!==n?new l(e/n,-t/n).asinh():new l(0!==e?e/0:0,0!==t?-t/0:0).asinh()},asech:function(){var e=this.re,t=this.im;if(this.isZero())return l.INFINITY;var n=e*e+t*t;return 0!==n?new l(e/n,-t/n).acosh():new l(0!==e?e/0:0,0!==t?-t/0:0).acosh()},inverse:function(){if(this.isZero())return l.INFINITY;if(this.isInfinite())return l.ZERO;var e=this.re,t=this.im,n=e*e+t*t;return new l(e/n,-t/n)},conjugate:function(){return new l(this.re,-this.im)},neg:function(){return new l(-this.re,-this.im)},ceil:function(e){return e=Math.pow(10,e||0),new l(Math.ceil(this.re*e)/e,Math.ceil(this.im*e)/e)},floor:function(e){return e=Math.pow(10,e||0),new l(Math.floor(this.re*e)/e,Math.floor(this.im*e)/e)},round:function(e){return e=Math.pow(10,e||0),new l(Math.round(this.re*e)/e,Math.round(this.im*e)/e)},equals:function(e,t){var n=new l(e,t);return Math.abs(n.re-this.re)<=l.EPSILON&&Math.abs(n.im-this.im)<=l.EPSILON},clone:function(){return new l(this.re,this.im)},toString:function(){var e=this.re,t=this.im,n="";return this.isNaN()?"NaN":this.isZero()?"0":this.isInfinite()?"Infinity":(0!==e&&(n+=e),0!==t&&(0!==e?n+=t<0?" - ":" + ":t<0&&(n+="-"),1!==(t=Math.abs(t))&&(n+=t),n+="i"),n||"0")},toVector:function(){return[this.re,this.im]},valueOf:function(){return 0===this.im?this.re:null},isNaN:function(){return isNaN(this.re)||isNaN(this.im)},isZero:function(){return!(0!==this.re&&-0!==this.re||0!==this.im&&-0!==this.im)},isFinite:function(){return isFinite(this.re)&&isFinite(this.im)},isInfinite:function(){return!(this.isNaN()||this.isFinite())}},l.ZERO=new l(0,0),l.ONE=new l(1,0),l.I=new l(0,1),l.PI=new l(Math.PI,0),l.E=new l(Math.E,0),l.INFINITY=new l(1/0,1/0),l.NAN=new l(NaN,NaN),l.EPSILON=1e-16,void 0===(n=function(){return l}.apply(t,[]))||(e.exports=n)}()},3776:function(e,t,n){var r;!function(a){"use strict";var s,i,o,l=9e15,u=1e9,c="0123456789abcdef",h="2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058",f="3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789",d={precision:20,rounding:4,modulo:1,toExpNeg:-7,toExpPos:21,minE:-l,maxE:l,crypto:!1},p=!0,m="[DecimalError] ",g=m+"Invalid argument: ",y=m+"Precision limit exceeded",b=m+"crypto unavailable",v=Math.floor,w=Math.pow,_=/^0b([01]+(\.[01]*)?|\.[01]+)(p[+-]?\d+)?$/i,x=/^0x([0-9a-f]+(\.[0-9a-f]*)?|\.[0-9a-f]+)(p[+-]?\d+)?$/i,k=/^0o([0-7]+(\.[0-7]*)?|\.[0-7]+)(p[+-]?\d+)?$/i,E=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,C=1e7,S=h.length-1,N=f.length-1,I={name:"[object Decimal]"};function A(e){var t,n,r,a=e.length-1,s="",i=e[0];if(a>0){for(s+=i,t=1;tn)throw Error(g+e)}function T(e,t,n,r){var a,s,i,o;for(s=e[0];s>=10;s/=10)--t;return--t<0?(t+=7,a=0):(a=Math.ceil((t+1)/7),t%=7),s=w(10,7-t),o=e[a]%s|0,null==r?t<3?(0==t?o=o/100|0:1==t&&(o=o/10|0),i=n<4&&99999==o||n>3&&49999==o||5e4==o||0==o):i=(n<4&&o+1==s||n>3&&o+1==s/2)&&(e[a+1]/s/100|0)==w(10,t-2)-1||(o==s/2||0==o)&&0==(e[a+1]/s/100|0):t<4?(0==t?o=o/1e3|0:1==t?o=o/100|0:2==t&&(o=o/10|0),i=(r||n<4)&&9999==o||!r&&n>3&&4999==o):i=((r||n<4)&&o+1==s||!r&&n>3&&o+1==s/2)&&(e[a+1]/s/1e3|0)==w(10,t-3)-1,i}function F(e,t,n){for(var r,a,s=[0],i=0,o=e.length;in-1&&(void 0===s[r+1]&&(s[r+1]=0),s[r+1]+=s[r]/n|0,s[r]%=n)}return s.reverse()}I.absoluteValue=I.abs=function(){var e=new this.constructor(this);return e.s<0&&(e.s=1),O(e)},I.ceil=function(){return O(new this.constructor(this),this.e+1,2)},I.comparedTo=I.cmp=function(e){var t,n,r,a,s=this,i=s.d,o=(e=new s.constructor(e)).d,l=s.s,u=e.s;if(!i||!o)return l&&u?l!==u?l:i===o?0:!i^l<0?1:-1:NaN;if(!i[0]||!o[0])return i[0]?l:o[0]?-u:0;if(l!==u)return l;if(s.e!==e.e)return s.e>e.e^l<0?1:-1;for(t=0,n=(r=i.length)<(a=o.length)?r:a;to[t]^l<0?1:-1;return r===a?0:r>a^l<0?1:-1},I.cosine=I.cos=function(){var e,t,n=this,r=n.constructor;return n.d?n.d[0]?(e=r.precision,t=r.rounding,r.precision=e+Math.max(n.e,n.sd())+7,r.rounding=1,n=function(e,t){var n,r,a=t.d.length;a<32?r=(1/Y(4,n=Math.ceil(a/3))).toString():(n=16,r="2.3283064365386962890625e-10"),e.precision+=n,t=q(e,1,t.times(r),new e(1));for(var s=n;s--;){var i=t.times(t);t=i.times(i).minus(i).times(8).plus(1)}return e.precision-=n,t}(r,J(r,n)),r.precision=e,r.rounding=t,O(2==o||3==o?n.neg():n,e,t,!0)):new r(1):new r(NaN)},I.cubeRoot=I.cbrt=function(){var e,t,n,r,a,s,i,o,l,u,c=this,h=c.constructor;if(!c.isFinite()||c.isZero())return new h(c);for(p=!1,(s=c.s*w(c.s*c,1/3))&&Math.abs(s)!=1/0?r=new h(s.toString()):(n=A(c.d),(s=((e=c.e)-n.length+1)%3)&&(n+=1==s||-2==s?"0":"00"),s=w(n,1/3),e=v((e+1)/3)-(e%3==(e<0?-1:2)),(r=new h(n=s==1/0?"5e"+e:(n=s.toExponential()).slice(0,n.indexOf("e")+1)+e)).s=c.s),i=(e=h.precision)+3;;)if(u=(l=(o=r).times(o).times(o)).plus(c),r=R(u.plus(c).times(o),u.plus(l),i+2,1),A(o.d).slice(0,i)===(n=A(r.d)).slice(0,i)){if("9999"!=(n=n.slice(i-3,i+1))&&(a||"4999"!=n)){+n&&(+n.slice(1)||"5"!=n.charAt(0))||(O(r,e+1,1),t=!r.times(r).times(r).eq(c));break}if(!a&&(O(o,e+1,0),o.times(o).times(o).eq(c))){r=o;break}i+=4,a=1}return p=!0,O(r,e,h.rounding,t)},I.decimalPlaces=I.dp=function(){var e,t=this.d,n=NaN;if(t){if(n=7*((e=t.length-1)-v(this.e/7)),e=t[e])for(;e%10==0;e/=10)n--;n<0&&(n=0)}return n},I.dividedBy=I.div=function(e){return R(this,new this.constructor(e))},I.dividedToIntegerBy=I.divToInt=function(e){var t=this.constructor;return O(R(this,new t(e),0,1,1),t.precision,t.rounding)},I.equals=I.eq=function(e){return 0===this.cmp(e)},I.floor=function(){return O(new this.constructor(this),this.e+1,3)},I.greaterThan=I.gt=function(e){return this.cmp(e)>0},I.greaterThanOrEqualTo=I.gte=function(e){var t=this.cmp(e);return 1==t||0===t},I.hyperbolicCosine=I.cosh=function(){var e,t,n,r,a,s=this,i=s.constructor,o=new i(1);if(!s.isFinite())return new i(s.s?1/0:NaN);if(s.isZero())return o;n=i.precision,r=i.rounding,i.precision=n+Math.max(s.e,s.sd())+4,i.rounding=1,(a=s.d.length)<32?t=(1/Y(4,e=Math.ceil(a/3))).toString():(e=16,t="2.3283064365386962890625e-10"),s=q(i,1,s.times(t),new i(1),!0);for(var l,u=e,c=new i(8);u--;)l=s.times(s),s=o.minus(l.times(c.minus(l.times(c))));return O(s,i.precision=n,i.rounding=r,!0)},I.hyperbolicSine=I.sinh=function(){var e,t,n,r,a=this,s=a.constructor;if(!a.isFinite()||a.isZero())return new s(a);if(t=s.precision,n=s.rounding,s.precision=t+Math.max(a.e,a.sd())+4,s.rounding=1,(r=a.d.length)<3)a=q(s,2,a,a,!0);else{e=(e=1.4*Math.sqrt(r))>16?16:0|e,a=q(s,2,a=a.times(1/Y(5,e)),a,!0);for(var i,o=new s(5),l=new s(16),u=new s(20);e--;)i=a.times(a),a=a.times(o.plus(i.times(l.times(i).plus(u))))}return s.precision=t,s.rounding=n,O(a,t,n,!0)},I.hyperbolicTangent=I.tanh=function(){var e,t,n=this,r=n.constructor;return n.isFinite()?n.isZero()?new r(n):(e=r.precision,t=r.rounding,r.precision=e+7,r.rounding=1,R(n.sinh(),n.cosh(),r.precision=e,r.rounding=t)):new r(n.s)},I.inverseCosine=I.acos=function(){var e,t=this,n=t.constructor,r=t.abs().cmp(1),a=n.precision,s=n.rounding;return-1!==r?0===r?t.isNeg()?P(n,a,s):new n(0):new n(NaN):t.isZero()?P(n,a+4,s).times(.5):(n.precision=a+6,n.rounding=1,t=t.asin(),e=P(n,a+4,s).times(.5),n.precision=a,n.rounding=s,e.minus(t))},I.inverseHyperbolicCosine=I.acosh=function(){var e,t,n=this,r=n.constructor;return n.lte(1)?new r(n.eq(1)?0:NaN):n.isFinite()?(e=r.precision,t=r.rounding,r.precision=e+Math.max(Math.abs(n.e),n.sd())+4,r.rounding=1,p=!1,n=n.times(n).minus(1).sqrt().plus(n),p=!0,r.precision=e,r.rounding=t,n.ln()):new r(n)},I.inverseHyperbolicSine=I.asinh=function(){var e,t,n=this,r=n.constructor;return!n.isFinite()||n.isZero()?new r(n):(e=r.precision,t=r.rounding,r.precision=e+2*Math.max(Math.abs(n.e),n.sd())+6,r.rounding=1,p=!1,n=n.times(n).plus(1).sqrt().plus(n),p=!0,r.precision=e,r.rounding=t,n.ln())},I.inverseHyperbolicTangent=I.atanh=function(){var e,t,n,r,a=this,s=a.constructor;return a.isFinite()?a.e>=0?new s(a.abs().eq(1)?a.s/0:a.isZero()?a:NaN):(e=s.precision,t=s.rounding,r=a.sd(),Math.max(r,e)<2*-a.e-1?O(new s(a),e,t,!0):(s.precision=n=r-a.e,a=R(a.plus(1),new s(1).minus(a),n+e,1),s.precision=e+4,s.rounding=1,a=a.ln(),s.precision=e,s.rounding=t,a.times(.5))):new s(NaN)},I.inverseSine=I.asin=function(){var e,t,n,r,a=this,s=a.constructor;return a.isZero()?new s(a):(t=a.abs().cmp(1),n=s.precision,r=s.rounding,-1!==t?0===t?((e=P(s,n+4,r).times(.5)).s=a.s,e):new s(NaN):(s.precision=n+6,s.rounding=1,a=a.div(new s(1).minus(a.times(a)).sqrt().plus(1)).atan(),s.precision=n,s.rounding=r,a.times(2)))},I.inverseTangent=I.atan=function(){var e,t,n,r,a,s,i,o,l,u=this,c=u.constructor,h=c.precision,f=c.rounding;if(u.isFinite()){if(u.isZero())return new c(u);if(u.abs().eq(1)&&h+4<=N)return(i=P(c,h+4,f).times(.25)).s=u.s,i}else{if(!u.s)return new c(NaN);if(h+4<=N)return(i=P(c,h+4,f).times(.5)).s=u.s,i}for(c.precision=o=h+10,c.rounding=1,e=n=Math.min(28,o/7+2|0);e;--e)u=u.div(u.times(u).plus(1).sqrt().plus(1));for(p=!1,t=Math.ceil(o/7),r=1,l=u.times(u),i=new c(u),a=u;-1!==e;)if(a=a.times(l),s=i.minus(a.div(r+=2)),a=a.times(l),void 0!==(i=s.plus(a.div(r+=2))).d[t])for(e=t;i.d[e]===s.d[e]&&e--;);return n&&(i=i.times(2<this.d.length-2},I.isNaN=function(){return!this.s},I.isNegative=I.isNeg=function(){return this.s<0},I.isPositive=I.isPos=function(){return this.s>0},I.isZero=function(){return!!this.d&&0===this.d[0]},I.lessThan=I.lt=function(e){return this.cmp(e)<0},I.lessThanOrEqualTo=I.lte=function(e){return this.cmp(e)<1},I.logarithm=I.log=function(e){var t,n,r,a,s,i,o,l,u=this,c=u.constructor,h=c.precision,f=c.rounding;if(null==e)e=new c(10),t=!0;else{if(n=(e=new c(e)).d,e.s<0||!n||!n[0]||e.eq(1))return new c(NaN);t=e.eq(10)}if(n=u.d,u.s<0||!n||!n[0]||u.eq(1))return new c(n&&!n[0]?-1/0:1!=u.s?NaN:n?0:1/0);if(t)if(n.length>1)s=!0;else{for(a=n[0];a%10==0;)a/=10;s=1!==a}if(p=!1,i=H(u,o=h+5),r=t?$(c,o+10):H(e,o),T((l=R(i,r,o,1)).d,a=h,f))do{if(i=H(u,o+=10),r=t?$(c,o+10):H(e,o),l=R(i,r,o,1),!s){+A(l.d).slice(a+1,a+15)+1==1e14&&(l=O(l,h+1,0));break}}while(T(l.d,a+=10,f));return p=!0,O(l,h,f)},I.minus=I.sub=function(e){var t,n,r,a,s,i,o,l,u,c,h,f,d=this,m=d.constructor;if(e=new m(e),!d.d||!e.d)return d.s&&e.s?d.d?e.s=-e.s:e=new m(e.d||d.s!==e.s?d:NaN):e=new m(NaN),e;if(d.s!=e.s)return e.s=-e.s,d.plus(e);if(u=d.d,f=e.d,o=m.precision,l=m.rounding,!u[0]||!f[0]){if(f[0])e.s=-e.s;else{if(!u[0])return new m(3===l?-0:0);e=new m(d)}return p?O(e,o,l):e}if(n=v(e.e/7),c=v(d.e/7),u=u.slice(),s=c-n){for((h=s<0)?(t=u,s=-s,i=f.length):(t=f,n=c,i=u.length),s>(r=Math.max(Math.ceil(o/7),i)+2)&&(s=r,t.length=1),t.reverse(),r=s;r--;)t.push(0);t.reverse()}else{for((h=(r=u.length)<(i=f.length))&&(i=r),r=0;r0;--r)u[i++]=0;for(r=f.length;r>s;){if(u[--r](i=(s=Math.ceil(o/7))>i?s+1:i+1)&&(a=i,n.length=1),n.reverse();a--;)n.push(0);n.reverse()}for((i=u.length)-(a=c.length)<0&&(a=i,n=c,c=u,u=n),t=0;a;)t=(u[--a]=u[a]+c[a]+t)/C|0,u[a]%=C;for(t&&(u.unshift(t),++r),i=u.length;0==u[--i];)u.pop();return e.d=u,e.e=B(u,r),p?O(e,o,l):e},I.precision=I.sd=function(e){var t,n=this;if(void 0!==e&&e!==!!e&&1!==e&&0!==e)throw Error(g+e);return n.d?(t=L(n.d),e&&n.e+1>t&&(t=n.e+1)):t=NaN,t},I.round=function(){var e=this,t=e.constructor;return O(new t(e),e.e+1,t.rounding)},I.sine=I.sin=function(){var e,t,n=this,r=n.constructor;return n.isFinite()?n.isZero()?new r(n):(e=r.precision,t=r.rounding,r.precision=e+Math.max(n.e,n.sd())+7,r.rounding=1,n=function(e,t){var n,r=t.d.length;if(r<3)return q(e,2,t,t);n=(n=1.4*Math.sqrt(r))>16?16:0|n,t=q(e,2,t=t.times(1/Y(5,n)),t);for(var a,s=new e(5),i=new e(16),o=new e(20);n--;)a=t.times(t),t=t.times(s.plus(a.times(i.times(a).minus(o))));return t}(r,J(r,n)),r.precision=e,r.rounding=t,O(o>2?n.neg():n,e,t,!0)):new r(NaN)},I.squareRoot=I.sqrt=function(){var e,t,n,r,a,s,i=this,o=i.d,l=i.e,u=i.s,c=i.constructor;if(1!==u||!o||!o[0])return new c(!u||u<0&&(!o||o[0])?NaN:o?i:1/0);for(p=!1,0==(u=Math.sqrt(+i))||u==1/0?(((t=A(o)).length+l)%2==0&&(t+="0"),u=Math.sqrt(t),l=v((l+1)/2)-(l<0||l%2),r=new c(t=u==1/0?"5e"+l:(t=u.toExponential()).slice(0,t.indexOf("e")+1)+l)):r=new c(u.toString()),n=(l=c.precision)+3;;)if(r=(s=r).plus(R(i,s,n+2,1)).times(.5),A(s.d).slice(0,n)===(t=A(r.d)).slice(0,n)){if("9999"!=(t=t.slice(n-3,n+1))&&(a||"4999"!=t)){+t&&(+t.slice(1)||"5"!=t.charAt(0))||(O(r,l+1,1),e=!r.times(r).eq(i));break}if(!a&&(O(s,l+1,0),s.times(s).eq(i))){r=s;break}n+=4,a=1}return p=!0,O(r,l,c.rounding,e)},I.tangent=I.tan=function(){var e,t,n=this,r=n.constructor;return n.isFinite()?n.isZero()?new r(n):(e=r.precision,t=r.rounding,r.precision=e+10,r.rounding=1,(n=n.sin()).s=1,n=R(n,new r(1).minus(n.times(n)).sqrt(),e+10,0),r.precision=e,r.rounding=t,O(2==o||4==o?n.neg():n,e,t,!0)):new r(NaN)},I.times=I.mul=function(e){var t,n,r,a,s,i,o,l,u,c=this,h=c.constructor,f=c.d,d=(e=new h(e)).d;if(e.s*=c.s,!(f&&f[0]&&d&&d[0]))return new h(!e.s||f&&!f[0]&&!d||d&&!d[0]&&!f?NaN:f&&d?0*e.s:e.s/0);for(n=v(c.e/7)+v(e.e/7),(l=f.length)<(u=d.length)&&(s=f,f=d,d=s,i=l,l=u,u=i),s=[],r=i=l+u;r--;)s.push(0);for(r=u;--r>=0;){for(t=0,a=l+r;a>r;)o=s[a]+d[r]*f[a-r-1]+t,s[a--]=o%C|0,t=o/C|0;s[a]=(s[a]+t)%C|0}for(;!s[--i];)s.pop();return t?++n:s.shift(),e.d=s,e.e=B(s,n),p?O(e,h.precision,h.rounding):e},I.toBinary=function(e,t){return Z(this,2,e,t)},I.toDecimalPlaces=I.toDP=function(e,t){var n=this,r=n.constructor;return n=new r(n),void 0===e?n:(D(e,0,u),void 0===t?t=r.rounding:D(t,0,8),O(n,e+n.e+1,t))},I.toExponential=function(e,t){var n,r=this,a=r.constructor;return void 0===e?n=M(r,!0):(D(e,0,u),void 0===t?t=a.rounding:D(t,0,8),n=M(r=O(new a(r),e+1,t),!0,e+1)),r.isNeg()&&!r.isZero()?"-"+n:n},I.toFixed=function(e,t){var n,r,a=this,s=a.constructor;return void 0===e?n=M(a):(D(e,0,u),void 0===t?t=s.rounding:D(t,0,8),n=M(r=O(new s(a),e+a.e+1,t),!1,e+r.e+1)),a.isNeg()&&!a.isZero()?"-"+n:n},I.toFraction=function(e){var t,n,r,a,s,i,o,l,u,c,h,f,d=this,m=d.d,y=d.constructor;if(!m)return new y(d);if(u=n=new y(1),r=l=new y(0),i=(s=(t=new y(r)).e=L(m)-d.e-1)%7,t.d[0]=w(10,i<0?7+i:i),null==e)e=s>0?t:u;else{if(!(o=new y(e)).isInt()||o.lt(u))throw Error(g+o);e=o.gt(t)?s>0?t:u:o}for(p=!1,o=new y(A(m)),c=y.precision,y.precision=s=7*m.length*2;h=R(o,t,0,1,1),1!=(a=n.plus(h.times(r))).cmp(e);)n=r,r=a,a=u,u=l.plus(h.times(a)),l=a,a=t,t=o.minus(h.times(a)),o=a;return a=R(e.minus(n),r,0,1,1),l=l.plus(a.times(u)),n=n.plus(a.times(r)),l.s=u.s=d.s,f=R(u,r,s,1).minus(d).abs().cmp(R(l,n,s,1).minus(d).abs())<1?[u,r]:[l,n],y.precision=c,p=!0,f},I.toHexadecimal=I.toHex=function(e,t){return Z(this,16,e,t)},I.toNearest=function(e,t){var n=this,r=n.constructor;if(n=new r(n),null==e){if(!n.d)return n;e=new r(1),t=r.rounding}else{if(e=new r(e),void 0===t?t=r.rounding:D(t,0,8),!n.d)return e.s?n:e;if(!e.d)return e.s&&(e.s=n.s),e}return e.d[0]?(p=!1,n=R(n,e,0,t,1).times(e),p=!0,O(n)):(e.s=n.s,n=e),n},I.toNumber=function(){return+this},I.toOctal=function(e,t){return Z(this,8,e,t)},I.toPower=I.pow=function(e){var t,n,r,a,s,i,o=this,l=o.constructor,u=+(e=new l(e));if(!(o.d&&e.d&&o.d[0]&&e.d[0]))return new l(w(+o,u));if((o=new l(o)).eq(1))return o;if(r=l.precision,s=l.rounding,e.eq(1))return O(o,r,s);if((t=v(e.e/7))>=e.d.length-1&&(n=u<0?-u:u)<=9007199254740991)return a=W(l,o,n,r),e.s<0?new l(1).div(a):O(a,r,s);if((i=o.s)<0){if(tl.maxE+1||t0?i/0:0):(p=!1,l.rounding=o.s=1,n=Math.min(12,(t+"").length),(a=j(e.times(H(o,r+n)),r)).d&&T((a=O(a,r+5,1)).d,r,s)&&(t=r+10,+A((a=O(j(e.times(H(o,t+n)),t),t+5,1)).d).slice(r+1,r+15)+1==1e14&&(a=O(a,r+1,0))),a.s=i,p=!0,l.rounding=s,O(a,r,s))},I.toPrecision=function(e,t){var n,r=this,a=r.constructor;return void 0===e?n=M(r,r.e<=a.toExpNeg||r.e>=a.toExpPos):(D(e,1,u),void 0===t?t=a.rounding:D(t,0,8),n=M(r=O(new a(r),e,t),e<=r.e||r.e<=a.toExpNeg,e)),r.isNeg()&&!r.isZero()?"-"+n:n},I.toSignificantDigits=I.toSD=function(e,t){var n=this.constructor;return void 0===e?(e=n.precision,t=n.rounding):(D(e,1,u),void 0===t?t=n.rounding:D(t,0,8)),O(new n(this),e,t)},I.toString=function(){var e=this,t=e.constructor,n=M(e,e.e<=t.toExpNeg||e.e>=t.toExpPos);return e.isNeg()&&!e.isZero()?"-"+n:n},I.truncated=I.trunc=function(){return O(new this.constructor(this),this.e+1,1)},I.valueOf=I.toJSON=function(){var e=this,t=e.constructor,n=M(e,e.e<=t.toExpNeg||e.e>=t.toExpPos);return e.isNeg()?"-"+n:n};var R=function(){function e(e,t,n){var r,a=0,s=e.length;for(e=e.slice();s--;)r=e[s]*t+a,e[s]=r%n|0,a=r/n|0;return a&&e.unshift(a),e}function t(e,t,n,r){var a,s;if(n!=r)s=n>r?1:-1;else for(a=s=0;at[a]?1:-1;break}return s}function n(e,t,n,r){for(var a=0;n--;)e[n]-=a,a=e[n]1;)e.shift()}return function(r,a,s,o,l,u){var c,h,f,d,p,m,g,y,b,w,_,x,k,E,S,N,I,A,D,T,F=r.constructor,R=r.s==a.s?1:-1,M=r.d,B=a.d;if(!(M&&M[0]&&B&&B[0]))return new F(r.s&&a.s&&(M?!B||M[0]!=B[0]:B)?M&&0==M[0]||!B?0*R:R/0:NaN);for(u?(p=1,h=r.e-a.e):(u=C,p=7,h=v(r.e/p)-v(a.e/p)),D=B.length,I=M.length,w=(b=new F(R)).d=[],f=0;B[f]==(M[f]||0);f++);if(B[f]>(M[f]||0)&&h--,null==s?(E=s=F.precision,o=F.rounding):E=l?s+(r.e-a.e)+1:s,E<0)w.push(1),m=!0;else{if(E=E/p+2|0,f=0,1==D){for(d=0,B=B[0],E++;(f1&&(B=e(B,d,u),M=e(M,d,u),D=B.length,I=M.length),N=D,x=(_=M.slice(0,D)).length;x=u/2&&++A;do{d=0,(c=t(B,_,D,x))<0?(k=_[0],D!=x&&(k=k*u+(_[1]||0)),(d=k/A|0)>1?(d>=u&&(d=u-1),1==(c=t(g=e(B,d,u),_,y=g.length,x=_.length))&&(d--,n(g,D=10;d/=10)f++;b.e=f+h*p-1,O(b,l?s+b.e+1:s,o,m)}return b}}();function O(e,t,n,r){var a,s,i,o,l,u,c,h,f,d=e.constructor;e:if(null!=t){if(!(h=e.d))return e;for(a=1,o=h[0];o>=10;o/=10)a++;if((s=t-a)<0)s+=7,i=t,l=(c=h[f=0])/w(10,a-i-1)%10|0;else if((f=Math.ceil((s+1)/7))>=(o=h.length)){if(!r)break e;for(;o++<=f;)h.push(0);c=l=0,a=1,i=(s%=7)-7+1}else{for(c=o=h[f],a=1;o>=10;o/=10)a++;l=(i=(s%=7)-7+a)<0?0:c/w(10,a-i-1)%10|0}if(r=r||t<0||void 0!==h[f+1]||(i<0?c:c%w(10,a-i-1)),u=n<4?(l||r)&&(0==n||n==(e.s<0?3:2)):l>5||5==l&&(4==n||r||6==n&&(s>0?i>0?c/w(10,a-i):0:h[f-1])%10&1||n==(e.s<0?8:7)),t<1||!h[0])return h.length=0,u?(t-=e.e+1,h[0]=w(10,(7-t%7)%7),e.e=-t||0):h[0]=e.e=0,e;if(0==s?(h.length=f,o=1,f--):(h.length=f+1,o=w(10,7-s),h[f]=i>0?(c/w(10,a-i)%w(10,i)|0)*o:0),u)for(;;){if(0==f){for(s=1,i=h[0];i>=10;i/=10)s++;for(i=h[0]+=o,o=1;i>=10;i/=10)o++;s!=o&&(e.e++,h[0]==C&&(h[0]=1));break}if(h[f]+=o,h[f]!=C)break;h[f--]=0,o=1}for(s=h.length;0===h[--s];)h.pop()}return p&&(e.e>d.maxE?(e.d=null,e.e=NaN):e.e0?s=s.charAt(0)+"."+s.slice(1)+z(r):i>1&&(s=s.charAt(0)+"."+s.slice(1)),s=s+(e.e<0?"e":"e+")+e.e):a<0?(s="0."+z(-a-1)+s,n&&(r=n-i)>0&&(s+=z(r))):a>=i?(s+=z(a+1-i),n&&(r=n-a-1)>0&&(s=s+"."+z(r))):((r=a+1)0&&(a+1===i&&(s+="."),s+=z(r))),s}function B(e,t){var n=e[0];for(t*=7;n>=10;n/=10)t++;return t}function $(e,t,n){if(t>S)throw p=!0,n&&(e.precision=n),Error(y);return O(new e(h),t,1,!0)}function P(e,t,n){if(t>N)throw Error(y);return O(new e(f),t,n,!0)}function L(e){var t=e.length-1,n=7*t+1;if(t=e[t]){for(;t%10==0;t/=10)n--;for(t=e[0];t>=10;t/=10)n++}return n}function z(e){for(var t="";e--;)t+="0";return t}function W(e,t,n,r){var a,s=new e(1),i=Math.ceil(r/7+4);for(p=!1;;){if(n%2&&Q((s=s.times(t)).d,i)&&(a=!0),0===(n=v(n/2))){n=s.d.length-1,a&&0===s.d[n]&&++s.d[n];break}Q((t=t.times(t)).d,i)}return p=!0,s}function U(e){return 1&e.d[e.d.length-1]}function V(e,t,n){for(var r,a=new e(t[0]),s=0;++s17)return new f(e.d?e.d[0]?e.s<0?0:1/0:1:e.s?e.s<0?0:e:NaN);for(null==t?(p=!1,l=m):l=t,o=new f(.03125);e.e>-2;)e=e.times(o),h+=5;for(l+=r=Math.log(w(2,h))/Math.LN10*2+5|0,n=s=i=new f(1),f.precision=l;;){if(s=O(s.times(e),l,1),n=n.times(++c),A((o=i.plus(R(s,n,l,1))).d).slice(0,l)===A(i.d).slice(0,l)){for(a=h;a--;)i=O(i.times(i),l,1);if(null!=t)return f.precision=m,i;if(!(u<3&&T(i.d,l-r,d,u)))return O(i,f.precision=m,d,p=!0);f.precision=l+=10,n=s=o=new f(1),c=0,u++}i=o}}function H(e,t){var n,r,a,s,i,o,l,u,c,h,f,d=1,m=e,g=m.d,y=m.constructor,b=y.rounding,v=y.precision;if(m.s<0||!g||!g[0]||!m.e&&1==g[0]&&1==g.length)return new y(g&&!g[0]?-1/0:1!=m.s?NaN:g?0:m);if(null==t?(p=!1,c=v):c=t,y.precision=c+=10,r=(n=A(g)).charAt(0),!(Math.abs(s=m.e)<15e14))return u=$(y,c+2,v).times(s+""),m=H(new y(r+"."+n.slice(1)),c-10).plus(u),y.precision=v,null==t?O(m,v,b,p=!0):m;for(;r<7&&1!=r||1==r&&n.charAt(1)>3;)r=(n=A((m=m.times(e)).d)).charAt(0),d++;for(s=m.e,r>1?(m=new y("0."+n),s++):m=new y(r+"."+n.slice(1)),h=m,l=i=m=R(m.minus(1),m.plus(1),c,1),f=O(m.times(m),c,1),a=3;;){if(i=O(i.times(f),c,1),A((u=l.plus(R(i,new y(a),c,1))).d).slice(0,c)===A(l.d).slice(0,c)){if(l=l.times(2),0!==s&&(l=l.plus($(y,c+2,v).times(s+""))),l=R(l,new y(d),c,1),null!=t)return y.precision=v,l;if(!T(l.d,c-10,b,o))return O(l,y.precision=v,b,p=!0);y.precision=c+=10,u=i=m=R(h.minus(1),h.plus(1),c,1),f=O(m.times(m),c,1),a=o=1}l=u,a+=2}}function G(e){return String(e.s*e.s/0)}function X(e,t){var n,r,a;for((n=t.indexOf("."))>-1&&(t=t.replace(".","")),(r=t.search(/e/i))>0?(n<0&&(n=r),n+=+t.slice(r+1),t=t.substring(0,r)):n<0&&(n=t.length),r=0;48===t.charCodeAt(r);r++);for(a=t.length;48===t.charCodeAt(a-1);--a);if(t=t.slice(r,a)){if(a-=r,e.e=n=n-r-1,e.d=[],r=(n+1)%7,n<0&&(r+=7),re.constructor.maxE?(e.d=null,e.e=NaN):e.e0?(u=+t.slice(i+1),t=t.substring(2,i)):t=t.slice(2),o=(i=t.indexOf("."))>=0,r=e.constructor,o&&(i=(l=(t=t.replace(".","")).length)-i,a=W(r,new r(n),i,2*i)),i=h=(c=F(t,n,C)).length-1;0===c[i];--i)c.pop();return i<0?new r(0*e.s):(e.e=B(c,h),e.d=c,p=!1,o&&(e=R(e,a,4*l)),u&&(e=e.times(Math.abs(u)<54?w(2,u):s.pow(2,u))),p=!0,e)}function q(e,t,n,r,a){var s,i,o,l,u=e.precision,c=Math.ceil(u/7);for(p=!1,l=n.times(n),o=new e(r);;){if(i=R(o.times(l),new e(t++*t++),u,1),o=a?r.plus(i):r.minus(i),r=R(i.times(l),new e(t++*t++),u,1),void 0!==(i=o.plus(r)).d[c]){for(s=c;i.d[s]===o.d[s]&&s--;);if(-1==s)break}s=o,o=r,r=i,i=s}return p=!0,i.d.length=c+1,i}function Y(e,t){for(var n=e;--t;)n*=e;return n}function J(e,t){var n,r=t.s<0,a=P(e,e.precision,1),s=a.times(.5);if((t=t.abs()).lte(s))return o=r?4:1,t;if((n=t.divToInt(a)).isZero())o=r?3:2;else{if((t=t.minus(n.times(a))).lte(s))return o=U(n)?r?2:3:r?4:1,t;o=U(n)?r?1:4:r?3:2}return t.minus(a).abs()}function Z(e,t,n,r){var a,s,o,l,h,f,d,p,m,g=e.constructor,y=void 0!==n;if(y?(D(n,1,u),void 0===r?r=g.rounding:D(r,0,8)):(n=g.precision,r=g.rounding),e.isFinite()){for(y?(a=2,16==t?n=4*n-3:8==t&&(n=3*n-2)):a=t,(o=(d=M(e)).indexOf("."))>=0&&(d=d.replace(".",""),(m=new g(1)).e=d.length-o,m.d=F(M(m),10,a),m.e=m.d.length),s=h=(p=F(d,10,a)).length;0==p[--h];)p.pop();if(p[0]){if(o<0?s--:((e=new g(e)).d=p,e.e=s,p=(e=R(e,m,n,r,0,a)).d,s=e.e,f=i),o=p[n],l=a/2,f=f||void 0!==p[n+1],f=r<4?(void 0!==o||f)&&(0===r||r===(e.s<0?3:2)):o>l||o===l&&(4===r||f||6===r&&1&p[n-1]||r===(e.s<0?8:7)),p.length=n,f)for(;++p[--n]>a-1;)p[n]=0,n||(++s,p.unshift(1));for(h=p.length;!p[h-1];--h);for(o=0,d="";o1)if(16==t||8==t){for(o=16==t?4:3,--h;h%o;h++)d+="0";for(h=(p=F(d,a,t)).length;!p[h-1];--h);for(o=1,d="1.";oh)for(s-=h;s--;)d+="0";else st)return e.length=t,!0}function ee(e){return new this(e).abs()}function te(e){return new this(e).acos()}function ne(e){return new this(e).acosh()}function re(e,t){return new this(e).plus(t)}function ae(e){return new this(e).asin()}function se(e){return new this(e).asinh()}function ie(e){return new this(e).atan()}function oe(e){return new this(e).atanh()}function le(e,t){e=new this(e),t=new this(t);var n,r=this.precision,a=this.rounding,s=r+4;return e.s&&t.s?e.d||t.d?!t.d||e.isZero()?(n=t.s<0?P(this,r,a):new this(0)).s=e.s:!e.d||t.isZero()?(n=P(this,s,1).times(.5)).s=e.s:t.s<0?(this.precision=s,this.rounding=1,n=this.atan(R(e,t,s,1)),t=P(this,s,1),this.precision=r,this.rounding=a,n=e.s<0?n.minus(t):n.plus(t)):n=this.atan(R(e,t,s,1)):(n=P(this,s,1).times(t.s>0?.25:.75)).s=e.s:n=new this(NaN),n}function ue(e){return new this(e).cbrt()}function ce(e){return O(e=new this(e),e.e+1,2)}function he(e){if(!e||"object"!=typeof e)throw Error(m+"Object expected");var t,n,r,a=!0===e.defaults,s=["precision",1,u,"rounding",0,8,"toExpNeg",-l,0,"toExpPos",0,l,"maxE",0,l,"minE",-l,0,"modulo",0,9];for(t=0;t=s[t+1]&&r<=s[t+2]))throw Error(g+n+": "+r);this[n]=r}if(n="crypto",a&&(this[n]=d[n]),void 0!==(r=e[n])){if(!0!==r&&!1!==r&&0!==r&&1!==r)throw Error(g+n+": "+r);if(r){if("undefined"==typeof crypto||!crypto||!crypto.getRandomValues&&!crypto.randomBytes)throw Error(b);this[n]=!0}else this[n]=!1}return this}function fe(e){return new this(e).cos()}function de(e){return new this(e).cosh()}function pe(e,t){return new this(e).div(t)}function me(e){return new this(e).exp()}function ge(e){return O(e=new this(e),e.e+1,3)}function ye(){var e,t,n=new this(0);for(p=!1,e=0;e=429e7?t[s]=crypto.getRandomValues(new Uint32Array(1))[0]:o[s++]=a%1e7;else{if(!crypto.randomBytes)throw Error(b);for(t=crypto.randomBytes(r*=4);s=214e7?crypto.randomBytes(4).copy(t,s):(o.push(a%1e7),s+=4);s=r/4}else for(;s=10;a/=10)r++;r<7&&(n-=7-r)}return i.e=n,i.d=o,i}function Ae(e){return O(e=new this(e),e.e+1,this.rounding)}function De(e){return(e=new this(e)).d?e.d[0]?e.s:0*e.s:e.s||NaN}function Te(e){return new this(e).sin()}function Fe(e){return new this(e).sinh()}function Re(e){return new this(e).sqrt()}function Oe(e,t){return new this(e).sub(t)}function Me(e){return new this(e).tan()}function Be(e){return new this(e).tanh()}function $e(e){return O(e=new this(e),e.e+1,1)}(s=function e(t){var n,r,a;function s(e){var t,n,r,a=this;if(!(a instanceof s))return new s(e);if(a.constructor=s,e instanceof s)return a.s=e.s,void(p?!e.d||e.e>s.maxE?(a.e=NaN,a.d=null):e.e=10;n/=10)t++;return void(p?t>s.maxE?(a.e=NaN,a.d=null):t{"use strict";e.exports=function e(t,n){if(t===n)return!0;if(t&&n&&"object"==typeof t&&"object"==typeof n){if(t.constructor!==n.constructor)return!1;var r,a,s;if(Array.isArray(t)){if((r=t.length)!=n.length)return!1;for(a=r;0!=a--;)if(!e(t[a],n[a]))return!1;return!0}if(t.constructor===RegExp)return t.source===n.source&&t.flags===n.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===n.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===n.toString();if((r=(s=Object.keys(t)).length)!==Object.keys(n).length)return!1;for(a=r;0!=a--;)if(!Object.prototype.hasOwnProperty.call(n,s[a]))return!1;for(a=r;0!=a--;){var i=s[a];if(!e(t[i],n[i]))return!1}return!0}return t!=t&&n!=n}},5628:function(e,t){var n;!function(r){"use strict";var a={s:1,n:0,d:1};function s(e){function t(){var t=Error.apply(this,arguments);t.name=this.name=e,this.stack=t.stack,this.message=t.message}function n(){}return n.prototype=Error.prototype,t.prototype=new n,t}var i=f.DivisionByZero=s("DivisionByZero"),o=f.InvalidParameter=s("InvalidParameter");function l(e,t){return isNaN(e=parseInt(e,10))&&u(),e*t}function u(){throw new o}var c=function(e,t){var n,r=0,s=1,o=1,c=0,h=0,f=0,d=1,p=1,m=0,g=1,y=1,b=1,v=1e7;if(null==e);else if(void 0!==t)o=(r=e)*(s=t);else switch(typeof e){case"object":"d"in e&&"n"in e?(r=e.n,s=e.d,"s"in e&&(r*=e.s)):0 in e?(r=e[0],1 in e&&(s=e[1])):u(),o=r*s;break;case"number":if(e<0&&(o=e,e=-e),e%1==0)r=e;else if(e>0){for(e>=1&&(e/=p=Math.pow(10,Math.floor(1+Math.log(e)/Math.LN10)));g<=v&&b<=v;){if(e===(n=(m+y)/(g+b))){g+b<=v?(r=m+y,s=g+b):b>g?(r=y,s=b):(r=m,s=g);break}e>n?(m+=y,g+=b):(y+=m,b+=g),g>v?(r=y,s=b):(r=m,s=g)}r*=p}else(isNaN(e)||isNaN(t))&&(s=r=NaN);break;case"string":if(null===(g=e.match(/\d+|./g))&&u(),"-"===g[m]?(o=-1,m++):"+"===g[m]&&m++,g.length===m+1?h=l(g[m++],o):"."===g[m+1]||"."===g[m]?("."!==g[m]&&(c=l(g[m++],o)),(1+ ++m===g.length||"("===g[m+1]&&")"===g[m+3]||"'"===g[m+1]&&"'"===g[m+3])&&(h=l(g[m],o),d=Math.pow(10,g[m].length),m++),("("===g[m]&&")"===g[m+2]||"'"===g[m]&&"'"===g[m+2])&&(f=l(g[m+1],o),p=Math.pow(10,g[m+1].length)-1,m+=3)):"/"===g[m+1]||":"===g[m+1]?(h=l(g[m],o),d=l(g[m+2],1),m+=3):"/"===g[m+3]&&" "===g[m+1]&&(c=l(g[m],o),h=l(g[m+2],o),d=l(g[m+4],1),m+=5),g.length<=m){o=r=f+(s=d*p)*c+p*h;break}default:u()}if(0===s)throw new i;a.s=o<0?-1:1,a.n=Math.abs(r),a.d=Math.abs(s)};function h(e,t){if(!e)return t;if(!t)return e;for(;;){if(!(e%=t))return t;if(!(t%=e))return e}}function f(e,t){if(!(this instanceof f))return new f(e,t);c(e,t),e=f.REDUCE?h(a.d,a.n):1,this.s=a.s,this.n=a.n/e,this.d=a.d/e}f.REDUCE=1,f.prototype={s:1,n:0,d:1,abs:function(){return new f(this.n,this.d)},neg:function(){return new f(-this.s*this.n,this.d)},add:function(e,t){return c(e,t),new f(this.s*this.n*a.d+a.s*this.d*a.n,this.d*a.d)},sub:function(e,t){return c(e,t),new f(this.s*this.n*a.d-a.s*this.d*a.n,this.d*a.d)},mul:function(e,t){return c(e,t),new f(this.s*a.s*this.n*a.n,this.d*a.d)},div:function(e,t){return c(e,t),new f(this.s*a.s*this.n*a.d,this.d*a.n)},clone:function(){return new f(this)},mod:function(e,t){return isNaN(this.n)||isNaN(this.d)?new f(NaN):void 0===e?new f(this.s*this.n%this.d,1):(c(e,t),0===a.n&&0===this.d&&f(0,0),new f(this.s*(a.d*this.n)%(a.n*this.d),a.d*this.d))},gcd:function(e,t){return c(e,t),new f(h(a.n,this.n)*h(a.d,this.d),a.d*this.d)},lcm:function(e,t){return c(e,t),0===a.n&&0===this.n?new f:new f(a.n*this.n,h(a.n,this.n)*h(a.d,this.d))},ceil:function(e){return e=Math.pow(10,e||0),isNaN(this.n)||isNaN(this.d)?new f(NaN):new f(Math.ceil(e*this.s*this.n/this.d),e)},floor:function(e){return e=Math.pow(10,e||0),isNaN(this.n)||isNaN(this.d)?new f(NaN):new f(Math.floor(e*this.s*this.n/this.d),e)},round:function(e){return e=Math.pow(10,e||0),isNaN(this.n)||isNaN(this.d)?new f(NaN):new f(Math.round(e*this.s*this.n/this.d),e)},inverse:function(){return new f(this.s*this.d,this.n)},pow:function(e){return e<0?new f(Math.pow(this.s*this.d,-e),Math.pow(this.n,-e)):new f(Math.pow(this.s*this.n,e),Math.pow(this.d,e))},equals:function(e,t){return c(e,t),this.s*this.n*a.d==a.s*a.n*this.d},compare:function(e,t){c(e,t);var n=this.s*this.n*a.d-a.s*a.n*this.d;return(00&&(n+=t,n+=" ",r%=a),n+=r,n+="/",n+=a),n},toLatex:function(e){var t,n="",r=this.n,a=this.d;return this.s<0&&(n+="-"),1===a?n+=r:(e&&(t=Math.floor(r/a))>0&&(n+=t,r%=a),n+="\\frac{",n+=r,n+="}{",n+=a,n+="}"),n},toContinued:function(){var e,t=this.n,n=this.d,r=[];if(isNaN(t)||isNaN(n))return r;do{r.push(Math.floor(t/n)),e=t%n,t=n,n=e}while(1!==t);return r},toString:function(e){var t,n=this.n,r=this.d;if(isNaN(n)||isNaN(r))return"NaN";f.REDUCE||(n/=t=h(n,r),r/=t),e=e||15;var a=function(e,t){for(;t%2==0;t/=2);for(;t%5==0;t/=5);if(1===t)return 0;for(var n=10%t,r=1;1!==n;r++)if(n=10*n%t,r>2e3)return 0;return r}(0,r),s=function(e,t,n){for(var r=1,a=function(e,t,n){for(var r=1;t>0;e=e*e%n,t>>=1)1&t&&(r=r*e%n);return r}(10,n,t),s=0;s<300;s++){if(r===a)return s;r=10*r%t,a=10*a%t}return 0}(0,r,a),i=-1===this.s?"-":"";if(i+=n/r|0,n%=r,(n*=10)&&(i+="."),a){for(var o=s;o--;)i+=n/r|0,n%=r,n*=10;for(i+="(",o=a;o--;)i+=n/r|0,n%=r,n*=10;i+=")"}else for(o=e;n&&o--;)i+=n/r|0,n%=r,n*=10;return i}},void 0===(n=function(){return f}.apply(t,[]))||(e.exports=n)}()},1903:e=>{"use strict";e.exports=e=>!Number.isNaN(e)&&e>=4352&&(e<=4447||9001===e||9002===e||11904<=e&&e<=12871&&12351!==e||12880<=e&&e<=19903||19968<=e&&e<=42182||43360<=e&&e<=43388||44032<=e&&e<=55203||63744<=e&&e<=64255||65040<=e&&e<=65049||65072<=e&&e<=65131||65281<=e&&e<=65376||65504<=e&&e<=65510||110592<=e&&e<=110593||127488<=e&&e<=127569||131072<=e&&e<=262141)},3228:e=>{e.exports=function e(t,n){"use strict";var r,a,s=/(^([+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?)?$|^0x[0-9a-f]+$|\d+)/gi,i=/(^[ ]*|[ ]*$)/g,o=/(^([\w ]+,?[\w ]+)?[\w ]+,?[\w ]+\d+:\d+(:\d+)?[\w ]?|^\d{1,4}[\/\-]\d{1,4}[\/\-]\d{1,4}|^\w+, \w+ \d+, \d{4})/,l=/^0x[0-9a-f]+$/i,u=/^0/,c=function(t){return e.insensitive&&(""+t).toLowerCase()||""+t},h=c(t).replace(i,"")||"",f=c(n).replace(i,"")||"",d=h.replace(s,"\0$1\0").replace(/\0$/,"").replace(/^\0/,"").split("\0"),p=f.replace(s,"\0$1\0").replace(/\0$/,"").replace(/^\0/,"").split("\0"),m=parseInt(h.match(l),16)||1!==d.length&&h.match(o)&&Date.parse(h),g=parseInt(f.match(l),16)||m&&f.match(o)&&Date.parse(f)||null;if(g){if(mg)return 1}for(var y=0,b=Math.max(d.length,p.length);ya)return 1}return 0}},8552:(e,t,n)=>{var r=n(852)(n(5639),"DataView");e.exports=r},1989:(e,t,n)=>{var r=n(1789),a=n(401),s=n(7667),i=n(1327),o=n(1866);function l(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t{var r=n(7040),a=n(4125),s=n(2117),i=n(7518),o=n(4705);function l(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t{var r=n(852)(n(5639),"Map");e.exports=r},3369:(e,t,n)=>{var r=n(4785),a=n(1285),s=n(6e3),i=n(9916),o=n(5265);function l(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t{var r=n(852)(n(5639),"Promise");e.exports=r},8525:(e,t,n)=>{var r=n(852)(n(5639),"Set");e.exports=r},8668:(e,t,n)=>{var r=n(3369),a=n(619),s=n(2385);function i(e){var t=-1,n=null==e?0:e.length;for(this.__data__=new r;++t{var r=n(8407),a=n(7465),s=n(3779),i=n(7599),o=n(4758),l=n(4309);function u(e){var t=this.__data__=new r(e);this.size=t.size}u.prototype.clear=a,u.prototype.delete=s,u.prototype.get=i,u.prototype.has=o,u.prototype.set=l,e.exports=u},2705:(e,t,n)=>{var r=n(5639).Symbol;e.exports=r},1149:(e,t,n)=>{var r=n(5639).Uint8Array;e.exports=r},577:(e,t,n)=>{var r=n(852)(n(5639),"WeakMap");e.exports=r},7412:e=>{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length;++n{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length,a=0,s=[];++n{var r=n(2545),a=n(5694),s=n(1469),i=n(4144),o=n(5776),l=n(6719),u=Object.prototype.hasOwnProperty;e.exports=function(e,t){var n=s(e),c=!n&&a(e),h=!n&&!c&&i(e),f=!n&&!c&&!h&&l(e),d=n||c||h||f,p=d?r(e.length,String):[],m=p.length;for(var g in e)!t&&!u.call(e,g)||d&&("length"==g||h&&("offset"==g||"parent"==g)||f&&("buffer"==g||"byteLength"==g||"byteOffset"==g)||o(g,m))||p.push(g);return p}},9932:e=>{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length,a=Array(r);++n{e.exports=function(e,t){for(var n=-1,r=t.length,a=e.length;++n{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length;++n{var r=n(371)("length");e.exports=r},4286:e=>{e.exports=function(e){return e.split("")}},4865:(e,t,n)=>{var r=n(9465),a=n(7813),s=Object.prototype.hasOwnProperty;e.exports=function(e,t,n){var i=e[t];s.call(e,t)&&a(i,n)&&(void 0!==n||t in e)||r(e,t,n)}},8470:(e,t,n)=>{var r=n(7813);e.exports=function(e,t){for(var n=e.length;n--;)if(r(e[n][0],t))return n;return-1}},4037:(e,t,n)=>{var r=n(8363),a=n(3674);e.exports=function(e,t){return e&&r(t,a(t),e)}},3886:(e,t,n)=>{var r=n(8363),a=n(1704);e.exports=function(e,t){return e&&r(t,a(t),e)}},9465:(e,t,n)=>{var r=n(8777);e.exports=function(e,t,n){"__proto__"==t&&r?r(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}},5990:(e,t,n)=>{var r=n(6384),a=n(7412),s=n(4865),i=n(4037),o=n(3886),l=n(4626),u=n(278),c=n(8805),h=n(1911),f=n(8234),d=n(6904),p=n(4160),m=n(3824),g=n(9148),y=n(8517),b=n(1469),v=n(4144),w=n(6688),_=n(3218),x=n(2928),k=n(3674),E=n(1704),C="[object Arguments]",S="[object Function]",N="[object Object]",I={};I[C]=I["[object Array]"]=I["[object ArrayBuffer]"]=I["[object DataView]"]=I["[object Boolean]"]=I["[object Date]"]=I["[object Float32Array]"]=I["[object Float64Array]"]=I["[object Int8Array]"]=I["[object Int16Array]"]=I["[object Int32Array]"]=I["[object Map]"]=I["[object Number]"]=I[N]=I["[object RegExp]"]=I["[object Set]"]=I["[object String]"]=I["[object Symbol]"]=I["[object Uint8Array]"]=I["[object Uint8ClampedArray]"]=I["[object Uint16Array]"]=I["[object Uint32Array]"]=!0,I["[object Error]"]=I[S]=I["[object WeakMap]"]=!1,e.exports=function e(t,n,A,D,T,F){var R,O=1&n,M=2&n,B=4&n;if(A&&(R=T?A(t,D,T,F):A(t)),void 0!==R)return R;if(!_(t))return t;var $=b(t);if($){if(R=m(t),!O)return u(t,R)}else{var P=p(t),L=P==S||"[object GeneratorFunction]"==P;if(v(t))return l(t,O);if(P==N||P==C||L&&!T){if(R=M||L?{}:y(t),!O)return M?h(t,o(R,t)):c(t,i(R,t))}else{if(!I[P])return T?t:{};R=g(t,P,O)}}F||(F=new r);var z=F.get(t);if(z)return z;F.set(t,R),x(t)?t.forEach((function(r){R.add(e(r,n,A,r,t,F))})):w(t)&&t.forEach((function(r,a){R.set(a,e(r,n,A,a,t,F))}));var W=$?void 0:(B?M?d:f:M?E:k)(t);return a(W||t,(function(r,a){W&&(r=t[a=r]),s(R,a,e(r,n,A,a,t,F))})),R}},3118:(e,t,n)=>{var r=n(3218),a=Object.create,s=function(){function e(){}return function(t){if(!r(t))return{};if(a)return a(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}();e.exports=s},6029:(e,t,n)=>{var r=n(3448);e.exports=function(e,t,n){for(var a=-1,s=e.length;++a{e.exports=function(e,t,n,r){for(var a=e.length,s=n+(r?1:-1);r?s--:++s{var r=n(2488),a=n(7285);e.exports=function e(t,n,s,i,o){var l=-1,u=t.length;for(s||(s=a),o||(o=[]);++l0&&s(c)?n>1?e(c,n-1,s,i,o):r(o,c):i||(o[o.length]=c)}return o}},8483:(e,t,n)=>{var r=n(5063)();e.exports=r},7816:(e,t,n)=>{var r=n(8483),a=n(3674);e.exports=function(e,t){return e&&r(e,t,a)}},7786:(e,t,n)=>{var r=n(1811),a=n(327);e.exports=function(e,t){for(var n=0,s=(t=r(t,e)).length;null!=e&&n{var r=n(2488),a=n(1469);e.exports=function(e,t,n){var s=t(e);return a(e)?s:r(s,n(e))}},4239:(e,t,n)=>{var r=n(2705),a=n(9607),s=n(2333),i=r?r.toStringTag:void 0;e.exports=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":i&&i in Object(e)?a(e):s(e)}},3325:e=>{e.exports=function(e,t){return e>t}},13:e=>{e.exports=function(e,t){return null!=e&&t in Object(e)}},2118:(e,t,n)=>{var r=n(1848),a=n(2722),s=n(2351);e.exports=function(e,t,n){return t==t?s(e,t,n):r(e,a,n)}},9454:(e,t,n)=>{var r=n(4239),a=n(7005);e.exports=function(e){return a(e)&&"[object Arguments]"==r(e)}},939:(e,t,n)=>{var r=n(2492),a=n(7005);e.exports=function e(t,n,s,i,o){return t===n||(null==t||null==n||!a(t)&&!a(n)?t!=t&&n!=n:r(t,n,s,i,e,o))}},2492:(e,t,n)=>{var r=n(6384),a=n(7114),s=n(8351),i=n(6096),o=n(4160),l=n(1469),u=n(4144),c=n(6719),h="[object Arguments]",f="[object Array]",d="[object Object]",p=Object.prototype.hasOwnProperty;e.exports=function(e,t,n,m,g,y){var b=l(e),v=l(t),w=b?f:o(e),_=v?f:o(t),x=(w=w==h?d:w)==d,k=(_=_==h?d:_)==d,E=w==_;if(E&&u(e)){if(!u(t))return!1;b=!0,x=!1}if(E&&!x)return y||(y=new r),b||c(e)?a(e,t,n,m,g,y):s(e,t,w,n,m,g,y);if(!(1&n)){var C=x&&p.call(e,"__wrapped__"),S=k&&p.call(t,"__wrapped__");if(C||S){var N=C?e.value():e,I=S?t.value():t;return y||(y=new r),g(N,I,n,m,y)}}return!!E&&(y||(y=new r),i(e,t,n,m,g,y))}},5588:(e,t,n)=>{var r=n(4160),a=n(7005);e.exports=function(e){return a(e)&&"[object Map]"==r(e)}},2958:(e,t,n)=>{var r=n(6384),a=n(939);e.exports=function(e,t,n,s){var i=n.length,o=i,l=!s;if(null==e)return!o;for(e=Object(e);i--;){var u=n[i];if(l&&u[2]?u[1]!==e[u[0]]:!(u[0]in e))return!1}for(;++i{e.exports=function(e){return e!=e}},8458:(e,t,n)=>{var r=n(3560),a=n(5346),s=n(3218),i=n(346),o=/^\[object .+?Constructor\]$/,l=Function.prototype,u=Object.prototype,c=l.toString,h=u.hasOwnProperty,f=RegExp("^"+c.call(h).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");e.exports=function(e){return!(!s(e)||a(e))&&(r(e)?f:o).test(i(e))}},3933:(e,t,n)=>{var r=n(4239),a=n(7005);e.exports=function(e){return a(e)&&"[object RegExp]"==r(e)}},9221:(e,t,n)=>{var r=n(4160),a=n(7005);e.exports=function(e){return a(e)&&"[object Set]"==r(e)}},8749:(e,t,n)=>{var r=n(4239),a=n(1780),s=n(7005),i={};i["[object Float32Array]"]=i["[object Float64Array]"]=i["[object Int8Array]"]=i["[object Int16Array]"]=i["[object Int32Array]"]=i["[object Uint8Array]"]=i["[object Uint8ClampedArray]"]=i["[object Uint16Array]"]=i["[object Uint32Array]"]=!0,i["[object Arguments]"]=i["[object Array]"]=i["[object ArrayBuffer]"]=i["[object Boolean]"]=i["[object DataView]"]=i["[object Date]"]=i["[object Error]"]=i["[object Function]"]=i["[object Map]"]=i["[object Number]"]=i["[object Object]"]=i["[object RegExp]"]=i["[object Set]"]=i["[object String]"]=i["[object WeakMap]"]=!1,e.exports=function(e){return s(e)&&a(e.length)&&!!i[r(e)]}},7206:(e,t,n)=>{var r=n(1573),a=n(6432),s=n(6557),i=n(1469),o=n(9601);e.exports=function(e){return"function"==typeof e?e:null==e?s:"object"==typeof e?i(e)?a(e[0],e[1]):r(e):o(e)}},280:(e,t,n)=>{var r=n(5726),a=n(6916),s=Object.prototype.hasOwnProperty;e.exports=function(e){if(!r(e))return a(e);var t=[];for(var n in Object(e))s.call(e,n)&&"constructor"!=n&&t.push(n);return t}},313:(e,t,n)=>{var r=n(3218),a=n(5726),s=n(3498),i=Object.prototype.hasOwnProperty;e.exports=function(e){if(!r(e))return s(e);var t=a(e),n=[];for(var o in e)("constructor"!=o||!t&&i.call(e,o))&&n.push(o);return n}},1573:(e,t,n)=>{var r=n(2958),a=n(1499),s=n(2634);e.exports=function(e){var t=a(e);return 1==t.length&&t[0][2]?s(t[0][0],t[0][1]):function(n){return n===e||r(n,e,t)}}},6432:(e,t,n)=>{var r=n(939),a=n(7361),s=n(9095),i=n(5403),o=n(9162),l=n(2634),u=n(327);e.exports=function(e,t){return i(e)&&o(t)?l(u(e),t):function(n){var i=a(n,e);return void 0===i&&i===t?s(n,e):r(t,i,3)}}},371:e=>{e.exports=function(e){return function(t){return null==t?void 0:t[e]}}},9152:(e,t,n)=>{var r=n(7786);e.exports=function(e){return function(t){return r(t,e)}}},4259:e=>{e.exports=function(e,t,n){var r=-1,a=e.length;t<0&&(t=-t>a?0:a+t),(n=n>a?a:n)<0&&(n+=a),a=t>n?0:n-t>>>0,t>>>=0;for(var s=Array(a);++r{e.exports=function(e,t){for(var n=-1,r=Array(e);++n{var r=n(2705),a=n(9932),s=n(1469),i=n(3448),o=r?r.prototype:void 0,l=o?o.toString:void 0;e.exports=function e(t){if("string"==typeof t)return t;if(s(t))return a(t,e)+"";if(i(t))return l?l.call(t):"";var n=t+"";return"0"==n&&1/t==-1/0?"-0":n}},7561:(e,t,n)=>{var r=n(7990),a=/^\s+/;e.exports=function(e){return e?e.slice(0,r(e)+1).replace(a,""):e}},1717:e=>{e.exports=function(e){return function(t){return e(t)}}},7415:(e,t,n)=>{var r=n(9932);e.exports=function(e,t){return r(t,(function(t){return e[t]}))}},4757:e=>{e.exports=function(e,t){return e.has(t)}},4290:(e,t,n)=>{var r=n(6557);e.exports=function(e){return"function"==typeof e?e:r}},1811:(e,t,n)=>{var r=n(1469),a=n(5403),s=n(5514),i=n(9833);e.exports=function(e,t){return r(e)?e:a(e,t)?[e]:s(i(e))}},180:(e,t,n)=>{var r=n(4259);e.exports=function(e,t,n){var a=e.length;return n=void 0===n?a:n,!t&&n>=a?e:r(e,t,n)}},5512:(e,t,n)=>{var r=n(2118);e.exports=function(e,t){for(var n=e.length;n--&&r(t,e[n],0)>-1;);return n}},4318:(e,t,n)=>{var r=n(1149);e.exports=function(e){var t=new e.constructor(e.byteLength);return new r(t).set(new r(e)),t}},4626:(e,t,n)=>{e=n.nmd(e);var r=n(5639),a=t&&!t.nodeType&&t,s=a&&e&&!e.nodeType&&e,i=s&&s.exports===a?r.Buffer:void 0,o=i?i.allocUnsafe:void 0;e.exports=function(e,t){if(t)return e.slice();var n=e.length,r=o?o(n):new e.constructor(n);return e.copy(r),r}},7157:(e,t,n)=>{var r=n(4318);e.exports=function(e,t){var n=t?r(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}},3147:e=>{var t=/\w*$/;e.exports=function(e){var n=new e.constructor(e.source,t.exec(e));return n.lastIndex=e.lastIndex,n}},419:(e,t,n)=>{var r=n(2705),a=r?r.prototype:void 0,s=a?a.valueOf:void 0;e.exports=function(e){return s?Object(s.call(e)):{}}},7133:(e,t,n)=>{var r=n(4318);e.exports=function(e,t){var n=t?r(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}},278:e=>{e.exports=function(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++n{var r=n(4865),a=n(9465);e.exports=function(e,t,n,s){var i=!n;n||(n={});for(var o=-1,l=t.length;++o{var r=n(8363),a=n(9551);e.exports=function(e,t){return r(e,a(e),t)}},1911:(e,t,n)=>{var r=n(8363),a=n(1442);e.exports=function(e,t){return r(e,a(e),t)}},4429:(e,t,n)=>{var r=n(5639)["__core-js_shared__"];e.exports=r},5063:e=>{e.exports=function(e){return function(t,n,r){for(var a=-1,s=Object(t),i=r(t),o=i.length;o--;){var l=i[e?o:++a];if(!1===n(s[l],l,s))break}return t}}},8777:(e,t,n)=>{var r=n(852),a=function(){try{var e=r(Object,"defineProperty");return e({},"",{}),e}catch(e){}}();e.exports=a},7114:(e,t,n)=>{var r=n(8668),a=n(2908),s=n(4757);e.exports=function(e,t,n,i,o,l){var u=1&n,c=e.length,h=t.length;if(c!=h&&!(u&&h>c))return!1;var f=l.get(e),d=l.get(t);if(f&&d)return f==t&&d==e;var p=-1,m=!0,g=2&n?new r:void 0;for(l.set(e,t),l.set(t,e);++p{var r=n(2705),a=n(1149),s=n(7813),i=n(7114),o=n(8776),l=n(1814),u=r?r.prototype:void 0,c=u?u.valueOf:void 0;e.exports=function(e,t,n,r,u,h,f){switch(n){case"[object DataView]":if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case"[object ArrayBuffer]":return!(e.byteLength!=t.byteLength||!h(new a(e),new a(t)));case"[object Boolean]":case"[object Date]":case"[object Number]":return s(+e,+t);case"[object Error]":return e.name==t.name&&e.message==t.message;case"[object RegExp]":case"[object String]":return e==t+"";case"[object Map]":var d=o;case"[object Set]":var p=1&r;if(d||(d=l),e.size!=t.size&&!p)return!1;var m=f.get(e);if(m)return m==t;r|=2,f.set(e,t);var g=i(d(e),d(t),r,u,h,f);return f.delete(e),g;case"[object Symbol]":if(c)return c.call(e)==c.call(t)}return!1}},6096:(e,t,n)=>{var r=n(8234),a=Object.prototype.hasOwnProperty;e.exports=function(e,t,n,s,i,o){var l=1&n,u=r(e),c=u.length;if(c!=r(t).length&&!l)return!1;for(var h=c;h--;){var f=u[h];if(!(l?f in t:a.call(t,f)))return!1}var d=o.get(e),p=o.get(t);if(d&&p)return d==t&&p==e;var m=!0;o.set(e,t),o.set(t,e);for(var g=l;++h{var r="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g;e.exports=r},8234:(e,t,n)=>{var r=n(8866),a=n(9551),s=n(3674);e.exports=function(e){return r(e,s,a)}},6904:(e,t,n)=>{var r=n(8866),a=n(1442),s=n(1704);e.exports=function(e){return r(e,s,a)}},5050:(e,t,n)=>{var r=n(7019);e.exports=function(e,t){var n=e.__data__;return r(t)?n["string"==typeof t?"string":"hash"]:n.map}},1499:(e,t,n)=>{var r=n(9162),a=n(3674);e.exports=function(e){for(var t=a(e),n=t.length;n--;){var s=t[n],i=e[s];t[n]=[s,i,r(i)]}return t}},852:(e,t,n)=>{var r=n(8458),a=n(7801);e.exports=function(e,t){var n=a(e,t);return r(n)?n:void 0}},5924:(e,t,n)=>{var r=n(5569)(Object.getPrototypeOf,Object);e.exports=r},9607:(e,t,n)=>{var r=n(2705),a=Object.prototype,s=a.hasOwnProperty,i=a.toString,o=r?r.toStringTag:void 0;e.exports=function(e){var t=s.call(e,o),n=e[o];try{e[o]=void 0;var r=!0}catch(e){}var a=i.call(e);return r&&(t?e[o]=n:delete e[o]),a}},9551:(e,t,n)=>{var r=n(4963),a=n(479),s=Object.prototype.propertyIsEnumerable,i=Object.getOwnPropertySymbols,o=i?function(e){return null==e?[]:(e=Object(e),r(i(e),(function(t){return s.call(e,t)})))}:a;e.exports=o},1442:(e,t,n)=>{var r=n(2488),a=n(5924),s=n(9551),i=n(479),o=Object.getOwnPropertySymbols?function(e){for(var t=[];e;)r(t,s(e)),e=a(e);return t}:i;e.exports=o},4160:(e,t,n)=>{var r=n(8552),a=n(7071),s=n(3818),i=n(8525),o=n(577),l=n(4239),u=n(346),c="[object Map]",h="[object Promise]",f="[object Set]",d="[object WeakMap]",p="[object DataView]",m=u(r),g=u(a),y=u(s),b=u(i),v=u(o),w=l;(r&&w(new r(new ArrayBuffer(1)))!=p||a&&w(new a)!=c||s&&w(s.resolve())!=h||i&&w(new i)!=f||o&&w(new o)!=d)&&(w=function(e){var t=l(e),n="[object Object]"==t?e.constructor:void 0,r=n?u(n):"";if(r)switch(r){case m:return p;case g:return c;case y:return h;case b:return f;case v:return d}return t}),e.exports=w},7801:e=>{e.exports=function(e,t){return null==e?void 0:e[t]}},222:(e,t,n)=>{var r=n(1811),a=n(5694),s=n(1469),i=n(5776),o=n(1780),l=n(327);e.exports=function(e,t,n){for(var u=-1,c=(t=r(t,e)).length,h=!1;++u{var t=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]");e.exports=function(e){return t.test(e)}},1789:(e,t,n)=>{var r=n(4536);e.exports=function(){this.__data__=r?r(null):{},this.size=0}},401:e=>{e.exports=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}},7667:(e,t,n)=>{var r=n(4536),a=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;if(r){var n=t[e];return"__lodash_hash_undefined__"===n?void 0:n}return a.call(t,e)?t[e]:void 0}},1327:(e,t,n)=>{var r=n(4536),a=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;return r?void 0!==t[e]:a.call(t,e)}},1866:(e,t,n)=>{var r=n(4536);e.exports=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=r&&void 0===t?"__lodash_hash_undefined__":t,this}},3824:e=>{var t=Object.prototype.hasOwnProperty;e.exports=function(e){var n=e.length,r=new e.constructor(n);return n&&"string"==typeof e[0]&&t.call(e,"index")&&(r.index=e.index,r.input=e.input),r}},9148:(e,t,n)=>{var r=n(4318),a=n(7157),s=n(3147),i=n(419),o=n(7133);e.exports=function(e,t,n){var l=e.constructor;switch(t){case"[object ArrayBuffer]":return r(e);case"[object Boolean]":case"[object Date]":return new l(+e);case"[object DataView]":return a(e,n);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return o(e,n);case"[object Map]":return new l;case"[object Number]":case"[object String]":return new l(e);case"[object RegExp]":return s(e);case"[object Set]":return new l;case"[object Symbol]":return i(e)}}},8517:(e,t,n)=>{var r=n(3118),a=n(5924),s=n(5726);e.exports=function(e){return"function"!=typeof e.constructor||s(e)?{}:r(a(e))}},7285:(e,t,n)=>{var r=n(2705),a=n(5694),s=n(1469),i=r?r.isConcatSpreadable:void 0;e.exports=function(e){return s(e)||a(e)||!!(i&&e&&e[i])}},5776:e=>{var t=/^(?:0|[1-9]\d*)$/;e.exports=function(e,n){var r=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==r||"symbol"!=r&&t.test(e))&&e>-1&&e%1==0&&e{var r=n(1469),a=n(3448),s=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,i=/^\w*$/;e.exports=function(e,t){if(r(e))return!1;var n=typeof e;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=e&&!a(e))||i.test(e)||!s.test(e)||null!=t&&e in Object(t)}},7019:e=>{e.exports=function(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e}},5346:(e,t,n)=>{var r,a=n(4429),s=(r=/[^.]+$/.exec(a&&a.keys&&a.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"";e.exports=function(e){return!!s&&s in e}},5726:e=>{var t=Object.prototype;e.exports=function(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||t)}},9162:(e,t,n)=>{var r=n(3218);e.exports=function(e){return e==e&&!r(e)}},7040:e=>{e.exports=function(){this.__data__=[],this.size=0}},4125:(e,t,n)=>{var r=n(8470),a=Array.prototype.splice;e.exports=function(e){var t=this.__data__,n=r(t,e);return!(n<0||(n==t.length-1?t.pop():a.call(t,n,1),--this.size,0))}},2117:(e,t,n)=>{var r=n(8470);e.exports=function(e){var t=this.__data__,n=r(t,e);return n<0?void 0:t[n][1]}},7518:(e,t,n)=>{var r=n(8470);e.exports=function(e){return r(this.__data__,e)>-1}},4705:(e,t,n)=>{var r=n(8470);e.exports=function(e,t){var n=this.__data__,a=r(n,e);return a<0?(++this.size,n.push([e,t])):n[a][1]=t,this}},4785:(e,t,n)=>{var r=n(1989),a=n(8407),s=n(7071);e.exports=function(){this.size=0,this.__data__={hash:new r,map:new(s||a),string:new r}}},1285:(e,t,n)=>{var r=n(5050);e.exports=function(e){var t=r(this,e).delete(e);return this.size-=t?1:0,t}},6e3:(e,t,n)=>{var r=n(5050);e.exports=function(e){return r(this,e).get(e)}},9916:(e,t,n)=>{var r=n(5050);e.exports=function(e){return r(this,e).has(e)}},5265:(e,t,n)=>{var r=n(5050);e.exports=function(e,t){var n=r(this,e),a=n.size;return n.set(e,t),this.size+=n.size==a?0:1,this}},8776:e=>{e.exports=function(e){var t=-1,n=Array(e.size);return e.forEach((function(e,r){n[++t]=[r,e]})),n}},2634:e=>{e.exports=function(e,t){return function(n){return null!=n&&n[e]===t&&(void 0!==t||e in Object(n))}}},4523:(e,t,n)=>{var r=n(8306);e.exports=function(e){var t=r(e,(function(e){return 500===n.size&&n.clear(),e})),n=t.cache;return t}},4536:(e,t,n)=>{var r=n(852)(Object,"create");e.exports=r},6916:(e,t,n)=>{var r=n(5569)(Object.keys,Object);e.exports=r},3498:e=>{e.exports=function(e){var t=[];if(null!=e)for(var n in Object(e))t.push(n);return t}},1167:(e,t,n)=>{e=n.nmd(e);var r=n(1957),a=t&&!t.nodeType&&t,s=a&&e&&!e.nodeType&&e,i=s&&s.exports===a&&r.process,o=function(){try{return s&&s.require&&s.require("util").types||i&&i.binding&&i.binding("util")}catch(e){}}();e.exports=o},2333:e=>{var t=Object.prototype.toString;e.exports=function(e){return t.call(e)}},5569:e=>{e.exports=function(e,t){return function(n){return e(t(n))}}},5639:(e,t,n)=>{var r=n(1957),a="object"==typeof self&&self&&self.Object===Object&&self,s=r||a||Function("return this")();e.exports=s},619:e=>{e.exports=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this}},2385:e=>{e.exports=function(e){return this.__data__.has(e)}},1814:e=>{e.exports=function(e){var t=-1,n=Array(e.size);return e.forEach((function(e){n[++t]=e})),n}},7465:(e,t,n)=>{var r=n(8407);e.exports=function(){this.__data__=new r,this.size=0}},3779:e=>{e.exports=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}},7599:e=>{e.exports=function(e){return this.__data__.get(e)}},4758:e=>{e.exports=function(e){return this.__data__.has(e)}},4309:(e,t,n)=>{var r=n(8407),a=n(7071),s=n(3369);e.exports=function(e,t){var n=this.__data__;if(n instanceof r){var i=n.__data__;if(!a||i.length<199)return i.push([e,t]),this.size=++n.size,this;n=this.__data__=new s(i)}return n.set(e,t),this.size=n.size,this}},2351:e=>{e.exports=function(e,t,n){for(var r=n-1,a=e.length;++r{var r=n(8983),a=n(2689),s=n(8816);e.exports=function(e){return a(e)?s(e):r(e)}},3140:(e,t,n)=>{var r=n(4286),a=n(2689),s=n(676);e.exports=function(e){return a(e)?s(e):r(e)}},5514:(e,t,n)=>{var r=n(4523),a=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,s=/\\(\\)?/g,i=r((function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(a,(function(e,n,r,a){t.push(r?a.replace(s,"$1"):n||e)})),t}));e.exports=i},327:(e,t,n)=>{var r=n(3448);e.exports=function(e){if("string"==typeof e||r(e))return e;var t=e+"";return"0"==t&&1/e==-1/0?"-0":t}},346:e=>{var t=Function.prototype.toString;e.exports=function(e){if(null!=e){try{return t.call(e)}catch(e){}try{return e+""}catch(e){}}return""}},7990:e=>{var t=/\s/;e.exports=function(e){for(var n=e.length;n--&&t.test(e.charAt(n)););return n}},8816:e=>{var t="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",n="\\ud83c[\\udffb-\\udfff]",r="[^\\ud800-\\udfff]",a="(?:\\ud83c[\\udde6-\\uddff]){2}",s="[\\ud800-\\udbff][\\udc00-\\udfff]",i="(?:"+t+"|"+n+")?",o="[\\ufe0e\\ufe0f]?",l=o+i+"(?:\\u200d(?:"+[r,a,s].join("|")+")"+o+i+")*",u="(?:"+[r+t+"?",t,a,s,"[\\ud800-\\udfff]"].join("|")+")",c=RegExp(n+"(?="+n+")|"+u+l,"g");e.exports=function(e){for(var t=c.lastIndex=0;c.test(e);)++t;return t}},676:e=>{var t="[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]",n="\\ud83c[\\udffb-\\udfff]",r="[^\\ud800-\\udfff]",a="(?:\\ud83c[\\udde6-\\uddff]){2}",s="[\\ud800-\\udbff][\\udc00-\\udfff]",i="(?:"+t+"|"+n+")?",o="[\\ufe0e\\ufe0f]?",l=o+i+"(?:\\u200d(?:"+[r,a,s].join("|")+")"+o+i+")*",u="(?:"+[r+t+"?",t,a,s,"[\\ud800-\\udfff]"].join("|")+")",c=RegExp(n+"(?="+n+")|"+u+l,"g");e.exports=function(e){return e.match(c)||[]}},361:(e,t,n)=>{var r=n(5990);e.exports=function(e){return r(e,5)}},7813:e=>{e.exports=function(e,t){return e===t||e!=e&&t!=t}},5564:(e,t,n)=>{var r=n(1078);e.exports=function(e){return null!=e&&e.length?r(e,1):[]}},7361:(e,t,n)=>{var r=n(7786);e.exports=function(e,t,n){var a=null==e?void 0:r(e,t);return void 0===a?n:a}},9095:(e,t,n)=>{var r=n(13),a=n(222);e.exports=function(e,t){return null!=e&&a(e,t,r)}},6557:e=>{e.exports=function(e){return e}},5694:(e,t,n)=>{var r=n(9454),a=n(7005),s=Object.prototype,i=s.hasOwnProperty,o=s.propertyIsEnumerable,l=r(function(){return arguments}())?r:function(e){return a(e)&&i.call(e,"callee")&&!o.call(e,"callee")};e.exports=l},1469:e=>{var t=Array.isArray;e.exports=t},8612:(e,t,n)=>{var r=n(3560),a=n(1780);e.exports=function(e){return null!=e&&a(e.length)&&!r(e)}},1584:(e,t,n)=>{var r=n(4239),a=n(7005);e.exports=function(e){return!0===e||!1===e||a(e)&&"[object Boolean]"==r(e)}},4144:(e,t,n)=>{e=n.nmd(e);var r=n(5639),a=n(5062),s=t&&!t.nodeType&&t,i=s&&e&&!e.nodeType&&e,o=i&&i.exports===s?r.Buffer:void 0,l=(o?o.isBuffer:void 0)||a;e.exports=l},3560:(e,t,n)=>{var r=n(4239),a=n(3218);e.exports=function(e){if(!a(e))return!1;var t=r(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}},1780:e=>{e.exports=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}},6688:(e,t,n)=>{var r=n(5588),a=n(1717),s=n(1167),i=s&&s.isMap,o=i?a(i):r;e.exports=o},1763:(e,t,n)=>{var r=n(4239),a=n(7005);e.exports=function(e){return"number"==typeof e||a(e)&&"[object Number]"==r(e)}},3218:e=>{e.exports=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}},7005:e=>{e.exports=function(e){return null!=e&&"object"==typeof e}},6347:(e,t,n)=>{var r=n(3933),a=n(1717),s=n(1167),i=s&&s.isRegExp,o=i?a(i):r;e.exports=o},2928:(e,t,n)=>{var r=n(9221),a=n(1717),s=n(1167),i=s&&s.isSet,o=i?a(i):r;e.exports=o},7037:(e,t,n)=>{var r=n(4239),a=n(1469),s=n(7005);e.exports=function(e){return"string"==typeof e||!a(e)&&s(e)&&"[object String]"==r(e)}},3448:(e,t,n)=>{var r=n(4239),a=n(7005);e.exports=function(e){return"symbol"==typeof e||a(e)&&"[object Symbol]"==r(e)}},6719:(e,t,n)=>{var r=n(8749),a=n(1717),s=n(1167),i=s&&s.isTypedArray,o=i?a(i):r;e.exports=o},2353:e=>{e.exports=function(e){return void 0===e}},3674:(e,t,n)=>{var r=n(4636),a=n(280),s=n(8612);e.exports=function(e){return s(e)?r(e):a(e)}},1704:(e,t,n)=>{var r=n(4636),a=n(313),s=n(8612);e.exports=function(e){return s(e)?r(e,!0):a(e)}},6604:(e,t,n)=>{var r=n(9465),a=n(7816),s=n(7206);e.exports=function(e,t){var n={};return t=s(t,3),a(e,(function(e,a,s){r(n,a,t(e,a,s))})),n}},6162:(e,t,n)=>{var r=n(6029),a=n(3325),s=n(6557);e.exports=function(e){return e&&e.length?r(e,s,a):void 0}},8306:(e,t,n)=>{var r=n(3369);function a(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError("Expected a function");var n=function(){var r=arguments,a=t?t.apply(this,r):r[0],s=n.cache;if(s.has(a))return s.get(a);var i=e.apply(this,r);return n.cache=s.set(a,i)||s,i};return n.cache=new(a.Cache||r),n}a.Cache=r,e.exports=a},9601:(e,t,n)=>{var r=n(371),a=n(9152),s=n(5403),i=n(327);e.exports=function(e){return s(e)?r(i(e)):a(e)}},479:e=>{e.exports=function(){return[]}},5062:e=>{e.exports=function(){return!1}},8913:(e,t,n)=>{var r=n(2545),a=n(4290),s=n(554),i=4294967295,o=Math.min;e.exports=function(e,t){if((e=s(e))<1||e>9007199254740991)return[];var n=i,l=o(e,i);t=a(t),e-=i;for(var u=r(l,t);++n{var r=n(4841);e.exports=function(e){return e?Infinity===(e=r(e))||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}},554:(e,t,n)=>{var r=n(8601);e.exports=function(e){var t=r(e),n=t%1;return t==t?n?t-n:t:0}},4841:(e,t,n)=>{var r=n(7561),a=n(3218),s=n(3448),i=/^[-+]0x[0-9a-f]+$/i,o=/^0b[01]+$/i,l=/^0o[0-7]+$/i,u=parseInt;e.exports=function(e){if("number"==typeof e)return e;if(s(e))return NaN;if(a(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=a(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=r(e);var n=o.test(e);return n||l.test(e)?u(e.slice(2),n?2:8):i.test(e)?NaN:+e}},9833:(e,t,n)=>{var r=n(531);e.exports=function(e){return null==e?"":r(e)}},691:(e,t,n)=>{var r=n(531),a=n(180),s=n(5512),i=n(3140),o=n(9833),l=n(7990);e.exports=function(e,t,n){if((e=o(e))&&(n||void 0===t))return e.slice(0,l(e)+1);if(!e||!(t=r(t)))return e;var u=i(e),c=s(u,i(t))+1;return a(u,0,c).join("")}},9138:(e,t,n)=>{var r=n(531),a=n(180),s=n(2689),i=n(3218),o=n(6347),l=n(8016),u=n(3140),c=n(554),h=n(9833),f=/\w*$/;e.exports=function(e,t){var n=30,d="...";if(i(t)){var p="separator"in t?t.separator:p;n="length"in t?c(t.length):n,d="omission"in t?r(t.omission):d}var m=(e=h(e)).length;if(s(e)){var g=u(e);m=g.length}if(n>=m)return e;var y=n-l(d);if(y<1)return d;var b=g?a(g,0,y).join(""):e.slice(0,y);if(void 0===p)return b+d;if(g&&(y+=b.length-y),o(p)){if(e.slice(y).search(p)){var v,w=b;for(p.global||(p=RegExp(p.source,h(f.exec(p))+"g")),p.lastIndex=0;v=p.exec(w);)var _=v.index;b=b.slice(0,void 0===_?y:_)}}else if(e.indexOf(r(p),y)!=y){var x=b.lastIndexOf(p);x>-1&&(b=b.slice(0,x))}return b+d}},2628:(e,t,n)=>{var r=n(7415),a=n(3674);e.exports=function(e){return null==e?[]:r(e,a(e))}},3346:(e,t,n)=>{"use strict";n.d(t,{C2o:()=>kn,xJM:()=>nn,qoR:()=>xn,CAK:()=>_n});var r={epsilon:1e-12,matrix:"Matrix",number:"number",precision:64,predictable:!1,randomSeed:null};function a(){return(a=Object.assign||function(e){for(var t=1;tt.re?1:e.ret.im?1:e.im=0?"+":"")+r.toString()}(e,n);case"auto":var a=t&&void 0!==t.lowerExp?t.lowerExp:-3,s=t&&void 0!==t.upperExp?t.upperExp:5;if(e.isZero())return"0";var i=e.toSignificantDigits(n),o=i.e;return(o>=a&&o=this.max?this.message="Index out of range ("+this.index+" > "+(this.max-1)+")":this.message="Index out of range ("+this.index+")",this.stack=(new Error).stack}function $(e){for(var t=[];Array.isArray(e);)t.push(e.length),e=e[0];return t}function P(e,t,n){var r,a=e.length;if(a!==t[n])throw new M(a,t[n]);if(n")}function L(e,t){if(0===t.length){if(Array.isArray(e))throw new M(e.length,0)}else P(e,t,0)}function z(e,t){if(!(0,i.hj)(e)||!(0,g.U)(e))throw new TypeError("Index must be an integer (value: "+e+")");if(e<0||"number"==typeof t&&e>=t)throw new B(e,t)}function W(e,t,n){if(!Array.isArray(e)||!Array.isArray(t))throw new TypeError("Array expected");if(0===t.length)throw new Error("Resizing to scalar is not supported");return t.forEach((function(e){if(!(0,i.hj)(e)||!(0,g.U)(e)||e<0)throw new TypeError("Invalid size, must contain positive integers (size: "+R(t)+")")})),U(e,t,0,void 0!==n?n:0),e}function U(e,t,n,r){var a,s,i=e.length,o=t[n],l=Math.min(i,o);if(e.length=o,n");h(e,t.max().map((function(e){return e+1})),r);var d=s.length;o(e._data,t,n,d,0)}return e}function o(e,t,n,r,a){var s=a===r-1,i=t.dimension(a);s?i.forEach((function(t,r){z(t),e[t]=n[r[0]]})):i.forEach((function(s,i){z(s),o(e[s],t,n[i[0]],r,a+1)}))}function u(e,t,n){if(0===t.length){for(var r=e._data;(0,i.kJ)(r);)r=r[0];return r}return e._size=t.slice(0),e._data=W(e._data,e._size,n),e}function h(e,t,n){for(var r=e._size.slice(0),a=!1;r.lengthr[s]&&(r[s]=t[s],a=!0);a&&u(e,r,n)}function f(e){for(var t=0,n=e.length;t0?e:0,r=e<0?-e:0,a=this._size[0],s=this._size[1],o=Math.min(a-r,s-t),l=[],u=0;u0?r:0,l=r<0?-r:0,u=e[0],c=e[1],h=Math.min(u-l,c-o);if((0,i.kJ)(t)){if(t.length!==h)throw new Error("Invalid value array length");s=function(e){return t[e]}}else if((0,i.SW)(t)){var f=t.size();if(1!==f.length||f[0]!==h)throw new Error("Invalid matrix length");s=function(e){return t.get([e])}}else s=function(){return t};a||(a=(0,i.l9)(s(0))?s(0).mul(0):0);var d=[];if(e.length>0){d=W(d,e,a);for(var p=0;p15)throw new TypeError("Cannot implicitly convert a number with >15 significant digits to BigNumber (value: "+e+"). Use function bignumber(x) to convert to BigNumber.");return new t(e)}},{from:"number",to:"Complex",convert:function(e){return n||Q(e),new n(e,0)}},{from:"number",to:"string",convert:function(e){return e+""}},{from:"BigNumber",to:"Complex",convert:function(e){return n||Q(e),new n(e.toNumber(),0)}},{from:"Fraction",to:"BigNumber",convert:function(e){throw new TypeError("Cannot implicitly convert a Fraction to BigNumber or vice versa. Use function bignumber(x) to convert to BigNumber or fraction(x) to convert to Fraction.")}},{from:"Fraction",to:"Complex",convert:function(e){return n||Q(e),new n(e.valueOf(),0)}},{from:"number",to:"Fraction",convert:function(e){a||ee(e);var t=new a(e);if(t.valueOf()!==e)throw new TypeError("Cannot implicitly convert a number to a Fraction when there will be a loss of precision (value: "+e+"). Use function fraction(x) to convert to Fraction.");return t}},{from:"string",to:"number",convert:function(e){var t=Number(e);if(isNaN(t))throw new Error('Cannot convert "'+e+'" to a number');return t}},{from:"string",to:"BigNumber",convert:function(e){t||Z(e);try{return new t(e)}catch(t){throw new Error('Cannot convert "'+e+'" to BigNumber')}}},{from:"string",to:"Fraction",convert:function(e){a||ee(e);try{return new a(e)}catch(t){throw new Error('Cannot convert "'+e+'" to Fraction')}}},{from:"string",to:"Complex",convert:function(e){n||Q(e);try{return new n(e)}catch(t){throw new Error('Cannot convert "'+e+'" to Complex')}}},{from:"boolean",to:"number",convert:function(e){return+e}},{from:"boolean",to:"BigNumber",convert:function(e){return t||Z(e),new t(+e)}},{from:"boolean",to:"Fraction",convert:function(e){return a||ee(e),new a(+e)}},{from:"boolean",to:"string",convert:function(e){return String(e)}},{from:"Array",to:"Matrix",convert:function(e){return r||function(){throw new Error("Cannot convert array into a Matrix: no class 'DenseMatrix' provided")}(),new r(e)}},{from:"Matrix",to:"Array",convert:function(e){return e.valueOf()}}],s}));function Z(e){throw new Error("Cannot convert value ".concat(e," into a BigNumber: no class 'BigNumber' provided"))}function Q(e){throw new Error("Cannot convert value ".concat(e," into a Complex number: no class 'Complex' provided"))}function ee(e){throw new Error("Cannot convert value ".concat(e," into a Fraction, no class 'Fraction' provided."))}function te(e,t){(0,i.SW)(e)&&(e=e.valueOf());for(var n=0,r=e.length;nMath.pow(2,32)-1)throw new SyntaxError('String "'.concat(e,'" is out of range'));2147483648&t&&(t=-1*~(t-1))}return t},BigNumber:function(e){return e.toNumber()},Fraction:function(e){return e.valueOf()},Unit:function(e){throw new Error("Second argument with valueless unit expected")},null:function(e){return 0},"Unit, string | Unit":function(e,t){return e.toNumber(t)},"Array | Matrix":function(e){return ne(e,this)}});return t.fromJSON=function(e){return parseFloat(e.value)},t}))),pe="number",me="number, number";function ge(e){return Math.abs(e)}function ye(e,t){return e+t}function be(e,t){return e*t}function ve(e){return-e}ge.signature=pe,ye.signature=me,be.signature=me,ve.signature=pe;var we="apply",_e=f(we,["typed","isInteger"],(function(e){var t=e.typed,n=e.isInteger;return t(we,{"Array | Matrix, number | BigNumber, function":function(e,t,r){if(!n(t))throw new TypeError("Integer number expected for dimension");var a=Array.isArray(e)?$(e):e.size();if(t<0||t>=a.length)throw new B(t,a.length);return(0,i.SW)(e)?e.create(xe(e.valueOf(),t,r)):xe(e,t,r)}})}));function xe(e,t,n){var r,a,s;if(t<=0){if(Array.isArray(e[0])){for(s=function(e){var t,n,r=e.length,a=e[0].length,s=[];for(n=0;nMath.pow(2,31)-1||n<-Math.pow(2,31))throw new Error("Value must be in range [-2^31, 2^31-1]");if(!(0,g.U)(n))throw new Error("Value must be an integer");return n<0&&(n+=Math.pow(2,32)),"".concat(t).concat(n.toString(e))}}Math.pow(2,53);var Ce=["typed"];function Se(e,t){return f(e,Ce,(function(n){return(0,n.typed)(e,{number:Ee(t)})}))}Se("oct",8);n(2424);n(7905);var Ne=f("fraction",["typed","Fraction"],(function(e){var t=e.typed,n=e.Fraction;return t("fraction",{number:function(e){if(!isFinite(e)||isNaN(e))throw new Error(e+" cannot be represented as a fraction");return new n(e)},string:function(e){return new n(e)},"number, number":function(e,t){return new n(e,t)},null:function(e){return new n(0)},BigNumber:function(e){return new n(e.toString())},Fraction:function(e){return e},Object:function(e){return new n(e)},"Array | Matrix":function(e){return ne(e,this)}})})),Ie="unaryMinus",Ae=f(Ie,["typed"],(function(e){return(0,e.typed)(Ie,{number:ve,Complex:function(e){return e.neg()},BigNumber:function(e){return e.neg()},Fraction:function(e){return e.neg()},Unit:function(e){var t=e.clone();return t.value=this(e.value),t},"Array | Matrix":function(e){return ne(e,this,!0)}})})),De="addScalar",Te=f(De,["typed"],(function(e){return(0,e.typed)(De,{"number, number":ye,"Complex, Complex":function(e,t){return e.add(t)},"BigNumber, BigNumber":function(e,t){return e.plus(t)},"Fraction, Fraction":function(e,t){return e.add(t)},"Unit, Unit":function(e,t){if(null===e.value||void 0===e.value)throw new Error("Parameter x contains a unit with undefined value");if(null===t.value||void 0===t.value)throw new Error("Parameter y contains a unit with undefined value");if(!e.equalBase(t))throw new Error("Units do not match");var n=e.clone();return n.value=this(n.value,t.value),n.fixPrefix=!1,n}})})),Fe=f("sqrt",["config","typed","Complex"],(function(e){var t=e.config,n=e.typed,r=e.Complex;return n("sqrt",{number:a,Complex:function(e){return e.sqrt()},BigNumber:function(e){return!e.isNegative()||t.predictable?e.sqrt():a(e.toNumber())},"Array | Matrix":function(e){return ne(e,this,!0)},Unit:function(e){return e.pow(.5)}});function a(e){return isNaN(e)?NaN:e>=0||t.predictable?Math.sqrt(e):new r(e,0).sqrt()}})),Re="conj",Oe=f(Re,["typed"],(function(e){return(0,e.typed)(Re,{number:function(e){return e},BigNumber:function(e){return e},Complex:function(e){return e.conjugate()},"Array | Matrix":function(e){return ne(e,this)}})})),Me="mode",Be=f(Me,["typed","isNaN","isNumeric"],(function(e){var t=e.typed,n=e.isNaN,r=e.isNumeric;return t(Me,{"Array | Matrix":a,"...":function(e){return a(e)}});function a(e){if(0===(e=H(e.valueOf())).length)throw new Error("Cannot calculate mode of an empty array");for(var t={},a=[],s=0,i=0;is&&(s=t[o],a=[o])}return a}}));Se("bin",2);var $e=f("SparseMatrix",["typed","equalScalar","Matrix"],(function(e){var t=e.typed,n=e.equalScalar,r=e.Matrix;function a(e,t){if(!(this instanceof a))throw new SyntaxError("Constructor must be called with the new operator");if(t&&!(0,i.HD)(t))throw new Error("Invalid datatype: "+t);if((0,i.SW)(e))!function(e,t,n){"SparseMatrix"===t.type?(e._values=t._values?l(t._values):void 0,e._index=l(t._index),e._ptr=l(t._ptr),e._size=l(t._size),e._datatype=n||t._datatype):s(e,t.valueOf(),n||t._datatype)}(this,e,t);else if(e&&(0,i.kJ)(e.index)&&(0,i.kJ)(e.ptr)&&(0,i.kJ)(e.size))this._values=e.values,this._index=e.index,this._ptr=e.ptr,this._size=e.size,this._datatype=t||e.datatype;else if((0,i.kJ)(e))s(this,e,t);else{if(e)throw new TypeError("Unsupported type of data ("+(0,i.kM)(e)+")");this._values=[],this._index=[],this._ptr=[0],this._size=[0,0],this._datatype=t}}function s(e,r,a){e._values=[],e._index=[],e._ptr=[],e._datatype=a;var s=r.length,o=0,l=n,u=0;if((0,i.HD)(a)&&(l=t.find(n,[a,a])||n,u=t.convert(0,a)),s>0){var c=0;do{e._ptr.push(e._index.length);for(var h=0;h");for(var h=t.min()[0],f=t.min()[1],d=a[0],p=a[1],m=0;mm){for(h=m;hp){if(d){var g=0;for(h=0;hr-1&&(e._values.splice(f,1),e._index.splice(f,1),b++)}e._ptr[h]=e._values.length}return e._size[0]=r,e._size[1]=a,e}function p(e,t,n,r,a){var s,i,o=r[0],u=r[1],c=[];for(s=0;sl-1||o>u-1)&&(d(this,Math.max(s+1,l),Math.max(o+1,u),a),l=this._size[0],u=this._size[1]),z(s,l),z(o,u);var m=h(s,this._ptr[o],this._ptr[o+1],this._index);return m=0&&_<=s&&g(e._values[w],_-0,y-0)}else{for(var x={},k=b;k "+(this._values?R(this._values[l],e):"X");return a},a.prototype.toString=function(){return R(this.toArray())},a.prototype.toJSON=function(){return{mathjs:"SparseMatrix",values:this._values,index:this._index,ptr:this._ptr,size:this._size,datatype:this._datatype}},a.prototype.diagonal=function(e){if(e){if((0,i.l9)(e)&&(e=e.toNumber()),!(0,i.hj)(e)||!(0,g.U)(e))throw new TypeError("The parameter k must be an integer number")}else e=0;var t=e>0?e:0,n=e<0?-e:0,r=this._size[0],s=this._size[1],o=Math.min(r-n,s-t),l=[],u=[],c=[];c[0]=0;for(var h=t;h0?s:0,d=s<0?-s:0,p=e[0],m=e[1],y=Math.min(p-d,m-f);if((0,i.kJ)(r)){if(r.length!==y)throw new Error("Invalid value array length");h=function(e){return r[e]}}else if((0,i.SW)(r)){var b=r.size();if(1!==b.length||b[0]!==y)throw new Error("Invalid matrix length");h=function(e){return r.get([e])}}else h=function(){return r};for(var v=[],w=[],_=[],x=0;x=0&&k=l||a[c]!==t)){var d=r?r[u]:void 0;a.splice(c,0,t),r&&r.splice(c,0,d),a.splice(c<=u?u+1:u,1),r&&r.splice(c<=u?u+1:u,1)}else if(c=l||a[u]!==e)){var p=r?r[c]:void 0;a.splice(u,0,e),r&&r.splice(u,0,p),a.splice(u<=c?c+1:c,1),r&&r.splice(u<=c?c+1:c,1)}}},a}),{isClass:!0}),Pe="matrix",Le=f(Pe,["typed","Matrix","DenseMatrix","SparseMatrix"],(function(e){var t=e.typed,n=(e.Matrix,e.DenseMatrix),r=e.SparseMatrix;return t(Pe,{"":function(){return a([])},string:function(e){return a([],e)},"string, string":function(e,t){return a([],e,t)},Array:function(e){return a(e)},Matrix:function(e){return a(e,e.storage())},"Array | Matrix, string":a,"Array | Matrix, string, string":a});function a(e,t,a){if("dense"===t||"default"===t||void 0===t)return new n(e,a);if("sparse"===t)return new r(e,a);throw new TypeError("Unknown matrix type "+JSON.stringify(t)+".")}})),ze=f("algorithm01",["typed"],(function(e){var t=e.typed;return function(e,n,r,a){var s=e._data,i=e._size,o=e._datatype,l=n._values,u=n._index,c=n._ptr,h=n._size,f=n._datatype;if(i.length!==h.length)throw new M(i.length,h.length);if(i[0]!==h[0]||i[1]!==h[1])throw new RangeError("Dimension mismatch. Matrix A ("+i+") must match Matrix B ("+h+")");if(!l)throw new Error("Cannot perform operation on Dense Matrix and Pattern Sparse Matrix");var d,p,m=i[0],g=i[1],y="string"==typeof o&&o===f?o:void 0,b=y?t.find(r,[y,y]):r,v=[];for(d=0;d0?n(p,0,f,f[0],i,u):[];return e.createDenseMatrix({data:m,size:f,datatype:s})};function n(e,t,r,a,s,i){var o=[];if(t===r.length-1)for(var l=0;l0?n(h,0,u,u[0],o,r,s):[];return e.createDenseMatrix({data:f,size:l(u),datatype:i})};function n(e,t,r,a,s,i,o){var l=[];if(t===r.length-1)for(var u=0;ut?1:-1},"number, number":function(e,t){return(0,g.RI)(e,t,n.epsilon)?0:e>t?1:-1},"BigNumber, BigNumber":function(e,t){return ce(e,t,n.epsilon)?new s(0):new s(e.cmp(t))},"Fraction, Fraction":function(e,t){return new i(e.compare(t))},"Complex, Complex":function(){throw new TypeError("No ordering relation is defined for complex numbers")},"Unit, Unit":function(e,t){if(!e.equalBase(t))throw new Error("Cannot compare units with different base");return this(e.value,t.value)},"SparseMatrix, SparseMatrix":function(e,t){return u(e,t,this)},"SparseMatrix, DenseMatrix":function(e,t){return l(t,e,this,!0)},"DenseMatrix, SparseMatrix":function(e,t){return l(e,t,this,!1)},"DenseMatrix, DenseMatrix":function(e,t){return h(e,t,this)},"Array, Array":function(e,t){return this(a(e),a(t)).valueOf()},"Array, Matrix":function(e,t){return this(a(e),t)},"Matrix, Array":function(e,t){return this(e,a(t))},"SparseMatrix, any":function(e,t){return c(e,t,this,!1)},"DenseMatrix, any":function(e,t){return f(e,t,this,!1)},"any, SparseMatrix":function(e,t){return c(t,e,this,!0)},"any, DenseMatrix":function(e,t){return f(t,e,this,!0)},"Array, any":function(e,t){return f(a(e),t,this,!1).valueOf()},"any, Array":function(e,t){return f(a(t),e,this,!0).valueOf()}})})),at="smaller",st=f(at,["typed","config","matrix","DenseMatrix"],(function(e){var t=e.typed,n=e.config,r=e.matrix,a=e.DenseMatrix,s=He({typed:t}),i=qe({typed:t,DenseMatrix:a}),o=Ke({typed:t,DenseMatrix:a}),l=Ve({typed:t}),u=je({typed:t});return t(at,{"boolean, boolean":function(e,t){return et},"number, number":function(e,t){return e>t&&!(0,g.RI)(e,t,n.epsilon)},"BigNumber, BigNumber":function(e,t){return e.gt(t)&&!ce(e,t,n.epsilon)},"Fraction, Fraction":function(e,t){return 1===e.compare(t)},"Complex, Complex":function(){throw new TypeError("No ordering relation is defined for complex numbers")},"Unit, Unit":function(e,t){if(!e.equalBase(t))throw new Error("Cannot compare units with different base");return this(e.value,t.value)},"SparseMatrix, SparseMatrix":function(e,t){return i(e,t,this)},"SparseMatrix, DenseMatrix":function(e,t){return s(t,e,this,!0)},"DenseMatrix, SparseMatrix":function(e,t){return s(e,t,this,!1)},"DenseMatrix, DenseMatrix":function(e,t){return l(e,t,this)},"Array, Array":function(e,t){return this(r(e),r(t)).valueOf()},"Array, Matrix":function(e,t){return this(r(e),t)},"Matrix, Array":function(e,t){return this(e,r(t))},"SparseMatrix, any":function(e,t){return o(e,t,this,!1)},"DenseMatrix, any":function(e,t){return u(e,t,this,!1)},"any, SparseMatrix":function(e,t){return o(t,e,this,!0)},"any, DenseMatrix":function(e,t){return u(t,e,this,!0)},"Array, any":function(e,t){return u(r(e),t,this,!1).valueOf()},"any, Array":function(e,t){return u(r(t),e,this,!0).valueOf()}})})),lt="unequal",ut=(f(lt,["typed","equalScalar"],(function(e){var t=e.typed,n=e.equalScalar;return t(lt,{"any, any":function(e,t){return null===e?null!==t:null===t?null!==e:void 0===e?void 0!==t:void 0===t?void 0!==e:!n(e,t)}})})),f("FibonacciHeap",["smaller","larger"],(function(e){var t=e.smaller,n=e.larger,r=1/Math.log((1+Math.sqrt(5))/2);function a(){if(!(this instanceof a))throw new SyntaxError("Constructor must be called with the new operator");this._minimum=null,this._size=0}function s(e,t,n){t.left.right=t.right,t.right.left=t.left,n.degree--,n.child===t&&(n.child=t.right),0===n.degree&&(n.child=null),t.left=e,t.right=e.right,e.right=t,t.right.left=t,t.parent=null,t.mark=!1}function i(e,t){var n=t.parent;n&&(t.mark?(s(e,t,n),i(n)):t.mark=!0)}a.prototype.type="FibonacciHeap",a.prototype.isFibonacciHeap=!0,a.prototype.insert=function(e,n){var r={key:e,value:n,degree:0};if(this._minimum){var a=this._minimum;r.left=a,r.right=a.right,a.right=r,r.right.left=r,t(e,a.key)&&(this._minimum=r)}else r.left=r,r.right=r,this._minimum=r;return this._size++,r},a.prototype.size=function(){return this._size},a.prototype.clear=function(){this._minimum=null,this._size=0},a.prototype.isEmpty=function(){return 0===this._size},a.prototype.extractMinimum=function(){var e=this._minimum;if(null===e)return e;for(var a=this._minimum,s=e.degree,i=e.child;s>0;){var l=i.right;i.left.right=i.right,i.right.left=i.left,i.left=a,i.right=a.right,a.right=i,i.right.left=i,i.parent=null,i=l,s--}return e.left.right=e.right,e.right.left=e.left,a=e===e.right?null:function(e,a){var s,i=Math.floor(Math.log(a)*r)+1,l=new Array(i),u=0,c=e;if(c)for(u++,c=c.right;c!==e;)u++,c=c.right;for(;u>0;){for(var h=c.degree,f=c.right;s=l[h];){if(n(c.key,s.key)){var d=s;s=c,c=d}o(s,c),l[h]=null,h++}l[h]=c,c=f,u--}e=null;for(var p=0;pm?d++:p===m&&(u=c(u,h(s[f],l[d])),f++,d++)}return u}});function o(e,t){var n,r,a=l(e),s=l(t);if(1===a.length)n=a[0];else{if(2!==a.length||1!==a[1])throw new RangeError("Expected a column vector, instead got a matrix of size ("+a.join(", ")+")");n=a[0]}if(1===s.length)r=s[0];else{if(2!==s.length||1!==s[1])throw new RangeError("Expected a column vector, instead got a matrix of size ("+s.join(", ")+")");r=s[0]}if(n!==r)throw new RangeError("Vectors must have equal length ("+n+" != "+r+")");if(0===n)throw new RangeError("Cannot calculate the dot product of empty vectors");return n}function l(e){return(0,i.SW)(e)?e.size():s(e)}})),ft=f("abs",["typed"],(function(e){return(0,e.typed)("abs",{number:ge,Complex:function(e){return e.abs()},BigNumber:function(e){return e.abs()},Fraction:function(e){return e.abs()},"Array | Matrix":function(e){return ne(e,this,!0)},Unit:function(e){return e.abs()}})})),dt="multiply",pt=f(dt,["typed","matrix","addScalar","multiplyScalar","equalScalar","dot"],(function(e){var t=e.typed,n=e.matrix,r=e.addScalar,a=e.multiplyScalar,s=e.equalScalar,o=e.dot,l=Xe({typed:t,equalScalar:s}),c=je({typed:t});function h(e,t){switch(e.length){case 1:switch(t.length){case 1:if(e[0]!==t[0])throw new RangeError("Dimension mismatch in multiplication. Vectors must have the same length");break;case 2:if(e[0]!==t[0])throw new RangeError("Dimension mismatch in multiplication. Vector length ("+e[0]+") must match Matrix rows ("+t[0]+")");break;default:throw new Error("Can only multiply a 1 or 2 dimensional matrix (Matrix B has "+t.length+" dimensions)")}break;case 2:switch(t.length){case 1:if(e[1]!==t[0])throw new RangeError("Dimension mismatch in multiplication. Matrix columns ("+e[1]+") must match Vector length ("+t[0]+")");break;case 2:if(e[1]!==t[0])throw new RangeError("Dimension mismatch in multiplication. Matrix A columns ("+e[1]+") must match Matrix B rows ("+t[0]+")");break;default:throw new Error("Can only multiply a 1 or 2 dimensional matrix (Matrix B has "+t.length+" dimensions)")}break;default:throw new Error("Can only multiply a 1 or 2 dimensional matrix (Matrix A has "+e.length+" dimensions)")}}var f=t("_multiplyMatrixVector",{"DenseMatrix, any":function(e,n){var s,i=e._data,o=e._size,l=e._datatype,u=n._data,c=n._datatype,h=o[0],f=o[1],d=r,p=a;l&&c&&l===c&&"string"==typeof l&&(s=l,d=t.find(r,[s,s]),p=t.find(a,[s,s]));for(var m=[],g=0;gS)for(var I=0,A=0;A1)throw new Error("Only one dimensional matrices supported");return u(e.valueOf(),t,n)}if(Array.isArray(e))return u(e,t,n)}function u(e,t,a){if(t>=e.length)throw new Error("k out of bounds");for(var s=0;s=0){var h=e[u];e[u]=e[l],e[l]=h,--u}else++l;a(e[l],c)>0&&--l,t<=l?o=l:i=l+1}return e[t]}})),bt=f("bignumber",["typed","BigNumber"],(function(e){var t=e.typed,n=e.BigNumber;return t("bignumber",{"":function(){return new n(0)},number:function(e){return new n(e+"")},string:function(e){return new n(e)},BigNumber:function(e){return e},Fraction:function(e){return new n(e.n).div(e.d).times(e.s)},null:function(e){return new n(0)},"Array | Matrix":function(e){return ne(e,this)}})})),vt=f("numeric",["number","?bignumber","?fraction"],(function(e){var t=e.number,n=e.bignumber,r=e.fraction,a={string:!0,number:!0,BigNumber:!0,Fraction:!0},s={number:function(e){return t(e)},BigNumber:n?function(e){return n(e)}:Ze,Fraction:r?function(e){return r(e)}:Qe};return function(e,t){var n=(0,i.kM)(e);if(!(n in a))throw new TypeError("Cannot convert "+e+' of type "'+n+'"; valid input types are '+Object.keys(a).join(", "));if(!(t in s))throw new TypeError("Cannot convert "+e+' to type "'+t+'"; valid output types are '+Object.keys(s).join(", "));return t===n?e:s[t](e)}}));function wt(e,t,n){var r;return-1!==String(e).indexOf("Unexpected type")?(r=arguments.length>2?" (type: "+(0,i.kM)(n)+", value: "+JSON.stringify(n)+")":" (type: "+e.data.actual+")",new TypeError("Cannot calculate "+t+", unexpected type of argument"+r)):-1!==String(e).indexOf("complex numbers")?(r=arguments.length>2?" (type: "+(0,i.kM)(n)+", value: "+JSON.stringify(n)+")":"",new TypeError("Cannot calculate "+t+", no ordering relation is defined for complex numbers"+r)):e}var _t="subtract",xt=f(_t,["typed","matrix","equalScalar","addScalar","unaryMinus","DenseMatrix"],(function(e){var t=e.typed,n=e.matrix,r=e.equalScalar,a=e.addScalar,s=e.unaryMinus,i=e.DenseMatrix,o=ze({typed:t}),l=He({typed:t}),u=Ge({typed:t,equalScalar:r}),c=Ue({typed:t,DenseMatrix:i}),h=Ve({typed:t}),f=je({typed:t});return t(_t,{"number, number":function(e,t){return e-t},"Complex, Complex":function(e,t){return e.sub(t)},"BigNumber, BigNumber":function(e,t){return e.minus(t)},"Fraction, Fraction":function(e,t){return e.sub(t)},"Unit, Unit":function(e,t){if(null===e.value)throw new Error("Parameter x contains a unit with undefined value");if(null===t.value)throw new Error("Parameter y contains a unit with undefined value");if(!e.equalBase(t))throw new Error("Units do not match");var n=e.clone();return n.value=this(n.value,t.value),n.fixPrefix=!1,n},"SparseMatrix, SparseMatrix":function(e,t){return kt(e,t),u(e,t,this)},"SparseMatrix, DenseMatrix":function(e,t){return kt(e,t),l(t,e,this,!0)},"DenseMatrix, SparseMatrix":function(e,t){return kt(e,t),o(e,t,this,!1)},"DenseMatrix, DenseMatrix":function(e,t){return kt(e,t),h(e,t,this)},"Array, Array":function(e,t){return this(n(e),n(t)).valueOf()},"Array, Matrix":function(e,t){return this(n(e),t)},"Matrix, Array":function(e,t){return this(e,n(t))},"SparseMatrix, any":function(e,t){return c(e,s(t),a)},"DenseMatrix, any":function(e,t){return f(e,t,this)},"any, SparseMatrix":function(e,t){return c(t,e,this,!0)},"any, DenseMatrix":function(e,t){return f(t,e,this,!0)},"Array, any":function(e,t){return f(n(e),t,this,!1).valueOf()},"any, Array":function(e,t){return f(n(t),e,this,!0).valueOf()}})}));function kt(e,t){var n=e.size(),r=t.size();if(n.length!==r.length)throw new M(n.length,r.length)}var Et="equal",Ct=(f(Et,["typed","equalScalar"],(function(e){var t=e.typed,n=e.equalScalar;return t(Et,{"any, any":function(e,t){return null===e?null===t:null===t?null===e:void 0===e?void 0===t:void 0===t?void 0===e:n(e,t)}})})),"divideScalar"),St=f(Ct,["typed","numeric"],(function(e){var t=e.typed,n=e.numeric;return t(Ct,{"number, number":function(e,t){return e/t},"Complex, Complex":function(e,t){return e.div(t)},"BigNumber, BigNumber":function(e,t){return e.div(t)},"Fraction, Fraction":function(e,t){return e.div(t)},"Unit, number | Fraction | BigNumber":function(e,t){var r=e.clone(),a=n(1,(0,i.kM)(t));return r.value=this(null===r.value?r._normalize(a):r.value,t),r},"number | Fraction | BigNumber, Unit":function(e,t){var r=t.clone();r=r.pow(-1);var a=n(1,(0,i.kM)(e));return r.value=this(e,null===t.value?t._normalize(a):t.value),r},"Unit, Unit":function(e,t){return e.divide(t)}})})),Nt=f("Spa",["addScalar","equalScalar","FibonacciHeap"],(function(e){var t=e.addScalar,n=e.equalScalar,r=e.FibonacciHeap;function a(){if(!(this instanceof a))throw new SyntaxError("Constructor must be called with the new operator");this._values=[],this._heap=new r}return a.prototype.type="Spa",a.prototype.isSpa=!0,a.prototype.set=function(e,t){if(this._values[e])this._values[e].value=t;else{var n=this._heap.insert(e,t);this._values[e]=n}},a.prototype.get=function(e){var t=this._values[e];return t?t.value:0},a.prototype.accumulate=function(e,n){var r=this._values[e];r?r.value=t(r.value,n):(r=this._heap.insert(e,n),this._values[e]=r)},a.prototype.forEach=function(e,t,r){var a=this._heap,s=this._values,i=[],o=a.extractMinimum();for(o&&i.push(o);o&&o.key<=t;)o.key>=e&&(n(o.value,0)||r(o.key,o.value,this)),(o=a.extractMinimum())&&i.push(o);for(var l=0;l0&&e.forEach(0,n-1,(function(t,n){d._forEachRow(t,b,v,w,(function(r,a){r>t&&e.accumulate(r,h(i(a,n)))}))}));var I,A,D,T,F=n,R=e.get(n),O=r(R);e.forEach(n+1,o-1,(function(e,t){var n=r(t);u(n,O)&&(F=e,O=n,R=t)})),n!==F&&(d._swapRows(n,F,_[1],b,v,w),d._swapRows(n,F,C[1],x,k,E),e.swap(n,F),A=F,D=N[I=n],T=N[A],S[D]=A,S[T]=I,N[I]=T,N[A]=D),e.forEach(0,o-1,(function(e,t){e<=n?(x.push(t),k.push(e)):(t=s(t,R),c(t,0)||(b.push(t),v.push(e)))}))};for(n=0;n0)for(t=0;t=t)break;for(var p=f,m=0;!d[i.p[p]];)d[i.p[p]]=!0,p=i.p[p],m++;m%2==0&&h++}return h%2==0?u:s(u)}(e.clone().valueOf(),u);throw new RangeError("Matrix must be square (size: "+R(t)+")");default:throw new RangeError("Matrix must be two dimensional (size: "+R(t)+")")}}})})),Dt=f("inv",["typed","matrix","divideScalar","addScalar","multiply","unaryMinus","det","identity","abs"],(function(e){var t=e.typed,n=e.matrix,r=e.divideScalar,a=e.addScalar,s=e.multiply,o=e.unaryMinus,l=e.det,u=e.identity,c=e.abs;return t("inv",{"Array | Matrix":function(e){var t=(0,i.SW)(e)?e.size():$(e);switch(t.length){case 1:if(1===t[0])return(0,i.SW)(e)?n([r(1,e.valueOf()[0])]):[r(1,e[0])];throw new RangeError("Matrix must be square (size: "+R(t)+")");case 2:var a=t[0],s=t[1];if(a===s)return(0,i.SW)(e)?n(h(e.valueOf(),a,s),e.storage()):h(e,a,s);throw new RangeError("Matrix must be square (size: "+R(t)+")");default:throw new RangeError("Matrix must be two dimensional (size: "+R(t)+")")}},any:function(e){return r(1,e)}});function h(e,t,n){var i,h,f,d,p;if(1===t){if(0===(d=e[0][0]))throw Error("Cannot calculate inverse, determinant is zero");return[[r(1,d)]]}if(2===t){var m=l(e);if(0===m)throw Error("Cannot calculate inverse, determinant is zero");return[[r(e[1][1],m),r(o(e[0][1]),m)],[r(o(e[1][0]),m),r(e[0][0],m)]]}var g=e.concat();for(i=0;iv&&(v=c(g[i][b]),w=i),i++;if(0===v)throw Error("Cannot calculate inverse, determinant is zero");(i=w)!==b&&(p=g[b],g[b]=g[i],g[i]=p,p=y[b],y[b]=y[i],y[i]=p);var _=g[b],x=y[b];for(i=0;i0&&(i=e[o]);return u(i,r)}var c=s(e,(t-1)/2);return l(c)}catch(e){throw wt(e,"median")}}var l=t({"number | BigNumber | Complex | Unit":function(e){return e}}),u=t({"number | BigNumber | Complex | Unit, number | BigNumber | Complex | Unit":function(e,t){return r(n(e,t),2)}});return t(Bt,{"Array | Matrix":o,"Array | Matrix, number | BigNumber":function(e,t){throw new Error("median(A, dim) is not yet supported")},"...":function(e){if(function(e){for(var t=0;t{"use strict";n.d(t,{gammaG:()=>a.Yc,gammaNumber:()=>a.wZ,gammaP:()=>a.lG,acoshNumber:()=>s.cw,acotNumber:()=>s.y,acothNumber:()=>s.LJ,acscNumber:()=>s.VL,acschNumber:()=>s.F4,asecNumber:()=>s.zq,asechNumber:()=>s.Pe,asinhNumber:()=>s.Rm,atanhNumber:()=>s.Sz,cotNumber:()=>s.Nw,cothNumber:()=>s.ws,cscNumber:()=>s.c$,cschNumber:()=>s.zr,secNumber:()=>s.wX,sechNumber:()=>s.pL,sinhNumber:()=>s.T$,isNaNNumber:()=>i.kU,isNegativeNumber:()=>i.Tk,isPositiveNumber:()=>i.r,isZeroNumber:()=>i.hG});var r=n(6802);n.o(r,"acoshNumber")&&n.d(t,{acoshNumber:function(){return r.acoshNumber}}),n.o(r,"acotNumber")&&n.d(t,{acotNumber:function(){return r.acotNumber}}),n.o(r,"acothNumber")&&n.d(t,{acothNumber:function(){return r.acothNumber}}),n.o(r,"acscNumber")&&n.d(t,{acscNumber:function(){return r.acscNumber}}),n.o(r,"acschNumber")&&n.d(t,{acschNumber:function(){return r.acschNumber}}),n.o(r,"asecNumber")&&n.d(t,{asecNumber:function(){return r.asecNumber}}),n.o(r,"asechNumber")&&n.d(t,{asechNumber:function(){return r.asechNumber}}),n.o(r,"asinhNumber")&&n.d(t,{asinhNumber:function(){return r.asinhNumber}}),n.o(r,"atanhNumber")&&n.d(t,{atanhNumber:function(){return r.atanhNumber}}),n.o(r,"cotNumber")&&n.d(t,{cotNumber:function(){return r.cotNumber}}),n.o(r,"cothNumber")&&n.d(t,{cothNumber:function(){return r.cothNumber}}),n.o(r,"cscNumber")&&n.d(t,{cscNumber:function(){return r.cscNumber}}),n.o(r,"cschNumber")&&n.d(t,{cschNumber:function(){return r.cschNumber}}),n.o(r,"gammaG")&&n.d(t,{gammaG:function(){return r.gammaG}}),n.o(r,"gammaNumber")&&n.d(t,{gammaNumber:function(){return r.gammaNumber}}),n.o(r,"gammaP")&&n.d(t,{gammaP:function(){return r.gammaP}}),n.o(r,"isNaNNumber")&&n.d(t,{isNaNNumber:function(){return r.isNaNNumber}}),n.o(r,"isNegativeNumber")&&n.d(t,{isNegativeNumber:function(){return r.isNegativeNumber}}),n.o(r,"isPositiveNumber")&&n.d(t,{isPositiveNumber:function(){return r.isPositiveNumber}}),n.o(r,"isZeroNumber")&&n.d(t,{isZeroNumber:function(){return r.isZeroNumber}}),n.o(r,"secNumber")&&n.d(t,{secNumber:function(){return r.secNumber}}),n.o(r,"sechNumber")&&n.d(t,{sechNumber:function(){return r.sechNumber}}),n.o(r,"sinhNumber")&&n.d(t,{sinhNumber:function(){return r.sinhNumber}});var a=n(9065),s=n(333),i=n(6493)},9065:(e,t,n)=>{"use strict";n.d(t,{wZ:()=>s,Yc:()=>i,lG:()=>o});var r=n(4008),a=n(2424);function s(e){var t;if((0,r.U)(e))return e<=0?isFinite(e)?1/0:NaN:e>171?1/0:(0,a.O)(1,e-1);if(e<.5)return Math.PI/(Math.sin(Math.PI*e)*s(1-e));if(e>=171.35)return 1/0;if(e>85){var n=e*e,l=n*e,u=l*e,c=u*e;return Math.sqrt(2*Math.PI/e)*Math.pow(e/Math.E,e)*(1+1/(12*e)+1/(288*n)-139/(51840*l)-571/(2488320*u)+163879/(209018880*c)+5246819/(75246796800*c*e))}--e,t=o[0];for(var h=1;h{},333:(e,t,n)=>{"use strict";n.d(t,{cw:()=>s,y:()=>i,LJ:()=>o,VL:()=>l,F4:()=>u,zq:()=>c,Pe:()=>h,Rm:()=>f,Sz:()=>d,Nw:()=>p,ws:()=>m,c$:()=>g,zr:()=>y,wX:()=>b,pL:()=>v,T$:()=>w});var r=n(4008),a="number";function s(e){return(0,r.__)(e)}function i(e){return Math.atan(1/e)}function o(e){return isFinite(e)?(Math.log((e+1)/e)+Math.log(e/(e-1)))/2:0}function l(e){return Math.asin(1/e)}function u(e){var t=1/e;return Math.log(t+Math.sqrt(t*t+1))}function c(e){return Math.acos(1/e)}function h(e){var t=1/e,n=Math.sqrt(t*t-1);return Math.log(n+t)}function f(e){return(0,r.Vf)(e)}function d(e){return(0,r.C8)(e)}function p(e){return 1/Math.tan(e)}function m(e){var t=Math.exp(2*e);return(t+1)/(t-1)}function g(e){return 1/Math.sin(e)}function y(e){return 0===e?Number.POSITIVE_INFINITY:Math.abs(2/(Math.exp(e)-Math.exp(-e)))*(0,r.Xx)(e)}function b(e){return 1/Math.cos(e)}function v(e){return 2/(Math.exp(e)+Math.exp(-e))}function w(e){return(0,r.R_)(e)}s.signature=a,i.signature=a,o.signature=a,l.signature=a,u.signature=a,c.signature=a,h.signature=a,f.signature=a,d.signature=a,p.signature=a,m.signature=a,g.signature=a,y.signature=a,b.signature=a,v.signature=a,w.signature=a},6493:(e,t,n)=>{"use strict";n.d(t,{Tk:()=>a,r:()=>s,hG:()=>i,kU:()=>o}),n(4008);var r="number";function a(e){return e<0}function s(e){return e>0}function i(e){return 0===e}function o(e){return Number.isNaN(e)}a.signature=r,s.signature=r,i.signature=r,o.signature=r},4080:(e,t,n)=>{"use strict";function r(e){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function a(e){return"number"==typeof e}function s(e){return e&&!0===e.constructor.prototype.isBigNumber||!1}function i(e){return e&&"object"===r(e)&&!0===Object.getPrototypeOf(e).isComplex||!1}function o(e){return e&&"object"===r(e)&&!0===Object.getPrototypeOf(e).isFraction||!1}function l(e){return e&&!0===e.constructor.prototype.isUnit||!1}function u(e){return"string"==typeof e}n.d(t,{hj:()=>a,l9:()=>s,Mc:()=>i,yQ:()=>o,wr:()=>l,HD:()=>u,kJ:()=>c,SW:()=>h,uZ:()=>f,jH:()=>d,sA:()=>p,bR:()=>m,dh:()=>g,jn:()=>y,cB:()=>b,x1:()=>v,mf:()=>w,J_:()=>_,Kj:()=>x,Kn:()=>k,Ft:()=>E,o8:()=>C,Yz:()=>S,j0:()=>N,Bp:()=>I,zh:()=>A,tS:()=>D,nu:()=>T,l7:()=>F,VO:()=>R,Cl:()=>O,UG:()=>M,Lr:()=>B,bV:()=>$,Ig:()=>P,ex:()=>L,FG:()=>z,qg:()=>W,kM:()=>U});var c=Array.isArray;function h(e){return e&&!0===e.constructor.prototype.isMatrix||!1}function f(e){return Array.isArray(e)||h(e)}function d(e){return e&&e.isDenseMatrix&&!0===e.constructor.prototype.isMatrix||!1}function p(e){return e&&e.isSparseMatrix&&!0===e.constructor.prototype.isMatrix||!1}function m(e){return e&&!0===e.constructor.prototype.isRange||!1}function g(e){return e&&!0===e.constructor.prototype.isIndex||!1}function y(e){return"boolean"==typeof e}function b(e){return e&&!0===e.constructor.prototype.isResultSet||!1}function v(e){return e&&!0===e.constructor.prototype.isHelp||!1}function w(e){return"function"==typeof e}function _(e){return e instanceof Date}function x(e){return e instanceof RegExp}function k(e){return!(!e||"object"!==r(e)||e.constructor!==Object||i(e)||o(e))}function E(e){return null===e}function C(e){return void 0===e}function S(e){return e&&!0===e.isAccessorNode&&!0===e.constructor.prototype.isNode||!1}function N(e){return e&&!0===e.isArrayNode&&!0===e.constructor.prototype.isNode||!1}function I(e){return e&&!0===e.isAssignmentNode&&!0===e.constructor.prototype.isNode||!1}function A(e){return e&&!0===e.isBlockNode&&!0===e.constructor.prototype.isNode||!1}function D(e){return e&&!0===e.isConditionalNode&&!0===e.constructor.prototype.isNode||!1}function T(e){return e&&!0===e.isConstantNode&&!0===e.constructor.prototype.isNode||!1}function F(e){return e&&!0===e.isFunctionAssignmentNode&&!0===e.constructor.prototype.isNode||!1}function R(e){return e&&!0===e.isFunctionNode&&!0===e.constructor.prototype.isNode||!1}function O(e){return e&&!0===e.isIndexNode&&!0===e.constructor.prototype.isNode||!1}function M(e){return e&&!0===e.isNode&&!0===e.constructor.prototype.isNode||!1}function B(e){return e&&!0===e.isObjectNode&&!0===e.constructor.prototype.isNode||!1}function $(e){return e&&!0===e.isOperatorNode&&!0===e.constructor.prototype.isNode||!1}function P(e){return e&&!0===e.isParenthesisNode&&!0===e.constructor.prototype.isNode||!1}function L(e){return e&&!0===e.isRangeNode&&!0===e.constructor.prototype.isNode||!1}function z(e){return e&&!0===e.isSymbolNode&&!0===e.constructor.prototype.isNode||!1}function W(e){return e&&!0===e.constructor.prototype.isChain||!1}function U(e){var t=r(e);return"object"===t?null===e?"null":Array.isArray(e)?"Array":e instanceof Date?"Date":e instanceof RegExp?"RegExp":s(e)?"BigNumber":i(e)?"Complex":o(e)?"Fraction":h(e)?"Matrix":l(e)?"Unit":g(e)?"Index":m(e)?"Range":b(e)?"ResultSet":M(e)?e.type:W(e)?"Chain":v(e)?"Help":"Object":"function"===t?"Function":t}},4008:(e,t,n)=>{"use strict";n.d(t,{U:()=>a,Xx:()=>s,k3:()=>i,mv:()=>o,Kr:()=>l,eK:()=>u,t$:()=>c,WU:()=>h,FH:()=>d,nz:()=>y,RI:()=>v,__:()=>w,Vf:()=>_,C8:()=>x,f9:()=>k,R_:()=>E,AE:()=>C});var r=n(4080);function a(e){return"boolean"==typeof e||!!isFinite(e)&&e===Math.round(e)}var s=Math.sign||function(e){return e>0?1:e<0?-1:0},i=Math.log2||function(e){return Math.log(e)/Math.LN2},o=Math.log10||function(e){return Math.log(e)/Math.LN10},l=Math.log1p||function(e){return Math.log(e+1)},u=Math.cbrt||function(e){if(0===e)return e;var t,n=e<0;return n&&(e=-e),t=isFinite(e)?(e/((t=Math.exp(Math.log(e)/3))*t)+2*t)/3:e,n?-t:t},c=Math.expm1||function(e){return e>=2e-4||e<=-2e-4?Math.exp(e)-1:e+e*e/2+e*e*e/6};function h(e,t){if("function"==typeof t)return t(e);if(e===1/0)return"Infinity";if(e===-1/0)return"-Infinity";if(isNaN(e))return"NaN";var n,a="auto";switch(t&&(t.notation&&(a=t.notation),(0,r.hj)(t)?n=t:(0,r.hj)(t.precision)&&(n=t.precision)),a){case"fixed":return d(e,n);case"exponential":return p(e,n);case"engineering":return function(e,t){if(isNaN(e)||!isFinite(e))return String(e);var n=m(f(e),t),a=n.exponent,s=n.coefficients,i=a%3==0?a:a<0?a-3-a%3:a-a%3;if((0,r.hj)(t))for(;t>s.length||a-i+1>s.length;)s.push(0);else for(var o=Math.abs(a-i)-(s.length-1),l=0;l0;)c++,u--;var h=s.slice(c).join(""),d=(0,r.hj)(t)&&h.length||h.match(/[1-9]/)?"."+h:"",p=s.slice(0,c).join("")+d+"e"+(a>=0?"+":"")+i.toString();return n.sign+p}(e,n);case"auto":return function(e,t,n){if(isNaN(e)||!isFinite(e))return String(e);var r=n&&void 0!==n.lowerExp?n.lowerExp:-3,a=n&&void 0!==n.upperExp?n.upperExp:5,s=f(e),i=t?m(s,t):s;if(i.exponent=a)return p(e,t);var o=i.coefficients,l=i.exponent;o.length0?l:0;return u<(o=g(-l).concat(o)).length-1&&o.splice(u+1,0,"."),i.sign+o.join("")}(e,n,t&&t).replace(/((\.\d*?)(0+))($|e)/,(function(){var e=arguments[2],t=arguments[4];return"."!==e?e+t:t}));default:throw new Error('Unknown notation "'+a+'". Choose "auto", "exponential", or "fixed".')}}function f(e){var t=String(e).toLowerCase().match(/^0*?(-?)(\d+\.?\d*)(e([+-]?\d+))?$/);if(!t)throw new SyntaxError("Invalid number "+e);var n=t[1],r=t[2],a=parseFloat(t[4]||"0"),s=r.indexOf(".");a+=-1!==s?s-1:r.length-1;var i=r.replace(".","").replace(/^0*/,(function(e){return a-=e.length,""})).replace(/0*$/,"").split("").map((function(e){return parseInt(e)}));return 0===i.length&&(i.push(0),a++),{sign:n,coefficients:i,exponent:a}}function d(e,t){if(isNaN(e)||!isFinite(e))return String(e);var n=f(e),r="number"==typeof t?m(n,n.exponent+1+t):n,a=r.coefficients,s=r.exponent+1,i=s+(t||0);return a.length0?"."+a.join(""):"")+"e"+(s>=0?"+":"")+s}function m(e,t){for(var n={sign:e.sign,coefficients:e.coefficients,exponent:e.exponent},r=n.coefficients;t<=0;)r.unshift(0),n.exponent++,t++;if(r.length>t&&r.splice(t,r.length-t)[0]>=5){var a=t-1;for(r[a]++;10===r[a];)r.pop(),0===a&&(r.unshift(0),n.exponent++,a++),r[--a]++}return n}function g(e){for(var t=[],n=0;n{"use strict";function r(e,t){if(t>1;return r(e,n)*r(n+1,t)}n.d(t,{O:()=>r})},5666:e=>{var t=function(e){"use strict";var t,n=Object.prototype,r=n.hasOwnProperty,a="function"==typeof Symbol?Symbol:{},s=a.iterator||"@@iterator",i=a.asyncIterator||"@@asyncIterator",o=a.toStringTag||"@@toStringTag";function l(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{l({},"")}catch(e){l=function(e,t,n){return e[t]=n}}function u(e,t,n,r){var a=t&&t.prototype instanceof g?t:g,s=Object.create(a.prototype),i=new I(r||[]);return s._invoke=function(e,t,n){var r=h;return function(a,s){if(r===d)throw new Error("Generator is already running");if(r===p){if("throw"===a)throw s;return D()}for(n.method=a,n.arg=s;;){var i=n.delegate;if(i){var o=C(i,n);if(o){if(o===m)continue;return o}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(r===h)throw r=p,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r=d;var l=c(e,t,n);if("normal"===l.type){if(r=n.done?p:f,l.arg===m)continue;return{value:l.arg,done:n.done}}"throw"===l.type&&(r=p,n.method="throw",n.arg=l.arg)}}}(e,n,i),s}function c(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}e.wrap=u;var h="suspendedStart",f="suspendedYield",d="executing",p="completed",m={};function g(){}function y(){}function b(){}var v={};v[s]=function(){return this};var w=Object.getPrototypeOf,_=w&&w(w(A([])));_&&_!==n&&r.call(_,s)&&(v=_);var x=b.prototype=g.prototype=Object.create(v);function k(e){["next","throw","return"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function E(e,t){function n(a,s,i,o){var l=c(e[a],e,s);if("throw"!==l.type){var u=l.arg,h=u.value;return h&&"object"==typeof h&&r.call(h,"__await")?t.resolve(h.__await).then((function(e){n("next",e,i,o)}),(function(e){n("throw",e,i,o)})):t.resolve(h).then((function(e){u.value=e,i(u)}),(function(e){return n("throw",e,i,o)}))}o(l.arg)}var a;this._invoke=function(e,r){function s(){return new t((function(t,a){n(e,r,t,a)}))}return a=a?a.then(s,s):s()}}function C(e,n){var r=e.iterator[n.method];if(r===t){if(n.delegate=null,"throw"===n.method){if(e.iterator.return&&(n.method="return",n.arg=t,C(e,n),"throw"===n.method))return m;n.method="throw",n.arg=new TypeError("The iterator does not provide a 'throw' method")}return m}var a=c(r,e.iterator,n.arg);if("throw"===a.type)return n.method="throw",n.arg=a.arg,n.delegate=null,m;var s=a.arg;return s?s.done?(n[e.resultName]=s.value,n.next=e.nextLoc,"return"!==n.method&&(n.method="next",n.arg=t),n.delegate=null,m):s:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,m)}function S(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function N(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function I(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(S,this),this.reset(!0)}function A(e){if(e){var n=e[s];if(n)return n.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var a=-1,i=function n(){for(;++a=0;--s){var i=this.tryEntries[s],o=i.completion;if("root"===i.tryLoc)return a("end");if(i.tryLoc<=this.prev){var l=r.call(i,"catchLoc"),u=r.call(i,"finallyLoc");if(l&&u){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),N(n),m}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var a=r.arg;N(n)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(e,n,r){return this.delegate={iterator:A(e),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=t),m}},e}(e.exports);try{regeneratorRuntime=t}catch(e){Function("r","regeneratorRuntime = r")(t)}},7905:(e,t,n)=>{"use strict";var r=256,a=[],s=void 0===n.g?window:n.g,i=Math.pow(r,6),o=Math.pow(2,52),l=2*o,u=255,c=Math.random;function h(e){var t,n=e.length,a=this,s=0,i=a.i=a.j=0,o=a.S=[];for(n||(e=[n++]);s=l;)e/=2,t/=2,n>>>=1;return(e+n)/t}},e.exports.resetGlobal=function(){Math.random=c},d(Math.random(),a)},6377:(e,t,n)=>{var r=n(4832),a=n(8652),s=n(801),i=n(2030),o=n(3618),l=n(9049),u=n(1971);u.alea=r,u.xor128=a,u.xorwow=s,u.xorshift7=i,u.xor4096=o,u.tychei=l,e.exports=u},4832:function(e,t,n){var r;!function(e,a,s){function i(e){var t,n=this,r=(t=4022871197,function(e){e=e.toString();for(var n=0;n>>0,t=(r*=t)>>>0,t+=4294967296*(r-=t)}return 2.3283064365386963e-10*(t>>>0)});n.next=function(){var e=2091639*n.s0+2.3283064365386963e-10*n.c;return n.s0=n.s1,n.s1=n.s2,n.s2=e-(n.c=0|e)},n.c=1,n.s0=r(" "),n.s1=r(" "),n.s2=r(" "),n.s0-=r(e),n.s0<0&&(n.s0+=1),n.s1-=r(e),n.s1<0&&(n.s1+=1),n.s2-=r(e),n.s2<0&&(n.s2+=1),r=null}function o(e,t){return t.c=e.c,t.s0=e.s0,t.s1=e.s1,t.s2=e.s2,t}function l(e,t){var n=new i(e),r=t&&t.state,a=n.next;return a.int32=function(){return 4294967296*n.next()|0},a.double=function(){return a()+11102230246251565e-32*(2097152*a()|0)},a.quick=a,r&&("object"==typeof r&&o(r,n),a.state=function(){return o(n,{})}),a}a&&a.exports?a.exports=l:n.amdD&&n.amdO?void 0===(r=function(){return l}.call(t,n,t,a))||(a.exports=r):this.alea=l}(0,e=n.nmd(e),n.amdD)},9049:function(e,t,n){var r;!function(e,a,s){function i(e){var t=this,n="";t.next=function(){var e=t.b,n=t.c,r=t.d,a=t.a;return e=e<<25^e>>>7^n,n=n-r|0,r=r<<24^r>>>8^a,a=a-e|0,t.b=e=e<<20^e>>>12^n,t.c=n=n-r|0,t.d=r<<16^n>>>16^a,t.a=a-e|0},t.a=0,t.b=0,t.c=-1640531527,t.d=1367130551,e===Math.floor(e)?(t.a=e/4294967296|0,t.b=0|e):n+=e;for(var r=0;r>>0)/4294967296};return a.double=function(){do{var e=((n.next()>>>11)+(n.next()>>>0)/4294967296)/(1<<21)}while(0===e);return e},a.int32=n.next,a.quick=a,r&&("object"==typeof r&&o(r,n),a.state=function(){return o(n,{})}),a}a&&a.exports?a.exports=l:n.amdD&&n.amdO?void 0===(r=function(){return l}.call(t,n,t,a))||(a.exports=r):this.tychei=l}(0,e=n.nmd(e),n.amdD)},8652:function(e,t,n){var r;!function(e,a,s){function i(e){var t=this,n="";t.x=0,t.y=0,t.z=0,t.w=0,t.next=function(){var e=t.x^t.x<<11;return t.x=t.y,t.y=t.z,t.z=t.w,t.w^=t.w>>>19^e^e>>>8},e===(0|e)?t.x=e:n+=e;for(var r=0;r>>0)/4294967296};return a.double=function(){do{var e=((n.next()>>>11)+(n.next()>>>0)/4294967296)/(1<<21)}while(0===e);return e},a.int32=n.next,a.quick=a,r&&("object"==typeof r&&o(r,n),a.state=function(){return o(n,{})}),a}a&&a.exports?a.exports=l:n.amdD&&n.amdO?void 0===(r=function(){return l}.call(t,n,t,a))||(a.exports=r):this.xor128=l}(0,e=n.nmd(e),n.amdD)},3618:function(e,t,n){var r;!function(e,a,s){function i(e){var t=this;t.next=function(){var e,n,r=t.w,a=t.X,s=t.i;return t.w=r=r+1640531527|0,n=a[s+34&127],e=a[s=s+1&127],n^=n<<13,e^=e<<17,n^=n>>>15,e^=e>>>12,n=a[s]=n^e,t.i=s,n+(r^r>>>16)|0},function(e,t){var n,r,a,s,i,o=[],l=128;for(t===(0|t)?(r=t,t=null):(t+="\0",r=0,l=Math.max(l,t.length)),a=0,s=-32;s>>15,r^=r<<4,r^=r>>>13,s>=0&&(i=i+1640531527|0,a=0==(n=o[127&s]^=r+i)?a+1:0);for(a>=128&&(o[127&(t&&t.length||0)]=-1),a=127,s=512;s>0;--s)r=o[a+34&127],n=o[a=a+1&127],r^=r<<13,n^=n<<17,r^=r>>>15,n^=n>>>12,o[a]=r^n;e.w=i,e.X=o,e.i=a}(t,e)}function o(e,t){return t.i=e.i,t.w=e.w,t.X=e.X.slice(),t}function l(e,t){null==e&&(e=+new Date);var n=new i(e),r=t&&t.state,a=function(){return(n.next()>>>0)/4294967296};return a.double=function(){do{var e=((n.next()>>>11)+(n.next()>>>0)/4294967296)/(1<<21)}while(0===e);return e},a.int32=n.next,a.quick=a,r&&(r.X&&o(r,n),a.state=function(){return o(n,{})}),a}a&&a.exports?a.exports=l:n.amdD&&n.amdO?void 0===(r=function(){return l}.call(t,n,t,a))||(a.exports=r):this.xor4096=l}(0,e=n.nmd(e),n.amdD)},2030:function(e,t,n){var r;!function(e,a,s){function i(e){var t=this;t.next=function(){var e,n,r=t.x,a=t.i;return e=r[a],n=(e^=e>>>7)^e<<24,n^=(e=r[a+1&7])^e>>>10,n^=(e=r[a+3&7])^e>>>3,n^=(e=r[a+4&7])^e<<7,e=r[a+7&7],n^=(e^=e<<13)^e<<9,r[a]=n,t.i=a+1&7,n},function(e,t){var n,r=[];if(t===(0|t))r[0]=t;else for(t=""+t,n=0;n0;--n)e.next()}(t,e)}function o(e,t){return t.x=e.x.slice(),t.i=e.i,t}function l(e,t){null==e&&(e=+new Date);var n=new i(e),r=t&&t.state,a=function(){return(n.next()>>>0)/4294967296};return a.double=function(){do{var e=((n.next()>>>11)+(n.next()>>>0)/4294967296)/(1<<21)}while(0===e);return e},a.int32=n.next,a.quick=a,r&&(r.x&&o(r,n),a.state=function(){return o(n,{})}),a}a&&a.exports?a.exports=l:n.amdD&&n.amdO?void 0===(r=function(){return l}.call(t,n,t,a))||(a.exports=r):this.xorshift7=l}(0,e=n.nmd(e),n.amdD)},801:function(e,t,n){var r;!function(e,a,s){function i(e){var t=this,n="";t.next=function(){var e=t.x^t.x>>>2;return t.x=t.y,t.y=t.z,t.z=t.w,t.w=t.v,(t.d=t.d+362437|0)+(t.v=t.v^t.v<<4^e^e<<1)|0},t.x=0,t.y=0,t.z=0,t.w=0,t.v=0,e===(0|e)?t.x=e:n+=e;for(var r=0;r>>4),t.next()}function o(e,t){return t.x=e.x,t.y=e.y,t.z=e.z,t.w=e.w,t.v=e.v,t.d=e.d,t}function l(e,t){var n=new i(e),r=t&&t.state,a=function(){return(n.next()>>>0)/4294967296};return a.double=function(){do{var e=((n.next()>>>11)+(n.next()>>>0)/4294967296)/(1<<21)}while(0===e);return e},a.int32=n.next,a.quick=a,r&&("object"==typeof r&&o(r,n),a.state=function(){return o(n,{})}),a}a&&a.exports?a.exports=l:n.amdD&&n.amdO?void 0===(r=function(){return l}.call(t,n,t,a))||(a.exports=r):this.xorwow=l}(0,e=n.nmd(e),n.amdD)},1971:(e,t,n)=>{var r;!function(a,s){var i,o=this,l=256,u=s.pow(l,6),c=s.pow(2,52),h=2*c,f=255;function d(e,t,n){var r=[],f=y(g((t=1==t?{entropy:!0}:t||{}).entropy?[e,b(a)]:null==e?function(){try{var e;return i&&(e=i.randomBytes)?e=e(l):(e=new Uint8Array(l),(o.crypto||o.msCrypto).getRandomValues(e)),b(e)}catch(e){var t=o.navigator,n=t&&t.plugins;return[+new Date,o,n,o.screen,b(a)]}}():e,3),r),d=new p(r),v=function(){for(var e=d.g(6),t=u,n=0;e=h;)e/=2,t/=2,n>>>=1;return(e+n)/t};return v.int32=function(){return 0|d.g(4)},v.quick=function(){return d.g(4)/4294967296},v.double=v,y(b(d.S),a),(t.pass||n||function(e,t,n,r){return r&&(r.S&&m(r,d),e.state=function(){return m(d,{})}),n?(s.random=e,t):e})(v,f,"global"in t?t.global:this==s,t.state)}function p(e){var t,n=e.length,r=this,a=0,s=r.i=r.j=0,i=r.S=[];for(n||(e=[n++]);a{"use strict";const r=n(1903),a=n(4658),s=n(5413),i=["","›"],o=e=>`${i[0]}[${e}m`;e.exports=(e,t,n)=>{const l=[...e.normalize()];n="number"==typeof n?n:l.length;let u=!1,c=null,h=0,f="";for(const[d,p]of l.entries()){let l=!1;if(i.includes(p)){u=!0;const t=/\d[^m]*/.exec(e.slice(d,d+18));c=39===t?null:t}else u&&"m"===p&&(u=!1,l=!0);if(u||l||++h,!a({exact:!0}).test(p)&&r(p.codePointAt())&&++h,h>t&&h<=n)f+=p;else if(h!==t||u||null===c||39===c){if(h>=n){null!==c&&(f+=o(s.codes.get(parseInt(c,10))||39));break}}else f+=o(c)}return f}},5413:(e,t,n)=>{"use strict";e=n.nmd(e);const r=n(6465),a=(e,t)=>function(){const n=e.apply(r,arguments);return`[${n+t}m`},s=(e,t)=>function(){const n=e.apply(r,arguments);return`[${38+t};5;${n}m`},i=(e,t)=>function(){const n=e.apply(r,arguments);return`[${38+t};2;${n[0]};${n[1]};${n[2]}m`};Object.defineProperty(e,"exports",{enumerable:!0,get:function(){const e=new Map,t={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],gray:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};t.color.grey=t.color.gray;for(const n of Object.keys(t)){const r=t[n];for(const n of Object.keys(r)){const a=r[n];t[n]={open:`[${a[0]}m`,close:`[${a[1]}m`},r[n]=t[n],e.set(a[0],a[1])}Object.defineProperty(t,n,{value:r,enumerable:!1}),Object.defineProperty(t,"codes",{value:e,enumerable:!1})}const n=e=>e,o=(e,t,n)=>[e,t,n];t.color.close="",t.bgColor.close="",t.color.ansi={ansi:a(n,0)},t.color.ansi256={ansi256:s(n,0)},t.color.ansi16m={rgb:i(o,0)},t.bgColor.ansi={ansi:a(n,10)},t.bgColor.ansi256={ansi256:s(n,10)},t.bgColor.ansi16m={rgb:i(o,10)};for(let e of Object.keys(r)){if("object"!=typeof r[e])continue;const n=r[e];"ansi16"===e&&(e="ansi"),"ansi16"in n&&(t.color.ansi[e]=a(n.ansi16,0),t.bgColor.ansi[e]=a(n.ansi16,10)),"ansi256"in n&&(t.color.ansi256[e]=s(n.ansi256,0),t.bgColor.ansi256[e]=s(n.ansi256,10)),"rgb"in n&&(t.color.ansi16m[e]=i(n.rgb,0),t.bgColor.ansi16m[e]=i(n.rgb,10))}return t}})},1025:(e,t,n)=>{var r=n(3645),a={};for(var s in r)r.hasOwnProperty(s)&&(a[r[s]]=s);var i=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var o in i)if(i.hasOwnProperty(o)){if(!("channels"in i[o]))throw new Error("missing channels property: "+o);if(!("labels"in i[o]))throw new Error("missing channel labels property: "+o);if(i[o].labels.length!==i[o].channels)throw new Error("channel and label counts mismatch: "+o);var l=i[o].channels,u=i[o].labels;delete i[o].channels,delete i[o].labels,Object.defineProperty(i[o],"channels",{value:l}),Object.defineProperty(i[o],"labels",{value:u})}i.rgb.hsl=function(e){var t,n,r=e[0]/255,a=e[1]/255,s=e[2]/255,i=Math.min(r,a,s),o=Math.max(r,a,s),l=o-i;return o===i?t=0:r===o?t=(a-s)/l:a===o?t=2+(s-r)/l:s===o&&(t=4+(r-a)/l),(t=Math.min(60*t,360))<0&&(t+=360),n=(i+o)/2,[t,100*(o===i?0:n<=.5?l/(o+i):l/(2-o-i)),100*n]},i.rgb.hsv=function(e){var t,n,r,a,s,i=e[0]/255,o=e[1]/255,l=e[2]/255,u=Math.max(i,o,l),c=u-Math.min(i,o,l),h=function(e){return(u-e)/6/c+.5};return 0===c?a=s=0:(s=c/u,t=h(i),n=h(o),r=h(l),i===u?a=r-n:o===u?a=1/3+t-r:l===u&&(a=2/3+n-t),a<0?a+=1:a>1&&(a-=1)),[360*a,100*s,100*u]},i.rgb.hwb=function(e){var t=e[0],n=e[1],r=e[2];return[i.rgb.hsl(e)[0],1/255*Math.min(t,Math.min(n,r))*100,100*(r=1-1/255*Math.max(t,Math.max(n,r)))]},i.rgb.cmyk=function(e){var t,n=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-n-(t=Math.min(1-n,1-r,1-a)))/(1-t)||0),100*((1-r-t)/(1-t)||0),100*((1-a-t)/(1-t)||0),100*t]},i.rgb.keyword=function(e){var t=a[e];if(t)return t;var n,s,i,o=1/0;for(var l in r)if(r.hasOwnProperty(l)){var u=(s=e,i=r[l],Math.pow(s[0]-i[0],2)+Math.pow(s[1]-i[1],2)+Math.pow(s[2]-i[2],2));u.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.3576*(n=n>.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*t+.7152*n+.0722*r),100*(.0193*t+.1192*n+.9505*r)]},i.rgb.lab=function(e){var t=i.rgb.xyz(e),n=t[0],r=t[1],a=t[2];return r/=100,a/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116)-16,500*(n-r),200*(r-(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116))]},i.hsl.rgb=function(e){var t,n,r,a,s,i=e[0]/360,o=e[1]/100,l=e[2]/100;if(0===o)return[s=255*l,s,s];t=2*l-(n=l<.5?l*(1+o):l+o-l*o),a=[0,0,0];for(var u=0;u<3;u++)(r=i+1/3*-(u-1))<0&&r++,r>1&&r--,s=6*r<1?t+6*(n-t)*r:2*r<1?n:3*r<2?t+(n-t)*(2/3-r)*6:t,a[u]=255*s;return a},i.hsl.hsv=function(e){var t=e[0],n=e[1]/100,r=e[2]/100,a=n,s=Math.max(r,.01);return n*=(r*=2)<=1?r:2-r,a*=s<=1?s:2-s,[t,100*(0===r?2*a/(s+a):2*n/(r+n)),(r+n)/2*100]},i.hsv.rgb=function(e){var t=e[0]/60,n=e[1]/100,r=e[2]/100,a=Math.floor(t)%6,s=t-Math.floor(t),i=255*r*(1-n),o=255*r*(1-n*s),l=255*r*(1-n*(1-s));switch(r*=255,a){case 0:return[r,l,i];case 1:return[o,r,i];case 2:return[i,r,l];case 3:return[i,o,r];case 4:return[l,i,r];case 5:return[r,i,o]}},i.hsv.hsl=function(e){var t,n,r,a=e[0],s=e[1]/100,i=e[2]/100,o=Math.max(i,.01);return r=(2-s)*i,n=s*o,[a,100*(n=(n/=(t=(2-s)*o)<=1?t:2-t)||0),100*(r/=2)]},i.hwb.rgb=function(e){var t,n,r,a,s,i,o,l=e[0]/360,u=e[1]/100,c=e[2]/100,h=u+c;switch(h>1&&(u/=h,c/=h),r=6*l-(t=Math.floor(6*l)),0!=(1&t)&&(r=1-r),a=u+r*((n=1-c)-u),t){default:case 6:case 0:s=n,i=a,o=u;break;case 1:s=a,i=n,o=u;break;case 2:s=u,i=n,o=a;break;case 3:s=u,i=a,o=n;break;case 4:s=a,i=u,o=n;break;case 5:s=n,i=u,o=a}return[255*s,255*i,255*o]},i.cmyk.rgb=function(e){var t=e[0]/100,n=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},i.xyz.rgb=function(e){var t,n,r,a=e[0]/100,s=e[1]/100,i=e[2]/100;return n=-.9689*a+1.8758*s+.0415*i,r=.0557*a+-.204*s+1.057*i,t=(t=3.2406*a+-1.5372*s+-.4986*i)>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,n=n>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(t=Math.min(Math.max(0,t),1)),255*(n=Math.min(Math.max(0,n),1)),255*(r=Math.min(Math.max(0,r),1))]},i.xyz.lab=function(e){var t=e[0],n=e[1],r=e[2];return n/=100,r/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(n=n>.008856?Math.pow(n,1/3):7.787*n+16/116)-16,500*(t-n),200*(n-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},i.lab.xyz=function(e){var t,n,r,a=e[0];t=e[1]/500+(n=(a+16)/116),r=n-e[2]/200;var s=Math.pow(n,3),i=Math.pow(t,3),o=Math.pow(r,3);return n=s>.008856?s:(n-16/116)/7.787,t=i>.008856?i:(t-16/116)/7.787,r=o>.008856?o:(r-16/116)/7.787,[t*=95.047,n*=100,r*=108.883]},i.lab.lch=function(e){var t,n=e[0],r=e[1],a=e[2];return(t=360*Math.atan2(a,r)/2/Math.PI)<0&&(t+=360),[n,Math.sqrt(r*r+a*a),t]},i.lch.lab=function(e){var t,n=e[0],r=e[1];return t=e[2]/360*2*Math.PI,[n,r*Math.cos(t),r*Math.sin(t)]},i.rgb.ansi16=function(e){var t=e[0],n=e[1],r=e[2],a=1 in arguments?arguments[1]:i.rgb.hsv(e)[2];if(0===(a=Math.round(a/50)))return 30;var s=30+(Math.round(r/255)<<2|Math.round(n/255)<<1|Math.round(t/255));return 2===a&&(s+=60),s},i.hsv.ansi16=function(e){return i.rgb.ansi16(i.hsv.rgb(e),e[2])},i.rgb.ansi256=function(e){var t=e[0],n=e[1],r=e[2];return t===n&&n===r?t<8?16:t>248?231:Math.round((t-8)/247*24)+232:16+36*Math.round(t/255*5)+6*Math.round(n/255*5)+Math.round(r/255*5)},i.ansi16.rgb=function(e){var t=e%10;if(0===t||7===t)return e>50&&(t+=3.5),[t=t/10.5*255,t,t];var n=.5*(1+~~(e>50));return[(1&t)*n*255,(t>>1&1)*n*255,(t>>2&1)*n*255]},i.ansi256.rgb=function(e){if(e>=232){var t=10*(e-232)+8;return[t,t,t]}var n;return e-=16,[Math.floor(e/36)/5*255,Math.floor((n=e%36)/6)/5*255,n%6/5*255]},i.rgb.hex=function(e){var t=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(t.length)+t},i.hex.rgb=function(e){var t=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!t)return[0,0,0];var n=t[0];3===t[0].length&&(n=n.split("").map((function(e){return e+e})).join(""));var r=parseInt(n,16);return[r>>16&255,r>>8&255,255&r]},i.rgb.hcg=function(e){var t,n=e[0]/255,r=e[1]/255,a=e[2]/255,s=Math.max(Math.max(n,r),a),i=Math.min(Math.min(n,r),a),o=s-i;return t=o<=0?0:s===n?(r-a)/o%6:s===r?2+(a-n)/o:4+(n-r)/o+4,t/=6,[360*(t%=1),100*o,100*(o<1?i/(1-o):0)]},i.hsl.hcg=function(e){var t,n=e[1]/100,r=e[2]/100,a=0;return(t=r<.5?2*n*r:2*n*(1-r))<1&&(a=(r-.5*t)/(1-t)),[e[0],100*t,100*a]},i.hsv.hcg=function(e){var t=e[1]/100,n=e[2]/100,r=t*n,a=0;return r<1&&(a=(n-r)/(1-r)),[e[0],100*r,100*a]},i.hcg.rgb=function(e){var t=e[0]/360,n=e[1]/100,r=e[2]/100;if(0===n)return[255*r,255*r,255*r];var a,s=[0,0,0],i=t%1*6,o=i%1,l=1-o;switch(Math.floor(i)){case 0:s[0]=1,s[1]=o,s[2]=0;break;case 1:s[0]=l,s[1]=1,s[2]=0;break;case 2:s[0]=0,s[1]=1,s[2]=o;break;case 3:s[0]=0,s[1]=l,s[2]=1;break;case 4:s[0]=o,s[1]=0,s[2]=1;break;default:s[0]=1,s[1]=0,s[2]=l}return a=(1-n)*r,[255*(n*s[0]+a),255*(n*s[1]+a),255*(n*s[2]+a)]},i.hcg.hsv=function(e){var t=e[1]/100,n=t+e[2]/100*(1-t),r=0;return n>0&&(r=t/n),[e[0],100*r,100*n]},i.hcg.hsl=function(e){var t=e[1]/100,n=e[2]/100*(1-t)+.5*t,r=0;return n>0&&n<.5?r=t/(2*n):n>=.5&&n<1&&(r=t/(2*(1-n))),[e[0],100*r,100*n]},i.hcg.hwb=function(e){var t=e[1]/100,n=t+e[2]/100*(1-t);return[e[0],100*(n-t),100*(1-n)]},i.hwb.hcg=function(e){var t=e[1]/100,n=1-e[2]/100,r=n-t,a=0;return r<1&&(a=(n-r)/(1-r)),[e[0],100*r,100*a]},i.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},i.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},i.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},i.gray.hsl=i.gray.hsv=function(e){return[0,0,e[0]]},i.gray.hwb=function(e){return[0,100,e[0]]},i.gray.cmyk=function(e){return[0,0,0,e[0]]},i.gray.lab=function(e){return[e[0],0,0]},i.gray.hex=function(e){var t=255&Math.round(e[0]/100*255),n=((t<<16)+(t<<8)+t).toString(16).toUpperCase();return"000000".substring(n.length)+n},i.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}},6465:(e,t,n)=>{var r=n(1025),a=n(3340),s={};Object.keys(r).forEach((function(e){s[e]={},Object.defineProperty(s[e],"channels",{value:r[e].channels}),Object.defineProperty(s[e],"labels",{value:r[e].labels});var t=a(e);Object.keys(t).forEach((function(n){var r=t[n];s[e][n]=function(e){var t=function(t){if(null==t)return t;arguments.length>1&&(t=Array.prototype.slice.call(arguments));var n=e(t);if("object"==typeof n)for(var r=n.length,a=0;a1&&(t=Array.prototype.slice.call(arguments)),e(t))};return"conversion"in e&&(t.conversion=e.conversion),t}(r)}))})),e.exports=s},3340:(e,t,n)=>{var r=n(1025);function a(e,t){return function(n){return t(e(n))}}function s(e,t){for(var n=[t[e].parent,e],s=r[t[e].parent][e],i=t[e].parent;t[i].parent;)n.unshift(t[i].parent),s=a(r[t[i].parent][i],s),i=t[i].parent;return s.conversion=n,s}e.exports=function(e){for(var t=function(e){var t=function(){for(var e={},t=Object.keys(r),n=t.length,a=0;a{"use strict";e.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}},6484:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=i(n(1763)),a=i(n(7037)),s=i(n(3393));function i(e){return e&&e.__esModule?e:{default:e}}const o=["left","right","center"];t.default=(e,t,n)=>{if(!(0,a.default)(e))throw new TypeError("Subject parameter value must be a string.");if(!(0,r.default)(t))throw new TypeError("Container width parameter value must be a number.");const i=(0,s.default)(e);if(i>t)throw new Error("Subject parameter value width cannot be greater than the container width.");if(!(0,a.default)(n))throw new TypeError("Alignment parameter value must be a string.");if(!o.includes(n))throw new Error("Alignment parameter value must be a known alignment parameter value (left, right, center).");if(0===i)return" ".repeat(t);const l=t-i;return"left"===n?((e,t)=>e+" ".repeat(t))(e,l):"right"===n?((e,t)=>" ".repeat(t)+e)(e,l):((e,t)=>{let n;return n=t/2,n%2==0?" ".repeat(n)+e+" ".repeat(n):(n=Math.floor(n)," ".repeat(n)+e+" ".repeat(n+1))})(e,l)}},6411:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=s(n(3393)),a=s(n(6484));function s(e){return e&&e.__esModule?e:{default:e}}t.default=(e,t)=>e.map((e=>e.map(((e,n)=>{const s=t.columns[n];return(0,r.default)(e)===s.width?e:(0,a.default)(e,s.width,s.alignment)}))))},8247:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=s(n(7037)),a=s(n(7810));function s(e){return e&&e.__esModule?e:{default:e}}t.default=(e,t,n=!1)=>{if(!(0,r.default)(e))throw new TypeError("Value must be a string.");if(!Number.isInteger(t))throw new TypeError("Column width must be an integer.");if(t<1)throw new Error("Column width must be greater than 0.");return(0,a.default)(e,t,n).length}},6078:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,a=(r=n(3393))&&r.__esModule?r:{default:r};t.default=e=>e.map((e=>Math.max(...e.split("\n").map((e=>(0,a.default)(e))))))},3819:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,a=(r=n(6078))&&r.__esModule?r:{default:r};t.default=e=>{if(!e[0])throw new Error("Dataset must have at least one row.");const t=new Array(e[0].length).fill(0);return e.forEach((e=>{(0,a.default)(e).forEach(((e,n)=>{t[n]{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=o(n(6162)),a=o(n(1584)),s=o(n(1763)),i=o(n(8247));function o(e){return e&&e.__esModule?e:{default:e}}t.default=(e,t)=>{const n=e[0].length,o=[];return e.forEach((e=>{const l=new Array(n).fill(1);e.forEach(((e,n)=>{if(!(0,s.default)(t.columns[n].width))throw new TypeError("column[index].width must be a number.");if(!(0,a.default)(t.columns[n].wrapWord))throw new TypeError("column[index].wrapWord must be a boolean.");l[n]=(0,i.default)(e,t.columns[n].width,t.columns[n].wrapWord)})),o.push((0,r.default)(l))})),o}},6955:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=m(n(6604)),a=m(n(2628)),s=m(n(691)),i=m(n(7884)),o=m(n(9045)),l=n(8417),u=m(n(9466)),c=m(n(8381)),h=m(n(1741)),f=m(n(6411)),d=m(n(4220)),p=m(n(5970));function m(e){return e&&e.__esModule?e:{default:e}}const g=(e,t)=>{let n;n=(0,u.default)(e),n=(0,c.default)(e,t);const r=(0,p.default)(n,t);return n=(0,h.default)(n,r,t),n=(0,f.default)(n,t),n=(0,d.default)(n,t),n};t.default=(e={})=>{const t=(0,i.default)(e),n=(0,a.default)((0,r.default)(t.columns,(e=>e.width+e.paddingLeft+e.paddingRight)));let u;return u=!0,{write:e=>{if(e.length!==t.columnCount)throw new Error("Row cell count does not match the config.columnCount.");return u?(u=!1,((e,t,n)=>{const r=g([e],n).map((e=>(0,o.default)(e,n.border))).join("");let a;a="",a+=(0,l.drawBorderTop)(t,n.border),a+=r,a+=(0,l.drawBorderBottom)(t,n.border),a=(0,s.default)(a),process.stdout.write(a)})(e,n,t)):((e,t,n)=>{const r=g([e],n).map((e=>(0,o.default)(e,n.border))).join("");let a="";const i=(0,l.drawBorderBottom)(t,n.border);"\n"!==i&&(a="\r"),a+=(0,l.drawBorderJoin)(t,n.border),a+=r,a+=i,a=(0,s.default)(a),process.stdout.write(a)})(e,n,t)}}}},8417:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.drawBorderTop=t.drawBorderJoin=t.drawBorderBottom=t.drawBorder=void 0;const n=(e,t)=>{const n=e.map((e=>t.body.repeat(e))).join(t.join);return t.left+n+t.right+"\n"};t.drawBorder=n,t.drawBorderTop=(e,t)=>{const r=n(e,{body:t.topBody,join:t.topJoin,left:t.topLeft,right:t.topRight});return"\n"===r?"":r},t.drawBorderJoin=(e,t)=>n(e,{body:t.joinBody,join:t.joinJoin,left:t.joinLeft,right:t.joinRight}),t.drawBorderBottom=(e,t)=>n(e,{body:t.bottomBody,join:t.bottomJoin,left:t.bottomLeft,right:t.bottomRight})},9045:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default=(e,t)=>t.bodyLeft+e.join(t.bodyJoin)+t.bodyRight+"\n"},9658:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,a=n(8417),s=(r=n(9045))&&r.__esModule?r:{default:r};t.default=(e,t,n,r,i,o)=>{let l,u,c;const h=e.length;return u=0,l="",i(u,h)&&(l+=(0,a.drawBorderTop)(n,t)),e.forEach(((e,f)=>{l+=(0,s.default)(e,t),c||(c=r[u],u++),c--,!o&&0===c&&f!==h-1&&i(u,h)&&(l+=(0,a.drawBorderJoin)(n,t))})),i(u,h)&&(l+=(0,a.drawBorderBottom)(n,t)),l}},9487:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default=e=>{if("honeywell"===e)return{topBody:"═",topJoin:"╤",topLeft:"╔",topRight:"╗",bottomBody:"═",bottomJoin:"╧",bottomLeft:"╚",bottomRight:"╝",bodyLeft:"║",bodyRight:"║",bodyJoin:"│",joinBody:"─",joinLeft:"╟",joinRight:"╢",joinJoin:"┼"};if("norc"===e)return{topBody:"─",topJoin:"┬",topLeft:"┌",topRight:"┐",bottomBody:"─",bottomJoin:"┴",bottomLeft:"└",bottomRight:"┘",bodyLeft:"│",bodyRight:"│",bodyJoin:"│",joinBody:"─",joinLeft:"├",joinRight:"┤",joinJoin:"┼"};if("ramac"===e)return{topBody:"-",topJoin:"+",topLeft:"+",topRight:"+",bottomBody:"-",bottomJoin:"+",bottomLeft:"+",bottomRight:"+",bodyLeft:"|",bodyRight:"|",bodyJoin:"|",joinBody:"-",joinLeft:"|",joinRight:"|",joinJoin:"|"};if("void"===e)return{topBody:"",topJoin:"",topLeft:"",topRight:"",bottomBody:"",bottomJoin:"",bottomLeft:"",bottomRight:"",bodyLeft:"",bodyRight:"",bodyJoin:"",joinBody:"",joinLeft:"",joinRight:"",joinJoin:""};throw new Error('Unknown border template "'+e+'".')}},107:(e,t,n)=>{"use strict";Object.defineProperty(t,"Kz",{enumerable:!0,get:function(){return r.default}});var r=a(n(3848));a(n(6955)),a(n(9487));function a(e){return e&&e.__esModule?e:{default:e}}},6482:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=u(n(361)),a=u(n(2353)),s=u(n(8913)),i=u(n(9487)),o=u(n(11)),l=u(n(3819));function u(e){return e&&e.__esModule?e:{default:e}}t.default=(e,t={})=>{(0,o.default)("config.json",t);const n=(0,r.default)(t);return n.border=((e={})=>Object.assign({},(0,i.default)("honeywell"),e))(n.border),n.columns=((e,t={},n={})=>{const r=(0,l.default)(e);return(0,s.default)(e[0].length,(e=>{(0,a.default)(t[e])&&(t[e]={}),t[e]=Object.assign({alignment:"left",paddingLeft:1,paddingRight:1,truncate:1/0,width:r[e],wrapWord:!1},n,t[e])})),t})(e,n.columns,n.columnDefault),n.drawHorizontalLine||(n.drawHorizontalLine=()=>!0),void 0===n.singleLine&&(n.singleLine=!1),n}},7884:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=l(n(361)),a=l(n(2353)),s=l(n(8913)),i=l(n(9487)),o=l(n(11));function l(e){return e&&e.__esModule?e:{default:e}}t.default=(e={})=>{(0,o.default)("streamConfig.json",e);const t=(0,r.default)(e);if(!t.columnDefault||!t.columnDefault.width)throw new Error("Must provide config.columnDefault.width when creating a stream.");if(!t.columnCount)throw new Error("Must provide config.columnCount.");return t.border=((e={})=>Object.assign({},(0,i.default)("honeywell"),e))(t.border),t.columns=((e,t={},n={})=>((0,s.default)(e,(e=>{(0,a.default)(t[e])&&(t[e]={}),t[e]=Object.assign({alignment:"left",paddingLeft:1,paddingRight:1,truncate:1/0,wrapWord:!1},n,t[e])})),t))(t.columnCount,t.columns,t.columnDefault),t}},1741:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=i(n(5564)),a=i(n(8913)),s=i(n(7810));function i(e){return e&&e.__esModule?e:{default:e}}t.default=(e,t,n)=>{const i=e[0].length,o=e.map(((e,r)=>{const o=(0,a.default)(t[r],(()=>new Array(i).fill("")));return e.forEach(((e,t)=>{(0,s.default)(e,n.columns[t].width,n.columns[t].wrapWord).forEach(((e,n)=>{o[n][t]=e}))})),o}));return(0,r.default)(o)}},4220:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default=(e,t)=>e.map((e=>e.map(((e,n)=>{const r=t.columns[n];return" ".repeat(r.paddingLeft)+e+" ".repeat(r.paddingRight)}))))},9466:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default=e=>e.map((e=>e.map(String)))},3848:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=d(n(9658)),a=d(n(6078)),s=d(n(6482)),i=d(n(5970)),o=d(n(1741)),l=d(n(6411)),u=d(n(4220)),c=d(n(3522)),h=d(n(9466)),f=d(n(8381));function d(e){return e&&e.__esModule?e:{default:e}}t.default=(e,t={})=>{let n;(0,c.default)(e),n=(0,h.default)(e);const d=(0,s.default)(n,t);n=(0,f.default)(e,d);const p=(0,i.default)(n,d);n=(0,o.default)(n,p,d),n=(0,l.default)(n,d),n=(0,u.default)(n,d);const m=(0,a.default)(n[0]);return(0,r.default)(n,d.border,m,p,d.drawHorizontalLine,d.singleLine)}},8381:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,a=(r=n(9138))&&r.__esModule?r:{default:r};t.default=(e,t)=>e.map((e=>e.map(((e,n)=>(0,a.default)(e,{length:t.columns[n].truncate})))))},11:(e,t,n)=>{"use strict";var r=n(4538),a=function(){new RegExp("^[0-9]+$");var e=[],t=(new RegExp("^[0-9]+$"),function t(r,a,s,i,o){var l=null,u=0;if(void 0===o&&(o=r),r&&"object"==typeof r&&!Array.isArray(r)){for(var c in r)if(!t.schema.properties.hasOwnProperty(c)){var h={keyword:"additionalProperties",dataPath:(a||"")+"",schemaPath:"#/additionalProperties",params:{additionalProperty:""+c},message:"should NOT have additional properties"};null===l?l=[h]:l.push(h),u++}void 0!==r.topBody&&(n(r.topBody,(a||"")+".topBody",r,"topBody",o)||(u=(l=null===l?n.errors:l.concat(n.errors)).length)),void 0!==r.topJoin&&(e[2](r.topJoin,(a||"")+".topJoin",r,"topJoin",o)||(u=(l=null===l?e[2].errors:l.concat(e[2].errors)).length)),void 0!==r.topLeft&&(e[2](r.topLeft,(a||"")+".topLeft",r,"topLeft",o)||(u=(l=null===l?e[2].errors:l.concat(e[2].errors)).length)),void 0!==r.topRight&&(e[2](r.topRight,(a||"")+".topRight",r,"topRight",o)||(u=(l=null===l?e[2].errors:l.concat(e[2].errors)).length)),void 0!==r.bottomBody&&(e[2](r.bottomBody,(a||"")+".bottomBody",r,"bottomBody",o)||(u=(l=null===l?e[2].errors:l.concat(e[2].errors)).length)),void 0!==r.bottomJoin&&(e[2](r.bottomJoin,(a||"")+".bottomJoin",r,"bottomJoin",o)||(u=(l=null===l?e[2].errors:l.concat(e[2].errors)).length)),void 0!==r.bottomLeft&&(e[2](r.bottomLeft,(a||"")+".bottomLeft",r,"bottomLeft",o)||(u=(l=null===l?e[2].errors:l.concat(e[2].errors)).length)),void 0!==r.bottomRight&&(e[2](r.bottomRight,(a||"")+".bottomRight",r,"bottomRight",o)||(u=(l=null===l?e[2].errors:l.concat(e[2].errors)).length)),void 0!==r.bodyLeft&&(e[2](r.bodyLeft,(a||"")+".bodyLeft",r,"bodyLeft",o)||(u=(l=null===l?e[2].errors:l.concat(e[2].errors)).length)),void 0!==r.bodyRight&&(e[2](r.bodyRight,(a||"")+".bodyRight",r,"bodyRight",o)||(u=(l=null===l?e[2].errors:l.concat(e[2].errors)).length)),void 0!==r.bodyJoin&&(e[2](r.bodyJoin,(a||"")+".bodyJoin",r,"bodyJoin",o)||(u=(l=null===l?e[2].errors:l.concat(e[2].errors)).length)),void 0!==r.joinBody&&(e[2](r.joinBody,(a||"")+".joinBody",r,"joinBody",o)||(u=(l=null===l?e[2].errors:l.concat(e[2].errors)).length)),void 0!==r.joinLeft&&(e[2](r.joinLeft,(a||"")+".joinLeft",r,"joinLeft",o)||(u=(l=null===l?e[2].errors:l.concat(e[2].errors)).length)),void 0!==r.joinRight&&(e[2](r.joinRight,(a||"")+".joinRight",r,"joinRight",o)||(u=(l=null===l?e[2].errors:l.concat(e[2].errors)).length)),void 0!==r.joinJoin&&(e[2](r.joinJoin,(a||"")+".joinJoin",r,"joinJoin",o)||(u=(l=null===l?e[2].errors:l.concat(e[2].errors)).length))}else h={keyword:"type",dataPath:(a||"")+"",schemaPath:"#/type",params:{type:"object"},message:"should be object"},null===l?l=[h]:l.push(h),u++;return t.errors=l,0===u});t.schema={type:"object",properties:{topBody:{$ref:"#/definitions/border"},topJoin:{$ref:"#/definitions/border"},topLeft:{$ref:"#/definitions/border"},topRight:{$ref:"#/definitions/border"},bottomBody:{$ref:"#/definitions/border"},bottomJoin:{$ref:"#/definitions/border"},bottomLeft:{$ref:"#/definitions/border"},bottomRight:{$ref:"#/definitions/border"},bodyLeft:{$ref:"#/definitions/border"},bodyRight:{$ref:"#/definitions/border"},bodyJoin:{$ref:"#/definitions/border"},joinBody:{$ref:"#/definitions/border"},joinLeft:{$ref:"#/definitions/border"},joinRight:{$ref:"#/definitions/border"},joinJoin:{$ref:"#/definitions/border"}},additionalProperties:!1},t.errors=null,e[1]=t;var n=(new RegExp("^[0-9]+$"),function e(t,n,r,a,s){var i=null,o=0;if("string"!=typeof t){var l={keyword:"type",dataPath:(n||"")+"",schemaPath:"#/type",params:{type:"string"},message:"should be string"};null===i?i=[l]:i.push(l),o++}return e.errors=i,0===o});n.schema={type:"string"},n.errors=null,e[2]=n;var a,s=(a=new RegExp("^[0-9]+$"),function e(t,n,r,s,o){var l=null,u=0;if(void 0===o&&(o=t),t&&"object"==typeof t&&!Array.isArray(t)){for(var c in t)if(!a.test(c)){var h={keyword:"additionalProperties",dataPath:(n||"")+"",schemaPath:"#/additionalProperties",params:{additionalProperty:""+c},message:"should NOT have additional properties"};null===l?l=[h]:l.push(h),u++}for(var c in t)a.test(c)&&(i(t[c],(n||"")+"['"+c+"']",t,c,o)||(u=(l=null===l?i.errors:l.concat(i.errors)).length))}else h={keyword:"type",dataPath:(n||"")+"",schemaPath:"#/type",params:{type:"object"},message:"should be object"},null===l?l=[h]:l.push(h),u++;return e.errors=l,0===u});s.schema={type:"object",patternProperties:{"^[0-9]+$":{$ref:"#/definitions/column"}},additionalProperties:!1},s.errors=null,e[3]=s;var i=(new RegExp("^[0-9]+$"),function e(t,n,a,s,i){var o=null,l=0;if(t&&"object"==typeof t&&!Array.isArray(t)){var u=!0;for(var c in t)if("alignment"!=c&&"width"!=c&&"wrapWord"!=c&&"truncate"!=c&&"paddingLeft"!=c&&"paddingRight"!=c){u=!1;var h={keyword:"additionalProperties",dataPath:(n||"")+"",schemaPath:"#/additionalProperties",params:{additionalProperty:""+c},message:"should NOT have additional properties"};null===o?o=[h]:o.push(h),l++}var f=t.alignment;if(void 0!==f){var d=l;"string"!=typeof f&&(h={keyword:"type",dataPath:(n||"")+".alignment",schemaPath:"#/properties/alignment/type",params:{type:"string"},message:"should be string"},null===o?o=[h]:o.push(h),l++);var p=e.schema.properties.alignment.enum;u=!1;for(var m=0;m{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default=e=>{if(!Array.isArray(e))throw new TypeError("Table data must be an array.");if(0===e.length)throw new Error("Table must define at least one row.");if(0===e[0].length)throw new Error("Table must define at least one column.");const t=e[0].length;var n=!0,r=!1,a=void 0;try{for(var s,i=e[Symbol.iterator]();!(n=(s=i.next()).done);n=!0){const e=s.value;if(!Array.isArray(e))throw new TypeError("Table row data must be an array.");if(e.length!==t)throw new Error("Table must have a consistent number of cells.");var o=!0,l=!1,u=void 0;try{for(var c,h=e[Symbol.iterator]();!(o=(c=h.next()).done);o=!0){const e=c.value;if(/[\u0001-\u0006\u0008-\u0009\u000B-\u001A]/.test(e))throw new Error("Table data must not contain control characters.")}}catch(e){l=!0,u=e}finally{try{o||null==h.return||h.return()}finally{if(l)throw u}}}}catch(e){r=!0,a=e}finally{try{n||null==i.return||i.return()}finally{if(r)throw a}}}},7810:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=s(n(6213)),a=s(n(8624));function s(e){return e&&e.__esModule?e:{default:e}}t.default=(e,t,n)=>{const s=e.split("\n");for(let e=0;e{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=s(n(5119)),a=s(n(3393));function s(e){return e&&e.__esModule?e:{default:e}}t.default=(e,t)=>{let n;n=e;const s=[];do{s.push((0,r.default)(n,0,t)),n=(0,r.default)(n,t).trim()}while((0,a.default)(n));return s}},8624:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=s(n(5119)),a=s(n(3393));function s(e){return e&&e.__esModule?e:{default:e}}t.default=(e,t)=>{let n;n=e;const s=[],i=new RegExp("(^.{1,"+t+"}(\\s+|$))|(^.{1,"+(t-1)+"}(\\\\|/|_|\\.|,|;|-))");do{let e;e=n.match(i),e?(e=e[0],n=(0,r.default)(n,(0,a.default)(e)),e=e.trim()):(e=(0,r.default)(n,0,t),n=(0,r.default)(n,t)),s.push(e)}while((0,a.default)(n));return s}},5113:e=>{"use strict";e.exports=e=>{e=Object.assign({onlyFirst:!1},e);const t=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(t,e.onlyFirst?void 0:"g")}},8175:e=>{"use strict";e.exports=function(){return/\uD83C\uDFF4(?:\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74)\uDB40\uDC7F|\u200D\u2620\uFE0F)|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC68(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDB0-\uDDB3])|(?:\uD83C[\uDFFB-\uDFFF])\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDB0-\uDDB3]))|\uD83D\uDC69\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDB0-\uDDB3])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2695\u2696\u2708]|\uD83D\uDC68(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83D\uDC69\u200D[\u2695\u2696\u2708])\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC68(?:\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDB0-\uDDB3])|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDD1-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDEEB\uDEEC\uDEF4-\uDEF9]|\uD83E[\uDD10-\uDD3A\uDD3C-\uDD3E\uDD40-\uDD45\uDD47-\uDD70\uDD73-\uDD76\uDD7A\uDD7C-\uDDA2\uDDB0-\uDDB9\uDDC0-\uDDC2\uDDD0-\uDDFF])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEF9]|\uD83E[\uDD10-\uDD3A\uDD3C-\uDD3E\uDD40-\uDD45\uDD47-\uDD70\uDD73-\uDD76\uDD7A\uDD7C-\uDDA2\uDDB0-\uDDB9\uDDC0-\uDDC2\uDDD0-\uDDFF])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC69\uDC6E\uDC70-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD18-\uDD1C\uDD1E\uDD1F\uDD26\uDD30-\uDD39\uDD3D\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDD1-\uDDDD])/g}},3393:(e,t,n)=>{"use strict";const r=n(3377),a=n(1903),s=n(8175)();e.exports=e=>{if("string"!=typeof(e=e.replace(s," "))||0===e.length)return 0;e=r(e);let t=0;for(let n=0;n=127&&r<=159||r>=768&&r<=879||(r>65535&&n++,t+=a(r)?2:1)}return t}},3377:(e,t,n)=>{"use strict";const r=n(5113),a=e=>"string"==typeof e?e.replace(r(),""):e;e.exports=a,e.exports.default=a},2287:function(e,t){"use strict";var n,r;void 0===(r="function"==typeof(n=function(){function e(){return!0}function t(){return!1}function n(){}return function r(){var a=[{name:"number",test:function(e){return"number"==typeof e}},{name:"string",test:function(e){return"string"==typeof e}},{name:"boolean",test:function(e){return"boolean"==typeof e}},{name:"Function",test:function(e){return"function"==typeof e}},{name:"Array",test:Array.isArray},{name:"Date",test:function(e){return e instanceof Date}},{name:"RegExp",test:function(e){return e instanceof RegExp}},{name:"Object",test:function(e){return"object"==typeof e&&null!==e&&e.constructor===Object}},{name:"null",test:function(e){return null===e}},{name:"undefined",test:function(e){return void 0===e}}],s={name:"any",test:e},i=[],o=[],l={types:a,conversions:o,ignore:i};function u(e){var t=L(l.types,(function(t){return t.name===e}));if(t)return t;if("any"===e)return s;var n=L(l.types,(function(t){return t.name.toLowerCase()===e.toLowerCase()}));throw new TypeError('Unknown type "'+e+'"'+(n?'. Did you mean "'+n.name+'"?':""))}function c(e){return e===s?999:l.types.indexOf(e)}function h(e){var t=L(l.types,(function(t){return t.test(e)}));if(t)return t.name;throw new TypeError("Value has unknown type. Value: "+e)}function f(e){return e.map((function(e){var t=e.types.map(w);return(e.restParam?"...":"")+t.join("|")})).join(",")}function d(e,t){var n=0===e.indexOf("..."),r=(n?e.length>3?e.slice(3):"any":e).split("|").map(F).filter(R).filter(T),a=function(e,t){var n={};return e.forEach((function(e){-1!==t.indexOf(e.from)||-1===t.indexOf(e.to)||n[e.from]||(n[e.from]=e)})),Object.keys(n).map((function(e){return n[e]}))}(t,r),s=r.map((function(e){var t=u(e);return{name:e,typeIndex:c(t),test:t.test,conversion:null,conversionIndex:-1}})),i=a.map((function(e){var n=u(e.from);return{name:e.from,typeIndex:c(n),test:n.test,conversion:e,conversionIndex:t.indexOf(e)}}));return{types:s.concat(i),restParam:n}}function p(e){var t=B(e);return!!t&&t.restParam}function m(e){return e.types.some((function(e){return null!=e.conversion}))}function g(t){if(t&&0!==t.types.length){if(1===t.types.length)return u(t.types[0].name).test;if(2===t.types.length){var n=u(t.types[0].name).test,r=u(t.types[1].name).test;return function(e){return n(e)||r(e)}}var a=t.types.map((function(e){return u(e.name).test}));return function(e){for(var t=0;t=s+1}}return 0===e.length?function(e){return 0===e.length}:1===e.length?(n=g(e[0]),function(e){return n(e[0])&&1===e.length}):2===e.length?(n=g(e[0]),r=g(e[1]),function(e){return n(e[0])&&r(e[1])&&2===e.length}):(t=e.map(g),function(e){for(var n=0;n0){var u=h(t[s]);return(r=new TypeError("Unexpected type of argument in function "+i+" (expected: "+a.join(" or ")+", actual: "+u+", index: "+s+")")).data={category:"wrongType",fn:i,index:s,actual:u,expected:a},r}}else o=l}var c=o.map((function(e){return p(e.params)?1/0:e.params.length}));if(t.lengthf?((r=new TypeError("Too many arguments in function "+i+" (expected: "+f+", actual: "+t.length+")")).data={category:"tooManyArgs",fn:i,index:t.length,expectedLength:f},r):((r=new TypeError('Arguments of type "'+t.join(", ")+'" do not match any of the defined signatures of function '+i+".")).data={category:"mismatch",actual:t.map(h)},r)}function E(e){for(var t=999,n=0;n=a:o?a>=s:a===s}(t,e)}));if(t)throw new TypeError('Conflicting signatures "'+f(t.params)+'" and "'+f(e.params)+'".');a.push(e)}));var s=z(a,(function(e){return(e?A(e.params,!1):[]).map((function(t){return{params:t,fn:e.fn}}))})).filter(O);s.sort(N);var i=s[0]&&s[0].params.length<=2&&!p(s[0].params),o=s[1]&&s[1].params.length<=2&&!p(s[1].params),u=s[2]&&s[2].params.length<=2&&!p(s[2].params),c=s[3]&&s[3].params.length<=2&&!p(s[3].params),h=s[4]&&s[4].params.length<=2&&!p(s[4].params),b=s[5]&&s[5].params.length<=2&&!p(s[5].params),w=i&&o&&u&&c&&h&&b,_=s.map((function(e){return y(e.params)})),x=i?g(s[0].params[0]):t,E=o?g(s[1].params[0]):t,C=u?g(s[2].params[0]):t,S=c?g(s[3].params[0]):t,D=h?g(s[4].params[0]):t,T=b?g(s[5].params[0]):t,R=i?g(s[0].params[1]):t,B=o?g(s[1].params[1]):t,W=u?g(s[2].params[1]):t,U=c?g(s[3].params[1]):t,V=h?g(s[4].params[1]):t,j=b?g(s[5].params[1]):t,H=s.map((function(e){return function(e,t){var n=t;if(e.some(m)){var r=p(e),a=e.map(I);n=function(){for(var e=[],n=r?arguments.length-1:arguments.length,s=0;s?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ ",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),t[620]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÇüéâäàąçêëèïîćÄĄĘęłôöĆûùŚÖܢ٥śƒŹŻóÓńŃźż¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ ",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),t[737]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρσςτυφχψ░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀ωάέήϊίόύϋώΆΈΉΊΌΎΏ±≥≤ΪΫ÷≈°∙·√ⁿ²■ ",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),t[850]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñѪº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈıÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýݯ´­±‗¾¶§÷¸°¨·¹³²■ ",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),t[852]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÇüéâäůćçłëŐőîŹÄĆÉĹĺôöĽľŚśÖÜŤťŁ×čáíóúĄąŽžĘ꬟Ⱥ«»░▒▓│┤ÁÂĚŞ╣║╗╝Żż┐└┴┬├─┼Ăă╚╔╩╦╠═╬¤đĐĎËďŇÍÎě┘┌█▄ŢŮ▀ÓßÔŃńňŠšŔÚŕŰýÝţ´­˝˛ˇ˘§÷¸°¨˙űŘř■ ",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),t[857]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÇüéâäàåçêëèïîıÄÅÉæÆôöòûùİÖÜø£ØŞşáíóúñÑĞ𿮬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ºªÊËÈ�ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµ�×ÚÛÙìÿ¯´­±�¾¶§÷¸°¨·¹³²■ ",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),t[861]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÇüéâäàåçêëèÐðÞÄÅÉæÆôöþûÝýÖÜø£Ø₧ƒáíóúÁÍÓÚ¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ ",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),t[865]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø₧ƒáíóúñѪº¿⌐¬½¼¡«¤░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ ",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),t[866]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№¤■ ",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),t[874]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€����…�����������‘’“”•–—�������� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),t[895]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ČüéďäĎŤčěĚĹÍľǪÄÁÉžŽôöÓůÚýÖÜŠĽÝŘťáíóúňŇŮÔšřŕŔ¼§«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ ",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),t[932]=function(){var e,t=[],n={},r=[];for(r[0]="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~���������������������������������。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚��������������������������������".split(""),e=0;e!=r[0].length;++e)65533!==r[0][e].charCodeAt(0)&&(n[r[0][e]]=0+e,t[0+e]=r[0][e]);for(r[129]="���������������������������������������������������������������� 、。,.・:;?!゛゜´`¨^ ̄_ヽヾゝゞ〃仝々〆〇ー―‐/\~∥|…‥‘’“”()〔〕[]{}〈〉《》「」『』【】+-±×�÷=≠<>≦≧∞∴♂♀°′″℃¥$¢£%#&*@§☆★○●◎◇◆□■△▲▽▼※〒→←↑↓〓�����������∈∋⊆⊇⊂⊃∪∩��������∧∨¬⇒⇔∀∃�����������∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬�������ʼn♯♭♪†‡¶����◯���".split(""),e=0;e!=r[129].length;++e)65533!==r[129][e].charCodeAt(0)&&(n[r[129][e]]=33024+e,t[33024+e]=r[129][e]);for(r[130]="�������������������������������������������������������������������������������0123456789�������ABCDEFGHIJKLMNOPQRSTUVWXYZ�������abcdefghijklmnopqrstuvwxyz����ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをん��������������".split(""),e=0;e!=r[130].length;++e)65533!==r[130][e].charCodeAt(0)&&(n[r[130][e]]=33280+e,t[33280+e]=r[130][e]);for(r[131]="����������������������������������������������������������������ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミ�ムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ��������ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ��������αβγδεζηθικλμνξοπρστυφχψω�����������������������������������������".split(""),e=0;e!=r[131].length;++e)65533!==r[131][e].charCodeAt(0)&&(n[r[131][e]]=33536+e,t[33536+e]=r[131][e]);for(r[132]="����������������������������������������������������������������АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ���������������абвгдеёжзийклмн�опрстуфхцчшщъыьэюя�������������─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂�����������������������������������������������������������������".split(""),e=0;e!=r[132].length;++e)65533!==r[132][e].charCodeAt(0)&&(n[r[132][e]]=33792+e,t[33792+e]=r[132][e]);for(r[135]="����������������������������������������������������������������①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ�㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡��������㍻�〝〟№㏍℡㊤㊥㊦㊧㊨㈱㈲㈹㍾㍽㍼≒≡∫∮∑√⊥∠∟⊿∵∩∪���������������������������������������������������������������������������������������������������".split(""),e=0;e!=r[135].length;++e)65533!==r[135][e].charCodeAt(0)&&(n[r[135][e]]=34560+e,t[34560+e]=r[135][e]);for(r[136]="���������������������������������������������������������������������������������������������������������������������������������������������������������������亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓圧斡扱宛姐虻飴絢綾鮎或粟袷安庵按暗案闇鞍杏以伊位依偉囲夷委威尉惟意慰易椅為畏異移維緯胃萎衣謂違遺医井亥域育郁磯一壱溢逸稲茨芋鰯允印咽員因姻引飲淫胤蔭���".split(""),e=0;e!=r[136].length;++e)65533!==r[136][e].charCodeAt(0)&&(n[r[136][e]]=34816+e,t[34816+e]=r[136][e]);for(r[137]="����������������������������������������������������������������院陰隠韻吋右宇烏羽迂雨卯鵜窺丑碓臼渦嘘唄欝蔚鰻姥厩浦瓜閏噂云運雲荏餌叡営嬰影映曳栄永泳洩瑛盈穎頴英衛詠鋭液疫益駅悦謁越閲榎厭円�園堰奄宴延怨掩援沿演炎焔煙燕猿縁艶苑薗遠鉛鴛塩於汚甥凹央奥往応押旺横欧殴王翁襖鴬鴎黄岡沖荻億屋憶臆桶牡乙俺卸恩温穏音下化仮何伽価佳加可嘉夏嫁家寡科暇果架歌河火珂禍禾稼箇花苛茄荷華菓蝦課嘩貨迦過霞蚊俄峨我牙画臥芽蛾賀雅餓駕介会解回塊壊廻快怪悔恢懐戒拐改���".split(""),e=0;e!=r[137].length;++e)65533!==r[137][e].charCodeAt(0)&&(n[r[137][e]]=35072+e,t[35072+e]=r[137][e]);for(r[138]="����������������������������������������������������������������魁晦械海灰界皆絵芥蟹開階貝凱劾外咳害崖慨概涯碍蓋街該鎧骸浬馨蛙垣柿蛎鈎劃嚇各廓拡撹格核殻獲確穫覚角赫較郭閣隔革学岳楽額顎掛笠樫�橿梶鰍潟割喝恰括活渇滑葛褐轄且鰹叶椛樺鞄株兜竃蒲釜鎌噛鴨栢茅萱粥刈苅瓦乾侃冠寒刊勘勧巻喚堪姦完官寛干幹患感慣憾換敢柑桓棺款歓汗漢澗潅環甘監看竿管簡緩缶翰肝艦莞観諌貫還鑑間閑関陥韓館舘丸含岸巌玩癌眼岩翫贋雁頑顔願企伎危喜器基奇嬉寄岐希幾忌揮机旗既期棋棄���".split(""),e=0;e!=r[138].length;++e)65533!==r[138][e].charCodeAt(0)&&(n[r[138][e]]=35328+e,t[35328+e]=r[138][e]);for(r[139]="����������������������������������������������������������������機帰毅気汽畿祈季稀紀徽規記貴起軌輝飢騎鬼亀偽儀妓宜戯技擬欺犠疑祇義蟻誼議掬菊鞠吉吃喫桔橘詰砧杵黍却客脚虐逆丘久仇休及吸宮弓急救�朽求汲泣灸球究窮笈級糾給旧牛去居巨拒拠挙渠虚許距鋸漁禦魚亨享京供侠僑兇競共凶協匡卿叫喬境峡強彊怯恐恭挟教橋況狂狭矯胸脅興蕎郷鏡響饗驚仰凝尭暁業局曲極玉桐粁僅勤均巾錦斤欣欽琴禁禽筋緊芹菌衿襟謹近金吟銀九倶句区狗玖矩苦躯駆駈駒具愚虞喰空偶寓遇隅串櫛釧屑屈���".split(""),e=0;e!=r[139].length;++e)65533!==r[139][e].charCodeAt(0)&&(n[r[139][e]]=35584+e,t[35584+e]=r[139][e]);for(r[140]="����������������������������������������������������������������掘窟沓靴轡窪熊隈粂栗繰桑鍬勲君薫訓群軍郡卦袈祁係傾刑兄啓圭珪型契形径恵慶慧憩掲携敬景桂渓畦稽系経継繋罫茎荊蛍計詣警軽頚鶏芸迎鯨�劇戟撃激隙桁傑欠決潔穴結血訣月件倹倦健兼券剣喧圏堅嫌建憲懸拳捲検権牽犬献研硯絹県肩見謙賢軒遣鍵険顕験鹸元原厳幻弦減源玄現絃舷言諺限乎個古呼固姑孤己庫弧戸故枯湖狐糊袴股胡菰虎誇跨鈷雇顧鼓五互伍午呉吾娯後御悟梧檎瑚碁語誤護醐乞鯉交佼侯候倖光公功効勾厚口向���".split(""),e=0;e!=r[140].length;++e)65533!==r[140][e].charCodeAt(0)&&(n[r[140][e]]=35840+e,t[35840+e]=r[140][e]);for(r[141]="����������������������������������������������������������������后喉坑垢好孔孝宏工巧巷幸広庚康弘恒慌抗拘控攻昂晃更杭校梗構江洪浩港溝甲皇硬稿糠紅紘絞綱耕考肯肱腔膏航荒行衡講貢購郊酵鉱砿鋼閤降�項香高鴻剛劫号合壕拷濠豪轟麹克刻告国穀酷鵠黒獄漉腰甑忽惚骨狛込此頃今困坤墾婚恨懇昏昆根梱混痕紺艮魂些佐叉唆嵯左差査沙瑳砂詐鎖裟坐座挫債催再最哉塞妻宰彩才採栽歳済災采犀砕砦祭斎細菜裁載際剤在材罪財冴坂阪堺榊肴咲崎埼碕鷺作削咋搾昨朔柵窄策索錯桜鮭笹匙冊刷���".split(""),e=0;e!=r[141].length;++e)65533!==r[141][e].charCodeAt(0)&&(n[r[141][e]]=36096+e,t[36096+e]=r[141][e]);for(r[142]="����������������������������������������������������������������察拶撮擦札殺薩雑皐鯖捌錆鮫皿晒三傘参山惨撒散桟燦珊産算纂蚕讃賛酸餐斬暫残仕仔伺使刺司史嗣四士始姉姿子屍市師志思指支孜斯施旨枝止�死氏獅祉私糸紙紫肢脂至視詞詩試誌諮資賜雌飼歯事似侍児字寺慈持時次滋治爾璽痔磁示而耳自蒔辞汐鹿式識鴫竺軸宍雫七叱執失嫉室悉湿漆疾質実蔀篠偲柴芝屡蕊縞舎写射捨赦斜煮社紗者謝車遮蛇邪借勺尺杓灼爵酌釈錫若寂弱惹主取守手朱殊狩珠種腫趣酒首儒受呪寿授樹綬需囚収周���".split(""),e=0;e!=r[142].length;++e)65533!==r[142][e].charCodeAt(0)&&(n[r[142][e]]=36352+e,t[36352+e]=r[142][e]);for(r[143]="����������������������������������������������������������������宗就州修愁拾洲秀秋終繍習臭舟蒐衆襲讐蹴輯週酋酬集醜什住充十従戎柔汁渋獣縦重銃叔夙宿淑祝縮粛塾熟出術述俊峻春瞬竣舜駿准循旬楯殉淳�準潤盾純巡遵醇順処初所暑曙渚庶緒署書薯藷諸助叙女序徐恕鋤除傷償勝匠升召哨商唱嘗奨妾娼宵将小少尚庄床廠彰承抄招掌捷昇昌昭晶松梢樟樵沼消渉湘焼焦照症省硝礁祥称章笑粧紹肖菖蒋蕉衝裳訟証詔詳象賞醤鉦鍾鐘障鞘上丈丞乗冗剰城場壌嬢常情擾条杖浄状畳穣蒸譲醸錠嘱埴飾���".split(""),e=0;e!=r[143].length;++e)65533!==r[143][e].charCodeAt(0)&&(n[r[143][e]]=36608+e,t[36608+e]=r[143][e]);for(r[144]="����������������������������������������������������������������拭植殖燭織職色触食蝕辱尻伸信侵唇娠寝審心慎振新晋森榛浸深申疹真神秦紳臣芯薪親診身辛進針震人仁刃塵壬尋甚尽腎訊迅陣靭笥諏須酢図厨�逗吹垂帥推水炊睡粋翠衰遂酔錐錘随瑞髄崇嵩数枢趨雛据杉椙菅頗雀裾澄摺寸世瀬畝是凄制勢姓征性成政整星晴棲栖正清牲生盛精聖声製西誠誓請逝醒青静斉税脆隻席惜戚斥昔析石積籍績脊責赤跡蹟碩切拙接摂折設窃節説雪絶舌蝉仙先千占宣専尖川戦扇撰栓栴泉浅洗染潜煎煽旋穿箭線���".split(""),e=0;e!=r[144].length;++e)65533!==r[144][e].charCodeAt(0)&&(n[r[144][e]]=36864+e,t[36864+e]=r[144][e]);for(r[145]="����������������������������������������������������������������繊羨腺舛船薦詮賎践選遷銭銑閃鮮前善漸然全禅繕膳糎噌塑岨措曾曽楚狙疏疎礎祖租粗素組蘇訴阻遡鼠僧創双叢倉喪壮奏爽宋層匝惣想捜掃挿掻�操早曹巣槍槽漕燥争痩相窓糟総綜聡草荘葬蒼藻装走送遭鎗霜騒像増憎臓蔵贈造促側則即息捉束測足速俗属賊族続卒袖其揃存孫尊損村遜他多太汰詑唾堕妥惰打柁舵楕陀駄騨体堆対耐岱帯待怠態戴替泰滞胎腿苔袋貸退逮隊黛鯛代台大第醍題鷹滝瀧卓啄宅托択拓沢濯琢託鐸濁諾茸凧蛸只���".split(""),e=0;e!=r[145].length;++e)65533!==r[145][e].charCodeAt(0)&&(n[r[145][e]]=37120+e,t[37120+e]=r[145][e]);for(r[146]="����������������������������������������������������������������叩但達辰奪脱巽竪辿棚谷狸鱈樽誰丹単嘆坦担探旦歎淡湛炭短端箪綻耽胆蛋誕鍛団壇弾断暖檀段男談値知地弛恥智池痴稚置致蜘遅馳築畜竹筑蓄�逐秩窒茶嫡着中仲宙忠抽昼柱注虫衷註酎鋳駐樗瀦猪苧著貯丁兆凋喋寵帖帳庁弔張彫徴懲挑暢朝潮牒町眺聴脹腸蝶調諜超跳銚長頂鳥勅捗直朕沈珍賃鎮陳津墜椎槌追鎚痛通塚栂掴槻佃漬柘辻蔦綴鍔椿潰坪壷嬬紬爪吊釣鶴亭低停偵剃貞呈堤定帝底庭廷弟悌抵挺提梯汀碇禎程締艇訂諦蹄逓���".split(""),e=0;e!=r[146].length;++e)65533!==r[146][e].charCodeAt(0)&&(n[r[146][e]]=37376+e,t[37376+e]=r[146][e]);for(r[147]="����������������������������������������������������������������邸鄭釘鼎泥摘擢敵滴的笛適鏑溺哲徹撤轍迭鉄典填天展店添纏甜貼転顛点伝殿澱田電兎吐堵塗妬屠徒斗杜渡登菟賭途都鍍砥砺努度土奴怒倒党冬�凍刀唐塔塘套宕島嶋悼投搭東桃梼棟盗淘湯涛灯燈当痘祷等答筒糖統到董蕩藤討謄豆踏逃透鐙陶頭騰闘働動同堂導憧撞洞瞳童胴萄道銅峠鴇匿得徳涜特督禿篤毒独読栃橡凸突椴届鳶苫寅酉瀞噸屯惇敦沌豚遁頓呑曇鈍奈那内乍凪薙謎灘捺鍋楢馴縄畷南楠軟難汝二尼弐迩匂賑肉虹廿日乳入���".split(""),e=0;e!=r[147].length;++e)65533!==r[147][e].charCodeAt(0)&&(n[r[147][e]]=37632+e,t[37632+e]=r[147][e]);for(r[148]="����������������������������������������������������������������如尿韮任妊忍認濡禰祢寧葱猫熱年念捻撚燃粘乃廼之埜嚢悩濃納能脳膿農覗蚤巴把播覇杷波派琶破婆罵芭馬俳廃拝排敗杯盃牌背肺輩配倍培媒梅�楳煤狽買売賠陪這蝿秤矧萩伯剥博拍柏泊白箔粕舶薄迫曝漠爆縛莫駁麦函箱硲箸肇筈櫨幡肌畑畠八鉢溌発醗髪伐罰抜筏閥鳩噺塙蛤隼伴判半反叛帆搬斑板氾汎版犯班畔繁般藩販範釆煩頒飯挽晩番盤磐蕃蛮匪卑否妃庇彼悲扉批披斐比泌疲皮碑秘緋罷肥被誹費避非飛樋簸備尾微枇毘琵眉美���".split(""),e=0;e!=r[148].length;++e)65533!==r[148][e].charCodeAt(0)&&(n[r[148][e]]=37888+e,t[37888+e]=r[148][e]);for(r[149]="����������������������������������������������������������������鼻柊稗匹疋髭彦膝菱肘弼必畢筆逼桧姫媛紐百謬俵彪標氷漂瓢票表評豹廟描病秒苗錨鋲蒜蛭鰭品彬斌浜瀕貧賓頻敏瓶不付埠夫婦富冨布府怖扶敷�斧普浮父符腐膚芙譜負賦赴阜附侮撫武舞葡蕪部封楓風葺蕗伏副復幅服福腹複覆淵弗払沸仏物鮒分吻噴墳憤扮焚奮粉糞紛雰文聞丙併兵塀幣平弊柄並蔽閉陛米頁僻壁癖碧別瞥蔑箆偏変片篇編辺返遍便勉娩弁鞭保舗鋪圃捕歩甫補輔穂募墓慕戊暮母簿菩倣俸包呆報奉宝峰峯崩庖抱捧放方朋���".split(""),e=0;e!=r[149].length;++e)65533!==r[149][e].charCodeAt(0)&&(n[r[149][e]]=38144+e,t[38144+e]=r[149][e]);for(r[150]="����������������������������������������������������������������法泡烹砲縫胞芳萌蓬蜂褒訪豊邦鋒飽鳳鵬乏亡傍剖坊妨帽忘忙房暴望某棒冒紡肪膨謀貌貿鉾防吠頬北僕卜墨撲朴牧睦穆釦勃没殆堀幌奔本翻凡盆�摩磨魔麻埋妹昧枚毎哩槙幕膜枕鮪柾鱒桝亦俣又抹末沫迄侭繭麿万慢満漫蔓味未魅巳箕岬密蜜湊蓑稔脈妙粍民眠務夢無牟矛霧鵡椋婿娘冥名命明盟迷銘鳴姪牝滅免棉綿緬面麺摸模茂妄孟毛猛盲網耗蒙儲木黙目杢勿餅尤戻籾貰問悶紋門匁也冶夜爺耶野弥矢厄役約薬訳躍靖柳薮鑓愉愈油癒���".split(""),e=0;e!=r[150].length;++e)65533!==r[150][e].charCodeAt(0)&&(n[r[150][e]]=38400+e,t[38400+e]=r[150][e]);for(r[151]="����������������������������������������������������������������諭輸唯佑優勇友宥幽悠憂揖有柚湧涌猶猷由祐裕誘遊邑郵雄融夕予余与誉輿預傭幼妖容庸揚揺擁曜楊様洋溶熔用窯羊耀葉蓉要謡踊遥陽養慾抑欲�沃浴翌翼淀羅螺裸来莱頼雷洛絡落酪乱卵嵐欄濫藍蘭覧利吏履李梨理璃痢裏裡里離陸律率立葎掠略劉流溜琉留硫粒隆竜龍侶慮旅虜了亮僚両凌寮料梁涼猟療瞭稜糧良諒遼量陵領力緑倫厘林淋燐琳臨輪隣鱗麟瑠塁涙累類令伶例冷励嶺怜玲礼苓鈴隷零霊麗齢暦歴列劣烈裂廉恋憐漣煉簾練聯���".split(""),e=0;e!=r[151].length;++e)65533!==r[151][e].charCodeAt(0)&&(n[r[151][e]]=38656+e,t[38656+e]=r[151][e]);for(r[152]="����������������������������������������������������������������蓮連錬呂魯櫓炉賂路露労婁廊弄朗楼榔浪漏牢狼篭老聾蝋郎六麓禄肋録論倭和話歪賄脇惑枠鷲亙亘鰐詫藁蕨椀湾碗腕��������������������������������������������弌丐丕个丱丶丼丿乂乖乘亂亅豫亊舒弍于亞亟亠亢亰亳亶从仍仄仆仂仗仞仭仟价伉佚估佛佝佗佇佶侈侏侘佻佩佰侑佯來侖儘俔俟俎俘俛俑俚俐俤俥倚倨倔倪倥倅伜俶倡倩倬俾俯們倆偃假會偕偐偈做偖偬偸傀傚傅傴傲���".split(""),e=0;e!=r[152].length;++e)65533!==r[152][e].charCodeAt(0)&&(n[r[152][e]]=38912+e,t[38912+e]=r[152][e]);for(r[153]="����������������������������������������������������������������僉僊傳僂僖僞僥僭僣僮價僵儉儁儂儖儕儔儚儡儺儷儼儻儿兀兒兌兔兢竸兩兪兮冀冂囘册冉冏冑冓冕冖冤冦冢冩冪冫决冱冲冰况冽凅凉凛几處凩凭�凰凵凾刄刋刔刎刧刪刮刳刹剏剄剋剌剞剔剪剴剩剳剿剽劍劔劒剱劈劑辨辧劬劭劼劵勁勍勗勞勣勦飭勠勳勵勸勹匆匈甸匍匐匏匕匚匣匯匱匳匸區卆卅丗卉卍凖卞卩卮夘卻卷厂厖厠厦厥厮厰厶參簒雙叟曼燮叮叨叭叺吁吽呀听吭吼吮吶吩吝呎咏呵咎呟呱呷呰咒呻咀呶咄咐咆哇咢咸咥咬哄哈咨���".split(""),e=0;e!=r[153].length;++e)65533!==r[153][e].charCodeAt(0)&&(n[r[153][e]]=39168+e,t[39168+e]=r[153][e]);for(r[154]="����������������������������������������������������������������咫哂咤咾咼哘哥哦唏唔哽哮哭哺哢唹啀啣啌售啜啅啖啗唸唳啝喙喀咯喊喟啻啾喘喞單啼喃喩喇喨嗚嗅嗟嗄嗜嗤嗔嘔嗷嘖嗾嗽嘛嗹噎噐營嘴嘶嘲嘸�噫噤嘯噬噪嚆嚀嚊嚠嚔嚏嚥嚮嚶嚴囂嚼囁囃囀囈囎囑囓囗囮囹圀囿圄圉圈國圍圓團圖嗇圜圦圷圸坎圻址坏坩埀垈坡坿垉垓垠垳垤垪垰埃埆埔埒埓堊埖埣堋堙堝塲堡塢塋塰毀塒堽塹墅墹墟墫墺壞墻墸墮壅壓壑壗壙壘壥壜壤壟壯壺壹壻壼壽夂夊夐夛梦夥夬夭夲夸夾竒奕奐奎奚奘奢奠奧奬奩���".split(""),e=0;e!=r[154].length;++e)65533!==r[154][e].charCodeAt(0)&&(n[r[154][e]]=39424+e,t[39424+e]=r[154][e]);for(r[155]="����������������������������������������������������������������奸妁妝佞侫妣妲姆姨姜妍姙姚娥娟娑娜娉娚婀婬婉娵娶婢婪媚媼媾嫋嫂媽嫣嫗嫦嫩嫖嫺嫻嬌嬋嬖嬲嫐嬪嬶嬾孃孅孀孑孕孚孛孥孩孰孳孵學斈孺宀�它宦宸寃寇寉寔寐寤實寢寞寥寫寰寶寳尅將專對尓尠尢尨尸尹屁屆屎屓屐屏孱屬屮乢屶屹岌岑岔妛岫岻岶岼岷峅岾峇峙峩峽峺峭嶌峪崋崕崗嵜崟崛崑崔崢崚崙崘嵌嵒嵎嵋嵬嵳嵶嶇嶄嶂嶢嶝嶬嶮嶽嶐嶷嶼巉巍巓巒巖巛巫已巵帋帚帙帑帛帶帷幄幃幀幎幗幔幟幢幤幇幵并幺麼广庠廁廂廈廐廏���".split(""),e=0;e!=r[155].length;++e)65533!==r[155][e].charCodeAt(0)&&(n[r[155][e]]=39680+e,t[39680+e]=r[155][e]);for(r[156]="����������������������������������������������������������������廖廣廝廚廛廢廡廨廩廬廱廳廰廴廸廾弃弉彝彜弋弑弖弩弭弸彁彈彌彎弯彑彖彗彙彡彭彳彷徃徂彿徊很徑徇從徙徘徠徨徭徼忖忻忤忸忱忝悳忿怡恠�怙怐怩怎怱怛怕怫怦怏怺恚恁恪恷恟恊恆恍恣恃恤恂恬恫恙悁悍惧悃悚悄悛悖悗悒悧悋惡悸惠惓悴忰悽惆悵惘慍愕愆惶惷愀惴惺愃愡惻惱愍愎慇愾愨愧慊愿愼愬愴愽慂慄慳慷慘慙慚慫慴慯慥慱慟慝慓慵憙憖憇憬憔憚憊憑憫憮懌懊應懷懈懃懆憺懋罹懍懦懣懶懺懴懿懽懼懾戀戈戉戍戌戔戛���".split(""),e=0;e!=r[156].length;++e)65533!==r[156][e].charCodeAt(0)&&(n[r[156][e]]=39936+e,t[39936+e]=r[156][e]);for(r[157]="����������������������������������������������������������������戞戡截戮戰戲戳扁扎扞扣扛扠扨扼抂抉找抒抓抖拔抃抔拗拑抻拏拿拆擔拈拜拌拊拂拇抛拉挌拮拱挧挂挈拯拵捐挾捍搜捏掖掎掀掫捶掣掏掉掟掵捫�捩掾揩揀揆揣揉插揶揄搖搴搆搓搦搶攝搗搨搏摧摯摶摎攪撕撓撥撩撈撼據擒擅擇撻擘擂擱擧舉擠擡抬擣擯攬擶擴擲擺攀擽攘攜攅攤攣攫攴攵攷收攸畋效敖敕敍敘敞敝敲數斂斃變斛斟斫斷旃旆旁旄旌旒旛旙无旡旱杲昊昃旻杳昵昶昴昜晏晄晉晁晞晝晤晧晨晟晢晰暃暈暎暉暄暘暝曁暹曉暾暼���".split(""),e=0;e!=r[157].length;++e)65533!==r[157][e].charCodeAt(0)&&(n[r[157][e]]=40192+e,t[40192+e]=r[157][e]);for(r[158]="����������������������������������������������������������������曄暸曖曚曠昿曦曩曰曵曷朏朖朞朦朧霸朮朿朶杁朸朷杆杞杠杙杣杤枉杰枩杼杪枌枋枦枡枅枷柯枴柬枳柩枸柤柞柝柢柮枹柎柆柧檜栞框栩桀桍栲桎�梳栫桙档桷桿梟梏梭梔條梛梃檮梹桴梵梠梺椏梍桾椁棊椈棘椢椦棡椌棍棔棧棕椶椒椄棗棣椥棹棠棯椨椪椚椣椡棆楹楷楜楸楫楔楾楮椹楴椽楙椰楡楞楝榁楪榲榮槐榿槁槓榾槎寨槊槝榻槃榧樮榑榠榜榕榴槞槨樂樛槿權槹槲槧樅榱樞槭樔槫樊樒櫁樣樓橄樌橲樶橸橇橢橙橦橈樸樢檐檍檠檄檢檣���".split(""),e=0;e!=r[158].length;++e)65533!==r[158][e].charCodeAt(0)&&(n[r[158][e]]=40448+e,t[40448+e]=r[158][e]);for(r[159]="����������������������������������������������������������������檗蘗檻櫃櫂檸檳檬櫞櫑櫟檪櫚櫪櫻欅蘖櫺欒欖鬱欟欸欷盜欹飮歇歃歉歐歙歔歛歟歡歸歹歿殀殄殃殍殘殕殞殤殪殫殯殲殱殳殷殼毆毋毓毟毬毫毳毯�麾氈氓气氛氤氣汞汕汢汪沂沍沚沁沛汾汨汳沒沐泄泱泓沽泗泅泝沮沱沾沺泛泯泙泪洟衍洶洫洽洸洙洵洳洒洌浣涓浤浚浹浙涎涕濤涅淹渕渊涵淇淦涸淆淬淞淌淨淒淅淺淙淤淕淪淮渭湮渮渙湲湟渾渣湫渫湶湍渟湃渺湎渤滿渝游溂溪溘滉溷滓溽溯滄溲滔滕溏溥滂溟潁漑灌滬滸滾漿滲漱滯漲滌���".split(""),e=0;e!=r[159].length;++e)65533!==r[159][e].charCodeAt(0)&&(n[r[159][e]]=40704+e,t[40704+e]=r[159][e]);for(r[224]="����������������������������������������������������������������漾漓滷澆潺潸澁澀潯潛濳潭澂潼潘澎澑濂潦澳澣澡澤澹濆澪濟濕濬濔濘濱濮濛瀉瀋濺瀑瀁瀏濾瀛瀚潴瀝瀘瀟瀰瀾瀲灑灣炙炒炯烱炬炸炳炮烟烋烝�烙焉烽焜焙煥煕熈煦煢煌煖煬熏燻熄熕熨熬燗熹熾燒燉燔燎燠燬燧燵燼燹燿爍爐爛爨爭爬爰爲爻爼爿牀牆牋牘牴牾犂犁犇犒犖犢犧犹犲狃狆狄狎狒狢狠狡狹狷倏猗猊猜猖猝猴猯猩猥猾獎獏默獗獪獨獰獸獵獻獺珈玳珎玻珀珥珮珞璢琅瑯琥珸琲琺瑕琿瑟瑙瑁瑜瑩瑰瑣瑪瑶瑾璋璞璧瓊瓏瓔珱���".split(""),e=0;e!=r[224].length;++e)65533!==r[224][e].charCodeAt(0)&&(n[r[224][e]]=57344+e,t[57344+e]=r[224][e]);for(r[225]="����������������������������������������������������������������瓠瓣瓧瓩瓮瓲瓰瓱瓸瓷甄甃甅甌甎甍甕甓甞甦甬甼畄畍畊畉畛畆畚畩畤畧畫畭畸當疆疇畴疊疉疂疔疚疝疥疣痂疳痃疵疽疸疼疱痍痊痒痙痣痞痾痿�痼瘁痰痺痲痳瘋瘍瘉瘟瘧瘠瘡瘢瘤瘴瘰瘻癇癈癆癜癘癡癢癨癩癪癧癬癰癲癶癸發皀皃皈皋皎皖皓皙皚皰皴皸皹皺盂盍盖盒盞盡盥盧盪蘯盻眈眇眄眩眤眞眥眦眛眷眸睇睚睨睫睛睥睿睾睹瞎瞋瞑瞠瞞瞰瞶瞹瞿瞼瞽瞻矇矍矗矚矜矣矮矼砌砒礦砠礪硅碎硴碆硼碚碌碣碵碪碯磑磆磋磔碾碼磅磊磬���".split(""),e=0;e!=r[225].length;++e)65533!==r[225][e].charCodeAt(0)&&(n[r[225][e]]=57600+e,t[57600+e]=r[225][e]);for(r[226]="����������������������������������������������������������������磧磚磽磴礇礒礑礙礬礫祀祠祗祟祚祕祓祺祿禊禝禧齋禪禮禳禹禺秉秕秧秬秡秣稈稍稘稙稠稟禀稱稻稾稷穃穗穉穡穢穩龝穰穹穽窈窗窕窘窖窩竈窰�窶竅竄窿邃竇竊竍竏竕竓站竚竝竡竢竦竭竰笂笏笊笆笳笘笙笞笵笨笶筐筺笄筍笋筌筅筵筥筴筧筰筱筬筮箝箘箟箍箜箚箋箒箏筝箙篋篁篌篏箴篆篝篩簑簔篦篥籠簀簇簓篳篷簗簍篶簣簧簪簟簷簫簽籌籃籔籏籀籐籘籟籤籖籥籬籵粃粐粤粭粢粫粡粨粳粲粱粮粹粽糀糅糂糘糒糜糢鬻糯糲糴糶糺紆���".split(""),e=0;e!=r[226].length;++e)65533!==r[226][e].charCodeAt(0)&&(n[r[226][e]]=57856+e,t[57856+e]=r[226][e]);for(r[227]="����������������������������������������������������������������紂紜紕紊絅絋紮紲紿紵絆絳絖絎絲絨絮絏絣經綉絛綏絽綛綺綮綣綵緇綽綫總綢綯緜綸綟綰緘緝緤緞緻緲緡縅縊縣縡縒縱縟縉縋縢繆繦縻縵縹繃縷�縲縺繧繝繖繞繙繚繹繪繩繼繻纃緕繽辮繿纈纉續纒纐纓纔纖纎纛纜缸缺罅罌罍罎罐网罕罔罘罟罠罨罩罧罸羂羆羃羈羇羌羔羞羝羚羣羯羲羹羮羶羸譱翅翆翊翕翔翡翦翩翳翹飜耆耄耋耒耘耙耜耡耨耿耻聊聆聒聘聚聟聢聨聳聲聰聶聹聽聿肄肆肅肛肓肚肭冐肬胛胥胙胝胄胚胖脉胯胱脛脩脣脯腋���".split(""),e=0;e!=r[227].length;++e)65533!==r[227][e].charCodeAt(0)&&(n[r[227][e]]=58112+e,t[58112+e]=r[227][e]);for(r[228]="����������������������������������������������������������������隋腆脾腓腑胼腱腮腥腦腴膃膈膊膀膂膠膕膤膣腟膓膩膰膵膾膸膽臀臂膺臉臍臑臙臘臈臚臟臠臧臺臻臾舁舂舅與舊舍舐舖舩舫舸舳艀艙艘艝艚艟艤�艢艨艪艫舮艱艷艸艾芍芒芫芟芻芬苡苣苟苒苴苳苺莓范苻苹苞茆苜茉苙茵茴茖茲茱荀茹荐荅茯茫茗茘莅莚莪莟莢莖茣莎莇莊荼莵荳荵莠莉莨菴萓菫菎菽萃菘萋菁菷萇菠菲萍萢萠莽萸蔆菻葭萪萼蕚蒄葷葫蒭葮蒂葩葆萬葯葹萵蓊葢蒹蒿蒟蓙蓍蒻蓚蓐蓁蓆蓖蒡蔡蓿蓴蔗蔘蔬蔟蔕蔔蓼蕀蕣蕘蕈���".split(""),e=0;e!=r[228].length;++e)65533!==r[228][e].charCodeAt(0)&&(n[r[228][e]]=58368+e,t[58368+e]=r[228][e]);for(r[229]="����������������������������������������������������������������蕁蘂蕋蕕薀薤薈薑薊薨蕭薔薛藪薇薜蕷蕾薐藉薺藏薹藐藕藝藥藜藹蘊蘓蘋藾藺蘆蘢蘚蘰蘿虍乕虔號虧虱蚓蚣蚩蚪蚋蚌蚶蚯蛄蛆蚰蛉蠣蚫蛔蛞蛩蛬�蛟蛛蛯蜒蜆蜈蜀蜃蛻蜑蜉蜍蛹蜊蜴蜿蜷蜻蜥蜩蜚蝠蝟蝸蝌蝎蝴蝗蝨蝮蝙蝓蝣蝪蠅螢螟螂螯蟋螽蟀蟐雖螫蟄螳蟇蟆螻蟯蟲蟠蠏蠍蟾蟶蟷蠎蟒蠑蠖蠕蠢蠡蠱蠶蠹蠧蠻衄衂衒衙衞衢衫袁衾袞衵衽袵衲袂袗袒袮袙袢袍袤袰袿袱裃裄裔裘裙裝裹褂裼裴裨裲褄褌褊褓襃褞褥褪褫襁襄褻褶褸襌褝襠襞���".split(""),e=0;e!=r[229].length;++e)65533!==r[229][e].charCodeAt(0)&&(n[r[229][e]]=58624+e,t[58624+e]=r[229][e]);for(r[230]="����������������������������������������������������������������襦襤襭襪襯襴襷襾覃覈覊覓覘覡覩覦覬覯覲覺覽覿觀觚觜觝觧觴觸訃訖訐訌訛訝訥訶詁詛詒詆詈詼詭詬詢誅誂誄誨誡誑誥誦誚誣諄諍諂諚諫諳諧�諤諱謔諠諢諷諞諛謌謇謚諡謖謐謗謠謳鞫謦謫謾謨譁譌譏譎證譖譛譚譫譟譬譯譴譽讀讌讎讒讓讖讙讚谺豁谿豈豌豎豐豕豢豬豸豺貂貉貅貊貍貎貔豼貘戝貭貪貽貲貳貮貶賈賁賤賣賚賽賺賻贄贅贊贇贏贍贐齎贓賍贔贖赧赭赱赳趁趙跂趾趺跏跚跖跌跛跋跪跫跟跣跼踈踉跿踝踞踐踟蹂踵踰踴蹊���".split(""),e=0;e!=r[230].length;++e)65533!==r[230][e].charCodeAt(0)&&(n[r[230][e]]=58880+e,t[58880+e]=r[230][e]);for(r[231]="����������������������������������������������������������������蹇蹉蹌蹐蹈蹙蹤蹠踪蹣蹕蹶蹲蹼躁躇躅躄躋躊躓躑躔躙躪躡躬躰軆躱躾軅軈軋軛軣軼軻軫軾輊輅輕輒輙輓輜輟輛輌輦輳輻輹轅轂輾轌轉轆轎轗轜�轢轣轤辜辟辣辭辯辷迚迥迢迪迯邇迴逅迹迺逑逕逡逍逞逖逋逧逶逵逹迸遏遐遑遒逎遉逾遖遘遞遨遯遶隨遲邂遽邁邀邊邉邏邨邯邱邵郢郤扈郛鄂鄒鄙鄲鄰酊酖酘酣酥酩酳酲醋醉醂醢醫醯醪醵醴醺釀釁釉釋釐釖釟釡釛釼釵釶鈞釿鈔鈬鈕鈑鉞鉗鉅鉉鉤鉈銕鈿鉋鉐銜銖銓銛鉚鋏銹銷鋩錏鋺鍄錮���".split(""),e=0;e!=r[231].length;++e)65533!==r[231][e].charCodeAt(0)&&(n[r[231][e]]=59136+e,t[59136+e]=r[231][e]);for(r[232]="����������������������������������������������������������������錙錢錚錣錺錵錻鍜鍠鍼鍮鍖鎰鎬鎭鎔鎹鏖鏗鏨鏥鏘鏃鏝鏐鏈鏤鐚鐔鐓鐃鐇鐐鐶鐫鐵鐡鐺鑁鑒鑄鑛鑠鑢鑞鑪鈩鑰鑵鑷鑽鑚鑼鑾钁鑿閂閇閊閔閖閘閙�閠閨閧閭閼閻閹閾闊濶闃闍闌闕闔闖關闡闥闢阡阨阮阯陂陌陏陋陷陜陞陝陟陦陲陬隍隘隕隗險隧隱隲隰隴隶隸隹雎雋雉雍襍雜霍雕雹霄霆霈霓霎霑霏霖霙霤霪霰霹霽霾靄靆靈靂靉靜靠靤靦靨勒靫靱靹鞅靼鞁靺鞆鞋鞏鞐鞜鞨鞦鞣鞳鞴韃韆韈韋韜韭齏韲竟韶韵頏頌頸頤頡頷頽顆顏顋顫顯顰���".split(""),e=0;e!=r[232].length;++e)65533!==r[232][e].charCodeAt(0)&&(n[r[232][e]]=59392+e,t[59392+e]=r[232][e]);for(r[233]="����������������������������������������������������������������顱顴顳颪颯颱颶飄飃飆飩飫餃餉餒餔餘餡餝餞餤餠餬餮餽餾饂饉饅饐饋饑饒饌饕馗馘馥馭馮馼駟駛駝駘駑駭駮駱駲駻駸騁騏騅駢騙騫騷驅驂驀驃�騾驕驍驛驗驟驢驥驤驩驫驪骭骰骼髀髏髑髓體髞髟髢髣髦髯髫髮髴髱髷髻鬆鬘鬚鬟鬢鬣鬥鬧鬨鬩鬪鬮鬯鬲魄魃魏魍魎魑魘魴鮓鮃鮑鮖鮗鮟鮠鮨鮴鯀鯊鮹鯆鯏鯑鯒鯣鯢鯤鯔鯡鰺鯲鯱鯰鰕鰔鰉鰓鰌鰆鰈鰒鰊鰄鰮鰛鰥鰤鰡鰰鱇鰲鱆鰾鱚鱠鱧鱶鱸鳧鳬鳰鴉鴈鳫鴃鴆鴪鴦鶯鴣鴟鵄鴕鴒鵁鴿鴾鵆鵈���".split(""),e=0;e!=r[233].length;++e)65533!==r[233][e].charCodeAt(0)&&(n[r[233][e]]=59648+e,t[59648+e]=r[233][e]);for(r[234]="����������������������������������������������������������������鵝鵞鵤鵑鵐鵙鵲鶉鶇鶫鵯鵺鶚鶤鶩鶲鷄鷁鶻鶸鶺鷆鷏鷂鷙鷓鷸鷦鷭鷯鷽鸚鸛鸞鹵鹹鹽麁麈麋麌麒麕麑麝麥麩麸麪麭靡黌黎黏黐黔黜點黝黠黥黨黯�黴黶黷黹黻黼黽鼇鼈皷鼕鼡鼬鼾齊齒齔齣齟齠齡齦齧齬齪齷齲齶龕龜龠堯槇遙瑤凜熙�������������������������������������������������������������������������������������������".split(""),e=0;e!=r[234].length;++e)65533!==r[234][e].charCodeAt(0)&&(n[r[234][e]]=59904+e,t[59904+e]=r[234][e]);for(r[237]="����������������������������������������������������������������纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏�塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱���".split(""),e=0;e!=r[237].length;++e)65533!==r[237][e].charCodeAt(0)&&(n[r[237][e]]=60672+e,t[60672+e]=r[237][e]);for(r[238]="����������������������������������������������������������������犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙�蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑��ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹ¬¦'"���".split(""),e=0;e!=r[238].length;++e)65533!==r[238][e].charCodeAt(0)&&(n[r[238][e]]=60928+e,t[60928+e]=r[238][e]);for(r[250]="����������������������������������������������������������������ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ¬¦'"㈱№℡∵纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊�兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯���".split(""),e=0;e!=r[250].length;++e)65533!==r[250][e].charCodeAt(0)&&(n[r[250][e]]=64e3+e,t[64e3+e]=r[250][e]);for(r[251]="����������������������������������������������������������������涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神�祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙���".split(""),e=0;e!=r[251].length;++e)65533!==r[251][e].charCodeAt(0)&&(n[r[251][e]]=64256+e,t[64256+e]=r[251][e]);for(r[252]="����������������������������������������������������������������髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������".split(""),e=0;e!=r[252].length;++e)65533!==r[252][e].charCodeAt(0)&&(n[r[252][e]]=64512+e,t[64512+e]=r[252][e]);return{enc:n,dec:t}}(),t[936]=function(){var e,t=[],n={},r=[];for(r[0]="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�������������������������������������������������������������������������������������������������������������������������������".split(""),e=0;e!=r[0].length;++e)65533!==r[0][e].charCodeAt(0)&&(n[r[0][e]]=0+e,t[0+e]=r[0][e]);for(r[129]="����������������������������������������������������������������丂丄丅丆丏丒丗丟丠両丣並丩丮丯丱丳丵丷丼乀乁乂乄乆乊乑乕乗乚乛乢乣乤乥乧乨乪乫乬乭乮乯乲乴乵乶乷乸乹乺乻乼乽乿亀亁亂亃亄亅亇亊�亐亖亗亙亜亝亞亣亪亯亰亱亴亶亷亸亹亼亽亾仈仌仏仐仒仚仛仜仠仢仦仧仩仭仮仯仱仴仸仹仺仼仾伀伂伃伄伅伆伇伈伋伌伒伓伔伕伖伜伝伡伣伨伩伬伭伮伱伳伵伷伹伻伾伿佀佁佂佄佅佇佈佉佊佋佌佒佔佖佡佢佦佨佪佫佭佮佱佲併佷佸佹佺佽侀侁侂侅來侇侊侌侎侐侒侓侕侖侘侙侚侜侞侟価侢�".split(""),e=0;e!=r[129].length;++e)65533!==r[129][e].charCodeAt(0)&&(n[r[129][e]]=33024+e,t[33024+e]=r[129][e]);for(r[130]="����������������������������������������������������������������侤侫侭侰侱侲侳侴侶侷侸侹侺侻侼侽侾俀俁係俆俇俈俉俋俌俍俒俓俔俕俖俙俛俠俢俤俥俧俫俬俰俲俴俵俶俷俹俻俼俽俿倀倁倂倃倄倅倆倇倈倉倊�個倎倐們倓倕倖倗倛倝倞倠倢倣値倧倫倯倰倱倲倳倴倵倶倷倸倹倻倽倿偀偁偂偄偅偆偉偊偋偍偐偑偒偓偔偖偗偘偙偛偝偞偟偠偡偢偣偤偦偧偨偩偪偫偭偮偯偰偱偲偳側偵偸偹偺偼偽傁傂傃傄傆傇傉傊傋傌傎傏傐傑傒傓傔傕傖傗傘備傚傛傜傝傞傟傠傡傢傤傦傪傫傭傮傯傰傱傳傴債傶傷傸傹傼�".split(""),e=0;e!=r[130].length;++e)65533!==r[130][e].charCodeAt(0)&&(n[r[130][e]]=33280+e,t[33280+e]=r[130][e]);for(r[131]="����������������������������������������������������������������傽傾傿僀僁僂僃僄僅僆僇僈僉僊僋僌働僎僐僑僒僓僔僕僗僘僙僛僜僝僞僟僠僡僢僣僤僥僨僩僪僫僯僰僱僲僴僶僷僸價僺僼僽僾僿儀儁儂儃億儅儈�儉儊儌儍儎儏儐儑儓儔儕儖儗儘儙儚儛儜儝儞償儠儢儣儤儥儦儧儨儩優儫儬儭儮儯儰儱儲儳儴儵儶儷儸儹儺儻儼儽儾兂兇兊兌兎兏児兒兓兗兘兙兛兝兞兟兠兡兣兤兦內兩兪兯兲兺兾兿冃冄円冇冊冋冎冏冐冑冓冔冘冚冝冞冟冡冣冦冧冨冩冪冭冮冴冸冹冺冾冿凁凂凃凅凈凊凍凎凐凒凓凔凕凖凗�".split(""),e=0;e!=r[131].length;++e)65533!==r[131][e].charCodeAt(0)&&(n[r[131][e]]=33536+e,t[33536+e]=r[131][e]);for(r[132]="����������������������������������������������������������������凘凙凚凜凞凟凢凣凥処凧凨凩凪凬凮凱凲凴凷凾刄刅刉刋刌刏刐刓刔刕刜刞刟刡刢刣別刦刧刪刬刯刱刲刴刵刼刾剄剅剆則剈剉剋剎剏剒剓剕剗剘�剙剚剛剝剟剠剢剣剤剦剨剫剬剭剮剰剱剳剴創剶剷剸剹剺剻剼剾劀劃劄劅劆劇劉劊劋劌劍劎劏劑劒劔劕劖劗劘劙劚劜劤劥劦劧劮劯劰労劵劶劷劸効劺劻劼劽勀勁勂勄勅勆勈勊勌勍勎勏勑勓勔動勗務勚勛勜勝勞勠勡勢勣勥勦勧勨勩勪勫勬勭勮勯勱勲勳勴勵勶勷勸勻勼勽匁匂匃匄匇匉匊匋匌匎�".split(""),e=0;e!=r[132].length;++e)65533!==r[132][e].charCodeAt(0)&&(n[r[132][e]]=33792+e,t[33792+e]=r[132][e]);for(r[133]="����������������������������������������������������������������匑匒匓匔匘匛匜匞匟匢匤匥匧匨匩匫匬匭匯匰匱匲匳匴匵匶匷匸匼匽區卂卄卆卋卌卍卐協単卙卛卝卥卨卪卬卭卲卶卹卻卼卽卾厀厁厃厇厈厊厎厏�厐厑厒厓厔厖厗厙厛厜厞厠厡厤厧厪厫厬厭厯厰厱厲厳厴厵厷厸厹厺厼厽厾叀參叄叅叆叇収叏叐叒叓叕叚叜叝叞叡叢叧叴叺叾叿吀吂吅吇吋吔吘吙吚吜吢吤吥吪吰吳吶吷吺吽吿呁呂呄呅呇呉呌呍呎呏呑呚呝呞呟呠呡呣呥呧呩呪呫呬呭呮呯呰呴呹呺呾呿咁咃咅咇咈咉咊咍咑咓咗咘咜咞咟咠咡�".split(""),e=0;e!=r[133].length;++e)65533!==r[133][e].charCodeAt(0)&&(n[r[133][e]]=34048+e,t[34048+e]=r[133][e]);for(r[134]="����������������������������������������������������������������咢咥咮咰咲咵咶咷咹咺咼咾哃哅哊哋哖哘哛哠員哢哣哤哫哬哯哰哱哴哵哶哷哸哹哻哾唀唂唃唄唅唈唊唋唌唍唎唒唓唕唖唗唘唙唚唜唝唞唟唡唥唦�唨唩唫唭唲唴唵唶唸唹唺唻唽啀啂啅啇啈啋啌啍啎問啑啒啓啔啗啘啙啚啛啝啞啟啠啢啣啨啩啫啯啰啱啲啳啴啹啺啽啿喅喆喌喍喎喐喒喓喕喖喗喚喛喞喠喡喢喣喤喥喦喨喩喪喫喬喭單喯喰喲喴営喸喺喼喿嗀嗁嗂嗃嗆嗇嗈嗊嗋嗎嗏嗐嗕嗗嗘嗙嗚嗛嗞嗠嗢嗧嗩嗭嗮嗰嗱嗴嗶嗸嗹嗺嗻嗼嗿嘂嘃嘄嘅�".split(""),e=0;e!=r[134].length;++e)65533!==r[134][e].charCodeAt(0)&&(n[r[134][e]]=34304+e,t[34304+e]=r[134][e]);for(r[135]="����������������������������������������������������������������嘆嘇嘊嘋嘍嘐嘑嘒嘓嘔嘕嘖嘗嘙嘚嘜嘝嘠嘡嘢嘥嘦嘨嘩嘪嘫嘮嘯嘰嘳嘵嘷嘸嘺嘼嘽嘾噀噁噂噃噄噅噆噇噈噉噊噋噏噐噑噒噓噕噖噚噛噝噞噟噠噡�噣噥噦噧噭噮噯噰噲噳噴噵噷噸噹噺噽噾噿嚀嚁嚂嚃嚄嚇嚈嚉嚊嚋嚌嚍嚐嚑嚒嚔嚕嚖嚗嚘嚙嚚嚛嚜嚝嚞嚟嚠嚡嚢嚤嚥嚦嚧嚨嚩嚪嚫嚬嚭嚮嚰嚱嚲嚳嚴嚵嚶嚸嚹嚺嚻嚽嚾嚿囀囁囂囃囄囅囆囇囈囉囋囌囍囎囏囐囑囒囓囕囖囘囙囜団囥囦囧囨囩囪囬囮囯囲図囶囷囸囻囼圀圁圂圅圇國圌圍圎圏圐圑�".split(""),e=0;e!=r[135].length;++e)65533!==r[135][e].charCodeAt(0)&&(n[r[135][e]]=34560+e,t[34560+e]=r[135][e]);for(r[136]="����������������������������������������������������������������園圓圔圕圖圗團圙圚圛圝圞圠圡圢圤圥圦圧圫圱圲圴圵圶圷圸圼圽圿坁坃坄坅坆坈坉坋坒坓坔坕坖坘坙坢坣坥坧坬坮坰坱坲坴坵坸坹坺坽坾坿垀�垁垇垈垉垊垍垎垏垐垑垔垕垖垗垘垙垚垜垝垞垟垥垨垪垬垯垰垱垳垵垶垷垹垺垻垼垽垾垿埀埁埄埅埆埇埈埉埊埌埍埐埑埓埖埗埛埜埞埡埢埣埥埦埧埨埩埪埫埬埮埰埱埲埳埵埶執埻埼埾埿堁堃堄堅堈堉堊堌堎堏堐堒堓堔堖堗堘堚堛堜堝堟堢堣堥堦堧堨堩堫堬堭堮堯報堲堳場堶堷堸堹堺堻堼堽�".split(""),e=0;e!=r[136].length;++e)65533!==r[136][e].charCodeAt(0)&&(n[r[136][e]]=34816+e,t[34816+e]=r[136][e]);for(r[137]="����������������������������������������������������������������堾堿塀塁塂塃塅塆塇塈塉塊塋塎塏塐塒塓塕塖塗塙塚塛塜塝塟塠塡塢塣塤塦塧塨塩塪塭塮塯塰塱塲塳塴塵塶塷塸塹塺塻塼塽塿墂墄墆墇墈墊墋墌�墍墎墏墐墑墔墕墖増墘墛墜墝墠墡墢墣墤墥墦墧墪墫墬墭墮墯墰墱墲墳墴墵墶墷墸墹墺墻墽墾墿壀壂壃壄壆壇壈壉壊壋壌壍壎壏壐壒壓壔壖壗壘壙壚壛壜壝壞壟壠壡壢壣壥壦壧壨壩壪壭壯壱売壴壵壷壸壺壻壼壽壾壿夀夁夃夅夆夈変夊夋夌夎夐夑夒夓夗夘夛夝夞夠夡夢夣夦夨夬夰夲夳夵夶夻�".split(""),e=0;e!=r[137].length;++e)65533!==r[137][e].charCodeAt(0)&&(n[r[137][e]]=35072+e,t[35072+e]=r[137][e]);for(r[138]="����������������������������������������������������������������夽夾夿奀奃奅奆奊奌奍奐奒奓奙奛奜奝奞奟奡奣奤奦奧奨奩奪奫奬奭奮奯奰奱奲奵奷奺奻奼奾奿妀妅妉妋妌妎妏妐妑妔妕妘妚妛妜妝妟妠妡妢妦�妧妬妭妰妱妳妴妵妶妷妸妺妼妽妿姀姁姂姃姄姅姇姈姉姌姍姎姏姕姖姙姛姞姟姠姡姢姤姦姧姩姪姫姭姮姯姰姱姲姳姴姵姶姷姸姺姼姽姾娀娂娊娋娍娎娏娐娒娔娕娖娗娙娚娛娝娞娡娢娤娦娧娨娪娫娬娭娮娯娰娳娵娷娸娹娺娻娽娾娿婁婂婃婄婅婇婈婋婌婍婎婏婐婑婒婓婔婖婗婘婙婛婜婝婞婟婠�".split(""),e=0;e!=r[138].length;++e)65533!==r[138][e].charCodeAt(0)&&(n[r[138][e]]=35328+e,t[35328+e]=r[138][e]);for(r[139]="����������������������������������������������������������������婡婣婤婥婦婨婩婫婬婭婮婯婰婱婲婳婸婹婻婼婽婾媀媁媂媃媄媅媆媇媈媉媊媋媌媍媎媏媐媑媓媔媕媖媗媘媙媜媝媞媟媠媡媢媣媤媥媦媧媨媩媫媬�媭媮媯媰媱媴媶媷媹媺媻媼媽媿嫀嫃嫄嫅嫆嫇嫈嫊嫋嫍嫎嫏嫐嫑嫓嫕嫗嫙嫚嫛嫝嫞嫟嫢嫤嫥嫧嫨嫪嫬嫭嫮嫯嫰嫲嫳嫴嫵嫶嫷嫸嫹嫺嫻嫼嫽嫾嫿嬀嬁嬂嬃嬄嬅嬆嬇嬈嬊嬋嬌嬍嬎嬏嬐嬑嬒嬓嬔嬕嬘嬙嬚嬛嬜嬝嬞嬟嬠嬡嬢嬣嬤嬥嬦嬧嬨嬩嬪嬫嬬嬭嬮嬯嬰嬱嬳嬵嬶嬸嬹嬺嬻嬼嬽嬾嬿孁孂孃孄孅孆孇�".split(""),e=0;e!=r[139].length;++e)65533!==r[139][e].charCodeAt(0)&&(n[r[139][e]]=35584+e,t[35584+e]=r[139][e]);for(r[140]="����������������������������������������������������������������孈孉孊孋孌孍孎孏孒孖孞孠孡孧孨孫孭孮孯孲孴孶孷學孹孻孼孾孿宂宆宊宍宎宐宑宒宔宖実宧宨宩宬宭宮宯宱宲宷宺宻宼寀寁寃寈寉寊寋寍寎寏�寑寔寕寖寗寘寙寚寛寜寠寢寣實寧審寪寫寬寭寯寱寲寳寴寵寶寷寽対尀専尃尅將專尋尌對導尐尒尓尗尙尛尞尟尠尡尣尦尨尩尪尫尭尮尯尰尲尳尵尶尷屃屄屆屇屌屍屒屓屔屖屗屘屚屛屜屝屟屢層屧屨屩屪屫屬屭屰屲屳屴屵屶屷屸屻屼屽屾岀岃岄岅岆岇岉岊岋岎岏岒岓岕岝岞岟岠岡岤岥岦岧岨�".split(""),e=0;e!=r[140].length;++e)65533!==r[140][e].charCodeAt(0)&&(n[r[140][e]]=35840+e,t[35840+e]=r[140][e]);for(r[141]="����������������������������������������������������������������岪岮岯岰岲岴岶岹岺岻岼岾峀峂峃峅峆峇峈峉峊峌峍峎峏峐峑峓峔峕峖峗峘峚峛峜峝峞峟峠峢峣峧峩峫峬峮峯峱峲峳峴峵島峷峸峹峺峼峽峾峿崀�崁崄崅崈崉崊崋崌崍崏崐崑崒崓崕崗崘崙崚崜崝崟崠崡崢崣崥崨崪崫崬崯崰崱崲崳崵崶崷崸崹崺崻崼崿嵀嵁嵂嵃嵄嵅嵆嵈嵉嵍嵎嵏嵐嵑嵒嵓嵔嵕嵖嵗嵙嵚嵜嵞嵟嵠嵡嵢嵣嵤嵥嵦嵧嵨嵪嵭嵮嵰嵱嵲嵳嵵嵶嵷嵸嵹嵺嵻嵼嵽嵾嵿嶀嶁嶃嶄嶅嶆嶇嶈嶉嶊嶋嶌嶍嶎嶏嶐嶑嶒嶓嶔嶕嶖嶗嶘嶚嶛嶜嶞嶟嶠�".split(""),e=0;e!=r[141].length;++e)65533!==r[141][e].charCodeAt(0)&&(n[r[141][e]]=36096+e,t[36096+e]=r[141][e]);for(r[142]="����������������������������������������������������������������嶡嶢嶣嶤嶥嶦嶧嶨嶩嶪嶫嶬嶭嶮嶯嶰嶱嶲嶳嶴嶵嶶嶸嶹嶺嶻嶼嶽嶾嶿巀巁巂巃巄巆巇巈巉巊巋巌巎巏巐巑巒巓巔巕巖巗巘巙巚巜巟巠巣巤巪巬巭�巰巵巶巸巹巺巻巼巿帀帄帇帉帊帋帍帎帒帓帗帞帟帠帡帢帣帤帥帨帩帪師帬帯帰帲帳帴帵帶帹帺帾帿幀幁幃幆幇幈幉幊幋幍幎幏幐幑幒幓幖幗幘幙幚幜幝幟幠幣幤幥幦幧幨幩幪幫幬幭幮幯幰幱幵幷幹幾庁庂広庅庈庉庌庍庎庒庘庛庝庡庢庣庤庨庩庪庫庬庮庯庰庱庲庴庺庻庼庽庿廀廁廂廃廄廅�".split(""),e=0;e!=r[142].length;++e)65533!==r[142][e].charCodeAt(0)&&(n[r[142][e]]=36352+e,t[36352+e]=r[142][e]);for(r[143]="����������������������������������������������������������������廆廇廈廋廌廍廎廏廐廔廕廗廘廙廚廜廝廞廟廠廡廢廣廤廥廦廧廩廫廬廭廮廯廰廱廲廳廵廸廹廻廼廽弅弆弇弉弌弍弎弐弒弔弖弙弚弜弝弞弡弢弣弤�弨弫弬弮弰弲弳弴張弶強弸弻弽弾弿彁彂彃彄彅彆彇彈彉彊彋彌彍彎彏彑彔彙彚彛彜彞彟彠彣彥彧彨彫彮彯彲彴彵彶彸彺彽彾彿徃徆徍徎徏徑従徔徖徚徛徝從徟徠徢徣徤徥徦徧復徫徬徯徰徱徲徳徴徶徸徹徺徻徾徿忀忁忂忇忈忊忋忎忓忔忕忚忛応忞忟忢忣忥忦忨忩忬忯忰忲忳忴忶忷忹忺忼怇�".split(""),e=0;e!=r[143].length;++e)65533!==r[143][e].charCodeAt(0)&&(n[r[143][e]]=36608+e,t[36608+e]=r[143][e]);for(r[144]="����������������������������������������������������������������怈怉怋怌怐怑怓怗怘怚怞怟怢怣怤怬怭怮怰怱怲怳怴怶怷怸怹怺怽怾恀恄恅恆恇恈恉恊恌恎恏恑恓恔恖恗恘恛恜恞恟恠恡恥恦恮恱恲恴恵恷恾悀�悁悂悅悆悇悈悊悋悎悏悐悑悓悕悗悘悙悜悞悡悢悤悥悧悩悪悮悰悳悵悶悷悹悺悽悾悿惀惁惂惃惄惇惈惉惌惍惎惏惐惒惓惔惖惗惙惛惞惡惢惣惤惥惪惱惲惵惷惸惻惼惽惾惿愂愃愄愅愇愊愋愌愐愑愒愓愔愖愗愘愙愛愜愝愞愡愢愥愨愩愪愬愭愮愯愰愱愲愳愴愵愶愷愸愹愺愻愼愽愾慀慁慂慃慄慅慆�".split(""),e=0;e!=r[144].length;++e)65533!==r[144][e].charCodeAt(0)&&(n[r[144][e]]=36864+e,t[36864+e]=r[144][e]);for(r[145]="����������������������������������������������������������������慇慉態慍慏慐慒慓慔慖慗慘慙慚慛慜慞慟慠慡慣慤慥慦慩慪慫慬慭慮慯慱慲慳慴慶慸慹慺慻慼慽慾慿憀憁憂憃憄憅憆憇憈憉憊憌憍憏憐憑憒憓憕�憖憗憘憙憚憛憜憞憟憠憡憢憣憤憥憦憪憫憭憮憯憰憱憲憳憴憵憶憸憹憺憻憼憽憿懀懁懃懄懅懆懇應懌懍懎懏懐懓懕懖懗懘懙懚懛懜懝懞懟懠懡懢懣懤懥懧懨懩懪懫懬懭懮懯懰懱懲懳懴懶懷懸懹懺懻懼懽懾戀戁戂戃戄戅戇戉戓戔戙戜戝戞戠戣戦戧戨戩戫戭戯戰戱戲戵戶戸戹戺戻戼扂扄扅扆扊�".split(""),e=0;e!=r[145].length;++e)65533!==r[145][e].charCodeAt(0)&&(n[r[145][e]]=37120+e,t[37120+e]=r[145][e]);for(r[146]="����������������������������������������������������������������扏扐払扖扗扙扚扜扝扞扟扠扡扢扤扥扨扱扲扴扵扷扸扺扻扽抁抂抃抅抆抇抈抋抌抍抎抏抐抔抙抜抝択抣抦抧抩抪抭抮抯抰抲抳抴抶抷抸抺抾拀拁�拃拋拏拑拕拝拞拠拡拤拪拫拰拲拵拸拹拺拻挀挃挄挅挆挊挋挌挍挏挐挒挓挔挕挗挘挙挜挦挧挩挬挭挮挰挱挳挴挵挶挷挸挻挼挾挿捀捁捄捇捈捊捑捒捓捔捖捗捘捙捚捛捜捝捠捤捥捦捨捪捫捬捯捰捲捳捴捵捸捹捼捽捾捿掁掃掄掅掆掋掍掑掓掔掕掗掙掚掛掜掝掞掟採掤掦掫掯掱掲掵掶掹掻掽掿揀�".split(""),e=0;e!=r[146].length;++e)65533!==r[146][e].charCodeAt(0)&&(n[r[146][e]]=37376+e,t[37376+e]=r[146][e]);for(r[147]="����������������������������������������������������������������揁揂揃揅揇揈揊揋揌揑揓揔揕揗揘揙揚換揜揝揟揢揤揥揦揧揨揫揬揮揯揰揱揳揵揷揹揺揻揼揾搃搄搆搇搈搉搊損搎搑搒搕搖搗搘搙搚搝搟搢搣搤�搥搧搨搩搫搮搯搰搱搲搳搵搶搷搸搹搻搼搾摀摂摃摉摋摌摍摎摏摐摑摓摕摖摗摙摚摛摜摝摟摠摡摢摣摤摥摦摨摪摫摬摮摯摰摱摲摳摴摵摶摷摻摼摽摾摿撀撁撃撆撈撉撊撋撌撍撎撏撐撓撔撗撘撚撛撜撝撟撠撡撢撣撥撦撧撨撪撫撯撱撲撳撴撶撹撻撽撾撿擁擃擄擆擇擈擉擊擋擌擏擑擓擔擕擖擙據�".split(""),e=0;e!=r[147].length;++e)65533!==r[147][e].charCodeAt(0)&&(n[r[147][e]]=37632+e,t[37632+e]=r[147][e]);for(r[148]="����������������������������������������������������������������擛擜擝擟擠擡擣擥擧擨擩擪擫擬擭擮擯擰擱擲擳擴擵擶擷擸擹擺擻擼擽擾擿攁攂攃攄攅攆攇攈攊攋攌攍攎攏攐攑攓攔攕攖攗攙攚攛攜攝攞攟攠攡�攢攣攤攦攧攨攩攪攬攭攰攱攲攳攷攺攼攽敀敁敂敃敄敆敇敊敋敍敎敐敒敓敔敗敘敚敜敟敠敡敤敥敧敨敩敪敭敮敯敱敳敵敶數敹敺敻敼敽敾敿斀斁斂斃斄斅斆斈斉斊斍斎斏斒斔斕斖斘斚斝斞斠斢斣斦斨斪斬斮斱斲斳斴斵斶斷斸斺斻斾斿旀旂旇旈旉旊旍旐旑旓旔旕旘旙旚旛旜旝旞旟旡旣旤旪旫�".split(""),e=0;e!=r[148].length;++e)65533!==r[148][e].charCodeAt(0)&&(n[r[148][e]]=37888+e,t[37888+e]=r[148][e]);for(r[149]="����������������������������������������������������������������旲旳旴旵旸旹旻旼旽旾旿昁昄昅昇昈昉昋昍昐昑昒昖昗昘昚昛昜昞昡昢昣昤昦昩昪昫昬昮昰昲昳昷昸昹昺昻昽昿晀時晄晅晆晇晈晉晊晍晎晐晑晘�晙晛晜晝晞晠晢晣晥晧晩晪晫晬晭晱晲晳晵晸晹晻晼晽晿暀暁暃暅暆暈暉暊暋暍暎暏暐暒暓暔暕暘暙暚暛暜暞暟暠暡暢暣暤暥暦暩暪暫暬暭暯暰暱暲暳暵暶暷暸暺暻暼暽暿曀曁曂曃曄曅曆曇曈曉曊曋曌曍曎曏曐曑曒曓曔曕曖曗曘曚曞曟曠曡曢曣曤曥曧曨曪曫曬曭曮曯曱曵曶書曺曻曽朁朂會�".split(""),e=0;e!=r[149].length;++e)65533!==r[149][e].charCodeAt(0)&&(n[r[149][e]]=38144+e,t[38144+e]=r[149][e]);for(r[150]="����������������������������������������������������������������朄朅朆朇朌朎朏朑朒朓朖朘朙朚朜朞朠朡朢朣朤朥朧朩朮朰朲朳朶朷朸朹朻朼朾朿杁杄杅杇杊杋杍杒杔杕杗杘杙杚杛杝杢杣杤杦杧杫杬杮東杴杶�杸杹杺杻杽枀枂枃枅枆枈枊枌枍枎枏枑枒枓枔枖枙枛枟枠枡枤枦枩枬枮枱枲枴枹枺枻枼枽枾枿柀柂柅柆柇柈柉柊柋柌柍柎柕柖柗柛柟柡柣柤柦柧柨柪柫柭柮柲柵柶柷柸柹柺査柼柾栁栂栃栄栆栍栐栒栔栕栘栙栚栛栜栞栟栠栢栣栤栥栦栧栨栫栬栭栮栯栰栱栴栵栶栺栻栿桇桋桍桏桒桖桗桘桙桚桛�".split(""),e=0;e!=r[150].length;++e)65533!==r[150][e].charCodeAt(0)&&(n[r[150][e]]=38400+e,t[38400+e]=r[150][e]);for(r[151]="����������������������������������������������������������������桜桝桞桟桪桬桭桮桯桰桱桲桳桵桸桹桺桻桼桽桾桿梀梂梄梇梈梉梊梋梌梍梎梐梑梒梔梕梖梘梙梚梛梜條梞梟梠梡梣梤梥梩梪梫梬梮梱梲梴梶梷梸�梹梺梻梼梽梾梿棁棃棄棅棆棇棈棊棌棎棏棐棑棓棔棖棗棙棛棜棝棞棟棡棢棤棥棦棧棨棩棪棫棬棭棯棲棳棴棶棷棸棻棽棾棿椀椂椃椄椆椇椈椉椊椌椏椑椓椔椕椖椗椘椙椚椛検椝椞椡椢椣椥椦椧椨椩椪椫椬椮椯椱椲椳椵椶椷椸椺椻椼椾楀楁楃楄楅楆楇楈楉楊楋楌楍楎楏楐楑楒楓楕楖楘楙楛楜楟�".split(""),e=0;e!=r[151].length;++e)65533!==r[151][e].charCodeAt(0)&&(n[r[151][e]]=38656+e,t[38656+e]=r[151][e]);for(r[152]="����������������������������������������������������������������楡楢楤楥楧楨楩楪楬業楯楰楲楳楴極楶楺楻楽楾楿榁榃榅榊榋榌榎榏榐榑榒榓榖榗榙榚榝榞榟榠榡榢榣榤榥榦榩榪榬榮榯榰榲榳榵榶榸榹榺榼榽�榾榿槀槂槃槄槅槆槇槈槉構槍槏槑槒槓槕槖槗様槙槚槜槝槞槡槢槣槤槥槦槧槨槩槪槫槬槮槯槰槱槳槴槵槶槷槸槹槺槻槼槾樀樁樂樃樄樅樆樇樈樉樋樌樍樎樏樐樑樒樓樔樕樖標樚樛樜樝樞樠樢樣樤樥樦樧権樫樬樭樮樰樲樳樴樶樷樸樹樺樻樼樿橀橁橂橃橅橆橈橉橊橋橌橍橎橏橑橒橓橔橕橖橗橚�".split(""),e=0;e!=r[152].length;++e)65533!==r[152][e].charCodeAt(0)&&(n[r[152][e]]=38912+e,t[38912+e]=r[152][e]);for(r[153]="����������������������������������������������������������������橜橝橞機橠橢橣橤橦橧橨橩橪橫橬橭橮橯橰橲橳橴橵橶橷橸橺橻橽橾橿檁檂檃檅檆檇檈檉檊檋檌檍檏檒檓檔檕檖檘檙檚檛檜檝檞檟檡檢檣檤檥檦�檧檨檪檭檮檯檰檱檲檳檴檵檶檷檸檹檺檻檼檽檾檿櫀櫁櫂櫃櫄櫅櫆櫇櫈櫉櫊櫋櫌櫍櫎櫏櫐櫑櫒櫓櫔櫕櫖櫗櫘櫙櫚櫛櫜櫝櫞櫟櫠櫡櫢櫣櫤櫥櫦櫧櫨櫩櫪櫫櫬櫭櫮櫯櫰櫱櫲櫳櫴櫵櫶櫷櫸櫹櫺櫻櫼櫽櫾櫿欀欁欂欃欄欅欆欇欈欉權欋欌欍欎欏欐欑欒欓欔欕欖欗欘欙欚欛欜欝欞欟欥欦欨欩欪欫欬欭欮�".split(""),e=0;e!=r[153].length;++e)65533!==r[153][e].charCodeAt(0)&&(n[r[153][e]]=39168+e,t[39168+e]=r[153][e]);for(r[154]="����������������������������������������������������������������欯欰欱欳欴欵欶欸欻欼欽欿歀歁歂歄歅歈歊歋歍歎歏歐歑歒歓歔歕歖歗歘歚歛歜歝歞歟歠歡歨歩歫歬歭歮歯歰歱歲歳歴歵歶歷歸歺歽歾歿殀殅殈�殌殎殏殐殑殔殕殗殘殙殜殝殞殟殠殢殣殤殥殦殧殨殩殫殬殭殮殯殰殱殲殶殸殹殺殻殼殽殾毀毃毄毆毇毈毉毊毌毎毐毑毘毚毜毝毞毟毠毢毣毤毥毦毧毨毩毬毭毮毰毱毲毴毶毷毸毺毻毼毾毿氀氁氂氃氄氈氉氊氋氌氎氒気氜氝氞氠氣氥氫氬氭氱氳氶氷氹氺氻氼氾氿汃汄汅汈汋汌汍汎汏汑汒汓汖汘�".split(""),e=0;e!=r[154].length;++e)65533!==r[154][e].charCodeAt(0)&&(n[r[154][e]]=39424+e,t[39424+e]=r[154][e]);for(r[155]="����������������������������������������������������������������汙汚汢汣汥汦汧汫汬汭汮汯汱汳汵汷汸決汻汼汿沀沄沇沊沋沍沎沑沒沕沖沗沘沚沜沝沞沠沢沨沬沯沰沴沵沶沷沺泀況泂泃泆泇泈泋泍泎泏泑泒泘�泙泚泜泝泟泤泦泧泩泬泭泲泴泹泿洀洂洃洅洆洈洉洊洍洏洐洑洓洔洕洖洘洜洝洟洠洡洢洣洤洦洨洩洬洭洯洰洴洶洷洸洺洿浀浂浄浉浌浐浕浖浗浘浛浝浟浡浢浤浥浧浨浫浬浭浰浱浲浳浵浶浹浺浻浽浾浿涀涁涃涄涆涇涊涋涍涏涐涒涖涗涘涙涚涜涢涥涬涭涰涱涳涴涶涷涹涺涻涼涽涾淁淂淃淈淉淊�".split(""),e=0;e!=r[155].length;++e)65533!==r[155][e].charCodeAt(0)&&(n[r[155][e]]=39680+e,t[39680+e]=r[155][e]);for(r[156]="����������������������������������������������������������������淍淎淏淐淒淓淔淕淗淚淛淜淟淢淣淥淧淨淩淪淭淯淰淲淴淵淶淸淺淽淾淿渀渁渂渃渄渆渇済渉渋渏渒渓渕渘渙減渜渞渟渢渦渧渨渪測渮渰渱渳渵�渶渷渹渻渼渽渾渿湀湁湂湅湆湇湈湉湊湋湌湏湐湑湒湕湗湙湚湜湝湞湠湡湢湣湤湥湦湧湨湩湪湬湭湯湰湱湲湳湴湵湶湷湸湹湺湻湼湽満溁溂溄溇溈溊溋溌溍溎溑溒溓溔溕準溗溙溚溛溝溞溠溡溣溤溦溨溩溫溬溭溮溰溳溵溸溹溼溾溿滀滃滄滅滆滈滉滊滌滍滎滐滒滖滘滙滛滜滝滣滧滪滫滬滭滮滯�".split(""),e=0;e!=r[156].length;++e)65533!==r[156][e].charCodeAt(0)&&(n[r[156][e]]=39936+e,t[39936+e]=r[156][e]);for(r[157]="����������������������������������������������������������������滰滱滲滳滵滶滷滸滺滻滼滽滾滿漀漁漃漄漅漇漈漊漋漌漍漎漐漑漒漖漗漘漙漚漛漜漝漞漟漡漢漣漥漦漧漨漬漮漰漲漴漵漷漸漹漺漻漼漽漿潀潁潂�潃潄潅潈潉潊潌潎潏潐潑潒潓潔潕潖潗潙潚潛潝潟潠潡潣潤潥潧潨潩潪潫潬潯潰潱潳潵潶潷潹潻潽潾潿澀澁澂澃澅澆澇澊澋澏澐澑澒澓澔澕澖澗澘澙澚澛澝澞澟澠澢澣澤澥澦澨澩澪澫澬澭澮澯澰澱澲澴澵澷澸澺澻澼澽澾澿濁濃濄濅濆濇濈濊濋濌濍濎濏濐濓濔濕濖濗濘濙濚濛濜濝濟濢濣濤濥�".split(""),e=0;e!=r[157].length;++e)65533!==r[157][e].charCodeAt(0)&&(n[r[157][e]]=40192+e,t[40192+e]=r[157][e]);for(r[158]="����������������������������������������������������������������濦濧濨濩濪濫濬濭濰濱濲濳濴濵濶濷濸濹濺濻濼濽濾濿瀀瀁瀂瀃瀄瀅瀆瀇瀈瀉瀊瀋瀌瀍瀎瀏瀐瀒瀓瀔瀕瀖瀗瀘瀙瀜瀝瀞瀟瀠瀡瀢瀤瀥瀦瀧瀨瀩瀪�瀫瀬瀭瀮瀯瀰瀱瀲瀳瀴瀶瀷瀸瀺瀻瀼瀽瀾瀿灀灁灂灃灄灅灆灇灈灉灊灋灍灎灐灑灒灓灔灕灖灗灘灙灚灛灜灝灟灠灡灢灣灤灥灦灧灨灩灪灮灱灲灳灴灷灹灺灻災炁炂炃炄炆炇炈炋炌炍炏炐炑炓炗炘炚炛炞炟炠炡炢炣炤炥炦炧炨炩炪炰炲炴炵炶為炾炿烄烅烆烇烉烋烌烍烎烏烐烑烒烓烔烕烖烗烚�".split(""),e=0;e!=r[158].length;++e)65533!==r[158][e].charCodeAt(0)&&(n[r[158][e]]=40448+e,t[40448+e]=r[158][e]);for(r[159]="����������������������������������������������������������������烜烝烞烠烡烢烣烥烪烮烰烱烲烳烴烵烶烸烺烻烼烾烿焀焁焂焃焄焅焆焇焈焋焌焍焎焏焑焒焔焗焛焜焝焞焟焠無焢焣焤焥焧焨焩焪焫焬焭焮焲焳焴�焵焷焸焹焺焻焼焽焾焿煀煁煂煃煄煆煇煈煉煋煍煏煐煑煒煓煔煕煖煗煘煙煚煛煝煟煠煡煢煣煥煩煪煫煬煭煯煰煱煴煵煶煷煹煻煼煾煿熀熁熂熃熅熆熇熈熉熋熌熍熎熐熑熒熓熕熖熗熚熛熜熝熞熡熢熣熤熥熦熧熩熪熫熭熮熯熰熱熲熴熶熷熸熺熻熼熽熾熿燀燁燂燄燅燆燇燈燉燊燋燌燍燏燐燑燒燓�".split(""),e=0;e!=r[159].length;++e)65533!==r[159][e].charCodeAt(0)&&(n[r[159][e]]=40704+e,t[40704+e]=r[159][e]);for(r[160]="����������������������������������������������������������������燖燗燘燙燚燛燜燝燞營燡燢燣燤燦燨燩燪燫燬燭燯燰燱燲燳燴燵燶燷燸燺燻燼燽燾燿爀爁爂爃爄爅爇爈爉爊爋爌爍爎爏爐爑爒爓爔爕爖爗爘爙爚�爛爜爞爟爠爡爢爣爤爥爦爧爩爫爭爮爯爲爳爴爺爼爾牀牁牂牃牄牅牆牉牊牋牎牏牐牑牓牔牕牗牘牚牜牞牠牣牤牥牨牪牫牬牭牰牱牳牴牶牷牸牻牼牽犂犃犅犆犇犈犉犌犎犐犑犓犔犕犖犗犘犙犚犛犜犝犞犠犡犢犣犤犥犦犧犨犩犪犫犮犱犲犳犵犺犻犼犽犾犿狀狅狆狇狉狊狋狌狏狑狓狔狕狖狘狚狛�".split(""),e=0;e!=r[160].length;++e)65533!==r[160][e].charCodeAt(0)&&(n[r[160][e]]=40960+e,t[40960+e]=r[160][e]);for(r[161]="����������������������������������������������������������������������������������������������������������������������������������������������������������������� 、。·ˉˇ¨〃々—~‖…‘’“”〔〕〈〉《》「」『』〖〗【】±×÷∶∧∨∑∏∪∩∈∷√⊥∥∠⌒⊙∫∮≡≌≈∽∝≠≮≯≤≥∞∵∴♂♀°′″℃$¤¢£‰§№☆★○●◎◇◆□■△▲※→←↑↓〓�".split(""),e=0;e!=r[161].length;++e)65533!==r[161][e].charCodeAt(0)&&(n[r[161][e]]=41216+e,t[41216+e]=r[161][e]);for(r[162]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹ������⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓⒔⒕⒖⒗⒘⒙⒚⒛⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿⒀⒁⒂⒃⒄⒅⒆⒇①②③④⑤⑥⑦⑧⑨⑩��㈠㈡㈢㈣㈤㈥㈦㈧㈨㈩��ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫ���".split(""),e=0;e!=r[162].length;++e)65533!==r[162][e].charCodeAt(0)&&(n[r[162][e]]=41472+e,t[41472+e]=r[162][e]);for(r[163]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������!"#¥%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} ̄�".split(""),e=0;e!=r[163].length;++e)65533!==r[163][e].charCodeAt(0)&&(n[r[163][e]]=41728+e,t[41728+e]=r[163][e]);for(r[164]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをん������������".split(""),e=0;e!=r[164].length;++e)65533!==r[164][e].charCodeAt(0)&&(n[r[164][e]]=41984+e,t[41984+e]=r[164][e]);for(r[165]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ���������".split(""),e=0;e!=r[165].length;++e)65533!==r[165][e].charCodeAt(0)&&(n[r[165][e]]=42240+e,t[42240+e]=r[165][e]);for(r[166]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ��������αβγδεζηθικλμνξοπρστυφχψω�������︵︶︹︺︿﹀︽︾﹁﹂﹃﹄��︻︼︷︸︱�︳︴����������".split(""),e=0;e!=r[166].length;++e)65533!==r[166][e].charCodeAt(0)&&(n[r[166][e]]=42496+e,t[42496+e]=r[166][e]);for(r[167]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ���������������абвгдеёжзийклмнопрстуфхцчшщъыьэюя��������������".split(""),e=0;e!=r[167].length;++e)65533!==r[167][e].charCodeAt(0)&&(n[r[167][e]]=42752+e,t[42752+e]=r[167][e]);for(r[168]="����������������������������������������������������������������ˊˋ˙–―‥‵℅℉↖↗↘↙∕∟∣≒≦≧⊿═║╒╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡╢╣╤╥╦╧╨╩╪╫╬╭╮╯╰╱╲╳▁▂▃▄▅▆▇�█▉▊▋▌▍▎▏▓▔▕▼▽◢◣◤◥☉⊕〒〝〞�����������āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜüêɑ�ńň�ɡ����ㄅㄆㄇㄈㄉㄊㄋㄌㄍㄎㄏㄐㄑㄒㄓㄔㄕㄖㄗㄘㄙㄚㄛㄜㄝㄞㄟㄠㄡㄢㄣㄤㄥㄦㄧㄨㄩ����������������������".split(""),e=0;e!=r[168].length;++e)65533!==r[168][e].charCodeAt(0)&&(n[r[168][e]]=43008+e,t[43008+e]=r[168][e]);for(r[169]="����������������������������������������������������������������〡〢〣〤〥〦〧〨〩㊣㎎㎏㎜㎝㎞㎡㏄㏎㏑㏒㏕︰¬¦�℡㈱�‐���ー゛゜ヽヾ〆ゝゞ﹉﹊﹋﹌﹍﹎﹏﹐﹑﹒﹔﹕﹖﹗﹙﹚﹛﹜﹝﹞﹟﹠﹡�﹢﹣﹤﹥﹦﹨﹩﹪﹫�������������〇�������������─━│┃┄┅┆┇┈┉┊┋┌┍┎┏┐┑┒┓└┕┖┗┘┙┚┛├┝┞┟┠┡┢┣┤┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿╀╁╂╃╄╅╆╇╈╉╊╋����������������".split(""),e=0;e!=r[169].length;++e)65533!==r[169][e].charCodeAt(0)&&(n[r[169][e]]=43264+e,t[43264+e]=r[169][e]);for(r[170]="����������������������������������������������������������������狜狝狟狢狣狤狥狦狧狪狫狵狶狹狽狾狿猀猂猄猅猆猇猈猉猋猌猍猏猐猑猒猔猘猙猚猟猠猣猤猦猧猨猭猯猰猲猳猵猶猺猻猼猽獀獁獂獃獄獅獆獇獈�獉獊獋獌獎獏獑獓獔獕獖獘獙獚獛獜獝獞獟獡獢獣獤獥獦獧獨獩獪獫獮獰獱�����������������������������������������������������������������������������������������������".split(""),e=0;e!=r[170].length;++e)65533!==r[170][e].charCodeAt(0)&&(n[r[170][e]]=43520+e,t[43520+e]=r[170][e]);for(r[171]="����������������������������������������������������������������獲獳獴獵獶獷獸獹獺獻獼獽獿玀玁玂玃玅玆玈玊玌玍玏玐玒玓玔玕玗玘玙玚玜玝玞玠玡玣玤玥玦玧玨玪玬玭玱玴玵玶玸玹玼玽玾玿珁珃珄珅珆珇�珋珌珎珒珓珔珕珖珗珘珚珛珜珝珟珡珢珣珤珦珨珪珫珬珮珯珰珱珳珴珵珶珷�����������������������������������������������������������������������������������������������".split(""),e=0;e!=r[171].length;++e)65533!==r[171][e].charCodeAt(0)&&(n[r[171][e]]=43776+e,t[43776+e]=r[171][e]);for(r[172]="����������������������������������������������������������������珸珹珺珻珼珽現珿琀琁琂琄琇琈琋琌琍琎琑琒琓琔琕琖琗琘琙琜琝琞琟琠琡琣琤琧琩琫琭琯琱琲琷琸琹琺琻琽琾琿瑀瑂瑃瑄瑅瑆瑇瑈瑉瑊瑋瑌瑍�瑎瑏瑐瑑瑒瑓瑔瑖瑘瑝瑠瑡瑢瑣瑤瑥瑦瑧瑨瑩瑪瑫瑬瑮瑯瑱瑲瑳瑴瑵瑸瑹瑺�����������������������������������������������������������������������������������������������".split(""),e=0;e!=r[172].length;++e)65533!==r[172][e].charCodeAt(0)&&(n[r[172][e]]=44032+e,t[44032+e]=r[172][e]);for(r[173]="����������������������������������������������������������������瑻瑼瑽瑿璂璄璅璆璈璉璊璌璍璏璑璒璓璔璕璖璗璘璙璚璛璝璟璠璡璢璣璤璥璦璪璫璬璭璮璯環璱璲璳璴璵璶璷璸璹璻璼璽璾璿瓀瓁瓂瓃瓄瓅瓆瓇�瓈瓉瓊瓋瓌瓍瓎瓏瓐瓑瓓瓔瓕瓖瓗瓘瓙瓚瓛瓝瓟瓡瓥瓧瓨瓩瓪瓫瓬瓭瓰瓱瓲�����������������������������������������������������������������������������������������������".split(""),e=0;e!=r[173].length;++e)65533!==r[173][e].charCodeAt(0)&&(n[r[173][e]]=44288+e,t[44288+e]=r[173][e]);for(r[174]="����������������������������������������������������������������瓳瓵瓸瓹瓺瓻瓼瓽瓾甀甁甂甃甅甆甇甈甉甊甋甌甎甐甒甔甕甖甗甛甝甞甠甡產産甤甦甧甪甮甴甶甹甼甽甿畁畂畃畄畆畇畉畊畍畐畑畒畓畕畖畗畘�畝畞畟畠畡畢畣畤畧畨畩畫畬畭畮畯異畱畳畵當畷畺畻畼畽畾疀疁疂疄疅疇�����������������������������������������������������������������������������������������������".split(""),e=0;e!=r[174].length;++e)65533!==r[174][e].charCodeAt(0)&&(n[r[174][e]]=44544+e,t[44544+e]=r[174][e]);for(r[175]="����������������������������������������������������������������疈疉疊疌疍疎疐疓疕疘疛疜疞疢疦疧疨疩疪疭疶疷疺疻疿痀痁痆痋痌痎痏痐痑痓痗痙痚痜痝痟痠痡痥痩痬痭痮痯痲痳痵痶痷痸痺痻痽痾瘂瘄瘆瘇�瘈瘉瘋瘍瘎瘏瘑瘒瘓瘔瘖瘚瘜瘝瘞瘡瘣瘧瘨瘬瘮瘯瘱瘲瘶瘷瘹瘺瘻瘽癁療癄�����������������������������������������������������������������������������������������������".split(""),e=0;e!=r[175].length;++e)65533!==r[175][e].charCodeAt(0)&&(n[r[175][e]]=44800+e,t[44800+e]=r[175][e]);for(r[176]="����������������������������������������������������������������癅癆癇癈癉癊癋癎癏癐癑癒癓癕癗癘癙癚癛癝癟癠癡癢癤癥癦癧癨癩癪癬癭癮癰癱癲癳癴癵癶癷癹発發癿皀皁皃皅皉皊皌皍皏皐皒皔皕皗皘皚皛�皜皝皞皟皠皡皢皣皥皦皧皨皩皪皫皬皭皯皰皳皵皶皷皸皹皺皻皼皽皾盀盁盃啊阿埃挨哎唉哀皑癌蔼矮艾碍爱隘鞍氨安俺按暗岸胺案肮昂盎凹敖熬翱袄傲奥懊澳芭捌扒叭吧笆八疤巴拔跋靶把耙坝霸罢爸白柏百摆佰败拜稗斑班搬扳般颁板版扮拌伴瓣半办绊邦帮梆榜膀绑棒磅蚌镑傍谤苞胞包褒剥�".split(""),e=0;e!=r[176].length;++e)65533!==r[176][e].charCodeAt(0)&&(n[r[176][e]]=45056+e,t[45056+e]=r[176][e]);for(r[177]="����������������������������������������������������������������盄盇盉盋盌盓盕盙盚盜盝盞盠盡盢監盤盦盧盨盩盪盫盬盭盰盳盵盶盷盺盻盽盿眀眂眃眅眆眊県眎眏眐眑眒眓眔眕眖眗眘眛眜眝眞眡眣眤眥眧眪眫�眬眮眰眱眲眳眴眹眻眽眾眿睂睄睅睆睈睉睊睋睌睍睎睏睒睓睔睕睖睗睘睙睜薄雹保堡饱宝抱报暴豹鲍爆杯碑悲卑北辈背贝钡倍狈备惫焙被奔苯本笨崩绷甭泵蹦迸逼鼻比鄙笔彼碧蓖蔽毕毙毖币庇痹闭敝弊必辟壁臂避陛鞭边编贬扁便变卞辨辩辫遍标彪膘表鳖憋别瘪彬斌濒滨宾摈兵冰柄丙秉饼炳�".split(""),e=0;e!=r[177].length;++e)65533!==r[177][e].charCodeAt(0)&&(n[r[177][e]]=45312+e,t[45312+e]=r[177][e]);for(r[178]="����������������������������������������������������������������睝睞睟睠睤睧睩睪睭睮睯睰睱睲睳睴睵睶睷睸睺睻睼瞁瞂瞃瞆瞇瞈瞉瞊瞋瞏瞐瞓瞔瞕瞖瞗瞘瞙瞚瞛瞜瞝瞞瞡瞣瞤瞦瞨瞫瞭瞮瞯瞱瞲瞴瞶瞷瞸瞹瞺�瞼瞾矀矁矂矃矄矅矆矇矈矉矊矋矌矎矏矐矑矒矓矔矕矖矘矙矚矝矞矟矠矡矤病并玻菠播拨钵波博勃搏铂箔伯帛舶脖膊渤泊驳捕卜哺补埠不布步簿部怖擦猜裁材才财睬踩采彩菜蔡餐参蚕残惭惨灿苍舱仓沧藏操糙槽曹草厕策侧册测层蹭插叉茬茶查碴搽察岔差诧拆柴豺搀掺蝉馋谗缠铲产阐颤昌猖�".split(""),e=0;e!=r[178].length;++e)65533!==r[178][e].charCodeAt(0)&&(n[r[178][e]]=45568+e,t[45568+e]=r[178][e]);for(r[179]="����������������������������������������������������������������矦矨矪矯矰矱矲矴矵矷矹矺矻矼砃砄砅砆砇砈砊砋砎砏砐砓砕砙砛砞砠砡砢砤砨砪砫砮砯砱砲砳砵砶砽砿硁硂硃硄硆硈硉硊硋硍硏硑硓硔硘硙硚�硛硜硞硟硠硡硢硣硤硥硦硧硨硩硯硰硱硲硳硴硵硶硸硹硺硻硽硾硿碀碁碂碃场尝常长偿肠厂敞畅唱倡超抄钞朝嘲潮巢吵炒车扯撤掣彻澈郴臣辰尘晨忱沉陈趁衬撑称城橙成呈乘程惩澄诚承逞骋秤吃痴持匙池迟弛驰耻齿侈尺赤翅斥炽充冲虫崇宠抽酬畴踌稠愁筹仇绸瞅丑臭初出橱厨躇锄雏滁除楚�".split(""),e=0;e!=r[179].length;++e)65533!==r[179][e].charCodeAt(0)&&(n[r[179][e]]=45824+e,t[45824+e]=r[179][e]);for(r[180]="����������������������������������������������������������������碄碅碆碈碊碋碏碐碒碔碕碖碙碝碞碠碢碤碦碨碩碪碫碬碭碮碯碵碶碷碸確碻碼碽碿磀磂磃磄磆磇磈磌磍磎磏磑磒磓磖磗磘磚磛磜磝磞磟磠磡磢磣�磤磥磦磧磩磪磫磭磮磯磰磱磳磵磶磸磹磻磼磽磾磿礀礂礃礄礆礇礈礉礊礋礌础储矗搐触处揣川穿椽传船喘串疮窗幢床闯创吹炊捶锤垂春椿醇唇淳纯蠢戳绰疵茨磁雌辞慈瓷词此刺赐次聪葱囱匆从丛凑粗醋簇促蹿篡窜摧崔催脆瘁粹淬翠村存寸磋撮搓措挫错搭达答瘩打大呆歹傣戴带殆代贷袋待逮�".split(""),e=0;e!=r[180].length;++e)65533!==r[180][e].charCodeAt(0)&&(n[r[180][e]]=46080+e,t[46080+e]=r[180][e]);for(r[181]="����������������������������������������������������������������礍礎礏礐礑礒礔礕礖礗礘礙礚礛礜礝礟礠礡礢礣礥礦礧礨礩礪礫礬礭礮礯礰礱礲礳礵礶礷礸礹礽礿祂祃祄祅祇祊祋祌祍祎祏祐祑祒祔祕祘祙祡祣�祤祦祩祪祫祬祮祰祱祲祳祴祵祶祹祻祼祽祾祿禂禃禆禇禈禉禋禌禍禎禐禑禒怠耽担丹单郸掸胆旦氮但惮淡诞弹蛋当挡党荡档刀捣蹈倒岛祷导到稻悼道盗德得的蹬灯登等瞪凳邓堤低滴迪敌笛狄涤翟嫡抵底地蒂第帝弟递缔颠掂滇碘点典靛垫电佃甸店惦奠淀殿碉叼雕凋刁掉吊钓调跌爹碟蝶迭谍叠�".split(""),e=0;e!=r[181].length;++e)65533!==r[181][e].charCodeAt(0)&&(n[r[181][e]]=46336+e,t[46336+e]=r[181][e]);for(r[182]="����������������������������������������������������������������禓禔禕禖禗禘禙禛禜禝禞禟禠禡禢禣禤禥禦禨禩禪禫禬禭禮禯禰禱禲禴禵禶禷禸禼禿秂秄秅秇秈秊秌秎秏秐秓秔秖秗秙秚秛秜秝秞秠秡秢秥秨秪�秬秮秱秲秳秴秵秶秷秹秺秼秾秿稁稄稅稇稈稉稊稌稏稐稑稒稓稕稖稘稙稛稜丁盯叮钉顶鼎锭定订丢东冬董懂动栋侗恫冻洞兜抖斗陡豆逗痘都督毒犊独读堵睹赌杜镀肚度渡妒端短锻段断缎堆兑队对墩吨蹲敦顿囤钝盾遁掇哆多夺垛躲朵跺舵剁惰堕蛾峨鹅俄额讹娥恶厄扼遏鄂饿恩而儿耳尔饵洱二�".split(""),e=0;e!=r[182].length;++e)65533!==r[182][e].charCodeAt(0)&&(n[r[182][e]]=46592+e,t[46592+e]=r[182][e]);for(r[183]="����������������������������������������������������������������稝稟稡稢稤稥稦稧稨稩稪稫稬稭種稯稰稱稲稴稵稶稸稺稾穀穁穂穃穄穅穇穈穉穊穋穌積穎穏穐穒穓穔穕穖穘穙穚穛穜穝穞穟穠穡穢穣穤穥穦穧穨�穩穪穫穬穭穮穯穱穲穳穵穻穼穽穾窂窅窇窉窊窋窌窎窏窐窓窔窙窚窛窞窡窢贰发罚筏伐乏阀法珐藩帆番翻樊矾钒繁凡烦反返范贩犯饭泛坊芳方肪房防妨仿访纺放菲非啡飞肥匪诽吠肺废沸费芬酚吩氛分纷坟焚汾粉奋份忿愤粪丰封枫蜂峰锋风疯烽逢冯缝讽奉凤佛否夫敷肤孵扶拂辐幅氟符伏俘服�".split(""),e=0;e!=r[183].length;++e)65533!==r[183][e].charCodeAt(0)&&(n[r[183][e]]=46848+e,t[46848+e]=r[183][e]);for(r[184]="����������������������������������������������������������������窣窤窧窩窪窫窮窯窰窱窲窴窵窶窷窸窹窺窻窼窽窾竀竁竂竃竄竅竆竇竈竉竊竌竍竎竏竐竑竒竓竔竕竗竘竚竛竜竝竡竢竤竧竨竩竪竫竬竮竰竱竲竳�竴竵競竷竸竻竼竾笀笁笂笅笇笉笌笍笎笐笒笓笖笗笘笚笜笝笟笡笢笣笧笩笭浮涪福袱弗甫抚辅俯釜斧脯腑府腐赴副覆赋复傅付阜父腹负富讣附妇缚咐噶嘎该改概钙盖溉干甘杆柑竿肝赶感秆敢赣冈刚钢缸肛纲岗港杠篙皋高膏羔糕搞镐稿告哥歌搁戈鸽胳疙割革葛格蛤阁隔铬个各给根跟耕更庚羹�".split(""),e=0;e!=r[184].length;++e)65533!==r[184][e].charCodeAt(0)&&(n[r[184][e]]=47104+e,t[47104+e]=r[184][e]);for(r[185]="����������������������������������������������������������������笯笰笲笴笵笶笷笹笻笽笿筀筁筂筃筄筆筈筊筍筎筓筕筗筙筜筞筟筡筣筤筥筦筧筨筩筪筫筬筭筯筰筳筴筶筸筺筼筽筿箁箂箃箄箆箇箈箉箊箋箌箎箏�箑箒箓箖箘箙箚箛箞箟箠箣箤箥箮箯箰箲箳箵箶箷箹箺箻箼箽箾箿節篂篃範埂耿梗工攻功恭龚供躬公宫弓巩汞拱贡共钩勾沟苟狗垢构购够辜菇咕箍估沽孤姑鼓古蛊骨谷股故顾固雇刮瓜剐寡挂褂乖拐怪棺关官冠观管馆罐惯灌贯光广逛瑰规圭硅归龟闺轨鬼诡癸桂柜跪贵刽辊滚棍锅郭国果裹过哈�".split(""),e=0;e!=r[185].length;++e)65533!==r[185][e].charCodeAt(0)&&(n[r[185][e]]=47360+e,t[47360+e]=r[185][e]);for(r[186]="����������������������������������������������������������������篅篈築篊篋篍篎篏篐篒篔篕篖篗篘篛篜篞篟篠篢篣篤篧篨篩篫篬篭篯篰篲篳篴篵篶篸篹篺篻篽篿簀簁簂簃簄簅簆簈簉簊簍簎簐簑簒簓簔簕簗簘簙�簚簛簜簝簞簠簡簢簣簤簥簨簩簫簬簭簮簯簰簱簲簳簴簵簶簷簹簺簻簼簽簾籂骸孩海氦亥害骇酣憨邯韩含涵寒函喊罕翰撼捍旱憾悍焊汗汉夯杭航壕嚎豪毫郝好耗号浩呵喝荷菏核禾和何合盒貉阂河涸赫褐鹤贺嘿黑痕很狠恨哼亨横衡恒轰哄烘虹鸿洪宏弘红喉侯猴吼厚候后呼乎忽瑚壶葫胡蝴狐糊湖�".split(""),e=0;e!=r[186].length;++e)65533!==r[186][e].charCodeAt(0)&&(n[r[186][e]]=47616+e,t[47616+e]=r[186][e]);for(r[187]="����������������������������������������������������������������籃籄籅籆籇籈籉籊籋籌籎籏籐籑籒籓籔籕籖籗籘籙籚籛籜籝籞籟籠籡籢籣籤籥籦籧籨籩籪籫籬籭籮籯籰籱籲籵籶籷籸籹籺籾籿粀粁粂粃粄粅粆粇�粈粊粋粌粍粎粏粐粓粔粖粙粚粛粠粡粣粦粧粨粩粫粬粭粯粰粴粵粶粷粸粺粻弧虎唬护互沪户花哗华猾滑画划化话槐徊怀淮坏欢环桓还缓换患唤痪豢焕涣宦幻荒慌黄磺蝗簧皇凰惶煌晃幌恍谎灰挥辉徽恢蛔回毁悔慧卉惠晦贿秽会烩汇讳诲绘荤昏婚魂浑混豁活伙火获或惑霍货祸击圾基机畸稽积箕�".split(""),e=0;e!=r[187].length;++e)65533!==r[187][e].charCodeAt(0)&&(n[r[187][e]]=47872+e,t[47872+e]=r[187][e]);for(r[188]="����������������������������������������������������������������粿糀糂糃糄糆糉糋糎糏糐糑糒糓糔糘糚糛糝糞糡糢糣糤糥糦糧糩糪糫糬糭糮糰糱糲糳糴糵糶糷糹糺糼糽糾糿紀紁紂紃約紅紆紇紈紉紋紌納紎紏紐�紑紒紓純紕紖紗紘紙級紛紜紝紞紟紡紣紤紥紦紨紩紪紬紭紮細紱紲紳紴紵紶肌饥迹激讥鸡姬绩缉吉极棘辑籍集及急疾汲即嫉级挤几脊己蓟技冀季伎祭剂悸济寄寂计记既忌际妓继纪嘉枷夹佳家加荚颊贾甲钾假稼价架驾嫁歼监坚尖笺间煎兼肩艰奸缄茧检柬碱硷拣捡简俭剪减荐槛鉴践贱见键箭件�".split(""),e=0;e!=r[188].length;++e)65533!==r[188][e].charCodeAt(0)&&(n[r[188][e]]=48128+e,t[48128+e]=r[188][e]);for(r[189]="����������������������������������������������������������������紷紸紹紺紻紼紽紾紿絀絁終絃組絅絆絇絈絉絊絋経絍絎絏結絑絒絓絔絕絖絗絘絙絚絛絜絝絞絟絠絡絢絣絤絥給絧絨絩絪絫絬絭絯絰統絲絳絴絵絶�絸絹絺絻絼絽絾絿綀綁綂綃綄綅綆綇綈綉綊綋綌綍綎綏綐綑綒經綔綕綖綗綘健舰剑饯渐溅涧建僵姜将浆江疆蒋桨奖讲匠酱降蕉椒礁焦胶交郊浇骄娇嚼搅铰矫侥脚狡角饺缴绞剿教酵轿较叫窖揭接皆秸街阶截劫节桔杰捷睫竭洁结解姐戒藉芥界借介疥诫届巾筋斤金今津襟紧锦仅谨进靳晋禁近烬浸�".split(""),e=0;e!=r[189].length;++e)65533!==r[189][e].charCodeAt(0)&&(n[r[189][e]]=48384+e,t[48384+e]=r[189][e]);for(r[190]="����������������������������������������������������������������継続綛綜綝綞綟綠綡綢綣綤綥綧綨綩綪綫綬維綯綰綱網綳綴綵綶綷綸綹綺綻綼綽綾綿緀緁緂緃緄緅緆緇緈緉緊緋緌緍緎総緐緑緒緓緔緕緖緗緘緙�線緛緜緝緞緟締緡緢緣緤緥緦緧編緩緪緫緬緭緮緯緰緱緲緳練緵緶緷緸緹緺尽劲荆兢茎睛晶鲸京惊精粳经井警景颈静境敬镜径痉靖竟竞净炯窘揪究纠玖韭久灸九酒厩救旧臼舅咎就疚鞠拘狙疽居驹菊局咀矩举沮聚拒据巨具距踞锯俱句惧炬剧捐鹃娟倦眷卷绢撅攫抉掘倔爵觉决诀绝均菌钧军君峻�".split(""),e=0;e!=r[190].length;++e)65533!==r[190][e].charCodeAt(0)&&(n[r[190][e]]=48640+e,t[48640+e]=r[190][e]);for(r[191]="����������������������������������������������������������������緻緼緽緾緿縀縁縂縃縄縅縆縇縈縉縊縋縌縍縎縏縐縑縒縓縔縕縖縗縘縙縚縛縜縝縞縟縠縡縢縣縤縥縦縧縨縩縪縫縬縭縮縯縰縱縲縳縴縵縶縷縸縹�縺縼總績縿繀繂繃繄繅繆繈繉繊繋繌繍繎繏繐繑繒繓織繕繖繗繘繙繚繛繜繝俊竣浚郡骏喀咖卡咯开揩楷凯慨刊堪勘坎砍看康慷糠扛抗亢炕考拷烤靠坷苛柯棵磕颗科壳咳可渴克刻客课肯啃垦恳坑吭空恐孔控抠口扣寇枯哭窟苦酷库裤夸垮挎跨胯块筷侩快宽款匡筐狂框矿眶旷况亏盔岿窥葵奎魁傀�".split(""),e=0;e!=r[191].length;++e)65533!==r[191][e].charCodeAt(0)&&(n[r[191][e]]=48896+e,t[48896+e]=r[191][e]);for(r[192]="����������������������������������������������������������������繞繟繠繡繢繣繤繥繦繧繨繩繪繫繬繭繮繯繰繱繲繳繴繵繶繷繸繹繺繻繼繽繾繿纀纁纃纄纅纆纇纈纉纊纋續纍纎纏纐纑纒纓纔纕纖纗纘纙纚纜纝纞�纮纴纻纼绖绤绬绹缊缐缞缷缹缻缼缽缾缿罀罁罃罆罇罈罉罊罋罌罍罎罏罒罓馈愧溃坤昆捆困括扩廓阔垃拉喇蜡腊辣啦莱来赖蓝婪栏拦篮阑兰澜谰揽览懒缆烂滥琅榔狼廊郎朗浪捞劳牢老佬姥酪烙涝勒乐雷镭蕾磊累儡垒擂肋类泪棱楞冷厘梨犁黎篱狸离漓理李里鲤礼莉荔吏栗丽厉励砾历利傈例俐�".split(""),e=0;e!=r[192].length;++e)65533!==r[192][e].charCodeAt(0)&&(n[r[192][e]]=49152+e,t[49152+e]=r[192][e]);for(r[193]="����������������������������������������������������������������罖罙罛罜罝罞罠罣罤罥罦罧罫罬罭罯罰罳罵罶罷罸罺罻罼罽罿羀羂羃羄羅羆羇羈羉羋羍羏羐羑羒羓羕羖羗羘羙羛羜羠羢羣羥羦羨義羪羫羬羭羮羱�羳羴羵羶羷羺羻羾翀翂翃翄翆翇翈翉翋翍翏翐翑習翓翖翗翙翚翛翜翝翞翢翣痢立粒沥隶力璃哩俩联莲连镰廉怜涟帘敛脸链恋炼练粮凉梁粱良两辆量晾亮谅撩聊僚疗燎寥辽潦了撂镣廖料列裂烈劣猎琳林磷霖临邻鳞淋凛赁吝拎玲菱零龄铃伶羚凌灵陵岭领另令溜琉榴硫馏留刘瘤流柳六龙聋咙笼窿�".split(""),e=0;e!=r[193].length;++e)65533!==r[193][e].charCodeAt(0)&&(n[r[193][e]]=49408+e,t[49408+e]=r[193][e]);for(r[194]="����������������������������������������������������������������翤翧翨翪翫翬翭翯翲翴翵翶翷翸翹翺翽翾翿耂耇耈耉耊耎耏耑耓耚耛耝耞耟耡耣耤耫耬耭耮耯耰耲耴耹耺耼耾聀聁聄聅聇聈聉聎聏聐聑聓聕聖聗�聙聛聜聝聞聟聠聡聢聣聤聥聦聧聨聫聬聭聮聯聰聲聳聴聵聶職聸聹聺聻聼聽隆垄拢陇楼娄搂篓漏陋芦卢颅庐炉掳卤虏鲁麓碌露路赂鹿潞禄录陆戮驴吕铝侣旅履屡缕虑氯律率滤绿峦挛孪滦卵乱掠略抡轮伦仑沦纶论萝螺罗逻锣箩骡裸落洛骆络妈麻玛码蚂马骂嘛吗埋买麦卖迈脉瞒馒蛮满蔓曼慢漫�".split(""),e=0;e!=r[194].length;++e)65533!==r[194][e].charCodeAt(0)&&(n[r[194][e]]=49664+e,t[49664+e]=r[194][e]);for(r[195]="����������������������������������������������������������������聾肁肂肅肈肊肍肎肏肐肑肒肔肕肗肙肞肣肦肧肨肬肰肳肵肶肸肹肻胅胇胈胉胊胋胏胐胑胒胓胔胕胘胟胠胢胣胦胮胵胷胹胻胾胿脀脁脃脄脅脇脈脋�脌脕脗脙脛脜脝脟脠脡脢脣脤脥脦脧脨脩脪脫脭脮脰脳脴脵脷脹脺脻脼脽脿谩芒茫盲氓忙莽猫茅锚毛矛铆卯茂冒帽貌贸么玫枚梅酶霉煤没眉媒镁每美昧寐妹媚门闷们萌蒙檬盟锰猛梦孟眯醚靡糜迷谜弥米秘觅泌蜜密幂棉眠绵冕免勉娩缅面苗描瞄藐秒渺庙妙蔑灭民抿皿敏悯闽明螟鸣铭名命谬摸�".split(""),e=0;e!=r[195].length;++e)65533!==r[195][e].charCodeAt(0)&&(n[r[195][e]]=49920+e,t[49920+e]=r[195][e]);for(r[196]="����������������������������������������������������������������腀腁腂腃腄腅腇腉腍腎腏腒腖腗腘腛腜腝腞腟腡腢腣腤腦腨腪腫腬腯腲腳腵腶腷腸膁膃膄膅膆膇膉膋膌膍膎膐膒膓膔膕膖膗膙膚膞膟膠膡膢膤膥�膧膩膫膬膭膮膯膰膱膲膴膵膶膷膸膹膼膽膾膿臄臅臇臈臉臋臍臎臏臐臑臒臓摹蘑模膜磨摩魔抹末莫墨默沫漠寞陌谋牟某拇牡亩姆母墓暮幕募慕木目睦牧穆拿哪呐钠那娜纳氖乃奶耐奈南男难囊挠脑恼闹淖呢馁内嫩能妮霓倪泥尼拟你匿腻逆溺蔫拈年碾撵捻念娘酿鸟尿捏聂孽啮镊镍涅您柠狞凝宁�".split(""),e=0;e!=r[196].length;++e)65533!==r[196][e].charCodeAt(0)&&(n[r[196][e]]=50176+e,t[50176+e]=r[196][e]);for(r[197]="����������������������������������������������������������������臔臕臖臗臘臙臚臛臜臝臞臟臠臡臢臤臥臦臨臩臫臮臯臰臱臲臵臶臷臸臹臺臽臿舃與興舉舊舋舎舏舑舓舕舖舗舘舙舚舝舠舤舥舦舧舩舮舲舺舼舽舿�艀艁艂艃艅艆艈艊艌艍艎艐艑艒艓艔艕艖艗艙艛艜艝艞艠艡艢艣艤艥艦艧艩拧泞牛扭钮纽脓浓农弄奴努怒女暖虐疟挪懦糯诺哦欧鸥殴藕呕偶沤啪趴爬帕怕琶拍排牌徘湃派攀潘盘磐盼畔判叛乓庞旁耪胖抛咆刨炮袍跑泡呸胚培裴赔陪配佩沛喷盆砰抨烹澎彭蓬棚硼篷膨朋鹏捧碰坯砒霹批披劈琵毗�".split(""),e=0;e!=r[197].length;++e)65533!==r[197][e].charCodeAt(0)&&(n[r[197][e]]=50432+e,t[50432+e]=r[197][e]);for(r[198]="����������������������������������������������������������������艪艫艬艭艱艵艶艷艸艻艼芀芁芃芅芆芇芉芌芐芓芔芕芖芚芛芞芠芢芣芧芲芵芶芺芻芼芿苀苂苃苅苆苉苐苖苙苚苝苢苧苨苩苪苬苭苮苰苲苳苵苶苸�苺苼苽苾苿茀茊茋茍茐茒茓茖茘茙茝茞茟茠茡茢茣茤茥茦茩茪茮茰茲茷茻茽啤脾疲皮匹痞僻屁譬篇偏片骗飘漂瓢票撇瞥拼频贫品聘乒坪苹萍平凭瓶评屏坡泼颇婆破魄迫粕剖扑铺仆莆葡菩蒲埔朴圃普浦谱曝瀑期欺栖戚妻七凄漆柒沏其棋奇歧畦崎脐齐旗祈祁骑起岂乞企启契砌器气迄弃汽泣讫掐�".split(""),e=0;e!=r[198].length;++e)65533!==r[198][e].charCodeAt(0)&&(n[r[198][e]]=50688+e,t[50688+e]=r[198][e]);for(r[199]="����������������������������������������������������������������茾茿荁荂荄荅荈荊荋荌荍荎荓荕荖荗荘荙荝荢荰荱荲荳荴荵荶荹荺荾荿莀莁莂莃莄莇莈莊莋莌莍莏莐莑莔莕莖莗莙莚莝莟莡莢莣莤莥莦莧莬莭莮�莯莵莻莾莿菂菃菄菆菈菉菋菍菎菐菑菒菓菕菗菙菚菛菞菢菣菤菦菧菨菫菬菭恰洽牵扦钎铅千迁签仟谦乾黔钱钳前潜遣浅谴堑嵌欠歉枪呛腔羌墙蔷强抢橇锹敲悄桥瞧乔侨巧鞘撬翘峭俏窍切茄且怯窃钦侵亲秦琴勤芹擒禽寝沁青轻氢倾卿清擎晴氰情顷请庆琼穷秋丘邱球求囚酋泅趋区蛆曲躯屈驱渠�".split(""),e=0;e!=r[199].length;++e)65533!==r[199][e].charCodeAt(0)&&(n[r[199][e]]=50944+e,t[50944+e]=r[199][e]);for(r[200]="����������������������������������������������������������������菮華菳菴菵菶菷菺菻菼菾菿萀萂萅萇萈萉萊萐萒萓萔萕萖萗萙萚萛萞萟萠萡萢萣萩萪萫萬萭萮萯萰萲萳萴萵萶萷萹萺萻萾萿葀葁葂葃葄葅葇葈葉�葊葋葌葍葎葏葐葒葓葔葕葖葘葝葞葟葠葢葤葥葦葧葨葪葮葯葰葲葴葷葹葻葼取娶龋趣去圈颧权醛泉全痊拳犬券劝缺炔瘸却鹊榷确雀裙群然燃冉染瓤壤攘嚷让饶扰绕惹热壬仁人忍韧任认刃妊纫扔仍日戎茸蓉荣融熔溶容绒冗揉柔肉茹蠕儒孺如辱乳汝入褥软阮蕊瑞锐闰润若弱撒洒萨腮鳃塞赛三叁�".split(""),e=0;e!=r[200].length;++e)65533!==r[200][e].charCodeAt(0)&&(n[r[200][e]]=51200+e,t[51200+e]=r[200][e]);for(r[201]="����������������������������������������������������������������葽葾葿蒀蒁蒃蒄蒅蒆蒊蒍蒏蒐蒑蒒蒓蒔蒕蒖蒘蒚蒛蒝蒞蒟蒠蒢蒣蒤蒥蒦蒧蒨蒩蒪蒫蒬蒭蒮蒰蒱蒳蒵蒶蒷蒻蒼蒾蓀蓂蓃蓅蓆蓇蓈蓋蓌蓎蓏蓒蓔蓕蓗�蓘蓙蓚蓛蓜蓞蓡蓢蓤蓧蓨蓩蓪蓫蓭蓮蓯蓱蓲蓳蓴蓵蓶蓷蓸蓹蓺蓻蓽蓾蔀蔁蔂伞散桑嗓丧搔骚扫嫂瑟色涩森僧莎砂杀刹沙纱傻啥煞筛晒珊苫杉山删煽衫闪陕擅赡膳善汕扇缮墒伤商赏晌上尚裳梢捎稍烧芍勺韶少哨邵绍奢赊蛇舌舍赦摄射慑涉社设砷申呻伸身深娠绅神沈审婶甚肾慎渗声生甥牲升绳�".split(""),e=0;e!=r[201].length;++e)65533!==r[201][e].charCodeAt(0)&&(n[r[201][e]]=51456+e,t[51456+e]=r[201][e]);for(r[202]="����������������������������������������������������������������蔃蔄蔅蔆蔇蔈蔉蔊蔋蔍蔎蔏蔐蔒蔔蔕蔖蔘蔙蔛蔜蔝蔞蔠蔢蔣蔤蔥蔦蔧蔨蔩蔪蔭蔮蔯蔰蔱蔲蔳蔴蔵蔶蔾蔿蕀蕁蕂蕄蕅蕆蕇蕋蕌蕍蕎蕏蕐蕑蕒蕓蕔蕕�蕗蕘蕚蕛蕜蕝蕟蕠蕡蕢蕣蕥蕦蕧蕩蕪蕫蕬蕭蕮蕯蕰蕱蕳蕵蕶蕷蕸蕼蕽蕿薀薁省盛剩胜圣师失狮施湿诗尸虱十石拾时什食蚀实识史矢使屎驶始式示士世柿事拭誓逝势是嗜噬适仕侍释饰氏市恃室视试收手首守寿授售受瘦兽蔬枢梳殊抒输叔舒淑疏书赎孰熟薯暑曙署蜀黍鼠属术述树束戍竖墅庶数漱�".split(""),e=0;e!=r[202].length;++e)65533!==r[202][e].charCodeAt(0)&&(n[r[202][e]]=51712+e,t[51712+e]=r[202][e]);for(r[203]="����������������������������������������������������������������薂薃薆薈薉薊薋薌薍薎薐薑薒薓薔薕薖薗薘薙薚薝薞薟薠薡薢薣薥薦薧薩薫薬薭薱薲薳薴薵薶薸薺薻薼薽薾薿藀藂藃藄藅藆藇藈藊藋藌藍藎藑藒�藔藖藗藘藙藚藛藝藞藟藠藡藢藣藥藦藧藨藪藫藬藭藮藯藰藱藲藳藴藵藶藷藸恕刷耍摔衰甩帅栓拴霜双爽谁水睡税吮瞬顺舜说硕朔烁斯撕嘶思私司丝死肆寺嗣四伺似饲巳松耸怂颂送宋讼诵搜艘擞嗽苏酥俗素速粟僳塑溯宿诉肃酸蒜算虽隋随绥髓碎岁穗遂隧祟孙损笋蓑梭唆缩琐索锁所塌他它她塔�".split(""),e=0;e!=r[203].length;++e)65533!==r[203][e].charCodeAt(0)&&(n[r[203][e]]=51968+e,t[51968+e]=r[203][e]);for(r[204]="����������������������������������������������������������������藹藺藼藽藾蘀蘁蘂蘃蘄蘆蘇蘈蘉蘊蘋蘌蘍蘎蘏蘐蘒蘓蘔蘕蘗蘘蘙蘚蘛蘜蘝蘞蘟蘠蘡蘢蘣蘤蘥蘦蘨蘪蘫蘬蘭蘮蘯蘰蘱蘲蘳蘴蘵蘶蘷蘹蘺蘻蘽蘾蘿虀�虁虂虃虄虅虆虇虈虉虊虋虌虒虓處虖虗虘虙虛虜虝號虠虡虣虤虥虦虧虨虩虪獭挞蹋踏胎苔抬台泰酞太态汰坍摊贪瘫滩坛檀痰潭谭谈坦毯袒碳探叹炭汤塘搪堂棠膛唐糖倘躺淌趟烫掏涛滔绦萄桃逃淘陶讨套特藤腾疼誊梯剔踢锑提题蹄啼体替嚏惕涕剃屉天添填田甜恬舔腆挑条迢眺跳贴铁帖厅听烃�".split(""),e=0;e!=r[204].length;++e)65533!==r[204][e].charCodeAt(0)&&(n[r[204][e]]=52224+e,t[52224+e]=r[204][e]);for(r[205]="����������������������������������������������������������������虭虯虰虲虳虴虵虶虷虸蚃蚄蚅蚆蚇蚈蚉蚎蚏蚐蚑蚒蚔蚖蚗蚘蚙蚚蚛蚞蚟蚠蚡蚢蚥蚦蚫蚭蚮蚲蚳蚷蚸蚹蚻蚼蚽蚾蚿蛁蛂蛃蛅蛈蛌蛍蛒蛓蛕蛖蛗蛚蛜�蛝蛠蛡蛢蛣蛥蛦蛧蛨蛪蛫蛬蛯蛵蛶蛷蛺蛻蛼蛽蛿蜁蜄蜅蜆蜋蜌蜎蜏蜐蜑蜔蜖汀廷停亭庭挺艇通桐酮瞳同铜彤童桶捅筒统痛偷投头透凸秃突图徒途涂屠土吐兔湍团推颓腿蜕褪退吞屯臀拖托脱鸵陀驮驼椭妥拓唾挖哇蛙洼娃瓦袜歪外豌弯湾玩顽丸烷完碗挽晚皖惋宛婉万腕汪王亡枉网往旺望忘妄威�".split(""),e=0;e!=r[205].length;++e)65533!==r[205][e].charCodeAt(0)&&(n[r[205][e]]=52480+e,t[52480+e]=r[205][e]);for(r[206]="����������������������������������������������������������������蜙蜛蜝蜟蜠蜤蜦蜧蜨蜪蜫蜬蜭蜯蜰蜲蜳蜵蜶蜸蜹蜺蜼蜽蝀蝁蝂蝃蝄蝅蝆蝊蝋蝍蝏蝐蝑蝒蝔蝕蝖蝘蝚蝛蝜蝝蝞蝟蝡蝢蝦蝧蝨蝩蝪蝫蝬蝭蝯蝱蝲蝳蝵�蝷蝸蝹蝺蝿螀螁螄螆螇螉螊螌螎螏螐螑螒螔螕螖螘螙螚螛螜螝螞螠螡螢螣螤巍微危韦违桅围唯惟为潍维苇萎委伟伪尾纬未蔚味畏胃喂魏位渭谓尉慰卫瘟温蚊文闻纹吻稳紊问嗡翁瓮挝蜗涡窝我斡卧握沃巫呜钨乌污诬屋无芜梧吾吴毋武五捂午舞伍侮坞戊雾晤物勿务悟误昔熙析西硒矽晰嘻吸锡牺�".split(""),e=0;e!=r[206].length;++e)65533!==r[206][e].charCodeAt(0)&&(n[r[206][e]]=52736+e,t[52736+e]=r[206][e]);for(r[207]="����������������������������������������������������������������螥螦螧螩螪螮螰螱螲螴螶螷螸螹螻螼螾螿蟁蟂蟃蟄蟅蟇蟈蟉蟌蟍蟎蟏蟐蟔蟕蟖蟗蟘蟙蟚蟜蟝蟞蟟蟡蟢蟣蟤蟦蟧蟨蟩蟫蟬蟭蟯蟰蟱蟲蟳蟴蟵蟶蟷蟸�蟺蟻蟼蟽蟿蠀蠁蠂蠄蠅蠆蠇蠈蠉蠋蠌蠍蠎蠏蠐蠑蠒蠔蠗蠘蠙蠚蠜蠝蠞蠟蠠蠣稀息希悉膝夕惜熄烯溪汐犀檄袭席习媳喜铣洗系隙戏细瞎虾匣霞辖暇峡侠狭下厦夏吓掀锨先仙鲜纤咸贤衔舷闲涎弦嫌显险现献县腺馅羡宪陷限线相厢镶香箱襄湘乡翔祥详想响享项巷橡像向象萧硝霄削哮嚣销消宵淆晓�".split(""),e=0;e!=r[207].length;++e)65533!==r[207][e].charCodeAt(0)&&(n[r[207][e]]=52992+e,t[52992+e]=r[207][e]);for(r[208]="����������������������������������������������������������������蠤蠥蠦蠧蠨蠩蠪蠫蠬蠭蠮蠯蠰蠱蠳蠴蠵蠶蠷蠸蠺蠻蠽蠾蠿衁衂衃衆衇衈衉衊衋衎衏衐衑衒術衕衖衘衚衛衜衝衞衟衠衦衧衪衭衯衱衳衴衵衶衸衹衺�衻衼袀袃袆袇袉袊袌袎袏袐袑袓袔袕袗袘袙袚袛袝袞袟袠袡袣袥袦袧袨袩袪小孝校肖啸笑效楔些歇蝎鞋协挟携邪斜胁谐写械卸蟹懈泄泻谢屑薪芯锌欣辛新忻心信衅星腥猩惺兴刑型形邢行醒幸杏性姓兄凶胸匈汹雄熊休修羞朽嗅锈秀袖绣墟戌需虚嘘须徐许蓄酗叙旭序畜恤絮婿绪续轩喧宣悬旋玄�".split(""),e=0;e!=r[208].length;++e)65533!==r[208][e].charCodeAt(0)&&(n[r[208][e]]=53248+e,t[53248+e]=r[208][e]);for(r[209]="����������������������������������������������������������������袬袮袯袰袲袳袴袵袶袸袹袺袻袽袾袿裀裃裄裇裈裊裋裌裍裏裐裑裓裖裗裚裛補裝裞裠裡裦裧裩裪裫裬裭裮裯裲裵裶裷裺裻製裿褀褁褃褄褅褆複褈�褉褋褌褍褎褏褑褔褕褖褗褘褜褝褞褟褠褢褣褤褦褧褨褩褬褭褮褯褱褲褳褵褷选癣眩绚靴薛学穴雪血勋熏循旬询寻驯巡殉汛训讯逊迅压押鸦鸭呀丫芽牙蚜崖衙涯雅哑亚讶焉咽阉烟淹盐严研蜒岩延言颜阎炎沿奄掩眼衍演艳堰燕厌砚雁唁彦焰宴谚验殃央鸯秧杨扬佯疡羊洋阳氧仰痒养样漾邀腰妖瑶�".split(""),e=0;e!=r[209].length;++e)65533!==r[209][e].charCodeAt(0)&&(n[r[209][e]]=53504+e,t[53504+e]=r[209][e]);for(r[210]="����������������������������������������������������������������褸褹褺褻褼褽褾褿襀襂襃襅襆襇襈襉襊襋襌襍襎襏襐襑襒襓襔襕襖襗襘襙襚襛襜襝襠襡襢襣襤襥襧襨襩襪襫襬襭襮襯襰襱襲襳襴襵襶襷襸襹襺襼�襽襾覀覂覄覅覇覈覉覊見覌覍覎規覐覑覒覓覔覕視覗覘覙覚覛覜覝覞覟覠覡摇尧遥窑谣姚咬舀药要耀椰噎耶爷野冶也页掖业叶曳腋夜液一壹医揖铱依伊衣颐夷遗移仪胰疑沂宜姨彝椅蚁倚已乙矣以艺抑易邑屹亿役臆逸肄疫亦裔意毅忆义益溢诣议谊译异翼翌绎茵荫因殷音阴姻吟银淫寅饮尹引隐�".split(""),e=0;e!=r[210].length;++e)65533!==r[210][e].charCodeAt(0)&&(n[r[210][e]]=53760+e,t[53760+e]=r[210][e]);for(r[211]="����������������������������������������������������������������覢覣覤覥覦覧覨覩親覫覬覭覮覯覰覱覲観覴覵覶覷覸覹覺覻覼覽覾覿觀觃觍觓觔觕觗觘觙觛觝觟觠觡觢觤觧觨觩觪觬觭觮觰觱觲觴觵觶觷觸觹觺�觻觼觽觾觿訁訂訃訄訅訆計訉訊訋訌訍討訏訐訑訒訓訔訕訖託記訙訚訛訜訝印英樱婴鹰应缨莹萤营荧蝇迎赢盈影颖硬映哟拥佣臃痈庸雍踊蛹咏泳涌永恿勇用幽优悠忧尤由邮铀犹油游酉有友右佑釉诱又幼迂淤于盂榆虞愚舆余俞逾鱼愉渝渔隅予娱雨与屿禹宇语羽玉域芋郁吁遇喻峪御愈欲狱育誉�".split(""),e=0;e!=r[211].length;++e)65533!==r[211][e].charCodeAt(0)&&(n[r[211][e]]=54016+e,t[54016+e]=r[211][e]);for(r[212]="����������������������������������������������������������������訞訟訠訡訢訣訤訥訦訧訨訩訪訫訬設訮訯訰許訲訳訴訵訶訷訸訹診註証訽訿詀詁詂詃詄詅詆詇詉詊詋詌詍詎詏詐詑詒詓詔評詖詗詘詙詚詛詜詝詞�詟詠詡詢詣詤詥試詧詨詩詪詫詬詭詮詯詰話該詳詴詵詶詷詸詺詻詼詽詾詿誀浴寓裕预豫驭鸳渊冤元垣袁原援辕园员圆猿源缘远苑愿怨院曰约越跃钥岳粤月悦阅耘云郧匀陨允运蕴酝晕韵孕匝砸杂栽哉灾宰载再在咱攒暂赞赃脏葬遭糟凿藻枣早澡蚤躁噪造皂灶燥责择则泽贼怎增憎曾赠扎喳渣札轧�".split(""),e=0;e!=r[212].length;++e)65533!==r[212][e].charCodeAt(0)&&(n[r[212][e]]=54272+e,t[54272+e]=r[212][e]);for(r[213]="����������������������������������������������������������������誁誂誃誄誅誆誇誈誋誌認誎誏誐誑誒誔誕誖誗誘誙誚誛誜誝語誟誠誡誢誣誤誥誦誧誨誩說誫説読誮誯誰誱課誳誴誵誶誷誸誹誺誻誼誽誾調諀諁諂�諃諄諅諆談諈諉諊請諌諍諎諏諐諑諒諓諔諕論諗諘諙諚諛諜諝諞諟諠諡諢諣铡闸眨栅榨咋乍炸诈摘斋宅窄债寨瞻毡詹粘沾盏斩辗崭展蘸栈占战站湛绽樟章彰漳张掌涨杖丈帐账仗胀瘴障招昭找沼赵照罩兆肇召遮折哲蛰辙者锗蔗这浙珍斟真甄砧臻贞针侦枕疹诊震振镇阵蒸挣睁征狰争怔整拯正政�".split(""),e=0;e!=r[213].length;++e)65533!==r[213][e].charCodeAt(0)&&(n[r[213][e]]=54528+e,t[54528+e]=r[213][e]);for(r[214]="����������������������������������������������������������������諤諥諦諧諨諩諪諫諬諭諮諯諰諱諲諳諴諵諶諷諸諹諺諻諼諽諾諿謀謁謂謃謄謅謆謈謉謊謋謌謍謎謏謐謑謒謓謔謕謖謗謘謙謚講謜謝謞謟謠謡謢謣�謤謥謧謨謩謪謫謬謭謮謯謰謱謲謳謴謵謶謷謸謹謺謻謼謽謾謿譀譁譂譃譄譅帧症郑证芝枝支吱蜘知肢脂汁之织职直植殖执值侄址指止趾只旨纸志挚掷至致置帜峙制智秩稚质炙痔滞治窒中盅忠钟衷终种肿重仲众舟周州洲诌粥轴肘帚咒皱宙昼骤珠株蛛朱猪诸诛逐竹烛煮拄瞩嘱主著柱助蛀贮铸筑�".split(""),e=0;e!=r[214].length;++e)65533!==r[214][e].charCodeAt(0)&&(n[r[214][e]]=54784+e,t[54784+e]=r[214][e]);for(r[215]="����������������������������������������������������������������譆譇譈證譊譋譌譍譎譏譐譑譒譓譔譕譖譗識譙譚譛譜譝譞譟譠譡譢譣譤譥譧譨譩譪譫譭譮譯議譱譲譳譴譵譶護譸譹譺譻譼譽譾譿讀讁讂讃讄讅讆�讇讈讉變讋讌讍讎讏讐讑讒讓讔讕讖讗讘讙讚讛讜讝讞讟讬讱讻诇诐诪谉谞住注祝驻抓爪拽专砖转撰赚篆桩庄装妆撞壮状椎锥追赘坠缀谆准捉拙卓桌琢茁酌啄着灼浊兹咨资姿滋淄孜紫仔籽滓子自渍字鬃棕踪宗综总纵邹走奏揍租足卒族祖诅阻组钻纂嘴醉最罪尊遵昨左佐柞做作坐座������".split(""),e=0;e!=r[215].length;++e)65533!==r[215][e].charCodeAt(0)&&(n[r[215][e]]=55040+e,t[55040+e]=r[215][e]);for(r[216]="����������������������������������������������������������������谸谹谺谻谼谽谾谿豀豂豃豄豅豈豊豋豍豎豏豐豑豒豓豔豖豗豘豙豛豜豝豞豟豠豣豤豥豦豧豨豩豬豭豮豯豰豱豲豴豵豶豷豻豼豽豾豿貀貁貃貄貆貇�貈貋貍貎貏貐貑貒貓貕貖貗貙貚貛貜貝貞貟負財貢貣貤貥貦貧貨販貪貫責貭亍丌兀丐廿卅丕亘丞鬲孬噩丨禺丿匕乇夭爻卮氐囟胤馗毓睾鼗丶亟鼐乜乩亓芈孛啬嘏仄厍厝厣厥厮靥赝匚叵匦匮匾赜卦卣刂刈刎刭刳刿剀剌剞剡剜蒯剽劂劁劐劓冂罔亻仃仉仂仨仡仫仞伛仳伢佤仵伥伧伉伫佞佧攸佚佝�".split(""),e=0;e!=r[216].length;++e)65533!==r[216][e].charCodeAt(0)&&(n[r[216][e]]=55296+e,t[55296+e]=r[216][e]);for(r[217]="����������������������������������������������������������������貮貯貰貱貲貳貴貵貶買貸貹貺費貼貽貾貿賀賁賂賃賄賅賆資賈賉賊賋賌賍賎賏賐賑賒賓賔賕賖賗賘賙賚賛賜賝賞賟賠賡賢賣賤賥賦賧賨賩質賫賬�賭賮賯賰賱賲賳賴賵賶賷賸賹賺賻購賽賾賿贀贁贂贃贄贅贆贇贈贉贊贋贌贍佟佗伲伽佶佴侑侉侃侏佾佻侪佼侬侔俦俨俪俅俚俣俜俑俟俸倩偌俳倬倏倮倭俾倜倌倥倨偾偃偕偈偎偬偻傥傧傩傺僖儆僭僬僦僮儇儋仝氽佘佥俎龠汆籴兮巽黉馘冁夔勹匍訇匐凫夙兕亠兖亳衮袤亵脔裒禀嬴蠃羸冫冱冽冼�".split(""),e=0;e!=r[217].length;++e)65533!==r[217][e].charCodeAt(0)&&(n[r[217][e]]=55552+e,t[55552+e]=r[217][e]);for(r[218]="����������������������������������������������������������������贎贏贐贑贒贓贔贕贖贗贘贙贚贛贜贠赑赒赗赟赥赨赩赪赬赮赯赱赲赸赹赺赻赼赽赾赿趀趂趃趆趇趈趉趌趍趎趏趐趒趓趕趖趗趘趙趚趛趜趝趞趠趡�趢趤趥趦趧趨趩趪趫趬趭趮趯趰趲趶趷趹趻趽跀跁跂跅跇跈跉跊跍跐跒跓跔凇冖冢冥讠讦讧讪讴讵讷诂诃诋诏诎诒诓诔诖诘诙诜诟诠诤诨诩诮诰诳诶诹诼诿谀谂谄谇谌谏谑谒谔谕谖谙谛谘谝谟谠谡谥谧谪谫谮谯谲谳谵谶卩卺阝阢阡阱阪阽阼陂陉陔陟陧陬陲陴隈隍隗隰邗邛邝邙邬邡邴邳邶邺�".split(""),e=0;e!=r[218].length;++e)65533!==r[218][e].charCodeAt(0)&&(n[r[218][e]]=55808+e,t[55808+e]=r[218][e]);for(r[219]="����������������������������������������������������������������跕跘跙跜跠跡跢跥跦跧跩跭跮跰跱跲跴跶跼跾跿踀踁踂踃踄踆踇踈踋踍踎踐踑踒踓踕踖踗踘踙踚踛踜踠踡踤踥踦踧踨踫踭踰踲踳踴踶踷踸踻踼踾�踿蹃蹅蹆蹌蹍蹎蹏蹐蹓蹔蹕蹖蹗蹘蹚蹛蹜蹝蹞蹟蹠蹡蹢蹣蹤蹥蹧蹨蹪蹫蹮蹱邸邰郏郅邾郐郄郇郓郦郢郜郗郛郫郯郾鄄鄢鄞鄣鄱鄯鄹酃酆刍奂劢劬劭劾哿勐勖勰叟燮矍廴凵凼鬯厶弁畚巯坌垩垡塾墼壅壑圩圬圪圳圹圮圯坜圻坂坩垅坫垆坼坻坨坭坶坳垭垤垌垲埏垧垴垓垠埕埘埚埙埒垸埴埯埸埤埝�".split(""),e=0;e!=r[219].length;++e)65533!==r[219][e].charCodeAt(0)&&(n[r[219][e]]=56064+e,t[56064+e]=r[219][e]);for(r[220]="����������������������������������������������������������������蹳蹵蹷蹸蹹蹺蹻蹽蹾躀躂躃躄躆躈躉躊躋躌躍躎躑躒躓躕躖躗躘躙躚躛躝躟躠躡躢躣躤躥躦躧躨躩躪躭躮躰躱躳躴躵躶躷躸躹躻躼躽躾躿軀軁軂�軃軄軅軆軇軈軉車軋軌軍軏軐軑軒軓軔軕軖軗軘軙軚軛軜軝軞軟軠軡転軣軤堋堍埽埭堀堞堙塄堠塥塬墁墉墚墀馨鼙懿艹艽艿芏芊芨芄芎芑芗芙芫芸芾芰苈苊苣芘芷芮苋苌苁芩芴芡芪芟苄苎芤苡茉苷苤茏茇苜苴苒苘茌苻苓茑茚茆茔茕苠苕茜荑荛荜茈莒茼茴茱莛荞茯荏荇荃荟荀茗荠茭茺茳荦荥�".split(""),e=0;e!=r[220].length;++e)65533!==r[220][e].charCodeAt(0)&&(n[r[220][e]]=56320+e,t[56320+e]=r[220][e]);for(r[221]="����������������������������������������������������������������軥軦軧軨軩軪軫軬軭軮軯軰軱軲軳軴軵軶軷軸軹軺軻軼軽軾軿輀輁輂較輄輅輆輇輈載輊輋輌輍輎輏輐輑輒輓輔輕輖輗輘輙輚輛輜輝輞輟輠輡輢輣�輤輥輦輧輨輩輪輫輬輭輮輯輰輱輲輳輴輵輶輷輸輹輺輻輼輽輾輿轀轁轂轃轄荨茛荩荬荪荭荮莰荸莳莴莠莪莓莜莅荼莶莩荽莸荻莘莞莨莺莼菁萁菥菘堇萘萋菝菽菖萜萸萑萆菔菟萏萃菸菹菪菅菀萦菰菡葜葑葚葙葳蒇蒈葺蒉葸萼葆葩葶蒌蒎萱葭蓁蓍蓐蓦蒽蓓蓊蒿蒺蓠蒡蒹蒴蒗蓥蓣蔌甍蔸蓰蔹蔟蔺�".split(""),e=0;e!=r[221].length;++e)65533!==r[221][e].charCodeAt(0)&&(n[r[221][e]]=56576+e,t[56576+e]=r[221][e]);for(r[222]="����������������������������������������������������������������轅轆轇轈轉轊轋轌轍轎轏轐轑轒轓轔轕轖轗轘轙轚轛轜轝轞轟轠轡轢轣轤轥轪辀辌辒辝辠辡辢辤辥辦辧辪辬辭辮辯農辳辴辵辷辸辺辻込辿迀迃迆�迉迊迋迌迍迏迒迖迗迚迠迡迣迧迬迯迱迲迴迵迶迺迻迼迾迿逇逈逌逎逓逕逘蕖蔻蓿蓼蕙蕈蕨蕤蕞蕺瞢蕃蕲蕻薤薨薇薏蕹薮薜薅薹薷薰藓藁藜藿蘧蘅蘩蘖蘼廾弈夼奁耷奕奚奘匏尢尥尬尴扌扪抟抻拊拚拗拮挢拶挹捋捃掭揶捱捺掎掴捭掬掊捩掮掼揲揸揠揿揄揞揎摒揆掾摅摁搋搛搠搌搦搡摞撄摭撖�".split(""),e=0;e!=r[222].length;++e)65533!==r[222][e].charCodeAt(0)&&(n[r[222][e]]=56832+e,t[56832+e]=r[222][e]);for(r[223]="����������������������������������������������������������������這逜連逤逥逧逨逩逪逫逬逰週進逳逴逷逹逺逽逿遀遃遅遆遈遉遊運遌過達違遖遙遚遜遝遞遟遠遡遤遦遧適遪遫遬遯遰遱遲遳遶遷選遹遺遻遼遾邁�還邅邆邇邉邊邌邍邎邏邐邒邔邖邘邚邜邞邟邠邤邥邧邨邩邫邭邲邷邼邽邿郀摺撷撸撙撺擀擐擗擤擢攉攥攮弋忒甙弑卟叱叽叩叨叻吒吖吆呋呒呓呔呖呃吡呗呙吣吲咂咔呷呱呤咚咛咄呶呦咝哐咭哂咴哒咧咦哓哔呲咣哕咻咿哌哙哚哜咩咪咤哝哏哞唛哧唠哽唔哳唢唣唏唑唧唪啧喏喵啉啭啁啕唿啐唼�".split(""),e=0;e!=r[223].length;++e)65533!==r[223][e].charCodeAt(0)&&(n[r[223][e]]=57088+e,t[57088+e]=r[223][e]);for(r[224]="����������������������������������������������������������������郂郃郆郈郉郋郌郍郒郔郕郖郘郙郚郞郟郠郣郤郥郩郪郬郮郰郱郲郳郵郶郷郹郺郻郼郿鄀鄁鄃鄅鄆鄇鄈鄉鄊鄋鄌鄍鄎鄏鄐鄑鄒鄓鄔鄕鄖鄗鄘鄚鄛鄜�鄝鄟鄠鄡鄤鄥鄦鄧鄨鄩鄪鄫鄬鄭鄮鄰鄲鄳鄴鄵鄶鄷鄸鄺鄻鄼鄽鄾鄿酀酁酂酄唷啖啵啶啷唳唰啜喋嗒喃喱喹喈喁喟啾嗖喑啻嗟喽喾喔喙嗪嗷嗉嘟嗑嗫嗬嗔嗦嗝嗄嗯嗥嗲嗳嗌嗍嗨嗵嗤辔嘞嘈嘌嘁嘤嘣嗾嘀嘧嘭噘嘹噗嘬噍噢噙噜噌噔嚆噤噱噫噻噼嚅嚓嚯囔囗囝囡囵囫囹囿圄圊圉圜帏帙帔帑帱帻帼�".split(""),e=0;e!=r[224].length;++e)65533!==r[224][e].charCodeAt(0)&&(n[r[224][e]]=57344+e,t[57344+e]=r[224][e]);for(r[225]="����������������������������������������������������������������酅酇酈酑酓酔酕酖酘酙酛酜酟酠酦酧酨酫酭酳酺酻酼醀醁醂醃醄醆醈醊醎醏醓醔醕醖醗醘醙醜醝醞醟醠醡醤醥醦醧醨醩醫醬醰醱醲醳醶醷醸醹醻�醼醽醾醿釀釁釂釃釄釅釆釈釋釐釒釓釔釕釖釗釘釙釚釛針釞釟釠釡釢釣釤釥帷幄幔幛幞幡岌屺岍岐岖岈岘岙岑岚岜岵岢岽岬岫岱岣峁岷峄峒峤峋峥崂崃崧崦崮崤崞崆崛嵘崾崴崽嵬嵛嵯嵝嵫嵋嵊嵩嵴嶂嶙嶝豳嶷巅彳彷徂徇徉後徕徙徜徨徭徵徼衢彡犭犰犴犷犸狃狁狎狍狒狨狯狩狲狴狷猁狳猃狺�".split(""),e=0;e!=r[225].length;++e)65533!==r[225][e].charCodeAt(0)&&(n[r[225][e]]=57600+e,t[57600+e]=r[225][e]);for(r[226]="����������������������������������������������������������������釦釧釨釩釪釫釬釭釮釯釰釱釲釳釴釵釶釷釸釹釺釻釼釽釾釿鈀鈁鈂鈃鈄鈅鈆鈇鈈鈉鈊鈋鈌鈍鈎鈏鈐鈑鈒鈓鈔鈕鈖鈗鈘鈙鈚鈛鈜鈝鈞鈟鈠鈡鈢鈣鈤�鈥鈦鈧鈨鈩鈪鈫鈬鈭鈮鈯鈰鈱鈲鈳鈴鈵鈶鈷鈸鈹鈺鈻鈼鈽鈾鈿鉀鉁鉂鉃鉄鉅狻猗猓猡猊猞猝猕猢猹猥猬猸猱獐獍獗獠獬獯獾舛夥飧夤夂饣饧饨饩饪饫饬饴饷饽馀馄馇馊馍馐馑馓馔馕庀庑庋庖庥庠庹庵庾庳赓廒廑廛廨廪膺忄忉忖忏怃忮怄忡忤忾怅怆忪忭忸怙怵怦怛怏怍怩怫怊怿怡恸恹恻恺恂�".split(""),e=0;e!=r[226].length;++e)65533!==r[226][e].charCodeAt(0)&&(n[r[226][e]]=57856+e,t[57856+e]=r[226][e]);for(r[227]="����������������������������������������������������������������鉆鉇鉈鉉鉊鉋鉌鉍鉎鉏鉐鉑鉒鉓鉔鉕鉖鉗鉘鉙鉚鉛鉜鉝鉞鉟鉠鉡鉢鉣鉤鉥鉦鉧鉨鉩鉪鉫鉬鉭鉮鉯鉰鉱鉲鉳鉵鉶鉷鉸鉹鉺鉻鉼鉽鉾鉿銀銁銂銃銄銅�銆銇銈銉銊銋銌銍銏銐銑銒銓銔銕銖銗銘銙銚銛銜銝銞銟銠銡銢銣銤銥銦銧恪恽悖悚悭悝悃悒悌悛惬悻悱惝惘惆惚悴愠愦愕愣惴愀愎愫慊慵憬憔憧憷懔懵忝隳闩闫闱闳闵闶闼闾阃阄阆阈阊阋阌阍阏阒阕阖阗阙阚丬爿戕氵汔汜汊沣沅沐沔沌汨汩汴汶沆沩泐泔沭泷泸泱泗沲泠泖泺泫泮沱泓泯泾�".split(""),e=0;e!=r[227].length;++e)65533!==r[227][e].charCodeAt(0)&&(n[r[227][e]]=58112+e,t[58112+e]=r[227][e]);for(r[228]="����������������������������������������������������������������銨銩銪銫銬銭銯銰銱銲銳銴銵銶銷銸銹銺銻銼銽銾銿鋀鋁鋂鋃鋄鋅鋆鋇鋉鋊鋋鋌鋍鋎鋏鋐鋑鋒鋓鋔鋕鋖鋗鋘鋙鋚鋛鋜鋝鋞鋟鋠鋡鋢鋣鋤鋥鋦鋧鋨�鋩鋪鋫鋬鋭鋮鋯鋰鋱鋲鋳鋴鋵鋶鋷鋸鋹鋺鋻鋼鋽鋾鋿錀錁錂錃錄錅錆錇錈錉洹洧洌浃浈洇洄洙洎洫浍洮洵洚浏浒浔洳涑浯涞涠浞涓涔浜浠浼浣渚淇淅淞渎涿淠渑淦淝淙渖涫渌涮渫湮湎湫溲湟溆湓湔渲渥湄滟溱溘滠漭滢溥溧溽溻溷滗溴滏溏滂溟潢潆潇漤漕滹漯漶潋潴漪漉漩澉澍澌潸潲潼潺濑�".split(""),e=0;e!=r[228].length;++e)65533!==r[228][e].charCodeAt(0)&&(n[r[228][e]]=58368+e,t[58368+e]=r[228][e]);for(r[229]="����������������������������������������������������������������錊錋錌錍錎錏錐錑錒錓錔錕錖錗錘錙錚錛錜錝錞錟錠錡錢錣錤錥錦錧錨錩錪錫錬錭錮錯錰錱録錳錴錵錶錷錸錹錺錻錼錽錿鍀鍁鍂鍃鍄鍅鍆鍇鍈鍉�鍊鍋鍌鍍鍎鍏鍐鍑鍒鍓鍔鍕鍖鍗鍘鍙鍚鍛鍜鍝鍞鍟鍠鍡鍢鍣鍤鍥鍦鍧鍨鍩鍫濉澧澹澶濂濡濮濞濠濯瀚瀣瀛瀹瀵灏灞宀宄宕宓宥宸甯骞搴寤寮褰寰蹇謇辶迓迕迥迮迤迩迦迳迨逅逄逋逦逑逍逖逡逵逶逭逯遄遑遒遐遨遘遢遛暹遴遽邂邈邃邋彐彗彖彘尻咫屐屙孱屣屦羼弪弩弭艴弼鬻屮妁妃妍妩妪妣�".split(""),e=0;e!=r[229].length;++e)65533!==r[229][e].charCodeAt(0)&&(n[r[229][e]]=58624+e,t[58624+e]=r[229][e]);for(r[230]="����������������������������������������������������������������鍬鍭鍮鍯鍰鍱鍲鍳鍴鍵鍶鍷鍸鍹鍺鍻鍼鍽鍾鍿鎀鎁鎂鎃鎄鎅鎆鎇鎈鎉鎊鎋鎌鎍鎎鎐鎑鎒鎓鎔鎕鎖鎗鎘鎙鎚鎛鎜鎝鎞鎟鎠鎡鎢鎣鎤鎥鎦鎧鎨鎩鎪鎫�鎬鎭鎮鎯鎰鎱鎲鎳鎴鎵鎶鎷鎸鎹鎺鎻鎼鎽鎾鎿鏀鏁鏂鏃鏄鏅鏆鏇鏈鏉鏋鏌鏍妗姊妫妞妤姒妲妯姗妾娅娆姝娈姣姘姹娌娉娲娴娑娣娓婀婧婊婕娼婢婵胬媪媛婷婺媾嫫媲嫒嫔媸嫠嫣嫱嫖嫦嫘嫜嬉嬗嬖嬲嬷孀尕尜孚孥孳孑孓孢驵驷驸驺驿驽骀骁骅骈骊骐骒骓骖骘骛骜骝骟骠骢骣骥骧纟纡纣纥纨纩�".split(""),e=0;e!=r[230].length;++e)65533!==r[230][e].charCodeAt(0)&&(n[r[230][e]]=58880+e,t[58880+e]=r[230][e]);for(r[231]="����������������������������������������������������������������鏎鏏鏐鏑鏒鏓鏔鏕鏗鏘鏙鏚鏛鏜鏝鏞鏟鏠鏡鏢鏣鏤鏥鏦鏧鏨鏩鏪鏫鏬鏭鏮鏯鏰鏱鏲鏳鏴鏵鏶鏷鏸鏹鏺鏻鏼鏽鏾鏿鐀鐁鐂鐃鐄鐅鐆鐇鐈鐉鐊鐋鐌鐍�鐎鐏鐐鐑鐒鐓鐔鐕鐖鐗鐘鐙鐚鐛鐜鐝鐞鐟鐠鐡鐢鐣鐤鐥鐦鐧鐨鐩鐪鐫鐬鐭鐮纭纰纾绀绁绂绉绋绌绐绔绗绛绠绡绨绫绮绯绱绲缍绶绺绻绾缁缂缃缇缈缋缌缏缑缒缗缙缜缛缟缡缢缣缤缥缦缧缪缫缬缭缯缰缱缲缳缵幺畿巛甾邕玎玑玮玢玟珏珂珑玷玳珀珉珈珥珙顼琊珩珧珞玺珲琏琪瑛琦琥琨琰琮琬�".split(""),e=0;e!=r[231].length;++e)65533!==r[231][e].charCodeAt(0)&&(n[r[231][e]]=59136+e,t[59136+e]=r[231][e]);for(r[232]="����������������������������������������������������������������鐯鐰鐱鐲鐳鐴鐵鐶鐷鐸鐹鐺鐻鐼鐽鐿鑀鑁鑂鑃鑄鑅鑆鑇鑈鑉鑊鑋鑌鑍鑎鑏鑐鑑鑒鑓鑔鑕鑖鑗鑘鑙鑚鑛鑜鑝鑞鑟鑠鑡鑢鑣鑤鑥鑦鑧鑨鑩鑪鑬鑭鑮鑯�鑰鑱鑲鑳鑴鑵鑶鑷鑸鑹鑺鑻鑼鑽鑾鑿钀钁钂钃钄钑钖钘铇铏铓铔铚铦铻锜锠琛琚瑁瑜瑗瑕瑙瑷瑭瑾璜璎璀璁璇璋璞璨璩璐璧瓒璺韪韫韬杌杓杞杈杩枥枇杪杳枘枧杵枨枞枭枋杷杼柰栉柘栊柩枰栌柙枵柚枳柝栀柃枸柢栎柁柽栲栳桠桡桎桢桄桤梃栝桕桦桁桧桀栾桊桉栩梵梏桴桷梓桫棂楮棼椟椠棹�".split(""),e=0;e!=r[232].length;++e)65533!==r[232][e].charCodeAt(0)&&(n[r[232][e]]=59392+e,t[59392+e]=r[232][e]);for(r[233]="����������������������������������������������������������������锧锳锽镃镈镋镕镚镠镮镴镵長镸镹镺镻镼镽镾門閁閂閃閄閅閆閇閈閉閊開閌閍閎閏閐閑閒間閔閕閖閗閘閙閚閛閜閝閞閟閠閡関閣閤閥閦閧閨閩閪�閫閬閭閮閯閰閱閲閳閴閵閶閷閸閹閺閻閼閽閾閿闀闁闂闃闄闅闆闇闈闉闊闋椤棰椋椁楗棣椐楱椹楠楂楝榄楫榀榘楸椴槌榇榈槎榉楦楣楹榛榧榻榫榭槔榱槁槊槟榕槠榍槿樯槭樗樘橥槲橄樾檠橐橛樵檎橹樽樨橘橼檑檐檩檗檫猷獒殁殂殇殄殒殓殍殚殛殡殪轫轭轱轲轳轵轶轸轷轹轺轼轾辁辂辄辇辋�".split(""),e=0;e!=r[233].length;++e)65533!==r[233][e].charCodeAt(0)&&(n[r[233][e]]=59648+e,t[59648+e]=r[233][e]);for(r[234]="����������������������������������������������������������������闌闍闎闏闐闑闒闓闔闕闖闗闘闙闚闛關闝闞闟闠闡闢闣闤闥闦闧闬闿阇阓阘阛阞阠阣阤阥阦阧阨阩阫阬阭阯阰阷阸阹阺阾陁陃陊陎陏陑陒陓陖陗�陘陙陚陜陝陞陠陣陥陦陫陭陮陯陰陱陳陸陹険陻陼陽陾陿隀隁隂隃隄隇隉隊辍辎辏辘辚軎戋戗戛戟戢戡戥戤戬臧瓯瓴瓿甏甑甓攴旮旯旰昊昙杲昃昕昀炅曷昝昴昱昶昵耆晟晔晁晏晖晡晗晷暄暌暧暝暾曛曜曦曩贲贳贶贻贽赀赅赆赈赉赇赍赕赙觇觊觋觌觎觏觐觑牮犟牝牦牯牾牿犄犋犍犏犒挈挲掰�".split(""),e=0;e!=r[234].length;++e)65533!==r[234][e].charCodeAt(0)&&(n[r[234][e]]=59904+e,t[59904+e]=r[234][e]);for(r[235]="����������������������������������������������������������������隌階隑隒隓隕隖隚際隝隞隟隠隡隢隣隤隥隦隨隩險隫隬隭隮隯隱隲隴隵隷隸隺隻隿雂雃雈雊雋雐雑雓雔雖雗雘雙雚雛雜雝雞雟雡離難雤雥雦雧雫�雬雭雮雰雱雲雴雵雸雺電雼雽雿霂霃霅霊霋霌霐霑霒霔霕霗霘霙霚霛霝霟霠搿擘耄毪毳毽毵毹氅氇氆氍氕氘氙氚氡氩氤氪氲攵敕敫牍牒牖爰虢刖肟肜肓肼朊肽肱肫肭肴肷胧胨胩胪胛胂胄胙胍胗朐胝胫胱胴胭脍脎胲胼朕脒豚脶脞脬脘脲腈腌腓腴腙腚腱腠腩腼腽腭腧塍媵膈膂膑滕膣膪臌朦臊膻�".split(""),e=0;e!=r[235].length;++e)65533!==r[235][e].charCodeAt(0)&&(n[r[235][e]]=60160+e,t[60160+e]=r[235][e]);for(r[236]="����������������������������������������������������������������霡霢霣霤霥霦霧霨霩霫霬霮霯霱霳霴霵霶霷霺霻霼霽霿靀靁靂靃靄靅靆靇靈靉靊靋靌靍靎靏靐靑靔靕靗靘靚靜靝靟靣靤靦靧靨靪靫靬靭靮靯靰靱�靲靵靷靸靹靺靻靽靾靿鞀鞁鞂鞃鞄鞆鞇鞈鞉鞊鞌鞎鞏鞐鞓鞕鞖鞗鞙鞚鞛鞜鞝臁膦欤欷欹歃歆歙飑飒飓飕飙飚殳彀毂觳斐齑斓於旆旄旃旌旎旒旖炀炜炖炝炻烀炷炫炱烨烊焐焓焖焯焱煳煜煨煅煲煊煸煺熘熳熵熨熠燠燔燧燹爝爨灬焘煦熹戾戽扃扈扉礻祀祆祉祛祜祓祚祢祗祠祯祧祺禅禊禚禧禳忑忐�".split(""),e=0;e!=r[236].length;++e)65533!==r[236][e].charCodeAt(0)&&(n[r[236][e]]=60416+e,t[60416+e]=r[236][e]);for(r[237]="����������������������������������������������������������������鞞鞟鞡鞢鞤鞥鞦鞧鞨鞩鞪鞬鞮鞰鞱鞳鞵鞶鞷鞸鞹鞺鞻鞼鞽鞾鞿韀韁韂韃韄韅韆韇韈韉韊韋韌韍韎韏韐韑韒韓韔韕韖韗韘韙韚韛韜韝韞韟韠韡韢韣�韤韥韨韮韯韰韱韲韴韷韸韹韺韻韼韽韾響頀頁頂頃頄項順頇須頉頊頋頌頍頎怼恝恚恧恁恙恣悫愆愍慝憩憝懋懑戆肀聿沓泶淼矶矸砀砉砗砘砑斫砭砜砝砹砺砻砟砼砥砬砣砩硎硭硖硗砦硐硇硌硪碛碓碚碇碜碡碣碲碹碥磔磙磉磬磲礅磴礓礤礞礴龛黹黻黼盱眄眍盹眇眈眚眢眙眭眦眵眸睐睑睇睃睚睨�".split(""),e=0;e!=r[237].length;++e)65533!==r[237][e].charCodeAt(0)&&(n[r[237][e]]=60672+e,t[60672+e]=r[237][e]);for(r[238]="����������������������������������������������������������������頏預頑頒頓頔頕頖頗領頙頚頛頜頝頞頟頠頡頢頣頤頥頦頧頨頩頪頫頬頭頮頯頰頱頲頳頴頵頶頷頸頹頺頻頼頽頾頿顀顁顂顃顄顅顆顇顈顉顊顋題額�顎顏顐顑顒顓顔顕顖顗願顙顚顛顜顝類顟顠顡顢顣顤顥顦顧顨顩顪顫顬顭顮睢睥睿瞍睽瞀瞌瞑瞟瞠瞰瞵瞽町畀畎畋畈畛畲畹疃罘罡罟詈罨罴罱罹羁罾盍盥蠲钅钆钇钋钊钌钍钏钐钔钗钕钚钛钜钣钤钫钪钭钬钯钰钲钴钶钷钸钹钺钼钽钿铄铈铉铊铋铌铍铎铐铑铒铕铖铗铙铘铛铞铟铠铢铤铥铧铨铪�".split(""),e=0;e!=r[238].length;++e)65533!==r[238][e].charCodeAt(0)&&(n[r[238][e]]=60928+e,t[60928+e]=r[238][e]);for(r[239]="����������������������������������������������������������������顯顰顱顲顳顴颋颎颒颕颙颣風颩颪颫颬颭颮颯颰颱颲颳颴颵颶颷颸颹颺颻颼颽颾颿飀飁飂飃飄飅飆飇飈飉飊飋飌飍飏飐飔飖飗飛飜飝飠飡飢飣飤�飥飦飩飪飫飬飭飮飯飰飱飲飳飴飵飶飷飸飹飺飻飼飽飾飿餀餁餂餃餄餅餆餇铩铫铮铯铳铴铵铷铹铼铽铿锃锂锆锇锉锊锍锎锏锒锓锔锕锖锘锛锝锞锟锢锪锫锩锬锱锲锴锶锷锸锼锾锿镂锵镄镅镆镉镌镎镏镒镓镔镖镗镘镙镛镞镟镝镡镢镤镥镦镧镨镩镪镫镬镯镱镲镳锺矧矬雉秕秭秣秫稆嵇稃稂稞稔�".split(""),e=0;e!=r[239].length;++e)65533!==r[239][e].charCodeAt(0)&&(n[r[239][e]]=61184+e,t[61184+e]=r[239][e]);for(r[240]="����������������������������������������������������������������餈餉養餋餌餎餏餑餒餓餔餕餖餗餘餙餚餛餜餝餞餟餠餡餢餣餤餥餦餧館餩餪餫餬餭餯餰餱餲餳餴餵餶餷餸餹餺餻餼餽餾餿饀饁饂饃饄饅饆饇饈饉�饊饋饌饍饎饏饐饑饒饓饖饗饘饙饚饛饜饝饞饟饠饡饢饤饦饳饸饹饻饾馂馃馉稹稷穑黏馥穰皈皎皓皙皤瓞瓠甬鸠鸢鸨鸩鸪鸫鸬鸲鸱鸶鸸鸷鸹鸺鸾鹁鹂鹄鹆鹇鹈鹉鹋鹌鹎鹑鹕鹗鹚鹛鹜鹞鹣鹦鹧鹨鹩鹪鹫鹬鹱鹭鹳疒疔疖疠疝疬疣疳疴疸痄疱疰痃痂痖痍痣痨痦痤痫痧瘃痱痼痿瘐瘀瘅瘌瘗瘊瘥瘘瘕瘙�".split(""),e=0;e!=r[240].length;++e)65533!==r[240][e].charCodeAt(0)&&(n[r[240][e]]=61440+e,t[61440+e]=r[240][e]);for(r[241]="����������������������������������������������������������������馌馎馚馛馜馝馞馟馠馡馢馣馤馦馧馩馪馫馬馭馮馯馰馱馲馳馴馵馶馷馸馹馺馻馼馽馾馿駀駁駂駃駄駅駆駇駈駉駊駋駌駍駎駏駐駑駒駓駔駕駖駗駘�駙駚駛駜駝駞駟駠駡駢駣駤駥駦駧駨駩駪駫駬駭駮駯駰駱駲駳駴駵駶駷駸駹瘛瘼瘢瘠癀瘭瘰瘿瘵癃瘾瘳癍癞癔癜癖癫癯翊竦穸穹窀窆窈窕窦窠窬窨窭窳衤衩衲衽衿袂袢裆袷袼裉裢裎裣裥裱褚裼裨裾裰褡褙褓褛褊褴褫褶襁襦襻疋胥皲皴矜耒耔耖耜耠耢耥耦耧耩耨耱耋耵聃聆聍聒聩聱覃顸颀颃�".split(""),e=0;e!=r[241].length;++e)65533!==r[241][e].charCodeAt(0)&&(n[r[241][e]]=61696+e,t[61696+e]=r[241][e]);for(r[242]="����������������������������������������������������������������駺駻駼駽駾駿騀騁騂騃騄騅騆騇騈騉騊騋騌騍騎騏騐騑騒験騔騕騖騗騘騙騚騛騜騝騞騟騠騡騢騣騤騥騦騧騨騩騪騫騬騭騮騯騰騱騲騳騴騵騶騷騸�騹騺騻騼騽騾騿驀驁驂驃驄驅驆驇驈驉驊驋驌驍驎驏驐驑驒驓驔驕驖驗驘驙颉颌颍颏颔颚颛颞颟颡颢颥颦虍虔虬虮虿虺虼虻蚨蚍蚋蚬蚝蚧蚣蚪蚓蚩蚶蛄蚵蛎蚰蚺蚱蚯蛉蛏蚴蛩蛱蛲蛭蛳蛐蜓蛞蛴蛟蛘蛑蜃蜇蛸蜈蜊蜍蜉蜣蜻蜞蜥蜮蜚蜾蝈蜴蜱蜩蜷蜿螂蜢蝽蝾蝻蝠蝰蝌蝮螋蝓蝣蝼蝤蝙蝥螓螯螨蟒�".split(""),e=0;e!=r[242].length;++e)65533!==r[242][e].charCodeAt(0)&&(n[r[242][e]]=61952+e,t[61952+e]=r[242][e]);for(r[243]="����������������������������������������������������������������驚驛驜驝驞驟驠驡驢驣驤驥驦驧驨驩驪驫驲骃骉骍骎骔骕骙骦骩骪骫骬骭骮骯骲骳骴骵骹骻骽骾骿髃髄髆髇髈髉髊髍髎髏髐髒體髕髖髗髙髚髛髜�髝髞髠髢髣髤髥髧髨髩髪髬髮髰髱髲髳髴髵髶髷髸髺髼髽髾髿鬀鬁鬂鬄鬅鬆蟆螈螅螭螗螃螫蟥螬螵螳蟋蟓螽蟑蟀蟊蟛蟪蟠蟮蠖蠓蟾蠊蠛蠡蠹蠼缶罂罄罅舐竺竽笈笃笄笕笊笫笏筇笸笪笙笮笱笠笥笤笳笾笞筘筚筅筵筌筝筠筮筻筢筲筱箐箦箧箸箬箝箨箅箪箜箢箫箴篑篁篌篝篚篥篦篪簌篾篼簏簖簋�".split(""),e=0;e!=r[243].length;++e)65533!==r[243][e].charCodeAt(0)&&(n[r[243][e]]=62208+e,t[62208+e]=r[243][e]);for(r[244]="����������������������������������������������������������������鬇鬉鬊鬋鬌鬍鬎鬐鬑鬒鬔鬕鬖鬗鬘鬙鬚鬛鬜鬝鬞鬠鬡鬢鬤鬥鬦鬧鬨鬩鬪鬫鬬鬭鬮鬰鬱鬳鬴鬵鬶鬷鬸鬹鬺鬽鬾鬿魀魆魊魋魌魎魐魒魓魕魖魗魘魙魚�魛魜魝魞魟魠魡魢魣魤魥魦魧魨魩魪魫魬魭魮魯魰魱魲魳魴魵魶魷魸魹魺魻簟簪簦簸籁籀臾舁舂舄臬衄舡舢舣舭舯舨舫舸舻舳舴舾艄艉艋艏艚艟艨衾袅袈裘裟襞羝羟羧羯羰羲籼敉粑粝粜粞粢粲粼粽糁糇糌糍糈糅糗糨艮暨羿翎翕翥翡翦翩翮翳糸絷綦綮繇纛麸麴赳趄趔趑趱赧赭豇豉酊酐酎酏酤�".split(""),e=0;e!=r[244].length;++e)65533!==r[244][e].charCodeAt(0)&&(n[r[244][e]]=62464+e,t[62464+e]=r[244][e]);for(r[245]="����������������������������������������������������������������魼魽魾魿鮀鮁鮂鮃鮄鮅鮆鮇鮈鮉鮊鮋鮌鮍鮎鮏鮐鮑鮒鮓鮔鮕鮖鮗鮘鮙鮚鮛鮜鮝鮞鮟鮠鮡鮢鮣鮤鮥鮦鮧鮨鮩鮪鮫鮬鮭鮮鮯鮰鮱鮲鮳鮴鮵鮶鮷鮸鮹鮺�鮻鮼鮽鮾鮿鯀鯁鯂鯃鯄鯅鯆鯇鯈鯉鯊鯋鯌鯍鯎鯏鯐鯑鯒鯓鯔鯕鯖鯗鯘鯙鯚鯛酢酡酰酩酯酽酾酲酴酹醌醅醐醍醑醢醣醪醭醮醯醵醴醺豕鹾趸跫踅蹙蹩趵趿趼趺跄跖跗跚跞跎跏跛跆跬跷跸跣跹跻跤踉跽踔踝踟踬踮踣踯踺蹀踹踵踽踱蹉蹁蹂蹑蹒蹊蹰蹶蹼蹯蹴躅躏躔躐躜躞豸貂貊貅貘貔斛觖觞觚觜�".split(""),e=0;e!=r[245].length;++e)65533!==r[245][e].charCodeAt(0)&&(n[r[245][e]]=62720+e,t[62720+e]=r[245][e]);for(r[246]="����������������������������������������������������������������鯜鯝鯞鯟鯠鯡鯢鯣鯤鯥鯦鯧鯨鯩鯪鯫鯬鯭鯮鯯鯰鯱鯲鯳鯴鯵鯶鯷鯸鯹鯺鯻鯼鯽鯾鯿鰀鰁鰂鰃鰄鰅鰆鰇鰈鰉鰊鰋鰌鰍鰎鰏鰐鰑鰒鰓鰔鰕鰖鰗鰘鰙鰚�鰛鰜鰝鰞鰟鰠鰡鰢鰣鰤鰥鰦鰧鰨鰩鰪鰫鰬鰭鰮鰯鰰鰱鰲鰳鰴鰵鰶鰷鰸鰹鰺鰻觥觫觯訾謦靓雩雳雯霆霁霈霏霎霪霭霰霾龀龃龅龆龇龈龉龊龌黾鼋鼍隹隼隽雎雒瞿雠銎銮鋈錾鍪鏊鎏鐾鑫鱿鲂鲅鲆鲇鲈稣鲋鲎鲐鲑鲒鲔鲕鲚鲛鲞鲟鲠鲡鲢鲣鲥鲦鲧鲨鲩鲫鲭鲮鲰鲱鲲鲳鲴鲵鲶鲷鲺鲻鲼鲽鳄鳅鳆鳇鳊鳋�".split(""),e=0;e!=r[246].length;++e)65533!==r[246][e].charCodeAt(0)&&(n[r[246][e]]=62976+e,t[62976+e]=r[246][e]);for(r[247]="����������������������������������������������������������������鰼鰽鰾鰿鱀鱁鱂鱃鱄鱅鱆鱇鱈鱉鱊鱋鱌鱍鱎鱏鱐鱑鱒鱓鱔鱕鱖鱗鱘鱙鱚鱛鱜鱝鱞鱟鱠鱡鱢鱣鱤鱥鱦鱧鱨鱩鱪鱫鱬鱭鱮鱯鱰鱱鱲鱳鱴鱵鱶鱷鱸鱹鱺�鱻鱽鱾鲀鲃鲄鲉鲊鲌鲏鲓鲖鲗鲘鲙鲝鲪鲬鲯鲹鲾鲿鳀鳁鳂鳈鳉鳑鳒鳚鳛鳠鳡鳌鳍鳎鳏鳐鳓鳔鳕鳗鳘鳙鳜鳝鳟鳢靼鞅鞑鞒鞔鞯鞫鞣鞲鞴骱骰骷鹘骶骺骼髁髀髅髂髋髌髑魅魃魇魉魈魍魑飨餍餮饕饔髟髡髦髯髫髻髭髹鬈鬏鬓鬟鬣麽麾縻麂麇麈麋麒鏖麝麟黛黜黝黠黟黢黩黧黥黪黯鼢鼬鼯鼹鼷鼽鼾齄�".split(""),e=0;e!=r[247].length;++e)65533!==r[247][e].charCodeAt(0)&&(n[r[247][e]]=63232+e,t[63232+e]=r[247][e]);for(r[248]="����������������������������������������������������������������鳣鳤鳥鳦鳧鳨鳩鳪鳫鳬鳭鳮鳯鳰鳱鳲鳳鳴鳵鳶鳷鳸鳹鳺鳻鳼鳽鳾鳿鴀鴁鴂鴃鴄鴅鴆鴇鴈鴉鴊鴋鴌鴍鴎鴏鴐鴑鴒鴓鴔鴕鴖鴗鴘鴙鴚鴛鴜鴝鴞鴟鴠鴡�鴢鴣鴤鴥鴦鴧鴨鴩鴪鴫鴬鴭鴮鴯鴰鴱鴲鴳鴴鴵鴶鴷鴸鴹鴺鴻鴼鴽鴾鴿鵀鵁鵂�����������������������������������������������������������������������������������������������".split(""),e=0;e!=r[248].length;++e)65533!==r[248][e].charCodeAt(0)&&(n[r[248][e]]=63488+e,t[63488+e]=r[248][e]);for(r[249]="����������������������������������������������������������������鵃鵄鵅鵆鵇鵈鵉鵊鵋鵌鵍鵎鵏鵐鵑鵒鵓鵔鵕鵖鵗鵘鵙鵚鵛鵜鵝鵞鵟鵠鵡鵢鵣鵤鵥鵦鵧鵨鵩鵪鵫鵬鵭鵮鵯鵰鵱鵲鵳鵴鵵鵶鵷鵸鵹鵺鵻鵼鵽鵾鵿鶀鶁�鶂鶃鶄鶅鶆鶇鶈鶉鶊鶋鶌鶍鶎鶏鶐鶑鶒鶓鶔鶕鶖鶗鶘鶙鶚鶛鶜鶝鶞鶟鶠鶡鶢�����������������������������������������������������������������������������������������������".split(""),e=0;e!=r[249].length;++e)65533!==r[249][e].charCodeAt(0)&&(n[r[249][e]]=63744+e,t[63744+e]=r[249][e]);for(r[250]="����������������������������������������������������������������鶣鶤鶥鶦鶧鶨鶩鶪鶫鶬鶭鶮鶯鶰鶱鶲鶳鶴鶵鶶鶷鶸鶹鶺鶻鶼鶽鶾鶿鷀鷁鷂鷃鷄鷅鷆鷇鷈鷉鷊鷋鷌鷍鷎鷏鷐鷑鷒鷓鷔鷕鷖鷗鷘鷙鷚鷛鷜鷝鷞鷟鷠鷡�鷢鷣鷤鷥鷦鷧鷨鷩鷪鷫鷬鷭鷮鷯鷰鷱鷲鷳鷴鷵鷶鷷鷸鷹鷺鷻鷼鷽鷾鷿鸀鸁鸂�����������������������������������������������������������������������������������������������".split(""),e=0;e!=r[250].length;++e)65533!==r[250][e].charCodeAt(0)&&(n[r[250][e]]=64e3+e,t[64e3+e]=r[250][e]);for(r[251]="����������������������������������������������������������������鸃鸄鸅鸆鸇鸈鸉鸊鸋鸌鸍鸎鸏鸐鸑鸒鸓鸔鸕鸖鸗鸘鸙鸚鸛鸜鸝鸞鸤鸧鸮鸰鸴鸻鸼鹀鹍鹐鹒鹓鹔鹖鹙鹝鹟鹠鹡鹢鹥鹮鹯鹲鹴鹵鹶鹷鹸鹹鹺鹻鹼鹽麀�麁麃麄麅麆麉麊麌麍麎麏麐麑麔麕麖麗麘麙麚麛麜麞麠麡麢麣麤麥麧麨麩麪�����������������������������������������������������������������������������������������������".split(""),e=0;e!=r[251].length;++e)65533!==r[251][e].charCodeAt(0)&&(n[r[251][e]]=64256+e,t[64256+e]=r[251][e]);for(r[252]="����������������������������������������������������������������麫麬麭麮麯麰麱麲麳麵麶麷麹麺麼麿黀黁黂黃黅黆黇黈黊黋黌黐黒黓黕黖黗黙黚點黡黣黤黦黨黫黬黭黮黰黱黲黳黴黵黶黷黸黺黽黿鼀鼁鼂鼃鼄鼅�鼆鼇鼈鼉鼊鼌鼏鼑鼒鼔鼕鼖鼘鼚鼛鼜鼝鼞鼟鼡鼣鼤鼥鼦鼧鼨鼩鼪鼫鼭鼮鼰鼱�����������������������������������������������������������������������������������������������".split(""),e=0;e!=r[252].length;++e)65533!==r[252][e].charCodeAt(0)&&(n[r[252][e]]=64512+e,t[64512+e]=r[252][e]);for(r[253]="����������������������������������������������������������������鼲鼳鼴鼵鼶鼸鼺鼼鼿齀齁齂齃齅齆齇齈齉齊齋齌齍齎齏齒齓齔齕齖齗齘齙齚齛齜齝齞齟齠齡齢齣齤齥齦齧齨齩齪齫齬齭齮齯齰齱齲齳齴齵齶齷齸�齹齺齻齼齽齾龁龂龍龎龏龐龑龒龓龔龕龖龗龘龜龝龞龡龢龣龤龥郎凉秊裏隣�����������������������������������������������������������������������������������������������".split(""),e=0;e!=r[253].length;++e)65533!==r[253][e].charCodeAt(0)&&(n[r[253][e]]=64768+e,t[64768+e]=r[253][e]);for(r[254]="����������������������������������������������������������������兀嗀﨎﨏﨑﨓﨔礼﨟蘒﨡﨣﨤﨧﨨﨩��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������".split(""),e=0;e!=r[254].length;++e)65533!==r[254][e].charCodeAt(0)&&(n[r[254][e]]=65024+e,t[65024+e]=r[254][e]);return{enc:n,dec:t}}(),t[949]=function(){var e,t=[],n={},r=[];for(r[0]="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~��������������������������������������������������������������������������������������������������������������������������������".split(""),e=0;e!=r[0].length;++e)65533!==r[0][e].charCodeAt(0)&&(n[r[0][e]]=0+e,t[0+e]=r[0][e]);for(r[129]="�����������������������������������������������������������������갂갃갅갆갋갌갍갎갏갘갞갟갡갢갣갥갦갧갨갩갪갫갮갲갳갴������갵갶갷갺갻갽갾갿걁걂걃걄걅걆걇걈걉걊걌걎걏걐걑걒걓걕������걖걗걙걚걛걝걞걟걠걡걢걣걤걥걦걧걨걩걪걫걬걭걮걯걲걳걵걶걹걻걼걽걾걿겂겇겈겍겎겏겑겒겓겕겖겗겘겙겚겛겞겢겣겤겥겦겧겫겭겮겱겲겳겴겵겶겷겺겾겿곀곂곃곅곆곇곉곊곋곍곎곏곐곑곒곓곔곖곘곙곚곛곜곝곞곟곢곣곥곦곩곫곭곮곲곴곷곸곹곺곻곾곿괁괂괃괅괇괈괉괊괋괎괐괒괓�".split(""),e=0;e!=r[129].length;++e)65533!==r[129][e].charCodeAt(0)&&(n[r[129][e]]=33024+e,t[33024+e]=r[129][e]);for(r[130]="�����������������������������������������������������������������괔괕괖괗괙괚괛괝괞괟괡괢괣괤괥괦괧괨괪괫괮괯괰괱괲괳������괶괷괹괺괻괽괾괿굀굁굂굃굆굈굊굋굌굍굎굏굑굒굓굕굖굗������굙굚굛굜굝굞굟굠굢굤굥굦굧굨굩굪굫굮굯굱굲굷굸굹굺굾궀궃궄궅궆궇궊궋궍궎궏궑궒궓궔궕궖궗궘궙궚궛궞궟궠궡궢궣궥궦궧궨궩궪궫궬궭궮궯궰궱궲궳궴궵궶궸궹궺궻궼궽궾궿귂귃귅귆귇귉귊귋귌귍귎귏귒귔귕귖귗귘귙귚귛귝귞귟귡귢귣귥귦귧귨귩귪귫귬귭귮귯귰귱귲귳귴귵귶귷�".split(""),e=0;e!=r[130].length;++e)65533!==r[130][e].charCodeAt(0)&&(n[r[130][e]]=33280+e,t[33280+e]=r[130][e]);for(r[131]="�����������������������������������������������������������������귺귻귽귾긂긃긄긅긆긇긊긌긎긏긐긑긒긓긕긖긗긘긙긚긛긜������긝긞긟긠긡긢긣긤긥긦긧긨긩긪긫긬긭긮긯긲긳긵긶긹긻긼������긽긾긿깂깄깇깈깉깋깏깑깒깓깕깗깘깙깚깛깞깢깣깤깦깧깪깫깭깮깯깱깲깳깴깵깶깷깺깾깿꺀꺁꺂꺃꺆꺇꺈꺉꺊꺋꺍꺎꺏꺐꺑꺒꺓꺔꺕꺖꺗꺘꺙꺚꺛꺜꺝꺞꺟꺠꺡꺢꺣꺤꺥꺦꺧꺨꺩꺪꺫꺬꺭꺮꺯꺰꺱꺲꺳꺴꺵꺶꺷꺸꺹꺺꺻꺿껁껂껃껅껆껇껈껉껊껋껎껒껓껔껕껖껗껚껛껝껞껟껠껡껢껣껤껥�".split(""),e=0;e!=r[131].length;++e)65533!==r[131][e].charCodeAt(0)&&(n[r[131][e]]=33536+e,t[33536+e]=r[131][e]);for(r[132]="�����������������������������������������������������������������껦껧껩껪껬껮껯껰껱껲껳껵껶껷껹껺껻껽껾껿꼀꼁꼂꼃꼄꼅������꼆꼉꼊꼋꼌꼎꼏꼑꼒꼓꼔꼕꼖꼗꼘꼙꼚꼛꼜꼝꼞꼟꼠꼡꼢꼣������꼤꼥꼦꼧꼨꼩꼪꼫꼮꼯꼱꼳꼵꼶꼷꼸꼹꼺꼻꼾꽀꽄꽅꽆꽇꽊꽋꽌꽍꽎꽏꽑꽒꽓꽔꽕꽖꽗꽘꽙꽚꽛꽞꽟꽠꽡꽢꽣꽦꽧꽨꽩꽪꽫꽬꽭꽮꽯꽰꽱꽲꽳꽴꽵꽶꽷꽸꽺꽻꽼꽽꽾꽿꾁꾂꾃꾅꾆꾇꾉꾊꾋꾌꾍꾎꾏꾒꾓꾔꾖꾗꾘꾙꾚꾛꾝꾞꾟꾠꾡꾢꾣꾤꾥꾦꾧꾨꾩꾪꾫꾬꾭꾮꾯꾰꾱꾲꾳꾴꾵꾶꾷꾺꾻꾽꾾�".split(""),e=0;e!=r[132].length;++e)65533!==r[132][e].charCodeAt(0)&&(n[r[132][e]]=33792+e,t[33792+e]=r[132][e]);for(r[133]="�����������������������������������������������������������������꾿꿁꿂꿃꿄꿅꿆꿊꿌꿏꿐꿑꿒꿓꿕꿖꿗꿘꿙꿚꿛꿝꿞꿟꿠꿡������꿢꿣꿤꿥꿦꿧꿪꿫꿬꿭꿮꿯꿲꿳꿵꿶꿷꿹꿺꿻꿼꿽꿾꿿뀂뀃������뀅뀆뀇뀈뀉뀊뀋뀍뀎뀏뀑뀒뀓뀕뀖뀗뀘뀙뀚뀛뀞뀟뀠뀡뀢뀣뀤뀥뀦뀧뀩뀪뀫뀬뀭뀮뀯뀰뀱뀲뀳뀴뀵뀶뀷뀸뀹뀺뀻뀼뀽뀾뀿끀끁끂끃끆끇끉끋끍끏끐끑끒끖끘끚끛끜끞끟끠끡끢끣끤끥끦끧끨끩끪끫끬끭끮끯끰끱끲끳끴끵끶끷끸끹끺끻끾끿낁낂낃낅낆낇낈낉낊낋낎낐낒낓낔낕낖낗낛낝낞낣낤�".split(""),e=0;e!=r[133].length;++e)65533!==r[133][e].charCodeAt(0)&&(n[r[133][e]]=34048+e,t[34048+e]=r[133][e]);for(r[134]="�����������������������������������������������������������������낥낦낧낪낰낲낶낷낹낺낻낽낾낿냀냁냂냃냆냊냋냌냍냎냏냒������냓냕냖냗냙냚냛냜냝냞냟냡냢냣냤냦냧냨냩냪냫냬냭냮냯냰������냱냲냳냴냵냶냷냸냹냺냻냼냽냾냿넀넁넂넃넄넅넆넇넊넍넎넏넑넔넕넖넗넚넞넟넠넡넢넦넧넩넪넫넭넮넯넰넱넲넳넶넺넻넼넽넾넿녂녃녅녆녇녉녊녋녌녍녎녏녒녓녖녗녙녚녛녝녞녟녡녢녣녤녥녦녧녨녩녪녫녬녭녮녯녰녱녲녳녴녵녶녷녺녻녽녾녿놁놃놄놅놆놇놊놌놎놏놐놑놕놖놗놙놚놛놝�".split(""),e=0;e!=r[134].length;++e)65533!==r[134][e].charCodeAt(0)&&(n[r[134][e]]=34304+e,t[34304+e]=r[134][e]);for(r[135]="�����������������������������������������������������������������놞놟놠놡놢놣놤놥놦놧놩놪놫놬놭놮놯놰놱놲놳놴놵놶놷놸������놹놺놻놼놽놾놿뇀뇁뇂뇃뇄뇅뇆뇇뇈뇉뇊뇋뇍뇎뇏뇑뇒뇓뇕������뇖뇗뇘뇙뇚뇛뇞뇠뇡뇢뇣뇤뇥뇦뇧뇪뇫뇭뇮뇯뇱뇲뇳뇴뇵뇶뇷뇸뇺뇼뇾뇿눀눁눂눃눆눇눉눊눍눎눏눐눑눒눓눖눘눚눛눜눝눞눟눡눢눣눤눥눦눧눨눩눪눫눬눭눮눯눰눱눲눳눵눶눷눸눹눺눻눽눾눿뉀뉁뉂뉃뉄뉅뉆뉇뉈뉉뉊뉋뉌뉍뉎뉏뉐뉑뉒뉓뉔뉕뉖뉗뉙뉚뉛뉝뉞뉟뉡뉢뉣뉤뉥뉦뉧뉪뉫뉬뉭뉮�".split(""),e=0;e!=r[135].length;++e)65533!==r[135][e].charCodeAt(0)&&(n[r[135][e]]=34560+e,t[34560+e]=r[135][e]);for(r[136]="�����������������������������������������������������������������뉯뉰뉱뉲뉳뉶뉷뉸뉹뉺뉻뉽뉾뉿늀늁늂늃늆늇늈늊늋늌늍늎������늏늒늓늕늖늗늛늜늝늞늟늢늤늧늨늩늫늭늮늯늱늲늳늵늶늷������늸늹늺늻늼늽늾늿닀닁닂닃닄닅닆닇닊닋닍닎닏닑닓닔닕닖닗닚닜닞닟닠닡닣닧닩닪닰닱닲닶닼닽닾댂댃댅댆댇댉댊댋댌댍댎댏댒댖댗댘댙댚댛댝댞댟댠댡댢댣댤댥댦댧댨댩댪댫댬댭댮댯댰댱댲댳댴댵댶댷댸댹댺댻댼댽댾댿덀덁덂덃덄덅덆덇덈덉덊덋덌덍덎덏덐덑덒덓덗덙덚덝덠덡덢덣�".split(""),e=0;e!=r[136].length;++e)65533!==r[136][e].charCodeAt(0)&&(n[r[136][e]]=34816+e,t[34816+e]=r[136][e]);for(r[137]="�����������������������������������������������������������������덦덨덪덬덭덯덲덳덵덶덷덹덺덻덼덽덾덿뎂뎆뎇뎈뎉뎊뎋뎍������뎎뎏뎑뎒뎓뎕뎖뎗뎘뎙뎚뎛뎜뎝뎞뎟뎢뎣뎤뎥뎦뎧뎩뎪뎫뎭������뎮뎯뎰뎱뎲뎳뎴뎵뎶뎷뎸뎹뎺뎻뎼뎽뎾뎿돀돁돂돃돆돇돉돊돍돏돑돒돓돖돘돚돜돞돟돡돢돣돥돦돧돩돪돫돬돭돮돯돰돱돲돳돴돵돶돷돸돹돺돻돽돾돿됀됁됂됃됄됅됆됇됈됉됊됋됌됍됎됏됑됒됓됔됕됖됗됙됚됛됝됞됟됡됢됣됤됥됦됧됪됬됭됮됯됰됱됲됳됵됶됷됸됹됺됻됼됽됾됿둀둁둂둃둄�".split(""),e=0;e!=r[137].length;++e)65533!==r[137][e].charCodeAt(0)&&(n[r[137][e]]=35072+e,t[35072+e]=r[137][e]);for(r[138]="�����������������������������������������������������������������둅둆둇둈둉둊둋둌둍둎둏둒둓둕둖둗둙둚둛둜둝둞둟둢둤둦������둧둨둩둪둫둭둮둯둰둱둲둳둴둵둶둷둸둹둺둻둼둽둾둿뒁뒂������뒃뒄뒅뒆뒇뒉뒊뒋뒌뒍뒎뒏뒐뒑뒒뒓뒔뒕뒖뒗뒘뒙뒚뒛뒜뒞뒟뒠뒡뒢뒣뒥뒦뒧뒩뒪뒫뒭뒮뒯뒰뒱뒲뒳뒴뒶뒸뒺뒻뒼뒽뒾뒿듁듂듃듅듆듇듉듊듋듌듍듎듏듑듒듓듔듖듗듘듙듚듛듞듟듡듢듥듧듨듩듪듫듮듰듲듳듴듵듶듷듹듺듻듼듽듾듿딀딁딂딃딄딅딆딇딈딉딊딋딌딍딎딏딐딑딒딓딖딗딙딚딝�".split(""),e=0;e!=r[138].length;++e)65533!==r[138][e].charCodeAt(0)&&(n[r[138][e]]=35328+e,t[35328+e]=r[138][e]);for(r[139]="�����������������������������������������������������������������딞딟딠딡딢딣딦딫딬딭딮딯딲딳딵딶딷딹딺딻딼딽딾딿땂땆������땇땈땉땊땎땏땑땒땓땕땖땗땘땙땚땛땞땢땣땤땥땦땧땨땩땪������땫땬땭땮땯땰땱땲땳땴땵땶땷땸땹땺땻땼땽땾땿떀떁떂떃떄떅떆떇떈떉떊떋떌떍떎떏떐떑떒떓떔떕떖떗떘떙떚떛떜떝떞떟떢떣떥떦떧떩떬떭떮떯떲떶떷떸떹떺떾떿뗁뗂뗃뗅뗆뗇뗈뗉뗊뗋뗎뗒뗓뗔뗕뗖뗗뗙뗚뗛뗜뗝뗞뗟뗠뗡뗢뗣뗤뗥뗦뗧뗨뗩뗪뗫뗭뗮뗯뗰뗱뗲뗳뗴뗵뗶뗷뗸뗹뗺뗻뗼뗽뗾뗿�".split(""),e=0;e!=r[139].length;++e)65533!==r[139][e].charCodeAt(0)&&(n[r[139][e]]=35584+e,t[35584+e]=r[139][e]);for(r[140]="�����������������������������������������������������������������똀똁똂똃똄똅똆똇똈똉똊똋똌똍똎똏똒똓똕똖똗똙똚똛똜똝������똞똟똠똡똢똣똤똦똧똨똩똪똫똭똮똯똰똱똲똳똵똶똷똸똹똺������똻똼똽똾똿뙀뙁뙂뙃뙄뙅뙆뙇뙉뙊뙋뙌뙍뙎뙏뙐뙑뙒뙓뙔뙕뙖뙗뙘뙙뙚뙛뙜뙝뙞뙟뙠뙡뙢뙣뙥뙦뙧뙩뙪뙫뙬뙭뙮뙯뙰뙱뙲뙳뙴뙵뙶뙷뙸뙹뙺뙻뙼뙽뙾뙿뚀뚁뚂뚃뚄뚅뚆뚇뚈뚉뚊뚋뚌뚍뚎뚏뚐뚑뚒뚓뚔뚕뚖뚗뚘뚙뚚뚛뚞뚟뚡뚢뚣뚥뚦뚧뚨뚩뚪뚭뚮뚯뚰뚲뚳뚴뚵뚶뚷뚸뚹뚺뚻뚼뚽뚾뚿뛀뛁뛂�".split(""),e=0;e!=r[140].length;++e)65533!==r[140][e].charCodeAt(0)&&(n[r[140][e]]=35840+e,t[35840+e]=r[140][e]);for(r[141]="�����������������������������������������������������������������뛃뛄뛅뛆뛇뛈뛉뛊뛋뛌뛍뛎뛏뛐뛑뛒뛓뛕뛖뛗뛘뛙뛚뛛뛜뛝������뛞뛟뛠뛡뛢뛣뛤뛥뛦뛧뛨뛩뛪뛫뛬뛭뛮뛯뛱뛲뛳뛵뛶뛷뛹뛺������뛻뛼뛽뛾뛿뜂뜃뜄뜆뜇뜈뜉뜊뜋뜌뜍뜎뜏뜐뜑뜒뜓뜔뜕뜖뜗뜘뜙뜚뜛뜜뜝뜞뜟뜠뜡뜢뜣뜤뜥뜦뜧뜪뜫뜭뜮뜱뜲뜳뜴뜵뜶뜷뜺뜼뜽뜾뜿띀띁띂띃띅띆띇띉띊띋띍띎띏띐띑띒띓띖띗띘띙띚띛띜띝띞띟띡띢띣띥띦띧띩띪띫띬띭띮띯띲띴띶띷띸띹띺띻띾띿랁랂랃랅랆랇랈랉랊랋랎랓랔랕랚랛랝랞�".split(""),e=0;e!=r[141].length;++e)65533!==r[141][e].charCodeAt(0)&&(n[r[141][e]]=36096+e,t[36096+e]=r[141][e]);for(r[142]="�����������������������������������������������������������������랟랡랢랣랤랥랦랧랪랮랯랰랱랲랳랶랷랹랺랻랼랽랾랿럀럁������럂럃럄럅럆럈럊럋럌럍럎럏럐럑럒럓럔럕럖럗럘럙럚럛럜럝������럞럟럠럡럢럣럤럥럦럧럨럩럪럫럮럯럱럲럳럵럶럷럸럹럺럻럾렂렃렄렅렆렊렋렍렎렏렑렒렓렔렕렖렗렚렜렞렟렠렡렢렣렦렧렩렪렫렭렮렯렰렱렲렳렶렺렻렼렽렾렿롁롂롃롅롆롇롈롉롊롋롌롍롎롏롐롒롔롕롖롗롘롙롚롛롞롟롡롢롣롥롦롧롨롩롪롫롮롰롲롳롴롵롶롷롹롺롻롽롾롿뢀뢁뢂뢃뢄�".split(""),e=0;e!=r[142].length;++e)65533!==r[142][e].charCodeAt(0)&&(n[r[142][e]]=36352+e,t[36352+e]=r[142][e]);for(r[143]="�����������������������������������������������������������������뢅뢆뢇뢈뢉뢊뢋뢌뢎뢏뢐뢑뢒뢓뢔뢕뢖뢗뢘뢙뢚뢛뢜뢝뢞뢟������뢠뢡뢢뢣뢤뢥뢦뢧뢩뢪뢫뢬뢭뢮뢯뢱뢲뢳뢵뢶뢷뢹뢺뢻뢼뢽������뢾뢿룂룄룆룇룈룉룊룋룍룎룏룑룒룓룕룖룗룘룙룚룛룜룞룠룢룣룤룥룦룧룪룫룭룮룯룱룲룳룴룵룶룷룺룼룾룿뤀뤁뤂뤃뤅뤆뤇뤈뤉뤊뤋뤌뤍뤎뤏뤐뤑뤒뤓뤔뤕뤖뤗뤙뤚뤛뤜뤝뤞뤟뤡뤢뤣뤤뤥뤦뤧뤨뤩뤪뤫뤬뤭뤮뤯뤰뤱뤲뤳뤴뤵뤶뤷뤸뤹뤺뤻뤾뤿륁륂륃륅륆륇륈륉륊륋륍륎륐륒륓륔륕륖륗�".split(""),e=0;e!=r[143].length;++e)65533!==r[143][e].charCodeAt(0)&&(n[r[143][e]]=36608+e,t[36608+e]=r[143][e]);for(r[144]="�����������������������������������������������������������������륚륛륝륞륟륡륢륣륤륥륦륧륪륬륮륯륰륱륲륳륶륷륹륺륻륽������륾륿릀릁릂릃릆릈릋릌릏릐릑릒릓릔릕릖릗릘릙릚릛릜릝릞������릟릠릡릢릣릤릥릦릧릨릩릪릫릮릯릱릲릳릵릶릷릸릹릺릻릾맀맂맃맄맅맆맇맊맋맍맓맔맕맖맗맚맜맟맠맢맦맧맩맪맫맭맮맯맰맱맲맳맶맻맼맽맾맿먂먃먄먅먆먇먉먊먋먌먍먎먏먐먑먒먓먔먖먗먘먙먚먛먜먝먞먟먠먡먢먣먤먥먦먧먨먩먪먫먬먭먮먯먰먱먲먳먴먵먶먷먺먻먽먾먿멁멃멄멅멆�".split(""),e=0;e!=r[144].length;++e)65533!==r[144][e].charCodeAt(0)&&(n[r[144][e]]=36864+e,t[36864+e]=r[144][e]);for(r[145]="�����������������������������������������������������������������멇멊멌멏멐멑멒멖멗멙멚멛멝멞멟멠멡멢멣멦멪멫멬멭멮멯������멲멳멵멶멷멹멺멻멼멽멾멿몀몁몂몆몈몉몊몋몍몎몏몐몑몒������몓몔몕몖몗몘몙몚몛몜몝몞몟몠몡몢몣몤몥몦몧몪몭몮몯몱몳몴몵몶몷몺몼몾몿뫀뫁뫂뫃뫅뫆뫇뫉뫊뫋뫌뫍뫎뫏뫐뫑뫒뫓뫔뫕뫖뫗뫚뫛뫜뫝뫞뫟뫠뫡뫢뫣뫤뫥뫦뫧뫨뫩뫪뫫뫬뫭뫮뫯뫰뫱뫲뫳뫴뫵뫶뫷뫸뫹뫺뫻뫽뫾뫿묁묂묃묅묆묇묈묉묊묋묌묎묐묒묓묔묕묖묗묙묚묛묝묞묟묡묢묣묤묥묦묧�".split(""),e=0;e!=r[145].length;++e)65533!==r[145][e].charCodeAt(0)&&(n[r[145][e]]=37120+e,t[37120+e]=r[145][e]);for(r[146]="�����������������������������������������������������������������묨묪묬묭묮묯묰묱묲묳묷묹묺묿뭀뭁뭂뭃뭆뭈뭊뭋뭌뭎뭑뭒������뭓뭕뭖뭗뭙뭚뭛뭜뭝뭞뭟뭠뭢뭤뭥뭦뭧뭨뭩뭪뭫뭭뭮뭯뭰뭱������뭲뭳뭴뭵뭶뭷뭸뭹뭺뭻뭼뭽뭾뭿뮀뮁뮂뮃뮄뮅뮆뮇뮉뮊뮋뮍뮎뮏뮑뮒뮓뮔뮕뮖뮗뮘뮙뮚뮛뮜뮝뮞뮟뮠뮡뮢뮣뮥뮦뮧뮩뮪뮫뮭뮮뮯뮰뮱뮲뮳뮵뮶뮸뮹뮺뮻뮼뮽뮾뮿믁믂믃믅믆믇믉믊믋믌믍믎믏믑믒믔믕믖믗믘믙믚믛믜믝믞믟믠믡믢믣믤믥믦믧믨믩믪믫믬믭믮믯믰믱믲믳믴믵믶믷믺믻믽믾밁�".split(""),e=0;e!=r[146].length;++e)65533!==r[146][e].charCodeAt(0)&&(n[r[146][e]]=37376+e,t[37376+e]=r[146][e]);for(r[147]="�����������������������������������������������������������������밃밄밅밆밇밊밎밐밒밓밙밚밠밡밢밣밦밨밪밫밬밮밯밲밳밵������밶밷밹밺밻밼밽밾밿뱂뱆뱇뱈뱊뱋뱎뱏뱑뱒뱓뱔뱕뱖뱗뱘뱙������뱚뱛뱜뱞뱟뱠뱡뱢뱣뱤뱥뱦뱧뱨뱩뱪뱫뱬뱭뱮뱯뱰뱱뱲뱳뱴뱵뱶뱷뱸뱹뱺뱻뱼뱽뱾뱿벀벁벂벃벆벇벉벊벍벏벐벑벒벓벖벘벛벜벝벞벟벢벣벥벦벩벪벫벬벭벮벯벲벶벷벸벹벺벻벾벿볁볂볃볅볆볇볈볉볊볋볌볎볒볓볔볖볗볙볚볛볝볞볟볠볡볢볣볤볥볦볧볨볩볪볫볬볭볮볯볰볱볲볳볷볹볺볻볽�".split(""),e=0;e!=r[147].length;++e)65533!==r[147][e].charCodeAt(0)&&(n[r[147][e]]=37632+e,t[37632+e]=r[147][e]);for(r[148]="�����������������������������������������������������������������볾볿봀봁봂봃봆봈봊봋봌봍봎봏봑봒봓봕봖봗봘봙봚봛봜봝������봞봟봠봡봢봣봥봦봧봨봩봪봫봭봮봯봰봱봲봳봴봵봶봷봸봹������봺봻봼봽봾봿뵁뵂뵃뵄뵅뵆뵇뵊뵋뵍뵎뵏뵑뵒뵓뵔뵕뵖뵗뵚뵛뵜뵝뵞뵟뵠뵡뵢뵣뵥뵦뵧뵩뵪뵫뵬뵭뵮뵯뵰뵱뵲뵳뵴뵵뵶뵷뵸뵹뵺뵻뵼뵽뵾뵿붂붃붅붆붋붌붍붎붏붒붔붖붗붘붛붝붞붟붠붡붢붣붥붦붧붨붩붪붫붬붭붮붯붱붲붳붴붵붶붷붹붺붻붼붽붾붿뷀뷁뷂뷃뷄뷅뷆뷇뷈뷉뷊뷋뷌뷍뷎뷏뷐뷑�".split(""),e=0;e!=r[148].length;++e)65533!==r[148][e].charCodeAt(0)&&(n[r[148][e]]=37888+e,t[37888+e]=r[148][e]);for(r[149]="�����������������������������������������������������������������뷒뷓뷖뷗뷙뷚뷛뷝뷞뷟뷠뷡뷢뷣뷤뷥뷦뷧뷨뷪뷫뷬뷭뷮뷯뷱������뷲뷳뷵뷶뷷뷹뷺뷻뷼뷽뷾뷿븁븂븄븆븇븈븉븊븋븎븏븑븒븓������븕븖븗븘븙븚븛븞븠븡븢븣븤븥븦븧븨븩븪븫븬븭븮븯븰븱븲븳븴븵븶븷븸븹븺븻븼븽븾븿빀빁빂빃빆빇빉빊빋빍빏빐빑빒빓빖빘빜빝빞빟빢빣빥빦빧빩빫빬빭빮빯빲빶빷빸빹빺빾빿뺁뺂뺃뺅뺆뺇뺈뺉뺊뺋뺎뺒뺓뺔뺕뺖뺗뺚뺛뺜뺝뺞뺟뺠뺡뺢뺣뺤뺥뺦뺧뺩뺪뺫뺬뺭뺮뺯뺰뺱뺲뺳뺴뺵뺶뺷�".split(""),e=0;e!=r[149].length;++e)65533!==r[149][e].charCodeAt(0)&&(n[r[149][e]]=38144+e,t[38144+e]=r[149][e]);for(r[150]="�����������������������������������������������������������������뺸뺹뺺뺻뺼뺽뺾뺿뻀뻁뻂뻃뻄뻅뻆뻇뻈뻉뻊뻋뻌뻍뻎뻏뻒뻓������뻕뻖뻙뻚뻛뻜뻝뻞뻟뻡뻢뻦뻧뻨뻩뻪뻫뻭뻮뻯뻰뻱뻲뻳뻴뻵������뻶뻷뻸뻹뻺뻻뻼뻽뻾뻿뼀뼂뼃뼄뼅뼆뼇뼊뼋뼌뼍뼎뼏뼐뼑뼒뼓뼔뼕뼖뼗뼚뼞뼟뼠뼡뼢뼣뼤뼥뼦뼧뼨뼩뼪뼫뼬뼭뼮뼯뼰뼱뼲뼳뼴뼵뼶뼷뼸뼹뼺뼻뼼뼽뼾뼿뽂뽃뽅뽆뽇뽉뽊뽋뽌뽍뽎뽏뽒뽓뽔뽖뽗뽘뽙뽚뽛뽜뽝뽞뽟뽠뽡뽢뽣뽤뽥뽦뽧뽨뽩뽪뽫뽬뽭뽮뽯뽰뽱뽲뽳뽴뽵뽶뽷뽸뽹뽺뽻뽼뽽뽾뽿뾀뾁뾂�".split(""),e=0;e!=r[150].length;++e)65533!==r[150][e].charCodeAt(0)&&(n[r[150][e]]=38400+e,t[38400+e]=r[150][e]);for(r[151]="�����������������������������������������������������������������뾃뾄뾅뾆뾇뾈뾉뾊뾋뾌뾍뾎뾏뾐뾑뾒뾓뾕뾖뾗뾘뾙뾚뾛뾜뾝������뾞뾟뾠뾡뾢뾣뾤뾥뾦뾧뾨뾩뾪뾫뾬뾭뾮뾯뾱뾲뾳뾴뾵뾶뾷뾸������뾹뾺뾻뾼뾽뾾뾿뿀뿁뿂뿃뿄뿆뿇뿈뿉뿊뿋뿎뿏뿑뿒뿓뿕뿖뿗뿘뿙뿚뿛뿝뿞뿠뿢뿣뿤뿥뿦뿧뿨뿩뿪뿫뿬뿭뿮뿯뿰뿱뿲뿳뿴뿵뿶뿷뿸뿹뿺뿻뿼뿽뿾뿿쀀쀁쀂쀃쀄쀅쀆쀇쀈쀉쀊쀋쀌쀍쀎쀏쀐쀑쀒쀓쀔쀕쀖쀗쀘쀙쀚쀛쀜쀝쀞쀟쀠쀡쀢쀣쀤쀥쀦쀧쀨쀩쀪쀫쀬쀭쀮쀯쀰쀱쀲쀳쀴쀵쀶쀷쀸쀹쀺쀻쀽쀾쀿�".split(""),e=0;e!=r[151].length;++e)65533!==r[151][e].charCodeAt(0)&&(n[r[151][e]]=38656+e,t[38656+e]=r[151][e]);for(r[152]="�����������������������������������������������������������������쁀쁁쁂쁃쁄쁅쁆쁇쁈쁉쁊쁋쁌쁍쁎쁏쁐쁒쁓쁔쁕쁖쁗쁙쁚쁛������쁝쁞쁟쁡쁢쁣쁤쁥쁦쁧쁪쁫쁬쁭쁮쁯쁰쁱쁲쁳쁴쁵쁶쁷쁸쁹������쁺쁻쁼쁽쁾쁿삀삁삂삃삄삅삆삇삈삉삊삋삌삍삎삏삒삓삕삖삗삙삚삛삜삝삞삟삢삤삦삧삨삩삪삫삮삱삲삷삸삹삺삻삾샂샃샄샆샇샊샋샍샎샏샑샒샓샔샕샖샗샚샞샟샠샡샢샣샦샧샩샪샫샭샮샯샰샱샲샳샶샸샺샻샼샽샾샿섁섂섃섅섆섇섉섊섋섌섍섎섏섑섒섓섔섖섗섘섙섚섛섡섢섥섨섩섪섫섮�".split(""),e=0;e!=r[152].length;++e)65533!==r[152][e].charCodeAt(0)&&(n[r[152][e]]=38912+e,t[38912+e]=r[152][e]);for(r[153]="�����������������������������������������������������������������섲섳섴섵섷섺섻섽섾섿셁셂셃셄셅셆셇셊셎셏셐셑셒셓셖셗������셙셚셛셝셞셟셠셡셢셣셦셪셫셬셭셮셯셱셲셳셵셶셷셹셺셻������셼셽셾셿솀솁솂솃솄솆솇솈솉솊솋솏솑솒솓솕솗솘솙솚솛솞솠솢솣솤솦솧솪솫솭솮솯솱솲솳솴솵솶솷솸솹솺솻솼솾솿쇀쇁쇂쇃쇅쇆쇇쇉쇊쇋쇍쇎쇏쇐쇑쇒쇓쇕쇖쇙쇚쇛쇜쇝쇞쇟쇡쇢쇣쇥쇦쇧쇩쇪쇫쇬쇭쇮쇯쇲쇴쇵쇶쇷쇸쇹쇺쇻쇾쇿숁숂숃숅숆숇숈숉숊숋숎숐숒숓숔숕숖숗숚숛숝숞숡숢숣�".split(""),e=0;e!=r[153].length;++e)65533!==r[153][e].charCodeAt(0)&&(n[r[153][e]]=39168+e,t[39168+e]=r[153][e]);for(r[154]="�����������������������������������������������������������������숤숥숦숧숪숬숮숰숳숵숶숷숸숹숺숻숼숽숾숿쉀쉁쉂쉃쉄쉅������쉆쉇쉉쉊쉋쉌쉍쉎쉏쉒쉓쉕쉖쉗쉙쉚쉛쉜쉝쉞쉟쉡쉢쉣쉤쉦������쉧쉨쉩쉪쉫쉮쉯쉱쉲쉳쉵쉶쉷쉸쉹쉺쉻쉾슀슂슃슄슅슆슇슊슋슌슍슎슏슑슒슓슔슕슖슗슙슚슜슞슟슠슡슢슣슦슧슩슪슫슮슯슰슱슲슳슶슸슺슻슼슽슾슿싀싁싂싃싄싅싆싇싈싉싊싋싌싍싎싏싐싑싒싓싔싕싖싗싘싙싚싛싞싟싡싢싥싦싧싨싩싪싮싰싲싳싴싵싷싺싽싾싿쌁쌂쌃쌄쌅쌆쌇쌊쌋쌎쌏�".split(""),e=0;e!=r[154].length;++e)65533!==r[154][e].charCodeAt(0)&&(n[r[154][e]]=39424+e,t[39424+e]=r[154][e]);for(r[155]="�����������������������������������������������������������������쌐쌑쌒쌖쌗쌙쌚쌛쌝쌞쌟쌠쌡쌢쌣쌦쌧쌪쌫쌬쌭쌮쌯쌰쌱쌲������쌳쌴쌵쌶쌷쌸쌹쌺쌻쌼쌽쌾쌿썀썁썂썃썄썆썇썈썉썊썋썌썍������썎썏썐썑썒썓썔썕썖썗썘썙썚썛썜썝썞썟썠썡썢썣썤썥썦썧썪썫썭썮썯썱썳썴썵썶썷썺썻썾썿쎀쎁쎂쎃쎅쎆쎇쎉쎊쎋쎍쎎쎏쎐쎑쎒쎓쎔쎕쎖쎗쎘쎙쎚쎛쎜쎝쎞쎟쎠쎡쎢쎣쎤쎥쎦쎧쎨쎩쎪쎫쎬쎭쎮쎯쎰쎱쎲쎳쎴쎵쎶쎷쎸쎹쎺쎻쎼쎽쎾쎿쏁쏂쏃쏄쏅쏆쏇쏈쏉쏊쏋쏌쏍쏎쏏쏐쏑쏒쏓쏔쏕쏖쏗쏚�".split(""),e=0;e!=r[155].length;++e)65533!==r[155][e].charCodeAt(0)&&(n[r[155][e]]=39680+e,t[39680+e]=r[155][e]);for(r[156]="�����������������������������������������������������������������쏛쏝쏞쏡쏣쏤쏥쏦쏧쏪쏫쏬쏮쏯쏰쏱쏲쏳쏶쏷쏹쏺쏻쏼쏽쏾������쏿쐀쐁쐂쐃쐄쐅쐆쐇쐉쐊쐋쐌쐍쐎쐏쐑쐒쐓쐔쐕쐖쐗쐘쐙쐚������쐛쐜쐝쐞쐟쐠쐡쐢쐣쐥쐦쐧쐨쐩쐪쐫쐭쐮쐯쐱쐲쐳쐵쐶쐷쐸쐹쐺쐻쐾쐿쑀쑁쑂쑃쑄쑅쑆쑇쑉쑊쑋쑌쑍쑎쑏쑐쑑쑒쑓쑔쑕쑖쑗쑘쑙쑚쑛쑜쑝쑞쑟쑠쑡쑢쑣쑦쑧쑩쑪쑫쑭쑮쑯쑰쑱쑲쑳쑶쑷쑸쑺쑻쑼쑽쑾쑿쒁쒂쒃쒄쒅쒆쒇쒈쒉쒊쒋쒌쒍쒎쒏쒐쒑쒒쒓쒕쒖쒗쒘쒙쒚쒛쒝쒞쒟쒠쒡쒢쒣쒤쒥쒦쒧쒨쒩�".split(""),e=0;e!=r[156].length;++e)65533!==r[156][e].charCodeAt(0)&&(n[r[156][e]]=39936+e,t[39936+e]=r[156][e]);for(r[157]="�����������������������������������������������������������������쒪쒫쒬쒭쒮쒯쒰쒱쒲쒳쒴쒵쒶쒷쒹쒺쒻쒽쒾쒿쓀쓁쓂쓃쓄쓅������쓆쓇쓈쓉쓊쓋쓌쓍쓎쓏쓐쓑쓒쓓쓔쓕쓖쓗쓘쓙쓚쓛쓜쓝쓞쓟������쓠쓡쓢쓣쓤쓥쓦쓧쓨쓪쓫쓬쓭쓮쓯쓲쓳쓵쓶쓷쓹쓻쓼쓽쓾씂씃씄씅씆씇씈씉씊씋씍씎씏씑씒씓씕씖씗씘씙씚씛씝씞씟씠씡씢씣씤씥씦씧씪씫씭씮씯씱씲씳씴씵씶씷씺씼씾씿앀앁앂앃앆앇앋앏앐앑앒앖앚앛앜앟앢앣앥앦앧앩앪앫앬앭앮앯앲앶앷앸앹앺앻앾앿얁얂얃얅얆얈얉얊얋얎얐얒얓얔�".split(""),e=0;e!=r[157].length;++e)65533!==r[157][e].charCodeAt(0)&&(n[r[157][e]]=40192+e,t[40192+e]=r[157][e]);for(r[158]="�����������������������������������������������������������������얖얙얚얛얝얞얟얡얢얣얤얥얦얧얨얪얫얬얭얮얯얰얱얲얳얶������얷얺얿엀엁엂엃엋엍엏엒엓엕엖엗엙엚엛엜엝엞엟엢엤엦엧������엨엩엪엫엯엱엲엳엵엸엹엺엻옂옃옄옉옊옋옍옎옏옑옒옓옔옕옖옗옚옝옞옟옠옡옢옣옦옧옩옪옫옯옱옲옶옸옺옼옽옾옿왂왃왅왆왇왉왊왋왌왍왎왏왒왖왗왘왙왚왛왞왟왡왢왣왤왥왦왧왨왩왪왫왭왮왰왲왳왴왵왶왷왺왻왽왾왿욁욂욃욄욅욆욇욊욌욎욏욐욑욒욓욖욗욙욚욛욝욞욟욠욡욢욣욦�".split(""),e=0;e!=r[158].length;++e)65533!==r[158][e].charCodeAt(0)&&(n[r[158][e]]=40448+e,t[40448+e]=r[158][e]);for(r[159]="�����������������������������������������������������������������욨욪욫욬욭욮욯욲욳욵욶욷욻욼욽욾욿웂웄웆웇웈웉웊웋웎������웏웑웒웓웕웖웗웘웙웚웛웞웟웢웣웤웥웦웧웪웫웭웮웯웱웲������웳웴웵웶웷웺웻웼웾웿윀윁윂윃윆윇윉윊윋윍윎윏윐윑윒윓윖윘윚윛윜윝윞윟윢윣윥윦윧윩윪윫윬윭윮윯윲윴윶윸윹윺윻윾윿읁읂읃읅읆읇읈읉읋읎읐읙읚읛읝읞읟읡읢읣읤읥읦읧읩읪읬읭읮읯읰읱읲읳읶읷읹읺읻읿잀잁잂잆잋잌잍잏잒잓잕잙잛잜잝잞잟잢잧잨잩잪잫잮잯잱잲잳잵잶잷�".split(""),e=0;e!=r[159].length;++e)65533!==r[159][e].charCodeAt(0)&&(n[r[159][e]]=40704+e,t[40704+e]=r[159][e]);for(r[160]="�����������������������������������������������������������������잸잹잺잻잾쟂쟃쟄쟅쟆쟇쟊쟋쟍쟏쟑쟒쟓쟔쟕쟖쟗쟙쟚쟛쟜������쟞쟟쟠쟡쟢쟣쟥쟦쟧쟩쟪쟫쟭쟮쟯쟰쟱쟲쟳쟴쟵쟶쟷쟸쟹쟺������쟻쟼쟽쟾쟿젂젃젅젆젇젉젋젌젍젎젏젒젔젗젘젙젚젛젞젟젡젢젣젥젦젧젨젩젪젫젮젰젲젳젴젵젶젷젹젺젻젽젾젿졁졂졃졄졅졆졇졊졋졎졏졐졑졒졓졕졖졗졘졙졚졛졜졝졞졟졠졡졢졣졤졥졦졧졨졩졪졫졬졭졮졯졲졳졵졶졷졹졻졼졽졾졿좂좄좈좉좊좎좏좐좑좒좓좕좖좗좘좙좚좛좜좞좠좢좣좤�".split(""),e=0;e!=r[160].length;++e)65533!==r[160][e].charCodeAt(0)&&(n[r[160][e]]=40960+e,t[40960+e]=r[160][e]);for(r[161]="�����������������������������������������������������������������좥좦좧좩좪좫좬좭좮좯좰좱좲좳좴좵좶좷좸좹좺좻좾좿죀죁������죂죃죅죆죇죉죊죋죍죎죏죐죑죒죓죖죘죚죛죜죝죞죟죢죣죥������죦죧죨죩죪죫죬죭죮죯죰죱죲죳죴죶죷죸죹죺죻죾죿줁줂줃줇줈줉줊줋줎 、。·‥…¨〃­―∥\∼‘’“”〔〕〈〉《》「」『』【】±×÷≠≤≥∞∴°′″℃Å¢£¥♂♀∠⊥⌒∂∇≡≒§※☆★○●◎◇◆□■△▲▽▼→←↑↓↔〓≪≫√∽∝∵∫∬∈∋⊆⊇⊂⊃∪∩∧∨¬�".split(""),e=0;e!=r[161].length;++e)65533!==r[161][e].charCodeAt(0)&&(n[r[161][e]]=41216+e,t[41216+e]=r[161][e]);for(r[162]="�����������������������������������������������������������������줐줒줓줔줕줖줗줙줚줛줜줝줞줟줠줡줢줣줤줥줦줧줨줩줪줫������줭줮줯줰줱줲줳줵줶줷줸줹줺줻줼줽줾줿쥀쥁쥂쥃쥄쥅쥆쥇������쥈쥉쥊쥋쥌쥍쥎쥏쥒쥓쥕쥖쥗쥙쥚쥛쥜쥝쥞쥟쥢쥤쥥쥦쥧쥨쥩쥪쥫쥭쥮쥯⇒⇔∀∃´~ˇ˘˝˚˙¸˛¡¿ː∮∑∏¤℉‰◁◀▷▶♤♠♡♥♧♣⊙◈▣◐◑▒▤▥▨▧▦▩♨☏☎☜☞¶†‡↕↗↙↖↘♭♩♪♬㉿㈜№㏇™㏂㏘℡€®������������������������".split(""),e=0;e!=r[162].length;++e)65533!==r[162][e].charCodeAt(0)&&(n[r[162][e]]=41472+e,t[41472+e]=r[162][e]);for(r[163]="�����������������������������������������������������������������쥱쥲쥳쥵쥶쥷쥸쥹쥺쥻쥽쥾쥿즀즁즂즃즄즅즆즇즊즋즍즎즏������즑즒즓즔즕즖즗즚즜즞즟즠즡즢즣즤즥즦즧즨즩즪즫즬즭즮������즯즰즱즲즳즴즵즶즷즸즹즺즻즼즽즾즿짂짃짅짆짉짋짌짍짎짏짒짔짗짘짛!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[₩]^_`abcdefghijklmnopqrstuvwxyz{|} ̄�".split(""),e=0;e!=r[163].length;++e)65533!==r[163][e].charCodeAt(0)&&(n[r[163][e]]=41728+e,t[41728+e]=r[163][e]);for(r[164]="�����������������������������������������������������������������짞짟짡짣짥짦짨짩짪짫짮짲짳짴짵짶짷짺짻짽짾짿쨁쨂쨃쨄������쨅쨆쨇쨊쨎쨏쨐쨑쨒쨓쨕쨖쨗쨙쨚쨛쨜쨝쨞쨟쨠쨡쨢쨣쨤쨥������쨦쨧쨨쨪쨫쨬쨭쨮쨯쨰쨱쨲쨳쨴쨵쨶쨷쨸쨹쨺쨻쨼쨽쨾쨿쩀쩁쩂쩃쩄쩅쩆ㄱㄲㄳㄴㄵㄶㄷㄸㄹㄺㄻㄼㄽㄾㄿㅀㅁㅂㅃㅄㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎㅏㅐㅑㅒㅓㅔㅕㅖㅗㅘㅙㅚㅛㅜㅝㅞㅟㅠㅡㅢㅣㅤㅥㅦㅧㅨㅩㅪㅫㅬㅭㅮㅯㅰㅱㅲㅳㅴㅵㅶㅷㅸㅹㅺㅻㅼㅽㅾㅿㆀㆁㆂㆃㆄㆅㆆㆇㆈㆉㆊㆋㆌㆍㆎ�".split(""),e=0;e!=r[164].length;++e)65533!==r[164][e].charCodeAt(0)&&(n[r[164][e]]=41984+e,t[41984+e]=r[164][e]);for(r[165]="�����������������������������������������������������������������쩇쩈쩉쩊쩋쩎쩏쩑쩒쩓쩕쩖쩗쩘쩙쩚쩛쩞쩢쩣쩤쩥쩦쩧쩩쩪������쩫쩬쩭쩮쩯쩰쩱쩲쩳쩴쩵쩶쩷쩸쩹쩺쩻쩼쩾쩿쪀쪁쪂쪃쪅쪆������쪇쪈쪉쪊쪋쪌쪍쪎쪏쪐쪑쪒쪓쪔쪕쪖쪗쪙쪚쪛쪜쪝쪞쪟쪠쪡쪢쪣쪤쪥쪦쪧ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹ�����ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ�������ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ��������αβγδεζηθικλμνξοπρστυφχψω�������".split(""),e=0;e!=r[165].length;++e)65533!==r[165][e].charCodeAt(0)&&(n[r[165][e]]=42240+e,t[42240+e]=r[165][e]);for(r[166]="�����������������������������������������������������������������쪨쪩쪪쪫쪬쪭쪮쪯쪰쪱쪲쪳쪴쪵쪶쪷쪸쪹쪺쪻쪾쪿쫁쫂쫃쫅������쫆쫇쫈쫉쫊쫋쫎쫐쫒쫔쫕쫖쫗쫚쫛쫜쫝쫞쫟쫡쫢쫣쫤쫥쫦쫧������쫨쫩쫪쫫쫭쫮쫯쫰쫱쫲쫳쫵쫶쫷쫸쫹쫺쫻쫼쫽쫾쫿쬀쬁쬂쬃쬄쬅쬆쬇쬉쬊─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂┒┑┚┙┖┕┎┍┞┟┡┢┦┧┩┪┭┮┱┲┵┶┹┺┽┾╀╁╃╄╅╆╇╈╉╊���������������������������".split(""),e=0;e!=r[166].length;++e)65533!==r[166][e].charCodeAt(0)&&(n[r[166][e]]=42496+e,t[42496+e]=r[166][e]);for(r[167]="�����������������������������������������������������������������쬋쬌쬍쬎쬏쬑쬒쬓쬕쬖쬗쬙쬚쬛쬜쬝쬞쬟쬢쬣쬤쬥쬦쬧쬨쬩������쬪쬫쬬쬭쬮쬯쬰쬱쬲쬳쬴쬵쬶쬷쬸쬹쬺쬻쬼쬽쬾쬿쭀쭂쭃쭄������쭅쭆쭇쭊쭋쭍쭎쭏쭑쭒쭓쭔쭕쭖쭗쭚쭛쭜쭞쭟쭠쭡쭢쭣쭥쭦쭧쭨쭩쭪쭫쭬㎕㎖㎗ℓ㎘㏄㎣㎤㎥㎦㎙㎚㎛㎜㎝㎞㎟㎠㎡㎢㏊㎍㎎㎏㏏㎈㎉㏈㎧㎨㎰㎱㎲㎳㎴㎵㎶㎷㎸㎹㎀㎁㎂㎃㎄㎺㎻㎼㎽㎾㎿㎐㎑㎒㎓㎔Ω㏀㏁㎊㎋㎌㏖㏅㎭㎮㎯㏛㎩㎪㎫㎬㏝㏐㏓㏃㏉㏜㏆����������������".split(""),e=0;e!=r[167].length;++e)65533!==r[167][e].charCodeAt(0)&&(n[r[167][e]]=42752+e,t[42752+e]=r[167][e]);for(r[168]="�����������������������������������������������������������������쭭쭮쭯쭰쭱쭲쭳쭴쭵쭶쭷쭺쭻쭼쭽쭾쭿쮀쮁쮂쮃쮄쮅쮆쮇쮈������쮉쮊쮋쮌쮍쮎쮏쮐쮑쮒쮓쮔쮕쮖쮗쮘쮙쮚쮛쮝쮞쮟쮠쮡쮢쮣������쮤쮥쮦쮧쮨쮩쮪쮫쮬쮭쮮쮯쮰쮱쮲쮳쮴쮵쮶쮷쮹쮺쮻쮼쮽쮾쮿쯀쯁쯂쯃쯄ÆÐªĦ�IJ�ĿŁØŒºÞŦŊ�㉠㉡㉢㉣㉤㉥㉦㉧㉨㉩㉪㉫㉬㉭㉮㉯㉰㉱㉲㉳㉴㉵㉶㉷㉸㉹㉺㉻ⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮½⅓⅔¼¾⅛⅜⅝⅞�".split(""),e=0;e!=r[168].length;++e)65533!==r[168][e].charCodeAt(0)&&(n[r[168][e]]=43008+e,t[43008+e]=r[168][e]);for(r[169]="�����������������������������������������������������������������쯅쯆쯇쯈쯉쯊쯋쯌쯍쯎쯏쯐쯑쯒쯓쯕쯖쯗쯘쯙쯚쯛쯜쯝쯞쯟������쯠쯡쯢쯣쯥쯦쯨쯪쯫쯬쯭쯮쯯쯰쯱쯲쯳쯴쯵쯶쯷쯸쯹쯺쯻쯼������쯽쯾쯿찀찁찂찃찄찅찆찇찈찉찊찋찎찏찑찒찓찕찖찗찘찙찚찛찞찟찠찣찤æđðħıijĸŀłøœßþŧŋʼn㈀㈁㈂㈃㈄㈅㈆㈇㈈㈉㈊㈋㈌㈍㈎㈏㈐㈑㈒㈓㈔㈕㈖㈗㈘㈙㈚㈛⒜⒝⒞⒟⒠⒡⒢⒣⒤⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿⒀⒁⒂¹²³⁴ⁿ₁₂₃₄�".split(""),e=0;e!=r[169].length;++e)65533!==r[169][e].charCodeAt(0)&&(n[r[169][e]]=43264+e,t[43264+e]=r[169][e]);for(r[170]="�����������������������������������������������������������������찥찦찪찫찭찯찱찲찳찴찵찶찷찺찿챀챁챂챃챆챇챉챊챋챍챎������챏챐챑챒챓챖챚챛챜챝챞챟챡챢챣챥챧챩챪챫챬챭챮챯챱챲������챳챴챶챷챸챹챺챻챼챽챾챿첀첁첂첃첄첅첆첇첈첉첊첋첌첍첎첏첐첑첒첓ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをん������������".split(""),e=0;e!=r[170].length;++e)65533!==r[170][e].charCodeAt(0)&&(n[r[170][e]]=43520+e,t[43520+e]=r[170][e]);for(r[171]="�����������������������������������������������������������������첔첕첖첗첚첛첝첞첟첡첢첣첤첥첦첧첪첮첯첰첱첲첳첶첷첹������첺첻첽첾첿쳀쳁쳂쳃쳆쳈쳊쳋쳌쳍쳎쳏쳑쳒쳓쳕쳖쳗쳘쳙쳚������쳛쳜쳝쳞쳟쳠쳡쳢쳣쳥쳦쳧쳨쳩쳪쳫쳭쳮쳯쳱쳲쳳쳴쳵쳶쳷쳸쳹쳺쳻쳼쳽ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ���������".split(""),e=0;e!=r[171].length;++e)65533!==r[171][e].charCodeAt(0)&&(n[r[171][e]]=43776+e,t[43776+e]=r[171][e]);for(r[172]="�����������������������������������������������������������������쳾쳿촀촂촃촄촅촆촇촊촋촍촎촏촑촒촓촔촕촖촗촚촜촞촟촠������촡촢촣촥촦촧촩촪촫촭촮촯촰촱촲촳촴촵촶촷촸촺촻촼촽촾������촿쵀쵁쵂쵃쵄쵅쵆쵇쵈쵉쵊쵋쵌쵍쵎쵏쵐쵑쵒쵓쵔쵕쵖쵗쵘쵙쵚쵛쵝쵞쵟АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ���������������абвгдеёжзийклмнопрстуфхцчшщъыьэюя��������������".split(""),e=0;e!=r[172].length;++e)65533!==r[172][e].charCodeAt(0)&&(n[r[172][e]]=44032+e,t[44032+e]=r[172][e]);for(r[173]="�����������������������������������������������������������������쵡쵢쵣쵥쵦쵧쵨쵩쵪쵫쵮쵰쵲쵳쵴쵵쵶쵷쵹쵺쵻쵼쵽쵾쵿춀������춁춂춃춄춅춆춇춉춊춋춌춍춎춏춐춑춒춓춖춗춙춚춛춝춞춟������춠춡춢춣춦춨춪춫춬춭춮춯춱춲춳춴춵춶춷춸춹춺춻춼춽춾춿췀췁췂췃췅�����������������������������������������������������������������������������������������������".split(""),e=0;e!=r[173].length;++e)65533!==r[173][e].charCodeAt(0)&&(n[r[173][e]]=44288+e,t[44288+e]=r[173][e]);for(r[174]="�����������������������������������������������������������������췆췇췈췉췊췋췍췎췏췑췒췓췔췕췖췗췘췙췚췛췜췝췞췟췠췡������췢췣췤췥췦췧췩췪췫췭췮췯췱췲췳췴췵췶췷췺췼췾췿츀츁츂������츃츅츆츇츉츊츋츍츎츏츐츑츒츓츕츖츗츘츚츛츜츝츞츟츢츣츥츦츧츩츪츫�����������������������������������������������������������������������������������������������".split(""),e=0;e!=r[174].length;++e)65533!==r[174][e].charCodeAt(0)&&(n[r[174][e]]=44544+e,t[44544+e]=r[174][e]);for(r[175]="�����������������������������������������������������������������츬츭츮츯츲츴츶츷츸츹츺츻츼츽츾츿칀칁칂칃칄칅칆칇칈칉������칊칋칌칍칎칏칐칑칒칓칔칕칖칗칚칛칝칞칢칣칤칥칦칧칪칬������칮칯칰칱칲칳칶칷칹칺칻칽칾칿캀캁캂캃캆캈캊캋캌캍캎캏캒캓캕캖캗캙�����������������������������������������������������������������������������������������������".split(""),e=0;e!=r[175].length;++e)65533!==r[175][e].charCodeAt(0)&&(n[r[175][e]]=44800+e,t[44800+e]=r[175][e]);for(r[176]="�����������������������������������������������������������������캚캛캜캝캞캟캢캦캧캨캩캪캫캮캯캰캱캲캳캴캵캶캷캸캹캺������캻캼캽캾캿컀컂컃컄컅컆컇컈컉컊컋컌컍컎컏컐컑컒컓컔컕������컖컗컘컙컚컛컜컝컞컟컠컡컢컣컦컧컩컪컭컮컯컰컱컲컳컶컺컻컼컽컾컿가각간갇갈갉갊감갑값갓갔강갖갗같갚갛개객갠갤갬갭갯갰갱갸갹갼걀걋걍걔걘걜거걱건걷걸걺검겁것겄겅겆겉겊겋게겐겔겜겝겟겠겡겨격겪견겯결겸겹겻겼경곁계곈곌곕곗고곡곤곧골곪곬곯곰곱곳공곶과곽관괄괆�".split(""),e=0;e!=r[176].length;++e)65533!==r[176][e].charCodeAt(0)&&(n[r[176][e]]=45056+e,t[45056+e]=r[176][e]);for(r[177]="�����������������������������������������������������������������켂켃켅켆켇켉켊켋켌켍켎켏켒켔켖켗켘켙켚켛켝켞켟켡켢켣������켥켦켧켨켩켪켫켮켲켳켴켵켶켷켹켺켻켼켽켾켿콀콁콂콃콄������콅콆콇콈콉콊콋콌콍콎콏콐콑콒콓콖콗콙콚콛콝콞콟콠콡콢콣콦콨콪콫콬괌괍괏광괘괜괠괩괬괭괴괵괸괼굄굅굇굉교굔굘굡굣구국군굳굴굵굶굻굼굽굿궁궂궈궉권궐궜궝궤궷귀귁귄귈귐귑귓규균귤그극근귿글긁금급긋긍긔기긱긴긷길긺김깁깃깅깆깊까깍깎깐깔깖깜깝깟깠깡깥깨깩깬깰깸�".split(""),e=0;e!=r[177].length;++e)65533!==r[177][e].charCodeAt(0)&&(n[r[177][e]]=45312+e,t[45312+e]=r[177][e]);for(r[178]="�����������������������������������������������������������������콭콮콯콲콳콵콶콷콹콺콻콼콽콾콿쾁쾂쾃쾄쾆쾇쾈쾉쾊쾋쾍������쾎쾏쾐쾑쾒쾓쾔쾕쾖쾗쾘쾙쾚쾛쾜쾝쾞쾟쾠쾢쾣쾤쾥쾦쾧쾩������쾪쾫쾬쾭쾮쾯쾱쾲쾳쾴쾵쾶쾷쾸쾹쾺쾻쾼쾽쾾쾿쿀쿁쿂쿃쿅쿆쿇쿈쿉쿊쿋깹깻깼깽꺄꺅꺌꺼꺽꺾껀껄껌껍껏껐껑께껙껜껨껫껭껴껸껼꼇꼈꼍꼐꼬꼭꼰꼲꼴꼼꼽꼿꽁꽂꽃꽈꽉꽐꽜꽝꽤꽥꽹꾀꾄꾈꾐꾑꾕꾜꾸꾹꾼꿀꿇꿈꿉꿋꿍꿎꿔꿜꿨꿩꿰꿱꿴꿸뀀뀁뀄뀌뀐뀔뀜뀝뀨끄끅끈끊끌끎끓끔끕끗끙�".split(""),e=0;e!=r[178].length;++e)65533!==r[178][e].charCodeAt(0)&&(n[r[178][e]]=45568+e,t[45568+e]=r[178][e]);for(r[179]="�����������������������������������������������������������������쿌쿍쿎쿏쿐쿑쿒쿓쿔쿕쿖쿗쿘쿙쿚쿛쿜쿝쿞쿟쿢쿣쿥쿦쿧쿩������쿪쿫쿬쿭쿮쿯쿲쿴쿶쿷쿸쿹쿺쿻쿽쿾쿿퀁퀂퀃퀅퀆퀇퀈퀉퀊������퀋퀌퀍퀎퀏퀐퀒퀓퀔퀕퀖퀗퀙퀚퀛퀜퀝퀞퀟퀠퀡퀢퀣퀤퀥퀦퀧퀨퀩퀪퀫퀬끝끼끽낀낄낌낍낏낑나낙낚난낟날낡낢남납낫났낭낮낯낱낳내낵낸낼냄냅냇냈냉냐냑냔냘냠냥너넉넋넌널넒넓넘넙넛넜넝넣네넥넨넬넴넵넷넸넹녀녁년녈념녑녔녕녘녜녠노녹논놀놂놈놉놋농높놓놔놘놜놨뇌뇐뇔뇜뇝�".split(""),e=0;e!=r[179].length;++e)65533!==r[179][e].charCodeAt(0)&&(n[r[179][e]]=45824+e,t[45824+e]=r[179][e]);for(r[180]="�����������������������������������������������������������������퀮퀯퀰퀱퀲퀳퀶퀷퀹퀺퀻퀽퀾퀿큀큁큂큃큆큈큊큋큌큍큎큏������큑큒큓큕큖큗큙큚큛큜큝큞큟큡큢큣큤큥큦큧큨큩큪큫큮큯������큱큲큳큵큶큷큸큹큺큻큾큿킀킂킃킄킅킆킇킈킉킊킋킌킍킎킏킐킑킒킓킔뇟뇨뇩뇬뇰뇹뇻뇽누눅눈눋눌눔눕눗눙눠눴눼뉘뉜뉠뉨뉩뉴뉵뉼늄늅늉느늑는늘늙늚늠늡늣능늦늪늬늰늴니닉닌닐닒님닙닛닝닢다닥닦단닫달닭닮닯닳담답닷닸당닺닻닿대댁댄댈댐댑댓댔댕댜더덕덖던덛덜덞덟덤덥�".split(""),e=0;e!=r[180].length;++e)65533!==r[180][e].charCodeAt(0)&&(n[r[180][e]]=46080+e,t[46080+e]=r[180][e]);for(r[181]="�����������������������������������������������������������������킕킖킗킘킙킚킛킜킝킞킟킠킡킢킣킦킧킩킪킫킭킮킯킰킱킲������킳킶킸킺킻킼킽킾킿탂탃탅탆탇탊탋탌탍탎탏탒탖탗탘탙탚������탛탞탟탡탢탣탥탦탧탨탩탪탫탮탲탳탴탵탶탷탹탺탻탼탽탾탿턀턁턂턃턄덧덩덫덮데덱덴델뎀뎁뎃뎄뎅뎌뎐뎔뎠뎡뎨뎬도독돈돋돌돎돐돔돕돗동돛돝돠돤돨돼됐되된될됨됩됫됴두둑둔둘둠둡둣둥둬뒀뒈뒝뒤뒨뒬뒵뒷뒹듀듄듈듐듕드득든듣들듦듬듭듯등듸디딕딘딛딜딤딥딧딨딩딪따딱딴딸�".split(""),e=0;e!=r[181].length;++e)65533!==r[181][e].charCodeAt(0)&&(n[r[181][e]]=46336+e,t[46336+e]=r[181][e]);for(r[182]="�����������������������������������������������������������������턅턆턇턈턉턊턋턌턎턏턐턑턒턓턔턕턖턗턘턙턚턛턜턝턞턟������턠턡턢턣턤턥턦턧턨턩턪턫턬턭턮턯턲턳턵턶턷턹턻턼턽턾������턿텂텆텇텈텉텊텋텎텏텑텒텓텕텖텗텘텙텚텛텞텠텢텣텤텥텦텧텩텪텫텭땀땁땃땄땅땋때땍땐땔땜땝땟땠땡떠떡떤떨떪떫떰떱떳떴떵떻떼떽뗀뗄뗌뗍뗏뗐뗑뗘뗬또똑똔똘똥똬똴뙈뙤뙨뚜뚝뚠뚤뚫뚬뚱뛔뛰뛴뛸뜀뜁뜅뜨뜩뜬뜯뜰뜸뜹뜻띄띈띌띔띕띠띤띨띰띱띳띵라락란랄람랍랏랐랑랒랖랗�".split(""),e=0;e!=r[182].length;++e)65533!==r[182][e].charCodeAt(0)&&(n[r[182][e]]=46592+e,t[46592+e]=r[182][e]);for(r[183]="�����������������������������������������������������������������텮텯텰텱텲텳텴텵텶텷텸텹텺텻텽텾텿톀톁톂톃톅톆톇톉톊������톋톌톍톎톏톐톑톒톓톔톕톖톗톘톙톚톛톜톝톞톟톢톣톥톦톧������톩톪톫톬톭톮톯톲톴톶톷톸톹톻톽톾톿퇁퇂퇃퇄퇅퇆퇇퇈퇉퇊퇋퇌퇍퇎퇏래랙랜랠램랩랫랬랭랴략랸럇량러럭런럴럼럽럿렀렁렇레렉렌렐렘렙렛렝려력련렬렴렵렷렸령례롄롑롓로록론롤롬롭롯롱롸롼뢍뢨뢰뢴뢸룀룁룃룅료룐룔룝룟룡루룩룬룰룸룹룻룽뤄뤘뤠뤼뤽륀륄륌륏륑류륙륜률륨륩�".split(""),e=0;e!=r[183].length;++e)65533!==r[183][e].charCodeAt(0)&&(n[r[183][e]]=46848+e,t[46848+e]=r[183][e]);for(r[184]="�����������������������������������������������������������������퇐퇑퇒퇓퇔퇕퇖퇗퇙퇚퇛퇜퇝퇞퇟퇠퇡퇢퇣퇤퇥퇦퇧퇨퇩퇪������퇫퇬퇭퇮퇯퇰퇱퇲퇳퇵퇶퇷퇹퇺퇻퇼퇽퇾퇿툀툁툂툃툄툅툆������툈툊툋툌툍툎툏툑툒툓툔툕툖툗툘툙툚툛툜툝툞툟툠툡툢툣툤툥툦툧툨툩륫륭르륵른를름릅릇릉릊릍릎리릭린릴림립릿링마막만많맏말맑맒맘맙맛망맞맡맣매맥맨맬맴맵맷맸맹맺먀먁먈먕머먹먼멀멂멈멉멋멍멎멓메멕멘멜멤멥멧멨멩며멱면멸몃몄명몇몌모목몫몬몰몲몸몹못몽뫄뫈뫘뫙뫼�".split(""),e=0;e!=r[184].length;++e)65533!==r[184][e].charCodeAt(0)&&(n[r[184][e]]=47104+e,t[47104+e]=r[184][e]);for(r[185]="�����������������������������������������������������������������툪툫툮툯툱툲툳툵툶툷툸툹툺툻툾퉀퉂퉃퉄퉅퉆퉇퉉퉊퉋퉌������퉍퉎퉏퉐퉑퉒퉓퉔퉕퉖퉗퉘퉙퉚퉛퉝퉞퉟퉠퉡퉢퉣퉥퉦퉧퉨������퉩퉪퉫퉬퉭퉮퉯퉰퉱퉲퉳퉴퉵퉶퉷퉸퉹퉺퉻퉼퉽퉾퉿튂튃튅튆튇튉튊튋튌묀묄묍묏묑묘묜묠묩묫무묵묶문묻물묽묾뭄뭅뭇뭉뭍뭏뭐뭔뭘뭡뭣뭬뮈뮌뮐뮤뮨뮬뮴뮷므믄믈믐믓미믹민믿밀밂밈밉밋밌밍및밑바박밖밗반받발밝밞밟밤밥밧방밭배백밴밸뱀뱁뱃뱄뱅뱉뱌뱍뱐뱝버벅번벋벌벎범법벗�".split(""),e=0;e!=r[185].length;++e)65533!==r[185][e].charCodeAt(0)&&(n[r[185][e]]=47360+e,t[47360+e]=r[185][e]);for(r[186]="�����������������������������������������������������������������튍튎튏튒튓튔튖튗튘튙튚튛튝튞튟튡튢튣튥튦튧튨튩튪튫튭������튮튯튰튲튳튴튵튶튷튺튻튽튾틁틃틄틅틆틇틊틌틍틎틏틐틑������틒틓틕틖틗틙틚틛틝틞틟틠틡틢틣틦틧틨틩틪틫틬틭틮틯틲틳틵틶틷틹틺벙벚베벡벤벧벨벰벱벳벴벵벼벽변별볍볏볐병볕볘볜보복볶본볼봄봅봇봉봐봔봤봬뵀뵈뵉뵌뵐뵘뵙뵤뵨부북분붇불붉붊붐붑붓붕붙붚붜붤붰붸뷔뷕뷘뷜뷩뷰뷴뷸븀븃븅브븍븐블븜븝븟비빅빈빌빎빔빕빗빙빚빛빠빡빤�".split(""),e=0;e!=r[186].length;++e)65533!==r[186][e].charCodeAt(0)&&(n[r[186][e]]=47616+e,t[47616+e]=r[186][e]);for(r[187]="�����������������������������������������������������������������틻틼틽틾틿팂팄팆팇팈팉팊팋팏팑팒팓팕팗팘팙팚팛팞팢팣������팤팦팧팪팫팭팮팯팱팲팳팴팵팶팷팺팾팿퍀퍁퍂퍃퍆퍇퍈퍉������퍊퍋퍌퍍퍎퍏퍐퍑퍒퍓퍔퍕퍖퍗퍘퍙퍚퍛퍜퍝퍞퍟퍠퍡퍢퍣퍤퍥퍦퍧퍨퍩빨빪빰빱빳빴빵빻빼빽뺀뺄뺌뺍뺏뺐뺑뺘뺙뺨뻐뻑뻔뻗뻘뻠뻣뻤뻥뻬뼁뼈뼉뼘뼙뼛뼜뼝뽀뽁뽄뽈뽐뽑뽕뾔뾰뿅뿌뿍뿐뿔뿜뿟뿡쀼쁑쁘쁜쁠쁨쁩삐삑삔삘삠삡삣삥사삭삯산삳살삵삶삼삽삿샀상샅새색샌샐샘샙샛샜생샤�".split(""),e=0;e!=r[187].length;++e)65533!==r[187][e].charCodeAt(0)&&(n[r[187][e]]=47872+e,t[47872+e]=r[187][e]);for(r[188]="�����������������������������������������������������������������퍪퍫퍬퍭퍮퍯퍰퍱퍲퍳퍴퍵퍶퍷퍸퍹퍺퍻퍾퍿펁펂펃펅펆펇������펈펉펊펋펎펒펓펔펕펖펗펚펛펝펞펟펡펢펣펤펥펦펧펪펬펮������펯펰펱펲펳펵펶펷펹펺펻펽펾펿폀폁폂폃폆폇폊폋폌폍폎폏폑폒폓폔폕폖샥샨샬샴샵샷샹섀섄섈섐섕서석섞섟선섣설섦섧섬섭섯섰성섶세섹센셀셈셉셋셌셍셔셕션셜셤셥셧셨셩셰셴셸솅소속솎손솔솖솜솝솟송솥솨솩솬솰솽쇄쇈쇌쇔쇗쇘쇠쇤쇨쇰쇱쇳쇼쇽숀숄숌숍숏숑수숙순숟술숨숩숫숭�".split(""),e=0;e!=r[188].length;++e)65533!==r[188][e].charCodeAt(0)&&(n[r[188][e]]=48128+e,t[48128+e]=r[188][e]);for(r[189]="�����������������������������������������������������������������폗폙폚폛폜폝폞폟폠폢폤폥폦폧폨폩폪폫폮폯폱폲폳폵폶폷������폸폹폺폻폾퐀퐂퐃퐄퐅퐆퐇퐉퐊퐋퐌퐍퐎퐏퐐퐑퐒퐓퐔퐕퐖������퐗퐘퐙퐚퐛퐜퐞퐟퐠퐡퐢퐣퐤퐥퐦퐧퐨퐩퐪퐫퐬퐭퐮퐯퐰퐱퐲퐳퐴퐵퐶퐷숯숱숲숴쉈쉐쉑쉔쉘쉠쉥쉬쉭쉰쉴쉼쉽쉿슁슈슉슐슘슛슝스슥슨슬슭슴습슷승시식신싣실싫심십싯싱싶싸싹싻싼쌀쌈쌉쌌쌍쌓쌔쌕쌘쌜쌤쌥쌨쌩썅써썩썬썰썲썸썹썼썽쎄쎈쎌쏀쏘쏙쏜쏟쏠쏢쏨쏩쏭쏴쏵쏸쐈쐐쐤쐬쐰�".split(""),e=0;e!=r[189].length;++e)65533!==r[189][e].charCodeAt(0)&&(n[r[189][e]]=48384+e,t[48384+e]=r[189][e]);for(r[190]="�����������������������������������������������������������������퐸퐹퐺퐻퐼퐽퐾퐿푁푂푃푅푆푇푈푉푊푋푌푍푎푏푐푑푒푓������푔푕푖푗푘푙푚푛푝푞푟푡푢푣푥푦푧푨푩푪푫푬푮푰푱푲������푳푴푵푶푷푺푻푽푾풁풃풄풅풆풇풊풌풎풏풐풑풒풓풕풖풗풘풙풚풛풜풝쐴쐼쐽쑈쑤쑥쑨쑬쑴쑵쑹쒀쒔쒜쒸쒼쓩쓰쓱쓴쓸쓺쓿씀씁씌씐씔씜씨씩씬씰씸씹씻씽아악안앉않알앍앎앓암압앗았앙앝앞애액앤앨앰앱앳앴앵야약얀얄얇얌얍얏양얕얗얘얜얠얩어억언얹얻얼얽얾엄업없엇었엉엊엌엎�".split(""),e=0;e!=r[190].length;++e)65533!==r[190][e].charCodeAt(0)&&(n[r[190][e]]=48640+e,t[48640+e]=r[190][e]);for(r[191]="�����������������������������������������������������������������풞풟풠풡풢풣풤풥풦풧풨풪풫풬풭풮풯풰풱풲풳풴풵풶풷풸������풹풺풻풼풽풾풿퓀퓁퓂퓃퓄퓅퓆퓇퓈퓉퓊퓋퓍퓎퓏퓑퓒퓓퓕������퓖퓗퓘퓙퓚퓛퓝퓞퓠퓡퓢퓣퓤퓥퓦퓧퓩퓪퓫퓭퓮퓯퓱퓲퓳퓴퓵퓶퓷퓹퓺퓼에엑엔엘엠엡엣엥여역엮연열엶엷염엽엾엿였영옅옆옇예옌옐옘옙옛옜오옥온올옭옮옰옳옴옵옷옹옻와왁완왈왐왑왓왔왕왜왝왠왬왯왱외왹왼욀욈욉욋욍요욕욘욜욤욥욧용우욱운울욹욺움웁웃웅워웍원월웜웝웠웡웨�".split(""),e=0;e!=r[191].length;++e)65533!==r[191][e].charCodeAt(0)&&(n[r[191][e]]=48896+e,t[48896+e]=r[191][e]);for(r[192]="�����������������������������������������������������������������퓾퓿픀픁픂픃픅픆픇픉픊픋픍픎픏픐픑픒픓픖픘픙픚픛픜픝������픞픟픠픡픢픣픤픥픦픧픨픩픪픫픬픭픮픯픰픱픲픳픴픵픶픷������픸픹픺픻픾픿핁핂핃핅핆핇핈핉핊핋핎핐핒핓핔핕핖핗핚핛핝핞핟핡핢핣웩웬웰웸웹웽위윅윈윌윔윕윗윙유육윤율윰윱윳융윷으윽은을읊음읍읏응읒읓읔읕읖읗의읜읠읨읫이익인일읽읾잃임입잇있잉잊잎자작잔잖잗잘잚잠잡잣잤장잦재잭잰잴잼잽잿쟀쟁쟈쟉쟌쟎쟐쟘쟝쟤쟨쟬저적전절젊�".split(""),e=0;e!=r[192].length;++e)65533!==r[192][e].charCodeAt(0)&&(n[r[192][e]]=49152+e,t[49152+e]=r[192][e]);for(r[193]="�����������������������������������������������������������������핤핦핧핪핬핮핯핰핱핲핳핶핷핹핺핻핽핾핿햀햁햂햃햆햊햋������햌햍햎햏햑햒햓햔햕햖햗햘햙햚햛햜햝햞햟햠햡햢햣햤햦햧������햨햩햪햫햬햭햮햯햰햱햲햳햴햵햶햷햸햹햺햻햼햽햾햿헀헁헂헃헄헅헆헇점접젓정젖제젝젠젤젬젭젯젱져젼졀졈졉졌졍졔조족존졸졺좀좁좃종좆좇좋좌좍좔좝좟좡좨좼좽죄죈죌죔죕죗죙죠죡죤죵주죽준줄줅줆줌줍줏중줘줬줴쥐쥑쥔쥘쥠쥡쥣쥬쥰쥴쥼즈즉즌즐즘즙즛증지직진짇질짊짐집짓�".split(""),e=0;e!=r[193].length;++e)65533!==r[193][e].charCodeAt(0)&&(n[r[193][e]]=49408+e,t[49408+e]=r[193][e]);for(r[194]="�����������������������������������������������������������������헊헋헍헎헏헑헓헔헕헖헗헚헜헞헟헠헡헢헣헦헧헩헪헫헭헮������헯헰헱헲헳헶헸헺헻헼헽헾헿혂혃혅혆혇혉혊혋혌혍혎혏혒������혖혗혘혙혚혛혝혞혟혡혢혣혥혦혧혨혩혪혫혬혮혯혰혱혲혳혴혵혶혷혺혻징짖짙짚짜짝짠짢짤짧짬짭짯짰짱째짹짼쨀쨈쨉쨋쨌쨍쨔쨘쨩쩌쩍쩐쩔쩜쩝쩟쩠쩡쩨쩽쪄쪘쪼쪽쫀쫄쫌쫍쫏쫑쫓쫘쫙쫠쫬쫴쬈쬐쬔쬘쬠쬡쭁쭈쭉쭌쭐쭘쭙쭝쭤쭸쭹쮜쮸쯔쯤쯧쯩찌찍찐찔찜찝찡찢찧차착찬찮찰참찹찻�".split(""),e=0;e!=r[194].length;++e)65533!==r[194][e].charCodeAt(0)&&(n[r[194][e]]=49664+e,t[49664+e]=r[194][e]);for(r[195]="�����������������������������������������������������������������혽혾혿홁홂홃홄홆홇홊홌홎홏홐홒홓홖홗홙홚홛홝홞홟홠홡������홢홣홤홥홦홨홪홫홬홭홮홯홲홳홵홶홷홸홹홺홻홼홽홾홿횀������횁횂횄횆횇횈횉횊횋횎횏횑횒횓횕횖횗횘횙횚횛횜횞횠횢횣횤횥횦횧횩횪찼창찾채책챈챌챔챕챗챘챙챠챤챦챨챰챵처척천철첨첩첫첬청체첵첸첼쳄쳅쳇쳉쳐쳔쳤쳬쳰촁초촉촌촐촘촙촛총촤촨촬촹최쵠쵤쵬쵭쵯쵱쵸춈추축춘출춤춥춧충춰췄췌췐취췬췰췸췹췻췽츄츈츌츔츙츠측츤츨츰츱츳층�".split(""),e=0;e!=r[195].length;++e)65533!==r[195][e].charCodeAt(0)&&(n[r[195][e]]=49920+e,t[49920+e]=r[195][e]);for(r[196]="�����������������������������������������������������������������횫횭횮횯횱횲횳횴횵횶횷횸횺횼횽횾횿훀훁훂훃훆훇훉훊훋������훍훎훏훐훒훓훕훖훘훚훛훜훝훞훟훡훢훣훥훦훧훩훪훫훬훭������훮훯훱훲훳훴훶훷훸훹훺훻훾훿휁휂휃휅휆휇휈휉휊휋휌휍휎휏휐휒휓휔치칙친칟칠칡침칩칫칭카칵칸칼캄캅캇캉캐캑캔캘캠캡캣캤캥캬캭컁커컥컨컫컬컴컵컷컸컹케켁켄켈켐켑켓켕켜켠켤켬켭켯켰켱켸코콕콘콜콤콥콧콩콰콱콴콸쾀쾅쾌쾡쾨쾰쿄쿠쿡쿤쿨쿰쿱쿳쿵쿼퀀퀄퀑퀘퀭퀴퀵퀸퀼�".split(""),e=0;e!=r[196].length;++e)65533!==r[196][e].charCodeAt(0)&&(n[r[196][e]]=50176+e,t[50176+e]=r[196][e]);for(r[197]="�����������������������������������������������������������������휕휖휗휚휛휝휞휟휡휢휣휤휥휦휧휪휬휮휯휰휱휲휳휶휷휹������휺휻휽휾휿흀흁흂흃흅흆흈흊흋흌흍흎흏흒흓흕흚흛흜흝흞������흟흢흤흦흧흨흪흫흭흮흯흱흲흳흵흶흷흸흹흺흻흾흿힀힂힃힄힅힆힇힊힋큄큅큇큉큐큔큘큠크큭큰클큼큽킁키킥킨킬킴킵킷킹타탁탄탈탉탐탑탓탔탕태택탠탤탬탭탯탰탱탸턍터턱턴털턺텀텁텃텄텅테텍텐텔템텝텟텡텨텬텼톄톈토톡톤톨톰톱톳통톺톼퇀퇘퇴퇸툇툉툐투툭툰툴툼툽툿퉁퉈퉜�".split(""),e=0;e!=r[197].length;++e)65533!==r[197][e].charCodeAt(0)&&(n[r[197][e]]=50432+e,t[50432+e]=r[197][e]);for(r[198]="�����������������������������������������������������������������힍힎힏힑힒힓힔힕힖힗힚힜힞힟힠힡힢힣������������������������������������������������������������������������������퉤튀튁튄튈튐튑튕튜튠튤튬튱트특튼튿틀틂틈틉틋틔틘틜틤틥티틱틴틸팀팁팃팅파팍팎판팔팖팜팝팟팠팡팥패팩팬팰팸팹팻팼팽퍄퍅퍼퍽펀펄펌펍펏펐펑페펙펜펠펨펩펫펭펴편펼폄폅폈평폐폘폡폣포폭폰폴폼폽폿퐁�".split(""),e=0;e!=r[198].length;++e)65533!==r[198][e].charCodeAt(0)&&(n[r[198][e]]=50688+e,t[50688+e]=r[198][e]);for(r[199]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������퐈퐝푀푄표푠푤푭푯푸푹푼푿풀풂품풉풋풍풔풩퓌퓐퓔퓜퓟퓨퓬퓰퓸퓻퓽프픈플픔픕픗피픽핀필핌핍핏핑하학한할핥함합핫항해핵핸핼햄햅햇했행햐향허헉헌헐헒험헙헛헝헤헥헨헬헴헵헷헹혀혁현혈혐협혓혔형혜혠�".split(""),e=0;e!=r[199].length;++e)65533!==r[199][e].charCodeAt(0)&&(n[r[199][e]]=50944+e,t[50944+e]=r[199][e]);for(r[200]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������혤혭호혹혼홀홅홈홉홋홍홑화확환활홧황홰홱홴횃횅회획횐횔횝횟횡효횬횰횹횻후훅훈훌훑훔훗훙훠훤훨훰훵훼훽휀휄휑휘휙휜휠휨휩휫휭휴휵휸휼흄흇흉흐흑흔흖흗흘흙흠흡흣흥흩희흰흴흼흽힁히힉힌힐힘힙힛힝�".split(""),e=0;e!=r[200].length;++e)65533!==r[200][e].charCodeAt(0)&&(n[r[200][e]]=51200+e,t[51200+e]=r[200][e]);for(r[202]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������伽佳假價加可呵哥嘉嫁家暇架枷柯歌珂痂稼苛茄街袈訶賈跏軻迦駕刻却各恪慤殼珏脚覺角閣侃刊墾奸姦干幹懇揀杆柬桿澗癎看磵稈竿簡肝艮艱諫間乫喝曷渴碣竭葛褐蝎鞨勘坎堪嵌感憾戡敢柑橄減甘疳監瞰紺邯鑑鑒龕�".split(""),e=0;e!=r[202].length;++e)65533!==r[202][e].charCodeAt(0)&&(n[r[202][e]]=51712+e,t[51712+e]=r[202][e]);for(r[203]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������匣岬甲胛鉀閘剛堈姜岡崗康强彊慷江畺疆糠絳綱羌腔舡薑襁講鋼降鱇介价個凱塏愷愾慨改槪漑疥皆盖箇芥蓋豈鎧開喀客坑更粳羹醵倨去居巨拒据據擧渠炬祛距踞車遽鉅鋸乾件健巾建愆楗腱虔蹇鍵騫乞傑杰桀儉劍劒檢�".split(""),e=0;e!=r[203].length;++e)65533!==r[203][e].charCodeAt(0)&&(n[r[203][e]]=51968+e,t[51968+e]=r[203][e]);for(r[204]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������瞼鈐黔劫怯迲偈憩揭擊格檄激膈覡隔堅牽犬甄絹繭肩見譴遣鵑抉決潔結缺訣兼慊箝謙鉗鎌京俓倞傾儆勁勍卿坰境庚徑慶憬擎敬景暻更梗涇炅烱璟璥瓊痙硬磬竟競絅經耕耿脛莖警輕逕鏡頃頸驚鯨係啓堺契季屆悸戒桂械�".split(""),e=0;e!=r[204].length;++e)65533!==r[204][e].charCodeAt(0)&&(n[r[204][e]]=52224+e,t[52224+e]=r[204][e]);for(r[205]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������棨溪界癸磎稽系繫繼計誡谿階鷄古叩告呱固姑孤尻庫拷攷故敲暠枯槁沽痼皐睾稿羔考股膏苦苽菰藁蠱袴誥賈辜錮雇顧高鼓哭斛曲梏穀谷鵠困坤崑昆梱棍滾琨袞鯤汨滑骨供公共功孔工恐恭拱控攻珙空蚣貢鞏串寡戈果瓜�".split(""),e=0;e!=r[205].length;++e)65533!==r[205][e].charCodeAt(0)&&(n[r[205][e]]=52480+e,t[52480+e]=r[205][e]);for(r[206]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������科菓誇課跨過鍋顆廓槨藿郭串冠官寬慣棺款灌琯瓘管罐菅觀貫關館刮恝括适侊光匡壙廣曠洸炚狂珖筐胱鑛卦掛罫乖傀塊壞怪愧拐槐魁宏紘肱轟交僑咬喬嬌嶠巧攪敎校橋狡皎矯絞翹膠蕎蛟較轎郊餃驕鮫丘久九仇俱具勾�".split(""),e=0;e!=r[206].length;++e)65533!==r[206][e].charCodeAt(0)&&(n[r[206][e]]=52736+e,t[52736+e]=r[206][e]);for(r[207]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������區口句咎嘔坵垢寇嶇廐懼拘救枸柩構歐毆毬求溝灸狗玖球瞿矩究絿耉臼舅舊苟衢謳購軀逑邱鉤銶駒驅鳩鷗龜國局菊鞠鞫麴君窘群裙軍郡堀屈掘窟宮弓穹窮芎躬倦券勸卷圈拳捲權淃眷厥獗蕨蹶闕机櫃潰詭軌饋句晷歸貴�".split(""),e=0;e!=r[207].length;++e)65533!==r[207][e].charCodeAt(0)&&(n[r[207][e]]=52992+e,t[52992+e]=r[207][e]);for(r[208]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������鬼龜叫圭奎揆槻珪硅窺竅糾葵規赳逵閨勻均畇筠菌鈞龜橘克剋劇戟棘極隙僅劤勤懃斤根槿瑾筋芹菫覲謹近饉契今妗擒昑檎琴禁禽芩衾衿襟金錦伋及急扱汲級給亘兢矜肯企伎其冀嗜器圻基埼夔奇妓寄岐崎己幾忌技旗旣�".split(""),e=0;e!=r[208].length;++e)65533!==r[208][e].charCodeAt(0)&&(n[r[208][e]]=53248+e,t[53248+e]=r[208][e]);for(r[209]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������朞期杞棋棄機欺氣汽沂淇玘琦琪璂璣畸畿碁磯祁祇祈祺箕紀綺羈耆耭肌記譏豈起錡錤飢饑騎騏驥麒緊佶吉拮桔金喫儺喇奈娜懦懶拏拿癩羅蘿螺裸邏那樂洛烙珞落諾酪駱亂卵暖欄煖爛蘭難鸞捏捺南嵐枏楠湳濫男藍襤拉�".split(""),e=0;e!=r[209].length;++e)65533!==r[209][e].charCodeAt(0)&&(n[r[209][e]]=53504+e,t[53504+e]=r[209][e]);for(r[210]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������納臘蠟衲囊娘廊朗浪狼郎乃來內奈柰耐冷女年撚秊念恬拈捻寧寗努勞奴弩怒擄櫓爐瑙盧老蘆虜路露駑魯鷺碌祿綠菉錄鹿論壟弄濃籠聾膿農惱牢磊腦賂雷尿壘屢樓淚漏累縷陋嫩訥杻紐勒肋凜凌稜綾能菱陵尼泥匿溺多茶�".split(""),e=0;e!=r[210].length;++e)65533!==r[210][e].charCodeAt(0)&&(n[r[210][e]]=53760+e,t[53760+e]=r[210][e]);for(r[211]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������丹亶但單團壇彖斷旦檀段湍短端簞緞蛋袒鄲鍛撻澾獺疸達啖坍憺擔曇淡湛潭澹痰聃膽蕁覃談譚錟沓畓答踏遝唐堂塘幢戇撞棠當糖螳黨代垈坮大對岱帶待戴擡玳臺袋貸隊黛宅德悳倒刀到圖堵塗導屠島嶋度徒悼挑掉搗桃�".split(""),e=0;e!=r[211].length;++e)65533!==r[211][e].charCodeAt(0)&&(n[r[211][e]]=54016+e,t[54016+e]=r[211][e]);for(r[212]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������棹櫂淘渡滔濤燾盜睹禱稻萄覩賭跳蹈逃途道都鍍陶韜毒瀆牘犢獨督禿篤纛讀墩惇敦旽暾沌焞燉豚頓乭突仝冬凍動同憧東桐棟洞潼疼瞳童胴董銅兜斗杜枓痘竇荳讀豆逗頭屯臀芚遁遯鈍得嶝橙燈登等藤謄鄧騰喇懶拏癩羅�".split(""),e=0;e!=r[212].length;++e)65533!==r[212][e].charCodeAt(0)&&(n[r[212][e]]=54272+e,t[54272+e]=r[212][e]);for(r[213]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������蘿螺裸邏樂洛烙珞絡落諾酪駱丹亂卵欄欒瀾爛蘭鸞剌辣嵐擥攬欖濫籃纜藍襤覽拉臘蠟廊朗浪狼琅瑯螂郞來崍徠萊冷掠略亮倆兩凉梁樑粮粱糧良諒輛量侶儷勵呂廬慮戾旅櫚濾礪藜蠣閭驢驪麗黎力曆歷瀝礫轢靂憐戀攣漣�".split(""),e=0;e!=r[213].length;++e)65533!==r[213][e].charCodeAt(0)&&(n[r[213][e]]=54528+e,t[54528+e]=r[213][e]);for(r[214]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������煉璉練聯蓮輦連鍊冽列劣洌烈裂廉斂殮濂簾獵令伶囹寧岺嶺怜玲笭羚翎聆逞鈴零靈領齡例澧禮醴隷勞怒撈擄櫓潞瀘爐盧老蘆虜路輅露魯鷺鹵碌祿綠菉錄鹿麓論壟弄朧瀧瓏籠聾儡瀨牢磊賂賚賴雷了僚寮廖料燎療瞭聊蓼�".split(""),e=0;e!=r[214].length;++e)65533!==r[214][e].charCodeAt(0)&&(n[r[214][e]]=54784+e,t[54784+e]=r[214][e]);for(r[215]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������遼鬧龍壘婁屢樓淚漏瘻累縷蔞褸鏤陋劉旒柳榴流溜瀏琉瑠留瘤硫謬類六戮陸侖倫崙淪綸輪律慄栗率隆勒肋凜凌楞稜綾菱陵俚利厘吏唎履悧李梨浬犁狸理璃異痢籬罹羸莉裏裡里釐離鯉吝潾燐璘藺躪隣鱗麟林淋琳臨霖砬�".split(""),e=0;e!=r[215].length;++e)65533!==r[215][e].charCodeAt(0)&&(n[r[215][e]]=55040+e,t[55040+e]=r[215][e]);for(r[216]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������立笠粒摩瑪痲碼磨馬魔麻寞幕漠膜莫邈万卍娩巒彎慢挽晩曼滿漫灣瞞萬蔓蠻輓饅鰻唜抹末沫茉襪靺亡妄忘忙望網罔芒茫莽輞邙埋妹媒寐昧枚梅每煤罵買賣邁魅脈貊陌驀麥孟氓猛盲盟萌冪覓免冕勉棉沔眄眠綿緬面麵滅�".split(""),e=0;e!=r[216].length;++e)65533!==r[216][e].charCodeAt(0)&&(n[r[216][e]]=55296+e,t[55296+e]=r[216][e]);for(r[217]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������蔑冥名命明暝椧溟皿瞑茗蓂螟酩銘鳴袂侮冒募姆帽慕摸摹暮某模母毛牟牡瑁眸矛耗芼茅謀謨貌木沐牧目睦穆鶩歿沒夢朦蒙卯墓妙廟描昴杳渺猫竗苗錨務巫憮懋戊拇撫无楙武毋無珷畝繆舞茂蕪誣貿霧鵡墨默們刎吻問文�".split(""),e=0;e!=r[217].length;++e)65533!==r[217][e].charCodeAt(0)&&(n[r[217][e]]=55552+e,t[55552+e]=r[217][e]);for(r[218]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������汶紊紋聞蚊門雯勿沕物味媚尾嵋彌微未梶楣渼湄眉米美薇謎迷靡黴岷悶愍憫敏旻旼民泯玟珉緡閔密蜜謐剝博拍搏撲朴樸泊珀璞箔粕縛膊舶薄迫雹駁伴半反叛拌搬攀斑槃泮潘班畔瘢盤盼磐磻礬絆般蟠返頒飯勃拔撥渤潑�".split(""),e=0;e!=r[218].length;++e)65533!==r[218][e].charCodeAt(0)&&(n[r[218][e]]=55808+e,t[55808+e]=r[218][e]);for(r[219]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������發跋醱鉢髮魃倣傍坊妨尨幇彷房放方旁昉枋榜滂磅紡肪膀舫芳蒡蚌訪謗邦防龐倍俳北培徘拜排杯湃焙盃背胚裴裵褙賠輩配陪伯佰帛柏栢白百魄幡樊煩燔番磻繁蕃藩飜伐筏罰閥凡帆梵氾汎泛犯範范法琺僻劈壁擘檗璧癖�".split(""),e=0;e!=r[219].length;++e)65533!==r[219][e].charCodeAt(0)&&(n[r[219][e]]=56064+e,t[56064+e]=r[219][e]);for(r[220]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������碧蘗闢霹便卞弁變辨辯邊別瞥鱉鼈丙倂兵屛幷昞昺柄棅炳甁病秉竝輧餠騈保堡報寶普步洑湺潽珤甫菩補褓譜輔伏僕匐卜宓復服福腹茯蔔複覆輹輻馥鰒本乶俸奉封峯峰捧棒烽熢琫縫蓬蜂逢鋒鳳不付俯傅剖副否咐埠夫婦�".split(""),e=0;e!=r[220].length;++e)65533!==r[220][e].charCodeAt(0)&&(n[r[220][e]]=56320+e,t[56320+e]=r[220][e]);for(r[221]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������孚孵富府復扶敷斧浮溥父符簿缶腐腑膚艀芙莩訃負賦賻赴趺部釜阜附駙鳧北分吩噴墳奔奮忿憤扮昐汾焚盆粉糞紛芬賁雰不佛弗彿拂崩朋棚硼繃鵬丕備匕匪卑妃婢庇悲憊扉批斐枇榧比毖毗毘沸泌琵痺砒碑秕秘粃緋翡肥�".split(""),e=0;e!=r[221].length;++e)65533!==r[221][e].charCodeAt(0)&&(n[r[221][e]]=56576+e,t[56576+e]=r[221][e]);for(r[222]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������脾臂菲蜚裨誹譬費鄙非飛鼻嚬嬪彬斌檳殯浜濱瀕牝玭貧賓頻憑氷聘騁乍事些仕伺似使俟僿史司唆嗣四士奢娑寫寺射巳師徙思捨斜斯柶査梭死沙泗渣瀉獅砂社祀祠私篩紗絲肆舍莎蓑蛇裟詐詞謝賜赦辭邪飼駟麝削數朔索�".split(""),e=0;e!=r[222].length;++e)65533!==r[222][e].charCodeAt(0)&&(n[r[222][e]]=56832+e,t[56832+e]=r[222][e]);for(r[223]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������傘刪山散汕珊産疝算蒜酸霰乷撒殺煞薩三參杉森渗芟蔘衫揷澁鈒颯上傷像償商喪嘗孀尙峠常床庠廂想桑橡湘爽牀狀相祥箱翔裳觴詳象賞霜塞璽賽嗇塞穡索色牲生甥省笙墅壻嶼序庶徐恕抒捿敍暑曙書栖棲犀瑞筮絮緖署�".split(""),e=0;e!=r[223].length;++e)65533!==r[223][e].charCodeAt(0)&&(n[r[223][e]]=57088+e,t[57088+e]=r[223][e]);for(r[224]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������胥舒薯西誓逝鋤黍鼠夕奭席惜昔晳析汐淅潟石碩蓆釋錫仙僊先善嬋宣扇敾旋渲煽琁瑄璇璿癬禪線繕羨腺膳船蘚蟬詵跣選銑鐥饍鮮卨屑楔泄洩渫舌薛褻設說雪齧剡暹殲纖蟾贍閃陝攝涉燮葉城姓宬性惺成星晟猩珹盛省筬�".split(""),e=0;e!=r[224].length;++e)65533!==r[224][e].charCodeAt(0)&&(n[r[224][e]]=57344+e,t[57344+e]=r[224][e]);for(r[225]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������聖聲腥誠醒世勢歲洗稅笹細說貰召嘯塑宵小少巢所掃搔昭梳沼消溯瀟炤燒甦疏疎瘙笑篠簫素紹蔬蕭蘇訴逍遡邵銷韶騷俗屬束涑粟續謖贖速孫巽損蓀遜飡率宋悚松淞訟誦送頌刷殺灑碎鎖衰釗修受嗽囚垂壽嫂守岫峀帥愁�".split(""),e=0;e!=r[225].length;++e)65533!==r[225][e].charCodeAt(0)&&(n[r[225][e]]=57600+e,t[57600+e]=r[225][e]);for(r[226]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������戍手授搜收數樹殊水洙漱燧狩獸琇璲瘦睡秀穗竪粹綏綬繡羞脩茱蒐蓚藪袖誰讐輸遂邃酬銖銹隋隧隨雖需須首髓鬚叔塾夙孰宿淑潚熟琡璹肅菽巡徇循恂旬栒楯橓殉洵淳珣盾瞬筍純脣舜荀蓴蕣詢諄醇錞順馴戌術述鉥崇崧�".split(""),e=0;e!=r[226].length;++e)65533!==r[226][e].charCodeAt(0)&&(n[r[226][e]]=57856+e,t[57856+e]=r[226][e]);for(r[227]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������嵩瑟膝蝨濕拾習褶襲丞乘僧勝升承昇繩蠅陞侍匙嘶始媤尸屎屍市弑恃施是時枾柴猜矢示翅蒔蓍視試詩諡豕豺埴寔式息拭植殖湜熄篒蝕識軾食飾伸侁信呻娠宸愼新晨燼申神紳腎臣莘薪藎蜃訊身辛辰迅失室實悉審尋心沁�".split(""),e=0;e!=r[227].length;++e)65533!==r[227][e].charCodeAt(0)&&(n[r[227][e]]=58112+e,t[58112+e]=r[227][e]);for(r[228]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������沈深瀋甚芯諶什十拾雙氏亞俄兒啞娥峨我牙芽莪蛾衙訝阿雅餓鴉鵝堊岳嶽幄惡愕握樂渥鄂鍔顎鰐齷安岸按晏案眼雁鞍顔鮟斡謁軋閼唵岩巖庵暗癌菴闇壓押狎鴨仰央怏昻殃秧鴦厓哀埃崖愛曖涯碍艾隘靄厄扼掖液縊腋額�".split(""),e=0;e!=r[228].length;++e)65533!==r[228][e].charCodeAt(0)&&(n[r[228][e]]=58368+e,t[58368+e]=r[228][e]);for(r[229]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������櫻罌鶯鸚也倻冶夜惹揶椰爺耶若野弱掠略約若葯蒻藥躍亮佯兩凉壤孃恙揚攘敭暘梁楊樣洋瀁煬痒瘍禳穰糧羊良襄諒讓釀陽量養圄御於漁瘀禦語馭魚齬億憶抑檍臆偃堰彦焉言諺孼蘖俺儼嚴奄掩淹嶪業円予余勵呂女如廬�".split(""),e=0;e!=r[229].length;++e)65533!==r[229][e].charCodeAt(0)&&(n[r[229][e]]=58624+e,t[58624+e]=r[229][e]);for(r[230]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������旅歟汝濾璵礖礪與艅茹輿轝閭餘驪麗黎亦力域役易曆歷疫繹譯轢逆驛嚥堧姸娟宴年延憐戀捐挻撚椽沇沿涎涓淵演漣烟然煙煉燃燕璉硏硯秊筵緣練縯聯衍軟輦蓮連鉛鍊鳶列劣咽悅涅烈熱裂說閱厭廉念捻染殮炎焰琰艶苒�".split(""),e=0;e!=r[230].length;++e)65533!==r[230][e].charCodeAt(0)&&(n[r[230][e]]=58880+e,t[58880+e]=r[230][e]);for(r[231]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������簾閻髥鹽曄獵燁葉令囹塋寧嶺嶸影怜映暎楹榮永泳渶潁濚瀛瀯煐營獰玲瑛瑩瓔盈穎纓羚聆英詠迎鈴鍈零霙靈領乂倪例刈叡曳汭濊猊睿穢芮藝蘂禮裔詣譽豫醴銳隸霓預五伍俉傲午吾吳嗚塢墺奧娛寤悟惡懊敖旿晤梧汚澳�".split(""),e=0;e!=r[231].length;++e)65533!==r[231][e].charCodeAt(0)&&(n[r[231][e]]=59136+e,t[59136+e]=r[231][e]);for(r[232]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������烏熬獒筽蜈誤鰲鼇屋沃獄玉鈺溫瑥瘟穩縕蘊兀壅擁瓮甕癰翁邕雍饔渦瓦窩窪臥蛙蝸訛婉完宛梡椀浣玩琓琬碗緩翫脘腕莞豌阮頑曰往旺枉汪王倭娃歪矮外嵬巍猥畏了僚僥凹堯夭妖姚寥寮尿嶢拗搖撓擾料曜樂橈燎燿瑤療�".split(""),e=0;e!=r[232].length;++e)65533!==r[232][e].charCodeAt(0)&&(n[r[232][e]]=59392+e,t[59392+e]=r[232][e]);for(r[233]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������窈窯繇繞耀腰蓼蟯要謠遙遼邀饒慾欲浴縟褥辱俑傭冗勇埇墉容庸慂榕涌湧溶熔瑢用甬聳茸蓉踊鎔鏞龍于佑偶優又友右宇寓尤愚憂旴牛玗瑀盂祐禑禹紆羽芋藕虞迂遇郵釪隅雨雩勖彧旭昱栯煜稶郁頊云暈橒殞澐熉耘芸蕓�".split(""),e=0;e!=r[233].length;++e)65533!==r[233][e].charCodeAt(0)&&(n[r[233][e]]=59648+e,t[59648+e]=r[233][e]);for(r[234]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������運隕雲韻蔚鬱亐熊雄元原員圓園垣媛嫄寃怨愿援沅洹湲源爰猿瑗苑袁轅遠阮院願鴛月越鉞位偉僞危圍委威尉慰暐渭爲瑋緯胃萎葦蔿蝟衛褘謂違韋魏乳侑儒兪劉唯喩孺宥幼幽庾悠惟愈愉揄攸有杻柔柚柳楡楢油洧流游溜�".split(""),e=0;e!=r[234].length;++e)65533!==r[234][e].charCodeAt(0)&&(n[r[234][e]]=59904+e,t[59904+e]=r[234][e]);for(r[235]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������濡猶猷琉瑜由留癒硫紐維臾萸裕誘諛諭踰蹂遊逾遺酉釉鍮類六堉戮毓肉育陸倫允奫尹崙淪潤玧胤贇輪鈗閏律慄栗率聿戎瀜絨融隆垠恩慇殷誾銀隱乙吟淫蔭陰音飮揖泣邑凝應膺鷹依倚儀宜意懿擬椅毅疑矣義艤薏蟻衣誼�".split(""),e=0;e!=r[235].length;++e)65533!==r[235][e].charCodeAt(0)&&(n[r[235][e]]=60160+e,t[60160+e]=r[235][e]);for(r[236]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������議醫二以伊利吏夷姨履已弛彛怡易李梨泥爾珥理異痍痢移罹而耳肄苡荑裏裡貽貳邇里離飴餌匿溺瀷益翊翌翼謚人仁刃印吝咽因姻寅引忍湮燐璘絪茵藺蚓認隣靭靷鱗麟一佚佾壹日溢逸鎰馹任壬妊姙恁林淋稔臨荏賃入卄�".split(""),e=0;e!=r[236].length;++e)65533!==r[236][e].charCodeAt(0)&&(n[r[236][e]]=60416+e,t[60416+e]=r[236][e]);for(r[237]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������立笠粒仍剩孕芿仔刺咨姉姿子字孜恣慈滋炙煮玆瓷疵磁紫者自茨蔗藉諮資雌作勺嚼斫昨灼炸爵綽芍酌雀鵲孱棧殘潺盞岑暫潛箴簪蠶雜丈仗匠場墻壯奬將帳庄張掌暲杖樟檣欌漿牆狀獐璋章粧腸臟臧莊葬蔣薔藏裝贓醬長�".split(""),e=0;e!=r[237].length;++e)65533!==r[237][e].charCodeAt(0)&&(n[r[237][e]]=60672+e,t[60672+e]=r[237][e]);for(r[238]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������障再哉在宰才材栽梓渽滓災縡裁財載齋齎爭箏諍錚佇低儲咀姐底抵杵楮樗沮渚狙猪疽箸紵苧菹著藷詛貯躇這邸雎齟勣吊嫡寂摘敵滴狄炙的積笛籍績翟荻謫賊赤跡蹟迪迹適鏑佃佺傳全典前剪塡塼奠專展廛悛戰栓殿氈澱�".split(""),e=0;e!=r[238].length;++e)65533!==r[238][e].charCodeAt(0)&&(n[r[238][e]]=60928+e,t[60928+e]=r[238][e]);for(r[239]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������煎琠田甸畑癲筌箋箭篆纏詮輾轉鈿銓錢鐫電顚顫餞切截折浙癤竊節絶占岾店漸点粘霑鮎點接摺蝶丁井亭停偵呈姃定幀庭廷征情挺政整旌晶晸柾楨檉正汀淀淨渟湞瀞炡玎珽町睛碇禎程穽精綎艇訂諪貞鄭酊釘鉦鋌錠霆靖�".split(""),e=0;e!=r[239].length;++e)65533!==r[239][e].charCodeAt(0)&&(n[r[239][e]]=61184+e,t[61184+e]=r[239][e]);for(r[240]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������靜頂鼎制劑啼堤帝弟悌提梯濟祭第臍薺製諸蹄醍除際霽題齊俎兆凋助嘲弔彫措操早晁曺曹朝條棗槽漕潮照燥爪璪眺祖祚租稠窕粗糟組繰肇藻蚤詔調趙躁造遭釣阻雕鳥族簇足鏃存尊卒拙猝倧宗從悰慫棕淙琮種終綜縱腫�".split(""),e=0;e!=r[240].length;++e)65533!==r[240][e].charCodeAt(0)&&(n[r[240][e]]=61440+e,t[61440+e]=r[240][e]);for(r[241]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������踪踵鍾鐘佐坐左座挫罪主住侏做姝胄呪周嗾奏宙州廚晝朱柱株注洲湊澍炷珠疇籌紂紬綢舟蛛註誅走躊輳週酎酒鑄駐竹粥俊儁准埈寯峻晙樽浚準濬焌畯竣蠢逡遵雋駿茁中仲衆重卽櫛楫汁葺增憎曾拯烝甑症繒蒸證贈之只�".split(""),e=0;e!=r[241].length;++e)65533!==r[241][e].charCodeAt(0)&&(n[r[241][e]]=61696+e,t[61696+e]=r[241][e]);for(r[242]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������咫地址志持指摯支旨智枝枳止池沚漬知砥祉祗紙肢脂至芝芷蜘誌識贄趾遲直稙稷織職唇嗔塵振搢晉晋桭榛殄津溱珍瑨璡畛疹盡眞瞋秦縉縝臻蔯袗診賑軫辰進鎭陣陳震侄叱姪嫉帙桎瓆疾秩窒膣蛭質跌迭斟朕什執潗緝輯�".split(""),e=0;e!=r[242].length;++e)65533!==r[242][e].charCodeAt(0)&&(n[r[242][e]]=61952+e,t[61952+e]=r[242][e]);for(r[243]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������鏶集徵懲澄且侘借叉嗟嵯差次此磋箚茶蹉車遮捉搾着窄錯鑿齪撰澯燦璨瓚竄簒纂粲纘讚贊鑽餐饌刹察擦札紮僭參塹慘慙懺斬站讒讖倉倡創唱娼廠彰愴敞昌昶暢槍滄漲猖瘡窓脹艙菖蒼債埰寀寨彩採砦綵菜蔡采釵冊柵策�".split(""),e=0;e!=r[243].length;++e)65533!==r[243][e].charCodeAt(0)&&(n[r[243][e]]=62208+e,t[62208+e]=r[243][e]);for(r[244]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������責凄妻悽處倜刺剔尺慽戚拓擲斥滌瘠脊蹠陟隻仟千喘天川擅泉淺玔穿舛薦賤踐遷釧闡阡韆凸哲喆徹撤澈綴輟轍鐵僉尖沾添甛瞻簽籤詹諂堞妾帖捷牒疊睫諜貼輒廳晴淸聽菁請靑鯖切剃替涕滯締諦逮遞體初剿哨憔抄招梢�".split(""),e=0;e!=r[244].length;++e)65533!==r[244][e].charCodeAt(0)&&(n[r[244][e]]=62464+e,t[62464+e]=r[244][e]);for(r[245]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������椒楚樵炒焦硝礁礎秒稍肖艸苕草蕉貂超酢醋醮促囑燭矗蜀觸寸忖村邨叢塚寵悤憁摠總聰蔥銃撮催崔最墜抽推椎楸樞湫皺秋芻萩諏趨追鄒酋醜錐錘鎚雛騶鰍丑畜祝竺筑築縮蓄蹙蹴軸逐春椿瑃出朮黜充忠沖蟲衝衷悴膵萃�".split(""),e=0;e!=r[245].length;++e)65533!==r[245][e].charCodeAt(0)&&(n[r[245][e]]=62720+e,t[62720+e]=r[245][e]);for(r[246]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������贅取吹嘴娶就炊翠聚脆臭趣醉驟鷲側仄厠惻測層侈値嗤峙幟恥梔治淄熾痔痴癡稚穉緇緻置致蚩輜雉馳齒則勅飭親七柒漆侵寢枕沈浸琛砧針鍼蟄秤稱快他咤唾墮妥惰打拖朶楕舵陀馱駝倬卓啄坼度托拓擢晫柝濁濯琢琸託�".split(""),e=0;e!=r[246].length;++e)65533!==r[246][e].charCodeAt(0)&&(n[r[246][e]]=62976+e,t[62976+e]=r[246][e]);for(r[247]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������鐸呑嘆坦彈憚歎灘炭綻誕奪脫探眈耽貪塔搭榻宕帑湯糖蕩兌台太怠態殆汰泰笞胎苔跆邰颱宅擇澤撑攄兎吐土討慟桶洞痛筒統通堆槌腿褪退頹偸套妬投透鬪慝特闖坡婆巴把播擺杷波派爬琶破罷芭跛頗判坂板版瓣販辦鈑�".split(""),e=0;e!=r[247].length;++e)65533!==r[247][e].charCodeAt(0)&&(n[r[247][e]]=63232+e,t[63232+e]=r[247][e]);for(r[248]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������阪八叭捌佩唄悖敗沛浿牌狽稗覇貝彭澎烹膨愎便偏扁片篇編翩遍鞭騙貶坪平枰萍評吠嬖幣廢弊斃肺蔽閉陛佈包匍匏咆哺圃布怖抛抱捕暴泡浦疱砲胞脯苞葡蒲袍褒逋鋪飽鮑幅暴曝瀑爆輻俵剽彪慓杓標漂瓢票表豹飇飄驃�".split(""),e=0;e!=r[248].length;++e)65533!==r[248][e].charCodeAt(0)&&(n[r[248][e]]=63488+e,t[63488+e]=r[248][e]);for(r[249]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������品稟楓諷豊風馮彼披疲皮被避陂匹弼必泌珌畢疋筆苾馝乏逼下何厦夏廈昰河瑕荷蝦賀遐霞鰕壑學虐謔鶴寒恨悍旱汗漢澣瀚罕翰閑閒限韓割轄函含咸啣喊檻涵緘艦銜陷鹹合哈盒蛤閤闔陜亢伉姮嫦巷恒抗杭桁沆港缸肛航�".split(""),e=0;e!=r[249].length;++e)65533!==r[249][e].charCodeAt(0)&&(n[r[249][e]]=63744+e,t[63744+e]=r[249][e]);for(r[250]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������行降項亥偕咳垓奚孩害懈楷海瀣蟹解該諧邂駭骸劾核倖幸杏荇行享向嚮珦鄕響餉饗香噓墟虛許憲櫶獻軒歇險驗奕爀赫革俔峴弦懸晛泫炫玄玹現眩睍絃絢縣舷衒見賢鉉顯孑穴血頁嫌俠協夾峽挾浹狹脅脇莢鋏頰亨兄刑型�".split(""),e=0;e!=r[250].length;++e)65533!==r[250][e].charCodeAt(0)&&(n[r[250][e]]=64e3+e,t[64e3+e]=r[250][e]);for(r[251]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������形泂滎瀅灐炯熒珩瑩荊螢衡逈邢鎣馨兮彗惠慧暳蕙蹊醯鞋乎互呼壕壺好岵弧戶扈昊晧毫浩淏湖滸澔濠濩灝狐琥瑚瓠皓祜糊縞胡芦葫蒿虎號蝴護豪鎬頀顥惑或酷婚昏混渾琿魂忽惚笏哄弘汞泓洪烘紅虹訌鴻化和嬅樺火畵�".split(""),e=0;e!=r[251].length;++e)65533!==r[251][e].charCodeAt(0)&&(n[r[251][e]]=64256+e,t[64256+e]=r[251][e]);for(r[252]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������禍禾花華話譁貨靴廓擴攫確碻穫丸喚奐宦幻患換歡晥桓渙煥環紈還驩鰥活滑猾豁闊凰幌徨恍惶愰慌晃晄榥況湟滉潢煌璜皇篁簧荒蝗遑隍黃匯回廻徊恢悔懷晦會檜淮澮灰獪繪膾茴蛔誨賄劃獲宖橫鐄哮嚆孝效斅曉梟涍淆�".split(""),e=0;e!=r[252].length;++e)65533!==r[252][e].charCodeAt(0)&&(n[r[252][e]]=64512+e,t[64512+e]=r[252][e]);for(r[253]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������爻肴酵驍侯候厚后吼喉嗅帿後朽煦珝逅勛勳塤壎焄熏燻薰訓暈薨喧暄煊萱卉喙毁彙徽揮暉煇諱輝麾休携烋畦虧恤譎鷸兇凶匈洶胸黑昕欣炘痕吃屹紇訖欠欽歆吸恰洽翕興僖凞喜噫囍姬嬉希憙憘戱晞曦熙熹熺犧禧稀羲詰�".split(""),e=0;e!=r[253].length;++e)65533!==r[253][e].charCodeAt(0)&&(n[r[253][e]]=64768+e,t[64768+e]=r[253][e]);return{enc:n,dec:t}}(),t[950]=function(){var e,t=[],n={},r=[];for(r[0]="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~��������������������������������������������������������������������������������������������������������������������������������".split(""),e=0;e!=r[0].length;++e)65533!==r[0][e].charCodeAt(0)&&(n[r[0][e]]=0+e,t[0+e]=r[0][e]);for(r[161]="���������������������������������������������������������������� ,、。.‧;:?!︰…‥﹐﹑﹒·﹔﹕﹖﹗|–︱—︳╴︴﹏()︵︶{}︷︸〔〕︹︺【】︻︼《》︽︾〈〉︿﹀「」﹁﹂『』﹃﹄﹙﹚����������������������������������﹛﹜﹝﹞‘’“”〝〞‵′#&*※§〃○●△▲◎☆★◇◆□■▽▼㊣℅¯ ̄_ˍ﹉﹊﹍﹎﹋﹌﹟﹠﹡+-×÷±√<>=≦≧≠∞≒≡﹢﹣﹤﹥﹦~∩∪⊥∠∟⊿㏒㏑∫∮∵∴♀♂⊕⊙↑↓←→↖↗↙↘∥∣/�".split(""),e=0;e!=r[161].length;++e)65533!==r[161][e].charCodeAt(0)&&(n[r[161][e]]=41216+e,t[41216+e]=r[161][e]);for(r[162]="����������������������������������������������������������������\∕﹨$¥〒¢£%@℃℉﹩﹪﹫㏕㎜㎝㎞㏎㎡㎎㎏㏄°兙兛兞兝兡兣嗧瓩糎▁▂▃▄▅▆▇█▏▎▍▌▋▊▉┼┴┬┤├▔─│▕┌┐└┘╭����������������������������������╮╰╯═╞╪╡◢◣◥◤╱╲╳0123456789ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ〡〢〣〤〥〦〧〨〩十卄卅ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuv�".split(""),e=0;e!=r[162].length;++e)65533!==r[162][e].charCodeAt(0)&&(n[r[162][e]]=41472+e,t[41472+e]=r[162][e]);for(r[163]="����������������������������������������������������������������wxyzΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρστυφχψωㄅㄆㄇㄈㄉㄊㄋㄌㄍㄎㄏ����������������������������������ㄐㄑㄒㄓㄔㄕㄖㄗㄘㄙㄚㄛㄜㄝㄞㄟㄠㄡㄢㄣㄤㄥㄦㄧㄨㄩ˙ˉˊˇˋ���������������������������������€������������������������������".split(""),e=0;e!=r[163].length;++e)65533!==r[163][e].charCodeAt(0)&&(n[r[163][e]]=41728+e,t[41728+e]=r[163][e]);for(r[164]="����������������������������������������������������������������一乙丁七乃九了二人儿入八几刀刁力匕十卜又三下丈上丫丸凡久么也乞于亡兀刃勺千叉口土士夕大女子孑孓寸小尢尸山川工己已巳巾干廾弋弓才����������������������������������丑丐不中丰丹之尹予云井互五亢仁什仃仆仇仍今介仄元允內六兮公冗凶分切刈勻勾勿化匹午升卅卞厄友及反壬天夫太夭孔少尤尺屯巴幻廿弔引心戈戶手扎支文斗斤方日曰月木欠止歹毋比毛氏水火爪父爻片牙牛犬王丙�".split(""),e=0;e!=r[164].length;++e)65533!==r[164][e].charCodeAt(0)&&(n[r[164][e]]=41984+e,t[41984+e]=r[164][e]);for(r[165]="����������������������������������������������������������������世丕且丘主乍乏乎以付仔仕他仗代令仙仞充兄冉冊冬凹出凸刊加功包匆北匝仟半卉卡占卯卮去可古右召叮叩叨叼司叵叫另只史叱台句叭叻四囚外����������������������������������央失奴奶孕它尼巨巧左市布平幼弁弘弗必戊打扔扒扑斥旦朮本未末札正母民氐永汁汀氾犯玄玉瓜瓦甘生用甩田由甲申疋白皮皿目矛矢石示禾穴立丞丟乒乓乩亙交亦亥仿伉伙伊伕伍伐休伏仲件任仰仳份企伋光兇兆先全�".split(""),e=0;e!=r[165].length;++e)65533!==r[165][e].charCodeAt(0)&&(n[r[165][e]]=42240+e,t[42240+e]=r[165][e]);for(r[166]="����������������������������������������������������������������共再冰列刑划刎刖劣匈匡匠印危吉吏同吊吐吁吋各向名合吃后吆吒因回囝圳地在圭圬圯圩夙多夷夸妄奸妃好她如妁字存宇守宅安寺尖屹州帆并年����������������������������������式弛忙忖戎戌戍成扣扛托收早旨旬旭曲曳有朽朴朱朵次此死氖汝汗汙江池汐汕污汛汍汎灰牟牝百竹米糸缶羊羽老考而耒耳聿肉肋肌臣自至臼舌舛舟艮色艾虫血行衣西阡串亨位住佇佗佞伴佛何估佐佑伽伺伸佃佔似但佣�".split(""),e=0;e!=r[166].length;++e)65533!==r[166][e].charCodeAt(0)&&(n[r[166][e]]=42496+e,t[42496+e]=r[166][e]);for(r[167]="����������������������������������������������������������������作你伯低伶余佝佈佚兌克免兵冶冷別判利刪刨劫助努劬匣即卵吝吭吞吾否呎吧呆呃吳呈呂君吩告吹吻吸吮吵吶吠吼呀吱含吟听囪困囤囫坊坑址坍����������������������������������均坎圾坐坏圻壯夾妝妒妨妞妣妙妖妍妤妓妊妥孝孜孚孛完宋宏尬局屁尿尾岐岑岔岌巫希序庇床廷弄弟彤形彷役忘忌志忍忱快忸忪戒我抄抗抖技扶抉扭把扼找批扳抒扯折扮投抓抑抆改攻攸旱更束李杏材村杜杖杞杉杆杠�".split(""),e=0;e!=r[167].length;++e)65533!==r[167][e].charCodeAt(0)&&(n[r[167][e]]=42752+e,t[42752+e]=r[167][e]);for(r[168]="����������������������������������������������������������������杓杗步每求汞沙沁沈沉沅沛汪決沐汰沌汨沖沒汽沃汲汾汴沆汶沍沔沘沂灶灼災灸牢牡牠狄狂玖甬甫男甸皂盯矣私秀禿究系罕肖肓肝肘肛肚育良芒����������������������������������芋芍見角言谷豆豕貝赤走足身車辛辰迂迆迅迄巡邑邢邪邦那酉釆里防阮阱阪阬並乖乳事些亞享京佯依侍佳使佬供例來侃佰併侈佩佻侖佾侏侑佺兔兒兕兩具其典冽函刻券刷刺到刮制剁劾劻卒協卓卑卦卷卸卹取叔受味呵�".split(""),e=0;e!=r[168].length;++e)65533!==r[168][e].charCodeAt(0)&&(n[r[168][e]]=43008+e,t[43008+e]=r[168][e]);for(r[169]="����������������������������������������������������������������咖呸咕咀呻呷咄咒咆呼咐呱呶和咚呢周咋命咎固垃坷坪坩坡坦坤坼夜奉奇奈奄奔妾妻委妹妮姑姆姐姍始姓姊妯妳姒姅孟孤季宗定官宜宙宛尚屈居����������������������������������屆岷岡岸岩岫岱岳帘帚帖帕帛帑幸庚店府底庖延弦弧弩往征彿彼忝忠忽念忿怏怔怯怵怖怪怕怡性怩怫怛或戕房戾所承拉拌拄抿拂抹拒招披拓拔拋拈抨抽押拐拙拇拍抵拚抱拘拖拗拆抬拎放斧於旺昔易昌昆昂明昀昏昕昊�".split(""),e=0;e!=r[169].length;++e)65533!==r[169][e].charCodeAt(0)&&(n[r[169][e]]=43264+e,t[43264+e]=r[169][e]);for(r[170]="����������������������������������������������������������������昇服朋杭枋枕東果杳杷枇枝林杯杰板枉松析杵枚枓杼杪杲欣武歧歿氓氛泣注泳沱泌泥河沽沾沼波沫法泓沸泄油況沮泗泅泱沿治泡泛泊沬泯泜泖泠����������������������������������炕炎炒炊炙爬爭爸版牧物狀狎狙狗狐玩玨玟玫玥甽疝疙疚的盂盲直知矽社祀祁秉秈空穹竺糾罔羌羋者肺肥肢肱股肫肩肴肪肯臥臾舍芳芝芙芭芽芟芹花芬芥芯芸芣芰芾芷虎虱初表軋迎返近邵邸邱邶采金長門阜陀阿阻附�".split(""),e=0;e!=r[170].length;++e)65533!==r[170][e].charCodeAt(0)&&(n[r[170][e]]=43520+e,t[43520+e]=r[170][e]);for(r[171]="����������������������������������������������������������������陂隹雨青非亟亭亮信侵侯便俠俑俏保促侶俘俟俊俗侮俐俄係俚俎俞侷兗冒冑冠剎剃削前剌剋則勇勉勃勁匍南卻厚叛咬哀咨哎哉咸咦咳哇哂咽咪品����������������������������������哄哈咯咫咱咻咩咧咿囿垂型垠垣垢城垮垓奕契奏奎奐姜姘姿姣姨娃姥姪姚姦威姻孩宣宦室客宥封屎屏屍屋峙峒巷帝帥帟幽庠度建弈弭彥很待徊律徇後徉怒思怠急怎怨恍恰恨恢恆恃恬恫恪恤扁拜挖按拼拭持拮拽指拱拷�".split(""),e=0;e!=r[171].length;++e)65533!==r[171][e].charCodeAt(0)&&(n[r[171][e]]=43776+e,t[43776+e]=r[171][e]);for(r[172]="����������������������������������������������������������������拯括拾拴挑挂政故斫施既春昭映昧是星昨昱昤曷柿染柱柔某柬架枯柵柩柯柄柑枴柚查枸柏柞柳枰柙柢柝柒歪殃殆段毒毗氟泉洋洲洪流津洌洱洞洗����������������������������������活洽派洶洛泵洹洧洸洩洮洵洎洫炫為炳炬炯炭炸炮炤爰牲牯牴狩狠狡玷珊玻玲珍珀玳甚甭畏界畎畋疫疤疥疢疣癸皆皇皈盈盆盃盅省盹相眉看盾盼眇矜砂研砌砍祆祉祈祇禹禺科秒秋穿突竿竽籽紂紅紀紉紇約紆缸美羿耄�".split(""),e=0;e!=r[172].length;++e)65533!==r[172][e].charCodeAt(0)&&(n[r[172][e]]=44032+e,t[44032+e]=r[172][e]);for(r[173]="����������������������������������������������������������������耐耍耑耶胖胥胚胃胄背胡胛胎胞胤胝致舢苧范茅苣苛苦茄若茂茉苒苗英茁苜苔苑苞苓苟苯茆虐虹虻虺衍衫要觔計訂訃貞負赴赳趴軍軌述迦迢迪迥����������������������������������迭迫迤迨郊郎郁郃酋酊重閂限陋陌降面革韋韭音頁風飛食首香乘亳倌倍倣俯倦倥俸倩倖倆值借倚倒們俺倀倔倨俱倡個候倘俳修倭倪俾倫倉兼冤冥冢凍凌准凋剖剜剔剛剝匪卿原厝叟哨唐唁唷哼哥哲唆哺唔哩哭員唉哮哪�".split(""),e=0;e!=r[173].length;++e)65533!==r[173][e].charCodeAt(0)&&(n[r[173][e]]=44288+e,t[44288+e]=r[173][e]);for(r[174]="����������������������������������������������������������������哦唧唇哽唏圃圄埂埔埋埃堉夏套奘奚娑娘娜娟娛娓姬娠娣娩娥娌娉孫屘宰害家宴宮宵容宸射屑展屐峭峽峻峪峨峰島崁峴差席師庫庭座弱徒徑徐恙����������������������������������恣恥恐恕恭恩息悄悟悚悍悔悌悅悖扇拳挈拿捎挾振捕捂捆捏捉挺捐挽挪挫挨捍捌效敉料旁旅時晉晏晃晒晌晅晁書朔朕朗校核案框桓根桂桔栩梳栗桌桑栽柴桐桀格桃株桅栓栘桁殊殉殷氣氧氨氦氤泰浪涕消涇浦浸海浙涓�".split(""),e=0;e!=r[174].length;++e)65533!==r[174][e].charCodeAt(0)&&(n[r[174][e]]=44544+e,t[44544+e]=r[174][e]);for(r[175]="����������������������������������������������������������������浬涉浮浚浴浩涌涊浹涅浥涔烊烘烤烙烈烏爹特狼狹狽狸狷玆班琉珮珠珪珞畔畝畜畚留疾病症疲疳疽疼疹痂疸皋皰益盍盎眩真眠眨矩砰砧砸砝破砷����������������������������������砥砭砠砟砲祕祐祠祟祖神祝祗祚秤秣秧租秦秩秘窄窈站笆笑粉紡紗紋紊素索純紐紕級紜納紙紛缺罟羔翅翁耆耘耕耙耗耽耿胱脂胰脅胭胴脆胸胳脈能脊胼胯臭臬舀舐航舫舨般芻茫荒荔荊茸荐草茵茴荏茲茹茶茗荀茱茨荃�".split(""),e=0;e!=r[175].length;++e)65533!==r[175][e].charCodeAt(0)&&(n[r[175][e]]=44800+e,t[44800+e]=r[175][e]);for(r[176]="����������������������������������������������������������������虔蚊蚪蚓蚤蚩蚌蚣蚜衰衷袁袂衽衹記訐討訌訕訊託訓訖訏訑豈豺豹財貢起躬軒軔軏辱送逆迷退迺迴逃追逅迸邕郡郝郢酒配酌釘針釗釜釙閃院陣陡����������������������������������陛陝除陘陞隻飢馬骨高鬥鬲鬼乾偺偽停假偃偌做偉健偶偎偕偵側偷偏倏偯偭兜冕凰剪副勒務勘動匐匏匙匿區匾參曼商啪啦啄啞啡啃啊唱啖問啕唯啤唸售啜唬啣唳啁啗圈國圉域堅堊堆埠埤基堂堵執培夠奢娶婁婉婦婪婀�".split(""),e=0;e!=r[176].length;++e)65533!==r[176][e].charCodeAt(0)&&(n[r[176][e]]=45056+e,t[45056+e]=r[176][e]);for(r[177]="����������������������������������������������������������������娼婢婚婆婊孰寇寅寄寂宿密尉專將屠屜屝崇崆崎崛崖崢崑崩崔崙崤崧崗巢常帶帳帷康庸庶庵庾張強彗彬彩彫得徙從徘御徠徜恿患悉悠您惋悴惦悽����������������������������������情悻悵惜悼惘惕惆惟悸惚惇戚戛扈掠控捲掖探接捷捧掘措捱掩掉掃掛捫推掄授掙採掬排掏掀捻捩捨捺敝敖救教敗啟敏敘敕敔斜斛斬族旋旌旎晝晚晤晨晦晞曹勗望梁梯梢梓梵桿桶梱梧梗械梃棄梭梆梅梔條梨梟梡梂欲殺�".split(""),e=0;e!=r[177].length;++e)65533!==r[177][e].charCodeAt(0)&&(n[r[177][e]]=45312+e,t[45312+e]=r[177][e]);for(r[178]="����������������������������������������������������������������毫毬氫涎涼淳淙液淡淌淤添淺清淇淋涯淑涮淞淹涸混淵淅淒渚涵淚淫淘淪深淮淨淆淄涪淬涿淦烹焉焊烽烯爽牽犁猜猛猖猓猙率琅琊球理現琍瓠瓶����������������������������������瓷甜產略畦畢異疏痔痕疵痊痍皎盔盒盛眷眾眼眶眸眺硫硃硎祥票祭移窒窕笠笨笛第符笙笞笮粒粗粕絆絃統紮紹紼絀細紳組累終紲紱缽羞羚翌翎習耜聊聆脯脖脣脫脩脰脤舂舵舷舶船莎莞莘荸莢莖莽莫莒莊莓莉莠荷荻荼�".split(""),e=0;e!=r[178].length;++e)65533!==r[178][e].charCodeAt(0)&&(n[r[178][e]]=45568+e,t[45568+e]=r[178][e]);for(r[179]="����������������������������������������������������������������莆莧處彪蛇蛀蚶蛄蚵蛆蛋蚱蚯蛉術袞袈被袒袖袍袋覓規訪訝訣訥許設訟訛訢豉豚販責貫貨貪貧赧赦趾趺軛軟這逍通逗連速逝逐逕逞造透逢逖逛途����������������������������������部郭都酗野釵釦釣釧釭釩閉陪陵陳陸陰陴陶陷陬雀雪雩章竟頂頃魚鳥鹵鹿麥麻傢傍傅備傑傀傖傘傚最凱割剴創剩勞勝勛博厥啻喀喧啼喊喝喘喂喜喪喔喇喋喃喳單喟唾喲喚喻喬喱啾喉喫喙圍堯堪場堤堰報堡堝堠壹壺奠�".split(""),e=0;e!=r[179].length;++e)65533!==r[179][e].charCodeAt(0)&&(n[r[179][e]]=45824+e,t[45824+e]=r[179][e]);for(r[180]="����������������������������������������������������������������婷媚婿媒媛媧孳孱寒富寓寐尊尋就嵌嵐崴嵇巽幅帽幀幃幾廊廁廂廄弼彭復循徨惑惡悲悶惠愜愣惺愕惰惻惴慨惱愎惶愉愀愒戟扉掣掌描揀揩揉揆揍����������������������������������插揣提握揖揭揮捶援揪換摒揚揹敞敦敢散斑斐斯普晰晴晶景暑智晾晷曾替期朝棺棕棠棘棗椅棟棵森棧棹棒棲棣棋棍植椒椎棉棚楮棻款欺欽殘殖殼毯氮氯氬港游湔渡渲湧湊渠渥渣減湛湘渤湖湮渭渦湯渴湍渺測湃渝渾滋�".split(""),e=0;e!=r[180].length;++e)65533!==r[180][e].charCodeAt(0)&&(n[r[180][e]]=46080+e,t[46080+e]=r[180][e]);for(r[181]="����������������������������������������������������������������溉渙湎湣湄湲湩湟焙焚焦焰無然煮焜牌犄犀猶猥猴猩琺琪琳琢琥琵琶琴琯琛琦琨甥甦畫番痢痛痣痙痘痞痠登發皖皓皴盜睏短硝硬硯稍稈程稅稀窘����������������������������������窗窖童竣等策筆筐筒答筍筋筏筑粟粥絞結絨絕紫絮絲絡給絢絰絳善翔翕耋聒肅腕腔腋腑腎脹腆脾腌腓腴舒舜菩萃菸萍菠菅萋菁華菱菴著萊菰萌菌菽菲菊萸萎萄菜萇菔菟虛蛟蛙蛭蛔蛛蛤蛐蛞街裁裂袱覃視註詠評詞証詁�".split(""),e=0;e!=r[181].length;++e)65533!==r[181][e].charCodeAt(0)&&(n[r[181][e]]=46336+e,t[46336+e]=r[181][e]);for(r[182]="����������������������������������������������������������������詔詛詐詆訴診訶詖象貂貯貼貳貽賁費賀貴買貶貿貸越超趁跎距跋跚跑跌跛跆軻軸軼辜逮逵週逸進逶鄂郵鄉郾酣酥量鈔鈕鈣鈉鈞鈍鈐鈇鈑閔閏開閑����������������������������������間閒閎隊階隋陽隅隆隍陲隄雁雅雄集雇雯雲韌項順須飧飪飯飩飲飭馮馭黃黍黑亂傭債傲傳僅傾催傷傻傯僇剿剷剽募勦勤勢勣匯嗟嗨嗓嗦嗎嗜嗇嗑嗣嗤嗯嗚嗡嗅嗆嗥嗉園圓塞塑塘塗塚塔填塌塭塊塢塒塋奧嫁嫉嫌媾媽媼�".split(""),e=0;e!=r[182].length;++e)65533!==r[182][e].charCodeAt(0)&&(n[r[182][e]]=46592+e,t[46592+e]=r[182][e]);for(r[183]="����������������������������������������������������������������媳嫂媲嵩嵯幌幹廉廈弒彙徬微愚意慈感想愛惹愁愈慎慌慄慍愾愴愧愍愆愷戡戢搓搾搞搪搭搽搬搏搜搔損搶搖搗搆敬斟新暗暉暇暈暖暄暘暍會榔業����������������������������������楚楷楠楔極椰概楊楨楫楞楓楹榆楝楣楛歇歲毀殿毓毽溢溯滓溶滂源溝滇滅溥溘溼溺溫滑準溜滄滔溪溧溴煎煙煩煤煉照煜煬煦煌煥煞煆煨煖爺牒猷獅猿猾瑯瑚瑕瑟瑞瑁琿瑙瑛瑜當畸瘀痰瘁痲痱痺痿痴痳盞盟睛睫睦睞督�".split(""),e=0;e!=r[183].length;++e)65533!==r[183][e].charCodeAt(0)&&(n[r[183][e]]=46848+e,t[46848+e]=r[183][e]);for(r[184]="����������������������������������������������������������������睹睪睬睜睥睨睢矮碎碰碗碘碌碉硼碑碓硿祺祿禁萬禽稜稚稠稔稟稞窟窠筷節筠筮筧粱粳粵經絹綑綁綏絛置罩罪署義羨群聖聘肆肄腱腰腸腥腮腳腫����������������������������������腹腺腦舅艇蒂葷落萱葵葦葫葉葬葛萼萵葡董葩葭葆虞虜號蛹蜓蜈蜇蜀蛾蛻蜂蜃蜆蜊衙裟裔裙補裘裝裡裊裕裒覜解詫該詳試詩詰誇詼詣誠話誅詭詢詮詬詹詻訾詨豢貊貉賊資賈賄貲賃賂賅跡跟跨路跳跺跪跤跦躲較載軾輊�".split(""),e=0;e!=r[184].length;++e)65533!==r[184][e].charCodeAt(0)&&(n[r[184][e]]=47104+e,t[47104+e]=r[184][e]);for(r[185]="����������������������������������������������������������������辟農運遊道遂達逼違遐遇遏過遍遑逾遁鄒鄗酬酪酩釉鈷鉗鈸鈽鉀鈾鉛鉋鉤鉑鈴鉉鉍鉅鈹鈿鉚閘隘隔隕雍雋雉雊雷電雹零靖靴靶預頑頓頊頒頌飼飴����������������������������������飽飾馳馱馴髡鳩麂鼎鼓鼠僧僮僥僖僭僚僕像僑僱僎僩兢凳劃劂匱厭嗾嘀嘛嘗嗽嘔嘆嘉嘍嘎嗷嘖嘟嘈嘐嗶團圖塵塾境墓墊塹墅塽壽夥夢夤奪奩嫡嫦嫩嫗嫖嫘嫣孵寞寧寡寥實寨寢寤察對屢嶄嶇幛幣幕幗幔廓廖弊彆彰徹慇�".split(""),e=0;e!=r[185].length;++e)65533!==r[185][e].charCodeAt(0)&&(n[r[185][e]]=47360+e,t[47360+e]=r[185][e]);for(r[186]="����������������������������������������������������������������愿態慷慢慣慟慚慘慵截撇摘摔撤摸摟摺摑摧搴摭摻敲斡旗旖暢暨暝榜榨榕槁榮槓構榛榷榻榫榴槐槍榭槌榦槃榣歉歌氳漳演滾漓滴漩漾漠漬漏漂漢����������������������������������滿滯漆漱漸漲漣漕漫漯澈漪滬漁滲滌滷熔熙煽熊熄熒爾犒犖獄獐瑤瑣瑪瑰瑭甄疑瘧瘍瘋瘉瘓盡監瞄睽睿睡磁碟碧碳碩碣禎福禍種稱窪窩竭端管箕箋筵算箝箔箏箸箇箄粹粽精綻綰綜綽綾綠緊綴網綱綺綢綿綵綸維緒緇綬�".split(""),e=0;e!=r[186].length;++e)65533!==r[186][e].charCodeAt(0)&&(n[r[186][e]]=47616+e,t[47616+e]=r[186][e]);for(r[187]="����������������������������������������������������������������罰翠翡翟聞聚肇腐膀膏膈膊腿膂臧臺與舔舞艋蓉蒿蓆蓄蒙蒞蒲蒜蓋蒸蓀蓓蒐蒼蓑蓊蜿蜜蜻蜢蜥蜴蜘蝕蜷蜩裳褂裴裹裸製裨褚裯誦誌語誣認誡誓誤����������������������������������說誥誨誘誑誚誧豪貍貌賓賑賒赫趙趕跼輔輒輕輓辣遠遘遜遣遙遞遢遝遛鄙鄘鄞酵酸酷酴鉸銀銅銘銖鉻銓銜銨鉼銑閡閨閩閣閥閤隙障際雌雒需靼鞅韶頗領颯颱餃餅餌餉駁骯骰髦魁魂鳴鳶鳳麼鼻齊億儀僻僵價儂儈儉儅凜�".split(""),e=0;e!=r[187].length;++e)65533!==r[187][e].charCodeAt(0)&&(n[r[187][e]]=47872+e,t[47872+e]=r[187][e]);for(r[188]="����������������������������������������������������������������劇劈劉劍劊勰厲嘮嘻嘹嘲嘿嘴嘩噓噎噗噴嘶嘯嘰墀墟增墳墜墮墩墦奭嬉嫻嬋嫵嬌嬈寮寬審寫層履嶝嶔幢幟幡廢廚廟廝廣廠彈影德徵慶慧慮慝慕憂����������������������������������慼慰慫慾憧憐憫憎憬憚憤憔憮戮摩摯摹撞撲撈撐撰撥撓撕撩撒撮播撫撚撬撙撢撳敵敷數暮暫暴暱樣樟槨樁樞標槽模樓樊槳樂樅槭樑歐歎殤毅毆漿潼澄潑潦潔澆潭潛潸潮澎潺潰潤澗潘滕潯潠潟熟熬熱熨牖犛獎獗瑩璋璃�".split(""),e=0;e!=r[188].length;++e)65533!==r[188][e].charCodeAt(0)&&(n[r[188][e]]=48128+e,t[48128+e]=r[188][e]);for(r[189]="����������������������������������������������������������������瑾璀畿瘠瘩瘟瘤瘦瘡瘢皚皺盤瞎瞇瞌瞑瞋磋磅確磊碾磕碼磐稿稼穀稽稷稻窯窮箭箱範箴篆篇篁箠篌糊締練緯緻緘緬緝編緣線緞緩綞緙緲緹罵罷羯����������������������������������翩耦膛膜膝膠膚膘蔗蔽蔚蓮蔬蔭蔓蔑蔣蔡蔔蓬蔥蓿蔆螂蝴蝶蝠蝦蝸蝨蝙蝗蝌蝓衛衝褐複褒褓褕褊誼諒談諄誕請諸課諉諂調誰論諍誶誹諛豌豎豬賠賞賦賤賬賭賢賣賜質賡赭趟趣踫踐踝踢踏踩踟踡踞躺輝輛輟輩輦輪輜輞�".split(""),e=0;e!=r[189].length;++e)65533!==r[189][e].charCodeAt(0)&&(n[r[189][e]]=48384+e,t[48384+e]=r[189][e]);for(r[190]="����������������������������������������������������������������輥適遮遨遭遷鄰鄭鄧鄱醇醉醋醃鋅銻銷鋪銬鋤鋁銳銼鋒鋇鋰銲閭閱霄霆震霉靠鞍鞋鞏頡頫頜颳養餓餒餘駝駐駟駛駑駕駒駙骷髮髯鬧魅魄魷魯鴆鴉����������������������������������鴃麩麾黎墨齒儒儘儔儐儕冀冪凝劑劓勳噙噫噹噩噤噸噪器噥噱噯噬噢噶壁墾壇壅奮嬝嬴學寰導彊憲憑憩憊懍憶憾懊懈戰擅擁擋撻撼據擄擇擂操撿擒擔撾整曆曉暹曄曇暸樽樸樺橙橫橘樹橄橢橡橋橇樵機橈歙歷氅濂澱澡�".split(""),e=0;e!=r[190].length;++e)65533!==r[190][e].charCodeAt(0)&&(n[r[190][e]]=48640+e,t[48640+e]=r[190][e]);for(r[191]="����������������������������������������������������������������濃澤濁澧澳激澹澶澦澠澴熾燉燐燒燈燕熹燎燙燜燃燄獨璜璣璘璟璞瓢甌甍瘴瘸瘺盧盥瞠瞞瞟瞥磨磚磬磧禦積穎穆穌穋窺篙簑築篤篛篡篩篦糕糖縊����������������������������������縑縈縛縣縞縝縉縐罹羲翰翱翮耨膳膩膨臻興艘艙蕊蕙蕈蕨蕩蕃蕉蕭蕪蕞螃螟螞螢融衡褪褲褥褫褡親覦諦諺諫諱謀諜諧諮諾謁謂諷諭諳諶諼豫豭貓賴蹄踱踴蹂踹踵輻輯輸輳辨辦遵遴選遲遼遺鄴醒錠錶鋸錳錯錢鋼錫錄錚�".split(""),e=0;e!=r[191].length;++e)65533!==r[191][e].charCodeAt(0)&&(n[r[191][e]]=48896+e,t[48896+e]=r[191][e]);for(r[192]="����������������������������������������������������������������錐錦錡錕錮錙閻隧隨險雕霎霑霖霍霓霏靛靜靦鞘頰頸頻頷頭頹頤餐館餞餛餡餚駭駢駱骸骼髻髭鬨鮑鴕鴣鴦鴨鴒鴛默黔龍龜優償儡儲勵嚎嚀嚐嚅嚇����������������������������������嚏壕壓壑壎嬰嬪嬤孺尷屨嶼嶺嶽嶸幫彌徽應懂懇懦懋戲戴擎擊擘擠擰擦擬擱擢擭斂斃曙曖檀檔檄檢檜櫛檣橾檗檐檠歜殮毚氈濘濱濟濠濛濤濫濯澀濬濡濩濕濮濰燧營燮燦燥燭燬燴燠爵牆獰獲璩環璦璨癆療癌盪瞳瞪瞰瞬�".split(""),e=0;e!=r[192].length;++e)65533!==r[192][e].charCodeAt(0)&&(n[r[192][e]]=49152+e,t[49152+e]=r[192][e]);for(r[193]="����������������������������������������������������������������瞧瞭矯磷磺磴磯礁禧禪穗窿簇簍篾篷簌篠糠糜糞糢糟糙糝縮績繆縷縲繃縫總縱繅繁縴縹繈縵縿縯罄翳翼聱聲聰聯聳臆臃膺臂臀膿膽臉膾臨舉艱薪����������������������������������薄蕾薜薑薔薯薛薇薨薊虧蟀蟑螳蟒蟆螫螻螺蟈蟋褻褶襄褸褽覬謎謗謙講謊謠謝謄謐豁谿豳賺賽購賸賻趨蹉蹋蹈蹊轄輾轂轅輿避遽還邁邂邀鄹醣醞醜鍍鎂錨鍵鍊鍥鍋錘鍾鍬鍛鍰鍚鍔闊闋闌闈闆隱隸雖霜霞鞠韓顆颶餵騁�".split(""),e=0;e!=r[193].length;++e)65533!==r[193][e].charCodeAt(0)&&(n[r[193][e]]=49408+e,t[49408+e]=r[193][e]);for(r[194]="����������������������������������������������������������������駿鮮鮫鮪鮭鴻鴿麋黏點黜黝黛鼾齋叢嚕嚮壙壘嬸彝懣戳擴擲擾攆擺擻擷斷曜朦檳檬櫃檻檸櫂檮檯歟歸殯瀉瀋濾瀆濺瀑瀏燻燼燾燸獷獵璧璿甕癖癘����������������������������������癒瞽瞿瞻瞼礎禮穡穢穠竄竅簫簧簪簞簣簡糧織繕繞繚繡繒繙罈翹翻職聶臍臏舊藏薩藍藐藉薰薺薹薦蟯蟬蟲蟠覆覲觴謨謹謬謫豐贅蹙蹣蹦蹤蹟蹕軀轉轍邇邃邈醫醬釐鎔鎊鎖鎢鎳鎮鎬鎰鎘鎚鎗闔闖闐闕離雜雙雛雞霤鞣鞦�".split(""),e=0;e!=r[194].length;++e)65533!==r[194][e].charCodeAt(0)&&(n[r[194][e]]=49664+e,t[49664+e]=r[194][e]);for(r[195]="����������������������������������������������������������������鞭韹額顏題顎顓颺餾餿餽餮馥騎髁鬃鬆魏魎魍鯊鯉鯽鯈鯀鵑鵝鵠黠鼕鼬儳嚥壞壟壢寵龐廬懲懷懶懵攀攏曠曝櫥櫝櫚櫓瀛瀟瀨瀚瀝瀕瀘爆爍牘犢獸����������������������������������獺璽瓊瓣疇疆癟癡矇礙禱穫穩簾簿簸簽簷籀繫繭繹繩繪羅繳羶羹羸臘藩藝藪藕藤藥藷蟻蠅蠍蟹蟾襠襟襖襞譁譜識證譚譎譏譆譙贈贊蹼蹲躇蹶蹬蹺蹴轔轎辭邊邋醱醮鏡鏑鏟鏃鏈鏜鏝鏖鏢鏍鏘鏤鏗鏨關隴難霪霧靡韜韻類�".split(""),e=0;e!=r[195].length;++e)65533!==r[195][e].charCodeAt(0)&&(n[r[195][e]]=49920+e,t[49920+e]=r[195][e]);for(r[196]="����������������������������������������������������������������願顛颼饅饉騖騙鬍鯨鯧鯖鯛鶉鵡鵲鵪鵬麒麗麓麴勸嚨嚷嚶嚴嚼壤孀孃孽寶巉懸懺攘攔攙曦朧櫬瀾瀰瀲爐獻瓏癢癥礦礪礬礫竇競籌籃籍糯糰辮繽繼����������������������������������纂罌耀臚艦藻藹蘑藺蘆蘋蘇蘊蠔蠕襤覺觸議譬警譯譟譫贏贍躉躁躅躂醴釋鐘鐃鏽闡霰飄饒饑馨騫騰騷騵鰓鰍鹹麵黨鼯齟齣齡儷儸囁囀囂夔屬巍懼懾攝攜斕曩櫻欄櫺殲灌爛犧瓖瓔癩矓籐纏續羼蘗蘭蘚蠣蠢蠡蠟襪襬覽譴�".split(""),e=0;e!=r[196].length;++e)65533!==r[196][e].charCodeAt(0)&&(n[r[196][e]]=50176+e,t[50176+e]=r[196][e]);for(r[197]="����������������������������������������������������������������護譽贓躊躍躋轟辯醺鐮鐳鐵鐺鐸鐲鐫闢霸霹露響顧顥饗驅驃驀騾髏魔魑鰭鰥鶯鶴鷂鶸麝黯鼙齜齦齧儼儻囈囊囉孿巔巒彎懿攤權歡灑灘玀瓤疊癮癬����������������������������������禳籠籟聾聽臟襲襯觼讀贖贗躑躓轡酈鑄鑑鑒霽霾韃韁顫饕驕驍髒鬚鱉鰱鰾鰻鷓鷗鼴齬齪龔囌巖戀攣攫攪曬欐瓚竊籤籣籥纓纖纔臢蘸蘿蠱變邐邏鑣鑠鑤靨顯饜驚驛驗髓體髑鱔鱗鱖鷥麟黴囑壩攬灞癱癲矗罐羈蠶蠹衢讓讒�".split(""),e=0;e!=r[197].length;++e)65533!==r[197][e].charCodeAt(0)&&(n[r[197][e]]=50432+e,t[50432+e]=r[197][e]);for(r[198]="����������������������������������������������������������������讖艷贛釀鑪靂靈靄韆顰驟鬢魘鱟鷹鷺鹼鹽鼇齷齲廳欖灣籬籮蠻觀躡釁鑲鑰顱饞髖鬣黌灤矚讚鑷韉驢驥纜讜躪釅鑽鑾鑼鱷鱸黷豔鑿鸚爨驪鬱鸛鸞籲���������������������������������������������������������������������������������������������������������������������������������".split(""),e=0;e!=r[198].length;++e)65533!==r[198][e].charCodeAt(0)&&(n[r[198][e]]=50688+e,t[50688+e]=r[198][e]);for(r[201]="����������������������������������������������������������������乂乜凵匚厂万丌乇亍囗兀屮彳丏冇与丮亓仂仉仈冘勼卬厹圠夃夬尐巿旡殳毌气爿丱丼仨仜仩仡仝仚刌匜卌圢圣夗夯宁宄尒尻屴屳帄庀庂忉戉扐氕����������������������������������氶汃氿氻犮犰玊禸肊阞伎优伬仵伔仱伀价伈伝伂伅伢伓伄仴伒冱刓刉刐劦匢匟卍厊吇囡囟圮圪圴夼妀奼妅奻奾奷奿孖尕尥屼屺屻屾巟幵庄异弚彴忕忔忏扜扞扤扡扦扢扙扠扚扥旯旮朾朹朸朻机朿朼朳氘汆汒汜汏汊汔汋�".split(""),e=0;e!=r[201].length;++e)65533!==r[201][e].charCodeAt(0)&&(n[r[201][e]]=51456+e,t[51456+e]=r[201][e]);for(r[202]="����������������������������������������������������������������汌灱牞犴犵玎甪癿穵网艸艼芀艽艿虍襾邙邗邘邛邔阢阤阠阣佖伻佢佉体佤伾佧佒佟佁佘伭伳伿佡冏冹刜刞刡劭劮匉卣卲厎厏吰吷吪呔呅吙吜吥吘����������������������������������吽呏呁吨吤呇囮囧囥坁坅坌坉坋坒夆奀妦妘妠妗妎妢妐妏妧妡宎宒尨尪岍岏岈岋岉岒岊岆岓岕巠帊帎庋庉庌庈庍弅弝彸彶忒忑忐忭忨忮忳忡忤忣忺忯忷忻怀忴戺抃抌抎抏抔抇扱扻扺扰抁抈扷扽扲扴攷旰旴旳旲旵杅杇�".split(""),e=0;e!=r[202].length;++e)65533!==r[202][e].charCodeAt(0)&&(n[r[202][e]]=51712+e,t[51712+e]=r[202][e]);for(r[203]="����������������������������������������������������������������杙杕杌杈杝杍杚杋毐氙氚汸汧汫沄沋沏汱汯汩沚汭沇沕沜汦汳汥汻沎灴灺牣犿犽狃狆狁犺狅玕玗玓玔玒町甹疔疕皁礽耴肕肙肐肒肜芐芏芅芎芑芓����������������������������������芊芃芄豸迉辿邟邡邥邞邧邠阰阨阯阭丳侘佼侅佽侀侇佶佴侉侄佷佌侗佪侚佹侁佸侐侜侔侞侒侂侕佫佮冞冼冾刵刲刳剆刱劼匊匋匼厒厔咇呿咁咑咂咈呫呺呾呥呬呴呦咍呯呡呠咘呣呧呤囷囹坯坲坭坫坱坰坶垀坵坻坳坴坢�".split(""),e=0;e!=r[203].length;++e)65533!==r[203][e].charCodeAt(0)&&(n[r[203][e]]=51968+e,t[51968+e]=r[203][e]);for(r[204]="����������������������������������������������������������������坨坽夌奅妵妺姏姎妲姌姁妶妼姃姖妱妽姀姈妴姇孢孥宓宕屄屇岮岤岠岵岯岨岬岟岣岭岢岪岧岝岥岶岰岦帗帔帙弨弢弣弤彔徂彾彽忞忥怭怦怙怲怋����������������������������������怴怊怗怳怚怞怬怢怍怐怮怓怑怌怉怜戔戽抭抴拑抾抪抶拊抮抳抯抻抩抰抸攽斨斻昉旼昄昒昈旻昃昋昍昅旽昑昐曶朊枅杬枎枒杶杻枘枆构杴枍枌杺枟枑枙枃杽极杸杹枔欥殀歾毞氝沓泬泫泮泙沶泔沭泧沷泐泂沺泃泆泭泲�".split(""),e=0;e!=r[204].length;++e)65533!==r[204][e].charCodeAt(0)&&(n[r[204][e]]=52224+e,t[52224+e]=r[204][e]);for(r[205]="����������������������������������������������������������������泒泝沴沊沝沀泞泀洰泍泇沰泹泏泩泑炔炘炅炓炆炄炑炖炂炚炃牪狖狋狘狉狜狒狔狚狌狑玤玡玭玦玢玠玬玝瓝瓨甿畀甾疌疘皯盳盱盰盵矸矼矹矻矺����������������������������������矷祂礿秅穸穻竻籵糽耵肏肮肣肸肵肭舠芠苀芫芚芘芛芵芧芮芼芞芺芴芨芡芩苂芤苃芶芢虰虯虭虮豖迒迋迓迍迖迕迗邲邴邯邳邰阹阽阼阺陃俍俅俓侲俉俋俁俔俜俙侻侳俛俇俖侺俀侹俬剄剉勀勂匽卼厗厖厙厘咺咡咭咥哏�".split(""),e=0;e!=r[205].length;++e)65533!==r[205][e].charCodeAt(0)&&(n[r[205][e]]=52480+e,t[52480+e]=r[205][e]);for(r[206]="����������������������������������������������������������������哃茍咷咮哖咶哅哆咠呰咼咢咾呲哞咰垵垞垟垤垌垗垝垛垔垘垏垙垥垚垕壴复奓姡姞姮娀姱姝姺姽姼姶姤姲姷姛姩姳姵姠姾姴姭宨屌峐峘峌峗峋峛����������������������������������峞峚峉峇峊峖峓峔峏峈峆峎峟峸巹帡帢帣帠帤庰庤庢庛庣庥弇弮彖徆怷怹恔恲恞恅恓恇恉恛恌恀恂恟怤恄恘恦恮扂扃拏挍挋拵挎挃拫拹挏挌拸拶挀挓挔拺挕拻拰敁敃斪斿昶昡昲昵昜昦昢昳昫昺昝昴昹昮朏朐柁柲柈枺�".split(""),e=0;e!=r[206].length;++e)65533!==r[206][e].charCodeAt(0)&&(n[r[206][e]]=52736+e,t[52736+e]=r[206][e]);for(r[207]="����������������������������������������������������������������柜枻柸柘柀枷柅柫柤柟枵柍枳柷柶柮柣柂枹柎柧柰枲柼柆柭柌枮柦柛柺柉柊柃柪柋欨殂殄殶毖毘毠氠氡洨洴洭洟洼洿洒洊泚洳洄洙洺洚洑洀洝浂����������������������������������洁洘洷洃洏浀洇洠洬洈洢洉洐炷炟炾炱炰炡炴炵炩牁牉牊牬牰牳牮狊狤狨狫狟狪狦狣玅珌珂珈珅玹玶玵玴珫玿珇玾珃珆玸珋瓬瓮甮畇畈疧疪癹盄眈眃眄眅眊盷盻盺矧矨砆砑砒砅砐砏砎砉砃砓祊祌祋祅祄秕种秏秖秎窀�".split(""),e=0;e!=r[207].length;++e)65533!==r[207][e].charCodeAt(0)&&(n[r[207][e]]=52992+e,t[52992+e]=r[207][e]);for(r[208]="����������������������������������������������������������������穾竑笀笁籺籸籹籿粀粁紃紈紁罘羑羍羾耇耎耏耔耷胘胇胠胑胈胂胐胅胣胙胜胊胕胉胏胗胦胍臿舡芔苙苾苹茇苨茀苕茺苫苖苴苬苡苲苵茌苻苶苰苪����������������������������������苤苠苺苳苭虷虴虼虳衁衎衧衪衩觓訄訇赲迣迡迮迠郱邽邿郕郅邾郇郋郈釔釓陔陏陑陓陊陎倞倅倇倓倢倰倛俵俴倳倷倬俶俷倗倜倠倧倵倯倱倎党冔冓凊凄凅凈凎剡剚剒剞剟剕剢勍匎厞唦哢唗唒哧哳哤唚哿唄唈哫唑唅哱�".split(""),e=0;e!=r[208].length;++e)65533!==r[208][e].charCodeAt(0)&&(n[r[208][e]]=53248+e,t[53248+e]=r[208][e]);for(r[209]="����������������������������������������������������������������唊哻哷哸哠唎唃唋圁圂埌堲埕埒垺埆垽垼垸垶垿埇埐垹埁夎奊娙娖娭娮娕娏娗娊娞娳孬宧宭宬尃屖屔峬峿峮峱峷崀峹帩帨庨庮庪庬弳弰彧恝恚恧����������������������������������恁悢悈悀悒悁悝悃悕悛悗悇悜悎戙扆拲挐捖挬捄捅挶捃揤挹捋捊挼挩捁挴捘捔捙挭捇挳捚捑挸捗捀捈敊敆旆旃旄旂晊晟晇晑朒朓栟栚桉栲栳栻桋桏栖栱栜栵栫栭栯桎桄栴栝栒栔栦栨栮桍栺栥栠欬欯欭欱欴歭肂殈毦毤�".split(""),e=0;e!=r[209].length;++e)65533!==r[209][e].charCodeAt(0)&&(n[r[209][e]]=53504+e,t[53504+e]=r[209][e]);for(r[210]="����������������������������������������������������������������毨毣毢毧氥浺浣浤浶洍浡涒浘浢浭浯涑涍淯浿涆浞浧浠涗浰浼浟涂涘洯浨涋浾涀涄洖涃浻浽浵涐烜烓烑烝烋缹烢烗烒烞烠烔烍烅烆烇烚烎烡牂牸����������������������������������牷牶猀狺狴狾狶狳狻猁珓珙珥珖玼珧珣珩珜珒珛珔珝珚珗珘珨瓞瓟瓴瓵甡畛畟疰痁疻痄痀疿疶疺皊盉眝眛眐眓眒眣眑眕眙眚眢眧砣砬砢砵砯砨砮砫砡砩砳砪砱祔祛祏祜祓祒祑秫秬秠秮秭秪秜秞秝窆窉窅窋窌窊窇竘笐�".split(""),e=0;e!=r[210].length;++e)65533!==r[210][e].charCodeAt(0)&&(n[r[210][e]]=53760+e,t[53760+e]=r[210][e]);for(r[211]="����������������������������������������������������������������笄笓笅笏笈笊笎笉笒粄粑粊粌粈粍粅紞紝紑紎紘紖紓紟紒紏紌罜罡罞罠罝罛羖羒翃翂翀耖耾耹胺胲胹胵脁胻脀舁舯舥茳茭荄茙荑茥荖茿荁茦茜茢����������������������������������荂荎茛茪茈茼荍茖茤茠茷茯茩荇荅荌荓茞茬荋茧荈虓虒蚢蚨蚖蚍蚑蚞蚇蚗蚆蚋蚚蚅蚥蚙蚡蚧蚕蚘蚎蚝蚐蚔衃衄衭衵衶衲袀衱衿衯袃衾衴衼訒豇豗豻貤貣赶赸趵趷趶軑軓迾迵适迿迻逄迼迶郖郠郙郚郣郟郥郘郛郗郜郤酐�".split(""),e=0;e!=r[211].length;++e)65533!==r[211][e].charCodeAt(0)&&(n[r[211][e]]=54016+e,t[54016+e]=r[211][e]);for(r[212]="����������������������������������������������������������������酎酏釕釢釚陜陟隼飣髟鬯乿偰偪偡偞偠偓偋偝偲偈偍偁偛偊偢倕偅偟偩偫偣偤偆偀偮偳偗偑凐剫剭剬剮勖勓匭厜啵啶唼啍啐唴唪啑啢唶唵唰啒啅����������������������������������唌唲啥啎唹啈唭唻啀啋圊圇埻堔埢埶埜埴堀埭埽堈埸堋埳埏堇埮埣埲埥埬埡堎埼堐埧堁堌埱埩埰堍堄奜婠婘婕婧婞娸娵婭婐婟婥婬婓婤婗婃婝婒婄婛婈媎娾婍娹婌婰婩婇婑婖婂婜孲孮寁寀屙崞崋崝崚崠崌崨崍崦崥崏�".split(""),e=0;e!=r[212].length;++e)65533!==r[212][e].charCodeAt(0)&&(n[r[212][e]]=54272+e,t[54272+e]=r[212][e]);for(r[213]="����������������������������������������������������������������崰崒崣崟崮帾帴庱庴庹庲庳弶弸徛徖徟悊悐悆悾悰悺惓惔惏惤惙惝惈悱惛悷惊悿惃惍惀挲捥掊掂捽掽掞掭掝掗掫掎捯掇掐据掯捵掜捭掮捼掤挻掟����������������������������������捸掅掁掑掍捰敓旍晥晡晛晙晜晢朘桹梇梐梜桭桮梮梫楖桯梣梬梩桵桴梲梏桷梒桼桫桲梪梀桱桾梛梖梋梠梉梤桸桻梑梌梊桽欶欳欷欸殑殏殍殎殌氪淀涫涴涳湴涬淩淢涷淶淔渀淈淠淟淖涾淥淜淝淛淴淊涽淭淰涺淕淂淏淉�".split(""),e=0;e!=r[213].length;++e)65533!==r[213][e].charCodeAt(0)&&(n[r[213][e]]=54528+e,t[54528+e]=r[213][e]);for(r[214]="����������������������������������������������������������������淐淲淓淽淗淍淣涻烺焍烷焗烴焌烰焄烳焐烼烿焆焓焀烸烶焋焂焎牾牻牼牿猝猗猇猑猘猊猈狿猏猞玈珶珸珵琄琁珽琇琀珺珼珿琌琋珴琈畤畣痎痒痏����������������������������������痋痌痑痐皏皉盓眹眯眭眱眲眴眳眽眥眻眵硈硒硉硍硊硌砦硅硐祤祧祩祪祣祫祡离秺秸秶秷窏窔窐笵筇笴笥笰笢笤笳笘笪笝笱笫笭笯笲笸笚笣粔粘粖粣紵紽紸紶紺絅紬紩絁絇紾紿絊紻紨罣羕羜羝羛翊翋翍翐翑翇翏翉耟�".split(""),e=0;e!=r[214].length;++e)65533!==r[214][e].charCodeAt(0)&&(n[r[214][e]]=54784+e,t[54784+e]=r[214][e]);for(r[215]="����������������������������������������������������������������耞耛聇聃聈脘脥脙脛脭脟脬脞脡脕脧脝脢舑舸舳舺舴舲艴莐莣莨莍荺荳莤荴莏莁莕莙荵莔莩荽莃莌莝莛莪莋荾莥莯莈莗莰荿莦莇莮荶莚虙虖蚿蚷����������������������������������蛂蛁蛅蚺蚰蛈蚹蚳蚸蛌蚴蚻蚼蛃蚽蚾衒袉袕袨袢袪袚袑袡袟袘袧袙袛袗袤袬袌袓袎覂觖觙觕訰訧訬訞谹谻豜豝豽貥赽赻赹趼跂趹趿跁軘軞軝軜軗軠軡逤逋逑逜逌逡郯郪郰郴郲郳郔郫郬郩酖酘酚酓酕釬釴釱釳釸釤釹釪�".split(""),e=0;e!=r[215].length;++e)65533!==r[215][e].charCodeAt(0)&&(n[r[215][e]]=55040+e,t[55040+e]=r[215][e]);for(r[216]="����������������������������������������������������������������釫釷釨釮镺閆閈陼陭陫陱陯隿靪頄飥馗傛傕傔傞傋傣傃傌傎傝偨傜傒傂傇兟凔匒匑厤厧喑喨喥喭啷噅喢喓喈喏喵喁喣喒喤啽喌喦啿喕喡喎圌堩堷����������������������������������堙堞堧堣堨埵塈堥堜堛堳堿堶堮堹堸堭堬堻奡媯媔媟婺媢媞婸媦婼媥媬媕媮娷媄媊媗媃媋媩婻婽媌媜媏媓媝寪寍寋寔寑寊寎尌尰崷嵃嵫嵁嵋崿崵嵑嵎嵕崳崺嵒崽崱嵙嵂崹嵉崸崼崲崶嵀嵅幄幁彘徦徥徫惉悹惌惢惎惄愔�".split(""),e=0;e!=r[216].length;++e)65533!==r[216][e].charCodeAt(0)&&(n[r[216][e]]=55296+e,t[55296+e]=r[216][e]);for(r[217]="����������������������������������������������������������������惲愊愖愅惵愓惸惼惾惁愃愘愝愐惿愄愋扊掔掱掰揎揥揨揯揃撝揳揊揠揶揕揲揵摡揟掾揝揜揄揘揓揂揇揌揋揈揰揗揙攲敧敪敤敜敨敥斌斝斞斮旐旒����������������������������������晼晬晻暀晱晹晪晲朁椌棓椄棜椪棬棪棱椏棖棷棫棤棶椓椐棳棡椇棌椈楰梴椑棯棆椔棸棐棽棼棨椋椊椗棎棈棝棞棦棴棑椆棔棩椕椥棇欹欻欿欼殔殗殙殕殽毰毲毳氰淼湆湇渟湉溈渼渽湅湢渫渿湁湝湳渜渳湋湀湑渻渃渮湞�".split(""),e=0;e!=r[217].length;++e)65533!==r[217][e].charCodeAt(0)&&(n[r[217][e]]=55552+e,t[55552+e]=r[217][e]);for(r[218]="����������������������������������������������������������������湨湜湡渱渨湠湱湫渹渢渰湓湥渧湸湤湷湕湹湒湦渵渶湚焠焞焯烻焮焱焣焥焢焲焟焨焺焛牋牚犈犉犆犅犋猒猋猰猢猱猳猧猲猭猦猣猵猌琮琬琰琫琖����������������������������������琚琡琭琱琤琣琝琩琠琲瓻甯畯畬痧痚痡痦痝痟痤痗皕皒盚睆睇睄睍睅睊睎睋睌矞矬硠硤硥硜硭硱硪确硰硩硨硞硢祴祳祲祰稂稊稃稌稄窙竦竤筊笻筄筈筌筎筀筘筅粢粞粨粡絘絯絣絓絖絧絪絏絭絜絫絒絔絩絑絟絎缾缿罥�".split(""),e=0;e!=r[218].length;++e)65533!==r[218][e].charCodeAt(0)&&(n[r[218][e]]=55808+e,t[55808+e]=r[218][e]);for(r[219]="����������������������������������������������������������������罦羢羠羡翗聑聏聐胾胔腃腊腒腏腇脽腍脺臦臮臷臸臹舄舼舽舿艵茻菏菹萣菀菨萒菧菤菼菶萐菆菈菫菣莿萁菝菥菘菿菡菋菎菖菵菉萉萏菞萑萆菂菳����������������������������������菕菺菇菑菪萓菃菬菮菄菻菗菢萛菛菾蛘蛢蛦蛓蛣蛚蛪蛝蛫蛜蛬蛩蛗蛨蛑衈衖衕袺裗袹袸裀袾袶袼袷袽袲褁裉覕覘覗觝觚觛詎詍訹詙詀詗詘詄詅詒詈詑詊詌詏豟貁貀貺貾貰貹貵趄趀趉跘跓跍跇跖跜跏跕跙跈跗跅軯軷軺�".split(""),e=0;e!=r[219].length;++e)65533!==r[219][e].charCodeAt(0)&&(n[r[219][e]]=56064+e,t[56064+e]=r[219][e]);for(r[220]="����������������������������������������������������������������軹軦軮軥軵軧軨軶軫軱軬軴軩逭逴逯鄆鄬鄄郿郼鄈郹郻鄁鄀鄇鄅鄃酡酤酟酢酠鈁鈊鈥鈃鈚鈦鈏鈌鈀鈒釿釽鈆鈄鈧鈂鈜鈤鈙鈗鈅鈖镻閍閌閐隇陾隈����������������������������������隉隃隀雂雈雃雱雰靬靰靮頇颩飫鳦黹亃亄亶傽傿僆傮僄僊傴僈僂傰僁傺傱僋僉傶傸凗剺剸剻剼嗃嗛嗌嗐嗋嗊嗝嗀嗔嗄嗩喿嗒喍嗏嗕嗢嗖嗈嗲嗍嗙嗂圔塓塨塤塏塍塉塯塕塎塝塙塥塛堽塣塱壼嫇嫄嫋媺媸媱媵媰媿嫈媻嫆�".split(""),e=0;e!=r[220].length;++e)65533!==r[220][e].charCodeAt(0)&&(n[r[220][e]]=56320+e,t[56320+e]=r[220][e]);for(r[221]="����������������������������������������������������������������媷嫀嫊媴媶嫍媹媐寖寘寙尟尳嵱嵣嵊嵥嵲嵬嵞嵨嵧嵢巰幏幎幊幍幋廅廌廆廋廇彀徯徭惷慉慊愫慅愶愲愮慆愯慏愩慀戠酨戣戥戤揅揱揫搐搒搉搠搤����������������������������������搳摃搟搕搘搹搷搢搣搌搦搰搨摁搵搯搊搚摀搥搧搋揧搛搮搡搎敯斒旓暆暌暕暐暋暊暙暔晸朠楦楟椸楎楢楱椿楅楪椹楂楗楙楺楈楉椵楬椳椽楥棰楸椴楩楀楯楄楶楘楁楴楌椻楋椷楜楏楑椲楒椯楻椼歆歅歃歂歈歁殛嗀毻毼�".split(""),e=0;e!=r[221].length;++e)65533!==r[221][e].charCodeAt(0)&&(n[r[221][e]]=56576+e,t[56576+e]=r[221][e]);for(r[222]="����������������������������������������������������������������毹毷毸溛滖滈溏滀溟溓溔溠溱溹滆滒溽滁溞滉溷溰滍溦滏溲溾滃滜滘溙溒溎溍溤溡溿溳滐滊溗溮溣煇煔煒煣煠煁煝煢煲煸煪煡煂煘煃煋煰煟煐煓����������������������������������煄煍煚牏犍犌犑犐犎猼獂猻猺獀獊獉瑄瑊瑋瑒瑑瑗瑀瑏瑐瑎瑂瑆瑍瑔瓡瓿瓾瓽甝畹畷榃痯瘏瘃痷痾痼痹痸瘐痻痶痭痵痽皙皵盝睕睟睠睒睖睚睩睧睔睙睭矠碇碚碔碏碄碕碅碆碡碃硹碙碀碖硻祼禂祽祹稑稘稙稒稗稕稢稓�".split(""),e=0;e!=r[222].length;++e)65533!==r[222][e].charCodeAt(0)&&(n[r[222][e]]=56832+e,t[56832+e]=r[222][e]);for(r[223]="����������������������������������������������������������������稛稐窣窢窞竫筦筤筭筴筩筲筥筳筱筰筡筸筶筣粲粴粯綈綆綀綍絿綅絺綎絻綃絼綌綔綄絽綒罭罫罧罨罬羦羥羧翛翜耡腤腠腷腜腩腛腢腲朡腞腶腧腯����������������������������������腄腡舝艉艄艀艂艅蓱萿葖葶葹蒏蒍葥葑葀蒆葧萰葍葽葚葙葴葳葝蔇葞萷萺萴葺葃葸萲葅萩菙葋萯葂萭葟葰萹葎葌葒葯蓅蒎萻葇萶萳葨葾葄萫葠葔葮葐蜋蜄蛷蜌蛺蛖蛵蝍蛸蜎蜉蜁蛶蜍蜅裖裋裍裎裞裛裚裌裐覅覛觟觥觤�".split(""),e=0;e!=r[223].length;++e)65533!==r[223][e].charCodeAt(0)&&(n[r[223][e]]=57088+e,t[57088+e]=r[223][e]);for(r[224]="����������������������������������������������������������������觡觠觢觜触詶誆詿詡訿詷誂誄詵誃誁詴詺谼豋豊豥豤豦貆貄貅賌赨赩趑趌趎趏趍趓趔趐趒跰跠跬跱跮跐跩跣跢跧跲跫跴輆軿輁輀輅輇輈輂輋遒逿����������������������������������遄遉逽鄐鄍鄏鄑鄖鄔鄋鄎酮酯鉈鉒鈰鈺鉦鈳鉥鉞銃鈮鉊鉆鉭鉬鉏鉠鉧鉯鈶鉡鉰鈱鉔鉣鉐鉲鉎鉓鉌鉖鈲閟閜閞閛隒隓隑隗雎雺雽雸雵靳靷靸靲頏頍頎颬飶飹馯馲馰馵骭骫魛鳪鳭鳧麀黽僦僔僗僨僳僛僪僝僤僓僬僰僯僣僠�".split(""),e=0;e!=r[224].length;++e)65533!==r[224][e].charCodeAt(0)&&(n[r[224][e]]=57344+e,t[57344+e]=r[224][e]);for(r[225]="����������������������������������������������������������������凘劀劁勩勫匰厬嘧嘕嘌嘒嗼嘏嘜嘁嘓嘂嗺嘝嘄嗿嗹墉塼墐墘墆墁塿塴墋塺墇墑墎塶墂墈塻墔墏壾奫嫜嫮嫥嫕嫪嫚嫭嫫嫳嫢嫠嫛嫬嫞嫝嫙嫨嫟孷寠����������������������������������寣屣嶂嶀嵽嶆嵺嶁嵷嶊嶉嶈嵾嵼嶍嵹嵿幘幙幓廘廑廗廎廜廕廙廒廔彄彃彯徶愬愨慁慞慱慳慒慓慲慬憀慴慔慺慛慥愻慪慡慖戩戧戫搫摍摛摝摴摶摲摳摽摵摦撦摎撂摞摜摋摓摠摐摿搿摬摫摙摥摷敳斠暡暠暟朅朄朢榱榶槉�".split(""),e=0;e!=r[225].length;++e)65533!==r[225][e].charCodeAt(0)&&(n[r[225][e]]=57600+e,t[57600+e]=r[225][e]);for(r[226]="����������������������������������������������������������������榠槎榖榰榬榼榑榙榎榧榍榩榾榯榿槄榽榤槔榹槊榚槏榳榓榪榡榞槙榗榐槂榵榥槆歊歍歋殞殟殠毃毄毾滎滵滱漃漥滸漷滻漮漉潎漙漚漧漘漻漒滭漊����������������������������������漶潳滹滮漭潀漰漼漵滫漇漎潃漅滽滶漹漜滼漺漟漍漞漈漡熇熐熉熀熅熂熏煻熆熁熗牄牓犗犕犓獃獍獑獌瑢瑳瑱瑵瑲瑧瑮甀甂甃畽疐瘖瘈瘌瘕瘑瘊瘔皸瞁睼瞅瞂睮瞀睯睾瞃碲碪碴碭碨硾碫碞碥碠碬碢碤禘禊禋禖禕禔禓�".split(""),e=0;e!=r[226].length;++e)65533!==r[226][e].charCodeAt(0)&&(n[r[226][e]]=57856+e,t[57856+e]=r[226][e]);for(r[227]="����������������������������������������������������������������禗禈禒禐稫穊稰稯稨稦窨窫窬竮箈箜箊箑箐箖箍箌箛箎箅箘劄箙箤箂粻粿粼粺綧綷緂綣綪緁緀緅綝緎緄緆緋緌綯綹綖綼綟綦綮綩綡緉罳翢翣翥翞����������������������������������耤聝聜膉膆膃膇膍膌膋舕蒗蒤蒡蒟蒺蓎蓂蒬蒮蒫蒹蒴蓁蓍蒪蒚蒱蓐蒝蒧蒻蒢蒔蓇蓌蒛蒩蒯蒨蓖蒘蒶蓏蒠蓗蓔蓒蓛蒰蒑虡蜳蜣蜨蝫蝀蜮蜞蜡蜙蜛蝃蜬蝁蜾蝆蜠蜲蜪蜭蜼蜒蜺蜱蜵蝂蜦蜧蜸蜤蜚蜰蜑裷裧裱裲裺裾裮裼裶裻�".split(""),e=0;e!=r[227].length;++e)65533!==r[227][e].charCodeAt(0)&&(n[r[227][e]]=58112+e,t[58112+e]=r[227][e]);for(r[228]="����������������������������������������������������������������裰裬裫覝覡覟覞觩觫觨誫誙誋誒誏誖谽豨豩賕賏賗趖踉踂跿踍跽踊踃踇踆踅跾踀踄輐輑輎輍鄣鄜鄠鄢鄟鄝鄚鄤鄡鄛酺酲酹酳銥銤鉶銛鉺銠銔銪銍����������������������������������銦銚銫鉹銗鉿銣鋮銎銂銕銢鉽銈銡銊銆銌銙銧鉾銇銩銝銋鈭隞隡雿靘靽靺靾鞃鞀鞂靻鞄鞁靿韎韍頖颭颮餂餀餇馝馜駃馹馻馺駂馽駇骱髣髧鬾鬿魠魡魟鳱鳲鳵麧僿儃儰僸儆儇僶僾儋儌僽儊劋劌勱勯噈噂噌嘵噁噊噉噆噘�".split(""),e=0;e!=r[228].length;++e)65533!==r[228][e].charCodeAt(0)&&(n[r[228][e]]=58368+e,t[58368+e]=r[228][e]);for(r[229]="����������������������������������������������������������������噚噀嘳嘽嘬嘾嘸嘪嘺圚墫墝墱墠墣墯墬墥墡壿嫿嫴嫽嫷嫶嬃嫸嬂嫹嬁嬇嬅嬏屧嶙嶗嶟嶒嶢嶓嶕嶠嶜嶡嶚嶞幩幝幠幜緳廛廞廡彉徲憋憃慹憱憰憢憉����������������������������������憛憓憯憭憟憒憪憡憍慦憳戭摮摰撖撠撅撗撜撏撋撊撌撣撟摨撱撘敶敺敹敻斲斳暵暰暩暲暷暪暯樀樆樗槥槸樕槱槤樠槿槬槢樛樝槾樧槲槮樔槷槧橀樈槦槻樍槼槫樉樄樘樥樏槶樦樇槴樖歑殥殣殢殦氁氀毿氂潁漦潾澇濆澒�".split(""),e=0;e!=r[229].length;++e)65533!==r[229][e].charCodeAt(0)&&(n[r[229][e]]=58624+e,t[58624+e]=r[229][e]);for(r[230]="����������������������������������������������������������������澍澉澌潢潏澅潚澖潶潬澂潕潲潒潐潗澔澓潝漀潡潫潽潧澐潓澋潩潿澕潣潷潪潻熲熯熛熰熠熚熩熵熝熥熞熤熡熪熜熧熳犘犚獘獒獞獟獠獝獛獡獚獙����������������������������������獢璇璉璊璆璁瑽璅璈瑼瑹甈甇畾瘥瘞瘙瘝瘜瘣瘚瘨瘛皜皝皞皛瞍瞏瞉瞈磍碻磏磌磑磎磔磈磃磄磉禚禡禠禜禢禛歶稹窲窴窳箷篋箾箬篎箯箹篊箵糅糈糌糋緷緛緪緧緗緡縃緺緦緶緱緰緮緟罶羬羰羭翭翫翪翬翦翨聤聧膣膟�".split(""),e=0;e!=r[230].length;++e)65533!==r[230][e].charCodeAt(0)&&(n[r[230][e]]=58880+e,t[58880+e]=r[230][e]);for(r[231]="����������������������������������������������������������������膞膕膢膙膗舖艏艓艒艐艎艑蔤蔻蔏蔀蔩蔎蔉蔍蔟蔊蔧蔜蓻蔫蓺蔈蔌蓴蔪蓲蔕蓷蓫蓳蓼蔒蓪蓩蔖蓾蔨蔝蔮蔂蓽蔞蓶蔱蔦蓧蓨蓰蓯蓹蔘蔠蔰蔋蔙蔯虢����������������������������������蝖蝣蝤蝷蟡蝳蝘蝔蝛蝒蝡蝚蝑蝞蝭蝪蝐蝎蝟蝝蝯蝬蝺蝮蝜蝥蝏蝻蝵蝢蝧蝩衚褅褌褔褋褗褘褙褆褖褑褎褉覢覤覣觭觰觬諏諆誸諓諑諔諕誻諗誾諀諅諘諃誺誽諙谾豍貏賥賟賙賨賚賝賧趠趜趡趛踠踣踥踤踮踕踛踖踑踙踦踧�".split(""),e=0;e!=r[231].length;++e)65533!==r[231][e].charCodeAt(0)&&(n[r[231][e]]=59136+e,t[59136+e]=r[231][e]);for(r[232]="����������������������������������������������������������������踔踒踘踓踜踗踚輬輤輘輚輠輣輖輗遳遰遯遧遫鄯鄫鄩鄪鄲鄦鄮醅醆醊醁醂醄醀鋐鋃鋄鋀鋙銶鋏鋱鋟鋘鋩鋗鋝鋌鋯鋂鋨鋊鋈鋎鋦鋍鋕鋉鋠鋞鋧鋑鋓����������������������������������銵鋡鋆銴镼閬閫閮閰隤隢雓霅霈霂靚鞊鞎鞈韐韏頞頝頦頩頨頠頛頧颲餈飺餑餔餖餗餕駜駍駏駓駔駎駉駖駘駋駗駌骳髬髫髳髲髱魆魃魧魴魱魦魶魵魰魨魤魬鳼鳺鳽鳿鳷鴇鴀鳹鳻鴈鴅鴄麃黓鼏鼐儜儓儗儚儑凞匴叡噰噠噮�".split(""),e=0;e!=r[232].length;++e)65533!==r[232][e].charCodeAt(0)&&(n[r[232][e]]=59392+e,t[59392+e]=r[232][e]);for(r[233]="����������������������������������������������������������������噳噦噣噭噲噞噷圜圛壈墽壉墿墺壂墼壆嬗嬙嬛嬡嬔嬓嬐嬖嬨嬚嬠嬞寯嶬嶱嶩嶧嶵嶰嶮嶪嶨嶲嶭嶯嶴幧幨幦幯廩廧廦廨廥彋徼憝憨憖懅憴懆懁懌憺����������������������������������憿憸憌擗擖擐擏擉撽撉擃擛擳擙攳敿敼斢曈暾曀曊曋曏暽暻暺曌朣樴橦橉橧樲橨樾橝橭橶橛橑樨橚樻樿橁橪橤橐橏橔橯橩橠樼橞橖橕橍橎橆歕歔歖殧殪殫毈毇氄氃氆澭濋澣濇澼濎濈潞濄澽澞濊澨瀄澥澮澺澬澪濏澿澸�".split(""),e=0;e!=r[233].length;++e)65533!==r[233][e].charCodeAt(0)&&(n[r[233][e]]=59648+e,t[59648+e]=r[233][e]);for(r[234]="����������������������������������������������������������������澢濉澫濍澯澲澰燅燂熿熸燖燀燁燋燔燊燇燏熽燘熼燆燚燛犝犞獩獦獧獬獥獫獪瑿璚璠璔璒璕璡甋疀瘯瘭瘱瘽瘳瘼瘵瘲瘰皻盦瞚瞝瞡瞜瞛瞢瞣瞕瞙����������������������������������瞗磝磩磥磪磞磣磛磡磢磭磟磠禤穄穈穇窶窸窵窱窷篞篣篧篝篕篥篚篨篹篔篪篢篜篫篘篟糒糔糗糐糑縒縡縗縌縟縠縓縎縜縕縚縢縋縏縖縍縔縥縤罃罻罼罺羱翯耪耩聬膱膦膮膹膵膫膰膬膴膲膷膧臲艕艖艗蕖蕅蕫蕍蕓蕡蕘�".split(""),e=0;e!=r[234].length;++e)65533!==r[234][e].charCodeAt(0)&&(n[r[234][e]]=59904+e,t[59904+e]=r[234][e]);for(r[235]="����������������������������������������������������������������蕀蕆蕤蕁蕢蕄蕑蕇蕣蔾蕛蕱蕎蕮蕵蕕蕧蕠薌蕦蕝蕔蕥蕬虣虥虤螛螏螗螓螒螈螁螖螘蝹螇螣螅螐螑螝螄螔螜螚螉褞褦褰褭褮褧褱褢褩褣褯褬褟觱諠����������������������������������諢諲諴諵諝謔諤諟諰諈諞諡諨諿諯諻貑貒貐賵賮賱賰賳赬赮趥趧踳踾踸蹀蹅踶踼踽蹁踰踿躽輶輮輵輲輹輷輴遶遹遻邆郺鄳鄵鄶醓醐醑醍醏錧錞錈錟錆錏鍺錸錼錛錣錒錁鍆錭錎錍鋋錝鋺錥錓鋹鋷錴錂錤鋿錩錹錵錪錔錌�".split(""),e=0;e!=r[235].length;++e)65533!==r[235][e].charCodeAt(0)&&(n[r[235][e]]=60160+e,t[60160+e]=r[235][e]);for(r[236]="����������������������������������������������������������������錋鋾錉錀鋻錖閼闍閾閹閺閶閿閵閽隩雔霋霒霐鞙鞗鞔韰韸頵頯頲餤餟餧餩馞駮駬駥駤駰駣駪駩駧骹骿骴骻髶髺髹髷鬳鮀鮅鮇魼魾魻鮂鮓鮒鮐魺鮕����������������������������������魽鮈鴥鴗鴠鴞鴔鴩鴝鴘鴢鴐鴙鴟麈麆麇麮麭黕黖黺鼒鼽儦儥儢儤儠儩勴嚓嚌嚍嚆嚄嚃噾嚂噿嚁壖壔壏壒嬭嬥嬲嬣嬬嬧嬦嬯嬮孻寱寲嶷幬幪徾徻懃憵憼懧懠懥懤懨懞擯擩擣擫擤擨斁斀斶旚曒檍檖檁檥檉檟檛檡檞檇檓檎�".split(""),e=0;e!=r[236].length;++e)65533!==r[236][e].charCodeAt(0)&&(n[r[236][e]]=60416+e,t[60416+e]=r[236][e]);for(r[237]="����������������������������������������������������������������檕檃檨檤檑橿檦檚檅檌檒歛殭氉濌澩濴濔濣濜濭濧濦濞濲濝濢濨燡燱燨燲燤燰燢獳獮獯璗璲璫璐璪璭璱璥璯甐甑甒甏疄癃癈癉癇皤盩瞵瞫瞲瞷瞶����������������������������������瞴瞱瞨矰磳磽礂磻磼磲礅磹磾礄禫禨穜穛穖穘穔穚窾竀竁簅簏篲簀篿篻簎篴簋篳簂簉簃簁篸篽簆篰篱簐簊糨縭縼繂縳顈縸縪繉繀繇縩繌縰縻縶繄縺罅罿罾罽翴翲耬膻臄臌臊臅臇膼臩艛艚艜薃薀薏薧薕薠薋薣蕻薤薚薞�".split(""),e=0;e!=r[237].length;++e)65533!==r[237][e].charCodeAt(0)&&(n[r[237][e]]=60672+e,t[60672+e]=r[237][e]);for(r[238]="����������������������������������������������������������������蕷蕼薉薡蕺蕸蕗薎薖薆薍薙薝薁薢薂薈薅蕹蕶薘薐薟虨螾螪螭蟅螰螬螹螵螼螮蟉蟃蟂蟌螷螯蟄蟊螴螶螿螸螽蟞螲褵褳褼褾襁襒褷襂覭覯覮觲觳謞����������������������������������謘謖謑謅謋謢謏謒謕謇謍謈謆謜謓謚豏豰豲豱豯貕貔賹赯蹎蹍蹓蹐蹌蹇轃轀邅遾鄸醚醢醛醙醟醡醝醠鎡鎃鎯鍤鍖鍇鍼鍘鍜鍶鍉鍐鍑鍠鍭鎏鍌鍪鍹鍗鍕鍒鍏鍱鍷鍻鍡鍞鍣鍧鎀鍎鍙闇闀闉闃闅閷隮隰隬霠霟霘霝霙鞚鞡鞜�".split(""),e=0;e!=r[238].length;++e)65533!==r[238][e].charCodeAt(0)&&(n[r[238][e]]=60928+e,t[60928+e]=r[238][e]);for(r[239]="����������������������������������������������������������������鞞鞝韕韔韱顁顄顊顉顅顃餥餫餬餪餳餲餯餭餱餰馘馣馡騂駺駴駷駹駸駶駻駽駾駼騃骾髾髽鬁髼魈鮚鮨鮞鮛鮦鮡鮥鮤鮆鮢鮠鮯鴳鵁鵧鴶鴮鴯鴱鴸鴰����������������������������������鵅鵂鵃鴾鴷鵀鴽翵鴭麊麉麍麰黈黚黻黿鼤鼣鼢齔龠儱儭儮嚘嚜嚗嚚嚝嚙奰嬼屩屪巀幭幮懘懟懭懮懱懪懰懫懖懩擿攄擽擸攁攃擼斔旛曚曛曘櫅檹檽櫡櫆檺檶檷櫇檴檭歞毉氋瀇瀌瀍瀁瀅瀔瀎濿瀀濻瀦濼濷瀊爁燿燹爃燽獶�".split(""),e=0;e!=r[239].length;++e)65533!==r[239][e].charCodeAt(0)&&(n[r[239][e]]=61184+e,t[61184+e]=r[239][e]);for(r[240]="����������������������������������������������������������������璸瓀璵瓁璾璶璻瓂甔甓癜癤癙癐癓癗癚皦皽盬矂瞺磿礌礓礔礉礐礒礑禭禬穟簜簩簙簠簟簭簝簦簨簢簥簰繜繐繖繣繘繢繟繑繠繗繓羵羳翷翸聵臑臒����������������������������������臐艟艞薴藆藀藃藂薳薵薽藇藄薿藋藎藈藅薱薶藒蘤薸薷薾虩蟧蟦蟢蟛蟫蟪蟥蟟蟳蟤蟔蟜蟓蟭蟘蟣螤蟗蟙蠁蟴蟨蟝襓襋襏襌襆襐襑襉謪謧謣謳謰謵譇謯謼謾謱謥謷謦謶謮謤謻謽謺豂豵貙貘貗賾贄贂贀蹜蹢蹠蹗蹖蹞蹥蹧�".split(""),e=0;e!=r[240].length;++e)65533!==r[240][e].charCodeAt(0)&&(n[r[240][e]]=61440+e,t[61440+e]=r[240][e]);for(r[241]="����������������������������������������������������������������蹛蹚蹡蹝蹩蹔轆轇轈轋鄨鄺鄻鄾醨醥醧醯醪鎵鎌鎒鎷鎛鎝鎉鎧鎎鎪鎞鎦鎕鎈鎙鎟鎍鎱鎑鎲鎤鎨鎴鎣鎥闒闓闑隳雗雚巂雟雘雝霣霢霥鞬鞮鞨鞫鞤鞪����������������������������������鞢鞥韗韙韖韘韺顐顑顒颸饁餼餺騏騋騉騍騄騑騊騅騇騆髀髜鬈鬄鬅鬩鬵魊魌魋鯇鯆鯃鮿鯁鮵鮸鯓鮶鯄鮹鮽鵜鵓鵏鵊鵛鵋鵙鵖鵌鵗鵒鵔鵟鵘鵚麎麌黟鼁鼀鼖鼥鼫鼪鼩鼨齌齕儴儵劖勷厴嚫嚭嚦嚧嚪嚬壚壝壛夒嬽嬾嬿巃幰�".split(""),e=0;e!=r[241].length;++e)65533!==r[241][e].charCodeAt(0)&&(n[r[241][e]]=61696+e,t[61696+e]=r[241][e]);for(r[242]="����������������������������������������������������������������徿懻攇攐攍攉攌攎斄旞旝曞櫧櫠櫌櫑櫙櫋櫟櫜櫐櫫櫏櫍櫞歠殰氌瀙瀧瀠瀖瀫瀡瀢瀣瀩瀗瀤瀜瀪爌爊爇爂爅犥犦犤犣犡瓋瓅璷瓃甖癠矉矊矄矱礝礛����������������������������������礡礜礗礞禰穧穨簳簼簹簬簻糬糪繶繵繸繰繷繯繺繲繴繨罋罊羃羆羷翽翾聸臗臕艤艡艣藫藱藭藙藡藨藚藗藬藲藸藘藟藣藜藑藰藦藯藞藢蠀蟺蠃蟶蟷蠉蠌蠋蠆蟼蠈蟿蠊蠂襢襚襛襗襡襜襘襝襙覈覷覶觶譐譈譊譀譓譖譔譋譕�".split(""),e=0;e!=r[242].length;++e)65533!==r[242][e].charCodeAt(0)&&(n[r[242][e]]=61952+e,t[61952+e]=r[242][e]);for(r[243]="����������������������������������������������������������������譑譂譒譗豃豷豶貚贆贇贉趬趪趭趫蹭蹸蹳蹪蹯蹻軂轒轑轏轐轓辴酀鄿醰醭鏞鏇鏏鏂鏚鏐鏹鏬鏌鏙鎩鏦鏊鏔鏮鏣鏕鏄鏎鏀鏒鏧镽闚闛雡霩霫霬霨霦����������������������������������鞳鞷鞶韝韞韟顜顙顝顗颿颽颻颾饈饇饃馦馧騚騕騥騝騤騛騢騠騧騣騞騜騔髂鬋鬊鬎鬌鬷鯪鯫鯠鯞鯤鯦鯢鯰鯔鯗鯬鯜鯙鯥鯕鯡鯚鵷鶁鶊鶄鶈鵱鶀鵸鶆鶋鶌鵽鵫鵴鵵鵰鵩鶅鵳鵻鶂鵯鵹鵿鶇鵨麔麑黀黼鼭齀齁齍齖齗齘匷嚲�".split(""),e=0;e!=r[243].length;++e)65533!==r[243][e].charCodeAt(0)&&(n[r[243][e]]=62208+e,t[62208+e]=r[243][e]);for(r[244]="����������������������������������������������������������������嚵嚳壣孅巆巇廮廯忀忁懹攗攖攕攓旟曨曣曤櫳櫰櫪櫨櫹櫱櫮櫯瀼瀵瀯瀷瀴瀱灂瀸瀿瀺瀹灀瀻瀳灁爓爔犨獽獼璺皫皪皾盭矌矎矏矍矲礥礣礧礨礤礩����������������������������������禲穮穬穭竷籉籈籊籇籅糮繻繾纁纀羺翿聹臛臙舋艨艩蘢藿蘁藾蘛蘀藶蘄蘉蘅蘌藽蠙蠐蠑蠗蠓蠖襣襦覹觷譠譪譝譨譣譥譧譭趮躆躈躄轙轖轗轕轘轚邍酃酁醷醵醲醳鐋鐓鏻鐠鐏鐔鏾鐕鐐鐨鐙鐍鏵鐀鏷鐇鐎鐖鐒鏺鐉鏸鐊鏿�".split(""),e=0;e!=r[244].length;++e)65533!==r[244][e].charCodeAt(0)&&(n[r[244][e]]=62464+e,t[62464+e]=r[244][e]);for(r[245]="����������������������������������������������������������������鏼鐌鏶鐑鐆闞闠闟霮霯鞹鞻韽韾顠顢顣顟飁飂饐饎饙饌饋饓騲騴騱騬騪騶騩騮騸騭髇髊髆鬐鬒鬑鰋鰈鯷鰅鰒鯸鱀鰇鰎鰆鰗鰔鰉鶟鶙鶤鶝鶒鶘鶐鶛����������������������������������鶠鶔鶜鶪鶗鶡鶚鶢鶨鶞鶣鶿鶩鶖鶦鶧麙麛麚黥黤黧黦鼰鼮齛齠齞齝齙龑儺儹劘劗囃嚽嚾孈孇巋巏廱懽攛欂櫼欃櫸欀灃灄灊灈灉灅灆爝爚爙獾甗癪矐礭礱礯籔籓糲纊纇纈纋纆纍罍羻耰臝蘘蘪蘦蘟蘣蘜蘙蘧蘮蘡蘠蘩蘞蘥�".split(""),e=0;e!=r[245].length;++e)65533!==r[245][e].charCodeAt(0)&&(n[r[245][e]]=62720+e,t[62720+e]=r[245][e]);for(r[246]="����������������������������������������������������������������蠩蠝蠛蠠蠤蠜蠫衊襭襩襮襫觺譹譸譅譺譻贐贔趯躎躌轞轛轝酆酄酅醹鐿鐻鐶鐩鐽鐼鐰鐹鐪鐷鐬鑀鐱闥闤闣霵霺鞿韡顤飉飆飀饘饖騹騽驆驄驂驁騺����������������������������������騿髍鬕鬗鬘鬖鬺魒鰫鰝鰜鰬鰣鰨鰩鰤鰡鶷鶶鶼鷁鷇鷊鷏鶾鷅鷃鶻鶵鷎鶹鶺鶬鷈鶱鶭鷌鶳鷍鶲鹺麜黫黮黭鼛鼘鼚鼱齎齥齤龒亹囆囅囋奱孋孌巕巑廲攡攠攦攢欋欈欉氍灕灖灗灒爞爟犩獿瓘瓕瓙瓗癭皭礵禴穰穱籗籜籙籛籚�".split(""),e=0;e!=r[246].length;++e)65533!==r[246][e].charCodeAt(0)&&(n[r[246][e]]=62976+e,t[62976+e]=r[246][e]);for(r[247]="����������������������������������������������������������������糴糱纑罏羇臞艫蘴蘵蘳蘬蘲蘶蠬蠨蠦蠪蠥襱覿覾觻譾讄讂讆讅譿贕躕躔躚躒躐躖躗轠轢酇鑌鑐鑊鑋鑏鑇鑅鑈鑉鑆霿韣顪顩飋饔饛驎驓驔驌驏驈驊����������������������������������驉驒驐髐鬙鬫鬻魖魕鱆鱈鰿鱄鰹鰳鱁鰼鰷鰴鰲鰽鰶鷛鷒鷞鷚鷋鷐鷜鷑鷟鷩鷙鷘鷖鷵鷕鷝麶黰鼵鼳鼲齂齫龕龢儽劙壨壧奲孍巘蠯彏戁戃戄攩攥斖曫欑欒欏毊灛灚爢玂玁玃癰矔籧籦纕艬蘺虀蘹蘼蘱蘻蘾蠰蠲蠮蠳襶襴襳觾�".split(""),e=0;e!=r[247].length;++e)65533!==r[247][e].charCodeAt(0)&&(n[r[247][e]]=63232+e,t[63232+e]=r[247][e]);for(r[248]="����������������������������������������������������������������讌讎讋讈豅贙躘轤轣醼鑢鑕鑝鑗鑞韄韅頀驖驙鬞鬟鬠鱒鱘鱐鱊鱍鱋鱕鱙鱌鱎鷻鷷鷯鷣鷫鷸鷤鷶鷡鷮鷦鷲鷰鷢鷬鷴鷳鷨鷭黂黐黲黳鼆鼜鼸鼷鼶齃齏����������������������������������齱齰齮齯囓囍孎屭攭曭曮欓灟灡灝灠爣瓛瓥矕礸禷禶籪纗羉艭虃蠸蠷蠵衋讔讕躞躟躠躝醾醽釂鑫鑨鑩雥靆靃靇韇韥驞髕魙鱣鱧鱦鱢鱞鱠鸂鷾鸇鸃鸆鸅鸀鸁鸉鷿鷽鸄麠鼞齆齴齵齶囔攮斸欘欙欗欚灢爦犪矘矙礹籩籫糶纚�".split(""),e=0;e!=r[248].length;++e)65533!==r[248][e].charCodeAt(0)&&(n[r[248][e]]=63488+e,t[63488+e]=r[248][e]);for(r[249]="����������������������������������������������������������������纘纛纙臠臡虆虇虈襹襺襼襻觿讘讙躥躤躣鑮鑭鑯鑱鑳靉顲饟鱨鱮鱭鸋鸍鸐鸏鸒鸑麡黵鼉齇齸齻齺齹圞灦籯蠼趲躦釃鑴鑸鑶鑵驠鱴鱳鱱鱵鸔鸓黶鼊����������������������������������龤灨灥糷虪蠾蠽蠿讞貜躩軉靋顳顴飌饡馫驤驦驧鬤鸕鸗齈戇欞爧虌躨钂钀钁驩驨鬮鸙爩虋讟钃鱹麷癵驫鱺鸝灩灪麤齾齉龘碁銹裏墻恒粧嫺╔╦╗╠╬╣╚╩╝╒╤╕╞╪╡╘╧╛╓╥╖╟╫╢╙╨╜║═╭╮╰╯▓�".split(""),e=0;e!=r[249].length;++e)65533!==r[249][e].charCodeAt(0)&&(n[r[249][e]]=63744+e,t[63744+e]=r[249][e]);return{enc:n,dec:t}}(),t[1250]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚�„…†‡�‰Š‹ŚŤŽŹ�‘’“”•–—�™š›śťžź ˇ˘Ł¤Ą¦§¨©Ş«¬­®Ż°±˛ł´µ¶·¸ąş»Ľ˝ľżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),t[1251]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—�™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬­®Ї°±Ііґµ¶·ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),t[1252]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),t[1253]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡�‰�‹�����‘’“”•–—�™�›���� ΅Ά£¤¥¦§¨©�«¬­®―°±²³΄µ¶·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),t[1254]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡ˆ‰Š‹Œ����‘’“”•–—˜™š›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖרÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),t[1255]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡ˆ‰�‹�����‘’“”•–—˜™�›���� ¡¢£₪¥¦§¨©×«¬­®¯°±²³´µ¶·¸¹÷»¼½¾¿ְֱֲֳִֵֶַָֹ�ֻּֽ־ֿ׀ׁׂ׃װױײ׳״�������אבגדהוזחטיךכלםמןנסעףפץצקרשת��‎‏�",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),t[1256]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€پ‚ƒ„…†‡ˆ‰ٹ‹Œچژڈگ‘’“”•–—ک™ڑ›œ‌‍ں ،¢£¤¥¦§¨©ھ«¬­®¯°±²³´µ¶·¸¹؛»¼½¾؟ہءآأؤإئابةتثجحخدذرزسشصض×طظعغـفقكàلâمنهوçèéêëىيîïًٌٍَôُِ÷ّùْûü‎‏ے",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),t[1257]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚�„…†‡�‰�‹�¨ˇ¸�‘’“”•–—�™�›�¯˛� �¢£¤�¦§Ø©Ŗ«¬­®Æ°±²³´µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž˙",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),t[1258]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€�‚ƒ„…†‡ˆ‰�‹Œ����‘’“”•–—˜™�›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖרÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),t[1e4]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),t[10006]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦­ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ�",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),t[10007]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°¢£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµ∂ЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),t[10008]=function(){var e,t=[],n={},r=[];for(r[0]="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~€���������������������������������������������������������������������������������������".split(""),e=0;e!=r[0].length;++e)65533!==r[0][e].charCodeAt(0)&&(n[r[0][e]]=0+e,t[0+e]=r[0][e]);for(r[161]="����������������������������������������������������������������������������������������������������������������������������������������������������������������� 、。・ˉˇ¨〃々―~�…‘’“”〔〕〈〉《》「」『』〖〗【】±×÷∶∧∨∑∏∪∩∈∷√⊥∥∠⌒⊙∫∮≡≌≈∽∝≠≮≯≤≥∞∵∴♂♀°′″℃$¤¢£‰§№☆★○●◎◇◆□■△▲※→←↑↓〓�".split(""),e=0;e!=r[161].length;++e)65533!==r[161][e].charCodeAt(0)&&(n[r[161][e]]=41216+e,t[41216+e]=r[161][e]);for(r[162]="���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓⒔⒕⒖⒗⒘⒙⒚⒛⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿⒀⒁⒂⒃⒄⒅⒆⒇①②③④⑤⑥⑦⑧⑨⑩��㈠㈡㈢㈣㈤㈥㈦㈧㈨㈩��ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫ���".split(""),e=0;e!=r[162].length;++e)65533!==r[162][e].charCodeAt(0)&&(n[r[162][e]]=41472+e,t[41472+e]=r[162][e]);for(r[163]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������!"#¥%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|} ̄�".split(""),e=0;e!=r[163].length;++e)65533!==r[163][e].charCodeAt(0)&&(n[r[163][e]]=41728+e,t[41728+e]=r[163][e]);for(r[164]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをん������������".split(""),e=0;e!=r[164].length;++e)65533!==r[164][e].charCodeAt(0)&&(n[r[164][e]]=41984+e,t[41984+e]=r[164][e]);for(r[165]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ���������".split(""),e=0;e!=r[165].length;++e)65533!==r[165][e].charCodeAt(0)&&(n[r[165][e]]=42240+e,t[42240+e]=r[165][e]);for(r[166]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ��������αβγδεζηθικλμνξοπρστυφχψω���������������������������������������".split(""),e=0;e!=r[166].length;++e)65533!==r[166][e].charCodeAt(0)&&(n[r[166][e]]=42496+e,t[42496+e]=r[166][e]);for(r[167]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ���������������абвгдеёжзийклмнопрстуфхцчшщъыьэюя��������������".split(""),e=0;e!=r[167].length;++e)65533!==r[167][e].charCodeAt(0)&&(n[r[167][e]]=42752+e,t[42752+e]=r[167][e]);for(r[168]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜüê����������ㄅㄆㄇㄈㄉㄊㄋㄌㄍㄎㄏㄐㄑㄒㄓㄔㄕㄖㄗㄘㄙㄚㄛㄜㄝㄞㄟㄠㄡㄢㄣㄤㄥㄦㄧㄨㄩ����������������������".split(""),e=0;e!=r[168].length;++e)65533!==r[168][e].charCodeAt(0)&&(n[r[168][e]]=43008+e,t[43008+e]=r[168][e]);for(r[169]="��������������������������������������������������������������������������������������������������������������������������������������������������������������������─━│┃┄┅┆┇┈┉┊┋┌┍┎┏┐┑┒┓└┕┖┗┘┙┚┛├┝┞┟┠┡┢┣┤┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿╀╁╂╃╄╅╆╇╈╉╊╋����������������".split(""),e=0;e!=r[169].length;++e)65533!==r[169][e].charCodeAt(0)&&(n[r[169][e]]=43264+e,t[43264+e]=r[169][e]);for(r[176]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������啊阿埃挨哎唉哀皑癌蔼矮艾碍爱隘鞍氨安俺按暗岸胺案肮昂盎凹敖熬翱袄傲奥懊澳芭捌扒叭吧笆八疤巴拔跋靶把耙坝霸罢爸白柏百摆佰败拜稗斑班搬扳般颁板版扮拌伴瓣半办绊邦帮梆榜膀绑棒磅蚌镑傍谤苞胞包褒剥�".split(""),e=0;e!=r[176].length;++e)65533!==r[176][e].charCodeAt(0)&&(n[r[176][e]]=45056+e,t[45056+e]=r[176][e]);for(r[177]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������薄雹保堡饱宝抱报暴豹鲍爆杯碑悲卑北辈背贝钡倍狈备惫焙被奔苯本笨崩绷甭泵蹦迸逼鼻比鄙笔彼碧蓖蔽毕毙毖币庇痹闭敝弊必辟壁臂避陛鞭边编贬扁便变卞辨辩辫遍标彪膘表鳖憋别瘪彬斌濒滨宾摈兵冰柄丙秉饼炳�".split(""),e=0;e!=r[177].length;++e)65533!==r[177][e].charCodeAt(0)&&(n[r[177][e]]=45312+e,t[45312+e]=r[177][e]);for(r[178]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������病并玻菠播拨钵波博勃搏铂箔伯帛舶脖膊渤泊驳捕卜哺补埠不布步簿部怖擦猜裁材才财睬踩采彩菜蔡餐参蚕残惭惨灿苍舱仓沧藏操糙槽曹草厕策侧册测层蹭插叉茬茶查碴搽察岔差诧拆柴豺搀掺蝉馋谗缠铲产阐颤昌猖�".split(""),e=0;e!=r[178].length;++e)65533!==r[178][e].charCodeAt(0)&&(n[r[178][e]]=45568+e,t[45568+e]=r[178][e]);for(r[179]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������场尝常长偿肠厂敞畅唱倡超抄钞朝嘲潮巢吵炒车扯撤掣彻澈郴臣辰尘晨忱沉陈趁衬撑称城橙成呈乘程惩澄诚承逞骋秤吃痴持匙池迟弛驰耻齿侈尺赤翅斥炽充冲虫崇宠抽酬畴踌稠愁筹仇绸瞅丑臭初出橱厨躇锄雏滁除楚�".split(""),e=0;e!=r[179].length;++e)65533!==r[179][e].charCodeAt(0)&&(n[r[179][e]]=45824+e,t[45824+e]=r[179][e]);for(r[180]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������础储矗搐触处揣川穿椽传船喘串疮窗幢床闯创吹炊捶锤垂春椿醇唇淳纯蠢戳绰疵茨磁雌辞慈瓷词此刺赐次聪葱囱匆从丛凑粗醋簇促蹿篡窜摧崔催脆瘁粹淬翠村存寸磋撮搓措挫错搭达答瘩打大呆歹傣戴带殆代贷袋待逮�".split(""),e=0;e!=r[180].length;++e)65533!==r[180][e].charCodeAt(0)&&(n[r[180][e]]=46080+e,t[46080+e]=r[180][e]);for(r[181]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������怠耽担丹单郸掸胆旦氮但惮淡诞弹蛋当挡党荡档刀捣蹈倒岛祷导到稻悼道盗德得的蹬灯登等瞪凳邓堤低滴迪敌笛狄涤翟嫡抵底地蒂第帝弟递缔颠掂滇碘点典靛垫电佃甸店惦奠淀殿碉叼雕凋刁掉吊钓调跌爹碟蝶迭谍叠�".split(""),e=0;e!=r[181].length;++e)65533!==r[181][e].charCodeAt(0)&&(n[r[181][e]]=46336+e,t[46336+e]=r[181][e]);for(r[182]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������丁盯叮钉顶鼎锭定订丢东冬董懂动栋侗恫冻洞兜抖斗陡豆逗痘都督毒犊独读堵睹赌杜镀肚度渡妒端短锻段断缎堆兑队对墩吨蹲敦顿囤钝盾遁掇哆多夺垛躲朵跺舵剁惰堕蛾峨鹅俄额讹娥恶厄扼遏鄂饿恩而儿耳尔饵洱二�".split(""),e=0;e!=r[182].length;++e)65533!==r[182][e].charCodeAt(0)&&(n[r[182][e]]=46592+e,t[46592+e]=r[182][e]);for(r[183]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������贰发罚筏伐乏阀法珐藩帆番翻樊矾钒繁凡烦反返范贩犯饭泛坊芳方肪房防妨仿访纺放菲非啡飞肥匪诽吠肺废沸费芬酚吩氛分纷坟焚汾粉奋份忿愤粪丰封枫蜂峰锋风疯烽逢冯缝讽奉凤佛否夫敷肤孵扶拂辐幅氟符伏俘服�".split(""),e=0;e!=r[183].length;++e)65533!==r[183][e].charCodeAt(0)&&(n[r[183][e]]=46848+e,t[46848+e]=r[183][e]);for(r[184]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������浮涪福袱弗甫抚辅俯釜斧脯腑府腐赴副覆赋复傅付阜父腹负富讣附妇缚咐噶嘎该改概钙盖溉干甘杆柑竿肝赶感秆敢赣冈刚钢缸肛纲岗港杠篙皋高膏羔糕搞镐稿告哥歌搁戈鸽胳疙割革葛格蛤阁隔铬个各给根跟耕更庚羹�".split(""),e=0;e!=r[184].length;++e)65533!==r[184][e].charCodeAt(0)&&(n[r[184][e]]=47104+e,t[47104+e]=r[184][e]);for(r[185]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������埂耿梗工攻功恭龚供躬公宫弓巩汞拱贡共钩勾沟苟狗垢构购够辜菇咕箍估沽孤姑鼓古蛊骨谷股故顾固雇刮瓜剐寡挂褂乖拐怪棺关官冠观管馆罐惯灌贯光广逛瑰规圭硅归龟闺轨鬼诡癸桂柜跪贵刽辊滚棍锅郭国果裹过哈�".split(""),e=0;e!=r[185].length;++e)65533!==r[185][e].charCodeAt(0)&&(n[r[185][e]]=47360+e,t[47360+e]=r[185][e]);for(r[186]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������骸孩海氦亥害骇酣憨邯韩含涵寒函喊罕翰撼捍旱憾悍焊汗汉夯杭航壕嚎豪毫郝好耗号浩呵喝荷菏核禾和何合盒貉阂河涸赫褐鹤贺嘿黑痕很狠恨哼亨横衡恒轰哄烘虹鸿洪宏弘红喉侯猴吼厚候后呼乎忽瑚壶葫胡蝴狐糊湖�".split(""),e=0;e!=r[186].length;++e)65533!==r[186][e].charCodeAt(0)&&(n[r[186][e]]=47616+e,t[47616+e]=r[186][e]);for(r[187]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������弧虎唬护互沪户花哗华猾滑画划化话槐徊怀淮坏欢环桓还缓换患唤痪豢焕涣宦幻荒慌黄磺蝗簧皇凰惶煌晃幌恍谎灰挥辉徽恢蛔回毁悔慧卉惠晦贿秽会烩汇讳诲绘荤昏婚魂浑混豁活伙火获或惑霍货祸击圾基机畸稽积箕�".split(""),e=0;e!=r[187].length;++e)65533!==r[187][e].charCodeAt(0)&&(n[r[187][e]]=47872+e,t[47872+e]=r[187][e]);for(r[188]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������肌饥迹激讥鸡姬绩缉吉极棘辑籍集及急疾汲即嫉级挤几脊己蓟技冀季伎祭剂悸济寄寂计记既忌际妓继纪嘉枷夹佳家加荚颊贾甲钾假稼价架驾嫁歼监坚尖笺间煎兼肩艰奸缄茧检柬碱硷拣捡简俭剪减荐槛鉴践贱见键箭件�".split(""),e=0;e!=r[188].length;++e)65533!==r[188][e].charCodeAt(0)&&(n[r[188][e]]=48128+e,t[48128+e]=r[188][e]);for(r[189]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������健舰剑饯渐溅涧建僵姜将浆江疆蒋桨奖讲匠酱降蕉椒礁焦胶交郊浇骄娇嚼搅铰矫侥脚狡角饺缴绞剿教酵轿较叫窖揭接皆秸街阶截劫节桔杰捷睫竭洁结解姐戒藉芥界借介疥诫届巾筋斤金今津襟紧锦仅谨进靳晋禁近烬浸�".split(""),e=0;e!=r[189].length;++e)65533!==r[189][e].charCodeAt(0)&&(n[r[189][e]]=48384+e,t[48384+e]=r[189][e]);for(r[190]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������尽劲荆兢茎睛晶鲸京惊精粳经井警景颈静境敬镜径痉靖竟竞净炯窘揪究纠玖韭久灸九酒厩救旧臼舅咎就疚鞠拘狙疽居驹菊局咀矩举沮聚拒据巨具距踞锯俱句惧炬剧捐鹃娟倦眷卷绢撅攫抉掘倔爵觉决诀绝均菌钧军君峻�".split(""),e=0;e!=r[190].length;++e)65533!==r[190][e].charCodeAt(0)&&(n[r[190][e]]=48640+e,t[48640+e]=r[190][e]);for(r[191]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������俊竣浚郡骏喀咖卡咯开揩楷凯慨刊堪勘坎砍看康慷糠扛抗亢炕考拷烤靠坷苛柯棵磕颗科壳咳可渴克刻客课肯啃垦恳坑吭空恐孔控抠口扣寇枯哭窟苦酷库裤夸垮挎跨胯块筷侩快宽款匡筐狂框矿眶旷况亏盔岿窥葵奎魁傀�".split(""),e=0;e!=r[191].length;++e)65533!==r[191][e].charCodeAt(0)&&(n[r[191][e]]=48896+e,t[48896+e]=r[191][e]);for(r[192]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������馈愧溃坤昆捆困括扩廓阔垃拉喇蜡腊辣啦莱来赖蓝婪栏拦篮阑兰澜谰揽览懒缆烂滥琅榔狼廊郎朗浪捞劳牢老佬姥酪烙涝勒乐雷镭蕾磊累儡垒擂肋类泪棱楞冷厘梨犁黎篱狸离漓理李里鲤礼莉荔吏栗丽厉励砾历利傈例俐�".split(""),e=0;e!=r[192].length;++e)65533!==r[192][e].charCodeAt(0)&&(n[r[192][e]]=49152+e,t[49152+e]=r[192][e]);for(r[193]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������痢立粒沥隶力璃哩俩联莲连镰廉怜涟帘敛脸链恋炼练粮凉梁粱良两辆量晾亮谅撩聊僚疗燎寥辽潦了撂镣廖料列裂烈劣猎琳林磷霖临邻鳞淋凛赁吝拎玲菱零龄铃伶羚凌灵陵岭领另令溜琉榴硫馏留刘瘤流柳六龙聋咙笼窿�".split(""),e=0;e!=r[193].length;++e)65533!==r[193][e].charCodeAt(0)&&(n[r[193][e]]=49408+e,t[49408+e]=r[193][e]);for(r[194]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������隆垄拢陇楼娄搂篓漏陋芦卢颅庐炉掳卤虏鲁麓碌露路赂鹿潞禄录陆戮驴吕铝侣旅履屡缕虑氯律率滤绿峦挛孪滦卵乱掠略抡轮伦仑沦纶论萝螺罗逻锣箩骡裸落洛骆络妈麻玛码蚂马骂嘛吗埋买麦卖迈脉瞒馒蛮满蔓曼慢漫�".split(""),e=0;e!=r[194].length;++e)65533!==r[194][e].charCodeAt(0)&&(n[r[194][e]]=49664+e,t[49664+e]=r[194][e]);for(r[195]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������谩芒茫盲氓忙莽猫茅锚毛矛铆卯茂冒帽貌贸么玫枚梅酶霉煤没眉媒镁每美昧寐妹媚门闷们萌蒙檬盟锰猛梦孟眯醚靡糜迷谜弥米秘觅泌蜜密幂棉眠绵冕免勉娩缅面苗描瞄藐秒渺庙妙蔑灭民抿皿敏悯闽明螟鸣铭名命谬摸�".split(""),e=0;e!=r[195].length;++e)65533!==r[195][e].charCodeAt(0)&&(n[r[195][e]]=49920+e,t[49920+e]=r[195][e]);for(r[196]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������摹蘑模膜磨摩魔抹末莫墨默沫漠寞陌谋牟某拇牡亩姆母墓暮幕募慕木目睦牧穆拿哪呐钠那娜纳氖乃奶耐奈南男难囊挠脑恼闹淖呢馁内嫩能妮霓倪泥尼拟你匿腻逆溺蔫拈年碾撵捻念娘酿鸟尿捏聂孽啮镊镍涅您柠狞凝宁�".split(""),e=0;e!=r[196].length;++e)65533!==r[196][e].charCodeAt(0)&&(n[r[196][e]]=50176+e,t[50176+e]=r[196][e]);for(r[197]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������拧泞牛扭钮纽脓浓农弄奴努怒女暖虐疟挪懦糯诺哦欧鸥殴藕呕偶沤啪趴爬帕怕琶拍排牌徘湃派攀潘盘磐盼畔判叛乓庞旁耪胖抛咆刨炮袍跑泡呸胚培裴赔陪配佩沛喷盆砰抨烹澎彭蓬棚硼篷膨朋鹏捧碰坯砒霹批披劈琵毗�".split(""),e=0;e!=r[197].length;++e)65533!==r[197][e].charCodeAt(0)&&(n[r[197][e]]=50432+e,t[50432+e]=r[197][e]);for(r[198]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������啤脾疲皮匹痞僻屁譬篇偏片骗飘漂瓢票撇瞥拼频贫品聘乒坪苹萍平凭瓶评屏坡泼颇婆破魄迫粕剖扑铺仆莆葡菩蒲埔朴圃普浦谱曝瀑期欺栖戚妻七凄漆柒沏其棋奇歧畦崎脐齐旗祈祁骑起岂乞企启契砌器气迄弃汽泣讫掐�".split(""),e=0;e!=r[198].length;++e)65533!==r[198][e].charCodeAt(0)&&(n[r[198][e]]=50688+e,t[50688+e]=r[198][e]);for(r[199]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������恰洽牵扦钎铅千迁签仟谦乾黔钱钳前潜遣浅谴堑嵌欠歉枪呛腔羌墙蔷强抢橇锹敲悄桥瞧乔侨巧鞘撬翘峭俏窍切茄且怯窃钦侵亲秦琴勤芹擒禽寝沁青轻氢倾卿清擎晴氰情顷请庆琼穷秋丘邱球求囚酋泅趋区蛆曲躯屈驱渠�".split(""),e=0;e!=r[199].length;++e)65533!==r[199][e].charCodeAt(0)&&(n[r[199][e]]=50944+e,t[50944+e]=r[199][e]);for(r[200]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������取娶龋趣去圈颧权醛泉全痊拳犬券劝缺炔瘸却鹊榷确雀裙群然燃冉染瓤壤攘嚷让饶扰绕惹热壬仁人忍韧任认刃妊纫扔仍日戎茸蓉荣融熔溶容绒冗揉柔肉茹蠕儒孺如辱乳汝入褥软阮蕊瑞锐闰润若弱撒洒萨腮鳃塞赛三叁�".split(""),e=0;e!=r[200].length;++e)65533!==r[200][e].charCodeAt(0)&&(n[r[200][e]]=51200+e,t[51200+e]=r[200][e]);for(r[201]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������伞散桑嗓丧搔骚扫嫂瑟色涩森僧莎砂杀刹沙纱傻啥煞筛晒珊苫杉山删煽衫闪陕擅赡膳善汕扇缮墒伤商赏晌上尚裳梢捎稍烧芍勺韶少哨邵绍奢赊蛇舌舍赦摄射慑涉社设砷申呻伸身深娠绅神沈审婶甚肾慎渗声生甥牲升绳�".split(""),e=0;e!=r[201].length;++e)65533!==r[201][e].charCodeAt(0)&&(n[r[201][e]]=51456+e,t[51456+e]=r[201][e]);for(r[202]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������省盛剩胜圣师失狮施湿诗尸虱十石拾时什食蚀实识史矢使屎驶始式示士世柿事拭誓逝势是嗜噬适仕侍释饰氏市恃室视试收手首守寿授售受瘦兽蔬枢梳殊抒输叔舒淑疏书赎孰熟薯暑曙署蜀黍鼠属术述树束戍竖墅庶数漱�".split(""),e=0;e!=r[202].length;++e)65533!==r[202][e].charCodeAt(0)&&(n[r[202][e]]=51712+e,t[51712+e]=r[202][e]);for(r[203]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������恕刷耍摔衰甩帅栓拴霜双爽谁水睡税吮瞬顺舜说硕朔烁斯撕嘶思私司丝死肆寺嗣四伺似饲巳松耸怂颂送宋讼诵搜艘擞嗽苏酥俗素速粟僳塑溯宿诉肃酸蒜算虽隋随绥髓碎岁穗遂隧祟孙损笋蓑梭唆缩琐索锁所塌他它她塔�".split(""),e=0;e!=r[203].length;++e)65533!==r[203][e].charCodeAt(0)&&(n[r[203][e]]=51968+e,t[51968+e]=r[203][e]);for(r[204]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������獭挞蹋踏胎苔抬台泰酞太态汰坍摊贪瘫滩坛檀痰潭谭谈坦毯袒碳探叹炭汤塘搪堂棠膛唐糖倘躺淌趟烫掏涛滔绦萄桃逃淘陶讨套特藤腾疼誊梯剔踢锑提题蹄啼体替嚏惕涕剃屉天添填田甜恬舔腆挑条迢眺跳贴铁帖厅听烃�".split(""),e=0;e!=r[204].length;++e)65533!==r[204][e].charCodeAt(0)&&(n[r[204][e]]=52224+e,t[52224+e]=r[204][e]);for(r[205]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������汀廷停亭庭挺艇通桐酮瞳同铜彤童桶捅筒统痛偷投头透凸秃突图徒途涂屠土吐兔湍团推颓腿蜕褪退吞屯臀拖托脱鸵陀驮驼椭妥拓唾挖哇蛙洼娃瓦袜歪外豌弯湾玩顽丸烷完碗挽晚皖惋宛婉万腕汪王亡枉网往旺望忘妄威�".split(""),e=0;e!=r[205].length;++e)65533!==r[205][e].charCodeAt(0)&&(n[r[205][e]]=52480+e,t[52480+e]=r[205][e]);for(r[206]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������巍微危韦违桅围唯惟为潍维苇萎委伟伪尾纬未蔚味畏胃喂魏位渭谓尉慰卫瘟温蚊文闻纹吻稳紊问嗡翁瓮挝蜗涡窝我斡卧握沃巫呜钨乌污诬屋无芜梧吾吴毋武五捂午舞伍侮坞戊雾晤物勿务悟误昔熙析西硒矽晰嘻吸锡牺�".split(""),e=0;e!=r[206].length;++e)65533!==r[206][e].charCodeAt(0)&&(n[r[206][e]]=52736+e,t[52736+e]=r[206][e]);for(r[207]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������稀息希悉膝夕惜熄烯溪汐犀檄袭席习媳喜铣洗系隙戏细瞎虾匣霞辖暇峡侠狭下厦夏吓掀锨先仙鲜纤咸贤衔舷闲涎弦嫌显险现献县腺馅羡宪陷限线相厢镶香箱襄湘乡翔祥详想响享项巷橡像向象萧硝霄削哮嚣销消宵淆晓�".split(""),e=0;e!=r[207].length;++e)65533!==r[207][e].charCodeAt(0)&&(n[r[207][e]]=52992+e,t[52992+e]=r[207][e]);for(r[208]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������小孝校肖啸笑效楔些歇蝎鞋协挟携邪斜胁谐写械卸蟹懈泄泻谢屑薪芯锌欣辛新忻心信衅星腥猩惺兴刑型形邢行醒幸杏性姓兄凶胸匈汹雄熊休修羞朽嗅锈秀袖绣墟戌需虚嘘须徐许蓄酗叙旭序畜恤絮婿绪续轩喧宣悬旋玄�".split(""),e=0;e!=r[208].length;++e)65533!==r[208][e].charCodeAt(0)&&(n[r[208][e]]=53248+e,t[53248+e]=r[208][e]);for(r[209]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������选癣眩绚靴薛学穴雪血勋熏循旬询寻驯巡殉汛训讯逊迅压押鸦鸭呀丫芽牙蚜崖衙涯雅哑亚讶焉咽阉烟淹盐严研蜒岩延言颜阎炎沿奄掩眼衍演艳堰燕厌砚雁唁彦焰宴谚验殃央鸯秧杨扬佯疡羊洋阳氧仰痒养样漾邀腰妖瑶�".split(""),e=0;e!=r[209].length;++e)65533!==r[209][e].charCodeAt(0)&&(n[r[209][e]]=53504+e,t[53504+e]=r[209][e]);for(r[210]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������摇尧遥窑谣姚咬舀药要耀椰噎耶爷野冶也页掖业叶曳腋夜液一壹医揖铱依伊衣颐夷遗移仪胰疑沂宜姨彝椅蚁倚已乙矣以艺抑易邑屹亿役臆逸肄疫亦裔意毅忆义益溢诣议谊译异翼翌绎茵荫因殷音阴姻吟银淫寅饮尹引隐�".split(""),e=0;e!=r[210].length;++e)65533!==r[210][e].charCodeAt(0)&&(n[r[210][e]]=53760+e,t[53760+e]=r[210][e]);for(r[211]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������印英樱婴鹰应缨莹萤营荧蝇迎赢盈影颖硬映哟拥佣臃痈庸雍踊蛹咏泳涌永恿勇用幽优悠忧尤由邮铀犹油游酉有友右佑釉诱又幼迂淤于盂榆虞愚舆余俞逾鱼愉渝渔隅予娱雨与屿禹宇语羽玉域芋郁吁遇喻峪御愈欲狱育誉�".split(""),e=0;e!=r[211].length;++e)65533!==r[211][e].charCodeAt(0)&&(n[r[211][e]]=54016+e,t[54016+e]=r[211][e]);for(r[212]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������浴寓裕预豫驭鸳渊冤元垣袁原援辕园员圆猿源缘远苑愿怨院曰约越跃钥岳粤月悦阅耘云郧匀陨允运蕴酝晕韵孕匝砸杂栽哉灾宰载再在咱攒暂赞赃脏葬遭糟凿藻枣早澡蚤躁噪造皂灶燥责择则泽贼怎增憎曾赠扎喳渣札轧�".split(""),e=0;e!=r[212].length;++e)65533!==r[212][e].charCodeAt(0)&&(n[r[212][e]]=54272+e,t[54272+e]=r[212][e]);for(r[213]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������铡闸眨栅榨咋乍炸诈摘斋宅窄债寨瞻毡詹粘沾盏斩辗崭展蘸栈占战站湛绽樟章彰漳张掌涨杖丈帐账仗胀瘴障招昭找沼赵照罩兆肇召遮折哲蛰辙者锗蔗这浙珍斟真甄砧臻贞针侦枕疹诊震振镇阵蒸挣睁征狰争怔整拯正政�".split(""),e=0;e!=r[213].length;++e)65533!==r[213][e].charCodeAt(0)&&(n[r[213][e]]=54528+e,t[54528+e]=r[213][e]);for(r[214]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������帧症郑证芝枝支吱蜘知肢脂汁之织职直植殖执值侄址指止趾只旨纸志挚掷至致置帜峙制智秩稚质炙痔滞治窒中盅忠钟衷终种肿重仲众舟周州洲诌粥轴肘帚咒皱宙昼骤珠株蛛朱猪诸诛逐竹烛煮拄瞩嘱主著柱助蛀贮铸筑�".split(""),e=0;e!=r[214].length;++e)65533!==r[214][e].charCodeAt(0)&&(n[r[214][e]]=54784+e,t[54784+e]=r[214][e]);for(r[215]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������住注祝驻抓爪拽专砖转撰赚篆桩庄装妆撞壮状椎锥追赘坠缀谆准捉拙卓桌琢茁酌啄着灼浊兹咨资姿滋淄孜紫仔籽滓子自渍字鬃棕踪宗综总纵邹走奏揍租足卒族祖诅阻组钻纂嘴醉最罪尊遵昨左佐柞做作坐座������".split(""),e=0;e!=r[215].length;++e)65533!==r[215][e].charCodeAt(0)&&(n[r[215][e]]=55040+e,t[55040+e]=r[215][e]);for(r[216]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������亍丌兀丐廿卅丕亘丞鬲孬噩丨禺丿匕乇夭爻卮氐囟胤馗毓睾鼗丶亟鼐乜乩亓芈孛啬嘏仄厍厝厣厥厮靥赝匚叵匦匮匾赜卦卣刂刈刎刭刳刿剀剌剞剡剜蒯剽劂劁劐劓冂罔亻仃仉仂仨仡仫仞伛仳伢佤仵伥伧伉伫佞佧攸佚佝�".split(""),e=0;e!=r[216].length;++e)65533!==r[216][e].charCodeAt(0)&&(n[r[216][e]]=55296+e,t[55296+e]=r[216][e]);for(r[217]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������佟佗伲伽佶佴侑侉侃侏佾佻侪佼侬侔俦俨俪俅俚俣俜俑俟俸倩偌俳倬倏倮倭俾倜倌倥倨偾偃偕偈偎偬偻傥傧傩傺僖儆僭僬僦僮儇儋仝氽佘佥俎龠汆籴兮巽黉馘冁夔勹匍訇匐凫夙兕亠兖亳衮袤亵脔裒禀嬴蠃羸冫冱冽冼�".split(""),e=0;e!=r[217].length;++e)65533!==r[217][e].charCodeAt(0)&&(n[r[217][e]]=55552+e,t[55552+e]=r[217][e]);for(r[218]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������凇冖冢冥讠讦讧讪讴讵讷诂诃诋诏诎诒诓诔诖诘诙诜诟诠诤诨诩诮诰诳诶诹诼诿谀谂谄谇谌谏谑谒谔谕谖谙谛谘谝谟谠谡谥谧谪谫谮谯谲谳谵谶卩卺阝阢阡阱阪阽阼陂陉陔陟陧陬陲陴隈隍隗隰邗邛邝邙邬邡邴邳邶邺�".split(""),e=0;e!=r[218].length;++e)65533!==r[218][e].charCodeAt(0)&&(n[r[218][e]]=55808+e,t[55808+e]=r[218][e]);for(r[219]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������邸邰郏郅邾郐郄郇郓郦郢郜郗郛郫郯郾鄄鄢鄞鄣鄱鄯鄹酃酆刍奂劢劬劭劾哿勐勖勰叟燮矍廴凵凼鬯厶弁畚巯坌垩垡塾墼壅壑圩圬圪圳圹圮圯坜圻坂坩垅坫垆坼坻坨坭坶坳垭垤垌垲埏垧垴垓垠埕埘埚埙埒垸埴埯埸埤埝�".split(""),e=0;e!=r[219].length;++e)65533!==r[219][e].charCodeAt(0)&&(n[r[219][e]]=56064+e,t[56064+e]=r[219][e]);for(r[220]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������堋堍埽埭堀堞堙塄堠塥塬墁墉墚墀馨鼙懿艹艽艿芏芊芨芄芎芑芗芙芫芸芾芰苈苊苣芘芷芮苋苌苁芩芴芡芪芟苄苎芤苡茉苷苤茏茇苜苴苒苘茌苻苓茑茚茆茔茕苠苕茜荑荛荜茈莒茼茴茱莛荞茯荏荇荃荟荀茗荠茭茺茳荦荥�".split(""),e=0;e!=r[220].length;++e)65533!==r[220][e].charCodeAt(0)&&(n[r[220][e]]=56320+e,t[56320+e]=r[220][e]);for(r[221]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������荨茛荩荬荪荭荮莰荸莳莴莠莪莓莜莅荼莶莩荽莸荻莘莞莨莺莼菁萁菥菘堇萘萋菝菽菖萜萸萑萆菔菟萏萃菸菹菪菅菀萦菰菡葜葑葚葙葳蒇蒈葺蒉葸萼葆葩葶蒌蒎萱葭蓁蓍蓐蓦蒽蓓蓊蒿蒺蓠蒡蒹蒴蒗蓥蓣蔌甍蔸蓰蔹蔟蔺�".split(""),e=0;e!=r[221].length;++e)65533!==r[221][e].charCodeAt(0)&&(n[r[221][e]]=56576+e,t[56576+e]=r[221][e]);for(r[222]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������蕖蔻蓿蓼蕙蕈蕨蕤蕞蕺瞢蕃蕲蕻薤薨薇薏蕹薮薜薅薹薷薰藓藁藜藿蘧蘅蘩蘖蘼廾弈夼奁耷奕奚奘匏尢尥尬尴扌扪抟抻拊拚拗拮挢拶挹捋捃掭揶捱捺掎掴捭掬掊捩掮掼揲揸揠揿揄揞揎摒揆掾摅摁搋搛搠搌搦搡摞撄摭撖�".split(""),e=0;e!=r[222].length;++e)65533!==r[222][e].charCodeAt(0)&&(n[r[222][e]]=56832+e,t[56832+e]=r[222][e]);for(r[223]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������摺撷撸撙撺擀擐擗擤擢攉攥攮弋忒甙弑卟叱叽叩叨叻吒吖吆呋呒呓呔呖呃吡呗呙吣吲咂咔呷呱呤咚咛咄呶呦咝哐咭哂咴哒咧咦哓哔呲咣哕咻咿哌哙哚哜咩咪咤哝哏哞唛哧唠哽唔哳唢唣唏唑唧唪啧喏喵啉啭啁啕唿啐唼�".split(""),e=0;e!=r[223].length;++e)65533!==r[223][e].charCodeAt(0)&&(n[r[223][e]]=57088+e,t[57088+e]=r[223][e]);for(r[224]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������唷啖啵啶啷唳唰啜喋嗒喃喱喹喈喁喟啾嗖喑啻嗟喽喾喔喙嗪嗷嗉嘟嗑嗫嗬嗔嗦嗝嗄嗯嗥嗲嗳嗌嗍嗨嗵嗤辔嘞嘈嘌嘁嘤嘣嗾嘀嘧嘭噘嘹噗嘬噍噢噙噜噌噔嚆噤噱噫噻噼嚅嚓嚯囔囗囝囡囵囫囹囿圄圊圉圜帏帙帔帑帱帻帼�".split(""),e=0;e!=r[224].length;++e)65533!==r[224][e].charCodeAt(0)&&(n[r[224][e]]=57344+e,t[57344+e]=r[224][e]);for(r[225]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������帷幄幔幛幞幡岌屺岍岐岖岈岘岙岑岚岜岵岢岽岬岫岱岣峁岷峄峒峤峋峥崂崃崧崦崮崤崞崆崛嵘崾崴崽嵬嵛嵯嵝嵫嵋嵊嵩嵴嶂嶙嶝豳嶷巅彳彷徂徇徉後徕徙徜徨徭徵徼衢彡犭犰犴犷犸狃狁狎狍狒狨狯狩狲狴狷猁狳猃狺�".split(""),e=0;e!=r[225].length;++e)65533!==r[225][e].charCodeAt(0)&&(n[r[225][e]]=57600+e,t[57600+e]=r[225][e]);for(r[226]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������狻猗猓猡猊猞猝猕猢猹猥猬猸猱獐獍獗獠獬獯獾舛夥飧夤夂饣饧饨饩饪饫饬饴饷饽馀馄馇馊馍馐馑馓馔馕庀庑庋庖庥庠庹庵庾庳赓廒廑廛廨廪膺忄忉忖忏怃忮怄忡忤忾怅怆忪忭忸怙怵怦怛怏怍怩怫怊怿怡恸恹恻恺恂�".split(""),e=0;e!=r[226].length;++e)65533!==r[226][e].charCodeAt(0)&&(n[r[226][e]]=57856+e,t[57856+e]=r[226][e]);for(r[227]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������恪恽悖悚悭悝悃悒悌悛惬悻悱惝惘惆惚悴愠愦愕愣惴愀愎愫慊慵憬憔憧憷懔懵忝隳闩闫闱闳闵闶闼闾阃阄阆阈阊阋阌阍阏阒阕阖阗阙阚丬爿戕氵汔汜汊沣沅沐沔沌汨汩汴汶沆沩泐泔沭泷泸泱泗沲泠泖泺泫泮沱泓泯泾�".split(""),e=0;e!=r[227].length;++e)65533!==r[227][e].charCodeAt(0)&&(n[r[227][e]]=58112+e,t[58112+e]=r[227][e]);for(r[228]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������洹洧洌浃浈洇洄洙洎洫浍洮洵洚浏浒浔洳涑浯涞涠浞涓涔浜浠浼浣渚淇淅淞渎涿淠渑淦淝淙渖涫渌涮渫湮湎湫溲湟溆湓湔渲渥湄滟溱溘滠漭滢溥溧溽溻溷滗溴滏溏滂溟潢潆潇漤漕滹漯漶潋潴漪漉漩澉澍澌潸潲潼潺濑�".split(""),e=0;e!=r[228].length;++e)65533!==r[228][e].charCodeAt(0)&&(n[r[228][e]]=58368+e,t[58368+e]=r[228][e]);for(r[229]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������濉澧澹澶濂濡濮濞濠濯瀚瀣瀛瀹瀵灏灞宀宄宕宓宥宸甯骞搴寤寮褰寰蹇謇辶迓迕迥迮迤迩迦迳迨逅逄逋逦逑逍逖逡逵逶逭逯遄遑遒遐遨遘遢遛暹遴遽邂邈邃邋彐彗彖彘尻咫屐屙孱屣屦羼弪弩弭艴弼鬻屮妁妃妍妩妪妣�".split(""),e=0;e!=r[229].length;++e)65533!==r[229][e].charCodeAt(0)&&(n[r[229][e]]=58624+e,t[58624+e]=r[229][e]);for(r[230]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������妗姊妫妞妤姒妲妯姗妾娅娆姝娈姣姘姹娌娉娲娴娑娣娓婀婧婊婕娼婢婵胬媪媛婷婺媾嫫媲嫒嫔媸嫠嫣嫱嫖嫦嫘嫜嬉嬗嬖嬲嬷孀尕尜孚孥孳孑孓孢驵驷驸驺驿驽骀骁骅骈骊骐骒骓骖骘骛骜骝骟骠骢骣骥骧纟纡纣纥纨纩�".split(""),e=0;e!=r[230].length;++e)65533!==r[230][e].charCodeAt(0)&&(n[r[230][e]]=58880+e,t[58880+e]=r[230][e]);for(r[231]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������纭纰纾绀绁绂绉绋绌绐绔绗绛绠绡绨绫绮绯绱绲缍绶绺绻绾缁缂缃缇缈缋缌缏缑缒缗缙缜缛缟缡缢缣缤缥缦缧缪缫缬缭缯缰缱缲缳缵幺畿巛甾邕玎玑玮玢玟珏珂珑玷玳珀珉珈珥珙顼琊珩珧珞玺珲琏琪瑛琦琥琨琰琮琬�".split(""),e=0;e!=r[231].length;++e)65533!==r[231][e].charCodeAt(0)&&(n[r[231][e]]=59136+e,t[59136+e]=r[231][e]);for(r[232]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������琛琚瑁瑜瑗瑕瑙瑷瑭瑾璜璎璀璁璇璋璞璨璩璐璧瓒璺韪韫韬杌杓杞杈杩枥枇杪杳枘枧杵枨枞枭枋杷杼柰栉柘栊柩枰栌柙枵柚枳柝栀柃枸柢栎柁柽栲栳桠桡桎桢桄桤梃栝桕桦桁桧桀栾桊桉栩梵梏桴桷梓桫棂楮棼椟椠棹�".split(""),e=0;e!=r[232].length;++e)65533!==r[232][e].charCodeAt(0)&&(n[r[232][e]]=59392+e,t[59392+e]=r[232][e]);for(r[233]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������椤棰椋椁楗棣椐楱椹楠楂楝榄楫榀榘楸椴槌榇榈槎榉楦楣楹榛榧榻榫榭槔榱槁槊槟榕槠榍槿樯槭樗樘橥槲橄樾檠橐橛樵檎橹樽樨橘橼檑檐檩檗檫猷獒殁殂殇殄殒殓殍殚殛殡殪轫轭轱轲轳轵轶轸轷轹轺轼轾辁辂辄辇辋�".split(""),e=0;e!=r[233].length;++e)65533!==r[233][e].charCodeAt(0)&&(n[r[233][e]]=59648+e,t[59648+e]=r[233][e]);for(r[234]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������辍辎辏辘辚軎戋戗戛戟戢戡戥戤戬臧瓯瓴瓿甏甑甓攴旮旯旰昊昙杲昃昕昀炅曷昝昴昱昶昵耆晟晔晁晏晖晡晗晷暄暌暧暝暾曛曜曦曩贲贳贶贻贽赀赅赆赈赉赇赍赕赙觇觊觋觌觎觏觐觑牮犟牝牦牯牾牿犄犋犍犏犒挈挲掰�".split(""),e=0;e!=r[234].length;++e)65533!==r[234][e].charCodeAt(0)&&(n[r[234][e]]=59904+e,t[59904+e]=r[234][e]);for(r[235]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������搿擘耄毪毳毽毵毹氅氇氆氍氕氘氙氚氡氩氤氪氲攵敕敫牍牒牖爰虢刖肟肜肓肼朊肽肱肫肭肴肷胧胨胩胪胛胂胄胙胍胗朐胝胫胱胴胭脍脎胲胼朕脒豚脶脞脬脘脲腈腌腓腴腙腚腱腠腩腼腽腭腧塍媵膈膂膑滕膣膪臌朦臊膻�".split(""),e=0;e!=r[235].length;++e)65533!==r[235][e].charCodeAt(0)&&(n[r[235][e]]=60160+e,t[60160+e]=r[235][e]);for(r[236]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������臁膦欤欷欹歃歆歙飑飒飓飕飙飚殳彀毂觳斐齑斓於旆旄旃旌旎旒旖炀炜炖炝炻烀炷炫炱烨烊焐焓焖焯焱煳煜煨煅煲煊煸煺熘熳熵熨熠燠燔燧燹爝爨灬焘煦熹戾戽扃扈扉礻祀祆祉祛祜祓祚祢祗祠祯祧祺禅禊禚禧禳忑忐�".split(""),e=0;e!=r[236].length;++e)65533!==r[236][e].charCodeAt(0)&&(n[r[236][e]]=60416+e,t[60416+e]=r[236][e]);for(r[237]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������怼恝恚恧恁恙恣悫愆愍慝憩憝懋懑戆肀聿沓泶淼矶矸砀砉砗砘砑斫砭砜砝砹砺砻砟砼砥砬砣砩硎硭硖硗砦硐硇硌硪碛碓碚碇碜碡碣碲碹碥磔磙磉磬磲礅磴礓礤礞礴龛黹黻黼盱眄眍盹眇眈眚眢眙眭眦眵眸睐睑睇睃睚睨�".split(""),e=0;e!=r[237].length;++e)65533!==r[237][e].charCodeAt(0)&&(n[r[237][e]]=60672+e,t[60672+e]=r[237][e]);for(r[238]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������睢睥睿瞍睽瞀瞌瞑瞟瞠瞰瞵瞽町畀畎畋畈畛畲畹疃罘罡罟詈罨罴罱罹羁罾盍盥蠲钅钆钇钋钊钌钍钏钐钔钗钕钚钛钜钣钤钫钪钭钬钯钰钲钴钶钷钸钹钺钼钽钿铄铈铉铊铋铌铍铎铐铑铒铕铖铗铙铘铛铞铟铠铢铤铥铧铨铪�".split(""),e=0;e!=r[238].length;++e)65533!==r[238][e].charCodeAt(0)&&(n[r[238][e]]=60928+e,t[60928+e]=r[238][e]);for(r[239]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������铩铫铮铯铳铴铵铷铹铼铽铿锃锂锆锇锉锊锍锎锏锒锓锔锕锖锘锛锝锞锟锢锪锫锩锬锱锲锴锶锷锸锼锾锿镂锵镄镅镆镉镌镎镏镒镓镔镖镗镘镙镛镞镟镝镡镢镤镥镦镧镨镩镪镫镬镯镱镲镳锺矧矬雉秕秭秣秫稆嵇稃稂稞稔�".split(""),e=0;e!=r[239].length;++e)65533!==r[239][e].charCodeAt(0)&&(n[r[239][e]]=61184+e,t[61184+e]=r[239][e]);for(r[240]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������稹稷穑黏馥穰皈皎皓皙皤瓞瓠甬鸠鸢鸨鸩鸪鸫鸬鸲鸱鸶鸸鸷鸹鸺鸾鹁鹂鹄鹆鹇鹈鹉鹋鹌鹎鹑鹕鹗鹚鹛鹜鹞鹣鹦鹧鹨鹩鹪鹫鹬鹱鹭鹳疒疔疖疠疝疬疣疳疴疸痄疱疰痃痂痖痍痣痨痦痤痫痧瘃痱痼痿瘐瘀瘅瘌瘗瘊瘥瘘瘕瘙�".split(""),e=0;e!=r[240].length;++e)65533!==r[240][e].charCodeAt(0)&&(n[r[240][e]]=61440+e,t[61440+e]=r[240][e]);for(r[241]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������瘛瘼瘢瘠癀瘭瘰瘿瘵癃瘾瘳癍癞癔癜癖癫癯翊竦穸穹窀窆窈窕窦窠窬窨窭窳衤衩衲衽衿袂袢裆袷袼裉裢裎裣裥裱褚裼裨裾裰褡褙褓褛褊褴褫褶襁襦襻疋胥皲皴矜耒耔耖耜耠耢耥耦耧耩耨耱耋耵聃聆聍聒聩聱覃顸颀颃�".split(""),e=0;e!=r[241].length;++e)65533!==r[241][e].charCodeAt(0)&&(n[r[241][e]]=61696+e,t[61696+e]=r[241][e]);for(r[242]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������颉颌颍颏颔颚颛颞颟颡颢颥颦虍虔虬虮虿虺虼虻蚨蚍蚋蚬蚝蚧蚣蚪蚓蚩蚶蛄蚵蛎蚰蚺蚱蚯蛉蛏蚴蛩蛱蛲蛭蛳蛐蜓蛞蛴蛟蛘蛑蜃蜇蛸蜈蜊蜍蜉蜣蜻蜞蜥蜮蜚蜾蝈蜴蜱蜩蜷蜿螂蜢蝽蝾蝻蝠蝰蝌蝮螋蝓蝣蝼蝤蝙蝥螓螯螨蟒�".split(""),e=0;e!=r[242].length;++e)65533!==r[242][e].charCodeAt(0)&&(n[r[242][e]]=61952+e,t[61952+e]=r[242][e]);for(r[243]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������蟆螈螅螭螗螃螫蟥螬螵螳蟋蟓螽蟑蟀蟊蟛蟪蟠蟮蠖蠓蟾蠊蠛蠡蠹蠼缶罂罄罅舐竺竽笈笃笄笕笊笫笏筇笸笪笙笮笱笠笥笤笳笾笞筘筚筅筵筌筝筠筮筻筢筲筱箐箦箧箸箬箝箨箅箪箜箢箫箴篑篁篌篝篚篥篦篪簌篾篼簏簖簋�".split(""),e=0;e!=r[243].length;++e)65533!==r[243][e].charCodeAt(0)&&(n[r[243][e]]=62208+e,t[62208+e]=r[243][e]);for(r[244]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������簟簪簦簸籁籀臾舁舂舄臬衄舡舢舣舭舯舨舫舸舻舳舴舾艄艉艋艏艚艟艨衾袅袈裘裟襞羝羟羧羯羰羲籼敉粑粝粜粞粢粲粼粽糁糇糌糍糈糅糗糨艮暨羿翎翕翥翡翦翩翮翳糸絷綦綮繇纛麸麴赳趄趔趑趱赧赭豇豉酊酐酎酏酤�".split(""),e=0;e!=r[244].length;++e)65533!==r[244][e].charCodeAt(0)&&(n[r[244][e]]=62464+e,t[62464+e]=r[244][e]);for(r[245]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������酢酡酰酩酯酽酾酲酴酹醌醅醐醍醑醢醣醪醭醮醯醵醴醺豕鹾趸跫踅蹙蹩趵趿趼趺跄跖跗跚跞跎跏跛跆跬跷跸跣跹跻跤踉跽踔踝踟踬踮踣踯踺蹀踹踵踽踱蹉蹁蹂蹑蹒蹊蹰蹶蹼蹯蹴躅躏躔躐躜躞豸貂貊貅貘貔斛觖觞觚觜�".split(""),e=0;e!=r[245].length;++e)65533!==r[245][e].charCodeAt(0)&&(n[r[245][e]]=62720+e,t[62720+e]=r[245][e]);for(r[246]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������觥觫觯訾謦靓雩雳雯霆霁霈霏霎霪霭霰霾龀龃龅龆龇龈龉龊龌黾鼋鼍隹隼隽雎雒瞿雠銎銮鋈錾鍪鏊鎏鐾鑫鱿鲂鲅鲆鲇鲈稣鲋鲎鲐鲑鲒鲔鲕鲚鲛鲞鲟鲠鲡鲢鲣鲥鲦鲧鲨鲩鲫鲭鲮鲰鲱鲲鲳鲴鲵鲶鲷鲺鲻鲼鲽鳄鳅鳆鳇鳊鳋�".split(""),e=0;e!=r[246].length;++e)65533!==r[246][e].charCodeAt(0)&&(n[r[246][e]]=62976+e,t[62976+e]=r[246][e]);for(r[247]="�����������������������������������������������������������������������������������������������������������������������������������������������������������������鳌鳍鳎鳏鳐鳓鳔鳕鳗鳘鳙鳜鳝鳟鳢靼鞅鞑鞒鞔鞯鞫鞣鞲鞴骱骰骷鹘骶骺骼髁髀髅髂髋髌髑魅魃魇魉魈魍魑飨餍餮饕饔髟髡髦髯髫髻髭髹鬈鬏鬓鬟鬣麽麾縻麂麇麈麋麒鏖麝麟黛黜黝黠黟黢黩黧黥黪黯鼢鼬鼯鼹鼷鼽鼾齄�".split(""),e=0;e!=r[247].length;++e)65533!==r[247][e].charCodeAt(0)&&(n[r[247][e]]=63232+e,t[63232+e]=r[247][e]);return{enc:n,dec:t}}(),t[10029]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),t[10079]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüݰ¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),t[10081]=function(){for(var e="\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙ�ˆ˜¯˘˙˚¸˝˛ˇ",t=[],n={},r=0;r!=e.length;++r)65533!==e.charCodeAt(r)&&(n[e.charAt(r)]=r),t[r]=e.charAt(r);return{enc:n,dec:t}}(),e.exports&&"undefined"==typeof DO_NOT_EXPORT_CODEPAGE&&(e.exports=t),function(n,r){"use strict";if(void 0===t){var a=t;e.exports&&"undefined"==typeof DO_NOT_EXPORT_CODEPAGE?e.exports=r(a):n.cptable=r(a)}else t=r(t)}(this,(function(e){"use strict";var t={1200:"utf16le",1201:"utf16be",12e3:"utf32le",12001:"utf32be",16969:"utf64le",20127:"ascii",65e3:"utf7",65001:"utf8"},n=[874,1250,1251,1252,1253,1254,1255,1256,1e4],r=[932,936,949,950],a=[65001],s={},i={},o={},l={},u=function(e){return String.fromCharCode(e)},c=function(e){return e.charCodeAt(0)},h="undefined"!=typeof Buffer,f=function(){};if(h){var d=!Buffer.from;if(!d)try{Buffer.from("foo","utf8")}catch(e){d=!0}f=d?function(e,t){return t?new Buffer(e,t):new Buffer(e)}:Buffer.from.bind(Buffer),Buffer.allocUnsafe||(Buffer.allocUnsafe=function(e){return new Buffer(e)});var p=1024,m=Buffer.allocUnsafe(p),g=function(t){var n=function(e){for(var t=Buffer.allocUnsafe(65536),n=0;n<65536;++n)t[n]=0;for(var r=Object.keys(e),a=r.length,s=0,i=r[s];s>10&1023)],r[i++]=n[56320+(1023&l)]));r=r.slice(0,i)}else for(r=Buffer.allocUnsafe(a),s=0;s>8}return function(e){var t=e.length,n=0,a=0;if(2*t>p&&(p=2*t,m=Buffer.allocUnsafe(p)),Buffer.isBuffer(e))for(n=0;n>8}return function(e,t){var n=e.length,a=Buffer.allocUnsafe(2*n),s=0,i=0,o=0,l=0,u=0;if("string"==typeof e){for(s=l=0;s0&&(a[l++]=r[i]);a=a.slice(0,l)}else if(Buffer.isBuffer(e)){for(s=l=0;s0&&(a[l++]=r[i])):(i=2*(55296+((o=i-65536)>>10&1023)),a[l++]=r[i+1]||r[i],r[i+1]>0&&(a[l++]=r[i]),i=2*(56320+(1023&o)),a[l++]=r[i+1]||r[i],r[i+1]>0&&(a[l++]=r[i]));a=a.slice(0,l)}else for(s=l=0;s0&&(a[l++]=r[i]);return t&&"buf"!==t?"arr"!==t?a.toString("binary"):[].slice.call(a):a}},v=function(t){var n,r=e[t].dec,a=Buffer.allocUnsafe(131072),s=0,i=0,o=0,l=0;for(l=0;l<65536;++l)a[2*l]=255,a[2*l+1]=253;for(s=0;s>8);return function(e){var t=e.length,n=Buffer.allocUnsafe(2*t),r=0,s=0,i=0;if(Buffer.isBuffer(e))for(r=0;rp&&(p=4*n,m=Buffer.allocUnsafe(p));var s=0;n>=3&&239==t[0]&&187==t[1]&&191==t[2]&&(s=3);for(var i=1,o=0,l=0;s>8):(a=55296+((r-=65536)>>10&1023),r=56320+(1023&r),m[o++]=255&a,m[o++]=a>>>8,m[o++]=255&r,m[o++]=r>>>8&255);return m.slice(0,o).toString("ucs2")},i[65001]=function(e,t){if(h&&Buffer.isBuffer(e))return t&&"buf"!==t?"arr"!==t?e.toString("binary"):[].slice.call(e):e;var n=e.length,r=0,a=0,s=0,i="string"==typeof e;4*n>p&&(p=4*n,m=Buffer.allocUnsafe(p));for(var o=0;o>6),m[s++]=128+(63&r)):r>=55296&&r<=57343?(r-=55296,++o,a=(i?e.charCodeAt(o):e[o].charCodeAt(0))-56320+(r<<10),m[s++]=240+(a>>>18&7),m[s++]=144+(a>>>12&63),m[s++]=128+(a>>>6&63),m[s++]=128+(63&a)):(m[s++]=224+(r>>12),m[s++]=128+(r>>6&63),m[s++]=128+(63&r));return t&&"buf"!==t?"arr"!==t?m.slice(0,s).toString("binary"):[].slice.call(m,0,s):m.slice(0,s)}}var w=function(){if(h){if(o[n[0]])return;var t=0,u=0;for(t=0;t=3&&239==a[0]&&187==a[1]&&191==a[2]&&(p=3);p>10&1023),d=56320+(1023&d),u[g++]=String.fromCharCode(y)),u[g++]=String.fromCharCode(d);break;case"ascii":if(h&&Buffer.isBuffer(a))return a.toString(v);for(p=0;p=2&&255==a[0]&&254==a[1]&&(p=2),h&&Buffer.isBuffer(a))return a.toString(v);for(m=2;p+1=2&&254==a[0]&&255==a[1]&&(p=2),m=2;p+1=4&&255==a[0]&&254==a[1]&&0===a[2]&&0===a[3]&&(p=4),m=4;p65535?(d-=65536,u[g++]=String.fromCharCode(55296+(d>>10&1023)),u[g++]=String.fromCharCode(56320+(1023&d))):u[g++]=String.fromCharCode(d);break;case"utf32be":for(l>=4&&255==a[3]&&254==a[2]&&0===a[1]&&0===a[0]&&(p=4),m=4;p65535?(d-=65536,u[g++]=String.fromCharCode(55296+(d>>10&1023)),u[g++]=String.fromCharCode(56320+(1023&d))):u[g++]=String.fromCharCode(d);break;case"utf7":for(l>=4&&43==a[0]&&47==a[1]&&118==a[2]&&(l>=5&&56==a[3]&&45==a[4]?p=5:56!=a[3]&&57!=a[3]&&43!=a[3]&&47!=a[3]||(p=4));p>4,_.push(k),-1!==(I=E.indexOf(String.fromCharCode(a[p+D++]))))&&(C=(15&N)<<4|I>>2,_.push(C),-1!==(A=E.indexOf(String.fromCharCode(a[p+D++]))));)S=(3&I)<<6|A,A<64&&_.push(S);for(x=n(1201,_),D=0;D255?(c[m]=d>>8,c[++m]=255&d):c[m]=255&d;else{if(!(b=t[r]))throw new Error("Unrecognized CP: "+r);switch(b){case"utf8":if(h&&v){m=(c=f(a,b)).length;break}for(p=0;p>6),c[++m]=128+(63&d)):d>=55296&&d<=57343?(d-=55296,g=(v?a.charCodeAt(++p):a[++p].charCodeAt(0))-56320+(d<<10),c[m]=240+(g>>>18&7),c[++m]=144+(g>>>12&63),c[++m]=128+(g>>>6&63),c[++m]=128+(63&g)):(c[m]=224+(d>>12),c[++m]=128+(d>>6&63),c[++m]=128+(63&d));break;case"ascii":if(h&&"string"==typeof a){m=(c=f(a,b)).length;break}for(p=0;p>8;break;case"utf16be":for(p=0;p>8,c[m++]=255&d;break;case"utf32le":for(p=0;p=55296&&d<=57343&&(d=65536+(d-55296<<10)+(a[++p].charCodeAt(0)-56320)),c[m++]=255&d,d>>=8,c[m++]=255&d,d>>=8,c[m++]=255&d,d>>=8,c[m++]=255&d;break;case"utf32be":for(p=0;p=55296&&d<=57343&&(d=65536+(d-55296<<10)+(a[++p].charCodeAt(0)-56320)),c[m+3]=255&d,d>>=8,c[m+2]=255&d,d>>=8,c[m+1]=255&d,d>>=8,c[m]=255&d,m+=4;break;case"utf7":for(p=0;p-1)c[m++]=w.charCodeAt(0);else{var _=n(1201,w);c[m++]=43,c[m++]=E.charCodeAt(_[0]>>2),c[m++]=E.charCodeAt(((3&_[0])<<4)+((_[1]||0)>>4)),c[m++]=E.charCodeAt(((15&_[1])<<2)+((_[2]||0)>>6)),c[m++]=45}else c[m++]=43,c[m++]=45}break;default:throw new Error("Unsupported magic: "+r+" "+t[r])}}return c=c.slice(0,m),h?s&&"buf"!==s?"arr"!==s?c.toString("binary"):[].slice.call(c):c:"str"==s?c.map(u).join(""):c},hascp:function(n){return!(!e[n]&&!t[n])},magic:t,cache:k},e}))},2903:(e,t,n)=>{var r,a,s;!function(i){if("undefined"==typeof DO_NOT_EXPORT_JSZIP)e.exports=i();else if("undefined"==typeof DO_NOT_EXPORT_JSZIP)JSZipSync=i(),a=[],void 0===(s="function"==typeof(r=i)?r.apply(t,a):r)||(e.exports=s);else{var o;"undefined"!=typeof globalThis?o=globalThis:"undefined"!=typeof window?o=window:void 0!==n.g?o=n.g:"undefined"!=typeof $&&$.global?o=$.global:"undefined"!=typeof self&&(o=self),o.JSZipSync=i()}}((function(){return function e(t,n,r){function a(i,o){if(!n[i]){if(!t[i]){if(s)return s(i,!0);throw new Error("Cannot find module '"+i+"'")}var l=n[i]={exports:{}};t[i][0].call(l.exports,(function(e){return a(t[i][1][e]||e)}),l,l.exports,e,t,n,r)}return n[i].exports}for(var s=void 0,i=0;i>2,o=(3&n)<<4|(a=e.charCodeAt(h++))>>4,l=(15&a)<<2|(s=e.charCodeAt(h++))>>6,u=63&s,isNaN(a)?l=u=64:isNaN(s)&&(u=64),c=c+r.charAt(i)+r.charAt(o)+r.charAt(l)+r.charAt(u);return c},n.decode=function(e,t){var n,a,s,i,o,l,u="",c=0;for(e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");c>4,a=(15&i)<<4|(o=r.indexOf(e.charAt(c++)))>>2,s=(3&o)<<6|(l=r.indexOf(e.charAt(c++))),u+=String.fromCharCode(n),64!=o&&(u+=String.fromCharCode(a)),64!=l&&(u+=String.fromCharCode(s));return u}},{}],2:[function(e,t,n){"use strict";function r(){this.compressedSize=0,this.uncompressedSize=0,this.crc32=0,this.compressionMethod=null,this.compressedContent=null}r.prototype={getContent:function(){return null},getCompressedContent:function(){return null}},t.exports=r},{}],3:[function(e,t,n){"use strict";n.STORE={magic:"\0\0",compress:function(e){return e},uncompress:function(e){return e},compressInputType:null,uncompressInputType:null},n.DEFLATE=e("./flate")},{"./flate":8}],4:[function(e,t,n){"use strict";var r=e("./utils"),a=[0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117];t.exports=function(e,t){if(void 0===e||!e.length)return 0;var n="string"!==r.getTypeOf(e);void 0===t&&(t=0);var s=0;t^=-1;for(var i=0,o=e.length;i>>8^a[255&(t^s)];return-1^t}},{"./utils":21}],5:[function(e,t,n){"use strict";var r=e("./utils");function a(e){this.data=null,this.length=0,this.index=0}a.prototype={checkOffset:function(e){this.checkIndex(this.index+e)},checkIndex:function(e){if(this.length=this.index;t--)n=(n<<8)+this.byteAt(t);return this.index+=e,n},readString:function(e){return r.transformTo("string",this.readData(e))},readData:function(e){},lastIndexOfSignature:function(e){},readDate:function(){var e=this.readInt(4);return new Date(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1)}},t.exports=a},{"./utils":21}],6:[function(e,t,n){"use strict";n.base64=!1,n.binary=!1,n.dir=!1,n.createFolders=!1,n.date=null,n.compression=null,n.comment=null},{}],7:[function(e,t,n){"use strict";var r=e("./utils");n.string2binary=function(e){return r.string2binary(e)},n.string2Uint8Array=function(e){return r.transformTo("uint8array",e)},n.uint8Array2String=function(e){return r.transformTo("string",e)},n.string2Blob=function(e){var t=r.transformTo("arraybuffer",e);return r.arrayBuffer2Blob(t)},n.arrayBuffer2Blob=function(e){return r.arrayBuffer2Blob(e)},n.transformTo=function(e,t){return r.transformTo(e,t)},n.getTypeOf=function(e){return r.getTypeOf(e)},n.checkSupport=function(e){return r.checkSupport(e)},n.MAX_VALUE_16BITS=r.MAX_VALUE_16BITS,n.MAX_VALUE_32BITS=r.MAX_VALUE_32BITS,n.pretty=function(e){return r.pretty(e)},n.findCompression=function(e){return r.findCompression(e)},n.isRegExp=function(e){return r.isRegExp(e)}},{"./utils":21}],8:[function(e,t,n){"use strict";var r="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Uint32Array,a=e("pako");n.uncompressInputType=r?"uint8array":"array",n.compressInputType=r?"uint8array":"array",n.magic="\b\0",n.compress=function(e){return a.deflateRaw(e)},n.uncompress=function(e){return a.inflateRaw(e)}},{pako:24}],9:[function(e,t,n){"use strict";var r=e("./base64");function a(e,t){if(!(this instanceof a))return new a(e,t);this.files={},this.comment=null,this.root="",e&&this.load(e,t),this.clone=function(){var e=new a;for(var t in this)"function"!=typeof this[t]&&(e[t]=this[t]);return e}}a.prototype=e("./object"),a.prototype.load=e("./load"),a.support=e("./support"),a.defaults=e("./defaults"),a.utils=e("./deprecatedPublicUtils"),a.base64={encode:function(e){return r.encode(e)},decode:function(e){return r.decode(e)}},a.compressions=e("./compressions"),t.exports=a},{"./base64":1,"./compressions":3,"./defaults":6,"./deprecatedPublicUtils":7,"./load":10,"./object":13,"./support":17}],10:[function(e,t,n){"use strict";var r=e("./base64"),a=e("./zipEntries");t.exports=function(e,t){var n,s,i,o;for((t=t||{}).base64&&(e=r.decode(e)),n=(s=new a(e,t)).files,i=0;i>>=8;return r},w=function(){var e,t,n={};for(e=0;e0?e.substring(0,t):""},k=function(e,t){return"/"!=e.slice(-1)&&(e+="/"),t=void 0!==t&&t,this.files[e]||_.call(this,e,null,{dir:!0,createFolders:t}),this.files[e]},E=function(e,t){var n,r=new c;return e._data instanceof c?(r.uncompressedSize=e._data.uncompressedSize,r.crc32=e._data.crc32,0===r.uncompressedSize||e.dir?(t=u.STORE,r.compressedContent="",r.crc32=0):e._data.compressionMethod===t.magic?r.compressedContent=e._data.getCompressedContent():(n=e._data.getContent(),r.compressedContent=t.compress(a.transformTo(t.compressInputType,n)))):((n=g(e))&&0!==n.length&&!e.dir||(t=u.STORE,n=""),r.uncompressedSize=n.length,r.crc32=s(n),r.compressedContent=t.compress(a.transformTo(t.compressInputType,n))),r.compressedSize=r.compressedContent.length,r.compressionMethod=t.magic,r},C=function(e,t,n,r){n.compressedContent;var o,l,u,c,h=a.transformTo("string",f.utf8encode(t.name)),d=t.comment||"",p=a.transformTo("string",f.utf8encode(d)),m=h.length!==t.name.length,g=p.length!==d.length,y=t.options,b="",w="",_="";u=t._initialMetadata.dir!==t.dir?t.dir:y.dir,o=(c=t._initialMetadata.date!==t.date?t.date:y.date).getHours(),o<<=6,o|=c.getMinutes(),o<<=5,o|=c.getSeconds()/2,l=c.getFullYear()-1980,l<<=4,l|=c.getMonth()+1,l<<=5,l|=c.getDate(),m&&(w=v(1,1)+v(s(h),4)+h,b+="up"+v(w.length,2)+w),g&&(_=v(1,1)+v(this.crc32(p),4)+p,b+="uc"+v(_.length,2)+_);var x="";return x+="\n\0",x+=m||g?"\0\b":"\0\0",x+=n.compressionMethod,x+=v(o,2),x+=v(l,2),x+=v(n.crc32,4),x+=v(n.compressedSize,4),x+=v(n.uncompressedSize,4),x+=v(h.length,2),x+=v(b.length,2),{fileRecord:i.LOCAL_FILE_HEADER+x+h+b,dirRecord:i.CENTRAL_FILE_HEADER+"\0"+x+v(p.length,2)+"\0\0\0\0"+(!0===u?"\0\0\0":"\0\0\0\0")+v(r,4)+h+b+p,compressedObject:n}},S={load:function(e,t){throw new Error("Load method is not defined. Is the file jszip-load.js included ?")},filter:function(e){var t,n,r,a,s=[];for(t in this.files)this.files.hasOwnProperty(t)&&(r=this.files[t],a=new b(r.name,r._data,w(r.options)),n=t.slice(this.root.length,t.length),t.slice(0,this.root.length)===this.root&&e(n,a)&&s.push(a));return s},file:function(e,t,n){if(1===arguments.length){if(a.isRegExp(e)){var r=e;return this.filter((function(e,t){return!t.dir&&r.test(e)}))}return this.filter((function(t,n){return!n.dir&&t===e}))[0]||null}return e=this.root+e,_.call(this,e,t,n),this},folder:function(e){if(!e)return this;if(a.isRegExp(e))return this.filter((function(t,n){return n.dir&&e.test(t)}));var t=this.root+e,n=k.call(this,t),r=this.clone();return r.root=n.name,r},remove:function(e){e=this.root+e;var t=this.files[e];if(t||("/"!=e.slice(-1)&&(e+="/"),t=this.files[e]),t&&!t.dir)delete this.files[e];else for(var n=this.filter((function(t,n){return n.name.slice(0,e.length)===e})),r=0;r=0;--s)if(this.data[s]===t&&this.data[s+1]===n&&this.data[s+2]===r&&this.data[s+3]===a)return s;return-1},a.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.index,this.index+e);return this.index+=e,t},t.exports=a},{"./dataReader":5}],19:[function(e,t,n){"use strict";var r=e("./utils"),a=function(e){this.data=new Uint8Array(e),this.index=0};a.prototype={append:function(e){0!==e.length&&(e=r.transformTo("uint8array",e),this.data.set(e,this.index),this.index+=e.length)},finalize:function(){return this.data}},t.exports=a},{"./utils":21}],20:[function(e,t,n){"use strict";for(var r=e("./utils"),a=e("./support"),s=e("./nodeBuffer"),i=new Array(256),o=0;o<256;o++)i[o]=o>=252?6:o>=248?5:o>=240?4:o>=224?3:o>=192?2:1;i[254]=i[254]=1;var l=function(e,t){var n;for((t=t||e.length)>e.length&&(t=e.length),n=t-1;n>=0&&128==(192&e[n]);)n--;return n<0||0===n?t:n+i[e[n]]>t?n:t},u=function(e){var t,n,a,s,o=e.length,l=new Array(2*o);for(n=0,t=0;t4)l[n++]=65533,t+=s-1;else{for(a&=2===s?31:3===s?15:7;s>1&&t1?l[n++]=65533:a<65536?l[n++]=a:(a-=65536,l[n++]=55296|a>>10&1023,l[n++]=56320|1023&a)}return l.length!==n&&(l.subarray?l=l.subarray(0,n):l.length=n),r.applyFromCharCode(l)};n.utf8encode=function(e){return a.nodebuffer?s(e,"utf-8"):function(e){var t,n,r,s,i,o=e.length,l=0;for(s=0;s>>6,t[i++]=128|63&n):n<65536?(t[i++]=224|n>>>12,t[i++]=128|n>>>6&63,t[i++]=128|63&n):(t[i++]=240|n>>>18,t[i++]=128|n>>>12&63,t[i++]=128|n>>>6&63,t[i++]=128|63&n);return t}(e)},n.utf8decode=function(e){if(a.nodebuffer)return r.transformTo("nodebuffer",e).toString("utf-8");for(var t=[],n=0,s=(e=r.transformTo(a.uint8array?"uint8array":"array",e)).length;n1;)try{"array"===i||"nodebuffer"===i?r.push(String.fromCharCode.apply(null,e.slice(o,Math.min(o+t,a)))):r.push(String.fromCharCode.apply(null,e.subarray(o,Math.min(o+t,a)))),o+=t}catch(e){t=Math.floor(t/2)}return r.join("")}function u(e,t){for(var n=0;n1)throw new Error("Multi-volumes zip are not supported")},readLocalFiles:function(){var e,t;for(e=0;e0?t.windowBits=-t.windowBits:t.gzip&&t.windowBits>0&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new o,this.strm.avail_out=0;var n=r.deflateInit2(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(0!==n)throw new Error(i[n]);t.header&&r.deflateSetHeader(this.strm,t.header)};function u(e,t){var n=new l(t);if(n.push(e,!0),n.err)throw n.msg;return n.result}l.prototype.push=function(e,t){var n,i,o=this.strm,l=this.options.chunkSize;if(this.ended)return!1;i=t===~~t?t:!0===t?4:0,o.input="string"==typeof e?s.string2buf(e):e,o.next_in=0,o.avail_in=o.input.length;do{if(0===o.avail_out&&(o.output=new a.Buf8(l),o.next_out=0,o.avail_out=l),1!==(n=r.deflate(o,i))&&0!==n)return this.onEnd(n),this.ended=!0,!1;(0===o.avail_out||0===o.avail_in&&4===i)&&("string"===this.options.to?this.onData(s.buf2binstring(a.shrinkBuf(o.output,o.next_out))):this.onData(a.shrinkBuf(o.output,o.next_out)))}while((o.avail_in>0||0===o.avail_out)&&1!==n);return 4!==i||(n=r.deflateEnd(this.strm),this.onEnd(n),this.ended=!0,0===n)},l.prototype.onData=function(e){this.chunks.push(e)},l.prototype.onEnd=function(e){0===e&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=a.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},n.Deflate=l,n.deflate=u,n.deflateRaw=function(e,t){return(t=t||{}).raw=!0,u(e,t)},n.gzip=function(e,t){return(t=t||{}).gzip=!0,u(e,t)}},{"./utils/common":27,"./utils/strings":28,"./zlib/deflate.js":32,"./zlib/messages":37,"./zlib/zstream":39}],26:[function(e,t,n){"use strict";var r=e("./zlib/inflate.js"),a=e("./utils/common"),s=e("./utils/strings"),i=e("./zlib/constants"),o=e("./zlib/messages"),l=e("./zlib/zstream"),u=e("./zlib/gzheader"),c=function(e){this.options=a.assign({chunkSize:16384,windowBits:0,to:""},e||{});var t=this.options;t.raw&&t.windowBits>=0&&t.windowBits<16&&(t.windowBits=-t.windowBits,0===t.windowBits&&(t.windowBits=-15)),!(t.windowBits>=0&&t.windowBits<16)||e&&e.windowBits||(t.windowBits+=32),t.windowBits>15&&t.windowBits<48&&0==(15&t.windowBits)&&(t.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new l,this.strm.avail_out=0;var n=r.inflateInit2(this.strm,t.windowBits);if(n!==i.Z_OK)throw new Error(o[n]);this.header=new u,r.inflateGetHeader(this.strm,this.header)};function h(e,t){var n=new c(t);if(n.push(e,!0),n.err)throw n.msg;return n.result}c.prototype.push=function(e,t){var n,o,l,u,c,h=this.strm,f=this.options.chunkSize;if(this.ended)return!1;o=t===~~t?t:!0===t?i.Z_FINISH:i.Z_NO_FLUSH,h.input="string"==typeof e?s.binstring2buf(e):e,h.next_in=0,h.avail_in=h.input.length;do{if(0===h.avail_out&&(h.output=new a.Buf8(f),h.next_out=0,h.avail_out=f),(n=r.inflate(h,i.Z_NO_FLUSH))!==i.Z_STREAM_END&&n!==i.Z_OK)return this.onEnd(n),this.ended=!0,!1;h.next_out&&(0===h.avail_out||n===i.Z_STREAM_END||0===h.avail_in&&o===i.Z_FINISH)&&("string"===this.options.to?(l=s.utf8border(h.output,h.next_out),u=h.next_out-l,c=s.buf2string(h.output,l),h.next_out=u,h.avail_out=f-u,u&&a.arraySet(h.output,h.output,l,u,0),this.onData(c)):this.onData(a.shrinkBuf(h.output,h.next_out)))}while(h.avail_in>0&&n!==i.Z_STREAM_END);return n===i.Z_STREAM_END&&(o=i.Z_FINISH),o!==i.Z_FINISH||(n=r.inflateEnd(this.strm),this.onEnd(n),this.ended=!0,n===i.Z_OK)},c.prototype.onData=function(e){this.chunks.push(e)},c.prototype.onEnd=function(e){e===i.Z_OK&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=a.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},n.Inflate=c,n.inflate=h,n.inflateRaw=function(e,t){return(t=t||{}).raw=!0,h(e,t)},n.ungzip=h},{"./utils/common":27,"./utils/strings":28,"./zlib/constants":30,"./zlib/gzheader":33,"./zlib/inflate.js":35,"./zlib/messages":37,"./zlib/zstream":39}],27:[function(e,t,n){"use strict";var r="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Int32Array;n.assign=function(e){for(var t=Array.prototype.slice.call(arguments,1);t.length;){var n=t.shift();if(n){if("object"!=typeof n)throw new TypeError(n+"must be non-object");for(var r in n)n.hasOwnProperty(r)&&(e[r]=n[r])}}return e},n.shrinkBuf=function(e,t){return e.length===t?e:e.subarray?e.subarray(0,t):(e.length=t,e)};var a={arraySet:function(e,t,n,r,a){if(t.subarray&&e.subarray)e.set(t.subarray(n,n+r),a);else for(var s=0;s=252?6:o>=248?5:o>=240?4:o>=224?3:o>=192?2:1;function l(e,t){if(t<65537&&(e.subarray&&s||!e.subarray&&a))return String.fromCharCode.apply(null,r.shrinkBuf(e,t));for(var n="",i=0;i>>6,t[i++]=128|63&n):n<65536?(t[i++]=224|n>>>12,t[i++]=128|n>>>6&63,t[i++]=128|63&n):(t[i++]=240|n>>>18,t[i++]=128|n>>>12&63,t[i++]=128|n>>>6&63,t[i++]=128|63&n);return t},n.buf2binstring=function(e){return l(e,e.length)},n.binstring2buf=function(e){for(var t=new r.Buf8(e.length),n=0,a=t.length;n4)u[r++]=65533,n+=s-1;else{for(a&=2===s?31:3===s?15:7;s>1&&n1?u[r++]=65533:a<65536?u[r++]=a:(a-=65536,u[r++]=55296|a>>10&1023,u[r++]=56320|1023&a)}return l(u,r)},n.utf8border=function(e,t){var n;for((t=t||e.length)>e.length&&(t=e.length),n=t-1;n>=0&&128==(192&e[n]);)n--;return n<0||0===n?t:n+i[e[n]]>t?n:t}},{"./common":27}],29:[function(e,t,n){"use strict";t.exports=function(e,t,n,r){for(var a=65535&e|0,s=e>>>16&65535|0,i=0;0!==n;){n-=i=n>2e3?2e3:n;do{s=s+(a=a+t[r++]|0)|0}while(--i);a%=65521,s%=65521}return a|s<<16|0}},{}],30:[function(e,t,n){t.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],31:[function(e,t,n){"use strict";var r=function(){for(var e,t=[],n=0;n<256;n++){e=n;for(var r=0;r<8;r++)e=1&e?3988292384^e>>>1:e>>>1;t[n]=e}return t}();t.exports=function(e,t,n,a){var s=r,i=a+n;e^=-1;for(var o=a;o>>8^s[255&(e^t[o])];return-1^e}},{}],32:[function(e,t,n){"use strict";var r=e("../utils/common"),a=e("./trees"),s=e("./adler32"),i=e("./crc32"),o=e("./messages"),l=-2,u=258,c=262,h=103,f=113,d=666;function p(e,t){return e.msg=o[t],t}function m(e){return(e<<1)-(e>4?9:0)}function g(e){for(var t=e.length;--t>=0;)e[t]=0}function y(e){var t=e.state,n=t.pending;n>e.avail_out&&(n=e.avail_out),0!==n&&(r.arraySet(e.output,t.pending_buf,t.pending_out,n,e.next_out),e.next_out+=n,t.pending_out+=n,e.total_out+=n,e.avail_out-=n,t.pending-=n,0===t.pending&&(t.pending_out=0))}function b(e,t){a._tr_flush_block(e,e.block_start>=0?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,y(e.strm)}function v(e,t){e.pending_buf[e.pending++]=t}function w(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function _(e,t){var n,r,a=e.max_chain_length,s=e.strstart,i=e.prev_length,o=e.nice_match,l=e.strstart>e.w_size-c?e.strstart-(e.w_size-c):0,h=e.window,f=e.w_mask,d=e.prev,p=e.strstart+u,m=h[s+i-1],g=h[s+i];e.prev_length>=e.good_match&&(a>>=2),o>e.lookahead&&(o=e.lookahead);do{if(h[(n=t)+i]===g&&h[n+i-1]===m&&h[n]===h[s]&&h[++n]===h[s+1]){s+=2,n++;do{}while(h[++s]===h[++n]&&h[++s]===h[++n]&&h[++s]===h[++n]&&h[++s]===h[++n]&&h[++s]===h[++n]&&h[++s]===h[++n]&&h[++s]===h[++n]&&h[++s]===h[++n]&&si){if(e.match_start=t,i=r,r>=o)break;m=h[s+i-1],g=h[s+i]}}}while((t=d[t&f])>l&&0!=--a);return i<=e.lookahead?i:e.lookahead}function x(e){var t,n,a,o,l,u,h,f,d,p,m=e.w_size;do{if(o=e.window_size-e.lookahead-e.strstart,e.strstart>=m+(m-c)){r.arraySet(e.window,e.window,m,m,0),e.match_start-=m,e.strstart-=m,e.block_start-=m,t=n=e.hash_size;do{a=e.head[--t],e.head[t]=a>=m?a-m:0}while(--n);t=n=m;do{a=e.prev[--t],e.prev[t]=a>=m?a-m:0}while(--n);o+=m}if(0===e.strm.avail_in)break;if(u=e.strm,h=e.window,f=e.strstart+e.lookahead,d=o,p=void 0,(p=u.avail_in)>d&&(p=d),n=0===p?0:(u.avail_in-=p,r.arraySet(h,u.input,u.next_in,p,f),1===u.state.wrap?u.adler=s(u.adler,h,p,f):2===u.state.wrap&&(u.adler=i(u.adler,h,p,f)),u.next_in+=p,u.total_in+=p,p),e.lookahead+=n,e.lookahead+e.insert>=3)for(l=e.strstart-e.insert,e.ins_h=e.window[l],e.ins_h=(e.ins_h<=3&&(e.ins_h=(e.ins_h<=3)if(r=a._tr_tally(e,e.strstart-e.match_start,e.match_length-3),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=3){e.match_length--;do{e.strstart++,e.ins_h=(e.ins_h<=3&&(e.ins_h=(e.ins_h<4096)&&(e.match_length=2)),e.prev_length>=3&&e.match_length<=e.prev_length){s=e.strstart+e.lookahead-3,r=a._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-3),e.lookahead-=e.prev_length-1,e.prev_length-=2;do{++e.strstart<=s&&(e.ins_h=(e.ins_h<15&&(o=2,a-=16),s<1||s>9||8!==n||a<8||a>15||t<0||t>9||i<0||i>4)return p(e,l);8===a&&(a=9);var u=new N;return e.state=u,u.strm=e,u.wrap=o,u.gzhead=null,u.w_bits=a,u.w_size=1<>1,u.l_buf=3*u.lit_bufsize,u.level=t,u.strategy=i,u.method=n,A(e)}C=[new S(0,0,0,0,(function(e,t){var n=65535;for(n>e.pending_buf_size-5&&(n=e.pending_buf_size-5);;){if(e.lookahead<=1){if(x(e),0===e.lookahead&&0===t)return 1;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var r=e.block_start+n;if((0===e.strstart||e.strstart>=r)&&(e.lookahead=e.strstart-r,e.strstart=r,b(e,!1),0===e.strm.avail_out))return 1;if(e.strstart-e.block_start>=e.w_size-c&&(b(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(b(e,!0),0===e.strm.avail_out?3:4):(e.strstart>e.block_start&&(b(e,!1),e.strm.avail_out),1)})),new S(4,4,8,4,k),new S(4,5,16,8,k),new S(4,6,32,32,k),new S(4,4,16,16,E),new S(8,16,32,32,E),new S(8,16,128,128,E),new S(8,32,128,256,E),new S(32,128,258,1024,E),new S(32,258,258,4096,E)],n.deflateInit=function(e,t){return D(e,t,8,15,8,0)},n.deflateInit2=D,n.deflateReset=A,n.deflateResetKeep=I,n.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?l:(e.state.gzhead=t,0):l},n.deflate=function(e,t){var n,r,s,o;if(!e||!e.state||t>5||t<0)return e?p(e,l):l;if(r=e.state,!e.output||!e.input&&0!==e.avail_in||r.status===d&&4!==t)return p(e,0===e.avail_out?-5:l);if(r.strm=e,n=r.last_flush,r.last_flush=t,42===r.status)if(2===r.wrap)e.adler=0,v(r,31),v(r,139),v(r,8),r.gzhead?(v(r,(r.gzhead.text?1:0)+(r.gzhead.hcrc?2:0)+(r.gzhead.extra?4:0)+(r.gzhead.name?8:0)+(r.gzhead.comment?16:0)),v(r,255&r.gzhead.time),v(r,r.gzhead.time>>8&255),v(r,r.gzhead.time>>16&255),v(r,r.gzhead.time>>24&255),v(r,9===r.level?2:r.strategy>=2||r.level<2?4:0),v(r,255&r.gzhead.os),r.gzhead.extra&&r.gzhead.extra.length&&(v(r,255&r.gzhead.extra.length),v(r,r.gzhead.extra.length>>8&255)),r.gzhead.hcrc&&(e.adler=i(e.adler,r.pending_buf,r.pending,0)),r.gzindex=0,r.status=69):(v(r,0),v(r,0),v(r,0),v(r,0),v(r,0),v(r,9===r.level?2:r.strategy>=2||r.level<2?4:0),v(r,3),r.status=f);else{var c=8+(r.w_bits-8<<4)<<8;c|=(r.strategy>=2||r.level<2?0:r.level<6?1:6===r.level?2:3)<<6,0!==r.strstart&&(c|=32),c+=31-c%31,r.status=f,w(r,c),0!==r.strstart&&(w(r,e.adler>>>16),w(r,65535&e.adler)),e.adler=1}if(69===r.status)if(r.gzhead.extra){for(s=r.pending;r.gzindex<(65535&r.gzhead.extra.length)&&(r.pending!==r.pending_buf_size||(r.gzhead.hcrc&&r.pending>s&&(e.adler=i(e.adler,r.pending_buf,r.pending-s,s)),y(e),s=r.pending,r.pending!==r.pending_buf_size));)v(r,255&r.gzhead.extra[r.gzindex]),r.gzindex++;r.gzhead.hcrc&&r.pending>s&&(e.adler=i(e.adler,r.pending_buf,r.pending-s,s)),r.gzindex===r.gzhead.extra.length&&(r.gzindex=0,r.status=73)}else r.status=73;if(73===r.status)if(r.gzhead.name){s=r.pending;do{if(r.pending===r.pending_buf_size&&(r.gzhead.hcrc&&r.pending>s&&(e.adler=i(e.adler,r.pending_buf,r.pending-s,s)),y(e),s=r.pending,r.pending===r.pending_buf_size)){o=1;break}o=r.gzindexs&&(e.adler=i(e.adler,r.pending_buf,r.pending-s,s)),0===o&&(r.gzindex=0,r.status=91)}else r.status=91;if(91===r.status)if(r.gzhead.comment){s=r.pending;do{if(r.pending===r.pending_buf_size&&(r.gzhead.hcrc&&r.pending>s&&(e.adler=i(e.adler,r.pending_buf,r.pending-s,s)),y(e),s=r.pending,r.pending===r.pending_buf_size)){o=1;break}o=r.gzindexs&&(e.adler=i(e.adler,r.pending_buf,r.pending-s,s)),0===o&&(r.status=h)}else r.status=h;if(r.status===h&&(r.gzhead.hcrc?(r.pending+2>r.pending_buf_size&&y(e),r.pending+2<=r.pending_buf_size&&(v(r,255&e.adler),v(r,e.adler>>8&255),e.adler=0,r.status=f)):r.status=f),0!==r.pending){if(y(e),0===e.avail_out)return r.last_flush=-1,0}else if(0===e.avail_in&&m(t)<=m(n)&&4!==t)return p(e,-5);if(r.status===d&&0!==e.avail_in)return p(e,-5);if(0!==e.avail_in||0!==r.lookahead||0!==t&&r.status!==d){var _=2===r.strategy?function(e,t){for(var n;;){if(0===e.lookahead&&(x(e),0===e.lookahead)){if(0===t)return 1;break}if(e.match_length=0,n=a._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,n&&(b(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(b(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(b(e,!1),0===e.strm.avail_out)?1:2}(r,t):3===r.strategy?function(e,t){for(var n,r,s,i,o=e.window;;){if(e.lookahead<=u){if(x(e),e.lookahead<=u&&0===t)return 1;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=3&&e.strstart>0&&(r=o[s=e.strstart-1])===o[++s]&&r===o[++s]&&r===o[++s]){i=e.strstart+u;do{}while(r===o[++s]&&r===o[++s]&&r===o[++s]&&r===o[++s]&&r===o[++s]&&r===o[++s]&&r===o[++s]&&r===o[++s]&&se.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=3?(n=a._tr_tally(e,1,e.match_length-3),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(n=a._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),n&&(b(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(b(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(b(e,!1),0===e.strm.avail_out)?1:2}(r,t):C[r.level].func(r,t);if(3!==_&&4!==_||(r.status=d),1===_||3===_)return 0===e.avail_out&&(r.last_flush=-1),0;if(2===_&&(1===t?a._tr_align(r):5!==t&&(a._tr_stored_block(r,0,0,!1),3===t&&(g(r.head),0===r.lookahead&&(r.strstart=0,r.block_start=0,r.insert=0))),y(e),0===e.avail_out))return r.last_flush=-1,0}return 4!==t?0:r.wrap<=0?1:(2===r.wrap?(v(r,255&e.adler),v(r,e.adler>>8&255),v(r,e.adler>>16&255),v(r,e.adler>>24&255),v(r,255&e.total_in),v(r,e.total_in>>8&255),v(r,e.total_in>>16&255),v(r,e.total_in>>24&255)):(w(r,e.adler>>>16),w(r,65535&e.adler)),y(e),r.wrap>0&&(r.wrap=-r.wrap),0!==r.pending?0:1)},n.deflateEnd=function(e){var t;return e&&e.state?42!==(t=e.state.status)&&69!==t&&73!==t&&91!==t&&t!==h&&t!==f&&t!==d?p(e,l):(e.state=null,t===f?p(e,-3):0):l},n.deflateInfo="pako deflate (from Nodeca project)"},{"../utils/common":27,"./adler32":29,"./crc32":31,"./messages":37,"./trees":38}],33:[function(e,t,n){"use strict";t.exports=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}},{}],34:[function(e,t,n){"use strict";t.exports=function(e,t){var n,r,a,s,i,o,l,u,c,h,f,d,p,m,g,y,b,v,w,_,x,k,E,C,S;n=e.state,r=e.next_in,C=e.input,a=r+(e.avail_in-5),s=e.next_out,S=e.output,i=s-(t-e.avail_out),o=s+(e.avail_out-257),l=n.dmax,u=n.wsize,c=n.whave,h=n.wnext,f=n.window,d=n.hold,p=n.bits,m=n.lencode,g=n.distcode,y=(1<>>=w=v>>>24,p-=w,0==(w=v>>>16&255))S[s++]=65535&v;else{if(!(16&w)){if(0==(64&w)){v=m[(65535&v)+(d&(1<>>=w,p-=w),p<15&&(d+=C[r++]<>>=w=v>>>24,p-=w,!(16&(w=v>>>16&255))){if(0==(64&w)){v=g[(65535&v)+(d&(1<l){e.msg="invalid distance too far back",n.mode=30;break e}if(d>>>=w,p-=w,x>(w=s-i)){if((w=x-w)>c&&n.sane){e.msg="invalid distance too far back",n.mode=30;break e}if(k=0,E=f,0===h){if(k+=u-w,w<_){_-=w;do{S[s++]=f[k++]}while(--w);k=s-x,E=S}}else if(h2;)S[s++]=E[k++],S[s++]=E[k++],S[s++]=E[k++],_-=3;_&&(S[s++]=E[k++],_>1&&(S[s++]=E[k++]))}else{k=s-x;do{S[s++]=S[k++],S[s++]=S[k++],S[s++]=S[k++],_-=3}while(_>2);_&&(S[s++]=S[k++],_>1&&(S[s++]=S[k++]))}break}}break}}while(r>3,d&=(1<<(p-=_<<3))-1,e.next_in=r,e.next_out=s,e.avail_in=r>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function f(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new r.Buf16(320),this.work=new r.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function d(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg="",t.wrap&&(e.adler=1&t.wrap),t.mode=1,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new r.Buf32(852),t.distcode=t.distdyn=new r.Buf32(592),t.sane=1,t.back=-1,0):l}function p(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,d(e)):l}function m(e,t){var n,r;return e&&e.state?(r=e.state,t<0?(n=0,t=-t):(n=1+(t>>4),t<48&&(t&=15)),t&&(t<8||t>15)?l:(null!==r.window&&r.wbits!==t&&(r.window=null),r.wrap=n,r.wbits=t,p(e))):l}function g(e,t){var n,r;return e?(r=new f,e.state=r,r.window=null,0!==(n=m(e,t))&&(e.state=null),n):l}var y,b,v=!0;function w(e){if(v){var t;for(y=new r.Buf32(512),b=new r.Buf32(32),t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(o(1,e.lens,0,288,y,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;o(2,e.lens,0,32,b,0,e.work,{bits:5}),v=!1}e.lencode=y,e.lenbits=9,e.distcode=b,e.distbits=5}n.inflateReset=p,n.inflateReset2=m,n.inflateResetKeep=d,n.inflateInit=function(e){return g(e,15)},n.inflateInit2=g,n.inflate=function(e,t){var n,f,d,p,m,g,y,b,v,_,x,k,E,C,S,N,I,A,D,T,F,R,O,M,B=0,$=new r.Buf8(4),P=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!e||!e.state||!e.output||!e.input&&0!==e.avail_in)return l;(n=e.state).mode===u&&(n.mode=13),m=e.next_out,d=e.output,y=e.avail_out,p=e.next_in,f=e.input,g=e.avail_in,b=n.hold,v=n.bits,_=g,x=y,R=0;e:for(;;)switch(n.mode){case 1:if(0===n.wrap){n.mode=13;break}for(;v<16;){if(0===g)break e;g--,b+=f[p++]<>>8&255,n.check=s(n.check,$,2,0),b=0,v=0,n.mode=2;break}if(n.flags=0,n.head&&(n.head.done=!1),!(1&n.wrap)||(((255&b)<<8)+(b>>8))%31){e.msg="incorrect header check",n.mode=c;break}if(8!=(15&b)){e.msg="unknown compression method",n.mode=c;break}if(v-=4,F=8+(15&(b>>>=4)),0===n.wbits)n.wbits=F;else if(F>n.wbits){e.msg="invalid window size",n.mode=c;break}n.dmax=1<>8&1),512&n.flags&&($[0]=255&b,$[1]=b>>>8&255,n.check=s(n.check,$,2,0)),b=0,v=0,n.mode=3;case 3:for(;v<32;){if(0===g)break e;g--,b+=f[p++]<>>8&255,$[2]=b>>>16&255,$[3]=b>>>24&255,n.check=s(n.check,$,4,0)),b=0,v=0,n.mode=4;case 4:for(;v<16;){if(0===g)break e;g--,b+=f[p++]<>8),512&n.flags&&($[0]=255&b,$[1]=b>>>8&255,n.check=s(n.check,$,2,0)),b=0,v=0,n.mode=5;case 5:if(1024&n.flags){for(;v<16;){if(0===g)break e;g--,b+=f[p++]<>>8&255,n.check=s(n.check,$,2,0)),b=0,v=0}else n.head&&(n.head.extra=null);n.mode=6;case 6:if(1024&n.flags&&((k=n.length)>g&&(k=g),k&&(n.head&&(F=n.head.extra_len-n.length,n.head.extra||(n.head.extra=new Array(n.head.extra_len)),r.arraySet(n.head.extra,f,p,k,F)),512&n.flags&&(n.check=s(n.check,f,k,p)),g-=k,p+=k,n.length-=k),n.length))break e;n.length=0,n.mode=7;case 7:if(2048&n.flags){if(0===g)break e;k=0;do{F=f[p+k++],n.head&&F&&n.length<65536&&(n.head.name+=String.fromCharCode(F))}while(F&&k>9&1,n.head.done=!0),e.adler=n.check=0,n.mode=u;break;case 10:for(;v<32;){if(0===g)break e;g--,b+=f[p++]<>>=7&v,v-=7&v,n.mode=27;break}for(;v<3;){if(0===g)break e;g--,b+=f[p++]<>>=1)){case 0:n.mode=14;break;case 1:if(w(n),n.mode=20,6===t){b>>>=2,v-=2;break e}break;case 2:n.mode=17;break;case 3:e.msg="invalid block type",n.mode=c}b>>>=2,v-=2;break;case 14:for(b>>>=7&v,v-=7&v;v<32;){if(0===g)break e;g--,b+=f[p++]<>>16^65535)){e.msg="invalid stored block lengths",n.mode=c;break}if(n.length=65535&b,b=0,v=0,n.mode=15,6===t)break e;case 15:n.mode=16;case 16:if(k=n.length){if(k>g&&(k=g),k>y&&(k=y),0===k)break e;r.arraySet(d,f,p,k,m),g-=k,p+=k,y-=k,m+=k,n.length-=k;break}n.mode=u;break;case 17:for(;v<14;){if(0===g)break e;g--,b+=f[p++]<>>=5,v-=5,n.ndist=1+(31&b),b>>>=5,v-=5,n.ncode=4+(15&b),b>>>=4,v-=4,n.nlen>286||n.ndist>30){e.msg="too many length or distance symbols",n.mode=c;break}n.have=0,n.mode=18;case 18:for(;n.have>>=3,v-=3}for(;n.have<19;)n.lens[P[n.have++]]=0;if(n.lencode=n.lendyn,n.lenbits=7,O={bits:n.lenbits},R=o(0,n.lens,0,19,n.lencode,0,n.work,O),n.lenbits=O.bits,R){e.msg="invalid code lengths set",n.mode=c;break}n.have=0,n.mode=19;case 19:for(;n.have>>16&255,I=65535&B,!((S=B>>>24)<=v);){if(0===g)break e;g--,b+=f[p++]<>>=S,v-=S,n.lens[n.have++]=I;else{if(16===I){for(M=S+2;v>>=S,v-=S,0===n.have){e.msg="invalid bit length repeat",n.mode=c;break}F=n.lens[n.have-1],k=3+(3&b),b>>>=2,v-=2}else if(17===I){for(M=S+3;v>>=S)),b>>>=3,v-=3}else{for(M=S+7;v>>=S)),b>>>=7,v-=7}if(n.have+k>n.nlen+n.ndist){e.msg="invalid bit length repeat",n.mode=c;break}for(;k--;)n.lens[n.have++]=F}}if(n.mode===c)break;if(0===n.lens[256]){e.msg="invalid code -- missing end-of-block",n.mode=c;break}if(n.lenbits=9,O={bits:n.lenbits},R=o(1,n.lens,0,n.nlen,n.lencode,0,n.work,O),n.lenbits=O.bits,R){e.msg="invalid literal/lengths set",n.mode=c;break}if(n.distbits=6,n.distcode=n.distdyn,O={bits:n.distbits},R=o(2,n.lens,n.nlen,n.ndist,n.distcode,0,n.work,O),n.distbits=O.bits,R){e.msg="invalid distances set",n.mode=c;break}if(n.mode=20,6===t)break e;case 20:n.mode=21;case 21:if(g>=6&&y>=258){e.next_out=m,e.avail_out=y,e.next_in=p,e.avail_in=g,n.hold=b,n.bits=v,i(e,x),m=e.next_out,d=e.output,y=e.avail_out,p=e.next_in,f=e.input,g=e.avail_in,b=n.hold,v=n.bits,n.mode===u&&(n.back=-1);break}for(n.back=0;N=(B=n.lencode[b&(1<>>16&255,I=65535&B,!((S=B>>>24)<=v);){if(0===g)break e;g--,b+=f[p++]<>A)])>>>16&255,I=65535&B,!(A+(S=B>>>24)<=v);){if(0===g)break e;g--,b+=f[p++]<>>=A,v-=A,n.back+=A}if(b>>>=S,v-=S,n.back+=S,n.length=I,0===N){n.mode=26;break}if(32&N){n.back=-1,n.mode=u;break}if(64&N){e.msg="invalid literal/length code",n.mode=c;break}n.extra=15&N,n.mode=22;case 22:if(n.extra){for(M=n.extra;v>>=n.extra,v-=n.extra,n.back+=n.extra}n.was=n.length,n.mode=23;case 23:for(;N=(B=n.distcode[b&(1<>>16&255,I=65535&B,!((S=B>>>24)<=v);){if(0===g)break e;g--,b+=f[p++]<>A)])>>>16&255,I=65535&B,!(A+(S=B>>>24)<=v);){if(0===g)break e;g--,b+=f[p++]<>>=A,v-=A,n.back+=A}if(b>>>=S,v-=S,n.back+=S,64&N){e.msg="invalid distance code",n.mode=c;break}n.offset=I,n.extra=15&N,n.mode=24;case 24:if(n.extra){for(M=n.extra;v>>=n.extra,v-=n.extra,n.back+=n.extra}if(n.offset>n.dmax){e.msg="invalid distance too far back",n.mode=c;break}n.mode=25;case 25:if(0===y)break e;if(k=x-y,n.offset>k){if((k=n.offset-k)>n.whave&&n.sane){e.msg="invalid distance too far back",n.mode=c;break}k>n.wnext?(k-=n.wnext,E=n.wsize-k):E=n.wnext-k,k>n.length&&(k=n.length),C=n.window}else C=d,E=m-n.offset,k=n.length;k>y&&(k=y),y-=k,n.length-=k;do{d[m++]=C[E++]}while(--k);0===n.length&&(n.mode=21);break;case 26:if(0===y)break e;d[m++]=n.length,y--,n.mode=21;break;case 27:if(n.wrap){for(;v<32;){if(0===g)break e;g--,b|=f[p++]<=i.wsize?(r.arraySet(i.window,t,n-i.wsize,i.wsize,0),i.wnext=0,i.whave=i.wsize):((s=i.wsize-i.wnext)>a&&(s=a),r.arraySet(i.window,t,n-a,s,i.wnext),(a-=s)?(r.arraySet(i.window,t,n-a,a,0),i.wnext=a,i.whave=i.wsize):(i.wnext+=s,i.wnext===i.wsize&&(i.wnext=0),i.whave=1&&0===M[S];S--);if(N>S&&(N=S),0===S)return u[c++]=20971520,u[c++]=20971520,f.bits=1,0;for(C=1;C0&&(0===e||1!==S))return-1;for(B[1]=0,k=1;k<15;k++)B[k+1]=B[k]+M[k];for(E=0;E852||2===e&&T>592)return 1;for(;;){v=k-A,h[E]b?(w=$[P+h[E]],_=R[O+h[E]]):(w=96,_=0),d=1<>A)+(p-=d)]=v<<24|w<<16|_|0}while(0!==p);for(d=1<>=1;if(0!==d?(F&=d-1,F+=d):F=0,E++,0==--M[k]){if(k===S)break;k=t[n+h[E]]}if(k>N&&(F&g)!==m){for(0===A&&(A=N),y+=C,D=1<<(I=k-A);I+A852||2===e&&T>592)return 1;u[m=F&g]=N<<24|I<<16|y-c|0}}return 0!==F&&(u[y+F]=k-A<<24|64<<16|0),f.bits=N,0}},{"../utils/common":27}],37:[function(e,t,n){"use strict";t.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],38:[function(e,t,n){"use strict";var r=e("../utils/common");function a(e){for(var t=e.length;--t>=0;)e[t]=0}var s=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],i=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],o=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],l=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],u=new Array(576);a(u);var c=new Array(60);a(c);var h=new Array(512);a(h);var f=new Array(256);a(f);var d=new Array(29);a(d);var p=new Array(30);a(p);var m,g,y,b=function(e,t,n,r,a){this.static_tree=e,this.extra_bits=t,this.extra_base=n,this.elems=r,this.max_length=a,this.has_stree=e&&e.length},v=function(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t};function w(e){return e<256?h[e]:h[256+(e>>>7)]}function _(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function x(e,t,n){e.bi_valid>16-n?(e.bi_buf|=t<>16-e.bi_valid,e.bi_valid+=n-16):(e.bi_buf|=t<>>=1,n<<=1}while(--t>0);return n>>>1}function C(e,t,n){var r,a,s=new Array(16),i=0;for(r=1;r<=15;r++)s[r]=i=i+n[r-1]<<1;for(a=0;a<=t;a++){var o=e[2*a+1];0!==o&&(e[2*a]=E(s[o]++,o))}}function S(e){var t;for(t=0;t<286;t++)e.dyn_ltree[2*t]=0;for(t=0;t<30;t++)e.dyn_dtree[2*t]=0;for(t=0;t<19;t++)e.bl_tree[2*t]=0;e.dyn_ltree[512]=1,e.opt_len=e.static_len=0,e.last_lit=e.matches=0}function N(e){e.bi_valid>8?_(e,e.bi_buf):e.bi_valid>0&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0}function I(e,t,n,r){var a=2*t,s=2*n;return e[a]>1;n>=1;n--)A(e,s,n);a=l;do{n=e.heap[1],e.heap[1]=e.heap[e.heap_len--],A(e,s,1),r=e.heap[1],e.heap[--e.heap_max]=n,e.heap[--e.heap_max]=r,s[2*a]=s[2*n]+s[2*r],e.depth[a]=(e.depth[n]>=e.depth[r]?e.depth[n]:e.depth[r])+1,s[2*n+1]=s[2*r+1]=a,e.heap[1]=a++,A(e,s,1)}while(e.heap_len>=2);e.heap[--e.heap_max]=e.heap[1],function(e,t){var n,r,a,s,i,o,l=t.dyn_tree,u=t.max_code,c=t.stat_desc.static_tree,h=t.stat_desc.has_stree,f=t.stat_desc.extra_bits,d=t.stat_desc.extra_base,p=t.stat_desc.max_length,m=0;for(s=0;s<=15;s++)e.bl_count[s]=0;for(l[2*e.heap[e.heap_max]+1]=0,n=e.heap_max+1;n<573;n++)(s=l[2*l[2*(r=e.heap[n])+1]+1]+1)>p&&(s=p,m++),l[2*r+1]=s,r>u||(e.bl_count[s]++,i=0,r>=d&&(i=f[r-d]),o=l[2*r],e.opt_len+=o*(s+i),h&&(e.static_len+=o*(c[2*r+1]+i)));if(0!==m){do{for(s=p-1;0===e.bl_count[s];)s--;e.bl_count[s]--,e.bl_count[s+1]+=2,e.bl_count[p]--,m-=2}while(m>0);for(s=p;0!==s;s--)for(r=e.bl_count[s];0!==r;)(a=e.heap[--n])>u||(l[2*a+1]!==s&&(e.opt_len+=(s-l[2*a+1])*l[2*a],l[2*a+1]=s),r--)}}(e,t),C(s,u,e.bl_count)}function F(e,t,n){var r,a,s=-1,i=t[1],o=0,l=7,u=4;for(0===i&&(l=138,u=3),t[2*(n+1)+1]=65535,r=0;r<=n;r++)a=i,i=t[2*(r+1)+1],++o>=7;r<30;r++)for(p[r]=a<<7,e=0;e<1<0?(2===e.strm.data_type&&(e.strm.data_type=function(e){var t,n=4093624447;for(t=0;t<=31;t++,n>>>=1)if(1&n&&0!==e.dyn_ltree[2*t])return 0;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return 1;for(t=32;t<256;t++)if(0!==e.dyn_ltree[2*t])return 1;return 0}(e)),T(e,e.l_desc),T(e,e.d_desc),i=function(e){var t;for(F(e,e.dyn_ltree,e.l_desc.max_code),F(e,e.dyn_dtree,e.d_desc.max_code),T(e,e.bl_desc),t=18;t>=3&&0===e.bl_tree[2*l[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t}(e),a=e.opt_len+3+7>>>3,(s=e.static_len+3+7>>>3)<=a&&(a=s)):a=s=n+5,n+4<=a&&-1!==t?M(e,t,n,r):4===e.strategy||s===a?(x(e,2+(r?1:0),3),D(e,u,c)):(x(e,4+(r?1:0),3),function(e,t,n,r){var a;for(x(e,t-257,5),x(e,n-1,5),x(e,r-4,4),a=0;a>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&n,e.last_lit++,0===t?e.dyn_ltree[2*n]++:(e.matches++,t--,e.dyn_ltree[2*(f[n]+256+1)]++,e.dyn_dtree[2*w(t)]++),e.last_lit===e.lit_bufsize-1},n._tr_align=function(e){x(e,2,3),k(e,256,u),function(e){16===e.bi_valid?(_(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):e.bi_valid>=8&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},{"../utils/common":27}],39:[function(e,t,n){"use strict";t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}},{}]},{},[9])(9)}))},7869:(e,t,n)=>{!function(t){t.version="0.16.9";var r=1200,a=1252;"undefined"==typeof cptable&&(void 0!==n.g?n.g.cptable=n(6113):"undefined"!=typeof window&&(window.cptable=n(6113)));for(var s=[874,932,936,949,950],i=0;i<=8;++i)s.push(1250+i);var o={0:1252,1:65001,2:65001,77:1e4,128:932,129:949,130:1361,134:936,136:950,161:1253,162:1254,163:1258,177:1255,178:1256,186:1257,204:1251,222:874,238:1250,255:1252,69:6969},l=function(e){-1!=s.indexOf(e)&&(a=o[0]=e)},u=function(e){r=e,l(e)};function c(){u(1200),l(1252)}function h(e){for(var t=[],n=0,r=e.length;n>1;++n)t[n]=String.fromCharCode(e.charCodeAt(2*n)+(e.charCodeAt(2*n+1)<<8));return t.join("")}(e.slice(2)):254==t&&255==n?function(e){for(var t=[],n=0;n>1;++n)t[n]=String.fromCharCode(e.charCodeAt(2*n+1)+(e.charCodeAt(2*n)<<8));return t.join("")}(e.slice(2)):65279==t?e.slice(1):e},d=function(e){return String.fromCharCode(e)},p=function(e){return String.fromCharCode(e)};"undefined"!=typeof cptable&&(u=function(e){r=e,l(e)},f=function(e){return 255===e.charCodeAt(0)&&254===e.charCodeAt(1)?cptable.utils.decode(1200,h(e.slice(2))):e},d=function(e){return 1200===r?String.fromCharCode(e):cptable.utils.decode(r,[255&e,e>>8])[0]},p=function(e){return cptable.utils.decode(a,[e])[0]});var m,g=(m="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",{encode:function(e){for(var t="",n=0,r=0,a=0,s=0,i=0,o=0,l=0,u=0;u>2,i=(3&n)<<4|(r=e.charCodeAt(u++))>>4,o=(15&r)<<2|(a=e.charCodeAt(u++))>>6,l=63&a,isNaN(r)?o=l=64:isNaN(a)&&(l=64),t+=m.charAt(s)+m.charAt(i)+m.charAt(o)+m.charAt(l);return t},decode:function(e){var t="",n=0,r=0,a=0,s=0,i=0,o=0;e=e.replace(/[^\w\+\/\=]/g,"");for(var l=0;l>4,t+=String.fromCharCode(n),r=(15&s)<<4|(i=m.indexOf(e.charAt(l++)))>>2,64!==i&&(t+=String.fromCharCode(r)),a=(3&i)<<6|(o=m.indexOf(e.charAt(l++))),64!==o&&(t+=String.fromCharCode(a));return t}}),y="undefined"!=typeof Buffer&&"undefined"!=typeof process&&void 0!==process.versions&&!!process.versions.node,b=function(){};if("undefined"!=typeof Buffer){var v=!Buffer.from;if(!v)try{Buffer.from("foo","utf8")}catch(e){v=!0}b=v?function(e,t){return t?new Buffer(e,t):new Buffer(e)}:Buffer.from.bind(Buffer),Buffer.alloc||(Buffer.alloc=function(e){return new Buffer(e)}),Buffer.allocUnsafe||(Buffer.allocUnsafe=function(e){return new Buffer(e)})}function w(e){return y?Buffer.alloc(e):new Array(e)}function _(e){return y?Buffer.allocUnsafe(e):new Array(e)}var x=function(e){return y?b(e,"binary"):e.split("").map((function(e){return 255&e.charCodeAt(0)}))};function k(e){if("undefined"==typeof ArrayBuffer)return x(e);for(var t=new ArrayBuffer(e.length),n=new Uint8Array(t),r=0;r!=e.length;++r)n[r]=255&e.charCodeAt(r);return t}function E(e){if(Array.isArray(e))return e.map((function(e){return String.fromCharCode(e)})).join("");for(var t=[],n=0;n=0;)t+=e.charAt(n--);return t}function n(e,t){for(var n="";n.length=t?r:n("0",t-r.length)+r}function a(e,t){var r=""+e;return r.length>=t?r:n(" ",t-r.length)+r}function s(e,t){var r=""+e;return r.length>=t?r:r+n(" ",t-r.length)}e.version="0.11.2";var i=Math.pow(2,32);function o(e,t){return e>i||e<-i?function(e,t){var r=""+Math.round(e);return r.length>=t?r:n("0",t-r.length)+r}(e,t):function(e,t){var r=""+e;return r.length>=t?r:n("0",t-r.length)+r}(Math.round(e),t)}function l(e,t){return t=t||0,e.length>=7+t&&103==(32|e.charCodeAt(t))&&101==(32|e.charCodeAt(t+1))&&110==(32|e.charCodeAt(t+2))&&101==(32|e.charCodeAt(t+3))&&114==(32|e.charCodeAt(t+4))&&97==(32|e.charCodeAt(t+5))&&108==(32|e.charCodeAt(t+6))}var u=[["Sun","Sunday"],["Mon","Monday"],["Tue","Tuesday"],["Wed","Wednesday"],["Thu","Thursday"],["Fri","Friday"],["Sat","Saturday"]],c=[["J","Jan","January"],["F","Feb","February"],["M","Mar","March"],["A","Apr","April"],["M","May","May"],["J","Jun","June"],["J","Jul","July"],["A","Aug","August"],["S","Sep","September"],["O","Oct","October"],["N","Nov","November"],["D","Dec","December"]];function h(e){e[0]="General",e[1]="0",e[2]="0.00",e[3]="#,##0",e[4]="#,##0.00",e[9]="0%",e[10]="0.00%",e[11]="0.00E+00",e[12]="# ?/?",e[13]="# ??/??",e[14]="m/d/yy",e[15]="d-mmm-yy",e[16]="d-mmm",e[17]="mmm-yy",e[18]="h:mm AM/PM",e[19]="h:mm:ss AM/PM",e[20]="h:mm",e[21]="h:mm:ss",e[22]="m/d/yy h:mm",e[37]="#,##0 ;(#,##0)",e[38]="#,##0 ;[Red](#,##0)",e[39]="#,##0.00;(#,##0.00)",e[40]="#,##0.00;[Red](#,##0.00)",e[45]="mm:ss",e[46]="[h]:mm:ss",e[47]="mmss.0",e[48]="##0.0E+0",e[49]="@",e[56]='"上午/下午 "hh"時"mm"分"ss"秒 "'}var f={};h(f);var d=[],p=0;for(p=5;p<=8;++p)d[p]=32+p;for(p=23;p<=26;++p)d[p]=0;for(p=27;p<=31;++p)d[p]=14;for(p=50;p<=58;++p)d[p]=14;for(p=59;p<=62;++p)d[p]=p-58;for(p=67;p<=68;++p)d[p]=p-58;for(p=72;p<=75;++p)d[p]=p-58;for(p=67;p<=68;++p)d[p]=p-57;for(p=76;p<=78;++p)d[p]=p-56;for(p=79;p<=81;++p)d[p]=p-34;var m=[];function g(e,t,n){for(var r=e<0?-1:1,a=e*r,s=0,i=1,o=0,l=1,u=0,c=0,h=Math.floor(a);ut&&(u>t?(c=l,o=s):(c=u,o=i)),!n)return[0,r*o,c];var f=Math.floor(r*o/c);return[f,r*o-f*c,c]}function y(e,t,n){if(e>2958465||e<0)return null;var r=0|e,a=Math.floor(86400*(e-r)),s=0,i=[],o={D:r,T:a,u:86400*(e-r)-a,y:0,m:0,d:0,H:0,M:0,S:0,q:0};if(Math.abs(o.u)<1e-6&&(o.u=0),t&&t.date1904&&(r+=1462),o.u>.9999&&(o.u=0,86400==++a&&(o.T=a=0,++r,++o.D)),60===r)i=n?[1317,10,29]:[1900,2,29],s=3;else if(0===r)i=n?[1317,8,29]:[1900,1,0],s=6;else{r>60&&--r;var l=new Date(1900,0,1);l.setDate(l.getDate()+r-1),i=[l.getFullYear(),l.getMonth()+1,l.getDate()],s=l.getDay(),r<60&&(s=(s+6)%7),n&&(s=function(e,t){t[0]-=581;var n=e.getDay();return e<60&&(n=(n+6)%7),n}(l,i))}return o.y=i[0],o.m=i[1],o.d=i[2],o.S=a%60,a=Math.floor(a/60),o.M=a%60,a=Math.floor(a/60),o.H=a,o.q=s,o}m[5]=m[63]='"$"#,##0_);\\("$"#,##0\\)',m[6]=m[64]='"$"#,##0_);[Red]\\("$"#,##0\\)',m[7]=m[65]='"$"#,##0.00_);\\("$"#,##0.00\\)',m[8]=m[66]='"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',m[41]='_(* #,##0_);_(* \\(#,##0\\);_(* "-"_);_(@_)',m[42]='_("$"* #,##0_);_("$"* \\(#,##0\\);_("$"* "-"_);_(@_)',m[43]='_(* #,##0.00_);_(* \\(#,##0.00\\);_(* "-"??_);_(@_)',m[44]='_("$"* #,##0.00_);_("$"* \\(#,##0.00\\);_("$"* "-"??_);_(@_)',e.parse_date_code=y;var b=new Date(1899,11,31,0,0,0),v=b.getTime(),w=new Date(1900,2,1,0,0,0);function _(e,t){var n=e.getTime();return t?n-=1262304e5:e>=w&&(n+=864e5),(n-(v+6e4*(e.getTimezoneOffset()-b.getTimezoneOffset())))/864e5}e._general_int=function(e){return e.toString(10)};var x=function(){var e=/(?:\.0*|(\.\d*[1-9])0+)$/;function t(t){return-1==t.indexOf(".")?t:t.replace(e,"$1")}var n=/(?:\.0*|(\.\d*[1-9])0+)[Ee]/,r=/(E[+-])(\d)$/;return function(e){var a,s=Math.floor(Math.log(Math.abs(e))*Math.LOG10E);return a=s>=-4&&s<=-1?e.toPrecision(10+s):Math.abs(s)<=9?function(e){var n=e<0?12:11,r=t(e.toFixed(12));return r.length<=n||(r=e.toPrecision(10)).length<=n?r:e.toExponential(5)}(e):10===s?e.toFixed(10).substr(0,12):function(e){var n=t(e.toFixed(11));return n.length>(e<0?12:11)||"0"===n||"-0"===n?e.toPrecision(6):n}(e),t(function(e){return-1==e.indexOf("E")?e:e.replace(n,"$1E").replace(r,"$10$2")}(a.toUpperCase()))}}();function k(e,t){switch(typeof e){case"string":return e;case"boolean":return e?"TRUE":"FALSE";case"number":return(0|e)===e?e.toString(10):x(e);case"undefined":return"";case"object":if(null==e)return"";if(e instanceof Date)return O(14,_(e,t&&t.date1904),t)}throw new Error("unsupported value in General format: "+e)}function E(e,t,n,a){var s,i="",o=0,l=0,h=n.y,f=0;switch(e){case 98:h=n.y+543;case 121:switch(t.length){case 1:case 2:s=h%100,f=2;break;default:s=h%1e4,f=4}break;case 109:switch(t.length){case 1:case 2:s=n.m,f=t.length;break;case 3:return c[n.m-1][1];case 5:return c[n.m-1][0];default:return c[n.m-1][2]}break;case 100:switch(t.length){case 1:case 2:s=n.d,f=t.length;break;case 3:return u[n.q][0];default:return u[n.q][1]}break;case 104:switch(t.length){case 1:case 2:s=1+(n.H+11)%12,f=t.length;break;default:throw"bad hour format: "+t}break;case 72:switch(t.length){case 1:case 2:s=n.H,f=t.length;break;default:throw"bad hour format: "+t}break;case 77:switch(t.length){case 1:case 2:s=n.M,f=t.length;break;default:throw"bad minute format: "+t}break;case 115:if("s"!=t&&"ss"!=t&&".0"!=t&&".00"!=t&&".000"!=t)throw"bad second format: "+t;return 0!==n.u||"s"!=t&&"ss"!=t?(l=a>=2?3===a?1e3:100:1===a?10:1,(o=Math.round(l*(n.S+n.u)))>=60*l&&(o=0),"s"===t?0===o?"0":""+o/l:(i=r(o,2+a),"ss"===t?i.substr(0,2):"."+i.substr(2,t.length-1))):r(n.S,t.length);case 90:switch(t){case"[h]":case"[hh]":s=24*n.D+n.H;break;case"[m]":case"[mm]":s=60*(24*n.D+n.H)+n.M;break;case"[s]":case"[ss]":s=60*(60*(24*n.D+n.H)+n.M)+Math.round(n.S+n.u);break;default:throw"bad abstime format: "+t}f=3===t.length?1:2;break;case 101:s=h,f=1}return f>0?r(s,f):""}function C(e){if(e.length<=3)return e;for(var t=e.length%3,n=e.substr(0,t);t!=e.length;t+=3)n+=(n.length>0?",":"")+e.substr(t,3);return n}e._general_num=x,e._general=k;var S=function(){var e=/%/g;function i(e,t){var n,r=e.indexOf("E")-e.indexOf(".")-1;if(e.match(/^#+0.0E\+0$/)){if(0==t)return"0.0E+0";if(t<0)return"-"+i(e,-t);var a=e.indexOf(".");-1===a&&(a=e.indexOf("E"));var s=Math.floor(Math.log(t)*Math.LOG10E)%a;if(s<0&&(s+=a),-1===(n=(t/Math.pow(10,s)).toPrecision(r+1+(a+s)%a)).indexOf("e")){var o=Math.floor(Math.log(t)*Math.LOG10E);for(-1===n.indexOf(".")?n=n.charAt(0)+"."+n.substr(1)+"E+"+(o-n.length+s):n+="E+"+(o-s);"0."===n.substr(0,2);)n=(n=n.charAt(0)+n.substr(2,a)+"."+n.substr(2+a)).replace(/^0+([1-9])/,"$1").replace(/^0+\./,"0.");n=n.replace(/\+-/,"-")}n=n.replace(/^([+-]?)(\d*)\.(\d*)[Ee]/,(function(e,t,n,r){return t+n+r.substr(0,(a+s)%a)+"."+r.substr(s)+"E"}))}else n=t.toExponential(r);return e.match(/E\+00$/)&&n.match(/e[+-]\d$/)&&(n=n.substr(0,n.length-1)+"0"+n.charAt(n.length-1)),e.match(/E\-/)&&n.match(/e\+/)&&(n=n.replace(/e\+/,"e")),n.replace("e","E")}var l=/# (\?+)( ?)\/( ?)(\d+)/,u=/^#*0*\.([0#]+)/,c=/\).*[0#]/,h=/\(###\) ###\\?-####/;function f(e){for(var t,n="",r=0;r!=e.length;++r)switch(t=e.charCodeAt(r)){case 35:break;case 63:n+=" ";break;case 48:n+="0";break;default:n+=String.fromCharCode(t)}return n}function d(e,t){var n=Math.pow(10,t);return""+Math.round(e*n)/n}function p(e,t){var n=e-Math.floor(e),r=Math.pow(10,t);return t<(""+Math.round(n*r)).length?0:Math.round(n*r)}function m(y,b,v){if(40===y.charCodeAt(0)&&!b.match(c)){var w=b.replace(/\( */,"").replace(/ \)/,"").replace(/\)/,"");return v>=0?m("n",w,v):"("+m("n",w,-v)+")"}if(44===b.charCodeAt(b.length-1))return function(e,t,n){for(var r=t.length-1;44===t.charCodeAt(r-1);)--r;return S(e,t.substr(0,r),n/Math.pow(10,3*(t.length-r)))}(y,b,v);if(-1!==b.indexOf("%"))return function(t,r,a){var s=r.replace(e,""),i=r.length-s.length;return S(t,s,a*Math.pow(10,2*i))+n("%",i)}(y,b,v);if(-1!==b.indexOf("E"))return i(b,v);if(36===b.charCodeAt(0))return"$"+m(y,b.substr(" "==b.charAt(1)?2:1),v);var _,x,k,E,N=Math.abs(v),I=v<0?"-":"";if(b.match(/^00+$/))return I+o(N,b.length);if(b.match(/^[#?]+$/))return"0"===(_=o(v,0))&&(_=""),_.length>b.length?_:f(b.substr(0,b.length-_.length))+_;if(x=b.match(l))return function(e,t,s){var i=parseInt(e[4],10),o=Math.round(t*i),l=Math.floor(o/i),u=o-l*i,c=i;return s+(0===l?"":""+l)+" "+(0===u?n(" ",e[1].length+1+e[4].length):a(u,e[1].length)+e[2]+"/"+e[3]+r(c,e[4].length))}(x,N,I);if(b.match(/^#+0+$/))return I+o(N,b.length-b.indexOf("0"));if(x=b.match(u))return _=d(v,x[1].length).replace(/^([^\.]+)$/,"$1."+f(x[1])).replace(/\.$/,"."+f(x[1])).replace(/\.(\d*)$/,(function(e,t){return"."+t+n("0",f(x[1]).length-t.length)})),-1!==b.indexOf("0.")?_:_.replace(/^0\./,".");if(b=b.replace(/^#+([0.])/,"$1"),x=b.match(/^(0*)\.(#*)$/))return I+d(N,x[2].length).replace(/\.(\d*[1-9])0*$/,".$1").replace(/^(-?\d*)$/,"$1.").replace(/^0\./,x[1].length?"0.":".");if(x=b.match(/^#{1,3},##0(\.?)$/))return I+C(o(N,0));if(x=b.match(/^#,##0\.([#0]*0)$/))return v<0?"-"+m(y,b,-v):C(""+(Math.floor(v)+function(e,t){return t<(""+Math.round((e-Math.floor(e))*Math.pow(10,t))).length?1:0}(v,x[1].length)))+"."+r(p(v,x[1].length),x[1].length);if(x=b.match(/^#,#*,#0/))return m(y,b.replace(/^#,#*,/,""),v);if(x=b.match(/^([0#]+)(\\?-([0#]+))+$/))return _=t(m(y,b.replace(/[\\-]/g,""),v)),k=0,t(t(b.replace(/\\/g,"")).replace(/[0#]/g,(function(e){return k<_.length?_.charAt(k++):"0"===e?"0":""})));if(b.match(h))return"("+(_=m(y,"##########",v)).substr(0,3)+") "+_.substr(3,3)+"-"+_.substr(6);var A="";if(x=b.match(/^([#0?]+)( ?)\/( ?)([#0?]+)/))return k=Math.min(x[4].length,7),E=g(N,Math.pow(10,k)-1,!1),_=""+I," "==(A=S("n",x[1],E[1])).charAt(A.length-1)&&(A=A.substr(0,A.length-1)+"0"),_+=A+x[2]+"/"+x[3],(A=s(E[2],k)).length-2147483648?""+(e>=0?0|e:e-1|0):""+Math.floor(e)}(v)).replace(/^\d,\d{3}$/,"0$&").replace(/^\d*$/,(function(e){return"00,"+(e.length<3?r(0,3-e.length):"")+e}))+"."+r(k,x[1].length);switch(b){case"###,##0.00":return m(y,"#,##0.00",v);case"###,###":case"##,###":case"#,###":var F=C(o(N,0));return"0"!==F?I+F:"";case"###,###.00":return m(y,"###,##0.00",v).replace(/^0\./,".");case"#,###.00":return m(y,"#,##0.00",v).replace(/^0\./,".")}throw new Error("unsupported format |"+b+"|")}function y(e,t){var n,r=e.indexOf("E")-e.indexOf(".")-1;if(e.match(/^#+0.0E\+0$/)){if(0==t)return"0.0E+0";if(t<0)return"-"+y(e,-t);var a=e.indexOf(".");-1===a&&(a=e.indexOf("E"));var s=Math.floor(Math.log(t)*Math.LOG10E)%a;if(s<0&&(s+=a),!(n=(t/Math.pow(10,s)).toPrecision(r+1+(a+s)%a)).match(/[Ee]/)){var i=Math.floor(Math.log(t)*Math.LOG10E);-1===n.indexOf(".")?n=n.charAt(0)+"."+n.substr(1)+"E+"+(i-n.length+s):n+="E+"+(i-s),n=n.replace(/\+-/,"-")}n=n.replace(/^([+-]?)(\d*)\.(\d*)[Ee]/,(function(e,t,n,r){return t+n+r.substr(0,(a+s)%a)+"."+r.substr(s)+"E"}))}else n=t.toExponential(r);return e.match(/E\+00$/)&&n.match(/e[+-]\d$/)&&(n=n.substr(0,n.length-1)+"0"+n.charAt(n.length-1)),e.match(/E\-/)&&n.match(/e\+/)&&(n=n.replace(/e\+/,"e")),n.replace("e","E")}function b(i,o,d){if(40===i.charCodeAt(0)&&!o.match(c)){var p=o.replace(/\( */,"").replace(/ \)/,"").replace(/\)/,"");return d>=0?b("n",p,d):"("+b("n",p,-d)+")"}if(44===o.charCodeAt(o.length-1))return function(e,t,n){for(var r=t.length-1;44===t.charCodeAt(r-1);)--r;return S(e,t.substr(0,r),n/Math.pow(10,3*(t.length-r)))}(i,o,d);if(-1!==o.indexOf("%"))return function(t,r,a){var s=r.replace(e,""),i=r.length-s.length;return S(t,s,a*Math.pow(10,2*i))+n("%",i)}(i,o,d);if(-1!==o.indexOf("E"))return y(o,d);if(36===o.charCodeAt(0))return"$"+b(i,o.substr(" "==o.charAt(1)?2:1),d);var m,v,w,_,x=Math.abs(d),k=d<0?"-":"";if(o.match(/^00+$/))return k+r(x,o.length);if(o.match(/^[#?]+$/))return m=""+d,0===d&&(m=""),m.length>o.length?m:f(o.substr(0,o.length-m.length))+m;if(v=o.match(l))return function(e,t,r){return r+(0===t?"":""+t)+n(" ",e[1].length+2+e[4].length)}(v,x,k);if(o.match(/^#+0+$/))return k+r(x,o.length-o.indexOf("0"));if(v=o.match(u))return m=(m=(""+d).replace(/^([^\.]+)$/,"$1."+f(v[1])).replace(/\.$/,"."+f(v[1]))).replace(/\.(\d*)$/,(function(e,t){return"."+t+n("0",f(v[1]).length-t.length)})),-1!==o.indexOf("0.")?m:m.replace(/^0\./,".");if(o=o.replace(/^#+([0.])/,"$1"),v=o.match(/^(0*)\.(#*)$/))return k+(""+x).replace(/\.(\d*[1-9])0*$/,".$1").replace(/^(-?\d*)$/,"$1.").replace(/^0\./,v[1].length?"0.":".");if(v=o.match(/^#{1,3},##0(\.?)$/))return k+C(""+x);if(v=o.match(/^#,##0\.([#0]*0)$/))return d<0?"-"+b(i,o,-d):C(""+d)+"."+n("0",v[1].length);if(v=o.match(/^#,#*,#0/))return b(i,o.replace(/^#,#*,/,""),d);if(v=o.match(/^([0#]+)(\\?-([0#]+))+$/))return m=t(b(i,o.replace(/[\\-]/g,""),d)),w=0,t(t(o.replace(/\\/g,"")).replace(/[0#]/g,(function(e){return w-1||"\\"==n&&"-"==e.charAt(t+1)&&"0#".indexOf(e.charAt(t+2))>-1););break;case"?":for(;e.charAt(++t)===n;);break;case"*":++t," "!=e.charAt(t)&&"*"!=e.charAt(t)||++t;break;case"(":case")":++t;break;case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":for(;t-1;);break;case" ":default:++t}return!1}function D(e,t,n,r){for(var a,s,i,o=[],u="",c=0,h="",f="t",d="H";c=12?"P":"A"),g.t="T",d="h",c+=3):"AM/PM"===e.substr(c,5).toUpperCase()?(null!=a&&(g.v=a.H>=12?"PM":"AM"),g.t="T",c+=5,d="h"):"上午/下午"===e.substr(c,5).toUpperCase()?(null!=a&&(g.v=a.H>=12?"下午":"上午"),g.t="T",c+=5,d="h"):(g.t="t",++c),null==a&&"T"===g.t)return"";o[o.length]=g,f=h;break;case"[":for(u=h;"]"!==e.charAt(c++)&&c-1&&(u=(u.match(/\$([^-\[\]]*)/)||[])[1]||"$",A(e)||(o[o.length]={t:"t",v:u}));break;case".":if(null!=a){for(u=h;++c-1;)u+=h;o[o.length]={t:"n",v:u};break;case"?":for(u=h;e.charAt(++c)===h;)u+=h;o[o.length]={t:h,v:u},f=h;break;case"*":++c," "!=e.charAt(c)&&"*"!=e.charAt(c)||++c;break;case"(":case")":o[o.length]={t:1===r?"t":h,v:h},++c;break;case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":for(u=h;c-1;)u+=e.charAt(c);o[o.length]={t:"D",v:u};break;case" ":o[o.length]={t:h,v:h},++c;break;case"$":o[o.length]={t:"t",v:"$"},++c;break;default:if(-1===",$-+/():!^&'~{}<>=€acfijklopqrtuvwxzP".indexOf(h))throw new Error("unrecognized character "+h+" in "+e);o[o.length]={t:"t",v:h},++c}var b,v=0,w=0;for(c=o.length-1,f="t";c>=0;--c)switch(o[c].t){case"h":case"H":o[c].t=d,f="h",v<1&&(v=1);break;case"s":(b=o[c].v.match(/\.0+$/))&&(w=Math.max(w,b[0].length-1)),v<3&&(v=3);case"d":case"y":case"M":case"e":f=o[c].t;break;case"m":"s"===f&&(o[c].t="M",v<2&&(v=2));break;case"X":break;case"Z":v<1&&o[c].v.match(/[Hh]/)&&(v=1),v<2&&o[c].v.match(/[Mm]/)&&(v=2),v<3&&o[c].v.match(/[Ss]/)&&(v=3)}switch(v){case 0:break;case 1:a.u>=.5&&(a.u=0,++a.S),a.S>=60&&(a.S=0,++a.M),a.M>=60&&(a.M=0,++a.H);break;case 2:a.u>=.5&&(a.u=0,++a.S),a.S>=60&&(a.S=0,++a.M)}var _,x="";for(c=0;c0){40==x.charCodeAt(0)?(C=t<0&&45===x.charCodeAt(0)?-t:t,N=S("n",x,C)):(N=S("n",x,C=t<0&&r>1?-t:t),C<0&&o[0]&&"t"==o[0].t&&(N=N.substr(1),o[0].v="-"+o[0].v)),_=N.length-1;var T=o.length;for(c=0;c-1){T=c;break}var F=o.length;if(T===o.length&&-1===N.indexOf("E")){for(c=o.length-1;c>=0;--c)null!=o[c]&&-1!=="n?".indexOf(o[c].t)&&(_>=o[c].v.length-1?(_-=o[c].v.length,o[c].v=N.substr(_+1,o[c].v.length)):_<0?o[c].v="":(o[c].v=N.substr(0,_+1),_=-1),o[c].t="t",F=c);_>=0&&F=0;--c)if(null!=o[c]&&-1!=="n?".indexOf(o[c].t)){for(s=o[c].v.indexOf(".")>-1&&c===T?o[c].v.indexOf(".")-1:o[c].v.length-1,D=o[c].v.substr(s+1);s>=0;--s)_>=0&&("0"===o[c].v.charAt(s)||"#"===o[c].v.charAt(s))&&(D=N.charAt(_--)+D);o[c].v=D,o[c].t="t",F=c}for(_>=0&&F-1&&c===T?o[c].v.indexOf(".")+1:0,D=o[c].v.substr(0,s);s-1&&(C=r>1&&t<0&&c>0&&"-"===o[c-1].v?-t:t,o[c].v=S(o[c].t,o[c].v,C),o[c].t="t");var R="";for(c=0;c!==o.length;++c)null!=o[c]&&(R+=o[c].v);return R}e.is_date=A,e._eval=D;var T=/\[[=<>]/,F=/\[(=|>[=]?|<[>=]?)(-?\d+(?:\.\d*)?)\]/;function R(e,t){if(null==t)return!1;var n=parseFloat(t[2]);switch(t[1]){case"=":if(e==n)return!0;break;case">":if(e>n)return!0;break;case"<":if(e":if(e!=n)return!0;break;case">=":if(e>=n)return!0;break;case"<=":if(e<=n)return!0}return!1}function O(e,t,n){null==n&&(n={});var r="";switch(typeof e){case"string":r="m/d/yy"==e&&n.dateNF?n.dateNF:e;break;case"number":null==(r=14==e&&n.dateNF?n.dateNF:(null!=n.table?n.table:f)[e])&&(r=n.table&&n.table[d[e]]||f[d[e]]),null==r&&(r=m[e]||"General")}if(l(r,0))return k(t,n);t instanceof Date&&(t=_(t,n.date1904));var a=function(e,t){var n=N(e),r=n.length,a=n[r-1].indexOf("@");if(r<4&&a>-1&&--r,n.length>4)throw new Error("cannot find right format for |"+n.join("|")+"|");if("number"!=typeof t)return[4,4===n.length||a>-1?n[n.length-1]:"@"];switch(n.length){case 1:n=a>-1?["General","General","General",n[0]]:[n[0],n[0],n[0],"@"];break;case 2:n=a>-1?[n[0],n[0],n[0],n[1]]:[n[0],n[1],n[0],"@"];break;case 3:n=a>-1?[n[0],n[1],n[0],n[2]]:[n[0],n[1],n[2],"@"]}var s=t>0?n[0]:t<0?n[1]:n[2];if(-1===n[0].indexOf("[")&&-1===n[1].indexOf("["))return[r,s];if(null!=n[0].match(T)||null!=n[1].match(T)){var i=n[0].match(F),o=n[1].match(F);return R(t,i)?[r,n[0]]:R(t,o)?[r,n[1]]:[r,n[null!=i&&null!=o?2:1]]}return[r,s]}(r,t);if(l(a[1]))return k(t,n);if(!0===t)t="TRUE";else if(!1===t)t="FALSE";else if(""===t||null==t)return"";return D(a[1],t,n,a[0])}function M(e,t){if("number"!=typeof t){t=+t||-1;for(var n=0;n<392;++n)if(null!=f[n]){if(f[n]==e){t=n;break}}else t<0&&(t=n);t<0&&(t=391)}return f[t]=e,t}e.load=M,e._table=f,e.get_table=function(){return f},e.load_table=function(e){for(var t=0;392!=t;++t)void 0!==e[t]&&M(e[t],t)},e.init_table=h,e.format=O};D(A);var T,F={"General Number":"General","General Date":A._table[22],"Long Date":"dddd, mmmm dd, yyyy","Medium Date":A._table[15],"Short Date":A._table[14],"Long Time":A._table[19],"Medium Time":A._table[18],"Short Time":A._table[20],Currency:'"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',Fixed:A._table[2],Standard:A._table[4],Percent:A._table[10],Scientific:A._table[11],"Yes/No":'"Yes";"Yes";"No";@',"True/False":'"True";"True";"False";@',"On/Off":'"Yes";"Yes";"No";@'},R={5:'"$"#,##0_);\\("$"#,##0\\)',6:'"$"#,##0_);[Red]\\("$"#,##0\\)',7:'"$"#,##0.00_);\\("$"#,##0.00\\)',8:'"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',23:"General",24:"General",25:"General",26:"General",27:"m/d/yy",28:"m/d/yy",29:"m/d/yy",30:"m/d/yy",31:"m/d/yy",32:"h:mm:ss",33:"h:mm:ss",34:"h:mm:ss",35:"h:mm:ss",36:"m/d/yy",41:'_(* #,##0_);_(* (#,##0);_(* "-"_);_(@_)',42:'_("$"* #,##0_);_("$"* (#,##0);_("$"* "-"_);_(@_)',43:'_(* #,##0.00_);_(* (#,##0.00);_(* "-"??_);_(@_)',44:'_("$"* #,##0.00_);_("$"* (#,##0.00);_("$"* "-"??_);_(@_)',50:"m/d/yy",51:"m/d/yy",52:"m/d/yy",53:"m/d/yy",54:"m/d/yy",55:"m/d/yy",56:"m/d/yy",57:"m/d/yy",58:"m/d/yy",59:"0",60:"0.00",61:"#,##0",62:"#,##0.00",63:'"$"#,##0_);\\("$"#,##0\\)',64:'"$"#,##0_);[Red]\\("$"#,##0\\)',65:'"$"#,##0.00_);\\("$"#,##0.00\\)',66:'"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',67:"0%",68:"0.00%",69:"# ?/?",70:"# ??/??",71:"m/d/yy",72:"m/d/yy",73:"d-mmm-yy",74:"d-mmm",75:"mmm-yy",76:"h:mm",77:"h:mm:ss",78:"m/d/yy h:mm",79:"mm:ss",80:"[h]:mm:ss",81:"mmss.0"},O=/[dD]+|[mM]+|[yYeE]+|[Hh]+|[Ss]+/g;!function(e){e.version="1.2.0";var t=function(){for(var e=0,t=new Array(256),n=0;256!=n;++n)e=1&(e=1&(e=1&(e=1&(e=1&(e=1&(e=1&(e=1&(e=n)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1,t[n]=e;return"undefined"!=typeof Int32Array?new Int32Array(t):t}();e.table=t,e.bstr=function(e,n){for(var r=-1^n,a=e.length-1,s=0;s>>8^t[255&(r^e.charCodeAt(s++))])>>>8^t[255&(r^e.charCodeAt(s++))];return s===a&&(r=r>>>8^t[255&(r^e.charCodeAt(s))]),-1^r},e.buf=function(e,n){if(e.length>1e4)return function(e,n){for(var r=-1^n,a=e.length-7,s=0;s>>8^t[255&(r^e[s++])])>>>8^t[255&(r^e[s++])])>>>8^t[255&(r^e[s++])])>>>8^t[255&(r^e[s++])])>>>8^t[255&(r^e[s++])])>>>8^t[255&(r^e[s++])])>>>8^t[255&(r^e[s++])])>>>8^t[255&(r^e[s++])];for(;s>>8^t[255&(r^e[s++])];return-1^r}(e,n);for(var r=-1^n,a=e.length-3,s=0;s>>8^t[255&(r^e[s++])])>>>8^t[255&(r^e[s++])])>>>8^t[255&(r^e[s++])])>>>8^t[255&(r^e[s++])];for(;s>>8^t[255&(r^e[s++])];return-1^r},e.str=function(e,n){for(var r,a,s=-1^n,i=0,o=e.length;i>>8^t[255&(s^r)]:r<2048?s=(s=s>>>8^t[255&(s^(192|r>>6&31))])>>>8^t[255&(s^(128|63&r))]:r>=55296&&r<57344?(r=64+(1023&r),a=1023&e.charCodeAt(i++),s=(s=(s=(s=s>>>8^t[255&(s^(240|r>>8&7))])>>>8^t[255&(s^(128|r>>2&63))])>>>8^t[255&(s^(128|a>>6&15|(3&r)<<4))])>>>8^t[255&(s^(128|63&a))]):s=(s=(s=s>>>8^t[255&(s^(224|r>>12&15))])>>>8^t[255&(s^(128|r>>6&63))])>>>8^t[255&(s^(128|63&r))];return-1^s}}(T={});var M,B=function(){var e,t={};function r(e){if("/"==e.charAt(e.length-1))return-1===e.slice(0,-1).indexOf("/")?e:r(e.slice(0,-1));var t=e.lastIndexOf("/");return-1===t?e:e.slice(0,t+1)}function a(e){if("/"==e.charAt(e.length-1))return a(e.slice(0,-1));var t=e.lastIndexOf("/");return-1===t?e:e.slice(t+1)}function s(e,t){"string"==typeof t&&(t=new Date(t));var n=t.getHours();n=(n=n<<6|t.getMinutes())<<5|t.getSeconds()>>>1,e.write_shift(2,n);var r=t.getFullYear()-1980;r=(r=r<<4|t.getMonth()+1)<<5|t.getDate(),e.write_shift(2,r)}function i(e){Mt(e,0);for(var t={},n=0;e.l<=e.length-4;){var r=e.read_shift(2),a=e.read_shift(2),s=e.l+a,i={};switch(r){case 21589:1&(n=e.read_shift(1))&&(i.mtime=e.read_shift(4)),a>5&&(2&n&&(i.atime=e.read_shift(4)),4&n&&(i.ctime=e.read_shift(4))),i.mtime&&(i.mt=new Date(1e3*i.mtime))}e.l=s,t[r]=i}return t}function o(){return e||(e=n(2993))}function l(e,t){if(80==e[0]&&75==e[1])return he(e,t);if(e.length<512)throw new Error("CFB file size "+e.length+" < 512");var n,r,a,s,i,o,l=512,d=[],p=e.slice(0,512);Mt(p,0);var m=function(e){if(80==e[e.l]&&75==e[e.l+1])return[0,0];e.chk(E,"Header Signature: "),e.l+=16;var t=e.read_shift(2,"u");return[e.read_shift(2,"u"),t]}(p);switch(n=m[0]){case 3:l=512;break;case 4:l=4096;break;case 0:if(0==m[1])return he(e,t);default:throw new Error("Major Version: Expected 3 or 4 saw "+n)}512!==l&&Mt(p=e.slice(0,l),28);var g=e.slice(0,l);!function(e,t){var n;switch(e.l+=2,n=e.read_shift(2)){case 9:if(3!=t)throw new Error("Sector Shift: Expected 9 saw "+n);break;case 12:if(4!=t)throw new Error("Sector Shift: Expected 12 saw "+n);break;default:throw new Error("Sector Shift: Expected 9 or 12 saw "+n)}e.chk("0600","Mini Sector Shift: "),e.chk("000000000000","Reserved: ")}(p,n);var y=p.read_shift(4,"i");if(3===n&&0!==y)throw new Error("# Directory Sectors: Expected 0 saw "+y);p.l+=4,s=p.read_shift(4,"i"),p.l+=4,p.chk("00100000","Mini Stream Cutoff Size: "),i=p.read_shift(4,"i"),r=p.read_shift(4,"i"),o=p.read_shift(4,"i"),a=p.read_shift(4,"i");for(var b=-1,v=0;v<109&&!((b=p.read_shift(4,"i"))<0);++v)d[v]=b;var w=function(e,t){for(var n=Math.ceil(e.length/t)-1,r=[],a=1;a=a&&(f-=a),!i[f]){l=[];var p=[];for(h=f;h>=0;){p[h]=!0,i[h]=!0,o[o.length]=h,l.push(e[h]);var m=n[Math.floor(4*h/r)];if(r<4+(d=4*h&u))throw new Error("FAT boundary crossed: "+h+" 4 "+r);if(!e[m])break;if(p[h=At(e[m],d)])break}s[f]={nodes:o,data:it([l])}}return s}(w,s,d,l);_[s].name="!Directory",r>0&&i!==k&&(_[i].name="!MiniFAT"),_[d[0]].name="!FAT",_.fat_addrs=d,_.ssz=l;var x=[],C=[],S=[];!function(e,t,n,r,a,s,i,o){for(var l,c=0,d=r.length?2:0,p=t[e].data,m=0,g=0;m0&&c!==k&&(t[c].name="!StreamData")):b.size>=4096?(b.storage="fat",void 0===t[b.start]&&(t[b.start]=h(n,b.start,t.fat_addrs,t.ssz)),t[b.start].name=b.name,b.content=t[b.start].data.slice(0,b.size)):(b.storage="minifat",b.size<0?b.size=0:c!==k&&b.start!==k&&t[c]&&(b.content=u(b,t[c].data,(t[o]||{}).data))),b.content&&Mt(b.content,0),s[l]=b,i.push(b)}}(s,_,w,x,r,{},C,i),function(e,t,n){for(var r=0,a=0,s=0,i=0,o=0,l=n.length,u=[],c=[];r0&&i>=0;)s.push(t.slice(i*v,i*v+v)),a-=v,i=At(n,4*i);return 0===s.length?$t(0):S(s).slice(0,e.size)}function c(e,t,n,r,a){var s=k;if(e===k){if(0!==t)throw new Error("DIFAT chain shorter than expected")}else if(-1!==e){var i=n[e],o=(r>>>2)-1;if(!i)return;for(var l=0;l=0;){a[l]=!0,s[s.length]=l,i.push(e[l]);var c=n[Math.floor(4*l/r)];if(r<4+(u=4*l&o))throw new Error("FAT boundary crossed: "+l+" 4 "+r);if(!e[c])break;l=At(e[c],u)}return{nodes:s,data:it([i])}}function f(e,t){return new Date(1e3*(It(e,t+4)/1e7*Math.pow(2,32)+It(e,t)/1e7-11644473600))}function d(e,t){var n=t||{},r=n.root||"Root Entry";if(e.FullPaths||(e.FullPaths=[]),e.FileIndex||(e.FileIndex=[]),e.FullPaths.length!==e.FileIndex.length)throw new Error("inconsistent CFB structure");0===e.FullPaths.length&&(e.FullPaths[0]=r+"/",e.FileIndex[0]={name:r,type:5}),n.CLSID&&(e.FileIndex[0].clsid=n.CLSID),function(e){var t="Sh33tJ5";if(!B.find(e,"/"+t)){var n=$t(4);n[0]=55,n[1]=n[3]=50,n[2]=54,e.FileIndex.push({name:t,type:2,content:n,size:4,L:69,R:69,C:69}),e.FullPaths.push(e.FullPaths[0]+t),p(e)}}(e)}function p(e,t){d(e);for(var n=!1,s=!1,i=e.FullPaths.length-1;i>=0;--i){var o=e.FileIndex[i];switch(o.type){case 0:s?n=!0:(e.FileIndex.pop(),e.FullPaths.pop());break;case 1:case 2:case 5:s=!0,isNaN(o.R*o.L*o.C)&&(n=!0),o.R>-1&&o.L>-1&&o.R==o.L&&(n=!0);break;default:n=!0}}if(n||t){var l=new Date(1987,1,19),u=0,c=[];for(i=0;i1?1:-1,f.size=0,f.type=5;else if("/"==p.slice(-1)){for(u=i+1;u=c.length?-1:u,u=i+1;u=c.length?-1:u,f.type=1}else r(e.FullPaths[i+1]||"")==r(p)&&(f.R=i+1),f.type=2}}}function m(e,t){var n=t||{};if(p(e),"zip"==n.fileType)return function(e,t){var n=t||{},r=[],a=[],i=$t(1),o=n.compression?8:0,l=0,u=0,c=0,h=0,f=e.FullPaths[0],d=f,p=e.FileIndex[0],m=[],g=0;for(l=1;l0&&(s<4096?t+=s+63>>6:n+=s+511>>9)}}for(var i=e.FullPaths.length+3>>2,o=t+127>>7,l=(t+7>>3)+n+i+o,u=l+127>>7,c=u<=109?0:Math.ceil((u-109)/127);l+u+c+127>>7>u;)c=++u<=109?0:Math.ceil((u-109)/127);var h=[1,c,u,o,i,n,t,0];return e.FileIndex[0].size=t<<6,h[7]=(e.FileIndex[0].start=h[0]+h[1]+h[2]+h[3]+h[4]+h[5])+(h[6]+7>>3),h}(e),a=$t(r[7]<<9),i=0,o=0;for(i=0;i<8;++i)a.write_shift(1,C[i]);for(i=0;i<8;++i)a.write_shift(2,0);for(a.write_shift(2,62),a.write_shift(2,3),a.write_shift(2,65534),a.write_shift(2,9),a.write_shift(2,6),i=0;i<3;++i)a.write_shift(2,0);for(a.write_shift(4,0),a.write_shift(4,r[2]),a.write_shift(4,r[0]+r[1]+r[2]+r[3]-1),a.write_shift(4,0),a.write_shift(4,4096),a.write_shift(4,r[3]?r[0]+r[1]+r[2]-1:k),a.write_shift(4,r[3]),a.write_shift(-4,r[1]?r[0]-1:k),a.write_shift(4,r[1]),i=0;i<109;++i)a.write_shift(-4,i>9)));for(l(r[6]+7>>3);511&a.l;)a.write_shift(-4,D.ENDOFCHAIN);for(o=i=0,u=0;u=4096||(h.start=o,l(c+63>>6)));for(;511&a.l;)a.write_shift(-4,D.ENDOFCHAIN);for(i=0;i=4096){for(a.l=h.start+1<<9,u=0;u0&&h.size<4096){for(u=0;u>16|M>>8|M));function V(e,t){var n=W[255&e];return t<=8?n>>>8-t:(n=n<<8|W[e>>8&255],t<=16?n>>>16-t:(n=n<<8|W[e>>16&255])>>>24-t)}function j(e,t){var n=7&t,r=t>>>3;return(e[r]|(n<=6?0:e[r+1]<<8))>>>n&3}function H(e,t){var n=7&t,r=t>>>3;return(e[r]|(n<=5?0:e[r+1]<<8))>>>n&7}function G(e,t){var n=7&t,r=t>>>3;return(e[r]|(n<=3?0:e[r+1]<<8))>>>n&31}function X(e,t){var n=7&t,r=t>>>3;return(e[r]|(n<=1?0:e[r+1]<<8))>>>n&127}function K(e,t,n){var r=7&t,a=t>>>3,s=(1<>>r;return n<8-r?i&s:(i|=e[a+1]<<8-r,n<16-r?i&s:(i|=e[a+2]<<16-r,n<24-r?i&s:(i|=e[a+3]<<24-r)&s))}function q(e,t){var n=e.length,r=2*n>t?2*n:t+5,a=0;if(n>=t)return e;if(y){var s=_(r);if(e.copy)e.copy(s);else for(;a0;)t[t.l++]=e[n++]}return t.l},function(e){var t=$t(50+Math.floor(1.1*e.length)),n=J(e,t);return t.slice(0,n)});function Q(e,t,n){var r=1,a=0,s=0,i=0,o=0,l=e.length,u=z?new Uint16Array(32):Y(32);for(s=0;s<32;++s)u[s]=0;for(s=l;s>r-h,i=(1<=0;--i)t[o|i<>>3;return(e[r]|(n<=4?0:e[r+1]<<8))>>>n&15}(e,t+=5)+4;t+=4;for(var s=0,i=z?new Uint8Array(19):Y(19),o=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],l=1,u=z?new Uint8Array(8):Y(8),c=z?new Uint8Array(8):Y(8),h=i.length,f=0;f>8-p;for(var m=(1<<7-p)-1;m>=0;--m)se[d|m<>>=3){case 16:for(s=3+j(e,t),t+=2,d=g[g.length-1];s-- >0;)g.push(d);break;case 17:for(s=3+H(e,t),t+=3;s-- >0;)g.push(0);break;case 18:for(s=11+X(e,t),t+=7;s-- >0;)g.push(0);break;default:g.push(d),l>>0,o=0,l=0;0==(1&r);)if(r=H(e,n),n+=3,r>>>1!=0)for(r>>>1==1?(o=9,l=5):(n=le(e,n),o=ie,l=oe),!t&&i>>1==1?ee[u]:re[u];if(n+=15&c,0==((c>>>=4)>>>8&255))a[s++]=c;else{if(256==c)break;var h=(c-=257)<8?0:c-4>>2;h>5&&(h=0);var f=s+P[c];h>0&&(f+=K(e,n,h),n+=h),u=K(e,n,l),n+=15&(c=r>>>1==1?te[u]:ae[u]);var d=(c>>>=4)<4?0:c-2>>1,p=L[c];for(d>0&&(p+=K(e,n,d),n+=d),!t&&i>>3]|e[1+(n>>>3)]<<8;if(n+=32,!t&&i>>3,(n>>>3)+m),s+=m,n+=8*m;else for(;m-- >0;)a[s++]=e[n>>>3],n+=8}return[t?a:a.slice(0,s),n+7>>>3]}(e.slice(e.l||0),t);return e.l+=n[1],n[0]}function ce(e,t){if(!e)throw new Error(t);"undefined"!=typeof console&&console.error(t)}function he(e,t){var n=e;Mt(n,0);var r={FileIndex:[],FullPaths:[]};d(r,{root:t.root});for(var a=n.length-4;(80!=n[a]||75!=n[a+1]||5!=n[a+2]||6!=n[a+3])&&a>=0;)--a;n.l=a+4,n.l+=4;var s=n.read_shift(2);n.l+=6;var o=n.read_shift(4);for(n.l=o,a=0;a>>=5);n>>>=4,r.setMilliseconds(0),r.setFullYear(n+1980),r.setMonth(s-1),r.setDate(a);var i=31&t,o=63&(t>>>=5);return t>>>=6,r.setHours(t),r.setMinutes(o),r.setSeconds(i<<1),r}(e);if(8257&s)throw new Error("Unsupported ZIP encryption");for(var u=e.read_shift(4),c=e.read_shift(4),h=e.read_shift(4),f=e.read_shift(2),d=e.read_shift(2),p="",m=0;m3&&(r=!0),a[s].slice(a[s].length-1)){case"Y":throw new Error("Unsupported ISO Duration Field: "+a[s].slice(a[s].length-1));case"D":n*=24;case"H":n*=60;case"M":if(!r)throw new Error("Unsupported ISO Duration Field: M");n*=60}t+=n*parseInt(a[s],10)}return t}var J=new Date("2017-02-19T19:06:09.000Z");isNaN(J.getFullYear())&&(J=new Date("2/19/17"));var Z=2017==J.getFullYear();function Q(e,t){var n=new Date(e);if(Z)return t>0?n.setTime(n.getTime()+60*n.getTimezoneOffset()*1e3):t<0&&n.setTime(n.getTime()-60*n.getTimezoneOffset()*1e3),n;if(e instanceof Date)return e;if(1917==J.getFullYear()&&!isNaN(n.getFullYear())){var r=n.getFullYear();return e.indexOf(""+r)>-1||n.setFullYear(n.getFullYear()+100),n}var a=e.match(/\d+/g)||["2017","2","19","0","0","0"],s=new Date(+a[0],+a[1]-1,+a[2],+a[3]||0,+a[4]||0,+a[5]||0);return e.indexOf("Z")>-1&&(s=new Date(s.getTime()-60*s.getTimezoneOffset()*1e3)),s}function ee(e){for(var t="",n=0;n!=e.length;++n)t+=String.fromCharCode(e[n]);return t}function te(e){if("undefined"!=typeof JSON&&!Array.isArray(e))return JSON.parse(JSON.stringify(e));if("object"!=typeof e||null==e)return e;if(e instanceof Date)return new Date(e.getTime());var t={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=te(e[n]));return t}function ne(e,t){for(var n="";n.length8099?n:(a>0||s>1)&&101!=r||e.toLowerCase().match(/jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec/)?t:e.match(/[^-0-9:,\/\\]/)?n:t}var se,ie=5=="abacaba".split(/(:?b)/i).length;function oe(e){return e?e.data?f(e.data):e.asNodeBuffer&&y?f(e.asNodeBuffer().toString("binary")):e.asBinary?f(e.asBinary()):e._data&&e._data.getContent?f(ee(Array.prototype.slice.call(e._data.getContent(),0))):e.content&&e.type?f(ee(e.content)):null:null}function le(e,t){for(var n=e.FullPaths||z(e.files),r=t.toLowerCase(),a=r.replace(/\//g,"\\"),s=0;s\/]+)\s*=\s*((?:")([^"]*)(?:")|(?:')([^']*)(?:')|([^'">\s]+))/g,ye=/<[\/\?]?[a-zA-Z0-9:_-]+(?:\s+[^"\s?>\/]+\s*=\s*(?:"[^"]*"|'[^']*'|[^'">\s=]+))*\s?[\/\?]?>/gm;me.match(ye)||(ye=/<[^>]*>/g);var be=/<\w*:/,ve=/<(\/?)\w+:/;function we(e,t,n){for(var r={},a=0,s=0;a!==e.length&&32!==(s=e.charCodeAt(a))&&10!==s&&13!==s;++a);if(t||(r[0]=e.slice(0,a)),a===e.length)return r;var i=e.match(ge),o=0,l="",u=0,c="",h="",f=1;if(i)for(u=0;u!=i.length;++u){for(h=i[u],s=0;s!=h.length&&61!==h.charCodeAt(s);++s);for(c=h.slice(0,s).trim();32==h.charCodeAt(s+1);)++s;for(f=34==(a=h.charCodeAt(s+1))||39==a?1:0,l=h.slice(s+1+f,h.length-f),o=0;o!=c.length&&58!==c.charCodeAt(o);++o);if(o===c.length)c.indexOf("_")>0&&(c=c.slice(0,c.indexOf("_"))),r[c]=l,n||(r[c.toLowerCase()]=l);else{var d=(5===o&&"xmlns"===c.slice(0,5)?"xmlns":"")+c.slice(o+1);if(r[d]&&"ext"==c.slice(o-3,o))continue;r[d]=l,n||(r[d.toLowerCase()]=l)}}return r}function _e(e){return e.replace(ve,"<$1")}var xe,ke,Ee={""":'"',"'":"'",">":">","<":"<","&":"&"},Ce=U(Ee),Se=(xe=/&(?:quot|apos|gt|lt|amp|#x?([\da-fA-F]+));/gi,ke=/_x([\da-fA-F]{4})_/gi,function e(t){var n=t+"",r=n.indexOf("-1?16:10))||e})).replace(ke,(function(e,t){return String.fromCharCode(parseInt(t,16))}));var a=n.indexOf("]]>");return e(n.slice(0,r))+n.slice(r+9,a)+e(n.slice(a+3))}),Ne=/[&<>'"]/g,Ie=/[\u0000-\u0008\u000b-\u001f]/g;function Ae(e){return(e+"").replace(Ne,(function(e){return Ce[e]})).replace(Ie,(function(e){return"_x"+("000"+e.charCodeAt(0).toString(16)).slice(-4)+"_"}))}function De(e){return Ae(e).replace(/ /g,"_x0020_")}var Te=/[\u0000-\u001f]/g;function Fe(e){return(e+"").replace(Ne,(function(e){return Ce[e]})).replace(/\n/g,"
").replace(Te,(function(e){return"&#x"+("000"+e.charCodeAt(0).toString(16)).slice(-4)+";"}))}var Re=function(){var e=/&#(\d+);/g;function t(e,t){return String.fromCharCode(parseInt(t,10))}return function(n){return n.replace(e,t)}}();function Oe(e){switch(e){case 1:case!0:case"1":case"true":case"TRUE":return!0;default:return!1}}var Me=function(e){for(var t="",n=0,r=0,a=0,s=0,i=0,o=0;n191&&r<224?(i=(31&r)<<6,i|=63&a,t+=String.fromCharCode(i)):(s=e.charCodeAt(n++),r<240?t+=String.fromCharCode((15&r)<<12|(63&a)<<6|63&s):(o=((7&r)<<18|(63&a)<<12|(63&s)<<6|63&(i=e.charCodeAt(n++)))-65536,t+=String.fromCharCode(55296+(o>>>10&1023)),t+=String.fromCharCode(56320+(1023&o)))));return t},Be=function(e){for(var t=[],n=0,r=0,a=0;n>6))),t.push(String.fromCharCode(128+(63&r)));break;case r>=55296&&r<57344:r-=55296,a=e.charCodeAt(n++)-56320+(r<<10),t.push(String.fromCharCode(240+(a>>18&7))),t.push(String.fromCharCode(144+(a>>12&63))),t.push(String.fromCharCode(128+(a>>6&63))),t.push(String.fromCharCode(128+(63&a)));break;default:t.push(String.fromCharCode(224+(r>>12))),t.push(String.fromCharCode(128+(r>>6&63))),t.push(String.fromCharCode(128+(63&r)))}return t.join("")};if(y){var $e=function(e){var t,n,r,a=Buffer.alloc(2*e.length),s=1,i=0,o=0;for(n=0;n>>10&1023),t=56320+(1023&t)),0!==o&&(a[i++]=255&o,a[i++]=o>>>8,o=0),a[i++]=t%256,a[i++]=t>>>8;return a.slice(0,i).toString("ucs2")},Pe="foo bar baz☃🍣";Me(Pe)==$e(Pe)&&(Me=$e);var Le=function(e){return b(e,"binary").toString("utf8")};Me(Pe)==Le(Pe)&&(Me=Le),Be=function(e){return b(e,"utf8").toString("binary")}}var ze,We,Ue,Ve=(ze={},function(e,t){var n=e+"|"+(t||"");return ze[n]?ze[n]:ze[n]=new RegExp("<(?:\\w+:)?"+e+'(?: xml:space="preserve")?(?:[^>]*)>([\\s\\S]*?)",t||"")}),je=(We=[["nbsp"," "],["middot","·"],["quot",'"'],["apos","'"],["gt",">"],["lt","<"],["amp","&"]].map((function(e){return[new RegExp("&"+e[0]+";","ig"),e[1]]})),function(e){for(var t=e.replace(/^[\t\n\r ]+/,"").replace(/[\t\n\r ]+$/,"").replace(/>\s+/g,">").replace(/\s+/g,"\n").replace(/<[^>]*>/g,""),n=0;n([\\s\\S]*?)","g")}),Ge=/<\/?(?:vt:)?variant>/g,Xe=/<(?:vt:)([^>]*)>([\s\S]*)"+t+""}function Je(e){return z(e).map((function(t){return" "+t+'="'+e[t]+'"'})).join("")}function Ze(e,t,n){return"<"+e+(null!=n?Je(n):"")+(null!=t?(t.match(qe)?' xml:space="preserve"':"")+">"+t+""}function Qe(e,t){try{return e.toISOString().replace(/\.\d*/,"")}catch(e){if(t)throw e}return""}var et,tt,nt={dc:"http://purl.org/dc/elements/1.1/",dcterms:"http://purl.org/dc/terms/",dcmitype:"http://purl.org/dc/dcmitype/",mx:"http://schemas.microsoft.com/office/mac/excel/2008/main",r:"http://schemas.openxmlformats.org/officeDocument/2006/relationships",sjs:"http://schemas.openxmlformats.org/package/2006/sheetjs/core-properties",vt:"http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes",xsi:"http://www.w3.org/2001/XMLSchema-instance",xsd:"http://www.w3.org/2001/XMLSchema",main:["http://schemas.openxmlformats.org/spreadsheetml/2006/main","http://purl.oclc.org/ooxml/spreadsheetml/main","http://schemas.microsoft.com/office/excel/2006/main","http://schemas.microsoft.com/office/excel/2006/2"]},rt="urn:schemas-microsoft-com:office:office",at="urn:schemas-microsoft-com:office:excel",st="urn:schemas-microsoft-com:office:spreadsheet",it=function(e){for(var t=[],n=0;n0?ft(e,t+4,t+4+n-1):""},mt=pt,gt=function(e,t){var n=It(e,t);return n>0?ft(e,t+4,t+4+n-1):""},yt=gt,bt=function(e,t){var n=2*It(e,t);return n>0?ft(e,t+4,t+4+n-1):""},vt=bt;et=tt=function(e,t){var n=It(e,t);return n>0?lt(e,t+4,t+4+n):""};var wt,_t,xt=function(e,t){var n=It(e,t);return n>0?ft(e,t+4,t+4+n):""},kt=xt;wt=_t=function(e,t){return function(e,t){for(var n=1-2*(e[t+7]>>>7),r=((127&e[t+7])<<4)+(e[t+6]>>>4&15),a=15&e[t+6],s=5;s>=0;--s)a=256*a+e[t+s];return 2047==r?0==a?n*(1/0):NaN:(0==r?r=-1022:(r-=1023,a+=Math.pow(2,52)),n*Math.pow(2,r-52)*a)}(e,t)};var Et=function(e){return Array.isArray(e)};y&&(lt=function(e,t,n){return Buffer.isBuffer(e)?e.toString("utf16le",t,n).replace(N,""):ut(e,t,n)},ct=function(e,t,n){return Buffer.isBuffer(e)?e.toString("hex",t,t+n):ht(e,t,n)},pt=function(e,t){if(!Buffer.isBuffer(e))return mt(e,t);var n=e.readUInt32LE(t);return n>0?e.toString("utf8",t+4,t+4+n-1):""},gt=function(e,t){if(!Buffer.isBuffer(e))return yt(e,t);var n=e.readUInt32LE(t);return n>0?e.toString("utf8",t+4,t+4+n-1):""},bt=function(e,t){if(!Buffer.isBuffer(e))return vt(e,t);var n=2*e.readUInt32LE(t);return e.toString("utf16le",t+4,t+4+n-1)},et=function(e,t){if(!Buffer.isBuffer(e))return tt(e,t);var n=e.readUInt32LE(t);return e.toString("utf16le",t+4,t+4+n)},xt=function(e,t){if(!Buffer.isBuffer(e))return kt(e,t);var n=e.readUInt32LE(t);return e.toString("utf8",t+4,t+4+n)},ft=function(e,t,n){return Buffer.isBuffer(e)?e.toString("utf8",t,n):dt(e,t,n)},it=function(e){return e[0].length>0&&Buffer.isBuffer(e[0][0])?Buffer.concat(e[0]):ot(e)},S=function(e){return Buffer.isBuffer(e[0])?Buffer.concat(e):[].concat.apply([],e)},wt=function(e,t){return Buffer.isBuffer(e)?e.readDoubleLE(t):_t(e,t)},Et=function(e){return Buffer.isBuffer(e)||Array.isArray(e)}),"undefined"!=typeof cptable&&(lt=function(e,t,n){return cptable.utils.decode(1200,e.slice(t,n)).replace(N,"")},ft=function(e,t,n){return cptable.utils.decode(65001,e.slice(t,n))},pt=function(e,t){var n=It(e,t);return n>0?cptable.utils.decode(a,e.slice(t+4,t+4+n-1)):""},gt=function(e,t){var n=It(e,t);return n>0?cptable.utils.decode(r,e.slice(t+4,t+4+n-1)):""},bt=function(e,t){var n=2*It(e,t);return n>0?cptable.utils.decode(1200,e.slice(t+4,t+4+n-1)):""},et=function(e,t){var n=It(e,t);return n>0?cptable.utils.decode(1200,e.slice(t+4,t+4+n)):""},xt=function(e,t){var n=It(e,t);return n>0?cptable.utils.decode(65001,e.slice(t+4,t+4+n)):""});var Ct=function(e,t){return e[t]},St=function(e,t){return 256*e[t+1]+e[t]},Nt=function(e,t){var n=256*e[t+1]+e[t];return n<32768?n:-1*(65535-n+1)},It=function(e,t){return e[t+3]*(1<<24)+(e[t+2]<<16)+(e[t+1]<<8)+e[t]},At=function(e,t){return e[t+3]<<24|e[t+2]<<16|e[t+1]<<8|e[t]},Dt=function(e,t){return e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3]};function Tt(e,t){var n,a,s,i,o,l,u="",c=[];switch(t){case"dbcs":if(l=this.l,y&&Buffer.isBuffer(this))u=this.slice(this.l,this.l+2*e).toString("utf16le");else for(o=0;o0?At:Dt)(this,this.l),this.l+=4,n):(a=It(this,this.l),this.l+=4,a);case 8:case-8:if("f"===t)return a=8==e?wt(this,this.l):wt([this[this.l+7],this[this.l+6],this[this.l+5],this[this.l+4],this[this.l+3],this[this.l+2],this[this.l+1],this[this.l+0]],0),this.l+=8,a;e=8;case 16:u=ct(this,this.l,e)}}return this.l+=e,u}var Ft=function(e,t,n){e[n]=255&t,e[n+1]=t>>>8&255};function Rt(e,t,n){var r=0,s=0;if("dbcs"===n){for(s=0;s!=t.length;++s)Ft(this,t.charCodeAt(s),this.l+2*s);r=2*t.length}else if("sbcs"===n){if("undefined"!=typeof cptable&&874==a)for(s=0;s!=t.length;++s){var i=cptable.utils.encode(a,t.charAt(s));this[this.l+s]=i[0]}else for(t=t.replace(/[^\x00-\x7F]/g,"_"),s=0;s!=t.length;++s)this[this.l+s]=255&t.charCodeAt(s);r=t.length}else{if("hex"===n){for(;s>8}for(;this.l>>=8,this[this.l+1]=255&t;break;case 3:r=3,this[this.l]=255&t,t>>>=8,this[this.l+1]=255&t,t>>>=8,this[this.l+2]=255&t;break;case 4:r=4,function(e,t,n){e[n]=255&t,e[n+1]=t>>>8&255,e[n+2]=t>>>16&255,e[n+3]=t>>>24&255}(this,t,this.l);break;case 8:if(r=8,"f"===n){!function(e,t,n){var r=(t<0||1/t==-1/0?1:0)<<7,a=0,s=0,i=r?-t:t;isFinite(i)?0==i?a=s=0:(a=Math.floor(Math.log(i)/Math.LN2),s=i*Math.pow(2,52-a),a<=-1023&&(!isFinite(s)||s>4|r}(this,t,this.l);break}case 16:break;case-4:r=4,function(e,t,n){e[n]=255&t,e[n+1]=t>>8&255,e[n+2]=t>>16&255,e[n+3]=t>>24&255}(this,t,this.l)}}return this.l+=r,this}function Ot(e,t){var n=ct(this,this.l,e.length>>1);if(n!==e)throw new Error(t+"Expected "+e+" saw "+n);this.l+=e.length>>1}function Mt(e,t){e.l=t,e.read_shift=Tt,e.chk=Ot,e.write_shift=Rt}function Bt(e,t){e.l+=t}function $t(e){var t=w(e);return Mt(t,0),t}function Pt(e,t,n){if(e){var r,a,s;Mt(e,e.l||0);for(var i=e.length,o=0,l=0;e.lr.l&&((r=r.slice(0,r.l)).l=r.length),r.length>0&&e.push(r),r=null)},s=function(e){return r&&e=128?1:0)+1,r>=128&&++a,r>=16384&&++a,r>=2097152&&++a;var i=e.next(a);s<=127?i.write_shift(1,s):(i.write_shift(1,128+(127&s)),i.write_shift(1,s>>7));for(var o=0;4!=o;++o){if(!(r>=128)){i.write_shift(1,r);break}i.write_shift(1,128+(127&r)),r>>=7}r>0&&Et(n)&&e.push(n)}}function Wt(e,t,n){var r=te(e);if(t.s?(r.cRel&&(r.c+=t.s.c),r.rRel&&(r.r+=t.s.r)):(r.cRel&&(r.c+=t.c),r.rRel&&(r.r+=t.r)),!n||n.biff<12){for(;r.c>=256;)r.c-=256;for(;r.r>=65536;)r.r-=65536}return r}function Ut(e,t,n){var r=te(e);return r.s=Wt(r.s,t.s,n),r.e=Wt(r.e,t.s,n),r}function Vt(e,t){if(e.cRel&&e.c<0)for(e=te(e);e.c<0;)e.c+=t>8?16384:256;if(e.rRel&&e.r<0)for(e=te(e);e.r<0;)e.r+=t>8?1048576:t>5?65536:16384;var n=Yt(e);return e.cRel||null==e.cRel||(n=n.replace(/^([A-Z])/,"$$$1")),e.rRel||null==e.rRel||(n=n.replace(/([A-Z]|^)(\d+)$/,"$1$$$2")),n}function jt(e,t){return 0!=e.s.r||e.s.rRel||e.e.r!=(t.biff>=12?1048575:t.biff>=8?65536:16384)||e.e.rRel?0!=e.s.c||e.s.cRel||e.e.c!=(t.biff>=12?16383:255)||e.e.cRel?Vt(e.s,t.biff)+":"+Vt(e.e,t.biff):(e.s.rRel?"":"$")+Gt(e.s.r)+":"+(e.e.rRel?"":"$")+Gt(e.e.r):(e.s.cRel?"":"$")+Kt(e.s.c)+":"+(e.e.cRel?"":"$")+Kt(e.e.c)}function Ht(e){return parseInt(e.replace(/\$(\d+)$/,"$1"),10)-1}function Gt(e){return""+(e+1)}function Xt(e){for(var t=e.replace(/^\$([A-Z])/,"$1"),n=0,r=0;r!==t.length;++r)n=26*n+t.charCodeAt(r)-64;return n-1}function Kt(e){if(e<0)throw new Error("invalid column "+e);var t="";for(++e;e;e=Math.floor((e-1)/26))t=String.fromCharCode((e-1)%26+65)+t;return t}function qt(e){for(var t=0,n=0,r=0;r=48&&a<=57?t=10*t+(a-48):a>=65&&a<=90&&(n=26*n+(a-64))}return{c:n-1,r:t-1}}function Yt(e){for(var t=e.c+1,n="";t;t=(t-1)/26|0)n=String.fromCharCode((t-1)%26+65)+n;return n+(e.r+1)}function Jt(e){var t=e.indexOf(":");return-1==t?{s:qt(e),e:qt(e)}:{s:qt(e.slice(0,t)),e:qt(e.slice(t+1))}}function Zt(e,t){return void 0===t||"number"==typeof t?Zt(e.s,e.e):("string"!=typeof e&&(e=Yt(e)),"string"!=typeof t&&(t=Yt(t)),e==t?e:e+":"+t)}function Qt(e){var t={s:{c:0,r:0},e:{c:0,r:0}},n=0,r=0,a=0,s=e.length;for(n=0;r26);++r)n=26*n+a;for(t.s.c=--n,n=0;r9);++r)n=10*n+a;if(t.s.r=--n,r===s||58===e.charCodeAt(++r))return t.e.c=t.s.c,t.e.r=t.s.r,t;for(n=0;r!=s&&!((a=e.charCodeAt(r)-64)<1||a>26);++r)n=26*n+a;for(t.e.c=--n,n=0;r!=s&&!((a=e.charCodeAt(r)-48)<0||a>9);++r)n=10*n+a;return t.e.r=--n,t}function en(e,t,n){return null==e||null==e.t||"z"==e.t?"":void 0!==e.w?e.w:("d"==e.t&&!e.z&&n&&n.dateNF&&(e.z=n.dateNF),function(e,t){var n="d"==e.t&&t instanceof Date;if(null!=e.z)try{return e.w=A.format(e.z,n?H(t):t)}catch(e){}try{return e.w=A.format((e.XF||{}).numFmtId||(n?14:0),n?H(t):t)}catch(e){return""+t}}(e,null==t?e.v:t))}function tn(e,t){var n=t&&t.sheet?t.sheet:"Sheet1",r={};return r[n]=e,{SheetNames:[n],Sheets:r}}function nn(e,t,n){var r=n||{},a=e?Array.isArray(e):r.dense,s=e||(a?[]:{}),i=0,o=0;if(s&&null!=r.origin){if("number"==typeof r.origin)i=r.origin;else{var l="string"==typeof r.origin?qt(r.origin):r.origin;i=l.r,o=l.c}s["!ref"]||(s["!ref"]="A1:A1")}var u={s:{c:1e7,r:1e7},e:{c:0,r:0}};if(s["!ref"]){var c=Qt(s["!ref"]);u.s.c=c.s.c,u.s.r=c.s.r,u.e.c=Math.max(u.e.c,c.e.c),u.e.r=Math.max(u.e.r,c.e.r),-1==i&&(u.e.r=i=c.e.r+1)}for(var h=0;h!=t.length;++h)if(t[h]){if(!Array.isArray(t[h]))throw new Error("aoa_to_sheet expects an array of arrays");for(var f=0;f!=t[h].length;++f)if(void 0!==t[h][f]){var d={v:t[h][f]},p=i+h,m=o+f;if(u.s.r>p&&(u.s.r=p),u.s.c>m&&(u.s.c=m),u.e.r0&&t.write_shift(0,e,"dbcs"),n?t.slice(0,t.l):t}function ln(e){return{ich:e.read_shift(2),ifnt:e.read_shift(2)}}function un(e,t){var n=e.l,r=e.read_shift(1),a=sn(e),s=[],i={t:a,h:a};if(0!=(1&r)){for(var o=e.read_shift(4),l=0;l!=o;++l)s.push(ln(e));i.r=s}else i.r=[{ich:0,ifnt:0}];return e.l=n+t,i}!function(e,t){var r;if(void 0!==t)r=t;else try{r=n(3906)}catch(e){r=null}e.rc4=function(e,t){var n=new Array(256),r=0,a=0,s=0,i=0;for(a=0;256!=a;++a)n[a]=a;for(a=0;256!=a;++a)s=s+n[a]+e[a%e.length].charCodeAt(0)&255,i=n[a],n[a]=n[s],n[s]=i;a=s=0;var o=w(t.length);for(r=0;r!=t.length;++r)s=(s+n[a=a+1&255])%256,i=n[a],n[a]=n[s],n[s]=i,o[r]=t[r]^n[n[a]+n[s]&255];return o},e.md5=function(e){if(!r)throw new Error("Unsupported crypto");return r.createHash("md5").update(e).digest("hex")}}({},"undefined"!=typeof crypto?crypto:void 0);var cn=un;function hn(e){var t=e.read_shift(4),n=e.read_shift(2);return n+=e.read_shift(1)<<16,e.l++,{c:t,iStyleRef:n}}function fn(e,t){return null==t&&(t=$t(8)),t.write_shift(-4,e.c),t.write_shift(3,e.iStyleRef||e.s),t.write_shift(1,0),t}var dn=sn,pn=on;function mn(e){var t=e.read_shift(4);return 0===t||4294967295===t?"":e.read_shift(t,"dbcs")}function gn(e,t){var n=!1;return null==t&&(n=!0,t=$t(127)),t.write_shift(4,e.length>0?e.length:4294967295),e.length>0&&t.write_shift(0,e,"dbcs"),n?t.slice(0,t.l):t}var yn=sn,bn=mn,vn=gn;function wn(e){var t=e.slice(e.l,e.l+4),n=1&t[0],r=2&t[0];e.l+=4,t[0]&=252;var a=0===r?wt([0,0,0,0,t[0],t[1],t[2],t[3]],0):At(t,0)>>2;return n?a/100:a}function _n(e){var t={s:{},e:{}};return t.s.r=e.read_shift(4),t.e.r=e.read_shift(4),t.s.c=e.read_shift(4),t.e.c=e.read_shift(4),t}var xn=_n,kn=function(e,t){return t||(t=$t(16)),t.write_shift(4,e.s.r),t.write_shift(4,e.e.r),t.write_shift(4,e.s.c),t.write_shift(4,e.e.c),t};function En(e){return e.read_shift(8,"f")}function Cn(e,t){return(t||$t(8)).write_shift(8,e,"f")}function Sn(e,t){if(t||(t=$t(8)),!e||e.auto)return t.write_shift(4,0),t.write_shift(4,0),t;null!=e.index?(t.write_shift(1,2),t.write_shift(1,e.index)):null!=e.theme?(t.write_shift(1,6),t.write_shift(1,e.theme)):(t.write_shift(1,5),t.write_shift(1,0));var n=e.tint||0;if(n>0?n*=32767:n<0&&(n*=32768),t.write_shift(2,n),e.rgb&&null==e.theme){var r=e.rgb||"FFFFFF";"number"==typeof r&&(r=("000000"+r.toString(16)).slice(-6)),t.write_shift(1,parseInt(r.slice(0,2),16)),t.write_shift(1,parseInt(r.slice(2,4),16)),t.write_shift(1,parseInt(r.slice(4,6),16)),t.write_shift(1,255)}else t.write_shift(2,0),t.write_shift(1,0),t.write_shift(1,0);return t}function Nn(e,t){var n=e.read_shift(4);switch(n){case 0:return"";case 4294967295:case 4294967294:return{2:"BITMAP",3:"METAFILEPICT",8:"DIB",14:"ENHMETAFILE"}[e.read_shift(4)]||""}if(n>400)throw new Error("Unsupported Clipboard: "+n.toString(16));return e.l-=4,e.read_shift(0,1==t?"lpstr":"lpwstr")}var In=80,An=[In,81],Dn={1:{n:"CodePage",t:2},2:{n:"Category",t:In},3:{n:"PresentationFormat",t:In},4:{n:"ByteCount",t:3},5:{n:"LineCount",t:3},6:{n:"ParagraphCount",t:3},7:{n:"SlideCount",t:3},8:{n:"NoteCount",t:3},9:{n:"HiddenCount",t:3},10:{n:"MultimediaClipCount",t:3},11:{n:"ScaleCrop",t:11},12:{n:"HeadingPairs",t:4108},13:{n:"TitlesOfParts",t:4126},14:{n:"Manager",t:In},15:{n:"Company",t:In},16:{n:"LinksUpToDate",t:11},17:{n:"CharacterCount",t:3},19:{n:"SharedDoc",t:11},22:{n:"HyperlinksChanged",t:11},23:{n:"AppVersion",t:3,p:"version"},24:{n:"DigSig",t:65},26:{n:"ContentType",t:In},27:{n:"ContentStatus",t:In},28:{n:"Language",t:In},29:{n:"Version",t:In},255:{}},Tn={1:{n:"CodePage",t:2},2:{n:"Title",t:In},3:{n:"Subject",t:In},4:{n:"Author",t:In},5:{n:"Keywords",t:In},6:{n:"Comments",t:In},7:{n:"Template",t:In},8:{n:"LastAuthor",t:In},9:{n:"RevNumber",t:In},10:{n:"EditTime",t:64},11:{n:"LastPrinted",t:64},12:{n:"CreatedDate",t:64},13:{n:"ModifiedDate",t:64},14:{n:"PageCount",t:3},15:{n:"WordCount",t:3},16:{n:"CharCount",t:3},17:{n:"Thumbnail",t:71},18:{n:"Application",t:In},19:{n:"DocSecurity",t:3},255:{}},Fn={2147483648:{n:"Locale",t:19},2147483651:{n:"Behavior",t:19},1919054434:{}};!function(){for(var e in Fn)Object.prototype.hasOwnProperty.call(Fn,e)&&(Dn[e]=Tn[e]=Fn[e])}();var Rn,On=W(Dn,"n"),Mn=W(Tn,"n"),Bn={1:"US",2:"CA",3:"",7:"RU",20:"EG",30:"GR",31:"NL",32:"BE",33:"FR",34:"ES",36:"HU",39:"IT",41:"CH",43:"AT",44:"GB",45:"DK",46:"SE",47:"NO",48:"PL",49:"DE",52:"MX",55:"BR",61:"AU",64:"NZ",66:"TH",81:"JP",82:"KR",84:"VN",86:"CN",90:"TR",105:"JS",213:"DZ",216:"MA",218:"LY",351:"PT",354:"IS",358:"FI",420:"CZ",886:"TW",961:"LB",962:"JO",963:"SY",964:"IQ",965:"KW",966:"SA",971:"AE",972:"IL",974:"QA",981:"IR",65535:"US"},$n=[null,"solid","mediumGray","darkGray","lightGray","darkHorizontal","darkVertical","darkDown","darkUp","darkGrid","darkTrellis","lightHorizontal","lightVertical","lightDown","lightUp","lightGrid","lightTrellis","gray125","gray0625"],Pn=te([0,16777215,16711680,65280,255,16776960,16711935,65535,0,16777215,16711680,65280,255,16776960,16711935,65535,8388608,32768,128,8421376,8388736,32896,12632256,8421504,10066431,10040166,16777164,13434879,6684774,16744576,26316,13421823,128,16711935,16776960,65535,8388736,8388608,32896,255,52479,13434879,13434828,16777113,10079487,16751052,13408767,16764057,3368703,3394764,10079232,16763904,16750848,16737792,6710937,9868950,13158,3381606,13056,3355392,10040064,10040166,3355545,3355443,16777215,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0].map((function(e){return[e>>16&255,e>>8&255,255&e]}))),Ln={0:"#NULL!",7:"#DIV/0!",15:"#VALUE!",23:"#REF!",29:"#NAME?",36:"#NUM!",42:"#N/A",43:"#GETTING_DATA",255:"#WTF?"},zn=V(Ln),Wn={"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":"workbooks","application/vnd.ms-excel.binIndexWs":"TODO","application/vnd.ms-excel.intlmacrosheet":"TODO","application/vnd.ms-excel.binIndexMs":"TODO","application/vnd.openxmlformats-package.core-properties+xml":"coreprops","application/vnd.openxmlformats-officedocument.custom-properties+xml":"custprops","application/vnd.openxmlformats-officedocument.extended-properties+xml":"extprops","application/vnd.openxmlformats-officedocument.customXmlProperties+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.customProperty":"TODO","application/vnd.ms-excel.pivotTable":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.chart+xml":"TODO","application/vnd.ms-office.chartcolorstyle+xml":"TODO","application/vnd.ms-office.chartstyle+xml":"TODO","application/vnd.ms-office.chartex+xml":"TODO","application/vnd.ms-excel.calcChain":"calcchains","application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml":"calcchains","application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings":"TODO","application/vnd.ms-office.activeX":"TODO","application/vnd.ms-office.activeX+xml":"TODO","application/vnd.ms-excel.attachedToolbars":"TODO","application/vnd.ms-excel.connections":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml":"TODO","application/vnd.ms-excel.externalLink":"links","application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml":"links","application/vnd.ms-excel.sheetMetadata":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml":"TODO","application/vnd.ms-excel.pivotCacheDefinition":"TODO","application/vnd.ms-excel.pivotCacheRecords":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml":"TODO","application/vnd.ms-excel.queryTable":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml":"TODO","application/vnd.ms-excel.userNames":"TODO","application/vnd.ms-excel.revisionHeaders":"TODO","application/vnd.ms-excel.revisionLog":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml":"TODO","application/vnd.ms-excel.tableSingleCells":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml":"TODO","application/vnd.ms-excel.slicer":"TODO","application/vnd.ms-excel.slicerCache":"TODO","application/vnd.ms-excel.slicer+xml":"TODO","application/vnd.ms-excel.slicerCache+xml":"TODO","application/vnd.ms-excel.wsSortMap":"TODO","application/vnd.ms-excel.table":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml":"TODO","application/vnd.openxmlformats-officedocument.theme+xml":"themes","application/vnd.openxmlformats-officedocument.themeOverride+xml":"TODO","application/vnd.ms-excel.Timeline+xml":"TODO","application/vnd.ms-excel.TimelineCache+xml":"TODO","application/vnd.ms-office.vbaProject":"vba","application/vnd.ms-office.vbaProjectSignature":"vba","application/vnd.ms-office.volatileDependencies":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml":"TODO","application/vnd.ms-excel.controlproperties+xml":"TODO","application/vnd.openxmlformats-officedocument.model+data":"TODO","application/vnd.ms-excel.Survey+xml":"TODO","application/vnd.openxmlformats-officedocument.drawing+xml":"drawings","application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml":"TODO","application/vnd.openxmlformats-officedocument.vmlDrawing":"TODO","application/vnd.openxmlformats-package.relationships+xml":"rels","application/vnd.openxmlformats-officedocument.oleObject":"TODO","image/png":"TODO",sheet:"js"},Un=(z(Rn={workbooks:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml",xlsm:"application/vnd.ms-excel.sheet.macroEnabled.main+xml",xlsb:"application/vnd.ms-excel.sheet.binary.macroEnabled.main",xlam:"application/vnd.ms-excel.addin.macroEnabled.main+xml",xltx:"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml"},strs:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml",xlsb:"application/vnd.ms-excel.sharedStrings"},comments:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml",xlsb:"application/vnd.ms-excel.comments"},sheets:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml",xlsb:"application/vnd.ms-excel.worksheet"},charts:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml",xlsb:"application/vnd.ms-excel.chartsheet"},dialogs:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml",xlsb:"application/vnd.ms-excel.dialogsheet"},macros:{xlsx:"application/vnd.ms-excel.macrosheet+xml",xlsb:"application/vnd.ms-excel.macrosheet"},styles:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml",xlsb:"application/vnd.ms-excel.styles"}}).forEach((function(e){["xlsm","xlam"].forEach((function(t){Rn[e][t]||(Rn[e][t]=Rn[e].xlsx)}))})),z(Rn).forEach((function(e){z(Rn[e]).forEach((function(t){Wn[Rn[e][t]]=e}))})),Rn),Vn=function(e){for(var t=[],n=z(e),r=0;r!==n.length;++r)null==t[e[n[r]]]&&(t[e[n[r]]]=[]),t[e[n[r]]].push(n[r]);return t}(Wn);nt.CT="http://schemas.openxmlformats.org/package/2006/content-types";var jn=Ze("Types",null,{xmlns:nt.CT,"xmlns:xsd":nt.xsd,"xmlns:xsi":nt.xsi}),Hn=[["xml","application/xml"],["bin","application/vnd.ms-excel.sheet.binary.macroEnabled.main"],["vml","application/vnd.openxmlformats-officedocument.vmlDrawing"],["data","application/vnd.openxmlformats-officedocument.model+data"],["bmp","image/bmp"],["png","image/png"],["gif","image/gif"],["emf","image/x-emf"],["wmf","image/x-wmf"],["jpg","image/jpeg"],["jpeg","image/jpeg"],["tif","image/tiff"],["tiff","image/tiff"],["pdf","application/pdf"],["rels",Vn.rels[0]]].map((function(e){return Ze("Default",null,{Extension:e[0],ContentType:e[1]})})),Gn={WB:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",SHEET:"http://sheetjs.openxmlformats.org/officeDocument/2006/relationships/officeDocument",HLINK:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink",VML:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing",XPATH:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLinkPath",XMISS:"http://schemas.microsoft.com/office/2006/relationships/xlExternalLinkPath/xlPathMissing",XLINK:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLink",CXML:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml",CXMLP:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps",VBA:"http://schemas.microsoft.com/office/2006/relationships/vbaProject"};function Xn(e){var t=e.lastIndexOf("/");return e.slice(0,t+1)+"_rels/"+e.slice(t+1)+".rels"}function Kn(e,t){var n={"!id":{}};if(!e)return n;"/"!==t.charAt(0)&&(t="/"+t);var r={};return(e.match(ye)||[]).forEach((function(e){var a=we(e);if("2&&(t[t.length]="",t[1]=t[1].replace("/>",">")),t.join("")}var Jn=[Gn.HLINK,Gn.XPATH,Gn.XMISS];function Zn(e,t,n,r,a,s){if(a||(a={}),e["!id"]||(e["!id"]={}),t<0)for(t=1;e["!id"]["rId"+t];++t);if(a.Id="rId"+t,a.Type=r,a.Target=n,s?a.TargetMode=s:Jn.indexOf(a.Type)>-1&&(a.TargetMode="External"),e["!id"][a.Id])throw new Error("Cannot rewrite rId "+t);return e["!id"][a.Id]=a,e[("/"+a.Target).replace("//","/")]=a,t}function Qn(e,t,n){return[' \n',' \n'," \n"].join("")}var er,tr=(er='SheetJS '+t.version+"",function(){return er}),nr=[["cp:category","Category"],["cp:contentStatus","ContentStatus"],["cp:keywords","Keywords"],["cp:lastModifiedBy","LastAuthor"],["cp:lastPrinted","LastPrinted"],["cp:revision","RevNumber"],["cp:version","Version"],["dc:creator","Author"],["dc:description","Comments"],["dc:identifier","Identifier"],["dc:language","Language"],["dc:subject","Subject"],["dc:title","Title"],["dcterms:created","CreatedDate","date"],["dcterms:modified","ModifiedDate","date"]];nt.CORE_PROPS="http://schemas.openxmlformats.org/package/2006/metadata/core-properties",Gn.CORE_PROPS="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties";var rr=function(){for(var e=new Array(nr.length),t=0;t]*>([\\s\\S]*?)")}return e}();function ar(e){var t={};e=Me(e);for(var n=0;n0&&(t[r[1]]=Se(a[1])),"date"===r[2]&&t[r[1]]&&(t[r[1]]=Q(t[r[1]]))}return t}var sr=Ze("cp:coreProperties",null,{"xmlns:cp":nt.CORE_PROPS,"xmlns:dc":nt.dc,"xmlns:dcterms":nt.dcterms,"xmlns:dcmitype":nt.dcmitype,"xmlns:xsi":nt.xsi});function ir(e,t,n,r,a){null==a[e]&&null!=t&&""!==t&&(a[e]=t,t=Ae(t),r[r.length]=n?Ze(e,t,n):Ye(e,t))}var or=[["Application","Application","string"],["AppVersion","AppVersion","string"],["Company","Company","string"],["DocSecurity","DocSecurity","string"],["Manager","Manager","string"],["HyperlinksChanged","HyperlinksChanged","bool"],["SharedDoc","SharedDoc","bool"],["LinksUpToDate","LinksUpToDate","bool"],["ScaleCrop","ScaleCrop","bool"],["HeadingPairs","HeadingPairs","raw"],["TitlesOfParts","TitlesOfParts","raw"]];function lr(e,t,n,r){var a=[];if("string"==typeof e)a=Ke(e,r);else for(var s=0;s0)for(var u=0;u!==a.length;u+=2){switch(l=+a[u+1].v,a[u].v){case"Worksheets":case"工作表":case"Листы":case"أوراق العمل":case"ワークシート":case"גליונות עבודה":case"Arbeitsblätter":case"Çalışma Sayfaları":case"Feuilles de calcul":case"Fogli di lavoro":case"Folhas de cálculo":case"Planilhas":case"Regneark":case"Hojas de cálculo":case"Werkbladen":n.Worksheets=l,n.SheetNames=i.slice(o,o+l);break;case"Named Ranges":case"Rangos con nombre":case"名前付き一覧":case"Benannte Bereiche":case"Navngivne områder":n.NamedRanges=l,n.DefinedNames=i.slice(o,o+l);break;case"Charts":case"Diagramme":n.Chartsheets=l,n.ChartNames=i.slice(o,o+l)}o+=l}}nt.EXT_PROPS="http://schemas.openxmlformats.org/officeDocument/2006/extended-properties",Gn.EXT_PROPS="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties";var ur=Ze("Properties",null,{xmlns:nt.EXT_PROPS,"xmlns:vt":nt.vt});nt.CUST_PROPS="http://schemas.openxmlformats.org/officeDocument/2006/custom-properties",Gn.CUST_PROPS="http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties";var cr=/<[^>]+>[^<]*/g,hr=Ze("Properties",null,{xmlns:nt.CUST_PROPS,"xmlns:vt":nt.vt});var fr={Title:"Title",Subject:"Subject",Author:"Author",Keywords:"Keywords",Comments:"Description",LastAuthor:"LastAuthor",RevNumber:"Revision",Application:"AppName",LastPrinted:"LastPrinted",CreatedDate:"Created",ModifiedDate:"LastSaved",Category:"Category",Manager:"Manager",Company:"Company",AppVersion:"Version",ContentStatus:"ContentStatus",Identifier:"Identifier",Language:"Language"},dr=U(fr);function pr(e,t,n){e[t=dr[t]||t]=n}function mr(e){var t=e.read_shift(4),n=e.read_shift(4);return new Date(1e3*(n/1e7*Math.pow(2,32)+t/1e7-11644473600)).toISOString().replace(/\.000/,"")}function gr(e,t,n){var r=e.l,a=e.read_shift(0,"lpstr-cp");if(n)for(;e.l-r&3;)++e.l;return a}function yr(e,t,n){var r=e.read_shift(0,"lpwstr");return n&&(e.l+=4-(r.length+1&3)&3),r}function br(e,t,n){return 31===t?yr(e):gr(e,0,n)}function vr(e,t,n){return br(e,t,!1===n?0:4)}function wr(e){return[kr(e,81),kr(e,3)]}function _r(e,t){for(var n=e.read_shift(4),r={},a=0;a!=n;++a){var s=e.read_shift(4),i=e.read_shift(4);r[s]=e.read_shift(i,1200===t?"utf16le":"utf8").replace(N,"").replace(I,"!"),1200===t&&i%2&&(e.l+=2)}return 3&e.l&&(e.l=e.l>>3<<2),r}function xr(e){var t=e.read_shift(4),n=e.slice(e.l,e.l+t);return e.l+=t,(3&t)>0&&(e.l+=4-(3&t)&3),n}function kr(e,t,n){var r,a=e.read_shift(2),s=n||{};if(e.l+=2,12!==t&&a!==t&&-1===An.indexOf(t))throw new Error("Expected type "+t+" saw "+a);switch(12===t?a:t){case 2:return r=e.read_shift(2,"i"),s.raw||(e.l+=2),r;case 3:return e.read_shift(4,"i");case 11:return 0!==e.read_shift(4);case 19:return e.read_shift(4);case 30:return gr(e,0,4).replace(N,"");case 31:return yr(e);case 64:return mr(e);case 65:return xr(e);case 71:return function(e){var t={};return t.Size=e.read_shift(4),e.l+=t.Size+3-(t.Size-1)%4,t}(e);case 80:return vr(e,a,!s.raw).replace(N,"");case 81:return function(e,t){if(!t)throw new Error("VtUnalignedString must have positive length");return br(e,t,0)}(e,a).replace(N,"");case 4108:return function(e){return function(e){for(var t=e.read_shift(4),n=[],r=0;r!=t/2;++r)n.push(wr(e));return n}(e)}(e);case 4126:return function(e){return function(e){for(var t=e.read_shift(4),n=[],r=0;r!=t;++r)n[r]=e.read_shift(0,"lpstr-cp").replace(N,"");return n}(e)}(e);default:throw new Error("TypedPropertyValue unrecognized type "+t+" "+a)}}function Er(e,t){var n=$t(4),r=$t(4);switch(n.write_shift(4,80==e?31:e),e){case 3:r.write_shift(-4,t);break;case 5:(r=$t(8)).write_shift(8,t,"f");break;case 11:r.write_shift(4,t?1:0);break;case 64:r=function(e){var t=("string"==typeof e?new Date(Date.parse(e)):e).getTime()/1e3+11644473600,n=t%Math.pow(2,32),r=(t-n)/Math.pow(2,32);r*=1e7;var a=(n*=1e7)/Math.pow(2,32)|0;a>0&&(n%=Math.pow(2,32),r+=a);var s=$t(8);return s.write_shift(4,n),s.write_shift(4,r),s}(t);break;case 31:case 80:for((r=$t(4+2*(t.length+1)+(t.length%2?0:2))).write_shift(4,t.length+1),r.write_shift(0,t,"dbcs");r.l!=r.length;)r.write_shift(1,0);break;default:throw new Error("TypedPropertyValue unrecognized type "+e+" "+t)}return S([n,r])}function Cr(e,t){var n=e.l,r=e.read_shift(4),a=e.read_shift(4),s=[],i=0,o=0,l=-1,c={};for(i=0;i!=a;++i){var h=e.read_shift(4),f=e.read_shift(4);s[i]=[h,f+n]}s.sort((function(e,t){return e[1]-t[1]}));var d={};for(i=0;i!=a;++i){if(e.l!==s[i][1]){var p=!0;if(i>0&&t)switch(t[s[i-1][0]].t){case 2:e.l+2===s[i][1]&&(e.l+=2,p=!1);break;case 80:case 4108:e.l<=s[i][1]&&(e.l=s[i][1],p=!1)}if((!t||0==i)&&e.l<=s[i][1]&&(p=!1,e.l=s[i][1]),p)throw new Error("Read Error: Expected address "+s[i][1]+" at "+e.l+" :"+i)}if(t){var m=t[s[i][0]];if(d[m.n]=kr(e,m.t,{raw:!0}),"version"===m.p&&(d[m.n]=String(d[m.n]>>16)+"."+("0000"+String(65535&d[m.n])).slice(-4)),"CodePage"==m.n)switch(d[m.n]){case 0:d[m.n]=1252;case 874:case 932:case 936:case 949:case 950:case 1250:case 1251:case 1253:case 1254:case 1255:case 1256:case 1257:case 1258:case 1e4:case 1200:case 1201:case 1252:case 65e3:case-536:case 65001:case-535:u(o=d[m.n]>>>0&65535);break;default:throw new Error("Unsupported CodePage: "+d[m.n])}}else if(1===s[i][0]){if(o=d.CodePage=kr(e,2),u(o),-1!==l){var g=e.l;e.l=s[l][1],c=_r(e,o),e.l=g}}else if(0===s[i][0]){if(0===o){l=i,e.l=s[i+1][1];continue}c=_r(e,o)}else{var y,b=c[s[i][0]];switch(e[e.l]){case 65:e.l+=4,y=xr(e);break;case 30:case 31:e.l+=4,y=vr(e,e[e.l-4]).replace(/\u0000+$/,"");break;case 3:e.l+=4,y=e.read_shift(4,"i");break;case 19:e.l+=4,y=e.read_shift(4);break;case 5:e.l+=4,y=e.read_shift(8,"f");break;case 11:e.l+=4,y=Fr(e,4);break;case 64:e.l+=4,y=Q(mr(e));break;default:throw new Error("unparsed value: "+e[e.l])}d[b]=y}}return e.l=n+r,d}var Sr=["CodePage","Thumbnail","_PID_LINKBASE","_PID_HLINKS","SystemIdentifier","FMTID"].concat(["Worksheets","SheetNames","NamedRanges","DefinedNames","Chartsheets","ChartNames"]);function Nr(e){switch(typeof e){case"boolean":return 11;case"number":return(0|e)==e?3:5;case"string":return 31;case"object":if(e instanceof Date)return 64}return-1}function Ir(e,t,n){var r=$t(8),a=[],s=[],i=8,o=0,l=$t(8),u=$t(8);if(l.write_shift(4,2),l.write_shift(4,1200),u.write_shift(4,1),s.push(l),a.push(u),i+=8+l.length,!t){(u=$t(8)).write_shift(4,0),a.unshift(u);var c=[$t(4)];for(c[0].write_shift(4,e.length),o=0;o-1)&&null!=e[o][1]){var f=e[o][1],d=0;if(t){var p=n[d=+t[e[o][0]]];if("version"==p.p&&"string"==typeof f){var m=f.split(".");f=(+m[0]<<16)+(+m[1]||0)}l=Er(p.t,f)}else{var g=Nr(f);-1==g&&(g=31,f=String(f)),l=Er(g,f)}s.push(l),(u=$t(8)).write_shift(4,t?d:2+o),a.push(u),i+=8+l.length}var y=8*(s.length+1);for(o=0;o=12?2:1),s="sbcs-cont",i=r;n&&n.biff>=8&&(r=1200),n&&8!=n.biff?12==n.biff&&(s="wstr"):e.read_shift(1)&&(s="dbcs-cont"),n.biff>=2&&n.biff<=5&&(s="cpstr");var o=a?e.read_shift(a,s):"";return r=i,o}function Pr(e){var t=r;r=1200;var n,a=e.read_shift(2),s=e.read_shift(1),i=4&s,o=8&s,l=1+(1&s),u=0,c={};o&&(u=e.read_shift(2)),i&&(n=e.read_shift(4));var h=2==l?"dbcs-cont":"sbcs-cont",f=0===a?"":e.read_shift(a,h);return o&&(e.l+=4*u),i&&(e.l+=n),c.t=f,o||(c.raw=""+c.t+"",c.r=c.t),r=t,c}function Lr(e){var t=e.t||"",n=$t(3);n.write_shift(2,t.length),n.write_shift(1,1);var r=$t(2*t.length);return r.write_shift(2*t.length,t,"utf16le"),S([n,r])}function zr(e,t,n){if(n){if(n.biff>=2&&n.biff<=5)return e.read_shift(t,"cpstr");if(n.biff>=12)return e.read_shift(t,"dbcs-cont")}return 0===e.read_shift(1)?e.read_shift(t,"sbcs-cont"):e.read_shift(t,"dbcs-cont")}function Wr(e,t,n){var r=e.read_shift(n&&2==n.biff?1:2);return 0===r?(e.l++,""):zr(e,r,n)}function Ur(e,t,n){if(n.biff>5)return Wr(e,0,n);var r=e.read_shift(1);return 0===r?(e.l++,""):e.read_shift(r,n.biff<=4||!e.lens?"cpstr":"sbcs-cont")}function Vr(e,t,n){return n||(n=$t(3+2*e.length)),n.write_shift(2,e.length),n.write_shift(1,1),n.write_shift(31,e,"utf16le"),n}function jr(e){var t=e.read_shift(4);return t>0?e.read_shift(t,"utf16le").replace(N,""):""}function Hr(e){var t=$t(512),n=0,r=e.Target,a=r.indexOf("#")>-1?31:23;switch(r.charAt(0)){case"#":a=28;break;case".":a&=-3}t.write_shift(4,2),t.write_shift(4,a);var s=[8,6815827,6619237,4849780,83];for(n=0;n8?4:2;return[e.read_shift(r),e.read_shift(r,"i"),e.read_shift(r,"i")]}function Jr(e){return[e.read_shift(2),wn(e)]}function Zr(e){var t=e.read_shift(2),n=e.read_shift(2);return{s:{c:e.read_shift(2),r:t},e:{c:e.read_shift(2),r:n}}}function Qr(e,t){return t||(t=$t(8)),t.write_shift(2,e.s.r),t.write_shift(2,e.e.r),t.write_shift(2,e.s.c),t.write_shift(2,e.e.c),t}function ea(e){var t=e.read_shift(2),n=e.read_shift(2);return{s:{c:e.read_shift(1),r:t},e:{c:e.read_shift(1),r:n}}}var ta=ea;function na(e){e.l+=4;var t=e.read_shift(2),n=e.read_shift(2),r=e.read_shift(2);return e.l+=12,[n,t,r]}function ra(e){e.l+=2,e.l+=e.read_shift(2)}var aa={0:ra,4:ra,5:ra,6:ra,7:function(e){return e.l+=4,e.cf=e.read_shift(2),{}},8:ra,9:ra,10:ra,11:ra,12:ra,13:function(e){var t={};return e.l+=4,e.l+=16,t.fSharedNote=e.read_shift(2),e.l+=4,t},14:ra,15:ra,16:ra,17:ra,18:ra,19:ra,20:ra,21:na};function sa(e,t){var n={BIFFVer:0,dt:0};switch(n.BIFFVer=e.read_shift(2),(t-=2)>=2&&(n.dt=e.read_shift(2),e.l-=2),n.BIFFVer){case 1536:case 1280:case 1024:case 768:case 512:case 2:case 7:break;default:if(t>6)throw new Error("Unexpected BIFF Ver "+n.BIFFVer)}return e.read_shift(t),n}function ia(e,t,n){var r=1536,a=16;switch(n.bookType){case"biff8":break;case"biff5":r=1280,a=8;break;case"biff4":r=4,a=6;break;case"biff3":r=3,a=6;break;case"biff2":r=2,a=4;break;case"xla":break;default:throw new Error("unsupported BIFF version")}var s=$t(a);return s.write_shift(2,r),s.write_shift(2,t),a>4&&s.write_shift(2,29282),a>6&&s.write_shift(2,1997),a>8&&(s.write_shift(2,49161),s.write_shift(2,1),s.write_shift(2,1798),s.write_shift(2,0)),s}function oa(e,t){var n=!t||t.biff>=8?2:1,r=$t(8+n*e.name.length);r.write_shift(4,e.pos),r.write_shift(1,e.hs||0),r.write_shift(1,e.dt),r.write_shift(1,e.name.length),t.biff>=8&&r.write_shift(1,1),r.write_shift(n*e.name.length,e.name,t.biff<8?"sbcs":"utf16le");var a=r.slice(0,r.l);return a.l=r.l,a}function la(e,t,n){var r=0;n&&2==n.biff||(r=e.read_shift(2));var a=e.read_shift(2);return n&&2==n.biff&&(r=1-(a>>15),a&=32767),[{Unsynced:1&r,DyZero:(2&r)>>1,ExAsc:(4&r)>>2,ExDsc:(8&r)>>3},a]}function ua(e,t,n,r){var a=n&&5==n.biff;r||(r=$t(a?3+t.length:5+2*t.length)),r.write_shift(2,e),r.write_shift(a?1:2,t.length),a||r.write_shift(1,1),r.write_shift((a?1:2)*t.length,t,a?"sbcs":"utf16le");var s=r.length>r.l?r.slice(0,r.l):r;return null==s.l&&(s.l=s.length),s}var ca=Ur;function ha(e,t,n){var r=e.l+t,a=8!=n.biff&&n.biff?2:4,s=e.read_shift(a),i=e.read_shift(a),o=e.read_shift(2),l=e.read_shift(2);return e.l=r,{s:{r:s,c:o},e:{r:i,c:l}}}function fa(e,t,n,r){var a=n&&5==n.biff;return r||(r=$t(a?16:20)),r.write_shift(2,0),e.style?(r.write_shift(2,e.numFmtId||0),r.write_shift(2,65524)):(r.write_shift(2,e.numFmtId||0),r.write_shift(2,t<<4)),r.write_shift(4,0),r.write_shift(4,0),a||r.write_shift(4,0),r.write_shift(2,0),r}function da(e,t,n){var r=Kr(e);2==n.biff&&++e.l;var a=function(e){var t=e.read_shift(1);return 1===e.read_shift(1)?t:1===t}(e);return r.val=a,r.t=!0===a||!1===a?"b":"e",r}var pa=function(e,t,n){return 0===t?"":Ur(e,0,n)};function ma(e,t,n){var r,a=e.read_shift(2),s={fBuiltIn:1&a,fWantAdvise:a>>>1&1,fWantPict:a>>>2&1,fOle:a>>>3&1,fOleLink:a>>>4&1,cf:a>>>5&1023,fIcon:a>>>15&1};return 14849===n.sbcch&&(r=function(e,t,n){e.l+=4,t-=4;var r=e.l+t,a=$r(e,0,n),s=e.read_shift(2);if(s!==(r-=e.l))throw new Error("Malformed AddinUdf: padding = "+r+" != "+s);return e.l+=s,a}(e,t-2,n)),s.body=r||e.read_shift(t-2),"string"==typeof r&&(s.Name=r),s}var ga=["_xlnm.Consolidate_Area","_xlnm.Auto_Open","_xlnm.Auto_Close","_xlnm.Extract","_xlnm.Database","_xlnm.Criteria","_xlnm.Print_Area","_xlnm.Print_Titles","_xlnm.Recorder","_xlnm.Data_Form","_xlnm.Auto_Activate","_xlnm.Auto_Deactivate","_xlnm.Sheet_Title","_xlnm._FilterDatabase"];function ya(e,t,n){var r=e.l+t,a=e.read_shift(2),s=e.read_shift(1),i=e.read_shift(1),o=e.read_shift(n&&2==n.biff?1:2),l=0;(!n||n.biff>=5)&&(5!=n.biff&&(e.l+=2),l=e.read_shift(2),5==n.biff&&(e.l+=2),e.l+=4);var u=zr(e,i,n);32&a&&(u=ga[u.charCodeAt(0)]);var c=r-e.l;return n&&2==n.biff&&--c,{chKey:s,Name:u,itab:l,rgce:r==e.l||0===o?[]:function(e,t,n,r){var a,s=e.l+t,i=Oi(e,r,n);return s!==e.l&&(a=Ri(e,s-e.l,i,n)),[i,a]}(e,c,n,o)}}function ba(e,t,n){if(n.biff<8)return function(e,t,n){3==e[e.l+1]&&e[e.l]++;var r=$r(e,0,n);return 3==r.charCodeAt(0)?r.slice(1):r}(e,0,n);for(var r=[],a=e.l+t,s=e.read_shift(n.biff>8?4:2);0!=s--;)r.push(Yr(e,n.biff,n));if(e.l!=a)throw new Error("Bad ExternSheet: "+e.l+" != "+a);return r}function va(e,t,n){var r=ta(e,6);switch(n.biff){case 2:e.l++,t-=7;break;case 3:case 4:e.l+=2,t-=8;break;default:e.l+=6,t-=12}return[r,Wi(e,t,n)]}var wa=[];function _a(e){var t=$t(24),n=qt(e[0]);t.write_shift(2,n.r),t.write_shift(2,n.r),t.write_shift(2,n.c),t.write_shift(2,n.c);for(var r="d0 c9 ea 79 f9 ba ce 11 8c 82 00 aa 00 4b a9 0b".split(" "),a=0;a<16;++a)t.write_shift(1,parseInt(r[a],16));return S([t,Hr(e[1])])}function xa(e){var t=e[1].Tooltip,n=$t(10+2*(t.length+1));n.write_shift(2,2048);var r=qt(e[0]);n.write_shift(2,r.r),n.write_shift(2,r.r),n.write_shift(2,r.c),n.write_shift(2,r.c);for(var a=0;a=12?4:2,a=e.read_shift(r),s=e.read_shift(r),i=e.read_shift(r),o=e.read_shift(r),l=e.read_shift(2);2==r&&(e.l+=2);var u={s:a,e:s,w:i,ixfe:o,flags:l};return(n.biff>=5||!n.biff)&&(u.level=l>>8&7),u}wa[8]=function(e,t){var n=e.l+t;e.l+=10;var r=e.read_shift(2);e.l+=4,e.l+=2,e.l+=2,e.l+=2,e.l+=4;var a=e.read_shift(1);return e.l+=a,e.l=n,{fmt:r}};var Ea=Kr,Ca=Br,Sa=Wr,Na=function(){var e={1:437,2:850,3:1252,4:1e4,100:852,101:866,102:865,103:861,104:895,105:620,106:737,107:857,120:950,121:949,122:936,123:932,124:874,125:1255,126:1256,150:10007,151:10029,152:10006,200:1250,201:1251,202:1254,203:1253,0:20127,8:865,9:437,10:850,11:437,13:437,14:850,15:437,16:850,17:437,18:850,19:932,20:850,21:437,22:850,23:865,24:437,25:437,26:850,27:437,28:863,29:850,31:852,34:852,35:852,36:860,37:850,38:866,55:850,64:852,77:936,78:949,79:950,80:874,87:1252,88:1252,89:1252,255:16969},t=U({1:437,2:850,3:1252,4:1e4,100:852,101:866,102:865,103:861,104:895,105:620,106:737,107:857,120:950,121:949,122:936,123:932,124:874,125:1255,126:1256,150:10007,151:10029,152:10006,200:1250,201:1251,202:1254,203:1253,0:20127});function n(t,n){var r=n||{};return r.dateNF||(r.dateNF="yyyymmdd"),rn(function(t,n){var r=[],a=w(1);switch(n.type){case"base64":a=x(g.decode(t));break;case"binary":a=x(t);break;case"buffer":case"array":a=t}Mt(a,0);var s=a.read_shift(1),i=!1,o=!1,l=!1;switch(s){case 2:case 3:break;case 48:o=!0,i=!0;break;case 49:o=!0;break;case 131:case 139:i=!0;break;case 140:i=!0,l=!0;break;case 245:i=!0;break;default:throw new Error("DBF Unsupported Version: "+s.toString(16))}var u=0,c=0;2==s&&(u=a.read_shift(2)),a.l+=3,2!=s&&(u=a.read_shift(4)),2!=s&&(c=a.read_shift(2));var h=a.read_shift(2),f=1252;2!=s&&(a.l+=16,a.read_shift(1),0!==a[a.l]&&(f=e[a[a.l]]),a.l+=1,a.l+=2),l&&(a.l+=36);for(var d=[],p={},m=c-10-(o?264:0),y=l?32:11;2==s?a.l0;)if(42!==a[a.l])for(++a.l,r[++b]=[],v=0,v=0;v!=d.length;++v){var _=a.slice(a.l,a.l+d[v].len);a.l+=d[v].len,Mt(_,0);var k=cptable.utils.decode(f,_);switch(d[v].type){case"C":r[b][v]=cptable.utils.decode(f,_),r[b][v]=r[b][v].trim();break;case"D":8===k.length?r[b][v]=new Date(+k.slice(0,4),+k.slice(4,6)-1,+k.slice(6,8)):r[b][v]=k;break;case"F":r[b][v]=parseFloat(k.trim());break;case"+":case"I":r[b][v]=l?2147483648^_.read_shift(-4,"i"):_.read_shift(4,"i");break;case"L":switch(k.toUpperCase()){case"Y":case"T":r[b][v]=!0;break;case"N":case"F":r[b][v]=!1;break;case" ":case"?":r[b][v]=!1;break;default:throw new Error("DBF Unrecognized L:|"+k+"|")}break;case"M":if(!i)throw new Error("DBF Unexpected MEMO for type "+s.toString(16));r[b][v]="##MEMO##"+(l?parseInt(k.trim(),10):_.read_shift(4));break;case"N":r[b][v]=+k.replace(/\u0000/g,"").trim();break;case"@":r[b][v]=new Date(_.read_shift(-8,"f")-621356832e5);break;case"T":r[b][v]=new Date(864e5*(_.read_shift(4)-2440588)+_.read_shift(4));break;case"Y":r[b][v]=_.read_shift(4,"i")/1e4;break;case"O":r[b][v]=-_.read_shift(-8,"f");break;case"B":if(o&&8==d[v].len){r[b][v]=_.read_shift(8,"f");break}case"G":case"P":_.l+=d[v].len;break;case"0":if("_NullFlags"===d[v].name)break;default:throw new Error("DBF Unsupported data type "+d[v].type)}}else a.l+=h;if(2!=s&&a.l=0&&u(+s.codepage),"string"==s.type)throw new Error("Cannot write DBF to JS string");var i=Lt(),o=Au(e,{header:1,raw:!0,cellDates:!0}),l=o[0],c=o.slice(1),h=0,f=0,d=0,p=1;for(h=0;h":190,"?":191,"{":223},t=new RegExp("N("+z(e).join("|").replace(/\|\|\|/,"|\\||").replace(/([?()+])/g,"\\$1")+"|\\|)","gm"),n=function(t,n){var r=e[n];return"number"==typeof r?p(r):r},r=function(e,t,n){var r=t.charCodeAt(0)-32<<4|n.charCodeAt(0)-48;return 59==r?e:p(r)};function a(e,a){var s,i=e.split(/[\n\r]+/),o=-1,l=-1,c=0,h=0,f=[],d=[],p=null,m={},g=[],y=[],b=[],v=0;for(+a.codepage>=0&&u(+a.codepage);c!==i.length;++c){v=0;var w,_=i[c].trim().replace(/\x1B([\x20-\x2F])([\x30-\x3F])/g,r).replace(t,n),x=_.replace(/;;/g,"\0").split(";").map((function(e){return e.replace(/\u0000/g,";")})),k=x[0];if(_.length>0)switch(k){case"ID":case"E":case"B":case"O":break;case"P":"P"==x[1].charAt(0)&&d.push(_.slice(3).replace(/;;/g,";"));break;case"C":var E=!1,C=!1;for(h=1;h0?(g[o].hpt=v,g[o].hpx=ys(v)):0===v&&(g[o].hidden=!0);break;default:if(a&&a.WTF)throw new Error("SYLK bad record "+_)}N<1&&(p=null);break;default:if(a&&a.WTF)throw new Error("SYLK bad record "+_)}}return g.length>0&&(m["!rows"]=g),y.length>0&&(m["!cols"]=y),a&&a.sheetRows&&(f=f.slice(0,a.sheetRows)),[f,m]}function s(e,t){var n=function(e,t){switch(t.type){case"base64":return a(g.decode(e),t);case"binary":return a(e,t);case"buffer":return a(e.toString("binary"),t);case"array":return a(ee(e),t)}throw new Error("Unrecognized type "+t.type)}(e,t),r=n[0],s=n[1],i=rn(r,t);return z(s).forEach((function(e){i[e]=s[e]})),i}function i(e,t,n,r){var a="C;Y"+(n+1)+";X"+(r+1)+";K";switch(e.t){case"n":a+=e.v||0,e.f&&!e.F&&(a+=";E"+ri(e.f,{r:n,c:r}));break;case"b":a+=e.v?"TRUE":"FALSE";break;case"e":a+=e.w||e.v;break;case"d":a+='"'+(e.w||e.v)+'"';break;case"s":a+='"'+e.v.replace(/"/g,"")+'"'}return a}return e["|"]=254,{to_workbook:function(e,t){return tn(s(e,t),t)},to_sheet:s,from_sheet:function(e,t){var n,r,a=["ID;PWXL;N;E"],s=[],o=Qt(e["!ref"]),l=Array.isArray(e),u="\r\n";a.push("P;PGeneral"),a.push("F;P0;DG0G8;M255"),e["!cols"]&&(r=a,e["!cols"].forEach((function(e,t){var n="F;W"+(t+1)+" "+(t+1)+" ";e.hidden?n+="0":("number"==typeof e.width&&(e.wpx=cs(e.width)),"number"==typeof e.wpx&&(e.wch=hs(e.wpx)),"number"==typeof e.wch&&(n+=Math.round(e.wch)))," "!=n.charAt(n.length-1)&&r.push(n)}))),e["!rows"]&&function(e,t){t.forEach((function(t,n){var r="F;";t.hidden?r+="M0;":t.hpt?r+="M"+20*t.hpt+";":t.hpx&&(r+="M"+20*gs(t.hpx)+";"),r.length>2&&e.push(r+"R"+(n+1))}))}(a,e["!rows"]),a.push("B;Y"+(o.e.r-o.s.r+1)+";X"+(o.e.c-o.s.c+1)+";D"+[o.s.c,o.s.r,o.e.c,o.e.r].join(" "));for(var c=o.s.r;c<=o.e.r;++c)for(var h=o.s.c;h<=o.e.c;++h){var f=Yt({r:c,c:h});(n=l?(e[c]||[])[h]:e[f])&&(null!=n.v||n.f&&!n.F)&&s.push(i(n,0,c,h))}return a.join(u)+u+s.join(u)+u+"E"+u}}}(),Aa=function(){function e(e,t){for(var n=e.split("\n"),r=-1,a=-1,s=0,i=[];s!==n.length;++s)if("BOT"!==n[s].trim()){if(!(r<0)){var o=n[s].trim().split(","),l=o[0],u=o[1],c=n[++s].trim();switch(+l){case-1:if("BOT"===c){i[++r]=[],a=0;continue}if("EOD"!==c)throw new Error("Unrecognized DIF special command "+c);break;case 0:"TRUE"===c?i[r][a]=!0:"FALSE"===c?i[r][a]=!1:isNaN(re(u))?isNaN(ae(u).getDate())?i[r][a]=u:i[r][a]=Q(u):i[r][a]=re(u),++a;break;case 1:c=c.slice(1,c.length-1),i[r][a++]=""!==c?c:null}if("EOD"===c)break}}else i[++r]=[],a=0;return t&&t.sheetRows&&(i=i.slice(0,t.sheetRows)),i}function t(t,n){return rn(function(t,n){switch(n.type){case"base64":return e(g.decode(t),n);case"binary":return e(t,n);case"buffer":return e(t.toString("binary"),n);case"array":return e(ee(t),n)}throw new Error("Unrecognized type "+n.type)}(t,n),n)}var n,r;return{to_workbook:function(e,n){return tn(t(e,n),n)},to_sheet:t,from_sheet:(n=function(e,t,n,r,a){e.push(t),e.push(n+","+r),e.push('"'+a.replace(/"/g,'""')+'"')},r=function(e,t,n,r){e.push(t+","+n),e.push(1==t?'"'+r.replace(/"/g,'""')+'"':r)},function(e){var t,a=[],s=Qt(e["!ref"]),i=Array.isArray(e);n(a,"TABLE",0,1,"sheetjs"),n(a,"VECTORS",0,s.e.r-s.s.r+1,""),n(a,"TUPLES",0,s.e.c-s.s.c+1,""),n(a,"DATA",0,0,"");for(var o=s.s.r;o<=s.e.r;++o){r(a,-1,0,"BOT");for(var l=s.s.c;l<=s.e.c;++l){var u=Yt({r:o,c:l});if(t=i?(e[o]||[])[l]:e[u])switch(t.t){case"n":var c=t.w;c||null==t.v||(c=t.v),null==c?t.f&&!t.F?r(a,1,0,"="+t.f):r(a,1,0,""):r(a,0,c,"V");break;case"b":r(a,0,t.v?1:0,t.v?"TRUE":"FALSE");break;case"s":r(a,1,0,isNaN(t.v)?t.v:'="'+t.v+'"');break;case"d":t.w||(t.w=A.format(t.z||A._table[14],H(Q(t.v)))),r(a,0,t.w,"V");break;default:r(a,1,0,"")}else r(a,1,0,"")}}return r(a,-1,0,"EOD"),a.join("\r\n")})}}(),Da=function(){function e(e){return e.replace(/\\/g,"\\b").replace(/:/g,"\\c").replace(/\n/g,"\\n")}function t(e,t){return rn(function(e,t){for(var n=e.split("\n"),r=-1,a=-1,s=0,i=[];s!==n.length;++s){var o=n[s].trim().split(":");if("cell"===o[0]){var l=qt(o[1]);if(i.length<=l.r)for(r=i.length;r<=l.r;++r)i[r]||(i[r]=[]);switch(r=l.r,a=l.c,o[2]){case"t":i[r][a]=o[3].replace(/\\b/g,"\\").replace(/\\c/g,":").replace(/\\n/g,"\n");break;case"v":i[r][a]=+o[3];break;case"vtf":var u=o[o.length-1];case"vtc":switch(o[3]){case"nl":i[r][a]=!!+o[4];break;default:i[r][a]=+o[4]}"vtf"==o[2]&&(i[r][a]=[i[r][a],u])}}}return t&&t.sheetRows&&(i=i.slice(0,t.sheetRows)),i}(e,t),t)}var n=["socialcalc:version:1.5","MIME-Version: 1.0","Content-Type: multipart/mixed; boundary=SocialCalcSpreadsheetControlSave"].join("\n"),r=["--SocialCalcSpreadsheetControlSave","Content-type: text/plain; charset=UTF-8"].join("\n")+"\n",a=["# SocialCalc Spreadsheet Control Save","part:sheet"].join("\n"),s="--SocialCalcSpreadsheetControlSave--";function i(t){if(!t||!t["!ref"])return"";for(var n,r=[],a=[],s="",i=Jt(t["!ref"]),o=Array.isArray(t),l=i.s.r;l<=i.e.r;++l)for(var u=i.s.c;u<=i.e.c;++u)if(s=Yt({r:l,c:u}),(n=o?(t[l]||[])[u]:t[s])&&null!=n.v&&"z"!==n.t){switch(a=["cell",s,"t"],n.t){case"s":case"str":a.push(e(n.v));break;case"n":n.f?(a[2]="vtf",a[3]="n",a[4]=n.v,a[5]=e(n.f)):(a[2]="v",a[3]=n.v);break;case"b":a[2]="vt"+(n.f?"f":"c"),a[3]="nl",a[4]=n.v?"1":"0",a[5]=e(n.f||(n.v?"TRUE":"FALSE"));break;case"d":var c=H(Q(n.v));a[2]="vtc",a[3]="nd",a[4]=""+c,a[5]=n.w||A.format(n.z||A._table[14],c);break;case"e":continue}r.push(a.join(":"))}return r.push("sheet:c:"+(i.e.c-i.s.c+1)+":r:"+(i.e.r-i.s.r+1)+":tvf:1"),r.push("valueformat:1:text-wiki"),r.join("\n")}return{to_workbook:function(e,n){return tn(t(e,n),n)},to_sheet:t,from_sheet:function(e){return[n,r,a,r,i(e),s].join("\n")}}}(),Ta=function(){function e(e,t,n,r,a){a.raw?t[n][r]=e:"TRUE"===e?t[n][r]=!0:"FALSE"===e?t[n][r]=!1:""===e||(isNaN(re(e))?isNaN(ae(e).getDate())?t[n][r]=e:t[n][r]=Q(e):t[n][r]=re(e))}var t={44:",",9:"\t",59:";"},n={44:3,9:2,59:1};function r(e,r){var a=r||{},s="",i=a.dense?[]:{},o={s:{c:0,r:0},e:{c:0,r:0}};"sep="==e.slice(0,4)?13==e.charCodeAt(5)&&10==e.charCodeAt(6)?(s=e.charAt(4),e=e.slice(7)):13!=e.charCodeAt(5)&&10!=e.charCodeAt(5)||(s=e.charAt(4),e=e.slice(6)):s=function(e){for(var r={},a=!1,s=0,i=0;s=0?o=u:a=u}})),l>=0&&-1==o&&a>=0&&(o=a,a=-1);var u=(""+(r>=0?r:(new Date).getFullYear())).slice(-4)+"-"+("00"+(a>=1?a:1)).slice(-2)+"-"+("00"+(s>=1?s:1)).slice(-2);7==u.length&&(u="0"+u),8==u.length&&(u="20"+u);var c=("00"+(i>=0?i:0)).slice(-2)+":"+("00"+(o>=0?o:0)).slice(-2)+":"+("00"+(l>=0?l:0)).slice(-2);return-1==i&&-1==o&&-1==l?u:-1==r&&-1==a&&-1==s?c:u+"T"+c}(0,a.dateNF,t.match(b)||[]),r=1),a.cellDates?(n.t="d",n.v=Q(t,r)):(n.t="n",n.v=H(Q(t,r))),!1!==a.cellText&&(n.w=A.format(n.z,n.v instanceof Date?H(n.v):n.v)),a.cellNF||delete n.z}else n.t="s",n.v=t;else n.t="n",!1!==a.cellText&&(n.w=t),n.v=c;if("z"==n.t||(a.dense?(i[l]||(i[l]=[]),i[l][u]=n):i[Yt({c:u,r:l})]=n),h=f+1,o.e.c0&&v(),i["!ref"]=Zt(o),i}function a(t,n){var a="",s="string"==n.type?[0,0,0,0]:yu(t,n);switch(n.type){case"base64":a=g.decode(t);break;case"binary":a=t;break;case"buffer":a=65001==n.codepage?t.toString("utf8"):n.codepage&&"undefined"!=typeof cptable?cptable.utils.decode(n.codepage,t):t.toString("binary");break;case"array":a=ee(t);break;case"string":a=t;break;default:throw new Error("Unrecognized type "+n.type)}return 239==s[0]&&187==s[1]&&191==s[2]?a=Me(a.slice(3)):"binary"==n.type&&"undefined"!=typeof cptable&&n.codepage&&(a=cptable.utils.decode(n.codepage,cptable.utils.encode(1252,a))),"socialcalc:version:"==a.slice(0,19)?Da.to_sheet("string"==n.type?a:Me(a),n):function(t,n){return n&&n.PRN?"sep="==t.slice(0,4)||t.indexOf("\t")>=0||t.indexOf(",")>=0||t.indexOf(";")>=0?r(t,n):rn(function(t,n){var r=n||{},a=[];if(!t||0===t.length)return a;for(var s=t.split(/[\r\n]/),i=s.length-1;i>=0&&0===s[i].length;)--i;for(var o=10,l=0,u=0;u<=i;++u)-1==(l=s[u].indexOf(" "))?l=s[u].length:l++,o=Math.max(o,l);for(u=0;u<=i;++u){a[u]=[];var c=0;for(e(s[u].slice(0,o).trim(),a,u,c,r),c=1;c<=(s[u].length-o)/10+1;++c)e(s[u].slice(o+10*(c-1),o+10*c).trim(),a,u,c,r)}return r.sheetRows&&(a=a.slice(0,r.sheetRows)),a}(t,n),n):r(t,n)}(a,n)}return{to_workbook:function(e,t){return tn(a(e,t),t)},to_sheet:a,from_sheet:function(e){for(var t,n=[],r=Qt(e["!ref"]),a=Array.isArray(e),s=r.s.r;s<=r.e.r;++s){for(var i=[],o=r.s.c;o<=r.e.c;++o){var l=Yt({r:s,c:o});if((t=a?(e[s]||[])[o]:e[l])&&null!=t.v){for(var u=(t.w||(en(t),t.w)||"").slice(0,10);u.length<10;)u+=" ";i.push(u+(0===o?" ":""))}else i.push(" ")}n.push(i.join(""))}return n.join("\n")}}}(),Fa=function(){function e(e,t){if(!e)return e;var n=t||{},r=n.dense?[]:{},a="Sheet1",s=0,l={},u=[a],c={s:{r:0,c:0},e:{r:0,c:0}},h=n.sheetRows||0;if(2==e[2])n.Enum=i;else if(26==e[2])n.Enum=o;else{if(14!=e[2])throw new Error("Unrecognized LOTUS BOF "+e[2]);n.Enum=o,n.qpro=!0,e.l=0}return function(e,t,n){if(e){Mt(e,e.l||0);for(var r=n.Enum||i;e.l=4096&&(n.qpro=!0);break;case 6:c=t;break;case 15:n.qpro||(t[1].v=t[1].v.slice(1));case 13:case 14:case 16:case 51:14==o&&112==(112&t[2])&&(15&t[2])>1&&(15&t[2])<15&&(t[1].z=n.dateNF||A._table[14],n.cellDates&&(t[1].t="d",t[1].v=q(t[1].v))),n.dense?(r[t[0].r]||(r[t[0].r]=[]),r[t[0].r][t[0].c]=t[1]):r[Yt(t[0])]=t[1]}else switch(o){case 22:t[1].v=t[1].v.slice(1);case 23:case 24:case 25:case 37:case 39:case 40:if(t[3]>s&&(r["!ref"]=Zt(c),l[a]=r,r=n.dense?[]:{},c={s:{r:0,c:0},e:{r:0,c:0}},s=t[3],a="Sheet"+(s+1),u.push(a)),h>0&&t[0].r>=h)break;n.dense?(r[t[0].r]||(r[t[0].r]=[]),r[t[0].r][t[0].c]=t[1]):r[Yt(t[0])]=t[1],c.e.c0?s<>>-i)+(i>-32?a<>>-(i+32))),n}function s(e,t){var n=r(e),a=e.read_shift(8,"f");return n[1].v=a,n}var i={0:{n:"BOF",f:Or},1:{n:"EOF"},2:{n:"CALCMODE"},3:{n:"CALCORDER"},4:{n:"SPLIT"},5:{n:"SYNC"},6:{n:"RANGE",f:function(e){var t={s:{c:0,r:0},e:{c:0,r:0}};return t.s.c=e.read_shift(2),t.s.r=e.read_shift(2),t.e.c=e.read_shift(2),t.e.r=e.read_shift(2),65535==t.s.c&&(t.s.c=t.e.c=t.s.r=t.e.r=0),t}},7:{n:"WINDOW1"},8:{n:"COLW1"},9:{n:"WINTWO"},10:{n:"COLW2"},11:{n:"NAME"},12:{n:"BLANK"},13:{n:"INTEGER",f:function(e,n,r){var a=t(e,0,r);return a[1].v=e.read_shift(2,"i"),a}},14:{n:"NUMBER",f:function(e,n,r){var a=t(e,0,r);return a[1].v=e.read_shift(8,"f"),a}},15:{n:"LABEL",f:n},16:{n:"FORMULA",f:function(e,n,r){var a=e.l+n,s=t(e,0,r);if(s[1].v=e.read_shift(8,"f"),r.qpro)e.l=a;else{var i=e.read_shift(2);e.l+=i}return s}},24:{n:"TABLE"},25:{n:"ORANGE"},26:{n:"PRANGE"},27:{n:"SRANGE"},28:{n:"FRANGE"},29:{n:"KRANGE1"},32:{n:"HRANGE"},35:{n:"KRANGE2"},36:{n:"PROTEC"},37:{n:"FOOTER"},38:{n:"HEADER"},39:{n:"SETUP"},40:{n:"MARGINS"},41:{n:"LABELFMT"},42:{n:"TITLES"},43:{n:"SHEETJS"},45:{n:"GRAPH"},46:{n:"NGRAPH"},47:{n:"CALCCOUNT"},48:{n:"UNFORMATTED"},49:{n:"CURSORW12"},50:{n:"WINDOW"},51:{n:"STRING",f:n},55:{n:"PASSWORD"},56:{n:"LOCKED"},60:{n:"QUERY"},61:{n:"QUERYNAME"},62:{n:"PRINT"},63:{n:"PRINTNAME"},64:{n:"GRAPH2"},65:{n:"GRAPHNAME"},66:{n:"ZOOM"},67:{n:"SYMSPLIT"},68:{n:"NSROWS"},69:{n:"NSCOLS"},70:{n:"RULER"},71:{n:"NNAME"},72:{n:"ACOMM"},73:{n:"AMACRO"},74:{n:"PARSE"},255:{n:"",f:Bt}},o={0:{n:"BOF"},1:{n:"EOF"},3:{n:"??"},4:{n:"??"},5:{n:"??"},6:{n:"??"},7:{n:"??"},9:{n:"??"},10:{n:"??"},11:{n:"??"},12:{n:"??"},14:{n:"??"},15:{n:"??"},16:{n:"??"},17:{n:"??"},18:{n:"??"},19:{n:"??"},21:{n:"??"},22:{n:"LABEL16",f:function(e,t){var n=r(e);return n[1].t="s",n[1].v=e.read_shift(t-4,"cstr"),n}},23:{n:"NUMBER17",f:a},24:{n:"NUMBER18",f:function(e,t){var n=r(e);n[1].v=e.read_shift(2);var a=n[1].v>>1;if(1&n[1].v)switch(7&a){case 1:a=500*(a>>3);break;case 2:a=(a>>3)/20;break;case 4:a=(a>>3)/2e3;break;case 6:a=(a>>3)/16;break;case 7:a=(a>>3)/64;break;default:throw"unknown NUMBER_18 encoding "+(7&a)}return n[1].v=a,n}},25:{n:"FORMULA19",f:function(e,t){var n=a(e);return e.l+=t-14,n}},26:{n:"??"},27:{n:"??"},28:{n:"??"},29:{n:"??"},30:{n:"??"},31:{n:"??"},33:{n:"??"},37:{n:"NUMBER25",f:function(e,t){var n=r(e),a=e.read_shift(4);return n[1].v=a>>6,n}},39:{n:"NUMBER27",f:s},40:{n:"FORMULA28",f:function(e,t){var n=s(e);return e.l+=t-10,n}},255:{n:"",f:Bt}};return{to_workbook:function(t,n){switch(n.type){case"base64":return e(x(g.decode(t)),n);case"binary":return e(x(t),n);case"buffer":case"array":return e(t,n)}throw"Unsupported type "+n.type}}}(),Ra=function(){var e=Ve("t"),t=Ve("rPr");function n(n){var r=n.match(e);if(!r)return{t:"s",v:""};var a={t:"s",v:Se(r[1])},s=n.match(t);return s&&(a.s=function(e){var t={},n=e.match(ye),r=0,a=!1;if(n)for(;r!=n.length;++r){var s=we(n[r]);switch(s[0].replace(/\w*:/g,"")){case"":case"":t.shadow=1;break;case"":break;case"":case"":t.outline=1;break;case"":break;case"":case"":t.strike=1;break;case"":break;case"":case"":t.u=1;break;case"":break;case"":case"":t.b=1;break;case"":break;case"":case"":t.i=1;break;case"":break;case"":case"":break;case"":a=!1;break;default:if(47!==s[0].charCodeAt(1)&&!a)throw new Error("Unrecognized rich format "+s[0])}}return t}(s[1])),a}var r=/<(?:\w+:)?r>/g,a=/<\/(?:\w+:)?r>/;return function(e){return e.replace(r,"").split(a).map(n).filter((function(e){return e.v}))}}(),Oa=function(){var e=/(\r\n|\n)/g;function t(t){var n=[[],t.v,[]];return t.v?(t.s&&function(e,t,n){var r=[];e.u&&r.push("text-decoration: underline;"),e.uval&&r.push("text-underline-style:"+e.uval+";"),e.sz&&r.push("font-size:"+e.sz+"pt;"),e.outline&&r.push("text-effect: outline;"),e.shadow&&r.push("text-shadow: auto;"),t.push(''),e.b&&(t.push(""),n.push("")),e.i&&(t.push(""),n.push("")),e.strike&&(t.push(""),n.push(""));var a=e.valign||"";"superscript"==a||"super"==a?a="sup":"subscript"==a&&(a="sub"),""!=a&&(t.push("<"+a+">"),n.push("")),n.push("")}(t.s,n[0],n[2]),n[0].join("")+n[1].replace(e,"
")+n[2].join("")):""}return function(e){return e.map(t).join("")}}(),Ma=/<(?:\w+:)?t[^>]*>([^<]*)<\/(?:\w+:)?t>/g,Ba=/<(?:\w+:)?r>/,$a=/<(?:\w+:)?rPh.*?>([\s\S]*?)<\/(?:\w+:)?rPh>/g;function Pa(e,t){var n=!t||t.cellHTML,r={};return e?(e.match(/^\s*<(?:\w+:)?t[^>]*>/)?(r.t=Se(Me(e.slice(e.indexOf(">")+1).split(/<\/(?:\w+:)?t>/)[0]||"")),r.r=Me(e),n&&(r.h=Fe(r.t))):e.match(Ba)&&(r.r=Me(e),r.t=Se(Me((e.replace($a,"").match(Ma)||[]).join("").replace(ye,""))),n&&(r.h=Oa(Ra(r.r)))),r):{t:""}}var La=/<(?:\w+:)?sst([^>]*)>([\s\S]*)<\/(?:\w+:)?sst>/,za=/<(?:\w+:)?(?:si|sstItem)>/g,Wa=/<\/(?:\w+:)?(?:si|sstItem)>/;Gn.SST="http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings";var Ua=/^\s|\s$|[\t\n\r]/;function Va(e,t){if(!t.bookSST)return"";var n=[me];n[n.length]=Ze("sst",null,{xmlns:nt.main[0],count:e.Count,uniqueCount:e.Unique});for(var r=0;r!=e.length;++r)if(null!=e[r]){var a=e[r],s="";a.r?s+=a.r:(s+=""),s+="",n[n.length]=s}return n.length>2&&(n[n.length]="",n[1]=n[1].replace("/>",">")),n.join("")}var ja=function(e,t){var n=!1;return null==t&&(n=!0,t=$t(15+4*e.t.length)),t.write_shift(1,0),on(e.t,t),n?t.slice(0,t.l):t};function Ha(e){var t=Lt();zt(t,"BrtBeginSst",function(e,t){return t||(t=$t(8)),t.write_shift(4,e.Count),t.write_shift(4,e.Unique),t}(e));for(var n=0;n=4&&(e.l+=t-4),n}function Ka(e){for(var t=e.read_shift(4),n=e.l+t-4,r={},a=e.read_shift(4),s=[];a-- >0;)s.push({t:e.read_shift(4),v:e.read_shift(0,"lpp4")});if(r.name=e.read_shift(0,"lpp4"),r.comps=s,e.l!=n)throw new Error("Bad DataSpaceMapEntry: "+e.l+" != "+n);return r}function qa(e,t){var n=e.l+t,r={};r.Flags=63&e.read_shift(4),e.l+=4,r.AlgID=e.read_shift(4);var a=!1;switch(r.AlgID){case 26126:case 26127:case 26128:a=36==r.Flags;break;case 26625:a=4==r.Flags;break;case 0:a=16==r.Flags||4==r.Flags||36==r.Flags;break;default:throw"Unrecognized encryption algorithm: "+r.AlgID}if(!a)throw new Error("Encryption Flags/AlgID mismatch");return r.AlgIDHash=e.read_shift(4),r.KeySize=e.read_shift(4),r.ProviderType=e.read_shift(4),e.l+=8,r.CSPName=e.read_shift(n-e.l>>1,"utf16le"),e.l=n,r}function Ya(e,t){var n={},r=e.l+t;return e.l+=4,n.Salt=e.slice(e.l,e.l+16),e.l+=16,n.Verifier=e.slice(e.l,e.l+16),e.l+=16,e.read_shift(4),n.VerifierHash=e.slice(e.l,r),e.l=r,n}function Ja(e){if(36!=(63&e.read_shift(4)))throw new Error("EncryptionInfo mismatch");var t=e.read_shift(4);return{t:"Std",h:qa(e,t),v:Ya(e,e.length-e.l)}}function Za(){throw new Error("File is password-protected: ECMA-376 Extensible")}function Qa(e){var t=["saltSize","blockSize","keyBits","hashSize","cipherAlgorithm","cipherChaining","hashAlgorithm","saltValue"];e.l+=4;var n=e.read_shift(e.length-e.l,"utf8"),r={};return n.replace(ye,(function(e){var n=we(e);switch(_e(n[0])){case"":break;case"":case"":break;case"":break;case"=0;--n)r=((0==(16384&r)?0:1)|r<<1&32767)^t[n];return 52811^r}var ts,ns,rs,as,ss=(ts=[187,255,255,186,255,255,185,128,0,190,15,0,191,15,0],ns=[57840,7439,52380,33984,4364,3600,61902,12606,6258,57657,54287,34041,10252,43370,20163],rs=[44796,19929,39858,10053,20106,40212,10761,31585,63170,64933,60267,50935,40399,11199,17763,35526,1453,2906,5812,11624,23248,885,1770,3540,7080,14160,28320,56640,55369,41139,20807,41614,21821,43642,17621,28485,56970,44341,19019,38038,14605,29210,60195,50791,40175,10751,21502,43004,24537,18387,36774,3949,7898,15796,31592,63184,47201,24803,49606,37805,14203,28406,56812,17824,35648,1697,3394,6788,13576,27152,43601,17539,35078,557,1114,2228,4456,30388,60776,51953,34243,7079,14158,28316,14128,28256,56512,43425,17251,34502,7597,13105,26210,52420,35241,883,1766,3532,4129,8258,16516,33032,4657,9314,18628],as=function(e,t){return 255&((n=e^t)/2|128*n);var n},function(e){for(var t,n,r,a=Ga(e),s=function(e){for(var t=ns[e.length-1],n=104,r=e.length-1;r>=0;--r)for(var a=e[r],s=0;7!=s;++s)64&a&&(t^=rs[n]),a*=2,--n;return t}(a),i=a.length,o=w(16),l=0;16!=l;++l)o[l]=0;for(1==(1&i)&&(t=s>>8,o[i]=as(ts[0],t),--i,t=255&s,n=a[a.length-1],o[i]=as(n,t));i>0;)t=s>>8,o[--i]=as(a[i],t),t=255&s,o[--i]=as(a[i],t);for(i=15,r=15-a.length;r>0;)t=s>>8,o[i]=as(ts[r],t),--r,t=255&s,o[--i]=as(a[i],t),--i,--r;return o});var is=function(){function e(e,n){switch(n.type){case"base64":return t(g.decode(e),n);case"binary":return t(e,n);case"buffer":return t(e.toString("binary"),n);case"array":return t(ee(e),n)}throw new Error("Unrecognized type "+n.type)}function t(e,t){var n=(t||{}).dense?[]:{};if(!e.match(/\\trowd/))throw new Error("RTF missing table");return n["!ref"]=Zt({s:{c:0,r:0},e:{c:0,r:0}}),n}return{to_workbook:function(t,n){return tn(e(t,n),n)},to_sheet:e,from_sheet:function(e){for(var t,n=["{\\rtf1\\ansi"],r=Qt(e["!ref"]),a=Array.isArray(e),s=r.s.r;s<=r.e.r;++s){n.push("\\trowd\\trautofit1");for(var i=r.s.c;i<=r.e.c;++i)n.push("\\cellx"+(i+1));for(n.push("\\pard\\intbl"),i=r.s.c;i<=r.e.c;++i){var o=Yt({r:s,c:i});(t=a?(e[s]||[])[i]:e[o])&&(null!=t.v||t.f&&!t.F)&&(n.push(" "+(t.w||(en(t),t.w))),n.push("\\cell"))}n.push("\\pard\\intbl\\row")}return n.join("")+"}"}}}();function os(e){for(var t=0,n=1;3!=t;++t)n=256*n+(e[t]>255?255:e[t]<0?0:e[t]);return n.toString(16).toUpperCase().slice(1)}function ls(e,t){if(0===t)return e;var n=function(e){var t=e[0]/255,n=e[1]/255,r=e[2]/255,a=Math.max(t,n,r),s=Math.min(t,n,r),i=a-s;if(0===i)return[0,0,t];var o,l=0,u=a+s;switch(o=i/(u>1?2-u:u),a){case t:l=((n-r)/i+6)%6;break;case n:l=(r-t)/i+2;break;case r:l=(t-n)/i+4}return[l/6,o,u/2]}(function(e){var t=e.slice("#"===e[0]?1:0).slice(0,6);return[parseInt(t.slice(0,2),16),parseInt(t.slice(2,4),16),parseInt(t.slice(4,6),16)]}(e));return n[2]=t<0?n[2]*(1+t):1-(1-n[2])*(1-t),os(function(e){var t,n=e[0],r=e[1],a=e[2],s=2*r*(a<.5?a:1-a),i=a-s/2,o=[i,i,i],l=6*n;if(0!==r)switch(0|l){case 0:case 6:t=s*l,o[0]+=s,o[1]+=t;break;case 1:t=s*(2-l),o[0]+=t,o[1]+=s;break;case 2:t=s*(l-2),o[1]+=s,o[2]+=t;break;case 3:t=s*(4-l),o[1]+=t,o[2]+=s;break;case 4:t=s*(l-4),o[2]+=s,o[0]+=t;break;case 5:t=s*(6-l),o[2]+=t,o[0]+=s}for(var u=0;3!=u;++u)o[u]=Math.round(255*o[u]);return o}(n))}var us=6;function cs(e){return Math.floor((e+Math.round(128/us)/256)*us)}function hs(e){return Math.floor((e-5)/us*100+.5)/100}function fs(e){return Math.round((e*us+5)/us*256)/256}function ds(e){return fs(hs(cs(e)))}function ps(e){var t=Math.abs(e-ds(e)),n=us;if(t>.005)for(us=1;us<15;++us)Math.abs(e-ds(e))<=t&&(t=Math.abs(e-ds(e)),n=us);us=n}function ms(e){e.width?(e.wpx=cs(e.width),e.wch=hs(e.wpx),e.MDW=us):e.wpx?(e.wch=hs(e.wpx),e.width=fs(e.wch),e.MDW=us):"number"==typeof e.wch&&(e.width=fs(e.wch),e.wpx=cs(e.width),e.MDW=us),e.customWidth&&delete e.customWidth}function gs(e){return 96*e/96}function ys(e){return 96*e/96}var bs,vs,ws,_s,xs,ks={None:"none",Solid:"solid",Gray50:"mediumGray",Gray75:"darkGray",Gray25:"lightGray",HorzStripe:"darkHorizontal",VertStripe:"darkVertical",ReverseDiagStripe:"darkDown",DiagStripe:"darkUp",DiagCross:"darkGrid",ThickDiagCross:"darkTrellis",ThinHorzStripe:"lightHorizontal",ThinVertStripe:"lightVertical",ThinReverseDiagStripe:"lightDown",ThinHorzCross:"lightGrid"},Es=["numFmtId","fillId","fontId","borderId","xfId"],Cs=["applyAlignment","applyBorder","applyFill","applyFont","applyNumberFormat","applyProtection","pivotButton","quotePrefix"],Ss=(bs=/<(?:\w+:)?numFmts([^>]*)>[\S\s]*?<\/(?:\w+:)?numFmts>/,vs=/<(?:\w+:)?cellXfs([^>]*)>[\S\s]*?<\/(?:\w+:)?cellXfs>/,ws=/<(?:\w+:)?fills([^>]*)>[\S\s]*?<\/(?:\w+:)?fills>/,_s=/<(?:\w+:)?fonts([^>]*)>[\S\s]*?<\/(?:\w+:)?fonts>/,xs=/<(?:\w+:)?borders([^>]*)>[\S\s]*?<\/(?:\w+:)?borders>/,function(e,t,n){var r,a={};return e?((r=(e=e.replace(//gm,"").replace(//gm,"")).match(bs))&&function(e,t,n){t.NumberFmt=[];for(var r=z(A._table),a=0;a":case"":case"":break;case"0){if(l>392){for(l=392;l>60&&null!=t.NumberFmt[l];--l);t.NumberFmt[l]=o}A.load(o,l)}break;case"":break;default:if(n.WTF)throw new Error("unrecognized "+i[0]+" in numFmts")}}}(r,a,n),(r=e.match(_s))&&function(e,t,n,r){t.Fonts=[];var a={},s=!1;(e[0].match(ye)||[]).forEach((function(e){var i=we(e);switch(_e(i[0])){case"":case"":break;case"":break;case"":case"":t.Fonts.push(a),a={};break;case"":case"":break;case"":a.bold=1;break;case"":a.italic=1;break;case"":a.underline=1;break;case"":a.strike=1;break;case"":a.outline=1;break;case"":a.shadow=1;break;case"":a.condense=1;break;case"":a.extend=1;break;case"":case"":break;case"":case"":break;case"":case"":break;case"":case"":break;case"":case"":break;case"":s=!1;break;case"":case"":break;case"":s=!1;break;default:if(r&&r.WTF&&!s)throw new Error("unrecognized "+i[0]+" in fonts")}}))}(r,a,t,n),(r=e.match(ws))&&function(e,t,n,r){t.Fills=[];var a={},s=!1;(e[0].match(ye)||[]).forEach((function(e){var n=we(e);switch(_e(n[0])){case"":case"":break;case"":case"":a={},t.Fills.push(a);break;case"":case"":break;case"":t.Fills.push(a),a={};break;case"":n.patternType&&(a.patternType=n.patternType);break;case"":case"":break;case"":case"":break;case"":case"":break;case"":case"":break;case"":case"":break;case"":case"":break;case"":s=!1;break;default:if(r&&r.WTF&&!s)throw new Error("unrecognized "+n[0]+" in fills")}}))}(r,a,0,n),(r=e.match(xs))&&function(e,t,n,r){t.Borders=[];var a={},s=!1;(e[0].match(ye)||[]).forEach((function(e){var n=we(e);switch(_e(n[0])){case"":case"":break;case"":case"":a={},n.diagonalUp&&(a.diagonalUp=Oe(n.diagonalUp)),n.diagonalDown&&(a.diagonalDown=Oe(n.diagonalDown)),t.Borders.push(a);break;case"":case"":break;case"":case"":case"":break;case"":case"":case"":break;case"":case"":case"":break;case"":case"":break;case"":case"":case"":break;case"":case"":case"":break;case"":case"":case"":break;case"":case"":case"":break;case"":case"":case"":break;case"":break;case"":case"":break;case"":case"":break;case"":s=!1;break;default:if(r&&r.WTF&&!s)throw new Error("unrecognized "+n[0]+" in borders")}}))}(r,a,0,n),(r=e.match(vs))&&function(e,t,n){var r;t.CellXf=[];var a=!1;(e[0].match(ye)||[]).forEach((function(e){var s=we(e),i=0;switch(_e(s[0])){case"":case"":case"":break;case"":for(delete(r=s)[0],i=0;i392)for(i=392;i>60;--i)if(t.NumberFmt[r.numFmtId]==t.NumberFmt[i]){r.numFmtId=i;break}t.CellXf.push(r);break;case"":break;case"":var o={};s.vertical&&(o.vertical=s.vertical),s.horizontal&&(o.horizontal=s.horizontal),null!=s.textRotation&&(o.textRotation=s.textRotation),s.indent&&(o.indent=s.indent),s.wrapText&&(o.wrapText=Oe(s.wrapText)),r.alignment=o;break;case"":case"":case"":break;case"":a=!1;break;case"":case"":break;case"":a=!1;break;default:if(n&&n.WTF&&!a)throw new Error("unrecognized "+s[0]+" in cellXfs")}}))}(r,a,n),a):a}),Ns=Ze("styleSheet",null,{xmlns:nt.main[0],"xmlns:vt":nt.vt});function Is(e,t){var n,r=[me,Ns];return e.SSF&&null!=(n=function(e){var t=[""];return[[5,8],[23,26],[41,44],[50,392]].forEach((function(n){for(var r=n[0];r<=n[1];++r)null!=e[r]&&(t[t.length]=Ze("numFmt",null,{numFmtId:r,formatCode:Ae(e[r])}))})),1===t.length?"":(t[t.length]="",t[0]=Ze("numFmts",null,{count:t.length-2}).replace("/>",">"),t.join(""))}(e.SSF))&&(r[r.length]=n),r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',(n=function(e){var t=[];return t[t.length]=Ze("cellXfs",null),e.forEach((function(e){t[t.length]=Ze("xf",null,e)})),t[t.length]="",2===t.length?"":(t[0]=Ze("cellXfs",null,{count:t.length-2}).replace("/>",">"),t.join(""))}(t.cellXfs))&&(r[r.length]=n),r[r.length]='',r[r.length]='',r[r.length]='',r.length>2&&(r[r.length]="",r[1]=r[1].replace("/>",">")),r.join("")}function As(e,t,n){n||(n=$t(6+4*t.length)),n.write_shift(2,e),on(t,n);var r=n.length>n.l?n.slice(0,n.l):n;return null==n.l&&(n.l=n.length),r}Gn.STY="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles";var Ds=U(["none","solid","mediumGray","darkGray","lightGray","darkHorizontal","darkVertical","darkDown","darkUp","darkGrid","darkTrellis","lightHorizontal","lightVertical","lightDown","lightUp","lightGrid","lightTrellis","gray125","gray0625"]),Ts=Bt;function Fs(e,t){t||(t=$t(84));var n=Ds[e.patternType];null==n&&(n=40),t.write_shift(4,n);var r=0;if(40!=n)for(Sn({auto:1},t),Sn({auto:1},t);r<12;++r)t.write_shift(4,0);else{for(;r<4;++r)t.write_shift(4,0);for(;r<12;++r)t.write_shift(4,0)}return t.length>t.l?t.slice(0,t.l):t}function Rs(e,t,n){return n||(n=$t(16)),n.write_shift(2,t||0),n.write_shift(2,e.numFmtId||0),n.write_shift(2,0),n.write_shift(2,0),n.write_shift(2,0),n.write_shift(1,0),n.write_shift(1,0),n.write_shift(1,0),n.write_shift(1,0),n.write_shift(1,0),n.write_shift(1,0),n}function Os(e,t){return t||(t=$t(10)),t.write_shift(1,0),t.write_shift(1,0),t.write_shift(4,0),t.write_shift(4,0),t}var Ms=Bt;function Bs(e,t){var n=Lt();return zt(n,"BrtBeginStyleSheet"),function(e,t){if(t){var n=0;[[5,8],[23,26],[41,44],[50,392]].forEach((function(e){for(var r=e[0];r<=e[1];++r)null!=t[r]&&++n})),0!=n&&(zt(e,"BrtBeginFmts",an(n)),[[5,8],[23,26],[41,44],[50,392]].forEach((function(n){for(var r=n[0];r<=n[1];++r)null!=t[r]&&zt(e,"BrtFmt",As(r,t[r]))})),zt(e,"BrtEndFmts"))}}(n,e.SSF),function(e){zt(e,"BrtBeginFonts",an(1)),zt(e,"BrtFont",function(e,t){t||(t=$t(153)),t.write_shift(2,20*e.sz),function(e,t){t||(t=$t(2));var n=(e.italic?2:0)|(e.strike?8:0)|(e.outline?16:0)|(e.shadow?32:0)|(e.condense?64:0)|(e.extend?128:0);t.write_shift(1,n),t.write_shift(1,0)}(e,t),t.write_shift(2,e.bold?700:400);var n=0;"superscript"==e.vertAlign?n=1:"subscript"==e.vertAlign&&(n=2),t.write_shift(2,n),t.write_shift(1,e.underline||0),t.write_shift(1,e.family||0),t.write_shift(1,e.charset||0),t.write_shift(1,0),Sn(e.color,t);var r=0;return"major"==e.scheme&&(r=1),"minor"==e.scheme&&(r=2),t.write_shift(1,r),on(e.name,t),t.length>t.l?t.slice(0,t.l):t}({sz:12,color:{theme:1},name:"Calibri",family:2,scheme:"minor"})),zt(e,"BrtEndFonts")}(n),function(e){zt(e,"BrtBeginFills",an(2)),zt(e,"BrtFill",Fs({patternType:"none"})),zt(e,"BrtFill",Fs({patternType:"gray125"})),zt(e,"BrtEndFills")}(n),function(e){zt(e,"BrtBeginBorders",an(1)),zt(e,"BrtBorder",function(e,t){return t||(t=$t(51)),t.write_shift(1,0),Os(0,t),Os(0,t),Os(0,t),Os(0,t),Os(0,t),t.length>t.l?t.slice(0,t.l):t}()),zt(e,"BrtEndBorders")}(n),function(e){zt(e,"BrtBeginCellStyleXFs",an(1)),zt(e,"BrtXF",Rs({numFmtId:0,fontId:0,fillId:0,borderId:0},65535)),zt(e,"BrtEndCellStyleXFs")}(n),function(e,t){zt(e,"BrtBeginCellXFs",an(t.length)),t.forEach((function(t){zt(e,"BrtXF",Rs(t,0))})),zt(e,"BrtEndCellXFs")}(n,t.cellXfs),function(e){zt(e,"BrtBeginStyles",an(1)),zt(e,"BrtStyle",function(e,t){return t||(t=$t(52)),t.write_shift(4,e.xfId),t.write_shift(2,1),t.write_shift(1,+e.builtinId),t.write_shift(1,0),gn(e.name||"",t),t.length>t.l?t.slice(0,t.l):t}({xfId:0,builtinId:0,name:"Normal"})),zt(e,"BrtEndStyles")}(n),function(e){zt(e,"BrtBeginDXFs",an(0)),zt(e,"BrtEndDXFs")}(n),function(e){zt(e,"BrtBeginTableStyles",function(e,t,n){var r=$t(2052);return r.write_shift(4,0),gn("TableStyleMedium9",r),gn("PivotStyleMedium4",r),r.length>r.l?r.slice(0,r.l):r}()),zt(e,"BrtEndTableStyles")}(n),zt(n,"BrtEndStyleSheet"),n.end()}Gn.THEME="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme";var $s=["","","","","","","","","","","",""];function Ps(e,t,n){t.themeElements.clrScheme=[];var r={};(e[0].match(ye)||[]).forEach((function(e){var a=we(e);switch(a[0]){case"":break;case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":"/"===a[0].charAt(1)?(t.themeElements.clrScheme[$s.indexOf(a[0])]=r,r={}):r.name=a[0].slice(3,a[0].length-1);break;default:if(n&&n.WTF)throw new Error("Unrecognized "+a[0]+" in clrScheme")}}))}function Ls(){}function zs(){}var Ws=/]*)>[\s\S]*<\/a:clrScheme>/,Us=/]*)>[\s\S]*<\/a:fontScheme>/,Vs=/]*)>[\s\S]*<\/a:fmtScheme>/,js=/]*)>[\s\S]*<\/a:themeElements>/;function Hs(e,t){if(!e||0===e.length)return Hs(Gs());var n,r={};if(!(n=e.match(js)))throw new Error("themeElements not found in theme");return function(e,t,n){var r;t.themeElements={},[["clrScheme",Ws,Ps],["fontScheme",Us,Ls],["fmtScheme",Vs,zs]].forEach((function(a){if(!(r=e.match(a[1])))throw new Error(a[0]+" not found in themeElements");a[2](r,t,n)}))}(n[0],r,t),r.raw=e,r}function Gs(e,t){if(t&&t.themeXLSX)return t.themeXLSX;if(e&&"string"==typeof e.raw)return e.raw;var n=[me];return n[n.length]='',n[n.length]="",n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]="",n[n.length]='',n[n.length]="",n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]="",n[n.length]="",n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]="",n[n.length]="",n[n.length]='',n[n.length]="",n[n.length]='',n[n.length]='',n[n.length]="",n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]="",n[n.length]='',n[n.length]="",n[n.length]='',n[n.length]="",n[n.length]='',n[n.length]='',n[n.length]="",n[n.length]='',n[n.length]="",n[n.length]="",n[n.length]="",n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]="",n[n.length]="",n[n.length]="",n[n.length]="",n[n.length]='',n[n.length]="",n[n.length]="",n[n.length]="",n[n.length]="",n[n.length]='',n[n.length]="",n[n.length]="",n[n.length]="",n[n.length]="",n[n.length]='',n[n.length]="",n[n.length]='',n[n.length]='',n[n.length]="",n[n.length]="",n[n.length]="",n[n.length]='',n[n.length]='',n[n.length]="",n[n.length]='',n[n.length]='',n[n.length]='',n[n.length]="",n[n.length]='',n[n.length]="",n[n.length]='',n[n.length]="",n[n.length]='',n[n.length]='',n[n.length]="",n[n.length]='',n[n.length]="",n[n.length]="",n[n.length]="",n[n.length]="",n[n.length]="",n[n.length]="",n[n.length]='',n[n.length]="",n[n.length]="",n[n.length]='',n[n.length]="",n[n.length]="",n[n.length]="",n[n.length]="",n.join("")}function Xs(e){var t=e.read_shift(2),n=e.read_shift(2)-4,r=[t];switch(t){case 4:case 5:case 7:case 8:case 9:case 10:case 11:case 13:r[1]=function(e){var t={};switch(t.xclrType=e.read_shift(2),t.nTintShade=e.read_shift(2),t.xclrType){case 0:e.l+=4;break;case 1:t.xclrValue=function(e,t){return Bt(e,4)}(e);break;case 2:t.xclrValue=Gr(e);break;case 3:t.xclrValue=function(e){return e.read_shift(4)}(e);break;case 4:e.l+=4}return e.l+=8,t}(e);break;case 6:r[1]=function(e,t){return Bt(e,t)}(e,n);break;case 14:case 15:r[1]=e.read_shift(1===n?1:2);break;default:throw new Error("Unrecognized ExtProp type: "+t+" "+n)}return r}Gn.IMG="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",Gn.DRAW="http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing";var Ks=1024;function qs(e,t){for(var n=[21600,21600],r=["m0,0l0",n[1],n[0],n[1],n[0],"0xe"].join(","),a=[Ze("xml",null,{"xmlns:v":"urn:schemas-microsoft-com:vml","xmlns:o":rt,"xmlns:x":at,"xmlns:mv":"http://macVmlSchemaUri"}).replace(/\/>/,">"),Ze("o:shapelayout",Ze("o:idmap",null,{"v:ext":"edit",data:e}),{"v:ext":"edit"}),Ze("v:shapetype",[Ze("v:stroke",null,{joinstyle:"miter"}),Ze("v:path",null,{gradientshapeok:"t","o:connecttype":"rect"})].join(""),{id:"_x0000_t202","o:spt":202,coordsize:n.join(","),path:r})];Ks<1e3*e;)Ks+=1e3;return t.forEach((function(e){var t=qt(e[0]),n={color2:"#BEFF82",type:"gradient"};"gradient"==n.type&&(n.angle="-180");var r="gradient"==n.type?Ze("o:fill",null,{type:"gradientUnscaled","v:ext":"view"}):null,s=Ze("v:fill",r,n);++Ks,a=a.concat(["",s,Ze("v:shadow",null,{on:"t",obscured:"t"}),Ze("v:path",null,{"o:connecttype":"none"}),'
','',"","",Ye("x:Anchor",[t.c+1,0,t.r+1,0,t.c+3,20,t.r+5,20].join(",")),Ye("x:AutoFill","False"),Ye("x:Row",String(t.r)),Ye("x:Column",String(t.c)),e[1].hidden?"":"","",""])})),a.push(""),a.join("")}Gn.CMNT="http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments";var Ys=Ze("comments",null,{xmlns:nt.main[0]});function Js(e){var t=[me,Ys],n=[];return t.push(""),e.forEach((function(e){e[1].forEach((function(e){var r=Ae(e.a);n.indexOf(r)>-1||(n.push(r),t.push(""+r+""))}))})),t.push(""),t.push(""),e.forEach((function(e){e[1].forEach((function(r){t.push(''),t.push(Ye("t",null==r.t?"":Ae(r.t))),t.push("")}))})),t.push(""),t.length>2&&(t[t.length]="",t[1]=t[1].replace("/>",">")),t.join("")}var Zs=sn;function Qs(e){var t=Lt(),n=[];return zt(t,"BrtBeginComments"),zt(t,"BrtBeginCommentAuthors"),e.forEach((function(e){e[1].forEach((function(e){n.indexOf(e.a)>-1||(n.push(e.a.slice(0,54)),zt(t,"BrtCommentAuthor",function(e){return on(e.slice(0,54))}(e.a)))}))})),zt(t,"BrtEndCommentAuthors"),zt(t,"BrtBeginCommentList"),e.forEach((function(e){e[1].forEach((function(r){r.iauthor=n.indexOf(r.a);var a={s:qt(e[0]),e:qt(e[0])};zt(t,"BrtBeginComment",function(e,t){return null==t&&(t=$t(36)),t.write_shift(4,e[1].iauthor),kn(e[0],t),t.write_shift(4,0),t.write_shift(4,0),t.write_shift(4,0),t.write_shift(4,0),t}([a,r])),r.t&&r.t.length>0&&zt(t,"BrtCommentText",function(e,t){var n=!1;return null==t&&(n=!0,t=$t(23+4*e.t.length)),t.write_shift(1,1),on(e.t,t),t.write_shift(4,1),function(e,t){t||(t=$t(4)),t.write_shift(2,e.ich||0),t.write_shift(2,e.ifnt||0)}({ich:0,ifnt:0},t),n?t.slice(0,t.l):t}(r)),zt(t,"BrtEndComment"),delete r.iauthor}))})),zt(t,"BrtEndCommentList"),zt(t,"BrtEndComments"),t.end()}var ei=["xlsb","xlsm","xlam","biff8","xla"];Gn.DS="http://schemas.openxmlformats.org/officeDocument/2006/relationships/dialogsheet",Gn.MS="http://schemas.microsoft.com/office/2006/relationships/xlMacrosheet";var ti=function(){var e=/(^|[^A-Za-z_])R(\[?-?\d+\]|[1-9]\d*|)C(\[?-?\d+\]|[1-9]\d*|)(?![A-Za-z0-9_])/g,t={r:0,c:0};function n(e,n,r,a){var s=!1,i=!1;0==r.length?i=!0:"["==r.charAt(0)&&(i=!0,r=r.slice(1,-1)),0==a.length?s=!0:"["==a.charAt(0)&&(s=!0,a=a.slice(1,-1));var o=r.length>0?0|parseInt(r,10):0,l=a.length>0?0|parseInt(a,10):0;return s?l+=t.c:--l,i?o+=t.r:--o,n+(s?"":"$")+Kt(l)+(i?"":"$")+Gt(o)}return function(r,a){return t=a,r.replace(e,n)}}(),ni=/(^|[^._A-Z0-9])([$]?)([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])([$]?)(10[0-3]\d{4}|104[0-7]\d{3}|1048[0-4]\d{2}|10485[0-6]\d|104857[0-6]|[1-9]\d{0,5})(?![_.\(A-Za-z0-9])/g,ri=function(e,t){return e.replace(ni,(function(e,n,r,a,s,i){var o=Xt(a)-(r?0:t.c),l=Ht(i)-(s?0:t.r);return n+"R"+(0==l?"":s?l+1:"["+l+"]")+"C"+(0==o?"":r?o+1:"["+o+"]")}))};function ai(e,t,n){var r=Jt(t).s,a=qt(n);return function(e,t){return e.replace(ni,(function(e,n,r,a,s,i){return n+("$"==r?r+a:Kt(Xt(a)+t.c))+("$"==s?s+i:Gt(Ht(i)+t.r))}))}(e,{r:a.r-r.r,c:a.c-r.c})}function si(e){return e.replace(/_xlfn\./g,"")}function ii(e){e.l+=1}function oi(e,t){var n=e.read_shift(1==t?1:2);return[16383&n,n>>14&1,n>>15&1]}function li(e,t,n){var r=2;if(n){if(n.biff>=2&&n.biff<=5)return ui(e);12==n.biff&&(r=4)}var a=e.read_shift(r),s=e.read_shift(r),i=oi(e,2),o=oi(e,2);return{s:{r:a,c:i[0],cRel:i[1],rRel:i[2]},e:{r:s,c:o[0],cRel:o[1],rRel:o[2]}}}function ui(e){var t=oi(e,2),n=oi(e,2),r=e.read_shift(1),a=e.read_shift(1);return{s:{r:t[0],c:r,cRel:t[1],rRel:t[2]},e:{r:n[0],c:a,cRel:n[1],rRel:n[2]}}}function ci(e,t,n){if(n&&n.biff>=2&&n.biff<=5)return function(e){var t=oi(e,2),n=e.read_shift(1);return{r:t[0],c:n,cRel:t[1],rRel:t[2]}}(e);var r=e.read_shift(n&&12==n.biff?4:2),a=oi(e,2);return{r,c:a[0],cRel:a[1],rRel:a[2]}}function hi(e){var t=e.read_shift(2),n=e.read_shift(2);return{r:t,c:255&n,fQuoted:!!(16384&n),cRel:n>>15,rRel:n>>15}}function fi(e){return[e.read_shift(1),e.read_shift(1)]}function di(e,t){var n=[e.read_shift(1)];if(12==t)switch(n[0]){case 2:n[0]=4;break;case 4:n[0]=16;break;case 0:n[0]=1;break;case 1:n[0]=2}switch(n[0]){case 4:n[1]=Fr(e,1)?"TRUE":"FALSE",12!=t&&(e.l+=7);break;case 37:case 16:n[1]=Ln[e[e.l]],e.l+=12==t?4:8;break;case 0:e.l+=8;break;case 1:n[1]=En(e);break;case 2:n[1]=Ur(e,0,{biff:t>0&&t<8?2:t});break;default:throw new Error("Bad SerAr: "+n[0])}return n}function pi(e,t,n){for(var r=e.read_shift(12==n.biff?4:2),a=[],s=0;s!=r;++s)a.push((12==n.biff?xn:Zr)(e,8));return a}function mi(e,t,n){var r=0,a=0;12==n.biff?(r=e.read_shift(4),a=e.read_shift(4)):(a=1+e.read_shift(1),r=1+e.read_shift(2)),n.biff>=2&&n.biff<8&&(--r,0==--a&&(a=256));for(var s=0,i=[];s!=r&&(i[s]=[]);++s)for(var o=0;o!=a;++o)i[s][o]=di(e,n.biff);return i}function gi(e,t,n){return e.l+=2,[hi(e)]}function yi(e){return e.l+=6,[]}var bi=gi,vi=yi,wi=yi,_i=gi;function xi(e){return e.l+=2,[Or(e),1&e.read_shift(2)]}var ki=gi,Ei=xi,Ci=yi,Si=gi,Ni=gi,Ii=["Data","All","Headers","??","?Data2","??","?DataHeaders","??","Totals","??","??","??","?DataTotals","??","??","??","?Current"],Ai={1:{n:"PtgExp",f:function(e,t,n){return e.l++,n&&12==n.biff?[e.read_shift(4,"i"),0]:[e.read_shift(2),e.read_shift(n&&2==n.biff?1:2)]}},2:{n:"PtgTbl",f:Bt},3:{n:"PtgAdd",f:ii},4:{n:"PtgSub",f:ii},5:{n:"PtgMul",f:ii},6:{n:"PtgDiv",f:ii},7:{n:"PtgPower",f:ii},8:{n:"PtgConcat",f:ii},9:{n:"PtgLt",f:ii},10:{n:"PtgLe",f:ii},11:{n:"PtgEq",f:ii},12:{n:"PtgGe",f:ii},13:{n:"PtgGt",f:ii},14:{n:"PtgNe",f:ii},15:{n:"PtgIsect",f:ii},16:{n:"PtgUnion",f:ii},17:{n:"PtgRange",f:ii},18:{n:"PtgUplus",f:ii},19:{n:"PtgUminus",f:ii},20:{n:"PtgPercent",f:ii},21:{n:"PtgParen",f:ii},22:{n:"PtgMissArg",f:ii},23:{n:"PtgStr",f:function(e,t,n){return e.l++,$r(e,0,n)}},26:{n:"PtgSheet",f:function(e,t,n){return e.l+=5,e.l+=2,e.l+=2==n.biff?1:4,["PTGSHEET"]}},27:{n:"PtgEndSheet",f:function(e,t,n){return e.l+=2==n.biff?4:5,["PTGENDSHEET"]}},28:{n:"PtgErr",f:function(e){return e.l++,Ln[e.read_shift(1)]}},29:{n:"PtgBool",f:function(e){return e.l++,0!==e.read_shift(1)}},30:{n:"PtgInt",f:function(e){return e.l++,e.read_shift(2)}},31:{n:"PtgNum",f:function(e){return e.l++,En(e)}},32:{n:"PtgArray",f:function(e,t,n){var r=(96&e[e.l++])>>5;return e.l+=2==n.biff?6:12==n.biff?14:7,[r]}},33:{n:"PtgFunc",f:function(e,t,n){var r=(96&e[e.l])>>5;e.l+=1;var a=e.read_shift(n&&n.biff<=3?1:2);return[Ji[a],Yi[a],r]}},34:{n:"PtgFuncVar",f:function(e,t,n){var r=e[e.l++],a=e.read_shift(1),s=n&&n.biff<=3?[88==r?-1:0,e.read_shift(1)]:function(e){return[e[e.l+1]>>7,32767&e.read_shift(2)]}(e);return[a,(0===s[0]?Yi:qi)[s[1]]]}},35:{n:"PtgName",f:function(e,t,n){var r=e.read_shift(1)>>>5&3,a=!n||n.biff>=8?4:2,s=e.read_shift(a);switch(n.biff){case 2:e.l+=5;break;case 3:case 4:e.l+=8;break;case 5:e.l+=12}return[r,0,s]}},36:{n:"PtgRef",f:function(e,t,n){var r=(96&e[e.l])>>5;return e.l+=1,[r,ci(e,0,n)]}},37:{n:"PtgArea",f:function(e,t,n){return[(96&e[e.l++])>>5,li(e,n.biff>=2&&n.biff,n)]}},38:{n:"PtgMemArea",f:function(e,t,n){var r=e.read_shift(1)>>>5&3;return e.l+=n&&2==n.biff?3:4,[r,e.read_shift(n&&2==n.biff?1:2)]}},39:{n:"PtgMemErr",f:Bt},40:{n:"PtgMemNoMem",f:Bt},41:{n:"PtgMemFunc",f:function(e,t,n){return[e.read_shift(1)>>>5&3,e.read_shift(n&&2==n.biff?1:2)]}},42:{n:"PtgRefErr",f:function(e,t,n){var r=e.read_shift(1)>>>5&3;return e.l+=4,n.biff<8&&e.l--,12==n.biff&&(e.l+=2),[r]}},43:{n:"PtgAreaErr",f:function(e,t,n){var r=(96&e[e.l++])>>5;return e.l+=n&&n.biff>8?12:n.biff<8?6:8,[r]}},44:{n:"PtgRefN",f:function(e,t,n){var r=(96&e[e.l])>>5;return e.l+=1,[r,function(e,t,n){var r=n&&n.biff?n.biff:8;if(r>=2&&r<=5)return function(e){var t=e.read_shift(2),n=e.read_shift(1),r=(32768&t)>>15,a=(16384&t)>>14;return t&=16383,1==r&&t>=8192&&(t-=16384),1==a&&n>=128&&(n-=256),{r:t,c:n,cRel:a,rRel:r}}(e);var a=e.read_shift(r>=12?4:2),s=e.read_shift(2),i=(16384&s)>>14,o=(32768&s)>>15;if(s&=16383,1==o)for(;a>524287;)a-=1048576;if(1==i)for(;s>8191;)s-=16384;return{r:a,c:s,cRel:i,rRel:o}}(e,0,n)]}},45:{n:"PtgAreaN",f:function(e,t,n){return[(96&e[e.l++])>>5,function(e,t,n){if(n.biff<8)return ui(e);var r=e.read_shift(12==n.biff?4:2),a=e.read_shift(12==n.biff?4:2),s=oi(e,2),i=oi(e,2);return{s:{r,c:s[0],cRel:s[1],rRel:s[2]},e:{r:a,c:i[0],cRel:i[1],rRel:i[2]}}}(e,0,n)]}},46:{n:"PtgMemAreaN",f:function(e){return[e.read_shift(1)>>>5&3,e.read_shift(2)]}},47:{n:"PtgMemNoMemN",f:function(e){return[e.read_shift(1)>>>5&3,e.read_shift(2)]}},57:{n:"PtgNameX",f:function(e,t,n){return 5==n.biff?function(e){var t=e.read_shift(1)>>>5&3,n=e.read_shift(2,"i");e.l+=8;var r=e.read_shift(2);return e.l+=12,[t,n,r]}(e):[e.read_shift(1)>>>5&3,e.read_shift(2),e.read_shift(4)]}},58:{n:"PtgRef3d",f:function(e,t,n){var r=(96&e[e.l])>>5;e.l+=1;var a=e.read_shift(2);return n&&5==n.biff&&(e.l+=12),[r,a,ci(e,0,n)]}},59:{n:"PtgArea3d",f:function(e,t,n){var r=(96&e[e.l++])>>5,a=e.read_shift(2,"i");if(n)switch(n.biff){case 5:e.l+=12}return[r,a,li(e,0,n)]}},60:{n:"PtgRefErr3d",f:function(e,t,n){var r=(96&e[e.l++])>>5,a=e.read_shift(2),s=4;if(n)switch(n.biff){case 5:s=15;break;case 12:s=6}return e.l+=s,[r,a]}},61:{n:"PtgAreaErr3d",f:function(e,t,n){var r=(96&e[e.l++])>>5,a=e.read_shift(2),s=8;if(n)switch(n.biff){case 5:e.l+=12,s=6;break;case 12:s=12}return e.l+=s,[r,a]}},255:{}},Di={64:32,96:32,65:33,97:33,66:34,98:34,67:35,99:35,68:36,100:36,69:37,101:37,70:38,102:38,71:39,103:39,72:40,104:40,73:41,105:41,74:42,106:42,75:43,107:43,76:44,108:44,77:45,109:45,78:46,110:46,79:47,111:47,88:34,120:34,89:57,121:57,90:58,122:58,91:59,123:59,92:60,124:60,93:61,125:61};!function(){for(var e in Di)Ai[e]=Ai[Di[e]]}();var Ti={1:{n:"PtgElfLel",f:xi},2:{n:"PtgElfRw",f:Si},3:{n:"PtgElfCol",f:bi},6:{n:"PtgElfRwV",f:Ni},7:{n:"PtgElfColV",f:_i},10:{n:"PtgElfRadical",f:ki},11:{n:"PtgElfRadicalS",f:Ci},13:{n:"PtgElfColS",f:vi},15:{n:"PtgElfColSV",f:wi},16:{n:"PtgElfRadicalLel",f:Ei},25:{n:"PtgList",f:function(e){e.l+=2;var t=e.read_shift(2),n=e.read_shift(2),r=e.read_shift(4),a=e.read_shift(2),s=e.read_shift(2);return{ixti:t,coltype:3&n,rt:Ii[n>>2&31],idx:r,c:a,C:s}}},29:{n:"PtgSxName",f:function(e){return e.l+=2,[e.read_shift(4)]}},255:{}},Fi={0:{n:"PtgAttrNoop",f:function(e){return e.l+=4,[0,0]}},1:{n:"PtgAttrSemi",f:function(e,t,n){var r=255&e[e.l+1]?1:0;return e.l+=n&&2==n.biff?3:4,[r]}},2:{n:"PtgAttrIf",f:function(e,t,n){var r=255&e[e.l+1]?1:0;return e.l+=2,[r,e.read_shift(n&&2==n.biff?1:2)]}},4:{n:"PtgAttrChoose",f:function(e,t,n){e.l+=2;for(var r=e.read_shift(n&&2==n.biff?1:2),a=[],s=0;s<=r;++s)a.push(e.read_shift(n&&2==n.biff?1:2));return a}},8:{n:"PtgAttrGoto",f:function(e,t,n){var r=255&e[e.l+1]?1:0;return e.l+=2,[r,e.read_shift(n&&2==n.biff?1:2)]}},16:{n:"PtgAttrSum",f:function(e,t,n){e.l+=n&&2==n.biff?3:4}},32:{n:"PtgAttrBaxcel",f:function(e){var t=1&e[e.l+1];return e.l+=4,[t,1]}},64:{n:"PtgAttrSpace",f:function(e){return e.read_shift(2),fi(e)}},65:{n:"PtgAttrSpaceSemi",f:function(e){return e.read_shift(2),fi(e)}},128:{n:"PtgAttrIfError",f:function(e){var t=255&e[e.l+1]?1:0;return e.l+=2,[t,e.read_shift(2)]}},255:{}};function Ri(e,t,n,r){if(r.biff<8)return Bt(e,t);for(var a=e.l+t,s=[],i=0;i!==n.length;++i)switch(n[i][0]){case"PtgArray":n[i][1]=mi(e,0,r),s.push(n[i][1]);break;case"PtgMemArea":n[i][2]=pi(e,n[i][1],r),s.push(n[i][2]);break;case"PtgExp":r&&12==r.biff&&(n[i][1][1]=e.read_shift(4),s.push(n[i][1]));break;case"PtgList":case"PtgElfRadicalS":case"PtgElfColS":case"PtgElfColSV":throw"Unsupported "+n[i][0]}return 0!=(t=a-e.l)&&s.push(Bt(e,t)),s}function Oi(e,t,n){for(var r,a,s=e.l+t,i=[];s!=e.l;)t=s-e.l,a=e[e.l],r=Ai[a],24!==a&&25!==a||(r=(24===a?Ti:Fi)[e[e.l+1]]),r&&r.f?i.push([r.n,r.f(e,t,n)]):Bt(e,t);return i}function Mi(e){for(var t=[],n=0;n=",PtgGt:">",PtgLe:"<=",PtgLt:"<",PtgMul:"*",PtgNe:"<>",PtgPower:"^",PtgSub:"-"},$i=new RegExp(/[^\w\u4E00-\u9FFF\u3040-\u30FF]/);function Pi(e,t,n){if(!e)return"SH33TJSERR0";if(n.biff>8&&(!e.XTI||!e.XTI[t]))return e.SheetNames[t];if(!e.XTI)return"SH33TJSERR6";var r=e.XTI[t];if(n.biff<8)return t>1e4&&(t-=65536),t<0&&(t=-t),0==t?"":e.XTI[t-1];if(!r)return"SH33TJSERR1";var a="";if(n.biff>8)switch(e[r[0]][0]){case 357:return a=-1==r[1]?"#REF":e.SheetNames[r[1]],r[1]==r[2]?a:a+":"+e.SheetNames[r[2]];case 358:return null!=n.SID?e.SheetNames[n.SID]:"SH33TJSSAME"+e[r[0]][0];case 355:default:return"SH33TJSSRC"+e[r[0]][0]}switch(e[r[0]][0][0]){case 1025:return a=-1==r[1]?"#REF":e.SheetNames[r[1]]||"SH33TJSERR3",r[1]==r[2]?a:a+":"+e.SheetNames[r[2]];case 14849:return e[r[0]].slice(1).map((function(e){return e.Name})).join(";;");default:return e[r[0]][0][3]?(a=-1==r[1]?"#REF":e[r[0]][0][3][r[1]]||"SH33TJSERR4",r[1]==r[2]?a:a+":"+e[r[0]][0][3][r[2]]):"SH33TJSERR2"}}function Li(e,t,n){return function(e,t){if(!(e||t&&t.biff<=5&&t.biff>=2))throw new Error("empty sheet name");return $i.test(e)?"'"+e+"'":e}(Pi(e,t,n),n)}function zi(e,t,n,r,a){var s,i,o,l,u=a&&a.biff||8,c={s:{c:0,r:0},e:{c:0,r:0}},h=[],f=0,d=0,p="";if(!e[0]||!e[0][0])return"";for(var m=-1,g="",y=0,b=e[0].length;y=0){switch(e[0][m][1][0]){case 0:g=ne(" ",e[0][m][1][1]);break;case 1:g=ne("\r",e[0][m][1][1]);break;default:if(g="",a.WTF)throw new Error("Unexpected PtgAttrSpaceType "+e[0][m][1][0])}i+=g,m=-1}h.push(i+Bi[v[0]]+s);break;case"PtgIsect":s=h.pop(),i=h.pop(),h.push(i+" "+s);break;case"PtgUnion":s=h.pop(),i=h.pop(),h.push(i+","+s);break;case"PtgRange":s=h.pop(),i=h.pop(),h.push(i+":"+s);break;case"PtgAttrChoose":case"PtgAttrGoto":case"PtgAttrIf":case"PtgAttrIfError":break;case"PtgRef":o=Wt(v[1][1],c,a),h.push(Vt(o,u));break;case"PtgRefN":o=n?Wt(v[1][1],n,a):v[1][1],h.push(Vt(o,u));break;case"PtgRef3d":f=v[1][1],o=Wt(v[1][2],c,a),p=Li(r,f,a),h.push(p+"!"+Vt(o,u));break;case"PtgFunc":case"PtgFuncVar":var w=v[1][0],_=v[1][1];w||(w=0);var x=0==(w&=127)?[]:h.slice(-w);h.length-=w,"User"===_&&(_=x.shift()),h.push(_+"("+x.join(",")+")");break;case"PtgBool":h.push(v[1]?"TRUE":"FALSE");break;case"PtgInt":h.push(v[1]);break;case"PtgNum":h.push(String(v[1]));break;case"PtgStr":h.push('"'+v[1].replace(/"/g,'""')+'"');break;case"PtgErr":h.push(v[1]);break;case"PtgAreaN":l=Ut(v[1][1],n?{s:n}:c,a),h.push(jt(l,a));break;case"PtgArea":l=Ut(v[1][1],c,a),h.push(jt(l,a));break;case"PtgArea3d":f=v[1][1],l=v[1][2],p=Li(r,f,a),h.push(p+"!"+jt(l,a));break;case"PtgAttrSum":h.push("SUM("+h.pop()+")");break;case"PtgAttrBaxcel":case"PtgAttrSemi":break;case"PtgName":d=v[1][2];var k=(r.names||[])[d-1]||(r[0]||[])[d],E=k?k.Name:"SH33TJSNAME"+String(d);E in Zi&&(E=Zi[E]),h.push(E);break;case"PtgNameX":var C,S=v[1][1];if(d=v[1][2],!(a.biff<=5)){var N="";if(14849==((r[S]||[])[0]||[])[0]||(1025==((r[S]||[])[0]||[])[0]?r[S][d]&&r[S][d].itab>0&&(N=r.SheetNames[r[S][d].itab-1]+"!"):N=r.SheetNames[d-1]+"!"),r[S]&&r[S][d])N+=r[S][d].Name;else if(r[0]&&r[0][d])N+=r[0][d].Name;else{var I=Pi(r,S,a).split(";;");I[d-1]?N=I[d-1]:N+="SH33TJSERRX"}h.push(N);break}S<0&&(S=-S),r[S]&&(C=r[S][d]),C||(C={Name:"SH33TJSERRY"}),h.push(C.Name);break;case"PtgParen":var A="(",D=")";if(m>=0){switch(g="",e[0][m][1][0]){case 2:A=ne(" ",e[0][m][1][1])+A;break;case 3:A=ne("\r",e[0][m][1][1])+A;break;case 4:D=ne(" ",e[0][m][1][1])+D;break;case 5:D=ne("\r",e[0][m][1][1])+D;break;default:if(a.WTF)throw new Error("Unexpected PtgAttrSpaceType "+e[0][m][1][0])}m=-1}h.push(A+h.pop()+D);break;case"PtgRefErr":case"PtgRefErr3d":h.push("#REF!");break;case"PtgExp":o={c:v[1][1],r:v[1][0]};var T={c:n.c,r:n.r};if(r.sharedf[Yt(o)]){var F=r.sharedf[Yt(o)];h.push(zi(F,0,T,r,a))}else{var R=!1;for(s=0;s!=r.arrayf.length;++s)if(i=r.arrayf[s],!(o.ci[0].e.c||o.ri[0].e.r)){h.push(zi(i[1],0,T,r,a)),R=!0;break}R||h.push(v[1])}break;case"PtgArray":h.push("{"+Mi(v[1])+"}");break;case"PtgMemArea":break;case"PtgAttrSpace":case"PtgAttrSpaceSemi":m=y;break;case"PtgTbl":case"PtgMemErr":break;case"PtgMissArg":h.push("");break;case"PtgAreaErr":case"PtgAreaErr3d":h.push("#REF!");break;case"PtgList":h.push("Table"+v[1].idx+"[#"+v[1].rt+"]");break;case"PtgMemAreaN":case"PtgMemNoMemN":case"PtgAttrNoop":case"PtgSheet":case"PtgEndSheet":case"PtgMemFunc":case"PtgMemNoMem":break;case"PtgElfCol":case"PtgElfColS":case"PtgElfColSV":case"PtgElfColV":case"PtgElfLel":case"PtgElfRadical":case"PtgElfRadicalLel":case"PtgElfRadicalS":case"PtgElfRw":case"PtgElfRwV":throw new Error("Unsupported ELFs");case"PtgSxName":default:throw new Error("Unrecognized Formula Token: "+String(v))}if(3!=a.biff&&m>=0&&-1==["PtgAttrSpace","PtgAttrSpaceSemi","PtgAttrGoto"].indexOf(e[0][y][0])){var O=!0;switch((v=e[0][m])[1][0]){case 4:O=!1;case 0:g=ne(" ",v[1][1]);break;case 5:O=!1;case 1:g=ne("\r",v[1][1]);break;default:if(g="",a.WTF)throw new Error("Unexpected PtgAttrSpaceType "+v[1][0])}h.push((O?g:"")+h.pop()+(O?"":g)),m=-1}}if(h.length>1&&a.WTF)throw new Error("bad formula stack");return h[0]}function Wi(e,t,n){var r,a=e.l+t,s=2==n.biff?1:2,i=e.read_shift(s);if(65535==i)return[[],Bt(e,t-2)];var o=Oi(e,i,n);return t!==i+s&&(r=Ri(e,t-i-s,o,n)),e.l=a,[o,r]}function Ui(e,t,n){var r,a=e.l+t,s=e.read_shift(2),i=Oi(e,s,n);return 65535==s?[[],Bt(e,t-2)]:(t!==s+2&&(r=Ri(e,a-s-2,i,n)),[i,r])}function Vi(e,t,n){var r=e.l+t,a=Kr(e);2==n.biff&&++e.l;var s=function(e){var t;if(65535!==St(e,e.l+6))return[En(e),"n"];switch(e[e.l]){case 0:return e.l+=8,["String","s"];case 1:return t=1===e[e.l+2],e.l+=8,[t,"b"];case 2:return t=e[e.l+2],e.l+=8,[t,"e"];case 3:return e.l+=8,["","s"]}return[]}(e),i=e.read_shift(1);2!=n.biff&&(e.read_shift(1),n.biff>=5&&e.read_shift(4));var o=function(e,t,n){var r,a=e.l+t,s=2==n.biff?1:2,i=e.read_shift(s);if(65535==i)return[[],Bt(e,t-2)];var o=Oi(e,i,n);return t!==i+s&&(r=Ri(e,t-i-s,o,n)),e.l=a,[o,r]}(e,r-e.l,n);return{cell:a,val:s[0],formula:o,shared:i>>3&1,tt:s[1]}}function ji(e,t,n){var r=e.read_shift(4),a=Oi(e,r,n),s=e.read_shift(4);return[a,s>0?Ri(e,s,a,n):null]}var Hi=ji,Gi=ji,Xi=ji,Ki=ji,qi={0:"BEEP",1:"OPEN",2:"OPEN.LINKS",3:"CLOSE.ALL",4:"SAVE",5:"SAVE.AS",6:"FILE.DELETE",7:"PAGE.SETUP",8:"PRINT",9:"PRINTER.SETUP",10:"QUIT",11:"NEW.WINDOW",12:"ARRANGE.ALL",13:"WINDOW.SIZE",14:"WINDOW.MOVE",15:"FULL",16:"CLOSE",17:"RUN",22:"SET.PRINT.AREA",23:"SET.PRINT.TITLES",24:"SET.PAGE.BREAK",25:"REMOVE.PAGE.BREAK",26:"FONT",27:"DISPLAY",28:"PROTECT.DOCUMENT",29:"PRECISION",30:"A1.R1C1",31:"CALCULATE.NOW",32:"CALCULATION",34:"DATA.FIND",35:"EXTRACT",36:"DATA.DELETE",37:"SET.DATABASE",38:"SET.CRITERIA",39:"SORT",40:"DATA.SERIES",41:"TABLE",42:"FORMAT.NUMBER",43:"ALIGNMENT",44:"STYLE",45:"BORDER",46:"CELL.PROTECTION",47:"COLUMN.WIDTH",48:"UNDO",49:"CUT",50:"COPY",51:"PASTE",52:"CLEAR",53:"PASTE.SPECIAL",54:"EDIT.DELETE",55:"INSERT",56:"FILL.RIGHT",57:"FILL.DOWN",61:"DEFINE.NAME",62:"CREATE.NAMES",63:"FORMULA.GOTO",64:"FORMULA.FIND",65:"SELECT.LAST.CELL",66:"SHOW.ACTIVE.CELL",67:"GALLERY.AREA",68:"GALLERY.BAR",69:"GALLERY.COLUMN",70:"GALLERY.LINE",71:"GALLERY.PIE",72:"GALLERY.SCATTER",73:"COMBINATION",74:"PREFERRED",75:"ADD.OVERLAY",76:"GRIDLINES",77:"SET.PREFERRED",78:"AXES",79:"LEGEND",80:"ATTACH.TEXT",81:"ADD.ARROW",82:"SELECT.CHART",83:"SELECT.PLOT.AREA",84:"PATTERNS",85:"MAIN.CHART",86:"OVERLAY",87:"SCALE",88:"FORMAT.LEGEND",89:"FORMAT.TEXT",90:"EDIT.REPEAT",91:"PARSE",92:"JUSTIFY",93:"HIDE",94:"UNHIDE",95:"WORKSPACE",96:"FORMULA",97:"FORMULA.FILL",98:"FORMULA.ARRAY",99:"DATA.FIND.NEXT",100:"DATA.FIND.PREV",101:"FORMULA.FIND.NEXT",102:"FORMULA.FIND.PREV",103:"ACTIVATE",104:"ACTIVATE.NEXT",105:"ACTIVATE.PREV",106:"UNLOCKED.NEXT",107:"UNLOCKED.PREV",108:"COPY.PICTURE",109:"SELECT",110:"DELETE.NAME",111:"DELETE.FORMAT",112:"VLINE",113:"HLINE",114:"VPAGE",115:"HPAGE",116:"VSCROLL",117:"HSCROLL",118:"ALERT",119:"NEW",120:"CANCEL.COPY",121:"SHOW.CLIPBOARD",122:"MESSAGE",124:"PASTE.LINK",125:"APP.ACTIVATE",126:"DELETE.ARROW",127:"ROW.HEIGHT",128:"FORMAT.MOVE",129:"FORMAT.SIZE",130:"FORMULA.REPLACE",131:"SEND.KEYS",132:"SELECT.SPECIAL",133:"APPLY.NAMES",134:"REPLACE.FONT",135:"FREEZE.PANES",136:"SHOW.INFO",137:"SPLIT",138:"ON.WINDOW",139:"ON.DATA",140:"DISABLE.INPUT",142:"OUTLINE",143:"LIST.NAMES",144:"FILE.CLOSE",145:"SAVE.WORKBOOK",146:"DATA.FORM",147:"COPY.CHART",148:"ON.TIME",149:"WAIT",150:"FORMAT.FONT",151:"FILL.UP",152:"FILL.LEFT",153:"DELETE.OVERLAY",155:"SHORT.MENUS",159:"SET.UPDATE.STATUS",161:"COLOR.PALETTE",162:"DELETE.STYLE",163:"WINDOW.RESTORE",164:"WINDOW.MAXIMIZE",166:"CHANGE.LINK",167:"CALCULATE.DOCUMENT",168:"ON.KEY",169:"APP.RESTORE",170:"APP.MOVE",171:"APP.SIZE",172:"APP.MINIMIZE",173:"APP.MAXIMIZE",174:"BRING.TO.FRONT",175:"SEND.TO.BACK",185:"MAIN.CHART.TYPE",186:"OVERLAY.CHART.TYPE",187:"SELECT.END",188:"OPEN.MAIL",189:"SEND.MAIL",190:"STANDARD.FONT",191:"CONSOLIDATE",192:"SORT.SPECIAL",193:"GALLERY.3D.AREA",194:"GALLERY.3D.COLUMN",195:"GALLERY.3D.LINE",196:"GALLERY.3D.PIE",197:"VIEW.3D",198:"GOAL.SEEK",199:"WORKGROUP",200:"FILL.GROUP",201:"UPDATE.LINK",202:"PROMOTE",203:"DEMOTE",204:"SHOW.DETAIL",206:"UNGROUP",207:"OBJECT.PROPERTIES",208:"SAVE.NEW.OBJECT",209:"SHARE",210:"SHARE.NAME",211:"DUPLICATE",212:"APPLY.STYLE",213:"ASSIGN.TO.OBJECT",214:"OBJECT.PROTECTION",215:"HIDE.OBJECT",216:"SET.EXTRACT",217:"CREATE.PUBLISHER",218:"SUBSCRIBE.TO",219:"ATTRIBUTES",220:"SHOW.TOOLBAR",222:"PRINT.PREVIEW",223:"EDIT.COLOR",224:"SHOW.LEVELS",225:"FORMAT.MAIN",226:"FORMAT.OVERLAY",227:"ON.RECALC",228:"EDIT.SERIES",229:"DEFINE.STYLE",240:"LINE.PRINT",243:"ENTER.DATA",249:"GALLERY.RADAR",250:"MERGE.STYLES",251:"EDITION.OPTIONS",252:"PASTE.PICTURE",253:"PASTE.PICTURE.LINK",254:"SPELLING",256:"ZOOM",259:"INSERT.OBJECT",260:"WINDOW.MINIMIZE",265:"SOUND.NOTE",266:"SOUND.PLAY",267:"FORMAT.SHAPE",268:"EXTEND.POLYGON",269:"FORMAT.AUTO",272:"GALLERY.3D.BAR",273:"GALLERY.3D.SURFACE",274:"FILL.AUTO",276:"CUSTOMIZE.TOOLBAR",277:"ADD.TOOL",278:"EDIT.OBJECT",279:"ON.DOUBLECLICK",280:"ON.ENTRY",281:"WORKBOOK.ADD",282:"WORKBOOK.MOVE",283:"WORKBOOK.COPY",284:"WORKBOOK.OPTIONS",285:"SAVE.WORKSPACE",288:"CHART.WIZARD",289:"DELETE.TOOL",290:"MOVE.TOOL",291:"WORKBOOK.SELECT",292:"WORKBOOK.ACTIVATE",293:"ASSIGN.TO.TOOL",295:"COPY.TOOL",296:"RESET.TOOL",297:"CONSTRAIN.NUMERIC",298:"PASTE.TOOL",302:"WORKBOOK.NEW",305:"SCENARIO.CELLS",306:"SCENARIO.DELETE",307:"SCENARIO.ADD",308:"SCENARIO.EDIT",309:"SCENARIO.SHOW",310:"SCENARIO.SHOW.NEXT",311:"SCENARIO.SUMMARY",312:"PIVOT.TABLE.WIZARD",313:"PIVOT.FIELD.PROPERTIES",314:"PIVOT.FIELD",315:"PIVOT.ITEM",316:"PIVOT.ADD.FIELDS",318:"OPTIONS.CALCULATION",319:"OPTIONS.EDIT",320:"OPTIONS.VIEW",321:"ADDIN.MANAGER",322:"MENU.EDITOR",323:"ATTACH.TOOLBARS",324:"VBAActivate",325:"OPTIONS.CHART",328:"VBA.INSERT.FILE",330:"VBA.PROCEDURE.DEFINITION",336:"ROUTING.SLIP",338:"ROUTE.DOCUMENT",339:"MAIL.LOGON",342:"INSERT.PICTURE",343:"EDIT.TOOL",344:"GALLERY.DOUGHNUT",350:"CHART.TREND",352:"PIVOT.ITEM.PROPERTIES",354:"WORKBOOK.INSERT",355:"OPTIONS.TRANSITION",356:"OPTIONS.GENERAL",370:"FILTER.ADVANCED",373:"MAIL.ADD.MAILER",374:"MAIL.DELETE.MAILER",375:"MAIL.REPLY",376:"MAIL.REPLY.ALL",377:"MAIL.FORWARD",378:"MAIL.NEXT.LETTER",379:"DATA.LABEL",380:"INSERT.TITLE",381:"FONT.PROPERTIES",382:"MACRO.OPTIONS",383:"WORKBOOK.HIDE",384:"WORKBOOK.UNHIDE",385:"WORKBOOK.DELETE",386:"WORKBOOK.NAME",388:"GALLERY.CUSTOM",390:"ADD.CHART.AUTOFORMAT",391:"DELETE.CHART.AUTOFORMAT",392:"CHART.ADD.DATA",393:"AUTO.OUTLINE",394:"TAB.ORDER",395:"SHOW.DIALOG",396:"SELECT.ALL",397:"UNGROUP.SHEETS",398:"SUBTOTAL.CREATE",399:"SUBTOTAL.REMOVE",400:"RENAME.OBJECT",412:"WORKBOOK.SCROLL",413:"WORKBOOK.NEXT",414:"WORKBOOK.PREV",415:"WORKBOOK.TAB.SPLIT",416:"FULL.SCREEN",417:"WORKBOOK.PROTECT",420:"SCROLLBAR.PROPERTIES",421:"PIVOT.SHOW.PAGES",422:"TEXT.TO.COLUMNS",423:"FORMAT.CHARTTYPE",424:"LINK.FORMAT",425:"TRACER.DISPLAY",430:"TRACER.NAVIGATE",431:"TRACER.CLEAR",432:"TRACER.ERROR",433:"PIVOT.FIELD.GROUP",434:"PIVOT.FIELD.UNGROUP",435:"CHECKBOX.PROPERTIES",436:"LABEL.PROPERTIES",437:"LISTBOX.PROPERTIES",438:"EDITBOX.PROPERTIES",439:"PIVOT.REFRESH",440:"LINK.COMBO",441:"OPEN.TEXT",442:"HIDE.DIALOG",443:"SET.DIALOG.FOCUS",444:"ENABLE.OBJECT",445:"PUSHBUTTON.PROPERTIES",446:"SET.DIALOG.DEFAULT",447:"FILTER",448:"FILTER.SHOW.ALL",449:"CLEAR.OUTLINE",450:"FUNCTION.WIZARD",451:"ADD.LIST.ITEM",452:"SET.LIST.ITEM",453:"REMOVE.LIST.ITEM",454:"SELECT.LIST.ITEM",455:"SET.CONTROL.VALUE",456:"SAVE.COPY.AS",458:"OPTIONS.LISTS.ADD",459:"OPTIONS.LISTS.DELETE",460:"SERIES.AXES",461:"SERIES.X",462:"SERIES.Y",463:"ERRORBAR.X",464:"ERRORBAR.Y",465:"FORMAT.CHART",466:"SERIES.ORDER",467:"MAIL.LOGOFF",468:"CLEAR.ROUTING.SLIP",469:"APP.ACTIVATE.MICROSOFT",470:"MAIL.EDIT.MAILER",471:"ON.SHEET",472:"STANDARD.WIDTH",473:"SCENARIO.MERGE",474:"SUMMARY.INFO",475:"FIND.FILE",476:"ACTIVE.CELL.FONT",477:"ENABLE.TIPWIZARD",478:"VBA.MAKE.ADDIN",480:"INSERTDATATABLE",481:"WORKGROUP.OPTIONS",482:"MAIL.SEND.MAILER",485:"AUTOCORRECT",489:"POST.DOCUMENT",491:"PICKLIST",493:"VIEW.SHOW",494:"VIEW.DEFINE",495:"VIEW.DELETE",509:"SHEET.BACKGROUND",510:"INSERT.MAP.OBJECT",511:"OPTIONS.MENONO",517:"MSOCHECKS",518:"NORMAL",519:"LAYOUT",520:"RM.PRINT.AREA",521:"CLEAR.PRINT.AREA",522:"ADD.PRINT.AREA",523:"MOVE.BRK",545:"HIDECURR.NOTE",546:"HIDEALL.NOTES",547:"DELETE.NOTE",548:"TRAVERSE.NOTES",549:"ACTIVATE.NOTES",620:"PROTECT.REVISIONS",621:"UNPROTECT.REVISIONS",647:"OPTIONS.ME",653:"WEB.PUBLISH",667:"NEWWEBQUERY",673:"PIVOT.TABLE.CHART",753:"OPTIONS.SAVE",755:"OPTIONS.SPELL",808:"HIDEALL.INKANNOTS"},Yi={0:"COUNT",1:"IF",2:"ISNA",3:"ISERROR",4:"SUM",5:"AVERAGE",6:"MIN",7:"MAX",8:"ROW",9:"COLUMN",10:"NA",11:"NPV",12:"STDEV",13:"DOLLAR",14:"FIXED",15:"SIN",16:"COS",17:"TAN",18:"ATAN",19:"PI",20:"SQRT",21:"EXP",22:"LN",23:"LOG10",24:"ABS",25:"INT",26:"SIGN",27:"ROUND",28:"LOOKUP",29:"INDEX",30:"REPT",31:"MID",32:"LEN",33:"VALUE",34:"TRUE",35:"FALSE",36:"AND",37:"OR",38:"NOT",39:"MOD",40:"DCOUNT",41:"DSUM",42:"DAVERAGE",43:"DMIN",44:"DMAX",45:"DSTDEV",46:"VAR",47:"DVAR",48:"TEXT",49:"LINEST",50:"TREND",51:"LOGEST",52:"GROWTH",53:"GOTO",54:"HALT",55:"RETURN",56:"PV",57:"FV",58:"NPER",59:"PMT",60:"RATE",61:"MIRR",62:"IRR",63:"RAND",64:"MATCH",65:"DATE",66:"TIME",67:"DAY",68:"MONTH",69:"YEAR",70:"WEEKDAY",71:"HOUR",72:"MINUTE",73:"SECOND",74:"NOW",75:"AREAS",76:"ROWS",77:"COLUMNS",78:"OFFSET",79:"ABSREF",80:"RELREF",81:"ARGUMENT",82:"SEARCH",83:"TRANSPOSE",84:"ERROR",85:"STEP",86:"TYPE",87:"ECHO",88:"SET.NAME",89:"CALLER",90:"DEREF",91:"WINDOWS",92:"SERIES",93:"DOCUMENTS",94:"ACTIVE.CELL",95:"SELECTION",96:"RESULT",97:"ATAN2",98:"ASIN",99:"ACOS",100:"CHOOSE",101:"HLOOKUP",102:"VLOOKUP",103:"LINKS",104:"INPUT",105:"ISREF",106:"GET.FORMULA",107:"GET.NAME",108:"SET.VALUE",109:"LOG",110:"EXEC",111:"CHAR",112:"LOWER",113:"UPPER",114:"PROPER",115:"LEFT",116:"RIGHT",117:"EXACT",118:"TRIM",119:"REPLACE",120:"SUBSTITUTE",121:"CODE",122:"NAMES",123:"DIRECTORY",124:"FIND",125:"CELL",126:"ISERR",127:"ISTEXT",128:"ISNUMBER",129:"ISBLANK",130:"T",131:"N",132:"FOPEN",133:"FCLOSE",134:"FSIZE",135:"FREADLN",136:"FREAD",137:"FWRITELN",138:"FWRITE",139:"FPOS",140:"DATEVALUE",141:"TIMEVALUE",142:"SLN",143:"SYD",144:"DDB",145:"GET.DEF",146:"REFTEXT",147:"TEXTREF",148:"INDIRECT",149:"REGISTER",150:"CALL",151:"ADD.BAR",152:"ADD.MENU",153:"ADD.COMMAND",154:"ENABLE.COMMAND",155:"CHECK.COMMAND",156:"RENAME.COMMAND",157:"SHOW.BAR",158:"DELETE.MENU",159:"DELETE.COMMAND",160:"GET.CHART.ITEM",161:"DIALOG.BOX",162:"CLEAN",163:"MDETERM",164:"MINVERSE",165:"MMULT",166:"FILES",167:"IPMT",168:"PPMT",169:"COUNTA",170:"CANCEL.KEY",171:"FOR",172:"WHILE",173:"BREAK",174:"NEXT",175:"INITIATE",176:"REQUEST",177:"POKE",178:"EXECUTE",179:"TERMINATE",180:"RESTART",181:"HELP",182:"GET.BAR",183:"PRODUCT",184:"FACT",185:"GET.CELL",186:"GET.WORKSPACE",187:"GET.WINDOW",188:"GET.DOCUMENT",189:"DPRODUCT",190:"ISNONTEXT",191:"GET.NOTE",192:"NOTE",193:"STDEVP",194:"VARP",195:"DSTDEVP",196:"DVARP",197:"TRUNC",198:"ISLOGICAL",199:"DCOUNTA",200:"DELETE.BAR",201:"UNREGISTER",204:"USDOLLAR",205:"FINDB",206:"SEARCHB",207:"REPLACEB",208:"LEFTB",209:"RIGHTB",210:"MIDB",211:"LENB",212:"ROUNDUP",213:"ROUNDDOWN",214:"ASC",215:"DBCS",216:"RANK",219:"ADDRESS",220:"DAYS360",221:"TODAY",222:"VDB",223:"ELSE",224:"ELSE.IF",225:"END.IF",226:"FOR.CELL",227:"MEDIAN",228:"SUMPRODUCT",229:"SINH",230:"COSH",231:"TANH",232:"ASINH",233:"ACOSH",234:"ATANH",235:"DGET",236:"CREATE.OBJECT",237:"VOLATILE",238:"LAST.ERROR",239:"CUSTOM.UNDO",240:"CUSTOM.REPEAT",241:"FORMULA.CONVERT",242:"GET.LINK.INFO",243:"TEXT.BOX",244:"INFO",245:"GROUP",246:"GET.OBJECT",247:"DB",248:"PAUSE",251:"RESUME",252:"FREQUENCY",253:"ADD.TOOLBAR",254:"DELETE.TOOLBAR",255:"User",256:"RESET.TOOLBAR",257:"EVALUATE",258:"GET.TOOLBAR",259:"GET.TOOL",260:"SPELLING.CHECK",261:"ERROR.TYPE",262:"APP.TITLE",263:"WINDOW.TITLE",264:"SAVE.TOOLBAR",265:"ENABLE.TOOL",266:"PRESS.TOOL",267:"REGISTER.ID",268:"GET.WORKBOOK",269:"AVEDEV",270:"BETADIST",271:"GAMMALN",272:"BETAINV",273:"BINOMDIST",274:"CHIDIST",275:"CHIINV",276:"COMBIN",277:"CONFIDENCE",278:"CRITBINOM",279:"EVEN",280:"EXPONDIST",281:"FDIST",282:"FINV",283:"FISHER",284:"FISHERINV",285:"FLOOR",286:"GAMMADIST",287:"GAMMAINV",288:"CEILING",289:"HYPGEOMDIST",290:"LOGNORMDIST",291:"LOGINV",292:"NEGBINOMDIST",293:"NORMDIST",294:"NORMSDIST",295:"NORMINV",296:"NORMSINV",297:"STANDARDIZE",298:"ODD",299:"PERMUT",300:"POISSON",301:"TDIST",302:"WEIBULL",303:"SUMXMY2",304:"SUMX2MY2",305:"SUMX2PY2",306:"CHITEST",307:"CORREL",308:"COVAR",309:"FORECAST",310:"FTEST",311:"INTERCEPT",312:"PEARSON",313:"RSQ",314:"STEYX",315:"SLOPE",316:"TTEST",317:"PROB",318:"DEVSQ",319:"GEOMEAN",320:"HARMEAN",321:"SUMSQ",322:"KURT",323:"SKEW",324:"ZTEST",325:"LARGE",326:"SMALL",327:"QUARTILE",328:"PERCENTILE",329:"PERCENTRANK",330:"MODE",331:"TRIMMEAN",332:"TINV",334:"MOVIE.COMMAND",335:"GET.MOVIE",336:"CONCATENATE",337:"POWER",338:"PIVOT.ADD.DATA",339:"GET.PIVOT.TABLE",340:"GET.PIVOT.FIELD",341:"GET.PIVOT.ITEM",342:"RADIANS",343:"DEGREES",344:"SUBTOTAL",345:"SUMIF",346:"COUNTIF",347:"COUNTBLANK",348:"SCENARIO.GET",349:"OPTIONS.LISTS.GET",350:"ISPMT",351:"DATEDIF",352:"DATESTRING",353:"NUMBERSTRING",354:"ROMAN",355:"OPEN.DIALOG",356:"SAVE.DIALOG",357:"VIEW.GET",358:"GETPIVOTDATA",359:"HYPERLINK",360:"PHONETIC",361:"AVERAGEA",362:"MAXA",363:"MINA",364:"STDEVPA",365:"VARPA",366:"STDEVA",367:"VARA",368:"BAHTTEXT",369:"THAIDAYOFWEEK",370:"THAIDIGIT",371:"THAIMONTHOFYEAR",372:"THAINUMSOUND",373:"THAINUMSTRING",374:"THAISTRINGLENGTH",375:"ISTHAIDIGIT",376:"ROUNDBAHTDOWN",377:"ROUNDBAHTUP",378:"THAIYEAR",379:"RTD",380:"CUBEVALUE",381:"CUBEMEMBER",382:"CUBEMEMBERPROPERTY",383:"CUBERANKEDMEMBER",384:"HEX2BIN",385:"HEX2DEC",386:"HEX2OCT",387:"DEC2BIN",388:"DEC2HEX",389:"DEC2OCT",390:"OCT2BIN",391:"OCT2HEX",392:"OCT2DEC",393:"BIN2DEC",394:"BIN2OCT",395:"BIN2HEX",396:"IMSUB",397:"IMDIV",398:"IMPOWER",399:"IMABS",400:"IMSQRT",401:"IMLN",402:"IMLOG2",403:"IMLOG10",404:"IMSIN",405:"IMCOS",406:"IMEXP",407:"IMARGUMENT",408:"IMCONJUGATE",409:"IMAGINARY",410:"IMREAL",411:"COMPLEX",412:"IMSUM",413:"IMPRODUCT",414:"SERIESSUM",415:"FACTDOUBLE",416:"SQRTPI",417:"QUOTIENT",418:"DELTA",419:"GESTEP",420:"ISEVEN",421:"ISODD",422:"MROUND",423:"ERF",424:"ERFC",425:"BESSELJ",426:"BESSELK",427:"BESSELY",428:"BESSELI",429:"XIRR",430:"XNPV",431:"PRICEMAT",432:"YIELDMAT",433:"INTRATE",434:"RECEIVED",435:"DISC",436:"PRICEDISC",437:"YIELDDISC",438:"TBILLEQ",439:"TBILLPRICE",440:"TBILLYIELD",441:"PRICE",442:"YIELD",443:"DOLLARDE",444:"DOLLARFR",445:"NOMINAL",446:"EFFECT",447:"CUMPRINC",448:"CUMIPMT",449:"EDATE",450:"EOMONTH",451:"YEARFRAC",452:"COUPDAYBS",453:"COUPDAYS",454:"COUPDAYSNC",455:"COUPNCD",456:"COUPNUM",457:"COUPPCD",458:"DURATION",459:"MDURATION",460:"ODDLPRICE",461:"ODDLYIELD",462:"ODDFPRICE",463:"ODDFYIELD",464:"RANDBETWEEN",465:"WEEKNUM",466:"AMORDEGRC",467:"AMORLINC",468:"CONVERT",724:"SHEETJS",469:"ACCRINT",470:"ACCRINTM",471:"WORKDAY",472:"NETWORKDAYS",473:"GCD",474:"MULTINOMIAL",475:"LCM",476:"FVSCHEDULE",477:"CUBEKPIMEMBER",478:"CUBESET",479:"CUBESETCOUNT",480:"IFERROR",481:"COUNTIFS",482:"SUMIFS",483:"AVERAGEIF",484:"AVERAGEIFS"},Ji={2:1,3:1,10:0,15:1,16:1,17:1,18:1,19:0,20:1,21:1,22:1,23:1,24:1,25:1,26:1,27:2,30:2,31:3,32:1,33:1,34:0,35:0,38:1,39:2,40:3,41:3,42:3,43:3,44:3,45:3,47:3,48:2,53:1,61:3,63:0,65:3,66:3,67:1,68:1,69:1,70:1,71:1,72:1,73:1,74:0,75:1,76:1,77:1,79:2,80:2,83:1,85:0,86:1,89:0,90:1,94:0,95:0,97:2,98:1,99:1,101:3,102:3,105:1,106:1,108:2,111:1,112:1,113:1,114:1,117:2,118:1,119:4,121:1,126:1,127:1,128:1,129:1,130:1,131:1,133:1,134:1,135:1,136:2,137:2,138:2,140:1,141:1,142:3,143:4,144:4,161:1,162:1,163:1,164:1,165:2,172:1,175:2,176:2,177:3,178:2,179:1,184:1,186:1,189:3,190:1,195:3,196:3,197:1,198:1,199:3,201:1,207:4,210:3,211:1,212:2,213:2,214:1,215:1,225:0,229:1,230:1,231:1,232:1,233:1,234:1,235:3,244:1,247:4,252:2,257:1,261:1,271:1,273:4,274:2,275:2,276:2,277:3,278:3,279:1,280:3,281:3,282:3,283:1,284:1,285:2,286:4,287:3,288:2,289:4,290:3,291:3,292:3,293:4,294:1,295:3,296:1,297:3,298:1,299:2,300:3,301:3,302:4,303:2,304:2,305:2,306:2,307:2,308:2,309:3,310:2,311:2,312:2,313:2,314:2,315:2,316:4,325:2,326:2,327:2,328:2,331:2,332:2,337:2,342:1,343:1,346:2,347:1,350:4,351:3,352:1,353:2,360:1,368:1,369:1,370:1,371:1,372:1,373:1,374:1,375:1,376:1,377:1,378:1,382:3,385:1,392:1,393:1,396:2,397:2,398:2,399:1,400:1,401:1,402:1,403:1,404:1,405:1,406:1,407:1,408:1,409:1,410:1,414:4,415:1,416:1,417:2,420:1,421:1,422:2,424:1,425:2,426:2,427:2,428:2,430:3,438:3,439:3,440:3,443:2,444:2,445:2,446:2,447:6,448:6,449:2,450:2,464:2,468:3,476:2,479:1,480:2,65535:0},Zi={"_xlfn.ACOT":"ACOT","_xlfn.ACOTH":"ACOTH","_xlfn.AGGREGATE":"AGGREGATE","_xlfn.ARABIC":"ARABIC","_xlfn.AVERAGEIF":"AVERAGEIF","_xlfn.AVERAGEIFS":"AVERAGEIFS","_xlfn.BASE":"BASE","_xlfn.BETA.DIST":"BETA.DIST","_xlfn.BETA.INV":"BETA.INV","_xlfn.BINOM.DIST":"BINOM.DIST","_xlfn.BINOM.DIST.RANGE":"BINOM.DIST.RANGE","_xlfn.BINOM.INV":"BINOM.INV","_xlfn.BITAND":"BITAND","_xlfn.BITLSHIFT":"BITLSHIFT","_xlfn.BITOR":"BITOR","_xlfn.BITRSHIFT":"BITRSHIFT","_xlfn.BITXOR":"BITXOR","_xlfn.CEILING.MATH":"CEILING.MATH","_xlfn.CEILING.PRECISE":"CEILING.PRECISE","_xlfn.CHISQ.DIST":"CHISQ.DIST","_xlfn.CHISQ.DIST.RT":"CHISQ.DIST.RT","_xlfn.CHISQ.INV":"CHISQ.INV","_xlfn.CHISQ.INV.RT":"CHISQ.INV.RT","_xlfn.CHISQ.TEST":"CHISQ.TEST","_xlfn.COMBINA":"COMBINA","_xlfn.CONCAT":"CONCAT","_xlfn.CONFIDENCE.NORM":"CONFIDENCE.NORM","_xlfn.CONFIDENCE.T":"CONFIDENCE.T","_xlfn.COT":"COT","_xlfn.COTH":"COTH","_xlfn.COUNTIFS":"COUNTIFS","_xlfn.COVARIANCE.P":"COVARIANCE.P","_xlfn.COVARIANCE.S":"COVARIANCE.S","_xlfn.CSC":"CSC","_xlfn.CSCH":"CSCH","_xlfn.DAYS":"DAYS","_xlfn.DECIMAL":"DECIMAL","_xlfn.ECMA.CEILING":"ECMA.CEILING","_xlfn.ERF.PRECISE":"ERF.PRECISE","_xlfn.ERFC.PRECISE":"ERFC.PRECISE","_xlfn.EXPON.DIST":"EXPON.DIST","_xlfn.F.DIST":"F.DIST","_xlfn.F.DIST.RT":"F.DIST.RT","_xlfn.F.INV":"F.INV","_xlfn.F.INV.RT":"F.INV.RT","_xlfn.F.TEST":"F.TEST","_xlfn.FILTERXML":"FILTERXML","_xlfn.FLOOR.MATH":"FLOOR.MATH","_xlfn.FLOOR.PRECISE":"FLOOR.PRECISE","_xlfn.FORECAST.ETS":"FORECAST.ETS","_xlfn.FORECAST.ETS.CONFINT":"FORECAST.ETS.CONFINT","_xlfn.FORECAST.ETS.SEASONALITY":"FORECAST.ETS.SEASONALITY","_xlfn.FORECAST.ETS.STAT":"FORECAST.ETS.STAT","_xlfn.FORECAST.LINEAR":"FORECAST.LINEAR","_xlfn.FORMULATEXT":"FORMULATEXT","_xlfn.GAMMA":"GAMMA","_xlfn.GAMMA.DIST":"GAMMA.DIST","_xlfn.GAMMA.INV":"GAMMA.INV","_xlfn.GAMMALN.PRECISE":"GAMMALN.PRECISE","_xlfn.GAUSS":"GAUSS","_xlfn.HYPGEOM.DIST":"HYPGEOM.DIST","_xlfn.IFERROR":"IFERROR","_xlfn.IFNA":"IFNA","_xlfn.IFS":"IFS","_xlfn.IMCOSH":"IMCOSH","_xlfn.IMCOT":"IMCOT","_xlfn.IMCSC":"IMCSC","_xlfn.IMCSCH":"IMCSCH","_xlfn.IMSEC":"IMSEC","_xlfn.IMSECH":"IMSECH","_xlfn.IMSINH":"IMSINH","_xlfn.IMTAN":"IMTAN","_xlfn.ISFORMULA":"ISFORMULA","_xlfn.ISO.CEILING":"ISO.CEILING","_xlfn.ISOWEEKNUM":"ISOWEEKNUM","_xlfn.LOGNORM.DIST":"LOGNORM.DIST","_xlfn.LOGNORM.INV":"LOGNORM.INV","_xlfn.MAXIFS":"MAXIFS","_xlfn.MINIFS":"MINIFS","_xlfn.MODE.MULT":"MODE.MULT","_xlfn.MODE.SNGL":"MODE.SNGL","_xlfn.MUNIT":"MUNIT","_xlfn.NEGBINOM.DIST":"NEGBINOM.DIST","_xlfn.NETWORKDAYS.INTL":"NETWORKDAYS.INTL","_xlfn.NIGBINOM":"NIGBINOM","_xlfn.NORM.DIST":"NORM.DIST","_xlfn.NORM.INV":"NORM.INV","_xlfn.NORM.S.DIST":"NORM.S.DIST","_xlfn.NORM.S.INV":"NORM.S.INV","_xlfn.NUMBERVALUE":"NUMBERVALUE","_xlfn.PDURATION":"PDURATION","_xlfn.PERCENTILE.EXC":"PERCENTILE.EXC","_xlfn.PERCENTILE.INC":"PERCENTILE.INC","_xlfn.PERCENTRANK.EXC":"PERCENTRANK.EXC","_xlfn.PERCENTRANK.INC":"PERCENTRANK.INC","_xlfn.PERMUTATIONA":"PERMUTATIONA","_xlfn.PHI":"PHI","_xlfn.POISSON.DIST":"POISSON.DIST","_xlfn.QUARTILE.EXC":"QUARTILE.EXC","_xlfn.QUARTILE.INC":"QUARTILE.INC","_xlfn.QUERYSTRING":"QUERYSTRING","_xlfn.RANK.AVG":"RANK.AVG","_xlfn.RANK.EQ":"RANK.EQ","_xlfn.RRI":"RRI","_xlfn.SEC":"SEC","_xlfn.SECH":"SECH","_xlfn.SHEET":"SHEET","_xlfn.SHEETS":"SHEETS","_xlfn.SKEW.P":"SKEW.P","_xlfn.STDEV.P":"STDEV.P","_xlfn.STDEV.S":"STDEV.S","_xlfn.SUMIFS":"SUMIFS","_xlfn.SWITCH":"SWITCH","_xlfn.T.DIST":"T.DIST","_xlfn.T.DIST.2T":"T.DIST.2T","_xlfn.T.DIST.RT":"T.DIST.RT","_xlfn.T.INV":"T.INV","_xlfn.T.INV.2T":"T.INV.2T","_xlfn.T.TEST":"T.TEST","_xlfn.TEXTJOIN":"TEXTJOIN","_xlfn.UNICHAR":"UNICHAR","_xlfn.UNICODE":"UNICODE","_xlfn.VAR.P":"VAR.P","_xlfn.VAR.S":"VAR.S","_xlfn.WEBSERVICE":"WEBSERVICE","_xlfn.WEIBULL.DIST":"WEIBULL.DIST","_xlfn.WORKDAY.INTL":"WORKDAY.INTL","_xlfn.XOR":"XOR","_xlfn.Z.TEST":"Z.TEST"};function Qi(e){return"of:"==e.slice(0,3)&&(e=e.slice(3)),61==e.charCodeAt(0)&&61==(e=e.slice(1)).charCodeAt(0)&&(e=e.slice(1)),(e=(e=(e=e.replace(/COM\.MICROSOFT\./g,"")).replace(/\[((?:\.[A-Z]+[0-9]+)(?::\.[A-Z]+[0-9]+)?)\]/g,(function(e,t){return t.replace(/\./g,"")}))).replace(/\[.(#[A-Z]*[?!])\]/g,"$1")).replace(/[;~]/g,",").replace(/\|/g,";")}function eo(e){var t=e.split(":");return[t[0].split(".")[0],t[0].split(".")[1]+(t.length>1?":"+(t[1].split(".")[1]||t[1].split(".")[0]):"")]}var to={},no={};Gn.WS=["http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet","http://purl.oclc.org/ooxml/officeDocument/relationships/worksheet"];var ro="undefined"!=typeof Map;function ao(e,t,n){var r=0,a=e.length;if(n){if(ro?n.has(t):Object.prototype.hasOwnProperty.call(n,t))for(var s=ro?n.get(t):n[t];r-1?(n.width=fs(r),n.customWidth=1):null!=t.width&&(n.width=t.width),t.hidden&&(n.hidden=!0),n}function io(e,t){if(e){var n=[.7,.7,.75,.75,.3,.3];"xlml"==t&&(n=[1,1,1,1,.5,.5]),null==e.left&&(e.left=n[0]),null==e.right&&(e.right=n[1]),null==e.top&&(e.top=n[2]),null==e.bottom&&(e.bottom=n[3]),null==e.header&&(e.header=n[4]),null==e.footer&&(e.footer=n[5])}}function oo(e,t,n){var r=n.revssf[null!=t.z?t.z:"General"],a=60,s=e.length;if(null==r&&n.ssf)for(;a<392;++a)if(null==n.ssf[a]){A.load(t.z,a),n.ssf[a]=t.z,n.revssf[t.z]=r=a;break}for(a=0;a!=s;++a)if(e[a].numFmtId===r)return a;return e[s]={numFmtId:r,fontId:0,fillId:0,borderId:0,xfId:0,applyNumberFormat:1},s}function lo(e,t,n,r,a,s){try{r.cellNF&&(e.z=A._table[t])}catch(e){if(r.WTF)throw e}if("z"!==e.t){if("d"===e.t&&"string"==typeof e.v&&(e.v=Q(e.v)),!r||!1!==r.cellText)try{if(null==A._table[t]&&A.load(R[t]||"General",t),"e"===e.t)e.w=e.w||Ln[e.v];else if(0===t)if("n"===e.t)(0|e.v)===e.v?e.w=A._general_int(e.v):e.w=A._general_num(e.v);else if("d"===e.t){var i=H(e.v);e.w=(0|i)===i?A._general_int(i):A._general_num(i)}else{if(void 0===e.v)return"";e.w=A._general(e.v,no)}else"d"===e.t?e.w=A.format(t,H(e.v),no):e.w=A.format(t,e.v,no)}catch(e){if(r.WTF)throw e}if(r.cellStyles&&null!=n)try{e.s=s.Fills[n],e.s.fgColor&&e.s.fgColor.theme&&!e.s.fgColor.rgb&&(e.s.fgColor.rgb=ls(a.themeElements.clrScheme[e.s.fgColor.theme].rgb,e.s.fgColor.tint||0),r.WTF&&(e.s.fgColor.raw_rgb=a.themeElements.clrScheme[e.s.fgColor.theme].rgb)),e.s.bgColor&&e.s.bgColor.theme&&(e.s.bgColor.rgb=ls(a.themeElements.clrScheme[e.s.bgColor.theme].rgb,e.s.bgColor.tint||0),r.WTF&&(e.s.bgColor.raw_rgb=a.themeElements.clrScheme[e.s.bgColor.theme].rgb))}catch(e){if(r.WTF&&s.Fills)throw e}}}function uo(e,t,n){if(e&&e["!ref"]){var r=Qt(e["!ref"]);if(r.e.c/g,ho=/<(?:\w+:)?sheetData[^>]*>([\s\S]*)<\/(?:\w+:)?sheetData>/,fo=/<(?:\w:)?hyperlink [^>]*>/gm,po=/"(\w*:\w*)"/,mo=/<(?:\w:)?col\b[^>]*[\/]?>/g,go=/<(?:\w:)?autoFilter[^>]*([\/]|>([\s\S]*)<\/(?:\w:)?autoFilter)>/g,yo=/<(?:\w:)?pageMargins[^>]*\/>/g,bo=/<(?:\w:)?sheetPr\b(?:[^>a-z][^>]*)?\/>/,vo=/<(?:\w:)?sheetViews[^>]*(?:[\/]|>([\s\S]*)<\/(?:\w:)?sheetViews)>/;function wo(e,t,n,r){var a=we(e);n.Sheets[r]||(n.Sheets[r]={}),a.codeName&&(n.Sheets[r].CodeName=Se(Me(a.codeName)))}var _o=["objects","scenarios","selectLockedCells","selectUnlockedCells"],xo=["formatColumns","formatRows","formatCells","insertColumns","insertRows","insertHyperlinks","deleteColumns","deleteRows","sort","autoFilter","pivotTables"],ko=/<(?:\w:)?sheetView(?:[^>a-z][^>]*)?\/?>/;function Eo(e,t,n,r){if(void 0===e.v&&"string"!=typeof e.f||"z"===e.t)return"";var a="",s=e.t,i=e.v;if("z"!==e.t)switch(e.t){case"b":a=e.v?"1":"0";break;case"n":a=""+e.v;break;case"e":a=Ln[e.v];break;case"d":r&&r.cellDates?a=Q(e.v,-1).toISOString():((e=te(e)).t="n",a=""+(e.v=H(Q(e.v)))),void 0===e.z&&(e.z=A._table[14]);break;default:a=e.v}var o=Ye("v",Ae(a)),l={r:t},u=oo(r.cellXfs,e,r);switch(0!==u&&(l.s=u),e.t){case"n":break;case"d":l.t="d";break;case"b":l.t="b";break;case"e":l.t="e";break;case"z":break;default:if(null==e.v){delete e.t;break}if(r&&r.bookSST){o=Ye("v",""+ao(r.Strings,e.v,r.revStrings)),l.t="s";break}l.t="str"}if(e.t!=s&&(e.t=s,e.v=i),"string"==typeof e.f&&e.f){var c=e.F&&e.F.slice(0,t.length)==t?{t:"array",ref:e.F}:null;o=Ze("f",Ae(e.f),c)+(null!=e.v?o:"")}return e.l&&n["!links"].push([t,e.l]),e.c&&n["!comments"].push([t,e.c]),Ze("c",o,l)}var Co,So,No,Io,Ao,Do,To,Fo=(Co=/<(?:\w+:)?c[ \/>]/,So=/<\/(?:\w+:)?row>/,No=/r=["']([^"']*)["']/,Io=/<(?:\w+:)?is>([\S\s]*?)<\/(?:\w+:)?is>/,Ao=/ref=["']([^"']*)["']/,Do=Ve("v"),To=Ve("f"),function(e,t,n,r,a,s){for(var i,o,l,u,c,h=0,f="",d=[],p=[],m=0,g=0,y=0,b="",v=0,w=0,_=0,x=0,k=Array.isArray(s.CellXf),E=[],C=[],S=Array.isArray(t),N=[],I={},D=!1,T=!!n.sheetStubs,F=e.split(So),R=0,O=F.length;R!=O;++R){var M=(f=F[R].trim()).length;if(0!==M){for(h=0;hv-1&&(r.s.r=v-1),r.e.r":"")+f,null!=p&&2===p.length){for(m=0,b=p[1],g=0;g!=b.length&&!((y=b.charCodeAt(g)-64)<1||y>26);++g)m=26*m+y;w=--m}else++w;for(g=0;g!=f.length&&62!==f.charCodeAt(g);++g);if(++g,(o=we(f.slice(0,g),!0)).r||(o.r=Yt({r:v-1,c:w})),i={t:""},null!=(p=(b=f.slice(g)).match(Do))&&""!==p[1]&&(i.v=Se(p[1])),n.cellFormula){if(null!=(p=b.match(To))&&""!==p[1]){if(i.f=Se(Me(p[1])).replace(/\r\n/g,"\n"),n.xlfn||(i.f=si(i.f)),p[0].indexOf('t="array"')>-1)i.F=(b.match(Ao)||[])[1],i.F.indexOf(":")>-1&&E.push([Qt(i.F),i.F]);else if(p[0].indexOf('t="shared"')>-1){u=we(p[0]);var $=Se(Me(p[1]));n.xlfn||($=si($)),C[parseInt(u.si,10)]=[u,$,o.r]}}else(p=b.match(/]*\/>/))&&C[(u=we(p[0])).si]&&(i.f=ai(C[u.si][1],C[u.si][2],o.r));var P=qt(o.r);for(g=0;g=E[g][0].s.r&&P.r<=E[g][0].e.r&&P.c>=E[g][0].s.c&&P.c<=E[g][0].e.c&&(i.F=E[g][1])}if(null==o.t&&void 0===i.v)if(i.f||i.F)i.v=0,i.t="n";else{if(!T)continue;i.t="z"}else i.t=o.t||"n";switch(r.s.c>w&&(r.s.c=w),r.e.c0&&(t["!rows"]=N)}),Ro=Ze("worksheet",null,{xmlns:nt.main[0],"xmlns:r":nt.r});function Oo(e,t,n,r){var a,s=[me,Ro],i=n.SheetNames[e],o="",l=n.Sheets[i];null==l&&(l={});var u=l["!ref"]||"A1",c=Qt(u);if(c.e.c>16383||c.e.r>1048575){if(t.WTF)throw new Error("Range "+u+" exceeds format limit A1:XFD1048576");c.e.c=Math.min(c.e.c,16383),c.e.r=Math.min(c.e.c,1048575),u=Zt(c)}r||(r={}),l["!comments"]=[];var h=[];!function(e,t,n,r,a){var s=!1,i={},o=null;if("xlsx"!==r.bookType&&t.vbaraw){var l=t.SheetNames[n];try{t.Workbook&&(l=t.Workbook.Sheets[n].CodeName||l)}catch(e){}s=!0,i.codeName=Be(Ae(l))}if(e&&e["!outline"]){var u={summaryBelow:1,summaryRight:1};e["!outline"].above&&(u.summaryBelow=0),e["!outline"].left&&(u.summaryRight=0),o=(o||"")+Ze("outlinePr",null,u)}(s||o)&&(a[a.length]=Ze("sheetPr",o,i))}(l,n,e,t,s),s[s.length]=Ze("dimension",null,{ref:u}),s[s.length]=function(e,t,n,r){var a={workbookViewId:"0"};return(((r||{}).Workbook||{}).Views||[])[0]&&(a.rightToLeft=r.Workbook.Views[0].RTL?"1":"0"),Ze("sheetViews",Ze("sheetView",null,a),{})}(0,0,0,n),t.sheetFormat&&(s[s.length]=Ze("sheetFormatPr",null,{defaultRowHeight:t.sheetFormat.defaultRowHeight||"16",baseColWidth:t.sheetFormat.baseColWidth||"10",outlineLevelRow:t.sheetFormat.outlineLevelRow||"7"})),null!=l["!cols"]&&l["!cols"].length>0&&(s[s.length]=function(e,t){for(var n,r=[""],a=0;a!=t.length;++a)(n=t[a])&&(r[r.length]=Ze("col",null,so(a,n)));return r[r.length]="",r.join("")}(0,l["!cols"])),s[a=s.length]="",l["!links"]=[],null!=l["!ref"]&&(o=function(e,t,n,r){var a,s,i=[],o=[],l=Qt(e["!ref"]),u="",c="",h=[],f=0,d=0,p=e["!rows"],m=Array.isArray(e),g={r:c},y=-1;for(d=l.s.c;d<=l.e.c;++d)h[d]=Kt(d);for(f=l.s.r;f<=l.e.r;++f){for(o=[],c=Gt(f),d=l.s.c;d<=l.e.c;++d){a=h[d]+c;var b=m?(e[f]||[])[d]:e[a];void 0!==b&&null!=(u=Eo(b,a,e,t))&&o.push(u)}(o.length>0||p&&p[f])&&(g={r:c},p&&p[f]&&((s=p[f]).hidden&&(g.hidden=1),y=-1,s.hpx?y=gs(s.hpx):s.hpt&&(y=s.hpt),y>-1&&(g.ht=y,g.customHeight=1),s.level&&(g.outlineLevel=s.level)),i[i.length]=Ze("row",o.join(""),g))}if(p)for(;f-1&&(g.ht=y,g.customHeight=1),s.level&&(g.outlineLevel=s.level),i[i.length]=Ze("row","",g));return i.join("")}(l,t)).length>0&&(s[s.length]=o),s.length>a+1&&(s[s.length]="",s[a]=s[a].replace("/>",">")),null!=l["!protect"]&&(s[s.length]=function(e){var t={sheet:1};return _o.forEach((function(n){null!=e[n]&&e[n]&&(t[n]="1")})),xo.forEach((function(n){null==e[n]||e[n]||(t[n]="0")})),e.password&&(t.password=es(e.password).toString(16).toUpperCase()),Ze("sheetProtection",null,t)}(l["!protect"])),null!=l["!autofilter"]&&(s[s.length]=function(e,t,n,r){var a="string"==typeof e.ref?e.ref:Zt(e.ref);n.Workbook||(n.Workbook={Sheets:[]}),n.Workbook.Names||(n.Workbook.Names=[]);var s=n.Workbook.Names,i=Jt(a);i.s.r==i.e.r&&(i.e.r=Jt(t["!ref"]).e.r,a=Zt(i));for(var o=0;o0&&(s[s.length]=function(e){if(0===e.length)return"";for(var t='',n=0;n!=e.length;++n)t+='';return t+""}(l["!merges"]));var f,d,p=-1,m=-1;return l["!links"].length>0&&(s[s.length]="",l["!links"].forEach((function(e){e[1].Target&&(f={ref:e[0]},"#"!=e[1].Target.charAt(0)&&(m=Zn(r,-1,Ae(e[1].Target).replace(/#.*$/,""),Gn.HLINK),f["r:id"]="rId"+m),(p=e[1].Target.indexOf("#"))>-1&&(f.location=Ae(e[1].Target.slice(p+1))),e[1].Tooltip&&(f.tooltip=Ae(e[1].Tooltip)),s[s.length]=Ze("hyperlink",null,f))})),s[s.length]=""),delete l["!links"],null!=l["!margins"]&&(s[s.length]=(io(d=l["!margins"]),Ze("pageMargins",null,d))),t&&!t.ignoreEC&&null!=t.ignoreEC||(s[s.length]=Ye("ignoredErrors",Ze("ignoredError",null,{numberStoredAsText:1,sqref:u}))),h.length>0&&(m=Zn(r,-1,"../drawings/drawing"+(e+1)+".xml",Gn.DRAW),s[s.length]=Ze("drawing",null,{"r:id":"rId"+m}),l["!drawing"]=h),l["!comments"].length>0&&(m=Zn(r,-1,"../drawings/vmlDrawing"+(e+1)+".vml",Gn.VML),s[s.length]=Ze("legacyDrawing",null,{"r:id":"rId"+m}),l["!legacy"]=m),s.length>1&&(s[s.length]="",s[1]=s[1].replace("/>",">")),s.join("")}function Mo(e,t,n,r){var a=function(e,t,n){var r=$t(145),a=(n["!rows"]||[])[e]||{};r.write_shift(4,e),r.write_shift(4,0);var s=320;a.hpx?s=20*gs(a.hpx):a.hpt&&(s=20*a.hpt),r.write_shift(2,s),r.write_shift(1,0);var i=0;a.level&&(i|=a.level),a.hidden&&(i|=16),(a.hpx||a.hpt)&&(i|=32),r.write_shift(1,i),r.write_shift(1,0);var o=0,l=r.l;r.l+=4;for(var u={r:e,c:0},c=0;c<16;++c)if(!(t.s.c>c+1<<10||t.e.cr.l?r.slice(0,r.l):r}(r,n,t);(a.length>17||(t["!rows"]||[])[r])&&zt(e,"BrtRowHdr",a)}var Bo=xn,$o=kn;var Po=xn,Lo=kn,zo=["left","right","top","bottom","header","footer"];function Wo(e,t,n,r,a,s){if(void 0!==t.v){var i="";switch(t.t){case"b":i=t.v?"1":"0";break;case"d":(t=te(t)).z=t.z||A._table[14],t.v=H(Q(t.v)),t.t="n";break;case"n":case"e":i=""+t.v;break;default:i=t.v}var o={r:n,c:r};switch(o.s=oo(a.cellXfs,t,a),t.l&&s["!links"].push([Yt(o),t.l]),t.c&&s["!comments"].push([Yt(o),t.c]),t.t){case"s":case"str":return void(a.bookSST?(i=ao(a.Strings,t.v,a.revStrings),o.t="s",o.v=i,zt(e,"BrtCellIsst",function(e,t,n){return null==n&&(n=$t(12)),fn(t,n),n.write_shift(4,t.v),n}(0,o))):(o.t="str",zt(e,"BrtCellSt",function(e,t,n){return null==n&&(n=$t(12+4*e.v.length)),fn(t,n),on(e.v,n),n.length>n.l?n.slice(0,n.l):n}(t,o))));case"n":return void(t.v==(0|t.v)&&t.v>-1e3&&t.v<1e3?zt(e,"BrtCellRk",function(e,t,n){return null==n&&(n=$t(12)),fn(t,n),function(e,t){null==t&&(t=$t(4));var n=0,r=0,a=100*e;if(e==(0|e)&&e>=-(1<<29)&&e<1<<29?r=1:a==(0|a)&&a>=-(1<<29)&&a<1<<29&&(r=1,n=1),!r)throw new Error("unsupported RkNumber "+e);t.write_shift(-4,((n?a:e)<<2)+(n+2))}(e.v,n),n}(t,o)):zt(e,"BrtCellReal",function(e,t,n){return null==n&&(n=$t(16)),fn(t,n),Cn(e.v,n),n}(t,o)));case"b":return o.t="b",void zt(e,"BrtCellBool",function(e,t,n){return null==n&&(n=$t(9)),fn(t,n),n.write_shift(1,e.v?1:0),n}(t,o));case"e":o.t="e"}zt(e,"BrtCellBlank",function(e,t,n){return null==n&&(n=$t(8)),fn(t,n)}(0,o))}}function Uo(e,t,n,r){var a=Lt(),s=n.SheetNames[e],i=n.Sheets[s]||{},o=s;try{n&&n.Workbook&&(o=n.Workbook.Sheets[e].CodeName||o)}catch(e){}var l=Qt(i["!ref"]||"A1");if(l.e.c>16383||l.e.r>1048575){if(t.WTF)throw new Error("Range "+(i["!ref"]||"A1")+" exceeds format limit A1:XFD1048576");l.e.c=Math.min(l.e.c,16383),l.e.r=Math.min(l.e.c,1048575)}return i["!links"]=[],i["!comments"]=[],zt(a,"BrtBeginSheet"),n.vbaraw&&zt(a,"BrtWsProp",function(e,t){null==t&&(t=$t(84+4*e.length));for(var n=0;n<3;++n)t.write_shift(1,0);return Sn({auto:1},t),t.write_shift(-4,-1),t.write_shift(-4,-1),pn(e,t),t.slice(0,t.l)}(o)),zt(a,"BrtWsDim",$o(l)),function(e,t,n){zt(e,"BrtBeginWsViews"),zt(e,"BrtBeginWsView",function(e,t,n){null==n&&(n=$t(30));var r=924;return(((t||{}).Views||[])[0]||{}).RTL&&(r|=32),n.write_shift(2,r),n.write_shift(4,0),n.write_shift(4,0),n.write_shift(4,0),n.write_shift(1,0),n.write_shift(1,0),n.write_shift(2,0),n.write_shift(2,100),n.write_shift(2,0),n.write_shift(2,0),n.write_shift(2,0),n.write_shift(4,0),n}(0,n)),zt(e,"BrtEndWsView"),zt(e,"BrtEndWsViews")}(a,0,n.Workbook),function(e,t){t&&t["!cols"]&&(zt(e,"BrtBeginColInfos"),t["!cols"].forEach((function(t,n){t&&zt(e,"BrtColInfo",function(e,t,n){null==n&&(n=$t(18));var r=so(e,t);n.write_shift(-4,e),n.write_shift(-4,e),n.write_shift(4,256*(r.width||10)),n.write_shift(4,0);var a=0;return t.hidden&&(a|=1),"number"==typeof r.width&&(a|=2),t.level&&(a|=t.level<<8),n.write_shift(2,a),n}(n,t))})),zt(e,"BrtEndColInfos"))}(a,i),function(e,t,n,r){var a,s=Qt(t["!ref"]||"A1"),i="",o=[];zt(e,"BrtBeginSheetData");var l=Array.isArray(t),u=s.e.r;t["!rows"]&&(u=Math.max(s.e.r,t["!rows"].length-1));for(var c=s.s.r;c<=u;++c)if(i=Gt(c),Mo(e,t,s,c),c<=s.e.r)for(var h=s.s.c;h<=s.e.c;++h){c===s.s.r&&(o[h]=Kt(h)),a=o[h]+i;var f=l?(t[c]||[])[h]:t[a];f&&Wo(e,f,c,h,r,t)}zt(e,"BrtEndSheetData")}(a,i,0,t),function(e,t){t["!protect"]&&zt(e,"BrtSheetProtection",function(e,t){return null==t&&(t=$t(66)),t.write_shift(2,e.password?es(e.password):0),t.write_shift(4,1),[["objects",!1],["scenarios",!1],["formatCells",!0],["formatColumns",!0],["formatRows",!0],["insertColumns",!0],["insertRows",!0],["insertHyperlinks",!0],["deleteColumns",!0],["deleteRows",!0],["selectLockedCells",!1],["sort",!0],["autoFilter",!0],["pivotTables",!0],["selectUnlockedCells",!1]].forEach((function(n){n[1]?t.write_shift(4,null==e[n[0]]||e[n[0]]?0:1):t.write_shift(4,null!=e[n[0]]&&e[n[0]]?0:1)})),t}(t["!protect"]))}(a,i),function(e,t,n,r){if(t["!autofilter"]){var a=t["!autofilter"],s="string"==typeof a.ref?a.ref:Zt(a.ref);n.Workbook||(n.Workbook={Sheets:[]}),n.Workbook.Names||(n.Workbook.Names=[]);var i=n.Workbook.Names,o=Jt(s);o.s.r==o.e.r&&(o.e.r=Jt(t["!ref"]).e.r,s=Zt(o));for(var l=0;l0){var a=Zn(r,-1,"../drawings/vmlDrawing"+(n+1)+".vml",Gn.VML);zt(e,"BrtLegacyDrawing",vn("rId"+a)),t["!legacy"]=a}}(a,i,e,r),zt(a,"BrtEndSheet"),a.end()}Gn.CHART="http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart",Gn.CHARTEX="http://schemas.microsoft.com/office/2014/relationships/chartEx",Gn.CS="http://schemas.openxmlformats.org/officeDocument/2006/relationships/chartsheet",Ze("chartsheet",null,{xmlns:nt.main[0],"xmlns:r":nt.r});var Vo=[["allowRefreshQuery",!1,"bool"],["autoCompressPictures",!0,"bool"],["backupFile",!1,"bool"],["checkCompatibility",!1,"bool"],["CodeName",""],["date1904",!1,"bool"],["defaultThemeVersion",0,"int"],["filterPrivacy",!1,"bool"],["hidePivotFieldList",!1,"bool"],["promptedSolutions",!1,"bool"],["publishItems",!1,"bool"],["refreshAllConnections",!1,"bool"],["saveExternalLinkValues",!0,"bool"],["showBorderUnselectedTables",!0,"bool"],["showInkAnnotation",!0,"bool"],["showObjects","all"],["showPivotChartFilter",!1,"bool"],["updateLinks","userSet"]],jo=[["activeTab",0,"int"],["autoFilterDateGrouping",!0,"bool"],["firstSheet",0,"int"],["minimized",!1,"bool"],["showHorizontalScroll",!0,"bool"],["showSheetTabs",!0,"bool"],["showVerticalScroll",!0,"bool"],["tabRatio",600,"int"],["visibility","visible"]],Ho=[],Go=[["calcCompleted","true"],["calcMode","auto"],["calcOnSave","true"],["concurrentCalc","true"],["fullCalcOnLoad","false"],["fullPrecision","true"],["iterate","false"],["iterateCount","100"],["iterateDelta","0.001"],["refMode","A1"]];function Xo(e,t){for(var n=0;n!=e.length;++n)for(var r=e[n],a=0;a!=t.length;++a){var s=t[a];if(null==r[s[0]])r[s[0]]=s[1];else switch(s[2]){case"bool":"string"==typeof r[s[0]]&&(r[s[0]]=Oe(r[s[0]]));break;case"int":"string"==typeof r[s[0]]&&(r[s[0]]=parseInt(r[s[0]],10))}}}function Ko(e,t){for(var n=0;n!=t.length;++n){var r=t[n];if(null==e[r[0]])e[r[0]]=r[1];else switch(r[2]){case"bool":"string"==typeof e[r[0]]&&(e[r[0]]=Oe(e[r[0]]));break;case"int":"string"==typeof e[r[0]]&&(e[r[0]]=parseInt(e[r[0]],10))}}}function qo(e){Ko(e.WBProps,Vo),Ko(e.CalcPr,Go),Xo(e.WBView,jo),Xo(e.Sheets,Ho),no.date1904=Oe(e.WBProps.date1904)}var Yo="][*?/\\".split("");function Jo(e,t){if(e.length>31){if(t)return!1;throw new Error("Sheet names cannot exceed 31 chars")}var n=!0;return Yo.forEach((function(r){if(-1!=e.indexOf(r)){if(!t)throw new Error("Sheet name cannot contain : \\ / ? * [ ]");n=!1}})),n}var Zo=/<\w+:workbook/,Qo=Ze("workbook",null,{xmlns:nt.main[0],"xmlns:r":nt.r});function el(e){var t=[me];t[t.length]=Qo;var n=e.Workbook&&(e.Workbook.Names||[]).length>0,r={codeName:"ThisWorkbook"};e.Workbook&&e.Workbook.WBProps&&(Vo.forEach((function(t){null!=e.Workbook.WBProps[t[0]]&&e.Workbook.WBProps[t[0]]!=t[1]&&(r[t[0]]=e.Workbook.WBProps[t[0]])})),e.Workbook.WBProps.CodeName&&(r.codeName=e.Workbook.WBProps.CodeName,delete r.CodeName)),t[t.length]=Ze("workbookPr",null,r);var a=e.Workbook&&e.Workbook.Sheets||[],s=0;if(a&&a[0]&&a[0].Hidden){for(t[t.length]="",s=0;s!=e.SheetNames.length&&a[s]&&a[s].Hidden;++s);s==e.SheetNames.length&&(s=0),t[t.length]='',t[t.length]=""}for(t[t.length]="",s=0;s!=e.SheetNames.length;++s){var i={name:Ae(e.SheetNames[s].slice(0,31))};if(i.sheetId=""+(s+1),i["r:id"]="rId"+(s+1),a[s])switch(a[s].Hidden){case 1:i.state="hidden";break;case 2:i.state="veryHidden"}t[t.length]=Ze("sheet",null,i)}return t[t.length]="",n&&(t[t.length]="",e.Workbook&&e.Workbook.Names&&e.Workbook.Names.forEach((function(e){var n={name:e.Name};e.Comment&&(n.comment=e.Comment),null!=e.Sheet&&(n.localSheetId=""+e.Sheet),e.Hidden&&(n.hidden="1"),e.Ref&&(t[t.length]=Ze("definedName",Ae(e.Ref),n))})),t[t.length]=""),t.length>2&&(t[t.length]="",t[1]=t[1].replace("/>",">")),t.join("")}function tl(e,t){return t||(t=$t(127)),t.write_shift(4,e.Hidden),t.write_shift(4,e.iTabID),vn(e.strRelID,t),on(e.name.slice(0,31),t),t.length>t.l?t.slice(0,t.l):t}function nl(e,n){var r=Lt();return zt(r,"BrtBeginBook"),zt(r,"BrtFileVersion",function(e,n){n||(n=$t(127));for(var r=0;4!=r;++r)n.write_shift(4,0);return on("SheetJS",n),on(t.version,n),on(t.version,n),on("7262",n),n.length=n.l,n.length>n.l?n.slice(0,n.l):n}()),zt(r,"BrtWbProp",function(e,t){t||(t=$t(72));var n=0;return e&&e.filterPrivacy&&(n|=8),t.write_shift(4,n),t.write_shift(4,0),pn(e&&e.CodeName||"ThisWorkbook",t),t.slice(0,t.l)}(e.Workbook&&e.Workbook.WBProps||null)),function(e,t){if(t.Workbook&&t.Workbook.Sheets){for(var n=t.Workbook.Sheets,r=0,a=-1,s=-1;ra||(zt(e,"BrtBeginBookViews"),zt(e,"BrtBookView",function(e,t){return t||(t=$t(29)),t.write_shift(-4,0),t.write_shift(-4,460),t.write_shift(4,28800),t.write_shift(4,17600),t.write_shift(4,500),t.write_shift(4,e),t.write_shift(4,e),t.write_shift(1,120),t.length>t.l?t.slice(0,t.l):t}(a)),zt(e,"BrtEndBookViews"))}}(r,e),function(e,t){zt(e,"BrtBeginBundleShs");for(var n=0;n!=t.SheetNames.length;++n)zt(e,"BrtBundleSh",tl({Hidden:t.Workbook&&t.Workbook.Sheets&&t.Workbook.Sheets[n]&&t.Workbook.Sheets[n].Hidden||0,iTabID:n+1,strRelID:"rId"+(n+1),name:t.SheetNames[n]}));zt(e,"BrtEndBundleShs")}(r,e),zt(r,"BrtEndBook"),r.end()}function rl(e,t,n,r,a,s,i,o){return".bin"===t.slice(-4)?function(e,t,n,r,a,s,i){if(!e)return e;var o=t||{};r||(r={"!id":{}});var l,u,c,h,f,d,p,m,g,y,b=o.dense?[]:{},v={s:{r:2e6,c:2e6},e:{r:0,c:0}},w=[],_=!1,x=!1,k=[];o.biff=12,o["!row"]=0;var E=0,C=!1,S=[],N={},I=o.supbooks||a.supbooks||[[]];if(I.sharedf=N,I.arrayf=S,I.SheetNames=a.SheetNames||a.Sheets.map((function(e){return e.name})),!o.supbooks&&(o.supbooks=I,a.Names))for(var D=0;D=O[0].s.r&&u.r<=O[0].e.r&&d>=O[0].s.c&&d<=O[0].e.c&&(c.F=Zt(O[0]),C=!0)}!C&&e.length>3&&(c.f=e[3])}if(v.s.r>u.r&&(v.s.r=u.r),v.s.c>d&&(v.s.c=d),v.e.ru.r&&(v.s.r=u.r),v.s.c>d&&(v.s.c=d),v.e.r=e.s;)T[e.e--]={width:e.w/256,hidden:!!(1&e.flags),level:e.level},R||(R=!0,ps(e.w/256)),ms(T[e.e+1]);break;case 161:b["!autofilter"]={ref:Zt(e)};break;case 476:b["!margins"]=e;break;case 147:a.Sheets[n]||(a.Sheets[n]={}),e.name&&(a.Sheets[n].CodeName=e.name);break;case 137:a.Views||(a.Views=[{}]),a.Views[0]||(a.Views[0]={}),e.RTL&&(a.Views[0].RTL=!0);break;case 485:break;case 64:case 1053:case 151:break;case 175:case 644:case 625:case 562:case 396:case 1112:case 1146:case 471:case 1050:case 649:case 1105:case 49:case 589:case 607:case 564:case 1055:case 168:case 174:case 1180:case 499:case 507:case 550:case 171:case 167:case 1177:case 169:case 1181:case 551:case 552:case 661:case 639:case 478:case 537:case 477:case 536:case 1103:case 680:case 1104:case 1024:case 152:case 663:case 535:case 678:case 504:case 1043:case 428:case 170:case 3072:case 50:case 2070:case 1045:break;case 35:_=!0;break;case 36:_=!1;break;case 37:w.push(t),_=!0;break;case 38:w.pop(),_=!1;break;default:if((t||"").indexOf("Begin")>0);else if((t||"").indexOf("End")>0);else if(!_||o.WTF)throw new Error("Unexpected record "+D+" "+t)}}),o),delete o.supbooks,delete o["!row"],!b["!ref"]&&(v.s.r<2e6||l&&(l.e.r>0||l.e.c>0||l.s.r>0||l.s.c>0))&&(b["!ref"]=Zt(l||v)),o.sheetRows&&b["!ref"]){var O=Qt(b["!ref"]);o.sheetRows<=+O.e.r&&(O.e.r=o.sheetRows-1,O.e.r>v.e.r&&(O.e.r=v.e.r),O.e.rv.e.c&&(O.e.c=v.e.c),O.e.c0&&(b["!merges"]=k),T.length>0&&(b["!cols"]=T),F.length>0&&(b["!rows"]=F),b}(e,r,n,a,s,i,o):function(e,t,n,r,a,s,i){if(!e)return e;r||(r={"!id":{}});var o=t.dense?[]:{},l={s:{r:2e6,c:2e6},e:{r:0,c:0}},u="",c="",h=e.match(ho);h?(u=e.slice(0,h.index),c=e.slice(h.index+h[0].length)):u=c=e;var f=u.match(bo);f&&wo(f[0],0,a,n);var d=(u.match(/<(?:\w*:)?dimension/)||{index:-1}).index;if(d>0){var p=u.slice(d,d+50).match(po);p&&function(e,t){var n=Qt(t);n.s.r<=n.e.r&&n.s.c<=n.e.c&&n.s.r>=0&&n.s.c>=0&&(e["!ref"]=Zt(n))}(o,p[1])}var m=u.match(vo);m&&m[1]&&function(e,t){t.Views||(t.Views=[{}]),(e.match(ko)||[]).forEach((function(e,n){var r=we(e);t.Views[n]||(t.Views[n]={}),Oe(r.rightToLeft)&&(t.Views[n].RTL=!0)}))}(m[1],a);var g=[];if(t.cellStyles){var y=u.match(mo);y&&function(e,t){for(var n=!1,r=0;r!=t.length;++r){var a=we(t[r],!0);a.hidden&&(a.hidden=Oe(a.hidden));var s=parseInt(a.min,10)-1,i=parseInt(a.max,10)-1;for(delete a.min,delete a.max,a.width=+a.width,!n&&a.width&&(n=!0,ps(a.width)),ms(a);s<=i;)e[s++]=te(a)}}(g,y)}h&&Fo(h[1],o,t,l,s,i);var b=c.match(go);b&&(o["!autofilter"]=function(e){return{ref:(e.match(/ref="([^"]*)"/)||[])[1]}}(b[0]));var v=[],w=c.match(co);if(w)for(d=0;d!=w.length;++d)v[d]=Qt(w[d].slice(w[d].indexOf('"')+1));var _=c.match(fo);_&&function(e,t,n){for(var r=Array.isArray(e),a=0;a!=t.length;++a){var s=we(Me(t[a]),!0);if(!s.ref)return;var i=((n||{})["!id"]||[])[s.id];i?(s.Target=i.Target,s.location&&(s.Target+="#"+s.location)):(s.Target="#"+s.location,i={Target:s.Target,TargetMode:"Internal"}),s.Rel=i,s.tooltip&&(s.Tooltip=s.tooltip,delete s.tooltip);for(var o=Qt(s.ref),l=o.s.r;l<=o.e.r;++l)for(var u=o.s.c;u<=o.e.c;++u){var c=Yt({c:u,r:l});r?(e[l]||(e[l]=[]),e[l][u]||(e[l][u]={t:"z",v:void 0}),e[l][u].l=s):(e[c]||(e[c]={t:"z",v:void 0}),e[c].l=s)}}}(o,_,r);var x=c.match(yo);if(x&&(o["!margins"]=function(e){var t={};return["left","right","top","bottom","header","footer"].forEach((function(n){e[n]&&(t[n]=parseFloat(e[n]))})),t}(we(x[0]))),!o["!ref"]&&l.e.c>=l.s.c&&l.e.r>=l.s.r&&(o["!ref"]=Zt(l)),t.sheetRows>0&&o["!ref"]){var k=Qt(o["!ref"]);t.sheetRows<=+k.e.r&&(k.e.r=t.sheetRows-1,k.e.r>l.e.r&&(k.e.r=l.e.r),k.e.rl.e.c&&(k.e.c=l.e.c),k.e.c0&&(o["!cols"]=g),v.length>0&&(o["!merges"]=v),o}(e,r,n,a,s,i,o)}function al(e,t,n){return(".bin"===t.slice(-4)?nl:el)(e,n)}function sl(e,t,n,r,a){return(".bin"===t.slice(-4)?Uo:Oo)(e,n,r,a)}function il(e,t,n){return(".bin"===t.slice(-4)?Ha:Va)(e,n)}function ol(e,t,n){return(".bin"===t.slice(-4)?Qs:Js)(e,n)}var ll=/([\w:]+)=((?:")([^"]*)(?:")|(?:')([^']*)(?:'))/g,ul=/([\w:]+)=((?:")(?:[^"]*)(?:")|(?:')(?:[^']*)(?:'))/;function cl(e,t){var n=e.split(/\s+/),r=[];if(t||(r[0]=n[0]),1===n.length)return r;var a,s,i,o=e.match(ll);if(o)for(i=0;i!=o.length;++i)-1===(s=(a=o[i].match(ul))[1].indexOf(":"))?r[a[1]]=a[2].slice(1,a[2].length-1):r["xmlns:"===a[1].slice(0,6)?"xmlns"+a[1].slice(6):a[1].slice(s+1)]=a[2].slice(1,a[2].length-1);return r}function hl(e){var t={};if(1===e.split(/\s+/).length)return t;var n,r,a,s=e.match(ll);if(s)for(a=0;a!=s.length;++a)-1===(r=(n=s[a].match(ul))[1].indexOf(":"))?t[n[1]]=n[2].slice(1,n[2].length-1):t["xmlns:"===n[1].slice(0,6)?"xmlns"+n[1].slice(6):n[1].slice(r+1)]=n[2].slice(1,n[2].length-1);return t}function fl(e,t,n,r){var a=r;switch((n[0].match(/dt:dt="([\w.]+)"/)||["",""])[1]){case"boolean":a=Oe(r);break;case"i2":case"int":a=parseInt(r,10);break;case"r4":case"float":a=parseFloat(r);break;case"date":case"dateTime.tz":a=Q(r);break;case"i8":case"string":case"fixed":case"uuid":case"bin.base64":break;default:throw new Error("bad custprop:"+n[0])}e[Se(t)]=a}function dl(e,t,n){if(n.cellStyles&&t.Interior){var r=t.Interior;r.Pattern&&(r.patternType=ks[r.Pattern]||r.Pattern)}e[t.ID]=t}function pl(e,t,n,r,a,s,i,o,l,u){var c="General",h=r.StyleID,f={};u=u||{};var d=[],p=0;for(void 0===h&&o&&(h=o.StyleID),void 0===h&&i&&(h=i.StyleID);void 0!==s[h]&&(s[h].nf&&(c=s[h].nf),s[h].Interior&&d.push(s[h].Interior),s[h].Parent);)h=s[h].Parent;switch(n.Type){case"Boolean":r.t="b",r.v=Oe(e);break;case"String":r.t="s",r.r=Re(Se(e)),r.v=e.indexOf("<")>-1?Se(t||e).replace(/<.*?>/g,""):r.r;break;case"DateTime":"Z"!=e.slice(-1)&&(e+="Z"),r.v=(Q(e)-new Date(Date.UTC(1899,11,30)))/864e5,r.v!=r.v?r.v=Se(e):r.v<60&&(r.v=r.v-1),c&&"General"!=c||(c="yyyy-mm-dd");case"Number":void 0===r.v&&(r.v=+e),r.t||(r.t="n");break;case"Error":r.t="e",r.v=zn[e],!1!==u.cellText&&(r.w=e);break;default:""==e&&""==t?r.t="z":(r.t="s",r.v=Re(t||e))}if(function(e,t,n){if("z"!==e.t){if(!n||!1!==n.cellText)try{"e"===e.t?e.w=e.w||Ln[e.v]:"General"===t?"n"===e.t?(0|e.v)===e.v?e.w=A._general_int(e.v):e.w=A._general_num(e.v):e.w=A._general(e.v):e.w=(r=t||"General",a=e.v,"General"===(s=F[r]||Se(r))?A._general(a):A.format(s,a))}catch(e){if(n.WTF)throw e}var r,a,s;try{var i=F[t]||t||"General";if(n.cellNF&&(e.z=i),n.cellDates&&"n"==e.t&&A.is_date(i)){var o=A.parse_date_code(e.v);o&&(e.t="d",e.v=new Date(o.y,o.m-1,o.d,o.H,o.M,o.S,o.u))}}catch(e){if(n.WTF)throw e}}}(r,c,u),!1!==u.cellFormula)if(r.Formula){var m=Se(r.Formula);61==m.charCodeAt(0)&&(m=m.slice(1)),r.f=ti(m,a),delete r.Formula,"RC"==r.ArrayRange?r.F=ti("RC:RC",a):r.ArrayRange&&(r.F=ti(r.ArrayRange,a),l.push([Qt(r.F),r.F]))}else for(p=0;p=l[p][0].s.r&&a.r<=l[p][0].e.r&&a.c>=l[p][0].s.c&&a.c<=l[p][0].e.c&&(r.F=l[p][1]);u.cellStyles&&(d.forEach((function(e){!f.patternType&&e.patternType&&(f.patternType=e.patternType)})),r.s=f),void 0!==r.StyleID&&(r.ixfe=r.StyleID)}function ml(e){e.t=e.v||"",e.t=e.t.replace(/\r\n/g,"\n").replace(/\r/g,"\n"),e.v=e.w=e.ixfe=void 0}function gl(e){if(y&&Buffer.isBuffer(e))return e.toString("utf8");if("string"==typeof e)return e;if("undefined"!=typeof Uint8Array&&e instanceof Uint8Array)return Me(E(C(e)));throw new Error("Bad input format: expected Buffer or string")}var yl=/<(\/?)([^\s?>:\/]+)(?:[\s?:\/][^>]*)?>/gm;function bl(e,t){var n=t||{};D(A);var r=f(gl(e));"binary"!=n.type&&"array"!=n.type&&"base64"!=n.type||(r="undefined"!=typeof cptable?cptable.utils.decode(65001,h(r)):Me(r));var a,s=r.slice(0,1024).toLowerCase(),i=!1;if(-1==s.indexOf("=0&&(i=!0)})),i)return Ul.to_workbook(r,n);var o,l,u=[],c={},d=[],p=n.dense?[]:{},m="",g={},y={},b=cl(''),v=0,w=0,_=0,x={s:{r:2e6,c:2e6},e:{r:0,c:0}},k={},E={},C="",S=0,N=[],I={},T={},R=0,O=[],M=[],B={},$=[],P=!1,L=[],z=[],W={},U=0,V=0,j={Sheets:[],WBProps:{date1904:!1}},H={};yl.lastIndex=0,r=r.replace(//gm,"");for(var G="";a=yl.exec(r);)switch(a[3]=(G=a[3]).toLowerCase()){case"data":if("data"==G){if("/"===a[1]){if((o=u.pop())[0]!==a[3])throw new Error("Bad state: "+o.join("|"))}else"/"!==a[0].charAt(a[0].length-2)&&u.push([a[3],!0]);break}if(u[u.length-1][1])break;"/"===a[1]?pl(r.slice(v,a.index),C,b,"comment"==u[u.length-1][0]?B:g,{c:w,r:_},k,$[w],y,L,n):(C="",b=cl(a[0]),v=a.index+a[0].length);break;case"cell":if("/"===a[1])if(M.length>0&&(g.c=M),(!n.sheetRows||n.sheetRows>_)&&void 0!==g.v&&(n.dense?(p[_]||(p[_]=[]),p[_][w]=g):p[Kt(w)+Gt(_)]=g),g.HRef&&(g.l={Target:g.HRef},g.HRefScreenTip&&(g.l.Tooltip=g.HRefScreenTip),delete g.HRef,delete g.HRefScreenTip),(g.MergeAcross||g.MergeDown)&&(U=w+(0|parseInt(g.MergeAcross,10)),V=_+(0|parseInt(g.MergeDown,10)),N.push({s:{c:w,r:_},e:{c:U,r:V}})),n.sheetStubs)if(g.MergeAcross||g.MergeDown){for(var X=w;X<=U;++X)for(var K=_;K<=V;++K)(X>w||K>_)&&(n.dense?(p[K]||(p[K]=[]),p[K][X]={t:"z"}):p[Kt(X)+Gt(K)]={t:"z"});w=U+1}else++w;else g.MergeAcross?w=U+1:++w;else(g=hl(a[0])).Index&&(w=+g.Index-1),wx.e.c&&(x.e.c=w),"/>"===a[0].slice(-2)&&++w,M=[];break;case"row":"/"===a[1]||"/>"===a[0].slice(-2)?(_x.e.r&&(x.e.r=_),"/>"===a[0].slice(-2)&&(y=cl(a[0])).Index&&(_=+y.Index-1),w=0,++_):((y=cl(a[0])).Index&&(_=+y.Index-1),W={},("0"==y.AutoFitHeight||y.Height)&&(W.hpx=parseInt(y.Height,10),W.hpt=gs(W.hpx),z[_]=W),"1"==y.Hidden&&(W.hidden=!0,z[_]=W));break;case"worksheet":if("/"===a[1]){if((o=u.pop())[0]!==a[3])throw new Error("Bad state: "+o.join("|"));d.push(m),x.s.r<=x.e.r&&x.s.c<=x.e.c&&(p["!ref"]=Zt(x),n.sheetRows&&n.sheetRows<=x.e.r&&(p["!fullref"]=p["!ref"],x.e.r=n.sheetRows-1,p["!ref"]=Zt(x))),N.length&&(p["!merges"]=N),$.length>0&&(p["!cols"]=$),z.length>0&&(p["!rows"]=z),c[m]=p}else x={s:{r:2e6,c:2e6},e:{r:0,c:0}},_=w=0,u.push([a[3],!1]),o=cl(a[0]),m=Se(o.Name),p=n.dense?[]:{},N=[],L=[],z=[],H={name:m,Hidden:0},j.Sheets.push(H);break;case"table":if("/"===a[1]){if((o=u.pop())[0]!==a[3])throw new Error("Bad state: "+o.join("|"))}else{if("/>"==a[0].slice(-2))break;cl(a[0]),u.push([a[3],!1]),$=[],P=!1}break;case"style":"/"===a[1]?dl(k,E,n):E=cl(a[0]);break;case"numberformat":E.nf=Se(cl(a[0]).Format||"General"),F[E.nf]&&(E.nf=F[E.nf]);for(var q=0;392!=q&&A._table[q]!=E.nf;++q);if(392==q)for(q=57;392!=q;++q)if(null==A._table[q]){A.load(E.nf,q);break}break;case"column":if("table"!==u[u.length-1][0])break;if((l=cl(a[0])).Hidden&&(l.hidden=!0,delete l.Hidden),l.Width&&(l.wpx=parseInt(l.Width,10)),!P&&l.wpx>10){P=!0,us=6;for(var Y=0;Y<$.length;++Y)$[Y]&&ms($[Y])}P&&ms(l),$[l.Index-1||$.length]=l;for(var J=0;J<+l.Span;++J)$[$.length]=te(l);break;case"namedrange":if("/"===a[1])break;j.Names||(j.Names=[]);var Z=we(a[0]),Q={Name:Z.Name,Ref:ti(Z.RefersTo.slice(1),{r:0,c:0})};j.Sheets.length>0&&(Q.Sheet=j.Sheets.length-1),j.Names.push(Q);break;case"namedcell":case"b":case"i":case"u":case"s":case"em":case"h2":case"h3":case"sub":case"sup":case"span":case"alignment":case"borders":case"border":break;case"font":if("/>"===a[0].slice(-2))break;"/"===a[1]?C+=r.slice(S,a.index):S=a.index+a[0].length;break;case"interior":if(!n.cellStyles)break;E.Interior=cl(a[0]);break;case"protection":break;case"author":case"title":case"description":case"created":case"keywords":case"subject":case"category":case"company":case"lastauthor":case"lastsaved":case"lastprinted":case"version":case"revision":case"totaltime":case"hyperlinkbase":case"manager":case"contentstatus":case"identifier":case"language":case"appname":if("/>"===a[0].slice(-2))break;"/"===a[1]?pr(I,G,r.slice(R,a.index)):R=a.index+a[0].length;break;case"paragraphs":break;case"styles":case"workbook":if("/"===a[1]){if((o=u.pop())[0]!==a[3])throw new Error("Bad state: "+o.join("|"))}else u.push([a[3],!1]);break;case"comment":if("/"===a[1]){if((o=u.pop())[0]!==a[3])throw new Error("Bad state: "+o.join("|"));ml(B),M.push(B)}else u.push([a[3],!1]),B={a:(o=cl(a[0])).Author};break;case"autofilter":if("/"===a[1]){if((o=u.pop())[0]!==a[3])throw new Error("Bad state: "+o.join("|"))}else if("/"!==a[0].charAt(a[0].length-2)){var ee=cl(a[0]);p["!autofilter"]={ref:ti(ee.Range).replace(/\$/g,"")},u.push([a[3],!0])}break;case"name":break;case"datavalidation":if("/"===a[1]){if((o=u.pop())[0]!==a[3])throw new Error("Bad state: "+o.join("|"))}else"/"!==a[0].charAt(a[0].length-2)&&u.push([a[3],!0]);break;case"pixelsperinch":break;case"componentoptions":case"documentproperties":case"customdocumentproperties":case"officedocumentsettings":case"pivottable":case"pivotcache":case"names":case"mapinfo":case"pagebreaks":case"querytable":case"sorting":case"schema":case"conditionalformatting":case"smarttagtype":case"smarttags":case"excelworkbook":case"workbookoptions":case"worksheetoptions":if("/"===a[1]){if((o=u.pop())[0]!==a[3])throw new Error("Bad state: "+o.join("|"))}else"/"!==a[0].charAt(a[0].length-2)&&u.push([a[3],!0]);break;default:if(0==u.length&&"document"==a[3])return ql(r,n);if(0==u.length&&"uof"==a[3])return ql(r,n);var ne=!0;switch(u[u.length-1][0]){case"officedocumentsettings":switch(a[3]){case"allowpng":case"removepersonalinformation":case"downloadcomponents":case"locationofcomponents":case"colors":case"color":case"index":case"rgb":case"targetscreensize":case"readonlyrecommended":break;default:ne=!1}break;case"componentoptions":switch(a[3]){case"toolbar":case"hideofficelogo":case"spreadsheetautofit":case"label":case"caption":case"maxheight":case"maxwidth":case"nextsheetnumber":break;default:ne=!1}break;case"excelworkbook":switch(a[3]){case"date1904":j.WBProps.date1904=!0;break;case"windowheight":case"windowwidth":case"windowtopx":case"windowtopy":case"tabratio":case"protectstructure":case"protectwindow":case"protectwindows":case"activesheet":case"displayinknotes":case"firstvisiblesheet":case"supbook":case"sheetname":case"sheetindex":case"sheetindexfirst":case"sheetindexlast":case"dll":case"acceptlabelsinformulas":case"donotsavelinkvalues":case"iteration":case"maxiterations":case"maxchange":case"path":case"xct":case"count":case"selectedsheets":case"calculation":case"uncalced":case"startupprompt":case"crn":case"externname":case"formula":case"colfirst":case"collast":case"wantadvise":case"boolean":case"error":case"text":case"ole":case"noautorecover":case"publishobjects":case"donotcalculatebeforesave":case"number":case"refmoder1c1":case"embedsavesmarttags":break;default:ne=!1}break;case"workbookoptions":switch(a[3]){case"owcversion":case"height":case"width":break;default:ne=!1}break;case"worksheetoptions":switch(a[3]){case"visible":if("/>"===a[0].slice(-2));else if("/"===a[1])switch(r.slice(R,a.index)){case"SheetHidden":H.Hidden=1;break;case"SheetVeryHidden":H.Hidden=2}else R=a.index+a[0].length;break;case"header":p["!margins"]||io(p["!margins"]={},"xlml"),p["!margins"].header=we(a[0]).Margin;break;case"footer":p["!margins"]||io(p["!margins"]={},"xlml"),p["!margins"].footer=we(a[0]).Margin;break;case"pagemargins":var re=we(a[0]);p["!margins"]||io(p["!margins"]={},"xlml"),re.Top&&(p["!margins"].top=re.Top),re.Left&&(p["!margins"].left=re.Left),re.Right&&(p["!margins"].right=re.Right),re.Bottom&&(p["!margins"].bottom=re.Bottom);break;case"displayrighttoleft":j.Views||(j.Views=[]),j.Views[0]||(j.Views[0]={}),j.Views[0].RTL=!0;break;case"freezepanes":case"frozennosplit":break;case"splithorizontal":case"splitvertical":case"donotdisplaygridlines":case"activerow":case"activecol":case"toprowbottompane":case"leftcolumnrightpane":case"unsynced":case"print":case"panes":case"scale":case"pane":case"number":case"layout":case"pagesetup":case"selected":case"protectobjects":case"enableselection":case"protectscenarios":case"validprinterinfo":case"horizontalresolution":case"verticalresolution":case"numberofcopies":case"activepane":case"toprowvisible":case"leftcolumnvisible":case"fittopage":case"rangeselection":case"papersizeindex":case"pagelayoutzoom":case"pagebreakzoom":case"filteron":case"fitwidth":case"fitheight":case"commentslayout":case"zoom":case"lefttoright":case"gridlines":case"allowsort":case"allowfilter":case"allowinsertrows":case"allowdeleterows":case"allowinsertcols":case"allowdeletecols":case"allowinserthyperlinks":case"allowformatcells":case"allowsizecols":case"allowsizerows":case"nosummaryrowsbelowdetail":case"tabcolorindex":case"donotdisplayheadings":case"showpagelayoutzoom":case"nosummarycolumnsrightdetail":case"blackandwhite":case"donotdisplayzeros":case"displaypagebreak":case"rowcolheadings":case"donotdisplayoutline":case"noorientation":case"allowusepivottables":case"zeroheight":case"viewablerange":case"selection":case"protectcontents":break;default:ne=!1}break;case"pivottable":case"pivotcache":switch(a[3]){case"immediateitemsondrop":case"showpagemultipleitemlabel":case"compactrowindent":case"location":case"pivotfield":case"orientation":case"layoutform":case"layoutsubtotallocation":case"layoutcompactrow":case"position":case"pivotitem":case"datatype":case"datafield":case"sourcename":case"parentfield":case"ptlineitems":case"ptlineitem":case"countofsameitems":case"item":case"itemtype":case"ptsource":case"cacheindex":case"consolidationreference":case"filename":case"reference":case"nocolumngrand":case"norowgrand":case"blanklineafteritems":case"hidden":case"subtotal":case"basefield":case"mapchilditems":case"function":case"refreshonfileopen":case"printsettitles":case"mergelabels":case"defaultversion":case"refreshname":case"refreshdate":case"refreshdatecopy":case"versionlastrefresh":case"versionlastupdate":case"versionupdateablemin":case"versionrefreshablemin":case"calculation":break;default:ne=!1}break;case"pagebreaks":switch(a[3]){case"colbreaks":case"colbreak":case"rowbreaks":case"rowbreak":case"colstart":case"colend":case"rowend":break;default:ne=!1}break;case"autofilter":switch(a[3]){case"autofiltercolumn":case"autofiltercondition":case"autofilterand":case"autofilteror":break;default:ne=!1}break;case"querytable":switch(a[3]){case"id":case"autoformatfont":case"autoformatpattern":case"querysource":case"querytype":case"enableredirections":case"refreshedinxl9":case"urlstring":case"htmltables":case"connection":case"commandtext":case"refreshinfo":case"notitles":case"nextid":case"columninfo":case"overwritecells":case"donotpromptforfile":case"textwizardsettings":case"source":case"number":case"decimal":case"thousandseparator":case"trailingminusnumbers":case"formatsettings":case"fieldtype":case"delimiters":case"tab":case"comma":case"autoformatname":case"versionlastedit":case"versionlastrefresh":break;default:ne=!1}break;case"datavalidation":switch(a[3]){case"range":case"type":case"min":case"max":case"sort":case"descending":case"order":case"casesensitive":case"value":case"errorstyle":case"errormessage":case"errortitle":case"inputmessage":case"inputtitle":case"combohide":case"inputhide":case"condition":case"qualifier":case"useblank":case"value1":case"value2":case"format":case"cellrangelist":break;default:ne=!1}break;case"sorting":case"conditionalformatting":switch(a[3]){case"range":case"type":case"min":case"max":case"sort":case"descending":case"order":case"casesensitive":case"value":case"errorstyle":case"errormessage":case"errortitle":case"cellrangelist":case"inputmessage":case"inputtitle":case"combohide":case"inputhide":case"condition":case"qualifier":case"useblank":case"value1":case"value2":case"format":break;default:ne=!1}break;case"mapinfo":case"schema":case"data":switch(a[3]){case"map":case"entry":case"range":case"xpath":case"field":case"xsdtype":case"filteron":case"aggregate":case"elementtype":case"attributetype":break;case"schema":case"element":case"complextype":case"datatype":case"all":case"attribute":case"extends":case"row":break;default:ne=!1}break;case"smarttags":break;default:ne=!1}if(ne)break;if(a[3].match(/!\[CDATA/))break;if(!u[u.length-1][1])throw"Unrecognized tag: "+a[3]+"|"+u.join("|");if("customdocumentproperties"===u[u.length-1][0]){if("/>"===a[0].slice(-2))break;"/"===a[1]?fl(T,G,O,r.slice(R,a.index)):(O=a,R=a.index+a[0].length);break}if(n.WTF)throw"Unrecognized tag: "+a[3]+"|"+u.join("|")}var ae={};return n.bookSheets||n.bookProps||(ae.Sheets=c),ae.SheetNames=d,ae.Workbook=j,ae.SSF=A.get_table(),ae.Props=I,ae.Custprops=T,ae}function vl(e,t){switch(cu(t=t||{}),t.type||"base64"){case"base64":return bl(g.decode(e),t);case"binary":case"buffer":case"file":return bl(e,t);case"array":return bl(E(e),t)}}function wl(e){return Ze("NamedRange",null,{"ss:Name":e.Name,"ss:RefersTo":"="+ri(e.Ref,{r:0,c:0})})}function _l(e,t,n,r,a,s,i){if(!e||null==e.v&&null==e.f)return"";var o={};if(e.f&&(o["ss:Formula"]="="+Ae(ri(e.f,i))),e.F&&e.F.slice(0,t.length)==t){var l=qt(e.F.slice(t.length+1));o["ss:ArrayRange"]="RC:R"+(l.r==i.r?"":"["+(l.r-i.r)+"]")+"C"+(l.c==i.c?"":"["+(l.c-i.c)+"]")}if(e.l&&e.l.Target&&(o["ss:HRef"]=Ae(e.l.Target),e.l.Tooltip&&(o["x:HRefScreenTip"]=Ae(e.l.Tooltip))),n["!merges"])for(var u=n["!merges"],c=0;c!=u.length;++c)u[c].s.c==i.c&&u[c].s.r==i.r&&(u[c].e.c>u[c].s.c&&(o["ss:MergeAcross"]=u[c].e.c-u[c].s.c),u[c].e.r>u[c].s.r&&(o["ss:MergeDown"]=u[c].e.r-u[c].s.r));var h="",f="";switch(e.t){case"z":if(!r.sheetStubs)return"";break;case"n":h="Number",f=String(e.v);break;case"b":h="Boolean",f=e.v?"1":"0";break;case"e":h="Error",f=Ln[e.v];break;case"d":h="DateTime",f=new Date(e.v).toISOString(),null==e.z&&(e.z=e.z||A._table[14]);break;case"s":h="String",f=((e.v||"")+"").replace(Ne,(function(e){return Ce[e]})).replace(Te,(function(e){return"&#x"+e.charCodeAt(0).toString(16).toUpperCase()+";"}))}var d=oo(r.cellXfs,e,r);o["ss:StyleID"]="s"+(21+d),o["ss:Index"]=i.c+1;var p=null!=e.v?f:"",m="z"==e.t?"":''+p+"";return(e.c||[]).length>0&&(m+=e.c.map((function(e){var t=Ze("ss:Data",(e.t||"").replace(/(\r\n|[\r\n])/g," "),{xmlns:"http://www.w3.org/TR/REC-html40"});return Ze("Comment",t,{"ss:Author":e.a})})).join("")),Ze("Cell",m,o)}function xl(e,t){var n='"}function kl(e,t,n){var r=[],a=n.SheetNames[e],s=n.Sheets[a],i=s?function(e,t,n,r){if(!e)return"";if(!((r||{}).Workbook||{}).Names)return"";for(var a=r.Workbook.Names,s=[],i=0;i0&&r.push(""+i+""),(i=s?function(e,t,n,r){if(!e["!ref"])return"";var a=Qt(e["!ref"]),s=e["!merges"]||[],i=0,o=[];e["!cols"]&&e["!cols"].forEach((function(e,t){ms(e);var n=!!e.width,r=so(t,e),a={"ss:Index":t+1};n&&(a["ss:Width"]=cs(r.width)),e.hidden&&(a["ss:Hidden"]="1"),o.push(Ze("Column",null,a))}));for(var l=Array.isArray(e),u=a.s.r;u<=a.e.r;++u){for(var c=[xl(u,(e["!rows"]||[])[u])],h=a.s.c;h<=a.e.c;++h){var f=!1;for(i=0;i!=s.length;++i)if(!(s[i].s.c>h||s[i].s.r>u||s[i].e.c"),c.length>2&&o.push(c.join(""))}return o.join("")}(s,t):"").length>0&&r.push(""+i+"
"),r.push(function(e,t,n,r){if(!e)return"";var a=[];if(e["!margins"]&&(a.push(""),e["!margins"].header&&a.push(Ze("Header",null,{"x:Margin":e["!margins"].header})),e["!margins"].footer&&a.push(Ze("Footer",null,{"x:Margin":e["!margins"].footer})),a.push(Ze("PageMargins",null,{"x:Bottom":e["!margins"].bottom||"0.75","x:Left":e["!margins"].left||"0.7","x:Right":e["!margins"].right||"0.7","x:Top":e["!margins"].top||"0.75"})),a.push("")),r&&r.Workbook&&r.Workbook.Sheets&&r.Workbook.Sheets[n])if(r.Workbook.Sheets[n].Hidden)a.push(Ze("Visible",1==r.Workbook.Sheets[n].Hidden?"SheetHidden":"SheetVeryHidden",{}));else{for(var s=0;s")}return((((r||{}).Workbook||{}).Views||[])[0]||{}).RTL&&a.push(""),e["!protect"]&&(a.push(Ye("ProtectContents","True")),e["!protect"].objects&&a.push(Ye("ProtectObjects","True")),e["!protect"].scenarios&&a.push(Ye("ProtectScenarios","True")),null==e["!protect"].selectLockedCells||e["!protect"].selectLockedCells?null==e["!protect"].selectUnlockedCells||e["!protect"].selectUnlockedCells||a.push(Ye("EnableSelection","UnlockedCells")):a.push(Ye("EnableSelection","NoSelection")),[["formatCells","AllowFormatCells"],["formatColumns","AllowSizeCols"],["formatRows","AllowSizeRows"],["insertColumns","AllowInsertCols"],["insertRows","AllowInsertRows"],["insertHyperlinks","AllowInsertHyperlinks"],["deleteColumns","AllowDeleteCols"],["deleteRows","AllowDeleteRows"],["sort","AllowSort"],["autoFilter","AllowFilter"],["pivotTables","AllowUsePivotTables"]].forEach((function(t){e["!protect"][t[0]]&&a.push("<"+t[1]+"/>")}))),0==a.length?"":Ze("WorksheetOptions",a.join(""),{xmlns:at})}(s,0,e,n)),r.join("")}function El(e,t){t||(t={}),e.SSF||(e.SSF=A.get_table()),e.SSF&&(D(A),A.load_table(e.SSF),t.revssf=V(e.SSF),t.revssf[e.SSF[65535]]=0,t.ssf=e.SSF,t.cellXfs=[],oo(t.cellXfs,{},{revssf:{General:0}}));var n=[];n.push(function(e,t){var n=[];return e.Props&&n.push(function(e,t){var n=[];return z(fr).map((function(e){for(var t=0;t'+a.join("")+""}(e.Props,e.Custprops)),n.join("")}(e,t)),n.push(""),n.push(""),n.push("");for(var r=0;r'];return t.cellXfs.forEach((function(e,t){var r=[];r.push(Ze("NumberFormat",null,{"ss:Format":Ae(A._table[e.numFmtId])}));var a={"ss:ID":"s"+(21+t)};n.push(Ze("Style",r.join(""),a))})),Ze("Styles",n.join(""))}(0,t),n[3]=function(e){if(!((e||{}).Workbook||{}).Names)return"";for(var t=e.Workbook.Names,n=[],r=0;r40||(n.l-=4,t.Reserved1=n.read_shift(0,"lpstr-ansi"),n.length-n.l<=4||1907505652!==(r=n.read_shift(4))||(t.UnicodeClipboardFormat=function(e){return Nn(e,2)}(n),0==(r=n.read_shift(4))||r>40||(n.l-=4,t.Reserved2=n.read_shift(0,"lpwstr"))))}(n),t.bookProps&&!t.bookSheets)a={};else{var i=y?"buffer":"array";if(r&&r.content)a=function(e,t){var n,r,a,s,i,o,l,c,h={opts:{}},f={},d=t.dense?[]:{},p={},m={},g=null,y=[],b="",v={},w="",_={},x=[],k=!0,E=[],C=[],S={Sheets:[],WBProps:{date1904:!1},Views:[{}]},N={},I=function(e){return e<8?Pn[e]:e<64&&C[e-8]||Pn[e]},D=function(e,t,r){if(!(W>1)&&(r.sheetRows&&e.r>=r.sheetRows&&(k=!1),k)){if(r.cellStyles&&t.XF&&t.XF.data&&function(e,t,n){var r,a=t.XF.data;a&&a.patternType&&n&&n.cellStyles&&(t.s={},t.s.patternType=a.patternType,(r=os(I(a.icvFore)))&&(t.s.fgColor={rgb:r}),(r=os(I(a.icvBack)))&&(t.s.bgColor={rgb:r}))}(0,t,r),delete t.ixfe,delete t.XF,n=e,w=Yt(e),m&&m.s&&m.e||(m={s:{r:0,c:0},e:{r:0,c:0}}),e.rm.e.r&&(m.e.r=e.r+1),e.c+1>m.e.c&&(m.e.c=e.c+1),r.cellFormula&&t.f)for(var a=0;ae.c||x[a][0].s.r>e.r||x[a][0].e.c>8)!==X)throw new Error("rt mismatch: "+Y+"!="+X);12==q.r&&(e.l+=10,K-=10)}var J={};J="EOF"===q.n?q.f(e,K,T):Cl(q,e,K,T);var Z=q.n;if(0==W&&"BOF"!=Z)continue;switch(Z){case"Date1904":h.opts.Date1904=S.WBProps.date1904=J;break;case"WriteProtect":h.opts.WriteProtect=!0;break;case"FilePass":if(T.enc||(e.l=0),T.enc=J,!t.password)throw new Error("File is password-protected");if(null==J.valid)throw new Error("Encryption scheme unsupported");if(!J.valid)throw new Error("Password is incorrect");break;case"WriteAccess":T.lastuser=J;break;case"FileSharing":break;case"CodePage":var Q=Number(J);switch(Q){case 21010:Q=1200;break;case 32768:Q=1e4;break;case 32769:Q=1252}u(T.codepage=Q),H=!0;break;case"RRTabId":T.rrtabid=J;break;case"WinProtect":T.winlocked=J;break;case"Template":case"BookBool":case"UsesELFs":case"MTRSettings":break;case"RefreshAll":case"CalcCount":case"CalcDelta":case"CalcIter":case"CalcMode":case"CalcPrecision":case"CalcSaveRecalc":h.opts[Z]=J;break;case"CalcRefMode":T.CalcRefMode=J;break;case"Uncalced":break;case"ForceFullCalculation":h.opts.FullCalc=J;break;case"WsBool":J.fDialog&&(d["!type"]="dialog");break;case"XF":E.push(J);break;case"ExtSST":case"BookExt":case"RichTextStream":case"BkHim":break;case"SupBook":$.push([J]),$[$.length-1].XTI=[];break;case"ExternName":$[$.length-1].push(J);break;case"Index":break;case"Lbl":P={Name:J.Name,Ref:zi(J.rgce,0,null,$,T)},J.itab>0&&(P.Sheet=J.itab-1),$.names.push(P),$[0]||($[0]=[],$[0].XTI=[]),$[$.length-1].push(J),"_xlnm._FilterDatabase"==J.Name&&J.itab>0&&J.rgce&&J.rgce[0]&&J.rgce[0][0]&&"PtgArea3d"==J.rgce[0][0][0]&&(j[J.itab-1]={ref:Zt(J.rgce[0][0][1][2])});break;case"ExternCount":T.ExternCount=J;break;case"ExternSheet":0==$.length&&($[0]=[],$[0].XTI=[]),$[$.length-1].XTI=$[$.length-1].XTI.concat(J),$.XTI=$.XTI.concat(J);break;case"NameCmt":if(T.biff<8)break;null!=P&&(P.Comment=J[1]);break;case"Protect":d["!protect"]=J;break;case"Password":0!==J&&T.WTF&&console.error("Password verifier: "+J);break;case"Prot4Rev":case"Prot4RevPass":break;case"BoundSheet8":p[J.pos]=J,T.snames.push(J.name);break;case"EOF":if(--W)break;if(m.e){if(m.e.r>0&&m.e.c>0){if(m.e.r--,m.e.c--,d["!ref"]=Zt(m),t.sheetRows&&t.sheetRows<=m.e.r){var ee=m.e.r;m.e.r=t.sheetRows-1,d["!fullref"]=d["!ref"],d["!ref"]=Zt(m),m.e.r=ee}m.e.r++,m.e.c++}F.length>0&&(d["!merges"]=F),R.length>0&&(d["!objects"]=R),O.length>0&&(d["!cols"]=O),M.length>0&&(d["!rows"]=M),S.Sheets.push(N)}""===b?v=d:f[b]=d,d=t.dense?[]:{};break;case"BOF":if(8===T.biff&&(T.biff={9:2,521:3,1033:4}[X]||{512:2,768:3,1024:4,1280:5,1536:8,2:2,7:2}[J.BIFFVer]||8),8==T.biff&&0==J.BIFFVer&&16==J.dt&&(T.biff=2),W++)break;if(k=!0,d=t.dense?[]:{},T.biff<8&&!H&&(H=!0,u(T.codepage=t.codepage||1252)),T.biff<5){""===b&&(b="Sheet1"),m={s:{r:0,c:0},e:{r:0,c:0}};var te={pos:e.l-K,name:b};p[te.pos]=te,T.snames.push(b)}else b=(p[G]||{name:""}).name;32==J.dt&&(d["!type"]="chart"),64==J.dt&&(d["!type"]="macro"),F=[],R=[],T.arrayf=x=[],O=[],M=[],B=!1,N={Hidden:(p[G]||{hs:0}).hs,name:b};break;case"Number":case"BIFF2NUM":case"BIFF2INT":"chart"==d["!type"]&&(t.dense?(d[J.r]||[])[J.c]:d[Yt({c:J.c,r:J.r})])&&++J.c,o={ixfe:J.ixfe,XF:E[J.ixfe]||{},v:J.val,t:"n"},U>0&&(o.z=V[o.ixfe>>8&31]),Sl(o,t,h.opts.Date1904),D({c:J.c,r:J.r},o,t);break;case"BoolErr":o={ixfe:J.ixfe,XF:E[J.ixfe],v:J.val,t:J.t},U>0&&(o.z=V[o.ixfe>>8&31]),Sl(o,t,h.opts.Date1904),D({c:J.c,r:J.r},o,t);break;case"RK":o={ixfe:J.ixfe,XF:E[J.ixfe],v:J.rknum,t:"n"},U>0&&(o.z=V[o.ixfe>>8&31]),Sl(o,t,h.opts.Date1904),D({c:J.c,r:J.r},o,t);break;case"MulRk":for(var ne=J.c;ne<=J.C;++ne){var re=J.rkrec[ne-J.c][0];o={ixfe:re,XF:E[re],v:J.rkrec[ne-J.c][1],t:"n"},U>0&&(o.z=V[o.ixfe>>8&31]),Sl(o,t,h.opts.Date1904),D({c:ne,r:J.r},o,t)}break;case"Formula":if("String"==J.val){g=J;break}if((o=Nl(J.val,J.cell.ixfe,J.tt)).XF=E[o.ixfe],t.cellFormula){var ae=J.formula;if(ae&&ae[0]&&ae[0][0]&&"PtgExp"==ae[0][0][0]){var se=ae[0][0][1][0],ie=ae[0][0][1][1],oe=Yt({r:se,c:ie});_[oe]?o.f=""+zi(J.formula,0,J.cell,$,T):o.F=((t.dense?(d[se]||[])[ie]:d[oe])||{}).F}else o.f=""+zi(J.formula,0,J.cell,$,T)}U>0&&(o.z=V[o.ixfe>>8&31]),Sl(o,t,h.opts.Date1904),D(J.cell,o,t),g=J;break;case"String":if(!g)throw new Error("String record expects Formula");g.val=J,(o=Nl(J,g.cell.ixfe,"s")).XF=E[o.ixfe],t.cellFormula&&(o.f=""+zi(g.formula,0,g.cell,$,T)),U>0&&(o.z=V[o.ixfe>>8&31]),Sl(o,t,h.opts.Date1904),D(g.cell,o,t),g=null;break;case"Array":x.push(J);var le=Yt(J[0].s);if(r=t.dense?(d[J[0].s.r]||[])[J[0].s.c]:d[le],t.cellFormula&&r){if(!g)break;if(!le||!r)break;r.f=""+zi(J[1],0,J[0],$,T),r.F=Zt(J[0])}break;case"ShrFmla":if(!k)break;if(!t.cellFormula)break;if(w){if(!g)break;_[Yt(g.cell)]=J[0],((r=t.dense?(d[g.cell.r]||[])[g.cell.c]:d[Yt(g.cell)])||{}).f=""+zi(J[0],0,n,$,T)}break;case"LabelSst":o=Nl(y[J.isst].t,J.ixfe,"s"),y[J.isst].h&&(o.h=y[J.isst].h),o.XF=E[o.ixfe],U>0&&(o.z=V[o.ixfe>>8&31]),Sl(o,t,h.opts.Date1904),D({c:J.c,r:J.r},o,t);break;case"Blank":t.sheetStubs&&(o={ixfe:J.ixfe,XF:E[J.ixfe],t:"z"},U>0&&(o.z=V[o.ixfe>>8&31]),Sl(o,t,h.opts.Date1904),D({c:J.c,r:J.r},o,t));break;case"MulBlank":if(t.sheetStubs)for(var ue=J.c;ue<=J.C;++ue){var ce=J.ixfe[ue-J.c];o={ixfe:ce,XF:E[ce],t:"z"},U>0&&(o.z=V[o.ixfe>>8&31]),Sl(o,t,h.opts.Date1904),D({c:ue,r:J.r},o,t)}break;case"RString":case"Label":case"BIFF2STR":(o=Nl(J.val,J.ixfe,"s")).XF=E[o.ixfe],U>0&&(o.z=V[o.ixfe>>8&31]),Sl(o,t,h.opts.Date1904),D({c:J.c,r:J.r},o,t);break;case"Dimensions":1===W&&(m=J);break;case"SST":y=J;break;case"Format":if(4==T.biff){V[U++]=J[1];for(var he=0;he=163&&A.load(J[1],U+163)}else A.load(J[1],J[0]);break;case"BIFF2FORMAT":V[U++]=J;for(var fe=0;fe=163&&A.load(J,U+163);break;case"MergeCells":F=F.concat(J);break;case"Obj":R[J.cmo[0]]=T.lastobj=J;break;case"TxO":T.lastobj.TxO=J;break;case"ImData":T.lastobj.ImData=J;break;case"HLink":for(i=J[0].s.r;i<=J[0].e.r;++i)for(s=J[0].s.c;s<=J[0].e.c;++s)(r=t.dense?(d[i]||[])[s]:d[Yt({c:s,r:i})])&&(r.l=J[1]);break;case"HLinkTooltip":for(i=J[0].s.r;i<=J[0].e.r;++i)for(s=J[0].s.c;s<=J[0].e.c;++s)(r=t.dense?(d[i]||[])[s]:d[Yt({c:s,r:i})])&&r.l&&(r.l.Tooltip=J[1]);break;case"Note":if(T.biff<=5&&T.biff>=2)break;r=t.dense?(d[J[0].r]||[])[J[0].c]:d[Yt(J[0])];var de=R[J[2]];r||(t.dense?(d[J[0].r]||(d[J[0].r]=[]),r=d[J[0].r][J[0].c]={t:"z"}):r=d[Yt(J[0])]={t:"z"},m.e.r=Math.max(m.e.r,J[0].r),m.s.r=Math.min(m.s.r,J[0].r),m.e.c=Math.max(m.e.c,J[0].c),m.s.c=Math.min(m.s.c,J[0].c)),r.c||(r.c=[]),a={a:J[1],t:de.TxO.t},r.c.push(a);break;default:switch(q.n){case"ClrtClient":break;case"XFExt":E[J.ixfe],J.ext.forEach((function(e){e[0]}));break;case"DefColWidth":break;case"DefaultRowHeight":J[1];break;case"ColInfo":if(!T.cellStyles)break;for(;J.e>=J.s;)O[J.e--]={width:J.w/256},B||(B=!0,ps(J.w/256)),ms(O[J.e+1]);break;case"Row":var pe={};null!=J.level&&(M[J.r]=pe,pe.level=J.level),J.hidden&&(M[J.r]=pe,pe.hidden=!0),J.hpt&&(M[J.r]=pe,pe.hpt=J.hpt,pe.hpx=ys(J.hpt));break;case"LeftMargin":case"RightMargin":case"TopMargin":case"BottomMargin":d["!margins"]||io(d["!margins"]={}),d["!margins"][Z.slice(0,-6).toLowerCase()]=J;break;case"Setup":d["!margins"]||io(d["!margins"]={}),d["!margins"].header=J.header,d["!margins"].footer=J.footer;break;case"Window2":J.RTL&&(S.Views[0].RTL=!0);break;case"Header":case"Footer":case"HCenter":case"VCenter":case"Pls":case"GCW":case"LHRecord":case"DBCell":case"EntExU2":case"SxView":case"Sxvd":case"SXVI":case"SXVDEx":case"SxIvd":case"SXString":case"Sync":case"Addin":case"SXDI":case"SXLI":case"SXEx":case"QsiSXTag":case"Selection":case"Feat":break;case"FeatHdr":case"FeatHdr11":break;case"Feature11":case"Feature12":case"List12":break;case"Country":l=J;break;case"RecalcId":case"DxGCol":break;case"Fbi":case"Fbi2":case"GelFrame":case"Font":case"XFCRC":case"Style":case"StyleExt":break;case"Palette":C=J;break;case"Theme":c=J;break;case"ScenarioProtect":case"ObjProtect":case"CondFmt12":case"Table":case"TableStyles":case"TableStyle":case"TableStyleElement":case"SXStreamID":case"SXVS":case"DConRef":case"SXAddl":case"DConBin":case"DConName":case"SXPI":case"SxFormat":case"SxSelect":case"SxRule":case"SxFilt":case"SxItm":case"SxDXF":case"ScenMan":case"DCon":case"CellWatch":case"PrintRowCol":case"PrintGrid":case"PrintSize":case"XCT":case"CRN":case"Scl":case"SheetExt":case"SheetExtOptional":case"ObNoMacros":case"ObProj":break;case"CodeName":b?N.CodeName=J||N.name:S.WBProps.CodeName=J||"ThisWorkbook";break;case"GUIDTypeLib":case"WOpt":case"PhoneticInfo":case"OleObjectSize":break;case"DXF":case"DXFN":case"DXFN12":case"DXFN12List":case"DXFN12NoCB":break;case"Dv":case"DVal":break;case"BRAI":case"Series":case"SeriesText":case"DConn":case"DbOrParamQry":case"DBQueryExt":case"OleDbConn":case"ExtString":case"IFmtRecord":break;case"CondFmt":case"CF":case"CF12":case"CFEx":case"Excel9File":case"Units":break;case"InterfaceHdr":case"Mms":case"InterfaceEnd":case"DSF":case"BuiltInFnGroupCount":break;case"Window1":case"HideObj":case"GridSet":case"Guts":case"UserBView":case"UserSViewBegin":case"UserSViewEnd":case"Pane":break;default:switch(q.n){case"Dat":case"Begin":case"End":case"StartBlock":case"EndBlock":case"Frame":case"Area":case"Axis":case"AxisLine":case"Tick":break;case"AxesUsed":case"CrtLayout12":case"CrtLayout12A":case"CrtLink":case"CrtLine":case"CrtMlFrt":case"CrtMlFrtContinue":break;case"LineFormat":case"AreaFormat":case"Chart":case"Chart3d":case"Chart3DBarShape":case"ChartFormat":case"ChartFrtInfo":break;case"PlotArea":case"PlotGrowth":break;case"SeriesList":case"SerParent":case"SerAuxTrend":break;case"DataFormat":case"SerToCrt":case"FontX":break;case"CatSerRange":case"AxcExt":case"SerFmt":case"ShtProps":break;case"DefaultText":case"Text":case"CatLab":case"DataLabExtContents":break;case"Legend":case"LegendException":break;case"Pie":case"Scatter":break;case"PieFormat":case"MarkerFormat":break;case"StartObject":case"EndObject":break;case"AlRuns":case"ObjectLink":case"SIIndex":break;case"AttachedLabel":case"YMult":break;case"Line":case"Bar":case"Surf":case"AxisParent":case"Pos":case"ValueRange":case"SXViewEx9":case"SXViewLink":case"PivotChartBits":case"SBaseRef":case"TextPropsStream":case"LnExt":case"MkrExt":case"CrtCoopt":break;case"Qsi":case"Qsif":case"Qsir":case"QsiSXTag":case"TxtQry":case"FilterMode":break;case"AutoFilter":case"AutoFilterInfo":case"AutoFilter12":case"DropDownObjIds":case"Sort":case"SortData":case"ShapePropsStream":break;case"MsoDrawing":case"MsoDrawingGroup":case"MsoDrawingSelection":break;case"WebPub":case"AutoWebPub":break;case"HeaderFooter":case"HFPicture":case"PLV":case"HorizontalPageBreaks":case"VerticalPageBreaks":break;case"Backup":case"CompressPictures":case"Compat12":break;case"Continue":case"ContinueFrt12":break;case"FrtFontList":case"FrtWrapper":break;default:switch(q.n){case"TabIdConf":case"Radar":case"RadarArea":case"DropBar":case"Intl":case"CoordList":case"SerAuxErrBar":break;case"BIFF2FONTCLR":case"BIFF2FMTCNT":case"BIFF2FONTXTRA":break;case"BIFF2XF":case"BIFF3XF":case"BIFF4XF":break;case"BIFF4FMTCNT":case"BIFF2ROW":case"BIFF2WINDOW2":break;case"SCENARIO":case"DConBin":case"PicF":case"DataLabExt":case"Lel":case"BopPop":case"BopPopCustom":case"RealTimeData":case"Name":break;case"LHNGraph":case"FnGroupName":case"AddMenu":case"LPr":break;case"ListObj":case"ListField":case"RRSort":case"BigName":break;case"ToolbarHdr":case"ToolbarEnd":case"DDEObjName":case"FRTArchId$":break;default:if(t.WTF)throw"Unrecognized Record "+q.n}}}}}else e.l+=K}return h.SheetNames=z(p).sort((function(e,t){return Number(e)-Number(t)})).map((function(e){return p[e].name})),t.bookSheets||(h.Sheets=f),h.Sheets&&j.forEach((function(e,t){h.Sheets[h.SheetNames[t]]["!autofilter"]=e})),h.Preamble=v,h.Strings=y,h.SSF=A.get_table(),T.enc&&(h.Encryption=T.enc),c&&(h.Themes=c),h.Metadata={},void 0!==l&&(h.Metadata.Country=l),$.names.length>0&&(S.Names=$.names),h.Workbook=S,h}(r.content,t);else if((s=B.find(e,"PerfectOffice_MAIN"))&&s.content)a=Fa.to_workbook(s.content,(t.type=i,t));else{if(!(s=B.find(e,"NativeContent_MAIN"))||!s.content)throw new Error("Cannot find Workbook stream");a=Fa.to_workbook(s.content,(t.type=i,t))}t.bookVBA&&e.FullPaths&&B.find(e,"/_VBA_PROJECT_CUR/VBA/dir")&&(a.vbaraw=function(e){var t=B.utils.cfb_new({root:"R"});return e.FullPaths.forEach((function(n,r){if("/"!==n.slice(-1)&&n.match(/_VBA_PROJECT_CUR/)){var a=n.replace(/^[^\/]*/,"R").replace(/\/_VBA_PROJECT_CUR\u0000*/,"");B.utils.cfb_add(t,a,e.FileIndex[r].content)}})),B.write(t)}(e))}var o={};return e.FullPaths&&function(e,t,n){var r=B.find(e,"!DocumentSummaryInformation");if(r&&r.size>0)try{var a=Ar(r,Dn,Al);for(var s in a)t[s]=a[s]}catch(e){if(n.WTF)throw e}var i=B.find(e,"!SummaryInformation");if(i&&i.size>0)try{var o=Ar(i,Tn,Il);for(var l in o)null==t[l]&&(t[l]=o[l])}catch(e){if(n.WTF)throw e}t.HeadingPairs&&t.TitlesOfParts&&(lr(t.HeadingPairs,t.TitlesOfParts,t,n),delete t.HeadingPairs,delete t.TitlesOfParts)}(e,o,t),a.Props=a.Custprops=o,t.bookFiles&&(a.cfb=e),a}var Tl={0:{n:"BrtRowHdr",f:function(e,t){var n={},r=e.l+t;n.r=e.read_shift(4),e.l+=4;var a=e.read_shift(2);e.l+=1;var s=e.read_shift(1);return e.l=r,7&s&&(n.level=7&s),16&s&&(n.hidden=!0),32&s&&(n.hpt=a/20),n}},1:{n:"BrtCellBlank",f:function(e){return[hn(e)]}},2:{n:"BrtCellRk",f:function(e){return[hn(e),wn(e),"n"]}},3:{n:"BrtCellError",f:function(e){return[hn(e),e.read_shift(1),"e"]}},4:{n:"BrtCellBool",f:function(e){return[hn(e),e.read_shift(1),"b"]}},5:{n:"BrtCellReal",f:function(e){return[hn(e),En(e),"n"]}},6:{n:"BrtCellSt",f:function(e){return[hn(e),sn(e),"str"]}},7:{n:"BrtCellIsst",f:function(e){return[hn(e),e.read_shift(4),"s"]}},8:{n:"BrtFmlaString",f:function(e,t,n){var r=e.l+t,a=hn(e);a.r=n["!row"];var s=[a,sn(e),"str"];if(n.cellFormula){e.l+=2;var i=Gi(e,r-e.l,n);s[3]=zi(i,0,a,n.supbooks,n)}else e.l=r;return s}},9:{n:"BrtFmlaNum",f:function(e,t,n){var r=e.l+t,a=hn(e);a.r=n["!row"];var s=[a,En(e),"n"];if(n.cellFormula){e.l+=2;var i=Gi(e,r-e.l,n);s[3]=zi(i,0,a,n.supbooks,n)}else e.l=r;return s}},10:{n:"BrtFmlaBool",f:function(e,t,n){var r=e.l+t,a=hn(e);a.r=n["!row"];var s=[a,e.read_shift(1),"b"];if(n.cellFormula){e.l+=2;var i=Gi(e,r-e.l,n);s[3]=zi(i,0,a,n.supbooks,n)}else e.l=r;return s}},11:{n:"BrtFmlaError",f:function(e,t,n){var r=e.l+t,a=hn(e);a.r=n["!row"];var s=[a,e.read_shift(1),"e"];if(n.cellFormula){e.l+=2;var i=Gi(e,r-e.l,n);s[3]=zi(i,0,a,n.supbooks,n)}else e.l=r;return s}},16:{n:"BrtFRTArchID$",f:function(e,t){var n={};return e.read_shift(4),n.ArchID=e.read_shift(4),e.l+=t-8,n}},19:{n:"BrtSSTItem",f:un},20:{n:"BrtPCDIMissing"},21:{n:"BrtPCDINumber"},22:{n:"BrtPCDIBoolean"},23:{n:"BrtPCDIError"},24:{n:"BrtPCDIString"},25:{n:"BrtPCDIDatetime"},26:{n:"BrtPCDIIndex"},27:{n:"BrtPCDIAMissing"},28:{n:"BrtPCDIANumber"},29:{n:"BrtPCDIABoolean"},30:{n:"BrtPCDIAError"},31:{n:"BrtPCDIAString"},32:{n:"BrtPCDIADatetime"},33:{n:"BrtPCRRecord"},34:{n:"BrtPCRRecordDt"},35:{n:"BrtFRTBegin"},36:{n:"BrtFRTEnd"},37:{n:"BrtACBegin"},38:{n:"BrtACEnd"},39:{n:"BrtName",f:function(e,t,n){var r=e.l+t;e.l+=4,e.l+=1;var a=e.read_shift(4),s=yn(e),i=Xi(e,0,n),o=mn(e);e.l=r;var l={Name:s,Ptg:i};return a<268435455&&(l.Sheet=a),o&&(l.Comment=o),l}},40:{n:"BrtIndexRowBlock"},42:{n:"BrtIndexBlock"},43:{n:"BrtFont",f:function(e,t,n){var r={};r.sz=e.read_shift(2)/20;var a=function(e){var t=e.read_shift(1);return e.l++,{fBold:1&t,fItalic:2&t,fUnderline:4&t,fStrikeout:8&t,fOutline:16&t,fShadow:32&t,fCondense:64&t,fExtend:128&t}}(e);switch(a.fItalic&&(r.italic=1),a.fCondense&&(r.condense=1),a.fExtend&&(r.extend=1),a.fShadow&&(r.shadow=1),a.fOutline&&(r.outline=1),a.fStrikeout&&(r.strike=1),700===e.read_shift(2)&&(r.bold=1),e.read_shift(2)){case 1:r.vertAlign="superscript";break;case 2:r.vertAlign="subscript"}var s=e.read_shift(1);0!=s&&(r.underline=s);var i=e.read_shift(1);i>0&&(r.family=i);var o=e.read_shift(1);switch(o>0&&(r.charset=o),e.l++,r.color=function(e){var t={},n=e.read_shift(1)>>>1,r=e.read_shift(1),a=e.read_shift(2,"i"),s=e.read_shift(1),i=e.read_shift(1),o=e.read_shift(1);switch(e.l++,n){case 0:t.auto=1;break;case 1:t.index=r;var l=Pn[r];l&&(t.rgb=os(l));break;case 2:t.rgb=os([s,i,o]);break;case 3:t.theme=r}return 0!=a&&(t.tint=a>0?a/32767:a/32768),t}(e),e.read_shift(1)){case 1:r.scheme="major";break;case 2:r.scheme="minor"}return r.name=sn(e),r}},44:{n:"BrtFmt",f:function(e,t){return[e.read_shift(2),sn(e)]}},45:{n:"BrtFill",f:Ts},46:{n:"BrtBorder",f:Ms},47:{n:"BrtXF",f:function(e,t){var n=e.l+t,r=e.read_shift(2),a=e.read_shift(2);return e.l=n,{ixfe:r,numFmtId:a}}},48:{n:"BrtStyle"},49:{n:"BrtCellMeta"},50:{n:"BrtValueMeta"},51:{n:"BrtMdb"},52:{n:"BrtBeginFmd"},53:{n:"BrtEndFmd"},54:{n:"BrtBeginMdx"},55:{n:"BrtEndMdx"},56:{n:"BrtBeginMdxTuple"},57:{n:"BrtEndMdxTuple"},58:{n:"BrtMdxMbrIstr"},59:{n:"BrtStr"},60:{n:"BrtColInfo",f:ka},62:{n:"BrtCellRString"},63:{n:"BrtCalcChainItem$",f:function(e){var t={};t.i=e.read_shift(4);var n={};n.r=e.read_shift(4),n.c=e.read_shift(4),t.r=Yt(n);var r=e.read_shift(1);return 2&r&&(t.l="1"),8&r&&(t.a="1"),t}},64:{n:"BrtDVal",f:function(){}},65:{n:"BrtSxvcellNum"},66:{n:"BrtSxvcellStr"},67:{n:"BrtSxvcellBool"},68:{n:"BrtSxvcellErr"},69:{n:"BrtSxvcellDate"},70:{n:"BrtSxvcellNil"},128:{n:"BrtFileVersion"},129:{n:"BrtBeginSheet"},130:{n:"BrtEndSheet"},131:{n:"BrtBeginBook",f:Bt,p:0},132:{n:"BrtEndBook"},133:{n:"BrtBeginWsViews"},134:{n:"BrtEndWsViews"},135:{n:"BrtBeginBookViews"},136:{n:"BrtEndBookViews"},137:{n:"BrtBeginWsView",f:function(e){var t=e.read_shift(2);return e.l+=28,{RTL:32&t}}},138:{n:"BrtEndWsView"},139:{n:"BrtBeginCsViews"},140:{n:"BrtEndCsViews"},141:{n:"BrtBeginCsView"},142:{n:"BrtEndCsView"},143:{n:"BrtBeginBundleShs"},144:{n:"BrtEndBundleShs"},145:{n:"BrtBeginSheetData"},146:{n:"BrtEndSheetData"},147:{n:"BrtWsProp",f:function(e,t){var n={};return e.l+=19,n.name=dn(e,t-19),n}},148:{n:"BrtWsDim",f:Bo,p:16},151:{n:"BrtPane",f:function(){}},152:{n:"BrtSel"},153:{n:"BrtWbProp",f:function(e,t){var n={},r=e.read_shift(4);n.defaultThemeVersion=e.read_shift(4);var a=t>8?sn(e):"";return a.length>0&&(n.CodeName=a),n.autoCompressPictures=!!(65536&r),n.backupFile=!!(64&r),n.checkCompatibility=!!(4096&r),n.date1904=!!(1&r),n.filterPrivacy=!!(8&r),n.hidePivotFieldList=!!(1024&r),n.promptedSolutions=!!(16&r),n.publishItems=!!(2048&r),n.refreshAllConnections=!!(262144&r),n.saveExternalLinkValues=!!(128&r),n.showBorderUnselectedTables=!!(4&r),n.showInkAnnotation=!!(32&r),n.showObjects=["all","placeholders","none"][r>>13&3],n.showPivotChartFilter=!!(32768&r),n.updateLinks=["userSet","never","always"][r>>8&3],n}},154:{n:"BrtWbFactoid"},155:{n:"BrtFileRecover"},156:{n:"BrtBundleSh",f:function(e,t){var n={};return n.Hidden=e.read_shift(4),n.iTabID=e.read_shift(4),n.strRelID=bn(e,t-8),n.name=sn(e),n}},157:{n:"BrtCalcProp"},158:{n:"BrtBookView"},159:{n:"BrtBeginSst",f:function(e){return[e.read_shift(4),e.read_shift(4)]}},160:{n:"BrtEndSst"},161:{n:"BrtBeginAFilter",f:xn},162:{n:"BrtEndAFilter"},163:{n:"BrtBeginFilterColumn"},164:{n:"BrtEndFilterColumn"},165:{n:"BrtBeginFilters"},166:{n:"BrtEndFilters"},167:{n:"BrtFilter"},168:{n:"BrtColorFilter"},169:{n:"BrtIconFilter"},170:{n:"BrtTop10Filter"},171:{n:"BrtDynamicFilter"},172:{n:"BrtBeginCustomFilters"},173:{n:"BrtEndCustomFilters"},174:{n:"BrtCustomFilter"},175:{n:"BrtAFilterDateGroupItem"},176:{n:"BrtMergeCell",f:Po},177:{n:"BrtBeginMergeCells"},178:{n:"BrtEndMergeCells"},179:{n:"BrtBeginPivotCacheDef"},180:{n:"BrtEndPivotCacheDef"},181:{n:"BrtBeginPCDFields"},182:{n:"BrtEndPCDFields"},183:{n:"BrtBeginPCDField"},184:{n:"BrtEndPCDField"},185:{n:"BrtBeginPCDSource"},186:{n:"BrtEndPCDSource"},187:{n:"BrtBeginPCDSRange"},188:{n:"BrtEndPCDSRange"},189:{n:"BrtBeginPCDFAtbl"},190:{n:"BrtEndPCDFAtbl"},191:{n:"BrtBeginPCDIRun"},192:{n:"BrtEndPCDIRun"},193:{n:"BrtBeginPivotCacheRecords"},194:{n:"BrtEndPivotCacheRecords"},195:{n:"BrtBeginPCDHierarchies"},196:{n:"BrtEndPCDHierarchies"},197:{n:"BrtBeginPCDHierarchy"},198:{n:"BrtEndPCDHierarchy"},199:{n:"BrtBeginPCDHFieldsUsage"},200:{n:"BrtEndPCDHFieldsUsage"},201:{n:"BrtBeginExtConnection"},202:{n:"BrtEndExtConnection"},203:{n:"BrtBeginECDbProps"},204:{n:"BrtEndECDbProps"},205:{n:"BrtBeginECOlapProps"},206:{n:"BrtEndECOlapProps"},207:{n:"BrtBeginPCDSConsol"},208:{n:"BrtEndPCDSConsol"},209:{n:"BrtBeginPCDSCPages"},210:{n:"BrtEndPCDSCPages"},211:{n:"BrtBeginPCDSCPage"},212:{n:"BrtEndPCDSCPage"},213:{n:"BrtBeginPCDSCPItem"},214:{n:"BrtEndPCDSCPItem"},215:{n:"BrtBeginPCDSCSets"},216:{n:"BrtEndPCDSCSets"},217:{n:"BrtBeginPCDSCSet"},218:{n:"BrtEndPCDSCSet"},219:{n:"BrtBeginPCDFGroup"},220:{n:"BrtEndPCDFGroup"},221:{n:"BrtBeginPCDFGItems"},222:{n:"BrtEndPCDFGItems"},223:{n:"BrtBeginPCDFGRange"},224:{n:"BrtEndPCDFGRange"},225:{n:"BrtBeginPCDFGDiscrete"},226:{n:"BrtEndPCDFGDiscrete"},227:{n:"BrtBeginPCDSDTupleCache"},228:{n:"BrtEndPCDSDTupleCache"},229:{n:"BrtBeginPCDSDTCEntries"},230:{n:"BrtEndPCDSDTCEntries"},231:{n:"BrtBeginPCDSDTCEMembers"},232:{n:"BrtEndPCDSDTCEMembers"},233:{n:"BrtBeginPCDSDTCEMember"},234:{n:"BrtEndPCDSDTCEMember"},235:{n:"BrtBeginPCDSDTCQueries"},236:{n:"BrtEndPCDSDTCQueries"},237:{n:"BrtBeginPCDSDTCQuery"},238:{n:"BrtEndPCDSDTCQuery"},239:{n:"BrtBeginPCDSDTCSets"},240:{n:"BrtEndPCDSDTCSets"},241:{n:"BrtBeginPCDSDTCSet"},242:{n:"BrtEndPCDSDTCSet"},243:{n:"BrtBeginPCDCalcItems"},244:{n:"BrtEndPCDCalcItems"},245:{n:"BrtBeginPCDCalcItem"},246:{n:"BrtEndPCDCalcItem"},247:{n:"BrtBeginPRule"},248:{n:"BrtEndPRule"},249:{n:"BrtBeginPRFilters"},250:{n:"BrtEndPRFilters"},251:{n:"BrtBeginPRFilter"},252:{n:"BrtEndPRFilter"},253:{n:"BrtBeginPNames"},254:{n:"BrtEndPNames"},255:{n:"BrtBeginPName"},256:{n:"BrtEndPName"},257:{n:"BrtBeginPNPairs"},258:{n:"BrtEndPNPairs"},259:{n:"BrtBeginPNPair"},260:{n:"BrtEndPNPair"},261:{n:"BrtBeginECWebProps"},262:{n:"BrtEndECWebProps"},263:{n:"BrtBeginEcWpTables"},264:{n:"BrtEndECWPTables"},265:{n:"BrtBeginECParams"},266:{n:"BrtEndECParams"},267:{n:"BrtBeginECParam"},268:{n:"BrtEndECParam"},269:{n:"BrtBeginPCDKPIs"},270:{n:"BrtEndPCDKPIs"},271:{n:"BrtBeginPCDKPI"},272:{n:"BrtEndPCDKPI"},273:{n:"BrtBeginDims"},274:{n:"BrtEndDims"},275:{n:"BrtBeginDim"},276:{n:"BrtEndDim"},277:{n:"BrtIndexPartEnd"},278:{n:"BrtBeginStyleSheet"},279:{n:"BrtEndStyleSheet"},280:{n:"BrtBeginSXView"},281:{n:"BrtEndSXVI"},282:{n:"BrtBeginSXVI"},283:{n:"BrtBeginSXVIs"},284:{n:"BrtEndSXVIs"},285:{n:"BrtBeginSXVD"},286:{n:"BrtEndSXVD"},287:{n:"BrtBeginSXVDs"},288:{n:"BrtEndSXVDs"},289:{n:"BrtBeginSXPI"},290:{n:"BrtEndSXPI"},291:{n:"BrtBeginSXPIs"},292:{n:"BrtEndSXPIs"},293:{n:"BrtBeginSXDI"},294:{n:"BrtEndSXDI"},295:{n:"BrtBeginSXDIs"},296:{n:"BrtEndSXDIs"},297:{n:"BrtBeginSXLI"},298:{n:"BrtEndSXLI"},299:{n:"BrtBeginSXLIRws"},300:{n:"BrtEndSXLIRws"},301:{n:"BrtBeginSXLICols"},302:{n:"BrtEndSXLICols"},303:{n:"BrtBeginSXFormat"},304:{n:"BrtEndSXFormat"},305:{n:"BrtBeginSXFormats"},306:{n:"BrtEndSxFormats"},307:{n:"BrtBeginSxSelect"},308:{n:"BrtEndSxSelect"},309:{n:"BrtBeginISXVDRws"},310:{n:"BrtEndISXVDRws"},311:{n:"BrtBeginISXVDCols"},312:{n:"BrtEndISXVDCols"},313:{n:"BrtEndSXLocation"},314:{n:"BrtBeginSXLocation"},315:{n:"BrtEndSXView"},316:{n:"BrtBeginSXTHs"},317:{n:"BrtEndSXTHs"},318:{n:"BrtBeginSXTH"},319:{n:"BrtEndSXTH"},320:{n:"BrtBeginISXTHRws"},321:{n:"BrtEndISXTHRws"},322:{n:"BrtBeginISXTHCols"},323:{n:"BrtEndISXTHCols"},324:{n:"BrtBeginSXTDMPS"},325:{n:"BrtEndSXTDMPs"},326:{n:"BrtBeginSXTDMP"},327:{n:"BrtEndSXTDMP"},328:{n:"BrtBeginSXTHItems"},329:{n:"BrtEndSXTHItems"},330:{n:"BrtBeginSXTHItem"},331:{n:"BrtEndSXTHItem"},332:{n:"BrtBeginMetadata"},333:{n:"BrtEndMetadata"},334:{n:"BrtBeginEsmdtinfo"},335:{n:"BrtMdtinfo"},336:{n:"BrtEndEsmdtinfo"},337:{n:"BrtBeginEsmdb"},338:{n:"BrtEndEsmdb"},339:{n:"BrtBeginEsfmd"},340:{n:"BrtEndEsfmd"},341:{n:"BrtBeginSingleCells"},342:{n:"BrtEndSingleCells"},343:{n:"BrtBeginList"},344:{n:"BrtEndList"},345:{n:"BrtBeginListCols"},346:{n:"BrtEndListCols"},347:{n:"BrtBeginListCol"},348:{n:"BrtEndListCol"},349:{n:"BrtBeginListXmlCPr"},350:{n:"BrtEndListXmlCPr"},351:{n:"BrtListCCFmla"},352:{n:"BrtListTrFmla"},353:{n:"BrtBeginExternals"},354:{n:"BrtEndExternals"},355:{n:"BrtSupBookSrc",f:bn},357:{n:"BrtSupSelf"},358:{n:"BrtSupSame"},359:{n:"BrtSupTabs"},360:{n:"BrtBeginSupBook"},361:{n:"BrtPlaceholderName"},362:{n:"BrtExternSheet",f:ba},363:{n:"BrtExternTableStart"},364:{n:"BrtExternTableEnd"},366:{n:"BrtExternRowHdr"},367:{n:"BrtExternCellBlank"},368:{n:"BrtExternCellReal"},369:{n:"BrtExternCellBool"},370:{n:"BrtExternCellError"},371:{n:"BrtExternCellString"},372:{n:"BrtBeginEsmdx"},373:{n:"BrtEndEsmdx"},374:{n:"BrtBeginMdxSet"},375:{n:"BrtEndMdxSet"},376:{n:"BrtBeginMdxMbrProp"},377:{n:"BrtEndMdxMbrProp"},378:{n:"BrtBeginMdxKPI"},379:{n:"BrtEndMdxKPI"},380:{n:"BrtBeginEsstr"},381:{n:"BrtEndEsstr"},382:{n:"BrtBeginPRFItem"},383:{n:"BrtEndPRFItem"},384:{n:"BrtBeginPivotCacheIDs"},385:{n:"BrtEndPivotCacheIDs"},386:{n:"BrtBeginPivotCacheID"},387:{n:"BrtEndPivotCacheID"},388:{n:"BrtBeginISXVIs"},389:{n:"BrtEndISXVIs"},390:{n:"BrtBeginColInfos"},391:{n:"BrtEndColInfos"},392:{n:"BrtBeginRwBrk"},393:{n:"BrtEndRwBrk"},394:{n:"BrtBeginColBrk"},395:{n:"BrtEndColBrk"},396:{n:"BrtBrk"},397:{n:"BrtUserBookView"},398:{n:"BrtInfo"},399:{n:"BrtCUsr"},400:{n:"BrtUsr"},401:{n:"BrtBeginUsers"},403:{n:"BrtEOF"},404:{n:"BrtUCR"},405:{n:"BrtRRInsDel"},406:{n:"BrtRREndInsDel"},407:{n:"BrtRRMove"},408:{n:"BrtRREndMove"},409:{n:"BrtRRChgCell"},410:{n:"BrtRREndChgCell"},411:{n:"BrtRRHeader"},412:{n:"BrtRRUserView"},413:{n:"BrtRRRenSheet"},414:{n:"BrtRRInsertSh"},415:{n:"BrtRRDefName"},416:{n:"BrtRRNote"},417:{n:"BrtRRConflict"},418:{n:"BrtRRTQSIF"},419:{n:"BrtRRFormat"},420:{n:"BrtRREndFormat"},421:{n:"BrtRRAutoFmt"},422:{n:"BrtBeginUserShViews"},423:{n:"BrtBeginUserShView"},424:{n:"BrtEndUserShView"},425:{n:"BrtEndUserShViews"},426:{n:"BrtArrFmla",f:function(e,t,n){var r=e.l+t,a=_n(e),s=e.read_shift(1),i=[a];if(i[2]=s,n.cellFormula){var o=Hi(e,r-e.l,n);i[1]=o}else e.l=r;return i}},427:{n:"BrtShrFmla",f:function(e,t,n){var r=e.l+t,a=[xn(e,16)];if(n.cellFormula){var s=Ki(e,r-e.l,n);a[1]=s,e.l=r}else e.l=r;return a}},428:{n:"BrtTable"},429:{n:"BrtBeginExtConnections"},430:{n:"BrtEndExtConnections"},431:{n:"BrtBeginPCDCalcMems"},432:{n:"BrtEndPCDCalcMems"},433:{n:"BrtBeginPCDCalcMem"},434:{n:"BrtEndPCDCalcMem"},435:{n:"BrtBeginPCDHGLevels"},436:{n:"BrtEndPCDHGLevels"},437:{n:"BrtBeginPCDHGLevel"},438:{n:"BrtEndPCDHGLevel"},439:{n:"BrtBeginPCDHGLGroups"},440:{n:"BrtEndPCDHGLGroups"},441:{n:"BrtBeginPCDHGLGroup"},442:{n:"BrtEndPCDHGLGroup"},443:{n:"BrtBeginPCDHGLGMembers"},444:{n:"BrtEndPCDHGLGMembers"},445:{n:"BrtBeginPCDHGLGMember"},446:{n:"BrtEndPCDHGLGMember"},447:{n:"BrtBeginQSI"},448:{n:"BrtEndQSI"},449:{n:"BrtBeginQSIR"},450:{n:"BrtEndQSIR"},451:{n:"BrtBeginDeletedNames"},452:{n:"BrtEndDeletedNames"},453:{n:"BrtBeginDeletedName"},454:{n:"BrtEndDeletedName"},455:{n:"BrtBeginQSIFs"},456:{n:"BrtEndQSIFs"},457:{n:"BrtBeginQSIF"},458:{n:"BrtEndQSIF"},459:{n:"BrtBeginAutoSortScope"},460:{n:"BrtEndAutoSortScope"},461:{n:"BrtBeginConditionalFormatting"},462:{n:"BrtEndConditionalFormatting"},463:{n:"BrtBeginCFRule"},464:{n:"BrtEndCFRule"},465:{n:"BrtBeginIconSet"},466:{n:"BrtEndIconSet"},467:{n:"BrtBeginDatabar"},468:{n:"BrtEndDatabar"},469:{n:"BrtBeginColorScale"},470:{n:"BrtEndColorScale"},471:{n:"BrtCFVO"},472:{n:"BrtExternValueMeta"},473:{n:"BrtBeginColorPalette"},474:{n:"BrtEndColorPalette"},475:{n:"BrtIndexedColor"},476:{n:"BrtMargins",f:function(e){var t={};return zo.forEach((function(n){t[n]=En(e)})),t}},477:{n:"BrtPrintOptions"},478:{n:"BrtPageSetup"},479:{n:"BrtBeginHeaderFooter"},480:{n:"BrtEndHeaderFooter"},481:{n:"BrtBeginSXCrtFormat"},482:{n:"BrtEndSXCrtFormat"},483:{n:"BrtBeginSXCrtFormats"},484:{n:"BrtEndSXCrtFormats"},485:{n:"BrtWsFmtInfo",f:function(){}},486:{n:"BrtBeginMgs"},487:{n:"BrtEndMGs"},488:{n:"BrtBeginMGMaps"},489:{n:"BrtEndMGMaps"},490:{n:"BrtBeginMG"},491:{n:"BrtEndMG"},492:{n:"BrtBeginMap"},493:{n:"BrtEndMap"},494:{n:"BrtHLink",f:function(e,t){var n=e.l+t,r=xn(e,16),a=mn(e),s=sn(e),i=sn(e),o=sn(e);e.l=n;var l={rfx:r,relId:a,loc:s,display:o};return i&&(l.Tooltip=i),l}},495:{n:"BrtBeginDCon"},496:{n:"BrtEndDCon"},497:{n:"BrtBeginDRefs"},498:{n:"BrtEndDRefs"},499:{n:"BrtDRef"},500:{n:"BrtBeginScenMan"},501:{n:"BrtEndScenMan"},502:{n:"BrtBeginSct"},503:{n:"BrtEndSct"},504:{n:"BrtSlc"},505:{n:"BrtBeginDXFs"},506:{n:"BrtEndDXFs"},507:{n:"BrtDXF"},508:{n:"BrtBeginTableStyles"},509:{n:"BrtEndTableStyles"},510:{n:"BrtBeginTableStyle"},511:{n:"BrtEndTableStyle"},512:{n:"BrtTableStyleElement"},513:{n:"BrtTableStyleClient"},514:{n:"BrtBeginVolDeps"},515:{n:"BrtEndVolDeps"},516:{n:"BrtBeginVolType"},517:{n:"BrtEndVolType"},518:{n:"BrtBeginVolMain"},519:{n:"BrtEndVolMain"},520:{n:"BrtBeginVolTopic"},521:{n:"BrtEndVolTopic"},522:{n:"BrtVolSubtopic"},523:{n:"BrtVolRef"},524:{n:"BrtVolNum"},525:{n:"BrtVolErr"},526:{n:"BrtVolStr"},527:{n:"BrtVolBool"},528:{n:"BrtBeginCalcChain$"},529:{n:"BrtEndCalcChain$"},530:{n:"BrtBeginSortState"},531:{n:"BrtEndSortState"},532:{n:"BrtBeginSortCond"},533:{n:"BrtEndSortCond"},534:{n:"BrtBookProtection"},535:{n:"BrtSheetProtection"},536:{n:"BrtRangeProtection"},537:{n:"BrtPhoneticInfo"},538:{n:"BrtBeginECTxtWiz"},539:{n:"BrtEndECTxtWiz"},540:{n:"BrtBeginECTWFldInfoLst"},541:{n:"BrtEndECTWFldInfoLst"},542:{n:"BrtBeginECTwFldInfo"},548:{n:"BrtFileSharing"},549:{n:"BrtOleSize"},550:{n:"BrtDrawing",f:bn},551:{n:"BrtLegacyDrawing"},552:{n:"BrtLegacyDrawingHF"},553:{n:"BrtWebOpt"},554:{n:"BrtBeginWebPubItems"},555:{n:"BrtEndWebPubItems"},556:{n:"BrtBeginWebPubItem"},557:{n:"BrtEndWebPubItem"},558:{n:"BrtBeginSXCondFmt"},559:{n:"BrtEndSXCondFmt"},560:{n:"BrtBeginSXCondFmts"},561:{n:"BrtEndSXCondFmts"},562:{n:"BrtBkHim"},564:{n:"BrtColor"},565:{n:"BrtBeginIndexedColors"},566:{n:"BrtEndIndexedColors"},569:{n:"BrtBeginMRUColors"},570:{n:"BrtEndMRUColors"},572:{n:"BrtMRUColor"},573:{n:"BrtBeginDVals"},574:{n:"BrtEndDVals"},577:{n:"BrtSupNameStart"},578:{n:"BrtSupNameValueStart"},579:{n:"BrtSupNameValueEnd"},580:{n:"BrtSupNameNum"},581:{n:"BrtSupNameErr"},582:{n:"BrtSupNameSt"},583:{n:"BrtSupNameNil"},584:{n:"BrtSupNameBool"},585:{n:"BrtSupNameFmla"},586:{n:"BrtSupNameBits"},587:{n:"BrtSupNameEnd"},588:{n:"BrtEndSupBook"},589:{n:"BrtCellSmartTagProperty"},590:{n:"BrtBeginCellSmartTag"},591:{n:"BrtEndCellSmartTag"},592:{n:"BrtBeginCellSmartTags"},593:{n:"BrtEndCellSmartTags"},594:{n:"BrtBeginSmartTags"},595:{n:"BrtEndSmartTags"},596:{n:"BrtSmartTagType"},597:{n:"BrtBeginSmartTagTypes"},598:{n:"BrtEndSmartTagTypes"},599:{n:"BrtBeginSXFilters"},600:{n:"BrtEndSXFilters"},601:{n:"BrtBeginSXFILTER"},602:{n:"BrtEndSXFilter"},603:{n:"BrtBeginFills"},604:{n:"BrtEndFills"},605:{n:"BrtBeginCellWatches"},606:{n:"BrtEndCellWatches"},607:{n:"BrtCellWatch"},608:{n:"BrtBeginCRErrs"},609:{n:"BrtEndCRErrs"},610:{n:"BrtCrashRecErr"},611:{n:"BrtBeginFonts"},612:{n:"BrtEndFonts"},613:{n:"BrtBeginBorders"},614:{n:"BrtEndBorders"},615:{n:"BrtBeginFmts"},616:{n:"BrtEndFmts"},617:{n:"BrtBeginCellXFs"},618:{n:"BrtEndCellXFs"},619:{n:"BrtBeginStyles"},620:{n:"BrtEndStyles"},625:{n:"BrtBigName"},626:{n:"BrtBeginCellStyleXFs"},627:{n:"BrtEndCellStyleXFs"},628:{n:"BrtBeginComments"},629:{n:"BrtEndComments"},630:{n:"BrtBeginCommentAuthors"},631:{n:"BrtEndCommentAuthors"},632:{n:"BrtCommentAuthor",f:Zs},633:{n:"BrtBeginCommentList"},634:{n:"BrtEndCommentList"},635:{n:"BrtBeginComment",f:function(e){var t={};t.iauthor=e.read_shift(4);var n=xn(e,16);return t.rfx=n.s,t.ref=Yt(n.s),e.l+=16,t}},636:{n:"BrtEndComment"},637:{n:"BrtCommentText",f:cn},638:{n:"BrtBeginOleObjects"},639:{n:"BrtOleObject"},640:{n:"BrtEndOleObjects"},641:{n:"BrtBeginSxrules"},642:{n:"BrtEndSxRules"},643:{n:"BrtBeginActiveXControls"},644:{n:"BrtActiveX"},645:{n:"BrtEndActiveXControls"},646:{n:"BrtBeginPCDSDTCEMembersSortBy"},648:{n:"BrtBeginCellIgnoreECs"},649:{n:"BrtCellIgnoreEC"},650:{n:"BrtEndCellIgnoreECs"},651:{n:"BrtCsProp",f:function(e,t){return e.l+=10,{name:sn(e)}}},652:{n:"BrtCsPageSetup"},653:{n:"BrtBeginUserCsViews"},654:{n:"BrtEndUserCsViews"},655:{n:"BrtBeginUserCsView"},656:{n:"BrtEndUserCsView"},657:{n:"BrtBeginPcdSFCIEntries"},658:{n:"BrtEndPCDSFCIEntries"},659:{n:"BrtPCDSFCIEntry"},660:{n:"BrtBeginListParts"},661:{n:"BrtListPart"},662:{n:"BrtEndListParts"},663:{n:"BrtSheetCalcProp"},664:{n:"BrtBeginFnGroup"},665:{n:"BrtFnGroup"},666:{n:"BrtEndFnGroup"},667:{n:"BrtSupAddin"},668:{n:"BrtSXTDMPOrder"},669:{n:"BrtCsProtection"},671:{n:"BrtBeginWsSortMap"},672:{n:"BrtEndWsSortMap"},673:{n:"BrtBeginRRSort"},674:{n:"BrtEndRRSort"},675:{n:"BrtRRSortItem"},676:{n:"BrtFileSharingIso"},677:{n:"BrtBookProtectionIso"},678:{n:"BrtSheetProtectionIso"},679:{n:"BrtCsProtectionIso"},680:{n:"BrtRangeProtectionIso"},681:{n:"BrtDValList"},1024:{n:"BrtRwDescent"},1025:{n:"BrtKnownFonts"},1026:{n:"BrtBeginSXTupleSet"},1027:{n:"BrtEndSXTupleSet"},1028:{n:"BrtBeginSXTupleSetHeader"},1029:{n:"BrtEndSXTupleSetHeader"},1030:{n:"BrtSXTupleSetHeaderItem"},1031:{n:"BrtBeginSXTupleSetData"},1032:{n:"BrtEndSXTupleSetData"},1033:{n:"BrtBeginSXTupleSetRow"},1034:{n:"BrtEndSXTupleSetRow"},1035:{n:"BrtSXTupleSetRowItem"},1036:{n:"BrtNameExt"},1037:{n:"BrtPCDH14"},1038:{n:"BrtBeginPCDCalcMem14"},1039:{n:"BrtEndPCDCalcMem14"},1040:{n:"BrtSXTH14"},1041:{n:"BrtBeginSparklineGroup"},1042:{n:"BrtEndSparklineGroup"},1043:{n:"BrtSparkline"},1044:{n:"BrtSXDI14"},1045:{n:"BrtWsFmtInfoEx14"},1046:{n:"BrtBeginConditionalFormatting14"},1047:{n:"BrtEndConditionalFormatting14"},1048:{n:"BrtBeginCFRule14"},1049:{n:"BrtEndCFRule14"},1050:{n:"BrtCFVO14"},1051:{n:"BrtBeginDatabar14"},1052:{n:"BrtBeginIconSet14"},1053:{n:"BrtDVal14",f:function(){}},1054:{n:"BrtBeginDVals14"},1055:{n:"BrtColor14"},1056:{n:"BrtBeginSparklines"},1057:{n:"BrtEndSparklines"},1058:{n:"BrtBeginSparklineGroups"},1059:{n:"BrtEndSparklineGroups"},1061:{n:"BrtSXVD14"},1062:{n:"BrtBeginSXView14"},1063:{n:"BrtEndSXView14"},1064:{n:"BrtBeginSXView16"},1065:{n:"BrtEndSXView16"},1066:{n:"BrtBeginPCD14"},1067:{n:"BrtEndPCD14"},1068:{n:"BrtBeginExtConn14"},1069:{n:"BrtEndExtConn14"},1070:{n:"BrtBeginSlicerCacheIDs"},1071:{n:"BrtEndSlicerCacheIDs"},1072:{n:"BrtBeginSlicerCacheID"},1073:{n:"BrtEndSlicerCacheID"},1075:{n:"BrtBeginSlicerCache"},1076:{n:"BrtEndSlicerCache"},1077:{n:"BrtBeginSlicerCacheDef"},1078:{n:"BrtEndSlicerCacheDef"},1079:{n:"BrtBeginSlicersEx"},1080:{n:"BrtEndSlicersEx"},1081:{n:"BrtBeginSlicerEx"},1082:{n:"BrtEndSlicerEx"},1083:{n:"BrtBeginSlicer"},1084:{n:"BrtEndSlicer"},1085:{n:"BrtSlicerCachePivotTables"},1086:{n:"BrtBeginSlicerCacheOlapImpl"},1087:{n:"BrtEndSlicerCacheOlapImpl"},1088:{n:"BrtBeginSlicerCacheLevelsData"},1089:{n:"BrtEndSlicerCacheLevelsData"},1090:{n:"BrtBeginSlicerCacheLevelData"},1091:{n:"BrtEndSlicerCacheLevelData"},1092:{n:"BrtBeginSlicerCacheSiRanges"},1093:{n:"BrtEndSlicerCacheSiRanges"},1094:{n:"BrtBeginSlicerCacheSiRange"},1095:{n:"BrtEndSlicerCacheSiRange"},1096:{n:"BrtSlicerCacheOlapItem"},1097:{n:"BrtBeginSlicerCacheSelections"},1098:{n:"BrtSlicerCacheSelection"},1099:{n:"BrtEndSlicerCacheSelections"},1100:{n:"BrtBeginSlicerCacheNative"},1101:{n:"BrtEndSlicerCacheNative"},1102:{n:"BrtSlicerCacheNativeItem"},1103:{n:"BrtRangeProtection14"},1104:{n:"BrtRangeProtectionIso14"},1105:{n:"BrtCellIgnoreEC14"},1111:{n:"BrtList14"},1112:{n:"BrtCFIcon"},1113:{n:"BrtBeginSlicerCachesPivotCacheIDs"},1114:{n:"BrtEndSlicerCachesPivotCacheIDs"},1115:{n:"BrtBeginSlicers"},1116:{n:"BrtEndSlicers"},1117:{n:"BrtWbProp14"},1118:{n:"BrtBeginSXEdit"},1119:{n:"BrtEndSXEdit"},1120:{n:"BrtBeginSXEdits"},1121:{n:"BrtEndSXEdits"},1122:{n:"BrtBeginSXChange"},1123:{n:"BrtEndSXChange"},1124:{n:"BrtBeginSXChanges"},1125:{n:"BrtEndSXChanges"},1126:{n:"BrtSXTupleItems"},1128:{n:"BrtBeginSlicerStyle"},1129:{n:"BrtEndSlicerStyle"},1130:{n:"BrtSlicerStyleElement"},1131:{n:"BrtBeginStyleSheetExt14"},1132:{n:"BrtEndStyleSheetExt14"},1133:{n:"BrtBeginSlicerCachesPivotCacheID"},1134:{n:"BrtEndSlicerCachesPivotCacheID"},1135:{n:"BrtBeginConditionalFormattings"},1136:{n:"BrtEndConditionalFormattings"},1137:{n:"BrtBeginPCDCalcMemExt"},1138:{n:"BrtEndPCDCalcMemExt"},1139:{n:"BrtBeginPCDCalcMemsExt"},1140:{n:"BrtEndPCDCalcMemsExt"},1141:{n:"BrtPCDField14"},1142:{n:"BrtBeginSlicerStyles"},1143:{n:"BrtEndSlicerStyles"},1144:{n:"BrtBeginSlicerStyleElements"},1145:{n:"BrtEndSlicerStyleElements"},1146:{n:"BrtCFRuleExt"},1147:{n:"BrtBeginSXCondFmt14"},1148:{n:"BrtEndSXCondFmt14"},1149:{n:"BrtBeginSXCondFmts14"},1150:{n:"BrtEndSXCondFmts14"},1152:{n:"BrtBeginSortCond14"},1153:{n:"BrtEndSortCond14"},1154:{n:"BrtEndDVals14"},1155:{n:"BrtEndIconSet14"},1156:{n:"BrtEndDatabar14"},1157:{n:"BrtBeginColorScale14"},1158:{n:"BrtEndColorScale14"},1159:{n:"BrtBeginSxrules14"},1160:{n:"BrtEndSxrules14"},1161:{n:"BrtBeginPRule14"},1162:{n:"BrtEndPRule14"},1163:{n:"BrtBeginPRFilters14"},1164:{n:"BrtEndPRFilters14"},1165:{n:"BrtBeginPRFilter14"},1166:{n:"BrtEndPRFilter14"},1167:{n:"BrtBeginPRFItem14"},1168:{n:"BrtEndPRFItem14"},1169:{n:"BrtBeginCellIgnoreECs14"},1170:{n:"BrtEndCellIgnoreECs14"},1171:{n:"BrtDxf14"},1172:{n:"BrtBeginDxF14s"},1173:{n:"BrtEndDxf14s"},1177:{n:"BrtFilter14"},1178:{n:"BrtBeginCustomFilters14"},1180:{n:"BrtCustomFilter14"},1181:{n:"BrtIconFilter14"},1182:{n:"BrtPivotCacheConnectionName"},2048:{n:"BrtBeginDecoupledPivotCacheIDs"},2049:{n:"BrtEndDecoupledPivotCacheIDs"},2050:{n:"BrtDecoupledPivotCacheID"},2051:{n:"BrtBeginPivotTableRefs"},2052:{n:"BrtEndPivotTableRefs"},2053:{n:"BrtPivotTableRef"},2054:{n:"BrtSlicerCacheBookPivotTables"},2055:{n:"BrtBeginSxvcells"},2056:{n:"BrtEndSxvcells"},2057:{n:"BrtBeginSxRow"},2058:{n:"BrtEndSxRow"},2060:{n:"BrtPcdCalcMem15"},2067:{n:"BrtQsi15"},2068:{n:"BrtBeginWebExtensions"},2069:{n:"BrtEndWebExtensions"},2070:{n:"BrtWebExtension"},2071:{n:"BrtAbsPath15"},2072:{n:"BrtBeginPivotTableUISettings"},2073:{n:"BrtEndPivotTableUISettings"},2075:{n:"BrtTableSlicerCacheIDs"},2076:{n:"BrtTableSlicerCacheID"},2077:{n:"BrtBeginTableSlicerCache"},2078:{n:"BrtEndTableSlicerCache"},2079:{n:"BrtSxFilter15"},2080:{n:"BrtBeginTimelineCachePivotCacheIDs"},2081:{n:"BrtEndTimelineCachePivotCacheIDs"},2082:{n:"BrtTimelineCachePivotCacheID"},2083:{n:"BrtBeginTimelineCacheIDs"},2084:{n:"BrtEndTimelineCacheIDs"},2085:{n:"BrtBeginTimelineCacheID"},2086:{n:"BrtEndTimelineCacheID"},2087:{n:"BrtBeginTimelinesEx"},2088:{n:"BrtEndTimelinesEx"},2089:{n:"BrtBeginTimelineEx"},2090:{n:"BrtEndTimelineEx"},2091:{n:"BrtWorkBookPr15"},2092:{n:"BrtPCDH15"},2093:{n:"BrtBeginTimelineStyle"},2094:{n:"BrtEndTimelineStyle"},2095:{n:"BrtTimelineStyleElement"},2096:{n:"BrtBeginTimelineStylesheetExt15"},2097:{n:"BrtEndTimelineStylesheetExt15"},2098:{n:"BrtBeginTimelineStyles"},2099:{n:"BrtEndTimelineStyles"},2100:{n:"BrtBeginTimelineStyleElements"},2101:{n:"BrtEndTimelineStyleElements"},2102:{n:"BrtDxf15"},2103:{n:"BrtBeginDxfs15"},2104:{n:"brtEndDxfs15"},2105:{n:"BrtSlicerCacheHideItemsWithNoData"},2106:{n:"BrtBeginItemUniqueNames"},2107:{n:"BrtEndItemUniqueNames"},2108:{n:"BrtItemUniqueName"},2109:{n:"BrtBeginExtConn15"},2110:{n:"BrtEndExtConn15"},2111:{n:"BrtBeginOledbPr15"},2112:{n:"BrtEndOledbPr15"},2113:{n:"BrtBeginDataFeedPr15"},2114:{n:"BrtEndDataFeedPr15"},2115:{n:"BrtTextPr15"},2116:{n:"BrtRangePr15"},2117:{n:"BrtDbCommand15"},2118:{n:"BrtBeginDbTables15"},2119:{n:"BrtEndDbTables15"},2120:{n:"BrtDbTable15"},2121:{n:"BrtBeginDataModel"},2122:{n:"BrtEndDataModel"},2123:{n:"BrtBeginModelTables"},2124:{n:"BrtEndModelTables"},2125:{n:"BrtModelTable"},2126:{n:"BrtBeginModelRelationships"},2127:{n:"BrtEndModelRelationships"},2128:{n:"BrtModelRelationship"},2129:{n:"BrtBeginECTxtWiz15"},2130:{n:"BrtEndECTxtWiz15"},2131:{n:"BrtBeginECTWFldInfoLst15"},2132:{n:"BrtEndECTWFldInfoLst15"},2133:{n:"BrtBeginECTWFldInfo15"},2134:{n:"BrtFieldListActiveItem"},2135:{n:"BrtPivotCacheIdVersion"},2136:{n:"BrtSXDI15"},2137:{n:"BrtBeginModelTimeGroupings"},2138:{n:"BrtEndModelTimeGroupings"},2139:{n:"BrtBeginModelTimeGrouping"},2140:{n:"BrtEndModelTimeGrouping"},2141:{n:"BrtModelTimeGroupingCalcCol"},3072:{n:"BrtUid"},3073:{n:"BrtRevisionPtr"},5095:{n:"BrtBeginCalcFeatures"},5096:{n:"BrtEndCalcFeatures"},5097:{n:"BrtCalcFeature"},65535:{n:""}},Fl=W(Tl,"n"),Rl={3:{n:"BIFF2NUM",f:function(e){var t=Kr(e);++e.l;var n=En(e);return t.t="n",t.val=n,t}},4:{n:"BIFF2STR",f:function(e,t,n){var r=Kr(e);++e.l;var a=Ur(e,0,n);return r.t="str",r.val=a,r}},6:{n:"Formula",f:Vi},9:{n:"BOF",f:sa},10:{n:"EOF",f:Tr},12:{n:"CalcCount",f:Or},13:{n:"CalcMode",f:Or},14:{n:"CalcPrecision",f:Fr},15:{n:"CalcRefMode",f:Fr},16:{n:"CalcDelta",f:En},17:{n:"CalcIter",f:Fr},18:{n:"Protect",f:Fr},19:{n:"Password",f:Or},20:{n:"Header",f:pa},21:{n:"Footer",f:pa},23:{n:"ExternSheet",f:ba},24:{n:"Lbl",f:ya},25:{n:"WinProtect",f:Fr},26:{n:"VerticalPageBreaks"},27:{n:"HorizontalPageBreaks"},28:{n:"Note",f:function(e,t,n){return function(e,t,n){if(!(n.biff<8)){var r=e.read_shift(2),a=e.read_shift(2),s=e.read_shift(2),i=e.read_shift(2),o=Ur(e,0,n);return n.biff<8&&e.read_shift(1),[{r,c:a},o,i,s]}}(e,0,n)}},29:{n:"Selection"},34:{n:"Date1904",f:Fr},35:{n:"ExternName",f:ma},36:{n:"COLWIDTH"},38:{n:"LeftMargin",f:En},39:{n:"RightMargin",f:En},40:{n:"TopMargin",f:En},41:{n:"BottomMargin",f:En},42:{n:"PrintRowCol",f:Fr},43:{n:"PrintGrid",f:Fr},47:{n:"FilePass",f:function(e,t,n){var r={Type:n.biff>=8?e.read_shift(2):0};return r.Type?function(e,t,n){var r=n||{};r.Info=e.read_shift(2),e.l-=2,1===r.Info?r.Data=function(e){var t={},n=t.EncryptionVersionInfo=Xa(e,4);if(1!=n.Major||1!=n.Minor)throw"unrecognized version code "+n.Major+" : "+n.Minor;return t.Salt=e.read_shift(16),t.EncryptedVerifier=e.read_shift(16),t.EncryptedVerifierHash=e.read_shift(16),t}(e):r.Data=function(e,t){var n={},r=n.EncryptionVersionInfo=Xa(e,4);if(t-=4,2!=r.Minor)throw new Error("unrecognized minor version code: "+r.Minor);if(r.Major>4||r.Major<2)throw new Error("unrecognized major version code: "+r.Major);n.Flags=e.read_shift(4),t-=4;var a=e.read_shift(4);return t-=4,n.EncryptionHeader=qa(e,a),t-=a,n.EncryptionVerifier=Ya(e,t),n}(e,t)}(e,t-2,r):function(e,t,n,r){var a,s,i,o={key:Or(e),verificationBytes:Or(e)};n.password&&(o.verifier=es(n.password)),r.valid=o.verificationBytes===o.verifier,r.valid&&(r.insitu=(a=n.password,s=0,i=ss(a),function(e){var t=function(e,t,n,r,a){var s,i;for(a||(a=t),r||(r=ss("")),s=0;s!=t.length;++s)i=t[s],i=255&((i^=r[n])>>5|i<<3),a[s]=i,++n;return[a,n,r]}(0,e,s,i);return s=t[1],t[0]}))}(e,n.biff,n,r),r}},49:{n:"Font",f:function(e,t,n){var r={dyHeight:e.read_shift(2),fl:e.read_shift(2)};switch(n&&n.biff||8){case 2:break;case 3:case 4:e.l+=2;break;default:e.l+=10}return r.name=$r(e,0,n),r}},51:{n:"PrintSize",f:Or},60:{n:"Continue"},61:{n:"Window1",f:function(e){return{Pos:[e.read_shift(2),e.read_shift(2)],Dim:[e.read_shift(2),e.read_shift(2)],Flags:e.read_shift(2),CurTab:e.read_shift(2),FirstTab:e.read_shift(2),Selected:e.read_shift(2),TabRatio:e.read_shift(2)}}},64:{n:"Backup",f:Fr},65:{n:"Pane",f:function(){}},66:{n:"CodePage",f:Or},77:{n:"Pls"},80:{n:"DCon"},81:{n:"DConRef"},82:{n:"DConName"},85:{n:"DefColWidth",f:Or},89:{n:"XCT"},90:{n:"CRN"},91:{n:"FileSharing"},92:{n:"WriteAccess",f:function(e,t,n){if(n.enc)return e.l+=t,"";var r=e.l,a=Ur(e,0,n);return e.read_shift(t+r-e.l),a}},93:{n:"Obj",f:function(e,t,n){if(n&&n.biff<8)return function(e,t,n){e.l+=4;var r=e.read_shift(2),a=e.read_shift(2),s=e.read_shift(2);e.l+=2,e.l+=2,e.l+=2,e.l+=2,e.l+=2,e.l+=2,e.l+=2,e.l+=2,e.l+=2,e.l+=6,t-=36;var i=[];return i.push((wa[r]||Bt)(e,t,n)),{cmo:[a,r,s],ft:i}}(e,t,n);var r=na(e);return{cmo:r,ft:function(e,t){for(var n=e.l+t,r=[];e.l7||t[1]>7)throw new Error("Bad Gutters: "+t.join("|"));return t}},129:{n:"WsBool",f:function(e,t,n){return{fDialog:16&(n&&8==n.biff||2==t?e.read_shift(2):(e.l+=t,0))}}},130:{n:"GridSet",f:Or},131:{n:"HCenter",f:Fr},132:{n:"VCenter",f:Fr},133:{n:"BoundSheet8",f:function(e,t,n){var r=e.read_shift(4),a=3&e.read_shift(1),s=e.read_shift(1);switch(s){case 0:s="Worksheet";break;case 1:s="Macrosheet";break;case 2:s="Chartsheet";break;case 6:s="VBAModule"}var i=$r(e,0,n);return 0===i.length&&(i="Sheet1"),{pos:r,hs:a,dt:s,name:i}}},134:{n:"WriteProtect"},140:{n:"Country",f:function(e){var t,n=[0,0];return t=e.read_shift(2),n[0]=Bn[t]||t,t=e.read_shift(2),n[1]=Bn[t]||t,n}},141:{n:"HideObj",f:Or},144:{n:"Sort"},146:{n:"Palette",f:function(e){for(var t=e.read_shift(2),n=[];t-- >0;)n.push(Xr(e));return n}},151:{n:"Sync"},152:{n:"LPr"},153:{n:"DxGCol"},154:{n:"FnGroupName"},155:{n:"FilterMode"},156:{n:"BuiltInFnGroupCount",f:Or},157:{n:"AutoFilterInfo"},158:{n:"AutoFilter"},160:{n:"Scl",f:Ca},161:{n:"Setup",f:function(e,t){var n={};return t<32||(e.l+=16,n.header=En(e),n.footer=En(e),e.l+=2),n}},174:{n:"ScenMan"},175:{n:"SCENARIO"},176:{n:"SxView"},177:{n:"Sxvd"},178:{n:"SXVI"},180:{n:"SxIvd"},181:{n:"SXLI"},182:{n:"SXPI"},184:{n:"DocRoute"},185:{n:"RecipName"},189:{n:"MulRk",f:function(e,t){for(var n=e.l+t-2,r=e.read_shift(2),a=e.read_shift(2),s=[];e.l>2&1,r.data=function(e,t,n,r){var a={},s=e.read_shift(4),i=e.read_shift(4),o=e.read_shift(4),l=e.read_shift(2);return a.patternType=$n[o>>26],r.cellStyles?(a.alc=7&s,a.fWrap=s>>3&1,a.alcV=s>>4&7,a.fJustLast=s>>7&1,a.trot=s>>8&255,a.cIndent=s>>16&15,a.fShrinkToFit=s>>20&1,a.iReadOrder=s>>22&2,a.fAtrNum=s>>26&1,a.fAtrFnt=s>>27&1,a.fAtrAlc=s>>28&1,a.fAtrBdr=s>>29&1,a.fAtrPat=s>>30&1,a.fAtrProt=s>>31&1,a.dgLeft=15&i,a.dgRight=i>>4&15,a.dgTop=i>>8&15,a.dgBottom=i>>12&15,a.icvLeft=i>>16&127,a.icvRight=i>>23&127,a.grbitDiag=i>>30&3,a.icvTop=127&o,a.icvBottom=o>>7&127,a.icvDiag=o>>14&127,a.dgDiag=o>>21&15,a.icvFore=127&l,a.icvBack=l>>7&127,a.fsxButton=l>>14&1,a):a}(e,0,r.fStyle,n),r}},225:{n:"InterfaceHdr",f:function(e,t){return 0===t||e.read_shift(2),1200}},226:{n:"InterfaceEnd",f:Tr},227:{n:"SXVS"},229:{n:"MergeCells",f:function(e,t){for(var n=[],r=e.read_shift(2);r--;)n.push(Zr(e));return n}},233:{n:"BkHim"},235:{n:"MsoDrawingGroup"},236:{n:"MsoDrawing"},237:{n:"MsoDrawingSelection"},239:{n:"PhoneticInfo"},240:{n:"SxRule"},241:{n:"SXEx"},242:{n:"SxFilt"},244:{n:"SxDXF"},245:{n:"SxItm"},246:{n:"SxName"},247:{n:"SxSelect"},248:{n:"SXPair"},249:{n:"SxFmla"},251:{n:"SxFormat"},252:{n:"SST",f:function(e,t){for(var n=e.l+t,r=e.read_shift(4),a=e.read_shift(4),s=[],i=0;i!=a&&e.l255)throw new Error("Unexpected SupBook type: "+s);for(var i=zr(e,s),o=[];r>e.l;)o.push(Wr(e));return[s,a,i,o]}},431:{n:"Prot4Rev",f:Fr},432:{n:"CondFmt"},433:{n:"CF"},434:{n:"DVal"},437:{n:"DConBin"},438:{n:"TxO",f:function(e,t,n){var r=e.l,a="";try{e.l+=4;var s=(n.lastobj||{cmo:[0,0]}).cmo[1];-1==[0,5,7,11,12,14].indexOf(s)?e.l+=6:function(e){var t=e.read_shift(1);e.l++;var n=e.read_shift(2);e.l+=2}(e);var i=e.read_shift(2);e.read_shift(2),Or(e);var o=e.read_shift(2);e.l+=o;for(var l=1;l=(u?i:2*i))break}if(a.length!==i&&a.length!==2*i)throw new Error("cchText: "+i+" != "+a.length);return e.l=r+t,{t:a}}catch(n){return e.l=r+t,{t:a}}}},439:{n:"RefreshAll",f:Fr},440:{n:"HLink",f:function(e,t){var n=Zr(e);return e.l+=16,[n,function(e,t){var n=e.l+t,r=e.read_shift(4);if(2!==r)throw new Error("Unrecognized streamVersion: "+r);var a=e.read_shift(2);e.l+=2;var s,i,o,l,u,c,h="";16&a&&(s=jr(e,e.l)),128&a&&(i=jr(e,e.l)),257==(257&a)&&(o=jr(e,e.l)),1==(257&a)&&(l=function(e,t){var n=e.read_shift(16);switch(n){case"e0c9ea79f9bace118c8200aa004ba90b":return function(e){var t=e.read_shift(4),n=e.l,r=!1;t>24&&(e.l+=t-24,"795881f43b1d7f48af2c825dc4852763"===e.read_shift(16)&&(r=!0),e.l=n);var a=e.read_shift((r?t-24:t)>>1,"utf16le").replace(N,"");return r&&(e.l+=24),a}(e);case"0303000000000000c000000000000046":return function(e){e.l+=2;var t=e.read_shift(0,"lpstr-ansi");if(e.l+=2,57005!=e.read_shift(2))throw new Error("Bad FileMoniker");if(0===e.read_shift(4))return t.replace(/\\/g,"/");var n=e.read_shift(4);if(3!=e.read_shift(2))throw new Error("Bad FileMoniker");return e.read_shift(n>>1,"utf16le").replace(N,"")}(e);default:throw new Error("Unsupported Moniker "+n)}}(e,e.l)),8&a&&(h=jr(e,e.l)),32&a&&(u=e.read_shift(16)),64&a&&(c=mr(e)),e.l=n;var f=i||o||l||"";f&&h&&(f+="#"+h),f||(f="#"+h);var d={Target:f};return u&&(d.guid=u),c&&(d.time=c),s&&(d.Tooltip=s),d}(e,t-24)]}},441:{n:"Lel"},442:{n:"CodeName",f:Wr},443:{n:"SXFDBType"},444:{n:"Prot4RevPass",f:Or},445:{n:"ObNoMacros"},446:{n:"Dv"},448:{n:"Excel9File",f:Tr},449:{n:"RecalcId",f:function(e){return e.read_shift(2),e.read_shift(4)},r:2},450:{n:"EntExU2",f:Tr},512:{n:"Dimensions",f:ha},513:{n:"Blank",f:Ea},515:{n:"Number",f:function(e){var t=Kr(e),n=En(e);return t.val=n,t}},516:{n:"Label",f:function(e,t,n){e.l;var r=Kr(e);2==n.biff&&e.l++;var a=Wr(e,e.l,n);return r.val=a,r}},517:{n:"BoolErr",f:da},518:{n:"Formula",f:Vi},519:{n:"String",f:Sa},520:{n:"Row",f:function(e){var t={};t.r=e.read_shift(2),t.c=e.read_shift(2),t.cnt=e.read_shift(2)-t.c;var n=e.read_shift(2);e.l+=4;var r=e.read_shift(1);return e.l+=3,7&r&&(t.level=7&r),32&r&&(t.hidden=!0),64&r&&(t.hpt=n/20),t}},523:{n:"Index"},545:{n:"Array",f:va},549:{n:"DefaultRowHeight",f:la},566:{n:"Table"},574:{n:"Window2",f:function(e,t,n){return n&&n.biff>=2&&n.biff<5?{}:{RTL:64&e.read_shift(2)}}},638:{n:"RK",f:function(e){var t=e.read_shift(2),n=e.read_shift(2),r=Jr(e);return{r:t,c:n,ixfe:r[0],rknum:r[1]}}},659:{n:"Style"},1030:{n:"Formula",f:Vi},1048:{n:"BigName"},1054:{n:"Format",f:function(e,t,n){return[e.read_shift(2),Ur(e,0,n)]}},1084:{n:"ContinueBigName"},1212:{n:"ShrFmla",f:function(e,t,n){var r=ea(e);e.l++;var a=e.read_shift(1);return[Ui(e,t-=8,n),a,r]}},2048:{n:"HLinkTooltip",f:function(e,t){e.read_shift(2);var n=Zr(e),r=e.read_shift((t-10)/2,"dbcs-cont");return[n,r=r.replace(N,"")]}},2049:{n:"WebPub"},2050:{n:"QsiSXTag"},2051:{n:"DBQueryExt"},2052:{n:"ExtString"},2053:{n:"TxtQry"},2054:{n:"Qsir"},2055:{n:"Qsif"},2056:{n:"RRDTQSIF"},2057:{n:"BOF",f:sa},2058:{n:"OleDbConn"},2059:{n:"WOpt"},2060:{n:"SXViewEx"},2061:{n:"SXTH"},2062:{n:"SXPIEx"},2063:{n:"SXVDTEx"},2064:{n:"SXViewEx9"},2066:{n:"ContinueFrt"},2067:{n:"RealTimeData"},2128:{n:"ChartFrtInfo"},2129:{n:"FrtWrapper"},2130:{n:"StartBlock"},2131:{n:"EndBlock"},2132:{n:"StartObject"},2133:{n:"EndObject"},2134:{n:"CatLab"},2135:{n:"YMult"},2136:{n:"SXViewLink"},2137:{n:"PivotChartBits"},2138:{n:"FrtFontList"},2146:{n:"SheetExt"},2147:{n:"BookExt",r:12},2148:{n:"SXAddl"},2149:{n:"CrErr"},2150:{n:"HFPicture"},2151:{n:"FeatHdr",f:Tr},2152:{n:"Feat"},2154:{n:"DataLabExt"},2155:{n:"DataLabExtContents"},2156:{n:"CellWatch"},2161:{n:"FeatHdr11"},2162:{n:"Feature11"},2164:{n:"DropDownObjIds"},2165:{n:"ContinueFrt11"},2166:{n:"DConn"},2167:{n:"List12"},2168:{n:"Feature12"},2169:{n:"CondFmt12"},2170:{n:"CF12"},2171:{n:"CFEx"},2172:{n:"XFCRC",f:function(e){e.l+=2;var t={cxfs:0,crc:0};return t.cxfs=e.read_shift(2),t.crc=e.read_shift(4),t},r:12},2173:{n:"XFExt",f:function(e,t){e.l,e.l+=2;var n=e.read_shift(2);e.l+=2;for(var r=e.read_shift(2),a=[];r-- >0;)a.push(Xs(e,e.l));return{ixfe:n,ext:a}},r:12},2174:{n:"AutoFilter12"},2175:{n:"ContinueFrt12"},2180:{n:"MDTInfo"},2181:{n:"MDXStr"},2182:{n:"MDXTuple"},2183:{n:"MDXSet"},2184:{n:"MDXProp"},2185:{n:"MDXKPI"},2186:{n:"MDB"},2187:{n:"PLV"},2188:{n:"Compat12",f:Fr,r:12},2189:{n:"DXF"},2190:{n:"TableStyles",r:12},2191:{n:"TableStyle"},2192:{n:"TableStyleElement"},2194:{n:"StyleExt"},2195:{n:"NamePublish"},2196:{n:"NameCmt",f:function(e,t,n){if(!(n.biff<8)){var r=e.read_shift(2),a=e.read_shift(2);return[zr(e,r,n),zr(e,a,n)]}e.l+=t},r:12},2197:{n:"SortData"},2198:{n:"Theme",f:function(e,t,n){var r=e.l+t;if(124226!==e.read_shift(4))if(n.cellStyles&&se){var a,s=e.slice(e.l);e.l=r;try{a=new se(s)}catch(e){return}var i=he(a,"theme/theme/theme1.xml",!0);if(i)return Hs(i,n)}else e.l=r},r:12},2199:{n:"GUIDTypeLib"},2200:{n:"FnGrp12"},2201:{n:"NameFnGrp12"},2202:{n:"MTRSettings",f:function(e){return[0!==e.read_shift(4),0!==e.read_shift(4),e.read_shift(4)]},r:12},2203:{n:"CompressPictures",f:Tr},2204:{n:"HeaderFooter"},2205:{n:"CrtLayout12"},2206:{n:"CrtMlFrt"},2207:{n:"CrtMlFrtContinue"},2211:{n:"ForceFullCalculation",f:function(e){var t=function(e){var t=e.read_shift(2),n=e.read_shift(2);return e.l+=8,{type:t,flags:n}}(e);if(2211!=t.type)throw new Error("Invalid Future Record "+t.type);return 0!==e.read_shift(4)}},2212:{n:"ShapePropsStream"},2213:{n:"TextPropsStream"},2214:{n:"RichTextStream"},2215:{n:"CrtLayout12A"},4097:{n:"Units"},4098:{n:"Chart"},4099:{n:"Series"},4102:{n:"DataFormat"},4103:{n:"LineFormat"},4105:{n:"MarkerFormat"},4106:{n:"AreaFormat"},4107:{n:"PieFormat"},4108:{n:"AttachedLabel"},4109:{n:"SeriesText"},4116:{n:"ChartFormat"},4117:{n:"Legend"},4118:{n:"SeriesList"},4119:{n:"Bar"},4120:{n:"Line"},4121:{n:"Pie"},4122:{n:"Area"},4123:{n:"Scatter"},4124:{n:"CrtLine"},4125:{n:"Axis"},4126:{n:"Tick"},4127:{n:"ValueRange"},4128:{n:"CatSerRange"},4129:{n:"AxisLine"},4130:{n:"CrtLink"},4132:{n:"DefaultText"},4133:{n:"Text"},4134:{n:"FontX",f:Or},4135:{n:"ObjectLink"},4146:{n:"Frame"},4147:{n:"Begin"},4148:{n:"End"},4149:{n:"PlotArea"},4154:{n:"Chart3d"},4156:{n:"PicF"},4157:{n:"DropBar"},4158:{n:"Radar"},4159:{n:"Surf"},4160:{n:"RadarArea"},4161:{n:"AxisParent"},4163:{n:"LegendException"},4164:{n:"ShtProps",f:function(e,t,n){var r={area:!1};if(5!=n.biff)return e.l+=t,r;var a=e.read_shift(1);return e.l+=3,16&a&&(r.area=!0),r}},4165:{n:"SerToCrt"},4166:{n:"AxesUsed"},4168:{n:"SBaseRef"},4170:{n:"SerParent"},4171:{n:"SerAuxTrend"},4174:{n:"IFmtRecord"},4175:{n:"Pos"},4176:{n:"AlRuns"},4177:{n:"BRAI"},4187:{n:"SerAuxErrBar"},4188:{n:"ClrtClient",f:function(e){for(var t=e.read_shift(2),n=[];t-- >0;)n.push(Xr(e));return n}},4189:{n:"SerFmt"},4191:{n:"Chart3DBarShape"},4192:{n:"Fbi"},4193:{n:"BopPop"},4194:{n:"AxcExt"},4195:{n:"Dat"},4196:{n:"PlotGrowth"},4197:{n:"SIIndex"},4198:{n:"GelFrame"},4199:{n:"BopPopCustom"},4200:{n:"Fbi2"},0:{n:"Dimensions",f:ha},2:{n:"BIFF2INT",f:function(e){var t=Kr(e);++e.l;var n=e.read_shift(2);return t.t="n",t.val=n,t}},5:{n:"BoolErr",f:da},7:{n:"String",f:function(e){var t=e.read_shift(1);return 0===t?(e.l++,""):e.read_shift(t,"sbcs-cont")}},8:{n:"BIFF2ROW"},11:{n:"Index"},22:{n:"ExternCount",f:Or},30:{n:"BIFF2FORMAT",f:ca},31:{n:"BIFF2FMTCNT"},32:{n:"BIFF2COLINFO"},33:{n:"Array",f:va},37:{n:"DefaultRowHeight",f:la},50:{n:"BIFF2FONTXTRA",f:function(e,t){e.l+=6,e.l+=2,e.l+=1,e.l+=3,e.l+=1,e.l+=t-13}},52:{n:"DDEObjName"},62:{n:"BIFF2WINDOW2"},67:{n:"BIFF2XF"},69:{n:"BIFF2FONTCLR"},86:{n:"BIFF4FMTCNT"},126:{n:"RK"},127:{n:"ImData",f:function(e){var t=e.read_shift(2),n=e.read_shift(2),r=e.read_shift(4),a={fmt:t,env:n,len:r,data:e.slice(e.l,e.l+r)};return e.l+=r,a}},135:{n:"Addin"},136:{n:"Edg"},137:{n:"Pub"},145:{n:"Sub"},148:{n:"LHRecord"},149:{n:"LHNGraph"},150:{n:"Sound"},169:{n:"CoordList"},171:{n:"GCW"},188:{n:"ShrFmla"},191:{n:"ToolbarHdr"},192:{n:"ToolbarEnd"},194:{n:"AddMenu"},195:{n:"DelMenu"},214:{n:"RString",f:function(e,t,n){var r=e.l+t,a=Kr(e),s=e.read_shift(2),i=zr(e,s,n);return e.l=r,a.t="str",a.val=i,a}},223:{n:"UDDesc"},234:{n:"TabIdConf"},354:{n:"XL5Modify"},421:{n:"FileSharing2"},521:{n:"BOF",f:sa},536:{n:"Lbl",f:ya},547:{n:"ExternName",f:ma},561:{n:"Font"},579:{n:"BIFF3XF"},1033:{n:"BOF",f:sa},1091:{n:"BIFF4XF"},2157:{n:"FeatInfo"},2163:{n:"FeatInfo11"},2177:{n:"SXAddl12"},2240:{n:"AutoWebPub"},2241:{n:"ListObj"},2242:{n:"ListField"},2243:{n:"ListDV"},2244:{n:"ListCondFmt"},2245:{n:"ListCF"},2246:{n:"FMQry"},2247:{n:"FMSQry"},2248:{n:"PLV"},2249:{n:"LnExt"},2250:{n:"MkrExt"},2251:{n:"CrtCoopt"},2262:{n:"FRTArchId$",r:12},29282:{}},Ol=W(Rl,"n");function Ml(e,t,n,r){var a=+t||+Ol[t];if(!isNaN(a)){var s=r||(n||[]).length||0,i=e.next(4);i.write_shift(2,a),i.write_shift(2,s),s>0&&Et(n)&&e.push(n)}}function Bl(e,t,n){return e||(e=$t(7)),e.write_shift(2,t),e.write_shift(2,n),e.write_shift(2,0),e.write_shift(1,0),e}function $l(e,t,n,r){if(null!=t.v)switch(t.t){case"d":case"n":var a="d"==t.t?H(Q(t.v)):t.v;return void(a==(0|a)&&a>=0&&a<65536?Ml(e,2,(s=n,i=r,o=a,l=$t(9),Bl(l,s,i),l.write_shift(2,o),l)):Ml(e,3,function(e,t,n){var r=$t(15);return Bl(r,e,t),r.write_shift(8,n,"f"),r}(n,r,a)));case"b":case"e":return void Ml(e,5,function(e,t,n,r){var a=$t(9);return Bl(a,e,t),"e"==r?(a.write_shift(1,n),a.write_shift(1,1)):(a.write_shift(1,n?1:0),a.write_shift(1,0)),a}(n,r,t.v,t.t));case"s":case"str":return void Ml(e,4,function(e,t,n){var r=$t(8+2*n.length);return Bl(r,e,t),r.write_shift(1,n.length),r.write_shift(n.length,n,"sbcs"),r.l255||d.e.r>=p){if(t.WTF)throw new Error("Range "+(i["!ref"]||"A1")+" exceeds format limit A1:IV16384");d.e.c=Math.min(d.e.c,255),d.e.r=Math.min(d.e.c,p-1)}Ml(a,2057,ia(0,16,t)),Ml(a,"CalcMode",Mr(1)),Ml(a,"CalcCount",Mr(100)),Ml(a,"CalcRefMode",Rr(!0)),Ml(a,"CalcIter",Rr(!1)),Ml(a,"CalcDelta",Cn(.001)),Ml(a,"CalcSaveRecalc",Rr(!0)),Ml(a,"PrintRowCol",Rr(!1)),Ml(a,"PrintGrid",Rr(!1)),Ml(a,"GridSet",Mr(1)),Ml(a,"Guts",function(e){var t=$t(8);return t.write_shift(4,0),t.write_shift(2,e[0]?e[0]+1:0),t.write_shift(2,e[1]?e[1]+1:0),t}([0,0])),Ml(a,"HCenter",Rr(!1)),Ml(a,"VCenter",Rr(!1)),Ml(a,512,function(e,t){var n=8!=t.biff&&t.biff?2:4,r=$t(2*n+6);return r.write_shift(n,e.s.r),r.write_shift(n,e.e.r+1),r.write_shift(2,e.s.c),r.write_shift(2,e.e.c+1),r.write_shift(2,0),r}(d,t)),c&&(i["!links"]=[]);for(var m=d.s.r;m<=d.e.r;++m){h=Gt(m);for(var g=d.s.c;g<=d.e.c;++g){m===d.s.r&&(f[g]=Kt(g)),r=f[g]+h;var y=u?(i[m]||[])[g]:i[r];y&&(Pl(a,y,m,g,t),c&&y.l&&i["!links"].push([r,y.l]))}}var b=l.CodeName||l.name||s;return c&&Ml(a,"Window2",function(e){var t=$t(18),n=1718;return e&&e.RTL&&(n|=64),t.write_shift(2,n),t.write_shift(4,0),t.write_shift(4,64),t.write_shift(4,0),t.write_shift(4,0),t}((o.Views||[])[0])),c&&(i["!merges"]||[]).length&&Ml(a,"MergeCells",function(e){var t=$t(2+8*e.length);t.write_shift(2,e.length);for(var n=0;n255||i.e.r>16383){if(r.WTF)throw new Error("Range "+(t["!ref"]||"A1")+" exceeds format limit A1:IV16384");i.e.c=Math.min(i.e.c,255),i.e.r=Math.min(i.e.c,16383),a=Zt(i)}for(var u=i.s.r;u<=i.e.r;++u){o=Gt(u);for(var c=i.s.c;c<=i.e.c;++c){u===i.s.r&&(l[c]=Kt(c)),a=l[c]+o;var h=s?(t[u]||[])[c]:t[a];h&&$l(e,h,u,c)}}}(r,e.Sheets[e.SheetNames[a]],0,n),Ml(r,10),r.end()}(e,t)}throw new Error("invalid type "+n.bookType+" for BIFF")}var Ul=function(){function e(e,t){var n=t||{},r=n.dense?[]:{},a=(e=e.replace(//g,"")).match(/");var s=e.match(/<\/table/i),i=a.index,o=s&&s.index||e.length,l=function(e,t,n){if(ie||"string"==typeof t)return e.split(t);for(var r=e.split(t),a=[r[0]],s=1;s"),a.push(r[s]);return a}(e.slice(i,o),/(:?]*>)/i),u=-1,c=0,h=0,f=0,d={s:{r:1e7,c:1e7},e:{r:0,c:0}},p=[];for(i=0;i/i);for(o=0;o"))>-1;)v=v.slice(w+1);for(var _=0;_")));f=k.colspan?+k.colspan:1,((h=+k.rowspan)>1||f>1)&&p.push({s:{r:u,c},e:{r:u+(h||1)-1,c:c+f-1}});var E=k.t||"";if(v.length){if(v=je(v),d.s.r>u&&(d.s.r=u),d.e.rc&&(d.s.c=c),d.e.cn||a[u].s.c>i||a[u].e.r1&&(d.rowspan=o),l>1&&(d.colspan=l),d.t=h&&h.t||"z",r.editable&&(f=''+f+""),d.id=(r.id||"sjs")+"-"+c,"z"!=d.t&&(d.v=h.v,null!=h.z&&(d.z=h.z)),s.push(Ze("td",f,d))}}return""+s.join("")+""}function n(e,t,n){return[].join("")+""}var r='SheetJS Table Export',a="";return{to_workbook:function(t,n){return tn(e(t,n),n)},to_sheet:e,_row:t,BEGIN:r,END:a,_preamble:n,from_sheet:function(e,s){var i=s||{},o=null!=i.header?i.header:r,l=null!=i.footer?i.footer:a,u=[o],c=Jt(e["!ref"]);i.dense=Array.isArray(e),u.push(n(0,0,i));for(var h=c.s.r;h<=c.e.r;++h)u.push(t(e,c,h,i));return u.push("
"+l),u.join("")}}}();function Vl(e,t,n){var r=n||{},a=0,s=0;if(null!=r.origin)if("number"==typeof r.origin)a=r.origin;else{var i="string"==typeof r.origin?qt(r.origin):r.origin;a=i.r,s=i.c}var o=t.getElementsByTagName("tr"),l=Math.min(r.sheetRows||1e7,o.length),u={s:{r:0,c:0},e:{r:a,c:s}};if(e["!ref"]){var c=Jt(e["!ref"]);u.s.r=Math.min(u.s.r,c.s.r),u.s.c=Math.min(u.s.c,c.s.c),u.e.r=Math.max(u.e.r,c.e.r),u.e.c=Math.max(u.e.c,c.e.c),-1==a&&(u.e.r=a=c.e.r+1)}var h=[],f=0,d=e["!rows"]||(e["!rows"]=[]),p=0,m=0,g=0,y=0,b=0,v=0;for(e["!cols"]||(e["!cols"]=[]);p1||v>1)&&h.push({s:{r:m+a,c:y+s},e:{r:m+a+(b||1)-1,c:y+s+(v||1)-1}});var S={t:"s",v:k},N=x.getAttribute("t")||"";null!=k&&(0==k.length?S.t=N||"z":r.raw||0==k.trim().length||"s"==N||("TRUE"===k?S={t:"b",v:!0}:"FALSE"===k?S={t:"b",v:!1}:isNaN(re(k))?isNaN(ae(k).getDate())||(S={t:"d",v:Q(k)},r.cellDates||(S={t:"n",v:H(S.v)}),S.z=r.dateNF||A._table[14]):S={t:"n",v:re(k)})),void 0===S.z&&null!=E&&(S.z=E),r.dense?(e[m+a]||(e[m+a]=[]),e[m+a][y+s]=S):e[Yt({c:y+s,r:m+a})]=S,u.e.c=l&&(e["!fullref"]=Zt((u.e.r=o.length-p+m-1+a,u))),e}function jl(e,t){return Vl((t||{}).dense?[]:{},e,t)}function Hl(e){var t="",n=function(e){return e.ownerDocument.defaultView&&"function"==typeof e.ownerDocument.defaultView.getComputedStyle?e.ownerDocument.defaultView.getComputedStyle:"function"==typeof getComputedStyle?getComputedStyle:null}(e);return n&&(t=n(e).getPropertyValue("display")),t||(t=e.style.display),"none"===t}var Gl,Xl=(Gl={day:["d","dd"],month:["m","mm"],year:["y","yy"],hours:["h","hh"],minutes:["m","mm"],seconds:["s","ss"],"am-pm":["A/P","AM/PM"],"day-of-week":["ddd","dddd"],era:["e","ee"],quarter:["\\Qm",'m\\"th quarter"']},function(e,t){var n,r,a,s,i,o,l,u=t||{},c=gl(e),h=[],f={name:""},d="",p=0,m={},g=[],y=u.dense?[]:{},b={value:""},v="",w=0,_=[],x=-1,k=-1,E={s:{r:1e6,c:1e7},e:{r:0,c:0}},C=0,S={},N=[],I={},A=[],D=1,T=1,F=[],R={Names:[]},O={},M=["",""],B=[],$={},P="",L=0,z=!1,W=!1,U=0;for(yl.lastIndex=0,c=c.replace(//gm,"").replace(//gm,"");i=yl.exec(c);)switch(i[3]=i[3].replace(/_.*$/,"")){case"table":case"工作表":"/"===i[1]?(E.e.c>=E.s.c&&E.e.r>=E.s.r?y["!ref"]=Zt(E):y["!ref"]="A1:A1",u.sheetRows>0&&u.sheetRows<=E.e.r&&(y["!fullref"]=y["!ref"],E.e.r=u.sheetRows-1,y["!ref"]=Zt(E)),N.length&&(y["!merges"]=N),A.length&&(y["!rows"]=A),a.name=a["名称"]||a.name,"undefined"!=typeof JSON&&JSON.stringify(a),g.push(a.name),m[a.name]=y,W=!1):"/"!==i[0].charAt(i[0].length-2)&&(a=we(i[0],!1),x=k=-1,E.s.r=E.s.c=1e7,E.e.r=E.e.c=0,y=u.dense?[]:{},N=[],A=[],W=!0);break;case"table-row-group":"/"===i[1]?--C:++C;break;case"table-row":case"行":if("/"===i[1]){x+=D,D=1;break}if((s=we(i[0],!1))["行号"]?x=s["行号"]-1:-1==x&&(x=0),(D=+s["number-rows-repeated"]||1)<10)for(U=0;U0&&(A[x+U]={level:C});k=-1;break;case"covered-table-cell":"/"!==i[1]&&++k,u.sheetStubs&&(u.dense?(y[x]||(y[x]=[]),y[x][k]={t:"z"}):y[Yt({r:x,c:k})]={t:"z"}),v="",_=[];break;case"table-cell":case"数据":if("/"===i[0].charAt(i[0].length-2))++k,b=we(i[0],!1),T=parseInt(b["number-columns-repeated"]||"1",10),o={t:"z",v:null},b.formula&&0!=u.cellFormula&&(o.f=Qi(Se(b.formula))),"string"==(b["数据类型"]||b["value-type"])&&(o.t="s",o.v=Se(b["string-value"]||""),u.dense?(y[x]||(y[x]=[]),y[x][k]=o):y[Yt({r:x,c:k})]=o),k+=T-1;else if("/"!==i[1]){T=1;var V=D?x+D-1:x;if(++k>E.e.c&&(E.e.c=k),kE.e.r&&(E.e.r=V),B=[],$={},o={t:(b=we(i[0],!1))["数据类型"]||b["value-type"],v:null},u.cellFormula)if(b.formula&&(b.formula=Se(b.formula)),b["number-matrix-columns-spanned"]&&b["number-matrix-rows-spanned"]&&(I={s:{r:x,c:k},e:{r:x+(parseInt(b["number-matrix-rows-spanned"],10)||0)-1,c:k+(parseInt(b["number-matrix-columns-spanned"],10)||0)-1}},o.F=Zt(I),F.push([I,o.F])),b.formula)o.f=Qi(b.formula);else for(U=0;U=F[U][0].s.r&&x<=F[U][0].e.r&&k>=F[U][0].s.c&&k<=F[U][0].e.c&&(o.F=F[U][1]);switch((b["number-columns-spanned"]||b["number-rows-spanned"])&&(I={s:{r:x,c:k},e:{r:x+(parseInt(b["number-rows-spanned"],10)||0)-1,c:k+(parseInt(b["number-columns-spanned"],10)||0)-1}},N.push(I)),b["number-columns-repeated"]&&(T=parseInt(b["number-columns-repeated"],10)),o.t){case"boolean":o.t="b",o.v=Oe(b["boolean-value"]);break;case"float":case"percentage":case"currency":o.t="n",o.v=parseFloat(b.value);break;case"date":o.t="d",o.v=Q(b["date-value"]),u.cellDates||(o.t="n",o.v=H(o.v)),o.z="m/d/yy";break;case"time":o.t="n",o.v=Y(b["time-value"])/86400;break;case"number":o.t="n",o.v=parseFloat(b["数据数值"]);break;default:if("string"!==o.t&&"text"!==o.t&&o.t)throw new Error("Unsupported value type "+o.t);o.t="s",null!=b["string-value"]&&(v=Se(b["string-value"]),_=[])}}else{if(z=!1,"s"===o.t&&(o.v=v||"",_.length&&(o.R=_),z=0==w),O.Target&&(o.l=O),B.length>0&&(o.c=B,B=[]),v&&!1!==u.cellText&&(o.w=v),z&&(o.t="z",delete o.v),(!z||u.sheetStubs)&&!(u.sheetRows&&u.sheetRows<=x))for(var j=0;j0;)y[x+j][k+T]=te(o);else for(y[Yt({r:x+j,c:k})]=o;--T>0;)y[Yt({r:x+j,c:k+T})]=te(o);E.e.c<=k&&(E.e.c=k)}k+=(T=parseInt(b["number-columns-repeated"]||"1",10))-1,T=0,o={},v="",_=[]}O={};break;case"document":case"document-content":case"电子表格文档":case"spreadsheet":case"主体":case"scripts":case"styles":case"font-face-decls":case"master-styles":if("/"===i[1]){if((n=h.pop())[0]!==i[3])throw"Bad state: "+n}else"/"!==i[0].charAt(i[0].length-2)&&h.push([i[3],!0]);break;case"annotation":if("/"===i[1]){if((n=h.pop())[0]!==i[3])throw"Bad state: "+n;$.t=v,_.length&&($.R=_),$.a=P,B.push($)}else"/"!==i[0].charAt(i[0].length-2)&&h.push([i[3],!1]);P="",L=0,v="",w=0,_=[];break;case"creator":"/"===i[1]?P=c.slice(L,i.index):L=i.index+i[0].length;break;case"meta":case"元数据":case"settings":case"config-item-set":case"config-item-map-indexed":case"config-item-map-entry":case"config-item-map-named":case"shapes":case"frame":case"text-box":case"image":case"data-pilot-tables":case"list-style":case"form":case"dde-links":case"event-listeners":case"chart":if("/"===i[1]){if((n=h.pop())[0]!==i[3])throw"Bad state: "+n}else"/"!==i[0].charAt(i[0].length-2)&&h.push([i[3],!1]);v="",w=0,_=[];break;case"scientific-number":case"currency-symbol":case"currency-style":break;case"number-style":case"percentage-style":case"date-style":case"time-style":if("/"===i[1]){if(S[f.name]=d,(n=h.pop())[0]!==i[3])throw"Bad state: "+n}else"/"!==i[0].charAt(i[0].length-2)&&(d="",f=we(i[0],!1),h.push([i[3],!0]));break;case"script":case"libraries":case"automatic-styles":break;case"default-style":case"page-layout":case"style":case"map":case"font-face":case"paragraph-properties":case"table-properties":case"table-column-properties":case"table-row-properties":case"table-cell-properties":break;case"number":switch(h[h.length-1][0]){case"time-style":case"date-style":r=we(i[0],!1),d+=Gl[i[3]]["long"===r.style?1:0]}break;case"fraction":break;case"day":case"month":case"year":case"era":case"day-of-week":case"week-of-year":case"quarter":case"hours":case"minutes":case"seconds":case"am-pm":switch(h[h.length-1][0]){case"time-style":case"date-style":r=we(i[0],!1),d+=Gl[i[3]]["long"===r.style?1:0]}break;case"boolean-style":case"boolean":case"text-style":break;case"text":if("/>"===i[0].slice(-2))break;if("/"===i[1])switch(h[h.length-1][0]){case"number-style":case"date-style":case"time-style":d+=c.slice(p,i.index)}else p=i.index+i[0].length;break;case"named-range":M=eo((r=we(i[0],!1))["cell-range-address"]);var G={Name:r.name,Ref:M[0]+"!"+M[1]};W&&(G.Sheet=g.length),R.Names.push(G);break;case"text-content":case"text-properties":case"embedded-text":break;case"body":case"电子表格":case"forms":case"table-column":case"table-header-rows":case"table-rows":case"table-column-group":case"table-header-columns":case"table-columns":case"null-date":case"graphic-properties":case"calculation-settings":case"named-expressions":case"label-range":case"label-ranges":case"named-expression":case"sort":case"sort-by":case"sort-groups":case"tab":case"line-break":case"span":break;case"p":case"文本串":if(["master-styles"].indexOf(h[h.length-1][0])>-1)break;if("/"!==i[1]||b&&b["string-value"])we(i[0],!1),w=i.index+i[0].length;else{var X=(l=void 0,l=c.slice(w,i.index).replace(/[\t\r\n]/g," ").trim().replace(/ +/g," ").replace(//g," ").replace(//g,(function(e,t){return Array(parseInt(t,10)+1).join(" ")})).replace(/]*\/>/g,"\t").replace(//g,"\n"),[Se(l.replace(/<[^>]*>/g,""))]);v=(v.length>0?v+"\n":"")+X[0]}break;case"s":break;case"database-range":if("/"===i[1])break;try{m[(M=eo(we(i[0])["target-range-address"]))[0]]["!autofilter"]={ref:M[1]}}catch(e){}break;case"date":case"object":break;case"title":case"标题":case"desc":case"binary-data":case"table-source":case"scenario":case"iteration":case"content-validations":case"content-validation":case"help-message":case"error-message":case"database-ranges":case"filter":case"filter-and":case"filter-or":case"filter-condition":case"list-level-style-bullet":case"list-level-style-number":case"list-level-properties":break;case"sender-firstname":case"sender-lastname":case"sender-initials":case"sender-title":case"sender-position":case"sender-email":case"sender-phone-private":case"sender-fax":case"sender-company":case"sender-phone-work":case"sender-street":case"sender-city":case"sender-postal-code":case"sender-country":case"sender-state-or-province":case"author-name":case"author-initials":case"chapter":case"file-name":case"template-name":case"sheet-name":case"event-listener":break;case"initial-creator":case"creation-date":case"print-date":case"generator":case"document-statistic":case"user-defined":case"editing-duration":case"editing-cycles":case"config-item":case"page-number":case"page-count":case"time":case"cell-range-source":case"detective":case"operation":case"highlighted-range":break;case"data-pilot-table":case"source-cell-range":case"source-service":case"data-pilot-field":case"data-pilot-level":case"data-pilot-subtotals":case"data-pilot-subtotal":case"data-pilot-members":case"data-pilot-member":case"data-pilot-display-info":case"data-pilot-sort-info":case"data-pilot-layout-info":case"data-pilot-field-reference":case"data-pilot-groups":case"data-pilot-group":case"data-pilot-group-member":case"rect":break;case"dde-connection-decls":case"dde-connection-decl":case"dde-link":case"dde-source":case"properties":case"property":break;case"a":if("/"!==i[1]){if(!(O=we(i[0],!1)).href)break;O.Target=O.href,delete O.href,"#"==O.Target.charAt(0)&&O.Target.indexOf(".")>-1&&(M=eo(O.Target.slice(1)),O.Target="#"+M[0]+"!"+M[1])}break;case"table-protection":case"data-pilot-grand-total":case"office-document-common-attrs":break;default:switch(i[2]){case"dc:":case"calcext:":case"loext:":case"ooo:":case"chartooo:":case"draw:":case"style:":case"chart:":case"form:":case"uof:":case"表:":case"字:":break;default:if(u.WTF)throw new Error(i)}}var K={Sheets:m,SheetNames:g,Workbook:R};return u.bookSheets&&delete K.Sheets,K});function Kl(e,t){t=t||{};var n=!!le(e,"objectdata");n&&function(e,t){for(var n,r,a=gl(e);n=yl.exec(a);)switch(n[3]){case"manifest":break;case"file-entry":if("/"==(r=we(n[0],!1)).path&&"application/vnd.oasis.opendocument.spreadsheet"!==r.type)throw new Error("This OpenDocument is not a spreadsheet");break;case"encryption-data":case"algorithm":case"start-key-generation":case"key-derivation":throw new Error("Unsupported ODS Encryption");default:if(t&&t.WTF)throw n}}(ce(e,"META-INF/manifest.xml"),t);var r=he(e,"content.xml");if(!r)throw new Error("Missing content.xml in "+(n?"ODS":"UOF")+" file");var a=Xl(n?r:Me(r),t);return le(e,"meta.xml")&&(a.Props=ar(ce(e,"meta.xml"))),a}function ql(e,t){return Xl(e,t)}var Yl=function(){var e="";return function(){return me+e}}(),Jl=function(){var e=" \n",t=function(t,n,r){var a=[];a.push(' \n');var s=0,i=0,o=Jt(t["!ref"]),l=t["!merges"]||[],u=0,c=Array.isArray(t);for(s=0;s\n");for(;s<=o.e.r;++s){for(a.push(" \n"),i=0;ii||l[u].s.r>s||l[u].e.c\n");else{var p=Yt({r:s,c:i}),m=c?(t[s]||[])[i]:t[p];if(m&&m.f&&(f["table:formula"]=Ae(("of:="+m.f.replace(ni,"$1[.$2$3$4$5]").replace(/\]:\[/g,":")).replace(/;/g,"|").replace(/,/g,";")),m.F&&m.F.slice(0,p.length)==p)){var g=Jt(m.F);f["table:number-matrix-columns-spanned"]=g.e.c-g.s.c+1,f["table:number-matrix-rows-spanned"]=g.e.r-g.s.r+1}if(m){switch(m.t){case"b":d=m.v?"TRUE":"FALSE",f["office:value-type"]="boolean",f["office:boolean-value"]=m.v?"true":"false";break;case"n":d=m.w||String(m.v||0),f["office:value-type"]="float",f["office:value"]=m.v||0;break;case"s":case"str":d=null==m.v?"":m.v,f["office:value-type"]="string";break;case"d":d=m.w||Q(m.v).toISOString(),f["office:value-type"]="date",f["office:date-value"]=Q(m.v).toISOString(),f["table:style-name"]="ce1";break;default:a.push(e);continue}var y=Ae(d).replace(/ +/g,(function(e){return''})).replace(/\t/g,"").replace(/\n/g,"").replace(/^ /,"").replace(/ $/,"");if(m.l&&m.l.Target){var b=m.l.Target;y=Ze("text:a",y,{"xlink:href":b="#"==b.charAt(0)?"#"+b.slice(1).replace(/\./,"!"):b})}a.push(" "+Ze("table:table-cell",Ze("text:p",y,{}),f)+"\n")}else a.push(e)}}a.push(" \n")}return a.push(" \n"),a.join("")};return function(e,n){var r=[me],a=Je({"xmlns:office":"urn:oasis:names:tc:opendocument:xmlns:office:1.0","xmlns:table":"urn:oasis:names:tc:opendocument:xmlns:table:1.0","xmlns:style":"urn:oasis:names:tc:opendocument:xmlns:style:1.0","xmlns:text":"urn:oasis:names:tc:opendocument:xmlns:text:1.0","xmlns:draw":"urn:oasis:names:tc:opendocument:xmlns:drawing:1.0","xmlns:fo":"urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0","xmlns:xlink":"http://www.w3.org/1999/xlink","xmlns:dc":"http://purl.org/dc/elements/1.1/","xmlns:meta":"urn:oasis:names:tc:opendocument:xmlns:meta:1.0","xmlns:number":"urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0","xmlns:presentation":"urn:oasis:names:tc:opendocument:xmlns:presentation:1.0","xmlns:svg":"urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0","xmlns:chart":"urn:oasis:names:tc:opendocument:xmlns:chart:1.0","xmlns:dr3d":"urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0","xmlns:math":"http://www.w3.org/1998/Math/MathML","xmlns:form":"urn:oasis:names:tc:opendocument:xmlns:form:1.0","xmlns:script":"urn:oasis:names:tc:opendocument:xmlns:script:1.0","xmlns:ooo":"http://openoffice.org/2004/office","xmlns:ooow":"http://openoffice.org/2004/writer","xmlns:oooc":"http://openoffice.org/2004/calc","xmlns:dom":"http://www.w3.org/2001/xml-events","xmlns:xforms":"http://www.w3.org/2002/xforms","xmlns:xsd":"http://www.w3.org/2001/XMLSchema","xmlns:xsi":"http://www.w3.org/2001/XMLSchema-instance","xmlns:sheet":"urn:oasis:names:tc:opendocument:sh33tjs:1.0","xmlns:rpt":"http://openoffice.org/2005/report","xmlns:of":"urn:oasis:names:tc:opendocument:xmlns:of:1.2","xmlns:xhtml":"http://www.w3.org/1999/xhtml","xmlns:grddl":"http://www.w3.org/2003/g/data-view#","xmlns:tableooo":"http://openoffice.org/2009/table","xmlns:drawooo":"http://openoffice.org/2010/draw","xmlns:calcext":"urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0","xmlns:loext":"urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0","xmlns:field":"urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0","xmlns:formx":"urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0","xmlns:css3t":"http://www.w3.org/TR/css3-text/","office:version":"1.2"}),s=Je({"xmlns:config":"urn:oasis:names:tc:opendocument:xmlns:config:1.0","office:mimetype":"application/vnd.oasis.opendocument.spreadsheet"});"fods"==n.bookType?r.push("\n"):r.push("\n"),function(e){e.push(" \n"),e.push(' \n'),e.push(' \n'),e.push(" /\n"),e.push(' \n'),e.push(" /\n"),e.push(" \n"),e.push(" \n"),e.push(' \n'),e.push(' \n'),e.push(" \n"),e.push(' \n'),e.push(" \n")}(r),r.push(" \n"),r.push(" \n");for(var i=0;i!=e.SheetNames.length;++i)r.push(t(e.Sheets[e.SheetNames[i]],e,i));return r.push(" \n"),r.push(" \n"),"fods"==n.bookType?r.push(""):r.push(""),r.join("")}}();function Zl(e,t){if("fods"==t.bookType)return Jl(e,t);var n=de(),r="",a=[],s=[];return fe(n,r="mimetype","application/vnd.oasis.opendocument.spreadsheet"),fe(n,r="content.xml",Jl(e,t)),a.push([r,"text/xml"]),s.push([r,"ContentFile"]),fe(n,r="styles.xml",Yl(e,t)),a.push([r,"text/xml"]),s.push([r,"StylesFile"]),fe(n,r="meta.xml",tr()),a.push([r,"text/xml"]),s.push([r,"MetadataFile"]),fe(n,r="manifest.rdf",function(e){var t=[me];t.push('\n');for(var n=0;n!=e.length;++n)t.push(Qn(e[n][0],e[n][1])),t.push(("",[' \n',' \n'," \n"].join("")));return t.push(Qn("","Document","pkg")),t.push(""),t.join("")}(s)),a.push([r,"application/rdf+xml"]),fe(n,r="META-INF/manifest.xml",function(e){var t=[me];t.push('\n'),t.push(' \n');for(var n=0;n\n');return t.push(""),t.join("")}(a)),n}function Ql(e){return function(t,n){var r=function(e,t){if(!t)return 0;var n=e.SheetNames.indexOf(t);if(-1==n)throw new Error("Sheet not found: "+t);return n}(t,n.sheet);return e.from_sheet(t.Sheets[t.SheetNames[r]],n,t)}}var eu=Ql(Ul),tu=Ql({from_sheet:Fu}),nu=Ql(void 0!==Ia?Ia:{}),ru=Ql(void 0!==Aa?Aa:{}),au=Ql(void 0!==Ta?Ta:{}),su=Ql(void 0!==is?is:{}),iu=Ql({from_sheet:Ru}),ou=Ql(void 0!==Na?Na:{}),lu=Ql(void 0!==Da?Da:{});function uu(e){return function(t){for(var n=0;n!=e.length;++n){var r=e[n];void 0===t[r[0]]&&(t[r[0]]=r[1]),"n"===r[2]&&(t[r[0]]=Number(t[r[0]]))}}}var cu=function(e){uu([["cellNF",!1],["cellHTML",!0],["cellFormula",!0],["cellStyles",!1],["cellText",!0],["cellDates",!1],["sheetStubs",!1],["sheetRows",0,"n"],["bookDeps",!1],["bookSheets",!1],["bookProps",!1],["bookFiles",!1],["bookVBA",!1],["password",""],["WTF",!1]])(e)},hu=uu([["cellDates",!1],["bookSST",!1],["bookType","xlsx"],["compression",!1],["WTF",!1]]);function fu(e,t,n,r,a,s,i,o,l,u,c,h){try{s[r]=Kn(he(e,n,!0),t);var f,d=ce(e,t);switch(o){case"sheet":f=rl(d,t,a,l,s[r],u,c,h);break;case"chart":if(!(f=function(e,t,n,r,a,s,i,o){return".bin"===t.slice(-4)?function(e,t,n,r,a){if(!e)return e;r||(r={"!id":{}});var s={"!type":"chart","!drawel":null,"!rel":""},i=[],o=!1;return Pt(e,(function(e,r,l){switch(l){case 550:s["!rel"]=e;break;case 651:a.Sheets[n]||(a.Sheets[n]={}),e.name&&(a.Sheets[n].CodeName=e.name);break;case 562:case 652:case 669:case 679:case 551:case 552:case 476:case 3072:break;case 35:o=!0;break;case 36:o=!1;break;case 37:i.push(r);break;case 38:i.pop();break;default:if((r||"").indexOf("Begin")>0)i.push(r);else if((r||"").indexOf("End")>0)i.pop();else if(!o||t.WTF)throw new Error("Unexpected record "+l+" "+r)}}),t),r["!id"][s["!rel"]]&&(s["!drawel"]=r["!id"][s["!rel"]]),s}(e,r,n,a,s):function(e,t,n,r,a){if(!e)return e;r||(r={"!id":{}});var s,i={"!type":"chart","!drawel":null,"!rel":""},o=e.match(bo);return o&&wo(o[0],0,a,n),(s=e.match(/drawing r:id="(.*?)"/))&&(i["!rel"]=s[1]),r["!id"][i["!rel"]]&&(i["!drawel"]=r["!id"][i["!rel"]]),i}(e,0,n,a,s)}(d,t,a,l,s[r],u))||!f["!drawel"])break;var p=pe(f["!drawel"].Target,t),m=Xn(p),g=pe(function(e,t){if(!e)return"??";var n=(e.match(/]*r:id="([^"]*)"/)||["",""])[1];return t["!id"][n].Target}(he(e,p,!0),Kn(he(e,m,!0),p)),p),y=Xn(g);f=function(e,t,n,r,a,s){var i=s||{"!type":"chart"};if(!e)return s;var o=0,l=0,u="A",c={s:{r:2e6,c:2e6},e:{r:0,c:0}};return(e.match(/[\s\S]*?<\/c:numCache>/gm)||[]).forEach((function(e){var t=function(e){var t,n=[],r=e.match(/^/);(e.match(/(.*?)<\/c:pt>/gm)||[]).forEach((function(e){var t=e.match(/(.*)<\/c:v><\/c:pt>/);t&&(n[+t[1]]=r?+t[2]:t[2])}));var a=Se((e.match(/([\s\S]*?)<\/c:formatCode>/)||["","General"])[1]);return(e.match(/(.*?)<\/c:f>/gm)||[]).forEach((function(e){t=e.replace(/<.*?>/g,"")})),[n,a,t]}(e);c.s.r=c.s.c=0,c.e.c=o,u=Kt(o),t[0].forEach((function(e,n){i[u+Gt(n)]={t:"n",v:e,z:t[1]},l=n})),c.e.r0&&(i["!ref"]=Zt(c)),i}(he(e,g,!0),0,0,Kn(he(e,y,!0),g),0,f);break;case"macro":v=t,s[r],v.slice(-4),f={"!type":"macro"};break;case"dialog":f=function(e,t,n,r,a,s,i,o){return t.slice(-4),{"!type":"dialog"}}(0,t,0,0,s[r]);break;default:throw new Error("Unrecognized sheet type "+o)}i[r]=f;var b=[];s&&s[r]&&z(s[r]).forEach((function(n){if(s[r][n].Type==Gn.CMNT){var a=pe(s[r][n].Target,t);if(!(b=function(e,t,n){return".bin"===t.slice(-4)?function(e,t){var n=[],r=[],a={},s=!1;return Pt(e,(function(e,i,o){switch(o){case 632:r.push(e);break;case 635:a=e;break;case 637:a.t=e.t,a.h=e.h,a.r=e.r;break;case 636:if(a.author=r[a.iauthor],delete a.iauthor,t.sheetRows&&a.rfx&&t.sheetRows<=a.rfx.r)break;a.t||(a.t=""),delete a.rfx,n.push(a);break;case 3072:break;case 35:s=!0;break;case 36:s=!1;break;case 37:case 38:break;default:if((i||"").indexOf("Begin")>0);else if((i||"").indexOf("End")>0);else if(!s||t.WTF)throw new Error("Unexpected record "+o+" "+i)}})),n}(e,n):function(e,t){if(e.match(/<(?:\w+:)?comments *\/>/))return[];var n=[],r=[],a=e.match(/<(?:\w+:)?authors>([\s\S]*)<\/(?:\w+:)?authors>/);a&&a[1]&&a[1].split(/<\/\w*:?author>/).forEach((function(e){if(""!==e&&""!==e.trim()){var t=e.match(/<(?:\w+:)?author[^>]*>(.*)/);t&&n.push(t[1])}}));var s=e.match(/<(?:\w+:)?commentList>([\s\S]*)<\/(?:\w+:)?commentList>/);return s&&s[1]&&s[1].split(/<\/\w*:?comment>/).forEach((function(e){if(""!==e&&""!==e.trim()){var a=e.match(/<(?:\w+:)?comment[^>]*>/);if(a){var s=we(a[0]),i={author:s.authorId&&n[s.authorId]||"sheetjsghost",ref:s.ref,guid:s.guid},o=qt(s.ref);if(!(t.sheetRows&&t.sheetRows<=o.r)){var l=e.match(/<(?:\w+:)?text>([\s\S]*)<\/(?:\w+:)?text>/),u=!!l&&!!l[1]&&Pa(l[1])||{r:"",t:"",h:""};i.r=u.r,""==u.r&&(u.t=u.h=""),i.t=u.t.replace(/\r\n/g,"\n").replace(/\r/g,"\n"),t.cellHTML&&(i.h=u.h),r.push(i)}}}})),r}(e,n)}(ce(e,a,!0),a,l))||!b.length)return;!function(e,t){var n,r=Array.isArray(e);t.forEach((function(t){var a=qt(t.ref);if(r?(e[a.r]||(e[a.r]=[]),n=e[a.r][a.c]):n=e[t.ref],!n){n={t:"z"},r?e[a.r][a.c]=n:e[t.ref]=n;var s=Qt(e["!ref"]||"BDWGO1000001:A1");s.s.r>a.r&&(s.s.r=a.r),s.e.ra.c&&(s.s.c=a.c),s.e.c0?t.calcchains[0]:"",t.sst=t.strs.length>0?t.strs[0]:"",t.style=t.styles.length>0?t.styles[0]:"",t.defaults=n,delete t.calcchains,t}(he(e,"[Content_Types].xml")),i=!1;if(0===s.workbooks.length&&ce(e,r="xl/workbook.xml",!0)&&s.workbooks.push(r),0===s.workbooks.length){if(!ce(e,r="xl/workbook.bin",!0))throw new Error("Could not find workbook");s.workbooks.push(r),i=!0}"bin"==s.workbooks[0].slice(-3)&&(i=!0);var o={},l={};if(!t.bookSheets&&!t.bookProps){if(to=[],s.sst)try{to=function(e,t,n){return".bin"===t.slice(-4)?function(e,t){var n=[],r=!1;return Pt(e,(function(e,a,s){switch(s){case 159:n.Count=e[0],n.Unique=e[1];break;case 19:n.push(e);break;case 160:return!0;case 35:r=!0;break;case 36:r=!1;break;default:if(a.indexOf("Begin")>0||a.indexOf("End"),!r||t.WTF)throw new Error("Unexpected record "+s+" "+a)}})),n}(e,n):function(e,t){var n=[],r="";if(!e)return n;var a=e.match(La);if(a){r=a[2].replace(za,"").split(Wa);for(var s=0;s!=r.length;++s){var i=Pa(r[s].trim(),t);null!=i&&(n[n.length]=i)}a=we(a[1]),n.Count=a.count,n.Unique=a.uniqueCount}return n}(e,n)}(ce(e,du(s.sst)),s.sst,t)}catch(e){if(t.WTF)throw e}t.cellStyles&&s.themes.length&&(o=function(e,t,n){return Hs(e,n)}(he(e,s.themes[0].replace(/^\//,""),!0)||"",s.themes[0],t)),s.style&&(l=function(e,t,n,r){return".bin"===t.slice(-4)?function(e,t,n){var r={NumberFmt:[]};for(var a in A._table)r.NumberFmt[a]=A._table[a];r.CellXf=[],r.Fonts=[];var s=[],i=!1;return Pt(e,(function(e,a,o){switch(o){case 44:r.NumberFmt[e[0]]=e[1],A.load(e[1],e[0]);break;case 43:r.Fonts.push(e),null!=e.color.theme&&t&&t.themeElements&&t.themeElements.clrScheme&&(e.color.rgb=ls(t.themeElements.clrScheme[e.color.theme].rgb,e.color.tint||0));break;case 1025:case 45:case 46:break;case 47:"BrtBeginCellXFs"==s[s.length-1]&&r.CellXf.push(e);break;case 48:case 507:case 572:case 475:break;case 1171:case 2102:case 1130:case 512:case 2095:case 3072:break;case 35:i=!0;break;case 36:i=!1;break;case 37:s.push(a),i=!0;break;case 38:s.pop(),i=!1;break;default:if((a||"").indexOf("Begin")>0)s.push(a);else if((a||"").indexOf("End")>0)s.pop();else if(!i||n.WTF&&"BrtACBegin"!=s[s.length-1])throw new Error("Unexpected record "+o+" "+a)}})),r}(e,n,r):Ss(e,n,r)}(ce(e,du(s.style)),s.style,o,t))}s.links.map((function(n){try{return Kn(he(e,Xn(du(n))),n),function(e,t,n,r){if(".bin"===n.slice(-4))return function(e,t,n,r){if(!e)return e;var a=r||{},s=!1;Pt(e,(function(e,t,n){switch(n){case 359:case 363:case 364:case 366:case 367:case 368:case 369:case 370:case 371:case 472:case 577:case 578:case 579:case 580:case 581:case 582:case 583:case 584:case 585:case 586:case 587:break;case 35:s=!0;break;case 36:s=!1;break;default:if((t||"").indexOf("Begin")>0);else if((t||"").indexOf("End")>0);else if(!s||a.WTF)throw new Error("Unexpected record "+n.toString(16)+" "+t)}}),a)}(e,0,0,r)}(ce(e,du(n)),0,n,t)}catch(e){}}));var u=function(e,t,n){return".bin"===t.slice(-4)?function(e,t){var n={AppVersion:{},WBProps:{},WBView:[],Sheets:[],CalcPr:{},xmlns:""},r=[],a=!1;t||(t={}),t.biff=12;var s=[],i=[[]];return i.SheetNames=[],i.XTI=[],Pt(e,(function(e,o,l){switch(l){case 156:i.SheetNames.push(e.name),n.Sheets.push(e);break;case 153:n.WBProps=e;break;case 39:null!=e.Sheet&&(t.SID=e.Sheet),e.Ref=zi(e.Ptg,0,null,i,t),delete t.SID,delete e.Ptg,s.push(e);break;case 1036:break;case 357:case 358:case 355:case 667:i[0].length?i.push([l,e]):i[0]=[l,e],i[i.length-1].XTI=[];break;case 362:0===i.length&&(i[0]=[],i[0].XTI=[]),i[i.length-1].XTI=i[i.length-1].XTI.concat(e),i.XTI=i.XTI.concat(e);break;case 361:break;case 3072:case 3073:case 2071:case 534:case 677:case 158:case 157:case 610:case 2050:case 155:case 548:case 676:case 128:case 665:case 2128:case 2125:case 549:case 2053:case 596:case 2076:case 2075:case 2082:case 397:case 154:case 1117:case 553:case 2091:break;case 35:r.push(o),a=!0;break;case 36:r.pop(),a=!1;break;case 37:r.push(o),a=!0;break;case 38:r.pop(),a=!1;break;case 16:break;default:if((o||"").indexOf("Begin")>0);else if((o||"").indexOf("End")>0);else if(!a||t.WTF&&"BrtACBegin"!=r[r.length-1]&&"BrtFRTBegin"!=r[r.length-1])throw new Error("Unexpected record "+l+" "+o)}}),t),qo(n),n.Names=s,n.supbooks=i,n}(e,n):function(e,t){if(!e)throw new Error("Could not find file");var n={AppVersion:{},WBProps:{},WBView:[],Sheets:[],CalcPr:{},Names:[],xmlns:""},r=!1,a="xmlns",s={},i=0;if(e.replace(ye,(function(o,l){var u=we(o);switch(_e(u[0])){case"":break;case"":case"":case"":break;case"":Vo.forEach((function(e){if(null!=u[e[0]])switch(e[2]){case"bool":n.WBProps[e[0]]=Oe(u[e[0]]);break;case"int":n.WBProps[e[0]]=parseInt(u[e[0]],10);break;default:n.WBProps[e[0]]=u[e[0]]}})),u.codeName&&(n.WBProps.CodeName=Me(u.codeName));break;case"":case"":break;case"":case"":break;case"":delete u[0],n.WBView.push(u);break;case"":break;case"":case"":break;case"":break;case"":case"":case"":case"":break;case"":case"":r=!1;break;case"":s.Ref=Se(Me(e.slice(i,l))),n.Names.push(s);break;case"":break;case"":delete u[0],n.CalcPr=u;break;case"":case"":case"":case"":break;case"":case"":case"":break;case"":case"":case"":break;case"":break;case"":case"":case"":case"":case"":break;case"":r=!1;break;case"":r=!0;break;case"":r=!1;break;case"]*>([\\s\\S]*?)"));s&&s.length>0&&(r[n[1]]=s[1])}})),r.HeadingPairs&&r.TitlesOfParts&&lr(r.HeadingPairs,r.TitlesOfParts,t,n)}(h,c,t));var f={};t.bookSheets&&!t.bookProps||0!==s.custprops.length&&(h=he(e,du(s.custprops[0]),!0))&&(f=function(e,t){var n={},r="",a=e.match(cr);if(a)for(var s=0;s!=a.length;++s){var i=a[s],o=we(i);switch(o[0]){case"":r=null;break;default:if(0===i.indexOf(""),u=l[0].slice(4),c=l[1];switch(u){case"lpstr":case"bstr":case"lpwstr":n[r]=Se(c);break;case"bool":n[r]=Oe(c);break;case"i1":case"i2":case"i4":case"i8":case"int":case"uint":n[r]=parseInt(c,10);break;case"r4":case"r8":case"decimal":n[r]=parseFloat(c);break;case"filetime":case"date":n[r]=Q(c);break;case"cy":case"error":n[r]=Se(c);break;default:if("/"==u.slice(-1))break;t.WTF&&"undefined"!=typeof console&&console.warn("Unexpected",i,u,l)}}else if("0&&(n=c.SheetNames),t.bookProps&&(d.Props=c,d.Custprops=f),t.bookSheets&&void 0!==n&&(d.SheetNames=n),t.bookSheets?d.SheetNames:t.bookProps))return d;n={};var p,m={};t.bookDeps&&s.calcchain&&(p=ce(e,du(s.calcchain)),m=".bin"===s.calcchain.slice(-4)?function(e,t,n){var r=[];return Pt(e,(function(e,t,n){switch(n){case 63:r.push(e);break;default:if((t||"").indexOf("Begin")>0);else if(!((t||"").indexOf("End")>0))throw new Error("Unexpected record "+n+" "+t)}})),r}(p):function(e){var t=[];if(!e)return t;var n=1;return(e.match(ye)||[]).forEach((function(e){var r=we(e);switch(r[0]){case"":case"":break;case"-1?"sheet":Gn.CS&&n==Gn.CS?"chart":Gn.DS&&n==Gn.DS?"dialog":Gn.MS&&n==Gn.MS?"macro":n&&n.length?n:"sheet")];var n}))}catch(e){return null}return e&&0!==e.length?e:null}(C,u.Sheets));var S=ce(e,"xl/worksheets/sheet.xml",!0)?1:0;e:for(b=0;b!=c.Worksheets;++b){var N="sheet";if(C&&C[b]?(g="xl/"+C[b][1].replace(/[\/]?xl\//,""),le(e,g)||(g=C[b][1]),le(e,g)||(g=E.replace(/_rels\/.*$/,"")+C[b][1]),N=C[b][2]):g=(g="xl/worksheets/sheet"+(b+1-S)+"."+x).replace(/sheet0\./,"sheet."),y=g.replace(/^(.*)(\/)([^\/]*)$/,"$1/_rels/$3.rels"),t&&null!=t.sheets)switch(typeof t.sheets){case"number":if(b!=t.sheets)continue e;break;case"string":if(c.SheetNames[b].toLowerCase()!=t.sheets.toLowerCase())continue e;break;default:if(Array.isArray&&Array.isArray(t.sheets)){for(var I=!1,T=0;T!=t.sheets.length;++T)"number"==typeof t.sheets[T]&&t.sheets[T]==b&&(I=1),"string"==typeof t.sheets[T]&&t.sheets[T].toLowerCase()==c.SheetNames[b].toLowerCase()&&(I=1);if(!I)continue e}}fu(e,g,y,c.SheetNames[b],b,v,n,N,t,u,o,l)}return d={Directory:s,Workbook:u,Props:c,Custprops:f,Deps:m,Sheets:n,SheetNames:c.SheetNames,Strings:to,Styles:l,Themes:o,SSF:A.get_table()},t&&t.bookFiles&&(d.keys=a,d.files=e.files),t&&t.bookVBA&&(s.vba.length>0?d.vbaraw=ce(e,du(s.vba[0]),!0):s.defaults&&"application/vnd.ms-office.vbaProject"===s.defaults.bin&&(d.vbaraw=ce(e,"xl/vbaProject.bin",!0))),d}function mu(e,t){var n=t||{},r="Workbook",a=B.find(e,r);try{if(r="/!DataSpaces/Version",!(a=B.find(e,r))||!a.content)throw new Error("ECMA-376 Encrypted file missing "+r);if(function(e){var t={};t.id=e.read_shift(0,"lpp4"),t.R=Xa(e,4),t.U=Xa(e,4),t.W=Xa(e,4)}(a.content),r="/!DataSpaces/DataSpaceMap",!(a=B.find(e,r))||!a.content)throw new Error("ECMA-376 Encrypted file missing "+r);var s=function(e){var t=[];e.l+=4;for(var n=e.read_shift(4);n-- >0;)t.push(Ka(e));return t}(a.content);if(1!==s.length||1!==s[0].comps.length||0!==s[0].comps[0].t||"StrongEncryptionDataSpace"!==s[0].name||"EncryptedPackage"!==s[0].comps[0].v)throw new Error("ECMA-376 Encrypted file bad "+r);if(r="/!DataSpaces/DataSpaceInfo/StrongEncryptionDataSpace",!(a=B.find(e,r))||!a.content)throw new Error("ECMA-376 Encrypted file missing "+r);var i=function(e){var t=[];e.l+=4;for(var n=e.read_shift(4);n-- >0;)t.push(e.read_shift(0,"lpp4"));return t}(a.content);if(1!=i.length||"StrongEncryptionTransform"!=i[0])throw new Error("ECMA-376 Encrypted file bad "+r);if(r="/!DataSpaces/TransformInfo/StrongEncryptionTransform/!Primary",!(a=B.find(e,r))||!a.content)throw new Error("ECMA-376 Encrypted file missing "+r);!function(e){var t=function(e){var t={};return e.read_shift(4),e.l+=4,t.id=e.read_shift(0,"lpp4"),t.name=e.read_shift(0,"lpp4"),t.R=Xa(e,4),t.U=Xa(e,4),t.W=Xa(e,4),t}(e);if(t.ename=e.read_shift(0,"8lpp4"),t.blksz=e.read_shift(4),t.cmode=e.read_shift(4),4!=e.read_shift(4))throw new Error("Bad !Primary record")}(a.content)}catch(e){}if(r="/EncryptionInfo",!(a=B.find(e,r))||!a.content)throw new Error("ECMA-376 Encrypted file missing "+r);var o=function(e){var t=Xa(e);switch(t.Minor){case 2:return[t.Minor,Ja(e)];case 3:return[t.Minor,Za()];case 4:return[t.Minor,Qa(e)]}throw new Error("ECMA-376 Encrypted file unrecognized Version: "+t.Minor)}(a.content);if(r="/EncryptedPackage",!(a=B.find(e,r))||!a.content)throw new Error("ECMA-376 Encrypted file missing "+r);if(4==o[0]&&"undefined"!=typeof decrypt_agile)return decrypt_agile(o[1],a.content,n.password||"",n);if(2==o[0]&&"undefined"!=typeof decrypt_std76)return decrypt_std76(o[1],a.content,n.password||"",n);throw new Error("File is password-protected")}function gu(e,t){if(Ks=1024,"ods"==t.bookType)return Zl(e,t);e&&!e.SSF&&(e.SSF=A.get_table()),e&&e.SSF&&(D(A),A.load_table(e.SSF),t.revssf=V(e.SSF),t.revssf[e.SSF[65535]]=0,t.ssf=e.SSF),t.rels={},t.wbrels={},t.Strings=[],t.Strings.Count=0,t.Strings.Unique=0,ro?t.revStrings=new Map:(t.revStrings={},t.revStrings.foo=[],delete t.revStrings.foo);var n="xlsb"==t.bookType?"bin":"xml",r=ei.indexOf(t.bookType)>-1,a={workbooks:[],sheets:[],charts:[],dialogs:[],macros:[],rels:[],strs:[],comments:[],links:[],coreprops:[],extprops:[],custprops:[],themes:[],styles:[],calcchains:[],vba:[],drawings:[],TODO:[],xmlns:""};hu(t=t||{});var s=de(),i="",o=0;if(t.cellXfs=[],oo(t.cellXfs,{},{revssf:{General:0}}),e.Props||(e.Props={}),fe(s,i="docProps/core.xml",function(e,t){var n=t||{},r=[me,sr],a={};if(!e&&!n.Props)return r.join("");e&&(null!=e.CreatedDate&&ir("dcterms:created","string"==typeof e.CreatedDate?e.CreatedDate:Qe(e.CreatedDate,n.WTF),{"xsi:type":"dcterms:W3CDTF"},r,a),null!=e.ModifiedDate&&ir("dcterms:modified","string"==typeof e.ModifiedDate?e.ModifiedDate:Qe(e.ModifiedDate,n.WTF),{"xsi:type":"dcterms:W3CDTF"},r,a));for(var s=0;s!=nr.length;++s){var i=nr[s],o=n.Props&&null!=n.Props[i[1]]?n.Props[i[1]]:e?e[i[1]]:null;!0===o?o="1":!1===o?o="0":"number"==typeof o&&(o=String(o)),null!=o&&ir(i[0],o,null,r,a)}return r.length>2&&(r[r.length]="",r[1]=r[1].replace("/>",">")),r.join("")}(e.Props,t)),a.coreprops.push(i),Zn(t.rels,2,i,Gn.CORE_PROPS),i="docProps/app.xml",e.Props&&e.Props.SheetNames);else if(e.Workbook&&e.Workbook.Sheets){for(var l=[],u=0;uWorksheets")+n("vt:variant",n("vt:i4",String(e.Worksheets))),{size:2,baseType:"variant"})),t[t.length]=n("TitlesOfParts",n("vt:vector",e.SheetNames.map((function(e){return""+Ae(e)+""})).join(""),{size:e.Worksheets,baseType:"lpstr"})),t.length>2&&(t[t.length]="",t[1]=t[1].replace("/>",">")),t.join("")}(e.Props)),a.extprops.push(i),Zn(t.rels,3,i,Gn.EXT_PROPS),e.Custprops!==e.Props&&z(e.Custprops||{}).length>0&&(fe(s,i="docProps/custom.xml",function(e){var t=[me,hr];if(!e)return t.join("");var n=1;return z(e).forEach((function(r){++n,t[t.length]=Ze("property",function(e,t){switch(typeof e){case"string":var n=Ze("vt:lpwstr",Ae(e));return n.replace(/"/g,"_x0022_");case"number":return Ze((0|e)==e?"vt:i4":"vt:r8",Ae(String(e)));case"boolean":return Ze("vt:bool",e?"true":"false")}if(e instanceof Date)return Ze("vt:filetime",Qe(e));throw new Error("Unable to serialize "+e)}(e[r]),{fmtid:"{D5CDD505-2E9C-101B-9397-08002B2CF9AE}",pid:n,name:Ae(r)})})),t.length>2&&(t[t.length]="",t[1]=t[1].replace("/>",">")),t.join("")}(e.Custprops)),a.custprops.push(i),Zn(t.rels,4,i,Gn.CUST_PROPS)),o=1;o<=e.SheetNames.length;++o){var c={"!id":{}},h=e.Sheets[e.SheetNames[o-1]];switch((h||{})["!type"]||"sheet"){case"chart":default:fe(s,i="xl/worksheets/sheet"+o+"."+n,sl(o-1,i,t,e,c)),a.sheets.push(i),Zn(t.wbrels,-1,"worksheets/sheet"+o+"."+n,Gn.WS[0])}if(h){var f=h["!comments"],d=!1;if(f&&f.length>0){var p="xl/comments"+o+"."+n;fe(s,p,ol(f,p,t)),a.comments.push(p),Zn(c,-1,"../comments"+o+"."+n,Gn.CMNT),d=!0}h["!legacy"]&&d&&fe(s,"xl/drawings/vmlDrawing"+o+".vml",qs(o,h["!comments"])),delete h["!comments"],delete h["!legacy"]}c["!id"].rId1&&fe(s,Xn(i),Yn(c))}return null!=t.Strings&&t.Strings.length>0&&(fe(s,i="xl/sharedStrings."+n,il(t.Strings,i,t)),a.strs.push(i),Zn(t.wbrels,-1,"sharedStrings."+n,Gn.SST)),fe(s,i="xl/workbook."+n,al(e,i,t)),a.workbooks.push(i),Zn(t.rels,1,i,Gn.WB),fe(s,i="xl/theme/theme1.xml",Gs(e.Themes,t)),a.themes.push(i),Zn(t.wbrels,-1,"theme/theme1.xml",Gn.THEME),fe(s,i="xl/styles."+n,function(e,t,n){return(".bin"===t.slice(-4)?Bs:Is)(e,n)}(e,i,t)),a.styles.push(i),Zn(t.wbrels,-1,"styles."+n,Gn.STY),e.vbaraw&&r&&(fe(s,i="xl/vbaProject.bin",e.vbaraw),a.vba.push(i),Zn(t.wbrels,-1,"vbaProject.bin",Gn.VBA)),fe(s,"[Content_Types].xml",function(e,t){var n,r=[];r[r.length]=me,r[r.length]=jn,r=r.concat(Hn);var a=function(a){e[a]&&e[a].length>0&&(n=e[a][0],r[r.length]=Ze("Override",null,{PartName:("/"==n[0]?"":"/")+n,ContentType:Un[a][t.bookType||"xlsx"]}))},s=function(n){(e[n]||[]).forEach((function(e){r[r.length]=Ze("Override",null,{PartName:("/"==e[0]?"":"/")+e,ContentType:Un[n][t.bookType||"xlsx"]})}))},i=function(t){(e[t]||[]).forEach((function(e){r[r.length]=Ze("Override",null,{PartName:("/"==e[0]?"":"/")+e,ContentType:Vn[t][0]})}))};return a("workbooks"),s("sheets"),s("charts"),i("themes"),["strs","styles"].forEach(a),["coreprops","extprops","custprops"].forEach(i),i("vba"),i("comments"),i("drawings"),r.length>2&&(r[r.length]="",r[1]=r[1].replace("/>",">")),r.join("")}(a,t)),fe(s,"_rels/.rels",Yn(t.rels)),fe(s,"xl/_rels/workbook."+n+".rels",Yn(t.wbrels)),delete t.revssf,delete t.ssf,s}function yu(e,t){var n="";switch((t||{}).type||"base64"){case"buffer":return[e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7]];case"base64":n=g.decode(e.slice(0,12));break;case"binary":n=e;break;case"array":return[e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7]];default:throw new Error("Unrecognized type "+(t&&t.type||"undefined"))}return[n.charCodeAt(0),n.charCodeAt(1),n.charCodeAt(2),n.charCodeAt(3),n.charCodeAt(4),n.charCodeAt(5),n.charCodeAt(6),n.charCodeAt(7)]}function bu(e,t){var n=0;e:for(;n=2&&0===n[3])return Fa.to_workbook(r,s);break;case 3:case 131:case 139:case 140:return Na.to_workbook(r,s);case 123:if(92===n[1]&&114===n[2]&&116===n[3])return is.to_workbook(r,s);break;case 10:case 13:case 32:return function(e,t){var n="",r=yu(e,t);switch(t.type){case"base64":n=g.decode(e);break;case"binary":n=e;break;case"buffer":n=e.toString("binary");break;case"array":n=ee(e);break;default:throw new Error("Unrecognized type "+t.type)}return 239==r[0]&&187==r[1]&&191==r[2]&&(n=Me(n)),bu(n,t)}(r,s)}return Na.versions.indexOf(n[0])>-1&&n[2]<=12&&n[3]<=31?Na.to_workbook(r,s):vu(e,r,s,a)}function _u(e,t){var n=t||{};return n.type="file",wu(e,n)}function xu(e,t){switch(t.type){case"base64":case"binary":break;case"buffer":case"array":t.type="";break;case"file":return L(t.file,B.write(e,{type:y?"buffer":""}));case"string":throw new Error("'string' output type invalid for '"+t.bookType+"' files");default:throw new Error("Unrecognized type "+t.type)}return B.write(e,t)}function ku(e,t,n){n||(n="");var r=n+e;switch(t.type){case"base64":return g.encode(Be(r));case"binary":return Be(r);case"string":return e;case"file":return L(t.file,r,"utf8");case"buffer":return y?b(r,"utf8"):ku(r,{type:"binary"}).split("").map((function(e){return e.charCodeAt(0)}))}throw new Error("Unrecognized type "+t.type)}function Eu(e,t){switch(t.type){case"string":case"base64":case"binary":for(var n="",r=0;r22)throw new Error("Bad Code Name: Worksheet"+i)}}));for(var s=0;s-1||null!=s[i][1]&&o.push(s[i]);a.length&&B.utils.cfb_add(t,"/SummaryInformation",Dr(a,Il,Mn,Tn)),(r.length||o.length)&&B.utils.cfb_add(t,"/DocumentSummaryInformation",Dr(r,Al,On,Dn,o.length?o:null,"05d5cdd59c2e1b10939708002b2cf9ae"))}(e,r),8==n.biff&&e.vbaraw&&function(e,t){t.FullPaths.forEach((function(n,r){if(0!=r){var a=n.replace(/[^\/]*[\/]/,"/_VBA_PROJECT_CUR/");"/"!==a.slice(-1)&&B.utils.cfb_add(e,a,t.FileIndex[r].content)}}))}(r,B.read(e.vbaraw,{type:"string"==typeof e.vbaraw?"binary":"buffer"})),r}(e,n),n)}(e,n);case"xlsx":case"xlsm":case"xlam":case"xlsb":case"ods":return function(e,t){var n=t||{},r=gu(e,n),a={};if(n.compression&&(a.compression="DEFLATE"),n.password)a.type=y?"nodebuffer":"string";else switch(n.type){case"base64":a.type="base64";break;case"binary":a.type="string";break;case"string":throw new Error("'string' output type invalid for '"+n.bookType+"' files");case"buffer":case"file":a.type=y?"nodebuffer":"string";break;default:throw new Error("Unrecognized type "+n.type)}var s=r.FullPaths?B.write(r,{fileType:"zip",type:{nodebuffer:"buffer",string:"binary"}[a.type]||a.type}):r.generate(a);return n.password&&"undefined"!=typeof encrypt_agile?xu(encrypt_agile(s,n.password),n):"file"===n.type?L(n.file,s):"string"==n.type?Me(s):s}(e,n);default:throw new Error("Unrecognized bookType |"+n.bookType+"|")}}function Su(e){if(!e.bookType){var t=e.file.slice(e.file.lastIndexOf(".")).toLowerCase();t.match(/^\.[a-z]+$/)&&(e.bookType=t.slice(1)),e.bookType={xls:"biff8",htm:"html",slk:"sylk",socialcalc:"eth",Sh33tJS:"WTF"}[e.bookType]||e.bookType}}function Nu(e,t,n){var r=n||{};return r.type="file",r.file=t,Su(r),Cu(e,r)}function Iu(e,t,n,r,a,s,i,o){var l=Gt(n),u=o.defval,c=o.raw||!Object.prototype.hasOwnProperty.call(o,"raw"),h=!0,f=1===a?[]:{};if(1!==a)if(Object.defineProperty)try{Object.defineProperty(f,"__rowNum__",{value:n,enumerable:!1})}catch(e){f.__rowNum__=n}else f.__rowNum__=n;if(!i||e[n])for(var d=t.s.c;d<=t.e.c;++d){var p=i?e[n][d]:e[r[d]+l];if(void 0!==p&&void 0!==p.t){var m=p.v;switch(p.t){case"z":if(null==m)break;continue;case"e":m=void 0;break;case"s":case"d":case"b":case"n":break;default:throw new Error("unrecognized type "+p.t)}if(null!=s[d]){if(null==m)if(void 0!==u)f[s[d]]=u;else{if(!c||null!==m)continue;f[s[d]]=null}else f[s[d]]=c||o.rawNumbers&&"n"==p.t?m:en(p,m,o);null!=m&&(h=!1)}}else{if(void 0===u)continue;null!=s[d]&&(f[s[d]]=u)}}return{row:f,isempty:h}}function Au(e,t){if(null==e||null==e["!ref"])return[];var n={t:"n",v:0},r=0,a=1,s=[],i=0,o="",l={s:{r:0,c:0},e:{r:0,c:0}},u=t||{},c=null!=u.range?u.range:e["!ref"];switch(1===u.header?r=1:"A"===u.header?r=2:Array.isArray(u.header)?r=3:null==u.header&&(r=0),typeof c){case"string":l=Qt(c);break;case"number":(l=Qt(e["!ref"])).s.r=c;break;default:l=c}r>0&&(a=0);var h=Gt(l.s.r),f=[],d=[],p=0,m=0,g=Array.isArray(e),y=l.s.r,b=0,v=0;for(g&&!e[y]&&(e[y]=[]),b=l.s.c;b<=l.e.c;++b)switch(f[b]=Kt(b),n=g?e[y][b]:e[f[b]+h],r){case 1:s[b]=b-l.s.c;break;case 2:s[b]=f[b];break;case 3:s[b]=u.header[b-l.s.c];break;default:for(null==n&&(n={w:"__EMPTY",t:"s"}),o=i=en(n,null,u),m=0,v=0;v=0&&(c='"'+c.replace(Du,'""')+'"'));u.push(c)}return!1===o.blankrows&&l?null:u.join(i)}function Fu(e,t){var n=[],r=null==t?{}:t;if(null==e||null==e["!ref"])return"";var a=Qt(e["!ref"]),s=void 0!==r.FS?r.FS:",",i=s.charCodeAt(0),o=void 0!==r.RS?r.RS:"\n",l=o.charCodeAt(0),u=new RegExp(("|"==s?"\\|":s)+"+$"),c="",h=[];r.dense=Array.isArray(e);for(var f=r.skipHidden&&e["!cols"]||[],d=r.skipHidden&&e["!rows"]||[],p=a.s.c;p<=a.e.c;++p)(f[p]||{}).hidden||(h[p]=Kt(p));for(var m=a.s.r;m<=a.e.r;++m)(d[m]||{}).hidden||null!=(c=Tu(e,a,m,h,i,l,s,r))&&(r.strip&&(c=c.replace(u,"")),n.push(c+o));return delete r.dense,n.join("")}function Ru(e,t){t||(t={}),t.FS="\t",t.RS="\n";var n=Fu(e,t);if("undefined"==typeof cptable||"string"==t.type)return n;var r=cptable.utils.encode(1200,n,"str");return String.fromCharCode(255)+String.fromCharCode(254)+r}function Ou(e){var t,n="",r="";if(null==e||null==e["!ref"])return[];var a,s=Qt(e["!ref"]),i="",o=[],l=[],u=Array.isArray(e);for(a=s.s.c;a<=s.e.c;++a)o[a]=Kt(a);for(var c=s.s.r;c<=s.e.r;++c)for(i=Gt(c),a=s.s.c;a<=s.e.c;++a)if(n=o[a]+i,r="",void 0!==(t=u?(e[c]||[])[a]:e[n])){if(null!=t.F){if(n=t.F,!t.f)continue;r=t.f,-1==n.indexOf(":")&&(n=n+":"+n)}if(null!=t.f)r=t.f;else{if("z"==t.t)continue;if("n"==t.t&&null!=t.v)r=""+t.v;else if("b"==t.t)r=t.v?"TRUE":"FALSE";else if(void 0!==t.w)r="'"+t.w;else{if(void 0===t.v)continue;r="s"==t.t?"'"+t.v:""+t.v}}l[l.length]=n+"="+r}return l}function Mu(e,t,n){var r,a=n||{},s=+!a.skipHeader,i=e||{},o=0,l=0;if(i&&null!=a.origin)if("number"==typeof a.origin)o=a.origin;else{var u="string"==typeof a.origin?qt(a.origin):a.origin;o=u.r,l=u.c}var c={s:{c:0,r:0},e:{c:l,r:o+t.length-1+s}};if(i["!ref"]){var h=Qt(i["!ref"]);c.e.c=Math.max(c.e.c,h.e.c),c.e.r=Math.max(c.e.r,h.e.r),-1==o&&(o=h.e.r+1,c.e.r=o+t.length-1+s)}else-1==o&&(o=0,c.e.r=t.length-1+s);var f=a.header||[],d=0;t.forEach((function(e,t){z(e).forEach((function(n){-1==(d=f.indexOf(n))&&(f[d=f.length]=n);var u=e[n],c="z",h="",p=Yt({c:l+d,r:o+t+s});r=$u.sheet_get_cell(i,p),!u||"object"!=typeof u||u instanceof Date?("number"==typeof u?c="n":"boolean"==typeof u?c="b":"string"==typeof u?c="s":u instanceof Date&&(c="d",a.cellDates||(c="n",u=H(u)),h=a.dateNF||A._table[14]),r?(r.t=c,r.v=u,delete r.w,delete r.R,h&&(r.z=h)):i[p]=r={t:c,v:u},h&&(r.z=h)):i[p]=u}))})),c.e.c=Math.max(c.e.c,l+f.length-1);var p=Gt(o);if(s)for(d=0;d=65535)throw new Error("Too many worksheets");if(Jo(n),e.SheetNames.indexOf(n)>=0)throw new Error("Worksheet with name |"+n+"| already exists!");e.SheetNames.push(n),e.Sheets[n]=t},e.book_set_sheet_visibility=function(e,n,r){t(e,"Workbook",{}),t(e.Workbook,"Sheets",[]);var a=function(e,t){if("number"==typeof t){if(t>=0&&e.SheetNames.length>t)return t;throw new Error("Cannot find sheet # "+t)}if("string"==typeof t){var n=e.SheetNames.indexOf(t);if(n>-1)return n;throw new Error("Cannot find sheet name |"+t+"|")}throw new Error("Cannot find sheet |"+t+"|")}(e,n);switch(t(e.Workbook.Sheets,a,{}),r){case 0:case 1:case 2:break;default:throw new Error("Bad sheet visibility setting "+r)}e.Workbook.Sheets[a].Hidden=r},[["SHEET_VISIBLE",0],["SHEET_HIDDEN",1],["SHEET_VERY_HIDDEN",2]].forEach((function(t){e.consts[t[0]]=t[1]})),e.cell_set_number_format=function(e,t){return e.z=t,e},e.cell_set_hyperlink=function(e,t,n){return t?(e.l={Target:t},n&&(e.l.Tooltip=n)):delete e.l,e},e.cell_set_internal_link=function(t,n,r){return e.cell_set_hyperlink(t,"#"+n,r)},e.cell_add_comment=function(e,t,n){e.c||(e.c=[]),e.c.push({t,a:n||"SheetJS"})},e.sheet_set_array_formula=function(e,t,r){for(var a="string"!=typeof t?t:Qt(t),s="string"==typeof t?t:Zt(t),i=a.s.r;i<=a.e.r;++i)for(var o=a.s.c;o<=a.e.c;++o){var l=n(e,i,o);l.t="n",l.F=s,delete l.v,i==a.s.r&&o==a.s.c&&(l.f=r)}return e}}($u),y&&(Bu=n(791).Readable,t.stream={to_json:function(e,t){var n=Bu({objectMode:!0});if(null==e||null==e["!ref"])return n.push(null),n;var r={t:"n",v:0},a=0,s=1,i=[],o=0,l="",u={s:{r:0,c:0},e:{r:0,c:0}},c=t||{},h=null!=c.range?c.range:e["!ref"];switch(1===c.header?a=1:"A"===c.header?a=2:Array.isArray(c.header)&&(a=3),typeof h){case"string":u=Qt(h);break;case"number":(u=Qt(e["!ref"])).s.r=h;break;default:u=h}a>0&&(s=0);var f=Gt(u.s.r),d=[],p=0,m=Array.isArray(e),g=u.s.r,y=0,b=0;for(m&&!e[g]&&(e[g]=[]),y=u.s.c;y<=u.e.c;++y)switch(d[y]=Kt(y),r=m?e[g][y]:e[d[y]+f],a){case 1:i[y]=y-u.s.c;break;case 2:i[y]=d[y];break;case 3:i[y]=c.header[y-u.s.c];break;default:for(null==r&&(r={w:"__EMPTY",t:"s"}),l=o=en(r,null,c),p=0,b=0;bu.e.r)return n.push(null);for(;g<=u.e.r;){var t=Iu(e,u,g,d,a,i,m,c);if(++g,!1===t.isempty||(1===a?!1!==c.blankrows:c.blankrows)){n.push(t.row);break}}},n},to_html:function(e,t){var n=Bu(),r=t||{},a=null!=r.header?r.header:Ul.BEGIN,s=null!=r.footer?r.footer:Ul.END;n.push(a);var i=Jt(e["!ref"]);r.dense=Array.isArray(e),n.push(Ul._preamble(e,i,r));var o=i.s.r,l=!1;return n._read=function(){if(o>i.e.r)return l||(l=!0,n.push(""+s)),n.push(null);for(;o<=i.e.r;){n.push(Ul._row(e,i,o,r)),++o;break}},n},to_csv:function(e,t){var n=Bu(),r=null==t?{}:t;if(null==e||null==e["!ref"])return n.push(null),n;var a=Qt(e["!ref"]),s=void 0!==r.FS?r.FS:",",i=s.charCodeAt(0),o=void 0!==r.RS?r.RS:"\n",l=o.charCodeAt(0),u=new RegExp(("|"==s?"\\|":s)+"+$"),c="",h=[];r.dense=Array.isArray(e);for(var f=r.skipHidden&&e["!cols"]||[],d=r.skipHidden&&e["!rows"]||[],p=a.s.c;p<=a.e.c;++p)(f[p]||{}).hidden||(h[p]=Kt(p));var m=a.s.r,g=!1;return n._read=function(){if(!g)return g=!0,n.push("\ufeff");for(;m<=a.e.r;)if(++m,!(d[m-1]||{}).hidden&&null!=(c=Tu(e,a,m-1,h,i,l,s,r))){r.strip&&(c=c.replace(u,"")),n.push(c+o);break}return m>a.e.r?n.push(null):void 0},n}}),t.parse_xlscfb=Dl,t.parse_zip=pu,t.read=wu,t.readFile=_u,t.readFileSync=_u,t.write=Cu,t.writeFile=Nu,t.writeFileSync=Nu,t.writeFileAsync=function(e,t,n,r){var a=n||{};a.type="file",a.file=e,Su(a),a.type="buffer";var s=r;return s instanceof Function||(s=n),M.writeFile(e,Cu(t,a),s)},t.utils=$u,t.SSF=A,void 0!==B&&(t.CFB=B)}(t)},3906:()=>{},2993:()=>{},8352:()=>{},791:()=>{},4589:()=>{},1758:()=>{}},__webpack_module_cache__={};function __webpack_require__(e){if(__webpack_module_cache__[e])return __webpack_module_cache__[e].exports;var t=__webpack_module_cache__[e]={id:e,loaded:!1,exports:{}};return __webpack_modules__[e].call(t.exports,t,t.exports,__webpack_require__),t.loaded=!0,t.exports}return __webpack_require__.amdD=function(){throw new Error("define cannot be used indirect")},__webpack_require__.amdO={},__webpack_require__.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=(e,t)=>{for(var n in t)__webpack_require__.o(t,n)&&!__webpack_require__.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},__webpack_require__.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),__webpack_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),__webpack_require__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},__webpack_require__.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),__webpack_require__(2476)})(); -//# sourceMappingURL=bundle.js.map \ No newline at end of file diff --git a/danfojs-browser/lib/bundle.js.LICENSE.txt b/danfojs-browser/lib/bundle.js.LICENSE.txt deleted file mode 100644 index 5a857d56..00000000 --- a/danfojs-browser/lib/bundle.js.LICENSE.txt +++ /dev/null @@ -1,198 +0,0 @@ -/** - * @license - * Copyright 2017 Google LLC. All Rights Reserved. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============================================================================= - */ - -/** - * @license - * Copyright 2018 Google LLC - * - * Use of this source code is governed by an MIT-style - * license that can be found in the LICENSE file or at - * https://opensource.org/licenses/MIT. - * ============================================================================= - */ - -/** - * @license - * Copyright 2018 Google LLC. All Rights Reserved. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * ============================================================================= - */ - -/** - * @license - * Copyright 2018 Google LLC. All Rights Reserved. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============================================================================= - */ - -/** - * @license - * Copyright 2019 Google LLC. All Rights Reserved. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * ============================================================================= - */ - -/** - * @license - * Copyright 2019 Google LLC. All Rights Reserved. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============================================================================= - */ - -/** - * @license - * Copyright 2020 Google Inc. All Rights Reserved. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============================================================================= - */ - -/** - * @license - * Copyright 2020 Google LLC. All Rights Reserved. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============================================================================= - */ - -/** - * @license - * Copyright 2020 Google LLC. All Rights Reserved. - * Licensed under the Apache License, Version 2.0 (the License); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============================================================================= - */ - -/** - * @license - * Copyright 2021 Google LLC. All Rights Reserved. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============================================================================= - */ - -/** - * @license - * Copyright 2021 Google LLC. All Rights Reserved. - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============================================================================= - */ - -/** - * @license Complex.js v2.0.11 11/02/2016 - * - * Copyright (c) 2016, Robert Eisele (robert@xarg.org) - * Dual licensed under the MIT or GPL Version 2 licenses. - **/ - -/** - * @license Fraction.js v4.0.12 09/09/2015 - * http://www.xarg.org/2014/03/rational-numbers-in-javascript/ - * - * Copyright (c) 2015, Robert Eisele (robert@xarg.org) - * Dual licensed under the MIT or GPL Version 2 licenses. - **/ - -/** @license See the LICENSE file. */ diff --git a/danfojs-browser/lib/bundle.js.map b/danfojs-browser/lib/bundle.js.map deleted file mode 100644 index af70f3b7..00000000 --- a/danfojs-browser/lib/bundle.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack://dfd/./node_modules/@babel/runtime/helpers/arrayLikeToArray.js","webpack://dfd/./node_modules/@babel/runtime/helpers/arrayWithHoles.js","webpack://dfd/./node_modules/@babel/runtime/helpers/arrayWithoutHoles.js","webpack://dfd/./node_modules/@babel/runtime/helpers/assertThisInitialized.js","webpack://dfd/./node_modules/@babel/runtime/helpers/asyncToGenerator.js","webpack://dfd/./node_modules/@babel/runtime/helpers/classCallCheck.js","webpack://dfd/./node_modules/@babel/runtime/helpers/createClass.js","webpack://dfd/./node_modules/@babel/runtime/helpers/get.js","webpack://dfd/./node_modules/@babel/runtime/helpers/getPrototypeOf.js","webpack://dfd/./node_modules/@babel/runtime/helpers/inherits.js","webpack://dfd/./node_modules/@babel/runtime/helpers/iterableToArray.js","webpack://dfd/./node_modules/@babel/runtime/helpers/iterableToArrayLimit.js","webpack://dfd/./node_modules/@babel/runtime/helpers/nonIterableRest.js","webpack://dfd/./node_modules/@babel/runtime/helpers/nonIterableSpread.js","webpack://dfd/./node_modules/@babel/runtime/helpers/possibleConstructorReturn.js","webpack://dfd/./node_modules/@babel/runtime/helpers/setPrototypeOf.js","webpack://dfd/./node_modules/@babel/runtime/helpers/slicedToArray.js","webpack://dfd/./node_modules/@babel/runtime/helpers/superPropBase.js","webpack://dfd/./node_modules/@babel/runtime/helpers/toConsumableArray.js","webpack://dfd/./node_modules/@babel/runtime/helpers/typeof.js","webpack://dfd/./node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js","webpack://dfd/./node_modules/@babel/runtime/regenerator/index.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/backends/backend.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/util_base.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/environment.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/global_util.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/kernel_names.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/kernel_registry.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/util.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/profiler.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/tensor_format.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/tensor.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/types.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/tensor_util.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/engine.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/tape.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/device_util.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/flags.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/tensor_util_env.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/operation.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/complex.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/tensor_ops_util.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/tensor.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/io/types.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/io/io_utils.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/io/router_registry.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/io/indexed_db.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/io/local_storage.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/io/model_management.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/platforms/platform_browser.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/platforms/platform_node.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/buffer.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/cast.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/clone.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/print.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/io/browser_files.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/base_side_effects.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/io/progress.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/io/weights_loader.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/io/http.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/io/passthrough.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/mat_mul.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/one_hot.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/transpose.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/confusion_matrix.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/tensor3d.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/browser.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/gather_nd_util.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/scatter_nd_util.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/slice_util.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/serialization.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/test_util.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/version.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/globals.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/add.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/floorDiv.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/div.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/mul.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/sqrt.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/square.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/zeros_like.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/scalar.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/optimizers/optimizer.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/optimizers/adadelta_optimizer.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/fill.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/optimizers/adagrad_optimizer.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/pow.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/sub.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/optimizers/adam_optimizer.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/abs.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/broadcast_util.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/maximum.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/optimizers/adamax_optimizer.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/optimizers/sgd_optimizer.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/optimizers/momentum_optimizer.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/optimizers/rmsprop_optimizer.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/acos.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/acosh.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/add_n.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/all.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/any.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/arg_max.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/arg_min.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/asin.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/asinh.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/atan.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/atan2.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/atanh.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/conv_util.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/reshape.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/avg_pool.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/avg_pool_3d.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/concat.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/sigmoid.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/slice.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/tanh.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/basic_lstm_cell.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/batch_to_space_nd.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/batchnorm.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/batchnorm_util.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/batchnorm2d.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/batchnorm3d.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/batchnorm4d.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/bincount.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/broadcast_to.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/ceil.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/clip_by_value.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/concat_1d.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/concat_2d.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/concat_3d.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/concat_4d.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/conv2d.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/conv1d.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/conv2d_backprop_input.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/conv2d_transpose.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/conv3d.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/conv3d_backprop_input.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/conv3d_transpose.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/cos.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/cosh.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/cumsum.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/dense_bincount.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/depth_to_space.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/depthwise_conv2d.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/diag.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/dilation2d.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/equal.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/where.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/div_no_nan.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/dot.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/einsum.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/elu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/erf.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/exp.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/expand_dims.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/expm1.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/tile.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/eye.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/floor.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/gather.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/greater.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/greater_equal.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/imag.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/is_finite.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/is_inf.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/is_nan.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/leaky_relu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/less.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/less_equal.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/linspace.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/local_response_normalization.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/log.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/log1p.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/neg.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/softplus.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/log_sigmoid.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/max.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/sum.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/log_softmax.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/axis_util.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/log_sum_exp.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/logical_and.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/logical_not.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/logical_or.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/logical_xor.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/max_pool.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/max_pool_3d.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/max_pool_with_argmax.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/mean.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/zeros.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/ones.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/meshgrid.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/min.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/minimum.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/mirror_pad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/mod.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/moments.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/multi_rnn_cell.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/multinomial.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/not_equal.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/ones_like.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/outer_product.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/pad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/pad1d.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/pad2d.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/pad3d.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/pad4d.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/space_to_batch_nd.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/pool.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/prelu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/prod.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/rand.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/rand_util.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/random_gamma.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/random_normal.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/random_uniform.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/range.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/real.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/reciprocal.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/relu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/relu6.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/reverse.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/reverse_1d.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/reverse_2d.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/reverse_3d.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/reverse_4d.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/round.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/rsqrt.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/selu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/separable_conv2d.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/setdiff1d_async.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/sign.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/sin.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/sinh.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/slice1d.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/slice2d.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/slice3d.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/slice4d.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/softmax.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/spectral/fft.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/spectral/ifft.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/spectral/irfft.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/split.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/spectral/rfft.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/squared_difference.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/squeeze.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/stack.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/step.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/strided_slice.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/tan.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/tensor1d.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/tensor2d.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/tensor4d.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/tensor5d.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/tensor6d.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/topk.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/truncated_normal.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/unique.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/unsorted_segment_sum.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/unstack.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/variable.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/backends/where_impl.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/where_async.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/boolean_mask.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/norm.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/moving_average.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/scatter_nd.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/sparse_to_dense.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/sparse_to_dense_util.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/gather_nd.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/dropout.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/dropout_util.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/signal_ops_util.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/in_top_k.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/conv2d_backprop_filter.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/fused_util.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/fused/conv2d.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/depthwise_conv2d_native_backprop_filter.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/depthwise_conv2d_native_backprop_input.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/fused/depthwise_conv2d.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/fused/mat_mul.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/signal/hamming_window.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/signal/hann_window.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/signal/frame.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/signal/stft.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/image/crop_and_resize.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/image/flip_left_right.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/image/rotate_with_offset.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/nonmax_util.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/image/non_max_suppression.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/backends/non_max_suppression_util.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/backends/non_max_suppression_impl.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/image/non_max_suppression_async.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/image/non_max_suppression_with_score.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/image/non_max_suppression_padded.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/image/resize_bilinear.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/image/resize_nearest_neighbor.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/image/threshold.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/image/transform.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/linalg/band_part.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/linalg/gram_schmidt.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/linalg/qr.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/loss_ops_utils.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/losses/compute_weighted_loss.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/losses/absolute_difference.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/losses/cosine_distance.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/losses/hinge_loss.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/losses/huber_loss.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/losses/log_loss.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/losses/mean_squared_error.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/losses/sigmoid_cross_entropy.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/losses/softmax_cross_entropy.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/sparse/sparse_fill_empty_rows.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/sparse/sparse_reshape.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/ops.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/image/non_max_suppression_with_score_async.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/image/non_max_suppression_padded_async.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/optimizers/optimizer_constructors.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/train.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/browser_util.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/concat_util.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/reduce_util.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/rotate_util.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/array_ops_util.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/selu_util.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/erf_util.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/log.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/backends/complex_util.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/backends/einsum_util.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/split_util.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/segment_util.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/backends/backend_util.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Abs_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Acos_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Acosh_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Add_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/AddN_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/ArgMax_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/ArgMin_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Asin_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Asinh_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Atan2_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Atan_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Atanh_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/avg_pool_3d_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/AvgPool3D_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/avg_pool_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/AvgPool_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/BatchMatMul_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/BatchToSpaceND_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/BroadcastTo_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Cast_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Ceil_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/ClipByValue_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/ComplexAbs_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Concat_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Conv2D_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Conv2DBackpropInput_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/conv3d_backprop_filter.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Conv3D_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Cos_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Cosh_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Cumsum_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/DepthwiseConv2dNative_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Dilation2D_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Elu_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Erf_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Exp_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/ExpandDims_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Expm1_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Floor_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/FloorDiv_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/FusedBatchNorm_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/GatherV2_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/GreaterEqual_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Identity_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/IsFinite_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/IsInf_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/IsNan_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/LeakyRelu_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Log1p_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Log_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/LogSoftmax_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/local_response_normalization_backprop.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/LRN_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/min_max_grad_util.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Max_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Maximum_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/max_pool_3d_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/MaxPool3D_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/ops/max_pool_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/PadV2_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/SpaceToBatchND_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/SplitV_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/register_all_gradients.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/RealDiv_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/MaxPool_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Mean_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Min_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Minimum_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/MirrorPad_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Mod_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Multiply_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Neg_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/OneHot_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/OnesLike_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Pack_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Pow_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Prelu_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Reciprocal_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Relu6_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Relu_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Reshape_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/ResizeBilinear_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/ResizeNearestNeighbor_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Reverse_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Round_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Rsqrt_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Select_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Selu_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Sigmoid_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Sign_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Sin_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Sinh_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Slice_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Softmax_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Softplus_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Sqrt_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/SquaredDifference_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Square_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Step_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Sub_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Sum_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Tan_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Tanh_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Tile_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Transpose_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/Unpack_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/UnsortedSegmentSum_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/gradients/ZerosLike_grad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/backend/common.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/abs.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/acos.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/acosh.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/add.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/all.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/any.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/arg_max.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/arg_min.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/as_scalar.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/as_type.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/as1d.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/as2d.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/as3d.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/as4d.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/as5d.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/asin.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/asinh.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/atan.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/atan2.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/atanh.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/avg_pool.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/batch_to_space_nd.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/batchnorm.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/broadcast_to.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/cast.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/ceil.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/clip_by_value.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/concat.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/conv1d.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/conv2d_transpose.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/conv2d.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/cos.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/cosh.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/cumsum.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/depth_to_space.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/depthwise_conv2d.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/dilation2d.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/div_no_nan.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/div.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/dot.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/elu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/equal.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/erf.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/exp.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/expand_dims.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/expm1.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/fft.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/flatten.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/floor.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/floorDiv.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/gather.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/greater_equal.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/greater.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/ifft.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/irfft.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/is_finite.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/is_inf.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/is_nan.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/leaky_relu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/less_equal.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/less.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/local_response_normalization.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/log_sigmoid.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/log_softmax.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/log_sum_exp.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/log.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/log1p.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/logical_and.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/logical_not.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/logical_or.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/logical_xor.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/mat_mul.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/max_pool.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/max.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/maximum.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/mean.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/min.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/minimum.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/mirror_pad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/mod.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/mul.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/neg.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/norm.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/not_equal.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/one_hot.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/ones_like.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/pad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/pool.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/pow.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/prelu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/prod.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/reciprocal.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/relu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/relu6.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/reshape_as.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/reshape.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/resize_bilinear.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/resize_nearest_neighbor.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/reverse.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/rfft.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/round.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/rsqrt.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/selu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/separable_conv2d.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/sigmoid.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/sign.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/sin.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/sinh.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/slice.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/softmax.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/softplus.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/space_to_batch_nd.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/split.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/sqrt.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/square.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/squared_difference.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/squeeze.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/stack.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/step.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/strided_slice.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/sub.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/sum.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/tan.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/tanh.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/tile.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/to_bool.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/to_float.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/to_int.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/topk.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/transpose.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/unique.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/unsorted_segment_sum.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/unstack.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/where.js","webpack://dfd/./node_modules/@tensorflow/tfjs-core/dist/public/chained_ops/zeros_like.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/errors.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/utils/generic_utils.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/constraints.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/exports_constraints.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/keras_format/common.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/common.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/utils/math_utils.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/backend/tfjs_backend.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/keras_format/initializer_config.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/initializers.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/exports_initializers.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/backend/state.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/utils/types_utils.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/utils/variable_utils.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/variables.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/engine/topology.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/engine/input_layer.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/logs.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/base_callbacks.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/layers/serialization.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/losses.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/metrics.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/user_defined_metadata.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/utils/layer_utils.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/utils/serialization_utils.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/version.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/engine/executor.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/engine/container.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/engine/training_utils.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/engine/training_dataset.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/engine/training_tensors.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/engine/training.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/optimizers.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/models.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/exports.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/activations.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/regularizers.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/layers/advanced_activations.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/utils/conv_utils.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/layers/convolutional.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/layers/convolutional_depthwise.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/layers/recurrent.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/layers/convolutional_recurrent.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/layers/core.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/layers/embeddings.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/layers/merge.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/layers/noise.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/layers/normalization.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/layers/padding.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/layers/pooling.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/layers/wrappers.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/exports_layers.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/exports_metrics.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/exports_regularizers.js","webpack://dfd/./node_modules/@tensorflow/tfjs-layers/dist/callbacks.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/data/compiled_api.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/operations/custom_op/register.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/operations/executors/utils.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/arithmetic.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/basic_math.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/control.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/convolution.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/creation.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/dynamic.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/evaluation.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/graph.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/hash_table.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/image.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/logical.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/matrices.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/normalization.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/reduction.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/slice_join.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/spectral.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/operations/op_list/transformation.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/operations/operation_mapper.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/operations/custom_op/node_value_impl.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/executor/tensor_utils.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/executor/tensor_array.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/executor/tensor_list.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/operations/executors/convolution_executor.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/operations/executors/dynamic_executor.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/executor/hash_table.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/operations/operation_executor.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/operations/executors/arithmetic_executor.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/operations/executors/basic_math_executor.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/operations/executors/control_executor.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/operations/executors/creation_executor.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/operations/executors/evaluation_executor.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/operations/executors/image_executor.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/operations/executors/graph_executor.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/operations/executors/logical_executor.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/operations/executors/matrices_executor.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/operations/executors/normalization_executor.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/operations/executors/reduction_executor.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/operations/executors/slice_join_executor.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/operations/executors/sparse_executor.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/operations/executors/spectral_executor.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/operations/executors/transformation_executor.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/operations/executors/hash_table_executor.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/executor/execution_context.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/executor/model_analysis.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/executor/graph_executor.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/executor/resource_manager.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/executor/graph_model.js","webpack://dfd/./node_modules/@tensorflow/tfjs-converter/dist/version.js","webpack://dfd/./node_modules/@tensorflow/tfjs-data/dist/util/deep_map.js","webpack://dfd/./node_modules/@tensorflow/tfjs-data/dist/util/deep_clone.js","webpack://dfd/./node_modules/@tensorflow/tfjs-data/dist/util/ring_buffer.js","webpack://dfd/./node_modules/@tensorflow/tfjs-data/dist/util/growing_ring_buffer.js","webpack://dfd/./node_modules/@tensorflow/tfjs-data/dist/iterators/lazy_iterator.js","webpack://dfd/./node_modules/@tensorflow/tfjs-data/dist/dataset.js","webpack://dfd/./node_modules/@tensorflow/tfjs-data/dist/datasets/text_line_dataset.js","webpack://dfd/./node_modules/@tensorflow/tfjs-data/dist/datasets/csv_dataset.js","webpack://dfd/./node_modules/@tensorflow/tfjs-data/dist/iterators/microphone_iterator.js","webpack://dfd/./node_modules/@tensorflow/tfjs-data/dist/iterators/webcam_iterator.js","webpack://dfd/./node_modules/@tensorflow/tfjs-data/dist/datasource.js","webpack://dfd/./node_modules/@tensorflow/tfjs-data/dist/iterators/string_iterator.js","webpack://dfd/./node_modules/@tensorflow/tfjs-data/dist/iterators/byte_chunk_iterator.js","webpack://dfd/./node_modules/@tensorflow/tfjs-data/dist/iterators/file_chunk_iterator.js","webpack://dfd/./node_modules/@tensorflow/tfjs-data/dist/util/source_util.js","webpack://dfd/./node_modules/@tensorflow/tfjs-data/dist/sources/file_data_source.js","webpack://dfd/./node_modules/@tensorflow/tfjs-data/dist/sources/url_data_source.js","webpack://dfd/./node_modules/@tensorflow/tfjs-data/dist/iterators/url_chunk_iterator.js","webpack://dfd/./node_modules/@tensorflow/tfjs-data/dist/readers.js","webpack://dfd/./node_modules/@tensorflow/tfjs-data/dist/version.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/cpu_util.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/backend_cpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/utils/unary_utils.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/base.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Elu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Identity.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/LeakyRelu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/utils/binary_impl.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Prelu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Relu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Relu6.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Sigmoid.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/utils/fused_utils.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Complex.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/utils/zeros_impl.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Real.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Cast.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/utils/binary_utils.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Add.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Reshape.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/BatchMatMul.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/_FusedMatMul.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Abs.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Acos.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Acosh.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/AddN.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Transpose_impl.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Transpose.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/All.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Any.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/ArgMax.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/ArgMin.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Asin.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Asinh.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Atan.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Atan2.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Atanh.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/utils/pool_utils.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/AvgPool.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/AvgPool3D.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/AvgPool3DGrad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/AvgPoolGrad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/BatchNorm.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Slice.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/BatchToSpaceND.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Bincount_impl.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Bincount.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/utils/unary_impl.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Ceil.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Clip.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/ComplexAbs.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Concat_impl.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Imag.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Concat.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Conv2D.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Conv2DBackpropFilter.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Conv2DBackpropInput.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Conv3D.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Conv3DBackpropFilterV2.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Conv3DBackpropInputV2.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Cos.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Cosh.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/CropAndResize.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Cumsum.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/DenseBincount.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/DepthToSpace.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/DepthwiseConv2dNative.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/DepthwiseConv2dNativeBackpropFilter.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/DepthwiseConv2dNativeBackpropInput.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Diag.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Dilation2D.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Dilation2DBackpropFilter.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Dilation2DBackpropInput.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Multiply.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Sum.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Einsum.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/EluGrad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Equal.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Erf.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Exp.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/ExpandDims.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Expm1.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/RealDiv.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Sub.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/utils/fft_utils.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/FFT.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Fill.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/FlipLeftRight.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Floor.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/FloorDiv.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/FusedConv2D.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/FusedDepthwiseConv2D.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/GatherNd.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/GatherV2_impl.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/GatherV2.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Greater.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/GreaterEqual.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/IFFT.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/IsFinite.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/IsInf.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/IsNaN.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Less.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/LessEqual.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/LinSpace_impl.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/LinSpace.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Log.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Log1p.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/LogicalAnd.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/LogicalNot.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/LogicalOr.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/LRN.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/LRNGrad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Max_impl.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Max.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Maximum.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/MaxPool.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/MaxPool3D.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/MaxPool3DGrad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/MaxPoolGrad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/MaxPoolWithArgmax.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/MaxPoolWithArgmax_impl.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Mean.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Min.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Minimum.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/MirrorPad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Mod.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Softmax.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Multinomial.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Neg.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/NonMaxSuppressionV3.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/NonMaxSuppressionV4.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/NonMaxSuppressionV5.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/NotEqual.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/OneHot.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/ZerosLike.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/OnesLike.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Pack.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/PadV2.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Pow.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Prod.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Range_impl.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Range.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Reciprocal.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/ResizeBilinear.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/ResizeBilinearGrad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/ResizeNearestNeighbor.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/ResizeNearestNeighborGrad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Reverse.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/RotateWithOffset.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Round.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Rsqrt.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Scatter_impl.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/ScatterNd.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Select.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Selu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Sign.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Sin.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Sinh.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Softplus.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SpaceToBatchND.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SparseFillEmptyRows_impl.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SparseFillEmptyRows.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SparseReshape_impl.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SparseReshape.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SparseToDense.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SplitV.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Sqrt.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Square.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/SquaredDifference.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Step.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/StridedSlice_impl.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/StridedSlice.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Tan.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Tanh.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Tile_impl.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/TopK_impl.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Transform.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Unique_impl.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/UnsortedSegmentSum.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/register_all_kernels.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Tile.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/TopK.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Unique.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/kernels/Unpack.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/canvas_util.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/tex_util.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/webgl_util.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/flags_webgl.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/glsl_version.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/shader_compiler_util.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/decode_matrix_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/decode_matrix_packed_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/encode_float_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/encode_float_packed_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/encode_matrix_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/encode_matrix_packed_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/gpgpu_util.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/gpgpu_context.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/shader_compiler.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/gpgpu_math.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernel_utils/shared.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/packing_util.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/pack_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/reshape_packed_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/texture_manager.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/unaryop_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/unaryop_packed_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/unpack_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/backend_webgl.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/base.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/binaryop_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/binaryop_packed_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Identity.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Complex.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/LeakyRelu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Prelu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernel_utils/kernel_funcs_utils.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/mulmat_packed_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/binaryop_complex_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Multiply.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Reshape.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernel_utils/reshape.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/mean_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/reduce_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernel_utils/reduce.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/transpose_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/transpose_packed_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Transpose_impl.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Sum.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Sum_impl.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Transpose.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/BatchMatMul_impl.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/_FusedMatMul.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Abs.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Acos.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Acosh.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Add.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/addn_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/addn_packed_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/AddN.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/All.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Any.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/argminmax_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/argminmax_packed_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernel_utils/arg_min_max.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ArgMax.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ArgMin.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Asin.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Asinh.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Atan.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Atan2.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Atanh.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/pool_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/AvgPool.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/AvgPool3D.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/avg_pool_backprop_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/AvgPool3DGrad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/AvgPoolGrad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/BatchMatMul.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/batchnorm_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/batchnorm_packed_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/BatchNorm.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/slice_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/slice_packed_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Slice.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/BatchToSpaceND.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Bincount.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/NotEqual.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Real.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Cast.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernel_utils/int.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Ceil.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/clip_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/clip_packed_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ClipByValue.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/complex_abs_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ComplexAbs.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/concat_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/concat_packed_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Imag.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Concat_impl.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Concat.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/conv_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/im2col_packed_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Conv2D_impl.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Conv2D.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/conv_backprop_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Conv2DBackpropFilter.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Conv2DBackpropInput.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Conv3D.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Conv3DBackpropFilterV2.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Conv3DBackpropInputV2.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Cos.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Cosh.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/crop_and_resize_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/CropAndResize.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/cumsum_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Cumsum.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/DenseBincount.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/depth_to_space_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/DepthToSpace.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/conv_gpu_depthwise.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/conv_packed_gpu_depthwise.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/DepthwiseConv2dNative.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/conv_backprop_gpu_depthwise.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/DepthwiseConv2dNativeBackpropFilter.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/DepthwiseConv2dNativeBackpropInput.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/diag_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Diag.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/dilation_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Dilation2D.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Einsum.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Elu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/EluGrad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Equal.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Erf.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Exp.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ExpandDims.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Expm1.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/fft_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/FFT_impl.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/FFT.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/fill_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Fill.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/flip_left_right_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/FlipLeftRight.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Floor.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/FloorDiv.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/FromPixels_utils/from_pixels_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/FromPixels_utils/from_pixels_packed_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/FromPixels.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/FusedConv2D.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/FusedDepthwiseConv2D.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/gather_nd_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/GatherNd.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/gather_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/GatherV2.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Greater.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/GreaterEqual.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/IFFT.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/IsFinite.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/IsInf.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/IsNaN.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Less.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/LessEqual.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/LinSpace.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Log.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Log1p.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/LogicalAnd.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/LogicalNot.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/LogicalOr.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/lrn_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/lrn_packed_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/LRN.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/lrn_grad_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/LRNGrad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Max.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Max_impl.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Maximum.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/MaxPool.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/MaxPool3D.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/max_pool_backprop_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/MaxPool3DGrad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/MaxPoolGrad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/MaxPoolWithArgmax.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/MaxPoolWithArgmax_impl.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Mean.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Mean_impl.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Min.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Minimum.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/mirror_pad_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/mirror_pad_packed_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/MirrorPad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Mod.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/multinomial_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/RealDiv.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Sub.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Softmax.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Multinomial.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Neg.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/NonMaxSuppressionV3.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/NonMaxSuppressionV4.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/NonMaxSuppressionV5.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/onehot_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/OneHot.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ZerosLike.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/OnesLike.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Pack.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/pad_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/pad_packed_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/PadV2.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Pow.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Prod.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Range.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Reciprocal.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Relu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Relu6.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/resize_bilinear_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/resize_bilinear_packed_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ResizeBilinear.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/resize_bilinear_backprop_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ResizeBilinearGrad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/resize_nearest_neighbor_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/resize_nearest_neighbor_packed_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ResizeNearestNeighbor.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/resize_nearest_neighbor_backprop_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ResizeNearestNeighborGrad.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/reverse_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/reverse_packed_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Reverse.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/rotate_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/RotateWithOffset.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Round.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Rsqrt.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/scatter_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/ScatterNd.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/select_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Select.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Selu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Sigmoid.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Sign.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Sin.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Sinh.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Softplus.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/SpaceToBatchND.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/SparseFillEmptyRows.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/SparseReshape.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/SparseToDense.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/SplitV.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Sqrt.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Square.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/SquaredDifference.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Step.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/strided_slice_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/StridedSlice.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Tan.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Tanh.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/tile_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Tile.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/TopK.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/transform_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Transform.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Unique.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/Unpack.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/segment_gpu.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/kernels/UnsortedSegmentSum.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/register_all_kernels.js","webpack://dfd/./node_modules/@tensorflow/tfjs/dist/version.js","webpack://dfd/./node_modules/@tensorflow/tfjs/dist/index.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-cpu/dist/version.js","webpack://dfd/./node_modules/@tensorflow/tfjs-backend-webgl/dist/version.js","webpack://dfd/./node_modules/ajv/lib/compile/equal.js","webpack://dfd/./node_modules/astral-regex/index.js","webpack://dfd/./src/config/config.js","webpack://dfd/./src/core/concat.js","webpack://dfd/./src/core/frame.js","webpack://dfd/./src/core/generic.js","webpack://dfd/./src/core/groupby.js","webpack://dfd/./src/core/indexing.js","webpack://dfd/./src/core/series.js","webpack://dfd/./src/core/strings.js","webpack://dfd/./src/core/timeseries.js","webpack://dfd/./src/core/utils.js","webpack://dfd/./src/io/reader.js","webpack://dfd/./src/core/merge.js","webpack://dfd/./src/preprocessing/encodings.js","webpack://dfd/./src/preprocessing/scalers.js","webpack://dfd/./src/core/date_range.js","webpack://dfd/./src/core/get_dummies.js","webpack://dfd/./src/index.js","webpack://dfd/./src/plotting/plot.js","webpack://dfd/./node_modules/complex.js/complex.js","webpack://dfd/./node_modules/decimal.js/decimal.js","webpack://dfd/./node_modules/fast-deep-equal/index.js","webpack://dfd/./node_modules/fraction.js/fraction.js","webpack://dfd/./node_modules/is-fullwidth-code-point/index.js","webpack://dfd/./node_modules/javascript-natural-sort/naturalSort.js","webpack://dfd/./node_modules/lodash/_DataView.js","webpack://dfd/./node_modules/lodash/_Hash.js","webpack://dfd/./node_modules/lodash/_ListCache.js","webpack://dfd/./node_modules/lodash/_Map.js","webpack://dfd/./node_modules/lodash/_MapCache.js","webpack://dfd/./node_modules/lodash/_Promise.js","webpack://dfd/./node_modules/lodash/_Set.js","webpack://dfd/./node_modules/lodash/_SetCache.js","webpack://dfd/./node_modules/lodash/_Stack.js","webpack://dfd/./node_modules/lodash/_Symbol.js","webpack://dfd/./node_modules/lodash/_Uint8Array.js","webpack://dfd/./node_modules/lodash/_WeakMap.js","webpack://dfd/./node_modules/lodash/_arrayEach.js","webpack://dfd/./node_modules/lodash/_arrayFilter.js","webpack://dfd/./node_modules/lodash/_arrayLikeKeys.js","webpack://dfd/./node_modules/lodash/_arrayMap.js","webpack://dfd/./node_modules/lodash/_arrayPush.js","webpack://dfd/./node_modules/lodash/_arraySome.js","webpack://dfd/./node_modules/lodash/_asciiSize.js","webpack://dfd/./node_modules/lodash/_asciiToArray.js","webpack://dfd/./node_modules/lodash/_assignValue.js","webpack://dfd/./node_modules/lodash/_assocIndexOf.js","webpack://dfd/./node_modules/lodash/_baseAssign.js","webpack://dfd/./node_modules/lodash/_baseAssignIn.js","webpack://dfd/./node_modules/lodash/_baseAssignValue.js","webpack://dfd/./node_modules/lodash/_baseClone.js","webpack://dfd/./node_modules/lodash/_baseCreate.js","webpack://dfd/./node_modules/lodash/_baseExtremum.js","webpack://dfd/./node_modules/lodash/_baseFindIndex.js","webpack://dfd/./node_modules/lodash/_baseFlatten.js","webpack://dfd/./node_modules/lodash/_baseFor.js","webpack://dfd/./node_modules/lodash/_baseForOwn.js","webpack://dfd/./node_modules/lodash/_baseGet.js","webpack://dfd/./node_modules/lodash/_baseGetAllKeys.js","webpack://dfd/./node_modules/lodash/_baseGetTag.js","webpack://dfd/./node_modules/lodash/_baseGt.js","webpack://dfd/./node_modules/lodash/_baseHasIn.js","webpack://dfd/./node_modules/lodash/_baseIndexOf.js","webpack://dfd/./node_modules/lodash/_baseIsArguments.js","webpack://dfd/./node_modules/lodash/_baseIsEqual.js","webpack://dfd/./node_modules/lodash/_baseIsEqualDeep.js","webpack://dfd/./node_modules/lodash/_baseIsMap.js","webpack://dfd/./node_modules/lodash/_baseIsMatch.js","webpack://dfd/./node_modules/lodash/_baseIsNaN.js","webpack://dfd/./node_modules/lodash/_baseIsNative.js","webpack://dfd/./node_modules/lodash/_baseIsRegExp.js","webpack://dfd/./node_modules/lodash/_baseIsSet.js","webpack://dfd/./node_modules/lodash/_baseIsTypedArray.js","webpack://dfd/./node_modules/lodash/_baseIteratee.js","webpack://dfd/./node_modules/lodash/_baseKeys.js","webpack://dfd/./node_modules/lodash/_baseKeysIn.js","webpack://dfd/./node_modules/lodash/_baseMatches.js","webpack://dfd/./node_modules/lodash/_baseMatchesProperty.js","webpack://dfd/./node_modules/lodash/_baseProperty.js","webpack://dfd/./node_modules/lodash/_basePropertyDeep.js","webpack://dfd/./node_modules/lodash/_baseSlice.js","webpack://dfd/./node_modules/lodash/_baseTimes.js","webpack://dfd/./node_modules/lodash/_baseToString.js","webpack://dfd/./node_modules/lodash/_baseTrim.js","webpack://dfd/./node_modules/lodash/_baseUnary.js","webpack://dfd/./node_modules/lodash/_baseValues.js","webpack://dfd/./node_modules/lodash/_cacheHas.js","webpack://dfd/./node_modules/lodash/_castFunction.js","webpack://dfd/./node_modules/lodash/_castPath.js","webpack://dfd/./node_modules/lodash/_castSlice.js","webpack://dfd/./node_modules/lodash/_charsEndIndex.js","webpack://dfd/./node_modules/lodash/_cloneArrayBuffer.js","webpack://dfd/./node_modules/lodash/_cloneBuffer.js","webpack://dfd/./node_modules/lodash/_cloneDataView.js","webpack://dfd/./node_modules/lodash/_cloneRegExp.js","webpack://dfd/./node_modules/lodash/_cloneSymbol.js","webpack://dfd/./node_modules/lodash/_cloneTypedArray.js","webpack://dfd/./node_modules/lodash/_copyArray.js","webpack://dfd/./node_modules/lodash/_copyObject.js","webpack://dfd/./node_modules/lodash/_copySymbols.js","webpack://dfd/./node_modules/lodash/_copySymbolsIn.js","webpack://dfd/./node_modules/lodash/_coreJsData.js","webpack://dfd/./node_modules/lodash/_createBaseFor.js","webpack://dfd/./node_modules/lodash/_defineProperty.js","webpack://dfd/./node_modules/lodash/_equalArrays.js","webpack://dfd/./node_modules/lodash/_equalByTag.js","webpack://dfd/./node_modules/lodash/_equalObjects.js","webpack://dfd/./node_modules/lodash/_freeGlobal.js","webpack://dfd/./node_modules/lodash/_getAllKeys.js","webpack://dfd/./node_modules/lodash/_getAllKeysIn.js","webpack://dfd/./node_modules/lodash/_getMapData.js","webpack://dfd/./node_modules/lodash/_getMatchData.js","webpack://dfd/./node_modules/lodash/_getNative.js","webpack://dfd/./node_modules/lodash/_getPrototype.js","webpack://dfd/./node_modules/lodash/_getRawTag.js","webpack://dfd/./node_modules/lodash/_getSymbols.js","webpack://dfd/./node_modules/lodash/_getSymbolsIn.js","webpack://dfd/./node_modules/lodash/_getTag.js","webpack://dfd/./node_modules/lodash/_getValue.js","webpack://dfd/./node_modules/lodash/_hasPath.js","webpack://dfd/./node_modules/lodash/_hasUnicode.js","webpack://dfd/./node_modules/lodash/_hashClear.js","webpack://dfd/./node_modules/lodash/_hashDelete.js","webpack://dfd/./node_modules/lodash/_hashGet.js","webpack://dfd/./node_modules/lodash/_hashHas.js","webpack://dfd/./node_modules/lodash/_hashSet.js","webpack://dfd/./node_modules/lodash/_initCloneArray.js","webpack://dfd/./node_modules/lodash/_initCloneByTag.js","webpack://dfd/./node_modules/lodash/_initCloneObject.js","webpack://dfd/./node_modules/lodash/_isFlattenable.js","webpack://dfd/./node_modules/lodash/_isIndex.js","webpack://dfd/./node_modules/lodash/_isKey.js","webpack://dfd/./node_modules/lodash/_isKeyable.js","webpack://dfd/./node_modules/lodash/_isMasked.js","webpack://dfd/./node_modules/lodash/_isPrototype.js","webpack://dfd/./node_modules/lodash/_isStrictComparable.js","webpack://dfd/./node_modules/lodash/_listCacheClear.js","webpack://dfd/./node_modules/lodash/_listCacheDelete.js","webpack://dfd/./node_modules/lodash/_listCacheGet.js","webpack://dfd/./node_modules/lodash/_listCacheHas.js","webpack://dfd/./node_modules/lodash/_listCacheSet.js","webpack://dfd/./node_modules/lodash/_mapCacheClear.js","webpack://dfd/./node_modules/lodash/_mapCacheDelete.js","webpack://dfd/./node_modules/lodash/_mapCacheGet.js","webpack://dfd/./node_modules/lodash/_mapCacheHas.js","webpack://dfd/./node_modules/lodash/_mapCacheSet.js","webpack://dfd/./node_modules/lodash/_mapToArray.js","webpack://dfd/./node_modules/lodash/_matchesStrictComparable.js","webpack://dfd/./node_modules/lodash/_memoizeCapped.js","webpack://dfd/./node_modules/lodash/_nativeCreate.js","webpack://dfd/./node_modules/lodash/_nativeKeys.js","webpack://dfd/./node_modules/lodash/_nativeKeysIn.js","webpack://dfd/./node_modules/lodash/_nodeUtil.js","webpack://dfd/./node_modules/lodash/_objectToString.js","webpack://dfd/./node_modules/lodash/_overArg.js","webpack://dfd/./node_modules/lodash/_root.js","webpack://dfd/./node_modules/lodash/_setCacheAdd.js","webpack://dfd/./node_modules/lodash/_setCacheHas.js","webpack://dfd/./node_modules/lodash/_setToArray.js","webpack://dfd/./node_modules/lodash/_stackClear.js","webpack://dfd/./node_modules/lodash/_stackDelete.js","webpack://dfd/./node_modules/lodash/_stackGet.js","webpack://dfd/./node_modules/lodash/_stackHas.js","webpack://dfd/./node_modules/lodash/_stackSet.js","webpack://dfd/./node_modules/lodash/_strictIndexOf.js","webpack://dfd/./node_modules/lodash/_stringSize.js","webpack://dfd/./node_modules/lodash/_stringToArray.js","webpack://dfd/./node_modules/lodash/_stringToPath.js","webpack://dfd/./node_modules/lodash/_toKey.js","webpack://dfd/./node_modules/lodash/_toSource.js","webpack://dfd/./node_modules/lodash/_trimmedEndIndex.js","webpack://dfd/./node_modules/lodash/_unicodeSize.js","webpack://dfd/./node_modules/lodash/_unicodeToArray.js","webpack://dfd/./node_modules/lodash/cloneDeep.js","webpack://dfd/./node_modules/lodash/eq.js","webpack://dfd/./node_modules/lodash/flatten.js","webpack://dfd/./node_modules/lodash/get.js","webpack://dfd/./node_modules/lodash/hasIn.js","webpack://dfd/./node_modules/lodash/identity.js","webpack://dfd/./node_modules/lodash/isArguments.js","webpack://dfd/./node_modules/lodash/isArray.js","webpack://dfd/./node_modules/lodash/isArrayLike.js","webpack://dfd/./node_modules/lodash/isBoolean.js","webpack://dfd/./node_modules/lodash/isBuffer.js","webpack://dfd/./node_modules/lodash/isFunction.js","webpack://dfd/./node_modules/lodash/isLength.js","webpack://dfd/./node_modules/lodash/isMap.js","webpack://dfd/./node_modules/lodash/isNumber.js","webpack://dfd/./node_modules/lodash/isObject.js","webpack://dfd/./node_modules/lodash/isObjectLike.js","webpack://dfd/./node_modules/lodash/isRegExp.js","webpack://dfd/./node_modules/lodash/isSet.js","webpack://dfd/./node_modules/lodash/isString.js","webpack://dfd/./node_modules/lodash/isSymbol.js","webpack://dfd/./node_modules/lodash/isTypedArray.js","webpack://dfd/./node_modules/lodash/isUndefined.js","webpack://dfd/./node_modules/lodash/keys.js","webpack://dfd/./node_modules/lodash/keysIn.js","webpack://dfd/./node_modules/lodash/mapValues.js","webpack://dfd/./node_modules/lodash/max.js","webpack://dfd/./node_modules/lodash/memoize.js","webpack://dfd/./node_modules/lodash/property.js","webpack://dfd/./node_modules/lodash/stubArray.js","webpack://dfd/./node_modules/lodash/stubFalse.js","webpack://dfd/./node_modules/lodash/times.js","webpack://dfd/./node_modules/lodash/toFinite.js","webpack://dfd/./node_modules/lodash/toInteger.js","webpack://dfd/./node_modules/lodash/toNumber.js","webpack://dfd/./node_modules/lodash/toString.js","webpack://dfd/./node_modules/lodash/trimEnd.js","webpack://dfd/./node_modules/lodash/truncate.js","webpack://dfd/./node_modules/lodash/values.js","webpack://dfd/./node_modules/mathjs/es/core/config.js","webpack://dfd/./node_modules/mathjs/es/entry/configReadonly.js","webpack://dfd/./node_modules/mathjs/es/core/function/config.js","webpack://dfd/./node_modules/mathjs/es/utils/object.js","webpack://dfd/./node_modules/mathjs/es/utils/factory.js","webpack://dfd/./node_modules/mathjs/es/type/resultset/ResultSet.js","webpack://dfd/./node_modules/mathjs/es/type/complex/Complex.js","webpack://dfd/./node_modules/mathjs/es/utils/function.js","webpack://dfd/./node_modules/mathjs/es/utils/bignumber/constants.js","webpack://dfd/./node_modules/mathjs/es/plain/number/constants.js","webpack://dfd/./node_modules/mathjs/es/type/bignumber/BigNumber.js","webpack://dfd/./node_modules/mathjs/es/type/matrix/Matrix.js","webpack://dfd/./node_modules/mathjs/es/type/unit/physicalConstants.js","webpack://dfd/./node_modules/mathjs/es/type/fraction/Fraction.js","webpack://dfd/./node_modules/mathjs/es/utils/bignumber/formatter.js","webpack://dfd/./node_modules/mathjs/es/utils/string.js","webpack://dfd/./node_modules/mathjs/es/error/DimensionError.js","webpack://dfd/./node_modules/mathjs/es/error/IndexError.js","webpack://dfd/./node_modules/mathjs/es/utils/array.js","webpack://dfd/./node_modules/mathjs/es/type/matrix/DenseMatrix.js","webpack://dfd/./node_modules/mathjs/es/core/function/typed.js","webpack://dfd/./node_modules/mathjs/es/utils/collection.js","webpack://dfd/./node_modules/mathjs/es/function/utils/isInteger.js","webpack://dfd/./node_modules/mathjs/es/function/utils/isNumeric.js","webpack://dfd/./node_modules/mathjs/es/function/utils/isNaN.js","webpack://dfd/./node_modules/mathjs/es/utils/bignumber/nearlyEqual.js","webpack://dfd/./node_modules/mathjs/es/function/relational/equalScalar.js","webpack://dfd/./node_modules/mathjs/es/utils/complex.js","webpack://dfd/./node_modules/mathjs/es/type/number.js","webpack://dfd/./node_modules/mathjs/es/plain/number/arithmetic.js","webpack://dfd/./node_modules/mathjs/es/function/arithmetic/unaryPlus.js","webpack://dfd/./node_modules/mathjs/es/function/matrix/apply.js","webpack://dfd/./node_modules/mathjs/es/function/arithmetic/cube.js","webpack://dfd/./node_modules/mathjs/es/function/arithmetic/multiplyScalar.js","webpack://dfd/./node_modules/mathjs/es/function/string/baseUtils.js","webpack://dfd/./node_modules/mathjs/es/function/special/erf.js","webpack://dfd/./node_modules/mathjs/es/function/string/oct.js","webpack://dfd/./node_modules/mathjs/es/function/probability/randomInt.js","webpack://dfd/./node_modules/mathjs/es/type/fraction/function/fraction.js","webpack://dfd/./node_modules/mathjs/es/function/arithmetic/unaryMinus.js","webpack://dfd/./node_modules/mathjs/es/function/arithmetic/addScalar.js","webpack://dfd/./node_modules/mathjs/es/function/arithmetic/sqrt.js","webpack://dfd/./node_modules/mathjs/es/function/complex/conj.js","webpack://dfd/./node_modules/mathjs/es/function/statistics/mode.js","webpack://dfd/./node_modules/mathjs/es/function/string/bin.js","webpack://dfd/./node_modules/mathjs/es/function/probability/random.js","webpack://dfd/./node_modules/mathjs/es/type/matrix/SparseMatrix.js","webpack://dfd/./node_modules/mathjs/es/type/matrix/function/matrix.js","webpack://dfd/./node_modules/mathjs/es/type/matrix/utils/algorithm01.js","webpack://dfd/./node_modules/mathjs/es/type/matrix/utils/algorithm04.js","webpack://dfd/./node_modules/mathjs/es/type/matrix/utils/algorithm10.js","webpack://dfd/./node_modules/mathjs/es/type/matrix/utils/algorithm13.js","webpack://dfd/./node_modules/mathjs/es/type/matrix/utils/algorithm14.js","webpack://dfd/./node_modules/mathjs/es/type/matrix/utils/algorithm03.js","webpack://dfd/./node_modules/mathjs/es/type/matrix/utils/algorithm05.js","webpack://dfd/./node_modules/mathjs/es/type/matrix/utils/algorithm11.js","webpack://dfd/./node_modules/mathjs/es/type/matrix/utils/algorithm12.js","webpack://dfd/./node_modules/mathjs/es/type/matrix/utils/algorithm07.js","webpack://dfd/./node_modules/mathjs/es/function/matrix/identity.js","webpack://dfd/./node_modules/mathjs/es/utils/noop.js","webpack://dfd/./node_modules/mathjs/es/function/matrix/size.js","webpack://dfd/./node_modules/mathjs/es/function/string/hex.js","webpack://dfd/./node_modules/mathjs/es/function/arithmetic/round.js","webpack://dfd/./node_modules/mathjs/es/function/relational/compare.js","webpack://dfd/./node_modules/mathjs/es/function/relational/smaller.js","webpack://dfd/./node_modules/mathjs/es/function/relational/larger.js","webpack://dfd/./node_modules/mathjs/es/function/relational/unequal.js","webpack://dfd/./node_modules/mathjs/es/type/matrix/FibonacciHeap.js","webpack://dfd/./node_modules/mathjs/es/function/arithmetic/add.js","webpack://dfd/./node_modules/mathjs/es/function/matrix/dot.js","webpack://dfd/./node_modules/mathjs/es/function/arithmetic/abs.js","webpack://dfd/./node_modules/mathjs/es/function/arithmetic/multiply.js","webpack://dfd/./node_modules/mathjs/es/error/ArgumentsError.js","webpack://dfd/./node_modules/mathjs/es/function/relational/equalText.js","webpack://dfd/./node_modules/mathjs/es/function/matrix/partitionSelect.js","webpack://dfd/./node_modules/mathjs/es/type/bignumber/function/bignumber.js","webpack://dfd/./node_modules/mathjs/es/function/utils/numeric.js","webpack://dfd/./node_modules/mathjs/es/function/statistics/utils/improveErrorMessage.js","webpack://dfd/./node_modules/mathjs/es/function/arithmetic/ceil.js","webpack://dfd/./node_modules/mathjs/es/function/arithmetic/subtract.js","webpack://dfd/./node_modules/mathjs/es/function/matrix/cross.js","webpack://dfd/./node_modules/mathjs/es/function/relational/equal.js","webpack://dfd/./node_modules/mathjs/es/function/arithmetic/divideScalar.js","webpack://dfd/./node_modules/mathjs/es/type/matrix/Spa.js","webpack://dfd/./node_modules/mathjs/es/function/algebra/decomposition/lup.js","webpack://dfd/./node_modules/mathjs/es/function/matrix/det.js","webpack://dfd/./node_modules/mathjs/es/function/matrix/inv.js","webpack://dfd/./node_modules/mathjs/es/function/arithmetic/divide.js","webpack://dfd/./node_modules/mathjs/es/function/statistics/variance.js","webpack://dfd/./node_modules/mathjs/es/function/statistics/std.js","webpack://dfd/./node_modules/mathjs/es/function/statistics/median.js","webpack://dfd/./node_modules/mathjs/es/entry/pureFunctionsAny.generated.js","webpack://dfd/./node_modules/mathjs/es/plain/number/probability.js","webpack://dfd/./node_modules/mathjs/es/plain/number/trigonometry.js","webpack://dfd/./node_modules/mathjs/es/plain/number/utils.js","webpack://dfd/./node_modules/mathjs/es/utils/is.js","webpack://dfd/./node_modules/mathjs/es/utils/number.js","webpack://dfd/./node_modules/mathjs/es/utils/product.js","webpack://dfd/./node_modules/regenerator-runtime/runtime.js","webpack://dfd/./node_modules/seed-random/index.js","webpack://dfd/./node_modules/seedrandom/index.js","webpack://dfd/./node_modules/seedrandom/lib/alea.js","webpack://dfd/./node_modules/seedrandom/lib/tychei.js","webpack://dfd/./node_modules/seedrandom/lib/xor128.js","webpack://dfd/./node_modules/seedrandom/lib/xor4096.js","webpack://dfd/./node_modules/seedrandom/lib/xorshift7.js","webpack://dfd/./node_modules/seedrandom/lib/xorwow.js","webpack://dfd/./node_modules/seedrandom/seedrandom.js","webpack://dfd/./node_modules/slice-ansi/index.js","webpack://dfd/./node_modules/slice-ansi/node_modules/ansi-styles/index.js","webpack://dfd/./node_modules/slice-ansi/node_modules/color-convert/conversions.js","webpack://dfd/./node_modules/slice-ansi/node_modules/color-convert/index.js","webpack://dfd/./node_modules/slice-ansi/node_modules/color-convert/route.js","webpack://dfd/./node_modules/slice-ansi/node_modules/color-name/index.js","webpack://dfd/./node_modules/table/dist/alignString.js","webpack://dfd/./node_modules/table/dist/alignTableData.js","webpack://dfd/./node_modules/table/dist/calculateCellHeight.js","webpack://dfd/./node_modules/table/dist/calculateCellWidthIndex.js","webpack://dfd/./node_modules/table/dist/calculateMaximumColumnWidthIndex.js","webpack://dfd/./node_modules/table/dist/calculateRowHeightIndex.js","webpack://dfd/./node_modules/table/dist/createStream.js","webpack://dfd/./node_modules/table/dist/drawBorder.js","webpack://dfd/./node_modules/table/dist/drawRow.js","webpack://dfd/./node_modules/table/dist/drawTable.js","webpack://dfd/./node_modules/table/dist/getBorderCharacters.js","webpack://dfd/./node_modules/table/dist/index.js","webpack://dfd/./node_modules/table/dist/makeConfig.js","webpack://dfd/./node_modules/table/dist/makeStreamConfig.js","webpack://dfd/./node_modules/table/dist/mapDataUsingRowHeightIndex.js","webpack://dfd/./node_modules/table/dist/padTableData.js","webpack://dfd/./node_modules/table/dist/stringifyTableData.js","webpack://dfd/./node_modules/table/dist/table.js","webpack://dfd/./node_modules/table/dist/truncateTableData.js","webpack://dfd/./node_modules/table/dist/validateConfig.js","webpack://dfd/./node_modules/table/dist/validateTableData.js","webpack://dfd/./node_modules/table/dist/wrapCell.js","webpack://dfd/./node_modules/table/dist/wrapString.js","webpack://dfd/./node_modules/table/dist/wrapWord.js","webpack://dfd/./node_modules/table/node_modules/ansi-regex/index.js","webpack://dfd/./node_modules/table/node_modules/emoji-regex/index.js","webpack://dfd/./node_modules/table/node_modules/string-width/index.js","webpack://dfd/./node_modules/table/node_modules/strip-ansi/index.js","webpack://dfd/./node_modules/typed-function/typed-function.js","webpack://dfd/./node_modules/xlsx/dist/cpexcel.js","webpack://dfd/./node_modules/xlsx/jszip.js","webpack://dfd/./node_modules/xlsx/xlsx.js","webpack://dfd/webpack/bootstrap","webpack://dfd/webpack/startup","webpack://dfd/webpack/runtime/amd define","webpack://dfd/webpack/runtime/amd options","webpack://dfd/webpack/runtime/compat get default export","webpack://dfd/webpack/runtime/define property getters","webpack://dfd/webpack/runtime/global","webpack://dfd/webpack/runtime/hasOwnProperty shorthand","webpack://dfd/webpack/runtime/make namespace object","webpack://dfd/webpack/runtime/node module decorator"],"names":["module","exports","arr","len","length","i","arr2","Array","isArray","arrayLikeToArray","self","ReferenceError","asyncGeneratorStep","gen","resolve","reject","_next","_throw","key","arg","info","value","error","done","Promise","then","fn","this","args","arguments","apply","err","undefined","instance","Constructor","TypeError","_defineProperties","target","props","descriptor","enumerable","configurable","writable","Object","defineProperty","protoProps","staticProps","prototype","superPropBase","_get","property","receiver","Reflect","get","base","desc","getOwnPropertyDescriptor","call","_getPrototypeOf","o","setPrototypeOf","getPrototypeOf","__proto__","subClass","superClass","create","constructor","iter","Symbol","iterator","from","_arr","_n","_d","_e","_s","_i","next","push","_typeof","assertThisInitialized","_setPrototypeOf","p","arrayWithHoles","iterableToArrayLimit","unsupportedIterableToArray","nonIterableRest","object","hasOwnProperty","arrayWithoutHoles","iterableToArray","nonIterableSpread","obj","minLen","n","toString","slice","name","test","DataStorage","backend","dataMover","data","WeakMap","dataIdsCount","dataId","has","moveData","set","delete","KernelBackend","notYetImplemented","f","force","values","shape","dtype","refCount","floatPrecision","kernelName","Error","array","counter","temp","index","Math","random","shuffleCombo","array2","temp2","clamp","min","x","max","nearestLargerEven","val","sum","randUniform","a","b","r","distSquared","result","diff","Number","assert","expr","msg","assertShapesMatch","shapeA","shapeB","errorMessagePrefix","arraysEqual","assertNonNull","flatten","skipTypedArray","isTypedArray","sizeFromShape","size","isScalarShape","n1","n2","isInt","tanh","Infinity","e2x","exp","sizeToSquarishShape","width","ceil","sqrt","createShuffledIndices","shuffledIndices","Uint32Array","rightPad","repeat","repeatedTry","checkFn","delayFn","maxCounter","tryCount","tryFn","nextBackoff","setTimeout","inferFromImplicitShape","shapeProd","implicitIdx","newShape","parseAxisParam","axis","rank","map","s","concat","every","ax","squeezeShape","keptDims","isEmptyArray","axes","sort","j","getTypedArrayFromDType","Float32Array","Int32Array","Uint8Array","getArrayFromDType","checkConversionForErrors","vals","num","isNaN","isFinite","isValidDtype","hasEncodingLoss","oldType","newType","bytesPerElement","bytesFromStringArray","bytes","forEach","isString","String","isBoolean","isNumber","inferDtype","isFunction","nearestDivisor","start","computeStrides","strides","createNestedArray","offset","isComplex","ret","d","rest","reduce","acc","c","toNestedArray","makeOnesTypedArray","makeZerosTypedArray","makeZerosNestedTypedArray","prev","curr","assertNonNegativeIntegerDimensions","dimSize","isInteger","locToIndex","locs","indexToLoc","floor","isPromise","Environment","global","flags","flagRegistry","urlFlags","getQueryParams","populateURLFlags","platformName","platform","console","warn","flagName","evaluationFn","setHook","flagValue","evaluateFlag","assign","location","search","urlParams","split","keyValue","toLowerCase","parseValue","queryString","params","replace","t","decodeURIComponent","decodeParam","join","ENV","globalNameSpace","getGlobalNamespace","ns","window","g","process","getGlobal","init","globalMap","_tfGlobals","Map","getGlobalMap","singleton","Abs","Acos","Acosh","Add","AddN","All","Any","ArgMax","ArgMin","Asin","Asinh","Atan","Atanh","Atan2","AvgPool","AvgPoolGrad","AvgPool3D","AvgPool3DGrad","BatchMatMul","BatchToSpaceND","Bincount","BroadcastTo","Cast","Ceil","ClipByValue","Complex","ComplexAbs","Concat","Conv2D","Conv2DBackpropFilter","Conv2DBackpropInput","Conv3D","Conv3DBackpropFilterV2","Conv3DBackpropInputV2","Cos","Cosh","Cumsum","CropAndResize","DenseBincount","DepthToSpace","DepthwiseConv2dNative","DepthwiseConv2dNativeBackpropFilter","DepthwiseConv2dNativeBackpropInput","Diag","Dilation2D","Dilation2DBackpropInput","Dilation2DBackpropFilter","RealDiv","Einsum","Elu","EluGrad","Erf","Equal","Exp","ExpandDims","Expm1","FFT","Fill","FlipLeftRight","Floor","FloorDiv","FusedBatchNorm","GatherV2","GatherNd","Greater","GreaterEqual","Identity","IFFT","Imag","IsFinite","IsInf","IsNan","LeakyRelu","Less","LessEqual","LinSpace","Log","Log1p","LogicalAnd","LogicalNot","LogicalOr","LogSoftmax","LRN","LRNGrad","Max","Maximum","MaxPool","MaxPoolGrad","MaxPool3D","MaxPool3DGrad","MaxPoolWithArgmax","Mean","Min","Minimum","MirrorPad","Mod","Multinomial","Multiply","Neg","NotEqual","NonMaxSuppressionV3","NonMaxSuppressionV4","NonMaxSuppressionV5","OnesLike","OneHot","Pack","PadV2","Pool","Pow","Prelu","Prod","Range","Real","Reciprocal","Relu","Reshape","ResizeNearestNeighbor","ResizeNearestNeighborGrad","ResizeBilinear","ResizeBilinearGrad","Relu6","Reverse","Round","Rsqrt","ScatterNd","Select","Selu","Slice","Sin","Sinh","Sign","Sigmoid","Softplus","Sqrt","Sum","SpaceToBatchND","SplitV","Softmax","SparseFillEmptyRows","SparseReshape","SparseToDense","SquaredDifference","Square","StridedSlice","Sub","Tan","Tanh","Tile","TopK","Transform","Transpose","Unique","Unpack","UnsortedSegmentSum","ZerosLike","Step","FromPixels","RotateWithOffset","_FusedMatMul","FusedConv2D","FusedDepthwiseConv2D","kernelRegistry","gradRegistry","getKernel","backendName","makeKey","getGradient","getKernelsForBackend","it","entries","config","registerKernel","registerGradient","getBool","unregisterKernel","unregisterGradient","copyRegisteredKernels","registeredBackendName","newBackendName","kernelConfig","createScalarValue","encodeString","toTypedArray","noConversionNeeded","bool","round","now","path","requestInits","fetch","encoding","encode","decodeString","decode","Profiler","backendTimer","logger","Logger","inputs","outputs","holdResultWrapperFn","timer","timerAvailable","time","output","dataSync","kernelMs","tensorVals","checkComputationForErrors","timeMs","timing","extraInfo","getExtraProfileInfo","kernelProfile","all","valueContainer","logKernelProfile","paddedName","inputShapesDescription","input","inputShape","inputRank","log","tensorToString","verbose","padPerCol","numCols","fill","valuesOrTuples","createComplexTuples","row","valToString","computeMaxSizePerColumn","valsLines","subTensorToString","lines","l","pad","valStr","parseFloat","toFixed","boolNumToString","v","isLast","storagePerElement","firstValsSize","firstVals","lastVals","subshape","substrides","stride","end","sep","newLineSep","complexTuples","TensorBuffer","loc","trackerFn","makeTensor","opHandler","deprecationWarningFn","Tensor","id","kept","isDisposedInternal","rankType","buffer","throwIfDisposed","read","_a","readSync","isDisposed","disposeTensor","print","clone","cast","trainable","makeVariable","getGlobalTensorClass","hasInstance","Variable","initialValue","tensorId","super","newValue","incRef","disposeVariable","Rank","UpcastInt32AndMap","UpcastBoolAndMap","UpcastFloat32AndMap","UpcastComplex64AndMap","Function","upcastTypeMap","upcastType","typeA","typeB","sumOutType","type","makeTypesMatch","assertTypesMatch","isTensorInList","tensor","tensorList","some","getTensorsInContainer","list","walkTensorContainer","Set","container","seen","iterable","k","add","isRegisteredKernelInvocation","kernelInvocation","EngineState","registeredVariables","nextTapeNodeId","numBytes","numTensors","numStringTensors","numDataBuffers","gradientDepth","kernelDepth","scopeStack","numDataMovesStack","nextScopeId","tensorInfo","profiling","activeProfile","newBytes","newTensors","peakBytes","kernels","variableName","dispose","Engine","registry","registryFactory","pendingBackendInitId","state","pendingBackendInit","backendInstance","sortedBackends","getSortedBackends","initializeBackend","success","setBackend","asyncInit","initializeBackendsAndReturnBest","keys","factory","priority","setupRegisteredKernels","profiler","kernel","setupFunc","disposeFunc","registryFactoryEntry","promiseId","catch","stack","message","disposeRegisteredKernels","srcBackend","disposeData","move","shouldCheckForMemLeaks","nameOrFn","scopedRun","startScope","endScope","res","ex","nextTensorId","nextVariableId","y","ENGINE","runKernel","addTapeNode","activeScope","dy","gradInputs","attrs","runKernelFunc","numDataIdsBefore","outInfos","numDataIdsAfter","numDataIds","numOutputDataIds","numMoves","dataIdsLeaked","kernelParams","saved","isTapeOn","startingBytecount","startingNumTensors","kernelFunc","out","kernelOrScopeName","checkKernelForMemLeak","outTensors","outInfo","makeTensorFromDataId","tensorsToSave","getTensorsForGradient","saveTensorsForBackwardMode","forwardFunc","saveFunc","tensors","keep","tidy","outs","backwardsFunc","profileKernel","bytesAdded","totalBytesSnapshot","tensorsAdded","totalTensorsSnapshot","inputShapes","outputShapes","item","kernelTimeMs","gradConfig","inputsToSave","outputsToSave","inputTensorsToSave","saveAllInputs","inputName","outputTensorsToSave","filter","_","backendVals","write","trackTensor","track","removeDataId","varName","memory","unreliable","reasons","query","startBytes","startNumTensors","gradientsFunc","tapeNode","gradFunc","gradient","dys","activeTape","scopeInfo","tensorsToTrackInParent","tensorsToTrackInParentSet","oldScope","pop","scopeId","xs","allowNoGradients","startTape","endTape","filteredTape","tape","tensorsFromX","nodesFromX","node","nodeInputs","anyInputFromX","tensorsLeadToY","nodesToY","prunedInputs","nodeInput","prunedNode","getFilteredNodesXToY","accumulatedGradientMap","ones","tensorAccumulatedGradientMap","gradTensor","inputGradients","dx","curGradient","backpropagateGradients","grads","inputMap","save","gradRes","gradMap","grad","timingInfo","wallMs","reset","getOrMakeEngine","_tfengine","environment","isMobile","nav","navigator","product","userAgent","vendor","opera","substr","isBrowser","document","WorkerGlobalScope","inferShape","firstElem","deepAssertShapeConsistency","indices","subShape","assertDtype","expectedDtype","actualDType","argName","functionName","convertToTensor","parseAsDtype","inferredDtype","indexOf","inferredShape","convertToTensorArray","registerFlag","debugValue","versions","OP_SCOPE_SUFFIX","op","opName","endsWith","substring","f2","complex","complex_","real","imag","$real","$imag","providedSize","inferredSize","inferred","flatDimsDontMatch","DTYPE_VALUE_SIZE_MAP","async","encodeWeights","group","specs","dataPromises","names","spec","utf8bytes","totalNumBytes","bytesOfLength","concatenateTypedArrays","decodeWeights","float16Decode","quantization","quantizationSizeFactor","byteBuffer","quantizedArray","Uint16Array","scale","getFloat16Decoder","byteLength","dtypeFactor","image","realTensor","imageTensor","JSON","stringify","totalByteLength","normalizedXs","useNodeBuffer","Buffer","Blob","atob","btoa","stringByteLength","str","concatenateArrayBuffers","buffers","basename","trim","items","getModelArtifactsInfoForJSON","modelArtifacts","modelTopology","ArrayBuffer","dateSaved","Date","modelTopologyType","modelTopologyBytes","weightSpecsBytes","weightSpecs","weightDataBytes","weightData","mantisaTable","convertMantissa","m","e","computeFloat16MantisaTable","exponentTable","computeFloat16ExponentTable","offsetTable","computeFloat16OffsetTable","bufferUint32View","float16Bits","float32Bits","IORouterRegistry","saveRouters","loadRouters","saveRouter","getInstance","loadRouter","url","getHandlers","loadOptions","handlerType","validHandlers","router","handler","registerSaveRouter","loudRouter","registerLoadRouter","getSaveHandlers","getLoadHandlers","DATABASE_NAME","MODEL_STORE_NAME","INFO_STORE_NAME","getIndexedDBFactory","theWindow","indexedDB","mozIndexedDB","webkitIndexedDB","msIndexedDB","shimIndexedDB","setUpDatabase","openRequest","db","createObjectStore","keyPath","BrowserIndexedDB","modelPath","databaseAction","open","onupgradeneeded","onsuccess","modelTx","transaction","getRequest","objectStore","close","onerror","oncomplete","modelArtifactsInfo","infoTx","infoStore","putInfoRequest","put","putModelRequest","deleteInfoRequest","URL_SCHEME","indexedDBRouter","startsWith","BrowserIndexedDBManager","tx","getAllInfoRequest","getAll","getInfoRequest","deleteModelData","deleteModelRequest","PATH_SEPARATOR","PATH_PREFIX","INFO_SUFFIX","MODEL_TOPOLOGY_SUFFIX","WEIGHT_SPECS_SUFFIX","WEIGHT_DATA_SUFFIX","MODEL_METADATA_SUFFIX","getModelKeys","topology","modelMetadata","getModelPathFromKey","BrowserLocalStorage","localStorage","LS","setItem","buf","fromCharCode","arrayBufferToBase64String","format","generatedBy","convertedBy","signature","userDefinedMetadata","modelInitializer","removeItem","parse","getItem","metadataString","metadata","weightDataBase64","byteOffset","charCodeAt","base64StringToArrayBuffer","localStorageRouter","BrowserLocalStorageManager","prefix","suffix","URL_SCHEME_SUFFIX","ModelStoreManagerRegistry","managers","scheme","manager","parseURL","getSchemes","cloneModelInternal","sourceURL","destURL","deleteSource","loadHandlers","loadHandler","saveHandlers","saveHandler","sourceScheme","sourcePath","sameMedium","load","getManager","removeModel","saveResult","listModels","schemes","schemeOut","schemeAndPath","copyModel","moveModel","PlatformBrowser","performance","text","textEncoder","TextEncoder","TextDecoder","setPlatform","registerManager","systemFetch","util","hrtime","cast_","$x","clone_","defer","BrowserDownloads","fileNamePrefix","modelTopologyFileName","weightDataFileName","weightsURL","URL","createObjectURL","weightsManifest","paths","weights","modelTopologyAndWeightManifest","modelTopologyAndWeightManifestURL","jsonAnchor","createElement","download","href","dispatchEvent","MouseEvent","weightDataAnchor","BrowserFiles","files","jsonFile","weightFiles","jsonReader","FileReader","onload","event","modelJSON","pathToFile","checkManifestAndWeightFiles","perFileBuffers","weightsGroup","weightFileReader","readAsArrayBuffer","readAsText","manifest","basenames","fileNames","file","pathBasename","browserFiles","monitorPromisesProgress","promises","onProgress","startFraction","endFraction","checkPromises","checkFraction","resolvedPromise","promise","fraction","loadWeightsAsArrayBuffer","fetchURLs","fetchFunc","requests","fetchURL","requestInit","isBinary","bufferPromises","response","arrayBuffer","loadWeights","filePathPrefix","weightNames","weightsLoaderFactory","fetchUrls","fetchWeightsFunction","groupIndicesToFetchMap","groupWeightsToFetch","weightsFound","allManifestWeightNames","manifestGroupConfig","groupIndex","groupOffset","weightsEntry","rawDtype","weightsBytes","enqueueWeightsForFetchingFn","manifestEntry","sizeBytes","weightName","weightIndex","found","weightsNotFound","groupIndicesToFetch","accumulator","shouldFetch","filepath","fetchUrl","weightsTensorMap","bufferIndexOffset","numBuffers","groupBytes","groupBuffer","groupByteBuffer","groupBufferOffset","nameToTensorMap","browserDownloads","HTTPRequest","DEFAULT_METHOD","weightPathPrefix","weightUrlConverter","body","method","FormData","append","ok","responses","status","modelConfigRequest","modelConfig","json","results","artifacts","initializer","weightPath","lastSlash","lastIndexOf","lastSearchParam","parseUrl","pathPrefix","entry","urlPromises","isHTTPScheme","match","URL_SCHEME_REGEX","httpRouter","isHTTP","urlItem","http","browserHTTPRequest","PassthroughLoader","PassthroughSaver","fromMemory","trainingConfig","withSaveHandler","matMul","matMul_","transposeA","transposeB","$a","$b","oneHot","oneHot_","depth","onValue","offValue","transpose","transpose_","perm","reverse","confusionMatrix","confusionMatrix_","labels","predictions","numClasses","$labels","$predictions","oneHotLabels","oneHotPredictions","oneHotLabelsT","tensor3d","fromPixels2DContext","fromPixels_","pixels","numChannels","isPixelData","isImageData","isVideo","isImage","isCanvasLike","isImageBitmap","ImageData","HTMLVideoElement","HTMLImageElement","getContext","ImageBitmap","HAVE_CURRENT_DATA_READY_STATE","readyState","height","videoWidth","videoHeight","getImageData","canvas","drawImage","numPixels","channel","fromPixelsAsync","isNonEmptyPixels","canWrapPixelsToImageBitmap","imageBitmap","createImageBitmap","premultiplyAlpha","toPixels","img","$img","originalImgTensor","multiplier","Uint8ClampedArray","rgba","ctx","imageData","putImageData","fromPixels","prepareAndValidate","tensorRank","indicesRank","indicesShape","sliceRank","nResult","resultShape","sliceSize","validateUpdateShape","updates","sliceDim","batchDim","shapeError","validateInput","calculateShapes","totalNd","safeSliceDim","numUpdates","outputSize","assertParamsValid","begin","maskToAxes","mask","computeOutShape","stridesWithElidedDims","ellipsisInsertionIndex","numElidedAxes","newStrides","splice","unnormalizeAxis","normalizedAxis","getElidedAxes","elidedAxes","getNormalizedAxes","ellipsisAxes","numInterpolatedAxes","beginMask","endMask","ellipsisMask","normalizedBegin","normalizedEnd","normalizedStrides","fullIndex","startIndicesWithElidedDims","stopIndicesWithElidedDims","startForAxis","stopForAxis","stridesForAxis","originalBegin","newIndices","originalAxis","originalValue","originalEnd","MAX_SAFE_INTEGER","axisSize","startIndices","MIN_SAFE_INTEGER","stopIndices","stop","isSliceContinous","firstNonOneAxis","computeFlatOffset","flatOffset","parseSliceParams","begin_","xRank","size_","sliceInfo","xShape","newAxisMask","shrinkAxisMask","$begin","$end","$strides","expandAxes","shrinkAxes","outShape","nonStrided","Serializable","className","cls","SerializationMap","classNameMap","getMap","fromConfig","registerClass","register","TEST_EPSILON_FLOAT16","expectArraysClose","actual","expected","epsilon","expectArraysPredicate","areClose","predicate","checkClassType","aType","bType","actualShape","expectedShape","actualFlat","expectedFlat","expectPromiseToFail","fail","expectArraysEqual","abs","expectValuesInRange","low","high","expectArrayBuffersEqual","expect","toEqual","encodeStrings","version","enableProdMode","enableDebugMode","disableDeprecationWarnings","deprecationWarn","disposeVariables","engine","profile","ready","getBackend","removeBackend","findBackend","findBackendFactory","registerBackend","add_","floorDiv","floorDiv_","div","div_","mul","mul_","sqrt_","square","square_","zerosLike","zerosLike_","$dy","gradients","checkGrads","$args","valueAndGrad","valueAndGrads","varList","specifiedVarList","specifiedNonTrainable","variable","originalVarCount","namedGrads","customGrad","Optimizer","returnCost","computeGradients","gradArray","applyGradients","iterations_","iterations","weightValues","getClassName","minimize","AdadeltaOptimizer","learningRate","rho","accumulatedGrads","accumulatedUpdates","variableGradients","originalName","accumulatedGrad","accumulatedUpdate","newAccumulatedGrad","newAccumulatedUpdate","incrementIterations","variables","saveIterations","variableCount","extractIterations","AdagradOptimizer","initialAccumulatorValue","pow","pow_","$base","$exp","sub","sub_","AdamOptimizer","beta1","beta2","accumulatedFirstMoment","accumulatedSecondMoment","accBeta1","accBeta2","varNames","oneMinusAccBeta1","oneMinusAccBeta2","firstMoment","secondMoment","newFirstMoment","newSecondMoment","biasCorrectedFirstMoment","biasCorrectedSecondMoment","abs_","getBroadcastDims","inShape","inRank","dims","dim","unshift","getReductionAxes","inDim","outAxis","outDim","assertAndGetBroadcastShape","maximum","maximum_","AdamaxOptimizer","decay","accumulatedWeightedInfNorm","iteration","variableNames","lr","weightedInfNorm","ut0","ut1","newWeightedInfNorm","SGDOptimizer","setLearningRate","MomentumOptimizer","momentum","useNesterov","accumulations","accumulation","newAccumulation","RMSPropOptimizer","centered","accumulatedMeanSquares","accumulatedMoments","accumulatedMeanGrads","accumulatedMeanSquare","newAccumulatedMeanSquare","accumulatedMeanGrad","newAccumulatedMeanGrad","gradContribution","newAccumulatedMoments","acos","acos_","acosh","acosh_","addN","addN_","$tensors","firstTensor","all_","keepDims","any","any_","argMax","argMax_","argMin","argMin_","asin","asin_","asinh","asinh_","atan","atan_","atan2","atan2_","atanh","atanh_","computeDilation2DInfo","filterShape","dataFormat","dilations","computeConv2DInfo","convertConv2DDataFormat","computePool2DInfo","filterSize","roundingMode","filterHeight","filterWidth","parseTupleParam","computePool3DInfo","filterDepth","parse3TupleParam","$dataFormat","computeConv3DInfo","depthwise","batchSize","inHeight","inWidth","inChannels","filterChannels","strideHeight","strideWidth","dilationHeight","dilationWidth","effectiveFilterHeight","getEffectiveFilterSize","effectiveFilterWidth","padInfo","outHeight","outWidth","top","bottom","left","right","fieldSize","zeroPad","computeDefaultPad","inputCols","computeOutputShape2D","padAlongHeight","padAlongWidth","getPadAndOutInfo","outChannels","inDepth","strideDepth","dilationDepth","effectiveFilterDepth","outDepth","front","back","inputRows","computeOutputShape4D","padAlongDepth","get3DPadAndOutInfo","dilation","effectiveFieldSize","param","trunc","tupleValuesAreOne","dimA","dimB","dimC","eitherStridesOrDilationsAreOne","reshape","reshape_","avgPool","avgPool_","dimRoundingMode","x4D","reshapedTo4D","avgPool3d","avgPool3d_","x5D","reshapedTo5D","concat_","attr","sigmoid","sigmoid_","slice_","tanh_","basicLSTMCell","basicLSTMCell_","forgetBias","lstmKernel","lstmBias","h","$forgetBias","$lstmKernel","$lstmBias","$data","$c","$h","combined","weighted","sliceCols","newC","batchToSpaceND","batchToSpaceND_","blockShape","crops","prod","batchNorm","batchNorm_","mean","variance","varianceEpsilon","$mean","$variance","$scale","$offset","xAs4D","batchNorm2d","batchNorm2d_","batchNorm3d","batchNorm3d_","batchNorm4d","batchNorm4d_","bincount","bincount_","$weights","broadcastTo","broadcastTo_","reps","ceil_","clipByValue","clipByValue_","clipValueMin","clipValueMax","concat1d","concat1d_","concat2d","concat2d_","concat3d","concat3d_","concat4d","concat4d_","conv2d","conv2d_","$filter","conv1d","conv1d_","x3D","reshapedTo3D","filter4D","input4D","conv2DBackpropInput","conv2DBackpropInput_","xShape4D","dy4D","conv2dTranspose","conv2dTranspose_","outputShape","conv3d","conv3d_","conv3DBackpropInput","conv3DBackpropInput_","xShape5D","dy5D","conv3dTranspose","conv3dTranspose_","cos","cos_","cosh","cosh_","cumsum","cumsum_","exclusive","denseBincount","denseBincount_","binaryOutput","depthToSpace","depthToSpace_","blockSize","inputHeight","inputWidth","inputDepth","depthwiseConv2d","depthwiseConv2d_","diag","diag_","dilation2d","dilation2d_","equal","equal_","where_","condition","$condition","broadcastShape","divNoNan","divNoNan_","divResult","zeros","bEqualsZero","dot","dot_","t1","t2","$t1","$t2","t1Inner","t2Inner","t12D","t22D","t1t2","einsum","einsum_","equation","elu","elu_","erf","erf_","exp_","expandDims","expandDims_","expm1","expm1_","tile","tile_","eye","eye_","numRows","numColumns","batchShape","buff","toTensor","floor_","gather","gather_","batchDims","greater","greater_","greaterEqual","greaterEqual_","imag_","isFinite_","isInf","isInf_","isNaN_","leakyRelu","leakyRelu_","alpha","less","less_","lessEqual","lessEqual_","linspace","localResponseNormalization","localResponseNormalization_","depthRadius","bias","beta","log_","log1p","log1p_","neg","neg_","softplus","softplus_","logSigmoid","logSigmoid_","customOp","max_","reductionIndices","sum_","logSoftmax","logSoftmax_","logits","$logits","xMax","shifted","softmax","axesAreInnerMostDims","combineLocations","outputLoc","reduceLoc","outIdx","reduceIdx","computeOutAndReduceShapes","aShape","expandShapeToKeepDim","assertAxesAreInnerMostDims","getAxesPermutation","getUndoAxesPermutation","getInnerMostAxes","numAxes","logSumExp","logSumExp_","logicalAnd","logicalAnd_","logicalNot","logicalNot_","logicalOr","logicalOr_","logicalXor","logicalXor_","maxPool","maxPool_","maxPool3d","maxPool3d_","maxPoolWithArgmax","maxPoolWithArgmax_","includeBatchInIndex","indexes","mean_","meshgrid","indexing","$y","w","min_","minimum","minimum_","mirrorPad","mirrorPad_","paddings","mode","shapeOffset","mod","mod_","moments","moments_","xMean","keepDimsShape","devSquared","multiRNNCell","multiRNNCell_","lstmCells","newStates","newH","multinomial","multinomial_","numSamples","seed","normalized","numOutcomes","origRank","notEqual","notEqual_","onesLike","onesLike_","outerProduct","outerProduct_","v1","v2","$v1","$v2","v12D","v22D","pad_","constantValue","pad1d","pad1d_","pad2d","pad2d_","pad3d","pad3d_","pad4d","pad4d_","spaceToBatchND","spaceToBatchND_","pool","pool_","windowShape","poolingType","convInfo","basePadding","padExtraShape","padExtraStart","padExtraEnd","withSpaceToBatchBasePaddings","isDilationOne","adjustedPadding","adjustedCrops","padStart","origPadEnd","fullInputShape","padEndExtra","padEnd","requiredSpaceToBatchPaddings","convertedPad","convertedX","prelu","prelu_","prod_","rand","rand_","randFunction","MPRandGauss","stdDeviation","truncated","stdDev","nextVal","NaN","upper","lower","seedValue","seedrandom","alea","resultX","resultY","isValid","isValidTruncated","convertValue","RandGamma","randu","randn","x2","v0","u","nextValue","UniformRandom","canReturnFloat","range","randomGamma","randomGamma_","rgamma","randomNormal","randomNormal_","randGauss","randomUniform","randomUniform_","minval","maxval","step","real_","reciprocal","reciprocal_","relu","relu_","relu6","relu6_","reverse_","reverse1d","reverse1d_","reverse2d","reverse2d_","reverse3d","reverse3d_","reverse4d","reverse4d_","round_","rsqrt","rsqrt_","selu","selu_","separableConv2d","separableConv2d_","depthwiseFilter","pointwiseFilter","$depthwiseFilter","$pointwiseFilter","channelMultiplier","setdiff1dAsync","xVals","yVals","ySet","sign","sign_","sin","sin_","sinh","sinh_","slice1d","slice1d_","slice2d","slice2d_","slice3d","slice3d_","slice4d","slice4d_","softmax_","fft","fft_","ifft","ifft_","irfft","irfft_","innerDimensionSize","batch","complexInput","realInput","imagInput","realConjugate","imagConjugate","split_","numOrSizeSplits","rfft","rfft_","fftLength","adjustedInput","zerosShape","zerosInput","half","realValues","imagValues","realComplexConjugate","imagComplexConjugate","squaredDifference","squaredDifference_","squeeze","squeeze_","stack_","step_","stridedSlice","stridedSlice_","tan","tan_","tensor1d","tensor2d","tensor4d","tensor5d","tensor6d","topk","topk_","sorted","lastDim","truncatedNormal","truncatedNormal_","unique","unique_","unsortedSegmentSum","unsortedSegmentSum_","segmentIds","numSegments","$segmentIds","unstack","unstack_","whereImpl","condShape","condVals","inBuffer","whereAsync","booleanMaskAsync","$tensor","$mask","axisFrom","maskDim","tensorShape","leadingSize","targetTensorShape","reshapedTensor","reshapedMask","positivePositions","normImpl","norm","norm_","ord","movingAverage","movingAverage_","zeroDebias","$v","$decay","one","oneMinusDecay","update","$step","scatterND","scatterND_","$indices","$updates","sparseToDense","sparseToDense_","sparseIndices","sparseValues","defaultValue","$sparseIndices","$sparseValues","$defaultValue","defaultValues","numElems","numDims","numValues","gatherND","gatherND_","dropout","dropout_","rate","noiseShape","$noiseShape","newDimension","getNoiseShape","keepProb","enclosingPowerOfTwo","cosineWindow","windowLength","even","newValues","cosArg","PI","inTopKAsync","targets","$targets","predictionsVals","targetsVals","precision","subarray","valAndInd","conv2DBackpropFilter","conv2DBackpropFilter_","getFusedDyActivation","activation","getFusedBiasGradient","dyActivation","reduceAxes","applyActivation","preluActivationWeights","leakyreluAlpha","shouldFuse","fusedConv2d_","$bias","$preluActivationWeights","der","biasDer","customOpWithBias","depthwiseConv2dNativeBackpropFilter","depthwiseConv2dNativeBackpropFilter_","depthwiseConv2dNativeBackpropInput","depthwiseConv2dNativeBackpropInput_","fusedDepthwiseConv2d_","xDer","filterDer","fusedMatMul_","innerShapeA","innerShapeB","outerShapeA","outerShapeB","outerDimsA","outerDimsB","batchDimA","batchDimB","a3D","b3D","aDer","bDer","hammingWindow","hammingWindow_","hannWindow","hannWindow_","frame_","signal","frameLength","frameStep","padValue","padLen","stft","stft_","windowFn","framedSignal","windowedSignal","cropAndResize","cropAndResize_","boxes","boxInd","cropSize","extrapolationValue","$image","$boxes","$boxInd","numBoxes","flipLeftRight","flipLeftRight_","rotateWithOffset","rotateWithOffset_","radians","fillValue","center","nonMaxSuppSanityCheck","scores","maxOutputSize","iouThreshold","scoreThreshold","softNmsSigma","NEGATIVE_INFINITY","nonMaxSuppression","nonMaxSuppression_","$scores","binaryInsert","element","comparator","middle","compareResult","binarySearch_","defaultComparator","binarySearch","insertionPoint","nonMaxSuppressionV3Impl","nonMaxSuppressionImpl_","nonMaxSuppressionV4Impl","padToMaxOutputSize","nonMaxSuppressionV5Impl","returnScoresTensor","returnValidOutputs","candidates","score","boxIndex","suppressBeginIndex","ascendingComparator","selectedIndices","selectedScores","candidate","originalScore","ignoreCandidate","iou","intersectionOverUnion","suppressWeight","validOutputs","elemsToPad","iCoord","jCoord","yminI","xminI","ymaxI","xmaxI","yminJ","xminJ","ymaxJ","xmaxJ","areaI","areaJ","intersectionYmin","intersectionXmin","intersectionYmax","intersectionXmax","intersectionArea","weight","c1","c2","nonMaxSuppressionWithScore","nonMaxSuppressionWithScore_","nonMaxSuppressionPadded","nonMaxSuppressionPadded_","resizeBilinear","resizeBilinear_","images","alignCorners","halfPixelCenters","$images","batchImages","resizeNearestNeighbor","resizeNearestNeighbor_","threshold","threshold_","inverted","threshValue","totalPixelsInImage","grayscale","$threshold","$r","$g","histogram","total","classFirst","classSecond","meanFirst","meanSec","weightForeground","weightBack","bestThresh","bestInBetVar","cInBetVar","meanFirstDivA","meanSecFill","meanSecAdd","meanSecMul","cInBetVarSubA","cInBetVarSubB","cInBetVarMul","otsu","invCondition","transform","transform_","transforms","interpolation","fillMode","$transforms","bandPart","bandPart_","numLower","numUpper","M","N","ij","inBand","zero","mat","gramSchmidt","gramSchmidt_","inputIsTensor2D","ys","xs1d","proj","qr2d","fullMatrices","q","one2D","iters","rTemp","wTemp","qTemp","rjEnd1","normX","rjj","u1","wPre","tau","rjEndAll","tauTimesW","wT","rTimesTau","tawTimesWT","qAllJEnd","qTimesTau","qr","qr_","outerDimsProd","x2ds","q2ds","r2ds","x2d","q2d","r2d","Reduction","computeWeightedLoss","computeWeightedLoss_","losses","reduction","SUM_BY_NONZERO_WEIGHTS","$losses","weightedLoss","NONE","SUM","MEAN","broadcastFactor","broadcastedWeights","numNonZeros","absoluteDifference","absoluteDifference_","cosineDistance","cosineDistance_","hingeLoss","hingeLoss_","huberLoss","huberLoss_","delta","deltaScalar","quadratic","linear","logLoss","logLoss_","epsilonScalar","l1","l2","meanSquaredError","meanSquaredError_","sigmoidCrossEntropy","sigmoidCrossEntropy_","multiClassLabels","labelSmoothing","$multiClassLabels","labelSmoothingScalar","maxOutput","outputXTarget","sigmoidOutput","sigmoidCrossEntropyWithLogits_","softmaxCrossEntropy","softmaxCrossEntropy_","onehotLabels","$onehotLabels","lse","logResult","costVector","dyShape","softmaxCrossEntropyWithLogits_","sparseFillEmptyRows","sparseFillEmptyRows_","denseShape","$values","$denseShape","outputIndices","outputValues","emptyRowIndicator","reverseIndexMap","sparseReshape","sparseReshape_","inputIndices","$inputIndices","$inputShape","$newShape","spectral","frame","nonMaxSuppressionAsync","boxesAndScores","boxesVals","scoresVals","nonMaxSuppressionWithScoreAsync","nonMaxSuppressionPaddedAsync","$maxOutputSize","$iouThreshold","$scoreThreshold","linalg","sparse","OptimizerConstructors","train","sgd","adadelta","adagrad","rmsprop","adamax","adam","delayCallback","requestAnimationFrame","setImmediate","nextFrame","assertParamsConsistent","shapes","firstShape","PARALLELIZE_THRESHOLD","computeOptimalWindowSize","inSize","getImageCenter","imageHeight","imageWidth","getReshaped","batchToSpace","reshaped","spatialLength","getPermuted","reshapedRank","blockShapeRank","permuted","permutedBeforeBatch","permutedAfterBatch","getReshapedPermuted","reshapedPermuted","getSliceBeginCoords","sliceBeginCoords","getSliceSize","uncroppedShape","SELU_SCALEALPHA","SELU_SCALE","ERF_P","ERF_A1","ERF_A2","ERF_A3","ERF_A4","ERF_A5","mergeRealAndImagArrays","splitRealAndImagArrays","complexWithEvenIndex","complexWithOddIndex","getComplexWithIndex","assignToTypedArray","exponents","inverse","exponent","ARROW_REGEX","decodeEinsumEquation","numArrows","inputString","outputString","inputTerms","numInputs","allDims","dimName","inputTerm","idDims","summedDims","getEinsumPermutation","nDims","permutationIndices","checkEinsumDimSizes","dimSizes","getEinsumComputePath","steps","nSteps","computedTermIndices","termIndices","findTermsWithDim","termIndex","isIdentityPermutation","prepareSplitSize","splitSizes","count","negIndex","segOpComputeOptimalWindowSize","collectGatherOpShapeInfo","outerSize","fromUint8ToStringArray","fromStringArrayToUint8","strings","absGradConfig","acosGradConfig","acoshGradConfig","addGradConfig","addNGradConfig","ders","argMaxGradConfig","argMinGradConfig","asinGradConfig","asinhGradConfig","atan2GradConfig","atanGradConfig","atanhGradConfig","avgPool3dGrad","avgPool3dGrad_","$input","input5D","avgPool3DGradConfig","avgPoolGrad","avgPoolGrad_","avgPoolGradConfig","batchMatMulGradConfig","batchToSpaceNDGradConfig","broadcastToGradConfig","broadCastToAttrs","castGradConfig","ceilGradConfig","clipByValueGradConfig","complexAbsGradConfig","concatGradConfig","$axis","sizeSplits","conv2DGradConfig","conv2DBackpropInputGradConfig","ddx","conv3DBackpropFilter","conv3DBackpropFilter_","conv3DGradConfig","cosGradConfig","coshGradConfig","cumsumGradConfig","permutation","depthwiseConv2dNativeGradConfig","$dilations","dilation2dGradConfig","inputInputs","filterInputs","eluGradConfig","erfGradConfig","expGradConfig","expandDimsGradConfig","expm1GradConfig","floorGradConfig","floorDivGradConfig","tmp","fusedBatchNormGradConfig","scaleValue","reductionAxes","tileShape","xMinusMean","dyTimesScaleValue","oneOverSqrtVariance","minusHalfRCube","meanDer","varianceDer","xMinusMean2TimesRsqrt","scaleDer","offsetDer","gatherGradConfig","parsedAxis","paramsShape","indicesSize","outerShape","outerDims","innerShape","innerDims","outerAxesIndices","arrayRange","innerAxesIndices","valuesShape","arrayConcat","reshapedIndices","transposeDims","valuesTranspose","paramsGrad","invertTransposeDims","arrays","greaterEqualGradConfig","identityGradConfig","isFiniteGradConfig","isInfGradConfig","isNanGradConfig","leakyReluGradConfig","log1pGradConfig","logGradConfig","logSoftmaxGradConfig","localResponseNormalizationBackprop","localResponseNormalizationBackprop_","lrnGradConfig","gradForMinAndMax","xOrig","origAxes","maxGradConfig","maxAttrs","maxGrad","maximumGradConfig","maxPool3dGrad","maxPool3dGrad_","$output","output5D","maxPool3DGradConfig","maxPoolGrad","maxPoolGrad_","padV2GradConfig","spaceToBatchNDGradConfig","splitVGradConfig","gradConfigs","reduceSize","expandedDyShape","expandedDy","minAttrs","minGrad","expFloat","logBase","scaleAlpha","greaterThanZeroDer","lessEqualZeroDer","dyTimesY","two","derX","xGrad","transposeAttrs","undoPerm","unpackAttrs","zeroClippedIndices","gathered","isPositive","numIters","zeroSlice","gatherDropNegatives","gradientConfig","_epsilon","asScalar","asType","as1D","as2D","rows","columns","as3D","as4D","depth2","as5D","depth3","padding","dilationRate","reshapeAs","newShape2D","halfFloatCenters","tensorsToBeStacked","toBool","toFloat","toInt","where","AttributeError","RuntimeError","AssertionError","pyListRepeat","newArray","refernce","singletonOrArray","toList","toSnakeCase","insecure","toCamelCase","identifier","p1","toUpperCase","_GLOBAL_CUSTOM_OBJECTS","serializeKerasObject","dict","getConfig","convertNDArrayScalarsInConfig","configItem","fields","field","deserializeKerasObject","moduleObjects","customObjects","printableModuleName","fastWeightInit","customObjectsCombined","backupCustomObjects","returnObj","reverseNumberCompare","numberCompare","isObjectEmpty","checkStringTypeUnionValue","label","checkArrayTypeAndLength","expectedType","minLength","maxLength","assertPositiveInteger","formatAsFriendlyString","mapActivationToFusedKernel","activationName","calcL2Norms","Constraint","MaxNorm","defaultMaxValue","defaultAxis","maxValue","norms","desired","UnitNorm","NonNeg","MinMaxNorm","defaultMinValue","defaultRate","minValue","CONSTRAINT_IDENTIFIER_REGISTRY_SYMBOL_MAP","serializeConstraint","constraint","deserializeConstraint","getConstraint","maxNorm","unitNorm","nonNeg","minMaxNorm","VALID_DATA_FORMAT_VALUES","VALID_INTERPOLATION_FORMAT_VALUES","VALID_PADDING_MODE_VALUES","VALID_POOL_MODE_VALUES","VALID_BIDIRECTIONAL_MERGE_MODES","nameMap","checkPaddingMode","checkPoolMode","_nameScopeStack","nameScope","getScopedTensorName","tensorName","isValidTensorName","getUniqueTensorName","scopedName","tensorNameRegex","RegExp","arrayProd","toArray1D","sliceAlongFirstAxis","sliceAlongLastAxis","sliceAlongAxis","concatenate","concatAlongFirstAxis","stddev","reshapeBias","aFirstDims","aLastDim","bShape","bLastDim","ySecondLastDim","yOtherDims","reference","biasShape","biasAdd","level","inTrainPhase","alt","training","VALID_FAN_MODE_VALUES","VALID_DISTRIBUTION_VALUES","Initializer","Zeros","Ones","Constant","RandomUniform","DEFAULT_MINVAL","DEFAULT_MAXVAL","RandomNormal","DEFAULT_MEAN","DEFAULT_STDDEV","TruncatedNormal","gain","VarianceScaling","distribution","checkDistribution","fans","fanIn","fanOut","receptiveFieldSize","computeFans","limit","GlorotUniform","GlorotNormal","HeNormal","HeUniform","LeCunNormal","LeCunUniform","Orthogonal","DEFAULT_GAIN","INITIALIZER_IDENTIFIER_REGISTRY_SYMBOL_MAP","deserializeInitializer","serializeInitializer","getInitializer","constant","identity","varianceScaling","glorotUniform","glorotNormal","heNormal","heUniform","leCunNormal","leCunUniform","orthogonal","_nextUniqueTensorId","getNextUniqueTensorId","_uidPrefixes","getUid","isArrayOfShapes","normalizeShapeList","getExactlyOneTensor","getExactlyOneShape","countParamsInWeights","LayerVariable","DEFAULT_VARIABLE_NAME_PREFIX","trainable_","assertNotDisposed","newVal","checkShapesMatch","batchGetValue","batchSetValue","variablesAndValues","variableAndValue","InputSpec","ndim","maxNDim","minNDim","SymbolicTensor","sourceLayer","callArgs","outputTensorIndex","_nextNodeID","Node","outboundLayer","inboundLayers","nodeIndices","tensorIndices","inputTensors","outputTensors","inputMasks","outputMasks","layer","outboundNodes","inboundNodes","inboundNames","_nextLayerID","Layer","_callHook","_addedWeightNames","_stateful","activityRegularizer","inputSpec","supportsMasking","_trainableWeights","_nonTrainableWeights","_losses","_updates","_built","batchInputShape","inputDType","initialWeights","_refCount","fastWeightInitDuringBuild","nodeIndex","attrName","getNodeAtIndex","lossFn","built","trainableWeights","nonTrainableWeights","stateful","inputIndex","xShapeAtAxis","specDim","kwargs","callHook","inputsList","allAreSymbolic","noneAreSymbolic","assertInputCompatibility","xElem","build","setWeights","outputList","outputListCopy","collectInputShape","computeOutputShape","outputDType","warnOnIncompatibleInputShape","addInboundNode","dimMismatch","dimension","allOutputShapes","shapeString","trainableOnly","weightValueTuples","paramValues","pv","regularizer","initValue","addLoss","maskElement","inputTensorList","tensorIndex","numDisposedVariables","disposeWeights","refCountAfterDispose","getSourceInputs","sourceTensors","previousSources","InputLayer","inputTensor","Input","resolveScalarsInLogs","logs","scalarsToDispose","valueScalar","disposeTensorsInLogs","ModelLoggingVerbosity","BaseCallback","validationData","epoch","model","CallbackList","callbacks","queueLength","callback","setParams","setModel","onEpochBegin","onEpochEnd","onBatchBegin","onBatchEnd","onTrainBegin","onTrainEnd","BaseLogger","totals","oldTotalsToDispose","History","history","valueArray","CustomCallback","yieldEvery","currentEpoch","onYield","maybeWait","waitMs","lastResult","lastTime","bind","trainBegin","trainEnd","epochBegin","epochEnd","batchBegin","batchEnd","yield","ps","standardizeCallbacks","callbackConfig","CallbackConstructorRegistry","verbosityLevel","callbackConstructor","checkForDuplicate","constructors","levelName","ctor","configureCallbacks","epochs","initialEpoch","numTrainSamples","stepsPerEpoch","doValidation","callbackMetrics","actualCallbacks","createCallbacks","callbackList","samples","metrics","deserialize","l2Normalize","squareSum","epsilonTensor","yTrue","yPred","meanAbsoluteError","meanAbsolutePercentageError","clippedTrue","MAX_VALUE","absResult","categoricalCrossentropy","fromLogits","outputSum","sparseCategoricalCrossentropy","flatTarget","binaryCrossentropy","reluLogits","negAbsLogits","sigmoidCrossEntropyWithLogits","cosineProximity","trueNormalized","predNormalized","trueXPred","lossesMap","meanSquaredLogarithmicError","clippedPred","firstLog","secondLog","squaredHinge","maxResult","hinge","categoricalHinge","pos","logcosh","log2","predictionDiff","logcoshResult","kullbackLeiblerDivergence","poisson","logPred","identifierOrFn","errMsg","includes","binaryAccuracy","yPredThresholded","categoricalAccuracy","truePositives","tp","fp","falsePositives","denominator","sparseCategoricalAccuracy","metricsMap","mse","MSE","mae","MAE","mape","MAPE","cosine","getLossOrMetricName","fnName","checkUserDefinedMetadata","modelName","checkSize","plainObjectCheck","xType","printRow","positions","printFn","line","printLayerSummary","countParams","printLayerSummaryWithConnections","relevantNodes","connections","inboundLayer","inboundLayerIndex","inboundTensorIndex","firstConnection","isArrayItemInputOrOutputName","convertPythonicToTs","pythonicConfig","tsArray","arrayLength","tsDict","pythonicKey","pythonicValue","tsKey","convertTsToPythonic","tsConfig","pyArray","pyDict","tsValue","FeedDict","feeds","id2Value","id2Mask","name2Id","feed","assertFeedCompatibility","cachedSorted","cachedRecipientCounts","execute","fetches","feedDict","probe","arrayFetches","fetchArray","outputNames","finalOutputs","feedNames","outputName","getValue","maxNumTensors","minNumTensors","fetchAndFeedKey","recipientCounts","finalSorted","finalRecipientMap","getTopologicalSortAndRecipientCountsForOneFetch","recipientMap","visited","symbolicTensor","recipient","recipientMap2Counts","getTopologicalSortAndRecipientCounts","internalFeedDict","symbolic","srcLayer","inputValues","tensorsToDispose","maskExists","getMask","hasKey","outputMask","computeMask","layerOutputs","getNodeOutputs","outputSymbolicTensors","disposeMasks","marks","topIsMarked","outputTensor","getOutputAt","Container","containerNodes","inputLayers","inputLayersNodeIndices","inputLayersTensorIndices","outputLayers","outputLayersNodeIndices","outputLayersTensorIndices","layers","internalContainerRefs","inputNames","feedInputShapes","feedInputNames","feedOutputNames","internalInputShapes","internalOutputShapes","nodesDepths","nodeIDToNode","layersDepths","layerIDToLayer","layerIndices","nodesInDecreasingDepth","buildMapOfGraph","finishedNodes","nodesInProgress","nodeKey","numInboundLayers","reversedNodesInDecreasingDepth","previousDepth","inboundNode","nodesByDepth","nodeID","layersByDepth","layerID","depthKeys","parseInt","layersForDepth","aIndex","bIndex","computableTensors","layersWithCompleteInput","allNames","numOccurrences","strict","nameToWeight","totalWeightsCount","validatedName","tokens","unsetNames","theConfig","unused","returnString","updatedConfig","masks","runInternalGraph","layersToOutputShapes","nodes","outputShapeKeys","shapeKey","tensorMap","referenceInputTensors","referenceOutputTensors","computedData","computedTensors","computedMasks","computedTensor","computedMask","nodeConversionMap","keptNodes","originalNodeIndex","calculateLosses","buildNodeConversionMap","layerConfigs","layerClassName","layerConfig","filteredInboundNodes","nodeData","newNodeIndex","modelInputs","modelOutputs","createdLayers","unprocessedNodes","addUnprocessedNode","processNode","inputData","inboundLayerName","inboundNodeIndex","processLayer","layerData","layerName","setFastWeightInitDuringBuild","layersFromConfig","currentUnprocessedNodesForLayer","inputLayersFromConfig","layerOutputTensors","outputLayersFromConfig","resetStates","standardizeClassWeights","classWeight","xWeight","weightType","numOutputs","standardizeSampleOrClassWeights","standardizeWeights","sampleWeight","sampleWeightMode","yClasses","yClassIndices","classSampleWeight","classIndex","sampleWeights","standardizeDataIteratorOutput","iteratorOut","iteratorOutObj","flattenedXs","flattenTensorOrArrayOrMap","flattenedYs","xIndex","yIndex","inputOrOutput","isDatasetObject","dataset","checkBatchSize","sliceArrays","sliceArraysByIndices","makeBatches","batchStart","ensureTensorsRank2OrHigher","disposeNewTensors","refTensors","oldTensorIds","oldTensor","isDataArray","isDataDict","isDataTensor","standardizeInputData","checkBatchAxis","exceptionPrefix","gotUnexpectedData","refDim","checkInputData","LayersModel","isTraining","lineLength","sequentialLike","depthNodes","flag","isModelSequentialLike","toDisplay","checkTrainableWeightsConsistency","trainableCount","collectedTrainableWeights","countTrainableParams","nonTrainableCount","printSummary","loss","optimizer","optimizer_","optimizerMap","isOptimizerOwned","lossFunctions","theLosses","lossFunction","feedOutputShapes","feedLossFns","skipTargetIndices","metricsNames","metricsTensors","nestedMetrics","wrappedMetrics","outputMetrics","collectMetrics","appendMetric","outputIndex","metricName","metricTensor","accFn","weightedMetricFn","metric","metricFn","metricResult","handleMetrics","standardizedOuts","standardizeUserDataXY","ins","makeTestFunction","testFunction","testLoop","hasBatches","batches","dataIterator","numExamples","xsAndYs","batchOuts","batchOut","oldScalar","evaluateDataset","stepsName","outputsIsArray","retrieveSymbolicTensors","tensorValue","executeOutputs","symbolicTensorNames","outputsRemaining","layerOutputNames","remainingNames","checkNumSamples","outsBatches","batchIndex","insBatch","xsRank2OrHigher","predictLoop","setX","setY","checkArrayLengths","lossFns","keyLosses","slicedYShape","slicedShape","targetDim","checkLossAndTargetCompatibility","standardXs","standardYs","standardSampleWeights","classWeights","indexArray","batchIds","outLabels","dedupedOutLabels","newLabel","lossValues","metricsValues","totalLoss","meanLoss","weightedMetric","regularizerLoss","valOutputs","meanMetric","inputValX","inputValY","valX","valY","standardizeUserData","valIns","valStandardized","validationSplit","splitAt","originalBatchSize","validationSteps","trainFunction","makeTrainFunction","getDedupedMetricsNames","valFunction","valF","shuffle","stopTraining_","epochLogs","epochIndexArray1D","batchLogs","valOuts","syncData","fitLoop","fitTensors","hasBatchesPerEpoch","batchesPerEpoch","valXs","valYs","validationBatches","standardizeTensorValidationData","getStepsPerEpoch","stepsDone","standardClassWeights","evaluate","validationBatchSize","fitDataset","standardizeOut","namedWeights","getWeights","numTensorsBeforeOptmizerDisposal","lossNames","metricsIdentifiers","getLossIdentifiers","getMetricIdentifiers","optimizer_config","class_name","weighted_metrics","loss_weights","sample_weight_mode","lossEntry","compile","handlerOrURL","handlers","weightDataAndSpecs","getNamedWeights","toJSON","includeOptimizer","getTrainingConfig","optimizerWeightData","optimizerWeightSpecs","Functional","modelFromJSON","modelAndWeightsConfig","uniqueWeightValues","Sequential","isLayerModelInstance","modelLayer","checkShape","lastLayerIndex","summary","predict","predictOnBatch","fit","trainOnBatch","configArray","extraModelConfig","conf","stopTraining","sequential","loadLayersModel","pathOrIOHandler","options","loadTrainingConfig","setUserDefinedMetadata","modelWeights","optimizerWeights","name2Tensor","decodeModelAndOptimizerWeights","loadLayersModelFromIOHandler","loadLayersModelInternal","registerCallbackConstructor","Activation","Linear","HardSigmoid","Softsign","Swish","Mish","serializeActivation","deserializeActivation","getActivation","assertObjectArgs","Regularizer","L1L2","hasL1","hasL2","regularization","REGULARIZER_IDENTIFIER_REGISTRY_SYMBOL_MAP","serializeRegularizer","deserializeRegularizer","getRegularizer","ReLU","baseConfig","LeakyReLU","DEFAULT_ALPHA","PReLU","DEFAULT_ALPHA_INITIALIZER","alphaInitializer","alphaRegularizer","alphaConstraint","sharedAxes","paramShape","addWeight","ELU","ThresholdedReLU","DEFAULT_THETA","theta","DEFAULT_AXIS","normalizeArray","singleValue","convOutputLength","inputLength","outputLength","deconvLength","strideSize","kernelSize","preprocessConv2DInput","preprocessConv3DInput","conv2dWithBiasActivation","BaseConv","DEFAULT_KERNEL_INITIALIZER","DEFAULT_BIAS_INITIALIZER","verifyArgs","useBias","biasInitializer","biasConstraint","biasRegularizer","Conv","filters","kernelInitializer","kernelConstraint","kernelRegularizer","channelAxis","inputDim","kernelShape","biasValue","fusedActivationName","conv1dWithBias","conv3dWithBias","newSpace","space","newDim","Conv2DTranspose","hAxis","wAxis","kernelH","kernelW","strideH","strideW","heightAxis","widthAxis","Conv3DTranspose","dAxis","kernelD","strideD","depthAxis","SeparableConv","DEFAULT_DEPTHWISE_INITIALIZER","DEFAULT_POINTWISE_INITIALIZER","depthwiseKernel","pointwiseKernel","depthMultiplier","depthwiseInitializer","depthwiseRegularizer","depthwiseConstraint","pointwiseInitializer","pointwiseRegularizer","pointwiseConstraint","depthwiseKernelShape","pointwiseKernelShape","SeparableConv2D","Conv1D","Cropping2D","cropping","hSliced","UpSampling2D","DEFAULT_SIZE","resized","DepthwiseConv2D","cols","outFilters","outRows","outCols","standardizeArgs","initialState","constants","numConstants","toListOrNull","rnn","stepFunction","initialStates","goBackwards","unroll","needPerStepOutputs","perStepOutputs","lastOutput","states","timeSteps","perStepInputs","perStepMasks","currentInput","stepOutputs","maskedOutputs","stepMask","negStepMask","RNN","cell","StackedRNNCells","cells","stateSize","returnSequences","returnState","stateSpec","states_","keptStates","outputDim","stateShape","stateMask","numStates","stepInputShape","standardized","additionalInputs","additionalSpecs","fullInput","fullInputSpec","originalInputSpec","getInitialState","cellCallKwargs","rnnOutputs","cellConfig","SimpleRNNCell","DEFAULT_ACTIVATION","DEFAULT_RECURRENT_INITIALIZER","units","recurrentInitializer","recurrentRegularizer","recurrentConstraint","recurrentDropout","dropoutMask","recurrentDropoutMask","recurrentKernel","prevOutput","generateDropoutMask","dpMask","recDpMask","SimpleRNN","GRUCell","DEFAULT_RECURRENT_ACTIVATION","resetAfter","recurrentActivation","implementation","hTMinus1","z","hh","matrixX","recurrentKernelValue","rk1","rk2","matrixInner","xZ","xR","xH","recurrentZ","recurrentR","recurrentH","GRU","LSTMCell","unitForgetBias","capturedBiasInit","capturedUnits","bI","bF","bCAndH","cTMinus1","z0","z1","z2","z3","LSTM","nestedStates","newNestedStates","callInputs","cellStates","tuples","numParams","inputWeights","droppedInputs","createMask","ConvRNN2D","computeSingleOutputShape","getStates","isChannelsFirst","hOut","wOut","ConvLSTM2DCell","recurrentKernelShape","applyDropout","xI","xF","xC","xO","recDropoutMask","hI","hF","hC","hO","kernelI","kernelF","kernelC","kernelO","biasI","biasF","biasC","biasO","inputConv","recKernelI","recKernelF","recKernelC","recKernelO","recurrentConv","getOwnPropertySymbols","propertyIsEnumerable","__rest","ConvLSTM2D","Dropout","invokeCallHook","SpatialDropout1D","Dense","inputLastDim","Flatten","RepeatVector","targetShape","isUnknown","errorMsg","finalShape","known","unknown","originalSize","anyUnknownDims","fixUnknownDimension","Permute","expectedSortedIndices","dimsIncludingBatch","Masking","maskValue","booleanMask","Embedding","embeddings","DEFAULT_EMBEDDINGS_INITIALIZER","embeddingsInitializer","embeddingsRegularizer","embeddingsConstraint","maskZero","inLens","s1","s2","Merge","shape1","shape2","computeElementwiseOpOutputShape","batchSizes","allRanks","reshapeRequired","reshapedInputs","inputDims","xNDim","mergeFunction","transposed","xTransposed","yNDim","yShape","Average","Concatenate","allNoneShape","shapeSet","shapeWithoutConcatAxis","exists","allNullMasks","concatenatedMasks","interpretAxis","Dot","normalize","interpretAxes","x1","axesArray","diffShape","adjX","adjY","idx","squeezeAxes","batchDot","GaussianNoise","GaussianDropout","AlphaDropout","_getNoiseShape","alphaP","keptIdx","batchNormalization","gamma","BatchNormalization","betaInitializer","gammaInitializer","movingMeanInitializer","movingVarianceInitializer","betaConstraint","gammaConstraint","betaRegularizer","gammaRegularizer","movingMean","movingVariance","sortedReductionAxes","needsBroadcasting","broadcastMovingMean","broadcastMovingVariance","broadcastBeta","broadcastGamma","normalizeInference","normedTraining","meanAndVariance","regularNormalizeBatchInTraining","broadcastMean","broadcastVariance","broadcastNormalizeBatchInTraining","normalizeBatchInTraining","doMovingAverage","origValue","updateDelta","updateMovingMeanAndVariance","LayerNormalization","broadcast","momentsTiling","scaleOffsetTiling","ZeroPadding2D","heightPadding","widthPadding","spatial2dPadding","pattern","pool2d","poolSize","poolMode","paddingString","pool3d","Pooling1D","poolingFunction","MaxPooling1D","AveragePooling1D","Pooling2D","MaxPooling2D","AveragePooling2D","Pooling3D","depths","MaxPooling3D","AveragePooling3D","GlobalPooling1D","GlobalAveragePooling1D","GlobalMaxPooling1D","GlobalPooling2D","GlobalAveragePooling2D","GlobalMaxPooling2D","Wrapper","newConfig","TimeDistributed","childInputShape","childOutputShape","timesteps","Bidirectional","forwDict","forwardLayer","backDict","backwardLayer","mergeMode","_trainable","numWeights","numeightsOver2","layerShapes","stateSpecs","isSymbolicTensor","yRev","forwardState","backwardState","rnnLayer","inputLayer","reLU","leakyReLU","thresholdedReLU","cropping2D","upSampling2d","dense","spatialDropout1d","repeatVector","permute","embedding","layerNormalization","zeroPadding2d","averagePooling1d","avgPool1d","avgPooling1d","averagePooling2d","avgPool2d","avgPooling2d","averagePooling3d","avgPooling3d","globalAveragePooling1d","globalAveragePooling2d","globalMaxPooling1d","globalMaxPooling2d","maxPooling1d","maxPooling2d","maxPooling3d","gru","gruCell","lstm","lstmCell","simpleRNN","simpleRNNCell","convLstm2d","convLstm2dCell","stackedRNNCells","bidirectional","timeDistributed","globalMaxPool1d","globalMaxPool2d","maxPool1d","maxPool2d","gaussianNoise","gaussianDropout","alphaDropout","masking","falseNegatives","l1l2","Callback","currVal","prevVal","EarlyStopping","restoreBestWeights","monitor","minDelta","patience","baseline","monitorFunc","wait","stoppedEpoch","best","current","getMonitorValue","monitorValue","earlyStopping","DataType","SaverDef","CheckpointFormatVersion","CUSTOM_OPS","registerOp","opFunc","opMapper","tfOpName","category","customExecutor","getRegisteredOp","deregisterOp","getParamValue","paramName","context","resourceManager","inputParam","inputParams","inputIndexStart","inputIndexEnd","getTensor","attrParam","attrParams","tensorsMap","nodeName","parseNodeName","getHashTableHandleByName","contextId","currentContextIds","find","getNodeNameWithContextId","getNodeNameAndIndex","currentContextId","parts","getPadding","explicitPadding","cloneTensor","OperationMapper","_instance","mappersJson","opMappers","mapper","graph","tfNodes","placeholders","initNodes","mapNode","inputNodeNameToKey","outputNodeNameToKey","mapSignatureEntries","allNodes","children","signatureKey","functions","library","function","func","mapFunction","newNode","rawAttrs","getStringParam","tfName","tfDeprecatedName","getStringArrayParam","getNumberParam","getNumericArrayParam","getBoolParam","getBoolArrayParam","getTensorShapeParam","getTensorShapeArrayParam","getDtypeParam","getDtypeArrayParam","getFuncParam","functionDef","nodeDef","inputArg","parseDtypeParam","returnNodeMap","outputArg","defaultOutput","mapArgsToSignature","methodName","mapArgToTensorInfo","parseStringParam","keepCase","decodeBase64","def","parseTensorShapeParam","unknownRank","NodeValueImpl","getInput","getAttr","assertShapesMatchAllowUndefinedSize","dim0","dim1","fullDefinedShape","elementShape","inferElementShape","listElementShape","partialShape","mergeElementShape","notfullDefinedShape","elementShapeA","elementShapeB","TensorArray","maxSize","identicalElementShapes","dynamicSize","clearAfterRead","closed_","idTensor","keepIds","tensorWithState","cleared","written","readMany","maxIndex","writeMany","totalLength","cumulativeLengths","elementPerRow","sizes","TensorList","elementDtype","maxNumElements","numElements","outputElementShape","reshapedTensors","elementIndex","fusedConvAndDepthWiseParams","extraOp","activationFunc","isBiasAdd","isPrelu","isBatchNorm","numArgs","biasArg","preluArg","nmsParams","HashTable","keyDType","valueDType","handle","clear","checkKeyAndValueTensor","$keys","keysLength","valuesLength","findWithDefault","thenFunc","elseFunc","cond","functionMap","executeFunctionAsync","tensorArrayMap","tensorListMap","bodyFunc","condFunc","condResult","argIds","condValue","origResult","resultIds","pred","frameId","enterFrame","exitFrame","nextIteration","tensorArray","addTensorArray","writeTensor","writeTensorArray","getTensorArray","readId","readIndex","gatherId","gatherIndices","gatherDtype","scatterId","scatterIndices","scatterTensor","scatterTensorArray","scatter","concatId","concatTensorArray","concatDtype","splitId","splitTensor","lengths","splitTensorArray","sizeId","closeId","closeTensorArray","clearAndClose","getTensorList","elementDType","addTensorList","numElementsParam","reserve","fromTensor","pushBack","popBack","summarize","squeezedShape","mapped","sameShape","hashTable","addHashTable","getHashTableById","import","tensorSize","ExecutionContext","weightMap","rootContext","frameName","iterationId","contexts","lastId","generateCurrentContextIds","_currentContextIds","contextIdforContexts","newFrame","shift","getExecutionSubgraph","usedNodes","missingInputs","dynamicNode","syncInputs","inputNodeNames","initNodeNames","frontier","isControlFlow","isDynamicShape","isHashTable","child","CONTROL_FLOW_OPS","DYNAMIC_SHAPE_OPS","HASH_TABLE_OPS","GraphExecutor","parent","compiledMap","_weightMap","SEPERATOR","_functions","_functionExecutorMap","_outputs","_inputs","_initNodes","_signature","weightIds","_weightIds","functionExecutorMap","_resourceManager","sortedInputs","sortedOutputs","executionInfo","outNames","inNames","inputNodes","orderedNodes","getNodesInTopologicalOrder","mapInputs","checkInputs","checkInputShapeAndType","mapOutputs","checkOutputs","outputNodeNames","outputNodes","compilationKey","getCompilationKey","tensorsToKeep","getFrozenTensorIds","intermediateTensorConsumerCount","checkTensorForDisposal","ids","getTensorsForCurrentContenxt","_executeAsync","isFunctionExecution","executeWithControlFlow","outputIds","inputIds","mappedInputs","currentContext","added","processStack","missingOutputs","alternativeMsg","processChildNodes","childNode","notInGraph","normalizedName","ResourceManager","hashTableNameToHandle","hashTableMap","GraphModel","modelUrl","executor","findIOHandler","loadSync","producer","minConsumer","Instance","transformGraph","convertTensorMapToTensorsMap","executeAsync","normalizeInputs","normalizeOutputs","newMap","loadGraphModel","fromTFHub","deepMapInternal","mapFn","containedIn","recurse","mappedIterable","childResult","deepZip","zipFn","zipToList","deepZipInternal","deepMapAndAwaitAll","mappedValue","isView","cloneIfTensor","RingBuffer","capacity","RangeError","doubledCapacity","isFull","wrap","isEmpty","relativeIndex","GrowingRingBuffer","INITIAL_CAPACITY","expand","newCapacity","newData","iteratorFromItems","ArrayIterator","iteratorFromFunction","FunctionCallIterator","LazyIterator","stream","prefetch","shouldContinue","ErrorHandlingLazyIterator","FilterIterator","MapIterator","AsyncMapIterator","serial","FlatmapIterator","resolveFully","serialMapAsync","resolveWhile","smallLastBatch","RowMajorBatchIterator","rowMajorBatch","baseErrorHandler","ChainedIterator","TakeIterator","SkipIterator","bufferSize","PrefetchIterator","windowSize","ShuffleIterator","SerialIterator","trav","deepMap","nextFn","upstream","lastRead","serialNext","maxCount","skipped","enableSmallLastBatch","OneToManyIterator","outputQueue","pump","mappedArray","pushAll","iterators","moreIterators","readFromChain","iteratorResult","handleErrors","itemResult","ZipMismatchMode","ZipIterator","mismatchMode","FAIL","currentPromise","afterState","numIterators","iteratorsDone","SHORTEST","LONGEST","nextState","refill","upstreamExhausted","randomInt","chosenIndex","chooseIndex","shuffleExcise","Dataset","datasetFromIteratorFn","columnMajorBatch","deepBatchConcat","forEachAsync","mapAsync","baseIterators","take","skip","reshuffleEachIteration","seed2","int32","toArray","toArrayForTest","iteratorFn","zip","datasets","ds","iteratorFromZipped","batchConcat","MAX_BUFFER_SIZE","TextLineDataset","decodeUTF8","CODE_QUOTE","STATE_OUT","STATE_FIELD","STATE_QUOTE","STATE_QUOTE_AFTER_QUOTE","STATE_WITHIN_QUOTE_IN_QUOTE","CSVDataset","csvConfig","hasHeader","fullColumnNames","columnNamesValidated","columnConfigs","configuredColumnsOnly","delimiter","delimWhitespace","columnNames","setColumnNames","columnNamesFromFile","maybeReadHeaderLine","counts","countAcc","duplicateNames","firstElement","firstLine","parseRow","makeDataElement","features","parsedValue","default","required","isLabel","valueAsNum","getBoolean","validateElementCount","readOffset","readLength","currentState","charAt","MicrophoneIterator","microphoneConfig","isClosed","fftSize","fftSizeLog2","numFrames","numFramesPerSpectrogram","sampleRateHz","columnTruncateLength","audioTrackConstraints","smoothingTimeConstant","includeSpectrogram","includeWaveform","microphoneIterator","mediaDevices","getUserMedia","audio","video","ctxConstructor","AudioContext","webkitAudioContext","audioContext","sampleRate","streamSource","createMediaStreamSource","analyser","createAnalyser","connect","freqData","timeData","spectrogramTensor","waveformTensor","audioDataQueue","getAudioData","flattenQueue","freqDataQueue","getTensorFromAudioDataArray","timeDataQueue","currentFrames","intervalID","setInterval","getFloatFrequencyData","getFloatTimeDomainData","clearInterval","disconnect","getTracks","queue","frameSize","WebcamIterator","webcamVideoElement","webcamConfig","resize","needToResize","resizeHeight","resizeWidth","cropBoxInd","centerCrop","widthCroppingRatio","heightCroppingRatio","widthCropStart","heightCropStart","widthCropEnd","heightCropEnd","cropBox","webcamIterator","facingMode","deviceId","srcObject","src","play","onloadedmetadata","cropAndResizeFrame","expandedImage","resizedImage","DataSource","StringIterator","separator","SplitIterator","impl","SplitIteratorImpl","carryover","chunkResult","ByteChunkIterator","Utf8Iterator","Utf8IteratorImpl","decoder","StringDecoder","chunk","FileChunkIterator","File","chunkSize","fileReader","onabort","isLocalPath","source","FileDataSource","fs","readFileSync","URLDataSource","fileOptions","urlString","request","headers","credentials","cache","redirect","referrer","integrity","uint8Array","statusText","urlChunkIterator","csv","generator","webcam","microphone","assertNotComplex","MathBackendCPU","firstUse","nextDataId","outId","encodedValues","complexTensorInfos","decodedData","unaryKernelFunc","cpuBackend","xSize","$dtype","makeTensorInfo","unaryKernelFuncFromImpl","unaryImpl","xi","eluConfig","identityConfig","outVals","leakyReluConfig","createSimpleBinaryKernelImpl","aVals","bVals","resultRank","resultStrides","aRank","bRank","aStrides","bStrides","aBroadcastDims","bBroadcastDims","aLoc","bLoc","preluImpl","xValue","aValue","resultData","preluConfig","reluConfig","relu6Config","sigmoidConfig","realVals","imagVals","complexInfo","complexConfig","realVal","realConfig","zerosTensorInfo","floatX","disposeIntermediateTensorInfo","realPart","resultValues","castConfig","binaryKernelFunc","simpleImpl","complexImpl","$aComplex","$aComplexVals","aReal","aImag","aRealVals","aImagVals","$bComplex","$bComplexVals","bReal","bImag","bRealVals","bImagVals","resultRealData","resultImagData","resultReal","resultImag","createComplexBinaryKernelImpl","resultSize","resultRealVals","resultImagVals","aIdx","bIdx","opResult","addImpl","addComplexImpl","addConfig","$shape","$xSize","xData","reshapeConfig","batchMatMul","b3dShape","a3d","b3d","sharedDim","leftDim","rightDim","a3dValues","b3dValues","a3dStrides","b3dStrides","aBatch","aOuterStep","aInnerStep","bInnerStep","bOuterStep","bBatch","resVals","bi","i0","j0","k0","iBlock","jBlock","kBlock","batchOffsetA","batchOffsetB","batchMatMulConfig","_fusedMatMulConfig","addRes","activationRes","intermediates","simpleAbsImpl","absConfig","makeOutput","acosConfig","acoshConfig","addNConfig","outBuf","currVals","transposeImpl","xStrides","newLoc","transposeConfig","allConfig","permutedAxes","reduceShape","reshapedResult","anyConfig","anyVal","argMaxConfig","intermediateTensorInfos","argMinConfig","minIndex","asinConfig","asinhConfig","atanConfig","atan2Impl","bValue","atan2Config","atanhConfig","xValues","poolType","padTop","padLeft","POSITIVE_INFINITY","outputVals","outputBatchStrides","outputRowStrides","outputColStrides","outputBatchOffset","inputBatchOffset","yR","xRCorner","xRMin","xRMax","outputRowOffset","yC","xCCorner","xCMin","xCMax","minMaxValue","avgValue","xROffset","pixel","maxPoolPositions","flattenPositions","maxPositions","xBuf","maxPosition","wR","wC","padFront","outputDepthStrides","yDepth","xDepthCorner","xDepthMin","xDepthMax","outputDepthOffset","yRow","xRowCorner","xRowMin","xRowMax","yCol","xColCorner","xColMin","xColMax","outputColOffset","xDepth","xDepthOffset","xRow","xRowOffset","xCol","avgPoolConfig","avgPool3DConfig","avgMultiplier","dyBuf","bufferSync","dxDepth","dxRow","dxCol","dyDepthCorner","dyRowCorner","dyColCorner","dotProd","wDepth","dyDepth","wRow","dyRow","wCol","dyCol","dyData","dxR","dxC","dyRCorner","dyCCorner","dyR","dyC","batchNormConfig","mVals","varVals","sVals","offVals","offValsLength","sValsLength","varValsLength","mValsLength","offi","mi","si","vi","sliceImpl","isContinous","inBuf","outLoc","inLoc","$size","sliceConfig","batchToSpaceNDConfig","xReshaped","xTransposedReshaped","bincountImpl","weightsVals","weightsDtype","weightsShape","weightsSize","bincountReduceImpl","weightsBuf","bincountConfig","createSimpleUnaryImpl","ceilImpl","ceilConfig","clip","clipAttrs","clipConfig","complexAbsConfig","complexVals","hypot","concatImpl","simplyConcat","colOffset","tIdx","resIdx","col","imagVal","imagConfig","$inputs","reals","imags","realConcated","imagConcated","inputs2D","innerSize","inputsValShapes","finalOutShape","concatConfig","conv2D","isChannelsLast","filterStrides","xBatchStride","xRowStride","xColStride","xChannelStride","yBatchStride","yRowStride","yColStride","yChannelStride","wVals","xOffset1","yOffset1","yOffset2","wOffset1","xOffset2","yOffset3","xOffset3","wOffset3","d1","xVal","d2","conv2DConfig","conv2DBackpropFilterConfig","dW","leftPad","topPad","dyVals","yRMin","yRMax","yCMin","yCMax","conv2DBackpropInputConfig","dyStrides","dxValues","dyValues","fltValues","fltS0","fltS1","fltS2","dyOffset","fltOffset","conv3DConfig","yF","xFCorner","wF","wOffset2","yOffset4","xOffset4","wOffset4","conv3DBackpropFilterV2Config","dw","dwValues","dwS0","dwS1","dwS2","dwS3","dyS0","dyS1","dyS2","dyS3","xS0","xS1","xS2","xS3","frontPad","yFMin","yFMax","conv3DBackpropInputV2Config","dxS0","dxS1","dxS2","dxS3","fltS3","xFMin","cosConfig","coshConfig","cropAndResizeConfig","cropHeight","cropWidth","boxVals","boxIndVals","imageVals","inStride","outStride","startInd","y1","y2","bInd","heightScale","widthScale","yInd","ind","topInd","bottomInd","yLerp","xInd","leftInd","rightInd","xLerp","topLeft","topRight","bottomLeft","closestX","closestY","inInd","outInd","cumsumConfig","permutedAxis","resultDtype","finalDim","indexAdjuster","prevIdx","reverseTransposedResult","denseBincountConfig","depthToSpaceConfig","outputHeight","outputWidth","outputDepth","outputIdx","inH","offsetH","inW","offsetD","inputIdx","depthwiseConv2dNative","chMul","depthwiseConv2dNativeConfig","depthwiseConv2dNativeBackpropFilterConfig","dm","depthwiseConv2dNativeBackpropInputConfig","diagConfig","dilation2dConfig","filterVals","filterRank","outSize","outRank","hBeg","wBeg","curVal","hIn","wIn","filterIndex","dilation2dBackpropFilterConfig","hMax","wMax","dilation2dBackpropInputConfig","hInMax","wInMax","multiplyImpl","multiplyComplexImpl","multiplyConfig","permutedX","oldResult","sumConfig","einsumConfig","numDimsRemaining","idTerm","dimsToExpand","equalImpl","equalConfig","a1","a2","a3","a4","a5","erfConfig","expImpl","expConfig","$dim","expandDimsConfig","expm1Impl","expm1Config","realDivImpl","realDivConfig","subImpl","subComplexImpl","subConfig","fftBatch","innerDim","inputVals","real2D","imag2D","fftImpl","$realInfo","$imagInfo","inputSize","fftRadix2","realInfo","imagInfo","sizeInfo","sizeInfoCopy","divRealInfo","divImagInfo","divRealVals","divImagVals","term","fourierTransformByMatmul","evenComplex","evenRealVals","evenImagVals","evenShape","evenRealInfo","evenImagInfo","evenTensorInfo","oddComplex","oddRealVals","oddImagVals","oddShape","oddRealInfo","oddImagInfo","oddTensorInfo","$evenComplex","$evenRealVals","$evenImagVals","$evenShape","$evenRealInfo","$evenImagInfo","$evenTensorInfo","$oddComplex","$oddRealVals","$oddImagVals","$oddShape","$oddRealInfo","$oddImagInfo","$oddTensorInfo","eShape","eRealInfo","eImagInfo","exponentInfo","addPart","subPart","addPartReal","subPartReal","addPartImag","subPartImag","$realVals","$imagVals","fftConfig","input2D","resultReshaped","fillValues","fillConfig","flipLeftRightConfig","batchIdx","batchOffset","rowOffset","coordX","outputValue","floorImpl","floorConfig","floorDivImpl","floorDivConfig","fusedConv2DConfig","resultOld","fusedDepthwiseConv2DConfig","gatherNdConfig","paramsSize","numSlices","indicesData","paramsData","flattenIndex","gatherV2Impl","indicesBuf","flattenOutputShape","originalLoc","indicesIdx","indicesIndex","originalIndex","gatherV2Config","$batchDims","shapeInfo","flattenX","greaterImpl","greaterConfig","greaterEqualImpl","greaterEqualConfig","ifftConfig","isFiniteConfig","isInfConfig","isNaNConfig","lessImpl","lessConfig","lessEqualImpl","lessEqualConfig","linSpaceImpl","linSpaceConfig","logImpl","logConfig","log1pConfig","logicalAndImpl","logicalAndConfig","logicalNotConfig","logicalOrImpl","logicalOrConfig","lRNConfig","channels","maxD","sumAcrossChannels","currentChannel","beginSumOffset","endSumOffset","lRNGradConfig","dySize","yValues","depthBegin","depthEnd","dyi","maxImpl","maxOutShape","maxConfig","maximumImpl","maximumConfig","maxPoolConfig","maxPool3DConfig","maxPosBuf","maxPool3dPositions","maxPoolWithArgmaxConfig","pooled","maxPools","maxPoolWithArgmaxImpl","pooledDataId","indexesDataId","meanConfig","toDispose","reduceSizeScalar","minConfig","minimumImpl","minimumConfig","mirrorPadConfig","coords","inIndex","modImpl","rem","modConfig","logitsRank","maxLogit","expandedShape","maxLogitReshaped","sumExp","sumReshaped","softmaxConfig","multinomialConfig","probabilities","numEvents","probVals","resShape","cdf","outOffset","sampleId","negImpl","xDtype","minusOne","negConfig","nonMaxSuppressionV3Config","nonMaxSuppressionV4Config","nonMaxSuppressionV5Config","maxOutputSizeVal","iouThresholdVal","scoreThresholdVal","softNmsSigmaVal","notEqualImpl","notEqualConfig","oneHotConfig","indicesVal","imagPart","zerosLikeConfig","onesLikeConfig","pack","expandedT","packConfig","padV2Config","powImpl","powConfig","prodImpl","outDtype","prodConfig","rangeImpl","rangeConfig","reciprocalConfig","resizeBilinearConfig","imagesStrides","newHeight","newWidth","oldHeight","oldWidth","effectiveInputSize","effectiveOutputSize","effectiveRowSizeRatio","effectiveColSizeRatio","sourceFracRow","sourceRowFloor","rowFrac","sourceRowCeil","topRowOffset","botRowOffset","sourceFracCol","sourceColFloor","colFrac","sourceColCeil","topLeftOffest","botLeftOffset","topRightOffset","botRightOffest","xHeight","xWidth","yHeight","yWidth","effectiveXSize","effectiveYSize","bOffset","topDxRIndex","bottomDxRIndex","topDxROffset","bottomDxROffset","dxRLerp","inverseDxRLerp","leftDxCIndex","rightDxCIndex","dxCLerp","inverseDxCLerp","topLeftRCOffset","topRightRCOffset","bottomLeftRCOffset","bottomRightRCOffset","inverseDxRLerpTimesInverseDxCLerp","inverseDxRLerpTimesDxCLerp","dxRLerpTimesInverseDxCLerp","dxRLerpTimesDxCLerp","dyVal","resizeNearestNeighborConfig","outputOffset","sourceNearestRow","sourceNearestCol","invHeightScale","invWidthScale","winHeight","winWidth","startRLerp","startDyR","startCLerp","startDyC","accum","dyRIndex","dyROffset","dyCIndex","dyCOffset","reverseConfig","$dims","rotateWithOffsetConfig","centerX","centerY","sinFactor","cosFactor","coordY","roundConfig","rsqrtImpl","rsqrtConfig","scatterImpl","sumDupeIndices","flattenShape","updatesData","scatterNdConfig","selectConfig","conditionRank","tValues","eValues","seluConfig","signConfig","sinConfig","sinhConfig","tooLarge","tooSmall","expX","softplusConfig","spaceToBatchNDConfig","completePaddings","paddedX","reshapedPaddedShape","permutedReshapedPaddedPermutation","paddedXReshaped","paddedXT","sparseFillEmptyRowsImpl","indicesDType","valuesDType","indicesCount","denseRows","rowsAreOrdered","lastIndicesRow","csrOffset","allRowsFull","rowEmpty","fullIndicesCount","filledCount","outputI","startingIndex","sparseFillEmptyRowsConfig","outputIndicesShape","sparseReshapeImpl","inputIndicesShape","denseSize","nnz","outputRank","unknownIndex","missing","inputStrides","outputStrides","sparseReshapeConfig","sparseToDenseConfig","splitVConfig","sliceT","sqrtConfig","squareConfig","squaredDifferenceImpl","squaredDifferenceConfig","stepAttrs","stepConfig","stridedSliceImpl","stridedSliceConfig","sliced","tanConfig","tileImpl","topKImpl","allTopKVals","allTopKIndices","topKVals","topKIndices","mapCoord","outCoord","inCoord","sz2","mapCoordReflect","sz","mapCoordWrap","mapCoordNearest","mapCoordConstant","readWithFillValue","batchStride","rowStride","colStride","nearestInterpolation","bilinearInterpolation","yFloor","xFloor","yCeil","xCeil","uniqueImpl","uniqueElements","inputBuffer","uniqueIndices","is1DTensor","axisValues","uniqueIndex","outputTmpShape","outputBuffer","uniqueElementIndex","kernelConfigs","transformVals","outY","outX","projection","inX","inY","valueRank","outIndex","tempRes","expanded","scalarValue","segmentId","maskCasted","sumTensorInfo","WEBGL_ATTRIBUTES","antialias","premultipliedAlpha","preserveDrawingBuffer","stencil","failIfMajorPerformanceCaveat","getWebGLContext","webGLVersion","newCtx","OffscreenCanvas","createCanvas","addEventListener","ev","preventDefault","getWebGLRenderingContext","gl","isContextLost","disable","DEPTH_TEST","STENCIL_TEST","BLEND","DITHER","POLYGON_OFFSET_FILL","SAMPLE_COVERAGE","enable","SCISSOR_TEST","CULL_FACE","cullFace","BACK","PackingScheme","TextureUsage","PhysicalTextureType","getUnpackedMatrixTextureShapeWidthHeight","getDenseTexShape","getPackedMatrixTextureShapeWidthHeight","getTextureConfig","textureHalfFloatExtension","glany","internalFormatFloat","internalFormatHalfFloat","internalFormatPackedHalfFloat","internalFormatPackedFloat","textureFormatFloat","downloadTextureFormat","downloadUnpackNumChannels","defaultNumChannels","textureTypeHalfFloat","textureTypeFloat","getNumber","R32F","R16F","RGBA16F","RGBA32F","RED","HALF_FLOAT","FLOAT","RGBA","HALF_FLOAT_OES","callAndCheck","returnValue","getError","NO_ERROR","INVALID_ENUM","INVALID_VALUE","INVALID_OPERATION","INVALID_FRAMEBUFFER_OPERATION","OUT_OF_MEMORY","CONTEXT_LOST_WEBGL","getWebGLErrorMessage","checkWebGLError","canBeRepresented","getExtensionOrThrow","extensionName","throwIfNull","getExtension","lineNumberRegex","validateProgram","program","getProgramParameter","VALIDATE_STATUS","getProgramInfoLog","bindVertexBufferToProgramAttribute","attribute","arrayEntriesPerItem","itemStrideInBytes","itemOffsetInBytes","getAttribLocation","bindBuffer","ARRAY_BUFFER","vertexAttribPointer","enableVertexAttribArray","bindTextureToProgramUniformSampler","texture","uniformSamplerLocation","textureUnit","maxTextureUnit","MAX_COMBINED_TEXTURE_IMAGE_UNITS","glTextureUnit","TEXTURE0","validateTextureUnit","activeTexture","bindTexture","TEXTURE_2D","bindTextureUnit","uniform1i","bindColorTextureToFramebuffer","framebuffer","bindFramebuffer","FRAMEBUFFER","framebufferTexture2D","COLOR_ATTACHMENT0","unbindColorTextureFromFramebuffer","validateFramebuffer","checkFramebufferStatus","FRAMEBUFFER_COMPLETE","FRAMEBUFFER_INCOMPLETE_ATTACHMENT","FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT","FRAMEBUFFER_INCOMPLETE_DIMENSIONS","FRAMEBUFFER_UNSUPPORTED","getFramebufferErrorMessage","returnTOrNull","failureMessage","tOrNull","getBatchDim","dimsToSkip","getRowsCols","getShapeAs3D","shapeAs3D","isEven","isReshapeFree","shape1Cols","shape2Cols","MAX_TEXTURE_SIZE","MAX_TEXTURES_IN_SHADER","hasExtension","isWebGLVersionEnabled","createFloatTextureAndBindToFramebuffer","texConfig","createTexture","texImage2D","frameBuffer","createFramebuffer","isFrameBufferComplete","deleteTexture","deleteFramebuffer","getGlslDifferences","varyingVs","varyingFs","texture2D","defineOutput","defineSpecialNaN","defineSpecialInf","defineRound","getLogicalCoordinatesFromFlatIndex","getFlatIndexFrom3D","getParameter","getWebGLMaxTextureSize","MAX_TEXTURE_IMAGE_UNITS","getMaxTexturesInShader","queryTimerVersion","getWebGLDisjointQueryTimerVersion","isCapableOfRenderingToFloatTexture","COLOR_BUFFER_HALF_FLOAT","createHalfFloatTextureAndBindToFramebuffer","isDownloadFloatTextureEnabled","isWebGLFenceEnabled","fenceSync","ENCODE_FLOAT_SNIPPET","DecodeMatrixProgram","packedInputs","packedOutput","outPackingScheme","DENSE","texShape","glsl","userCode","DecodeMatrixPackedProgram","EncodeFloatProgram","outTexUsage","DOWNLOAD","EncodeFloatPackedProgram","EncodeMatrixProgram","inputIsUnsignedByte","EncodeMatrixPackedProgram","mainLoop","createAndConfigureTexture","internalFormat","textureFormat","textureType","maxTextureSize","tex2d","texParameteri","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","TEXTURE_MIN_FILTER","NEAREST","TEXTURE_MAG_FILTER","getInternalFormatForFloat32MatrixTexture","textureConfig","getInternalFormatForFloat16MatrixTexture","getInternalFormatForUnsignedBytesMatrixTexture","getInternalFormatForPackedMatrixTexture","getInternalFormatForFloat16PackedMatrixTexture","GPGPUContext","outputTexture","disposed","vertexAttrsAreBound","itemsToPoll","glVersion","setWebGLContext","COLOR_BUFFER_FLOAT","TEXTURE_FLOAT","TEXTURE_HALF_FLOAT","textureFloatExtension","colorBufferFloatExtension","colorBufferHalfFloatExtension","vertexBuffer","createBuffer","bufferData","STATIC_DRAW","indexBuffer","ELEMENT_ARRAY_BUFFER","finish","deleteBuffer","UNSIGNED_BYTE","dataForUpload","texelDataType","downloadMatrixDriver","downloadTarget","readPixels","physicalRows","physicalCols","gl2","PIXEL_PACK_BUFFER","getBufferSubData","bindTextureToFrameBuffer","bufferSizeBytes","bytesPerFloat","STREAM_READ","unbindTextureToFrameBuffer","fenceContext","createFence","pollFence","isFencePassed","sync","SYNC_GPU_COMMANDS_COMPLETE","flush","clientWaitSync","ALREADY_SIGNALED","CONDITION_SATISFIED","beginQuery","endQuery","isQueryAvailable","packedRGBA","fragmentShaderSource","fragmentShader","createShader","FRAGMENT_SHADER","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","shaderInfoLog","lineNumberRegexResult","exec","lineNumber","shaderLines","linesWithLineNumbers","maxLineLength","beforeErrorLines","errorLine","afterErrorLines","logShaderSourceAndInfoLog","getShaderInfoLog","vertexShader","vertexShaderSource","VERTEX_SHADER","createProgram","attachShader","linkProgram","LINK_STATUS","debug","setProgram","deleteProgram","useProgram","uniformName","shouldThrow","getUniformLocation","inputMatrixTexture","uniformLocation","throwIfNoProgram","outputMatrixTexture","setOutputMatrixTextureDriver","outputPackedMatrixTexture","startRow","startColumn","setOutputMatrixWriteRegionDriver","debugValidate","drawElements","TRIANGLES","UNSIGNED_SHORT","disjointQueryTimerExtension","getQueryTimerExtension","ext","getQueryTimerExtensionWebGL2","createQuery","TIME_ELAPSED_EXT","getQueryTimerExtensionWebGL1","createQueryEXT","beginQueryEXT","endQueryEXT","getQueryTime","getQueryParameter","QUERY_RESULT","getQueryObjectEXT","QUERY_RESULT_EXT","available","QUERY_RESULT_AVAILABLE","disjoint","GPU_DISJOINT_EXT","QUERY_RESULT_AVAILABLE_EXT","addItemToPoll","linearSearchLastTrue","isDoneFn","resolveFn","pollItems","downloadAndDecode","outputMatrixTextureMaybePacked","viewport","scissor","makeShader","inputsInfo","usesPackedTextures","prefixSnippets","logicalShape","isUniform","inputPrefixSnippet","inputSamplingSnippet","inInfo","outShapeInfo","getPackedSamplerFromInInfo","getSamplerFromInInfo","inputInfo","texName","texFuncSnippet","funcName","broadcastDims","getCoordsDataType","rankDiff","coordsSnippet","unpackedCoordsSnippet","isInputScalar","isOutputScalar","getPackedSamplerAtOutputCoords","outTexShape","inTexShape","getSamplerAtOutputCoords","getInputSamplingSnippet","floatTextureSampleSnippet","getFloatTextureSampleSnippet","outputSamplingSnippet","floatTextureSetOutputSnippet","shaderPrefix","SAMPLE_1D_SNIPPET","SAMPLE_2D_SNIPPET","SAMPLE_3D_SNIPPET","getShaderPrefix","isPacked","packedTexShape","getOutputPacked1DCoords","texelsInLogicalRow","getOutputPacked2DCoords","texelsInBatch","getOutputPacked3DCoords","texelsInBatchN","getOutputPackedNDCoords","getPackedOutputSamplingSnippet","getFloatTextureSetRGBASnippet","getOutput2DCoords","coordsFromIndexSnippet","getOutput3DCoords","getOutput4DCoords","getOutput5DCoords","getOutput6DCoords","getOutputSamplingSnippet","getFloatTextureSetRSnippet","SHADER_PACKED_PREFIX","texNumR","texNumC","tNumR","tNumC","getFlatOffsetUniformName","getSamplerScalar","getUniformSampler","getSampler1D","squeezeInputInfo","getSqueezedParams","getSampler2D","stride0","stride1","getSampler3D","stride2","getSampler4D","stride3","getSampler5D","stride4","getSampler6D","getPackedSamplerScalar","getPackedSampler1D","getPackedSampler2D","valuesPerRow","getPackedSampler3D","getPackedSamplerND","newInputInfo","validateBinaryAndProgram","shapeInfos","texShapeA","texShapeB","texData","addImplCPU","bincountImplCPU","bincountReduceImplCPU","ceilImplCPU","concatImplCPU","expImplCPU","expm1ImplCPU","floorImplCPU","gatherV2ImplCPU","greaterImplCPU","lessImplCPU","linSpaceImplCPU","logImplCPU","maxImplCPU","maximumImplCPU","minimumImplCPU","multiplyImplCPU","negImplCPU","prodImplCPU","rangeImplCPU","rsqrtImplCPU","simpleAbsImplCPU","sliceImplCPU","sparseFillEmptyRowsImplCPU","sparseReshapeImplCPU","stridedSliceImplCPU","subImplCPU","tileImplCPU","topKImplCPU","transposeImplCPU","uniqueImplCPU","getVecChannels","getChannels","PackProgram","outOfBoundsCondition","getOutOfBoundsCondition","setup","getSetup","sourceCoords","coord","getSourceCoordsArr","getOutput","ReshapePackedProgram","thisRC","TextureManager","gpgpu","numUsedTextures","numFreeTextures","_numBytesAllocated","_numBytesFree","freeTextures","logEnabled","usedTextures","shapeRC","usage","physicalTexType","getPhysicalFromLogicalTextureType","getKeyFromTextureShape","texBytes","computeBytes","newTexture","PACKED_2X2_FLOAT32","createPackedMatrixTexture","PACKED_2X2_FLOAT16","createFloat16PackedMatrixTexture","UNPACKED_FLOAT32","createFloat32MatrixTexture","UNPACKED_FLOAT16","createFloat16MatrixTexture","PACKED_4X1_UNSIGNED_BYTE","createUnsignedBytesMatrixTexture","logicalTexType","deleteTexThreshold","deleteMatrixTexture","texList","texIndex","freeRatio","tex","internalFormatForPhysicalTexType","packedWidth","packedHeight","numBytesForInternalFormat","UPLOAD","RENDER","getPhysicalTextureForRendering","PIXELS","shapeRowsCol","UnaryOpProgram","opSnippet","ABS","CLONE","UnaryOpPackedProgram","UnpackProgram","getSourceCoords","binaryCaches","MathBackendWebGL","pendingRead","pendingDisposal","WeakSet","dataRefCount","numBytesInGPU","uploadWaitMs","downloadWaitMs","lastGlFlushTime","warnedAboutMemory","pendingDeletes","binaryCache","gpgpuCreatedLocally","textureManager","numMBBeforeWarning","screen","devicePixelRatio","checkNumericalProblems","runWebGLProgram","convertAndCacheOnCPU","shouldTimeProgram","activeTimers","getValuesFromTexture","subscribers","tmpDownloadTarget","tmpData","createBufferFromTexture","createAndWaitForFence","downloadFloat32MatrixFromBuffer","dTypeVals","tmpTarget","downloadMatrixFromPackedTexture","shouldUsePackedProgram","downloadByteEncodedFloatMatrixFromOutputTexture","oldActiveTimers","newActiveTimers","outerMostTime","programTimersStack","flattenedActiveTimerQueries","flattenedActiveTimerNames","ms","numBytesInGPUAllocated","numBytesAllocated","numBytesInGPUFree","numBytesFree","startMs","endMs","waitForQueryAndGetTime","timerQuery","releaseGPUData","origDataId","releaseTexture","uploadToGPU","sizeThreshold","compileAndRun","shouldExecuteOnCPU","outValues","packedUnaryOp","afterShape","input3DShape","input3D","afterShapeAs3D","outputDtype","customSetup","preventEagerUnpackingOfOutput","outData","texelShape","dataToDispose","inputsData","uniformValues","unpackTensor","packTensor","savedInput","packedReshape","outputData","keyInputs","hasOffset","keyUserCode","binary","getAndSaveBinary","inputInfos","inShapeInfos","webGLProgram","infLoc","nanLoc","uniformLocations","startTimer","outTex","setOutputPackedMatrixTexture","setOutputMatrixTexture","uniform1f","varLoc","varOffsetLoc","uniform1fv","setInputMatrixTexture","executeProgram","endTimer","glFlushThreshold","unpacked","getBinary","HTMLCanvasElement","remove","floatPrecisionValue","debugFlag","underflowCheckValue","logShape","maxTexSize","squeezeResult","isByteArray","tempDenseInputHandle","uploadDenseMatrixToTexture","getTexture","preventEagerUnpacking","encodedOutputTarget","outputTexData","acquireTexture","float32Values","float32ToTypedArray","texType","mb","BinaryOpProgram","BinaryOpPackedProgram","checkOutOfBounds","supportsBroadcasting","checkOutOfBoundsString","realTensorInfo","imagTensorInfo","LEAKYRELU","LEAKYRELU_PACKED","$alpha","PRELU","PRELU_PACKED","packedOpSnippet","cpuKernelImpl","webglBackend","supportsComplex","aData","bData","complexParts","aPart","bPart","aHandle","bHandle","complexOutput","mapActivationToShaderProgram","packed","CHECK_NAN_SNIPPET","MatMulPackedProgram","addBias","hasPreluActivation","hasLeakyreluActivation","sharedDimensionPacked","aSample","bSample","aSwizzle","bSwizzle","activationSnippet","applyActivationSnippet","addBiasSnippet","batchASnippet","batchBSnippet","BinaryOpComplexProgram","MUL","realProgram","imagProgram","xTexData","MeanProgram","reduceInfo","divisor","windowSizeNearestVec4","windowSizeVec4Remainder","updateSnippet","toPrecision","ReduceProgram","reduceType","initializationValue","compareOp","vecType","reductionType","reductionStages","stages","getReductionStages","previousResult","TransposeProgram","switched","originalOrder","switchedCoords","getSwitchedCoords","TransposePackedProgram","outputOrder","switchedOrder","nextColumn","getc","sumInputIsTransposed","sumInput","sumOutShape","reshapedInput","reduced","sumImpl","batchMatMulImpl","a3dShape","hasBias","hasPreluActivationWeights","hasLeakyreluAlpha","fusedActivation","aVec","bVec","shouldReshapeB","aVec3d","bVec3d","$leakyreluAlpha","outReshaped","ADD","addKernelFunc","AddNProgram","snippets","operation","AddNPackedProgram","midIndex","leftSide","rightSide","a2D","ArgMinMaxProgram","firstPass","compOp","indexSnippet","ArgMinMaxPackedProgram","sourceLocSetup","sourceRank","sourceLocDType","inChannel","intChannels","srcRCoords","srcGCoords","srcBCoords","srcACoords","fetchCandidateIdx","fetchValue","getBestIndicesAChannelSnippet","argReduce","bestIndicesA","argReducePacked","argMinMaxReduce","CHECK_NAN_SNIPPET_BINARY","Pool2DProgram","computePositions","isAvgPool","batchFlattenPositionStr","flattenPositionStr","filterWidthNearestVec4","filterWidthVec4Remainder","Pool3DProgram","avgPoolProgram","AvgPool2DBackpropProgram","AvgPool3DBackpropProgram","avgPoolGrad3DConfig","avgPoolBackpropProgram","BatchNormProgram","meanShape","varianceShape","offsetShape","scaleShape","offsetSnippet","scaleSnippet","BatchNormPackedProgram","finalInputs","SliceProgram","destSize","uniformPart","getCoords","startLoc","getUniformLocationNoThrow","uniform1iv","SlicePackedProgram","sourceLoc","getChannel","upperRow","lowerRow","getCustomSetupFunc","newTexData","shallowSlice","reshapedIntermediate","transposedIntermediate","reshapedIntermediate2","zerosTensor","CEIL","ClipProgram","minLoc","maxLoc","ClipPackedProgram","clipByValueConfig","ComplexAbsProgram","makeComplexComponentTensorInfo","complexTensor","complexPart","programInputs","ConcatProgram","offsets","lastIndex","lastShift","ConcatPackedProgram","lastChannels","allChannels","getValueSnippet","shiftedChannels","channelIdx","runOnCpu","tensors2D","computeTensors2D","Conv2DProgram","inputDepthNearestVec4","inputDepthVec4Remainder","rowDim","colDim","channelDim","Conv3DProgram","Im2ColPackedProgram","itemsPerBlockRow","unrolled","conv2dByMatMul","sharedMatMulDim","outerShapeX","outerShapeFilter","batchMatMulWillBeUnpacked","reshapeWillBeExpensive","originalXTexDataShape","filterReshaped","pointwiseConv","pointwiseConvTexData","conv2dWithIm2Row","x2ColShape","xSqueezed","w2Row","im2ColProgram","im2Col","im2ColReshaped","matmulProgram","Conv2DDerFilterProgram","Conv2DDerInputProgram","Conv3DDerFilterProgram","Conv3DDerInputProgram","conv3DBackpropInputConfig","CHECK_NAN_SNIPPET_UNARY","CropAndResizeProgram","imageShape","boxShape","methodId","inputHeightFloat","inputWidthFloat","heightRatio","widthRatio","CumSumProgram","idxString","getFinalCoord","prevResult","DepthToSpaceProgram","getHeightCoordString","getWidthCoordString","getDepthCoordString","getOutputDepthSize","getInputSamplingString","DepthwiseConv2DProgram","hasLeakyReluAlpha","xNumRows","xNumCols","channelMul","DepthwiseConvPacked2DProgram","texelsAcross","texelC","colIndex","nextTexelOffset","DepthwiseConv2DDerFilterProgram","DepthwiseConv2DDerInputProgram","DiagProgram","flat","Dilation2DProgram","dilation2DConfig","EXP","EXPM1","FFTProgram","component","exponentMultiplierSnippet","resultDenominator","opString","complexOutputReshaped","FillProgram","valueLoc","FlipLeftRightProgram","FLOOR","FromPixelsProgram","FromPixelsPackedProgram","fromPixelsConfig","tempPixelHandle","uploadPixelDataToTexture","shouldPackDepthwiseConv","GatherNDProgram","stridesType","strideString","flattenIndices","GatherProgram","currentCoords","LRNProgram","radius","rad","powOperator","basis","LRNPackedProgram","LRNConfig","LRNGradProgram","LRNGradConfig","maxInputIsTransposed","maxInput","maxInputValues","reshapedOutput","maxPoolProgram","MaxPool2DBackpropProgram","MaxPool3DBackpropProgram","maxPoolGrad3DConfig","maxPool3dPositionsProgram","maxPoolBackpropProgram","maxPoolPositionsProgram","maxPoolBackPropProgram","poolOutput","meanInputIsTransposed","meanInput","meanInputValues","meanOutShape","meanImpl","MirrorPadProgram","unpackedCoords","MirrorPadPackedProgram","cLimit","padSetup","MultinomialProgram","seedLoc","realDiv","SUB","maxLogitsReshaped","sumExpReshaped","probs","NEG","OneHotProgram","numIndices","PadProgram","PadPackedProgram","componentSetup","paddingArea","ResizeBilinearProgram","effectiveInSize","effectiveOutSize","sourceFracIndexRC","ResizeBilinearPackedProgram","ResizeBilinearBackpropProgram","ResizeNearestNeighborProgram","roundBase","ResizeNearestNeighborPackedProgram","ResizeNearestNeigborBackpropProgram","ReverseProgram","inCoords","getInCoord","ReversePackedProgram","nextRow","inCoordsArray","channels1","getR","getG","getB","getA","RotateProgram","fillSnippet","paramsLoc","uniform4f","ScatterProgram","updateSize","updatesRank","summingDupeIndex","indicesString","indicesSnippet","updatesString","updatesSnippet","SelectProgram","cRank","cCoords","abCoords","cCoordVars","abCoordVars","reshapedPaddedX","StridedSliceProgram","inputDtype","newCoords","outputAxis","TileProgram","TransformProgram","interpolationModeId","fillModeId","SegmentOpProgram","segOpInfo","segOpType","checkValueOutOfBounds","checkSegmentIdOutOfBounds","segOpCompute","rangeInfo","tileInfo","regex","opts","exact","Configs","table_width","table_truncate","dtype_test_lim","table_max_row","table_max_col_in_console","utils","Utils","__in_object","df_list","df_object","duplicate_col_count","max_length","a_key","column","col_name","column_length","null_array","DataFrame","row_indexes","col_i","r_index","column_set","df_columns","not_exist","col_index","row_value","new_arr","Series","_set_column_property","col_vals","col_data","col_names","column_names","addColumn","csvFilePath","csvContent","require","writeFileSync","webCSV","encodeURI","params_needed","_throw_wrong_params_error","to_drop","new_col_data","new_dtype","col_idx","dtypes","old_cols","new_columns","df","__set_col_property","__update_frame_in_place","__key_in_object","new_data","new_index","data_idx","__remove_arr","row_data_tensor","tf","__set_index","indexLoc","row_len","indx","shuffled_index","iloc","other","__frame_is_compactible_for_operation","__get_ops_tensors","sum_vals","__get_df_from_tensor","val_mean","_remove_nans","temp_mean","arraySync","sf","tensor_vals","col_data_tensor","median","__median","operands","__get_tensor_and_idx","std","__count_nan","dp","new_vals","__round","ops","df_data","temp_val","temp_data","curr_val","__get_col_values","__cum_ops","inplace","copy","__reset_index","drop","numeric_df","select_dtypes","stats_arr","col_series","_stats","include","original_col_vals","__supported_dtypes","val_sums","temp_sum","abs_data","t_axis","operators","column_index","operator","data_value","elem","eval","new_df","column_name","data_length","new_val","new_dtypes","__get_t","new_col_names","col_dtype","col_dict","getRecursiveDict","uniq_columns","first_uniq_columns","remaining_columns","c_dict","col_value","column_data","__unique","GroupBy","__arr_to_obj","__temp","final_data","nan_val","__isna","df_values","index_data","__is_function","callable","callable_data","new_row","__is_1D_array","__logical_ops","new_col_data_obj","temp_col_data","replaced_arr","old_arr","inner_arr","logical_type","int_vals","__is_number","series","__map_int_to_bool","new_array","__is_undefined","tensors_arr","this_tensor","other_tensor","new_values","Plot","new_types","col_types","col_values","new_col_values","temp_col","new_col_obj","cname","_unique","_index","data_set","_nunique","old_col_names","old_index","row_index","asc","index_val","__sort_by","column_val","row_data","col_obj","_res","_get_row_and_col_values","index_arr","df_index","sorted_val","__sort","duplicate_obj","__get_duplicate","indexs","row_i","df2","__is_object","d_types","Ndframe","NDframe","_read_array","_read_object","__is_string","__replace_undefined_with_NaN","_set_col_types","row_arr","data_arr","infer","new_idx","temp_arr","records","header","csv_str","json_arr","get_width","get_truncate","max_row","get_max_row","max_col_in_console","get_max_col_in_console","table_config","col_len","sub_idx","values_1","value_2","first_4_cols","last_3_cols","df_subset_1","df_subset_2","truncate","table_data","table","key_col","data_tensors","sub_col_dict","dfs","sub_data_tensors","selected_column","group_col","sub_group_col","gp","group_col_name","ops_name","ops_map","is_array_operation","count_group","local","sub_count_group","arithemetic","to_DataFrame","col_gp","operations","last_key","toLocaleLowerCase","concatPathAndNode","n_array","sanitized_k","recursiveCount","sub_df_data","callable_value","callable_rslt","ndframe","isColumnSplit","column_split","__range","row_idx","data_values","row_val","max_rowIndex","max_colIndex","final_row","__convert_2D_to_1D","__check_series_op_compactibility","div_result","tensor1","tensor2","_throw_str_dtype_error","max_result","sorted_values","arr_obj","range_idx","sorted_idx","_sort_arr_with_index","is_callable","s_data","data_dict","__bool_ops","old_values","isna_vals","isna","ascending","sorted_index","sort_values","b_ops","r_series","l_series","l_val","r_val","Boolean","el","Str","timeseries","TimeSeries","preprocessed","__create_new_sf_from","f_char","l_char","new_str","position","final_arr","l_str","r_str","searchValue","replaceValue","startIndex","endIndex","splitVal","valToJoin","joinChar","r_char","new_char","__in_format","__monthName","__weekName","format_values","generate_format","date_list","date_string","format_dateString","__apply_format","valueDate","__is_validDate","is_timestamp","string2int","format_list","int2string","date_instance","toDateString","__date_ops","getMonth","getHours","getDay","getFullYear","getDate","getSeconds","getMinutes","to_datetime","destructive","selected","population","cols_len","cols_arr","first_col_len","rows_len","rows_arr","temp_row","isSeries","full_arr","ele","arr_val","lim","int_tracker","float_tracker","string_tracker","bool_tracker","get_dtype_test_lim","__checker","arr_map","return_val","null_count","val_count","result_arr","ele_arr","modes","arr_ele","gen_num","randi","recursive","recur_val","outer_val","tensor_data","zero_data","isNode","temp_obj","rslt_obj","arr1","arg1","read_csv","configs","tfdata","read_json","read_excel","sheet","header_index","data_index","workbook","XLSX","worksheet","Sheets","SheetNames","R","C","cell_ref","how","on","left_col_index","right_col_index","left_index","right_index","left_key_dict","right_key_dict","left_values","right_values","left_value","left_key_comb_values","left_key_comb","left_value_filter","comb_values","right_value","right_key_comb_values","right_key_comb","right_value_filter","__create_columns","outer","inner","left_merge","right_merge","left_col","right_col","column_duplicate","temp_column","basic","left_keys","right_keys","left_row","key_array","left_i","left_row_row","right_row","r_i","right_row_row","inner_data","nan_array","merge","LabelEncoder","in_data","output_data","OneHotEncoder","onehot_data","__zeros","elem_index","MinMaxScaler","StandardScaler","date_range","period","freq","freq_list","freq_split","start_date","end_date","start_range","end_range","freq_type","start_year","end_year","month_end","day_end","range_array","offset_count","month_range","set_dateProps","toLocalString","date","ftype","rslt","d_array","r_array","new_date","valueOf","setYear","setMonth","setSeconds","setDate","setHours","setMinutes","toLocaleString","end_month","minus","y_val","m_range","prefix_sep","prefix_labels","get_dummies","is_dataframe","name_column","one_hotColumns","one_hotData","dt","final_columns","_version","Plotly","ret_params","__get_plot_params","this_config","trace","newPlot","xaxis","yaxis","____check_if_cols_exist","c_name","hoverinfo","automargin","cols_to_plot","cols_2_show","cols_data","root","parser_exit","SyntaxError","logHypot","_b","plus","loh","re","im","xx","cosm1","noIM","oneMinus","onePlus","places","E","globalScope","Decimal","inexact","quadrant","EXP_LIMIT","MAX_DIGITS","NUMERALS","LN10","DEFAULTS","rounding","modulo","toExpNeg","toExpPos","minE","maxE","crypto","external","decimalError","invalidArgument","precisionLimitExceeded","cryptoUnavailable","mathfloor","mathpow","isHex","isOctal","isDecimal","BASE","LN10_PRECISION","PI_PRECISION","P","digitsToString","ws","indexOfLastWord","getZeroString","checkInt32","checkRoundingDigits","rm","repeating","di","rd","convertBase","baseIn","baseOut","arrL","strL","absoluteValue","finalise","comparedTo","cmp","xdL","ydL","xd","yd","pr","Ctor","sd","tinyPow","taylorSeries","times","cos2x","toLessThanHalfPi","cubeRoot","cbrt","rep","t3","t3plusx","isZero","toExponential","divide","eq","decimalPlaces","dividedBy","dividedToIntegerBy","divToInt","equals","greaterThan","gt","greaterThanOrEqualTo","gte","hyperbolicCosine","cosh2_x","d8","hyperbolicSine","sinh2_x","d5","d16","d20","hyperbolicTangent","inverseCosine","halfPi","isNeg","getPi","inverseHyperbolicCosine","lte","ln","inverseHyperbolicSine","inverseHyperbolicTangent","wpr","xsd","inverseSine","inverseTangent","px","isNegative","isPos","lessThan","lt","lessThanOrEqualTo","logarithm","isBase10","inf","naturalLogarithm","getLn10","xe","xLTy","getBase10Exponent","naturalExponential","negated","carry","getPrecision","sine","sin2_x","squareRoot","tangent","rL","toBinary","toStringBinary","toDecimalPlaces","toDP","finiteToString","toFraction","d0","n0","toHexadecimal","toHex","toNearest","toNumber","toOctal","toPower","yn","intPow","toSignificantDigits","toSD","multiplyInteger","compare","aL","bL","subtract","more","prodL","qd","remL","rem0","xL","yd0","yL","yz","isTruncated","digits","roundUp","xdi","isExp","nonFiniteToString","zs","isOdd","maxOrMin","ltgt","guard","c0","numerator","parseDecimal","parseOther","isFloat","isHyperbolic","pi","useDefaults","defaults","getRandomValues","randomBytes","isDecimalInstance","log10","ROUND_UP","ROUND_DOWN","ROUND_CEIL","ROUND_FLOOR","ROUND_HALF_UP","ROUND_HALF_DOWN","ROUND_HALF_EVEN","ROUND_HALF_CEIL","ROUND_HALF_FLOOR","EUCLID","createError","errorConstructor","IntermediateInheritor","DivisionByZero","Fraction","InvalidParameter","throwInvalidParam","p2","A","B","D","gcd","eps","cont","rec","excludeWhole","whole","dec","cycLen","cycleLen","cycOff","rem1","rem2","modpow","cycleStart","naturalSort","oFxNcL","oFyNcL","sre","dre","hre","ore","insensitive","xN","yN","xD","yD","cLoc","numS","DataView","getNative","hashClear","hashDelete","hashGet","hashHas","hashSet","Hash","listCacheClear","listCacheDelete","listCacheGet","listCacheHas","listCacheSet","ListCache","mapCacheClear","mapCacheDelete","mapCacheGet","mapCacheHas","mapCacheSet","MapCache","setCacheAdd","setCacheHas","SetCache","__data__","stackClear","stackDelete","stackGet","stackHas","stackSet","Stack","iteratee","resIndex","baseTimes","isArguments","isBuffer","isIndex","inherited","isArr","isArg","isBuff","isType","skipIndexes","asciiSize","baseProperty","string","baseAssignValue","objValue","copyObject","keysIn","arrayEach","assignValue","baseAssign","baseAssignIn","cloneBuffer","copyArray","copySymbols","copySymbolsIn","getAllKeys","getAllKeysIn","getTag","initCloneArray","initCloneByTag","initCloneObject","isMap","isObject","isSet","argsTag","funcTag","objectTag","cloneableTags","baseClone","bitmask","customizer","isDeep","isFlat","tag","isFunc","stacked","subValue","objectCreate","baseCreate","proto","isSymbol","computed","fromIndex","fromRight","arrayPush","isFlattenable","baseFlatten","isStrict","baseFor","createBaseFor","castPath","toKey","keysFunc","symbolsFunc","getRawTag","objectToString","symToStringTag","toStringTag","baseFindIndex","baseIsNaN","strictIndexOf","baseGetTag","isObjectLike","baseIsEqualDeep","baseIsEqual","equalArrays","equalByTag","equalObjects","arrayTag","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","matchData","noCustomizer","srcValue","COMPARE_PARTIAL_FLAG","isMasked","toSource","reIsHostCtor","funcProto","objectProto","funcToString","reIsNative","isLength","typedArrayTags","baseMatches","baseMatchesProperty","isPrototype","nativeKeys","nativeKeysIn","isProto","baseIsMatch","getMatchData","matchesStrictComparable","hasIn","isKey","isStrictComparable","baseGet","arrayMap","symbolProto","symbolToString","baseToString","trimmedEndIndex","reTrimStart","stringToPath","baseSlice","baseIndexOf","strSymbols","chrSymbols","freeExports","nodeType","freeModule","allocUnsafe","cloneArrayBuffer","dataView","reFlags","regexp","symbolValueOf","symbol","typedArray","isNew","getSymbols","getSymbolsIn","coreJsData","arraySome","cacheHas","isPartial","arrLength","othLength","arrStacked","othStacked","arrValue","othValue","compared","othIndex","mapToArray","setToArray","convert","objProps","objLength","objStacked","skipCtor","objCtor","othCtor","freeGlobal","baseGetAllKeys","isKeyable","baseIsNative","getPrototype","overArg","nativeObjectToString","isOwn","unmasked","arrayFilter","stubArray","nativeGetSymbols","mapTag","promiseTag","setTag","weakMapTag","dataViewTag","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","ctorString","hasFunc","reHasUnicode","nativeCreate","cloneDataView","cloneRegExp","cloneSymbol","cloneTypedArray","spreadableSymbol","isConcatSpreadable","reIsUint","reIsDeepProp","reIsPlainProp","uid","maskSrcKey","IE_PROTO","assocIndexOf","getMapData","memoize","freeProcess","nodeUtil","types","binding","freeSelf","pairs","LARGE_ARRAY_SIZE","hasUnicode","unicodeSize","asciiToArray","unicodeToArray","memoizeCapped","rePropName","reEscapeChar","number","quote","subString","reWhitespace","rsCombo","rsFitz","rsNonAstral","rsRegional","rsSurrPair","reOptMod","rsModifier","rsOptVar","rsSeq","rsSymbol","reUnicode","CLONE_DEEP_FLAG","baseHasIn","hasPath","baseIsArguments","stubFalse","baseIsMap","baseUnary","nodeIsMap","baseIsRegExp","nodeIsRegExp","isRegExp","baseIsSet","nodeIsSet","baseIsTypedArray","nodeIsTypedArray","arrayLikeKeys","baseKeys","isArrayLike","baseKeysIn","baseForOwn","baseIteratee","baseExtremum","baseGt","resolver","memoized","Cache","basePropertyDeep","castFunction","toInteger","MAX_ARRAY_LENGTH","nativeMin","toFinite","remainder","baseTrim","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","castSlice","charsEndIndex","stringToArray","chars","stringSize","omission","strLength","newEnd","baseValues","matrix","predictable","randomSeed","_extends","freeze","MATRIX_OPTIONS","NUMBER_OPTIONS","is","extend","prop","deepStrictEqual","dependencies","meta","assertAndCreate","scope","deps","properties","pickShallow","stripOptionalNotation","dependency","isOptionalDependency","missingDependencies","assertDependencies","isFactory","createComplexClass","mathjs","phi","strRe","strIm","hasBase","isClass","hasher","hash","BigNumber","createBigNumberPi","createBigNumberClass","_ref","isBigNumber","fromJSON","createMatrixClass","Matrix","isMatrix","storage","datatype","subset","replacement","skipZeros","numberFactory","_ref2","createFractionClass","notation","newExp","valueWithoutExp","valueStr","toEngineering","lowerExp","upperExp","rounded","looksLikeFraction","formatArray","syntax","DimensionError","relation","IndexError","arraySize","_validate","dimNext","validate","validateIndex","_resize","oldLen","newLen","unsqueeze","_unsqueeze","ii","getArrayDataType","typeOf","itemType","isDimensionError","isIndexError","createDenseMatrixClass","DenseMatrix","_data","_size","_datatype","preprocess","isScalar","_getSubmatrix","last","_set","submatrix","sSize","iSize","_fit","_setSubmatrix","dataIndex","subIndex","newSize","changed","createDenseMatrix","isDenseMatrix","getDataType","indexI","sizeArray","flatArray","totalSize","sizeIndex","tmpArray2","tmpArray","_reshape","me","diagonal","kSuper","kSub","_value","swapRows","_swapRows","_createTyped2","createTyped","typed","conversions","to","throwNoBignumber","throwNoComplex","throwNoFraction","throwNoMatrix","deepForEach","createIsInteger","createIsNumeric","createIsNaN","isNaNNumber","Unit","createEqualScalar","complexEquals","equalBase","createNumber","unit","valuelessUnit","absNumber","addNumber","multiplyNumber","unaryMinusNumber","createApply","_apply","tran","I","J","createMultiplyScalar","_normalize","multiply","baseFormatter","2","8","16","createBaseFormatterFactory","createFraction","createUnaryMinus","createAddScalar","fixPrefix","createSqrt","_sqrtNumber","createConj","conjugate","createMode","isNumeric","_mode","createSparseMatrixClass","equalScalar","SparseMatrix","_values","_ptr","_createFromArray","_createFromMatrix","ptr","_getsubset","kk","mvalues","mindex","mptr","_setsubset","x0","y0","_getValueIndex","_insert","k1","_toArray","createSparseMatrix","isSparseMatrix","density","_remove","rowIndex","r1","_i2","_i3","_j","minRow","maxRow","minColumn","maxColumn","invoke","_k","_i5","_map","_k2","_i7","_forEachRow","kx","ky","vx","vy","createMatrix","_create","createAlgorithm01","denseMatrix","sparseMatrix","adata","asize","adt","bvalues","bindex","bptr","bsize","bdt","cf","cdata","mark","createAlgorithm04","avalues","aindex","aptr","cvalues","cindex","cptr","xa","xb","wa","wb","createAlgorithm10","createAlgorithm13","bdata","csize","_iterate","av","bv","cv","createAlgorithm14","createAlgorithm03","createAlgorithm05","wai","wbi","vc","createAlgorithm11","createAlgorithm12","createAlgorithm07","_scatter","va","vb","createIdentity","_identity","_identityVector","Big","noBignumber","noFraction","createSize","noMatrix","createCompare","algorithm03","algorithm05","algorithm12","algorithm13","algorithm14","createSmaller","algorithm07","createLarger","createFibonacciHeapClass","smaller","larger","oneOverLogPhi","FibonacciHeap","_minimum","_cut","degree","_cascadingCut","isFibonacciHeap","insert","extractMinimum","numberOfChildren","tempRight","numRoots","_linkNodes","_findMinimumNode","_decreaseKey","createAdd","addScalar","algorithm01","algorithm04","algorithm10","signatures","createDot","multiplyScalar","conj","_validateDim","aIsColumn","bIsColumn","_c","_c2","_c3","xindex","xvalues","yindex","yvalues","xLen","yLen","ySize","createAbs","createMultiply","algorithm11","_validateMatrixDimensions","size1","size2","_multiplyMatrixVector","arows","acolumns","af","mf","brows","ib","vbi","ka0","ka1","ka","ia","ic","_multiplyMatrixMatrix","bcolumns","jb","kb0","kb1","cij","kb","vbij","p0","xsize","ysize","_multiplyVectorVector","alength","_multiplyVectorDenseMatrix","_multiplyVectorMatrix","ArgumentsError","isArgumentsError","createPartitionSelect","_partitionSelect","quickSelect","pivot","createBignumber","createNumeric","_number","bignumber","validInputTypes","validOutputTypes","outputType","inputType","improveErrorMessage","details","createSubtract","unaryMinus","checkEqualDimensions","createDivideScalar","numeric","createSpaClass","Spa","_heap","isSpa","accumulate","heap","swap","nodei","nodej","createLup","divideScalar","_denseLUP","lvalues","lindex","lptr","lsize","uvalues","uindex","uptr","usize","pvCo","pvOc","_loop","spa","vkj","vik","vjj","pabsv","absv","L","U","_sparseLUP","ldata","udata","vij","createDet","lup","decomp","det","evenCycles","_det","createInv","_inv","ABig","rBig","Ac","Bc","Ar","Br","createDivide","inv","DEFAULT_NORMALIZATION","createVariance","_var","_varDim","normalization","createStd","_std","createMedian","partitionSelect","_median","mid","middle2","containsCollections","gammaNumber","twoN","threeN","fourN","fiveN","gammaP","gammaG","acoshNumber","acotNumber","acothNumber","acscNumber","acschNumber","xInv","asecNumber","asechNumber","asinhNumber","atanhNumber","cotNumber","cothNumber","cscNumber","cschNumber","secNumber","sechNumber","sinhNumber","isNegativeNumber","isPositiveNumber","isZeroNumber","isFraction","isUnit","isCollection","isRange","isResultSet","isHelp","isDate","isNull","isUndefined","isAccessorNode","isArrayNode","isAssignmentNode","isBlockNode","isConditionalNode","isConstantNode","isFunctionAssignmentNode","isFunctionNode","isIndexNode","isObjectNode","isOperatorNode","isParenthesisNode","isRangeNode","isSymbolNode","isChain","LN2","negate","roundDigits","splitNumber","coefficients","missingZeros","expDiff","decimalIdx","decimals","decimalVal","splitValue","pp","first","DBL_EPSILON","EPSILON","nearlyEqual","runtime","Op","hasOwn","$Symbol","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","define","innerFn","outerFn","tryLocsList","protoGenerator","Generator","Context","_invoke","GenStateSuspendedStart","GenStateExecuting","GenStateCompleted","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","GenStateSuspendedYield","makeInvokeMethod","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","NativeIteratorPrototype","Gp","defineIteratorMethods","AsyncIterator","PromiseImpl","__await","unwrapped","previousPromise","callInvokeWithMethodAndArg","resultName","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","iteratorMethod","displayName","isGeneratorFunction","genFun","awrap","skipTempReset","rootRecord","rval","exception","caught","hasCatch","hasFinally","finallyEntry","complete","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","GLOBAL","startdenom","significance","overflow","oldRandom","ARC4","keylen","S","typ","mixkey","smear","stringseed","tostring","autoseed","plugins","use_entropy","entropy","arc4","resetGlobal","xor128","xorwow","xorshift7","xor4096","tychei","sr","Alea","mash","s0","xg","prng","double","quick","XorGen","strseed","X","math","nodecrypto","shortseed","msCrypto","browser","pass","is_math_call","isFullwidthCodePoint","astralRegex","ansiStyles","ESCAPES","wrapAnsi","code","insideEscape","escapeCode","visible","leftEscape","codePointAt","codes","colorConvert","wrapAnsi16","wrapAnsi256","wrapAnsi16m","rgb","styles","modifier","bold","italic","underline","hidden","strikethrough","color","black","red","green","yellow","blue","magenta","cyan","white","gray","redBright","greenBright","yellowBright","blueBright","magentaBright","cyanBright","whiteBright","bgColor","bgBlack","bgRed","bgGreen","bgYellow","bgBlue","bgMagenta","bgCyan","bgWhite","bgBlackBright","bgRedBright","bgGreenBright","bgYellowBright","bgBlueBright","bgMagentaBright","bgCyanBright","bgWhiteBright","grey","groupName","styleName","style","ansi2ansi","rgb2rgb","ansi","ansi256","ansi16m","suite","ansi16","cssKeywords","reverseKeywords","hsl","hsv","hwb","cmyk","xyz","lab","lch","hex","keyword","hcg","apple","rdif","gdif","bdif","diffc","reversed","currentClosestKeyword","currentClosestDistance","distance","smin","lmin","hi","sl","vmin","wh","bl","ratio","hr","mult","colorString","char","integer","hue","chroma","mg","pure","route","fromModel","routes","toModel","wrappedFn","conversion","wrapRounded","raw","wrapRaw","link","wrapConversion","cur","models","buildGraph","adjacents","adjacent","deriveBFS","_isNumber2","_interopRequireDefault","_isString2","_stringWidth","__esModule","alignments","subject","containerWidth","alignment","subjectWidth","availableWidth","alignLeft","alignRight","halfWidth","alignCenter","_alignString","index1","_wrapCell","columnWidth","useWrapWord","_calculateCellWidthIndex","valueWidth","index0","_max2","_isBoolean2","_calculateCellHeight","tableWidth","rowSpanIndex","cellHeightIndex","wrapWord","_mapValues2","_values2","_trimEnd2","_makeStreamConfig","_drawRow","_drawBorder","_stringifyTableData","_truncateTableData","_mapDataUsingRowHeightIndex","_alignTableData","_padTableData","_calculateRowHeightIndex","prepareData","rowHeightIndex","userConfig","columnWidthIndex","paddingLeft","paddingRight","empty","columnCount","literalRow","border","drawBorderTop","drawBorderBottom","stdout","drawBorderJoin","drawBorder","columnSizeIndex","topBody","topJoin","joinBody","joinJoin","joinLeft","joinRight","bottomBody","bottomJoin","bottomRight","bodyLeft","bodyJoin","bodyRight","drawHorizontalLine","singleLine","realRowIndex","rowHeight","rowCount","_table","_cloneDeep2","_isUndefined2","_times2","_getBorderCharacters","_validateConfig","_calculateMaximumColumnWidthIndex","makeBorder","columnDefault","maximumColumnWidthIndex","makeColumns","_flatten2","unmappedRows","mappedRows","cellLine","index2","_drawTable","_makeConfig","_validateTableData","cellWidthIndex","_truncate2","content","refVal","refVal1","dataPath","parentData","parentDataProperty","rootData","vErrors","errors","key0","schema","schemaPath","additionalProperty","refVal2","pattern0","refVal3","refVal4","valid1","data1","errs_1","schema1","enum","i1","allowedValues","errs__1","ruleErr1","columnNumber","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_step2","_iterator2","return","_wrapString","_wrapWord","cellValue","cellLines","lineNr","lineChunks","_sliceAnsi","subjectSlice","chunks","onlyFirst","stripAnsi","emojiRegex","ansiRegex","notOk","undef","_types","anyType","_ignore","_conversions","ignore","findTypeByName","typeName","findInArray","hint","findTypeIndex","findTypeName","stringifyParams","typeNames","getTypeName","restParam","parseParam","notEmpty","notIgnore","matchingConversions","matches","filterConversions","exactTypes","typeIndex","conversionIndex","convertibleTypes","hasRestParam","hasConversions","compileTest","test0","test1","tests","compileTests","varIndex","lastTest","testRestParam","getParamAtIndex","getExpectedTypeNames","excludeConversions","isExactType","mergeExpectedParams","uniq","flatMap","_name","matchingSignatures","nextMatchingDefs","actualType","expectedLength","getLowestTypeIndex","getLowestConversionIndex","compareParams","param1","param2","compareSignatures","signature1","signature2","compileArgConversion","conversion0","conversion1","splitParams","ignoreConversionTypes","_splitParams","typeGroups","filteredTypes","typeGroup","createTypedFunction","signaturesMap","parsedSignatures","parsedParam","isInvalidParam","parseSignature","notNull","parsedSignature","conflictingSignature","hasOverlap","len1","len2","restParam1","restParam2","hasConflictingParams","ok0","ok1","ok2","ok3","ok4","ok5","allOk","test00","test10","test20","test30","test40","test50","test01","test11","test21","test31","test41","test51","fns","fnConvert","compiledConversions","fnPreprocess","compileArgsPreprocessing","fn0","fn1","fn2","fn3","fn4","fn5","len0","len3","len4","len5","iStart","iEnd","generic","arg0","createSignaturesMap","array1","getName","extractSignatures","validateUnique","_fn","addType","beforeObjectTest","addConversion","cptable","DO_NOT_EXPORT_CODEPAGE","cpt","magic","sbcs_cache","dbcs_cache","magic_cache","magic_decode","magic_encode","cpdcache","cpecache","sfcc","cca","has_buf","Buffer_from","nbfs","enc","mdl","mdb","sbcs_encode","cp","EE","ee","make_EE","ofmt","sbcs_decode","DD","dbcs_encode","jj","dbcs_decode","utf8_d","ww","direct","encache","null_enc","cp_decache","decache","last_enc","last_cp","sbcs","dbcs","BM","F","dash","tt","o64","c3","e2","e3","e4","isstr","hascp","DO_NOT_EXPORT_JSZIP","JSZipSync","globalThis","$","1","_dereq_","_keyStr","utf8","chr1","chr2","chr3","enc1","enc2","enc3","enc4","CompressedObject","compressedSize","uncompressedSize","crc32","compressionMethod","compressedContent","getContent","getCompressedContent","3","STORE","compress","uncompress","compressInputType","uncompressInputType","DEFLATE","4","crc","getTypeOf","iTop","5","DataReader","checkOffset","checkIndex","newIndex","setIndex","byteAt","readInt","readString","transformTo","readData","lastIndexOfSignature","sig","readDate","dostime","6","base64","dir","createFolders","compression","comment","7","string2binary","string2Uint8Array","uint8Array2String","string2Blob","arrayBuffer2Blob","checkSupport","MAX_VALUE_16BITS","MAX_VALUE_32BITS","pretty","findCompression","USE_TYPEDARRAY","pako","deflateRaw","inflateRaw","9","newObj","support","compressions","10","ZipEntries","zipEntries","fileName","decompressed","optimizedBinaryString","fileComment","zipComment","11","alloc","12","Uint8ArrayReader","NodeBufferReader","13","nodeBuffer","StringWriter","Uint8ArrayWriter","getRawData","getBinaryData","nodebuffer","asBinary","dataToString","asUTF8","utf8decode","utf8encode","ZipObject","_initialMetadata","asText","asNodeBuffer","asUint8Array","asArrayBuffer","decToHex","fileAdd","dataType","prepareFileAttrs","parentFolder","folderAdd","generateCompressedObjectFrom","generateZipParts","compressedObject","dosTime","dosDate","utfEncodedFileName","utfEncodedComment","useUTF8ForFileName","useUTF8ForComment","extraFields","unicodePathExtraField","unicodeCommentExtraField","fileRecord","LOCAL_FILE_HEADER","dirRecord","CENTRAL_FILE_HEADER","filename","relativePath","fileClone","folder","newFolder","kids","generate","writer","dirEnd","zipData","localDirLength","centralDirLength","compressionName","zipPart","CENTRAL_DIRECTORY_END","finalize","14","ZIP64_CENTRAL_DIRECTORY_LOCATOR","ZIP64_CENTRAL_DIRECTORY_END","DATA_DESCRIPTOR","15","StringReader","17","arraybuffer","uint8array","blob","builder","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","MSBlobBuilder","getBlob","18","sig0","sig1","sig2","sig3","19","20","_utf8len","utf8border","buf2string","c_len","utf16buf","applyFromCharCode","m_pos","str_len","buf_len","string2buf","nextBoundary","21","stringToArrayLike","arrayLikeToString","canUseApply","resultStr","arrayLikeToArrayLike","arrayFrom","arrayTo","22","ZipEntry","jszipProto","checkSignature","expectedSignature","reader","readBlockEndOfCentral","diskNumber","diskWithCentralDirStart","centralDirRecordsOnThisDisk","centralDirRecords","centralDirSize","centralDirOffset","zipCommentLength","readBlockZip64EndOfCentral","zip64EndOfCentralSize","versionMadeBy","versionNeeded","zip64ExtensibleData","extraFieldId","extraFieldLength","extraFieldValue","extraDataSize","readBlockZip64EndOfCentralLocator","diskWithZip64CentralDirStart","relativeOffsetEndOfZip64CentralDir","disksCount","readLocalFiles","localHeaderOffset","readLocalPart","handleUTF8","readCentralDir","zip64","readCentralPart","readEndOfCentral","prepareReader","23","isEncrypted","bitFlag","useUTF8","prepareCompressedContent","previousIndex","compressedFileData","prepareContent","uncompressedFileData","localExtraFieldsLength","fileNameLength","checkCRC32","extraFieldsLength","fileCommentLength","diskNumberStart","internalFileAttributes","externalFileAttributes","readExtraFields","parseZIP64ExtraField","extraReader","upath","findExtraFieldUnicodePath","ucomment","findExtraFieldUnicodeComment","upathField","ucommentField","24","25","zlib_deflate","zstream","Deflate","windowBits","memLevel","strategy","opt","gzip","ended","strm","avail_out","deflateInit2","deflateSetHeader","deflate","deflator","next_in","avail_in","Buf8","next_out","onEnd","onData","buf2binstring","shrinkBuf","deflateEnd","flattenChunks","26","zlib_inflate","gzheader","Inflate","inflateInit2","Z_OK","inflateGetHeader","inflate","inflator","next_out_utf8","tail","utf8str","Z_FINISH","Z_NO_FLUSH","binstring2buf","Z_STREAM_END","arraySet","inflateEnd","ungzip","27","TYPED_OK","sources","fnTyped","dest","src_offs","dest_offs","fnUntyped","setTyped","Buf16","Buf32","28","STR_APPLY_OK","STR_APPLY_UIA_OK","__","29","adler","30","Z_PARTIAL_FLUSH","Z_SYNC_FLUSH","Z_FULL_FLUSH","Z_BLOCK","Z_TREES","Z_NEED_DICT","Z_ERRNO","Z_STREAM_ERROR","Z_DATA_ERROR","Z_BUF_ERROR","Z_NO_COMPRESSION","Z_BEST_SPEED","Z_BEST_COMPRESSION","Z_DEFAULT_COMPRESSION","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_FIXED","Z_DEFAULT_STRATEGY","Z_BINARY","Z_TEXT","Z_UNKNOWN","Z_DEFLATED","31","crcTable","makeTable","32","trees","adler32","MAX_MATCH","MIN_LOOKAHEAD","HCRC_STATE","BUSY_STATE","FINISH_STATE","errorCode","flush_pending","pending","pending_buf","pending_out","total_out","flush_block_only","_tr_flush_block","block_start","strstart","put_byte","putShortMSB","longest_match","cur_match","chain_length","max_chain_length","scan","best_len","prev_length","nice_match","w_size","_win","wmask","w_mask","strend","scan_end1","scan_end","good_match","lookahead","match_start","fill_window","_w_size","window_size","hash_size","head","total_in","ins_h","hash_shift","hash_mask","deflate_fast","hash_head","bflush","match_length","_tr_tally","max_lazy_match","MIN_MATCH","last_lit","deflate_slow","max_insert","prev_match","match_available","configuration_table","Config","good_length","max_lazy","nice_length","max_chain","DeflateState","pending_buf_size","gzhead","gzindex","last_flush","w_bits","hash_bits","dyn_ltree","HEAP_SIZE","dyn_dtree","bl_tree","l_desc","d_desc","bl_desc","bl_count","MAX_BITS","heap_len","heap_max","l_buf","lit_bufsize","d_buf","opt_len","static_len","bi_buf","bi_valid","deflateResetKeep","data_type","_tr_init","deflateReset","max_block_size","max_start","deflateInit","old_flush","beg","hcrc","extra","os","bstate","deflate_huff","deflate_rle","_tr_align","_tr_stored_block","deflateInfo","33","xflags","extra_len","34","_in","_out","dmax","wsize","whave","wnext","hold","bits","lcode","dcode","lmask","dmask","here","dist","from_source","lencode","distcode","lenbits","distbits","dolen","dodist","sane","35","inflate_fast","inflate_table","TYPE","BAD","ZSWAP32","InflateState","havedict","check","wbits","ncode","nlen","ndist","have","lens","work","lendyn","distdyn","was","inflateResetKeep","inflateReset","inflateReset2","lenfix","distfix","virgin","fixedtables","sym","inflateInit","here_bits","here_op","here_val","last_bits","last_op","last_val","hbuf","order","inf_leave","updatewindow","inflateInfo","36","lbase","lext","dbase","dext","lens_index","table_index","incr","used","huff","base_index","MAXBITS","offs","extra_index","37","38","extra_lbits","extra_dbits","extra_blbits","bl_order","static_ltree","static_dtree","D_CODES","_dist_code","_length_code","base_length","base_dist","static_l_desc","static_d_desc","static_bl_desc","StaticTreeDesc","static_tree","extra_bits","extra_base","elems","has_stree","TreeDesc","dyn_tree","stat_desc","max_code","d_code","put_short","send_bits","send_code","tree","bi_reverse","gen_codes","next_code","init_block","LITERALS","END_BLOCK","bi_windup","_n2","_m2","pqdownheap","compress_block","ltree","dtree","lc","lx","build_tree","stree","xbits","gen_bitlen","scan_tree","curlen","prevlen","nextlen","max_count","min_count","REP_3_6","REPZ_3_10","REPZ_11_138","send_tree","static_init_done","stored_len","copy_block","LENGTH_CODES","L_CODES","tr_static_init","opt_lenb","static_lenb","max_blindex","black_mask","detect_data_type","BL_CODES","build_bl_tree","lcodes","dcodes","blcodes","send_all_trees","STATIC_TREES","bi_flush","39","current_codepage","current_ansi","VALID_ANSI","CS2CP","0","77","128","129","130","134","136","161","162","163","177","178","186","204","222","238","255","69","set_ansi","set_cp","reset_cp","char_codes","debom","utf16leread","utf16beread","_getchar","_getansi","Base64","e1","new_raw_buf","new_unsafe_buf","s2a","s2ab","view","a2s","ab2a","bconcat","bufs","chr0","SSF","make_ssf","_strrev","pad0","rpad_","p2_32","pad0r","pad0r1","pad0r2","isgeneral","days","months","init_table","table_fmt","default_map","defi","default_str","frac","mixed","sgn","P_2","P_1","Q_2","Q_1","Q","parse_date_code","b2","dow","dout","T","H","date1904","fix_hijri","basedate","dnthresh","getTime","base1904","datenum_local","getTimezoneOffset","_general_int","general_fmt_num","trailing_zeroes_and_decimal","strip_decimal","mantissa_zeroes_and_decimal","exp_with_single_digit","V","LOG10E","small_exp","large_exp","normalize_exp","general_fmt","write_date","fmt","ss0","ss","outl","commaify","_general_num","_general","write_num","pct1","write_num_exp","fakee","$$","$1","$2","$3","frac1","dec1","closeparen","phone","hashq","cc","rnd","dd","_frac","write_num_flt","ffmt","write_num_cm","sfmt","write_num_pct","ri","ff","aval","den","rr","myn","myd","write_num_f1","oa","lres","rres","flr","write_num_exp2","write_num_int","write_num_cm2","write_num_pct2","write_num_f2","split_fmt","in_str","_split","abstime","fmt_is_date","eval_fmt","flen","lst","ssm","bt","nstr","myv","ostr","vv","decpt","lasti","retval","is_date","_eval","cfregex","cfregex2","chkcond","thresh","dateNF","lat","m1","m2","choose_fmt","load_entry","get_table","load_table","tbl","CRC32","XLMLFormatMap","SSFImplicit","dateNFregex","signed_crc_table","bstr","crc32_buf_8","_fs","CFB","dirname","write_dos_date","hms","write_shift","ymd","parse_extra_field","prep_blob","read_shift","tgt","mtime","atime","ctime","mt","get_fs","parse_zip","mver","nmfs","difat_sec_cnt","dir_start","minifat_start","difat_start","ssz","fat_addrs","mv","chk","HEADER_SIGNATURE","check_get_mver","check_shifts","dir_cnt","sectors","nsectors","sectorify","sleuth_fat","sector_list","chkd","buf_chain","modulus","addr","__readInt32LE","__toBuffer","make_sector_list","ENDOFCHAIN","Paths","FileIndex","FullPaths","mini","minifat_store","pl","sector","namelen","__utf16le","clsid","ct","read_date","get_sector_list","get_mfat_entry","read_directory","FI","FP","dad","build_full_paths","payload","MSSZ","new_buf","cnt","__readUInt32LE","init_cfb","cfb","CLSID","nm","rebuild_cfb","seed_cfb","gc","_file","HEADER_CLSID","Z","namecmp","elt","_write","_opts","fileType","cdirs","start_cd","fcnt","fi","crcs","sz_cd","namebuf","outbuf","_deflateRawSync","write_zip","mini_size","fat_size","mfat_cnt","fat_base","fat_cnt","difat_cnt","HEADER_SIG","chainit","consts","DIFSECT","FATSECT","_nm","_zlib","MAXREGSECT","FREESECT","HEADER_MINOR_VERSION","MAXREGSID","NOSTREAM","EntryTypes","deflateRawSync","_deflate","CLEN_ORDER","LEN_LN","DST_LN","use_typed_arrays","bitswap8","bit_swap_n","rev","read_bits_2","read_bits_3","read_bits_5","read_bits_7","read_bits_n","realloc","zero_fill_array","_deflateRaw","boff","off","clens","cmap","MAX","maxlen","ccode","ctree","cleni","fix_lmap","fix_dmap","dlens","dyn_lmap","dyn_dmap","dyn_cmap","dyn_len_1","dyn_len_2","dyn","_HLIT","_HDIST","_HCLEN","read_bits_4","hcodes","h1","h2","_inflate","usz","woff","OL","max_len_1","max_len_2","len_eb","dst_eb","dst","warn_or_throw","wrn","csz","efsz","fcsz","EF","parse_local_file","meth","setMilliseconds","setFullYear","parse_dos_date","_csz","_usz","ef","InflRaw","InflateRaw","_processChunk","_finishFlushFlag","bytesRead","_inflateRawSync","_crc32","cfb_add","unsafe","fpath","cfb_gc","UCFullPaths","UCPaths","UCPath","read_file","writeFile","cfb_new","cfb_del","cfb_mov","old_name","new_name","ReadShift","CheckField","use_zlib","zlib","_inflateRaw","blobify","a2u","write_dl","fname","utf8write","IE_SaveFile","msSaveBlob","saveAs","chrome","downloads","revokeObjectURL","appendChild","click","removeChild","Folder","ks","o2","evert_key","K","evert","evert_num","datenum","refdate","refoffset","numdate","setTime","parse_isodur","sec","good_pd_date","good_pd","parseDate","fixdate","cc2str","dup","fuzzynum","wt","fuzzydate","getYear","jszip","safe_split_regex","getdatastr","safegetzipfile","getzipfile","getzipdata","safe","getdatabin","getzipstr","zip_add_file","zip_new","resolve_path","XML_HEADER","attregexg","tagregex","nsregex","nsregex2","parsexmltag","skip_root","skip_LC","quot","strip_ns","encregex","coderegex","encodings","rencoding","unescapexml","decregex","charegex","escapexml","escapexmltag","htmlcharegex","escapehtml","xlml_fixstr","entregex","entrepl","parsexmlbool","utf8read","orig","utf8readb","corpus","utf8readc","mtcache","entities","vt_cache","matchtag","htmldecode","vtregex","vtvregex","vtmregex","parseVector","baseType","WTF","wtregex","writetag","wxt_helper","writextag","write_w3cdtf","toISOString","__lpp4","___lpp4","XMLNS","XLMLNS","___toBuffer","__readUInt16LE","___utf16le","__hexlify","___hexlify","__utf8","__readUInt8","___utf8","__lpstr","___lpstr","__cpstr","___cpstr","__lpwstr","___lpwstr","__double","___double","__8lpp4","___8lpp4","read_double_le","is_buf","readUInt32LE","readDoubleLE","__readInt16LE","__readInt32BE","oI","oR","oo","__writeUInt16LE","WriteShift","cppayload","__writeUInt32LE","bs","write_double_le","__writeInt32LE","hexstr","fld","parsenoop","recordhopper","cb","tmpbyte","cntbyte","RT","XLSBRecordEnum","buf_array","blksz","newblk","curbuf","endbuf","_bufs","write_record","ba","XLSBRE","shift_cell_xls","cRel","rRel","biff","shift_range_xls","encode_cell_xls","encode_cell","encode_range_xls","encode_row","encode_col","decode_row","rowstr","decode_col","colstr","decode_cell","cstr","decode_range","encode_range","cs","ce","safe_decode_range","format_cell","XF","numFmtId","safe_format_cell","sheet_to_workbook","sheets","sheet_add_aoa","_ws","_R","_C","origin","_origin","_range","__R","__C","sheetStubs","cellDates","aoa_to_sheet","write_UInt32LE","parse_XLWideString","cchCharacters","write_XLWideString","_null","parse_StrRun","ich","ifnt","parse_RichStr","rgsStrRun","dwSizeStrRun","O","_crypto","rc4","md5","createHash","digest","make_offcrypto","parse_BrtCommentText","parse_XLSBCell","iStyleRef","write_XLSBCell","parse_XLSBCodeName","write_XLSBCodeName","parse_XLNullableWideString","write_XLNullableWideString","parse_XLNameWideString","parse_RelID","write_RelID","parse_RkNumber","fX100","fInt","RK","parse_RfX","parse_UncheckedRfX","write_UncheckedRfX","parse_Xnum","write_Xnum","write_BrtColor","auto","theme","nTS","tint","parse_ClipboardFormatOrString","VT_STRING","VT_CUSTOM","DocSummaryPIDDSI","VT_VECTOR","SummaryPIDSI","SpecialProperties","DocSummaryRE","SummaryRE","CountryEnum","XLSFillPattern","XLSIcv","BErr","RBErr","ct2type","CT_LIST","workbooks","xlsx","xlsm","xlsb","xlam","xltx","strs","comments","charts","dialogs","macros","type2ct","evert_arr","CT","CTYPE_XML_ROOT","xsi","CTYPE_DEFAULTS","rels","RELS","WB","SHEET","HLINK","VML","XPATH","XMISS","XLINK","CXML","CXMLP","VBA","get_rels_path","parse_rels","currentFilePath","rel","Type","Target","Id","TargetMode","canonictarget","RELS_ROOT","write_rels","rid","RELS_EXTERN","add_rels","rId","relobj","targetmode","write_rdf_type","write_meta_ods","CORE_PROPS","CORE_PROPS_REGEX","parse_core_props","CORE_PROPS_XML_ROOT","dc","dcterms","dcmitype","cp_doit","EXT_PROPS","load_props_pairs","HP","TOP","hp","Worksheets","NamedRanges","DefinedNames","Chartsheets","ChartNames","EXT_PROPS_XML_ROOT","vt","CUST_PROPS","custregex","CUST_PROPS_XML_ROOT","XLMLDocPropsMap","Title","Subject","Author","Keywords","Comments","LastAuthor","RevNumber","Application","LastPrinted","CreatedDate","ModifiedDate","Category","Manager","Company","AppVersion","ContentStatus","Identifier","Language","evert_XLMLDPM","xlml_set_prop","Props","parse_FILETIME","dwLowDateTime","dwHighDateTime","parse_lpstr","parse_lpwstr","parse_VtStringBase","stringType","parse_VtString","parse_VtHeadingPair","parse_TypedPropertyValue","parse_dictionary","CodePage","pid","parse_BLOB","Size","parse_ClipboardData","parse_VtUnalignedString","cElements","parse_VtVecHeadingPairValue","parse_VtVecHeadingPair","parse_VtVecUnalignedLpstrValue","parse_VtVecUnalignedLpstr","write_TypedPropertyValue","write_FILETIME","parse_PropertySet","PIDSI","start_addr","NumProps","Dictionary","DictObj","PropID","Offset","PropH","piddsi","oldpos","parsebool","XLSPSSkip","guess_property_type","write_PropertySet","RE","hdr","piao","pio","pinfo","parse_PropertySetStream","NumSets","FMTID0","FMTID1","Offset0","Offset1","SystemIdentifier","PSet1","PSet0","FMTID","write_PropertySetStream","entries2","clsid2","ps0","ps1","parsenoop2","writebool","parseuint16","writeuint16","parseuint16a","parslurp","parse_ShortXLUnicodeString","cch","parse_XLUnicodeRichExtendedString","cbExtRst","fExtSt","fRichSt","cRun","write_XLUnicodeRichExtendedString","xlstr","otext","parse_XLUnicodeStringNoCch","parse_XLUnicodeString","parse_XLUnicodeString2","write_XLUnicodeString","parse_HyperlinkString","write_Hyperlink","hl","parse_LongRGBA","parse_LongRGB","parse_XLSCell","ixfe","write_XLSCell","parse_XTI","parse_RkRec","parse_Ref8U","rwFirst","rwLast","write_Ref8U","parse_RefU","parse_Ref","parse_FtCmo","ot","parse_FtSkip","FtTab","fSharedNote","parse_BOF","BIFFVer","write_BOF","bookType","write_BoundSheet8","hs","parse_DefaultRowHeight","miyRw","Unsynced","DyZero","ExAsc","ExDsc","write_Format","b5","parse_BIFF2Format","parse_Dimensions","write_XF","ixfeP","parse_BoolErr","parse_Bes","parse_XLHeaderFooter","parse_ExternName","fBuiltIn","fWantAdvise","fWantPict","fOle","fOleLink","fIcon","sbcch","udfName","parse_AddinUdf","Name","XLSLblBuiltIn","parse_Lbl","chKey","cce","itab","npflen","rgce","rgcb","parse_Rgce","parse_RgbExtra","parse_NameParsedFormula","parse_ExternSheet","parse_BIFF5ExternSheet","parse_Array","ref","parse_ArrayParsedFormula","parse_BIFF5OT","write_HLink","write_HLinkTooltip","TT","Tooltip","parse_ColInfo","cellStyles","colFirst","colLast","coldx","cchName","parse_Blank","parse_Scl","parse_String","DBF","dbf_codepage_map","dbf_reverse_map","dbf_to_sheet","ft","memo","vfp","l7","nrow","fpos","rlen","current_cp","hend","sheetRows","dbf_to_aoa","_RLEN","to_workbook","to_sheet","from_sheet","codepage","aoa","sheet_to_json","hcnt","coltypes","guess","_guess","hf","_f","hb","rout","SYLK","sylk_escapes","AA","BA","CA","DA","HA","JA","AE","BE","CE","HE","AI","BI","CI","HI","AO","BO","CO","DO","HO","AU","BU","CU","HU","Aa","Ba","Ca","Da","Ha","Ja","Ae","Be","Ce","He","Ai","Bi","Ci","Hi","Ao","Bo","Co","Do","Ho","Au","Bu","Cu","Hu","KC","Kc","DN","Dn","Hy","sylk_char_regex","sylk_char_fn","decode_sylk_char","newcc","sylk_to_aoa_str","rj","formats","next_cell_format","sht","rowinfo","colinfo","cw","Mval","rstr","C_seen_K","C_seen_X","formula","rc_to_a1","F_seen","wch","process_col","hpt","hpx","pt2px","sylk_to_sheet","aoasht","sylk_to_aoa","write_ws_cell_sylk","a1_to_rc","preamble","RS","wpx","width2px","px2char","px2pt","write_ws_rows_sylk","DIF","dif_to_aoa_str","dif_to_sheet","dif_to_aoa","push_field","push_value","topic","ETH","eth_to_sheet","eth_to_aoa","sheet_to_eth_data","PRN","set_text_arr","guess_seps","guess_sep_weights","dsv_to_sheet_str","instr","guess_sep","sepcc","_re","finish_cell","Y","datestr","timestr","dateNF_fix","cellText","cellNF","prn_to_sheet","firstbyte","prn_to_aoa_str","prn_to_sheet_str","WK_","lotus_to_workbook_buf","sidx","snames","refguess","Enum","WK1Enum","WK3Enum","qpro","lotushopper","Rn","vers","parse_cell","parse_LABEL","parse_cell_3","parse_NUMBER_17","parse_NUMBER_27","parse_rs","tregex","rpregex","parse_r","rpr","font","shadow","outline","strike","uval","family","valign","parse_rpr","rregex","rend","rs","rs_to_html","nlregex","r_to_html","terms","intro","outro","align","parse_rpr2","sitregex","sirregex","sirphregex","parse_si","html","cellHTML","sstr0","sstr1","sstr2","SST","straywsregex","write_sst_xml","sst","bookSST","xmlns","main","Count","uniqueCount","sitag","write_BrtSSTItem","write_sst_bin","write_BrtBeginSst","_JS2ANSI","parse_CRYPTOVersion","Major","Minor","parse_DataSpaceMapEntry","comps","parse_EncryptionHeader","Flags","AlgID","valid","AlgIDHash","KeySize","ProviderType","CSPName","parse_EncryptionVerifier","Salt","Verifier","VerifierHash","parse_EncInfoStd","parse_EncInfoExt","parse_EncInfoAgl","KeyData","xml","encryptedHmacKey","encryptedHmacValue","encs","uri","crypto_CreatePasswordVerifier_Method1","Password","PasswordArray","PasswordDecoded","PadArray","InitialCode","XorMatrix","XorRor","crypto_CreateXorArray_Method1","byte1","byte2","Byte","password","Temp","PasswordLastChar","PadIndex","XorKey","CurrentElement","Char","CreateXorKey_Method1","Index","ObfuscationArray","RTF","rtf_to_sheet","rtf_to_sheet_str","rgb2Hex","rgb_tint","G","H6","L2","rgb2HSL","hex2RGB","h6","hsl2RGB","MDW","char2width","chr","cycle_width","collw","find_mdw_colw","_MDW","coll","customWidth","pt","numFmtRegex","cellXfRegex","fillsRegex","fontsRegex","bordersRegex","XLMLPatternTypeMap","cellXF_uint","cellXF_bool","parse_sty_xml","themes","NumberFmt","formatCode","parse_numFmts","Fonts","condense","vertAlign","indexed","icv","themeElements","clrScheme","parse_fonts","Fills","patternType","fgColor","parse_fills","Borders","diagonalUp","diagonalDown","parse_borders","xf","CellXf","vertical","horizontal","textRotation","indent","wrapText","parse_cellXfs","STYLES_XML_ROOT","write_sty_xml","NF","write_numFmts","cellXfs","write_cellXfs","write_BrtFmt","STY","rev_XLSBFillPTNames","parse_BrtFill","write_BrtFill","fls","write_BrtXF","write_Blxf","parse_BrtBorder","write_sty_bin","write_FMTS_bin","grbit","write_FontFlags","sss","charset","write_BrtFont","write_FONTS_bin","write_FILLS_bin","write_BrtBorder","write_BORDERS_bin","fontId","fillId","borderId","write_CELLSTYLEXFS_bin","write_CELLXFS_bin","xfId","builtinId","write_BrtStyle","write_STYLES_bin","write_DXFS_bin","defTableStyle","defPivotStyle","write_BrtBeginTableStyles","write_TABLESTYLES_bin","THEME","XLSXThemeClrScheme","parse_clrScheme","lastClr","parse_fontScheme","parse_fmtScheme","clrsregex","fntsregex","fmtsregex","themeltregex","parse_theme_xml","write_theme","parse_themeElements","Themes","themeXLSX","parse_ExtProp","extType","xclrType","nTintShade","xclrValue","parse_IcvXF","parse_ColorTheme","parse_FullColorExt","parse_XFExtGradient","IMG","DRAW","_shapeid","write_comments_vml","bbox","joinstyle","gradientshapeok","coordsize","fillopts","angle","fillparm","fillxml","fillcolor","strokecolor","CMNT","CMNT_XML_ROOT","write_comments_xml","iauthor","parse_BrtCommentAuthor","write_comments_bin","write_BrtCommentAuthor","write_BrtBeginComment","run","write_StrRun","write_BrtCommentText","VBAFMTS","DS","MS","rcregex","rcbase","rcfunc","fstr","crefregex","$0","$4","$5","shift_formula_xlsx","shift_formula_str","_xlfn","parseread1","parse_ColRelU","parse_RgceArea","parse_RgceArea_BIFF2","parse_RgceLoc","parse_RgceLoc_BIFF2","parse_RgceElfLoc","fQuoted","parse_PtgAttrSpaceType","parse_SerAr","parse_PtgExtraMem","parse_PtgExtraArray","parse_PtgElfLoc","parse_PtgElfNoop","parse_PtgElfCol","parse_PtgElfColS","parse_PtgElfColSV","parse_PtgElfColV","parse_PtgElfLel","parse_PtgElfRadical","parse_PtgElfRadicalLel","parse_PtgElfRadicalS","parse_PtgElfRw","parse_PtgElfRwV","PtgListRT","PtgTypes","iftab","FtabArgc","Ftab","cparams","tab","parsetab","Cetab","nameindex","rl","parse_RgceLocRel_BIFF2","cl","parse_RgceLocRel","parse_RgceAreaRel","ixti","parse_PtgNameX_BIFF5","PtgDupes","Ptg18","coltype","rt","Ptg19","bitSemi","bitIf","bitGoto","ptgs","stringify_array","PtgBinOp","PtgAdd","PtgConcat","PtgDiv","PtgEq","PtgGe","PtgGt","PtgLe","PtgLt","PtgMul","PtgNe","PtgPower","PtgSub","quoteCharacters","get_ixti_raw","supbooks","XTI","SID","get_ixti","sname","formula_quote_sheet_name","stringify_formula","nameidx","last_sp","sp","fflen","argc","lbl","XLSXFutureFunctions","externbook","bookidx","ixtidata","lp","rp","sharedf","parsedf","fnd","arrayf","_left","parse_SharedParsedFormula","parse_Formula","parse_FormulaValue","cbf","parse_XLSCellParsedFormula","shared","parse_XLSBParsedFormula","parse_XLSBArrayParsedFormula","parse_XLSBCellParsedFormula","parse_XLSBNameParsedFormula","parse_XLSBSharedParsedFormula","ods_to_csf_formula","ods_to_csf_3D","_ssfopts","WS","browser_has_Map","get_sst_id","revarr","col_obj_w","default_margins","margins","defs","footer","get_cell_style","revssf","ssf","applyNumberFormat","safe_format","fmtid","fillid","raw_rgb","check_ws","mergecregex","sheetdataregex","hlinkregex","dimregex","colregex","afregex","marginregex","sheetprregex","svsregex","parse_ws_xml_sheetpr","sheetPr","codeName","CodeName","sheetprot_deffalse","sheetprot_deftrue","sviewregex","write_ws_xml_cell","oldt","oldv","Strings","revStrings","cellregex","rowregex","isregex","refregex","match_v","match_f","parse_ws_xml_data","sdata","sstr","ftag","cref","tagr","tagc","do_format","rowobj","rowrite","marr","marrlen","xlen","ht","outlineLevel","rslice","cellFormula","xlfn","___f","_tag","_r","WS_XML_ROOT","write_ws_xml","rdata","_drawing","needed","vbaraw","Workbook","outlineprops","summaryBelow","summaryRight","above","write_ws_xml_sheetpr","sview","workbookViewId","Views","rightToLeft","RTL","write_ws_xml_sheetviews","sheetFormat","defaultRowHeight","baseColWidth","outlineLevelRow","_cell","customHeight","write_ws_xml_data","write_ws_xml_protection","Names","Sheet","Ref","write_ws_xml_autofilter","merges","margin","relc","tooltip","ignoreEC","numberStoredAsText","sqref","write_row_header","ncolspan","lcs","caddr","write_BrtRowHdr","parse_BrtWsDim","write_BrtWsDim","parse_BrtMergeCell","write_BrtMergeCell","BrtMarginKeys","write_ws_bin_cell","ncell","write_BrtCellIsst","write_BrtCellSt","d100","write_RkNumber","write_BrtCellRk","write_BrtCellReal","write_BrtCellBool","write_BrtCellBlank","write_ws_bin","write_BrtWsProp","write_BrtBeginWsView","write_WSVIEWS2","write_BrtColInfo","write_COLINFOS","cap","write_CELLTABLE","write_BrtSheetProtection","write_SHEETPROTECT","write_AUTOFILTER","write_BrtBeginMergeCells","write_MERGECELLS","locidx","write_BrtHLink","write_HLINKS","write_BrtMargins","write_BrtCellIgnoreEC","write_IGNOREECS","write_LEGACYDRAWING","CHART","CHARTEX","CS","WBPropsDef","WBViewDef","SheetDef","CalcPrDef","push_defaults_array","push_defaults","parse_wb_defaults","WBProps","CalcPr","WBView","badchars","check_ws_name","_good","wbnsregex","WB_XML_ROOT","write_wb_xml","write_names","workbookPr","Hidden","sheetId","Comment","localSheetId","write_BrtBundleSh","iTabID","strRelID","write_wb_bin","write_BrtFileVersion","filterPrivacy","write_BrtWbProp","vistab","write_BrtBookView","write_BOOKVIEWS","write_BUNDLESHS","parse_ws","ai","seencol","R_n","aii","relId","Rel","rfx","tmpref","parse_ws_bin","data2","mtch","ridx","parse_ws_xml_dim","svs","parse_ws_xml_sheetviews","coli","colm","colM","parse_ws_xml_cols","afilter","parse_ws_xml_autofilter","_merge","hlink","rng","parse_ws_xml_hlinks","parse_ws_xml_margins","parse_ws_xml","write_wb","write_ws","write_sst","write_cmnt","attregexg2","attregex2","xlml_parsexmltag","words","xlml_parsexmltagobj","xlml_set_custprop","Custprops","oval","process_style_xlml","stag","Interior","Pattern","ID","parse_xlml_data","csty","nf","sid","StyleID","interiors","Parent","UTC","safe_format_xlml","Formula","ArrayRange","xlml_clean_comment","xlml_normalize","xlmlregex","parse_xlml_xml","opening","ishtml","HTML_","sheetnames","cursheet","sheetname","dtag","didx","fidx","pidx","cstys","wsprops","raw_Rn3","HRef","HRefScreenTip","MergeAcross","MergeDown","cma","cmd","AutoFitHeight","Height","Format","ssfidx","Width","_col","Span","_NamedRange","_DefinedName","RefersTo","AutoFilter","parse_fods","Margin","pagemargins","Top","Left","Right","Bottom","bookSheets","bookProps","parse_xlml","fix_read_opts","write_name_xlml","write_ws_xlml_cell","_v","write_ws_xlml_row","write_ws_xlml","write_ws_xlml_names","write_ws_xlml_table","objects","scenarios","selectLockedCells","selectUnlockedCells","write_ws_xlml_wsopts","write_xlml","xlml_write_docprops","BLACKLIST","xlml_write_custprops","write_props_xlml","write_sty_xlml","write_names_xlml","slurp","insitu","XLSRecordEnum","ll","safe_format_xf","make_cell","PSCLSID","parse_xlscfb","CompObj","WorkbookP","AnsiUserType","AnsiClipboardFormat","parse_ClipboardFormatOrAnsiString","Reserved1","UnicodeClipboardFormat","parse_ClipboardFormatOrUnicodeString","Reserved2","parse_compobj","lastcell","cmnt","rngC","rngR","country","Directory","last_formula","cur_sheet","Preamble","last_cell","cell_valid","XFs","palette","get_rgb","addcell","file_depth","xfd","icvFore","icvBack","process_cell_style","afi","rrtabid","lastuser","winlocked","wtf","last_lbl","last_Rn","BIFF2Fmt","BIFF2FmtTable","FilterDatabases","seen_codepage","RecordType","Date1904","WriteProtect","cpval","CalcRefMode","FullCalc","fDialog","ExternCount","tmpri","fakebs8","rknum","rkrec","_fr","_fc","_fe","_arraystart","isst","_ixfe","b4idx","b2idx","cmo","lastobj","TxO","ImData","noteobj","xfe","Encryption","Metadata","Country","parse_workbook","bookVBA","newcfb","newpath","make_vba_xls","DSI","DocSummary","SI","Summary","HeadingPairs","TitlesOfParts","parse_xls_props","bookFiles","ArchID","Ptg","fBold","fItalic","fUnderline","fStrikeout","fOutline","fShadow","fCondense","fExtend","parse_FontFlags","bCharSet","xColorType","bR","bG","bB","parse_BrtColor","ixfeParent","ifmt","defaultThemeVersion","strName","autoCompressPictures","backupFile","checkCompatibility","hidePivotFieldList","promptedSolutions","publishItems","refreshAllConnections","saveExternalLinkValues","showBorderUnselectedTables","showInkAnnotation","showObjects","showPivotChartFilter","updateLinks","fAlwaysCalc","display","idObj","stAuthor","parse_NoteSh","Info","Data","EncryptionVersionInfo","EncryptedVerifier","EncryptedVerifierHash","parse_RC4Header","EncryptionHeader","EncryptionVerifier","parse_RC4CryptoHeader","parse_FilePassHeader","XorArrayIndex","XorArray","verificationBytes","verifier","Value","crypto_DecryptData_Method1","parse_XORObfuscation","dyHeight","fl","Pos","Dim","CurTab","FirstTab","Selected","TabRatio","UserName","fts","parse_BIFF5Obj","parse_FtArray","ccv","rw","rkrecs","lastcol","ixfes","fStyle","alc","fWrap","alcV","fJustLast","trot","cIndent","fShrinkToFit","iReadOrder","fAtrNum","fAtrFnt","fAtrAlc","fAtrBdr","fAtrPat","fAtrProt","dgLeft","dgRight","dgTop","dgBottom","icvLeft","icvRight","grbitDiag","icvTop","icvBottom","icvDiag","dgDiag","fsxButton","parse_CellStyleXF","cmcs","ucnt","extsst","dsst","ctab","virtPath","rgst","texts","accel","parse_ControlInfo","cchText","sVer","targetFrameName","moniker","oleMoniker","guid","fileTime","Loc","parse_URLMoniker","ansiPath","parse_FileMoniker","parse_HyperlinkMoniker","parse_Hyperlink","xnum","cUse","wzTooltip","cxfs","cexts","cchComment","themeXML","parse_frtHeader","area","env","lcb","XLSRE","write_biff_rec","write_BIFF2Cell","write_ws_biff2_cell","write_BIFF2NUM","write_BIFF2BERR","write_BIFF2LABEL","write_ws_biff8_cell","bf","o1","write_FormulaValue","o3","write_Formula","write_Number","write_Bes","write_BoolErr","write_LabelSst","b8","write_Label","write_ws_biff8","_WB","_sheet","MAX_ROWS","guts","write_Guts","write_Dimensions","write_Window2","write_MergeCells","HL","write_ws_biff8_hlinks","write_FEAT","write_biff8_global","_sheets","_wb","writezeroes","write_WriteAccess","write_RRTabId","write_Window1","safe1904","write_Font","write_FONTS_biff8","write_FMTS_biff8","write_CELLXFS_biff8","write_Country","write_biff_continue","write_SST","blen","write_biff_buf","fix_write_opts","write_biff8_buf","write_ws_biff2","write_biff2_buf","html_to_sheet","mtch2","split_regex","hd","midx","colspan","rowspan","_t","make_html_row","editable","make_html_preamble","_BEGIN","_END","_row","BEGIN","END","_preamble","sheet_add_dom","or_R","or_C","getElementsByTagName","is_dom_element_hidden","elts","hasAttribute","getAttribute","innerHTML","parse_dom_table","get_computed_style","ownerDocument","defaultView","getComputedStyle","get_get_computed_style_function","getPropertyValue","number_formats","parse_content_xml","day","month","year","hours","minutes","seconds","era","quarter","sheetag","rowtag","fixed","NFtag","ctag","textp","textpidx","textR","row_ol","number_format_map","mrange","rowpeat","colpeat","atag","_Ref","creator","creatoridx","isstub","intable","rptR","rpt","nrange","ptp","parse_ods","ods","FEtag","parse_manifest","write_styles_ods","write_content_ods","null_cell_xml","_Fref","text_p","_tgt","fods","write_automatic_styles_ods","write_ods","rdf","write_rdf","write_manifest","write_obj_str","write_sheet_index","write_htm_str","write_csv_str","sheet_to_csv","write_slk_str","write_dif_str","write_prn_str","write_rtf_str","write_txt_str","sheet_to_txt","write_dbf_buf","write_eth_str","fix_opts_func","safe_parse_sheet","relsPath","sheetRels","stype","parse_cs_bin","parse_cs_xml","parse_cs","dfile","drelsp","chartp","parse_drawing","crelsp","csheet","nc","parse_Cache","parse_chart","parse_ds","authors","author","parse_comments_bin","commentList","authtag","cmnttag","cm","authorId","textMatch","parse_comments_xml","parse_cmnt","encoded","sheet_insert_comments","strip_front_slash","binname","zipentries","links","coreprops","extprops","custprops","calcchains","vba","drawings","TODO","ctext","Extension","ContentType","PartName","calcchain","parse_ct","parse_sst_bin","parse_sst_xml","parse_sst","parse_theme","parse_sty_bin","parse_sty","parse_xlink_bin","parse_xlink","parse_wb_bin","dname","dnstart","parse_wb_xml","parse_wb","propdata","parse_ext_props","toks","parse_cust_props","bookDeps","parse_cc_bin","parse_cc_xml","wbsheets","wbext","wbrelsi","wbrelsfile","wbrels","safe_parse_wbrels","nmode","wsloop","snjseen","snj","Deps","Styles","bin","parse_xlsxcfb","W","parse_DataSpaceVersionInfo","dsm","parse_DataSpaceMap","seds","parse_DataSpaceDefinition","parse_TransformInfoHeader","ename","cmode","parse_Primary","einfo","parse_EncryptionInfo","decrypt_agile","decrypt_std76","foo","vbafmt","write_core_props","_sn","write_ext_props","write_vt","write_cust_props","wsrels","need_vml","rId1","write_sty","f1","f3","write_ct","read_plaintext","read_prn","infile","read_binary","bstrify","ab","vu","read_cfb","OLD_WTF","read_wb_ID","zip_read","read_zip","read_utf16","read_plaintext_raw","write_cfb_ctr","write_string_type","bom","write_binary_type","writeSync","cn","check_wb","write_stxt_type","wbpath","Keys","DSEntries","SEntries","CEntries","CEntries2","write_xls_props","fill_vba_xls","write_xlscfb","write_cfb_type","oopts","encrypt_agile","write_zip_type","resolve_book_type","make_json_row","defval","isempty","__rowNum__","rawNumbers","outi","CC","blankrows","qreg","make_csv_row","FS","txt","forceQuotes","endregex","skipHidden","strip","sheet_to_formulae","cmds","sheet_add_json","js","skipHeader","JS","sheet_get_cell","Readable","split_cell","get_formulae","make_csv","make_json","make_formulae","json_to_sheet","table_to_sheet","table_to_book","sheet_to_html","sheet_to_row_object_array","get_default","ws_get_cell_stub","RC","book_new","book_append_sheet","book_set_sheet_visibility","sh","vis","wb_sheet_idx","cell_set_number_format","cell_set_hyperlink","cell_set_internal_link","cell_add_comment","sheet_set_array_formula","rngstr","to_json","objectMode","_read","to_html","to_csv","BOM","readFile","writeFileAsync","_cb","make_xlsx_lib","__webpack_module_cache__","__webpack_require__","moduleId","loaded","__webpack_modules__","amdD","amdO","getter","definition","nmd"],"mappings":"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vK,EACbH,EAActqK,KAAKzE,IAM3B,MAAMmvK,EAAiB7jK,EAAS3F,QAChCwpK,EAAe,GAAK7sK,OAAO8lB,KAAKymJ,GAAgB9uK,OAChD,MAAMqvK,EAAe,IAAIhtJ,GAAa+sJ,EAAgBpoK,GACtDgoK,EAAczhK,SAAQ,CAAC+hK,EAAoBrvK,KACvC,IAAK,IAAIy3B,EAAI,EAAGA,EAAInsB,EAAS,GAAImsB,IAC7B,IAAK,IAAIhyB,EAAI,EAAGA,EAAI6F,EAAS,GAAI7F,IAC7B2pK,EAAa7oK,IAAIuoK,EAAY9rK,IAAIy0B,EAAG43I,EAAoB5pK,GAAIgyB,EAAGz3B,EAAGyF,MAM9E,MAAM8iD,EAAczhD,EAAMnB,QAE1B,OADA4iD,EAAYo2B,GAASwwF,EAAe,GAC7B,CACHr5F,aAAcs5F,EAAavoK,OAC3B0hD,cACAt2B,WClFD,MCsHDq9I,GAAgB,CAClBrtB,GACAK,GACAE,GACAC,GACAzC,GACA0C,GACAO,GACAI,GACAE,GACAE,GACAE,GACAC,GACAC,GACAG,GACAC,GACAqD,GACAC,GACA,GACA,GACAvF,GACA+G,GACAoB,GACAU,GACA1M,GACA6M,GACAG,GACAxN,GACAyN,GACAoB,GACAyB,GACAS,GACAV,GACA4B,GACAkB,GACA1B,GACAiC,GACAC,GACAC,GACA8B,GACAO,GACAC,GACAY,GACAC,GACAE,GACAC,GACAC,GACAc,GACAH,GACA+B,GACAnB,GACAta,GACA,GACA2a,GACAM,GACAE,GACAE,GACAE,GACAkE,GACAI,GACAC,GACAO,GACAE,GACAC,GACAE,GACAC,GACAa,GACAK,GACAE,GACA9hB,GACA+hB,GACAjS,GACAkS,GACAC,GACAC,GACAhiB,GACAkiB,GACAE,GACAE,GACAE,GACAC,GACAE,GACAC,GACAE,GACAC,GACAO,GACAU,GACAC,GACAC,GACA,GACA,GACAG,GACAP,GACAa,GACAG,GACAE,GACAC,GACAK,GACAQ,GACA/L,GACA0M,GACAC,GACAC,GACAC,GACAM,GACAC,GACAI,GACAG,GACAC,GACAE,GACA3mB,GACA8mB,GACAE,GACAvmB,GACAwmB,GACAhnB,GACAC,GACA8C,GACAkkB,GACA,GACAkD,GACA,GACAiB,GACAE,GACAM,GACAE,GACAK,GACAC,GACAI,GACAtsB,GACAusB,GACAC,GACAC,GACA9f,GACA6X,GACAqI,GACAC,GACAqB,GACAW,GACAC,GACAC,GACAE,GACAC,GACAE,GACAE,GACAE,GACArV,GACAvB,GACA8W,GNnTsB,CACtBhmK,WAAYqU,GACZkB,YAAa,MACb0O,WAAY,IOKU,CACtBjkB,WAAYsU,GACZiB,YAAa,MACb0O,WAXG,SAAc5pB,GACjB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,EAAEwG,GAAM4W,GACR,KAAE+nC,GAASr8B,EACjB0wH,GAAiBhzI,EAAG,QACpB,MAAM46I,EAASwqB,GAASpnK,EAAQ2hJ,WAAW3/I,GAAI2+C,GAC/C,OAAO3gD,EAAQ41I,eAAegH,EAAO77I,MAAO67I,EAAO57I,MAAO47I,EAAO97I,UCM3C,CACtBK,WAAYuU,GACZgB,YAAa,MACb0O,WAfG,SAAc5pB,GACjB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,EAAEwG,GAAM4W,GACR,EAAEkH,EAAC,OAAEo5C,GAAW50C,EACtB0wH,GAAiBhzI,EAAG,QACpB,MAAMqzD,EAAQr1D,EAAQE,KAAKjD,IAAI+E,EAAE3B,QAAQS,QAClCwmK,EAAaC,GAAkBF,GAAShyG,EAAOrzD,EAAEjB,MAAOiB,EAAEhB,MAAO8e,GACxE,MAAO,CACH9f,EAAQ41I,eAAe0xB,EAAYvmK,MAAOumK,EAAYtmK,MAAOsmK,EAAYxmK,QACzEd,EAAQ41I,eAAe2xB,EAAexmK,MAAOwmK,EAAevmK,MAAOumK,EAAezmK,WF8StFm8I,GH/P2B,CAC3B97I,WAAYwU,GACZe,YAAa,MACb0O,WA7DG,SAAmB5pB,GACtB,MAAM,OAAEod,EAAM,MAAE0L,EAAK,QAAEtkB,GAAYxE,GAC7B,MAAEi0B,EAAK,WAAE05C,GAAevwD,GACxB,cAAEwwD,EAAa,SAAEC,EAAQ,UAAE7G,EAAS,YAAEhgB,GAAgBl+B,GACrDwyC,EAAO0b,EAAaC,EAAYjtC,GAAe/V,EAAM1uB,OACrD85C,EAAWC,GAA2B,MAAf0H,EAAsBA,EAAc,CAACgwB,EAAaC,GAC1E9lC,EAAW,CAACmqB,EAAOjc,EAAWC,EAAUtV,GACxCv9B,EAAU,GAAoBwnB,EAAM1uB,OACpCqnK,EAAcngK,EAAQ,GACtBogK,EAAYpgK,EAAQ,GACpBqgK,EAAYrgK,EAAQ,GACpBiuI,EAAU,GAA4BzmH,EAAMzuB,MAAO,GAAmB2rC,IAC5EupG,EAAQz7H,KAAK+nD,GACb,MAAMqpF,EAAY7rJ,EAAQE,KAAKjD,IAAIwyB,EAAMpvB,QAAQS,OAC3C0oK,EAAgBxpK,EAAQE,KAAKjD,IAAIksE,EAAW9oE,QAAQS,OAG1D,IAAK,IAAIyB,EAAI,EAAGA,EAAIu0D,IAASv0D,EAAG,CAC5B,MAAM0mE,EAAoC,IAAxBE,EAAWpoE,MAAM,GAC/ByoK,EACAA,EAAcrrG,SAAa,EAAJ57D,EAAW,EAAJA,EAAQ,GAC1C,IAAK,IAAIknK,EAAO,EAAGA,EAAO5uH,IAAa4uH,EACnC,IAAK,IAAIC,EAAO,EAAGA,EAAO5uH,IAAY4uH,EAClC,IAAK,IAAI7iI,EAAU,EAAGA,EAAUrB,IAAeqB,EAAS,CACpD,IAAI1kC,EACJ,MAAMwnK,EAAa1gG,EAAU,GAAKygG,EAAOzgG,EAAU,GAAKwgG,EAAO,EAC/D,GAAmB,IAAfE,EAGA,SAEJ,MAAMC,GAAO3gG,EAAU,GAAKygG,EAAOzgG,EAAU,GAAKwgG,EAAOxgG,EAAU,IAC/D0gG,EACEE,GAAO5gG,EAAU,GAAKygG,EAAOzgG,EAAU,GAAKwgG,EAAOxgG,EAAU,IAC/D0gG,EACE3nK,EAAI0lK,GAASkC,EAAKn3F,EAAYpJ,GAC9BtlD,EAAI2jJ,GAASmC,EAAKr3F,EAAanJ,GACrC,OAAQD,GACJ,IAAK,UACDjnE,EAAMomK,GAAqB1c,EAAWr5E,EAAaC,EAAY21F,EAAaC,EAAWC,EAAW/lK,EAAGwhB,EAAG/hB,EAAG6kC,EAAS27B,GACpH,MACJ,IAAK,WACDrgE,EAAMqmK,GAAsB3c,EAAWr5E,EAAaC,EAAY21F,EAAaC,EAAWC,EAAW/lK,EAAGwhB,EAAG/hB,EAAG6kC,EAAS27B,GACrH,MACJ,QACI,MAAM,IAAIphE,MACN,+DAAuBgoE,KAGnC8sE,EADY3zI,EAAI6lK,EAAcqB,EAAOpB,EAAYqB,EAAOpB,EAAYzhI,GACrD1kC,EAI3B,OAAOnC,EAAQ41I,eAAejpG,EAAUld,EAAMzuB,MAAOk1I,GAGzD,MAAO,CAAE71I,OADML,EAAQwnB,MAAM0uH,EAASvpG,EAAUld,EAAMzuB,OACrCD,MAAO0uB,EAAM1uB,MAAOC,MAAOyuB,EAAMzuB,SM1C1B,CACxBG,WAAY0U,GACZa,YAAa,MACb0O,WAfG,SAAgB5pB,GACnB,MAAM,OAAEod,EAAM,MAAE0L,EAAK,QAAEtkB,GAAYxE,GAC7B,KAAEiK,GAAS6e,GACX,EAAEtiB,GAAM4W,EACdo8H,GAAiBhzI,EAAG,UACpB,MAAMlB,EAASd,EAAQE,KAAKjD,IAAI+E,EAAE3B,QAAQS,QACpC,aAAEivE,EAAY,YAAEvtB,EAAW,QAAEt2B,GAAY28I,GAAW/nK,EAAQ2E,EAAMzD,EAAEjB,MAAOiB,EAAEhB,OACnF,MAAO,CACHhB,EAAQ41I,eAAepzF,EAAaxgD,EAAEhB,MAAO+uE,GAC7C/vE,EAAQ41I,eAAe,CAAC1pH,EAAQlyB,QAAS,QAASkyB,MCmB9B,CACxB/qB,WAAY2U,GACZY,YAAa,MACb0O,WA/BG,SAAgB5pB,GACnB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,MAAEP,GAAU2d,EAClB,IAAI,KAAEnT,GAAS6e,EACX7e,EAAO,IACPA,GAAQxK,EAAM8F,MAAM/G,QAExB,MAAM8vK,EAAY7uK,EAAM8F,MAAM/G,OACxB6M,EAAM5L,EAAM8F,MAAM0E,GAClBknC,EAAW,IAAIxyC,MAAM2vK,EAAY,GACvC,IAAIC,EAAW,EACf,IAAK,IAAI9vK,EAAI,EAAGA,EAAI6vK,EAAW7vK,IACvBA,IAAMwL,IACNknC,EAASo9H,KAAc9uK,EAAM8F,MAAM9G,IAG3C,MAAMkvC,EAAQ,IAAIhvC,MAAM2vK,GAAWrvJ,KAAK,GAClC/W,EAAOzI,EAAM8F,MAAMnB,QACzB8D,EAAK+B,GAAQ,EACb,MAAMke,EAAM,IAAIxpB,MAAM0M,GACtB,IAAK,IAAI5M,EAAI,EAAGA,EAAI0pB,EAAI3pB,OAAQC,IAAK,CACjCkvC,EAAM1jC,GAAQxL,EACd,MAAM+vK,EAAU,GAAM,CAAEpxJ,OAAQ,CAAE5W,EAAG/G,GAAS+E,UAASskB,MAAO,CAAE6kB,QAAOzlC,UACvEigB,EAAI1pB,GAAK,GAAQ,CAAE2e,OAAQ,CAAE5W,EAAGgoK,GAAWhqK,UAASskB,MAAO,CAAEvjB,MAAO4rC,KACpE3sC,EAAQi4I,8BAA8B+xB,GAE1C,OAAOrmJ,ILe6B,CACpCxiB,WAAY4U,GACZW,YAAa,MACb0O,WAvCG,SAA4B5pB,GAC/B,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,EAAEwG,EAAC,WAAE03D,GAAe9gD,GACpB,YAAE+gD,GAAgBr1C,EACxB0wH,GAAiBhzI,EAAG,sBACpB,MAEM2hB,EAAM,GACN04H,EAAgB,GAGhB98D,EANQv9E,EAAEjB,MAAM/G,OACC0/D,EAAW34D,MAAM/G,OAMxC,IAAI4/D,EAAcF,EAClB,IAAK,IAAIz/D,EAAI,EAAGA,EAAIslF,IAAYtlF,EAAG,CAC/B,MAAMgwK,EAAW,GAAW,CAAErxJ,OAAQ,CAAEqB,MAAO2/C,GAAe55D,UAASskB,MAAO,CAAEwwB,IAAK76C,EAAI,KACzF2/D,EAAcqwG,EACd5tB,EAAc39I,KAAKurK,GAEvB,IAAK,IAAIhwK,EAAI,EAAGA,EAAI0/D,IAAe1/D,EAAG,CAClC,MAAMiwK,EAAc,GAAuBjwK,EAAG,SACxCkwK,EAAYnqK,EAAQ41I,eAAe,GAAI,QAASs0B,GAChD7gI,EAAO,GAAM,CAAEzwB,OAAQ,CAAEtW,EAAG6nK,EAAW5nK,EAAGq3D,GAAe55D,YACzDoqK,EAAa,GAAK,CAAExxJ,OAAQ,CAAE5W,EAAGqnC,GAAQrpC,UAASskB,MAAO,CAAEtjB,MAAO,aAClEmvC,EAAM,GAAS,CAAEv3B,OAAQ,CAAEtW,EAAG8nK,EAAY7nK,EAAGP,GAAKhC,YAClDqqK,EAAgB,GAAI,CAAEzxJ,OAAQ,CAAE5W,EAAGmuC,GAAOnwC,UAASskB,MAAO,CAAE7e,KAAM,EAAGoyC,UAAU,KACrFl0B,EAAIjlB,KAAK2rK,GACThuB,EAAc39I,KAAKyrK,GACnB9tB,EAAc39I,KAAK2qC,GACnBgzG,EAAc39I,KAAK0rK,GACnB/tB,EAAc39I,KAAKyxC,GACnBksG,EAAc39I,KAAK2rK,GAEvB,MAAM3nK,EAASi7J,GAAK,CAAE/kJ,OAAQ+K,EAAK3jB,UAASskB,MAAO,CAAE7e,KAAM,KAE3D,OADA42I,EAAc90I,SAAQ6D,GAAKpL,EAAQi4I,8BAA8B7sI,KAC1D1I,ICqRP+6J,IAEJ,IAAK,MAAMhmJ,KAAgB8xJ,GACvBtyJ,GAAeQ,GKlUnB,MAAM4mH,GAAW,GACXisC,GAAmB,CACrBriH,OAAO,EACPsiH,WAAW,EACXC,oBAAoB,EACpBC,uBAAuB,EACvBtmI,OAAO,EACPumI,SAAS,EACTC,8BAA8B,GAQ3B,SAASC,GAAgBC,GAC5B,KAAMA,KAAgBxsC,IAAW,CAC7B,MAAMysC,EAoCd,SAAkCD,GAC9B,GAAqB,IAAjBA,GAAuC,IAAjBA,EACtB,MAAM,IAAIzpK,MAAM,0DAEpB,MAAMslC,EAfV,SAAsBmkI,GAClB,GAA+B,oBAApBE,iBAAoD,IAAjBF,EAC1C,OAAO,IAAIE,gBAAgB,IAAK,KAE/B,GAAwB,oBAAbl/I,SACZ,OAAOA,SAASmQ,cAAc,UAG9B,MAAM,IAAI56B,MAAM,0CAOL4pK,CAAaH,GAK5B,OAJAnkI,EAAOukI,iBAAiB,oBAAqBC,IACzCA,EAAGC,wBACI9sC,GAASwsC,MACjB,GACkB,IAAjBA,EACQnkI,EAAOR,WAAW,QAASokI,KAC/B5jI,EAAOR,WAAW,qBAAsBokI,IAEzC5jI,EAAOR,WAAW,SAAUokI,IAjDhBc,CAAyBP,GACxC,GAAe,OAAXC,EAKA,OADA5gK,QAAQkQ,IAAI,0CAA2CywJ,GAChD,KAJPxsC,GAASwsC,GAAgBC,EAOjC,MAAMO,EAAKhtC,GAASwsC,GACpB,OAAIQ,EAAGC,wBACIjtC,GAASwsC,GACTD,GAAgBC,KAE3BQ,EAAGE,QAAQF,EAAGG,YACdH,EAAGE,QAAQF,EAAGI,cACdJ,EAAGE,QAAQF,EAAGK,OACdL,EAAGE,QAAQF,EAAGM,QACdN,EAAGE,QAAQF,EAAGO,qBACdP,EAAGE,QAAQF,EAAGQ,iBACdR,EAAGS,OAAOT,EAAGU,cACbV,EAAGS,OAAOT,EAAGW,WACbX,EAAGY,SAASZ,EAAGa,MACR7tC,GAASwsC,ICxCb,IAAIsB,GAoCAC,GAOAC,GAQJ,SAASC,GAAyCtsF,EAAMC,GAC3D,MAAO,CAACA,EAASD,GAWd,SAASusF,GAAiBxrK,GAC7B,MAAM2C,EAAO,GAAmB3C,GAEhC,OAAO,GADcU,KAAK4C,KAAKX,EAAO,IAsBnC,SAAS8oK,GAAuCxsF,EAAMC,GACzD,MAAO,CACHx+E,KAAKQ,IAAI,EAAGR,KAAK4C,KAAK47E,EAAU,IAAKx+E,KAAKQ,IAAI,EAAGR,KAAK4C,KAAK27E,EAAO,KAOnE,SAASysF,GAEhBpB,EAAIqB,GAEA,MAAMC,EAAQtB,EACd,IAAIuB,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EA0BJ,OAzByC,IAArC,KAAMC,UAAU,kBAChBV,EAAsBD,EAAMY,KAC5BV,EAA0BF,EAAMa,KAChCV,EAAgCH,EAAMc,QACtCV,EAA4BJ,EAAMe,QAClCV,EAAqBL,EAAMgB,IAC3BT,EAA4B,EAC5BC,EAAqB,EACrBC,EAAuBT,EAAMiB,WAC7BP,EAAmBV,EAAMkB,QAGzBjB,EAAsBvB,EAAGyC,KACzBjB,EAA0BxB,EAAGyC,KAC7BhB,EAAgCzB,EAAGyC,KACnCf,EAA4BJ,EAAMmB,KAClCd,EAAqB3B,EAAGyC,KACxBZ,EAA4B,EAC5BC,EAAqB,EACrBC,EAAoD,MAA7BV,EACnBA,EAA0BqB,eAC1B,KACJV,EAAmBhC,EAAGwC,OAE1BZ,EAAwB5B,EAAGyC,KACpB,CACHlB,sBACAC,0BACAC,gCACAC,4BACAC,qBACAC,wBACAC,4BACAC,qBACAC,uBACAC,oBChJD,SAASW,GAAa3C,EAAIh3C,GAC7B,MAAM45C,EAAc55C,IAIpB,OAHI,KAAMl9G,QAAQ,UAKtB,SAAyBk0J,GACrB,MAAMnwK,EAAQmwK,EAAG6C,WACjB,GAAIhzK,IAAUmwK,EAAG8C,SACb,MAAM,IAAI/sK,MAAM,gBAajB,SAA8BiqK,EAAItpI,GACrC,OAAQA,GACJ,KAAKspI,EAAG8C,SACJ,MAAO,WACX,KAAK9C,EAAG+C,aACJ,MAAO,eACX,KAAK/C,EAAGgD,cACJ,MAAO,gBACX,KAAKhD,EAAGiD,kBACJ,MAAO,oBACX,KAAKjD,EAAGkD,8BACJ,MAAO,gCACX,KAAKlD,EAAGmD,cACJ,MAAO,gBACX,KAAKnD,EAAGoD,mBACJ,MAAO,qBACX,QACI,MAAO,sBAAsB1sI,KA9BC2sI,CAAqBrD,EAAInwK,IAP3DyzK,CAAgBtD,GAEb4C,EAWJ,SAASW,GAAiB/nK,GAC7B,SAAI,KAAMsQ,QAAQ,iCAA2C,IAARtQ,GAHrC,QAIGpF,KAAK+sC,IAAI3nC,IAAQpF,KAAK+sC,IAAI3nC,GAH7B,OA4Bb,SAASgoK,GAAoBxD,EAAIyD,GACpC,OAAOC,GAAY1D,GAAI,IAAMA,EAAG2D,aAAaF,IAAgB,cAAgBA,EAAgB,qCD7CjG,SAAW3C,GAgBPA,EAAcA,EAAqB,MAAI,GAAK,QAiB5CA,EAAcA,EAA4B,aAAI,GAAK,eAjCvD,CAkCGA,KAAkBA,GAAgB,KAErC,SAAWC,GACPA,EAAaA,EAAqB,OAAI,GAAK,SAC3CA,EAAaA,EAAqB,OAAI,GAAK,SAC3CA,EAAaA,EAAqB,OAAI,GAAK,SAC3CA,EAAaA,EAAuB,SAAI,GAAK,WAJjD,CAKGA,KAAiBA,GAAe,KAEnC,SAAWC,GACPA,EAAoBA,EAAsC,iBAAI,GAAK,mBACnEA,EAAoBA,EAAsC,iBAAI,GAAK,mBACnEA,EAAoBA,EAA8C,yBAAI,GAAK,2BAC3EA,EAAoBA,EAAwC,mBAAI,GAAK,qBACrEA,EAAoBA,EAAwC,mBAAI,GAAK,qBALzE,CAMGA,KAAwBA,GAAsB,KCkBjD,MAAM4C,GAAkB,2BAkCjB,SAASC,GAAgB7D,EAAI8D,GAEhC,GADAnB,GAAa3C,GAAI,IAAMA,EAAG6D,gBAAgBC,MACkB,IAAxD9D,EAAG+D,oBAAoBD,EAAS9D,EAAGgE,iBAEnC,MADAnlK,QAAQkQ,IAAIixJ,EAAGiE,kBAAkBH,IAC3B,IAAI/tK,MAAM,qCAwCjB,SAASmuK,GAAmClE,EAAI8D,EAASK,EAAWxyJ,EAAQyyJ,EAAqBC,EAAmBC,GACvH,MAAMrzJ,EAAM+uJ,EAAGuE,kBAAkBT,EAASK,GAC1C,OAAa,IAATlzJ,IAKJ0xJ,GAAa3C,GAAI,IAAMA,EAAGwE,WAAWxE,EAAGyE,aAAc9yJ,KACtDgxJ,GAAa3C,GAAI,IAAMA,EAAG0E,oBAAoBzzJ,EAAKmzJ,EAAqBpE,EAAGwC,OAAO,EAAO6B,EAAmBC,KAC5G3B,GAAa3C,GAAI,IAAMA,EAAG2E,wBAAwB1zJ,MAC3C,GAkBJ,SAAS2zJ,GAAmC5E,EAAI6E,EAASC,EAAwBC,GACpFpC,GAAa3C,GAAI,IAjBd,SAAyBA,EAAI6E,EAASE,IA4D7C,SAA6B/E,EAAI+E,GAC7B,MAAMC,EAAiBhF,EAAGiF,iCAAmC,EACvDC,EAAgBH,EAAc/E,EAAGmF,SACvC,GAAID,EAAgBlF,EAAGmF,UAAYD,EAAgBF,EAE/C,MAAM,IAAIjvK,MAAM,kDADoCivK,QA/DxDI,CAAoBpF,EAAI+E,GACxBpC,GAAa3C,GAAI,IAAMA,EAAGqF,cAAcrF,EAAGmF,SAAWJ,KACtDpC,GAAa3C,GAAI,IAAMA,EAAGsF,YAAYtF,EAAGuF,WAAYV,KAc9BW,CAAgBxF,EAAI6E,EAASE,KACpDpC,GAAa3C,GAAI,IAAMA,EAAGyF,UAAUX,EAAwBC,KAOzD,SAASW,GAA8B1F,EAAI6E,EAASc,GACvDhD,GAAa3C,GAAI,IAAMA,EAAG4F,gBAAgB5F,EAAG6F,YAAaF,KAC1DhD,GAAa3C,GAAI,IAAMA,EAAG8F,qBAAqB9F,EAAG6F,YAAa7F,EAAG+F,kBAAmB/F,EAAGuF,WAAYV,EAAS,KAE1G,SAASmB,GAAkChG,EAAI2F,GAClDhD,GAAa3C,GAAI,IAAMA,EAAG4F,gBAAgB5F,EAAG6F,YAAaF,KAC1DhD,GAAa3C,GAAI,IAAMA,EAAG8F,qBAAqB9F,EAAG6F,YAAa7F,EAAG+F,kBAAmB/F,EAAGuF,WAAY,KAAM,KAEvG,SAASU,GAAoBjG,GAChC,MAAMtpI,EAASspI,EAAGkG,uBAAuBlG,EAAG6F,aAC5C,GAAInvI,IAAWspI,EAAGmG,qBACd,MAAM,IAAIpwK,MAAM,8BAGjB,SAAoCiqK,EAAItpI,GAC3C,OAAQA,GACJ,KAAKspI,EAAGoG,kCACJ,MAAO,oCACX,KAAKpG,EAAGqG,0CACJ,MAAO,4CACX,KAAKrG,EAAGsG,kCACJ,MAAO,oCACX,KAAKtG,EAAGuG,wBACJ,MAAO,0BACX,QACI,MAAO,iBAAiB7vI,KAdoB8vI,CAA2BxG,EAAItpI,IAiBvF,SAASgtI,GAAY1D,EAAIyG,EAAeC,GACpC,MAAMC,EAAUhE,GAAa3C,GAAI,IAAMyG,MACvC,GAAe,MAAXE,EACA,MAAM,IAAI5wK,MAAM2wK,GAEpB,OAAOC,EAUJ,SAASC,GAAYlxK,EAAOmxK,EAAa,GAC5C,OAAO,GAAmBnxK,EAAMnB,MAAM,EAAGmB,EAAM/G,OAASk4K,IAErD,SAASC,GAAYpxK,GACxB,GAAqB,IAAjBA,EAAM/G,OACN,MAAMoH,MAAM,wDAEhB,MAAO,CACHL,EAAM/G,OAAS,EAAI+G,EAAMA,EAAM/G,OAAS,GAAK,EAAG+G,EAAMA,EAAM/G,OAAS,IAGtE,SAASo4K,GAAarxK,GACzB,IAAIsxK,EAAY,CAAC,EAAG,EAAG,GAMvB,OALkC,IAAjBtxK,EAAM/G,QAAkC,IAAjB+G,EAAM/G,QAA6B,IAAb+G,EAAM,KAEhEsxK,EACI,CAACJ,GAAYlxK,MAAWoxK,GAAYpxK,KAErCsxK,EAoEX,SAASC,GAAO5yK,GACZ,OAAOA,EAAI,GAAM,EAMd,SAAS6yK,GAAcxtD,EAAQC,GAGlC,GAAI,GAFJD,EAASA,EAAOnlH,OAAO,GACvBolH,EAASA,EAAOplH,OAAO,IAEnB,OAAO,EAEX,IAAKmlH,EAAO/qH,SAAWgrH,EAAOhrH,OAC1B,OAAO,EAEX,GAAkB,IAAd+qH,EAAO,IAA0B,IAAdA,EAAO,IAA0B,IAAdC,EAAO,IAC/B,IAAdA,EAAO,GACP,OAAO,EAEX,GAAID,EAAO/qH,SAAWgrH,EAAOhrH,OAAQ,CACjC,MAAMw4K,EAAaztD,EAAOnlH,OAAO,GAAG,GAC9B6yK,EAAaztD,EAAOplH,OAAO,GAAG,GACpC,GAAI4yK,IAAeC,EACf,OAAO,EAEX,GAAIH,GAAOE,IAAeF,GAAOG,KACd,IAAd1tD,EAAO,IAA0B,IAAdC,EAAO,IAC3B,OAAO,EAGf,OAAOD,EAAO,KAAOC,EAAO,IAAMstD,GAAOvtD,EAAO,KAAOutD,GAAOttD,EAAO,IAKzE,IAAI0tD,GACAC,GAwCG,SAASC,GAAavH,EAAIyD,GAE7B,OAAc,MADFzD,EAAG2D,aAAaF,GAGzB,SAAS+D,GAAsBhI,GAClC,IAEI,GAAU,MADCD,GAAgBC,GAEvB,OAAO,EAGf,MAAOl5I,GAEH,OADAznB,QAAQkQ,IAAI,qCAAsCuX,IAC3C,EAEX,OAAO,EAwDX,SAASmhJ,GAAuCzH,GAC5C,MAAM0H,EAAYtG,GAAiBpB,GAC7B6E,EAAU7E,EAAG2H,gBACnB3H,EAAGsF,YAAYtF,EAAGuF,WAAYV,GAG9B7E,EAAG4H,WAAW5H,EAAGuF,WAAY,EAAGmC,EAAUnG,oBAF5B,EACC,EAC+D,EAAGmG,EAAU/F,mBAAoB+F,EAAU1F,iBAAkB,MAC3I,MAAM6F,EAAc7H,EAAG8H,oBACvB9H,EAAG4F,gBAAgB5F,EAAG6F,YAAagC,GACnC7H,EAAG8F,qBAAqB9F,EAAG6F,YAAa7F,EAAG+F,kBAAmB/F,EAAGuF,WAAYV,EAAS,GACtF,MAAMkD,EAAwB/H,EAAGkG,uBAAuBlG,EAAG6F,eAAiB7F,EAAGmG,qBAK/E,OAJAnG,EAAGsF,YAAYtF,EAAGuF,WAAY,MAC9BvF,EAAG4F,gBAAgB5F,EAAG6F,YAAa,MACnC7F,EAAGgI,cAAcnD,GACjB7E,EAAGiI,kBAAkBJ,GACdE,EA8BJ,SAAS,GAAiBh0J,EAAQgO,GAChCjzB,MAAMC,QAAQglB,KACfA,EAAS,CAACA,IAEdA,EAAO7X,SAAQ6D,IACF,MAALA,GACA,EAAwB,cAAZA,EAAEpK,OAAuB,IAAM,GAAGosB,kEC9f1D,MAAM,GAAM,KCDL,SAASmmJ,KACZ,IAAIvkI,EACAwgI,EACAgE,EACAC,EACAC,EACAx6J,EACAy6J,EACAC,EACAC,EACAC,EA6EJ,OA5EyC,IAArC,KAAMxG,UAAU,kBAChBt+H,EAAU,kBACVwgI,EAAY,KACZgE,EAAY,MACZC,EAAY,KACZC,EAAY,UACZx6J,EAAS,cACTy6J,EAAe,wBAKfC,EAAmB,gVAcnBC,EAAmB,GACnBC,EAAc,4OAYd9kI,EAAU,GACVwgI,EAAY,YACZgE,EAAY,UACZC,EAAY,UACZC,EAAY,YACZx6J,EAAS,eACTy6J,EAAe,GAEfC,EAAmB,0SASnBC,EAAmB,iNAUnBC,EAAc,yLAUX,CACH9kI,UACAwgI,YACAgE,YACAC,YACAC,YACAx6J,SACAy6J,eACAC,mBACAC,mBACAC,eC5FD,SAASC,GAAmC1Y,EAAQt6J,EAAOS,EAAQ,SACtE,MAAMyG,EAAU,GAAoBlH,GACpC,OAAOkH,EACFtC,KAAI,CAACqW,EAAQ/hB,IAKP,OAJcohK,EAAOphK,QAAQuH,OAAWwa,MACjC/hB,IAAMgO,EAAQjO,OAAS,EACjC,OAAOqhK,EAAOphK,EAAI,QAAQuH,OAAW65J,EAAOphK,QAAQ+hB,IACpD,YAAYq/I,EAAOphK,QAAQ+hB,SAG9BzQ,KAAK,IAuCP,SAASyoK,GAAmBjzK,GAC/B,MAAMkH,EAAU,GAAoBlH,GAAO4E,KAAI2C,GAAKA,EAAE3I,aACtD,MAAO,+DAEasI,EAAQ,mBAAmBA,EAAQ,wBFlD3D,GAAI8kB,aAAa,aAAa,IAAM,GAAIugJ,UAAU,iBAAmB,IAErE,GAAIvgJ,aAAa,iBAAiB,IAC1B8lJ,GAAsB,GACf,EAEFA,GAAsB,GACpB,EAEJ,IAGX,GAAI9lJ,aAAa,kCAAkC,KAAM,IACzD,GAAIA,aAAa,0BAA0B,IAAmC,IAA7B,GAAI9vB,IAAI,mBAEzD,GAAI8vB,aAAa,qBAAqB,KAAM,IAE5C,GAAIA,aAAa,4BAA4B,KAAM,IAEnD,GAAIA,aAAa,cAAc,IAAM,GAAI5V,QAAQ,eAEjD,GAAI4V,aAAa,4BAA4B,IAAM,GAAI5V,QAAQ,gBAE/D,GAAI4V,aAAa,mBAAmB,IAAM,GAAI5V,QAAQ,gBAEtD,GAAI4V,aAAa,4BAA4B,IAAM,GAAI5V,QAAQ,gBAE/D,GAAI4V,aAAa,gCAAgC,IAAM,GAAI5V,QAAQ,gBAEnE,GAAI4V,aAAa,+BAA+B,IAAM,GAAI5V,QAAQ,gBAElE,GAAI4V,aAAa,+BAA+B,IAAM,GAAI5V,QAAQ,gBAElE,GAAI4V,aAAa,+BAA+B,IAAM,GAAI5V,QAAQ,gBAElE,GAAI4V,aAAa,qBAAqB,IAAM,GAAI5V,QAAQ,gBAExD,GAAI4V,aAAa,uBAAuB,IAAM,GAAI5V,QAAQ,gBAE1D,GAAI4V,aAAa,qBAAqB,IAAM,GAAI5V,QAAQ,gBAExD,GAAI4V,aAAa,0BAA0B,ID6SpC,SAAgC89I,GACnC,GAAwB,MAApB6H,GAA0B,CAC1B,MAAMrH,EAAKT,GAAgBC,GAC3B6H,GAAmBrH,EAAG4I,aAAa5I,EAAGqH,kBAE1C,OAAOA,GClTsCwB,CAAuB,GAAI5G,UAAU,oBAEtF,GAAIvgJ,aAAa,gCAAgC,IDwT1C,SAAgC89I,GACnC,GAA8B,MAA1B8H,GAAgC,CAChC,MAAMtH,EAAKT,GAAgBC,GAC3B8H,GAAyBtH,EAAG4I,aAAa5I,EAAG8I,yBAGhD,OAAO1yK,KAAKM,IAAI,GAAI4wK,IC9T+ByB,CAAuB,GAAI9G,UAAU,oBAS5F,GAAIvgJ,aAAa,gDAAgD,KAC7D,MAAM89I,EAAe,GAAIyC,UAAU,iBACnC,OAAqB,IAAjBzC,EACO,EDoTR,SAA2CA,GAC9C,GAAqB,IAAjBA,EACA,OAAO,EAEX,IAAIwJ,EACJ,MAAMhJ,EAAKT,GAAgBC,GAW3B,OARIwJ,EAFAzB,GAAavH,EAAI,oCACA,IAAjBR,EACoB,EAEf+H,GAAavH,EAAI,4BACF,EAGA,EAEjBgJ,EClUAC,CAAkCzJ,MAM7C,GAAI99I,aAAa,iDAAiD,IAAM,GAAIugJ,UAAU,gDAAkD,IACnI,OAIL,GAAIvgJ,aAAa,gCAAgC,ID0U1C,SAA4C89I,GAC/C,GAAqB,IAAjBA,EACA,OAAO,EAEX,MAAMQ,EAAKT,GAAgBC,GAC3B,GAAqB,IAAjBA,GACA,IAAK+H,GAAavH,EAAI,qBAClB,OAAO,OAIX,IAAKuH,GAAavH,EAAI,0BAClB,OAAO,EAIf,OAD8ByH,GAAuCzH,GCzVlBkJ,CAAmC,GAAIjH,UAAU,oBAKxG,GAAIvgJ,aAAa,gCAAgC,KACtC,GAAI5V,QAAQ,6BAEf,GAAIA,QAAQ,kCAMpB,GAAI4V,aAAa,gCAAgC,IDuV1C,SAAuC89I,GAC1C,GAAqB,IAAjBA,EACA,OAAO,EAEX,MAAMQ,EAAKT,GAAgBC,GAC3B,GAAqB,IAAjBA,EAQC,CACD,GAAI+H,GAAavH,EAAI,0BACjB,OAAOyH,GAAuCzH,GAElD,MAAMmJ,EAA0B,8BAChC,GAAI5B,GAAavH,EAAImJ,GAA0B,CAC3C,MAAM9H,EAA4BrB,EAAG2D,aAAawF,GAClD,OAwBZ,SAEAnJ,EAAIqB,GACA,MAAMqG,EAAYtG,GAAiBpB,EAAIqB,GACjCwD,EAAU7E,EAAG2H,gBACnB3H,EAAGsF,YAAYtF,EAAGuF,WAAYV,GAG9B7E,EAAG4H,WAAW5H,EAAGuF,WAAY,EAAGmC,EAAUlG,wBAF5B,EACC,EACmE,EAAGkG,EAAU/F,mBAAoB+F,EAAU3F,qBAAsB,MACnJ,MAAM8F,EAAc7H,EAAG8H,oBACvB9H,EAAG4F,gBAAgB5F,EAAG6F,YAAagC,GACnC7H,EAAG8F,qBAAqB9F,EAAG6F,YAAa7F,EAAG+F,kBAAmB/F,EAAGuF,WAAYV,EAAS,GACtF,MAAMkD,EAAwB/H,EAAGkG,uBAAuBlG,EAAG6F,eAAiB7F,EAAGmG,qBAK/E,OAJAnG,EAAGsF,YAAYtF,EAAGuF,WAAY,MAC9BvF,EAAG4F,gBAAgB5F,EAAG6F,YAAa,MACnC7F,EAAGgI,cAAcnD,GACjB7E,EAAGiI,kBAAkBJ,GACdE,EAzCQqB,CAA2CpJ,EAAIqB,GAE1D,OAAO,EAhBP,QAAKkG,GAAavH,EAAI,wBAGjBuH,GAAavH,EAAI,6BAeIyH,GAAuCzH,GC/WlBqJ,CAA8B,GAAIpH,UAAU,oBAEnG,GAAIvgJ,aAAa,2BAA2B,KAAM4nJ,ODqZzB,KADW9J,ECpZkC,GAAIyC,UAAU,mBD0Z9C,MAFvB1C,GAAgBC,GAEN+J,UANlB,IAA6B/J,KChZpC,GAAI99I,aAAa,6BAA6B,IAKtB,GAAI5V,QAAQ,gCACX,EAAI,IAS7B,GAAI4V,aAAa,kCAAkC,KACvC,IACTq6C,IACC,GAAIA,EAAY,IAAoB,IAAfA,EACjB,MAAM,IAAIhmE,MACN,8FAAkCgmE,SAY9C,GAAIr6C,aAAa,yBAAyB,IAC/B,MAA0B,GAAI5V,QAAQ,aAAe,GAAK,IAClEiwD,IACC,GAAIA,EAAY,IAAoB,IAAfA,EACjB,MAAM,IAAIhmE,MACN,2FAAwCgmE,SEvE7C,MAAMytG,GAAuB,07BC5D7B,MAAMC,GACT,YAAYtyH,GACRjnD,KAAKo6C,cAAgB,CAAC,KACtBp6C,KAAKw5K,cAAe,EACpBx5K,KAAKy5K,cAAe,EACpBz5K,KAAK05K,iBAAmB9I,GAAc+I,MACtC,MAAMC,EAAW5I,GAAiB/pH,GAC5B4yH,EAAO7B,KACbh4K,KAAKinD,YAAcA,EACnBjnD,KAAK85K,SAAW,8DAEd,GAA+C,CAAC,IAAK,IAAK,KAAM7yH,oIAMzD2yH,EAAS,OAAOA,EAAS,gDACFA,EAAS,iQAUvCC,EAAKl8J,mCC5BR,MAAMo8J,GACT,YAAY9yH,GACRjnD,KAAKo6C,cAAgB,CAAC,KACtBp6C,KAAKw5K,cAAe,EACpBx5K,KAAKy5K,cAAe,EACpBz5K,KAAK05K,iBAAmB9I,GAAc+I,MACtC,MAAMC,EAAW5I,GAAiB/pH,GAC5B4yH,EAAO7B,KACbh4K,KAAKinD,YAAcA,EACnBjnD,KAAK85K,SAAW,8DAEd,GAA+C,CAAC,IAAK,IAAK,KAAM7yH,oIAMzD2yH,EAAS,OAAOA,EAAS,gDACFA,EAAS,+RAUvCC,EAAKl8J,mCC5BR,MAAMq8J,GACT,YAAY/yH,GACRjnD,KAAKo6C,cAAgB,CAAC,KACtBp6C,KAAKi6K,YAAcpJ,GAAaqJ,SAChC,MAAML,EAAO7B,KACbh4K,KAAKinD,YAAcA,EACnBjnD,KAAK85K,SAAW,WAChBR,4EAIEO,EAAKl8J,4CCXR,MAAMw8J,GACT,YAAYlzH,GACRjnD,KAAKo6C,cAAgB,CAAC,KACtBp6C,KAAKw5K,cAAe,EACpBx5K,KAAKy5K,cAAe,EACpBz5K,KAAKi6K,YAAcpJ,GAAaqJ,SAChC,MAAML,EAAO7B,KACbh4K,KAAKinD,YAAcA,EACnBjnD,KAAK85K,SAAW,WAChBR,6JAKEO,EAAKl8J,4CCfR,MAAMy8J,GACT,YAAYnzH,EAAa2yH,EAAUS,GAAsB,GACrDr6K,KAAKo6C,cAAgB,CAAC,KACtB,MAAMy/H,EAAO7B,MACNjtI,EAAQliC,GAAS+wK,EACxB55K,KAAKinD,YAAcA,EACnB,IAAItpC,EAAS,SACT08J,IACA18J,EAAS,8BAEb3d,KAAK85K,SAAW,WAChB,GAA+B7yH,iPAUTp+C,uCACIA,uDACeA,QAAYkiC,gCACrC8uI,EAAK1B,mTAcnB0B,EAAKl8J,iBAAiBA,kCCvBzB,MAAM28J,GACT,YAAYrzH,EAAa2yH,EAAUS,GAAsB,GACrDr6K,KAAKo6C,cAAgB,CAAC,KACtBp6C,KAAKw5K,cAAe,EACpBx5K,KAAKy5K,cAAe,EACpB,MAAMI,EAAO7B,MACNjtI,EAAQliC,GAAS+wK,EACxB55K,KAAKinD,YAAcA,EACnB,IAAIszH,EAAW,GACX58J,EAAS,SACT08J,IACA18J,EAAS,8BAEb,IAAK,IAAI0B,EAAM,EAAGA,GAAO,EAAGA,IACxB,IAAK,IAAIirI,EAAM,EAAGA,GAAO,EAAGA,IAAO,CAC/B,MAAMh/G,EAAgB,EAANjsB,EAAUirI,EAC1BiwB,GAAY,oEAEIjwB,OAASrjG,EAAY,wCACrBqjG,uCACEjrI,OAAS4nC,EAAY,0CACrB5nC,gMAOFxW,yCACIA,wDACcA,QAAYkiC,iCACrC8uI,EAAK1B,gFAGL7sI,mFAEAA,mFAEAA,mEAEAA,yEAOjBtrC,KAAK85K,SAAW,WAChB,GAA+B7yH,gOAW7BszH,gBAEAV,EAAKl8J,YAAYA,qBCnD3B,SAAS68J,GAA0B1K,EAAIjnK,EAAOkiC,EAAQ0vI,EAAgBC,EAAeC,IVwG9E,SAA6B9xK,EAAOkiC,GACvC,MAAM6vI,EAAiB,KAAM7I,UAAU,0BACvC,GAAKlpK,GAAS,GAAOkiC,GAAU,EAE3B,MAAM,IAAIllC,MADQ,2BAAIgD,KAASkiC,kBAGnC,GAAKliC,EAAQ+xK,GAAoB7vI,EAAS6vI,EAGtC,MAAM,IAAI/0K,MAFQ,2BAAIgD,KAASkiC,wDACf6vI,KAAkBA,OU/GtC,CAA+B/xK,EAAOkiC,GACtC,MAAM4pI,EVmGH,SAAuB7E,GAC1B,OAAO0D,GAAY1D,GAAI,IAAMA,EAAG2H,iBAAiB,kCUpGjC,CAAyB3H,GACnC+K,EAAQ/K,EAAGuF,WAQjB,OAPA,GAAwBvF,GAAI,IAAMA,EAAGsF,YAAYyF,EAAOlG,KACxD,GAAwB7E,GAAI,IAAMA,EAAGgL,cAAcD,EAAO/K,EAAGiL,eAAgBjL,EAAGkL,iBAChF,GAAwBlL,GAAI,IAAMA,EAAGgL,cAAcD,EAAO/K,EAAGmL,eAAgBnL,EAAGkL,iBAChF,GAAwBlL,GAAI,IAAMA,EAAGgL,cAAcD,EAAO/K,EAAGoL,mBAAoBpL,EAAGqL,WACpF,GAAwBrL,GAAI,IAAMA,EAAGgL,cAAcD,EAAO/K,EAAGsL,mBAAoBtL,EAAGqL,WACpF,GAAwBrL,GAAI,IAAMA,EAAG4H,WAAWmD,EAAO,EAAGJ,EAAgB5xK,EAAOkiC,EAAQ,EAAG2vI,EAAeC,EAAa,QACxH,GAAwB7K,GAAI,IAAMA,EAAGsF,YAAYtF,EAAGuF,WAAY,QACzDV,EAEJ,SAAS0G,GAAyCC,GACrD,OAAOA,EAAcjK,oBAMlB,SAASkK,GAAyCD,GACrD,OAAOA,EAAchK,wBAMlB,SAASkK,GAA+CF,GAC3D,OAAOA,EAAc5J,sBAMlB,SAAS+J,GAAwCH,GACpD,OAAOA,EAAc9J,0BAMlB,SAASkK,GAA+CJ,GAC3D,OAAOA,EAAc/J,8BChElB,MAAMoK,GACT,YAAY7L,GACR9vK,KAAK47K,cAAgB,KACrB57K,KAAK4zK,QAAU,KACf5zK,KAAK67K,UAAW,EAChB77K,KAAK87K,qBAAsB,EAC3B97K,KAAK+7K,YAAc,GACnB,MAAMC,EAAY,KAAMjK,UAAU,iBACxB,MAANjC,GACA9vK,KAAK8vK,GAAKA,EbDf,SAAyBR,EAAcQ,GAC1ChtC,GAASwsC,GAAgBQ,EaCjBmM,CAAgBD,EAAWlM,IAG3B9vK,KAAK8vK,GAAKT,GAAgB2M,GAG9B,IAAIE,EAAqB,2BACzB,MAAMjD,EAA0B,8BAChC,GAAyC,IAArC,KAAMlH,UAAU,iBAAwB,CACxC,MAAMoK,EAAgB,oBAChBC,EAAqB,yBAG3B,GAFAp8K,KAAKq8K,sBACD,GAA+Br8K,KAAK8vK,GAAIqM,GACxC,GAAwBn8K,KAAK8vK,GAAIsM,GACjCp8K,KAAKmxK,0BACD,GAA+BnxK,KAAK8vK,GAAIsM,QAE3C,GAAI,KAAM16K,IAAI,4BACf,MAAM,IAAImE,MAAM,sHAIpB,GADA7F,KAAKs8K,0BAA4Bt8K,KAAK8vK,GAAG2D,aAAayI,GAClD,GAAwBl8K,KAAK8vK,GAAImJ,GACjCj5K,KAAKu8K,8BACD,GAA+Bv8K,KAAK8vK,GAAImJ,QAE3C,GAAI,KAAMv3K,IAAI,4BACf,MAAM,IAAImE,MAAM,oIAMpB,GADAq2K,EAAqB,yBACjB,GAAwBl8K,KAAK8vK,GAAIoM,GACjCl8K,KAAKs8K,0BACDt8K,KAAK8vK,GAAG2D,aAAayI,OAExB,KAAI,GAAwBl8K,KAAK8vK,GAAImJ,GAKtC,MAAM,IAAIpzK,MAAM,uDAJhB7F,KAAKu8K,8BACDv8K,KAAK8vK,GAAG2D,aAAawF,GAMjCj5K,KAAKw8K,aD3CN,SAA4B1M,GAG/B,OV0FG,SAAkCA,EAAInrK,GACzC,MAAM8c,EAAS+xJ,GAAY1D,GAAI,IAAMA,EAAG2M,gBAAgB,gCAGxD,OAFAhK,GAAa3C,GAAI,IAAMA,EAAGwE,WAAWxE,EAAGyE,aAAc9yJ,KACtDgxJ,GAAa3C,GAAI,IAAMA,EAAG4M,WAAW5M,EAAGyE,aAAc5vK,EAAMmrK,EAAG6M,eACxDl7J,EU9FA,CAAoCquJ,EADvB,IAAI9kK,aAAa,EAAE,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,KCyC3E,CAA8BhL,KAAK8vK,IACvD9vK,KAAK48K,YDvCN,SAA2B9M,GAG9B,OV2FG,SAAiCA,EAAInrK,GACxC,MAAM8c,EAAS+xJ,GAAY1D,GAAI,IAAMA,EAAG2M,gBAAgB,gCAGxD,OAFAhK,GAAa3C,GAAI,IAAMA,EAAGwE,WAAWxE,EAAG+M,qBAAsBp7J,KAC9DgxJ,GAAa3C,GAAI,IAAMA,EAAG4M,WAAW5M,EAAG+M,qBAAsBl4K,EAAMmrK,EAAG6M,eAChEl7J,EU/FA,CAAmCquJ,EADZ,IAAIj8I,YAAY,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,KCqCvC,CAA6B7zB,KAAK8vK,IACrD9vK,KAAKy1K,YXkFN,SAA2B3F,GAC9B,OAAO0D,GAAY1D,GAAI,IAAMA,EAAG8H,qBAAqB,sCWnF9B,CAA6B53K,KAAK8vK,IACrD9vK,KAAKs7K,cACD,GAA0Bt7K,KAAK8vK,GAAI9vK,KAAKmxK,2BAEhD,YACI,OAAO,KAAMv1J,QAAQ,SAEzB,UACI,GAAI5b,KAAK67K,SACL,OAEgB,MAAhB77K,KAAK4zK,SACLjlK,QAAQC,KAAK,wKAIS,MAAtB5O,KAAK47K,eACLjtK,QAAQC,KAAK,sMAKjB,MAAMkhK,EAAK9vK,KAAK8vK,GAChB,GAAwBA,GAAI,IAAMA,EAAGgN,WACrC,GAAwBhN,GAAI,IAAMA,EAAG4F,gBAAgB5F,EAAG6F,YAAa,QACrE,GAAwB7F,GAAI,IAAMA,EAAGiI,kBAAkB/3K,KAAKy1K,eAC5D,GAAwB3F,GAAI,IAAMA,EAAGwE,WAAWxE,EAAGyE,aAAc,QACjE,GAAwBzE,GAAI,IAAMA,EAAGwE,WAAWxE,EAAG+M,qBAAsB,QACzE,GAAwB/M,GAAI,IAAMA,EAAGiN,aAAa/8K,KAAK48K,eACvD58K,KAAK67K,UAAW,EAEpB,2BAA2Bp3F,EAAMC,GAE7B,OADA1kF,KAAK0hB,kBDnDN,SAAoCouJ,EAAIrrF,EAAMC,EAAS42F,GAC1D,MAAOzyK,EAAOkiC,GAAU,GAAkD05C,EAAMC,GAChF,OAAO81F,GAA0B1K,EAAIjnK,EAAOkiC,EAAQswI,GAAyCC,GAAgBA,EAAc7J,mBAAoB3B,EAAGwC,OCkDvI,CAAsCtyK,KAAK8vK,GAAIrrF,EAAMC,EAAS1kF,KAAKs7K,eAE9E,2BAA2B72F,EAAMC,GAE7B,OADA1kF,KAAK0hB,kBDhDN,SAAoCouJ,EAAIrrF,EAAMC,EAAS42F,GAC1D,MAAOzyK,EAAOkiC,GAAU,GAAkD05C,EAAMC,GAChF,OAAO81F,GAA0B1K,EAAIjnK,EAAOkiC,EAAQwwI,GAAyCD,GAAgBA,EAAc7J,mBAAoB6J,EAAczJ,sBC+ClJ,CAAsC7xK,KAAK8vK,GAAIrrF,EAAMC,EAAS1kF,KAAKs7K,eAE9E,iCAAiC72F,EAAMC,GAEnC,OADA1kF,KAAK0hB,kBD7CN,SAA0CouJ,EAAIrrF,EAAMC,EAAS42F,GAChE,MAAOzyK,EAAOkiC,GAAU,GAAkD05C,EAAMC,GAChF,OAAO81F,GAA0B1K,EAAIjnK,EAAOkiC,EAAQywI,GAA+CF,GAAgBxL,EAAGyC,KAAMzC,EAAGkN,eC4CpH,CAA4Ch9K,KAAK8vK,GAAIrrF,EAAMC,EAAS1kF,KAAKs7K,eAEpF,yBAAyB3G,EAAS3qI,GAC9BhqC,KAAK0hB,kBDLN,SAAkCouJ,EAAI6E,EAAS3qI,GAClD,GAAwB8lI,GAAI,IAAMA,EAAGsF,YAAYtF,EAAGuF,WAAYV,KAC5D3qI,EAAOrlC,gBAAgBuG,WACvB,GAAwB4kK,GAAI,IAAMA,EAAG4H,WAAW5H,EAAGuF,WAAY,EAAGvF,EAAGyC,KAAMvoI,EAAOnhC,MAAOmhC,EAAOe,OAAQ,EAAG+kI,EAAGyC,KAAMzC,EAAGkN,cAAehzI,EAAOrlC,QAG7I,GAAwBmrK,GAAI,IAAMA,EAAG4H,WAAW5H,EAAGuF,WAAY,EAAGvF,EAAGyC,KAAMzC,EAAGyC,KAAMzC,EAAGkN,cAAehzI,KAE1G,GAAwB8lI,GAAI,IAAMA,EAAGsF,YAAYtF,EAAGuF,WAAY,QCF5D,CAAoCr1K,KAAK8vK,GAAI6E,EAAS3qI,GAE1D,2BAA2B2qI,EAAS9rK,EAAOkiC,EAAQpmC,GAC/C3E,KAAK0hB,kBD1BN,SAAoCouJ,EAAI6E,EAAS9rK,EAAOkiC,EAAQpmC,EAAM22K,GAEzE,IAAI2B,EAAeC,EAAezC,EADlC,GAAwB3K,GAAI,IAAMA,EAAGsF,YAAYtF,EAAGuF,WAAYV,KAE5DhwK,aAAgBuG,YAChB+xK,EAAgB,IAAI/xK,WAAWrC,EAAQkiC,EAAS,GAChDmyI,EAAgBpN,EAAGkN,cACnBvC,EAAiB3K,EAAGyC,OAGpB0K,EAAgB,IAAIjyK,aAAanC,EAAQkiC,EAAS,GAClDmyI,EAAgBpN,EAAGwC,MACnBmI,EAAiBa,EAAc9J,2BAEnCyL,EAAch4K,IAAIN,GAClB,GAAwBmrK,GAAI,IAAMA,EAAG4H,WAAW5H,EAAGuF,WAAY,EAAGoF,EAAgB5xK,EAAOkiC,EAAQ,EAAG+kI,EAAGyC,KAAM2K,EAAeD,KAC5H,GAAwBnN,GAAI,IAAMA,EAAGsF,YAAYtF,EAAGuF,WAAY,QCY5D,CAAsCr1K,KAAK8vK,GAAI6E,EAAS9rK,EAAOkiC,EAAQpmC,EAAM3E,KAAKs7K,eAEtF,iCAAiC72F,EAAMC,GAEnC,OADA1kF,KAAK0hB,kBD3CN,SAA0CouJ,EAAIrrF,EAAMC,EAAS42F,GAChE,MAAOzyK,EAAOkiC,GAAU,GAAgD05C,EAAMC,GAC9E,OAAO81F,GAA0B1K,EAAIjnK,EAAOkiC,EAAQ2wI,GAA+CJ,GAAgBxL,EAAGyC,KAAM+I,EAAczJ,sBC0C/H,CAA4C7xK,KAAK8vK,GAAIrrF,EAAMC,EAAS1kF,KAAKs7K,eAEpF,0BAA0B72F,EAAMC,GAE5B,OADA1kF,KAAK0hB,kBDtDN,SAAmCouJ,EAAIrrF,EAAMC,EAAS42F,GACzD,MAAOzyK,EAAOkiC,GAAU,GAAgD05C,EAAMC,GAC9E,OAAO81F,GAA0B1K,EAAIjnK,EAAOkiC,EAAQ0wI,GAAwCH,GAAgBxL,EAAGyC,KAAMzC,EAAGwC,OCqD7G,CAAqCtyK,KAAK8vK,GAAIrrF,EAAMC,EAAS1kF,KAAKs7K,eAE7E,oBAAoB3G,GAChB30K,KAAK0hB,kBACD1hB,KAAK47K,gBAAkBjH,IACvB,GAA6C30K,KAAK8vK,GAAI9vK,KAAKy1K,aAC3Dz1K,KAAK47K,cAAgB,MAEzB,GAAwB57K,KAAK8vK,IAAI,IAAM9vK,KAAK8vK,GAAGgI,cAAcnD,KAEjE,gDAAgDA,EAASlwF,EAAMC,GAC3D,OAAO1kF,KAAKm9K,qBAAqBxI,GAAS,IDI3C,SAAyD7E,EAAIrrF,EAAMC,EAAS42F,GAC/E,MAAOzqH,EAAG9N,GAAK,GAAkD0hC,EAAMC,GAEjE04F,EAAiB,IAAIlyK,WAAuDu5E,EAAOC,EADrE,GAKpB,OAHA,GAAwBorF,GAAI,IAAMA,EAAGuN,WAAW,EAAG,EAAGxsH,EAAG9N,EAAGu4H,EAAc5J,sBAAuB5B,EAAGkN,cAAeI,KAG5G,IAAIpyK,aAAaoyK,EAAe37J,QCXa,CAA2DzhB,KAAK8vK,GAAIrrF,EAAMC,EAAS1kF,KAAKs7K,iBAE5I,+BAA+B75J,EAAQ85C,EAAOkpB,EAAMC,EAAS44F,EAAcC,GACvE,ODUD,SAAwCzN,EAAIruJ,EAAQ85C,EAAOkpB,EAAM65B,EAAMg/D,EAAcC,EAAcjC,GACtG,MAAMkC,EAAM1N,EACNsN,EAAiB,IAAIpyK,aXpDxB,SAA+Cy5E,EAAMC,GACxD,MAAO7zB,EAAG9N,GAAKkuH,GAAuCxsF,EAAMC,GAC5D,OAAO7zB,EAAI9N,EAAI,EWkDyB,CAA+Cu6H,EAAcC,IAIrG,OAHAC,EAAIlJ,WAAWkJ,EAAIC,kBAAmBh8J,GACtC+7J,EAAIE,iBAAiBF,EAAIC,kBAAmB,EAAGL,GAC/CI,EAAIlJ,WAAWkJ,EAAIC,kBAAmB,MAC/BL,EChBI,CAA0Cp9K,KAAK8vK,GAAIruJ,EAAQ85C,EAAOkpB,EAAMC,EAAS44F,EAAcC,EAAcv9K,KAAKs7K,eAE7H,gCAAgC75J,EAAQtZ,GACpC,ODVD,SAAyC2nK,EAAIruJ,EAAQtZ,GACxD,MAAMq1K,EAAM1N,EACNsN,EAAiB,IAAIpyK,aAAa7C,GAIxC,OAHAq1K,EAAIlJ,WAAWkJ,EAAIC,kBAAmBh8J,GACtC+7J,EAAIE,iBAAiBF,EAAIC,kBAAmB,EAAGL,GAC/CI,EAAIlJ,WAAWkJ,EAAIC,kBAAmB,MAC/BL,ECII,CAA2Cp9K,KAAK8vK,GAAIruJ,EAAQtZ,GAEvE,wBAAwBwsK,EAASlwF,EAAMC,GACnC1kF,KAAK29K,yBAAyBhJ,GAC9B,MAAMxtK,ED7BP,SAAuCq2K,EAAK/4F,EAAMC,EAAS42F,GAE9D,MAAM75J,EAAS+7J,EAAIf,eACnB,GAAwBe,GAAK,IAAMA,EAAIlJ,WAAWkJ,EAAIC,kBAAmBh8J,KAEzE,MAEMm8J,EAAkBC,GAAiCp5F,EAAOC,EAMhE,OALA,GAAwB84F,GAAK,IAAMA,EAAId,WAAWc,EAAIC,kBAAmBG,EAAiBJ,EAAIM,eAG9F,GAAwBN,GAAK,IAAMA,EAAIH,WAAW,EAAG,EAAG34F,EAASD,EAAM+4F,EAAIjL,KAAMiL,EAAIlL,MAAO,KAC5F,GAAwBkL,GAAK,IAAMA,EAAIlJ,WAAWkJ,EAAIC,kBAAmB,QAClEh8J,ECgBY,CAAyCzhB,KAAK8vK,GAAIrrF,EAAMC,EAAS1kF,KAAKs7K,eAErF,OADAt7K,KAAK+9K,6BACE52K,EAEX,wBACI,MAAM62K,EAAeh+K,KAAKi+K,YAAYj+K,KAAK8vK,IAC3C,OAAO9vK,KAAKk+K,UAAUF,GAE1B,YAAYlO,GACR,IAAIrjJ,EACA0xJ,EACJ,GAAI,KAAMviK,QAAQ,2BAA4B,CAC1C,MAAM4hK,EAAM1N,EACNsO,EAAOZ,EAAInE,UAAUmE,EAAIa,2BAA4B,GAC3DvO,EAAGwO,QACHH,EAAgB,KACZ,MAAM33I,EAASg3I,EAAIe,eAAeH,EAAM,EAAG,GAC3C,OAAO53I,IAAWg3I,EAAIgB,kBAClBh4I,IAAWg3I,EAAIiB,qBAEvBhyJ,EAAQ2xJ,OAEH,KAAMrM,UAAU,gDAAkD,GACvEtlJ,EAAQzsB,KAAK0+K,aACb1+K,KAAK2+K,WACLR,EAAgB,IAAMn+K,KAAK4+K,iBAAiBnyJ,EAAO,KAAMslJ,UAAU,kDAOnEoM,EAAgB,KAAM,EAE1B,MAAO,CAAE1xJ,QAAO0xJ,iBAEpB,gCAAgCxJ,EAAS2I,EAAcC,GACnD,OAAOv9K,KAAKm9K,qBAAqBxI,GAAS,ID1B3C,SAA+C7E,EAAIwN,EAAcC,GACpE,MAAMsB,EAAa,IAAI7zK,aAAasyK,EAAeC,EAAe,GAElE,OADA,GAAwBzN,GAAI,IAAMA,EAAGuN,WAAW,EAAG,EAAGE,EAAcD,EAAcxN,EAAGyC,KAAMzC,EAAGwC,MAAOuM,KAC9FA,ECuB6C,CAAiD7+K,KAAK8vK,GAAIwN,EAAcC,KAE5H,cAAcuB,GACV9+K,KAAK0hB,kBACL,MAAMouJ,EAAK9vK,KAAK8vK,GACViP,EX3HP,SAA8BjP,EAAIgP,GACrC,MAAMC,EAAiBvL,GAAY1D,GAAI,IAAMA,EAAGkP,aAAalP,EAAGmP,kBAAkB,0CAGlF,GAFAxM,GAAa3C,GAAI,IAAMA,EAAGoP,aAAaH,EAAgBD,KACvDrM,GAAa3C,GAAI,IAAMA,EAAGqP,cAAcJ,MACyB,IAA7DjP,EAAGsP,mBAAmBL,EAAgBjP,EAAGuP,gBAEzC,MAKR,SAAmCH,EAAcI,GAC7C,MAAMC,EAAwB7L,GAAgB8L,KAAKF,GACnD,GAA6B,MAAzBC,EAGA,OAFA5wK,QAAQkQ,IAAI,wCAAwCygK,UACpD3wK,QAAQkQ,IAAIqgK,GAGhB,MAAMO,GAAcF,EAAsB,GACpCG,EAAcR,EAAa5vK,MAAM,MACjCsQ,EAAM8/J,EAAYjhL,OAAO2F,WAAW3F,OAAS,EAC7CkhL,EAAuBD,EAAYt1K,KAAI,CAACk0F,EAAMmhF,IAAe,IAAeA,EAAa,GAAGr7K,WAAYwb,GAAO0+E,IACrH,IAAIshF,EAAgB,EACpB,IAAK,IAAIlhL,EAAI,EAAGA,EAAIihL,EAAqBlhL,OAAQC,IAC7CkhL,EAAgB15K,KAAKQ,IAAIi5K,EAAqBjhL,GAAGD,OAAQmhL,GAE7D,MAAMC,EAAmBF,EAAqBt7K,MAAM,EAAGo7K,EAAa,GAC9DK,EAAYH,EAAqBt7K,MAAMo7K,EAAa,EAAGA,GACvDM,EAAkBJ,EAAqBt7K,MAAMo7K,GACnD9wK,QAAQkQ,IAAIghK,EAAiB7vK,KAAK,OAClCrB,QAAQkQ,IAAIygK,EAAchwK,MAAM,MAAM,IACtCX,QAAQkQ,IAAI,MAAM,GAAcihK,EAAU,GAAIF,KAAkB,iEAChEjxK,QAAQkQ,IAAIkhK,EAAgB/vK,KAAK,OA3B7BgwK,CAA0BlB,EAAsBhP,EAAGmQ,iBAAiBlB,IAC9D,IAAIl5K,MAAM,sCAEpB,OAAOk5K,EWmHoB,CAAgCjP,EAAIgP,GAClC,MAArB9+K,KAAKkgL,eACLlgL,KAAKkgL,aDrLV,SAA4BpQ,GAC/B,MAAM+J,EAAO7B,KAWb,OVkCG,SAA4BlI,EAAIqQ,GACnC,MAAMD,EAAe1M,GAAY1D,GAAI,IAAMA,EAAGkP,aAAalP,EAAGsQ,gBAAgB,wCAG9E,GAFA3N,GAAa3C,GAAI,IAAMA,EAAGoP,aAAagB,EAAcC,KACrD1N,GAAa3C,GAAI,IAAMA,EAAGqP,cAAce,MACuB,IAA3DpQ,EAAGsP,mBAAmBc,EAAcpQ,EAAGuP,gBAEvC,MADA1wK,QAAQkQ,IAAIixJ,EAAGmQ,iBAAiBC,IAC1B,IAAIr6K,MAAM,oCAEpB,OAAOq6K,EU1CA,CAA8BpQ,EAVV,GAAG+J,EAAKpmI,4CAEjComI,EAAK5F,qCACL4F,EAAK5F,2BACL4F,EAAK5B,0HC+KqB,CAA8BnI,IAEtD,MAAM8D,EX7FP,SAAuB9D,GAC1B,OAAO0D,GAAY1D,GAAI,IAAMA,EAAGuQ,iBAAiB,kCW4F7B,CAAyBvQ,GAWzC,OAVA,GAAwBA,GAAI,IAAMA,EAAGwQ,aAAa1M,EAAS5zK,KAAKkgL,gBAChE,GAAwBpQ,GAAI,IAAMA,EAAGwQ,aAAa1M,EAASmL,KX5F5D,SAAqBjP,EAAI8D,GAE5B,GADAnB,GAAa3C,GAAI,IAAMA,EAAGyQ,YAAY3M,MACkB,IAApD9D,EAAG+D,oBAAoBD,EAAS9D,EAAG0Q,aAEnC,MADA7xK,QAAQkQ,IAAIixJ,EAAGiE,kBAAkBH,IAC3B,IAAI/tK,MAAM,+CWyFhB,CAAuBiqK,EAAI8D,GACvB5zK,KAAKygL,OACL,GAA2B3Q,EAAI8D,GAE9B5zK,KAAK87K,sBACN97K,KAAK0gL,WAAW9M,GAChB5zK,KAAK87K,oBDxHV,SAA2ChM,EAAI8D,EAAS4I,GAM3D,OAFA,GAAwB1M,GAAI,IAAMA,EAAGwE,WAAWxE,EAAGyE,aAAciI,KACjD,GAA8C1M,EAAI8D,EAAS,eAAgB4I,EAAc,EAF1F,GAFG,IAMd,GAA8C1M,EAAI8D,EAAS,KAAM4I,EAAc,EAJpE,GADE,ICsHkB,CAA6C1M,EAAI9vK,KAAK4zK,QAAS5zK,KAAKw8K,eAE5F5I,EAEX,cAAcA,GACV5zK,KAAK0hB,kBACDkyJ,IAAY5zK,KAAK4zK,UACjB5zK,KAAK4zK,QAAU,MAEJ,MAAXA,GACA,GAAwB5zK,KAAK8vK,IAAI,IAAM9vK,KAAK8vK,GAAG6Q,cAAc/M,KAGrE,WAAWA,GACP5zK,KAAK0hB,kBACL1hB,KAAK4zK,QAAUA,EACM,MAAhB5zK,KAAK4zK,SAAoB5zK,KAAKygL,OAC/B,GAA2BzgL,KAAK8vK,GAAI9vK,KAAK4zK,SAE7C,GAAwB5zK,KAAK8vK,IAAI,IAAM9vK,KAAK8vK,GAAG8Q,WAAWhN,KAE9D,mBAAmBA,EAASiN,EAAaC,GAAc,GAEnD,OADA9gL,KAAK0hB,kBACDo/J,EXjDL,SAA0ChR,EAAI8D,EAASiN,GAC1D,OAAOrN,GAAY1D,GAAI,IAAMA,EAAGiR,mBAAmBnN,EAASiN,IAAc,YAAcA,EAAc,6BWiDvF,CAA4C7gL,KAAK8vK,GAAI8D,EAASiN,GX/C1E,SAAmC/Q,EAAI8D,EAASiN,GACnD,OAAO/Q,EAAGiR,mBAAmBnN,EAASiN,GWiDvB,CAAqC7gL,KAAK8vK,GAAI8D,EAASiN,GAGtE,qBAAqBjN,EAASK,GAE1B,OADAj0K,KAAK0hB,kBACE,GAAwB1hB,KAAK8vK,IAAI,IAAM9vK,KAAK8vK,GAAGuE,kBAAkBT,EAASK,KAErF,0BAA0BL,EAASiN,GAE/B,OADA7gL,KAAK0hB,kBACE1hB,KAAK8vK,GAAGiR,mBAAmBnN,EAASiN,GAE/C,sBAAsBG,EAAoBC,EAAiBpM,GACvD70K,KAAK0hB,kBACL1hB,KAAKkhL,mBACL,GAA8ClhL,KAAK8vK,GAAIkR,EAAoBC,EAAiBpM,GAEhG,uBAAuBsM,EAAqB18F,EAAMC,GAC9C1kF,KAAKohL,6BAA6BD,EAAqBz8F,EAASD,GAEpE,6BAA6B48F,EAA2B58F,EAAMC,GAC1D1kF,KAAK0hB,kBACL,MAAO7Y,EAAOkiC,GAAU,GAAgD05C,EAAMC,GAC9E1kF,KAAKohL,6BAA6BC,EAA2Bx4K,EAAOkiC,GAExE,2BAA2Bu2I,EAAUh2H,EAASi2H,EAAah2H,GACvDvrD,KAAKwhL,iCAAiCD,EAAaD,EAAU/1H,EAAYD,GAE7E,iCAAiCg2H,EAAUh2H,EAASi2H,EAAah2H,GAC7D,MAAM,IAAI1lD,MAAM,qDAEpB,gBACwB,MAAhB7F,KAAK4zK,SACL,GAA2B5zK,KAAK8vK,GAAI9vK,KAAK4zK,SAE7C,GAA+B5zK,KAAK8vK,IAExC,iBACI9vK,KAAK0hB,kBACL1hB,KAAKkhL,mBACL,MAAMpR,EAAK9vK,KAAK8vK,GACZ9vK,KAAKygL,OACLzgL,KAAKyhL,gBAET,GAAwB3R,GAAI,IAAMA,EAAG4R,aAAa5R,EAAG6R,UAAW,EAAG7R,EAAG8R,eAAgB,KAE1F,iCACI5hL,KAAK0hB,kBACL,GAAwB1hB,KAAK8vK,IAAI,IAAM9vK,KAAK8vK,GAAGgN,WAEnD,yBAOI,OANwC,MAApC98K,KAAK6hL,8BACL7hL,KAAK6hL,4BACD,GAA+B7hL,KAAK8vK,GAAwE,IAApE,KAAMiC,UAAU,gDACpD,kCACA,6BAEL/xK,KAAK6hL,4BAEhB,+BACI,OAAO7hL,KAAK8hL,yBAEhB,+BACI,OAAO9hL,KAAK8hL,yBAEhB,aACI,GAAwE,IAApE,KAAM/P,UAAU,gDAAuD,CACvE,MAAMyL,EAAMx9K,KAAK8vK,GACXiS,EAAM/hL,KAAKgiL,+BACXv1J,EAAQ+wJ,EAAIyE,cAElB,OADAzE,EAAIkB,WAAWqD,EAAIG,iBAAkBz1J,GAC9BA,EAEX,MAAMs1J,EAAM/hL,KAAKmiL,+BACX11J,EAAQs1J,EAAIK,iBAElB,OADAL,EAAIM,cAAcN,EAAIG,iBAAkBz1J,GACjCA,EAEX,WACI,GAAwE,IAApE,KAAMslJ,UAAU,gDAAuD,CACvE,MAAMyL,EAAMx9K,KAAK8vK,GACXiS,EAAM/hL,KAAKgiL,+BAEjB,YADAxE,EAAImB,SAASoD,EAAIG,kBAGrB,MAAMH,EAAM/hL,KAAKmiL,+BACjBJ,EAAIO,YAAYP,EAAIG,kBAExB,6BAA6Bz1J,GAKzB,aAJM,IAAiB,IAAMzsB,KAAK67K,UAG9B77K,KAAK4+K,iBAAiBnyJ,EAAO,KAAMslJ,UAAU,mDAC1C/xK,KAAKuiL,aAAa91J,EAAO,KAAMslJ,UAAU,iDAEpD,aAAatlJ,EAAOqsJ,GAChB,GAA0B,IAAtBA,EACA,OAAO,KAEX,GAA0B,IAAtBA,EAAyB,CACzB,MAAM0E,EAAMx9K,KAAK8vK,GAGjB,OAFyB0N,EAAIgF,kBAAkB/1J,EAAO+wJ,EAAIiF,cAEhC,IAEzB,CACD,MAAMV,EAAM/hL,KAAKmiL,+BAGjB,OAFyBJ,EAAIW,kBAAkBj2J,EAAOs1J,EAAIY,kBAEhC,KAGlC,iBAAiBl2J,EAAOqsJ,GACpB,GAA0B,IAAtBA,EACA,OAAO,EAEX,GAA0B,IAAtBA,EAAyB,CACzB,MAAM0E,EAAMx9K,KAAK8vK,GACXiS,EAAM/hL,KAAKgiL,+BACXY,EAAYpF,EAAIgF,kBAAkB/1J,EAAO+wJ,EAAIqF,wBAInD,OAHqB,MAAjB7iL,KAAK8iL,WACL9iL,KAAK8iL,SAAW9iL,KAAK8vK,GAAG4I,aAAaqJ,EAAIgB,mBAEtCH,IAAc5iL,KAAK8iL,SAEzB,CACD,MAAMf,EAAM/hL,KAAKmiL,+BACXS,EAAYb,EAAIW,kBAAkBj2J,EAAOs1J,EAAIiB,4BAInD,OAHqB,MAAjBhjL,KAAK8iL,WACL9iL,KAAK8iL,SAAW9iL,KAAK8vK,GAAG4I,aAAaqJ,EAAIgB,mBAEtCH,IAAc5iL,KAAK8iL,UAGlC,UAAU9E,GACN,OAAO,IAAIn+K,SAAQV,IACfa,KAAKijL,eAAc,IAAMjF,EAAaG,kBAAiB,IAAMh/K,SAGrE,YAEI,MAAM8G,EA4EP,SAA8B1H,GACjC,IAAIG,EAAI,EACR,KAAOA,EAAIH,EAAIE,QACIF,EAAIG,OADEA,GAMzB,OAAOA,EAAI,EApFOwkL,CAAqBljL,KAAK+7K,YAAY3xK,KAAI3D,GAAKA,EAAE08K,YAC/D,IAAK,IAAIzkL,EAAI,EAAGA,GAAKuH,IAASvH,EAAG,CAC7B,MAAM,UAAE0kL,GAAcpjL,KAAK+7K,YAAYr9K,GACvC0kL,IAEJpjL,KAAK+7K,YAAc/7K,KAAK+7K,YAAY13K,MAAM4B,EAAQ,GAEtD,cAAck9K,EAAUC,GACpBpjL,KAAK+7K,YAAY54K,KAAK,CAAEggL,WAAUC,cAC9BpjL,KAAK+7K,YAAYt9K,OAAS,GAK9B,IAAiB,KACbuB,KAAKqjL,YAE8B,IAA5BrjL,KAAK+7K,YAAYt9K,UAGhC,yBAAyBk2K,GACrB30K,KAAK0hB,kBACL,GAAyC1hB,KAAK8vK,GAAI6E,EAAS30K,KAAKy1K,aAC5Dz1K,KAAKygL,OACL,GAA+BzgL,KAAK8vK,IAG5C,6BAC8B,MAAtB9vK,KAAK47K,eACL,GAAyC57K,KAAK8vK,GAAI9vK,KAAK47K,cAAe57K,KAAKy1K,aACvEz1K,KAAKygL,OACL,GAA+BzgL,KAAK8vK,KAIxC,GAA6C9vK,KAAK8vK,GAAI9vK,KAAKy1K,aAGnE,qBAAqBd,EAAS2O,GAC1BtjL,KAAK29K,yBAAyBhJ,GAC9B,MAAMxtK,EAASm8K,IAEf,OADAtjL,KAAK+9K,6BACE52K,EAEX,6BAA6Bo8K,EAAgC16K,EAAOkiC,GAChE/qC,KAAK0hB,kBACL,MAAMouJ,EAAK9vK,KAAK8vK,GAChB,GAAyCA,EAAIyT,EAAgCvjL,KAAKy1K,aAC9Ez1K,KAAKygL,OACL,GAA+B3Q,GAEnC9vK,KAAK47K,cAAgB2H,EACrB,GAAwBzT,GAAI,IAAMA,EAAG0T,SAAS,EAAG,EAAG36K,EAAOkiC,KAC3D,GAAwB+kI,GAAI,IAAMA,EAAG2T,QAAQ,EAAG,EAAG56K,EAAOkiC,KAE9D,iCAAiCtkC,EAAG+hB,EAAG3f,EAAOkiC,GAC1C/qC,KAAK0hB,kBACL,GAAwB1hB,KAAK8vK,IAAI,IAAM9vK,KAAK8vK,GAAG2T,QAAQh9K,EAAG+hB,EAAG3f,EAAOkiC,KAExE,kBACI,GAAI/qC,KAAK67K,SACL,MAAM,IAAIh2K,MAAM,2CAGxB,mBACI,GAAoB,MAAhB7F,KAAK4zK,QACL,MAAM,IAAI/tK,MAAM,qCC3a5B,MAAQszC,iBAAgB,IAAK,EAGtB,SAASuqI,GAAWC,EAAY18H,EAAa6yH,EAAU8J,GAC1D,MAAMC,EAAiB,GACvBF,EAAW33K,SAAQvF,IACf,MAAM0B,EAAO,GAAmB1B,EAAE01J,UAAU2nB,cAExCr9K,EAAE01J,UAAU4nB,UACZF,EAAe1gL,KAAK,iBAAiBsD,EAAEnC,OAAO6D,EAAO,EAAI,IAAIA,KAAU,QAGvE07K,EAAe1gL,KAAK,qBAAqBsD,EAAEnC,SAC3Cu/K,EAAe1gL,KAAK,qBAAqBsD,EAAEnC,aAGnD,MAAM0/K,EAAqBH,EAAe7zK,KAAK,MACzCi0K,EAAuBN,EACxBv5K,KAAI3D,GAgEb,SAAiCy9K,EAAQC,EAAcP,GAAqB,GACxE,IAAIx7J,EAAM,GAENA,GADAw7J,EACOQ,GAA2BF,GAG3BG,GAAqBH,GAEhC,MAAM9qI,EAAU8qI,EAAO/nB,UAAU2nB,aAC3B1yI,EAAW+yI,EAAaL,aAS9B,OARI1qI,EAAQ36C,QAAU2yC,EAAS3yC,SAEvB2pB,GADAw7J,EAg8BZ,SAAwCU,EAAWH,GAC/C,MAAMI,EAAUD,EAAUhgL,KACpBkgL,EAAiBD,EAAQlyC,OAAO,GAAG9rD,cAAgBg+F,EAAQlgL,MAAM,GACjEogL,EAAW,MAAQD,EAAiB,cACpCnrI,EAASirI,EAAUnoB,UAAU2nB,aAAarlL,OAC1Cm1J,EAAUuwB,EAAaL,aAAarlL,OACpCimL,EAAgB,GAAiBJ,EAAUnoB,UAAU2nB,aAAcK,EAAaL,cAChFrgK,EAAOkhK,GAAkB/wB,GACzBgxB,EAAWhxB,EAAUv6G,EAC3B,IAAIwrI,EACJ,MAAM/9F,EAAS,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,KAErC+9F,EADW,IAAXxrI,EACgB,GAEXu6G,EAAU,GAAK8wB,EAAcjmL,QAAU,EAC5B,cAIZimL,EAAct6K,KAAI2C,GAAK,UAAU+5E,EAAO/5E,EAAI63K,YACvC50K,KAAK,MAElB,IAAI80K,EAAwB,GAExBA,EADAlxB,EAAU,GAAKv6G,EAAS,EACA,SAGAirI,EAAUnoB,UAAU2nB,aACvC15K,KAAI,CAACC,EAAG3L,IAAM,UAAUooF,EAAOpoF,EAAIkmL,OACnC50K,KAAK,MAEd,IAAI2N,EAAS,sBACb,MACMonK,EAA2B,IADlB,GAAmBT,EAAUnoB,UAAU2nB,cAGhDkB,EAA6B,IADnB,GAAmBb,EAAaL,cAEhD,GAAe,IAAXzqI,GAAiB0rI,GAAkBC,GAKlC,GAAID,IAAkBC,EAEnBrnK,EADY,IAAZi2I,EACS,uEAKA,qDAKZ,GAAI8wB,EAAcjmL,OAAQ,CAC3B,MAAMgmF,EAAOprC,EAAS,EAChBilE,EAAOjlE,EAAS,EAClBqrI,EAAcrzJ,QAAQozD,IAAS,GAAKigG,EAAcrzJ,QAAQitF,IAAS,EACnE3gG,EAAS,8BAEJ+mK,EAAcrzJ,QAAQozD,IAAS,EACpC9mE,EAAS,2EAGJ+mK,EAAcrzJ,QAAQitF,IAAS,IACpC3gG,EAAS,sDA3BbA,EAAS,6DA8Bb,MAAO,cACA8mK,gBACHhhK,wCACAohK,kCACsBL,KAAkBM,cACxCnnK,eAvgCWsnK,CAA+Bf,EAAQC,GA2gC1D,SAAkCG,EAAWH,GACzC,MAAMI,EAAUD,EAAUhgL,KACpBkgL,EAAiBD,EAAQlyC,OAAO,GAAG9rD,cAAgBg+F,EAAQlgL,MAAM,GACjEogL,EAAW,MAAQD,EAAiB,cACpCU,EAAcf,EAAavK,SAC3BuL,EAAab,EAAUnoB,UAAUyd,SACjCvgI,EAASirI,EAAUnoB,UAAU2nB,aAAarlL,OAC1Cm1J,EAAUuwB,EAAaL,aAAarlL,OAC1C,IAAK6lL,EAAUnoB,UAAU4nB,WAAa1qI,IAAWu6G,GACX,MAAlC0wB,EAAUnoB,UAAU7rH,YACpB,GAAiB60I,EAAYD,GAC7B,MAAO,iBACDT,uCACiBF,+BAI3B,MAAM9gK,EAAOkhK,GAAkB/wB,GACzB8wB,EAAgB,GAAiBJ,EAAUnoB,UAAU2nB,aAAcK,EAAaL,cAChFc,EAAWhxB,EAAUv6G,EAC3B,IAAIwrI,EACJ,MAAM/9F,EAAS,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,KAErC+9F,EADW,IAAXxrI,EACgB,GAEXu6G,EAAU,GAAK8wB,EAAcjmL,QAAU,EAC5B,cAIZimL,EAAct6K,KAAI2C,GAAK,UAAU+5E,EAAO/5E,EAAI63K,YACvC50K,KAAK,MAElB,IAAI80K,EAAwB,GAS5B,OAPIA,EADAlxB,EAAU,GAAKv6G,EAAS,EACA,SAGAirI,EAAUnoB,UAAU2nB,aACvC15K,KAAI,CAACC,EAAG3L,IAAM,UAAUooF,EAAOpoF,EAAIkmL,OACnC50K,KAAK,MAEP,eACCy0K,gBACJhhK,wCACAohK,sBACUL,KAAkBM,iBAtjCjBM,CAAyBlB,EAAQC,IAGzC/7J,EAlFOi9J,CAAwB5+K,EAAGwgD,EAAa28H,KACjD5zK,KAAK,MACJk1K,EAAcj+H,EAAY2yH,SAC1BC,EAAO7B,KACPsN,EAkHV,SAAsCzL,GAClC,MAAO,gFAEIA,EAAK1B,8CArHkBoN,CAA6B1L,GAC/D,IAAI2L,EACAC,EACAC,EAoIR,SAAyB7L,GA4DrB,MA3DsB,GAAGA,EAAKpmI,sGAI5BomI,EAAK3B,iCACL2B,EAAKzB,wTAuBLyB,EAAKxB,yBACLwB,EAAKvB,yBACLuB,EAAKtB,2lBAyBLoN,WACAC,WACAC,SA9LiBC,CAAgBjM,GAkBnC,OAjBI5yH,EAAY8+H,UACZP,EA2ER,SAAwCp0I,EAAU8zI,GAC9C,OAAQ9zI,EAAS3yC,QACb,KAAK,EACD,MA+JD,4DA9JH,KAAK,EACD,OAmKZ,SAAiC+G,EAAOo0K,GACpC,MAAMoM,EAAiB,CAAC9/K,KAAK4C,KAAK8wK,EAAS,GAAK,GAAI1zK,KAAK4C,KAAK8wK,EAAS,GAAK,IAC5E,OAA0B,IAAtBoM,EAAe,GACR,wEAEuBA,EAAe,wBAIvB,IAAtBA,EAAe,GACR,wEAEuBA,EAAe,wBAI1C,gHAGyBA,EAAe,OAAOA,EAAe,yCACxCA,EAAe,+BAvL7BC,CAAwB70I,EAAU8zI,GAC7C,KAAK,EACD,OA4TZ,SAAiC1/K,EAAOo0K,GACpC,MAAMoM,EAAiB,CAAC9/K,KAAK4C,KAAK8wK,EAAS,GAAK,GAAI1zK,KAAK4C,KAAK8wK,EAAS,GAAK,IAC5E,GAAI,GAAiBp0K,EAAOo0K,GACxB,MAAO,kFAE+BoM,EAAe,OAAOA,EAAe,uBAK/E,MAAME,EAAqBhgL,KAAK4C,KAAKtD,EAAM,GAAK,GAUhD,MAAO,kHAGyBwgL,EAAe,OAAOA,EAAe,2CAExCA,EAAe,gDACnBE,kCACDA,kDAvVTC,CAAwB/0I,EAAU8zI,GAC7C,KAAK,EACD,OA8MZ,SAAiC1/K,EAAOo0K,GACpC,MAAMoM,EAAiB,CAAC9/K,KAAK4C,KAAK8wK,EAAS,GAAK,GAAI1zK,KAAK4C,KAAK8wK,EAAS,GAAK,IACtEsM,EAAqBhgL,KAAK4C,KAAKtD,EAAM,GAAK,GAC1C4gL,EAAgBF,EAAqBhgL,KAAK4C,KAAKtD,EAAM,GAAK,GAChE,MAAO,kHAGyBwgL,EAAe,OAAOA,EAAe,yCACxCA,EAAe,6CAExBI,0BACHA,oCAEQF,kCACDA,qDA5NTG,CAAwBj1I,EAAU8zI,GAC7C,QACI,OA4OZ,SAAiC1/K,EAAOo0K,GACpC,MAAMoM,EAAiB,CAAC9/K,KAAK4C,KAAK8wK,EAAS,GAAK,GAAI1zK,KAAK4C,KAAK8wK,EAAS,GAAK,IACtEsM,EAAqBhgL,KAAK4C,KAAKtD,EAAMA,EAAM/G,OAAS,GAAK,GACzD2nL,EAAgBF,EAAqBhgL,KAAK4C,KAAKtD,EAAMA,EAAM/G,OAAS,GAAK,GAC/E,IAAI6nL,EAAiBF,EACjBt3E,EAAU,GACVgxD,EAAS,UACb,IAAK,IAAI94J,EAAI,EAAGA,EAAIxB,EAAM/G,OAAS,EAAGuI,IAClCs/K,GAAkB9gL,EAAMA,EAAM/G,OAASuI,EAAI,GAC3C8nG,EAAU,gBACL9nG,eAAes/K,uBACVt/K,OAAOs/K,WACjBx3E,EACAgxD,EAAS,IAAI94J,MAAQ84J,EAEzB,MAAO,aACDt6J,EAAM/G,6GAEoBunL,EAAe,OAAOA,EAAe,yCACxCA,EAAe,6BAExCl3E,8BAEgBs3E,0BACHA,oCAEQF,kCACDA,+BAET1gL,EAAM/G,UAAUqhK,iBAzQhBymB,CAAwBn1I,EAAU8zI,IArFzCsB,CAA+Bv/H,EAAY68H,aAAcoB,GAC7DO,EAyHR,SAAuC5L,GACnC,MAAO,2CAEHA,EAAKl8J,2BA5H0B8oK,CAA8B5M,KAG7D2L,EAoFR,SAAkCp0I,EAAU8zI,GACxC,OAAQ9zI,EAAS3yC,QACb,KAAK,EACD,MAiJD,4DAhJH,KAAK,EACD,OA8KY,KADUm7K,EA7KasL,GA8K9B,GACF,oEAEmBtL,EAAS,wBAInB,IAAhBA,EAAS,GACF,oEAEmBA,EAAS,wBAIhC,gHAGyBA,EAAS,OAAOA,EAAS,oCACjCA,EAAS,8BA/L7B,KAAK,EACD,OA+UZ,SAA2Bp0K,EAAOo0K,GAC9B,OAAI,GAAiBp0K,EAAOo0K,GACjB,8EAE2BA,EAAS,OAAOA,EAAS,uBAI9C,IAAbp0K,EAAM,GACC,wHAGuBo0K,EAAS,OAAOA,EAAS,2CAC5BA,EAAS,mEAKvB,IAAbp0K,EAAM,GACC,wHAGuBo0K,EAAS,OAAOA,EAAS,2CAC5BA,EAAS,mEAKjC,kHAGyBA,EAAS,OAAOA,EAAS,yCAC5BA,EAAS,2CAClBp0K,EAAM,kCACFA,EAAM,4CAjXfkhL,CAAkBt1I,EAAU8zI,GACvC,KAAK,EACD,OAoNZ,SAA2B1/K,EAAOo0K,GAC9B,MAAM+M,EAAyB,GAA+C,CAAC,IAAK,IAAK,KAAMnhL,GAC/F,MAAO,kHAGyBo0K,EAAS,OAAOA,EAAS,yCAC5BA,EAAS,2BAClC+M,6CA3NWC,CAAkBx1I,EAAU8zI,GACvC,KAAK,EACD,OA+PZ,SAA2B1/K,EAAOo0K,GAC9B,MAAM+M,EAAyB,GAA+C,CAAC,IAAK,IAAK,IAAK,MAAOnhL,GACrG,MAAO,6FAGIo0K,EAAS,OAAOA,EAAS,yCACPA,EAAS,2BAClC+M,iDAtQWE,CAAkBz1I,EAAU8zI,GACvC,KAAK,EACD,OAyQZ,SAA2B1/K,EAAOo0K,GAC9B,MAAM+M,EAAyB,GAA+C,CAAC,IAAK,IAAK,IAAK,KAAM,MAAOnhL,GAC3G,MAAO,oFAEuCo0K,EAAS,qCAC5BA,EAAS,2CAEPA,EAAS,6BAElC+M,yFAlRWG,CAAkB11I,EAAU8zI,GACvC,KAAK,EACD,OAuRZ,SAA2B1/K,EAAOo0K,GAC9B,MAAM+M,EAAyB,GAA+C,CAAC,IAAK,IAAK,IAAK,KAAM,KAAM,MAAOnhL,GACjH,MAAO,6FAGIo0K,EAAS,OAAOA,EAAS,yCACPA,EAAS,6BAElC+M,yFA/RWI,CAAkB31I,EAAU8zI,GACvC,QACI,MAAM,IAAIr/K,MAAM,GAAGurC,EAAS3yC,iDAiKxC,IAAkCm7K,EArQtBoN,CAAyB//H,EAAY68H,aAAcoB,GACvDO,EA6GR,SAAoC5L,GAChC,MAAO,4CAEHA,EAAKl8J,0CAhH0BspK,CAA2BpN,IAE1D+J,IACA8B,GAAgBwB,IAEL,CACXxB,EAAcJ,EAA2BG,EACzCzB,EAAoBwB,EAAuBvB,EAAsBnK,GACnE9pK,KAAK,MAGX,SAASq0K,GAAqBH,GAC1B,MAAM1+K,EAAQ0+K,EAAO/nB,UAAU2nB,aAC/B,OAAQt+K,EAAM/G,QACV,KAAK,EACD,OA6cZ,SAA0B6lL,GACtB,MAAMC,EAAUD,EAAUhgL,KACpBmgL,EAAW,MAAQF,EAAQlyC,OAAO,GAAG9rD,cAAgBg+F,EAAQlgL,MAAM,GACzE,GAAIigL,EAAUnoB,UAAU4nB,UACpB,MAAO,SAASU,eAAsBF,MAE1C,MAAO4C,EAASC,GAAW9C,EAAUnoB,UAAUyd,SAC/C,GAAgB,IAAZuN,GAA6B,IAAZC,EACjB,MAAO,iBACD3C,uCACiBF,6BAI3B,MAAO8C,EAAOC,GAAShD,EAAUnoB,UAAUyd,SAE3C,MAAO,eACC6K,qCACiB4C,MAAUC,MAHpBC,GAAyBhD,oCAIfA,qBAheViD,CAAiBtD,GAC5B,KAAK,EACD,OAgfZ,SAAsBI,GAClB,MAAMC,EAAUD,EAAUhgL,KACpBmgL,EAAW,MAAQF,EAAQlyC,OAAO,GAAG9rD,cAAgBg+F,EAAQlgL,MAAM,GACzE,GAAIigL,EAAUnoB,UAAU4nB,UAEpB,MAAO,iBACDU,2BACJgD,GAAkBnD,oBAIxB,MAAM1K,EAAW0K,EAAUnoB,UAAUyd,SAC/ByN,EAAQzN,EAAS,GACjB0N,EAAQ1N,EAAS,GACvB,GAAc,IAAV0N,GAAyB,IAAVD,EACf,MAAO,iBACD5C,gDACiBF,6BAI3B,MAAM33K,EAAS26K,GAAyBhD,GACxC,OAAc,IAAV+C,EACO,iBACD7C,8DAC+B73K,eAAoBy6K,uCAClC9C,yBAIb,IAAV8C,EACO,iBACD5C,yDAC0B73K,eAAoB06K,4CAC7B/C,yBAIpB,eACCE,8CACiB4C,MAAUC,cAAkB16K,mCAC5B23K,qBAzhBVmD,CAAaxD,GACxB,KAAK,EACD,OAqjBZ,SAAsBI,GAClB,MAAM9+K,EAAQ8+K,EAAUnoB,UAAU2nB,aAC5BS,EAAUD,EAAUhgL,KACpBmgL,EAAW,MAAQF,EAAQlyC,OAAO,GAAG9rD,cAAgBg+F,EAAQlgL,MAAM,GACnEu1K,EAAW0K,EAAUnoB,UAAUyd,SACrC,GAAgB,MAAZA,GAAoB,GAAiBp0K,EAAOo0K,GAAW,CACvD,MAAMuN,EAAUvN,EAAS,GAEzB,MAAO,eACH6K,2EAFY7K,EAAS,SAGgCuN,qCACpC5C,qBAIzB,MAAM,SAAEv6K,EAAQ,SAAEU,GAAa,GAAkBlF,GAC3Cy8H,EAAgBj4H,EACtB,GAAIi4H,EAAcxjI,OAAS+G,EAAM/G,OAAQ,CACrC,MACMkR,EAAS,CAAC,MAAO,OACvB,MAAO,WACP00K,GAHqBsD,GAAiBrD,EAAWriD,oBAI3CwiD,yCACGA,KAAYmD,GAAkBj4K,EAAQjF,sBAInD,GAAI45K,EAAUnoB,UAAU4nB,UAEpB,MAAO,iBACDU,6EACuCj/K,EAAM,sBACjDiiL,GAAkBnD,oBAIxB,MAAM6C,EAAUvN,EAAS,GACnBwN,EAAUxN,EAAS,GACnBhtK,EAAS26K,GAAyBhD,GACxC,OAAgB,IAAZ6C,EAEO,eACH3C,iEAC6B73K,YAAiBpH,EAAM,0DACpB2hL,qCACf5C,qBAIT,IAAZ4C,EAEO,eACH1C,iEAC6B73K,YAAiBpH,EAAM,qDACzB4hL,0CACV7C,qBAIlB,aACDE,yHAEcj/K,EAAM,cAAcoH,gCACjBu6K,MAAYC,wCACZ7C,iBArnBRsD,CAAa3D,GACxB,KAAK,EACD,OAspBZ,SAAsBI,GAClB,MAAM9+K,EAAQ8+K,EAAUnoB,UAAU2nB,aAC5BS,EAAUD,EAAUhgL,KACpBmgL,EAAW,MAAQF,EAAQlyC,OAAO,GAAG9rD,cAAgBg+F,EAAQlgL,MAAM,GACnEyjL,EAAUtiL,EAAM,GAAKA,EAAM,GAC3BuiL,EAAUviL,EAAM,IAChB,SAAEwE,EAAQ,SAAEU,GAAa,GAAkBlF,GAC3Cy8H,EAAgBj4H,EACtB,GAAIi4H,EAAcxjI,OAAS+G,EAAM/G,OAAQ,CACrC,MACMkR,EAAS,CAAC,MAAO,MAAO,SAC9B,MAAO,aACL00K,GAHmBsD,GAAiBrD,EAAWriD,sBAIzCwiD,sDACGA,KAAYmD,GAAkBj4K,EAAQjF,0BAIrD,GAAI45K,EAAUnoB,UAAU4nB,UAEpB,MAAO,iBACDU,0HAEmBqD,MAAYC,qBACnCN,GAAkBnD,oBAIxB,MAAM1K,EAAW0K,EAAUnoB,UAAUyd,SAC/BuN,EAAUvN,EAAS,GACnBwN,EAAUxN,EAAS,GACnBtpI,EAAag0I,EAAUnoB,UAAU7rH,WACvC,GAAI82I,IAAYU,GAAyB,MAAdx3I,EAEvB,MAAO,mBACCm0I,2HAEoCsD,yFAExBX,QAAcD,yCACT5C,6BAI7B,GAAI6C,IAAYW,GAAyB,MAAdz3I,EAEvB,MAAO,eACHm0I,iFACkCj/K,EAAM,kGAEC4hL,QAAcD,qCACtC5C,qBAKzB,MAAO,iBACGE,4IAEcqD,aAAmBC,eAJ5BR,GAAyBhD,qCAKb4C,MAAYC,4CACZ7C,uBAntBZyD,CAAa9D,GACxB,KAAK,EACD,OAkvBZ,SAAsBI,GAClB,MAAM9+K,EAAQ8+K,EAAUnoB,UAAU2nB,aAC5BS,EAAUD,EAAUhgL,KACpBmgL,EAAW,MAAQF,EAAQlyC,OAAO,GAAG9rD,cAAgBg+F,EAAQlgL,MAAM,GACnE4jL,EAAUziL,EAAM,GAChBuiL,EAAUviL,EAAM,GAAKyiL,EACrBH,EAAUtiL,EAAM,GAAKuiL,GACrB,SAAE/9K,EAAQ,SAAEU,GAAa,GAAkBlF,GACjD,GAAIwE,EAASvL,OAAS+G,EAAM/G,OAAQ,CAChC,MACMkR,EAAS,CAAC,MAAO,MAAO,QAAS,UACvC,MAAO,WACP00K,GAHqBsD,GAAiBrD,EAAWt6K,oBAI3Cy6K,gEACGA,KAAYmD,GAAkBj4K,EAAQjF,sBAInD,GAAI45K,EAAUnoB,UAAU4nB,UAEpB,MAAO,iBACDU,8IAEmBqD,MAAYC,MAAYE,qBAC/CR,GAAkBnD,oBAIxB,MAAMh0I,EAAag0I,EAAUnoB,UAAU7rH,WACjCspI,EAAW0K,EAAUnoB,UAAUyd,SAC/BuN,EAAUvN,EAAS,GACnBwN,EAAUxN,EAAS,GACzB,GAAIwN,IAAYU,GAAyB,MAAdx3I,EAEvB,MAAO,iBACDm0I,yKAISsD,MAAYE,qFAETb,QAAcD,uCACT5C,yBAI3B,GAAI6C,IAAYa,GAAyB,MAAd33I,EAEvB,MAAO,iBACDm0I,gIAEkBj/K,EAAM,GAAKA,EAAM,OAAOA,EAAM,0HAGrC4hL,QAAcD,uCACR5C,yBAK3B,MAAO,eACCE,oJAEcqD,aAAmBC,0BACzBE,2CACSd,MAAYC,cANtBG,GAAyBhD,oCAOfA,qBApzBV2D,CAAahE,GACxB,KAAK,EACD,OAszBZ,SAAsBI,GAClB,MAAM9+K,EAAQ8+K,EAAUnoB,UAAU2nB,aAC5BS,EAAUD,EAAUhgL,KACpBmgL,EAAW,MAAQF,EAAQlyC,OAAO,GAAG9rD,cAAgBg+F,EAAQlgL,MAAM,GACnE8jL,EAAU3iL,EAAM,GAChByiL,EAAUziL,EAAM,GAAK2iL,EACrBJ,EAAUviL,EAAM,GAAKyiL,EACrBH,EAAUtiL,EAAM,GAAKuiL,GACrB,SAAE/9K,EAAQ,SAAEU,GAAa,GAAkBlF,GACjD,GAAIwE,EAASvL,OAAS+G,EAAM/G,OAAQ,CAChC,MACMkR,EAAS,CAAC,MAAO,MAAO,QAAS,SAAU,UACjD,MAAO,WACP00K,GAHqBsD,GAAiBrD,EAAWt6K,oBAI3Cy6K,4EACGA,KAAYmD,GAAkBj4K,EAAQjF,sBAInD,GAAI45K,EAAUnoB,UAAU4nB,UAEpB,MAAO,iBACDU,kJAGGqD,MAAYC,MAAYE,MAAYE,qCAE3CV,GAAkBnD,oBAIxB,MAAMh0I,EAAag0I,EAAUnoB,UAAU7rH,WACjCspI,EAAW0K,EAAUnoB,UAAUyd,SAC/BuN,EAAUvN,EAAS,GACnBwN,EAAUxN,EAAS,GACzB,GAAIwN,IAAYU,GAAyB,MAAdx3I,EAEvB,MAAO,iBACDm0I,gLAGkBsD,MAAYE,MAAYE,qFAE9Bf,QAAcD,uCACT5C,yBAI3B,GAAI6C,IAAYe,GAAyB,MAAd73I,EAEvB,MAAO,iBACDm0I,iJAGGj/K,EAAM,GAAKA,EAAM,GAAKA,EAAM,uBAC5BA,EAAM,GAAKA,EAAM,OAAOA,EAAM,iHAGtB4hL,QAAcD,uCACR5C,yBAK3B,MAAO,eACCE,gKAEcqD,aAAmBC,eAAqBE,2BAC7CE,gBALFZ,GAAyBhD,mCAMf4C,MAAYC,0CACZ7C,qBA53BV6D,CAAalE,GACxB,KAAK,EACD,OA83BZ,SAAsBI,GAClB,MAAM9+K,EAAQ8+K,EAAUnoB,UAAU2nB,aAC5BS,EAAUD,EAAUhgL,KACpBmgL,EAAW,MAAQF,EAAQlyC,OAAO,GAAG9rD,cAAgBg+F,EAAQlgL,MAAM,IACnE,SAAE2F,EAAQ,SAAEU,GAAa,GAAkBlF,GACjD,GAAIwE,EAASvL,OAAS+G,EAAM/G,OAAQ,CAChC,MACMkR,EAAS,CAAC,MAAO,MAAO,QAAS,SAAU,SAAU,UAC3D,MAAO,WACP00K,GAHqBsD,GAAiBrD,EAAWt6K,oBAI3Cy6K,6GAEGA,KAAYmD,GAAkBj4K,EAAQjF,sBAInD,MAAM29K,EAAU7iL,EAAM,GAChB2iL,EAAU3iL,EAAM,GAAK6iL,EACrBJ,EAAUziL,EAAM,GAAK2iL,EACrBJ,EAAUviL,EAAM,GAAKyiL,EACrBH,EAAUtiL,EAAM,GAAKuiL,EAC3B,GAAIzD,EAAUnoB,UAAU4nB,UAEpB,MAAO,iBACDU,qLAIGqD,MAAYC,MAAYE,MAAYE,8EAGlCE,qBACTZ,GAAkBnD,oBAIxB,MAAMh0I,EAAag0I,EAAUnoB,UAAU7rH,WACjCspI,EAAW0K,EAAUnoB,UAAUyd,SAC/BuN,EAAUvN,EAAS,GACnBwN,EAAUxN,EAAS,GACzB,GAAIwN,IAAYU,GAAyB,MAAdx3I,EAEvB,MAAO,iBACDm0I,kMAIGsD,MAAYE,MAAYE,MAAYE,kHAG3BjB,QAAcD,uCACT5C,yBAI3B,GAAI6C,IAAYiB,GAAyB,MAAd/3I,EAEvB,MAAO,iBACDm0I,sKAGGj/K,EAAM,GAAKA,EAAM,GAAKA,EAAM,GAAKA,EAAM,uBACvCA,EAAM,GAAKA,EAAM,GAAKA,EAAM,uBAC5BA,EAAM,GAAKA,EAAM,uBACjBA,EAAM,8HAGE4hL,QAAcD,uCACR5C,yBAK3B,MAAO,eACCE,+LAGcqD,aAAmBC,eAAqBE,2BAC7CE,gBAAsBE,gBANxBd,GAAyBhD,mCAOf4C,MAAYC,0CACZ7C,qBA98BV+D,CAAapE,GACxB,QACI,MAAM,IAAIr+K,MAAM,GAAGL,EAAM/G,iDAIrC,SAAS2lL,GAA2BF,GAEhC,OADcA,EAAO/nB,UAAU2nB,aACjBrlL,QACV,KAAK,EACD,OA6aZ,SAAgC6lL,GAC5B,MAAMC,EAAUD,EAAUhgL,KAG1B,MAAO,cAFU,MAAQigL,EAAQlyC,OAAO,GAAG9rD,cAAgBg+F,EAAQlgL,MAAM,wBAC5D2zK,KAGGG,aAAaoM,yBAnbdgE,CAAuBrE,GAClC,KAAK,EACD,OA4cZ,SAA4BI,GACxB,MAAMC,EAAUD,EAAUhgL,KACpBmgL,EAAW,MAAQF,EAAQlyC,OAAO,GAAG9rD,cAAgBg+F,EAAQlgL,MAAM,GACnEu1K,EAAW0K,EAAUnoB,UAAUyd,SAC/BoM,EAAiB,CAAC9/K,KAAK4C,KAAK8wK,EAAS,GAAK,GAAI1zK,KAAK4C,KAAK8wK,EAAS,GAAK,IACtEC,EAAO7B,KACb,MAAO,cACAyM,4DAEDuB,EAAe,OAAOA,EAAe,6BAChCnM,EAAK1B,aAAaoM,qBAtddiE,CAAmBtE,GAC9B,KAAK,EACD,OAqgBZ,SAA4BI,GACxB,MAAM9+K,EAAQ8+K,EAAUnoB,UAAU2nB,aAC5BS,EAAUD,EAAUhgL,KACpBmgL,EAAW,MAAQF,EAAQlyC,OAAO,GAAG9rD,cAAgBg+F,EAAQlgL,MAAM,GACnEu1K,EAAW0K,EAAUnoB,UAAUyd,SAC/BuN,EAAUvN,EAAS,GACnBwN,EAAUxN,EAAS,GACnBC,EAAO7B,KACb,GAAgB,MAAZ4B,GAAoB,GAAiBp0K,EAAOo0K,GAC5C,MAAO,gBACF6K,6EACwC2C,QAAcD,2BAElDtN,EAAK1B,aAAaoM,yBAI/B,MAAMyB,EAAiB,CAAC9/K,KAAK4C,KAAK8wK,EAAS,GAAK,GAAI1zK,KAAK4C,KAAK8wK,EAAS,GAAK,IAE5E,MAAO,cACA6K,yDAFcv+K,KAAK4C,KAAKtD,EAAM,GAAK,OAGIwgL,EAAe,OAAOA,EAAe,gCACxEnM,EAAK1B,aAAaoM,qBA3hBdkE,CAAmBvE,GAC9B,KAAK,EACD,OAimBZ,SAA4BI,GACxB,MAAM9+K,EAAQ8+K,EAAUnoB,UAAU2nB,aAC5BS,EAAUD,EAAUhgL,KACpBmgL,EAAW,MAAQF,EAAQlyC,OAAO,GAAG9rD,cAAgBg+F,EAAQlgL,MAAM,GACnEu1K,EAAW0K,EAAUnoB,UAAUyd,SAC/BoM,EAAiB,CAAC9/K,KAAK4C,KAAK8wK,EAAS,GAAK,GAAI1zK,KAAK4C,KAAK8wK,EAAS,GAAK,IAC5E,GAAiB,IAAbp0K,EAAM,GAAU,CAChB,MACMkF,EAAW,CAAC,EAAG,GAEfiF,EAAS,CAAC,IAAK,MAAO,OAC5B,MAAO,aACLy0K,GAHmBuD,GAAiBrD,EAFhB9+K,EAAMnB,MAAM,sBAM3BogL,kDACIA,KAAYmD,GAAkBj4K,EAAQjF,0BAIrD,MAAMy8K,EAAUnB,EAAe,GACzBoB,EAAUpB,EAAe,GACzB0C,EAAexiL,KAAK4C,KAAKtD,EAAM,GAAK,GAG1C,MAAO,cACAi/K,0EAED0C,MAAYC,MALIsB,EAAexiL,KAAK4C,KAAKtD,EAAM,GAAK,OAKVkjL,kCAJnC1Q,KAKGG,aAAaoM,qBA5nBdoE,CAAmBzE,GAC9B,QACI,OA+rBZ,SAA4BI,GACxB,MAAM9+K,EAAQ8+K,EAAUnoB,UAAU2nB,aAC5B35K,EAAO3E,EAAM/G,OACb8lL,EAAUD,EAAUhgL,KACpBmgL,EAAW,MAAQF,EAAQlyC,OAAO,GAAG9rD,cAAgBg+F,EAAQlgL,MAAM,GACnEu1K,EAAW0K,EAAUnoB,UAAUyd,SAC/BoM,EAAiB,CAAC9/K,KAAK4C,KAAK8wK,EAAS,GAAK,GAAI1zK,KAAK4C,KAAK8wK,EAAS,GAAK,IACtEuN,EAAUnB,EAAe,GACzBoB,EAAUpB,EAAe,GACzB0C,EAAexiL,KAAK4C,KAAKtD,EAAM2E,EAAO,GAAK,GACjD,IAAIi8K,EAAgBsC,EAAexiL,KAAK4C,KAAKtD,EAAM2E,EAAO,GAAK,GAC3DwF,EAAS,0BACT1J,EAAQ,OAAOmgL,mBAA+BsC,gBAClD,IAAK,IAAI1hL,EAAI,EAAGA,EAAImD,EAAO,EAAGnD,IAC1B2I,EAAS,QAAQ3I,MAAQ2I,EACzBy2K,GAAiB5gL,EAAM2E,EAAOnD,EAAI,GAClCf,EAAQ,IAAIe,OAAOo/K,OAAqBngL,EAG5C,MAAO,cACAw+K,KAAY90K,2BACH1J,gCACOmhL,uCACOA,0DACmBA,MAAYD,qBANhDnP,KAOGG,aAAaoM,qBAxtBdqE,CAAmB1E,IA4ItC,MAAMyB,GAAoB,kbAapBC,GAAoB,qTASpBC,GAAoB,2VAUpBqB,GAAuB,sWAsP7B,SAASK,GAAyBhD,GAC9B,MAAO,SAASA,IA6hBpB,SAASkD,GAAkBnD,GACvB,MAAMC,EAAUD,EAAUhgL,KACpByyE,EAAS,GAAmButG,EAAUnoB,UAAU2nB,cACtD,OAAI/sG,EAAS,EACF,UAAUwtG,KAEd,6BACextG,sDAETwtG,4BAmIV,SAASI,GAAkBx6K,GAC9B,GAAIA,GAAQ,EACR,MAAO,MAEN,GAAa,IAATA,EACL,MAAO,QAEN,GAAa,IAATA,EACL,MAAO,QAEN,GAAa,IAATA,EACL,MAAO,QAEN,GAAa,IAATA,EACL,MAAO,QAEN,GAAa,IAATA,EACL,MAAO,QAGP,MAAMtE,MAAM,gBAAgBsE,0BAIpC,SAASw9K,GAAiBzD,EAAQjiD,GAE9B,MAAM4mD,EAAex0J,KAAKgI,MAAMhI,KAAKC,UAAU4vJ,IAE/C,OADA2E,EAAa1sB,UAAU2nB,aAAe7hD,EAC/B4mD,EAEX,SAASjB,GAAkBj4K,EAAQjF,GAC/B,OAAOA,EAASN,KAAI2C,GAAK4C,EAAO5C,KAAIiD,KAAK,MCpoC7C,SAAS84K,GAAyBC,EAAY1rK,GAC1C,GAAI0rK,EAAWtqL,SAAW4e,EAAO5e,OAC7B,MAAMoH,MAAM,4BAA4BkjL,EAAWtqL,wCAC1B4e,EAAO5e,iBAEpCsqL,EAAW/8K,SAAQ,CAAC3B,EAAG3L,KACnB,MAAMgJ,EAAS2C,EAAEy5K,aACXplK,EAAQrB,EAAO3e,GACfiJ,EAAS+W,EAAMlZ,MACrB,IAAK,GAAiBkC,EAAQC,GAC1B,MAAM9B,MACF,2EAA4B6B,SAAcC,gBAGlD,GAAI0C,EAAE05K,WAAarlK,EAAMqlK,UACrB,OAEJ,MAAMiF,EAAY3+K,EAAEuvK,SACdqP,EAAYvqK,EAAMqlK,UAAY,KAAOrlK,EAAMwqK,QAAQtP,SACzD,IAAK,GAAiBoP,EAAWC,GAC7B,MAAMpjL,MACF,kFAAwBmjL,SAAiBC,mBCxEzD,MAAQzqC,QAAS2qC,GAAYngC,aAAcogC,GAAiB//B,mBAAoBggC,GAAuB5/B,SAAU6/B,GAAar/B,WAAYs/B,GAAe5zB,QAAS6zB,GAAYzzB,UAAW0zB,GAAc5uB,UAAW6uB,GAAchuB,aAAciuB,GAAiBttB,YAAautB,GAAgB/sB,SAAUgtB,GAAa5sB,aAAc6sB,GAAiB3sB,QAAS4sB,GAAYvrB,QAASwrB,GAAYrrB,YAAasrB,GAAgBtqB,YAAauqB,GAAgBz1B,aAAc01B,GAAiBjpB,QAASkpB,GAAY1nB,SAAU2nB,GAAaxnB,UAAWynB,GAAc1iB,UAAW2iB,GAAcxpC,cAAeypC,GAAkBliC,UAAWmiC,GAAcnhB,wBAAyBohB,GAA4BpgB,kBAAmBqgB,GAAsBlf,iBAAkBmf,GAAqBz0B,QAAS00B,GAAYhf,SAAUif,GAAahf,SAAUif,GAAaxpC,cAAeypC,GAAkB1d,WAAY2d,IAAmB,ECJ92B,SAASC,GAAe5mL,EAAM6F,GACjC,MAAO,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,KAAK9F,MAAM,EAAG8F,GAAMC,KAAI2C,GAAK,GAAGzI,KAAQyI,MAEtE,SAASo+K,GAAY7mL,EAAM6F,GAC9B,OAAa,IAATA,EACO,CAAC7F,GAEL4mL,GAAe5mL,EAAM6F,GCLzB,MAAMihL,GACT,YAAYnkI,GACRjnD,KAAKo6C,cAAgB,CAAC,KACtBp6C,KAAKw5K,cAAe,EACpBx5K,KAAKy5K,cAAe,EAEpBz5K,KAAKinD,YAAcA,EACnB,MAAM98C,EAAO88C,EAAYxoD,OACzB,GAAa,IAAT0L,EACAnK,KAAK85K,SAAW,iGAMf,CACD,MAAMlc,EAAWutB,GAAY,KAAMhhL,GAC7B1E,EAAQk/K,GAAkBx6K,GAC1BkhL,EAgClB,SAAiClhL,EAAM3E,EAAO8zC,GAC1C,GAAa,IAATnvC,EACA,MAAO,QAAQ3E,EAAM,KAEzB,IAAIq5H,EAAO,GACX,IAAK,IAAIngI,EAAIyL,EAAO,EAAGzL,EAAIyL,EAAMzL,IAC7BmgI,GAAQ,GAAGvlF,EAAK56C,SAAS8G,EAAM9G,KAC3BA,EAAIyL,EAAO,IACX00H,GAAQ,MAGhB,OAAOA,EA3C8BysD,CAAwBnhL,EAAM88C,EAAa22G,GAClE2tB,EA4ClB,SAAkBphL,EAAMm0G,EAAM75B,EAAMnrC,GAChC,GAAa,IAATnvC,EACA,MAAO,GAEX,MAAM+1E,EAAY5mC,EAAKj1C,OAAO,GAC9B,MAAO,iBACG67E,EAAU,oBACVA,EAAU,8EAIEo+B,+BACA75B,SAxDA+mG,CAASrhL,EAAM88C,EAAYA,EAAYxoD,OAAS,GAAIwoD,EAAYA,EAAYxoD,OAAS,GAAIm/J,GACjGjgJ,EA0DlB,SAAmBnY,EAAO8zC,GACtB,MAAMnvC,EAAO3E,EAAM/G,OACbgtL,EA3CV,SAA4BthL,EAAMmvC,GAC9B,MAAMwmH,EAAS,GACf,IAAK,IAAIzgJ,EAAM,EAAGA,GAAO,EAAGA,IACxB,IAAK,IAAIirI,EAAM,EAAGA,GAAO,EAAGA,IAAO,CAC/B,IAAIohC,EAAQ,GAAW,IAARrsK,EAAY,IAAM,UAAkB,IAARirI,EAAY,IAAM,QAC7D,IAAK,IAAIv9I,EAAI,EAAGA,EAAI5C,EAAM4C,IACtB2+K,EAAQ,GAAGpyI,EAAKA,EAAK76C,OAAS,EAAIsO,MAAQ2+K,EAE9C5rB,EAAO38J,KAAKuoL,GAGpB,OAAO5rB,EAgCc6rB,CAAmBxhL,EAAMmvC,GAC9C,OAAa,IAATnvC,EACO,oCACS3E,EAAM,4CAGnB,QAAQimL,EAAa,qCACFA,EAAa,qCACbA,EAAa,8CACJA,EAAa,MArEzBG,CAAU3kI,EAAa22G,GACtC59J,KAAK85K,SAAW,sCAEhBr0K,6CAEG4lL,0EAGDE,mCAEe5tK,yCC/BtB,MAAMkuK,GACT,YAAY5kI,EAAatoC,GACrB3e,KAAKo6C,cAAgB,CAAC,KACtBp6C,KAAKw5K,cAAe,EACpBx5K,KAAKy5K,cAAe,EACpBz5K,KAAKinD,YAAcA,EACnB,IAAIszH,EAAW,GACf,IAAK,IAAI77K,EAAI,EAAGA,EAAI,EAAGA,IAAK,CACxB,IAAIotL,EAAS,eACTptL,EAAI,GAAM,IACVotL,GAAU,kBAEVptL,EAAI,IACJotL,GAAU,kBAEdvR,GAAY,aACduR,cACAptL,EAAI,EAAI,0CAA4C,iOAM3CA,mGAETA,EAAI,EAAI,IAAM,aAuBxB,IAAgC8G,EApBxBxF,KAAK85K,SAAW,WAoBQt0K,EAnBDmZ,EAqBpB,oEADwB,GAA+C,CAAC,IAAK,IAAK,KAAMnZ,wDAnB3F,GAA+ByhD,oJAQlBA,EAAY,2BACZA,EAAY,kBAEvBszH,kDCvCH,MAAMwR,GACT,YAAYC,GACRhsL,KAAKgsL,MAAQA,EACbhsL,KAAKisL,gBAAkB,EACvBjsL,KAAKksL,gBAAkB,EACvBlsL,KAAKmsL,mBAAqB,EAC1BnsL,KAAKosL,cAAgB,EAErBpsL,KAAKqsL,aAAe,GACpBrsL,KAAKssL,YAAa,EAClBtsL,KAAKusL,aAAe,GAExB,eAAeC,EAASC,EAAO1G,GAC3B,MAAM2G,EAAkBC,GAAkCF,EAAO1G,GAC3Dp/E,EAAWimF,GAAuBJ,EAASE,EAAiB3G,GAC5Dp/E,KAAY3mG,KAAKqsL,eACnBrsL,KAAKqsL,aAAa1lF,GAAY,IAE5BA,KAAY3mG,KAAKusL,eACnBvsL,KAAKusL,aAAa5lF,GAAY,IAElC,MAAMkmF,EAAWC,GAAaN,EAASE,EAAiB1sL,KAAKgsL,MAAMlc,GAAI9vK,KAAKgsL,MAAM1Q,cAAeyK,GACjG,GAAI/lL,KAAKqsL,aAAa1lF,GAAUloG,OAAS,EAAG,CACxCuB,KAAKksL,kBACLlsL,KAAKisL,kBACLjsL,KAAKosL,eAAiBS,EACtB7sL,KAAK6e,MACL,MAAMkuK,EAAa/sL,KAAKqsL,aAAa1lF,GAAUy8B,QAE/C,OADApjI,KAAKusL,aAAa5lF,GAAUxjG,KAAK4pL,GAC1BA,EAEX,IAAIA,EAwBJ,OAvBIL,IAAoB5b,GAAoBkc,mBACxCD,EAAa/sL,KAAKgsL,MAAMiB,0BAA0BT,EAAQ,GAAIA,EAAQ,IAEjEE,IAAoB5b,GAAoBoc,mBAC7CH,EACI/sL,KAAKgsL,MAAMmB,iCAAiCX,EAAQ,GAAIA,EAAQ,IAE/DE,IAAoB5b,GAAoBsc,iBAC7CL,EACI/sL,KAAKgsL,MAAMqB,2BAA2Bb,EAAQ,GAAIA,EAAQ,IAEzDE,IAAoB5b,GAAoBwc,iBAC7CP,EACI/sL,KAAKgsL,MAAMuB,2BAA2Bf,EAAQ,GAAIA,EAAQ,IAEzDE,IAAoB5b,GAAoB0c,2BAC7CT,EACI/sL,KAAKgsL,MAAMyB,iCAAiCjB,EAAQ,GAAIA,EAAQ,KAExExsL,KAAKusL,aAAa5lF,GAAUxjG,KAAK4pL,GACjC/sL,KAAKisL,kBACLjsL,KAAKmsL,oBAAsBU,EAC3B7sL,KAAK6e,MACEkuK,EAEX,eAAepY,EAASnvK,EAAOkoL,EAAgB3H,GAC3C,GAAyB,MAArB/lL,KAAKqsL,aAEL,OAEJ,MAAMK,EAAkBC,GAAkCe,EAAgB3H,GACpEp/E,EAAWimF,GAAuBpnL,EAAOknL,EAAiB3G,GAC1Dp/E,KAAY3mG,KAAKqsL,eACnBrsL,KAAKqsL,aAAa1lF,GAAY,IAElC,MAAMkmF,EAAWC,GAAatnL,EAAOknL,EAAiB1sL,KAAKgsL,MAAMlc,GAAI9vK,KAAKgsL,MAAM1Q,cAAeyK,GACzF4H,EAAqB,KAAMjsL,IAAI,mCACT,IAAxBisL,GACA3tL,KAAKmsL,mBAAqBwB,GAC1B3tL,KAAKgsL,MAAM4B,oBAAoBjZ,GAC/B30K,KAAKmsL,oBAAsBU,IAG3B7sL,KAAKqsL,aAAa1lF,GAAUxjG,KAAKwxK,GACjC30K,KAAKksL,kBACLlsL,KAAKosL,eAAiBS,GAE1B7sL,KAAKisL,kBACL,MAAM4B,EAAU7tL,KAAKusL,aAAa5lF,GAC5BmnF,EAAWD,EAAQx8J,QAAQsjJ,GACjC,GAAImZ,EAAW,EACX,MAAM,IAAIjoL,MAAM,4EAGpBgoL,EAAQz/I,OAAO0/I,EAAU,GACzB9tL,KAAK6e,MAET,MACI,IAAK7e,KAAKssL,WACN,OAEJ,MAAM//G,EAAQvsE,KAAKksL,gBAAkBlsL,KAAKisL,gBAC1Ct9K,QAAQkQ,IAAI,YAAa,GAAG7e,KAAKksL,qBAAqBlsL,KAAKisL,kBAAmB,IAAI1/G,MAClF,MAAMwhH,EAAY/tL,KAAKosL,cAAgBpsL,KAAKmsL,mBAC5Cx9K,QAAQkQ,IAAI,oBAAoB7e,KAAKmsL,sBACrCx9K,QAAQkQ,IAAI,iBAAiB7e,KAAKosL,kBAAkBlmL,KAAKsW,MAAM,IAAMuxK,QAEzE,wBACI,OAAO/tL,KAAKmsL,mBAEhB,mBACI,OAAOnsL,KAAKosL,cAEhB,qBACI,OAAOpsL,KAAKisL,gBAEhB,qBACI,OAAOjsL,KAAKksL,gBAEhB,UACI,GAAyB,MAArBlsL,KAAKqsL,aAAT,CAIA,IAAK,MAAMzS,KAAY55K,KAAKqsL,aACxBrsL,KAAKqsL,aAAazS,GAAU5tK,SAAQgiL,IAChChuL,KAAKgsL,MAAM4B,oBAAoBI,MAGvC,IAAK,MAAMpU,KAAY55K,KAAKusL,aACxBvsL,KAAKusL,aAAa3S,GAAU5tK,SAAQgiL,IAChChuL,KAAKgsL,MAAM4B,oBAAoBI,MAGvChuL,KAAKqsL,aAAe,KACpBrsL,KAAKusL,aAAe,KACpBvsL,KAAKisL,gBAAkB,EACvBjsL,KAAKksL,gBAAkB,EACvBlsL,KAAKmsL,mBAAqB,EAC1BnsL,KAAKosL,cAAgB,IAuBtB,SAASU,GAAatnL,EAAOknL,EAAiB5c,EAAIwL,EAAeyK,GAMpE,MAAMtL,EAaV,SAA0CiS,EAAiBpR,GACvD,OAAQoR,GACJ,KAAK5b,GAAoBkc,mBACrB,OAAOvR,GAAwCH,GACnD,KAAKxK,GAAoBoc,mBACrB,OAAOxR,GAA+CJ,GAC1D,KAAKxK,GAAoBsc,iBACrB,OAAO/R,GAAyCC,GACpD,KAAKxK,GAAoBwc,iBACrB,OAAO/R,GAAyCD,GACpD,KAAKxK,GAAoB0c,yBACrB,OAAOhS,GAA+CF,GAC1D,QACI,MAAM,IAAIz1K,MAAM,iCAAiC6mL,MA1BlCuB,CAAiCvB,EAAiBpR,GACzE,IAAIn+C,EACJ,GAAI4oD,EAAU,CACV,MAAOmI,EAAaC,GAAgBld,GAAuCzrK,EAAM,GAAIA,EAAM,IAC3F23H,EAAc+wD,EAAcC,MAE3B,CACD,MAAOtlL,EAAOkiC,GAAUgmI,GAAyCvrK,EAAM,GAAIA,EAAM,IACjF23H,EAAct0H,EAAQkiC,EAG1B,OAAOoyF,EArCX,SAAmC2yC,EAAI2K,GAEnC,MAAMrJ,EAAQtB,EACd,GAAI2K,IAAmBrJ,EAAMY,KACzB,OAAO,EAEN,GAAIyI,IAAmBrJ,EAAMa,KAC9B,OAAO,EAEN,GAAIwI,IAAmBrJ,EAAMe,QAC9B,OAAO,GAEN,GAAIsI,IAAmB3K,EAAGyC,KAC3B,OAAO,GAEN,GAAIkI,IAAmBrJ,EAAMc,QAC9B,OAAO,EAEX,MAAM,IAAIrsK,MAAM,2BAA2B40K,KAkBnB2T,CAA0Bte,EAAI2K,GA+B1D,SAASkS,GAAkCe,EAAgB3H,GACvD,GAAI2H,IAAmB7c,GAAawd,OAChC,OAAOvd,GAAoBkc,mBAE1B,GAAIU,IAAmB7c,GAAayd,QAA4B,MAAlBZ,EAC/C,OAjBR,SAAwC3H,GACpC,OAAI,KAAMnqK,QAAQ,gCACVmqK,EACOjV,GAAoBkc,mBAExBlc,GAAoBsc,iBAE3BrH,EACOjV,GAAoBoc,mBAExBpc,GAAoBwc,iBAOhBiB,CAA+BxI,GAErC,GAAI2H,IAAmB7c,GAAaqJ,UACrCwT,IAAmB7c,GAAa2d,OAChC,OAAO1d,GAAoB0c,yBAE/B,MAAM,IAAI3nL,MAAM,gCAAgC6nL,KAEpD,SAASd,GAAuB6B,EAAc/B,EAAiB3G,GAC3D,MAAO,GAAG0I,EAAa,MAAMA,EAAa,MAAM/B,KAAmB3G,IC1NhE,MAAM2I,GACT,YAAY1/H,EAAQ2/H,GAChB3uL,KAAKo6C,cAAgB,CAAC,KACtBp6C,KAAKinD,YAAc+H,EACnBhvD,KAAK85K,SAAW,oDAEd6U,yJAYH,MAEMC,GAAM,iBAaNC,GAAQ,YCCd,MAAMC,GACT,YAAY9/H,EAAQ2/H,GAChB3uL,KAAKo6C,cAAgB,CAAC,KACtBp6C,KAAKw5K,cAAe,EACpBx5K,KAAKy5K,cAAe,EACpBz5K,KAAKinD,YAAc+H,EACnBhvD,KAAK85K,SAAW,kDAEd6U,uJCxCH,MAAMI,GACT,YAAY9nI,GACRjnD,KAAKo6C,cAAgB,CAAC,KACtBp6C,KAAKw5K,cAAe,EACpBx5K,KAAKy5K,cAAe,EACpBz5K,KAAKinD,YAAcA,EACnB,MAAM98C,EAAO88C,EAAYxoD,OACnBm/J,EAAWutB,GAAY,KAAMhhL,GAC7B1E,EAAQk/K,GAAkBx6K,GAC1BshL,ENFP,SAAyBthL,EAAMmvC,GAClC,GAAa,IAATnvC,EACA,MAAO,KAEX,IAAI21J,EAAS,GACb,IAAK,IAAIphK,EAAI,EAAGA,EAAIyL,EAAMzL,IACtBohK,GAAUxmH,EAAK56C,GACXA,EAAIyL,EAAO,IACX21J,GAAU,KAGlB,OAAOA,EMTkBkvB,CAAgB7kL,EAAMyzJ,GACrC19E,EAAY09E,EAASv5J,OAAO,GAC5By7J,EAAS31J,GAAQ,EAAI,KAAO,QAAQ+1E,EAAUlwE,KAAK,QACzDhQ,KAAK85K,SAAW,kCAEdr0K,8DACwBgmL,oDAEU3rB,uBCI5C,MAAM,GAAY,GAGZmvB,GAAe,GAuBd,MAAMC,WAAyB/pL,EAClC,YAAY6mL,GAoBR,GAnBAtpK,QAEA1iB,KAAKmvL,YAAc,IAAIvqL,QAGvB5E,KAAKovL,gBAAkB,IAAIC,QAG3BrvL,KAAKsvL,aAAe,IAAI1qL,QACxB5E,KAAKuvL,cAAgB,EAErBvvL,KAAKwvL,aAAe,EAEpBxvL,KAAKyvL,eAAiB,EAEtBzvL,KAAK0vL,gBAAkB,EACvB1vL,KAAK2vL,mBAAoB,EACzB3vL,KAAK4vL,eAAiB,EACtB5vL,KAAK67K,UAAW,GACX,KAAMjgK,QAAQ,aACf,MAAM,IAAI/V,MAAM,yCAEpB,GAAa,MAATmmL,EAAe,CACf,MAAMlc,EAAKT,GAAgB,KAAM0C,UAAU,kBAC3C/xK,KAAK6vL,cAhDcvgB,EAgDe,KAAMyC,UAAU,oBA/CtCkd,KAGpBA,GAAa3f,GAAgB,IAFlB2f,GAAa3f,IA+ChBtvK,KAAKgsL,MAAQ,IAAIrQ,GAAa7L,GAC9B9vK,KAAKmrC,OAAS2kI,EAAG3kI,OACjBnrC,KAAK8vL,qBAAsB,OAG3B9vL,KAAKgsL,MAAQA,EACbhsL,KAAK6vL,YAAc,GACnB7vL,KAAK8vL,qBAAsB,EAC3B9vL,KAAKmrC,OAAS6gJ,EAAMlc,GAAG3kI,OAzD5B,IAAwBmkI,EA2DvBtvK,KAAK+vL,eAAiB,IAAIhE,GAAe/rL,KAAKgsL,OAC9ChsL,KAAKgwL,mBA7CkB,MAAvB,KAAM7hL,OAAO8hL,OACN,KAEH,KAAM9hL,OAAO8hL,OAAOllJ,OAAS,KAAM58B,OAAO8hL,OAAOpnL,MACrDwH,OAAO6/K,iBANgB,IAOE,KAAO,KAyChClwL,KAAKkpL,QAAU,IAAI1kL,EAAYxE,KAAM+zC,MAEzC,aACI,OAAOm7I,GAAiBt1C,aAE5B,aACI,OAAO55I,KAAKkpL,QAAQ9/J,aAAeppB,KAAK4vL,eAE5C,MAAMrqL,EAAQC,EAAOC,GAKjB,IAJI,KAAMmW,QAAQ,mCACd,KAAMA,QAAQ,WACd5b,KAAKmwL,uBAAuB5qL,GAElB,cAAVE,GAAmC,MAAVF,EACzB,MAAM,IAAIM,MAAM,yEAGpB,MAAMf,EAAS,CAAEuc,GAAIrhB,KAAK45I,cAE1B,OADA55I,KAAKkpL,QAAQjkL,IAAIH,EAAQ,CAAEU,QAAOC,QAAOF,SAAQknL,MAAO5b,GAAawd,OAAQ3oL,SAAU,IAChFZ,EAGX,SAASA,GACL,OAAI9E,KAAKkpL,QAAQnkL,IAAID,GACE9E,KAAKkpL,QAAQxnL,IAAIoD,GAClBY,SAEf,EAGX,OAAOZ,GACa9E,KAAKkpL,QAAQxnL,IAAIoD,GACzBY,WAGZ,OAAOZ,GACC9E,KAAKkpL,QAAQnkL,IAAID,IACD9E,KAAKkpL,QAAQxnL,IAAIoD,GACzBY,WAGhB,KAAKZ,EAAQS,EAAQC,EAAOC,EAAOC,GAI/B,GAHI,KAAMkW,QAAQ,UACd5b,KAAKmwL,uBAAuB5qL,GAElB,cAAVE,EACA,MAAM,IAAII,MAAM,yEAGpB7F,KAAKkpL,QAAQjkL,IAAIH,EAAQ,CAAEU,QAAOC,QAAOF,SAAQknL,MAAO5b,GAAawd,OAAQ3oL,aAEjF,8BAA8B6f,GAC1BvlB,KAAK6nB,YAAYtC,EAAWzgB,QAEhC,SAASA,GACL,MAAMokL,EAAUlpL,KAAKkpL,QAAQxnL,IAAIoD,IAC3B,OAAES,EAAM,MAAEE,EAAK,mBAAEs0I,EAAkB,MAAE11I,EAAK,MAAEmB,EAAK,SAAEugL,GAAamD,EAItE,GAAa,MAAT7kL,EAAe,CACf,IAAIuvK,EAEAA,EADAmS,EACU,IAAI+I,GAAqBtpL,EAAO,IAGhC,IAAIkpL,GAAelpL,EAAO,IAExC,MAAM4iB,EAAMpoB,KAAKowL,gBAAgBxc,EAAS,CAAC,CAAE9uK,SAAQU,QAAOC,UAAUA,GAChEd,EAAO3E,KAAK6hB,SAASuG,EAAItjB,QAE/B,OADA9E,KAAK08I,8BAA8Bt0H,GAC5BzjB,EAEX,GAAc,MAAVY,EACA,OAAOvF,KAAKqwL,qBAAqBvrL,GAErC,GAAc,WAAVW,EACA,OAAOF,EAEX,MAAM+qL,EAAyC,MAArBtwL,KAAKuwL,aAC/B,IAAI/jL,EAIArF,EAYJ,OAfImpL,IACA9jL,EAAQ,MAMRrF,EAHU,cAAV1B,EAGS,GAFUzF,KAAK6hB,SAASk4H,EAAmB5nH,KAAKrtB,QACtC9E,KAAK6hB,SAASk4H,EAAmB3nH,KAAKttB,SAIhD9E,KAAKwwL,qBAAqB1rL,GAEnCwrL,IACAtwL,KAAKyvL,gBAAkB,KAAajjL,GAEjCxM,KAAKqwL,qBAAqBvrL,EAAQqC,GAE7C,WAAWrC,GACP,GAAI9E,KAAKmvL,YAAYpqL,IAAID,GAAS,CAC9B,MAAM2rL,EAAczwL,KAAKmvL,YAAYztL,IAAIoD,GACzC,OAAO,IAAIjF,SAAQV,GAAWsxL,EAAYttL,KAAKhE,KAEnD,MAAM+pL,EAAUlpL,KAAKkpL,QAAQxnL,IAAIoD,IAC3B,OAAES,EAAM,MAAEC,EAAK,MAAEnB,EAAK,MAAEoB,EAAK,mBAAEs0I,EAAkB,SAAEgsC,GAAamD,EAItE,GAAa,MAAT7kL,EAAe,CACf,IAAIuvK,EAEAA,EADAmS,EACU,IAAI+I,GAAqBtpL,EAAO,IAGhC,IAAIkpL,GAAelpL,EAAO,IAExC,MAAM4iB,EAAMpoB,KAAKowL,gBAAgBxc,EAAS,CAAC,CAAE9uK,SAAQU,QAAOC,UAAUA,GAChEd,EAAO3E,KAAK2hB,KAAKyG,EAAItjB,QAE3B,OADA9E,KAAK08I,8BAA8Bt0H,GAC5BzjB,EAEX,GAAc,MAAVY,EACA,OAAOvF,KAAKqwL,qBAAqBvrL,GAErC,IAAK,KAAM8W,QAAQ,iCACsB,IAArC,KAAMm2J,UAAU,iBAChB,MAAM,IAAIlsK,MAAM,gGAGpB,IACI6qL,EAaArlL,EAdAoW,EAAS,KAEb,GAAc,cAAVhc,GAAyB,KAAM/D,IAAI,0BAA2B,CAE9DgvL,EAAoB1wL,KAAKgd,OAAOlY,GAChC,MAAM6rL,EAAU3wL,KAAKkpL,QAAQxnL,IAAIgvL,EAAkB5rL,QACnD2c,EAASzhB,KAAKgsL,MAAM4E,wBAAwBD,EAAQhc,WAAY,GAA0BnvK,IAS9F,GAPAxF,KAAKmvL,YAAYlqL,IAAIH,EAAQ,IACf,cAAVW,SAEMzF,KAAKgsL,MAAM6E,wBAIP,cAAVprL,EAAuB,CACvB,MAAMgzF,QAAW54F,QAAQwe,IAAI,CACzBre,KAAK2hB,KAAKo4H,EAAmB5nH,KAAKrtB,QAClC9E,KAAK2hB,KAAKo4H,EAAmB3nH,KAAKttB,UAItCuG,EAAO,GAFYotF,EAAG,GACHA,EAAG,SAGrB,GAAc,MAAVh3E,EACLpW,EAAOrL,KAAKwwL,qBAAqB1rL,OAEhC,CACD,MAAMqD,EAAO,GAAmB3C,GAChC6F,EAAOrL,KAAKgsL,MAAM8E,gCAAgCrvK,EAAQtZ,GAErC,MAArBuoL,GACA1wL,KAAK08I,8BAA8Bg0C,GAEvC,MAAMK,EAAY/wL,KAAKqwL,qBAAqBvrL,EAAQuG,GAC9ColL,EAAczwL,KAAKmvL,YAAYztL,IAAIoD,GAWzC,OAVA9E,KAAKmvL,YAAYjqL,OAAOJ,GAExB2rL,EAAYzkL,SAAQ7M,GAAWA,EAAQ4xL,KACnC/wL,KAAKovL,gBAAgBrqL,IAAID,KACzB9E,KAAKovL,gBAAgBlqL,OAAOJ,GACxB9E,KAAK6nB,YAAY/iB,IACjBivC,KAAS3nB,aAAatnB,EAAQ9E,MAElCA,KAAK4vL,kBAEFmB,EAEX,WAAWlhL,GACP,MAAMlL,EAAO3E,KAAK6hB,SAAShS,EAAE/K,QAC7B,IAAIk1I,EAAcr1I,EAClB,GAAgB,WAAZkL,EAAEpK,MACF,IAEIu0I,EAAcr1I,EAAKyF,KAAI2C,GAAK,GAAkBA,KAElD,MAAO6U,GACH,MAAM,IAAI/b,MAAM,oDAGxB,OAAO4b,GAAO5R,EAAErK,MAAOqK,EAAEpK,MAAOu0I,GAEpC,uBAAuBz0I,GACnB,GAAc,MAAVA,EAGJ,IAAK,IAAI7G,EAAI,EAAGA,EAAI6G,EAAO9G,OAAQC,IAAK,CACpC,MAAM4M,EAAM/F,EAAO7G,GACnB,IAAK,GAA4B4M,GAAM,CACnC,GAAI,KAAMsQ,QAAQ,gCACd,MAAM/V,MAAM,aAAayF,kJAI7B,MAAMzF,MAAM,aAAayF,6CAIrC,qBAAqBxG,GACjB,MAAM,MAAEU,EAAK,MAAEC,EAAK,SAAEsgL,GAAa/lL,KAAKkpL,QAAQxnL,IAAIoD,GAC9CqD,EAAO,GAAmB3C,GAChC,GAAI,KAAMoW,QAAQ,gCAAiC,CAC/C,MAAMo1K,EAAYhxL,KAAKgd,OAAOlY,GACxB6rL,EAAU3wL,KAAKkpL,QAAQxnL,IAAIsvL,EAAUlsL,QACrCuG,EAAOrL,KAAKgsL,MACbiF,gCAAgCN,EAAQhc,WAAY,GAA0BnvK,IAC9Eo9D,SAAS,EAAGz6D,GAEjB,OADAnI,KAAK08I,8BAA8Bs0C,GAC5B3lL,EAEX,MAAM6lL,EAAyB,KAAMt1K,QAAQ,gBAA8B,IAAbmqK,EACxD9+H,EAAciqI,EAAyB,GAAwB1rL,GAASA,EACxEouK,EAAUsd,EACZ,IAAI/W,GAAyBlzH,GAC7B,IAAI+yH,GAAmB/yH,GACrBtpC,EAAS3d,KAAKowL,gBAAgBxc,EAAS,CAAC,CAAEpuK,MAAOyhD,EAAaxhD,QAAOX,WAAW,WAChF6rL,EAAU3wL,KAAKkpL,QAAQxnL,IAAIic,EAAO7Y,QAClCuG,EAAOrL,KAAKgsL,MACbmF,gDAAgDR,EAAQhc,QAASgc,EAAQ/W,SAAS,GAAI+W,EAAQ/W,SAAS,IACvGh3G,SAAS,EAAGz6D,GAEjB,OADAnI,KAAK08I,8BAA8B/+H,GAC5BtS,EAEX,iBACI,OAAO,KAAM0mK,UAAU,iDAAmD,EAE9E,WAAW1sK,GACP,MAAM+rL,EAAkBpxL,KAAKuwL,aACvBc,EAAkB,GACxB,IAAIC,GAAgB,EACW,MAA3BtxL,KAAKuxL,oBACLvxL,KAAKuxL,mBAAqBF,EAC1BC,GAAgB,GAGhBtxL,KAAKuwL,aAAaptL,KAAKkuL,GAE3BrxL,KAAKuwL,aAAec,EACpBhsL,IAEA,MAAMmsL,EAA8B,GAAaxxL,KAAKuwL,aAAanmL,KAAK2C,GAAMA,EAAE0f,SAC3EX,QAAO/e,GAAU,MAALA,IACX0kL,EAA4B,GAAazxL,KAAKuwL,aAAanmL,KAAK2C,GAAMA,EAAEzI,QACzEwnB,QAAO/e,GAAU,MAALA,IACjB/M,KAAKuwL,aAAea,EAChBE,IACAtxL,KAAKuxL,mBAAqB,MAE9B,MAAMnpK,EAAM,CACRonK,aAAcxvL,KAAKwvL,aACnBC,eAAgBzvL,KAAKyvL,eACrB5xK,SAAU,KACV2R,OAAQ,MAEZ,GAAI,KAAMuiJ,UAAU,iDAAmD,EAAG,CACtE,MAAMl0J,QAAiBhe,QAAQwe,IAAImzK,GACnCppK,EAAc,SAAI,EAASvK,GAC3BuK,EAAyB,oBAAI,IAAMvK,EAASzT,KAAI,CAAC2C,EAAGrO,KAAM,CAAG4F,KAAMmtL,EAA0B/yL,GAAIgzL,GAAI3kL,MAChG3C,KAAI2C,GAAK,GAAGA,EAAEzI,SAASyI,EAAE2kL,OACzB1hL,KAAK,WAGVoY,EAAc,SAAI,CACdzoB,MAAO,6DAKf,OAFAK,KAAKwvL,aAAe,EACpBxvL,KAAKyvL,eAAiB,EACfrnK,EAEX,SACI,MAAO,CACHmE,YAAY,EACZgjK,cAAevvL,KAAKuvL,cACpBoC,uBAAwB3xL,KAAK+vL,eAAe6B,kBAC5CC,kBAAmB7xL,KAAK+vL,eAAe+B,cAG/C,aACI,OAAI,KAAM/f,UAAU,iDAAmD,EAC5D/xK,KAAKgsL,MAAMtN,aAEf,CAAEqT,QAAS,KAAYC,MAAO,MAEzC,SAASvlK,GACL,OAAI,KAAMslJ,UAAU,iDAAmD,GACnE/xK,KAAKgsL,MAAMrN,WACJlyJ,IAEXA,EAAMulK,MAAQ,KACPvlK,GAEX,mBAAmBA,GACf,GAAI,KAAMslJ,UAAU,iDAAmD,EACnE,OAAO/xK,KAAKgsL,MAAMiG,uBAAuBxlK,GAE7C,MAAMylK,EAAazlK,EACnB,OAAOylK,EAAWF,MAAQE,EAAWH,QAYzC,YAAYjtL,EAAQQ,GAAQ,GACxB,GAAItF,KAAKovL,gBAAgBrqL,IAAID,GACzB,OAAO,EAGX,IAAK9E,KAAKkpL,QAAQnkL,IAAID,GAClB,OAAO,EAWX,GANIQ,EACAtF,KAAKkpL,QAAQxnL,IAAIoD,GAAQY,SAAW,EAGpC1F,KAAKkpL,QAAQxnL,IAAIoD,GAAQY,YAExBJ,GAAStF,KAAKkpL,QAAQxnL,IAAIoD,GAAQY,SAAW,EAC9C,OAAO,EAEX,GAAI1F,KAAKmvL,YAAYpqL,IAAID,GAGrB,OAFA9E,KAAKovL,gBAAgB5qK,IAAI1f,GACzB9E,KAAK4vL,kBACE,EAEX5vL,KAAKmyL,eAAertL,GACpB,MAAM,mBAAEi1I,GAAuB/5I,KAAKkpL,QAAQxnL,IAAIoD,GAMhD,OAL0B,MAAtBi1I,IACA/5I,KAAK6nB,YAAYkyH,EAAmB5nH,KAAKrtB,OAAQQ,GACjDtF,KAAK6nB,YAAYkyH,EAAmB3nH,KAAKttB,OAAQQ,IAErDtF,KAAKkpL,QAAQhkL,OAAOJ,IACb,EAEX,eAAeA,GACX,MAAM,QAAE6vK,EAAO,MAAElvK,EAAK,SAAEm0K,EAAQ,MAAE6S,EAAK,SAAE1G,EAAQ,MAAE1hL,GAAUrE,KAAKkpL,QAAQxnL,IAAIoD,GACxEvF,EAAM8E,GAASA,EAAM+tL,YAActtL,EACnCY,EAAW1F,KAAKsvL,aAAa5tL,IAAInC,GACnCmG,EAAW,EACX1F,KAAKsvL,aAAarqL,IAAI1F,EAAKmG,EAAW,IAGtC1F,KAAKsvL,aAAapqL,OAAO3F,GACV,MAAXo1K,IACA30K,KAAKuvL,eAAiBvvL,KAAK8sL,aAAalT,EAAUn0K,GAClDzF,KAAK+vL,eAAesC,eAAe1d,EAASiF,EAAU6S,EAAO1G,KAGrE,MAAMmD,EAAUlpL,KAAKkpL,QAAQxnL,IAAIoD,GACjCokL,EAAQvU,QAAU,KAClBuU,EAAQtP,SAAW,KACnBsP,EAAQnD,UAAW,EACnBmD,EAAQ7kL,MAAQ,KAEpB,WAAWS,GAEP,OADA9E,KAAKsyL,YAAYxtL,GACV9E,KAAKkpL,QAAQxnL,IAAIoD,GAAQ6vK,QAMpC,YAAY7vK,GACR,OAAO9E,KAAKkpL,QAAQxnL,IAAIoD,GAS5B,mBAAmBuY,EAAQk1K,EA1bI,KA2b3B,OAAO,KAAM32K,QAAQ,sBACjByB,EAAO9S,OAAMmU,GAAmD,MAA1C1e,KAAKkpL,QAAQxnL,IAAIgd,EAAM5Z,QAAQ6vK,SACjD,GAAmBj2J,EAAMlZ,OAAS+sL,IAE9C,kBACI,OAAOvyL,KAAKgsL,MAEhB,MAAM7iI,GACF,GAAkB,yEAElB,MAAMuV,EAAWvV,EAAUvrC,WAC3B,OAAO,GAAUurC,EAAU3jD,MAAOk5D,GAEtC,cAAcj4D,EAAGmrB,EAAInsB,GACjB,MAAMmuK,EAAU,IAAIkb,GAAqBroL,EAAEjB,MAAOosB,GAC5C1H,EAAUlqB,KAAKwyL,cAAc5e,EAAS,CAACntK,GAAIhB,GACjD,OAAOsuC,KAAS5pB,qBAAqBD,EAAQplB,OAAQolB,EAAQ1kB,MAAO0kB,EAAQzkB,OAKhF,IAAIgB,GAEA,GAAIzG,KAAKyyL,mBAAmB,CAAChsL,KAAmB,cAAZA,EAAEhB,MAAuB,CACzD,MAAMitL,EAAYlI,GAAiBxqL,KAAKkpL,QAAQxnL,IAAI+E,EAAE3B,QAAQS,QAC9D,OAAOvF,KAAKihJ,WAAWx6I,EAAEjB,MAAOiB,EAAEhB,MAAOitL,GAE7C,GAAI,KAAM92K,QAAQ,+BACd,OAAO5b,KAAK2yL,cAAclsL,EAAG,GAAcA,EAAEhB,OAEjD,MAAMmuK,EAAU,IAAI8a,GAAejoL,EAAEjB,MAAO,IACtC0kB,EAAUlqB,KAAKwyL,cAAc5e,EAAS,CAACntK,IAC7C,OAAOstC,KAAS5pB,qBAAqBD,EAAQplB,OAAQolB,EAAQ1kB,MAAO0kB,EAAQzkB,OAEhF,eAAeD,EAAOC,EAAOF,GACzB,IAAIT,EACJ,GAAc,WAAVW,GAAgC,MAAVF,GAAkBA,EAAO9G,OAAS,GACxD,GAAc8G,EAAO,IAAK,CAC1B,MAAMu0I,EAAgBv0I,EAAO6E,KAAI2C,GAAK,GAAkBA,KACxDjI,EAAS9E,KAAKisB,MAAM6tH,EAAet0I,EAAOC,QAG1CX,EAAS9E,KAAKisB,MAAM1mB,EAAQC,EAAOC,GAGvC,OADAzF,KAAKkpL,QAAQxnL,IAAIoD,GAAQ2nL,MAAQ,KAC1B,CAAE3nL,SAAQU,QAAOC,SAE5B,WAAWD,EAAOC,EAAOF,GACrB,MAAM,OAAET,GAAW9E,KAAKq6I,eAAe70I,EAAOC,EAAOF,GACrD,OAAOwuC,KAAS5pB,qBAAqBrlB,EAAQU,EAAOC,EAAOzF,MAE/D,aAAa0e,GACT,MAAMk1J,EAAU,IAAImb,GAAcrwK,EAAMlZ,OACxC,OAAOxF,KAAKowL,gBAAgBxc,EAAS,CAACl1J,GAAQA,EAAMjZ,OAExD,WAAWiZ,GACP,MAAMk1J,EAAU,IAAIwX,GAAY1sK,EAAMlZ,OAEtC,OAAOxF,KAAKowL,gBAAgBxc,EAAS,CAACl1J,GAAQA,EAAMjZ,MAAO,MADvB,GAGxC,cAAciZ,EAAOk0K,GACjB,MAAMC,EAAe,CACjB,GAAuBn0K,EAAMlZ,UAC1B,GAAuBkZ,EAAMlZ,QAE9BstL,EAAU,CACZrtL,MAAOiZ,EAAMjZ,MACbD,MAAOqtL,EACP/tL,OAAQ4Z,EAAM5Z,QAEZiuL,EAAiB,CACnB,GAAuBH,MAAgB,GAAuBA,IAE5Dhf,EAAU,IAAIiY,GAAqBkH,EAAgBF,GAEnDl1K,EAAS3d,KAAKowL,gBAAgBxc,EAAS,CAACkf,GAAUp0K,EAAMjZ,MAAO,MAD/B,GAEtC,MAAO,CAAEX,OAAQ6Y,EAAO7Y,OAAQU,MAAOotL,EAAYntL,MAAOkY,EAAOlY,OAErE,OAAOX,GACH,MAAMokL,EAAUlpL,KAAKkpL,QAAQxnL,IAAIoD,IAC3B,SAAEihL,EAAQ,MAAEvgL,EAAK,MAAEC,GAAUyjL,EAC7BpS,EAAY,GAAwBtxK,GAC1C,IAAIouK,EASJ,OAPIA,EADAmS,EACU,IAAIhM,GAA0BjD,GAG9B,IAAIyC,GAAoBzC,GAI/B,CAAErxK,QAAOD,QAAOV,OADX9E,KAAKowL,gBAAgBxc,EAAS,CAAC,CAAEpuK,MAAOsxK,EAAWrxK,QAAOX,WAAWW,EAAO,MADlD,GAEHX,QAEvC,gBAAgB8uK,EAASv2J,EAAQ21K,EAAaC,EAAaC,GAAgC,GACvF,MAAMv1K,EAAS3d,KAAKq6I,eAAeu5B,EAAQ3sH,YAAa+rI,GAClDG,EAAUnzL,KAAKkpL,QAAQxnL,IAAIic,EAAO7Y,QAIxC,GAHI8uK,EAAQ6F,eACR0Z,EAAQpN,UAAW,GAEnBnS,EAAQ8F,mBAAqB,SAA8B,CAC3D,MAAM0Z,EAAa,GAA0Bxf,EAAQ3sH,aAKrDksI,EAAQvZ,SAAWwZ,EAAWhpL,KAAI2C,GAAS,EAAJA,IAK3C,GAH2B,MAAvB6mK,EAAQqG,cACRkZ,EAAQ1G,MAAQ7Y,EAAQqG,aAEa,IAArC,GAAmBt8J,EAAOnY,OAK1B,OAFA2tL,EAAQ5tL,OACJ,GAA4BoY,EAAOlY,MAAO,GACvCkY,EAEX,MAAM01K,EAAgB,GAChBC,EAAaj2K,EAAOjT,KAAIsU,IAC1B,GAAoB,cAAhBA,EAAMjZ,MACN,MAAM,IAAII,MAAM,mIAIpB,IAAIqjL,EAAUlpL,KAAKkpL,QAAQxnL,IAAIgd,EAAM5Z,QACrC,GAAuB,MAAnBokL,EAAQvU,QAAiB,CACzB,IAAKf,EAAQ4F,cACT,GAAmB96J,EAAMlZ,QACrB,KAAMusK,UAAU,6BAMpB,MAAO,CACHvsK,MAAOkZ,EAAMlZ,MACb0jL,QAAS,KACTnF,WAAW,EACXwP,cAAerK,EAAQ3jL,QAK3BquK,EAAQ4F,eACR0P,EAAQnD,UAAW,EACnBmD,EAAQ1jL,MAAQkZ,EAAMlZ,YAGzB,KAAM0jL,EAAQnD,YAAenS,EAAQ4F,aACtC96J,EAAQwqK,EAAQnD,SAAW/lL,KAAKwzL,aAAa90K,GACzC1e,KAAKyzL,WAAW/0K,GACpB20K,EAAclwL,KAAKub,GACnBwqK,EAAUlpL,KAAKkpL,QAAQxnL,IAAIgd,EAAM5Z,aAEhC,GAAIokL,EAAQnD,WACZ,GAAyBmD,EAAQ1jL,MAAOkZ,EAAMlZ,OAAQ,CAOvD,MAAMkuL,EAAah1K,EACbopG,EAAcppG,EAAMlZ,MAC1BkZ,EAAMlZ,MAAQ0jL,EAAQ1jL,MACtBkZ,EAAQ1e,KAAK2zL,cAAcj1K,EAAOopG,GAClCurE,EAAclwL,KAAKub,GACnBwqK,EAAUlpL,KAAKkpL,QAAQxnL,IAAIgd,EAAM5Z,QACjC4uL,EAAWluL,MAAQsiH,EAGvB,OADA9nH,KAAKsyL,YAAY5zK,EAAM5Z,QAChB,CAAEU,MAAOkZ,EAAMlZ,MAAO0jL,UAASnF,WAAW,MAErD/jL,KAAKsyL,YAAY30K,EAAO7Y,QACxB,MAAM8uL,EAAa,CAAEpuL,MAAOmY,EAAOnY,MAAO0jL,QAASiK,EAASpP,WAAW,GACjExkL,ETvgBP,SAAuBq0K,EAASv2J,EAAQM,GAC3C,IAAIk2K,EAAY,GAChBx2K,EAAO/S,OAAOqT,GAAQ3R,SAAQvF,IAC1B,MAAMqtL,EAAyB,MAAbrtL,EAAEyiL,SAAsC,MAAnBziL,EAAEyiL,QAAQ7kL,OAC7CoC,EAAEyiL,QAAQ7kL,MAAMisC,WAAa,EAC3BspI,EAAWnzK,EAAEs9K,UAAY,UAAYt9K,EAAEyiL,QAAQtP,SACrDia,GAAa,GAAGptL,EAAEjB,SAASo0K,KAAYka,OAE3C,MAAMC,EAAcngB,EAAQkG,SAC5B,IAAIv6K,EAAMq0K,EAAQrxK,YAAY+B,KAG9B,OADA/E,GAAO,IAAMs0L,EAAY,IAAME,EACxBx0L,ES2fS,CAAyBq0K,EAAS0f,EAAYM,GACpDI,EAASh0L,KAAKi0L,iBAAiB10L,GAAK,IT7oB3C,SAAwBysL,EAAOpY,EAASv2J,EAAQM,GACnD,MAAMm8J,EAAWlG,EAAQkG,SACnBoa,EAAa72K,EAAOjT,KAAI,CAACsU,EAAOhgB,KAClC,MAAMy9J,EAAY,CACd2nB,aAAcplK,EAAMlZ,MACpBo0K,SAAUl7J,EAAMqlK,UAAY,KAAOrlK,EAAMwqK,QAAQtP,SACjDmK,UAAWrlK,EAAMqlK,UACjBgC,UAAUrnK,EAAMqlK,WAAoBrlK,EAAMwqK,QAAQnD,SAClDz1I,WAAY,MAMhB,OAJqB,MAAjB5xB,EAAMwqK,SAA0C,MAAvBxqK,EAAMwqK,QAAQ7kL,OACvCqa,EAAMwqK,QAAQ7kL,MAAMisC,WAAa,IACjC6rH,EAAU7rH,WAAa5xB,EAAMwqK,QAAQ7kL,MAAMisC,YAExC,CAAEhsC,KAAMsvK,EAAQx5H,cAAc17C,GAAIy9J,gBAEvCg4B,EAAeD,EAAW9pL,KAAI3D,GAAKA,EAAE01J,YACrCgoB,EAAe,CACjBL,aAAcnmK,EAAOnY,MACrBo0K,SAAUj8J,EAAOurK,QAAQtP,SACzBmK,WAAW,EACXgC,SAAUpoK,EAAOurK,QAAQnD,SACzBz1I,WAAY,MAEV8nG,EAAS,GAA2B87C,EAAY/P,EAAcrK,EAAUlG,EAAQ4F,cAChF4a,EAAepI,EAAM3L,cAAcjoC,GAEzC,IAAIi8C,EAAS,KACb,MAAMC,EAAStI,EAAMjL,mBAAmBqT,EAAc,OAAO,GACpB,IAArC,KAAMriB,UAAU,mBAChBsiB,EAASrI,EAAMjL,mBAAmBqT,EAAc,YAAY,IAGhE,MAAMG,EAAmB,GACzB,IAAK,IAAI71L,EAAI,EAAGA,EAAIk1K,EAAQx5H,cAAc37C,OAAQC,IAAK,CACnD,MAAM2tB,EAAUunJ,EAAQx5H,cAAc17C,GAChCoiL,GAAc,EACpByT,EAAiBloK,GACb2/J,EAAMjL,mBAAmBqT,EAAc/nK,EAASy0J,GACpDyT,EAAiB,SAASloK,KACtB2/J,EAAMjL,mBAAmBqT,EAAc,SAAS/nK,IAAWy0J,GAEnE,MAAO,CACHlN,UACAx7B,SACAg8C,eACAG,mBACAJ,eACAhQ,eACAkQ,SACAC,US4lBW,CAA0Bt0L,KAAKgsL,MAAOpY,EAAS0f,EAAYM,KAEhEtD,EAAyC,MAArBtwL,KAAKuwL,aAC/B,IAAI9jK,EACA6jK,IACA7jK,EAAQzsB,KAAKw0L,cTrkBlB,SAAoBxI,EAAOgI,EAAQ32K,EAAQM,EAAQs1K,GACtDnK,GAAyBkL,EAAOG,aAAc92K,GAC9CyrK,GAAyB,CAACkL,EAAO7P,cAAe,CAACxmK,IACjD,MAAM82K,EAAS92K,EAAOurK,QAAQvU,QACxBuQ,EAAcvnK,EAAOurK,QAAQtP,SAC/Bj8J,EAAOurK,QAAQnD,SACfiG,EAAM0I,6BAA6BD,EAAQvP,EAAY,GAAIA,EAAY,IAGvE8G,EAAM2I,uBAAuBF,EAAQvP,EAAY,GAAIA,EAAY,IAErE8G,EAAMtL,WAAWsT,EAAOI,cAEiB,IAArC,KAAMriB,UAAU,kBACM,OAAlBiiB,EAAOK,QACPrI,EAAMlc,GAAG8kB,UAAUZ,EAAOK,OAAQ5rL,KAGpB,OAAlBurL,EAAOM,QACPtI,EAAMlc,GAAG8kB,UAAUZ,EAAOM,OAAQr+H,KAGtC54C,EAAOrR,SAAQ,CAAC0S,EAAOhgB,KACnB,MAAM2tB,EAAU2nK,EAAOpgB,QAAQx5H,cAAc17C,GACvCm2L,EAASb,EAAOO,iBAAiBloK,GACjCyoK,EAAed,EAAOO,iBAAiB,SAASloK,KACtD,GAAc,MAAVwoK,EAIJ,GAAIn2K,EAAMqlK,UAEN,GAAI,GAAmBrlK,EAAMlZ,OAAS,EAClCwmL,EAAMlc,GAAG8kB,UAAUC,EAAQn2K,EAAM60K,cAAc,QAE9C,CACD,IAAIloL,EAAOqT,EAAM60K,cACXloL,aAAgBL,eAClBK,EAAO,IAAIL,aAAaK,IAE5B2gL,EAAMlc,GAAGilB,WAAWF,EAAQxpL,QAKT,MAAvBqT,EAAMwqK,QAAQ7kL,OAAiC,MAAhBywL,GAC/B9I,EAAMlc,GAAGyF,UAAUuf,EAAcp2K,EAAMwqK,QAAQ7kL,MAAMisC,YAEzD07I,EAAMgJ,sBAAsBt2K,EAAMwqK,QAAQvU,QAASkgB,EAAQn2L,MAE5C,MAAfu0L,GACAA,EAAYjH,EAAOgI,EAAOI,cAE9BpI,EAAMiJ,iBSkhBF,CAAsBj1L,KAAKgsL,MAAOgI,EAAQV,EAAYM,EAAYX,GAClEI,EAAcrnL,SAAQvM,GAAQO,KAAK08I,8BAA8Bj9I,KAC7D6wL,IACA7jK,EAAQzsB,KAAKk1L,SAASzoK,GACtBzsB,KAAKuwL,aAAaptL,KAAK,CAAEmB,KAAMsvK,EAAQrxK,YAAY+B,KAAMmoB,MAAOzsB,KAAKuiL,aAAa91J,MAEtF,MAAM0oK,EAAmB,KAAMzzL,IAAI,yBAEnC,GAAIyzL,EAAmB,EAAG,CACtB,MAAMz3K,EAAO,KACRA,EAAO1d,KAAK0vL,gBAAmByF,IAChCn1L,KAAKgsL,MAAMlc,GAAGwO,QACdt+K,KAAK0vL,gBAAkBhyK,GAG/B,IAAK,KAAM9B,QAAQ,wBAA0Bu3K,EAAQpN,WACf,IAAlCmN,EAAyC,CACzC,MAAMkC,EAAWp1L,KAAKwzL,aAAa71K,GAEnC,OADA3d,KAAK08I,8BAA8B/+H,GAC5By3K,EAEX,OAAOz3K,EAEX,cAAci2J,EAASv2J,EAAQ21K,EAAaC,EAAaC,GAAgC,GAGrF,OAFAF,EAAcA,GAAe31K,EAAO,GAAG5X,MACvBzF,KAAKowL,gBAAgBxc,EAASv2J,EAAQ21K,EAAaC,EAAaC,GAGpF,iBAAiB3zL,EAAK81L,GAIlB,OAHM91L,KAAOS,KAAK6vL,cACd7vL,KAAK6vL,YAAYtwL,GAAO81L,KAErBr1L,KAAK6vL,YAAYtwL,GAE5B,oBACI,OAAOS,KAAK+vL,eAEhB,UACQ/vL,KAAK67K,WAKJ,KAAMjgK,QAAQ,YACC5a,OAAO8lB,KAAK9mB,KAAK6vL,aACzB7jL,SAAQzM,IACZS,KAAKgsL,MAAMrL,cAAc3gL,KAAK6vL,YAAYtwL,GAAK60L,qBACxCp0L,KAAK6vL,YAAYtwL,MAGhCS,KAAK+vL,eAAehqK,UACD,MAAf/lB,KAAKmrC,QAC2B,oBAAxB,mBACJnrC,KAAKmrC,kBAAkBmqJ,kBAC3Bt1L,KAAKmrC,OAAOoqJ,SAGZv1L,KAAKmrC,OAAS,KAEdnrC,KAAK8vL,sBACL9vL,KAAKgsL,MAAMpY,QAAU,KACrB5zK,KAAKgsL,MAAMjmK,WAEf/lB,KAAK67K,UAAW,GAEpB,iBAiBI,OAhBgC,MAA5B77K,KAAKw1L,sBACLx1L,KAAKw1L,oBAAsB,IAAK,KAC5B,IAAK,KAAM9zL,IAAI,gCAAiC,CAG5C,MAAM+zL,EAAY,KAAM75K,QAAQ,SAChC,KAAM3W,IAAI,SAAS,GACnB,MAAMywL,EAAsB11L,KAAKizC,IAAI,GAAO,OAAOr1B,WAAW,GAE9D,GADA,KAAM3Y,IAAI,QAASwwL,GACfC,EAAsB,EACtB,OAAO,GAGf,OAAO,OAGR11L,KAAKw1L,oBAGhB,UACI,OAAiC,KAA1Bx1L,KAAK2F,iBArtBW,KACA,KAstB3B,YAAYb,GACR,MAAMokL,EAAUlpL,KAAKkpL,QAAQxnL,IAAIoD,IAC3B,MAAEU,EAAK,MAAEC,EAAK,OAAEF,EAAM,QAAEovK,EAAO,MAAE8X,EAAK,SAAE1G,GAAamD,EAC3D,GAAe,MAAXvU,EAEA,OAEJ,MAAM2b,EAAyC,MAArBtwL,KAAKuwL,aAC/B,IAAI/jL,EACA8jL,IACA9jL,EAAQ,MAEZ,IAAIotK,EAAWsP,EAAQtP,SAKvB,GAJgB,MAAZA,IACAA,EtBtgBL,SAAyC+b,EAAU5P,GAAW,GACjE,IAAI6P,EAAa,KAAM7jB,UAAU,0BAkBjC,GAjBIgU,IACA6P,GAA0B,EAWF,KALxBD,EAAWA,EAASvrL,KAAI,CAAC2C,EAAGrO,IAAMA,GAAKi3L,EAASl3L,OAAS,EACrD,EAAuBk3L,EAASj3L,IAChCi3L,EAASj3L,MAGAD,SACTk3L,EAAW,CAAC,EAAGA,EAAS,MAIR,IAApBA,EAASl3L,OAAc,CACvB,MAAMo3L,EAAgB,GAAkBF,GACxCA,EAAWE,EAAc7rL,SAE7B,IAAI7B,EAAO,GAAmBwtL,GAC9B,GAAIA,EAASl3L,QAAU,GAAK0J,GAAQytL,EAChC,MAAO,CAAC,EAAGztL,GAEV,GAAwB,IAApBwtL,EAASl3L,QAAgBk3L,EAAS,IAAMC,GAC7CD,EAAS,IAAMC,EACf,OAAOD,EAEN,GAAwB,IAApBA,EAASl3L,QAAgBk3L,EAAS,GAAKA,EAAS,IAAMC,GAC3DD,EAAS,IAAMC,EACf,MAAO,CAACD,EAAS,GAAKA,EAAS,GAAIA,EAAS,IAE3C,GAAwB,IAApBA,EAASl3L,QAAgBk3L,EAAS,IAAMC,GAC7CD,EAAS,GAAKA,EAAS,IAAMC,EAC7B,MAAO,CAACD,EAAS,GAAIA,EAAS,GAAKA,EAAS,IAE3C,GAAwB,IAApBA,EAASl3L,QACdk3L,EAAS,GAAKA,EAAS,GAAKA,EAAS,IAAMC,GAC3CD,EAAS,IAAMC,EACf,MAAO,CAACD,EAAS,GAAKA,EAAS,GAAKA,EAAS,GAAIA,EAAS,IAEzD,GAAwB,IAApBA,EAASl3L,QAAgBk3L,EAAS,IAAMC,GAC7CD,EAAS,GAAKA,EAAS,GAAKA,EAAS,IAAMC,EAC3C,MAAO,CAACD,EAAS,GAAIA,EAAS,GAAKA,EAAS,GAAKA,EAAS,IAG1D,GAAI5P,EAAU,CAMV,MAAM54I,EAAWupI,GAAYif,GAC7B,IAAIlxG,EAAO,EAAG65B,EAAO,EAKrB,OAJIq3E,EAASl3L,UACRgmF,EAAM65B,GAAQs4D,GAAY+e,IAE/BxtL,EAAOglC,GAAYs3C,EAAO,IAAM65B,EAAO,GAChC,GAAyBn2G,GAAMiC,KAAI2C,GAAS,EAAJA,IAEnD,OAAO,GAAyB5E,GsBucjB,CAA2C3C,EAAOugL,GAC7DmD,EAAQtP,SAAWA,GAET,MAAVr0K,EAAgB,CAChB,MAAMuxK,EAAY,GAAwBtxK,GAC1C,IAAIouK,EACA/qK,EAAQ+wK,EAAS,GAAI7uI,EAAS6uI,EAAS,GAC3C,MAAMkc,EAAcvwL,aAAkB2F,WAClC66K,IACCl9K,EAAOkiC,GAAU,GAAgD6uI,EAAS,GAAIA,EAAS,IACxFhG,EAAU,IAAI0G,GAA0BxD,EAAW,CAAC/rI,EAAQliC,GAAQitL,IAGpEliB,EACI,IAAIwG,GAAoBtD,EAAW,CAAC/rI,EAAQliC,GAAQitL,GAE5D,MAAMC,EAAuB/1L,KAAKq6I,eAAe,CAACtvG,EAAQliC,GAAQpD,GAE9DzF,KAAKkpL,QAAQxnL,IAAIq0L,EAAqBjxL,QAAQ2nL,MAD9CqJ,EAEIjlB,GAAa2d,OAIb3d,GAAawd,OAErBruL,KAAKgsL,MAAMgK,2BAA2Bh2L,KAAKi2L,WAAWF,EAAqBjxL,QAAS+D,EAAOkiC,EAAQxlC,GAGnG,MAAM2wL,GAAwB,EACxBC,EAAsBn2L,KAAKowL,gBAAgBxc,EAAS,CAACmiB,GAAuBtwL,EAAO,KAAMywL,GAEzFE,EAAgBp2L,KAAKkpL,QAAQxnL,IAAIy0L,EAAoBrxL,QAC3DokL,EAAQvU,QAAUyhB,EAAczhB,QAChCuU,EAAQtP,SAAWwc,EAAcxc,SACjCsP,EAAQnD,SAAWqQ,EAAcrQ,SACjCmD,EAAQuD,MAAQ2J,EAAc3J,MAC9BzsL,KAAK08I,8BAA8Bq5C,GACnC/1L,KAAKkpL,QAAQhkL,OAAOixL,EAAoBrxL,QAExCokL,EAAQ3jL,OAAS,KACb+qL,IACAtwL,KAAKwvL,cAAgB,KAAahjL,OAGrC,CACD,MAAMugL,EAAa/sL,KAAKq2L,eAAezc,EAAU6S,EAAOhnL,EAAOsgL,GAC/DmD,EAAQvU,QAAUoY,GAG1B,qBAAqBjoL,EAAQwxL,GACzB,MAAMpN,EAAUlpL,KAAKkpL,QAAQxnL,IAAIoD,IAC3B,MAAEW,GAAUyjL,EAKlB,OAJAlpL,KAAKmyL,eAAertL,GACC,MAAjBwxL,IACApN,EAAQ3jL,OAoBpB,SAA6BwB,EAAGtB,GAC5B,GAAc,YAAVA,GAAiC,cAAVA,EACvB,OAAOsB,EAEN,GAAc,UAAVtB,GAA+B,SAAVA,EAAkB,CAC5C,MAAM0B,EAAoB,UAAV1B,EAAqB,IAAIwF,WAAWlE,EAAEtI,QAClD,IAAIyM,WAAWnE,EAAEtI,QACrB,IAAK,IAAIC,EAAI,EAAGA,EAAIyI,EAAO1I,SAAUC,EACjCyI,EAAOzI,GAAKwH,KAAKsW,MAAMzV,EAAErI,IAE7B,OAAOyI,EAGP,MAAM,IAAItB,MAAM,iBAAiBJ,KAjCZ8wL,CAAoBD,EAAe7wL,IAEjDyjL,EAAQ3jL,OAEnB,eAAeq0K,EAAU4c,EAAS/wL,EAAOsgL,GAErC,GADA/lL,KAAKuvL,eAAiBvvL,KAAK8sL,aAAalT,EAAUn0K,IAC7CzF,KAAK2vL,mBACN3vL,KAAKuvL,cAA0C,KAA1BvvL,KAAKgwL,mBAA4B,KAAM,CAC5D,MAAMyG,GAAMz2L,KAAKuvL,cAAgB,KAAO,MAAMxvK,QAAQ,GACtD/f,KAAK2vL,mBAAoB,EACzBhhL,QAAQC,KAAK,6BAA6B6nL,0CAG9C,OAAOz2L,KAAK+vL,eAAesG,eAAezc,EAAU4c,EAASzQ,GAEjE,aAAavgL,EAAOC,GAChB,OAAOD,EAAM,GAAKA,EAAM,GAAK,GAAqBC,IAG1DypL,GAAiBt1C,WAAa,ECl0B1B,MACAtlG,GAAgB,SAAS,IAAM,IAAI46I,IAAoB,GCCpD,MAAMwH,GACT,YAAY9kK,EAAIo9B,EAAQw8B,GACpBxrF,KAAKo6C,cAAgB,CAAC,IAAK,KAC3Bp6C,KAAKinD,YAAc,GAAwC+H,EAAQw8B,GACnExrF,KAAK85K,SAAW,8DAEdloJ,2KCIH,MAAM+kK,GACT,YAAY/kK,EAAIo9B,EAAQw8B,EAAQorG,GAAmB,GAC/C52L,KAAKo6C,cAAgB,CAAC,IAAK,KAC3Bp6C,KAAK62L,sBAAuB,EAC5B72L,KAAKw5K,cAAe,EACpBx5K,KAAKy5K,cAAe,EACpBz5K,KAAKinD,YAAc,GAAwC+H,EAAQw8B,GACnE,MAAMrhF,EAAOnK,KAAKinD,YAAYxoD,OAC9B,IAAIq4L,EAAyB,GAC7B,GAAIF,EACA,GAAa,IAATzsL,GAAuD,IAAzC,GAAmBnK,KAAKinD,aACtC6vI,EAAyB,gGAWzB,GAHAA,EAAyB,eADXnS,GAAkBx6K,2CAInB,IAATA,EACA2sL,GAA0B,4CACL92L,KAAKinD,YAAY,8FAKrC,CACD,MAAM22G,EAAWutB,GAAY,SAAUhhL,GACvC2sL,GAA0B,2DAE7Bl5B,EAASzzJ,EAAO,cAAcnK,KAAKinD,YAAY98C,EAAO,8DAEtDyzJ,EAASzzJ,EAAO,cAAcnK,KAAKinD,YAAY98C,EAAO,4NAQ/DnK,KAAK85K,SAAW,2DAEdloJ,wKAQAklK,kDCpEH,SAAS,GAAS72L,GACrB,MAAM,OAAEod,EAAM,QAAE5Y,GAAYxE,GACtB,EAAEwG,GAAM4W,EAEd,OADA5Y,EAAQme,OAAOnc,EAAE3B,QACV,CAAEA,OAAQ2B,EAAE3B,OAAQU,MAAOiB,EAAEjB,MAAOC,MAAOgB,EAAEhB,OAEjD,MAAM,GAAiB,CAC1BG,WAAYqP,GACZkG,YAAa,QACb0O,WAAY,ICCT,SAAS,GAAQ5pB,GACpB,MAAM,OAAEod,EAAM,QAAE5Y,GAAYxE,GACtB,KAAEkyB,EAAI,KAAEC,GAAS/U,EACjB++H,EAAc33I,EAAQ41I,eAAeloH,EAAK3sB,MAAO,aACjDysB,EAAUxtB,EAAQykL,QAAQxnL,IAAI06I,EAAYt3I,QAC1CiyL,EAAiB,GAAS,CAAE15K,OAAQ,CAAE5W,EAAG0rB,GAAQ1tB,YACjDuyL,EAAiB,GAAS,CAAE35K,OAAQ,CAAE5W,EAAG2rB,GAAQ3tB,YAEvD,OADAwtB,EAAQ8nH,mBAAqB,CAAE5nH,KAAM4kK,EAAgB3kK,KAAM4kK,GACpD56C,EAEJ,MAAM,GAAgB,CACzBx2I,WAAY4M,GACZ2I,YAAa,QACb0O,WAAY,ICrBHotK,GAAY,+BACZC,GAAmB,mIAgBnB,GAAkB,CAC3BtxL,WAAY2P,GACZ4F,YAAa,QACb0O,WAfG,SAAmB5pB,GACtB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,EAAEwG,GAAM4W,GACR,MAAEqvC,GAAU3jC,EACZouK,EAAS1yL,EAAQ41I,eAAe,GAAI,UAAW,GAAuB3tF,EAAO,YAC7EknH,EAAU,KAAMh4J,QAAQ,gCAC1B,IAAI+6K,GAAsBO,GAAkBzwL,EAAEjB,MAAO2xL,EAAO3xL,OAC5D,IAAIkxL,GAAgBO,GAAWxwL,EAAEjB,MAAO2xL,EAAO3xL,OAC7C2B,EAAS1C,EAAQ2rL,gBAAgBxc,EAAS,CAACntK,EAAG0wL,GAAS1wL,EAAEhB,OAE/D,OADAhB,EAAQi4I,8BAA8By6C,GAC/BhwL,ICfEiwL,GAAQ,+BACRC,GAAe,mIAYf,GAAc,CACvBzxL,WAAYgS,GACZuD,YAAa,QACb0O,WAXG,SAAe5pB,GAClB,MAAM,OAAEod,EAAM,QAAE5Y,GAAYxE,GACtB,EAAEwG,EAAC,MAAEimD,GAAUrvC,EACfu2J,EAAU,KAAMh4J,QAAQ,gCAC1B,IAAI+6K,GAAsBU,GAAc5wL,EAAEjB,MAAOknD,EAAMlnD,OACvD,IAAIkxL,GAAgBU,GAAO3wL,EAAEjB,MAAOknD,EAAMlnD,OAC9C,OAAOf,EAAQ2rL,gBAAgBxc,EAAS,CAACntK,EAAGimD,GAAQjmD,EAAEhB,SCenD,SAAS,IAAgB,UAAEkpL,EAAS,gBAAE2I,EAAe,cAAEC,EAAa,MAAE9xL,IACzE,MAAO,EAAG4X,SAAQ5Y,cACd,MAAM,EAAEgC,GAAM4W,EACRm6K,EAAe/yL,EACf21I,EAAS30I,GAASgB,EAAEhB,MAC1B,GAAI+xL,EAAa/E,mBAAmB,CAAChsL,KAAwB,MAAjB8wL,EAAuB,CAC/D,MAAM14C,EAAQ24C,EAAatO,QAAQxnL,IAAI+E,EAAE3B,QACnC4tL,EAAY6E,EAAc14C,EAAMt5I,OAAQ60I,GAC9C,OAAOo9C,EAAan9C,eAAe5zI,EAAEjB,MAAO40I,EAAQs4C,GAGxD,IAAI9e,EAOJ,OALIA,EAH2B,KAAMh4J,QAAQ,gCAAqD,MAAnB07K,EAGjE,IAAIxI,GAAqBroL,EAAEjB,MAAO8xL,GAGlC,IAAI5I,GAAejoL,EAAEjB,MAAOmpL,GAEnC6I,EAAapH,gBAAgBxc,EAAS,CAACntK,GAAI2zI,IAanD,SAAS,IAAiB,UAAEu0C,EAAS,gBAAE2I,EAAe,iBAAEV,GAAmB,EAAK,gBAAEa,GAAkB,EAAK,cAAEF,EAAa,MAAE9xL,IAC7H,MAAO,EAAG4X,SAAQ5Y,cACd,MAAM,EAAEsC,EAAC,EAAEC,GAAMqW,EACXm6K,EAAe/yL,EACrB,GAAIgzL,GAA+B,cAAZ1wL,EAAEtB,MAAuB,CAC5C,MAAMiyL,EAAQF,EAAatO,QAAQxnL,IAAIqF,EAAEjC,QACnC6yL,EAAQH,EAAatO,QAAQxnL,IAAIsF,EAAElC,SAClCqtB,EAAMC,GAAQ,CACjB,CAACslK,EAAM39C,mBAAmB5nH,KAAMwlK,EAAM59C,mBAAmB5nH,MACzD,CAACulK,EAAM39C,mBAAmB3nH,KAAMulK,EAAM59C,mBAAmB3nH,OAC3DhoB,KAAIwtL,IACF,MAAOC,EAAOC,GAASF,EACjBG,EAAU,CACZjzL,OAAQ+yL,EAAM/yL,OACdW,MAAOoyL,EAAMpyL,MACbD,MAAOuB,EAAEvB,OAEPwyL,EAAU,CACZlzL,OAAQgzL,EAAMhzL,OACdW,MAAOqyL,EAAMryL,MACbD,MAAOwB,EAAExB,OAEPouK,EAAU,IAAI8iB,GAAgB/H,EAAW5nL,EAAEvB,MAAOwB,EAAExB,OAC1D,OAAOgyL,EAAapH,gBAAgBxc,EAAS,CAACmkB,EAASC,GAAU30K,GAAWw0K,EAAMpyL,MAAOqyL,EAAMryL,WAE7FwyL,EAAgB,GAAQ,CAAE56K,OAAQ,CAAE8U,OAAMC,QAAQ3tB,QAAS+yL,IAIjE,OAHAA,EAAa96C,8BAA8BvqH,GAC3CqlK,EAAa96C,8BAA8BtqH,GAEpC6lK,EAEX,MAAM79C,EAAS30I,GAAS4d,GAAWtc,EAAEtB,MAAOuB,EAAEvB,OAC9C,GAAI+xL,EAAa/E,mBAAmB,CAAC1rL,EAAGC,KAAwB,MAAjBuwL,EAAuB,CAClE,MAAMG,EAAQF,EAAatO,QAAQxnL,IAAIqF,EAAEjC,QACnC6yL,EAAQH,EAAatO,QAAQxnL,IAAIsF,EAAElC,SAClC4tL,EAAWthJ,GAAYmmJ,EAAcxwL,EAAEvB,MAAOwB,EAAExB,MAAOkyL,EAAMnyL,OAAQoyL,EAAMpyL,OAAQ60I,GACpFtwH,EAAM0tK,EAAan9C,eAAejpG,EAAUgpG,GAGlD,OAFgBo9C,EAAatO,QAAQxnL,IAAIooB,EAAIhlB,QACrCS,OAASmtL,EACV5oK,EAIX,IAAI8pJ,EAOJ,OALIA,EAJ2B,KAAMh4J,QAAQ,iCACtB,MAAnB07K,EAGU,IAAIX,GAAsBW,EAAiBvwL,EAAEvB,MAAOwB,EAAExB,MAAOoxL,GAG7D,IAAIF,GAAgB/H,EAAW5nL,EAAEvB,MAAOwB,EAAExB,OAEjDgyL,EAAapH,gBAAgBxc,EAAS,CAAC7sK,EAAGC,GAAIozI,IAGtD,SAAS89C,GAA6Bj1H,EAAYk1H,GAAS,GAC9D,GAAmB,WAAfl1H,EACA,MVnHc,YUwHb,GAAmB,SAAfA,EACL,OAAIk1H,EV9GQ,iRDgBAC,2DWmGX,GAAmB,QAAfn1H,EACL,OAAIk1H,EV9HO,+PDyBA,0CW0GV,GAAmB,UAAfl1H,EACL,OAAIk1H,EV/GS,gSDQAC,qEW4GZ,GAAmB,UAAfn1H,EACL,OAAIk1H,EACOd,GAEJD,GAEN,GAAmB,cAAfn0H,EACL,OAAIk1H,EACOjB,GAEJD,GAEN,GAAmB,YAAfh0H,EACL,MVtHe,sCU2HnB,MAAM,IAAIp9D,MAAM,cAAco9D,qDC5J3B,MAAMo1H,GACT,YAAYrpI,EAAQw8B,EAAQvkC,EAAa3e,GAAa,EAAOC,GAAa,EAAO+vJ,GAAU,EAAOr1H,EAAa,KAAMs1H,GAAqB,EAAOC,GAAyB,GACtKx4L,KAAKo6C,cAAgB,CAAC,UAAW,WACjCp6C,KAAKw5K,cAAe,EACpBx5K,KAAKy5K,cAAe,EACpBz5K,KAAKinD,YAAcA,EACnB,MAAMk4F,EAAY72G,EAAa0mB,EAAO,GAAKA,EAAO,GAC5CypI,EAAwBvyL,KAAK4C,KAAKq2I,EAAY,GAC9Cu5C,EAAUpwJ,EAAa,cAAgB,cACvCqwJ,EAAUpwJ,EAAa,cAAgB,cACvCqwJ,EAAWtwJ,EAAa,CAAC,SAAU,UAAY,CAAC,SAAU,UAC1DuwJ,EAAWtwJ,EAAa,CAAC,SAAU,UAAY,CAAC,SAAU,UAChE,IAAIuwJ,EAAoB,GAAIC,EAAyB,GACjD91H,IAEI61H,EADAP,EACoB,oGAExBt1H,eAGSu1H,EACe,4FAExBv1H,eAIwB,wCACxBA,eAGA81H,EAAyB,gCAE7B,MAAMC,EAAiBV,EAAU,kCAAoC,GACjEA,GACAt4L,KAAKo6C,cAAcj3C,KAAK,QAExBo1L,GACAv4L,KAAKo6C,cAAcj3C,KAAK,0BAExBq1L,GACAx4L,KAAKo6C,cAAcj3C,KAAK,kBAE5B,IAAI81L,EAAgB,OAChBC,EAAgB,OAChBlqI,EAAO,GAAKw8B,EAAO,GACnBytG,EAAgB,wBAAwBjqI,EAAO,GAAK,OAE/Cw8B,EAAO,GAAKx8B,EAAO,KACxBkqI,EAAgB,wBAAwB1tG,EAAO,GAAK,QAExDxrF,KAAK85K,SAAW,WAChBgf,4CAE8BL,8GAIRA,qCACLQ,8BACAC,6CACeR,8CACAC,oKAIjBC,EAAS,QAAQC,EAAS,8BAC1BD,EAAS,QAAQC,EAAS,wKASvCG,gBAEAD,kDCrEH,MAAMI,GACT,YAAYvnK,EAAIo9B,EAAQw8B,GACpBxrF,KAAKo6C,cAAgB,CAAC,QAAS,QAAS,QAAS,SACjDp6C,KAAKinD,YAAc,GAAwC+H,EAAQw8B,GACnExrF,KAAK85K,SAAW,4GAGdloJ,6SCTV,MAAMwnK,GAAM,gBACL,SAAS,GAASn5L,GACrB,MAAM,OAAEod,EAAM,QAAE5Y,GAAYxE,GACtB,EAAE8G,EAAC,EAAEC,GAAMqW,EACX5X,EAAQ,GAAwBsB,EAAEtB,MAAOuB,EAAEvB,OACjD,GAAgB,cAAZsB,EAAEtB,MAAuB,CACzB,MAAMiyL,EAAQjzL,EAAQykL,QAAQxnL,IAAIqF,EAAEjC,QAC9B6yL,EAAQlzL,EAAQykL,QAAQxnL,IAAIsF,EAAElC,QAC9Bu0L,EAAc,IAAIF,GDTtB,wCCSyFpyL,EAAEvB,MAAOwB,EAAExB,OAChG8zL,EAAc,IAAIH,GDTtB,wCCSyFpyL,EAAEvB,MAAOwB,EAAExB,OAChG6X,EAAS,CACX,CACIvY,OAAQ4yL,EAAM39C,mBAAmB5nH,KAAKrtB,OACtCW,MAAOiyL,EAAM39C,mBAAmB5nH,KAAK1sB,MACrCD,MAAOuB,EAAEvB,OAEb,CACIV,OAAQ4yL,EAAM39C,mBAAmB3nH,KAAKttB,OACtCW,MAAOiyL,EAAM39C,mBAAmB3nH,KAAK3sB,MACrCD,MAAOuB,EAAEvB,OAEb,CACIV,OAAQ6yL,EAAM59C,mBAAmB5nH,KAAKrtB,OACtCW,MAAOkyL,EAAM59C,mBAAmB5nH,KAAK1sB,MACrCD,MAAOwB,EAAExB,OAEb,CACIV,OAAQ6yL,EAAM59C,mBAAmB3nH,KAAKttB,OACtCW,MAAOkyL,EAAM59C,mBAAmB3nH,KAAK3sB,MACrCD,MAAOwB,EAAExB,QAGXm3I,EAAWl4I,EAAQ2rL,gBAAgBiJ,EAAah8K,EAAQ,WACxD4kJ,EAAWx9J,EAAQ2rL,gBAAgBkJ,EAAaj8K,EAAQ,WACxD46K,EAAgB,GAAQ,CAAE56K,OAAQ,CAAE8U,KAAMwqH,EAAUvqH,KAAM6vI,GAAYx9J,YAI5E,OAHAA,EAAQi4I,8BAA8BC,GACtCl4I,EAAQi4I,8BAA8BulB,GAE/Bg2B,EAEX,GAAIxzL,EAAQguL,mBAAmB,CAAC1rL,EAAGC,IAAK,CACpC,MAAM0wL,EAAQjzL,EAAQykL,QAAQxnL,IAAIqF,EAAEjC,QAC9B6yL,EAAQlzL,EAAQykL,QAAQxnL,IAAIsF,EAAElC,SAC7B4tL,EAAWthJ,GAAY,GAAYrqC,EAAEvB,MAAOwB,EAAExB,MAAOkyL,EAAMnyL,OAAQoyL,EAAMpyL,OAAQE,GAClFqkB,EAAMrlB,EAAQ41I,eAAejpG,EAAU3rC,GAG7C,OAFgBhB,EAAQykL,QAAQxnL,IAAIooB,EAAIhlB,QAChCS,OAASmtL,EACV5oK,EAEX,IAAI8pJ,EAOJ,OALIA,EADA,KAAMh4J,QAAQ,gCACJ,IAAI+6K,GAAsByC,GAAKryL,EAAEvB,MAAOwB,EAAExB,OAG1C,IAAIkxL,GAAgB0C,GAAKryL,EAAEvB,MAAOwB,EAAExB,OAE3Cf,EAAQ2rL,gBAAgBxc,EAAS,CAAC7sK,EAAGC,GAAIvB,GAE7C,MAAM,GAAiB,CAC1BG,WAAYoR,GACZmE,YAAa,QACb0O,WAAY,ICjET,SAAS,GAAQ5pB,GACpB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,EAAEwG,GAAM4W,GACR,MAAE7X,GAAUujB,EACZyuK,EAAe/yL,EACf01I,EAAQ,GAAmB1zI,EAAEjB,OAC7Bm5I,EAAS,GAA4Bn5I,EAAO20I,GAC5CyE,EAAS,GAAmBD,GAClC,EAAYxE,IAAUyE,GAAQ,IAAM,kBAAkBD,UAAeC,iCACvDn4I,EAAEjB,cAAc20I,mFAE9B,MAAMo/C,EAAW/B,EAAatO,QAAQxnL,IAAI+E,EAAE3B,QAC5C,OAAIy0L,EAASxT,UAAa/O,GAAcvwK,EAAEjB,MAAOm5I,IACtB,OAArB46C,EAAS5kB,SAAoBqC,GAAcuiB,EAAS/zL,MAAOm5I,IAGjE64C,EAAa50K,OAAOnc,EAAE3B,QACf,CAAEA,OAAQ2B,EAAE3B,OAAQU,MAAOm5I,EAAQl5I,MAAOgB,EAAEhB,QClBhD,SAAuBiZ,EAAOk0K,EAAYnuL,GAC7C,MAAMouL,EAAe,CAACnc,GAAYh4J,EAAMlZ,UACjCoxK,GAAYl4J,EAAMlZ,QACnBstL,EAAU,CACZrtL,MAAOiZ,EAAMjZ,MACbD,MAAOqtL,EACP/tL,OAAQ4Z,EAAM5Z,QAEZiuL,EAAiB,CAACrc,GAAYkc,MAC7Bhc,GAAYgc,IACbhf,EAAU,IAAIiY,GAAqBkH,EAAgBF,GAEnDl1K,EAASlZ,EAAQ2rL,gBAAgBxc,EAAS,CAACkf,GAAUp0K,EAAMjZ,MAAO,MADlC,GAEtC,MAAO,CAAEX,OAAQ6Y,EAAO7Y,OAAQU,MAAOotL,EAAYntL,MAAOkY,EAAOlY,ODEtDkuL,CAAcltL,EAAGk4I,EAAQ64C,GAKjC,MAAM,GAAgB,CACzB5xL,WAAYsS,GACZiD,YAAa,QACb0O,WAAY,IExBT,MAAM2vK,GACT,YAAYC,EAAYC,GACpB15L,KAAKo6C,cAAgB,CAAC,KACtB,MAAM,WAAE6xF,EAAU,UAAExtF,EAAS,OAAEs4B,EAAM,QAAE48E,GAAY8lC,EACnDz5L,KAAKinD,YAAc,CAACxI,EAAWk1G,GAC/B,MAAMgmC,EAAqD,EAA7BzzL,KAAK8H,MAAMi+H,EAAa,GAChD2tD,EAA0B3tD,EAAa,EAC7C,IAAI4tD,EAAgB,iCACpB,GAAe,MAAXH,EAAiB,CACjB,MAAMx8F,EAAc,EAAIw8F,EACxBG,EAAgB,4BAA4B,GAAW38F,GAAeA,EAAY48F,YAAY,GAC1F58F,YAER,IAAI05F,EAAmB,GACnB7/G,EAASk1D,EAAa,IACtB2qD,EAAmB,uCACK7/G,kDAK5B/2E,KAAK85K,SAAW,gHAId8c,sNAQwB3qD,sEAIJ0tD,8QASlBE,kDAGqBF,mBACS,IAA5BC,2FAGFC,yBACqC,IAA5BD,6IAKTC,yBACqC,IAA5BD,iLAMTC,6DCnEL,MAAME,GACT,YAAYN,EAAYO,GACpBh6L,KAAKo6C,cAAgB,CAAC,KACtB,MAAM,WAAE6xF,EAAU,UAAExtF,EAAS,OAAEs4B,EAAM,QAAE48E,GAAY8lC,EACnDz5L,KAAKinD,YAAc,CAACxI,EAAWk1G,GAC/B,IAAIsmC,EAAsB,MACtBC,EAAY,GACG,SAAfF,EACAC,EAAsB,MAEF,QAAfD,GAELC,EAAsB,cACtBC,EAAY,OAEQ,QAAfF,IAELC,EAAsB,eACtBC,EAAY,OAEhB,IAAIxnB,EAAc,GAAGsnB,KAAcA,KAAcA,sEAE9B,QAAfA,EACAtnB,EAAc,WAEM,SAAfsnB,EACLtnB,EAAc,YAEM,QAAfsnB,EACLtnB,EAAc,WAEM,QAAfsnB,IACLtnB,EAAc,YAElB,MAAMinB,EAAqD,EAA7BzzL,KAAK8H,MAAMi+H,EAAa,GAChD2tD,EAA0B3tD,EAAa,EAC7C,IAAI4tD,EAAgB,eACD,QAAfG,kEAEsB,SAAfA,mKAIKE,yCAGZC,EAAU,OACK,QAAfH,GACAC,EAAsB,MACtBJ,EAAgB,qMAKhBM,EAAU,SAEU,QAAfH,IACLC,EAAsB,MACtBJ,EAAgB,qMAKhBM,EAAU,SAEd,IAAIvD,EAAmB,GACnB7/G,EAASk1D,EAAa,IACtB2qD,EAAmB,uCACK7/G,kEAK5B/2E,KAAK85K,SAAW,6CACkBmgB,kHAIhCrD,sNAQwB3qD,yCAEAguD,mKAMJN,gEAElBQ,cAAoBA,gMAOpBN,kDAGqBF,mBACS,IAA5BC,mBACFO,cAAoBA,2KAOpBN,yBACqC,IAA5BD,mBACTO,cAAoBA,kLAOpBN,yBACqC,IAA5BD,mBACTO,cAAoBA,yLAOpBN,mCAEQnnB,sBCrHb,SAASzlK,GAAOxG,EAAGhB,EAAO20L,EAAe31L,GAC5C,MAAM41L,EAdV,SAA4BjhJ,GACxB,MAAMkhJ,EAAS,GACf,KAAyB,IAAlBA,EAAO77L,QAAsD,IAAtC67L,EAAOA,EAAO77L,OAAS,GAAGk1J,SAAe,CACnE,MAAMA,EAAU2mC,EAAO77L,OAAS67L,EAAOA,EAAO77L,OAAS,GAAGk1J,QAAUv6G,EAAQ,GACtE6yF,EAAa,GAAsC0nB,GACzD2mC,EAAOn3L,KAAK,CACR4zE,OAAQ48E,EACR1nB,aACA0nB,QAASztJ,KAAK4C,KAAK6qJ,EAAU1nB,KAGrC,OAAOquD,EAGiBC,CAAmB9zL,EAAEjB,OAC7C,IAAI2B,EAASV,EACb,IAAK,IAAI/H,EAAI,EAAGA,EAAI27L,EAAgB57L,OAAQC,IAAK,CAC7C,MAAM,OAAEq4E,EAAM,WAAEk1D,EAAU,QAAE0nB,GAAY0mC,EAAgB37L,GACxD,IAAIk1K,EACA4mB,EAEA5mB,EADkB,SAAlBwmB,EACgB,IAAN17L,EACN,IAAI86L,GAAY,CAAEvtD,aAAYl1D,SAAQt4B,UAAWh4C,EAAEjB,MAAM,GAAImuJ,WAAW58E,GACxE,IAAIyiH,GAAY,CAAEvtD,aAAYl1D,SAAQt4B,UAAWh4C,EAAEjB,MAAM,GAAImuJ,YAGvD,IAAIomC,GAAc,CAAE9tD,aAAYl1D,SAAQt4B,UAAWh4C,EAAEjB,MAAM,GAAImuJ,WAAWymC,GAExFI,EAAiBrzL,EACjBA,EAAS1C,EAAQ2rL,gBAAgBxc,EAAS,CAACzsK,GAAS1B,GAChD+0L,EAAe11L,SAAW2B,EAAE3B,QAC5BL,EAAQi4I,8BAA8B89C,GAG9C,OAAOrzL,ECtCJ,MAAMszL,GACT,YAAYzrI,EAAQgtD,GAChBh8G,KAAKo6C,cAAgB,CAAC,KACtB,MAAM6M,EAAc,IAAIroD,MAAMowD,EAAOvwD,QACrC,IAAK,IAAIC,EAAI,EAAGA,EAAIuoD,EAAYxoD,OAAQC,IACpCuoD,EAAYvoD,GAAKswD,EAAOgtD,EAAOt9G,IAEnCsB,KAAKinD,YAAcA,EACnBjnD,KAAKmK,KAAO88C,EAAYxoD,OACxB,MAAMgH,EAAQk/K,GAAkB3kL,KAAKmK,MAC/BuwL,EASd,SAA2B1+E,GACvB,MAAM7xG,EAAO6xG,EAAOv9G,OACpB,GAAI0L,EAAO,EACP,MAAMtE,MAAM,sBAAsBsE,0BAEtC,MAAMwwL,EAAgB,CAAC,UAAW,UAAW,UAAW,UAAW,UAAW,WACxEC,EAAiB,IAAIh8L,MAAMuL,GACjC,IAAK,IAAIzL,EAAI,EAAGA,EAAIs9G,EAAOv9G,OAAQC,IAC/Bk8L,EAAe5+E,EAAOt9G,IAAMi8L,EAAcj8L,GAE9C,OAAOk8L,EAAe5qL,OAnBD6qL,CAAkB7+E,GACnCh8G,KAAK85K,SAAW,8BAEhBr0K,sDACei1L,qBCbhB,MAAMI,GACT,YAAY9rI,EAAQgtD,GAChBh8G,KAAKo6C,cAAgB,CAAC,KACtBp6C,KAAKw5K,cAAe,EACpBx5K,KAAKy5K,cAAe,EACpB,MAAMxyH,EAAc,IAAIroD,MAAMowD,EAAOvwD,QACrC,IAAK,IAAIC,EAAI,EAAGA,EAAIuoD,EAAYxoD,OAAQC,IACpCuoD,EAAYvoD,GAAKswD,EAAOgtD,EAAOt9G,IAInC,GAFAsB,KAAKinD,YAAcA,EACnBjnD,KAAKmK,KAAO88C,EAAYxoD,OACpBuB,KAAKmK,KAAO,EACZ,MAAMtE,MAAM,6BAA6B7F,KAAKmK,8BAElD,MAAM1E,EAAQk/K,GAAkB3kL,KAAKmK,MAC/B4wL,EAAc7P,GAAe,KAAMlrL,KAAKmK,MACxC6wL,EAAgB,IAAIp8L,MAAMoB,KAAKmK,MACrC,IAAK,IAAIzL,EAAI,EAAGA,EAAIs9G,EAAOv9G,OAAQC,IAC/Bs8L,EAAch/E,EAAOt9G,IAAMq8L,EAAYr8L,GAE3C,MAAMwhF,EAAY,QAAQ86G,EAAc32L,OAAO,GAAG2L,UAC5CirL,EAAa,KAAKF,EAAY/6L,KAAKmK,KAAO,QAAQ88C,EAAYjnD,KAAKmK,KAAO,KAC1E+wL,EAAO,mBAAmBF,EAAchrL,YAAYkwE,KAC1DlgF,KAAK85K,SAAW,8BAEhBr0K,+EAEYy1L,gBACTD,6BACWC,wBAEZH,EAAY/6L,KAAKmK,KAAO,mBACrB4wL,EAAY/6L,KAAKmK,KAAO,QAAQ88C,EAAYjnD,KAAKmK,KAAO,8BAC/C+wL,kBACTD,+BACWC,iECjCjB,SAAS,GAAcz0L,EAAGwiC,EAAMxkC,GACnC,MAAMmvK,EAAU,KAAMh4J,QAAQ,+BAC1B,IAAIk/K,GAAuBr0L,EAAEjB,MAAOyjC,GACpC,IAAIwxJ,GAAiBh0L,EAAEjB,MAAOyjC,GAClC,OAAOxkC,EAAQ2rL,gBAAgBxc,EAAS,CAACntK,GAAIA,EAAEhB,OCN5C,SAAS,GAAIxF,GAChB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,EAAEwG,GAAM4W,GACR,KAAEnT,EAAI,SAAEoyC,GAAavzB,EAC3B,OCFG,SAAiBtiB,EAAGyD,EAAMoyC,EAAU73C,GACvC,MAAMupD,EAAmB9jD,EACnBumC,EAAQhqC,EAAEjB,MAAM/G,OAChBmjF,EAAW,GAAoB5zB,EAAkBvnD,EAAEjB,OACzD,IAAIoF,EAAOg3E,EACX,MAAMggE,EAAe,GAAgCh3I,EAAM6lC,GACrD0qJ,EAAuC,MAAhBv5C,EAC7B,IAAIw5C,EAAW30L,EACX00L,IACAC,EAAW,GAAc30L,EAAGm7I,EAAcn9I,GAC1CmG,EAAO,GAA8BA,EAAKnM,OAAQgyC,IAEtD,GAAwC,MAAO7lC,EAAM6lC,GACrD,MAAO4qJ,EAAax5C,GAAe,GAAuCu5C,EAAS51L,MAAOoF,GAC1F,IAAIwmC,EAAWiqJ,EACX/+I,IAEAlL,EAAW,GAAkCiqJ,EAAaz5G,IAE9D,MAAM7K,EAAS,GAAmB8qE,GAG5By5C,EAAgB,GAAQ,CAAEj+K,OAAQ,CAAE5W,EAAG20L,GAAYryK,MAAO,CAAEvjB,MAAO,CAF3D,GAAmBiB,EAAEjB,OACTuxE,EAC2DA,IAAWtyE,YAE1F82L,EAAUtuL,GAAOquL,EADP93K,GAAW/c,EAAEhB,OACkB,MAAOhB,GAChDqlB,EAAM,GAAQ,CAAEzM,OAAQ,CAAE5W,EAAG80L,GAAWxyK,MAAO,CAAEvjB,MAAO4rC,GAAY3sC,YAM1E,OALAA,EAAQi4I,8BAA8B4+C,GACtC72L,EAAQi4I,8BAA8B6+C,GAClCJ,GACA12L,EAAQi4I,8BAA8B0+C,GAEnCtxK,ED7BA0xK,CAAQ/0L,EAAGyD,EAAMoyC,EAAU73C,GAE/B,MAAM,GAAY,CACrBmB,WAAYyT,GACZ8B,YAAa,QACb0O,WAAY,IERT,SAAS,GAAU5pB,GACtB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,EAAEwG,GAAM4W,GACR,KAAE4rB,GAASlgB,EACXyuK,EAAe/yL,EACfgsC,EAAQhqC,EAAEjB,MAAM/G,OAChBuL,EAAW,IAAIpL,MAAM6xC,GAC3B,IAAK,IAAI/xC,EAAI,EAAGA,EAAIsL,EAASvL,OAAQC,IACjCsL,EAAStL,GAAK+H,EAAEjB,MAAMyjC,EAAKvqC,IAE/B,IAAIorB,EACJ,GAAI0tK,EAAa/E,mBAAmB,CAAChsL,IAAK,CACtC,MACMlB,EADWiyL,EAAatO,QAAQxnL,IAAI+E,EAAE3B,QACpBS,OAClBmtL,EAAY,GAAantL,EAAQkB,EAAEjB,MAAOiB,EAAEhB,MAAOwjC,EAAMj/B,GAC/D8f,EAAM0tK,EAAan9C,eAAerwI,EAAUvD,EAAEhB,OAC9B+xL,EAAatO,QAAQxnL,IAAIooB,EAAIhlB,QACrCS,OAASmtL,OAGjB5oK,EAAM,GAAcrjB,EAAGwiC,EAAMuuJ,GAEjC,OAAO1tK,EAEJ,MAAM,GAAkB,CAC3BlkB,WAAYyU,GACZc,YAAa,QACb0O,WAAY,ICnBT,SAAS4xK,IAAgB,EAAE10L,EAAC,EAAEC,EAAC,WAAEshC,EAAU,WAAEC,EAAU,QAAE9jC,EAAO,KAAE0oD,EAAO,KAAI,uBAAEmW,EAAyB,KAAI,eAAEC,EAAiB,EAAC,WAAEN,EAAa,OAClJ,MAAMi4E,EAAQn0I,EAAEvB,MAAM/G,OAChB08I,EAAQn0I,EAAExB,MAAM/G,OAChB8lE,EAAcj8B,EAAavhC,EAAEvB,MAAM01I,EAAQ,GAAKn0I,EAAEvB,MAAM01I,EAAQ,GAChE12E,EAAcj8B,EAAavhC,EAAExB,MAAM21I,EAAQ,GAAKn0I,EAAExB,MAAM21I,EAAQ,GAChE12E,EAAcn8B,EAAavhC,EAAEvB,MAAM01I,EAAQ,GAAKn0I,EAAEvB,MAAM01I,EAAQ,GAChEx2E,EAAcn8B,EAAavhC,EAAExB,MAAM21I,EAAQ,GAAKn0I,EAAExB,MAAM21I,EAAQ,GAChEx2E,EAAa59D,EAAEvB,MAAMnB,MAAM,GAAI,GAC/BugE,EAAa59D,EAAExB,MAAMnB,MAAM,GAAI,GAC/BwgE,EAAY,GAAmBF,GAC/BG,EAAY,GAAmBF,GAErC,EAAYs2E,GAAS,GAAKC,GAAS,IADPt2E,IAAcC,GAA2B,IAAdD,GAAiC,IAAdC,IACb,IAEzD,uJAAwBH,WAAoBC,QAChD,MACMxzB,GADoByzB,EAAYC,EAAY/9D,EAAEvB,MAAMnB,MAAM,GAAI,GAAK2C,EAAExB,MAAMnB,MAAM,GAAI,IACxDiG,OAAO,CAACm6D,EAAaC,IACxD,EAAYH,IAAgBC,GAAa,IAAM,kCAAkCD,WAC1EC,6BAAuCz9D,EAAEvB,aACzCwB,EAAExB,wBAAwB8iC,oBACVC,kBACvB,MAAMmzJ,EAAWpzJ,EACb,CAACu8B,EAAWN,EAAaE,GACzB,CAACI,EAAWJ,EAAaF,GACvBy6E,EAAWz2G,EACb,CAACu8B,EAAWJ,EAAaF,GACzB,CAACM,EAAWN,EAAaE,GAEvBu6E,EAAM,GAAQ,CAAE5hI,OAAQ,CAAE5W,EAAGM,GAAKtC,UAASskB,MAAO,CAAEvjB,MAAOk2L,KAC3Dx8C,EAAM,GAAQ,CAAE7hI,OAAQ,CAAE5W,EAAGO,GAAKvC,UAASskB,MAAO,CAAEvjB,MAAOw5I,KAC3D8B,EAAgB,CAAC7B,EAAKC,GACtB/xG,EAAWjnC,KAAKQ,IAAIm+D,EAAWC,GAC/Bq6E,EAAY72G,EAAa22G,EAAIz5I,MAAM,GAAKy5I,EAAIz5I,MAAM,GAClDm2L,EAAkB,MAARxuI,EACVyuI,EAAsD,MAA1Bt4H,EAC5Bu4H,EAAmC,cAAf54H,EACpB64H,EAAgC,MAAd74H,EACpBi1H,GAA6Bj1H,GAAY,GACzC,KAGJ,IAAIn5C,EAGJ,IAAqB,IAAhB26C,GAAqC,IAAhBC,IACtBy6E,EA9CmC,MA8C6B,KAN3Cw8C,GAAWC,GAChCC,GAAwC,MAAnBC,GAKkD,CACvE,IAAIC,EAAO98C,EACP+8C,EAAO98C,EACP52G,IACAyzJ,EAAO,GAAU,CAAE1+K,OAAQ,CAAE5W,GAAUhC,UAASskB,MAAO,CAAEkgB,KAAM,CAAC,EAAG,EAAG,MACtE63G,EAAc39I,KAAK44L,IAEnBxzJ,IACAyzJ,EAAO,GAAU,CAAE3+K,OAAQ,CAAE5W,EAAGy4I,GAAOz6I,UAASskB,MAAO,CAAEkgB,KAAM,CAAC,EAAG,EAAG,MACtE63G,EAAc39I,KAAK64L,IAEvB,MACMC,EAAiC,IAAhBv3H,EACvB,IAAIw3H,EAASH,EAF0B,IAAhBr3H,IAInBw3H,EAAS,GAAQ,CACb7+K,OAAQ,CAAE5W,EAAGs1L,GACbt3L,UACAskB,MAAO,CAAEvjB,MAAO,CAAC2nC,EAAUgyG,EAAW,MAE1C2B,EAAc39I,KAAK+4L,IAEvB,MAAMhyL,EAAuB,IAAhBw6D,EAAoB,EAAI,EACrC,IAAIy3H,EAASH,EACTC,IACAE,EAAS,GAAQ,CACb9+K,OAAQ,CAAE5W,EAAGu1L,GACbv3L,UACAskB,MAAO,CAAEvjB,MAAO,CAAC2nC,EAAU,EAAGgyG,MAElC2B,EAAc39I,KAAKg5L,IAEvB,MAAMnsK,EAAU,GAAS,CAAE3S,OAAQ,CAAEtW,EAAGm1L,EAAQl1L,EAAGm1L,GAAU13L,YAC7DqlB,EAAM,GAAI,CAAEzM,OAAQ,CAAE5W,EAAGupB,GAAWvrB,UAASskB,MAAO,CAAE7e,OAAMoyC,UAAU,KACtEwkG,EAAc39I,KAAK6sB,OAElB,CACD,MAAMvqB,EAAQ4d,GAAWtc,EAAEtB,MAAOuB,EAAEvB,OAC9BmuK,EAAU,IAAIykB,GAAoBqD,EAAU18C,EAAU,CAAC7xG,EAAUs3B,EAAaC,GAAcp8B,EAAYC,EAAYozJ,EAASG,EAAiBF,EAA2BC,GACzKx+K,EAAS,CAAC4hI,EAAKC,GAOrB,GANY,MAAR/xF,GACA9vC,EAAOla,KAAKgqD,GAEZyuI,GACAv+K,EAAOla,KAAKmgE,GAEZu4H,EAAmB,CACnB,MAAMO,EAAkB33L,EAAQ41I,eAAe,GAAI,UAAW,GAAuB92E,EAAgB,YACrGlmD,EAAOla,KAAKi5L,GACZt7C,EAAc39I,KAAKi5L,GAEvBtyK,EAAMrlB,EAAQ2rL,gBAAgBxc,EAASv2J,EAAQ5X,GAEnD,MAAM42L,EAAc,GAAQ,CAAEh/K,OAAQ,CAAE5W,EAAGqjB,GAAOrlB,UAASskB,MAAO,CAAEvjB,MAAO4rC,KAC3E0vG,EAAc39I,KAAK2mB,GACnB,IAAK,MAAMprB,KAAKoiJ,EACZr8I,EAAQi4I,8BAA8Bh+I,GAE1C,OAAO29L,EChGJ,MAAM,GAAqB,CAC9Bz2L,WAAYiV,GACZM,YAAa,QACb0O,WAnBG,SAAsB5pB,GACzB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,EAAG,EAAE+G,EAAC,KAAEmmD,EAAI,uBAAEmW,GAA2BjmD,GACzC,WAAEirB,EAAU,WAAEC,EAAU,WAAE06B,EAAU,eAAEM,GAAmBx6C,EAC/D,OAAO0yK,GAAgB,CACnB10L,EACAC,IACAshC,aACAC,aACA9jC,UACA0oD,OACAmW,yBACAC,iBACAN,iBCXF,GAAM,iBAoBC,GAAY,CACrBr9D,WAAYmL,GACZoK,YAAa,QACb0O,WAtBG,SAAa5pB,GAChB,MAAM,OAAEod,EAAM,QAAE5Y,GAAYxE,GACtB,EAAEwG,GAAM4W,EAGd,GAAI5Y,EAAQguL,mBAAmB,CAAChsL,KAAmB,cAAZA,EAAEhB,MAAuB,CAC5D,MAAMo5I,EAAQp6I,EAAQykL,QAAQxnL,IAAI+E,EAAE3B,QAC9B4tL,EAAYlI,GAAiB3rC,EAAMt5I,QACzC,OAAOd,EAAQ41I,eAAe5zI,EAAEjB,MAAOiB,EAAEhB,MAAOitL,GAEpD,IAAI9e,EAOJ,OALIA,EADA,KAAMh4J,QAAQ,+BACJ,IAAIkzK,GAAqBroL,EAAEjB,MAAO,IAGlC,IAAIkpL,GAAejoL,EAAEjB,MAAO,IAEnCf,EAAQ2rL,gBAAgBxc,EAAS,CAACntK,GAAIA,EAAEhB,SCbtC,GAAO,GAAgB,CAAEkpL,UANzByJ,6FAOA,GAAa,CACtBxyL,WAAYoL,GACZmK,YAAa,QACb0O,WAAY,ICPH,GAAQ,GAAgB,CAAE8kK,UAHzByJ,4FAID,GAAc,CACvBxyL,WAAYqL,GACZkK,YAAa,QACb0O,WAAY,ICPVyyK,GAAM,gBACCC,GAAgB,GAAiB,CAC1C5N,UAAW2N,GACXhF,gBAAiBgF,GACjB7E,iBAAiB,EACjBF,cAAe,KAEN,GAAY,CACrB3xL,WAAYsL,GACZiK,YAAa,QACb0O,WAAY0yK,ICbT,MAAMC,GACT,YAAYv1I,EAAa0vB,GACrB32E,KAAKinD,YAAc,GACnBjnD,KAAKinD,YAAcA,EACnBjnD,KAAKo6C,cAAgBu8B,EAAOvsE,KAAI,CAAC2hB,EAAGrtB,IAAM,IAAIA,MAC9C,MAAM+9L,EAAW,GAEjBz8L,KAAKo6C,cAAcpuC,SAAQ4pC,IACvB6mJ,EAASt5L,KAAK,UAAUyyC,UAAiBA,sBAG7C,MAAM8mJ,EAAY18L,KAAKo6C,cAClBhwC,KAAIwrC,GACE,IAAIA,MAEV5lC,KAAK,OACVhQ,KAAK85K,SAAW,kCAEd2iB,EAASzsL,KAAK,2CAEC0sL,iDCpBlB,MAAMC,GACT,YAAY11I,EAAa0vB,GACrB32E,KAAKinD,YAAc,GACnBjnD,KAAKw5K,cAAe,EACpBx5K,KAAKy5K,cAAe,EACpBz5K,KAAKinD,YAAcA,EACnBjnD,KAAKo6C,cAAgBu8B,EAAOvsE,KAAI,CAAC2hB,EAAGrtB,IAAM,IAAIA,MAC9C,MAAM+9L,EAAW,GAEjBz8L,KAAKo6C,cAAcpuC,SAAQ4pC,IACvB6mJ,EAASt5L,KAAK,SAASyyC,UAAiBA,sBAG5C,MAAM8mJ,EAAY18L,KAAKo6C,cAClBhwC,KAAIwrC,GACE,IAAIA,MAEV5lC,KAAK,OACVhQ,KAAK85K,SAAW,kCAEd2iB,EAASzsL,KAAK,0CAEA0sL,iDCIjB,MAAM,GAAa,CACtB92L,WAAYuL,GACZgK,YAAa,QACb0O,WAzBG,SAAS,EAAK5pB,GACjB,MAAM,OAAEod,EAAM,QAAE5Y,GAAYxE,EACtBwqB,EAAUpN,EAChB,GAAuB,IAAnBoN,EAAQhsB,OACR,OAAO,GAAS,CAAE4e,OAAQ,CAAE5W,EAAGgkB,EAAQ,IAAMhmB,YAGjD,GAAIgmB,EAAQhsB,OAAS,KAAMiD,IAAI,gCAAiC,CAC5D,MAAMk7L,EAAW12L,KAAK8H,MAAMyc,EAAQhsB,OAAS,GACvCo+L,EAAW,EAAK,CAAEx/K,OAAQoN,EAAQpmB,MAAM,EAAGu4L,GAAWn4L,YACtDq4L,EAAY,EAAK,CAAEz/K,OAAQoN,EAAQpmB,MAAMu4L,GAAWn4L,YAC1D,OAAO,EAAK,CAAE4Y,OAAQ,CAACw/K,EAAUC,GAAYr4L,YAEjD,MAAMgB,EAAQglB,EAAQrgB,KAAIyF,GAAKA,EAAEpK,QAAOwH,QAAO,CAACs/I,EAAIE,IAAOppI,GAAWkpI,EAAIE,KACpE91E,EAASlsD,EAAQrgB,KAAIyF,GAAKA,EAAErK,QAG5BouK,EADc,KAAMh4J,QAAQ,cAE9B,IAAI+gL,GAAkBlyK,EAAQ,GAAGjlB,MAAOmxE,GACxC,IAAI6lH,GAAY/xK,EAAQ,GAAGjlB,MAAOmxE,GACtC,OAAOlyE,EAAQ2rL,gBAAgBxc,EAASnpJ,EAAShlB,KCaxC,GAAY,CACrBG,WAAYwL,GACZ+J,YAAa,QACb0O,WApCG,SAAa5pB,GAChB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,EAAEwG,GAAM4W,GACR,KAAEnT,EAAI,SAAEoyC,GAAavzB,EACrB0nB,EAAQhqC,EAAEjB,MAAM/G,OAChBmjF,EAAW,GAAoB13E,EAAMzD,EAAEjB,OAC7C,IAAIoF,EAAOg3E,EACX,MAAMggE,EAAe,GAAgCh3I,EAAM6lC,GAC3D,IAAImkH,EAAYnuJ,EACI,MAAhBm7I,IACAgT,EAAY,GAAU,CAAEv3I,OAAQ,CAAE5W,KAAKhC,UAASskB,MAAO,CAAEkgB,KAAM24G,KAC/Dh3I,EAAO,GAA8BA,EAAKnM,OAAQgyC,IAEtD,GAAwC,MAAO7lC,EAAM6lC,GACrD,MAAOW,EAAUywG,GAAe,GAAuC+S,EAAUpvJ,MAAOoF,GAElFmyL,EAAM,GAAQ,CAAE1/K,OAAQ,CAAE5W,EAAGmuJ,GAAanwJ,UAASskB,MAAO,CAAEvjB,MAAO,EAAE,EAD5D,GAAmBq8I,OAE5B05C,EAAUtuL,GAAO8vL,EAAKA,EAAIt3L,MAAO,MAAOhB,GAC9C,IAAI2jB,EAaJ,OAVIA,EAAM,GAFNk0B,EAEc,CAAEj/B,OAAQ,CAAE5W,EAAG80L,GAAW92L,UAASskB,MAAO,CAAEvjB,MADzC,GAAkC4rC,EAAUwwC,KAI/C,CAAEvkE,OAAQ,CAAE5W,EAAG80L,GAAW92L,UAASskB,MAAO,CAAEvjB,MAAO4rC,KAErE3sC,EAAQi4I,8BAA8BqgD,GACtCt4L,EAAQi4I,8BAA8B6+C,GAClB,MAAhB35C,GACAn9I,EAAQi4I,8BAA8BkY,GAEnCxsI,ICEE,GAAY,CACrBxiB,WAAYyL,GACZ8J,YAAa,QACb0O,WApCG,SAAa5pB,GAChB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,EAAEwG,GAAM4W,GACR,KAAEnT,EAAI,SAAEoyC,GAAavzB,EACrB0nB,EAAQhqC,EAAEjB,MAAM/G,OAChBmjF,EAAW,GAAoB13E,EAAMzD,EAAEjB,OAC7C,IAAIoF,EAAOg3E,EACX,MAAMggE,EAAe,GAAgCh3I,EAAM6lC,GAC3D,IAAImkH,EAAYnuJ,EACI,MAAhBm7I,IACAgT,EAAY,GAAU,CAAEv3I,OAAQ,CAAE5W,KAAKhC,UAASskB,MAAO,CAAEkgB,KAAM24G,KAC/Dh3I,EAAO,GAA8BA,EAAKnM,OAAQgyC,IAEtD,GAAwC,MAAO7lC,EAAM6lC,GACrD,MAAOW,EAAUywG,GAAe,GAAuC+S,EAAUpvJ,MAAOoF,GAElFmyL,EAAM,GAAQ,CAAE1/K,OAAQ,CAAE5W,EAAGmuJ,GAAanwJ,UAASskB,MAAO,CAAEvjB,MAAO,EAAE,EAD5D,GAAmBq8I,OAE5B05C,EAAUtuL,GAAO8vL,EAAKA,EAAIt3L,MAAO,MAAOhB,GAC9C,IAAI2jB,EAaJ,OAVIA,EAAM,GAFNk0B,EAEc,CAAEj/B,OAAQ,CAAE5W,EAAG80L,GAAW92L,UAASskB,MAAO,CAAEvjB,MADzC,GAAkC4rC,EAAUwwC,KAI/C,CAAEvkE,OAAQ,CAAE5W,EAAG80L,GAAW92L,UAASskB,MAAO,CAAEvjB,MAAO4rC,KAErE3sC,EAAQi4I,8BAA8BqgD,GACtCt4L,EAAQi4I,8BAA8B6+C,GAClB,MAAhB35C,GACAn9I,EAAQi4I,8BAA8BkY,GAEnCxsI,ICnCJ,MAAM40K,GACT,YAAYvD,EAAY7nK,EAAIqrK,GACxBj9L,KAAKo6C,cAAgB,CAAC,KACtB,MAAM,WAAE6xF,EAAU,UAAExtF,EAAS,QAAEk1G,GAAY8lC,EACtCwD,GACDj9L,KAAKo6C,cAAcj3C,KAAK,gBAE5BnD,KAAKinD,YAAc,CAACxI,EAAWk1G,GAC/B,MAAMupC,EAAiB,QAAPtrK,EAAgB,IAAM,IAChCurK,EAAeF,EACjB,gBACA,+CACJj9L,KAAK85K,SAAW,sKAKU7tC,6HAKJA,oCACNkxD,gFAEED,mKCtBnB,MAAME,GACT,YAAY53L,EAAOymI,EAAYr6G,EAAIqrK,GAC/Bj9L,KAAKo6C,cAAgB,CAAC,KACtBp6C,KAAKw5K,cAAe,EACpBx5K,KAAKy5K,cAAe,EACpB,EAAYj0K,EAAM/G,OAAS,GAAG,IAAM,aAAamzB,EAAGygH,OAAO,GAAG9rD,cAC1D30D,EAAGvtB,MAAM,+CACb,MAAM0yE,EAASvxE,EAAMA,EAAM/G,OAAS,GAC9Bk1J,EAAUztJ,KAAK4C,KAAKiuE,EAASk1D,GACnCjsI,KAAKinD,YAAczhD,EAAMnB,MAAM,GAAI,GAC/BsvJ,EAAU,GACV3zJ,KAAKinD,YAAY9jD,KAAKwwJ,GAErBspC,GACDj9L,KAAKo6C,cAAcj3C,KAAK,gBAE5B,MAAMiuC,EAAWpxC,KAAKinD,YAChB98C,EAAOinC,EAAS3yC,OAChBgH,EAAQk/K,GAAkBx6K,GAC1B21J,EAASqrB,GAAY,SAAUhhL,GACrC,IAAIkzL,EACAC,EACJ,GAAgB,IAAZ3pC,EAAe,CACf2pC,EAAanzL,EAAO,EACpB,MAAMozL,EAAiB5Y,GAAkB2Y,GACzCD,EAAiB,aACnBE,kBAA+BA,KAAkBz9B,EAAO9vJ,0BACtD8vJ,EAAO31J,EAAO,gBAChBozL,kBAA+BA,KAAkBz9B,EAAO9vJ,0BACtD8vJ,EAAO31J,EAAO,gBAChBozL,kBAA+BA,KAAkBz9B,EAAO9vJ,0BACtD8vJ,EAAO31J,EAAO,gBAChBozL,kBAA+BA,KAAkBz9B,EAAO9vJ,0BACtD8vJ,EAAO31J,EAAO,WAGdmzL,EAAanzL,EACbkzL,EAAiB,aACnB53L,qCACEq6J,EAAO31J,EAAO,gBAChB1E,qCACEq6J,EAAO31J,EAAO,gBAChB1E,qCACEq6J,EAAO31J,EAAO,gBAChB1E,qCACEq6J,EAAO31J,EAAO,MAElB,MAAMyzJ,EAAW,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,KAAKv5J,MAAM,EAAGi5L,GACnDE,EAAY,IAAM5/B,EAAS0/B,EAAa,GACxCG,EAAc7/B,EAASxzJ,KAAI3D,GAAK,OAASA,IACzCi3L,EAAavS,GAAY,aAAcmS,EAAa,GAAGhzL,OAAO,WAC9DqzL,EAAaxS,GAAY,aAAcmS,EAAa,GAAGhzL,OAAO,WAC9DszL,EAAazS,GAAY,aAAcmS,EAAa,GAAGhzL,OAAO,WAC9DuzL,EAAa1S,GAAY,aAAcmS,EAAa,GAAGhzL,OAAO,WAC9D4yL,EAAiB,QAAPtrK,EAAgB,cAAgB,WAC1CksK,EAAoBb,EAAY,GAAK,yDACGS,EAAW1tL,iEACX2tL,EAAW3tL,iEACX4tL,EAAW5tL,iEACX6tL,EAAW7tL,aACnD+tL,EAAa,kCACDL,EAAW1tL,kDACE2tL,EAAW3tL,uDACX4tL,EAAW5tL,qEACG6tL,EAAW7tL,gBAClDguL,EAAgCf,EAAY,GAAK,wCAC1BQ,EAAYztL,wDACL4tJ,EAAS5tJ,4DACJ4tJ,EAASv5J,OAAO,GAAG2L,qBAE5DhQ,KAAK85K,SAAW,6BACE2jB,EAAYztL,6CACL4tJ,EAAS5tJ,iDACJ4tJ,EAASv5J,OAAO,GAAG2L,6BAEjDguL,mCAEEv4L,4DACkBq6J,EAAO31J,EAAO,QAAQinC,EAASjnC,EAAO,GAAK,iCAC3C21J,EAAO31J,EAAO,QAAQinC,EAASjnC,EAAO,GAAK,eAC7DkzL,6CAC+BG,gBAAwBA,2BAC3CA,gBAAwBA,QAAgBvxD,sGAGnC8xD,qCAEG9xD,mDAElB6xD,iCACiBC,mGAGVb,4dC5FnB,SAASe,GAAUx5L,EAASgC,EAAGuzL,EAAYkE,EAAe,MACtD,IAAIz/I,EAAYh4C,EAAEjB,MAAM,GACpBuxE,EAAStwE,EAAEjB,MAAM,GACD,MAAhB04L,IACAz/I,EAAYy/I,EAAa14L,MAAM,GAC/BuxE,EAASmnH,EAAa14L,MAAM,IAEhC,MAAMymI,EAAa,GAAsCl1D,GACnD0iH,EAAa,CAAExtD,aAAYl1D,SAAQt4B,YAAWk1G,QAASztJ,KAAK4C,KAAKiuE,EAASk1D,IAC1E2nC,EAAU,IAAIopB,GAAiBvD,EAAYO,EAA4B,MAAhBkE,GACvD7gL,EAAS,CAAC5W,GACI,MAAhBy3L,GACA7gL,EAAOla,KAAK+6L,GAEhB,MAAMvgL,EAASlZ,EAAQ2rL,gBAAgBxc,EAASv2J,EAAQ,SAExD,GAAwB,IAApBM,EAAOnY,MAAM,GACb,OAAOmY,EAEX,MAAMxW,EAAS82L,GAAUx5L,EAASgC,EAAGuzL,EAAYr8K,GAEjD,OADAlZ,EAAQi4I,8BAA8B/+H,GAC/BxW,EAEX,SAASg3L,GAAgB15L,EAASgC,EAAGuzL,EAAYkE,EAAe,MAC5D,MAAM9kJ,EAA0B,MAAhB8kJ,EAAuBA,EAAa14L,MAAQiB,EAAEjB,MAExDymI,EAAa,GADJ7yF,EAAQA,EAAQ36C,OAAS,IAElCm1K,EAAU,IAAIwpB,GAAuBhkJ,EAAS6yF,EAAY+tD,EAA4B,MAAhBkE,GACtE7gL,EAAyB,MAAhB6gL,EAAuB,CAACz3L,GAAK,CAACA,EAAGy3L,GAC1CvgL,EAASlZ,EAAQ2rL,gBAAgBxc,EAASv2J,EAAQ,SACxD,GAAIM,EAAOnY,MAAM/G,SAAWgI,EAAEjB,MAAM/G,OAAQ,CACxC,MAAM0I,EAASg3L,GAAgB15L,EAASgC,EAAGuzL,EAAYr8K,GAEvD,OADAlZ,EAAQi4I,8BAA8B/+H,GAC/BxW,EAEX,OAAOwW,EAEJ,SAASygL,GAAgB35L,EAASgC,EAAGyD,EAAM8vL,GAC9C,MAAMpvL,EAAO,CAACV,GAEd,GADA,GAAwC,MAAQ8vL,EAAW3nD,OAAO,GAAG9rD,cAAgByzG,EAAW31L,MAAM,GAAIuG,EAAMnE,EAAEjB,MAAM/G,SACnH,KAAMmd,QAAQ,sBAAwBnV,EAAEjB,MAAM/G,QAAU,EAAG,CAC5D,MAAMyjJ,EAA0B,IACzB9wG,EAAUywG,GAAe,GAAuCp7I,EAAEjB,MAAOoF,GAC1EmsE,EAAS,GAAmB8qE,GAC5Bk7C,EAAM,GAAQ,CAAE1/K,OAAQ,CAAE5W,KAAKhC,UAASskB,MAAO,CAAEvjB,MAAO,EAAE,EAAGuxE,MACnEmrE,EAAwB/+I,KAAK45L,GAC7B,MAAMxB,EAAU0C,GAAUx5L,EAASs4L,EAAK/C,GACxC93C,EAAwB/+I,KAAKo4L,GAC7B,MAAMlkH,EAAW,GAAQ,CAAEh6D,OAAQ,CAAE5W,EAAG80L,GAAW92L,UAASskB,MAAO,CAAEvjB,MAAO4rC,KAE5E,OADA8wG,EAAwBl2I,SAAQ6D,GAAKpL,EAAQi4I,8BAA8B7sI,KACpEwnE,EAEX,OAAO8mH,GAAgB15L,EAASgC,EAAGuzL,GCnChC,MAAM,GAAe,CACxBp0L,WAAY0L,GACZ6J,YAAa,QACb0O,WArBG,SAAgB5pB,GACnB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,EAAEwG,GAAM4W,GACR,KAAEnT,GAAS6e,EACjB,IAAIne,EAAO,GAAoBV,EAAMzD,EAAEjB,OACvC,MAAMo8I,EAAe,GAAgCh3I,EAAMnE,EAAEjB,MAAM/G,QACnE,IAAIghC,EAAKh5B,EACT,MAAMy7I,EAA0B,GACZ,MAAhBN,IACAniH,EAAK,GAAU,CAAEpiB,OAAQ,CAAE5W,KAAKhC,UAASskB,MAAO,CAAEkgB,KAAM24G,KACxDM,EAAwB/+I,KAAKs8B,GAC7B70B,EAAO,GAA8BA,EAAKnM,OAAQghC,EAAGj6B,MAAM/G,SAE/D,GAAwC,SAAU,CAACmM,EAAK,IAAK60B,EAAGj6B,MAAM/G,QACtE,MAAMqrB,EAAMs0K,GAAgB35L,EAASg7B,EAAI70B,EAAK,GAAI,OAElD,OADAs3I,EAAwBl2I,SAAQ6D,GAAKpL,EAAQi4I,8BAA8B7sI,KACpEia,ICEE,GAAe,CACxBlkB,WAAY2L,GACZ4J,YAAa,QACb0O,WArBG,SAAgB5pB,GACnB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,EAAEwG,GAAM4W,GACR,KAAEnT,GAAS6e,EACjB,IAAIne,EAAO,GAAoBV,EAAMzD,EAAEjB,OACvC,MAAMo8I,EAAe,GAAgCh3I,EAAMnE,EAAEjB,MAAM/G,QACnE,IAAIghC,EAAKh5B,EACT,MAAMy7I,EAA0B,GACZ,MAAhBN,IACAniH,EAAK,GAAU,CAAEpiB,OAAQ,CAAE5W,KAAKhC,UAASskB,MAAO,CAAEkgB,KAAM24G,KACxDM,EAAwB/+I,KAAKs8B,GAC7B70B,EAAO,GAA8BA,EAAKnM,OAAQghC,EAAGj6B,MAAM/G,SAE/D,GAAwC,SAAU,CAACmM,EAAK,IAAK60B,EAAGj6B,MAAM/G,QACtE,MAAMqrB,EAAMs0K,GAAgB35L,EAASg7B,EAAI70B,EAAK,GAAI,OAElD,OADAs3I,EAAwBl2I,SAAQ6D,GAAKpL,EAAQi4I,8BAA8B7sI,KACpEia,ICVE,GAAO,GAAgB,CAAE6kK,UANzByJ,6FAOA,GAAa,CACtBxyL,WAAY4L,GACZ2J,YAAa,QACb0O,WAAY,ICTH,GAAQ,GAAgB,CAAE8kK,UADzByJ,8DAED,GAAc,CACvBxyL,WAAY6L,GACZ0J,YAAa,QACb0O,WAAY,ICFH,GAAO,GAAgB,CAAE8kK,UAHzByJ,iDAIA,GAAa,CACtBxyL,WAAY8L,GACZyJ,YAAa,QACb0O,WAAY,ICEH,GAAQ,GAAiB,CAAE8kK,UAV1B0P,mFAU4C/G,gBAPrC,iTAQR,GAAc,CACvB1xL,WAAYgM,GACZuJ,YAAa,QACb0O,WAAY,ICVH,GAAQ,GAAgB,CAAE8kK,UAHzByJ,qHAID,GAAc,CACvBxyL,WAAY+L,GACZwJ,YAAa,QACb0O,WAAY,ICVT,MAAMy0K,GACT,YAAYjqI,EAAUwuF,EAAU07C,EAAkBl6C,GAAmB,EAAO9zF,GAAsB,GAE9F,GADAvwD,KAAKo6C,cAAgB,CAAC,KACL,QAAbyoG,GAAsB07C,EACtB,MAAM,IAAI14L,MAAM,8CAEpB,MAAMo4C,EAAcoW,EAASpW,YACvBa,EAAeuV,EAASvV,aACxBC,EAAcsV,EAAStV,YACvBC,EAAiBqV,EAASrV,eAC1BC,EAAgBoV,EAASpV,cACzBC,EAAwBmV,EAASnV,sBACjCE,EAAuBiV,EAASjV,qBAChC0jG,EAASzuF,EAAShV,QAAQG,IAC1BujG,EAAU1uF,EAAShV,QAAQK,KACjC1/C,KAAKinD,YAAcoN,EAASjjB,SAC5B,MAAMotJ,EAAyB,QAAb37C,EACZ47C,EAA0B,cAAcpqI,EAAS3V,oBAAoB2V,EAAS1V,mBAAmB0V,EAASzV,iBAC1G8/I,EAAqB,SAASrqI,EAAS1V,mBAAmB0V,EAASzV,iBACzE,IAAIq7I,EAAsB,MAK1B,GAJKuE,IAEDvE,EAAsB,gBAEtBsE,EAAkB,CAClB,MAAMrE,EAAY,KAuDlB,YAtDAl6L,KAAK85K,SAAW,yCACUh7H,MAAiBC,yCACpB+jG,MAAWC,qiBAkBZ7jG,2BACZF,gFAGYqV,EAAS3V,4FAIPU,6BACZH,oFAGYoV,EAAS1V,0WAUnBu7I,yIAGS71C,EAAoB9zF,EAAsBkuI,EAC7DC,EACA,QAAQt/I,0HAUhB,IAAIszH,EAAc,GAAG7vB,KAAYA,KAAYA,sEAE5B,QAAbA,IACA6vB,EAAc,oBAElB,MAAMisB,EAAuD,EAA9Bz4L,KAAK8H,MAAMiwC,EAAc,GAClD2gJ,EAA2B3gJ,EAAc,EACzC47I,EAAgB,eAClB2E,+HAMJx+L,KAAK85K,SAAW,uCACYh7H,MAAiBC,uCACpB+jG,MAAWC,gDACFk3C,8KAMZ5lI,EAAS1V,igBAkBLs7I,6FAIF/6I,yBACZF,4EAGYqV,EAAS3V,sFAIPigJ,uDACK1/I,4HAIEA,sDACIA,sDACAA,wCAG/B46I,mDAGkB8E,qBACa,IAA7BC,8NAQF/E,2BACsC,IAA7B+E,4HAGkB3/I,gHAK3B46I,2BACsC,IAA7B+E,4HAGkB3/I,sDACIA,4EAI/B46I,gDAGMnnB,sBAKb,MAAMmsB,GACT,YAAYxqI,EAAUwuF,EAAU07C,EAAkBl6C,GAAmB,EAAO9zF,GAAsB,GAE9F,GADAvwD,KAAKo6C,cAAgB,CAAC,KACL,QAAbyoG,GAAsB07C,EACtB,MAAM,IAAI14L,MAAM,8CAEpB,MAAMo4C,EAAcoW,EAASpW,YACvBqC,EAAc+T,EAAS/T,YACvBxB,EAAeuV,EAASvV,aACxBC,EAAcsV,EAAStV,YACvBwB,EAAgB8T,EAAS9T,cACzBvB,EAAiBqV,EAASrV,eAC1BC,EAAgBoV,EAASpV,cACzBuB,EAAuB6T,EAAS7T,qBAChCtB,EAAwBmV,EAASnV,sBACjCE,EAAuBiV,EAASjV,qBAChCulG,EAAWtwF,EAAShV,QAAQqB,MAC5BoiG,EAASzuF,EAAShV,QAAQG,IAC1BujG,EAAU1uF,EAAShV,QAAQK,KACjC1/C,KAAKinD,YAAcoN,EAASjjB,SAC5B,MAAMotJ,EAAyB,QAAb37C,EAClB,IAAIo3C,EAAsB,MAK1B,GAJKuE,IAEDvE,EAAsB,gBAEtBsE,EAAkB,CAClB,MAAMrE,EAAY,KAoElB,YAnEAl6L,KAAK85K,SAAW,sDAERx5H,MAAgBxB,MAAiBC,yCAClB4lG,MAAa7B,MAAWC,qkBAkBzBviG,2BACZD,gFAGY8T,EAAShU,2FAIPnB,6BACZF,oFAGYqV,EAAS3V,kGAIPU,+BACZH,wFAGYoV,EAAS1V,+XAUnBu7I,+IAGS71C,EACpB9zF,EACG,cAAc8D,EAAShU,mBAAmBgU,EAAS3V,oBAAoB2V,EAAS1V,mBAAmB0V,EAASzV,kBAC5G,UAAUyV,EAAS3V,oBAAoB2V,EAAS1V,mBAAmB0V,EAASzV,kBAChF,QAAQM,OAA2BE,mCACtBA,6IAWrB,IAAIszH,EAAc,GAAG7vB,KAAYA,KAAYA,sEAE5B,QAAbA,IACA6vB,EAAc,oBAElB,MAAMisB,EAAuD,EAA9Bz4L,KAAK8H,MAAMiwC,EAAc,GAClD2gJ,EAA2B3gJ,EAAc,EACzC47I,EAAgB,eAClB2E,+HAMJx+L,KAAK85K,SAAW,gDAERx5H,MAAgBxB,MAAiBC,uCAChB4lG,MAAa7B,MAAWC,gDACfk3C,uLAMZ5lI,EAAS1V,okBAmBLs7I,6FAIFz5I,yBACZD,4EAGY8T,EAAShU,qFAIPnB,yBACdF,gFAGcqV,EAAS3V,4FAIPigJ,yDACK1/I,2IAIMA,6DACIA,6DACAA,6CAGnC46I,uDAGkB8E,uBACa,IAA7BC,iPAQF/E,6BACsC,IAA7B+E,2IAGsB3/I,yHAK/B46I,6BACsC,IAA7B+E,2IAGsB3/I,6DACIA,mFAInC46I,sDAGMnnB,iCChXf,MAAM,GAAgB,CACzB9sK,WAAYiM,GACZsJ,YAAa,QACb0O,WAnBG,SAAiB5pB,GACpB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,EAAEwG,GAAM4W,EACd,GAAiB5W,EAAG,WACpB,MAAM,WAAEq3C,EAAU,QAAEpxC,EAAO,IAAEkT,EAAG,gBAAEiiC,GAAoB94B,EAEtD,EAAY,GAA4Crc,EADtC,IAC2D,IACzE,wEAAeA,wBACnB,MAAM2nD,EAAW,GAA+B5tD,EAAEjB,MAAOs4C,EAAYpxC,EAHnD,EAGuEkT,EAAKiiC,GAC9F,GAA6B,IAAzBwS,EAASpW,aAA+C,IAA1BoW,EAASrW,cACvC,GAAiBqW,EAASjb,QAASib,EAASjjB,UAC5C,OAAO,GAAS,CAAE/zB,OAAQ,CAAE5W,KAAKhC,YAErC,MAAMq6L,EAAiB,IAAIR,GAAcjqI,EAAU,OAAO,GAC1D,OAAO5vD,EAAQ2rL,gBAAgB0O,EAAgB,CAACr4L,GAAI,aCP3C,GAAkB,CAC3Bb,WAAYmM,GACZoJ,YAAa,QACb0O,WAZG,SAAmB5pB,GACtB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,EAAEwG,GAAM4W,GACR,WAAEygC,EAAU,QAAEpxC,EAAO,IAAEkT,EAAG,gBAAEiiC,EAAe,WAAEpE,GAAe10B,EAE5DsrC,EAAW,GAA+B5tD,EAAEjB,MAAOs4C,EAAYpxC,EADnD,CAAC,EAAG,EAAG,GACgEkT,EAAKiiC,EAAiBpE,GACzGqhJ,EAAiB,IAAID,GAAcxqI,EAAU,OAAO,GAC1D,OAAO5vD,EAAQ2rL,gBAAgB0O,EAAgB,CAACr4L,GAAI,aCTjD,MAAMs4L,GACT,YAAY1qI,GACRr0D,KAAKo6C,cAAgB,CAAC,MACtBp6C,KAAKinD,YAAcoN,EAASjb,QAC5B,MAAM4E,EAAeqW,EAASrW,aACxBC,EAAcoW,EAASpW,YACvBa,EAAeuV,EAASvV,aACxBC,EAAcsV,EAAStV,YACvBC,EAAiBqV,EAASrV,eAC1BC,EAAgBoV,EAASpV,cACzBC,EAAwBmV,EAASnV,sBACjCE,EAAuBiV,EAASjV,qBAChC0jG,EAAS5jG,EAAwB,EAAImV,EAAShV,QAAQG,IACtDujG,EAAU3jG,EAAuB,EAAIiV,EAAShV,QAAQK,KACtDwmG,EAAgB,GAAKloG,EAAeC,GAC1Cj+C,KAAK85K,SAAW,oCACSh3B,MAAWC,gDACFmD,kdAcVhnG,yBACZF,uDAC4BF,6CAEZuV,EAAS/U,6IAKXF,wBACfH,yDAC+BF,+CAEZsV,EAAS9U,+SAgBxC,MAAMy/I,GACT,YAAY3qI,GACRr0D,KAAKo6C,cAAgB,CAAC,MACtBp6C,KAAKinD,YAAcoN,EAASjb,QAC5B,MAAMgF,EAAciW,EAASjW,YACvBJ,EAAeqW,EAASrW,aACxBC,EAAcoW,EAASpW,YACvBqC,EAAc+T,EAAS/T,YACvBxB,EAAeuV,EAASvV,aACxBC,EAAcsV,EAAStV,YACvBwB,EAAgB8T,EAAS9T,cACzBvB,EAAiBqV,EAASrV,eAC1BC,EAAgBoV,EAASpV,cACzBuB,EAAuB6T,EAAS7T,qBAChCtB,EAAwBmV,EAASnV,sBACjCE,EAAuBiV,EAASjV,qBAChCulG,EAAWnkG,EAAuB,EAAI6T,EAAShV,QAAQqB,MACvDoiG,EAAS5jG,EAAwB,EAAImV,EAAShV,QAAQG,IACtDujG,EAAU3jG,EAAuB,EAAIiV,EAAShV,QAAQK,KACtDwmG,EAAgB,GAAK9nG,EAAcJ,EAAeC,GACxDj+C,KAAK85K,SAAW,oCACSn1B,MAAa7B,MAAWC,gDACfmD,wiBAiBV1lG,yBACZD,uDAC4BD,6CAEZ+T,EAAS5T,4IAKXvB,2BACZF,yDAC4BF,+CAEZuV,EAAS/U,sKAMXF,6BACZH,2DAC4BF,iDAEZsV,EAAS9U,qVC9G1C,MAAM0/I,GAAsB,CAC/Br5L,WAAYoM,GACZmJ,YAAa,QACb0O,WAbG,SAAuB5pB,GAC1B,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,GAAE4oB,EAAE,MAAEnK,GAAUrB,EAChB5W,EAAIiY,GACJ,WAAEo/B,EAAU,QAAEpxC,EAAO,IAAEkT,EAAG,gBAAEiiC,GAAoB94B,EAEhDsrC,EAAW,GAA+B5tD,EAAEjB,MAAOs4C,EAAYpxC,EADnD,CAAC,EAAG,EAAG,GACgEkT,EAAKiiC,GACxFq9I,EAAyB,IAAIF,GAAyB3qI,GAC5D,OAAO5vD,EAAQ2rL,gBAAgB8O,EAAwB,CAACr2K,GAAKpiB,EAAEhB,SCGtD,GAAoB,CAC7BG,WAAYkM,GACZqJ,YAAa,QACb0O,WAbG,SAAqB5pB,GACxB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,GAAE4oB,EAAE,MAAEnK,GAAUrB,EAChB5W,EAAIiY,EACV,GAAiB,CAACmK,EAAInK,GAAQ,eAC9B,MAAM,WAAEo/B,EAAU,QAAEpxC,EAAO,IAAEkT,GAAQmJ,EAC/BsrC,EAAW,GAA+B5tD,EAAEjB,MAAOs4C,EAAYpxC,EAAS,EAAmBkT,GAC3Fs/K,EAAyB,IAAIH,GAAyB1qI,GAC5D,OAAO5vD,EAAQ2rL,gBAAgB8O,EAAwB,CAACr2K,GAAKpiB,EAAEhB,SCHtD,GAAoB,CAC7BG,WAAYqM,GACZkJ,YAAa,QACb0O,WATG,SAAqB5pB,GACxB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,EAAG,EAAE+G,GAAMqW,GACX,WAAEirB,EAAU,WAAEC,GAAexf,EACnC,OAAO0yK,GAAgB,CAAE10L,EAAGC,IAAGshC,aAAYC,aAAY9jC,cCLpD,MAAM06L,GACT,YAAYvuJ,EAAQwuJ,EAAWC,EAAeC,EAAaC,EAAYp7I,GACnEnkD,KAAKinD,YAAc,GACnBjnD,KAAKo6C,cAAgB,CAAC,IAAK,OAAQ,YACnC,GAAwCxJ,EAAQwuJ,GAChD,GAAwCxuJ,EAAQyuJ,GAChD,IAAIG,EAAgB,MACD,MAAfF,IACA,GAAwC1uJ,EAAQ0uJ,GAChDt/L,KAAKo6C,cAAcj3C,KAAK,UACxBq8L,EAAgB,0BAEpB,IAAIC,EAAe,MACD,MAAdF,IACA,GAAwC3uJ,EAAQ2uJ,GAChDv/L,KAAKo6C,cAAcj3C,KAAK,SACxBs8L,EAAe,yBAEnBz/L,KAAKinD,YAAcrW,EACnB5wC,KAAK85K,SAAW,uLAKC0lB,6BACDC,gEACmCt7I,2FC1BpD,MAAMu7I,GACT,YAAY9uJ,EAAQwuJ,EAAWC,EAAeC,EAAaC,EAAYp7I,GACnEnkD,KAAKw5K,cAAe,EACpBx5K,KAAKy5K,cAAe,EACpBz5K,KAAKo6C,cAAgB,CAAC,IAAK,OAAQ,YACnC,GAAwCxJ,EAAQwuJ,GAChD,GAAwCxuJ,EAAQyuJ,GAChD,IAAIG,EAAgB,YACD,MAAfF,IACA,GAAwC1uJ,EAAQ0uJ,GAChDt/L,KAAKo6C,cAAcj3C,KAAK,UACxBq8L,EAAgB,0BAEpB,IAAIC,EAAe,YACD,MAAdF,IACA,GAAwC3uJ,EAAQ2uJ,GAChDv/L,KAAKo6C,cAAcj3C,KAAK,SACxBs8L,EAAe,yBAEnBz/L,KAAKinD,YAAcrW,EACnB5wC,KAAK85K,SAAW,gDAEA0lB,4BACDC,qMAMkCt7I,wEC3BlD,MA6BM,GAAkB,CAC3Bv+C,WAAYgP,GACZuG,YAAa,QACb0O,WAhCqB,EAAGxM,SAAQ5Y,UAASskB,YACzC,MAAM,EAAEtiB,EAAC,KAAEw9C,EAAI,SAAEC,EAAQ,OAAEt3C,EAAM,MAAEknB,GAAUzW,EAC7C,EAAY4mC,EAAKz+C,MAAM/G,SAAWylD,EAAS1+C,MAAM/G,QAAQ,IAAM,iFAE/D,EAAsB,MAAVmO,GAAkBq3C,EAAKz+C,MAAM/G,SAAWmO,EAAOpH,MAAM/G,QAAQ,IAAM,+EAE/E,EAAqB,MAATq1B,GAAiBmwB,EAAKz+C,MAAM/G,SAAWq1B,EAAMtuB,MAAM/G,QAAQ,IAAM,8EAE7E,IAAI,gBAAE0lD,GAAoBp7B,EACH,MAAnBo7B,IACAA,EAAkB,MAEtB,MAAMw7I,EAAc,CAACl5L,EAAGw9C,EAAMC,GAC9B,IAAIo7I,EAAc,KACJ,MAAV1yL,IACA0yL,EAAc1yL,EAAOpH,MACrBm6L,EAAYx8L,KAAKyJ,IAErB,IAAI2yL,EAAa,KACJ,MAATzrK,IACAyrK,EAAazrK,EAAMtuB,MACnBm6L,EAAYx8L,KAAK2wB,IAErB,MAAM8/I,EAAU,KAAMh4J,QAAQ,4BAC1B,IAAI8jL,GAAuBj5L,EAAEjB,MAAOy+C,EAAKz+C,MAAO0+C,EAAS1+C,MAAO85L,EAAaC,EAAYp7I,GACzF,IAAIg7I,GAAiB14L,EAAEjB,MAAOy+C,EAAKz+C,MAAO0+C,EAAS1+C,MAAO85L,EAAaC,EAAYp7I,GAEvF,OADe1/C,EAAQ2rL,gBAAgBxc,EAAS+rB,EAAaA,EAAY,GAAGl6L,SC5BzE,MAAMm6L,GACT,YAAYC,GACR7/L,KAAKo6C,cAAgB,CAAC,UACtBp6C,KAAKinD,YAAc44I,EACnB7/L,KAAKmK,KAAO01L,EAASphM,OACrB,MAAMgH,EAAQk/K,GAAkB3kL,KAAKmK,MAC/B21L,EAAc,qBAAqB9/L,KAAKmK,SACxCshL,EAqCd,SAAmBthL,GACf,GAAa,IAATA,EACA,MAAO,YAEN,GAAIA,GAAQ,EACb,OAAO21J,GAAOz7J,MAAM,EAAG8F,GAAMC,KAAI3D,GAAK,aAAeA,IAAGuJ,KAAK,KAG7D,MAAMnK,MAAM,oBAAoBsE,0BA7CX41L,CAAU//L,KAAKmK,MACpC,IAAI+7B,EAIJA,EAAO,aACLzgC,yBACAA,0CALeo6L,EAASz1L,KAAI,CAAC2hB,EAAGrtB,IACvB,aAAaohK,GAAOphK,cAAcA,eAAeohK,GAAOphK,QAKxDsR,KAAK,gBAEhBhQ,KAAK85K,SAAW,WAChBgmB,mCAEE55J,kCACoBulJ,sBAI1B,mBAAmBj/K,GACf,GAAIA,EAAM/N,SAAWuB,KAAKmK,KACtB,MAAMtE,MAAM,aAAa7F,KAAKmK,wDACNqC,EAAM/N,WAElC,MAAO,CAACutL,EAAOoI,KACU,MAAjBp0L,KAAKggM,WACLhgM,KAAKggM,SAAWhU,EAAMiU,0BAA0B7L,EAAc,SACzC,MAAjBp0L,KAAKggM,WAMbhU,EAAMlc,GAAGowB,WAAWlgM,KAAKggM,SAAUxzL,KAI/C,MAAMszJ,GAAS,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,KC1ClC,MAAMqgC,GACT,YAAYN,GACR7/L,KAAKo6C,cAAgB,CAAC,UACtBp6C,KAAKw5K,cAAe,EACpBx5K,KAAKy5K,cAAe,EACpBz5K,KAAKinD,YAAc44I,EACnB7/L,KAAKmK,KAAO01L,EAASphM,OACrB,MAAMgH,EAAQk/K,GAAkB3kL,KAAKmK,MAC/B21J,EAASqrB,GAAY,SAAUnrL,KAAKmK,MACpCi2L,EAAYjV,GAAY,YAAanrL,KAAKmK,MAC1C+1E,EAA0B,IAAdlgF,KAAKmK,KAAa,YAAc,QAAQi2L,EAAU/7L,OAAO,GAAG2L,UACxEqwL,EAAa,wBAAwBD,EAAUpwL,YAAYkwE,KAC3DogH,EAAW,sBACND,mBACLvgC,EAAO9/J,KAAKmK,KAAO,QAAQ01L,EAAS7/L,KAAKmK,KAAO,oBAClDi2L,EAAUpgM,KAAKmK,KAAO,2BACbk2L,iBACTD,EAAUpgM,KAAKmK,KAAO,qBAGpBo2L,EAAyB,IAAdvgM,KAAKmK,KAAa,GAAK,aACtC21J,EAAO9/J,KAAKmK,KAAO,oBACf21J,EAAO9/J,KAAKmK,KAAO,QAAQ01L,EAAS7/L,KAAKmK,KAAO,oBAClDi2L,EAAUpgM,KAAKmK,KAAO,2BACbk2L,qBACLvgC,EAAO9/J,KAAKmK,KAAO,QAAQ01L,EAAS7/L,KAAKmK,KAAO,sBAClDi2L,EAAUpgM,KAAKmK,KAAO,6BACbk2L,+BAIThD,EAAiBr9L,KAAKmK,MAAQ,EAChC,qCACE1E,KAASo6L,EAASz1L,KAAI,CAAC2hB,EAAGrtB,IAAM,SAASA,OAAMsR,WACjD6vL,EAASz1L,KAAI,CAAC2hB,EAAGrtB,IAAM,GAAG0hM,EAAU1hM,QAAQohK,EAAOphK,cAAcA,QAC5DsR,KAAK,MACdhQ,KAAK85K,SAAW,6BACE95K,KAAKmK,wCAErB1E,0CACAA,yBACA43L,+CAEAiD,cACAC,+CAKN,mBAAmB/zL,GACf,GAAIA,EAAM/N,SAAWuB,KAAKmK,KACtB,MAAMtE,MAAM,aAAa7F,KAAKmK,wDACNqC,EAAM/N,WAElC,MAAO,CAACutL,EAAOoI,KACU,MAAjBp0L,KAAKggM,WACLhgM,KAAKggM,SAAWhU,EAAMiU,0BAA0B7L,EAAc,SACzC,MAAjBp0L,KAAKggM,WAMbhU,EAAMlc,GAAGowB,WAAWlgM,KAAKggM,SAAUxzL,KCpCxC,SAAS,GAAMvM,GAClB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,EAAEwG,GAAM4W,GACR,MAAEuwB,EAAK,KAAEzlC,GAAS4gB,GACjBgoB,EAAQ43G,GAAS,GAA4BliJ,EAAGmnC,EAAOzlC,GAE9D,GADA,GAA6B1B,EAAGsqC,EAAQ43G,GACN,IAA9B,GAAmBA,GACnB,OAAOlkJ,EAAQ41I,eAAesO,EAAOliJ,EAAEhB,MAAO,IAQlD,GAAIhB,EAAQguL,mBAAmB,CAAChsL,KAAmB,WAAZA,EAAEhB,MAAoB,CACzD,MAAM8zL,EAAW90L,EAAQykL,QAAQxnL,IAAI+E,EAAE3B,QACjC4tL,EAAYjI,GAAa8O,EAASh0L,OAAQwrC,EAAQ43G,EAAOliJ,EAAEjB,MAAOiB,EAAEhB,OAC1E,OAAOhB,EAAQ41I,eAAesO,EAAOliJ,EAAEhB,MAAOitL,GAElD,MAAM,SAAE3M,GAAathL,EAAQykL,QAAQxnL,IAAI+E,EAAE3B,QACrCyjJ,EAAc,GAA4B9hJ,EAAEjB,MAAOurC,EAAQ43G,GACjE,GAAIo9B,IAAax9B,EAAa,CAC1B,MAAMqrB,EAAU,KAAMh4J,QAAQ,+BAC1B,IAAIukL,GAAmBx3C,GACvB,IAAIi3C,GAAaj3C,GACfsqC,EAAcrf,EAAQ4sB,mBAAmBzvJ,GAC/C,OAAOtsC,EAAQ2rL,gBAAgBxc,EAAS,CAACntK,GAAIA,EAAEhB,MAAOwtL,GAG1D,OADAxuL,EAAQ6tL,YAAY7rL,EAAE3B,QAtD1B,SAAsB2B,EAAGmnC,EAAOzlC,EAAM1D,GAClC,MAAM80L,EAAW90L,EAAQykL,QAAQxnL,IAAI+E,EAAE3B,QACjC+K,EAAIpL,EAAQ41I,eAAelyI,EAAM1B,EAAEhB,OACnCg7L,EAAah8L,EAAQykL,QAAQxnL,IAAImO,EAAE/K,QAEzC9D,OAAOkO,OAAOuxL,EAAYlH,GAC1BkH,EAAW/6L,SAAW,EACtB+6L,EAAWj7L,MAAQ2C,EACnBs4L,EAAWh7L,MAAQgB,EAAEhB,MACrB,IAAI6qC,EAAa,GAA6B1C,EAAO,GAAoBnnC,EAAEjB,QACvE+zL,EAASl1L,QAGTisC,GAAcipJ,EAASl1L,MAAMisC,YAEjCmwJ,EAAWp8L,MAAQ,CACfisC,aAEA8hJ,WAAYmH,EAASl1L,OAASk1L,EAASl1L,MAAM+tL,YAAc3rL,EAAE3B,QAGjE,MAAMY,EAAWjB,EAAQ6qL,aAAa5tL,IAAI++L,EAAWp8L,MAAM+tL,aAAe,EAE1E,OADA3tL,EAAQ6qL,aAAarqL,IAAIw7L,EAAWp8L,MAAM+tL,WAAY1sL,EAAW,GAC1DmK,EAgCA6wL,CAAaj6L,EAAGsqC,EAAQ43G,EAAOlkJ,GAEnC,MAAM,GAAc,CACvBmB,WAAYkT,GACZqC,YAAa,QACb0O,WAAY,IC7BH,GAAuB,CAChCjkB,WAAYsM,GACZiJ,YAAa,QACb0O,WAlC2B5pB,IAC3B,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,EAAEwG,GAAM4W,GACR,WAAEumC,EAAU,MAAEC,GAAU96B,EAC9B,EAAYtiB,EAAEjB,MAAM/G,QAAU,GAAG,IAAM,yEAEvC,MAAMqlD,EAAOF,EAAW32C,QAAO,CAAClG,EAAGC,IAAMD,EAAIC,IACvCqwE,EAAW,GAAyB5wE,EAAEjB,MAAOo+C,EAAYE,GACzD4zB,EAAW,GAAyBL,EAAS54E,OAAQmlD,EAAWnlD,QAChEq5E,EAAmB,GAAiCrxE,EAAEjB,MAAOo+C,EAAYE,GACzEk0B,EAAmB,GAAiCn0B,EAAOD,EAAWnlD,QACtEsuC,EAAY,GAA0B+qC,EAAkBj0B,EAAOD,EAAWnlD,QAC1E+gK,EAAY,GACZmhC,EAAuB,GAAQ,CAAEtjL,OAAQ,CAAE5W,KAAKhC,UAASskB,MAAO,CAAEvjB,MAAO6xE,KACzEupH,EAAyB,GAAU,CAAEvjL,OAAQ,CAAE5W,EAAGk6L,GAAwBl8L,UAASskB,MAAO,CAAEkgB,KAAMyuC,KAClGmpH,EAAwB,GAAQ,CAClCxjL,OAAQ,CAAE5W,EAAGm6L,GACbn8L,UACAskB,MAAO,CAAEvjB,MAAOsyE,KAEd6zF,EAAS,GAAM,CACjBtuJ,OAAQ,CAAE5W,EAAGo6L,GACbp8L,UACAskB,MAAO,CAAE6kB,MAAOoqC,EAAkB7vE,KAAM4kC,KAM5C,OAJAyyH,EAAUr8J,KAAKw9L,GACfnhC,EAAUr8J,KAAKy9L,GACfphC,EAAUr8J,KAAK09L,GACfrhC,EAAUxzJ,SAAQ6D,GAAKpL,EAAQi4I,8BAA8B7sI,KACtD87J,ICtBE,GAAiB,CAC1B/lK,WAAYuM,GACZgJ,YAAa,QACb0O,WAZG,SAAkB5pB,GACrB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,EAAEwG,EAAC,QAAE45B,GAAYhjB,GACjB,KAAElV,GAAS4gB,EACX+wC,EAAQr1D,EAAQod,SAASpb,EAAE3B,QAC3BmkJ,EAAcxkJ,EAAQod,SAASwe,EAAQv7B,QACvC61I,EAAUyuC,GAAgBtvH,EAAOmvF,EAAa5oH,EAAQ56B,MAAO46B,EAAQ76B,MAAO2C,GAClF,OAAO1D,EAAQ41I,eAAe,CAAClyI,GAAOk4B,EAAQ56B,MAAOk1I,KCN5C,GAAW,GAAiB,CAAEg0C,UADzB,wBAC+ClpL,MAAO,SAC3D,GAAiB,CAC1BG,WAAYsR,GACZiE,YAAa,QACb0O,WAAY,ICLT,SAAS,GAAK5pB,GACjB,MAAM,OAAEod,EAAM,QAAE5Y,GAAYxE,GACtB,MAAEye,GAAUrB,EAElB,OAAO,GAAS,CAAEA,OAAQ,CAAE5W,EADVhC,EAAQykL,QAAQxnL,IAAIgd,EAAM5Z,QACHi1I,mBAAmB5nH,MAAQ1tB,YAEjE,MAAM,GAAa,CACtBmB,WAAYmS,GACZoD,YAAa,QACb0O,WAAY,ICsCH,GAAa,CACtBjkB,WAAYyM,GACZ8I,YAAa,QACb0O,WA7CG,SAAS,EAAK5pB,GACjB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,EAAEwG,GAAM4W,GACR,MAAE5X,GAAUsjB,EAElB,GAAc,cAAVtjB,EAAuB,CACvB,GAAgB,cAAZgB,EAAEhB,MACF,OAAO,GAAS,CAAE4X,OAAQ,CAAE5W,KAAKhC,YAGrC,MAAMq8L,EAAc,GAASr6L,EAAEjB,OACzBi3I,EAAS,EAAK,CAAEp/H,OAAQ,CAAE5W,KAAKhC,UAASskB,MAAO,CAAEtjB,MAAO,aACxD0B,EAAS,GAAQ,CAAEkW,OAAQ,CAAE8U,KAAMsqH,EAAQrqH,KAAM0uK,GAAer8L,YAGtE,OAFAq8L,EAAY/6K,UACZthB,EAAQi4I,8BAA8BD,GAC/Bt1I,EAGX,GAAgB,cAAZV,EAAEhB,MAAuB,CACzB,MAAMk3I,EAAW,GAAK,CAAEt/H,OAAQ,CAAEqB,MAAOjY,GAAKhC,YACxC0C,EAAS,EAAK,CAAEkW,OAAQ,CAAE5W,EAAGk2I,GAAYl4I,UAASskB,MAAO,CAAEtjB,WAEjE,OADAhB,EAAQi4I,8BAA8BC,GAC/Bx1I,EAEX,IAAK,GAAqBV,EAAEhB,MAAOA,GAAQ,CAGvC,MAAM0B,EAAS,GAAS,CAAEkW,OAAQ,CAAE5W,KAAKhC,YACzC,MAAO,CAAEK,OAAQqC,EAAOrC,OAAQU,MAAO2B,EAAO3B,MAAOC,SAEzD,GAAc,UAAVA,EACA,OCpCD,SAAaiZ,EAAOja,GACvB,MAAMmvK,EAAU,IAAI8a,GAAehwK,EAAMlZ,MAF9B,yBAGLmY,EAASlZ,EAAQ2rL,gBAAgBxc,EAAS,CAACl1J,GAAQ,SACzD,MAAO,CAAE5Z,OAAQ6Y,EAAO7Y,OAAQU,MAAOmY,EAAOnY,MAAOC,MAAOkY,EAAOlY,ODiCxD,CAAIgB,EAAGhC,GAElB,GAAc,SAAVgB,EAAkB,CAClB,MAAM+2I,EAAkB/3I,EAAQ41I,eAAe,GAAI,OAAQ,GAA4B,OAAQ,IAEzFlzI,EAAS,GAAS,CAAEkW,OADL,CAAEtW,EAAGN,EAAGO,EAAGw1I,GACgB/3I,YAEhD,OADAA,EAAQi4I,8BAA8BF,GAC/Br1I,EAEX,MAAM,IAAItB,MAAM,iCAAiCY,EAAEhB,YAAYA,OE5C7Ds7L,GAAO,kBACA,GAAO,GAAgB,CAAEpS,UAAWoS,GAAMzJ,gBAAiByJ,GAAMxJ,cAAejO,KAChF,GAAa,CACtB1jL,WAAY0M,GACZ6I,YAAa,QACb0O,WAAY,ICRT,MAAMm3K,GACT,YAAYhyI,GACRhvD,KAAKo6C,cAAgB,CAAC,KACtBp6C,KAAKinD,YAAc+H,EACnBhvD,KAAK85K,SAAW,yRAepB,mBAAmBtzK,EAAKE,GACpB,MAAO,CAACslL,EAAOoI,KACQ,MAAfp0L,KAAKihM,SACLjhM,KAAKihM,OAASjV,EAAMiU,0BAA0B7L,EAAc,UAC5Dp0L,KAAKkhM,OAASlV,EAAMiU,0BAA0B7L,EAAc,WAEhEpI,EAAMlc,GAAG8kB,UAAU50L,KAAKihM,OAAQz6L,GAChCwlL,EAAMlc,GAAG8kB,UAAU50L,KAAKkhM,OAAQx6L,KC1BrC,MAAMy6L,GACT,YAAYnyI,GACRhvD,KAAKo6C,cAAgB,CAAC,KACtBp6C,KAAKw5K,cAAe,EACpBx5K,KAAKy5K,cAAe,EACpBz5K,KAAKinD,YAAc+H,EACnBhvD,KAAK85K,SAAW,2SAgBpB,mBAAmBtzK,EAAKE,GACpB,MAAO,CAACslL,EAAOoI,KACQ,MAAfp0L,KAAKihM,SACLjhM,KAAKihM,OAASjV,EAAMiU,0BAA0B7L,EAAc,UAC5Dp0L,KAAKkhM,OAASlV,EAAMiU,0BAA0B7L,EAAc,WAEhEpI,EAAMlc,GAAG8kB,UAAU50L,KAAKihM,OAAQz6L,GAChCwlL,EAAMlc,GAAG8kB,UAAU50L,KAAKkhM,OAAQx6L,KCZrC,MAAM06L,GAAoB,CAC7Bx7L,WAAY2M,GACZ4I,YAAa,QACb0O,WAjBG,SAAqB5pB,GACxB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,EAAEwG,GAAM4W,GACR,aAAEmoC,EAAY,aAAEC,GAAiB18B,EACvC,IAAI6qJ,EAEAA,EADA,KAAMh4J,QAAQ,mBACJ,IAAIulL,GAAkB16L,EAAEjB,OAGxB,IAAIw7L,GAAYv6L,EAAEjB,OAEhC,MAAMytL,EAAcrf,EAAQ4sB,mBAAmBh7I,EAAcC,GAC7D,OAAOhhD,EAAQ2rL,gBAAgBxc,EAAS,CAACntK,GAAIA,EAAEhB,MAAOwtL,KCfnD,MAAMoO,GACT,YAAY77L,GACRxF,KAAKo6C,cAAgB,CAAC,OAAQ,QAC9Bp6C,KAAKinD,YAAczhD,EACnBxF,KAAK85K,SAAW,scCCxB,SAASwnB,GAA+BC,EAAeC,GACnD,MAAO,CACH18L,OAAQ08L,EAAY18L,OACpBW,MAAO+7L,EAAY/7L,MACnBD,MAAO+7L,EAAc/7L,OActB,MAAM,GAAmB,CAC5BI,WAAY6M,GACZ0I,YAAa,QACb0O,WAdG,SAAoB5pB,GACvB,MAAM,OAAEod,EAAM,QAAE5Y,GAAYxE,GACtB,EAAEwG,GAAM4W,EACRwhI,EAAQp6I,EAAQykL,QAAQxnL,IAAI+E,EAAE3B,QAC9B8uK,EAAU,IAAIytB,GAAkB56L,EAAEjB,OAClCi8L,EAAgB,CAClBH,GAA+B76L,EAAGo4I,EAAM9E,mBAAmB5nH,MAC3DmvK,GAA+B76L,EAAGo4I,EAAM9E,mBAAmB3nH,OAE/D,OAAO3tB,EAAQ2rL,gBAAgBxc,EAAS6tB,EAAeA,EAAc,GAAGh8L,SCpBrE,MAAMi8L,GAET,YAAY/qH,GACR32E,KAAKinD,YAAc,GACnBjnD,KAAKinD,YAAc,GAA6B0vB,EAAQ,GACxD32E,KAAKo6C,cAAgBu8B,EAAOvsE,KAAI,CAAC2hB,EAAGrtB,IAAM,IAAIA,MAC9C,MAAMijM,EAAU,IAAI/iM,MAAM+3E,EAAOl4E,OAAS,GAC1CkjM,EAAQ,GAAKhrH,EAAO,GAAG,GACvB,IAAK,IAAIj4E,EAAI,EAAGA,EAAIijM,EAAQljM,OAAQC,IAChCijM,EAAQjjM,GAAKijM,EAAQjjM,EAAI,GAAKi4E,EAAOj4E,GAAG,GAE5C,MAAM+9L,EAAW,CAAC,YAAYkF,EAAQ,iCACtC,IAAK,IAAIjjM,EAAI,EAAGA,EAAIijM,EAAQljM,OAAQC,IAAK,CACrC,MAAM0kI,EAAQu+D,EAAQjjM,EAAI,GAC1B+9L,EAASt5L,KAAK,iBAAiBw+L,EAAQjjM,qBAClBA,YAAY0kI,QAErC,MAAMw+D,EAAYD,EAAQljM,OACpBojM,EAAYF,EAAQA,EAAQljM,OAAS,GAC3Cg+L,EAASt5L,KAAK,sBAAsBy+L,YAAoBC,QACxD7hM,KAAK85K,SAAW,uIAMd2iB,EAASzsL,KAAK,gCCxBjB,MAAM8xL,GACT,YAAYnrH,EAAQzsE,GAChBlK,KAAKw5K,cAAe,EACpBx5K,KAAKy5K,cAAe,EACpBz5K,KAAKinD,YAAc,GACnBjnD,KAAKinD,YAAc,GAA6B0vB,EAAQzsE,GACxD,MAAM1E,EAAQxF,KAAKinD,YACb98C,EAAO3E,EAAM/G,OACbgH,EAAQk/K,GAAkBx6K,GAC1B21J,EAASqrB,GAAY,SAAUhhL,GAC/ByzJ,EAAW,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,KAAKv5J,MAAM,EAAG8F,GACzDnK,KAAKo6C,cAAgBu8B,EAAOvsE,KAAI,CAAC2hB,EAAGrtB,IAAM,IAAIA,MAC9C,MAAMijM,EAAU,IAAI/iM,MAAM+3E,EAAOl4E,OAAS,GAC1CkjM,EAAQ,GAAKhrH,EAAO,GAAGzsE,GACvB,IAAK,IAAIxL,EAAI,EAAGA,EAAIijM,EAAQljM,OAAQC,IAChCijM,EAAQjjM,GAAKijM,EAAQjjM,EAAI,GAAKi4E,EAAOj4E,GAAGwL,GAE5C,MAAMohC,EAAUsyH,EAAS1zJ,GACnB63L,EAAenkC,EAASv5J,OAAO,GAC/B29L,EAAcpkC,EAAS5tJ,OAC7B,IAAIiyL,EAAkB,OAAO32J,OAAaq2J,EAAQ,wDAEtCK,YAAsBD,EAAa/xL,uBAE/C,IAAK,IAAItR,EAAI,EAAGA,EAAIijM,EAAQljM,OAAQC,IAAK,CACrC,MAAM0kI,EAAQu+D,EAAQjjM,EAAI,GAK1BujM,GAAmB,iBACjB32J,OAAaq2J,EAAQjjM,UAAU4sC,QAAcq2J,EAAQjjM,EAAI,wDAErDA,KAAKwjM,GAAgBtkC,EAAUtyH,EAAS83F,0BACvC8+D,GAAgBH,EAAcz2J,EAAS83F,mBAGlD,MAAMw+D,EAAYD,EAAQljM,OACpB2kI,EAAQu+D,EAAQA,EAAQljM,OAAS,GACvCwjM,GAAmB,+CAEXL,KAAaM,GAAgBtkC,EAAUtyH,EAAS83F,wBAC/C8+D,GAAgBH,EAAcz2J,EAAS83F,QAChDpjI,KAAK85K,SAAW,0BACDlc,EAASxzJ,KAAI3D,GAAK,OAASA,mBACxCw7L,8CAIAx8L,sEAC4Bq6J,+BAE5BA,EAAO31J,EAAO,QAAQ21J,EAAO31J,EAAO,wBAChC21J,EAAO31J,EAAO,QAAQ3E,EAAM2E,EAAO,wCACjB21J,6BAGtBA,EAAO31J,EAAO,QAAQ21J,EAAO31J,EAAO,wBAChC21J,EAAO31J,EAAO,QAAQ3E,EAAM2E,EAAO,wCACjB21J,6BAGtBA,EAAO31J,EAAO,QAAQ21J,EAAO31J,EAAO,wBAChC21J,EAAO31J,EAAO,QAAQ3E,EAAM2E,EAAO,sBACnC21J,EAAO31J,EAAO,QAAQ3E,EAAM2E,EAAO,wCACjB21J,6DAkBhC,SAASoiC,GAAgBtkC,EAAUtyH,EAAS83F,GACxC,MAAM++D,EAAavkC,EAASvsI,QAAQia,GASpC,OARYsyH,EAASxzJ,KAAI,CAAC+C,EAAGo+G,IACrBA,IAAQ42E,EACD,GAAGh1L,OAAOi2H,IAGVj2H,IAGJ6C,OC9FR,SAAS,GAAK/P,GACjB,MAAM,OAAEod,EAAM,QAAE5Y,GAAYxE,GACtB,MAAEye,GAAUrB,EAElB,OAAO,GAAS,CAAEA,OAAQ,CAAE5W,EADVhC,EAAQykL,QAAQxnL,IAAIgd,EAAM5Z,QACHi1I,mBAAmB3nH,MAAQ3tB,YAEjE,MAAM,GAAa,CACtBmB,WAAYuP,GACZgG,YAAa,QACb0O,WAAY,ICHT,SAAS,GAAWxM,EAAQnT,EAAMzF,GACrC,MAAMgB,EAAQ4X,EAAO,GAAG5X,MACxB,GAAc,cAAVA,EAAuB,CACvB,MAAMilJ,EAAQrtI,EAAOjT,KAAKyF,GAAM,GAAK,CAAEwN,OAAQ,CAAEqB,MAAO7O,GAAKpL,cACvDkmJ,EAAQttI,EAAOjT,KAAKyF,GAAM,GAAK,CAAEwN,OAAQ,CAAEqB,MAAO7O,GAAKpL,cACvDmmJ,EAAe,GAAWF,EAAOxgJ,EAAMzF,GACvComJ,EAAe,GAAWF,EAAOzgJ,EAAMzF,GACvC0C,EAAS,GAAQ,CAAEkW,OAAQ,CAAE8U,KAAMy4H,EAAcx4H,KAAMy4H,GAAgBpmJ,YAK7E,OAJAimJ,EAAM1+I,SAAQ/E,GAAKxC,EAAQi4I,8BAA8Bz1I,KACzD0jJ,EAAM3+I,SAAQtN,GAAK+F,EAAQi4I,8BAA8Bh+I,KACzD+F,EAAQi4I,8BAA8BkO,GACtCnmJ,EAAQi4I,8BAA8BmO,GAC/B1jJ,EAEX,IAAIi7L,EAAW39L,EAAQguL,mBAAmBp1K,GAU1C,GAHc,WAAV5X,IACA28L,GAAW,GAEXA,EAAU,CAQV,MAAMC,EAAYhlL,EAAOjT,KAAIyF,IACzB,MAAMk7I,EAAY,GAAmBl7I,EAAErK,MAAMnB,MAAM6F,IAEnD,OAAO,GAAQ,CAAEmT,OAAQ,CAAE5W,EAAGoJ,GAAKpL,UAASskB,MAAO,CAAEvjB,MADvC,EAAE,EAAGulJ,SAGjBC,EAAkBq3C,EAAUj4L,KAAIyF,IAC3B,CAAExE,KAAM5G,EAAQod,SAAShS,EAAE/K,QAASU,MAAOqK,EAAErK,UAGlD4rC,EAAW,GAA6BixJ,EAAUj4L,KAAIyF,GAAKA,EAAErK,QAAQ,GACrE0kJ,EAAyC,IAA1Bm4C,EAAU,GAAG78L,MAAM,GAClCm1I,EAAU4uC,GAAcv+B,EAAiB55G,EAAU3rC,EAAOykJ,GAC1De,EAAgB,GAA6B5tI,EAAOjT,KAAIyF,GAAKA,EAAErK,QAAQ0E,GACvEggB,EAAUzlB,EAAQ41I,eAAe4Q,EAAexlJ,EAAOk1I,GAE7D,OADA0nD,EAAUr2L,SAAQ6D,GAAKpL,EAAQi4I,8BAA8B7sI,KACtDqa,EAEX,GAAI7M,EAAO5e,OAAS,KAAMszK,UAAU,gCAAiC,CACjE,MAAM6qB,EAAW12L,KAAK8H,MAAMqP,EAAO5e,OAAS,GACtCo+L,EAAW,GAAWx/K,EAAOhZ,MAAM,EAAGu4L,GAAW1yL,EAAMzF,GACvDq4L,EAAY,GAAWz/K,EAAOhZ,MAAMu4L,GAAW1yL,EAAMzF,GACrD0C,EAAS,GAAW,CAAC01L,EAAUC,GAAY5yL,EAAMzF,GAGvD,OAFAA,EAAQi4I,8BAA8BmgD,GACtCp4L,EAAQi4I,8BAA8BogD,GAC/B31L,EAEX,GAAI,KAAMyU,QAAQ,gCACdyB,EAAO,GAAG7X,MAAM/G,OAAS,EAAG,CAC5B,MAAMm1K,EAAU,IAAIkuB,GAAoBzkL,EAAOjT,KAAIyF,GAAKA,EAAErK,QAAQ0E,GAClE,OAAOzF,EAAQ2rL,gBAAgBxc,EAASv2J,EAAQ5X,GAEpD,MAAM,UAAE48L,EAAS,SAAEjxJ,GAQvB,SAA0B/zB,EAAQnT,EAAMzF,GAQpC,MAAM2sC,EAAW,GAA6B/zB,EAAOjT,KAAIyF,GAAKA,EAAErK,QAAQ0E,GAMxE,MAAO,CAAEm4L,UALShlL,EAAOjT,KAAI3D,GAAK,GAAQ,CACtC4W,OAAQ,CAAE5W,KACVsiB,MAAO,CAAEvjB,MAAO,EAAE,EAAG,GAAmBiB,EAAEjB,MAAMnB,MAAM6F,MACtDzF,cAEgB2sC,YAtBYkxJ,CAAiBjlL,EAAQnT,EAAMzF,GACzDmvK,EAAU,IAAI8tB,GAAcW,EAAUj4L,KAAIyF,GAAKA,EAAErK,SACjD2B,EAAS1C,EAAQ2rL,gBAAgBxc,EAASyuB,EAAW58L,GAC3D48L,EAAUr2L,SAAQ/E,GAAKxC,EAAQi4I,8BAA8Bz1I,KAC7D,MAAM66I,EAAiB,GAAQ,CAAEzkI,OAAQ,CAAE5W,EAAGU,GAAU4hB,MAAO,CAAEvjB,MAAO4rC,GAAY3sC,YAEpF,OADAA,EAAQi4I,8BAA8Bv1I,GAC/B26I,EC1EJ,SAAS,GAAO7hJ,GACnB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,KAAEiK,GAAS6e,EACXs0D,EAAQ,GAAoBnzE,EAAMmT,EAAO,GAAG7X,OAAO,GACnD4rC,EAAW,GAA6B/zB,EAAOjT,KAAIyF,GAAKA,EAAErK,QAAQ63E,GACxE,GAAqC,IAAjC,GAAmBjsC,GACnB,OAAO3sC,EAAQ41I,eAAejpG,EAAU/zB,EAAO,GAAG5X,MAAO,IAG7D,MAAMglJ,EAAUptI,EAAOyO,QAAOjc,GAAK,GAAmBA,EAAErK,OAAS,IACjE,OAAuB,IAAnBilJ,EAAQhsJ,OACD,GAAS,CAAE4e,OAAQ,CAAE5W,EAAGgkJ,EAAQ,IAAMhmJ,aAGjD,GADegmJ,EAAQrgJ,KAAIyF,GAAKA,EAAErK,QACU63E,GACrC,GAAWotE,EAASptE,EAAO54E,IAE/B,MAAM,GAAe,CACxBmB,WAAY8M,GACZyI,YAAa,QACb0O,WAAY,ICvBT,MAAM04K,GACT,YAAYluI,EAAUikI,GAAU,EAAOr1H,EAAa,KAAM24H,GAA4B,EAAOC,GAAoB,GAC7G77L,KAAKo6C,cAAgB,CAAC,IAAK,KAC3Bp6C,KAAKinD,YAAcoN,EAASjjB,SAC5B,MAAM0xG,EAASzuF,EAAShV,QAAQG,IAC1BujG,EAAU1uF,EAAShV,QAAQK,KAC3BZ,EAAeuV,EAASvV,aACxBC,EAAcsV,EAAStV,YACvBC,EAAiBqV,EAASrV,eAC1BC,EAAgBoV,EAASpV,cACzBjB,EAAeqW,EAASrW,aACxBC,EAAcoW,EAASpW,YACvBukJ,EAA8D,EAAtCt8L,KAAK8H,MAAMqmD,EAASzV,WAAa,GACzD6jJ,EAA0BpuI,EAASzV,WAAa,EAChDwsG,EAAyC,iBAAxB/2F,EAAS5W,WAC1BilJ,EAASt3C,EAAiB,EAAI,EAC9Bu3C,EAASv3C,EAAiB,EAAI,EAC9Bw3C,EAAax3C,EAAiB,EAAI,EACxC,IAAI0tC,EAAoB,GAAIC,EAAyB,GACjD91H,IAEI61H,EADA8C,EACoB,uGAExB34H,eAGS44H,EACe,+FAExB54H,eAIwB,wDAEtBA,2BAIF81H,EAAyB,gCAE7B,MAAMC,EAAiBV,EAAU,kCAAoC,GACjEA,GACAt4L,KAAKo6C,cAAcj3C,KAAK,QAExBy4L,GACA57L,KAAKo6C,cAAcj3C,KAAK,0BAExB04L,GACA77L,KAAKo6C,cAAcj3C,KAAK,kBAE5BnD,KAAK85K,SAAW,WAChBgf,0CAE4Bh6I,MAAiBC,uCACpB+jG,MAAWC,kIAKlB6/C,8DAGCF,cAAmBC,oTAOd3kJ,kDACKgB,uCAELqV,EAAS3V,sFAIPT,oDACKgB,yCAELoV,EAAS1V,2FAIP6jJ,mQAQhBp3C,mqBAmB0B,IAA5Bq3C,6BAEEr3C,6EAEsBo3C,0CACPA,gGAGDA,kDACCA,sDAGkB,IAA5BC,0EAEMD,yCACAA,qDAGXp3C,qFAEoBo3C,8CACAA,8KAKRA,8CACAA,oIAKqB,IAA5BC,0EAEMD,yCACAA,6CACAA,qDAGXp3C,qFAEoBo3C,8CACAA,kDACAA,8KAKRA,8CACAA,kDACAA,+LAUtBxJ,cACAD,gDAMH,MAAM8J,GACT,YAAYxuI,GACRr0D,KAAKo6C,cAAgB,CAAC,IAAK,KAC3Bp6C,KAAKinD,YAAcoN,EAASjjB,SAC5B,MAAMuzG,EAAWtwF,EAAShV,QAAQqB,MAC5BoiG,EAASzuF,EAAShV,QAAQG,IAC1BujG,EAAU1uF,EAAShV,QAAQK,KAC3BY,EAAc+T,EAAS/T,YACvBxB,EAAeuV,EAASvV,aACxBC,EAAcsV,EAAStV,YACvBwB,EAAgB8T,EAAS9T,cACzBvB,EAAiBqV,EAASrV,eAC1BC,EAAgBoV,EAASpV,cACzBb,EAAciW,EAASjW,YACvBJ,EAAeqW,EAASrW,aACxBC,EAAcoW,EAASpW,YACvBukJ,EAA8D,EAAtCt8L,KAAK8H,MAAMqmD,EAASzV,WAAa,GACzD6jJ,EAA0BpuI,EAASzV,WAAa,EACtD5+C,KAAK85K,SAAW,uCACYx5H,MAAgBxB,MAAiBC,uCACpC4lG,MAAa7B,MAAWC,ijBAgBzB3kG,kDACKmC,uCAEL8T,EAAShU,qFAIPrC,oDACKgB,yCAELqV,EAAS3V,4FAIPT,sDACKgB,2CAELoV,EAAS1V,iGAIP6jJ,0mBAiBU,IAA5BC,+EAEwBD,4CACPA,qCACkB,IAA5BC,yFAEiBD,kDACAA,wGAGPA,+CACAA,+GAGkB,IAA5BC,yFAEiBD,kDACAA,sDACAA,wGAGPA,+CACAA,mDACAA,yLClR9B,MAAMM,GACT,YAAY77I,EAAatoC,EAAY01C,GACjCr0D,KAAKo6C,cAAgB,CAAC,KACtBp6C,KAAKw5K,cAAe,EACpBx5K,KAAKy5K,cAAe,EACpBz5K,KAAKinD,YAAcA,EACnB,MAAM,YAAEhJ,EAAW,WAAEW,EAAU,YAAEG,EAAW,aAAED,EAAY,QAAEO,EAAO,SAAEE,EAAQ,cAAEN,EAAa,eAAED,EAAc,WAAEvB,GAAe4W,GACvH,KAAE3U,EAAI,IAAEF,GAAQH,EAChB0jJ,EAAmBnkJ,EAAaX,EAChC47H,EAAO7B,KACP5sB,EAAgC,iBAAf3tG,EACjBilJ,EAASt3C,EAAiB,EAAI,EAC9Bu3C,EAASv3C,EAAiB,EAAI,EACpC,IAAI43C,EAAW,GACf,IAAK,IAAI3jL,EAAM,EAAGA,GAAO,EAAGA,IACxB,IAAK,IAAIirI,EAAM,EAAGA,GAAO,EAAGA,IACxB04C,GAAY,mCACI14C,8BACPjrI,mCAEG4nC,EAAY,eAAeA,EAAY,kDACzB1H,SAAgBT,OAAkBU,kCAC/CR,cAA2B+jJ,8BAElCpkL,EAAW+jL,0EAEoBnjJ,SAAgBR,QAAkBW,sCACxDT,4BAAwC8jJ,SAAwBnkJ,kCAEvEjgC,EAAWgkL,gEAEQ/jJ,gCAErBwsG,+EAEW,EAAN/rI,EAAUirI,yNAKJ,EAANjrI,EAAUirI,iMAU7BtqJ,KAAK85K,SAAW,oMASdkpB,gBAEAnpB,EAAKl8J,mCCnDR,SAASslL,IAAe,EAAEx8L,EAAC,OAAEqlB,EAAM,SAAEuoC,EAAQ,QAAE5vD,EAAO,KAAE0oD,EAAO,KAAI,uBAAEmW,EAAyB,KAAI,eAAEC,EAAiB,EAAC,WAAEN,EAAa,OAGxI,MAAMryB,EAASnqC,EAAEjB,MACX+zL,EAAW90L,EAAQykL,QAAQxnL,IAAI+E,EAAE3B,QACjCo+L,EAAkB7uI,EAASzV,WAC3BukJ,EAAcvyJ,EAAO,GAAKA,EAAO,GAAKA,EAAO,GAC7CwyJ,EAAmB/uI,EAASjU,YAC5BgrG,EAAyC,iBAAxB/2F,EAAS5W,WAGhC,IAAI3zB,EACJ,MAAMg3H,EAAgB,GAGhBuiD,GAA6C,IAAhBF,GAA0C,IAArBC,IACpDF,ErDjBmC,IqDkBjCI,EAAyB1yJ,EAAO,GAAK,GAAM,KAAO2oJ,EAASxT,SACjE,IAAIsd,GAA8B,KAAMznL,QAAQ,wBAC3C,KAAMA,QAAQ,iCACd0nL,EA6BA,CASD,MAAMx7E,EAAcsjC,EAChBx6G,EAAO,GAAKA,EAAO,IAAMA,EAAO,GAAK,GACrCA,EAAO,GAAKA,EAAO,IAAMA,EAAO,GAAK,GACnCk4G,EAAY,CACdhkJ,OAAQ2B,EAAE3B,OACVU,MAAO,CAAC,EAAGsiH,EAAazzD,EAASzV,YACjCn5C,MAAOgB,EAAEhB,OAUP89L,EAAwBhK,EAAS/zL,MACvC+zL,EAAS/zL,MAAQ+zL,EAAS/zL,MAAMnB,QAChCk1L,EAAS/zL,MAAM+zL,EAAS/zL,MAAM/G,OAAS,KACvC,EAAY,GAAyB86L,EAAS/zL,MAAOsjJ,EAAUtjJ,QAAQ,IAAM,kBAAkB+zL,EAAS/zL,YAAYsjJ,EAAUtjJ,qBAC9H,MAAMg+L,EAAiB,GAAQ,CAC3BnmL,OAAQ,CAAE5W,EAAGqlB,GACbrnB,UACAskB,MAAO,CAAEvjB,MAAO,CAAC,EAAG6uD,EAASzV,WAAYyV,EAASjU,gBAEtD0gG,EAAc39I,KAAKqgM,GACnB,MAAMC,EAAgBhI,GAAgB,CAClC10L,EAAG+hJ,EACH9hJ,EAAGw8L,EACH/+L,UACA6jC,YA/EW,EAgFXC,YA/EW,EAgFX4kB,OACA8V,aACAK,yBACAC,mBAEEmgI,EAAuBj/L,EAAQykL,QAAQxnL,IAAI+hM,EAAc3+L,QAC/D,EAAY4+L,EAAqB3d,UAAU,IAAM,gDAEjDwT,EAAS/zL,MAAQ+9L,EAGjBG,EAAqBl+L,MAAQ6uD,EAASjjB,SACtCtnB,EAAM,GAAS,CAAEzM,OAAQ,CAAE5W,EAAGg9L,GAAiBh/L,YAC/CqlB,EAAItkB,MAAQ6uD,EAASjjB,SACrB0vG,EAAc39I,KAAKsgM,OApFM,CACzB,MAEM36C,EAAY,GAAQ,CACtBzrI,OAAQ,CAAE5W,KACVhC,UACAskB,MAAO,CAAEvjB,MAAO,CAAC,EALD4lJ,EAAiBx6G,EAAO,GAAKA,EAAO,GAAKA,EAAO,GAChEA,EAAO,GAAKA,EAAO,GAAKA,EAAO,GAIEyjB,EAASzV,eAExC4kJ,EAAiB,GAAQ,CAC3BnmL,OAAQ,CAAE5W,EAAGqlB,GACbrnB,UACAskB,MAAO,CAAEvjB,MAAO,CAAC,EAAG6uD,EAASzV,WAAYyV,EAASjU,gBAEhDj5C,EAASs0L,GAAgB,CAC3B10L,EAAG+hJ,EACH9hJ,EAAGw8L,EACHl7J,YA3BW,EA4BXC,YA3BW,EA4BX9jC,UACA0oD,OACA8V,aACAK,yBACAC,mBAEJz5C,EAAM,GAAQ,CAAEzM,OAAQ,CAAE5W,EAAGU,GAAU1C,UAASskB,MAAO,CAAEvjB,MAAO6uD,EAASjjB,YACzE0vG,EAAc39I,KAAK2lJ,GACnBhI,EAAc39I,KAAKqgM,GACnB1iD,EAAc39I,KAAKgE,GA2DvB,IAAK,MAAMzI,KAAKoiJ,EACZr8I,EAAQi4I,8BAA8Bh+I,GAE1C,OAAOorB,EAIJ,SAAS65K,IAAiB,EAAEl9L,EAAC,OAAEqlB,EAAM,SAAEuoC,EAAQ,QAAE5vD,EAAO,KAAE0oD,EAAO,KAAI,uBAAEmW,EAAyB,KAAI,eAAEC,EAAiB,EAAC,WAAEN,EAAa,OAO1I,MAAM,YAAEhlB,EAAW,aAAED,EAAY,WAAEY,EAAU,SAAEW,EAAQ,UAAED,EAAS,WAAE7B,GAAe4W,EAC7E+2F,EAAgC,iBAAf3tG,EACjB0hG,EAAYlhG,EAAcD,EAAeY,EACzC3/B,EAAUqgC,EAAYC,EACtBqkJ,EAAa,CAACzkD,EAAWlgI,GAGzB6hI,EAAgB,GAChB+iD,EAAY,GAAQ,CAAExmL,OAAQ,CAAE5W,KAAKhC,UAASskB,MAAO,CAAEvjB,MAAOiB,EAAEjB,MAAMnB,MAAM,MAC5Ey/L,EAAQ,GAAQ,CAClBzmL,OAAQ,CAAE5W,EAAGqlB,GACbrnB,UACAskB,MAAO,CAAEvjB,MAAO,CAAC,EAAG25I,EAAW,GAAmBrzH,EAAOtmB,OAAS25I,MAEtE2B,EAAc39I,KAAK0gM,GACnB/iD,EAAc39I,KAAK2gM,GACnB,MAAMC,EAAgB,IAAIjB,GAAoBc,EAAYC,EAAUr+L,MAAO6uD,GACrE2vI,EAASv/L,EAAQ2rL,gBAAgB2T,EAAe,CAACF,GAAY,WAC7DI,EAAiB,GAAQ,CAC3B5mL,OAAQ,CAAE5W,GACVhC,UACAskB,MAAO,CAAEvjB,MAAO,CAAC,EAAGo+L,EAAW,GAAIA,EAAW,OAElD9iD,EAAc39I,KAAK6gM,GACnBljD,EAAc39I,KAAK8gM,GACnB,MAAMtI,EAAkB,MAARxuI,EACVyuI,EAAsD,MAA1Bt4H,EAC5Bu4H,EAAmC,cAAf54H,EACpB64H,EAAkB74H,EAAai1H,GAA6Bj1H,GAAY,GAAQ,KAChFihI,EAAgB,IAAI7L,GAAoB4L,EAAez+L,MAAOs+L,EAAMt+L,MAAO,CAAC,EAAGyZ,EAASo1C,EAASjU,cAxBpF,GACA,EAuB0Hu7I,EAASG,EAAiBF,EAA2BC,GAC5Lx+K,EAAS,CAAC4mL,EAAgBH,GAOhC,GANI32I,GACA9vC,EAAOla,KAAKgqD,GAEZyuI,GACAv+K,EAAOla,KAAKmgE,GAEZu4H,EAAmB,CACnB,MAAMO,EAAkB33L,EAAQ41I,eAAe,GAAI,UAAW,GAAuB92E,EAAgB,YACrGlmD,EAAOla,KAAKi5L,GACZt7C,EAAc39I,KAAKi5L,GAEvB,MAAMpsK,EAAUvrB,EAAQ2rL,gBAAgB8T,EAAe7mL,EAAQ,WAIzDyM,EAAM,GAAQ,CAAEzM,OAAQ,CAAE5W,EAAGupB,GAAWvrB,UAASskB,MAAO,CAAEvjB,MAH/C4lJ,EACb,CAAC,EAAG9rG,EAAWC,EAAU8U,EAASjU,aAClC,CAAC,EAAGiU,EAASjU,YAAad,EAAWC,MAEzCuhG,EAAc39I,KAAK6sB,GACnB,IAAK,MAAMtxB,KAAKoiJ,EACZr8I,EAAQi4I,8BAA8Bh+I,GAE1C,OAAOorB,EC1JJ,MAAM,GAAe,CACxBlkB,WAAY+M,GACZwI,YAAa,QACb0O,WA3BG,SAAgB5pB,GACnB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,EAAEwG,EAAC,OAAEqlB,GAAWzO,GAChB,QAAE3Q,EAAO,IAAEkT,EAAG,WAAE69B,EAAU,UAAEC,EAAS,gBAAEmE,GAAoB94B,EAC3Du1B,EAAc,GAAqCb,GACnD4W,EAAW,GAA+B5tD,EAAEjB,MAAOsmB,EAAOtmB,MAAOkH,EAASgxC,EAAW99B,EAAKiiC,GAAiB,EAAuBvD,GACxI,IAAIx0B,EACJ,GAA8B,IAA1BuqC,EAASrW,cAA+C,IAAzBqW,EAASpW,aACZ,IAA5BoW,EAASrV,gBAAmD,IAA3BqV,EAASpV,eAChB,IAA1BoV,EAASvV,cAA+C,IAAzBuV,EAAStV,aACb,SAA1BsV,EAAShV,QAAQ57B,MAA6C,UAA1B4wC,EAAShV,QAAQ57B,KAGrD,GAAI,KAAM7H,QAAQ,sBAAuC,IAAfnV,EAAEjB,MAAM,GACnDskB,EAAM65K,GAAiB,CAAEl9L,IAAGqlB,SAAQuoC,WAAU5vD,gBAE7C,CACD,MAAMmvK,EAAU,IAAI2uB,GAAcluI,GAClCvqC,EAAMrlB,EAAQ2rL,gBAAgBxc,EAAS,CAACntK,EAAGqlB,GAAS,gBAPpDhC,EAAMm5K,GAAe,CAAEx8L,IAAGqlB,SAAQuoC,WAAU5vD,YAShD,MAAM43L,EAAc,GAAQ,CAAEh/K,OAAQ,CAAE5W,EAAGqjB,GAAOrlB,UAASskB,MAAO,CAAEvjB,MAAO6uD,EAASjjB,YAEpF,OADA3sC,EAAQi4I,8BAA8B5yH,GAC/BuyK,IC1BJ,MAAM8H,GACT,YAAY9vI,GACRr0D,KAAKo6C,cAAgB,CAAC,IAAK,MAC3Bp6C,KAAKinD,YAAcoN,EAAS7W,YAC5B,MAAMsB,EAAeuV,EAASvV,aACxBC,EAAcsV,EAAStV,YACvB+jG,EAASzuF,EAAShV,QAAQG,IAC1BujG,EAAU1uF,EAAShV,QAAQK,KAC3B0rG,EAAyC,iBAAxB/2F,EAAS5W,WAChCz9C,KAAK85K,SAAW,uYAYMzlH,EAAS5V,sDACL4V,EAAS/U,sDACVR,OAAkBgkG,yCAEjBzuF,EAAS3V,4FAIP2V,EAAS9U,uDACVR,OAAiBgkG,2CAEhB1uF,EAAS1V,+EAIzBysG,8bAkBb,MAAMg5C,GACT,YAAY/vI,GACRr0D,KAAKo6C,cAAgB,CAAC,KAAM,KAC5Bp6C,KAAKinD,YAAcoN,EAASjb,QAC5B,MAAM4E,EAAeqW,EAASrW,aACxBC,EAAcoW,EAASpW,YACvBa,EAAeuV,EAASvV,aACxBC,EAAcsV,EAAStV,YACvBqsG,EAAyC,iBAAxB/2F,EAAS5W,WAC1BqlG,EAAS9kG,EAAe,EAAIqW,EAAShV,QAAQG,IAC7CujG,EAAU9kG,EAAc,EAAIoW,EAAShV,QAAQK,KAC7CgjJ,EAASt3C,EAAiB,EAAI,EAC9Bu3C,EAASv3C,EAAiB,EAAI,EAC9Bw3C,EAAax3C,EAAiB,EAAI,EACxCprJ,KAAK85K,SAAW,oCACSh3B,MAAWC,kIAKlB6/C,gDAEcF,cAAmBC,gTAO3B3kJ,6DACgBc,6CAEZuV,EAAS/U,oIAKpBtB,kDAESC,+DACgBc,+CAEZsV,EAAS9U,4JAMpBtB,oDAESoW,EAASjU,6CAEzBgrG,wdAkBb,MAAMi5C,GACT,YAAYhwI,GACRr0D,KAAKo6C,cAAgB,CAAC,IAAK,MAC3Bp6C,KAAKinD,YAAcoN,EAAS7W,YAC5B,MAAM8C,EAAc+T,EAAS/T,YACvBxB,EAAeuV,EAASvV,aACxBC,EAAcsV,EAAStV,YACvB4lG,EAAWtwF,EAAShV,QAAQqB,MAC5BoiG,EAASzuF,EAAShV,QAAQG,IAC1BujG,EAAU1uF,EAAShV,QAAQK,KACjC1/C,KAAK85K,SAAW,+QAWMzlH,EAAS5V,sDACL4V,EAAS5T,qDACVH,OAAiBqkG,yCAEhBtwF,EAAShU,2FAIPgU,EAAS/U,wDACVR,OAAkBgkG,2CAEjBzuF,EAAS3V,kGAIP2V,EAAS9U,yDACVR,OAAiBgkG,6CAEhB1uF,EAAS1V,wUAgBxC,MAAM2lJ,GACT,YAAYjwI,GACRr0D,KAAKo6C,cAAgB,CAAC,KAAM,KAC5Bp6C,KAAKinD,YAAcoN,EAASjb,QAC5B,MAAMgF,EAAciW,EAASjW,YACvBJ,EAAeqW,EAASrW,aACxBC,EAAcoW,EAASpW,YACvBqC,EAAc+T,EAAS/T,YACvBxB,EAAeuV,EAASvV,aACxBC,EAAcsV,EAAStV,YACvB4lG,EAAWvmG,EAAc,EAAIiW,EAAShV,QAAQqB,MAC9CoiG,EAAS9kG,EAAe,EAAIqW,EAAShV,QAAQG,IAC7CujG,EAAU9kG,EAAc,EAAIoW,EAAShV,QAAQK,KACnD1/C,KAAK85K,SAAW,oCACSn1B,MAAa7B,MAAWC,4XAczB3kG,6DACgBkC,6CAEZ+T,EAAS5T,mIAKpBrC,kDAESJ,+DACgBc,+CAEZuV,EAAS/U,2JAMpBtB,oDAESC,iEACgBc,iDAEZsV,EAAS9U,sKAMpBtB,sDAESoW,EAASjU,mTCpOxC,MAAM,GAA6B,CACtCx6C,WAAYgN,GACZuI,YAAa,QACb0O,WAZG,SAA8B5pB,GACjC,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,EAAEwG,EAAC,GAAEoiB,GAAOxL,GACZ,QAAE3Q,EAAO,IAAEkT,EAAG,WAAE69B,EAAU,gBAAEoE,EAAe,YAAErE,GAAgBz0B,EAC7Du1B,EAAc,GAAqCb,GACnD4W,EAAW,GAA+B5tD,EAAEjB,MAAOg4C,EAAa9wC,EAAS,EAAmBkT,EAAKiiC,GAAiB,EAAuBvD,GACzIs1H,EAAU,IAAIuwB,GAAuB9vI,GAC3C,OAAO5vD,EAAQ2rL,gBAAgBxc,EAAS,CAACntK,EAAGoiB,GAAK,aCExC,GAA4B,CACrCjjB,WAAYiN,GACZsI,YAAa,QACb0O,WAZG,SAA6B5pB,GAChC,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,GAAE4oB,EAAE,OAAEiD,GAAWzO,GACjB,WAAEsB,EAAU,QAAEjS,EAAO,IAAEkT,EAAG,WAAE69B,EAAU,gBAAEoE,GAAoB94B,EAC5Du1B,EAAc,GAAqCb,GACnD4W,EAAW,GAA+B11C,EAAYmN,EAAOtmB,MAAOkH,EAAS,EAAmBkT,EAAKiiC,GAAiB,EAAOvD,GAC7Hs1H,EAAU,IAAIwwB,GAAsB/vI,GAC1C,OAAO5vD,EAAQ2rL,gBAAgBxc,EAAS,CAAC/qJ,EAAIiD,GAAS,aCC7C,GAAe,CACxBlmB,WAAYkN,GACZqI,YAAa,QACb0O,WAXG,SAAgB5pB,GACnB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,EAAEwG,EAAC,OAAEqlB,GAAWzO,GAChB,QAAE3Q,EAAO,IAAEkT,EAAG,UAAE89B,GAAc30B,EAC9BsrC,EAAW,GAA+B5tD,EAAEjB,MAAOsmB,EAAOtmB,MAAOkH,EAASgxC,EAAW99B,GACrFg0J,EAAU,IAAIivB,GAAcxuI,GAClC,OAAO5vD,EAAQ2rL,gBAAgBxc,EAAS,CAACntK,EAAGqlB,GAAS,aCE5C,GAA+B,CACxClmB,WAAYmN,GACZoI,YAAa,QACb0O,WAXG,SAAgC5pB,GACnC,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,EAAEwG,EAAC,GAAEoiB,GAAOxL,GACZ,QAAE3Q,EAAO,IAAEkT,EAAG,YAAE49B,GAAgBz0B,EAChCsrC,EAAW,GAA+B5tD,EAAEjB,MAAOg4C,EAAa9wC,EAAS,EAAmBkT,GAC5Fg0J,EAAU,IAAIywB,GAAuBhwI,GAC3C,OAAO5vD,EAAQ2rL,gBAAgBxc,EAAS,CAACntK,EAAGoiB,GAAK,aCExC07K,GAA4B,CACrC3+L,WAAYoN,GACZmI,YAAa,QACb0O,WAXG,SAA6B5pB,GAChC,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,GAAE4oB,EAAE,OAAEiD,GAAWzO,GACjB,IAAEuC,EAAG,QAAElT,EAAO,WAAEiS,GAAeoK,EAC/BsrC,EAAW,GAA+B11C,EAAYmN,EAAOtmB,MAAOkH,EAAS,EAAmBkT,GAChGg0J,EAAU,IAAI0wB,GAAsBjwI,GAC1C,OAAO5vD,EAAQ2rL,gBAAgBxc,EAAS,CAAC/qJ,EAAIiD,GAAS,aCH7C,GAAM,GAAgB,CAAE6iK,UAHzB6V,gDAIC,GAAY,CACrB5+L,WAAYqN,GACZkI,YAAa,QACb0O,WAAY,ICHH,GAAO,GAAgB,CAAE8kK,UAJzB,kEAKA,GAAa,CACtB/oL,WAAYsN,GACZiI,YAAa,QACb0O,WAAY,ICVT,MAAM46K,GACT,YAAYC,EAAYC,EAAUr+H,EAAUngC,EAAQogC,GAChDvmE,KAAKo6C,cAAgB,CAAC,QAAS,QAAS,UACxCp6C,KAAKinD,YAAc,GACnB,MAAOsU,EAAO0b,EAAaC,EAAYtuC,GAAS87J,GACzC/9H,GAAag+H,GACbz0C,EAAYC,GAAa7pF,EAChCtmE,KAAKinD,YAAc,CAAC0f,EAAUupF,EAAYC,EAAWvnH,GACrD,MAAMg8J,EAAsB,aAAXz+J,EAAwB,EAAI,GACtC0+J,EAAkBC,GAAmB,CAAI7tH,EAAc,EAAjB,KAA2BC,EAAa,EAAhB,OAC9D6tH,EAAal0C,EAAayd,GAAOpe,EAAa,EACjD,CACI,IAAIj5E,EAAc,IAAMi5E,EAAa,GACrC,yBACA,MAAM20C,+BAEV,CACI,MACA,MACA,mBAAmBA,MAEpBG,EAAYl0C,EAAYud,GAAOle,EAAY,EAC9C,CACI,IAAIj5E,EAAa,IAAMi5E,EAAY,GACnC,wBACA,MAAM20C,8BAEV,CACI,MACA,MACA,mBAAmBA,KAK3B9kM,KAAK85K,SAAW,4CACiBirB,8CACDC,8cAgBPzpI,sEAIFs1F,mCACDC,8BAEPwd,wCACYu2B,oCACPt+H,4DAGL8nG,wCACYy2B,oCACPv+H,uGAKfq+H,umCCtEN,MAOM,GAAsB,CAC/Bh/L,WAAYwN,GACZ+H,YAAa,QACb0O,WAV0B5pB,IAC1B,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,MAAEi0B,EAAK,MAAEkyC,EAAK,OAAEC,GAAWhpD,GAC3B,SAAEipD,EAAQ,OAAEngC,EAAM,mBAAEogC,GAAuBx9C,EAC3C6qJ,EAAU,IAAI6wB,GAAqBvwK,EAAM1uB,MAAO4gE,EAAM5gE,MAAO8gE,EAAUngC,EAAQogC,GACrF,OAAO9hE,EAAQ2rL,gBAAgBxc,EAAS,CAAC1/I,EAAOkyC,EAAOC,GAAS,aCtB7D,MAAM4+H,GACT,YAAYz/L,EAAOwiD,EAAW9e,GAC1BlpC,KAAKo6C,cAAgB,CAAC,KACtBp6C,KAAKinD,YAAczhD,EACnB,MAAM2E,EAAO3E,EAAM/G,OACbmI,EAAMohD,EAAY,MAAQ,QAAQ,GAAU79C,EAAM,aAClD1L,EAAS+G,EAAMA,EAAM/G,OAAS,GACpC,IAAI0qD,EAAY,GACZ+7I,EAAY,GAIZl9I,GACAmB,EAAYjgB,EAAU,WAAUzqC,EAAS,GAAM,WAC/CymM,EAAYh8J,EAAU,UAAY,YAGlCigB,EAAYjgB,EAAU,gBAAgBzqC,IAAW,cACjDymM,EAAah8J,EAAU,aAAe,cAE1ClpC,KAAK85K,SAAW,8DAGd6K,GAAkBx6K,qDACRg7L,GAAch7L,EAAM,mCAClBvD,6DAERuiD,6BACQ+7I,iBACVC,GAAch7L,EAAM,2CACR,GAAUA,EAAM,iEAMpC,mBAAmBlE,GACf,MAAO,CAAC+lL,EAAOoI,KACO,MAAdp0L,KAAKiG,QACLjG,KAAKiG,MAAQ+lL,EAAMjL,mBAAmBqT,EAAc,UAExDpI,EAAMlc,GAAG8kB,UAAU50L,KAAKiG,MAAOA,KAI3C,SAAS,GAAUkE,EAAM7F,GACrB,GAAa,IAAT6F,EACA,MAAO,GAAG7F,IAET,GAAa,IAAT6F,EACL,MAAO,GAAG7F,QAAWA,MAEpB,GAAa,IAAT6F,EACL,MAAO,GAAG7F,QAAWA,QAAWA,MAE/B,GAAa,IAAT6F,EACL,MAAO,GAAG7F,QAAWA,QAAWA,QAAWA,MAG3C,MAAMuB,MAAM,2BAA2BsE,0BAG/C,SAASg7L,GAAch7L,EAAM7F,GACzB,GAAa,IAAT6F,EACA,MAAO,GAAG7F,IAET,GAAa,IAAT6F,EACL,MAAO,GAAG7F,MAET,GAAa,IAAT6F,EACL,MAAO,GAAG7F,MAET,GAAa,IAAT6F,EACL,MAAO,GAAG7F,MAGV,MAAMuB,MAAM,2BAA2BsE,0BCbxC,MAAM,GAAe,CACxBvE,WAAYuN,GACZgI,YAAa,QACb0O,WA/CG,SAAgB5pB,GACnB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,EAAEwG,GAAM4W,GACR,KAAEnT,EAAI,UAAE89C,EAAS,QAAE9e,GAAYngB,EAC/B0nB,EAAQhqC,EAAEjB,MAAM/G,OAChBu/E,EAAc,GAAgC,CAAC9zE,GAAOumC,GAC5D,IAAImkH,EAAYnuJ,EACG,MAAfu3E,IACA42E,EAAY,GAAU,CAAEv3I,OAAQ,CAAE5W,KAAKhC,UAASskB,MAAO,CAAEkgB,KAAM+0C,MAEnE,MAAMg0E,EAAe,GAA8B,EAAGvhH,GAAO,GAC7D,GAAIuhH,IAAiBvhH,EAAQ,EACzB,MAAM,IAAI5qC,MAAM,kDAAkDY,EAAEjB,MAAM/G,OAAS,kBAC/DyL,KAExB,MAAM/B,EAAOysJ,EAAUpvJ,MAAMwsJ,GAC7B,IAAI7qJ,EAAS,GAAS,CAAEkW,OAAQ,CAAE5W,EAAGmuJ,GAAanwJ,YAGlD,IAAK,IAAI/F,EAAI,EAAGA,GAAKwH,KAAK4C,KAAK5C,KAAKg2F,KAAK/zF,IAAS,EAAGzJ,IAAK,CACtD,MAAMk1K,EAAU,IAAIqxB,GAAcrwC,EAAUpvJ,OAAO,EAAO0jC,GACpD+pJ,EAAcrf,EAAQ4sB,mBAAmB9hM,GACzC0mM,EAAaj+L,EACnBA,EACI1C,EAAQ2rL,gBAAgBxc,EAAS,CAACzsK,GAASA,EAAO1B,MAAOwtL,GAC7DxuL,EAAQi4I,8BAA8B0oD,GAI1C,GAAIp9I,EAAW,CACX,MAAM4rH,EAAU,IAAIqxB,GAAcrwC,EAAUpvJ,MAAOwiD,EAAW9e,GACxDk8J,EAAaj+L,EACnBA,EAAS1C,EAAQ2rL,gBAAgBxc,EAAS,CAACzsK,GAASA,EAAO1B,OAC3DhB,EAAQi4I,8BAA8B0oD,GAE1C,GAAmB,MAAfpnH,EAAqB,CACrB,MACMq0E,EAA0B,GAAU,CAAEh1I,OAAQ,CAAE5W,EAAGU,GAAU1C,UAASskB,MAAO,CAAEkgB,KAD1D,GAAoC+0C,MAI/D,OAFAv5E,EAAQi4I,8BAA8Bv1I,GACtC1C,EAAQi4I,8BAA8BkY,GAC/BvC,EAEX,OAAOlrJ,ICzBE,GAAsB,CAC/BvB,WAAYyN,GACZ8H,YAAa,QACb0O,WAtBG,SAAuB5pB,GAC1B,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,EAAEwG,EAAC,QAAE45B,GAAYhjB,GACjB,KAAElV,EAAI,aAAEggD,GAAiBp/B,EAC/B,GAAuB,IAAnBtiB,EAAEjB,MAAM/G,OAAc,CACtB,MAAMq7D,EAAQr1D,EAAQod,SAASpb,EAAE3B,QAC3BmkJ,EAAcxkJ,EAAQod,SAASwe,EAAQv7B,QACvC61I,EAAUyuC,GAAgBtvH,EAAOmvF,EAAa5oH,EAAQ56B,MAAO46B,EAAQ76B,MAAO2C,GAClF,OAAO1D,EAAQ41I,eAAe,CAAClyI,GAAOk4B,EAAQ56B,MAAOk1I,GAEpD,GAAuB,IAAnBl0I,EAAEjB,MAAM/G,OAAc,CAC3B,MAAM8lJ,EAAO9/I,EAAQ2hJ,WAAW3/I,GAC1B6iJ,EAAa7kJ,EAAQ2hJ,WAAW/lH,GAChCghH,EAASgoC,GAAsB9kC,EAAM+E,EAAYnhJ,EAAMggD,GAC7D,OAAO1jD,EAAQ41I,eAAegH,EAAO77I,MAAO66B,EAAQ56B,MAAO47I,EAAO97I,QAEtE,MAAM,IAAIM,MACN,qEAAGY,EAAEjB,MAAM/G,aCnBZ,MAAM4mM,GACT,YAAYp+I,EAAaqB,EAAW7K,GAChCz9C,KAAKo6C,cAAgB,CAAC,KACtBp6C,KAAKinD,YAAc,GACnBjnD,KAAKinD,YAAcA,EACnBjnD,KAAKsoD,UAAYA,EACjBtoD,KAAKy9C,WAAaA,EAClBz9C,KAAK85K,SAAW,yGAIR95K,KAAKslM,0CACLtlM,KAAKulM,yCACLvlM,KAAKwlM,kDAEEl9I,oCACQA,6BACRA,oCACQA,yCACIA,4BACzBtoD,KAAKylM,iFAGQzlM,KAAK0lM,iEAKxB,uBACI,MAAwB,SAApB1lM,KAAKy9C,WACE,YAGA,YAGf,sBACI,MAAwB,SAApBz9C,KAAKy9C,WACE,YAGA,YAGf,sBACI,MAAwB,SAApBz9C,KAAKy9C,WACE,YAGA,YAGf,qBACI,MAAwB,SAApBz9C,KAAKy9C,WACEz9C,KAAKinD,YAAY,GAGjBjnD,KAAKinD,YAAY,GAGhC,yBACI,MAAwB,SAApBjnD,KAAKy9C,WACE,4BAGA,6BC7CZ,MAAM,GAAqB,CAC9B73C,WAAY0N,GACZ6H,YAAa,QACb0O,WArBG,SAAsB5pB,GACzB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,EAAEwG,GAAM4W,GACR,UAAEirC,EAAS,WAAE7K,GAAe10B,EAClC,EAAYu/B,EAAY,GAAG,IAAM,sDAAsDA,MACvF,MAAM7J,EAAYh4C,EAAEjB,MAAM,GACpB+iD,EAA8B,SAAf9K,EAAyBh3C,EAAEjB,MAAM,GAAKiB,EAAEjB,MAAM,GAC7DgjD,EAA6B,SAAf/K,EAAyBh3C,EAAEjB,MAAM,GAAKiB,EAAEjB,MAAM,GAC5DijD,EAA6B,SAAfhL,EAAyBh3C,EAAEjB,MAAM,GAAKiB,EAAEjB,MAAM,GAC5DgtJ,EAAejqG,EAAcD,EAC7BmqG,EAAcjqG,EAAaF,EAC3BoqG,EAAcjqG,GAAcH,EAAYA,GAIxCsrH,EAAU,IAAIyxB,GAHgB,SAAf5nJ,EACjB,CAACgB,EAAW+zG,EAAcC,EAAaC,GACvC,CAACj0G,EAAWi0G,EAAaF,EAAcC,GACUnqG,EAAW7K,GAChE,OAAOh5C,EAAQ2rL,gBAAgBxc,EAAS,CAACntK,GAAIA,EAAEhB,SClB5C,MAAMkgM,GACT,YAAYtxI,EAAUikI,GAAU,EAAOr1H,EAAa,KAAMs1H,GAAqB,EAAOqN,GAAoB,GACtG5lM,KAAKo6C,cAAgB,CAAC,IAAK,KAC3Bp6C,KAAKinD,YAAcoN,EAASjjB,SAC5B,MAAMy0J,EAAWxxI,EAAS3V,SACpBonJ,EAAWzxI,EAAS1V,QACpBmkG,EAASzuF,EAAShV,QAAQG,IAC1BujG,EAAU1uF,EAAShV,QAAQK,KAC3BZ,EAAeuV,EAASvV,aACxBC,EAAcsV,EAAStV,YACvBC,EAAiBqV,EAASrV,eAC1BC,EAAgBoV,EAASpV,cACzBjB,EAAeqW,EAASrW,aACxBC,EAAcoW,EAASpW,YACvB8nJ,EAAa1xI,EAASjU,YAAciU,EAASzV,WACnD,IAAIk6I,EAAoB,GAAIC,EAAyB,GACjD91H,IAEI61H,EADAP,EACoB,uGAExBt1H,eAGS2iI,EACe,+FAExB3iI,eAIwB,wDAEtBA,2BAIF81H,EAAyB,gCAE7B,MAAMC,EAAiBV,EAAU,kCAAoC,GACjEA,GACAt4L,KAAKo6C,cAAcj3C,KAAK,QAExBo1L,GACAv4L,KAAKo6C,cAAcj3C,KAAK,0BAExByiM,GACA5lM,KAAKo6C,cAAcj3C,KAAK,kBAE5BnD,KAAK85K,SAAW,WAChBgf,0CAE4Bh6I,MAAiBC,uCACpB+jG,MAAWC,kNAOpBgjD,iCACIA,kXASI/nJ,kDACKgB,uCAEL6mJ,+EAIE5nJ,oDACKgB,yCAEL6mJ,6PAWxB9M,cACAD,gDC1FH,MAAMiN,GACT,YAAY3xI,EAAUikI,GAAU,EAAOr1H,EAAa,KAAMs1H,GAAqB,EAAOqN,GAAoB,GACtG5lM,KAAKo6C,cAAgB,CAAC,IAAK,KAC3Bp6C,KAAKw5K,cAAe,EACpBx5K,KAAKy5K,cAAe,EACpBz5K,KAAKinD,YAAcoN,EAASjjB,SAC5B,MAAM20J,EAAa1xI,EAASjU,YAAciU,EAASzV,WAC7CinJ,EAAWxxI,EAAS3V,SACpBonJ,EAAWzxI,EAAS1V,QACpBmkG,EAASzuF,EAAShV,QAAQG,IAC1BujG,EAAU1uF,EAAShV,QAAQK,KAC3BZ,EAAeuV,EAASvV,aACxBC,EAAcsV,EAAStV,YACvBC,EAAiBqV,EAASrV,eAC1BC,EAAgBoV,EAASpV,cACzBjB,EAAeqW,EAASrW,aACxBC,EAAcoW,EAASpW,YACvBgoJ,EAAehoJ,EACrB,IAAIs8H,EAAW,uFAGf,IAAK,IAAIptK,EAAI,EAAGA,EAAI8wC,EAAa9wC,IAC7BotK,GAAY,2BACI,EAAJptK,4BACG,EAAJA,6BACJA,KAUX,IAAK,IAAIlG,EAAI,EAAGA,EAAI+2C,EAAc/2C,IAAK,CACnC,IAAK,IAAIkG,EAAI,EAAGA,EAAI8wC,EAAa9wC,IAC7BotK,GAAY,sBACL,EAAJptK,oCACI,EAAJA,4BACLA,iBAEFotK,GAAY,6BACEtzK,EAAI+3C,kCACD6mJ,eAEjB,IAAK,IAAIK,EAAS,EAAGA,GAAUD,EAAe,GAAK,EAAGC,IAAU,CAC5D,MAAMC,EAAoB,EAATD,EACX/4L,EAAIg5L,EAAWlnJ,EAIrB,GAHAs7H,GAAY,+BACAptK,iBAEQ,IAAhB4xC,GACA,GAAIonJ,EAAWloJ,IAEP8kG,EAAU,GAAM,GAQhBw3B,GAAY,yFAEUurB,eAAsB34L,4CAC7CA,+MAIa24L,oCACX34L,oEAEFA,iDAMKotK,GADkB,IAAlBt7H,GAAuB9xC,EAAI,EACf,uBACxBg5L,mBAA0Bh5L,EAAI,gBAAgBA,2BAItB,mGAGQ24L,sPAKVA,wGAIlBK,gCAAuCh5L,6DAEvCg5L,6BAAoCh5L,mDAOhCotK,GAAY,yCACFurB,eAAsB34L,4CACjCA,iEACO24L,oCACL34L,oEAEFA,uDAGPg5L,cAAqBh5L,uBAGbA,EAAI,EAAI8wC,GAAa,CAMrB,MAAMmoJ,EAAkBrjD,EAAU,GAAM,EACpC,EAAuB9jG,GACvBA,EACCA,EAAgB,GAAM,GAAK8jG,EAAU,GAAM,GAC3C9jG,EAAgB,GAAM,GAAK8jG,EAAU,GAAM,GAC5Cw3B,GAAY,uCACRx3B,EAAU,OAAOqjD,2DAEDN,eAAsB34L,EAAI,8CACjDA,EAAI,qNAIS24L,sCACX34L,EAAI,wEAENA,EAAI,uDAKG8xC,EAAgB,IAChBs7H,GAAY,6FAEMurB,eAAsB34L,gDAC7CA,oEACAA,4DAICotK,GAAY,yBACtB4rB,EAAW,mBAAmBh5L,gBAAgBA,EAAI,8BAQpCotK,GADoB,IAApB6rB,EACY,2BACxBD,EAAW,cAAch5L,2BAID,yCACVi5L,6DAEgBN,eAAsB34L,EAAI,gDACjDA,EAAI,iFACS24L,wCACX34L,EAAI,4EAENA,EAAI,+DAGXg5L,EAAW,cAAch5L,EAAI,iCAQ7BA,EAAI8wC,IAQA8kG,EAAU,GAAM,GAChBw3B,GAAY,yCACFx7H,sDACW+mJ,eAAsB34L,4CAC5CA,6MAGa24L,oCACX34L,oEAEFA,gFAGkB24L,eAAsB34L,EAAI,4CAC5CA,EAAI,qMAGG24L,oCACL34L,EAAI,oEAENA,EAAI,uDAGXg5L,mBAA0Bh5L,gBAAgBA,EAAI,yBAElCA,EAAI,EAAI8wC,IACRs8H,GAAY,iFAEJx7H,wDACW+mJ,8GAG7BK,EAAW,mBAAmBh5L,EAAI,wCAK5BotK,GAAY,wCACHurB,eAAsB34L,4CAChCA,iEACO24L,oCACL34L,oEAEFA,qEAGO4xC,sDACe+mJ,eAAsB34L,EAAI,4CAChDA,EAAI,6EACS24L,oCACX34L,EAAI,mEAENA,EAAI,uDAGXg5L,uCACOh5L,gBAAgBA,EAAI,yBAEfA,EAAI,EAAI8wC,IACRs8H,GAAY,yBACtB4rB,EAAW,mBAAmBh5L,gBAAgBA,EAAI,8BAUpDg5L,EAAWloJ,IACXs8H,GAAY,+BACJtzK,MAAMkG,wCACPg5L,8CAEHh5L,EAAI,EAAI8wC,IACRs8H,GAAY,iCACNtzK,MAAMkG,EAAI,0CACXg5L,EAAW,kDAK5B5rB,GAAY,sBAIhB,IAAIue,EAAoB,GAAIC,EAAyB,GACjD91H,IAEI61H,EADAP,EACoB,oGAExBt1H,eAGS2iI,EACe,4FAExB3iI,eAIwB,wCACxBA,eAGA81H,EAAyB,gCAE7B,MAAMC,EAAiBV,EAAU,kCAAoC,GACjEA,GACAt4L,KAAKo6C,cAAcj3C,KAAK,QAExBo1L,GACAv4L,KAAKo6C,cAAcj3C,KAAK,0BAExByiM,GACA5lM,KAAKo6C,cAAcj3C,KAAK,kBAE5BnD,KAAK85K,SAAW,WAChBgf,0CAE4Bh6I,MAAiBC,uCACpB+jG,MAAWC,oNAQpBgjD,iCACIA,mOAOlBxrB,0EAGAye,cACAD,gDCzTH,MAAM,GAA8B,CACvCnzL,WAAY2N,GACZ4H,YAAa,QACb0O,WAxBG,SAA+B5pB,GAClC,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,EAAEwG,EAAC,OAAEqlB,GAAWzO,GAChB,QAAE3Q,EAAO,IAAEkT,EAAG,UAAE89B,EAAS,gBAAEmE,GAAoB94B,EACrD,IAAIm1D,EAAaxgC,EACC,MAAdwgC,IACAA,EAAa,CAAC,EAAG,IAErB,EAAY,GAA4CxxE,EAASwxE,IAAa,IAC1E,gFAAkBxxE,oBAA0BwxE,OAChD,MAAM7pB,EAAW,GAA+B5tD,EAAEjB,MAAOsmB,EAAOtmB,MAAOkH,EAASwxE,EAAYt+D,EAAKiiC,GAAiB,GAClH,IAAI+xH,EAQJ,OALIA,EAFA,KAAMh4J,QAAQ,6BAA+By4C,EAAStV,aAAe,GACrEsV,EAASjU,YAAciU,EAASzV,YAAe,EACrC,IAAIonJ,GAA6B3xI,GAGjC,IAAIsxI,GAAuBtxI,GAElC5vD,EAAQ2rL,gBAAgBxc,EAAS,CAACntK,EAAGqlB,GAAS,aCtBlD,MAAMu6K,GACT,YAAYhyI,GACRr0D,KAAKo6C,cAAgB,CAAC,IAAK,MAC3Bp6C,KAAKinD,YAAcoN,EAAS7W,YAC5B,MAAMsB,EAAeuV,EAASvV,aACxBC,EAAcsV,EAAStV,YACvB+jG,EAASzuF,EAAShV,QAAQG,IAC1BujG,EAAU1uF,EAAShV,QAAQK,KAC3BqmJ,EAAa1xI,EAASjU,YAAciU,EAASzV,WACnD5+C,KAAK85K,SAAW,2MAOAisB,sHAKM1xI,EAAS5V,sDACL4V,EAAS/U,sDACVR,OAAkBgkG,yCAEjBzuF,EAAS3V,4FAIP2V,EAAS9U,uDACVR,OAAiBgkG,2CAEhB1uF,EAAS1V,qSAetC,MAAM2nJ,GACT,YAAYjyI,GACRr0D,KAAKo6C,cAAgB,CAAC,KAAM,KAC5Bp6C,KAAKinD,YAAcoN,EAASjb,QAC5B,MAAM4E,EAAeqW,EAASrW,aACxBC,EAAcoW,EAASpW,YACvBa,EAAeuV,EAASvV,aACxBC,EAAcsV,EAAStV,YACvB+jG,EAAS9kG,EAAe,EAAIqW,EAAShV,QAAQG,IAC7CujG,EAAU9kG,EAAc,EAAIoW,EAAShV,QAAQK,KAC7CqmJ,EAAa1xI,EAASjU,YAAciU,EAASzV,WACnD5+C,KAAK85K,SAAW,oCACSh3B,MAAWC,6TAYZ/kG,6DACgBc,6CAEZuV,EAAS/U,oIAKpBtB,kDAESC,+DACgBc,+CAEZsV,EAAS9U,4JAMpBtB,oGAGS8nJ,2CACNA,iQCpFvB,MAAM,GAA4C,CACrDngM,WAAY4N,GACZ2H,YAAa,QACb0O,WAXG,SAA6C5pB,GAChD,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,EAAEwG,EAAC,GAAEoiB,GAAOxL,GACZ,QAAE3Q,EAAO,UAAEgxC,EAAS,IAAE99B,EAAG,gBAAEiiC,EAAe,YAAErE,GAAgBz0B,EAC5DsrC,EAAW,GAA+B5tD,EAAEjB,MAAOg4C,EAAa9wC,EAASgxC,EAAW99B,EAAKiiC,GAAiB,GAC1G+xH,EAAU,IAAIyyB,GAAgChyI,GACpD,OAAO5vD,EAAQ2rL,gBAAgBxc,EAAS,CAACntK,EAAGoiB,GAAK,aCExC,GAA2C,CACpDjjB,WAAY6N,GACZ0H,YAAa,QACb0O,WAXG,SAA4C5pB,GAC/C,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,GAAE4oB,EAAE,OAAEiD,GAAWzO,GACjB,QAAE3Q,EAAO,UAAEgxC,EAAS,IAAE99B,EAAG,gBAAEiiC,EAAe,WAAEljC,GAAeoK,EAC3DsrC,EAAW,GAA+B11C,EAAYmN,EAAOtmB,MAAOkH,EAASgxC,EAAW99B,EAAKiiC,GAAiB,GAC9G+xH,EAAU,IAAI0yB,GAA+BjyI,GACnD,OAAO5vD,EAAQ2rL,gBAAgBxc,EAAS,CAAC/qJ,EAAIiD,GAAS,aCRnD,MAAMy6K,GACT,YAAYp+L,GACRnI,KAAKo6C,cAAgB,CAAC,KACtBp6C,KAAKinD,YAAc,CAAC9+C,EAAMA,GAC1BnI,KAAK85K,SAAW,uLCYjB,MAAM,GAAa,CACtBl0K,WAAY8N,GACZyH,YAAa,QACb0O,WAhBG,SAAc5pB,GACjB,MAAM,OAAEod,EAAM,QAAE5Y,GAAYxE,GACtB,EAAEwG,GAAM4W,EACR+zB,EAAW,IAAI3qC,EAAEjB,SAAUiB,EAAEjB,OAC7B20I,EAAQ,GAAmB1zI,EAAEjB,OAC7BghM,EAAO,GAAQ,CAAEnpL,OAAQ,CAAE5W,KAAKhC,UAASskB,MAAO,CAAEvjB,MAAO,CAAC20I,MAC1Dy5B,EAAU,IAAI2yB,GAAYpsD,GAC1B/xH,EAAM3jB,EAAQ2rL,gBAAgBxc,EAAS,CAAC4yB,GAAOA,EAAK/gM,OACpDqkB,EAAM,GAAQ,CAAEzM,OAAQ,CAAE5W,EAAG2hB,GAAO3jB,UAASskB,MAAO,CAAEvjB,MAAO4rC,KAGnE,OAFA3sC,EAAQi4I,8BAA8B8pD,GACtC/hM,EAAQi4I,8BAA8Bt0H,GAC/B0B,ICdJ,MAAM28K,GACT,YAAYpyI,GACRr0D,KAAKo6C,cAAgB,CAAC,IAAK,KAC3Bp6C,KAAKinD,YAAcoN,EAASjjB,SAC5B,MAAM,SAAEsN,EAAQ,QAAEC,EAAO,QAAEU,EAAO,aAAEP,EAAY,YAAEC,EAAW,aAAEf,EAAY,YAAEC,EAAW,eAAEe,EAAc,cAAEC,GAAkBoV,GACpH7U,IAAKsjG,EAAQpjG,KAAMqjG,GAAY1jG,EACvCr/C,KAAK85K,SAAW,uCACYh7H,MAAiBC,uCACpB+jG,MAAWC,+YAad/kG,6CACGgB,yCAECN,yCACAT,iDACGgB,6CAECN,yXCb/B,MAAM+nJ,GAAmB,CAC5B9gM,WAAY+N,GACZwH,YAAa,QACb0O,WAfG,SAAoB5pB,GACvB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,EAAEwG,EAAC,OAAEqlB,GAAWzO,GAChB,QAAE3Q,EAAO,IAAEkT,EAAG,UAAE89B,GAAc30B,EAC9BsrC,EAAW,GAAmC5tD,EAAEjB,MAAOsmB,EAAOtmB,MAAOkH,EAASkT,EAAK,OAAyB89B,GAClH,IAAI5zB,EACJ,MAAM8pJ,EAAU,IAAI6yB,GAAkBpyI,GACtCvqC,EAAMrlB,EAAQ2rL,gBAAgBxc,EAAS,CAACntK,EAAGqlB,GAAS,WACpD,MAAMuwK,EAAc,GAAQ,CAAEh/K,OAAQ,CAAE5W,EAAGqjB,GAAOrlB,UAASskB,MAAO,CAAEvjB,MAAO6uD,EAASjjB,YAEpF,OADA3sC,EAAQi4I,8BAA8B5yH,GAC/BuyK,ICuDE,GAAe,CACxBz2L,WAAYmO,GACZoH,YAAa,QACb0O,WAlEG,SAAgB5pB,GACnB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,SAAEuqD,GAAazhC,EACf0B,EAAUpN,GACV,QAAEs8D,EAAO,WAAEI,EAAU,OAAED,GAAW,GAAkCtvB,EAAU//B,EAAQhsB,QAC5F,GAAiCk7E,EAAQl7E,OAAQq7E,EAAQrvD,GACzD,MAAM,KAAE/N,EAAI,MAAE49D,GAAU,GAAkCP,EAAYD,GAChES,EAASD,EAAM77E,OACrB,IAAIqrB,EAAM,KACNkrI,EAAmBr7E,EAAQl7E,OAC/B,MAAM0jG,EAAmB,GACzB,IAAK,IAAIzjG,EAAI,EAAGA,EAAI67E,IAAU77E,EAAG,CAC7B,IAAK,MAAMu2J,KAAU36E,EAAM57E,GAAI,CAC3B,MAAQw7E,mBAAoBjxC,EAAM6hB,WAAYoqG,GAAiB,GAAkCF,EAAkBl7E,EAAOm7E,IAC1H,IAAIxuJ,EACA,GAAmCwiC,GACnCxiC,EAAIgkB,EAAQwqI,IAGZxuJ,EAAI,GAAU,CAAE4W,OAAQ,CAAE5W,EAAGgkB,EAAQwqI,IAAWxwJ,UAASskB,MAAO,CAAEkgB,UAClEk5D,EAAiBh/F,KAAKsD,IAE1B,MAAMqhH,EAAcrhH,EAAEjB,MAAMnB,QAC5B,IAAK,IAAIkgB,EAAI,EAAGA,EAAI2wI,EAAaz2J,SAAU8lB,EACvCujG,EAAY15E,OAAO8mH,EAAa3wI,GAAI,EAAG,GAEtC,GAAiB9d,EAAEjB,MAAOsiH,KAC3BrhH,EAAI,GAAQ,CAAE4W,OAAQ,CAAE5W,KAAKhC,UAASskB,MAAO,CAAEvjB,MAAOsiH,KACtD3lB,EAAiBh/F,KAAKsD,IAEd,OAARqjB,EACAA,EAAMrjB,GAINqjB,EAAM,GAAS,CAAEzM,OAAQ,CAAEtW,EAAMC,EAAG8iB,GAAOrlB,YAC3C09F,EAAiBh/F,KAAK2mB,IAG1BprB,EAAI67E,EAAS,IACT79D,EAAKhe,IAAM,IACXorB,EAAM,GAAI,CACNzM,OAAQ,CAAE5W,EAAGqjB,GACbrlB,UACAskB,MAAO,CACH7e,KAAMwS,EAAKhe,IAAMi7E,EAAQl7E,OAASu2J,GAClC14G,UAAU,KAGlB6lD,EAAiBh/F,KAAK2mB,IAE1BkrI,KAIR,IAAK,MAAMzvI,KAAc48E,EACjB58E,IAAeuE,GAGnBrlB,EAAQi4I,8BAA8Bn3H,GAE1C,OAAOuE,ICrDL,GAAM,GAAgB,CAAE6kK,UAXlB,0CAWkC2I,gBAV3B,iQAWN,GAAY,CACrB1xL,WAAYoO,GACZmH,YAAa,QACb0O,WAAY,ICDH,GAAgB,CACzBjkB,WAAYqO,GACZkH,YAAa,QACb0O,WAXoB5pB,IACpB,MAAM,OAAEod,EAAM,QAAE5Y,GAAYxE,GACtB,GAAE4oB,EAAE,EAAEL,GAAMnL,EACZu2J,EAAU,KAAMh4J,QAAQ,gCAC1B,IAAI+6K,GARW,0IAQ2B9tK,EAAGrjB,MAAOgjB,EAAEhjB,OACtD,IAAIkxL,GAVI,yCAUqB7tK,EAAGrjB,MAAOgjB,EAAEhjB,OAC7C,OAAOf,EAAQ2rL,gBAAgBxc,EAAS,CAAC/qJ,EAAIL,GAAIK,EAAGpjB,SCR3C,GAAQ,GAAiB,CAAEkpL,UAD1B,wBAC4C2I,gBAJrC,kCAIoE7xL,MAAO,SACnF,GAAc,CACvBG,WAAYuO,GACZgH,YAAa,QACb0O,WAAY,ICQH,GAAM,GAAgB,CAAE8kK,UAhBzB,wNAIE,qBACC,qBACA,qBACA,qBACA,qBACA,qKAQF,GAAY,CACrB/oL,WAAYsO,GACZiH,YAAa,QACb0O,WAAY,ICnBH88K,GAAM,iBACN,GAAM,GAAgB,CAAEhY,UAAWgY,GAAKrP,gBAAiBqP,GAAKpP,cAAe/N,KAC7E,GAAY,CACrB5jL,WAAYwO,GACZ+G,YAAa,QACb0O,WAAY,ICNT,SAAS,GAAW5pB,GACvB,MAAM,OAAEod,EAAM,MAAE0L,EAAK,QAAEtkB,GAAYxE,GAC7B,IAAEs5C,GAAQxwB,GACV,MAAErK,GAAUrB,EACZuB,EAAYF,EAAMlZ,MAAM/G,OACxBuL,EAAW0U,EAAMlZ,MAAMnB,QAC7B,IAAIwxJ,EAAOt8G,EAOX,OANIA,EAAM,IAEN,IAAc36B,EAAY,IAAM26B,GAAK,IAAM,mCAAmC36B,EAAY,OAAOA,OACjGi3I,EAAOj3I,EAAY26B,EAAM,GAE7BvvC,EAASokC,OAAOynH,EAAM,EAAG,GAClB,GAAQ,CAAEx4I,OAAQ,CAAE5W,EAAGiY,GAASja,UAASskB,MAAO,CAAEvjB,MAAOwE,KAE7D,MAAM,GAAmB,CAC5BpE,WAAYyO,GACZ8G,YAAa,QACb0O,WAAY,ICjBV+8K,GAAQ,uBACD,GAAQ,GAAgB,CAAEjY,UAAWiY,GAAOtP,gBAAiBsP,GAAOrP,cAAe9N,KACnF,GAAc,CACvB7jL,WAAY0O,GACZ6G,YAAa,QACb0O,WAAY,ICRT,MAAMg9K,GACT,YAAYC,EAAWnoL,EAAYu6D,GAC/Bl5E,KAAKo6C,cAAgB,CAAC,OAAQ,QAC9B,MAAMm8G,EAAW53I,EAAW,GAC5B3e,KAAKinD,YAActoC,EACnB,MAAMooL,EAA4B7tH,EAAU,SAAShzE,KAAKm8D,KAAO,UAAUn8D,KAAKm8D,KAC1E2kI,EAAoB9tH,EAAU,GAAGq9E,MAAe,MACtD,IAAI0wC,EACJ,GAAkB,SAAdH,EACAG,EAAW,wCAEV,IAAkB,SAAdH,EAIL,MAAM,IAAIjhM,MAAM,sDAAsDihM,MAHtEG,EAAW,oCAKfjnM,KAAK85K,SAAW,4CACiBitB,+FAG/BE,gHAIwC1wC,sKAMpBA,oWAS2BywC,0LCpClD,SAAS,GAAQvgM,EAAGyyE,EAASz0E,GAChC,MAAMo6I,EAAQp6I,EAAQykL,QAAQxnL,IAAI+E,EAAE3B,QAC9BgyJ,EAAY,GAAmBrwJ,EAAEjB,OAEjC81D,EAAqB70D,EAAEjB,MAAMiB,EAAEjB,MAAM/G,OAAS,GAE9C07J,EAAU,GAAQ,CAAE98I,OAAQ,CAAE5W,KAAKhC,UAASskB,MAAO,CAAEvjB,MAAO,CADpDsxJ,EAAYx7F,EACgDA,MACpE1qB,EAASupH,EAAQ30J,MACjB6zL,EAAc,IAAIwN,GAAW,OAAQj2J,EAAQsoC,GAC7CogH,EAAc,IAAIuN,GAAW,OAAQj2J,EAAQsoC,GAC7C77D,EAAS,CACX,CACIvY,OAAQ+5I,EAAM9E,mBAAmB5nH,KAAKrtB,OACtCW,MAAOo5I,EAAM9E,mBAAmB5nH,KAAK1sB,MACrCD,MAAOorC,GAEX,CACI9rC,OAAQ+5I,EAAM9E,mBAAmB3nH,KAAKttB,OACtCW,MAAOo5I,EAAM9E,mBAAmB3nH,KAAK3sB,MACrCD,MAAOorC,IAGT+rG,EAAWl4I,EAAQ2rL,gBAAgBiJ,EAAah8K,EAAQ,WACxD4kJ,EAAWx9J,EAAQ2rL,gBAAgBkJ,EAAaj8K,EAAQ,WACxD46K,EAAgB,GAAQ,CAAE56K,OAAQ,CAAE8U,KAAMwqH,EAAUvqH,KAAM6vI,GAAYx9J,YAC5EA,EAAQi4I,8BAA8BC,GACtCl4I,EAAQi4I,8BAA8BulB,GACtC,MAAMilC,EAAwB,GAAQ,CAAE7pL,OAAQ,CAAE5W,EAAGwxL,GAAiBxzL,UAASskB,MAAO,CAAEvjB,MAAOiB,EAAEjB,SAGjG,OAFAf,EAAQi4I,8BAA8Byd,GACtC11J,EAAQi4I,8BAA8Bu7C,GAC/BiP,EC3BJ,MAAM,GAAY,CACrBthM,WAAY2O,GACZ4G,YAAa,QACb0O,WARG,SAAa5pB,GAChB,MAAM,OAAEod,EAAM,QAAE5Y,GAAYxE,GACtB,MAAEye,GAAUrB,EAClB,OAAO,GAAQqB,GAAO,EAAqBja,KCLxC,MAAM0iM,GACT,YAAY3hM,EAAO9F,GACfM,KAAKinD,YAAc,GACnBjnD,KAAKo6C,cAAgB,CAAC,KACtBp6C,KAAKinD,YAAczhD,EACnBxF,KAAK85K,SAAW,oJAQpB,mBAAmBp6K,GACf,MAAO,CAACssL,EAAOoI,KACU,MAAjBp0L,KAAKonM,WACLpnM,KAAKonM,SAAWpb,EAAMiU,0BAA0B7L,EAAc,UAElEpI,EAAMlc,GAAG8kB,UAAU50L,KAAKonM,SAAU1nM,KChBvC,SAAS,GAAKO,GACjB,MAAM,QAAEwE,EAAO,MAAEskB,GAAU9oB,GACrB,MAAEuF,EAAK,MAAE9F,GAAUqpB,EACzB,IAAI,MAAEtjB,GAAUsjB,EAEhB,GADAtjB,EAAQA,GAAS,GAAgB/F,GACnB,WAAV+F,EAAoB,CAEpB,MAAMF,EAAS,GAAuBE,EAAO,GAAmBD,IAEhE,OADAD,EAAO2Z,KAAKxf,GACL+E,EAAQ41I,eAAe70I,EAAOC,EAAOF,GAE3C,CACD,MAAMquK,EAAU,IAAIuzB,GAAY3hM,EAAO9F,GACjCuzL,EAAcrf,EAAQ4sB,mBAAmB9gM,GAC/C,OAAO+E,EAAQ2rL,gBAAgBxc,EAAS,GAAInuK,EAAOwtL,IAGpD,MAAM,GAAa,CACtBrtL,WAAY4O,GACZ2G,YAAa,QACb0O,WAAY,ICtBT,MAAMw9K,GACT,YAAY3C,GACR1kM,KAAKo6C,cAAgB,CAAC,SACtBp6C,KAAKinD,YAAc,GACnB,MAAMiwB,EAAawtH,EAAW,GAC9B1kM,KAAKinD,YAAcy9I,EACnB1kM,KAAK85K,SAAW,gIAKC5iG,8EAEcA,4PCXhC,MAAM,GAAsB,CAC/BtxE,WAAY6O,GACZ0G,YAAa,QACb0O,WAAY,EAAGxM,SAAQ5Y,cACnB,MAAM,MAAEyvB,GAAU7W,EACZm6K,EAAe/yL,EACfmvK,EAAU,IAAIyzB,GAAqBnzK,EAAM1uB,OAE/C,OADegyL,EAAapH,gBAAgBxc,EAAS,CAAC1/I,GAAQA,EAAMzuB,SCNtE6hM,GAAQ,mBACD,GAAQ,GAAgB,CAAE3Y,UAAW2Y,GAAOhQ,gBAAiBgQ,GAAO/P,cAAe7N,KACnF,GAAc,CACvB9jL,WAAY8O,GACZyG,YAAa,QACb0O,WAAY,IC+BH,GAAW,GAAiB,CAAE8kK,UAjC3B,uPAiC+C2I,gBAtBxC,sgBAsByE7xL,MAAO,UAC1F,GAAiB,CAC1BG,WAAY+O,GACZwG,YAAa,QACb0O,WAAY,IC1CT,MAAM09K,GACT,YAAYtgJ,GACRjnD,KAAKo6C,cAAgB,CAAC,KACtB,MAAMy/H,EAAO7B,MACNjtI,EAAQliC,GAAUo+C,EACzBjnD,KAAKinD,YAAcA,EACnBjnD,KAAK85K,SAAW,wNAM+BjxK,QAAYkiC,kCAE3C8uI,EAAK1B,4WCdtB,MAAMqvB,GACT,YAAYvgJ,GACRjnD,KAAKo6C,cAAgB,CAAC,KACtBp6C,KAAKw5K,cAAe,EACpBx5K,KAAKy5K,cAAe,EACpB,MAAMI,EAAO7B,MACNjtI,EAAQliC,GAAUo+C,EACzBjnD,KAAKinD,YAAcA,EACnBjnD,KAAK85K,SAAW,0bAeMjxK,QAAYkiC,oCACd8uI,EAAK1B,ybAgBvB0B,EAAKl8J,mCCpCR,MAAM8pL,GAAmB,CAC5B7hM,WAAY+U,GACZQ,YAAa,QACb0O,WAGJ,SAAoB5pB,GAChB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,EACnC,IAAI,OAAE+pC,GAAW3sB,EACjB,MAAM,YAAE4sB,GAAgBlhB,EAClBqhB,EAAwC,oBAAvB,kBACnBJ,aAAkBS,iBAChBJ,EAAwC,oBAAvB,kBACnBL,aAAkBU,kBACf7hC,EAAOkiC,GAAUX,EACpB,CACIJ,EAAOgB,WACPhB,EAAOiB,aAEX,CAACjB,EAAOnhC,MAAOmhC,EAAOe,QACpB6uI,EAAW,CAAC7uI,EAAQliC,GACpBuoC,EAAW,CAACrG,EAAQliC,EAAOohC,IAC7BI,GAAWD,KACgB,MAAvB,KACA,GAAsB9Z,SAASmQ,cAAc,UAAUkK,WAAW,OAEtE,GAAoBQ,OAAOtiC,MAAQA,EACnC,GAAoBsiC,OAAOJ,OAASA,EACpC,GAAoBK,UAAUpB,EAAQ,EAAG,EAAGnhC,EAAOkiC,GACnDf,EAAS,GAAoBmB,QAEjC,MAAMu8J,EAAkBjjM,EAAQ41I,eAAeu/B,EAAU,SAEzDn1K,EAAQykL,QAAQxnL,IAAIgmM,EAAgB5iM,QAAQ2nL,MAAQ5b,GAAa2d,OACjE/pL,EAAQunL,MAAM2b,yBAAyBljM,EAAQwxL,WAAWyR,EAAgB5iM,QAASklC,GACnF,MAAM4pI,EAAU,KAAMh4J,QAAQ,cAC1B,IAAI4rL,GAAwBp2J,GAC5B,IAAIm2J,GAAkBn2J,GACpBhpB,EAAM3jB,EAAQ2rL,gBAAgBxc,EAAS,CAAC8zB,GAAkB,SAEhE,OADAjjM,EAAQojB,YAAY6/K,EAAgB5iM,QAC7BsjB,IAnCX,IAAI,GCuDG,MAAM,GAAoB,CAC7BxiB,WAAYkV,GACZK,YAAa,QACb0O,WA/DG,SAAqB5pB,GACxB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,EAAEwG,EAAC,OAAEqlB,EAAM,KAAEqhC,EAAI,uBAAEmW,GAA2BjmD,GAC9C,QAAE3Q,EAAO,IAAEkT,EAAG,WAAE69B,EAAU,UAAEC,EAAS,gBAAEmE,EAAe,WAAEohB,EAAU,eAAEM,GAAmBx6C,EACvFu1B,EAAc,GAAqCb,GACnD4W,EAAW,GAA+B5tD,EAAEjB,MAAOsmB,EAAOtmB,MAAOkH,EAASgxC,EAAW99B,EAAKiiC,GAAiB,EAAuBvD,GACxI,IAAIx0B,EACJ,MAAMg3H,EAAgB,GACtB,GAA8B,IAA1BzsF,EAASrW,cAA+C,IAAzBqW,EAASpW,aACZ,IAA5BoW,EAASrV,gBAAmD,IAA3BqV,EAASpV,eAChB,IAA1BoV,EAASvV,cAA+C,IAAzBuV,EAAStV,aACb,SAA1BsV,EAAShV,QAAQ57B,MAA6C,UAA1B4wC,EAAShV,QAAQ57B,KAYrD,GAAI,KAAM7H,QAAQ,sBAAuC,IAAfnV,EAAEjB,MAAM,GACnDskB,EAAM65K,GAAiB,CACnBl9L,IACAqlB,SACAuoC,WACA5vD,UACA0oD,OACA8V,aACAK,yBACAC,uBAGH,CACD,MAAMo4H,EAAkB,MAARxuI,EACVyuI,EAAsD,MAA1Bt4H,EAC5Bu4H,EAAmC,cAAf54H,EACpB64H,EAAkB74H,EAAai1H,GAA6Bj1H,GAAY,GAAS,KACjF2wG,EAAU,IAAI2uB,GAAcluI,EAAUsnI,EAASG,EAAiBF,EAA2BC,GAC3Fx+K,EAAS,CAAC5W,EAAGqlB,GAOnB,GANIqhC,GACA9vC,EAAOla,KAAKgqD,GAEZmW,GACAjmD,EAAOla,KAAKmgE,GAEZu4H,EAAmB,CACnB,MAAMO,EAAkB33L,EAAQ41I,eAAe,GAAI,UAAW,GAAuB92E,EAAgB,YACrGlmD,EAAOla,KAAKi5L,GACZt7C,EAAc39I,KAAKi5L,GAEvBtyK,EAAMrlB,EAAQ2rL,gBAAgBxc,EAASv2J,EAAQ,gBAzC/CyM,EAAMm5K,GAAe,CACjBx8L,IACAqlB,SACAuoC,WACA5vD,UACA0oD,OACA8V,aACAK,yBACAC,mBAmCR,MAAM84H,EAAc,GAAQ,CAAEh/K,OAAQ,CAAE5W,EAAGqjB,GAAOrlB,UAASskB,MAAO,CAAEvjB,MAAO6uD,EAASjjB,YAGpF,OAFA0vG,EAAc39I,KAAK2mB,GACnBg3H,EAAc90I,SAAQ6D,GAAKpL,EAAQi4I,8BAA8B7sI,KAC1DwsL,ICfE,GAA6B,CACtCz2L,WAAYmV,GACZI,YAAa,QACb0O,WA/CG,SAA8B5pB,GACjC,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,EAAEwG,EAAC,OAAEqlB,EAAM,KAAEqhC,EAAI,uBAAEmW,GAA2BjmD,GAC9C,QAAE3Q,EAAO,IAAEkT,EAAG,UAAE89B,EAAS,gBAAEmE,EAAe,WAAEohB,EAAU,eAAEM,GAAmBx6C,EAC3E+3H,EAAgB,GACtB,IAAI5iE,EAAaxgC,EACC,MAAdwgC,IACAA,EAAa,CAAC,EAAG,IAErB,EAAY,GAA4CxxE,EAASwxE,IAAa,IAC1E,gFAAkBxxE,oBAA0BwxE,OAChD,MAAM7pB,EAAW,GAA+B5tD,EAAEjB,MAAOsmB,EAAOtmB,MAAOkH,EAASwxE,EAAYt+D,EAAKiiC,GAAiB,GAC5G+lJ,EAA0B,KAAMhsL,QAAQ,6BAC1Cy4C,EAAStV,aAAe,GACxBsV,EAASjU,YAAciU,EAASzV,YAAe,EAC7Ck9I,EAAkB74H,EACpBi1H,GAA6Bj1H,EAAY2kI,GACzC,KACEnG,EAAgB,CAACh7L,EAAGqlB,GACpB6vK,EAAkB,MAARxuI,EACVyuI,EAAsD,MAA1Bt4H,EAC5Bu4H,EAAmC,cAAf54H,EAO1B,GANI04H,GACA8F,EAAct+L,KAAKgqD,GAEnByuI,GACA6F,EAAct+L,KAAKmgE,GAEnBu4H,EAAmB,CACnB,MAAMO,EAAkB33L,EAAQ41I,eAAe,GAAI,UAAW,GAAuB92E,EAAgB,YACrGk+H,EAAct+L,KAAKi5L,GACnBt7C,EAAc39I,KAAKi5L,GAEvB,IAAIxoB,EAEAA,EADAg0B,EACU,IAAI5B,GAA6B3xI,EAAUsnI,EAASG,EAAiBF,EAA2BC,GAGhG,IAAI8J,GAAuBtxI,EAAUsnI,EAASG,EAAiBF,EAA2BC,GAExG,MAAM10L,EAAS1C,EAAQ2rL,gBAAgBxc,EAAS6tB,EAAe,WAE/D,OADA3gD,EAAc90I,SAAQ6D,GAAKpL,EAAQi4I,8BAA8B7sI,KAC1D1I,IC7DJ,MAAM0gM,GACT,YAAY36J,EAAUxgC,EAASlH,GAC3BxF,KAAKktC,SAAWA,EAChBltC,KAAK0M,QAAUA,EACf1M,KAAKo6C,cAAgB,CAAC,IAAK,WAC3Bp6C,KAAKinD,YAAczhD,EACnB,MAAMsiM,EAAcnjB,GAAkBj4K,EAAQjO,QACxCgH,EAAQk/K,GAAkBn/K,EAAM/G,QAChCspM,EAAe/nM,KAAKktC,SAAW,EAAI,aAAe,UACxDltC,KAAK85K,SAAW,aACdguB,eAAyBA,KAAe9nM,KAAK0M,gDAE3CjH,iGAEoBzF,KAAKktC,mHAEC66J,2FCsB/B,MAAM,GAAiB,CAC1BniM,WAAYkP,GACZqG,YAAa,QACb0O,WAvBG,SAAkB5pB,GACrB,MAAM,OAAEod,EAAM,QAAE5Y,GAAYxE,GACtB,OAAE0P,EAAM,QAAEghB,GAAYtT,EACtBsvB,EAAehc,EAAQnrB,MACvBonC,EAAYD,EAAaA,EAAaluC,OAAS,IAC9CquC,EAAawuH,EAAWvuH,EAAWrgC,GAAW,GAAgCiD,EAAQghB,GACvFq3K,EAAiB,GAAQ,CAAE3qL,OAAQ,CAAE5W,EAAGkqB,GAAWlsB,UAASskB,MAAO,CAAEvjB,MAAO,CAAC81J,EAAW1uH,MACxFwvH,EAAW,GAAQ,CACrB/+I,OAAQ,CAAE5W,EAAGkJ,GACblL,UACAskB,MAAO,CAAEvjB,MAAO,CAAE,GAAmBmK,EAAOnK,OAASunC,EAAYA,MAE/D6mI,EAAU,IAAIi0B,GAAgBj7J,EAAWlgC,EAAS,CAAC4uJ,EAAWvuH,IAC9D3kB,EAAM3jB,EAAQ2rL,gBAAgBxc,EAAS,CAACxX,EAAU4rC,GAAiB5rC,EAAS32J,OAC5E4xE,EAAW,GAAQ,CAAEh6D,OAAQ,CAAE5W,EAAG2hB,GAAO3jB,UAASskB,MAAO,CAAEvjB,MAAOsnC,KAIxE,OAHAroC,EAAQi4I,8BAA8BsrD,GACtCvjM,EAAQi4I,8BAA8B0f,GACtC33J,EAAQi4I,8BAA8Bt0H,GAC/BivD,ICpBJ,MAAM4wH,GACT,YAAYj5I,EAAQ/H,GAChBjnD,KAAKo6C,cAAgB,CAAC,IAAK,WAC3Bp6C,KAAKinD,YAAcA,EACnBjnD,KAAKmK,KAAO88C,EAAYxoD,OACxB,MAAMgH,EAAQk/K,GAAkB3kL,KAAKmK,MAC/BshL,EAUd,SAAyBz8H,EAAQ9kD,GAC7B,MAAMg+L,EAAgB,CAAC,UAAW,UAAW,UAAW,WAClDzc,EAAe,GACrB,IAAK,IAAI/sL,EAAI,EAAGA,EAAIswD,EAAOvwD,OAAQC,IACrB,IAANA,EACA+sL,EAAatoL,KAAK,qCAGlBsoL,EAAatoL,KAAK,GAAG+kM,EAAcxpM,MAG3C,OAAO+sL,EAAaz7K,OArBK,CAAgBg/C,GACrChvD,KAAK85K,SAAW,kCAEdr0K,wDACegmL,uBCoClB,MAAM,GAAiB,CAC1B7lL,WAAYiP,GACZsG,YAAa,QACb0O,WA9CG,SAAkB5pB,GACrB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,EAAEwG,EAAC,QAAEkqB,GAAYtT,GACjB,KAAEnT,EAAI,UAAE4hD,GAAc/iC,EAEtBozI,EAAY,GAAmD11J,EAAGkqB,EADrD,GAAoBzmB,EAAMzD,EAAEjB,OAAO,GACuCsmD,GACvFg0B,EAAc,GAAmBnvD,EAAQnrB,OACzCg6J,EAAY,GACZpD,EAAW,GAAQ,CACrB/+I,OAAQ,CAAE5W,KACVhC,UACAskB,MAAO,CACHvjB,MAAO,CACH22J,EAAU19G,UAAW09G,EAAUhhF,UAAWghF,EAAUxuJ,QACpDwuJ,EAAUpvH,cAIhB0uH,EAAe,GAAQ,CACzBp+I,OAAQ,CAAE5W,EAAGkqB,GACblsB,UACAskB,MAAO,CAAEvjB,MAAO,CAAC22J,EAAU19G,UAAWqhC,EAAcq8E,EAAU19G,cAElE+gH,EAAUr8J,KAAKi5J,GACfoD,EAAUr8J,KAAKs4J,GACf,MAAMG,EAAqB,CACvBO,EAAU19G,UAAW09G,EAAUhhF,UAAW2E,EAAcq8E,EAAU19G,UAClE09G,EAAUpvH,WAEd,GAAItoC,EAAQguL,mBAAmB,CAAChsL,EAAGkqB,KAAyB,WAAZlqB,EAAEhB,MAAoB,CAClE,MAAMk2J,EAAal3J,EAAQ2hJ,WAAWqV,GAChClX,EAAO9/I,EAAQ2hJ,WAAWgW,GAC1B/a,EAASsoC,GAAgBplC,EAAMoX,EAAYC,GAEjD,OADA4D,EAAUxzJ,SAAQ6D,GAAKpL,EAAQi4I,8BAA8B7sI,KACtDpL,EAAQ41I,eAAe8hB,EAAUl1G,YAAao6F,EAAO57I,MAAO47I,EAAO97I,QAE9E,MAAMquK,EAAU,IAAIq0B,GAAc7rC,EAAS52J,MAAOo2J,GAC5CxzI,EAAM3jB,EAAQ2rL,gBAAgBxc,EAAS,CAACxX,EAAUX,GAAeW,EAAS32J,OAChF+5J,EAAUr8J,KAAKilB,GACf,MAAMivD,EAAW,GAAQ,CAAEh6D,OAAQ,CAAE5W,EAAG2hB,GAAO3jB,UAASskB,MAAO,CAAEvjB,MAAO22J,EAAUl1G,eAElF,OADAu4G,EAAUxzJ,SAAQ6D,GAAKpL,EAAQi4I,8BAA8B7sI,KACtDwnE,ICtCE,GAAU,GAAiB,CACpCs3G,UALY,uBAMZ2I,gBALmB,wCAMnBC,cAAe3N,GACfnkL,MAAO,SAEE,GAAgB,CACzBG,WAAYmP,GACZoG,YAAa,QACb0O,WAAY,ICVH,GAAe,GAAiB,CACzC8kK,UALkB,wBAMlB2I,gBALyB,6CAMzB7xL,MAAO,SAEE,GAAqB,CAC9BG,WAAYoP,GACZmG,YAAa,QACb0O,WAAY,ICPH,GAAa,CACtBjkB,WAAYsP,GACZiG,YAAa,QACb0O,WARG,SAAc5pB,GACjB,MAAM,OAAEod,EAAM,QAAE5Y,GAAYxE,GACtB,MAAEye,GAAUrB,EAClB,OAAO,GAAQqB,GAAO,EAAoBja,KCFjC,GAAW,GAAgB,CAAEkqL,UADxB,wCAC8ClpL,MAAO,SAC1D,GAAiB,CAC1BG,WAAYwP,GACZ+F,YAAa,QACb0O,WAAY,ICJH,GAAQ,GAAgB,CAAE8kK,UADxB,0BAC2ClpL,MAAO,SACpD,GAAc,CACvBG,WAAYyP,GACZ8F,YAAa,QACb0O,WAAY,ICJH,GAAQ,GAAgB,CAAE8kK,UADxB,0BAC2ClpL,MAAO,SACpD,GAAc,CACvBG,WAAY0P,GACZ6F,YAAa,QACb0O,WAAY,ICAH,GAAO,GAAiB,CACjC8kK,UALS,uBAMT2I,gBALgB,qCAMhBC,cAAe1N,GACfpkL,MAAO,SAEE,GAAa,CACtBG,WAAY4P,GACZ2F,YAAa,QACb0O,WAAY,ICVH,GAAY,GAAiB,CAAE8kK,UAJlB,wBAIyC2I,gBAHlC,0CAGsE7xL,MAAO,SACjG,GAAkB,CAC3BG,WAAY6P,GACZ0F,YAAa,QACb0O,WAAY,ICDH,GAAiB,CAC1BjkB,WAAY8P,GACZyF,YAAa,QACb0O,WAVG,SAAkB5pB,GACrB,MAAM,QAAEwE,EAAO,MAAEskB,GAAU9oB,GACrB,MAAEuM,EAAK,KAAE0jC,EAAI,IAAE5kC,GAAQyd,EAEvB4xH,EAAUmvC,GAAgBt9K,EAAO0jC,EAAM5kC,GAC7C,OAAO7G,EAAQ41I,eAAe,CAACM,EAAQl8I,QAAS,UAAWk8I,KCQlD,GAAM,GAAgB,CAAEg0C,UAZzB,6CAYyC2I,gBAVlC,4RAU+DC,cAAexN,KACpF,GAAY,CACrBnkL,WAAY+P,GACZwF,YAAa,QACb0O,WAAY,IChBH,GAAQ,GAAgB,CAAE8kK,UADzB,yBAED,GAAc,CACvB/oL,WAAYgQ,GACZuF,YAAa,QACb0O,WAAY,ICCH,GAAa,GAAiB,CACvC8kK,UAPgB,sCAQhB2I,gBAPuB,6GAQvB7xL,MAAO,SAEE,GAAmB,CAC5BG,WAAYiQ,GACZsF,YAAa,QACb0O,WAAY,ICbH,GAAa,GAAgB,CAAE8kK,UADxB,+BAEP,GAAmB,CAC5B/oL,WAAYkQ,GACZqF,YAAa,QACb0O,WAAY,ICEH,GAAY,GAAiB,CAAE8kK,UAPzB,sCAOgD2I,gBANzC,4HAM6E7xL,MAAO,SACjG,GAAkB,CAC3BG,WAAYmQ,GACZoF,YAAa,QACb0O,WAAY,ICbT,MAAMs+K,GACT,YAAYv3J,EAAQw3J,EAAQj7I,EAAMT,EAAOU,GACrCptD,KAAKo6C,cAAgB,CAAC,KACtBp6C,KAAKinD,YAAc,GACnB,MAAMohJ,EAAMD,EACNvqC,EAAOjtH,EAAO,GAAK,EAMzB,IAAI03J,EALJtoM,KAAKinD,YAAcrW,EAMnB,MAAM23J,EAAQ,SAASp7I,cAAiBT,WAEpC47I,EADS,KAATl7I,EACc,eAAem7I,KAEf,IAATn7I,EACS,QAAQm7I,KAGR,WAAWA,eAAmBn7I,OAEhDptD,KAAK85K,SAAW,0QASAuuB,WAAaA,4EAEDxqC,+HAKVyqC,8CCtCnB,MAAME,GACT,YAAY53J,EAAQw3J,EAAQj7I,EAAMT,EAAOU,GACrCptD,KAAKo6C,cAAgB,CAAC,KACtBp6C,KAAKinD,YAAc,GACnBjnD,KAAKw5K,cAAe,EACpBx5K,KAAKy5K,cAAe,EACpB,MAAM4uB,EAAMD,EACNvqC,EAAOjtH,EAAO,GAAK,EAMzB,IAAI03J,EALJtoM,KAAKinD,YAAcrW,EAMnB,MAAM23J,EAAQ,SAASp7I,cAAiBT,WAEpC47I,EADS,KAATl7I,EACc,eAAem7I,KAEf,IAATn7I,EACS,QAAQm7I,KAGR,WAAWA,eAAmBn7I,OAEhDptD,KAAK85K,SAAW,iNAQQ95K,KAAKinD,YAAY,sCACjBjnD,KAAKinD,YAAY,mhBAehBohJ,2ZAWRA,WAAaA,+KAGuBxqC,wyBAqBnByqC,iDChFnC,MAUMG,GAAY,CACrB7iM,WAAYqQ,GACZkF,YAAa,QACb0O,WAbgB5pB,IAChB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,EAAEwG,GAAM4W,GACR,YAAE6vC,EAAW,KAAEC,EAAI,MAAET,EAAK,KAAEU,GAASrkC,EACrC6qJ,EAAU,KAAMh4J,QAAQ,4BAC1B,IAAI4sL,GAAiB/hM,EAAEjB,MAAO0nD,EAAaC,EAAMT,EAAOU,GACxD,IAAI+6I,GAAW1hM,EAAEjB,MAAO0nD,EAAaC,EAAMT,EAAOU,GACtD,OAAO3oD,EAAQ2rL,gBAAgBxc,EAAS,CAACntK,GAAIA,EAAEhB,SCV5C,MAAMijM,GACT,YAAY/pL,EAAYuuC,EAAaC,EAAMT,EAAOU,GAC9CptD,KAAKo6C,cAAgB,CAAC,aAAc,cAAe,MACnDp6C,KAAKinD,YAAc,GACnBjnD,KAAKinD,YAActoC,EACnB3e,KAAK4oC,MAAQjqB,EAAW,GACxB3e,KAAKktD,YAAcA,EACnBltD,KAAKmtD,KAAOA,EACZntD,KAAK0sD,MAAQA,EACb1sD,KAAKotD,KAAOA,EACZptD,KAAK85K,SAAW,oNAQM95K,KAAK4oC,oEACiBskB,iDACXltD,KAAK4oC,oCACpBskB,8FAGYltD,KAAK4oC,4aAelB8jB,qBAAyBS,oPAOTT,+BACfU,+KAIgBA,gSCjDnC,MAQMu7I,GAAgB,CACzB/iM,WAAYsQ,GACZiF,YAAa,QACb0O,WAXoB5pB,IACpB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,EAAEwG,EAAC,EAAE+hB,EAAC,GAAEK,GAAOxL,GACf,YAAE6vC,EAAW,KAAEC,EAAI,MAAET,EAAK,KAAEU,GAASrkC,EACrC6qJ,EAAU,IAAI80B,GAAejiM,EAAEjB,MAAO0nD,EAAaC,EAAMT,EAAOU,GACtE,OAAO3oD,EAAQ2rL,gBAAgBxc,EAAS,CAACntK,EAAG+hB,EAAGK,GAAKpiB,EAAEhB,SCFnD,SAAS,GAAIxF,GAChB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,EAAEwG,GAAM4W,GACR,iBAAE2wC,EAAgB,SAAE1R,GAAavzB,EACjC0nB,EAAQhqC,EAAEjB,MAAM/G,OAChBmjF,EAAW,GAAoB5zB,EAAkBvnD,EAAEjB,OACzD,IAAIoF,EAAOg3E,EACX,MAAMggE,EAAe,GAAgCh3I,EAAM6lC,GACrDm4J,EAAuC,MAAhBhnD,EACvB6wC,EAAqBhuL,EAAQguL,mBAAmB,CAAChsL,IACvD,IAAIoiM,EAAWpiM,EACf,GAAImiM,EAAsB,CACtB,GAAInW,EAAoB,CACpB,MACMltL,EADWd,EAAQykL,QAAQxnL,IAAImnM,EAAS/jM,QACtBS,OAClByE,EAAW,IAAIpL,MAAM6xC,GAC3B,IAAK,IAAI/xC,EAAI,EAAGA,EAAIsL,EAASvL,OAAQC,IACjCsL,EAAStL,GAAK+H,EAAEjB,MAAMo8I,EAAaljJ,IAEvC,MAAMoqM,EAAiB9d,GAAiBzlL,EAAQkB,EAAEjB,MAAOiB,EAAEhB,MAAOm8I,EAAc53I,GAChF6+L,EAAWpkM,EAAQ41I,eAAerwI,EAAUvD,EAAEhB,OACzBhB,EAAQykL,QAAQxnL,IAAImnM,EAAS/jM,QACrCS,OAASujM,OAGtBD,EAAW,GAAcpiM,EAAGm7I,EAAcn9I,GAE9CmG,EAAO,GAA8BA,EAAKnM,OAAQgyC,GAEtD,GAAwC,MAAO7lC,EAAM6lC,GACrD,MAAOguH,EAAa5c,GAAe,GAAuCgnD,EAASrjM,MAAOoF,GAC1F,IAKIkf,EALAsnB,EAAWqtH,EAMf,GALIniH,IAEAlL,EAAW,GAAkCqtH,EAAa78E,IAG1D6wG,EAAoB,CACpB,MACMltL,EADWd,EAAQykL,QAAQxnL,IAAImnM,EAAS/jM,QACtBS,OAClBmtL,EAAY1I,GAAWzkL,EAAQ,GAAmBs8I,GAAczwG,EAAU3qC,EAAEhB,OAClFqkB,EAAMrlB,EAAQ41I,eAAejpG,EAAU3qC,EAAEhB,OACzBhB,EAAQykL,QAAQxnL,IAAIooB,EAAIhlB,QAChCS,OAASmtL,OAGjB5oK,EChDD,SAAiBrjB,EAAGo7I,EAAazwG,EAAU3sC,GAC9C,MAAMsyE,EAAS,GAAmB8qE,GAG5By5C,EAAgB,GAAQ,CAAEj+K,OAAQ,CAAE5W,KAAKsiB,MAAO,CAAEvjB,MAAO,CAFjD,GAAmBiB,EAAEjB,OACTuxE,EACiDA,IAAWtyE,YAChF82L,EAAUtuL,GAAOquL,EAAe70L,EAAEhB,MAAO,MAAOhB,GAChDskM,EAAiB,GAAQ,CAAE1rL,OAAQ,CAAE5W,EAAG80L,GAAWxyK,MAAO,CAAEvjB,MAAO4rC,GAAY3sC,YAGrF,OAFAA,EAAQi4I,8BAA8B4+C,GACtC72L,EAAQi4I,8BAA8B6+C,GAC/BwN,EDuCG,CAAQF,EAAUhnD,EAAazwG,EAAU3sC,GAKnD,OAHImkM,GACAnkM,EAAQi4I,8BAA8BmsD,GAEnC/+K,EAEJ,MAAM,GAAY,CACrBlkB,WAAYuQ,GACZgF,YAAa,QACb0O,WAAY,IE9CH,GAAU,GAAiB,CACpC8kK,UAXY,kFAYZ2I,gBATmB,oTAUnBC,cAAetN,KAEN,GAAgB,CACzBrkL,WAAYwQ,GACZ+E,YAAa,QACb0O,WAAY,ICHH,GAAgB,CACzBjkB,WAAYyQ,GACZ8E,YAAa,QACb0O,WAnBG,SAAiB5pB,GACpB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,EAAEwG,GAAM4W,EACd,GAAiB5W,EAAG,WACpB,MAAM,WAAEq3C,EAAU,QAAEpxC,EAAO,IAAEkT,EAAG,gBAAEiiC,GAAoB94B,EAEtD,EAAY,GAA4Crc,EADtC,IAC2D,IACzE,wEAAeA,wBACnB,MAAM2nD,EAAW,GAA+B5tD,EAAEjB,MAAOs4C,EAAYpxC,EAHnD,EAGuEkT,EAAKiiC,GAC9F,GAA6B,IAAzBwS,EAASpW,aAA+C,IAA1BoW,EAASrW,cACvC,GAAiBqW,EAASjb,QAASib,EAASjjB,UAC5C,OAAO,GAAS,CAAE/zB,OAAQ,CAAE5W,KAAKhC,YAErC,MAAMukM,EAAiB,IAAI1K,GAAcjqI,EAAU,OAAO,GAC1D,OAAO5vD,EAAQ2rL,gBAAgB4Y,EAAgB,CAACviM,GAAIA,EAAEhB,SCP7C,GAAkB,CAC3BG,WAAY2Q,GACZ4E,YAAa,QACb0O,WAZG,SAAmB5pB,GACtB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,EAAEwG,GAAM4W,GACR,WAAEygC,EAAU,QAAEpxC,EAAO,IAAEkT,EAAG,WAAE69B,EAAU,gBAAEoE,GAAoB94B,EAE5DsrC,EAAW,GAA+B5tD,EAAEjB,MAAOs4C,EAAYpxC,EADnD,CAAC,EAAG,EAAG,GACgEkT,EAAKiiC,EAAiBpE,GACzGurJ,EAAiB,IAAInK,GAAcxqI,EAAU,OAAO,GAC1D,OAAO5vD,EAAQ2rL,gBAAgB4Y,EAAgB,CAACviM,GAAIA,EAAEhB,SCTnD,MAAMwjM,GACT,YAAY50I,GACRr0D,KAAKo6C,cAAgB,CAAC,KAAM,UAC5Bp6C,KAAKinD,YAAcoN,EAASjb,QAC5B,MAAM0F,EAAeuV,EAASvV,aACxBC,EAAcsV,EAAStV,YACvBC,EAAiBqV,EAASrV,eAC1BE,EAAwBmV,EAASnV,sBACjCE,EAAuBiV,EAASjV,qBAChC0jG,EAAS5jG,EAAwB,EAAImV,EAAShV,QAAQG,IACtDujG,EAAU3jG,EAAuB,EAAIiV,EAAShV,QAAQK,KACtDkiJ,EAAY1iJ,EAAwBE,EAAuB,EACjEp/C,KAAK85K,SAAW,oCACSh3B,MAAWC,kdAcZ7jG,uBACdF,uDAC8BF,6CAEZuV,EAAS/U,6IAKXF,+DACgBL,+CAEZsV,EAAS9U,uNAOfqiJ,2LAIKxiJ,kMAW9B,MAAM8pJ,GACT,YAAY70I,GACRr0D,KAAKo6C,cAAgB,CAAC,KAAM,UAC5Bp6C,KAAKinD,YAAcoN,EAASjb,QAC5B,MAAMkH,EAAc+T,EAAS/T,YACvBxB,EAAeuV,EAASvV,aACxBC,EAAcsV,EAAStV,YACvBwB,EAAgB8T,EAAS9T,cACzBvB,EAAiBqV,EAASrV,eAC1BC,EAAgBoV,EAASpV,cACzBuB,EAAuB6T,EAAS7T,qBAChCtB,EAAwBmV,EAASnV,sBACjCE,EAAuBiV,EAASjV,qBAChCulG,EAAWnkG,EAAuB,EAAI6T,EAAShV,QAAQqB,MACvDoiG,EAAS5jG,EAAwB,EAAImV,EAAShV,QAAQG,IACtDujG,EAAU3jG,EAAuB,EAAIiV,EAAShV,QAAQK,KACtDkiJ,EAAYphJ,EAAuBtB,EAAwBE,EAAuB,EACxFp/C,KAAK85K,SAAW,oCACSn1B,MAAa7B,MAAWC,wiBAiBzBviG,wBACbD,uDAC6BD,6CAEZ+T,EAAS5T,4IAKXvB,2BACZF,yDAC4BF,+CAEZuV,EAAS/U,sKAMXF,6BACZH,2DAC4BF,iDAEZsV,EAAS9U,8OAOfqiJ,kPAMT1iJ,OAA2BE,+BAC3BA,qNCpHlB,MAAM+pJ,GAAsB,CAC/BvjM,WAAY4Q,GACZ2E,YAAa,QACb0O,WAjBG,SAAuB5pB,GAC1B,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,GAAE4oB,EAAE,MAAEnK,GAAUrB,EAChB5W,EAAIiY,GACJ,WAAEo/B,EAAU,QAAEpxC,EAAO,IAAEkT,EAAG,gBAAEiiC,GAAoB94B,EAEhDsrC,EAAW,GAA+B5tD,EAAEjB,MAAOs4C,EAAYpxC,EADnD,CAAC,EAAG,EAAG,GACgEkT,EAAKiiC,GACxFunJ,EAA4B,IAAIvK,GAAcxqI,EAAU,OAAO,GAC/D2qG,EAAqBv6J,EAAQ2rL,gBAAgBgZ,EAA2B,CAAC3iM,GAAIA,EAAEhB,OAC/E4jM,EAAyB,IAAIH,GAAyB70I,GACtDltD,EAAS1C,EAAQ2rL,gBAAgBiZ,EAAwB,CAACxgL,EAAIm2I,GAAqBv4J,EAAEhB,OAE3F,OADAhB,EAAQi4I,8BAA8BsiB,GAC/B73J,ICIE,GAAoB,CAC7BvB,WAAY0Q,GACZ6E,YAAa,QACb0O,WAlBG,SAAqB5pB,GACxB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,GAAE4oB,EAAE,MAAEnK,EAAK,OAAEf,GAAWN,EACxB5W,EAAIiY,EACV,GAAiB,CAACA,EAAOf,GAAS,eAClC,MAAM,WAAEmgC,EAAU,QAAEpxC,EAAO,IAAEkT,EAAG,gBAAEiiC,GAAoB94B,EAChDsrC,EAAW,GAA+B5tD,EAAEjB,MAAOs4C,EAAYpxC,EAAS,EAAmBkT,EAAKiiC,GAEhGynJ,EAA0B,IAAIhL,GAAcjqI,EAAU,OADvC,GAEf+vF,EAAmB3/I,EAAQ2rL,gBAAgBkZ,EAAyB,CAAC7iM,GAAIA,EAAEhB,OAC3E8jM,EAAyB,IAAIN,GAAyB50I,GACtDltD,EAAS1C,EAAQ2rL,gBAAgBmZ,EAAwB,CAAC1gL,EAAIu7H,GAAmB39I,EAAEhB,OAEzF,OADAhB,EAAQi4I,8BAA8B0H,GAC/Bj9I,ICdE,GAA0B,CACnCvB,WAAY6Q,GACZ0E,YAAa,QACb0O,WAAY,EAAGxM,SAAQ0L,QAAOtkB,cAC1B,MAAM,EAAEgC,GAAM4W,GACR,WAAEygC,EAAU,QAAEpxC,EAAO,IAAEkT,EAAG,oBAAE2wC,GAAwBxnC,EACpDyuK,EAAe/yL,EACrB,EAA+B,IAAnBgC,EAAEjB,MAAM/G,QAAc,IAAM,uDAAuDgI,EAAEjB,MAAM/G,YACvG,MAAMi/C,EAAY,CAAC,EAAG,GACtB,EAAY,GAA4ChxC,EAASgxC,IAAY,IACzE,wEAAehxC,oBAA0BgxC,OAC7C,MAAM2W,EAAW,GAA+B5tD,EAAEjB,MAAOs4C,EAAYpxC,EAASgxC,EAAW99B,IAClFzY,EAAQqpD,GCdhB,SAA+B/pD,EAAG8pD,EAAqB8D,EAAU5vD,GACpE,IAAImvK,EAAU,IAAI0qB,GAAcjqI,EAAU,OAAO,GACjD,MAAMm1I,EAAa/kM,EAAQ2rL,gBAAgBxc,EAAS,CAACntK,GAAI,WAGzD,OAFAmtK,EAAU,IAAI0qB,GAAcjqI,EAAU,OAAO,GAAM,EAAM9D,GAElD,CAACi5I,EADY/kM,EAAQ2rL,gBAAgBxc,EAAS,CAACntK,GAAI,YDU5B,CAAsBA,EAAG8pD,EAAqB8D,EAAUmjI,GAClF,MAAO,CAACrwL,EAAQqpD,KEbX,GAAa,CACtB5qD,WAAY8Q,GACZyE,YAAa,QACb0O,WAAY,EAAGxM,SAAQ0L,QAAOtkB,cAC1B,MAAM,EAAEgC,GAAM4W,GACR,SAAEi/B,EAAQ,KAAEpyC,GAAS6e,EACrByuK,EAAe/yL,EACfgsC,EAAQhqC,EAAEjB,MAAM/G,OAChBmjF,EAAW,GAAoB13E,EAAMzD,EAAEjB,OAC7C,IAAIoF,EAAOg3E,EACX,MAAMggE,EAAe,GAAgCh3I,EAAM6lC,GACrDg5J,EAAwC,MAAhB7nD,EACxB6wC,EAAqB+E,EAAa/E,mBAAmB,CAAChsL,IACtDq6I,EAAgB,GACtB,IAAI4oD,EAAYjjM,EAChB,GAAIgjM,EAAuB,CACvB,GAAIhX,EAAoB,CACpB,MACMltL,EADWiyL,EAAatO,QAAQxnL,IAAIgoM,EAAU5kM,QAC5BS,OAClByE,EAAW,IAAIpL,MAAM6xC,GAC3B,IAAK,IAAI/xC,EAAI,EAAGA,EAAIsL,EAASvL,OAAQC,IACjCsL,EAAStL,GAAK+H,EAAEjB,MAAMo8I,EAAaljJ,IAEvC,MAAMirM,EAAkB3e,GAAiBzlL,EAAQkB,EAAEjB,MAAOiB,EAAEhB,MAAOm8I,EAAc53I,GACjF0/L,EAAYlS,EAAan9C,eAAerwI,EAAUvD,EAAEhB,OAC9B+xL,EAAatO,QAAQxnL,IAAIgoM,EAAU5kM,QAC3CS,OAASokM,OAGvBD,EAAY,GAAcjjM,EAAGm7I,EAAc41C,GAE/C12C,EAAc39I,KAAKumM,GACnB9+L,EAAO,GAA8BA,EAAKnM,OAAQgyC,GAEtD,GAAwC,MAAO7lC,EAAM6lC,GACrD,MAAOm5J,EAAc/nD,GAAe,GAAuC6nD,EAAUlkM,MAAOoF,GAC5F,IAAIwmC,EAAWw4J,EACXttJ,IAEAlL,EAAW,GAAkCw4J,EAAchoH,IAE/D,MAAM93D,ECzCP,SAAkBrjB,EAAGo7I,EAAazwG,EAAU3sC,GAC/C,MAAMsyE,EAAS,GAAmB8qE,GAG5By5C,EAAgB,GAAQ,CAAEj+K,OAAQ,CAAE5W,KAAKsiB,MAAO,CAAEvjB,MAAO,CAFjD,GAAmBiB,EAAEjB,OACTuxE,EACiDA,IAAWtyE,YAChF82L,EAAUtuL,GAAOquL,EAAe,UAAW,OAAQ72L,GACnDskM,EAAiB,GAAQ,CAAE1rL,OAAQ,CAAE5W,EAAG80L,GAAWxyK,MAAO,CAAEvjB,MAAO4rC,GAAY3sC,YAGrF,OAFAA,EAAQi4I,8BAA8B4+C,GACtC72L,EAAQi4I,8BAA8B6+C,GAC/BwN,EDgCSc,CAASH,EAAW7nD,EAAazwG,EAAUomJ,GACvD,IAAK,MAAM94L,KAAKoiJ,EACZ02C,EAAa96C,8BAA8Bh+I,GAE/C,OAAOorB,IEXF,GAAY,CACrBlkB,WAAY+Q,GACZwE,YAAa,QACb0O,WApCG,SAAa5pB,GAChB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,EAAEwG,GAAM4W,GACR,KAAEnT,EAAI,SAAEoyC,GAAavzB,EACrB0nB,EAAQhqC,EAAEjB,MAAM/G,OAChBmjF,EAAW,GAAoB13E,EAAMzD,EAAEjB,OAC7C,IAAIoF,EAAOg3E,EACX,MAAMggE,EAAe,GAAgCh3I,EAAM6lC,GAC3D,IAAImkH,EAAYnuJ,EACI,MAAhBm7I,IACAgT,EAAY,GAAU,CAAEv3I,OAAQ,CAAE5W,KAAKhC,UAASskB,MAAO,CAAEkgB,KAAM24G,KAC/Dh3I,EAAO,GAA8BA,EAAKnM,OAAQgI,EAAEjB,MAAM/G,SAE9D,GAAwC,MAAOmM,EAAM6lC,GACrD,MAAOW,EAAUywG,GAAe,GAAuC+S,EAAUpvJ,MAAOoF,GAElFmyL,EAAM,GAAQ,CAAE1/K,OAAQ,CAAE5W,EAAGmuJ,GAAanwJ,UAASskB,MAAO,CAAEvjB,MAAO,EAAE,EAD5D,GAAmBq8I,OAE5B05C,EAAUtuL,GAAO8vL,EAAKA,EAAIt3L,MAAO,MAAOhB,GAC9C,IAAI2jB,EAaJ,OAVIA,EAAM,GAFNk0B,EAEc,CAAEj/B,OAAQ,CAAE5W,EAAG80L,GAAW92L,UAASskB,MAAO,CAAEvjB,MADzC,GAAkC4rC,EAAUwwC,KAI/C,CAAEvkE,OAAQ,CAAE5W,EAAG80L,GAAW92L,UAASskB,MAAO,CAAEvjB,MAAO4rC,KAErE3sC,EAAQi4I,8BAA8BqgD,GACtCt4L,EAAQi4I,8BAA8B6+C,GAClB,MAAhB35C,GACAn9I,EAAQi4I,8BAA8BkY,GAEnCxsI,ICpBE,GAAU,GAAiB,CACpCumK,UAXY,kFAYZ2I,gBATmB,oTAUnBC,cAAerN,KAEN,GAAgB,CACzBtkL,WAAYgR,GACZuE,YAAa,QACb0O,WAAY,ICtBT,MAAMigL,GACT,YAAYl5J,EAAQugB,EAAUC,GAC1BpxD,KAAKo6C,cAAgB,CAAC,KACtBp6C,KAAKinD,YAAckK,EAAS/mD,KAAI,CAAC7G,EAAG7E,IAAM6E,EAAE,GAAqBqtC,EAAOlyC,GAAK6E,EAAE,KAC/E,MAAM4G,EAAOymC,EAAOnyC,OACdgH,EAAQk/K,GAAkBx6K,GAC1BqC,EAAQ2kD,EAAS/mD,KAAI7G,GAAKA,EAAE,KAAIyM,KAAK,KACrC0Q,EAAMywC,EAAS/mD,KAAI,CAAC7G,EAAG7E,IAAM6E,EAAE,GAAKqtC,EAAOlyC,KAAIsR,KAAK,KACpD+5L,EAAiB,CAAC,YAAa,YAAa,YAAa,aAAa1lM,MAAM,EAAG8F,GAC/EyC,EAAkB,YAATwkD,EAAqB,EAAI,EAkBxCpxD,KAAK85K,SAjBQ,IAAT3vK,EAiBY,WAChB1E,aAAiBA,KAAS+G,cAC1B/G,WAAeA,KAASib,uCAGtBjb,4DACoB0E,kGAEmByC,oGAEIA,uCAG3CnH,oDACeskM,sBA9BG,yBACNv9L,yBACFkU,8IAKoB9T,qFAEIA,gFCoBrC,MAAMo9L,GACT,YAAYp5J,EAAQugB,EAAUC,GAC1BpxD,KAAKo6C,cAAgB,CAAC,KACtBp6C,KAAKw5K,cAAe,EACpBx5K,KAAKy5K,cAAe,EACpBz5K,KAAKinD,YAAckK,EAAS/mD,KAAI,CAAC7G,EAAG7E,IAAM6E,EAAE,GAAqBqtC,EAAOlyC,GAAK6E,EAAE,KAC/E,MAAM4G,EAAOymC,EAAOnyC,OACdgH,EAAQk/K,GAAkBx6K,GAC1BqC,EAAQ2kD,EAAS/mD,KAAI7G,GAAKA,EAAE,KAAIyM,KAAK,KACrC0Q,EAAMywC,EAAS/mD,KAAI,CAAC7G,EAAG7E,IAAM6E,EAAE,GAAKqtC,EAAOlyC,KAAIsR,KAAK,KACpD8vJ,EAASqrB,GAAY,KAAMhhL,GAC3BiuI,EAAS+yC,GAAY,SAAUhhL,GAC/B8/L,EAAS,GAAGnqC,EAAO31J,EAAO,QAAQnK,KAAKinD,YAAY98C,EAAO,KAC1D+1E,EAAqB,IAAT/1E,EAAa,SAAW,QAAQiuI,EAAO/zI,OAAO,GAAG2L,UAC7DpD,EAAkB,YAATwkD,EAAqB,EAAI,EACxC,IAAImpH,EAAW,GACf,GAAa,IAATpwK,EAAY,CACZ,MAAM+/L,EAAW,aACnBzkM,0FAEgCmH,wFAEIA,kDAIlC2tK,EAAW,aACb90K,8BACAykM,0CAC4B9xD,EAAOpoI,YAAYkwE,gBAC/C4/E,EAAO31J,EAAO,wBACX8/L,mBACDC,4CAC4B9xD,EAAOpoI,YAAYkwE,6BAI9C,CACD,MAAMgqH,EAAW,aACnBzkM,2BACAA,UAAcA,wCACdA,WAAeA,8CACfA,0GAEmCmH,yDACKA,wCAGtC2tK,EAAW,aACb90K,8BACAykM,0CAC4B9xD,EAAOpoI,YAAYkwE,gBAC/C4/E,EAAO31J,EAAO,wBACX8/L,mBACDC,4CAC4B9xD,EAAOpoI,YAAYkwE,oDAGjD4/E,EAAO31J,EAAO,wBACX21J,EAAO31J,EAAO,QAAQnK,KAAKinD,YAAY98C,EAAO,oBAC/C+/L,4CAC4B9xD,EAAOpoI,YAAYkwE,kBAC/C4/E,EAAO31J,EAAO,0BACX8/L,qBACDC,8CAC4B9xD,EAAOpoI,YAAYkwE,sCAKrDlgF,KAAK85K,SAAW,iBACVr0K,aAAiBA,KAAS+G,oBAC1B/G,WAAeA,KAASib,uCAG5Bjb,8EAEA80K,gDCnHH,MASM,GAAkB,CAC3B30K,WAAYiR,GACZsE,YAAa,QACb0O,WAZ+B,EAAGxM,SAAQ5Y,UAASskB,YACnD,MAAM,EAAEtiB,GAAM4W,GACR,SAAE8zC,EAAQ,KAAEC,GAASroC,EACrB6qJ,EAAU,KAAMh4J,QAAQ,+BAC1B,IAAIouL,GAAuBvjM,EAAEjB,MAAO2rD,EAAUC,GAC9C,IAAI04I,GAAiBrjM,EAAEjB,MAAO2rD,EAAUC,GAE5C,OADe3sD,EAAQ2rL,gBAAgBxc,EAAS,CAACntK,GAAIA,EAAEhB,SCG9C,GAAM,GAAiB,CAChCkpL,UAVQ,iDAWR2I,gBATe,0RAWN,GAAY,CACrB1xL,WAAYkR,GACZqE,YAAa,QACb0O,WAAY,ICnBT,MAAMsgL,GACT,YAAY1rJ,EAAW8T,EAAaH,GAChCpyD,KAAKo6C,cAAgB,CAAC,SACtBp6C,KAAKinD,YAAc,CAACxI,EAAW2T,GAC/BpyD,KAAK85K,SAAW,6NAUMvnH,EAAc,sPAUlBA,EAAc,sBAIpC,mBAAmBF,GACf,MAAO,CAAC25H,EAAOoI,KACS,MAAhBp0L,KAAKoqM,UACLpqM,KAAKoqM,QAAUpe,EAAMjL,mBAAmBqT,EAAc,SAE1DpI,EAAMlc,GAAG8kB,UAAU50L,KAAKoqM,QAAS/3I,KC7B7C,MA0Bag4I,GAAU,GAAiB,CAAE1b,UA1B9B,oDA0B8C2I,gBAnBvC,uTAmBoEV,kBAAkB,IAC5F,GAAgB,CACzBhxL,WAAYkO,GACZqH,YAAa,QACb0O,WAAYwgL,IC/BVC,GAAM,gBACC,GAAM,GAAiB,CAChC3b,UAAW2b,GACXhT,gBAAiBgT,GACjB7S,iBAAiB,EACjBF,cAAe,KAEN,GAAY,CACrB3xL,WAAYmU,GACZoB,YAAa,QACb0O,WAAY,ICNT,SAAS,GAAQ5pB,GACpB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,OAAEmuD,GAAW/wC,GACb,IAAEk8B,GAAQxwB,EACVne,EAAO,GAAoB,CAAC2uC,GAAM6U,EAAO5oD,OACzC46J,EAAW,GAAI,CACjB/iJ,OAAQ,CAAE5W,EAAG2nD,GACb3pD,UACAskB,MAAO,CAAEilC,iBAAkBpjD,EAAM0xC,UAAU,KAEzC+jH,EAAgB,GAAkCD,EAAS56J,MAAOoF,GAClE2/L,EAAoB,GAAQ,CAAEltL,OAAQ,CAAE5W,EAAG25J,GAAY37J,UAASskB,MAAO,CAAEvjB,MAAO66J,KAChFt5J,EAAI,GAAI,CAAEsW,OAAQ,CAAEtW,EAAWC,EAAGujM,GAAqB9lM,YACvDuC,EAAI,GAAI,CAAEqW,OAAQ,CAAE5W,EAAGM,GAAKtC,YAC5B87J,EAAS,GAAI,CAAEljJ,OAAQ,CAAE5W,EAAGO,GAAKvC,UAASskB,MAAO,CAAE7e,KAAMU,EAAM0xC,UAAU,KACzEkuJ,EAAiB,GAAQ,CAAEntL,OAAQ,CAAE5W,EAAG85J,GAAU97J,UAASskB,MAAO,CAAEvjB,MAAO66J,KAC3Ej4I,EAAMiiL,GAAQ,CAAEhtL,OAAQ,CAAEtW,EAAGC,EAAGA,EAAGwjM,GAAkB/lM,YAO3D,OANAA,EAAQi4I,8BAA8B0jB,GACtC37J,EAAQi4I,8BAA8B6tD,GACtC9lM,EAAQi4I,8BAA8B31I,GACtCtC,EAAQi4I,8BAA8B11I,GACtCvC,EAAQi4I,8BAA8B6jB,GACtC97J,EAAQi4I,8BAA8B8tD,GAC/BpiL,EAEJ,MAAM,GAAgB,CACzBxiB,WAAY4T,GACZ2B,YAAa,QACb0O,WAAY,ICfH,GAAoB,CAC7BjkB,WAAYmR,GACZoE,YAAa,QACb0O,WApBG,SAAqB5pB,GACxB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,OAAEmuD,GAAW/wC,GACb,WAAE+0C,EAAU,KAAEC,EAAI,WAAEC,GAAevpC,EACnC0hL,EAAQn4I,EACVlE,EACA,GAAQ,CAAE/wC,OAAQ,CAAE+wC,UAAU3pD,UAASskB,MAAO,CAAEwwB,IAAK6U,EAAO5oD,MAAM/G,OAAS,KACzEggD,EAAYgsJ,EAAMjlM,MAAM,GACxB+sD,EAAck4I,EAAMjlM,MAAM,GAC1BouK,EAAU,IAAIu2B,GAAmB1rJ,EAAW8T,EAAaH,GACzD6gI,EAAcrf,EAAQ4sB,mBAAmBnuI,GACzCjqC,EAAM3jB,EAAQ2rL,gBAAgBxc,EAAS,CAAC62B,GAAQ,QAASxX,GAI/D,OAHK3gI,GACD7tD,EAAQi4I,8BAA8B+tD,GAEnCriL,ICdLsiL,GAAM,aAoBC,GAAY,CACrB9kM,WAAYqR,GACZkE,YAAa,QACb0O,WApBG,SAAa5pB,GAChB,MAAM,OAAEod,EAAM,QAAE5Y,GAAYxE,GACtB,EAAEwG,GAAM4W,EACd,GAAI5Y,EAAQguL,mBAAmB,CAAChsL,IAAK,CACjC,MAAMo4I,EAAQp6I,EAAQykL,QAAQxnL,IAAI+E,EAAE3B,SAC7B4tL,EAAW1oL,GAAYogL,GAAWvrC,EAAMt5I,OAAQkB,EAAEjB,MAAOiB,EAAEhB,OAClE,OAAOhB,EAAQ41I,eAAerwI,EAAUvD,EAAEhB,MAAOitL,GAErD,IAAI9e,EAOJ,OALIA,EADA,KAAMh4J,QAAQ,+BACJ,IAAIkzK,GAAqBroL,EAAEjB,MAAOklM,IAGlC,IAAIhc,GAAejoL,EAAEjB,MAAOklM,IAEnCjmM,EAAQ2rL,gBAAgBxc,EAAS,CAACntK,GAAIA,EAAEhB,SCrB7C,GAA0B,GAYnB,GAA4B,CACrCG,WAAYuR,GACZgE,YAAa,QACb0O,WAdG,SAA6B5pB,GAChC,GAAkB,iGAElB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,MAAEmmE,EAAK,OAAEgB,GAAW/pD,GACpB,cAAEgqD,EAAa,aAAEC,EAAY,eAAEC,GAAmBx+C,EAClDssD,EAAY5wE,EAAQod,SAASukD,EAAMthE,QACnCwwE,EAAa7wE,EAAQod,SAASulD,EAAOtiE,SACrC,gBAAEokE,GAAoB,GAAwBmM,EAAWC,EAAYjO,EAAeC,EAAcC,GACxG,OAAO9iE,EAAQ41I,eAAe,CAACnxE,EAAgBzqE,QAAS,QAAS,IAAIwM,WAAWi+D,MCV9E,GAA0B,GAenB,GAA4B,CACrCtjE,WAAYwR,GACZ+D,YAAa,QACb0O,WAjBG,SAA6B5pB,GAChC,GAAkB,iGAElB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,MAAEmmE,EAAK,OAAEgB,GAAW/pD,GACpB,cAAEgqD,EAAa,aAAEC,EAAY,eAAEC,EAAc,mBAAEkB,GAAuB1/C,EACtEssD,EAAY5wE,EAAQod,SAASukD,EAAMthE,QACnCwwE,EAAa7wE,EAAQod,SAASulD,EAAOtiE,SACrC,gBAAEokE,EAAe,aAAEQ,GAAiB,GAAwB2L,EAAWC,EAAYjO,EAAeC,EAAcC,EAAgBkB,GACtI,MAAO,CACHhkE,EAAQ41I,eAAe,CAACnxE,EAAgBzqE,QAAS,QAAS,IAAIwM,WAAWi+D,IACzEzkE,EAAQ41I,eAAe,GAAI,QAAS,IAAIpvI,WAAW,CAACy+D,QCZtD,GAA0B,GAmBnB,GAA4B,CACrC9jE,WAAYyR,GACZ8D,YAAa,QACb0O,WArBG,SAA6B5pB,GAChC,GAAkB,iGAElB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,MAAEmmE,EAAK,OAAEgB,GAAW/pD,GACpB,cAAEgqD,EAAa,aAAEC,EAAY,eAAEC,EAAc,aAAEC,GAAiBz+C,EAChEssD,EAAY5wE,EAAQod,SAASukD,EAAMthE,QACnCwwE,EAAa7wE,EAAQod,SAASulD,EAAOtiE,QACrC28J,EAAmBp6F,EACnBq6F,EAAkBp6F,EAClBq6F,EAAoBp6F,EACpBq6F,EAAkBp6F,GAClB,gBAAE0B,EAAe,eAAEC,GAAmB,GAAwBkM,EAAWC,EAAYmsF,EAAkBC,EAAiBC,EAAmBC,GACjJ,MAAO,CACHn9J,EAAQ41I,eAAe,CAACnxE,EAAgBzqE,QAAS,QAAS,IAAIwM,WAAWi+D,IACzEzkE,EAAQ41I,eAAe,CAAClxE,EAAe1qE,QAAS,UAAW,IAAIuM,aAAam+D,OCjB7E,MAAMwhI,GACT,YAAYC,EAAYhiK,EAAOC,EAASC,GACpC9oC,KAAKo6C,cAAgB,CAAC,WACtBp6C,KAAKinD,YAAc,CAAC2jJ,EAAYhiK,GAChC5oC,KAAK85K,SAAW,mJAIMhxI,aAAoBD,yECL3C,MAcM,GAAe,CACxBjjC,WAAY2R,GACZ4D,YAAa,QACb0O,WAjBmB5pB,IACnB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,QAAE0wB,GAAYtT,GACd,MAAEurB,EAAK,QAAEC,EAAO,SAAEC,GAAa/f,EAC/B+2D,EAAc,GAAmBnvD,EAAQnrB,OACzCouK,EAAU,IAAI+2B,GAAc7qH,EAAal3C,EAAOC,EAASC,GACzDuuC,EAAW,GAAQ,CAAEh6D,OAAQ,CAAE5W,EAAGkqB,GAAWlsB,UAASskB,MAAO,CAAEvjB,MAAO,CAACs6E,MACvE34E,EAAS1C,EAAQ2rL,gBAAgBxc,EAAS,CAACv8F,GAAW1mD,EAAQlrB,OACpEhB,EAAQi4I,8BAA8BrlE,GACtC,MACMvtD,EAAM,GAAQ,CAAEzM,OAAQ,CAAE5W,EAAGU,GAAU1C,UAASskB,MAAO,CAAEvjB,MAD9C,IAAImrB,EAAQnrB,MAAOojC,MAGpC,OADAnkC,EAAQi4I,8BAA8Bv1I,GAC/B2iB,ICVJ,SAAS,GAAU7pB,GACtB,MAAM,OAAEod,EAAM,QAAE5Y,GAAYxE,GACtB,EAAEwG,GAAM4W,EACd,GAAgB,cAAZ5W,EAAEhB,MAAuB,CACzB,MAAMk3I,EAAW,GAAK,CAAEt/H,OAAQ,CAAEqB,MAAOjY,GAAKhC,YACxCwC,EAAI,GAAU,CAAEoW,OAAQ,CAAE5W,EAAGk2I,GAAYl4I,YACzCw9J,EAAW,GAAK,CAAE5kJ,OAAQ,CAAEqB,MAAOjY,GAAKhC,YACxC/F,EAAI,GAAU,CAAE2e,OAAQ,CAAE5W,EAAGw7J,GAAYx9J,YACzC0C,EAAS,GAAQ,CAAEkW,OAAQ,CAAE8U,KAAMlrB,EAAGmrB,KAAM1zB,GAAK+F,YAKvD,OAJAA,EAAQi4I,8BAA8BC,GACtCl4I,EAAQi4I,8BAA8Bz1I,GACtCxC,EAAQi4I,8BAA8BulB,GACtCx9J,EAAQi4I,8BAA8Bh+I,GAC/ByI,EAGP,OAAO,GAAK,CACR4hB,MAAO,CACHvjB,MAAOiB,EAAEjB,MACTC,MAAOgB,EAAEhB,MACT/F,MAAmB,WAAZ+G,EAAEhB,MAAqB,GAAK,GAEvChB,YAIL,MAAM,GAAkB,CAC3BmB,WAAY6U,GACZU,YAAa,QACb0O,WAAY,ICJH,GAAiB,CAC1BjkB,WAAY0R,GACZ6D,YAAa,QACb0O,WA3BG,SAAS,EAAS5pB,GACrB,MAAM,OAAEod,EAAM,QAAE5Y,GAAYxE,GACtB,EAAEwG,GAAM4W,EACd,GAAgB,WAAZ5W,EAAEhB,MACF,MAAM,IAAII,MAAM,gDAEf,GAAgB,cAAZY,EAAEhB,MAAuB,CAC9B,MAAMk3I,EAAW,GAAK,CAAEt/H,OAAQ,CAAEqB,MAAOjY,GAAKhC,YACxCwC,EAAI,EAAS,CAAEoW,OAAQ,CAAE5W,EAAGk2I,GAAYl4I,YACxCw9J,EAAW,GAAK,CAAE5kJ,OAAQ,CAAEqB,MAAOjY,GAAKhC,YACxC/F,EAAI,GAAU,CAAE2e,OAAQ,CAAE5W,EAAGw7J,GAAYx9J,YACzC0C,EAAS,GAAQ,CAAEkW,OAAQ,CAAE8U,KAAMlrB,EAAGmrB,KAAM1zB,GAAK+F,YAKvD,OAJAA,EAAQi4I,8BAA8BC,GACtCl4I,EAAQi4I,8BAA8Bz1I,GACtCxC,EAAQi4I,8BAA8BulB,GACtCx9J,EAAQi4I,8BAA8Bh+I,GAC/ByI,EAKP,OAAO,GAAK,CAAE4hB,MAAO,CAAEvjB,MAAOiB,EAAEjB,MAAOC,MAAOgB,EAAEhB,MAAO/F,MAAO,GAAK+E,cCF9D,GAAa,CACtBmB,WAAY4R,GACZ2D,YAAa,QACb0O,WAzBG,SAAc5pB,GACjB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,KAAEiK,GAAS6e,EACjB,GAAsB,IAAlB1L,EAAO5e,OACP,OAAO,GAAW,CAAE4e,OAAQ,CAAEqB,MAAOrB,EAAO,IAAM5Y,UAASskB,MAAO,CAAEwwB,IAAKrvC,KAE7E,MAAM1E,EAAQ6X,EAAO,GAAG7X,MAClBC,EAAQ4X,EAAO,GAAG5X,MACxB4X,EAAOrR,SAAQ6D,IACX,GAAuBrK,EAAOqK,EAAErK,MAAO,yDACvC,EAAYC,IAAUoK,EAAEpK,OAAO,IAAM,6DAEzC,MAAMy8I,EAA0B,GAM1B/6I,EAAS,GAAO,CAAEkW,OALAA,EAAOjT,KAAIyF,IAC/B,MAAMwyJ,EAAY,GAAW,CAAEhlJ,OAAQ,CAAEqB,MAAO7O,GAAKpL,UAASskB,MAAO,CAAEwwB,IAAKrvC,KAE5E,OADAg4I,EAAwB/+I,KAAKk/J,GACtBA,KAEsC59J,UAASskB,MAAO,CAAE7e,UAEnE,OADAg4I,EAAwBl2I,SAAQ6D,GAAKpL,EAAQi4I,8BAA8B7sI,KACpE1I,ICtBJ,MAAM0jM,GACT,YAAYj6J,EAAQugB,EAAUmC,GAC1BtzD,KAAKo6C,cAAgB,CAAC,KACtBp6C,KAAKinD,YAAckK,EAAS/mD,KAAI,CAAC7G,EAAG7E,IAAM6E,EAAE,GAAqBqtC,EAAOlyC,GAAK6E,EAAE,KAC/E,MAAM4G,EAAOymC,EAAOnyC,OACdglB,EAAOkhK,GAAkBx6K,GACzBqC,EAAQ2kD,EAAS/mD,KAAI7G,GAAKA,EAAE,KAAIyM,KAAK,KACrC0Q,EAAMywC,EAAS/mD,KAAI,CAAC7G,EAAG7E,IAAM6E,EAAE,GAAKqtC,EAAOlyC,KAAIsR,KAAK,KACpD+5L,EAAiB,CAAC,YAAa,YAAa,YAAa,aAAa1lM,MAAM,EAAG8F,GAkBrFnK,KAAK85K,SAjBQ,IAAT3vK,EAiBY,WAChBsZ,aAAgBA,KAAQjX,cACxBiX,WAAcA,KAAQ/C,mEAIpB+C,wKAIEA,sDACesmL,iCA3BC,yBACNv9L,yBACFkU,kRA8BhB,mBAAmBhhB,GACf,MAAO,CAACssL,EAAOoI,KACU,MAAjBp0L,KAAKonM,WACLpnM,KAAKonM,SAAWpb,EAAMiU,0BAA0B7L,EAAc,UAElEpI,EAAMlc,GAAG8kB,UAAU50L,KAAKonM,SAAU1nM,KC9CvC,MAAMorM,GACT,YAAYl6J,EAAQugB,EAAUmC,GAC1BtzD,KAAKo6C,cAAgB,CAAC,KACtBp6C,KAAKw5K,cAAe,EACpBx5K,KAAKy5K,cAAe,EACpBz5K,KAAKinD,YAAckK,EAAS/mD,KAAI,CAAC7G,EAAG7E,IAAM6E,EAAE,GAAqBqtC,EAAOlyC,GAAK6E,EAAE,KAC/E,MAAM4G,EAAOymC,EAAOnyC,OACdgH,EAAQk/K,GAAkBx6K,GAC1BqC,EAAQ2kD,EAAS/mD,KAAI7G,GAAKA,EAAE,KAAIyM,KAAK,KACrC0Q,EAAMywC,EAAS/mD,KAAI,CAAC7G,EAAG7E,IAAM6E,EAAE,GAAKqtC,EAAOlyC,KAAIsR,KAAK,KACpD8vJ,EAASqrB,GAAY,KAAMhhL,GAC3BiuI,EAAS+yC,GAAY,SAAUhhL,GAC/B8/L,EAAS,GAAGnqC,EAAO31J,EAAO,QAAQnK,KAAKinD,YAAY98C,EAAO,KAC1D+1E,EAAqB,IAAT/1E,EAAa,SAAW,QAAQiuI,EAAO/zI,OAAO,GAAG2L,UAC7D+6L,EAAiB,CACnB,GAAGtlM,oBAAyB,GAAGq6J,EAAO31J,EAAO,uBAC7C8/L,eAES,IAAT9/L,EAAa,GAAK,qCAErB21J,EAAO31J,EAAO,uBACX21J,EAAO31J,EAAO,QAAQnK,KAAKinD,YAAY98C,EAAO,QACrC,IAATA,EAAa,GAAK,KAAK21J,EAAO31J,EAAO,yBACnC8/L,QAEAe,EAAuB,IAAT7gM,EAChB,0BACA,6DACJ,IAAIowK,EAAW,GACf,IAAK,IAAI77K,EAAI,EAAGoM,EAAa,IAATX,EAAa,EAAI,EAAGzL,EAAIoM,EAAGpM,IAC3C67K,GAAY,aACdwwB,EAAersM,mBACXssM,0BACKtsM,mDAEP+G,4CACO/G,wBAAwB05I,EAAOpoI,YAAYkwE,yBAItDq6F,GAAsB,IAATpwK,EAAa,KAAO,KACjCnK,KAAK85K,SAAW,iBACVr0K,aAAiBA,KAAS+G,oBAC1B/G,WAAeA,KAASib,mEAI5Bjb,8EAEA80K,+CAKN,mBAAmB76K,GACf,MAAO,CAACssL,EAAOoI,KACU,MAAjBp0L,KAAKonM,WACLpnM,KAAKonM,SAAWpb,EAAMiU,0BAA0B7L,EAAc,UAElEpI,EAAMlc,GAAG8kB,UAAU50L,KAAKonM,SAAU1nM,KC1DvC,MAAM,GAASO,IAClB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,EAAEwG,GAAM4W,GACR,SAAE8zC,EAAQ,cAAEmC,GAAkBvqC,EAC9B6qJ,EAAU,KAAMh4J,QAAQ,+BAC1B,IAAIkvL,GAAiBrkM,EAAEjB,MAAO2rD,EAAUmC,GACxC,IAAIu3I,GAAWpkM,EAAEjB,MAAO2rD,EAAUmC,GAChC2/H,EAAcrf,EAAQ4sB,mBAAmBltI,GAC/C,OAAO7uD,EAAQ2rL,gBAAgBxc,EAAS,CAACntK,GAAIA,EAAEhB,MAAOwtL,IAE7C,GAAc,CACvBrtL,WAAY6R,GACZ0D,YAAa,QACb0O,WAAY,ICeH,GAAM,GAAiB,CAAE8kK,UA5B1B,4LA4B0C2I,gBAlBnC,m1BAmBN,GAAY,CACrB1xL,WAAY+R,GACZwD,YAAa,QACb0O,WAAY,ICUH,GAAa,CACtBjkB,WAAYiS,GACZsD,YAAa,QACb0O,WA3CG,SAAc5pB,GACjB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,EAAEwG,GAAM4W,GACR,KAAEnT,EAAI,SAAEoyC,GAAavzB,EACrB0nB,EAAQhqC,EAAEjB,MAAM/G,OAChB+gK,EAAY,GACZ59E,EAAW,GAAoB13E,EAAMzD,EAAEjB,OAC7C,IAAIoF,EAAOg3E,EACX,MAAMggE,EAAe,GAAgCh3I,EAAM6lC,GAC3D,IAOIroB,EAPAwsI,EAAYnuJ,EAQhB,GAPoB,MAAhBm7I,IACAgT,EAAY,GAAU,CAAEv3I,OAAQ,CAAE5W,KAAKhC,UAASskB,MAAO,CAAEkgB,KAAM24G,KAC/Dh3I,EAAO,GAA8BA,EAAKnM,OAAQgyC,GAClD+uH,EAAUr8J,KAAKyxJ,IAEnB,GAAwC,OAAQhqJ,EAAM6lC,GAElDhsC,EAAQguL,mBAAmB,CAAC79B,IAAa,CACzC,MAAM96F,EAAQr1D,EAAQykL,QAAQxnL,IAAIkzJ,EAAU9vJ,QAAQS,QAC9C,QAAEo1I,EAAO,SAAEvpG,EAAQ,SAAEuxH,GAAa0nB,GAAYz1B,EAAUpvJ,MAAOovJ,EAAUnvJ,MAAOq0D,EAAOlvD,GAC7Fwd,EAAM3jB,EAAQ41I,eAAejpG,EAAUuxH,EAAUhoB,OAEhD,CACD,MAAOvpG,EAAUywG,GAAe,GAAuC+S,EAAUpvJ,MAAOoF,GAClFmsE,EAAS,GAAmB8qE,GAC5Bk7C,EAAM,GAAQ,CAAE1/K,OAAQ,CAAE5W,EAAGmuJ,GAAanwJ,UAASskB,MAAO,CAAEvjB,MAAO,EAAE,EAAGuxE,MAExEwkH,EAAUtuL,GAAO8vL,EADHv5K,GAAW/c,EAAEhB,OACQ,OAAQhB,GACjD2jB,EAAM,GAAQ,CAAE/K,OAAQ,CAAE5W,EAAG80L,GAAW92L,UAASskB,MAAO,CAAEvjB,MAAO4rC,KACjEouH,EAAUr8J,KAAK45L,GACfv9B,EAAUr8J,KAAKo4L,GAEnB,GAAIj/I,EAAU,CACVkjH,EAAUr8J,KAAKilB,GACf,MAAMpe,EAAW,GAAkCoe,EAAI5iB,MAAOo8E,GAC9Dx5D,EAAM,GAAQ,CAAE/K,OAAQ,CAAE5W,EAAG2hB,GAAO3jB,UAASskB,MAAO,CAAEvjB,MAAOwE,KAGjE,OADAw1J,EAAUxzJ,SAAQ6D,GAAKpL,EAAQi4I,8BAA8B7sI,KACtDuY,ICzCE,GAASnoB,IAClB,MAAM,QAAEwE,EAAO,MAAEskB,GAAU9oB,GACrB,MAAEuM,EAAK,KAAE0jC,EAAI,KAAE8nB,EAAI,MAAEvyD,GAAUsjB,EAC/BxjB,EAAS+kL,GAAa99K,EAAO0jC,EAAM8nB,EAAMvyD,GAC/C,OAAOhB,EAAQ41I,eAAe,CAAC90I,EAAO9G,QAASgH,EAAOF,IAE7C,GAAc,CACvBK,WAAYkS,GACZqD,YAAa,QACb0O,WAAY,ICRH,GAAa,GAAgB,CAAE8kK,UADzB,oBAEN,GAAmB,CAC5B/oL,WAAYoS,GACZmD,YAAa,QACb0O,WAAY,ICUH,GAAO,GAAgB,CAAE8kK,UAdzByJ,2DAc0Cd,gBAXnC,mRAYP,GAAa,CACtB1xL,WAAYqS,GACZkD,YAAa,QACb0O,WAAY,ICJH,GAAQ,GAAgB,CAAE8kK,UAdzByJ,qEAc2Cd,gBAXpC,kSAYR,GAAc,CACvB1xL,WAAY2S,GACZ4C,YAAa,QACb0O,WAAY,ICrBT,MAAMohL,GACT,YAAYtsL,EAAYukJ,EAAWC,EAAU53F,EAAcC,GACvDxrE,KAAKo6C,cAAgB,CAAC,KACtBp6C,KAAKinD,YAAc,GACnB,MAAOsU,EAAO6nG,EAAWC,EAAUz6H,GAASjqB,EAC5C3e,KAAKinD,YAAc,CAACsU,EAAO2nG,EAAWC,EAAUv6H,GAChD,MAAMsiK,EAAkB,CACnB3/H,GAAgB23F,EAAY,EAAKE,EAAY,EAAIA,EACjD73F,GAAgB43F,EAAW,EAAKE,EAAW,EAAIA,GAE9C8nC,EAAmB,CACpB5/H,GAAgB23F,EAAY,EAAKA,EAAY,EAAIA,EACjD33F,GAAgB43F,EAAW,EAAKA,EAAW,EAAIA,GAEpD,IAAIioC,EAEAA,EADA5/H,EAEI,wEAIgB,8CAExBxrE,KAAK85K,SAAW,yEAEZoxB,EAAgB,GAAKC,EAAiB,kBACtCD,EAAgB,GAAKC,EAAiB,8CACX/nC,QAAgBC,4OASpB+nC,8zBCpC5B,MAAMC,GACT,YAAY1sL,EAAYukJ,EAAWC,EAAU53F,EAAcC,GACvDxrE,KAAKo6C,cAAgB,CAAC,KACtBp6C,KAAKw5K,cAAe,EACpBx5K,KAAKy5K,cAAe,EACpBz5K,KAAKinD,YAAc,GACnB,MAAOsU,EAAO6nG,EAAWC,EAAUz6H,GAASjqB,EAC5C3e,KAAKinD,YAAc,CAACsU,EAAO2nG,EAAWC,EAAUv6H,GAChD,MAAMsiK,EAAkB,CACnB3/H,GAAgB23F,EAAY,EAAKE,EAAY,EAAIA,EACjD73F,GAAgB43F,EAAW,EAAKE,EAAW,EAAIA,GAE9C8nC,EAAmB,CACpB5/H,GAAgB23F,EAAY,EAAKA,EAAY,EAAIA,EACjD33F,GAAgB43F,EAAW,EAAKA,EAAW,EAAIA,GAEpD,IAAIioC,EAEAA,EADA5/H,EACoB,wEAIA,8CAExBxrE,KAAK85K,SAAW,yEAEZoxB,EAAgB,GAAKC,EAAiB,kBACtCD,EAAgB,GAAKC,EAAiB,kBACtCD,EAAgB,GAAKC,EAAiB,8CACX/nC,QAAgBC,8CAChBA,+aAcJ+nC,oVAQHxiK,EAAQ,4CACDu6H,EAAW,qhECxC3C,MAAM,GAAuB,CAChCv9J,WAAYyS,GACZ8C,YAAa,QACb0O,WAbG,SAAwB5pB,GAC3B,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,OAAEqrE,GAAWjuD,GACb,aAAEkuD,EAAY,iBAAEC,EAAgB,KAAErjE,GAAS4gB,GAC1Cm6I,EAAWC,GAAYh7J,EACxByrK,EAAU,KAAMh4J,QAAQ,+BAC1B,IAAIyvL,GAA4B//H,EAAO9lE,MAAO09J,EAAWC,EAAU53F,EAAcC,GACjF,IAAIy/H,GAAsB3/H,EAAO9lE,MAAO09J,EAAWC,EAAU53F,EAAcC,GAC/E,OAAO/mE,EAAQ2rL,gBAAgBxc,EAAS,CAACtoG,GAAS,aCX/C,MAAMggI,GACT,YAAYt3H,EAASr1D,EAAY4sD,GAC7BvrE,KAAKo6C,cAAgB,CAAC,MACtBp6C,KAAKinD,YAAc,GACnBjnD,KAAKinD,YAActoC,EACnB,MAAO,CAAE6lJ,EAASC,GAAW9lJ,GACtB,CAAE+lJ,EAASC,GAAU3wF,EAItB4wF,EAAiB,CAClBr5F,GAAgBm5F,EAAU,EAAKF,EAAU,EAAIA,EAC7Cj5F,GAAgBo5F,EAAS,EAAKF,EAAS,EAAIA,GAE1CI,EAAiB,CAClBt5F,GAAgBm5F,EAAU,EAAKA,EAAU,EAAIA,EAC7Cn5F,GAAgBo5F,EAAS,EAAKA,EAAS,EAAIA,GAE1C9T,EAAc+T,EAAe,GAAKC,EAAe,GACjD/T,EAAa8T,EAAe,GAAKC,EAAe,GAChDyB,EAAiB,EAAIzV,EACrB0V,EAAgB,EAAIzV,EAGpB0V,EAAyC,EAA5BtgK,KAAK4C,KAAKw9J,GAAuB,EAC9CG,EAAuC,EAA3BvgK,KAAK4C,KAAKy9J,GAAsB,EAClDvmK,KAAK85K,SAAW,mQAUkBjpB,+CACDC,qDAEIwV,kDACDC,4CAERC,yCACDC,+iBAcD/B,4QAQEC,0MAMkBH,EAAU,6QAMXC,EAAS,i9BCpEvD,MAAM,GAA2B,CACpC7+J,WAAY0S,GACZ6C,YAAa,QACb0O,WAVG,SAA4B5pB,GAC/B,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,OAAEqrE,EAAM,GAAEziD,GAAOxL,GACjB,aAAEkuD,GAAiBxiD,EACnB6qJ,EAAU,IAAI03B,GAA8BziL,EAAGrjB,MAAO8lE,EAAO9lE,MAAO+lE,GAC1E,OAAO9mE,EAAQ2rL,gBAAgBxc,EAAS,CAAC/qJ,GAAKA,EAAGpjB,SCP9C,MAAM8lM,GACT,YAAY5sL,EAAYukJ,EAAWC,EAAU53F,EAAcC,GACvDxrE,KAAKo6C,cAAgB,CAAC,KACtBp6C,KAAKinD,YAAc,GACnB,MAAOsU,EAAO6nG,EAAWC,EAAUz6H,GAASjqB,EAC5C3e,KAAKinD,YAAc,CAACsU,EAAO2nG,EAAWC,EAAUv6H,GAChD,MAAMsiK,EAAkB,CACnB3/H,GAAgB23F,EAAY,EAAKE,EAAY,EAAIA,EACjD73F,GAAgB43F,EAAW,EAAKE,EAAW,EAAIA,GAE9C8nC,EAAmB,CACpB5/H,GAAgB23F,EAAY,EAAKA,EAAY,EAAIA,EACjD33F,GAAgB43F,EAAW,EAAKA,EAAW,EAAIA,GAG9CqoC,EAAYjgI,EAAe,MAAQ,MACzC,IAAI6/H,EAEAA,EADA5/H,EAEI,4EAIgB,8CAExBxrE,KAAK85K,SAAW,yEAEZoxB,EAAgB,GAAKC,EAAiB,kBACtCD,EAAgB,GAAKC,EAAiB,8CACX/nC,QAAgBC,4OASpB+nC,6KAI2BI,oIC1CvD,MAAMC,GACT,YAAY9sL,EAAYukJ,EAAWC,EAAU53F,EAAcC,GACvDxrE,KAAKo6C,cAAgB,CAAC,KACtBp6C,KAAKw5K,cAAe,EACpBx5K,KAAKy5K,cAAe,EACpBz5K,KAAKinD,YAAc,GACnB,MAAOsU,EAAO6nG,EAAWC,EAAUz6H,GAASjqB,EAC5C3e,KAAKinD,YAAc,CAACsU,EAAO2nG,EAAWC,EAAUv6H,GAChD,MAAMsiK,EAAkB,CACnB3/H,GAAgB23F,EAAY,EAAKE,EAAY,EAAIA,EACjD73F,GAAgB43F,EAAW,EAAKE,EAAW,EAAIA,GAE9C8nC,EAAmB,CACpB5/H,GAAgB23F,EAAY,EAAKA,EAAY,EAAIA,EACjD33F,GAAgB43F,EAAW,EAAKA,EAAW,EAAIA,GAG9CqoC,EAAYjgI,EAAe,MAAQ,MACzC,IAAI6/H,EAEAA,EADA5/H,EACoB,4EAIA,8CAExBxrE,KAAK85K,SAAW,yEAEZoxB,EAAgB,GAAKC,EAAiB,kBACtCD,EAAgB,GAAKC,EAAiB,kBACtCD,EAAgB,GAAKC,EAAiB,8CACX/nC,QAAgBC,8CAChBA,+aAcJ+nC,6KAI2BI,2HAG9B5iK,EAAQ,4CACDu6H,EAAW,yeCzC3C,MAAM,GAA8B,CACvCv9J,WAAYuS,GACZgD,YAAa,QACb0O,WAbG,SAA+B5pB,GAClC,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,OAAEqrE,GAAWjuD,GACb,aAAEkuD,EAAY,iBAAEC,EAAgB,KAAErjE,GAAS4gB,GAC1Cm6I,EAAWC,GAAYh7J,EACxByrK,EAAU,KAAMh4J,QAAQ,+BAC1B,IAAI6vL,GAAmCngI,EAAO9lE,MAAO09J,EAAWC,EAAU53F,EAAcC,GACxF,IAAI+/H,GAA6BjgI,EAAO9lE,MAAO09J,EAAWC,EAAU53F,EAAcC,GACtF,OAAO/mE,EAAQ2rL,gBAAgBxc,EAAS,CAACtoG,GAASA,EAAO7lE,SCXtD,MAAMimM,GACT,YAAY13H,EAASr1D,EAAY4sD,GAC7BvrE,KAAKo6C,cAAgB,CAAC,MACtBp6C,KAAKinD,YAAc,GACnBjnD,KAAKinD,YAActoC,EACnB,MAAO,CAAE6lJ,EAASC,GAAW9lJ,GACtB,CAAE+lJ,EAASC,GAAU3wF,EAItB4wF,EAAiB,CAClBr5F,GAAgBm5F,EAAU,EAAKF,EAAU,EAAIA,EAC7Cj5F,GAAgBo5F,EAAS,EAAKF,EAAS,EAAIA,GAE1CI,EAAiB,CAClBt5F,GAAgBm5F,EAAU,EAAKA,EAAU,EAAIA,EAC7Cn5F,GAAgBo5F,EAAS,EAAKA,EAAS,EAAIA,GAE1C9T,EAAc+T,EAAe,GAAKC,EAAe,GACjD/T,EAAa8T,EAAe,GAAKC,EAAe,GAChDyB,EAAiB,EAAIzV,EACrB0V,EAAgB,EAAIzV,EAGpB0V,EAAyC,EAA5BtgK,KAAK4C,KAAKw9J,GAAuB,EAC9CG,EAAuC,EAA3BvgK,KAAK4C,KAAKy9J,GAAsB,EAClDvmK,KAAK85K,SAAW,mQAUkBjpB,+CACDC,qDAEIwV,kDACDC,4CAERC,yCACDC,6jBAcD/B,4QAQEC,0GAKdC,EAAe,8CACCC,EAAe,qEAG7BD,EAAe,gDACCC,EAAe,mFAG3BL,6BACVj5F,iLAIUk5F,6BACVl5F,uVC3EX,MAAM,GAAkC,CAC3C3lE,WAAYwS,GACZ+C,YAAa,QACb0O,WAVG,SAAmC5pB,GACtC,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,OAAEqrE,EAAM,GAAEziD,GAAOxL,GACjB,aAAEkuD,GAAiBxiD,EACnB6qJ,EAAU,IAAI83B,GAAoC7iL,EAAGrjB,MAAO8lE,EAAO9lE,MAAO+lE,GAChF,OAAO9mE,EAAQ2rL,gBAAgBxc,EAAS,CAAC/qJ,GAAKA,EAAGpjB,SCN9C,MAAMkmM,GACT,YAAY/6J,EAAQ1mC,GAChBlK,KAAKo6C,cAAgB,CAAC,KACtB,MAAMjwC,EAAOymC,EAAOnyC,OACpB,GAAI0L,EAAO,EACP,MAAM,IAAItE,MAAM,kCAAkCsE,iCAGtD,GADAnK,KAAKinD,YAAcrW,EACN,IAATzmC,EAOA,YANAnK,KAAK85K,SAAW,+FAGDlpI,EAAO,wCAK1B,MAMMg7J,EAAWh7J,EAAOxmC,KAAI,CAAC2hB,EAAGrtB,IANb,CAACA,IACS,IAArBwL,EAAKmnB,QAAQ3yB,IAA2B,IAAdkyC,EAAOlyC,GAC1B,GAAGkyC,EAAOlyC,eAAeA,SAE7B,UAAUA,KAEiBmtM,CAAWntM,KAAIsR,KAAK,KACpDyT,EAAOkhK,GAAkBx6K,GAC/BnK,KAAK85K,SAAW,kCAEdr2J,yDACemoL,uBC3BlB,MAAME,GACT,YAAYl7J,EAAQ1mC,GAChBlK,KAAKo6C,cAAgB,CAAC,KACtBp6C,KAAKw5K,cAAe,EACpBx5K,KAAKy5K,cAAe,EACpB,MAAMtvK,EAAOymC,EAAOnyC,OACpB,GAAI0L,EAAO,EACP,MAAM,IAAItE,MAAM,kCAAkCsE,iCAEtDnK,KAAKinD,YAAcrW,EACnB,MAAMgtH,EAAWutB,GAAY,KAAMhhL,GAC7B8wL,EAAa,GAAGr9B,EAASzzJ,EAAO,YAAYnK,KAAKinD,YAAY98C,EAAO,KACpE4hM,EAAU,GAAGnuC,EAASzzJ,EAAO,YAAYnK,KAAKinD,YAAY98C,EAAO,KACjEsZ,EAAOkhK,GAAkBx6K,GAmD/B,SAASk2L,EAAWziC,GAChB,MAAMouC,EAAgBp7J,EAAOxmC,KAAI,CAAC2hB,EAAGrtB,IAKzC,SAAoBA,EAAGutM,GACnB,OAAyB,IAArB/hM,EAAKmnB,QAAQ3yB,IAA2B,IAAdkyC,EAAOlyC,GAC1B,GAAGkyC,EAAOlyC,QAAQutM,EAAUvtM,SAG5B,GAAGutM,EAAUvtM,KAVmBmtM,CAAWntM,EAAGk/J,KAGzD,MAAO,mBAFUouC,EAAch8L,KAAK,eAClBg8L,EAAc3nM,OAAO,GAAG2L,KAAK,SApD/ChQ,KAAK85K,SADI,IAAT3vK,EACgB,0IAIWymC,EAAO,8BAChCA,EAAO,+BACNqqJ,iDAC4BrqJ,EAAO,yCAChCA,EAAO,qFAOG,sCAEhBntB,sFAgBJ,SAAcm6I,GACV,OAAOyiC,EAAWziC,GAfPsuC,CAAKtuC,EAASv5J,2BACtB42L,+BAgBP,SAAcr9B,GAEV,OADAA,EAASzzJ,EAAO,GAAK,IAAMyzJ,EAASzzJ,EAAO,GAAK,QACzCk2L,EAAWziC,GAjBLuuC,CAAKvuC,EAASv5J,wCAExB0nM,gCAiBP,SAAcnuC,GAEV,OADAA,EAASzzJ,EAAO,GAAK,IAAMyzJ,EAASzzJ,EAAO,GAAK,QACzCk2L,EAAWziC,GAlBLwuC,CAAKxuC,EAASv5J,6BACtB42L,kCAmBT,SAAcr9B,GAGV,OAFAA,EAASzzJ,EAAO,GAAK,IAAMyzJ,EAASzzJ,EAAO,GAAK,QAChDyzJ,EAASzzJ,EAAO,GAAK,IAAMyzJ,EAASzzJ,EAAO,GAAK,QACzCk2L,EAAWziC,GArBHyuC,CAAKzuC,EAASv5J,wFCzBlC,MAAM,GAAgB,CACzBuB,WAAY4S,GACZ2C,YAAa,QACb0O,WAjBG,SAAiB5pB,GACpB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,EAAEwG,GAAM4W,GACR,KAAEi8B,GAASvwB,EACX0nB,EAAQhqC,EAAEjB,MAAM/G,OAChB2oK,EAAQ,GAAoB9tH,EAAM7yC,EAAEjB,OAC1C,GAAc,IAAVirC,EACA,OAAO,GAAS,CAAEpzB,OAAQ,CAAE5W,KAAKhC,YAErC,MAAMmvK,EAAU,KAAMh4J,QAAQ,+BAC1B,IAAIkwL,GAAqBrlM,EAAEjB,MAAO4hK,GAClC,IAAIukC,GAAellM,EAAEjB,MAAO4hK,GAChC,OAAO3iK,EAAQ2rL,gBAAgBxc,EAAS,CAACntK,GAAIA,EAAEhB,SChB5C,MAAM6mM,GACT,YAAY5H,EAAYz9H,GACpBjnE,KAAKo6C,cAAgB,CAAC,SACtBp6C,KAAKinD,YAAc,GACnB,MAAMgwB,EAAcytH,EAAW,GACzBxtH,EAAawtH,EAAW,GAC9B1kM,KAAKinD,YAAcy9I,EACnB,IAAI6H,EAAc,GAEdA,EADqB,iBAAdtlI,EACO,uBAAuBA,EAAUlnD,QAAQ,MAGzC,8BACCknD,EAAUj3D,KAAK,uDAGlChQ,KAAK85K,SAAW,ihBAYZyyB,2CAC2Br1H,gCAAyCD,mJAO5E,mBAAmBqwF,EAASC,EAASC,EAAWC,GAC5C,MAAO,CAACukB,EAAOoI,KACW,MAAlBp0L,KAAKwsM,YACLxsM,KAAKwsM,UACDxgB,EAAMiU,0BAA0B7L,EAAc,WAEtDpI,EAAMlc,GAAG28B,UAAUzsM,KAAKwsM,UAAWllC,EAASC,EAASC,EAAWC,KCvCrE,MAAM,GAAyB,CAClC7hK,WAAYgV,GACZO,YAAa,QACb0O,WAAY,EAAGxM,SAAQ0L,QAAOtkB,cAC1B,MAAM,MAAEyvB,GAAU7W,GACZ,QAAE2pD,EAAO,UAAEC,EAAS,OAAEC,GAAWn+C,EACjCyuK,EAAe/yL,EACfmvK,EAAU,IAAI04B,GAAcp4K,EAAM1uB,MAAOyhE,IACxCqgG,EAASC,GAAW,GAA4BrgG,EAAQhzC,EAAM1uB,MAAM,GAAI0uB,EAAM1uB,MAAM,IACrFytL,EAAcrf,EAAQ4sB,mBAAmBl5B,EAASC,EAASrhK,KAAKi0D,IAAI6M,GAAU9gE,KAAKwhD,IAAIsf,IAE7F,OADewwH,EAAapH,gBAAgBxc,EAAS,CAAC1/I,GAAQA,EAAMzuB,MAAOwtL,KCKtE,GAAQ,GAAgB,CAAEtE,UAhBzB,mWAiBD,GAAc,CACvB/oL,WAAY6S,GACZ0C,YAAa,QACb0O,WAAY,IClBH,GAAQ,GAAgB,CAAE8kK,UADzB,yBAC2C4I,cAAehN,KAC3D,GAAc,CACvB3kL,WAAY8S,GACZyC,YAAa,QACb0O,WAAY,ICPT,MAAM6iL,GACT,YAAYC,EAAYz/J,EAAUR,EAAakgK,EAAalgM,EAASlH,EAAOqnM,GAAmB,GAC3F7sM,KAAKo6C,cAAgB,CAAC,UAAW,UAAW,gBAC5Cp6C,KAAKinD,YAAczhD,EACnB,MAAMsiM,EAAcnjB,GAAkBj4K,EAAQjO,QACxCgH,EAAQk/K,GAAkBn/K,EAAM/G,QACtC,IAAIquM,EAAgB,GACA,IAAhBpgK,EACAogK,EAAgB,IAEK,IAAhBpgK,IACLogK,EAAgB,QAEpB,MAAMC,EAAiB,cAAcD,KACrC,IAAIE,EAAgB,GACA,IAAhBJ,EACAI,EAAgB,IAEK,IAAhBJ,IACLI,EAAgB,gBAEpB,MAAMC,EAAiB,cAAcD,KAC/BjF,EAAe76J,EAAW,EAAI,aAAe,UACnDltC,KAAK85K,SAAW,aACdguB,eAAyBA,KAAep7L,2CAGtCjH,2HAGoBknM,mFAEEz/J,8CACA6/J,gDACQhF,2FAGnBkF,mJCdhB,MAAM,GAAkB,CAC3BrnM,WAAY+S,GACZwC,YAAa,QACb0O,WAxBG,SAAmB5pB,GACtB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,QAAE0wB,EAAO,QAAEsc,GAAY5vB,GACvB,MAAE7X,GAAUujB,GACZ,UAAE6jB,EAAS,WAAEa,EAAU,UAAEV,EAAS,QAAErgC,EAAO,WAAEghC,GAAe,GAA6BT,EAAStc,EAASnrB,GAC3GwiK,EAAe,CAACt6H,EAAaX,EAAWA,GAC9C,GAAmB,IAAfW,EACA,OAAOjpC,EAAQ41I,eAAe70I,EAAOmrB,EAAQlrB,OAEjD,MAAMuiM,EAAiB,GAAQ,CAAE3qL,OAAQ,CAAE5W,EAAGkqB,GAAWlsB,UAASskB,MAAO,CAAEvjB,MAAO,CAACioC,EAAYb,MACzFwvH,EAAW,GAAQ,CAAE/+I,OAAQ,CAAE5W,EAAGwmC,GAAWxoC,UAASskB,MAAO,CAAEvjB,MAAO,CAACioC,EAAYV,MACnF8zB,EAAep8D,EAAQ41I,eAAe,GAAI,UAAW,IAAIrvI,aAAa,CAAC,KACvE4oK,EAAU,IAAI84B,GAAej/J,EAAYb,EAAWo7J,EAAexiM,MAAM/G,OAAQ29J,EAAS52J,MAAM/G,OAAQiO,EAASs7J,GACjH5/I,EAAM3jB,EAAQ2rL,gBAAgBxc,EAAS,CAACxX,EAAU4rC,EAAgBnnI,GAAeu7F,EAAS32J,OAC1F4xE,EAAW,GAAQ,CAAEh6D,OAAQ,CAAE5W,EAAG2hB,GAAO3jB,UAASskB,MAAO,CAAEvjB,WAKjE,OAJAf,EAAQi4I,8BAA8BsrD,GACtCvjM,EAAQi4I,8BAA8B0f,GACtC33J,EAAQi4I,8BAA8Bt0H,GACtC3jB,EAAQi4I,8BAA8B77E,GAC/BwW,ICrBJ,MAAM61H,GACT,YAAYC,EAAO3nM,EAAO2E,GAGtB,IAAIijM,EACAC,EACJ,GAJArtM,KAAKo6C,cAAgB,CAAC,IAAK,IAAK,KAChCp6C,KAAKinD,YAAczhD,EAGf2E,EAAO,EACP,MAAMtE,MAAM,kBAAkBsE,0BAElC,GAAa,IAATA,EACAkjM,EAAW,QACXD,EAAU,YAET,CACD,MAAMlF,EAAgB,CAAC,UAAW,UAAW,UAAW,WAClDoF,EAAa,GACbC,EAAc,GACpB,IAAK,IAAI7uM,EAAI,EAAGA,EAAI8G,EAAM/G,OAAQC,IAC9B6uM,EAAYpqM,KAAK,GAAG+kM,EAAcxpM,MAC9BA,EAAIyuM,GACJG,EAAWnqM,KAAK,GAAG+kM,EAAcxpM,MAGzC0uM,EAAUE,EAAWt9L,OACrBq9L,EAAWE,EAAYv9L,OAE3B,MAAMvK,EAAQk/K,GAAkBx6K,GAChCnK,KAAK85K,SAAW,kCAEdr0K,2DACkB2nM,6DAEDC,oDAEAA,kCC3BpB,MAAM,GAAe,CACxBznM,WAAYgT,GACZuC,YAAa,QACb0O,WATG,SAAgB5pB,GACnB,MAAM,OAAEod,EAAM,QAAE5Y,GAAYxE,GACtB,UAAEkpD,EAAS,EAAEt5C,EAAC,EAAEumB,GAAM/Y,EACtBu2J,EAAU,IAAIs5B,GAAc/jJ,EAAU3jD,MAAM/G,OAAQoR,EAAErK,MAAOqK,EAAErK,MAAM/G,QAC3E,OAAOgG,EAAQ2rL,gBAAgBxc,EAAS,CAACzqH,EAAWt5C,EAAGumB,GAAI/S,GAAWxT,EAAEpK,MAAO2wB,EAAE3wB,UCGxE,GAAO,GAAgB,CAAEkpL,UAPzB,6IAGU,wBACL,0EAIL,GAAa,CACtB/oL,WAAYiT,GACZsC,YAAa,QACb0O,WAAY,ICVH,GAAU,GAAgB,CAAE8kK,UADzB,wCAEH,GAAgB,CACzB/oL,WAAYsT,GACZiC,YAAa,QACb0O,WAAY,ICAH,GAAO,GAAgB,CAAE8kK,UAJzB,2DAKA,GAAa,CACtB/oL,WAAYqT,GACZkC,YAAa,QACb0O,WAAY,ICNH,GAAM,GAAgB,CAAE8kK,UAHzB6V,gDAIC,GAAY,CACrB5+L,WAAYmT,GACZoC,YAAa,QACb0O,WAAY,ICHH,GAAO,GAAgB,CAAE8kK,UAJzB,iEAKA,GAAa,CACtB/oL,WAAYoT,GACZmC,YAAa,QACb0O,WAAY,ICaH,GAAW,GAAgB,CAAE8kK,UArBzB,4WAsBJ,GAAiB,CAC1B/oL,WAAYuT,GACZgC,YAAa,QACb0O,WAAY,ICWH,GAAuB,CAChCjkB,WAAY0T,GACZ6B,YAAa,QACb0O,WArC2B5pB,IAC3B,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,EAAEwG,GAAM4W,GACR,WAAEumC,EAAU,SAAEuN,GAAapoC,EACjC,EAAYtiB,EAAEjB,MAAM/G,QAAU,GAAG,IAAM,yEAEvC,MAAMqlD,EAAOF,EAAW32C,QAAO,CAAClG,EAAGC,IAAMD,EAAIC,IACvCgiK,EAAmB,CAAC,CAAC,EAAG,IAC9BA,EAAiB7lK,QAAQguD,GACzB,IAAK,IAAIzyD,EAAI,EAAIklD,EAAWnlD,OAAQC,EAAI+H,EAAEjB,MAAM/G,SAAUC,EACtDsqK,EAAiB7lK,KAAK,CAAC,EAAG,IAE9B,MAAMq8J,EAAY,GACZyJ,EAAU,GAAM,CAClB5rJ,OAAQ,CAAE5W,KACVhC,UACAskB,MAAO,CAAEooC,SAAU63G,EAAkB11G,cAAe,KAElD41G,EAAsB,GAAyBD,EAAQzjK,MAAOo+C,EAAYE,GAAM,GAChFqlH,EAAoC,GAAyBD,EAAoBzqK,OAAQmlD,EAAWnlD,QAAQ,GAC5GupK,EAAe,GAAiCiB,EAAQzjK,MAAOo+C,EAAYE,GAAM,GACjF0pJ,EAAkB,GAAQ,CAAEnwL,OAAQ,CAAE5W,EAAGwiK,GAAWxkK,UAASskB,MAAO,CAAEvjB,MAAO0jK,KAC7EG,EAAW,GAAU,CACvBhsJ,OAAQ,CAAE5W,EAAG+mM,GACb/oM,UACAskB,MAAO,CAAEkgB,KAAMkgI,KAEbhiK,EAAS,GAAQ,CAAEkW,OAAQ,CAAE5W,EAAG4iK,GAAY5kK,UAASskB,MAAO,CAAEvjB,MAAOwiK,KAK3E,OAJAxI,EAAUr8J,KAAK8lK,GACfzJ,EAAUr8J,KAAKqqM,GACfhuC,EAAUr8J,KAAKkmK,GACf7J,EAAUxzJ,SAAQ6D,GAAKpL,EAAQi4I,8BAA8B7sI,KACtD1I,ICHE,GAA4B,CACrCvB,WAAY6T,GACZ0B,YAAa,QACb0O,WAlCG,SAA6B5pB,GAChC,MAAM,OAAEod,EAAM,QAAE5Y,GAAYxE,GACtB,QAAE0wB,EAAO,OAAEprB,EAAM,WAAE6uE,EAAU,aAAEvT,GAAiBxjD,EACtD,GAAgC,IAA5B+2D,EAAW5uE,MAAM/G,OACjB,MAAM,IAAIoH,MAAM,gDACbuuE,EAAW5uE,SAElB,GAA6B,IAAzBmrB,EAAQnrB,MAAM/G,OACd,MAAM,IAAIoH,MAAM,4CACb8qB,EAAQnrB,SAEf,GAA4B,IAAxBD,EAAOC,MAAM/G,OACb,MAAM,IAAIoH,MAAM,2CACbN,EAAOC,SAEd,GAAkC,IAA9Bq7D,EAAar7D,MAAM/G,OACnB,MAAM,IAAIoH,MAAM,iDACdg7D,EAAar7D,SAEnB,MAAM+6D,EAAW97D,EAAQod,SAAS8O,EAAQ7rB,QACpCuvE,EAAU5vE,EAAQod,SAAStc,EAAOT,QAClCwvE,EAAc7vE,EAAQod,SAASuyD,EAAWtvE,QAC1Ck8D,EAAgBv8D,EAAQod,SAASg/C,EAAa/7D,QAAQ,IACrDyvE,EAAe81F,EAAoB71F,EAAcC,EAAmBC,GAAmBg2G,GAA2BnqH,EAAU5vC,EAAQnrB,MAAOmrB,EAAQlrB,MAAO4uE,EAAS9uE,EAAOE,MAAO6uE,EAAatT,GACrM,MAAO,CACHv8D,EAAQ41I,eAAegwB,EAAoB15I,EAAQlrB,MAAO8uE,GAC1D9vE,EAAQ41I,eAAe,CAACgwB,EAAmB,IAAK9kK,EAAOE,MAAO+uE,GAC9D/vE,EAAQ41I,eAAe,CAAC5lE,EAAkBh2E,QAAS,OAAQ,IAAIyM,WAAWupE,EAAkBrqE,KAAK1K,GAAU2H,OAAO3H,OAClH+E,EAAQ41I,eAAe,CAAC3lE,EAAgBj2E,QAASkyB,EAAQlrB,MAAO,IAAIwF,WAAWypE,OCP1E,GAAsB,CAC/B9uE,WAAY8T,GACZyB,YAAa,QACb0O,WAxBG,SAAuB5pB,GAC1B,MAAM,OAAEod,EAAM,QAAE5Y,GAAYxE,GACtB,aAAE40E,EAAY,WAAEl2D,EAAU,SAAE3U,GAAaqT,EAC/C,GAAkC,IAA9Bw3D,EAAarvE,MAAM/G,OACnB,MAAM,IAAIoH,MAAM,uDAAuDgvE,EAAarvE,SAExF,GAAgC,IAA5BmZ,EAAWnZ,MAAM/G,OACjB,MAAM,IAAIoH,MAAM,qDAAqD8Y,EAAWnZ,SAEpF,GAA8B,IAA1BwE,EAASxE,MAAM/G,OACf,MAAM,IAAIoH,MAAM,sDAAsDmE,EAASxE,SAEnF,MAAMuvE,EAAcn2E,MAAM+D,KAAK8B,EAAQod,SAASlD,EAAW7Z,SACrDgwE,EAAgBrwE,EAAQod,SAASgzD,EAAa/vE,QAC9CgjH,EAAclpH,MAAM+D,KAAK8B,EAAQod,SAAS7X,EAASlF,UAClD2qC,EAAY9C,EAAcsa,GAAe0jI,GAAqB71G,EAAeD,EAAarvE,MAAOqvE,EAAapvE,MAAOsvE,EAAa+yC,GACzI,MAAO,CACHrjH,EAAQ41I,eAAe1tG,EAAckoC,EAAapvE,MAAOgqC,GACzDhrC,EAAQ41I,eAAe,CAACpzF,EAAYxoD,QAASuL,EAASvE,MAAO,IAAIwF,WAAWg8C,OCLvE,GAAsB,CAC/BrhD,WAAY+T,GACZwB,YAAa,QACb0O,WAfG,SAAuB5pB,GAC1B,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,cAAE0gE,EAAa,aAAEC,EAAY,aAAEC,GAAiBxjD,GAChD,YAAE4pC,GAAgBl+B,GAClB,UAAE6jB,EAAS,WAAEa,EAAU,QAAE/gC,EAAO,WAAEghC,GAAe,GAA6BkzB,EAAcD,EAAe1Z,GAE3G2sH,EAAU,IAAI84B,GAAej/J,EAAYb,EAAW+zB,EAAcn7D,MAAM/G,OAAQmiE,EAAap7D,MAAM/G,OAAQiO,EAAS,CAACghC,EAAY,IADhH,GAEjBtlB,EAAM3jB,EAAQ2rL,gBAAgBxc,EAAS,CAAChzG,EAAcD,EAAeE,GAAeD,EAAan7D,OACjG4xE,EAAW,GAAQ,CAAEh6D,OAAQ,CAAE5W,EAAG2hB,GAAO3jB,UAASskB,MAAO,CAAEvjB,MAAOyhD,KAExE,OADAxiD,EAAQi4I,8BAA8Bt0H,GAC/BivD,ICME,GAAe,CACxBzxE,WAAY2T,GACZ4B,YAAa,QACb0O,WApBG,SAAgB5pB,GACnB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,EAAEwG,GAAM4W,GACR,gBAAEy+C,EAAe,KAAE5xD,GAAS6e,EAC5Bs0D,EAAQ,GAAoBnzE,EAAMzD,EAAEjB,OAAO,GAC3Cs1E,EAAa,GAA8Br0E,EAAGq1D,EAAiBuhB,GAC/D5sC,EAAQhqC,EAAEjB,MAAM/G,OAChBmvC,EAAQ,IAAIhvC,MAAM6xC,GAAOvxB,KAAK,GAC9B/W,EAAO1B,EAAEjB,MAAMnB,QACrB,OAAOy2E,EAAW1wE,KAAIC,IAClB,MAAM0iC,EAAY,IAAI5kC,GACtB4kC,EAAUswC,GAAShzE,EACnB,MAAM6gK,EAAS,GAAM,CAAE7tJ,OAAQ,CAAE5W,KAAKhC,UAASskB,MAAO,CAAE6kB,QAAOzlC,KAAM4kC,KAErE,OADAa,EAAMyvC,IAAUhzE,EACT6gK,OCbF,GAAO,GAAgB,CAAEyjB,UADzB,oBAEA,GAAa,CACtB/oL,WAAYwT,GACZ+B,YAAa,QACb0O,WAAY,ICJH,GAAS,GAAgB,CAAE8kK,UADzB,kBAEF,GAAe,CACxB/oL,WAAYiU,GACZsB,YAAa,QACb0O,WAAY,ICLV,GAAqB,4BACd,GAAoB,GAAiB,CAAE8kK,UAAW,GAAoB2I,gBAAiB,KACvF,GAA0B,CACnC1xL,WAAYgU,GACZuB,YAAa,QACb0O,WAAY,ICGH,GAAa,CACtBjkB,WAAY8U,GACZS,YAAa,QACb0O,WAXG,UAAc,OAAExM,EAAM,MAAE0L,EAAK,QAAEtkB,IAClC,MAAM,EAAEgC,GAAM4W,EACRsxK,EAAgC,6DACP5lK,EAAM2jC,cAE/BknH,EAAU,IAAI8a,GAAejoL,EAAEjB,MAAOmpL,GAC5C,OAAOlqL,EAAQ2rL,gBAAgBxc,EAAS,CAACntK,GAAIA,EAAEhB,SCP5C,MAAMgoM,GACT,YAAY7/J,EAAOlhC,EAASvE,GACxBnI,KAAKo6C,cAAgB,CAAC,KACtBp6C,KAAKinD,YAAc9+C,EACnB,MAAMgC,EAAOhC,EAAK1J,OACZivM,EAAa/oB,GAAkBx8K,EAAK1J,QACpCgH,EAAQk/K,GAAkBx8K,EAAK1J,QACrC,IAAIkvM,EAAY,GAChB,GAAa,IAATxjM,EACAwjM,EAAY,+BAEX,CACD,IAAIC,EAAa,EACjBD,EACIxlM,EAAKiC,KAAI,CAAC2hB,EAAGrtB,KACTkvM,IACuB,IAAhBzlM,EAAK1J,OACR,oBAAoBC,cAAcA,KAClC,UAAUkvM,EAAa,gBAAgBlvM,cAAcA,QAExDsR,KAAK,KAElBhQ,KAAK85K,SAAW,WAChB4zB,aAAsBA,KAAc9/J,cACpC8/J,eAAwBA,KAAchhM,uCAGpCjH,yDACekoM,uBCUlB,MAAM,GAAqB,CAC9B/nM,WAAYkU,GACZqB,YAAa,QACb0O,WArCG,SAAsB5pB,GACzB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,EAAEwG,GAAM4W,GACR,MAAEuwB,EAAK,IAAEltB,EAAG,QAAEhU,EAAO,UAAEkiC,EAAS,QAAEC,EAAO,aAAEC,EAAY,YAAE+B,EAAW,eAAEC,GAAmB/nB,GACzF,WAAEsoB,EAAU,OAAEN,EAAM,SAAEE,EAAQ,KAAE9oC,EAAI,SAAE6B,EAAQ,SAAEonC,GAAa,GAAqB3qC,EAAEjB,MAAOooC,EAAOltB,EAAKhU,EAASkiC,EAAWC,EAASC,EAAc+B,EAAaC,GAC/JrR,EAAK,GAAQ,CAAEpiB,OAAQ,CAAE5W,KAAKhC,UAASskB,MAAO,CAAEvjB,MAAOwE,KAC7D,IAAI7C,EACJ,GAAIkqC,EAAY,CACZ,MAAMs6H,EAAS,GAAM,CAAEtuJ,OAAQ,CAAE5W,EAAGg5B,GAAMh7B,UAASskB,MAAO,CAAE6kB,MAAOmD,EAAQ5oC,UAC3EhB,EAAS,GAAQ,CAAEkW,OAAQ,CAAE5W,EAAGklK,GAAUlnK,UAASskB,MAAO,CAAEvjB,MAAO4rC,KACnE3sC,EAAQi4I,8BAA8BivB,QAErC,GAAIv6H,EAASrtB,MAAK7Z,GAAiB,IAATA,IAC3B/C,EAAS1C,EAAQ41I,eAAejpG,EAAU3qC,EAAEhB,MAAO,SAInD,GAD2BhB,EAAQguL,mBAAmB,CAAChzJ,IAC/B,CACpB,MACMl6B,EADWd,EAAQykL,QAAQxnL,IAAI+9B,EAAG36B,QAChBS,OAClBg/I,EAAO9iI,GAAOge,EAAGj6B,MAAOi6B,EAAGh6B,MAAOF,GAClCq3I,EAAeguC,GAAoBx5I,EAAUmzG,EAAMtzG,EAAUF,GACnE5pC,EAAS1C,EAAQ41I,eAAejpG,EAAU3R,EAAGh6B,MAAOm3I,EAAar3I,YAEhE,CACD,MAAMquK,EAAU,IAAI65B,GAAoB18J,EAAQE,EAAUG,GAC1DjqC,EAAS1C,EAAQ2rL,gBAAgBxc,EAAS,CAACn0I,GAAKA,EAAGh6B,OAG3D,MAAM20J,EAAiB,GAAQ,CAAE/8I,OAAQ,CAAE5W,EAAGU,GAAU1C,UAASskB,MAAO,CAAEvjB,MAAO4rC,KAGjF,OAFA3sC,EAAQi4I,8BAA8Bj9G,GACtCh7B,EAAQi4I,8BAA8Bv1I,GAC/BizJ,IClCE,GAAM,GAAgB,CAAEu0B,UADzB,mBAEC,GAAY,CACrB/oL,WAAYoU,GACZmB,YAAa,QACb0O,WAAY,ICDH,GAAO,GAAgB,CAAE8kK,UAJzB,yFAKA,GAAa,CACtB/oL,WAAYqU,GACZkB,YAAa,QACb0O,WAAY,ICTT,MAAMgkL,GACT,YAAY7+I,EAAQ5J,GAChBplD,KAAKo6C,cAAgB,CAAC,KACtB,MAAM6M,EAAc,IAAIroD,MAAMowD,EAAOvwD,QACrC,IAAK,IAAIC,EAAI,EAAGA,EAAIuoD,EAAYxoD,OAAQC,IACpCuoD,EAAYvoD,GAAKswD,EAAOtwD,GAAK0mD,EAAK1mD,GAEtCsB,KAAKinD,YAAcA,EACnBjnD,KAAKmK,KAAO88C,EAAYxoD,OACxB,MAAMgH,EAAQk/K,GAAkB3kL,KAAKmK,MAC/BshL,EASd,SAAyBz8H,GACrB,MAAM7kD,EAAO6kD,EAAOvwD,OACpB,GAAI0L,EAAO,EACP,MAAMtE,MAAM,iBAAiBsE,0BAEjC,GAAa,IAATA,EACA,MAAO,eAAe6kD,EAAO,MAEjC,MAAMk5I,EAAgB,CAAC,UAAW,UAAW,UAAW,UAAW,WAC7Dzc,EAAe,GACrB,IAAK,IAAI/sL,EAAI,EAAGA,EAAIswD,EAAOvwD,OAAQC,IAC/B+sL,EAAatoL,KAAK,QAAQ+kM,EAAcxpM,OAAOswD,EAAOtwD,OAE1D,OAAO+sL,EAAaz7K,OAtBK,CAAgBg/C,GACrChvD,KAAK85K,SAAW,kCAEdr0K,wDACegmL,uBCZlB,SAAS,GAAK97K,GACjB,MAAM,OAAE0N,EAAM,QAAE5Y,EAAO,MAAEskB,GAAUpZ,GAC7B,EAAElJ,GAAM4W,GACR,KAAE+nC,GAASr8B,EAEjB,GAAgB,WAAZtiB,EAAEhB,OAAsBgB,EAAEjB,MAAM/G,OAAS,EAAG,CAG5C,MAAMkG,EAAOF,EAAQod,SAASpb,EAAE3B,QAC1BpF,EAAoB,WAAZ+G,EAAEhB,MACZd,EAAKyF,KAAI2C,GAAK,GAAkBA,KAChCpI,EACEg3B,EAAMla,GAAOhb,EAAEjB,MAAOiB,EAAEhB,MAAO/F,GAC/B2hJ,EAASypC,GAAYnvJ,EAAKypB,GAChC,OAAO3gD,EAAQ41I,eAAegH,EAAO77I,MAAO67I,EAAO57I,MAAO47I,EAAO97I,QAErE,MAAMquK,EAAU,IAAIi6B,GAAYpnM,EAAEjB,MAAO4/C,GAEzC,OADe3gD,EAAQ2rL,gBAAgBxc,EAAS,CAACntK,GAAIA,EAAEhB,OAGpD,MAAM,GAAa,CACtBG,WAAYsU,GACZiB,YAAa,QACb0O,WAAY,ICbH,GAAa,CACtBjkB,WAAYuU,GACZgB,YAAa,QACb0O,WAdG,SAAc5pB,GACjB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,EAAEwG,GAAM4W,GACR,EAAEkH,EAAC,OAAEo5C,GAAW50C,EAChB+wC,EAAQr1D,EAAQod,SAASpb,EAAE3B,SAC1BinK,EAAaC,GAAkB+e,GAAYjxH,EAAOrzD,EAAEjB,MAAOiB,EAAEhB,MAAO8e,EAAGo5C,GAC9E,MAAO,CACHl5D,EAAQ41I,eAAe0xB,EAAYvmK,MAAOumK,EAAYtmK,MAAOsmK,EAAYxmK,QACzEd,EAAQ41I,eAAe2xB,EAAexmK,MAAOwmK,EAAevmK,MAAOumK,EAAezmK,WCVnF,MAAMuoM,GACT,YAAY72H,EAAaC,EAAYrJ,EAAeC,EAAU7G,EAAW71B,GACrEpxC,KAAKo6C,cAAgB,CAAC,QAAS,cAC/Bp6C,KAAKinD,YAAc7V,EACnB,MAAM28J,EAAwC,YAAlBlgI,EAA8B,EAAI,EAC9D,IAAImgI,EACJ,OAAQlgI,GACJ,IAAK,WACDkgI,EAAa,EACb,MACJ,IAAK,UACDA,EAAa,EACb,MACJ,IAAK,OACDA,EAAa,EACb,MACJ,IAAK,UACDA,EAAa,EACb,MACJ,QACIA,EAAa,EAGrBhuM,KAAK85K,SAAW,wHAGLk0B,m9BAwBQA,4qBAiBAA,qVAUiB/2H,gCAA0CC,gJAGhDjQ,o7BAwBAA,yNAIaiQ,0DACAD,+BAE7B82H,4nCClGf,MAAM,GAAkB,CAC3BnoM,WAAYwU,GACZe,YAAa,QACb0O,WAdG,SAAmB5pB,GACtB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,MAAEi0B,EAAK,WAAE05C,GAAevwD,GACxB,cAAEwwD,EAAa,SAAEC,EAAQ,UAAE7G,EAAS,YAAEhgB,GAAgBl+B,GACrDwyC,EAAO0b,EAAaC,EAAYjtC,GAAe/V,EAAM1uB,OACrD85C,EAAWC,GAA2B,MAAf0H,EAAsBA,EAAc,CAACgwB,EAAaC,GAG1E08F,EAAU,IAAIk6B,GAAiB72H,EAAaC,EAAYrJ,EAAeC,EAAU7G,EAFtE,CAAC1L,EAAOjc,EAAWC,EAChCtV,IAEJ,OAAOxlC,EAAQ2rL,gBAAgBxc,EAAS,CAAC1/I,EAAO05C,GAAa,aCMpD,GAAe,CACxBhoE,WAAY0U,GACZa,YAAa,QACb0O,WAjBG,SAAgB5pB,GACnB,MAAM,OAAEod,EAAM,MAAE0L,EAAK,QAAEtkB,GAAYxE,GAC7B,KAAEiK,GAAS6e,GACX,EAAEtiB,GAAM4W,EACd,GAAiB5W,EAAG,UAEpBkI,QAAQC,KAAK,YAAa,8DAC1B,MAAMrJ,EAASd,EAAQod,SAASpb,EAAE3B,SAC5B,aAAE0vE,EAAY,YAAEvtB,EAAW,QAAEt2B,GAAYs6J,GAAc1lL,EAAQ2E,EAAMzD,EAAEjB,MAAOiB,EAAEhB,OACtF,MAAO,CACHhB,EAAQ41I,eAAepzF,EAAaxgD,EAAEhB,MAAO+uE,GAC7C/vE,EAAQ41I,eAAe,CAAC1pH,EAAQlyB,QAAS,QAASkyB,MCqB7C,GAAe,CACxB/qB,WAAY2U,GACZY,YAAa,QACb0O,WAnCG,SAAgB5pB,GACnB,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,MAAEP,GAAU2d,EAClB,IAAI,KAAEnT,GAAS6e,EACX7e,EAAO,IACPA,GAAQxK,EAAM8F,MAAM/G,QAExB,MAAMgI,EAAI/G,EACJ+wC,EAAQhqC,EAAEjB,MAAM/G,OAChB6M,EAAM5L,EAAM8F,MAAM0E,GAClBknC,EAAW,IAAIxyC,MAAM6xC,EAAQ,GACnC,IAAI+9H,EAAW,EACf,IAAK,IAAI9vK,EAAI,EAAGA,EAAI+xC,EAAO/xC,IACnBA,IAAMwL,IACNknC,EAASo9H,KAAc/nK,EAAEjB,MAAM9G,IAGvC,MAAM8gK,EAAY,GACZ5xH,EAAQ,IAAIhvC,MAAM6xC,GAAOvxB,KAAK,GAC9B/W,EAAO1B,EAAEjB,MAAMnB,QACrB8D,EAAK+B,GAAQ,EACb,MAAMke,EAAM,IAAIxpB,MAAM0M,GACtB,IAAK,IAAI5M,EAAI,EAAGA,EAAI0pB,EAAI3pB,OAAQC,IAAK,CACjCkvC,EAAM1jC,GAAQxL,EACd,MAAMitK,EAAS,GAAM,CAAEtuJ,OAAQ,CAAE5W,KAAKhC,UAASskB,MAAO,CAAE6kB,QAAOzlC,UACzDkvE,EAAW,GAAQ,CAAEh6D,OAAQ,CAAE5W,EAAGklK,GAAUlnK,UAASskB,MAAO,CAAEvjB,MAAO4rC,KAC3EhpB,EAAI1pB,GAAK24E,EACTmoF,EAAUr8J,KAAKwoK,GAGnB,OADAnM,EAAUxzJ,SAAQ6D,GAAKpL,EAAQi4I,8BAA8B7sI,KACtDuY,ICjCJ,MAAM6lL,GACT,YAAYC,EAAWC,GACnBnuM,KAAKo6C,cAAgB,CAAC,IAAK,cAC3B,MAAM6xF,EAAaiiE,EAAUjiE,WACvBxtF,EAAYyvJ,EAAUzvJ,UACtBs4B,EAASm3H,EAAUn3H,OACnB3Y,EAAc8vI,EAAU9vI,YACxBu1F,EAAUv1F,EAAcl4D,KAAK4C,KAAKiuE,EAASk1D,GACjDjsI,KAAKinD,YAAc,CAACxI,EAAWk1G,GAC/B,MAEMgmC,EAAqD,EAA7BzzL,KAAK8H,MAAMi+H,EAAa,GAChD2tD,EAA0B3tD,EAAa,EACvC4tD,EAAgB,sDAGtB,IAAIuU,EAAwB,GACxBr3H,EAASk1D,EAAa,IACtBmiE,EAAwB,uCACAr3H,kEAK5B,IAAIs3H,EAA4B,GAC5Bt3H,EAASk1D,EAAa,IACtBoiE,EAA4B,uCACJt3H,mDAK5B/2E,KAAK85K,SAAW,2GAIds0B,2GAKAC,2PASEjwI,eAAyB6tE,+DACmB7tE,yEAI1Bu7H,2lBAgBlBE,kDAGqBF,mBACS,IAA5BC,8aAiBFC,yBACqC,IAA5BD,obAeTC,yBACqC,IAA5BD,+eAeTC,6DC9DL,MCgGD,GAAgB,CAClB4O,GACAE,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA1J,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACAmC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACAmD,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACAmC,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACAe,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA0B,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GD1PoC,CACpCvjM,WAAY4U,GACZW,YAAa,QACb0O,WA3DG,SAA4B5pB,GAC/B,MAAM,OAAEod,EAAM,QAAE5Y,EAAO,MAAEskB,GAAU9oB,GAC7B,EAAEwG,EAAC,WAAE03D,GAAe9gD,GACpB,YAAE+gD,GAAgBr1C,EAClB0nB,EAAQhqC,EAAEjB,MAAM/G,OAChB+gK,EAAY,GAClB,IAAIt1J,EAAO,EACX,MAAM8zE,EAAc,GAAgC,CAAC9zE,GAAOumC,GAC5D,IAAImkH,EAAYnuJ,EACG,MAAfu3E,IACA42E,EAAY,GAAU,CAAEv3I,OAAQ,CAAE5W,KAAKhC,UAASskB,MAAO,CAAEkgB,KAAM+0C,KAC/DwhF,EAAUr8J,KAAKyxJ,GACf1qJ,EAAO,GAA8B,EAAGumC,GAAO,IAEnD,MAAMW,EAAW,GAA0CwjH,EAAUpvJ,MAAO0E,EAAMk0D,GAC5E2Y,EAAS,GAAmB,CAAC69E,EAAUpvJ,MAAM0E,KAC7C6yL,EAAM,GAAQ,CAAE1/K,OAAQ,CAAE5W,EAAGmuJ,GAAanwJ,UAASskB,MAAO,CAAEvjB,MAAO,EAAE,EAAGuxE,MAC9EyoF,EAAUr8J,KAAK45L,GACf,MAAM5oG,EAAc3wE,GAAW/c,EAAEhB,OAC3B6oM,EAAe,CAAC7nM,EAAG0nM,EAAWhwI,EAAY14D,EAAO24D,KACnD,MAAM3f,EAAYh4C,EAAEjB,MAAM,GACpBuxE,EAAStwE,EAAEjB,MAAM,GACjBymI,EAAa,GAAwDl1D,EAAQ3Y,GAE7Ew1G,EAAU,IAAIq6B,GADF,CAAEhiE,aAAYl1D,SAAQt4B,YAAW2f,eACH+vI,GAC1CxwL,EAASlZ,EAAQ+tL,cAAc5e,EAAS,CAACntK,EAAG03D,GAAa14D,GAG/D,GAFA+5J,EAAUr8J,KAAKwa,GAEXA,EAAOnY,MAAM,KAAO44D,EACpB,OAAOzgD,EAEX,MAAM4wL,EAAY,GAAM,CACpB9pM,UACAskB,MAAO,CAAEvc,MAAO,EAAG0jC,KAAMkuB,EAAapG,KAAM,EAAGvyD,MAAO,aAEpD+oM,EAAW,GAAK,CAClBnxL,OAAQ,CAAE5W,EAAG8nM,GACb9pM,UACAskB,MAAO,CAAEq8B,KAAM,CAAC2xB,EAASk1D,MAK7B,OAHAuzB,EAAUr8J,KAAKorM,GACf/uC,EAAUr8J,KAAKqrM,GACAF,EAAa3wL,EAAQwwL,EAAWK,EAAU/oM,EAAO24D,IAI9DiZ,EAAW,GAAQ,CAAEh6D,OAAQ,CAAE5W,EADjB6nM,EAAavR,EAAK,qBAAsB5+H,EAAYg2B,EAAa/1B,IAC9B35D,UAASskB,MAAO,CAAEvjB,MAAO4rC,KAChF,IAAIjqC,EAASkwE,EACb,GAAmB,MAAf2G,EAAqB,CACrBwhF,EAAUr8J,KAAKk0E,GACf,MAAMpuC,EAAO,GAAoC+0C,GACjD72E,EAAS,GAAU,CAAEkW,OAAQ,CAAE5W,EAAGU,GAAU1C,UAASskB,MAAO,CAAEkgB,UAGlE,OADAu2H,EAAUxzJ,SAAQ6D,GAAKpL,EAAQi4I,8BAA8B7sI,KACtD1I,IC8PP,IAEJ,IAAK,MAAM+U,KAAgB,GACvBR,GAAeQ,GC3UnB,MCoCa,GAAU,CACnB,YAAau3B,GACb,mBCtCY,QDuCZ,qBEvCY,QFwCZ,YAAa,GACb,cAAe,GACf,iBAAkB,GAClB,KD3CY,U,4BIEhBp1C,EAAOC,QAAU,EAAjB,O,sBCHA,MAAMmwM,EAAQ,iCAEdpwM,EAAOC,QAAUowM,GAAQA,GAAQA,EAAKC,MAAQ,IAAI/jH,OAAO,IAAI6jH,MAAY,IAAI7jH,OAAO6jH,EAAO,M,uFCC9EG,EAAb,WACE,aAAc,YACZ5uM,KAAK6uM,YAAc,GACnB7uM,KAAK8uM,eAAiB,GACtB9uM,KAAK+uM,eAAiB,GACtB/uM,KAAKgvM,cAAgB,GACrBhvM,KAAKivM,yBAA2B,EANpC,8CASYroM,GACR5G,KAAK6uM,YAAcjoM,IAVvB,6CAiByBA,GACrB5G,KAAKivM,yBAA2BroM,IAlBpC,kCAyBcA,GACV5G,KAAKgvM,cAAgBpoM,IA1BzB,mCAsCeA,GACX5G,KAAK8uM,eAAiBloM,IAvC1B,yCA8CqBA,GACjB5G,KAAK+uM,eAAiBnoM,IA/C1B,gCAcI,OAAO5G,KAAK6uM,cAdhB,6CAsBI,OAAO7uM,KAAKivM,2BAtBhB,kCA8BI,OAAOjvM,KAAKgvM,gBA9BhB,mCAmCI,OAAOhvM,KAAK8uM,iBAnChB,yCA2CI,OAAO9uM,KAAK+uM,mBA3ChB,M,mICAMG,EAAQ,IAAIC,IAGLz8L,EACX,WAAY4gF,GAAQ,YAIlB47G,EAAME,YAAY97G,EAAQ,UAAW,oDACrC47G,EAAME,YAAY97G,EAAQ,OAAQ,oCAElC,IAAI+7G,EACAnlM,EACAsmD,EAAU,KAGd,IAAI5xD,MAAMC,QAAQy0F,EAAM,SAItB,MAAM,IAAIztF,MAAM,iDAIlB,GANEwpM,EAAU/7G,EAAM,QAMY,iBAAnBA,EAAM,KAWf,MAAM,IAAIztF,MAAM,yBAPdqE,EAFoB,GAAlBopF,EAAM,MAAmC,GAAlBA,EAAM,KAExBA,EAAM,KAEN,EASX,IAAIg8G,EAAYtuM,OAAOkO,OAAO,GAAImgM,GAElC,GAAY,GAARnlM,EAAW,CAEb,IAAIw6E,EAAU,GACV6qH,EAAsB,GACtBC,EAAa,EACbC,EAAQzuM,OAAO8lB,KAAKwoL,GAAW,GAEnC,IAAK,IAAI/vM,KADTixD,EAAU8+I,EAAUG,GAAOxpM,MACXqpM,EAAW,CAEzB,IAAII,EAASJ,EAAU/vM,GAAKmlF,QACxBjmF,EAAS6wM,EAAU/vM,GAAKgG,OAAO9G,OAMnC,IAAK,IAAIwH,KAJLxH,EAAS+wM,IACXA,EAAa/wM,GAGGixM,EAAQ,CAExB,IAAIC,EAAWD,EAAOzpM,GACtB,GAAI0pM,KAAYJ,EAAqB,CAEnC,IAAIx0H,EAAQw0H,EAAoBI,GAC5BrrM,EAAO,GAAH,OAAMqrM,EAAN,YAAkB50H,EAAQ,GAElC2J,EAAQvhF,KAAKmB,GAEbirM,EAAoBI,GAAY50H,EAAQ,OAGxC2J,EAAQvhF,KAAKwsM,GACbJ,EAAoBI,GAAY,GAOtC,IAAIhrM,EAAO,IAAI/F,MAAM4wM,GAErB,IAAK,IAAIjwM,KAAO8vM,EAAS,CAIvB,IAFA,IAAI9pM,EAAS8pM,EAAQ9vM,GAAKgG,OAEjBU,EAAQ,EAAGA,EAAQV,EAAO9G,OAAQwH,IAAS,CAElD,IAUyB,EAVrBW,EAAMrB,EAAOU,QACU,IAAhBtB,EAAKsB,GAEVrH,MAAMC,QAAQ+H,GAChBjC,EAAKsB,GAASW,EAEdjC,EAAKsB,GAAS,CAAEW,GAIdhI,MAAMC,QAAQ+H,IAChB,EAAAjC,EAAKsB,IAAO9C,KAAZ,YAAoByD,IAEpBjC,EAAKsB,GAAO9C,KAAKyD,GAMvB,GAAIrB,EAAO9G,OAAS+wM,EAAY,CAI9B,IAHA,IASO,EATHI,EAAgBP,EAAQ9vM,GAAKmlF,QAAQjmF,OACrCoxM,EAAajxM,MAAMgxM,GAEdtlD,EAAM,EAAGA,EAAMslD,EAAetlD,IACrCulD,EAAWvlD,GAAOr0F,SAGgB,IAAzBtxD,EAAK6qM,EAAa,GAC3B7qM,EAAK6qM,EAAa,GAAKK,GAEvB,EAAAlrM,EAAK6qM,EAAa,IAAGrsM,KAArB,QAA6B0sM,IAMnC,OADS,IAAIC,IAAUnrM,EAAM,CAAE+/E,QAASA,EAASz+E,MAAOuqD,IAEnD,iBAEL,IAAIk0B,EAAU,GACVqrH,EAAc,GACdC,EAAQ,EACZ,IAAK,IAAIzwM,KAAO8vM,EAAS,OACnBK,EAASL,EAAQ9vM,GAAKmlF,SAC1B,EAAAA,GAAQvhF,KAAR,YAAgBusM,IAEhB,IAAIO,GADJz/I,EAAU6+I,EAAQ9vM,GAAK0G,OACDmE,KAAI,SAACxD,GACzB,gBAAUA,EAAV,eAAoBopM,MAEtBD,EAAY5sM,KAAZ,MAAA4sM,EAAW,IAASE,IACpBD,GAAS,EAGX,IAAIE,EAAa,IAAI/rL,IAAIugE,GAEzBA,EAAU9lF,MAAM+D,KAAKutM,GAErB,IAAIvrM,EAAO,GAEX,IAAK,IAAIpF,KAAO8vM,EAAS,CAEvB,IAAI3vM,EAAQ2vM,EAAQ9vM,GAAKgG,OAIrB4qM,EAAad,EAAQ9vM,GAAKmlF,QAE1B0rH,EAAY,GAChB,IAAK,IAAIC,KAAa3rH,EAAS,CAC7B,IAAIirH,EAAWjrH,EAAQ2rH,IAIN,GAFFF,EAAW9+K,QAAQs+K,IAGhCS,EAAUjtM,KAAKwsM,GAGnB,GAAIS,EAAU3xM,OAAS,EACrB,IAAK,IAAIC,EAAI,EAAGA,EAAIgB,EAAMjB,OAAQC,IAAK,CAIrC,IAHA,IAAI4xM,EAAY5wM,EAAMhB,GAElB6xM,EAAU3xM,MAAM8lF,EAAQjmF,QACnBqM,EAAI,EAAGA,EAAI45E,EAAQjmF,OAAQqM,IAAK,CAEvC,IAAI6kM,EAAWjrH,EAAQ55E,GACvB,GAAIslM,EAAU1zG,SAASizG,GAErBY,EAAQzlM,GAAKmrD,QACR,CACL,IAAIhwD,EAAQkqM,EAAW9+K,QAAQs+K,GAC3B/wM,MAAMC,QAAQyxM,GAChBC,EAAQzlM,GAAKwlM,EAAUrqM,GAEvBsqM,EAAQzlM,GAAKwlM,GAMnB3rM,EAAKxB,KAAKotM,QAGZ5rM,EAAKxB,KAAL,MAAAwB,EAAI,IAASjF,IAKjB,OAAId,MAAMC,QAAQ8F,EAAK,IAErB,GADS,IAAImrM,IAAUnrM,EAAM,CAAE+/E,QAASA,EAASz+E,MAAO8pM,KAIxD,GADS,IAAIS,IAAO7rM,EAAM,CAAEsB,MAAO8pM,KA1EhC,oCA0FEzlM,EAAS,SAACgpF,GAErB,OADgB,IAAI5gF,EAAO4gF,K,05HCnM7B,IAAM47G,MAAQ,IAAIC,uCAYLW,UAAb,iKACE,mBAAYnrM,EAAM2uF,GAAQ,2GACxB,mBAAM3uF,EAAM2uF,IACPm9G,uBAFmB,EAD5B,yIAMyB,WACjBC,EAAW1wM,KAAK2wM,SAChBC,EAAY5wM,KAAK6wM,aAErBH,EAAS1kM,SAAQ,SAACs+I,EAAK5rJ,GACrB,EAAKkyM,EAAUlyM,IAAM,KACrBsC,OAAOC,eAAe,EAAM2vM,EAAUlyM,GAAI,CACxCgD,IADwC,WAEtC,OAAO,IAAI8uM,wCAAOxwM,KAAK2wM,SAASjyM,GAAI,CAClCgmF,QAASksH,EAAUlyM,GACnBuH,MAAOjG,KAAKiG,SAGhBhB,IAPwC,SAOpCvF,GACFM,KAAK8wM,UAAU,CAAEpB,OAAQkB,EAAUlyM,GAAIgB,MAAOA,YApBxD,6VA+BeqxM,EA/Bf,+BA+B6B,GA/B7B,qNAgCUC,EAhCV,OAkC0B,oBAAX3gM,OAGE4gM,oBAAQ,MAChBC,cACDH,EACAC,GACA,SAAC5wM,GAAD,OAASA,GAAOuO,QAAQhP,MAAMS,OAI1B+wM,EAAS,+BAAiCH,EAChD3gM,OAAO4oB,KAAKm4K,UAAUD,KA9C5B,kBAgDWH,GAhDX,gIA4DoB,WAAb19G,EAAa,uDAAJ,GACR+9G,EAAgB,CAAE,UAAW,QAAS,UAAW,QACrDnC,MAAMoC,0BAA0Bh+G,EAAQ+9G,GAExC/9G,EAAM,QAAcA,EAAM,UAAe,EAEnC,SAAUA,IACdA,EAAM,KAAW,GAGnB,IAAIi+G,EAAU,KAOd,GALEA,EADE,UAAWj+G,GAA4B,GAAlBA,EAAM,KACnBA,EAAM,MAENA,EAAM,QAGI,GAAlBA,EAAM,KAAe,CACvB,KAAM,YAAaA,GACjB,MAAMztF,MACJ,iFAGJ,IAAI9G,EAAOiB,KACPwxM,EAAe,GACfC,EAAY,GAEVxrM,EAAQsrM,EAAQnnM,KAAI,SAAC3D,GACzB,IAAIirM,EAAU3yM,EAAK2lF,QAAQrzD,QAAQ5qB,GACnC,IAAgB,GAAZirM,EACF,MAAM,IAAI7rM,MAAJ,kBAAqBY,EAArB,qBAER,OAAOirM,KAUT,GAPA1xM,KAAK2wM,SAAS3kM,SAAQ,SAACs+I,EAAK/+B,GACrBtlH,EAAMy2F,SAAS6uB,KAClBimF,EAAazyM,EAAK8xM,aAAatlF,IAAQ++B,EACvCmnD,EAAUtuM,KAAKpE,EAAK4yM,OAAOpmF,SAI1Bj4B,EAAM,QAAa,CACtB,IAAIs+G,EAAW7yM,EAAK2lF,QAChBmtH,EAAc7wM,OAAO8lB,KAAK0qL,GAC1BM,EAAK,IAAIhC,UAAU0B,EAAc,CACnCvrM,MAAOlH,EAAKkH,MACZ0rM,OAAQF,IAGV,OADAK,EAAGC,mBAAmBD,EAAIA,EAAGnB,SAAUkB,EAAaD,GAC7CE,EAEP,IAAIF,EAAW7yM,EAAK2lF,QAChBmtH,EAAc7wM,OAAO8lB,KAAK0qL,GAC9BxxM,KAAKgyM,wBAAwB,KAAM,KAAMR,EAAc,KAAMC,GAC7DzxM,KAAK+xM,mBAAmBhzM,EAAMA,EAAK4xM,SAAUkB,EAAaD,OAEvD,CACL,IAAK1C,MAAM+C,gBAAgB3+G,EAAQ,SACjC,MAAMztF,MACJ,mFAGJ0rM,EAAQvlM,SAAQ,SAACvF,GACf,IAAK,EAAKR,MAAMy2F,SAASj2F,GACvB,MAAM,IAAIZ,MAAJ,UAAaY,EAAb,gCAEV,IAEIyrM,EAAUC,EAFR5sM,EAASvF,KAAKuF,OAChB6sM,EAAW,GAgBf,GAdyB,iBAAdb,EAAQ,IAEjBvxM,KAAKiG,MAAM+F,SAAQ,SAACu/G,EAAK7sH,GACnB6yM,EAAQ70G,SAAS6uB,IACnB6mF,EAASjvM,KAAKzE,MAGlBwzM,EAAWhD,MAAMmD,aAAa9sM,EAAQ6sM,GACtCD,EAAYjD,MAAMmD,aAAaryM,KAAKiG,MAAOmsM,KAE3CF,EAAWhD,MAAMmD,aAAa9sM,EAAQgsM,GACtCY,EAAYjD,MAAMmD,aAAaryM,KAAKiG,MAAOsrM,KAGxCj+G,EAAM,QACT,OAAO,IAAIw8G,UAAUoC,EAAU,CAC7BxtH,QAAS1kF,KAAK0kF,QACdz+E,MAAOksM,IAGTnyM,KAAKsyM,gBAAkBC,sDAAUL,GACjClyM,KAAK2E,KAAOutM,EACZlyM,KAAKwyM,YAAYL,MAxJzB,4BAkKmB,IAAb7+G,EAAa,uDAAJ,GACP+9G,EAAgB,CAAE,UAAW,QACjCnC,MAAMoC,0BAA0Bh+G,EAAQ+9G,GAExC/9G,EAAM,KAAW,MAJF,OAKmBm/G,6CAASzyM,KAAMszF,GALlC,mFAKT4+G,EALS,KAKCxtH,EALD,KAKUD,EALV,KAMX0rH,EAAa,CAAEzrH,QAASA,GACxBotH,EAAK,IAAIhC,UAAUoC,EAAU/B,GAEjC,OADA2B,EAAGU,YAAY/tH,GACRqtH,IA3KX,6BAmLoB,IAAbx+G,EAAa,uDAAJ,GACR+9G,EAAgB,CAAE,UAAW,QACjCnC,MAAMoC,0BAA0Bh+G,EAAQ+9G,GAExC/9G,EAAM,KAAW,OAJD,OAMkBm/G,6CAASzyM,KAAMszF,GANjC,mFAMV4+G,EANU,KAMAxtH,EANA,KAMSD,EANT,KAOZ0rH,EAAa,CAAEzrH,QAASA,GACxBotH,EAAK,IAAIhC,UAAUoC,EAAU/B,GAEjC,OADA2B,EAAGU,YAAY/tH,GACRqtH,IA7LX,6BAqMiB,IAAVrtH,EAAU,uDAAH,EACV,GAAIA,EAAOzkF,KAAKuF,OAAO9G,QAAUgmF,EAAO,EAEtC,OAAOzkF,KAGP,IAAI2E,EAAO3E,KAAKuF,OAAOlB,MAAM,EAAGogF,GAC5B8mC,EAAMvrH,KAAKiG,MAAM5B,MAAM,EAAGogF,GAC1BhpE,EAAS,CAAEipE,QAAS1kF,KAAK6wM,aAAc5qM,MAAOslH,GAC9CumF,EAAK,IAAIhC,UAAUnrM,EAAM8W,GAC7B,OAAOq2L,IA/Mb,6BAwNiB,IAAVrtH,EAAU,uDAAH,EACNiuH,EAAU1yM,KAAKuF,OAAO9G,OAC1B,GAAIgmF,EAAOiuH,GAAWjuH,EAAO,EAE3B,OAAOzkF,KAGP,IAAI2E,EAAO3E,KAAKuF,OAAOlB,MAAMquM,EAAUjuH,GACnCkuH,EAAO3yM,KAAKiG,MAAM5B,MAAMquM,EAAUjuH,GAClChpE,EAAS,CAAEipE,QAAS1kF,KAAK6wM,aAAc5qM,MAAO0sM,GAC9Cb,EAAK,IAAIhC,UAAUnrM,EAAM8W,GAC7B,OAAOq2L,IAnOb,2VA6OexmM,EA7Of,gCA6OsB,EAAG+mD,EA7OzB,+BA6OgC,IACxB/mD,EAAMtL,KAAKwF,MAAM,IA9OzB,sBA+OY,IAAIK,MAAM,uDA/OtB,YAiPQyF,GAAO,GAAY,GAAPA,GAjPpB,sBAkPY,IAAIzF,MAAM,2CAlPtB,cAoPIyF,GAAe,IAATA,EAAatL,KAAKwF,MAAM,GAAK8F,EApPvC,SAqPiCinM,0DAAcvyM,KAAKiG,OAAO8sG,QAAQznG,EAAK+mD,GAAM28E,KAAK1jI,GAAK+jI,UArPxF,cAqPUujE,EArPV,OAsPUd,EAAK9xM,KAAK6yM,KAAK,CAAEpuH,KAAMmuH,IAtPjC,kBAuPWd,GAvPX,8HAgQMgB,EAAO5oM,GACT,GAAIlK,KAAK+yM,qCAAsC,CAE7C,IAAItoL,EAAUzqB,KAAKgzM,kBAAkB,CAAEhzM,KAAM8yM,GAAS5oM,GAClD+oM,EAAWxoL,EAAQ,GAAGjG,IAAIiG,EAAQ,IAClCmmL,EAAY5wM,KAAK0kF,QACrB,OAAO1kF,KAAKkzM,qBAAqBD,EAAUrC,GAE3C,MAAM/qM,MAAM,uDAxQlB,0BAiRMitM,EAAO5oM,GACT,GAAIlK,KAAK+yM,qCAAsC,CAE7C,IAAItoL,EAAUzqB,KAAKgzM,kBAAkB,CAAEhzM,KAAM8yM,GAAS5oM,GAClD/C,EAASsjB,EAAQ,GAAGutB,IAAIvtB,EAAQ,IAChCmmL,EAAY5wM,KAAK0kF,QACrB,OAAO1kF,KAAKkzM,qBAAqB/rM,EAAQypM,GAEzC,MAAM/qM,MAAM,uDAzRlB,0BAkSMitM,EAAO5oM,GACT,GAAIlK,KAAK+yM,qCAAsC,CAE7C,IAAItoL,EAAUzqB,KAAKgzM,kBAAkB,CAAEhzM,KAAM8yM,GAAS5oM,GAClD/C,EAASsjB,EAAQ,GAAGmqB,IAAInqB,EAAQ,IAChCmmL,EAAY5wM,KAAK0kF,QACrB,OAAO1kF,KAAKkzM,qBAAqB/rM,EAAQypM,GAEzC,MAAM/qM,MAAM,uDA1SlB,0BAmTMitM,EAAO5oM,GACT,GAAIlK,KAAK+yM,qCAAsC,CAE7C,IAAItoL,EAAUzqB,KAAKgzM,kBAAkB,CAAEhzM,KAAM8yM,GAAS5oM,GAClD/C,EAASsjB,EAAQ,GAAGiqB,IAAIjqB,EAAQ,IAChCmmL,EAAY5wM,KAAK0kF,QACrB,OAAO1kF,KAAKkzM,qBAAqB/rM,EAAQypM,GAEzC,MAAM/qM,MAAM,uDA3TlB,0BAoUMitM,EAAO5oM,GACT,GAAIlK,KAAK+yM,qCAAsC,CAE7C,IAAItoL,EAAUzqB,KAAKgzM,kBAAkB,CAAEhzM,KAAM8yM,GAAS5oM,GAClD/C,EAASsjB,EAAQ,GAAGmtB,IAAIntB,EAAQ,IAChCmmL,EAAY5wM,KAAK0kF,QACrB,OAAO1kF,KAAKkzM,qBAAqB/rM,EAAQypM,GAEzC,MAAM/qM,MAAM,uDA5UlB,0BAqVMitM,EAAO5oM,GACT,GAAIlK,KAAK+yM,qCAAsC,CAE7C,IAAItoL,EAAUzqB,KAAKgzM,kBAAkB,CAAEhzM,KAAM8yM,GAAS5oM,GAClD/C,EAASsjB,EAAQ,GAAG6mC,IAAI7mC,EAAQ,IAChCmmL,EAAY5wM,KAAK0kF,QACrB,OAAO1kF,KAAKkzM,qBAAqB/rM,EAAQypM,GAEzC,MAAM/qM,MAAM,uDA7VlB,6BAsWiB,IAAVqE,EAAU,uDAAH,EACV,GAAIlK,KAAK+yM,uCAAwC,CAC/C,IAcIZ,EAbAgB,EAAW,IACH,GAARjpM,EACOlK,KAAK2wM,SAEL3wM,KAAKuF,QAGT6E,KAAI,SAAC7L,GACV,IAAIyH,EAAOkpM,MAAMkE,aAAa70M,GAC1B80M,EAAYd,sDAAUvsM,GAAMi+C,OAAOqvJ,YACvCH,EAAShwM,KAAKkE,OAAOgsM,EAAUtzL,QAAQ,QAKvCoyL,EADU,GAARjoM,EACUlK,KAAK6wM,aAEL7wM,KAAKiG,MAEnB,IAAIstM,EAAK,IAAI/C,wCAAO2C,EAAU,CAAEzuH,QAAS,MAAOz+E,MAAOksM,IACvD,OAAOoB,EAEP,MAAM1tM,MAAM,gEA/XlB,+BAwYmB,IAAVqE,EAAU,uDAAH,EACZ,GAAIlK,KAAK+yM,qCAAsC,CAE7C,IAAIS,EAAajoF,EACL,GAARrhH,GACFspM,EAAcxzM,KAAKyzM,gBAAgBH,YACnC/nF,EAAMvrH,KAAK6wM,eAEX2C,EAAcxzM,KAAKsyM,gBAAgBgB,YACnC/nF,EAAMvrH,KAAKiG,OAEb,IAAIytM,EAASxE,MAAMyE,SAASH,GAAa,GACrCD,EAAK,IAAI/C,wCAAOkD,EAAQ,CAAEztM,MAAOslH,IACrC,OAAOgoF,EAEP,MAAM1tM,MAAM,uDAvZlB,4BAgagB,IAAVqE,EAAU,uDAAH,EACT,GAAIlK,KAAK+yM,qCAAsC,CAE7C,IAAIa,EAAW5zM,KAAK6zM,qBAAqB7zM,KAAMkK,GAC3CspM,EAAcI,EAAS,GACvBroF,EAAMqoF,EAAS,GACfzsM,EAASqsM,EAAYhtM,IAAIotM,EAAS,IAClCL,EAAK,IAAI/C,wCAAOrpM,EAAOmsM,YAAa,CAAErtM,MAAOslH,IACjD,OAAOgoF,EAEP,MAAM1tM,MAAM,uDA1alB,4BAmbgB,IAAVqE,EAAU,uDAAH,EACT,GAAIlK,KAAK+yM,qCAAsC,CAE7C,IAAIa,EAAW5zM,KAAK6zM,qBAAqB7zM,KAAMkK,GAC3CspM,EAAcI,EAAS,GACvBroF,EAAMqoF,EAAS,GACfzsM,EAASqsM,EAAY9sM,IAAIktM,EAAS,IAClCL,EAAK,IAAI/C,wCAAOrpM,EAAOmsM,YAAa,CAAErtM,MAAOslH,IACjD,OAAOgoF,EAEP,MAAM1tM,MAAM,uDA7blB,4BAscgB,IAAVqE,EAAU,uDAAH,EACT,GAAIlK,KAAK+yM,qCAAsC,CAE7C,IACIxnF,EADAioF,EAAcxzM,KAAKyzM,gBAAgBH,YAGrC/nF,EADU,GAARrhH,EACIlK,KAAK6wM,aAEL7wM,KAAKiG,MAEb,IAAIytM,GAASI,4CAAIN,EAAatpM,GAC1BqpM,EAAK,IAAI/C,wCAAOkD,EAAQ,CAAEztM,MAAOslH,IACrC,OAAOgoF,EAEP,MAAM1tM,MAAM,uDApdlB,4BA6dgB,IAAVqE,EAAU,uDAAH,EACT,GAAIlK,KAAK+yM,qCAAsC,CAE7C,IACIxnF,EADAioF,EAAcxzM,KAAKyzM,gBAAgBH,YAGrC/nF,EADU,GAARrhH,EACIlK,KAAK6wM,aAEL7wM,KAAKiG,MAEb,IAAIytM,GAASxvJ,4CAASsvJ,EAAatpM,GAC/BqpM,EAAK,IAAI/C,wCAAOkD,EAAQ,CAAEztM,MAAOslH,IACrC,OAAOgoF,EAEP,MAAM1tM,MAAM,uDA3elB,8BAmfkB,IAAVqE,EAAU,uDAAH,EACX,GAAIlK,KAAK+yM,qCAAsC,CAE7C,IAAIS,EAAajoF,EACL,GAARrhH,GACFspM,EAAcxzM,KAAKyzM,gBAAgBH,YACnC/nF,EAAMvrH,KAAK6wM,eAEX2C,EAAcxzM,KAAKsyM,gBAAgBgB,YACnC/nF,EAAMvrH,KAAKiG,OAEb,IAAIkrI,EAAS+9D,MAAM6E,YAAYP,GAAa,GAAM,GAC9CD,EAAK,IAAI/C,wCAAOr/D,EAAQ,CAAElrI,MAAOslH,IACrC,OAAOgoF,EAEP,MAAM1tM,MAAM,uDAlgBlB,8BA0gBgB,IAARmuM,EAAQ,uDAAH,EACT,GAAIh0M,KAAK+yM,qCAAsC,CAE7C,IAAIxtM,EAASvF,KAAKuF,OACdgmH,EAAMvrH,KAAKiG,MAEXguM,EAAW/E,MAAMgF,QAAQ3uM,EAAQyuM,GAAI,GACrC/8F,EAAU,CAAEvyB,QAAS1kF,KAAK6wM,aAAc5qM,MAAOslH,GAC/CumF,EAAK,IAAIhC,UAAUmE,EAAUh9F,GACjC,OAAO66F,EAEP,MAAMjsM,MAAM,uDArhBlB,kCA+hB2B,IAAfqE,EAAe,uDAAR,EAAGiqM,EAAK,uCACvB,GAAc,GAARjqM,GAAwB,GAARA,EACpB,MAAM,IAAIrE,MAAM,+BAGlB,GAAI7F,KAAK+yM,qCAAsC,CAC7C,IAAIpuM,EAAO,GACPyvM,EAAU,KAGZA,EADU,GAARlqM,EACQlK,KAAK2wM,SAEL3wM,KAAKuF,OAGjB,IAAK,IAAI7G,EAAI,EAAGA,EAAI01M,EAAQ31M,OAAQC,IAAK,CAIvC,IAHA,IAAIgB,EAAQ00M,EAAQ11M,GAChB21M,EAAW30M,EAAM,GACjB40M,EAAY,CAAED,GACTvpM,EAAI,EAAGA,EAAIpL,EAAMjB,OAAQqM,IAAK,CACrC,IAAIypM,EAAW70M,EAAMoL,GACrB,OAAQqpM,GACR,IAAK,MACCI,EAAWF,GACbA,EAAWE,EACXD,EAAUnxM,KAAKoxM,IAEfD,EAAUnxM,KAAKkxM,GAEjB,MACF,IAAK,MACCE,EAAWF,GACbA,EAAWE,EACXD,EAAUnxM,KAAKoxM,IAEfD,EAAUnxM,KAAKkxM,GAEjB,MACF,IAAK,MACHA,GAAsBE,EACtBD,EAAUnxM,KAAKkxM,GAEf,MACF,IAAK,OACHA,GAAsBE,EACtBD,EAAUnxM,KAAKkxM,IAKnB1vM,EAAKxB,KAAKmxM,GAOZ,OAJY,GAARpqM,IACFvF,EAAOuqM,MAAMsF,iBAAiB7vM,IAGzB,IAAImrM,UAAUnrM,EAAM,CAAE+/E,QAAS1kF,KAAK0kF,UAE3C,MAAM7+E,MAAM,uDA1lBlB,+BAkmBsB,IACdqE,EADCopF,EAAa,uDAAJ,GAKZppF,EAHGglM,MAAM+C,gBAAgB3+G,EAAQ,QAG1BA,EAAM,KAFN,EAKT,IAAI3uF,EAAO3E,KAAKy0M,UAAUvqM,EAAM,OAChC,OAAOvF,IA3mBX,+BAmnBsB,IACduF,EADCopF,EAAa,uDAAJ,GAKZppF,EAHGglM,MAAM+C,gBAAgB3+G,EAAQ,QAG1BA,EAAM,KAFN,EAIT,IAAI3uF,EAAO3E,KAAKy0M,UAAUvqM,EAAM,OAChC,OAAOvF,IA3nBX,+BAmoBsB,IACduF,EADCopF,EAAa,uDAAJ,GAKZppF,EAHGglM,MAAM+C,gBAAgB3+G,EAAQ,QAG1BA,EAAM,KAFN,EAIT,IAAI3uF,EAAO3E,KAAKy0M,UAAUvqM,EAAM,OAChC,OAAOvF,IA3oBX,gCAmpBuB,IACfuF,EADEopF,EAAa,uDAAJ,GAKbppF,EAHGglM,MAAM+C,gBAAgB3+G,EAAQ,QAG1BA,EAAM,KAFN,EAIT,IAAI3uF,EAAO3E,KAAKy0M,UAAUvqM,EAAM,QAChC,OAAOvF,IA3pBX,6BAwqBI,OALS,IAAImrM,UAAJ,gFAAmB9vM,KAAKuF,QAAU,CACzCm/E,QAAS,gFAAK1kF,KAAK6wM,cACnB5qM,MAAOjG,KAAKiG,MACZ0rM,OAAQ3xM,KAAK2xM,WAtqBnB,oCAgrB+B,IAAjB+C,EAAiB,wDAC3B,IAAIA,EAEG,CACL,IAAI5C,EAAK9xM,KAAK20M,OAEd,OADA7C,EAAG8C,gBACI9C,EAJP9xM,KAAK40M,kBAlrBX,kCA8rByB,IAAbthH,EAAa,uDAAJ,GACb+9G,EAAgB,CAAE,MAAO,OAAQ,WAGrC,GAFAnC,MAAMoC,0BAA0Bh+G,EAAQ+9G,IAEnCnC,MAAM+C,gBAAgB3+G,EAAQ,OACjC,MAAMztF,MAAM,wDAWd,GARKqpM,MAAM+C,gBAAgB3+G,EAAQ,aACjCA,EAAM,SAAc,GAGjB47G,MAAM+C,gBAAgB3+G,EAAQ,UACjCA,EAAM,MAAW,GAIjB10F,MAAMC,QAAQy0F,EAAM,MACpBA,EAAM,IAAQ70F,QAAUuB,KAAKiG,MAAMxH,OAEnC,MAAMoH,MAAM,gDAAD,OACuCytF,EAAM,IAAQ70F,OADrD,gDACmGuB,KAAKiG,MAAMxH,SAW3H,GAN0B,iBAAjB60F,EAAM,KACbtzF,KAAK6wM,aAAan0G,SAASpJ,EAAM,OAEjCA,EAAM,SAAeA,EAAM,IAC3BA,EAAM,IAAUtzF,KAAKszF,EAAM,KAAS/tF,SAElC+tF,EAAM,QAMH,CACL,IAAIw+G,EAAK9xM,KAAK20M,OAKd,OAJA7C,EAAGU,YAAYl/G,EAAM,KACjBA,EAAM,MAAyC,iBAAtBA,EAAM,UACjCw+G,EAAG+C,KAAK,CAAEnwH,QAAS,CAAE4O,EAAM,UAAgBppF,KAAM,EAAGwqM,SAAS,IAExD5C,EAVP9xM,KAAKwyM,YAAYl/G,EAAM,KACnBA,EAAM,MAAyC,iBAAtBA,EAAM,UACjCtzF,KAAK60M,KAAK,CAAEnwH,QAAS,CAAE4O,EAAM,UAAgBohH,SAAS,EAAMxqM,KAAM,MAluB1E,iCAqvBI,IAAI4qM,EAAa90M,KAAK+0M,cAAc,CAAE,UAAW,UAC7CnE,EAAYkE,EAAWjE,aAGvBmE,EAAY,GAehB,OAdApE,EAAU5kM,SAAQ,SAAC1H,GACjB,IAAI2wM,EAAaH,EAAWxwM,GASxB4wM,EAAS,CARDD,EAAWl6H,QACZk6H,EAAWhxJ,OACZgxJ,EAAWnB,MACXmB,EAAWzuM,MACRyuM,EAAWvB,SACduB,EAAWvuM,MACNuuM,EAAU,OAGzBD,EAAU1wM,GAAQ4wM,KAEX,IAAIpF,UAAUkF,EAAW,CAAE/uM,MAhBxB,CAAE,QAAS,OAAQ,MAAO,MAAO,SAAU,MAAO,cAiBpDuW,MAAM,KAxwBpB,oCAgxBgB24L,GACZ,IAAIxD,EAAS3xM,KAAK2xM,OACdf,EAAY5wM,KAAK6wM,aACjBH,EAAW,GACX0E,EAAoBp1M,KAAK2wM,SACvB0E,EAAqB,CAAE,UAAW,QAAS,SAAU,WAE3D,OAAeh1M,MAAX80M,EAEOn1M,KAAK20M,QAIdQ,EAAQnpM,SAAQ,SAACyX,GACf,IAAK4xL,EAAmB34G,SAASj5E,GAC/B,MAAM5d,MAAM,sBAAD,OAAuB4d,EAAvB,uBAIfkuL,EAAO3lM,SAAQ,SAACvG,EAAO/G,GACjBy2M,EAAQz4G,SAASj3F,KACnBirM,EAASE,EAAUlyM,IAAM02M,EAAkB12M,OAGtC,IAAIoxM,UAAUY,MAxyB7B,4BA22B4B,IAAtBp9G,EAAsB,uDAAb,CAAEppF,KAAM,GACnB,GAAIlK,KAAK+yM,uCAAwC,CAC/C,IAcIZ,EAbAmD,EAAW,IACO,GAAlBhiH,EAAM,KACCtzF,KAAK2wM,SAEL3wM,KAAKuF,QAGT6E,KAAI,SAAC7L,GACV,IAAIyH,EAAOkpM,MAAMkE,aAAa70M,GAC1Bg3M,EAAWhD,sDAAUvsM,GAAMa,MAAMysM,YACrCgC,EAASnyM,KAAKkE,OAAOkuM,EAASx1L,QAAQ,QAKtCoyL,EADoB,GAAlB7+G,EAAM,KACItzF,KAAK6wM,aAEL7wM,KAAKiG,MAEnB,IAAIstM,EAAK,IAAI/C,wCAAO8E,EAAU,CAAE5wH,QAAS,MAAOz+E,MAAOksM,IACvD,OAAOoB,EAEP,MAAM1tM,MAAM,gEAp4BlB,4BA64BI,IAAIlB,EAAO3E,KAAKuF,OAGZiwM,EADcjD,sDAAU5tM,GACDsuC,MAAMqgK,YAKjC,OAJS,IAAIxD,UAAUZ,MAAMgF,QAAQsB,EAAU,GAAG,GAAQ,CACxD9wH,QAAS1kF,KAAK6wM,aACd5qM,MAAOjG,KAAKiG,UAn5BlB,2CAw5BuB6rM,EAAI5nM,GACvB,IAAIspM,EAAajoF,EAAKkqF,EAatB,OAZY,GAARvrM,GAGFspM,EAAc1B,EAAGQ,gBACjB/mF,EAAMumF,EAAGjB,aACT4E,EAAS,IAETjC,EAAc1B,EAAGQ,gBACjB/mF,EAAMumF,EAAG7rM,MACTwvM,EAAS,GAGJ,CAAEjC,EAAajoF,EAAKkqF,KAt6B/B,kCA86BQniH,QAEJ,IAAIoiH,UAAY,CAAE,IAAK,IAAK,KAAM,KAAM,KAAM,MAM1CC,aAAcC,SAAUl2M,MAE5B,GANKwvM,MAAM+C,gBAAgB3+G,OAAQ,aACjCA,OAAM,SAAc,IAKlB47G,MAAM+C,gBAAgB3+G,OAAQ,UAOhC,MAAM,IAAIztF,MAAM,sBANhB,IAAI7F,KAAK0kF,QAAQgY,SAASpJ,OAAM,QAG9B,MAAM,IAAIztF,MAAJ,iBAAoBytF,OAAM,OAA1B,oBAMV,GARIqiH,aAAe31M,KAAK0kF,QAAQrzD,QAAQiiE,OAAM,SAQ1C47G,MAAM+C,gBAAgB3+G,OAAQ,MAOhC,MAAM,IAAIztF,MAAM,qCANhB,IAAI6vM,UAAUh5G,SAASpJ,OAAM,IAG3B,MAAM,IAAIztF,MAAJ,WAAcytF,OAAM,GAApB,yCAMV,GARIsiH,SAAWtiH,OAAM,IAQjB47G,MAAM+C,gBAAgB3+G,OAAQ,MAGhC,MAAM,IAAIztF,MAAM,iCAFhBnG,MAAQ4zF,OAAM,GAUhB,IALA,IAAI3uF,KAAO3E,KAAKuF,OACZU,MAAQjG,KAAKiG,MACbisM,SAAW,GACXC,UAAY,GAEPzzM,EAAI,EAAGA,EAAIiG,KAAKlG,OAAQC,IAAK,CACpC,IAAIm3M,WAAalxM,KAAKjG,GAClBo3M,KAAOD,WAAWF,cAGlBI,KAAK,OAAD,OAAQH,SAAR,YACN1D,SAAS/uM,KAAK0yM,YACd1D,UAAUhvM,KAAK8C,MAAMvH,KAIzB,GAAuB,GAAnBwzM,SAASzzM,OACX,MAAM,IAAIoH,MAAJ,+CACoCnG,MADpC,qCACsE4zF,OAAM,SAGpF,IAAIA,OAAM,QAQH,CACL,IAAI0iH,OAAS,IAAIlG,UAAUoC,SAAU,CACnCxtH,QAAS1kF,KAAK0kF,QACdz+E,MAAOksM,YAET,OAAO6D,OAZPh2M,KAAKgyM,wBACHE,SACAlyM,KAAK0kF,QACL,KACAytH,UACA,QA7+BR,gCA6/BY7+G,GACR47G,MAAME,YAAY97G,EAAQ,SAAU,6BACpC47G,MAAME,YAAY97G,EAAQ,QAAS,8BAEnC,IAEI5zF,EAFAu2M,EAAc3iH,EAAM,OACpB4iH,EAAcl2M,KAAKwF,MAAM,GAS7B,IALE9F,EADE4zF,EAAM,iBAAqBk9G,wCACrBl9G,EAAM,MAAU/tF,OAEhB+tF,EAAM,OAGN70F,QAAUy3M,EAClB,MAAM,IAAIrwM,MAAJ,uBACYnG,EAAMjB,OADlB,yBACyCy3M,IAIjD,GAAIl2M,KAAK0kF,QAAQgY,SAASu5G,GAAc,CACtC,IAAIvE,EAAU1xM,KAAK0kF,QAAQrzD,QAAQ4kL,GAC/B/D,EAAW,GAEflyM,KAAKuF,OAAO6E,KAAI,SAACxD,EAAKX,GACpB,IAAIkwM,EAAUvvM,EAAIvC,QAClB8xM,EAAQzE,GAAWhyM,EAAMuG,GACzBisM,EAAS/uM,KAAKgzM,MAEhBn2M,KAAKgyM,wBAAwBE,EAAU,KAAM,KAAM,KAAM,UACpD,CACL,IAAIvtM,EAAO3E,KAAKuF,OACZ2sM,EAAW,GAEfvtM,EAAKyF,KAAI,SAAUxD,EAAKX,GACtB,IAAIkwM,EAAUvvM,EAAIvC,QAClB8xM,EAAQhzM,KAAKzD,EAAMuG,IACnBisM,EAAS/uM,KAAKgzM,MAIhB,IAAIC,EAAa,gFAAKp2M,KAAK2xM,QAC3ByE,EAAWjzM,KAAK+rM,MAAMmH,QAAQ32M,GAAO,IAErC,IAAI42M,EAAgB,gFAAKt2M,KAAK0kF,SAC9B4xH,EAAcnzM,KAAK8yM,GAEnBj2M,KAAKgyM,wBACHE,EACAoE,EACA,KACA,KACAF,GAEFp1M,OAAOC,eAAejB,KAAMi2M,EAAa,CACvCv0M,IADuC,WAErC,OAAO,IAAI8uM,wCAAO9wM,EAAO,CAAEglF,QAASuxH,EAAahwM,MAAOjG,KAAKiG,SAE/DhB,IAJuC,SAInCvF,GACFM,KAAK8wM,UAAU,CAAEpB,OAAQuG,EAAav2M,MAAOA,UAxjCvD,8BAkkCU4qJ,GACN,IAAM9rJ,EAAMwB,KAAKwF,MAAM,GACjBqrM,EAAe7wM,KAAK6wM,aACpBR,EAAY/lD,EAAIlgJ,KAAI,SAACxD,GAAD,OAASiqM,EAAax/K,QAAQzqB,MAClD2vM,EAAYv2M,KAAK2xM,OAAO7lL,QAAO,SAACllB,EAAKX,GACzC,OAAOoqM,EAAU3zG,SAASz2F,MAGtBlH,EAAOiB,KA0BPw2M,EAVN,SAASC,EAAiBC,GACxB,IAAMC,EAAqBD,EAAa,GAClCE,EAAoBF,EAAaryM,MAAM,GACvCwyM,EAAS,GAKf,OAJKD,EAAkBn4M,OAGrBk4M,EAAmB3qM,SAAQ,SAAC8qM,GAAD,OAAeD,EAAOC,GAAaL,EAAiBG,MAF/ED,EAAmB3qM,SAAQ,SAAC8qM,GAAD,OAAeD,EAAOC,GAAa,MAGzDD,EAEQJ,CAzBJnsD,EAAIlgJ,KACf,SAAC6rM,GACC,IAAMpF,EAAan0G,SAASu5G,GAC1B,MAAM,IAAIpwM,MAAJ,iBAAoBowM,EAApB,oBAFO,OAGYxD,6CAAS1zM,EAAM,CACxC0lF,KAAM,CAAC,KAAD,OAAOjmF,IACbkmF,QAAS,CAAC,GAAD,OAAKuxH,IACdxyL,KAAM,QANO,mFAGPszL,EAHO,KAQf,OARe,KAQRA,KAIiB3sM,KAAI,SAAC2sM,GAAD,OAAiB7H,MAAM8H,SAASD,OAchE,OAAO,IAAIE,yCACTT,EACAlsD,EACAtqJ,KAAKuF,OACLsrM,EACA0F,GACAzjL,UA5mCN,6BAonCS68K,GACL,IAAK3vM,KAAK0kF,QAAQgY,SAASizG,GACzB,MAAM,IAAI9pM,MAAJ,iBAAoB8pM,EAApB,oBAER,IACIgD,EADgBzD,MAAMgI,aAAal3M,KAAK0kF,SACnBirH,GACrBhrM,EAAO3E,KAAK2wM,SAASgC,GACzB,OAAO,IAAInC,wCAAO7rM,EAAM,CAAE+/E,QAAS,CAAEirH,OA3nCzC,+BAooCsB,WAAbr8G,EAAa,uDAAJ,GACV+9G,EAAgB,CAAE,UAAW,SAAU,WAO3C,GANAnC,MAAMoC,0BAA0Bh+G,EAAQ+9G,GAEnCnC,MAAM+C,gBAAgB3+G,EAAQ,aACjCA,EAAM,SAAc,GAGlB47G,MAAM+C,gBAAgB3+G,EAAQ,WAAY,CAU5C,GARAA,EAAM,QAAYlpF,KAAI,SAACkgJ,GACrB,IAAK,EAAKumD,aAAan0G,SAAS4tD,GAC9B,MAAMzkJ,MAAM,iDAAD,OACwC,EAAKgrM,aAD7C,iBACkEvmD,OAK7Eh3D,EAAM,QAAY70F,QAAU60F,EAAM,OAAW70F,OAC/C,MAAMoH,MAAM,mIAAD,OACqBytF,EAAM,QAAY70F,OADvC,iCACsE60F,EAAM,OAAW70F,SAEpG,IAAI+yM,EAAexxM,KAAK2wM,SACxBr9G,EAAM,QAAYlpF,KAAI,SAACkgJ,EAAK5rJ,GAC1B,IAAIgzM,EAAU,EAAKb,aAAax/K,QAAQi5H,GACpCqmD,EAAW,EAAKA,SAASe,GAEzByF,EAAS,GACbxG,EAASvmM,KAAI,SAACxD,GAER2E,MAAM3E,IAAsB,iBAAPA,EACvBuwM,EAAOh0M,KAAKmwF,EAAM,OAAW50F,IAE7By4M,EAAOh0M,KAAKyD,MAGhB4qM,EAAaE,GAAWyF,KAG1B,IAAIC,EAAa,GAKjB,GAJA5F,EAAapnM,KAAI,SAACkgJ,EAAK5rJ,GACrB04M,EAAW,EAAKvG,aAAanyM,IAAM4rJ,MAGjCh3D,EAAM,QAGR,OAAO,IAAIw8G,UAAUsH,EAAY,CAAEnxM,MAAOjG,KAAKiG,QAF/CjG,KAAKgyM,wBAAwB,KAAM,KAAMoF,EAAY,KAAM,UAIxD,CAEL,IAAKlI,MAAM+C,gBAAgB3+G,EAAQ,UACjC,MAAMztF,MAAM,4CAGd,IAAIwxM,EAEFA,EADEz4M,MAAMC,QAAQy0F,EAAM,QACZA,EAAM,OAAW,GAEjBA,EAAM,OAMlB,IAJA,IAAI3uF,EAAO,GACPY,EAASvF,KAAKuF,OACdm/E,EAAU1kF,KAAK0kF,QAEVhmF,EAAI,EAAGA,EAAI6G,EAAO9G,OAAQC,IAAK,CAGtC,IAFA,IAAI41M,EAAY,GACZhE,EAAY/qM,EAAO7G,GACdoM,EAAI,EAAGA,EAAIwlM,EAAU7xM,OAAQqM,IAChCS,MAAM+kM,EAAUxlM,KAA8B,iBAAhBwlM,EAAUxlM,GAC1CwpM,EAAUnxM,KAAKk0M,GAEf/C,EAAUnxM,KAAKmtM,EAAUxlM,IAG7BnG,EAAKxB,KAAKmxM,GAEZ,IAAIhhH,EAAM,QAGR,OAAO,IAAIw8G,UAAUnrM,EAAM,CAAE+/E,QAASA,EAASz+E,MAAOjG,KAAKiG,QAF3DjG,KAAKgyM,wBAAwBrtM,EAAM,KAAM,KAAM,KAAM,SAltC7D,6BAiuCI,OAAO,IAAImrM,UAFQ9vM,KAAKs3M,SAEW,CAAE5yH,QADvB1kF,KAAK6wM,aACoC5qM,MAAOjG,KAAKiG,UAjuCvE,iCA4uCI,IAHA,IAAIsxM,EAAYv3M,KAAKuF,OACjBiyM,EAAa,GAER94M,EAAI,EAAGA,EAAI64M,EAAU94M,OAAQC,IACnB64M,EAAU74M,GAEZg+F,SAASzmC,MACtBuhJ,EAAWr0M,KAAKzE,GAGpB,OAAO84M,IAnvCX,+BA0vCsB,IAAblkH,EAAa,uDAAJ,GACVppF,EAAOopF,EAAM,MAAY,EACzBohH,EAAUphH,EAAM,UAAe,EAEnC,GAAY,GAARppF,GAAqB,GAARA,EACf,MAAM,IAAIrE,MAAM,8BAGlB,IAAI0xM,EAAY,KACZ7yH,EAAU,KACF,GAARx6E,GACFqtM,EAAYv3M,KAAKuF,OACjBm/E,EAAU1kF,KAAK0kF,UAEf6yH,EAAYv3M,KAAK2wM,SACjBjsH,EAAU,IAIZ,IAFA,IAAI//E,EAAO,GAEFjG,EAAI,EAAGA,EAAI64M,EAAU94M,OAAQC,IAAK,CACzC,IAAI6G,EAASgyM,EAAU74M,GAEvB,IAAK6G,EAAOm3F,SAASzmC,KACnB,GAAY,GAAR/rD,EACFvF,EAAKxB,KAAKoC,QAGV,GADAm/E,EAAQvhF,KAAKnD,KAAK0kF,QAAQhmF,IACP,GAAfiG,EAAKlG,OACP,IAAK,IAAIqM,EAAI,EAAGA,EAAIvF,EAAO9G,OAAQqM,IACjCnG,EAAKxB,KAAK,CAAEoC,EAAOuF,UAGrB,IAAK,IAAIA,EAAI,EAAGA,EAAInG,EAAKlG,OAAQqM,IAC/BnG,EAAKmG,GAAG3H,KAAKoC,EAAOuF,IAO9B,GAAe,GAAX4pM,EAKF,OAAO,IAAI5E,UAAUnrM,EAAM,CAAE+/E,QAASA,IAJtC1kF,KAAK2E,KAAOA,EACZ3E,KAAK40M,gBACL50M,KAAK0kF,QAAUA,IAryCrB,4BAizCQ4O,GAEJ,IADkB47G,MAAMuI,cAAcnkH,EAAM,UAE1C,MAAM,IAAIztF,MAAM,mCAGlB,IAAI6xM,EAAWpkH,EAAM,SACjB3uF,EAAO,GAEX,GAAIuqM,MAAM+C,gBAAgB3+G,EAAQ,QAAS,CAEzC,IACI8gH,EAEFA,EADU,GAFD9gH,EAAM,KAGLtzF,KAAKuF,OAELvF,KAAK2wM,SAGjB,IAAK,IAAIjyM,EAAI,EAAGA,EAAI01M,EAAQ31M,OAAQC,IAAK,CACvC,IAAIgB,EAAQ6yM,sDAAU6B,EAAQ11M,IAC1Bi5M,OAAa,EACjB,IACEA,EAAgBD,EAASh4M,GAAO4zM,YAChC,MAAO3zM,GACP,MAAMkG,MAAM,0LAKdlB,EAAKxB,KAAKw0M,QAEP,CAEL,IAAIvD,EAAUp0M,KAAKuF,OACf2sM,EAAW,GACfkC,EAAQpoM,SAAQ,SAACqT,GACf,IAAIu4L,EAAU,GACdv4L,EAAIrT,SAAQ,SAACpF,GACXgxM,EAAQz0M,KAAKu0M,EAAS9wM,OAExBsrM,EAAS/uM,KAAKy0M,MAEhBjzM,EAAOutM,EAGT,OAAIhD,MAAM2I,cAAclzM,GACA,GAAlB2uF,EAAM,KACC,IAAIk9G,wCAAO7rM,EAAM,CAAEsB,MAAOjG,KAAKiG,QAG/B,IAAIuqM,wCAAO7rM,EAAM,CAAEsB,MAAOjG,KAAK6wM,eAIjC,IAAIf,UAAUnrM,EAAM,CAC3B+/E,QAAS1kF,KAAK6wM,aACd5qM,MAAOjG,KAAKiG,UA12CpB,yBAs3CK6sM,EAAO5oM,GACR,GAAIlK,KAAK+yM,uCAKP,OAJY1yM,MAAR6J,IACFA,EAAO,GAEAlK,KAAK83M,cAAchF,EAAO,KAAM5oM,GAGzC,MAAMrE,MAAM,gEA93ClB,yBAw4CKitM,EAAO5oM,GACR,GAAIlK,KAAK+yM,uCAMP,OALY1yM,MAAR6J,IACFA,EAAO,GAGAlK,KAAK83M,cAAchF,EAAO,KAAM5oM,GAGzC,MAAMrE,MAAM,gEAj5ClB,yBA25CKitM,EAAO5oM,GACR,GAAIlK,KAAK+yM,uCAKP,OAJY1yM,MAAR6J,IACFA,EAAO,GAEAlK,KAAK83M,cAAchF,EAAO,KAAM5oM,GAGzC,MAAMrE,MAAM,gEAn6ClB,yBA66CKitM,EAAO5oM,GACR,GAAIlK,KAAK+yM,uCAKP,OAJY1yM,MAAR6J,IACFA,EAAO,GAEAlK,KAAK83M,cAAchF,EAAO,KAAM5oM,GAGzC,MAAMrE,MAAM,gEAr7ClB,yBA+7CKitM,EAAO5oM,GACR,GAAIlK,KAAK+yM,uCAKP,OAJY1yM,MAAR6J,IACFA,EAAO,GAEAlK,KAAK83M,cAAchF,EAAO,KAAM5oM,GAGzC,MAAMrE,MAAM,gEAv8ClB,yBAi9CKitM,EAAO5oM,GACR,GAAIlK,KAAK+yM,uCAKP,OAJY1yM,MAAR6J,IACFA,EAAO,GAEAlK,KAAK83M,cAAchF,EAAO,KAAM5oM,GAGzC,MAAMrE,MAAM,gEAz9ClB,gCAo+CuB,WAAbytF,EAAa,uDAAJ,GACX+9G,EAAgB,CAAE,UAAW,OAAQ,MAGzC,GAFAnC,MAAMoC,0BAA0Bh+G,EAAQ+9G,GAEpCnC,MAAM+C,gBAAgB3+G,EAAQ,MAAO,CAWvC,GARAA,EAAM,GAAOlpF,KAAI,SAACkgJ,GAChB,IAAK,EAAKumD,aAAan0G,SAAS4tD,GAC9B,MAAMzkJ,MAAM,iDAAD,OACwC,EAAKgrM,aAD7C,iBACkEvmD,OAM/E4kD,MAAM+C,gBAAgB3+G,EAAQ,YAC9B47G,MAAM+C,gBAAgB3+G,EAAQ,QAC9B,CACA,IAAIykH,EAAmB,GAkBvB,OAjBA/3M,KAAK6wM,aAAazmM,KAAI,SAACkgJ,EAAK/+B,GAC1B,GAAIj4B,EAAM,GAAOoJ,SAAS4tD,GAAM,CAC9B,IAAI0tD,EAAgB,EAAKrH,SAASplF,GAC9B4rF,EAAS,GACba,EAAc5tM,KAAI,SAACxD,GAEbA,GAAO0sF,EAAM,QACf6jH,EAAOh0M,KAAKmwF,EAAM,MAElB6jH,EAAOh0M,KAAKyD,MAGhBmxM,EAAiBztD,GAAO6sD,OAExBY,EAAiBztD,GAAO,EAAKqmD,SAASplF,MAGnC,IAAIukF,UAAUiI,EAAkB,CACrCrzH,QAAS1kF,KAAK6wM,aACd5qM,MAAOjG,KAAKiG,QAGd,MAAMJ,MACJ,oEAKJ,GACEqpM,MAAM+C,gBAAgB3+G,EAAQ,YAC9B47G,MAAM+C,gBAAgB3+G,EAAQ,QAC9B,CACA,IAAI2kH,EAAe,GACfC,EAAUl4M,KAAKuF,OAEnB2yM,EAAQ9tM,KAAI,SAAC+tM,GACX,IAAInyM,EAAO,GACXmyM,EAAU/tM,KAAI,SAACxD,GACTA,GAAO0sF,EAAM,QACfttF,EAAK7C,KAAKmwF,EAAM,MAEhBttF,EAAK7C,KAAKyD,MAGdqxM,EAAa90M,KAAK6C,MAGpB,IAAI8rM,EAAK,IAAIhC,UAAUmI,EAAc,CACnChyM,MAAOjG,KAAKiG,MACZy+E,QAAS1kF,KAAK6wM,eAEhB,OAAOiB,EAEP,MAAMjsM,MACJ,sEA9iDV,oCAqjDgBe,EAAKwxM,EAAcluM,GAC/B,IAAImuM,EAAUvF,EACd,GAAI5D,MAAMoJ,YAAY1xM,GACpBksM,EAAQlsM,OAER,GAAIA,EAAI2xM,OAEN,GAAY,GAARruM,EAAW,CACb,GAAItD,EAAIrB,OAAO9G,QAAUuB,KAAKwF,MAAM,GAClC,MAAMK,MAAM,qEAAD,OAC4D7F,KAAKwF,MADjE,gBAC8EoB,EAAIrB,OAAO9G,OADzF,MAIbq0M,EAAQP,sDAAU3rM,EAAIrB,YACjB,CACL,GAAIqB,EAAIrB,OAAO9G,QAAUuB,KAAKwF,MAAM,GAClC,MAAMK,MAAM,qEAAD,OAC4D7F,KAAKwF,MADjE,gBAC8EoB,EAAIrB,OAAO9G,OADzF,MAIbq0M,EAAQP,sDAAU3rM,EAAIrB,aAIxButM,EAFSl0M,MAAMC,QAAQ+H,GAEf2rM,sDAAU3rM,GAGVA,EAAI0rM,gBAIhB,OAAQ8F,GACR,IAAK,KACHC,EAAW9F,sDAAUvyM,KAAKuF,QAAQonD,KAAKmmJ,GAAOQ,YAC9C,MACF,IAAK,KACH+E,EAAW9F,sDAAUvyM,KAAKuF,QAAQwmD,QAAQ+mJ,GAAOQ,YACjD,MACF,IAAK,KACH+E,EAAW9F,sDAAUvyM,KAAKuF,QAAQsnD,UAAUimJ,GAAOQ,YACnD,MACF,IAAK,KACH+E,EAAW9F,sDAAUvyM,KAAKuF,QAAQ0mD,aAAa6mJ,GAAOQ,YACtD,MACF,IAAK,KACH+E,EAAW9F,sDAAUvyM,KAAKuF,QAAQktD,SAASqgJ,GAAOQ,YAClD,MACF,IAAK,KACH+E,EAAW9F,sDAAUvyM,KAAKuF,QAAQyjD,MAAM8pJ,GAAOQ,YAQjD,OAJS,IAAIxD,UADGZ,MAAMsJ,kBAAkBH,EAAU,GAChB,CAChC3zH,QAAS1kF,KAAK6wM,aACd5qM,MAAOjG,KAAKiG,UA3mDlB,2CAinDuBW,EAAKgqM,GAGxB,IAFA,IAAIpyM,EAAMoI,EAAIpB,MAAM,GAChBizM,EAAY,GACP/5M,EAAI,EAAGA,EAAIF,EAAKE,IAAK,CAC5B,IAAIH,EAAMqI,EAAIvC,MAAM,CAAE3F,GAAK,CAAE,IAAK40M,YAAY,GAC9CmF,EAAUt1M,KAAK5E,GAEjB,OAAO,IAAIuxM,UAAU2I,EAAW,CAAE/zH,QAASksH,MAxnD/C,6DAioDI,OAHa5wM,KAAK2xM,OAGP5tL,MAFC,SAAC+jD,GAAD,MAAwB,UAAXA,OA/nD7B,wCAyoDoBr9C,EAASvgB,GACzB,GAAIglM,MAAMwJ,eAAejuL,EAAQ,GAAG8tL,QAAS,CAE3C,IAAII,EAAc,GAClB,OAAIzJ,MAAMwJ,eAAexuM,IAAiB,GAARA,GAEhCyuM,EAAYx1M,KAAKsnB,EAAQ,GAAG6nL,iBAC5BqG,EAAYx1M,KAAKsnB,EAAQ,IAClBkuL,IAGPA,EAAYx1M,KAAKsnB,EAAQ,GAAGgpL,iBAC5BkF,EAAYx1M,KAAKsnB,EAAQ,IAClBkuL,GAIT,IAGMC,EAAaC,EAiBbD,EAAaC,EApBfF,EAAc,GAClB,OAAIzJ,MAAMwJ,eAAexuM,IAAiB,GAARA,GAIhC0uM,EAAcnuL,EAAQ,GAAG6nL,gBAEvBuG,EADEpuL,EAAQ,GAAG8tL,OACEhG,sDAAU9nL,EAAQ,GAAGllB,OAAQ,CAC1C,EACAklB,EAAQ,GAAGllB,OAAO9G,SAGLgsB,EAAQ,GAAG6nL,gBAG5BqG,EAAYx1M,KAAKy1M,GACjBD,EAAYx1M,KAAK01M,GACVF,IAKPC,EAAcnuL,EAAQ,GAAG6nL,gBAEvBuG,EADEpuL,EAAQ,GAAG8tL,OACEhG,sDAAU9nL,EAAQ,GAAGllB,OAAQ,CAC1CklB,EAAQ,GAAGllB,OAAO9G,OAClB,IAGagsB,EAAQ,GAAG6nL,gBAG5BqG,EAAYx1M,KAAKy1M,GACjBD,EAAYx1M,KAAK01M,GACVF,KA5rDf,kCAusDI,IAAIG,EAAa94M,KAAK2wM,SAClBwB,EAAYnyM,KAAK6wM,aAOrB,OAJS,IAAIf,UAAUgJ,EAAY,CACjCp0H,QAHkB1kF,KAAKiG,MAIvBA,MAAOksM,MA7sDb,2BA0uDOz9J,GAEH,OADY,IAAIqkK,+CAAK/4M,KAAM00C,KA3uD/B,+BA4vDsB,IAAb4+C,EAAa,uDAAJ,GACd,IAAK47G,MAAM+C,gBAAgB3+G,EAAQ,UACjC,MAAMztF,MAAM,gDAGd,IAAKqpM,MAAM+C,gBAAgB3+G,EAAQ,SACjC,MAAMztF,MAAM,gDAGd,IAAK7F,KAAK6wM,aAAan0G,SAASpJ,EAAM,QACpC,MAAMztF,MAAM,IAAD,OAAKytF,EAAM,OAAX,2BAGb,IAAIo+G,EAAU1xM,KAAK6wM,aAAax/K,QAAQiiE,EAAM,QAC1C0lH,EAAYh5M,KAAKi5M,UACjBC,EAAal5M,KAAK2wM,SAEtBqI,EAAUtH,GAAWp+G,EAAM,MAC3B,IAAI6lH,EAAiB,GACjBC,EAAWF,EAAWxH,GAE1B,OAAQp+G,EAAM,OACd,IAAK,UACH8lH,EAAShvM,KAAI,SAACxD,GACZuyM,EAAeh2M,KAAKkE,OAAOT,OAE7BsyM,EAAWxH,GAAWyH,EACtB,MACF,IAAK,QACHC,EAAShvM,KAAI,SAACxD,GACZuyM,EAAeh2M,KAAKkE,OAAOA,OAAOT,GAAKmZ,eAEzCm5L,EAAWxH,GAAWyH,EAEtB,MACF,IAAK,SACHC,EAAShvM,KAAI,SAACxD,GACZuyM,EAAeh2M,KAAK+I,OAAOtF,OAE7BsyM,EAAWxH,GAAWyH,EAMxB,IAAIE,EAAc,GAClBr5M,KAAK6wM,aAAa7kM,SAAQ,SAACstM,EAAO56M,GAChC26M,EAAYC,GAASJ,EAAWx6M,MAGlC,IAAIozM,EAAK,IAAIhC,UAAUuJ,EAAa,CAClC1H,OAAQqH,EACR/yM,MAAOjG,KAAKiG,QAEd,OAAO6rM,IAlzDX,+BA0zDmB,WAAV5nM,EAAU,uDAAH,EACZ,GAAY7J,MAAR6J,GAAqBA,EAAO,GAAKA,EAAO,EAC1C,MAAMrE,MAAM,kFAAD,OACyEqE,IAGtF,IAAIqvM,EAAU,GACd,GAAY,GAARrvM,EAAW,CAEb,IAAI0mM,EAAY5wM,KAAK6wM,aACrBD,EAAU5kM,SAAQ,SAACstM,GACjBC,EAAQD,GAAS,EAAKA,GAAOv7I,SAASx4D,cAEnC,CACL,IAAIk/E,EAAOzkF,KAAKuF,OACZi0M,EAASx5M,KAAKiG,MAClBw+E,EAAKz4E,SAAQ,SAACqT,EAAK3gB,GACjB,IAAI+6M,EAAW,IAAIt1L,IAAI9E,GACvBk6L,EAAQC,EAAO96M,IAAME,MAAM+D,KAAK82M,MAIpC,OAAOF,IAh1DX,gCAw1DoB,WAAVrvM,EAAU,uDAAH,EACb,GAAY7J,MAAR6J,GAAqBA,EAAO,GAAKA,EAAO,EAC1C,MAAMrE,MAAM,kFAAD,OACyEqE,IAItF,IAAIwvM,EAAW,GACf,GAAY,GAARxvM,EAAW,CAEb,IAAI0mM,EAAY5wM,KAAK6wM,aACrBD,EAAU5kM,SAAQ,SAACstM,GACjBI,EAASv2M,KAAK,EAAKm2M,GAAOv7I,SAASx4D,OAAO9G,WAE5C,IAAI80M,EAAK,IAAI/C,wCAAOkJ,EAAU,CAAEzzM,MAAOjG,KAAK6wM,eAC5C,OAAO0C,EAEP,IAAI9uH,EAAOzkF,KAAKuF,OAChBk/E,EAAKz4E,SAAQ,SAACqT,GACZ,IAAIo6L,EAAW,IAAIt1L,IAAI9E,GACvBq6L,EAASv2M,KAAKvE,MAAM+D,KAAK82M,GAAUh7M,WAGvC,IAAI80M,EAAK,IAAI/C,wCAAOkJ,EAAU,CAAEzzM,MAAOjG,KAAKiG,QAC5C,OAAOstM,IAh3DX,+BA23DsB,IAAbjgH,EAAa,uDAAJ,GACV+9G,EAAgB,CAAE,SAAU,UAAW,QAU3C,GATAnC,MAAMoC,0BAA0Bh+G,EAAQ+9G,GAGnCnC,MAAM+C,gBAAgB3+G,EAAQ,aACjCA,EAAM,SAAc,GAEjB47G,MAAM+C,gBAAgB3+G,EAAQ,UACjCA,EAAM,KAAW,IAEd47G,MAAM+C,gBAAgB3+G,EAAQ,UACjC,MAAMztF,MAAM,kCAEd,GAAsB,GAAlBytF,EAAM,KAAe,CAEvB,IAAIqmH,EAAgB34M,OAAO8lB,KAAKwsE,EAAM,QAClCgjH,EAAgBt1M,OAAOuE,OAAO+tF,EAAM,QACpCs9G,EAAY,gFAAK5wM,KAAK6wM,cAW1B,GATA8I,EAAc3tM,SAAQ,SAACstM,EAAO56M,GAC5B,IAAKkyM,EAAUl0G,SAAS48G,GACtB,MAAMzzM,MAAM,kCAAD,OACyByzM,EADzB,+BAIb,IAAI/tF,EAAMqlF,EAAUv/K,QAAQioL,GAC5B1I,EAAUrlF,GAAO+qF,EAAc53M,OAE7B40F,EAAM,QAGH,CACL,IAAIw+G,EAAK9xM,KAAK20M,OAGd,OAFA7C,EAAGptH,QAAUksH,EACbkB,EAAGC,mBAAmBD,EAAIA,EAAGnB,SAAUC,EAAW+I,GAC3C7H,EANP9xM,KAAK0kF,QAAUksH,EACf5wM,KAAK+xM,mBAAmB/xM,KAAMA,KAAK2wM,SAAUC,EAAW+I,OAOrD,CAEL,IAAIC,EAAY54M,OAAO8lB,KAAKwsE,EAAM,QAC9BumH,EAAY75M,KAAKiG,MACjBksM,EAAY,GAUhB,GARA0H,EAAU7tM,SAAQ,SAACu/G,GACbquF,EAAUl9G,SAAS6uB,GACrB4mF,EAAUhvM,KAAKmwF,EAAM,OAAWi4B,IAEhC4mF,EAAUhvM,KAAKooH,OAIfj4B,EAAM,QAEH,CACL,IAAIw+G,EAAK9xM,KAAK20M,OAEd,OADA7C,EAAGU,YAAYL,GACRL,EAJP9xM,KAAKwyM,YAAYL,MAh7DzB,mCA67D0B,IAAb7+G,EAAa,uDAAJ,GACdohH,OAC0B,IAArBphH,EAAM,SAAqCA,EAAM,QACtDwmH,OAC4B,IAAvBxmH,EAAM,WAAsCA,EAAM,UAEvDymH,EAAY/5M,KAAKiG,MANC,EAOAjG,KAAKg6M,UAAUD,EAAWA,EAAWD,GAPrC,mFAOhBn1M,EAPgB,KAOVsB,EAPU,KAStB,IAAIyuM,EAEG,CACL,IAAI5C,EAAK9xM,KAAK20M,OAEd,OADA7C,EAAGE,wBAAwBrtM,EAAM,KAAM,KAAMsB,EAAO,MAC7C6rM,EAJP9xM,KAAKgyM,wBAAwBrtM,EAAM,KAAM,KAAMsB,EAAO,QAv8D5D,oCAs9D2B,IAAbqtF,EAAa,uDAAJ,GACnB,IAAK47G,MAAM+C,gBAAgB3+G,EAAQ,MACjC,MAAMztF,MAAM,uCAGd,IAAI6uM,OAC0B,IAArBphH,EAAM,SAAqCA,EAAM,QACtDwmH,OAC4B,IAAvBxmH,EAAM,WAAsCA,EAAM,UACvDymH,EAAY/5M,KAAKiG,MACjBg0M,EAAaj6M,KAAK0vM,OAAOp8G,EAAM,IAAQ/tF,OAVpB,EAWDvF,KAAKg6M,UAAUC,EAAYF,EAAWD,GAXrC,mFAWjBn1M,EAXiB,KAWXsB,EAXW,KAavB,IAAIyuM,EAEG,CACL,IAAI5C,EAAK9xM,KAAK20M,OAEd,OADA7C,EAAGE,wBAAwBrtM,EAAM,KAAM,KAAMsB,EAAO,MAC7C6rM,EAJP9xM,KAAKgyM,wBAAwBrtM,EAAM,KAAM,KAAMsB,EAAO,QAp+D5D,yCA6+DqBlH,EAAM2xM,EAAUE,EAAW+I,GAE5CA,EAAc3tM,SAAQ,SAAC1H,UACdvF,EAAKuF,MAGdosM,EAAS1kM,SAAQ,SAACs+I,EAAK5rJ,GAErBsC,OAAOC,eAAelC,EAAM6xM,EAAUlyM,GAAI,CACxCgD,IADwC,WAEtC,OAAO,IAAI8uM,wCAAOlmD,EAAK,CAAE5lE,QAASksH,EAAUlyM,GAAIuH,MAAOlH,EAAKkH,SAE9DhB,IAJwC,SAIpCvF,GACFM,KAAK8wM,UAAU,CAAEpB,OAAQkB,EAAUlyM,GAAIgB,MAAOA,YA1/DxD,8CAigE0Bw6M,EAAUrJ,EAAcsJ,EAASl0M,EAAO0rM,GAC9D,GAAgBtxM,MAAZ65M,EACFl6M,KAAK2E,KAAOu1M,OAGZ,GAAe75M,MAAX85M,EAAsB,CACxB,IAAIC,EAAOlL,MAAMmL,wBAAwBF,GACzCn6M,KAAK2E,KAAOy1M,EAAK,GACjBp6M,KAAK0kF,QAAU01H,EAAK,GACpBvJ,EAAeuJ,EAAK,GAIT/5M,MAAX85M,GACFn6M,KAAK2wM,SAAW3vM,OAAOuE,OAAO40M,GAC9Bn6M,KAAK0kF,QAAU1jF,OAAO8lB,KAAKqzL,GAC3BtJ,EAAe7vM,OAAO8lB,KAAKqzL,IAGX95M,MAAZ65M,IACFl6M,KAAK2wM,SAAWzB,MAAMsF,iBAAiB0F,IAIvB75M,MAAhBwwM,IACF7wM,KAAK0kF,QAAUmsH,GAEJxwM,MAAT4F,IACFjG,KAAKs6M,UAAYr0M,GAEL5F,MAAVsxM,IACF3xM,KAAKi5M,UAAYtH,KAhiEvB,gCAoiEYmF,EAAWyD,EAAUT,GAQ7B,IAPA,IAAIv0M,EAASvF,KAAKuF,OAEdi1M,EAAatL,MAAMuL,OAAO3D,EAAWgD,GACrCY,EAAgBxL,MAAMyL,gBAAgB7D,GAEtCnyM,EAAO,GACPi2M,EAAS,GACJC,EAAQ,EAAGA,EAAQL,EAAW/7M,OAAQo8M,IAAS,CACtD,IAAIj0M,EAAM4zM,EAAWK,GACjB50M,EAAQ,KAERW,KAAO8zM,GACTz0M,EAAQy0M,EAAc9zM,GAAd,MAA4B,GACpC8zM,EAAc9zM,GAAd,MAA4BwnC,OAAO,EAAG,IAEtCnoC,EAAQ6wM,EAAUzlL,QAAQzqB,GAG5BjC,EAAKxB,KAAKoC,EAAOU,IACjB20M,EAAOz3M,KAAKo3M,EAASt0M,IAGvB,MAAO,CAAEtB,EAAMi2M,KA3jEnB,6BAmkESh0M,GACL,IAAIk0M,EAAM,KACV,GAAIl8M,MAAMC,QAAQ+H,IAChB,GAAIhI,MAAMC,QAAQ+H,EAAI,IAAK,CACzB,GAAIA,EAAI,GAAGnI,QAAUuB,KAAKwF,MAAM,GAC9B,MAAMK,MAAM,kDAAD,OACyCe,EAAInI,OAD7C,oDAC+FuB,KAAKwF,MAAM,GAD1G,MAIbs1M,EAAM,IAAIhL,UAAUlpM,SAEbsoM,MAAM6L,YAAYn0M,GAC3Bk0M,EAAM,IAAIhL,UAAUlpM,GACXA,aAAekpM,YACxBgL,EAAMl0M,EAAI+tM,QAKZ,OAFgBrqM,8CAAO,CAAE+kM,QAAS,CAAErvM,KAAM86M,GAAO5wM,KAAM,MAplE3D,wBAstDI,OAAOlK,KAAK+oC,cAttDhB,6BA8tDI,IAAIu1E,EAAOt+G,KAAK6wM,aACZmK,EAAUh7M,KAAKi5M,UAEnB,OADS,IAAIzI,wCAAOwK,EAAS,CAAE/0M,MAAOq4G,MAhuD1C,6BAovDI,OAAOt+G,KAAKsyM,oBApvDhB,WAA+B2I,2C,wMCdzB/L,EAAQ,IAAIC,IACZ1zL,EAAS,IAAImzL,IACEsM,E,WAcnB,WAAYv2M,GAAmB,IAAb2uF,EAAa,uDAAJ,GAOzB,GAP6B,YAC7BtzF,KAAKszF,OAASA,EAEV3uF,aAAgByc,WAClBzc,EAAOA,EAAK2uM,aAGVpE,EAAM2I,cAAclzM,GACtB3E,KAAKu4M,QAAS,EACdv4M,KAAKm7M,YAAYx2M,QAGjB,GADA3E,KAAKu4M,QAAS,EACVrJ,EAAM6L,YAAYp2M,EAAK,IAEzB3E,KAAKo7M,aAAaz2M,EAAM,QACnB,GAAIuqM,EAAM6L,YAAYp2M,GAC3B3E,KAAKo7M,aAAaz2M,EAAM,OACnB,MACL/F,MAAMC,QAAQ8F,EAAK,KACnBuqM,EAAMoJ,YAAY3zM,EAAK,KACvBuqM,EAAMmM,YAAY12M,EAAK,KAIvB,MAAM,IAAIkB,MAAM,6BAFhB7F,KAAKm7M,YAAYx2M,I,wDAYXA,GAkBV,GAjBA3E,KAAK2E,KAAOuqM,EAAMoM,6BAA6B32M,EAAM3E,KAAKu4M,QAC1Dv4M,KAAKsyM,iBAAkBzuL,YAAO7jB,KAAK2E,MAE/B3E,KAAKu4M,OACPv4M,KAAK2wM,SAAW,CAAE3wM,KAAKuF,QAEvBvF,KAAK2wM,SAAWzB,EAAMsF,iBAAiBx0M,KAAK2E,MAG9C3E,KAAKyzM,iBAAkB5vL,YAAO7jB,KAAK2wM,UAE/B,UAAW3wM,KAAKszF,OAClBtzF,KAAKwyM,YAAYxyM,KAAKszF,OAAL,OAEjBtzF,KAAKs6M,UAAL,IAAsB17M,MAAMoB,KAAKsyM,gBAAgB9sM,MAAM,IAAIshB,QAG5C,GAAb9mB,KAAKowF,KAEH,YAAapwF,KAAKszF,OACpBtzF,KAAK0kF,QAAU1kF,KAAKszF,OAAL,QAEftzF,KAAK0kF,QAAU,CAAE,UAInB,GAAI,YAAa1kF,KAAKszF,OAAQ,CAC5B,GACEtzF,KAAKszF,OAAL,QAAuB70F,QAAU4I,OAAOrH,KAAKsyM,gBAAgB9sM,MAAM,IAInE,uEAAiExF,KAAKszF,OAAL,QAAuB70F,OAAxF,mCAAyHuB,KAAKsyM,gBAAgB9sM,MAAM,IAFpJxF,KAAK0kF,QAAU1kF,KAAKszF,OAAL,aAKjBtzF,KAAK0kF,QAAL,IAAoB9lF,MAAMoB,KAAKsyM,gBAAgB9sM,MAAM,IAAIshB,QAIzD,WAAY9mB,KAAKszF,OACnBtzF,KAAKu7M,eAAev7M,KAAKszF,OAAL,QAAuB,GAE3CtzF,KAAKu7M,eAAe,MAAM,K,mCAUjB52M,EAAM8e,GACjB,GAAY,GAARA,EAAW,OACgByrL,EAAMmL,wBAAwB11M,GAD9C,WACP62M,EADO,KACE5K,EADF,KAEb5wM,KAAKszF,OAAL,QAAyBs9G,EACzB5wM,KAAKm7M,YAAYK,OACZ,CACL,IAAIC,EAAW92M,EAAKyF,KAAI,SAACihB,GACvB,OAAOrqB,OAAOuE,OAAO8lB,MAqBvB,GAlBArrB,KAAK2E,KAAOuqM,EAAMoM,6BAA6BG,EAAUz7M,KAAKu4M,QAC9Dv4M,KAAKsyM,iBAAkBzuL,YAAO7jB,KAAK2E,MACnC3E,KAAKszF,OAAL,QAAyBtyF,OAAO8lB,KAAK9lB,OAAOuE,OAAOZ,GAAM,IAErD3E,KAAKu4M,OACPv4M,KAAK2wM,SAAW,CAAE3wM,KAAKuF,QAEvBvF,KAAK2wM,SAAWzB,EAAMsF,iBAAiBx0M,KAAK2E,MAG9C3E,KAAKyzM,iBAAkB5vL,YAAO7jB,KAAK2wM,UAE/B,UAAW3wM,KAAKszF,OAClBtzF,KAAKwyM,YAAYxyM,KAAKszF,OAAL,OAEjBtzF,KAAKs6M,UAAL,IAAsB17M,MAAMoB,KAAKsyM,gBAAgB9sM,MAAM,IAAIshB,QAG5C,GAAb9mB,KAAKowF,KAEFpwF,KAAKszF,OAAL,QAGHtzF,KAAK0kF,QAAU1kF,KAAKszF,OAAL,QAFftzF,KAAK0kF,QAAU,CAAE,UAMnB,GAAI,YAAa1kF,KAAKszF,OAAQ,CAC5B,GACEtzF,KAAKszF,OAAL,QAAuB70F,QACvB4I,OAAOrH,KAAKsyM,gBAAgB9sM,MAAM,IAIlC,uEAAiExF,KAAKszF,OAAL,QAAuB70F,OAAxF,0CAAgIuB,KAAKsyM,gBAAgB9sM,MAAM,IAF3JxF,KAAK0kF,QAAU1kF,KAAKszF,OAAL,aAKjBtzF,KAAK0kF,QAAL,IAAoB9lF,MAAMoB,KAAKsyM,gBAAgB9sM,MAAM,IAAIshB,QAIzD,WAAY9mB,KAAKszF,OACnBtzF,KAAKu7M,eAAev7M,KAAKszF,OAAL,QAAuB,GAE3CtzF,KAAKu7M,eAAe,MAAM,M,qCAUjB5J,EAAQ+J,GACrB,IAAMrG,EAAqB,CAAE,UAAW,QAAS,SAAU,WAE3D,GAAIqG,EACE17M,KAAKu4M,OACPv4M,KAAKi5M,UAAY/J,EAAMmH,QAAQr2M,KAAKuF,QAEpCvF,KAAKi5M,UAAY/J,EAAMmH,QAAQr2M,KAAK2wM,eAGtC,GAAI3wM,KAAKu4M,OACPv4M,KAAKi5M,UAAYtH,MACZ,CACL,GAAIA,EAAOlzM,QAAUuB,KAAK0kF,QAAQjmF,OAChC,MAAM,IAAIoH,MAAJ,yDAC8C8rM,EAAOlzM,OADrD,sCACyFuB,KAAK0kF,QAAQjmF,SAG9G,IAAIG,MAAMC,QAAQ8yM,GAUhB,MAAM,IAAI9rM,MAAJ,oCATN8rM,EAAO3lM,SAAQ,SAACyX,EAAMkvL,GACpB,IAAK0C,EAAmB34G,SAASj5E,GAC/B,MAAM,IAAI5d,MAAJ,gDACqC8sM,EADrC,yBAKV3yM,KAAKi5M,UAAYtH,K,kCAsDbtoK,GACV,IAAKzqC,MAAMC,QAAQwqC,GACjB,MAAMxjC,MAAM,uCAEd,GAAIwjC,EAAO5qC,OAASuB,KAAKwF,MAAM,IAAM6jC,EAAO5qC,OAASuB,KAAKwF,MAAM,GAC9D,MAAMK,MAAM,8DAEd7F,KAAKs6M,UAAYjxK,I,sCAOjB,IAAIsyK,EAAU,IAAK/8M,MAAMoB,KAAKuF,OAAO9G,QAAQqoB,QAC7C9mB,KAAKs6M,UAAYqB,I,+BAqCjB,IAAIpL,EAAU,GA6Bd,OA5BIvwM,KAAKu4M,OACPv4M,KAAKuF,OAAO6E,KAAI,SAACxD,GAEJqvD,KAAPrvD,GAEO2E,MAAM3E,IAAsB,iBAAPA,EAD9B2pM,EAAQptM,MAAK,GAIbotM,EAAQptM,MAAK,MAIFnD,KAAKuF,OACX6E,KAAI,SAAC7L,GACZ,IAAIq9M,EAAW,GACfr9M,EAAI6L,KAAI,SAACxD,GAEIqvD,KAAPrvD,GAEO2E,MAAM3E,IAAsB,iBAAPA,EAD9Bg1M,EAASz4M,MAAK,GAIdy4M,EAASz4M,MAAK,MAGlBotM,EAAQptM,KAAKy4M,MAGVrL,I,mIAgBHvwM,KAAKu4M,O,uBACHl/D,EAAMr5I,KAAKuF,OAAOyK,KAAK,K,kBACpBqpI,G,cAEHwiE,EAAU77M,KAAKuF,OACfu2M,EAAS97M,KAAK6wM,aAAa7gM,KAAK,KAEhC+rM,E,UAAaD,E,MACjBD,EAAQ7vM,SAAQ,SAACpF,GACf,IAAIyY,EAAM,GAAH,OAAMzY,EAAIoJ,KAAK,KAAf,MACP+rM,GAAW18L,K,kBAEN08L,G,oOASL/7M,KAAKu4M,O,uBACHt0M,EAAM,IACNjE,KAAK6wM,aAAa,IAAM7wM,KAAKuF,OAC7BohC,EAAOtS,KAAKC,UAAUrwB,G,kBACnB0iC,G,cAEHphC,EAASvF,KAAKuF,OACdu2M,EAAS97M,KAAK6wM,aACdmL,EAAW,GACfz2M,EAAOyG,SAAQ,SAACpF,GACd,IAAI3C,EAAM,GACV63M,EAAO9vM,SAAQ,SAAC+2C,EAAGrkD,GACjBuF,EAAI8+C,GAAKn8C,EAAIlI,MAEfs9M,EAAS74M,KAAKc,M,kBAETowB,KAAKC,UAAU0nL,I,+HAQxB,IAAInN,EAAcpzL,EAAOwgM,UACrBnN,EAAiBrzL,EAAOygM,aACxBC,EAAU1gM,EAAO2gM,YACjBC,EAAqB5gM,EAAO6gM,uBAG5Bb,EAAW,GACXc,EAAe,GAEfC,EAAUx8M,KAAK0kF,QAAQjmF,OAEvBq9M,EAAS,GAEb,GAAIU,EAAUH,EAAoB,CAEhC,IAKII,EAASC,EAAUC,EALnBC,EAAe58M,KAAK0kF,QAAQrgF,MAAM,EAAG,GACrCw4M,EAAc78M,KAAK0kF,QAAQrgF,MAAMm4M,EAAU,GAM/C,GAJAV,EAAS,CAAE,IAAKxxM,OAAOsyM,GAActyM,OAAO,CAAE,QAASA,OAAOuyM,GAI1D78M,KAAKuF,OAAO9G,OAAS09M,EAAS,CAEhC,IAAIW,EAAc98M,KAAK6yM,KAAK,CAC1BpuH,KAAM,CAAC,KAAD,OAAO03H,IACbz3H,QAAS,CAAE,SAETq4H,EAAc/8M,KAAK6yM,KAAK,CAC1BpuH,KAAM,CAAC,KAAD,OAAO03H,IACbz3H,QAAS,CAAC,GAAD,OAAK83H,EAAU,EAAf,QAEXC,EAAUz8M,KAAKiG,MAAM5B,MAAM,EAAG83M,GAC9BO,EAAWI,EAAYv3M,OACvBo3M,EAAUI,EAAYx3M,WACjB,CACL,IAAIu3M,EAAc98M,KAAK6yM,KAAK,CAAEpuH,KAAM,CAAE,MAAQC,QAAS,CAAE,SACrDq4H,EAAc/8M,KAAK6yM,KAAK,CAC1BpuH,KAAM,CAAE,MACRC,QAAS,CAAC,GAAD,OAAK83H,EAAU,EAAf,QAEXC,EAAUz8M,KAAKiG,MAAM5B,MAAM,EAAG83M,GAC9BO,EAAWI,EAAYv3M,OACvBo3M,EAAUI,EAAYx3M,OAIxBk3M,EAAQryM,KAAI,SAACxD,EAAKlI,GAChB,IAAI2gB,EAAM,CAAEzY,GAAM0D,OAAOoyM,EAASh+M,IAAI4L,OAAO,CAAE,QAASA,OAAOqyM,EAAQj+M,IACvE+8M,EAASt4M,KAAKkc,UAEX,CAGL,IAAIksG,EAAKhmH,EACT,GAFAu2M,EAAS,CAAE,IAAKxxM,OAAOtK,KAAK0kF,SAExB1kF,KAAKuF,OAAO9G,OAAS09M,EAAS,CAEhC,IAAIx3M,EAAO3E,KAAK+gB,IAAI,CAAE0jE,KAAM,CAAC,KAAD,OAAO03H,IAAaz3H,QAAS1kF,KAAK0kF,UAC9D6mC,EAAM5mH,EAAKsB,MACXV,EAASZ,EAAKY,YAEdA,EAASvF,KAAKuF,OACdgmH,EAAMvrH,KAAKiG,MAIbslH,EAAIv/G,SAAQ,SAACpF,EAAKlI,GAChB,IAAI2gB,EAAM,CAAEzY,GAAM0D,OAAO/E,EAAO7G,IAChC+8M,EAASt4M,KAAKkc,MAKlBk9L,EAAa,GAAK,GAClB,IAAK,IAAIt2M,EAAQ,EAAGA,EAAQ61M,EAAOr9M,OAAQwH,IACzCs2M,EAAat2M,GAAS,CAAE4C,MAAOgmM,EAAamO,SAAUlO,GAGxD,IAAImO,EAAa,CAAEnB,GAASxxM,OAAOmxM,GACnC,OAAOyB,QAAMD,EAAY,CAAEv4H,QAAS63H,M,8BAQpC5tM,QAAQkQ,IAAI7e,KAAO,M,6BA3QnB,OAAOA,KAAKi5M,Y,2BAQZ,OAAIj5M,KAAKu4M,OACA,EAEAv4M,KAAKsyM,gBAAgB9sM,MAAM/G,S,2BAapC,MAJW,CACTwH,MAAOjG,KAAKiG,MACZy+E,QAAS1kF,KAAK0kF,W,4BAUhB,OAAO1kF,KAAKs6M,Y,4BA6BZ,OAAIt6M,KAAKu4M,OACA,CAAEv4M,KAAKuF,OAAO9G,OAAQ,GAEtBuB,KAAKsyM,gBAAgB9sM,Q,6BAS9B,OAAOxF,KAAK2E,O,mCAQZ,OAAO3E,KAAK0kF,U,2BA8CZ,OAAO1kF,KAAKsyM,gBAAgBnqM,S,69EClWhC,IAAM+mM,MAAQ,IAAIC,sCAUL8H,QAAb,WACE,iBAAYT,EAAU2G,EAASx4M,EAAMsxM,EAAaM,GAAW,2FAE3Dv2M,KAAKm9M,QAAUA,EACfn9M,KAAKw2M,SAAWA,EAChBx2M,KAAK2E,KAAOA,EACZ3E,KAAKi2M,YAAcA,EACnBj2M,KAAKo9M,aAAe,GACpBp9M,KAAKu2M,UAAYA,EARrB,wHAiBS,0CACev2M,KAAK2E,MADpB,2BACMjF,EADN,QAGGw5M,EADc,EAAKiE,QAAQ/yM,KAAI,SAAC7K,GAAD,OAAS,EAAK02M,YAAY5kL,QAAQ9xB,MACxC6K,KAAI,SAACmhH,GAAD,OAAS7rH,EAAM6rH,MAE9C8xF,EAAe,EAAK7G,SALrB,6BAMqB0C,GANrB,IAMH,2BAAmC,KAAxBpC,EAAwB,QACjC,KAAMA,KAAauG,GACjB,MACEvG,IAAcoC,EAAWA,EAAWz6M,OAAS,GAC/C4+M,EAAavG,GAAW3zM,KAAKzD,GAE7B29M,EAAeA,EAAavG,IAZ7B,gCACL,2BAA8B,IADzB,8BAgBL,IAAM/3M,EAAOiB,KAiBb,OAhBA,SAASs9M,EAAID,EAAcE,GACzB,cAA6Bv8M,OAAOwa,QAAQ6hM,GAA5C,eAA0D,2FAA7C99M,EAA6C,KAAxCG,EAAwC,KACpDd,MAAMC,QAAQa,GACK,IAAjBA,EAAMjB,cACD4+M,EAAa99M,GAEpBg+M,EAAiBh+M,GAAO,IAAIuwM,sCAAUpwM,EAAO,CAAEglF,QAAQ3lF,EAAKk3M,eAExD12M,KAAOg+M,IACXA,EAAiBh+M,GAAO,IAC1B+9M,EAAI59M,EAAO69M,EAAiBh+M,MAIlC+9M,CAAIt9M,KAAKw2M,SAAUx2M,KAAKo9M,cAEjBp9M,OAlDX,0BA0DM4wM,GAEF,GADA5wM,KAAKw9M,gBAAkB5M,GACnBhyM,MAAMC,QAAQ+xM,GAUhB,MAAM,IAAI/qM,MAAJ,uCARN,IAAK,IAAInH,EAAI,EAAGA,EAAIkyM,EAAUnyM,OAAQC,IAAI,CAExC,IAAIixM,EAAWiB,EAAUlyM,GACzB,IAAKsB,KAAKi2M,YAAYv5G,SAASizG,GAC7B,MAAM,IAAI9pM,MAAJ,iBAAoB8pM,EAApB,8BAOZ,IAAM8N,EAAY,IAClB,SAASH,EAAIC,EAAkBG,GAC7B,IAD4C,2GAC/Bn+M,EAD+B,KAC1BG,EAD0B,KAEtCA,aAAiBowM,sCACnB4N,EAAcn+M,GAAOqxM,EAAUxmM,KAAI,SAACulM,GAAD,OAAcjwM,EAAMgwM,OAAOC,OAE9D+N,EAAcn+M,GAAO,GACrB+9M,EAAI59M,EAAOg+M,EAAcn+M,MAL7B,MAA6ByB,OAAOwa,QAAQ+hM,GAA5C,eAA8D,IAShED,CAAIt9M,KAAKo9M,aAAcK,GAEvB,IAAME,EAAK,IAAI1G,QACb,KACAj3M,KAAKm9M,QACL,KACAvM,EACA5wM,KAAKu2M,WAIP,OAFAoH,EAAGF,UAAYA,EACfE,EAAGC,eAAiBhN,EACb+M,IA/FX,8CAuGcjhB,WACV,IAAMmhB,SAAW,CAAE,OAAQ,MAAO,QAAS,OAAQ,MAAO,MAAO,SAAU,UACzE,SAAU,UACNC,QAAU,CACd,KAAQ,SACR,IAAO,QACP,KAAQ,SACR,MAAS,UACT,IAAQ,QACR,IAAQ,QACR,OAAW,kBACX,QAAW,mBACX,OAAW,kBACX,OAAW,mBAEPC,mBAAqBn/M,MAAMC,QAAQ69L,WACnCshB,YAAc,GAKhBC,MAAQ,KACZ,SAASX,IAAIY,gBAAiBR,eAC5B,IAD2C,0JAC9Bn+M,IAD8B,uBACzBG,MADyB,uBAInCiF,KAFN,GAAI/F,MAAMC,QAAQa,OAGhB,GAFAw+M,gBAAgB3+M,KAAO,GAEnBw+M,mBACF,IAAK,IAAIr/M,EAAI,EAAGA,EAAIgB,MAAMjB,OAAQC,IAAI,CACpC,IAAMkzB,GAAK8qK,UAAUh+L,GACrB,IAAKm/M,SAASnhH,SAAS9qE,IACrB,MAAM,IAAI/rB,MAAM,4BAElBo4M,MAAQv+M,MAAMhB,GACdiG,KAAOoxM,KAAK,SAAD,OAAU+H,QAAQlsL,MAC7BssL,gBAAgB3+M,KAAK4D,KAAKwB,WAG5BjF,MAAMsM,SAAQ,SAACiU,GACbg+L,MAAQh+L,EACRtb,KAAOoxM,KAAK,SAAD,OAAUrZ,YACrBwhB,gBAAgB3+M,KAAK4D,KAAKwB,cAI9Bu5M,gBAAgB3+M,KAAO,GACvB+9M,IAAIY,gBAAgB3+M,KAAMG,QAvB9B,uBAA6BsB,OAAOwa,QAAQkiM,eAA5C,kCAA2D,SA6B7D,OADAJ,IAAIU,YAAah+M,KAAKy9M,WACfO,cA3JX,iCA8Ja7J,EAAK7vM,GAAM,WACpB,GAAKtE,KAAKy9M,UAMH,CACL,IAAI/9M,EAAQM,KAAKm+M,YAAYhK,GAE7B,OADSn0M,KAAKo+M,aAAap+M,KAAKm9M,QAASn9M,KAAK49M,eAAgBl+M,EAAO4E,GAPrE,IAAIorM,EAAS1vM,KAAKi2M,YAAYnqL,QAAO,SAACllB,GAAD,OAAU,EAAKu2M,QAAQzgH,SAAS91F,MACjEy3M,EAASr+M,KAAKsqJ,IAAIolD,GAClBhwM,EAAQ2+M,EAAOF,YAAYhK,GAE/B,OADSkK,EAAOD,aAAaC,EAAOlB,QAASkB,EAAOT,eAAgBl+M,EAAO4E,KAnKjF,8BA4KI,OAAOtE,KAAKs+M,WAAW,UAAW,WA5KtC,4BAgLI,OAAOt+M,KAAKs+M,WAAW,QAAS,SAhLpC,4BAoLI,OAAOt+M,KAAKs+M,WAAW,QAAS,SApLpC,4BAwLI,OAAOt+M,KAAKs+M,WAAW,QAAS,SAxLpC,6BA4LI,OAAOt+M,KAAKs+M,WAAW,SAAU,UA5LrC,+BAgMI,OAAOt+M,KAAKs+M,WAAW,kBAAmB,YAhM9C,+BAmMI,OAAOt+M,KAAKs+M,WAAW,kBAAmB,YAnM9C,gCAuMI,OAAOt+M,KAAKs+M,WAAW,mBAAoB,aAvM/C,+BA2MI,OAAOt+M,KAAKs+M,WAAW,kBAAmB,YA3M9C,4BA+MI,OAAOt+M,KAAKs+M,WAAW,QAAS,SA/MpC,4BAmNI,OAAOt+M,KAAKs+M,WAAW,QAAS,SAnNpC,iCA0Na/+M,GACT,GAAIS,KAAKm9M,QAAQ1+M,OAAS,EACxB,OAAOuB,KAAKo9M,aAAa79M,GAE3B,GAAIA,EAAId,SAAWuB,KAAKm9M,QAAQ1+M,OAC9B,MAAM,IAAIoH,MAAM,+BAElBqpM,MAAM6L,YAAY/6M,KAAKo9M,aAAc79M,EAAI,GAAzC,qBAA2DA,EAAI,GAA/D,mBACA,IARa,EAQPg/M,EAAWh/M,EAAIA,EAAId,OAAS,GAC9B8+M,EAAmBv9M,KAAKo9M,aATf,6BAUG79M,GAVH,IAUb,2BAAqB,KAAVglB,EAAU,QACnB,GAAIA,IAAMg6L,EACR,OAAOhB,EAAiBh5L,GAExBg5L,EAAmBA,EAAiBh5L,IAd3B,iCA1NjB,4BAiPkB,IAAZ+uE,EAAY,uDAAH,GAEP5O,EAAU1jF,OAAO8lB,KAAKwsE,GACtBgrH,EAAa55H,EAAQt6E,KAAI,SAAC3D,GAAQ,OAAO6sF,EAAO7sF,GAAG+3M,uBAEnDH,EAASr+M,KAAKsqJ,IAAI5lE,GAElB//E,EAAO05M,EAAOF,YAAYG,GAC1BxM,EAAK9xM,KAAKo+M,aAAaC,EAAOlB,QAASkB,EAAOT,eAAgBj5M,EAAM25M,GAExE,OAAOxM,IA3PX,mCA8PeqL,EAAS7yD,EAAK3lJ,EAAMwvM,GAC/B,IAAMC,EAAU,IAEhB,SAASqK,EAAkB/hM,EAAMsR,EAAMuoL,GACrC,GAAI33M,MAAMC,QAAQmvB,GAChB,GAAIpvB,MAAMC,QAAQmvB,EAAK,IAAK,CAC1B,IAD0B,+BACFA,EAAK,GAAG5jB,KAAI,SAAC2hB,EAAGo6K,GAAJ,OAAiBn4K,EAAK5jB,KAAI,SAACiV,GAAD,OAASA,EAAI8mL,UADjD,IAE1B,gCAAWuY,EAAX,QACEtK,EAAQjxM,KAAKuZ,EAAKpS,OAAOo0M,KAHD,oCAK1BtK,EAAQjxM,KAAKuZ,EAAKpS,OAAO0jB,SAE3B,cAA2BhtB,OAAOwa,QAAQwS,GAA1C,eAAiD,2FAApCzJ,EAAoC,KAAjCy/G,EAAiC,KACzC26E,EAA+B,WAAjBpI,EAAU,GAAkBhyL,EAAI6gF,SAAS7gF,GAC7Dk6L,EAAkB/hM,EAAKpS,OAAO,CAAEq0M,IAAgB36E,EAAOuyE,EAAUlyM,MAAM,KAK7Eo6M,CAAkB,GAAI95M,EAAM3E,KAAKu2M,WAEjC,IAAM7G,EAAS,gFAAKyN,GACdM,EAAYnzD,EAAIjmJ,QAAQ+F,KAAI,SAAC3D,EAAG/H,GACpC,OAAIE,MAAMC,QAAQs1M,GAChB,UAAU1tM,EAAV,YAAe0tM,EAAIz1M,IAErB,UAAU+H,EAAV,YAAe0tM,MAIjB,OAFAzE,EAAOvsM,KAAP,MAAAusM,EAAM,gFAAS+N,IAER,IAAI3N,sCAAUsE,EAAS,CAAE1vH,QAASgrH,MA5R7C,4BA+RQgI,GAAS,IACTtD,EACA1E,EAFS,OAGR1vM,KAAKy9M,WAKR/N,EAAS1vM,KAAK49M,eACdxJ,EAAUp0M,KAAKy9M,YALf/N,EAAS1vM,KAAKi2M,YAAYnqL,QAAO,SAACllB,GAAD,OAAU,EAAKu2M,QAAQzgH,SAAS91F,MAEjEwtM,EADep0M,KAAKsqJ,IAAIolD,GACP+N,WAKnB,IAAMO,EAAc,GAqBpB,OAnBA,SAASY,EAAeC,EAAaX,GACnC,cAA6Bl9M,OAAOwa,QAAQqjM,GAA5C,eAA0D,2FAA7Ct/M,EAA6C,KAAxCG,EAAwC,KACpDd,MAAMC,QAAQa,GAChBw+M,EAAgB3+M,GAAOG,EAAM0K,KAAI,SAAE00M,GACjC,IAAMC,EAAgBrH,EAASoH,GAC/B,OAAKC,aAAyBjP,uCAAeiP,aAAyBvO,uCAC7DuO,EAAcx5M,OAEdw5M,MAGXb,EAAgB3+M,GAAO,GACvBq/M,EAAel/M,EAAOw+M,EAAgB3+M,MAK5Cq/M,CAAexK,EAAS4J,GAEjBh+M,KAAKo+M,aAAap+M,KAAKm9M,QAASzN,EAAQsO,EAAa,aA/ThE,Y,iDCZM9O,EAAQ,I,OAAIC,GAQLsD,EAAW,SAACuM,EAAS1rH,GAEhC,IAAI7O,EAAO,KACPC,EAAU,KACVu6H,GAAgB,EAEpB,GAAIj+M,OAAOI,UAAUyC,eAAe/B,KAAKwxF,EAAQ,QAAS,CACxD,IAAI10F,MAAMC,QAAQy0F,EAAM,MA4DtB,MAAM,IAAIztF,MAAM,kCA1DhB,GAA6B,GAAzBytF,EAAM,KAAS70F,QAA2C,iBAArB60F,EAAM,KAAS,GACtD,GAAIA,EAAM,KAAS,GAAGoJ,SAAS,KAAM,CAEnC,IAAIwiH,EAAe5rH,EAAM,KAAS,GAAGhkF,MAAM,KAE3C,GAAsB,OAAlBgkF,EAAM,KAAmB,CAE3B,IAAI9mF,EAAOkU,EAETlU,EADEjB,MAAMlE,OAAO63M,EAAa,KACpBF,EAAQ/4M,MAAMorB,QAAQ6tL,EAAa,IAEnC73M,OAAO63M,EAAa,IAI5Bx+L,EADEnV,MAAMlE,OAAO63M,EAAa,KACtBF,EAAQ/4M,MAAMghC,YAAYi4K,EAAa,IAAM,GAAMF,EAAQz5M,OAAO9G,OAAS,EAE3E4I,OAAO63M,EAAa,IAAM,GAAMF,EAAQz5M,OAAO9G,OAAS,EAEhEgmF,EAAOyqH,EAAMiQ,QAAQ3yM,EAAOkU,OACvB,CACL,IAAIlU,EAAQ44F,SAAS85G,EAAa,KAAO,EACrCx+L,EAAM0kF,SAAS85G,EAAa,IAAM,GAAMF,EAAQz5M,OAAO9G,OAAS,EAEhD,iBAAT+N,GAAmC,iBAAPkU,IACrC+jE,EAAOyqH,EAAMiQ,QAAQ3yM,EAAOkU,SAI3B,CACL,GAAsB,OAAlB4yE,EAAM,KASR,MAAM,IAAIztF,MAAM,wCARhB,IAAIu5M,EAAU,GACdJ,EAAQ/4M,MAAMmE,KAAI,SAACmhH,EAAK7sH,GAClB40F,EAAM,KAAS,IAAMi4B,GACvB6zF,EAAQj8M,KAAKzE,MAGjB+lF,EAAO26H,OAMX,GAAsB,OAAlB9rH,EAAM,KAAmB,CAE3B,IAAI8rH,EAAU,GACdJ,EAAQ/4M,MAAMmE,KAAI,SAACmhH,EAAK7sH,GAClB40F,EAAM,KAASoJ,SAAS6uB,IAC1B6zF,EAAQj8M,KAAKzE,MAGjB+lF,EAAO26H,OAGP36H,EAAO6O,EAAM,UAOfA,EAAM,KACR7O,EAAOyqH,EAAMiQ,QAAQ,EAAG93M,OAAO23M,EAAQx5M,MAAM,IAAM,GAOvD,GAAIxE,OAAOI,UAAUyC,eAAe/B,KAAKwxF,EAAQ,WAAY,CAC3D,IAAI10F,MAAMC,QAAQy0F,EAAM,SAmCtB,MAAM,IAAIztF,MAAM,0BAlChB,GAAgC,GAA5BytF,EAAM,QAAY70F,QAAe60F,EAAM,QAAY,GAAGoJ,SAAS,KAAM,CAEvE,IACIlwF,EAAOkU,EADPw+L,EAAe5rH,EAAM,QAAY,GAAGhkF,MAAM,KAGxB,QAAlBgkF,EAAM,MAEN9mF,EADqB,IAAnB0yM,EAAa,GACP,EAEA95G,SAAS85G,EAAa,KAAO,EAIrCx+L,EADqB,IAAnBw+L,EAAa,GACT95G,SAAS45G,EAAQt6H,QAAQjmF,OAAS,GAElC2mG,SAAS85G,EAAa,IAAM,GAAM,EAAI,EAAI95G,SAAS85G,EAAa,IAAM,IAI9E1yM,EAAQ44F,SAAS45G,EAAQt6H,QAAQrzD,QAAQ6tL,EAAa,KACtDx+L,EAAM0kF,SAAS45G,EAAQt6H,QAAQrzD,QAAQ6tL,EAAa,KAAO,GAGzC,iBAAT1yM,GAAmC,iBAAPkU,IAErCgkE,EAAUwqH,EAAMiQ,QAAQ3yM,EAAOkU,GAC/Bu+L,GAAgB,QAIlBv6H,EAAU4O,EAAM,aASlB5O,EADoB,OAAlB4O,EAAM,KACE0rH,EAAQnO,aAER3B,EAAMiQ,QAAQ,EAAG93M,OAAO23M,EAAQx5M,MAAM,IAAM,GAO1D,IAHA,IAAI65M,EAAcL,EAAQz5M,OACtB2sM,EAAW,GAENjsM,EAAQ,EAAGA,EAAQw+E,EAAKhmF,OAAQwH,IAAS,CAChD,IAAIq5M,EAAU76H,EAAKx+E,GACfs5M,EAAeF,EAAY5gN,OAAS,EAExC,GAAI6gN,EAAUC,EACZ,MAAM,IAAI15M,MAAJ,8BAAiCy5M,EAAjC,gDAAgFC,IAGxF,GAAI3gN,MAAMC,QAAQwgN,EAAY,IAAK,CAEjC,IAAI3/M,EAAQ2/M,EAAYC,GACpBpF,EAAW,GAGf,IAAK,IAAIx7M,KAAKgmF,EAAS,CACrB,IAAI2rH,EACJ,GAAsB,OAAlB/8G,EAAM,MAAsB2rH,EAMzB,CACL5O,EAAY3rH,EAAQhmF,GACpB,IAAI8gN,EAAeR,EAAQt6H,QAAQjmF,OAAS,EAE5C,GAAI4xM,EAAYmP,EACd,MAAM,IAAI35M,MAAJ,uBAA0BwqM,EAA1B,2BAAsDmP,SAR9D,IAAkB,IAFlBnP,EAAY2O,EAAQt6H,QAAQrzD,QAAQqzD,EAAQhmF,KAG1C,MAAM,IAAImH,MAAJ,iBAAoB6+E,EAAQhmF,GAA5B,oBAWV,IAAIo3M,EAAOp2M,EAAM2wM,GACjB6J,EAAS/2M,KAAK2yM,GAGhB5D,EAAS/uM,KAAK+2M,QAIdhI,EAAS/uM,KAAKk8M,EAAYC,IAK9B,IAAIzO,EAAe,GACG,QAAlBv9G,EAAM,MAAsB2rH,EAE9Bv6H,EAAQt6E,KAAI,SAACkgJ,GACXumD,EAAa1tM,KAAK67M,EAAQt6H,QAAQ4lE,OAGpCumD,EAAensH,EAIjB,IAAI+6H,EAAY,GAIhB,OAHAh7H,EAAKz4E,SAAQ,SAACtN,GACZ+gN,EAAUt8M,KAAK67M,EAAQ/4M,MAAMvH,OAExB,CAAEwzM,EAAUrB,EAAc4O,K,6TCxKnC,IAAMvQ,EAAQ,IAAIC,IACZ1zL,EAAS,IAAImzL,IAYN4B,EAAb,2B,IAAA,G,EAAA,E,gZACE,WAAY7rM,EAAM2uF,GAAQ,yBACpB10F,MAAMC,QAAQ8F,EAAK,KAAOuqM,EAAM6L,YAAYp2M,EAAK,KACnDA,EAAOuqM,EAAMwQ,mBAAmB/6M,GAChC,cAAMA,EAAM2uF,IAEZ,cAAM3uF,EAAM2uF,GALU,OAD5B,2CAyBiB,IAAV7O,EAAU,uDAAH,EACV,GAAIA,EAAOzkF,KAAKwF,MAAM,IAAMi/E,EAAO,EAEjC,OAAO,IAAI+rH,EAAOxwM,KAAKuF,OAAQ,CAAEm/E,QAAS1kF,KAAK6wM,eAE/C,IAAIlsM,EAAO3E,KAAKuF,OAAOlB,MAAM,EAAGogF,GAChC,OAAO,IAAI+rH,EAAO7rM,EAAM,CAAE+/E,QAAS1kF,KAAK6wM,iBA/B9C,6BA0CiB,IAAVpsH,EAAU,uDAAH,EACV,GAAIA,EAAOzkF,KAAKuF,OAAO9G,QAAUgmF,EAAO,EAEtC,OAAO,IAAI+rH,EAAOxwM,KAAKuF,OAAQ,CAAEm/E,QAAS1kF,KAAK6wM,eAE/C,IAAIlsM,EAAO3E,KAAKuF,OAAOlB,MAAMrE,KAAKwF,MAAM,GAAKi/E,GACzC8mC,EAAMvrH,KAAKiG,MAAM5B,MAAMrE,KAAKwF,MAAM,GAAKi/E,GACvC8uH,EAAK,IAAI/C,EAAO7rM,EAAM,CAAE+/E,QAAS1kF,KAAK6wM,aAAc5qM,MAAOslH,IAC/D,OAAOgoF,IAlDb,8IA6DejoM,EA7Df,+BA6DqB,EAAG+mD,EA7DxB,+BA6D+B,IACvB/mD,EAAMtL,KAAKwF,MAAM,IA9DzB,sBA+DY,IAAIK,MAAM,uDA/DtB,YAiEQyF,GAAO,GAAY,GAAPA,GAjEpB,sBAkEY,IAAIzF,MAAM,2CAlEtB,cAoEIyF,GAAe,IAATA,EAAatL,KAAKwF,MAAM,GAAK8F,EApEvC,SAqEiCinM,aAAcvyM,KAAKiG,OAAO8sG,QAAQznG,EAAK+mD,GAAM28E,KAAK1jI,GAAK+jI,UArExF,cAqEUujE,EArEV,OAsEUW,EAAKvzM,KAAK6yM,KAAKD,GAtEzB,kBAuEWW,GAvEX,wHAgFMT,GACF,OAAI5D,EAAMoJ,YAAYxF,GAGb,IAAItC,EADDxwM,KAAKsyM,gBAAgB9tL,IAAIsuL,GAAOQ,YACnB,CAAE5uH,QAAS1kF,KAAK6wM,eAEnC7wM,KAAK2/M,iCAEA,IAAInP,EADDxwM,KAAK6jB,OAAOW,IAAIsuL,EAAMjvL,QAAQyvL,YACjB,CAAE5uH,QAAS1kF,KAAK6wM,oBAFzC,IAtFN,0BAoGMiC,GACF,OAAI5D,EAAMoJ,YAAYxF,GAEb,IAAItC,EADDxwM,KAAK6jB,OAAOm0B,IAAI86J,GAAOQ,YACV,CAAE5uH,QAAS1kF,KAAK6wM,eAEnC7wM,KAAK2/M,iCAEA,IAAInP,EADDxwM,KAAK6jB,OAAOm0B,IAAI86J,EAAMjvL,QAAQyvL,YACjB,CAAE5uH,QAAS1kF,KAAK6wM,oBAFzC,IAzGN,0BAuHMiC,GACF,OAAI5D,EAAMoJ,YAAYxF,GAEb,IAAItC,EADDxwM,KAAK6jB,OAAO+wB,IAAIk+J,GAAOQ,YACV,CAAE5uH,QAAS1kF,KAAK6wM,eAEnC7wM,KAAK2/M,iCAEA,IAAInP,EADDxwM,KAAK6jB,OAAO+wB,IAAIk+J,EAAMjvL,QAAQyvL,YACjB,CAAE5uH,QAAS1kF,KAAK6wM,oBAFzC,IA5HN,0BA0IMiC,GAAqB,IAAdt2L,IAAc,yDACvB,GAAI0yL,EAAMoJ,YAAYxF,GAAQ,CAC5B,IAAI8M,EAAa5/M,KAAK6jB,OAAO6wB,IAAIo+J,GACjC,OAAO,IAAItC,EAAOoP,EAAWtM,YAAa,CAAE5uH,QAAS1kF,KAAK6wM,aAAcc,OAAQ,CAAEiO,EAAWn6M,SAE7F,GAAIzF,KAAK2/M,iCAAkC,CACzC,IAAIl6M,EAGFA,EADE+W,EACM,UAEA,QAGV,IAAIqjM,EAAU7/M,KAAK6jB,OAAOygE,OAAO7+E,GAC7Bq6M,EAAUhN,EAAMjvL,OAAOygE,OAAO7+E,GAC9B0B,EAAS04M,EAAQnrK,IAAIorK,GACzB,OAAO,IAAItP,EAAOrpM,EAAOmsM,YAAa,CAAE5uH,QAAS1kF,KAAK6wM,aAAcc,OAAQ,CAAExqM,EAAO1B,YA3J7F,0BAqKMqtM,GACF,OAAI5D,EAAMoJ,YAAYxF,GAEb,IAAItC,EADMxwM,KAAK6jB,OAAO+zB,IAAIk7J,GAAOQ,YACV,CAAE5uH,QAAS1kF,KAAK6wM,eAE1C7wM,KAAK2/M,iCAEA,IAAInP,EADMxwM,KAAK6jB,OAAO+zB,IAAIk7J,EAAMjvL,QAAQyvL,YACjB,CAAE5uH,QAAS1kF,KAAK6wM,oBAFhD,IA1KN,0BAuLMiC,GACF,OAAI5D,EAAMoJ,YAAYxF,GAEb,IAAItC,EADMxwM,KAAK6jB,OAAOytC,IAAIwhJ,GAAOQ,YACV,CAAE5uH,QAAS1kF,KAAK6wM,eAE1C7wM,KAAK2/M,iCAEA,IAAInP,EADMxwM,KAAK6jB,OAAOytC,IAAIwhJ,EAAMjvL,QAAQyvL,YACjB,CAAE5uH,QAAS1kF,KAAK6wM,oBAFhD,IA5LN,6BAyMI3B,EAAM6Q,uBAAuB//M,KAAM,QACnC,IAAIuF,EAAS2pM,EAAMkE,aAAapzM,KAAKuF,QAErC,OADWgtM,SAAUhtM,GAAQ0+C,OAAOqvJ,cA3MxC,+BAqNIpE,EAAM6Q,uBAAuB//M,KAAM,UACnC,IAAIuF,EAAS2pM,EAAMkE,aAAapzM,KAAKuF,QAErC,OADiBmuM,SAAOnuM,KAvN5B,6BAiOI2pM,EAAM6Q,uBAAuB//M,KAAM,UACnC,IAAIuF,EAAS2pM,EAAMkE,aAAapzM,KAAKuF,QAErC,OADgB6rD,SAAK7rD,KAnOzB,4BA+OI,OAFA2pM,EAAM6Q,uBAAuB//M,KAAM,OACzBA,KAAKsyM,gBAAgB9rM,MAAM8sM,cA9OzC,4BA0PI,OAFApE,EAAM6Q,uBAAuB//M,KAAM,OACzBA,KAAKsyM,gBAAgB5rM,MAAM4sM,cAzPzC,4BAsQI,GADApE,EAAM6Q,uBAAuB//M,KAAM,OACb,WAAlBA,KAAK2xM,OAAO,GAAiB,CAC/B,IAAI3rM,EAAOkpM,EAAMkE,aAAapzM,KAAKuF,QAC/BgwM,EAAWhD,SAAUvsM,GAAMa,MAAMysM,YACrC,OAAOjsM,OAAOkuM,GAEhB,IAAIvvM,EAAOkpM,EAAMkE,aAAapzM,KAAKuF,QAC/BgwM,EAAWhD,SAAUvsM,GAAMa,MAAMysM,YACrC,OAAOjsM,OAAOkuM,EAASx1L,QAAQ,MA7QnC,8BAsRI,OAAOmvL,EAAM6E,YAAY/zM,KAAKuF,QAAQ,GAAM,KAtRhD,8BA+RUutM,GACN,GAAI5D,EAAMoJ,YAAYxF,GAAQ,CAC5B,IAAIkN,EAAahgN,KAAKsyM,gBAAgBx4J,QAAQg5J,GAC9C,OAAO,IAAItC,EAAOwP,EAAW1M,YAAa,CACxC5uH,QAAS1kF,KAAK6wM,aACdc,OAAQqO,EAAWv6M,MACnBQ,MAAOjG,KAAKiG,QAGd,GAAIjG,KAAK2/M,iCAAkC,CACzC,IAAIE,EAAU7/M,KAAKsyM,gBACfwN,EAAUhN,EAAMjvL,OAEpB,OAAO,IAAI2sL,EADEqP,EAAQ/lK,QAAQgmK,GAASxM,YACZ,CAAE5uH,QAAS1kF,KAAK6wM,aAAc5qM,MAAOjG,KAAKiG,WA5S5E,8BAsTU6sM,GACN,GAAI5D,EAAMoJ,YAAYxF,GAAQ,CAC5B,IAAIkN,EAAahgN,KAAKsyM,gBAAgBvhJ,QAAQ+hJ,GAC9C,OAAO,IAAItC,EAAOwP,EAAW1M,YAAa,CACxC5uH,QAAS1kF,KAAK6wM,aACdc,OAAQqO,EAAWv6M,MACnBQ,MAAOjG,KAAKiG,QAGd,GAAIjG,KAAK2/M,iCAAkC,CACzC,IAAIE,EAAU7/M,KAAK6jB,OACfi8L,EAAUhN,EAAMjvL,OAEpB,OAAO,IAAI2sL,EADEqP,EAAQ9uJ,QAAQ+uJ,GAASxM,YACZ,CAAE5uH,QAAS1kF,KAAK6wM,aAAc5qM,MAAOjG,KAAKiG,WAnU5E,4BA8UQ+tM,GACJ,OAAI9E,EAAMwJ,eAAe1E,GAGhB,IAAIxD,EADE+B,QAASvyM,KAAKsyM,iBAAiBgB,YAClB,CAAE5uH,QAAS1kF,KAAK6wM,aAAc5qM,MAAOjG,KAAKiG,QAI7D,IAAIuqM,EADEtB,EAAMgF,QAAQl0M,KAAKuF,OAAQyuM,GAAI,GAClB,CAAEtvH,QAAS1kF,KAAK6wM,aAAc5qM,MAAOjG,KAAKiG,UAtV1E,4BAiWIipM,EAAM6Q,uBAAuB//M,KAAM,OACnC,IAAIuF,EAAS2pM,EAAMkE,aAAapzM,KAAKuF,QAGrC,OADcuuM,SAAIvuM,KApWtB,4BA8WI2pM,EAAM6Q,uBAAuB//M,KAAM,OACnC,IAAIuF,EAAS2pM,EAAMkE,aAAapzM,KAAKuF,QAGrC,OADc2+C,SAAS3+C,KAjX3B,6BAkYI,OALS,IAAIirM,EADCxwM,KAAKs3M,SACU,CAC3BrxM,MAAOjG,KAAKiG,MACZy+E,QAAS1kF,KAAK6wM,aACdc,OAAQ,CAAE,eAhYhB,+BA0YsB,IAAbr+G,EAAa,uDAAJ,GACV+9G,EAAgB,CAAE,QAAS,WAK/B,GAJAnC,EAAMoC,0BAA0Bh+G,EAAQ+9G,GAExC/9G,EAAM,QAAcA,EAAM,UAAe,IAEnC,UAAWA,GACf,MAAMztF,MAAM,mDAGd,IAAIizM,EAAa,GASjB,GARA94M,KAAKuF,OAAOyG,SAAQ,SAACpF,GACf2E,MAAM3E,IAAsB,iBAAPA,EACvBkyM,EAAW31M,KAAKmwF,EAAM,OAEtBwlH,EAAW31M,KAAKyD,OAIhB0sF,EAAM,QAEH,CACL,IAAIigH,EAAK,IAAI/C,EAAOsI,EAAY,CAC9Bp0H,QAAS1kF,KAAK6wM,aACd5qM,MAAOjG,KAAKiG,MACZ0rM,OAAQ3xM,KAAK2xM,SAEf,OAAO4B,EAPPvzM,KAAK2E,KAAOm0M,IA9ZlB,oCAgb2B,WAAbxlH,EAAa,uDAAJ,GACf+9G,EAAgB,CAAE,UAAW,aACjCnC,EAAMoC,0BAA0Bh+G,EAAQ+9G,GAElC,cAAe/9G,IACnBA,EAAM,WAAgB,GAGlB,YAAaA,IACjBA,EAAM,SAAc,GAGtB,IAAI2sH,EAAgB,GAChBC,EAAU,IAAKlgN,KAAKuF,QACpB46M,EAAYjR,EAAMiQ,QAAQ,EAAGn/M,KAAKiG,MAAMxH,OAAS,GACjD2hN,EAAalR,EAAMmR,qBAAqBF,EAAWD,EAASlgN,KAAK2xM,OAAO,IAW5E,GATAyO,EAAWp0M,SAAQ,SAACu/G,GAClB00F,EAAc98M,KAAK,EAAKoC,OAAOgmH,OAG7Bj4B,EAAM,YACR2sH,EAAgBA,EAAc/2K,UAC9Bk3K,EAAaA,EAAWl3K,YAGtBoqD,EAAM,QAGH,CACL,IAAIigH,EAAK,IAAI/C,EAAOyP,EAAe,CAAEv7H,QAAS1kF,KAAK6wM,aAAc5qM,MAAOm6M,IACxE,OAAO7M,EAJPvzM,KAAK2E,KAAOs7M,EACZjgN,KAAKwyM,YAAY4N,KA5cvB,6BA+dI,OALS,IAAI5P,EAAJ,IAAgBxwM,KAAKuF,QAAU,CACtCm/E,QAAS,IAAK1kF,KAAK6wM,cACnB5qM,MAAO,IAAKjG,KAAKiG,OACjB0rM,OAAQ,IAAK3xM,KAAK2xM,OAAO,QA7d/B,iCA0eI,MAAsB,UAAlB3xM,KAAK2xM,OAAO,GACP,KAaE,IAAInB,EADF,CARCxwM,KAAK+6E,QACN/6E,KAAKikD,OACNjkD,KAAK8zM,MACL9zM,KAAKwG,MACFxG,KAAK0zM,SACR1zM,KAAK0G,MACA1G,KAAA,OAGW,CAAE0kF,QAAS1kF,KAAK0kF,QAASz+E,MAVvC,CAAE,QAAS,OAAQ,MAAO,MAAO,SAAU,MAAO,gBA9epE,oCAsgB2B,IAAbqtF,EAAa,uDAAJ,GACf+9G,EAAgB,CAAE,WAKtB,GAJAnC,EAAMoC,0BAA0Bh+G,EAAQ+9G,GAExC/9G,EAAM,QAAcA,EAAM,UAAe,GAErCA,EAAM,QAEH,CACL,IAAIigH,EAAKvzM,KAAK20M,OAEd,OADApB,EAAGqB,gBACIrB,EAJPvzM,KAAK40M,kBA7gBX,kCA4hByB,IAAbthH,EAAa,uDAAJ,GAEb+9G,EAAgB,CAAE,QAAS,WAM/B,GALAnC,EAAMoC,0BAA0Bh+G,EAAQ+9G,GAGxC/9G,EAAM,QAAcA,EAAM,UAAe,IAEnC,UAAWA,GACf,MAAMztF,MAAM,wDAGd,GAAIytF,EAAM,MAAU70F,QAAUuB,KAAKiG,MAAMxH,OACvC,MAAMoH,MAAM,gDAAD,OAAiDytF,EAAM,MAAU70F,OAAjE,gDAA+GuB,KAAKiG,MAAMxH,SAGvI,IAAI60F,EAAM,QAEH,CACL,IAAIigH,EAAKvzM,KAAK20M,OAEd,OADApB,EAAGf,YAAYl/G,EAAM,OACdigH,EAJPvzM,KAAKs6M,UAAYhnH,EAAM,QA7iB7B,uDA2jBmCw/G,GAC/B,GAAI5D,EAAMwJ,eAAe5F,EAAMyF,QAC7B,MAAM1yM,MAAM,4EAEd,GAAIitM,EAAMvtM,OAAO9G,QAAUuB,KAAKuF,OAAO9G,OACrC,MAAMoH,MAAM,0CAEd,GAAsB,SAAlB7F,KAAK2xM,OAAO,IAAmC,OAAlB3xM,KAAK2xM,OAAO,GAC3C,MAAM9rM,MAAM,iDAAD,OAAkD7F,KAAK2xM,OAAO,GAA9D,sBAA8EmB,EAAMnB,OAAO,KAExG,GAAuB,SAAnBmB,EAAMnB,OAAO,IAAoC,OAAnBmB,EAAMnB,OAAO,GAC7C,MAAM9rM,MAAM,iDAAD,OAAkDitM,EAAMnB,OAAO,GAA/D,sBAA+E3xM,KAAK2xM,OAAO,KAGxG,OAAO,IAzkBX,0BAilBM+F,GACF,IAAI4I,EAAcpR,EAAMuI,cAAcC,GAsBtC,OAJS,IAAIlH,EAhBFxwM,KAAK2E,KAAKyF,KAAI,SAACxD,GACxB,GAAI05M,EACF,OAAO5I,EAAS9wM,GAEhB,GAAIsoM,EAAM6L,YAAYrD,GAEpB,OAAI9wM,KAAO8wM,EACFA,EAAS9wM,GAETqvD,IAGT,MAAM,IAAIpwD,MAAM,sDAII,CACxB6+E,QAAS1kF,KAAK6wM,aACd5qM,MAAOjG,KAAKiG,UAtmBlB,4BAgnBQyxM,GAGJ,IAFkBxI,EAAMuI,cAAcC,GAGpC,MAAM,IAAI7xM,MAAM,oCAMlB,OAAO,IAAI2qM,EAHAxwM,KAAK2E,KAAKyF,KAAI,SAACxD,GACxB,OAAO8wM,EAAS9wM,MAEM,CAAE89E,QAAS1kF,KAAK6wM,aAAc5qM,MAAOjG,KAAKiG,UA1nBtE,+BAmoBI,IAAIwzM,EAAW,IAAIt1L,IAAInkB,KAAKuF,QAG5B,OAFa,IAAIirM,EAAO5xM,MAAM+D,KAAK82M,MApoBvC,gCA+oBI,OAAOz5M,KAAK+9D,SAASx4D,OAAO9G,SA/oBhC,qCA2pBI,IAHA,IAAI8hN,EAASvgN,KAAKuF,OACdi7M,EAAY,GAEP9hN,EAAI,EAAGA,EAAI6hN,EAAO9hN,OAAQC,IAAK,CACtC,IAAIkI,EAAM25M,EAAO7hN,GAEbkI,KAAO45M,EACTA,EAAU55M,IAAQ,EAElB45M,EAAU55M,GAAO,EAIrB,IAAIX,EAAQjF,OAAO8lB,KAAK05L,GAAWp2M,KAAI,SAAC3D,GACtC,OAAO2+F,SAAS3+F,GAAK2+F,SAAS3+F,GAAKA,KAKrC,OADa,IAAI+pM,EAFNxvM,OAAOuE,OAAOi7M,GAEK,CAAEv6M,MAAOA,MA1qB3C,4BAorBI,IAAIuvM,EAAWx1M,KAAKsyM,gBAAgBr/J,MAAMqgK,YAC1C,OAAO,IAAI9C,EAAOtB,EAAMgF,QAAQsB,EAAU,GAAG,MArrBjD,+BA+rBI,OADWx1M,KAAKy0M,UAAU,SA9rB9B,+BAwsBI,OADWz0M,KAAKy0M,UAAU,SAvsB9B,+BAitBI,OADWz0M,KAAKy0M,UAAU,SAhtB9B,gCA0tBI,OADWz0M,KAAKy0M,UAAU,UAztB9B,yBAmuBK3B,GACD,OAAO9yM,KAAKygN,WAAW3N,EAAO,QApuBlC,yBA4uBKA,GACD,OAAO9yM,KAAKygN,WAAW3N,EAAO,QA7uBlC,yBAqvBKA,GACD,OAAO9yM,KAAKygN,WAAW3N,EAAO,QAtvBlC,yBA8vBKA,GACD,OAAO9yM,KAAKygN,WAAW3N,EAAO,QA/vBlC,yBAuwBKA,GACD,OAAO9yM,KAAKygN,WAAW3N,EAAO,QAxwBlC,yBAixBKA,GACD,OAAO9yM,KAAKygN,WAAW3N,EAAO,QAlxBlC,gCA4xBuB,IAAbx/G,EAAa,uDAAJ,GACX+9G,EAAgB,CAAE,UAAW,OAAQ,WAKzC,GAJAnC,EAAMoC,0BAA0Bh+G,EAAQ+9G,GAExC/9G,EAAM,QAAcA,EAAM,UAAe,IAEnC,YAAaA,GACjB,MAAMztF,MAAM,8CAGd,KAAM,SAAUytF,GACd,MAAMztF,MAAM,2CAGd,IAAIoyM,EAAe,GACfC,EAAUl4M,KAAKuF,OAUnB,GARA2yM,EAAQlsM,SAAQ,SAACpF,GACXA,GAAO0sF,EAAM,QACf2kH,EAAa90M,KAAKmwF,EAAM,MAExB2kH,EAAa90M,KAAKyD,OAIlB0sF,EAAM,QAEH,CACL,IAAIigH,EAAK,IAAI/C,EAAOyH,EAAc,CAChChyM,MAAOjG,KAAKiG,MACZy+E,QAAS1kF,KAAK0kF,QACditH,OAAQ3xM,KAAK2xM,SAEf,OAAO4B,EAPPvzM,KAAK2E,KAAOszM,IAtzBlB,+BAw0BsB,IAAb3kH,EAAa,uDAAJ,GACV+9G,EAAgB,CAAE,WACtBnC,EAAMoC,0BAA0Bh+G,EAAQ+9G,GAExC/9G,EAAM,QAAcA,EAAM,UAAe,EAEzC,IAAIotH,EAAa1gN,KAAKuF,OAClBq0M,EAAY55M,KAAKiG,MACjB6yM,EAAa,GACb3G,EAAY,GACZwO,EAAY3gN,KAAK4gN,OAAOr7M,OAQ5B,GANAo7M,EAAU30M,SAAQ,SAACpF,EAAKlI,GACjBkI,IACHkyM,EAAW31M,KAAKu9M,EAAWhiN,IAC3ByzM,EAAUhvM,KAAKy2M,EAAUl7M,SAGzB40F,EAAM,QAGH,CACL,IAAIigH,EAAK,IAAI/C,EAAOsI,EAAY,CAC9Bp0H,QAAS1kF,KAAK6wM,aACd5qM,MAAOksM,EACPR,OAAQ3xM,KAAK2xM,SAEf,OAAO4B,EARPvzM,KAAKs6M,UAAYnI,EACjBnyM,KAAK2E,KAAOm0M,IA51BlB,gCA62B4B,IAAlB+H,IAAkB,yDACpBC,EAAe9gN,KAAK+gN,YAAY,CAAEF,UAAWA,IAAa56M,MAC1DstM,EAAK,IAAI/C,EAAOsQ,GACpB,OAAOvN,IAh3BX,+BAw3BI,OAAOvzM,KAAKsyM,gBAAgB71J,SAAS62J,cAx3BzC,+BAk4BI,OAAOtzM,KAAKsyM,gBAAgB31J,SAAS22J,cAl4BzC,wCAq5B+B,IAQvBmI,EAAU7B,EARAtmH,EAAa,uDAAJ,GACnB+9G,EAAgB,CAAE,UAAW,QACjCnC,EAAMoC,0BAA0Bh+G,EAAQ+9G,GAExC/9G,EAAM,QAAcA,EAAM,UAAe,EACzCA,EAAM,KAAWA,EAAM,MAAY,QAIb,QAAlBA,EAAM,MACRmoH,EAAWz7M,KAAKuF,OAAO2jC,UACvB0wK,EAAY55M,KAAKiG,MAAMijC,YAEvBuyK,EAAWz7M,KAAKuF,OAChBq0M,EAAY55M,KAAKiG,OAGnB,IAAIksM,EAAY,GACZ5B,EAAU,GAed,GAbAkL,EAASzvM,SAAQ,SAACpF,EAAKlI,GAChB6xM,EAAQ7zG,SAAS91F,KACpBurM,EAAUhvM,KAAKy2M,EAAUl7M,IACzB6xM,EAAQptM,KAAKyD,OAIK,QAAlB0sF,EAAM,OAERi9G,EAAUA,EAAQrnK,UAClBipK,EAAYA,EAAUjpK,YAGpBoqD,EAAM,QAGH,CACL,IAAIigH,EAAK,IAAI/C,EAAOD,EAAS,CAC3BtqM,MAAOksM,EACPztH,QAAS1kF,KAAK6wM,aACdc,OAAQ3xM,KAAK2xM,SAEf,OAAO4B,EARPvzM,KAAK2E,KAAO4rM,EACZvwM,KAAKs6M,UAAYnI,IAx7BvB,iCAy8BI,IAMI5mF,EAAK5mH,EAJLw3M,EAAU1gM,EAAO2gM,YACjBX,EAAW,GACXc,EAAe,GACfT,EAAS,CAAE,IAAKxxM,OAAOtK,KAAK0kF,SAG5B1kF,KAAKuF,OAAO9G,OAAS09M,GAEvBx3M,EAAO3E,KAAKuF,OAAOlB,MAAM,EAAG83M,GAC5B5wF,EAAMvrH,KAAKiG,MAAM5B,MAAM,EAAG83M,KAE1Bx3M,EAAO3E,KAAKuF,OACZgmH,EAAMvrH,KAAKiG,OAGbslH,EAAIv/G,SAAQ,SAACpF,EAAKlI,GAChB,IAAI2gB,EAAM,CAAEzY,GAAM0D,OAAO3F,EAAKjG,IAC9B+8M,EAASt4M,KAAKkc,MAIhBk9L,EAAa,GAAK,GAClBA,EAAa,GAAK,CAAE1zM,MAxBF,GAwBsBm0M,SAvBnB,IAyBrB,IAAIC,EAAa,CAAEnB,GAASxxM,OAAOmxM,GACnC,OAAOyB,QAAMD,EAAY,CAAEv4H,QAAS63H,MAp+BxC,iCA4+BazJ,EAAOkO,GAChB,IAAIC,EACAC,EAAWlhN,KAAKuF,OAEpB,GAAoB,iBAATutM,EACTmO,EAAW,IAAKC,GAAWhiM,KAAK4zL,OAC3B,CACL,KAAMA,aAAiBtC,GACrB,MAAM,IAAI3qM,MAAM,sDAElBo7M,EAAWnO,EAAMvtM,OAGnB,GAAM27M,EAASziN,SAAWwiN,EAASxiN,OACjC,MAAM,IAAIoH,MAAM,wDAKlB,IAFA,IAAIlB,EAAO,GAEFjG,EAAI,EAAGA,EAAIwiN,EAASziN,OAAQC,IAAK,CAExC,IAAIyiN,EAAQD,EAASxiN,GACjB0iN,EAAQH,EAASviN,GACjB6d,EAAO,KACX,OAAQykM,GAER,IAAK,KACHzkM,EAAO4kM,EAAQC,EACfz8M,EAAKxB,KAAKoZ,GACV,MACF,IAAK,KACHA,EAAO4kM,EAAQC,EACfz8M,EAAKxB,KAAKoZ,GACV,MACF,IAAK,KACHA,EAAO4kM,GAASC,EAChBz8M,EAAKxB,KAAKoZ,GACV,MACF,IAAK,KACHA,EAAO4kM,GAASC,EAChBz8M,EAAKxB,KAAKoZ,GACV,MACF,IAAK,KACHA,EAAO4kM,GAASC,EAChBz8M,EAAKxB,KAAKoZ,GACV,MACF,IAAK,KACHA,EAAO4kM,IAAUC,EACjBz8M,EAAKxB,KAAKoZ,IAId,OAAO,IAAIi0L,EAAO7rM,KAhiCtB,gCAwiCYwvM,GAMR,IAJA,IAAIoM,EAASvgN,KAAKuF,OACd8uM,EAAWkM,EAAO,GAClB57M,EAAO,CAAE0vM,GAEJ31M,EAAI,EAAGA,EAAI6hN,EAAO9hN,OAAQC,IAAK,CAEtC,IAAI61M,EAAWgM,EAAO7hN,GACtB,OAAQy1M,GACR,IAAK,MACCI,EAAWF,GACb1vM,EAAKxB,KAAKoxM,GACVF,EAAWE,GAEX5vM,EAAKxB,KAAKkxM,GAEZ,MACF,IAAK,MACCE,EAAWF,GACb1vM,EAAKxB,KAAKoxM,GACVF,EAAWE,GAEX5vM,EAAKxB,KAAKkxM,GAEZ,MACF,IAAK,MACHA,GAAsBE,EACtB5vM,EAAKxB,KAAKkxM,GACV,MACF,IAAK,OACHA,GAAsBE,EACtB5vM,EAAKxB,KAAKkxM,IAKd,OAAO,IAAI7D,EAAO7rM,KA7kCtB,6BAslCSc,GACL,IAAM4vM,EAAqB,CAAE,UAAW,QAAS,SAAU,WAE3D,IAAK5vM,EACH,MAAMI,MAAM,gDAGd,IAAKwvM,EAAmB34G,SAASj3F,GAC/B,MAAMI,MAAM,SAAD,OAAUJ,EAAV,gDAAuD4vM,IAGpE,IAAI6D,EAAal5M,KAAKuF,OAClBuzM,EAAa,GAEjB,OAAQrzM,GACR,IAAK,UACHyzM,EAAWltM,SAAQ,SAACpF,GAClBkyM,EAAW31M,KAAKkE,OAAOT,OAEzB,MACF,IAAK,QACHsyM,EAAWltM,SAAQ,SAACpF,GAClBkyM,EAAW31M,KAAKkE,OAAOA,OAAOT,GAAKmZ,eAErC,MACF,IAAK,SACHm5L,EAAWltM,SAAQ,SAACpF,GAClBkyM,EAAW31M,KAAK+I,OAAOtF,OAEzB,MACF,IAAK,UACHsyM,EAAWltM,SAAQ,SAACpF,GAClBkyM,EAAW31M,KAAKk+M,QAAQz6M,OAQ5B,OADS,IAAI4pM,EAAOsI,EAAY,CAAEnH,OAAQlsM,EAAOQ,MAAOjG,KAAKiG,UA7nCjE,8BA6pCI0I,QAAQkQ,IAAI7e,KAAO,MA7pCvB,2BAuqCO00C,GAEH,OADY,IAAIqkK,IAAK/4M,KAAM00C,KAxqC/B,2BAirCOr1B,GACH,IAAIi0E,EAAS,GACbA,EAAM,KAAWj0E,EACjBi0E,EAAM,KAAW,OAHT,OAK0Bm/G,OAASzyM,KAAMszF,GALzC,WAQR,OAFS,IAAIk9G,EANL,KAMsB,CAAE9rH,QANxB,KAM0Cz+E,MAN1C,SAjrCZ,6BAisCSW,GAAsB,IAAjB8tM,EAAiB,wDAC3B,IAAIA,EAkBG,CACL,IAAInB,EAAKvzM,KAAK20M,OACd,GAAI/1M,MAAMC,QAAQ+H,GAChBA,EAAIoF,SAAQ,SAACs1M,EAAI5iN,GACf60M,EAAG5uM,KAAKxB,KAAKm+M,GACb/N,EAAG+G,UAAUn3M,KAAKzE,WAEf,GAAIkI,aAAe4pM,EAAQ,CAChC,IAAI9wM,EAAQkH,EAAIrB,OACZq0M,EAAYhzM,EAAIX,MACpBvG,EAAMsM,SAAQ,SAACs1M,EAAI5iN,GACjB60M,EAAG5uM,KAAKxB,KAAKm+M,GACb/N,EAAG+G,UAAUn3M,KAAKy2M,EAAUl7M,YAG9B60M,EAAG5uM,KAAKxB,KAAKyD,GACb2sM,EAAG+G,UAAUn3M,KAAK,GAEpB,OAAOowM,EAnCP,IAAIx0M,EAAOiB,KACX,GAAIpB,MAAMC,QAAQ+H,GAChBA,EAAIoF,SAAQ,SAACs1M,EAAI5iN,GACfK,EAAK4F,KAAKxB,KAAKm+M,GACfviN,EAAKu7M,UAAUn3M,KAAKzE,WAEjB,GAAIkI,aAAe4pM,EAAQ,CAChC,IAAI9wM,EAAQkH,EAAIrB,OACZq0M,EAAYhzM,EAAIX,MACpBvG,EAAMsM,SAAQ,SAACs1M,EAAI5iN,GACjBK,EAAK4F,KAAKxB,KAAKm+M,GACfviN,EAAKu7M,UAAUn3M,KAAKy2M,EAAUl7M,YAGhCK,EAAK4F,KAAKxB,KAAKyD,GACf7H,EAAKu7M,UAAUn3M,KAAK,KAltC5B,6BAgBI,OAAOovM,SAAUvyM,KAAKuF,QAAQ++E,OAAOtkF,KAAK2xM,OAAO,MAhBrD,4BA44BI,OAAO3xM,KAAK2xM,OAAO,KA54BvB,0BAuoCI,GAAsB,UAAlB3xM,KAAK2xM,OAAO,GACd,OAAO,IAAI4P,IAAIvhN,MAEf,MAAM,IAAI6F,MAAM,iDA1oCtB,yBAmpCI,IAAI27M,EAAa,IAAIC,IAAW,CAAE98M,KAAM3E,OAExC,OADAwhN,EAAWE,eACJF,MArpCX,GAA4BtG,M,iGCpCfqG,EAAb,WACE,WAAYhJ,GAAQ,YAClBv4M,KAAKu4M,OAASA,EACdv4M,KAAK8F,MAAQyyM,EAAOhzM,OAHxB,kDAWI,IAAIgrM,EAAU,GAUd,OATAvwM,KAAK8F,MAAMsE,KAAI,SAACxD,GACV2E,MAAM3E,IAAsB,iBAAPA,EACvB2pM,EAAQptM,KAAKyD,GAEb2pM,EAAQptM,KAAKyD,EAAI4I,kBAIZxP,KAAK2hN,qBAAqBpR,EAASvwM,KAAKu4M,UApBrD,oCA6BI,IAAIhI,EAAU,GAUd,OATAvwM,KAAK8F,MAAMsE,KAAI,SAACxD,GACV2E,MAAM3E,IAAsB,iBAAPA,EACvB2pM,EAAQptM,KAAKyD,GAEb2pM,EAAQptM,KAAKyD,EAAI2/E,kBAIZvmF,KAAK2hN,qBAAqBpR,EAASvwM,KAAKu4M,UAtCrD,mCA+CI,IAAIhI,EAAU,GAad,OAZAvwM,KAAK8F,MAAMsE,KAAI,SAACxD,GACd,GAAI2E,MAAM3E,IAAsB,iBAAPA,EACvB2pM,EAAQptM,KAAKyD,OACR,CACL,IAAIg7M,EAASh7M,EAAIvC,MAAM,EAAG,GACtBw9M,EAASj7M,EAAIvC,MAAM,GACnBy9M,EAAU,GAAH,OAAMF,EAAOr7H,eAAb,OAA6Bs7H,EAAOryM,eAC/C+gM,EAAQptM,KAAK2+M,OAIR9hN,KAAK2hN,qBAAqBpR,EAASvwM,KAAKu4M,UA3DrD,+BAqEoB,IAAXtyM,EAAW,uDAAH,EACTsqM,EAAU,GACdvwM,KAAK8F,MAAMsE,KAAI,SAACxD,GACV2E,MAAM3E,IAAsB,iBAAPA,EACvB2pM,EAAQptM,KAAKyD,GAEb2pM,EAAQptM,KAAKyD,EAAIyrI,OAAOpsI,OAG5B,IAAIstM,EAAKvzM,KAAK2hN,qBAAqBpR,EAASvwM,KAAKu4M,QACjD,OAAOhF,IA/EX,+BAyFmC,IAA1BT,EAA0B,uDAAlB,GAAIiP,EAAc,uDAAH,EAC5B,GAAInjN,MAAMC,QAAQi0M,GAAQ,CAExB,IADA,IAAIkP,EAAY,GACPtjN,EAAI,EAAGA,EAAIo0M,EAAMr0M,OAAQC,IAAK,CACrC,IAAIujN,EAAQjiN,KAAK8F,MAAMpH,GACnBwjN,EAAQpP,EAAMp0M,GACF,GAAZqjN,EACFC,EAAU7+M,KAAK8+M,EAAM33M,OAAO43M,IAE5BF,EAAU7+M,KAAK++M,EAAM53M,OAAO23M,IAIhC,IAAI1O,EAAKvzM,KAAK2hN,qBAAqBK,EAAWhiN,KAAKu4M,QACnD,OAAOhF,EAGP,IAAIhD,EAAU,GAEdvwM,KAAK8F,MAAMsE,KAAI,SAACxD,GACE,GAAZm7M,EACEx2M,MAAM3E,IAAsB,iBAAPA,EACvB2pM,EAAQptM,KAAK+I,OAAOtF,GAAK0D,OAAOwoM,IAEhCvC,EAAQptM,KAAKyD,EAAI0D,OAAOwoM,IAItBvnM,MAAM3E,IAAsB,iBAAPA,EACvB2pM,EAAQptM,KAAK2vM,EAAMxoM,OAAO4B,OAAOtF,KAEjC2pM,EAAQptM,KAAK2vM,EAAMxoM,OAAO1D,OAIhC,IAAI2sM,EAAKvzM,KAAK2hN,qBAAqBpR,EAASvwM,KAAKu4M,QACjD,OAAOhF,IA7Hb,mCAwIuB,IAAVx+K,EAAU,uDAAJ,GACXw7K,EAAU,GACdvwM,KAAK8F,MAAMkG,SAAQ,SAACpF,GACd2E,MAAM3E,IAAsB,iBAAPA,EACvB2pM,EAAQptM,MAAK,GAEbotM,EAAQptM,KAAKyD,EAAIwzB,WAAWrF,OAGhC,IAAIw+K,EAAKvzM,KAAK2hN,qBAAqBpR,EAASvwM,KAAKu4M,QACjD,OAAOhF,IAlJX,iCA0JqB,IAAVx+K,EAAU,uDAAJ,GACTw7K,EAAU,GACdvwM,KAAK8F,MAAMsE,KAAI,SAACxD,GACV2E,MAAM3E,IAAsB,iBAAPA,EACvB2pM,EAAQptM,MAAK,GAEbotM,EAAQptM,KAAKyD,EAAIkrB,SAASiD,OAG9B,IAAIw+K,EAAKvzM,KAAK2hN,qBAAqBpR,EAASvwM,KAAKu4M,QACjD,OAAOhF,IApKX,iCA4KqB,IAAVx+K,EAAU,uDAAJ,GACTw7K,EAAU,GACdvwM,KAAK8F,MAAMsE,KAAI,SAACxD,GACV2E,MAAM3E,IAAsB,iBAAPA,EACvB2pM,EAAQptM,MAAK,GAEbotM,EAAQptM,KAAKyD,EAAI81F,SAAS3nE,OAG9B,IAAIw+K,EAAKvzM,KAAK2hN,qBAAqBpR,EAASvwM,KAAKu4M,QACjD,OAAOhF,IAtLX,gCA8LoB,IAAVx+K,EAAU,uDAAJ,GACRw7K,EAAU,GACdvwM,KAAK8F,MAAMsE,KAAI,SAACxD,GACV2E,MAAM3E,IAAsB,iBAAPA,EACvB2pM,EAAQptM,MAAM,GAEdotM,EAAQptM,KAAKyD,EAAIyqB,QAAQ0D,OAG7B,IAAIw+K,EAAKvzM,KAAK2hN,qBAAqBpR,EAASvwM,KAAKu4M,QACjD,OAAOhF,IAxMX,oCAgNwB,IAAVx+K,EAAU,uDAAJ,GACZw7K,EAAU,GACdvwM,KAAK8F,MAAMsE,KAAI,SAACxD,GACV2E,MAAM3E,IAAsB,iBAAPA,EACvB2pM,EAAQptM,MAAM,GAEdotM,EAAQptM,KAAKyD,EAAIqgC,YAAYlS,OAGjC,IAAIw+K,EAAKvzM,KAAK2hN,qBAAqBpR,EAASvwM,KAAKu4M,QACjD,OAAOhF,IA1NX,gCAoO+C,IAArC4O,EAAqC,uDAAvB,GAAIC,EAAmB,uDAAJ,GACnC7R,EAAU,GACdvwM,KAAK8F,MAAMsE,KAAI,SAACxD,GACV2E,MAAM3E,IAAsB,iBAAPA,EACvB2pM,EAAQptM,KAAKyD,GAEb2pM,EAAQptM,KAAKyD,EAAIgJ,QAAQuyM,EAAaC,OAG1C,IAAI7O,EAAKvzM,KAAK2hN,qBAAqBpR,EAASvwM,KAAKu4M,QACjD,OAAOhF,IA9OX,+BAsPkB,IAATjoM,EAAS,uDAAH,EACPilM,EAAU,GACdvwM,KAAK8F,MAAMsE,KAAI,SAACxD,GACV2E,MAAM3E,IAAsB,iBAAPA,EACvB2pM,EAAQptM,KAAKyD,GAEb2pM,EAAQptM,KAAKyD,EAAIwC,OAAOkC,OAG5B,IAAIioM,EAAKvzM,KAAK2hN,qBAAqBpR,EAASvwM,KAAKu4M,QACjD,OAAOhF,IAhQX,+BAyQmB,IAAVx+K,EAAU,uDAAJ,GACPw7K,EAAU,GACdvwM,KAAK8F,MAAMsE,KAAI,SAACxD,GACV2E,MAAM3E,IAAsB,iBAAPA,EACvB2pM,EAAQptM,MAAM,GAEdotM,EAAQptM,KAAKyD,EAAIwI,OAAO2lB,OAG5B,IAAIw+K,EAAKvzM,KAAK2hN,qBAAqBpR,EAASvwM,KAAKu4M,QACjD,OAAOhF,IAnRX,8BA4RsC,IAA9B8O,EAA8B,uDAAjB,EAAGC,EAAc,uDAAH,EAC3B/R,EAAU,GACdvwM,KAAK8F,MAAMsE,KAAI,SAACxD,GACV2E,MAAM3E,IAAsB,iBAAPA,EACvB2pM,EAAQptM,KAAKyD,GAEb2pM,EAAQptM,KAAKyD,EAAIvC,MAAMg+M,EAAYC,OAGvC,IAAI/O,EAAKvzM,KAAK2hN,qBAAqBpR,EAASvwM,KAAKu4M,QACjD,OAAOhF,IAtSX,8BA+SwB,IAAhBgP,EAAgB,uDAAL,IACXhS,EAAU,GACdvwM,KAAK8F,MAAMsE,KAAI,SAACxD,GACV2E,MAAM3E,IAAsB,iBAAPA,EACvB2pM,EAAQptM,KAAKyD,GAEb2pM,EAAQptM,KAAKyD,EAAI0I,MAAMizM,OAG3B,IAAIhP,EAAKvzM,KAAK2hN,qBAAqBpR,EAASvwM,KAAKu4M,QACjD,OAAOhF,IAzTX,+BAkUkC,IAAzB8O,EAAyB,uDAAZ,EAAG/2M,EAAS,uDAAH,EACvBilM,EAAU,GACdvwM,KAAK8F,MAAMsE,KAAI,SAACxD,GACV2E,MAAM3E,IAAsB,iBAAPA,EACvB2pM,EAAQptM,KAAKyD,GAEb2pM,EAAQptM,KAAKyD,EAAIwpB,OAAOiyL,EAAY/2M,OAGxC,IAAIioM,EAAKvzM,KAAK2hN,qBAAqBpR,EAASvwM,KAAKu4M,QACjD,OAAOhF,IA5UX,kCAqV0C,IAA9B8O,EAA8B,uDAAjB,EAAGC,EAAc,uDAAH,EAC/B/R,EAAU,GACdvwM,KAAK8F,MAAMsE,KAAI,SAACxD,GACV2E,MAAM3E,IAAsB,iBAAPA,EACvB2pM,EAAQptM,KAAKyD,GAEb2pM,EAAQptM,KAAKyD,EAAImrB,UAAUswL,EAAYC,OAG3C,IAAI/O,EAAKvzM,KAAK2hN,qBAAqBpR,EAASvwM,KAAKu4M,QACjD,OAAOhF,IA/VX,6BAuWI,IAAIhD,EAAU,GASd,OARAvwM,KAAK8F,MAAMsE,KAAI,SAACxD,GACV2E,MAAM3E,IAAsB,iBAAPA,EACvB2pM,EAAQptM,KAAKyD,GAEb2pM,EAAQptM,KAAKyD,EAAIuuB,WAGZn1B,KAAK2hN,qBAAqBpR,EAASvwM,KAAKu4M,UA/WrD,6BAyXuC,IAAhCiK,EAAgC,uDAApB,GAAIC,EAAgB,uDAAL,IAC1BlS,EAAU,GACdvwM,KAAK8F,MAAMsE,KAAI,SAACxD,GACd,GAAI2E,MAAM3E,IAAsB,iBAAPA,EACvB2pM,EAAQptM,KAAKyD,OACR,CACL,IACI87M,EAASF,EACTG,EAAW,GAAH,OAFC/7M,GAED,OAAe67M,GAAf,OAA0BC,GACtCnS,EAAQptM,KAAKw/M,OAGjB,IAAIpP,EAAKvzM,KAAK2hN,qBAAqBpR,EAASvwM,KAAKu4M,QACjD,OAAOhF,IAtYX,4BA8YI,IAAIhD,EAAU,GASd,OARAvwM,KAAK8F,MAAMsE,KAAI,SAACxD,GACV2E,MAAM3E,IAAsB,iBAAPA,EACvB2pM,EAAQptM,KAAKyD,GAEb2pM,EAAQptM,KAAKyD,EAAInI,WAGZuB,KAAK2hN,qBAAqBpR,EAASvwM,KAAKu4M,UAtZrD,2CA2ZuBpC,EAASoC,GAE5B,OADS,IAAI/H,IAAO2F,EAAS,CAAEzxH,QAAS6zH,EAAO1H,aAAc5qM,MAAOsyM,EAAOtyM,YA5Z/E,M,kHCHMipM,EAAQ,IAAIC,IAQLsS,EAAb,WACE,WAAYnuH,GAAQ,YAElB47G,EAAME,YAAY97G,EAAQ,OAAQ,oBAE9BA,EAAM,gBAAoBk9G,IAC5BxwM,KAAK2E,KAAO2uF,EAAM,KAAS/tF,OAE3BvF,KAAK2E,KAAO2uF,EAAM,KAGpBtzF,KAAK87B,OAASw3D,EAAM,QAAc,KAElCtzF,KAAK8mB,KAAO,CACV,EAAK,EACL,EAAK,EACL,EAAK,EACL,EAAK,EACL,EAAK,EACL,EAAK,EACL,EAAK,EACL,IAAK,GAGP9mB,KAAK4iN,YAAc,CAAE,UAAW,UAAW,iBAE3C5iN,KAAK6iN,YAAc,CAAE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAClG7iN,KAAK8iN,WAAa,CAAE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OA3BlE,mDAoCI,IAAIC,EAAgB,KAChB/iN,KAAK87B,SACPinL,EAAgB/iN,KAAKgjN,mBAGvBhjN,KAAKijN,UAAY,GAEjB,IAAK,IAAIvkN,EAAI,EAAGA,EAAIsB,KAAK2E,KAAKlG,OAAQC,IAAK,CAEzC,IAAIwkN,EAAcljN,KAAK2E,KAAKjG,GAE5B,GAAIsB,KAAK87B,SAAW97B,KAAK4iN,YAAYlmH,SAAS18F,KAAK87B,QAAS,CAE1D,IAAIqnL,EAAoBnjN,KAAKojN,eAAeF,EAAaH,GACrDM,EAAY,IAAI3tL,KAAKytL,GAEzBnjN,KAAKsjN,eAAeD,GAEpBrjN,KAAKijN,UAAU9/M,KAAKkgN,QAEf,GAAIrjN,KAAKujN,aAAaL,GAAc,CAEzC,IAAIM,EAAap+G,SAAS89G,GACtBG,EAAY,IAAI3tL,KAAK8tL,GAEzBxjN,KAAKsjN,eAAeD,GACpBrjN,KAAKijN,UAAU9/M,KAAKkgN,OACf,CACL,IAAIA,EAAY,IAAI3tL,KAAKwtL,GAEzBljN,KAAKsjN,eAAeD,GACpBrjN,KAAKijN,UAAU9/M,KAAKkgN,OAnE5B,qCA+EiBvN,EAAMh6K,GAEnB,IAAIonL,EAAc,GAEd7O,EAAW,EAGf,IAAK,IAAIpuM,KAAS61B,EAAQ,CAExB,IAAIp8B,EAAQo8B,EAAO71B,GAEN,GAATA,EACFi9M,GAAepN,EAAKzxM,MAAM,EAAG3E,GAEpBuG,EAAQ,EAEjBi9M,GAAe,IAAMpN,EAAKzxM,MAAMgwM,EAAUA,EAAW30M,GACnC,GAATuG,EACTi9M,GAAe,IAAMpN,EAAKzxM,MAAMgwM,EAAUA,EAAW30M,GAC5CuG,EAAQ,GAAKA,GAAS,IAC/Bi9M,GAAe,IAAMpN,EAAKzxM,MAAMgwM,EAAUA,EAAW30M,IAGvD20M,GAAY30M,EAGd,OAAOwjN,IAzGX,wCAiHI,IAAIO,EAAczjN,KAAK87B,OAAOxsB,MAAM,IAEhCvQ,EAAOiB,KAUX,OATkByjN,EAAY33L,QAAO,SAAUvsB,GAC7C,OAAO2vM,EAAM+C,gBAAgBlzM,EAAK+nB,KAAMvnB,MAGX6K,KAAI,SAAUxD,GAC3C,OAAO7H,EAAK+nB,KAAKlgB,QAzHvB,mCAoIes8M,GAEX,IAAIM,EAAap+G,SAAS89G,GACtBQ,EAAax3M,OAAOs3M,GAExB,QAAIj4M,MAAMi4M,IAAgBE,EAAWjlN,OAASykN,EAAYzkN,UAzI9D,qCAoJiBklN,GAEb,GAAoC,gBAAhCA,EAAcC,eAChB,MAAM,IAAI/9M,MAAM,iDAvJtB,iCAgKa6wF,GAET,IAAI/xF,EAAO3E,KAAKijN,UAAU74M,KAAI,SAAUu5M,GAEtC,OAAOjtH,EAASitH,MAMlB,OAFa,IAAInT,IAAO7rM,EAAOA,KAxKnC,8BAuLI,OAJa3E,KAAK6jN,YAAW,SAAUF,GACrC,OAAOA,EAAcG,gBApL3B,6BAkMI,OAJa9jN,KAAK6jN,YAAW,SAAUF,GACrC,OAAOA,EAAcI,gBA/L3B,4BA6MI,OAJa/jN,KAAK6jN,YAAW,SAAUF,GACrC,OAAOA,EAAcK,cA1M3B,6BA0NI,OAJahkN,KAAK6jN,YAAW,SAAUF,GACrC,OAAOA,EAAcM,mBAvN3B,mCAmOI,IAAIllN,EAAOiB,KAKX,OAJaA,KAAK6jN,YAAW,SAAUF,GACrC,OAAO5kN,EAAK8jN,YAAYc,EAAcG,iBArO5C,iCAgPI,IAAI/kN,EAAOiB,KAKX,OAJaA,KAAK6jN,YAAW,SAAUF,GACrC,OAAO5kN,EAAK+jN,WAAWa,EAAcK,eAlP3C,iCAiQI,OAJahkN,KAAK6jN,YAAW,SAAUF,GACrC,OAAOA,EAAcO,eA9P3B,gCA6QI,OAJalkN,KAAK6jN,YAAW,SAAUF,GACrC,OAAOA,EAAcQ,kBA1Q3B,gCAyRI,OAJankN,KAAK6jN,YAAW,SAAUF,GACrC,OAAOA,EAAcS,oBAtR3B,KA+RaC,EAAc,SAAC/wH,GAE1B,IAAIkuH,EAAa,IAAIC,EAAWnuH,GAGhC,OAFAkuH,EAAWE,eAEJF,I,mIC3SH/lM,EAAS,I,QAAImzL,GAENO,EAAb,+EAES5wM,EAAK0H,GAKV,OAJc1H,EAAIutB,QAAO,SAAUllB,EAAKlI,GACtC,OAAOA,GAAKuH,OAJlB,mCAWe1H,EAAK0H,GAKhB,OAJc1H,EAAIutB,QAAO,SAAUllB,EAAKlI,GACtC,OAAQuH,EAAMy2F,SAASh+F,QAb7B,kCAoBcgB,GACV,MAAwB,iBAAVA,GAAsBA,aAAiBwM,SArBzD,kCAyBcxM,GACV,MAAwB,iBAAVA,GAAsB8L,SAAS9L,KA1BjD,kCA8BcA,GACV,OAAOA,GAA0B,WAAjB,IAAOA,IAAsBA,EAAM6C,aAA0C,WAA3B7C,EAAM6C,YAAY+B,OA/BxF,gCAmCY5E,GACR,OAAiB,OAAVA,IApCX,qCAwCiBA,GACb,YAAwB,IAAVA,IAzClB,yCA8EqBoG,EAAOye,EAAG+/L,GAC3B,IAAIngN,EAAI2B,EAAMrH,OAEd,GAAI8lB,EAAI,GAAKA,EAAIpgB,EACf,MAAM,IAAIylI,WAAW,gDAEvB,GACE06E,GACAngN,IAAMogB,GAAK,EAAI,GAAK,GAAKre,KAAK0xC,IAAI,EAAG1xC,KAAK4C,KAAK5C,KAAK2Y,IAAQ,EAAJ0F,EAAO,MAC/D,CACK+/L,IAAax+M,EAAQlH,MAAMwC,UAAUiD,MAAMvC,KAAKgE,IACrD,IAAK,IAAIpH,EAAI,EAAGA,EAAI6lB,EAAG7lB,IAAK,CAE1B,IAAIoM,EAAKpM,EAAIwH,KAAKC,UAAYhC,EAAIzF,GAAM,EACpC+H,EAAIX,EAAMpH,GACdoH,EAAMpH,GAAKoH,EAAMgF,GACjBhF,EAAMgF,GAAKrE,EAGb,OADAX,EAAMrH,OAAS8lB,EACRze,EAIP,IAFA,IAAIy+M,EAAW,IAAIpgM,IAEZogM,EAAS//L,IAAKte,KAAKC,SAAWhC,EAAK,GAAGgE,KAAOoc,IAEpD,OAAO3lB,MAAMwC,UAAUgJ,IAAItI,KAAKyiN,GAAU,SAAC7lN,GAAD,OAAO8lN,WAAW9lN,QAvGlE,8BA4GU8N,EAAOkU,GAEb,OADYqsC,cAASvgD,EAAOkU,EAAKA,EAAMlU,EAAQ,GAAG8mM,cA7GtD,sCAkHkB1vM,EAAQrE,GACtB,QAAIyB,OAAOI,UAAUyC,eAAe/B,KAAK8B,EAAQrE,KAnHrD,uCA2HmBoF,GAIf,IAHA,IAAI+tM,EAAU/tM,EAAKlG,OACfgmN,EAAW9/M,EAAK,GAAGlG,OACnBimN,EAAW,GACNhmN,EAAI,EAAGA,GAAK+lN,EAAW,EAAG/lN,IAAK,CAEtC,IADA,IAAI06M,EAAW,GACNtuM,EAAI,EAAGA,EAAI4nM,EAAS5nM,IAC3BsuM,EAASj2M,KAAKwB,EAAKmG,GAAGpM,IAExBgmN,EAASvhN,KAAKi2M,GAEhB,OAAOsL,IAtIX,8CA6I0B//M,GACtB,IAAIisM,EAAY5vM,OAAO8lB,KAAKniB,GACxBgsM,EAAW3vM,OAAOuE,OAAOZ,GACzBggN,EAAgBhU,EAAS,GAAGlyM,OAEhCkyM,EAAS3kM,SAAQ,SAACrH,GAChB,GAAIA,EAAKlG,QAAUkmN,EACjB,MAAM9+M,MAAM,wDAOhB,IAJA,IAAI++M,EAAWjU,EAAS,GAAGlyM,OACvBgmN,EAAW7T,EAAUnyM,OACrBomN,EAAW,GAENnmN,EAAI,EAAGA,GAAKkmN,EAAW,EAAGlmN,IAAK,CAEtC,IADA,IAAIomN,EAAW,GACNh6M,EAAI,EAAGA,EAAI25M,EAAU35M,IAAK,CACjC,IAAIlI,EAAO+tM,EAAS7lM,GACpBg6M,EAAS3hN,KAAKP,EAAKlE,IAErBmmN,EAAS1hN,KAAK2hN,GAEhB,MAAO,CAAED,EAAUjU,KAnKvB,yCAuKqBjsM,GAAM,WACnButM,EAAW,GAQf,OAPAvtM,EAAKyF,KAAI,SAACxD,GACJ,EAAKm0M,YAAYn0M,GACnBsrM,EAAS/uM,KAAKkxB,KAAKC,UAAU1tB,IAE7BsrM,EAAS/uM,KAAT,UAAiByD,OAGdsrM,IAhLX,mDAmL+BvtM,EAAMogN,GACjC,GAAIA,EAAU,CACZ,IAAInJ,EAAW,GAQf,OAPAj3M,EAAKqH,SAAQ,SAACpF,QACO,IAARA,GAAuBA,GAAO6B,KAAmB,MAAP7B,EACnDg1M,EAASz4M,KAAK8yD,KAEd2lJ,EAASz4M,KAAKyD,MAGXg1M,EAEP,IAAIoJ,EAAW,GAYf,OAXArgN,EAAKqH,SAAQ,SAACpF,GACZ,IAAIg1M,EAAW,GACfh1M,EAAIoF,SAAQ,SAACi5M,QACQ,IAARA,GAAuBA,GAAOx8M,KAAmB,MAAPw8M,EACnDrJ,EAASz4M,KAAK8yD,KAEd2lJ,EAASz4M,KAAK8hN,MAGlBD,EAAS7hN,KAAKy4M,MAEToJ,IA3Mb,gCA+MYE,GACR,IACIC,EADAxT,EAAS,GAETyT,EAAc,GACdC,EAAgB,GAChBC,EAAiB,GACjBC,EAAe,GA2DnB,OAzDsB,GAAlBL,EAAQzmN,QACVkzM,EAAOxuM,KAAK,UAIZgiN,EADED,EAAQzmN,OAASgd,EAAO+pM,mBACpBN,EAAQzmN,OAAS,EAEjBgd,EAAO+pM,mBAAqB,EAEpCN,EAAQl5M,SAAQ,SAACi5M,EAAKtS,GACpB,IAAI53H,EAAQ43H,EA8BZ,GA7BkB,kBAAPsS,GACTI,EAAcliN,MAAK,GACnBiiN,EAAYjiN,MAAK,GACjBmiN,EAAeniN,MAAK,GACpBoiN,EAAapiN,MAAK,IACToI,MAAM05M,IAAsB,iBAAPA,GAC9BI,EAAcliN,MAAK,GACnBiiN,EAAYjiN,MAAK,GACjBmiN,EAAeniN,MAAK,GACpBoiN,EAAapiN,MAAK,IACRoI,MAAMlE,OAAO49M,KAavBI,EAAcliN,MAAK,GACnBiiN,EAAYjiN,MAAK,GACjBmiN,EAAeniN,MAAK,GACpBoiN,EAAapiN,MAAK,IAfd8hN,EAAI7gN,WAAWs4F,SAAS,MAC1B2oH,EAAcliN,MAAK,GACnBiiN,EAAYjiN,MAAK,GACjBmiN,EAAeniN,MAAK,GACpBoiN,EAAapiN,MAAK,KAElBkiN,EAAcliN,MAAK,GACnBiiN,EAAYjiN,MAAK,GACjBmiN,EAAeniN,MAAK,GACpBoiN,EAAapiN,MAAK,IASlB43E,GAASoqI,EAAK,CAEhB,IAAMjjJ,EAAO,SAAC4F,GAAD,OAAwB,GAAXA,GAExB6pI,EADE2T,EAAevhM,KAAKm+C,GACb,SACAmjJ,EAActhM,KAAKm+C,GACnB,UACAkjJ,EAAYrhM,KAAKm+C,GACjB,QACAqjJ,EAAaxhM,KAAKm+C,GAClB,UAEA,gBAKRyvI,IAhRX,8BAmRUuT,GACN,IAAMnmN,EAAOiB,KACb,OAAIA,KAAK63M,cAAcqN,GACd,CAAEllN,KAAKylN,UAAUP,IAETA,EAAQ96M,KAAI,SAAC7L,GAC1B,OAAOQ,EAAK0mN,UAAUlnN,QAzR9B,+BAgSWoG,GACP,IAAIo5D,EAAS,IAAI55C,IAQjB,OANAxf,EAAKyF,KAAI,SAAUxD,GACjBm3D,EAAOv5C,IAAI5d,EAAI,OAGEhI,MAAM+D,KAAKo7D,KAvSlC,kCA6Scn6D,EAAQrE,EAAKmoB,GACvB,IAAK1mB,OAAOI,UAAUyC,eAAe/B,KAAK8B,EAAQrE,GAChD,MAAM,IAAIsG,MAAM6hB,KA/StB,oCAoTgBnpB,GACZ,MACmB,iBAAVA,EAAI,IACM,iBAAVA,EAAI,IACM,kBAAVA,EAAI,KAxTjB,mCAiUeA,GACX,IAAImnN,EAAU,GAId,OAHAnnN,EAAIyN,SAAQ,SAACi5M,EAAKvmN,GAChBgnN,EAAQT,GAAOvmN,KAEVgnN,IAtUX,kCA+UcnnN,GAAkC,IAA7BonN,IAA6B,yDAAVZ,EAAU,uCAC5C,GAAIA,EAAU,CACZ,IAAIa,EAAa,EACbC,EAAY,EAQhB,OAPAtnN,EAAIyN,SAAQ,SAACi5M,GACP59M,OAAOkE,MAAM05M,GACfW,GAA0B,EAE1BC,GAAwB,KAGxBF,EACKE,EAEAD,EAGT,IAAIE,EAAa,GAiBjB,OAhBAvnN,EAAIyN,SAAQ,SAAC+5M,GACX,IAAIH,EAAa,EACbC,EAAY,EAChBE,EAAQ/5M,SAAQ,SAACi5M,GACX59M,OAAOkE,MAAM05M,GACfW,GAA0B,EAE1BC,GAAwB,KAGxBF,EACFG,EAAW3iN,KAAK0iN,GAEhBC,EAAW3iN,KAAKyiN,MAGbE,IAjXb,+BAsXWvnN,EAAKwmN,GACZ,GAAIA,EAAU,CACZ,IAAMpnJ,EAASp/D,EAAI8F,QAAQwG,MAAK,SAAC9D,EAAGC,GAAJ,OAAUD,EAAIC,KACxCghE,EAAS9hE,KAAK8H,MAAM2vD,EAAOl/D,OAAS,GAE1C,OAAIk/D,EAAOl/D,OAAS,GAAM,GAChBk/D,EAAOqK,EAAS,GAAKrK,EAAOqK,IAAW,EAG1CrK,EAAOqK,GAEd,IAAI89I,EAAa,GAWjB,OAVAvnN,EAAI6L,KAAI,SAAC66M,GACP,IAAMtnJ,EAASsnJ,EAAI5gN,QAAQwG,MAAK,SAAC9D,EAAGC,GAAJ,OAAUD,EAAIC,KACxCghE,EAAS9hE,KAAK8H,MAAM2vD,EAAOl/D,OAAS,GAEtCk/D,EAAOl/D,OAAS,GAAM,EACxBqnN,EAAW3iN,MAAMw6D,EAAOqK,EAAS,GAAKrK,EAAOqK,IAAW,GAExD89I,EAAW3iN,KAAKw6D,EAAOqK,OAGpB89I,IA5Yb,6BAiZSvnN,GACL,IAEEG,EAFEsnN,EAAQ,GACVjrI,EAAQ,GAER2hD,EAAW,EASb,IAAKh+H,KAPLH,EAAIyN,SAAQ,SAACpF,GACXm0E,EAAMn0E,IAAQm0E,EAAMn0E,IAAQ,GAAK,EAC7Bm0E,EAAMn0E,GAAO81H,IACfA,EAAW3hD,EAAMn0E,OAIXm0E,EACJ/6E,KAAKiyM,gBAAgBl3H,EAAOr8E,IAC1Bq8E,EAAMr8E,KAAOg+H,GACfspF,EAAM7iN,KAAKkE,OAAO3I,IAIxB,OAAOsnN,IAraX,8BAyaUznN,GAAuB,IAAlBy1M,EAAkB,uDAAb,EAAG+Q,EAAU,uCAI7B,GAHI/Q,EAAK,IACPA,EAAK,GAEH+Q,EAAU,CACZ,IAAIxU,EAAU,GAKd,OAJAhyM,EAAI6L,KAAI,SAACxD,GACP2pM,EAAQptM,KAAKkE,OAAOT,EAAImZ,QAAQi0L,QAG3BzD,EAEP,IAAIuV,EAAa,GAQjB,OAPAvnN,EAAI6L,KAAI,SAAC67M,GACP,IAAI1V,EAAU,GACd0V,EAAQ77M,KAAI,SAACxD,GACX2pM,EAAQptM,KAAKkE,OAAOT,EAAImZ,QAAQi0L,QAElC8R,EAAW3iN,KAAKotM,MAEXuV,IA7bb,oCAkcgBlwK,GACZ,MAA0B,mBAAZA,IAnclB,gCAucYtqC,EAAKkB,EAAOkU,GACpB,IAAIwlM,EAAU,GAGd,SAASC,EAAMp/M,EAAGC,GAChB,OAAOd,KAAK8H,MAAM9H,KAAKC,UAAYa,EAAID,GAAKA,GAG9C,SAASq/M,EAAUx/M,EAAKrI,GACtB,IAAKA,EAAIm+F,SAAS91F,GAChB,OAAOA,EAKTw/M,EAFAx/M,EAAMu/M,EAAM35M,EAAOkU,GAEJniB,GAGjB,IAAK,IAAIG,EAAI,EAAGA,EAAI4M,EAAK5M,IAAK,CAC5B,IACI2nN,EAAYD,EADFD,EAAM35M,EAAOkU,GACQwlM,GACnCA,EAAQ/iN,KAAKkjN,GAGf,OAAOH,IA/dX,gDAke4B5yH,EAAQ+9G,GAGhC,IAFA,IAAIvqL,EAAO9lB,OAAO8lB,KAAKwsE,GACnB/2E,EAAO,GACF7d,EAAI,EAAGA,EAAIooB,EAAKroB,OAAQC,IAC3B2yM,EAAc30G,SAAS51E,EAAKpoB,IAC9B6d,EAAKpZ,MAAK,GAEVoZ,EAAKpZ,MAAK,GAId,GAAIoZ,EAAKwH,MADM,SAAC+jD,GAAD,OAAwB,GAAXA,KAE1B,MAAMjiE,MAAM,mGAAD,OAC0FwrM,EAD1F,QA9ejB,wCAqfoB9yM,EAAKg7C,GACrB,IAAIg3J,EAAU,GACd,OAAW,GAAPh3J,GACFh7C,EAAI6L,KAAI,SAACk8M,GACP,IAAI1K,EAAW,GACf0K,EAAUl8M,KAAI,SAACxD,GACF,GAAPA,EACFg1M,EAASz4M,MAAK,GAEdy4M,EAASz4M,MAAK,MAGlBotM,EAAQptM,KAAKy4M,MAERrL,IAEPhyM,EAAI6L,KAAI,SAACxD,GACI,GAAPA,EACF2pM,EAAQptM,MAAK,GAEbotM,EAAQptM,MAAK,MAGVotM,KA5gBb,4BAghBQ5rM,GACJ,IAAI4hN,EAAc5hN,EAEds/C,EAAOsiK,EAAYtiK,OAKvB,OAJmBsiK,EAAYvuK,IAAIiM,GAAMrM,IAAI,GAChBqM,OACTl7C,SAthBxB,8BA2hBUsW,EAAKqwL,GAGX,IAFA,IAAI8W,EAAY,GAEP9nN,EAAI,EAAGA,EAAI2gB,EAAK3gB,IAAK,CAE5B,IADA,IAAIiyM,EAAW/xM,MAAM8wM,GACZ5kM,EAAI,EAAGA,EAAI4kM,EAAQ5kM,IAC1B6lM,EAAS7lM,GAAK,EAEhB07M,EAAUrjN,KAAKwtM,GAEjB,OAAO6V,IAriBX,gCAwiBYl7M,EAAKxF,GAKb,IAHA,IAAIgF,EACF9E,EAEOtH,EAAI,EAAGA,EAAI4M,EAAK5M,IACvBoM,EAAI5E,KAAK8H,MAAM9H,KAAKC,UAAYL,EAAMrH,OAASC,IAAMA,EAGrDsH,EAAOF,EAAMpH,GACboH,EAAMpH,GAAKoH,EAAMgF,GACjBhF,EAAMgF,GAAK9E,EAGb,OAAOF,EAAMzB,MAAM,EAAGiH,KAtjB1B,6BAyjBS/M,GAAuB,IAAlBsiN,IAAkB,yDACxBljJ,EAASp/D,EAAI8F,QACjB,OAAOs5D,EAAO9yD,MAAK,SAAC9D,EAAGC,GACrB,OAAI65M,EACe,iBAAN95M,GAA+B,iBAANC,EAC3BD,EAAE41B,aAAe31B,EAAE21B,aAEnB51B,EAAIC,EAGI,iBAAND,GAA+B,iBAANC,EAC3BA,EAAE21B,aAAe51B,EAAE41B,aAEnB31B,EAAID,OAtkBrB,yCAilBI,OAJgB,IAAIoc,SAClB,sDAGKkN,KAjlBX,sCAylBI,OAJa,IAAIlN,SACf,qDAGKsjM,KAzlBX,6CA4lByBxiN,EAAKkwM,GAC1B,GAAqB,UAAjBlwM,EAAI0tM,OAAO,GACb,MAAM9rM,MAAM,kDAAD,OACyCsuM,EADzC,iBA9lBjB,mCAwmBe51M,GAEX,OADaA,EAAIutB,QAAO,SAACllB,GAAD,OAAU2E,MAAM3E,IAAsB,iBAAPA,OAzmB3D,6CAinByBrI,GAQrB,OAPaA,EAAI6L,KAAI,SAACxD,GACpB,OAAI2E,MAAM3E,GACD,KAEAA,OAtnBf,sCA4nBkBrI,GACd,IAAImoN,EAAW,GACXC,EAAW,GAaf,IAAK,IAAIpnN,KAXThB,EAAIyN,SAAQ,SAACpF,EAAKX,GACZW,KAAO8/M,GACTA,EAAS9/M,GAAT,OAA0B,EAC1B8/M,EAAS9/M,GAAT,MAAuBzD,KAAK8C,KAE5BygN,EAAS9/M,GAAO,GAChB8/M,EAAS9/M,GAAT,MAAyB,EACzB8/M,EAAS9/M,GAAT,MAAyB,CAAEX,OAIfygN,EACVA,EAASnnN,GAAT,OAA0B,IAC5BonN,EAASpnN,GAAO,GAChBonN,EAASpnN,GAAT,MAAyBmnN,EAASnnN,GAAT,MACzBonN,EAASpnN,GAAT,MAAyBmnN,EAASnnN,GAAT,OAI7B,OAAOonN,IAnpBX,2CA8pBuBC,EAAMjoN,EAAM8G,GAC/B,IAAI26M,EAAawG,EAAKx8M,KAAI,SAACihB,EAAMplB,GAC/B,MAAO,CAAEtH,EAAKsH,GAAQolB,MAQxB,MANa,UAAT5lB,EACF26M,EAAWv1M,OAEXu1M,EAAWv1M,MAAK,kBAAGg8M,EAAH,+BAA+BA,KAG1CzG,EAAWh2M,KAAI,sCAxqB1B,M,+dCca08M,EAAQ,+BAAG,WAAO1uE,GAAP,8FAAe2uE,EAAf,+BAAyB,GACzCv6M,EAAeu6M,EAAfv6M,MAAOkU,EAAQqmM,EAARrmM,IACP03H,EAAOh+G,WAAW,UAAYg+G,EAAOh+G,WAAW,SAAWg+G,EAAOh+G,WAAW,QAF7D,sBAGd,IAAIv0B,MAAM,iDAHI,cAKlBmhN,EAAS,GALS,SAMhBriN,WAASyzI,EAAQ2uE,GACpB93E,KAAKziI,GACLwiI,KAAKtuH,GACLmuH,cAAa,SAACxvH,GACb,OAAO2nM,EAAO7jN,KAAKkc,MAVD,cAYhByyL,EAAK,IAAIhC,IAAUkX,GAZH,kBAaflV,GAbe,2CAAH,sDAqBRmV,EAAS,+BAAG,WAAO7uE,GAAP,2FACPx7H,MAAMw7H,EAAQ,CAAEjyG,OAAQ,QADjB,cACnB/d,EADmB,gBAENA,EAAIue,OAFE,cAEnBA,EAFmB,OAGnBmrK,EAAK,IAAIhC,IAAUnpK,GAHA,kBAIhBmrK,GAJgB,2CAAH,sDAsBToV,EAAU,+BAAG,WAAO9uE,GAAP,sHAAe2uE,EAAf,+BAAyB,GAC3CI,EAAoCJ,EAApCI,MAAOC,EAA6BL,EAA7BK,aAAcC,EAAeN,EAAfM,WAEtBD,IAEHA,EAAe,GAEZC,IAEHA,EAAaD,EAAe,GATN,kBAYNxqM,MAAMw7H,EAAQ,CAAEjyG,OAAQ,QAZlB,cAYlB/d,EAZkB,iBAaVA,EAAIob,cAbM,QAuBtB,IAVApb,EAbsB,OActBA,EAAM,IAAIld,WAAWkd,GACrBk/L,EAAWC,SAAUn/L,EAAK,CAAE3E,KAAM,UAI5B+jM,EAAYF,EAASG,OAAON,GAASG,EAASI,WAAW,IAC3DrwJ,EAAQkwJ,uBAAwBC,EAAU,SAC1C3W,EAAe,GACjBlsM,EAAO,GACAgjN,EAAIP,EAAe,EAAGO,GAAKtwJ,EAAMjhC,EAAEnvB,IAAK0gN,EAAG,CAElD,IADIzN,EAAW,GACN0N,EAAIvwJ,EAAMhtD,EAAE8C,EAAGy6M,GAAKvwJ,EAAMjhC,EAAEjpB,IAAKy6M,EACpCC,OADuC,EAIvCF,GAAKP,EAAe,IACtBS,EAAWN,sBAAuB,CAAEp6M,EAAGy6M,EAAG3gN,EAAGmgN,EAAe,IACxDI,EAAUK,IACZhX,EAAa1tM,KAAKqkN,EAAUK,GAAU5nM,IAKtC0nM,GAAKN,EAAa,IACpBQ,EAAWN,sBAAuB,CAAEp6M,EAAGy6M,EAAG3gN,EAAG0gN,IACzCH,EAAUK,IACZ3N,EAAS/2M,KAAKqkN,EAAUK,GAAU5nM,IAIpC0nM,GAAKN,EAAa,GACpB1iN,EAAKxB,KAAK+2M,GA7CQ,OAgDlBpI,EAAK,IAAIhC,IAAUnrM,EAAM,CAAE+/E,QAASmsH,IAhDlB,kBAiDfiB,GAjDe,wCAmDhB,IAAIjsM,MAAJ,MAnDgB,0DAAH,sD,iEC3DjBqpM,EAAQ,IAAIC,IACL5lF,EAAb,WAEE,WAAYj2B,GAAQ,WAqBlB,GArBkB,YAGlB47G,EAAME,YAAY97G,EAAQ,QAC1B47G,EAAME,YAAY97G,EAAQ,SAC1B47G,EAAME,YAAY97G,EAAQ,MAErB47G,EAAM+C,gBAAgB3+G,EAAQ,OAIjCtzF,KAAK8nN,IAAMx0H,EAAM,KAHjBtzF,KAAK8nN,IAAM,QACXx0H,EAAM,IAAU,SAKlBtzF,KAAK0/C,KAAO,KACZ1/C,KAAK2/C,MAAQ,KACb3/C,KAAK+nN,GAAK,OAKLz0H,EAAM,gBAAoBw8G,KAAex8G,EAAM,iBAAqBw8G,KAIvE,MAAM,IAAIjqM,MAAM,oDAGlB,GANE7F,KAAK0/C,KAAO4zC,EAAM,KAClBtzF,KAAK2/C,MAAQ2zC,EAAM,OAKjB10F,MAAMC,QAAQy0F,EAAM,IAGtB,MAAM,IAAIztF,MAAM,2BAGlB,GALE7F,KAAK+nN,GAAKz0H,EAAM,IAVH,CAAE,QAAS,QAAS,OAAQ,SAe9BoJ,SAASpJ,EAAM,KAI1B,MAAM,IAAIztF,MAAJ,UAAaytF,EAAM,IAAnB,6CAFNtzF,KAAK8nN,IAAMx0H,EAAM,IAKnBtzF,KAAKgoN,eAAiB,GACtBhoN,KAAKioN,gBAAkB,GAGvB,IAAK,IAAIvpN,EAAI,EAAGA,EAAIsB,KAAK+nN,GAAGtpN,OAAQC,IAElC,GAAIsB,KAAK0/C,KAAKglC,QAAQgY,SAAS18F,KAAK+nN,GAAGrpN,KAAOsB,KAAK2/C,MAAM+kC,QAAQgY,SAAS18F,KAAK+nN,GAAGrpN,IAAK,CAErF,IAAIwpN,EAAaloN,KAAK0/C,KAAKglC,QAAQrzD,QAAQrxB,KAAK+nN,GAAGrpN,IAC/CypN,EAAcnoN,KAAK2/C,MAAM+kC,QAAQrzD,QAAQrxB,KAAK+nN,GAAGrpN,IAErDsB,KAAKgoN,eAAe7kN,KAAK+kN,GACzBloN,KAAKioN,gBAAgB9kN,KAAKglN,GAI9BnoN,KAAKooN,cAAgB,GACrBpoN,KAAKqoN,eAAiB,GAYtB,IAVA,IAAIC,EAActoN,KAAK0/C,KAAKn6C,OACxBgjN,EAAevoN,KAAK2/C,MAAMp6C,OA7DZ,WAsET7G,GAKP,IAJA,IAAI8pN,EAAaF,EAAY5pN,GACzB+pN,EAAuB,GAGlB39M,EAAI,EAAGA,EAAI,EAAKk9M,eAAevpN,OAAQqM,IAAK,CACnD,IAAI7E,EAAQ,EAAK+hN,eAAel9M,GAEhC29M,EAAqBtlN,KAAKqlN,EAAWviN,IAGvC,IAAIyiN,EAAgBD,EAAqBz4M,KAAK,KAE1CjR,EAAO,EAEP4pN,EAAoBH,EAAW18L,QAAO,SAAUllB,EAAKX,GACvD,OAAQlH,EAAKipN,eAAetrH,SAASz2F,MAMnCipM,EAAM+C,gBAAgB,EAAKmW,cAAeM,GAC5C,EAAKN,cAAcM,GAAevtG,QAAQh4G,KAAKwlN,GAE/C,EAAKP,cAAcM,GAAiB,CAClCvtG,QAAS,CAACwtG,GACVC,YAAaH,IA3BV/pN,EAAI,EAAGA,EAAI4pN,EAAY7pN,OAAQC,IAAK,EAApCA,GAgCT,IAtGkB,eAsGTA,GAIP,IAHA,IAAImqN,EAAcN,EAAa7pN,GAC3BoqN,EAAwB,GAEnBh+M,EAAI,EAAGA,EAAI,EAAKm9M,gBAAgBxpN,OAAQqM,IAAK,CACpD,IAAI7E,EAAQ,EAAKgiN,gBAAgBn9M,GAEjCg+M,EAAsB3lN,KAAK0lN,EAAY5iN,IAEzC,IAAI8iN,EAAiBD,EAAsB94M,KAAK,KAE5CjR,EAAO,EACPiqN,EAAqBH,EAAY/8L,QAAO,SAAUllB,EAAKX,GACzD,OAAQlH,EAAKkpN,gBAAgBvrH,SAASz2F,MAGpCipM,EAAM+C,gBAAgB,EAAKoW,eAAgBU,GAC7C,EAAKV,eAAeU,GAAgB5tG,QAAQh4G,KAAK6lN,GAEjD,EAAKX,eAAeU,GAAkB,CACpC5tG,QAAS,CAAC6tG,GACVJ,YAAaE,IArBVpqN,EAAI,EAAGA,EAAI6pN,EAAa9pN,OAAQC,IAAK,EAArCA,GA4BTsB,KAAKipN,mBAEL,IAAItkN,EAAO,KACX,OAAQ3E,KAAK8nN,KAEb,IAAK,QACHnjN,EAAO3E,KAAKkpN,QACZ,MACF,IAAK,QACHvkN,EAAO3E,KAAKmpN,QACZ,MACF,IAAK,OACHxkN,EAAO3E,KAAKopN,aACZ,MACF,IAAK,QACHzkN,EAAO3E,KAAKqpN,cAOd,OAFS,IAAIvZ,IAAUnrM,EAAOA,EAAM,CAAE+/E,QAAS1kF,KAAK0kF,UAxJxD,uDA+JI,IAAI3lF,EAAOiB,KACXjB,EAAKuqN,SAAWvqN,EAAK2gD,KAAKglC,QAAQ54D,QAAO,SAACllB,EAAKX,GAC7C,OAAQlH,EAAKipN,eAAetrH,SAASz2F,MAGvClH,EAAKwqN,UAAYxqN,EAAK4gD,MAAM+kC,QAAQ54D,QAAO,SAACllB,EAAKX,GAC/C,OAAQlH,EAAKkpN,gBAAgBvrH,SAASz2F,MAGxClH,EAAK2lF,QAAL,IAAoB3lF,EAAKgpN,IACzB,IAAIyB,EAAmB,GAEnBC,EAAc,IAAK1qN,EAAKuqN,UAC5BG,EAAYtmN,KAAZ,MAAAsmN,EAAW,IAAS1qN,EAAKwqN,YAEzB,IAAK,IAAI7qN,EAAI,EAAGA,EAAI+qN,EAAYhrN,OAAQC,IAAK,CAE3C,IAAI4rJ,EAAMm/D,EAAY/qN,GACtB,GAAIwwM,EAAM+C,gBAAgBuX,EAAkBl/D,GAAM,CAEhD,IAAIqlD,EAAW,GAAH,OAAMrlD,EAAN,YAAak/D,EAAiBl/D,IAC1CvrJ,EAAK2lF,QAAQvhF,KAAKwsM,GAElB6Z,EAAiBl/D,IAAQ,OAEzBvrJ,EAAK2lF,QAAQvhF,KAAKmnJ,GAClBk/D,EAAiBl/D,GAAO,KAzLhC,8BA8LU,MAEFxjI,EAAO9lB,OAAO8lB,KAAK9mB,KAAKooN,eAQ5B,OANA,EAAAthM,GAAK3jB,KAAL,YAAanC,OAAO8lB,KAAK9mB,KAAKqoN,kBAE9BvhM,EAAOloB,MAAM+D,KAAK,IAAIwhB,IAAI2C,IAEf9mB,KAAK0pN,MAAM5iM,KAtM1B,8BA8MI,IAAI6iM,EAAY3oN,OAAO8lB,KAAK9mB,KAAKooN,eAC7BwB,EAAa5oN,OAAO8lB,KAAK9mB,KAAKqoN,gBAE9BvhM,EAAO6iM,EAAU79L,QAAO,SAACllB,GAC3B,OAAOgjN,EAAWltH,SAAS91F,MAK7B,OAFW5G,KAAK0pN,MAAM5iM,KArN1B,mCA4NI,IAAIA,EAAO9lB,OAAO8lB,KAAK9mB,KAAKooN,eAG5B,OAFWpoN,KAAK0pN,MAAM5iM,KA7N1B,oCAoOI,IAAIA,EAAO9lB,OAAO8lB,KAAK9mB,KAAKqoN,gBAG5B,OAFWroN,KAAK0pN,MAAM5iM,KArO1B,4BA0OQA,GAIJ,IAFA,IAAIniB,EAAO,GAEFjG,EAAI,EAAGA,EAAIooB,EAAKroB,OAAQC,IAAK,CACpC,IAAIa,EAAMunB,EAAKpoB,GAMf,GAJgBa,EAAI+P,MAAM,KAAKwc,QAAO,SAACllB,GACrC,MAAc,IAAPA,KAGLsoM,EAAM+C,gBAAgBjyM,KAAKooN,cAAe7oN,GAK5C,IAJA,IAAIsqN,EAAW7pN,KAAKooN,cAAc7oN,GAAK47G,QACnC2uG,EAAY9pN,KAAKooN,cAAc7oN,GAAKqpN,YAG/BmB,EAAS,EAAGA,EAASF,EAASprN,OAAQsrN,IAAU,CAEvD,IAAIC,EAAeH,EAASE,GAE5B,GAAI7a,EAAM+C,gBAAgBjyM,KAAKqoN,eAAgB9oN,GAI7C,IAFA,IAAI0qN,EAAYjqN,KAAKqoN,eAAe9oN,GAAK47G,QAEhC+uG,EAAM,EAAGA,EAAMD,EAAUxrN,OAAQyrN,IAAO,CAE/C,IAAIC,EAAgBF,EAAUC,GAG1BE,EAAaN,EAAUzlN,MAAM,GACjC+lN,EAAWjnN,KAAX,MAAAinN,EAAU,IAASJ,IACnBI,EAAWjnN,KAAX,MAAAinN,EAAU,IAASD,IAGnBxlN,EAAKxB,KAAKinN,OAEP,CAGL,IAFA,IAAIC,EAAYzrN,MAAMoB,KAAKupN,UAAU9qN,QAE5BC,EAAI,EAAGA,EAAIsB,KAAKupN,UAAU9qN,OAAQC,IACzC2rN,EAAU3rN,GAAKu3D,IAGjB,IAAIm0J,EAAaN,EAAUzlN,MAAM,GACjC+lN,EAAWjnN,KAAX,MAAAinN,EAAU,IAASJ,IACnBI,EAAWjnN,KAAX,MAAAinN,EAAmBC,GACnB1lN,EAAKxB,KAAKinN,SAQd,IAHA,IAAIH,EAAYjqN,KAAKqoN,eAAe9oN,GAAK47G,QACrC2uG,EAAY9pN,KAAKqoN,eAAe9oN,GAAKqpN,YAEhClqN,EAAI,EAAGA,EAAIurN,EAAUxrN,OAAQC,IAAK,CAMzC,IAJA,IAAIyrN,EAAgBF,EAAUvrN,GAE1B2rN,EAAYzrN,MAAMoB,KAAKspN,SAAS7qN,QAE3BqM,EAAI,EAAGA,EAAIu/M,EAAU5rN,OAAQqM,IACpCu/M,EAAUv/M,GAAKmrD,IAGjB,IAAIm0J,EAAaN,EAAUzlN,MAAM,GACjC+lN,EAAWjnN,KAAX,MAAAinN,EAAmBC,GACnBD,EAAWjnN,KAAX,MAAAinN,EAAU,IAASD,IACnBxlN,EAAKxB,KAAKinN,IAIhB,OAAOzlN,MAjTX,KAiUa2lN,EAAQ,SAACh3H,GAEpB,OADY,IAAIi2B,EAAMj2B,I,UClUlB47G,EAAQ,IAAIC,IAELob,EAAb,4EAOM5lN,GACF,IAAI6lN,EAAU,KACd,GAAI5rN,MAAMC,QAAQ8F,GAChB6lN,EAAU7lN,MACL,MAAIA,aAAgB6rM,KAGzB,MAAM,IAAI3qM,MAAM,qCAFhB2kN,EAAU7lN,EAAKY,OAKjB,IAAIk0M,EAAW,IAAIt1L,IAAIqmM,GACvBxqN,KAAK4nF,MAAQhpF,MAAM+D,KAAK82M,GAExB,IAAI16M,EAAOiB,KACPyqN,EAAcD,EAAQpgN,KAAI,SAAC3D,GAC7B,OAAO1H,EAAK6oF,MAAMv2D,QAAQ5qB,MAG5B,OAAO,IAAI+pM,IAAOia,KAzBtB,gCAiCY9lN,GACR,IAAI6lN,EAAU,KACd,GAAI5rN,MAAMC,QAAQ8F,GAChB6lN,EAAU7lN,MACL,MAAIA,aAAgB6rM,KAGzB,MAAM,IAAI3qM,MAAM,qCAFhB2kN,EAAU7lN,EAAKY,OAKjB,IAAIxG,EAAOiB,KACPyqN,EAAcD,EAAQpgN,KAAI,SAAC3D,GAC7B,OAAO1H,EAAK6oF,MAAMv2D,QAAQ5qB,MAE5B,OAAO,IAAI+pM,IAAOia,OA/CtB,KAmDaC,EAAb,4EAEM/lN,GACF,IAAI6lN,EAAU,KACd,GAAI5rN,MAAMC,QAAQ8F,GAChB6lN,EAAU7lN,MACL,MAAIA,aAAgB6rM,KAGzB,MAAM,IAAI3qM,MAAM,yBAFhB2kN,EAAU7lN,EAAKY,OAKjB,IAAIk0M,EAAW,IAAIt1L,IAAIqmM,GACvBxqN,KAAK4nF,MAAQhpF,MAAM+D,KAAK82M,GAIxB,IAFA,IAAIkR,EAAczb,EAAM0b,QAAQJ,EAAQ/rN,OAAQuB,KAAK4nF,MAAMnpF,QAElDC,EAAI,EAAGA,EAAI8rN,EAAQ/rN,OAAQC,IAAK,CAEvC,IAAIo3M,EAAO0U,EAAQ9rN,GACfmsN,EAAa7qN,KAAK4nF,MAAMv2D,QAAQykL,GACpC6U,EAAYjsN,GAAGmsN,GAAc,EAG/B,OAAO,IAAI/a,IAAU6a,EAAa,CAAEjmI,QAAS1kF,KAAK4nF,UAxBtD,gCA4BYjjF,GACR,IAAI6lN,EAAU,KAEd,GAAI5rN,MAAMC,QAAQ8F,GAChB6lN,EAAU7lN,MACL,MAAIA,aAAgB6rM,KAGzB,MAAM,IAAI3qM,MAAM,yBAFhB2kN,EAAU7lN,EAAKY,OAOjB,IAFA,IAAIolN,EAAczb,EAAM0b,QAAQJ,EAAQ/rN,OAAQuB,KAAK4nF,MAAMnpF,QAElDC,EAAI,EAAGA,EAAI8rN,EAAQ/rN,OAAQC,IAAK,CACvC,IAAIo3M,EAAO0U,EAAQ9rN,GACfmsN,EAAa7qN,KAAK4nF,MAAMv2D,QAAQykL,GACpC6U,EAAYjsN,GAAGmsN,GAAc,EAG/B,OAAO,IAAI/a,IAAU6a,EAAa,CAAEjmI,QAAS1kF,KAAK4nF,YA/CtD,KCpDMsnH,EAAQ,IAAIC,IAEL2b,EAAb,4EAMMnmN,GACF,IAAI4hN,EAAc,KAClB,GAAI3nN,MAAMC,QAAQ8F,GAChB4hN,GAAc1iM,YAAOlf,OAChB,MAAIA,aAAgBmrM,KAAanrM,aAAgB6rM,KAMtD,MAAM,IAAI3qM,MAAM,qDALhB,GAAIlB,EAAKgtM,OAAOj1G,SAAS,UACvB,MAAM72F,MAAM,0DAEd0gN,GAAc1iM,YAAOlf,EAAKY,QAK5BvF,KAAK0G,IAAM6/M,EAAY7/M,IAAI,GAC3B1G,KAAKwG,IAAM+/M,EAAY//M,IAAI,GAE3B,IAAIikN,EAAclE,EACfvuK,IAAIh4C,KAAKwG,KACTkuC,IAAI10C,KAAK0G,IAAIsxC,IAAIh4C,KAAKwG,MACtB8sM,YAEH,OAAI3uM,aAAgB6rM,KAAU5xM,MAAMC,QAAQ8F,GACnC,IAAI6rM,IAAOia,GAEX,IAAI3a,IAAU2a,KA9B3B,gCAuCY9lN,GACR,GAAIA,aAAgB6rM,IAAQ,CAC1B,GAAI7rM,EAAKgtM,OAAOj1G,SAAS,UACvB,MAAM72F,MAAM,0DAEd,IACI4kN,GADc5mM,YAAOlf,EAAKY,QAE3ByyC,IAAIh4C,KAAKwG,KACTkuC,IAAI10C,KAAK0G,IAAIsxC,IAAIh4C,KAAKwG,MACtB8sM,YACH,OAAO,IAAI9C,IAAOia,GACb,GAAI7rN,MAAMC,QAAQ8F,GAAO,CAC9B,IACI8lN,GADc5mM,YAAOlf,GAEtBqzC,IAAIh4C,KAAKwG,KACTkuC,IAAI10C,KAAK0G,IAAIsxC,IAAIh4C,KAAKwG,MACtB8sM,YACH,OAAIpE,EAAM2I,cAAclzM,GACf,IAAI6rM,IAAOia,GAEX,IAAI3a,IAAU2a,GAElB,GAAI9lN,aAAgBmrM,IAAW,CACpC,GAAInrM,EAAKgtM,OAAOj1G,SAAS,UACvB,MAAM72F,MAAM,0DAEd,IACI4kN,GADc5mM,YAAOlf,EAAKY,QAE3ByyC,IAAIh4C,KAAKwG,KACTkuC,IAAI10C,KAAK0G,IAAIsxC,IAAIh4C,KAAKwG,MACtB8sM,YACH,OAAO,IAAIxD,IAAU2a,GAErB,MAAM5kN,MAAM,4CAxElB,KA6EaklN,EAAb,4EAMMpmN,GACF,IAAI4hN,EAAc,KAClB,GAAI3nN,MAAMC,QAAQ8F,GAChB4hN,GAAc1iM,YAAOlf,OAChB,MAAIA,aAAgBmrM,KAAanrM,aAAgB6rM,KAMtD,MAAM,IAAI3qM,MAAM,qDALhB,GAAIlB,EAAKgtM,OAAOj1G,SAAS,UACvB,MAAM72F,MAAM,0DAEd0gN,GAAc1iM,YAAOlf,EAAKY,QAK5BvF,KAAK8zM,KAAMtiJ,aAAQ+0J,EAAa,GAAGriK,SAASn7C,OAC5C/I,KAAKikD,KAAOsiK,EAAYtiK,KAAK,GAC7B,IAAIwmK,EAAclE,EAAYvuK,IAAIh4C,KAAKikD,MAAMvP,IAAI10C,KAAK8zM,KAAKR,YAE3D,OAAI3uM,aAAgB6rM,KAAU5xM,MAAMC,QAAQ8F,GACnC,IAAI6rM,IAAQ7rM,EAAO8lN,GAEnB,IAAI3a,IAAWnrM,EAAO8lN,KA1BnC,gCA8BY9lN,GAKR,GAAIA,aAAgB6rM,IAAQ,CAC1B,GAAI7rM,EAAKgtM,OAAOj1G,SAAS,UACvB,MAAM72F,MAAM,0DAEd,IACI4kN,GADc5mM,YAAOlf,EAAKY,QACAyyC,IAAIh4C,KAAKikD,MAAMvP,IAAI10C,KAAK8zM,KAAKR,YAC3D,OAAO,IAAI9C,IAAOia,GACb,GAAI7rN,MAAMC,QAAQ8F,GAAO,CAC9B,IACI8lN,GADc5mM,YAAOlf,GACKqzC,IAAIh4C,KAAKikD,MAAMvP,IAAI10C,KAAK8zM,KAAKR,YAC3D,OAAIpE,EAAM2I,cAAclzM,GACf,IAAI6rM,IAAOia,GAEX,IAAI3a,IAAU2a,GAElB,GAAI9lN,aAAgBmrM,IAAW,CACpC,GAAInrM,EAAKgtM,OAAOj1G,SAAS,UACvB,MAAM72F,MAAM,0DAEd,IACI4kN,GADc5mM,YAAOlf,EAAKY,QACAyyC,IAAIh4C,KAAKikD,MAAMvP,IAAI10C,KAAK8zM,KAAKR,YAC3D,OAAO,IAAIxD,IAAU2a,GAErB,MAAM5kN,MAAM,4CA1DlB,KClFMqpM,EAAQ,IAAIC,IAYL6b,EAAb,WACE,WAAY13H,GA8BV,GA9BiB,YAEjBtzF,KAAK4M,OAAS,KAEVsiM,EAAM+C,gBAAgB3+G,EAAQ,SAChCtzF,KAAKwM,MAAQ8mF,EAAM,MAEnBtzF,KAAKwM,MAAQ,KAGX0iM,EAAM+C,gBAAgB3+G,EAAQ,OAChCtzF,KAAK0gB,IAAM4yE,EAAM,IAEjBtzF,KAAK0gB,IAAM,KAGTwuL,EAAM+C,gBAAgB3+G,EAAQ,UAChCtzF,KAAKirN,OAAS33H,EAAM,OAEpBtzF,KAAKirN,OAAS,KAGZ/b,EAAM+C,gBAAgB3+G,EAAQ,QAChCtzF,KAAKkrN,KAAO53H,EAAM,KAElBtzF,KAAKkrN,KAAO,IAGdlrN,KAAKmrN,UAAY,CAAE,IAAK,IAAK,IAAK,IAAK,IAAK,KAEpB,GAApBnrN,KAAKkrN,KAAKzsN,QACZ,IAAKuB,KAAKmrN,UAAUzuH,SAAS18F,KAAKkrN,MAChC,MAAM,IAAIrlN,MAAJ,uBAA0B7F,KAAKkrN,WAElC,CACL,IAAIE,EAAaprN,KAAKkrN,KAAK57M,MAAM,IAGjC,GAFAtP,KAAK4M,OAASw4F,SAASgmH,EAAW,IAClCprN,KAAKkrN,KAAOE,EAAW,IAClBprN,KAAKmrN,UAAUzuH,SAAS18F,KAAKkrN,MAChC,MAAM,IAAIrlN,MAAJ,uBAA0B7F,KAAKkrN,OAKzC,OADWlrN,KAAKq3D,MAAMr3D,KAAKwM,MAAOxM,KAAK0gB,IAAK1gB,KAAKirN,OAAQjrN,KAAK4M,QA5ClE,0CAiDQJ,EAAOkU,EAAKuqM,GAAsB,WAAdr+M,EAAc,uDAAL,KAE7By+M,EAAa,KACbC,EAAW,KACXC,EAAc,KACdC,EAAY,KAChB,GAAIh/M,GAASkU,EAAI,CACf2qM,EAAa,IAAI31L,KAAKlpB,GACtB++M,EAAcvrN,KAAKyrN,UAAUJ,EAAYrrN,KAAKkrN,MAC9CI,EAAW,IAAI51L,KAAKhV,GACpB8qM,EAAYxrN,KAAKyrN,UAAUH,EAAUtrN,KAAKkrN,MAG1C,IAAIQ,EAAaL,EAAWpH,cACxB0H,EAAWL,EAASrH,cACnByH,EAAaC,IAEC,KAAb3rN,KAAKkrN,KACPM,EAAYxrN,KAAK4rN,UAAUP,EAAYC,GACjB,KAAbtrN,KAAKkrN,OACdM,EAAYxrN,KAAK6rN,QAAQR,EAAYC,GAAYC,IAKrD,IAAIO,EAAc5c,EAAMiQ,QAAQoM,EAAaC,GAEzC5+M,IACFk/M,EAAc9rN,KAAK+rN,aAAaD,EAAal/M,IAG9B,KAAb5M,KAAKkrN,OACPY,EAAc9rN,KAAKgsN,YAAYF,IAGjC,IAAId,EAAac,EAAY1hN,KAAI,SAAC3D,GAChC,OAAO,EAAKwlN,cAAcZ,EAAY,EAAKH,KAAMzkN,MAEnDukN,EAAWA,EAAWvsN,OAAS,GAAK6sN,EAEpC,IAAIpI,EAAcljN,KAAKksN,cAAclB,GAErC,OAAO9H,EACF,GAAI12M,IAAWkU,EAAK,CACzB2qM,EAAa,IAAI31L,KAAKlpB,IACtB++M,EAAcvrN,KAAKyrN,UAAUJ,EAAYrrN,KAAKkrN,QAC9CM,EAAY5+M,EAAWq+M,EAASr+M,EAAU,EAAKq+M,EAAS,KAGtDO,GAAwBD,GAE1B,IAAIO,EAAc5c,EAAMiQ,QAAQoM,EAAaC,GAGzC5+M,IACFk/M,EAAc9rN,KAAK+rN,aAAaD,EAAal/M,IAG/C,IAAIo+M,EAAac,EAAY1hN,KAAI,SAAC3D,GAChC,OAAO,EAAKwlN,cAAcZ,EAAY,EAAKH,KAAMzkN,MAG/Cy8M,EAAcljN,KAAKksN,cAAclB,GACrC,OAAO9H,EAEF,GAAIxiM,IAASlU,EAAO,CACzB8+M,EAAW,IAAI51L,KAAKhV,GAEpB6qM,GADAC,EAAYxrN,KAAKyrN,UAAUH,EAAUtrN,KAAKkrN,OACfD,EAAU,EAErC,IAAIa,EAAc5c,EAAMiQ,QAAQoM,EAAaC,GAEzC5+M,IACFk/M,EAAc9rN,KAAK+rN,aAAaD,EAAal/M,IAG/C,IAAIo+M,EAAac,EAAY1hN,KAAI,SAAC3D,GAChC,OAAO,EAAKwlN,cAAcX,EAAU,EAAKJ,KAAMzkN,MAG7Cy8M,EAAcljN,KAAKksN,cAAclB,GACrC,OAAO9H,KAlIb,gCAsIYiJ,EAAMC,GAEd,IAAIC,EAAO,KACX,OAAQD,GAER,IAAK,IACHC,EAAOF,EAAKrI,WACZ,MACF,IAAK,IACHuI,EAAOF,EAAKlI,cACZ,MACF,IAAK,IACHoI,EAAOF,EAAKhI,aACZ,MACF,IAAK,IACHkI,EAAOF,EAAKjI,UACZ,MACF,IAAK,IACHmI,EAAOF,EAAKpI,WACZ,MACF,IAAK,IACHsI,EAAOF,EAAK/H,aAGd,OAAOiI,IA9JX,mCAiKeC,EAAS1/M,GAIpB,IAFA,IAAI2/M,EAAU,GAEL7tN,EAAI,EAAGA,EAAI4tN,EAAQ7tN,OAAQC,GAAKkO,EACvC2/M,EAAQppN,KAAKmpN,EAAQ5tN,IAEvB,OAAO6tN,IAxKX,oCA2KgBJ,EAAMC,EAAOxlN,GAEzB,IAAI4lN,EAAW,IAAI92L,KAAKy2L,EAAKM,WAC7B,OAAQL,GAER,IAAK,IACe,GAAdxlN,EAAInI,QAEN+tN,EAASE,QAAQF,EAASvI,cAAgBr9M,EAAI,IAC9C4lN,EAASG,SAASvnH,SAASx+F,EAAI,MAE/B4lN,EAASG,SAAS/lN,GAGpB,MACF,IAAK,IACH4lN,EAASE,QAAQ9lN,GACjB,MACF,IAAK,IACH4lN,EAASI,WAAWhmN,GACpB,MACF,IAAK,IACH4lN,EAASK,QAAQjmN,GACjB,MACF,IAAK,IACH4lN,EAASM,SAASlmN,GAClB,MACF,IAAK,IACH4lN,EAASO,WAAWnmN,GAGtB,OAAO4lN,IA1MX,oCA6MgBF,GAOZ,OALcA,EAAQliN,KAAI,SAAC3D,GAEzB,OAAOA,EAAEumN,sBAjNf,gCAuNY3B,EAAYC,GAEpB,IAAI2B,EAAY3B,EAASxH,WAMzB,OAFiB,IAFDwH,EAASrH,cAAgBoH,EAAWpH,eAEjBgJ,IA7NvC,kCAkOc51J,GAEV,IAAI61J,EAAQ,KACRC,EAAQ,EAgBZ,OAfc91J,EAAMjtD,KAAI,SAAC3D,GAEvB,OAAIA,EAAI,GACFA,EAAI,IAAM,EAGL,CADP0mN,EAAQ1mN,EAAI,GACKA,GAFjBymN,EAAQzmN,IAID,CAAE0mN,EAAQ1mN,EAAIymN,GAIlB,CAAEC,EAAO1mN,QAlPtB,8BAwPU4kN,EAAYC,GAQlB,IANA,IAAIM,EAAY5rN,KAAK4rN,UAAUP,EAAYC,GACvCj0J,EAAQ63I,EAAMiQ,QAAQkM,EAAWvH,WAAY8H,GAC7CwB,EAAUptN,KAAKgsN,YAAY30J,GAG3BxwD,EAAM,EACDnI,EAAI,EAAGA,EAAI0uN,EAAQ3uN,OAAQC,IAAI,CAEtC,IAAIkI,EAAMwmN,EAAQ1uN,GAUlBmI,GAPInI,IAAM0uN,EAAQ3uN,OAAS,EAChB,IAAIi3B,KAAK21L,EAAWpH,cAAgBr9M,EAAI,GAAIA,EAAI,GAAI0kN,EAASpH,WAAWA,UAExE,IAAIxuL,KAAK21L,EAAWpH,cAAgBr9M,EAAI,GAAIA,EAAI,GAAI,GAAGs9M,UAOpE,OAAOr9M,MA/QX,K,mBCXMqoM,EAAQ,IAAIC,IAElB,SAASzmK,EAAO8hL,EAASztL,EAAQswL,GAC/B,IAEIC,EAFA7T,EAAW,IAAIt1L,IAAIqmM,GACnBnhL,EAASzqC,MAAM+D,KAAK82M,GAGtB6T,EADEvwL,EACcsM,EAAOj/B,KAAI,SAAC3D,GAC1B,OAAOs2B,EAASswL,EAAa5mN,KAGf4iC,EAAOj/B,KAAI,SAAC3D,GAC1B,OAAOA,KAMX,IAFA,IAAIkkN,EAAczb,EAAM0b,QAAQJ,EAAQ/rN,OAAQ4qC,EAAO5qC,QAE9CC,EAAI,EAAGA,EAAI8rN,EAAQ/rN,OAAQC,IAAK,CAEvC,IAAIo3M,EAAO0U,EAAQ9rN,GACfmsN,EAAaxhL,EAAOhY,QAAQykL,GAChC6U,EAAYjsN,GAAGmsN,GAAc,EAG/B,MAAO,CAAEF,EAAa2C,GA8GjB,IAAMC,EAlGb,WAAgC,IAAbj6H,EAAa,uDAAJ,GAC1B47G,EAAME,YAAY97G,EAAQ,OAAQ,qBAElC,IAAIv2D,EAASu2D,EAAM,QAAc,KAC7B+5H,EAAa/5H,EAAM,YAAkB,CAAE,KACvC5O,EAAU4O,EAAM,SAAe,KAE/Bk6H,GAAe,EACfhD,EAAU,KAWd,GATI5rN,MAAMC,QAAQy0F,EAAM,MACtBk3H,EAAUl3H,EAAM,KACPA,EAAM,gBAAoBw8G,KACnC0a,EAAUl3H,EAAM,KAChBk6H,GAAe,GAEfhD,EAAUl3H,EAAM,KAAS/tF,OAGtBioN,EAIE,CAEL,IAAI7X,EAAe,GAmBnB,GAlBKjxH,EAYHA,EAAQ14E,SAAQ,SAACvF,GACf,IAAIirM,EAAUhtH,EAAQrzD,QAAQ5qB,GAC9BkvM,EAAaxyM,KAAKuuM,OAbpBhtH,EAAU,GACV8lI,EAAQvR,UAAU7uM,KAAI,SAAC3D,EAAG/H,GAExB,GAAS,UAAL+H,EAAe,CACjB,IAAIgnN,EAAcjD,EAAQ9lI,QAAQhmF,GAClCgmF,EAAQvhF,KAAKsqN,GACb9X,EAAaxyM,KAAKzE,QAWpBq+B,EAAQ,CACV,IAAIn+B,MAAMC,QAAQk+B,GAKhB,MAAM,IAAIl3B,MAAM,yCAJhB,GAAIk3B,EAAOt+B,QAAUimF,EAAQjmF,OAC3B,MAAM,IAAIoH,MAAM,iFAMpBk3B,EAAS2nD,EAGX,IAAI0vH,EAAUoW,EAAQjlN,OAClB4qM,EAAaqa,EAAQ9lI,QACrBisH,EAAW6Z,EAAQ7Z,SAEnBoG,EAAc,GAClBpB,EAAa3pM,SAAQ,SAACvF,GACpBswM,EAAY5zM,KAAKwtM,EAASlqM,OAG5B,IAAIinN,EAAiB,GACjBC,EAAc,GAClB5W,EAAY/qM,SAAQ,SAACrH,EAAMjG,GAAM,MAEMgqC,EAAO/jC,EAAMo4B,EAAOr+B,GAAI2uN,GAF9B,WAEzB1C,EAFyB,KAEZ2C,EAFY,KAG/BI,EAAevqN,KAAf,MAAAuqN,EAAc,IAASJ,IAEG,GAAtBK,EAAYlvN,OACdkvN,EAAYxqN,KAAZ,MAAAwqN,EAAW,IAAShD,IAEpBA,EAAY3+M,SAAQ,SAACvF,EAAG/H,GAAM,OAC5B,EAAAivN,EAAYjvN,IAAGyE,KAAf,YAAuBsD,UAM7B,IAAI2wM,EAAahD,EAAQhqM,KAAI,SAAC0rM,EAAMp3M,GAElC,IAAIumN,EAAMnP,EAAKzxM,QACXupN,EAAK1e,EAAMmD,aAAa4S,EAAKtP,GAEjC,OADAiY,EAAGzqN,KAAH,MAAAyqN,EAAE,IAASD,EAAYjvN,KAChBkvN,KAGLC,EAAgB3e,EAAMmD,aAAalC,EAAYwF,GAGnD,OAFAkY,EAAc1qN,KAAd,MAAA0qN,EAAsBH,GAEf,IAAI5d,IAAUsH,EAAY,CAAE1yH,QAASmpI,IA1E3B,MACoBnlL,EAAO8hL,EAASztL,EAAQswL,GAD5C,WACX1C,EADW,KACE2C,EADF,KAGjB,OAAO,IAAIxd,IAAU6a,EAAa,CAAEjmI,QAAS4oI,K,oBC3CpCQ,EAAW,S,0GCjBlB5e,EAAQ,IAAIC,IAUlB,IACE,IAAM17J,EAAUs6K,OAAOt6K,QACvB9kC,QAAQlP,KAAR,+BAAqCg0C,IACrC,MAAO9zC,GACPgP,QAAQlP,KAAR,2FAMK,IAAMs5M,EAAb,WACE,WAAYiG,EAAStqK,GAAK,YACxB10C,KAAK00C,IAAMA,EACX10C,KAAKg/M,QAAUA,EAHnB,2CAcoB,WAAbvjM,EAAa,uDAAJ,GAERuyM,EAAahuN,KAAKiuN,kBAAkBxyM,GACpCyyM,EAAcF,EAAW,GACzBr+M,EAASq+M,EAAW,GAExB,GAAIhuN,KAAKg/M,mBAAmBxO,IAAQ,CAClC,IAAI2d,EAAQ,GACR3lM,EAAIxoB,KAAKg/M,QAAQz5M,OAErBoK,EAAO3D,SAAQ,SAACk1C,GACA,UAATA,IACHitK,EAAMjtK,GAASzlC,EAAOylC,OAI1BitK,EAAK,EAAQ3lM,EACb2lM,EAAK,KAAW,OAEhBJ,OAAOK,QAAQpuN,KAAK00C,IAAK,CAAEy5K,GAASD,EAAW,OAAYA,QAI3D,GAAIhf,EAAM+C,gBAAgBic,EAAa,MAAQhf,EAAM+C,gBAAgBic,EAAa,KAAM,CACtF,IAAKluN,KAAKg/M,QAAQnO,aAAan0G,SAASwxH,EAAW,GACjD,MAAMroN,MAAM,iBAAD,OAAkBqoN,EAAW,EAA7B,0BAEb,IAAKluN,KAAKg/M,QAAQnO,aAAan0G,SAASwxH,EAAW,GACjD,MAAMroN,MAAM,iBAAD,OAAkBqoN,EAAW,EAA7B,0BAIb,IAAIznN,EAAIzG,KAAKg/M,QAAQkP,EAAW,GAAO3oN,OACnCijB,EAAIxoB,KAAKg/M,QAAQkP,EAAW,GAAO3oN,OAEnC4oN,EAAQ,GACZA,EAAK,EAAQ1nN,EACb0nN,EAAK,EAAQ3lM,EAGb,IAAI6lM,EAAQ,GAAQC,EAAQ,GAC5BD,EAAK,MAAYH,EAAW,EAC5BI,EAAK,MAAYJ,EAAW,EAE5BA,EAAW,OAAX,MAAiCG,EACjCH,EAAW,OAAX,MAAiCI,EAEjCP,OAAOK,QAAQpuN,KAAK00C,IAAK,CAAEy5K,GAASD,EAAW,OAAYA,QAEtD,GAAIhf,EAAM+C,gBAAgBic,EAAa,MAAQhf,EAAM+C,gBAAgBic,EAAa,KAAM,CAG7F,IAAIvpN,EAAO,IAGPuqM,EAAM+C,gBAAgBic,EAAa,WACtBluN,KAAKuuN,wBAAwBL,EAAW,SAExCluN,KAAKg/M,QAAQnO,cAGjB7kM,SAAQ,SAACwiN,GACpB,IAAIL,EAAQ,GAEZx+M,EAAO3D,SAAQ,SAACk1C,GACditK,EAAMjtK,GAASzlC,EAAOylC,MAEpBguJ,EAAM+C,gBAAgBic,EAAa,MACrCC,EAAK,EAAQ,EAAKnP,QAAQkP,EAAW,GAAO3oN,OAC5C4oN,EAAK,EAAQ,EAAKnP,QAAQwP,GAAQjpN,OAClC4oN,EAAK,KAAWK,IAEhBL,EAAK,EAAQ,EAAKnP,QAAQkP,EAAW,GAAO3oN,OAC5C4oN,EAAK,EAAQ,EAAKnP,QAAQwP,GAAQjpN,OAClC4oN,EAAK,KAAWK,GAGlB7pN,EAAKxB,KAAKgrN,MAGZJ,OAAOK,QAAQpuN,KAAK00C,IAAK/vC,EAAMupN,EAAW,OAAYA,OAEjD,CAEL,IAAIvpN,EAAO,IAGPuqM,EAAM+C,gBAAgBic,EAAa,WACtBluN,KAAKuuN,wBAAwBL,EAAW,SAExCluN,KAAKg/M,QAAQnO,cAGjB7kM,SAAQ,SAACwiN,GACpB,IAAIL,EAAQ,GAEZx+M,EAAO3D,SAAQ,SAACk1C,GACditK,EAAMjtK,GAASzlC,EAAOylC,MAExBitK,EAAK,EAAQ,EAAKnP,QAAQ/4M,MAC1BkoN,EAAK,EAAQ,EAAKnP,QAAQwP,GAAQjpN,OAClC4oN,EAAK,KAAWK,EAEhB7pN,EAAKxB,KAAKgrN,MAGZJ,OAAOK,QAAQpuN,KAAK00C,IAAK/vC,EAAMupN,EAAW,OAAYA,MAxH9D,4BAwImB,WAAbzyM,EAAa,uDAAJ,GAEPuyM,EAAahuN,KAAKiuN,kBAAkBxyM,GACpCyyM,EAAcF,EAAW,GACzBr+M,EAASq+M,EAAW,GAExB,GAAIhuN,KAAKg/M,mBAAmBxO,IAAQ,CAClC,IAAI2d,EAAQ,GACR3lM,EAAIxoB,KAAKg/M,QAAQz5M,OAErBoK,EAAO3D,SAAQ,SAACk1C,GACA,WAATA,IACHitK,EAAMjtK,GAASzlC,EAAOylC,OAI1BitK,EAAK,EAAQ3lM,EACb2lM,EAAK,KAAW,MAEhBJ,OAAOK,QAAQpuN,KAAK00C,IAAK,CAAEy5K,GAASD,EAAW,OAAYA,QAI3D,GAAIhf,EAAM+C,gBAAgBic,EAAa,MAAQhf,EAAM+C,gBAAgBic,EAAa,KAAM,CACtF,IAAKluN,KAAKg/M,QAAQnO,aAAan0G,SAASwxH,EAAW,GACjD,MAAMroN,MAAM,iBAAD,OAAkBqoN,EAAW,EAA7B,0BAEb,IAAKluN,KAAKg/M,QAAQnO,aAAan0G,SAASwxH,EAAW,GACjD,MAAMroN,MAAM,iBAAD,OAAkBqoN,EAAW,EAA7B,0BAIb,IAAIznN,EAAIzG,KAAKg/M,QAAQkP,EAAW,GAAO3oN,OACnCijB,EAAIxoB,KAAKg/M,QAAQkP,EAAW,GAAO3oN,OAEnC4oN,EAAQ,GACZA,EAAK,EAAQ1nN,EACb0nN,EAAK,EAAQ3lM,EACb2lM,EAAK,KAAW,MAGhB,IAAIE,EAAQ,GAAQC,EAAQ,GAC5BD,EAAK,MAAYH,EAAW,EAC5BI,EAAK,MAAYJ,EAAW,EAE5BA,EAAW,OAAX,MAAiCG,EACjCH,EAAW,OAAX,MAAiCI,EAEjCP,OAAOK,QAAQpuN,KAAK00C,IAAK,CAAEy5K,GAASD,EAAW,OAAYA,QAEtD,GAAIhf,EAAM+C,gBAAgBic,EAAa,MAAQhf,EAAM+C,gBAAgBic,EAAa,KAAM,CAE7F,IAAIC,EAAQ,GAEZx+M,EAAO3D,SAAQ,SAACk1C,GACA,WAATA,IACHitK,EAAMjtK,GAASzlC,EAAOylC,OAItBguJ,EAAM+C,gBAAgBic,EAAa,KACrCC,EAAK,EAAQnuN,KAAKg/M,QAAQkP,EAAW,GAAO3oN,OAE5C4oN,EAAK,EAAQnuN,KAAKg/M,QAAQkP,EAAW,GAAO3oN,OAE9C4oN,EAAK,KAAW,MAEhBJ,OAAOK,QAAQpuN,KAAK00C,IAAK,CAAEy5K,GAASD,EAAW,OAAYA,OAEtD,CAEL,IAAIvpN,EAAO,IAGPuqM,EAAM+C,gBAAgBic,EAAa,WACtBluN,KAAKuuN,wBAAwBL,EAAW,SAExCluN,KAAKg/M,QAAQnO,cAGjB7kM,SAAQ,SAACwiN,GACpB,IAAIL,EAAQ,GAKZA,EAAK,EAAQ,EAAKnP,QAAQ/4M,MAC1BkoN,EAAK,EAAQ,EAAKnP,QAAQwP,GAAQjpN,OAClC4oN,EAAK,KAAWK,EAChBL,EAAK,KAAW,MAEhBxpN,EAAKxB,KAAKgrN,MAGZJ,OAAOK,QAAQpuN,KAAK00C,IAAK/vC,EAAMupN,EAAW,OAAYA,MAtO9D,gCAsPuB,WAAbzyM,EAAa,uDAAJ,GAEXuyM,EAAahuN,KAAKiuN,kBAAkBxyM,GACpCyyM,EAAcF,EAAW,GACzBr+M,EAASq+M,EAAW,GAExB,GAAIhuN,KAAKg/M,mBAAmBxO,IAAQ,CAClC,IAAI2d,EAAQ,GAEZx+M,EAAO3D,SAAQ,SAACk1C,GACA,WAATA,IACHitK,EAAMjtK,GAASzlC,EAAOylC,OAI1BitK,EAAK,EAAQnuN,KAAKg/M,QAAQz5M,OAC1B4oN,EAAK,EAAQnuN,KAAKg/M,QAAQ/4M,MAC1BkoN,EAAK,KAAW,UAChBA,EAAK,KAAW,UAEhBJ,OAAOK,QAAQpuN,KAAK00C,IAAK,CAAEy5K,GAASD,EAAW,OAAYA,QAI3D,GAAIhf,EAAM+C,gBAAgBic,EAAa,MAAQhf,EAAM+C,gBAAgBic,EAAa,KAAM,CACtF,IAAKluN,KAAKg/M,QAAQnO,aAAan0G,SAASwxH,EAAW,GACjD,MAAMroN,MAAM,iBAAD,OAAkBqoN,EAAW,EAA7B,0BAEb,IAAKluN,KAAKg/M,QAAQnO,aAAan0G,SAASwxH,EAAW,GACjD,MAAMroN,MAAM,iBAAD,OAAkBqoN,EAAW,EAA7B,0BAIb,IAAIznN,EAAIzG,KAAKg/M,QAAQkP,EAAW,GAAO3oN,OACnCijB,EAAIxoB,KAAKg/M,QAAQkP,EAAW,GAAO3oN,OAEnC4oN,EAAQ,GACZA,EAAK,EAAQ1nN,EACb0nN,EAAK,EAAQ3lM,EACb2lM,EAAK,KAAW,UAChBA,EAAK,KAAW,UAEhB,IAAIE,EAAQ,GAAQC,EAAQ,GAC5BD,EAAK,MAAYH,EAAW,EAC5BI,EAAK,MAAYJ,EAAW,EAE5BA,EAAW,OAAX,MAAiCG,EACjCH,EAAW,OAAX,MAAiCI,EAEjCP,OAAOK,QAAQpuN,KAAK00C,IAAK,CAAEy5K,GAASD,EAAW,OAAYA,QAEtD,GAAIhf,EAAM+C,gBAAgBic,EAAa,MAAQhf,EAAM+C,gBAAgBic,EAAa,KAAM,CAE7F,IAAIC,EAAQ,GAEZx+M,EAAO3D,SAAQ,SAACk1C,GACA,WAATA,IACHitK,EAAMjtK,GAASzlC,EAAOylC,OAItBguJ,EAAM+C,gBAAgBic,EAAa,MACrCC,EAAK,EAAQnuN,KAAKg/M,QAAQ/4M,MAC1BkoN,EAAK,EAAQnuN,KAAKg/M,QAAQkP,EAAW,GAAO3oN,SAG5C4oN,EAAK,EAAQnuN,KAAKg/M,QAAQ/4M,MAC1BkoN,EAAK,EAAQnuN,KAAKg/M,QAAQkP,EAAW,GAAO3oN,QAG9C4oN,EAAK,KAAW,UAChBA,EAAK,KAAW,UAEhBJ,OAAOK,QAAQpuN,KAAK00C,IAAK,CAAEy5K,GAASD,EAAW,OAAYA,OAEtD,CAEL,IAAIvpN,EAAO,IAGPuqM,EAAM+C,gBAAgBic,EAAa,WACtBluN,KAAKuuN,wBAAwBL,EAAW,SAExCluN,KAAKg/M,QAAQnO,cAGjB7kM,SAAQ,SAACwiN,GACpB,IAAIL,EAAQ,GAKZA,EAAK,EAAQ,EAAKnP,QAAQ/4M,MAC1BkoN,EAAK,EAAQ,EAAKnP,QAAQwP,GAAQjpN,OAClC4oN,EAAK,KAAWK,EAChBL,EAAK,KAAW,UAChBA,EAAK,KAAW,UAChBxpN,EAAKxB,KAAKgrN,MAGZJ,OAAOK,QAAQpuN,KAAK00C,IAAK/vC,EAAMupN,EAAW,OAAYA,MA1V9D,6BA0WoB,WAAbzyM,EAAa,uDAAJ,GAERuyM,EAAahuN,KAAKiuN,kBAAkBxyM,GACpCyyM,EAAcF,EAAW,GACzBr+M,EAASq+M,EAAW,GAExB,GAAIhuN,KAAKg/M,mBAAmBxO,IAAQ,CAClC,IAAI2d,EAAQ,GAEZx+M,EAAO3D,SAAQ,SAACk1C,GACA,WAATA,IACHitK,EAAMjtK,GAASzlC,EAAOylC,OAI1BitK,EAAK,EAAQnuN,KAAKg/M,QAAQz5M,OAC1B4oN,EAAK,KAAW,YAEhBJ,OAAOK,QAAQpuN,KAAK00C,IAAK,CAAEy5K,GAASD,EAAW,OAAYA,QAEtD,GAAIhf,EAAM+C,gBAAgBic,EAAa,KAAM,CAElD,IAAIC,EAAQ,GACZx+M,EAAO3D,SAAQ,SAACk1C,GACA,WAATA,IACHitK,EAAMjtK,GAASzlC,EAAOylC,OAI1BitK,EAAK,EAAQnuN,KAAKg/M,QAAQkP,EAAW,GAAO3oN,OAC5C4oN,EAAK,KAAW,YAEhBJ,OAAOK,QAAQpuN,KAAK00C,IAAK,CAAEy5K,GAASD,EAAW,OAAYA,QAEtD,GAAIhf,EAAM+C,gBAAgBic,EAAa,KAAM,CAElD,IAAIC,EAAQ,GACZx+M,EAAO3D,SAAQ,SAACk1C,GACA,WAATA,IACHitK,EAAMjtK,GAASzlC,EAAOylC,OAI1BitK,EAAK,EAAQnuN,KAAKg/M,QAAQkP,EAAW,GAAO3oN,OAC5C4oN,EAAK,KAAW,YAEhBJ,OAAOK,QAAQpuN,KAAK00C,IAAK,CAAEy5K,GAASD,EAAW,OAAYA,OAEtD,CACL,IAAIvpN,EAAO,IAGPuqM,EAAM+C,gBAAgBic,EAAa,WACtBluN,KAAKuuN,wBAAwBL,EAAW,SAExCluN,KAAKg/M,QAAQnO,cAGjB7kM,SAAQ,SAACwiN,GACpB,IAAIL,EAAQ,GACZA,EAAK,EAAQ,EAAKnP,QAAQwP,GAAQjpN,OAClC4oN,EAAK,KAAWK,EAChBL,EAAK,KAAW,YAChBxpN,EAAKxB,KAAKgrN,MAGZJ,OAAOK,QAAQpuN,KAAK00C,IAAK/vC,EAAMupN,EAAW,OAAYA,MA5a5D,4BAybmB,WAAbzyM,EAAa,uDAAJ,GAEPuyM,EAAahuN,KAAKiuN,kBAAkBxyM,GACpCyyM,EAAcF,EAAW,GAG7B,GAAIhuN,KAAKg/M,mBAAmBxO,IAAQ,CAClC,IAAI7rM,EAAO,CAAE,CACXY,OAAQvF,KAAKg/M,QAAQz5M,OACrB8jC,OAAQrpC,KAAKg/M,QAAQ/4M,MACrBwd,KAAM,MACNnf,KAAM4pN,EAAW,OACjBO,UAAW,qBACXC,YAAY,IAGdX,OAAOK,QAAQpuN,KAAK00C,IAAK/vC,EAAMupN,EAAW,OAAYA,QAEjD,GAAIhf,EAAM+C,gBAAgBic,EAAa,WAAahf,EAAM+C,gBAAgBic,EAAa,UAAW,CACvG,IAAKluN,KAAKg/M,QAAQnO,aAAan0G,SAASwxH,EAAW,QACjD,MAAMroN,MAAM,iBAAD,OAAkBqoN,EAAW,OAA7B,+DAA8FluN,KAAKg/M,QAAQnO,aAA3G,MAEb,IAAK7wM,KAAKg/M,QAAQnO,aAAan0G,SAASwxH,EAAW,QACjD,MAAMroN,MAAM,iBAAD,OAAkBqoN,EAAW,OAA7B,8DAA6FluN,KAAKg/M,QAAQnO,aAA1G,MAEb,IAAIlsM,EAAO,CAAE,CACXY,OAAQvF,KAAKg/M,QAAQkP,EAAW,QAAY3oN,OAC5C8jC,OAAQrpC,KAAKg/M,QAAQkP,EAAW,QAAY3oN,OAC5Cke,KAAM,MACNnf,KAAM4pN,EAAW,OACjBO,UAAW,qBACXC,YAAY,IAGdX,OAAOK,QAAQpuN,KAAK00C,IAAK/vC,EAAMupN,EAAW,OAAYA,OAEjD,CACL,IAAIS,EAQJ,GALEA,EADEzf,EAAM+C,gBAAgBic,EAAa,WACtBluN,KAAKuuN,wBAAwBL,EAAW,SAExCluN,KAAKg/M,QAAQnO,aAG1B3B,EAAM+C,gBAAgBic,EAAa,YACrC,GAAIA,EAAW,QAAYzvN,QAAUkwN,EAAalwN,OAAS,EACzD,MAAMoH,MAAM,mEAAD,OAAoEqoN,EAAW,QAAYzvN,OAA3F,sBAA+GkwN,EAAalwN,OAAS,QAE7I,CAEL,IADA,IAAIm9M,EAAW,GACNl9M,EAAI,EAAGA,EAAIiwN,EAAalwN,OAAS,EAAGC,IAC3Ck9M,EAASz4M,KAAK,GAEhB+qN,EAAW,QAActS,EAI3B,GAAI1M,EAAM+C,gBAAgBic,EAAa,YACrC,GAAIA,EAAW,QAAYzvN,QAAUkwN,EAAalwN,OAAS,EACzD,MAAMoH,MAAM,mEAAD,OAAoEqoN,EAAW,QAAYzvN,OAA3F,sBAA+GkwN,EAAalwN,OAAS,QAE7I,CAEL,IADA,IAAIm9M,EAAW,GACNl9M,EAAI,EAAGA,EAAIiwN,EAAalwN,OAAS,EAAGC,IAC3Ck9M,EAASz4M,KAAKzE,GAEhBwvN,EAAW,QAActS,EAG3B,IAAIj3M,EAAO,GAgBX,GAdAgqN,EAAa3iN,SAAQ,SAACwiN,EAAQ9vN,GAC5B,IAAIyvN,EAAQ,GACZA,EAAK,OAAa,EAAKnP,QAAQwP,GAAQjpN,OACvC4oN,EAAK,OAAa,EAAKnP,QAAQkP,EAAW,QAAY3oN,OACtD4oN,EAAK,KAAWK,EAChBL,EAAK,KAAW,MAChBA,EAAK,OAAa,CAAE9uM,IAAK6uM,EAAW,QAAYxvN,GAAIgxM,OAAQwe,EAAW,QAAYxvN,IACnFyvN,EAAK,UAAgB,qBACrBA,EAAK,aAAmB,UACxBA,EAAK,YAAiB,EACtBxpN,EAAKxB,KAAKgrN,OAIPjf,EAAM+C,gBAAgBic,EAAa,QAAS,CAE/C,IAAI/lN,EAAOd,QAAQrH,KAAKg/M,QAAQx5M,MAAM,GAAK,GAAGua,WAAa,EAC3DmuM,EAAW,KAAW,CAAEzpI,KAAMt8E,EAAMu8E,QAASv8E,GAE/C+lN,EAAW,OAAX,KAAgCA,EAAW,KAC3CH,OAAOK,QAAQpuN,KAAK00C,IAAK/vC,EAAMupN,EAAW,OAAYA,MArhB5D,4BAkiBmB,WAAbzyM,EAAa,uDAAJ,GAEPuyM,EAAahuN,KAAKiuN,kBAAkBxyM,GACpCyyM,EAAcF,EAAW,GACzBr+M,EAASq+M,EAAW,GAExB,GAAIhuN,KAAKg/M,mBAAmBxO,IAAQ,CAClC,IAAI2d,EAAQ,GACR3lM,EAAIxoB,KAAKg/M,QAAQz5M,OAErBoK,EAAO3D,SAAQ,SAACk1C,GACA,WAATA,IACHitK,EAAMjtK,GAASzlC,EAAOylC,OAI1BitK,EAAK,EAAQ3lM,EACb2lM,EAAK,KAAW,MAEhBJ,OAAOK,QAAQpuN,KAAK00C,IAAK,CAAEy5K,GAASD,EAAW,OAAYA,QAI3D,GAAIhf,EAAM+C,gBAAgBic,EAAa,MAAQhf,EAAM+C,gBAAgBic,EAAa,KAAM,CACtF,IAAKluN,KAAKg/M,QAAQnO,aAAan0G,SAASwxH,EAAW,GACjD,MAAMroN,MAAM,iBAAD,OAAkBqoN,EAAW,EAA7B,0BAEb,IAAKluN,KAAKg/M,QAAQnO,aAAan0G,SAASwxH,EAAW,GACjD,MAAMroN,MAAM,iBAAD,OAAkBqoN,EAAW,EAA7B,0BAIb,IAAIznN,EAAIzG,KAAKg/M,QAAQkP,EAAW,GAAO3oN,OACnCijB,EAAIxoB,KAAKg/M,QAAQkP,EAAW,GAAO3oN,OAEnC4oN,EAAQ,GACZA,EAAK,EAAQ1nN,EACb0nN,EAAK,EAAQ3lM,EACb2lM,EAAK,KAAW,MAGhB,IAAIE,EAAQ,GAAQC,EAAQ,GAC5BD,EAAK,MAAYH,EAAW,EAC5BI,EAAK,MAAYJ,EAAW,EAE5BA,EAAW,OAAX,MAAiCG,EACjCH,EAAW,OAAX,MAAiCI,EAEjCP,OAAOK,QAAQpuN,KAAK00C,IAAK,CAAEy5K,GAASD,EAAW,OAAYA,QAEtD,GAAIhf,EAAM+C,gBAAgBic,EAAa,MAAQhf,EAAM+C,gBAAgBic,EAAa,KAAM,CAE7F,IAAIC,EAAQ,GAEZx+M,EAAO3D,SAAQ,SAACk1C,GACA,WAATA,IACHitK,EAAMjtK,GAASzlC,EAAOylC,OAItBguJ,EAAM+C,gBAAgBic,EAAa,MACrCC,EAAK,EAAQnuN,KAAKg/M,QAAQkP,EAAW,GAAO3oN,OAC5C4oN,EAAK,EAAQnuN,KAAKg/M,QAAQ/4M,MAC1BkoN,EAAK,KAAW,QAEhBA,EAAK,EAAQnuN,KAAKg/M,QAAQ/4M,MAC1BkoN,EAAK,EAAQD,EAAW,EACxBC,EAAK,KAAW,OAGlBJ,OAAOK,QAAQpuN,KAAK00C,IAAK,CAAEy5K,GAASD,EAAW,OAAYA,OAEtD,CAEL,IAAIvpN,EAAO,IAGPuqM,EAAM+C,gBAAgBic,EAAa,WACtBluN,KAAKuuN,wBAAwBL,EAAW,SAExCluN,KAAKg/M,QAAQnO,cAGjB7kM,SAAQ,SAACwiN,GACpB,IAAIL,EAAQ,GAEZx+M,EAAO3D,SAAQ,SAACk1C,GACditK,EAAMjtK,GAASzlC,EAAOylC,MAExBitK,EAAK,EAAQ,EAAKnP,QAAQwP,GAAQjpN,OAClC4oN,EAAK,KAAWK,EAChBL,EAAK,KAAW,MAChBxpN,EAAKxB,KAAKgrN,MAGZJ,OAAOK,QAAQpuN,KAAK00C,IAAK/vC,EAAMupN,EAAW,OAAYA,MAjoB9D,+BAgpBsB,WAAbzyM,EAAa,uDAAJ,GAEVuyM,EAAahuN,KAAKiuN,kBAAkBxyM,GACpCyyM,EAAcF,EAAW,GACzBr+M,EAASq+M,EAAW,GAExB,GAAIhuN,KAAKg/M,mBAAmBxO,IAAQ,CAClC,IAAI2d,EAAQ,GACR3lM,EAAIxoB,KAAKg/M,QAAQz5M,OAErBoK,EAAO3D,SAAQ,SAACk1C,GACA,WAATA,IACHitK,EAAMjtK,GAASzlC,EAAOylC,OAI1BitK,EAAK,EAAQ3lM,EACb2lM,EAAK,KAAW,SAEhBJ,OAAOK,QAAQpuN,KAAK00C,IAAK,CAAEy5K,GAASD,EAAW,OAAYA,QAI3D,GAAIhf,EAAM+C,gBAAgBic,EAAa,MAAQhf,EAAM+C,gBAAgBic,EAAa,KAAM,CACtF,IAAKluN,KAAKg/M,QAAQnO,aAAan0G,SAASwxH,EAAW,GACjD,MAAMroN,MAAM,iBAAD,OAAkBqoN,EAAW,EAA7B,0BAEb,IAAKluN,KAAKg/M,QAAQnO,aAAan0G,SAASwxH,EAAW,GACjD,MAAMroN,MAAM,iBAAD,OAAkBqoN,EAAW,EAA7B,0BAIb,IAAIznN,EAAIzG,KAAKg/M,QAAQkP,EAAW,GAAO3oN,OACnCijB,EAAIxoB,KAAKg/M,QAAQkP,EAAW,GAAO3oN,OAEnC4oN,EAAQ,GACZA,EAAK,EAAQ1nN,EACb0nN,EAAK,EAAQ3lM,EACb2lM,EAAK,KAAW,SAGhB,IAAIE,EAAQ,GAAQC,EAAQ,GAC5BD,EAAK,MAAYH,EAAW,EAC5BI,EAAK,MAAYJ,EAAW,EAE5BA,EAAW,OAAX,MAAiCG,EACjCH,EAAW,OAAX,MAAiCI,EAEjCP,OAAOK,QAAQpuN,KAAK00C,IAAK,CAAEy5K,GAASD,EAAW,OAAYA,QAEtD,GAAIhf,EAAM+C,gBAAgBic,EAAa,MAAQhf,EAAM+C,gBAAgBic,EAAa,KAAM,CAE7F,IAAIC,EAAQ,GAEZx+M,EAAO3D,SAAQ,SAACk1C,GACA,WAATA,IACHitK,EAAMjtK,GAASzlC,EAAOylC,OAItBguJ,EAAM+C,gBAAgBic,EAAa,MACrCC,EAAK,EAAQnuN,KAAKg/M,QAAQkP,EAAW,GAAO3oN,OAC5C4oN,EAAK,EAAQnuN,KAAKg/M,QAAQ/4M,MAC1BkoN,EAAK,KAAW,WAEhBA,EAAK,EAAQnuN,KAAKg/M,QAAQ/4M,MAC1BkoN,EAAK,EAAQD,EAAW,EACxBC,EAAK,KAAW,UAGlBJ,OAAOK,QAAQpuN,KAAK00C,IAAK,CAAEy5K,GAASD,EAAW,OAAYA,OAEtD,CAEL,IAAIvpN,EAAO,IAGPuqM,EAAM+C,gBAAgBic,EAAa,WACtBluN,KAAKuuN,wBAAwBL,EAAW,SAExCluN,KAAKg/M,QAAQnO,cAGjB7kM,SAAQ,SAACwiN,GACpB,IAAIL,EAAQ,GAEZx+M,EAAO3D,SAAQ,SAACk1C,GACditK,EAAMjtK,GAASzlC,EAAOylC,MAExBitK,EAAK,EAAQ,EAAKnP,QAAQwP,GAAQjpN,OAClC4oN,EAAK,KAAWK,EAChBL,EAAK,KAAW,SAChBxpN,EAAKxB,KAAKgrN,MAGZJ,OAAOK,QAAQpuN,KAAK00C,IAAK/vC,EAAMupN,EAAW,OAAYA,MA/uB9D,8BA6vBqB,IAMbU,EANa,OAAbnzM,EAAa,uDAAJ,GACTuyM,EAAahuN,KAAKiuN,kBAAkBxyM,GACpCyyM,EAAcF,EAAW,GACzBlS,EAAS,GACT37F,EAAQ,GACR0uG,EAAY,GAIZ3f,EAAM+C,gBAAgBic,EAAa,YAErCA,EAAW,QAAYliN,SAAQ,SAACstM,GAC9B,IAAK,EAAK0F,QAAQnO,aAAan0G,SAAS48G,GACtC,MAAMzzM,MAAM,iBAAD,OAAkByzM,EAAlB,6DAA4E,EAAK0F,QAAQnO,aAAzF,OAGb,IAAItlF,EAAM,EAAKyzF,QAAQnO,aAAax/K,QAAQioL,GAC5CuV,EAAU1rN,KAAK,EAAK67M,QAAQrO,SAASplF,OAEvCqjG,EAAcV,EAAW,UAGzBU,EAAc5uN,KAAKg/M,QAAQnO,aAC3Bge,EAAY7uN,KAAKg/M,QAAQrO,UAI3BmL,EAAM,OAAa8S,EACnBzuG,EAAK,OAAa0uG,EAEdX,EAAW,cACbltN,OAAO8lB,KAAKonM,EAAW,cAAkBliN,SAAQ,SAACk1C,GAChD46J,EAAO56J,GAASgtK,EAAW,aAAiBhtK,MAI5CgtK,EAAW,YACbltN,OAAO8lB,KAAKonM,EAAW,YAAgBliN,SAAQ,SAACk1C,GAC9Ci/D,EAAMj/D,GAASgtK,EAAW,WAAehtK,MAG7C,IAAIv8C,EAAO,CAAE,CACX8e,KAAM,QACNq4L,OAAQA,EACR37F,MAAOA,IAET4tG,OAAOK,QAAQpuN,KAAK00C,IAAK/vC,EAAMupN,EAAW,OAAYA,KA3yB1D,wCAgzBoBzyM,GAChB,IAAI9L,EAAS3O,OAAO8lB,KAAKrL,GACrByyM,EAAc,GAWlB,OATAv+M,EAAO3D,SAAQ,SAACk1C,GACdgtK,EAAYhtK,GAASzlC,EAAOylC,MAGzBguJ,EAAM+C,gBAAgBx2L,EAAQ,YACjCyyM,EAAW,OAAa,IAInB,CAAEA,EAAav+M,KA7zB1B,8CAi0B0B2uG,GAAM,WAM5B,OALAA,EAAKtyG,SAAQ,SAACs+I,GACZ,IAAK,EAAK00D,QAAQnO,aAAan0G,SAAS4tD,GACtC,MAAMzkJ,MAAM,iBAAD,OAAkBykJ,EAAlB,6DAA0E,EAAK00D,QAAQnO,aAAvF,UAGRvyF,MAv0BX,M,mBCtBA,OAmCA,SAAUwwG,GAER,aAEA,IAAIlnK,EAAO,SAASnhD,GAClB,MAAsC,IAA9BP,KAAKyC,IAAIlC,GAAKP,KAAKyC,KAAKlC,KAG9B4zD,EAAO,SAAS5zD,GAClB,MAAsC,IAA9BP,KAAKyC,IAAIlC,GAAKP,KAAKyC,KAAKlC,KAqD9BsoN,EAAc,WAChB,MAAMC,YAAY,kBAUpB,SAASC,EAASloN,EAAGC,GAEnB,IAAI4a,EAAK1b,KAAK+sC,IAAIlsC,GACdmoN,EAAKhpN,KAAK+sC,IAAIjsC,GAElB,OAAU,IAAND,EACKb,KAAK2Y,IAAIqwM,GAGR,IAANloN,EACKd,KAAK2Y,IAAI+C,GAGdA,EAAK,KAAQstM,EAAK,IACa,GAA1BhpN,KAAK2Y,IAAI9X,EAAIA,EAAIC,EAAIA,GAmCvBd,KAAK2Y,IAAI9X,EAAIb,KAAKwhD,IAAIxhD,KAAKi3C,MAAMn2C,EAAGD,KAyH7C,SAASyL,EAAQzL,EAAGC,GAElB,KAAMhH,gBAAgBwS,GACpB,OAAO,IAAIA,EAAQzL,EAAGC,GAGxB,IAAI+7G,EA5HM,SAASh8G,EAAGC,GAEtB,IAAI+7G,EAAI,CAAC,GAAM,EAAG,GAAM,GAExB,GAAIh8G,QACFg8G,EAAM,GACEA,EAAM,GAAI,OACb,QAAU1iH,IAAN2G,EACT+7G,EAAM,GAAIh8G,EACVg8G,EAAM,GAAI/7G,OAEV,cAAeD,GAEb,IAAK,SAEH,GAAI,OAAQA,GAAK,OAAQA,EACvBg8G,EAAM,GAAIh8G,EAAM,GAChBg8G,EAAM,GAAIh8G,EAAM,QACX,GAAI,QAASA,GAAK,QAASA,EAAG,CACnC,IAAKM,OAAOmE,SAASzE,EAAO,MAAMM,OAAOmE,SAASzE,EAAO,KACvD,OAAOyL,EAAkB,SAE3BuwG,EAAM,GAAIh8G,EAAO,IAAIb,KAAKwhD,IAAI3gD,EAAO,KACrCg8G,EAAM,GAAIh8G,EAAO,IAAIb,KAAKi0D,IAAIpzD,EAAO,UAChC,GAAI,MAAOA,GAAK,QAASA,EAAG,CACjC,IAAKM,OAAOmE,SAASzE,EAAK,IAAMM,OAAOmE,SAASzE,EAAO,KACrD,OAAOyL,EAAkB,SAE3BuwG,EAAM,GAAIh8G,EAAK,EAAIb,KAAKwhD,IAAI3gD,EAAO,KACnCg8G,EAAM,GAAIh8G,EAAK,EAAIb,KAAKi0D,IAAIpzD,EAAO,UACb,IAAbA,EAAEtI,QACXskH,EAAM,GAAIh8G,EAAE,GACZg8G,EAAM,GAAIh8G,EAAE,IAEZgoN,IAEF,MAEF,IAAK,SAEHhsG,EAAM,GACEA,EAAM,GAAI,EAElB,IAAI/c,EAASj/F,EAAEygC,MAAM,yCACjB2nL,EAAO,EACPjC,EAAQ,EAEG,OAAXlnH,GACF+oH,IAGF,IAAK,IAAIrwN,EAAI,EAAGA,EAAIsnG,EAAOvnG,OAAQC,IAAK,CAEtC,IAAIyO,EAAI64F,EAAOtnG,GAEL,MAANyO,GAAmB,OAANA,GAAoB,OAANA,IAEd,MAANA,EACTgiN,IACe,MAANhiN,EACT+/M,IACe,MAAN//M,GAAmB,MAANA,GAElBgiN,EAAOjC,IAAU,GACnB6B,IAGoB,MAAlB/oH,EAAOtnG,EAAI,IAAe6M,MAAMy6F,EAAOtnG,EAAI,IAI7CqkH,EAAM,IAAKjjG,YAAYotM,EAAQ,EAAI,IAAM,IAAM,MAH/CnqG,EAAM,IAAKjjG,YAAYotM,EAAQ,EAAI,IAAM,IAAMlnH,EAAOtnG,EAAI,IAC1DA,KAIFywN,EAAOjC,EAAQ,KAIXiC,EAAOjC,IAAU,GAAK3hN,MAAM4B,KAC9B4hN,IAGoB,MAAlB/oH,EAAOtnG,EAAI,IAAgC,MAAlBsnG,EAAOtnG,EAAI,IACtCqkH,EAAM,IAAKjjG,YAAYotM,EAAQ,EAAI,IAAM,IAAM//M,GAC/CzO,KAEAqkH,EAAM,IAAKjjG,YAAYotM,EAAQ,EAAI,IAAM,IAAM//M,GAEjDgiN,EAAOjC,EAAQ,IAKfiC,EAAOjC,EAAQ,GACjB6B,IAEF,MAEF,IAAK,SACHhsG,EAAM,GAAI,EACVA,EAAM,GAAIh8G,EACV,MAEF,QACEgoN,IAQN,OALIxjN,MAAMw3G,EAAM,KAAMx3G,MAAMw3G,EAAM,IAK3BA,EAaC1mF,CAAMt1B,EAAGC,GAEjBhH,KAAS,GAAI+iH,EAAM,GACnB/iH,KAAS,GAAI+iH,EAAM,GAGrBvwG,EAAQpR,UAAY,CAElB,GAAM,EACN,GAAM,EAON,KAAQ,WAEN,IAAI6xC,EAAMjzC,KAAU,MAEpB,OAAO,IAAIwS,EACHxS,KAAS,GAAIizC,EACbjzC,KAAS,GAAIizC,IAQvB,IAAO,SAASlsC,EAAGC,GAEjB,IAAI+7G,EAAI,IAAIvwG,EAAQzL,EAAGC,GAGvB,OAAIhH,KAAiB,cAAO+iH,EAAc,aACjCvwG,EAAa,IAIlBxS,KAAiB,cAAO+iH,EAAc,aACjCvwG,EAAkB,SAGpB,IAAIA,EACHxS,KAAS,GAAI+iH,EAAM,GACnB/iH,KAAS,GAAI+iH,EAAM,KAQ7B,IAAO,SAASh8G,EAAGC,GAEjB,IAAI+7G,EAAI,IAAIvwG,EAAQzL,EAAGC,GAGvB,OAAIhH,KAAiB,cAAO+iH,EAAc,aACjCvwG,EAAa,IAIlBxS,KAAiB,cAAO+iH,EAAc,aACjCvwG,EAAkB,SAGpB,IAAIA,EACHxS,KAAS,GAAI+iH,EAAM,GACnB/iH,KAAS,GAAI+iH,EAAM,KAQ7B,IAAO,SAASh8G,EAAGC,GAEjB,IAAI+7G,EAAI,IAAIvwG,EAAQzL,EAAGC,GAGvB,OAAKhH,KAAiB,cAAO+iH,EAAU,UAAS/iH,KAAa,UAAO+iH,EAAc,aACzEvwG,EAAa,IAIlBxS,KAAiB,cAAO+iH,EAAc,aACjCvwG,EAAkB,SAIX,IAAZuwG,EAAM,IAA0B,IAAf/iH,KAAS,GACrB,IAAIwS,EAAQxS,KAAS,GAAI+iH,EAAM,GAAG,GAGpC,IAAIvwG,EACHxS,KAAS,GAAI+iH,EAAM,GAAI/iH,KAAS,GAAI+iH,EAAM,GAC1C/iH,KAAS,GAAI+iH,EAAM,GAAI/iH,KAAS,GAAI+iH,EAAM,KAQpD,IAAO,SAASh8G,EAAGC,GAEjB,IAAI+7G,EAAI,IAAIvwG,EAAQzL,EAAGC,GAGvB,GAAKhH,KAAa,UAAO+iH,EAAU,UAAS/iH,KAAiB,cAAO+iH,EAAc,aAChF,OAAOvwG,EAAa,IAItB,GAAIxS,KAAiB,cAAO+iH,EAAU,SACpC,OAAOvwG,EAAkB,SAI3B,GAAIxS,KAAa,UAAO+iH,EAAc,aACpC,OAAOvwG,EAAc,KAGvBzL,EAAI/G,KAAS,GACbgH,EAAIhH,KAAS,GAEb,IAEI6P,EAAGpJ,EAFH0G,EAAI41G,EAAM,GACVh2G,EAAIg2G,EAAM,GAGd,OAAI,IAAMh2G,EAED,IAAIyF,EAAQzL,EAAIoG,EAAGnG,EAAImG,GAG5BjH,KAAK+sC,IAAI9lC,GAAKjH,KAAK+sC,IAAIlmC,GAKlB,IAAIyF,GACFzL,GAJTN,EAAI0G,EAAIJ,GAIS/F,IAHjB6I,EAAI1C,EAAI1G,EAAIsG,IAIH/F,EAAIP,EAAIM,GAAK8I,GAOf,IAAI2C,GACFzL,EAAIC,GAJbP,EAAIsG,EAAII,KACR0C,EAAI9C,EAAItG,EAAI0G,IAIHnG,EAAID,EAAIN,GAAKoJ,IAS1B,IAAO,SAAS9I,EAAGC,GAEjB,IAAI+7G,EAAI,IAAIvwG,EAAQzL,EAAGC,GAKvB,GAHAD,EAAI/G,KAAS,GACbgH,EAAIhH,KAAS,GAET+iH,EAAU,SACZ,OAAOvwG,EAAa,IAItB,GAAgB,IAAZuwG,EAAM,GAAS,CAEjB,GAAU,IAAN/7G,GAAWD,GAAK,EAElB,OAAO,IAAIyL,EAAQtM,KAAK0xC,IAAI7wC,EAAGg8G,EAAM,IAAI,GAEpC,GAAU,IAANh8G,EAET,QAASg8G,EAAM,GAAI,EAAI,GAAK,GAC1B,KAAK,EACH,OAAO,IAAIvwG,EAAQtM,KAAK0xC,IAAI5wC,EAAG+7G,EAAM,IAAI,GAC3C,KAAK,EACH,OAAO,IAAIvwG,EAAQ,EAAGtM,KAAK0xC,IAAI5wC,EAAG+7G,EAAM,KAC1C,KAAK,EACH,OAAO,IAAIvwG,GAAStM,KAAK0xC,IAAI5wC,EAAG+7G,EAAM,IAAI,GAC5C,KAAK,EACH,OAAO,IAAIvwG,EAAQ,GAAItM,KAAK0xC,IAAI5wC,EAAG+7G,EAAM,MAwBjD,GAAU,IAANh8G,GAAiB,IAANC,GAAW+7G,EAAM,GAAI,GAAKA,EAAM,IAAK,EAClD,OAAOvwG,EAAc,KAGvB,IAAIhT,EAAM0G,KAAKi3C,MAAMn2C,EAAGD,GACpBqoN,EAAMH,EAASloN,EAAGC,GAItB,OAFAD,EAAIb,KAAKyC,IAAIo6G,EAAM,GAAIqsG,EAAMrsG,EAAM,GAAIvjH,GACvCwH,EAAI+7G,EAAM,GAAIqsG,EAAMrsG,EAAM,GAAIvjH,EACvB,IAAIgT,EACHzL,EAAIb,KAAKwhD,IAAI1gD,GACbD,EAAIb,KAAKi0D,IAAInzD,KAQvB,KAAQ,WAEN,IAIIqoN,EAAIC,EAJJvoN,EAAI/G,KAAS,GACbgH,EAAIhH,KAAS,GACbiH,EAAIjH,KAAU,MAIlB,GAAI+G,GAAK,EAAG,CAEV,GAAU,IAANC,EACF,OAAO,IAAIwL,EAAQtM,KAAK6C,KAAKhC,GAAI,GAGnCsoN,EAAK,GAAMnpN,KAAK6C,KAAK,GAAO9B,EAAIF,SAEhCsoN,EAAKnpN,KAAK+sC,IAAIjsC,GAAKd,KAAK6C,KAAK,GAAK9B,EAAIF,IASxC,OALEuoN,EADEvoN,GAAK,EACF,GAAMb,KAAK6C,KAAK,GAAO9B,EAAIF,IAE3Bb,KAAK+sC,IAAIjsC,GAAKd,KAAK6C,KAAK,GAAK9B,EAAIF,IAGjC,IAAIyL,EAAQ68M,EAAIroN,EAAI,GAAKsoN,EAAKA,IAQvC,IAAO,WAEL,IAAIzwI,EAAM34E,KAAKyC,IAAI3I,KAAS,IAK5B,OAHIA,KAAS,GAGN,IAAIwS,EACHqsE,EAAM34E,KAAKwhD,IAAI1nD,KAAS,IACxB6+E,EAAM34E,KAAKi0D,IAAIn6D,KAAS,MAWlC,MAAS,WAQP,IAAI+G,EAAI/G,KAAS,GACbgH,EAAIhH,KAAS,GAEjB,OAAO,IAAIwS,EACHtM,KAAK8kD,MAAMjkD,GAAKb,KAAKwhD,IAAI1gD,GAjhBzB,SAASP,GACnB,IAAIgnF,EAAQvnF,KAAKm8D,GAAG,EACpB,GAAI57D,GAAKgnF,GAAShnF,EAAIgnF,EACpB,OAAQvnF,KAAKwhD,IAAIjhD,GAAK,EAGxB,IAAI8oN,EAAK9oN,EAAIA,EACb,OAAO8oN,GACGA,GACL,EAAE,GAAKA,IACJ,EAAE,IAAMA,GACP,EAAE,MAAQA,IACP,EAAE,QAAUA,GACX,EAAE,WAAaA,IACZ,EAAE,YAAcA,GACf,EAAE,qBAPf,IAygBoCC,CAAMxoN,GACpCd,KAAKyC,IAAI5B,GAAKb,KAAKi0D,IAAInzD,KAQjC,IAAO,WAEL,IAAID,EAAI/G,KAAS,GACbgH,EAAIhH,KAAS,GAMjB,OAAO,IAAIwS,EACHy8M,EAASloN,EAAGC,GACZd,KAAKi3C,MAAMn2C,EAAGD,KAQxB,IAAO,WAEL,OAthBiBN,EAshBJzG,KAAS,GAthBFwoB,EAshBKxoB,KAAS,GAphBhC+G,EAAIb,KAAK+sC,IAAIxsC,GACbO,EAAId,KAAK+sC,IAAIzqB,GAEbzhB,EAAI,KAAQC,EAAI,IACXd,KAAK6C,KAAKhC,EAAIA,EAAIC,EAAIA,IAG3BD,EAAIC,GACND,EAAIC,EACJA,EAAIP,EAAI+hB,GAERxhB,EAAIwhB,EAAI/hB,EAEHM,EAAIb,KAAK6C,KAAK,EAAI/B,EAAIA,IAfnB,IAASP,EAAG+hB,EAElBzhB,EACAC,GA2hBJ,IAAO,WAEL,OAAOd,KAAKi3C,MAAMn9C,KAAS,GAAGA,KAAS,KAQzC,IAAO,WAIL,IAAI+G,EAAI/G,KAAS,GACbgH,EAAIhH,KAAS,GAEjB,OAAO,IAAIwS,EACHtM,KAAKi0D,IAAIpzD,GAAK6gD,EAAK5gD,GACnBd,KAAKwhD,IAAI3gD,GAAKszD,EAAKrzD,KAQ7B,IAAO,WAIL,IAAID,EAAI/G,KAAS,GACbgH,EAAIhH,KAAS,GAEjB,OAAO,IAAIwS,EACHtM,KAAKwhD,IAAI3gD,GAAK6gD,EAAK5gD,IAClBd,KAAKi0D,IAAIpzD,GAAKszD,EAAKrzD,KAQ9B,IAAO,WAIL,IAAID,EAAI,EAAI/G,KAAS,GACjBgH,EAAI,EAAIhH,KAAS,GACjB+M,EAAI7G,KAAKwhD,IAAI3gD,GAAK6gD,EAAK5gD,GAE3B,OAAO,IAAIwL,EACHtM,KAAKi0D,IAAIpzD,GAAKgG,EACdstD,EAAKrzD,GAAK+F,IAQpB,IAAO,WAIL,IAAIhG,EAAI,EAAI/G,KAAS,GACjBgH,EAAI,EAAIhH,KAAS,GACjB+M,EAAI7G,KAAKwhD,IAAI3gD,GAAK6gD,EAAK5gD,GAE3B,OAAO,IAAIwL,GACFtM,KAAKi0D,IAAIpzD,GAAKgG,EACfstD,EAAKrzD,GAAK+F,IAQpB,IAAO,WAIL,IAAIhG,EAAI/G,KAAS,GACbgH,EAAIhH,KAAS,GACb+M,EAAI,GAAM66C,EAAK,EAAI5gD,GAAK,GAAMd,KAAKwhD,IAAI,EAAI3gD,GAE/C,OAAO,IAAIyL,EACHtM,KAAKwhD,IAAI3gD,GAAK6gD,EAAK5gD,GAAK+F,EACxB7G,KAAKi0D,IAAIpzD,GAAKszD,EAAKrzD,GAAK+F,IAQlC,IAAO,WAIL,IAAIhG,EAAI/G,KAAS,GACbgH,EAAIhH,KAAS,GACb+M,EAAI,GAAM66C,EAAK,EAAI5gD,GAAK,GAAMd,KAAKwhD,IAAI,EAAI3gD,GAE/C,OAAO,IAAIyL,EACHtM,KAAKi0D,IAAIpzD,GAAK6gD,EAAK5gD,GAAK+F,GACvB7G,KAAKwhD,IAAI3gD,GAAKszD,EAAKrzD,GAAK+F,IAQnC,KAAQ,WAIN,IAAIhG,EAAI/G,KAAS,GACbgH,EAAIhH,KAAS,GAEb6pD,EAAK,IAAIr3C,EACLxL,EAAIA,EAAID,EAAIA,EAAI,GACf,EAAIA,EAAIC,GAAS,OAEtB8iD,EAAK,IAAIt3C,EACLq3C,EAAO,GAAI7iD,EACX6iD,EAAO,GAAI9iD,GAAQ,MAE3B,OAAO,IAAIyL,EAAQs3C,EAAO,IAAIA,EAAO,KAQvC,KAAQ,WAIN,IAAI/iD,EAAI/G,KAAS,GACbgH,EAAIhH,KAAS,GAEb6pD,EAAK,IAAIr3C,EACLxL,EAAIA,EAAID,EAAIA,EAAI,GACf,EAAIA,EAAIC,GAAS,OAEtB8iD,EAAK,IAAIt3C,EACLq3C,EAAO,GAAI7iD,EACX6iD,EAAO,GAAI9iD,GAAQ,MAE3B,OAAO,IAAIyL,EAAQtM,KAAKm8D,GAAK,EAAIvY,EAAO,GAAGA,EAAO,KAQpD,KAAQ,WAIN,IAAI/iD,EAAI/G,KAAS,GACbgH,EAAIhH,KAAS,GAEjB,GAAU,IAAN+G,EAAS,CAEX,GAAU,IAANC,EACF,OAAO,IAAIwL,EAAQ,EAAG/J,KAGxB,IAAW,IAAPzB,EACF,OAAO,IAAIwL,EAAQ,GAAG,KAI1B,IAAIzF,EAAIhG,EAAIA,GAAK,EAAMC,IAAM,EAAMA,GAE/B6iD,EAAK,IAAIr3C,GACJ,EAAIxL,EAAIA,EAAID,EAAIA,GAAKgG,GACrB,EAAIhG,EAAIgG,GAAG8R,MAEpB,OAAO,IAAIrM,GAAS,GAAMq3C,EAAO,GAAG,GAAMA,EAAO,KAQnD,KAAQ,WAIN,IAAI9iD,EAAI/G,KAAS,GACbgH,EAAIhH,KAAS,GAEjB,GAAU,IAANgH,EACF,OAAO,IAAIwL,EAAQtM,KAAKi3C,MAAM,EAAGp2C,GAAI,GAGvC,IAAIgG,EAAIhG,EAAIA,EAAIC,EAAIA,EACpB,OAAc,IAAN+F,EACE,IAAIyF,EACEzL,EAAIgG,GACH/F,EAAI+F,GAAGkwC,OACd,IAAIzqC,EACS,IAANzL,EAAWA,EAAI,EAAI,EACb,IAANC,GAAYA,EAAI,EAAI,GAAGi2C,QAQ1C,KAAQ,WAIN,IAAIl2C,EAAI/G,KAAS,GACbgH,EAAIhH,KAAS,GAEjB,GAAU,IAAN+G,GAAiB,IAANC,EACb,OAAO,IAAIwL,EAAQ,EAAG/J,KAGxB,IAAIsE,EAAIhG,EAAIA,EAAIC,EAAIA,EACpB,OAAc,IAAN+F,EACE,IAAIyF,EACEzL,EAAIgG,GACH/F,EAAI+F,GAAG8uC,OACd,IAAIrpC,EACS,IAANzL,EAAWA,EAAI,EAAI,EACb,IAANC,GAAYA,EAAI,EAAI,GAAG60C,QAQ1C,KAAQ,WAIN,IAAI90C,EAAI/G,KAAS,GACbgH,EAAIhH,KAAS,GAEjB,GAAU,IAAN+G,GAAiB,IAANC,EACb,OAAO,IAAIwL,EAAQtM,KAAKm8D,GAAK,EAAG55D,KAGlC,IAAIsE,EAAIhG,EAAIA,EAAIC,EAAIA,EACpB,OAAc,IAAN+F,EACE,IAAIyF,EACEzL,EAAIgG,GACH/F,EAAI+F,GAAG8vC,OACd,IAAIrqC,EACS,IAANzL,EAAWA,EAAI,EAAI,EACb,IAANC,GAAYA,EAAI,EAAI,GAAG61C,QAQ1C,KAAQ,WAIN,IAAI91C,EAAI/G,KAAS,GACbgH,EAAIhH,KAAS,GAEjB,OAAO,IAAIwS,EACH6nD,EAAKtzD,GAAKb,KAAKwhD,IAAI1gD,GACnB4gD,EAAK7gD,GAAKb,KAAKi0D,IAAInzD,KAQ7B,KAAQ,WAIN,IAAID,EAAI/G,KAAS,GACbgH,EAAIhH,KAAS,GAEjB,OAAO,IAAIwS,EACHo1C,EAAK7gD,GAAKb,KAAKwhD,IAAI1gD,GACnBqzD,EAAKtzD,GAAKb,KAAKi0D,IAAInzD,KAQ7B,KAAQ,WAIN,IAAID,EAAI,EAAI/G,KAAS,GACjBgH,EAAI,EAAIhH,KAAS,GACjB+M,EAAI66C,EAAK7gD,GAAKb,KAAKwhD,IAAI1gD,GAE3B,OAAO,IAAIwL,EACH6nD,EAAKtzD,GAAKgG,EACV7G,KAAKi0D,IAAInzD,GAAK+F,IAQxB,KAAQ,WAIN,IAAIhG,EAAI,EAAI/G,KAAS,GACjBgH,EAAI,EAAIhH,KAAS,GACjB+M,EAAI66C,EAAK7gD,GAAKb,KAAKwhD,IAAI1gD,GAE3B,OAAO,IAAIwL,EACH6nD,EAAKtzD,GAAKgG,GACT7G,KAAKi0D,IAAInzD,GAAK+F,IAQzB,KAAQ,WAIN,IAAIhG,EAAI/G,KAAS,GACbgH,EAAIhH,KAAS,GACb+M,EAAI7G,KAAKwhD,IAAI,EAAI1gD,GAAK4gD,EAAK,EAAI7gD,GAEnC,OAAO,IAAIyL,GACF,EAAI6nD,EAAKtzD,GAAKb,KAAKwhD,IAAI1gD,GAAK+F,EAC7B,EAAI66C,EAAK7gD,GAAKb,KAAKi0D,IAAInzD,GAAK+F,IAQtC,KAAQ,WAIN,IAAIhG,EAAI/G,KAAS,GACbgH,EAAIhH,KAAS,GACb+M,EAAI7G,KAAKwhD,IAAI,EAAI1gD,GAAK4gD,EAAK,EAAI7gD,GAEnC,OAAO,IAAIyL,EACH,EAAIo1C,EAAK7gD,GAAKb,KAAKwhD,IAAI1gD,GAAK+F,GAC3B,EAAIstD,EAAKtzD,GAAKb,KAAKi0D,IAAInzD,GAAK+F,IAQvC,MAAS,WAIP,IAAI8xE,EAAM7+E,KAAS,GACnBA,KAAS,IAAKA,KAAS,GACvBA,KAAS,GAAI6+E,EACb,IAAIz2D,EAAMpoB,KAAW,OAQrB,OANAA,KAAS,IAAKA,KAAS,GACvBA,KAAS,GAAI6+E,EACbA,EAAMz2D,EAAQ,GAEdA,EAAQ,IAAKA,EAAQ,GACrBA,EAAQ,GAAIy2D,EACLz2D,GAQT,MAAS,WAIP,IAAIA,EAAMpoB,KAAW,OACrB,GAAIooB,EAAQ,IAAK,EAAG,CAClB,IAAIy2D,EAAMz2D,EAAQ,GAClBA,EAAQ,IAAKA,EAAQ,GACrBA,EAAQ,GAAIy2D,OAERA,EAAMz2D,EAAQ,GAClBA,EAAQ,IAAKA,EAAQ,GACrBA,EAAQ,GAAIy2D,EAEd,OAAOz2D,GAQT,MAAS,WAIP,IAAIrhB,EAAI/G,KAAS,GACbgH,EAAIhH,KAAS,GAEbyvN,EAAO1oN,EAAI,GAAW,IAANC,EAChB0oN,EAAW,EAAI3oN,EACf4oN,EAAU,EAAI5oN,EACdgG,EAAI2iN,EAAWA,EAAW1oN,EAAIA,EAE9BP,EAAW,IAANsG,EACC,IAAIyF,GACGm9M,EAAUD,EAAW1oN,EAAIA,GAAK+F,GAC9B/F,EAAI0oN,EAAWC,EAAU3oN,GAAK+F,GACrC,IAAIyF,GACU,IAAPzL,EAAaA,EAAI,EAAK,EAChB,IAANC,EAAYA,EAAI,EAAK,GAElChB,EAAOS,EAAM,GAMjB,OALAA,EAAM,GAAIwoN,EAASxoN,EAAM,GAAGA,EAAM,IAAK,EACvCA,EAAM,GAAIP,KAAKi3C,MAAM12C,EAAM,GAAGT,GAAQ,EAClCypN,IACFhpN,EAAM,IAAKA,EAAM,IAEZA,GAQT,MAAS,WAIP,IAAIM,EAAI/G,KAAS,GACbgH,EAAIhH,KAAS,GAEjB,GAAU,IAAN+G,GAAiB,IAANC,EACb,OAAO,IAAIwL,EAAQ,EAAGtM,KAAKm8D,GAAK,GAGlC,IAAIt1D,EAAIhG,EAAIA,EAAIC,EAAIA,EACpB,OAAc,IAAN+F,EACE,IAAIyF,EACEzL,EAAIgG,GACH/F,EAAI+F,GAAGswC,QACd,IAAI7qC,EACS,IAANzL,EAAWA,EAAI,EAAI,EACb,IAANC,GAAYA,EAAI,EAAI,GAAGq2C,SAQ1C,MAAS,WAIP,IAAIt2C,EAAI/G,KAAS,GACbgH,EAAIhH,KAAS,GAEjB,GAAU,IAANgH,EAEF,OAAO,IAAIwL,EACI,IAANzL,EACCb,KAAK2Y,IAAI9X,EAAIb,KAAK6C,KAAKhC,EAAIA,EAAI,IAC/B0B,IAAU,GAGtB,IAAIsE,EAAIhG,EAAIA,EAAIC,EAAIA,EACpB,OAAc,IAAN+F,EACE,IAAIyF,EACEzL,EAAIgG,GACH/F,EAAI+F,GAAGgwC,QACd,IAAIvqC,EACS,IAANzL,EAAWA,EAAI,EAAI,EACb,IAANC,GAAYA,EAAI,EAAI,GAAG+1C,SAQ1C,MAAS,WAIP,IAAIh2C,EAAI/G,KAAS,GACbgH,EAAIhH,KAAS,GAEjB,GAAIA,KAAa,SACf,OAAOwS,EAAkB,SAG3B,IAAIzF,EAAIhG,EAAIA,EAAIC,EAAIA,EACpB,OAAc,IAAN+F,EACE,IAAIyF,EACEzL,EAAIgG,GACH/F,EAAI+F,GAAGgvC,QACd,IAAIvpC,EACS,IAANzL,EAAWA,EAAI,EAAI,EACb,IAANC,GAAYA,EAAI,EAAI,GAAG+0C,SAQ1C,QAAW,WAGT,GAAI/7C,KAAa,SACf,OAAOwS,EAAkB,SAG3B,GAAIxS,KAAiB,aACnB,OAAOwS,EAAc,KAGvB,IAAIzL,EAAI/G,KAAS,GACbgH,EAAIhH,KAAS,GAEb+M,EAAIhG,EAAIA,EAAIC,EAAIA,EAEpB,OAAO,IAAIwL,EAAQzL,EAAIgG,GAAI/F,EAAI+F,IAQjC,UAAa,WAEX,OAAO,IAAIyF,EAAQxS,KAAS,IAAIA,KAAS,KAQ3C,IAAO,WAEL,OAAO,IAAIwS,GAASxS,KAAS,IAAIA,KAAS,KAQ5C,KAAQ,SAAS4vN,GAIf,OAFAA,EAAS1pN,KAAK0xC,IAAI,GAAIg4K,GAAU,GAEzB,IAAIp9M,EACHtM,KAAK4C,KAAK9I,KAAS,GAAI4vN,GAAUA,EACjC1pN,KAAK4C,KAAK9I,KAAS,GAAI4vN,GAAUA,IAQ3C,MAAS,SAASA,GAIhB,OAFAA,EAAS1pN,KAAK0xC,IAAI,GAAIg4K,GAAU,GAEzB,IAAIp9M,EACHtM,KAAK8H,MAAMhO,KAAS,GAAI4vN,GAAUA,EAClC1pN,KAAK8H,MAAMhO,KAAS,GAAI4vN,GAAUA,IAQ5C,MAAS,SAASA,GAIhB,OAFAA,EAAS1pN,KAAK0xC,IAAI,GAAIg4K,GAAU,GAEzB,IAAIp9M,EACHtM,KAAKsW,MAAMxc,KAAS,GAAI4vN,GAAUA,EAClC1pN,KAAKsW,MAAMxc,KAAS,GAAI4vN,GAAUA,IAU5C,OAAU,SAAS7oN,EAAGC,GAEpB,IAAI+7G,EAAI,IAAIvwG,EAAQzL,EAAGC,GAEvB,OAAOd,KAAK+sC,IAAI8vE,EAAM,GAAI/iH,KAAS,KAAMwS,EAAiB,SAClDtM,KAAK+sC,IAAI8vE,EAAM,GAAI/iH,KAAS,KAAMwS,EAAiB,SAQ7D,MAAS,WAEP,OAAO,IAAIA,EAAQxS,KAAS,GAAGA,KAAS,KAQ1C,SAAY,WAEV,IAAI+G,EAAI/G,KAAS,GACbgH,EAAIhH,KAAS,GACb8M,EAAM,GAEV,OAAI9M,KAAY,QACP,MAGLA,KAAa,SACR,IAGLA,KAAiB,aACZ,YAGC,IAAN+G,IACF+F,GAAO/F,GAGC,IAANC,IAEQ,IAAND,EACF+F,GAAO9F,EAAI,EAAI,MAAQ,MACdA,EAAI,IACb8F,GAAO,KAKL,KAFJ9F,EAAId,KAAK+sC,IAAIjsC,MAGX8F,GAAO9F,GAET8F,GAAO,KAGJA,GACI,MAUX,SAAY,WAEV,MAAO,CAAC9M,KAAS,GAAGA,KAAS,KAQ/B,QAAW,WAET,OAAmB,IAAfA,KAAS,GACJA,KAAS,GAEX,MAQT,MAAS,WACP,OAAOuL,MAAMvL,KAAS,KAAMuL,MAAMvL,KAAS,KAS7C,OAAU,WACR,QACwB,IAAfA,KAAS,KAA2B,IAAhBA,KAAS,IACd,IAAfA,KAAS,KAA2B,IAAhBA,KAAS,KAUxC,SAAY,WACV,OAAOwL,SAASxL,KAAS,KAAMwL,SAASxL,KAAS,KASnD,WAAc,WACZ,QAASA,KAAY,SAAOA,KAAe,cAI/CwS,EAAc,KAAI,IAAIA,EAAQ,EAAG,GACjCA,EAAa,IAAI,IAAIA,EAAQ,EAAG,GAChCA,EAAW,EAAI,IAAIA,EAAQ,EAAG,GAC9BA,EAAY,GAAI,IAAIA,EAAQtM,KAAKm8D,GAAI,GACrC7vD,EAAW,EAAI,IAAIA,EAAQtM,KAAK2pN,EAAG,GACnCr9M,EAAkB,SAAI,IAAIA,EAAQ/J,IAAUA,KAC5C+J,EAAa,IAAI,IAAIA,EAAQyjD,IAAKA,KAClCzjD,EAAiB,QAAI,WAKlB,KAFU,EAAF,WACP,OAAOA,GACR,QAFM,OAEN,aA90CL,I,qBCnCA,OAAC,SAAWs9M,GACV,aAiBA,IAkFEC,EAASC,EAAqBC,EAlF5BC,EAAY,KAIdC,EAAa,IAGbC,EAAW,mBAGXC,EAAO,qgCAGPhuJ,EAAK,qgCAILiuJ,EAAW,CAOT3tJ,UAAW,GAiBX4tJ,SAAU,EAeVC,OAAQ,EAIRC,UAAW,EAIXC,SAAW,GAIXC,MAAOT,EAIPU,KAAMV,EAGNW,QAAQ,GAQVC,GAAW,EAEXC,EAAe,kBACfC,EAAkBD,EAAe,qBACjCE,EAAyBF,EAAe,2BACxCG,EAAoBH,EAAe,qBAEnCI,EAAYjrN,KAAK8H,MACjBojN,EAAUlrN,KAAK0xC,IAEfvU,EAAW,6CACXguL,EAAQ,yDACRC,EAAU,gDACVC,EAAY,qCAEZC,EAAO,IAIPC,EAAiBpB,EAAK5xN,OAAS,EAC/BizN,EAAervJ,EAAG5jE,OAAS,EAG3BkzN,EAAI,CAAErtN,KAAM,oBAg1Ed,SAASstN,EAAe7kN,GACtB,IAAIrO,EAAG6lB,EAAGstM,EACRC,EAAkB/kN,EAAEtO,OAAS,EAC7Bs2B,EAAM,GACN87B,EAAI9jD,EAAE,GAER,GAAI+kN,EAAkB,EAAG,CAEvB,IADA/8L,GAAO87B,EACFnyD,EAAI,EAAGA,EAAIozN,EAAiBpzN,KAE/B6lB,EAj2EO,GAg2EPstM,EAAK9kN,EAAErO,GAAK,IACMD,UACXs2B,GAAOg9L,EAAcxtM,IAC5BwQ,GAAO88L,GAKTttM,EAx2ES,GAu2ETstM,GADAhhK,EAAI9jD,EAAErO,IACG,IACSD,UACXs2B,GAAOg9L,EAAcxtM,SACvB,GAAU,IAANssC,EACT,MAAO,IAIT,KAAOA,EAAI,IAAO,GAAIA,GAAK,GAE3B,OAAO97B,EAAM87B,EAIf,SAASmhK,EAAWtzN,EAAG8H,EAAKE,GAC1B,GAAIhI,MAAQA,GAAKA,EAAI8H,GAAO9H,EAAIgI,EAC9B,MAAMb,MAAMmrN,EAAkBtyN,GAUlC,SAASuzN,EAAoBllN,EAAGrO,EAAGwzN,EAAIC,GACrC,IAAIC,EAAI7tM,EAAGtd,EAAGorN,EAGd,IAAK9tM,EAAIxX,EAAE,GAAIwX,GAAK,GAAIA,GAAK,KAAM7lB,EAwCnC,QArCMA,EAAI,GACRA,GAz4ES,EA04ET0zN,EAAK,IAELA,EAAKlsN,KAAK4C,MAAMpK,EAAI,GA54EX,GA64ETA,GA74ES,GAm5EX6lB,EAAI6sM,EAAQ,GAn5ED,EAm5EgB1yN,GAC3B2zN,EAAKtlN,EAAEqlN,GAAM7tM,EAAI,EAEA,MAAb4tM,EACEzzN,EAAI,GACG,GAALA,EAAQ2zN,EAAKA,EAAK,IAAM,EACd,GAAL3zN,IAAQ2zN,EAAKA,EAAK,GAAK,GAChCprN,EAAIirN,EAAK,GAAW,OAANG,GAAeH,EAAK,GAAW,OAANG,GAAqB,KAANA,GAAqB,GAANA,GAErEprN,GAAKirN,EAAK,GAAKG,EAAK,GAAK9tM,GAAK2tM,EAAK,GAAKG,EAAK,GAAK9tM,EAAI,KACnDxX,EAAEqlN,EAAK,GAAK7tM,EAAI,IAAM,IAAM6sM,EAAQ,GAAI1yN,EAAI,GAAK,IAC/C2zN,GAAM9tM,EAAI,GAAW,GAAN8tM,IAAyC,IAA5BtlN,EAAEqlN,EAAK,GAAK7tM,EAAI,IAAM,GAGrD7lB,EAAI,GACG,GAALA,EAAQ2zN,EAAKA,EAAK,IAAO,EACf,GAAL3zN,EAAQ2zN,EAAKA,EAAK,IAAM,EACnB,GAAL3zN,IAAQ2zN,EAAKA,EAAK,GAAK,GAChCprN,GAAKkrN,GAAaD,EAAK,IAAY,MAANG,IAAeF,GAAaD,EAAK,GAAW,MAANG,GAEnEprN,IAAMkrN,GAAaD,EAAK,IAAMG,EAAK,GAAK9tM,IACtC4tM,GAAaD,EAAK,GAAMG,EAAK,GAAK9tM,EAAI,KACrCxX,EAAEqlN,EAAK,GAAK7tM,EAAI,IAAO,IAAM6sM,EAAQ,GAAI1yN,EAAI,GAAK,EAIlDuI,EAOT,SAASqrN,EAAYv9L,EAAKw9L,EAAQC,GAOhC,IANA,IAAI1nN,EAEF2nN,EADAl0N,EAAM,CAAC,GAEPG,EAAI,EACJg0N,EAAO39L,EAAIt2B,OAENC,EAAIg0N,GAAO,CAChB,IAAKD,EAAOl0N,EAAIE,OAAQg0N,KAASl0N,EAAIk0N,IAASF,EAE9C,IADAh0N,EAAI,IAAM6xN,EAAS/+L,QAAQ0D,EAAIs9G,OAAO3zI,MACjCoM,EAAI,EAAGA,EAAIvM,EAAIE,OAAQqM,IACtBvM,EAAIuM,GAAK0nN,EAAU,SACF,IAAfj0N,EAAIuM,EAAI,KAAevM,EAAIuM,EAAI,GAAK,GACxCvM,EAAIuM,EAAI,IAAMvM,EAAIuM,GAAK0nN,EAAU,EACjCj0N,EAAIuM,IAAM0nN,GAKhB,OAAOj0N,EAAI2qC,UAv3EbyoL,EAAEgB,cAAgBhB,EAAE1+K,IAAM,WACxB,IAAIxsC,EAAI,IAAIzG,KAAKuC,YAAYvC,MAE7B,OADIyG,EAAE4D,EAAI,IAAG5D,EAAE4D,EAAI,GACZuoN,EAASnsN,IASlBkrN,EAAE7oN,KAAO,WACP,OAAO8pN,EAAS,IAAI5yN,KAAKuC,YAAYvC,MAAOA,KAAKo2B,EAAI,EAAG,IAY1Du7L,EAAEkB,WAAalB,EAAEmB,IAAM,SAAUtqM,GAC/B,IAAI9pB,EAAGoM,EAAGioN,EAAKC,EACbvsN,EAAIzG,KACJizN,EAAKxsN,EAAEsG,EACPmmN,GAAM1qM,EAAI,IAAI/hB,EAAElE,YAAYimB,IAAIzb,EAChCygB,EAAK/mB,EAAE4D,EACPwkE,EAAKrmD,EAAEne,EAGT,IAAK4oN,IAAOC,EACV,OAAQ1lM,GAAOqhD,EAAWrhD,IAAOqhD,EAAKrhD,EAAKylM,IAAOC,EAAK,GAAKD,EAAKzlM,EAAK,EAAI,GAAK,EAA3DyoC,IAItB,IAAKg9J,EAAG,KAAOC,EAAG,GAAI,OAAOD,EAAG,GAAKzlM,EAAK0lM,EAAG,IAAMrkJ,EAAK,EAGxD,GAAIrhD,IAAOqhD,EAAI,OAAOrhD,EAGtB,GAAI/mB,EAAE2vB,IAAM5N,EAAE4N,EAAG,OAAO3vB,EAAE2vB,EAAI5N,EAAE4N,EAAI5I,EAAK,EAAI,GAAK,EAMlD,IAAK9uB,EAAI,EAAGoM,GAJZioN,EAAME,EAAGx0N,SACTu0N,EAAME,EAAGz0N,QAGmBs0N,EAAMC,EAAKt0N,EAAIoM,IAAKpM,EAC9C,GAAIu0N,EAAGv0N,KAAOw0N,EAAGx0N,GAAI,OAAOu0N,EAAGv0N,GAAKw0N,EAAGx0N,GAAK8uB,EAAK,EAAI,GAAK,EAI5D,OAAOulM,IAAQC,EAAM,EAAID,EAAMC,EAAMxlM,EAAK,EAAI,GAAK,GAiBrDmkM,EAAEh0H,OAASg0H,EAAEjqK,IAAM,WACjB,IAAIyrK,EAAIjB,EACNzrN,EAAIzG,KACJozN,EAAO3sN,EAAElE,YAEX,OAAKkE,EAAEsG,EAGFtG,EAAEsG,EAAE,IAETomN,EAAKC,EAAKzwJ,UACVuvJ,EAAKkB,EAAK7C,SACV6C,EAAKzwJ,UAAYwwJ,EAAKjtN,KAAKQ,IAAID,EAAE2vB,EAAG3vB,EAAE4sN,MArK3B,EAsKXD,EAAK7C,SAAW,EAEhB9pN,EAwyEF,SAAgB2sN,EAAM3sN,GACpB,IAAI8d,EAAGiE,EACLhqB,EAAMiI,EAAEsG,EAAEtO,OAMRD,EAAM,GAERgqB,GAAK,EAAI8qM,EAAQ,EADjB/uM,EAAIre,KAAK4C,KAAKtK,EAAM,KACI4F,YAExBmgB,EAAI,GACJiE,EAAI,gCAGN4qM,EAAKzwJ,WAAap+C,EAElB9d,EAAI8sN,EAAaH,EAAM,EAAG3sN,EAAE+sN,MAAMhrM,GAAI,IAAI4qM,EAAK,IAG/C,IAAK,IAAI10N,EAAI6lB,EAAG7lB,KAAM,CACpB,IAAI+0N,EAAQhtN,EAAE+sN,MAAM/sN,GACpBA,EAAIgtN,EAAMD,MAAMC,GAAOvG,MAAMuG,GAAOD,MAAM,GAAGrE,KAAK,GAKpD,OAFAiE,EAAKzwJ,WAAap+C,EAEX9d,EAp0EHk3F,CAAOy1H,EAAMM,EAAiBN,EAAM3sN,IAExC2sN,EAAKzwJ,UAAYwwJ,EACjBC,EAAK7C,SAAW2B,EAETU,EAAqB,GAAZ3C,GAA6B,GAAZA,EAAgBxpN,EAAE+mD,MAAQ/mD,EAAG0sN,EAAIjB,GAAI,IAZlD,IAAIkB,EAAK,GAHZ,IAAIA,EAAKn9J,MAmC5B07J,EAAEgC,SAAWhC,EAAEiC,KAAO,WACpB,IAAIx9L,EAAGD,EAAGhyB,EAAG8C,EAAG4sN,EAAKxpN,EAAGgpN,EAAIxjN,EAAGikN,EAAIC,EACjCttN,EAAIzG,KACJozN,EAAO3sN,EAAElE,YAEX,IAAKkE,EAAE+E,YAAc/E,EAAEutN,SAAU,OAAO,IAAIZ,EAAK3sN,GAoCjD,IAnCAqqN,GAAW,GAGXzmN,EAAI5D,EAAE4D,EAAI+mN,EAAQ3qN,EAAE4D,EAAI5D,EAAG,EAAI,KAIrBP,KAAK+sC,IAAI5oC,IAAM,IAqBvBpD,EAAI,IAAImsN,EAAK/oN,EAAEjG,aApBfD,EAAIytN,EAAenrN,EAAEsG,IAIjB1C,IAHJ+rB,EAAI3vB,EAAE2vB,GAGOjyB,EAAE1F,OAAS,GAAK,KAAG0F,GAAW,GAALkG,IAAgB,GAANA,EAAU,IAAM,MAChEA,EAAI+mN,EAAQjtN,EAAG,EAAI,GAGnBiyB,EAAI+6L,GAAW/6L,EAAI,GAAK,IAAMA,EAAI,IAAMA,EAAI,GAAK,EAAI,KASrDnvB,EAAI,IAAImsN,EANNjvN,EADEkG,GAAK,IACH,KAAO+rB,GAEXjyB,EAAIkG,EAAE4pN,iBACA5vN,MAAM,EAAGF,EAAEktB,QAAQ,KAAO,GAAK+E,IAIrC/rB,EAAI5D,EAAE4D,GAKVgpN,GAAMj9L,EAAIg9L,EAAKzwJ,WAAa,IAW1B,GAJAoxJ,GADAD,GADAjkN,EAAI5I,GACGusN,MAAM3jN,GAAG2jN,MAAM3jN,IACTs/M,KAAK1oN,GAClBQ,EAAIitN,EAAOH,EAAQ5E,KAAK1oN,GAAG+sN,MAAM3jN,GAAIkkN,EAAQ5E,KAAK2E,GAAKT,EAAK,EAAG,GAG3DzB,EAAe/hN,EAAE9C,GAAG1I,MAAM,EAAGgvN,MAASlvN,EAAIytN,EAAe3qN,EAAE8F,IAAI1I,MAAM,EAAGgvN,GAAK,CAK/E,GAAS,SAJTlvN,EAAIA,EAAEE,MAAMgvN,EAAK,EAAGA,EAAK,MAILQ,GAAY,QAAL1vN,GAepB,EAICA,KAAOA,EAAEE,MAAM,IAAqB,KAAfF,EAAEkuI,OAAO,MAGlCugF,EAAS3rN,EAAGmvB,EAAI,EAAG,GACnBD,GAAKlvB,EAAEusN,MAAMvsN,GAAGusN,MAAMvsN,GAAGktN,GAAG1tN,IAG9B,MAtBA,IAAKotN,IACHjB,EAAS/iN,EAAGumB,EAAI,EAAG,GAEfvmB,EAAE2jN,MAAM3jN,GAAG2jN,MAAM3jN,GAAGskN,GAAG1tN,IAAI,CAC7BQ,EAAI4I,EACJ,MAIJwjN,GAAM,EACNQ,EAAM,EAmBZ,OAFA/C,GAAW,EAEJ8B,EAAS3rN,EAAGmvB,EAAGg9L,EAAK7C,SAAUp6L,IAQvCw7L,EAAEyC,cAAgBzC,EAAE3d,GAAK,WACvB,IAAInjJ,EACF9jD,EAAI/M,KAAK+M,EACT5I,EAAI8xD,IAEN,GAAIlpD,EAAG,CAML,GAJA5I,EAtSS,IAqST0sD,EAAI9jD,EAAEtO,OAAS,GACN0yN,EAAUnxN,KAAKo2B,EAtSf,IAySTy6B,EAAI9jD,EAAE8jD,GACC,KAAOA,EAAI,IAAM,EAAGA,GAAK,GAAI1sD,IAChCA,EAAI,IAAGA,EAAI,GAGjB,OAAOA,GAyBTwtN,EAAE0C,UAAY1C,EAAEj9K,IAAM,SAAUlsB,GAC9B,OAAO0rM,EAAOl0N,KAAM,IAAIA,KAAKuC,YAAYimB,KAS3CmpM,EAAE2C,mBAAqB3C,EAAE4C,SAAW,SAAU/rM,GAC5C,IACE4qM,EADMpzN,KACGuC,YACX,OAAOqwN,EAASsB,EAFRl0N,KAEkB,IAAIozN,EAAK5qM,GAAI,EAAG,EAAG,GAAI4qM,EAAKzwJ,UAAWywJ,EAAK7C,WAQxEoB,EAAE6C,OAAS7C,EAAEwC,GAAK,SAAU3rM,GAC1B,OAAuB,IAAhBxoB,KAAK8yN,IAAItqM,IASlBmpM,EAAE3jN,MAAQ,WACR,OAAO4kN,EAAS,IAAI5yN,KAAKuC,YAAYvC,MAAOA,KAAKo2B,EAAI,EAAG,IAS1Du7L,EAAE8C,YAAc9C,EAAE+C,GAAK,SAAUlsM,GAC/B,OAAOxoB,KAAK8yN,IAAItqM,GAAK,GASvBmpM,EAAEgD,qBAAuBhD,EAAEiD,IAAM,SAAUpsM,GACzC,IAAIjE,EAAIvkB,KAAK8yN,IAAItqM,GACjB,OAAY,GAALjE,GAAgB,IAANA,GA6BnBotM,EAAEkD,iBAAmBlD,EAAE/pK,KAAO,WAC5B,IAAIrjC,EAAGpgB,EAAGgvN,EAAIjB,EAAI1zN,EAChBiI,EAAIzG,KACJozN,EAAO3sN,EAAElE,YACT09D,EAAM,IAAImzJ,EAAK,GAEjB,IAAK3sN,EAAE+E,WAAY,OAAO,IAAI4nN,EAAK3sN,EAAE4D,EAAI,IAAQ4rD,KACjD,GAAIxvD,EAAEutN,SAAU,OAAO/zJ,EAEvBkzJ,EAAKC,EAAKzwJ,UACVuvJ,EAAKkB,EAAK7C,SACV6C,EAAKzwJ,UAAYwwJ,EAAKjtN,KAAKQ,IAAID,EAAE2vB,EAAG3vB,EAAE4sN,MAAQ,EAC9CD,EAAK7C,SAAW,GAChB/xN,EAAMiI,EAAEsG,EAAEtO,QAOA,GAER0F,GAAK,EAAImvN,EAAQ,EADjB/uM,EAAIre,KAAK4C,KAAKtK,EAAM,KACI4F,YAExBmgB,EAAI,GACJpgB,EAAI,gCAGNsC,EAAI8sN,EAAaH,EAAM,EAAG3sN,EAAE+sN,MAAMrvN,GAAI,IAAIivN,EAAK,IAAI,GAMnD,IAHA,IAAI0B,EACFp2N,EAAI6lB,EACJwwM,EAAK,IAAI3B,EAAK,GACT10N,KACLo2N,EAAUruN,EAAE+sN,MAAM/sN,GAClBA,EAAIw5D,EAAIitJ,MAAM4H,EAAQtB,MAAMuB,EAAG7H,MAAM4H,EAAQtB,MAAMuB,MAGrD,OAAOnC,EAASnsN,EAAG2sN,EAAKzwJ,UAAYwwJ,EAAIC,EAAK7C,SAAW2B,GAAI,IAkC9DP,EAAEqD,eAAiBrD,EAAEt3J,KAAO,WAC1B,IAAI91C,EAAG4uM,EAAIjB,EAAI1zN,EACbiI,EAAIzG,KACJozN,EAAO3sN,EAAElE,YAEX,IAAKkE,EAAE+E,YAAc/E,EAAEutN,SAAU,OAAO,IAAIZ,EAAK3sN,GAQjD,GANA0sN,EAAKC,EAAKzwJ,UACVuvJ,EAAKkB,EAAK7C,SACV6C,EAAKzwJ,UAAYwwJ,EAAKjtN,KAAKQ,IAAID,EAAE2vB,EAAG3vB,EAAE4sN,MAAQ,EAC9CD,EAAK7C,SAAW,GAChB/xN,EAAMiI,EAAEsG,EAAEtO,QAEA,EACRgI,EAAI8sN,EAAaH,EAAM,EAAG3sN,EAAGA,GAAG,OAC3B,CAYL8d,GADAA,EAAI,IAAMre,KAAK6C,KAAKvK,IACZ,GAAK,GAAS,EAAJ+lB,EAGlB9d,EAAI8sN,EAAaH,EAAM,EADvB3sN,EAAIA,EAAE+sN,MAAM,EAAIF,EAAQ,EAAG/uM,IACE9d,GAAG,GAOhC,IAJA,IAAIwuN,EACFC,EAAK,IAAI9B,EAAK,GACd+B,EAAM,IAAI/B,EAAK,IACfgC,EAAM,IAAIhC,EAAK,IACV7uM,KACL0wM,EAAUxuN,EAAE+sN,MAAM/sN,GAClBA,EAAIA,EAAE+sN,MAAM0B,EAAG/F,KAAK8F,EAAQzB,MAAM2B,EAAI3B,MAAMyB,GAAS9F,KAAKiG,MAO9D,OAHAhC,EAAKzwJ,UAAYwwJ,EACjBC,EAAK7C,SAAW2B,EAETU,EAASnsN,EAAG0sN,EAAIjB,GAAI,IAoB7BP,EAAE0D,kBAAoB1D,EAAEnpN,KAAO,WAC7B,IAAI2qN,EAAIjB,EACNzrN,EAAIzG,KACJozN,EAAO3sN,EAAElE,YAEX,OAAKkE,EAAE+E,WACH/E,EAAEutN,SAAiB,IAAIZ,EAAK3sN,IAEhC0sN,EAAKC,EAAKzwJ,UACVuvJ,EAAKkB,EAAK7C,SACV6C,EAAKzwJ,UAAYwwJ,EAAK,EACtBC,EAAK7C,SAAW,EAET2D,EAAOztN,EAAE4zD,OAAQ5zD,EAAEmhD,OAAQwrK,EAAKzwJ,UAAYwwJ,EAAIC,EAAK7C,SAAW2B,IAR7C,IAAIkB,EAAK3sN,EAAE4D,IA+BvCsnN,EAAE2D,cAAgB3D,EAAE91K,KAAO,WACzB,IAAI05K,EACF9uN,EAAIzG,KACJozN,EAAO3sN,EAAElE,YACTgiB,EAAI9d,EAAEwsC,MAAM6/K,IAAI,GAChBK,EAAKC,EAAKzwJ,UACVuvJ,EAAKkB,EAAK7C,SAEZ,OAAW,IAAPhsM,EACW,IAANA,EAEH9d,EAAE+uN,QAAUC,EAAMrC,EAAMD,EAAIjB,GAAM,IAAIkB,EAAK,GAE3C,IAAIA,EAAKn9J,KAGXxvD,EAAEutN,SAAiByB,EAAMrC,EAAMD,EAAK,EAAGjB,GAAIsB,MAAM,KAIrDJ,EAAKzwJ,UAAYwwJ,EAAK,EACtBC,EAAK7C,SAAW,EAEhB9pN,EAAIA,EAAEo2C,OACN04K,EAASE,EAAMrC,EAAMD,EAAK,EAAGjB,GAAIsB,MAAM,IAEvCJ,EAAKzwJ,UAAYwwJ,EACjBC,EAAK7C,SAAW2B,EAETqD,EAAOrI,MAAMzmN,KAuBtBkrN,EAAE+D,wBAA0B/D,EAAE51K,MAAQ,WACpC,IAAIo3K,EAAIjB,EACNzrN,EAAIzG,KACJozN,EAAO3sN,EAAElE,YAEX,OAAIkE,EAAEkvN,IAAI,GAAW,IAAIvC,EAAK3sN,EAAE0tN,GAAG,GAAK,EAAIl+J,KACvCxvD,EAAE+E,YAEP2nN,EAAKC,EAAKzwJ,UACVuvJ,EAAKkB,EAAK7C,SACV6C,EAAKzwJ,UAAYwwJ,EAAKjtN,KAAKQ,IAAIR,KAAK+sC,IAAIxsC,EAAE2vB,GAAI3vB,EAAE4sN,MAAQ,EACxDD,EAAK7C,SAAW,EAChBO,GAAW,EAEXrqN,EAAIA,EAAE+sN,MAAM/sN,GAAGymN,MAAM,GAAGnkN,OAAOomN,KAAK1oN,GAEpCqqN,GAAW,EACXsC,EAAKzwJ,UAAYwwJ,EACjBC,EAAK7C,SAAW2B,EAETzrN,EAAEmvN,MAdiB,IAAIxC,EAAK3sN,IAkCrCkrN,EAAEkE,sBAAwBlE,EAAE50K,MAAQ,WAClC,IAAIo2K,EAAIjB,EACNzrN,EAAIzG,KACJozN,EAAO3sN,EAAElE,YAEX,OAAKkE,EAAE+E,YAAc/E,EAAEutN,SAAiB,IAAIZ,EAAK3sN,IAEjD0sN,EAAKC,EAAKzwJ,UACVuvJ,EAAKkB,EAAK7C,SACV6C,EAAKzwJ,UAAYwwJ,EAAK,EAAIjtN,KAAKQ,IAAIR,KAAK+sC,IAAIxsC,EAAE2vB,GAAI3vB,EAAE4sN,MAAQ,EAC5DD,EAAK7C,SAAW,EAChBO,GAAW,EAEXrqN,EAAIA,EAAE+sN,MAAM/sN,GAAG0oN,KAAK,GAAGpmN,OAAOomN,KAAK1oN,GAEnCqqN,GAAW,EACXsC,EAAKzwJ,UAAYwwJ,EACjBC,EAAK7C,SAAW2B,EAETzrN,EAAEmvN,OAuBXjE,EAAEmE,yBAA2BnE,EAAEt0K,MAAQ,WACrC,IAAI81K,EAAIjB,EAAI6D,EAAKC,EACfvvN,EAAIzG,KACJozN,EAAO3sN,EAAElE,YAEX,OAAKkE,EAAE+E,WACH/E,EAAE2vB,GAAK,EAAU,IAAIg9L,EAAK3sN,EAAEwsC,MAAMkhL,GAAG,GAAK1tN,EAAE4D,EAAI,EAAI5D,EAAEutN,SAAWvtN,EAAIwvD,MAEzEk9J,EAAKC,EAAKzwJ,UACVuvJ,EAAKkB,EAAK7C,SACVyF,EAAMvvN,EAAE4sN,KAEJntN,KAAKQ,IAAIsvN,EAAK7C,GAAM,GAAK1sN,EAAE2vB,EAAI,EAAUw8L,EAAS,IAAIQ,EAAK3sN,GAAI0sN,EAAIjB,GAAI,IAE3EkB,EAAKzwJ,UAAYozJ,EAAMC,EAAMvvN,EAAE2vB,EAE/B3vB,EAAIytN,EAAOztN,EAAE0oN,KAAK,GAAI,IAAIiE,EAAK,GAAGlG,MAAMzmN,GAAIsvN,EAAM5C,EAAI,GAEtDC,EAAKzwJ,UAAYwwJ,EAAK,EACtBC,EAAK7C,SAAW,EAEhB9pN,EAAIA,EAAEmvN,KAENxC,EAAKzwJ,UAAYwwJ,EACjBC,EAAK7C,SAAW2B,EAETzrN,EAAE+sN,MAAM,MArBW,IAAIJ,EAAKn9J,MA8CrC07J,EAAEsE,YAActE,EAAE90K,KAAO,WACvB,IAAI04K,EAAQhxM,EACV4uM,EAAIjB,EACJzrN,EAAIzG,KACJozN,EAAO3sN,EAAElE,YAEX,OAAIkE,EAAEutN,SAAiB,IAAIZ,EAAK3sN,IAEhC8d,EAAI9d,EAAEwsC,MAAM6/K,IAAI,GAChBK,EAAKC,EAAKzwJ,UACVuvJ,EAAKkB,EAAK7C,UAEC,IAAPhsM,EAGQ,IAANA,IACFgxM,EAASE,EAAMrC,EAAMD,EAAK,EAAGjB,GAAIsB,MAAM,KAChCnpN,EAAI5D,EAAE4D,EACNkrN,GAIF,IAAInC,EAAKn9J,MAKlBm9J,EAAKzwJ,UAAYwwJ,EAAK,EACtBC,EAAK7C,SAAW,EAEhB9pN,EAAIA,EAAEiuC,IAAI,IAAI0+K,EAAK,GAAGlG,MAAMzmN,EAAE+sN,MAAM/sN,IAAIsC,OAAOomN,KAAK,IAAIlyK,OAExDm2K,EAAKzwJ,UAAYwwJ,EACjBC,EAAK7C,SAAW2B,EAETzrN,EAAE+sN,MAAM,MAsBjB7B,EAAEuE,eAAiBvE,EAAE10K,KAAO,WAC1B,IAAIv+C,EAAGoM,EAAGyZ,EAAGpgB,EAAGgyN,EAAItmN,EAAG5I,EAAG8uN,EAAKh/J,EAC7BtwD,EAAIzG,KACJozN,EAAO3sN,EAAElE,YACT4wN,EAAKC,EAAKzwJ,UACVuvJ,EAAKkB,EAAK7C,SAEZ,GAAK9pN,EAAE+E,WAOA,IAAI/E,EAAEutN,SACX,OAAO,IAAIZ,EAAK3sN,GACX,GAAIA,EAAEwsC,MAAMkhL,GAAG,IAAMhB,EAAK,GAAKzB,EAGpC,OAFAzqN,EAAIwuN,EAAMrC,EAAMD,EAAK,EAAGjB,GAAIsB,MAAM,MAChCnpN,EAAI5D,EAAE4D,EACDpD,MAZU,CACjB,IAAKR,EAAE4D,EAAG,OAAO,IAAI+oN,EAAKn9J,KAC1B,GAAIk9J,EAAK,GAAKzB,EAGZ,OAFAzqN,EAAIwuN,EAAMrC,EAAMD,EAAK,EAAGjB,GAAIsB,MAAM,KAChCnpN,EAAI5D,EAAE4D,EACDpD,EAqBX,IAXAmsN,EAAKzwJ,UAAYozJ,EAAM5C,EAAK,GAC5BC,EAAK7C,SAAW,EAUX7xN,EAFL6lB,EAAIre,KAAKM,IAAI,GAAIuvN,EAz1BN,EAy1BuB,EAAI,GAE1Br3N,IAAKA,EAAG+H,EAAIA,EAAEiuC,IAAIjuC,EAAE+sN,MAAM/sN,GAAG0oN,KAAK,GAAGpmN,OAAOomN,KAAK,IAW7D,IATA2B,GAAW,EAEXhmN,EAAI5E,KAAK4C,KAAKitN,EA/1BH,GAg2BX5xN,EAAI,EACJ4yD,EAAKtwD,EAAE+sN,MAAM/sN,GACbQ,EAAI,IAAImsN,EAAK3sN,GACb0vN,EAAK1vN,GAGS,IAAP/H,GAOL,GANAy3N,EAAKA,EAAG3C,MAAMz8J,GACdlnD,EAAI5I,EAAEimN,MAAMiJ,EAAGzhL,IAAIvwC,GAAK,IAExBgyN,EAAKA,EAAG3C,MAAMz8J,QAGC,KAFf9vD,EAAI4I,EAAEs/M,KAAKgH,EAAGzhL,IAAIvwC,GAAK,KAEjB4I,EAAEjC,GAAe,IAAKpM,EAAIoM,EAAG7D,EAAE8F,EAAErO,KAAOmR,EAAE9C,EAAErO,IAAMA,MAO1D,OAJI6lB,IAAGtd,EAAIA,EAAEusN,MAAM,GAAMjvM,EAAI,IAE7BusM,GAAW,EAEJ8B,EAAS3rN,EAAGmsN,EAAKzwJ,UAAYwwJ,EAAIC,EAAK7C,SAAW2B,GAAI,IAQ9DP,EAAEnmN,SAAW,WACX,QAASxL,KAAK+M,GAQhB4kN,EAAE/jN,UAAY+jN,EAAEppN,MAAQ,WACtB,QAASvI,KAAK+M,GAAKokN,EAAUnxN,KAAKo2B,EAt4BvB,GAs4BuCp2B,KAAK+M,EAAEtO,OAAS,GAQpEkzN,EAAEpmN,MAAQ,WACR,OAAQvL,KAAKqK,GAQfsnN,EAAEyE,WAAazE,EAAE6D,MAAQ,WACvB,OAAOx1N,KAAKqK,EAAI,GAQlBsnN,EAAE5tI,WAAa4tI,EAAE0E,MAAQ,WACvB,OAAOr2N,KAAKqK,EAAI,GAQlBsnN,EAAEqC,OAAS,WACT,QAASh0N,KAAK+M,GAAmB,IAAd/M,KAAK+M,EAAE,IAQ5B4kN,EAAE2E,SAAW3E,EAAE4E,GAAK,SAAU/tM,GAC5B,OAAOxoB,KAAK8yN,IAAItqM,GAAK,GAQvBmpM,EAAE6E,kBAAoB7E,EAAEgE,IAAM,SAAUntM,GACtC,OAAOxoB,KAAK8yN,IAAItqM,GAAK,GAkCvBmpM,EAAE8E,UAAY9E,EAAE9yM,IAAM,SAAUld,GAC9B,IAAI+0N,EAAU3pN,EAAGmwF,EAAa34E,EAAGoyM,EAAKrrN,EAAK+nN,EAAIpsN,EAC7CzH,EAAMQ,KACNozN,EAAO5zN,EAAI+C,YACX4wN,EAAKC,EAAKzwJ,UACVuvJ,EAAKkB,EAAK7C,SAIZ,GAAY,MAAR5uN,EACFA,EAAO,IAAIyxN,EAAK,IAChBsD,GAAW,MACN,CAKL,GAHA3pN,GADApL,EAAO,IAAIyxN,EAAKzxN,IACPoL,EAGLpL,EAAK0I,EAAI,IAAM0C,IAAMA,EAAE,IAAMpL,EAAKwyN,GAAG,GAAI,OAAO,IAAIf,EAAKn9J,KAE7DygK,EAAW/0N,EAAKwyN,GAAG,IAMrB,GAHApnN,EAAIvN,EAAIuN,EAGJvN,EAAI6K,EAAI,IAAM0C,IAAMA,EAAE,IAAMvN,EAAI20N,GAAG,GACrC,OAAO,IAAIf,EAAKrmN,IAAMA,EAAE,IAAK,IAAkB,GAATvN,EAAI6K,EAAS4rD,IAAMlpD,EAAI,EAAI,KAKnE,GAAI2pN,EACF,GAAI3pN,EAAEtO,OAAS,EACbk4N,GAAM,MACD,CACL,IAAKpyM,EAAIxX,EAAE,GAAIwX,EAAI,IAAO,GAAIA,GAAK,GACnCoyM,EAAY,IAANpyM,EA0BV,GAtBAusM,GAAW,EAEXxlN,EAAMsrN,EAAiBp3N,EADvB6zN,EAAKF,EAnCK,GAqCVj2H,EAAcw5H,EAAWG,EAAQzD,EAAMC,EAAK,IAAMuD,EAAiBj1N,EAAM0xN,GAmBrEpB,GAhBJhrN,EAAIitN,EAAO5oN,EAAK4xF,EAAam2H,EAAI,IAgBPtmN,EAAGwX,EAAI4uM,EAAIjB,GAEnC,GAME,GAJA5mN,EAAMsrN,EAAiBp3N,EADvB6zN,GAAM,IAENn2H,EAAcw5H,EAAWG,EAAQzD,EAAMC,EAAK,IAAMuD,EAAiBj1N,EAAM0xN,GACzEpsN,EAAIitN,EAAO5oN,EAAK4xF,EAAam2H,EAAI,IAE5BsD,EAAK,EAGH/E,EAAe3qN,EAAE8F,GAAG1I,MAAMkgB,EAAI,EAAGA,EAAI,IAAM,GAAK,OACnDtd,EAAI2rN,EAAS3rN,EAAGksN,EAAK,EAAG,IAG1B,aAEKlB,EAAoBhrN,EAAE8F,EAAGwX,GAAK,GAAI2tM,IAK7C,OAFApB,GAAW,EAEJ8B,EAAS3rN,EAAGksN,EAAIjB,IAiDzBP,EAAEzE,MAAQyE,EAAE35K,IAAM,SAAUxvB,GAC1B,IAAIzb,EAAGqpB,EAAG13B,EAAGoM,EAAGyZ,EAAG/lB,EAAK20N,EAAIjB,EAAIe,EAAI6D,EAAIC,EAAM7D,EAC5CzsN,EAAIzG,KACJozN,EAAO3sN,EAAElE,YAKX,GAHAimB,EAAI,IAAI4qM,EAAK5qM,IAGR/hB,EAAEsG,IAAMyb,EAAEzb,EAab,OAVKtG,EAAE4D,GAAMme,EAAEne,EAGN5D,EAAEsG,EAAGyb,EAAEne,GAAKme,EAAEne,EAKlBme,EAAI,IAAI4qM,EAAK5qM,EAAEzb,GAAKtG,EAAE4D,IAAMme,EAAEne,EAAI5D,EAAIwvD,KARzBztC,EAAI,IAAI4qM,EAAKn9J,KAUxBztC,EAIT,GAAI/hB,EAAE4D,GAAKme,EAAEne,EAEX,OADAme,EAAEne,GAAKme,EAAEne,EACF5D,EAAE0oN,KAAK3mM,GAShB,GANAyqM,EAAKxsN,EAAEsG,EACPmmN,EAAK1qM,EAAEzb,EACPomN,EAAKC,EAAKzwJ,UACVuvJ,EAAKkB,EAAK7C,UAGL0C,EAAG,KAAOC,EAAG,GAAI,CAGpB,GAAIA,EAAG,GAAI1qM,EAAEne,GAAKme,EAAEne,MAGf,KAAI4oN,EAAG,GAIP,OAAO,IAAIG,EAAY,IAAPlB,GAAY,EAAI,GAJrB1pM,EAAI,IAAI4qM,EAAK3sN,GAM7B,OAAOqqN,EAAW8B,EAASpqM,EAAG2qM,EAAIjB,GAAM1pM,EAa1C,GAPA4N,EAAI+6L,EAAU3oM,EAAE4N,EAzpCL,GA0pCX0gM,EAAK3F,EAAU1qN,EAAE2vB,EA1pCN,GA4pCX68L,EAAKA,EAAG5uN,QACRkgB,EAAIuyM,EAAK1gM,EAGF,CAyBL,KAxBA2gM,EAAOxyM,EAAI,IAGTxX,EAAIkmN,EACJ1uM,GAAKA,EACL/lB,EAAM00N,EAAGz0N,SAETsO,EAAImmN,EACJ98L,EAAI0gM,EACJt4N,EAAMy0N,EAAGx0N,QAQP8lB,GAFJ7lB,EAAIwH,KAAKQ,IAAIR,KAAK4C,KAAKqqN,EAhrCd,GAgrC8B30N,GAAO,KAG5C+lB,EAAI7lB,EACJqO,EAAEtO,OAAS,GAIbsO,EAAEm8B,UACGxqC,EAAI6lB,EAAG7lB,KAAMqO,EAAE5J,KAAK,GACzB4J,EAAEm8B,cAGG,CASL,KAHA6tL,GAFAr4N,EAAIu0N,EAAGx0N,SACPD,EAAM00N,EAAGz0N,WAECD,EAAME,GAEXA,EAAI,EAAGA,EAAIF,EAAKE,IACnB,GAAIu0N,EAAGv0N,IAAMw0N,EAAGx0N,GAAI,CAClBq4N,EAAO9D,EAAGv0N,GAAKw0N,EAAGx0N,GAClB,MAIJ6lB,EAAI,EAcN,IAXIwyM,IACFhqN,EAAIkmN,EACJA,EAAKC,EACLA,EAAKnmN,EACLyb,EAAEne,GAAKme,EAAEne,GAGX7L,EAAMy0N,EAAGx0N,OAIJC,EAAIw0N,EAAGz0N,OAASD,EAAKE,EAAI,IAAKA,EAAGu0N,EAAGz0N,KAAS,EAGlD,IAAKE,EAAIw0N,EAAGz0N,OAAQC,EAAI6lB,GAAI,CAE1B,GAAI0uM,IAAKv0N,GAAKw0N,EAAGx0N,GAAI,CACnB,IAAKoM,EAAIpM,EAAGoM,GAAiB,IAAZmoN,IAAKnoN,IAAWmoN,EAAGnoN,GAAK0mN,EAAO,IAC9CyB,EAAGnoN,GACLmoN,EAAGv0N,IAAM8yN,EAGXyB,EAAGv0N,IAAMw0N,EAAGx0N,GAId,KAAqB,IAAdu0N,IAAKz0N,IAAay0N,EAAG3lM,MAG5B,KAAiB,IAAV2lM,EAAG,GAAUA,EAAG7vF,UAAWhtG,EAGlC,OAAK68L,EAAG,IAERzqM,EAAEzb,EAAIkmN,EACNzqM,EAAE4N,EAAI4gM,EAAkB/D,EAAI78L,GAErB06L,EAAW8B,EAASpqM,EAAG2qM,EAAIjB,GAAM1pM,GALrB,IAAI4qM,EAAY,IAAPlB,GAAY,EAAI,IAiC9CP,EAAEnB,OAASmB,EAAErgK,IAAM,SAAU9oC,GAC3B,IAAI0mD,EACFzoE,EAAIzG,KACJozN,EAAO3sN,EAAElE,YAKX,OAHAimB,EAAI,IAAI4qM,EAAK5qM,IAGR/hB,EAAEsG,IAAMyb,EAAEne,GAAKme,EAAEzb,IAAMyb,EAAEzb,EAAE,GAAW,IAAIqmN,EAAKn9J,MAG/CztC,EAAEzb,GAAKtG,EAAEsG,IAAMtG,EAAEsG,EAAE,GACf6lN,EAAS,IAAIQ,EAAK3sN,GAAI2sN,EAAKzwJ,UAAWywJ,EAAK7C,WAIpDO,GAAW,EAEQ,GAAfsC,EAAK5C,QAIPthJ,EAAIglJ,EAAOztN,EAAG+hB,EAAEyqB,MAAO,EAAG,EAAG,IAC3B5oC,GAAKme,EAAEne,EAET6kE,EAAIglJ,EAAOztN,EAAG+hB,EAAG,EAAG4qM,EAAK5C,OAAQ,GAGnCthJ,EAAIA,EAAEskJ,MAAMhrM,GAEZsoM,GAAW,EAEJrqN,EAAEymN,MAAMh+I,KAUjByiJ,EAAEsF,mBAAqBtF,EAAEhpN,IAAM,WAC7B,OAAOsuN,EAAmBj3N,OAS5B2xN,EAAEiF,iBAAmBjF,EAAEiE,GAAK,WAC1B,OAAOgB,EAAiB52N,OAS1B2xN,EAAEuF,QAAUvF,EAAEnkK,IAAM,WAClB,IAAI/mD,EAAI,IAAIzG,KAAKuC,YAAYvC,MAE7B,OADAyG,EAAE4D,GAAK5D,EAAE4D,EACFuoN,EAASnsN,IAyBlBkrN,EAAExC,KAAOwC,EAAEntM,IAAM,SAAUgE,GACzB,IAAI2uM,EAAOpqN,EAAGqpB,EAAG13B,EAAG6lB,EAAG/lB,EAAK20N,EAAIjB,EAAIe,EAAIC,EACtCzsN,EAAIzG,KACJozN,EAAO3sN,EAAElE,YAKX,GAHAimB,EAAI,IAAI4qM,EAAK5qM,IAGR/hB,EAAEsG,IAAMyb,EAAEzb,EAWb,OARKtG,EAAE4D,GAAMme,EAAEne,EAML5D,EAAEsG,IAAGyb,EAAI,IAAI4qM,EAAK5qM,EAAEzb,GAAKtG,EAAE4D,IAAMme,EAAEne,EAAI5D,EAAIwvD,MANnCztC,EAAI,IAAI4qM,EAAKn9J,KAQxBztC,EAIT,GAAI/hB,EAAE4D,GAAKme,EAAEne,EAEX,OADAme,EAAEne,GAAKme,EAAEne,EACF5D,EAAEymN,MAAM1kM,GASjB,GANAyqM,EAAKxsN,EAAEsG,EACPmmN,EAAK1qM,EAAEzb,EACPomN,EAAKC,EAAKzwJ,UACVuvJ,EAAKkB,EAAK7C,UAGL0C,EAAG,KAAOC,EAAG,GAMhB,OAFKA,EAAG,KAAI1qM,EAAI,IAAI4qM,EAAK3sN,IAElBqqN,EAAW8B,EAASpqM,EAAG2qM,EAAIjB,GAAM1pM,EAa1C,GAPAjE,EAAI4sM,EAAU1qN,EAAE2vB,EAz5CL,GA05CXA,EAAI+6L,EAAU3oM,EAAE4N,EA15CL,GA45CX68L,EAAKA,EAAG5uN,QACR3F,EAAI6lB,EAAI6R,EAGD,CAuBL,IArBI13B,EAAI,GACNqO,EAAIkmN,EACJv0N,GAAKA,EACLF,EAAM00N,EAAGz0N,SAETsO,EAAImmN,EACJ98L,EAAI7R,EACJ/lB,EAAMy0N,EAAGx0N,QAOPC,GAFJF,GADA+lB,EAAIre,KAAK4C,KAAKqqN,EA76CL,IA86CC30N,EAAM+lB,EAAI,EAAI/lB,EAAM,KAG5BE,EAAIF,EACJuO,EAAEtO,OAAS,GAIbsO,EAAEm8B,UACKxqC,KAAMqO,EAAE5J,KAAK,GACpB4J,EAAEm8B,UAeJ,KAZA1qC,EAAMy0N,EAAGx0N,SACTC,EAAIw0N,EAAGz0N,QAGO,IACZC,EAAIF,EACJuO,EAAImmN,EACJA,EAAKD,EACLA,EAAKlmN,GAIFoqN,EAAQ,EAAGz4N,GACdy4N,GAASlE,IAAKv0N,GAAKu0N,EAAGv0N,GAAKw0N,EAAGx0N,GAAKy4N,GAAS3F,EAAO,EACnDyB,EAAGv0N,IAAM8yN,EAUX,IAPI2F,IACFlE,EAAGz5K,QAAQ29K,KACT/gM,GAKC53B,EAAMy0N,EAAGx0N,OAAqB,GAAbw0N,IAAKz0N,IAAYy0N,EAAG3lM,MAK1C,OAHA9E,EAAEzb,EAAIkmN,EACNzqM,EAAE4N,EAAI4gM,EAAkB/D,EAAI78L,GAErB06L,EAAW8B,EAASpqM,EAAG2qM,EAAIjB,GAAM1pM,GAU1CmpM,EAAEhvJ,UAAYgvJ,EAAE0B,GAAK,SAAUtwG,GAC7B,IAAIx+F,EACF9d,EAAIzG,KAEN,QAAU,IAAN+iH,GAAgBA,MAAQA,GAAW,IAANA,GAAiB,IAANA,EAAS,MAAMl9G,MAAMmrN,EAAkBjuG,GASnF,OAPIt8G,EAAEsG,GACJwX,EAAI6yM,EAAa3wN,EAAEsG,GACfg2G,GAAKt8G,EAAE2vB,EAAI,EAAI7R,IAAGA,EAAI9d,EAAE2vB,EAAI,IAEhC7R,EAAI0xC,IAGC1xC,GASTotM,EAAEn1M,MAAQ,WACR,IAAI/V,EAAIzG,KACNozN,EAAO3sN,EAAElE,YAEX,OAAOqwN,EAAS,IAAIQ,EAAK3sN,GAAIA,EAAE2vB,EAAI,EAAGg9L,EAAK7C,WAmB7CoB,EAAE0F,KAAO1F,EAAEx3J,IAAM,WACf,IAAIg5J,EAAIjB,EACNzrN,EAAIzG,KACJozN,EAAO3sN,EAAElE,YAEX,OAAKkE,EAAE+E,WACH/E,EAAEutN,SAAiB,IAAIZ,EAAK3sN,IAEhC0sN,EAAKC,EAAKzwJ,UACVuvJ,EAAKkB,EAAK7C,SACV6C,EAAKzwJ,UAAYwwJ,EAAKjtN,KAAKQ,IAAID,EAAE2vB,EAAG3vB,EAAE4sN,MAzhD3B,EA0hDXD,EAAK7C,SAAW,EAEhB9pN,EA67DF,SAAc2sN,EAAM3sN,GAClB,IAAI8d,EACF/lB,EAAMiI,EAAEsG,EAAEtO,OAEZ,GAAID,EAAM,EAAG,OAAO+0N,EAAaH,EAAM,EAAG3sN,EAAGA,GAQ7C8d,GADAA,EAAI,IAAMre,KAAK6C,KAAKvK,IACZ,GAAK,GAAS,EAAJ+lB,EAGlB9d,EAAI8sN,EAAaH,EAAM,EADvB3sN,EAAIA,EAAE+sN,MAAM,EAAIF,EAAQ,EAAG/uM,IACE9d,GAO7B,IAJA,IAAI6wN,EACFpC,EAAK,IAAI9B,EAAK,GACd+B,EAAM,IAAI/B,EAAK,IACfgC,EAAM,IAAIhC,EAAK,IACV7uM,KACL+yM,EAAS7wN,EAAE+sN,MAAM/sN,GACjBA,EAAIA,EAAE+sN,MAAM0B,EAAG/F,KAAKmI,EAAO9D,MAAM2B,EAAI3B,MAAM8D,GAAQpK,MAAMkI,MAG3D,OAAO3uN,EAx9DH4wN,CAAKjE,EAAMM,EAAiBN,EAAM3sN,IAEtC2sN,EAAKzwJ,UAAYwwJ,EACjBC,EAAK7C,SAAW2B,EAETU,EAAS3C,EAAW,EAAIxpN,EAAE+mD,MAAQ/mD,EAAG0sN,EAAIjB,GAAI,IAb1B,IAAIkB,EAAKn9J,MA6BrC07J,EAAE4F,WAAa5F,EAAE5oN,KAAO,WACtB,IAAIotB,EAAGhyB,EAAGkvN,EAAIpsN,EAAG4sN,EAAKhkN,EACpBpJ,EAAIzG,KACJ+M,EAAItG,EAAEsG,EACNqpB,EAAI3vB,EAAE2vB,EACN/rB,EAAI5D,EAAE4D,EACN+oN,EAAO3sN,EAAElE,YAGX,GAAU,IAAN8H,IAAY0C,IAAMA,EAAE,GACtB,OAAO,IAAIqmN,GAAM/oN,GAAKA,EAAI,KAAO0C,GAAKA,EAAE,IAAMkpD,IAAMlpD,EAAItG,EAAI,KAgC9D,IA7BAqqN,GAAW,EAOF,IAJTzmN,EAAInE,KAAK6C,MAAMtC,KAID4D,GAAK,OACjBlG,EAAIytN,EAAe7kN,IAEZtO,OAAS23B,GAAK,GAAK,IAAGjyB,GAAK,KAClCkG,EAAInE,KAAK6C,KAAK5E,GACdiyB,EAAI+6L,GAAW/6L,EAAI,GAAK,IAAMA,EAAI,GAAKA,EAAI,GAS3CnvB,EAAI,IAAImsN,EANNjvN,EADEkG,GAAK,IACH,KAAO+rB,GAEXjyB,EAAIkG,EAAE4pN,iBACA5vN,MAAM,EAAGF,EAAEktB,QAAQ,KAAO,GAAK+E,IAKvCnvB,EAAI,IAAImsN,EAAK/oN,EAAEjG,YAGjBivN,GAAMj9L,EAAIg9L,EAAKzwJ,WAAa,IAQ1B,GAHA17D,GADA4I,EAAI5I,GACEkoN,KAAK+E,EAAOztN,EAAGoJ,EAAGwjN,EAAK,EAAG,IAAIG,MAAM,IAGtC5B,EAAe/hN,EAAE9C,GAAG1I,MAAM,EAAGgvN,MAASlvN,EAAIytN,EAAe3qN,EAAE8F,IAAI1I,MAAM,EAAGgvN,GAAK,CAK/E,GAAS,SAJTlvN,EAAIA,EAAEE,MAAMgvN,EAAK,EAAGA,EAAK,MAILQ,GAAY,QAAL1vN,GAepB,EAICA,KAAOA,EAAEE,MAAM,IAAqB,KAAfF,EAAEkuI,OAAO,MAGlCugF,EAAS3rN,EAAGmvB,EAAI,EAAG,GACnBD,GAAKlvB,EAAEusN,MAAMvsN,GAAGktN,GAAG1tN,IAGrB,MAtBA,IAAKotN,IACHjB,EAAS/iN,EAAGumB,EAAI,EAAG,GAEfvmB,EAAE2jN,MAAM3jN,GAAGskN,GAAG1tN,IAAI,CACpBQ,EAAI4I,EACJ,MAIJwjN,GAAM,EACNQ,EAAM,EAmBZ,OAFA/C,GAAW,EAEJ8B,EAAS3rN,EAAGmvB,EAAGg9L,EAAK7C,SAAUp6L,IAiBvCw7L,EAAE6F,QAAU7F,EAAEz0J,IAAM,WAClB,IAAIi2J,EAAIjB,EACNzrN,EAAIzG,KACJozN,EAAO3sN,EAAElE,YAEX,OAAKkE,EAAE+E,WACH/E,EAAEutN,SAAiB,IAAIZ,EAAK3sN,IAEhC0sN,EAAKC,EAAKzwJ,UACVuvJ,EAAKkB,EAAK7C,SACV6C,EAAKzwJ,UAAYwwJ,EAAK,GACtBC,EAAK7C,SAAW,GAEhB9pN,EAAIA,EAAE0zD,OACJ9vD,EAAI,EACN5D,EAAIytN,EAAOztN,EAAG,IAAI2sN,EAAK,GAAGlG,MAAMzmN,EAAE+sN,MAAM/sN,IAAIsC,OAAQoqN,EAAK,GAAI,GAE7DC,EAAKzwJ,UAAYwwJ,EACjBC,EAAK7C,SAAW2B,EAETU,EAAqB,GAAZ3C,GAA6B,GAAZA,EAAgBxpN,EAAE+mD,MAAQ/mD,EAAG0sN,EAAIjB,GAAI,IAf5C,IAAIkB,EAAKn9J,MAwCrC07J,EAAE6B,MAAQ7B,EAAE/8K,IAAM,SAAUpsB,GAC1B,IAAI2uM,EAAO/gM,EAAG13B,EAAG6lB,EAAGtd,EAAGwwN,EAAI5nN,EAAGkjN,EAAKC,EACjCvsN,EAAIzG,KACJozN,EAAO3sN,EAAElE,YACT0wN,EAAKxsN,EAAEsG,EACPmmN,GAAM1qM,EAAI,IAAI4qM,EAAK5qM,IAAIzb,EAKzB,GAHAyb,EAAEne,GAAK5D,EAAE4D,IAGJ4oN,GAAOA,EAAG,IAAOC,GAAOA,EAAG,IAE9B,OAAO,IAAIE,GAAM5qM,EAAEne,GAAK4oN,IAAOA,EAAG,KAAOC,GAAMA,IAAOA,EAAG,KAAOD,EAI5Dh9J,IAICg9J,GAAOC,EAAqB,EAAN1qM,EAAEne,EAAZme,EAAEne,EAAI,GAoBzB,IAjBA+rB,EAAI+6L,EAAU1qN,EAAE2vB,EA3tDL,GA2tDqB+6L,EAAU3oM,EAAE4N,EA3tDjC,IA4tDX28L,EAAME,EAAGx0N,SACTu0N,EAAME,EAAGz0N,UAIPwI,EAAIgsN,EACJA,EAAKC,EACLA,EAAKjsN,EACLwwN,EAAK1E,EACLA,EAAMC,EACNA,EAAMyE,GAIRxwN,EAAI,GAECvI,EADL+4N,EAAK1E,EAAMC,EACEt0N,KAAMuI,EAAE9D,KAAK,GAG1B,IAAKzE,EAAIs0N,IAAOt0N,GAAK,GAAI,CAEvB,IADAy4N,EAAQ,EACH5yM,EAAIwuM,EAAMr0N,EAAG6lB,EAAI7lB,GACpBmR,EAAI5I,EAAEsd,GAAK2uM,EAAGx0N,GAAKu0N,EAAG1uM,EAAI7lB,EAAI,GAAKy4N,EACnClwN,EAAEsd,KAAO1U,EAAI2hN,EAAO,EACpB2F,EAAQtnN,EAAI2hN,EAAO,EAGrBvqN,EAAEsd,IAAMtd,EAAEsd,GAAK4yM,GAAS3F,EAAO,EAIjC,MAAQvqN,IAAIwwN,IAAMxwN,EAAEqmB,MAQpB,OANI6pM,IAAS/gM,EACRnvB,EAAEm8H,QAEP56G,EAAEzb,EAAI9F,EACNuhB,EAAE4N,EAAI4gM,EAAkB/vN,EAAGmvB,GAEpB06L,EAAW8B,EAASpqM,EAAG4qM,EAAKzwJ,UAAWywJ,EAAK7C,UAAY/nM,GAcjEmpM,EAAE+F,SAAW,SAAUrE,EAAInB,GACzB,OAAOyF,EAAe33N,KAAM,EAAGqzN,EAAInB,IAcrCP,EAAEiG,gBAAkBjG,EAAEkG,KAAO,SAAU7jB,EAAIke,GACzC,IAAIzrN,EAAIzG,KACNozN,EAAO3sN,EAAElE,YAGX,OADAkE,EAAI,IAAI2sN,EAAK3sN,QACF,IAAPutM,EAAsBvtM,GAE1BurN,EAAWhe,EAAI,EAAGmc,QAEP,IAAP+B,EAAeA,EAAKkB,EAAK7C,SACxByB,EAAWE,EAAI,EAAG,GAEhBU,EAASnsN,EAAGutM,EAAKvtM,EAAE2vB,EAAI,EAAG87L,KAYnCP,EAAEsC,cAAgB,SAAUjgB,EAAIke,GAC9B,IAAIn9L,EACFtuB,EAAIzG,KACJozN,EAAO3sN,EAAElE,YAcX,YAZW,IAAPyxM,EACFj/K,EAAM+iM,EAAerxN,GAAG,IAExBurN,EAAWhe,EAAI,EAAGmc,QAEP,IAAP+B,EAAeA,EAAKkB,EAAK7C,SACxByB,EAAWE,EAAI,EAAG,GAGvBn9L,EAAM+iM,EADNrxN,EAAImsN,EAAS,IAAIQ,EAAK3sN,GAAIutM,EAAK,EAAGke,IACV,EAAMle,EAAK,IAG9BvtM,EAAE+uN,UAAY/uN,EAAEutN,SAAW,IAAMj/L,EAAMA,GAoBhD48L,EAAE5xM,QAAU,SAAUi0L,EAAIke,GACxB,IAAIn9L,EAAKvM,EACP/hB,EAAIzG,KACJozN,EAAO3sN,EAAElE,YAgBX,YAdW,IAAPyxM,EACFj/K,EAAM+iM,EAAerxN,IAErBurN,EAAWhe,EAAI,EAAGmc,QAEP,IAAP+B,EAAeA,EAAKkB,EAAK7C,SACxByB,EAAWE,EAAI,EAAG,GAGvBn9L,EAAM+iM,EADNtvM,EAAIoqM,EAAS,IAAIQ,EAAK3sN,GAAIutM,EAAKvtM,EAAE2vB,EAAI,EAAG87L,IAChB,EAAOle,EAAKxrL,EAAE4N,EAAI,IAKrC3vB,EAAE+uN,UAAY/uN,EAAEutN,SAAW,IAAMj/L,EAAMA,GAehD48L,EAAEoG,WAAa,SAAUl6D,GACvB,IAAI9wJ,EAAGirN,EAAIzrE,EAAIE,EAAIr2H,EAAG7R,EAAGpgB,EAAG8zN,EAAI5vN,EAAI8qN,EAAIjkJ,EAAGjoE,EACzCR,EAAIzG,KACJizN,EAAKxsN,EAAEsG,EACPqmN,EAAO3sN,EAAElE,YAEX,IAAK0wN,EAAI,OAAO,IAAIG,EAAK3sN,GAUzB,GARA4B,EAAK2vN,EAAK,IAAI5E,EAAK,GACnB7mE,EAAK0rE,EAAK,IAAI7E,EAAK,GAInB7uM,GADA6R,GADArpB,EAAI,IAAIqmN,EAAK7mE,IACPn2H,EAAIghM,EAAanE,GAAMxsN,EAAE2vB,EAAI,GA34DxB,EA64DXrpB,EAAEA,EAAE,GAAKqkN,EAAQ,GAAI7sM,EAAI,EA74Dd,EA64D6BA,EAAIA,GAEhC,MAARs5I,EAGFA,EAAOznI,EAAI,EAAIrpB,EAAI1E,MACd,CAEL,KADAlE,EAAI,IAAIivN,EAAKv1D,IACNt1J,SAAWpE,EAAEoyN,GAAGluN,GAAK,MAAMxC,MAAMmrN,EAAkB7sN,GAC1D05J,EAAO15J,EAAEuwN,GAAG3nN,GAAMqpB,EAAI,EAAIrpB,EAAI1E,EAAMlE,EAQtC,IALA2sN,GAAW,EACX3sN,EAAI,IAAIivN,EAAKxB,EAAeqB,IAC5BE,EAAKC,EAAKzwJ,UACVywJ,EAAKzwJ,UAAYvsC,EA55DN,EA45DU68L,EAAGx0N,OAAoB,EAG1CywE,EAAIglJ,EAAO/vN,EAAG4I,EAAG,EAAG,EAAG,GAEH,IADpB0/I,EAAKurE,EAAG7I,KAAKjgJ,EAAEskJ,MAAMjnE,KACdumE,IAAIj1D,IACXm6D,EAAKzrE,EACLA,EAAKE,EACLA,EAAKpkJ,EACLA,EAAK4vN,EAAG9I,KAAKjgJ,EAAEskJ,MAAM/mE,IACrBwrE,EAAKxrE,EACLA,EAAK1/I,EACLA,EAAI5I,EAAE+oN,MAAMh+I,EAAEskJ,MAAM/mE,IACpBtoJ,EAAIsoJ,EAeN,OAZAA,EAAKynE,EAAOr2D,EAAKqvD,MAAM8K,GAAKzrE,EAAI,EAAG,EAAG,GACtC0rE,EAAKA,EAAG9I,KAAK1iE,EAAG+mE,MAAMnrN,IACtB2vN,EAAKA,EAAG7I,KAAK1iE,EAAG+mE,MAAMjnE,IACtB0rE,EAAG5tN,EAAIhC,EAAGgC,EAAI5D,EAAE4D,EAGhBpD,EAAIitN,EAAO7rN,EAAIkkJ,EAAIn2H,EAAG,GAAG82L,MAAMzmN,GAAGwsC,MAAM6/K,IAAIoB,EAAO+D,EAAID,EAAI5hM,EAAG,GAAG82L,MAAMzmN,GAAGwsC,OAAS,EAC7E,CAAC5qC,EAAIkkJ,GAAM,CAAC0rE,EAAID,GAEtB5E,EAAKzwJ,UAAYwwJ,EACjBrC,GAAW,EAEJ7pN,GAcT0qN,EAAEuG,cAAgBvG,EAAEwG,MAAQ,SAAU9E,EAAInB,GACxC,OAAOyF,EAAe33N,KAAM,GAAIqzN,EAAInB,IAoBtCP,EAAEyG,UAAY,SAAU5vM,EAAG0pM,GACzB,IAAIzrN,EAAIzG,KACNozN,EAAO3sN,EAAElE,YAIX,GAFAkE,EAAI,IAAI2sN,EAAK3sN,GAEJ,MAAL+hB,EAAW,CAGb,IAAK/hB,EAAEsG,EAAG,OAAOtG,EAEjB+hB,EAAI,IAAI4qM,EAAK,GACblB,EAAKkB,EAAK7C,aACL,CASL,GARA/nM,EAAI,IAAI4qM,EAAK5qM,QACF,IAAP0pM,EACFA,EAAKkB,EAAK7C,SAEVyB,EAAWE,EAAI,EAAG,IAIfzrN,EAAEsG,EAAG,OAAOyb,EAAEne,EAAI5D,EAAI+hB,EAG3B,IAAKA,EAAEzb,EAEL,OADIyb,EAAEne,IAAGme,EAAEne,EAAI5D,EAAE4D,GACVme,EAiBX,OAZIA,EAAEzb,EAAE,IACN+jN,GAAW,EACXrqN,EAAIytN,EAAOztN,EAAG+hB,EAAG,EAAG0pM,EAAI,GAAGsB,MAAMhrM,GACjCsoM,GAAW,EACX8B,EAASnsN,KAIT+hB,EAAEne,EAAI5D,EAAE4D,EACR5D,EAAI+hB,GAGC/hB,GASTkrN,EAAE0G,SAAW,WACX,OAAQr4N,MAcV2xN,EAAE2G,QAAU,SAAUjF,EAAInB,GACxB,OAAOyF,EAAe33N,KAAM,EAAGqzN,EAAInB,IA+CrCP,EAAE4G,QAAU5G,EAAE/5K,IAAM,SAAUpvB,GAC5B,IAAI4N,EAAG7R,EAAG4uM,EAAIlsN,EAAGirN,EAAI7nN,EACnB5D,EAAIzG,KACJozN,EAAO3sN,EAAElE,YACTi2N,IAAOhwM,EAAI,IAAI4qM,EAAK5qM,IAGtB,KAAK/hB,EAAEsG,GAAMyb,EAAEzb,GAAMtG,EAAEsG,EAAE,IAAOyb,EAAEzb,EAAE,IAAI,OAAO,IAAIqmN,EAAKhC,GAAS3qN,EAAG+xN,IAIpE,IAFA/xN,EAAI,IAAI2sN,EAAK3sN,IAEP0tN,GAAG,GAAI,OAAO1tN,EAKpB,GAHA0sN,EAAKC,EAAKzwJ,UACVuvJ,EAAKkB,EAAK7C,SAEN/nM,EAAE2rM,GAAG,GAAI,OAAOvB,EAASnsN,EAAG0sN,EAAIjB,GAMpC,IAHA97L,EAAI+6L,EAAU3oM,EAAE4N,EAlmEL,KAqmEF5N,EAAEzb,EAAEtO,OAAS,IAAM8lB,EAAIi0M,EAAK,GAAKA,EAAKA,IApmE5B,iBAsmEjB,OADAvxN,EAAIwxN,EAAOrF,EAAM3sN,EAAG8d,EAAG4uM,GAChB3qM,EAAEne,EAAI,EAAI,IAAI+oN,EAAK,GAAG1+K,IAAIztC,GAAK2rN,EAAS3rN,EAAGksN,EAAIjB,GAMxD,IAHA7nN,EAAI5D,EAAE4D,GAGE,EAAG,CAGT,GAAI+rB,EAAI5N,EAAEzb,EAAEtO,OAAS,EAAG,OAAO,IAAI20N,EAAKn9J,KAMxC,GAHoB,IAAN,EAATztC,EAAEzb,EAAEqpB,MAAc/rB,EAAI,GAGhB,GAAP5D,EAAE2vB,GAAoB,GAAV3vB,EAAEsG,EAAE,IAAyB,GAAdtG,EAAEsG,EAAEtO,OAEjC,OADAgI,EAAE4D,EAAIA,EACC5D,EAgBX,OAPA2vB,EAAS,IADT7R,EAAI6sM,GAAS3qN,EAAG+xN,KACDhtN,SAAS+Y,GAEpB,IAAI6uM,EAAK7uM,EAAI,IAAI6R,EADjB+6L,EAAUqH,GAAMtyN,KAAK2Y,IAAI,KAAO+yM,EAAenrN,EAAEsG,IAAM7G,KAAKmqN,KAAO5pN,EAAE2vB,EAAI,KAMrEg9L,EAAKxC,KAAO,GAAKx6L,EAAIg9L,EAAKzC,KAAO,EAAU,IAAIyC,EAAKh9L,EAAI,EAAI/rB,EAAI,EAAI,IAE5EymN,GAAW,EACXsC,EAAK7C,SAAW9pN,EAAE4D,EAAI,EAMtBka,EAAIre,KAAKM,IAAI,IAAK4vB,EAAI,IAAI33B,SAG1BwI,EAAIgwN,EAAmBzuM,EAAEgrM,MAAMoD,EAAiBnwN,EAAG0sN,EAAK5uM,IAAK4uM,IAGvDpmN,GAOAklN,GAJJhrN,EAAI2rN,EAAS3rN,EAAGksN,EAAK,EAAG,IAIEpmN,EAAGomN,EAAIjB,KAC/B97L,EAAI+8L,EAAK,IAMJvB,GAHL3qN,EAAI2rN,EAASqE,EAAmBzuM,EAAEgrM,MAAMoD,EAAiBnwN,EAAG2vB,EAAI7R,IAAK6R,GAAIA,EAAI,EAAG,IAG1DrpB,GAAG1I,MAAM8uN,EAAK,EAAGA,EAAK,IAAM,GAAK,OACrDlsN,EAAI2rN,EAAS3rN,EAAGksN,EAAK,EAAG,KAK9BlsN,EAAEoD,EAAIA,EACNymN,GAAW,EACXsC,EAAK7C,SAAW2B,EAETU,EAAS3rN,EAAGksN,EAAIjB,KAezBP,EAAE73B,YAAc,SAAUu5B,EAAInB,GAC5B,IAAIn9L,EACFtuB,EAAIzG,KACJozN,EAAO3sN,EAAElE,YAcX,YAZW,IAAP8wN,EACFt+L,EAAM+iM,EAAerxN,EAAGA,EAAE2vB,GAAKg9L,EAAK3C,UAAYhqN,EAAE2vB,GAAKg9L,EAAK1C,WAE5DsB,EAAWqB,EAAI,EAAGlD,QAEP,IAAP+B,EAAeA,EAAKkB,EAAK7C,SACxByB,EAAWE,EAAI,EAAG,GAGvBn9L,EAAM+iM,EADNrxN,EAAImsN,EAAS,IAAIQ,EAAK3sN,GAAI4sN,EAAInB,GACNmB,GAAM5sN,EAAE2vB,GAAK3vB,EAAE2vB,GAAKg9L,EAAK3C,SAAU4C,IAGtD5sN,EAAE+uN,UAAY/uN,EAAEutN,SAAW,IAAMj/L,EAAMA,GAkBhD48L,EAAE+G,oBAAsB/G,EAAEgH,KAAO,SAAUtF,EAAInB,GAC7C,IACEkB,EADMpzN,KACGuC,YAYX,YAVW,IAAP8wN,GACFA,EAAKD,EAAKzwJ,UACVuvJ,EAAKkB,EAAK7C,WAEVyB,EAAWqB,EAAI,EAAGlD,QAEP,IAAP+B,EAAeA,EAAKkB,EAAK7C,SACxByB,EAAWE,EAAI,EAAG,IAGlBU,EAAS,IAAIQ,EAbZpzN,MAaqBqzN,EAAInB,IAWnCP,EAAEvtN,SAAW,WACX,IAAIqC,EAAIzG,KACNozN,EAAO3sN,EAAElE,YACTwyB,EAAM+iM,EAAerxN,EAAGA,EAAE2vB,GAAKg9L,EAAK3C,UAAYhqN,EAAE2vB,GAAKg9L,EAAK1C,UAE9D,OAAOjqN,EAAE+uN,UAAY/uN,EAAEutN,SAAW,IAAMj/L,EAAMA,GAQhD48L,EAAE77J,UAAY67J,EAAExwK,MAAQ,WACtB,OAAOyxK,EAAS,IAAI5yN,KAAKuC,YAAYvC,MAAOA,KAAKo2B,EAAI,EAAG,IAS1Du7L,EAAElF,QAAUkF,EAAEp8G,OAAS,WACrB,IAAI9uG,EAAIzG,KACNozN,EAAO3sN,EAAElE,YACTwyB,EAAM+iM,EAAerxN,EAAGA,EAAE2vB,GAAKg9L,EAAK3C,UAAYhqN,EAAE2vB,GAAKg9L,EAAK1C,UAE9D,OAAOjqN,EAAE+uN,QAAU,IAAMzgM,EAAMA,GA6NjC,IAAIm/L,EAAS,WAGX,SAAS0E,EAAgBnyN,EAAG8d,EAAG5iB,GAC7B,IAAIqE,EACFmxN,EAAQ,EACRz4N,EAAI+H,EAAEhI,OAER,IAAKgI,EAAIA,EAAEpC,QAAS3F,KAClBsH,EAAOS,EAAE/H,GAAK6lB,EAAI4yM,EAClB1wN,EAAE/H,GAAKsH,EAAOrE,EAAO,EACrBw1N,EAAQnxN,EAAOrE,EAAO,EAKxB,OAFIw1N,GAAO1wN,EAAE+yC,QAAQ29K,GAEd1wN,EAGT,SAASoyN,EAAQ9xN,EAAGC,EAAG8xN,EAAIC,GACzB,IAAIr6N,EAAGuI,EAEP,GAAI6xN,GAAMC,EACR9xN,EAAI6xN,EAAKC,EAAK,GAAK,OAEnB,IAAKr6N,EAAIuI,EAAI,EAAGvI,EAAIo6N,EAAIp6N,IACtB,GAAIqI,EAAErI,IAAMsI,EAAEtI,GAAI,CAChBuI,EAAIF,EAAErI,GAAKsI,EAAEtI,GAAK,GAAK,EACvB,MAKN,OAAOuI,EAGT,SAAS+xN,EAASjyN,EAAGC,EAAG8xN,EAAIn3N,GAI1B,IAHA,IAAIjD,EAAI,EAGDo6N,KACL/xN,EAAE+xN,IAAOp6N,EACTA,EAAIqI,EAAE+xN,GAAM9xN,EAAE8xN,GAAM,EAAI,EACxB/xN,EAAE+xN,GAAMp6N,EAAIiD,EAAOoF,EAAE+xN,GAAM9xN,EAAE8xN,GAI/B,MAAQ/xN,EAAE,IAAMA,EAAEtI,OAAS,GAAIsI,EAAEq8H,QAGnC,OAAO,SAAU38H,EAAG+hB,EAAG2qM,EAAIjB,EAAIle,EAAIryM,GACjC,IAAImxN,EAAK18L,EAAG13B,EAAG6lB,EAAG2+D,EAAS+1I,EAAMn1K,EAAMo1K,EAAOhqJ,EAAGiqJ,EAAIl5D,EAAKm5D,EAAMC,EAAMhG,EAAIxjN,EAAG2qI,EAAI8+E,EAAIC,EACnFC,EAAIC,EACJrG,EAAO3sN,EAAElE,YACT03D,EAAOxzD,EAAE4D,GAAKme,EAAEne,EAAI,GAAK,EACzB4oN,EAAKxsN,EAAEsG,EACPmmN,EAAK1qM,EAAEzb,EAGT,KAAKkmN,GAAOA,EAAG,IAAOC,GAAOA,EAAG,IAE9B,OAAO,IAAIE,EACR3sN,EAAE4D,GAAMme,EAAEne,IAAM4oN,GAAKC,GAAMD,EAAG,IAAMC,EAAG,GAAMA,GAG9CD,GAAe,GAATA,EAAG,KAAYC,EAAY,EAAPj5J,EAAWA,EAAO,EAHQhE,KAsBxD,IAhBIt0D,GACFuhF,EAAU,EACV9sD,EAAI3vB,EAAE2vB,EAAI5N,EAAE4N,IAEZz0B,EAAO6vN,EACPtuI,EA5jFO,EA6jFP9sD,EAAI+6L,EAAU1qN,EAAE2vB,EAAI8sD,GAAWiuI,EAAU3oM,EAAE4N,EAAI8sD,IAGjDs2I,EAAKtG,EAAGz0N,OACR66N,EAAKrG,EAAGx0N,OAER06N,GADAjqJ,EAAI,IAAIkkJ,EAAKn5J,IACNltD,EAAI,GAINrO,EAAI,EAAGw0N,EAAGx0N,KAAOu0N,EAAGv0N,IAAM,GAAIA,KAanC,GAXIw0N,EAAGx0N,IAAMu0N,EAAGv0N,IAAM,IAAI03B,IAEhB,MAAN+8L,GACFE,EAAKF,EAAKC,EAAKzwJ,UACfuvJ,EAAKkB,EAAK7C,UAEV8C,EADSrf,EACJmf,GAAM1sN,EAAE2vB,EAAI5N,EAAE4N,GAAK,EAEnB+8L,EAGHE,EAAK,EACP8F,EAAGh2N,KAAK,GACR81N,GAAO,MACF,CAOL,GAJA5F,EAAKA,EAAKnwI,EAAU,EAAI,EACxBxkF,EAAI,EAGM,GAAN86N,EAAS,CAMX,IALAj1M,EAAI,EACJ2uM,EAAKA,EAAG,GACRG,KAGQ30N,EAAI46N,GAAM/0M,IAAM8uM,IAAM30N,IAC5BmR,EAAI0U,EAAI5iB,GAAQsxN,EAAGv0N,IAAM,GACzBy6N,EAAGz6N,GAAKmR,EAAIqjN,EAAK,EACjB3uM,EAAI1U,EAAIqjN,EAAK,EAGf+F,EAAO10M,GAAK7lB,EAAI46N,MAGX,CAiBL,KAdA/0M,EAAI5iB,GAAQuxN,EAAG,GAAK,GAAK,GAEjB,IACNA,EAAK0F,EAAgB1F,EAAI3uM,EAAG5iB,GAC5BsxN,EAAK2F,EAAgB3F,EAAI1uM,EAAG5iB,GAC5B63N,EAAKtG,EAAGz0N,OACR66N,EAAKrG,EAAGx0N,QAGV+7I,EAAKg/E,EAELJ,GADAn5D,EAAMgzD,EAAG5uN,MAAM,EAAGm1N,IACP/6N,OAGJ26N,EAAOI,GAAKv5D,EAAIm5D,KAAU,GAEjCK,EAAKvG,EAAG7uN,SACLm1C,QAAQ,GACX+/K,EAAMrG,EAAG,GAELA,EAAG,IAAMvxN,EAAO,KAAK43N,EAEzB,GACEh1M,EAAI,GAGJuuM,EAAM+F,EAAQ3F,EAAIjzD,EAAKu5D,EAAIJ,IAGjB,GAGRC,EAAOp5D,EAAI,GACPu5D,GAAMJ,IAAMC,EAAOA,EAAO13N,GAAQs+J,EAAI,IAAM,KAGhD17I,EAAI80M,EAAOE,EAAM,GAUT,GACFh1M,GAAK5iB,IAAM4iB,EAAI5iB,EAAO,GAWf,IAHXmxN,EAAM+F,EALN/0K,EAAO80K,EAAgB1F,EAAI3uM,EAAG5iB,GAKVs+J,EAJpBi5D,EAAQp1K,EAAKrlD,OACb26N,EAAOn5D,EAAIxhK,WAOT8lB,IAGAy0M,EAASl1K,EAAM01K,EAAKN,EAAQO,EAAKvG,EAAIgG,EAAOv3N,MAOrC,GAAL4iB,IAAQuuM,EAAMvuM,EAAI,GACtBu/B,EAAOovK,EAAG7uN,UAGZ60N,EAAQp1K,EAAKrlD,QACD26N,GAAMt1K,EAAKtK,QAAQ,GAG/Bw/K,EAAS/4D,EAAKn8G,EAAMs1K,EAAMz3N,IAGd,GAARmxN,IAIFA,EAAM+F,EAAQ3F,EAAIjzD,EAAKu5D,EAHvBJ,EAAOn5D,EAAIxhK,SAMD,IACR8lB,IAGAy0M,EAAS/4D,EAAKu5D,EAAKJ,EAAOK,EAAKvG,EAAIkG,EAAMz3N,IAI7Cy3N,EAAOn5D,EAAIxhK,QACM,IAARq0N,IACTvuM,IACA07I,EAAM,CAAC,IAITk5D,EAAGz6N,KAAO6lB,EAGNuuM,GAAO7yD,EAAI,GACbA,EAAIm5D,KAAUnG,EAAGz4E,IAAO,GAExBylB,EAAM,CAACgzD,EAAGz4E,IACV4+E,EAAO,UAGD5+E,IAAO8+E,QAAiB,IAAXr5D,EAAI,KAAkBozD,KAE7C4F,OAAkB,IAAXh5D,EAAI,GAIRk5D,EAAG,IAAIA,EAAG/1F,QAIjB,GAAe,GAAXlgD,EACFhU,EAAE94C,EAAIA,EACN45L,EAAUiJ,MACL,CAGL,IAAKv6N,EAAI,EAAG6lB,EAAI40M,EAAG,GAAI50M,GAAK,GAAIA,GAAK,GAAI7lB,IACzCwwE,EAAE94C,EAAI13B,EAAI03B,EAAI8sD,EAAU,EAExB0vI,EAAS1jJ,EAAG8kI,EAAKmf,EAAKjkJ,EAAE94C,EAAI,EAAI+8L,EAAIjB,EAAI+G,GAG1C,OAAO/pJ,GAnQE,GA4QZ,SAAS0jJ,EAASnsN,EAAG4sN,EAAInB,EAAIwH,GAC5B,IAAIC,EAAQj7N,EAAGoM,EAAGyZ,EAAG8tM,EAAIuH,EAAS/oK,EAAGoiK,EAAI4G,EACvCzG,EAAO3sN,EAAElE,YAGXunB,EAAK,GAAU,MAANupM,EAAY,CAInB,KAHAJ,EAAKxsN,EAAEsG,GAGE,OAAOtG,EAWhB,IAAKkzN,EAAS,EAAGp1M,EAAI0uM,EAAG,GAAI1uM,GAAK,GAAIA,GAAK,GAAIo1M,IAI9C,IAHAj7N,EAAI20N,EAAKsG,GAGD,EACNj7N,GAxxFO,EAyxFPoM,EAAIuoN,EAIJhB,GAHAxhK,EAAIoiK,EAAG4G,EAAM,IAGJzI,EAAQ,GAAIuI,EAAS7uN,EAAI,GAAK,GAAK,OAI5C,IAFA+uN,EAAM3zN,KAAK4C,MAAMpK,EAAI,GA/xFd,MAgyFP6lB,EAAI0uM,EAAGx0N,QACO,CACZ,IAAIi7N,EASF,MAAM5vM,EANN,KAAOvF,KAAOs1M,GAAM5G,EAAG9vN,KAAK,GAC5B0tD,EAAIwhK,EAAK,EACTsH,EAAS,EAET7uN,GADApM,GAxyFG,KAyyFgB,MAIhB,CAIL,IAHAmyD,EAAItsC,EAAI0uM,EAAG4G,GAGNF,EAAS,EAAGp1M,GAAK,GAAIA,GAAK,GAAIo1M,IAUnCtH,GAHAvnN,GAJApM,GApzFK,KAwzFci7N,GAGV,EAAI,EAAI9oK,EAAIugK,EAAQ,GAAIuI,EAAS7uN,EAAI,GAAK,GAAK,EAoB5D,GAfA4uN,EAAcA,GAAerG,EAAK,QAChB,IAAhBJ,EAAG4G,EAAM,KAAkB/uN,EAAI,EAAI+lD,EAAIA,EAAIugK,EAAQ,GAAIuI,EAAS7uN,EAAI,IAMtE8uN,EAAU1H,EAAK,GACVG,GAAMqH,KAAuB,GAANxH,GAAWA,IAAOzrN,EAAE4D,EAAI,EAAI,EAAI,IACxDgoN,EAAK,GAAW,GAANA,IAAkB,GAANH,GAAWwH,GAAqB,GAANxH,IAG9CxzN,EAAI,EAAIoM,EAAI,EAAI+lD,EAAIugK,EAAQ,GAAIuI,EAAS7uN,GAAK,EAAImoN,EAAG4G,EAAM,IAAM,GAAM,GACvE3H,IAAOzrN,EAAE4D,EAAI,EAAI,EAAI,IAEvBgpN,EAAK,IAAMJ,EAAG,GAgBhB,OAfAA,EAAGx0N,OAAS,EACRm7N,GAGFvG,GAAM5sN,EAAE2vB,EAAI,EAGZ68L,EAAG,GAAK7B,EAAQ,IAv1FX,EAu1F2BiC,EAv1F3B,MAw1FL5sN,EAAE2vB,GAAKi9L,GAAM,GAIbJ,EAAG,GAAKxsN,EAAE2vB,EAAI,EAGT3vB,EAiBT,GAbS,GAAL/H,GACFu0N,EAAGx0N,OAASo7N,EACZt1M,EAAI,EACJs1M,MAEA5G,EAAGx0N,OAASo7N,EAAM,EAClBt1M,EAAI6sM,EAAQ,GAz2FL,EAy2FoB1yN,GAI3Bu0N,EAAG4G,GAAO/uN,EAAI,GAAK+lD,EAAIugK,EAAQ,GAAIuI,EAAS7uN,GAAKsmN,EAAQ,GAAItmN,GAAK,GAAKyZ,EAAI,GAGzEq1M,EACF,OAAS,CAGP,GAAW,GAAPC,EAAU,CAGZ,IAAKn7N,EAAI,EAAGoM,EAAImoN,EAAG,GAAInoN,GAAK,GAAIA,GAAK,GAAIpM,IAEzC,IADAoM,EAAImoN,EAAG,IAAM1uM,EACRA,EAAI,EAAGzZ,GAAK,GAAIA,GAAK,GAAIyZ,IAG1B7lB,GAAK6lB,IACP9d,EAAE2vB,IACE68L,EAAG,IAAMzB,IAAMyB,EAAG,GAAK,IAG7B,MAGA,GADAA,EAAG4G,IAAQt1M,EACP0uM,EAAG4G,IAAQrI,EAAM,MACrByB,EAAG4G,KAAS,EACZt1M,EAAI,EAMV,IAAK7lB,EAAIu0N,EAAGx0N,OAAoB,IAAZw0N,IAAKv0N,IAAWu0N,EAAG3lM,MAsBzC,OAnBIwjM,IAGErqN,EAAE2vB,EAAIg9L,EAAKxC,MAGbnqN,EAAEsG,EAAI,KACNtG,EAAE2vB,EAAI6/B,KAGGxvD,EAAE2vB,EAAIg9L,EAAKzC,OAGpBlqN,EAAE2vB,EAAI,EACN3vB,EAAEsG,EAAI,CAAC,KAKJtG,EAIT,SAASqxN,EAAerxN,EAAGqzN,EAAOzG,GAChC,IAAK5sN,EAAE+E,WAAY,OAAOuuN,EAAkBtzN,GAC5C,IAAI8d,EACF6R,EAAI3vB,EAAE2vB,EACNrB,EAAM68L,EAAenrN,EAAEsG,GACvBvO,EAAMu2B,EAAIt2B,OAwBZ,OAtBIq7N,GACEzG,IAAO9uM,EAAI8uM,EAAK70N,GAAO,EACzBu2B,EAAMA,EAAIs9G,OAAO,GAAK,IAAMt9G,EAAI1wB,MAAM,GAAK0tN,EAAcxtM,GAChD/lB,EAAM,IACfu2B,EAAMA,EAAIs9G,OAAO,GAAK,IAAMt9G,EAAI1wB,MAAM,IAGxC0wB,EAAMA,GAAOtuB,EAAE2vB,EAAI,EAAI,IAAM,MAAQ3vB,EAAE2vB,GAC9BA,EAAI,GACbrB,EAAM,KAAOg9L,GAAe37L,EAAI,GAAKrB,EACjCs+L,IAAO9uM,EAAI8uM,EAAK70N,GAAO,IAAGu2B,GAAOg9L,EAAcxtM,KAC1C6R,GAAK53B,GACdu2B,GAAOg9L,EAAc37L,EAAI,EAAI53B,GACzB60N,IAAO9uM,EAAI8uM,EAAKj9L,EAAI,GAAK,IAAGrB,EAAMA,EAAM,IAAMg9L,EAAcxtM,OAE3DA,EAAI6R,EAAI,GAAK53B,IAAKu2B,EAAMA,EAAI1wB,MAAM,EAAGkgB,GAAK,IAAMwQ,EAAI1wB,MAAMkgB,IAC3D8uM,IAAO9uM,EAAI8uM,EAAK70N,GAAO,IACrB43B,EAAI,IAAM53B,IAAKu2B,GAAO,KAC1BA,GAAOg9L,EAAcxtM,KAIlBwQ,EAKT,SAASiiM,EAAkB2C,EAAQvjM,GACjC,IAAIy6B,EAAI8oK,EAAO,GAGf,IAAMvjM,GA58FK,EA48FUy6B,GAAK,GAAIA,GAAK,GAAIz6B,IACvC,OAAOA,EAIT,SAASygM,EAAQzD,EAAMC,EAAIF,GACzB,GAAIE,EAAK5B,EAKP,MAFAX,GAAW,EACPqC,IAAIC,EAAKzwJ,UAAYwwJ,GACnBttN,MAAMorN,GAEd,OAAO2B,EAAS,IAAIQ,EAAK/C,GAAOgD,EAAI,GAAG,GAIzC,SAASoC,EAAMrC,EAAMC,EAAInB,GACvB,GAAImB,EAAK3B,EAAc,MAAM7rN,MAAMorN,GACnC,OAAO2B,EAAS,IAAIQ,EAAK/wJ,GAAKgxJ,EAAInB,GAAI,GAIxC,SAASkF,EAAauC,GACpB,IAAI9oK,EAAI8oK,EAAOl7N,OAAS,EACtBD,EAr+FS,EAq+FHqyD,EAAe,EAKvB,GAHAA,EAAI8oK,EAAO9oK,GAGJ,CAGL,KAAOA,EAAI,IAAM,EAAGA,GAAK,GAAIryD,IAG7B,IAAKqyD,EAAI8oK,EAAO,GAAI9oK,GAAK,GAAIA,GAAK,GAAIryD,IAGxC,OAAOA,EAIT,SAASuzN,EAAcxtM,GAErB,IADA,IAAIy1M,EAAK,GACFz1M,KAAMy1M,GAAM,IACnB,OAAOA,EAWT,SAASvB,EAAOrF,EAAM3sN,EAAGtC,EAAGgvN,GAC1B,IAAIuG,EACFzyN,EAAI,IAAImsN,EAAK,GAIb7uM,EAAIre,KAAK4C,KAAKqqN,EA3gGL,EA2gGqB,GAIhC,IAFArC,GAAW,IAEF,CAOP,GANI3sN,EAAI,GAEF64M,GADJ/1M,EAAIA,EAAEusN,MAAM/sN,IACGsG,EAAGwX,KAAIm1M,GAAc,GAI5B,KADVv1N,EAAIgtN,EAAUhtN,EAAI,IACL,CAGXA,EAAI8C,EAAE8F,EAAEtO,OAAS,EACbi7N,GAA0B,IAAXzyN,EAAE8F,EAAE5I,MAAY8C,EAAE8F,EAAE5I,GACvC,MAIF64M,GADAv2M,EAAIA,EAAE+sN,MAAM/sN,IACDsG,EAAGwX,GAKhB,OAFAusM,GAAW,EAEJ7pN,EAIT,SAASgzN,EAAM91N,GACb,OAA6B,EAAtBA,EAAE4I,EAAE5I,EAAE4I,EAAEtO,OAAS,GAO1B,SAASy7N,EAAS9G,EAAMnzN,EAAMk6N,GAK5B,IAJA,IAAI3xM,EACF/hB,EAAI,IAAI2sN,EAAKnzN,EAAK,IAClBvB,EAAI,IAEGA,EAAIuB,EAAKxB,QAAS,CAEzB,KADA+pB,EAAI,IAAI4qM,EAAKnzN,EAAKvB,KACX2L,EAAG,CACR5D,EAAI+hB,EACJ,MACS/hB,EAAE0zN,GAAM3xM,KACjB/hB,EAAI+hB,GAIR,OAAO/hB,EAmCT,SAASwwN,EAAmBxwN,EAAG4sN,GAC7B,IAAIn2H,EAAak9H,EAAOtvN,EAAG8sC,EAAK/wC,EAAKgJ,EAAGkmN,EACtClC,EAAM,EACNn1N,EAAI,EACJ6lB,EAAI,EACJ6uM,EAAO3sN,EAAElE,YACT2vN,EAAKkB,EAAK7C,SACV4C,EAAKC,EAAKzwJ,UAGZ,IAAKl8D,EAAEsG,IAAMtG,EAAEsG,EAAE,IAAMtG,EAAE2vB,EAAI,GAE3B,OAAO,IAAIg9L,EAAK3sN,EAAEsG,EACbtG,EAAEsG,EAAE,GAAStG,EAAE4D,EAAI,EAAI,EAAI,IAAlB,EACV5D,EAAE4D,EAAI5D,EAAE4D,EAAI,EAAI,EAAI5D,EAAI,KAa9B,IAVU,MAAN4sN,GACFvC,GAAW,EACXiF,EAAM5C,GAEN4C,EAAM1C,EAGRxjN,EAAI,IAAIujN,EAAK,QAGN3sN,EAAE2vB,GAAK,GAGZ3vB,EAAIA,EAAE+sN,MAAM3jN,GACZ0U,GAAK,EAUP,IAJAwxM,GADAqE,EAAQl0N,KAAK2Y,IAAIuyM,EAAQ,EAAG7sM,IAAMre,KAAKmqN,KAAO,EAAI,EAAI,EAEtDnzH,EAActlD,EAAM/wC,EAAM,IAAIusN,EAAK,GACnCA,EAAKzwJ,UAAYozJ,IAER,CAKP,GAJAn+K,EAAMg7K,EAASh7K,EAAI47K,MAAM/sN,GAAIsvN,EAAK,GAClC74H,EAAcA,EAAYs2H,QAAQ90N,GAG9BkzN,GAFJ/hN,EAAIhJ,EAAIsoN,KAAK+E,EAAOt8K,EAAKslD,EAAa64H,EAAK,KAEtBhpN,GAAG1I,MAAM,EAAG0xN,KAASnE,EAAe/qN,EAAIkG,GAAG1I,MAAM,EAAG0xN,GAAM,CAE7E,IADAjrN,EAAIyZ,EACGzZ,KAAKjE,EAAM+rN,EAAS/rN,EAAI2sN,MAAM3sN,GAAMkvN,EAAK,GAOhD,GAAU,MAAN1C,EAYF,OADAD,EAAKzwJ,UAAYwwJ,EACVtsN,EAVP,KAAIgtN,EAAM,GAAK5B,EAAoBprN,EAAIkG,EAAGgpN,EAAMqE,EAAOlI,EAAI2B,IAMzD,OAAOjB,EAAS/rN,EAAKusN,EAAKzwJ,UAAYwwJ,EAAIjB,EAAIpB,GAAW,GALzDsC,EAAKzwJ,UAAYozJ,GAAO,GACxB74H,EAActlD,EAAM/nC,EAAI,IAAIujN,EAAK,GACjC10N,EAAI,EACJm1N,IAUNhtN,EAAMgJ,GAoBV,SAAS+mN,EAAiBpuM,EAAG6qM,GAC3B,IAAIlmN,EAAGktN,EAAIn9H,EAAa9mE,EAAGkkM,EAAWzG,EAAKhtN,EAAKgJ,EAAGkmN,EAAK7qG,EAAIn0D,EAC1D5yD,EAAI,EAEJsC,EAAI+hB,EACJyqM,EAAKxsN,EAAEsG,EACPqmN,EAAO3sN,EAAElE,YACT2vN,EAAKkB,EAAK7C,SACV4C,EAAKC,EAAKzwJ,UAGZ,GAAIl8D,EAAE4D,EAAI,IAAM4oN,IAAOA,EAAG,KAAOxsN,EAAE2vB,GAAc,GAAT68L,EAAG,IAAwB,GAAbA,EAAGx0N,OACvD,OAAO,IAAI20N,EAAKH,IAAOA,EAAG,IAAK,IAAgB,GAAPxsN,EAAE4D,EAAS4rD,IAAMg9J,EAAK,EAAIxsN,GAcpE,GAXU,MAAN4sN,GACFvC,GAAW,EACXiF,EAAM5C,GAEN4C,EAAM1C,EAGRD,EAAKzwJ,UAAYozJ,GAnBP,GAqBVsE,GADAltN,EAAIykN,EAAeqB,IACZ5gF,OAAO,KAEVnsI,KAAK+sC,IAAI7c,EAAI3vB,EAAE2vB,GAAK,OAqCtB,OAJAvmB,EAAIgnN,EAAQzD,EAAM2C,EAAM,EAAG5C,GAAIK,MAAMp9L,EAAI,IACzC3vB,EAAImwN,EAAiB,IAAIxD,EAAKiH,EAAK,IAAMltN,EAAE9I,MAAM,IAAK0xN,EAzD9C,IAyD2D5G,KAAKt/M,GACxEujN,EAAKzwJ,UAAYwwJ,EAEJ,MAANE,EAAaT,EAASnsN,EAAG0sN,EAAIjB,EAAIpB,GAAW,GAAQrqN,EAxB3D,KAAO4zN,EAAK,GAAW,GAANA,GAAiB,GAANA,GAAWltN,EAAEklI,OAAO,GAAK,GAGnDgoF,GADAltN,EAAIykN,GADJnrN,EAAIA,EAAE+sN,MAAMhrM,IACSzb,IACdslI,OAAO,GACdluI,IAiCJ,IA9BEiyB,EAAI3vB,EAAE2vB,EAEFikM,EAAK,GACP5zN,EAAI,IAAI2sN,EAAK,KAAOjmN,GACpBipB,KAEA3vB,EAAI,IAAI2sN,EAAKiH,EAAK,IAAMltN,EAAE9I,MAAM,IAepC6mH,EAAKzkH,EAKLI,EAAMyzN,EAAY7zN,EAAIytN,EAAOztN,EAAEymN,MAAM,GAAIzmN,EAAE0oN,KAAK,GAAI4G,EAAK,GACzDh/J,EAAK67J,EAASnsN,EAAE+sN,MAAM/sN,GAAIsvN,EAAK,GAC/B74H,EAAc,IAEL,CAIP,GAHAo9H,EAAY1H,EAAS0H,EAAU9G,MAAMz8J,GAAKg/J,EAAK,GAG3CnE,GAFJ/hN,EAAIhJ,EAAIsoN,KAAK+E,EAAOoG,EAAW,IAAIlH,EAAKl2H,GAAc64H,EAAK,KAEtChpN,GAAG1I,MAAM,EAAG0xN,KAASnE,EAAe/qN,EAAIkG,GAAG1I,MAAM,EAAG0xN,GAAM,CAc7E,GAbAlvN,EAAMA,EAAI2sN,MAAM,GAIN,IAANp9L,IAASvvB,EAAMA,EAAIsoN,KAAK0H,EAAQzD,EAAM2C,EAAM,EAAG5C,GAAIK,MAAMp9L,EAAI,MACjEvvB,EAAMqtN,EAAOrtN,EAAK,IAAIusN,EAAKjvN,GAAI4xN,EAAK,GAQ1B,MAAN1C,EAWF,OADAD,EAAKzwJ,UAAYwwJ,EACVtsN,EAVP,IAAIorN,EAAoBprN,EAAIkG,EAAGgpN,EA5F3B,GA4FwC7D,EAAI2B,GAM9C,OAAOjB,EAAS/rN,EAAKusN,EAAKzwJ,UAAYwwJ,EAAIjB,EAAIpB,GAAW,GALzDsC,EAAKzwJ,UAAYozJ,GA7Ff,GA8FFlmN,EAAIyqN,EAAY7zN,EAAIytN,EAAOhpG,EAAGgiG,MAAM,GAAIhiG,EAAGikG,KAAK,GAAI4G,EAAK,GACzDh/J,EAAK67J,EAASnsN,EAAE+sN,MAAM/sN,GAAIsvN,EAAK,GAC/B74H,EAAc22H,EAAM,EAU1BhtN,EAAMgJ,EACNqtF,GAAe,GAMnB,SAAS68H,EAAkBtzN,GAEzB,OAAOyF,OAAOzF,EAAE4D,EAAI5D,EAAE4D,EAAI,GAO5B,SAASkwN,EAAa9zN,EAAGsuB,GACvB,IAAIqB,EAAG13B,EAAGF,EAmBV,KAhBK43B,EAAIrB,EAAI1D,QAAQ,OAAS,IAAG0D,EAAMA,EAAInlB,QAAQ,IAAK,MAGnDlR,EAAIq2B,EAAI3lB,OAAO,OAAS,GAGvBgnB,EAAI,IAAGA,EAAI13B,GACf03B,IAAMrB,EAAI1wB,MAAM3F,EAAI,GACpBq2B,EAAMA,EAAIhD,UAAU,EAAGrzB,IACd03B,EAAI,IAGbA,EAAIrB,EAAIt2B,QAILC,EAAI,EAAyB,KAAtBq2B,EAAI4H,WAAWj+B,GAAWA,KAGtC,IAAKF,EAAMu2B,EAAIt2B,OAAoC,KAA5Bs2B,EAAI4H,WAAWn+B,EAAM,KAAaA,GAGzD,GAFAu2B,EAAMA,EAAI1wB,MAAM3F,EAAGF,GAEV,CAYP,GAXAA,GAAOE,EACP+H,EAAE2vB,EAAIA,EAAIA,EAAI13B,EAAI,EAClB+H,EAAEsG,EAAI,GAMNrO,GAAK03B,EAAI,GA71GA,EA81GLA,EAAI,IAAG13B,GA91GF,GAg2GLA,EAAIF,EAAK,CAEX,IADIE,GAAG+H,EAAEsG,EAAE5J,MAAM4xB,EAAI1wB,MAAM,EAAG3F,IACzBF,GAl2GE,EAk2GeE,EAAIF,GAAMiI,EAAEsG,EAAE5J,MAAM4xB,EAAI1wB,MAAM3F,EAAGA,GAl2GhD,IAo2GPA,EAp2GO,GAm2GPq2B,EAAMA,EAAI1wB,MAAM3F,IACGD,YAEnBC,GAAKF,EAGP,KAAOE,KAAMq2B,GAAO,IACpBtuB,EAAEsG,EAAE5J,MAAM4xB,GAEN+7L,IAGErqN,EAAE2vB,EAAI3vB,EAAElE,YAAYquN,MAGtBnqN,EAAEsG,EAAI,KACNtG,EAAE2vB,EAAI6/B,KAGGxvD,EAAE2vB,EAAI3vB,EAAElE,YAAYouN,OAG7BlqN,EAAE2vB,EAAI,EACN3vB,EAAEsG,EAAI,CAAC,UAOXtG,EAAE2vB,EAAI,EACN3vB,EAAEsG,EAAI,CAAC,GAGT,OAAOtG,EAOT,SAAS+zN,EAAW/zN,EAAGsuB,GACrB,IAAIpzB,EAAMyxN,EAAM15B,EAASh7L,EAAG+7N,EAASj8N,EAAK+E,EAAG0vN,EAAI6D,EAEjD,GAAY,aAAR/hM,GAA8B,QAARA,EAIxB,OAHMA,IAAKtuB,EAAE4D,EAAI4rD,KACjBxvD,EAAE2vB,EAAI6/B,IACNxvD,EAAEsG,EAAI,KACCtG,EAGT,GAAI4qN,EAAM9sN,KAAKwwB,GACbpzB,EAAO,GACPozB,EAAMA,EAAIvlB,mBACL,GAAI6zB,EAAS9+B,KAAKwwB,GACvBpzB,EAAO,MACF,KAAI2vN,EAAQ/sN,KAAKwwB,GAGtB,MAAMlvB,MAAMmrN,EAAkBj8L,GAF9BpzB,EAAO,EAkCT,KA5BAjD,EAAIq2B,EAAI3lB,OAAO,OAEP,GACN7L,GAAKwxB,EAAI1wB,MAAM3F,EAAI,GACnBq2B,EAAMA,EAAIhD,UAAU,EAAGrzB,IAEvBq2B,EAAMA,EAAI1wB,MAAM,GAMlBo2N,GADA/7N,EAAIq2B,EAAI1D,QAAQ,OACD,EACf+hM,EAAO3sN,EAAElE,YAELk4N,IAGF/7N,GADAF,GADAu2B,EAAMA,EAAInlB,QAAQ,IAAK,KACbnR,QACAC,EAGVg7L,EAAU++B,EAAOrF,EAAM,IAAIA,EAAKzxN,GAAOjD,EAAO,EAAJA,IAOvCA,EAHLo4N,GADA7D,EAAKX,EAAYv9L,EAAKpzB,EAAM6vN,IACpB/yN,OAAS,EAGM,IAAVw0N,EAAGv0N,KAAYA,EAAGu0N,EAAG3lM,MAClC,OAAI5uB,EAAI,EAAU,IAAI00N,EAAW,EAAN3sN,EAAE4D,IAC7B5D,EAAE2vB,EAAI4gM,EAAkB/D,EAAI6D,GAC5BrwN,EAAEsG,EAAIkmN,EACNnC,GAAW,EAQP2J,IAASh0N,EAAIytN,EAAOztN,EAAGizL,EAAe,EAANl7L,IAGhC+E,IAAGkD,EAAIA,EAAE+sN,MAAMttN,KAAK+sC,IAAI1vC,GAAK,GAAK6tN,EAAQ,EAAG7tN,GAAKwsN,EAAQn4K,IAAI,EAAGr0C,KACrEutN,GAAW,EAEJrqN,GAyCT,SAAS8sN,EAAaH,EAAMjvN,EAAGsC,EAAG+hB,EAAGkyM,GACnC,IAAI5vN,EAAG+E,EAAGonD,EAAGF,EAEXo8J,EAAKC,EAAKzwJ,UACVp+C,EAAIre,KAAK4C,KAAKqqN,EA7/GL,GAmgHX,IAJArC,GAAW,EACX/5J,EAAKtwD,EAAE+sN,MAAM/sN,GACbwwD,EAAI,IAAIm8J,EAAK5qM,KAEJ,CAMP,GALA3Y,EAAIqkN,EAAOj9J,EAAEu8J,MAAMz8J,GAAK,IAAIq8J,EAAKjvN,IAAMA,KAAMgvN,EAAI,GACjDl8J,EAAIyjK,EAAelyM,EAAE2mM,KAAKt/M,GAAK2Y,EAAE0kM,MAAMr9M,GACvC2Y,EAAI0rM,EAAOrkN,EAAE2jN,MAAMz8J,GAAK,IAAIq8J,EAAKjvN,IAAMA,KAAMgvN,EAAI,QAGlC,KAFftjN,EAAIonD,EAAEk4J,KAAK3mM,IAELzb,EAAEwX,GAAe,CACrB,IAAKzZ,EAAIyZ,EAAG1U,EAAE9C,EAAEjC,KAAOmsD,EAAElqD,EAAEjC,IAAMA,MACjC,IAAU,GAANA,EAAS,MAGfA,EAAImsD,EACJA,EAAIzuC,EACJA,EAAI3Y,EACJA,EAAI/E,EAON,OAHAgmN,GAAW,EACXjhN,EAAE9C,EAAEtO,OAAS8lB,EAAI,EAEV1U,EAKT,SAASyjN,EAAQtsN,EAAGovB,GAElB,IADA,IAAIjyB,EAAI6C,IACCovB,GAAGjyB,GAAK6C,EACjB,OAAO7C,EAKT,SAASuvN,EAAiBN,EAAM3sN,GAC9B,IAAIoJ,EACF2lN,EAAQ/uN,EAAE4D,EAAI,EACdswN,EAAKlF,EAAMrC,EAAMA,EAAKzwJ,UAAW,GACjC4yJ,EAASoF,EAAGnH,MAAM,IAIpB,IAFA/sN,EAAIA,EAAEwsC,OAEA0iL,IAAIJ,GAER,OADAtF,EAAWuF,EAAQ,EAAI,EAChB/uN,EAKT,IAFAoJ,EAAIpJ,EAAE8tN,SAASoG,IAET3G,SACJ/D,EAAWuF,EAAQ,EAAI,MAClB,CAIL,IAHA/uN,EAAIA,EAAEymN,MAAMr9M,EAAE2jN,MAAMmH,KAGdhF,IAAIJ,GAER,OADAtF,EAAWgK,EAAMpqN,GAAM2lN,EAAQ,EAAI,EAAMA,EAAQ,EAAI,EAC9C/uN,EAGTwpN,EAAWgK,EAAMpqN,GAAM2lN,EAAQ,EAAI,EAAMA,EAAQ,EAAI,EAGvD,OAAO/uN,EAAEymN,MAAMyN,GAAI1nL,MASrB,SAAS0kL,EAAelxN,EAAG+rN,EAASa,EAAInB,GACtC,IAAIvwN,EAAMy0B,EAAG13B,EAAG6lB,EAAG/lB,EAAKo7N,EAAS7kM,EAAKk+L,EAAIzqM,EACxC4qM,EAAO3sN,EAAElE,YACTu3N,OAAe,IAAPzG,EAWV,GATIyG,GACF9H,EAAWqB,EAAI,EAAGlD,QACP,IAAP+B,EAAeA,EAAKkB,EAAK7C,SACxByB,EAAWE,EAAI,EAAG,KAEvBmB,EAAKD,EAAKzwJ,UACVuvJ,EAAKkB,EAAK7C,UAGP9pN,EAAE+E,WAEA,CAoCL,IA3BIsuN,GACFn4N,EAAO,EACQ,IAAX6wN,EACFa,EAAU,EAALA,EAAS,EACM,GAAXb,IACTa,EAAU,EAALA,EAAS,IAGhB1xN,EAAO6wN,GAfT9zN,GADAq2B,EAAM+iM,EAAerxN,IACb4qB,QAAQ,OAsBP,IACP0D,EAAMA,EAAInlB,QAAQ,IAAK,KACvB4Y,EAAI,IAAI4qM,EAAK,IACXh9L,EAAIrB,EAAIt2B,OAASC,EACnB8pB,EAAEzb,EAAIulN,EAAYwF,EAAetvM,GAAI,GAAI7mB,GACzC6mB,EAAE4N,EAAI5N,EAAEzb,EAAEtO,QAIZ23B,EAAI53B,GADJy0N,EAAKX,EAAYv9L,EAAK,GAAIpzB,IACblD,OAGO,GAAbw0N,IAAKz0N,IAAYy0N,EAAG3lM,MAE3B,GAAK2lM,EAAG,GAED,CAyBL,GAxBIv0N,EAAI,EACN03B,MAEA3vB,EAAI,IAAI2sN,EAAK3sN,IACXsG,EAAIkmN,EACNxsN,EAAE2vB,EAAIA,EAEN68L,GADAxsN,EAAIytN,EAAOztN,EAAG+hB,EAAG6qM,EAAInB,EAAI,EAAGvwN,IACrBoL,EACPqpB,EAAI3vB,EAAE2vB,EACNwjM,EAAU5J,GAIZtxN,EAAIu0N,EAAGI,GACP9uM,EAAI5iB,EAAO,EACXi4N,EAAUA,QAA0B,IAAf3G,EAAGI,EAAK,GAE7BuG,EAAU1H,EAAK,QACJ,IAANxzN,GAAgBk7N,KAAoB,IAAP1H,GAAYA,KAAQzrN,EAAE4D,EAAI,EAAI,EAAI,IAChE3L,EAAI6lB,GAAK7lB,IAAM6lB,IAAa,IAAP2tM,GAAY0H,GAAkB,IAAP1H,GAAyB,EAAbe,EAAGI,EAAK,IAChEnB,KAAQzrN,EAAE4D,EAAI,EAAI,EAAI,IAE1B4oN,EAAGx0N,OAAS40N,EAERuG,EAGF,OAAS3G,IAAKI,GAAM1xN,EAAO,GACzBsxN,EAAGI,GAAM,EACJA,MACDj9L,EACF68L,EAAGz5K,QAAQ,IAMjB,IAAKh7C,EAAMy0N,EAAGx0N,QAASw0N,EAAGz0N,EAAM,KAAMA,GAGtC,IAAKE,EAAI,EAAGq2B,EAAM,GAAIr2B,EAAIF,EAAKE,IAAKq2B,GAAOq7L,EAAS/9E,OAAO4gF,EAAGv0N,IAG9D,GAAIo7N,EAAO,CACT,GAAIt7N,EAAM,EACR,GAAe,IAAXg0N,GAA4B,GAAXA,EAAc,CAEjC,IADA9zN,EAAe,IAAX8zN,EAAgB,EAAI,IACjBh0N,EAAKA,EAAME,EAAGF,IAAOu2B,GAAO,IAEnC,IAAKv2B,GADLy0N,EAAKX,EAAYv9L,EAAKpzB,EAAM6wN,IACd/zN,QAASw0N,EAAGz0N,EAAM,KAAMA,GAGtC,IAAKE,EAAI,EAAGq2B,EAAM,KAAMr2B,EAAIF,EAAKE,IAAKq2B,GAAOq7L,EAAS/9E,OAAO4gF,EAAGv0N,SAEhEq2B,EAAMA,EAAIs9G,OAAO,GAAK,IAAMt9G,EAAI1wB,MAAM,GAI1C0wB,EAAOA,GAAOqB,EAAI,EAAI,IAAM,MAAQA,OAC/B,GAAIA,EAAI,EAAG,CAChB,OAASA,GAAIrB,EAAM,IAAMA,EACzBA,EAAM,KAAOA,OAEb,KAAMqB,EAAI53B,EAAK,IAAK43B,GAAK53B,EAAK43B,KAAOrB,GAAO,SACnCqB,EAAI53B,IAAKu2B,EAAMA,EAAI1wB,MAAM,EAAG+xB,GAAK,IAAMrB,EAAI1wB,MAAM+xB,SAlE5DrB,EAAM+kM,EAAQ,OAAS,IAsEzB/kM,GAAkB,IAAXy9L,EAAgB,KAAkB,GAAXA,EAAe,KAAkB,GAAXA,EAAe,KAAO,IAAMz9L,OA9GhFA,EAAMglM,EAAkBtzN,GAiH1B,OAAOA,EAAE4D,EAAI,EAAI,IAAM0qB,EAAMA,EAK/B,SAASioL,EAASz+M,EAAKC,GACrB,GAAID,EAAIE,OAASD,EAEf,OADAD,EAAIE,OAASD,GACN,EAyDX,SAASy0C,GAAIxsC,GACX,OAAO,IAAIzG,KAAKyG,GAAGwsC,MAUrB,SAAS4I,GAAKp1C,GACZ,OAAO,IAAIzG,KAAKyG,GAAGo1C,OAWrB,SAASE,GAAMt1C,GACb,OAAO,IAAIzG,KAAKyG,GAAGs1C,QAYrB,SAASv3B,GAAI/d,EAAG+hB,GACd,OAAO,IAAIxoB,KAAKyG,GAAG0oN,KAAK3mM,GAW1B,SAASq0B,GAAKp2C,GACZ,OAAO,IAAIzG,KAAKyG,GAAGo2C,OAWrB,SAASE,GAAMt2C,GACb,OAAO,IAAIzG,KAAKyG,GAAGs2C,QAWrB,SAASE,GAAKx2C,GACZ,OAAO,IAAIzG,KAAKyG,GAAGw2C,OAWrB,SAASI,GAAM52C,GACb,OAAO,IAAIzG,KAAKyG,GAAG42C,QA6BrB,SAASF,GAAM30B,EAAG/hB,GAChB+hB,EAAI,IAAIxoB,KAAKwoB,GACb/hB,EAAI,IAAIzG,KAAKyG,GACb,IAAIQ,EACFksN,EAAKnzN,KAAK2iE,UACVuvJ,EAAKlyN,KAAKuwN,SACVwF,EAAM5C,EAAK,EAkCb,OA/BK3qM,EAAEne,GAAM5D,EAAE4D,EAIHme,EAAEzb,GAAMtG,EAAEsG,GAKVtG,EAAEsG,GAAKyb,EAAEwrM,UACnB/sN,EAAIR,EAAE4D,EAAI,EAAIorN,EAAMz1N,KAAMmzN,EAAIjB,GAAM,IAAIlyN,KAAK,IAC3CqK,EAAIme,EAAEne,GAGEme,EAAEzb,GAAKtG,EAAEutN,UACnB/sN,EAAIwuN,EAAMz1N,KAAM+1N,EAAK,GAAGvC,MAAM,KAC5BnpN,EAAIme,EAAEne,EAGC5D,EAAE4D,EAAI,GACfrK,KAAK2iE,UAAYozJ,EACjB/1N,KAAKuwN,SAAW,EAChBtpN,EAAIjH,KAAKi9C,KAAKi3K,EAAO1rM,EAAG/hB,EAAGsvN,EAAK,IAChCtvN,EAAIgvN,EAAMz1N,KAAM+1N,EAAK,GACrB/1N,KAAK2iE,UAAYwwJ,EACjBnzN,KAAKuwN,SAAW2B,EAChBjrN,EAAIuhB,EAAEne,EAAI,EAAIpD,EAAEimN,MAAMzmN,GAAKQ,EAAEkoN,KAAK1oN,IAElCQ,EAAIjH,KAAKi9C,KAAKi3K,EAAO1rM,EAAG/hB,EAAGsvN,EAAK,KAvBhC9uN,EAAIwuN,EAAMz1N,KAAM+1N,EAAK,GAAGvC,MAAM/sN,EAAE4D,EAAI,EAAI,IAAO,MAC7CA,EAAIme,EAAEne,EALRpD,EAAI,IAAIjH,KAAKi2D,KA8BRhvD,EAWT,SAAS2sN,GAAKntN,GACZ,OAAO,IAAIzG,KAAKyG,GAAGmtN,OAUrB,SAAS9qN,GAAKrC,GACZ,OAAOmsN,EAASnsN,EAAI,IAAIzG,KAAKyG,GAAIA,EAAE2vB,EAAI,EAAG,GAsB5C,SAAS3a,GAAOxX,GACd,IAAKA,GAAsB,iBAARA,EAAkB,MAAM4B,MAAMkrN,EAAe,mBAChE,IAAIryN,EAAG6E,EAAG0c,EACR26M,GAA+B,IAAjB32N,EAAI42N,SAClBpiI,EAAK,CACH,YAAa,EAAG03H,EAChB,WAAY,EAAG,EACf,YAAaD,EAAW,EACxB,WAAY,EAAGA,EACf,OAAQ,EAAGA,EACX,QAASA,EAAW,EACpB,SAAU,EAAG,GAGjB,IAAKxxN,EAAI,EAAGA,EAAI+5F,EAAGh6F,OAAQC,GAAK,EAE9B,GADI6E,EAAIk1F,EAAG/5F,GAAIk8N,IAAa56N,KAAKuD,GAAK+sN,EAAS/sN,SAC1B,KAAhB0c,EAAIhc,EAAIV,IAAgB,CAC3B,KAAI4tN,EAAUlxM,KAAOA,GAAKA,GAAKw4E,EAAG/5F,EAAI,IAAMuhB,GAAKw4E,EAAG/5F,EAAI,IACnD,MAAMmH,MAAMmrN,EAAkBztN,EAAI,KAAO0c,GADcjgB,KAAKuD,GAAK0c,EAM1E,GADI1c,EAAI,SAAUq3N,IAAa56N,KAAKuD,GAAK+sN,EAAS/sN,SAC7B,KAAhB0c,EAAIhc,EAAIV,IAAgB,CAC3B,IAAU,IAAN0c,IAAoB,IAANA,GAAqB,IAANA,GAAiB,IAANA,EAY1C,MAAMpa,MAAMmrN,EAAkBztN,EAAI,KAAO0c,GAXzC,GAAIA,EAAG,CACL,GAAqB,oBAAV4wM,SAAyBA,SACjCA,OAAOiK,kBAAmBjK,OAAOkK,YAGlC,MAAMl1N,MAAMqrN,GAFZlxN,KAAKuD,IAAK,OAKZvD,KAAKuD,IAAK,EAOhB,OAAOvD,KAWT,SAAS0nD,GAAIjhD,GACX,OAAO,IAAIzG,KAAKyG,GAAGihD,MAWrB,SAASE,GAAKnhD,GACZ,OAAO,IAAIzG,KAAKyG,GAAGmhD,OAuMrB,SAASlT,GAAIjuC,EAAG+hB,GACd,OAAO,IAAIxoB,KAAKyG,GAAGiuC,IAAIlsB,GAWzB,SAAS7f,GAAIlC,GACX,OAAO,IAAIzG,KAAKyG,GAAGkC,MAUrB,SAASqF,GAAMvH,GACb,OAAOmsN,EAASnsN,EAAI,IAAIzG,KAAKyG,GAAIA,EAAE2vB,EAAI,EAAG,GAa5C,SAAS4zH,KACP,IAAItrJ,EAAGyF,EACL0L,EAAI,IAAI7P,KAAK,GAIf,IAFA8wN,GAAW,EAENpyN,EAAI,EAAGA,EAAIwB,UAAUzB,QAExB,IADA0F,EAAI,IAAInE,KAAKE,UAAUxB,OAChBqO,EAMI8C,EAAE9C,IACX8C,EAAIA,EAAEs/M,KAAKhrN,EAAEqvN,MAAMrvN,SAPX,CACR,GAAIA,EAAEkG,EAEJ,OADAymN,GAAW,EACJ,IAAI9wN,KAAK,KAElB6P,EAAI1L,EAQR,OAFA2sN,GAAW,EAEJjhN,EAAE9G,OASX,SAASiyN,GAAkB/2N,GACzB,OAAOA,aAAe8rN,GAAW9rN,GAAoB,qBAAbA,EAAIK,OAA+B,EAW7E,SAASsxN,GAAGnvN,GACV,OAAO,IAAIzG,KAAKyG,GAAGmvN,KAcrB,SAAS/2M,GAAIpY,EAAG+hB,GACd,OAAO,IAAIxoB,KAAKyG,GAAGoY,IAAI2J,GAWzB,SAAS0zE,GAAKz1F,GACZ,OAAO,IAAIzG,KAAKyG,GAAGoY,IAAI,GAWzB,SAASo8M,GAAMx0N,GACb,OAAO,IAAIzG,KAAKyG,GAAGoY,IAAI,IAUzB,SAASnY,KACP,OAAOwzN,EAASl6N,KAAME,UAAW,MAUnC,SAASsG,KACP,OAAO0zN,EAASl6N,KAAME,UAAW,MAYnC,SAASoxD,GAAI7qD,EAAG+hB,GACd,OAAO,IAAIxoB,KAAKyG,GAAG6qD,IAAI9oC,GAYzB,SAASosB,GAAInuC,EAAG+hB,GACd,OAAO,IAAIxoB,KAAKyG,GAAGmuC,IAAIpsB,GAYzB,SAASovB,GAAInxC,EAAG+hB,GACd,OAAO,IAAIxoB,KAAKyG,GAAGmxC,IAAIpvB,GAYzB,SAASriB,GAAOktN,GACd,IAAItmN,EAAGqpB,EAAG7R,EAAGpgB,EACXzF,EAAI,EACJuI,EAAI,IAAIjH,KAAK,GACbqyN,EAAK,GAOP,QALW,IAAPgB,EAAeA,EAAKrzN,KAAK2iE,UACxBqvJ,EAAWqB,EAAI,EAAGlD,GAEvB5rM,EAAIre,KAAK4C,KAAKuqN,EAn6IH,GAq6INrzN,KAAK6wN,OAIH,GAAIA,OAAOiK,gBAGhB,IAFA/tN,EAAI8jN,OAAOiK,gBAAgB,IAAI5xN,YAAYqb,IAEpC7lB,EAAI6lB,IACTpgB,EAAI4I,EAAErO,KAIG,MACPqO,EAAErO,GAAKmyN,OAAOiK,gBAAgB,IAAI5xN,YAAY,IAAI,GAKlDmpN,EAAG3zN,KAAOyF,EAAI,QAKb,KAAI0sN,OAAOkK,YAwBhB,MAAMl1N,MAAMqrN,GAnBZ,IAFAnkN,EAAI8jN,OAAOkK,YAAYx2M,GAAK,GAErB7lB,EAAI6lB,IAGTpgB,EAAI4I,EAAErO,IAAMqO,EAAErO,EAAI,IAAM,IAAMqO,EAAErO,EAAI,IAAM,MAAmB,IAAXqO,EAAErO,EAAI,KAAc,MAG7D,MACPmyN,OAAOkK,YAAY,GAAGpmB,KAAK5nM,EAAGrO,IAK9B2zN,EAAGlvN,KAAKgB,EAAI,KACZzF,GAAK,GAITA,EAAI6lB,EAAI,OA5CR,KAAO7lB,EAAI6lB,GAAI8tM,EAAG3zN,KAAuB,IAAhBwH,KAAKC,SAAiB,EA2DjD,IATAktN,GAx9IW,GAu9IX9uM,EAAI8tM,IAAK3zN,KAIA20N,IACPlvN,EAAIitN,EAAQ,GA59IH,EA49IkBiC,GAC3BhB,EAAG3zN,IAAM6lB,EAAIpgB,EAAI,GAAKA,GAIP,IAAVkuN,EAAG3zN,GAAUA,IAAK2zN,EAAG/kM,MAG5B,GAAI5uB,EAAI,EACN03B,EAAI,EACJi8L,EAAK,CAAC,OACD,CAIL,IAHAj8L,GAAK,EAGY,IAAVi8L,EAAG,GAAUj8L,GA3+IX,EA2+I0Bi8L,EAAGjvF,QAGtC,IAAK7+G,EAAI,EAAGpgB,EAAIkuN,EAAG,GAAIluN,GAAK,GAAIA,GAAK,GAAIogB,IAGrCA,EAj/IK,IAi/IS6R,GAj/IT,EAi/IyB7R,GAMpC,OAHAtd,EAAEmvB,EAAIA,EACNnvB,EAAE8F,EAAIslN,EAECprN,EAYT,SAASuV,GAAM/V,GACb,OAAOmsN,EAASnsN,EAAI,IAAIzG,KAAKyG,GAAIA,EAAE2vB,EAAI,EAAGp2B,KAAKuwN,UAejD,SAASt2J,GAAKxzD,GAEZ,OADAA,EAAI,IAAIzG,KAAKyG,IACJsG,EAAKtG,EAAEsG,EAAE,GAAKtG,EAAE4D,EAAI,EAAI5D,EAAE4D,EAAK5D,EAAE4D,GAAK4rD,IAWjD,SAASkE,GAAI1zD,GACX,OAAO,IAAIzG,KAAKyG,GAAG0zD,MAWrB,SAASE,GAAK5zD,GACZ,OAAO,IAAIzG,KAAKyG,GAAG4zD,OAWrB,SAAStxD,GAAKtC,GACZ,OAAO,IAAIzG,KAAKyG,GAAGsC,OAYrB,SAASivC,GAAIvxC,EAAG+hB,GACd,OAAO,IAAIxoB,KAAKyG,GAAGuxC,IAAIxvB,GAWzB,SAAS00C,GAAIz2D,GACX,OAAO,IAAIzG,KAAKyG,GAAGy2D,MAWrB,SAAS10D,GAAK/B,GACZ,OAAO,IAAIzG,KAAKyG,GAAG+B,OAUrB,SAAS24C,GAAM16C,GACb,OAAOmsN,EAASnsN,EAAI,IAAIzG,KAAKyG,GAAIA,EAAE2vB,EAAI,EAAG,IAK5C25L,EAllBA,SAAS9tM,EAAMhe,GACb,IAAIvF,EAAG6E,EAAGk1F,EASV,SAASs3H,EAAQ9vM,GACf,IAAImW,EAAG13B,EAAGmR,EACRpJ,EAAIzG,KAGN,KAAMyG,aAAaspN,GAAU,OAAO,IAAIA,EAAQ9vM,GAOhD,GAHAxZ,EAAElE,YAAcwtN,EAGZ9vM,aAAa8vM,EAuBf,OAtBAtpN,EAAE4D,EAAI4V,EAAE5V,OAEJymN,GACG7wM,EAAElT,GAAKkT,EAAEmW,EAAI25L,EAAQa,MAGxBnqN,EAAE2vB,EAAI6/B,IACNxvD,EAAEsG,EAAI,MACGkT,EAAEmW,EAAI25L,EAAQY,MAGvBlqN,EAAE2vB,EAAI,EACN3vB,EAAEsG,EAAI,CAAC,KAEPtG,EAAE2vB,EAAInW,EAAEmW,EACR3vB,EAAEsG,EAAIkT,EAAElT,EAAE1I,UAGZoC,EAAE2vB,EAAInW,EAAEmW,EACR3vB,EAAEsG,EAAIkT,EAAElT,EAAIkT,EAAElT,EAAE1I,QAAU4b,EAAElT,IAQhC,GAAU,WAFV8C,SAAWoQ,GAES,CAClB,GAAU,IAANA,EAIF,OAHAxZ,EAAE4D,EAAI,EAAI4V,EAAI,GAAK,EAAI,EACvBxZ,EAAE2vB,EAAI,OACN3vB,EAAEsG,EAAI,CAAC,IAYT,GARIkT,EAAI,GACNA,GAAKA,EACLxZ,EAAE4D,GAAK,GAEP5D,EAAE4D,EAAI,EAIJ4V,MAAQA,GAAKA,EAAI,IAAK,CACxB,IAAKmW,EAAI,EAAG13B,EAAIuhB,EAAGvhB,GAAK,GAAIA,GAAK,GAAI03B,IAkBrC,YAhBI06L,EACE16L,EAAI25L,EAAQa,MACdnqN,EAAE2vB,EAAI6/B,IACNxvD,EAAEsG,EAAI,MACGqpB,EAAI25L,EAAQY,MACrBlqN,EAAE2vB,EAAI,EACN3vB,EAAEsG,EAAI,CAAC,KAEPtG,EAAE2vB,EAAIA,EACN3vB,EAAEsG,EAAI,CAACkT,KAGTxZ,EAAE2vB,EAAIA,EACN3vB,EAAEsG,EAAI,CAACkT,KAMJ,OAAQ,EAAJA,GAAU,GACdA,IAAGxZ,EAAE4D,EAAI4rD,KACdxvD,EAAE2vB,EAAI6/B,SACNxvD,EAAEsG,EAAI,OAIDwtN,EAAa9zN,EAAGwZ,EAAE7b,YAEpB,GAAU,WAANyL,EACT,MAAMhK,MAAMmrN,EAAkB/wM,GAahC,OAT8B,MAAzBvhB,EAAIuhB,EAAE0c,WAAW,KACpB1c,EAAIA,EAAE5b,MAAM,GACZoC,EAAE4D,GAAK,IAGG,KAAN3L,IAAUuhB,EAAIA,EAAE5b,MAAM,IAC1BoC,EAAE4D,EAAI,GAGDknN,EAAUhtN,KAAK0b,GAAKs6M,EAAa9zN,EAAGwZ,GAAKu6M,EAAW/zN,EAAGwZ,GA0DhE,GAvDA8vM,EAAQ3uN,UAAYuwN,EAEpB5B,EAAQmL,SAAW,EACnBnL,EAAQoL,WAAa,EACrBpL,EAAQqL,WAAa,EACrBrL,EAAQsL,YAAc,EACtBtL,EAAQuL,cAAgB,EACxBvL,EAAQwL,gBAAkB,EAC1BxL,EAAQyL,gBAAkB,EAC1BzL,EAAQ0L,gBAAkB,EAC1B1L,EAAQ2L,iBAAmB,EAC3B3L,EAAQ4L,OAAS,EAEjB5L,EAAQt0M,OAASs0M,EAAQ9qN,IAAMwW,GAC/Bs0M,EAAQ9tM,MAAQA,EAChB8tM,EAAQwB,UAAYyJ,GAEpBjL,EAAQ98K,IAAMA,GACd88K,EAAQl0K,KAAOA,GACfk0K,EAAQh0K,MAAQA,GAChBg0K,EAAQvrM,IAAMA,GACdurM,EAAQlzK,KAAOA,GACfkzK,EAAQhzK,MAAQA,GAChBgzK,EAAQ9yK,KAAOA,GACf8yK,EAAQ1yK,MAAQA,GAChB0yK,EAAQ5yK,MAAQA,GAChB4yK,EAAQ6D,KAAOA,GACf7D,EAAQjnN,KAAOA,GACfinN,EAAQroK,IAAMA,GACdqoK,EAAQnoK,KAAOA,GACfmoK,EAAQr7K,IAAMA,GACdq7K,EAAQpnN,IAAMA,GACdonN,EAAQ/hN,MAAQA,GAChB+hN,EAAQ/lE,MAAQA,GAChB+lE,EAAQ6F,GAAKA,GACb7F,EAAQlxM,IAAMA,GACdkxM,EAAQkL,MAAQA,GAChBlL,EAAQ7zH,KAAOA,GACf6zH,EAAQrpN,IAAMA,GACdqpN,EAAQvpN,IAAMA,GACdupN,EAAQz+J,IAAMA,GACdy+J,EAAQn7K,IAAMA,GACdm7K,EAAQn4K,IAAMA,GACdm4K,EAAQ5pN,OAASA,GACjB4pN,EAAQvzM,MAAQA,GAChBuzM,EAAQ91J,KAAOA,GACf81J,EAAQ51J,IAAMA,GACd41J,EAAQ11J,KAAOA,GACf01J,EAAQhnN,KAAOA,GACfgnN,EAAQ/3K,IAAMA,GACd+3K,EAAQ7yJ,IAAMA,GACd6yJ,EAAQvnN,KAAOA,GACfunN,EAAQ5uK,MAAQA,QAEJ,IAARl9C,IAAgBA,EAAM,IACtBA,IACmB,IAAjBA,EAAI42N,SAEN,IADApiI,EAAK,CAAC,YAAa,WAAY,WAAY,WAAY,OAAQ,OAAQ,SAAU,UAC5E/5F,EAAI,EAAGA,EAAI+5F,EAAGh6F,QAAcwF,EAAIJ,eAAeN,EAAIk1F,EAAG/5F,QAAOuF,EAAIV,GAAKvD,KAAKuD,IAMpF,OAFAwsN,EAAQt0M,OAAOxX,GAER8rN,EAgaC9tM,CAAMquM,IAEC,QAAIP,EAAQA,QAAUA,EAGvCM,EAAO,IAAIN,EAAQM,GACnBhuJ,EAAK,IAAI0tJ,EAAQ1tJ,QAUd,KAFD,aACE,OAAO0tJ,GACR,8BAnvJJ,I,sBCMD1xN,EAAOC,QAAU,SAAS0qD,EAAMjiD,EAAGC,GACjC,GAAID,IAAMC,EAAG,OAAO,EAEpB,GAAID,GAAKC,GAAiB,iBAALD,GAA6B,iBAALC,EAAe,CAC1D,GAAID,EAAExE,cAAgByE,EAAEzE,YAAa,OAAO,EAE5C,IAAI9D,EAAQC,EAAGooB,EACf,GAAIloB,MAAMC,QAAQkI,GAAI,CAEpB,IADAtI,EAASsI,EAAEtI,SACGuI,EAAEvI,OAAQ,OAAO,EAC/B,IAAKC,EAAID,EAAgB,GAARC,KACf,IAAKsqD,EAAMjiD,EAAErI,GAAIsI,EAAEtI,IAAK,OAAO,EACjC,OAAO,EAKT,GAAIqI,EAAExE,cAAgBqoF,OAAQ,OAAO7jF,EAAEqxI,SAAWpxI,EAAEoxI,QAAUrxI,EAAEqH,QAAUpH,EAAEoH,MAC5E,GAAIrH,EAAE0lN,UAAYzrN,OAAOI,UAAUqrN,QAAS,OAAO1lN,EAAE0lN,YAAczlN,EAAEylN,UACrE,GAAI1lN,EAAE3C,WAAapD,OAAOI,UAAUgD,SAAU,OAAO2C,EAAE3C,aAAe4C,EAAE5C,WAIxE,IADA3F,GADAqoB,EAAO9lB,OAAO8lB,KAAK/f,IACLtI,UACCuC,OAAO8lB,KAAK9f,GAAGvI,OAAQ,OAAO,EAE7C,IAAKC,EAAID,EAAgB,GAARC,KACf,IAAKsC,OAAOI,UAAUyC,eAAe/B,KAAKkF,EAAG8f,EAAKpoB,IAAK,OAAO,EAEhE,IAAKA,EAAID,EAAgB,GAARC,KAAY,CAC3B,IAAIa,EAAMunB,EAAKpoB,GAEf,IAAKsqD,EAAMjiD,EAAExH,GAAMyH,EAAEzH,IAAO,OAAO,EAGrC,OAAO,EAIT,OAAOwH,GAAIA,GAAKC,GAAIA,I,mBC5CtB,OAuCA,SAAU8nN,GAER,aAKA,IAGI6C,EAAI,CACN,EAAK,EACL,EAAK,EACL,EAAK,GAGP,SAASiK,EAAYt3N,GAEnB,SAASu3N,IACP,IAAI71N,EAAOH,MAAM1F,MAAMH,KAAME,WAC7B8F,EAAW,KAAIhG,KAAW,KAAIsE,EAC9BtE,KAAY,MAAIgG,EAAY,MAC5BhG,KAAc,QAAIgG,EAAc,QAQlC,SAAS81N,KAIT,OAHAA,EAAsB16N,UAAYyE,MAAMzE,UACxCy6N,EAAiBz6N,UAAY,IAAI06N,EAE1BD,EAGT,IAAIE,EAAiBC,EAAyB,eAAIJ,EAAY,kBAC1DK,EAAmBD,EAA2B,iBAAIJ,EAAY,oBAElE,SAAS1sN,EAAO/K,EAAGkG,GAKjB,OAHIkB,MAAMpH,EAAIihG,SAASjhG,EAAG,MACxB+3N,IAEK/3N,EAAIkG,EAGb,SAAS6xN,IACP,MAAM,IAAID,EAGZ,IAAI5/L,EAAQ,SAASiqD,EAAI61I,GAEvB,IAOI/tJ,EAPAjqE,EAAI,EAAG4I,EAAI,EAAG1C,EAAI,EAClB4V,EAAI,EAAG4wC,EAAI,EAAGpqD,EAAI,EAAG+hB,EAAI,EAAGu6F,EAAI,EAEhCq5G,EAAI,EAAGC,EAAI,EACXzU,EAAI,EAAG0U,EAAI,EAEXjuJ,EAAI,IAGR,GAAIiY,cAEG,QAAWjmF,IAAP87N,EAGT9xN,GAFAlG,EAAImiF,IACJv5E,EAAIovN,QAGJ,cAAe71I,GAEb,IAAK,SAEG,MAAOA,GAAM,MAAOA,GACtBniF,EAAImiF,EAAM,EACVv5E,EAAIu5E,EAAM,EACN,MAAOA,IACTniF,GAAKmiF,EAAM,IACJ,KAAKA,GACdniF,EAAImiF,EAAG,GACH,KAAKA,IACPv5E,EAAIu5E,EAAG,KAET41I,IAEF7xN,EAAIlG,EAAI4I,EACR,MAEJ,IAAK,SAOD,GALIu5E,EAAK,IACPj8E,EAAIi8E,EACJA,GAAMA,GAGJA,EAAK,GAAM,EACbniF,EAAImiF,OACC,GAAIA,EAAK,EAAG,CAUjB,IARIA,GAAM,IAERA,GADAy8B,EAAI78G,KAAK0xC,IAAI,GAAI1xC,KAAK8H,MAAM,EAAI9H,KAAK2Y,IAAIynE,GAAMpgF,KAAKmqN,QAO/CgM,GAAKhuJ,GAAKiuJ,GAAKjuJ,GAAG,CAGvB,GAAIiY,KAFJlY,GAAKguJ,EAAIxU,IAAMyU,EAAIC,IAEL,CACRD,EAAIC,GAAKjuJ,GACXlqE,EAAIi4N,EAAIxU,EACR76M,EAAIsvN,EAAIC,GACCA,EAAID,GACbl4N,EAAIyjN,EACJ76M,EAAIuvN,IAEJn4N,EAAIi4N,EACJrvN,EAAIsvN,GAEN,MAII/1I,EAAKlY,GACPguJ,GAAKxU,EACLyU,GAAKC,IAEL1U,GAAKwU,EACLE,GAAKD,GAGHA,EAAIhuJ,GACNlqE,EAAIyjN,EACJ76M,EAAIuvN,IAEJn4N,EAAIi4N,EACJrvN,EAAIsvN,GAIVl4N,GAAK4+G,OACIx3G,MAAM+6E,IAAO/6E,MAAM4wN,MAC5BpvN,EAAI5I,EAAI8xD,KAEV,MAEJ,IAAK,SAgDD,GA5CU,QAFVomK,EAAI/1I,EAAG9+C,MAAM,YAGX00L,IAEW,MAATG,EAAED,IACJ/xN,GAAK,EACL+xN,KACkB,MAATC,EAAED,IACXA,IAGEC,EAAE59N,SAAW29N,EAAI,EACnBvrK,EAAI3hD,EAAOmtN,EAAED,KAAM/xN,GACG,MAAbgyN,EAAED,EAAI,IAAuB,MAATC,EAAED,IAElB,MAATC,EAAED,KACJn8M,EAAI/Q,EAAOmtN,EAAED,KAAM/xN,KAKb,KAHR+xN,IAGcC,EAAE59N,QAAuB,MAAb49N,EAAED,EAAI,IAA2B,MAAbC,EAAED,EAAI,IAA2B,MAAbC,EAAED,EAAI,IAA2B,MAAbC,EAAED,EAAI,MAC1FvrK,EAAI3hD,EAAOmtN,EAAED,GAAI/xN,GACjBme,EAAItiB,KAAK0xC,IAAI,GAAIykL,EAAED,GAAG39N,QACtB29N,MAIW,MAATC,EAAED,IAA2B,MAAbC,EAAED,EAAI,IAAuB,MAATC,EAAED,IAA2B,MAAbC,EAAED,EAAI,MAC5D31N,EAAIyI,EAAOmtN,EAAED,EAAI,GAAI/xN,GACrB04G,EAAI78G,KAAK0xC,IAAI,GAAIykL,EAAED,EAAI,GAAG39N,QAAU,EACpC29N,GAAK,IAGe,MAAbC,EAAED,EAAI,IAA2B,MAAbC,EAAED,EAAI,IACnCvrK,EAAI3hD,EAAOmtN,EAAED,GAAI/xN,GACjBme,EAAItZ,EAAOmtN,EAAED,EAAI,GAAI,GACrBA,GAAK,GACiB,MAAbC,EAAED,EAAI,IAA2B,MAAbC,EAAED,EAAI,KACnCn8M,EAAI/Q,EAAOmtN,EAAED,GAAI/xN,GACjBwmD,EAAI3hD,EAAOmtN,EAAED,EAAI,GAAI/xN,GACrBme,EAAItZ,EAAOmtN,EAAED,EAAI,GAAI,GACrBA,GAAK,GAGHC,EAAE59N,QAAU29N,EAAG,CAEjB/xN,EACAlG,EAAIsC,GAFJsG,EAAIyb,EAAIu6F,GAEI9iG,EAAI8iG,EAAIlyD,EACpB,MAKN,QACEqrK,IAGN,GAAU,IAANnvN,EACF,MAAM,IAAIgvN,EAGZpK,EAAK,EAAItnN,EAAI,GAAK,EAAI,EACtBsnN,EAAK,EAAIzrN,KAAK+sC,IAAI9uC,GAClBwtN,EAAK,EAAIzrN,KAAK+sC,IAAIlmC,IAgEpB,SAASwvN,EAAIx1N,EAAGC,GAEd,IAAKD,EACH,OAAOC,EACT,IAAKA,EACH,OAAOD,EAET,OAAU,CAER,KADAA,GAAKC,GAEH,OAAOA,EAET,KADAA,GAAKD,GAEH,OAAOA,GAWb,SAASi1N,EAASj1N,EAAGC,GAEnB,KAAMhH,gBAAgBg8N,GACpB,OAAO,IAAIA,EAASj1N,EAAGC,GAGzBq1B,EAAMt1B,EAAGC,GAGPD,EADEi1N,EAAiB,OACfO,EAAI5K,EAAK,EAAGA,EAAK,GAEjB,EAGN3xN,KAAQ,EAAI2xN,EAAK,EACjB3xN,KAAQ,EAAI2xN,EAAK,EAAI5qN,EACrB/G,KAAQ,EAAI2xN,EAAK,EAAI5qN,EAOvBi1N,EAAiB,OAAI,EAErBA,EAAS56N,UAAY,CAEnB,EAAK,EACL,EAAK,EACL,EAAK,EAOL,IAAO,WAEL,OAAO,IAAI46N,EAASh8N,KAAQ,EAAGA,KAAQ,IAQzC,IAAO,WAEL,OAAO,IAAIg8N,GAAUh8N,KAAQ,EAAIA,KAAQ,EAAGA,KAAQ,IAQtD,IAAO,SAAS+G,EAAGC,GAGjB,OADAq1B,EAAMt1B,EAAGC,GACF,IAAIg1N,EACTh8N,KAAQ,EAAIA,KAAQ,EAAI2xN,EAAK,EAAIA,EAAK,EAAI3xN,KAAQ,EAAI2xN,EAAK,EAC3D3xN,KAAQ,EAAI2xN,EAAK,IASrB,IAAO,SAAS5qN,EAAGC,GAGjB,OADAq1B,EAAMt1B,EAAGC,GACF,IAAIg1N,EACTh8N,KAAQ,EAAIA,KAAQ,EAAI2xN,EAAK,EAAIA,EAAK,EAAI3xN,KAAQ,EAAI2xN,EAAK,EAC3D3xN,KAAQ,EAAI2xN,EAAK,IASrB,IAAO,SAAS5qN,EAAGC,GAGjB,OADAq1B,EAAMt1B,EAAGC,GACF,IAAIg1N,EACTh8N,KAAQ,EAAI2xN,EAAK,EAAI3xN,KAAQ,EAAI2xN,EAAK,EACtC3xN,KAAQ,EAAI2xN,EAAK,IASrB,IAAO,SAAS5qN,EAAGC,GAGjB,OADAq1B,EAAMt1B,EAAGC,GACF,IAAIg1N,EACTh8N,KAAQ,EAAI2xN,EAAK,EAAI3xN,KAAQ,EAAI2xN,EAAK,EACtC3xN,KAAQ,EAAI2xN,EAAK,IASrB,MAAS,WACP,OAAO,IAAIqK,EAASh8N,OAQtB,IAAO,SAAS+G,EAAGC,GAEjB,OAAIuE,MAAMvL,KAAQ,IAAMuL,MAAMvL,KAAQ,GAC7B,IAAIg8N,EAAS/lK,UAGZ51D,IAAN0G,EACK,IAAIi1N,EAASh8N,KAAQ,EAAIA,KAAQ,EAAIA,KAAQ,EAAG,IAGzDq8B,EAAMt1B,EAAGC,GACL,IAAM2qN,EAAK,GAAK,IAAM3xN,KAAQ,GAChCg8N,EAAS,EAAG,GAiBP,IAAIA,EACTh8N,KAAQ,GAAK2xN,EAAK,EAAI3xN,KAAQ,IAAM2xN,EAAK,EAAI3xN,KAAQ,GACrD2xN,EAAK,EAAI3xN,KAAQ,KASrB,IAAO,SAAS+G,EAAGC,GAMjB,OAJAq1B,EAAMt1B,EAAGC,GAIF,IAAIg1N,EAASO,EAAI5K,EAAK,EAAG3xN,KAAQ,GAAKu8N,EAAI5K,EAAK,EAAG3xN,KAAQ,GAAI2xN,EAAK,EAAI3xN,KAAQ,IAQxF,IAAO,SAAS+G,EAAGC,GAMjB,OAJAq1B,EAAMt1B,EAAGC,GAIM,IAAX2qN,EAAK,GAAyB,IAAd3xN,KAAQ,EACnB,IAAIg8N,EAEN,IAAIA,EAASrK,EAAK,EAAI3xN,KAAQ,EAAGu8N,EAAI5K,EAAK,EAAG3xN,KAAQ,GAAKu8N,EAAI5K,EAAK,EAAG3xN,KAAQ,KAQvF,KAAQ,SAAS4vN,GAIf,OAFAA,EAAS1pN,KAAK0xC,IAAI,GAAIg4K,GAAU,GAE5BrkN,MAAMvL,KAAQ,IAAMuL,MAAMvL,KAAQ,GAC7B,IAAIg8N,EAAS/lK,KAEf,IAAI+lK,EAAS91N,KAAK4C,KAAK8mN,EAAS5vN,KAAQ,EAAIA,KAAQ,EAAIA,KAAQ,GAAI4vN,IAQ7E,MAAS,SAASA,GAIhB,OAFAA,EAAS1pN,KAAK0xC,IAAI,GAAIg4K,GAAU,GAE5BrkN,MAAMvL,KAAQ,IAAMuL,MAAMvL,KAAQ,GAC7B,IAAIg8N,EAAS/lK,KAEf,IAAI+lK,EAAS91N,KAAK8H,MAAM4hN,EAAS5vN,KAAQ,EAAIA,KAAQ,EAAIA,KAAQ,GAAI4vN,IAQ9E,MAAS,SAASA,GAIhB,OAFAA,EAAS1pN,KAAK0xC,IAAI,GAAIg4K,GAAU,GAE5BrkN,MAAMvL,KAAQ,IAAMuL,MAAMvL,KAAQ,GAC7B,IAAIg8N,EAAS/lK,KAEf,IAAI+lK,EAAS91N,KAAKsW,MAAMozM,EAAS5vN,KAAQ,EAAIA,KAAQ,EAAIA,KAAQ,GAAI4vN,IAQ9E,QAAW,WAET,OAAO,IAAIoM,EAASh8N,KAAQ,EAAIA,KAAQ,EAAGA,KAAQ,IAQrD,IAAO,SAASm2B,GAEd,OAAIA,EAAI,EACC,IAAI6lM,EAAS91N,KAAK0xC,IAAI53C,KAAQ,EAAIA,KAAQ,GAAIm2B,GAAIjwB,KAAK0xC,IAAI53C,KAAQ,GAAIm2B,IAEvE,IAAI6lM,EAAS91N,KAAK0xC,IAAI53C,KAAQ,EAAIA,KAAQ,EAAGm2B,GAAIjwB,KAAK0xC,IAAI53C,KAAQ,EAAGm2B,KAShF,OAAU,SAASpvB,EAAGC,GAGpB,OADAq1B,EAAMt1B,EAAGC,GACFhH,KAAQ,EAAIA,KAAQ,EAAI2xN,EAAK,GAAMA,EAAK,EAAIA,EAAK,EAAI3xN,KAAQ,GAQtE,QAAW,SAAS+G,EAAGC,GAErBq1B,EAAMt1B,EAAGC,GACT,IAAI6I,EAAK7P,KAAQ,EAAIA,KAAQ,EAAI2xN,EAAK,EAAIA,EAAK,EAAIA,EAAK,EAAI3xN,KAAQ,EACpE,OAAQ,EAAI6P,IAAMA,EAAI,IAGxB,SAAY,SAAS2sN,GAInB,GAAIjxN,MAAMvL,KAAQ,IAAMuL,MAAMvL,KAAQ,GACpC,OAAOA,KAGT,IAAIy8N,EAAOz8N,KAAU,MAAiB,cAItC,SAAS08N,EAAI31N,GACX,OAAiB,IAAbA,EAAEtI,OACG,IAAIu9N,EAASj1N,EAAE,IACjB21N,EAAI31N,EAAE1C,MAAM,IAAa,UAAS,IAAE0C,EAAE,IAL/Cy1N,EAAMA,GAAO,KAQb,IAAK,IAAI99N,EAAI,EAAGA,EAAI+9N,EAAKh+N,OAAQC,IAAK,CACpC,IAAImgF,EAAM69I,EAAID,EAAKp4N,MAAM,EAAG3F,EAAI,IAChC,GAAImgF,EAAS,IAAE7+E,KAAU,OAAU,MAAIysN,UAAY+P,EACjD,OAAO39I,EAAS,IAAE7+E,KAAQ,GAG9B,OAAOA,MAQT,UAAa,SAAS+G,EAAGC,GAGvB,OADAq1B,EAAMt1B,EAAGC,OACE2qN,EAAK,EAAI3xN,KAAQ,IAAQA,KAAQ,EAAI2xN,EAAK,GAAMA,EAAK,EAAI3xN,KAAQ,KAQ9E,QAAW,WAET,OAAOA,KAAQ,EAAIA,KAAQ,EAAIA,KAAQ,GAQzC,WAAc,SAAS28N,GAErB,IAAIC,EAAO7nM,EAAM,GACb5wB,EAAInE,KAAQ,EACZ+M,EAAI/M,KAAQ,EAmBhB,OAlBIA,KAAQ,EAAI,IACd+0B,GAAO,KAGC,IAANhoB,EACFgoB,GAAO5wB,GAGHw4N,IAAiBC,EAAQ12N,KAAK8H,MAAM7J,EAAI4I,IAAM,IAChDgoB,GAAO6nM,EACP7nM,GAAO,IACP5wB,GAAK4I,GAGPgoB,GAAO5wB,EACP4wB,GAAO,IACPA,GAAOhoB,GAEFgoB,GAQT,QAAW,SAAS4nM,GAElB,IAAIC,EAAO7nM,EAAM,GACb5wB,EAAInE,KAAQ,EACZ+M,EAAI/M,KAAQ,EAoBhB,OAnBIA,KAAQ,EAAI,IACd+0B,GAAO,KAGC,IAANhoB,EACFgoB,GAAO5wB,GAGHw4N,IAAiBC,EAAQ12N,KAAK8H,MAAM7J,EAAI4I,IAAM,IAChDgoB,GAAO6nM,EACPz4N,GAAK4I,GAGPgoB,GAAO,UACPA,GAAO5wB,EACP4wB,GAAO,KACPA,GAAOhoB,EACPgoB,GAAO,KAEFA,GAQT,YAAe,WAEb,IAAIllB,EACA9I,EAAI/G,KAAQ,EACZgH,EAAIhH,KAAQ,EACZooB,EAAM,GAEV,GAAI7c,MAAMxE,IAAMwE,MAAMvE,GACpB,OAAOohB,EAGT,GACEA,EAAIjlB,KAAK+C,KAAK8H,MAAMjH,EAAIC,IACxB6I,EAAI9I,EAAIC,EACRD,EAAIC,EACJA,EAAI6I,QACS,IAAN9I,GAET,OAAOqhB,GAQT,SAAY,SAASy0M,GAEnB,IAAIvsN,EACA+9D,EAAIruE,KAAQ,EACZs8N,EAAIt8N,KAAQ,EAEhB,GAAIuL,MAAM8iE,IAAM9iE,MAAM+wN,GACpB,MAAO,MAGJN,EAAiB,SAEpB3tJ,GADA/9D,EAAIisN,EAAIluJ,EAAGiuJ,GAEXA,GAAKhsN,GAGPusN,EAAMA,GAAO,GAEb,IAAIC,EA/fR,SAAkB34N,EAAG4I,GAEnB,KAAOA,EAAI,GAAM,EACfA,GAAK,GAGP,KAAOA,EAAI,GAAM,EACfA,GAAK,GAGP,GAAU,IAANA,EACF,OAAO,EAUT,IAHA,IAAIkzJ,EAAM,GAAKlzJ,EACX8C,EAAI,EAEO,IAARowJ,EAAWpwJ,IAGhB,GAFAowJ,EAAY,GAANA,EAAWlzJ,EAEb8C,EAzPY,IA0Pd,OAAO,EAEX,OAAOA,EAoeQktN,CAAS1uJ,EAAGiuJ,GACrBU,EAjeR,SAAoB74N,EAAG4I,EAAGvO,GAKxB,IAHA,IAAIy+N,EAAO,EACPC,EA/CN,SAAgBl2N,EAAGovB,EAAGD,GAGpB,IADA,IAAIlvB,EAAI,EACDmvB,EAAI,EAAGpvB,EAAKA,EAAIA,EAAKmvB,EAAGC,IAAM,EAE3B,EAAJA,IACFnvB,EAAKA,EAAID,EAAKmvB,GAGlB,OAAOlvB,EAsCIk2N,CAAO,GAAI3+N,EAAKuO,GAElB8C,EAAI,EAAGA,EAAI,IAAKA,IAAK,CAG5B,GAAIotN,IAASC,EACX,OAAOrtN,EAETotN,EAAc,GAAPA,EAAYlwN,EACnBmwN,EAAc,GAAPA,EAAYnwN,EAErB,OAAO,EAmdQqwN,CAAW/uJ,EAAGiuJ,EAAGQ,GAE1B/nM,GAAqB,IAAf/0B,KAAQ,EAAW,IAAM,GAUnC,GARA+0B,GAAOs5C,EAAIiuJ,EAAI,EAEfjuJ,GAAKiuJ,GACLjuJ,GAAK,MAGHt5C,GAAO,KAEL+nM,EAAQ,CAEV,IAAK,IAAIp+N,EAAIs+N,EAAQt+N,KACnBq2B,GAAOs5C,EAAIiuJ,EAAI,EACfjuJ,GAAKiuJ,EACLjuJ,GAAK,GAGP,IADAt5C,GAAO,IACEr2B,EAAIo+N,EAAQp+N,KACnBq2B,GAAOs5C,EAAIiuJ,EAAI,EACfjuJ,GAAKiuJ,EACLjuJ,GAAK,GAEPt5C,GAAO,SAEP,IAASr2B,EAAIm+N,EAAKxuJ,GAAK3vE,KACrBq2B,GAAOs5C,EAAIiuJ,EAAI,EACfjuJ,GAAKiuJ,EACLjuJ,GAAK,GAGT,OAAOt5C,SAOR,KAFU,EAAF,WACP,OAAOinM,GACR,QAFM,OAEN,aAhxBL,I,sBCrCA39N,EAAOC,QAAUmI,IACZY,OAAOkE,MAAM9E,IAOhBA,GAAK,OACJA,GAAK,MACC,OAANA,GACM,OAANA,GAEC,OAAUA,GAAKA,GAAK,OAAgB,QAANA,GAE9B,OAAUA,GAAKA,GAAK,OAEpB,OAAUA,GAAKA,GAAK,OAEpB,OAAUA,GAAKA,GAAK,OAEpB,OAAUA,GAAKA,GAAK,OAEpB,OAAUA,GAAKA,GAAK,OAEpB,OAAUA,GAAKA,GAAK,OAEpB,OAAUA,GAAKA,GAAK,OAEpB,OAAUA,GAAKA,GAAK,OACpB,OAAUA,GAAKA,GAAK,OAEpB,QAAWA,GAAKA,GAAK,QAErB,QAAWA,GAAKA,GAAK,QAErB,QAAWA,GAAKA,GAAK,S,SCjCzBpI,EAAOC,QAAU,SAAS++N,EAAat2N,EAAGC,GACzC,aACA,IAeCs2N,EAAQC,EAfLlO,EAAK,8EACRmO,EAAM,iBACNC,EAAM,iHACNC,EAAM,iBACNC,EAAM,KACNj/N,EAAI,SAAS2L,GAAK,OAAOgzN,EAAYO,cAAgB,GAAKvzN,GAAGmF,eAAiB,GAAKnF,GAEnF5D,EAAI/H,EAAEqI,GAAG6I,QAAQ4tN,EAAK,KAAO,GAC7Bh1M,EAAI9pB,EAAEsI,GAAG4I,QAAQ4tN,EAAK,KAAO,GAE7BK,EAAKp3N,EAAEmJ,QAAQy/M,EAAI,UAAUz/M,QAAQ,MAAM,IAAIA,QAAQ,MAAM,IAAIN,MAAM,MACvEwuN,EAAKt1M,EAAE5Y,QAAQy/M,EAAI,UAAUz/M,QAAQ,MAAM,IAAIA,QAAQ,MAAM,IAAIN,MAAM,MAEvEyuN,EAAK34H,SAAS3+F,EAAE+gC,MAAMk2L,GAAM,KAAsB,IAAdG,EAAGp/N,QAAgBgI,EAAE+gC,MAAMi2L,IAAQ/nM,KAAK2G,MAAM51B,GAClFu3N,EAAK54H,SAAS58E,EAAEgf,MAAMk2L,GAAM,KAAOK,GAAMv1M,EAAEgf,MAAMi2L,IAAQ/nM,KAAK2G,MAAM7T,IAAM,KAG3E,GAAIw1M,EAAI,CACP,GAAKD,EAAKC,EAAO,OAAQ,EACpB,GAAKD,EAAKC,EAAO,OAAO,EAG9B,IAAI,IAAIC,EAAK,EAAGC,EAAKh4N,KAAKQ,IAAIm3N,EAAGp/N,OAAQq/N,EAAGr/N,QAASw/N,EAAOC,EAAMD,IAAQ,CAKzE,GAHAX,IAAWO,EAAGI,IAAS,IAAIz2L,MAAMm2L,IAAQ79M,WAAW+9M,EAAGI,KAAUJ,EAAGI,IAAS,EAC7EV,IAAWO,EAAGG,IAAS,IAAIz2L,MAAMm2L,IAAQ79M,WAAWg+M,EAAGG,KAAUH,EAAGG,IAAS,EAEzE1yN,MAAM+xN,KAAY/xN,MAAMgyN,GAAW,OAAQhyN,MAAM+xN,GAAW,GAAK,EAMrE,UAJgBA,UAAkBC,IACjCD,GAAU,GACVC,GAAU,IAEPD,EAASC,EAAU,OAAQ,EAC/B,GAAID,EAASC,EAAU,OAAO,EAE/B,OAAO,I,eC3CR,IAIIY,EAJY,EAAQ,IAITC,CAHJ,EAAQ,MAGY,YAE/B//N,EAAOC,QAAU6/N,G,eCNjB,IAAIE,EAAY,EAAQ,MACpBC,EAAa,EAAQ,KACrBC,EAAU,EAAQ,MAClBC,EAAU,EAAQ,MAClBC,EAAU,EAAQ,MAStB,SAASC,EAAKljN,GACZ,IAAIvV,GAAS,EACTxH,EAAoB,MAAX+c,EAAkB,EAAIA,EAAQ/c,OAG3C,IADAuB,KAAKq+H,UACIp4H,EAAQxH,GAAQ,CACvB,IAAI4oC,EAAQ7rB,EAAQvV,GACpBjG,KAAKiF,IAAIoiC,EAAM,GAAIA,EAAM,KAK7Bq3L,EAAKt9N,UAAUi9H,MAAQggG,EACvBK,EAAKt9N,UAAkB,OAAIk9N,EAC3BI,EAAKt9N,UAAUM,IAAM68N,EACrBG,EAAKt9N,UAAU2D,IAAMy5N,EACrBE,EAAKt9N,UAAU6D,IAAMw5N,EAErBpgO,EAAOC,QAAUogO,G,eC/BjB,IAAIC,EAAiB,EAAQ,MACzBC,EAAkB,EAAQ,MAC1BC,EAAe,EAAQ,MACvBC,EAAe,EAAQ,MACvBC,EAAe,EAAQ,MAS3B,SAASC,EAAUxjN,GACjB,IAAIvV,GAAS,EACTxH,EAAoB,MAAX+c,EAAkB,EAAIA,EAAQ/c,OAG3C,IADAuB,KAAKq+H,UACIp4H,EAAQxH,GAAQ,CACvB,IAAI4oC,EAAQ7rB,EAAQvV,GACpBjG,KAAKiF,IAAIoiC,EAAM,GAAIA,EAAM,KAK7B23L,EAAU59N,UAAUi9H,MAAQsgG,EAC5BK,EAAU59N,UAAkB,OAAIw9N,EAChCI,EAAU59N,UAAUM,IAAMm9N,EAC1BG,EAAU59N,UAAU2D,IAAM+5N,EAC1BE,EAAU59N,UAAU6D,IAAM85N,EAE1B1gO,EAAOC,QAAU0gO,G,eC/BjB,IAIIpuN,EAJY,EAAQ,IAIdwtN,CAHC,EAAQ,MAGO,OAE1B//N,EAAOC,QAAUsS,G,eCNjB,IAAIquN,EAAgB,EAAQ,MACxBC,EAAiB,EAAQ,MACzBC,EAAc,EAAQ,KACtBC,EAAc,EAAQ,MACtBC,EAAc,EAAQ,MAS1B,SAASC,EAAS9jN,GAChB,IAAIvV,GAAS,EACTxH,EAAoB,MAAX+c,EAAkB,EAAIA,EAAQ/c,OAG3C,IADAuB,KAAKq+H,UACIp4H,EAAQxH,GAAQ,CACvB,IAAI4oC,EAAQ7rB,EAAQvV,GACpBjG,KAAKiF,IAAIoiC,EAAM,GAAIA,EAAM,KAK7Bi4L,EAASl+N,UAAUi9H,MAAQ4gG,EAC3BK,EAASl+N,UAAkB,OAAI89N,EAC/BI,EAASl+N,UAAUM,IAAMy9N,EACzBG,EAASl+N,UAAU2D,IAAMq6N,EACzBE,EAASl+N,UAAU6D,IAAMo6N,EAEzBhhO,EAAOC,QAAUghO,G,eC/BjB,IAIIz/N,EAJY,EAAQ,IAIVu+N,CAHH,EAAQ,MAGW,WAE9B//N,EAAOC,QAAUuB,G,eCNjB,IAIIskB,EAJY,EAAQ,IAIdi6M,CAHC,EAAQ,MAGO,OAE1B//N,EAAOC,QAAU6lB,G,eCNjB,IAAIm7M,EAAW,EAAQ,MACnBC,EAAc,EAAQ,KACtBC,EAAc,EAAQ,MAU1B,SAASC,EAASl6N,GAChB,IAAIU,GAAS,EACTxH,EAAmB,MAAV8G,EAAiB,EAAIA,EAAO9G,OAGzC,IADAuB,KAAK0/N,SAAW,IAAIJ,IACXr5N,EAAQxH,GACfuB,KAAKwkB,IAAIjf,EAAOU,IAKpBw5N,EAASr+N,UAAUojB,IAAMi7M,EAASr+N,UAAU+B,KAAOo8N,EACnDE,EAASr+N,UAAU2D,IAAMy6N,EAEzBnhO,EAAOC,QAAUmhO,G,eC1BjB,IAAIT,EAAY,EAAQ,MACpBW,EAAa,EAAQ,MACrBC,EAAc,EAAQ,MACtBC,EAAW,EAAQ,MACnBC,EAAW,EAAQ,MACnBC,EAAW,EAAQ,MASvB,SAASC,EAAMxkN,GACb,IAAI7W,EAAO3E,KAAK0/N,SAAW,IAAIV,EAAUxjN,GACzCxb,KAAKmI,KAAOxD,EAAKwD,KAInB63N,EAAM5+N,UAAUi9H,MAAQshG,EACxBK,EAAM5+N,UAAkB,OAAIw+N,EAC5BI,EAAM5+N,UAAUM,IAAMm+N,EACtBG,EAAM5+N,UAAU2D,IAAM+6N,EACtBE,EAAM5+N,UAAU6D,IAAM86N,EAEtB1hO,EAAOC,QAAU0hO,G,eC1BjB,IAGIv9N,EAHO,EAAQ,MAGDA,OAElBpE,EAAOC,QAAUmE,G,eCLjB,IAGIyI,EAHO,EAAQ,MAGGA,WAEtB7M,EAAOC,QAAU4M,G,cCLjB,IAIItG,EAJY,EAAQ,IAIVw5N,CAHH,EAAQ,MAGW,WAE9B//N,EAAOC,QAAUsG,G,SCejBvG,EAAOC,QAZP,SAAmBwH,EAAOm6N,GAIxB,IAHA,IAAIh6N,GAAS,EACTxH,EAAkB,MAATqH,EAAgB,EAAIA,EAAMrH,SAE9BwH,EAAQxH,IAC8B,IAAzCwhO,EAASn6N,EAAMG,GAAQA,EAAOH,KAIpC,OAAOA,I,SCMTzH,EAAOC,QAfP,SAAqBwH,EAAOwsC,GAM1B,IALA,IAAIrsC,GAAS,EACTxH,EAAkB,MAATqH,EAAgB,EAAIA,EAAMrH,OACnCyhO,EAAW,EACX/4N,EAAS,KAEJlB,EAAQxH,GAAQ,CACvB,IAAIiB,EAAQoG,EAAMG,GACdqsC,EAAU5yC,EAAOuG,EAAOH,KAC1BqB,EAAO+4N,KAAcxgO,GAGzB,OAAOyH,I,eCrBT,IAAIg5N,EAAY,EAAQ,MACpBC,EAAc,EAAQ,MACtBvhO,EAAU,EAAQ,MAClBwhO,EAAW,EAAQ,MACnBC,EAAU,EAAQ,MAClBr4N,EAAe,EAAQ,MAMvBpE,EAHc7C,OAAOI,UAGQyC,eAqCjCxF,EAAOC,QA3BP,SAAuBoB,EAAO6gO,GAC5B,IAAIC,EAAQ3hO,EAAQa,GAChB+gO,GAASD,GAASJ,EAAY1gO,GAC9BghO,GAAUF,IAAUC,GAASJ,EAAS3gO,GACtCihO,GAAUH,IAAUC,IAAUC,GAAUz4N,EAAavI,GACrDkhO,EAAcJ,GAASC,GAASC,GAAUC,EAC1Cx5N,EAASy5N,EAAcT,EAAUzgO,EAAMjB,OAAQyN,QAAU,GACzDzN,EAAS0I,EAAO1I,OAEpB,IAAK,IAAIc,KAAOG,GACT6gO,IAAa18N,EAAe/B,KAAKpC,EAAOH,IACvCqhO,IAEQ,UAAPrhO,GAECmhO,IAAkB,UAAPnhO,GAA0B,UAAPA,IAE9BohO,IAAkB,UAAPphO,GAA0B,cAAPA,GAA8B,cAAPA,IAEtD+gO,EAAQ/gO,EAAKd,KAElB0I,EAAOhE,KAAK5D,GAGhB,OAAO4H,I,SCzBT9I,EAAOC,QAXP,SAAkBwH,EAAOm6N,GAKvB,IAJA,IAAIh6N,GAAS,EACTxH,EAAkB,MAATqH,EAAgB,EAAIA,EAAMrH,OACnC0I,EAASvI,MAAMH,KAEVwH,EAAQxH,GACf0I,EAAOlB,GAASg6N,EAASn6N,EAAMG,GAAQA,EAAOH,GAEhD,OAAOqB,I,SCET9I,EAAOC,QAXP,SAAmBwH,EAAOP,GAKxB,IAJA,IAAIU,GAAS,EACTxH,EAAS8G,EAAO9G,OAChBmO,EAAS9G,EAAMrH,SAEVwH,EAAQxH,GACfqH,EAAM8G,EAAS3G,GAASV,EAAOU,GAEjC,OAAOH,I,SCMTzH,EAAOC,QAZP,SAAmBwH,EAAOwsC,GAIxB,IAHA,IAAIrsC,GAAS,EACTxH,EAAkB,MAATqH,EAAgB,EAAIA,EAAMrH,SAE9BwH,EAAQxH,GACf,GAAI6zC,EAAUxsC,EAAMG,GAAQA,EAAOH,GACjC,OAAO,EAGX,OAAO,I,eCnBT,IASI+6N,EATe,EAAQ,IASXC,CAAa,UAE7BziO,EAAOC,QAAUuiO,G,SCAjBxiO,EAAOC,QAJP,SAAsByiO,GACpB,OAAOA,EAAOzxN,MAAM,M,eCRtB,IAAI0xN,EAAkB,EAAQ,MAC1B7M,EAAK,EAAQ,MAMbtwN,EAHc7C,OAAOI,UAGQyC,eAoBjCxF,EAAOC,QARP,SAAqBsF,EAAQrE,EAAKG,GAChC,IAAIuhO,EAAWr9N,EAAOrE,GAChBsE,EAAe/B,KAAK8B,EAAQrE,IAAQ40N,EAAG8M,EAAUvhO,UACxCW,IAAVX,GAAyBH,KAAOqE,IACnCo9N,EAAgBp9N,EAAQrE,EAAKG,K,eCvBjC,IAAIy0N,EAAK,EAAQ,MAoBjB91N,EAAOC,QAVP,SAAsBwH,EAAOvG,GAE3B,IADA,IAAId,EAASqH,EAAMrH,OACZA,KACL,GAAI01N,EAAGruN,EAAMrH,GAAQ,GAAIc,GACvB,OAAOd,EAGX,OAAQ,I,eCjBV,IAAIyiO,EAAa,EAAQ,MACrBp6M,EAAO,EAAQ,MAenBzoB,EAAOC,QAJP,SAAoBsF,EAAQw0I,GAC1B,OAAOx0I,GAAUs9N,EAAW9oF,EAAQtxH,EAAKsxH,GAASx0I,K,eCbpD,IAAIs9N,EAAa,EAAQ,MACrBC,EAAS,EAAQ,MAerB9iO,EAAOC,QAJP,SAAsBsF,EAAQw0I,GAC5B,OAAOx0I,GAAUs9N,EAAW9oF,EAAQ+oF,EAAO/oF,GAASx0I,K,eCbtD,IAAI3C,EAAiB,EAAQ,MAwB7B5C,EAAOC,QAbP,SAAyBsF,EAAQrE,EAAKG,GACzB,aAAPH,GAAsB0B,EACxBA,EAAe2C,EAAQrE,EAAK,CAC1B,cAAgB,EAChB,YAAc,EACd,MAASG,EACT,UAAY,IAGdkE,EAAOrE,GAAOG,I,eCpBlB,IAAIsgO,EAAQ,EAAQ,MAChBoB,EAAY,EAAQ,MACpBC,EAAc,EAAQ,MACtBC,EAAa,EAAQ,MACrBC,EAAe,EAAQ,MACvBC,EAAc,EAAQ,MACtBC,EAAY,EAAQ,KACpBC,EAAc,EAAQ,MACtBC,EAAgB,EAAQ,MACxBC,EAAa,EAAQ,MACrBC,EAAe,EAAQ,MACvBC,EAAS,EAAQ,MACjBC,EAAiB,EAAQ,MACzBC,EAAiB,EAAQ,MACzBC,EAAkB,EAAQ,MAC1BpjO,EAAU,EAAQ,MAClBwhO,EAAW,EAAQ,MACnB6B,EAAQ,EAAQ,MAChBC,EAAW,EAAQ,MACnBC,EAAQ,EAAQ,MAChBt7M,EAAO,EAAQ,MACfq6M,EAAS,EAAQ,MAQjBkB,EAAU,qBAKVC,EAAU,oBAIVC,EAAY,kBAoBZC,EAAgB,GACpBA,EAAcH,GAAWG,EA7BV,kBA8BfA,EAfqB,wBAeWA,EAdd,qBAelBA,EA9Bc,oBA8BWA,EA7BX,iBA8BdA,EAfiB,yBAeWA,EAdX,yBAejBA,EAdc,sBAcWA,EAbV,uBAcfA,EAbe,uBAaWA,EA5Bb,gBA6BbA,EA5BgB,mBA4BWA,EAAcD,GACzCC,EA3BgB,mBA2BWA,EA1Bd,gBA2BbA,EA1BgB,mBA0BWA,EAzBX,mBA0BhBA,EAhBe,uBAgBWA,EAfJ,8BAgBtBA,EAfgB,wBAeWA,EAdX,yBAcsC,EACtDA,EArCe,kBAqCWA,EAAcF,GACxCE,EA5BiB,qBA4BW,EA8F5BnkO,EAAOC,QA5EP,SAASmkO,EAAU/iO,EAAOgjO,EAASC,EAAYpjO,EAAKqE,EAAQ6jB,GAC1D,IAAItgB,EACAy7N,EAnEgB,EAmEPF,EACTG,EAnEgB,EAmEPH,EACT54F,EAnEmB,EAmEV44F,EAKb,GAHIC,IACFx7N,EAASvD,EAAS++N,EAAWjjO,EAAOH,EAAKqE,EAAQ6jB,GAASk7M,EAAWjjO,SAExDW,IAAX8G,EACF,OAAOA,EAET,IAAKg7N,EAASziO,GACZ,OAAOA,EAET,IAAI8gO,EAAQ3hO,EAAQa,GACpB,GAAI8gO,GAEF,GADAr5N,EAAS46N,EAAeriO,IACnBkjO,EACH,OAAOnB,EAAU/hO,EAAOyH,OAErB,CACL,IAAI27N,EAAMhB,EAAOpiO,GACbqjO,EAASD,GAAOR,GA7EX,8BA6EsBQ,EAE/B,GAAIzC,EAAS3gO,GACX,OAAO8hO,EAAY9hO,EAAOkjO,GAE5B,GAAIE,GAAOP,GAAaO,GAAOT,GAAYU,IAAWn/N,GAEpD,GADAuD,EAAU07N,GAAUE,EAAU,GAAKd,EAAgBviO,IAC9CkjO,EACH,OAAOC,EACHlB,EAAcjiO,EAAO6hO,EAAap6N,EAAQzH,IAC1CgiO,EAAYhiO,EAAO4hO,EAAWn6N,EAAQzH,QAEvC,CACL,IAAK8iO,EAAcM,GACjB,OAAOl/N,EAASlE,EAAQ,GAE1ByH,EAAS66N,EAAetiO,EAAOojO,EAAKF,IAIxCn7M,IAAUA,EAAQ,IAAIu4M,GACtB,IAAIgD,EAAUv7M,EAAM/lB,IAAIhC,GACxB,GAAIsjO,EACF,OAAOA,EAETv7M,EAAMxiB,IAAIvF,EAAOyH,GAEbi7N,EAAM1iO,GACRA,EAAMsM,SAAQ,SAASi3N,GACrB97N,EAAOqd,IAAIi+M,EAAUQ,EAAUP,EAASC,EAAYM,EAAUvjO,EAAO+nB,OAE9Dy6M,EAAMxiO,IACfA,EAAMsM,SAAQ,SAASi3N,EAAU1jO,GAC/B4H,EAAOlC,IAAI1F,EAAKkjO,EAAUQ,EAAUP,EAASC,EAAYpjO,EAAKG,EAAO+nB,OAIzE,IAII9mB,EAAQ6/N,OAAQngO,GAJLypI,EACV+4F,EAAShB,EAAeD,EACxBiB,EAAS1B,EAASr6M,GAEkBpnB,GASzC,OARA0hO,EAAUzgO,GAASjB,GAAO,SAASujO,EAAU1jO,GACvCoB,IAEFsiO,EAAWvjO,EADXH,EAAM0jO,IAIR5B,EAAYl6N,EAAQ5H,EAAKkjO,EAAUQ,EAAUP,EAASC,EAAYpjO,EAAKG,EAAO+nB,OAEzEtgB,I,eClKT,IAAIg7N,EAAW,EAAQ,MAGnBe,EAAeliO,OAAOsB,OAUtB6gO,EAAc,WAChB,SAASv/N,KACT,OAAO,SAASw/N,GACd,IAAKjB,EAASiB,GACZ,MAAO,GAET,GAAIF,EACF,OAAOA,EAAaE,GAEtBx/N,EAAOxC,UAAYgiO,EACnB,IAAIj8N,EAAS,IAAIvD,EAEjB,OADAA,EAAOxC,eAAYf,EACZ8G,GAZM,GAgBjB9I,EAAOC,QAAU6kO,G,eC7BjB,IAAIE,EAAW,EAAQ,MA+BvBhlO,EAAOC,QAnBP,SAAsBwH,EAAOm6N,EAAUl4J,GAIrC,IAHA,IAAI9hE,GAAS,EACTxH,EAASqH,EAAMrH,SAEVwH,EAAQxH,GAAQ,CACvB,IAAIiB,EAAQoG,EAAMG,GACdivH,EAAU+qG,EAASvgO,GAEvB,GAAe,MAAXw1H,SAAiC70H,IAAbijO,EACfpuG,GAAYA,IAAYmuG,EAASnuG,GAClCntD,EAAWmtD,EAASouG,IAE1B,IAAIA,EAAWpuG,EACX/tH,EAASzH,EAGjB,OAAOyH,I,SCLT9I,EAAOC,QAZP,SAAuBwH,EAAOwsC,EAAWixL,EAAWC,GAIlD,IAHA,IAAI/kO,EAASqH,EAAMrH,OACfwH,EAAQs9N,GAAaC,EAAY,GAAK,GAElCA,EAAYv9N,MAAYA,EAAQxH,GACtC,GAAI6zC,EAAUxsC,EAAMG,GAAQA,EAAOH,GACjC,OAAOG,EAGX,OAAQ,I,eCpBV,IAAIw9N,EAAY,EAAQ,MACpBC,EAAgB,EAAQ,MAoC5BrlO,EAAOC,QAvBP,SAASqlO,EAAY79N,EAAO8iC,EAAO0J,EAAWsxL,EAAUz8N,GACtD,IAAIlB,GAAS,EACTxH,EAASqH,EAAMrH,OAKnB,IAHA6zC,IAAcA,EAAYoxL,GAC1Bv8N,IAAWA,EAAS,MAEXlB,EAAQxH,GAAQ,CACvB,IAAIiB,EAAQoG,EAAMG,GACd2iC,EAAQ,GAAK0J,EAAU5yC,GACrBkpC,EAAQ,EAEV+6L,EAAYjkO,EAAOkpC,EAAQ,EAAG0J,EAAWsxL,EAAUz8N,GAEnDs8N,EAAUt8N,EAAQzH,GAEVkkO,IACVz8N,EAAOA,EAAO1I,QAAUiB,GAG5B,OAAOyH,I,eClCT,IAaI08N,EAbgB,EAAQ,KAadC,GAEdzlO,EAAOC,QAAUulO,G,eCfjB,IAAIA,EAAU,EAAQ,MAClB/8M,EAAO,EAAQ,MAcnBzoB,EAAOC,QAJP,SAAoBsF,EAAQq8N,GAC1B,OAAOr8N,GAAUigO,EAAQjgO,EAAQq8N,EAAUn5M,K,eCZ7C,IAAIi9M,EAAW,EAAQ,MACnBC,EAAQ,EAAQ,KAsBpB3lO,EAAOC,QAZP,SAAiBsF,EAAQ8Y,GAMvB,IAHA,IAAIzW,EAAQ,EACRxH,GAHJie,EAAOqnN,EAASrnN,EAAM9Y,IAGJnF,OAED,MAAVmF,GAAkBqC,EAAQxH,GAC/BmF,EAASA,EAAOogO,EAAMtnN,EAAKzW,OAE7B,OAAQA,GAASA,GAASxH,EAAUmF,OAASvD,I,eCpB/C,IAAIojO,EAAY,EAAQ,MACpB5kO,EAAU,EAAQ,MAkBtBR,EAAOC,QALP,SAAwBsF,EAAQqgO,EAAUC,GACxC,IAAI/8N,EAAS88N,EAASrgO,GACtB,OAAO/E,EAAQ+E,GAAUuD,EAASs8N,EAAUt8N,EAAQ+8N,EAAYtgO,M,eChBlE,IAAInB,EAAS,EAAQ,MACjB0hO,EAAY,EAAQ,MACpBC,EAAiB,EAAQ,MAOzBC,EAAiB5hO,EAASA,EAAO6hO,iBAAcjkO,EAkBnDhC,EAAOC,QATP,SAAoBoB,GAClB,OAAa,MAATA,OACeW,IAAVX,EAdQ,qBADL,gBAiBJ2kO,GAAkBA,KAAkBrjO,OAAOtB,GAC/CykO,EAAUzkO,GACV0kO,EAAe1kO,K,SCXrBrB,EAAOC,QAJP,SAAgBoB,EAAOozM,GACrB,OAAOpzM,EAAQozM,I,OCEjBz0M,EAAOC,QAJP,SAAmBsF,EAAQrE,GACzB,OAAiB,MAAVqE,GAAkBrE,KAAOyB,OAAO4C,K,eCTzC,IAAI2gO,EAAgB,EAAQ,MACxBC,EAAY,EAAQ,MACpBC,EAAgB,EAAQ,MAiB5BpmO,EAAOC,QANP,SAAqBwH,EAAOpG,EAAO6jO,GACjC,OAAO7jO,GAAUA,EACb+kO,EAAc3+N,EAAOpG,EAAO6jO,GAC5BgB,EAAcz+N,EAAO0+N,EAAWjB,K,eChBtC,IAAImB,EAAa,EAAQ,MACrBC,EAAe,EAAQ,MAgB3BtmO,EAAOC,QAJP,SAAyBoB,GACvB,OAAOilO,EAAajlO,IAVR,sBAUkBglO,EAAWhlO,K,cCd3C,IAAIklO,EAAkB,EAAQ,MAC1BD,EAAe,EAAQ,MA0B3BtmO,EAAOC,QAVP,SAASumO,EAAYnlO,EAAOozM,EAAO4vB,EAASC,EAAYl7M,GACtD,OAAI/nB,IAAUozM,IAGD,MAATpzM,GAA0B,MAATozM,IAAmB6xB,EAAajlO,KAAWilO,EAAa7xB,GACpEpzM,GAAUA,GAASozM,GAAUA,EAE/B8xB,EAAgBllO,EAAOozM,EAAO4vB,EAASC,EAAYkC,EAAap9M,M,eCxBzE,IAAIu4M,EAAQ,EAAQ,MAChB8E,EAAc,EAAQ,MACtBC,EAAa,EAAQ,MACrBC,EAAe,EAAQ,MACvBlD,EAAS,EAAQ,MACjBjjO,EAAU,EAAQ,MAClBwhO,EAAW,EAAQ,MACnBp4N,EAAe,EAAQ,MAMvBo6N,EAAU,qBACV4C,EAAW,iBACX1C,EAAY,kBAMZ1+N,EAHc7C,OAAOI,UAGQyC,eA6DjCxF,EAAOC,QA7CP,SAAyBsF,EAAQkvM,EAAO4vB,EAASC,EAAYuC,EAAWz9M,GACtE,IAAI09M,EAAWtmO,EAAQ+E,GACnBwhO,EAAWvmO,EAAQi0M,GACnBuyB,EAASF,EAAWF,EAAWnD,EAAOl+N,GACtC0hO,EAASF,EAAWH,EAAWnD,EAAOhvB,GAKtCyyB,GAHJF,EAASA,GAAUhD,EAAUE,EAAY8C,IAGhB9C,EACrBiD,GAHJF,EAASA,GAAUjD,EAAUE,EAAY+C,IAGhB/C,EACrBkD,EAAYJ,GAAUC,EAE1B,GAAIG,GAAapF,EAASz8N,GAAS,CACjC,IAAKy8N,EAASvtB,GACZ,OAAO,EAETqyB,GAAW,EACXI,GAAW,EAEb,GAAIE,IAAcF,EAEhB,OADA99M,IAAUA,EAAQ,IAAIu4M,GACdmF,GAAYl9N,EAAarE,GAC7BkhO,EAAYlhO,EAAQkvM,EAAO4vB,EAASC,EAAYuC,EAAWz9M,GAC3Ds9M,EAAWnhO,EAAQkvM,EAAOuyB,EAAQ3C,EAASC,EAAYuC,EAAWz9M,GAExE,KArDyB,EAqDnBi7M,GAAiC,CACrC,IAAIgD,EAAeH,GAAY1hO,EAAe/B,KAAK8B,EAAQ,eACvD+hO,EAAeH,GAAY3hO,EAAe/B,KAAKgxM,EAAO,eAE1D,GAAI4yB,GAAgBC,EAAc,CAChC,IAAIC,EAAeF,EAAe9hO,EAAOlE,QAAUkE,EAC/CiiO,EAAeF,EAAe7yB,EAAMpzM,QAAUozM,EAGlD,OADArrL,IAAUA,EAAQ,IAAIu4M,GACfkF,EAAUU,EAAcC,EAAcnD,EAASC,EAAYl7M,IAGtE,QAAKg+M,IAGLh+M,IAAUA,EAAQ,IAAIu4M,GACfgF,EAAaphO,EAAQkvM,EAAO4vB,EAASC,EAAYuC,EAAWz9M,M,eC/ErE,IAAIq6M,EAAS,EAAQ,MACjB6C,EAAe,EAAQ,MAgB3BtmO,EAAOC,QAJP,SAAmBoB,GACjB,OAAOilO,EAAajlO,IAVT,gBAUmBoiO,EAAOpiO,K,eCdvC,IAAIsgO,EAAQ,EAAQ,MAChB6E,EAAc,EAAQ,KA4D1BxmO,EAAOC,QA5CP,SAAqBsF,EAAQw0I,EAAQ0tF,EAAWnD,GAC9C,IAAI18N,EAAQ6/N,EAAUrnO,OAClBA,EAASwH,EACT8/N,GAAgBpD,EAEpB,GAAc,MAAV/+N,EACF,OAAQnF,EAGV,IADAmF,EAAS5C,OAAO4C,GACTqC,KAAS,CACd,IAAItB,EAAOmhO,EAAU7/N,GACrB,GAAK8/N,GAAgBphO,EAAK,GAClBA,EAAK,KAAOf,EAAOe,EAAK,MACtBA,EAAK,KAAMf,GAEnB,OAAO,EAGX,OAASqC,EAAQxH,GAAQ,CAEvB,IAAIc,GADJoF,EAAOmhO,EAAU7/N,IACF,GACXg7N,EAAWr9N,EAAOrE,GAClBymO,EAAWrhO,EAAK,GAEpB,GAAIohO,GAAgBphO,EAAK,IACvB,QAAiBtE,IAAb4gO,KAA4B1hO,KAAOqE,GACrC,OAAO,MAEJ,CACL,IAAI6jB,EAAQ,IAAIu4M,EAChB,GAAI2C,EACF,IAAIx7N,EAASw7N,EAAW1B,EAAU+E,EAAUzmO,EAAKqE,EAAQw0I,EAAQ3wH,GAEnE,UAAiBpnB,IAAX8G,EACE09N,EAAYmB,EAAU/E,EAAUgF,EAA+CtD,EAAYl7M,GAC3FtgB,GAEN,OAAO,GAIb,OAAO,I,SC/CT9I,EAAOC,QAJP,SAAmBoB,GACjB,OAAOA,GAAUA,I,eCRnB,IAAI4M,EAAa,EAAQ,MACrB45N,EAAW,EAAQ,MACnB/D,EAAW,EAAQ,MACnBgE,EAAW,EAAQ,KASnBC,EAAe,8BAGfC,EAAYljN,SAAS/hB,UACrBklO,EAActlO,OAAOI,UAGrBmlO,EAAeF,EAAUjiO,SAGzBP,EAAiByiO,EAAYziO,eAG7B2iO,EAAa57I,OAAO,IACtB27I,EAAazkO,KAAK+B,GAAgB+L,QAjBjB,sBAiBuC,QACvDA,QAAQ,yDAA0D,SAAW,KAmBhFvR,EAAOC,QARP,SAAsBoB,GACpB,SAAKyiO,EAASziO,IAAUwmO,EAASxmO,MAGnB4M,EAAW5M,GAAS8mO,EAAaJ,GAChC7hO,KAAK4hO,EAASzmO,M,eC3C/B,IAAIglO,EAAa,EAAQ,MACrBC,EAAe,EAAQ,MAgB3BtmO,EAAOC,QAJP,SAAsBoB,GACpB,OAAOilO,EAAajlO,IAVN,mBAUgBglO,EAAWhlO,K,eCd3C,IAAIoiO,EAAS,EAAQ,MACjB6C,EAAe,EAAQ,MAgB3BtmO,EAAOC,QAJP,SAAmBoB,GACjB,OAAOilO,EAAajlO,IAVT,gBAUmBoiO,EAAOpiO,K,eCdvC,IAAIglO,EAAa,EAAQ,MACrB+B,EAAW,EAAQ,MACnB9B,EAAe,EAAQ,MA8BvB+B,EAAiB,GACrBA,EAZiB,yBAYYA,EAXZ,yBAYjBA,EAXc,sBAWYA,EAVX,uBAWfA,EAVe,uBAUYA,EATZ,uBAUfA,EATsB,8BASYA,EARlB,wBAShBA,EARgB,yBAQY,EAC5BA,EAjCc,sBAiCYA,EAhCX,kBAiCfA,EApBqB,wBAoBYA,EAhCnB,oBAiCdA,EApBkB,qBAoBYA,EAhChB,iBAiCdA,EAhCe,kBAgCYA,EA/Bb,qBAgCdA,EA/Ba,gBA+BYA,EA9BT,mBA+BhBA,EA9BgB,mBA8BYA,EA7BZ,mBA8BhBA,EA7Ba,gBA6BYA,EA5BT,mBA6BhBA,EA5BiB,qBA4BY,EAc7BroO,EAAOC,QALP,SAA0BoB,GACxB,OAAOilO,EAAajlO,IAClB+mO,EAAS/mO,EAAMjB,WAAaioO,EAAehC,EAAWhlO,M,eCxD1D,IAAIinO,EAAc,EAAQ,MACtBC,EAAsB,EAAQ,MAC9Br4I,EAAW,EAAQ,MACnB1vF,EAAU,EAAQ,MAClB0C,EAAW,EAAQ,MA0BvBlD,EAAOC,QAjBP,SAAsBoB,GAGpB,MAAoB,mBAATA,EACFA,EAEI,MAATA,EACK6uF,EAEW,iBAAT7uF,EACFb,EAAQa,GACXknO,EAAoBlnO,EAAM,GAAIA,EAAM,IACpCinO,EAAYjnO,GAEX6B,EAAS7B,K,cC3BlB,IAAImnO,EAAc,EAAQ,MACtBC,EAAa,EAAQ,MAMrBjjO,EAHc7C,OAAOI,UAGQyC,eAsBjCxF,EAAOC,QAbP,SAAkBsF,GAChB,IAAKijO,EAAYjjO,GACf,OAAOkjO,EAAWljO,GAEpB,IAAIuD,EAAS,GACb,IAAK,IAAI5H,KAAOyB,OAAO4C,GACjBC,EAAe/B,KAAK8B,EAAQrE,IAAe,eAAPA,GACtC4H,EAAOhE,KAAK5D,GAGhB,OAAO4H,I,cC1BT,IAAIg7N,EAAW,EAAQ,MACnB0E,EAAc,EAAQ,MACtBE,EAAe,EAAQ,MAMvBljO,EAHc7C,OAAOI,UAGQyC,eAwBjCxF,EAAOC,QAfP,SAAoBsF,GAClB,IAAKu+N,EAASv+N,GACZ,OAAOmjO,EAAanjO,GAEtB,IAAIojO,EAAUH,EAAYjjO,GACtBuD,EAAS,GAEb,IAAK,IAAI5H,KAAOqE,GACD,eAAPrE,IAAyBynO,GAAYnjO,EAAe/B,KAAK8B,EAAQrE,KACrE4H,EAAOhE,KAAK5D,GAGhB,OAAO4H,I,eC7BT,IAAI8/N,EAAc,EAAQ,MACtBC,EAAe,EAAQ,MACvBC,EAA0B,EAAQ,MAmBtC9oO,EAAOC,QAVP,SAAqB85I,GACnB,IAAI0tF,EAAYoB,EAAa9uF,GAC7B,OAAwB,GAApB0tF,EAAUrnO,QAAeqnO,EAAU,GAAG,GACjCqB,EAAwBrB,EAAU,GAAG,GAAIA,EAAU,GAAG,IAExD,SAASliO,GACd,OAAOA,IAAWw0I,GAAU6uF,EAAYrjO,EAAQw0I,EAAQ0tF,M,eCjB5D,IAAIjB,EAAc,EAAQ,KACtBnjO,EAAM,EAAQ,MACd0lO,EAAQ,EAAQ,MAChBC,EAAQ,EAAQ,MAChBC,EAAqB,EAAQ,MAC7BH,EAA0B,EAAQ,MAClCnD,EAAQ,EAAQ,KA0BpB3lO,EAAOC,QAZP,SAA6Boe,EAAMspN,GACjC,OAAIqB,EAAM3qN,IAAS4qN,EAAmBtB,GAC7BmB,EAAwBnD,EAAMtnN,GAAOspN,GAEvC,SAASpiO,GACd,IAAIq9N,EAAWv/N,EAAIkC,EAAQ8Y,GAC3B,YAAqBrc,IAAb4gO,GAA0BA,IAAa+E,EAC3CoB,EAAMxjO,EAAQ8Y,GACdmoN,EAAYmB,EAAU/E,EAAUgF,M,QCfxC5nO,EAAOC,QANP,SAAsBiB,GACpB,OAAO,SAASqE,GACd,OAAiB,MAAVA,OAAiBvD,EAAYuD,EAAOrE,M,eCT/C,IAAIgoO,EAAU,EAAQ,MAetBlpO,EAAOC,QANP,SAA0Boe,GACxB,OAAO,SAAS9Y,GACd,OAAO2jO,EAAQ3jO,EAAQ8Y,M,SCmB3Bre,EAAOC,QArBP,SAAmBwH,EAAO0G,EAAOkU,GAC/B,IAAIza,GAAS,EACTxH,EAASqH,EAAMrH,OAEf+N,EAAQ,IACVA,GAASA,EAAQ/N,EAAS,EAAKA,EAAS+N,IAE1CkU,EAAMA,EAAMjiB,EAASA,EAASiiB,GACpB,IACRA,GAAOjiB,GAETA,EAAS+N,EAAQkU,EAAM,EAAMA,EAAMlU,IAAW,EAC9CA,KAAW,EAGX,IADA,IAAIrF,EAASvI,MAAMH,KACVwH,EAAQxH,GACf0I,EAAOlB,GAASH,EAAMG,EAAQuG,GAEhC,OAAOrF,I,SCRT9I,EAAOC,QAVP,SAAmB6F,EAAG87N,GAIpB,IAHA,IAAIh6N,GAAS,EACTkB,EAASvI,MAAMuF,KAEV8B,EAAQ9B,GACfgD,EAAOlB,GAASg6N,EAASh6N,GAE3B,OAAOkB,I,cChBT,IAAI1E,EAAS,EAAQ,MACjB+kO,EAAW,EAAQ,MACnB3oO,EAAU,EAAQ,MAClBwkO,EAAW,EAAQ,MAMnBoE,EAAchlO,EAASA,EAAOrB,eAAYf,EAC1CqnO,EAAiBD,EAAcA,EAAYrjO,cAAW/D,EA0B1DhC,EAAOC,QAhBP,SAASqpO,EAAajoO,GAEpB,GAAoB,iBAATA,EACT,OAAOA,EAET,GAAIb,EAAQa,GAEV,OAAO8nO,EAAS9nO,EAAOioO,GAAgB,GAEzC,GAAItE,EAAS3jO,GACX,OAAOgoO,EAAiBA,EAAe5lO,KAAKpC,GAAS,GAEvD,IAAIyH,EAAUzH,EAAQ,GACtB,MAAkB,KAAVyH,GAAkB,EAAIzH,IA3BjB,IA2BwC,KAAOyH,I,eCjC9D,IAAIygO,EAAkB,EAAQ,MAG1BC,EAAc,OAelBxpO,EAAOC,QANP,SAAkByiO,GAChB,OAAOA,EACHA,EAAO18N,MAAM,EAAGujO,EAAgB7G,GAAU,GAAGnxN,QAAQi4N,EAAa,IAClE9G,I,SCFN1iO,EAAOC,QANP,SAAmBw6H,GACjB,OAAO,SAASp5H,GACd,OAAOo5H,EAAKp5H,M,eCThB,IAAI8nO,EAAW,EAAQ,MAkBvBnpO,EAAOC,QANP,SAAoBsF,EAAQjD,GAC1B,OAAO6mO,EAAS7mO,GAAO,SAASpB,GAC9B,OAAOqE,EAAOrE,Q,SCFlBlB,EAAOC,QAJP,SAAkBw6I,EAAOv5I,GACvB,OAAOu5I,EAAM/zI,IAAIxF,K,eCTnB,IAAIgvF,EAAW,EAAQ,MAavBlwF,EAAOC,QAJP,SAAsBoB,GACpB,MAAuB,mBAATA,EAAsBA,EAAQ6uF,I,eCV9C,IAAI1vF,EAAU,EAAQ,MAClBwoO,EAAQ,EAAQ,MAChBS,EAAe,EAAQ,MACvB1jO,EAAW,EAAQ,MAiBvB/F,EAAOC,QAPP,SAAkBoB,EAAOkE,GACvB,OAAI/E,EAAQa,GACHA,EAEF2nO,EAAM3nO,EAAOkE,GAAU,CAAClE,GAASooO,EAAa1jO,EAAS1E,M,cCjBhE,IAAIqoO,EAAY,EAAQ,MAiBxB1pO,EAAOC,QANP,SAAmBwH,EAAO0G,EAAOkU,GAC/B,IAAIjiB,EAASqH,EAAMrH,OAEnB,OADAiiB,OAAcrgB,IAARqgB,EAAoBjiB,EAASiiB,GAC1BlU,GAASkU,GAAOjiB,EAAUqH,EAAQiiO,EAAUjiO,EAAO0G,EAAOkU,K,eCdrE,IAAIsnN,EAAc,EAAQ,MAkB1B3pO,EAAOC,QAPP,SAAuB2pO,EAAYC,GAGjC,IAFA,IAAIjiO,EAAQgiO,EAAWxpO,OAEhBwH,KAAW+hO,EAAYE,EAAYD,EAAWhiO,GAAQ,IAAM,IACnE,OAAOA,I,eCfT,IAAIiF,EAAa,EAAQ,MAezB7M,EAAOC,QANP,SAA0BklC,GACxB,IAAIr8B,EAAS,IAAIq8B,EAAYjhC,YAAYihC,EAAYxP,YAErD,OADA,IAAI9oB,EAAW/D,GAAQlC,IAAI,IAAIiG,EAAWs4B,IACnCr8B,I,0BCZT,IAAI2nN,EAAO,EAAQ,MAGfqZ,EAA4C7pO,IAAYA,EAAQ8pO,UAAY9pO,EAG5E+pO,EAAaF,GAA4C9pO,IAAWA,EAAO+pO,UAAY/pO,EAMvFq2B,EAHgB2zM,GAAcA,EAAW/pO,UAAY6pO,EAG5BrZ,EAAKp6L,YAASr0B,EACvCioO,EAAc5zM,EAASA,EAAO4zM,iBAAcjoO,EAqBhDhC,EAAOC,QAXP,SAAqBmjB,EAAQmhN,GAC3B,GAAIA,EACF,OAAOnhN,EAAOpd,QAEhB,IAAI5F,EAASgjB,EAAOhjB,OAChB0I,EAASmhO,EAAcA,EAAY7pO,GAAU,IAAIgjB,EAAOlf,YAAY9D,GAGxE,OADAgjB,EAAOkzL,KAAKxtM,GACLA,I,eC/BT,IAAIohO,EAAmB,EAAQ,MAe/BlqO,EAAOC,QALP,SAAuBkqO,EAAU5F,GAC/B,IAAInhN,EAASmhN,EAAS2F,EAAiBC,EAAS/mN,QAAU+mN,EAAS/mN,OACnE,OAAO,IAAI+mN,EAASjmO,YAAYkf,EAAQ+mN,EAAS9rM,WAAY8rM,EAASx0M,c,SCXxE,IAAIy0M,EAAU,OAedpqO,EAAOC,QANP,SAAqBoqO,GACnB,IAAIvhO,EAAS,IAAIuhO,EAAOnmO,YAAYmmO,EAAOtwF,OAAQqwF,EAAQjpD,KAAKkpD,IAEhE,OADAvhO,EAAOy6L,UAAY8mC,EAAO9mC,UACnBz6L,I,cCbT,IAAI1E,EAAS,EAAQ,MAGjBglO,EAAchlO,EAASA,EAAOrB,eAAYf,EAC1CsoO,EAAgBlB,EAAcA,EAAYhb,aAAUpsN,EAaxDhC,EAAOC,QAJP,SAAqBsqO,GACnB,OAAOD,EAAgB3nO,OAAO2nO,EAAc7mO,KAAK8mO,IAAW,K,eCd9D,IAAIL,EAAmB,EAAQ,MAe/BlqO,EAAOC,QALP,SAAyBuqO,EAAYjG,GACnC,IAAInhN,EAASmhN,EAAS2F,EAAiBM,EAAWpnN,QAAUonN,EAAWpnN,OACvE,OAAO,IAAIonN,EAAWtmO,YAAYkf,EAAQonN,EAAWnsM,WAAYmsM,EAAWpqO,U,QCO9EJ,EAAOC,QAXP,SAAmB85I,EAAQtyI,GACzB,IAAIG,GAAS,EACTxH,EAAS25I,EAAO35I,OAGpB,IADAqH,IAAUA,EAAQlH,MAAMH,MACfwH,EAAQxH,GACfqH,EAAMG,GAASmyI,EAAOnyI,GAExB,OAAOH,I,eChBT,IAAIu7N,EAAc,EAAQ,MACtBL,EAAkB,EAAQ,MAsC9B3iO,EAAOC,QA1BP,SAAoB85I,EAAQz3I,EAAOiD,EAAQ++N,GACzC,IAAImG,GAASllO,EACbA,IAAWA,EAAS,IAKpB,IAHA,IAAIqC,GAAS,EACTxH,EAASkC,EAAMlC,SAEVwH,EAAQxH,GAAQ,CACvB,IAAIc,EAAMoB,EAAMsF,GAEZ0c,EAAWggN,EACXA,EAAW/+N,EAAOrE,GAAM64I,EAAO74I,GAAMA,EAAKqE,EAAQw0I,QAClD/3I,OAEaA,IAAbsiB,IACFA,EAAWy1H,EAAO74I,IAEhBupO,EACF9H,EAAgBp9N,EAAQrE,EAAKojB,GAE7B0+M,EAAYz9N,EAAQrE,EAAKojB,GAG7B,OAAO/e,I,eCpCT,IAAIs9N,EAAa,EAAQ,MACrB6H,EAAa,EAAQ,MAczB1qO,EAAOC,QAJP,SAAqB85I,EAAQx0I,GAC3B,OAAOs9N,EAAW9oF,EAAQ2wF,EAAW3wF,GAASx0I,K,eCZhD,IAAIs9N,EAAa,EAAQ,MACrB8H,EAAe,EAAQ,MAc3B3qO,EAAOC,QAJP,SAAuB85I,EAAQx0I,GAC7B,OAAOs9N,EAAW9oF,EAAQ4wF,EAAa5wF,GAASx0I,K,eCZlD,IAGIqlO,EAHO,EAAQ,MAGG,sBAEtB5qO,EAAOC,QAAU2qO,G,SCmBjB5qO,EAAOC,QAjBP,SAAuBklO,GACrB,OAAO,SAAS5/N,EAAQq8N,EAAUgE,GAMhC,IALA,IAAIh+N,GAAS,EACTqe,EAAWtjB,OAAO4C,GAClBjD,EAAQsjO,EAASrgO,GACjBnF,EAASkC,EAAMlC,OAEZA,KAAU,CACf,IAAIc,EAAMoB,EAAM6iO,EAAY/kO,IAAWwH,GACvC,IAA+C,IAA3Cg6N,EAAS37M,EAAS/kB,GAAMA,EAAK+kB,GAC/B,MAGJ,OAAO1gB,K,eCpBX,IAAIw6N,EAAY,EAAQ,KAEpBn9N,EAAkB,WACpB,IACE,IAAI63H,EAAOslG,EAAUp9N,OAAQ,kBAE7B,OADA83H,EAAK,GAAI,GAAI,IACNA,EACP,MAAO1iG,KALU,GAQrB/3B,EAAOC,QAAU2C,G,eCVjB,IAAIw+N,EAAW,EAAQ,MACnByJ,EAAY,EAAQ,MACpBC,EAAW,EAAQ,MAiFvB9qO,EAAOC,QA9DP,SAAqBwH,EAAOgtM,EAAO4vB,EAASC,EAAYuC,EAAWz9M,GACjE,IAAI2hN,EAjBqB,EAiBT1G,EACZ2G,EAAYvjO,EAAMrH,OAClB6qO,EAAYx2B,EAAMr0M,OAEtB,GAAI4qO,GAAaC,KAAeF,GAAaE,EAAYD,GACvD,OAAO,EAGT,IAAIE,EAAa9hN,EAAM/lB,IAAIoE,GACvB0jO,EAAa/hN,EAAM/lB,IAAIoxM,GAC3B,GAAIy2B,GAAcC,EAChB,OAAOD,GAAcz2B,GAAS02B,GAAc1jO,EAE9C,IAAIG,GAAS,EACTkB,GAAS,EACTkd,EA/BuB,EA+Bfq+M,EAAoC,IAAIjD,OAAWp/N,EAM/D,IAJAonB,EAAMxiB,IAAIa,EAAOgtM,GACjBrrL,EAAMxiB,IAAI6tM,EAAOhtM,KAGRG,EAAQojO,GAAW,CAC1B,IAAII,EAAW3jO,EAAMG,GACjByjO,EAAW52B,EAAM7sM,GAErB,GAAI08N,EACF,IAAIgH,EAAWP,EACXzG,EAAW+G,EAAUD,EAAUxjO,EAAO6sM,EAAOhtM,EAAO2hB,GACpDk7M,EAAW8G,EAAUC,EAAUzjO,EAAOH,EAAOgtM,EAAOrrL,GAE1D,QAAiBpnB,IAAbspO,EAAwB,CAC1B,GAAIA,EACF,SAEFxiO,GAAS,EACT,MAGF,GAAIkd,GACF,IAAK6kN,EAAUp2B,GAAO,SAAS42B,EAAUE,GACnC,IAAKT,EAAS9kN,EAAMulN,KACfH,IAAaC,GAAYxE,EAAUuE,EAAUC,EAAUhH,EAASC,EAAYl7M,IAC/E,OAAOpD,EAAKlhB,KAAKymO,MAEjB,CACNziO,GAAS,EACT,YAEG,GACDsiO,IAAaC,IACXxE,EAAUuE,EAAUC,EAAUhH,EAASC,EAAYl7M,GACpD,CACLtgB,GAAS,EACT,OAKJ,OAFAsgB,EAAc,OAAE3hB,GAChB2hB,EAAc,OAAEqrL,GACT3rM,I,eChFT,IAAI1E,EAAS,EAAQ,MACjByI,EAAa,EAAQ,MACrBipN,EAAK,EAAQ,MACb2Q,EAAc,EAAQ,MACtB+E,EAAa,EAAQ,MACrBC,EAAa,EAAQ,MAqBrBrC,EAAchlO,EAASA,EAAOrB,eAAYf,EAC1CsoO,EAAgBlB,EAAcA,EAAYhb,aAAUpsN,EAoFxDhC,EAAOC,QAjEP,SAAoBsF,EAAQkvM,EAAOgwB,EAAKJ,EAASC,EAAYuC,EAAWz9M,GACtE,OAAQq7M,GACN,IAzBc,oBA0BZ,GAAKl/N,EAAOowB,YAAc8+K,EAAM9+K,YAC3BpwB,EAAO84B,YAAco2K,EAAMp2K,WAC9B,OAAO,EAET94B,EAASA,EAAO6d,OAChBqxL,EAAQA,EAAMrxL,OAEhB,IAlCiB,uBAmCf,QAAK7d,EAAOowB,YAAc8+K,EAAM9+K,aAC3BkxM,EAAU,IAAIh6N,EAAWtH,GAAS,IAAIsH,EAAW4nM,KAKxD,IAnDU,mBAoDV,IAnDU,gBAoDV,IAjDY,kBAoDV,OAAOqhB,GAAIvwN,GAASkvM,GAEtB,IAxDW,iBAyDT,OAAOlvM,EAAOU,MAAQwuM,EAAMxuM,MAAQV,EAAO8jB,SAAWorL,EAAMprL,QAE9D,IAxDY,kBAyDZ,IAvDY,kBA2DV,OAAO9jB,GAAWkvM,EAAQ,GAE5B,IAjES,eAkEP,IAAIi3B,EAAUF,EAEhB,IAjES,eAkEP,IAAIT,EA5EiB,EA4EL1G,EAGhB,GAFAqH,IAAYA,EAAUD,GAElBlmO,EAAOuE,MAAQ2qM,EAAM3qM,OAASihO,EAChC,OAAO,EAGT,IAAIpG,EAAUv7M,EAAM/lB,IAAIkC,GACxB,GAAIo/N,EACF,OAAOA,GAAWlwB,EAEpB4vB,GAtFuB,EAyFvBj7M,EAAMxiB,IAAIrB,EAAQkvM,GAClB,IAAI3rM,EAAS29N,EAAYiF,EAAQnmO,GAASmmO,EAAQj3B,GAAQ4vB,EAASC,EAAYuC,EAAWz9M,GAE1F,OADAA,EAAc,OAAE7jB,GACTuD,EAET,IAnFY,kBAoFV,GAAIwhO,EACF,OAAOA,EAAc7mO,KAAK8B,IAAW+kO,EAAc7mO,KAAKgxM,GAG9D,OAAO,I,eC5GT,IAAI8uB,EAAa,EAAQ,MASrB/9N,EAHc7C,OAAOI,UAGQyC,eAgFjCxF,EAAOC,QAjEP,SAAsBsF,EAAQkvM,EAAO4vB,EAASC,EAAYuC,EAAWz9M,GACnE,IAAI2hN,EAtBqB,EAsBT1G,EACZsH,EAAWpI,EAAWh+N,GACtBqmO,EAAYD,EAASvrO,OAIzB,GAAIwrO,GAHWrI,EAAW9uB,GACDr0M,SAEM2qO,EAC7B,OAAO,EAGT,IADA,IAAInjO,EAAQgkO,EACLhkO,KAAS,CACd,IAAI1G,EAAMyqO,EAAS/jO,GACnB,KAAMmjO,EAAY7pO,KAAOuzM,EAAQjvM,EAAe/B,KAAKgxM,EAAOvzM,IAC1D,OAAO,EAIX,IAAI2qO,EAAaziN,EAAM/lB,IAAIkC,GACvB4lO,EAAa/hN,EAAM/lB,IAAIoxM,GAC3B,GAAIo3B,GAAcV,EAChB,OAAOU,GAAcp3B,GAAS02B,GAAc5lO,EAE9C,IAAIuD,GAAS,EACbsgB,EAAMxiB,IAAIrB,EAAQkvM,GAClBrrL,EAAMxiB,IAAI6tM,EAAOlvM,GAGjB,IADA,IAAIumO,EAAWf,IACNnjO,EAAQgkO,GAAW,CAE1B,IAAIhJ,EAAWr9N,EADfrE,EAAMyqO,EAAS/jO,IAEXyjO,EAAW52B,EAAMvzM,GAErB,GAAIojO,EACF,IAAIgH,EAAWP,EACXzG,EAAW+G,EAAUzI,EAAU1hO,EAAKuzM,EAAOlvM,EAAQ6jB,GACnDk7M,EAAW1B,EAAUyI,EAAUnqO,EAAKqE,EAAQkvM,EAAOrrL,GAGzD,UAAmBpnB,IAAbspO,EACG1I,IAAayI,GAAYxE,EAAUjE,EAAUyI,EAAUhH,EAASC,EAAYl7M,GAC7EkiN,GACD,CACLxiO,GAAS,EACT,MAEFgjO,IAAaA,EAAkB,eAAP5qO,GAE1B,GAAI4H,IAAWgjO,EAAU,CACvB,IAAIC,EAAUxmO,EAAOrB,YACjB8nO,EAAUv3B,EAAMvwM,YAGhB6nO,GAAWC,KACV,gBAAiBzmO,MAAU,gBAAiBkvM,IACzB,mBAAXs3B,GAAyBA,aAAmBA,GACjC,mBAAXC,GAAyBA,aAAmBA,IACvDljO,GAAS,GAKb,OAFAsgB,EAAc,OAAE7jB,GAChB6jB,EAAc,OAAEqrL,GACT3rM,I,eCrFT,IAAImjO,EAA8B,iBAAV,EAAAh6N,GAAsB,EAAAA,GAAU,EAAAA,EAAOtP,SAAWA,QAAU,EAAAsP,EAEpFjS,EAAOC,QAAUgsO,G,eCHjB,IAAIC,EAAiB,EAAQ,MACzBxB,EAAa,EAAQ,MACrBjiN,EAAO,EAAQ,MAanBzoB,EAAOC,QAJP,SAAoBsF,GAClB,OAAO2mO,EAAe3mO,EAAQkjB,EAAMiiN,K,eCZtC,IAAIwB,EAAiB,EAAQ,MACzBvB,EAAe,EAAQ,MACvB7H,EAAS,EAAQ,MAcrB9iO,EAAOC,QAJP,SAAsBsF,GACpB,OAAO2mO,EAAe3mO,EAAQu9N,EAAQ6H,K,eCbxC,IAAIwB,EAAY,EAAQ,MAiBxBnsO,EAAOC,QAPP,SAAoB8L,EAAK7K,GACvB,IAAIoF,EAAOyF,EAAIs1N,SACf,OAAO8K,EAAUjrO,GACboF,EAAmB,iBAAPpF,EAAkB,SAAW,QACzCoF,EAAKyF,M,eCdX,IAAIk9N,EAAqB,EAAQ,MAC7BxgN,EAAO,EAAQ,MAsBnBzoB,EAAOC,QAbP,SAAsBsF,GAIpB,IAHA,IAAIuD,EAAS2f,EAAKljB,GACdnF,EAAS0I,EAAO1I,OAEbA,KAAU,CACf,IAAIc,EAAM4H,EAAO1I,GACbiB,EAAQkE,EAAOrE,GAEnB4H,EAAO1I,GAAU,CAACc,EAAKG,EAAO4nO,EAAmB5nO,IAEnD,OAAOyH,I,cCpBT,IAAIsjO,EAAe,EAAQ,MACvBxpI,EAAW,EAAQ,MAevB5iG,EAAOC,QALP,SAAmBsF,EAAQrE,GACzB,IAAIG,EAAQuhG,EAASr9F,EAAQrE,GAC7B,OAAOkrO,EAAa/qO,GAASA,OAAQW,I,eCbvC,IAGIqqO,EAHU,EAAQ,KAGHC,CAAQ3pO,OAAOkB,eAAgBlB,QAElD3C,EAAOC,QAAUosO,G,eCLjB,IAAIjoO,EAAS,EAAQ,MAGjB6jO,EAActlO,OAAOI,UAGrByC,EAAiByiO,EAAYziO,eAO7B+mO,EAAuBtE,EAAYliO,SAGnCigO,EAAiB5hO,EAASA,EAAO6hO,iBAAcjkO,EA6BnDhC,EAAOC,QApBP,SAAmBoB,GACjB,IAAImrO,EAAQhnO,EAAe/B,KAAKpC,EAAO2kO,GACnCvB,EAAMpjO,EAAM2kO,GAEhB,IACE3kO,EAAM2kO,QAAkBhkO,EACxB,IAAIyqO,GAAW,EACf,MAAO10M,IAET,IAAIjvB,EAASyjO,EAAqB9oO,KAAKpC,GAQvC,OAPIorO,IACED,EACFnrO,EAAM2kO,GAAkBvB,SAEjBpjO,EAAM2kO,IAGVl9N,I,eC1CT,IAAI4jO,EAAc,EAAQ,MACtBC,EAAY,EAAQ,KAMpB5jH,EAHcpmH,OAAOI,UAGcgmH,qBAGnC6jH,EAAmBjqO,OAAOmmH,sBAS1B4hH,EAAckC,EAA+B,SAASrnO,GACxD,OAAc,MAAVA,EACK,IAETA,EAAS5C,OAAO4C,GACTmnO,EAAYE,EAAiBrnO,IAAS,SAASglO,GACpD,OAAOxhH,EAAqBtlH,KAAK8B,EAAQglO,QANRoC,EAUrC3sO,EAAOC,QAAUyqO,G,eC7BjB,IAAItF,EAAY,EAAQ,MACpBiH,EAAe,EAAQ,MACvB3B,EAAa,EAAQ,MACrBiC,EAAY,EAAQ,KAYpBhC,EATmBhoO,OAAOmmH,sBASqB,SAASvjH,GAE1D,IADA,IAAIuD,EAAS,GACNvD,GACL6/N,EAAUt8N,EAAQ4hO,EAAWnlO,IAC7BA,EAAS8mO,EAAa9mO,GAExB,OAAOuD,GAN8B6jO,EASvC3sO,EAAOC,QAAU0qO,G,eCxBjB,IAAI7K,EAAW,EAAQ,MACnBvtN,EAAM,EAAQ,MACd/Q,EAAU,EAAQ,MAClBskB,EAAM,EAAQ,MACdvf,EAAU,EAAQ,KAClB8/N,EAAa,EAAQ,MACrByB,EAAW,EAAQ,KAGnB+E,EAAS,eAETC,EAAa,mBACbC,EAAS,eACTC,EAAa,mBAEbC,EAAc,oBAGdC,EAAqBpF,EAAShI,GAC9BqN,EAAgBrF,EAASv1N,GACzB66N,EAAoBtF,EAAStmO,GAC7B6rO,EAAgBvF,EAAShiN,GACzBwnN,EAAoBxF,EAASvhO,GAS7Bk9N,EAAS4C,GAGRvG,GAAY2D,EAAO,IAAI3D,EAAS,IAAI3oM,YAAY,MAAQ81M,GACxD16N,GAAOkxN,EAAO,IAAIlxN,IAAQs6N,GAC1BrrO,GAAWiiO,EAAOjiO,EAAQV,YAAcgsO,GACxChnN,GAAO29M,EAAO,IAAI39M,IAAQinN,GAC1BxmO,GAAWk9N,EAAO,IAAIl9N,IAAYymO,KACrCvJ,EAAS,SAASpiO,GAChB,IAAIyH,EAASu9N,EAAWhlO,GACpB0zN,EA/BQ,mBA+BDjsN,EAAsBzH,EAAM6C,iBAAclC,EACjDurO,EAAaxY,EAAO+S,EAAS/S,GAAQ,GAEzC,GAAIwY,EACF,OAAQA,GACN,KAAKL,EAAoB,OAAOD,EAChC,KAAKE,EAAe,OAAON,EAC3B,KAAKO,EAAmB,OAAON,EAC/B,KAAKO,EAAe,OAAON,EAC3B,KAAKO,EAAmB,OAAON,EAGnC,OAAOlkO,IAIX9I,EAAOC,QAAUwjO,G,SC7CjBzjO,EAAOC,QAJP,SAAkBsF,EAAQrE,GACxB,OAAiB,MAAVqE,OAAiBvD,EAAYuD,EAAOrE,K,cCT7C,IAAIwkO,EAAW,EAAQ,MACnB3D,EAAc,EAAQ,MACtBvhO,EAAU,EAAQ,MAClByhO,EAAU,EAAQ,MAClBmG,EAAW,EAAQ,MACnBzC,EAAQ,EAAQ,KAiCpB3lO,EAAOC,QAtBP,SAAiBsF,EAAQ8Y,EAAMmvN,GAO7B,IAJA,IAAI5lO,GAAS,EACTxH,GAHJie,EAAOqnN,EAASrnN,EAAM9Y,IAGJnF,OACd0I,GAAS,IAEJlB,EAAQxH,GAAQ,CACvB,IAAIc,EAAMykO,EAAMtnN,EAAKzW,IACrB,KAAMkB,EAAmB,MAAVvD,GAAkBioO,EAAQjoO,EAAQrE,IAC/C,MAEFqE,EAASA,EAAOrE,GAElB,OAAI4H,KAAYlB,GAASxH,EAChB0I,KAET1I,EAAmB,MAAVmF,EAAiB,EAAIA,EAAOnF,SAClBgoO,EAAShoO,IAAW6hO,EAAQ/gO,EAAKd,KACjDI,EAAQ+E,IAAWw8N,EAAYx8N,M,SClCpC,IAWIkoO,EAAelhJ,OAAO,uFAa1BvsF,EAAOC,QAJP,SAAoByiO,GAClB,OAAO+K,EAAavnO,KAAKw8N,K,eCtB3B,IAAIgL,EAAe,EAAQ,MAc3B1tO,EAAOC,QALP,WACE0B,KAAK0/N,SAAWqM,EAAeA,EAAa,MAAQ,GACpD/rO,KAAKmI,KAAO,I,QCKd9J,EAAOC,QANP,SAAoBiB,GAClB,IAAI4H,EAASnH,KAAK+E,IAAIxF,WAAeS,KAAK0/N,SAASngO,GAEnD,OADAS,KAAKmI,MAAQhB,EAAS,EAAI,EACnBA,I,eCbT,IAAI4kO,EAAe,EAAQ,MASvBloO,EAHc7C,OAAOI,UAGQyC,eAoBjCxF,EAAOC,QATP,SAAiBiB,GACf,IAAIoF,EAAO3E,KAAK0/N,SAChB,GAAIqM,EAAc,CAChB,IAAI5kO,EAASxC,EAAKpF,GAClB,MArBiB,8BAqBV4H,OAA4B9G,EAAY8G,EAEjD,OAAOtD,EAAe/B,KAAK6C,EAAMpF,GAAOoF,EAAKpF,QAAOc,I,eC1BtD,IAAI0rO,EAAe,EAAQ,MAMvBloO,EAHc7C,OAAOI,UAGQyC,eAgBjCxF,EAAOC,QALP,SAAiBiB,GACf,IAAIoF,EAAO3E,KAAK0/N,SAChB,OAAOqM,OAA8B1rO,IAAdsE,EAAKpF,GAAsBsE,EAAe/B,KAAK6C,EAAMpF,K,eCnB9E,IAAIwsO,EAAe,EAAQ,MAsB3B1tO,EAAOC,QAPP,SAAiBiB,EAAKG,GACpB,IAAIiF,EAAO3E,KAAK0/N,SAGhB,OAFA1/N,KAAKmI,MAAQnI,KAAK+E,IAAIxF,GAAO,EAAI,EACjCoF,EAAKpF,GAAQwsO,QAA0B1rO,IAAVX,EAfV,4BAekDA,EAC9DM,O,SClBT,IAGI6D,EAHc7C,OAAOI,UAGQyC,eAqBjCxF,EAAOC,QAZP,SAAwBwH,GACtB,IAAIrH,EAASqH,EAAMrH,OACf0I,EAAS,IAAIrB,EAAMvD,YAAY9D,GAOnC,OAJIA,GAA6B,iBAAZqH,EAAM,IAAkBjC,EAAe/B,KAAKgE,EAAO,WACtEqB,EAAOlB,MAAQH,EAAMG,MACrBkB,EAAOuX,MAAQ5Y,EAAM4Y,OAEhBvX,I,eCtBT,IAAIohO,EAAmB,EAAQ,MAC3ByD,EAAgB,EAAQ,MACxBC,EAAc,EAAQ,MACtBC,EAAc,EAAQ,KACtBC,EAAkB,EAAQ,MAwE9B9tO,EAAOC,QApCP,SAAwBsF,EAAQk/N,EAAKF,GACnC,IAAIxP,EAAOxvN,EAAOrB,YAClB,OAAQugO,GACN,IA3BiB,uBA4Bf,OAAOyF,EAAiB3kO,GAE1B,IAvCU,mBAwCV,IAvCU,gBAwCR,OAAO,IAAIwvN,GAAMxvN,GAEnB,IAjCc,oBAkCZ,OAAOooO,EAAcpoO,EAAQg/N,GAE/B,IAnCa,wBAmCI,IAlCJ,wBAmCb,IAlCU,qBAkCI,IAjCH,sBAiCkB,IAhClB,sBAiCX,IAhCW,sBAgCI,IA/BG,6BA+BmB,IA9BzB,uBA8ByC,IA7BzC,uBA8BV,OAAOuJ,EAAgBvoO,EAAQg/N,GAEjC,IAjDS,eAkDP,OAAO,IAAIxP,EAEb,IAnDY,kBAoDZ,IAjDY,kBAkDV,OAAO,IAAIA,EAAKxvN,GAElB,IAtDY,kBAuDV,OAAOqoO,EAAYroO,GAErB,IAxDS,eAyDP,OAAO,IAAIwvN,EAEb,IAzDY,kBA0DV,OAAO8Y,EAAYtoO,M,eCxEzB,IAAIu/N,EAAa,EAAQ,MACrBuH,EAAe,EAAQ,MACvB7D,EAAc,EAAQ,MAe1BxoO,EAAOC,QANP,SAAyBsF,GACvB,MAAqC,mBAAtBA,EAAOrB,aAA8BskO,EAAYjjO,GAE5D,GADAu/N,EAAWuH,EAAa9mO,M,eCb9B,IAAInB,EAAS,EAAQ,MACjB29N,EAAc,EAAQ,MACtBvhO,EAAU,EAAQ,MAGlButO,EAAmB3pO,EAASA,EAAO4pO,wBAAqBhsO,EAc5DhC,EAAOC,QALP,SAAuBoB,GACrB,OAAOb,EAAQa,IAAU0gO,EAAY1gO,OAChC0sO,GAAoB1sO,GAASA,EAAM0sO,M,SCf1C,IAGIE,EAAW,mBAoBfjuO,EAAOC,QAVP,SAAiBoB,EAAOjB,GACtB,IAAIglB,SAAc/jB,EAGlB,SAFAjB,EAAmB,MAAVA,EAfY,iBAewBA,KAGlC,UAARglB,GACU,UAARA,GAAoB6oN,EAAS/nO,KAAK7E,KAChCA,GAAS,GAAKA,EAAQ,GAAK,GAAKA,EAAQjB,I,eCrBjD,IAAII,EAAU,EAAQ,MAClBwkO,EAAW,EAAQ,MAGnBkJ,EAAe,mDACfC,EAAgB,QAuBpBnuO,EAAOC,QAbP,SAAeoB,EAAOkE,GACpB,GAAI/E,EAAQa,GACV,OAAO,EAET,IAAI+jB,SAAc/jB,EAClB,QAAY,UAAR+jB,GAA4B,UAARA,GAA4B,WAARA,GAC/B,MAAT/jB,IAAiB2jO,EAAS3jO,KAGvB8sO,EAAcjoO,KAAK7E,KAAW6sO,EAAahoO,KAAK7E,IAC1C,MAAVkE,GAAkBlE,KAASsB,OAAO4C,K,SCXvCvF,EAAOC,QAPP,SAAmBoB,GACjB,IAAI+jB,SAAc/jB,EAClB,MAAgB,UAAR+jB,GAA4B,UAARA,GAA4B,UAARA,GAA4B,WAARA,EACrD,cAAV/jB,EACU,OAAVA,I,eCXP,IAIM+sO,EAJFxD,EAAa,EAAQ,MAGrByD,GACED,EAAM,SAASjtD,KAAKypD,GAAcA,EAAWniN,MAAQmiN,EAAWniN,KAAK6lN,UAAY,KACvE,iBAAmBF,EAAO,GAc1CpuO,EAAOC,QAJP,SAAkBw6H,GAChB,QAAS4zG,GAAeA,KAAc5zG,I,SCfxC,IAAIwtG,EAActlO,OAAOI,UAgBzB/C,EAAOC,QAPP,SAAqBoB,GACnB,IAAI0zN,EAAO1zN,GAASA,EAAM6C,YAG1B,OAAO7C,KAFqB,mBAAR0zN,GAAsBA,EAAKhyN,WAAcklO,K,eCZ/D,IAAInE,EAAW,EAAQ,MAcvB9jO,EAAOC,QAJP,SAA4BoB,GAC1B,OAAOA,GAAUA,IAAUyiO,EAASziO,K,SCCtCrB,EAAOC,QALP,WACE0B,KAAK0/N,SAAW,GAChB1/N,KAAKmI,KAAO,I,eCTd,IAAIykO,EAAe,EAAQ,MAMvBx+L,EAHaxvC,MAAMwC,UAGCgtC,OA4BxB/vC,EAAOC,QAjBP,SAAyBiB,GACvB,IAAIoF,EAAO3E,KAAK0/N,SACZz5N,EAAQ2mO,EAAajoO,EAAMpF,GAE/B,QAAI0G,EAAQ,IAIRA,GADYtB,EAAKlG,OAAS,EAE5BkG,EAAK2oB,MAEL8gB,EAAOtsC,KAAK6C,EAAMsB,EAAO,KAEzBjG,KAAKmI,KACA,M,eC/BT,IAAIykO,EAAe,EAAQ,MAkB3BvuO,EAAOC,QAPP,SAAsBiB,GACpB,IAAIoF,EAAO3E,KAAK0/N,SACZz5N,EAAQ2mO,EAAajoO,EAAMpF,GAE/B,OAAO0G,EAAQ,OAAI5F,EAAYsE,EAAKsB,GAAO,K,eCf7C,IAAI2mO,EAAe,EAAQ,MAe3BvuO,EAAOC,QAJP,SAAsBiB,GACpB,OAAOqtO,EAAa5sO,KAAK0/N,SAAUngO,IAAQ,I,eCZ7C,IAAIqtO,EAAe,EAAQ,MAyB3BvuO,EAAOC,QAbP,SAAsBiB,EAAKG,GACzB,IAAIiF,EAAO3E,KAAK0/N,SACZz5N,EAAQ2mO,EAAajoO,EAAMpF,GAQ/B,OANI0G,EAAQ,KACRjG,KAAKmI,KACPxD,EAAKxB,KAAK,CAAC5D,EAAKG,KAEhBiF,EAAKsB,GAAO,GAAKvG,EAEZM,O,eCtBT,IAAI0+N,EAAO,EAAQ,MACfM,EAAY,EAAQ,MACpBpuN,EAAM,EAAQ,MAkBlBvS,EAAOC,QATP,WACE0B,KAAKmI,KAAO,EACZnI,KAAK0/N,SAAW,CACd,KAAQ,IAAIhB,EACZ,IAAO,IAAK9tN,GAAOouN,GACnB,OAAU,IAAIN,K,eChBlB,IAAImO,EAAa,EAAQ,MAiBzBxuO,EAAOC,QANP,SAAwBiB,GACtB,IAAI4H,EAAS0lO,EAAW7sO,KAAMT,GAAa,OAAEA,GAE7C,OADAS,KAAKmI,MAAQhB,EAAS,EAAI,EACnBA,I,cCdT,IAAI0lO,EAAa,EAAQ,MAezBxuO,EAAOC,QAJP,SAAqBiB,GACnB,OAAOstO,EAAW7sO,KAAMT,GAAKmC,IAAInC,K,eCZnC,IAAIstO,EAAa,EAAQ,MAezBxuO,EAAOC,QAJP,SAAqBiB,GACnB,OAAOstO,EAAW7sO,KAAMT,GAAKwF,IAAIxF,K,eCZnC,IAAIstO,EAAa,EAAQ,MAqBzBxuO,EAAOC,QATP,SAAqBiB,EAAKG,GACxB,IAAIiF,EAAOkoO,EAAW7sO,KAAMT,GACxB4I,EAAOxD,EAAKwD,KAIhB,OAFAxD,EAAKM,IAAI1F,EAAKG,GACdM,KAAKmI,MAAQxD,EAAKwD,MAAQA,EAAO,EAAI,EAC9BnI,O,SCDT3B,EAAOC,QAVP,SAAoB8L,GAClB,IAAInE,GAAS,EACTkB,EAASvI,MAAMwL,EAAIjC,MAKvB,OAHAiC,EAAI4B,SAAQ,SAAStM,EAAOH,GAC1B4H,IAASlB,GAAS,CAAC1G,EAAKG,MAEnByH,I,SCKT9I,EAAOC,QAVP,SAAiCiB,EAAKymO,GACpC,OAAO,SAASpiO,GACd,OAAc,MAAVA,GAGGA,EAAOrE,KAASymO,SACP3lO,IAAb2lO,GAA2BzmO,KAAOyB,OAAO4C,O,eCfhD,IAAIkpO,EAAU,EAAQ,MAyBtBzuO,EAAOC,QAZP,SAAuBw6H,GACrB,IAAI3xH,EAAS2lO,EAAQh0G,GAAM,SAASv5H,GAIlC,OAfmB,MAYfu5I,EAAM3wI,MACR2wI,EAAMza,QAED9+H,KAGLu5I,EAAQ3xI,EAAO2xI,MACnB,OAAO3xI,I,eCtBT,IAGI4kO,EAHY,EAAQ,IAGL3N,CAAUp9N,OAAQ,UAErC3C,EAAOC,QAAUytO,G,eCLjB,IAGIjF,EAHU,EAAQ,KAGL6D,CAAQ3pO,OAAO8lB,KAAM9lB,QAEtC3C,EAAOC,QAAUwoO,G,SCcjBzoO,EAAOC,QAVP,SAAsBsF,GACpB,IAAIuD,EAAS,GACb,GAAc,MAAVvD,EACF,IAAK,IAAIrE,KAAOyB,OAAO4C,GACrBuD,EAAOhE,KAAK5D,GAGhB,OAAO4H,I,0BChBT,IAAImjO,EAAa,EAAQ,MAGrBnC,EAA4C7pO,IAAYA,EAAQ8pO,UAAY9pO,EAG5E+pO,EAAaF,GAA4C9pO,IAAWA,EAAO+pO,UAAY/pO,EAMvF0uO,EAHgB1E,GAAcA,EAAW/pO,UAAY6pO,GAGtBmC,EAAW/5N,QAG1Cy8N,EAAY,WACd,IAIE,OAFY3E,GAAcA,EAAWp3B,SAAWo3B,EAAWp3B,QAAQ,QAAQg8B,OAOpEF,GAAeA,EAAYG,SAAWH,EAAYG,QAAQ,QACjE,MAAO92M,KAXI,GAcf/3B,EAAOC,QAAU0uO,G,SC5BjB,IAOIpC,EAPc5pO,OAAOI,UAOcgD,SAavC/F,EAAOC,QAJP,SAAwBoB,GACtB,OAAOkrO,EAAqB9oO,KAAKpC,K,SCJnCrB,EAAOC,QANP,SAAiBw6H,EAAMprD,GACrB,OAAO,SAASluE,GACd,OAAOs5H,EAAKprD,EAAUluE,O,eCV1B,IAAI8qO,EAAa,EAAQ,MAGrB6C,EAA0B,iBAARpuO,MAAoBA,MAAQA,KAAKiC,SAAWA,QAAUjC,KAGxE+vN,EAAOwb,GAAc6C,GAAYhqN,SAAS,cAATA,GAErC9kB,EAAOC,QAAUwwN,G,QCUjBzwN,EAAOC,QALP,SAAqBoB,GAEnB,OADAM,KAAK0/N,SAASz6N,IAAIvF,EAbC,6BAcZM,O,SCFT3B,EAAOC,QAJP,SAAqBoB,GACnB,OAAOM,KAAK0/N,SAAS36N,IAAIrF,K,SCO3BrB,EAAOC,QAVP,SAAoB2G,GAClB,IAAIgB,GAAS,EACTkB,EAASvI,MAAMqG,EAAIkD,MAKvB,OAHAlD,EAAI+G,SAAQ,SAAStM,GACnByH,IAASlB,GAASvG,KAEbyH,I,eCdT,IAAI63N,EAAY,EAAQ,MAcxB3gO,EAAOC,QALP,WACE0B,KAAK0/N,SAAW,IAAIV,EACpBh/N,KAAKmI,KAAO,I,SCMd9J,EAAOC,QARP,SAAqBiB,GACnB,IAAIoF,EAAO3E,KAAK0/N,SACZv4N,EAASxC,EAAa,OAAEpF,GAG5B,OADAS,KAAKmI,KAAOxD,EAAKwD,KACVhB,I,SCDT9I,EAAOC,QAJP,SAAkBiB,GAChB,OAAOS,KAAK0/N,SAASh+N,IAAInC,K,SCG3BlB,EAAOC,QAJP,SAAkBiB,GAChB,OAAOS,KAAK0/N,SAAS36N,IAAIxF,K,eCV3B,IAAIy/N,EAAY,EAAQ,MACpBpuN,EAAM,EAAQ,MACd0uN,EAAW,EAAQ,MA+BvBjhO,EAAOC,QAhBP,SAAkBiB,EAAKG,GACrB,IAAIiF,EAAO3E,KAAK0/N,SAChB,GAAI/6N,aAAgBq6N,EAAW,CAC7B,IAAIoO,EAAQzoO,EAAK+6N,SACjB,IAAK9uN,GAAQw8N,EAAM3uO,OAAS4uO,IAG1B,OAFAD,EAAMjqO,KAAK,CAAC5D,EAAKG,IACjBM,KAAKmI,OAASxD,EAAKwD,KACZnI,KAET2E,EAAO3E,KAAK0/N,SAAW,IAAIJ,EAAS8N,GAItC,OAFAzoO,EAAKM,IAAI1F,EAAKG,GACdM,KAAKmI,KAAOxD,EAAKwD,KACVnI,O,SCRT3B,EAAOC,QAZP,SAAuBwH,EAAOpG,EAAO6jO,GAInC,IAHA,IAAIt9N,EAAQs9N,EAAY,EACpB9kO,EAASqH,EAAMrH,SAEVwH,EAAQxH,GACf,GAAIqH,EAAMG,KAAWvG,EACnB,OAAOuG,EAGX,OAAQ,I,eCnBV,IAAI46N,EAAY,EAAQ,MACpByM,EAAa,EAAQ,MACrBC,EAAc,EAAQ,MAe1BlvO,EAAOC,QANP,SAAoByiO,GAClB,OAAOuM,EAAWvM,GACdwM,EAAYxM,GACZF,EAAUE,K,eCdhB,IAAIyM,EAAe,EAAQ,MACvBF,EAAa,EAAQ,MACrBG,EAAiB,EAAQ,KAe7BpvO,EAAOC,QANP,SAAuByiO,GACrB,OAAOuM,EAAWvM,GACd0M,EAAe1M,GACfyM,EAAazM,K,eCdnB,IAAI2M,EAAgB,EAAQ,MAGxBC,EAAa,mGAGbC,EAAe,WASf9F,EAAe4F,GAAc,SAAS3M,GACxC,IAAI55N,EAAS,GAOb,OAN6B,KAAzB45N,EAAOpkM,WAAW,IACpBx1B,EAAOhE,KAAK,IAEd49N,EAAOnxN,QAAQ+9N,GAAY,SAASnmM,EAAOqmM,EAAQC,EAAOC,GACxD5mO,EAAOhE,KAAK2qO,EAAQC,EAAUn+N,QAAQg+N,EAAc,MAASC,GAAUrmM,MAElErgC,KAGT9I,EAAOC,QAAUwpO,G,cC1BjB,IAAIzE,EAAW,EAAQ,MAoBvBhlO,EAAOC,QARP,SAAeoB,GACb,GAAoB,iBAATA,GAAqB2jO,EAAS3jO,GACvC,OAAOA,EAET,IAAIyH,EAAUzH,EAAQ,GACtB,MAAkB,KAAVyH,GAAkB,EAAIzH,IAdjB,IAcwC,KAAOyH,I,QChB9D,IAGIo/N,EAHYpjN,SAAS/hB,UAGIgD,SAqB7B/F,EAAOC,QAZP,SAAkBw6H,GAChB,GAAY,MAARA,EAAc,CAChB,IACE,OAAOytG,EAAazkO,KAAKg3H,GACzB,MAAO1iG,IACT,IACE,OAAQ0iG,EAAO,GACf,MAAO1iG,KAEX,MAAO,K,SCrBT,IAAI43M,EAAe,KAiBnB3vO,EAAOC,QAPP,SAAyByiO,GAGvB,IAFA,IAAI96N,EAAQ86N,EAAOtiO,OAEZwH,KAAW+nO,EAAazpO,KAAKw8N,EAAO1uF,OAAOpsI,MAClD,OAAOA,I,SCdT,IASIgoO,EAAU,kDACVC,EAAS,2BAETC,EAAc,qBACdC,EAAa,kCACbC,EAAa,qCAIbC,EAPa,MAAQL,EAAU,IAAMC,EAO1BK,KACXC,EAAW,oBAEXC,EAAQD,EAAWF,EADP,gBAAwB,CAACH,EAAaC,EAAYC,GAAYr+N,KAAK,KAAO,IAAMw+N,EAAWF,EAAW,KAElHI,EAAW,MAAQ,CAACP,EAAcF,EAAU,IAAKA,EAASG,EAAYC,EAd3D,qBAciFr+N,KAAK,KAAO,IAGxG2+N,EAAY/jJ,OAAOsjJ,EAAS,MAAQA,EAAS,KAAOQ,EAAWD,EAAO,KAiB1EpwO,EAAOC,QARP,SAAqByiO,GAEnB,IADA,IAAI55N,EAASwnO,EAAU/sC,UAAY,EAC5B+sC,EAAUpqO,KAAKw8N,MAClB55N,EAEJ,OAAOA,I,QCvCT,IASI8mO,EAAU,kDACVC,EAAS,2BAETC,EAAc,qBACdC,EAAa,kCACbC,EAAa,qCAIbC,EAPa,MAAQL,EAAU,IAAMC,EAO1BK,KACXC,EAAW,oBAEXC,EAAQD,EAAWF,EADP,gBAAwB,CAACH,EAAaC,EAAYC,GAAYr+N,KAAK,KAAO,IAAMw+N,EAAWF,EAAW,KAElHI,EAAW,MAAQ,CAACP,EAAcF,EAAU,IAAKA,EAASG,EAAYC,EAd3D,qBAciFr+N,KAAK,KAAO,IAGxG2+N,EAAY/jJ,OAAOsjJ,EAAS,MAAQA,EAAS,KAAOQ,EAAWD,EAAO,KAa1EpwO,EAAOC,QAJP,SAAwByiO,GACtB,OAAOA,EAAOv5L,MAAMmnM,IAAc,K,cCpCpC,IAAIlM,EAAY,EAAQ,MA4BxBpkO,EAAOC,QAJP,SAAmBoB,GACjB,OAAO+iO,EAAU/iO,EAAOkvO,K,SCW1BvwO,EAAOC,QAJP,SAAYoB,EAAOozM,GACjB,OAAOpzM,IAAUozM,GAAUpzM,GAAUA,GAASozM,GAAUA,I,eCjC1D,IAAI6wB,EAAc,EAAQ,MAqB1BtlO,EAAOC,QALP,SAAiBwH,GAEf,OADsB,MAATA,GAAoBA,EAAMrH,OACvBklO,EAAY79N,EAAO,GAAK,K,eClB1C,IAAIyhO,EAAU,EAAQ,MAgCtBlpO,EAAOC,QALP,SAAasF,EAAQ8Y,EAAMmkD,GACzB,IAAI15D,EAAmB,MAAVvD,OAAiBvD,EAAYknO,EAAQ3jO,EAAQ8Y,GAC1D,YAAkBrc,IAAX8G,EAAuB05D,EAAe15D,I,eC7B/C,IAAI0nO,EAAY,EAAQ,IACpBC,EAAU,EAAQ,KAgCtBzwO,EAAOC,QAJP,SAAesF,EAAQ8Y,GACrB,OAAiB,MAAV9Y,GAAkBkrO,EAAQlrO,EAAQ8Y,EAAMmyN,K,SCVjDxwO,EAAOC,QAJP,SAAkBoB,GAChB,OAAOA,I,eCjBT,IAAIqvO,EAAkB,EAAQ,MAC1BpK,EAAe,EAAQ,MAGvB2B,EAActlO,OAAOI,UAGrByC,EAAiByiO,EAAYziO,eAG7BujH,EAAuBk/G,EAAYl/G,qBAoBnCg5G,EAAc2O,EAAgB,WAAa,OAAO7uO,UAApB,IAAsC6uO,EAAkB,SAASrvO,GACjG,OAAOilO,EAAajlO,IAAUmE,EAAe/B,KAAKpC,EAAO,YACtD0nH,EAAqBtlH,KAAKpC,EAAO,WAGtCrB,EAAOC,QAAU8hO,G,SCZjB,IAAIvhO,EAAUD,MAAMC,QAEpBR,EAAOC,QAAUO,G,eCzBjB,IAAIyN,EAAa,EAAQ,MACrBm6N,EAAW,EAAQ,MA+BvBpoO,EAAOC,QAJP,SAAqBoB,GACnB,OAAgB,MAATA,GAAiB+mO,EAAS/mO,EAAMjB,UAAY6N,EAAW5M,K,eC7BhE,IAAIglO,EAAa,EAAQ,MACrBC,EAAe,EAAQ,MA2B3BtmO,EAAOC,QALP,SAAmBoB,GACjB,OAAiB,IAAVA,IAA4B,IAAVA,GACtBilO,EAAajlO,IArBJ,oBAqBcglO,EAAWhlO,K,0BCzBvC,IAAIovN,EAAO,EAAQ,MACfkgB,EAAY,EAAQ,MAGpB7G,EAA4C7pO,IAAYA,EAAQ8pO,UAAY9pO,EAG5E+pO,EAAaF,GAA4C9pO,IAAWA,EAAO+pO,UAAY/pO,EAMvFq2B,EAHgB2zM,GAAcA,EAAW/pO,UAAY6pO,EAG5BrZ,EAAKp6L,YAASr0B,EAsBvCggO,GAnBiB3rM,EAASA,EAAO2rM,cAAWhgO,IAmBf2uO,EAEjC3wO,EAAOC,QAAU+hO,G,eCrCjB,IAAIqE,EAAa,EAAQ,MACrBvC,EAAW,EAAQ,MAmCvB9jO,EAAOC,QAVP,SAAoBoB,GAClB,IAAKyiO,EAASziO,GACZ,OAAO,EAIT,IAAIojO,EAAM4B,EAAWhlO,GACrB,MA5BY,qBA4BLojO,GA3BI,8BA2BcA,GA7BZ,0BA6B6BA,GA1B7B,kBA0BgDA,I,SCC/DzkO,EAAOC,QALP,SAAkBoB,GAChB,MAAuB,iBAATA,GACZA,GAAS,GAAKA,EAAQ,GAAK,GAAKA,GA9Bb,mB,eCDvB,IAAIuvO,EAAY,EAAQ,MACpBC,EAAY,EAAQ,MACpBlC,EAAW,EAAQ,MAGnBmC,EAAYnC,GAAYA,EAAS9K,MAmBjCA,EAAQiN,EAAYD,EAAUC,GAAaF,EAE/C5wO,EAAOC,QAAU4jO,G,eC1BjB,IAAIwC,EAAa,EAAQ,MACrBC,EAAe,EAAQ,MAoC3BtmO,EAAOC,QALP,SAAkBoB,GAChB,MAAuB,iBAATA,GACXilO,EAAajlO,IA9BF,mBA8BYglO,EAAWhlO,K,SCJvCrB,EAAOC,QALP,SAAkBoB,GAChB,IAAI+jB,SAAc/jB,EAClB,OAAgB,MAATA,IAA0B,UAAR+jB,GAA4B,YAARA,K,SCC/CplB,EAAOC,QAJP,SAAsBoB,GACpB,OAAgB,MAATA,GAAiC,iBAATA,I,eCzBjC,IAAI0vO,EAAe,EAAQ,MACvBF,EAAY,EAAQ,MACpBlC,EAAW,EAAQ,MAGnBqC,EAAerC,GAAYA,EAASsC,SAmBpCA,EAAWD,EAAeH,EAAUG,GAAgBD,EAExD/wO,EAAOC,QAAUgxO,G,eC1BjB,IAAIC,EAAY,EAAQ,MACpBL,EAAY,EAAQ,MACpBlC,EAAW,EAAQ,MAGnBwC,EAAYxC,GAAYA,EAAS5K,MAmBjCA,EAAQoN,EAAYN,EAAUM,GAAaD,EAE/ClxO,EAAOC,QAAU8jO,G,eC1BjB,IAAIsC,EAAa,EAAQ,MACrB7lO,EAAU,EAAQ,MAClB8lO,EAAe,EAAQ,MA2B3BtmO,EAAOC,QALP,SAAkBoB,GAChB,MAAuB,iBAATA,IACVb,EAAQa,IAAUilO,EAAajlO,IArBrB,mBAqB+BglO,EAAWhlO,K,eC1B1D,IAAIglO,EAAa,EAAQ,MACrBC,EAAe,EAAQ,MA2B3BtmO,EAAOC,QALP,SAAkBoB,GAChB,MAAuB,iBAATA,GACXilO,EAAajlO,IArBF,mBAqBYglO,EAAWhlO,K,eCzBvC,IAAI+vO,EAAmB,EAAQ,MAC3BP,EAAY,EAAQ,MACpBlC,EAAW,EAAQ,MAGnB0C,EAAmB1C,GAAYA,EAAS/kO,aAmBxCA,EAAeynO,EAAmBR,EAAUQ,GAAoBD,EAEpEpxO,EAAOC,QAAU2J,G,SCLjB5J,EAAOC,QAJP,SAAqBoB,GACnB,YAAiBW,IAAVX,I,eClBT,IAAIiwO,EAAgB,EAAQ,MACxBC,EAAW,EAAQ,KACnBC,EAAc,EAAQ,MAkC1BxxO,EAAOC,QAJP,SAAcsF,GACZ,OAAOisO,EAAYjsO,GAAU+rO,EAAc/rO,GAAUgsO,EAAShsO,K,eCjChE,IAAI+rO,EAAgB,EAAQ,MACxBG,EAAa,EAAQ,KACrBD,EAAc,EAAQ,MA6B1BxxO,EAAOC,QAJP,SAAgBsF,GACd,OAAOisO,EAAYjsO,GAAU+rO,EAAc/rO,GAAQ,GAAQksO,EAAWlsO,K,eC5BxE,IAAIo9N,EAAkB,EAAQ,MAC1B+O,EAAa,EAAQ,MACrBC,EAAe,EAAQ,MAwC3B3xO,EAAOC,QAVP,SAAmBsF,EAAQq8N,GACzB,IAAI94N,EAAS,GAMb,OALA84N,EAAW+P,EAAa/P,EAAU,GAElC8P,EAAWnsO,GAAQ,SAASlE,EAAOH,EAAKqE,GACtCo9N,EAAgB75N,EAAQ5H,EAAK0gO,EAASvgO,EAAOH,EAAKqE,OAE7CuD,I,eCvCT,IAAI8oO,EAAe,EAAQ,MACvBC,EAAS,EAAQ,MACjB3hJ,EAAW,EAAQ,MA0BvBlwF,EAAOC,QANP,SAAawH,GACX,OAAQA,GAASA,EAAMrH,OACnBwxO,EAAanqO,EAAOyoF,EAAU2hJ,QAC9B7vO,I,eCzBN,IAAIi/N,EAAW,EAAQ,MAiDvB,SAASwN,EAAQh0G,EAAMq3G,GACrB,GAAmB,mBAARr3G,GAAmC,MAAZq3G,GAAuC,mBAAZA,EAC3D,MAAM,IAAI3vO,UAhDQ,uBAkDpB,IAAI4vO,EAAW,WACb,IAAInwO,EAAOC,UACPX,EAAM4wO,EAAWA,EAAShwO,MAAMH,KAAMC,GAAQA,EAAK,GACnD64I,EAAQs3F,EAASt3F,MAErB,GAAIA,EAAM/zI,IAAIxF,GACZ,OAAOu5I,EAAMp3I,IAAInC,GAEnB,IAAI4H,EAAS2xH,EAAK34H,MAAMH,KAAMC,GAE9B,OADAmwO,EAASt3F,MAAQA,EAAM7zI,IAAI1F,EAAK4H,IAAW2xI,EACpC3xI,GAGT,OADAipO,EAASt3F,MAAQ,IAAKg0F,EAAQuD,OAAS/Q,GAChC8Q,EAITtD,EAAQuD,MAAQ/Q,EAEhBjhO,EAAOC,QAAUwuO,G,eCxEjB,IAAIhM,EAAe,EAAQ,KACvBwP,EAAmB,EAAQ,MAC3BjJ,EAAQ,EAAQ,MAChBrD,EAAQ,EAAQ,KA4BpB3lO,EAAOC,QAJP,SAAkBoe,GAChB,OAAO2qN,EAAM3qN,GAAQokN,EAAakD,EAAMtnN,IAAS4zN,EAAiB5zN,K,QCNpEre,EAAOC,QAJP,WACE,MAAO,K,SCFTD,EAAOC,QAJP,WACE,OAAO,I,eCdT,IAAI6hO,EAAY,EAAQ,MACpBoQ,EAAe,EAAQ,MACvBC,EAAY,EAAQ,KAMpBC,EAAmB,WAGnBC,EAAYxqO,KAAKM,IAuCrBnI,EAAOC,QAlBP,SAAe6F,EAAG87N,GAEhB,IADA97N,EAAIqsO,EAAUrsO,IACN,GAAKA,EA7BQ,iBA8BnB,MAAO,GAET,IAAI8B,EAAQwqO,EACRhyO,EAASiyO,EAAUvsO,EAAGssO,GAE1BxQ,EAAWsQ,EAAatQ,GACxB97N,GAAKssO,EAGL,IADA,IAAItpO,EAASg5N,EAAU1hO,EAAQwhO,KACtBh6N,EAAQ9B,GACf87N,EAASh6N,GAEX,OAAOkB,I,eC/CT,IAAIkxN,EAAW,EAAQ,MAyCvBh6N,EAAOC,QAZP,SAAkBoB,GAChB,OAAKA,EA3BQ,YA8BbA,EAAQ24N,EAAS34N,KACSA,KAAU,IA9BpB,uBA+BFA,EAAQ,GAAK,EAAI,GAGxBA,GAAUA,EAAQA,EAAQ,EAPd,IAAVA,EAAcA,EAAQ,I,cC/BjC,IAAIixO,EAAW,EAAQ,MAmCvBtyO,EAAOC,QAPP,SAAmBoB,GACjB,IAAIyH,EAASwpO,EAASjxO,GAClBkxO,EAAYzpO,EAAS,EAEzB,OAAOA,GAAWA,EAAUypO,EAAYzpO,EAASypO,EAAYzpO,EAAU,I,eChCzE,IAAI0pO,EAAW,EAAQ,MACnB1O,EAAW,EAAQ,MACnBkB,EAAW,EAAQ,MAMnByN,EAAa,qBAGbC,EAAa,aAGbC,EAAY,cAGZC,EAAe7rI,SA8CnB/mG,EAAOC,QArBP,SAAkBoB,GAChB,GAAoB,iBAATA,EACT,OAAOA,EAET,GAAI2jO,EAAS3jO,GACX,OA1CM,IA4CR,GAAIyiO,EAASziO,GAAQ,CACnB,IAAIozM,EAAgC,mBAAjBpzM,EAAM+sN,QAAwB/sN,EAAM+sN,UAAY/sN,EACnEA,EAAQyiO,EAASrvB,GAAUA,EAAQ,GAAMA,EAE3C,GAAoB,iBAATpzM,EACT,OAAiB,IAAVA,EAAcA,GAASA,EAEhCA,EAAQmxO,EAASnxO,GACjB,IAAI2jC,EAAW0tM,EAAWxsO,KAAK7E,GAC/B,OAAQ2jC,GAAY2tM,EAAUzsO,KAAK7E,GAC/BuxO,EAAavxO,EAAM2E,MAAM,GAAIg/B,EAAW,EAAI,GAC3CytM,EAAWvsO,KAAK7E,GAvDb,KAuD6BA,I,eC5DvC,IAAIioO,EAAe,EAAQ,KA2B3BtpO,EAAOC,QAJP,SAAkBoB,GAChB,OAAgB,MAATA,EAAgB,GAAKioO,EAAajoO,K,cCxB3C,IAAIioO,EAAe,EAAQ,KACvBuJ,EAAY,EAAQ,KACpBC,EAAgB,EAAQ,MACxBC,EAAgB,EAAQ,MACxBhtO,EAAW,EAAQ,MACnBwjO,EAAkB,EAAQ,MAmC9BvpO,EAAOC,QAdP,SAAiByiO,EAAQsQ,EAAOjX,GAE9B,IADA2G,EAAS38N,EAAS28N,MACH3G,QAAmB/5N,IAAVgxO,GACtB,OAAOtQ,EAAO18N,MAAM,EAAGujO,EAAgB7G,GAAU,GAEnD,IAAKA,KAAYsQ,EAAQ1J,EAAa0J,IACpC,OAAOtQ,EAET,IAAIkH,EAAamJ,EAAcrQ,GAC3BrgN,EAAMywN,EAAclJ,EAAYmJ,EAAcC,IAAU,EAE5D,OAAOH,EAAUjJ,EAAY,EAAGvnN,GAAK1Q,KAAK,M,eCrC5C,IAAI23N,EAAe,EAAQ,KACvBuJ,EAAY,EAAQ,KACpB5D,EAAa,EAAQ,MACrBnL,EAAW,EAAQ,MACnBmN,EAAW,EAAQ,MACnBgC,EAAa,EAAQ,MACrBF,EAAgB,EAAQ,MACxBZ,EAAY,EAAQ,KACpBpsO,EAAW,EAAQ,MAOnBqkO,EAAU,OA+FdpqO,EAAOC,QAxDP,SAAkByiO,EAAQ9pH,GACxB,IAAIx4G,EA5CqB,GA6CrB8yO,EA5CuB,MA8C3B,GAAIpP,EAASlrH,GAAU,CACrB,IAAIigC,EAAY,cAAejgC,EAAUA,EAAQigC,UAAYA,EAC7Dz4I,EAAS,WAAYw4G,EAAUu5H,EAAUv5H,EAAQx4G,QAAUA,EAC3D8yO,EAAW,aAAct6H,EAAU0wH,EAAa1wH,EAAQs6H,UAAYA,EAItE,IAAIC,GAFJzQ,EAAS38N,EAAS28N,IAEKtiO,OACvB,GAAI6uO,EAAWvM,GAAS,CACtB,IAAIkH,EAAamJ,EAAcrQ,GAC/ByQ,EAAYvJ,EAAWxpO,OAEzB,GAAIA,GAAU+yO,EACZ,OAAOzQ,EAET,IAAIrgN,EAAMjiB,EAAS6yO,EAAWC,GAC9B,GAAI7wN,EAAM,EACR,OAAO6wN,EAET,IAAIpqO,EAAS8gO,EACTiJ,EAAUjJ,EAAY,EAAGvnN,GAAK1Q,KAAK,IACnC+wN,EAAO18N,MAAM,EAAGqc,GAEpB,QAAkBrgB,IAAd62I,EACF,OAAO/vI,EAASoqO,EAKlB,GAHItJ,IACFvnN,GAAQvZ,EAAO1I,OAASiiB,GAEtB4uN,EAASp4F,IACX,GAAI6pF,EAAO18N,MAAMqc,GAAKtR,OAAO8nI,GAAY,CACvC,IAAI1vG,EACAzV,EAAY5qB,EAMhB,IAJK+vI,EAAU/oI,SACb+oI,EAAYtsD,OAAOssD,EAAUkB,OAAQh0I,EAASqkO,EAAQjpD,KAAKtoC,IAAc,MAE3EA,EAAU0qD,UAAY,EACdp6J,EAAQ0vG,EAAUsoC,KAAKztJ,IAC7B,IAAI0/M,EAASjqM,EAAMvhC,MAErBkB,EAASA,EAAO9C,MAAM,OAAchE,IAAXoxO,EAAuB/wN,EAAM+wN,SAEnD,GAAI1Q,EAAO1vM,QAAQs2M,EAAazwF,GAAYx2H,IAAQA,EAAK,CAC9D,IAAIza,EAAQkB,EAAO8/B,YAAYiwG,GAC3BjxI,GAAS,IACXkB,EAASA,EAAO9C,MAAM,EAAG4B,IAG7B,OAAOkB,EAASoqO,I,eC3GlB,IAAIG,EAAa,EAAQ,MACrB5qN,EAAO,EAAQ,MAgCnBzoB,EAAOC,QAJP,SAAgBsF,GACd,OAAiB,MAAVA,EAAiB,GAAK8tO,EAAW9tO,EAAQkjB,EAAKljB,M,iFC9BhD,IAAI,EAAiB,CAG1BuuC,QAAS,MAETw/L,OAAQ,SAER9D,OAAQ,SAERlrK,UAAW,GAKXivK,aAAa,EAGbC,WAAY,MCjBd,SAASC,IAA2Q,OAA9PA,EAAW9wO,OAAOkO,QAAU,SAAUxO,GAAU,IAAK,IAAIhC,EAAI,EAAGA,EAAIwB,UAAUzB,OAAQC,IAAK,CAAE,IAAI05I,EAASl4I,UAAUxB,GAAI,IAAK,IAAIa,KAAO64I,EAAcp3I,OAAOI,UAAUyC,eAAe/B,KAAKs2I,EAAQ74I,KAAQmB,EAAOnB,GAAO64I,EAAO74I,IAAY,OAAOmB,IAA2BP,MAAMH,KAAME,WAKzS,IAAIub,EAAwB,SAAgBw7F,GACjD,GAAIA,EACF,MAAM,IAAIpxG,MAAM,uPAGlB,OAAO7E,OAAO+wO,OAAO,IAGvBD,EAASr2N,EAAQ,EAAgB,CAC/Bu2N,eCZ0B,CAAC,SAAU,SDarCC,eCX0B,CAAC,SAAU,YAAa,c,cCJpD,SAAS7uO,EAAQa,GAAmV,OAAtOb,EAArD,mBAAXX,QAAoD,iBAApBA,OAAOC,SAAmC,SAAiBuB,GAAO,cAAcA,GAA2B,SAAiBA,GAAO,OAAOA,GAAyB,mBAAXxB,QAAyBwB,EAAI1B,cAAgBE,QAAUwB,IAAQxB,OAAOrB,UAAY,gBAAkB6C,IAAyBA,GAe5W,SAAS,EAAMwC,GACpB,IAAIgd,EAAOrgB,EAAQqD,GAGnB,GAAa,WAATgd,GAA8B,WAATA,GAA8B,YAATA,GAA1CA,MAAgEhd,EAClE,OAAOA,EAIT,GAAuB,mBAAZA,EAAEwb,MACX,OAAOxb,EAAEwb,QAIX,GAAIrjB,MAAMC,QAAQ4H,GAChB,OAAOA,EAAE2D,KAAI,SAAU1K,GACrB,OAAO,EAAMA,MAIjB,GAAI+G,aAAaivB,KAAM,OAAO,IAAIA,KAAKjvB,EAAEgmN,WACzC,IAAI,EAAAylB,EAAA,IAAYzrO,GAAI,OAAOA,EAE3B,GAAIA,aAAamkF,OAAQ,MAAM,IAAIpqF,UAAU,gBAAkBiG,GAG/D,OASK,SAAmB7C,EAAQ8yF,GAChC,IAAIz0E,EAAQ,GAEZ,IAAK,IAAI1iB,KAAOqE,EACV,EAAeA,EAAQrE,KACzB0iB,EAAM1iB,GAAOm3F,EAAS9yF,EAAOrE,KAIjC,OAAO0iB,EAlBA,CAAUxb,EAAG,GA2Bf,SAAS0rO,EAAOprO,EAAGC,GACxB,IAAK,IAAIorO,KAAQprO,EACX,EAAeA,EAAGorO,KACpBrrO,EAAEqrO,GAAQprO,EAAEorO,IAIhB,OAAOrrO,EA+CF,SAASsrO,EAAgBtrO,EAAGC,GACjC,IAAIorO,EAAM1zO,EAAGF,EAEb,GAAII,MAAMC,QAAQkI,GAAI,CACpB,IAAKnI,MAAMC,QAAQmI,GACjB,OAAO,EAGT,GAAID,EAAEtI,SAAWuI,EAAEvI,OACjB,OAAO,EAGT,IAAKC,EAAI,EAAGF,EAAMuI,EAAEtI,OAAQC,EAAIF,EAAKE,IACnC,IAAK2zO,EAAgBtrO,EAAErI,GAAIsI,EAAEtI,IAC3B,OAAO,EAIX,OAAO,EACF,GAAiB,mBAANqI,EAChB,OAAOA,IAAMC,EACR,GAAID,aAAa/F,OAAQ,CAC9B,GAAIpC,MAAMC,QAAQmI,MAAQA,aAAahG,QACrC,OAAO,EAGT,IAAKoxO,KAAQrrO,EAEX,KAAMqrO,KAAQprO,KAAOqrO,EAAgBtrO,EAAEqrO,GAAOprO,EAAEorO,IAC9C,OAAO,EAIX,IAAKA,KAAQprO,EAEX,KAAMorO,KAAQrrO,KAAOsrO,EAAgBtrO,EAAEqrO,GAAOprO,EAAEorO,IAC9C,OAAO,EAIX,OAAO,EAEP,OAAOrrO,IAAMC,EAoHV,SAAS,EAAepD,EAAQrC,GACrC,OAAOqC,GAAU5C,OAAO6C,eAAe/B,KAAK8B,EAAQrC,GC9P/C,SAAS,EAAQ+C,EAAMguO,EAAchwO,EAAQiwO,GAClD,SAASC,EAAgBC,GAIvB,IAAIC,EDyWD,SAAqB9uO,EAAQ+uO,GAGlC,IAFA,IAAIh+B,EAAO,GAEFj2M,EAAI,EAAGA,EAAIi0O,EAAWl0O,OAAQC,IAAK,CAC1C,IAAIa,EAAMozO,EAAWj0O,GACjBgB,EAAQkE,EAAOrE,QAELc,IAAVX,IACFi1M,EAAKp1M,GAAOG,GAIhB,OAAOi1M,ECrXMi+B,CAAYH,EAAOH,EAAaloO,IAAIyoO,IAE/C,OA2FG,SAA4BvuO,EAAMguO,EAAcG,GAQrD,IAPiBH,EAAaxmN,QAAO,SAAUgnN,GAC7C,OAgBG,SAA8BA,GACnC,OAAOA,GAAgC,MAAlBA,EAAW,GAjBtBC,CAAqBD,MAE9BvoO,OAAM,SAAUuoO,GACf,YAA6BzyO,IAAtBoyO,EAAMK,MAGE,CACf,IAAIE,EAAsBV,EAAaxmN,QAAO,SAAUgnN,GACtD,YAA6BzyO,IAAtBoyO,EAAMK,MAGf,MAAM,IAAIjtO,MAAM,2BAA4ByE,OAAOhG,EAAM,OAAU,kCAAkCgG,OAAO0oO,EAAoB5oO,KAAI,SAAU2C,GAC5I,MAAO,IAAKzC,OAAOyC,EAAG,QACrBiD,KAAK,MAAO,OA3GfijO,CAAmB3uO,EAAMguO,EAAcG,GAChCnwO,EAAOowO,GAWhB,OARAF,EAAgBU,WAAY,EAC5BV,EAAgBzyO,GAAKuE,EACrBkuO,EAAgBF,aAAeA,EAAajuO,QAAQwG,OAEhD0nO,IACFC,EAAgBD,KAAOA,GAGlBC,EAqGF,SAASK,EAAsBC,GACpC,OAAOA,GAAgC,MAAlBA,EAAW,GAAaA,EAAWzuO,MAAM,GAAKyuO,EClJrE,I,6BCDA,SAAS,EAAQ7uO,GAAmV,OAAtO,EAArD,mBAAXxB,QAAoD,iBAApBA,OAAOC,SAAmC,SAAiBuB,GAAO,cAAcA,GAA2B,SAAiBA,GAAO,OAAOA,GAAyB,mBAAXxB,QAAyBwB,EAAI1B,cAAgBE,QAAUwB,IAAQxB,OAAOrB,UAAY,gBAAkB6C,IAAyBA,GAMnX,IAEWkvO,EAAoC,EAFpC,UACQ,IACwD,WAwMzE,OApMA,mBAAyB,UACzB,yBAA8B,EAO9B,qBAA2B,WACzB,MAAO,CACLC,OAAQ,UACR/jB,GAAIrvN,KAAKqvN,GACTC,GAAItvN,KAAKsvN,KAUb,sBAA4B,WAC1B,MAAO,CACLroN,EAAGjH,KAAKizC,MACRogM,IAAKrzO,KAAKR,QAcd,qBAA2B,SAAUy3G,GACnC,IACIq4G,EAAKtvN,KAAKsvN,GACVD,EAAKrvN,KAAKqvN,GACVikB,GAAQ,QAAOtzO,KAAKqvN,GAAIp4G,GACxBs8H,GAAQ,QAAOvzO,KAAKsvN,GAAIr4G,GAExBt0C,GAAY,EAAAuvK,EAAA,IAASj7H,GAAWA,EAAUA,EAAUA,EAAQt0C,UAAY,KAE5E,GAAkB,OAAdA,EAAoB,CACtB,IAAIxwB,EAAUjsC,KAAK0xC,IAAI,IAAK+qB,GAExBz8D,KAAK+sC,IAAIo8K,EAAKC,GAAMn9K,IACtBk9K,EAAK,GAGHnpN,KAAK+sC,IAAIq8K,EAAKD,GAAMl9K,IACtBm9K,EAAK,GAiCT,OA7BW,IAAPA,EAEIgkB,EACU,IAAPjkB,EAEE,IAAPC,EACI,KACW,IAARA,EACH,KAEAikB,EAAQ,IAIZjkB,EAAK,GACK,IAARA,EACIgkB,EAAQ,OAERA,EAAQ,MAAQC,EAAMxhN,UAAU,GAAK,IAGlC,IAAPu9L,EACIgkB,EAAQ,OAERA,EAAQ,MAAQC,EAAQ,KAoBtC,cAAoB,SAAUtzO,GAC5B,OAAQC,UAAUzB,QAChB,KAAK,EAED,IAAIe,EAAMU,UAAU,GAEpB,GAAqB,WAAjB,EAAQV,GACV,OAAO,IAAQA,GAEf,MAAM,IAAIgB,UAAU,kDAI1B,KAAK,EAED,IAAIyG,EAAI/G,UAAU,GACdmzO,EAAMnzO,UAAU,GAEpB,IAAI,EAAAgyO,EAAA,IAASjrO,GAAI,CAMf,IALI,EAAAirO,EAAA,IAAOmB,IAAQA,EAAIG,QAAQ,WAE7BH,EAAMA,EAAIhb,SAAS,SAGjB,EAAA6Z,EAAA,IAASmB,GACX,OAAO,IAAI,IAAJ,CAAY,CACjBpsO,EAAGA,EACHosO,IAAKA,IAIT,MAAM,IAAI7yO,UAAU,0CAEpB,MAAM,IAAIA,UAAU,6BAI1B,QACE,MAAM,IAAIwuN,YAAY,qDAI5B,sBAA4B,uBAU5B,aAAmB,SAAUroL,GAC3B,OAAO,IAAI,IAAJ,CAAYA,IAmBrB,YAAkB,SAAU5/B,EAAGC,GAC7B,OAAID,EAAEsoN,GAAKroN,EAAEqoN,GACJ,EAGLtoN,EAAEsoN,GAAKroN,EAAEqoN,IACH,EAGNtoN,EAAEuoN,GAAKtoN,EAAEsoN,GACJ,EAGLvoN,EAAEuoN,GAAKtoN,EAAEsoN,IACH,EAGH,GAGF,MACN,CACDmkB,SAAS,IClNX,SAAS,EAAQxvO,GAAmV,OAAtO,EAArD,mBAAXxB,QAAoD,iBAApBA,OAAOC,SAAmC,SAAiBuB,GAAO,cAAcA,GAA2B,SAAiBA,GAAO,OAAOA,GAAyB,mBAAXxB,QAAyBwB,EAAI1B,cAAgBE,QAAUwB,IAAQxB,OAAOrB,UAAY,gBAAkB6C,IAAyBA,GAe5W,SAAS6oO,EAAQ/sO,EAAI2zO,GAC1B,OAAO,SAAS5G,IACiB,WAA3B,EAAQA,EAAQh0F,SAClBg0F,EAAQh0F,MAAQ,IAKlB,IAFA,IAAI74I,EAAO,GAEFvB,EAAI,EAAGA,EAAIwB,UAAUzB,OAAQC,IACpCuB,EAAKvB,GAAKwB,UAAUxB,GAGtB,IAAIi1O,EAAOD,EAASA,EAAOzzO,GAAQo0B,KAAKC,UAAUr0B,GAMlD,OAJM0zO,KAAQ7G,EAAQh0F,QACpBg0F,EAAQh0F,MAAM66F,GAAQ5zO,EAAGI,MAAMJ,EAAIE,IAG9B6sO,EAAQh0F,MAAM66F,IC1BK7G,GAAQ,SAAU8G,GAC9C,OAAO,IAAIA,EAAU,GAAGjrO,QACvB+qO,GAO6B5G,GAAQ,SAAU8G,GAChD,OAAO,IAAIA,EAAU,GAAGzkB,KAAK,IAAIykB,EAAU,GAAG7qO,QAAQ2rC,IAAI,KACzDg/L,GAXI,IAkBIG,EAAoB/G,GAAQ,SAAU8G,GAC/C,OAAOA,EAAU/3L,MAAM,KACtB63L,GAmBH,SAASA,EAAOzzO,GACd,OAAOA,EAAK,GAAG0iE,UAbemqK,GAAQ,SAAU8G,GAChD,OAAOC,EAAkBD,GAAWpgB,MAAM,KACzCkgB,GCpCaxtO,KAAKm8D,GACAn8D,KAAKm8D,GACXn8D,KAAK2pN,E,uBCETikB,EAAsC,EAFtC,YACQ,CAAC,MAAO,WACkD,SAAUC,GACrF,IAAIhsB,EAAKgsB,EAAKhsB,GACVtsM,EAASs4N,EAAKt4N,OAGdm4N,EAAY,UAAc,CAC5BjxK,UAAWlnD,EAAOknD,UAClB6tJ,OAJW,IAgDb,OAtCAojB,EAAUxyO,UAAUqiB,KAAO,YAC3BmwN,EAAUxyO,UAAU4yO,aAAc,EAQlCJ,EAAUxyO,UAAUm0G,OAAS,WAC3B,MAAO,CACL69H,OAAQ,YACR1zO,MAAOM,KAAKoE,aAWhBwvO,EAAUK,SAAW,SAAUttM,GAC7B,OAAO,IAAIitM,EAAUjtM,EAAKjnC,QAGxBqoN,GAEFA,EAAG,UAAU,SAAUt6M,EAAMD,GACvBC,EAAKk1D,YAAcn1D,EAAKm1D,WAC1BixK,EAAUn4N,OAAO,CACfknD,UAAWl1D,EAAKk1D,eAMjBixK,IACN,CACDH,SAAS,ICtDAS,EAAmC,EAFnC,SACQ,IACuD,WAuBxE,SAASC,IACP,KAAMn0O,gBAAgBm0O,GACpB,MAAM,IAAInlB,YAAY,oDA0N1B,OAlNAmlB,EAAO/yO,UAAUqiB,KAAO,SACxB0wN,EAAO/yO,UAAUgzO,UAAW,EAU5BD,EAAO/yO,UAAUizO,QAAU,WAEzB,MAAM,IAAIxuO,MAAM,gDAYlBsuO,EAAO/yO,UAAUkzO,SAAW,WAE1B,MAAM,IAAIzuO,MAAM,iDASlBsuO,EAAO/yO,UAAUkB,OAAS,SAAUqC,EAAM2vO,GACxC,MAAM,IAAIzuO,MAAM,+CAiBlBsuO,EAAO/yO,UAAUmzO,OAAS,SAAUtuO,EAAOuuO,EAAa3zK,GAEtD,MAAM,IAAIh7D,MAAM,+CASlBsuO,EAAO/yO,UAAUM,IAAM,SAAUuE,GAE/B,MAAM,IAAIJ,MAAM,4CAalBsuO,EAAO/yO,UAAU6D,IAAM,SAAUgB,EAAOvG,EAAOmhE,GAE7C,MAAM,IAAIh7D,MAAM,4CAgBlBsuO,EAAO/yO,UAAUq0I,OAAS,SAAUttI,EAAM04D,GAExC,MAAM,IAAIh7D,MAAM,+CAalBsuO,EAAO/yO,UAAUqgD,QAAU,SAAUt5C,EAAM04D,GAEzC,MAAM,IAAIh7D,MAAM,gDAQlBsuO,EAAO/yO,UAAU6gB,MAAQ,WAEvB,MAAM,IAAIpc,MAAM,8CAQlBsuO,EAAO/yO,UAAU+G,KAAO,WAEtB,MAAM,IAAItC,MAAM,6CAclBsuO,EAAO/yO,UAAUgJ,IAAM,SAAUssF,EAAU+9I,GAEzC,MAAM,IAAI5uO,MAAM,4CAUlBsuO,EAAO/yO,UAAU4K,QAAU,SAAU0qF,GAEnC,MAAM,IAAI7wF,MAAM,gDAQlBsuO,EAAO/yO,UAAUiuI,QAAU,WAEzB,MAAM,IAAIxpI,MAAM,gDAQlBsuO,EAAO/yO,UAAUqrN,QAAU,WAEzB,MAAM,IAAI5mN,MAAM,gDAYlBsuO,EAAO/yO,UAAU06B,OAAS,SAAUm7E,GAElC,MAAM,IAAIpxG,MAAM,+CAQlBsuO,EAAO/yO,UAAUgD,SAAW,WAE1B,MAAM,IAAIyB,MAAM,iDAGXsuO,IACN,CACDV,SAAS,ICtKX,SAASiB,EAAcpwO,EAAM5E,GAE3B,OAAO,EAAQ4E,EADI,CAAC,SAAU,cACK,SAAUqwO,GAC3C,IAAIl5N,EAASk5N,EAAMl5N,OACfm4N,EAAYe,EAAMf,UACtB,MAAyB,cAAlBn4N,EAAOoyN,OAAyB,IAAI+F,EAAUl0O,GAASA,KA7DjCg1O,EAAc,gBAAiB,gBAQ7BA,EAAc,kBAAmB,OACpCA,EAAc,eAAgB,MAY7BA,EAAc,iBAAkB,e,uBC3CtDE,EAAqC,EAFrC,WACQ,IACyD,WA+B1E,OA3BA,mBAA0B,WAC1B,0BAAgC,EAOhC,qBAA4B,WAC1B,MAAO,CACLxB,OAAQ,WACRjvO,EAAGnE,KAAKqK,EAAIrK,KAAKmE,EACjB4I,EAAG/M,KAAK+M,IAWZ,aAAoB,SAAU45B,GAC5B,OAAO,IAAI,IAAJ,CAAaA,IAGf,MACN,CACD8sM,SAAS,ICoIJ,SAASxf,EAAcv0N,EAAOijE,GACnC,YAAkBtiE,IAAdsiE,EACKjjE,EAAMu0N,cAActxJ,EAAY,GAEhCjjE,EAAMu0N,gBC7KjB,SAAS,EAAQhwN,GAAmV,OAAtO,EAArD,mBAAXxB,QAAoD,iBAApBA,OAAOC,SAAmC,SAAiBuB,GAAO,cAAcA,GAA2B,SAAiBA,GAAO,OAAOA,GAAyB,mBAAXxB,QAAyBwB,EAAI1B,cAAgBE,QAAUwB,IAAQxB,OAAOrB,UAAY,gBAAkB6C,IAAyBA,GAoD5W,SAAS,EAAOvE,EAAOu3G,GAC5B,MAAqB,iBAAVv3G,GACF,QAAaA,EAAOu3G,IAGzB,EAAAi7H,EAAA,IAAYxyO,GDUX,SAAgBA,EAAOu3G,GAC5B,GAAuB,mBAAZA,EAET,OAAOA,EAAQv3G,GAIjB,IAAKA,EAAM8L,WACT,OAAO9L,EAAM6L,QAAU,MAAQ7L,EAAMg1N,GAAG,GAAK,WAAa,YAI5D,IACI/xJ,EADAkyK,EAAW,OAkBf,YAfgBx0O,IAAZ42G,IAEEA,EAAQ49H,WACVA,EAAW59H,EAAQ49H,UAIE,iBAAZ59H,EACTt0C,EAAYs0C,EACHA,EAAQt0C,YACjBA,EAAYs0C,EAAQt0C,YAKhBkyK,GACN,IAAK,QACH,OAoFC,SAAiBn1O,EAAOijE,GAC7B,OAAOjjE,EAAMqgB,QAAQ4iD,GArFV5iD,CAAQrgB,EAAOijE,GAExB,IAAK,cACH,OAAOsxJ,EAAcv0N,EAAOijE,GAE9B,IAAK,cACH,OAyCC,SAAuBjjE,EAAOijE,GAEnC,IAAIvsC,EAAI12B,EAAM02B,EACV0+M,EAAS1+M,EAAI,GAAM,EAAIA,EAAIA,EAAI,EAAIA,EAAI,EAAIA,EAAI,EAAIA,EAAIA,EAAI,EAE3D2+M,EAAkBr1O,EAAMk1C,IAAI1uC,KAAK0xC,IAAI,IAAKk9L,IAC1CE,EAAWD,EAAgBj7C,YAAYn3H,GAM3C,OAJ+B,IAA3BqyK,EAAS3jN,QAAQ,OACnB2jN,EAAWD,EAAgB3wO,YAGtB4wO,EAAW,KAAO5+M,GAAK,EAAI,IAAM,IAAM0+M,EAAO1wO,WArD1C6wO,CAAcv1O,EAAOijE,GAE9B,IAAK,OAID,IAAIuyK,EAAWj+H,QAAgC52G,IAArB42G,EAAQi+H,SAAyBj+H,EAAQi+H,UAAY,EAC3EC,EAAWl+H,QAAgC52G,IAArB42G,EAAQk+H,SAAyBl+H,EAAQk+H,SAAW,EAE9E,GAAIz1O,EAAMs0N,SAAU,MAAO,IAG3B,IAAIohB,EAAU11O,EAAMg5N,oBAAoB/1J,GACpCh6D,EAAMysO,EAAQh/M,EAWlB,OATIztB,GAAOusO,GAAYvsO,EAAMwsO,EAErBC,EAAQr1N,UAGRk0M,EAAcv0N,EAAOijE,IAIlB/yD,QAAQ,uBAAuB,WACxC,IAAI+pN,EAASz5N,UAAU,GACnBk2B,EAAIl2B,UAAU,GAClB,MAAkB,MAAXy5N,EAAiBA,EAASvjM,EAAIA,KAI3C,QACE,MAAM,IAAIvwB,MAAM,qBAAuBgvO,EAAvB,iDC/EX/4M,CAAgBp8B,EAAOu3G,GA+HlC,SAA2Bv3G,GACzB,OAAOA,GAA4B,WAAnB,EAAQA,IAA0C,iBAAZA,EAAM2K,GAAqC,iBAAZ3K,EAAMyE,GAAqC,iBAAZzE,EAAMqN,IAAkB,EA3HxIsoO,CAAkB31O,GACfu3G,GAAgC,YAArBA,EAAQn0E,SAKfpjC,EAAM0E,WAHN1E,EAAM2K,EAAI3K,EAAMyE,EAAI,IAAMzE,EAAMqN,EAOvCnO,MAAMC,QAAQa,GACT41O,EAAY51O,EAAOu3G,IAGxB,EAAAi7H,EAAA,IAASxyO,GACJ,IAAMA,EAAQ,IAGF,mBAAVA,EACFA,EAAM61O,OAASrpO,OAAOxM,EAAM61O,QAAU,WAG3C71O,GAA4B,WAAnB,EAAQA,GACS,mBAAjBA,EAAMo8B,OACRp8B,EAAMo8B,OAAOm7E,GACXv3G,GAASA,EAAM0E,SAAS6yG,KAAa,GAAG7yG,WAE1C1E,EAAM0E,SAAS6yG,GAKf,IAHOj2G,OAAO8lB,KAAKpnB,GAAO0K,KAAI,SAAU7K,GAC7C,MAAO,IAAMA,EAAM,MAAQ,EAAOG,EAAMH,GAAM03G,MAE3BjnG,KAAK,MAAQ,IAI/B9D,OAAOxM,GA4DhB,SAAS41O,EAAYxvO,EAAOmxG,GAC1B,GAAIr4G,MAAMC,QAAQiH,GAAQ,CAIxB,IAHA,IAAIivB,EAAM,IACNv2B,EAAMsH,EAAMrH,OAEPC,EAAI,EAAGA,EAAIF,EAAKE,IACb,IAANA,IACFq2B,GAAO,MAGTA,GAAOugN,EAAYxvO,EAAMpH,GAAIu4G,GAI/B,OADAliF,EAAO,IAGP,OAAO,EAAOjvB,EAAOmxG,GCtKlB,SAASu+H,EAAevjM,EAAQC,EAAUujM,GAC/C,KAAMz1O,gBAAgBw1O,GACpB,MAAM,IAAIxmB,YAAY,oDAGxBhvN,KAAKiyC,OAASA,EACdjyC,KAAKkyC,SAAWA,EAChBlyC,KAAKy1O,SAAWA,EAChBz1O,KAAK0nB,QAAU,wBAA0B9oB,MAAMC,QAAQozC,GAAU,IAAMA,EAAOjiC,KAAK,MAAQ,IAAMiiC,GAAU,KAAOjyC,KAAKy1O,UAAY,MAAQ,KAAO72O,MAAMC,QAAQqzC,GAAY,IAAMA,EAASliC,KAAK,MAAQ,IAAMkiC,GAAY,IAC1NlyC,KAAKynB,OAAQ,IAAI5hB,OAAQ4hB,MCRpB,SAASiuN,EAAWzvO,EAAOO,EAAKE,GACrC,KAAM1G,gBAAgB01O,GACpB,MAAM,IAAI1mB,YAAY,oDAGxBhvN,KAAKiG,MAAQA,EAET/F,UAAUzB,OAAS,GACrBuB,KAAKwG,IAAM,EACXxG,KAAK0G,IAAMF,IAEXxG,KAAKwG,IAAMA,EACXxG,KAAK0G,IAAMA,QAGIrG,IAAbL,KAAKwG,KAAqBxG,KAAKiG,MAAQjG,KAAKwG,IAC9CxG,KAAK0nB,QAAU,uBAAyB1nB,KAAKiG,MAAQ,MAAQjG,KAAKwG,IAAM,SAClDnG,IAAbL,KAAK0G,KAAqB1G,KAAKiG,OAASjG,KAAK0G,IACtD1G,KAAK0nB,QAAU,uBAAyB1nB,KAAKiG,MAAQ,OAASjG,KAAK0G,IAAM,GAAK,IAE9E1G,KAAK0nB,QAAU,uBAAyB1nB,KAAKiG,MAAQ,IAGvDjG,KAAKynB,OAAQ,IAAI5hB,OAAQ4hB,MCpBpB,SAASkuN,EAAUlvO,GAGxB,IAFA,IAAI4D,EAAI,GAEDzL,MAAMC,QAAQ4H,IACnB4D,EAAElH,KAAKsD,EAAEhI,QACTgI,EAAIA,EAAE,GAGR,OAAO4D,EAYT,SAASurO,EAAU9vO,EAAOqC,EAAMoxC,GAC9B,IAAI76C,EACAF,EAAMsH,EAAMrH,OAEhB,GAAID,IAAQ2J,EAAKoxC,GACf,MAAM,IAAIi8L,EAAeh3O,EAAK2J,EAAKoxC,IAGrC,GAAIA,EAAMpxC,EAAK1J,OAAS,EAAG,CAEzB,IAAIo3O,EAAUt8L,EAAM,EAEpB,IAAK76C,EAAI,EAAGA,EAAIF,EAAKE,IAAK,CACxB,IAAIslI,EAAQl+H,EAAMpH,GAElB,IAAKE,MAAMC,QAAQmlI,GACjB,MAAM,IAAIwxG,EAAertO,EAAK1J,OAAS,EAAG0J,EAAK1J,OAAQ,KAGzDm3O,EAAU9vO,EAAMpH,GAAIyJ,EAAM0tO,SAI5B,IAAKn3O,EAAI,EAAGA,EAAIF,EAAKE,IACnB,GAAIE,MAAMC,QAAQiH,EAAMpH,IACtB,MAAM,IAAI82O,EAAertO,EAAK1J,OAAS,EAAG0J,EAAK1J,OAAQ,KAcxD,SAASq3O,EAAShwO,EAAOqC,GAG9B,GAF+B,IAAhBA,EAAK1J,QAIlB,GAAIG,MAAMC,QAAQiH,GAChB,MAAM,IAAI0vO,EAAe1vO,EAAMrH,OAAQ,QAIzCm3O,EAAU9vO,EAAOqC,EAAM,GAUpB,SAAS4tO,EAAc9vO,EAAOxH,GACnC,KAAK,EAAAyzO,EAAA,IAASjsO,MAAW,OAAUA,GACjC,MAAM,IAAIzF,UAAU,oCAAsCyF,EAAQ,KAGpE,GAAIA,EAAQ,GAAuB,iBAAXxH,GAAuBwH,GAASxH,EACtD,MAAM,IAAIi3O,EAAWzvO,EAAOxH,GAczB,SAAS,EAAOqH,EAAOqC,EAAM04D,GAGlC,IAAKjiE,MAAMC,QAAQiH,KAAWlH,MAAMC,QAAQsJ,GAC1C,MAAM,IAAI3H,UAAU,kBAGtB,GAAoB,IAAhB2H,EAAK1J,OACP,MAAM,IAAIoH,MAAM,uCAclB,OAVAsC,EAAK6D,SAAQ,SAAUtM,GACrB,KAAK,EAAAwyO,EAAA,IAASxyO,MAAW,OAAUA,IAAUA,EAAQ,EACnD,MAAM,IAAIc,UAAU,uDAA8D,EAAO2H,GAAQ,QAMrG6tO,EAAQlwO,EAAOqC,EAAM,OAFgB9H,IAAjBwgE,EAA6BA,EAAe,GAIzD/6D,EAYT,SAASkwO,EAAQlwO,EAAOqC,EAAMoxC,EAAKsnB,GACjC,IAAIniE,EACAo3M,EACAmgC,EAASnwO,EAAMrH,OACfy3O,EAAS/tO,EAAKoxC,GACdr1C,EAASgC,KAAKM,IAAIyvO,EAAQC,GAI9B,GAFApwO,EAAMrH,OAASy3O,EAEX38L,EAAMpxC,EAAK1J,OAAS,EAAG,CAEzB,IAAIo3O,EAAUt8L,EAAM,EAEpB,IAAK76C,EAAI,EAAGA,EAAIwF,EAAQxF,IAEtBo3M,EAAOhwM,EAAMpH,GAERE,MAAMC,QAAQi3M,KACjBA,EAAO,CAACA,GAERhwM,EAAMpH,GAAKo3M,GAGbkgC,EAAQlgC,EAAM3tM,EAAM0tO,EAASh1K,GAI/B,IAAKniE,EAAIwF,EAAQxF,EAAIw3O,EAAQx3O,IAE3Bo3M,EAAO,GACPhwM,EAAMpH,GAAKo3M,EAEXkgC,EAAQlgC,EAAM3tM,EAAM0tO,EAASh1K,OAE1B,CAGL,IAAKniE,EAAI,EAAGA,EAAIwF,EAAQxF,IACtB,KAAOE,MAAMC,QAAQiH,EAAMpH,KACzBoH,EAAMpH,GAAKoH,EAAMpH,GAAG,GAKxB,IAAKA,EAAIwF,EAAQxF,EAAIw3O,EAAQx3O,IAC3BoH,EAAMpH,GAAKmiE,GA4JV,SAASs1K,EAAUrwO,EAAOwzC,EAAM4vK,EAAO/gN,GAC5C,IAAIkC,EAAIlC,GAAQwtO,EAAU7vO,GAE1B,GAAIojN,EACF,IAAK,IAAIxqN,EAAI,EAAGA,EAAIwqN,EAAOxqN,IACzBoH,EAAQ,CAACA,GACTuE,EAAEmvC,QAAQ,GAOd,IAFA1zC,EAAQswO,EAAWtwO,EAAOwzC,EAAM,GAEzBjvC,EAAE5L,OAAS66C,GAChBjvC,EAAElH,KAAK,GAGT,OAAO2C,EAWT,SAASswO,EAAWtwO,EAAOwzC,EAAMC,GAC/B,IAAI76C,EAAG23O,EAEP,GAAIz3O,MAAMC,QAAQiH,GAAQ,CACxB,IAAI5C,EAAOq2C,EAAM,EAEjB,IAAK76C,EAAI,EAAG23O,EAAKvwO,EAAMrH,OAAQC,EAAI23O,EAAI33O,IACrCoH,EAAMpH,GAAK03O,EAAWtwO,EAAMpH,GAAI46C,EAAMp2C,QAGxC,IAAK,IAAI6J,EAAIwsC,EAAKxsC,EAAIusC,EAAMvsC,IAC1BjH,EAAQ,CAACA,GAIb,OAAOA,EAUF,SAASiC,EAAQjC,GACtB,IAAKlH,MAAMC,QAAQiH,GAEjB,OAAOA,EAGT,IAAI0gM,EAAO,GAQX,OAPA1gM,EAAMkG,SAAQ,SAAS0qF,EAASh3F,GAC1Bd,MAAMC,QAAQa,GAChBA,EAAMsM,QAAQ0qF,GAEd8vG,EAAKrjM,KAAKzD,MAGP8mM,EAiIF,SAAS8vC,EAAiBxwO,EAAOywO,GAKtC,IAJA,IAAI9yN,EAEAhlB,EAAS,EAEJC,EAAI,EAAGA,EAAIoH,EAAMrH,OAAQC,IAAK,CACrC,IAAI2sB,EAAOvlB,EAAMpH,GACbG,EAAUD,MAAMC,QAAQwsB,GAO5B,GALU,IAAN3sB,GAAWG,IACbJ,EAAS4sB,EAAK5sB,QAIZI,GAAWwsB,EAAK5sB,SAAWA,EAC7B,OAGF,IAAI+3O,EAAW33O,EAAUy3O,EAAiBjrN,EAAMkrN,GAC9CA,EAAOlrN,GAET,QAAahrB,IAATojB,EACFA,EAAO+yN,OACF,GAAI/yN,IAAS+yN,EAClB,MAAO,QAKX,OAAO/yN,EFxiBT+xN,EAAep0O,UAAY,IAAIwoI,WAC/B4rG,EAAep0O,UAAUmB,YAAcqnI,WACvC4rG,EAAep0O,UAAUkD,KAAO,iBAChCkxO,EAAep0O,UAAUq1O,kBAAmB,ECY5Cf,EAAWt0O,UAAY,IAAIwoI,WAC3B8rG,EAAWt0O,UAAUmB,YAAcqnI,WACnC8rG,EAAWt0O,UAAUkD,KAAO,aAC5BoxO,EAAWt0O,UAAUs1O,cAAe,EE/BpC,IAEWC,EAAwC,EAFxC,cACQ,CAAC,WAC2D,SAAU5C,GACvF,IAAII,EAASJ,EAAKI,OAMlB,SAASyC,EAAYjyO,EAAM2vO,GACzB,KAAMt0O,gBAAgB42O,GACpB,MAAM,IAAI5nB,YAAY,oDAGxB,GAAIslB,KAAa,EAAApC,EAAA,IAASoC,GACxB,MAAM,IAAIzuO,MAAM,qBAAuByuO,GAGzC,IAAI,EAAApC,EAAA,IAASvtO,GAEO,gBAAdA,EAAK8e,MAEPzjB,KAAK62O,MAAQ,EAAMlyO,EAAKkyO,OACxB72O,KAAK82O,MAAQ,EAAMnyO,EAAKmyO,OACxB92O,KAAK+2O,UAAYzC,GAAY3vO,EAAKoyO,YAGlC/2O,KAAK62O,MAAQlyO,EAAK0qI,UAClBrvI,KAAK82O,MAAQnyO,EAAKwD,OAClBnI,KAAK+2O,UAAYzC,GAAY3vO,EAAKoyO,gBAE/B,GAAIpyO,IAAQ,EAAAutO,EAAA,IAAQvtO,EAAKA,QAAS,EAAAutO,EAAA,IAAQvtO,EAAKwD,MAEpDnI,KAAK62O,MAAQlyO,EAAKA,KAClB3E,KAAK82O,MAAQnyO,EAAKwD,KAElB2tO,EAAS91O,KAAK62O,MAAO72O,KAAK82O,OAC1B92O,KAAK+2O,UAAYzC,GAAY3vO,EAAK2vO,cAC7B,IAAI,EAAApC,EAAA,IAAQvtO,GAEjB3E,KAAK62O,MAAQG,EAAWryO,GAExB3E,KAAK82O,MAAQnB,EAAU31O,KAAK62O,OAE5Bf,EAAS91O,KAAK62O,MAAO72O,KAAK82O,OAE1B92O,KAAK+2O,UAAYzC,MACZ,IAAI3vO,EAET,MAAM,IAAInE,UAAU,8BAA+B,QAAOmE,GAAQ,KAGlE3E,KAAK62O,MAAQ,GACb72O,KAAK82O,MAAQ,CAAC,GACd92O,KAAK+2O,UAAYzC,GA0LrB,SAAShzO,EAAKqwO,EAAQ1rO,GACpB,KAAK,EAAAisO,EAAA,IAAQjsO,GACX,MAAM,IAAIzF,UAAU,iBAKtB,GAFeyF,EAAMgxO,WAInB,OAAOtF,EAAOjwO,IAAIuE,EAAMO,OAGxB,IAAI2B,EAAOlC,EAAMkC,OAEjB,GAAIA,EAAK1J,SAAWkzO,EAAOmF,MAAMr4O,OAC/B,MAAM,IAAI+2O,EAAertO,EAAK1J,OAAQkzO,EAAOmF,MAAMr4O,QAOrD,IAHA,IAAI+H,EAAMP,EAAMO,MACZE,EAAMT,EAAMS,MAEPhI,EAAI,EAAG23O,EAAK1E,EAAOmF,MAAMr4O,OAAQC,EAAI23O,EAAI33O,IAChDq3O,EAAcvvO,EAAI9H,GAAIizO,EAAOmF,MAAMp4O,IACnCq3O,EAAcrvO,EAAIhI,GAAIizO,EAAOmF,MAAMp4O,IAKrC,OAAO,IAAIk4O,EAAYM,EAAcvF,EAAOkF,MAAO5wO,EAAOkC,EAAK1J,OAAQ,GAAIkzO,EAAOoF,WAgBtF,SAASG,EAAcvyO,EAAMsB,EAAOqzC,EAAMC,GACxC,IAAI49L,EAAO59L,IAAQD,EAAO,EACtB+d,EAAQpxD,EAAMsuF,UAAUh7C,GAE5B,OAAI49L,EACK9/K,EAAMjtD,KAAI,SAAU1L,GAEzB,OADAq3O,EAAcr3O,EAAGiG,EAAKlG,QACfkG,EAAKjG,MACX+tN,UAEIp1J,EAAMjtD,KAAI,SAAU1L,GAGzB,OAFAq3O,EAAcr3O,EAAGiG,EAAKlG,QAEfy4O,EADKvyO,EAAKjG,GACWuH,EAAOqzC,EAAMC,EAAM,MAC9CkzK,UAiBP,SAAS2qB,EAAKzF,EAAQ1rO,EAAOoxO,EAAWx2K,GACtC,IAAK56D,IAA2B,IAAlBA,EAAMq6N,QAClB,MAAM,IAAI9/N,UAAU,iBAItB,IAGI82O,EAHAC,EAAQtxO,EAAMkC,OACd8uO,EAAWhxO,EAAMgxO,WAWrB,IAPI,EAAA/E,EAAA,IAASmF,IACXC,EAAQD,EAAUlvO,OAClBkvO,EAAYA,EAAU5qB,WAEtB6qB,EAAQ3B,EAAU0B,GAGhBJ,EAAU,CAGZ,GAAqB,IAAjBK,EAAM74O,OACR,MAAM,IAAI+B,UAAU,mBAGtBmxO,EAAO1sO,IAAIgB,EAAMO,MAAO6wO,EAAWx2K,OAC9B,CAGL,GAAI02K,EAAM94O,OAASkzO,EAAOmF,MAAMr4O,OAC9B,MAAM,IAAI+2O,EAAe+B,EAAM94O,OAAQkzO,EAAOmF,MAAMr4O,OAAQ,KAG9D,GAAI64O,EAAM74O,OAAS84O,EAAM94O,OAAQ,CAK/B,IAHA,IAAIC,EAAI,EACJwqN,EAAQ,EAEQ,IAAbquB,EAAM74O,IAAyB,IAAb44O,EAAM54O,IAC7BA,IAGF,KAAoB,IAAb64O,EAAM74O,IACXwqN,IACAxqN,IAIF24O,EAAYlB,EAAUkB,EAAWE,EAAM94O,OAAQyqN,EAAOouB,GAIxD,IAAKjF,EAAgBkF,EAAOD,GAC1B,MAAM,IAAI9B,EAAe+B,EAAOD,EAAO,KAQzCE,EAAK7F,EAJM1rO,EAAMS,MAAM0D,KAAI,SAAU1L,GACnC,OAAOA,EAAI,KAGMmiE,GAGnB,IAAIvnB,EAAOi+L,EAAM94O,OAGjBg5O,EAAc9F,EAAOkF,MAAO5wO,EAAOoxO,EAAW/9L,EAFpC,GAKZ,OAAOq4L,EAcT,SAAS8F,EAAc9yO,EAAMsB,EAAOoxO,EAAW/9L,EAAMC,GACnD,IAAI49L,EAAO59L,IAAQD,EAAO,EACtB+d,EAAQpxD,EAAMsuF,UAAUh7C,GAExB49L,EACF9/K,EAAMrrD,SAAQ,SAAU0rO,EAAWC,GACjC5B,EAAc2B,GACd/yO,EAAK+yO,GAAaL,EAAUM,EAAS,OAGvCtgL,EAAMrrD,SAAQ,SAAU0rO,EAAWC,GACjC5B,EAAc2B,GAEdD,EAAc9yO,EAAK+yO,GAAYzxO,EAAOoxO,EAAUM,EAAS,IAAKr+L,EAAMC,EAAM,MAmChF,SAASy8L,EAAQrE,EAAQxpO,EAAM04D,GAE7B,GAAoB,IAAhB14D,EAAK1J,OAAc,CAIrB,IAFA,IAAIwhB,EAAI0xN,EAAOkF,OAER,EAAA3E,EAAA,IAAQjyN,IACbA,EAAIA,EAAE,GAGR,OAAOA,EAQT,OAJA0xN,EAAOmF,MAAQ3uO,EAAK9D,MAAM,GAE1BstO,EAAOkF,MAAQ,EAAOlF,EAAOkF,MAAOlF,EAAOmF,MAAOj2K,GAE3C8wK,EAmCT,SAAS6F,EAAK7F,EAAQxpO,EAAM04D,GAM1B,IALA,IACA+2K,EAAUjG,EAAOmF,MAAMzyO,MAAM,GAEzBwzO,GAAU,EAEPD,EAAQn5O,OAAS0J,EAAK1J,QAC3Bm5O,EAAQz0O,KAAK,GACb00O,GAAU,EAIZ,IAAK,IAAIn5O,EAAI,EAAG23O,EAAKluO,EAAK1J,OAAQC,EAAI23O,EAAI33O,IACpCyJ,EAAKzJ,GAAKk5O,EAAQl5O,KACpBk5O,EAAQl5O,GAAKyJ,EAAKzJ,GAClBm5O,GAAU,GAIVA,GAEF7B,EAAQrE,EAAQiG,EAAS/2K,GAgY7B,SAASm2K,EAAWryO,GAClB,IAAK,IAAIjG,EAAI,EAAG23O,EAAK1xO,EAAKlG,OAAQC,EAAI23O,EAAI33O,IAAK,CAC7C,IAAIo3M,EAAOnxM,EAAKjG,IAEZ,EAAAwzO,EAAA,IAAQp8B,GACVnxM,EAAKjG,GAAKs4O,EAAWlhC,GACZA,IAA0B,IAAlBA,EAAKs+B,WACtBzvO,EAAKjG,GAAKs4O,EAAWlhC,EAAK2W,YAI9B,OAAO9nN,EAGT,OA91BAiyO,EAAYx1O,UAAY,IAAI+yO,EAK5ByC,EAAYx1O,UAAU02O,kBAAoB,SAAUnzO,EAAM2vO,GACxD,OAAO,IAAIsC,EAAYjyO,EAAM2vO,IAO/BsC,EAAYx1O,UAAUqiB,KAAO,cAC7BmzN,EAAYx1O,UAAU22O,eAAgB,EAWtCnB,EAAYx1O,UAAU42O,YAAc,WAClC,OAAO1B,EAAiBt2O,KAAK62O,MAAO,OAatCD,EAAYx1O,UAAUizO,QAAU,WAC9B,MAAO,SAaTuC,EAAYx1O,UAAUkzO,SAAW,WAC/B,OAAOt0O,KAAK+2O,WAUdH,EAAYx1O,UAAUkB,OAAS,SAAUqC,EAAM2vO,GAC7C,OAAO,IAAIsC,EAAYjyO,EAAM2vO,IAkB/BsC,EAAYx1O,UAAUmzO,OAAS,SAAUtuO,EAAOuuO,EAAa3zK,GAC3D,OAAQ3gE,UAAUzB,QAChB,KAAK,EACH,OAAO6C,EAAKtB,KAAMiG,GAGpB,KAAK,EACL,KAAK,EACH,OAAOmxO,EAAKp3O,KAAMiG,EAAOuuO,EAAa3zK,GAExC,QACE,MAAM,IAAImuJ,YAAY,+BAW5B4nB,EAAYx1O,UAAUM,IAAM,SAAUuE,GACpC,KAAK,EAAAisO,EAAA,IAAQjsO,GACX,MAAM,IAAIzF,UAAU,kBAGtB,GAAIyF,EAAMxH,SAAWuB,KAAK82O,MAAMr4O,OAC9B,MAAM,IAAI+2O,EAAevvO,EAAMxH,OAAQuB,KAAK82O,MAAMr4O,QAIpD,IAAK,IAAIgI,EAAI,EAAGA,EAAIR,EAAMxH,OAAQgI,IAChCsvO,EAAc9vO,EAAMQ,GAAIzG,KAAK82O,MAAMrwO,IAKrC,IAFA,IAAI9B,EAAO3E,KAAK62O,MAEPn4O,EAAI,EAAG23O,EAAKpwO,EAAMxH,OAAQC,EAAI23O,EAAI33O,IAAK,CAC9C,IAAIu5O,EAAShyO,EAAMvH,GACnBq3O,EAAckC,EAAQtzO,EAAKlG,QAC3BkG,EAAOA,EAAKszO,GAGd,OAAOtzO,GAcTiyO,EAAYx1O,UAAU6D,IAAM,SAAUgB,EAAOvG,EAAOmhE,GAClD,KAAK,EAAAqxK,EAAA,IAAQjsO,GACX,MAAM,IAAIzF,UAAU,kBAGtB,GAAIyF,EAAMxH,OAASuB,KAAK82O,MAAMr4O,OAC5B,MAAM,IAAI+2O,EAAevvO,EAAMxH,OAAQuB,KAAK82O,MAAMr4O,OAAQ,KAG5D,IAAIC,EAAG23O,EAAI4B,EAMXT,EAAKx3O,KAJMiG,EAAMmE,KAAI,SAAU1L,GAC7B,OAAOA,EAAI,KAGImiE,GAGjB,IAAIl8D,EAAO3E,KAAK62O,MAEhB,IAAKn4O,EAAI,EAAG23O,EAAKpwO,EAAMxH,OAAS,EAAGC,EAAI23O,EAAI33O,IAEzCq3O,EADAkC,EAAShyO,EAAMvH,GACOiG,EAAKlG,QAC3BkG,EAAOA,EAAKszO,GAOd,OAFAlC,EADAkC,EAAShyO,EAAMA,EAAMxH,OAAS,GACRkG,EAAKlG,QAC3BkG,EAAKszO,GAAUv4O,EACRM,MA2MT42O,EAAYx1O,UAAUq0I,OAAS,SAAUttI,EAAM04D,EAAc8zI,GAE3D,KAAK,EAAAu9B,EAAA,IAAa/pO,GAChB,MAAM,IAAI3H,UAAU,4BAItB,IAAI03O,EAAY/vO,EAAKskN,UAAUriN,KAAI,SAAU1K,GAC3C,OAAOd,MAAMC,QAAQa,IAA2B,IAAjBA,EAAMjB,OAAeiB,EAAM,GAAKA,KAKjE,OAAOs2O,EAFCrhC,EAAO30M,KAAKiiB,QAAUjiB,KAEZk4O,EAAWr3K,IAuC/B+1K,EAAYx1O,UAAUqgD,QAAU,SAAUt5C,EAAMwsM,GAC9C,IAAIx+K,EAAIw+K,EAAO30M,KAAKiiB,QAAUjiB,KAG9B,OAFAm2B,EAAE0gN,MD9RC,SAAiB/wO,EAAOi3H,GAC7B,IACIj3C,EADAqyJ,EAAYpwO,EAAQjC,GAGxB,SAASkqB,EAAQzxB,GACf,OAAOA,EAAI0O,QAAO,SAAUO,EAAMC,GAChC,OAAOD,EAAOC,KAIlB,IAAK7O,MAAMC,QAAQiH,KAAWlH,MAAMC,QAAQk+H,GAC1C,MAAM,IAAIv8H,UAAU,kBAGtB,GAAqB,IAAjBu8H,EAAMt+H,OACR,MAAM,IAAI+2O,EAAe,EAAGxlN,EAAQ2lN,EAAU7vO,IAAS,MAKzD,IAFA,IAAIsyO,EAAY,EAEPC,EAAY,EAAGA,EAAYt7G,EAAMt+H,OAAQ45O,IAChDD,GAAar7G,EAAMs7G,GAGrB,GAAIF,EAAU15O,SAAW25O,EACvB,MAAM,IAAI5C,EAAexlN,EAAQ+sG,GAAQ/sG,EAAQ2lN,EAAU7vO,IAAS,MAGtE,IACEggF,EAmBJ,SAAkBhgF,EAAOi3H,GAKvB,IAHA,IACIu7G,EADAC,EAAWzyO,EAGNuyO,EAAYt7G,EAAMt+H,OAAS,EAAG45O,EAAY,EAAGA,IAAa,CACjE,IAAIlwO,EAAO40H,EAAMs7G,GACjBC,EAAY,GAIZ,IAFA,IAAI75O,EAAS85O,EAAS95O,OAAS0J,EAEtBzJ,EAAI,EAAGA,EAAID,EAAQC,IAC1B45O,EAAUn1O,KAAKo1O,EAASl0O,MAAM3F,EAAIyJ,GAAOzJ,EAAI,GAAKyJ,IAIpDowO,EAAWD,EAGb,OAAOC,EAtCMC,CAASL,EAAWp7G,GAC/B,MAAO3mG,GACP,GAAIA,aAAao/M,EACf,MAAM,IAAIA,EAAexlN,EAAQ+sG,GAAQ/sG,EAAQ2lN,EAAU7vO,IAAS,MAGtE,MAAMswB,EAGR,OAAO0vD,ECwPKrkC,CAAQtrB,EAAE0gN,MAAO1uO,GAC3BguB,EAAE2gN,MAAQ3uO,EAAK9D,MAAM,GACd8xB,GA4CTygN,EAAYx1O,UAAU6gB,MAAQ,WAM5B,OALQ,IAAI20N,EAAY,CACtBjyO,KAAM,EAAM3E,KAAK62O,OACjB1uO,KAAM,EAAMnI,KAAK82O,OACjBxC,SAAUt0O,KAAK+2O,aAWnBH,EAAYx1O,UAAU+G,KAAO,WAC3B,OAAOnI,KAAK82O,MAAMzyO,MAAM,IAc1BuyO,EAAYx1O,UAAUgJ,IAAM,SAAUssF,GAEpC,IAAI+hJ,EAAKz4O,KAcL2E,EAZU,SAASokI,EAAQrpI,EAAOuG,GACpC,OAAI,EAAAisO,EAAA,IAAQxyO,GACHA,EAAM0K,KAAI,SAAU45H,EAAOtlI,GAChC,OAAOqqI,EAAQ/E,EAAO/9H,EAAMqE,OAAO5L,OAG9Bg4F,EAASh3F,EAAOuG,EAAOwyO,GAMvB1vG,CAAQ/oI,KAAK62O,MAAO,IAE/B,OAAO,IAAID,EAAYjyO,OADWtE,IAAnBL,KAAK+2O,UAA0BT,EAAiB3xO,EAAM,WAAUtE,IAYjFu2O,EAAYx1O,UAAU4K,QAAU,SAAU0qF,GAExC,IAAI+hJ,EAAKz4O,MAEK,SAAS+oI,EAAQrpI,EAAOuG,IAChC,EAAAisO,EAAA,IAAQxyO,GACVA,EAAMsM,SAAQ,SAAUg4H,EAAOtlI,GAC7BqqI,EAAQ/E,EAAO/9H,EAAMqE,OAAO5L,OAG9Bg4F,EAASh3F,EAAOuG,EAAOwyO,GAI3B1vG,CAAQ/oI,KAAK62O,MAAO,KAStBD,EAAYx1O,UAAUiuI,QAAU,WAC9B,OAAO,EAAMrvI,KAAK62O,QASpBD,EAAYx1O,UAAUqrN,QAAU,WAC9B,OAAOzsN,KAAK62O,OAadD,EAAYx1O,UAAU06B,OAAS,SAAUm7E,GACvC,OAAO,EAAOj3G,KAAK62O,MAAO5/H,IAS5B2/H,EAAYx1O,UAAUgD,SAAW,WAC/B,OAAO,EAAOpE,KAAK62O,QASrBD,EAAYx1O,UAAUm0G,OAAS,WAC7B,MAAO,CACL69H,OAAQ,cACRzuO,KAAM3E,KAAK62O,MACX1uO,KAAMnI,KAAK82O,MACXxC,SAAUt0O,KAAK+2O,YAanBH,EAAYx1O,UAAUs3O,SAAW,SAAUn0N,GAEzC,GAAIA,GAOF,IALI,EAAA2tN,EAAA,IAAY3tN,KACdA,EAAIA,EAAE8zM,cAIH,EAAA6Z,EAAA,IAAS3tN,MAAO,OAAUA,GAC7B,MAAM,IAAI/jB,UAAU,kDAItB+jB,EAAI,EAaN,IAVA,IAAIo0N,EAASp0N,EAAI,EAAIA,EAAI,EACrBq0N,EAAOr0N,EAAI,GAAKA,EAAI,EAEpBkgE,EAAOzkF,KAAK82O,MAAM,GAClBpyJ,EAAU1kF,KAAK82O,MAAM,GAErB3yO,EAAI+B,KAAKM,IAAIi+E,EAAOm0J,EAAMl0J,EAAUi0J,GAEpCh0O,EAAO,GAEFjG,EAAI,EAAGA,EAAIyF,EAAGzF,IACrBiG,EAAKjG,GAAKsB,KAAK62O,MAAMn4O,EAAIk6O,GAAMl6O,EAAIi6O,GAIrC,OAAO,IAAI/B,EAAY,CACrBjyO,KAAMA,EACNwD,KAAM,CAAChE,GACPmwO,SAAUt0O,KAAK+2O,aAiBnBH,EAAY8B,SAAW,SAAUvwO,EAAMzI,EAAO6kB,EAAGs8C,GAC/C,KAAK,EAAAqxK,EAAA,IAAQ/pO,GACX,MAAM,IAAI3H,UAAU,kCAGtB,GAAoB,IAAhB2H,EAAK1J,OACP,MAAM,IAAIoH,MAAM,4CAmBlB,GAfAsC,EAAOA,EAAKiC,KAAI,SAAUC,GAQxB,IANI,EAAA6nO,EAAA,IAAY7nO,KAEdA,EAAIA,EAAEguN,cAIH,EAAA6Z,EAAA,IAAS7nO,MAAO,OAAUA,IAAMA,EAAI,EACvC,MAAM,IAAIxE,MAAM,yCAGlB,OAAOwE,KAGLka,GAOF,IALI,EAAA2tN,EAAA,IAAY3tN,KACdA,EAAIA,EAAE8zM,cAIH,EAAA6Z,EAAA,IAAS3tN,MAAO,OAAUA,GAC7B,MAAM,IAAI/jB,UAAU,kDAItB+jB,EAAI,EAGN,IAQIs0N,EARAF,EAASp0N,EAAI,EAAIA,EAAI,EACrBq0N,EAAOr0N,EAAI,GAAKA,EAAI,EAEpBkgE,EAAOt8E,EAAK,GACZu8E,EAAUv8E,EAAK,GAEfhE,EAAI+B,KAAKM,IAAIi+E,EAAOm0J,EAAMl0J,EAAUi0J,GAKxC,IAAI,EAAAzG,EAAA,IAAQxyO,GAAQ,CAElB,GAAIA,EAAMjB,SAAW0F,EAEnB,MAAM,IAAI0B,MAAM,8BAIlBgzO,EAAS,SAAgBn6O,GAEvB,OAAOgB,EAAMhB,SAEV,IAAI,EAAAwzO,EAAA,IAASxyO,GAAQ,CAE1B,IAAIgyL,EAAKhyL,EAAMyI,OAEf,GAAkB,IAAdupL,EAAGjzL,QAAgBizL,EAAG,KAAOvtL,EAE/B,MAAM,IAAI0B,MAAM,yBAIlBgzO,EAAS,SAAgBn6O,GAEvB,OAAOgB,EAAMgC,IAAI,CAAChD,UAIpBm6O,EAAS,WAEP,OAAOn5O,GAKNmhE,IAEHA,GAAe,EAAAqxK,EAAA,IAAY2G,EAAO,IAAMA,EAAO,GAAGjkM,IAAI,GACpD,GAIJ,IAAIjwC,EAAO,GAEX,GAAIwD,EAAK1J,OAAS,EAAG,CAEnBkG,EAAO,EAAOA,EAAMwD,EAAM04D,GAE1B,IAAK,IAAI9zD,EAAI,EAAGA,EAAI5I,EAAG4I,IACrBpI,EAAKoI,EAAI6rO,GAAM7rO,EAAI4rO,GAAUE,EAAO9rO,GAKxC,OAAO,IAAI6pO,EAAY,CACrBjyO,KAAMA,EACNwD,KAAM,CAACs8E,EAAMC,MAajBkyJ,EAAY3C,SAAW,SAAUttM,GAC/B,OAAO,IAAIiwM,EAAYjwM,IAazBiwM,EAAYx1O,UAAU03O,SAAW,SAAUp6O,EAAGoM,GAE5C,MAAK,EAAAonO,EAAA,IAASxzO,KAAO,OAAUA,KAAO,EAAAwzO,EAAA,IAASpnO,KAAO,OAAUA,IAC9D,MAAM,IAAIjF,MAAM,uCAIlB,GAA0B,IAAtB7F,KAAK82O,MAAMr4O,OACb,MAAM,IAAIoH,MAAM,4CAUlB,OANAkwO,EAAcr3O,EAAGsB,KAAK82O,MAAM,IAC5Bf,EAAcjrO,EAAG9K,KAAK82O,MAAM,IAE5BF,EAAYmC,UAAUr6O,EAAGoM,EAAG9K,KAAK62O,OAG1B72O,MAWT42O,EAAYmC,UAAY,SAAUr6O,EAAGoM,EAAGnG,GAEtC,IAAI0jJ,EAAK1jJ,EAAKjG,GACdiG,EAAKjG,GAAKiG,EAAKmG,GACfnG,EAAKmG,GAAKu9I,GAyBLuuF,IACN,CACDnD,SAAS,I,mBCv3BPuF,EAAgB,WAIlB,OADAA,EAAgB,WACT,KAUEC,EAA6B,EAAQ,QAP7B,CAAC,aAAc,WAAY,eAAgB,cAOS,SAAqBlF,GAC1F,IAAIH,EAAYG,EAAKH,UACjBphO,EAAUuhO,EAAKvhO,QACfokO,EAAc7C,EAAK6C,YACnB5a,EAAW+X,EAAK/X,SAIhBkd,EAAQF,IA6SZ,OAxSAE,EAAMjM,MAAQ,CAAC,CACb3oO,KAAM,SACNC,KAAM2tO,EAAA,IACL,CACD5tO,KAAM,UACNC,KAAM2tO,EAAA,IACL,CACD5tO,KAAM,YACNC,KAAM2tO,EAAA,IACL,CACD5tO,KAAM,WACNC,KAAM2tO,EAAA,IACL,CACD5tO,KAAM,OACNC,KAAM2tO,EAAA,IACL,CACD5tO,KAAM,SACNC,KAAM2tO,EAAA,IACL,CACD5tO,KAAM,QACNC,KAAM2tO,EAAA,IACL,CACD5tO,KAAM,QACNC,KAAM2tO,EAAA,IACL,CACD5tO,KAAM,SACNC,KAAM2tO,EAAA,IACL,CACD5tO,KAAM,cACNC,KAAM2tO,EAAA,IACL,CACD5tO,KAAM,eACNC,KAAM2tO,EAAA,IACL,CACD5tO,KAAM,QACNC,KAAM2tO,EAAA,IACL,CACD5tO,KAAM,QACNC,KAAM2tO,EAAA,IACL,CACD5tO,KAAM,UACNC,KAAM2tO,EAAA,IACL,CACD5tO,KAAM,YACNC,KAAM2tO,EAAA,IACL,CACD5tO,KAAM,OACNC,KAAM2tO,EAAA,IACL,CACD5tO,KAAM,WACNC,KAAM2tO,EAAA,IACL,CACD5tO,KAAM,OACNC,KAAM2tO,EAAA,IACL,CACD5tO,KAAM,SACNC,KAAM2tO,EAAA,IACL,CACD5tO,KAAM,OACNC,KAAM2tO,EAAA,IACL,CACD5tO,KAAM,YACNC,KAAM2tO,EAAA,IACL,CACD5tO,KAAM,eACNC,KAAM2tO,EAAA,IACL,CACD5tO,KAAM,YACNC,KAAM2tO,EAAA,IACL,CACD5tO,KAAM,iBACNC,KAAM2tO,EAAA,IACL,CACD5tO,KAAM,YACNC,KAAM2tO,EAAA,IACL,CACD5tO,KAAM,kBACNC,KAAM2tO,EAAA,IACL,CACD5tO,KAAM,eACNC,KAAM2tO,EAAA,IACL,CACD5tO,KAAM,eACNC,KAAM2tO,EAAA,IACL,CACD5tO,KAAM,yBACNC,KAAM2tO,EAAA,IACL,CACD5tO,KAAM,YACNC,KAAM2tO,EAAA,IACL,CACD5tO,KAAM,OACNC,KAAM2tO,EAAA,IACL,CACD5tO,KAAM,aACNC,KAAM2tO,EAAA,IACL,CACD5tO,KAAM,eACNC,KAAM2tO,EAAA,IACL,CACD5tO,KAAM,kBACNC,KAAM2tO,EAAA,IACL,CACD5tO,KAAM,YACNC,KAAM2tO,EAAA,IACL,CACD5tO,KAAM,aACNC,KAAM2tO,EAAA,IACL,CACD5tO,KAAM,SACNC,KAAM2tO,EAAA,KAGRgH,EAAMC,YAAc,CAAC,CACnBx2O,KAAM,SACNy2O,GAAI,YACJrP,QAAS,SAAiBtjO,GAMxB,GALKmtO,GACHyF,EAAiB5yO,IAIf,QAAOA,GAAK,GACd,MAAM,IAAIjG,UAAU,uFAA8FiG,EAA9F,yDAGtB,OAAO,IAAImtO,EAAUntO,KAEtB,CACD9D,KAAM,SACNy2O,GAAI,UACJrP,QAAS,SAAiBtjO,GAKxB,OAJK+L,GACH8mO,EAAe7yO,GAGV,IAAI+L,EAAQ/L,EAAG,KAEvB,CACD9D,KAAM,SACNy2O,GAAI,SACJrP,QAAS,SAAiBtjO,GACxB,OAAOA,EAAI,KAEZ,CACD9D,KAAM,YACNy2O,GAAI,UACJrP,QAAS,SAAiBtjO,GAKxB,OAJK+L,GACH8mO,EAAe7yO,GAGV,IAAI+L,EAAQ/L,EAAE4xN,WAAY,KAElC,CACD11N,KAAM,WACNy2O,GAAI,YACJrP,QAAS,SAAiBtjO,GACxB,MAAM,IAAIjG,UAAU,+JAErB,CACDmC,KAAM,WACNy2O,GAAI,UACJrP,QAAS,SAAiBtjO,GAKxB,OAJK+L,GACH8mO,EAAe7yO,GAGV,IAAI+L,EAAQ/L,EAAEgmN,UAAW,KAEjC,CACD9pN,KAAM,SACNy2O,GAAI,WACJrP,QAAS,SAAiBtjO,GACnBu1N,GACHud,GAAgB9yO,GAGlB,IAAIpB,EAAI,IAAI22N,EAASv1N,GAErB,GAAIpB,EAAEonN,YAAchmN,EAClB,MAAM,IAAIjG,UAAU,mGAA0GiG,EAA1G,uDAGtB,OAAOpB,IAER,CAQD1C,KAAM,SACNy2O,GAAI,SACJrP,QAAS,SAAiBtjO,GACxB,IAAItC,EAAIkD,OAAOZ,GAEf,GAAI8E,MAAMpH,GACR,MAAM,IAAI0B,MAAM,mBAAqBY,EAAI,iBAG3C,OAAOtC,IAER,CACDxB,KAAM,SACNy2O,GAAI,YACJrP,QAAS,SAAiBtjO,GACnBmtO,GACHyF,EAAiB5yO,GAGnB,IACE,OAAO,IAAImtO,EAAUntO,GACrB,MAAOrG,GACP,MAAM,IAAIyF,MAAM,mBAAqBY,EAAI,qBAG5C,CACD9D,KAAM,SACNy2O,GAAI,WACJrP,QAAS,SAAiBtjO,GACnBu1N,GACHud,GAAgB9yO,GAGlB,IACE,OAAO,IAAIu1N,EAASv1N,GACpB,MAAOrG,GACP,MAAM,IAAIyF,MAAM,mBAAqBY,EAAI,oBAG5C,CACD9D,KAAM,SACNy2O,GAAI,UACJrP,QAAS,SAAiBtjO,GACnB+L,GACH8mO,EAAe7yO,GAGjB,IACE,OAAO,IAAI+L,EAAQ/L,GACnB,MAAOrG,GACP,MAAM,IAAIyF,MAAM,mBAAqBY,EAAI,mBAG5C,CACD9D,KAAM,UACNy2O,GAAI,SACJrP,QAAS,SAAiBtjO,GACxB,OAAQA,IAET,CACD9D,KAAM,UACNy2O,GAAI,YACJrP,QAAS,SAAiBtjO,GAKxB,OAJKmtO,GACHyF,EAAiB5yO,GAGZ,IAAImtO,GAAWntO,KAEvB,CACD9D,KAAM,UACNy2O,GAAI,WACJrP,QAAS,SAAiBtjO,GAKxB,OAJKu1N,GACHud,GAAgB9yO,GAGX,IAAIu1N,GAAUv1N,KAEtB,CACD9D,KAAM,UACNy2O,GAAI,SACJrP,QAAS,SAAiBtjO,GACxB,OAAOyF,OAAOzF,KAEf,CACD9D,KAAM,QACNy2O,GAAI,SACJrP,QAAS,SAAiBjkO,GAKxB,OAJK8wO,GAwBX,WACE,MAAM,IAAI/wO,MAAM,uEAxBV2zO,GAGK,IAAI5C,EAAY9wO,KAExB,CACDnD,KAAM,SACNy2O,GAAI,QACJrP,QAAS,SAAiB4H,GACxB,OAAOA,EAAOllB,aAGXysB,KAGT,SAASG,EAAiB5yO,GACxB,MAAM,IAAIZ,MAAM,wBAAwByE,OAAO7D,EAAG,qDAGpD,SAAS6yO,EAAe7yO,GACtB,MAAM,IAAIZ,MAAM,wBAAwByE,OAAO7D,EAAG,wDAOpD,SAAS8yO,GAAgB9yO,GACvB,MAAM,IAAIZ,MAAM,wBAAwByE,OAAO7D,EAAG,oDClW7C,SAASgzO,GAAY3zO,EAAO4wF,IAC7B,EAAAw7I,EAAA,IAASpsO,KACXA,EAAQA,EAAM2mN,WAGhB,IAAK,IAAI/tN,EAAI,EAAG23O,EAAKvwO,EAAMrH,OAAQC,EAAI23O,EAAI33O,IAAK,CAC9C,IAAIgB,EAAQoG,EAAMpH,GAEdE,MAAMC,QAAQa,GAChB+5O,GAAY/5O,EAAOg3F,GAEnBA,EAASh3F,IAiBR,SAAS2sI,GAAQvmI,EAAO4wF,EAAU+9I,GACvC,OAAI3uO,GAA8B,mBAAdA,EAAMsE,IAEjBtE,EAAMsE,KAAI,SAAU3D,GACzB,OAAO4lI,GAAQ5lI,EAAGiwF,EAAU+9I,MAGvB/9I,EAAS5wF,GC3DpB,IAAI,GAAO,YAEA4zO,GAAiC,EAAQ,GADjC,CAAC,UACoD,SAAU3F,GAgChF,OAAOmF,EA/BKnF,EAAKmF,OA+BJ,GAAM,CACjBrL,OAAQ,IAER+F,UAAW,SAAmBntO,GAC5B,OAAOA,EAAE8B,SAEXyzN,SAAU,SAAkBv1N,GAC1B,OAAe,IAARA,EAAEsG,GAAWvB,SAAS/E,EAAEtC,IAEjC,iBAAkB,SAAqBsC,GACrC,OAAO4lI,GAAQ5lI,EAAGzG,YC7CpB,GAAO,YAEA25O,GAAiC,EAAQ,GADjC,CAAC,UACoD,SAAU5F,GAgChF,OAAOmF,EA/BKnF,EAAKmF,OA+BJ,GAAM,CACjB,0CAA2C,WACzC,OAAO,GAET,oDAAqD,WACnD,OAAO,GAET,iBAAkB,SAAqBzyO,GACrC,OAAO4lI,GAAQ5lI,EAAGzG,Y,WCzCpB,GAAO,QAEA45O,GAA6B,EAAQ,GAD7B,CAAC,UACgD,SAAU7F,GAgC5E,OAAOmF,EA/BKnF,EAAKmF,OA+BJ,GAAM,CACjBrL,OAAQ,GAAAgM,YACRjG,UAAW,SAAmBntO,GAC5B,OAAOA,EAAE8E,SAEXywN,SAAU,SAAkBv1N,GAC1B,OAAO,GAET+L,QAAS,SAAiB/L,GACxB,OAAOA,EAAE8E,SAEXuuO,KAAM,SAAcrzO,GAClB,OAAOY,OAAOkE,MAAM9E,EAAE/G,QAExB,iBAAkB,SAAqB+G,GACrC,OAAO4lI,GAAQ5lI,EAAGY,OAAOkE,aC3CxB,SAAS,GAAY9E,EAAG+hB,EAAG2pB,GAEhC,GAAIA,QACF,OAAO1rC,EAAE0tN,GAAG3rM,GAId,GAAI/hB,EAAE0tN,GAAG3rM,GACP,OAAO,EAIT,GAAI/hB,EAAE8E,SAAWid,EAAEjd,QACjB,OAAO,EAIT,GAAI9E,EAAE+E,YAAcgd,EAAEhd,WAAY,CAEhC,IAAIpE,EAAOX,EAAEymN,MAAM1kM,GAAGyqB,MAEtB,GAAI7rC,EAAK4sN,SACP,OAAO,EAGP,IAAIttN,EAAMD,EAAElE,YAAYmE,IAAID,EAAEwsC,MAAOzqB,EAAEyqB,OACvC,OAAO7rC,EAAKuuN,IAAIjvN,EAAI8sN,MAAMrhL,IAK9B,OAAO,ECpCT,IAAI,GAAO,cAEA4nM,GAAmC,EAAQ,GADnC,CAAC,QAAS,WAC6C,SAAUhG,GAClF,IAAImF,EAAQnF,EAAKmF,MACbz9N,EAASs4N,EAAKt4N,OAUlB,OAAOy9N,EAAM,GAAM,CACjB,mBAAoB,SAAwBzyO,EAAG+hB,GAC7C,OAAO/hB,IAAM+hB,GAEf,iBAAkB,SAAsB/hB,EAAG+hB,GACzC,OAAO,QAAY/hB,EAAG+hB,EAAG/M,EAAO02B,UAElC,uBAAwB,SAA4B1rC,EAAG+hB,GACrD,OAAO/hB,EAAE0tN,GAAG3rM,IAAM,GAAe/hB,EAAG+hB,EAAG/M,EAAO02B,UAEhD,qBAAsB,SAA0B1rC,EAAG+hB,GACjD,OAAO/hB,EAAE+tN,OAAOhsM,IAElB,mBAAoB,SAAwB/hB,EAAG+hB,GAC7C,OCtBC,SAAuB/hB,EAAG+hB,EAAG2pB,GAClC,OAAO,QAAY1rC,EAAE4oN,GAAI7mM,EAAE6mM,GAAIl9K,KAAY,QAAY1rC,EAAE6oN,GAAI9mM,EAAE8mM,GAAIn9K,GDqBxD6nM,CAAcvzO,EAAG+hB,EAAG/M,EAAO02B,UAEpC,aAAc,SAAkB1rC,EAAG+hB,GACjC,IAAK/hB,EAAEwzO,UAAUzxN,GACf,MAAM,IAAI3iB,MAAM,4CAGlB,OAAO7F,KAAKyG,EAAE/G,MAAO8oB,EAAE9oB,aEnClBw6O,IFuC0B,EAAQ,GAAM,CAAC,QAAS,WAAW,SAAUvF,GAChF,IAAIuE,EAAQvE,EAAMuE,MACdz9N,EAASk5N,EAAMl5N,OACnB,OAAOy9N,EAAM,GAAM,CACjB,iBAAkB,SAAsBzyO,EAAG+hB,GACzC,OAAO,QAAY/hB,EAAG+hB,EAAG/M,EAAO02B,eE5CG,EAF9B,SACQ,CAAC,UACiD,SAAU4hM,GAC7E,IA2BIlG,GAASqL,EA3BDnF,EAAKmF,OA2BE,SAAU,CAC3B,GAAI,WACF,OAAO,GAETrL,OAAQ,SAAgBpnO,GACtB,OAAOA,GAETs6N,OAAQ,SAAgBt6N,GACtB,GAAU,QAANA,EAAa,OAAOwvD,IACxB,IAAI3qD,EAAMjE,OAAOZ,GAEjB,GAAI8E,MAAMD,GACR,MAAM,IAAI0jN,YAAY,WAAavoN,EAAI,wBAGzC,GAAI,CAAC,KAAM,KAAM,MAAMi2F,SAASj2F,EAAEsrB,UAAU,EAAG,IAAK,CAClD,GAAIzmB,EAAMpF,KAAK0xC,IAAI,EAAG,IAAM,EAC1B,MAAM,IAAIo3K,YAAY,WAAY1kN,OAAO7D,EAAG,sBAGpC,WAAN6E,IACFA,GAAO,IAAMA,EAAM,IAIvB,OAAOA,GAETsoO,UAAW,SAAmBntO,GAC5B,OAAOA,EAAE4xN,YAEX2D,SAAU,SAAkBv1N,GAC1B,OAAOA,EAAEgmN,WAEXqtB,KAAM,SAAcrzO,GAClB,MAAM,IAAIZ,MAAM,iDAElB,KAAQ,SAAeY,GACrB,OAAO,GAET,sBAAuB,SAAwB0zO,EAAMC,GACnD,OAAOD,EAAK9hB,SAAS+hB,IAEvB,iBAAkB,SAAqB3zO,GACrC,OAAO4lI,GAAQ5lI,EAAGzG,SAYtB,OAJA6tO,EAAOoG,SAAW,SAAUttM,GAC1B,OAAO7mB,WAAW6mB,EAAKjnC,QAGlBmuO,MCtFLxlO,GAAK,SACLC,GAAK,iBACF,SAAS+xO,GAAUtzO,GACxB,OAAOb,KAAK+sC,IAAIlsC,GAGX,SAASuzO,GAAUvzO,EAAGC,GAC3B,OAAOD,EAAIC,EAON,SAASuzO,GAAexzO,EAAGC,GAChC,OAAOD,EAAIC,EAON,SAASwzO,GAAiB/zO,GAC/B,OAAQA,EAlBV4zO,GAAUp+M,UAAY5zB,GAItBiyO,GAAUr+M,UAAY3zB,GAQtBiyO,GAAet+M,UAAY3zB,GAQ3BkyO,GAAiBv+M,UAAY5zB,GCvB7B,ICCI,GAAO,QAEAoyO,GAA6B,EAAQ,GAD7B,CAAC,QAAS,cACuC,SAAU1G,GAC5E,IAAImF,EAAQnF,EAAKmF,MACbtrO,EAAYmmO,EAAKnmO,UAkCrB,OAAOsrO,EAAM,GAAM,CACjB,+CAAgD,SAA4CzqK,EAAKl1B,EAAKm9C,GACpG,IAAK9oF,EAAU2rC,GACb,MAAM,IAAI/4C,UAAU,yCAGtB,IAAI2H,EAAOvJ,MAAMC,QAAQ4vE,GAAOknK,EAAUlnK,GAAOA,EAAItmE,OAErD,GAAIoxC,EAAM,GAAKA,GAAOpxC,EAAK1J,OACzB,MAAM,IAAIi3O,EAAWn8L,EAAKpxC,EAAK1J,QAGjC,OAAI,EAAAyzO,EAAA,IAASzjK,GACJA,EAAInsE,OAAOo4O,GAAOjsK,EAAIg+I,UAAWlzK,EAAKm9C,IAEtCgkJ,GAAOjsK,EAAKl1B,EAAKm9C,SAchC,SAASgkJ,GAAOjsK,EAAKl1B,EAAKm9C,GACxB,IAAIh4F,EAAGoO,EAAK6tO,EAEZ,GAAIphM,GAAO,EAAG,CACZ,GAAK36C,MAAMC,QAAQ4vE,EAAI,IAEhB,CAIL,IAHAksK,EA2BN,SAAiBlsK,GACf,IAEI/vE,EAAGoM,EAFH8vO,EAAInsK,EAAIhwE,OACRo8O,EAAIpsK,EAAI,GAAGhwE,OAEXqO,EAAM,GAEV,IAAKhC,EAAI,EAAGA,EAAI+vO,EAAG/vO,IAAK,CACtB,IAAI+zE,EAAM,GAEV,IAAKngF,EAAI,EAAGA,EAAIk8O,EAAGl8O,IACjBmgF,EAAI17E,KAAKsrE,EAAI/vE,GAAGoM,IAGlBgC,EAAI3J,KAAK07E,GAGX,OAAO/xE,EA3CI,CAAQ2hE,GACf3hE,EAAM,GAEDpO,EAAI,EAAGA,EAAIi8O,EAAKl8O,OAAQC,IAC3BoO,EAAIpO,GAAKg8O,GAAOC,EAAKj8O,GAAI66C,EAAM,EAAGm9C,GAGpC,OAAO5pF,EATP,OAAO4pF,EAASjoB,GAclB,IAFA3hE,EAAM,GAEDpO,EAAI,EAAGA,EAAI+vE,EAAIhwE,OAAQC,IAC1BoO,EAAIpO,GAAKg8O,GAAOjsK,EAAI/vE,GAAI66C,EAAM,EAAGm9C,GAGnC,OAAO5pF,EC3FX,ICCWguO,GAAsC,EAFtC,iBACQ,CAAC,UACyD,SAAU/G,GAerF,OAAOmF,EAdKnF,EAAKmF,OAcJ,iBAAkB,CAC7B,iBAAkBqB,GAClB,mBAAoB,SAAwB9zO,EAAG+hB,GAC7C,OAAO/hB,EAAEmuC,IAAIpsB,IAEf,uBAAwB,SAA4B/hB,EAAG+hB,GACrD,OAAO/hB,EAAE+sN,MAAMhrM,IAEjB,qBAAsB,SAA0B/hB,EAAG+hB,GACjD,OAAO/hB,EAAEmuC,IAAIpsB,IAEf,gDAAiD,SAA4C/hB,EAAG+hB,GAC9F,IAAIJ,EAAMI,EAAEvG,QAEZ,OADAmG,EAAI1oB,MAAsB,OAAd0oB,EAAI1oB,MAAiB0oB,EAAI2yN,WAAWt0O,GAAKzG,KAAKooB,EAAI1oB,MAAO+G,GAC9D2hB,GAET,gDAAiD,SAA4C3hB,EAAG+hB,GAC9F,IAAIJ,EAAM3hB,EAAEwb,QAEZ,OADAmG,EAAI1oB,MAAsB,OAAd0oB,EAAI1oB,MAAiB0oB,EAAI2yN,WAAWvyN,GAAKxoB,KAAKooB,EAAI1oB,MAAO8oB,GAC9DJ,GAET,aAAc,SAAkB3hB,EAAG+hB,GACjC,OAAO/hB,EAAEu0O,SAASxyN,SCtCxB,SAASyyN,GAAct5O,GACrB,IAKIo7B,EALW,CACbm+M,EAAG,KACHC,EAAG,KACHC,GAAI,MAEgBz5O,GACtB,OAAO,SAAUwC,GACf,GAAIA,EAAI+B,KAAK0xC,IAAI,EAAG,IAAM,GAAKzzC,GAAK+B,KAAK0xC,IAAI,EAAG,IAC9C,MAAM,IAAI/xC,MAAM,0CAGlB,KAAK,OAAU1B,GACb,MAAM,IAAI0B,MAAM,4BAOlB,OAJI1B,EAAI,IACNA,GAAQ+B,KAAK0xC,IAAI,EAAG,KAGf,GAAGttC,OAAOyyB,GAAQzyB,OAAOnG,EAAEC,SAASzC,KC0IjCuE,KAAK0xC,IAAI,EAAG,IDtI1B,IAAI,GAAe,CAAC,SACb,SAASyjM,GAA2B/2O,EAAM3C,GAC/C,OAAO,EAAQ2C,EAAM,IAAc,SAAUyvO,GAE3C,OAAOmF,EADKnF,EAAKmF,OACJ50O,EAAM,CACjBupO,OAAQoN,GAAct5O,QEVL05O,GAA2B,MAAO,G,gBClBzD,ICAWC,GAAgC,EAFhC,WACQ,CAAC,QAAS,aAC0C,SAAUvH,GAC/E,IAAImF,EAAQnF,EAAKmF,MACbld,EAAW+X,EAAK/X,SA2BpB,OAAOkd,EAAM,WAAY,CACvBrL,OAAQ,SAAgBpnO,GACtB,IAAK+E,SAAS/E,IAAM8E,MAAM9E,GACxB,MAAM,IAAIZ,MAAMY,EAAI,wCAGtB,OAAO,IAAIu1N,EAASv1N,IAEtBs6N,OAAQ,SAAgBt6N,GACtB,OAAO,IAAIu1N,EAASv1N,IAEtB,iBAAkB,SAAsB6zN,EAAWp9H,GACjD,OAAO,IAAI8+H,EAAS1B,EAAWp9H,IAEjC,KAAQ,SAAez2F,GACrB,OAAO,IAAIu1N,EAAS,IAEtB4X,UAAW,SAAmBntO,GAC5B,OAAO,IAAIu1N,EAASv1N,EAAErC,aAExB43N,SAAU,SAAkBv1N,GAC1B,OAAOA,GAETzF,OAAQ,SAAgByF,GACtB,OAAO,IAAIu1N,EAASv1N,IAEtB,iBAAkB,SAAqBA,GACrC,OAAO4lI,GAAQ5lI,EAAGzG,YCzDpB,GAAO,aAEAu7O,GAAkC,EAAQ,GADlC,CAAC,UACqD,SAAUxH,GA0BjF,OAAOmF,EAzBKnF,EAAKmF,OAyBJ,GAAM,CACjBrL,OAAQ2M,GACRhoO,QAAS,SAAiB/L,GACxB,OAAOA,EAAE+mD,OAEXomL,UAAW,SAAmBntO,GAC5B,OAAOA,EAAE+mD,OAEXwuK,SAAU,SAAkBv1N,GAC1B,OAAOA,EAAE+mD,OAEXssL,KAAM,SAAcrzO,GAClB,IAAI2hB,EAAM3hB,EAAEwb,QAEZ,OADAmG,EAAI1oB,MAAQM,KAAKyG,EAAE/G,OACZ0oB,GAET,iBAAkB,SAAqB3hB,GAErC,OAAO4lI,GAAQ5lI,EAAGzG,MAAM,SC/C1B,GAAO,YAEAw7O,GAAiC,EAAQ,GADjC,CAAC,UACoD,SAAUzH,GAehF,OAAOmF,EAdKnF,EAAKmF,OAcJ,GAAM,CACjB,iBAAkBoB,GAClB,mBAAoB,SAAwB7zO,EAAG+hB,GAC7C,OAAO/hB,EAAE+d,IAAIgE,IAEf,uBAAwB,SAA4B/hB,EAAG+hB,GACrD,OAAO/hB,EAAE0oN,KAAK3mM,IAEhB,qBAAsB,SAA0B/hB,EAAG+hB,GACjD,OAAO/hB,EAAE+d,IAAIgE,IAEf,aAAc,SAAkB/hB,EAAG+hB,GACjC,GAAgB,OAAZ/hB,EAAE/G,YAA8BW,IAAZoG,EAAE/G,MAAqB,MAAM,IAAImG,MAAM,oDAC/D,GAAgB,OAAZ2iB,EAAE9oB,YAA8BW,IAAZmoB,EAAE9oB,MAAqB,MAAM,IAAImG,MAAM,oDAC/D,IAAKY,EAAEwzO,UAAUzxN,GAAI,MAAM,IAAI3iB,MAAM,sBACrC,IAAIuiB,EAAM3hB,EAAEwb,QAGZ,OAFAmG,EAAI1oB,MAAQM,KAAKooB,EAAI1oB,MAAO8oB,EAAE9oB,OAC9B0oB,EAAIqzN,WAAY,EACTrzN,QCjCFszN,GAA4B,EAF5B,OACQ,CAAC,SAAU,QAAS,YAC4B,SAAU3H,GAC3E,IAAIt4N,EAASs4N,EAAKt4N,OACdy9N,EAAQnF,EAAKmF,MACb1mO,EAAUuhO,EAAKvhO,QA0BnB,OAAO0mO,EAAM,OAAQ,CACnBrL,OAAQ8N,EACRnpO,QAAS,SAAiB/L,GACxB,OAAOA,EAAEsC,QAEX6qO,UAAW,SAAmBntO,GAC5B,OAAKA,EAAE2vN,cAAgB36M,EAAOm2N,YACrBnrO,EAAEsC,OAGF4yO,EAAYl1O,EAAE4xN,aAGzB,iBAAkB,SAAqB5xN,GAErC,OAAO4lI,GAAQ5lI,EAAGzG,MAAM,IAE1B85O,KAAM,SAAcrzO,GAElB,OAAOA,EAAEmxC,IAAI,OAUjB,SAAS+jM,EAAYl1O,GACnB,OAAI8E,MAAM9E,GACDwvD,IACExvD,GAAK,GAAKgV,EAAOm2N,YACnB1rO,KAAK6C,KAAKtC,GAEV,IAAI+L,EAAQ/L,EAAG,GAAGsC,WClE3B,GAAO,OAEA6yO,GAA4B,EAAQ,GAD5B,CAAC,UAC+C,SAAU7H,GA4B3E,OAAOmF,EA3BKnF,EAAKmF,OA2BJ,GAAM,CACjBrL,OAAQ,SAAgBpnO,GACtB,OAAOA,GAETmtO,UAAW,SAAmBntO,GAC5B,OAAOA,GAET+L,QAAS,SAAiB/L,GACxB,OAAOA,EAAEo1O,aAEX,iBAAkB,SAAqBp1O,GACrC,OAAO4lI,GAAQ5lI,EAAGzG,YCzCpB,GAAO,OAEA87O,GAA4B,EAAQ,GAD5B,CAAC,QAAS,QAAS,cAC6B,SAAU/H,GAC3E,IAAImF,EAAQnF,EAAKmF,MACb3tO,EAAQwoO,EAAKxoO,MACbwwO,EAAYhI,EAAKgI,UA2BrB,OAAO7C,EAAM,GAAM,CACjB,iBAAkB8C,EAClB,MAAO,SAAW/7O,GAChB,OAAO+7O,EAAM/7O,MAUjB,SAAS+7O,EAAMz2O,GAIb,GAAY,KAHZA,EAASwC,EAAQxC,EAAOknN,YACPhuN,OAGf,MAAM,IAAIoH,MAAM,2CAOlB,IAJA,IAAIk1E,EAAQ,GACR3pB,EAAO,GACP1qD,EAAM,EAEDhI,EAAI,EAAGA,EAAI6G,EAAO9G,OAAQC,IAAK,CACtC,IAAIgB,EAAQ6F,EAAO7G,GAEnB,GAAIq9O,EAAUr8O,IAAU6L,EAAM7L,GAC5B,MAAM,IAAImG,MAAM,2DAGZnG,KAASq7E,IACbA,EAAMr7E,GAAS,GAGjBq7E,EAAMr7E,KAEFq7E,EAAMr7E,KAAWgH,EACnB0qD,EAAKjuD,KAAKzD,GACDq7E,EAAMr7E,GAASgH,IACxBA,EAAMq0E,EAAMr7E,GACZ0xD,EAAO,CAAC1xD,IAIZ,OAAO0xD,MC1DYiqL,GAA2B,MAAO,GClBzD,ICKWY,GAAyC,EAFzC,eACQ,CAAC,QAAS,cAAe,WACoC,SAAUlI,GACxF,IAAImF,EAAQnF,EAAKmF,MACbgD,EAAcnI,EAAKmI,YACnB/H,EAASJ,EAAKI,OAOlB,SAASgI,EAAax3O,EAAM2vO,GAC1B,KAAMt0O,gBAAgBm8O,GACpB,MAAM,IAAIntB,YAAY,oDAGxB,GAAIslB,KAAa,EAAApC,EAAA,IAASoC,GACxB,MAAM,IAAIzuO,MAAM,qBAAuByuO,GAGzC,IAAI,EAAApC,EAAA,IAASvtO,IA0Bf,SAA2BgtO,EAAQv5F,EAAQk8F,GAErB,iBAAhBl8F,EAAO30H,MAETkuN,EAAOyK,QAAUhkG,EAAOgkG,QAAU,EAAMhkG,EAAOgkG,cAAW/7O,EAC1DsxO,EAAOn4B,OAAS,EAAMphE,EAAOohE,QAC7Bm4B,EAAO0K,KAAO,EAAMjkG,EAAOikG,MAC3B1K,EAAOmF,MAAQ,EAAM1+F,EAAO0+F,OAC5BnF,EAAOoF,UAAYzC,GAAYl8F,EAAO2+F,WAGtCuF,EAAiB3K,EAAQv5F,EAAOq0E,UAAW6nB,GAAYl8F,EAAO2+F,WAnC9DwF,CAAkBv8O,KAAM2E,EAAM2vO,QACzB,GAAI3vO,IAAQ,EAAAutO,EAAA,IAAQvtO,EAAKsB,SAAU,EAAAisO,EAAA,IAAQvtO,EAAK63O,OAAQ,EAAAtK,EAAA,IAAQvtO,EAAKwD,MAE1EnI,KAAKo8O,QAAUz3O,EAAKY,OACpBvF,KAAKw5M,OAAS70M,EAAKsB,MACnBjG,KAAKq8O,KAAO13O,EAAK63O,IACjBx8O,KAAK82O,MAAQnyO,EAAKwD,KAClBnI,KAAK+2O,UAAYzC,GAAY3vO,EAAK2vO,cAC7B,IAAI,EAAApC,EAAA,IAAQvtO,GAEjB23O,EAAiBt8O,KAAM2E,EAAM2vO,OACxB,IAAI3vO,EAET,MAAM,IAAInE,UAAU,8BAA+B,QAAOmE,GAAQ,KAGlE3E,KAAKo8O,QAAU,GACfp8O,KAAKw5M,OAAS,GACdx5M,KAAKq8O,KAAO,CAAC,GACbr8O,KAAK82O,MAAQ,CAAC,EAAG,GACjB92O,KAAK+2O,UAAYzC,GAmBrB,SAASgI,EAAiB3K,EAAQhtO,EAAM2vO,GAEtC3C,EAAOyK,QAAU,GACjBzK,EAAOn4B,OAAS,GAChBm4B,EAAO0K,KAAO,GACd1K,EAAOoF,UAAYzC,EAEnB,IAAI7vJ,EAAO9/E,EAAKlG,OACZimF,EAAU,EAEVyvI,EAAK+nB,EAEL1tK,EAAO,EAUX,IARI,EAAA0jK,EAAA,IAASoC,KAEXngB,EAAK+kB,EAAM/hH,KAAK+kH,EAAa,CAAC5H,EAAUA,KAAc4H,EAEtD1tK,EAAO0qK,EAAMnP,QAAQ,EAAGuK,IAItB7vJ,EAAO,EAAG,CAEZ,IAAI35E,EAAI,EAER,EAAG,CAED6mO,EAAO0K,KAAKl5O,KAAKwuO,EAAOn4B,OAAO/6M,QAG/B,IAAK,IAAIC,EAAI,EAAGA,EAAI+lF,EAAM/lF,IAAK,CAE7B,IAAI2gB,EAAM1a,EAAKjG,GAEf,IAAI,EAAAwzO,EAAA,IAAQ7yN,IAOV,GALU,IAANvU,GAAW45E,EAAUrlE,EAAI5gB,SAC3BimF,EAAUrlE,EAAI5gB,QAIZqM,EAAIuU,EAAI5gB,OAAQ,CAElB,IAAIwhB,EAAIZ,EAAIvU,GAEPqpN,EAAGl0M,EAAGuuD,KAETmjK,EAAOyK,QAAQj5O,KAAK8c,GAGpB0xN,EAAOn4B,OAAOr2M,KAAKzE,UAKb,IAANoM,GAAW45E,EAAU,IACvBA,EAAU,GAIPyvI,EAAG90M,EAAKmvD,KAEXmjK,EAAOyK,QAAQj5O,KAAKkc,GAGpBsyN,EAAOn4B,OAAOr2M,KAAKzE,IAMzBoM,UACOA,EAAI45E,GAIfitJ,EAAO0K,KAAKl5O,KAAKwuO,EAAOn4B,OAAO/6M,QAG/BkzO,EAAOmF,MAAQ,CAACryJ,EAAMC,GA6HxB,SAAS+3J,EAAW9K,EAAQpmH,GAE1B,KAAK,EAAA2mH,EAAA,IAAQ3mH,GACX,MAAM,IAAI/qH,UAAU,iBAKtB,GAFe+qH,EAAI0rH,WAIjB,OAAOtF,EAAOjwO,IAAI6pH,EAAI/kH,OAIxB,IAOI9H,EAAG23O,EAAI9xN,EAAGm4N,EAPVv0O,EAAOojH,EAAIpjH,OAEf,GAAIA,EAAK1J,SAAWkzO,EAAOmF,MAAMr4O,OAC/B,MAAM,IAAI+2O,EAAertO,EAAK1J,OAAQkzO,EAAOmF,MAAMr4O,QAMrD,IAAI+H,EAAM+kH,EAAI/kH,MACVE,EAAM6kH,EAAI7kH,MAEd,IAAKhI,EAAI,EAAG23O,EAAK1E,EAAOmF,MAAMr4O,OAAQC,EAAI23O,EAAI33O,IAC5Cq3O,EAAcvvO,EAAI9H,GAAIizO,EAAOmF,MAAMp4O,IACnCq3O,EAAcrvO,EAAIhI,GAAIizO,EAAOmF,MAAMp4O,IAIrC,IAAIi+O,EAAUhL,EAAOyK,QACjBQ,EAASjL,EAAOn4B,OAChBqjC,EAAOlL,EAAO0K,KAEd53J,EAAO8mC,EAAIh3B,UAAU,GACrB7P,EAAU6mC,EAAIh3B,UAAU,GAExB1jC,EAAI,GACJgkC,EAAK,GAETpQ,EAAKz4E,SAAQ,SAAUtN,EAAGuI,GAExB4tF,EAAGn2F,GAAKuI,EAAE,GAEV4pD,EAAEnyD,IAAK,KAGT,IAAI6G,EAASo3O,EAAU,QAAKt8O,EACxB4F,EAAQ,GACRu2O,EAAM,GAuBV,OArBA93J,EAAQ14E,SAAQ,SAAUlB,GAIxB,IAFA0xO,EAAIr5O,KAAK8C,EAAMxH,QAEV8lB,EAAIs4N,EAAK/xO,GAAI4xO,EAAKG,EAAK/xO,EAAI,GAAIyZ,EAAIm4N,EAAIn4N,IAE1C7lB,EAAIk+O,EAAOr4N,IAEE,IAATssC,EAAEnyD,KAEJuH,EAAM9C,KAAK0xF,EAAGn2F,IAEV6G,GACFA,EAAOpC,KAAKw5O,EAAQp4N,QAM5Bi4N,EAAIr5O,KAAK8C,EAAMxH,QAER,IAAI09O,EAAa,CACtB52O,OAAQA,EACRU,MAAOA,EACPu2O,IAAKA,EACLr0O,KAAMA,EACNmsO,SAAU3C,EAAOoF,YAIrB,SAAS+F,EAAWnL,EAAQ1rO,EAAOoxO,EAAWx2K,GAE5C,IAAK56D,IAA2B,IAAlBA,EAAMq6N,QAClB,MAAM,IAAI9/N,UAAU,iBAItB,IAGI82O,EAHAC,EAAQtxO,EAAMkC,OACd8uO,EAAWhxO,EAAMgxO,WAerB,IAXI,EAAA/E,EAAA,IAASmF,IAEXC,EAAQD,EAAUlvO,OAElBkvO,EAAYA,EAAUhoG,WAGtBioG,EAAQ3B,EAAU0B,GAIhBJ,EAAU,CAEZ,GAAqB,IAAjBK,EAAM74O,OACR,MAAM,IAAI+B,UAAU,mBAItBmxO,EAAO1sO,IAAIgB,EAAMO,MAAO6wO,EAAWx2K,OAC9B,CAEL,GAAqB,IAAjB02K,EAAM94O,QAAiC,IAAjB84O,EAAM94O,OAC9B,MAAM,IAAI+2O,EAAe+B,EAAM94O,OAAQkzO,EAAOmF,MAAMr4O,OAAQ,KAI9D,GAAI64O,EAAM74O,OAAS84O,EAAM94O,OAAQ,CAK/B,IAHA,IAAIC,EAAI,EACJwqN,EAAQ,EAEQ,IAAbquB,EAAM74O,IAAyB,IAAb44O,EAAM54O,IAC7BA,IAGF,KAAoB,IAAb64O,EAAM74O,IACXwqN,IACAxqN,IAIF24O,EAAYlB,EAAUkB,EAAWE,EAAM94O,OAAQyqN,EAAOouB,GAIxD,IAAKjF,EAAgBkF,EAAOD,GAC1B,MAAM,IAAI9B,EAAe+B,EAAOD,EAAO,KAUzC,IANA,IAAIyF,EAAK92O,EAAMO,MAAM,GACjBw2O,EAAK/2O,EAAMO,MAAM,GAEjB2vB,EAAImhN,EAAM,GACVnzO,EAAImzO,EAAM,GAEL7wO,EAAI,EAAGA,EAAI0vB,EAAG1vB,IAErB,IAAK,IAAI+hB,EAAI,EAAGA,EAAIrkB,EAAGqkB,IAAK,CAE1B,IAAIvI,EAAIo3N,EAAU5wO,GAAG+hB,GAErBmpN,EAAO1sO,IAAI,CAACwB,EAAIs2O,EAAIv0N,EAAIw0N,GAAK/8N,EAAG4gD,IAKtC,OAAO8wK,EAsHT,SAASsL,EAAev+O,EAAG8gD,EAAKC,EAAQx5C,GAEtC,GAAIw5C,EAASD,GAAQ,EACnB,OAAOC,EAIT,IAAK,IAAIx4C,EAAIu4C,EAAKv4C,EAAIw4C,EAAQx4C,IAE5B,GAAIhB,EAAMgB,KAAOvI,EACf,OAAOuI,EAKX,OAAOu4C,EAaT,SAAS09L,EAAQ34N,EAAG7lB,EAAGoM,EAAGmV,EAAG1a,EAAQU,EAAOu2O,GAE1Cj3O,EAAO6oC,OAAO7pB,EAAG,EAAGtE,GAEpBha,EAAMmoC,OAAO7pB,EAAG,EAAG7lB,GAEnB,IAAK,IAAI+H,EAAIqE,EAAI,EAAGrE,EAAI+1O,EAAI/9O,OAAQgI,IAClC+1O,EAAI/1O,KA6CR,SAASuvO,EAAQrE,EAAQltJ,EAAMC,EAAS7jB,GAEtC,IAAInhE,EAAQmhE,GAAgB,EAExBszJ,EAAK+nB,EAEL1tK,EAAO,GAEP,EAAA0jK,EAAA,IAASP,EAAOoF,aAElB5iB,EAAK+kB,EAAM/hH,KAAK+kH,EAAa,CAACvK,EAAOoF,UAAWpF,EAAOoF,aAAemF,EAEtE1tK,EAAO0qK,EAAMnP,QAAQ,EAAG4H,EAAOoF,WAE/Br3O,EAAQw5O,EAAMnP,QAAQrqO,EAAOiyO,EAAOoF,YAItC,IAIIr4O,EAAGoM,EAAGyZ,EAJNkqF,GAAO0lH,EAAGz0N,EAAO8uE,GAEjBvnE,EAAI0qO,EAAOmF,MAAM,GACjB3pO,EAAIwkO,EAAOmF,MAAM,GAGrB,GAAIpyJ,EAAUv3E,EAAG,CAEf,IAAKrC,EAAIqC,EAAGrC,EAAI45E,EAAS55E,IAIvB,GAFA6mO,EAAO0K,KAAKvxO,GAAK6mO,EAAOyK,QAAQ39O,OAE5BgwG,EAEF,IAAK/vG,EAAI,EAAGA,EAAIuI,EAAGvI,IAEjBizO,EAAOyK,QAAQj5O,KAAKzD,GAGpBiyO,EAAOn4B,OAAOr2M,KAAKzE,GAMzBizO,EAAO0K,KAAK33J,GAAWitJ,EAAOyK,QAAQ39O,YAC7BimF,EAAUv3E,IAEnBwkO,EAAO0K,KAAKjuM,OAAOs2C,EAAU,EAAGv3E,EAAIu3E,GAGpCitJ,EAAOyK,QAAQhuM,OAAOujM,EAAO0K,KAAK33J,GAAUitJ,EAAOyK,QAAQ39O,QAE3DkzO,EAAOn4B,OAAOprK,OAAOujM,EAAO0K,KAAK33J,GAAUitJ,EAAOn4B,OAAO/6M,SAM3D,GAFA0O,EAAIu3E,EAEAD,EAAOx9E,GAET,GAAIwnG,EAAK,CAEP,IAAItqG,EAAI,EAER,IAAK2G,EAAI,EAAGA,EAAIqC,EAAGrC,IAAK,CAEtB6mO,EAAO0K,KAAKvxO,GAAK6mO,EAAO0K,KAAKvxO,GAAK3G,EAElCogB,EAAIotN,EAAO0K,KAAKvxO,EAAI,GAAK3G,EAEzB,IAAIZ,EAAI,EAER,IAAK7E,EAAIuI,EAAGvI,EAAI+lF,EAAM/lF,IAAK6E,IAEzBouO,EAAOyK,QAAQhuM,OAAO7pB,EAAIhhB,EAAG,EAAG7D,GAGhCiyO,EAAOn4B,OAAOprK,OAAO7pB,EAAIhhB,EAAG,EAAG7E,GAG/ByF,IAKJwtO,EAAO0K,KAAKlvO,GAAKwkO,EAAOyK,QAAQ39O,aAE7B,GAAIgmF,EAAOx9E,EAAG,CAEnB,IAAI8F,EAAI,EAER,IAAKjC,EAAI,EAAGA,EAAIqC,EAAGrC,IAAK,CAEtB6mO,EAAO0K,KAAKvxO,GAAK6mO,EAAO0K,KAAKvxO,GAAKiC,EAElC,IAAIqzI,EAAKuxF,EAAO0K,KAAKvxO,GACjBqyO,EAAKxL,EAAO0K,KAAKvxO,EAAI,GAAKiC,EAE9B,IAAKwX,EAAI67H,EAAI77H,EAAI44N,EAAI54N,KAEnB7lB,EAAIizO,EAAOn4B,OAAOj1L,IAEVkgE,EAAO,IAEbktJ,EAAOyK,QAAQhuM,OAAO7pB,EAAG,GAGzBotN,EAAOn4B,OAAOprK,OAAO7pB,EAAG,GAGxBxX,KAMN4kO,EAAO0K,KAAKvxO,GAAK6mO,EAAOyK,QAAQ39O,OAOlC,OAHAkzO,EAAOmF,MAAM,GAAKryJ,EAClBktJ,EAAOmF,MAAM,GAAKpyJ,EAEXitJ,EA4TT,SAASyL,EAAS73O,EAAQU,EAAOu2O,EAAKr0O,EAAMwsM,GAE1C,IAKIj2M,EAAGoM,EALH25E,EAAOt8E,EAAK,GACZu8E,EAAUv8E,EAAK,GAEfpB,EAAI,GAIR,IAAKrI,EAAI,EAAGA,EAAI+lF,EAAM/lF,IAGpB,IAFAqI,EAAErI,GAAK,GAEFoM,EAAI,EAAGA,EAAI45E,EAAS55E,IACvB/D,EAAErI,GAAGoM,GAAK,EAKd,IAAKA,EAAI,EAAGA,EAAI45E,EAAS55E,IAKvB,IAHA,IAAIs1I,EAAKo8F,EAAI1xO,GACTqyO,EAAKX,EAAI1xO,EAAI,GAERyZ,EAAI67H,EAAI77H,EAAI44N,EAAI54N,IAIvBxd,EAFArI,EAAIuH,EAAMse,IAELzZ,GAAKvF,EAASovM,EAAO,EAAMpvM,EAAOgf,IAAMhf,EAAOgf,GAAK,EAI7D,OAAOxd,EA0aT,OAj2CAo1O,EAAa/6O,UAAY,IAAI+yO,EAK7BgI,EAAa/6O,UAAUi8O,mBAAqB,SAAU14O,EAAM2vO,GAC1D,OAAO,IAAI6H,EAAax3O,EAAM2vO,IAOhC6H,EAAa/6O,UAAUqiB,KAAO,eAC9B04N,EAAa/6O,UAAUk8O,gBAAiB,EAWxCnB,EAAa/6O,UAAU42O,YAAc,WACnC,OAAO1B,EAAiBt2O,KAAKo8O,QAAS,OAaxCD,EAAa/6O,UAAUizO,QAAU,WAC/B,MAAO,UAaT8H,EAAa/6O,UAAUkzO,SAAW,WAChC,OAAOt0O,KAAK+2O,WAUdoF,EAAa/6O,UAAUkB,OAAS,SAAUqC,EAAM2vO,GAC9C,OAAO,IAAI6H,EAAax3O,EAAM2vO,IAahC6H,EAAa/6O,UAAUm8O,QAAU,WAE/B,IAAI94J,EAAOzkF,KAAK82O,MAAM,GAClBpyJ,EAAU1kF,KAAK82O,MAAM,GAEzB,OAAgB,IAATryJ,GAA0B,IAAZC,EAAgB1kF,KAAKw5M,OAAO/6M,QAAUgmF,EAAOC,GAAW,GAkB/Ey3J,EAAa/6O,UAAUmzO,OAAS,SAAUtuO,EAAOuuO,EAAa3zK,GAE5D,IAAK7gE,KAAKo8O,QACR,MAAM,IAAIv2O,MAAM,iDAIlB,OAAQ3F,UAAUzB,QAChB,KAAK,EACH,OAAOg+O,EAAWz8O,KAAMiG,GAG1B,KAAK,EACL,KAAK,EACH,OAAO62O,EAAW98O,KAAMiG,EAAOuuO,EAAa3zK,GAE9C,QACE,MAAM,IAAImuJ,YAAY,+BAgL5BmtB,EAAa/6O,UAAUM,IAAM,SAAUuE,GACrC,KAAK,EAAAisO,EAAA,IAAQjsO,GACX,MAAM,IAAIzF,UAAU,kBAGtB,GAAIyF,EAAMxH,SAAWuB,KAAK82O,MAAMr4O,OAC9B,MAAM,IAAI+2O,EAAevvO,EAAMxH,OAAQuB,KAAK82O,MAAMr4O,QAIpD,IAAKuB,KAAKo8O,QACR,MAAM,IAAIv2O,MAAM,8CAIlB,IAAInH,EAAIuH,EAAM,GACV6E,EAAI7E,EAAM,GAEd8vO,EAAcr3O,EAAGsB,KAAK82O,MAAM,IAC5Bf,EAAcjrO,EAAG9K,KAAK82O,MAAM,IAE5B,IAAIvyN,EAAI04N,EAAev+O,EAAGsB,KAAKq8O,KAAKvxO,GAAI9K,KAAKq8O,KAAKvxO,EAAI,GAAI9K,KAAKw5M,QAG/D,OAAIj1L,EAAIvkB,KAAKq8O,KAAKvxO,EAAI,IAAM9K,KAAKw5M,OAAOj1L,KAAO7lB,EACtCsB,KAAKo8O,QAAQ73N,GAGf,GAcT43N,EAAa/6O,UAAU6D,IAAM,SAAUgB,EAAOga,EAAG4gD,GAC/C,KAAK,EAAAqxK,EAAA,IAAQjsO,GACX,MAAM,IAAIzF,UAAU,kBAGtB,GAAIyF,EAAMxH,SAAWuB,KAAK82O,MAAMr4O,OAC9B,MAAM,IAAI+2O,EAAevvO,EAAMxH,OAAQuB,KAAK82O,MAAMr4O,QAIpD,IAAKuB,KAAKo8O,QACR,MAAM,IAAIv2O,MAAM,8CAIlB,IAAInH,EAAIuH,EAAM,GACV6E,EAAI7E,EAAM,GAEVw+E,EAAOzkF,KAAK82O,MAAM,GAClBpyJ,EAAU1kF,KAAK82O,MAAM,GAErB3iB,EAAK+nB,EAEL1tK,EAAO,GAEP,EAAA0jK,EAAA,IAASlyO,KAAK+2O,aAEhB5iB,EAAK+kB,EAAM/hH,KAAK+kH,EAAa,CAACl8O,KAAK+2O,UAAW/2O,KAAK+2O,aAAemF,EAElE1tK,EAAO0qK,EAAMnP,QAAQ,EAAG/pO,KAAK+2O,aAI3Br4O,EAAI+lF,EAAO,GAAK35E,EAAI45E,EAAU,KAEhCsxJ,EAAQh2O,KAAMkG,KAAKQ,IAAIhI,EAAI,EAAG+lF,GAAOv+E,KAAKQ,IAAIoE,EAAI,EAAG45E,GAAU7jB,GAG/D4jB,EAAOzkF,KAAK82O,MAAM,GAClBpyJ,EAAU1kF,KAAK82O,MAAM,IAIvBf,EAAcr3O,EAAG+lF,GACjBsxJ,EAAcjrO,EAAG45E,GAEjB,IAAIngE,EAAI04N,EAAev+O,EAAGsB,KAAKq8O,KAAKvxO,GAAI9K,KAAKq8O,KAAKvxO,EAAI,GAAI9K,KAAKw5M,QAiB/D,OAdIj1L,EAAIvkB,KAAKq8O,KAAKvxO,EAAI,IAAM9K,KAAKw5M,OAAOj1L,KAAO7lB,EAExCy1N,EAAGl0M,EAAGuuD,GAiCf,SAAiBjqD,EAAGzZ,EAAGvF,EAAQU,EAAOu2O,GAEpCj3O,EAAO6oC,OAAO7pB,EAAG,GACjBte,EAAMmoC,OAAO7pB,EAAG,GAEhB,IAAK,IAAI9d,EAAIqE,EAAI,EAAGrE,EAAI+1O,EAAI/9O,OAAQgI,IAClC+1O,EAAI/1O,KAlCF+2O,CAAQj5N,EAAGzZ,EAAG9K,KAAKo8O,QAASp8O,KAAKw5M,OAAQx5M,KAAKq8O,MAH9Cr8O,KAAKo8O,QAAQ73N,GAAKtE,EAOpBi9N,EAAQ34N,EAAG7lB,EAAGoM,EAAGmV,EAAGjgB,KAAKo8O,QAASp8O,KAAKw5M,OAAQx5M,KAAKq8O,MAG/Cr8O,MAwDTm8O,EAAa/6O,UAAUq0I,OAAS,SAAUttI,EAAM04D,EAAc8zI,GAE5D,KAAK,EAAAu9B,EAAA,IAAa/pO,GAChB,MAAM,IAAI3H,UAAU,4BAItB,IAAI03O,EAAY/vO,EAAKskN,UAAUriN,KAAI,SAAU1K,GAC3C,OAAOd,MAAMC,QAAQa,IAA2B,IAAjBA,EAAMjB,OAAeiB,EAAM,GAAKA,KAGjE,GAAyB,IAArBw4O,EAAUz5O,OACZ,MAAM,IAAIoH,MAAM,4CAYlB,OARAqyO,EAAUlsO,SAAQ,SAAUtM,GAC1B,KAAK,EAAAwyO,EAAA,IAASxyO,MAAW,OAAUA,IAAUA,EAAQ,EACnD,MAAM,IAAIc,UAAU,uDAA8D,EAAO03O,GAAa,QAMnGlC,EAFCrhC,EAAO30M,KAAKiiB,QAAUjiB,KAEZk4O,EAAU,GAAIA,EAAU,GAAIr3K,IA+IhDs7K,EAAa/6O,UAAUqgD,QAAU,SAAUt5C,EAAMwsM,GAE/C,KAAK,EAAAu9B,EAAA,IAAQ/pO,GACX,MAAM,IAAI3H,UAAU,kBAGtB,GAAoB,IAAhB2H,EAAK1J,OACP,MAAM,IAAIoH,MAAM,0DAUlB,GANAsC,EAAK6D,SAAQ,SAAUtM,GACrB,KAAK,EAAAwyO,EAAA,IAASxyO,MAAW,OAAUA,IAAUA,EAAQ,EACnD,MAAM,IAAIc,UAAU,uDAA8D,EAAO2H,GAAQ,QAIjGnI,KAAK82O,MAAM,GAAK92O,KAAK82O,MAAM,IAAO3uO,EAAK,GAAKA,EAAK,GACnD,MAAM,IAAItC,MAAM,uEAIlB,IAAIswB,EAAIw+K,EAAO30M,KAAKiiB,QAAUjiB,KAE9B,GAAIA,KAAK82O,MAAM,KAAO3uO,EAAK,IAAMnI,KAAK82O,MAAM,KAAO3uO,EAAK,GACtD,OAAOguB,EAMT,IAFA,IAAIgwK,EAAW,GAENznM,EAAI,EAAGA,EAAIy3B,EAAEkmN,KAAK59O,OAAQC,IACjC,IAAK,IAAIoM,EAAI,EAAGA,EAAIqrB,EAAEkmN,KAAK39O,EAAI,GAAKy3B,EAAEkmN,KAAK39O,GAAIoM,IAC7Cq7L,EAAShjM,KAAKzE,GAWlB,IANA,IAAI6G,EAAS4wB,EAAEimN,QAAQ/3O,QAGnBo5O,EAAWtnN,EAAEqjL,OAAOn1M,QAGfpB,EAAK,EAAGA,EAAKkzB,EAAEqjL,OAAO/6M,OAAQwE,IAAM,CAC3C,IAAIy6O,EAAKD,EAASx6O,GACd6nE,EAAKq7H,EAASljM,GACdujM,EAAOk3C,EAAKvnN,EAAE2gN,MAAM,GAAKhsK,EAC7Bq7H,EAASljM,GAAMujM,EAAOr+L,EAAK,GAC3Bs1O,EAASx6O,GAAMiD,KAAK8H,MAAMw4L,EAAOr+L,EAAK,IAQxCguB,EAAEimN,QAAQ39O,OAAS,EACnB03B,EAAEqjL,OAAO/6M,OAAS,EAClB03B,EAAEkmN,KAAK59O,OAAS0J,EAAK,GAAK,EAC1BguB,EAAE2gN,MAAQ3uO,EAAK9D,QAEf,IAAK,IAAIs5O,EAAM,EAAGA,EAAMxnN,EAAEkmN,KAAK59O,OAAQk/O,IACrCxnN,EAAEkmN,KAAKsB,GAAO,EAKhB,IAAK,IAAI56L,EAAI,EAAGA,EAAIx9C,EAAO9G,OAAQskD,IAAK,CACtC,IAAI66L,EAAMH,EAAS16L,GACf86L,EAAK13C,EAASpjJ,GACd9iC,EAAI1a,EAAOw9C,GAIfm6L,EAFQD,EAAeW,EAAKznN,EAAEkmN,KAAKwB,GAAK1nN,EAAEkmN,KAAKwB,EAAK,GAAI1nN,EAAEqjL,QAE/CokC,EAAKC,EAAI59N,EAAGkW,EAAEimN,QAASjmN,EAAEqjL,OAAQrjL,EAAEkmN,MAIhD,OAAOlmN,GASTgmN,EAAa/6O,UAAU6gB,MAAQ,WAQ7B,OAPQ,IAAIk6N,EAAa,CACvB52O,OAAQvF,KAAKo8O,QAAU,EAAMp8O,KAAKo8O,cAAW/7O,EAC7C4F,MAAO,EAAMjG,KAAKw5M,QAClBgjC,IAAK,EAAMx8O,KAAKq8O,MAChBl0O,KAAM,EAAMnI,KAAK82O,OACjBxC,SAAUt0O,KAAK+2O,aAWnBoF,EAAa/6O,UAAU+G,KAAO,WAC5B,OAAOnI,KAAK82O,MAAMzyO,MAAM,IAe1B83O,EAAa/6O,UAAUgJ,IAAM,SAAUssF,EAAU+9I,GAE/C,IAAKz0O,KAAKo8O,QACR,MAAM,IAAIv2O,MAAM,8CAIlB,IAAI4yO,EAAKz4O,KAWT,OAQF,SAAc2xO,EAAQmM,EAAQC,EAAQC,EAAWC,EAAWvnJ,EAAU+9I,GAEpE,IAAIlvO,EAAS,GACTU,EAAQ,GACRu2O,EAAM,GAENroB,EAAK+nB,EAEL1tK,EAAO,GAEP,EAAA0jK,EAAA,IAASP,EAAOoF,aAElB5iB,EAAK+kB,EAAM/hH,KAAK+kH,EAAa,CAACvK,EAAOoF,UAAWpF,EAAOoF,aAAemF,EAEtE1tK,EAAO0qK,EAAMnP,QAAQ,EAAG4H,EAAOoF,YAiBjC,IAbA,IAAImH,EAAS,SAAgBj+N,EAAGxZ,EAAG+hB,GAEjCvI,EAAIy2E,EAASz2E,EAAGxZ,EAAG+hB,GAEd2rM,EAAGl0M,EAAGuuD,KAETjpE,EAAOpC,KAAK8c,GAEZha,EAAM9C,KAAKsD,KAKNqE,EAvCsB,EAuCPA,GAAKmzO,EAAWnzO,IAAK,CAE3C0xO,EAAIr5O,KAAKoC,EAAO9G,QAEhB,IAAI2hJ,EAAKuxF,EAAO0K,KAAKvxO,GACjBqyO,EAAKxL,EAAO0K,KAAKvxO,EAAI,GAEzB,GAAI2pO,EAEF,IAAK,IAAIlwN,EAAI67H,EAAI77H,EAAI44N,EAAI54N,IAAK,CAE5B,IAAI7lB,EAAIizO,EAAOn4B,OAAOj1L,GAElB7lB,GApDQ,GAoDOA,GAAKq/O,GAEtBG,EAAOvM,EAAOyK,QAAQ73N,GAAI7lB,EAtDhB,EAsD4BoM,EAtDf,OAyDtB,CAIL,IAFA,IAAIsxO,EAAU,GAEL+B,EAAK/9F,EAAI+9F,EAAKhB,EAAIgB,IAEzB/B,EADUzK,EAAOn4B,OAAO2kC,IACTxM,EAAOyK,QAAQ+B,GAKhC,IAAK,IAAIC,EApEK,EAoESA,GAAOL,EAAQK,IAEpCF,EADYE,KAAOhC,EAAUA,EAAQgC,GAAO,EAC9BA,EAtEF,EAsEgBtzO,EAtEH,IA8E/B,OAFA0xO,EAAIr5O,KAAKoC,EAAO9G,QAET,IAAI09O,EAAa,CACtB52O,OAAQA,EACRU,MAAOA,EACPu2O,IAAKA,EACLr0O,KAAM,CAAC41O,EAlFS,EAkFS,EAAGE,EAlFC,EAkFuB,KAlF/CI,CAAKr+O,KAAM,EATPA,KAAK82O,MAAM,GASM,EAAG,EARjB92O,KAAK82O,MAAM,GAQmB,GAN/B,SAAgB72N,EAAGvhB,EAAGoM,GAEjC,OAAO4rF,EAASz2E,EAAG,CAACvhB,EAAGoM,GAAI2tO,KAI0BhE,IA+FzD0H,EAAa/6O,UAAU4K,QAAU,SAAU0qF,EAAU+9I,GAEnD,IAAKz0O,KAAKo8O,QACR,MAAM,IAAIv2O,MAAM,kDASlB,IALA,IAEI4+E,EAAOzkF,KAAK82O,MAAM,GAClBpyJ,EAAU1kF,KAAK82O,MAAM,GAEhBhsO,EAAI,EAAGA,EAAI45E,EAAS55E,IAAK,CAEhC,IAAIs1I,EAAKpgJ,KAAKq8O,KAAKvxO,GACfqyO,EAAKn9O,KAAKq8O,KAAKvxO,EAAI,GAEvB,GAAI2pO,EAEF,IAAK,IAAIlwN,EAAI67H,EAAI77H,EAAI44N,EAAI54N,IAAK,CAE5B,IAAI7lB,EAAIsB,KAAKw5M,OAAOj1L,GAEpBmyE,EAAS12F,KAAKo8O,QAAQ73N,GAAI,CAAC7lB,EAAGoM,GAhB3B9K,UAkBA,CAIL,IAFA,IAAIuF,EAAS,GAEJ+4O,EAAMl+F,EAAIk+F,EAAMnB,EAAImB,IAE3B/4O,EADUvF,KAAKw5M,OAAO8kC,IACRt+O,KAAKo8O,QAAQkC,GAK7B,IAAK,IAAIC,EAAM,EAAGA,EAAM95J,EAAM85J,IAE5B7nJ,EADY6nJ,KAAOh5O,EAASA,EAAOg5O,GAAO,EAC1B,CAACA,EAAKzzO,GA/BnB9K,SA2CXm8O,EAAa/6O,UAAUiuI,QAAU,WAC/B,OAAO+tG,EAASp9O,KAAKo8O,QAASp8O,KAAKw5M,OAAQx5M,KAAKq8O,KAAMr8O,KAAK82O,OAAO,IASpEqF,EAAa/6O,UAAUqrN,QAAU,WAC/B,OAAO2wB,EAASp9O,KAAKo8O,QAASp8O,KAAKw5M,OAAQx5M,KAAKq8O,KAAMr8O,KAAK82O,OAAO,IA+CpEqF,EAAa/6O,UAAU06B,OAAS,SAAUm7E,GASxC,IAPA,IAAIxyB,EAAOzkF,KAAK82O,MAAM,GAClBpyJ,EAAU1kF,KAAK82O,MAAM,GAErByG,EAAUv9O,KAAKu9O,UAEfxoN,EAAM,kBAAoB,EAAO0vD,EAAMwyB,GAAW,MAAQ,EAAOvyB,EAASuyB,GAAW,cAAgB,EAAOsmI,EAAStmI,GAAW,KAE3HnsG,EAAI,EAAGA,EAAI45E,EAAS55E,IAK3B,IAHA,IAAIs1I,EAAKpgJ,KAAKq8O,KAAKvxO,GACfqyO,EAAKn9O,KAAKq8O,KAAKvxO,EAAI,GAEdyZ,EAAI67H,EAAI77H,EAAI44N,EAAI54N,IAIvBwQ,GAAO,UAAY,EAFX/0B,KAAKw5M,OAAOj1L,GAES0yF,GAAW,KAAO,EAAOnsG,EAAGmsG,GAAW,UAAYj3G,KAAKo8O,QAAU,EAAOp8O,KAAKo8O,QAAQ73N,GAAI0yF,GAAW,KAItI,OAAOliF,GASTonN,EAAa/6O,UAAUgD,SAAW,WAChC,OAAO,EAAOpE,KAAKqvI,YASrB8sG,EAAa/6O,UAAUm0G,OAAS,WAC9B,MAAO,CACL69H,OAAQ,eACR7tO,OAAQvF,KAAKo8O,QACbn2O,MAAOjG,KAAKw5M,OACZgjC,IAAKx8O,KAAKq8O,KACVl0O,KAAMnI,KAAK82O,MACXxC,SAAUt0O,KAAK+2O,YAanBoF,EAAa/6O,UAAUs3O,SAAW,SAAUn0N,GAE1C,GAAIA,GAOF,IALI,EAAA2tN,EAAA,IAAY3tN,KACdA,EAAIA,EAAE8zM,cAIH,EAAA6Z,EAAA,IAAS3tN,MAAO,OAAUA,GAC7B,MAAM,IAAI/jB,UAAU,kDAItB+jB,EAAI,EAGN,IAAIo0N,EAASp0N,EAAI,EAAIA,EAAI,EACrBq0N,EAAOr0N,EAAI,GAAKA,EAAI,EAEpBkgE,EAAOzkF,KAAK82O,MAAM,GAClBpyJ,EAAU1kF,KAAK82O,MAAM,GAErB3yO,EAAI+B,KAAKM,IAAIi+E,EAAOm0J,EAAMl0J,EAAUi0J,GAEpCpzO,EAAS,GACTU,EAAQ,GACRu2O,EAAM,GAEVA,EAAI,GAAK,EAET,IAAK,IAAI1xO,EAAI6tO,EAAQ7tO,EAAI45E,GAAWn/E,EAAO9G,OAAS0F,EAAG2G,IAKrD,IAHA,IAAIs1I,EAAKpgJ,KAAKq8O,KAAKvxO,GACfqyO,EAAKn9O,KAAKq8O,KAAKvxO,EAAI,GAEdrE,EAAI25I,EAAI35I,EAAI02O,EAAI12O,IAAK,CAE5B,IAAI/H,EAAIsB,KAAKw5M,OAAO/yM,GAEpB,GAAI/H,IAAMoM,EAAI6tO,EAASC,EAAM,CAE3BrzO,EAAOpC,KAAKnD,KAAKo8O,QAAQ31O,IAEzBR,EAAMV,EAAO9G,OAAS,GAAKC,EAAIk6O,EAE/B,OAQN,OAFA4D,EAAIr5O,KAAKoC,EAAO9G,QAET,IAAI09O,EAAa,CACtB52O,OAAQA,EACRU,MAAOA,EACPu2O,IAAKA,EACLr0O,KAAM,CAAChE,EAAG,MAadg4O,EAAalI,SAAW,SAAUttM,GAChC,OAAO,IAAIw1M,EAAax1M,IAgB1Bw1M,EAAazD,SAAW,SAAUvwO,EAAMzI,EAAO6kB,EAAGs8C,EAAcyzK,GAC9D,KAAK,EAAApC,EAAA,IAAQ/pO,GACX,MAAM,IAAI3H,UAAU,kCAGtB,GAAoB,IAAhB2H,EAAK1J,OACP,MAAM,IAAIoH,MAAM,4CAmBlB,GAfAsC,EAAOA,EAAKiC,KAAI,SAAUC,GAQxB,IANI,EAAA6nO,EAAA,IAAY7nO,KAEdA,EAAIA,EAAEguN,cAIH,EAAA6Z,EAAA,IAAS7nO,MAAO,OAAUA,IAAMA,EAAI,EACvC,MAAM,IAAIxE,MAAM,yCAGlB,OAAOwE,KAGLka,GAOF,IALI,EAAA2tN,EAAA,IAAY3tN,KACdA,EAAIA,EAAE8zM,cAIH,EAAA6Z,EAAA,IAAS3tN,MAAO,OAAUA,GAC7B,MAAM,IAAI/jB,UAAU,kDAItB+jB,EAAI,EAIN,IAAI4vM,EAAK+nB,EAEL1tK,EAAO,GAEP,EAAA0jK,EAAA,IAASoC,KAEXngB,EAAK+kB,EAAM/hH,KAAK+kH,EAAa,CAAC5H,EAAUA,KAAc4H,EAEtD1tK,EAAO0qK,EAAMnP,QAAQ,EAAGuK,IAG1B,IAQIuE,EARAF,EAASp0N,EAAI,EAAIA,EAAI,EACrBq0N,EAAOr0N,EAAI,GAAKA,EAAI,EAEpBkgE,EAAOt8E,EAAK,GACZu8E,EAAUv8E,EAAK,GAEfhE,EAAI+B,KAAKM,IAAIi+E,EAAOm0J,EAAMl0J,EAAUi0J,GAKxC,IAAI,EAAAzG,EAAA,IAAQxyO,GAAQ,CAElB,GAAIA,EAAMjB,SAAW0F,EAEnB,MAAM,IAAI0B,MAAM,8BAIlBgzO,EAAS,SAAgBn6O,GAEvB,OAAOgB,EAAMhB,SAEV,IAAI,EAAAwzO,EAAA,IAASxyO,GAAQ,CAE1B,IAAIgyL,EAAKhyL,EAAMyI,OAEf,GAAkB,IAAdupL,EAAGjzL,QAAgBizL,EAAG,KAAOvtL,EAE/B,MAAM,IAAI0B,MAAM,yBAIlBgzO,EAAS,SAAgBn6O,GAEvB,OAAOgB,EAAMgC,IAAI,CAAChD,UAIpBm6O,EAAS,WAEP,OAAOn5O,GASX,IAJA,IAAI6F,EAAS,GACTU,EAAQ,GACRu2O,EAAM,GAED1xO,EAAI,EAAGA,EAAI45E,EAAS55E,IAAK,CAEhC0xO,EAAIr5O,KAAKoC,EAAO9G,QAEhB,IAAIC,EAAIoM,EAAI6tO,EAEZ,GAAIj6O,GAAK,GAAKA,EAAIyF,EAAG,CAEnB,IAAI8b,EAAI44N,EAAOn6O,GAGVy1N,EAAGl0M,EAAGuuD,KAETvoE,EAAM9C,KAAKzE,EAAIk6O,GAEfrzO,EAAOpC,KAAK8c,KAQlB,OAFAu8N,EAAIr5O,KAAKoC,EAAO9G,QAET,IAAI09O,EAAa,CACtB52O,OAAQA,EACRU,MAAOA,EACPu2O,IAAKA,EACLr0O,KAAM,CAACs8E,EAAMC,MAcjBy3J,EAAa/6O,UAAU03O,SAAW,SAAUp6O,EAAGoM,GAE7C,MAAK,EAAAonO,EAAA,IAASxzO,KAAO,OAAUA,KAAO,EAAAwzO,EAAA,IAASpnO,KAAO,OAAUA,IAC9D,MAAM,IAAIjF,MAAM,uCAIlB,GAA0B,IAAtB7F,KAAK82O,MAAMr4O,OACb,MAAM,IAAIoH,MAAM,4CAUlB,OANAkwO,EAAcr3O,EAAGsB,KAAK82O,MAAM,IAC5Bf,EAAcjrO,EAAG9K,KAAK82O,MAAM,IAE5BqF,EAAapD,UAAUr6O,EAAGoM,EAAG9K,KAAK82O,MAAM,GAAI92O,KAAKo8O,QAASp8O,KAAKw5M,OAAQx5M,KAAKq8O,MAGrEr8O,MAaTm8O,EAAaqC,YAAc,SAAU1zO,EAAGvF,EAAQU,EAAOu2O,EAAK9lJ,GAK1D,IAHA,IAAI0pD,EAAKo8F,EAAI1xO,GACTqyO,EAAKX,EAAI1xO,EAAI,GAERyZ,EAAI67H,EAAI77H,EAAI44N,EAAI54N,IAEvBmyE,EAASzwF,EAAMse,GAAIhf,EAAOgf,KAe9B43N,EAAapD,UAAY,SAAUtyO,EAAG+hB,EAAGk8D,EAASn/E,EAAQU,EAAOu2O,GAE/D,IAAK,IAAI1xO,EAAI,EAAGA,EAAI45E,EAAS55E,IAAK,CAEhC,IAAIs1I,EAAKo8F,EAAI1xO,GACTqyO,EAAKX,EAAI1xO,EAAI,GAEb2zO,EAAKxB,EAAex2O,EAAG25I,EAAI+8F,EAAIl3O,GAG/By4O,EAAKzB,EAAez0N,EAAG43H,EAAI+8F,EAAIl3O,GAGnC,GAAIw4O,EAAKtB,GAAMuB,EAAKvB,GAAMl3O,EAAMw4O,KAAQh4O,GAAKR,EAAMy4O,KAAQl2N,GAEzD,GAAIjjB,EAAQ,CACV,IAAI0a,EAAI1a,EAAOk5O,GACfl5O,EAAOk5O,GAAMl5O,EAAOm5O,GACpBn5O,EAAOm5O,GAAMz+N,QAQjB,GAAIw+N,EAAKtB,GAAMl3O,EAAMw4O,KAAQh4O,IAAMi4O,GAAMvB,GAAMl3O,EAAMy4O,KAAQl2N,GAA7D,CAEE,IAAIm2N,EAAKp5O,EAASA,EAAOk5O,QAAMp+O,EAE/B4F,EAAMmoC,OAAOswM,EAAI,EAAGl2N,GAEhBjjB,GACFA,EAAO6oC,OAAOswM,EAAI,EAAGC,GAIvB14O,EAAMmoC,OAAOswM,GAAMD,EAAKA,EAAK,EAAIA,EAAI,GAEjCl5O,GACFA,EAAO6oC,OAAOswM,GAAMD,EAAKA,EAAK,EAAIA,EAAI,QAQ1C,GAAIC,EAAKvB,GAAMl3O,EAAMy4O,KAAQl2N,IAAMi2N,GAAMtB,GAAMl3O,EAAMw4O,KAAQh4O,GAAI,CAE/D,IAAIm4O,EAAKr5O,EAASA,EAAOm5O,QAAMr+O,EAE/B4F,EAAMmoC,OAAOqwM,EAAI,EAAGh4O,GAEhBlB,GACFA,EAAO6oC,OAAOqwM,EAAI,EAAGG,GAIvB34O,EAAMmoC,OAAOqwM,GAAMC,EAAKA,EAAK,EAAIA,EAAI,GAEjCn5O,GACFA,EAAO6oC,OAAOqwM,GAAMC,EAAKA,EAAK,EAAIA,EAAI,MAMvCvC,IACN,CACD1I,SAAS,IC1/CP,GAAO,SAEAoL,GAA8B,EAAQ,GAD9B,CAAC,QAAS,SAAU,cAAe,iBACe,SAAU9K,GAC7E,IAAImF,EAAQnF,EAAKmF,MAEbtC,GADS7C,EAAKI,OACAJ,EAAK6C,aACnBuF,EAAepI,EAAKoI,aAkCxB,OAAOjD,EAAM,GAAM,CACjB,GAAI,WACF,OAAO4F,EAAQ,KAEjB/d,OAAQ,SAAgBjlM,GACtB,OAAOgjN,EAAQ,GAAIhjN,IAErB,iBAAkB,SAAsBA,EAAQw4M,GAC9C,OAAOwK,EAAQ,GAAIhjN,EAAQw4M,IAE7B11O,MAAO,SAAe+F,GACpB,OAAOm6O,EAAQn6O,IAEjBwvO,OAAQ,SAAgBxvO,GACtB,OAAOm6O,EAAQn6O,EAAMA,EAAK0vO,YAE5B,yBAA0ByK,EAC1B,iCAAkCA,IAWpC,SAASA,EAAQn6O,EAAMm3B,EAAQw4M,GAE7B,GAAe,UAAXx4M,GAAiC,YAAXA,QAAmCz7B,IAAXy7B,EAChD,OAAO,IAAI86M,EAAYjyO,EAAM2vO,GAG/B,GAAe,WAAXx4M,EACF,OAAO,IAAIqgN,EAAax3O,EAAM2vO,GAGhC,MAAM,IAAI9zO,UAAU,uBAAyB6zB,KAAKC,UAAUwH,GAAU,SC3E/DijN,GAAmC,EAFnC,cACQ,CAAC,UACsD,SAAUhL,GAClF,IAAImF,EAAQnF,EAAKmF,MAqBjB,OAAO,SAAoB8F,EAAaC,EAAcvoJ,EAAUxd,GAE9D,IAAIgmK,EAAQF,EAAYnI,MACpBsI,EAAQH,EAAYlI,MACpBsI,EAAMJ,EAAYjI,UAElBsI,EAAUJ,EAAa7C,QACvBkD,EAASL,EAAazlC,OACtB+lC,EAAON,EAAa5C,KACpBmD,EAAQP,EAAanI,MACrB2I,EAAMR,EAAalI,UAEvB,GAAIoI,EAAM1gP,SAAW+gP,EAAM/gP,OACzB,MAAM,IAAI+2O,EAAe2J,EAAM1gP,OAAQ+gP,EAAM/gP,QAI/C,GAAI0gP,EAAM,KAAOK,EAAM,IAAML,EAAM,KAAOK,EAAM,GAC9C,MAAM,IAAI51G,WAAW,iCAAmCu1G,EAAQ,0BAA4BK,EAAQ,KAItG,IAAKH,EACH,MAAM,IAAIx5O,MAAM,sEAIlB,IAOInH,EAAGoM,EAPH25E,EAAO06J,EAAM,GACbz6J,EAAUy6J,EAAM,GAEhBvxB,EAAoB,iBAARwxB,GAAoBA,IAAQK,EAAML,OAAM/+O,EAEpDq/O,EAAK9xB,EAAKsrB,EAAM/hH,KAAKzgC,EAAU,CAACk3H,EAAIA,IAAOl3H,EAI3CipJ,EAAQ,GAEZ,IAAKjhP,EAAI,EAAGA,EAAI+lF,EAAM/lF,IACpBihP,EAAMjhP,GAAK,GAIb,IAAI+H,EAAI,GAEJoqD,EAAI,GAER,IAAK/lD,EAAI,EAAGA,EAAI45E,EAAS55E,IAAK,CAI5B,IAFA,IAAI80O,EAAO90O,EAAI,EAENs1I,EAAKm/F,EAAKz0O,GAAIqyO,EAAKoC,EAAKz0O,EAAI,GAAIyZ,EAAI67H,EAAI77H,EAAI44N,EAAI54N,IAIvD9d,EAFA/H,EAAI4gP,EAAO/6N,IAEJ20D,EAAUwmK,EAAGL,EAAQ96N,GAAI26N,EAAMxgP,GAAGoM,IAAM40O,EAAGR,EAAMxgP,GAAGoM,GAAIu0O,EAAQ96N,IAEvEssC,EAAEnyD,GAAKkhP,EAIT,IAAKlhP,EAAI,EAAGA,EAAI+lF,EAAM/lF,IAEhBmyD,EAAEnyD,KAAOkhP,EAEXD,EAAMjhP,GAAGoM,GAAKrE,EAAE/H,GAGhBihP,EAAMjhP,GAAGoM,GAAKo0O,EAAMxgP,GAAGoM,GAM7B,OAAOk0O,EAAYlH,kBAAkB,CACnCnzO,KAAMg7O,EACNx3O,KAAM,CAACs8E,EAAMC,GACb4vJ,SAAU1mB,QCnGLiyB,GAAmC,EAFnC,cACQ,CAAC,QAAS,gBAC6C,SAAU9L,GAClF,IAAImF,EAAQnF,EAAKmF,MACbgD,EAAcnI,EAAKmI,YAoBvB,OAAO,SAAqBn1O,EAAGC,EAAG0vF,GAEhC,IAAIopJ,EAAU/4O,EAAEq1O,QACZ2D,EAASh5O,EAAEyyM,OACXwmC,EAAOj5O,EAAEs1O,KACT8C,EAAQp4O,EAAE+vO,MACVsI,EAAMr4O,EAAEgwO,UAERsI,EAAUr4O,EAAEo1O,QACZkD,EAASt4O,EAAEwyM,OACX+lC,EAAOv4O,EAAEq1O,KACTmD,EAAQx4O,EAAE8vO,MACV2I,EAAMz4O,EAAE+vO,UAEZ,GAAIoI,EAAM1gP,SAAW+gP,EAAM/gP,OACzB,MAAM,IAAI+2O,EAAe2J,EAAM1gP,OAAQ+gP,EAAM/gP,QAI/C,GAAI0gP,EAAM,KAAOK,EAAM,IAAML,EAAM,KAAOK,EAAM,GAC9C,MAAM,IAAI51G,WAAW,iCAAmCu1G,EAAQ,0BAA4BK,EAAQ,KAItG,IAGI5xB,EAHAnpI,EAAO06J,EAAM,GACbz6J,EAAUy6J,EAAM,GAIhBhrB,EAAK+nB,EAEL1tK,EAAO,EAEPkxK,EAAKhpJ,EAEU,iBAAR0oJ,GAAoBA,IAAQK,IAErC7xB,EAAKwxB,EAELjrB,EAAK+kB,EAAM/hH,KAAK+kH,EAAa,CAACtuB,EAAIA,IAElCp/I,EAAO0qK,EAAMnP,QAAQ,EAAGnc,GAExB8xB,EAAKxG,EAAM/hH,KAAKzgC,EAAU,CAACk3H,EAAIA,KAIjC,IAUIlvN,EAAGoM,EAAGyZ,EAAG67H,EAAI+8F,EAVb8C,EAAUH,GAAWT,EAAU,QAAKh/O,EACpC6/O,EAAS,GACTC,EAAO,GAEPC,EAAKN,GAAWT,EAAU,QAAKh/O,EAC/BggP,EAAKP,GAAWT,EAAU,QAAKh/O,EAE/BigP,EAAK,GACLC,EAAK,GAIT,IAAKz1O,EAAI,EAAGA,EAAI45E,EAAS55E,IAAK,CAE5Bq1O,EAAKr1O,GAAKo1O,EAAOzhP,OAEjB,IAAImhP,EAAO90O,EAAI,EAEf,IAAKs1I,EAAK4/F,EAAKl1O,GAAIqyO,EAAK6C,EAAKl1O,EAAI,GAAIyZ,EAAI67H,EAAI77H,EAAI44N,EAAI54N,IAEnD7lB,EAAIqhP,EAAOx7N,GAEX27N,EAAO/8O,KAAKzE,GAEZ4hP,EAAG5hP,GAAKkhP,EAEJQ,IACFA,EAAG1hP,GAAKohP,EAAQv7N,IAKpB,IAAK67H,EAAKm/F,EAAKz0O,GAAIqyO,EAAKoC,EAAKz0O,EAAI,GAAIyZ,EAAI67H,EAAI77H,EAAI44N,EAAI54N,IAInD,GAAI+7N,EAFJ5hP,EAAI4gP,EAAO/6N,MAEGq7N,GAEZ,GAAIQ,EAAI,CAEN,IAAIngO,EAAIy/N,EAAGU,EAAG1hP,GAAI2gP,EAAQ96N,IAErB4vM,EAAGl0M,EAAGuuD,GAKT8xK,EAAG5hP,GAAK,KAHR0hP,EAAG1hP,GAAKuhB,QAQZigO,EAAO/8O,KAAKzE,GAEZ6hP,EAAG7hP,GAAKkhP,EAEJS,IACFA,EAAG3hP,GAAK2gP,EAAQ96N,IAMtB,GAAI67N,GAAMC,EAIR,IAFA97N,EAAI47N,EAAKr1O,GAEFyZ,EAAI27N,EAAOzhP,QAIZ6hP,EAFJ5hP,EAAIwhP,EAAO37N,MAEGq7N,GAEZK,EAAQ17N,GAAK67N,EAAG1hP,GAEhB6lB,KACSg8N,EAAG7hP,KAAOkhP,GAEnBK,EAAQ17N,GAAK87N,EAAG3hP,GAEhB6lB,KAGA27N,EAAO9xM,OAAO7pB,EAAG,GASzB,OAFA47N,EAAKz7J,GAAWw7J,EAAOzhP,OAEhBsI,EAAEs2O,mBAAmB,CAC1B93O,OAAQ06O,EACRh6O,MAAOi6O,EACP1D,IAAK2D,EACLh4O,KAAM,CAACs8E,EAAMC,GACb4vJ,SAAU1mB,QCvKL4yB,GAAmC,EAFnC,cACQ,CAAC,QAAS,gBAC6C,SAAUzM,GAClF,IAAImF,EAAQnF,EAAKmF,MACbtC,EAAc7C,EAAK6C,YAqBvB,OAAO,SAAqBvsO,EAAGrD,EAAG0vF,EAAUxd,GAE1C,IAAI4mK,EAAUz1O,EAAE+xO,QACZ2D,EAAS11O,EAAEmvM,OACXwmC,EAAO31O,EAAEgyO,KACT8C,EAAQ90O,EAAEysO,MACVsI,EAAM/0O,EAAE0sO,UAEZ,IAAK+I,EACH,MAAM,IAAIj6O,MAAM,sEAIlB,IAGI+nN,EAHAnpI,EAAO06J,EAAM,GACbz6J,EAAUy6J,EAAM,GAIhBO,EAAKhpJ,EAEU,iBAAR0oJ,IAETxxB,EAAKwxB,EAELp4O,EAAIkyO,EAAMnP,QAAQ/iO,EAAG4mN,GAErB8xB,EAAKxG,EAAM/hH,KAAKzgC,EAAU,CAACk3H,EAAIA,KAUjC,IANA,IAAI+xB,EAAQ,GAERl5O,EAAI,GAEJoqD,EAAI,GAEC/lD,EAAI,EAAGA,EAAI45E,EAAS55E,IAAK,CAIhC,IAFA,IAAI80O,EAAO90O,EAAI,EAENs1I,EAAK4/F,EAAKl1O,GAAIqyO,EAAK6C,EAAKl1O,EAAI,GAAIyZ,EAAI67H,EAAI77H,EAAI44N,EAAI54N,IAAK,CAE5D,IAAItd,EAAI84O,EAAOx7N,GAEf9d,EAAEQ,GAAK64O,EAAQv7N,GACfssC,EAAE5pD,GAAK24O,EAIT,IAAK,IAAIlhP,EAAI,EAAGA,EAAI+lF,EAAM/lF,IAEd,IAANoM,IAEF60O,EAAMjhP,GAAK,IAITmyD,EAAEnyD,KAAOkhP,EAEXD,EAAMjhP,GAAGoM,GAAKouE,EAAUwmK,EAAG14O,EAAGP,EAAE/H,IAAMghP,EAAGj5O,EAAE/H,GAAIsI,GAG/C24O,EAAMjhP,GAAGoM,GAAK9D,EAMpB,OAAO,IAAI4vO,EAAY,CACrBjyO,KAAMg7O,EACNx3O,KAAM,CAACs8E,EAAMC,GACb4vJ,SAAU1mB,QC7FL6yB,GAAmC,EAFnC,cACQ,CAAC,UACsD,SAAU1M,GAClF,IAAImF,EAAQnF,EAAKmF,MAgBjB,OAAO,SAAqBnyO,EAAGC,EAAG0vF,GAEhC,IA0BIk3H,EA1BAsxB,EAAQn4O,EAAE8vO,MACVsI,EAAQp4O,EAAE+vO,MACVsI,EAAMr4O,EAAEgwO,UAER2J,EAAQ15O,EAAE6vO,MACV2I,EAAQx4O,EAAE8vO,MACV2I,EAAMz4O,EAAE+vO,UAER4J,EAAQ,GAEZ,GAAIxB,EAAM1gP,SAAW+gP,EAAM/gP,OACzB,MAAM,IAAI+2O,EAAe2J,EAAM1gP,OAAQ+gP,EAAM/gP,QAI/C,IAAK,IAAI4L,EAAI,EAAGA,EAAI80O,EAAM1gP,OAAQ4L,IAAK,CAErC,GAAI80O,EAAM90O,KAAOm1O,EAAMn1O,GACrB,MAAM,IAAIu/H,WAAW,iCAAmCu1G,EAAQ,0BAA4BK,EAAQ,KAItGmB,EAAMt2O,GAAK80O,EAAM90O,GAMnB,IAAIq1O,EAAKhpJ,EAEU,iBAAR0oJ,GAAoBA,IAAQK,IAErC7xB,EAAKwxB,EAELM,EAAKxG,EAAM/hH,KAAKzgC,EAAU,CAACk3H,EAAIA,KAIjC,IAAI+xB,EAAQgB,EAAMliP,OAAS,EAAImiP,EAASlB,EAAI,EAAGiB,EAAOA,EAAM,GAAIzB,EAAOwB,GAAS,GAEhF,OAAO35O,EAAE+wO,kBAAkB,CACzBnzO,KAAMg7O,EACNx3O,KAAMw4O,EACNrM,SAAU1mB,KAId,SAASgzB,EAASv7O,EAAG0mF,EAAO1hF,EAAGlG,EAAG08O,EAAIC,GAEpC,IAAIC,EAAK,GAET,GAAIh1J,IAAU1hF,EAAE5L,OAAS,EAEvB,IAAK,IAAIC,EAAI,EAAGA,EAAIyF,EAAGzF,IAErBqiP,EAAGriP,GAAK2G,EAAEw7O,EAAGniP,GAAIoiP,EAAGpiP,SAItB,IAAK,IAAIoM,EAAI,EAAGA,EAAI3G,EAAG2G,IAErBi2O,EAAGj2O,GAAK81O,EAASv7O,EAAG0mF,EAAQ,EAAG1hF,EAAGA,EAAE0hF,EAAQ,GAAI80J,EAAG/1O,GAAIg2O,EAAGh2O,IAI9D,OAAOi2O,MCpFAC,GAAmC,EAFnC,cACQ,CAAC,UACsD,SAAUjN,GAClF,IAAImF,EAAQnF,EAAKmF,MAiBjB,OAAO,SAAqBnyO,EAAGC,EAAG0vF,EAAUxd,GAE1C,IAII00I,EAJAsxB,EAAQn4O,EAAE8vO,MACVsI,EAAQp4O,EAAE+vO,MACVsI,EAAMr4O,EAAEgwO,UAIR2I,EAAKhpJ,EAEU,iBAAR0oJ,IAETxxB,EAAKwxB,EAELp4O,EAAIkyO,EAAMnP,QAAQ/iO,EAAG4mN,GAErB8xB,EAAKxG,EAAM/hH,KAAKzgC,EAAU,CAACk3H,EAAIA,KAIjC,IAAI+xB,EAAQR,EAAM1gP,OAAS,EAAImiP,EAASlB,EAAI,EAAGP,EAAOA,EAAM,GAAID,EAAOl4O,EAAGkyE,GAAW,GAErF,OAAOnyE,EAAE+wO,kBAAkB,CACzBnzO,KAAMg7O,EACNx3O,KAAM,EAAMg3O,GACZ7K,SAAU1mB,KAId,SAASgzB,EAASv7O,EAAG0mF,EAAO1hF,EAAGlG,EAAG08O,EAAIC,EAAI5nK,GAExC,IAAI6nK,EAAK,GAET,GAAIh1J,IAAU1hF,EAAE5L,OAAS,EAEvB,IAAK,IAAIC,EAAI,EAAGA,EAAIyF,EAAGzF,IAErBqiP,EAAGriP,GAAKw6E,EAAU7zE,EAAEy7O,EAAID,EAAGniP,IAAM2G,EAAEw7O,EAAGniP,GAAIoiP,QAI5C,IAAK,IAAIh2O,EAAI,EAAGA,EAAI3G,EAAG2G,IAErBi2O,EAAGj2O,GAAK81O,EAASv7O,EAAG0mF,EAAQ,EAAG1hF,EAAGA,EAAE0hF,EAAQ,GAAI80J,EAAG/1O,GAAIg2O,EAAI5nK,GAI/D,OAAO6nK,MCjEAE,GAAmC,EAFnC,cACQ,CAAC,UACsD,SAAUlN,GAClF,IAAImF,EAAQnF,EAAKmF,MAqBjB,OAAO,SAAqB8F,EAAaC,EAAcvoJ,EAAUxd,GAE/D,IAAIgmK,EAAQF,EAAYnI,MACpBsI,EAAQH,EAAYlI,MACpBsI,EAAMJ,EAAYjI,UAElBsI,EAAUJ,EAAa7C,QACvBkD,EAASL,EAAazlC,OACtB+lC,EAAON,EAAa5C,KACpBmD,EAAQP,EAAanI,MACrB2I,EAAMR,EAAalI,UAEvB,GAAIoI,EAAM1gP,SAAW+gP,EAAM/gP,OACzB,MAAM,IAAI+2O,EAAe2J,EAAM1gP,OAAQ+gP,EAAM/gP,QAI/C,GAAI0gP,EAAM,KAAOK,EAAM,IAAML,EAAM,KAAOK,EAAM,GAC9C,MAAM,IAAI51G,WAAW,iCAAmCu1G,EAAQ,0BAA4BK,EAAQ,KAItG,IAAKH,EACH,MAAM,IAAIx5O,MAAM,sEAIlB,IAGI+nN,EAHAnpI,EAAO06J,EAAM,GACbz6J,EAAUy6J,EAAM,GAIhB3wK,EAAO,EAEPkxK,EAAKhpJ,EAEU,iBAAR0oJ,GAAoBA,IAAQK,IAErC7xB,EAAKwxB,EAEL5wK,EAAO0qK,EAAMnP,QAAQ,EAAGnc,GAExB8xB,EAAKxG,EAAM/hH,KAAKzgC,EAAU,CAACk3H,EAAIA,KAMjC,IAFA,IAAI+xB,EAAQ,GAEH58H,EAAI,EAAGA,EAAIt+B,EAAMs+B,IAExB48H,EAAM58H,GAAK,GAQb,IAJA,IAAIt8G,EAAI,GAEJoqD,EAAI,GAEC/lD,EAAI,EAAGA,EAAI45E,EAAS55E,IAAK,CAIhC,IAFA,IAAI80O,EAAO90O,EAAI,EAENs1I,EAAKm/F,EAAKz0O,GAAIqyO,EAAKoC,EAAKz0O,EAAI,GAAIyZ,EAAI67H,EAAI77H,EAAI44N,EAAI54N,IAAK,CAE5D,IAAI7lB,EAAI4gP,EAAO/6N,GAEf9d,EAAE/H,GAAKw6E,EAAUwmK,EAAGL,EAAQ96N,GAAI26N,EAAMxgP,GAAGoM,IAAM40O,EAAGR,EAAMxgP,GAAGoM,GAAIu0O,EAAQ96N,IACvEssC,EAAEnyD,GAAKkhP,EAIT,IAAK,IAAIp3N,EAAI,EAAGA,EAAIi8D,EAAMj8D,IAEpBqoC,EAAEroC,KAAOo3N,EAEXD,EAAMn3N,GAAG1d,GAAKrE,EAAE+hB,GAGhBm3N,EAAMn3N,GAAG1d,GAAKouE,EAAUwmK,EAAGlxK,EAAM0wK,EAAM12N,GAAG1d,IAAM40O,EAAGR,EAAM12N,GAAG1d,GAAI0jE,GAMtE,OAAOwwK,EAAYlH,kBAAkB,CACnCnzO,KAAMg7O,EACNx3O,KAAM,CAACs8E,EAAMC,GACb4vJ,SAAU1mB,QC7GLszB,GAAmC,EAFnC,cACQ,CAAC,QAAS,gBAC6C,SAAUnN,GAClF,IAAImF,EAAQnF,EAAKmF,MACbgD,EAAcnI,EAAKmI,YAoBvB,OAAO,SAAqBn1O,EAAGC,EAAG0vF,GAEhC,IAAIopJ,EAAU/4O,EAAEq1O,QACZ2D,EAASh5O,EAAEyyM,OACXwmC,EAAOj5O,EAAEs1O,KACT8C,EAAQp4O,EAAE+vO,MACVsI,EAAMr4O,EAAEgwO,UAERsI,EAAUr4O,EAAEo1O,QACZkD,EAASt4O,EAAEwyM,OACX+lC,EAAOv4O,EAAEq1O,KACTmD,EAAQx4O,EAAE8vO,MACV2I,EAAMz4O,EAAE+vO,UAEZ,GAAIoI,EAAM1gP,SAAW+gP,EAAM/gP,OACzB,MAAM,IAAI+2O,EAAe2J,EAAM1gP,OAAQ+gP,EAAM/gP,QAI/C,GAAI0gP,EAAM,KAAOK,EAAM,IAAML,EAAM,KAAOK,EAAM,GAC9C,MAAM,IAAI51G,WAAW,iCAAmCu1G,EAAQ,0BAA4BK,EAAQ,KAItG,IAGI5xB,EAHAnpI,EAAO06J,EAAM,GACbz6J,EAAUy6J,EAAM,GAIhBhrB,EAAK+nB,EAEL1tK,EAAO,EAEPkxK,EAAKhpJ,EAEU,iBAAR0oJ,GAAoBA,IAAQK,IAErC7xB,EAAKwxB,EAELjrB,EAAK+kB,EAAM/hH,KAAK+kH,EAAa,CAACtuB,EAAIA,IAElCp/I,EAAO0qK,EAAMnP,QAAQ,EAAGnc,GAExB8xB,EAAKxG,EAAM/hH,KAAKzgC,EAAU,CAACk3H,EAAIA,KAIjC,IAUIlvN,EAAGoM,EAAGyZ,EAAG44N,EAVT8C,EAAUH,GAAWT,EAAU,QAAKh/O,EACpC6/O,EAAS,GACTC,EAAO,GAEPC,EAAKH,EAAU,QAAK5/O,EACpBggP,EAAKJ,EAAU,QAAK5/O,EAEpBigP,EAAK,GACLC,EAAK,GAIT,IAAKz1O,EAAI,EAAGA,EAAI45E,EAAS55E,IAAK,CAE5Bq1O,EAAKr1O,GAAKo1O,EAAOzhP,OAEjB,IAAImhP,EAAO90O,EAAI,EAEf,IAAKyZ,EAAIy7N,EAAKl1O,GAAIqyO,EAAK6C,EAAKl1O,EAAI,GAAIyZ,EAAI44N,EAAI54N,IAE1C7lB,EAAIqhP,EAAOx7N,GAEX27N,EAAO/8O,KAAKzE,GAEZ4hP,EAAG5hP,GAAKkhP,EAEJQ,IACFA,EAAG1hP,GAAKohP,EAAQv7N,IAKpB,IAAKA,EAAIg7N,EAAKz0O,GAAIqyO,EAAKoC,EAAKz0O,EAAI,GAAIyZ,EAAI44N,EAAI54N,IAItC+7N,EAFJ5hP,EAAI4gP,EAAO/6N,MAEGq7N,GAEZM,EAAO/8O,KAAKzE,GAId6hP,EAAG7hP,GAAKkhP,EAEJS,IACFA,EAAG3hP,GAAK2gP,EAAQ96N,IAKpB,GAAI07N,EAIF,IAFA17N,EAAI47N,EAAKr1O,GAEFyZ,EAAI27N,EAAOzhP,QAAQ,CAIxB,IAAI0iP,EAAMb,EAFV5hP,EAAIwhP,EAAO37N,IAGP68N,EAAMb,EAAG7hP,GAEb,GAAIyiP,IAAQvB,GAAQwB,IAAQxB,EAAM,CAEhC,IAGIyB,EAAK3B,EAHAyB,IAAQvB,EAAOQ,EAAG1hP,GAAK8vE,EACvB4yK,IAAQxB,EAAOS,EAAG3hP,GAAK8vE,GAI3B2lJ,EAAGktB,EAAI7yK,GAOV0xK,EAAO9xM,OAAO7pB,EAAG,IALjB07N,EAAQ98O,KAAKk+O,GAEb98N,OAaV,OAFA47N,EAAKz7J,GAAWw7J,EAAOzhP,OAEhBsI,EAAEs2O,mBAAmB,CAC1B93O,OAAQ06O,EACRh6O,MAAOi6O,EACP1D,IAAK2D,EACLh4O,KAAM,CAACs8E,EAAMC,GACb4vJ,SAAU1mB,QChKL0zB,GAAmC,EAFnC,cACQ,CAAC,QAAS,gBAC6C,SAAUvN,GAClF,IAAImF,EAAQnF,EAAKmF,MACbgD,EAAcnI,EAAKmI,YAqBvB,OAAO,SAAqB7xO,EAAGrD,EAAG0vF,EAAUxd,GAE1C,IAAI4mK,EAAUz1O,EAAE+xO,QACZ2D,EAAS11O,EAAEmvM,OACXwmC,EAAO31O,EAAEgyO,KACT8C,EAAQ90O,EAAEysO,MACVsI,EAAM/0O,EAAE0sO,UAEZ,IAAK+I,EACH,MAAM,IAAIj6O,MAAM,sEAIlB,IAGI+nN,EAHAnpI,EAAO06J,EAAM,GACbz6J,EAAUy6J,EAAM,GAIhBhrB,EAAK+nB,EAEL1tK,EAAO,EAEPkxK,EAAKhpJ,EAEU,iBAAR0oJ,IAETxxB,EAAKwxB,EAELjrB,EAAK+kB,EAAM/hH,KAAK+kH,EAAa,CAACtuB,EAAIA,IAElCp/I,EAAO0qK,EAAMnP,QAAQ,EAAGnc,GAExB5mN,EAAIkyO,EAAMnP,QAAQ/iO,EAAG4mN,GAErB8xB,EAAKxG,EAAM/hH,KAAKzgC,EAAU,CAACk3H,EAAIA,KAQjC,IAJA,IAAIqyB,EAAU,GACVC,EAAS,GACTC,EAAO,GAEFr1O,EAAI,EAAGA,EAAI45E,EAAS55E,IAAK,CAEhCq1O,EAAKr1O,GAAKo1O,EAAOzhP,OAEjB,IAAK,IAAI2hJ,EAAK4/F,EAAKl1O,GAAIqyO,EAAK6C,EAAKl1O,EAAI,GAAIyZ,EAAI67H,EAAI77H,EAAI44N,EAAI54N,IAAK,CAE5D,IAAI7lB,EAAIqhP,EAAOx7N,GAEXtE,EAAIi5D,EAAUwmK,EAAG14O,EAAG84O,EAAQv7N,IAAMm7N,EAAGI,EAAQv7N,GAAIvd,GAEhDmtN,EAAGl0M,EAAGuuD,KAET0xK,EAAO/8O,KAAKzE,GACZuhP,EAAQ98O,KAAK8c,KAQnB,OAFAkgO,EAAKz7J,GAAWw7J,EAAOzhP,OAEhB4L,EAAEgzO,mBAAmB,CAC1B93O,OAAQ06O,EACRh6O,MAAOi6O,EACP1D,IAAK2D,EACLh4O,KAAM,CAACs8E,EAAMC,GACb4vJ,SAAU1mB,QC3FL2zB,GAAmC,EAFnC,cACQ,CAAC,QAAS,gBAC6C,SAAUxN,GAClF,IAAImF,EAAQnF,EAAKmF,MACbtC,EAAc7C,EAAK6C,YAqBvB,OAAO,SAAqBvsO,EAAGrD,EAAG0vF,EAAUxd,GAE1C,IAAI4mK,EAAUz1O,EAAE+xO,QACZ2D,EAAS11O,EAAEmvM,OACXwmC,EAAO31O,EAAEgyO,KACT8C,EAAQ90O,EAAEysO,MACVsI,EAAM/0O,EAAE0sO,UAEZ,IAAK+I,EACH,MAAM,IAAIj6O,MAAM,sEAIlB,IAGI+nN,EAHAnpI,EAAO06J,EAAM,GACbz6J,EAAUy6J,EAAM,GAIhBO,EAAKhpJ,EAEU,iBAAR0oJ,IAETxxB,EAAKwxB,EAELp4O,EAAIkyO,EAAMnP,QAAQ/iO,EAAG4mN,GAErB8xB,EAAKxG,EAAM/hH,KAAKzgC,EAAU,CAACk3H,EAAIA,KAUjC,IANA,IAAI+xB,EAAQ,GAERl5O,EAAI,GAEJoqD,EAAI,GAEC/lD,EAAI,EAAGA,EAAI45E,EAAS55E,IAAK,CAIhC,IAFA,IAAI80O,EAAO90O,EAAI,EAENs1I,EAAK4/F,EAAKl1O,GAAIqyO,EAAK6C,EAAKl1O,EAAI,GAAIyZ,EAAI67H,EAAI77H,EAAI44N,EAAI54N,IAAK,CAE5D,IAAItd,EAAI84O,EAAOx7N,GAEf9d,EAAEQ,GAAK64O,EAAQv7N,GACfssC,EAAE5pD,GAAK24O,EAIT,IAAK,IAAIlhP,EAAI,EAAGA,EAAI+lF,EAAM/lF,IAEd,IAANoM,IAEF60O,EAAMjhP,GAAK,IAITmyD,EAAEnyD,KAAOkhP,EAEXD,EAAMjhP,GAAGoM,GAAKouE,EAAUwmK,EAAG14O,EAAGP,EAAE/H,IAAMghP,EAAGj5O,EAAE/H,GAAIsI,GAG/C24O,EAAMjhP,GAAGoM,GAAKouE,EAAUwmK,EAAG14O,EAAG,GAAK04O,EAAG,EAAG14O,GAM/C,OAAO,IAAI4vO,EAAY,CACrBjyO,KAAMg7O,EACNx3O,KAAM,CAACs8E,EAAMC,GACb4vJ,SAAU1mB,QC7FL4zB,GAAmC,EAFnC,cACQ,CAAC,QAAS,gBAC6C,SAAUzN,GAClF,IAAImF,EAAQnF,EAAKmF,MACbtC,EAAc7C,EAAK6C,YAgBvB,OAAO,SAAqB7vO,EAAGC,EAAG0vF,GAEhC,IAAIyoJ,EAAQp4O,EAAE+vO,MACVsI,EAAMr4O,EAAEgwO,UAERyI,EAAQx4O,EAAE8vO,MACV2I,EAAMz4O,EAAE+vO,UAEZ,GAAIoI,EAAM1gP,SAAW+gP,EAAM/gP,OACzB,MAAM,IAAI+2O,EAAe2J,EAAM1gP,OAAQ+gP,EAAM/gP,QAI/C,GAAI0gP,EAAM,KAAOK,EAAM,IAAML,EAAM,KAAOK,EAAM,GAC9C,MAAM,IAAI51G,WAAW,iCAAmCu1G,EAAQ,0BAA4BK,EAAQ,KAItG,IAGI5xB,EAgBAlvN,EAAGoM,EAnBH25E,EAAO06J,EAAM,GACbz6J,EAAUy6J,EAAM,GAIhB3wK,EAAO,EAEPkxK,EAAKhpJ,EAEU,iBAAR0oJ,GAAoBA,IAAQK,IAErC7xB,EAAKwxB,EAEL5wK,EAAO0qK,EAAMnP,QAAQ,EAAGnc,GAExB8xB,EAAKxG,EAAM/hH,KAAKzgC,EAAU,CAACk3H,EAAIA,KAMjC,IAAI+xB,EAAQ,GAEZ,IAAKjhP,EAAI,EAAGA,EAAI+lF,EAAM/lF,IACpBihP,EAAMjhP,GAAK,GAIb,IAAI0hP,EAAK,GACLC,EAAK,GAELC,EAAK,GACLC,EAAK,GAET,IAAKz1O,EAAI,EAAGA,EAAI45E,EAAS55E,IAAK,CAE5B,IAAI80O,EAAO90O,EAAI,EAQf,IANA22O,EAAS16O,EAAG+D,EAAGw1O,EAAIF,EAAIR,GAGvB6B,EAASz6O,EAAG8D,EAAGy1O,EAAIF,EAAIT,GAGlBlhP,EAAI,EAAGA,EAAI+lF,EAAM/lF,IAAK,CAEzB,IAAIgjP,EAAKpB,EAAG5hP,KAAOkhP,EAAOQ,EAAG1hP,GAAK8vE,EAC9BmzK,EAAKpB,EAAG7hP,KAAOkhP,EAAOS,EAAG3hP,GAAK8vE,EAElCmxK,EAAMjhP,GAAGoM,GAAK40O,EAAGgC,EAAIC,IAKzB,OAAO,IAAI/K,EAAY,CACrBjyO,KAAMg7O,EACNx3O,KAAM,CAACs8E,EAAMC,GACb4vJ,SAAU1mB,KAId,SAAS6zB,EAAStrN,EAAGrrB,EAAG+lD,EAAGpqD,EAAGm5O,GAM5B,IAJA,IAAIr6O,EAAS4wB,EAAEimN,QACXn2O,EAAQkwB,EAAEqjL,OACVgjC,EAAMrmN,EAAEkmN,KAEH93N,EAAIi4N,EAAI1xO,GAAIqyO,EAAKX,EAAI1xO,EAAI,GAAIyZ,EAAI44N,EAAI54N,IAAK,CAEjD,IAAI7lB,EAAIuH,EAAMse,GAEdssC,EAAEnyD,GAAKkhP,EACPn5O,EAAE/H,GAAK6G,EAAOgf,QC5GhB,GAAO,WAEAq9N,GAAgC,EAAQ,GADhC,CAAC,QAAS,SAAU,SAAU,YAAa,cAAe,iBACN,SAAU7N,GAC/E,IAAImF,EAAQnF,EAAKmF,MACbz9N,EAASs4N,EAAKt4N,OACdk2N,EAASoC,EAAKpC,OACdiC,EAAYG,EAAKH,UACjBgD,EAAc7C,EAAK6C,YACnBuF,EAAepI,EAAKoI,aAgCxB,OAAOjD,EAAM,GAAM,CACjB,GAAI,WACF,MAAyB,WAAlBz9N,EAAOk2N,OAAsBA,EAAO,IAAM,IAEnD5Q,OAAQ,SAAgBjlM,GACtB,OAAO61M,EAAO71M,IAEhB,qBAAsB,SAAyB2oD,GAC7C,OAAOo9J,EAAUp9J,EAAMA,EAAwB,WAAlBhpE,EAAOk2N,OAAsB,aAAUtxO,IAEtE,6BAA8B,SAA+BokF,EAAM3oD,GACjE,OAAO+lN,EAAUp9J,EAAMA,EAAM3oD,IAE/B,yCAA0C,SAAwC2oD,EAAM65B,GACtF,OAAOujI,EAAUp9J,EAAM65B,EAAwB,WAAlB7iG,EAAOk2N,OAAsB,aAAUtxO,IAEtE,iDAAkD,SAA8CokF,EAAM65B,EAAMxiF,GAC1G,OAAO+lN,EAAUp9J,EAAM65B,EAAMxiF,IAE/Bl9B,MAAO,SAAeuJ,GACpB,OAAO25O,EAAgB35O,IAEzB,gBAAiB,SAAqBA,EAAM2zB,GAC1C,OAAOgmN,EAAgB35O,EAAM2zB,IAE/Bq4M,OAAQ,SAAgBhsO,GACtB,OAAO25O,EAAgB35O,EAAKskN,UAAWtkN,EAAKksO,YAE9C,iBAAkB,SAAsBlsO,EAAM2zB,GAC5C,OAAOgmN,EAAgB35O,EAAKskN,UAAW3wL,MAI3C,SAASgmN,EAAgB35O,EAAM2zB,GAC7B,OAAQ3zB,EAAK1J,QACX,KAAK,EACH,OAAOq9B,EAAS61M,EAAO71M,GAAU,GAEnC,KAAK,EACH,OAAO+lN,EAAU15O,EAAK,GAAIA,EAAK,GAAI2zB,GAErC,KAAK,EACH,OAAO+lN,EAAU15O,EAAK,GAAIA,EAAK,GAAI2zB,GAErC,QACE,MAAM,IAAIj2B,MAAM,0CAatB,SAASg8O,EAAUp9J,EAAM65B,EAAMxiF,GAE7B,IAAIimN,GAAM,EAAA7P,EAAA,IAAYztJ,KAAS,EAAAytJ,EAAA,IAAY5zH,GAAQs1H,EAAY,KAI/D,IAHI,EAAA1B,EAAA,IAAYztJ,KAAOA,EAAOA,EAAK4zI,aAC/B,EAAA6Z,EAAA,IAAY5zH,KAAOA,EAAOA,EAAK+5G,cAE9B,OAAU5zI,IAASA,EAAO,EAC7B,MAAM,IAAI5+E,MAAM,6DAGlB,KAAK,OAAUy4G,IAASA,EAAO,EAC7B,MAAM,IAAIz4G,MAAM,6DAGlB,IAAIo6D,EAAM8hL,EAAM,IAAInO,EAAU,GAAK,EAC/B/yK,EAAekhL,EAAM,IAAIA,EAAI,GAAK,EAClC55O,EAAO,CAACs8E,EAAM65B,GAElB,GAAIxiF,EAAQ,CAEV,GAAe,WAAXA,EACF,OAAOqgN,EAAazD,SAASvwO,EAAM83D,EAAK,EAAGY,GAG7C,GAAe,UAAX/kC,EACF,OAAO86M,EAAY8B,SAASvwO,EAAM83D,EAAK,EAAGY,GAG5C,MAAM,IAAIrgE,UAAU,wBAAyB8J,OAAOwxB,EAAQ,MAQ9D,IAJA,IAAI1T,EAAM,EAAO,GAAIjgB,EAAM04D,GAEvB9P,EAAU0zB,EAAO65B,EAAO75B,EAAO65B,EAE1BvxG,EAAI,EAAGA,EAAIgkD,EAAShkD,IAC3Bqb,EAAIrb,GAAGA,GAAKkzD,EAGd,OAAO73C,MC9IJ,SAAS45N,KACd,MAAM,IAAIn8O,MAAM,2CAEX,SAASo8O,KACd,MAAM,IAAIp8O,MAAM,0CCDlB,IAAI,GAAO,OAEAq8O,GAA4B,EAAQ,GAD5B,CAAC,QAAS,SAAU,YAC4B,SAAUnO,GAC3E,IAAImF,EAAQnF,EAAKmF,MACbz9N,EAASs4N,EAAKt4N,OACdk2N,EAASoC,EAAKpC,OAyBlB,OAAOuH,EAAM,GAAM,CACjB/E,OAAQ,SAAgB1tO,GACtB,OAAOA,EAAEnE,OAAOmE,EAAE0B,SAEpBvJ,MAAO+2O,EACP5U,OAAQ,SAAgBt6N,GACtB,MAAyB,UAAlBgV,EAAOk2N,OAAqB,CAAClrO,EAAEhI,QAAUkzO,EAAO,CAAClrO,EAAEhI,UAE5D,uDAAwD,SAA+CgI,GAErG,MAAyB,UAAlBgV,EAAOk2N,OAAqB,GAAKA,EAASA,EAAO,IDrCvD,WACL,MAAM,IAAI9rO,MAAM,wCCoCkDs8O,SCrB7C9G,GAA2B,MAAO,ICTzD,ICLI,GAAO,UAEA+G,GAA+B,EAAQ,GAD/B,CAAC,QAAS,SAAU,SAAU,cAAe,YAAa,WAAY,gBACnB,SAAUrO,GAC9E,IAAImF,EAAQnF,EAAKmF,MACbz9N,EAASs4N,EAAKt4N,OACdygO,EAAcnI,EAAKmI,YACnBvK,EAASoC,EAAKpC,OACdiC,EAAYG,EAAKH,UACjB5X,EAAW+X,EAAK/X,SAChB4a,EAAc7C,EAAK6C,YACnByL,EAAcpB,GAAkB,CAClC/H,MAAOA,IAELoJ,EAAcpB,GAAkB,CAClChI,MAAOA,EACPgD,YAAaA,IAEXqG,EAAchB,GAAkB,CAClCrI,MAAOA,EACPtC,YAAaA,IAEX4L,EAAc/B,GAAkB,CAClCvH,MAAOA,IAELuJ,EAAczB,GAAkB,CAClC9H,MAAOA,IAwCT,OAAOA,EAAM,GAAM,CACjB,mBAAoB,SAAwBzyO,EAAG+hB,GAC7C,OAAO/hB,IAAM+hB,EAAI,EAAI/hB,EAAI+hB,EAAI,GAAK,GAEpC,iBAAkB,SAAsB/hB,EAAG+hB,GACzC,OAAO,QAAY/hB,EAAG+hB,EAAG/M,EAAO02B,SAAW,EAAI1rC,EAAI+hB,EAAI,GAAK,GAE9D,uBAAwB,SAA4B/hB,EAAG+hB,GACrD,OAAO,GAAe/hB,EAAG+hB,EAAG/M,EAAO02B,SAAW,IAAIyhM,EAAU,GAAK,IAAIA,EAAUntO,EAAEqsN,IAAItqM,KAEvF,qBAAsB,SAA0B/hB,EAAG+hB,GACjD,OAAO,IAAIwzM,EAASv1N,EAAEoyN,QAAQrwM,KAEhC,mBAAoB,WAClB,MAAM,IAAIhoB,UAAU,wDAEtB,aAAc,SAAkBiG,EAAG+hB,GACjC,IAAK/hB,EAAEwzO,UAAUzxN,GACf,MAAM,IAAI3iB,MAAM,4CAGlB,OAAO7F,KAAKyG,EAAE/G,MAAO8oB,EAAE9oB,QAEzB,6BAA8B,SAAkC+G,EAAG+hB,GACjE,OAAO85N,EAAY77O,EAAG+hB,EAAGxoB,OAE3B,4BAA6B,SAAiCyG,EAAG+hB,GAC/D,OAAO65N,EAAY75N,EAAG/hB,EAAGzG,MAAM,IAEjC,4BAA6B,SAAiCyG,EAAG+hB,GAC/D,OAAO65N,EAAY57O,EAAG+hB,EAAGxoB,MAAM,IAEjC,2BAA4B,SAAgCyG,EAAG+hB,GAC7D,OAAOg6N,EAAY/7O,EAAG+hB,EAAGxoB,OAE3B,eAAgB,SAAoByG,EAAG+hB,GAErC,OAAOxoB,KAAK2xO,EAAOlrO,GAAIkrO,EAAOnpN,IAAIikM,WAEpC,gBAAiB,SAAqBhmN,EAAG+hB,GAEvC,OAAOxoB,KAAK2xO,EAAOlrO,GAAI+hB,IAEzB,gBAAiB,SAAqB/hB,EAAG+hB,GAEvC,OAAOxoB,KAAKyG,EAAGkrO,EAAOnpN,KAExB,oBAAqB,SAAyB/hB,EAAG+hB,GAC/C,OAAO+5N,EAAY97O,EAAG+hB,EAAGxoB,MAAM,IAEjC,mBAAoB,SAAwByG,EAAG+hB,GAC7C,OAAOi6N,EAAYh8O,EAAG+hB,EAAGxoB,MAAM,IAEjC,oBAAqB,SAAyByG,EAAG+hB,GAC/C,OAAO+5N,EAAY/5N,EAAG/hB,EAAGzG,MAAM,IAEjC,mBAAoB,SAAwByG,EAAG+hB,GAC7C,OAAOi6N,EAAYj6N,EAAG/hB,EAAGzG,MAAM,IAEjC,aAAc,SAAkByG,EAAG+hB,GAEjC,OAAOi6N,EAAY9Q,EAAOlrO,GAAI+hB,EAAGxoB,MAAM,GAAOysN,WAEhD,aAAc,SAAkBhmN,EAAG+hB,GAEjC,OAAOi6N,EAAY9Q,EAAOnpN,GAAI/hB,EAAGzG,MAAM,GAAMysN,gBClI/C,GAAO,UAEAi2B,GAA+B,EAAQ,GAD/B,CAAC,QAAS,SAAU,SAAU,gBACqB,SAAU3O,GAC9E,IAAImF,EAAQnF,EAAKmF,MACbz9N,EAASs4N,EAAKt4N,OACdk2N,EAASoC,EAAKpC,OACdiF,EAAc7C,EAAK6C,YACnByL,EAAcpB,GAAkB,CAClC/H,MAAOA,IAELyJ,EAAcnB,GAAkB,CAClCtI,MAAOA,EACPtC,YAAaA,IAEX2L,EAAchB,GAAkB,CAClCrI,MAAOA,EACPtC,YAAaA,IAEX4L,EAAc/B,GAAkB,CAClCvH,MAAOA,IAELuJ,EAAczB,GAAkB,CAClC9H,MAAOA,IAkCT,OAAOA,EAAM,GAAM,CACjB,mBAAoB,SAAwBzyO,EAAG+hB,GAC7C,OAAO/hB,EAAI+hB,GAEb,iBAAkB,SAAsB/hB,EAAG+hB,GACzC,OAAO/hB,EAAI+hB,KAAM,QAAY/hB,EAAG+hB,EAAG/M,EAAO02B,UAE5C,uBAAwB,SAA4B1rC,EAAG+hB,GACrD,OAAO/hB,EAAE8vN,GAAG/tM,KAAO,GAAe/hB,EAAG+hB,EAAG/M,EAAO02B,UAEjD,qBAAsB,SAA0B1rC,EAAG+hB,GACjD,OAAyB,IAAlB/hB,EAAEoyN,QAAQrwM,IAEnB,mBAAoB,SAAwB/hB,EAAG+hB,GAC7C,MAAM,IAAIhoB,UAAU,wDAEtB,aAAc,SAAkBiG,EAAG+hB,GACjC,IAAK/hB,EAAEwzO,UAAUzxN,GACf,MAAM,IAAI3iB,MAAM,4CAGlB,OAAO7F,KAAKyG,EAAE/G,MAAO8oB,EAAE9oB,QAEzB,6BAA8B,SAAkC+G,EAAG+hB,GACjE,OAAOm6N,EAAYl8O,EAAG+hB,EAAGxoB,OAE3B,4BAA6B,SAAiCyG,EAAG+hB,GAC/D,OAAO65N,EAAY75N,EAAG/hB,EAAGzG,MAAM,IAEjC,4BAA6B,SAAiCyG,EAAG+hB,GAC/D,OAAO65N,EAAY57O,EAAG+hB,EAAGxoB,MAAM,IAEjC,2BAA4B,SAAgCyG,EAAG+hB,GAC7D,OAAOg6N,EAAY/7O,EAAG+hB,EAAGxoB,OAE3B,eAAgB,SAAoByG,EAAG+hB,GAErC,OAAOxoB,KAAK2xO,EAAOlrO,GAAIkrO,EAAOnpN,IAAIikM,WAEpC,gBAAiB,SAAqBhmN,EAAG+hB,GAEvC,OAAOxoB,KAAK2xO,EAAOlrO,GAAI+hB,IAEzB,gBAAiB,SAAqB/hB,EAAG+hB,GAEvC,OAAOxoB,KAAKyG,EAAGkrO,EAAOnpN,KAExB,oBAAqB,SAAyB/hB,EAAG+hB,GAC/C,OAAO+5N,EAAY97O,EAAG+hB,EAAGxoB,MAAM,IAEjC,mBAAoB,SAAwByG,EAAG+hB,GAC7C,OAAOi6N,EAAYh8O,EAAG+hB,EAAGxoB,MAAM,IAEjC,oBAAqB,SAAyByG,EAAG+hB,GAC/C,OAAO+5N,EAAY/5N,EAAG/hB,EAAGzG,MAAM,IAEjC,mBAAoB,SAAwByG,EAAG+hB,GAC7C,OAAOi6N,EAAYj6N,EAAG/hB,EAAGzG,MAAM,IAEjC,aAAc,SAAkByG,EAAG+hB,GAEjC,OAAOi6N,EAAY9Q,EAAOlrO,GAAI+hB,EAAGxoB,MAAM,GAAOysN,WAEhD,aAAc,SAAkBhmN,EAAG+hB,GAEjC,OAAOi6N,EAAY9Q,EAAOnpN,GAAI/hB,EAAGzG,MAAM,GAAMysN,gBCzH/C,GAAO,SAEAm2B,GAA8B,EAAQ,GAD9B,CAAC,QAAS,SAAU,SAAU,gBACoB,SAAU7O,GAC7E,IAAImF,EAAQnF,EAAKmF,MACbz9N,EAASs4N,EAAKt4N,OACdk2N,EAASoC,EAAKpC,OACdiF,EAAc7C,EAAK6C,YACnByL,EAAcpB,GAAkB,CAClC/H,MAAOA,IAELyJ,EAAcnB,GAAkB,CAClCtI,MAAOA,EACPtC,YAAaA,IAEX2L,EAAchB,GAAkB,CAClCrI,MAAOA,EACPtC,YAAaA,IAEX4L,EAAc/B,GAAkB,CAClCvH,MAAOA,IAELuJ,EAAczB,GAAkB,CAClC9H,MAAOA,IAkCT,OAAOA,EAAM,GAAM,CACjB,mBAAoB,SAAwBzyO,EAAG+hB,GAC7C,OAAO/hB,EAAI+hB,GAEb,iBAAkB,SAAsB/hB,EAAG+hB,GACzC,OAAO/hB,EAAI+hB,KAAM,QAAY/hB,EAAG+hB,EAAG/M,EAAO02B,UAE5C,uBAAwB,SAA4B1rC,EAAG+hB,GACrD,OAAO/hB,EAAEiuN,GAAGlsM,KAAO,GAAe/hB,EAAG+hB,EAAG/M,EAAO02B,UAEjD,qBAAsB,SAA0B1rC,EAAG+hB,GACjD,OAAwB,IAAjB/hB,EAAEoyN,QAAQrwM,IAEnB,mBAAoB,WAClB,MAAM,IAAIhoB,UAAU,wDAEtB,aAAc,SAAkBiG,EAAG+hB,GACjC,IAAK/hB,EAAEwzO,UAAUzxN,GACf,MAAM,IAAI3iB,MAAM,4CAGlB,OAAO7F,KAAKyG,EAAE/G,MAAO8oB,EAAE9oB,QAEzB,6BAA8B,SAAkC+G,EAAG+hB,GACjE,OAAOm6N,EAAYl8O,EAAG+hB,EAAGxoB,OAE3B,4BAA6B,SAAiCyG,EAAG+hB,GAC/D,OAAO65N,EAAY75N,EAAG/hB,EAAGzG,MAAM,IAEjC,4BAA6B,SAAiCyG,EAAG+hB,GAC/D,OAAO65N,EAAY57O,EAAG+hB,EAAGxoB,MAAM,IAEjC,2BAA4B,SAAgCyG,EAAG+hB,GAC7D,OAAOg6N,EAAY/7O,EAAG+hB,EAAGxoB,OAE3B,eAAgB,SAAoByG,EAAG+hB,GAErC,OAAOxoB,KAAK2xO,EAAOlrO,GAAIkrO,EAAOnpN,IAAIikM,WAEpC,gBAAiB,SAAqBhmN,EAAG+hB,GAEvC,OAAOxoB,KAAK2xO,EAAOlrO,GAAI+hB,IAEzB,gBAAiB,SAAqB/hB,EAAG+hB,GAEvC,OAAOxoB,KAAKyG,EAAGkrO,EAAOnpN,KAExB,oBAAqB,SAAyB/hB,EAAG+hB,GAC/C,OAAO+5N,EAAY97O,EAAG+hB,EAAGxoB,MAAM,IAEjC,mBAAoB,SAAwByG,EAAG+hB,GAC7C,OAAOi6N,EAAYh8O,EAAG+hB,EAAGxoB,MAAM,IAEjC,oBAAqB,SAAyByG,EAAG+hB,GAC/C,OAAO+5N,EAAY/5N,EAAG/hB,EAAGzG,MAAM,IAEjC,mBAAoB,SAAwByG,EAAG+hB,GAC7C,OAAOi6N,EAAYj6N,EAAG/hB,EAAGzG,MAAM,IAEjC,aAAc,SAAkByG,EAAG+hB,GAEjC,OAAOi6N,EAAY9Q,EAAOlrO,GAAI+hB,EAAGxoB,MAAM,GAAOysN,WAEhD,aAAc,SAAkBhmN,EAAG+hB,GAEjC,OAAOi6N,EAAY9Q,EAAOnpN,GAAI/hB,EAAGzG,MAAM,GAAMysN,gBC3H/C,GAAO,UCHAo2B,ID+IsB,EAAQ,GAAM,CAAC,QAAS,gBAAgB,SAAUlO,GACjF,IAAIuE,EAAQvE,EAAMuE,MACdgD,EAAcvH,EAAMuH,YACxB,OAAOhD,EAAM,GAAM,CACjB,WAAY,SAAgBzyO,EAAG+hB,GAE7B,OAAU,OAAN/hB,EACW,OAAN+hB,EAGC,OAANA,EACW,OAAN/hB,OAGCpG,IAANoG,OACWpG,IAANmoB,OAGCnoB,IAANmoB,OACWnoB,IAANoG,GAGDy1O,EAAYz1O,EAAG+hB,SCrKwB,EAF1C,gBACQ,CAAC,UAAW,WACkD,SAAUurN,GACzF,IAAI+O,EAAU/O,EAAK+O,QACfC,EAAShP,EAAKgP,OACdC,EAAgB,EAAM98O,KAAK2Y,KAAK,EAAM3Y,KAAK6C,KAAK,IAAQ,GAO5D,SAASk6O,IACP,KAAMjjP,gBAAgBijP,GACpB,MAAM,IAAIj0B,YAAY,oDAIxBhvN,KAAKkjP,SAAW,KAChBljP,KAAK82O,MAAQ,EA8Lf,SAASqM,EAAKpyL,EAAS/iC,EAAMq2G,GAE3Br2G,EAAK0xB,KAAKC,MAAQ3xB,EAAK2xB,MACvB3xB,EAAK2xB,MAAMD,KAAO1xB,EAAK0xB,KACvB2kF,EAAO++G,SAEH/+G,EAAOL,QAAUh2G,IACnBq2G,EAAOL,MAAQh2G,EAAK2xB,OAIA,IAAlB0kF,EAAO++G,SACT/+G,EAAOL,MAAQ,MAIjBh2G,EAAK0xB,KAAOqR,EACZ/iC,EAAK2xB,MAAQoR,EAAQpR,MACrBoR,EAAQpR,MAAQ3xB,EAChBA,EAAK2xB,MAAMD,KAAO1xB,EAElBA,EAAKq2G,OAAS,KAEdr2G,EAAK4xN,MAAO,EAUd,SAASyD,EAActyL,EAAS/iC,GAE9B,IAAIq2G,EAASr2G,EAAKq2G,OAEbA,IAKAr2G,EAAK4xN,MAIRuD,EAAKpyL,EAAS/iC,EAAMq2G,GAGpBg/G,EAAch/G,IANdr2G,EAAK4xN,MAAO,GAlOhBqD,EAAc7hP,UAAUqiB,KAAO,gBAC/Bw/N,EAAc7hP,UAAUkiP,iBAAkB,EAQ1CL,EAAc7hP,UAAUmiP,OAAS,SAAUhkP,EAAKG,GAE9C,IAAIsuB,EAAO,CACTzuB,IAAKA,EACLG,MAAOA,EACP0jP,OAAQ,GAGV,GAAIpjP,KAAKkjP,SAAU,CAEjB,IAAInyL,EAAU/wD,KAAKkjP,SAEnBl1N,EAAK0xB,KAAOqR,EACZ/iC,EAAK2xB,MAAQoR,EAAQpR,MACrBoR,EAAQpR,MAAQ3xB,EAChBA,EAAK2xB,MAAMD,KAAO1xB,EAEd80N,EAAQvjP,EAAKwxD,EAAQxxD,OAEvBS,KAAKkjP,SAAWl1N,QAIlBA,EAAK0xB,KAAO1xB,EACZA,EAAK2xB,MAAQ3xB,EAEbhuB,KAAKkjP,SAAWl1N,EAMlB,OAFAhuB,KAAK82O,QAEE9oN,GAQTi1N,EAAc7hP,UAAU+G,KAAO,WAC7B,OAAOnI,KAAK82O,OAQdmM,EAAc7hP,UAAUi9H,MAAQ,WAC9Br+H,KAAKkjP,SAAW,KAChBljP,KAAK82O,MAAQ,GAQfmM,EAAc7hP,UAAU4oI,QAAU,WAChC,OAAsB,IAAfhqI,KAAK82O,OASdmM,EAAc7hP,UAAUoiP,eAAiB,WAEvC,IAAIx1N,EAAOhuB,KAAKkjP,SAEhB,GAAa,OAATl1N,EACF,OAAOA,EAUT,IANA,IAAI+iC,EAAU/wD,KAAKkjP,SAEfO,EAAmBz1N,EAAKo1N,OAExB38O,EAAIunB,EAAKg2G,MAENy/G,EAAmB,GAAG,CAE3B,IAAIC,EAAYj9O,EAAEk5C,MAElBl5C,EAAEi5C,KAAKC,MAAQl5C,EAAEk5C,MACjBl5C,EAAEk5C,MAAMD,KAAOj5C,EAAEi5C,KAEjBj5C,EAAEi5C,KAAOqR,EACTtqD,EAAEk5C,MAAQoR,EAAQpR,MAClBoR,EAAQpR,MAAQl5C,EAChBA,EAAEk5C,MAAMD,KAAOj5C,EAEfA,EAAE49H,OAAS,KACX59H,EAAIi9O,EACJD,IAsBF,OAlBAz1N,EAAK0xB,KAAKC,MAAQ3xB,EAAK2xB,MACvB3xB,EAAK2xB,MAAMD,KAAO1xB,EAAK0xB,KAIrBqR,EAFE/iC,IAASA,EAAK2xB,MAEN,KAqJd,SAA0BoR,EAAS5oD,GAEjC,IAkBIqgB,EAlBAmtN,EAAYzvO,KAAK8H,MAAM9H,KAAK2Y,IAAI1W,GAAQ66O,GAAiB,EAEzDl9O,EAAQ,IAAIlH,MAAM+2O,GAElBgO,EAAW,EACXl9O,EAAIsqD,EAER,GAAItqD,EAIF,IAHAk9O,IACAl9O,EAAIA,EAAEk5C,MAECl5C,IAAMsqD,GACX4yL,IACAl9O,EAAIA,EAAEk5C,MAOV,KAAOgkM,EAAW,GAAG,CAMnB,IAJA,IAAI52O,EAAItG,EAAE28O,OAENlgP,EAAOuD,EAAEk5C,MAIXn3B,EAAI1iB,EAAMiH,IAFC,CASX,GAAIg2O,EAAOt8O,EAAElH,IAAKipB,EAAEjpB,KAAM,CACxB,IAAIyG,EAAOwiB,EACXA,EAAI/hB,EACJA,EAAIT,EAIN49O,EAAWp7N,EAAG/hB,GAGdX,EAAMiH,GAAK,KACXA,IAIFjH,EAAMiH,GAAKtG,EAEXA,EAAIvD,EACJygP,IAIF5yL,EAAU,KAEV,IAAK,IAAIryD,EAAI,EAAGA,EAAIi3O,EAAWj3O,KAE7B8pB,EAAI1iB,EAAMpH,MAONqyD,GAEFvoC,EAAEk3B,KAAKC,MAAQn3B,EAAEm3B,MACjBn3B,EAAEm3B,MAAMD,KAAOl3B,EAAEk3B,KAEjBl3B,EAAEk3B,KAAOqR,EACTvoC,EAAEm3B,MAAQoR,EAAQpR,MAClBoR,EAAQpR,MAAQn3B,EAChBA,EAAEm3B,MAAMD,KAAOl3B,EAEXs6N,EAAQt6N,EAAEjpB,IAAKwxD,EAAQxxD,OACzBwxD,EAAUvoC,IAGZuoC,EAAUvoC,GAId,OAAOuoC,EAxOK8yL,CAFV9yL,EAAU/iC,EAAK2xB,MAEqB3/C,KAAK82O,OAI3C92O,KAAK82O,QAEL92O,KAAKkjP,SAAWnyL,EAET/iC,GAWTi1N,EAAc7hP,UAAUm0L,OAAS,SAAUvnK,GAEzChuB,KAAKkjP,SAYP,SAAsBnyL,EAAS/iC,EAAMzuB,GAEnCyuB,EAAKzuB,KAd8C,EAgBnD,IAAI8kI,EAASr2G,EAAKq2G,OAgBlB,OAdIA,GAAUy+G,EAAQ90N,EAAKzuB,IAAK8kI,EAAO9kI,OAErC4jP,EAAKpyL,EAAS/iC,EAAMq2G,GAGpBg/G,EAActyL,EAASszE,IAIrBy+G,EAAQ90N,EAAKzuB,IAAKwxD,EAAQxxD,OAC5BwxD,EAAU/iC,GAIL+iC,EAhCS+yL,CAAa9jP,KAAKkjP,SAAUl1N,GAE5ChuB,KAAKwjP,kBAiGP,IAAII,EAAa,SAAoB51N,EAAMq2G,GAEzCr2G,EAAK0xB,KAAKC,MAAQ3xB,EAAK2xB,MACvB3xB,EAAK2xB,MAAMD,KAAO1xB,EAAK0xB,KAEvB1xB,EAAKq2G,OAASA,EAETA,EAAOL,OAKVh2G,EAAK0xB,KAAO2kF,EAAOL,MACnBh2G,EAAK2xB,MAAQ0kF,EAAOL,MAAMrkF,MAC1B0kF,EAAOL,MAAMrkF,MAAQ3xB,EACrBA,EAAK2xB,MAAMD,KAAO1xB,IAPlBq2G,EAAOL,MAAQh2G,EACfA,EAAK2xB,MAAQ3xB,EACbA,EAAK0xB,KAAO1xB,GASdq2G,EAAO++G,SAEPp1N,EAAK4xN,MAAO,GA8Fd,OAAOqD,IACN,CACDxP,SAAS,KCxXAsQ,GAA2B,EAF3B,MACQ,CAAC,QAAS,SAAU,YAAa,cAAe,cAAe,iBAChB,SAAUhQ,GAC1E,IAAImF,EAAQnF,EAAKmF,MACbvH,EAASoC,EAAKpC,OACdqS,EAAYjQ,EAAKiQ,UACjB9H,EAAcnI,EAAKmI,YACnBtF,EAAc7C,EAAK6C,YAEnBqN,GADelQ,EAAKoI,aACN4C,GAAkB,CAClC7F,MAAOA,KAELgL,EAAcrE,GAAkB,CAClC3G,MAAOA,EACPgD,YAAaA,IAEXiI,EAAc3D,GAAkB,CAClCtH,MAAOA,EACPtC,YAAaA,IAEX4L,EAAc/B,GAAkB,CAClCvH,MAAOA,IAELuJ,EAAczB,GAAkB,CAClC9H,MAAOA,IAqCT,OAAOA,EA7DE,MA6DU/G,EAAO,CAExB,2BAA4B,SAAgC1rO,EAAG+hB,GAC7D,OAAOg6N,EAAY/7O,EAAG+hB,EAAGw7N,IAE3B,4BAA6B,SAAiCv9O,EAAG+hB,GAC/D,OAAOy7N,EAAYx9O,EAAG+hB,EAAGw7N,GAAW,IAEtC,4BAA6B,SAAiCv9O,EAAG+hB,GAC/D,OAAOy7N,EAAYz7N,EAAG/hB,EAAGu9O,GAAW,IAEtC,6BAA8B,SAAkCv9O,EAAG+hB,GACjE,OAAO07N,EAAYz9O,EAAG+hB,EAAGw7N,IAE3B,eAAgB,SAAoBv9O,EAAG+hB,GAErC,OAAOxoB,KAAK2xO,EAAOlrO,GAAIkrO,EAAOnpN,IAAIikM,WAEpC,gBAAiB,SAAqBhmN,EAAG+hB,GAEvC,OAAOxoB,KAAK2xO,EAAOlrO,GAAI+hB,IAEzB,gBAAiB,SAAqB/hB,EAAG+hB,GAEvC,OAAOxoB,KAAKyG,EAAGkrO,EAAOnpN,KAExB,mBAAoB,SAAwB/hB,EAAG+hB,GAC7C,OAAOi6N,EAAYh8O,EAAG+hB,EAAGw7N,GAAW,IAEtC,oBAAqB,SAAyBv9O,EAAG+hB,GAC/C,OAAO27N,EAAY19O,EAAG+hB,EAAGw7N,GAAW,IAEtC,mBAAoB,SAAwBv9O,EAAG+hB,GAC7C,OAAOi6N,EAAYj6N,EAAG/hB,EAAGu9O,GAAW,IAEtC,oBAAqB,SAAyBv9O,EAAG+hB,GAC/C,OAAO27N,EAAY37N,EAAG/hB,EAAGu9O,GAAW,IAEtC,aAAc,SAAkBv9O,EAAG+hB,GAEjC,OAAOi6N,EAAY9Q,EAAOlrO,GAAI+hB,EAAGw7N,GAAW,GAAOv3B,WAErD,aAAc,SAAkBhmN,EAAG+hB,GAEjC,OAAOi6N,EAAY9Q,EAAOnpN,GAAI/hB,EAAGu9O,GAAW,GAAMv3B,WAEpD,WAAYu3B,EACZ,mBAAoB,SAAmBv9O,EAAG+hB,EAAGxb,GAG3C,IAFA,IAAI7F,EAASnH,KAAKyG,EAAG+hB,GAEZ9pB,EAAI,EAAGA,EAAIsO,EAAKvO,OAAQC,IAC/ByI,EAASnH,KAAKmH,EAAQ6F,EAAKtO,IAG7B,OAAOyI,IAER68O,EAAUI,gBCxHJC,GAA2B,EAF3B,MACQ,CAAC,QAAS,YAAa,iBAAkB,OAAQ,SACF,SAAUtQ,GAC1E,IAAImF,EAAQnF,EAAKmF,MACb8K,EAAYjQ,EAAKiQ,UACjBM,EAAiBvQ,EAAKuQ,eACtBC,EAAOxQ,EAAKwQ,KACZp8O,EAAO4rO,EAAK5rO,KAyBhB,OAAO+wO,EAhCE,MAgCU,CACjB,2CAgCF,SAAmBnyO,EAAGC,GACpB,IAAIqnE,EAAIm2K,EAAaz9O,EAAGC,GAEpBk4O,GAAQ,EAAAhN,EAAA,IAASnrO,GAAKA,EAAE8vO,MAAQ9vO,EAChCq4O,GAAM,EAAAlN,EAAA,IAASnrO,GAAKA,EAAEgwO,eAAY12O,EAClCqgP,GAAQ,EAAAxO,EAAA,IAASlrO,GAAKA,EAAE6vO,MAAQ7vO,EAChCy4O,GAAM,EAAAvN,EAAA,IAASlrO,GAAKA,EAAE+vO,eAAY12O,EAElCokP,EAAgC,IAApB3N,EAAM/vO,GAAGtI,OACrBimP,EAAgC,IAApB5N,EAAM9vO,GAAGvI,OACrB+lB,EAAMw/N,EACNpvM,EAAM0vM,EAEV,GAAIlF,GAAOK,GAAOL,IAAQK,GAAsB,iBAARL,EAAkB,CACxD,IAAIxxB,EAAKwxB,EAET56N,EAAM00N,EAAM/hH,KAAK6sH,EAAW,CAACp2B,EAAIA,IACjCh5K,EAAMskM,EAAM/hH,KAAKmtH,EAAgB,CAAC12B,EAAIA,IAIxC,IAAK62B,IAAcC,EAAW,CAG5B,IAFA,IAAIv3O,EAAIynC,EAAI2vM,EAAKrF,EAAM,IAAKwB,EAAM,IAEzBhiP,EAAI,EAAGA,EAAI2vE,EAAG3vE,IACrByO,EAAIqX,EAAIrX,EAAGynC,EAAI2vM,EAAKrF,EAAMxgP,IAAKgiP,EAAMhiP,KAGvC,OAAOyO,EAIT,IAAKs3O,GAAaC,EAAW,CAG3B,IAFA,IAAIC,EAAK/vM,EAAI2vM,EAAKrF,EAAM,IAAKwB,EAAM,GAAG,IAE7Bz9O,EAAK,EAAGA,EAAKorE,EAAGprE,IACvB0hP,EAAKngO,EAAImgO,EAAI/vM,EAAI2vM,EAAKrF,EAAMj8O,IAAMy9O,EAAMz9O,GAAI,KAG9C,OAAO0hP,EAIT,GAAIF,IAAcC,EAAW,CAG3B,IAFA,IAAIE,EAAMhwM,EAAI2vM,EAAKrF,EAAM,GAAG,IAAKwB,EAAM,IAE9B/C,EAAM,EAAGA,EAAMtvK,EAAGsvK,IACzBiH,EAAMpgO,EAAIogO,EAAKhwM,EAAI2vM,EAAKrF,EAAMvB,GAAK,IAAK+C,EAAM/C,KAGhD,OAAOiH,EAIT,GAAIH,GAAaC,EAAW,CAG1B,IAFA,IAAIG,EAAMjwM,EAAI2vM,EAAKrF,EAAM,GAAG,IAAKwB,EAAM,GAAG,IAEjC9C,EAAM,EAAGA,EAAMvvK,EAAGuvK,IACzBiH,EAAMrgO,EAAIqgO,EAAKjwM,EAAI2vM,EAAKrF,EAAMtB,GAAK,IAAK8C,EAAM9C,GAAK,KAGrD,OAAOiH,IA5FT,6BAgGF,SAAoBp+O,EAAG+hB,GACrBg8N,EAAa/9O,EAAG+hB,GAahB,IAXA,IAAIs8N,EAASr+O,EAAE+yM,OACXurC,EAAUt+O,EAAE21O,QACZ4I,EAASx8N,EAAEgxL,OACXyrC,EAAUz8N,EAAE4zN,QAEZjvO,EAAI,EACJqX,EAAMw/N,EACNpvM,EAAM0vM,EACN5lP,EAAI,EACJoM,EAAI,EAEDpM,EAAIomP,EAAOrmP,QAAUqM,EAAIk6O,EAAOvmP,QAAQ,CAC7C,IAAIm8O,EAAIkK,EAAOpmP,GACXm8O,EAAImK,EAAOl6O,GAEX8vO,EAAIC,EACNn8O,IAIEk8O,EAAIC,EACN/vO,IAIE8vO,IAAMC,IACR1tO,EAAIqX,EAAIrX,EAAGynC,EAAImwM,EAAQrmP,GAAIumP,EAAQn6O,KACnCpM,IACAoM,KAIJ,OAAOqC,KAhIT,SAASq3O,EAAa/9O,EAAG+hB,GACvB,IAII08N,EAAMC,EAJNhrG,EAAQ28F,EAAMrwO,GAEd2+O,EAAQtO,EAAMtuN,GAIlB,GAAqB,IAAjB2xH,EAAM17I,OACRymP,EAAO/qG,EAAM,OACR,IAAqB,IAAjBA,EAAM17I,QAA6B,IAAb07I,EAAM,GAGrC,MAAM,IAAIvQ,WAAW,2DAA6DuQ,EAAMnqI,KAAK,MAAQ,KAFrGk1O,EAAO/qG,EAAM,GAKf,GAAqB,IAAjBirG,EAAM3mP,OACR0mP,EAAOC,EAAM,OACR,IAAqB,IAAjBA,EAAM3mP,QAA6B,IAAb2mP,EAAM,GAGrC,MAAM,IAAIx7G,WAAW,2DAA6Dw7G,EAAMp1O,KAAK,MAAQ,KAFrGm1O,EAAOC,EAAM,GAKf,GAAIF,IAASC,EAAM,MAAM,IAAIv7G,WAAW,mCAAqCs7G,EAAO,OAASC,EAAO,KACpG,GAAa,IAATD,EAAY,MAAM,IAAIt7G,WAAW,qDACrC,OAAOs7G,EA2GT,SAASpO,EAAMrwO,GACb,OAAO,EAAAyrO,EAAA,IAASzrO,GAAKA,EAAE0B,OAASA,EAAK1B,OCvK9B4+O,GAA2B,EAF3B,MACQ,CAAC,UAC8C,SAAUtR,GA2B1E,OAAOmF,EA1BKnF,EAAKmF,OAHR,MA6BU,CACjBrL,OAAQwM,GACR7nO,QAAS,SAAiB/L,GACxB,OAAOA,EAAEwsC,OAEX2gM,UAAW,SAAmBntO,GAC5B,OAAOA,EAAEwsC,OAEX+oL,SAAU,SAAkBv1N,GAC1B,OAAOA,EAAEwsC,OAEX,iBAAkB,SAAqBxsC,GAErC,OAAO4lI,GAAQ5lI,EAAGzG,MAAM,IAE1B85O,KAAM,SAAcrzO,GAClB,OAAOA,EAAEwsC,YC1CX,GAAO,WAEAqyM,GAAgC,EAAQ,GADhC,CAAC,QAAS,SAAU,YAAa,iBAAkB,cAAe,QACd,SAAUvR,GAC/E,IAAImF,EAAQnF,EAAKmF,MACbvH,EAASoC,EAAKpC,OACdqS,EAAYjQ,EAAKiQ,UACjBM,EAAiBvQ,EAAKuQ,eACtBpI,EAAcnI,EAAKmI,YACnBvyL,EAAMoqL,EAAKpqL,IACX47L,EAAcjE,GAAkB,CAClCpI,MAAOA,EACPgD,YAAaA,IAEXuG,EAAczB,GAAkB,CAClC9H,MAAOA,IAGT,SAASsM,EAA0BC,EAAOC,GAExC,OAAQD,EAAMhnP,QACZ,KAAK,EAEH,OAAQinP,EAAMjnP,QACZ,KAAK,EAEH,GAAIgnP,EAAM,KAAOC,EAAM,GAErB,MAAM,IAAI97G,WAAW,2EAGvB,MAEF,KAAK,EAEH,GAAI67G,EAAM,KAAOC,EAAM,GAErB,MAAM,IAAI97G,WAAW,wDAA0D67G,EAAM,GAAK,6BAA+BC,EAAM,GAAK,KAGtI,MAEF,QACE,MAAM,IAAI7/O,MAAM,+DAAiE6/O,EAAMjnP,OAAS,gBAGpG,MAEF,KAAK,EAEH,OAAQinP,EAAMjnP,QACZ,KAAK,EAEH,GAAIgnP,EAAM,KAAOC,EAAM,GAErB,MAAM,IAAI97G,WAAW,yDAA2D67G,EAAM,GAAK,+BAAiCC,EAAM,GAAK,KAGzI,MAEF,KAAK,EAEH,GAAID,EAAM,KAAOC,EAAM,GAErB,MAAM,IAAI97G,WAAW,2DAA6D67G,EAAM,GAAK,+BAAiCC,EAAM,GAAK,KAG3I,MAEF,QACE,MAAM,IAAI7/O,MAAM,+DAAiE6/O,EAAMjnP,OAAS,gBAGpG,MAEF,QACE,MAAM,IAAIoH,MAAM,+DAAiE4/O,EAAMhnP,OAAS,iBA4GtG,IAAIknP,EAAwBzM,EAAM,wBAAyB,CACzD,mBA6BF,SAAoCnyO,EAAGC,GAErC,IAUI4mN,EAVAsxB,EAAQn4O,EAAE8vO,MACVsI,EAAQp4O,EAAE+vO,MACVsI,EAAMr4O,EAAEgwO,UAER2J,EAAQ15O,EAAE6vO,MACV4I,EAAMz4O,EAAE+vO,UAER6O,EAAQzG,EAAM,GACd0G,EAAW1G,EAAM,GAIjB2G,EAAK9B,EAEL+B,EAAKzB,EAELlF,GAAOK,GAAOL,IAAQK,GAAsB,iBAARL,IAEtCxxB,EAAKwxB,EAEL0G,EAAK5M,EAAM/hH,KAAK6sH,EAAW,CAACp2B,EAAIA,IAChCm4B,EAAK7M,EAAM/hH,KAAKmtH,EAAgB,CAAC12B,EAAIA,KAMvC,IAFA,IAAIzgN,EAAI,GAECzO,EAAI,EAAGA,EAAIknP,EAAOlnP,IAAK,CAM9B,IAJA,IAAI2gB,EAAM6/N,EAAMxgP,GAEZmI,EAAMk/O,EAAG1mO,EAAI,GAAIqhO,EAAM,IAElB51O,EAAI,EAAGA,EAAI+6O,EAAU/6O,IAE5BjE,EAAMi/O,EAAGj/O,EAAKk/O,EAAG1mO,EAAIvU,GAAI41O,EAAM51O,KAGjCqC,EAAEzO,GAAKmI,EAIT,OAAOE,EAAE+wO,kBAAkB,CACzBnzO,KAAMwI,EACNhF,KAAM,CAACy9O,GACPtR,SAAU1mB,KA3EZ,oBA0QF,SAAqC7mN,EAAGC,GAEtC,IAAI84O,EAAU/4O,EAAEq1O,QACZ2D,EAASh5O,EAAEyyM,OACXwmC,EAAOj5O,EAAEs1O,KACT+C,EAAMr4O,EAAEgwO,UAEZ,IAAK+I,EACH,MAAM,IAAIj6O,MAAM,0DAIlB,IAUI+nN,EAVA8yB,EAAQ15O,EAAE6vO,MACV4I,EAAMz4O,EAAE+vO,UAER6O,EAAQ7+O,EAAE+vO,MAAM,GAChBkP,EAAQh/O,EAAE8vO,MAAM,GAEhBmJ,EAAU,GACVC,EAAS,GACTC,EAAO,GAIP2F,EAAK9B,EAEL+B,EAAKzB,EAELnwB,EAAK+nB,EAEL1tK,EAAO,EAEP4wK,GAAOK,GAAOL,IAAQK,GAAsB,iBAARL,IAEtCxxB,EAAKwxB,EAEL0G,EAAK5M,EAAM/hH,KAAK6sH,EAAW,CAACp2B,EAAIA,IAChCm4B,EAAK7M,EAAM/hH,KAAKmtH,EAAgB,CAAC12B,EAAIA,IACrCuG,EAAK+kB,EAAM/hH,KAAK+kH,EAAa,CAACtuB,EAAIA,IAElCp/I,EAAO0qK,EAAMnP,QAAQ,EAAGnc,IAI1B,IAAInnN,EAAI,GAEJoqD,EAAI,GAERsvL,EAAK,GAAK,EAEV,IAAK,IAAI8F,EAAK,EAAGA,EAAKD,EAAOC,IAAM,CAEjC,IAAIC,EAAMxF,EAAMuF,GAEhB,IAAK9xB,EAAG+xB,EAAK13K,GAEX,IAAK,IAAI23K,EAAMnG,EAAKiG,GAAKG,EAAMpG,EAAKiG,EAAK,GAAII,EAAKF,EAAKE,EAAKD,EAAKC,IAAM,CAErE,IAAIC,EAAKvG,EAAOsG,GAEXx1L,EAAEy1L,GASL7/O,EAAE6/O,GAAMR,EAAGr/O,EAAE6/O,GAAKP,EAAGG,EAAKpG,EAAQuG,MAPlCx1L,EAAEy1L,IAAM,EAERpG,EAAO/8O,KAAKmjP,GAEZ7/O,EAAE6/O,GAAMP,EAAGG,EAAKpG,EAAQuG,MAUhC,IAAK,IAAI//J,EAAK45J,EAAOzhP,OAAQ8E,EAAI,EAAGA,EAAI+iF,EAAI/iF,IAAK,CAE/C,IAAIgjP,EAAKrG,EAAO38O,GAEhB08O,EAAQ18O,GAAKkD,EAAE8/O,GAMjB,OAFApG,EAAK,GAAKD,EAAOzhP,OAEVsI,EAAEs2O,mBAAmB,CAC1B93O,OAAQ06O,EACRh6O,MAAOi6O,EACP1D,IAAK2D,EACLh4O,KAAM,CAACy9O,EAAO,GACdtR,SAAU1mB,OAzVV44B,EAAwBtN,EAAM,wBAAyB,CACzD,2BA2EF,SAAyCnyO,EAAGC,GAE1C,IAYI4mN,EAZAsxB,EAAQn4O,EAAE8vO,MACVsI,EAAQp4O,EAAE+vO,MACVsI,EAAMr4O,EAAEgwO,UAER2J,EAAQ15O,EAAE6vO,MACV2I,EAAQx4O,EAAE8vO,MACV2I,EAAMz4O,EAAE+vO,UAER6O,EAAQzG,EAAM,GACd0G,EAAW1G,EAAM,GACjBsH,EAAWjH,EAAM,GAIjBsG,EAAK9B,EAEL+B,EAAKzB,EAELlF,GAAOK,GAAOL,IAAQK,GAAsB,iBAARL,IAEtCxxB,EAAKwxB,EAEL0G,EAAK5M,EAAM/hH,KAAK6sH,EAAW,CAACp2B,EAAIA,IAChCm4B,EAAK7M,EAAM/hH,KAAKmtH,EAAgB,CAAC12B,EAAIA,KAMvC,IAFA,IAAIzgN,EAAI,GAECzO,EAAI,EAAGA,EAAIknP,EAAOlnP,IAAK,CAE9B,IAAI2gB,EAAM6/N,EAAMxgP,GAEhByO,EAAEzO,GAAK,GAEP,IAAK,IAAIoM,EAAI,EAAGA,EAAI27O,EAAU37O,IAAK,CAIjC,IAFA,IAAIjE,EAAMk/O,EAAG1mO,EAAI,GAAIqhO,EAAM,GAAG51O,IAErBrE,EAAI,EAAGA,EAAIo/O,EAAUp/O,IAE5BI,EAAMi/O,EAAGj/O,EAAKk/O,EAAG1mO,EAAI5Y,GAAIi6O,EAAMj6O,GAAGqE,KAGpCqC,EAAEzO,GAAGoM,GAAKjE,GAKd,OAAOE,EAAE+wO,kBAAkB,CACzBnzO,KAAMwI,EACNhF,KAAM,CAACy9O,EAAOa,GACdnS,SAAU1mB,KAhIZ,4BA6IF,SAA0C7mN,EAAGC,GAE3C,IAAIk4O,EAAQn4O,EAAE8vO,MACVsI,EAAQp4O,EAAE+vO,MACVsI,EAAMr4O,EAAEgwO,UAERsI,EAAUr4O,EAAEo1O,QACZkD,EAASt4O,EAAEwyM,OACX+lC,EAAOv4O,EAAEq1O,KACTmD,EAAQx4O,EAAE8vO,MACV2I,EAAMz4O,EAAE+vO,UAEZ,IAAKsI,EACH,MAAM,IAAIx5O,MAAM,0DAIlB,IAGI+nN,EAHAg4B,EAAQzG,EAAM,GACdsH,EAAWjH,EAAM,GAIjBsG,EAAK9B,EAEL+B,EAAKzB,EAELnwB,EAAK+nB,EAEL1tK,EAAO,EAEP4wK,GAAOK,GAAOL,IAAQK,GAAsB,iBAARL,IAEtCxxB,EAAKwxB,EAEL0G,EAAK5M,EAAM/hH,KAAK6sH,EAAW,CAACp2B,EAAIA,IAChCm4B,EAAK7M,EAAM/hH,KAAKmtH,EAAgB,CAAC12B,EAAIA,IACrCuG,EAAK+kB,EAAM/hH,KAAK+kH,EAAa,CAACtuB,EAAIA,IAElCp/I,EAAO0qK,EAAMnP,QAAQ,EAAGnc,IAgB1B,IAZA,IAAIqyB,EAAU,GACVC,EAAS,GACTC,EAAO,GAEPhzO,EAAInG,EAAEq2O,mBAAmB,CAC3B93O,OAAQ06O,EACRh6O,MAAOi6O,EACP1D,IAAK2D,EACLh4O,KAAM,CAACy9O,EAAOa,GACdnS,SAAU1mB,IAGH84B,EAAK,EAAGA,EAAKD,EAAUC,IAAM,CAEpCvG,EAAKuG,GAAMxG,EAAOzhP,OAElB,IAAIkoP,EAAMpH,EAAKmH,GACXE,EAAMrH,EAAKmH,EAAK,GAEpB,GAAIE,EAAMD,EAIR,IAFA,IAAIxP,EAAO,EAEFz4O,EAAI,EAAGA,EAAIknP,EAAOlnP,IAAK,CAM9B,IAJA,IAAIkhP,EAAOlhP,EAAI,EAEXmoP,OAAM,EAEDC,EAAKH,EAAKG,EAAKF,EAAKE,IAAM,CAEjC,IAAIb,EAAK3G,EAAOwH,GAEZ3P,IAASyI,GAEXiH,EAAMd,EAAG7G,EAAMxgP,GAAGunP,GAAK5G,EAAQyH,IAE/B3P,EAAOyI,GAGPiH,EAAMf,EAAGe,EAAKd,EAAG7G,EAAMxgP,GAAGunP,GAAK5G,EAAQyH,KAKvC3P,IAASyI,GAASzrB,EAAG0yB,EAAKr4K,KAE5B0xK,EAAO/8O,KAAKzE,GACZuhP,EAAQ98O,KAAK0jP,KASrB,OAFA1G,EAAKsG,GAAYvG,EAAOzhP,OAEjB0O,GA/OP,4BAmWF,SAA0CpG,EAAGC,GAE3C,IAAI84O,EAAU/4O,EAAEq1O,QACZ2D,EAASh5O,EAAEyyM,OACXwmC,EAAOj5O,EAAEs1O,KACT+C,EAAMr4O,EAAEgwO,UAEZ,IAAK+I,EACH,MAAM,IAAIj6O,MAAM,0DAIlB,IAOI+nN,EAPA8yB,EAAQ15O,EAAE6vO,MACV4I,EAAMz4O,EAAE+vO,UAER6O,EAAQ7+O,EAAE+vO,MAAM,GAChBkP,EAAQh/O,EAAE8vO,MAAM,GAChB2P,EAAWz/O,EAAE8vO,MAAM,GAInBgP,EAAK9B,EAEL+B,EAAKzB,EAELnwB,EAAK+nB,EAEL1tK,EAAO,EAEP4wK,GAAOK,GAAOL,IAAQK,GAAsB,iBAARL,IAEtCxxB,EAAKwxB,EAEL0G,EAAK5M,EAAM/hH,KAAK6sH,EAAW,CAACp2B,EAAIA,IAChCm4B,EAAK7M,EAAM/hH,KAAKmtH,EAAgB,CAAC12B,EAAIA,IACrCuG,EAAK+kB,EAAM/hH,KAAK+kH,EAAa,CAACtuB,EAAIA,IAElCp/I,EAAO0qK,EAAMnP,QAAQ,EAAGnc,IAoB1B,IAhBA,IAAIqyB,EAAU,GACVC,EAAS,GACTC,EAAO,GAEPhzO,EAAIpG,EAAEs2O,mBAAmB,CAC3B93O,OAAQ06O,EACRh6O,MAAOi6O,EACP1D,IAAK2D,EACLh4O,KAAM,CAACy9O,EAAOa,GACdnS,SAAU1mB,IAGRnnN,EAAI,GAEJoqD,EAAI,GAEC61L,EAAK,EAAGA,EAAKD,EAAUC,IAAM,CAEpCvG,EAAKuG,GAAMxG,EAAOzhP,OAIlB,IAFA,IAAImhP,EAAO8G,EAAK,EAEPT,EAAK,EAAGA,EAAKD,EAAOC,IAAM,CAEjC,IAAIc,EAAOrG,EAAMuF,GAAIS,GAErB,IAAKvyB,EAAG4yB,EAAMv4K,GAEZ,IAAK,IAAI23K,EAAMnG,EAAKiG,GAAKG,EAAMpG,EAAKiG,EAAK,GAAII,EAAKF,EAAKE,EAAKD,EAAKC,IAAM,CAErE,IAAIC,EAAKvG,EAAOsG,GAEZx1L,EAAEy1L,KAAQ1G,GAEZ/uL,EAAEy1L,GAAM1G,EAERM,EAAO/8O,KAAKmjP,GAEZ7/O,EAAE6/O,GAAMP,EAAGgB,EAAMjH,EAAQuG,KAGzB5/O,EAAE6/O,GAAMR,EAAGr/O,EAAE6/O,GAAKP,EAAGgB,EAAMjH,EAAQuG,MAO3C,IAAK,IAAIW,EAAK7G,EAAKuG,GAAKpgK,EAAK45J,EAAOzhP,OAAQ8E,EAAIyjP,EAAIzjP,EAAI+iF,EAAI/iF,IAAK,CAE/D,IAAIgjP,EAAKrG,EAAO38O,GAEhB08O,EAAQ18O,GAAKkD,EAAE8/O,IAOnB,OAFApG,EAAKsG,GAAYvG,EAAOzhP,OAEjB0O,GAtcP,6BAkdF,SAA2CpG,EAAGC,GAE5C,IAeI4mN,EAfAkyB,EAAU/4O,EAAEq1O,QACZ2D,EAASh5O,EAAEyyM,OACXwmC,EAAOj5O,EAAEs1O,KACT+C,EAAMr4O,EAAEgwO,UAERsI,EAAUr4O,EAAEo1O,QACZkD,EAASt4O,EAAEwyM,OACX+lC,EAAOv4O,EAAEq1O,KACToD,EAAMz4O,EAAE+vO,UAER6O,EAAQ7+O,EAAE+vO,MAAM,GAChB2P,EAAWz/O,EAAE8vO,MAAM,GAEnBvxO,EAASu6O,GAAWT,EAIpByG,EAAK9B,EAEL+B,EAAKzB,EAELlF,GAAOK,GAAOL,IAAQK,GAAsB,iBAARL,IAEtCxxB,EAAKwxB,EAEL0G,EAAK5M,EAAM/hH,KAAK6sH,EAAW,CAACp2B,EAAIA,IAChCm4B,EAAK7M,EAAM/hH,KAAKmtH,EAAgB,CAAC12B,EAAIA,KAsBvC,IAlBA,IAgBIy4B,EAAIF,EAAKC,EAAKU,EAAIH,EAAKC,EAAKN,EAAIL,EAhBhChG,EAAU16O,EAAS,QAAKlF,EACxB6/O,EAAS,GACTC,EAAO,GAEPhzO,EAAIpG,EAAEs2O,mBAAmB,CAC3B93O,OAAQ06O,EACRh6O,MAAOi6O,EACP1D,IAAK2D,EACLh4O,KAAM,CAACy9O,EAAOa,GACdnS,SAAU1mB,IAGRnnN,EAAIlB,EAAS,QAAKlF,EAElBwwD,EAAI,GAIC61L,EAAK,EAAGA,EAAKD,EAAUC,IAAM,CAEpCvG,EAAKuG,GAAMxG,EAAOzhP,OAElB,IAAImhP,EAAO8G,EAAK,EAEhB,IAAKC,EAAMpH,EAAKmH,GAAKE,EAAMrH,EAAKmH,EAAK,GAAII,EAAKH,EAAKG,EAAKF,EAAKE,IAI3D,GAFAb,EAAK3G,EAAOwH,GAERvhP,EAEF,IAAK4gP,EAAMnG,EAAKiG,GAAKG,EAAMpG,EAAKiG,EAAK,GAAII,EAAKF,EAAKE,EAAKD,EAAKC,IAIvDx1L,EAFJy1L,EAAKvG,EAAOsG,MAEEzG,GAEZ/uL,EAAEy1L,GAAM1G,EAERM,EAAO/8O,KAAKmjP,GAEZ7/O,EAAE6/O,GAAMP,EAAG1G,EAAQyH,GAAKhH,EAAQuG,KAGhC5/O,EAAE6/O,GAAMR,EAAGr/O,EAAE6/O,GAAKP,EAAG1G,EAAQyH,GAAKhH,EAAQuG,UAK9C,IAAKF,EAAMnG,EAAKiG,GAAKG,EAAMpG,EAAKiG,EAAK,GAAII,EAAKF,EAAKE,EAAKD,EAAKC,IAIvDx1L,EAFJy1L,EAAKvG,EAAOsG,MAEEzG,IAEZ/uL,EAAEy1L,GAAM1G,EAERM,EAAO/8O,KAAKmjP,IAOpB,GAAI/gP,EAEF,IAAK,IAAIyhP,EAAK7G,EAAKuG,GAAKpgK,EAAK45J,EAAOzhP,OAAQ8E,EAAIyjP,EAAIzjP,EAAI+iF,EAAI/iF,IAAK,CAE/D,IAAIgjP,EAAKrG,EAAO38O,GAEhB08O,EAAQ18O,GAAKkD,EAAE8/O,IAQrB,OAFApG,EAAKsG,GAAYvG,EAAOzhP,OAEjB0O,KAqCT,OAAO+rO,EAAM,GAAM/G,EAAO,CAExB,eAAgB,SAAoB1rO,EAAG+hB,GAErCg9N,EAA0B7P,EAAUlvO,GAAIkvO,EAAUntN,IAGlD,IAAI2N,EAAIn2B,KAAK2xO,EAAOlrO,GAAIkrO,EAAOnpN,IAE/B,OAAO,EAAA0pN,EAAA,IAAS/7M,GAAKA,EAAEs2L,UAAYt2L,GAErC,iBAAkB,SAAsB1vB,EAAG+hB,GAEzC,IAAIy+N,EAAQxgP,EAAE0B,OACV++O,EAAQ1+N,EAAErgB,OAKd,OAHAq9O,EAA0ByB,EAAOC,GAGZ,IAAjBD,EAAMxoP,OAEa,IAAjByoP,EAAMzoP,OA1uBhB,SAA+BsI,EAAGC,EAAG7C,GAEnC,GAAU,IAANA,EACF,MAAM,IAAI0B,MAAM,qCAGlB,OAAO8jD,EAAI5iD,EAAGC,GAsuBDmgP,CAAsB1gP,EAAG+hB,EAAGy+N,EAAM,IA1tBjD,SAA+BlgP,EAAGC,GAEhC,GAAoB,UAAhBA,EAAEqtO,UACJ,MAAM,IAAIxuO,MAAM,4CAGlB,OAYF,SAAoCkB,EAAGC,GAErC,IAWI4mN,EAXAsxB,EAAQn4O,EAAE8vO,MACVsI,EAAQp4O,EAAE+vO,MACVsI,EAAMr4O,EAAEgwO,UAER2J,EAAQ15O,EAAE6vO,MACV2I,EAAQx4O,EAAE8vO,MACV2I,EAAMz4O,EAAE+vO,UAERqQ,EAAUjI,EAAM,GAChBsH,EAAWjH,EAAM,GAIjBsG,EAAK9B,EAEL+B,EAAKzB,EAELlF,GAAOK,GAAOL,IAAQK,GAAsB,iBAARL,IAEtCxxB,EAAKwxB,EAEL0G,EAAK5M,EAAM/hH,KAAK6sH,EAAW,CAACp2B,EAAIA,IAChCm4B,EAAK7M,EAAM/hH,KAAKmtH,EAAgB,CAAC12B,EAAIA,KAMvC,IAFA,IAAIzgN,EAAI,GAECrC,EAAI,EAAGA,EAAI27O,EAAU37O,IAAK,CAIjC,IAFA,IAAIjE,EAAMk/O,EAAG7G,EAAM,GAAIwB,EAAM,GAAG51O,IAEvBpM,EAAI,EAAGA,EAAI0oP,EAAS1oP,IAE3BmI,EAAMi/O,EAAGj/O,EAAKk/O,EAAG7G,EAAMxgP,GAAIgiP,EAAMhiP,GAAGoM,KAGtCqC,EAAErC,GAAKjE,EAIT,OAAOE,EAAE+wO,kBAAkB,CACzBnzO,KAAMwI,EACNhF,KAAM,CAACs+O,GACPnS,SAAU1mB,IA1DLy5B,CAA2BtgP,EAAGC,GAwtB1BsgP,CAAsB7gP,EAAG+hB,GAIb,IAAjB0+N,EAAMzoP,OAEDknP,EAAsBl/O,EAAG+hB,GAI3Bg+N,EAAsB//O,EAAG+hB,IAElC,gBAAiB,SAAqB/hB,EAAG+hB,GAEvC,OAAOxoB,KAAKyG,EAAGkrO,EAAOnpN,KAExB,gBAAiB,SAAqB/hB,EAAG+hB,GAEvC,OAAOxoB,KAAK2xO,EAAOlrO,EAAG+hB,EAAE6rN,WAAY7rN,IAEtC,oBAAqB,SAAyB/hB,EAAG+hB,GAC/C,OAAO+8N,EAAY9+O,EAAG+hB,EAAG87N,GAAgB,IAE3C,mBAAoB,SAAwB79O,EAAG+hB,GAC7C,OAAOi6N,EAAYh8O,EAAG+hB,EAAG87N,GAAgB,IAE3C,oBAAqB,SAAyB79O,EAAG+hB,GAC/C,OAAO+8N,EAAY/8N,EAAG/hB,EAAG69O,GAAgB,IAE3C,mBAAoB,SAAwB79O,EAAG+hB,GAC7C,OAAOi6N,EAAYj6N,EAAG/hB,EAAG69O,GAAgB,IAE3C,aAAc,SAAkB79O,EAAG+hB,GAEjC,OAAOi6N,EAAY9Q,EAAOlrO,GAAI+hB,EAAG87N,GAAgB,GAAO73B,WAE1D,aAAc,SAAkBhmN,EAAG+hB,GAEjC,OAAOi6N,EAAY9Q,EAAOnpN,GAAI/hB,EAAG69O,GAAgB,GAAM73B,WAEzD,WAAY63B,EACZ,mBAAoB,SAAmB79O,EAAG+hB,EAAGxb,GAG3C,IAFA,IAAI7F,EAASnH,KAAKyG,EAAG+hB,GAEZ9pB,EAAI,EAAGA,EAAIsO,EAAKvO,OAAQC,IAC/ByI,EAASnH,KAAKmH,EAAQ6F,EAAKtO,IAG7B,OAAOyI,IAERm9O,EAAeF,gBCv3Bb,SAASmD,GAAexnP,EAAIg7E,EAAOv0E,EAAKE,GAC7C,KAAM1G,gBAAgBunP,IACpB,MAAM,IAAIv4B,YAAY,oDAGxBhvN,KAAKD,GAAKA,EACVC,KAAK+6E,MAAQA,EACb/6E,KAAKwG,IAAMA,EACXxG,KAAK0G,IAAMA,EACX1G,KAAK0nB,QAAU,yCAA2C3nB,EAAK,KAAOg7E,EAAQ,cAAgBv0E,GAAOE,QAAoC,IAAMA,EAAM,IAAM,aAC3J1G,KAAKynB,OAAQ,IAAI5hB,OAAQ4hB,MAE3B8/N,GAAenmP,UAAY,IAAIyE,MAC/B0hP,GAAenmP,UAAUmB,YAAcsD,MACvC0hP,GAAenmP,UAAUkD,KAAO,iBAChCijP,GAAenmP,UAAUomP,kBAAmB,E,QCvB5C,ICEI,GAAO,kBAEAC,GAAuC,EAAQ,GADvC,CAAC,QAAS,YAAa,QAAS,YAC2B,SAAU1T,GACtF,IAAImF,EAAQnF,EAAKmF,MACb6C,EAAYhI,EAAKgI,UACjBxwO,EAAQwoO,EAAKxoO,MACbstN,EAAUkb,EAAKlb,QACf/e,EAAM+e,EAENj3N,EAAO,SAAcmF,EAAGC,GAC1B,OAAQ6xN,EAAQ9xN,EAAGC,IAoCrB,OAAOkyO,EAAM,GAAM,CACjB,yBAA0B,SAA2BzyO,EAAG8d,GACtD,OAAOmjO,EAAiBjhP,EAAG8d,EAAGu1L,IAEhC,iCAAkC,SAAiCrzM,EAAG8d,EAAGs0M,GACvE,GAAgB,QAAZA,EACF,OAAO6uB,EAAiBjhP,EAAG8d,EAAGu1L,GACzB,GAAgB,SAAZ+e,EACT,OAAO6uB,EAAiBjhP,EAAG8d,EAAG3iB,GAE9B,MAAM,IAAIiE,MAAM,2CAGpB,mCAAoC6hP,IAGtC,SAASA,EAAiBjhP,EAAG8d,EAAGs0M,GAC9B,KAAK,OAAUt0M,IAAMA,EAAI,EACvB,MAAM,IAAI1e,MAAM,oCAGlB,IAAI,EAAAqsO,EAAA,IAASzrO,GAAI,CAGf,GAFWA,EAAE0B,OAEJ1J,OAAS,EAChB,MAAM,IAAIoH,MAAM,2CAGlB,OAAO8hP,EAAYlhP,EAAEgmN,UAAWloM,EAAGs0M,GAGrC,GAAIj6N,MAAMC,QAAQ4H,GAChB,OAAOkhP,EAAYlhP,EAAG8d,EAAGs0M,GAe7B,SAAS8uB,EAAYppP,EAAKgmB,EAAGs0M,GAC3B,GAAIt0M,GAAKhmB,EAAIE,OACX,MAAM,IAAIoH,MAAM,mBAIlB,IAAK,IAAInH,EAAI,EAAGA,EAAIH,EAAIE,OAAQC,IAC9B,GAAIq9O,EAAUx9O,EAAIG,KAAO6M,EAAMhN,EAAIG,IACjC,OAAOH,EAAIG,GAOf,IAHA,IAAIiE,EAAO,EACPy2O,EAAK76O,EAAIE,OAAS,EAEfkE,EAAOy2O,GAAI,CAKhB,IAJA,IAAInyO,EAAItE,EACJkuD,EAAIuoL,EACJwO,EAAQrpP,EAAI2H,KAAK8H,MAAM9H,KAAKC,UAAYizO,EAAKz2O,EAAO,IAAMA,GAEvDsE,EAAI4pD,GAET,GAAIgoK,EAAQt6N,EAAI0I,GAAI2gP,IAAU,EAAG,CAE/B,IAAI/oK,EAAMtgF,EAAIsyD,GACdtyD,EAAIsyD,GAAKtyD,EAAI0I,GACb1I,EAAI0I,GAAK43E,IACPhuB,QAGA5pD,EAKF4xN,EAAQt6N,EAAI0I,GAAI2gP,GAAS,KACzB3gP,EAIAsd,GAAKtd,EACPmyO,EAAKnyO,EAELtE,EAAOsE,EAAI,EAIf,OAAO1I,EAAIgmB,OC3IJsjO,GAAiC,EAFjC,YACQ,CAAC,QAAS,cAC2C,SAAU9T,GAChF,IAAImF,EAAQnF,EAAKmF,MACbtF,EAAYG,EAAKH,UA2BrB,OAAOsF,EAAM,YAAa,CACxB,GAAI,WACF,OAAO,IAAItF,EAAU,IAEvB/F,OAAQ,SAAgBpnO,GAEtB,OAAO,IAAImtO,EAAUntO,EAAI,KAE3Bs6N,OAAQ,SAAgBt6N,GACtB,OAAO,IAAImtO,EAAUntO,IAEvBmtO,UAAW,SAAmBntO,GAE5B,OAAOA,GAETu1N,SAAU,SAAkBv1N,GAC1B,OAAO,IAAImtO,EAAUntO,EAAEtC,GAAGuwC,IAAIjuC,EAAEsG,GAAGymN,MAAM/sN,EAAE4D,IAE7C,KAAQ,SAAe5D,GACrB,OAAO,IAAImtO,EAAU,IAEvB,iBAAkB,SAAqBntO,GACrC,OAAO4lI,GAAQ5lI,EAAGzG,YClDb8nP,GAA+B,EAF/B,UACQ,CAAC,SAAU,aAAc,cAC0B,SAAU/T,GAC9E,IAAIgU,EAAUhU,EAAKlG,OACfma,EAAYjU,EAAKiU,UACjBllN,EAAWixM,EAAKjxM,SAChBmlN,EAAkB,CACpBlnB,QAAQ,EACR8M,QAAQ,EACR+F,WAAW,EACX5X,UAAU,GAGRksB,EAAmB,CACrBra,OAAQ,SAAgBpnO,GACtB,OAAOshP,EAAQthP,IAEjBmtO,UAAWoU,EAAY,SAAUvhP,GAC/B,OAAOuhP,EAAUvhP,IACfu7O,GACJhmB,SAAUl5L,EAAW,SAAUr8B,GAC7B,OAAOq8B,EAASr8B,IACdw7O,IA+BN,OAAO,SAAiBviP,EAAOyoP,GAC7B,IAAIC,GAAY,QAAO1oP,GAEvB,KAAM0oP,KAAaH,GACjB,MAAM,IAAIznP,UAAU,kBAAoBd,EAAQ,aAAe0oP,EAAY,4BAA8BpnP,OAAO8lB,KAAKmhO,GAAiBj4O,KAAK,OAG7I,KAAMm4O,KAAcD,GAClB,MAAM,IAAI1nP,UAAU,kBAAoBd,EAAQ,aAAeyoP,EAAa,6BAA+BnnP,OAAO8lB,KAAKohO,GAAkBl4O,KAAK,OAGhJ,OAAIm4O,IAAeC,EACV1oP,EAEAwoP,EAAiBC,GAAYzoP,OC1DnC,SAAS2oP,GAAoBjoP,EAAKy9F,EAAQn+F,GAE/C,IAAI4oP,EAEJ,OAAgD,IAA5Cp8O,OAAO9L,GAAKixB,QAAQ,oBACtBi3N,EAAUpoP,UAAUzB,OAAS,EAAI,YAAa,QAAOiB,GAAS,YAAc20B,KAAKC,UAAU50B,GAAS,IAAM,WAAaU,EAAIuE,KAAKstC,OAAS,IAClI,IAAIzxC,UAAU,oBAAsBq9F,EAAS,gCAAkCyqJ,KAGxC,IAA5Cp8O,OAAO9L,GAAKixB,QAAQ,oBACtBi3N,EAAUpoP,UAAUzB,OAAS,EAAI,YAAa,QAAOiB,GAAS,YAAc20B,KAAKC,UAAU50B,GAAS,IAAM,GACnG,IAAIc,UAAU,oBAAsBq9F,EAAS,wDAA0DyqJ,IAGzGloP,ECNT,ICZI,GAAO,WAEAmoP,GAAgC,EAAQ,GADhC,CAAC,QAAS,SAAU,cAAe,YAAa,aAAc,gBACV,SAAUxU,GAC/E,IAAImF,EAAQnF,EAAKmF,MACbvH,EAASoC,EAAKpC,OACduK,EAAcnI,EAAKmI,YACnB8H,EAAYjQ,EAAKiQ,UACjBwE,EAAazU,EAAKyU,WAClB5R,EAAc7C,EAAK6C,YAEnBqN,EAAclF,GAAkB,CAClC7F,MAAOA,IAELmJ,EAAcpB,GAAkB,CAClC/H,MAAOA,IAELoJ,EAAcpB,GAAkB,CAClChI,MAAOA,EACPgD,YAAaA,IAEXiI,EAAc3D,GAAkB,CAClCtH,MAAOA,EACPtC,YAAaA,IAEX4L,EAAc/B,GAAkB,CAClCvH,MAAOA,IAELuJ,EAAczB,GAAkB,CAClC9H,MAAOA,IAoCT,OAAOA,EAAM,GAAM,CACjB,iBAAkB,SAAsBzyO,EAAG+hB,GACzC,OAAO/hB,EAAI+hB,GAEb,mBAAoB,SAAwB/hB,EAAG+hB,GAC7C,OAAO/hB,EAAEuxC,IAAIxvB,IAEf,uBAAwB,SAA4B/hB,EAAG+hB,GACrD,OAAO/hB,EAAEymN,MAAM1kM,IAEjB,qBAAsB,SAA0B/hB,EAAG+hB,GACjD,OAAO/hB,EAAEuxC,IAAIxvB,IAEf,aAAc,SAAkB/hB,EAAG+hB,GACjC,GAAgB,OAAZ/hB,EAAE/G,MACJ,MAAM,IAAImG,MAAM,oDAGlB,GAAgB,OAAZ2iB,EAAE9oB,MACJ,MAAM,IAAImG,MAAM,oDAGlB,IAAKY,EAAEwzO,UAAUzxN,GACf,MAAM,IAAI3iB,MAAM,sBAGlB,IAAIuiB,EAAM3hB,EAAEwb,QAGZ,OAFAmG,EAAI1oB,MAAQM,KAAKooB,EAAI1oB,MAAO8oB,EAAE9oB,OAC9B0oB,EAAIqzN,WAAY,EACTrzN,GAET,6BAA8B,SAAkC3hB,EAAG+hB,GAEjE,OADAigO,GAAqBhiP,EAAG+hB,GACjB85N,EAAY77O,EAAG+hB,EAAGxoB,OAE3B,4BAA6B,SAAiCyG,EAAG+hB,GAE/D,OADAigO,GAAqBhiP,EAAG+hB,GACjB65N,EAAY75N,EAAG/hB,EAAGzG,MAAM,IAEjC,4BAA6B,SAAiCyG,EAAG+hB,GAE/D,OADAigO,GAAqBhiP,EAAG+hB,GACjBy7N,EAAYx9O,EAAG+hB,EAAGxoB,MAAM,IAEjC,2BAA4B,SAAgCyG,EAAG+hB,GAE7D,OADAigO,GAAqBhiP,EAAG+hB,GACjBg6N,EAAY/7O,EAAG+hB,EAAGxoB,OAE3B,eAAgB,SAAoByG,EAAG+hB,GAErC,OAAOxoB,KAAK2xO,EAAOlrO,GAAIkrO,EAAOnpN,IAAIikM,WAEpC,gBAAiB,SAAqBhmN,EAAG+hB,GAEvC,OAAOxoB,KAAK2xO,EAAOlrO,GAAI+hB,IAEzB,gBAAiB,SAAqB/hB,EAAG+hB,GAEvC,OAAOxoB,KAAKyG,EAAGkrO,EAAOnpN,KAExB,oBAAqB,SAAyB/hB,EAAG+hB,GAC/C,OAAO27N,EAAY19O,EAAG+hP,EAAWhgO,GAAIw7N,IAEvC,mBAAoB,SAAwBv9O,EAAG+hB,GAC7C,OAAOi6N,EAAYh8O,EAAG+hB,EAAGxoB,OAE3B,oBAAqB,SAAyByG,EAAG+hB,GAC/C,OAAO27N,EAAY37N,EAAG/hB,EAAGzG,MAAM,IAEjC,mBAAoB,SAAwByG,EAAG+hB,GAC7C,OAAOi6N,EAAYj6N,EAAG/hB,EAAGzG,MAAM,IAEjC,aAAc,SAAkByG,EAAG+hB,GAEjC,OAAOi6N,EAAY9Q,EAAOlrO,GAAI+hB,EAAGxoB,MAAM,GAAOysN,WAEhD,aAAc,SAAkBhmN,EAAG+hB,GAEjC,OAAOi6N,EAAY9Q,EAAOnpN,GAAI/hB,EAAGzG,MAAM,GAAMysN,gBAWnD,SAASg8B,GAAqBhiP,EAAG+hB,GAC/B,IAAIy+N,EAAQxgP,EAAE0B,OACV++O,EAAQ1+N,EAAErgB,OAEd,GAAI8+O,EAAMxoP,SAAWyoP,EAAMzoP,OACzB,MAAM,IAAI+2O,EAAeyR,EAAMxoP,OAAQyoP,EAAMzoP,QCnKjD,ICII,GAAO,QCJP,ID4I2B,EAAQ,GAAM,CAAC,QAAS,gBAAgB,SAAUk2O,GAC/E,IAAIuE,EAAQvE,EAAMuE,MACdgD,EAAcvH,EAAMuH,YACxB,OAAOhD,EAAM,GAAM,CACjB,WAAY,SAAgBzyO,EAAG+hB,GAE7B,OAAU,OAAN/hB,EACW,OAAN+hB,EAGC,OAANA,EACW,OAAN/hB,OAGCpG,IAANoG,OACWpG,IAANmoB,OAGCnoB,IAANmoB,OACWnoB,IAANoG,EAGFy1O,EAAYz1O,EAAG+hB,SClKjB,gBAEAkgO,GAAoC,EAAQ,GADpC,CAAC,QAAS,YAC8C,SAAU3U,GACnF,IAAImF,EAAQnF,EAAKmF,MACbyP,EAAU5U,EAAK4U,QAcnB,OAAOzP,EAAM,GAAM,CACjB,iBAAkB,SAAsBzyO,EAAG+hB,GACzC,OAAO/hB,EAAI+hB,GAEb,mBAAoB,SAAwB/hB,EAAG+hB,GAC7C,OAAO/hB,EAAEiuC,IAAIlsB,IAEf,uBAAwB,SAA4B/hB,EAAG+hB,GACrD,OAAO/hB,EAAEiuC,IAAIlsB,IAEf,qBAAsB,SAA0B/hB,EAAG+hB,GACjD,OAAO/hB,EAAEiuC,IAAIlsB,IAEf,sCAAuC,SAAqC/hB,EAAG+hB,GAC7E,IAAIJ,EAAM3hB,EAAEwb,QAERg+C,EAAM0oL,EAAQ,GAAG,QAAOngO,IAE5B,OADAJ,EAAI1oB,MAAQM,KAAmB,OAAdooB,EAAI1oB,MAAiB0oB,EAAI2yN,WAAW96K,GAAO73C,EAAI1oB,MAAO8oB,GAChEJ,GAET,sCAAuC,SAAqC3hB,EAAG+hB,GAC7E,IAAIJ,EAAMI,EAAEvG,QACZmG,EAAMA,EAAIwvB,KAAK,GAEf,IAAIqoB,EAAM0oL,EAAQ,GAAG,QAAOliP,IAE5B,OADA2hB,EAAI1oB,MAAQM,KAAKyG,EAAe,OAAZ+hB,EAAE9oB,MAAiB8oB,EAAEuyN,WAAW96K,GAAOz3C,EAAE9oB,OACtD0oB,GAET,aAAc,SAAkB3hB,EAAG+hB,GACjC,OAAO/hB,EAAEytN,OAAO1rM,SC9CXogO,GAAgC,EAFhC,MACQ,CAAC,YAAa,cAAe,kBACuB,SAAU7U,GAC/E,IAAIiQ,EAAYjQ,EAAKiQ,UACjB9H,EAAcnI,EAAKmI,YACnB+G,EAAgBlP,EAAKkP,cAMzB,SAAS4F,IACP,KAAM7oP,gBAAgB6oP,GACpB,MAAM,IAAI75B,YAAY,oDAIxBhvN,KAAKo8O,QAAU,GACfp8O,KAAK8oP,MAAQ,IAAI7F,EAiInB,OA1HA4F,EAAIznP,UAAUqiB,KAAO,MACrBolO,EAAIznP,UAAU2nP,OAAQ,EAQtBF,EAAIznP,UAAU6D,IAAM,SAAUvG,EAAGuhB,GAE/B,GAAKjgB,KAAKo8O,QAAQ19O,GAQhBsB,KAAKo8O,QAAQ19O,GAAGgB,MAAQugB,MARJ,CAEpB,IAAI+N,EAAOhuB,KAAK8oP,MAAMvF,OAAO7kP,EAAGuhB,GAGhCjgB,KAAKo8O,QAAQ19O,GAAKsvB,IAOtB66N,EAAIznP,UAAUM,IAAM,SAAUhD,GAC5B,IAAIsvB,EAAOhuB,KAAKo8O,QAAQ19O,GAExB,OAAIsvB,EACKA,EAAKtuB,MAGP,GAGTmpP,EAAIznP,UAAU4nP,WAAa,SAAUtqP,EAAGuhB,GAEtC,IAAI+N,EAAOhuB,KAAKo8O,QAAQ19O,GAEnBsvB,EAOHA,EAAKtuB,MAAQskP,EAAUh2N,EAAKtuB,MAAOugB,IALnC+N,EAAOhuB,KAAK8oP,MAAMvF,OAAO7kP,EAAGuhB,GAE5BjgB,KAAKo8O,QAAQ19O,GAAKsvB,IAOtB66N,EAAIznP,UAAU4K,QAAU,SAAUrJ,EAAMy2O,EAAI1iJ,GAE1C,IAAIuyJ,EAAOjpP,KAAK8oP,MACZvjP,EAASvF,KAAKo8O,QAEd31I,EAAQ,GAERz4E,EAAOi7N,EAAKzF,iBAOhB,IALIx1N,GACFy4E,EAAMtjG,KAAK6qB,GAINA,GAAQA,EAAKzuB,KAAO65O,GAErBprN,EAAKzuB,KAAOoD,IAETu5O,EAAYluN,EAAKtuB,MAAO,IAE3Bg3F,EAAS1oE,EAAKzuB,IAAKyuB,EAAKtuB,MAAOM,QAKnCguB,EAAOi7N,EAAKzF,mBAGV/8I,EAAMtjG,KAAK6qB,GAKf,IAAK,IAAItvB,EAAI,EAAGA,EAAI+nG,EAAMhoG,OAAQC,IAAK,CAErC,IAAIyF,EAAIsiG,EAAM/nG,GAId6G,GAFAyoB,EAAOi7N,EAAK1F,OAAOp/O,EAAE5E,IAAK4E,EAAEzE,QAEhBH,KAAOyuB,IAIvB66N,EAAIznP,UAAU8nP,KAAO,SAAUxqP,EAAGoM,GAEhC,IAAIq+O,EAAQnpP,KAAKo8O,QAAQ19O,GACrB0qP,EAAQppP,KAAKo8O,QAAQtxO,GAEzB,IAAKq+O,GAASC,EAEZD,EAAQnpP,KAAK8oP,MAAMvF,OAAO7kP,EAAG0qP,EAAM1pP,OAEnCM,KAAK8oP,MAAMvzD,OAAO6zD,GAGlBppP,KAAKo8O,QAAQ19O,GAAKyqP,EAClBnpP,KAAKo8O,QAAQtxO,QAAKzK,OACb,GAAI8oP,IAAUC,EAEnBA,EAAQppP,KAAK8oP,MAAMvF,OAAOz4O,EAAGq+O,EAAMzpP,OAEnCM,KAAK8oP,MAAMvzD,OAAO4zD,GAGlBnpP,KAAKo8O,QAAQtxO,GAAKs+O,EAClBppP,KAAKo8O,QAAQ19O,QAAK2B,OACb,GAAI8oP,GAASC,EAAO,CAEzB,IAAInpO,EAAIkpO,EAAMzpP,MACdypP,EAAMzpP,MAAQ0pP,EAAM1pP,MACpB0pP,EAAM1pP,MAAQugB,IAIX4oO,IACN,CACDpV,SAAS,IClJA4V,GAA2B,EAF3B,MACQ,CAAC,QAAS,SAAU,MAAO,YAAa,eAAgB,iBAAkB,WAAY,SAAU,cAAe,aAAc,cAAe,eAAgB,QAC7G,SAAUtV,GAC1E,IAAImF,EAAQnF,EAAKmF,MACbvH,EAASoC,EAAKpC,OACd1+L,EAAM8gM,EAAK9gM,IACX+wM,EAAYjQ,EAAKiQ,UACjBsF,EAAevV,EAAKuV,aACpBhF,EAAiBvQ,EAAKuQ,eACtBtrB,EAAW+a,EAAK/a,SAChB+pB,EAAShP,EAAKgP,OACd7G,EAAcnI,EAAKmI,YACnBsM,EAAazU,EAAKyU,WAClB5R,EAAc7C,EAAK6C,YACnBuF,EAAepI,EAAKoI,aACpB0M,EAAM9U,EAAK8U,IA4Bf,OAAO3P,EA3CE,MA2CU,CACjBtC,YAAa,SAAqBzgN,GAChC,OAAOozN,EAAUpzN,IAEnBgmN,aAAc,SAAsBhmN,GAClC,OAoMJ,SAAoBA,GAElB,IAmBIz3B,EAAGoM,EAAGyZ,EAnBNkgE,EAAOtuD,EAAE2gN,MAAM,GACfpyJ,EAAUvuD,EAAE2gN,MAAM,GAElB3yO,EAAI+B,KAAKM,IAAIi+E,EAAMC,GAEnBn/E,EAAS4wB,EAAEimN,QACXn2O,EAAQkwB,EAAEqjL,OACVgjC,EAAMrmN,EAAEkmN,KAERmN,EAAU,GACVC,EAAS,GACTC,EAAO,GACPC,EAAQ,CAACllK,EAAMtgF,GAEfylP,EAAU,GACVC,EAAS,GACTC,EAAO,GACPC,EAAQ,CAAC5lP,EAAGugF,GAIZslK,EAAO,GACPC,EAAO,GAEX,IAAKvrP,EAAI,EAAGA,EAAI+lF,EAAM/lF,IACpBsrP,EAAKtrP,GAAKA,EACVurP,EAAKvrP,GAAKA,EAIZ,IAaIwrP,EAAQ,WAEV,IAAIC,EAAM,IAAItB,EAEV/9O,EAAI25E,IAENilK,EAAKvmP,KAAKqmP,EAAQ/qP,QAElB+qP,EAAQrmP,KAAK,GACbsmP,EAAOtmP,KAAK2H,IAIdg/O,EAAK3mP,KAAKymP,EAAQnrP,QAElB,IAAI2hJ,EAAKo8F,EAAI1xO,GACTqyO,EAAKX,EAAI1xO,EAAI,GAEjB,IAAKyZ,EAAI67H,EAAI77H,EAAI44N,EAAI54N,IAEnB7lB,EAAIuH,EAAMse,GAEV4lO,EAAIllP,IAAI+kP,EAAKtrP,GAAI6G,EAAOgf,IAItBzZ,EAAI,GAENq/O,EAAIn+O,QAAQ,EAAGlB,EAAI,GAAG,SAAUyZ,EAAG6lO,GAEjCjO,EAAaqC,YAAYj6N,EAAGilO,EAASC,EAAQC,GAAM,SAAUhrP,EAAG2rP,GAE1D3rP,EAAI6lB,GAEN4lO,EAAInB,WAAWtqP,EAAG8pP,EAAWlE,EAAe+F,EAAKD,WAOzD,IAtDqC3jP,EAAG+hB,EAEpCi2N,EACAC,EAmDA/jB,EAAK7vN,EACLw/O,EAAMH,EAAIzoP,IAAIoJ,GACdy/O,EAAQt3M,EAAIq3M,GAEhBH,EAAIn+O,QAAQlB,EAAI,EAAG25E,EAAO,GAAG,SAAUh+E,EAAGwZ,GAExC,IAAIuqO,EAAOv3M,EAAIhzB,GAEX8iO,EAAOyH,EAAMD,KAEf5vB,EAAKl0N,EAEL8jP,EAAQC,EAERF,EAAMrqO,MAINnV,IAAM6vN,IAERwhB,EAAapD,UAAUjuO,EAAG6vN,EAAIgvB,EAAM,GAAIH,EAASC,EAAQC,GAGzDvN,EAAapD,UAAUjuO,EAAG6vN,EAAIovB,EAAM,GAAIH,EAASC,EAAQC,GAGzDK,EAAIjB,KAAKp+O,EAAG6vN,GAhF0BnyM,EAkFvBmyM,EAhFb8jB,EAAKwL,EAF4BxjP,EAkFvBqE,GA/EV4zO,EAAKuL,EAAKzhO,GAEdwhO,EAAKvL,GAAMj2N,EACXwhO,EAAKtL,GAAMj4O,EAEXwjP,EAAKxjP,GAAKi4O,EACVuL,EAAKzhO,GAAKi2N,GA6EV0L,EAAIn+O,QAAQ,EAAGy4E,EAAO,GAAG,SAAUh+E,EAAGwZ,GAEhCxZ,GAAKqE,GAEP8+O,EAAQzmP,KAAK8c,GACb4pO,EAAO1mP,KAAKsD,KAGZwZ,EAAIqpO,EAAarpO,EAAGqqO,GAEfpO,EAAYj8N,EAAG,KAElBupO,EAAQrmP,KAAK8c,GACbwpO,EAAOtmP,KAAKsD,SAMpB,IAAKqE,EAAI,EAAGA,EAAI45E,EAAS55E,IACvBo/O,IAOF,OAHAJ,EAAK3mP,KAAKymP,EAAQnrP,QAClBirP,EAAKvmP,KAAKqmP,EAAQ/qP,QAEX,CACLgsP,EAAG,IAAItO,EAAa,CAClB52O,OAAQikP,EACRvjP,MAAOwjP,EACPjN,IAAKkN,EACLvhP,KAAMwhP,IAERe,EAAG,IAAIvO,EAAa,CAClB52O,OAAQqkP,EACR3jP,MAAO4jP,EACPrN,IAAKsN,EACL3hP,KAAM4hP,IAERxmP,EAAGymP,EACH5lP,SAAU,WACR,MAAO,MAAQpE,KAAKyqP,EAAErmP,WAAa,QAAUpE,KAAK0qP,EAAEtmP,WAAa,QAAUpE,KAAKuD,IApW3EonP,CAAWx0N,IAEpBv3B,MAAO,SAAemI,GAEpB,IAEIE,EAAIsiP,EAFA5X,EAAO5qO,IAKf,MAAO,CACL0jP,EAAGxjP,EAAEwjP,EAAEh+B,UACPi+B,EAAGzjP,EAAEyjP,EAAEj+B,UACPlpN,EAAG0D,EAAE1D,MAKX,SAASgmP,EAAUpzN,GAEjB,IAaIz3B,EAAGoM,EAAGyZ,EAbNkgE,EAAOtuD,EAAE2gN,MAAM,GACfpyJ,EAAUvuD,EAAE2gN,MAAM,GAElB3yO,EAAI+B,KAAKM,IAAIi+E,EAAMC,GAEnB//E,EAAO,EAAMwxB,EAAE0gN,OAEf+T,EAAQ,GACRjB,EAAQ,CAACllK,EAAMtgF,GAEf0mP,EAAQ,GACRd,EAAQ,CAAC5lP,EAAGugF,GAIZnhF,EAAI,GAER,IAAK7E,EAAI,EAAGA,EAAI+lF,EAAM/lF,IACpB6E,EAAE7E,GAAKA,EAIT,IAAKoM,EAAI,EAAGA,EAAI45E,EAAS55E,IAAK,CAE5B,GAAIA,EAAI,EAEN,IAAKpM,EAAI,EAAGA,EAAI+lF,EAAM/lF,IAAK,CAEzB,IAAI8H,EAAMN,KAAKM,IAAI9H,EAAGoM,GAElBT,EAAI,EAER,IAAKka,EAAI,EAAGA,EAAI/d,EAAK+d,IAEnBla,EAAI25O,EAAU35O,EAAGi6O,EAAe3/O,EAAKjG,GAAG6lB,GAAI5f,EAAK4f,GAAGzZ,KAGtDnG,EAAKjG,GAAGoM,GAAKkuN,EAASr0N,EAAKjG,GAAGoM,GAAIT,GAKtC,IAAIswN,EAAK7vN,EACLy/O,EAAQ,EACRD,EAAM,EAEV,IAAK5rP,EAAIoM,EAAGpM,EAAI+lF,EAAM/lF,IAAK,CAEzB,IAAIuhB,EAAItb,EAAKjG,GAAGoM,GAEZ0/O,EAAOv3M,EAAIhzB,GAEX8iO,EAAOyH,EAAMD,KAEf5vB,EAAKj8N,EAEL6rP,EAAQC,EAERF,EAAMrqO,GAaV,GARInV,IAAM6vN,IAERp3N,EAAEuH,GAAK,CAACvH,EAAEo3N,GAAKp3N,EAAEo3N,GAAMp3N,EAAEuH,IAAI,GAE7B8rO,EAAYmC,UAAUjuO,EAAG6vN,EAAIh2N,IAI3BmG,EAAI25E,EAEN,IAAK/lF,EAAIoM,EAAI,EAAGpM,EAAI+lF,EAAM/lF,IAAK,CAE7B,IAAIosP,EAAMnmP,EAAKjG,GAAGoM,GAEboxO,EAAY4O,EAAK,KAEpBnmP,EAAKjG,GAAGoM,GAAKw+O,EAAa3kP,EAAKjG,GAAGoM,GAAIw/O,KAO9C,IAAKx/O,EAAI,EAAGA,EAAI45E,EAAS55E,IAEvB,IAAKpM,EAAI,EAAGA,EAAI+lF,EAAM/lF,IAEV,IAANoM,IAEEpM,EAAIgmF,IAENmmK,EAAMnsP,GAAK,IAIbksP,EAAMlsP,GAAK,IAITA,EAAIoM,GAEFpM,EAAIgmF,IAENmmK,EAAMnsP,GAAGoM,GAAKnG,EAAKjG,GAAGoM,IAIpBA,EAAI25E,IAENmmK,EAAMlsP,GAAGoM,GAAK,IAOdpM,IAAMoM,GAiBNpM,EAAIgmF,IAENmmK,EAAMnsP,GAAGoM,GAAK,GAIZA,EAAI25E,IAENmmK,EAAMlsP,GAAGoM,GAAKnG,EAAKjG,GAAGoM,MAvBlBpM,EAAIgmF,IAENmmK,EAAMnsP,GAAGoM,GAAKnG,EAAKjG,GAAGoM,IAIpBA,EAAI25E,IAENmmK,EAAMlsP,GAAGoM,GAAK,IAqBtB,IAAI6U,EAAI,IAAIi3N,EAAY,CACtBjyO,KAAMimP,EACNziP,KAAMwhP,IAGJ1yL,EAAI,IAAI2/K,EAAY,CACtBjyO,KAAMkmP,EACN1iP,KAAM4hP,IAGJl1J,EAAK,GAET,IAAKn2F,EAAI,EAAGyF,EAAIZ,EAAE9E,OAAQC,EAAIyF,EAAGzF,IAC/Bm2F,EAAGtxF,EAAE7E,IAAMA,EAIb,MAAO,CACL+rP,EAAG9qO,EACH+qO,EAAGzzL,EACH1zD,EAAGsxF,EACHzwF,SAAU,WACR,MAAO,MAAQpE,KAAKyqP,EAAErmP,WAAa,QAAUpE,KAAK0qP,EAAEtmP,WAAa,QAAUpE,KAAKuD,QC3O7EwnP,GAA2B,EAF3B,MACQ,CAAC,QAAS,SAAU,WAAY,WAAY,aAAc,QACX,SAAUhX,GAC1E,IAAImF,EAAQnF,EAAKmF,MACbvH,EAASoC,EAAKpC,OACd3Y,EAAW+a,EAAK/a,SAChBgiB,EAAWjH,EAAKiH,SAChBwN,EAAazU,EAAKyU,WAClBwC,EAAMjX,EAAKiX,IA2Bf,OAAO9R,EAnCE,MAmCU,CACjB38L,IAAK,SAAa91C,GAChB,OAAO,EAAMA,IAEf,iBAAkB,SAAaA,GAC7B,IAAI0B,EAYJ,QATEA,GADE,EAAA+pO,EAAA,IAASzrO,GACJA,EAAE0B,OACAvJ,MAAMC,QAAQ4H,IACvBA,EAAIkrO,EAAOlrO,IACF0B,OAGF,IAGI1J,QACX,KAAK,EAEH,OAAO,EAAMgI,GAEf,KAAK,EAEH,GAAgB,IAAZ0B,EAAK,GACP,OAAO,EAAM1B,EAAEgmN,UAAU,IAEzB,MAAM,IAAI7iF,WAAW,gCAAuC,EAAOzhI,GAAQ,KAG/E,KAAK,EAGD,IAAIs8E,EAAOt8E,EAAK,GAGhB,GAAIs8E,IAFOt8E,EAAK,GAGd,OAqBZ,SAAcwpO,EAAQltJ,EAAM65B,GAC1B,GAAa,IAAT75B,EAEF,OAAO,EAAMktJ,EAAO,GAAG,IAClB,GAAa,IAATltJ,EAGT,OAAOu0I,EAASgiB,EAASrJ,EAAO,GAAG,GAAIA,EAAO,GAAG,IAAKqJ,EAASrJ,EAAO,GAAG,GAAIA,EAAO,GAAG,KAOvF,IAJA,IAAIsZ,EAASD,EAAIrZ,GAEbuZ,EAAMD,EAAOP,EAAE,GAAG,GAEbznP,EAAK,EAAGA,EAAKwhF,EAAMxhF,IAC1BioP,EAAMlQ,EAASkQ,EAAKD,EAAOP,EAAEznP,GAAIA,IASnC,IAJA,IAAIkoP,EAAa,EACbzsP,EAAI,EACJgjG,EAAU,KAED,CACX,KAAOA,EAAQhjG,IACbA,IAGF,GAAIA,GAAK+lF,EAAM,MAIf,IAHA,IAAI35E,EAAIpM,EACJq+N,EAAW,GAEPr7H,EAAQupJ,EAAO1nP,EAAEuH,KACvB42F,EAAQupJ,EAAO1nP,EAAEuH,KAAM,EACvBA,EAAImgP,EAAO1nP,EAAEuH,GACbiyN,IAGEA,EAAW,GAAM,GACnBouB,IAIJ,OAAOA,EAAa,GAAM,EAAID,EAAM1C,EAAW0C,GAjEhCE,CAAK3kP,EAAEwb,QAAQwqM,UAAWhoI,GAEjC,MAAM,IAAImlD,WAAW,gCAAuC,EAAOzhI,GAAQ,KAIjF,QAEE,MAAM,IAAIyhI,WAAW,yCAAgD,EAAOzhI,GAAQ,YC9EnFkjP,GAA2B,EAF3B,MACQ,CAAC,QAAS,SAAU,eAAgB,YAAa,WAAY,aAAc,MAAO,WAAY,QAC/C,SAAUtX,GAC1E,IAAImF,EAAQnF,EAAKmF,MACbvH,EAASoC,EAAKpC,OACd2X,EAAevV,EAAKuV,aACpBtF,EAAYjQ,EAAKiQ,UACjBhJ,EAAWjH,EAAKiH,SAChBwN,EAAazU,EAAKyU,WAClB0C,EAAMnX,EAAKmX,IACX38J,EAAWwlJ,EAAKxlJ,SAChBt7C,EAAM8gM,EAAK9gM,IAsBf,OAAOimM,EAjCE,MAiCU,CACjB,iBAAkB,SAAqBzyO,GACrC,IAAI0B,GAAO,EAAA+pO,EAAA,IAASzrO,GAAKA,EAAE0B,OAASwtO,EAAUlvO,GAE9C,OAAQ0B,EAAK1J,QACX,KAAK,EAEH,GAAgB,IAAZ0J,EAAK,GACP,OAAI,EAAA+pO,EAAA,IAASzrO,GACJkrO,EAAO,CAAC2X,EAAa,EAAG7iP,EAAEgmN,UAAU,MAEpC,CAAC68B,EAAa,EAAG7iP,EAAE,KAG5B,MAAM,IAAImjI,WAAW,gCAAuC,EAAOzhI,GAAQ,KAG/E,KAAK,EAGD,IAAIs8E,EAAOt8E,EAAK,GACZm2G,EAAOn2G,EAAK,GAEhB,GAAIs8E,IAAS65B,EACX,OAAI,EAAA4zH,EAAA,IAASzrO,GACJkrO,EAAO2Z,EAAK7kP,EAAEgmN,UAAWhoI,EAAM65B,GAAO73G,EAAE4tO,WAGxCiX,EAAK7kP,EAAGg+E,EAAM65B,GAGvB,MAAM,IAAIsrB,WAAW,gCAAuC,EAAOzhI,GAAQ,KAIjF,QAEE,MAAM,IAAIyhI,WAAW,yCAAgD,EAAOzhI,GAAQ,OAG1Fo0C,IAAK,SAAa91C,GAEhB,OAAO6iP,EAAa,EAAG7iP,MAY3B,SAAS6kP,EAAK78K,EAAKgW,EAAM65B,GACvB,IAAIr3G,EAAGoD,EAAGhF,EAAG3F,EAAOsG,EAEpB,GAAa,IAATy+E,EAAY,CAId,GAAc,KAFd/kF,EAAQ+uE,EAAI,GAAG,IAGb,MAAM5oE,MAAM,iDAGd,MAAO,CAAC,CAACyjP,EAAa,EAAG5pP,KACpB,GAAa,IAAT+kF,EAAY,CAErB,IAAI13E,EAAIm+O,EAAIz8K,GAEZ,GAAU,IAAN1hE,EACF,MAAMlH,MAAM,iDAGd,MAAO,CAAC,CAACyjP,EAAa76K,EAAI,GAAG,GAAI1hE,GAAIu8O,EAAad,EAAW/5K,EAAI,GAAG,IAAK1hE,IAAK,CAACu8O,EAAad,EAAW/5K,EAAI,GAAG,IAAK1hE,GAAIu8O,EAAa76K,EAAI,GAAG,GAAI1hE,KAQ/I,IAAIqvN,EAAI3tJ,EAAInkE,SAEZ,IAAKrD,EAAI,EAAGA,EAAIw9E,EAAMx9E,IACpBm1N,EAAEn1N,GAAKm1N,EAAEn1N,GAAGqD,SAOd,IAFA,IAAI+xN,EAAI9tI,EAAS9J,GAAMgoI,UAEdt/M,EAAI,EAAGA,EAAImxG,EAAMnxG,IAAK,CAE7B,IAAIo+O,EAAOt4M,EAAImpL,EAAEjvN,GAAGA,IAChBq+O,EAAOr+O,EAGX,IAFAlG,EAAIkG,EAAI,EAEDlG,EAAIw9E,GACLxxC,EAAImpL,EAAEn1N,GAAGkG,IAAMo+O,IACjBA,EAAOt4M,EAAImpL,EAAEn1N,GAAGkG,IAChBq+O,EAAOvkP,GAGTA,IAGF,GAAa,IAATskP,EACF,MAAM1lP,MAAM,kDAGdoB,EAAIukP,KAEMr+O,IACRnH,EAAOo2N,EAAEjvN,GACTivN,EAAEjvN,GAAKivN,EAAEn1N,GACTm1N,EAAEn1N,GAAKjB,EACPA,EAAOq2N,EAAElvN,GACTkvN,EAAElvN,GAAKkvN,EAAEp1N,GACTo1N,EAAEp1N,GAAKjB,GAIT,IAAIylP,EAAKrvB,EAAEjvN,GACPu+O,EAAKrvB,EAAElvN,GAEX,IAAKlG,EAAI,EAAGA,EAAIw9E,EAAMx9E,IAAK,CACzB,IAAI0kP,EAAKvvB,EAAEn1N,GACP2kP,EAAKvvB,EAAEp1N,GAEX,GAAIA,IAAMkG,GAER,GAAc,IAAVw+O,EAAGx+O,GAAU,CAIf,IAHA9H,EAAIikP,EAAad,EAAWmD,EAAGx+O,IAAKs+O,EAAGt+O,IAGlC9C,EAAI8C,EAAG9C,EAAIi0G,EAAMj0G,IACpBshP,EAAGthP,GAAK25O,EAAU2H,EAAGthP,GAAI2wO,EAAS31O,EAAGomP,EAAGphP,KAG1C,IAAKA,EAAI,EAAGA,EAAIi0G,EAAMj0G,IACpBuhP,EAAGvhP,GAAK25O,EAAU4H,EAAGvhP,GAAI2wO,EAAS31O,EAAGqmP,EAAGrhP,UAGvC,CAKL,IAFAhF,EAAIomP,EAAGt+O,GAEF9C,EAAI8C,EAAG9C,EAAIi0G,EAAMj0G,IACpBshP,EAAGthP,GAAKi/O,EAAaqC,EAAGthP,GAAIhF,GAG9B,IAAKgF,EAAI,EAAGA,EAAIi0G,EAAMj0G,IACpBuhP,EAAGvhP,GAAKi/O,EAAasC,EAAGvhP,GAAIhF,KAMpC,OAAOg3N,MC/LFwvB,GAA8B,EAF9B,SACQ,CAAC,QAAS,SAAU,WAAY,cAAe,eAAgB,QACb,SAAU9X,GAC7E,IAAImF,EAAQnF,EAAKmF,MACbvH,EAASoC,EAAKpC,OACdqJ,EAAWjH,EAAKiH,SAChBkB,EAAcnI,EAAKmI,YACnBoN,EAAevV,EAAKuV,aACpBwC,EAAM/X,EAAK+X,IACXvG,EAAcjE,GAAkB,CAClCpI,MAAOA,EACPgD,YAAaA,IAEXuG,EAAczB,GAAkB,CAClC9H,MAAOA,IAkCT,OAAOA,EAAM,SAAU/G,EAAO,CAE5B,iCAAkC,SAAgC1rO,EAAG+hB,GAKnE,OAAOwyN,EAASv0O,EAAGqlP,EAAItjO,KAEzB,mBAAoB,SAAwB/hB,EAAG+hB,GAC7C,OAAOi6N,EAAYh8O,EAAG+hB,EAAG8gO,GAAc,IAEzC,oBAAqB,SAAyB7iP,EAAG+hB,GAC/C,OAAO+8N,EAAY9+O,EAAG+hB,EAAG8gO,GAAc,IAEzC,aAAc,SAAkB7iP,EAAG+hB,GAEjC,OAAOi6N,EAAY9Q,EAAOlrO,GAAI+hB,EAAG8gO,GAAc,GAAO78B,WAExD,sBAAuB,SAAwBhmN,EAAG+hB,GAChD,OAAOwyN,EAASv0O,EAAGqlP,EAAItjO,MAExB8gO,EAAalF,gBCtEd2H,GAAwB,WACxB,GAAO,WAEAC,GAAgC,EAAQ,GADhC,CAAC,QAAS,MAAO,WAAY,WAAY,SAAU,QAAS,UACR,SAAUjY,GAC/E,IAAImF,EAAQnF,EAAKmF,MACb10N,EAAMuvN,EAAKvvN,IACXw0M,EAAW+a,EAAK/a,SAChBgiB,EAAWjH,EAAKiH,SAChB9mB,EAAS6f,EAAK7f,OACd/zN,EAAQ4zO,EAAK5zO,MACboL,EAAQwoO,EAAKxoO,MAuDjB,OAAO2tO,EAAM,GAAM,CAEjB,iBAAkB,SAAqBpzO,GACrC,OAAOmmP,EAAKnmP,EAAOimP,KAGrB,yBAA0BE,EAE1B,qCAAsC,SAAoCnmP,EAAOyzC,GAC/E,OAAO2yM,EAAQpmP,EAAOyzC,EAAKwyM,KAG7B,6CAA8CG,EAE9C,MAAO,SAAWjsP,GAChB,OAAOgsP,EAAKhsP,EAAM8rP,OAetB,SAASE,EAAKnmP,EAAOqmP,GACnB,IAAItlP,EACAyE,EAAM,EAEV,GAAqB,IAAjBxF,EAAMrH,OACR,MAAM,IAAIuwN,YAAY,kEAYxB,GARAyqB,GAAY3zO,GAAO,SAAUpG,GAC3B,IACEmH,OAAcxG,IAARwG,EAAoBnH,EAAQ8kB,EAAI3d,EAAKnH,GAC3C4L,IACA,MAAOlL,GACP,MAAMioP,GAAoBjoP,EAAK,WAAYV,OAGnC,IAAR4L,EAAW,MAAM,IAAIzF,MAAM,+CAC/B,IAAIo+C,EAAOiwK,EAAOrtN,EAAKyE,GAQvB,GANAzE,OAAMxG,EACNo5O,GAAY3zO,GAAO,SAAUpG,GAC3B,IAAI0H,EAAO4xN,EAASt5N,EAAOukD,GAC3Bp9C,OAAcxG,IAARwG,EAAoBm0O,EAAS5zO,EAAMA,GAAQod,EAAI3d,EAAKm0O,EAAS5zO,EAAMA,OAGvEmE,EAAM1E,GACR,OAAOA,EAGT,OAAQslP,GACN,IAAK,cACH,OAAOj4B,EAAOrtN,EAAKyE,GAErB,IAAK,SACH,OAAO4oN,EAAOrtN,EAAKyE,EAAM,GAE3B,IAAK,WAED,IAAIkjE,GAAO,EAAA0jK,EAAA,IAAYrrO,GAAOA,EAAI+tC,IAAI,GAAK,EAC3C,OAAe,IAARtpC,EAAYkjE,EAAO0lJ,EAAOrtN,EAAKyE,EAAM,GAGhD,QACE,MAAM,IAAIzF,MAAM,0BAA4BsmP,EAA5B,gEAItB,SAASD,EAAQpmP,EAAOyzC,EAAK4yM,GAC3B,IACE,GAAqB,IAAjBrmP,EAAMrH,OACR,MAAM,IAAIuwN,YAAY,kEAGxB,OAAO7uN,EAAM2F,EAAOyzC,GAAK,SAAU9yC,GACjC,OAAOwlP,EAAKxlP,EAAG0lP,MAEjB,MAAO/rP,GACP,MAAMioP,GAAoBjoP,EAAK,iBC1J1BgsP,GAA2B,EAF3B,MACQ,CAAC,QAAS,OAAQ,aAC6B,SAAUrY,GAC1E,IAAImF,EAAQnF,EAAKmF,MACbnwO,EAAOgrO,EAAKhrO,KACZm7C,EAAW6vL,EAAK7vL,SAsDpB,OAAOg1L,EA3DE,MA2DU,CAEjB,iBAAkBmT,EAElB,yBAA0BA,EAE1B,qCAAsCA,EAEtC,6CAA8CA,EAE9C,MAAO,SAAWpsP,GAChB,OAAOosP,EAAKpsP,MAIhB,SAASosP,EAAKvmP,EAAOqmP,GACnB,GAAqB,IAAjBrmP,EAAMrH,OACR,MAAM,IAAIuwN,YAAY,6DAGxB,IACE,OAAOjmN,EAAKm7C,EAAS/jD,MAAM,KAAMD,YACjC,MAAOE,GACP,MAAIA,aAAeI,YAAmD,IAAtCJ,EAAIsnB,QAAQ2J,QAAQ,aAC5C,IAAI7wB,UAAUJ,EAAIsnB,QAAQ9X,QAAQ,YAAa,SAE/CxP,OClFV,GAAO,SAEAksP,GAA8B,EAAQ,GAD9B,CAAC,QAAS,MAAO,SAAU,UAAW,oBACY,SAAUvY,GAC7E,IAAImF,EAAQnF,EAAKmF,MACb10N,EAAMuvN,EAAKvvN,IACX0vM,EAAS6f,EAAK7f,OACd2E,EAAUkb,EAAKlb,QACf0zB,EAAkBxY,EAAKwY,gBAQ3B,SAASC,EAAQ1mP,GACf,IAEE,IAAIwF,GADJxF,EAAQiC,EAAQjC,EAAM2mN,YACNhuN,OAEhB,GAAY,IAAR6M,EACF,MAAM,IAAIzF,MAAM,6CAGlB,GAAIyF,EAAM,GAAM,EAAG,CAOjB,IALA,IAAImhP,EAAMnhP,EAAM,EAAI,EAChBq0C,EAAQ4sM,EAAgBzmP,EAAO2mP,EAAM,GAErC/sM,EAAO55C,EAAM2mP,GAER/tP,EAAI,EAAGA,EAAI+tP,IAAO/tP,EACrBm6N,EAAQ/yN,EAAMpH,GAAIghD,GAAQ,IAC5BA,EAAO55C,EAAMpH,IAIjB,OAAOguP,EAAQhtM,EAAMC,GAGrB,IAAIxpB,EAAIo2N,EAAgBzmP,GAAQwF,EAAM,GAAK,GAC3C,OAAO08D,EAAO7xC,GAEhB,MAAO/1B,GACP,MAAMioP,GAAoBjoP,EAAK,WAKnC,IAAI4nE,EAASkxK,EAAM,CACjB,sCAAuC,SAAoCx5O,GACzE,OAAOA,KAIPgtP,EAAUxT,EAAM,CAClB,2EAA4E,SAA8Dx5L,EAAMC,GAC9I,OAAOu0K,EAAO1vM,EAAIk7B,EAAMC,GAAQ,MA8BpC,OAAOu5L,EAAM,GAAM,CAEjB,iBAAkBsT,EAElB,qCAAsC,SAAoC1mP,EAAOyzC,GAE/E,MAAM,IAAI1zC,MAAM,wCAGlB,MAAO,SAAW5F,GAChB,GrE3FC,SAA6B6F,GAClC,IAAK,IAAIpH,EAAI,EAAGA,EAAIoH,EAAMrH,OAAQC,IAChC,IAAI,EAAAwzO,EAAA,IAAapsO,EAAMpH,IACrB,OAAO,EAIX,OAAO,EqEoFCiuP,CAAoB1sP,GACtB,MAAM,IAAIO,UAAU,6CAGtB,OAAOgsP,EAAQvsP,SCjGVuS,GAAyB2gO,EAAmB,IAK5CS,GAA2BE,EAAqB,CACzDr4N,OAAQA,IAEC04N,GAAwBD,EAAkB,IA6C1ClY,GAA0B4Y,EAAoB,IAc9CgC,GAA6BD,EAAuB,CAC7DxC,OAAQA,KAMC+E,GAAuBD,EAAY,CAC5CrF,UAAWA,GACXphO,QAASA,GACTokO,YAAaA,GACb5a,SAAUA,KAEDpuN,GAA2B8rO,GAAgB,CACpDR,MAAOA,KAEE6C,GAA2BpC,GAAgB,CACpDT,MAAOA,KAKE,GAAuBU,GAAY,CAC5CV,MAAOA,KAEEgD,GAA6BnC,GAAkB,CACxDt+N,OAAQA,EACRy9N,MAAOA,KAEErL,GAAwBqM,GAAa,CAC9ChB,MAAOA,KAoBE/4O,GAAuBs6O,GAAY,CAC5C7sO,UAAWA,GACXsrO,MAAOA,KAcEoL,GAAgCxJ,GAAqB,CAC9D5B,MAAOA,KAkIE,GAA0BoC,GAAe,CAClDtf,SAAUA,GACVkd,MAAOA,KAEEsP,GAA4BjN,GAAiB,CACtDrC,MAAOA,KAEE8K,GAA2BxI,GAAgB,CACpDtC,MAAOA,KAUEnwO,GAAsB2yO,GAAW,CAC1ClpO,QAASA,GACTiJ,OAAQA,EACRy9N,MAAOA,KAEEqL,GAAsB3I,GAAW,CAC1C1C,MAAOA,KAKE9nL,GAAsB0qL,GAAW,CAC1CvwO,MAAO,GACPwwO,UAAWA,GACX7C,MAAOA,KAyCEiD,GAA8BF,GAAwB,CAC/D9H,OAAQA,GACR+H,YAAaA,GACbhD,MAAOA,KAEEvH,GAAwBkN,GAAa,CAC9CjI,YAAaA,GACbzC,OAAQA,GACRgI,aAAcA,GACdjD,MAAOA,KAgEE3qJ,GAA0BqzJ,GAAe,CAClDhO,UAAWA,GACXgD,YAAaA,GACbuF,aAAcA,GACd1gO,OAAQA,EACRk2N,OAAQA,GACRuH,MAAOA,KAaE/wO,GAAsB+5O,GAAW,CAC1CvQ,OAAQA,GACRl2N,OAAQA,EACRy9N,MAAOA,KAqCErgB,GAAyBupB,GAAc,CAChDxO,UAAWA,GACXgD,YAAaA,GACb5a,SAAUA,GACVvgN,OAAQA,EACRygO,YAAaA,GACbvK,OAAQA,GACRuH,MAAOA,KAME4J,GAAyBJ,GAAc,CAChD9L,YAAaA,GACbn7N,OAAQA,EACRk2N,OAAQA,GACRuH,MAAOA,KAEE6J,GAAwBH,GAAa,CAC9ChM,YAAaA,GACbn7N,OAAQA,EACRk2N,OAAQA,GACRuH,MAAOA,KAaE+J,GAA+BJ,GAAyB,CACjEE,OAAQA,GACRD,QAASA,KAuBAt+N,GAAqBu/N,GAAU,CACxCnN,YAAaA,GACbuF,aAAcA,GACd6H,UAAWA,GACX9H,YAAaA,GACbvK,OAAQA,GACRuH,MAAOA,KAEEvvL,GAAqB06L,GAAU,CACxCL,UAAWA,GACXO,KAAMA,GACND,eAAgBA,GAChBn8O,KAAMA,GACN+wO,MAAOA,KAcEjmM,GAAqBoyM,GAAU,CACxCnM,MAAOA,KASE8B,GAA0BsK,GAAe,CAClDtB,UAAWA,GACXr6L,IAAKA,GACLuyL,YAAaA,GACbvK,OAAQA,GACR2S,eAAgBA,GAChBpL,MAAOA,KAkEEqT,GAAiC9E,GAAsB,CAChE5uB,QAASA,GACTttN,MAAO,GACPwwO,UAAWA,GACX7C,MAAOA,KAqFEyP,GAAyBb,GAAc,CAChDE,UAzBoCH,GAAgB,CACpDjU,UAAWA,GACXsF,MAAOA,KAwBPp2M,SAAU,GACV+qM,OAAQA,KAuEC7U,GAA0BuvB,GAAe,CAClD3R,YAAaA,GACboN,UAAWA,GACX9H,YAAaA,GACbvK,OAAQA,GACRuH,MAAOA,GACPsP,WAAYA,KA4FHc,GAA8BZ,GAAmB,CAC1DC,QAASA,GACTzP,MAAOA,KAqLEhlB,GAAwB23B,GAAa,CAC9CvC,aAAcA,GACdpN,YAAaA,GACb4P,IAtB8BT,GAAU,CACxCp4M,IAAKA,GACL+wM,UAAWA,GACXkH,IAlG8BH,GAAU,CACxCC,IA5B8B3B,GAAU,CACxCzS,YAAaA,GACbiS,IAhB8BD,GAAe,CAC7C3F,cAAeA,GACfe,UAAWA,GACX9H,YAAaA,KAcbC,aAAcA,GACdlpM,IAAKA,GACL+wM,UAAWA,GACXsF,aAAcA,GACdpN,YAAaA,GACb6G,OAAQA,GACRpR,OAAQA,GACR2S,eAAgBA,GAChBtrB,SAAUA,GACVkgB,MAAOA,GACPsP,WAAYA,KAgBZ7W,OAAQA,GACRqJ,SAAUA,GACVhiB,SAAUA,GACVkgB,MAAOA,GACPsP,WAAYA,KA6FZc,aAAcA,GACd/6J,SAAUA,GACVojJ,OAAQA,GACRqJ,SAAUA,GACV9B,MAAOA,GACPsP,WAAYA,KAcZ7W,OAAQA,GACRqJ,SAAUA,GACV9B,MAAOA,KAOEh1L,GAA0B8nM,GAAe,CAClDxnO,IAAKA,GACLrkB,MAAOA,GACP+zN,OAAQA,GACR3oN,MAAO,GACPyvO,SAAUA,GACVhiB,SAAUA,GACVkgB,MAAOA,KA+EEplC,GAAqBs4C,GAAU,CACxCrjP,KAAMA,GACNmwO,MAAOA,GACPh1L,SAAUA,KAqPDwvJ,GAAwB44C,GAAa,CAC9C9nO,IAAKA,GACLq0M,QAASA,GACT3E,OAAQA,GACRq4B,gBAAiBA,GACjBrT,MAAOA,M,kzECj6CF,SAAS0T,EAAYzoP,GAC1B,IAAIsC,EAEJ,IAAI,OAAUtC,GACZ,OAAIA,GAAK,EACAqH,SAASrH,GAAKsE,IAAWwtD,IAG9B9xD,EAAI,IACCsE,KAGF,OAAQ,EAAGtE,EAAI,GAGxB,GAAIA,EAAI,GACN,OAAO+B,KAAKm8D,IAAMn8D,KAAKi0D,IAAIj0D,KAAKm8D,GAAKl+D,GAAKyoP,EAAY,EAAIzoP,IAG5D,GAAIA,GAAK,OACP,OAAOsE,IAGT,GAAItE,EAAI,GAAM,CAEZ,IAAI0oP,EAAO1oP,EAAIA,EACX2oP,EAASD,EAAO1oP,EAChB4oP,EAAQD,EAAS3oP,EACjB6oP,EAAQD,EAAQ5oP,EACpB,OAAO+B,KAAK6C,KAAK,EAAI7C,KAAKm8D,GAAKl+D,GAAK+B,KAAK0xC,IAAIzzC,EAAI+B,KAAK2pN,EAAG1rN,IAAM,EAAI,GAAK,GAAKA,GAAK,GAAK,IAAM0oP,GAAQ,KAAO,MAAQC,GAAU,KAAO,QAAUC,GAAS,QAAU,UAAYC,GAAS,SAAW,YAAcA,EAAQ7oP,MAGxNA,EACFsC,EAAIwmP,EAAO,GAEX,IAAK,IAAIvuP,EAAI,EAAGA,EAAIuuP,EAAOxuP,SAAUC,EACnC+H,GAAKwmP,EAAOvuP,IAAMyF,EAAIzF,GAGxB,IAAImR,EAAI1L,EAAI+oP,EAAS,GACrB,OAAOhnP,KAAK6C,KAAK,EAAI7C,KAAKm8D,IAAMn8D,KAAK0xC,IAAI/nC,EAAG1L,EAAI,IAAO+B,KAAKyC,KAAKkH,GAAKpJ,EAExEmmP,EAAY3wN,UAAY,SAEjB,IAAIixN,EAAS,UACTD,EAAS,CAAC,kBAAwB,mBAAwB,kBAAuB,oBAAwB,kBAAwB,qBAA2B,sBAA4B,qBAA2B,sBAA4B,sBAA2B,uBAA4B,qBAA2B,sBAA4B,sBAA2B,wB,6MC9C/X5kP,EAAK,SAMF,SAAS8kP,EAAY1mP,GAC1B,OAAO,QAAMA,GAGR,SAAS2mP,EAAW3mP,GACzB,OAAOP,KAAK+2C,KAAK,EAAIx2C,GAGhB,SAAS4mP,EAAY5mP,GAC1B,OAAO+E,SAAS/E,IAAMP,KAAK2Y,KAAKpY,EAAI,GAAKA,GAAKP,KAAK2Y,IAAIpY,GAAKA,EAAI,KAAO,EAAI,EAGtE,SAAS6mP,EAAW7mP,GACzB,OAAOP,KAAK22C,KAAK,EAAIp2C,GAGhB,SAAS8mP,EAAY9mP,GAC1B,IAAI+mP,EAAO,EAAI/mP,EACf,OAAOP,KAAK2Y,IAAI2uO,EAAOtnP,KAAK6C,KAAKykP,EAAOA,EAAO,IAG1C,SAASC,EAAWhnP,GACzB,OAAOP,KAAK21C,KAAK,EAAIp1C,GAGhB,SAASinP,EAAYjnP,GAC1B,IAAI+mP,EAAO,EAAI/mP,EACXqG,EAAM5G,KAAK6C,KAAKykP,EAAOA,EAAO,GAClC,OAAOtnP,KAAK2Y,IAAI/R,EAAM0gP,GAOjB,SAASG,EAAYlnP,GAC1B,OAAO,QAAMA,GAWR,SAASmnP,EAAYnnP,GAC1B,OAAO,QAAMA,GAWR,SAASonP,EAAUpnP,GACxB,OAAO,EAAIP,KAAKg3D,IAAIz2D,GAGf,SAASqnP,EAAWrnP,GACzB,IAAI2vB,EAAIlwB,KAAKyC,IAAI,EAAIlC,GACrB,OAAQ2vB,EAAI,IAAMA,EAAI,GAGjB,SAAS23N,EAAUtnP,GACxB,OAAO,EAAIP,KAAKi0D,IAAI1zD,GAGf,SAASunP,EAAWvnP,GAEzB,OAAU,IAANA,EACKY,OAAO27I,kBAEP98I,KAAK+sC,IAAI,GAAK/sC,KAAKyC,IAAIlC,GAAKP,KAAKyC,KAAKlC,MAAO,QAAKA,GAItD,SAASwnP,EAAUxnP,GACxB,OAAO,EAAIP,KAAKwhD,IAAIjhD,GAGf,SAASynP,EAAWznP,GACzB,OAAO,GAAKP,KAAKyC,IAAIlC,GAAKP,KAAKyC,KAAKlC,IAO/B,SAAS0nP,EAAW1nP,GACzB,OAAO,QAAKA,GA3Fd0mP,EAAYlxN,UAAY5zB,EAIxB+kP,EAAWnxN,UAAY5zB,EAIvBglP,EAAYpxN,UAAY5zB,EAIxBilP,EAAWrxN,UAAY5zB,EAKvBklP,EAAYtxN,UAAY5zB,EAIxBolP,EAAWxxN,UAAY5zB,EAMvBqlP,EAAYzxN,UAAY5zB,EAQxBslP,EAAY1xN,UAAY5zB,EAYxBulP,EAAY3xN,UAAY5zB,EAYxBwlP,EAAU5xN,UAAY5zB,EAKtBylP,EAAW7xN,UAAY5zB,EAIvB0lP,EAAU9xN,UAAY5zB,EAStB2lP,EAAW/xN,UAAY5zB,EAIvB4lP,EAAUhyN,UAAY5zB,EAItB6lP,EAAWjyN,UAAY5zB,EAQvB8lP,EAAWlyN,UAAY5zB,G,oFCtGnBA,EAAK,SAKF,SAAS+lP,EAAiB3nP,GAC/B,OAAOA,EAAI,EAGN,SAAS4nP,EAAiB5nP,GAC/B,OAAOA,EAAI,EAGN,SAAS6nP,EAAa7nP,GAC3B,OAAa,IAANA,EAGF,SAASozO,EAAYpzO,GAC1B,OAAOY,OAAOkE,MAAM9E,GAVtB2nP,EAAiBnyN,UAAY5zB,EAI7BgmP,EAAiBpyN,UAAY5zB,EAI7BimP,EAAaryN,UAAY5zB,EAIzBwxO,EAAY59M,UAAY5zB,G,4BCrBxB,SAASjF,EAAQa,GAAmV,OAAtOb,EAArD,mBAAXX,QAAoD,iBAApBA,OAAOC,SAAmC,SAAiBuB,GAAO,cAAcA,GAA2B,SAAiBA,GAAO,OAAOA,GAAyB,mBAAXxB,QAAyBwB,EAAI1B,cAAgBE,QAAUwB,IAAQxB,OAAOrB,UAAY,gBAAkB6C,IAAyBA,GAe5W,SAASmI,EAAS3F,GACvB,MAAoB,iBAANA,EAET,SAASutO,EAAYvtO,GAC1B,OAAOA,IAA6C,IAAxCA,EAAElE,YAAYnB,UAAU4yO,cAAwB,EAEvD,SAASnnO,EAAUpG,GACxB,OAAOA,GAAoB,WAAfrD,EAAQqD,KAA0D,IAAvCzF,OAAOkB,eAAeuE,GAAGoG,YAAsB,EAEjF,SAAS0hP,EAAW9nP,GACzB,OAAOA,GAAoB,WAAfrD,EAAQqD,KAA2D,IAAxCzF,OAAOkB,eAAeuE,GAAG8nP,aAAuB,EAElF,SAASC,EAAO/nP,GACrB,OAAOA,IAAwC,IAAnCA,EAAElE,YAAYnB,UAAUotP,SAAmB,EAElD,SAASviP,EAASxF,GACvB,MAAoB,iBAANA,E,wWAET,IAAI5H,EAAUD,MAAMC,QACpB,SAASu1O,EAAS3tO,GACvB,OAAOA,IAA0C,IAArCA,EAAElE,YAAYnB,UAAUgzO,WAAqB,EAQpD,SAASqa,EAAahoP,GAC3B,OAAO7H,MAAMC,QAAQ4H,IAAM2tO,EAAS3tO,GAE/B,SAASsxO,EAActxO,GAC5B,OAAOA,GAAKA,EAAEsxO,gBAAsD,IAArCtxO,EAAElE,YAAYnB,UAAUgzO,WAAqB,EAEvE,SAASkJ,EAAe72O,GAC7B,OAAOA,GAAKA,EAAE62O,iBAAuD,IAArC72O,EAAElE,YAAYnB,UAAUgzO,WAAqB,EAExE,SAASsa,EAAQjoP,GACtB,OAAOA,IAAyC,IAApCA,EAAElE,YAAYnB,UAAUstP,UAAoB,EAEnD,SAASpuB,EAAQ75N,GACtB,OAAOA,IAAyC,IAApCA,EAAElE,YAAYnB,UAAUk/N,UAAoB,EAEnD,SAASn0N,EAAU1F,GACxB,MAAoB,kBAANA,EAET,SAASkoP,EAAYloP,GAC1B,OAAOA,IAA6C,IAAxCA,EAAElE,YAAYnB,UAAUutP,cAAwB,EAEvD,SAASC,EAAOnoP,GACrB,OAAOA,IAAwC,IAAnCA,EAAElE,YAAYnB,UAAUwtP,SAAmB,EAElD,SAAStiP,EAAW7F,GACzB,MAAoB,mBAANA,EAET,SAASooP,EAAOpoP,GACrB,OAAOA,aAAaivB,KAEf,SAAS45M,EAAS7oO,GACvB,OAAOA,aAAamkF,OAEf,SAASu3I,EAAS17N,GACvB,SAAUA,GAAoB,WAAfrD,EAAQqD,IAAmBA,EAAElE,cAAgBvB,QAAW6L,EAAUpG,IAAO8nP,EAAW9nP,IAE9F,SAASqoP,EAAOroP,GACrB,OAAa,OAANA,EAEF,SAASsoP,EAAYtoP,GAC1B,YAAapG,IAANoG,EAEF,SAASuoP,EAAevoP,GAC7B,OAAOA,IAA0B,IAArBA,EAAEuoP,iBAA8D,IAAnCvoP,EAAElE,YAAYnB,UAAUqlN,SAAmB,EAE/E,SAASwoC,EAAYxoP,GAC1B,OAAOA,IAAuB,IAAlBA,EAAEwoP,cAA2D,IAAnCxoP,EAAElE,YAAYnB,UAAUqlN,SAAmB,EAE5E,SAASyoC,EAAiBzoP,GAC/B,OAAOA,IAA4B,IAAvBA,EAAEyoP,mBAAgE,IAAnCzoP,EAAElE,YAAYnB,UAAUqlN,SAAmB,EAEjF,SAAS0oC,EAAY1oP,GAC1B,OAAOA,IAAuB,IAAlBA,EAAE0oP,cAA2D,IAAnC1oP,EAAElE,YAAYnB,UAAUqlN,SAAmB,EAE5E,SAAS2oC,EAAkB3oP,GAChC,OAAOA,IAA6B,IAAxBA,EAAE2oP,oBAAiE,IAAnC3oP,EAAElE,YAAYnB,UAAUqlN,SAAmB,EAElF,SAAS4oC,EAAe5oP,GAC7B,OAAOA,IAA0B,IAArBA,EAAE4oP,iBAA8D,IAAnC5oP,EAAElE,YAAYnB,UAAUqlN,SAAmB,EAE/E,SAAS6oC,EAAyB7oP,GACvC,OAAOA,IAAoC,IAA/BA,EAAE6oP,2BAAwE,IAAnC7oP,EAAElE,YAAYnB,UAAUqlN,SAAmB,EAEzF,SAAS8oC,EAAe9oP,GAC7B,OAAOA,IAA0B,IAArBA,EAAE8oP,iBAA8D,IAAnC9oP,EAAElE,YAAYnB,UAAUqlN,SAAmB,EAE/E,SAAS+oC,EAAY/oP,GAC1B,OAAOA,IAAuB,IAAlBA,EAAE+oP,cAA2D,IAAnC/oP,EAAElE,YAAYnB,UAAUqlN,SAAmB,EAE5E,SAASA,EAAOhgN,GACrB,OAAOA,IAAkB,IAAbA,EAAEggN,SAAsD,IAAnChgN,EAAElE,YAAYnB,UAAUqlN,SAAmB,EAEvE,SAASgpC,EAAahpP,GAC3B,OAAOA,IAAwB,IAAnBA,EAAEgpP,eAA4D,IAAnChpP,EAAElE,YAAYnB,UAAUqlN,SAAmB,EAE7E,SAASipC,EAAejpP,GAC7B,OAAOA,IAA0B,IAArBA,EAAEipP,iBAA8D,IAAnCjpP,EAAElE,YAAYnB,UAAUqlN,SAAmB,EAE/E,SAASkpC,EAAkBlpP,GAChC,OAAOA,IAA6B,IAAxBA,EAAEkpP,oBAAiE,IAAnClpP,EAAElE,YAAYnB,UAAUqlN,SAAmB,EAElF,SAASmpC,EAAYnpP,GAC1B,OAAOA,IAAuB,IAAlBA,EAAEmpP,cAA2D,IAAnCnpP,EAAElE,YAAYnB,UAAUqlN,SAAmB,EAE5E,SAASopC,EAAappP,GAC3B,OAAOA,IAAwB,IAAnBA,EAAEopP,eAA4D,IAAnCppP,EAAElE,YAAYnB,UAAUqlN,SAAmB,EAE7E,SAASqpC,EAAQrpP,GACtB,OAAOA,IAAyC,IAApCA,EAAElE,YAAYnB,UAAU0uP,UAAoB,EAEnD,SAASvZ,EAAO9vO,GACrB,IAAIoJ,EAAIzM,EAAQqD,GAEhB,MAAU,WAANoJ,EAEQ,OAANpJ,EAAmB,OACnB7H,MAAMC,QAAQ4H,GAAW,QACzBA,aAAaivB,KAAa,OAC1BjvB,aAAamkF,OAAe,SAE5BopJ,EAAYvtO,GAAW,YACvBoG,EAAUpG,GAAW,UACrB8nP,EAAW9nP,GAAW,WACtB2tO,EAAS3tO,GAAW,SACpB+nP,EAAO/nP,GAAW,OAClB65N,EAAQ75N,GAAW,QACnBioP,EAAQjoP,GAAW,QACnBkoP,EAAYloP,GAAW,YACvBggN,EAAOhgN,GAAWA,EAAEgd,KACpBqsO,EAAQrpP,GAAW,QACnBmoP,EAAOnoP,GAAW,OACf,SAGC,aAANoJ,EAAyB,WACtBA,I,2MCnJF,SAASjC,EAAUlO,GACxB,MAAqB,kBAAVA,KAIJ8L,SAAS9L,IAASA,IAAUwG,KAAKsW,MAAM9c,GAQzC,IAAIu6D,EAAsB/zD,KAAK+zD,MAAQ,SAAUxzD,GACtD,OAAIA,EAAI,EACC,EACEA,EAAI,GACL,EAED,GASAy1F,EAAsBh2F,KAAKg2F,MAAQ,SAAcz1F,GAC1D,OAAOP,KAAK2Y,IAAIpY,GAAKP,KAAK6pP,KAQjB90B,EAAuB/0N,KAAK+0N,OAAS,SAAex0N,GAC7D,OAAOP,KAAK2Y,IAAIpY,GAAKP,KAAKmqN,MAQjB/iK,EAAuBpnD,KAAKonD,OAAS,SAAU7mD,GACxD,OAAOP,KAAK2Y,IAAIpY,EAAI,IAYXmtN,EAAsB1tN,KAAK0tN,MAAQ,SAAcntN,GAC1D,GAAU,IAANA,EACF,OAAOA,EAGT,IACIU,EADA6oP,EAASvpP,EAAI,EAejB,OAZIupP,IACFvpP,GAAKA,GAMLU,EAHEqE,SAAS/E,IAGDA,IAFVU,EAASjB,KAAKyC,IAAIzC,KAAK2Y,IAAIpY,GAAK,IAERU,GAAU,EAAIA,GAAU,EAEvCV,EAGJupP,GAAU7oP,EAASA,GAQjB6jD,EAAuB9kD,KAAK8kD,OAAS,SAAevkD,GAC7D,OAAOA,GAAK,MAAQA,IAAM,KAAOP,KAAKyC,IAAIlC,GAAK,EAAIA,EAAIA,EAAIA,EAAI,EAAIA,EAAIA,EAAIA,EAAI,GAyE1E,SAASq1B,EAAOp8B,EAAOu3G,GAC5B,GAAuB,mBAAZA,EAET,OAAOA,EAAQv3G,GAIjB,GAAIA,IAAU+I,IACZ,MAAO,WACF,GAAI/I,KAAU,IACnB,MAAO,YACF,GAAI6L,MAAM7L,GACf,MAAO,MAIT,IACIijE,EADAkyK,EAAW,OAkBf,OAfI59H,IAEEA,EAAQ49H,WACVA,EAAW59H,EAAQ49H,WAIjB,QAAS59H,GACXt0C,EAAYs0C,GACH,QAASA,EAAQt0C,aAC1BA,EAAYs0C,EAAQt0C,YAKhBkyK,GACN,IAAK,QACH,OAAO90N,EAAQrgB,EAAOijE,GAExB,IAAK,cACH,OAAOsxJ,EAAcv0N,EAAOijE,GAE9B,IAAK,cACH,OA6DC,SAAuBjjE,EAAOijE,GACnC,GAAIp3D,MAAM7L,KAAW8L,SAAS9L,GAC5B,OAAOwM,OAAOxM,GAGhB,IACI01O,EAAU6a,EADFC,EAAYxwP,GACSijE,GAC7BvsC,EAAIg/M,EAAQj8J,SACZhsE,EAAIioO,EAAQ+a,aAEZrb,EAAS1+M,EAAI,GAAM,EAAIA,EAAIA,EAAI,EAAIA,EAAI,EAAIA,EAAI,EAAIA,EAAIA,EAAI,EAE/D,IAAI,QAASusC,GAEX,KAAOA,EAAYx1D,EAAE1O,QAAU23B,EAAI0+M,EAAS,EAAI3nO,EAAE1O,QAChD0O,EAAEhK,KAAK,QAOT,IAFA,IAAIitP,EAAelqP,KAAK+sC,IAAI7c,EAAI0+M,IAAW3nO,EAAE1O,OAAS,GAE7CC,EAAI,EAAGA,EAAI0xP,EAAc1xP,IAChCyO,EAAEhK,KAAK,GAQX,IAHA,IAAIktP,EAAUnqP,KAAK+sC,IAAI7c,EAAI0+M,GACvBwb,EAAa,EAEVD,EAAU,GACfC,IACAD,IAKF,IAAIE,EAAWpjP,EAAE9I,MAAMisP,GAAYtgP,KAAK,IACpCwgP,GAAa,QAAS7tL,IAAc4tL,EAAS9xP,QAAU8xP,EAAS/oN,MAAM,SAAW,IAAM+oN,EAAW,GAClGx7N,EAAM5nB,EAAE9I,MAAM,EAAGisP,GAAYtgP,KAAK,IAAMwgP,EAAa,KAAOp6N,GAAK,EAAI,IAAM,IAAM0+M,EAAO1wO,WAC5F,OAAOgxO,EAAQn7K,KAAOllC,EAtGXkgN,CAAcv1O,EAAOijE,GAE9B,IAAK,OAEH,OA+KC,SAAqBjjE,EAAOijE,EAAWs0C,GAC5C,GAAI1rG,MAAM7L,KAAW8L,SAAS9L,GAC5B,OAAOwM,OAAOxM,GAIhB,IAAIw1O,EAAWj+H,QAAgC52G,IAArB42G,EAAQi+H,SAAyBj+H,EAAQi+H,UAAY,EAC3EC,EAAWl+H,QAAgC52G,IAArB42G,EAAQk+H,SAAyBl+H,EAAQk+H,SAAW,EAC1E7lO,EAAQ4gP,EAAYxwP,GACpB01O,EAAUzyK,EAAYstL,EAAY3gP,EAAOqzD,GAAarzD,EAE1D,GAAI8lO,EAAQj8J,SAAW+7J,GAAYE,EAAQj8J,UAAYg8J,EAErD,OAAOlhB,EAAcv0N,EAAOijE,GAE5B,IAAIx1D,EAAIioO,EAAQ+a,aACZ/5N,EAAIg/M,EAAQj8J,SAEZhsE,EAAE1O,OAASkkE,IACbx1D,EAAIA,EAAE7C,OAAOm/C,EAAMkZ,EAAYx1D,EAAE1O,UAKnC0O,EAAIA,EAAE7C,OAAOm/C,EAAMrzB,EAAIjpB,EAAE1O,OAAS,GAAK0O,EAAE1O,OAASkkE,EAAYA,EAAYx1D,EAAE1O,OAAS,KAGrF,IAAIkrD,EAAMvzB,EAAI,EAAIA,EAAI,EAMtB,OAJIuzB,GAHJx8C,EAAIs8C,GAAOrzB,GAAG9rB,OAAO6C,IAGT1O,OAAS,GACnB0O,EAAEihC,OAAOub,EAAM,EAAG,EAAG,KAGhByrL,EAAQn7K,KAAO9sD,EAAE6C,KAAK,IAhNpB8pL,CAAYp6L,EAAOijE,EAAWs0C,GAAWA,GAASrnG,QAAQ,uBAAuB,WACtF,IAAI+pN,EAASz5N,UAAU,GACnBk2B,EAAIl2B,UAAU,GAClB,MAAkB,MAAXy5N,EAAiBA,EAASvjM,EAAIA,KAGzC,QACE,MAAM,IAAIvwB,MAAM,qBAAuBgvO,EAAvB,iDAUf,SAASqb,EAAYxwP,GAE1B,IAAI8nC,EAAQt7B,OAAOxM,GAAO8P,cAAcg4B,MAAM,sCAE9C,IAAKA,EACH,MAAM,IAAIwnL,YAAY,kBAAoBtvN,GAG5C,IAAIu6D,EAAOzyB,EAAM,GACbmyL,EAASnyL,EAAM,GACf2xC,EAAWr5D,WAAW0nB,EAAM,IAAM,KAClCmiB,EAAMgwK,EAAOtoM,QAAQ,KACzB8nD,IAAqB,IAATxvB,EAAaA,EAAM,EAAIgwK,EAAOl7N,OAAS,EACnD,IAAI0xP,EAAex2B,EAAO/pN,QAAQ,IAAK,IACtCA,QAAQ,OAAO,SAAU65C,GAGxB,OADA0vB,GAAY1vB,EAAMhrD,OACX,MACNmR,QAAQ,MAAO,IACjBN,MAAM,IAAIlF,KAAI,SAAU2C,GACvB,OAAOq4F,SAASr4F,MAQlB,OAL4B,IAAxBojP,EAAa1xP,SACf0xP,EAAahtP,KAAK,GAClBg2E,KAGK,CACLlf,KAAMA,EACNk2L,aAAcA,EACdh3K,SAAUA,GA2DP,SAASp5D,EAAQrgB,EAAOijE,GAC7B,GAAIp3D,MAAM7L,KAAW8L,SAAS9L,GAC5B,OAAOwM,OAAOxM,GAGhB,IAAI+wP,EAAaP,EAAYxwP,GACzB01O,EAA+B,iBAAdzyK,EAAyBstL,EAAYQ,EAAYA,EAAWt3K,SAAW,EAAIxW,GAAa8tL,EACzGtjP,EAAIioO,EAAQ+a,aACZ5sP,EAAI6xO,EAAQj8J,SAAW,EAGvBu3K,EAAKntP,GAAKo/D,GAAa,GAiB3B,OAfIx1D,EAAE1O,OAASiyP,IACbvjP,EAAIA,EAAE7C,OAAOm/C,EAAMinM,EAAKvjP,EAAE1O,UAIxB8E,EAAI,IACN4J,EAAIs8C,EAAW,EAAJlmD,GAAO+G,OAAO6C,GACzB5J,EAAI,GAIFA,EAAI4J,EAAE1O,QACR0O,EAAEihC,OAAO7qC,EAAG,EAAS,IAANA,EAAU,KAAO,KAG3B6xO,EAAQn7K,KAAO9sD,EAAE6C,KAAK,IAUxB,SAASikN,EAAcv0N,EAAOijE,GACnC,GAAIp3D,MAAM7L,KAAW8L,SAAS9L,GAC5B,OAAOwM,OAAOxM,GAIhB,IAAI4P,EAAQ4gP,EAAYxwP,GACpB01O,EAAUzyK,EAAYstL,EAAY3gP,EAAOqzD,GAAarzD,EACtDnC,EAAIioO,EAAQ+a,aACZ/5N,EAAIg/M,EAAQj8J,SAEZhsE,EAAE1O,OAASkkE,IACbx1D,EAAIA,EAAE7C,OAAOm/C,EAAMkZ,EAAYx1D,EAAE1O,UAInC,IAAIkyP,EAAQxjP,EAAEi2H,QACd,OAAOgyG,EAAQn7K,KAAO02L,GAASxjP,EAAE1O,OAAS,EAAI,IAAM0O,EAAE6C,KAAK,IAAM,IAAM,KAAOomB,GAAK,EAAI,IAAM,IAAMA,EA0D9F,SAAS65N,EAAY3gP,EAAOqzD,GASjC,IAPA,IAAIyyK,EAAU,CACZn7K,KAAM3qD,EAAM2qD,KACZk2L,aAAc7gP,EAAM6gP,aACpBh3K,SAAU7pE,EAAM6pE,UAEdhsE,EAAIioO,EAAQ+a,aAETxtL,GAAa,GAClBx1D,EAAEqsC,QAAQ,GACV47L,EAAQj8J,WACRxW,IAGF,GAAIx1D,EAAE1O,OAASkkE,GACCx1D,EAAEihC,OAAOu0B,EAAWx1D,EAAE1O,OAASkkE,GAEjC,IAAM,EAAG,CACnB,IAAIjkE,EAAIikE,EAAY,EAGpB,IAFAx1D,EAAEzO,KAEc,KAATyO,EAAEzO,IACPyO,EAAEmgB,MAEQ,IAAN5uB,IACFyO,EAAEqsC,QAAQ,GACV47L,EAAQj8J,WACRz6E,KAIFyO,IADAzO,KAMN,OAAO02O,EAQT,SAAS3rL,EAAMhrD,GAGb,IAFA,IAAIF,EAAM,GAEDG,EAAI,EAAGA,EAAID,EAAQC,IAC1BH,EAAI4E,KAAK,GAGX,OAAO5E,EAeF,SAASo7N,EAAOj6N,GACrB,OAAOA,EAAMu0N,gBAAgBrkN,QAAQ,OAAQ,IAC5CA,QAAQ,aAAc,IACtBnR,OAMI,IAAImyP,EAAcvpP,OAAOwpP,SAAW,qBAWpC,SAASC,EAAYrqP,EAAG+hB,EAAG2pB,GAEhC,GAAIA,QACF,OAAO1rC,IAAM+hB,EAGf,GAAI/hB,IAAM+hB,EACR,OAAO,EAIT,GAAIjd,MAAM9E,IAAM8E,MAAMid,GACpB,OAAO,EAIT,GAAIhd,SAAS/E,IAAM+E,SAASgd,GAAI,CAE9B,IAAIphB,EAAOlB,KAAK+sC,IAAIxsC,EAAI+hB,GAExB,OAAIphB,EAAOwpP,GAIFxpP,GAAQlB,KAAKQ,IAAIR,KAAK+sC,IAAIxsC,GAAIP,KAAK+sC,IAAIzqB,IAAM2pB,EAKxD,OAAO,EAQF,IAAI4J,EAAQ71C,KAAK61C,OAAS,SAAUt1C,GACzC,OAAOP,KAAK2Y,IAAI3Y,KAAK6C,KAAKtC,EAAIA,EAAI,GAAKA,IAE9Bs2C,EAAQ72C,KAAK62C,OAAS,SAAUt2C,GACzC,OAAOP,KAAK2Y,IAAI3Y,KAAK6C,KAAKtC,EAAIA,EAAI,GAAKA,IAQ9B42C,EAAQn3C,KAAKm3C,OAAS,SAAU52C,GACzC,OAAOP,KAAK2Y,KAAK,EAAIpY,IAAM,EAAIA,IAAM,GAQ5BmhD,EAAO1hD,KAAK0hD,MAAQ,SAAUnhD,GACvC,OAAQP,KAAKyC,IAAIlC,GAAKP,KAAKyC,KAAKlC,IAAM,GAQ7B4zD,EAAOn0D,KAAKm0D,MAAQ,SAAU5zD,GACvC,OAAQP,KAAKyC,IAAIlC,GAAKP,KAAKyC,KAAKlC,IAAM,GAQ7B+B,EAAOtC,KAAKsC,MAAQ,SAAU/B,GACvC,IAAI2vB,EAAIlwB,KAAKyC,IAAI,EAAIlC,GACrB,OAAQ2vB,EAAI,IAAMA,EAAI,K,4BCvlBjB,SAASpG,EAAQtxB,EAAGyF,GACzB,GAAIA,EAAIzF,EACN,OAAO,EAGT,GAAIyF,IAAMzF,EACR,OAAOyF,EAGT,IAAIk4D,EAAOl4D,EAAIzF,GAAK,EAEpB,OAAOsxB,EAAQtxB,EAAG29D,GAAQrsC,EAAQqsC,EAAO,EAAGl4D,G,2BCR9C,IAAI4sP,EAAW,SAAUzyP,GACvB,aAEA,IAEI+B,EAFA2wP,EAAKhwP,OAAOI,UACZ6vP,EAASD,EAAGntP,eAEZqtP,EAA4B,mBAAXzuP,OAAwBA,OAAS,GAClD0uP,EAAiBD,EAAQxuP,UAAY,aACrC0uP,EAAsBF,EAAQG,eAAiB,kBAC/CC,EAAoBJ,EAAQ5sB,aAAe,gBAE/C,SAASitB,EAAOttP,EAAK1E,EAAKG,GAOxB,OANAsB,OAAOC,eAAegD,EAAK1E,EAAK,CAC9BG,MAAOA,EACPmB,YAAY,EACZC,cAAc,EACdC,UAAU,IAELkD,EAAI1E,GAEb,IAEEgyP,EAAO,GAAI,IACX,MAAOnxP,GACPmxP,EAAS,SAASttP,EAAK1E,EAAKG,GAC1B,OAAOuE,EAAI1E,GAAOG,GAItB,SAASqqI,EAAKynH,EAASC,EAAS1yP,EAAM2yP,GAEpC,IAAIC,EAAiBF,GAAWA,EAAQrwP,qBAAqBwwP,EAAYH,EAAUG,EAC/Et4G,EAAYt4I,OAAOsB,OAAOqvP,EAAevwP,WACzCg1H,EAAU,IAAIy7H,EAAQH,GAAe,IAMzC,OAFAp4G,EAAUw4G,QAsMZ,SAA0BN,EAASzyP,EAAMq3H,GACvC,IAAIhwG,EAAQ2rO,EAEZ,OAAO,SAAgB5rN,EAAQ3mC,GAC7B,GAAI4mB,IAAU4rO,EACZ,MAAM,IAAInsP,MAAM,gCAGlB,GAAIugB,IAAU6rO,EAAmB,CAC/B,GAAe,UAAX9rN,EACF,MAAM3mC,EAKR,OAAO0yP,IAMT,IAHA97H,EAAQjwF,OAASA,EACjBiwF,EAAQ52H,IAAMA,IAED,CACX,IAAI2yP,EAAW/7H,EAAQ+7H,SACvB,GAAIA,EAAU,CACZ,IAAIC,EAAiBC,EAAoBF,EAAU/7H,GACnD,GAAIg8H,EAAgB,CAClB,GAAIA,IAAmBE,EAAkB,SACzC,OAAOF,GAIX,GAAuB,SAAnBh8H,EAAQjwF,OAGViwF,EAAQm8H,KAAOn8H,EAAQo8H,MAAQp8H,EAAQ52H,SAElC,GAAuB,UAAnB42H,EAAQjwF,OAAoB,CACrC,GAAI/f,IAAU2rO,EAEZ,MADA3rO,EAAQ6rO,EACF77H,EAAQ52H,IAGhB42H,EAAQq8H,kBAAkBr8H,EAAQ52H,SAEN,WAAnB42H,EAAQjwF,QACjBiwF,EAAQs8H,OAAO,SAAUt8H,EAAQ52H,KAGnC4mB,EAAQ4rO,EAER,IAAIW,EAASC,EAASpB,EAASzyP,EAAMq3H,GACrC,GAAoB,WAAhBu8H,EAAOlvO,KAAmB,CAO5B,GAJA2C,EAAQgwG,EAAQx2H,KACZqyP,EACAY,EAEAF,EAAOnzP,MAAQ8yP,EACjB,SAGF,MAAO,CACL5yP,MAAOizP,EAAOnzP,IACdI,KAAMw2H,EAAQx2H,MAGS,UAAhB+yP,EAAOlvO,OAChB2C,EAAQ6rO,EAGR77H,EAAQjwF,OAAS,QACjBiwF,EAAQ52H,IAAMmzP,EAAOnzP,OA9QPszP,CAAiBtB,EAASzyP,EAAMq3H,GAE7CkjB,EAcT,SAASs5G,EAAS7yP,EAAIkE,EAAKzE,GACzB,IACE,MAAO,CAAEikB,KAAM,SAAUjkB,IAAKO,EAAG+B,KAAKmC,EAAKzE,IAC3C,MAAOY,GACP,MAAO,CAAEqjB,KAAM,QAASjkB,IAAKY,IAhBjC9B,EAAQyrI,KAAOA,EAoBf,IAAIgoH,EAAyB,iBACzBc,EAAyB,iBACzBb,EAAoB,YACpBC,EAAoB,YAIpBK,EAAmB,GAMvB,SAASV,KACT,SAASmB,KACT,SAASC,KAIT,IAAIC,EAAoB,GACxBA,EAAkB9B,GAAkB,WAClC,OAAOnxP,MAGT,IAAIkzP,EAAWlyP,OAAOkB,eAClBixP,EAA0BD,GAAYA,EAASA,EAAS3tP,EAAO,MAC/D4tP,GACAA,IAA4BnC,GAC5BC,EAAOnvP,KAAKqxP,EAAyBhC,KAGvC8B,EAAoBE,GAGtB,IAAIC,EAAKJ,EAA2B5xP,UAClCwwP,EAAUxwP,UAAYJ,OAAOsB,OAAO2wP,GAWtC,SAASI,EAAsBjyP,GAC7B,CAAC,OAAQ,QAAS,UAAU4K,SAAQ,SAASm6B,GAC3CorN,EAAOnwP,EAAW+kC,GAAQ,SAAS3mC,GACjC,OAAOQ,KAAK8xP,QAAQ3rN,EAAQ3mC,SAkClC,SAAS8zP,EAAch6G,EAAWi6G,GAChC,SAASrV,EAAO/3M,EAAQ3mC,EAAKL,EAASC,GACpC,IAAIuzP,EAASC,EAASt5G,EAAUnzG,GAASmzG,EAAW95I,GACpD,GAAoB,UAAhBmzP,EAAOlvO,KAEJ,CACL,IAAItc,EAASwrP,EAAOnzP,IAChBE,EAAQyH,EAAOzH,MACnB,OAAIA,GACiB,iBAAVA,GACPuxP,EAAOnvP,KAAKpC,EAAO,WACd6zP,EAAYp0P,QAAQO,EAAM8zP,SAAS1zP,MAAK,SAASJ,GACtDw+O,EAAO,OAAQx+O,EAAOP,EAASC,MAC9B,SAASgB,GACV89O,EAAO,QAAS99O,EAAKjB,EAASC,MAI3Bm0P,EAAYp0P,QAAQO,GAAOI,MAAK,SAAS2zP,GAI9CtsP,EAAOzH,MAAQ+zP,EACft0P,EAAQgI,MACP,SAASxH,GAGV,OAAOu+O,EAAO,QAASv+O,EAAOR,EAASC,MAvBzCA,EAAOuzP,EAAOnzP,KA4BlB,IAAIk0P,EAgCJ1zP,KAAK8xP,QA9BL,SAAiB3rN,EAAQ3mC,GACvB,SAASm0P,IACP,OAAO,IAAIJ,GAAY,SAASp0P,EAASC,GACvC8+O,EAAO/3M,EAAQ3mC,EAAKL,EAASC,MAIjC,OAAOs0P,EAaLA,EAAkBA,EAAgB5zP,KAChC6zP,EAGAA,GACEA,KAkHV,SAAStB,EAAoBF,EAAU/7H,GACrC,IAAIjwF,EAASgsN,EAASzvP,SAAS0zH,EAAQjwF,QACvC,GAAIA,IAAW9lC,EAAW,CAKxB,GAFA+1H,EAAQ+7H,SAAW,KAEI,UAAnB/7H,EAAQjwF,OAAoB,CAE9B,GAAIgsN,EAASzvP,SAAiB,SAG5B0zH,EAAQjwF,OAAS,SACjBiwF,EAAQ52H,IAAMa,EACdgyP,EAAoBF,EAAU/7H,GAEP,UAAnBA,EAAQjwF,QAGV,OAAOmsN,EAIXl8H,EAAQjwF,OAAS,QACjBiwF,EAAQ52H,IAAM,IAAIgB,UAChB,kDAGJ,OAAO8xP,EAGT,IAAIK,EAASC,EAASzsN,EAAQgsN,EAASzvP,SAAU0zH,EAAQ52H,KAEzD,GAAoB,UAAhBmzP,EAAOlvO,KAIT,OAHA2yG,EAAQjwF,OAAS,QACjBiwF,EAAQ52H,IAAMmzP,EAAOnzP,IACrB42H,EAAQ+7H,SAAW,KACZG,EAGT,IAAI7yP,EAAOkzP,EAAOnzP,IAElB,OAAMC,EAOFA,EAAKG,MAGPw2H,EAAQ+7H,EAASyB,YAAcn0P,EAAKC,MAGpC02H,EAAQlzH,KAAOivP,EAAS0B,QAQD,WAAnBz9H,EAAQjwF,SACViwF,EAAQjwF,OAAS,OACjBiwF,EAAQ52H,IAAMa,GAUlB+1H,EAAQ+7H,SAAW,KACZG,GANE7yP,GA3BP22H,EAAQjwF,OAAS,QACjBiwF,EAAQ52H,IAAM,IAAIgB,UAAU,oCAC5B41H,EAAQ+7H,SAAW,KACZG,GAoDX,SAASwB,EAAahmP,GACpB,IAAIu5B,EAAQ,CAAE0sN,OAAQjmP,EAAK,IAEvB,KAAKA,IACPu5B,EAAM2sN,SAAWlmP,EAAK,IAGpB,KAAKA,IACPu5B,EAAM4sN,WAAanmP,EAAK,GACxBu5B,EAAM6sN,SAAWpmP,EAAK,IAGxB9N,KAAKm0P,WAAWhxP,KAAKkkC,GAGvB,SAAS+sN,EAAc/sN,GACrB,IAAIsrN,EAAStrN,EAAMgtN,YAAc,GACjC1B,EAAOlvO,KAAO,gBACPkvO,EAAOnzP,IACd6nC,EAAMgtN,WAAa1B,EAGrB,SAASd,EAAQH,GAIf1xP,KAAKm0P,WAAa,CAAC,CAAEJ,OAAQ,SAC7BrC,EAAY1lP,QAAQ8nP,EAAc9zP,MAClCA,KAAKyvB,OAAM,GA8Bb,SAASlqB,EAAO+e,GACd,GAAIA,EAAU,CACZ,IAAIgwO,EAAiBhwO,EAAS6sO,GAC9B,GAAImD,EACF,OAAOA,EAAexyP,KAAKwiB,GAG7B,GAA6B,mBAAlBA,EAASphB,KAClB,OAAOohB,EAGT,IAAK/Y,MAAM+Y,EAAS7lB,QAAS,CAC3B,IAAIC,GAAK,EAAGwE,EAAO,SAASA,IAC1B,OAASxE,EAAI4lB,EAAS7lB,QACpB,GAAIwyP,EAAOnvP,KAAKwiB,EAAU5lB,GAGxB,OAFAwE,EAAKxD,MAAQ4kB,EAAS5lB,GACtBwE,EAAKtD,MAAO,EACLsD,EAOX,OAHAA,EAAKxD,MAAQW,EACb6C,EAAKtD,MAAO,EAELsD,GAGT,OAAOA,EAAKA,KAAOA,GAKvB,MAAO,CAAEA,KAAMgvP,GAIjB,SAASA,IACP,MAAO,CAAExyP,MAAOW,EAAWT,MAAM,GA+MnC,OA5mBAmzP,EAAkB3xP,UAAYgyP,EAAG7wP,YAAcywP,EAC/CA,EAA2BzwP,YAAcwwP,EACzCA,EAAkBwB,YAAchD,EAC9ByB,EACA1B,EACA,qBAaFhzP,EAAQk2P,oBAAsB,SAASC,GACrC,IAAIv7J,EAAyB,mBAAXu7J,GAAyBA,EAAOlyP,YAClD,QAAO22F,IACHA,IAAS65J,GAG2B,uBAAnC75J,EAAKq7J,aAAer7J,EAAK50F,QAIhChG,EAAQshP,KAAO,SAAS6U,GAQtB,OAPIzzP,OAAOiB,eACTjB,OAAOiB,eAAewyP,EAAQzB,IAE9ByB,EAAOtyP,UAAY6wP,EACnBzB,EAAOkD,EAAQnD,EAAmB,sBAEpCmD,EAAOrzP,UAAYJ,OAAOsB,OAAO8wP,GAC1BqB,GAOTn2P,EAAQo2P,MAAQ,SAASl1P,GACvB,MAAO,CAAEg0P,QAASh0P,IAsEpB6zP,EAAsBC,EAAclyP,WACpCkyP,EAAclyP,UAAUgwP,GAAuB,WAC7C,OAAOpxP,MAET1B,EAAQg1P,cAAgBA,EAKxBh1P,EAAQs0B,MAAQ,SAAS4+N,EAASC,EAAS1yP,EAAM2yP,EAAa6B,QACxC,IAAhBA,IAAwBA,EAAc1zP,SAE1C,IAAI2C,EAAO,IAAI8wP,EACbvpH,EAAKynH,EAASC,EAAS1yP,EAAM2yP,GAC7B6B,GAGF,OAAOj1P,EAAQk2P,oBAAoB/C,GAC/BjvP,EACAA,EAAKU,OAAOpD,MAAK,SAASqH,GACxB,OAAOA,EAAOvH,KAAOuH,EAAOzH,MAAQ8C,EAAKU,WAuKjDmwP,EAAsBD,GAEtB7B,EAAO6B,EAAI9B,EAAmB,aAO9B8B,EAAGjC,GAAkB,WACnB,OAAOnxP,MAGTozP,EAAGhvP,SAAW,WACZ,MAAO,sBAkCT9F,EAAQwoB,KAAO,SAASljB,GACtB,IAAIkjB,EAAO,GACX,IAAK,IAAIvnB,KAAOqE,EACdkjB,EAAK3jB,KAAK5D,GAMZ,OAJAunB,EAAKoiB,UAIE,SAAShmC,IACd,KAAO4jB,EAAKroB,QAAQ,CAClB,IAAIc,EAAMunB,EAAKwG,MACf,GAAI/tB,KAAOqE,EAGT,OAFAV,EAAKxD,MAAQH,EACb2D,EAAKtD,MAAO,EACLsD,EAQX,OADAA,EAAKtD,MAAO,EACLsD,IAsCX5E,EAAQiH,OAASA,EAMjBssP,EAAQzwP,UAAY,CAClBmB,YAAasvP,EAEbpiO,MAAO,SAASklO,GAcd,GAbA30P,KAAKwN,KAAO,EACZxN,KAAKkD,KAAO,EAGZlD,KAAKuyP,KAAOvyP,KAAKwyP,MAAQnyP,EACzBL,KAAKJ,MAAO,EACZI,KAAKmyP,SAAW,KAEhBnyP,KAAKmmC,OAAS,OACdnmC,KAAKR,IAAMa,EAEXL,KAAKm0P,WAAWnoP,QAAQooP,IAEnBO,EACH,IAAK,IAAIrwP,KAAQtE,KAEQ,MAAnBsE,EAAK+tI,OAAO,IACZ4+G,EAAOnvP,KAAK9B,KAAMsE,KACjBiH,OAAOjH,EAAKD,MAAM,MACrBrE,KAAKsE,GAAQjE,IAMrB6vC,KAAM,WACJlwC,KAAKJ,MAAO,EAEZ,IACIg1P,EADY50P,KAAKm0P,WAAW,GACLE,WAC3B,GAAwB,UAApBO,EAAWnxO,KACb,MAAMmxO,EAAWp1P,IAGnB,OAAOQ,KAAK60P,MAGdpC,kBAAmB,SAASqC,GAC1B,GAAI90P,KAAKJ,KACP,MAAMk1P,EAGR,IAAI1+H,EAAUp2H,KACd,SAASo+H,EAAOr9G,EAAKg0O,GAYnB,OAXApC,EAAOlvO,KAAO,QACdkvO,EAAOnzP,IAAMs1P,EACb1+H,EAAQlzH,KAAO6d,EAEXg0O,IAGF3+H,EAAQjwF,OAAS,OACjBiwF,EAAQ52H,IAAMa,KAGN00P,EAGZ,IAAK,IAAIr2P,EAAIsB,KAAKm0P,WAAW11P,OAAS,EAAGC,GAAK,IAAKA,EAAG,CACpD,IAAI2oC,EAAQrnC,KAAKm0P,WAAWz1P,GACxBi0P,EAAStrN,EAAMgtN,WAEnB,GAAqB,SAAjBhtN,EAAM0sN,OAIR,OAAO31H,EAAO,OAGhB,GAAI/2F,EAAM0sN,QAAU/zP,KAAKwN,KAAM,CAC7B,IAAIwnP,EAAW/D,EAAOnvP,KAAKulC,EAAO,YAC9B4tN,EAAahE,EAAOnvP,KAAKulC,EAAO,cAEpC,GAAI2tN,GAAYC,EAAY,CAC1B,GAAIj1P,KAAKwN,KAAO65B,EAAM2sN,SACpB,OAAO51H,EAAO/2F,EAAM2sN,UAAU,GACzB,GAAIh0P,KAAKwN,KAAO65B,EAAM4sN,WAC3B,OAAO71H,EAAO/2F,EAAM4sN,iBAGjB,GAAIe,GACT,GAAIh1P,KAAKwN,KAAO65B,EAAM2sN,SACpB,OAAO51H,EAAO/2F,EAAM2sN,UAAU,OAG3B,KAAIiB,EAMT,MAAM,IAAIpvP,MAAM,0CALhB,GAAI7F,KAAKwN,KAAO65B,EAAM4sN,WACpB,OAAO71H,EAAO/2F,EAAM4sN,gBAU9BvB,OAAQ,SAASjvO,EAAMjkB,GACrB,IAAK,IAAId,EAAIsB,KAAKm0P,WAAW11P,OAAS,EAAGC,GAAK,IAAKA,EAAG,CACpD,IAAI2oC,EAAQrnC,KAAKm0P,WAAWz1P,GAC5B,GAAI2oC,EAAM0sN,QAAU/zP,KAAKwN,MACrByjP,EAAOnvP,KAAKulC,EAAO,eACnBrnC,KAAKwN,KAAO65B,EAAM4sN,WAAY,CAChC,IAAIiB,EAAe7tN,EACnB,OAIA6tN,IACU,UAATzxO,GACS,aAATA,IACDyxO,EAAanB,QAAUv0P,GACvBA,GAAO01P,EAAajB,aAGtBiB,EAAe,MAGjB,IAAIvC,EAASuC,EAAeA,EAAab,WAAa,GAItD,OAHA1B,EAAOlvO,KAAOA,EACdkvO,EAAOnzP,IAAMA,EAET01P,GACFl1P,KAAKmmC,OAAS,OACdnmC,KAAKkD,KAAOgyP,EAAajB,WAClB3B,GAGFtyP,KAAKm1P,SAASxC,IAGvBwC,SAAU,SAASxC,EAAQuB,GACzB,GAAoB,UAAhBvB,EAAOlvO,KACT,MAAMkvO,EAAOnzP,IAcf,MAXoB,UAAhBmzP,EAAOlvO,MACS,aAAhBkvO,EAAOlvO,KACTzjB,KAAKkD,KAAOyvP,EAAOnzP,IACM,WAAhBmzP,EAAOlvO,MAChBzjB,KAAK60P,KAAO70P,KAAKR,IAAMmzP,EAAOnzP,IAC9BQ,KAAKmmC,OAAS,SACdnmC,KAAKkD,KAAO,OACa,WAAhByvP,EAAOlvO,MAAqBywO,IACrCl0P,KAAKkD,KAAOgxP,GAGP5B,GAGTx1E,OAAQ,SAASm3E,GACf,IAAK,IAAIv1P,EAAIsB,KAAKm0P,WAAW11P,OAAS,EAAGC,GAAK,IAAKA,EAAG,CACpD,IAAI2oC,EAAQrnC,KAAKm0P,WAAWz1P,GAC5B,GAAI2oC,EAAM4sN,aAAeA,EAGvB,OAFAj0P,KAAKm1P,SAAS9tN,EAAMgtN,WAAYhtN,EAAM6sN,UACtCE,EAAc/sN,GACPirN,IAKb,MAAS,SAASyB,GAChB,IAAK,IAAIr1P,EAAIsB,KAAKm0P,WAAW11P,OAAS,EAAGC,GAAK,IAAKA,EAAG,CACpD,IAAI2oC,EAAQrnC,KAAKm0P,WAAWz1P,GAC5B,GAAI2oC,EAAM0sN,SAAWA,EAAQ,CAC3B,IAAIpB,EAAStrN,EAAMgtN,WACnB,GAAoB,UAAhB1B,EAAOlvO,KAAkB,CAC3B,IAAI2xO,EAASzC,EAAOnzP,IACpB40P,EAAc/sN,GAEhB,OAAO+tN,GAMX,MAAM,IAAIvvP,MAAM,0BAGlBwvP,cAAe,SAAS/wO,EAAUsvO,EAAYC,GAa5C,OAZA7zP,KAAKmyP,SAAW,CACdzvP,SAAU6C,EAAO+e,GACjBsvO,WAAYA,EACZC,QAASA,GAGS,SAAhB7zP,KAAKmmC,SAGPnmC,KAAKR,IAAMa,GAGNiyP,IAQJh0P,EA7sBK,CAotBiBD,EAAOC,SAGtC,IACEg3P,mBAAqBvE,EACrB,MAAOwE,GAUPpyO,SAAS,IAAK,yBAAdA,CAAwC4tO,K,4BCxuB1C,IAAIloP,EAAQ,IAGRorD,EAAO,GACPuhM,OAA2B,IAAX,EAAAllP,EAAyBD,OAAS,EAAAC,EAKlDmlP,EAAavvP,KAAK0xC,IAAI/uC,EARb,GAST6sP,EAAexvP,KAAK0xC,IAAI,EARf,IAST+9M,EAA0B,EAAfD,EACX5nN,EAAOjlC,IAGP+sP,EAAY1vP,KAAKC,OAiErB,SAAS0vP,EAAKt2P,GACZ,IAAIsQ,EAAGimP,EAASv2P,EAAId,OAChBg6O,EAAKz4O,KAAMtB,EAAI,EAAGoM,EAAI2tO,EAAG/5O,EAAI+5O,EAAG3tO,EAAI,EAAGT,EAAIouO,EAAGsd,EAAI,GAMtD,IAHKD,IAAUv2P,EAAM,CAACu2P,MAGfp3P,EAAImK,GACTwB,EAAE3L,GAAKA,IAET,IAAKA,EAAI,EAAGA,EAAImK,EAAOnK,IACrB2L,EAAE3L,GAAK2L,EAAES,EAAIgjC,EAAQhjC,EAAIvL,EAAIb,EAAIo3P,IAAWjmP,EAAIxF,EAAE3L,KAClD2L,EAAES,GAAK+E,GAIR4oO,EAAGnoO,EAAI,SAASyqE,GAIf,IAFA,IAAIlrE,EAAG5I,EAAI,EACPvI,EAAI+5O,EAAG/5O,EAAGoM,EAAI2tO,EAAG3tO,EAAGT,EAAIouO,EAAGsd,EACxBh7K,KACLlrE,EAAIxF,EAAE3L,EAAIovC,EAAQpvC,EAAI,GACtBuI,EAAIA,EAAI4B,EAAQwB,EAAEyjC,GAASzjC,EAAE3L,GAAK2L,EAAES,EAAIgjC,EAAQhjC,EAAI+E,KAAQxF,EAAES,GAAK+E,IAGrE,OADA4oO,EAAG/5O,EAAIA,EAAG+5O,EAAG3tO,EAAIA,EACV7D,IAGN4B,GAOL,SAASd,EAAQ9D,EAAK2kC,GACpB,IAAwCwpM,EAApCjrO,EAAS,GAAI6uP,UAAc/xP,GAAK,GACpC,GAAI2kC,GAAgB,KAAPotN,EACX,IAAK5jB,KAAQnuO,EACX,IAAMkD,EAAOhE,KAAK4E,EAAQ9D,EAAImuO,GAAOxpM,EAAQ,IAAO,MAAOxS,IAG/D,OAAQjvB,EAAO1I,OAAS0I,EAAgB,KAAP6uP,EAAa/xP,EAAMA,EAAM,KAQ5D,SAASgyP,EAAO5jM,EAAM9yD,GAEpB,IADA,IAA4B22P,EAAxBC,EAAa9jM,EAAO,GAAWvnD,EAAI,EAChCA,EAAIqrP,EAAW13P,QACpBc,EAAIuuC,EAAOhjC,GACTgjC,GAASooN,GAAyB,GAAhB32P,EAAIuuC,EAAOhjC,IAAWqrP,EAAWx5N,WAAW7xB,KAElE,OAAOsrP,EAAS72P,GAQlB,SAAS82P,EAAShkM,GAChB,IAEE,OADAmjM,EAAO3kC,OAAOiK,gBAAgBzoK,EAAO,IAAInnD,WAAWrC,IAC7CutP,EAAS/jM,GAChB,MAAOj8B,GACP,MAAO,EAAE,IAAIV,KAAM8/N,EAAQA,EAAOzlO,WAAaylO,EAAOzlO,UAAUumO,QACxDd,EAAOvlE,OAAQmmE,EAASniM,KAQpC,SAASmiM,EAASrvP,GAChB,OAAOmF,OAAO0vB,aAAaz7B,MAAM,EAAG4G,GA3ItC1I,EAAOC,QAAU,SAAS+zD,EAAM4kD,GAC9B,GAAIA,IAA8B,IAAnBA,EAAQ9oG,OAIrB,OAHA8oG,EAAQ9oG,QAAS,EACjBjI,KAAKC,OAAS9H,EAAOC,QAAQ+zD,EAAM4kD,GACnCA,EAAQ9oG,QAAS,EACVjI,KAAKC,OAEd,IAAIowP,EAAet/I,GAAWA,EAAQu/I,UAAY,EAC9Cj3P,EAAM,GAQNk3P,GALYR,EAAOluP,EACrBwuP,EAAc,CAAClkM,EAAM+jM,EAASniM,IAC9B,KAAK/zD,UAAYmyD,EAAOgkM,IAAY,GAAI92P,GAG/B,IAAIs2P,EAAKt2P,IAUpB,OAPA02P,EAAOG,EAASK,EAAKV,GAAI9hM,GAOlB,WAIL,IAHA,IAAI9vD,EAAIsyP,EAAKnmP,EA/CJ,GAgDLvD,EAAI0oP,EACJhvP,EAAI,EACDtC,EAAIuxP,GACTvxP,GAAKA,EAAIsC,GAAKoC,EACdkE,GAAKlE,EACLpC,EAAIgwP,EAAKnmP,EAAE,GAEb,KAAOnM,GAAKwxP,GACVxxP,GAAK,EACL4I,GAAK,EACLtG,KAAO,EAET,OAAQtC,EAAIsC,GAAKsG,IAIrB1O,EAAOC,QAAQo4P,YAAc,WAC3BxwP,KAAKC,OAASyvP,GAwGhBK,EAAO/vP,KAAKC,SAAU8tD,I,eChKtB,IAAIqC,EAAO,EAAQ,MAKfqgM,EAAS,EAAQ,MAKjBC,EAAS,EAAQ,KAQjBC,EAAY,EAAQ,MASpBC,EAAU,EAAQ,MAOlBC,EAAS,EAAQ,MAIjBC,EAAK,EAAQ,MAEjBA,EAAG1gM,KAAOA,EACV0gM,EAAGL,OAASA,EACZK,EAAGJ,OAASA,EACZI,EAAGH,UAAYA,EACfG,EAAGF,QAAUA,EACbE,EAAGD,OAASA,EAEZ14P,EAAOC,QAAU04P,G,qBC3DjB,OA2BA,SAAU7oP,EAAQ9P,EAAQkzP,GAE1B,SAAS0F,EAAK5kM,GACZ,IAgDIluD,EAhDAs0O,EAAKz4O,KAAMk3P,GAgDX/yP,EAAI,WAEG,SAASQ,GAClBA,EAAOA,EAAKP,WACZ,IAAK,IAAI1F,EAAI,EAAGA,EAAIiG,EAAKlG,OAAQC,IAAK,CAEpC,IAAIqkD,EAAI,oBADR5+C,GAAKQ,EAAKg4B,WAAWj+B,IAGrBqkD,GADA5+C,EAAI4+C,IAAM,EAGV5+C,GADA4+C,GAAK5+C,KACK,EAEVA,GAAS,YADT4+C,GAAK5+C,GAGP,OAAmB,wBAAXA,IAAM,KA5DhBs0O,EAAGv1O,KAAO,WACR,IAAI2M,EAAI,QAAU4oO,EAAG0e,GAAY,uBAAP1e,EAAGtrO,EAG7B,OAFAsrO,EAAG0e,GAAK1e,EAAGpvH,GACXovH,EAAGpvH,GAAKovH,EAAGnvH,GACJmvH,EAAGnvH,GAAKz5G,GAAK4oO,EAAGtrO,EAAQ,EAAJ0C,IAI7B4oO,EAAGtrO,EAAI,EACPsrO,EAAG0e,GAAKD,EAAK,KACbze,EAAGpvH,GAAK6tI,EAAK,KACbze,EAAGnvH,GAAK4tI,EAAK,KACbze,EAAG0e,IAAMD,EAAK7kM,GACVomL,EAAG0e,GAAK,IAAK1e,EAAG0e,IAAM,GAC1B1e,EAAGpvH,IAAM6tI,EAAK7kM,GACVomL,EAAGpvH,GAAK,IAAKovH,EAAGpvH,IAAM,GAC1BovH,EAAGnvH,IAAM4tI,EAAK7kM,GACVomL,EAAGnvH,GAAK,IAAKmvH,EAAGnvH,IAAM,GAC1B4tI,EAAO,KAGT,SAASviD,EAAKtvM,EAAGwK,GAKf,OAJAA,EAAE1C,EAAI9H,EAAE8H,EACR0C,EAAEsnP,GAAK9xP,EAAE8xP,GACTtnP,EAAEw5G,GAAKhkH,EAAEgkH,GACTx5G,EAAEy5G,GAAKjkH,EAAEikH,GACFz5G,EAGT,SAASunI,EAAK/kF,EAAMq8I,GAClB,IAAI0oD,EAAK,IAAIH,EAAK5kM,GACdjsC,EAAQsoL,GAAQA,EAAKtoL,MACrBixO,EAAOD,EAAGl0P,KAUd,OATAm0P,EAAKjoH,MAAQ,WAAa,OAAoB,WAAZgoH,EAAGl0P,OAAwB,GAC7Dm0P,EAAKC,OAAS,WACZ,OAAOD,IAAmC,uBAAhB,QAATA,IAAoB,IAEvCA,EAAKE,MAAQF,EACTjxO,IACmB,iBAAX,GAAqBuuL,EAAKvuL,EAAOgxO,GAC3CC,EAAKjxO,MAAQ,WAAa,OAAOuuL,EAAKyiD,EAAI,MAErCC,EAyBLh5P,GAAUA,EAAOC,QACnBD,EAAOC,QAAU84I,EACR,QAAU,YACe,KAAlC,aAAoB,OAAOA,GAAO,8BAElCp3I,KAAKs2D,KAAO8gF,EA7Ed,CAiFEp3I,E,WAEA,S,qBC9GF,OAIA,SAAUmO,EAAQ9P,EAAQkzP,GAE1B,SAASiG,EAAOnlM,GACd,IAAIomL,EAAKz4O,KAAMy3P,EAAU,GAGzBhf,EAAGv1O,KAAO,WACR,IAAI8D,EAAIyxO,EAAGzxO,EAAGmG,EAAIsrO,EAAGtrO,EAAGJ,EAAI0rO,EAAG1rO,EAAGhG,EAAI0xO,EAAG1xO,EAQzC,OAPAC,EAAKA,GAAK,GAAOA,IAAM,EAAKmG,EAC5BA,EAAKA,EAAIJ,EAAK,EACdA,EAAKA,GAAK,GAAOA,IAAM,EAAKhG,EAC5BA,EAAKA,EAAIC,EAAK,EACdyxO,EAAGzxO,EAAIA,EAAKA,GAAK,GAAOA,IAAM,GAAMmG,EACpCsrO,EAAGtrO,EAAIA,EAAKA,EAAIJ,EAAK,EACrB0rO,EAAG1rO,EAAKA,GAAK,GAAOI,IAAM,GAAMpG,EACzB0xO,EAAG1xO,EAAKA,EAAIC,EAAK,GAmB1ByxO,EAAG1xO,EAAI,EACP0xO,EAAGzxO,EAAI,EACPyxO,EAAGtrO,GAAI,WACPsrO,EAAG1rO,EAAI,WAEHslD,IAASnsD,KAAK8H,MAAMqkD,IAEtBomL,EAAG1xO,EAAKsrD,EAAO,WAAe,EAC9BomL,EAAGzxO,EAAW,EAAPqrD,GAGPolM,GAAWplM,EAIb,IAAK,IAAI9tC,EAAI,EAAGA,EAAIkzO,EAAQh5P,OAAS,GAAI8lB,IACvCk0N,EAAGzxO,GAA6B,EAAxBywP,EAAQ96N,WAAWpY,GAC3Bk0N,EAAGv1O,OAIP,SAASyxM,EAAKtvM,EAAGwK,GAKf,OAJAA,EAAE9I,EAAI1B,EAAE0B,EACR8I,EAAE7I,EAAI3B,EAAE2B,EACR6I,EAAE1C,EAAI9H,EAAE8H,EACR0C,EAAE9C,EAAI1H,EAAE0H,EACD8C,EAGT,SAASunI,EAAK/kF,EAAMq8I,GAClB,IAAI0oD,EAAK,IAAII,EAAOnlM,GAChBjsC,EAAQsoL,GAAQA,EAAKtoL,MACrBixO,EAAO,WAAa,OAAQD,EAAGl0P,SAAW,GAAK,YAenD,OAdAm0P,EAAKC,OAAS,WACZ,GACE,IAEInwP,IAFMiwP,EAAGl0P,SAAW,KACbk0P,EAAGl0P,SAAW,GAAK,aACF,GAAK,UACf,IAAXiE,GACT,OAAOA,GAETkwP,EAAKjoH,MAAQgoH,EAAGl0P,KAChBm0P,EAAKE,MAAQF,EACTjxO,IACmB,iBAAX,GAAqBuuL,EAAKvuL,EAAOgxO,GAC3CC,EAAKjxO,MAAQ,WAAa,OAAOuuL,EAAKyiD,EAAI,MAErCC,EAGLh5P,GAAUA,EAAOC,QACnBD,EAAOC,QAAU84I,EACR,QAAU,YACe,KAAlC,aAAoB,OAAOA,GAAO,8BAElCp3I,KAAK+2P,OAAS3/G,EAzFhB,CA6FEp3I,E,WAEA,S,qBCnGF,OAGA,SAAUmO,EAAQ9P,EAAQkzP,GAE1B,SAASiG,EAAOnlM,GACd,IAAIomL,EAAKz4O,KAAMy3P,EAAU,GAEzBhf,EAAGhyO,EAAI,EACPgyO,EAAGjwN,EAAI,EACPiwN,EAAG11H,EAAI,EACP01H,EAAG5nL,EAAI,EAGP4nL,EAAGv1O,KAAO,WACR,IAAI2M,EAAI4oO,EAAGhyO,EAAKgyO,EAAGhyO,GAAK,GAIxB,OAHAgyO,EAAGhyO,EAAIgyO,EAAGjwN,EACViwN,EAAGjwN,EAAIiwN,EAAG11H,EACV01H,EAAG11H,EAAI01H,EAAG5nL,EACH4nL,EAAG5nL,GAAM4nL,EAAG5nL,IAAM,GAAMhhD,EAAKA,IAAM,GAGxCwiD,KAAiB,EAAPA,GAEZomL,EAAGhyO,EAAI4rD,EAGPolM,GAAWplM,EAIb,IAAK,IAAI9tC,EAAI,EAAGA,EAAIkzO,EAAQh5P,OAAS,GAAI8lB,IACvCk0N,EAAGhyO,GAA6B,EAAxBgxP,EAAQ96N,WAAWpY,GAC3Bk0N,EAAGv1O,OAIP,SAASyxM,EAAKtvM,EAAGwK,GAKf,OAJAA,EAAEpJ,EAAIpB,EAAEoB,EACRoJ,EAAE2Y,EAAInjB,EAAEmjB,EACR3Y,EAAEkzG,EAAI19G,EAAE09G,EACRlzG,EAAEghD,EAAIxrD,EAAEwrD,EACDhhD,EAGT,SAASunI,EAAK/kF,EAAMq8I,GAClB,IAAI0oD,EAAK,IAAII,EAAOnlM,GAChBjsC,EAAQsoL,GAAQA,EAAKtoL,MACrBixO,EAAO,WAAa,OAAQD,EAAGl0P,SAAW,GAAK,YAenD,OAdAm0P,EAAKC,OAAS,WACZ,GACE,IAEInwP,IAFMiwP,EAAGl0P,SAAW,KACbk0P,EAAGl0P,SAAW,GAAK,aACF,GAAK,UACf,IAAXiE,GACT,OAAOA,GAETkwP,EAAKjoH,MAAQgoH,EAAGl0P,KAChBm0P,EAAKE,MAAQF,EACTjxO,IACmB,iBAAX,GAAqBuuL,EAAKvuL,EAAOgxO,GAC3CC,EAAKjxO,MAAQ,WAAa,OAAOuuL,EAAKyiD,EAAI,MAErCC,EAGLh5P,GAAUA,EAAOC,QACnBD,EAAOC,QAAU84I,EACR,QAAU,YACe,KAAlC,aAAoB,OAAOA,GAAO,8BAElCp3I,KAAK22P,OAASv/G,EApEhB,CAwEEp3I,E,WAEA,S,qBC7EF,OAyBA,SAAUmO,EAAQ9P,EAAQkzP,GAE1B,SAASiG,EAAOnlM,GACd,IAAIomL,EAAKz4O,KAGTy4O,EAAGv1O,KAAO,WACR,IACwB2M,EAAGoQ,EADvB4wC,EAAI4nL,EAAG5nL,EACP6mM,EAAIjf,EAAGif,EAAGh5P,EAAI+5O,EAAG/5O,EAcrB,OAZA+5O,EAAG5nL,EAAIA,EAAKA,EAAI,WAAc,EAE9B5wC,EAAIy3O,EAAGh5P,EAAI,GAAM,KACjBmR,EAAI6nP,EAAEh5P,EAAMA,EAAI,EAAK,KACrBuhB,GAAKA,GAAK,GACVpQ,GAAKA,GAAK,GACVoQ,GAAKA,IAAM,GACXpQ,GAAKA,IAAM,GAEXoQ,EAAIy3O,EAAEh5P,GAAKuhB,EAAIpQ,EACf4oO,EAAG/5O,EAAIA,EAECuhB,GAAK4wC,EAAKA,IAAM,IAAQ,GAGlC,SAAc4nL,EAAIpmL,GAChB,IAAIxiD,EAAGoQ,EAAGvhB,EAAGoM,EAAG+lD,EAAG6mM,EAAI,GAAIjqK,EAAQ,IAYnC,IAXIp7B,KAAiB,EAAPA,IAEZpyC,EAAIoyC,EACJA,EAAO,OAGPA,GAAc,KACdpyC,EAAI,EACJwtE,EAAQvnF,KAAKQ,IAAI+mF,EAAOp7B,EAAK5zD,SAG1BC,EAAI,EAAGoM,GAAK,GAAIA,EAAI2iF,IAAS3iF,EAE5BunD,IAAMpyC,GAAKoyC,EAAK11B,YAAY7xB,EAAI,IAAMunD,EAAK5zD,SAErC,IAANqM,IAAS+lD,EAAI5wC,GACjBA,GAAKA,GAAK,GACVA,GAAKA,IAAM,GACXA,GAAKA,GAAK,EACVA,GAAKA,IAAM,GACPnV,GAAK,IACP+lD,EAAKA,EAAI,WAAc,EAEvBnyD,EAAK,IADLmR,EAAK6nP,EAAM,IAAJ5sP,IAAamV,EAAI4wC,GACTnyD,EAAI,EAAI,GAW3B,IAPIA,GAAK,MACPg5P,EAA+B,KAA5BrlM,GAAQA,EAAK5zD,QAAU,KAAa,GAKzCC,EAAI,IACCoM,EAAI,IAASA,EAAI,IAAKA,EACzBmV,EAAIy3O,EAAGh5P,EAAI,GAAM,KACjBmR,EAAI6nP,EAAEh5P,EAAMA,EAAI,EAAK,KACrBuhB,GAAKA,GAAK,GACVpQ,GAAKA,GAAK,GACVoQ,GAAKA,IAAM,GACXpQ,GAAKA,IAAM,GACX6nP,EAAEh5P,GAAKuhB,EAAIpQ,EAGb4oO,EAAG5nL,EAAIA,EACP4nL,EAAGif,EAAIA,EACPjf,EAAG/5O,EAAIA,EAGT+R,CAAKgoO,EAAIpmL,GAGX,SAASsiJ,EAAKtvM,EAAGwK,GAIf,OAHAA,EAAEnR,EAAI2G,EAAE3G,EACRmR,EAAEghD,EAAIxrD,EAAEwrD,EACRhhD,EAAE6nP,EAAIryP,EAAEqyP,EAAErzP,QACHwL,EAGT,SAASunI,EAAK/kF,EAAMq8I,GACN,MAARr8I,IAAcA,GAAQ,IAAK38B,MAC/B,IAAI0hO,EAAK,IAAII,EAAOnlM,GAChBjsC,EAAQsoL,GAAQA,EAAKtoL,MACrBixO,EAAO,WAAa,OAAQD,EAAGl0P,SAAW,GAAK,YAenD,OAdAm0P,EAAKC,OAAS,WACZ,GACE,IAEInwP,IAFMiwP,EAAGl0P,SAAW,KACbk0P,EAAGl0P,SAAW,GAAK,aACF,GAAK,UACf,IAAXiE,GACT,OAAOA,GAETkwP,EAAKjoH,MAAQgoH,EAAGl0P,KAChBm0P,EAAKE,MAAQF,EACTjxO,IACEA,EAAMsxO,GAAG/iD,EAAKvuL,EAAOgxO,GACzBC,EAAKjxO,MAAQ,WAAa,OAAOuuL,EAAKyiD,EAAI,MAErCC,EAGLh5P,GAAUA,EAAOC,QACnBD,EAAOC,QAAU84I,EACR,QAAU,YACe,KAAlC,aAAoB,OAAOA,GAAO,8BAElCp3I,KAAK82P,QAAU1/G,EAjHjB,CAqHEp3I,E,WAEA,S,qBChJF,OAKA,SAAUmO,EAAQ9P,EAAQkzP,GAE1B,SAASiG,EAAOnlM,GACd,IAAIomL,EAAKz4O,KAGTy4O,EAAGv1O,KAAO,WAER,IAAwB2M,EAAGoQ,EAAvBy3O,EAAIjf,EAAGhyO,EAAG/H,EAAI+5O,EAAG/5O,EAQrB,OAPAmR,EAAI6nP,EAAEh5P,GAAoBuhB,GAAhBpQ,GAAMA,IAAM,GAAaA,GAAK,GACpBoQ,IAApBpQ,EAAI6nP,EAAGh5P,EAAI,EAAK,IAAcmR,IAAM,GAChBoQ,IAApBpQ,EAAI6nP,EAAGh5P,EAAI,EAAK,IAAcmR,IAAM,EAChBoQ,IAApBpQ,EAAI6nP,EAAGh5P,EAAI,EAAK,IAAcmR,GAAK,EACnCA,EAAI6nP,EAAGh5P,EAAI,EAAK,GAAuBuhB,IAAnBpQ,GAASA,GAAK,IAAeA,GAAK,EACtD6nP,EAAEh5P,GAAKuhB,EACPw4N,EAAG/5O,EAAKA,EAAI,EAAK,EACVuhB,GAGT,SAAcw4N,EAAIpmL,GAChB,IAAIvnD,EAAM4sP,EAAI,GAEd,GAAIrlM,KAAiB,EAAPA,GAERqlM,EAAE,GAAKrlM,OAIX,IADAA,EAAO,GAAKA,EACPvnD,EAAI,EAAGA,EAAIunD,EAAK5zD,SAAUqM,EAC7B4sP,EAAM,EAAJ5sP,GAAU4sP,EAAM,EAAJ5sP,IAAU,GACnBunD,EAAK11B,WAAW7xB,GAAK4sP,EAAG5sP,EAAI,EAAK,IAAM,GAIhD,KAAO4sP,EAAEj5P,OAAS,GAAGi5P,EAAEv0P,KAAK,GAC5B,IAAK2H,EAAI,EAAGA,EAAI,GAAc,IAAT4sP,EAAE5sP,KAAYA,GAOnC,IANS,GAALA,EAAY4sP,EAAE,IAAM,EAAYA,EAAE5sP,GAEtC2tO,EAAGhyO,EAAIixP,EACPjf,EAAG/5O,EAAI,EAGFoM,EAAI,IAAKA,EAAI,IAAKA,EACrB2tO,EAAGv1O,OAIPuN,CAAKgoO,EAAIpmL,GAGX,SAASsiJ,EAAKtvM,EAAGwK,GAGf,OAFAA,EAAEpJ,EAAIpB,EAAEoB,EAAEpC,QACVwL,EAAEnR,EAAI2G,EAAE3G,EACDmR,EAGT,SAASunI,EAAK/kF,EAAMq8I,GACN,MAARr8I,IAAcA,GAAQ,IAAK38B,MAC/B,IAAI0hO,EAAK,IAAII,EAAOnlM,GAChBjsC,EAAQsoL,GAAQA,EAAKtoL,MACrBixO,EAAO,WAAa,OAAQD,EAAGl0P,SAAW,GAAK,YAenD,OAdAm0P,EAAKC,OAAS,WACZ,GACE,IAEInwP,IAFMiwP,EAAGl0P,SAAW,KACbk0P,EAAGl0P,SAAW,GAAK,aACF,GAAK,UACf,IAAXiE,GACT,OAAOA,GAETkwP,EAAKjoH,MAAQgoH,EAAGl0P,KAChBm0P,EAAKE,MAAQF,EACTjxO,IACEA,EAAM3f,GAAGkuM,EAAKvuL,EAAOgxO,GACzBC,EAAKjxO,MAAQ,WAAa,OAAOuuL,EAAKyiD,EAAI,MAErCC,EAGLh5P,GAAUA,EAAOC,QACnBD,EAAOC,QAAU84I,EACR,QAAU,YACe,KAAlC,aAAoB,OAAOA,GAAO,8BAElCp3I,KAAK62P,UAAYz/G,EAnFnB,CAuFEp3I,E,WAEA,S,oBC9FF,OAGA,SAAUmO,EAAQ9P,EAAQkzP,GAE1B,SAASiG,EAAOnlM,GACd,IAAIomL,EAAKz4O,KAAMy3P,EAAU,GAGzBhf,EAAGv1O,KAAO,WACR,IAAI2M,EAAK4oO,EAAGhyO,EAAKgyO,EAAGhyO,IAAM,EAE1B,OADAgyO,EAAGhyO,EAAIgyO,EAAGjwN,EAAGiwN,EAAGjwN,EAAIiwN,EAAG11H,EAAG01H,EAAG11H,EAAI01H,EAAG5nL,EAAG4nL,EAAG5nL,EAAI4nL,EAAGx4N,GACzCw4N,EAAG1rO,EAAK0rO,EAAG1rO,EAAI,OAAS,IAC5B0rO,EAAGx4N,EAAKw4N,EAAGx4N,EAAKw4N,EAAGx4N,GAAK,EAAOpQ,EAAKA,GAAK,GAAO,GAGtD4oO,EAAGhyO,EAAI,EACPgyO,EAAGjwN,EAAI,EACPiwN,EAAG11H,EAAI,EACP01H,EAAG5nL,EAAI,EACP4nL,EAAGx4N,EAAI,EAEHoyC,KAAiB,EAAPA,GAEZomL,EAAGhyO,EAAI4rD,EAGPolM,GAAWplM,EAIb,IAAK,IAAI9tC,EAAI,EAAGA,EAAIkzO,EAAQh5P,OAAS,GAAI8lB,IACvCk0N,EAAGhyO,GAA6B,EAAxBgxP,EAAQ96N,WAAWpY,GACvBA,GAAKkzO,EAAQh5P,SACfg6O,EAAG1rO,EAAI0rO,EAAGhyO,GAAK,GAAKgyO,EAAGhyO,IAAM,GAE/BgyO,EAAGv1O,OAIP,SAASyxM,EAAKtvM,EAAGwK,GAOf,OANAA,EAAEpJ,EAAIpB,EAAEoB,EACRoJ,EAAE2Y,EAAInjB,EAAEmjB,EACR3Y,EAAEkzG,EAAI19G,EAAE09G,EACRlzG,EAAEghD,EAAIxrD,EAAEwrD,EACRhhD,EAAEoQ,EAAI5a,EAAE4a,EACRpQ,EAAE9C,EAAI1H,EAAE0H,EACD8C,EAGT,SAASunI,EAAK/kF,EAAMq8I,GAClB,IAAI0oD,EAAK,IAAII,EAAOnlM,GAChBjsC,EAAQsoL,GAAQA,EAAKtoL,MACrBixO,EAAO,WAAa,OAAQD,EAAGl0P,SAAW,GAAK,YAenD,OAdAm0P,EAAKC,OAAS,WACZ,GACE,IAEInwP,IAFMiwP,EAAGl0P,SAAW,KACbk0P,EAAGl0P,SAAW,GAAK,aACF,GAAK,UACf,IAAXiE,GACT,OAAOA,GAETkwP,EAAKjoH,MAAQgoH,EAAGl0P,KAChBm0P,EAAKE,MAAQF,EACTjxO,IACmB,iBAAX,GAAqBuuL,EAAKvuL,EAAOgxO,GAC3CC,EAAKjxO,MAAQ,WAAa,OAAOuuL,EAAKyiD,EAAI,MAErCC,EAGLh5P,GAAUA,EAAOC,QACnBD,EAAOC,QAAU84I,EACR,QAAU,YACe,KAAlC,aAAoB,OAAOA,GAAO,8BAElCp3I,KAAK42P,OAASx/G,EAzEhB,CA6EEp3I,E,WAEA,S,eClFF,OAwBA,SAAWi0D,EAAM0jM,GAIjB,IASIC,EATAzpP,EAASnO,KACT6I,EAAQ,IAIR4sP,EAAakC,EAAK//M,IAAI/uC,EAHb,GAIT6sP,EAAeiC,EAAK//M,IAAI,EAHf,IAIT+9M,EAA0B,EAAfD,EACX5nN,EAAOjlC,IAOX,SAASwtD,EAAWhE,EAAM4kD,EAASvgB,GACjC,IAAIn3F,EAAM,GAINs4P,EAAY5B,EAAOluP,GAHvBkvG,EAAsB,GAAXA,EAAmB,CAAEu/I,SAAS,GAAUv/I,GAAW,IAIpDu/I,QAAU,CAACnkM,EAAM+jM,EAASniM,IACzB,MAAR5B,EA+IL,WACE,IACE,IAAIvoC,EAQJ,OAPI8tO,IAAe9tO,EAAM8tO,EAAW78B,aAElCjxM,EAAMA,EAAIjhB,IAEVihB,EAAM,IAAI5e,WAAWrC,IACpBsF,EAAO0iN,QAAU1iN,EAAO2pP,UAAUh9B,gBAAgBhxM,IAE9CssO,EAAStsO,GAChB,MAAOsM,GACP,IAAI2hO,EAAU5pP,EAAO4hB,UACjBumO,EAAUyB,GAAWA,EAAQzB,QACjC,MAAO,EAAE,IAAI5gO,KAAMvnB,EAAQmoP,EAASnoP,EAAO8hL,OAAQmmE,EAASniM,KA7J3CoiM,GAAahkM,EAAM,GAAI9yD,GAGtCk3P,EAAO,IAAIZ,EAAKt2P,GAIhB83P,EAAO,WAIT,IAHA,IAAIlzP,EAAIsyP,EAAKnmP,EA5BJ,GA6BLvD,EAAI0oP,EACJhvP,EAAI,EACDtC,EAAIuxP,GACTvxP,GAAKA,EAAIsC,GAAKoC,EACdkE,GAAKlE,EACLpC,EAAIgwP,EAAKnmP,EAAE,GAEb,KAAOnM,GAAKwxP,GACVxxP,GAAK,EACL4I,GAAK,EACLtG,KAAO,EAET,OAAQtC,EAAIsC,GAAKsG,GAWnB,OARAsqP,EAAKjoH,MAAQ,WAAa,OAAmB,EAAZqnH,EAAKnmP,EAAE,IACxC+mP,EAAKE,MAAQ,WAAa,OAAOd,EAAKnmP,EAAE,GAAK,YAC7C+mP,EAAKC,OAASD,EAGdpB,EAAOG,EAASK,EAAKV,GAAI9hM,IAGjBgjD,EAAQ+gJ,MAAQthK,GACpB,SAAS2gK,EAAMhlM,EAAM4lM,EAAc7xO,GAUjC,OATIA,IAEEA,EAAM2vO,GAAKphD,EAAKvuL,EAAOqwO,GAE3BY,EAAKjxO,MAAQ,WAAa,OAAOuuL,EAAK8hD,EAAM,MAK1CwB,GAAgBN,EAAY,OAAIN,EAAahlM,GAIrCglM,IAElBA,EACAQ,EACA,WAAY5gJ,EAAUA,EAAQ9oG,OAAUnO,MAAQ23P,EAChD1gJ,EAAQ7wF,OAcV,SAASyvO,EAAKt2P,GACZ,IAAIsQ,EAAGimP,EAASv2P,EAAId,OAChBg6O,EAAKz4O,KAAMtB,EAAI,EAAGoM,EAAI2tO,EAAG/5O,EAAI+5O,EAAG3tO,EAAI,EAAGT,EAAIouO,EAAGsd,EAAI,GAMtD,IAHKD,IAAUv2P,EAAM,CAACu2P,MAGfp3P,EAAImK,GACTwB,EAAE3L,GAAKA,IAET,IAAKA,EAAI,EAAGA,EAAImK,EAAOnK,IACrB2L,EAAE3L,GAAK2L,EAAES,EAAIgjC,EAAQhjC,EAAIvL,EAAIb,EAAIo3P,IAAWjmP,EAAIxF,EAAE3L,KAClD2L,EAAES,GAAK+E,GAIR4oO,EAAGnoO,EAAI,SAASyqE,GAIf,IAFA,IAAIlrE,EAAG5I,EAAI,EACPvI,EAAI+5O,EAAG/5O,EAAGoM,EAAI2tO,EAAG3tO,EAAGT,EAAIouO,EAAGsd,EACxBh7K,KACLlrE,EAAIxF,EAAE3L,EAAIovC,EAAQpvC,EAAI,GACtBuI,EAAIA,EAAI4B,EAAQwB,EAAEyjC,GAASzjC,EAAE3L,GAAK2L,EAAES,EAAIgjC,EAAQhjC,EAAI+E,KAAQxF,EAAES,GAAK+E,IAGrE,OADA4oO,EAAG/5O,EAAIA,EAAG+5O,EAAG3tO,EAAIA,EACV7D,IAIN4B,GAOL,SAAS8rM,EAAKtvM,EAAGwK,GAIf,OAHAA,EAAEnR,EAAI2G,EAAE3G,EACRmR,EAAE/E,EAAIzF,EAAEyF,EACR+E,EAAEkmP,EAAI1wP,EAAE0wP,EAAE1xP,QACHwL,EAOT,SAAS9H,EAAQ9D,EAAK2kC,GACpB,IAAqCwpM,EAAjCjrO,EAAS,GAAI6uP,SAAc/xP,EAC/B,GAAI2kC,GAAgB,UAAPotN,EACX,IAAK5jB,KAAQnuO,EACX,IAAMkD,EAAOhE,KAAK4E,EAAQ9D,EAAImuO,GAAOxpM,EAAQ,IAAO,MAAOxS,IAG/D,OAAQjvB,EAAO1I,OAAS0I,EAAgB,UAAP6uP,EAAkB/xP,EAAMA,EAAM,KAQjE,SAASgyP,EAAO5jM,EAAM9yD,GAEpB,IADA,IAA4B22P,EAAxBC,EAAa9jM,EAAO,GAAWvnD,EAAI,EAChCA,EAAIqrP,EAAW13P,QACpBc,EAAIuuC,EAAOhjC,GACTgjC,GAASooN,GAAyB,GAAhB32P,EAAIuuC,EAAOhjC,IAAWqrP,EAAWx5N,WAAW7xB,KAElE,OAAOsrP,EAAS72P,GA8BlB,SAAS62P,EAASrvP,GAChB,OAAOmF,OAAO0vB,aAAaz7B,MAAM,EAAG4G,GAgBtC,GAhIA4wP,EAAqB,WAAIthM,EA0HzB4/L,EAAO0B,EAAKxxP,SAAU8tD,GAMa51D,EAAOC,QAAS,CACjDD,EAAOC,QAAU+3D,EAEjB,IACEuhM,EAAa,EAAQ,MACrB,MAAOvvO,eAE+B,KAAxC,aAAoB,OAAOguC,GAAa,8BAvN1C,CA4NE,GACAnwD,O,4BCpPF,MAAMgyP,EAAuB,EAAQ,MAC/BC,EAAc,EAAQ,MACtBC,EAAa,EAAQ,MAErBC,EAAU,CACf,IACA,KAKKC,EAAWC,GAAQ,GAAGF,EAAQ,MAAME,KAE1Cl6P,EAAOC,QAAU,CAACy2B,EAAK6Y,EAAOltB,KAC7B,MAAMniB,EAAM,IAAIw2B,EAAIi2F,aAEpBtqG,EAAqB,iBAARA,EAAmBA,EAAMniB,EAAIE,OAE1C,IAAI+5P,GAAe,EACfC,EAAa,KACbC,EAAU,EACV/6O,EAAS,GAEb,IAAK,MAAOjf,EAAG+H,KAAMlI,EAAIid,UAAW,CACnC,IAAIm9O,GAAa,EAEjB,GAAIN,EAAQ37J,SAASj2F,GAAI,CACxB+xP,GAAe,EACf,MAAMD,EAAO,UAAU/4E,KAAKzqJ,EAAI1wB,MAAM3F,EAAGA,EAAI,KAC7C+5P,EApBc,KAoBDF,EAAoB,KAAOA,OAC9BC,GAAsB,MAAN/xP,IAC1B+xP,GAAe,EACfG,GAAa,GAWd,GARKH,GAAiBG,KACnBD,GAGEP,EAAY,CAACxpD,OAAO,IAAOpqM,KAAKkC,IAAMyxP,EAAqBzxP,EAAEmyP,kBAC/DF,EAGCA,EAAU9qN,GAAS8qN,GAAWh4O,EACjC/C,GAAUlX,OACJ,GAAIiyP,IAAY9qN,GAAU4qN,GAA+B,OAAfC,GApClC,KAoCyDA,GAEjE,GAAIC,GAAWh4O,EAAK,CACP,OAAf+3O,IACH96O,GAAU26O,EAASF,EAAWS,MAAMn3P,IAAI0jG,SAASqzJ,EAAY,MAxChD,KA2Cd,YANA96O,GAAU26O,EAASG,GAUrB,OAAO96O,I,uCCxDR,MAAMm7O,EAAe,EAAQ,MAEvBC,EAAa,CAACh5P,EAAI6M,IAAW,WAClC,MAAM2rP,EAAOx4P,EAAGI,MAAM24P,EAAc54P,WACpC,MAAO,KAAUq4P,EAAO3rP,MAGnBosP,EAAc,CAACj5P,EAAI6M,IAAW,WACnC,MAAM2rP,EAAOx4P,EAAGI,MAAM24P,EAAc54P,WACpC,MAAO,KAAU,GAAK0M,OAAY2rP,MAG7BU,EAAc,CAACl5P,EAAI6M,IAAW,WACnC,MAAMssP,EAAMn5P,EAAGI,MAAM24P,EAAc54P,WACnC,MAAO,KAAU,GAAK0M,OAAYssP,EAAI,MAAMA,EAAI,MAAMA,EAAI,OAkJ3Dl4P,OAAOC,eAAe5C,EAAQ,UAAW,CACxCwC,YAAY,EACZa,IAjJD,WACC,MAAMm3P,EAAQ,IAAIjoP,IACZuoP,EAAS,CACdC,SAAU,CACT3pO,MAAO,CAAC,EAAG,GAEX4pO,KAAM,CAAC,EAAG,IACV9/M,IAAK,CAAC,EAAG,IACT+/M,OAAQ,CAAC,EAAG,IACZC,UAAW,CAAC,EAAG,IACfrgL,QAAS,CAAC,EAAG,IACbsgL,OAAQ,CAAC,EAAG,IACZC,cAAe,CAAC,EAAG,KAEpBC,MAAO,CACNC,MAAO,CAAC,GAAI,IACZC,IAAK,CAAC,GAAI,IACVC,MAAO,CAAC,GAAI,IACZC,OAAQ,CAAC,GAAI,IACbC,KAAM,CAAC,GAAI,IACXC,QAAS,CAAC,GAAI,IACdC,KAAM,CAAC,GAAI,IACXC,MAAO,CAAC,GAAI,IACZC,KAAM,CAAC,GAAI,IAGXC,UAAW,CAAC,GAAI,IAChBC,YAAa,CAAC,GAAI,IAClBC,aAAc,CAAC,GAAI,IACnBC,WAAY,CAAC,GAAI,IACjBC,cAAe,CAAC,GAAI,IACpBC,WAAY,CAAC,GAAI,IACjBC,YAAa,CAAC,GAAI,KAEnBC,QAAS,CACRC,QAAS,CAAC,GAAI,IACdC,MAAO,CAAC,GAAI,IACZC,QAAS,CAAC,GAAI,IACdC,SAAU,CAAC,GAAI,IACfC,OAAQ,CAAC,GAAI,IACbC,UAAW,CAAC,GAAI,IAChBC,OAAQ,CAAC,GAAI,IACbC,QAAS,CAAC,GAAI,IAGdC,cAAe,CAAC,IAAK,IACrBC,YAAa,CAAC,IAAK,IACnBC,cAAe,CAAC,IAAK,IACrBC,eAAgB,CAAC,IAAK,IACtBC,aAAc,CAAC,IAAK,IACpBC,gBAAiB,CAAC,IAAK,IACvBC,aAAc,CAAC,IAAK,IACpBC,cAAe,CAAC,IAAK,MAKvBxC,EAAOO,MAAMkC,KAAOzC,EAAOO,MAAMS,KAEjC,IAAK,MAAM0B,KAAa76P,OAAO8lB,KAAKqyO,GAAS,CAC5C,MAAMrmO,EAAQqmO,EAAO0C,GAErB,IAAK,MAAMC,KAAa96P,OAAO8lB,KAAKgM,GAAQ,CAC3C,MAAMipO,EAAQjpO,EAAMgpO,GAEpB3C,EAAO2C,GAAa,CACnB7iO,KAAM,KAAU8iO,EAAM,MACtBviO,MAAO,KAAUuiO,EAAM,OAGxBjpO,EAAMgpO,GAAa3C,EAAO2C,GAE1BjD,EAAM5zP,IAAI82P,EAAM,GAAIA,EAAM,IAG3B/6P,OAAOC,eAAek4P,EAAQ0C,EAAW,CACxCn8P,MAAOozB,EACPjyB,YAAY,IAGbG,OAAOC,eAAek4P,EAAQ,QAAS,CACtCz5P,MAAOm5P,EACPh4P,YAAY,IAId,MAAMm7P,EAAY73P,GAAKA,EACjB83P,EAAU,CAACh1P,EAAGqJ,EAAGtJ,IAAM,CAACC,EAAGqJ,EAAGtJ,GAEpCmyP,EAAOO,MAAMlgO,MAAQ,QACrB2/N,EAAOwB,QAAQnhO,MAAQ,QAEvB2/N,EAAOO,MAAMwC,KAAO,CACnBA,KAAMnD,EAAWiD,EAAW,IAE7B7C,EAAOO,MAAMyC,QAAU,CACtBA,QAASnD,EAAYgD,EAAW,IAEjC7C,EAAOO,MAAM0C,QAAU,CACtBlD,IAAKD,EAAYgD,EAAS,IAG3B9C,EAAOwB,QAAQuB,KAAO,CACrBA,KAAMnD,EAAWiD,EAAW,KAE7B7C,EAAOwB,QAAQwB,QAAU,CACxBA,QAASnD,EAAYgD,EAAW,KAEjC7C,EAAOwB,QAAQyB,QAAU,CACxBlD,IAAKD,EAAYgD,EAAS,KAG3B,IAAK,IAAI18P,KAAOyB,OAAO8lB,KAAKgyO,GAAe,CAC1C,GAAiC,iBAAtBA,EAAav5P,GACvB,SAGD,MAAM88P,EAAQvD,EAAav5P,GAEf,WAARA,IACHA,EAAM,QAGH,WAAY88P,IACflD,EAAOO,MAAMwC,KAAK38P,GAAOw5P,EAAWsD,EAAMC,OAAQ,GAClDnD,EAAOwB,QAAQuB,KAAK38P,GAAOw5P,EAAWsD,EAAMC,OAAQ,KAGjD,YAAaD,IAChBlD,EAAOO,MAAMyC,QAAQ58P,GAAOy5P,EAAYqD,EAAMF,QAAS,GACvDhD,EAAOwB,QAAQwB,QAAQ58P,GAAOy5P,EAAYqD,EAAMF,QAAS,KAGtD,QAASE,IACZlD,EAAOO,MAAM0C,QAAQ78P,GAAO05P,EAAYoD,EAAMnD,IAAK,GACnDC,EAAOwB,QAAQyB,QAAQ78P,GAAO05P,EAAYoD,EAAMnD,IAAK,KAIvD,OAAOC,M,eC5JR,IAAIoD,EAAc,EAAQ,MAMtBC,EAAkB,GACtB,IAAK,IAAIj9P,KAAOg9P,EACXA,EAAY14P,eAAetE,KAC9Bi9P,EAAgBD,EAAYh9P,IAAQA,GAItC,IAAIwqO,EAAU1rO,EAAOC,QAAU,CAC9B46P,IAAK,CAACt7F,SAAU,EAAGv0H,OAAQ,OAC3BozN,IAAK,CAAC7+F,SAAU,EAAGv0H,OAAQ,OAC3BqzN,IAAK,CAAC9+F,SAAU,EAAGv0H,OAAQ,OAC3BszN,IAAK,CAAC/+F,SAAU,EAAGv0H,OAAQ,OAC3BuzN,KAAM,CAACh/F,SAAU,EAAGv0H,OAAQ,QAC5BwzN,IAAK,CAACj/F,SAAU,EAAGv0H,OAAQ,OAC3ByzN,IAAK,CAACl/F,SAAU,EAAGv0H,OAAQ,OAC3B0zN,IAAK,CAACn/F,SAAU,EAAGv0H,OAAQ,OAC3B2zN,IAAK,CAACp/F,SAAU,EAAGv0H,OAAQ,CAAC,QAC5B4zN,QAAS,CAACr/F,SAAU,EAAGv0H,OAAQ,CAAC,YAChCizN,OAAQ,CAAC1+F,SAAU,EAAGv0H,OAAQ,CAAC,WAC/B8yN,QAAS,CAACv+F,SAAU,EAAGv0H,OAAQ,CAAC,YAChC6zN,IAAK,CAACt/F,SAAU,EAAGv0H,OAAQ,CAAC,IAAK,IAAK,MACtC8zN,MAAO,CAACv/F,SAAU,EAAGv0H,OAAQ,CAAC,MAAO,MAAO,QAC5C8wN,KAAM,CAACv8F,SAAU,EAAGv0H,OAAQ,CAAC,UAI9B,IAAK,IAAIitD,KAASyzI,EACjB,GAAIA,EAAQlmO,eAAeyyF,GAAQ,CAClC,KAAM,aAAcyzI,EAAQzzI,IAC3B,MAAM,IAAIzwF,MAAM,8BAAgCywF,GAGjD,KAAM,WAAYyzI,EAAQzzI,IACzB,MAAM,IAAIzwF,MAAM,oCAAsCywF,GAGvD,GAAIyzI,EAAQzzI,GAAOjtD,OAAO5qC,SAAWsrO,EAAQzzI,GAAOsnE,SACnD,MAAM,IAAI/3J,MAAM,sCAAwCywF,GAGzD,IAAIsnE,EAAWmsE,EAAQzzI,GAAOsnE,SAC1Bv0H,EAAS0gM,EAAQzzI,GAAOjtD,cACrB0gM,EAAQzzI,GAAOsnE,gBACfmsE,EAAQzzI,GAAOjtD,OACtBroC,OAAOC,eAAe8oO,EAAQzzI,GAAQ,WAAY,CAAC52F,MAAOk+J,IAC1D58J,OAAOC,eAAe8oO,EAAQzzI,GAAQ,SAAU,CAAC52F,MAAO2pC,IAI1D0gM,EAAQmvB,IAAIuD,IAAM,SAAUvD,GAC3B,IAMIn2M,EAEApjC,EARA1Y,EAAIiyP,EAAI,GAAK,IACb5oP,EAAI4oP,EAAI,GAAK,IACblyP,EAAIkyP,EAAI,GAAK,IACb1yP,EAAMN,KAAKM,IAAIS,EAAGqJ,EAAGtJ,GACrBN,EAAMR,KAAKQ,IAAIO,EAAGqJ,EAAGtJ,GACrBorE,EAAQ1rE,EAAMF,EA+BlB,OA1BIE,IAAQF,EACXu8C,EAAI,EACM97C,IAAMP,EAChBq8C,GAAKzyC,EAAItJ,GAAKorE,EACJ9hE,IAAM5J,EAChBq8C,EAAI,GAAK/7C,EAAIC,GAAKmrE,EACRprE,IAAMN,IAChBq8C,EAAI,GAAK97C,EAAIqJ,GAAK8hE,IAGnBrvB,EAAI78C,KAAKM,IAAQ,GAAJu8C,EAAQ,MAEb,IACPA,GAAK,KAGNpjC,GAAKnZ,EAAME,GAAO,EAUX,CAACq8C,EAAO,KARXr8C,IAAQF,EACP,EACMmZ,GAAK,GACXyyD,GAAS1rE,EAAMF,GAEf4rE,GAAS,EAAI1rE,EAAMF,IAGA,IAAJmZ,IAGrBoqN,EAAQmvB,IAAIwD,IAAM,SAAUxD,GAC3B,IAAIkE,EACAC,EACAC,EACAv6M,EACA14C,EAEApD,EAAIiyP,EAAI,GAAK,IACb5oP,EAAI4oP,EAAI,GAAK,IACblyP,EAAIkyP,EAAI,GAAK,IACbj5O,EAAI/Z,KAAKQ,IAAIO,EAAGqJ,EAAGtJ,GACnBI,EAAO6Y,EAAI/Z,KAAKM,IAAIS,EAAGqJ,EAAGtJ,GAC1Bu2P,EAAQ,SAAUpwP,GACrB,OAAQ8S,EAAI9S,GAAK,EAAI/F,EAAO,IAyB7B,OAtBa,IAATA,EACH27C,EAAI14C,EAAI,GAERA,EAAIjD,EAAO6Y,EACXm9O,EAAOG,EAAMt2P,GACbo2P,EAAOE,EAAMjtP,GACbgtP,EAAOC,EAAMv2P,GAETC,IAAMgZ,EACT8iC,EAAIu6M,EAAOD,EACD/sP,IAAM2P,EAChB8iC,EAAK,EAAI,EAAKq6M,EAAOE,EACXt2P,IAAMiZ,IAChB8iC,EAAK,EAAI,EAAKs6M,EAAOD,GAElBr6M,EAAI,EACPA,GAAK,EACKA,EAAI,IACdA,GAAK,IAIA,CACF,IAAJA,EACI,IAAJ14C,EACI,IAAJ4V,IAIF8pN,EAAQmvB,IAAIyD,IAAM,SAAUzD,GAC3B,IAAIjyP,EAAIiyP,EAAI,GACR5oP,EAAI4oP,EAAI,GACRlyP,EAAIkyP,EAAI,GAMZ,MAAO,CALCnvB,EAAQmvB,IAAIuD,IAAIvD,GAAK,GACrB,EAAI,IAAMhzP,KAAKM,IAAIS,EAAGf,KAAKM,IAAI8J,EAAGtJ,IAI3B,IAAS,KAFxBA,EAAI,EAAI,EAAI,IAAMd,KAAKQ,IAAIO,EAAGf,KAAKQ,IAAI4J,EAAGtJ,OAK3C+iO,EAAQmvB,IAAI0D,KAAO,SAAU1D,GAC5B,IAMI30O,EANAtd,EAAIiyP,EAAI,GAAK,IACb5oP,EAAI4oP,EAAI,GAAK,IACblyP,EAAIkyP,EAAI,GAAK,IAWjB,MAAO,CAAK,MAJP,EAAIjyP,GADTsd,EAAIre,KAAKM,IAAI,EAAIS,EAAG,EAAIqJ,EAAG,EAAItJ,MACZ,EAAIud,IAAM,GAIR,MAHhB,EAAIjU,EAAIiU,IAAM,EAAIA,IAAM,GAGC,MAFzB,EAAIvd,EAAIud,IAAM,EAAIA,IAAM,GAEU,IAAJA,IAcpCwlN,EAAQmvB,IAAI+D,QAAU,SAAU/D,GAC/B,IAAIsE,EAAWhB,EAAgBtD,GAC/B,GAAIsE,EACH,OAAOA,EAGR,IACIC,EAfwBh3P,EAAG+hB,EAc3Bk1O,EAAyBj1P,IAG7B,IAAK,IAAIw0P,KAAWV,EACnB,GAAIA,EAAY14P,eAAeo5P,GAAU,CACxC,IAGIU,GAtBsBl3P,EAsBSyyP,EAtBN1wO,EAmBjB+zO,EAAYU,GAjBzB/2P,KAAK0xC,IAAInxC,EAAE,GAAK+hB,EAAE,GAAI,GACtBtiB,KAAK0xC,IAAInxC,EAAE,GAAK+hB,EAAE,GAAI,GACtBtiB,KAAK0xC,IAAInxC,EAAE,GAAK+hB,EAAE,GAAI,IAqBjBm1O,EAAWD,IACdA,EAAyBC,EACzBF,EAAwBR,GAK3B,OAAOQ,GAGR1zB,EAAQkzB,QAAQ/D,IAAM,SAAU+D,GAC/B,OAAOV,EAAYU,IAGpBlzB,EAAQmvB,IAAI2D,IAAM,SAAU3D,GAC3B,IAAIjyP,EAAIiyP,EAAI,GAAK,IACb5oP,EAAI4oP,EAAI,GAAK,IACblyP,EAAIkyP,EAAI,GAAK,IAWjB,MAAO,CAAK,KAJC,OAJbjyP,EAAIA,EAAI,OAAUf,KAAK0xC,KAAM3wC,EAAI,MAAS,MAAQ,KAAQA,EAAI,OAIlC,OAH5BqJ,EAAIA,EAAI,OAAUpK,KAAK0xC,KAAMtnC,EAAI,MAAS,MAAQ,KAAQA,EAAI,OAGnB,OAF3CtJ,EAAIA,EAAI,OAAUd,KAAK0xC,KAAM5wC,EAAI,MAAS,MAAQ,KAAQA,EAAI,QAMzC,KAHR,MAAJC,EAAmB,MAAJqJ,EAAmB,MAAJtJ,GAGT,KAFjB,MAAJC,EAAmB,MAAJqJ,EAAmB,MAAJtJ,KAKxC+iO,EAAQmvB,IAAI4D,IAAM,SAAU5D,GAC3B,IAAI2D,EAAM9yB,EAAQmvB,IAAI2D,IAAI3D,GACtBzyP,EAAIo2P,EAAI,GACRr0O,EAAIq0O,EAAI,GACR95I,EAAI85I,EAAI,GAiBZ,OAXAr0O,GAAK,IACLu6F,GAAK,QAELt8G,GAJAA,GAAK,QAIG,QAAWP,KAAK0xC,IAAInxC,EAAG,EAAI,GAAM,MAAQA,EAAM,GAAK,IAQrD,CAJF,KAHL+hB,EAAIA,EAAI,QAAWtiB,KAAK0xC,IAAIpvB,EAAG,EAAI,GAAM,MAAQA,EAAM,GAAK,KAG5C,GACZ,KAAO/hB,EAAI+hB,GACX,KAAOA,GAJXu6F,EAAIA,EAAI,QAAW78G,KAAK0xC,IAAImrE,EAAG,EAAI,GAAM,MAAQA,EAAM,GAAK,QAS7DgnH,EAAQ0yB,IAAIvD,IAAM,SAAUuD,GAC3B,IAGI5yM,EACAC,EACAgqK,EACAolC,EACAtyP,EAPAm8C,EAAI05M,EAAI,GAAK,IACbpyP,EAAIoyP,EAAI,GAAK,IACb98O,EAAI88O,EAAI,GAAK,IAOjB,GAAU,IAANpyP,EAEH,MAAO,CADPzD,EAAU,IAAJ+Y,EACO/Y,EAAKA,GASnBijD,EAAK,EAAIlqC,GALRmqC,EADGnqC,EAAI,GACFA,GAAK,EAAItV,GAETsV,EAAItV,EAAIsV,EAAItV,GAKlB6uP,EAAM,CAAC,EAAG,EAAG,GACb,IAAK,IAAIx6P,EAAI,EAAGA,EAAI,EAAGA,KACtBo1N,EAAK/wK,EAAI,EAAI,IAAMrkD,EAAI,IACd,GACRo1N,IAEGA,EAAK,GACRA,IAIAltN,EADG,EAAIktN,EAAK,EACNjqK,EAAiB,GAAXC,EAAKD,GAAUiqK,EACjB,EAAIA,EAAK,EACbhqK,EACI,EAAIgqK,EAAK,EACbjqK,GAAMC,EAAKD,IAAO,EAAI,EAAIiqK,GAAM,EAEhCjqK,EAGPqvM,EAAIx6P,GAAW,IAANkI,EAGV,OAAOsyP,GAGRnvB,EAAQ0yB,IAAIC,IAAM,SAAUD,GAC3B,IAAI15M,EAAI05M,EAAI,GACRpyP,EAAIoyP,EAAI,GAAK,IACb98O,EAAI88O,EAAI,GAAK,IACbmB,EAAOvzP,EACPwzP,EAAO33P,KAAKQ,IAAIiZ,EAAG,KAUvB,OALAtV,IADAsV,GAAK,IACM,EAAKA,EAAI,EAAIA,EACxBi+O,GAAQC,GAAQ,EAAIA,EAAO,EAAIA,EAIxB,CAAC96M,EAAQ,KAFL,IAANpjC,EAAW,EAAIi+O,GAASC,EAAOD,GAAS,EAAIvzP,GAAMsV,EAAItV,KADtDsV,EAAItV,GAAK,EAGW,MAG1B0/N,EAAQ2yB,IAAIxD,IAAM,SAAUwD,GAC3B,IAAI35M,EAAI25M,EAAI,GAAK,GACbryP,EAAIqyP,EAAI,GAAK,IACbz8O,EAAIy8O,EAAI,GAAK,IACboB,EAAK53P,KAAK8H,MAAM+0C,GAAK,EAErB19C,EAAI09C,EAAI78C,KAAK8H,MAAM+0C,GACnBx/C,EAAI,IAAM0c,GAAK,EAAI5V,GACnB6kE,EAAI,IAAMjvD,GAAK,EAAK5V,EAAIhF,GACxBwK,EAAI,IAAMoQ,GAAK,EAAK5V,GAAK,EAAIhF,IAGjC,OAFA4a,GAAK,IAEG69O,GACP,KAAK,EACJ,MAAO,CAAC79O,EAAGpQ,EAAGtM,GACf,KAAK,EACJ,MAAO,CAAC2rE,EAAGjvD,EAAG1c,GACf,KAAK,EACJ,MAAO,CAACA,EAAG0c,EAAGpQ,GACf,KAAK,EACJ,MAAO,CAACtM,EAAG2rE,EAAGjvD,GACf,KAAK,EACJ,MAAO,CAACpQ,EAAGtM,EAAG0c,GACf,KAAK,EACJ,MAAO,CAACA,EAAG1c,EAAG2rE,KAIjB66J,EAAQ2yB,IAAID,IAAM,SAAUC,GAC3B,IAIImB,EACAE,EACAp+O,EANAojC,EAAI25M,EAAI,GACRryP,EAAIqyP,EAAI,GAAK,IACbz8O,EAAIy8O,EAAI,GAAK,IACbsB,EAAO93P,KAAKQ,IAAIuZ,EAAG,KAYvB,OAPAN,GAAK,EAAItV,GAAK4V,EAEd89O,EAAK1zP,EAAI2zP,EAKF,CAACj7M,EAAQ,KAHhBg7M,GADAA,IAFAF,GAAQ,EAAIxzP,GAAK2zP,IAEF,EAAKH,EAAO,EAAIA,IACpB,GAGc,KAFzBl+O,GAAK,KAMNoqN,EAAQ4yB,IAAIzD,IAAM,SAAUyD,GAC3B,IAIIj+P,EACAuhB,EACA5a,EACAlB,EAkBA8C,EACAqJ,EACAtJ,EA3BA+7C,EAAI45M,EAAI,GAAK,IACbsB,EAAKtB,EAAI,GAAK,IACduB,EAAKvB,EAAI,GAAK,IACdwB,EAAQF,EAAKC,EAyBjB,OAlBIC,EAAQ,IACXF,GAAME,EACND,GAAMC,GAKP94P,EAAI,EAAI09C,GAFRrkD,EAAIwH,KAAK8H,MAAM,EAAI+0C,IAIA,IAAV,EAAJrkD,KACJ2G,EAAI,EAAIA,GAGTlB,EAAI85P,EAAK54P,IAPT4a,EAAI,EAAIi+O,GAOUD,GAKVv/P,GACP,QACA,KAAK,EACL,KAAK,EAAGuI,EAAIgZ,EAAG3P,EAAInM,EAAG6C,EAAIi3P,EAAI,MAC9B,KAAK,EAAGh3P,EAAI9C,EAAGmM,EAAI2P,EAAGjZ,EAAIi3P,EAAI,MAC9B,KAAK,EAAGh3P,EAAIg3P,EAAI3tP,EAAI2P,EAAGjZ,EAAI7C,EAAG,MAC9B,KAAK,EAAG8C,EAAIg3P,EAAI3tP,EAAInM,EAAG6C,EAAIiZ,EAAG,MAC9B,KAAK,EAAGhZ,EAAI9C,EAAGmM,EAAI2tP,EAAIj3P,EAAIiZ,EAAG,MAC9B,KAAK,EAAGhZ,EAAIgZ,EAAG3P,EAAI2tP,EAAIj3P,EAAI7C,EAG5B,MAAO,CAAK,IAAJ8C,EAAa,IAAJqJ,EAAa,IAAJtJ,IAG3B+iO,EAAQ6yB,KAAK1D,IAAM,SAAU0D,GAC5B,IAAIzvP,EAAIyvP,EAAK,GAAK,IACdzmO,EAAIymO,EAAK,GAAK,IACdp0O,EAAIo0O,EAAK,GAAK,IACdr4O,EAAIq4O,EAAK,GAAK,IASlB,MAAO,CAAK,KAJR,EAAI12P,KAAKM,IAAI,EAAG2G,GAAK,EAAIoX,GAAKA,IAIb,KAHjB,EAAIre,KAAKM,IAAI,EAAG2vB,GAAK,EAAI5R,GAAKA,IAGJ,KAF1B,EAAIre,KAAKM,IAAI,EAAGgiB,GAAK,EAAIjE,GAAKA,MAKnCwlN,EAAQ8yB,IAAI3D,IAAM,SAAU2D,GAC3B,IAGI51P,EACAqJ,EACAtJ,EALAP,EAAIo2P,EAAI,GAAK,IACbr0O,EAAIq0O,EAAI,GAAK,IACb95I,EAAI85I,EAAI,GAAK,IA0BjB,OApBAvsP,GAAU,MAAL7J,EAAoB,OAAJ+hB,EAAmB,MAAJu6F,EACpC/7G,EAAS,MAAJP,GAAoB,KAAL+hB,EAAoB,MAAJu6F,EAGpC97G,GALAA,EAAS,OAAJR,GAAoB,OAAL+hB,GAAqB,MAALu6F,GAK5B,SACH,MAAQ78G,KAAK0xC,IAAI3wC,EAAG,EAAM,KAAQ,KAChC,MAAJA,EAEHqJ,EAAIA,EAAI,SACH,MAAQpK,KAAK0xC,IAAItnC,EAAG,EAAM,KAAQ,KAChC,MAAJA,EAEHtJ,EAAIA,EAAI,SACH,MAAQd,KAAK0xC,IAAI5wC,EAAG,EAAM,KAAQ,KAChC,MAAJA,EAMI,CAAK,KAJZC,EAAIf,KAAKM,IAAIN,KAAKQ,IAAI,EAAGO,GAAI,IAIR,KAHrBqJ,EAAIpK,KAAKM,IAAIN,KAAKQ,IAAI,EAAG4J,GAAI,IAGC,KAF9BtJ,EAAId,KAAKM,IAAIN,KAAKQ,IAAI,EAAGM,GAAI,MAK9B+iO,EAAQ8yB,IAAIC,IAAM,SAAUD,GAC3B,IAAIp2P,EAAIo2P,EAAI,GACRr0O,EAAIq0O,EAAI,GACR95I,EAAI85I,EAAI,GAiBZ,OAXAr0O,GAAK,IACLu6F,GAAK,QAELt8G,GAJAA,GAAK,QAIG,QAAWP,KAAK0xC,IAAInxC,EAAG,EAAI,GAAM,MAAQA,EAAM,GAAK,IAQrD,CAJF,KAHL+hB,EAAIA,EAAI,QAAWtiB,KAAK0xC,IAAIpvB,EAAG,EAAI,GAAM,MAAQA,EAAM,GAAK,KAG5C,GACZ,KAAO/hB,EAAI+hB,GACX,KAAOA,GAJXu6F,EAAIA,EAAI,QAAW78G,KAAK0xC,IAAImrE,EAAG,EAAI,GAAM,MAAQA,EAAM,GAAK,QAS7DgnH,EAAQ+yB,IAAID,IAAM,SAAUC,GAC3B,IAGIr2P,EACA+hB,EACAu6F,EALApjG,EAAIm9O,EAAI,GAQZr2P,EAPQq2P,EAAI,GAOJ,KADRt0O,GAAK7I,EAAI,IAAM,KAEfojG,EAAIv6F,EAPIs0O,EAAI,GAOA,IAEZ,IAAInsG,EAAKzqJ,KAAK0xC,IAAIpvB,EAAG,GACjBuuC,EAAK7wD,KAAK0xC,IAAInxC,EAAG,GACjB89G,EAAKr+G,KAAK0xC,IAAImrE,EAAG,GASrB,OARAv6F,EAAImoI,EAAK,QAAWA,GAAMnoI,EAAI,GAAK,KAAO,MAC1C/hB,EAAIswD,EAAK,QAAWA,GAAMtwD,EAAI,GAAK,KAAO,MAC1Cs8G,EAAIwB,EAAK,QAAWA,GAAMxB,EAAI,GAAK,KAAO,MAMnC,CAJPt8G,GAAK,OACL+hB,GAAK,IACLu6F,GAAK,UAKNgnH,EAAQ+yB,IAAIC,IAAM,SAAUD,GAC3B,IAII/5M,EAJApjC,EAAIm9O,EAAI,GACR/1P,EAAI+1P,EAAI,GACR91P,EAAI81P,EAAI,GAcZ,OARA/5M,EAAS,IADJ78C,KAAKi3C,MAAMn2C,EAAGD,GACJ,EAAIb,KAAKm8D,IAEhB,IACPtf,GAAK,KAKC,CAACpjC,EAFJzZ,KAAK6C,KAAKhC,EAAIA,EAAIC,EAAIA,GAEZ+7C,IAGfgnL,EAAQgzB,IAAID,IAAM,SAAUC,GAC3B,IAKIqB,EALAz+O,EAAIo9O,EAAI,GACR5vP,EAAI4vP,EAAI,GAUZ,OAJAqB,EALQrB,EAAI,GAKH,IAAM,EAAI72P,KAAKm8D,GAIjB,CAAC1iD,EAHJxS,EAAIjH,KAAKwhD,IAAI02M,GACbjxP,EAAIjH,KAAKi0D,IAAIikM,KAKlBr0B,EAAQmvB,IAAIoD,OAAS,SAAUr8P,GAC9B,IAAIgH,EAAIhH,EAAK,GACTqQ,EAAIrQ,EAAK,GACT+G,EAAI/G,EAAK,GACTP,EAAQ,KAAKQ,UAAYA,UAAU,GAAK6pO,EAAQmvB,IAAIwD,IAAIz8P,GAAM,GAIlE,GAAc,KAFdP,EAAQwG,KAAKsW,MAAM9c,EAAQ,KAG1B,OAAO,GAGR,IAAIw8P,EAAO,IACNh2P,KAAKsW,MAAMxV,EAAI,MAAQ,EACxBd,KAAKsW,MAAMlM,EAAI,MAAQ,EACxBpK,KAAKsW,MAAMvV,EAAI,MAMlB,OAJc,IAAVvH,IACHw8P,GAAQ,IAGFA,GAGRnyB,EAAQ2yB,IAAIJ,OAAS,SAAUr8P,GAG9B,OAAO8pO,EAAQmvB,IAAIoD,OAAOvyB,EAAQ2yB,IAAIxD,IAAIj5P,GAAOA,EAAK,KAGvD8pO,EAAQmvB,IAAIiD,QAAU,SAAUl8P,GAC/B,IAAIgH,EAAIhH,EAAK,GACTqQ,EAAIrQ,EAAK,GACT+G,EAAI/G,EAAK,GAIb,OAAIgH,IAAMqJ,GAAKA,IAAMtJ,EAChBC,EAAI,EACA,GAGJA,EAAI,IACA,IAGDf,KAAKsW,OAAQvV,EAAI,GAAK,IAAO,IAAM,IAGhC,GACP,GAAKf,KAAKsW,MAAMvV,EAAI,IAAM,GAC1B,EAAIf,KAAKsW,MAAMlM,EAAI,IAAM,GAC1BpK,KAAKsW,MAAMxV,EAAI,IAAM,IAKzB+iO,EAAQuyB,OAAOpD,IAAM,SAAUj5P,GAC9B,IAAIy5P,EAAQz5P,EAAO,GAGnB,GAAc,IAAVy5P,GAAyB,IAAVA,EAOlB,OANIz5P,EAAO,KACVy5P,GAAS,KAKH,CAFPA,EAAQA,EAAQ,KAAO,IAERA,EAAOA,GAGvB,IAAI2E,EAA6B,IAAL,KAAbp+P,EAAO,KAKtB,MAAO,EAJW,EAARy5P,GAAa2E,EAAQ,KACpB3E,GAAS,EAAK,GAAK2E,EAAQ,KAC3B3E,GAAS,EAAK,GAAK2E,EAAQ,MAKvCt0B,EAAQoyB,QAAQjD,IAAM,SAAUj5P,GAE/B,GAAIA,GAAQ,IAAK,CAChB,IAAIkN,EAAmB,IAAdlN,EAAO,KAAY,EAC5B,MAAO,CAACkN,EAAGA,EAAGA,GAKf,IAAI8yJ,EAKJ,OAPAhgK,GAAQ,GAOD,CAJCiG,KAAK8H,MAAM/N,EAAO,IAAM,EAAI,IAC5BiG,KAAK8H,OAAOiyJ,EAAMhgK,EAAO,IAAM,GAAK,EAAI,IACvCggK,EAAM,EAAK,EAAI,MAKzB8pE,EAAQmvB,IAAI8D,IAAM,SAAU/8P,GAC3B,IAII8gO,KAJkC,IAAtB76N,KAAKsW,MAAMvc,EAAK,MAAe,MACpB,IAAtBiG,KAAKsW,MAAMvc,EAAK,MAAe,IACV,IAAtBiG,KAAKsW,MAAMvc,EAAK,MAECmE,SAAS,IAAImiF,cAClC,MAAO,SAASx0D,UAAUgvM,EAAOtiO,QAAUsiO,GAG5CgJ,EAAQizB,IAAI9D,IAAM,SAAUj5P,GAC3B,IAAIunC,EAAQvnC,EAAKmE,SAAS,IAAIojC,MAAM,4BACpC,IAAKA,EACJ,MAAO,CAAC,EAAG,EAAG,GAGf,IAAI82N,EAAc92N,EAAM,GAEA,IAApBA,EAAM,GAAG/oC,SACZ6/P,EAAcA,EAAYhvP,MAAM,IAAIlF,KAAI,SAAUm0P,GACjD,OAAOA,EAAOA,KACZvuP,KAAK,KAGT,IAAIwuP,EAAUp5J,SAASk5J,EAAa,IAKpC,MAAO,CAJEE,GAAW,GAAM,IACjBA,GAAW,EAAK,IACP,IAAVA,IAKTz0B,EAAQmvB,IAAIgE,IAAM,SAAUhE,GAC3B,IAOIuF,EAPAx3P,EAAIiyP,EAAI,GAAK,IACb5oP,EAAI4oP,EAAI,GAAK,IACblyP,EAAIkyP,EAAI,GAAK,IACbxyP,EAAMR,KAAKQ,IAAIR,KAAKQ,IAAIO,EAAGqJ,GAAItJ,GAC/BR,EAAMN,KAAKM,IAAIN,KAAKM,IAAIS,EAAGqJ,GAAItJ,GAC/B03P,EAAUh4P,EAAMF,EAyBpB,OAdCi4P,EADGC,GAAU,EACP,EAEHh4P,IAAQO,GACHqJ,EAAItJ,GAAK03P,EAAU,EAExBh4P,IAAQ4J,EACL,GAAKtJ,EAAIC,GAAKy3P,EAEd,GAAKz3P,EAAIqJ,GAAKouP,EAAS,EAG9BD,GAAO,EAGA,CAAO,KAFdA,GAAO,GAEqB,IAATC,EAA0B,KArBzCA,EAAS,EACAl4P,GAAO,EAAIk4P,GAEX,KAqBd30B,EAAQ0yB,IAAIS,IAAM,SAAUT,GAC3B,IAEItvP,EAFA9C,EAAIoyP,EAAI,GAAK,IACb98O,EAAI88O,EAAI,GAAK,IAEbp3P,EAAI,EAYR,OATC8H,EADGwS,EAAI,GACH,EAAMtV,EAAIsV,EAEV,EAAMtV,GAAK,EAAMsV,IAGd,IACPta,GAAKsa,EAAI,GAAMxS,IAAM,EAAMA,IAGrB,CAACsvP,EAAI,GAAQ,IAAJtvP,EAAa,IAAJ9H,IAG1B0kO,EAAQ2yB,IAAIQ,IAAM,SAAUR,GAC3B,IAAIryP,EAAIqyP,EAAI,GAAK,IACbz8O,EAAIy8O,EAAI,GAAK,IAEbvvP,EAAI9C,EAAI4V,EACR5a,EAAI,EAMR,OAJI8H,EAAI,IACP9H,GAAK4a,EAAI9S,IAAM,EAAIA,IAGb,CAACuvP,EAAI,GAAQ,IAAJvvP,EAAa,IAAJ9H,IAG1B0kO,EAAQmzB,IAAIhE,IAAM,SAAUgE,GAC3B,IAAIn6M,EAAIm6M,EAAI,GAAK,IACb/vP,EAAI+vP,EAAI,GAAK,IACb5sP,EAAI4sP,EAAI,GAAK,IAEjB,GAAU,IAAN/vP,EACH,MAAO,CAAK,IAAJmD,EAAa,IAAJA,EAAa,IAAJA,GAG3B,IAIIquP,EAJAC,EAAO,CAAC,EAAG,EAAG,GACdd,EAAM/6M,EAAI,EAAK,EACf9iC,EAAI69O,EAAK,EACTjtM,EAAI,EAAI5wC,EAGZ,OAAQ/Z,KAAK8H,MAAM8vP,IAClB,KAAK,EACJc,EAAK,GAAK,EAAGA,EAAK,GAAK3+O,EAAG2+O,EAAK,GAAK,EAAG,MACxC,KAAK,EACJA,EAAK,GAAK/tM,EAAG+tM,EAAK,GAAK,EAAGA,EAAK,GAAK,EAAG,MACxC,KAAK,EACJA,EAAK,GAAK,EAAGA,EAAK,GAAK,EAAGA,EAAK,GAAK3+O,EAAG,MACxC,KAAK,EACJ2+O,EAAK,GAAK,EAAGA,EAAK,GAAK/tM,EAAG+tM,EAAK,GAAK,EAAG,MACxC,KAAK,EACJA,EAAK,GAAK3+O,EAAG2+O,EAAK,GAAK,EAAGA,EAAK,GAAK,EAAG,MACxC,QACCA,EAAK,GAAK,EAAGA,EAAK,GAAK,EAAGA,EAAK,GAAK/tM,EAKtC,OAFA8tM,GAAM,EAAMxxP,GAAKmD,EAEV,CACe,KAApBnD,EAAIyxP,EAAK,GAAKD,GACM,KAApBxxP,EAAIyxP,EAAK,GAAKD,GACM,KAApBxxP,EAAIyxP,EAAK,GAAKD,KAIjB50B,EAAQmzB,IAAIR,IAAM,SAAUQ,GAC3B,IAAI/vP,EAAI+vP,EAAI,GAAK,IAGbj9O,EAAI9S,EAFA+vP,EAAI,GAAK,KAEA,EAAM/vP,GACnB9H,EAAI,EAMR,OAJI4a,EAAI,IACP5a,EAAI8H,EAAI8S,GAGF,CAACi9O,EAAI,GAAQ,IAAJ73P,EAAa,IAAJ4a,IAG1B8pN,EAAQmzB,IAAIT,IAAM,SAAUS,GAC3B,IAAI/vP,EAAI+vP,EAAI,GAAK,IAGbv9O,EAFIu9O,EAAI,GAAK,KAEJ,EAAM/vP,GAAK,GAAMA,EAC1B9C,EAAI,EASR,OAPIsV,EAAI,GAAOA,EAAI,GAClBtV,EAAI8C,GAAK,EAAIwS,GAEVA,GAAK,IAAOA,EAAI,IACnBtV,EAAI8C,GAAK,GAAK,EAAIwS,KAGZ,CAACu9O,EAAI,GAAQ,IAAJ7yP,EAAa,IAAJsV,IAG1BoqN,EAAQmzB,IAAIP,IAAM,SAAUO,GAC3B,IAAI/vP,EAAI+vP,EAAI,GAAK,IAEbj9O,EAAI9S,EADA+vP,EAAI,GAAK,KACA,EAAM/vP,GACvB,MAAO,CAAC+vP,EAAI,GAAc,KAATj9O,EAAI9S,GAAoB,KAAT,EAAI8S,KAGrC8pN,EAAQ4yB,IAAIO,IAAM,SAAUP,GAC3B,IAAI9rM,EAAI8rM,EAAI,GAAK,IAEb18O,EAAI,EADA08O,EAAI,GAAK,IAEbxvP,EAAI8S,EAAI4wC,EACRvgD,EAAI,EAMR,OAJInD,EAAI,IACPmD,GAAK2P,EAAI9S,IAAM,EAAIA,IAGb,CAACwvP,EAAI,GAAQ,IAAJxvP,EAAa,IAAJmD,IAG1By5N,EAAQozB,MAAMjE,IAAM,SAAUiE,GAC7B,MAAO,CAAEA,EAAM,GAAK,MAAS,IAAMA,EAAM,GAAK,MAAS,IAAMA,EAAM,GAAK,MAAS,MAGlFpzB,EAAQmvB,IAAIiE,MAAQ,SAAUjE,GAC7B,MAAO,CAAEA,EAAI,GAAK,IAAO,MAAQA,EAAI,GAAK,IAAO,MAAQA,EAAI,GAAK,IAAO,QAG1EnvB,EAAQowB,KAAKjB,IAAM,SAAUj5P,GAC5B,MAAO,CAACA,EAAK,GAAK,IAAM,IAAKA,EAAK,GAAK,IAAM,IAAKA,EAAK,GAAK,IAAM,MAGnE8pO,EAAQowB,KAAKsC,IAAM1yB,EAAQowB,KAAKuC,IAAM,SAAUz8P,GAC/C,MAAO,CAAC,EAAG,EAAGA,EAAK,KAGpB8pO,EAAQowB,KAAKwC,IAAM,SAAUxC,GAC5B,MAAO,CAAC,EAAG,IAAKA,EAAK,KAGtBpwB,EAAQowB,KAAKyC,KAAO,SAAUzC,GAC7B,MAAO,CAAC,EAAG,EAAG,EAAGA,EAAK,KAGvBpwB,EAAQowB,KAAK2C,IAAM,SAAU3C,GAC5B,MAAO,CAACA,EAAK,GAAI,EAAG,IAGrBpwB,EAAQowB,KAAK6C,IAAM,SAAU7C,GAC5B,IAAIvzP,EAAwC,IAAlCV,KAAKsW,MAAM29O,EAAK,GAAK,IAAM,KAGjCp5B,IAFWn6N,GAAO,KAAOA,GAAO,GAAKA,GAEpBxC,SAAS,IAAImiF,cAClC,MAAO,SAASx0D,UAAUgvM,EAAOtiO,QAAUsiO,GAG5CgJ,EAAQmvB,IAAIiB,KAAO,SAAUjB,GAE5B,MAAO,EADIA,EAAI,GAAKA,EAAI,GAAKA,EAAI,IAAM,EACzB,IAAM,O,eCl2BrB,IAAI/f,EAAc,EAAQ,MACtB0lB,EAAQ,EAAQ,MAEhB90B,EAAU,GAED/oO,OAAO8lB,KAAKqyN,GAuDlBntO,SAAQ,SAAU8yP,GACxB/0B,EAAQ+0B,GAAa,GAErB99P,OAAOC,eAAe8oO,EAAQ+0B,GAAY,WAAY,CAACp/P,MAAOy5O,EAAY2lB,GAAWlhG,WACrF58J,OAAOC,eAAe8oO,EAAQ+0B,GAAY,SAAU,CAACp/P,MAAOy5O,EAAY2lB,GAAWz1N,SAEnF,IAAI01N,EAASF,EAAMC,GACD99P,OAAO8lB,KAAKi4O,GAElB/yP,SAAQ,SAAUgzP,GAC7B,IAAIj/P,EAAKg/P,EAAOC,GAEhBj1B,EAAQ+0B,GAAWE,GA5CrB,SAAqBj/P,GACpB,IAAIk/P,EAAY,SAAUh/P,GACzB,GAAIA,QACH,OAAOA,EAGJC,UAAUzB,OAAS,IACtBwB,EAAOrB,MAAMwC,UAAUiD,MAAMvC,KAAK5B,YAGnC,IAAIiH,EAASpH,EAAGE,GAKhB,GAAsB,iBAAXkH,EACV,IAAK,IAAI3I,EAAM2I,EAAO1I,OAAQC,EAAI,EAAGA,EAAIF,EAAKE,IAC7CyI,EAAOzI,GAAKwH,KAAKsW,MAAMrV,EAAOzI,IAIhC,OAAOyI,GAQR,MAJI,eAAgBpH,IACnBk/P,EAAUC,WAAan/P,EAAGm/P,YAGpBD,EAewBE,CAAYp/P,GAC1CgqO,EAAQ+0B,GAAWE,GAASI,IAlE9B,SAAiBr/P,GAChB,IAAIk/P,EAAY,SAAUh/P,GACzB,OAAIA,QACIA,GAGJC,UAAUzB,OAAS,IACtBwB,EAAOrB,MAAMwC,UAAUiD,MAAMvC,KAAK5B,YAG5BH,EAAGE,KAQX,MAJI,eAAgBF,IACnBk/P,EAAUC,WAAan/P,EAAGm/P,YAGpBD,EAgD4BI,CAAQt/P,SAI5C1B,EAAOC,QAAUyrO,G,eC7EjB,IAAIoP,EAAc,EAAQ,MAwD1B,SAASmmB,EAAK38P,EAAMy2O,GACnB,OAAO,SAAUn5O,GAChB,OAAOm5O,EAAGz2O,EAAK1C,KAIjB,SAASs/P,EAAeP,EAAShnI,GAKhC,IAJA,IAAIt7G,EAAO,CAACs7G,EAAMgnI,GAAS36H,OAAQ26H,GAC/Bj/P,EAAKo5O,EAAYnhH,EAAMgnI,GAAS36H,QAAQ26H,GAExCQ,EAAMxnI,EAAMgnI,GAAS36H,OAClBrM,EAAMwnI,GAAKn7H,QACjB3nH,EAAK88B,QAAQw+E,EAAMwnI,GAAKn7H,QACxBtkI,EAAKu/P,EAAKnmB,EAAYnhH,EAAMwnI,GAAKn7H,QAAQm7H,GAAMz/P,GAC/Cy/P,EAAMxnI,EAAMwnI,GAAKn7H,OAIlB,OADAtkI,EAAGm/P,WAAaxiP,EACT3c,EAGR1B,EAAOC,QAAU,SAAUwgQ,GAK1B,IAJA,IAAI9mI,EA/CL,SAAmB8mI,GAClB,IAAI9mI,EAnBL,WAKC,IAJA,IAAIA,EAAQ,GAERynI,EAASz+P,OAAO8lB,KAAKqyN,GAEhB36O,EAAMihQ,EAAOhhQ,OAAQC,EAAI,EAAGA,EAAIF,EAAKE,IAC7Cs5H,EAAMynI,EAAO/gQ,IAAM,CAGlBi/P,UAAW,EACXt5H,OAAQ,MAIV,OAAOrM,EAKK0nI,GACRtqH,EAAQ,CAAC0pH,GAIb,IAFA9mI,EAAM8mI,GAAWnB,SAAW,EAErBvoH,EAAM32I,QAIZ,IAHA,IAAIy2H,EAAUkgB,EAAM9nH,MAChBqyO,EAAY3+P,OAAO8lB,KAAKqyN,EAAYjkH,IAE/B12H,EAAMmhQ,EAAUlhQ,OAAQC,EAAI,EAAGA,EAAIF,EAAKE,IAAK,CACrD,IAAIkhQ,EAAWD,EAAUjhQ,GACrBsvB,EAAOgqG,EAAM4nI,IAEM,IAAnB5xO,EAAK2vO,WACR3vO,EAAK2vO,SAAW3lI,EAAM9C,GAASyoI,SAAW,EAC1C3vO,EAAKq2G,OAASnP,EACdkgB,EAAM57F,QAAQomN,IAKjB,OAAO5nI,EAyBK6nI,CAAUf,GAClBI,EAAa,GAEbO,EAASz+P,OAAO8lB,KAAKkxG,GAChBx5H,EAAMihQ,EAAOhhQ,OAAQC,EAAI,EAAGA,EAAIF,EAAKE,IAAK,CAClD,IAAIsgQ,EAAUS,EAAO/gQ,GAGD,OAFTs5H,EAAMgnI,GAER36H,SAKT66H,EAAWF,GAAWO,EAAeP,EAAShnI,IAG/C,OAAOknI,I,sBC5FR7gQ,EAAOC,QAAU,CAChB,UAAa,CAAC,IAAK,IAAK,KACxB,aAAgB,CAAC,IAAK,IAAK,KAC3B,KAAQ,CAAC,EAAG,IAAK,KACjB,WAAc,CAAC,IAAK,IAAK,KACzB,MAAS,CAAC,IAAK,IAAK,KACpB,MAAS,CAAC,IAAK,IAAK,KACpB,OAAU,CAAC,IAAK,IAAK,KACrB,MAAS,CAAC,EAAG,EAAG,GAChB,eAAkB,CAAC,IAAK,IAAK,KAC7B,KAAQ,CAAC,EAAG,EAAG,KACf,WAAc,CAAC,IAAK,GAAI,KACxB,MAAS,CAAC,IAAK,GAAI,IACnB,UAAa,CAAC,IAAK,IAAK,KACxB,UAAa,CAAC,GAAI,IAAK,KACvB,WAAc,CAAC,IAAK,IAAK,GACzB,UAAa,CAAC,IAAK,IAAK,IACxB,MAAS,CAAC,IAAK,IAAK,IACpB,eAAkB,CAAC,IAAK,IAAK,KAC7B,SAAY,CAAC,IAAK,IAAK,KACvB,QAAW,CAAC,IAAK,GAAI,IACrB,KAAQ,CAAC,EAAG,IAAK,KACjB,SAAY,CAAC,EAAG,EAAG,KACnB,SAAY,CAAC,EAAG,IAAK,KACrB,cAAiB,CAAC,IAAK,IAAK,IAC5B,SAAY,CAAC,IAAK,IAAK,KACvB,UAAa,CAAC,EAAG,IAAK,GACtB,SAAY,CAAC,IAAK,IAAK,KACvB,UAAa,CAAC,IAAK,IAAK,KACxB,YAAe,CAAC,IAAK,EAAG,KACxB,eAAkB,CAAC,GAAI,IAAK,IAC5B,WAAc,CAAC,IAAK,IAAK,GACzB,WAAc,CAAC,IAAK,GAAI,KACxB,QAAW,CAAC,IAAK,EAAG,GACpB,WAAc,CAAC,IAAK,IAAK,KACzB,aAAgB,CAAC,IAAK,IAAK,KAC3B,cAAiB,CAAC,GAAI,GAAI,KAC1B,cAAiB,CAAC,GAAI,GAAI,IAC1B,cAAiB,CAAC,GAAI,GAAI,IAC1B,cAAiB,CAAC,EAAG,IAAK,KAC1B,WAAc,CAAC,IAAK,EAAG,KACvB,SAAY,CAAC,IAAK,GAAI,KACtB,YAAe,CAAC,EAAG,IAAK,KACxB,QAAW,CAAC,IAAK,IAAK,KACtB,QAAW,CAAC,IAAK,IAAK,KACtB,WAAc,CAAC,GAAI,IAAK,KACxB,UAAa,CAAC,IAAK,GAAI,IACvB,YAAe,CAAC,IAAK,IAAK,KAC1B,YAAe,CAAC,GAAI,IAAK,IACzB,QAAW,CAAC,IAAK,EAAG,KACpB,UAAa,CAAC,IAAK,IAAK,KACxB,WAAc,CAAC,IAAK,IAAK,KACzB,KAAQ,CAAC,IAAK,IAAK,GACnB,UAAa,CAAC,IAAK,IAAK,IACxB,KAAQ,CAAC,IAAK,IAAK,KACnB,MAAS,CAAC,EAAG,IAAK,GAClB,YAAe,CAAC,IAAK,IAAK,IAC1B,KAAQ,CAAC,IAAK,IAAK,KACnB,SAAY,CAAC,IAAK,IAAK,KACvB,QAAW,CAAC,IAAK,IAAK,KACtB,UAAa,CAAC,IAAK,GAAI,IACvB,OAAU,CAAC,GAAI,EAAG,KAClB,MAAS,CAAC,IAAK,IAAK,KACpB,MAAS,CAAC,IAAK,IAAK,KACpB,SAAY,CAAC,IAAK,IAAK,KACvB,cAAiB,CAAC,IAAK,IAAK,KAC5B,UAAa,CAAC,IAAK,IAAK,GACxB,aAAgB,CAAC,IAAK,IAAK,KAC3B,UAAa,CAAC,IAAK,IAAK,KACxB,WAAc,CAAC,IAAK,IAAK,KACzB,UAAa,CAAC,IAAK,IAAK,KACxB,qBAAwB,CAAC,IAAK,IAAK,KACnC,UAAa,CAAC,IAAK,IAAK,KACxB,WAAc,CAAC,IAAK,IAAK,KACzB,UAAa,CAAC,IAAK,IAAK,KACxB,UAAa,CAAC,IAAK,IAAK,KACxB,YAAe,CAAC,IAAK,IAAK,KAC1B,cAAiB,CAAC,GAAI,IAAK,KAC3B,aAAgB,CAAC,IAAK,IAAK,KAC3B,eAAkB,CAAC,IAAK,IAAK,KAC7B,eAAkB,CAAC,IAAK,IAAK,KAC7B,eAAkB,CAAC,IAAK,IAAK,KAC7B,YAAe,CAAC,IAAK,IAAK,KAC1B,KAAQ,CAAC,EAAG,IAAK,GACjB,UAAa,CAAC,GAAI,IAAK,IACvB,MAAS,CAAC,IAAK,IAAK,KACpB,QAAW,CAAC,IAAK,EAAG,KACpB,OAAU,CAAC,IAAK,EAAG,GACnB,iBAAoB,CAAC,IAAK,IAAK,KAC/B,WAAc,CAAC,EAAG,EAAG,KACrB,aAAgB,CAAC,IAAK,GAAI,KAC1B,aAAgB,CAAC,IAAK,IAAK,KAC3B,eAAkB,CAAC,GAAI,IAAK,KAC5B,gBAAmB,CAAC,IAAK,IAAK,KAC9B,kBAAqB,CAAC,EAAG,IAAK,KAC9B,gBAAmB,CAAC,GAAI,IAAK,KAC7B,gBAAmB,CAAC,IAAK,GAAI,KAC7B,aAAgB,CAAC,GAAI,GAAI,KACzB,UAAa,CAAC,IAAK,IAAK,KACxB,UAAa,CAAC,IAAK,IAAK,KACxB,SAAY,CAAC,IAAK,IAAK,KACvB,YAAe,CAAC,IAAK,IAAK,KAC1B,KAAQ,CAAC,EAAG,EAAG,KACf,QAAW,CAAC,IAAK,IAAK,KACtB,MAAS,CAAC,IAAK,IAAK,GACpB,UAAa,CAAC,IAAK,IAAK,IACxB,OAAU,CAAC,IAAK,IAAK,GACrB,UAAa,CAAC,IAAK,GAAI,GACvB,OAAU,CAAC,IAAK,IAAK,KACrB,cAAiB,CAAC,IAAK,IAAK,KAC5B,UAAa,CAAC,IAAK,IAAK,KACxB,cAAiB,CAAC,IAAK,IAAK,KAC5B,cAAiB,CAAC,IAAK,IAAK,KAC5B,WAAc,CAAC,IAAK,IAAK,KACzB,UAAa,CAAC,IAAK,IAAK,KACxB,KAAQ,CAAC,IAAK,IAAK,IACnB,KAAQ,CAAC,IAAK,IAAK,KACnB,KAAQ,CAAC,IAAK,IAAK,KACnB,WAAc,CAAC,IAAK,IAAK,KACzB,OAAU,CAAC,IAAK,EAAG,KACnB,cAAiB,CAAC,IAAK,GAAI,KAC3B,IAAO,CAAC,IAAK,EAAG,GAChB,UAAa,CAAC,IAAK,IAAK,KACxB,UAAa,CAAC,GAAI,IAAK,KACvB,YAAe,CAAC,IAAK,GAAI,IACzB,OAAU,CAAC,IAAK,IAAK,KACrB,WAAc,CAAC,IAAK,IAAK,IACzB,SAAY,CAAC,GAAI,IAAK,IACtB,SAAY,CAAC,IAAK,IAAK,KACvB,OAAU,CAAC,IAAK,GAAI,IACpB,OAAU,CAAC,IAAK,IAAK,KACrB,QAAW,CAAC,IAAK,IAAK,KACtB,UAAa,CAAC,IAAK,GAAI,KACvB,UAAa,CAAC,IAAK,IAAK,KACxB,UAAa,CAAC,IAAK,IAAK,KACxB,KAAQ,CAAC,IAAK,IAAK,KACnB,YAAe,CAAC,EAAG,IAAK,KACxB,UAAa,CAAC,GAAI,IAAK,KACvB,IAAO,CAAC,IAAK,IAAK,KAClB,KAAQ,CAAC,EAAG,IAAK,KACjB,QAAW,CAAC,IAAK,IAAK,KACtB,OAAU,CAAC,IAAK,GAAI,IACpB,UAAa,CAAC,GAAI,IAAK,KACvB,OAAU,CAAC,IAAK,IAAK,KACrB,MAAS,CAAC,IAAK,IAAK,KACpB,MAAS,CAAC,IAAK,IAAK,KACpB,WAAc,CAAC,IAAK,IAAK,KACzB,OAAU,CAAC,IAAK,IAAK,GACrB,YAAe,CAAC,IAAK,IAAK,M,4BCpJ3B0C,OAAOC,eAAe3C,EAAS,aAAc,CAC3CoB,OAAO,IAETpB,EAAQszI,aAAU,EAElB,IAAIkuH,EAAaC,EAAuB,EAAQ,OAE5CC,EAAaD,EAAuB,EAAQ,OAE5CE,EAAeF,EAAuB,EAAQ,OAElD,SAASA,EAAuB97P,GAAO,OAAOA,GAAOA,EAAIi8P,WAAaj8P,EAAM,CAAE2tI,QAAS3tI,GAEvF,MAAMk8P,EAAa,CAAC,OAAQ,QAAS,UA2FrC7hQ,EAAQszI,QA1CY,CAACwuH,EAASC,EAAgBC,KAC5C,KAAK,EAAIN,EAAWpuH,SAASwuH,GAC3B,MAAM,IAAI5/P,UAAU,6CAGtB,KAAK,EAAIs/P,EAAWluH,SAASyuH,GAC3B,MAAM,IAAI7/P,UAAU,qDAGtB,MAAM+/P,GAAe,EAAIN,EAAaruH,SAASwuH,GAE/C,GAAIG,EAAeF,EAEjB,MAAM,IAAIx6P,MAAM,6EAGlB,KAAK,EAAIm6P,EAAWpuH,SAAS0uH,GAC3B,MAAM,IAAI9/P,UAAU,+CAGtB,IAAK2/P,EAAWzjK,SAAS4jK,GACvB,MAAM,IAAIz6P,MAAM,8FAGlB,GAAqB,IAAjB06P,EACF,MAAO,IAAIn3P,OAAOi3P,GAGpB,MAAMG,EAAiBH,EAAiBE,EAExC,MAAkB,SAAdD,EAxEY,EAACF,EAASv3P,IACnBu3P,EAAU,IAAIh3P,OAAOP,GAwEnB43P,CAAUL,EAASI,GAGV,UAAdF,EAlEa,EAACF,EAASv3P,IACpB,IAAIO,OAAOP,GAASu3P,EAkElBM,CAAWN,EAASI,GAzDX,EAACJ,EAASv3P,KAC5B,IAAI83P,EAGJ,OAFAA,EAAY93P,EAAQ,EAEhB83P,EAAY,GAAM,EACb,IAAIv3P,OAAOu3P,GAAaP,EAAU,IAAIh3P,OAAOu3P,IAEpDA,EAAYz6P,KAAK8H,MAAM2yP,GAChB,IAAIv3P,OAAOu3P,GAAaP,EAAU,IAAIh3P,OAAOu3P,EAAY,KAoD3DC,CAAYR,EAASI,K,4BCpG9Bx/P,OAAOC,eAAe3C,EAAS,aAAc,CAC3CoB,OAAO,IAETpB,EAAQszI,aAAU,EAElB,IAAIquH,EAAeF,EAAuB,EAAQ,OAE9Cc,EAAed,EAAuB,EAAQ,OAElD,SAASA,EAAuB97P,GAAO,OAAOA,GAAOA,EAAIi8P,WAAaj8P,EAAM,CAAE2tI,QAAS3tI,GAsBvF3F,EAAQszI,QAfe,CAACntD,EAAMhpE,IACrBgpE,EAAKr6E,KAAI+1G,GACPA,EAAM/1G,KAAI,CAAC1K,EAAOohQ,KACvB,MAAMpxD,EAASj0L,EAAOipE,QAAQo8K,GAE9B,OAAI,EAAIb,EAAaruH,SAASlyI,KAAWgwM,EAAO7mM,MACvCnJ,GAEA,EAAImhQ,EAAajvH,SAASlyI,EAAOgwM,EAAO7mM,MAAO6mM,EAAO4wD,iB,4BCxBrEt/P,OAAOC,eAAe3C,EAAS,aAAc,CAC3CoB,OAAO,IAETpB,EAAQszI,aAAU,EAElB,IAAIouH,EAAaD,EAAuB,EAAQ,OAE5CgB,EAAYhB,EAAuB,EAAQ,OAE/C,SAASA,EAAuB97P,GAAO,OAAOA,GAAOA,EAAIi8P,WAAaj8P,EAAM,CAAE2tI,QAAS3tI,GAyBvF3F,EAAQszI,QAjBoB,CAAClyI,EAAOshQ,EAAaC,GAAc,KAC7D,KAAK,EAAIjB,EAAWpuH,SAASlyI,GAC3B,MAAM,IAAIc,UAAU,2BAGtB,IAAK6G,OAAOuG,UAAUozP,GACpB,MAAM,IAAIxgQ,UAAU,oCAGtB,GAAIwgQ,EAAc,EAChB,MAAM,IAAIn7P,MAAM,wCAGlB,OAAO,EAAIk7P,EAAUnvH,SAASlyI,EAAOshQ,EAAaC,GAAaxiQ,S,4BC9BjEuC,OAAOC,eAAe3C,EAAS,aAAc,CAC3CoB,OAAO,IAETpB,EAAQszI,aAAU,EAElB,IAEgC3tI,EAF5Bg8P,GAE4Bh8P,EAFU,EAAQ,QAEGA,EAAIi8P,WAAaj8P,EAAM,CAAE2tI,QAAS3tI,GAiBvF3F,EAAQszI,QATwBzxB,GACvBA,EAAM/1G,KAAI1K,GACRwG,KAAKQ,OAAOhH,EAAM4P,MAAM,MAAMlF,KAAIk0F,IAChC,EAAI2hK,EAAaruH,SAAStzC,S,4BClBvCt9F,OAAOC,eAAe3C,EAAS,aAAc,CAC3CoB,OAAO,IAETpB,EAAQszI,aAAU,EAElB,IAEgC3tI,EAF5Bi9P,GAE4Bj9P,EAFsB,EAAQ,QAETA,EAAIi8P,WAAaj8P,EAAM,CAAE2tI,QAAS3tI,GA0BvF3F,EAAQszI,QAlBiCntD,IACvC,IAAKA,EAAK,GACR,MAAM,IAAI5+E,MAAM,uCAGlB,MAAM6+E,EAAU,IAAI9lF,MAAM6lF,EAAK,GAAGhmF,QAAQygB,KAAK,GAS/C,OARAulE,EAAKz4E,SAAQqT,KACc,EAAI6hP,EAAyBtvH,SAASvyH,GAC9CrT,SAAQ,CAACm1P,EAAYC,KAChC18K,EAAQ08K,GAAUD,IACpBz8K,EAAQ08K,GAAUD,SAIjBz8K,I,4BC7BT1jF,OAAOC,eAAe3C,EAAS,aAAc,CAC3CoB,OAAO,IAETpB,EAAQszI,aAAU,EAElB,IAAIyvH,EAAQtB,EAAuB,EAAQ,OAEvCuB,EAAcvB,EAAuB,EAAQ,OAE7CD,EAAaC,EAAuB,EAAQ,OAE5CwB,EAAuBxB,EAAuB,EAAQ,OAE1D,SAASA,EAAuB97P,GAAO,OAAOA,GAAOA,EAAIi8P,WAAaj8P,EAAM,CAAE2tI,QAAS3tI,GA+BvF3F,EAAQszI,QAtBwB,CAACntD,EAAMhpE,KACrC,MAAM+lP,EAAa/8K,EAAK,GAAGhmF,OACrBgjQ,EAAe,GAgBrB,OAfAh9K,EAAKz4E,SAAQm0G,IACX,MAAMuhJ,EAAkB,IAAI9iQ,MAAM4iQ,GAAYtiP,KAAK,GACnDihG,EAAMn0G,SAAQ,CAACtM,EAAOohQ,KACpB,KAAK,EAAIhB,EAAWluH,SAASn2H,EAAOipE,QAAQo8K,GAAQj4P,OAClD,MAAM,IAAIrI,UAAU,yCAGtB,KAAK,EAAI8gQ,EAAY1vH,SAASn2H,EAAOipE,QAAQo8K,GAAQa,UACnD,MAAM,IAAInhQ,UAAU,6CAGtBkhQ,EAAgBZ,IAAU,EAAIS,EAAqB3vH,SAASlyI,EAAO+b,EAAOipE,QAAQo8K,GAAQj4P,MAAO4S,EAAOipE,QAAQo8K,GAAQa,aAE1HF,EAAat+P,MAAK,EAAIk+P,EAAMzvH,SAAS8vH,OAEhCD,I,4BCxCTzgQ,OAAOC,eAAe3C,EAAS,aAAc,CAC3CoB,OAAO,IAETpB,EAAQszI,aAAU,EAElB,IAAIgwH,EAAc7B,EAAuB,EAAQ,OAE7C8B,EAAW9B,EAAuB,EAAQ,OAE1C+B,EAAY/B,EAAuB,EAAQ,MAE3CgC,EAAoBhC,EAAuB,EAAQ,OAEnDiC,EAAWjC,EAAuB,EAAQ,OAE1CkC,EAAc,EAAQ,MAEtBC,EAAsBnC,EAAuB,EAAQ,OAErDoC,EAAqBpC,EAAuB,EAAQ,OAEpDqC,EAA8BrC,EAAuB,EAAQ,OAE7DsC,EAAkBtC,EAAuB,EAAQ,OAEjDuC,EAAgBvC,EAAuB,EAAQ,OAE/CwC,EAA2BxC,EAAuB,EAAQ,OAE9D,SAASA,EAAuB97P,GAAO,OAAOA,GAAOA,EAAIi8P,WAAaj8P,EAAM,CAAE2tI,QAAS3tI,GAOvF,MAAMu+P,EAAc,CAAC79P,EAAM8W,KACzB,IAAIgpE,EACJA,GAAO,EAAIy9K,EAAoBtwH,SAASjtI,GACxC8/E,GAAO,EAAI09K,EAAmBvwH,SAASjtI,EAAM8W,GAC7C,MAAMgnP,GAAiB,EAAIF,EAAyB3wH,SAASntD,EAAMhpE,GAInE,OAHAgpE,GAAO,EAAI29K,EAA4BxwH,SAASntD,EAAMg+K,EAAgBhnP,GACtEgpE,GAAO,EAAI49K,EAAgBzwH,SAASntD,EAAMhpE,GAC1CgpE,GAAO,EAAI69K,EAAc1wH,SAASntD,EAAMhpE,GACjCgpE,GAoFTnmF,EAAQszI,QA7Ba,CAAC8wH,EAAa,MACjC,MAAMjnP,GAAS,EAAIsmP,EAAkBnwH,SAAS8wH,GAExCC,GAAmB,EAAId,EAASjwH,UAAS,EAAIgwH,EAAYhwH,SAASn2H,EAAOipE,SAASgrH,GAC/EA,EAAO7mM,MAAQ6mM,EAAOkzD,YAAclzD,EAAOmzD,gBAEpD,IAAIC,EAEJ,OADAA,GAAQ,EACD,CAKL72O,MAAO5M,IACL,GAAIA,EAAI5gB,SAAWgd,EAAOsnP,YACxB,MAAM,IAAIl9P,MAAM,yDAGlB,OAAIi9P,GACFA,GAAQ,EAhED,EAACzjP,EAAKsjP,EAAkBlnP,KACrC,MACMyqB,EADOs8N,EAAY,CAACnjP,GAAM5D,GACdrR,KAAI44P,IACb,EAAIhB,EAASpwH,SAASoxH,EAAYvnP,EAAOwnP,UAC/CjzP,KAAK,IACR,IAAI2N,EACJA,EAAS,GACTA,IAAU,EAAIskP,EAAYiB,eAAeP,EAAkBlnP,EAAOwnP,QAClEtlP,GAAUuoB,EACVvoB,IAAU,EAAIskP,EAAYkB,kBAAkBR,EAAkBlnP,EAAOwnP,QACrEtlP,GAAS,EAAImkP,EAAUlwH,SAASj0H,GAChCpN,QAAQ6yP,OAAOn3O,MAAMtO,IAsDRrb,CAAO+c,EAAKsjP,EAAkBlnP,IA5C9B,EAAC4D,EAAKsjP,EAAkBlnP,KACrC,MACMyqB,EADOs8N,EAAY,CAACnjP,GAAM5D,GACdrR,KAAI44P,IACb,EAAIhB,EAASpwH,SAASoxH,EAAYvnP,EAAOwnP,UAC/CjzP,KAAK,IACR,IAAI2N,EAAS,GACb,MAAM8hC,GAAS,EAAIwiN,EAAYkB,kBAAkBR,EAAkBlnP,EAAOwnP,QAE3D,OAAXxjN,IACF9hC,EAAS,SAGXA,IAAU,EAAIskP,EAAYoB,gBAAgBV,EAAkBlnP,EAAOwnP,QACnEtlP,GAAUuoB,EACVvoB,GAAU8hC,EACV9hC,GAAS,EAAImkP,EAAUlwH,SAASj0H,GAChCpN,QAAQ6yP,OAAOn3O,MAAMtO,IA8BR0oB,CAAOhnB,EAAKsjP,EAAkBlnP,O,0BCzH7Cza,OAAOC,eAAe3C,EAAS,aAAc,CAC3CoB,OAAO,IAETpB,EAAQ4kQ,cAAgB5kQ,EAAQ+kQ,eAAiB/kQ,EAAQ6kQ,iBAAmB7kQ,EAAQglQ,gBAAa,EAejG,MAAMA,EAAa,CAACC,EAAiBhsI,KACnC,MAAM7yC,EAAU6+K,EAAgBn5P,KAAIjC,GAC3BovH,EAAMrxF,KAAK98B,OAAOjB,KACxB6H,KAAKunH,EAAMvnH,MACd,OAAOunH,EAAM73E,KAAOglC,EAAU6yC,EAAM53E,MAAQ,MAiB9CrhD,EAAQglQ,WAAaA,EA+BrBhlQ,EAAQ4kQ,cA7Bc,CAACK,EAAiBhsI,KACtC,MAAM0rI,EAASK,EAAWC,EAAiB,CACzCr9N,KAAMqxF,EAAMisI,QACZxzP,KAAMunH,EAAMksI,QACZ/jN,KAAM63E,EAAMi6B,QACZ7xG,MAAO43E,EAAMk6B,WAGf,MAAe,OAAXwxG,EACK,GAGFA,GA0CT3kQ,EAAQ+kQ,eAvBe,CAACE,EAAiBhsI,IAChC+rI,EAAWC,EAAiB,CACjCr9N,KAAMqxF,EAAMmsI,SACZ1zP,KAAMunH,EAAMosI,SACZjkN,KAAM63E,EAAMqsI,SACZjkN,MAAO43E,EAAMssI,YA6BjBvlQ,EAAQ6kQ,iBATiB,CAACI,EAAiBhsI,IAClC+rI,EAAWC,EAAiB,CACjCr9N,KAAMqxF,EAAMusI,WACZ9zP,KAAMunH,EAAMwsI,WACZrkN,KAAM63E,EAAMm6B,WACZ/xG,MAAO43E,EAAMysI,e,0BCtGjBhjQ,OAAOC,eAAe3C,EAAS,aAAc,CAC3CoB,OAAO,IAETpB,EAAQszI,aAAU,EAmBlBtzI,EAAQszI,QALQ,CAACltD,EAASu+K,IACjBA,EAAOgB,SAAWv/K,EAAQ10E,KAAKizP,EAAOiB,UAAYjB,EAAOkB,UAAY,M,4BClB9EnjQ,OAAOC,eAAe3C,EAAS,aAAc,CAC3CoB,OAAO,IAETpB,EAAQszI,aAAU,EAElB,IAIgC3tI,EAJ5Bg+P,EAAc,EAAQ,MAEtBD,GAE4B/9P,EAFM,EAAQ,QAEOA,EAAIi8P,WAAaj8P,EAAM,CAAE2tI,QAAS3tI,GA8CvF3F,EAAQszI,QAnCU,CAACntD,EAAMw+K,EAAQM,EAAiB9B,EAAc2C,EAAoBC,KAClF,IAAI1mP,EACA2mP,EACAC,EACJ,MAAMC,EAAW//K,EAAKhmF,OA2BtB,OA1BA6lQ,EAAe,EACf3mP,EAAS,GAELymP,EAAmBE,EAAcE,KACnC7mP,IAAU,EAAIskP,EAAYiB,eAAeK,EAAiBN,IAG5Dx+K,EAAKz4E,SAAQ,CAACqT,EAAK+hP,KACjBzjP,IAAU,EAAIqkP,EAASpwH,SAASvyH,EAAK4jP,GAEhCsB,IACHA,EAAY9C,EAAa6C,GACzBA,KAGFC,KAEKF,GAA4B,IAAdE,GAAmBnD,IAAWoD,EAAW,GAAKJ,EAAmBE,EAAcE,KAChG7mP,IAAU,EAAIskP,EAAYoB,gBAAgBE,EAAiBN,OAI3DmB,EAAmBE,EAAcE,KACnC7mP,IAAU,EAAIskP,EAAYkB,kBAAkBI,EAAiBN,IAGxDtlP,I,0BCnDT3c,OAAOC,eAAe3C,EAAS,aAAc,CAC3CoB,OAAO,IAETpB,EAAQszI,aAAU,EAgHlBtzI,EAAQszI,QArFoBttI,IAC1B,GAAa,cAATA,EACF,MAAO,CACLk/P,QAAS,IACTC,QAAS,IACTjyG,QAAS,IACTC,SAAU,IACVqyG,WAAY,IACZC,WAAY,IACZryG,WAAY,IACZsyG,YAAa,IACbC,SAAU,IACVE,UAAW,IACXD,SAAU,IACVR,SAAU,IACVE,SAAU,IACVC,UAAW,IACXF,SAAU,KAId,GAAa,SAATr/P,EACF,MAAO,CACLk/P,QAAS,IACTC,QAAS,IACTjyG,QAAS,IACTC,SAAU,IACVqyG,WAAY,IACZC,WAAY,IACZryG,WAAY,IACZsyG,YAAa,IACbC,SAAU,IACVE,UAAW,IACXD,SAAU,IACVR,SAAU,IACVE,SAAU,IACVC,UAAW,IACXF,SAAU,KAId,GAAa,UAATr/P,EACF,MAAO,CACLk/P,QAAS,IACTC,QAAS,IACTjyG,QAAS,IACTC,SAAU,IACVqyG,WAAY,IACZC,WAAY,IACZryG,WAAY,IACZsyG,YAAa,IACbC,SAAU,IACVE,UAAW,IACXD,SAAU,IACVR,SAAU,IACVE,SAAU,IACVC,UAAW,IACXF,SAAU,KAId,GAAa,SAATr/P,EACF,MAAO,CACLk/P,QAAS,GACTC,QAAS,GACTjyG,QAAS,GACTC,SAAU,GACVqyG,WAAY,GACZC,WAAY,GACZryG,WAAY,GACZsyG,YAAa,GACbC,SAAU,GACVE,UAAW,GACXD,SAAU,GACVR,SAAU,GACVE,SAAU,GACVC,UAAW,GACXF,SAAU,IAId,MAAM,IAAI99P,MAAM,4BAA8BvB,EAAO,Q,2BC5GvDtD,OAAOC,eAAe3C,EAAS,KAA/B,CACEuC,YAAY,EACZa,IAAK,WACH,OAAO+iQ,EAAO7yH,WAgBlB,IAAI6yH,EAAS1E,EAAuB,EAAQ,OAExBA,EAAuB,EAAQ,OAExBA,EAAuB,EAAQ,OAE1D,SAASA,EAAuB97P,GAAO,OAAOA,GAAOA,EAAIi8P,WAAaj8P,EAAM,CAAE2tI,QAAS3tI,K,4BC5BvFjD,OAAOC,eAAe3C,EAAS,aAAc,CAC3CoB,OAAO,IAETpB,EAAQszI,aAAU,EAElB,IAAI8yH,EAAc3E,EAAuB,EAAQ,MAE7C4E,EAAgB5E,EAAuB,EAAQ,OAE/C6E,EAAU7E,EAAuB,EAAQ,OAEzC8E,EAAuB9E,EAAuB,EAAQ,OAEtD+E,EAAkB/E,EAAuB,EAAQ,KAEjDgF,EAAoChF,EAAuB,EAAQ,OAEvE,SAASA,EAAuB97P,GAAO,OAAOA,GAAOA,EAAIi8P,WAAaj8P,EAAM,CAAE2tI,QAAS3tI,GAyEvF3F,EAAQszI,QAvBW,CAACntD,EAAMi+K,EAAa,OACrC,EAAIoC,EAAgBlzH,SAAS,cAAe8wH,GAC5C,MAAMjnP,GAAS,EAAIipP,EAAY9yH,SAAS8wH,GAiBxC,OAhBAjnP,EAAOwnP,OA7CU,EAACA,EAAS,KACpBjiQ,OAAOkO,OAAO,IAAI,EAAI21P,EAAqBjzH,SAAS,aAAcqxH,GA4CzD+B,CAAWvpP,EAAOwnP,QAClCxnP,EAAOipE,QAhCW,EAACD,EAAMC,EAAU,GAAIugL,EAAgB,MACvD,MAAMC,GAA0B,EAAIH,EAAkCnzH,SAASntD,GAe/E,OAdA,EAAImgL,EAAQhzH,SAASntD,EAAK,GAAGhmF,QAAQwH,KAC/B,EAAI0+P,EAAc/yH,SAASltD,EAAQz+E,MACrCy+E,EAAQz+E,GAAS,IAGnBy+E,EAAQz+E,GAASjF,OAAOkO,OAAO,CAC7BoxP,UAAW,OACXsC,YAAa,EACbC,aAAc,EACd7lD,SAAUv0M,IACVI,MAAOq8P,EAAwBj/P,GAC/B07P,UAAU,GACTsD,EAAevgL,EAAQz+E,OAErBy+E,GAgBUygL,CAAY1gL,EAAMhpE,EAAOipE,QAASjpE,EAAOwpP,eAErDxpP,EAAO2oP,qBAIV3oP,EAAO2oP,mBAAqB,KACnB,QAIe/jQ,IAAtBob,EAAO4oP,aACT5oP,EAAO4oP,YAAa,GAGf5oP,I,4BCtFTza,OAAOC,eAAe3C,EAAS,aAAc,CAC3CoB,OAAO,IAETpB,EAAQszI,aAAU,EAElB,IAAI8yH,EAAc3E,EAAuB,EAAQ,MAE7C4E,EAAgB5E,EAAuB,EAAQ,OAE/C6E,EAAU7E,EAAuB,EAAQ,OAEzC8E,EAAuB9E,EAAuB,EAAQ,OAEtD+E,EAAkB/E,EAAuB,EAAQ,KAErD,SAASA,EAAuB97P,GAAO,OAAOA,GAAOA,EAAIi8P,WAAaj8P,EAAM,CAAE2tI,QAAS3tI,GAkFvF3F,EAAQszI,QAlBiB,CAAC8wH,EAAa,OACrC,EAAIoC,EAAgBlzH,SAAS,oBAAqB8wH,GAClD,MAAMjnP,GAAS,EAAIipP,EAAY9yH,SAAS8wH,GAExC,IAAKjnP,EAAOwpP,gBAAkBxpP,EAAOwpP,cAAcp8P,MACjD,MAAM,IAAIhD,MAAM,mEAGlB,IAAK4V,EAAOsnP,YACV,MAAM,IAAIl9P,MAAM,oCAKlB,OAFA4V,EAAOwnP,OApEU,EAACA,EAAS,KACpBjiQ,OAAOkO,OAAO,IAAI,EAAI21P,EAAqBjzH,SAAS,aAAcqxH,GAmEzD+B,CAAWvpP,EAAOwnP,QAClCxnP,EAAOipE,QAvDW,EAACq+K,EAAar+K,EAAU,GAAIugL,EAAgB,OAC9D,EAAIL,EAAQhzH,SAASmxH,GAAa98P,KAC5B,EAAI0+P,EAAc/yH,SAASltD,EAAQz+E,MACrCy+E,EAAQz+E,GAAS,IAGnBy+E,EAAQz+E,GAASjF,OAAOkO,OAAO,CAC7BoxP,UAAW,OACXsC,YAAa,EACbC,aAAc,EACd7lD,SAAUv0M,IACVk5P,UAAU,GACTsD,EAAevgL,EAAQz+E,OAErBy+E,GAyCUygL,CAAY1pP,EAAOsnP,YAAatnP,EAAOipE,QAASjpE,EAAOwpP,eACjExpP,I,4BC7FTza,OAAOC,eAAe3C,EAAS,aAAc,CAC3CoB,OAAO,IAETpB,EAAQszI,aAAU,EAElB,IAAIwzH,EAAYrF,EAAuB,EAAQ,OAE3C6E,EAAU7E,EAAuB,EAAQ,OAEzCgB,EAAYhB,EAAuB,EAAQ,OAE/C,SAASA,EAAuB97P,GAAO,OAAOA,GAAOA,EAAIi8P,WAAaj8P,EAAM,CAAE2tI,QAAS3tI,GA6BvF3F,EAAQszI,QArB2B,CAACyzH,EAAc5C,EAAgBhnP,KAChE,MAAM+lP,EAAa6D,EAAa,GAAG5mQ,OAC7B6mQ,EAAaD,EAAaj7P,KAAI,CAAC+1G,EAAOihJ,KAC1C,MAAMmD,GAAY,EAAIK,EAAQhzH,SAAS6wH,EAAerB,IAAS,IACtD,IAAIxiQ,MAAM4iQ,GAAYtiP,KAAK,MAWpC,OANAihG,EAAMn0G,SAAQ,CAACtM,EAAOohQ,MACF,EAAIC,EAAUnvH,SAASlyI,EAAO+b,EAAOipE,QAAQo8K,GAAQj4P,MAAO4S,EAAOipE,QAAQo8K,GAAQa,UAC3F31P,SAAQ,CAACu5P,EAAUC,KAC3BjB,EAAUiB,GAAQ1E,GAAUyE,QAGzBhB,KAET,OAAO,EAAIa,EAAUxzH,SAAS0zH,K,0BCpChCtkQ,OAAOC,eAAe3C,EAAS,aAAc,CAC3CoB,OAAO,IAETpB,EAAQszI,aAAU,EAiBlBtzI,EAAQszI,QAVa,CAACntD,EAAMhpE,IACnBgpE,EAAKr6E,KAAI+1G,GACPA,EAAM/1G,KAAI,CAAC1K,EAAOohQ,KACvB,MAAMpxD,EAASj0L,EAAOipE,QAAQo8K,GAC9B,MAAO,IAAI13P,OAAOsmM,EAAOkzD,aAAeljQ,EAAQ,IAAI0J,OAAOsmM,EAAOmzD,oB,0BCdxE7hQ,OAAOC,eAAe3C,EAAS,aAAc,CAC3CoB,OAAO,IAETpB,EAAQszI,aAAU,EAelBtzI,EAAQszI,QAPmBntD,GAClBA,EAAKr6E,KAAI+1G,GACPA,EAAM/1G,IAAI8B,W,4BCbrBlL,OAAOC,eAAe3C,EAAS,aAAc,CAC3CoB,OAAO,IAETpB,EAAQszI,aAAU,EAElB,IAAI6zH,EAAa1F,EAAuB,EAAQ,OAE5CmB,EAA2BnB,EAAuB,EAAQ,OAE1D2F,EAAc3F,EAAuB,EAAQ,OAE7CwC,EAA2BxC,EAAuB,EAAQ,OAE1DqC,EAA8BrC,EAAuB,EAAQ,OAE7DsC,EAAkBtC,EAAuB,EAAQ,OAEjDuC,EAAgBvC,EAAuB,EAAQ,OAE/C4F,EAAqB5F,EAAuB,EAAQ,OAEpDmC,EAAsBnC,EAAuB,EAAQ,OAErDoC,EAAqBpC,EAAuB,EAAQ,OAExD,SAASA,EAAuB97P,GAAO,OAAOA,GAAOA,EAAIi8P,WAAaj8P,EAAM,CAAE2tI,QAAS3tI,GAiFvF3F,EAAQszI,QAfM,CAACjtI,EAAM+9P,EAAa,MAChC,IAAIj+K,GACJ,EAAIkhL,EAAmB/zH,SAASjtI,GAChC8/E,GAAO,EAAIy9K,EAAoBtwH,SAASjtI,GACxC,MAAM8W,GAAS,EAAIiqP,EAAY9zH,SAASntD,EAAMi+K,GAC9Cj+K,GAAO,EAAI09K,EAAmBvwH,SAASjtI,EAAM8W,GAC7C,MAAMgnP,GAAiB,EAAIF,EAAyB3wH,SAASntD,EAAMhpE,GACnEgpE,GAAO,EAAI29K,EAA4BxwH,SAASntD,EAAMg+K,EAAgBhnP,GACtEgpE,GAAO,EAAI49K,EAAgBzwH,SAASntD,EAAMhpE,GAC1CgpE,GAAO,EAAI69K,EAAc1wH,SAASntD,EAAMhpE,GACxC,MAAMmqP,GAAiB,EAAI1E,EAAyBtvH,SAASntD,EAAK,IAClE,OAAO,EAAIghL,EAAW7zH,SAASntD,EAAMhpE,EAAOwnP,OAAQ2C,EAAgBnD,EAAgBhnP,EAAO2oP,mBAAoB3oP,EAAO4oP,c,4BCtGxHrjQ,OAAOC,eAAe3C,EAAS,aAAc,CAC3CoB,OAAO,IAETpB,EAAQszI,aAAU,EAElB,IAEgC3tI,EAF5B4hQ,GAE4B5hQ,EAFQ,EAAQ,QAEKA,EAAIi8P,WAAaj8P,EAAM,CAAE2tI,QAAS3tI,GAmBvF3F,EAAQszI,QAXkB,CAACntD,EAAMhpE,IACxBgpE,EAAKr6E,KAAI+1G,GACPA,EAAM/1G,KAAI,CAAC07P,EAAS7/P,KAClB,EAAI4/P,EAAWj0H,SAASk0H,EAAS,CACtCrnQ,OAAQgd,EAAOipE,QAAQz+E,GAAO+2M,gB,0BCpBtC,IAAIh0J,EAAQ,EAAQ,MAChB8sL,EAAW,WACE,IAAIlrJ,OAAO,YAA1B,IACIm7K,EAAS,GACTC,GACa,IAAIp7K,OAAO,YACnB,SAASkrJ,EAASnxO,EAAMshQ,EAAUC,EAAYC,EAAoBC,GAEvE,IAAIC,EAAU,KACVC,EAAS,EAEb,QADiBjmQ,IAAb+lQ,IAAwBA,EAAWzhQ,GAClCA,GAAwB,iBAATA,IAAsB/F,MAAMC,QAAQ8F,GAAQ,CAG9D,IAAK,IAAI4hQ,KAAQ5hQ,EAEf,IAD+BmxO,EAAS0wB,OAAO7zB,WAAW9uO,eAAe0iQ,GACtD,CAEjB,IAAInmQ,EAAM,CACR68P,QAAS,uBACTgJ,UAAWA,GAAY,IAAM,GAC7BQ,WAAY,yBACZ92P,OAAQ,CACN+2P,mBAAoB,GAAKH,GAE3B7+O,QAAS,yCAEK,OAAZ2+O,EAAkBA,EAAU,CAACjmQ,GAC5BimQ,EAAQljQ,KAAK/C,GAClBkmQ,SAGiBjmQ,IAAjBsE,EAAK6+P,UAEFmD,EAAQhiQ,EAAK6+P,SAAUyC,GAAY,IAAM,WAAYthQ,EAAM,UAAWyhQ,KAGzEE,GAFsBD,EAAN,OAAZA,EAA4BM,EAAQL,OACzBD,EAAQ/7P,OAAOq8P,EAAQL,SACrB7nQ,cAIA4B,IAAjBsE,EAAK8+P,UAEFsC,EAAO,GAAGphQ,EAAK8+P,SAAUwC,GAAY,IAAM,WAAYthQ,EAAM,UAAWyhQ,KAG3EE,GAFsBD,EAAN,OAAZA,EAA4BN,EAAO,GAAGO,OAC3BD,EAAQ/7P,OAAOy7P,EAAO,GAAGO,SACvB7nQ,cAIA4B,IAAjBsE,EAAK6sJ,UAEFu0G,EAAO,GAAGphQ,EAAK6sJ,SAAUy0G,GAAY,IAAM,WAAYthQ,EAAM,UAAWyhQ,KAG3EE,GAFsBD,EAAN,OAAZA,EAA4BN,EAAO,GAAGO,OAC3BD,EAAQ/7P,OAAOy7P,EAAO,GAAGO,SACvB7nQ,cAIC4B,IAAlBsE,EAAK8sJ,WAEFs0G,EAAO,GAAGphQ,EAAK8sJ,UAAWw0G,GAAY,IAAM,YAAathQ,EAAM,WAAYyhQ,KAG9EE,GAFsBD,EAAN,OAAZA,EAA4BN,EAAO,GAAGO,OAC3BD,EAAQ/7P,OAAOy7P,EAAO,GAAGO,SACvB7nQ,cAIG4B,IAApBsE,EAAKm/P,aAEFiC,EAAO,GAAGphQ,EAAKm/P,YAAamC,GAAY,IAAM,cAAethQ,EAAM,aAAcyhQ,KAGpFE,GAFsBD,EAAN,OAAZA,EAA4BN,EAAO,GAAGO,OAC3BD,EAAQ/7P,OAAOy7P,EAAO,GAAGO,SACvB7nQ,cAIG4B,IAApBsE,EAAKo/P,aAEFgC,EAAO,GAAGphQ,EAAKo/P,YAAakC,GAAY,IAAM,cAAethQ,EAAM,aAAcyhQ,KAGpFE,GAFsBD,EAAN,OAAZA,EAA4BN,EAAO,GAAGO,OAC3BD,EAAQ/7P,OAAOy7P,EAAO,GAAGO,SACvB7nQ,cAIG4B,IAApBsE,EAAK+sJ,aAEFq0G,EAAO,GAAGphQ,EAAK+sJ,YAAau0G,GAAY,IAAM,cAAethQ,EAAM,aAAcyhQ,KAGpFE,GAFsBD,EAAN,OAAZA,EAA4BN,EAAO,GAAGO,OAC3BD,EAAQ/7P,OAAOy7P,EAAO,GAAGO,SACvB7nQ,cAII4B,IAArBsE,EAAKq/P,cAEF+B,EAAO,GAAGphQ,EAAKq/P,aAAciC,GAAY,IAAM,eAAgBthQ,EAAM,cAAeyhQ,KAGvFE,GAFsBD,EAAN,OAAZA,EAA4BN,EAAO,GAAGO,OAC3BD,EAAQ/7P,OAAOy7P,EAAO,GAAGO,SACvB7nQ,cAIC4B,IAAlBsE,EAAKs/P,WAEF8B,EAAO,GAAGphQ,EAAKs/P,UAAWgC,GAAY,IAAM,YAAathQ,EAAM,WAAYyhQ,KAG9EE,GAFsBD,EAAN,OAAZA,EAA4BN,EAAO,GAAGO,OAC3BD,EAAQ/7P,OAAOy7P,EAAO,GAAGO,SACvB7nQ,cAIE4B,IAAnBsE,EAAKw/P,YAEF4B,EAAO,GAAGphQ,EAAKw/P,WAAY8B,GAAY,IAAM,aAActhQ,EAAM,YAAayhQ,KAGjFE,GAFsBD,EAAN,OAAZA,EAA4BN,EAAO,GAAGO,OAC3BD,EAAQ/7P,OAAOy7P,EAAO,GAAGO,SACvB7nQ,cAIC4B,IAAlBsE,EAAKu/P,WAEF6B,EAAO,GAAGphQ,EAAKu/P,UAAW+B,GAAY,IAAM,YAAathQ,EAAM,WAAYyhQ,KAG9EE,GAFsBD,EAAN,OAAZA,EAA4BN,EAAO,GAAGO,OAC3BD,EAAQ/7P,OAAOy7P,EAAO,GAAGO,SACvB7nQ,cAIC4B,IAAlBsE,EAAK++P,WAEFqC,EAAO,GAAGphQ,EAAK++P,UAAWuC,GAAY,IAAM,YAAathQ,EAAM,WAAYyhQ,KAG9EE,GAFsBD,EAAN,OAAZA,EAA4BN,EAAO,GAAGO,OAC3BD,EAAQ/7P,OAAOy7P,EAAO,GAAGO,SACvB7nQ,cAIC4B,IAAlBsE,EAAKi/P,WAEFmC,EAAO,GAAGphQ,EAAKi/P,UAAWqC,GAAY,IAAM,YAAathQ,EAAM,WAAYyhQ,KAG9EE,GAFsBD,EAAN,OAAZA,EAA4BN,EAAO,GAAGO,OAC3BD,EAAQ/7P,OAAOy7P,EAAO,GAAGO,SACvB7nQ,cAIE4B,IAAnBsE,EAAKk/P,YAEFkC,EAAO,GAAGphQ,EAAKk/P,WAAYoC,GAAY,IAAM,aAActhQ,EAAM,YAAayhQ,KAGjFE,GAFsBD,EAAN,OAAZA,EAA4BN,EAAO,GAAGO,OAC3BD,EAAQ/7P,OAAOy7P,EAAO,GAAGO,SACvB7nQ,cAIC4B,IAAlBsE,EAAKg/P,WAEFoC,EAAO,GAAGphQ,EAAKg/P,UAAWsC,GAAY,IAAM,YAAathQ,EAAM,WAAYyhQ,KAG9EE,GAFsBD,EAAN,OAAZA,EAA4BN,EAAO,GAAGO,OAC3BD,EAAQ/7P,OAAOy7P,EAAO,GAAGO,SACvB7nQ,cAKjB2B,EAAM,CACR68P,QAAS,OACTgJ,UAAWA,GAAY,IAAM,GAC7BQ,WAAY,SACZ92P,OAAQ,CACN8T,KAAM,UAERiE,QAAS,oBAEK,OAAZ2+O,EAAkBA,EAAU,CAACjmQ,GAC5BimQ,EAAQljQ,KAAK/C,GAClBkmQ,IAGF,OADAxwB,EAASwwB,OAASD,EACA,IAAXC,IAGXN,EAAQQ,OAAS,CACf,KAAQ,SACR,WAAc,CACZ,QAAW,CACT,KAAQ,wBAEV,QAAW,CACT,KAAQ,wBAEV,QAAW,CACT,KAAQ,wBAEV,SAAY,CACV,KAAQ,wBAEV,WAAc,CACZ,KAAQ,wBAEV,WAAc,CACZ,KAAQ,wBAEV,WAAc,CACZ,KAAQ,wBAEV,YAAe,CACb,KAAQ,wBAEV,SAAY,CACV,KAAQ,wBAEV,UAAa,CACX,KAAQ,wBAEV,SAAY,CACV,KAAQ,wBAEV,SAAY,CACV,KAAQ,wBAEV,SAAY,CACV,KAAQ,wBAEV,UAAa,CACX,KAAQ,wBAEV,SAAY,CACV,KAAQ,yBAGZ,sBAAwB,GAE1BR,EAAQM,OAAS,KACjBP,EAAO,GAAKC,EACZ,IAAIW,GACa,IAAI/7K,OAAO,YACnB,SAASkrJ,EAASnxO,EAAMshQ,EAAUC,EAAYC,EAAoBC,GAEvE,IAAIC,EAAU,KACVC,EAAS,EACb,GAAoB,iBAAT3hQ,EAAmB,CAC5B,IAAIvE,EAAM,CACR68P,QAAS,OACTgJ,UAAWA,GAAY,IAAM,GAC7BQ,WAAY,SACZ92P,OAAQ,CACN8T,KAAM,UAERiE,QAAS,oBAEK,OAAZ2+O,EAAkBA,EAAU,CAACjmQ,GAC5BimQ,EAAQljQ,KAAK/C,GAClBkmQ,IAGF,OADAxwB,EAASwwB,OAASD,EACA,IAAXC,IAGXK,EAAQH,OAAS,CACf,KAAQ,UAEVG,EAAQL,OAAS,KACjBP,EAAO,GAAKY,EACZ,IACMC,EADFC,GACED,EAAW,IAAIh8K,OAAO,YACnB,SAASkrJ,EAASnxO,EAAMshQ,EAAUC,EAAYC,EAAoBC,GAEvE,IAAIC,EAAU,KACVC,EAAS,EAEb,QADiBjmQ,IAAb+lQ,IAAwBA,EAAWzhQ,GAClCA,GAAwB,iBAATA,IAAsB/F,MAAMC,QAAQ8F,GAAQ,CAG9D,IAAK,IAAI4hQ,KAAQ5hQ,EAEf,IAD+BiiQ,EAASriQ,KAAKgiQ,GAC1B,CAEjB,IAAInmQ,EAAM,CACR68P,QAAS,uBACTgJ,UAAWA,GAAY,IAAM,GAC7BQ,WAAY,yBACZ92P,OAAQ,CACN+2P,mBAAoB,GAAKH,GAE3B7+O,QAAS,yCAEK,OAAZ2+O,EAAkBA,EAAU,CAACjmQ,GAC5BimQ,EAAQljQ,KAAK/C,GAClBkmQ,IAGJ,IAAK,IAAIC,KAAQ5hQ,EACXiiQ,EAASriQ,KAAKgiQ,KAEXO,EAAQniQ,EAAK4hQ,IAAQN,GAAY,IAAM,KAAQM,EAAO,KAAO5hQ,EAAM4hQ,EAAMH,KAG5EE,GAFsBD,EAAN,OAAZA,EAA4BS,EAAQR,OACzBD,EAAQ/7P,OAAOw8P,EAAQR,SACrB7nQ,cAMnB2B,EAAM,CACR68P,QAAS,OACTgJ,UAAWA,GAAY,IAAM,GAC7BQ,WAAY,SACZ92P,OAAQ,CACN8T,KAAM,UAERiE,QAAS,oBAEK,OAAZ2+O,EAAkBA,EAAU,CAACjmQ,GAC5BimQ,EAAQljQ,KAAK/C,GAClBkmQ,IAGF,OADAxwB,EAASwwB,OAASD,EACA,IAAXC,IAGXO,EAAQL,OAAS,CACf,KAAQ,SACR,kBAAqB,CACnB,WAAY,CACV,KAAQ,yBAGZ,sBAAwB,GAE1BK,EAAQP,OAAS,KACjBP,EAAO,GAAKc,EACZ,IAAIC,GACa,IAAIl8K,OAAO,YACnB,SAASkrJ,EAASnxO,EAAMshQ,EAAUC,EAAYC,EAAoBC,GAEvE,IAAIC,EAAU,KACVC,EAAS,EACb,GAAK3hQ,GAAwB,iBAATA,IAAsB/F,MAAMC,QAAQ8F,GAAQ,CAC9D,IACIoiQ,GAAS,EACb,IAAK,IAAIR,KAAQ5hQ,EAEf,GADuC,aAAR4hQ,GAA+B,SAARA,GAA2B,YAARA,GAA8B,YAARA,GAA8B,eAARA,GAAiC,gBAARA,EAC3H,CACjBQ,GAAS,EACT,IAAI3mQ,EAAM,CACR68P,QAAS,uBACTgJ,UAAWA,GAAY,IAAM,GAC7BQ,WAAY,yBACZ92P,OAAQ,CACN+2P,mBAAoB,GAAKH,GAE3B7+O,QAAS,yCAEK,OAAZ2+O,EAAkBA,EAAU,CAACjmQ,GAC5BimQ,EAAQljQ,KAAK/C,GAClBkmQ,IAGJ,IAAIU,EAAQriQ,EAAK27P,UACjB,QAAcjgQ,IAAV2mQ,EAAqB,CACvB,IAAIC,EAASX,EACQ,iBAAVU,IACL5mQ,EAAM,CACR68P,QAAS,OACTgJ,UAAWA,GAAY,IAAM,aAC7BQ,WAAY,8BACZ92P,OAAQ,CACN8T,KAAM,UAERiE,QAAS,oBAEK,OAAZ2+O,EAAkBA,EAAU,CAACjmQ,GAC5BimQ,EAAQljQ,KAAK/C,GAClBkmQ,KAEF,IAAIY,EAAUpxB,EAAS0wB,OAAO7zB,WAAW2tB,UAAU6G,KAEnDJ,GAAS,EACT,IAAK,IAAIK,EAAK,EAAGA,EAAKF,EAAQzoQ,OAAQ2oQ,IACpC,GAAIp+M,EAAMg+M,EAAOE,EAAQE,IAAM,CAC7BL,GAAS,EACT,MACKA,IACH3mQ,EAAM,CACR68P,QAAS,OACTgJ,UAAWA,GAAY,IAAM,aAC7BQ,WAAY,8BACZ92P,OAAQ,CACN03P,cAAeH,GAEjBx/O,QAAS,gDAEK,OAAZ2+O,EAAkBA,EAAU,CAACjmQ,GAC5BimQ,EAAQljQ,KAAK/C,GAClBkmQ,KAEES,EAAST,IAAWW,OAEP5mQ,IAAfsE,EAAKkE,QACHo+P,EAASX,EACa,iBAAf3hQ,EAAKkE,QACVzI,EAAM,CACR68P,QAAS,OACTgJ,UAAWA,GAAY,IAAM,SAC7BQ,WAAY,0BACZ92P,OAAQ,CACN8T,KAAM,UAERiE,QAAS,oBAEK,OAAZ2+O,EAAkBA,EAAU,CAACjmQ,GAC5BimQ,EAAQljQ,KAAK/C,GAClBkmQ,KAEES,EAAST,IAAWW,QAEJ5mQ,IAAlBsE,EAAKg9P,WACHsF,EAASX,EACgB,kBAAlB3hQ,EAAKg9P,WACVvhQ,EAAM,CACR68P,QAAS,OACTgJ,UAAWA,GAAY,IAAM,YAC7BQ,WAAY,6BACZ92P,OAAQ,CACN8T,KAAM,WAERiE,QAAS,qBAEK,OAAZ2+O,EAAkBA,EAAU,CAACjmQ,GAC5BimQ,EAAQljQ,KAAK/C,GAClBkmQ,KAEES,EAAST,IAAWW,QAEJ5mQ,IAAlBsE,EAAKq4M,WACHiqD,EAASX,EACgB,iBAAlB3hQ,EAAKq4M,WACV58M,EAAM,CACR68P,QAAS,OACTgJ,UAAWA,GAAY,IAAM,YAC7BQ,WAAY,6BACZ92P,OAAQ,CACN8T,KAAM,UAERiE,QAAS,oBAEK,OAAZ2+O,EAAkBA,EAAU,CAACjmQ,GAC5BimQ,EAAQljQ,KAAK/C,GAClBkmQ,KAEES,EAAST,IAAWW,QAED5mQ,IAArBsE,EAAKi+P,cACHqE,EAASX,EACmB,iBAArB3hQ,EAAKi+P,cACVxiQ,EAAM,CACR68P,QAAS,OACTgJ,UAAWA,GAAY,IAAM,eAC7BQ,WAAY,gCACZ92P,OAAQ,CACN8T,KAAM,UAERiE,QAAS,oBAEK,OAAZ2+O,EAAkBA,EAAU,CAACjmQ,GAC5BimQ,EAAQljQ,KAAK/C,GAClBkmQ,KAEES,EAAST,IAAWW,QAEA5mQ,IAAtBsE,EAAKk+P,eACHoE,EAASX,EACoB,iBAAtB3hQ,EAAKk+P,eACVziQ,EAAM,CACR68P,QAAS,OACTgJ,UAAWA,GAAY,IAAM,gBAC7BQ,WAAY,iCACZ92P,OAAQ,CACN8T,KAAM,UAERiE,QAAS,oBAEK,OAAZ2+O,EAAkBA,EAAU,CAACjmQ,GAC5BimQ,EAAQljQ,KAAK/C,GAClBkmQ,KAEES,EAAST,IAAWW,QAGtB7mQ,EAAM,CACR68P,QAAS,OACTgJ,UAAWA,GAAY,IAAM,GAC7BQ,WAAY,SACZ92P,OAAQ,CACN8T,KAAM,UAERiE,QAAS,oBAEK,OAAZ2+O,EAAkBA,EAAU,CAACjmQ,GAC5BimQ,EAAQljQ,KAAK/C,GAClBkmQ,IAGF,OADAxwB,EAASwwB,OAASD,EACA,IAAXC,IA8BX,OA3BAQ,EAAQN,OAAS,CACf,KAAQ,SACR,WAAc,CACZ,UAAa,CACX,KAAQ,SACR,KAAQ,CAAC,OAAQ,QAAS,WAE5B,MAAS,CACP,KAAQ,UAEV,SAAY,CACV,KAAQ,WAEV,SAAY,CACV,KAAQ,UAEV,YAAe,CACb,KAAQ,UAEV,aAAgB,CACd,KAAQ,WAGZ,sBAAwB,GAE1BM,EAAQR,OAAS,KACjBP,EAAO,GAAKe,EACL,SAAShxB,EAASnxO,EAAMshQ,EAAUC,EAAYC,EAAoBC,GAEvE,IAAIC,EAAU,KACVC,EAAS,EAEb,QADiBjmQ,IAAb+lQ,IAAwBA,EAAWzhQ,GAClCA,GAAwB,iBAATA,IAAsB/F,MAAMC,QAAQ8F,GAAQ,CAG9D,IAAK,IAAI4hQ,KAAQ5hQ,EAEf,GADuC,UAAR4hQ,GAA4B,WAARA,GAA6B,iBAARA,GAAmC,sBAARA,EAChF,CAEjB,IAAInmQ,EAAM,CACR68P,QAAS,uBACTgJ,UAAWA,GAAY,IAAM,GAC7BQ,WAAY,yBACZ92P,OAAQ,CACN+2P,mBAAoB,GAAKH,GAE3B7+O,QAAS,yCAEK,OAAZ2+O,EAAkBA,EAAU,CAACjmQ,GAC5BimQ,EAAQljQ,KAAK/C,GAClBkmQ,IA8BJ,QA3BoBjmQ,IAAhBsE,EAAKs+P,SAEF+C,EAAQrhQ,EAAKs+P,QAASgD,GAAY,IAAM,UAAWthQ,EAAM,SAAUyhQ,KAGtEE,GAFsBD,EAAN,OAAZA,EAA4BL,EAAQM,OACzBD,EAAQ/7P,OAAO07P,EAAQM,SACrB7nQ,cAIA4B,IAAjBsE,EAAK+/E,UAEFmiL,EAAQliQ,EAAK+/E,SAAUuhL,GAAY,IAAM,WAAYthQ,EAAM,UAAWyhQ,KAGzEE,GAFsBD,EAAN,OAAZA,EAA4BQ,EAAQP,OACzBD,EAAQ/7P,OAAOu8P,EAAQP,SACrB7nQ,cAIM4B,IAAvBsE,EAAKsgQ,gBAEFc,EAAO,GAAGphQ,EAAKsgQ,eAAgBgB,GAAY,IAAM,iBAAkBthQ,EAAM,gBAAiByhQ,KAG7FE,GAFsBD,EAAN,OAAZA,EAA4BN,EAAO,GAAGO,OAC3BD,EAAQ/7P,OAAOy7P,EAAO,GAAGO,SACvB7nQ,cAIW4B,IAA5BsE,EAAKy/P,mBAAkC,CACzC,IACIkD,EAAUhB,EAGd,GAD2C,mBAA3B3hQ,EAAKy/P,mBAEnB,GAAIkD,GAAWhB,EACTlmQ,EAAM,CACR68P,QAAS,SACTgJ,UAAWA,GAAY,IAAM,sBAC7BQ,WAAY,yCACZ92P,OAAQ,CACNstP,QAAS,UAEXv1O,QAAS,2CAEK,OAAZ2+O,EAAkBA,EAAU,CAACjmQ,GAC5BimQ,EAAQljQ,KAAK/C,GAClBkmQ,SAEA,IAAK,IAAIc,EAAKE,EAASF,EAAKd,EAAQc,IAAM,CACxC,IAAIG,EAAWlB,EAAQe,QACG/mQ,IAAtBknQ,EAAStB,WAAwBsB,EAAStB,UAAYA,GAAY,IAAM,4BAChD5lQ,IAAxBknQ,EAASd,aACXc,EAASd,WAAa,iDAQ5BrmQ,EAAM,CACR68P,QAAS,OACTgJ,UAAWA,GAAY,IAAM,GAC7BQ,WAAY,SACZ92P,OAAQ,CACN8T,KAAM,UAERiE,QAAS,oBAEK,OAAZ2+O,EAAkBA,EAAU,CAACjmQ,GAC5BimQ,EAAQljQ,KAAK/C,GAClBkmQ,IAGF,OADAxwB,EAASwwB,OAASD,EACA,IAAXC,GA3nBI,GA8nBfxwB,EAAS0wB,OAAS,CAChB,IAAO,cACP,QAAW,0CACX,KAAQ,SACR,WAAc,CACZ,OAAU,CACR,KAAQ,yBAEV,QAAW,CACT,KAAQ,yBAEV,cAAiB,CACf,KAAQ,wBAEV,mBAAsB,CACpB,OAAU,aAGd,sBAAwB,EACxB,YAAe,CACb,QAAW,CACT,KAAQ,SACR,kBAAqB,CACnB,WAAY,CACV,KAAQ,yBAGZ,sBAAwB,GAE1B,OAAU,CACR,KAAQ,SACR,WAAc,CACZ,UAAa,CACX,KAAQ,SACR,KAAQ,CAAC,OAAQ,QAAS,WAE5B,MAAS,CACP,KAAQ,UAEV,SAAY,CACV,KAAQ,WAEV,SAAY,CACV,KAAQ,UAEV,YAAe,CACb,KAAQ,UAEV,aAAgB,CACd,KAAQ,WAGZ,sBAAwB,GAE1B,QAAW,CACT,KAAQ,SACR,WAAc,CACZ,QAAW,CACT,KAAQ,wBAEV,QAAW,CACT,KAAQ,wBAEV,QAAW,CACT,KAAQ,wBAEV,SAAY,CACV,KAAQ,wBAEV,WAAc,CACZ,KAAQ,wBAEV,WAAc,CACZ,KAAQ,wBAEV,WAAc,CACZ,KAAQ,wBAEV,YAAe,CACb,KAAQ,wBAEV,SAAY,CACV,KAAQ,wBAEV,UAAa,CACX,KAAQ,wBAEV,SAAY,CACV,KAAQ,wBAEV,SAAY,CACV,KAAQ,wBAEV,SAAY,CACV,KAAQ,wBAEV,UAAa,CACX,KAAQ,wBAEV,SAAY,CACV,KAAQ,yBAGZ,sBAAwB,GAE1B,OAAU,CACR,KAAQ,YAId1wB,EAASwwB,OAAS,KAClBjoQ,EAAOC,QAAUw3O,G,0BC7uBjB90O,OAAOC,eAAe3C,EAAS,aAAc,CAC3CoB,OAAO,IAETpB,EAAQszI,aAAU,EAyFlBtzI,EAAQszI,QA3EkBntD,IACxB,IAAK7lF,MAAMC,QAAQ4lF,GACjB,MAAM,IAAIjkF,UAAU,gCAGtB,GAAoB,IAAhBikF,EAAKhmF,OACP,MAAM,IAAIoH,MAAM,uCAGlB,GAAuB,IAAnB4+E,EAAK,GAAGhmF,OACV,MAAM,IAAIoH,MAAM,0CAGlB,MAAM2hQ,EAAe/iL,EAAK,GAAGhmF,OAC7B,IAAIgpQ,GAA4B,EAC5BC,GAAoB,EACpBC,OAAiBtnQ,EAErB,IACE,IAAK,IAAyCunQ,EAArCC,EAAYpjL,EAAKhiF,OAAOC,cAAsB+kQ,GAA6BG,EAAQC,EAAU3kQ,QAAQtD,MAAO6nQ,GAA4B,EAAM,CACrJ,MAAMtnJ,EAAQynJ,EAAMloQ,MAEpB,IAAKd,MAAMC,QAAQshH,GACjB,MAAM,IAAI3/G,UAAU,oCAGtB,GAAI2/G,EAAM1hH,SAAW+oQ,EACnB,MAAM,IAAI3hQ,MAAM,iDAGlB,IAAIiiQ,GAA6B,EAC7BC,GAAqB,EACrBC,OAAkB3nQ,EAEtB,IACE,IAAK,IAA2C4nQ,EAAvCC,EAAa/nJ,EAAM19G,OAAOC,cAAuBolQ,GAA8BG,EAASC,EAAWhlQ,QAAQtD,MAAOkoQ,GAA6B,EAAM,CAC5J,MAAM7nJ,EAAOgoJ,EAAOvoQ,MAGpB,GAAI,4CAA4C6E,KAAK07G,GACnD,MAAM,IAAIp6G,MAAM,oDAGpB,MAAOzF,GACP2nQ,GAAqB,EACrBC,EAAkB5nQ,EAClB,QACA,IACO0nQ,GAAmD,MAArBI,EAAWC,QAC5CD,EAAWC,SAEb,QACA,GAAIJ,EACF,MAAMC,KAKd,MAAO5nQ,GACPsnQ,GAAoB,EACpBC,EAAiBvnQ,EACjB,QACA,IACOqnQ,GAAiD,MAApBI,EAAUM,QAC1CN,EAAUM,SAEZ,QACA,GAAIT,EACF,MAAMC,M,4BCrFd3mQ,OAAOC,eAAe3C,EAAS,aAAc,CAC3CoB,OAAO,IAETpB,EAAQszI,aAAU,EAElB,IAAIw2H,EAAcrI,EAAuB,EAAQ,OAE7CsI,EAAYtI,EAAuB,EAAQ,OAE/C,SAASA,EAAuB97P,GAAO,OAAOA,GAAOA,EAAIi8P,WAAaj8P,EAAM,CAAE2tI,QAAS3tI,GAmCvF3F,EAAQszI,QAtBS,CAAC02H,EAAWtH,EAAaC,KAExC,MAAMsH,EAAYD,EAAUh5P,MAAM,MAElC,IAAK,IAAIk5P,EAAS,EAAGA,EAASD,EAAU9pQ,QAAS,CAC/C,IAAIgqQ,EAGFA,EADExH,GACW,EAAIoH,EAAUz2H,SAAS22H,EAAUC,GAASxH,IAE1C,EAAIoH,EAAYx2H,SAAS22H,EAAUC,GAASxH,GAI3DuH,EAAUn6N,OAAOo6N,EAAQ,KAAMC,GAC/BD,GAAUC,EAAWhqQ,OAGvB,OAAO8pQ,I,4BCxCTvnQ,OAAOC,eAAe3C,EAAS,aAAc,CAC3CoB,OAAO,IAETpB,EAAQszI,aAAU,EAElB,IAAI82H,EAAa3I,EAAuB,EAAQ,OAE5CE,EAAeF,EAAuB,EAAQ,OAElD,SAASA,EAAuB97P,GAAO,OAAOA,GAAOA,EAAIi8P,WAAaj8P,EAAM,CAAE2tI,QAAS3tI,GA2BvF3F,EAAQszI,QAdW,CAACwuH,EAASj4P,KAC3B,IAAIwgQ,EACJA,EAAevI,EACf,MAAMwI,EAAS,GAEf,GACEA,EAAOzlQ,MAAK,EAAIulQ,EAAW92H,SAAS+2H,EAAc,EAAGxgQ,IACrDwgQ,GAAe,EAAID,EAAW92H,SAAS+2H,EAAcxgQ,GAAMgtB,cACpD,EAAI8qO,EAAaruH,SAAS+2H,IAEnC,OAAOC,I,4BChCT5nQ,OAAOC,eAAe3C,EAAS,aAAc,CAC3CoB,OAAO,IAETpB,EAAQszI,aAAU,EAElB,IAAI82H,EAAa3I,EAAuB,EAAQ,OAE5CE,EAAeF,EAAuB,EAAQ,OAElD,SAASA,EAAuB97P,GAAO,OAAOA,GAAOA,EAAIi8P,WAAaj8P,EAAM,CAAE2tI,QAAS3tI,GAkCvF3F,EAAQszI,QA3BS,CAAClzH,EAAOvW,KACvB,IAAIi4P,EACJA,EAAU1hP,EACV,MAAMkqP,EAAS,GAETv5C,EAAK,IAAIzkI,OAAO,SAAWziF,EAAO,qBAAuBA,EAAO,GAAK,0BAE3E,EAAG,CACD,IAAI0vI,EACJA,EAAQuoH,EAAQ54N,MAAM6nL,GAElBx3E,GACFA,EAAQA,EAAM,GACduoH,GAAU,EAAIsI,EAAW92H,SAASwuH,GAAS,EAAIH,EAAaruH,SAASiG,IACrEA,EAAQA,EAAM1iH,SAEd0iH,GAAQ,EAAI6wH,EAAW92H,SAASwuH,EAAS,EAAGj4P,GAC5Ci4P,GAAU,EAAIsI,EAAW92H,SAASwuH,EAASj4P,IAG7CygQ,EAAOzlQ,KAAK00I,UACL,EAAIooH,EAAaruH,SAASwuH,IAEnC,OAAOwI,I,sBCvCTvqQ,EAAOC,QAAU24G,IAChBA,EAAUj2G,OAAOkO,OAAO,CACvB25P,WAAW,GACT5xJ,GAEH,MAAMsX,EAAU,CACf,8FACA,4DACCv+G,KAAK,KAEP,OAAO,IAAI46E,OAAO2jC,EAAStX,EAAQ4xJ,eAAYxoQ,EAAY,O,sBCV5DhC,EAAOC,QAAU,WAEf,MAAO,2oO,4BCHT,MAAMwqQ,EAAY,EAAQ,MACpB5Q,EAAuB,EAAQ,MAC/B6Q,EAAa,EAAQ,KAAR,GAEnB1qQ,EAAOC,QAAUogB,IAGhB,GAAqB,iBAFrBA,EAAQA,EAAM9O,QAAQm5P,EAAY,QAEgB,IAAjBrqP,EAAMjgB,OACtC,OAAO,EAGRigB,EAAQoqP,EAAUpqP,GAElB,IAAI7V,EAAQ,EAEZ,IAAK,IAAInK,EAAI,EAAGA,EAAIggB,EAAMjgB,OAAQC,IAAK,CACtC,MAAM65P,EAAO75O,EAAMk6O,YAAYl6P,GAG3B65P,GAAQ,IAASA,GAAQ,KAAQA,GAAQ,KAKzCA,GAAQ,KAASA,GAAQ,MAKzBA,EAAO,OACV75P,IAGDmK,GAASqvP,EAAqBK,GAAQ,EAAI,GAG3C,OAAO1vP,I,4BCpCR,MAAMmgQ,EAAY,EAAQ,MAEpBF,EAAY/nC,GAA4B,iBAAXA,EAAsBA,EAAOnxN,QAAQo5P,IAAa,IAAMjoC,EAE3F1iO,EAAOC,QAAUwqQ,EACjBzqQ,EAAOC,QAAQszI,QAAUk3H,G,gCCNzB,aAYsB,0BAAP,EAUP,WAEN,SAASxiO,IACP,OAAO,EAGT,SAAS2iO,IACP,OAAO,EAGT,SAASC,KA60CT,OAzyCA,SAAS5mQ,IAEP,IAAI6mQ,EAAS,CACX,CAAE7kQ,KAAM,SAAaC,KAAM,SAAUkC,GAAK,MAAoB,iBAANA,IACxD,CAAEnC,KAAM,SAAaC,KAAM,SAAUkC,GAAK,MAAoB,iBAANA,IACxD,CAAEnC,KAAM,UAAaC,KAAM,SAAUkC,GAAK,MAAoB,kBAANA,IACxD,CAAEnC,KAAM,WAAaC,KAAM,SAAUkC,GAAK,MAAoB,mBAANA,IACxD,CAAEnC,KAAM,QAAaC,KAAM3F,MAAMC,SACjC,CAAEyF,KAAM,OAAaC,KAAM,SAAUkC,GAAK,OAAOA,aAAaivB,OAC9D,CAAEpxB,KAAM,SAAaC,KAAM,SAAUkC,GAAK,OAAOA,aAAamkF,SAC9D,CAAEtmF,KAAM,SAAaC,KAAM,SAAUkC,GACnC,MAAoB,iBAANA,GAAwB,OAANA,GAAcA,EAAElE,cAAgBvB,SAElE,CAAEsD,KAAM,OAAaC,KAAM,SAAUkC,GAAK,OAAa,OAANA,IACjD,CAAEnC,KAAM,YAAaC,KAAM,SAAUkC,GAAK,YAAapG,IAANoG,KAG/C2iQ,EAAU,CACZ9kQ,KAAM,MACNC,KAAM+hC,GAIJ+iO,EAAU,GAGVC,EAAe,GAGfpwB,EAAQ,CACVjM,MAAOk8B,EACPhwB,YAAamwB,EACbC,OAAQF,GASV,SAASG,EAAgBC,GACvB,IAAIpiO,EAAQqiO,EAAYxwB,EAAMjM,OAAO,SAAU5lM,GAC7C,OAAOA,EAAM/iC,OAASmlQ,KAGxB,GAAIpiO,EACF,OAAOA,EAGT,GAAiB,QAAboiO,EACF,OAAOL,EAGT,IAAIO,EAAOD,EAAYxwB,EAAMjM,OAAO,SAAU5lM,GAC5C,OAAOA,EAAM/iC,KAAKkL,gBAAkBi6P,EAASj6P,iBAG/C,MAAM,IAAIhP,UAAU,iBAAmBipQ,EAAW,KAC7CE,EAAQ,mBAAqBA,EAAKrlQ,KAAO,KAAQ,KAQxD,SAASslQ,EAAcnmP,GACrB,OAAIA,IAAS2lP,EACJ,IAGFlwB,EAAMjM,MAAM57M,QAAQ5N,GAS7B,SAASomP,EAAanqQ,GACpB,IAAI2nC,EAAQqiO,EAAYxwB,EAAMjM,OAAO,SAAU5lM,GAC7C,OAAOA,EAAM9iC,KAAK7E,MAGpB,GAAI2nC,EACF,OAAOA,EAAM/iC,KAGf,MAAM,IAAI9D,UAAU,kCAAoCd,GA+E1D,SAASoqQ,EAAiBn6P,GACxB,OAAOA,EACFvF,KAAI,SAAU82C,GACb,IAAI6oN,EAAY7oN,EAAM+rL,MAAM7iO,IAAI4/P,GAEhC,OAAQ9oN,EAAM+oN,UAAY,MAAQ,IAAMF,EAAU/5P,KAAK,QAExDA,KAAK,KASZ,SAASk6P,EAAYhpN,EAAOi4L,GAC1B,IAAI8wB,EAAqC,IAAzB/oN,EAAM7vB,QAAQ,OAO1B04O,GANUE,EAEP/oN,EAAMziD,OAAS,EACZyiD,EAAM78C,MAAM,GACZ,MAHJ68C,GAKgB5xC,MAAM,KAAKlF,IAAI+qB,GAChCrJ,OAAOq+O,GACPr+O,OAAOs+O,GAERC,EA+cN,SAA2BlxB,EAAa4wB,GACtC,IAAIO,EAAU,GAUd,OARAnxB,EAAYntO,SAAQ,SAAUkzP,IACgB,IAAxC6K,EAAU14O,QAAQ6tO,EAAWv8P,QACS,IAAtConQ,EAAU14O,QAAQ6tO,EAAW9lB,KAC5BkxB,EAAQpL,EAAWv8P,QACtB2nQ,EAAQpL,EAAWv8P,MAAQu8P,MAIxBl+P,OAAO8lB,KAAKwjP,GAASlgQ,KAAI,SAAUzH,GACxC,OAAO2nQ,EAAQ3nQ,MA3dS4nQ,CAAkBpxB,EAAa4wB,GAErDS,EAAaT,EAAU3/P,KAAI,SAAUq/P,GACvC,IAAIhmP,EAAO+lP,EAAeC,GAE1B,MAAO,CACLnlQ,KAAMmlQ,EACNgB,UAAWb,EAAcnmP,GACzBlf,KAAMkf,EAAKlf,KACX26P,WAAY,KACZwL,iBAAkB,MAIlBC,EAAmBN,EAAoBjgQ,KAAI,SAAU80P,GACvD,IAAIz7O,EAAO+lP,EAAetK,EAAWv8P,MAErC,MAAO,CACL2B,KAAM46P,EAAWv8P,KACjB8nQ,UAAWb,EAAcnmP,GACzBlf,KAAMkf,EAAKlf,KACX26P,WAAYA,EACZwL,gBAAiBvxB,EAAY9nN,QAAQ6tO,OAIzC,MAAO,CACLjyB,MAAOu9B,EAAWlgQ,OAAOqgQ,GACzBV,UAAWA,GAgDf,SAASW,EAAaj7P,GACpB,IAAIuxC,EAAQi2L,EAAKxnO,GACjB,QAAOuxC,GAAQA,EAAM+oN,UASvB,SAASY,EAAe3pN,GACtB,OAAOA,EAAM+rL,MAAMlpN,MAAK,SAAUN,GAChC,OAA0B,MAAnBA,EAAKy7O,cAUhB,SAAS4L,EAAY5pN,GACnB,GAAKA,GAAgC,IAAvBA,EAAM+rL,MAAMxuO,OAIrB,IAA2B,IAAvByiD,EAAM+rL,MAAMxuO,OACnB,OAAO+qQ,EAAetoN,EAAM+rL,MAAM,GAAG3oO,MAAMC,KAExC,GAA2B,IAAvB28C,EAAM+rL,MAAMxuO,OAAc,CACjC,IAAIssQ,EAAQvB,EAAetoN,EAAM+rL,MAAM,GAAG3oO,MAAMC,KAC5CymQ,EAAQxB,EAAetoN,EAAM+rL,MAAM,GAAG3oO,MAAMC,KAChD,OAAO,SAAYkC,GACjB,OAAOskQ,EAAMtkQ,IAAMukQ,EAAMvkQ,IAI3B,IAAIwkQ,EAAQ/pN,EAAM+rL,MAAM7iO,KAAI,SAAUqZ,GACpC,OAAO+lP,EAAe/lP,EAAKnf,MAAMC,QAEnC,OAAO,SAAYkC,GACjB,IAAK,IAAI/H,EAAI,EAAGA,EAAIusQ,EAAMxsQ,OAAQC,IAChC,GAAIusQ,EAAMvsQ,GAAG+H,GACX,OAAO,EAGX,OAAO,GAtBT,OAAO6/B,EAgCX,SAAS4kO,EAAav7P,GACpB,IAAIs7P,EAAOF,EAAOC,EAwvBHzsQ,EAtvBf,GAAIqsQ,EAAaj7P,GAAS,CAGxB,IAAIw7P,GADJF,GAovBa1sQ,EApvBGoR,EAqvBXpR,EAAI8F,MAAM,EAAG9F,EAAIE,OAAS,IArvBP2L,IAAI0gQ,IACPrsQ,OACjB2sQ,EAAWN,EAAY3zB,EAAKxnO,IAUhC,OAAO,SAAkB1P,GACvB,IAAK,IAAIvB,EAAI,EAAGA,EAAIusQ,EAAMxsQ,OAAQC,IAChC,IAAKusQ,EAAMvsQ,GAAGuB,EAAKvB,IACjB,OAAO,EAGX,OAfkB,SAAUuB,GAC5B,IAAK,IAAIvB,EAAIysQ,EAAUzsQ,EAAIuB,EAAKxB,OAAQC,IACtC,IAAK0sQ,EAASnrQ,EAAKvB,IACjB,OAAO,EAGX,OAAO,EASA2sQ,CAAcprQ,IAAUA,EAAKxB,QAAU0sQ,EAAW,GAK3D,OAAsB,IAAlBx7P,EAAOlR,OACF,SAAkBwB,GACvB,OAAuB,IAAhBA,EAAKxB,QAGW,IAAlBkR,EAAOlR,QACdssQ,EAAQD,EAAYn7P,EAAO,IACpB,SAAkB1P,GACvB,OAAO8qQ,EAAM9qQ,EAAK,KAAuB,IAAhBA,EAAKxB,SAGP,IAAlBkR,EAAOlR,QACdssQ,EAAQD,EAAYn7P,EAAO,IAC3Bq7P,EAAQF,EAAYn7P,EAAO,IACpB,SAAkB1P,GACvB,OAAO8qQ,EAAM9qQ,EAAK,KAAO+qQ,EAAM/qQ,EAAK,KAAuB,IAAhBA,EAAKxB,UAIlDwsQ,EAAQt7P,EAAOvF,IAAI0gQ,GACZ,SAAkB7qQ,GACvB,IAAK,IAAIvB,EAAI,EAAGA,EAAIusQ,EAAMxsQ,OAAQC,IAChC,IAAKusQ,EAAMvsQ,GAAGuB,EAAKvB,IACjB,OAAO,EAGX,OAAOuB,EAAKxB,SAAWwsQ,EAAMxsQ,SAcrC,SAAS6sQ,EAAgBrvO,EAAWh2B,GAClC,OAAOA,EAAQg2B,EAAUtsB,OAAOlR,OAC1Bw9B,EAAUtsB,OAAO1J,GACjB2kQ,EAAa3uO,EAAUtsB,QACnBwnO,EAAKl7M,EAAUtsB,QACf,KAUZ,SAAS47P,EAAsBtvO,EAAWh2B,EAAOulQ,GAC/C,IAAItqN,EAAQoqN,EAAgBrvO,EAAWh2B,GAOvC,OANYi7C,EACNsqN,EACQtqN,EAAM+rL,MAAMnhN,OAAO2/O,GACnBvqN,EAAM+rL,MACd,IAEO7iO,IAAI4/P,GAQnB,SAASA,EAAYvmP,GACnB,OAAOA,EAAKnf,KAQd,SAASmnQ,EAAYhoP,GACnB,OAA2B,OAApBA,EAAKy7O,iBAA2C7+P,IAApBojB,EAAKy7O,WAU1C,SAASwM,EAAoBtnB,EAAYn+O,GACvC,IAAI8jQ,EAwsBN,SAAcxrQ,GAEZ,IADA,IAAIid,EAAU,GACL9c,EAAI,EAAGA,EAAIH,EAAIE,OAAQC,IAC9B8c,EAAQjd,EAAIG,KAAM,EAEpB,OAAOsC,OAAO8lB,KAAKtL,GA7sBHmwP,CAAKC,EAAQxnB,GAAY,SAAUnoN,GACjD,OAAOsvO,EAAqBtvO,EAAWh2B,GAAO,OAGhD,OAAsC,IAA9B8jQ,EAAU14O,QAAQ,OAAiB,CAAC,OAAS04O,EAWvD,SAASnuC,EAAYt3N,EAAMrE,EAAMmkP,GAC/B,IAAIhkP,EAAK8xC,EAKLjsC,EAJA4lQ,EAAQvnQ,GAAQ,UAGhBwnQ,EAAqB1nB,EAEzB,IAAKn+O,EAAQ,EAAGA,EAAQhG,EAAKxB,OAAQwH,IAAS,CAC5C,IAAI8lQ,EAAmBD,EAAmBhgP,QAAO,SAAUmQ,GACzD,IAAI13B,EAAOumQ,EAAYQ,EAAgBrvO,EAAWh2B,IAClD,OAAQA,EAAQg2B,EAAUtsB,OAAOlR,QAAUmsQ,EAAa3uO,EAAUtsB,UAC9DpL,EAAKtE,EAAKgG,OAGhB,GAAgC,IAA5B8lQ,EAAiBttQ,QAGnB,IADAyzC,EAAWw5N,EAAoBI,EAAoB7lQ,IACtCxH,OAAS,EAAG,CACvB,IAAIutQ,EAAanC,EAAa5pQ,EAAKgG,IAYnC,OAVA7F,EAAM,IAAII,UAAU,2CAA6CqrQ,EAC7D,eAAiB35N,EAASliC,KAAK,QAC/B,aAAeg8P,EAAa,YAAc/lQ,EAAQ,MAClDtB,KAAO,CACTmxH,SAAU,YACV/1H,GAAI8rQ,EACJ5lQ,MAAOA,EACPgsC,OAAQ+5N,EACR95N,SAAUA,GAEL9xC,QAIT0rQ,EAAqBC,EAKzB,IAAI7qI,EAAU4qI,EAAmB1hQ,KAAI,SAAU6xB,GAC7C,OAAO2uO,EAAa3uO,EAAUtsB,QAAUlH,IAAWwzB,EAAUtsB,OAAOlR,UAEtE,GAAIwB,EAAKxB,OAASyH,KAAKM,IAAIrG,MAAM,KAAM+gI,GAWrC,OAVAhvF,EAAWw5N,EAAoBI,EAAoB7lQ,IACnD7F,EAAM,IAAII,UAAU,iCAAmCqrQ,EACnD,eAAiB35N,EAASliC,KAAK,QAC/B,YAAc/P,EAAKxB,OAAS,MAC5BkG,KAAO,CACTmxH,SAAU,aACV/1H,GAAI8rQ,EACJ5lQ,MAAOhG,EAAKxB,OACZyzC,SAAUA,GAEL9xC,EAIT,IAAI4nF,EAAY9hF,KAAKQ,IAAIvG,MAAM,KAAM+gI,GACrC,OAAIjhI,EAAKxB,OAASupF,IAChB5nF,EAAM,IAAII,UAAU,kCAAoCqrQ,EACpD,eAAiB7jL,EAAY,aAAe/nF,EAAKxB,OAAS,MAC1DkG,KAAO,CACTmxH,SAAU,cACV/1H,GAAI8rQ,EACJ5lQ,MAAOhG,EAAKxB,OACZwtQ,eAAgBjkL,GAEX5nF,KAGTA,EAAM,IAAII,UAAU,sBAAwBP,EAAK+P,KAAK,MAClD,4DAA8D67P,EAAQ,MACtElnQ,KAAO,CACTmxH,SAAU,WACV7jF,OAAQhyC,EAAKmK,IAAIy/P,IAEZzpQ,GAQT,SAAS8rQ,EAAoBhrN,GAG3B,IAFA,IAAI16C,EAAM,IAED9H,EAAI,EAAGA,EAAIwiD,EAAM+rL,MAAMxuO,OAAQC,IAClC+sQ,EAAYvqN,EAAM+rL,MAAMvuO,MAC1B8H,EAAMN,KAAKM,IAAIA,EAAK06C,EAAM+rL,MAAMvuO,GAAG+rQ,YAIvC,OAAOjkQ,EAST,SAAS2lQ,EAA0BjrN,GAGjC,IAFA,IAAI16C,EAAM,IAED9H,EAAI,EAAGA,EAAIwiD,EAAM+rL,MAAMxuO,OAAQC,IACjC+sQ,EAAYvqN,EAAM+rL,MAAMvuO,MAC3B8H,EAAMN,KAAKM,IAAIA,EAAK06C,EAAM+rL,MAAMvuO,GAAGgsQ,kBAIvC,OAAOlkQ,EAWT,SAAS4lQ,EAAeC,EAAQC,GAC9B,IAAIn/P,EAIJ,OAAU,IADVA,EAAIk/P,EAAOpC,UAAYqC,EAAOrC,YAOpB,IADV98P,EAAI09P,EAAewB,GAAUxB,EAAeyB,KAOlC,IADVn/P,EAAI++P,EAAmBG,GAAUH,EAAmBI,IAV3Cn/P,EAgBFg/P,EAAyBE,GAAUF,EAAyBG,GAWrE,SAASC,EAAmBC,EAAYC,GACtC,IACI/tQ,EACAyO,EAFA3O,EAAM0H,KAAKM,IAAIgmQ,EAAW78P,OAAOlR,OAAQguQ,EAAW98P,OAAOlR,QAM/D,GAAU,IADV0O,EAAIq/P,EAAW78P,OAAOoU,KAAK8mP,GAAkB4B,EAAW98P,OAAOoU,KAAK8mP,IAElE,OAAO19P,EAIT,IAAKzO,EAAI,EAAGA,EAAIF,EAAKE,IAEnB,GAAU,IADVyO,EAAI09P,EAAe2B,EAAW78P,OAAOjR,IAAMmsQ,EAAe4B,EAAW98P,OAAOjR,KAE1E,OAAOyO,EAKX,IAAKzO,EAAI,EAAGA,EAAIF,EAAKE,IAEnB,GAAU,KADVyO,EAAIi/P,EAAcI,EAAW78P,OAAOjR,GAAI+tQ,EAAW98P,OAAOjR,KAExD,OAAOyO,EAKX,OAAOq/P,EAAW78P,OAAOlR,OAASguQ,EAAW98P,OAAOlR,OA6EtD,SAASiuQ,EAAqBxrN,GAC5B,IAAI6pN,EAAOC,EAAO2B,EAAaC,EAC3B3B,EAAQ,GACR9xB,EAAc,GAUlB,OARAj4L,EAAM+rL,MAAMjhO,SAAQ,SAAUyX,GACxBA,EAAKy7O,aACP+L,EAAM9nQ,KAAKqmQ,EAAe/lP,EAAKy7O,WAAWv8P,MAAM4B,MAChD40O,EAAYh2O,KAAKsgB,EAAKy7O,WAAWn1B,aAK7BoP,EAAY16O,QAClB,KAAK,EACH,OAAO,SAAoBe,GACzB,OAAOA,GAGX,KAAK,EAGH,OAFAurQ,EAAQE,EAAM,GACd0B,EAAcxzB,EAAY,GACnB,SAAoB35O,GACzB,OAAIurQ,EAAMvrQ,GACDmtQ,EAAYntQ,GAEdA,GAGX,KAAK,EAKH,OAJAurQ,EAAQE,EAAM,GACdD,EAAQC,EAAM,GACd0B,EAAcxzB,EAAY,GAC1ByzB,EAAczzB,EAAY,GACnB,SAAoB35O,GACzB,OAAIurQ,EAAMvrQ,GACDmtQ,EAAYntQ,GAEjBwrQ,EAAMxrQ,GACDotQ,EAAYptQ,GAEdA,GAGX,QACE,OAAO,SAAoBA,GACzB,IAAK,IAAId,EAAI,EAAGA,EAAIy6O,EAAY16O,OAAQC,IACtC,GAAIusQ,EAAMvsQ,GAAGc,GACX,OAAO25O,EAAYz6O,GAAGc,GAG1B,OAAOA,IA+Cf,SAASqtQ,EAAYl9P,EAAQm9P,GA4C3B,OA3CA,SAASC,EAAap9P,EAAQ1J,EAAOgnO,GACnC,GAAIhnO,EAAQ0J,EAAOlR,OAAQ,CACzB,IAIIuuQ,EAJA9rN,EAAQvxC,EAAO1J,GACfgnQ,EAAgBH,EACd5rN,EAAM+rL,MAAMnhN,OAAO2/O,GACnBvqN,EAAM+rL,MAGZ,GAAI/rL,EAAM+oN,UAAW,CAGnB,IAAIO,EAAayC,EAAcnhP,OAAO2/O,GACtCuB,EAAaxC,EAAW/rQ,OAASwuQ,EAAcxuQ,OACzC,CAAC+rQ,EAAYyC,GACb,CAACA,QAKPD,EAAaC,EAAc7iQ,KAAI,SAAUqZ,GACvC,MAAO,CAACA,MAKZ,OAAOmoP,EAAQoB,GAAY,SAAUE,GACnC,OAAOH,EAAap9P,EAAQ1J,EAAQ,EAAGgnO,EAAM3iO,OAAO,CAAC4iQ,QAavD,MAAO,CAPcjgC,EAAM7iO,KAAI,SAAUqZ,EAAMgnP,GAC7C,MAAO,CACLx9B,MAAOxpN,EACPwmP,UAAYQ,IAAc96P,EAAOlR,OAAS,GAAMmsQ,EAAaj7P,QAQ9Do9P,CAAap9P,EAAQ,EAAG,IAyCjC,SAASw9P,EAAoB7oQ,EAAM8oQ,GACjC,GAA0C,IAAtCpsQ,OAAO8lB,KAAKsmP,GAAe3uQ,OAC7B,MAAM,IAAIuwN,YAAY,0BAIxB,IAAIq+C,EAAmB,GACvBrsQ,OAAO8lB,KAAKsmP,GACPhjQ,KAAI,SAAU6xB,GACb,OAzqBR,SAAyBA,EAAWl8B,EAAIo5O,GACtC,IAAIxpO,EAAS,GAkBb,MAhByB,KAArBssB,EAAU9G,SACZxlB,EAASssB,EACJ3sB,MAAM,KACNlF,IAAI+qB,GACJ/qB,KAAI,SAAU82C,EAAOj7C,EAAOH,GAC3B,IAAIwnQ,EAAcpD,EAAWhpN,EAAOi4L,GAEpC,GAAIm0B,EAAYrD,WAAchkQ,IAAUH,EAAMrH,OAAS,EACrD,MAAM,IAAIuwN,YAAY,8BAAgC9tK,EAAhC,0CAIxB,OAAOosN,MAIX39P,EAAOoU,KAAKwpP,GAGP,KAGF,CACL59P,OAAQA,EACR5P,GAAIA,GA8oBOytQ,CAAevxO,EAAWmxO,EAAcnxO,GAAYi9M,EAAMC,gBAElErtN,OAAO2hP,GACPzhQ,SAAQ,SAAU0hQ,GAEjB,IAAIC,EAAuBjE,EAAY2D,GAAkB,SAAUhjQ,GACjE,OA/CV,SAA8BmiQ,EAAYC,GAGxC,IAFA,IAAIp2B,EAAKnwO,KAAKQ,IAAI8lQ,EAAW78P,OAAOlR,OAAQguQ,EAAW98P,OAAOlR,QAErDC,EAAI,EAAGA,EAAI23O,EAAI33O,IAItB,IAAKkvQ,EAHarC,EAAqBiB,EAAY9tQ,GAAG,GACpC6sQ,EAAqBkB,EAAY/tQ,GAAG,IAGpD,OAAO,EAIX,IAAImvQ,EAAOrB,EAAW78P,OAAOlR,OACzBqvQ,EAAOrB,EAAW98P,OAAOlR,OACzBsvQ,EAAanD,EAAa4B,EAAW78P,QACrCq+P,EAAapD,EAAa6B,EAAW98P,QAEzC,OAAOo+P,EACDC,EAAcH,IAASC,EAASA,GAAQD,EACxCG,EAAcH,GAAQC,EAAUD,IAASC,EA4BhCG,CAAqB5jQ,EAAGqjQ,MAEjC,GAAIC,EACF,MAAM,IAAIntQ,UAAU,2BAChBspQ,EAAgB6D,EAAqBh+P,QAAU,UAC/Cm6P,EAAgB4D,EAAgB/9P,QAAU,MAGhD09P,EAAiBlqQ,KAAKuqQ,MAI5B,IAAItpB,EAAawnB,EAAQyB,GAAkB,SAAUK,GAGnD,OAFaA,EAAkBb,EAAYa,EAAgB/9P,QAAQ,GAAS,IAE9DvF,KAAI,SAAUuF,GAC1B,MAAO,CACLA,OAAQA,EACR5P,GAAI2tQ,EAAgB3tQ,UAGvB+rB,OAAO2hP,GAEVrpB,EAAWv5O,KAAK0hQ,GAGhB,IAAI2B,EAAM9pB,EAAW,IAAMA,EAAW,GAAGz0O,OAAOlR,QAAU,IAAMmsQ,EAAaxmB,EAAW,GAAGz0O,QACvFw+P,EAAM/pB,EAAW,IAAMA,EAAW,GAAGz0O,OAAOlR,QAAU,IAAMmsQ,EAAaxmB,EAAW,GAAGz0O,QACvFy+P,EAAMhqB,EAAW,IAAMA,EAAW,GAAGz0O,OAAOlR,QAAU,IAAMmsQ,EAAaxmB,EAAW,GAAGz0O,QACvF0+P,EAAMjqB,EAAW,IAAMA,EAAW,GAAGz0O,OAAOlR,QAAU,IAAMmsQ,EAAaxmB,EAAW,GAAGz0O,QACvF2+P,EAAMlqB,EAAW,IAAMA,EAAW,GAAGz0O,OAAOlR,QAAU,IAAMmsQ,EAAaxmB,EAAW,GAAGz0O,QACvF4+P,EAAMnqB,EAAW,IAAMA,EAAW,GAAGz0O,OAAOlR,QAAU,IAAMmsQ,EAAaxmB,EAAW,GAAGz0O,QACvF6+P,EAAQN,GAAOC,GAAOC,GAAOC,GAAOC,GAAOC,EAG3CtD,EAAQ7mB,EAAWh6O,KAAI,SAAU6xB,GACnC,OAAOivO,EAAajvO,EAAUtsB,WAG5B8+P,EAASP,EAAMpD,EAAY1mB,EAAW,GAAGz0O,OAAO,IAAMs5P,EACtDyF,EAASP,EAAMrD,EAAY1mB,EAAW,GAAGz0O,OAAO,IAAMs5P,EACtD0F,EAASP,EAAMtD,EAAY1mB,EAAW,GAAGz0O,OAAO,IAAMs5P,EACtD2F,EAASP,EAAMvD,EAAY1mB,EAAW,GAAGz0O,OAAO,IAAMs5P,EACtD4F,EAASP,EAAMxD,EAAY1mB,EAAW,GAAGz0O,OAAO,IAAMs5P,EACtD6F,EAASP,EAAMzD,EAAY1mB,EAAW,GAAGz0O,OAAO,IAAMs5P,EAEtD8F,EAASb,EAAMpD,EAAY1mB,EAAW,GAAGz0O,OAAO,IAAMs5P,EACtD+F,EAASb,EAAMrD,EAAY1mB,EAAW,GAAGz0O,OAAO,IAAMs5P,EACtDgG,EAASb,EAAMtD,EAAY1mB,EAAW,GAAGz0O,OAAO,IAAMs5P,EACtDiG,EAASb,EAAMvD,EAAY1mB,EAAW,GAAGz0O,OAAO,IAAMs5P,EACtDkG,EAASb,EAAMxD,EAAY1mB,EAAW,GAAGz0O,OAAO,IAAMs5P,EACtDmG,EAASb,EAAMzD,EAAY1mB,EAAW,GAAGz0O,OAAO,IAAMs5P,EAGtDoG,EAAMjrB,EAAWh6O,KAAI,SAAS6xB,GAChC,OAvSJ,SAAkCtsB,EAAQ5P,GACxC,IAAIuvQ,EAAYvvQ,EAIhB,GAAI4P,EAAOoU,KAAK8mP,GAAiB,CAC/B,IAAIZ,EAAYW,EAAaj7P,GACzB4/P,EAAsB5/P,EAAOvF,IAAIsiQ,GAErC4C,EAAY,WAGV,IAFA,IAAIrvQ,EAAO,GACPk3O,EAAO8yB,EAAY/pQ,UAAUzB,OAAS,EAAIyB,UAAUzB,OAC/CC,EAAI,EAAGA,EAAIy4O,EAAMz4O,IACxBuB,EAAKvB,GAAK6wQ,EAAoB7wQ,GAAGwB,UAAUxB,IAM7C,OAJIurQ,IACFhqQ,EAAKk3O,GAAQj3O,UAAUi3O,GAAM/sO,IAAImlQ,EAAoBp4B,KAGhDp3O,EAAGI,MAAMH,KAAMC,IAI1B,IAAIuvQ,EAAeF,EACnB,GAAI1E,EAAaj7P,GAAS,CACxB,IAAI/C,EAAS+C,EAAOlR,OAAS,EAE7B+wQ,EAAe,WACb,OAAOF,EAAUnvQ,MAAMH,KACnBqE,EAAMnE,UAAW,EAAG0M,GAAQtC,OAAO,CAACjG,EAAMnE,UAAW0M,OAI7D,OAAO4iQ,EAsQEC,CAAyBxzO,EAAUtsB,OAAQssB,EAAUl8B,OAG1D2vQ,EAAMxB,EAAMmB,EAAI,GAAKnG,EACrByG,EAAMxB,EAAMkB,EAAI,GAAKnG,EACrB0G,EAAMxB,EAAMiB,EAAI,GAAKnG,EACrB2G,EAAMxB,EAAMgB,EAAI,GAAKnG,EACrB4G,EAAMxB,EAAMe,EAAI,GAAKnG,EACrB6G,EAAMxB,EAAMc,EAAI,GAAKnG,EAErB8G,EAAO9B,EAAM9pB,EAAW,GAAGz0O,OAAOlR,QAAU,EAC5CovQ,EAAOM,EAAM/pB,EAAW,GAAGz0O,OAAOlR,QAAU,EAC5CqvQ,GAAOM,EAAMhqB,EAAW,GAAGz0O,OAAOlR,QAAU,EAC5CwxQ,GAAO5B,EAAMjqB,EAAW,GAAGz0O,OAAOlR,QAAU,EAC5CyxQ,GAAO5B,EAAMlqB,EAAW,GAAGz0O,OAAOlR,QAAU,EAC5C0xQ,GAAO5B,EAAMnqB,EAAW,GAAGz0O,OAAOlR,QAAU,EAG5C2xQ,GAAS5B,EAAQ,EAAI,EACrB6B,GAAOjsB,EAAW3lP,OAClB6xQ,GAAU,WAGZ,IAAK,IAAI5xQ,EAAI0xQ,GAAQ1xQ,EAAI2xQ,GAAM3xQ,IAC7B,GAAIusQ,EAAMvsQ,GAAGwB,WACX,OAAOmvQ,EAAI3wQ,GAAGyB,MAAMH,KAAME,WAI9B,MAAM07N,EAAYt3N,EAAMpE,UAAWkkP,IAKjCrkP,GAAK,SAASA,EAAGwwQ,EAAM1pD,GAGzB,OAAI3mN,UAAUzB,SAAWuxQ,GAAQvB,EAAO8B,IAASxB,EAAOloD,GAAgB6oD,EAAIvvQ,MAAMJ,EAAIG,WAClFA,UAAUzB,SAAWovQ,GAAQa,EAAO6B,IAASvB,EAAOnoD,GAAgB8oD,EAAIxvQ,MAAMJ,EAAIG,WAClFA,UAAUzB,SAAWqvQ,IAAQa,EAAO4B,IAAStB,EAAOpoD,GAAgB+oD,EAAIzvQ,MAAMJ,EAAIG,WAClFA,UAAUzB,SAAWwxQ,IAAQrB,EAAO2B,IAASrB,EAAOroD,GAAgBgpD,EAAI1vQ,MAAMJ,EAAIG,WAClFA,UAAUzB,SAAWyxQ,IAAQrB,EAAO0B,IAASpB,EAAOtoD,GAAgBipD,EAAI3vQ,MAAMJ,EAAIG,WAClFA,UAAUzB,SAAW0xQ,IAAQrB,EAAOyB,IAASnB,EAAOvoD,GAAgBkpD,EAAI5vQ,MAAMJ,EAAIG,WAE/EowQ,GAAQnwQ,MAAMJ,EAAIG,YAI3B,IACEc,OAAOC,eAAelB,GAAI,OAAQ,CAACL,MAAO4E,IAE5C,MAAOlE,IASP,OAFAL,GAAGqkP,WApPL,SAA6BA,GAC3B,IAAIgpB,EAAgB,GASpB,OARAhpB,EAAWp4O,SAAQ,SAAUiwB,GACtBA,EAAUtsB,OAAOoU,KAAK8mP,IACzBgC,EAAY5wO,EAAUtsB,QAAQ,GAAM3D,SAAQ,SAAU2D,GACpDy9P,EAActD,EAAgBn6P,IAAWssB,EAAUl8B,SAKlDqtQ,EA0OSoD,CAAoBpsB,GAE7BrkP,GAQT,SAASqqQ,EAAUX,GACjB,OAA2C,IAApCvwB,EAAMqwB,OAAOl4O,QAAQo4O,GAQ9B,SAASt0O,EAAKJ,GACZ,OAAOA,EAAII,OAQb,SAASg1O,EAASp1O,GAChB,QAASA,EAQX,SAAS04O,EAAQ/tQ,GACf,OAAiB,OAAVA,EAQT,SAAS6tQ,EAAgBrsN,GACvB,OAA8B,IAAvBA,EAAM+rL,MAAMxuO,OAiBrB,SAAS04O,EAAK54O,GACZ,OAAOA,EAAIA,EAAIE,OAAS,GAU1B,SAAS4F,EAAM9F,EAAKiO,EAAOkU,GACzB,OAAO9hB,MAAMwC,UAAUiD,MAAMvC,KAAKvD,EAAKiO,EAAOkU,GAmBhD,SAASktP,EAAW6C,EAAQpqQ,GAC1B,IAAK,IAAI3H,EAAI,EAAGA,EAAI+xQ,EAAOhyQ,OAAQC,IACjC,GAZcoH,EAYDO,EAZQglB,EAYAolP,EAAO/xQ,IAXE,IAAzBoH,EAAMurB,QAAQhG,GAYjB,OAAO,EAbb,IAAkBvlB,EAAOulB,EAiBvB,OAAO,EAUT,SAASq+O,EAAYnrQ,EAAKgG,GACxB,IAAK,IAAI7F,EAAI,EAAGA,EAAIH,EAAIE,OAAQC,IAC9B,GAAI6F,EAAKhG,EAAIG,IACX,OAAOH,EAAIG,GA0BjB,SAASktQ,EAAQrtQ,EAAKm4F,GACpB,OAAO93F,MAAMwC,UAAUkJ,OAAOnK,MAAM,GAAI5B,EAAI6L,IAAIssF,IAQlD,SAASg6K,EAASrB,GAGhB,IAFA,IAAI/qQ,EAAO,GAEF5F,EAAI,EAAGA,EAAI2wQ,EAAI5wQ,OAAQC,IAAK,CACnC,IAAIqB,EAAKsvQ,EAAI3wQ,GAGb,IAA8B,iBAAlBqB,EAAGqkP,YAAmD,iBAAjBrkP,EAAGk8B,YAAuC,KAAZl8B,EAAGuE,KAChF,GAAa,KAATA,EACFA,EAAOvE,EAAGuE,UAEP,GAAIA,IAASvE,EAAGuE,KAAM,CACzB,IAAIlE,EAAM,IAAIyF,MAAM,0CAA4CvB,EAAO,aAAevE,EAAGuE,KAAO,KAKhG,MAJAlE,EAAIuE,KAAO,CACTstC,OAAQlyC,EAAGuE,KACX4tC,SAAU5tC,GAENlE,GAKZ,OAAOkE,EAIT,SAASqsQ,EAAkBtB,GACzB,IAAIjvQ,EACAgtQ,EAAgB,GAEpB,SAASwD,EAAe9rI,EAAY+rI,GAClC,GAAIzD,EAAcvpQ,eAAeihI,IAAe+rI,IAAQzD,EAActoI,GAGpE,MAFA1kI,EAAM,IAAIyF,MAAM,cAAgBi/H,EAAa,uBACzCngI,KAAO,CAACs3B,UAAW6oG,GACjB1kI,EAKV,IAAK,IAAI1B,EAAI,EAAGA,EAAI2wQ,EAAI5wQ,OAAQC,IAAK,CACnC,IAAIqB,EAAKsvQ,EAAI3wQ,GAGb,GAA6B,iBAAlBqB,EAAGqkP,WAEZ,IAAK,IAAInoN,KAAal8B,EAAGqkP,WACnBrkP,EAAGqkP,WAAWvgP,eAAeo4B,KAC/B20O,EAAe30O,EAAWl8B,EAAGqkP,WAAWnoN,IACxCmxO,EAAcnxO,GAAal8B,EAAGqkP,WAAWnoN,QAI1C,IAA4B,iBAAjBl8B,EAAGk8B,UAOjB,MAFA77B,EAAM,IAAII,UAAU,yCAA2C9B,EAAI,MAC/DiG,KAAO,CAACsB,MAAOvH,GACb0B,EANNwwQ,EAAe7wQ,EAAGk8B,UAAWl8B,GAC7BqtQ,EAAcrtQ,EAAGk8B,WAAal8B,GASlC,OAAOqtQ,EAoET,OAjEAl0B,EAAQi0B,EAAoB,QAAS,CACnC,iBAAkBA,EAClB,OAAU,SAAUC,GAElB,IAAIiC,EAAM,GACV,IAAK,IAAIpzO,KAAamxO,EAChBA,EAAcvpQ,eAAeo4B,IAC/BozO,EAAIlsQ,KAAKiqQ,EAAcnxO,IAI3B,OAAOkxO,EADIuD,EAAQrB,GACcjC,IAEnC,cAAe,SAAUiC,GACvB,OAAOlC,EAAoBuD,EAAQrB,GAAMsB,EAAkBtB,KAE7D,sBAAuB,SAAU/qQ,EAAM+qQ,GACrC,OAAOlC,EAAoB7oQ,EAAMqsQ,EAAkBtB,QAIjD/sQ,OAASA,EACf42O,EAAMjM,MAAQk8B,EACdjwB,EAAMC,YAAcmwB,EACpBpwB,EAAMqwB,OAASF,EACfnwB,EAAMnP,QA5mCN,SAAkBrqO,EAAO+jB,GACvB,IAAI9gB,EAAOknQ,EAAanqQ,GAGxB,GAAI+jB,IAAS9gB,EACX,OAAOjD,EAGT,IAAK,IAAIhB,EAAI,EAAGA,EAAIw6O,EAAMC,YAAY16O,OAAQC,IAAK,CACjD,IAAIwgQ,EAAahmB,EAAMC,YAAYz6O,GACnC,GAAIwgQ,EAAWv8P,OAASA,GAAQu8P,EAAW9lB,KAAO31N,EAChD,OAAOy7O,EAAWn1B,QAAQrqO,GAI9B,MAAM,IAAImG,MAAM,uBAAyBlD,EAAO,OAAS8gB,IA8lC3Dy1N,EAAM/hH,KAnpCN,SAAep3H,EAAIk8B,GACjB,IAAKl8B,EAAGqkP,WACN,MAAM,IAAI5jP,UAAU,iCAItB,IAAIjC,EACJ,GAAyB,iBAAd09B,EAAwB,CACjC19B,EAAM09B,EAAU3sB,MAAM,KACtB,IAAK,IAAI5Q,EAAI,EAAGA,EAAIH,EAAIE,OAAQC,IAC9BH,EAAIG,GAAKH,EAAIG,GAAGy2B,WAGf,KAAIv2B,MAAMC,QAAQo9B,GAIrB,MAAM,IAAIz7B,UAAU,qDAHpBjC,EAAM09B,EAMR,IAAIlH,EAAMx2B,EAAIyR,KAAK,KAGfw3B,EAAQznC,EAAGqkP,WAAWrvN,GAC1B,GAAIyS,EACF,OAAOA,EAKT,MAAM,IAAIhnC,UAAU,oCAAsCT,EAAGuE,MAAQ,WAAa,IAAM/F,EAAIyR,KAAK,MAAQ,OA+nC3GkpO,EAAM43B,QAAU,SAAUrtP,EAAMstP,GAC9B,IAAKttP,GAA6B,iBAAdA,EAAKnf,MAA0C,mBAAdmf,EAAKlf,KACxD,MAAM,IAAI/D,UAAU,kEAGtB,IAAyB,IAArBuwQ,EACF,IAAK,IAAIryQ,EAAI,EAAGA,EAAIw6O,EAAMjM,MAAMxuO,OAAQC,IACtC,GAA4B,WAAxBw6O,EAAMjM,MAAMvuO,GAAG4F,KAEjB,YADA40O,EAAMjM,MAAM7+L,OAAO1vC,EAAG,EAAG+kB,GAM/By1N,EAAMjM,MAAM9pO,KAAKsgB,IAInBy1N,EAAM83B,cAAgB,SAAU9R,GAC9B,IAAKA,GAC6B,iBAApBA,EAAWv8P,MACO,iBAAlBu8P,EAAW9lB,IACY,mBAAvB8lB,EAAWn1B,QACvB,MAAM,IAAIvpO,UAAU,iFAGtB04O,EAAMC,YAAYh2O,KAAK+7P,IAGlBhmB,EAGF52O,KAj2Ca,UAAX,IAAW,mB,iBCVtB,IAAI2uQ,EAAU,CAACx9N,QAAQ,UACvBw9N,EAAQ,KAAO,WAAub,IAA1a,IAAIlkQ,EAAI,4QAAkZuvN,EAAI,GAAIlmM,EAAI,GAAY13B,EAAE,EAAEA,GAAGqO,EAAEtO,SAASC,EAA4B,QAApBqO,EAAE4vB,WAAWj+B,KAAe03B,EAAErpB,EAAEslI,OAAO3zI,IAAMA,GAAG49N,EAAE59N,GAAKqO,EAAEslI,OAAO3zI,GAAM,MAAO,CAAC,IAAO03B,EAAG,IAAOkmM,GAAxjB,GACf20C,EAAQ,KAAO,WAAub,IAA1a,IAAIlkQ,EAAI,4QAAkZuvN,EAAI,GAAIlmM,EAAI,GAAY13B,EAAE,EAAEA,GAAGqO,EAAEtO,SAASC,EAA4B,QAApBqO,EAAE4vB,WAAWj+B,KAAe03B,EAAErpB,EAAEslI,OAAO3zI,IAAMA,GAAG49N,EAAE59N,GAAKqO,EAAEslI,OAAO3zI,GAAM,MAAO,CAAC,IAAO03B,EAAG,IAAOkmM,GAAxjB,GACf20C,EAAQ,KAAO,WAAub,IAA1a,IAAIlkQ,EAAI,4QAAkZuvN,EAAI,GAAIlmM,EAAI,GAAY13B,EAAE,EAAEA,GAAGqO,EAAEtO,SAASC,EAA4B,QAApBqO,EAAE4vB,WAAWj+B,KAAe03B,EAAErpB,EAAEslI,OAAO3zI,IAAMA,GAAG49N,EAAE59N,GAAKqO,EAAEslI,OAAO3zI,GAAM,MAAO,CAAC,IAAO03B,EAAG,IAAOkmM,GAAxjB,GACf20C,EAAQ,KAAO,WAAub,IAA1a,IAAIlkQ,EAAI,4QAAkZuvN,EAAI,GAAIlmM,EAAI,GAAY13B,EAAE,EAAEA,GAAGqO,EAAEtO,SAASC,EAA4B,QAApBqO,EAAE4vB,WAAWj+B,KAAe03B,EAAErpB,EAAEslI,OAAO3zI,IAAMA,GAAG49N,EAAE59N,GAAKqO,EAAEslI,OAAO3zI,GAAM,MAAO,CAAC,IAAO03B,EAAG,IAAOkmM,GAAxjB,GACf20C,EAAQ,KAAO,WAAub,IAA1a,IAAIlkQ,EAAI,4QAAkZuvN,EAAI,GAAIlmM,EAAI,GAAY13B,EAAE,EAAEA,GAAGqO,EAAEtO,SAASC,EAA4B,QAApBqO,EAAE4vB,WAAWj+B,KAAe03B,EAAErpB,EAAEslI,OAAO3zI,IAAMA,GAAG49N,EAAE59N,GAAKqO,EAAEslI,OAAO3zI,GAAM,MAAO,CAAC,IAAO03B,EAAG,IAAOkmM,GAAxjB,GACf20C,EAAQ,KAAO,WAAub,IAA1a,IAAIlkQ,EAAI,4QAAkZuvN,EAAI,GAAIlmM,EAAI,GAAY13B,EAAE,EAAEA,GAAGqO,EAAEtO,SAASC,EAA4B,QAApBqO,EAAE4vB,WAAWj+B,KAAe03B,EAAErpB,EAAEslI,OAAO3zI,IAAMA,GAAG49N,EAAE59N,GAAKqO,EAAEslI,OAAO3zI,GAAM,MAAO,CAAC,IAAO03B,EAAG,IAAOkmM,GAAxjB,GACf20C,EAAQ,KAAO,WAAub,IAA1a,IAAIlkQ,EAAI,4QAAkZuvN,EAAI,GAAIlmM,EAAI,GAAY13B,EAAE,EAAEA,GAAGqO,EAAEtO,SAASC,EAA4B,QAApBqO,EAAE4vB,WAAWj+B,KAAe03B,EAAErpB,EAAEslI,OAAO3zI,IAAMA,GAAG49N,EAAE59N,GAAKqO,EAAEslI,OAAO3zI,GAAM,MAAO,CAAC,IAAO03B,EAAG,IAAOkmM,GAAxjB,GACf20C,EAAQ,KAAO,WAAub,IAA1a,IAAIlkQ,EAAI,4QAAkZuvN,EAAI,GAAIlmM,EAAI,GAAY13B,EAAE,EAAEA,GAAGqO,EAAEtO,SAASC,EAA4B,QAApBqO,EAAE4vB,WAAWj+B,KAAe03B,EAAErpB,EAAEslI,OAAO3zI,IAAMA,GAAG49N,EAAE59N,GAAKqO,EAAEslI,OAAO3zI,GAAM,MAAO,CAAC,IAAO03B,EAAG,IAAOkmM,GAAxjB,GACf20C,EAAQ,KAAO,WAAub,IAA1a,IAAIlkQ,EAAI,4QAAkZuvN,EAAI,GAAIlmM,EAAI,GAAY13B,EAAE,EAAEA,GAAGqO,EAAEtO,SAASC,EAA4B,QAApBqO,EAAE4vB,WAAWj+B,KAAe03B,EAAErpB,EAAEslI,OAAO3zI,IAAMA,GAAG49N,EAAE59N,GAAKqO,EAAEslI,OAAO3zI,GAAM,MAAO,CAAC,IAAO03B,EAAG,IAAOkmM,GAAxjB,GACf20C,EAAQ,KAAO,WAAub,IAA1a,IAAIlkQ,EAAI,4QAAkZuvN,EAAI,GAAIlmM,EAAI,GAAY13B,EAAE,EAAEA,GAAGqO,EAAEtO,SAASC,EAA4B,QAApBqO,EAAE4vB,WAAWj+B,KAAe03B,EAAErpB,EAAEslI,OAAO3zI,IAAMA,GAAG49N,EAAE59N,GAAKqO,EAAEslI,OAAO3zI,GAAM,MAAO,CAAC,IAAO03B,EAAG,IAAOkmM,GAAxjB,GACf20C,EAAQ,KAAO,WAAub,IAA1a,IAAIlkQ,EAAI,4QAAkZuvN,EAAI,GAAIlmM,EAAI,GAAY13B,EAAE,EAAEA,GAAGqO,EAAEtO,SAASC,EAA4B,QAApBqO,EAAE4vB,WAAWj+B,KAAe03B,EAAErpB,EAAEslI,OAAO3zI,IAAMA,GAAG49N,EAAE59N,GAAKqO,EAAEslI,OAAO3zI,GAAM,MAAO,CAAC,IAAO03B,EAAG,IAAOkmM,GAAxjB,GACf20C,EAAQ,KAAO,WAAa,IAA4BnmQ,EAAxBiC,EAAI,GAAIqpB,EAAI,GAAIkmM,EAAI,GAEpD,IADAA,EAAE,GAAK,4QAAiZhtN,MAAM,IAC1ZxE,EAAI,EAAGA,GAAKwxN,EAAE,GAAG79N,SAAUqM,EAAgC,QAA1BwxN,EAAE,GAAGxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,GAAGxxN,IAAM,EAAIA,EAAGiC,EAAE,EAAIjC,GAAKwxN,EAAE,GAAGxxN,IAE7G,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,KAAQA,EAAGiC,EAAE,KAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAC7H,MAAO,CAAC,IAAOsrB,EAAG,IAAOrpB,GA7FV,GA8FfkkQ,EAAQ,KAAO,WAAa,IAA4BnmQ,EAAxBiC,EAAI,GAAIqpB,EAAI,GAAIkmM,EAAI,GAEpD,IADAA,EAAE,GAAK,4QAAiZhtN,MAAM,IAC1ZxE,EAAI,EAAGA,GAAKwxN,EAAE,GAAG79N,SAAUqM,EAAgC,QAA1BwxN,EAAE,GAAGxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,GAAGxxN,IAAM,EAAIA,EAAGiC,EAAE,EAAIjC,GAAKwxN,EAAE,GAAGxxN,IAE7G,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,KAAQA,EAAGiC,EAAE,KAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAC7H,MAAO,CAAC,IAAOsrB,EAAG,IAAOrpB,GA/PV,GAgQfkkQ,EAAQ,KAAO,WAAa,IAA4BnmQ,EAAxBiC,EAAI,GAAIqpB,EAAI,GAAIkmM,EAAI,GAEpD,IADAA,EAAE,GAAK,4QAAiZhtN,MAAM,IAC1ZxE,EAAI,EAAGA,GAAKwxN,EAAE,GAAG79N,SAAUqM,EAAgC,QAA1BwxN,EAAE,GAAGxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,GAAGxxN,IAAM,EAAIA,EAAGiC,EAAE,EAAIjC,GAAKwxN,EAAE,GAAGxxN,IAE7G,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,KAAQA,EAAGiC,EAAE,KAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAC7H,MAAO,CAAC,IAAOsrB,EAAG,IAAOrpB,GA3PV,GA4PfkkQ,EAAQ,KAAO,WAAa,IAA4BnmQ,EAAxBiC,EAAI,GAAIqpB,EAAI,GAAIkmM,EAAI,GAEpD,IADAA,EAAE,GAAK,4QAAiZhtN,MAAM,IAC1ZxE,EAAI,EAAGA,GAAKwxN,EAAE,GAAG79N,SAAUqM,EAAgC,QAA1BwxN,EAAE,GAAGxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,GAAGxxN,IAAM,EAAIA,EAAGiC,EAAE,EAAIjC,GAAKwxN,EAAE,GAAGxxN,IAE7G,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAC7H,MAAO,CAAC,IAAOsrB,EAAG,IAAOrpB,GAjLV,GAkLfkkQ,EAAQ,MAAQ,WAAub,IAA1a,IAAIlkQ,EAAI,4QAAkZuvN,EAAI,GAAIlmM,EAAI,GAAY13B,EAAE,EAAEA,GAAGqO,EAAEtO,SAASC,EAA4B,QAApBqO,EAAE4vB,WAAWj+B,KAAe03B,EAAErpB,EAAEslI,OAAO3zI,IAAMA,GAAG49N,EAAE59N,GAAKqO,EAAEslI,OAAO3zI,GAAM,MAAO,CAAC,IAAO03B,EAAG,IAAOkmM,GAAxjB,GAChB20C,EAAQ,MAAQ,WAAub,IAA1a,IAAIlkQ,EAAI,4QAAkZuvN,EAAI,GAAIlmM,EAAI,GAAY13B,EAAE,EAAEA,GAAGqO,EAAEtO,SAASC,EAA4B,QAApBqO,EAAE4vB,WAAWj+B,KAAe03B,EAAErpB,EAAEslI,OAAO3zI,IAAMA,GAAG49N,EAAE59N,GAAKqO,EAAEslI,OAAO3zI,GAAM,MAAO,CAAC,IAAO03B,EAAG,IAAOkmM,GAAxjB,GAChB20C,EAAQ,MAAQ,WAAub,IAA1a,IAAIlkQ,EAAI,4QAAkZuvN,EAAI,GAAIlmM,EAAI,GAAY13B,EAAE,EAAEA,GAAGqO,EAAEtO,SAASC,EAA4B,QAApBqO,EAAE4vB,WAAWj+B,KAAe03B,EAAErpB,EAAEslI,OAAO3zI,IAAMA,GAAG49N,EAAE59N,GAAKqO,EAAEslI,OAAO3zI,GAAM,MAAO,CAAC,IAAO03B,EAAG,IAAOkmM,GAAxjB,GAChB20C,EAAQ,MAAQ,WAAub,IAA1a,IAAIlkQ,EAAI,4QAAkZuvN,EAAI,GAAIlmM,EAAI,GAAY13B,EAAE,EAAEA,GAAGqO,EAAEtO,SAASC,EAA4B,QAApBqO,EAAE4vB,WAAWj+B,KAAe03B,EAAErpB,EAAEslI,OAAO3zI,IAAMA,GAAG49N,EAAE59N,GAAKqO,EAAEslI,OAAO3zI,GAAM,MAAO,CAAC,IAAO03B,EAAG,IAAOkmM,GAAxjB,GAChB20C,EAAQ,MAAQ,WAAub,IAA1a,IAAIlkQ,EAAI,4QAAkZuvN,EAAI,GAAIlmM,EAAI,GAAY13B,EAAE,EAAEA,GAAGqO,EAAEtO,SAASC,EAA4B,QAApBqO,EAAE4vB,WAAWj+B,KAAe03B,EAAErpB,EAAEslI,OAAO3zI,IAAMA,GAAG49N,EAAE59N,GAAKqO,EAAEslI,OAAO3zI,GAAM,MAAO,CAAC,IAAO03B,EAAG,IAAOkmM,GAAxjB,GAChB20C,EAAQ,MAAQ,WAAub,IAA1a,IAAIlkQ,EAAI,4QAAkZuvN,EAAI,GAAIlmM,EAAI,GAAY13B,EAAE,EAAEA,GAAGqO,EAAEtO,SAASC,EAA4B,QAApBqO,EAAE4vB,WAAWj+B,KAAe03B,EAAErpB,EAAEslI,OAAO3zI,IAAMA,GAAG49N,EAAE59N,GAAKqO,EAAEslI,OAAO3zI,GAAM,MAAO,CAAC,IAAO03B,EAAG,IAAOkmM,GAAxjB,GAChB20C,EAAQ,MAAQ,WAAub,IAA1a,IAAIlkQ,EAAI,4QAAkZuvN,EAAI,GAAIlmM,EAAI,GAAY13B,EAAE,EAAEA,GAAGqO,EAAEtO,SAASC,EAA4B,QAApBqO,EAAE4vB,WAAWj+B,KAAe03B,EAAErpB,EAAEslI,OAAO3zI,IAAMA,GAAG49N,EAAE59N,GAAKqO,EAAEslI,OAAO3zI,GAAM,MAAO,CAAC,IAAO03B,EAAG,IAAOkmM,GAAxjB,GAChB20C,EAAQ,MAAQ,WAAub,IAA1a,IAAIlkQ,EAAI,4QAAkZuvN,EAAI,GAAIlmM,EAAI,GAAY13B,EAAE,EAAEA,GAAGqO,EAAEtO,SAASC,EAA4B,QAApBqO,EAAE4vB,WAAWj+B,KAAe03B,EAAErpB,EAAEslI,OAAO3zI,IAAMA,GAAG49N,EAAE59N,GAAKqO,EAAEslI,OAAO3zI,GAAM,MAAO,CAAC,IAAO03B,EAAG,IAAOkmM,GAAxjB,GAChB20C,EAAQ,MAAQ,WAAub,IAA1a,IAAIlkQ,EAAI,4QAAkZuvN,EAAI,GAAIlmM,EAAI,GAAY13B,EAAE,EAAEA,GAAGqO,EAAEtO,SAASC,EAA4B,QAApBqO,EAAE4vB,WAAWj+B,KAAe03B,EAAErpB,EAAEslI,OAAO3zI,IAAMA,GAAG49N,EAAE59N,GAAKqO,EAAEslI,OAAO3zI,GAAM,MAAO,CAAC,IAAO03B,EAAG,IAAOkmM,GAAxjB,GAChB20C,EAAQ,KAAS,WAAub,IAA1a,IAAIlkQ,EAAI,4QAAkZuvN,EAAI,GAAIlmM,EAAI,GAAY13B,EAAE,EAAEA,GAAGqO,EAAEtO,SAASC,EAA4B,QAApBqO,EAAE4vB,WAAWj+B,KAAe03B,EAAErpB,EAAEslI,OAAO3zI,IAAMA,GAAG49N,EAAE59N,GAAKqO,EAAEslI,OAAO3zI,GAAM,MAAO,CAAC,IAAO03B,EAAG,IAAOkmM,GAAxjB,GACjB20C,EAAQ,OAAS,WAAub,IAA1a,IAAIlkQ,EAAI,4QAAkZuvN,EAAI,GAAIlmM,EAAI,GAAY13B,EAAE,EAAEA,GAAGqO,EAAEtO,SAASC,EAA4B,QAApBqO,EAAE4vB,WAAWj+B,KAAe03B,EAAErpB,EAAEslI,OAAO3zI,IAAMA,GAAG49N,EAAE59N,GAAKqO,EAAEslI,OAAO3zI,GAAM,MAAO,CAAC,IAAO03B,EAAG,IAAOkmM,GAAxjB,GACjB20C,EAAQ,OAAS,WAAub,IAA1a,IAAIlkQ,EAAI,4QAAkZuvN,EAAI,GAAIlmM,EAAI,GAAY13B,EAAE,EAAEA,GAAGqO,EAAEtO,SAASC,EAA4B,QAApBqO,EAAE4vB,WAAWj+B,KAAe03B,EAAErpB,EAAEslI,OAAO3zI,IAAMA,GAAG49N,EAAE59N,GAAKqO,EAAEslI,OAAO3zI,GAAM,MAAO,CAAC,IAAO03B,EAAG,IAAOkmM,GAAxjB,GACjB20C,EAAQ,OAAS,WAAa,IAA4BnmQ,EAAxBiC,EAAI,GAAIqpB,EAAI,GAAIkmM,EAAI,GAEtD,IADAA,EAAE,GAAK,4QAAiZhtN,MAAM,IAC1ZxE,EAAI,EAAGA,GAAKwxN,EAAE,GAAG79N,SAAUqM,EAAgC,QAA1BwxN,EAAE,GAAGxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,GAAGxxN,IAAM,EAAIA,EAAGiC,EAAE,EAAIjC,GAAKwxN,EAAE,GAAGxxN,IAE7G,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAE7H,IADAwxN,EAAE,KAAO,mQAAmQhtN,MAAM,IAC9QxE,EAAI,EAAGA,GAAKwxN,EAAE,KAAK79N,SAAUqM,EAAkC,QAA5BwxN,EAAE,KAAKxxN,GAAG6xB,WAAW,KAAiBvG,EAAEkmM,EAAE,KAAKxxN,IAAM,MAAQA,EAAGiC,EAAE,MAAQjC,GAAKwxN,EAAE,KAAKxxN,IAC7H,MAAO,CAAC,IAAOsrB,EAAG,IAAOrpB,GArKR,GAsKjBkkQ,EAAQ,OAAS,WAAub,IAA1a,IAAIlkQ,EAAI,4QAAkZuvN,EAAI,GAAIlmM,EAAI,GAAY13B,EAAE,EAAEA,GAAGqO,EAAEtO,SAASC,EAA4B,QAApBqO,EAAE4vB,WAAWj+B,KAAe03B,EAAErpB,EAAEslI,OAAO3zI,IAAMA,GAAG49N,EAAE59N,GAAKqO,EAAEslI,OAAO3zI,GAAM,MAAO,CAAC,IAAO03B,EAAG,IAAOkmM,GAAxjB,GACjB20C,EAAQ,OAAS,WAAub,IAA1a,IAAIlkQ,EAAI,4QAAkZuvN,EAAI,GAAIlmM,EAAI,GAAY13B,EAAE,EAAEA,GAAGqO,EAAEtO,SAASC,EAA4B,QAApBqO,EAAE4vB,WAAWj+B,KAAe03B,EAAErpB,EAAEslI,OAAO3zI,IAAMA,GAAG49N,EAAE59N,GAAKqO,EAAEslI,OAAO3zI,GAAM,MAAO,CAAC,IAAO03B,EAAG,IAAOkmM,GAAxjB,GACjB20C,EAAQ,OAAS,WAAub,IAA1a,IAAIlkQ,EAAI,4QAAkZuvN,EAAI,GAAIlmM,EAAI,GAAY13B,EAAE,EAAEA,GAAGqO,EAAEtO,SAASC,EAA4B,QAApBqO,EAAE4vB,WAAWj+B,KAAe03B,EAAErpB,EAAEslI,OAAO3zI,IAAMA,GAAG49N,EAAE59N,GAAKqO,EAAEslI,OAAO3zI,GAAM,MAAO,CAAC,IAAO03B,EAAG,IAAOkmM,GAAxjB,GAEoBj+N,EAAOC,SAA6C,oBAA3B4yQ,yBAAwC7yQ,EAAOC,QAAU2yQ,GAItH,SAASniD,EAAM/nM,GAGd,aACA,QAAsB,IAAZkqP,EAAyB,CAE/B,IAAIE,EAAMF,EAC2B5yQ,EAAOC,SAA6C,oBAA3B4yQ,uBAAwC7yQ,EAAOC,QAAUyoB,EAAQoqP,GAC1HriD,EAAKmiD,QAAUlqP,EAAQoqP,QAEzBF,EAAUlqP,EAAQkqP,GAV3B,CAaEjxQ,MAAM,SAASmxQ,GACf,aAEA,IAAIC,EAAQ,CACV,KAAO,UACP,KAAO,UACP,KAAQ,UACR,MAAQ,UACR,MAAQ,UACR,MAAQ,QACR,KAAQ,OACR,MAAQ,QAGNC,EAAa,CAAC,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KACrDC,EAAa,CAAC,IAAI,IAAI,IAAI,KAC1BC,EAAc,CAAC,OACfC,EAAe,GACfC,EAAe,GACfC,EAAW,GACXC,EAAW,GAEXC,EAAO,SAAcnrQ,GAAK,OAAOyF,OAAO0vB,aAAan1B,IACrDorQ,EAAM,SAAaprQ,GAAK,OAAOA,EAAEk2B,WAAW,IAE5Cm1O,EAA6B,oBAAXp9O,OAClBq9O,EAAc,aAClB,GAAGD,EAAS,CACV,IAAIE,GAAQt9O,OAAO/xB,KACnB,IAAIqvQ,EAAM,IAAMt9O,OAAO/xB,KAAK,MAAO,QAAW,MAAMyzB,GAAK47O,GAAO,EAChED,EAAcC,EAAO,SAASr2O,EAAKs2O,GAAO,OAAO,EAAQ,IAAIv9O,OAAOiH,EAAKs2O,GAAO,IAAIv9O,OAAOiH,IAAUjH,OAAO/xB,KAAKs1F,KAAKvjE,QAElHA,OAAO4zM,cAAa5zM,OAAO4zM,YAAc,SAASnkO,GAAK,OAAO,IAAIuwB,OAAOvwB,KAE7E,IAAI+tQ,EAAM,KAAMC,EAAMz9O,OAAO4zM,YAAY4pC,GAWrCE,EAAc,SAA0BC,GAC1C,IAAIC,EAXQ,SAAiBziD,GAE7B,IADA,IAAIyiD,EAAK59O,OAAO4zM,YAAY,OACpB5pO,EAAI,EAAGA,EAAI,QAAQA,EAAG4zQ,EAAG5zQ,GAAK,EAEtC,IADA,IAAIooB,EAAO9lB,OAAO8lB,KAAK+oM,GAAIrxN,EAAMsoB,EAAKroB,OAC9B8zQ,EAAK,EAAGn8O,EAAItP,EAAKyrP,GAAKA,EAAK/zQ,IAAO+zQ,GACnCn8O,EAAItP,EAAKyrP,MACdD,EAAGl8O,EAAEuG,WAAW,IAAMkzL,EAAEz5L,IAE1B,OAAOk8O,EAGEE,CAAQrB,EAAIkB,GAAIJ,KACzB,OAAO,SAAgBttQ,EAAM8tQ,GAC3B,IACI3oP,EADAtrB,EAAMmG,EAAKlG,OACNC,EAAE,EAAGoM,EAAE,EAAGwxN,EAAE,EAAGzrK,EAAE,EAC1B,GAAmB,iBAATlsD,EAER,IADAmlB,EAAM4K,OAAO4zM,YAAY9pO,GACrBE,EAAI,EAAGA,EAAIF,IAAOE,EAAGorB,EAAIprB,GAAK4zQ,EAAG3tQ,EAAKg4B,WAAWj+B,SAChD,GAAGg2B,OAAO2rM,SAAS17N,GAAO,CAG/B,IAFAmlB,EAAM4K,OAAO4zM,YAAY,EAAE9pO,GAC3BsM,EAAI,EACApM,EAAI,EAAGA,EAAIF,IAAOE,GACpB49N,EAAI33N,EAAKjG,IACF,IAAKorB,EAAIhf,KAAOwnQ,EAAGh2C,GAClBA,EAAI,KAAOxyM,EAAIhf,KAAOwnQ,IAAO,GAAFh2C,IAAO,IAAc,GAAV33N,EAAKjG,EAAE,OAAWA,GACxD49N,EAAI,KAAOxyM,EAAIhf,KAAOwnQ,IAAO,GAAFh2C,IAAO,MAAgB,GAAV33N,EAAKjG,EAAE,KAAQ,IAAc,GAAViG,EAAKjG,EAAE,KAASA,GAAG,IAEpFmyD,IAAQ,EAAFyrK,IAAM,MAAgB,GAAV33N,EAAKjG,EAAE,KAAQ,MAAgB,GAAViG,EAAKjG,EAAE,KAAQ,IAAc,GAAViG,EAAKjG,EAAE,IAAQA,GAAG,EACzEmyD,EAAI,MAAO/mC,EAAIhf,KAAOwnQ,EAAGzhN,IACrBA,GAAK,MAAO/mC,EAAIhf,KAAOwnQ,EAAG,OAAWzhN,GAAG,GAAI,OAAQ/mC,EAAIhf,KAAOwnQ,EAAG,OAAY,KAAFzhN,MAGvF/mC,EAAMA,EAAIzlB,MAAM,EAAEyG,QAGlB,IADAgf,EAAM4K,OAAO4zM,YAAY9pO,GACrBE,EAAI,EAAGA,EAAIF,IAAOE,EAAGorB,EAAIprB,GAAK4zQ,EAAG3tQ,EAAKjG,GAAGi+B,WAAW,IAE1D,OAAI81O,GAAiB,QAATA,EACA,QAATA,EAAuB3oP,EAAI1lB,SAAS,UAChC,GAAGC,MAAMvC,KAAKgoB,GAFcA,IAKnC4oP,EAAc,SAA0BL,GAC1C,IAAI/1C,EAAI60C,EAAIkB,GAAIx1C,IACZ81C,EAAKj+O,OAAO4zM,YAAY,QAASv7N,EAAE,EAAGI,EAAE,GAC5C,IAAIJ,EAAE,EAAEA,EAAEuvN,EAAE79N,SAASsO,EACnB,GAAKI,EAAEmvN,EAAEvvN,GAAT,CACA,IAAI8jD,EAAI1jD,EAAEwvB,WAAW,GACrBg2O,EAAG,EAAE5lQ,GAAO,IAAF8jD,EAAO8hN,EAAG,EAAE5lQ,EAAE,GAAK8jD,GAAG,EAElC,OAAO,SAAgBlsD,GACrB,IAAInG,EAAMmG,EAAKlG,OAAQC,EAAE,EAAGoM,EAAE,EAE9B,GADG,EAAItM,EAAM0zQ,IAAOA,EAAM,EAAI1zQ,EAAK2zQ,EAAMz9O,OAAO4zM,YAAY4pC,IACzDx9O,OAAO2rM,SAAS17N,GACjB,IAAIjG,EAAI,EAAGA,EAAIF,EAAKE,IAClBoM,EAAI,EAAEnG,EAAKjG,GACXyzQ,EAAI,EAAEzzQ,GAAKi0Q,EAAG7nQ,GAAIqnQ,EAAI,EAAEzzQ,EAAE,GAAKi0Q,EAAG7nQ,EAAE,QAEjC,GAAmB,iBAATnG,EACf,IAAIjG,EAAI,EAAGA,EAAIF,EAAKE,IAClBoM,EAAI,EAAEnG,EAAKg4B,WAAWj+B,GACtByzQ,EAAI,EAAEzzQ,GAAKi0Q,EAAG7nQ,GAAIqnQ,EAAI,EAAEzzQ,EAAE,GAAKi0Q,EAAG7nQ,EAAE,QAGtC,IAAIpM,EAAI,EAAGA,EAAIF,EAAKE,IAClBoM,EAAI,EAAEnG,EAAKjG,GACXyzQ,EAAI,EAAEzzQ,GAAKi0Q,EAAG7nQ,GAAIqnQ,EAAI,EAAEzzQ,EAAE,GAAKi0Q,EAAG7nQ,EAAE,GAGxC,OAAOqnQ,EAAI9tQ,MAAM,EAAG,EAAI7F,GAAK4F,SAAS,UAGtCwuQ,EAAc,SAA0BP,GAG1C,IAFA,IAAIxiD,EAAIshD,EAAIkB,GAAIJ,IACZK,EAAK59O,OAAO4zM,YAAY,QACpB5pO,EAAI,EAAGA,EAAI,SAAUA,EAAG4zQ,EAAG5zQ,GAAK,EAExC,IADA,IAAIooB,EAAO9lB,OAAO8lB,KAAK+oM,GACf0iD,EAAK,EAAGn8O,EAAItP,EAAKyrP,GAAKA,EAAKzrP,EAAKroB,SAAU8zQ,EAChD,GAAKn8O,EAAItP,EAAKyrP,GAAd,CACA,IAAIltQ,EAAI+wB,EAAEuG,WAAW,GACrB21O,EAAG,EAAEjtQ,GAAY,IAAPwqN,EAAEz5L,GAAUk8O,EAAG,EAAEjtQ,EAAE,GAAKwqN,EAAEz5L,IAAI,EAE1C,OAAO,SAAgBzxB,EAAM8tQ,GAC3B,IAAIj0Q,EAAMmG,EAAKlG,OAAQqrB,EAAM4K,OAAO4zM,YAAY,EAAE9pO,GAAME,EAAE,EAAGoM,EAAE,EAAG+nQ,EAAG,EAAGtuP,EAAE,EAAG+3M,EAAE,EAC/E,GAAmB,iBAAT33N,EAAmB,CAC3B,IAAIjG,EAAI6lB,EAAI,EAAG7lB,EAAIF,IAAOE,EACxBoM,EAAuB,EAAnBnG,EAAKg4B,WAAWj+B,GACpBorB,EAAIvF,KAAO+tP,EAAGxnQ,EAAE,IAAMwnQ,EAAGxnQ,GAAOwnQ,EAAGxnQ,EAAE,GAAK,IAAGgf,EAAIvF,KAAO+tP,EAAGxnQ,IAE7Dgf,EAAMA,EAAIzlB,MAAM,EAAEkgB,QACb,GAAGmQ,OAAO2rM,SAAS17N,GAAO,CAC/B,IAAIjG,EAAI6lB,EAAI,EAAG7lB,EAAIF,IAAOE,GACxB49N,EAAI33N,EAAKjG,IACF,IAAKoM,EAAIwxN,EACRA,EAAI,KAAOxxN,IAAQ,GAAFwxN,IAAO,IAAc,GAAV33N,EAAKjG,EAAE,MAAUA,GAC7C49N,EAAI,KAAOxxN,IAAQ,GAAFwxN,IAAO,MAAgB,GAAV33N,EAAKjG,EAAE,KAAQ,IAAc,GAAViG,EAAKjG,EAAE,IAAQA,GAAG,IACpEoM,IAAQ,EAAFwxN,IAAM,MAAgB,GAAV33N,EAAKjG,EAAE,KAAQ,MAAgB,GAAViG,EAAKjG,EAAE,KAAQ,IAAc,GAAViG,EAAKjG,EAAE,IAAQA,GAAG,GAChFoM,EAAE,OAASA,GAAG,EAAGgf,EAAIvF,KAAO+tP,EAAGxnQ,EAAE,IAAMwnQ,EAAGxnQ,GAAOwnQ,EAAGxnQ,EAAE,GAAK,IAAGgf,EAAIvF,KAAO+tP,EAAGxnQ,MAE7EA,EAAE,GAAG,QADA+nQ,EAAK/nQ,EAAE,QACQ,GAAI,OAAQgf,EAAIvF,KAAO+tP,EAAGxnQ,EAAE,IAAMwnQ,EAAGxnQ,GAAOwnQ,EAAGxnQ,EAAE,GAAK,IAAGgf,EAAIvF,KAAO+tP,EAAGxnQ,IAC3FA,EAAE,GAAG,OAAa,KAAH+nQ,IAAW/oP,EAAIvF,KAAO+tP,EAAGxnQ,EAAE,IAAMwnQ,EAAGxnQ,GAAOwnQ,EAAGxnQ,EAAE,GAAK,IAAGgf,EAAIvF,KAAO+tP,EAAGxnQ,KAGzFgf,EAAMA,EAAIzlB,MAAM,EAAEkgB,QAElB,IAAI7lB,EAAI6lB,EAAI,EAAG7lB,EAAIF,EAAKE,IACtBoM,EAA0B,EAAtBnG,EAAKjG,GAAGi+B,WAAW,GACvB7S,EAAIvF,KAAO+tP,EAAGxnQ,EAAE,IAAMwnQ,EAAGxnQ,GAAOwnQ,EAAGxnQ,EAAE,GAAK,IAAGgf,EAAIvF,KAAO+tP,EAAGxnQ,IAG/D,OAAI2nQ,GAAiB,QAATA,EACA,QAATA,EAAuB3oP,EAAI1lB,SAAS,UAChC,GAAGC,MAAMvC,KAAKgoB,GAFcA,IAKnCgpP,EAAc,SAA0BT,GAC1C,IAC0CllQ,EADtCmvN,EAAI60C,EAAIkB,GAAIx1C,IACZ81C,EAAKj+O,OAAO4zM,YAAY,QAASv7N,EAAE,EAAM8jD,EAAE,EAAG/lD,EAAE,EAAGpM,EAAE,EACzD,IAAIA,EAAI,EAAGA,EAAI,QAASA,EAAKi0Q,EAAG,EAAEj0Q,GAAK,IAAMi0Q,EAAG,EAAEj0Q,EAAE,GAAK,IACzD,IAAIqO,EAAI,EAAGA,EAAIuvN,EAAE79N,SAAUsO,GACpBI,EAAEmvN,EAAEvvN,MACT8jD,EAAI1jD,EAAEwvB,WAAW,GAEjBg2O,EADA7nQ,EAAI,EAAEiC,GACI,IAAF8jD,EAAO8hN,EAAG7nQ,EAAE,GAAK+lD,GAAG,GAE9B,OAAO,SAAgBlsD,GACrB,IAAInG,EAAMmG,EAAKlG,OAAQqrB,EAAM4K,OAAO4zM,YAAY,EAAE9pO,GAAME,EAAE,EAAGoM,EAAE,EAAGyZ,EAAE,EACpE,GAAGmQ,OAAO2rM,SAAS17N,GACjB,IAAIjG,EAAI,EAAGA,EAAIF,EAAKE,IAClBoM,EAAI,EAAEnG,EAAKjG,GACA,MAARi0Q,EAAG7nQ,IAAuB,MAAV6nQ,EAAG7nQ,EAAE,KAAaA,EAAE,IAAInG,EAAKjG,IAAI,GAAGiG,EAAKjG,EAAE,MAAOA,GACrEorB,EAAIvF,KAAOouP,EAAG7nQ,GAAIgf,EAAIvF,KAAOouP,EAAG7nQ,EAAE,QAE/B,GAAmB,iBAATnG,EACf,IAAIjG,EAAI,EAAGA,EAAIF,EAAKE,IAClBoM,EAAI,EAAEnG,EAAKg4B,WAAWj+B,GACX,MAARi0Q,EAAG7nQ,IAAuB,MAAV6nQ,EAAG7nQ,EAAE,KAAaA,EAAE,IAAInG,EAAKg4B,WAAWj+B,IAAI,GAAGiG,EAAKg4B,WAAWj+B,EAAE,MAAOA,GAC3ForB,EAAIvF,KAAOouP,EAAG7nQ,GAAIgf,EAAIvF,KAAOouP,EAAG7nQ,EAAE,QAGpC,IAAIpM,EAAI,EAAGA,EAAIF,EAAKE,IAClBoM,EAAI,EAAEnG,EAAKjG,GACA,MAARi0Q,EAAG7nQ,IAAuB,MAAV6nQ,EAAG7nQ,EAAE,KAAaA,EAAE,IAAInG,EAAKjG,IAAI,GAAGiG,EAAKjG,EAAE,MAAOA,GACrEorB,EAAIvF,KAAOouP,EAAG7nQ,GAAIgf,EAAIvF,KAAOouP,EAAG7nQ,EAAE,GAGtC,OAAOgf,EAAIzlB,MAAM,EAAEkgB,GAAGngB,SAAS,UAGnCotQ,EAAa,OAAS,SAASuB,EAAOpuQ,GACpC,GAAmB,iBAATA,EAAmB,OAAOouQ,EAAOpuQ,EAAK2K,MAAM,IAAIlF,IAAIynQ,IAC9D,IAAIrzQ,EAAMmG,EAAKlG,OAAQoyD,EAAI,EAAGmiN,EAAK,EAChC,EAAIx0Q,EAAM0zQ,IAAOA,EAAM,EAAI1zQ,EAAK2zQ,EAAMz9O,OAAO4zM,YAAY4pC,IAC5D,IAAIxzQ,EAAI,EACLF,GAAO,GAAgB,KAAXmG,EAAK,IAA0B,KAAXA,EAAK,IAAyB,KAAXA,EAAK,KAAYjG,EAAI,GAC3E,IAAI,IAAIoM,EAAI,EAAGyZ,EAAI,EAAG+3M,EAAI,EAAG59N,EAAIF,EAAKE,GAAGoM,EACvCA,EAAI,GAAGwxN,EAAI33N,EAAKjG,IACT,IAAKmyD,EAAIyrK,EACRA,EAAI,KAAOzrK,EAAS,IAAJ,GAAFyrK,IAAoB,GAAV33N,EAAKjG,EAAE,IAAQoM,EAAE,GACzCwxN,EAAI,KAAOzrK,IAAM,GAAFyrK,IAAO,IAAmB,IAAJ,GAAV33N,EAAKjG,EAAE,KAAqB,GAAViG,EAAKjG,EAAE,IAAQoM,EAAE,IAC/D+lD,EAAQ,QAAH,EAAFyrK,KAAwB,GAAV33N,EAAKjG,EAAE,KAAQ,IAAmB,IAAJ,GAAViG,EAAKjG,EAAE,KAAqB,GAAViG,EAAKjG,EAAE,IAAQoM,EAAE,GAC5E+lD,EAAI,OAASshN,EAAI5tP,KAAS,IAAFssC,EAAOshN,EAAI5tP,KAAOssC,GAAG,IAElCmiN,EAAK,QAAjBniN,GAAK,QAA0B,GAAI,MAAOA,EAAI,OAAY,KAAFA,GACxDshN,EAAI5tP,KAAU,IAAHyuP,EAAQb,EAAI5tP,KAAOyuP,IAAK,EAAGb,EAAI5tP,KAAS,IAAFssC,EAAOshN,EAAI5tP,KAAQssC,IAAI,EAAG,KAG/E,OAAOshN,EAAI9tQ,MAAM,EAAEkgB,GAAGngB,SAAS,SAEjCqtQ,EAAa,OAAS,SAAgB9sQ,EAAM8tQ,GAC1C,GAAGX,GAAWp9O,OAAO2rM,SAAS17N,GAC5B,OAAI8tQ,GAAiB,QAATA,EACA,QAATA,EAAuB9tQ,EAAKP,SAAS,UACjC,GAAGC,MAAMvC,KAAK6C,GAFcA,EAIrC,IAAInG,EAAMmG,EAAKlG,OAAQoyD,EAAI,EAAGmiN,EAAK,EAAGloQ,EAAI,EACtCmoQ,EAAyB,iBAATtuQ,EACjB,EAAInG,EAAM0zQ,IAAOA,EAAM,EAAI1zQ,EAAK2zQ,EAAMz9O,OAAO4zM,YAAY4pC,IAC5D,IAAI,IAAIxzQ,EAAI,EAAGA,EAAIF,IAAOE,GACxBmyD,EAAIoiN,EAAStuQ,EAAKg4B,WAAWj+B,GAAKiG,EAAKjG,GAAGi+B,WAAW,KAC7C,IAAQw1O,EAAIrnQ,KAAO+lD,EACnBA,GAAK,MACXshN,EAAIrnQ,KAAO,KAAO+lD,GAAK,GACvBshN,EAAIrnQ,KAAO,KAAS,GAAF+lD,IACVA,GAAK,OAAUA,GAAK,OAC5BA,GAAK,QAAUnyD,EACfs0Q,GAAMC,EAAStuQ,EAAKg4B,WAAWj+B,GAAKiG,EAAKjG,GAAGi+B,WAAW,IAAM,OAAUk0B,GAAK,IAC5EshN,EAAIrnQ,KAAO,KAAQkoQ,IAAK,GAAM,GAC9Bb,EAAIrnQ,KAAO,KAAQkoQ,IAAK,GAAM,IAC9Bb,EAAIrnQ,KAAO,KAAQkoQ,IAAK,EAAK,IAC7Bb,EAAIrnQ,KAAO,KAAY,GAALkoQ,KAElBb,EAAIrnQ,KAAO,KAAO+lD,GAAK,IACvBshN,EAAIrnQ,KAAO,KAAQ+lD,GAAK,EAAG,IAC3BshN,EAAIrnQ,KAAO,KAAS,GAAF+lD,IAGtB,OAAI4hN,GAAiB,QAATA,EACA,QAATA,EAAuBN,EAAI9tQ,MAAM,EAAEyG,GAAG1G,SAAS,UAC3C,GAAGC,MAAMvC,KAAKqwQ,EAAK,EAAGrnQ,GAFMqnQ,EAAI9tQ,MAAM,EAAEyG,IAMnD,IAAIooQ,EAAU,WACZ,GAAGpB,EAAS,CACV,GAAGJ,EAASL,EAAW,IAAK,OAC5B,IAAI3yQ,EAAE,EAAG2L,EAAE,EACX,IAAI3L,EAAI,EAAGA,EAAI2yQ,EAAW5yQ,SAAUC,EAClC2L,EAAIgnQ,EAAW3yQ,GACZyyQ,EAAI9mQ,KACLqnQ,EAASrnQ,GAAKqoQ,EAAYroQ,GAC1BsnQ,EAAStnQ,GAAK+nQ,EAAY/nQ,IAG9B,IAAI3L,EAAI,EAAGA,EAAI4yQ,EAAW7yQ,SAAUC,EAClC2L,EAAIinQ,EAAW5yQ,GACZyyQ,EAAI9mQ,KACLqnQ,EAASrnQ,GAAKyoQ,EAAYzoQ,GAC1BsnQ,EAAStnQ,GAAKuoQ,EAAYvoQ,IAG9B,IAAI3L,EAAI,EAAGA,EAAI6yQ,EAAY9yQ,SAAUC,EACnC2L,EAAIknQ,EAAY7yQ,GACb8yQ,EAAannQ,KAAIqnQ,EAASrnQ,GAAKmnQ,EAAannQ,IAC5ConQ,EAAapnQ,KAAIsnQ,EAAStnQ,GAAKonQ,EAAapnQ,MAIjD8oQ,EAAW,SAASxuQ,EAAM8tQ,GAAmB,MAAO,IACpDW,EAAa,SAAoBf,UAAaX,EAASW,UAAYV,EAASU,IAU5Ev5H,EAAQ,CACVo6H,QAASA,EACTG,QAXY,WACZ,GAAGvB,EAAS,CACV,IAAIJ,EAASL,EAAW,IAAK,OAC7BA,EAAWrlQ,QAAQonQ,GACnB9B,EAAWtlQ,QAAQonQ,GACnB7B,EAAYvlQ,QAAQonQ,GAEtBE,EAAWH,EAAUI,EAAU,GAK/BC,KAAMnC,EACNoC,KAAMnC,GAGR4B,IAEA,IAAIQ,EAAK,mEAELJ,EAAWH,EAAUI,EAAU,EAiOnC,OADApC,EAAIjiE,MAAQ,CAAElyL,OAvHD,SAASA,EAAOq1P,EAAI1tQ,GAC/B,IAAIgvQ,EAAG,GAAIA,EAAEjC,EAASW,GAAM,OAAOsB,EAAEhvQ,GACrC,GAAmB,iBAATA,EAAmB,OAAOqY,EAAOq1P,EAAI1tQ,EAAK2K,MAAM,IAAIlF,IAAIynQ,IAClE,IACiBv1C,EADb99N,EAAMmG,EAAKlG,OAAQqrB,EAAM,IAAIlrB,MAAMJ,GAAM6L,EAAE,GAAIwmD,EAAE,EAAGnyD,EAAE,EAAGoM,EAAE,EAAGyZ,EAAE,EAAGyuP,EAAG,EACtEprD,EAAIupD,EAAIkB,GAAQjkM,EAAE,GACtB,GAAGw5I,IAAM0U,EAAE1U,EAAEiV,KACX,IAAIn+N,EAAI,EAAGA,EAAIF,EAAKE,GAAGoM,EAAG,CAOxB,GANAA,EAAI,GACJT,EAAIiyN,GAAG33N,EAAKjG,IAAI,GAAIiG,EAAKjG,EAAE,OAEzBoM,EAAI,EACJT,EAAIiyN,EAAE33N,EAAKjG,MAET2L,EAAG,MAAM,IAAIxE,MAAM,sBAAwBlB,EAAKjG,GAAK,IAAMiG,EAAKjG,EAAEoM,EAAE,GAAK,IAAMpM,EAAI,IAAMoM,EAAI,IAAMwxN,EAAE33N,EAAKjG,KAC9GorB,EAAIvF,KAAOla,MAGV,MAAI+jE,EAAEgjM,EAAMiB,IAkGZ,MAAM,IAAIxsQ,MAAM,oBAAsBwsQ,GAlGpB,OAAOjkM,GAC5B,IAAK,OAEH,IADG5vE,GAAO,GAAgB,KAAXmG,EAAK,IAA0B,KAAXA,EAAK,IAAyB,KAAXA,EAAK,KAAYjG,EAAI,GACrEA,EAAIF,EAAKE,GAAGoM,EAChBA,EAAI,EACDnG,EAAKjG,GAAK,IAAKmyD,EAAIlsD,EAAKjG,GACnBiG,EAAKjG,GAAK,KAAOmyD,EAAe,IAAJ,GAARlsD,EAAKjG,KAAqB,GAAViG,EAAKjG,EAAE,IAAQoM,EAAE,GACrDnG,EAAKjG,GAAK,KAAOmyD,IAAY,GAARlsD,EAAKjG,KAAQ,IAAmB,IAAJ,GAAViG,EAAKjG,EAAE,KAAqB,GAAViG,EAAKjG,EAAE,IAAQoM,EAAE,IAC3E+lD,EAAc,QAAH,EAARlsD,EAAKjG,MAAyB,GAAViG,EAAKjG,EAAE,KAAQ,IAAmB,IAAJ,GAAViG,EAAKjG,EAAE,KAAqB,GAAViG,EAAKjG,EAAE,IAAQoM,EAAE,GAClF+lD,EAAI,QAEOmiN,EAAK,QAAjBniN,GAAK,QAA0B,GAAI,MAAOA,EAAI,OAAY,KAAFA,GACxD/mC,EAAIvF,KAAOrY,OAAO0vB,aAAao3O,IAHjBlpP,EAAIvF,KAAOrY,OAAO0vB,aAAai1B,GAMjD,MACF,IAAK,QACH,GAAGihN,GAAWp9O,OAAO2rM,SAAS17N,GAAO,OAAOA,EAAKP,SAASgqE,GAC1D,IAAI1vE,EAAI,EAAGA,EAAIF,EAAKE,IAAKorB,EAAIprB,GAAKwN,OAAO0vB,aAAaj3B,EAAKjG,IAC3D6lB,EAAI/lB,EAAK,MACX,IAAK,UAEH,GADGA,GAAO,GAAgB,KAAXmG,EAAK,IAA0B,KAAXA,EAAK,KAAYjG,EAAI,GACrDozQ,GAAWp9O,OAAO2rM,SAAS17N,GAAO,OAAOA,EAAKP,SAASgqE,GAE1D,IADAtjE,EAAI,EACEpM,EAAE,EAAIF,EAAKE,GAAGoM,EAClBgf,EAAIvF,KAAOrY,OAAO0vB,cAAcj3B,EAAKjG,EAAE,IAAI,GAAKiG,EAAKjG,IAEvD,MACF,IAAK,UAGH,IAFGF,GAAO,GAAgB,KAAXmG,EAAK,IAA0B,KAAXA,EAAK,KAAYjG,EAAI,GACxDoM,EAAI,EACEpM,EAAE,EAAIF,EAAKE,GAAGoM,EAClBgf,EAAIvF,KAAOrY,OAAO0vB,cAAcj3B,EAAKjG,IAAI,GAAKiG,EAAKjG,EAAE,IAEvD,MACF,IAAK,UAGH,IAFGF,GAAO,GAAgB,KAAXmG,EAAK,IAA0B,KAAXA,EAAK,IAA0B,IAAZA,EAAK,IAAwB,IAAZA,EAAK,KAAUjG,EAAI,GAC1FoM,EAAI,EACEpM,EAAIF,EAAKE,GAAGoM,GAChB+lD,GAAKlsD,EAAKjG,EAAE,IAAI,KAAOiG,EAAKjG,EAAE,IAAI,KAAOiG,EAAKjG,EAAE,IAAI,GAAMiG,EAAKjG,IACxD,OACLmyD,GAAK,MACL/mC,EAAIvF,KAAOrY,OAAO0vB,aAAa,OAAWi1B,GAAK,GAAM,OACrD/mC,EAAIvF,KAAOrY,OAAO0vB,aAAa,OAAc,KAAJi1B,KAEtC/mC,EAAIvF,KAAOrY,OAAO0vB,aAAai1B,GAEtC,MACF,IAAK,UAGH,IAFGryD,GAAO,GAAgB,KAAXmG,EAAK,IAA0B,KAAXA,EAAK,IAA0B,IAAZA,EAAK,IAAwB,IAAZA,EAAK,KAAUjG,EAAI,GAC1FoM,EAAI,EACEpM,EAAIF,EAAKE,GAAGoM,GAChB+lD,GAAKlsD,EAAKjG,IAAI,KAAOiG,EAAKjG,EAAE,IAAI,KAAOiG,EAAKjG,EAAE,IAAI,GAAMiG,EAAKjG,EAAE,IACxD,OACLmyD,GAAK,MACL/mC,EAAIvF,KAAOrY,OAAO0vB,aAAa,OAAWi1B,GAAK,GAAM,OACrD/mC,EAAIvF,KAAOrY,OAAO0vB,aAAa,OAAc,KAAJi1B,KAEtC/mC,EAAIvF,KAAOrY,OAAO0vB,aAAai1B,GAEtC,MACF,IAAK,OAKH,IAJGryD,GAAO,GAAgB,IAAXmG,EAAK,IAAyB,IAAXA,EAAK,IAAyB,KAAXA,EAAK,KACrDnG,GAAO,GAAgB,IAAXmG,EAAK,IAAyB,IAAXA,EAAK,GAAYjG,EAAI,EACpC,IAAXiG,EAAK,IAAyB,IAAXA,EAAK,IAAyB,IAAXA,EAAK,IAAyB,IAAXA,EAAK,KAAYjG,EAAI,IAElFA,EAAIF,EAAKE,GAAGoM,EAChB,GAAe,KAAZnG,EAAKjG,GAER,GADAoM,EAAE,EACe,KAAdnG,EAAKjG,EAAE,GAAV,CAEA,KAAMwN,OAAO0vB,aAAaj3B,EAAKjG,EAAEoM,IAAI08B,MAAM,mBAAmB18B,IAC9D,IAAI8oQ,EAAO,EACM,KAAdjvQ,EAAKjG,EAAEoM,OAAiBA,EAAG8oQ,EAAK,GAKnC,IAJA,IAAIC,EAAK,GACLC,EAAM,GACNhpM,EAAG,EAAGC,EAAG,EAAGgpM,EAAG,EACTC,EAAG,EAAGC,EAAG,EAAGC,EAAG,EACjBv0P,EAAI,EAAGA,EAAI7U,EAAI8oQ,IAGrB9oM,EAFK4oM,EAAGriP,QAAQnlB,OAAO0vB,aAAaj3B,EAAKjG,EAAEihB,QAEhC,GADXq0P,EAAKN,EAAGriP,QAAQnlB,OAAO0vB,aAAaj3B,EAAKjG,EAAEihB,SACtB,EACrBk0P,EAAG1wQ,KAAK2nE,IAEG,KADXmpM,EAAKP,EAAGriP,QAAQnlB,OAAO0vB,aAAaj3B,EAAKjG,EAAEihB,WAE3CorD,GAAW,GAALipM,IAAY,EAAIC,GAAM,EAC5BJ,EAAG1wQ,KAAK4nE,IAEG,KADXmpM,EAAKR,EAAGriP,QAAQnlB,OAAO0vB,aAAaj3B,EAAKjG,EAAEihB,UAE3Co0P,GAAW,EAALE,IAAW,EAAIC,EAClBA,EAAK,IAAIL,EAAG1wQ,KAAK4wQ,GAGtB,IADAD,EAAM92P,EAAO,KAAM62P,GACfl0P,EAAI,EAAGA,EAAIm0P,EAAIr1Q,SAAUkhB,EAAGmK,EAAIvF,KAAOuvP,EAAIzhI,OAAO1yH,QAxB7B7U,EAAI,EAAGgf,EAAIvF,KAAO,SAFpBzZ,EAAE,EAAGgf,EAAIvF,KAAOrY,OAAO0vB,aAAaj3B,EAAKjG,IA4BlE,MACF,QAAS,MAAM,IAAImH,MAAM,sBAAwBwsQ,EAAK,IAAMjB,EAAMiB,KAGpE,OAAOvoP,EAAIzlB,MAAM,EAAEkgB,GAAGvU,KAAK,KAGC8M,OA/NjB,SAASA,EAAOu1P,EAAI1tQ,EAAM8tQ,GACrC,GAAGJ,IAAOkB,GAAWD,EAAY,OAAOA,EAAS3uQ,EAAM8tQ,GACvD,GAAGd,EAASU,GAAwC,OAAjCiB,EAAW3B,EAAS4B,EAAQlB,IAAqB1tQ,EAAM8tQ,GACvEX,GAAWp9O,OAAO2rM,SAAS17N,KAAOA,EAAOA,EAAKP,SAAS,SAC1D,IAEiByrN,EAFbrxN,EAAMmG,EAAKlG,OACXqrB,EAAMgoP,EAAUp9O,OAAO4zM,YAAY,EAAE9pO,GAAO,GAAIqyD,EAAE,EAAGnyD,EAAE,EAAGoM,EAAI,EAAGkoQ,EAAG,EACpEprD,EAAIupD,EAAIkB,GAAQjkM,EAAI,GACpB+lM,EAAwB,iBAATxvQ,EACnB,GAAGijN,IAAMiI,EAAEjI,EAAEqqD,KAAM,IAAIvzQ,EAAI,EAAGA,EAAIF,IAAOE,IAAKoM,GAC5C+lD,EAAIg/J,EAAEskD,EAAOxvQ,EAAK0tI,OAAO3zI,GAAKiG,EAAKjG,KAC5B,KACLorB,EAAIhf,GAAK+lD,GAAG,EACZ/mC,IAAMhf,GAAO,IAAF+lD,GACN/mC,EAAIhf,GAAO,IAAF+lD,MAEb,MAAIud,EAAEgjM,EAAMiB,IAkFZ,MAAM,IAAIxsQ,MAAM,oBAAsBwsQ,GAlFpB,OAAOjkM,GAC5B,IAAK,OACH,GAAG0jM,GAAWqC,EAAO,CAA8BrpQ,GAA5Bgf,EAAMioP,EAAYptQ,EAAMypE,IAAY3vE,OAAQ,MACnE,IAAIC,EAAI,EAAGA,EAAIF,IAAOE,IAAKoM,GACzB+lD,EAAIsjN,EAAQxvQ,EAAKg4B,WAAWj+B,GAAKiG,EAAKjG,GAAGi+B,WAAW,KAC5C,IAAQ7S,EAAIhf,GAAK+lD,EACjBA,GAAK,MACX/mC,EAAIhf,GAAO,KAAO+lD,GAAK,GACvB/mC,IAAMhf,GAAK,KAAS,GAAF+lD,IACVA,GAAK,OAAUA,GAAK,OAC5BA,GAAK,MACLmiN,GAAMmB,EAAQxvQ,EAAKg4B,aAAaj+B,GAAKiG,IAAOjG,GAAGi+B,WAAW,IAAM,OAAUk0B,GAAK,IAC/E/mC,EAAIhf,GAAO,KAAQkoQ,IAAK,GAAM,GAC9BlpP,IAAMhf,GAAK,KAAQkoQ,IAAK,GAAM,IAC9BlpP,IAAMhf,GAAK,KAAQkoQ,IAAK,EAAK,IAC7BlpP,IAAMhf,GAAK,KAAY,GAALkoQ,KAElBlpP,EAAIhf,GAAO,KAAO+lD,GAAK,IACvB/mC,IAAMhf,GAAK,KAAQ+lD,GAAK,EAAG,IAC3B/mC,IAAMhf,GAAK,KAAS,GAAF+lD,IAGtB,MACF,IAAK,QACH,GAAGihN,GAA2B,iBAATntQ,EAAmB,CAA8BmG,GAA5Bgf,EAAMioP,EAAYptQ,EAAMypE,IAAY3vE,OAAQ,MACtF,IAAIC,EAAI,EAAGA,EAAIF,IAAOE,IAAKoM,EAAG,CAE5B,MADA+lD,EAAIsjN,EAAQxvQ,EAAKg4B,WAAWj+B,GAAKiG,EAAKjG,GAAGi+B,WAAW,KAC5C,KACH,MAAM,IAAI92B,MAAM,aAAegrD,GADpB/mC,EAAIhf,GAAK+lD,EAG3B,MACF,IAAK,UACH,GAAGihN,GAA2B,iBAATntQ,EAAmB,CAA8BmG,GAA5Bgf,EAAMioP,EAAYptQ,EAAMypE,IAAY3vE,OAAQ,MACtF,IAAIC,EAAI,EAAGA,EAAIF,IAAOE,EACpBmyD,EAAIsjN,EAAQxvQ,EAAKg4B,WAAWj+B,GAAKiG,EAAKjG,GAAGi+B,WAAW,GACpD7S,EAAIhf,KAAS,IAAF+lD,EACX/mC,EAAIhf,KAAO+lD,GAAG,EAEhB,MACF,IAAK,UACH,IAAInyD,EAAI,EAAGA,EAAIF,IAAOE,EACpBmyD,EAAIsjN,EAAQxvQ,EAAKg4B,WAAWj+B,GAAKiG,EAAKjG,GAAGi+B,WAAW,GACpD7S,EAAIhf,KAAO+lD,GAAG,EACd/mC,EAAIhf,KAAS,IAAF+lD,EAEb,MACF,IAAK,UACH,IAAInyD,EAAI,EAAGA,EAAIF,IAAOE,GACpBmyD,EAAIsjN,EAAQxvQ,EAAKg4B,WAAWj+B,GAAKiG,EAAKjG,GAAGi+B,WAAW,KAC5C,OAAUk0B,GAAK,QAAQA,EAAI,OAAYA,EAAI,OAAW,KAAOlsD,IAAOjG,GAAGi+B,WAAW,GAAK,QAC/F7S,EAAIhf,KAAS,IAAF+lD,EAAOA,IAAM,EACxB/mC,EAAIhf,KAAS,IAAF+lD,EAAOA,IAAM,EACxB/mC,EAAIhf,KAAS,IAAF+lD,EAAOA,IAAM,EACxB/mC,EAAIhf,KAAS,IAAF+lD,EAEb,MACF,IAAK,UACH,IAAInyD,EAAI,EAAGA,EAAIF,IAAOE,GACpBmyD,EAAIsjN,EAAQxvQ,EAAKg4B,WAAWj+B,GAAKiG,EAAKjG,GAAGi+B,WAAW,KAC5C,OAAUk0B,GAAK,QAAQA,EAAI,OAAYA,EAAI,OAAW,KAAOlsD,IAAOjG,GAAGi+B,WAAW,GAAK,QAC/F7S,EAAIhf,EAAE,GAAO,IAAF+lD,EAAOA,IAAM,EACxB/mC,EAAIhf,EAAE,GAAO,IAAF+lD,EAAOA,IAAM,EACxB/mC,EAAIhf,EAAE,GAAO,IAAF+lD,EAAOA,IAAM,EACxB/mC,EAAIhf,GAAO,IAAF+lD,EACT/lD,GAAG,EAEL,MACF,IAAK,OACH,IAAIpM,EAAI,EAAGA,EAAIF,EAAKE,IAAK,CACvB,IAAIyO,EAAIgnQ,EAAQxvQ,EAAK0tI,OAAO3zI,GAAKiG,EAAKjG,GAAG2zI,OAAO,GAChD,GAAS,MAANllI,EACH,GAxFG,0EAwFKkkB,QAAQlkB,IAAM,EAAK2c,EAAIhf,KAAOqC,EAAEwvB,WAAW,OAAnD,CACA,IAAIk3O,EAAK/2P,EAAO,KAAM3P,GACtB2c,EAAIhf,KAAO,GACXgf,EAAIhf,KAAO4oQ,EAAG/2O,WAAWk3O,EAAG,IAAI,GAChC/pP,EAAIhf,KAAO4oQ,EAAG/2O,aAAmB,EAANk3O,EAAG,KAAU,KAAOA,EAAG,IAAI,IAAI,IAC1D/pP,EAAIhf,KAAO4oQ,EAAG/2O,aAAmB,GAANk3O,EAAG,KAAU,KAAOA,EAAG,IAAI,IAAI,IAC1D/pP,EAAIhf,KAAO,QAPKgf,EAAIhf,KAAO,GAAMgf,EAAIhf,KAAO,GAS9C,MACF,QAAS,MAAM,IAAIjF,MAAM,sBAAwBwsQ,EAAK,IAAMjB,EAAMiB,KAIpE,OADAvoP,EAAMA,EAAIzlB,MAAM,EAAEyG,GACdgnQ,EACAW,GAAiB,QAATA,EACA,QAATA,EAAuB3oP,EAAI1lB,SAAS,UAChC,GAAGC,MAAMvC,KAAKgoB,GAFcA,EADN,OAAR2oP,EAAiB,EAAMroQ,IAAIwnQ,GAAM5hQ,KAAK,IAAM8Z,GA4HrBsqP,MADlC,SAAe/B,GAAM,SAAUlB,EAAIkB,KAAOjB,EAAMiB,KACAjB,MAAOA,EAAOt4H,MAAMA,GACzEq4H,M,eC/9CT,WAcC,SAAS/6O,GACT,GAAyD,oBAAoBi+O,oBAAoBh2Q,EAAOC,QAAQ83B,SAC3G,GAA0C,oBAAoBi+O,oBAAqBC,UAAUl+O,IAAI,EAAO,QAAI,0BAAF,KAAE,mCAC7G,CACH,IAAI/wB,EACJ,oBAAoBkvQ,WAAWlvQ,EAAEkvQ,WACjC,oBAAoBlkQ,OAAOhL,EAAEgL,YAC7B,IAAoB,EAAAC,EAAOjL,EAAE,EAAAiL,EAC7B,oBAAoBkkQ,GAAKA,EAAErmQ,OAAO9I,EAAEmvQ,EAAErmQ,OACtC,oBAAoBpP,OAAOsG,EAAEtG,MAAMsG,EAAEivQ,UAAUl+O,KATjD,EAWE,WAAqC,OAAO,SAAUA,EAAEvmB,EAAE1L,EAAE8C,GAAG,SAASoD,EAAErI,EAAEi1D,GAAG,IAAI9yD,EAAEnC,GAAG,CAAC,IAAI6N,EAAE7N,GAAG,CAAmE,GAAGtD,EAAE,OAAOA,EAAEsD,GAAE,GAAI,MAAM,IAAI6D,MAAM,uBAAuB7D,EAAE,KAAK,IAAIqD,EAAElB,EAAEnC,GAAG,CAAC1D,QAAQ,IAAIuR,EAAE7N,GAAG,GAAGF,KAAKuD,EAAE/G,SAAQ,SAAS83B,GAAoB,OAAO/rB,EAAlBwF,EAAE7N,GAAG,GAAGo0B,IAAgBA,KAAI/wB,EAAEA,EAAE/G,QAAQ83B,EAAEvmB,EAAE1L,EAAE8C,GAAG,OAAO9C,EAAEnC,GAAG1D,QAAkD,IAA1C,IAAII,OAAE,EAA4CsD,EAAE,EAAEA,EAAEiF,EAAExI,OAAOuD,IAAIqI,EAAEpD,EAAEjF,IAAI,OAAOqI,EAArZ,CAAyZ,CAACoqQ,EAAE,CAAC,SAASC,EAAQr2Q,EAAOC,GACne,aAEA,IAAIq2Q,EAAU,oEAIdr2Q,EAAQwe,OAAS,SAAS4B,EAAOk2P,GAK7B,IAJA,IACIC,EAAMC,EAAMC,EAAMC,EAAMC,EAAMC,EAAMC,EADpCx3P,EAAS,GAETjf,EAAI,EAEDA,EAAIggB,EAAMjgB,QAMbu2Q,GAJAH,EAAOn2P,EAAMie,WAAWj+B,OAIT,EACfu2Q,GAAgB,EAAPJ,IAAa,GAJtBC,EAAOp2P,EAAMie,WAAWj+B,OAIY,EACpCw2Q,GAAgB,GAAPJ,IAAc,GAJvBC,EAAOr2P,EAAMie,WAAWj+B,OAIa,EACrCy2Q,EAAc,GAAPJ,EAEHxpQ,MAAMupQ,GACNI,EAAOC,EAAO,GAET5pQ,MAAMwpQ,KACXI,EAAO,IAGXx3P,EAASA,EAASg3P,EAAQtiI,OAAO2iI,GAAQL,EAAQtiI,OAAO4iI,GAAQN,EAAQtiI,OAAO6iI,GAAQP,EAAQtiI,OAAO8iI,GAI1G,OAAOx3P,GAIXrf,EAAQ0e,OAAS,SAAS0B,EAAOk2P,GAC7B,IACIC,EAAMC,EAAMC,EACNE,EAAMC,EAAMC,EAFlBx3P,EAAS,GAGTjf,EAAI,EAIR,IAFAggB,EAAQA,EAAM9O,QAAQ,sBAAuB,IAEtClR,EAAIggB,EAAMjgB,QAObo2Q,EALOF,EAAQtjP,QAAQ3S,EAAM2zH,OAAO3zI,OAKpB,GAJhBu2Q,EAAON,EAAQtjP,QAAQ3S,EAAM2zH,OAAO3zI,QAIN,EAC9Bo2Q,GAAgB,GAAPG,IAAc,GAJvBC,EAAOP,EAAQtjP,QAAQ3S,EAAM2zH,OAAO3zI,QAIC,EACrCq2Q,GAAgB,EAAPG,IAAa,GAJtBC,EAAOR,EAAQtjP,QAAQ3S,EAAM2zH,OAAO3zI,OAMpCif,GAAkBzR,OAAO0vB,aAAai5O,GAE1B,IAARK,IACAv3P,GAAkBzR,OAAO0vB,aAAak5O,IAE9B,IAARK,IACAx3P,GAAkBzR,OAAO0vB,aAAam5O,IAK9C,OAAOp3P,IAIT,IAAIu9N,EAAE,CAAC,SAASw5B,EAAQr2Q,EAAOC,GACjC,aACA,SAAS82Q,IACLp1Q,KAAKq1Q,eAAiB,EACtBr1Q,KAAKs1Q,iBAAmB,EACxBt1Q,KAAKu1Q,MAAQ,EACbv1Q,KAAKw1Q,kBAAoB,KACzBx1Q,KAAKy1Q,kBAAoB,KAG7BL,EAAiBh0Q,UAAY,CAMzBs0Q,WAAY,WACR,OAAO,MAOXC,qBAAsB,WAClB,OAAO,OAGft3Q,EAAOC,QAAU82Q,GAEf,IAAIQ,EAAE,CAAC,SAASlB,EAAQr2Q,EAAOC,GACjC,aACAA,EAAQu3Q,MAAQ,CACZzE,MAAO,OACP0E,SAAU,SAAShQ,GACf,OAAOA,GAEXiQ,WAAY,SAASjQ,GACjB,OAAOA,GAEXkQ,kBAAmB,KACnBC,oBAAqB,MAEzB33Q,EAAQ43Q,QAAUxB,EAAQ,YAExB,CAAC,UAAU,IAAIyB,EAAE,CAAC,SAASzB,EAAQr2Q,EAAOC,GAC5C,aAEA,IAAI4wM,EAAQwlE,EAAQ,WAEhBx3D,EAAQ,CACR,EAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,SAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,SAAY,WACpC,WAAY,WAAY,SAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,WAAY,SACpC,WAAY,WAAY,WAAY,SACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,SACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WASxC7+M,EAAOC,QAAU,SAAeogB,EAAO03P,GACnC,QAAqB,IAAV13P,IAA0BA,EAAMjgB,OACvC,OAAO,EAGX,IAAII,EAAqC,WAA3BqwM,EAAMmnE,UAAU33P,QAEX,IAAT,IACN03P,EAAM,GAEV,IAEIpvQ,EAAI,EAERovQ,IAAc,EACd,IAAK,IAAI13Q,EAAI,EAAG43Q,EAAO53P,EAAMjgB,OAAQC,EAAI43Q,EAAM53Q,IAC3CsI,EAAInI,EAAU6f,EAAMhgB,GAAKggB,EAAMie,WAAWj+B,GAG1C03Q,EAAOA,IAAQ,EADXl5D,EADY,KAAXk5D,EAAMpvQ,IAKf,OAAe,EAARovQ,IAIT,CAAC,UAAU,KAAKG,EAAE,CAAC,SAAS7B,EAAQr2Q,EAAOC,GAC7C,aACA,IAAI4wM,EAAQwlE,EAAQ,WAEpB,SAAS8B,EAAW7xQ,GAChB3E,KAAK2E,KAAO,KACZ3E,KAAKvB,OAAS,EACduB,KAAKiG,MAAQ,EAEjBuwQ,EAAWp1Q,UAAY,CAMnBq1Q,YAAa,SAAS7pQ,GAClB5M,KAAK02Q,WAAW12Q,KAAKiG,MAAQ2G,IAOjC8pQ,WAAY,SAASC,GACjB,GAAI32Q,KAAKvB,OAASk4Q,GAAYA,EAAW,EACrC,MAAM,IAAI9wQ,MAAM,sCAAwC7F,KAAKvB,OAAS,mBAAqB,EAAa,uBAQhHm4Q,SAAU,SAASD,GACf32Q,KAAK02Q,WAAWC,GAChB32Q,KAAKiG,MAAQ0wQ,GAOjB1nI,KAAM,SAAS9qI,GACXnE,KAAK42Q,SAAS52Q,KAAKiG,MAAQ9B,IAO/B0yQ,OAAQ,SAASn4Q,KAQjBo4Q,QAAS,SAAS3uQ,GACd,IACIzJ,EADAyI,EAAS,EAGb,IADAnH,KAAKy2Q,YAAYtuQ,GACZzJ,EAAIsB,KAAKiG,MAAQkC,EAAO,EAAGzJ,GAAKsB,KAAKiG,MAAOvH,IAC7CyI,GAAUA,GAAU,GAAKnH,KAAK62Q,OAAOn4Q,GAGzC,OADAsB,KAAKiG,OAASkC,EACPhB,GAOX4vQ,WAAY,SAAS5uQ,GACjB,OAAO+mM,EAAM8nE,YAAY,SAAUh3Q,KAAKi3Q,SAAS9uQ,KAOrD8uQ,SAAU,SAAS9uQ,KAQnB+uQ,qBAAsB,SAASC,KAO/BC,SAAU,WACN,IAAIC,EAAUr3Q,KAAK82Q,QAAQ,GAC3B,OAAO,IAAIphP,KACgB,MAAzB2hP,GAAW,GAAM,MACjBA,GAAW,GAAM,IAAQ,EAC1BA,GAAW,GAAM,GACjBA,GAAW,GAAM,GACjBA,GAAW,EAAK,IACN,GAAVA,IAAmB,KAG5Bh5Q,EAAOC,QAAUk4Q,GAEf,CAAC,UAAU,KAAKc,EAAE,CAAC,SAAS5C,EAAQr2Q,EAAOC,GAC7C,aACAA,EAAQi5Q,QAAS,EACjBj5Q,EAAQ01L,QAAS,EACjB11L,EAAQk5Q,KAAM,EACdl5Q,EAAQm5Q,eAAgB,EACxBn5Q,EAAQ6tN,KAAO,KACf7tN,EAAQo5Q,YAAc,KACtBp5Q,EAAQq5Q,QAAU,MAEhB,IAAIC,EAAE,CAAC,SAASlD,EAAQr2Q,EAAOC,GACjC,aACA,IAAI4wM,EAAQwlE,EAAQ,WAMpBp2Q,EAAQu5Q,cAAgB,SAAS9iP,GAC7B,OAAOm6K,EAAM2oE,cAAc9iP,IAO/Bz2B,EAAQw5Q,kBAAoB,SAAS/iP,GACjC,OAAOm6K,EAAM8nE,YAAY,aAAcjiP,IAO3Cz2B,EAAQy5Q,kBAAoB,SAASjyQ,GACjC,OAAOopM,EAAM8nE,YAAY,SAAUlxQ,IAOvCxH,EAAQ05Q,YAAc,SAASjjP,GAC3B,IAAItT,EAASytL,EAAM8nE,YAAY,cAAejiP,GAC9C,OAAOm6K,EAAM+oE,iBAAiBx2P,IAOlCnjB,EAAQ25Q,iBAAmB,SAASx2P,GAChC,OAAOytL,EAAM+oE,iBAAiBx2P,IAOlCnjB,EAAQ04Q,YAAc,SAAS7uB,EAAYzpO,GACvC,OAAOwwL,EAAM8nE,YAAY7uB,EAAYzpO,IAOzCpgB,EAAQ+3Q,UAAY,SAAS33P,GACzB,OAAOwwL,EAAMmnE,UAAU33P,IAO3BpgB,EAAQ45Q,aAAe,SAASz0P,GAC5B,OAAOyrL,EAAMgpE,aAAaz0P,IAO9BnlB,EAAQ65Q,iBAAmBjpE,EAAMipE,iBAMjC75Q,EAAQ85Q,iBAAmBlpE,EAAMkpE,iBAOjC95Q,EAAQ+5Q,OAAS,SAAStjP,GACtB,OAAOm6K,EAAMmpE,OAAOtjP,IAOxBz2B,EAAQg6Q,gBAAkB,SAAS9C,GAC/B,OAAOtmE,EAAMopE,gBAAgB9C,IAOjCl3Q,EAAQgxO,SAAW,SAAU1rO,GACzB,OAAOsrM,EAAMogC,SAAS1rO,KAIxB,CAAC,UAAU,KAAKu3O,EAAE,CAAC,SAASu5B,EAAQr2Q,EAAOC,GAC7C,aACA,IAAIi6Q,EAAwC,oBAAfrtQ,YAAuD,oBAAhB2oB,aAAwD,oBAAhB3qB,YAExGsvQ,EAAO9D,EAAQ,QACnBp2Q,EAAQ23Q,oBAAsBsC,EAAiB,aAAe,QAC9Dj6Q,EAAQ03Q,kBAAoBuC,EAAiB,aAAe,QAE5Dj6Q,EAAQ8yQ,MAAQ,OAChB9yQ,EAAQw3Q,SAAW,SAASp3P,GACxB,OAAO85P,EAAKC,WAAW/5P,IAE3BpgB,EAAQy3Q,WAAc,SAASr3P,GAC3B,OAAO85P,EAAKE,WAAWh6P,KAGzB,CAAC,KAAO,KAAKi6P,EAAE,CAAC,SAASjE,EAAQr2Q,EAAOC,GAC1C,aAEA,IAAIi5Q,EAAS7C,EAAQ,YAoBrB,SAASJ,EAAU3vQ,EAAMsyG,GAErB,KAAKj3G,gBAAgBs0Q,GAAY,OAAO,IAAIA,EAAU3vQ,EAAMsyG,GAO5Dj3G,KAAKghC,MAAQ,GAEbhhC,KAAK23Q,QAAU,KAGf33Q,KAAK8uN,KAAO,GACRnqN,GACA3E,KAAKm+B,KAAKx5B,EAAMsyG,GAEpBj3G,KAAKiiB,MAAQ,WACT,IAAI22P,EAAS,IAAItE,EACjB,IAAK,IAAI51Q,KAAKsB,KACa,mBAAZA,KAAKtB,KACZk6Q,EAAOl6Q,GAAKsB,KAAKtB,IAGzB,OAAOk6Q,GAGftE,EAAUlzQ,UAAYszQ,EAAQ,YAC9BJ,EAAUlzQ,UAAU+8B,KAAOu2O,EAAQ,UACnCJ,EAAUuE,QAAUnE,EAAQ,aAC5BJ,EAAUz5C,SAAW65C,EAAQ,cAM7BJ,EAAUplE,MAAQwlE,EAAQ,2BAE1BJ,EAAUiD,OAAS,CAKfz6P,OAAS,SAAS4B,GACd,OAAO64P,EAAOz6P,OAAO4B,IAMzB1B,OAAS,SAAS0B,GACd,OAAO64P,EAAOv6P,OAAO0B,KAG7B41P,EAAUwE,aAAepE,EAAQ,kBACjCr2Q,EAAOC,QAAUg2Q,GAEf,CAAC,WAAW,EAAE,iBAAiB,EAAE,aAAa,EAAE,0BAA0B,EAAE,SAAS,GAAG,WAAW,GAAG,YAAY,KAAKyE,GAAG,CAAC,SAASrE,EAAQr2Q,EAAOC,GACrJ,aACA,IAAIi5Q,EAAS7C,EAAQ,YACjBsE,EAAatE,EAAQ,gBACzBr2Q,EAAOC,QAAU,SAASqG,EAAMsyG,GAC5B,IAAIj2E,EAAOi4O,EAAYv6Q,EAAGggB,EAQ1B,KAPAu4F,EAAUA,GAAW,IACTsgK,SACR5yQ,EAAO4yQ,EAAOv6P,OAAOrY,IAIzBq8B,GADAi4O,EAAa,IAAID,EAAWr0Q,EAAMsyG,IACfj2E,MACdtiC,EAAI,EAAGA,EAAIsiC,EAAMviC,OAAQC,IAC1BggB,EAAQsiB,EAAMtiC,GACdsB,KAAKkiC,KAAKxjB,EAAMw6P,SAAUx6P,EAAMy6P,aAAc,CAC1CnlF,QAAQ,EACRolF,uBAAuB,EACvBjtD,KAAMztM,EAAMytM,KACZqrD,IAAK94P,EAAM84P,IACXG,QAAUj5P,EAAM26P,YAAY56Q,OAASigB,EAAM26P,YAAc,KACzD5B,cAAexgK,EAAQwgK,gBAO/B,OAJIwB,EAAWK,WAAW76Q,SACtBuB,KAAK23Q,QAAUsB,EAAWK,YAGvBt5Q,OAGT,CAAC,WAAW,EAAE,eAAe,KAAKu5Q,GAAG,CAAC,SAAS7E,EAAQr2Q,EAAOC,IAChE,SAAWo2B,GACX,aACA,IAAIq9O,EAAqB,aACzB,QAAqB,IAAXr9O,EAAwB,CACjC,IAAIs9O,GAAQt9O,EAAO/xB,KACnB,IAAIqvQ,EAAM,IAAMt9O,EAAO/xB,KAAK,MAAO,QAAW,MAAMyzB,GAAK47O,GAAO,EAChED,EAAcC,EAAO,SAASr2O,EAAKs2O,GAAO,OAAO,EAAQ,IAAIv9O,EAAOiH,EAAKs2O,GAAO,IAAIv9O,EAAOiH,IAAUjH,EAAO/xB,KAAKs1F,KAAKvjE,GAElHA,EAAO8kP,QAAO9kP,EAAO8kP,MAAQ,SAASr1Q,GAAK,OAAO,IAAIuwB,EAAOvwB,KAElE9F,EAAOC,QAAU,SAASqG,EAAMkY,GAC5B,MAAsB,iBAARlY,EAAmB+vB,EAAO8kP,MAAM70Q,GAAQotQ,EAAYptQ,EAAMkY,IAE5Exe,EAAOC,QAAQiG,KAAO,SAASyC,GAC3B,OAAO0tB,EAAO2rM,SAASr5N,MAExBlF,KAAK9B,KAAwB,oBAAX00B,OAAyBA,YAASr0B,IACrD,IAAIo5Q,GAAG,CAAC,SAAS/E,EAAQr2Q,EAAOC,GAClC,aACA,IAAIo7Q,EAAmBhF,EAAQ,sBAE/B,SAASiF,EAAiBh1Q,GACtB3E,KAAK2E,KAAOA,EACZ3E,KAAKvB,OAASuB,KAAK2E,KAAKlG,OACxBuB,KAAKiG,MAAQ,EAEjB0zQ,EAAiBv4Q,UAAY,IAAIs4Q,EAKjCC,EAAiBv4Q,UAAU61Q,SAAW,SAAS9uQ,GAC3CnI,KAAKy2Q,YAAYtuQ,GACjB,IAAIhB,EAASnH,KAAK2E,KAAKN,MAAMrE,KAAKiG,MAAOjG,KAAKiG,MAAQkC,GAEtD,OADAnI,KAAKiG,OAASkC,EACPhB,GAEX9I,EAAOC,QAAUq7Q,GAEf,CAAC,qBAAqB,KAAKC,GAAG,CAAC,SAASlF,EAAQr2Q,EAAOC,GACzD,aACA,IAAIu6Q,EAAUnE,EAAQ,aAClBxlE,EAAQwlE,EAAQ,WAChBa,EAAQb,EAAQ,WAChBz4O,EAAYy4O,EAAQ,eACpB75C,EAAW65C,EAAQ,cACnB6C,EAAS7C,EAAQ,YACjBoE,EAAepE,EAAQ,kBACvBU,EAAmBV,EAAQ,sBAC3BmF,EAAanF,EAAQ,gBACrBE,EAAOF,EAAQ,UACfoF,EAAepF,EAAQ,kBACvBqF,EAAmBrF,EAAQ,sBAO3BsF,EAAa,SAAS93O,GACtB,GAAIA,EAAK20M,iBAAiBu+B,IACtBlzO,EAAK20M,MAAQ30M,EAAK20M,MAAM6+B,aACxBxzO,EAAK+0E,QAAQ+8E,QAAS,EACtB9xJ,EAAK+0E,QAAQsgK,QAAS,EAEc,eAAhCroE,EAAMmnE,UAAUn0O,EAAK20M,QAAyB,CAC9C,IAAIliC,EAAOzyK,EAAK20M,MAGhB30M,EAAK20M,MAAQ,IAAI3rO,WAAWypM,EAAKl2M,QAEb,IAAhBk2M,EAAKl2M,QACLyjC,EAAK20M,MAAM5xO,IAAI0vM,EAAM,GAIjC,OAAOzyK,EAAK20M,OAQZojC,EAAgB,SAAS/3O,GACzB,IAAI/6B,EAAS6yQ,EAAW93O,GAExB,MAAa,WADFgtK,EAAMmnE,UAAUlvQ,IAElB+6B,EAAK+0E,QAAQ+8E,QAGV6kF,EAAQqB,WACDL,EAAW1yQ,EAAQ,SAG3B+6B,EAAKi4O,WAEThzQ,GAQPizQ,EAAe,SAASC,GACxB,IAAIlzQ,EAAS6yQ,EAAWh6Q,MACxB,OAAImH,QACO,IAGPnH,KAAKi3G,QAAQsgK,SACbpwQ,EAASowQ,EAAOv6P,OAAO7V,IAKvBA,EAHAkzQ,GAAUr6Q,KAAKi3G,QAAQ+8E,OAGdlqK,EAAIwwP,WAAWnzQ,GAIf+nM,EAAM8nE,YAAY,SAAU7vQ,GAGpCkzQ,GAAWr6Q,KAAKi3G,QAAQ+8E,SACzB7sL,EAAS+nM,EAAM8nE,YAAY,SAAUltP,EAAIywP,WAAWpzQ,KAEjDA,IASPqzQ,EAAY,SAASl2Q,EAAMK,EAAMsyG,GACjCj3G,KAAKsE,KAAOA,EACZtE,KAAKw3Q,IAAMvgK,EAAQugK,IACnBx3Q,KAAKmsN,KAAOl1G,EAAQk1G,KACpBnsN,KAAK23Q,QAAU1gK,EAAQ0gK,QAEvB33Q,KAAK62O,MAAQlyO,EACb3E,KAAKi3G,QAAUA,EAOfj3G,KAAKy6Q,iBAAmB,CACtBjD,IAAMvgK,EAAQugK,IACdrrD,KAAOl1G,EAAQk1G,OAIrBquD,EAAUp5Q,UAAY,CAKlBs5Q,OAAQ,WACJ,OAAON,EAAat4Q,KAAK9B,MAAM,IAMnCm6Q,SAAU,WACN,OAAOC,EAAat4Q,KAAK9B,MAAM,IAMnC26Q,aAAc,WACV,IAAIxzQ,EAAS8yQ,EAAcj6Q,MAC3B,OAAOkvM,EAAM8nE,YAAY,aAAc7vQ,IAM3CyzQ,aAAc,WACV,IAAIzzQ,EAAS8yQ,EAAcj6Q,MAC3B,OAAOkvM,EAAM8nE,YAAY,aAAc7vQ,IAM3C0zQ,cAAe,WACX,OAAO76Q,KAAK46Q,eAAen5P,SAWnC,IAAIq5P,EAAW,SAASj+C,EAAK9wN,GACzB,IACIrN,EADAs+P,EAAM,GAEV,IAAKt+P,EAAI,EAAGA,EAAIqN,EAAOrN,IACnBs+P,GAAO9wP,OAAO0vB,aAAmB,IAANihM,GAC3BA,KAAc,EAElB,OAAOmgC,GASP7qB,EAAS,WACT,IAAiBzzO,EAAG2jD,EAAhBl7C,EAAS,GACb,IAAKzI,EAAI,EAAGA,EAAIwB,UAAUzB,OAAQC,IAC9B,IAAK2jD,KAAQniD,UAAUxB,GACfwB,UAAUxB,GAAGmF,eAAew+C,SAAiC,IAAjBl7C,EAAOk7C,KACnDl7C,EAAOk7C,GAAQniD,UAAUxB,GAAG2jD,IAIxC,OAAOl7C,GA8BP4zQ,EAAU,SAASz2Q,EAAMK,EAAM3C,GAE/B,IACIqiI,EADA22I,EAAW9rE,EAAMmnE,UAAU1xQ,GAS/B,IANA3C,EAzBmB,SAASA,GAS5B,OAPiB,KADjBA,EAAIA,GAAK,IACHu1Q,QAAiC,OAAbv1Q,EAAEgyL,aAAgC3zL,IAAb2B,EAAEgyL,SAC7ChyL,EAAEgyL,QAAS,IAEfhyL,EAAImwO,EAAOnwO,EAAG64N,IACZ1O,KAAOnqN,EAAEmqN,MAAQ,IAAIz2L,KACD,OAAlB1zB,EAAE01Q,cAAsB11Q,EAAE01Q,YAAc11Q,EAAE01Q,YAAYnxL,eAEnDvkF,EAgBHi5Q,CAAiBj5Q,IAEfy1Q,gBAAkBpzI,EAAS62I,EAAa52Q,KAC1C62Q,EAAUr5Q,KAAK9B,KAAMqkI,GAAQ,GAG7BriI,EAAEw1Q,KAAFx1Q,MAAS2C,EACT3C,EAAEu1Q,QAAS,EACXv1Q,EAAEgyL,QAAS,EACXrvL,EAAO,UAEN,GAAiB,WAAbq2Q,EACDh5Q,EAAEgyL,SAAWhyL,EAAEu1Q,SAEiB,IAA5Bv1Q,EAAEo3Q,wBAGFz0Q,EAAOuqM,EAAM2oE,cAAclzQ,QAIlC,CAID,GAHA3C,EAAEu1Q,QAAS,EACXv1Q,EAAEgyL,QAAS,IAENgnF,GAAcr2Q,aAAgBywQ,GAC/B,MAAM,IAAIvvQ,MAAM,gBAAkBvB,EAAO,mCAI5B,gBAAb02Q,IACAr2Q,EAAOuqM,EAAM8nE,YAAY,aAAcryQ,IAI/C,IAAIf,EAAS,IAAI42Q,EAAUl2Q,EAAMK,EAAM3C,GAEvC,OADAhC,KAAKghC,MAAM18B,GAAQV,EACZA,GASPs3Q,EAAe,SAAUx+P,GACH,KAAlBA,EAAKrY,OAAO,KACZqY,EAAOA,EAAKqV,UAAU,EAAGrV,EAAKje,OAAS,IAE3C,IAAIuoC,EAAYtqB,EAAKuqB,YAAY,KACjC,OAAQD,EAAY,EAAKtqB,EAAKqV,UAAU,EAAGiV,GAAa,IAWxDm0O,EAAY,SAAS72Q,EAAMmzQ,GAe3B,MAbsB,KAAlBnzQ,EAAKD,OAAO,KACZC,GAAQ,KAGZmzQ,OAA0C,IAAlBA,GAAiCA,EAGpDz3Q,KAAKghC,MAAM18B,IACZy2Q,EAAQj5Q,KAAK9B,KAAMsE,EAAM,KAAM,CAC3BkzQ,KAAK,EACLC,cAAeA,IAGhBz3Q,KAAKghC,MAAM18B,IASlB82Q,EAA+B,SAASl5O,EAAMw1O,GAC9C,IACI5R,EADA3+P,EAAS,IAAIiuQ,EAqCjB,OAjCIlzO,EAAK20M,iBAAiBu+B,GACtBjuQ,EAAOmuQ,iBAAmBpzO,EAAK20M,MAAMy+B,iBACrCnuQ,EAAOouQ,MAAQrzO,EAAK20M,MAAM0+B,MAEM,IAA5BpuQ,EAAOmuQ,kBAA0BpzO,EAAKs1O,KACtCE,EAAcoB,EAAoB,MAClC3xQ,EAAOsuQ,kBAAoB,GAC3BtuQ,EAAOouQ,MAAQ,GAEVrzO,EAAK20M,MAAM2+B,oBAAsBkC,EAAYtG,MAClDjqQ,EAAOsuQ,kBAAoBvzO,EAAK20M,MAAM8+B,wBAGtC7P,EAAU5jO,EAAK20M,MAAM6+B,aAErBvuQ,EAAOsuQ,kBAAoBiC,EAAY5B,SAAS5mE,EAAM8nE,YAAYU,EAAY1B,kBAAmBlQ,QAKrGA,EAAUmU,EAAc/3O,KACW,IAAnB4jO,EAAQrnQ,SAAgByjC,EAAKs1O,MACzCE,EAAcoB,EAAoB,MAClChT,EAAU,IAEd3+P,EAAOmuQ,iBAAmBxP,EAAQrnQ,OAClC0I,EAAOouQ,MAAQA,EAAMzP,GACrB3+P,EAAOsuQ,kBAAoBiC,EAAY5B,SAAS5mE,EAAM8nE,YAAYU,EAAY1B,kBAAmBlQ,KAGrG3+P,EAAOkuQ,eAAiBluQ,EAAOsuQ,kBAAkBh3Q,OACjD0I,EAAOquQ,kBAAoBkC,EAAYtG,MAEhCjqQ,GAWPk0Q,EAAmB,SAAS/2Q,EAAM49B,EAAMo5O,EAAkB1uQ,GAC/C0uQ,EAAiB7F,kBAA5B,IAOI8F,EACAC,EAIAhE,EAAKrrD,EAXLsvD,EAAqBvsE,EAAM8nE,YAAY,SAAUpC,EAAK2F,WAAWr4O,EAAK59B,OACtEqzQ,EAAUz1O,EAAKy1O,SAAW,GAC1B+D,EAAoBxsE,EAAM8nE,YAAY,SAAUpC,EAAK2F,WAAW5C,IAChEgE,EAAqBF,EAAmBh9Q,SAAWyjC,EAAK59B,KAAK7F,OAC7Dm9Q,EAAoBF,EAAkBj9Q,SAAWk5Q,EAAQl5Q,OACzDuD,EAAIkgC,EAAK+0E,QAGT4kK,EAAc,GACdC,EAAwB,GACxBC,EAA2B,GAM3BvE,EADAt1O,EAAKu4O,iBAAiBjD,MAAQt1O,EAAKs1O,IAC7Bt1O,EAAKs1O,IAELx1Q,EAAEw1Q,IAWZ+D,GANIpvD,EADDjqL,EAAKu4O,iBAAiBtuD,OAASjqL,EAAKiqL,KAC5BjqL,EAAKiqL,KAELnqN,EAAEmqN,MAIEpI,WACfw3D,IAAqB,EACrBA,GAAoBpvD,EAAK/H,aACzBm3D,IAAqB,EACrBA,GAAoBpvD,EAAKhI,aAAe,EAExCq3D,EAAUrvD,EAAKlI,cAAgB,KAC/Bu3D,IAAqB,EACrBA,GAAqBrvD,EAAKrI,WAAa,EACvC03D,IAAqB,EACrBA,GAAoBrvD,EAAKjI,UAErBy3D,IAUAG,EAEIhB,EAAS,EAAG,GAEZA,EAASvF,EAAMkG,GAAqB,GAEpCA,EAEJI,GAEI,KAEAf,EAASgB,EAAsBr9Q,OAAQ,GAEvCq9Q,GAGLF,IAECG,EAEIjB,EAAS,EAAG,GAEZA,EAAS96Q,KAAKu1Q,MAAMmG,GAAoB,GAExCA,EAEJG,GAEI,KAEAf,EAASiB,EAAyBt9Q,OAAQ,GAE1Cs9Q,GAGR,IAAIjgE,EAAS,GAiDb,OA9CAA,GAAU,OAGVA,GAAW6/D,GAAsBC,EAAqB,OAAa,OAEnE9/D,GAAUw/D,EAAiB9F,kBAE3B15D,GAAUg/D,EAASS,EAAS,GAE5Bz/D,GAAUg/D,EAASU,EAAS,GAE5B1/D,GAAUg/D,EAASQ,EAAiB/F,MAAO,GAE3Cz5D,GAAUg/D,EAASQ,EAAiBjG,eAAgB,GAEpDv5D,GAAUg/D,EAASQ,EAAiBhG,iBAAkB,GAEtDx5D,GAAUg/D,EAASW,EAAmBh9Q,OAAQ,GAE9Cq9M,GAAUg/D,EAASe,EAAYp9Q,OAAQ,GA2BhC,CACHu9Q,WAzBa//O,EAAUggP,kBAAoBngE,EAAS2/D,EAAqBI,EA0BzEK,UAxBYjgP,EAAUkgP,oBAE1B,MAEArgE,EAEAg/D,EAASY,EAAkBj9Q,OAAQ,GANnBw9B,aAYP,IAARu7O,EAAe,UAAqB,YAErCsD,EAASluQ,EAAQ,GAEjB6uQ,EAEAI,EAEAH,EAKIJ,iBAAkBA,IAMtBxxP,EAAM,CASNqU,KAAM,SAASysG,EAAQ3zB,GACnB,MAAM,IAAIpxG,MAAM,qEAUpBimB,OAAQ,SAAS1c,GACb,IACIgtQ,EAAUC,EAAcn6O,EAAMo6O,EAD9Bn1Q,EAAS,GAEb,IAAKi1Q,KAAYp8Q,KAAKghC,MACbhhC,KAAKghC,MAAMn9B,eAAeu4Q,KAG/Bl6O,EAAOliC,KAAKghC,MAAMo7O,GAElBE,EAAY,IAAI9B,EAAUt4O,EAAK59B,KAAM49B,EAAK20M,MAAO1E,EAAOjwM,EAAK+0E,UAC7DolK,EAAeD,EAAS/3Q,MAAMrE,KAAK8uN,KAAKrwN,OAAQ29Q,EAAS39Q,QACrD29Q,EAAS/3Q,MAAM,EAAGrE,KAAK8uN,KAAKrwN,UAAYuB,KAAK8uN,MACjD1/M,EAAOitQ,EAAcC,IACjBn1Q,EAAOhE,KAAKm5Q,IAGpB,OAAOn1Q,GAYX+6B,KAAM,SAAS59B,EAAMK,EAAM3C,GACvB,GAAyB,IAArB9B,UAAUzB,OAAc,CACxB,GAAIywM,EAAMogC,SAAShrO,GAAO,CACtB,IAAIokO,EAASpkO,EACb,OAAOtE,KAAK8rB,QAAO,SAASuwP,EAAcn6O,GACtC,OAAQA,EAAKs1O,KAAO9uC,EAAOnkO,KAAK83Q,MAIpC,OAAOr8Q,KAAK8rB,QAAO,SAASuwP,EAAcn6O,GACtC,OAAQA,EAAKs1O,KAAO6E,IAAiB/3Q,KACtC,IAAM,KAOjB,OAHIA,EAAOtE,KAAK8uN,KAAOxqN,EACnBy2Q,EAAQj5Q,KAAK9B,KAAMsE,EAAMK,EAAM3C,GAE5BhC,MAQXu8Q,OAAQ,SAAS/8Q,GACb,IAAKA,EACD,OAAOQ,KAGX,GAAIkvM,EAAMogC,SAAS9vO,GACf,OAAOQ,KAAK8rB,QAAO,SAASuwP,EAAcn6O,GACtC,OAAOA,EAAKs1O,KAAOh4Q,EAAI+E,KAAK83Q,MAKpC,IAAI/3Q,EAAOtE,KAAK8uN,KAAOtvN,EACnBg9Q,EAAYrB,EAAUr5Q,KAAK9B,KAAMsE,GAGjCwI,EAAM9M,KAAKiiB,QAEf,OADAnV,EAAIgiN,KAAO0tD,EAAUl4Q,KACdwI,GAQXyoL,OAAQ,SAASjxL,GACbA,EAAOtE,KAAK8uN,KAAOxqN,EACnB,IAAI49B,EAAOliC,KAAKghC,MAAM18B,GAStB,GARK49B,IAEqB,KAAlB59B,EAAKD,OAAO,KACZC,GAAQ,KAEZ49B,EAAOliC,KAAKghC,MAAM18B,IAGlB49B,IAASA,EAAKs1O,WAEPx3Q,KAAKghC,MAAM18B,QAMlB,IAHA,IAAIm4Q,EAAOz8Q,KAAK8rB,QAAO,SAASuwP,EAAcn6O,GAC1C,OAAOA,EAAK59B,KAAKD,MAAM,EAAGC,EAAK7F,UAAY6F,KAEtC5F,EAAI,EAAGA,EAAI+9Q,EAAKh+Q,OAAQC,WACtBsB,KAAKghC,MAAMy7O,EAAK/9Q,GAAG4F,MAIlC,OAAOtE,MAWX08Q,SAAU,SAASzlK,GACfA,EAAUk7H,EAAOl7H,GAAW,GAAI,CAC5BsgK,QAAQ,EACRG,YAAa,QACbj0P,KAAM,SACNk0P,QAAS,OAGbzoE,EAAMgpE,aAAajhK,EAAQxzF,MAE3B,IAGIk5P,EAAQj+Q,EAwBRk+Q,EA3BAC,EAAU,GACVC,EAAiB,EACjBC,EAAmB,EAEnBrB,EAAoBxsE,EAAM8nE,YAAY,SAAUh3Q,KAAKu6Q,WAAWtjK,EAAQ0gK,SAAW33Q,KAAK23Q,SAAW,KAGvG,IAAK,IAAIrzQ,KAAQtE,KAAKghC,MAClB,GAAKhhC,KAAKghC,MAAMn9B,eAAeS,GAA/B,CAGA,IAAI49B,EAAOliC,KAAKghC,MAAM18B,GAElB04Q,EAAkB96O,EAAK+0E,QAAQygK,aAAezgK,EAAQygK,YAAYnxL,cAClEmxL,EAAcoB,EAAakE,GAC/B,IAAKtF,EACD,MAAM,IAAI7xQ,MAAMm3Q,EAAkB,wCAGtC,IAAI1B,EAAmBF,EAA6Bt5Q,KAAK9B,KAAMkiC,EAAMw1O,GAEjEuF,EAAU5B,EAAiBv5Q,KAAK9B,KAAMsE,EAAM49B,EAAMo5O,EAAkBwB,GACxEA,GAAkBG,EAAQjB,WAAWv9Q,OAAS68Q,EAAiBjG,eAC/D0H,GAAoBE,EAAQf,UAAUz9Q,OACtCo+Q,EAAQ15Q,KAAK85Q,GAMjBL,EAAS3gP,EAAUihP,sBAAVjhP,WAMT6+O,EAAS+B,EAAQp+Q,OAAQ,GAEzBq8Q,EAAS+B,EAAQp+Q,OAAQ,GAEzBq8Q,EAASiC,EAAkB,GAE3BjC,EAASgC,EAAgB,GAEzBhC,EAASY,EAAkBj9Q,OAAQ,GAEnCi9Q,EAKA,IAAIjS,EAAWxyJ,EAAQxzF,KAAKjU,cAO5B,IALImtQ,EADU,eAAXlT,GAAoC,gBAAXA,GAAqC,SAAXA,GAA8B,eAAXA,EAC5D,IAAIsQ,EAAiB+C,EAAiBC,EAAmBH,EAAOn+Q,QAEhE,IAAIq7Q,EAAagD,EAAiBC,EAAmBH,EAAOn+Q,QAGpEC,EAAI,EAAGA,EAAIm+Q,EAAQp+Q,OAAQC,IAC5Bi+Q,EAAOt2O,OAAOw2O,EAAQn+Q,GAAGs9Q,YACzBW,EAAOt2O,OAAOw2O,EAAQn+Q,GAAG48Q,iBAAiB7F,mBAE9C,IAAK/2Q,EAAI,EAAGA,EAAIm+Q,EAAQp+Q,OAAQC,IAC5Bi+Q,EAAOt2O,OAAOw2O,EAAQn+Q,GAAGw9Q,WAG7BS,EAAOt2O,OAAOu2O,GAEd,IAAIptI,EAAMmtI,EAAOQ,WAIjB,OAAOlmK,EAAQxzF,KAAKjU,eAEhB,IAAK,aACL,IAAK,cACL,IAAK,aACF,OAAO0/L,EAAM8nE,YAAY//J,EAAQxzF,KAAKjU,cAAeggI,GACxD,IAAK,OACF,OAAO0/D,EAAM+oE,iBAAiB/oE,EAAM8nE,YAAY,cAAexnI,IAElE,IAAK,SACF,OAAQv4B,EAAc,OAAIsgK,EAAOz6P,OAAO0yH,GAAOA,EAClD,QACG,OAAOA,IASlB+lI,MAAO,SAAU72P,EAAO03P,GACpB,OAAOb,EAAM72P,EAAO03P,IAOxBmE,WAAY,SAAUx5C,GAClB,OAAO7xB,EAAM8nE,YAAY,SAAUpC,EAAK2F,WAAWx5C,KAOvDu5C,WAAY,SAAU57P,GAClB,OAAOk2P,EAAK0F,WAAW57P,KAG/BrgB,EAAOC,QAAUwrB,GAEf,CAAC,WAAW,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,UAAU,EAAE,aAAa,EAAE,eAAe,GAAG,cAAc,GAAG,iBAAiB,GAAG,YAAY,GAAG,qBAAqB,GAAG,SAAS,GAAG,UAAU,KAAKszP,GAAG,CAAC,SAAS1I,EAAQr2Q,EAAOC,GAC1O,aACAA,EAAQ29Q,kBAAoB,OAC5B39Q,EAAQ69Q,oBAAsB,OAC9B79Q,EAAQ4+Q,sBAAwB,OAChC5+Q,EAAQ++Q,gCAAkC,OAC1C/+Q,EAAQg/Q,4BAA8B,OACtCh/Q,EAAQi/Q,gBAAkB,SAExB,IAAIC,GAAG,CAAC,SAAS9I,EAAQr2Q,EAAOC,GAClC,aACA,IAAIk4Q,EAAa9B,EAAQ,gBACrBxlE,EAAQwlE,EAAQ,WAEpB,SAAS+I,EAAa94Q,EAAMy0Q,GACxBp5Q,KAAK2E,KAAOA,EACPy0Q,IACDp5Q,KAAK2E,KAAOuqM,EAAM2oE,cAAc73Q,KAAK2E,OAEzC3E,KAAKvB,OAASuB,KAAK2E,KAAKlG,OACxBuB,KAAKiG,MAAQ,EAEjBw3Q,EAAar8Q,UAAY,IAAIo1Q,EAI7BiH,EAAar8Q,UAAUy1Q,OAAS,SAASn4Q,GACrC,OAAOsB,KAAK2E,KAAKg4B,WAAWj+B,IAKhC++Q,EAAar8Q,UAAU81Q,qBAAuB,SAASC,GACnD,OAAOn3Q,KAAK2E,KAAKsiC,YAAYkwO,IAKjCsG,EAAar8Q,UAAU61Q,SAAW,SAAS9uQ,GACvCnI,KAAKy2Q,YAAYtuQ,GAEjB,IAAIhB,EAASnH,KAAK2E,KAAKN,MAAMrE,KAAKiG,MAAOjG,KAAKiG,MAAQkC,GAEtD,OADAnI,KAAKiG,OAASkC,EACPhB,GAEX9I,EAAOC,QAAUm/Q,GAEf,CAAC,eAAe,EAAE,UAAU,KAAKriC,GAAG,CAAC,SAASs5B,EAAQr2Q,EAAOC,GAC/D,aAEA,IAAI4wM,EAAQwlE,EAAQ,WAMhBoF,EAAe,WACf95Q,KAAK2E,KAAO,IAEhBm1Q,EAAa14Q,UAAY,CAKrBilC,OAAQ,SAAS3nB,GACbA,EAAQwwL,EAAM8nE,YAAY,SAAUt4P,GACpC1e,KAAK2E,KAAKxB,KAAKub,IAMnBy+P,SAAU,WACN,OAAOn9Q,KAAK2E,KAAKqL,KAAK,MAI9B3R,EAAOC,QAAUw7Q,GAEf,CAAC,UAAU,KAAK4D,GAAG,CAAC,SAAShJ,EAAQr2Q,EAAOC,IAC9C,SAAWo2B,GACX,aAYA,GAXAp2B,EAAQi5Q,QAAS,EACjBj5Q,EAAQwH,OAAQ,EAChBxH,EAAQyiO,QAAS,EACjBziO,EAAQq/Q,YAAqC,oBAAhBnoP,aAAqD,oBAAftqB,WAInE5M,EAAQ47Q,gBAA+B,IAAXxlP,EAE5Bp2B,EAAQs/Q,WAAmC,oBAAf1yQ,WAED,oBAAhBsqB,YACPl3B,EAAQu/Q,MAAO,MAEd,CACD,IAAIp8P,EAAS,IAAI+T,YAAY,GAC7B,IACIl3B,EAAQu/Q,KAEI,IAFG,IAAIlpP,KAAK,CAAClT,GAAS,CAC9BgC,KAAM,oBACPtb,KAEP,MAAOiuB,GACH,IACI,IACI0nP,EAAU,IADAztQ,OAAO0tQ,aAAe1tQ,OAAO2tQ,mBAAqB3tQ,OAAO4tQ,gBAAkB5tQ,OAAO6tQ,eAEhGJ,EAAQz3O,OAAO5kB,GACfnjB,EAAQu/Q,KAAmD,IAA5CC,EAAQK,QAAQ,mBAAmBh2Q,KAEtD,MAAOiuB,GACH93B,EAAQu/Q,MAAO,OAKxB/7Q,KAAK9B,KAAwB,oBAAX00B,OAAyBA,YAASr0B,IACrD,IAAI+9Q,GAAG,CAAC,SAAS1J,EAAQr2Q,EAAOC,GAClC,aACA,IAAIk4Q,EAAa9B,EAAQ,gBAEzB,SAASgF,EAAiB/0Q,GAClBA,IACA3E,KAAK2E,KAAOA,EACZ3E,KAAKvB,OAASuB,KAAK2E,KAAKlG,OACxBuB,KAAKiG,MAAQ,GAGrByzQ,EAAiBt4Q,UAAY,IAAIo1Q,EAIjCkD,EAAiBt4Q,UAAUy1Q,OAAS,SAASn4Q,GACzC,OAAOsB,KAAK2E,KAAKjG,IAKrBg7Q,EAAiBt4Q,UAAU81Q,qBAAuB,SAASC,GAKvD,IAJA,IAAIkH,EAAOlH,EAAIx6O,WAAW,GACtB2hP,EAAOnH,EAAIx6O,WAAW,GACtB4hP,EAAOpH,EAAIx6O,WAAW,GACtB6hP,EAAOrH,EAAIx6O,WAAW,GACjBj+B,EAAIsB,KAAKvB,OAAS,EAAGC,GAAK,IAAKA,EACpC,GAAIsB,KAAK2E,KAAKjG,KAAO2/Q,GAAQr+Q,KAAK2E,KAAKjG,EAAI,KAAO4/Q,GAAQt+Q,KAAK2E,KAAKjG,EAAI,KAAO6/Q,GAAQv+Q,KAAK2E,KAAKjG,EAAI,KAAO8/Q,EACxG,OAAO9/Q,EAIf,OAAQ,GAKZg7Q,EAAiBt4Q,UAAU61Q,SAAW,SAAS9uQ,GAE3C,GADAnI,KAAKy2Q,YAAYtuQ,GACL,IAATA,EAEC,OAAO,IAAI+C,WAAW,GAE1B,IAAI/D,EAASnH,KAAK2E,KAAKi+D,SAAS5iE,KAAKiG,MAAOjG,KAAKiG,MAAQkC,GAEzD,OADAnI,KAAKiG,OAASkC,EACPhB,GAEX9I,EAAOC,QAAUo7Q,GAEf,CAAC,eAAe,IAAI+E,GAAG,CAAC,SAAS/J,EAAQr2Q,EAAOC,GAClD,aAEA,IAAI4wM,EAAQwlE,EAAQ,WAOhBqF,EAAmB,SAASt7Q,GAC5BuB,KAAK2E,KAAO,IAAIuG,WAAWzM,GAC3BuB,KAAKiG,MAAQ,GAEjB8zQ,EAAiB34Q,UAAY,CAKzBilC,OAAQ,SAAS3nB,GACQ,IAAjBA,EAAMjgB,SAENigB,EAAQwwL,EAAM8nE,YAAY,aAAct4P,GACxC1e,KAAK2E,KAAKM,IAAIyZ,EAAO1e,KAAKiG,OAC1BjG,KAAKiG,OAASyY,EAAMjgB,SAO5B0+Q,SAAU,WACN,OAAOn9Q,KAAK2E,OAIpBtG,EAAOC,QAAUy7Q,GAEf,CAAC,UAAU,KAAK2E,GAAG,CAAC,SAAShK,EAAQr2Q,EAAOC,GAC9C,aAeA,IAbA,IAAI4wM,EAAQwlE,EAAQ,WAChBmE,EAAUnE,EAAQ,aAClBmF,EAAanF,EAAQ,gBAUrBiK,EAAW,IAAI//Q,MAAM,KAChBF,EAAE,EAAGA,EAAE,IAAKA,IACnBigR,EAASjgR,GAAMA,GAAK,IAAM,EAAIA,GAAK,IAAM,EAAIA,GAAK,IAAM,EAAIA,GAAK,IAAM,EAAIA,GAAK,IAAM,EAAI,EAE5FigR,EAAS,KAAKA,EAAS,KAAK,EAG5B,IA+DIC,EAAa,SAASjjP,EAAKj1B,GAC3B,IAAIs1F,EAOJ,KALAt1F,EAAMA,GAAOi1B,EAAIl9B,QACPk9B,EAAIl9B,SAAUiI,EAAMi1B,EAAIl9B,QAGlCu9F,EAAMt1F,EAAI,EACHs1F,GAAO,GAA2B,MAAV,IAAXrgE,EAAIqgE,KAAyBA,IAIjD,OAAIA,EAAM,GAIE,IAARA,EAJkBt1F,EAMds1F,EAAM2iL,EAAShjP,EAAIqgE,IAAQt1F,EAAOs1F,EAAMt1F,GAIhDm4Q,EAAa,SAAUljP,GACvB,IAASj9B,EAAGorB,EAAK3c,EAAG2xQ,EAChBtgR,EAAMm9B,EAAIl9B,OAKVsgR,EAAW,IAAIngR,MAAU,EAAJJ,GAEzB,IAAKsrB,EAAI,EAAGprB,EAAE,EAAGA,EAAEF,GAGf,IAFA2O,EAAIwuB,EAAIj9B,MAEA,IAAQqgR,EAASj1P,KAAS3c,OAIlC,IAFA2xQ,EAAQH,EAASxxQ,IAEL,EAAK4xQ,EAASj1P,KAAS,MAAQprB,GAAKogR,EAAM,MAAtD,CAKA,IAFA3xQ,GAAe,IAAV2xQ,EAAc,GAAiB,IAAVA,EAAc,GAAO,EAExCA,EAAQ,GAAKpgR,EAAIF,GACpB2O,EAAKA,GAAK,EAAiB,GAAXwuB,EAAIj9B,KACpBogR,IAIAA,EAAQ,EAAKC,EAASj1P,KAAS,MAE/B3c,EAAI,MACJ4xQ,EAASj1P,KAAS3c,GAElBA,GAAK,MACL4xQ,EAASj1P,KAAS,MAAW3c,GAAK,GAAM,KACxC4xQ,EAASj1P,KAAS,MAAc,KAAJ3c,GAcpC,OATI4xQ,EAAStgR,SAAWqrB,IACjBi1P,EAASn8M,SACRm8M,EAAWA,EAASn8M,SAAS,EAAG94C,GAEhCi1P,EAAStgR,OAASqrB,GAKnBolL,EAAM8vE,kBAAkBD,IAanCzgR,EAAQi8Q,WAAa,SAAoBxlP,GACrC,OAAI8jP,EAAQqB,WACDL,EAAW9kP,EAAK,SApJd,SAAUA,GACvB,IAAI4G,EAAKxuB,EAAG49D,EAAIk0M,EAAOvgR,EAAGwgR,EAAUnqP,EAAIt2B,OAAQ0gR,EAAU,EAG1D,IAAKF,EAAQ,EAAGA,EAAQC,EAASD,IAEP,QAAZ,OADV9xQ,EAAI4nB,EAAI4H,WAAWsiP,MACeA,EAAM,EAAIC,GAElB,QAAZ,OADVn0M,EAAKh2C,EAAI4H,WAAWsiP,EAAM,OAEtB9xQ,EAAI,OAAYA,EAAI,OAAW,KAAO49D,EAAK,OAC3Ck0M,KAGRE,GAAYhyQ,EAAI,IAAQ,EAAMA,EAAI,KAAS,EAAMA,EAAI,MAAW,EAAI,EAWxE,IANIwuB,EADAk9O,EAAQ+E,WACF,IAAI1yQ,WAAWi0Q,GAEf,IAAIvgR,MAAMugR,GAIfzgR,EAAE,EAAGugR,EAAQ,EAAGvgR,EAAIygR,EAASF,IAET,QAAZ,OADT9xQ,EAAI4nB,EAAI4H,WAAWsiP,MACaA,EAAM,EAAIC,GAEhB,QAAZ,OADVn0M,EAAKh2C,EAAI4H,WAAWsiP,EAAM,OAEtB9xQ,EAAI,OAAYA,EAAI,OAAW,KAAO49D,EAAK,OAC3Ck0M,KAGJ9xQ,EAAI,IAEJwuB,EAAIj9B,KAAOyO,EACJA,EAAI,MAEXwuB,EAAIj9B,KAAO,IAAQyO,IAAM,EACzBwuB,EAAIj9B,KAAO,IAAY,GAAJyO,GACZA,EAAI,OAEXwuB,EAAIj9B,KAAO,IAAQyO,IAAM,GACzBwuB,EAAIj9B,KAAO,IAASyO,IAAM,EAAK,GAC/BwuB,EAAIj9B,KAAO,IAAY,GAAJyO,IAGnBwuB,EAAIj9B,KAAO,IAAQyO,IAAM,GACzBwuB,EAAIj9B,KAAO,IAASyO,IAAM,GAAM,GAChCwuB,EAAIj9B,KAAO,IAASyO,IAAM,EAAK,GAC/BwuB,EAAIj9B,KAAO,IAAY,GAAJyO,GAI3B,OAAOwuB,EAiGAyjP,CAAWrqP,IAUtBz2B,EAAQg8Q,WAAa,SAAoB3+O,GACrC,GAAIk9O,EAAQqB,WACR,OAAOhrE,EAAM8nE,YAAY,aAAcr7O,GAAKv3B,SAAS,SAUzD,IADA,IAAI+C,EAAS,GAAIod,EAAI,EAAG/lB,GANxBm9B,EAAMuzK,EAAM8nE,YAAY6B,EAAQ+E,WAAa,aAAe,QAASjiP,IAMnCl9B,OAC3B8lB,EAAI/lB,GAAK,CACZ,IAAI6gR,EAAeT,EAAWjjP,EAAKz1B,KAAKM,IAAI+d,EAFE,MAES/lB,IACnDq6Q,EAAQ+E,WACRz2Q,EAAOhE,KAAK07Q,EAAWljP,EAAIinC,SAASr+C,EAAG86P,KAEvCl4Q,EAAOhE,KAAK07Q,EAAWljP,EAAIt3B,MAAMkgB,EAAG86P,KAExC96P,EAAI86P,EAER,OAAOl4Q,EAAO6I,KAAK,MAKrB,CAAC,eAAe,GAAG,YAAY,GAAG,UAAU,KAAKsvQ,GAAG,CAAC,SAAS5K,EAAQr2Q,EAAOC,GAC/E,aACA,IAAIu6Q,EAAUnE,EAAQ,aAClBoE,EAAepE,EAAQ,kBACvBmF,EAAanF,EAAQ,gBA6CzB,SAASnmL,EAAS7vE,GACd,OAAOA,EASX,SAAS6gQ,EAAkBxqP,EAAKjvB,GAC5B,IAAK,IAAIpH,EAAI,EAAGA,EAAIq2B,EAAIt2B,SAAUC,EAC9BoH,EAAMpH,GAAyB,IAApBq2B,EAAI4H,WAAWj+B,GAE9B,OAAOoH,EAQX,SAAS05Q,EAAkB15Q,GAUvB,IAAI+xI,EAAQ,MACR1wI,EAAS,GACT3I,EAAMsH,EAAMrH,OACZglB,EAAOnlB,EAAQ+3Q,UAAUvwQ,GACzBye,EAAI,EACJk7P,GAAc,EAChB,IACG,OAAOh8P,GACJ,IAAK,aACFvX,OAAO0vB,aAAaz7B,MAAM,KAAM,IAAI+K,WAAW,IAC/C,MACH,IAAK,aACFgB,OAAO0vB,aAAaz7B,MAAM,KAAM05Q,EAAW,KAGlD,MAAMzjP,GACLqpP,GAAc,EAKjB,IAAKA,EAAa,CAEf,IADA,IAAIC,EAAY,GACRhhR,EAAI,EAAGA,EAAIoH,EAAMrH,OAAOC,IAC7BghR,GAAaxzQ,OAAO0vB,aAAa91B,EAAMpH,IAE/C,OAAOghR,EAEP,KAAOn7P,EAAI/lB,GAAOq5I,EAAQ,GACtB,IACiB,UAATp0H,GAA6B,eAATA,EACpBtc,EAAOhE,KAAK+I,OAAO0vB,aAAaz7B,MAAM,KAAM2F,EAAMzB,MAAMkgB,EAAGre,KAAKM,IAAI+d,EAAIszH,EAAOr5I,MAG/E2I,EAAOhE,KAAK+I,OAAO0vB,aAAaz7B,MAAM,KAAM2F,EAAM88D,SAASr+C,EAAGre,KAAKM,IAAI+d,EAAIszH,EAAOr5I,MAEtF+lB,GAAKszH,EAET,MAAOzhH,GACHyhH,EAAQ3xI,KAAK8H,MAAM6pI,EAAQ,GAGnC,OAAO1wI,EAAO6I,KAAK,IAYvB,SAAS2vQ,EAAqBC,EAAWC,GACrC,IAAK,IAAInhR,EAAI,EAAGA,EAAIkhR,EAAUnhR,OAAQC,IAClCmhR,EAAQnhR,GAAKkhR,EAAUlhR,GAE3B,OAAOmhR,EAjIXvhR,EAAQu5Q,cAAgB,SAAS9iP,GAE7B,IADA,IAAI5tB,EAAS,GACJzI,EAAI,EAAGA,EAAIq2B,EAAIt2B,OAAQC,IAC5ByI,GAAU+E,OAAO0vB,aAAiC,IAApB7G,EAAI4H,WAAWj+B,IAEjD,OAAOyI,GAEX7I,EAAQ25Q,iBAAmB,SAASx2P,GAChCnjB,EAAQ45Q,aAAa,QAErB,IAEI,OAAO,IAAIvjP,KAAK,CAAClT,GAAS,CACtBgC,KAAM,oBAGd,MAAO2S,GAEH,IAEI,IACI0nP,EAAU,IADAztQ,OAAO0tQ,aAAe1tQ,OAAO2tQ,mBAAqB3tQ,OAAO4tQ,gBAAkB5tQ,OAAO6tQ,eAGhG,OADAJ,EAAQz3O,OAAO5kB,GACRq8P,EAAQK,QAAQ,mBAE3B,MAAO/nP,GAGH,MAAM,IAAIvwB,MAAM,sCAwF5BvH,EAAQ0gR,kBAAoBQ,EAiB5B,IAAI9xM,EAAY,GAGhBA,EAAkB,OAAI,CAClB,OAAU6gB,EACV,MAAS,SAAS7vE,GACd,OAAO6gQ,EAAkB7gQ,EAAO,IAAI9f,MAAM8f,EAAMjgB,UAEpD,YAAe,SAASigB,GACpB,OAAOgvD,EAAkB,OAAc,WAAEhvD,GAAO+C,QAEpD,WAAc,SAAS/C,GACnB,OAAO6gQ,EAAkB7gQ,EAAO,IAAIxT,WAAWwT,EAAMjgB,UAEzD,WAAc,SAASigB,GACnB,OAAO6gQ,EAAkB7gQ,EAAOm7P,EAAWn7P,EAAMjgB,WAKzDivE,EAAiB,MAAI,CACjB,OAAU8xM,EACV,MAASjxL,EACT,YAAe,SAAS7vE,GACpB,OAAO,IAAKxT,WAAWwT,GAAQ+C,QAEnC,WAAc,SAAS/C,GACnB,OAAO,IAAIxT,WAAWwT,IAE1B,WAAc,SAASA,GACnB,OAAOm7P,EAAWn7P,KAK1BgvD,EAAuB,YAAI,CACvB,OAAU,SAAShvD,GACf,OAAO8gQ,EAAkB,IAAIt0Q,WAAWwT,KAE5C,MAAS,SAASA,GACd,OAAOihQ,EAAqB,IAAIz0Q,WAAWwT,GAAQ,IAAI9f,MAAM8f,EAAMsV,cAEvE,YAAeu6D,EACf,WAAc,SAAS7vE,GACnB,OAAO,IAAIxT,WAAWwT,IAE1B,WAAc,SAASA,GACnB,OAAOm7P,EAAW,IAAI3uQ,WAAWwT,MAKzCgvD,EAAsB,WAAI,CACtB,OAAU8xM,EACV,MAAS,SAAS9gQ,GACd,OAAOihQ,EAAqBjhQ,EAAO,IAAI9f,MAAM8f,EAAMjgB,UAEvD,YAAe,SAASigB,GACpB,OAAOA,EAAM+C,QAEjB,WAAc8sE,EACd,WAAc,SAAS7vE,GACnB,OAAOm7P,EAAWn7P,KAK1BgvD,EAAsB,WAAI,CACtB,OAAU8xM,EACV,MAAS,SAAS9gQ,GACd,OAAOihQ,EAAqBjhQ,EAAO,IAAI9f,MAAM8f,EAAMjgB,UAEvD,YAAe,SAASigB,GACpB,OAAOgvD,EAAsB,WAAc,WAAEhvD,GAAO+C,QAExD,WAAc,SAAS/C,GACnB,OAAOihQ,EAAqBjhQ,EAAO,IAAIxT,WAAWwT,EAAMjgB,UAE5D,WAAc8vF,GAWlBjwF,EAAQ04Q,YAAc,SAAS7uB,EAAYzpO,GAMvC,GALKA,IAGDA,EAAQ,KAEPypO,EACD,OAAOzpO,EAEXpgB,EAAQ45Q,aAAa/vB,GACrB,IAAIC,EAAY9pP,EAAQ+3Q,UAAU33P,GAElC,OADagvD,EAAU06K,GAAWD,GAAYzpO,IAUlDpgB,EAAQ+3Q,UAAY,SAAS33P,GACzB,MAAqB,iBAAVA,EACA,SAEmC,mBAA1C1d,OAAOI,UAAUgD,SAAStC,KAAK4c,GACxB,QAEPm6P,EAAQqB,YAAcL,EAAWt1Q,KAAKma,GAC/B,aAEPm6P,EAAQ+E,YAAcl/P,aAAiBxT,WAChC,aAEP2tQ,EAAQ8E,aAAej/P,aAAiB8W,YACjC,mBADX,GAUJl3B,EAAQ45Q,aAAe,SAASz0P,GAE5B,IADgBo1P,EAAQp1P,EAAKjU,eAEzB,MAAM,IAAI3J,MAAM4d,EAAO,sCAG/BnlB,EAAQ65Q,iBAAmB,MAC3B75Q,EAAQ85Q,kBAAoB,EAO5B95Q,EAAQ+5Q,OAAS,SAAStjP,GACtB,IACIwjO,EAAM75P,EADN0pB,EAAM,GAEV,IAAK1pB,EAAI,EAAGA,GAAKq2B,GAAO,IAAIt2B,OAAQC,IAEhC0pB,GAAO,QADPmwO,EAAOxjO,EAAI4H,WAAWj+B,IACC,GAAK,IAAM,IAAM65P,EAAKn0P,SAAS,IAAImiF,cAE9D,OAAOn+D,GAQX9pB,EAAQg6Q,gBAAkB,SAAS9C,GAC/B,IAAK,IAAIrvO,KAAU2yO,EACf,GAAKA,EAAaj1Q,eAAesiC,IAG7B2yO,EAAa3yO,GAAQirO,QAAUoE,EAC/B,OAAOsD,EAAa3yO,GAG5B,OAAO,MAQX7nC,EAAQgxO,SAAW,SAAU1rO,GACzB,MAAkD,oBAA3C5C,OAAOI,UAAUgD,SAAStC,KAAK8B,KAIxC,CAAC,iBAAiB,EAAE,eAAe,GAAG,YAAY,KAAKk8Q,GAAG,CAAC,SAASpL,EAAQr2Q,EAAOC,GACrF,aACA,IAAIm/Q,EAAe/I,EAAQ,kBACvBiF,EAAmBjF,EAAQ,sBAC3BgF,EAAmBhF,EAAQ,sBAC3BxlE,EAAQwlE,EAAQ,WAChByC,EAAMzC,EAAQ,eACdqL,EAAWrL,EAAQ,cACnBmE,EAAUnE,EAAQ,aAClBsL,EAAatL,EAAQ,YAQzB,SAASsE,EAAWr0Q,EAAM0yB,GACtBr3B,KAAKghC,MAAQ,GACbhhC,KAAKq3B,YAAcA,EACf1yB,GACA3E,KAAKm+B,KAAKx5B,GAGlBq0Q,EAAW53Q,UAAY,CAMnB6+Q,eAAgB,SAASC,GACrB,IAAIjkP,EAAYj8B,KAAKmgR,OAAOpJ,WAAW,GACvC,GAAI96O,IAAcikP,EACd,MAAM,IAAIr6Q,MAAM,gDAAuDqpM,EAAMmpE,OAAOp8O,GAAa,cAAgBizK,EAAMmpE,OAAO6H,GAAqB,MAM3JE,sBAAuB,WACnBpgR,KAAKqgR,WAAargR,KAAKmgR,OAAOrJ,QAAQ,GACtC92Q,KAAKsgR,wBAA0BtgR,KAAKmgR,OAAOrJ,QAAQ,GACnD92Q,KAAKugR,4BAA8BvgR,KAAKmgR,OAAOrJ,QAAQ,GACvD92Q,KAAKwgR,kBAAoBxgR,KAAKmgR,OAAOrJ,QAAQ,GAC7C92Q,KAAKygR,eAAiBzgR,KAAKmgR,OAAOrJ,QAAQ,GAC1C92Q,KAAK0gR,iBAAmB1gR,KAAKmgR,OAAOrJ,QAAQ,GAE5C92Q,KAAK2gR,iBAAmB3gR,KAAKmgR,OAAOrJ,QAAQ,GAI5C92Q,KAAKs5Q,WAAat5Q,KAAKmgR,OAAOpJ,WAAW/2Q,KAAK2gR,kBAG9C3gR,KAAKs5Q,WAAa0G,EAAW1F,WAAWt6Q,KAAKs5Q,aAQjDsH,2BAA4B,WACxB5gR,KAAK6gR,sBAAwB7gR,KAAKmgR,OAAOrJ,QAAQ,GACjD92Q,KAAK8gR,cAAgB9gR,KAAKmgR,OAAOpJ,WAAW,GAC5C/2Q,KAAK+gR,cAAgB/gR,KAAKmgR,OAAOrJ,QAAQ,GACzC92Q,KAAKqgR,WAAargR,KAAKmgR,OAAOrJ,QAAQ,GACtC92Q,KAAKsgR,wBAA0BtgR,KAAKmgR,OAAOrJ,QAAQ,GACnD92Q,KAAKugR,4BAA8BvgR,KAAKmgR,OAAOrJ,QAAQ,GACvD92Q,KAAKwgR,kBAAoBxgR,KAAKmgR,OAAOrJ,QAAQ,GAC7C92Q,KAAKygR,eAAiBzgR,KAAKmgR,OAAOrJ,QAAQ,GAC1C92Q,KAAK0gR,iBAAmB1gR,KAAKmgR,OAAOrJ,QAAQ,GAE5C92Q,KAAKghR,oBAAsB,GAM3B,IALA,IAEIC,EACAC,EACAC,EAJAC,EAAgBphR,KAAK6gR,sBAAwB,GACrC,EAIGO,GACXH,EAAejhR,KAAKmgR,OAAOrJ,QAAQ,GACnCoK,EAAmBlhR,KAAKmgR,OAAOrJ,QAAQ,GACvCqK,EAAkBnhR,KAAKmgR,OAAOpJ,WAAWmK,GACzClhR,KAAKghR,oBAAoBC,GAAgB,CACrC5/P,GAAI4/P,EACJxiR,OAAQyiR,EACRxhR,MAAOyhR,IAOnBE,kCAAmC,WAI/B,GAHArhR,KAAKshR,6BAA+BthR,KAAKmgR,OAAOrJ,QAAQ,GACxD92Q,KAAKuhR,mCAAqCvhR,KAAKmgR,OAAOrJ,QAAQ,GAC9D92Q,KAAKwhR,WAAaxhR,KAAKmgR,OAAOrJ,QAAQ,GAClC92Q,KAAKwhR,WAAa,EAClB,MAAM,IAAI37Q,MAAM,wCAMxB47Q,eAAgB,WACZ,IAAI/iR,EAAGwjC,EACP,IAAKxjC,EAAI,EAAGA,EAAIsB,KAAKghC,MAAMviC,OAAQC,IAC/BwjC,EAAOliC,KAAKghC,MAAMtiC,GAClBsB,KAAKmgR,OAAOvJ,SAAS10O,EAAKw/O,mBAC1B1hR,KAAKigR,eAAe9I,EAAI8E,mBACxB/5O,EAAKy/O,cAAc3hR,KAAKmgR,QACxBj+O,EAAK0/O,cAMbC,eAAgB,WACZ,IAAI3/O,EAGJ,IADAliC,KAAKmgR,OAAOvJ,SAAS52Q,KAAK0gR,kBACnB1gR,KAAKmgR,OAAOpJ,WAAW,KAAOI,EAAIgF,sBACrCj6O,EAAO,IAAI69O,EAAS,CAChB+B,MAAO9hR,KAAK8hR,OACb9hR,KAAKq3B,cACH0qP,gBAAgB/hR,KAAKmgR,QAC1BngR,KAAKghC,MAAM79B,KAAK++B,IAMxB8/O,iBAAkB,WACd,IAAIp1Q,EAAS5M,KAAKmgR,OAAOjJ,qBAAqBC,EAAI+F,uBAClD,IAAgB,IAAZtwQ,EACA,MAAM,IAAI/G,MAAM,uDAiBpB,GAfA7F,KAAKmgR,OAAOvJ,SAAShqQ,GACrB5M,KAAKigR,eAAe9I,EAAI+F,uBACxBl9Q,KAAKogR,wBAaDpgR,KAAKqgR,aAAenxE,EAAMipE,kBAAoBn4Q,KAAKsgR,0BAA4BpxE,EAAMipE,kBAAoBn4Q,KAAKugR,8BAAgCrxE,EAAMipE,kBAAoBn4Q,KAAKwgR,oBAAsBtxE,EAAMipE,kBAAoBn4Q,KAAKygR,iBAAmBvxE,EAAMkpE,kBAAoBp4Q,KAAK0gR,mBAAqBxxE,EAAMkpE,iBAAkB,CAcjU,GAbAp4Q,KAAK8hR,OAAQ,GAaG,KADhBl1Q,EAAS5M,KAAKmgR,OAAOjJ,qBAAqBC,EAAIkG,kCAE1C,MAAM,IAAIx3Q,MAAM,yEAEpB7F,KAAKmgR,OAAOvJ,SAAShqQ,GACrB5M,KAAKigR,eAAe9I,EAAIkG,iCACxBr9Q,KAAKqhR,oCAGLrhR,KAAKmgR,OAAOvJ,SAAS52Q,KAAKuhR,oCAC1BvhR,KAAKigR,eAAe9I,EAAImG,6BACxBt9Q,KAAK4gR,+BAGbqB,cAAe,SAASt9Q,GACpB,IAAI8e,EAAOyrL,EAAMmnE,UAAU1xQ,GACd,WAAT8e,GAAsBo1P,EAAQ+E,WAI9B59Q,KAAKmgR,OADS,eAAT18P,EACS,IAAIk2P,EAAiBh1Q,GAGrB,IAAI+0Q,EAAiBxqE,EAAM8nE,YAAY,aAAcryQ,IANnE3E,KAAKmgR,OAAS,IAAI1C,EAAa94Q,EAAM3E,KAAKq3B,YAAY+hP,wBAa9Dj7O,KAAM,SAASx5B,GACX3E,KAAKiiR,cAAct9Q,GACnB3E,KAAKgiR,mBACLhiR,KAAK6hR,iBACL7hR,KAAKyhR,mBAIbpjR,EAAOC,QAAU06Q,GAEf,CAAC,qBAAqB,GAAG,WAAW,GAAG,cAAc,GAAG,iBAAiB,GAAG,YAAY,GAAG,qBAAqB,GAAG,UAAU,GAAG,aAAa,KAAKkJ,GAAG,CAAC,SAASxN,EAAQr2Q,EAAOC,GAChL,aACA,IAAIm/Q,EAAe/I,EAAQ,kBACvBxlE,EAAQwlE,EAAQ,WAChBU,EAAmBV,EAAQ,sBAC3BsL,EAAatL,EAAQ,YAQzB,SAASqL,EAAS9oK,EAAS5/E,GACvBr3B,KAAKi3G,QAAUA,EACfj3G,KAAKq3B,YAAcA,EAEvB0oP,EAAS3+Q,UAAY,CAKjB+gR,YAAa,WAET,OAAmC,IAAZ,EAAfniR,KAAKoiR,UAMjBC,QAAS,WAEL,OAAmC,OAAZ,KAAfriR,KAAKoiR,UASjBE,yBAA0B,SAASnC,EAAQx9Q,EAAMlE,GAC7C,OAAO,WACH,IAAI8jR,EAAgBpC,EAAOl6Q,MAC3Bk6Q,EAAOvJ,SAASj0Q,GAChB,IAAI6/Q,EAAqBrC,EAAOlJ,SAASx4Q,GAGzC,OAFA0hR,EAAOvJ,SAAS2L,GAETC,IAYfC,eAAgB,SAAStC,EAAQx9Q,EAAMlE,EAAQi5Q,EAAapC,GACxD,OAAO,WAEH,IAAIkN,EAAqBtzE,EAAM8nE,YAAYU,EAAYzB,oBAAqBj2Q,KAAK21Q,wBAC7E+M,EAAuBhL,EAAY3B,WAAWyM,GAElD,GAAIE,EAAqBjkR,SAAW62Q,EAChC,MAAM,IAAIzvQ,MAAM,yCAGpB,OAAO68Q,IAOff,cAAe,SAASxB,GACpB,IAAIzI,EAAaiL,EAwBjB,GAjBAxC,EAAOlxI,KAAK,IAYZjvI,KAAK4iR,eAAiBzC,EAAOrJ,QAAQ,GACrC6L,EAAyBxC,EAAOrJ,QAAQ,GACxC92Q,KAAKk5Q,SAAWiH,EAAOpJ,WAAW/2Q,KAAK4iR,gBACvCzC,EAAOlxI,KAAK0zI,IAEgB,GAAxB3iR,KAAKq1Q,iBAAkD,GAA1Br1Q,KAAKs1Q,iBAClC,MAAM,IAAIzvQ,MAAM,qIAIpB,GAAoB,QADpB6xQ,EAAcxoE,EAAMopE,gBAAgBt4Q,KAAKw1Q,oBAErC,MAAM,IAAI3vQ,MAAM,+BAAiCqpM,EAAMmpE,OAAOr4Q,KAAKw1Q,mBAAqB,0BAA4Bx1Q,KAAKk5Q,SAAW,KAWxI,GATAl5Q,KAAKm5Q,aAAe,IAAI/D,EACxBp1Q,KAAKm5Q,aAAa9D,eAAiBr1Q,KAAKq1Q,eACxCr1Q,KAAKm5Q,aAAa7D,iBAAmBt1Q,KAAKs1Q,iBAC1Ct1Q,KAAKm5Q,aAAa5D,MAAQv1Q,KAAKu1Q,MAC/Bv1Q,KAAKm5Q,aAAa3D,kBAAoBx1Q,KAAKw1Q,kBAC3Cx1Q,KAAKm5Q,aAAaxD,qBAAuB31Q,KAAKsiR,yBAAyBnC,EAAQA,EAAOl6Q,MAAOjG,KAAKq1Q,eAAgBqC,GAClH13Q,KAAKm5Q,aAAazD,WAAa11Q,KAAKyiR,eAAetC,EAAQA,EAAOl6Q,MAAOjG,KAAKq1Q,eAAgBqC,EAAa13Q,KAAKs1Q,kBAG5Gt1Q,KAAKq3B,YAAYwrP,aACjB7iR,KAAKm5Q,aAAejqE,EAAM8nE,YAAY,SAAUh3Q,KAAKm5Q,aAAazD,cAC9DsK,EAAWzK,MAAMv1Q,KAAKm5Q,gBAAkBn5Q,KAAKu1Q,OAC7C,MAAM,IAAI1vQ,MAAM,mCAS5Bk8Q,gBAAiB,SAAS5B,GAiBtB,GAhBAngR,KAAK8gR,cAAgBX,EAAOpJ,WAAW,GACvC/2Q,KAAK+gR,cAAgBZ,EAAOrJ,QAAQ,GACpC92Q,KAAKoiR,QAAUjC,EAAOrJ,QAAQ,GAC9B92Q,KAAKw1Q,kBAAoB2K,EAAOpJ,WAAW,GAC3C/2Q,KAAKmsN,KAAOg0D,EAAO/I,WACnBp3Q,KAAKu1Q,MAAQ4K,EAAOrJ,QAAQ,GAC5B92Q,KAAKq1Q,eAAiB8K,EAAOrJ,QAAQ,GACrC92Q,KAAKs1Q,iBAAmB6K,EAAOrJ,QAAQ,GACvC92Q,KAAK4iR,eAAiBzC,EAAOrJ,QAAQ,GACrC92Q,KAAK8iR,kBAAoB3C,EAAOrJ,QAAQ,GACxC92Q,KAAK+iR,kBAAoB5C,EAAOrJ,QAAQ,GACxC92Q,KAAKgjR,gBAAkB7C,EAAOrJ,QAAQ,GACtC92Q,KAAKijR,uBAAyB9C,EAAOrJ,QAAQ,GAC7C92Q,KAAKkjR,uBAAyB/C,EAAOrJ,QAAQ,GAC7C92Q,KAAK0hR,kBAAoBvB,EAAOrJ,QAAQ,GAEpC92Q,KAAKmiR,cACL,MAAM,IAAIt8Q,MAAM,mCAGpB7F,KAAKk5Q,SAAWiH,EAAOpJ,WAAW/2Q,KAAK4iR,gBACvC5iR,KAAKmjR,gBAAgBhD,GACrBngR,KAAKojR,qBAAqBjD,GAC1BngR,KAAKq5Q,YAAc8G,EAAOpJ,WAAW/2Q,KAAK+iR,mBAG1C/iR,KAAKw3Q,OAAoC,GAA9Bx3Q,KAAKkjR,yBAMpBE,qBAAsB,SAASjD,GAE3B,GAAKngR,KAAK67Q,YAAY,GAAtB,CAKA,IAAIwH,EAAc,IAAI5F,EAAaz9Q,KAAK67Q,YAAY,GAAQn8Q,OAIxDM,KAAKs1Q,mBAAqBpmE,EAAMkpE,mBAChCp4Q,KAAKs1Q,iBAAmB+N,EAAYvM,QAAQ,IAE5C92Q,KAAKq1Q,iBAAmBnmE,EAAMkpE,mBAC9Bp4Q,KAAKq1Q,eAAiBgO,EAAYvM,QAAQ,IAE1C92Q,KAAK0hR,oBAAsBxyE,EAAMkpE,mBACjCp4Q,KAAK0hR,kBAAoB2B,EAAYvM,QAAQ,IAE7C92Q,KAAKgjR,kBAAoB9zE,EAAMkpE,mBAC/Bp4Q,KAAKgjR,gBAAkBK,EAAYvM,QAAQ,MAOnDqM,gBAAiB,SAAShD,GACtB,IACIc,EACAC,EACAC,EAHA30Q,EAAQ2zQ,EAAOl6Q,MAOnB,IAFAjG,KAAK67Q,YAAc77Q,KAAK67Q,aAAe,GAEhCsE,EAAOl6Q,MAAQuG,EAAQxM,KAAK8iR,mBAC/B7B,EAAed,EAAOrJ,QAAQ,GAC9BoK,EAAmBf,EAAOrJ,QAAQ,GAClCqK,EAAkBhB,EAAOpJ,WAAWmK,GAEpClhR,KAAK67Q,YAAYoF,GAAgB,CAC7B5/P,GAAI4/P,EACJxiR,OAAQyiR,EACRxhR,MAAOyhR,IAOnBS,WAAY,WACR,GAAI5hR,KAAKqiR,UACLriR,KAAKk5Q,SAAW8G,EAAW1F,WAAWt6Q,KAAKk5Q,UAC3Cl5Q,KAAKq5Q,YAAc2G,EAAW1F,WAAWt6Q,KAAKq5Q,iBAC3C,CACH,IAAIiK,EAAQtjR,KAAKujR,4BACH,OAAVD,IACAtjR,KAAKk5Q,SAAWoK,GAEpB,IAAIE,EAAWxjR,KAAKyjR,+BACH,OAAbD,IACAxjR,KAAKq5Q,YAAcmK,KAS/BD,0BAA2B,WACvB,IAAIG,EAAa1jR,KAAK67Q,YAAY,OAClC,GAAI6H,EAAY,CACZ,IAAIL,EAAc,IAAI5F,EAAaiG,EAAWhkR,OAG9C,OAA+B,IAA3B2jR,EAAYvM,QAAQ,IAKpBkJ,EAAWzK,MAAMv1Q,KAAKk5Q,YAAcmK,EAAYvM,QAAQ,GAJjD,KAQJkJ,EAAW1F,WAAW+I,EAAYtM,WAAW2M,EAAWjlR,OAAS,IAE5E,OAAO,MAOXglR,6BAA8B,WAC1B,IAAIE,EAAgB3jR,KAAK67Q,YAAY,OACrC,GAAI8H,EAAe,CACf,IAAIN,EAAc,IAAI5F,EAAakG,EAAcjkR,OAGjD,OAA+B,IAA3B2jR,EAAYvM,QAAQ,IAKpBkJ,EAAWzK,MAAMv1Q,KAAKq5Q,eAAiBgK,EAAYvM,QAAQ,GAJpD,KAQJkJ,EAAW1F,WAAW+I,EAAYtM,WAAW4M,EAAcllR,OAAS,IAE/E,OAAO,OAGfJ,EAAOC,QAAUyhR,GAEf,CAAC,qBAAqB,EAAE,WAAW,GAAG,iBAAiB,GAAG,UAAU,KAAK6D,GAAG,CAAC,SAASlP,EAAQr2Q,EAAOC,GAEvG,aAEA,IAMIk6Q,EAAO,IAEXtpQ,EARgBwlQ,EAAQ,sBAAsBxlQ,QAQvCspQ,EANS9D,EAAQ,iBACRA,EAAQ,iBACRA,EAAQ,yBAMxBr2Q,EAAOC,QAAUk6Q,GACf,CAAC,gBAAgB,GAAG,gBAAgB,GAAG,qBAAqB,GAAG,uBAAuB,KAAKqL,GAAG,CAAC,SAASnP,EAAQr2Q,EAAOC,GACzH,aAGA,IAAIwlR,EAAepP,EAAQ,qBACvBxlE,EAAQwlE,EAAQ,kBAChBp5L,EAAUo5L,EAAQ,mBAClBltQ,EAAMktQ,EAAQ,mBACdqP,EAAUrP,EAAQ,kBA2GlBsP,EAAU,SAAS/sK,GAErBj3G,KAAKi3G,QAAUi4F,EAAMhgM,OAAO,CAC1B68E,OAlGwB,EAmGxB5lD,OA/Fc,EAgGd6xG,UAAW,MACXisI,WAAY,GACZC,SAAU,EACVC,SArGwB,EAsGxB/qC,GAAI,IACHniI,GAAW,IAEd,IAAImtK,EAAMpkR,KAAKi3G,QAEXmtK,EAAIhlB,KAAQglB,EAAIH,WAAa,EAC/BG,EAAIH,YAAcG,EAAIH,WAGfG,EAAIC,MAASD,EAAIH,WAAa,GAAOG,EAAIH,WAAa,KAC7DG,EAAIH,YAAc,IAGpBjkR,KAAKI,IAAS,EACdJ,KAAKwH,IAAS,GACdxH,KAAKskR,OAAS,EACdtkR,KAAK4oQ,OAAS,GAEd5oQ,KAAKukR,KAAO,IAAIR,EAChB/jR,KAAKukR,KAAKC,UAAY,EAEtB,IAAIh+O,EAASs9O,EAAaW,aACxBzkR,KAAKukR,KACLH,EAAIr4L,MACJq4L,EAAIj+O,OACJi+O,EAAIH,WACJG,EAAIF,SACJE,EAAID,UAGN,GAzIoB,IAyIhB39O,EACF,MAAM,IAAI3gC,MAAM2B,EAAIg/B,IAGlB49O,EAAItoE,QACNgoE,EAAaY,iBAAiB1kR,KAAKukR,KAAMH,EAAItoE,SA6JjD,SAAS6oE,EAAQjmQ,EAAOu4F,GACtB,IAAI2tK,EAAW,IAAIZ,EAAQ/sK,GAK3B,GAHA2tK,EAASzhR,KAAKub,GAAO,GAGjBkmQ,EAASxkR,IAAO,MAAMwkR,EAASp9Q,IAEnC,OAAOo9Q,EAASz9Q,OArIlB68Q,EAAQ5iR,UAAU+B,KAAO,SAASwB,EAAMysD,GACtC,IAEI5qB,EAAQw1M,EAFRuoC,EAAOvkR,KAAKukR,KACZvsI,EAAYh4I,KAAKi3G,QAAQ+gC,UAG7B,GAAIh4I,KAAKskR,MAAS,OAAO,EAEzBtoC,EAAS5qL,MAAWA,EAAQA,GAAkB,IAATA,EAvLjB,EADA,EA6LlBmzN,EAAK7lQ,MAFa,iBAAT/Z,EAEI22E,EAAQ8jM,WAAWz6Q,GAEnBA,EAGf4/Q,EAAKM,QAAU,EACfN,EAAKO,SAAWP,EAAK7lQ,MAAMjgB,OAE3B,EAAG,CAQD,GAPuB,IAAnB8lR,EAAKC,YACPD,EAAK5mQ,OAAS,IAAIuxL,EAAM61E,KAAK/sI,GAC7BusI,EAAKS,SAAW,EAChBT,EAAKC,UAAYxsI,GArMD,KAuMlBxxG,EAASs9O,EAAaa,QAAQJ,EAAMvoC,KAxMlB,IA0Max1M,EAG7B,OAFAxmC,KAAKilR,MAAMz+O,GACXxmC,KAAKskR,OAAQ,GACN,GAEc,IAAnBC,EAAKC,WAAsC,IAAlBD,EAAKO,UAjNhB,IAiNkC9oC,KAC1B,WAApBh8O,KAAKi3G,QAAQmiI,GACfp5O,KAAKklR,OAAO5pM,EAAQ6pM,cAAcj2E,EAAMk2E,UAAUb,EAAK5mQ,OAAQ4mQ,EAAKS,YAEpEhlR,KAAKklR,OAAOh2E,EAAMk2E,UAAUb,EAAK5mQ,OAAQ4mQ,EAAKS,mBAG1CT,EAAKO,SAAW,GAAwB,IAAnBP,EAAKC,YArNhB,IAqNoCh+O,GAGxD,OA3NoB,IA2NhBw1M,IACFx1M,EAASs9O,EAAauB,WAAWrlR,KAAKukR,MACtCvkR,KAAKilR,MAAMz+O,GACXxmC,KAAKskR,OAAQ,EA5NK,IA6NX99O,IAgBXw9O,EAAQ5iR,UAAU8jR,OAAS,SAASrtI,GAClC73I,KAAK4oQ,OAAOzlQ,KAAK00I,IAanBmsI,EAAQ5iR,UAAU6jR,MAAQ,SAASz+O,GA3Pb,IA6PhBA,IACsB,WAApBxmC,KAAKi3G,QAAQmiI,GACfp5O,KAAKmH,OAASnH,KAAK4oQ,OAAO54P,KAAK,IAE/BhQ,KAAKmH,OAAS+nM,EAAMo2E,cAActlR,KAAK4oQ,SAG3C5oQ,KAAK4oQ,OAAS,GACd5oQ,KAAKI,IAAMomC,EACXxmC,KAAKwH,IAAMxH,KAAKukR,KAAK/8Q,KA+EvBlJ,EAAQ0lR,QAAUA,EAClB1lR,EAAQqmR,QAAUA,EAClBrmR,EAAQm6Q,WAxBR,SAAoB/5P,EAAOu4F,GAGzB,OAFAA,EAAUA,GAAW,IACbmoJ,KAAM,EACPulB,EAAQjmQ,EAAOu4F,IAsBxB34G,EAAQ+lR,KAVR,SAAc3lQ,EAAOu4F,GAGnB,OAFAA,EAAUA,GAAW,IACbotK,MAAO,EACRM,EAAQjmQ,EAAOu4F,KAQtB,CAAC,iBAAiB,GAAG,kBAAkB,GAAG,oBAAoB,GAAG,kBAAkB,GAAG,iBAAiB,KAAKsuK,GAAG,CAAC,SAAS7Q,EAAQr2Q,EAAOC,GAC1I,aAGA,IAAIknR,EAAe9Q,EAAQ,qBACvBxlE,EAAQwlE,EAAQ,kBAChBp5L,EAAUo5L,EAAQ,mBAClBvnQ,EAAIunQ,EAAQ,oBACZltQ,EAAMktQ,EAAQ,mBACdqP,EAAUrP,EAAQ,kBAClB+Q,EAAW/Q,EAAQ,mBA+EnBgR,EAAU,SAASzuK,GAErBj3G,KAAKi3G,QAAUi4F,EAAMhgM,OAAO,CAC1B8oI,UAAW,MACXisI,WAAY,EACZ7qC,GAAI,IACHniI,GAAW,IAEd,IAAImtK,EAAMpkR,KAAKi3G,QAIXmtK,EAAIhlB,KAAQglB,EAAIH,YAAc,GAAOG,EAAIH,WAAa,KACxDG,EAAIH,YAAcG,EAAIH,WACC,IAAnBG,EAAIH,aAAoBG,EAAIH,YAAc,OAI3CG,EAAIH,YAAc,GAAOG,EAAIH,WAAa,KACzChtK,GAAWA,EAAQgtK,aACvBG,EAAIH,YAAc,IAKfG,EAAIH,WAAa,IAAQG,EAAIH,WAAa,IAGf,IAAR,GAAjBG,EAAIH,cACPG,EAAIH,YAAc,IAItBjkR,KAAKI,IAAS,EACdJ,KAAKwH,IAAS,GACdxH,KAAKskR,OAAS,EACdtkR,KAAK4oQ,OAAS,GAEd5oQ,KAAKukR,KAAS,IAAIR,EAClB/jR,KAAKukR,KAAKC,UAAY,EAEtB,IAAIh+O,EAAUg/O,EAAaG,aACzB3lR,KAAKukR,KACLH,EAAIH,YAGN,GAAIz9O,IAAWr5B,EAAEy4Q,KACf,MAAM,IAAI//Q,MAAM2B,EAAIg/B,IAGtBxmC,KAAK87M,OAAS,IAAI2pE,EAElBD,EAAaK,iBAAiB7lR,KAAKukR,KAAMvkR,KAAK87M,SAuLhD,SAASgqE,EAAQpnQ,EAAOu4F,GACtB,IAAI8uK,EAAW,IAAIL,EAAQzuK,GAK3B,GAHA8uK,EAAS5iR,KAAKub,GAAO,GAGjBqnQ,EAAS3lR,IAAO,MAAM2lR,EAASv+Q,IAEnC,OAAOu+Q,EAAS5+Q,OAjKlBu+Q,EAAQtkR,UAAU+B,KAAO,SAASwB,EAAMysD,GACtC,IAEI5qB,EAAQw1M,EACRgqC,EAAeC,EAAMC,EAHrB3B,EAAOvkR,KAAKukR,KACZvsI,EAAYh4I,KAAKi3G,QAAQ+gC,UAI7B,GAAIh4I,KAAKskR,MAAS,OAAO,EACzBtoC,EAAS5qL,MAAWA,EAAQA,GAAkB,IAATA,EAAiBjkD,EAAEg5Q,SAAWh5Q,EAAEi5Q,WAKnE7B,EAAK7lQ,MAFa,iBAAT/Z,EAEI22E,EAAQ+qM,cAAc1hR,GAEtBA,EAGf4/Q,EAAKM,QAAU,EACfN,EAAKO,SAAWP,EAAK7lQ,MAAMjgB,OAE3B,EAAG,CASD,GARuB,IAAnB8lR,EAAKC,YACPD,EAAK5mQ,OAAS,IAAIuxL,EAAM61E,KAAK/sI,GAC7BusI,EAAKS,SAAW,EAChBT,EAAKC,UAAYxsI,IAGnBxxG,EAASg/O,EAAaM,QAAQvB,EAAMp3Q,EAAEi5Q,eAEvBj5Q,EAAEm5Q,cAAgB9/O,IAAWr5B,EAAEy4Q,KAG5C,OAFA5lR,KAAKilR,MAAMz+O,GACXxmC,KAAKskR,OAAQ,GACN,EAGLC,EAAKS,WACgB,IAAnBT,EAAKC,WAAmBh+O,IAAWr5B,EAAEm5Q,cAAmC,IAAlB/B,EAAKO,UAAkB9oC,IAAU7uO,EAAEg5Q,YAEnE,WAApBnmR,KAAKi3G,QAAQmiI,IAEf4sC,EAAgB1qM,EAAQsjM,WAAW2F,EAAK5mQ,OAAQ4mQ,EAAKS,UAErDiB,EAAO1B,EAAKS,SAAWgB,EACvBE,EAAU5qM,EAAQujM,WAAW0F,EAAK5mQ,OAAQqoQ,GAG1CzB,EAAKS,SAAWiB,EAChB1B,EAAKC,UAAYxsI,EAAYiuI,EACzBA,GAAQ/2E,EAAMq3E,SAAShC,EAAK5mQ,OAAQ4mQ,EAAK5mQ,OAAQqoQ,EAAeC,EAAM,GAE1EjmR,KAAKklR,OAAOgB,IAGZlmR,KAAKklR,OAAOh2E,EAAMk2E,UAAUb,EAAK5mQ,OAAQ4mQ,EAAKS,kBAI5CT,EAAKO,SAAW,GAAMt+O,IAAWr5B,EAAEm5Q,cAM7C,OAJI9/O,IAAWr5B,EAAEm5Q,eACftqC,EAAQ7uO,EAAEg5Q,UAGRnqC,IAAU7uO,EAAEg5Q,WACd3/O,EAASg/O,EAAagB,WAAWxmR,KAAKukR,MACtCvkR,KAAKilR,MAAMz+O,GACXxmC,KAAKskR,OAAQ,EACN99O,IAAWr5B,EAAEy4Q,OAgBxBF,EAAQtkR,UAAU8jR,OAAS,SAASrtI,GAClC73I,KAAK4oQ,OAAOzlQ,KAAK00I,IAanB6tI,EAAQtkR,UAAU6jR,MAAQ,SAASz+O,GAE7BA,IAAWr5B,EAAEy4Q,OACS,WAApB5lR,KAAKi3G,QAAQmiI,GAGfp5O,KAAKmH,OAASnH,KAAK4oQ,OAAO54P,KAAK,IAE/BhQ,KAAKmH,OAAS+nM,EAAMo2E,cAActlR,KAAK4oQ,SAG3C5oQ,KAAK4oQ,OAAS,GACd5oQ,KAAKI,IAAMomC,EACXxmC,KAAKwH,IAAMxH,KAAKukR,KAAK/8Q,KAgFvBlJ,EAAQonR,QAAUA,EAClBpnR,EAAQwnR,QAAUA,EAClBxnR,EAAQo6Q,WAnBR,SAAoBh6P,EAAOu4F,GAGzB,OAFAA,EAAUA,GAAW,IACbmoJ,KAAM,EACP0mB,EAAQpnQ,EAAOu4F,IAiBxB34G,EAAQmoR,OAAUX,GAEhB,CAAC,iBAAiB,GAAG,kBAAkB,GAAG,mBAAmB,GAAG,kBAAkB,GAAG,oBAAoB,GAAG,kBAAkB,GAAG,iBAAiB,KAAKY,GAAG,CAAC,SAAShS,EAAQr2Q,EAAOC,GACrL,aAGA,IAAIqoR,EAAmC,oBAAfz7Q,YACgB,oBAAhB2oB,aACe,oBAAf5oB,WAGxB3M,EAAQ4Q,OAAS,SAAUjL,GAEzB,IADA,IAAI2iR,EAAUhoR,MAAMwC,UAAUiD,MAAMvC,KAAK5B,UAAW,GAC7C0mR,EAAQnoR,QAAQ,CACrB,IAAI25I,EAASwuI,EAAQxjJ,QACrB,GAAKgV,EAAL,CAEA,GAAuB,iBAAb,EACR,MAAM,IAAI53I,UAAU43I,EAAS,sBAG/B,IAAK,IAAI70I,KAAK60I,EACRA,EAAOv0I,eAAeN,KACxBU,EAAIV,GAAK60I,EAAO70I,KAKtB,OAAOU,GAKT3F,EAAQ8mR,UAAY,SAAUzpP,EAAKxzB,GACjC,OAAIwzB,EAAIl9B,SAAW0J,EAAewzB,EAC9BA,EAAIinC,SAAmBjnC,EAAIinC,SAAS,EAAGz6D,IAC3CwzB,EAAIl9B,OAAS0J,EACNwzB,IAIT,IAAIkrP,EAAU,CACZN,SAAU,SAAUO,EAAMpwI,EAAKqwI,EAAUvoR,EAAKwoR,GAC5C,GAAItwI,EAAI9zE,UAAYkkN,EAAKlkN,SACvBkkN,EAAK7hR,IAAIyxI,EAAI9zE,SAASmkN,EAAUA,EAASvoR,GAAMwoR,QAIjD,IAAI,IAAItoR,EAAE,EAAGA,EAAEF,EAAKE,IAClBooR,EAAKE,EAAYtoR,GAAKg4I,EAAIqwI,EAAWroR,IAIzC4mR,cAAe,SAAS1c,GACtB,IAAIlqQ,EAAGihB,EAAGnhB,EAAKw9F,EAAK67C,EAAO1wI,EAI3B,IADA3I,EAAM,EACDE,EAAE,EAAGihB,EAAEipP,EAAOnqQ,OAAQC,EAAEihB,EAAGjhB,IAC9BF,GAAOoqQ,EAAOlqQ,GAAGD,OAMnB,IAFA0I,EAAS,IAAI+D,WAAW1M,GACxBw9F,EAAM,EACDt9F,EAAE,EAAGihB,EAAEipP,EAAOnqQ,OAAQC,EAAEihB,EAAGjhB,IAC9Bm5I,EAAQ+wH,EAAOlqQ,GACfyI,EAAOlC,IAAI4yI,EAAO77C,GAClBA,GAAO67C,EAAMp5I,OAGf,OAAO0I,IAIP8/Q,EAAY,CACdV,SAAU,SAAUO,EAAMpwI,EAAKqwI,EAAUvoR,EAAKwoR,GAC5C,IAAI,IAAItoR,EAAE,EAAGA,EAAEF,EAAKE,IAClBooR,EAAKE,EAAYtoR,GAAKg4I,EAAIqwI,EAAWroR,IAIzC4mR,cAAe,SAAS1c,GACtB,MAAO,GAAGt+P,OAAOnK,MAAM,GAAIyoQ,KAO/BtqQ,EAAQ4oR,SAAW,SAAUn/D,GACvBA,GACFzpN,EAAQymR,KAAQ75Q,WAChB5M,EAAQ6oR,MAAQtzP,YAChBv1B,EAAQ8oR,MAAQn8Q,WAChB3M,EAAQ4Q,OAAO5Q,EAASuoR,KAExBvoR,EAAQymR,KAAQnmR,MAChBN,EAAQ6oR,MAAQvoR,MAChBN,EAAQ8oR,MAAQxoR,MAChBN,EAAQ4Q,OAAO5Q,EAAS2oR,KAI5B3oR,EAAQ4oR,SAASP,IACf,IAAIU,GAAG,CAAC,SAAS3S,EAAQr2Q,EAAOC,GAElC,aAGA,IAAI4wM,EAAQwlE,EAAQ,YAQhB4S,GAAe,EACfC,GAAmB,EAEvB,IAAMr7Q,OAAO0vB,aAAaz7B,MAAM,KAAM,CAAC,IAAO,MAAMqnR,GAAMF,GAAe,EACzE,IAAMp7Q,OAAO0vB,aAAaz7B,MAAM,KAAM,IAAI+K,WAAW,IAAO,MAAMs8Q,GAAMD,GAAmB,EAO3F,IADA,IAAI5I,EAAW,IAAIzvE,EAAM61E,KAAK,KACrBrmR,EAAE,EAAGA,EAAE,IAAKA,IACnBigR,EAASjgR,GAAMA,GAAK,IAAM,EAAIA,GAAK,IAAM,EAAIA,GAAK,IAAM,EAAIA,GAAK,IAAM,EAAIA,GAAK,IAAM,EAAI,EA4D5F,SAASymR,EAAcxpP,EAAKn9B,GAE1B,GAAIA,EAAM,QACHm9B,EAAIinC,UAAY2kN,IAAuB5rP,EAAIinC,UAAY0kN,GAC1D,OAAOp7Q,OAAO0vB,aAAaz7B,MAAM,KAAM+uM,EAAMk2E,UAAUzpP,EAAKn9B,IAKhE,IADA,IAAI2I,EAAS,GACLzI,EAAE,EAAGA,EAAIF,EAAKE,IACpByI,GAAU+E,OAAO0vB,aAAaD,EAAIj9B,IAEpC,OAAOyI,EAtETw3Q,EAAS,KAAKA,EAAS,KAAK,EAI5BrgR,EAAQ8gR,WAAa,SAAUrqP,GAC7B,IAAI4G,EAAKxuB,EAAG49D,EAAIk0M,EAAOvgR,EAAGwgR,EAAUnqP,EAAIt2B,OAAQ0gR,EAAU,EAG1D,IAAKF,EAAQ,EAAGA,EAAQC,EAASD,IAEV,QAAZ,OADT9xQ,EAAI4nB,EAAI4H,WAAWsiP,MACaA,EAAM,EAAIC,GAElB,QAAZ,OADVn0M,EAAKh2C,EAAI4H,WAAWsiP,EAAM,OAExB9xQ,EAAI,OAAYA,EAAI,OAAW,KAAO49D,EAAK,OAC3Ck0M,KAGJE,GAAWhyQ,EAAI,IAAO,EAAIA,EAAI,KAAQ,EAAIA,EAAI,MAAU,EAAI,EAO9D,IAHAwuB,EAAM,IAAIuzK,EAAM61E,KAAK5F,GAGhBzgR,EAAE,EAAGugR,EAAQ,EAAGvgR,EAAIygR,EAASF,IAEX,QAAZ,OADT9xQ,EAAI4nB,EAAI4H,WAAWsiP,MACaA,EAAM,EAAIC,GAElB,QAAZ,OADVn0M,EAAKh2C,EAAI4H,WAAWsiP,EAAM,OAExB9xQ,EAAI,OAAYA,EAAI,OAAW,KAAO49D,EAAK,OAC3Ck0M,KAGA9xQ,EAAI,IAENwuB,EAAIj9B,KAAOyO,EACFA,EAAI,MAEbwuB,EAAIj9B,KAAO,IAAQyO,IAAM,EACzBwuB,EAAIj9B,KAAO,IAAY,GAAJyO,GACVA,EAAI,OAEbwuB,EAAIj9B,KAAO,IAAQyO,IAAM,GACzBwuB,EAAIj9B,KAAO,IAAQyO,IAAM,EAAI,GAC7BwuB,EAAIj9B,KAAO,IAAY,GAAJyO,IAGnBwuB,EAAIj9B,KAAO,IAAQyO,IAAM,GACzBwuB,EAAIj9B,KAAO,IAAQyO,IAAM,GAAK,GAC9BwuB,EAAIj9B,KAAO,IAAQyO,IAAM,EAAI,GAC7BwuB,EAAIj9B,KAAO,IAAY,GAAJyO,GAIvB,OAAOwuB,GAqBTr9B,EAAQ6mR,cAAgB,SAASxpP,GAC/B,OAAOwpP,EAAcxpP,EAAKA,EAAIl9B,SAKhCH,EAAQ+nR,cAAgB,SAAStxP,GAE/B,IADA,IAAI4G,EAAM,IAAIuzK,EAAM61E,KAAKhwP,EAAIt2B,QACrBC,EAAE,EAAGF,EAAIm9B,EAAIl9B,OAAQC,EAAIF,EAAKE,IACpCi9B,EAAIj9B,GAAKq2B,EAAI4H,WAAWj+B,GAE1B,OAAOi9B,GAKTr9B,EAAQugR,WAAa,SAAUljP,EAAKj1B,GAClC,IAAIhI,EAAGorB,EAAK3c,EAAG2xQ,EACXtgR,EAAMkI,GAAOi1B,EAAIl9B,OAKjBsgR,EAAW,IAAIngR,MAAU,EAAJJ,GAEzB,IAAKsrB,EAAI,EAAGprB,EAAE,EAAGA,EAAEF,GAGjB,IAFA2O,EAAIwuB,EAAIj9B,MAEA,IAAQqgR,EAASj1P,KAAS3c,OAIlC,IAFA2xQ,EAAQH,EAASxxQ,IAEL,EAAK4xQ,EAASj1P,KAAS,MAAQprB,GAAKogR,EAAM,MAAtD,CAKA,IAFA3xQ,GAAe,IAAV2xQ,EAAc,GAAiB,IAAVA,EAAc,GAAO,EAExCA,EAAQ,GAAKpgR,EAAIF,GACtB2O,EAAKA,GAAK,EAAiB,GAAXwuB,EAAIj9B,KACpBogR,IAIEA,EAAQ,EAAKC,EAASj1P,KAAS,MAE/B3c,EAAI,MACN4xQ,EAASj1P,KAAS3c,GAElBA,GAAK,MACL4xQ,EAASj1P,KAAS,MAAW3c,GAAK,GAAM,KACxC4xQ,EAASj1P,KAAS,MAAc,KAAJ3c,GAIhC,OAAOg4Q,EAAcpG,EAAUj1P,IAUjCxrB,EAAQsgR,WAAa,SAASjjP,EAAKj1B,GACjC,IAAIs1F,EAOJ,KALAt1F,EAAMA,GAAOi1B,EAAIl9B,QACPk9B,EAAIl9B,SAAUiI,EAAMi1B,EAAIl9B,QAGlCu9F,EAAMt1F,EAAI,EACHs1F,GAAO,GAA2B,MAAV,IAAXrgE,EAAIqgE,KAAyBA,IAIjD,OAAIA,EAAM,GAIE,IAARA,EAJkBt1F,EAMds1F,EAAM2iL,EAAShjP,EAAIqgE,IAAQt1F,EAAOs1F,EAAMt1F,IAGhD,CAAC,WAAW,KAAK+gR,GAAG,CAAC,SAAS/S,EAAQr2Q,EAAOC,GAC/C,aA+BAD,EAAOC,QAzBP,SAAiBopR,EAAO/rP,EAAKn9B,EAAKw9F,GAKhC,IAJA,IAAIqtB,EAAc,MAARq+J,EAAiB,EACvBp+J,EAAOo+J,IAAU,GAAM,MAAS,EAChCvjR,EAAI,EAEO,IAAR3F,GAAW,CAKhBA,GADA2F,EAAI3F,EAAM,IAAO,IAAOA,EAGxB,GAEE8qH,EAAMA,GADND,EAAMA,EAAK1tF,EAAIqgE,KAAS,GACR,UACP73F,GAEXklH,GAAM,MACNC,GAAM,MAGR,OAAQD,EAAMC,GAAM,GAAM,IAK1B,IAAIq+J,GAAG,CAAC,SAASjT,EAAQr2Q,EAAOC,GAClCD,EAAOC,QAAU,CAGf8nR,WAAoB,EACpBwB,gBAAoB,EACpBC,aAAoB,EACpBC,aAAoB,EACpB3B,SAAoB,EACpB4B,QAAoB,EACpBC,QAAoB,EAKpBpC,KAAoB,EACpBU,aAAoB,EACpB2B,YAAoB,EACpBC,SAAoB,EACpBC,gBAAoB,EACpBC,cAAoB,EAEpBC,aAAoB,EAIpBC,iBAA0B,EAC1BC,aAA0B,EAC1BC,mBAA0B,EAC1BC,uBAA0B,EAG1BC,WAA0B,EAC1BC,eAA0B,EAC1BC,MAA0B,EAC1BC,QAA0B,EAC1BC,mBAA0B,EAG1BC,SAA0B,EAC1BC,OAA0B,EAE1BC,UAA0B,EAG1BC,WAA0B,IAG1B,IAAIC,GAAG,CAAC,SAASzU,EAAQr2Q,EAAOC,GAClC,aAuBA,IAAI8qR,EAfJ,WAGE,IAFA,IAAIj8Q,EAAG+vM,EAAQ,GAEP/4M,EAAG,EAAGA,EAAI,IAAKA,IAAI,CACzBgJ,EAAIhJ,EACJ,IAAI,IAAIogB,EAAG,EAAGA,EAAI,EAAGA,IACnBpX,EAAQ,EAAFA,EAAQ,WAAcA,IAAM,EAAOA,IAAM,EAEjD+vM,EAAM/4M,GAAKgJ,EAGb,OAAO+vM,EAIMmsE,GAiBfhrR,EAAOC,QAdP,SAAe83Q,EAAKz6O,EAAKn9B,EAAKw9F,GAC5B,IAAInsF,EAAIu5Q,EACJ1oQ,EAAMs7E,EAAMx9F,EAEhB43Q,IAAc,EAEd,IAAK,IAAI13Q,EAAIs9F,EAAKt9F,EAAIgiB,EAAKhiB,IACzB03Q,EAAOA,IAAQ,EAAKvmQ,EAAmB,KAAhBumQ,EAAMz6O,EAAIj9B,KAGnC,OAAgB,EAAR03Q,IAKR,IAAIkT,GAAG,CAAC,SAAS5U,EAAQr2Q,EAAOC,GAClC,aAEA,IAAI4wM,EAAUwlE,EAAQ,mBAClB6U,EAAU7U,EAAQ,WAClB8U,EAAU9U,EAAQ,aAClBa,EAAUb,EAAQ,WAClBltQ,EAAQktQ,EAAQ,cAuBhByT,GAAmB,EAwDnBsB,EAAY,IACZC,EAAgB,IAQhBC,EAAa,IACbC,EAAa,IACbC,EAAe,IASnB,SAASzpR,EAAImkR,EAAMuF,GAEjB,OADAvF,EAAK/8Q,IAAMA,EAAIsiR,GACRA,EAGT,SAAS3/Q,EAAK9E,GACZ,OAAQ,GAAO,IAAM,EAAM,EAAI,EAAI,GAGrC,SAASmpE,EAAK7yC,GAA6B,IAAtB,IAAIn9B,EAAMm9B,EAAIl9B,SAAiBD,GAAO,GAAKm9B,EAAIn9B,GAAO,EAS3E,SAASurR,EAAcxF,GACrB,IAAIl6Q,EAAIk6Q,EAAKn+P,MAGT5nB,EAAM6L,EAAE2/Q,QACRxrR,EAAM+lR,EAAKC,YACbhmR,EAAM+lR,EAAKC,WAED,IAARhmR,IAEJ0wM,EAAMq3E,SAAShC,EAAK5mQ,OAAQtT,EAAE4/Q,YAAa5/Q,EAAE6/Q,YAAa1rR,EAAK+lR,EAAKS,UACpET,EAAKS,UAAYxmR,EACjB6L,EAAE6/Q,aAAe1rR,EACjB+lR,EAAK4F,WAAa3rR,EAClB+lR,EAAKC,WAAahmR,EAClB6L,EAAE2/Q,SAAWxrR,EACK,IAAd6L,EAAE2/Q,UACJ3/Q,EAAE6/Q,YAAc,IAKpB,SAASE,EAAkB//Q,EAAG8sO,GAC5BoyC,EAAMc,gBAAgBhgR,EAAIA,EAAEigR,aAAe,EAAIjgR,EAAEigR,aAAe,EAAIjgR,EAAEkgR,SAAWlgR,EAAEigR,YAAanzC,GAChG9sO,EAAEigR,YAAcjgR,EAAEkgR,SAClBR,EAAc1/Q,EAAEk6Q,MAIlB,SAASiG,EAASngR,EAAGrD,GACnBqD,EAAE4/Q,YAAY5/Q,EAAE2/Q,WAAahjR,EAS/B,SAASyjR,EAAYpgR,EAAGrD,GAGtBqD,EAAE4/Q,YAAY5/Q,EAAE2/Q,WAAchjR,IAAM,EAAK,IACzCqD,EAAE4/Q,YAAY5/Q,EAAE2/Q,WAAiB,IAAJhjR,EA4C/B,SAAS0jR,EAAcrgR,EAAGsgR,GACxB,IAEInjP,EACAhpC,EAHAosR,EAAevgR,EAAEwgR,iBACjBC,EAAOzgR,EAAEkgR,SAGTQ,EAAW1gR,EAAE2gR,YACbC,EAAa5gR,EAAE4gR,WACfx9L,EAASpjF,EAAEkgR,SAAYlgR,EAAE6gR,OAASxB,EAClCr/Q,EAAEkgR,UAAYlgR,EAAE6gR,OAASxB,GAAiB,EAE1CyB,EAAO9gR,EAAEgG,OAET+6Q,EAAQ/gR,EAAEghR,OACV79Q,EAAQnD,EAAEmD,KAMV89Q,EAASjhR,EAAEkgR,SAAWd,EACtB8B,EAAaJ,EAAKL,EAAOC,EAAW,GACpCS,EAAaL,EAAKL,EAAOC,GAQzB1gR,EAAE2gR,aAAe3gR,EAAEohR,aACrBb,IAAiB,GAKfK,EAAa5gR,EAAEqhR,YAAaT,EAAa5gR,EAAEqhR,WAI/C,GAaE,GAAIP,GAXJ3jP,EAAQmjP,GAWSI,KAAkBS,GAC/BL,EAAK3jP,EAAQujP,EAAW,KAAOQ,GAC/BJ,EAAK3jP,KAA0B2jP,EAAKL,IACpCK,IAAO3jP,KAAwB2jP,EAAKL,EAAO,GAH/C,CAaAA,GAAQ,EACRtjP,IAMA,UAES2jP,IAAOL,KAAUK,IAAO3jP,IAAU2jP,IAAOL,KAAUK,IAAO3jP,IAC1D2jP,IAAOL,KAAUK,IAAO3jP,IAAU2jP,IAAOL,KAAUK,IAAO3jP,IAC1D2jP,IAAOL,KAAUK,IAAO3jP,IAAU2jP,IAAOL,KAAUK,IAAO3jP,IAC1D2jP,IAAOL,KAAUK,IAAO3jP,IAAU2jP,IAAOL,KAAUK,IAAO3jP,IAC1DsjP,EAAOQ,GAOhB,GAHA9sR,EAAMirR,GAAa6B,EAASR,GAC5BA,EAAOQ,EAAS7B,EAEZjrR,EAAMusR,EAAU,CAGlB,GAFA1gR,EAAEshR,YAAchB,EAChBI,EAAWvsR,EACPA,GAAOysR,EACT,MAEFM,EAAaJ,EAAKL,EAAOC,EAAW,GACpCS,EAAaL,EAAKL,EAAOC,YAEnBJ,EAAYn9Q,EAAKm9Q,EAAYS,IAAU39L,GAA4B,KAAjBm9L,GAE5D,OAAIG,GAAY1gR,EAAEqhR,UACTX,EAEF1gR,EAAEqhR,UAcX,SAASE,EAAYvhR,GACnB,IACI9G,EAAGY,EAAGgyB,EAAG8iM,EAAMlkM,EApJHwvP,EAAM5oP,EAAKnvB,EAAOrE,EAC9B3J,EAkJAqtR,EAAUxhR,EAAE6gR,OAKhB,EAAG,CAqBD,GApBAjyD,EAAO5uN,EAAEyhR,YAAczhR,EAAEqhR,UAAYrhR,EAAEkgR,SAoBnClgR,EAAEkgR,UAAYsB,GAAWA,EAAUnC,GAAgB,CAErDx6E,EAAMq3E,SAASl8Q,EAAEgG,OAAQhG,EAAEgG,OAAQw7Q,EAASA,EAAS,GACrDxhR,EAAEshR,aAAeE,EACjBxhR,EAAEkgR,UAAYsB,EAEdxhR,EAAEigR,aAAeuB,EAUjBtoR,EADAY,EAAIkG,EAAE0hR,UAEN,GACE51P,EAAI9rB,EAAE2hR,OAAOzoR,GACb8G,EAAE2hR,KAAKzoR,GAAM4yB,GAAK01P,EAAU11P,EAAI01P,EAAU,UACjC1nR,GAGXZ,EADAY,EAAI0nR,EAEJ,GACE11P,EAAI9rB,EAAEmD,OAAOjK,GACb8G,EAAEmD,KAAKjK,GAAM4yB,GAAK01P,EAAU11P,EAAI01P,EAAU,UAIjC1nR,GAEX80N,GAAQ4yD,EAEV,GAAwB,IAApBxhR,EAAEk6Q,KAAKO,SACT,MAmBF,GAnOcP,EA+NDl6Q,EAAEk6Q,KA/NK5oP,EA+NCtxB,EAAEgG,OA/NE7D,EA+NMnC,EAAEkgR,SAAWlgR,EAAEqhR,UA/NdvjR,EA+NyB8wN,EA9NvDz6N,YAAM+lR,EAAKO,UAEL38Q,IAAQ3J,EAAM2J,GA4NtBhE,EA3NU,IAAR3F,EAAoB,GAExB+lR,EAAKO,UAAYtmR,EAEjB0wM,EAAMq3E,SAAS5qP,EAAK4oP,EAAK7lQ,MAAO6lQ,EAAKM,QAASrmR,EAAKgO,GAC3B,IAApB+3Q,EAAKn+P,MAAM2jH,KACbw6I,EAAKmD,MAAQ8B,EAAQjF,EAAKmD,MAAO/rP,EAAKn9B,EAAKgO,GAGhB,IAApB+3Q,EAAKn+P,MAAM2jH,OAClBw6I,EAAKmD,MAAQnS,EAAMgP,EAAKmD,MAAO/rP,EAAKn9B,EAAKgO,IAG3C+3Q,EAAKM,SAAWrmR,EAChB+lR,EAAK0H,UAAYztR,EAEVA,GA4ML6L,EAAEqhR,WAAavnR,EAGXkG,EAAEqhR,UAAYrhR,EAAEk5O,QAhUR,EAyUV,IARAxuN,EAAM1qB,EAAEkgR,SAAWlgR,EAAEk5O,OACrBl5O,EAAE6hR,MAAQ7hR,EAAEgG,OAAO0kB,GAGnB1qB,EAAE6hR,OAAU7hR,EAAE6hR,OAAS7hR,EAAE8hR,WAAc9hR,EAAEgG,OAAO0kB,EAAM,IAAM1qB,EAAE+hR,UAIvD/hR,EAAEk5O,SAEPl5O,EAAE6hR,OAAU7hR,EAAE6hR,OAAS7hR,EAAE8hR,WAAc9hR,EAAEgG,OAAO0kB,EA3UxC,EA2UwD,IAAM1qB,EAAE+hR,UAExE/hR,EAAEmD,KAAKunB,EAAM1qB,EAAEghR,QAAUhhR,EAAE2hR,KAAK3hR,EAAE6hR,OAClC7hR,EAAE2hR,KAAK3hR,EAAE6hR,OAASn3P,EAClBA,IACA1qB,EAAEk5O,WACEl5O,EAAEqhR,UAAYrhR,EAAEk5O,OAjVZ,aA0VLl5O,EAAEqhR,UAAYhC,GAAqC,IAApBr/Q,EAAEk6Q,KAAKO,UAmJjD,SAASuH,EAAahiR,EAAGi0K,GAIvB,IAHA,IAAIguG,EACAC,IAEK,CAMP,GAAIliR,EAAEqhR,UAAYhC,EAAe,CAE/B,GADAkC,EAAYvhR,GACRA,EAAEqhR,UAAYhC,GAhkBF,IAgkBmBprG,EACjC,OA5egB,EA8elB,GAAoB,IAAhBj0K,EAAEqhR,UACJ,MA2BJ,GApBAY,EAAY,EACRjiR,EAAEqhR,WArgBM,IAugBVrhR,EAAE6hR,OAAU7hR,EAAE6hR,OAAS7hR,EAAE8hR,WAAc9hR,EAAEgG,OAAOhG,EAAEkgR,SAvgBxC,EAugB+D,IAAMlgR,EAAE+hR,UACjFE,EAAYjiR,EAAEmD,KAAKnD,EAAEkgR,SAAWlgR,EAAEghR,QAAUhhR,EAAE2hR,KAAK3hR,EAAE6hR,OACrD7hR,EAAE2hR,KAAK3hR,EAAE6hR,OAAS7hR,EAAEkgR,UAOJ,IAAd+B,GAA4BjiR,EAAEkgR,SAAW+B,GAAejiR,EAAE6gR,OAASxB,IAKrEr/Q,EAAEmiR,aAAe9B,EAAcrgR,EAAGiiR,IAGhCjiR,EAAEmiR,cAxhBM,EAoiBV,GAPAD,EAAShD,EAAMkD,UAAUpiR,EAAGA,EAAEkgR,SAAWlgR,EAAEshR,YAAathR,EAAEmiR,aA7hBhD,GA+hBVniR,EAAEqhR,WAAarhR,EAAEmiR,aAKbniR,EAAEmiR,cAAgBniR,EAAEqiR,gBAAuCriR,EAAEqhR,WApiBvD,EAoiB+E,CACvFrhR,EAAEmiR,eACF,GACEniR,EAAEkgR,WAEFlgR,EAAE6hR,OAAU7hR,EAAE6hR,OAAS7hR,EAAE8hR,WAAc9hR,EAAEgG,OAAOhG,EAAEkgR,SAziB5C,EAyiBmE,IAAMlgR,EAAE+hR,UACjFE,EAAYjiR,EAAEmD,KAAKnD,EAAEkgR,SAAWlgR,EAAEghR,QAAUhhR,EAAE2hR,KAAK3hR,EAAE6hR,OACrD7hR,EAAE2hR,KAAK3hR,EAAE6hR,OAAS7hR,EAAEkgR,eAKQ,KAAnBlgR,EAAEmiR,cACbniR,EAAEkgR,gBAGFlgR,EAAEkgR,UAAYlgR,EAAEmiR,aAChBniR,EAAEmiR,aAAe,EACjBniR,EAAE6hR,MAAQ7hR,EAAEgG,OAAOhG,EAAEkgR,UAErBlgR,EAAE6hR,OAAU7hR,EAAE6hR,OAAS7hR,EAAE8hR,WAAc9hR,EAAEgG,OAAOhG,EAAEkgR,SAAW,IAAMlgR,EAAE+hR,eAavEG,EAAShD,EAAMkD,UAAUpiR,EAAG,EAAGA,EAAEgG,OAAOhG,EAAEkgR,WAE1ClgR,EAAEqhR,YACFrhR,EAAEkgR,WAEJ,GAAIgC,IAEFnC,EAAiB//Q,GAAG,GACK,IAArBA,EAAEk6Q,KAAKC,WACT,OAhkBgB,EAskBtB,OADAn6Q,EAAEk5O,OAAWl5O,EAAEkgR,SAAW,EAAiBlgR,EAAEkgR,SAAWoC,EAtpBpC,IAupBhBruG,GAEF8rG,EAAiB//Q,GAAG,GACK,IAArBA,EAAEk6Q,KAAKC,UAvkBS,EACA,GA4kBlBn6Q,EAAEuiR,WAEJxC,EAAiB//Q,GAAG,GACK,IAArBA,EAAEk6Q,KAAKC,WAllBS,EACA,EA8lBxB,SAASqI,EAAaxiR,EAAGi0K,GAOvB,IANA,IAAIguG,EACAC,EAEAO,IAGK,CAMP,GAAIziR,EAAEqhR,UAAYhC,EAAe,CAE/B,GADAkC,EAAYvhR,GACRA,EAAEqhR,UAAYhC,GAnsBF,IAmsBmBprG,EACjC,OA/mBgB,EAinBlB,GAAoB,IAAhBj0K,EAAEqhR,UAAmB,MA0C3B,GApCAY,EAAY,EACRjiR,EAAEqhR,WAtoBM,IAwoBVrhR,EAAE6hR,OAAU7hR,EAAE6hR,OAAS7hR,EAAE8hR,WAAc9hR,EAAEgG,OAAOhG,EAAEkgR,SAxoBxC,EAwoB+D,IAAMlgR,EAAE+hR,UACjFE,EAAYjiR,EAAEmD,KAAKnD,EAAEkgR,SAAWlgR,EAAEghR,QAAUhhR,EAAE2hR,KAAK3hR,EAAE6hR,OACrD7hR,EAAE2hR,KAAK3hR,EAAE6hR,OAAS7hR,EAAEkgR,UAMtBlgR,EAAE2gR,YAAc3gR,EAAEmiR,aAClBniR,EAAE0iR,WAAa1iR,EAAEshR,YACjBthR,EAAEmiR,aAAeG,EAEC,IAAdL,GAA0BjiR,EAAE2gR,YAAc3gR,EAAEqiR,gBAC5CriR,EAAEkgR,SAAW+B,GAAcjiR,EAAE6gR,OAAOxB,IAKtCr/Q,EAAEmiR,aAAe9B,EAAcrgR,EAAGiiR,GAG9BjiR,EAAEmiR,cAAgB,IAtsBA,IAusBlBniR,EAAE85Q,UA9pBI,IA8pBwB95Q,EAAEmiR,cAA8BniR,EAAEkgR,SAAWlgR,EAAEshR,YAAc,QAK7FthR,EAAEmiR,aAAeG,IAMjBtiR,EAAE2gR,aAzqBM,GAyqBsB3gR,EAAEmiR,cAAgBniR,EAAE2gR,YAAa,CACjE8B,EAAaziR,EAAEkgR,SAAWlgR,EAAEqhR,UA1qBlB,EAirBVa,EAAShD,EAAMkD,UAAUpiR,EAAGA,EAAEkgR,SAAW,EAAGlgR,EAAE0iR,WAAY1iR,EAAE2gR,YAjrBlD,GAurBV3gR,EAAEqhR,WAAarhR,EAAE2gR,YAAY,EAC7B3gR,EAAE2gR,aAAe,EACjB,KACQ3gR,EAAEkgR,UAAYuC,IAElBziR,EAAE6hR,OAAU7hR,EAAE6hR,OAAS7hR,EAAE8hR,WAAc9hR,EAAEgG,OAAOhG,EAAEkgR,SA5rB5C,EA4rBmE,IAAMlgR,EAAE+hR,UACjFE,EAAYjiR,EAAEmD,KAAKnD,EAAEkgR,SAAWlgR,EAAEghR,QAAUhhR,EAAE2hR,KAAK3hR,EAAE6hR,OACrD7hR,EAAE2hR,KAAK3hR,EAAE6hR,OAAS7hR,EAAEkgR,gBAGK,KAAlBlgR,EAAE2gR,aAKb,GAJA3gR,EAAE2iR,gBAAkB,EACpB3iR,EAAEmiR,aAAeG,EACjBtiR,EAAEkgR,WAEEgC,IAEFnC,EAAiB//Q,GAAG,GACK,IAArBA,EAAEk6Q,KAAKC,WACT,OA5rBc,OAisBb,GAAIn6Q,EAAE2iR,iBAgBX,IATAT,EAAShD,EAAMkD,UAAUpiR,EAAG,EAAGA,EAAEgG,OAAOhG,EAAEkgR,SAAS,MAIjDH,EAAiB//Q,GAAG,GAGtBA,EAAEkgR,WACFlgR,EAAEqhR,YACuB,IAArBrhR,EAAEk6Q,KAAKC,UACT,OAltBgB,OAwtBlBn6Q,EAAE2iR,gBAAkB,EACpB3iR,EAAEkgR,WACFlgR,EAAEqhR,YAYN,OARIrhR,EAAE2iR,kBAGJT,EAAShD,EAAMkD,UAAUpiR,EAAG,EAAGA,EAAEgG,OAAOhG,EAAEkgR,SAAS,IAEnDlgR,EAAE2iR,gBAAkB,GAEtB3iR,EAAEk5O,OAASl5O,EAAEkgR,SAAWoC,EAActiR,EAAEkgR,SAAWoC,EAtzB/B,IAuzBhBruG,GAEF8rG,EAAiB//Q,GAAG,GACK,IAArBA,EAAEk6Q,KAAKC,UAvuBS,EACA,GA4uBlBn6Q,EAAEuiR,WAEJxC,EAAiB//Q,GAAG,GACK,IAArBA,EAAEk6Q,KAAKC,WAlvBS,EACA,EAw5BxB,IAQIyI,EARAC,EAAS,SAAUC,EAAaC,EAAUC,EAAaC,EAAWx0J,GACpE94H,KAAKmtR,YAAcA,EACnBntR,KAAKotR,SAAWA,EAChBptR,KAAKqtR,YAAcA,EACnBrtR,KAAKstR,UAAYA,EACjBttR,KAAK84H,KAAOA,GA+Cd,SAASy0J,IACPvtR,KAAKukR,KAAO,KACZvkR,KAAKwmC,OAAS,EACdxmC,KAAKiqR,YAAc,KACnBjqR,KAAKwtR,iBAAmB,EACxBxtR,KAAKkqR,YAAc,EACnBlqR,KAAKgqR,QAAU,EACfhqR,KAAK+pI,KAAO,EACZ/pI,KAAKytR,OAAS,KACdztR,KAAK0tR,QAAU,EACf1tR,KAAKmmC,OAhgCW,EAigChBnmC,KAAK2tR,YAAc,EAEnB3tR,KAAKkrR,OAAS,EACdlrR,KAAK4tR,OAAS,EACd5tR,KAAKqrR,OAAS,EAEdrrR,KAAKqQ,OAAS,KAQdrQ,KAAK8rR,YAAc,EAKnB9rR,KAAKwN,KAAO,KAMZxN,KAAKgsR,KAAO,KAEZhsR,KAAKksR,MAAQ,EACblsR,KAAK+rR,UAAY,EACjB/rR,KAAK6tR,UAAY,EACjB7tR,KAAKosR,UAAY,EAEjBpsR,KAAKmsR,WAAa,EAOlBnsR,KAAKsqR,YAAc,EAKnBtqR,KAAKwsR,aAAe,EACpBxsR,KAAK+sR,WAAa,EAClB/sR,KAAKgtR,gBAAkB,EACvBhtR,KAAKuqR,SAAW,EAChBvqR,KAAK2rR,YAAc,EACnB3rR,KAAK0rR,UAAY,EAEjB1rR,KAAKgrR,YAAc,EAKnBhrR,KAAK6qR,iBAAmB,EAMxB7qR,KAAK0sR,eAAiB,EAYtB1sR,KAAK+rF,MAAQ,EACb/rF,KAAKmkR,SAAW,EAEhBnkR,KAAKyrR,WAAa,EAGlBzrR,KAAKirR,WAAa,EAYlBjrR,KAAK8tR,UAAa,IAAI5+E,EAAMi4E,MAAM4G,MAClC/tR,KAAKguR,UAAa,IAAI9+E,EAAMi4E,MAAM,KAClCnnR,KAAKiuR,QAAa,IAAI/+E,EAAMi4E,MAAM,IAClC34M,EAAKxuE,KAAK8tR,WACVt/M,EAAKxuE,KAAKguR,WACVx/M,EAAKxuE,KAAKiuR,SAEVjuR,KAAKkuR,OAAW,KAChBluR,KAAKmuR,OAAW,KAChBnuR,KAAKouR,QAAW,KAGhBpuR,KAAKquR,SAAW,IAAIn/E,EAAMi4E,MAAMmH,IAIhCtuR,KAAKipP,KAAO,IAAI/5C,EAAMi4E,MAAM,KAC5B34M,EAAKxuE,KAAKipP,MAEVjpP,KAAKuuR,SAAW,EAChBvuR,KAAKwuR,SAAW,EAKhBxuR,KAAK4oC,MAAQ,IAAIsmK,EAAMi4E,MAAM,KAC7B34M,EAAKxuE,KAAK4oC,OAIV5oC,KAAKyuR,MAAQ,EAEbzuR,KAAK0uR,YAAc,EAoBnB1uR,KAAK4sR,SAAW,EAEhB5sR,KAAK2uR,MAAQ,EAMb3uR,KAAK4uR,QAAU,EACf5uR,KAAK6uR,WAAa,EAClB7uR,KAAKsqQ,QAAU,EACftqQ,KAAKujP,OAAS,EAGdvjP,KAAK8uR,OAAS,EAId9uR,KAAK+uR,SAAW,EAgBlB,SAASC,EAAiBzK,GACxB,IAAIl6Q,EAEJ,OAAKk6Q,GAASA,EAAKn+P,OAInBm+P,EAAK0H,SAAW1H,EAAK4F,UAAY,EACjC5F,EAAK0K,UA/rCqB,GAisC1B5kR,EAAIk6Q,EAAKn+P,OACP4jQ,QAAU,EACZ3/Q,EAAE6/Q,YAAc,EAEZ7/Q,EAAE0/H,KAAO,IACX1/H,EAAE0/H,MAAQ1/H,EAAE0/H,MAGd1/H,EAAEm8B,OAAUn8B,EAAE0/H,KApqCC,GAoqCmB6/I,EAClCrF,EAAKmD,MAAoB,IAAXr9Q,EAAE0/H,KACd,EAEA,EACF1/H,EAAEsjR,WAtvCkB,EAuvCpBpE,EAAM2F,SAAS7kR,GA3uCK,GAutCXjK,EAAImkR,EAAM4D,GAyBrB,SAASgH,EAAa5K,GACpB,IAlPel6Q,EAkPXyC,EAAMkiR,EAAiBzK,GAI3B,OArvCoB,IAkvChBz3Q,KAnPWzC,EAoPLk6Q,EAAKn+P,OAnPb0lQ,YAAc,EAAIzhR,EAAE6gR,OAGtB18M,EAAKnkE,EAAE2hR,MAIP3hR,EAAEqiR,eAAiBO,EAAoB5iR,EAAE0hF,OAAOqhM,SAChD/iR,EAAEohR,WAAawB,EAAoB5iR,EAAE0hF,OAAOohM,YAC5C9iR,EAAE4gR,WAAagC,EAAoB5iR,EAAE0hF,OAAOshM,YAC5ChjR,EAAEwgR,iBAAmBoC,EAAoB5iR,EAAE0hF,OAAOuhM,UAElDjjR,EAAEkgR,SAAW,EACblgR,EAAEigR,YAAc,EAChBjgR,EAAEqhR,UAAY,EACdrhR,EAAEk5O,OAAS,EACXl5O,EAAEmiR,aAAeniR,EAAE2gR,YAAc2B,EACjCtiR,EAAE2iR,gBAAkB,EACpB3iR,EAAE6hR,MAAQ,GAmOHp/Q,EAYT,SAAS23Q,EAAaF,EAAMx4L,EAAO5lD,EAAQ89O,EAAYC,EAAUC,GAC/D,IAAKI,EACH,OAAO4D,EAET,IAAIp+I,EAAO,EAiBX,IAvwC0B,IAwvCtBh+C,IACFA,EAAQ,GAGNk4L,EAAa,GACfl6I,EAAO,EACPk6I,GAAcA,GAGPA,EAAa,KACpBl6I,EAAO,EACPk6I,GAAc,IAIZC,EAAW,GAAKA,EAjvCF,GALF,IAsvCgC/9O,GAC9C89O,EAAa,GAAKA,EAAa,IAAMl4L,EAAQ,GAAKA,EAAQ,GAC1Do4L,EAAW,GAAKA,EAnwCQ,EAowCxB,OAAO/jR,EAAImkR,EAAM4D,GAIA,IAAflE,IACFA,EAAa,GAIf,IAAI55Q,EAAI,IAAIkjR,EAmCZ,OAjCAhJ,EAAKn+P,MAAQ/b,EACbA,EAAEk6Q,KAAOA,EAETl6Q,EAAE0/H,KAAOA,EACT1/H,EAAEojR,OAAS,KACXpjR,EAAEujR,OAAS3J,EACX55Q,EAAE6gR,OAAS,GAAK7gR,EAAEujR,OAClBvjR,EAAEghR,OAAShhR,EAAE6gR,OAAS,EAEtB7gR,EAAEwjR,UAAY3J,EAAW,EACzB75Q,EAAE0hR,UAAY,GAAK1hR,EAAEwjR,UACrBxjR,EAAE+hR,UAAY/hR,EAAE0hR,UAAY,EAC5B1hR,EAAE8hR,eAAiB9hR,EAAEwjR,UArvCP,EAqvC+B,GArvC/B,GAuvCdxjR,EAAEgG,OAAS,IAAI6+L,EAAM61E,KAAgB,EAAX16Q,EAAE6gR,QAC5B7gR,EAAE2hR,KAAO,IAAI98E,EAAMi4E,MAAM98Q,EAAE0hR,WAC3B1hR,EAAEmD,KAAO,IAAI0hM,EAAMi4E,MAAM98Q,EAAE6gR,QAK3B7gR,EAAEqkR,YAAc,GAAMxK,EAAW,EAEjC75Q,EAAEmjR,iBAAmC,EAAhBnjR,EAAEqkR,YACvBrkR,EAAE4/Q,YAAc,IAAI/6E,EAAM61E,KAAK16Q,EAAEmjR,kBAEjCnjR,EAAEskR,MAAQtkR,EAAEqkR,aAAe,EAC3BrkR,EAAEokR,MAAQ,EAAUpkR,EAAEqkR,YAEtBrkR,EAAE0hF,MAAQA,EACV1hF,EAAE85Q,SAAWA,EACb95Q,EAAE87B,OAASA,EAEJgpP,EAAa5K,GAzVtB0I,EAAsB,CAEpB,IAAIC,EAAO,EAAG,EAAG,EAAG,GAxiBtB,SAAwB7iR,EAAGi0K,GAIzB,IAAI8wG,EAAiB,MAOrB,IALIA,EAAiB/kR,EAAEmjR,iBAAmB,IACxC4B,EAAiB/kR,EAAEmjR,iBAAmB,KAI/B,CAEP,GAAInjR,EAAEqhR,WAAa,EAAG,CAUpB,GADAE,EAAYvhR,GACQ,IAAhBA,EAAEqhR,WAzeU,IAyeSptG,EACvB,OArZgB,EAwZlB,GAAoB,IAAhBj0K,EAAEqhR,UACJ,MAOJrhR,EAAEkgR,UAAYlgR,EAAEqhR,UAChBrhR,EAAEqhR,UAAY,EAGd,IAAI2D,EAAYhlR,EAAEigR,YAAc8E,EAEhC,IAAmB,IAAf/kR,EAAEkgR,UAAkBlgR,EAAEkgR,UAAY8E,KAEpChlR,EAAEqhR,UAAYrhR,EAAEkgR,SAAW8E,EAC3BhlR,EAAEkgR,SAAW8E,EAEbjF,EAAiB//Q,GAAG,GACK,IAArBA,EAAEk6Q,KAAKC,WACT,OA7agB,EAsbpB,GAAIn6Q,EAAEkgR,SAAWlgR,EAAEigR,aAAgBjgR,EAAE6gR,OAASxB,IAE5CU,EAAiB//Q,GAAG,GACK,IAArBA,EAAEk6Q,KAAKC,WACT,OA1bgB,EAkctB,OAFAn6Q,EAAEk5O,OAAS,EAjhBS,IAmhBhBjlE,GAEF8rG,EAAiB//Q,GAAG,GACK,IAArBA,EAAEk6Q,KAAKC,UAncS,EACA,IAyclBn6Q,EAAEkgR,SAAWlgR,EAAEigR,cAEjBF,EAAiB//Q,GAAG,GAChBA,EAAEk6Q,KAAKC,WA/cS,MAs6BtB,IAAI0I,EAAO,EAAG,EAAG,EAAG,EAAGb,GACvB,IAAIa,EAAO,EAAG,EAAG,GAAI,EAAGb,GACxB,IAAIa,EAAO,EAAG,EAAG,GAAI,GAAIb,GAEzB,IAAIa,EAAO,EAAG,EAAG,GAAI,GAAIL,GACzB,IAAIK,EAAO,EAAG,GAAI,GAAI,GAAIL,GAC1B,IAAIK,EAAO,EAAG,GAAI,IAAK,IAAKL,GAC5B,IAAIK,EAAO,EAAG,GAAI,IAAK,IAAKL,GAC5B,IAAIK,EAAO,GAAI,IAAK,IAAK,KAAML,GAC/B,IAAIK,EAAO,GAAI,IAAK,IAAK,KAAML,IAksBjCvuR,EAAQgxR,YAlXR,SAAqB/K,EAAMx4L,GACzB,OAAO04L,EAAaF,EAAMx4L,EAzyCV,EAOF,GAEI,EAnBQ,IAqqD5BztF,EAAQmmR,aAAeA,EACvBnmR,EAAQ6wR,aAAeA,EACvB7wR,EAAQ0wR,iBAAmBA,EAC3B1wR,EAAQomR,iBArcR,SAA0BH,EAAMyH,GAC9B,OAAKzH,GAASA,EAAKn+P,MACK,IAApBm+P,EAAKn+P,MAAM2jH,KAAqBo+I,GACpC5D,EAAKn+P,MAAMqnQ,OAASzB,EA5vCA,GA0vCe7D,GAqcrC7pR,EAAQqmR,QAlXR,SAAiBJ,EAAMjmG,GACrB,IAAIixG,EAAWllR,EACXmlR,EAAK5oR,EAET,IAAK29Q,IAASA,EAAKn+P,OACjBk4J,EAz1CkB,GAy1CCA,EAAQ,EAC3B,OAAOimG,EAAOnkR,EAAImkR,EAAM4D,GAAkBA,EAK5C,GAFA99Q,EAAIk6Q,EAAKn+P,OAEJm+P,EAAK5mQ,SACJ4mQ,EAAK7lQ,OAA2B,IAAlB6lQ,EAAKO,UACpBz6Q,EAAEm8B,SAAWqjP,GAl2CE,IAk2CcvrG,EAChC,OAAOl+K,EAAImkR,EAA0B,IAAnBA,EAAKC,WAp1CL,EAo1CsC2D,GAQ1D,GALA99Q,EAAEk6Q,KAAOA,EACTgL,EAAYllR,EAAEsjR,WACdtjR,EAAEsjR,WAAarvG,EA/xCA,KAkyCXj0K,EAAEm8B,OAEJ,GAAe,IAAXn8B,EAAE0/H,KACJw6I,EAAKmD,MAAQ,EACb8C,EAASngR,EAAG,IACZmgR,EAASngR,EAAG,KACZmgR,EAASngR,EAAG,GACPA,EAAEojR,QAaLjD,EAASngR,GAAIA,EAAEojR,OAAO1uP,KAAO,EAAI,IACpB10B,EAAEojR,OAAOgC,KAAO,EAAI,IACnBplR,EAAEojR,OAAOiC,MAAY,EAAJ,IACjBrlR,EAAEojR,OAAOnpR,KAAW,EAAJ,IAChB+F,EAAEojR,OAAO9V,QAAc,GAAJ,IAEjC6S,EAASngR,EAAmB,IAAhBA,EAAEojR,OAAO/vQ,MACrB8sQ,EAASngR,EAAIA,EAAEojR,OAAO/vQ,MAAQ,EAAK,KACnC8sQ,EAASngR,EAAIA,EAAEojR,OAAO/vQ,MAAQ,GAAM,KACpC8sQ,EAASngR,EAAIA,EAAEojR,OAAO/vQ,MAAQ,GAAM,KACpC8sQ,EAASngR,EAAe,IAAZA,EAAE0hF,MAAc,EACf1hF,EAAE85Q,UA/2CK,GA+2CyB95Q,EAAE0hF,MAAQ,EAC1C,EAAI,GACjBy+L,EAASngR,EAAiB,IAAdA,EAAEojR,OAAOkC,IACjBtlR,EAAEojR,OAAOiC,OAASrlR,EAAEojR,OAAOiC,MAAMjxR,SACnC+rR,EAASngR,EAA2B,IAAxBA,EAAEojR,OAAOiC,MAAMjxR,QAC3B+rR,EAASngR,EAAIA,EAAEojR,OAAOiC,MAAMjxR,QAAU,EAAK,MAEzC4L,EAAEojR,OAAOgC,OACXlL,EAAKmD,MAAQnS,EAAMgP,EAAKmD,MAAOr9Q,EAAE4/Q,YAAa5/Q,EAAE2/Q,QAAS,IAE3D3/Q,EAAEqjR,QAAU,EACZrjR,EAAEm8B,OA30CQ,KAyyCVgkP,EAASngR,EAAG,GACZmgR,EAASngR,EAAG,GACZmgR,EAASngR,EAAG,GACZmgR,EAASngR,EAAG,GACZmgR,EAASngR,EAAG,GACZmgR,EAASngR,EAAe,IAAZA,EAAE0hF,MAAc,EACf1hF,EAAE85Q,UA91CK,GA81CyB95Q,EAAE0hF,MAAQ,EAC1C,EAAI,GACjBy+L,EAASngR,EAryCH,GAsyCNA,EAAEm8B,OAASojP,OA6Bf,CACE,IAAI9tE,EAl3CQ,GAk3CiBzxM,EAAEujR,OAAS,GAAM,IAAO,EAYrD9xE,IATIzxM,EAAE85Q,UAl4CgB,GAk4Cc95Q,EAAE0hF,MAAQ,EAC9B,EACL1hF,EAAE0hF,MAAQ,EACL,EACO,IAAZ1hF,EAAE0hF,MACG,EAEA,IAEU,EACP,IAAf1hF,EAAEkgR,WAAkBzuE,GAh2CZ,IAi2CZA,GAAU,GAAMA,EAAS,GAEzBzxM,EAAEm8B,OAASojP,EACXa,EAAYpgR,EAAGyxM,GAGI,IAAfzxM,EAAEkgR,WACJE,EAAYpgR,EAAGk6Q,EAAKmD,QAAU,IAC9B+C,EAAYpgR,EAAgB,MAAbk6Q,EAAKmD,QAEtBnD,EAAKmD,MAAQ,EAKjB,GA72CgB,KA62CZr9Q,EAAEm8B,OACJ,GAAIn8B,EAAEojR,OAAOiC,MAAqB,CAGhC,IAFAF,EAAMnlR,EAAE2/Q,QAED3/Q,EAAEqjR,SAAmC,MAAxBrjR,EAAEojR,OAAOiC,MAAMjxR,UAC7B4L,EAAE2/Q,UAAY3/Q,EAAEmjR,mBACdnjR,EAAEojR,OAAOgC,MAAQplR,EAAE2/Q,QAAUwF,IAC/BjL,EAAKmD,MAAQnS,EAAMgP,EAAKmD,MAAOr9Q,EAAE4/Q,YAAa5/Q,EAAE2/Q,QAAUwF,EAAKA,IAEjEzF,EAAcxF,GACdiL,EAAMnlR,EAAE2/Q,QACJ3/Q,EAAE2/Q,UAAY3/Q,EAAEmjR,oBAItBhD,EAASngR,EAA+B,IAA5BA,EAAEojR,OAAOiC,MAAMrlR,EAAEqjR,UAC7BrjR,EAAEqjR,UAEArjR,EAAEojR,OAAOgC,MAAQplR,EAAE2/Q,QAAUwF,IAC/BjL,EAAKmD,MAAQnS,EAAMgP,EAAKmD,MAAOr9Q,EAAE4/Q,YAAa5/Q,EAAE2/Q,QAAUwF,EAAKA,IAE7DnlR,EAAEqjR,UAAYrjR,EAAEojR,OAAOiC,MAAMjxR,SAC/B4L,EAAEqjR,QAAU,EACZrjR,EAAEm8B,OAn4CO,SAu4CXn8B,EAAEm8B,OAv4CS,GA04Cf,GA14Ce,KA04CXn8B,EAAEm8B,OACJ,GAAIn8B,EAAEojR,OAAOnpR,KAAoB,CAC/BkrR,EAAMnlR,EAAE2/Q,QAGR,EAAG,CACD,GAAI3/Q,EAAE2/Q,UAAY3/Q,EAAEmjR,mBACdnjR,EAAEojR,OAAOgC,MAAQplR,EAAE2/Q,QAAUwF,IAC/BjL,EAAKmD,MAAQnS,EAAMgP,EAAKmD,MAAOr9Q,EAAE4/Q,YAAa5/Q,EAAE2/Q,QAAUwF,EAAKA,IAEjEzF,EAAcxF,GACdiL,EAAMnlR,EAAE2/Q,QACJ3/Q,EAAE2/Q,UAAY3/Q,EAAEmjR,kBAAkB,CACpC5mR,EAAM,EACN,MAKFA,EADEyD,EAAEqjR,QAAUrjR,EAAEojR,OAAOnpR,KAAK7F,OACkB,IAAxC4L,EAAEojR,OAAOnpR,KAAKq4B,WAAWtyB,EAAEqjR,WAE3B,EAERlD,EAASngR,EAAGzD,SACG,IAARA,GAELyD,EAAEojR,OAAOgC,MAAQplR,EAAE2/Q,QAAUwF,IAC/BjL,EAAKmD,MAAQnS,EAAMgP,EAAKmD,MAAOr9Q,EAAE4/Q,YAAa5/Q,EAAE2/Q,QAAUwF,EAAKA,IAErD,IAAR5oR,IACFyD,EAAEqjR,QAAU,EACZrjR,EAAEm8B,OAx6CU,SA46Cdn8B,EAAEm8B,OA56CY,GA+6ClB,GA/6CkB,KA+6Cdn8B,EAAEm8B,OACJ,GAAIn8B,EAAEojR,OAAO9V,QAAuB,CAClC6X,EAAMnlR,EAAE2/Q,QAGR,EAAG,CACD,GAAI3/Q,EAAE2/Q,UAAY3/Q,EAAEmjR,mBACdnjR,EAAEojR,OAAOgC,MAAQplR,EAAE2/Q,QAAUwF,IAC/BjL,EAAKmD,MAAQnS,EAAMgP,EAAKmD,MAAOr9Q,EAAE4/Q,YAAa5/Q,EAAE2/Q,QAAUwF,EAAKA,IAEjEzF,EAAcxF,GACdiL,EAAMnlR,EAAE2/Q,QACJ3/Q,EAAE2/Q,UAAY3/Q,EAAEmjR,kBAAkB,CACpC5mR,EAAM,EACN,MAKFA,EADEyD,EAAEqjR,QAAUrjR,EAAEojR,OAAO9V,QAAQl5Q,OACkB,IAA3C4L,EAAEojR,OAAO9V,QAAQh7O,WAAWtyB,EAAEqjR,WAE9B,EAERlD,EAASngR,EAAGzD,SACG,IAARA,GAELyD,EAAEojR,OAAOgC,MAAQplR,EAAE2/Q,QAAUwF,IAC/BjL,EAAKmD,MAAQnS,EAAMgP,EAAKmD,MAAOr9Q,EAAE4/Q,YAAa5/Q,EAAE2/Q,QAAUwF,EAAKA,IAErD,IAAR5oR,IACFyD,EAAEm8B,OAASmjP,QAIbt/Q,EAAEm8B,OAASmjP,EAsBf,GAnBIt/Q,EAAEm8B,SAAWmjP,IACXt/Q,EAAEojR,OAAOgC,MACPplR,EAAE2/Q,QAAU,EAAI3/Q,EAAEmjR,kBACpBzD,EAAcxF,GAEZl6Q,EAAE2/Q,QAAU,GAAK3/Q,EAAEmjR,mBACrBhD,EAASngR,EAAgB,IAAbk6Q,EAAKmD,OACjB8C,EAASngR,EAAIk6Q,EAAKmD,OAAS,EAAK,KAChCnD,EAAKmD,MAAQ,EACbr9Q,EAAEm8B,OAASojP,IAIbv/Q,EAAEm8B,OAASojP,GAMG,IAAdv/Q,EAAE2/Q,SAEJ,GADAD,EAAcxF,GACS,IAAnBA,EAAKC,UAQP,OADAn6Q,EAAEsjR,YAAc,EApjDA,OA4jDb,GAAsB,IAAlBpJ,EAAKO,UAAkB36Q,EAAKm0K,IAAUn0K,EAAKolR,IApkDlC,IAqkDlBjxG,EACA,OAAOl+K,EAAImkR,GAvjDO,GA2jDpB,GAAIl6Q,EAAEm8B,SAAWqjP,GAAkC,IAAlBtF,EAAKO,SACpC,OAAO1kR,EAAImkR,GA5jDO,GAikDpB,GAAsB,IAAlBA,EAAKO,UAAkC,IAAhBz6Q,EAAEqhR,WAplDT,IAqlDjBptG,GAAwBj0K,EAAEm8B,SAAWqjP,EAAe,CACrD,IAAI+F,EAvjDoB,IAujDVvlR,EAAE85Q,SAjqBpB,SAAsB95Q,EAAGi0K,GAGvB,IAFA,IAAIiuG,IAEK,CAEP,GAAoB,IAAhBliR,EAAEqhR,YACJE,EAAYvhR,GACQ,IAAhBA,EAAEqhR,WAAiB,CACrB,GA77Bc,IA67BVptG,EACF,OAz2Bc,EA22BhB,MAWJ,GANAj0K,EAAEmiR,aAAe,EAGjBD,EAAShD,EAAMkD,UAAUpiR,EAAG,EAAGA,EAAEgG,OAAOhG,EAAEkgR,WAC1ClgR,EAAEqhR,YACFrhR,EAAEkgR,WACEgC,IAEFnC,EAAiB//Q,GAAG,GACK,IAArBA,EAAEk6Q,KAAKC,WACT,OA13BgB,EAg4BtB,OADAn6Q,EAAEk5O,OAAS,EAh9BS,IAi9BhBjlE,GAEF8rG,EAAiB//Q,GAAG,GACK,IAArBA,EAAEk6Q,KAAKC,UAj4BS,EACA,GAs4BlBn6Q,EAAEuiR,WAEJxC,EAAiB//Q,GAAG,GACK,IAArBA,EAAEk6Q,KAAKC,WA54BS,EACA,EAggD2BqL,CAAaxlR,EAAGi0K,GAtjDvC,IAujDrBj0K,EAAE85Q,SAjwBT,SAAqB95Q,EAAGi0K,GAOtB,IANA,IAAIiuG,EACA/+Q,EACAs9Q,EAAMQ,EAENH,EAAO9gR,EAAEgG,SAEJ,CAKP,GAAIhG,EAAEqhR,WAAajC,EAAW,CAE5B,GADAmC,EAAYvhR,GACRA,EAAEqhR,WAAajC,GAp2BH,IAo2BgBnrG,EAC9B,OAhxBgB,EAkxBlB,GAAoB,IAAhBj0K,EAAEqhR,UAAmB,MAK3B,GADArhR,EAAEmiR,aAAe,EACbniR,EAAEqhR,WAryBM,GAqyBoBrhR,EAAEkgR,SAAW,IAE3C/8Q,EAAO29Q,EADPL,EAAOzgR,EAAEkgR,SAAW,MAEPY,IAAOL,IAASt9Q,IAAS29Q,IAAOL,IAASt9Q,IAAS29Q,IAAOL,GAAO,CAC3EQ,EAASjhR,EAAEkgR,SAAWd,EACtB,UAESj8Q,IAAS29Q,IAAOL,IAASt9Q,IAAS29Q,IAAOL,IACzCt9Q,IAAS29Q,IAAOL,IAASt9Q,IAAS29Q,IAAOL,IACzCt9Q,IAAS29Q,IAAOL,IAASt9Q,IAAS29Q,IAAOL,IACzCt9Q,IAAS29Q,IAAOL,IAASt9Q,IAAS29Q,IAAOL,IACzCA,EAAOQ,GAChBjhR,EAAEmiR,aAAe/C,GAAa6B,EAASR,GACnCzgR,EAAEmiR,aAAeniR,EAAEqhR,YACrBrhR,EAAEmiR,aAAeniR,EAAEqhR,WAyBzB,GAlBIrhR,EAAEmiR,cA1zBM,GA8zBVD,EAAShD,EAAMkD,UAAUpiR,EAAG,EAAGA,EAAEmiR,aA9zBvB,GAg0BVniR,EAAEqhR,WAAarhR,EAAEmiR,aACjBniR,EAAEkgR,UAAYlgR,EAAEmiR,aAChBniR,EAAEmiR,aAAe,IAKjBD,EAAShD,EAAMkD,UAAUpiR,EAAG,EAAGA,EAAEgG,OAAOhG,EAAEkgR,WAE1ClgR,EAAEqhR,YACFrhR,EAAEkgR,YAEAgC,IAEFnC,EAAiB//Q,GAAG,GACK,IAArBA,EAAEk6Q,KAAKC,WACT,OAl0BgB,EAw0BtB,OADAn6Q,EAAEk5O,OAAS,EAx5BS,IAy5BhBjlE,GAEF8rG,EAAiB//Q,GAAG,GACK,IAArBA,EAAEk6Q,KAAKC,UAz0BS,EACA,GA80BlBn6Q,EAAEuiR,WAEJxC,EAAiB//Q,GAAG,GACK,IAArBA,EAAEk6Q,KAAKC,WAp1BS,EACA,EAigDMsL,CAAYzlR,EAAGi0K,GACrC2uG,EAAoB5iR,EAAE0hF,OAAO+sC,KAAKzuH,EAAGi0K,GAKzC,GAtgDoB,IAmgDhBsxG,GAlgDgB,IAkgDgBA,IAClCvlR,EAAEm8B,OAASqjP,GAtgDO,IAwgDhB+F,GAtgDgB,IAsgDWA,EAK7B,OAJuB,IAAnBrL,EAAKC,YACPn6Q,EAAEsjR,YAAc,GAnlDF,EA+lDlB,GArhDoB,IAqhDhBiC,IA1mDc,IA2mDZtxG,EACFirG,EAAMwG,UAAU1lR,GAxmDF,IA0mDPi0K,IAEPirG,EAAMyG,iBAAiB3lR,EAAG,EAAG,GAAG,GA9mDlB,IAknDVi0K,IAEF9vG,EAAKnkE,EAAE2hR,MAEa,IAAhB3hR,EAAEqhR,YACJrhR,EAAEkgR,SAAW,EACblgR,EAAEigR,YAAc,EAChBjgR,EAAEk5O,OAAS,KAIjBwmC,EAAcxF,GACS,IAAnBA,EAAKC,WAEP,OADAn6Q,EAAEsjR,YAAc,EAtnDF,EA8nDpB,OAtoDoB,IAsoDhBrvG,EA9nDgB,EA+nDhBj0K,EAAE0/H,MAAQ,EA9nDM,GAioDL,IAAX1/H,EAAE0/H,MACJygJ,EAASngR,EAAgB,IAAbk6Q,EAAKmD,OACjB8C,EAASngR,EAAIk6Q,EAAKmD,OAAS,EAAK,KAChC8C,EAASngR,EAAIk6Q,EAAKmD,OAAS,GAAM,KACjC8C,EAASngR,EAAIk6Q,EAAKmD,OAAS,GAAM,KACjC8C,EAASngR,EAAmB,IAAhBk6Q,EAAK0H,UACjBzB,EAASngR,EAAIk6Q,EAAK0H,UAAY,EAAK,KACnCzB,EAASngR,EAAIk6Q,EAAK0H,UAAY,GAAM,KACpCzB,EAASngR,EAAIk6Q,EAAK0H,UAAY,GAAM,OAIpCxB,EAAYpgR,EAAGk6Q,EAAKmD,QAAU,IAC9B+C,EAAYpgR,EAAgB,MAAbk6Q,EAAKmD,QAGtBqC,EAAcxF,GAIVl6Q,EAAE0/H,KAAO,IAAK1/H,EAAE0/H,MAAQ1/H,EAAE0/H,MAET,IAAd1/H,EAAE2/Q,QAxpDW,EACA,IA+rDtB1rR,EAAQ+mR,WArCR,SAAoBd,GAClB,IAAI/9O,EAEJ,OAAK+9O,GAAsBA,EAAKn+P,MA7lDjB,MAimDfogB,EAAS+9O,EAAKn+P,MAAMogB,SAhmDJ,KAkmDdA,GAjmDa,KAkmDbA,GAjmDgB,KAkmDhBA,GACAA,IAAWmjP,GACXnjP,IAAWojP,GACXpjP,IAAWqjP,EAEJzpR,EAAImkR,EAAM4D,IAGnB5D,EAAKn+P,MAAQ,KAENogB,IAAWojP,EAAaxpR,EAAImkR,GA3qDf,GALA,GA+pDX4D,GAkCX7pR,EAAQ2xR,YAAc,sCAWpB,CAAC,kBAAkB,GAAG,YAAY,GAAG,UAAU,GAAG,aAAa,GAAG,UAAU,KAAKC,GAAG,CAAC,SAASxb,EAAQr2Q,EAAOC,GAC/G,aAuCAD,EAAOC,QApCP,WAEE0B,KAAK++B,KAAa,EAElB/+B,KAAK0d,KAAa,EAElB1d,KAAKmwR,OAAa,EAElBnwR,KAAK2vR,GAAa,EAElB3vR,KAAK0vR,MAAa,KAElB1vR,KAAKowR,UAAa,EAWlBpwR,KAAKsE,KAAa,GAIlBtE,KAAK23Q,QAAa,GAIlB33Q,KAAKyvR,KAAa,EAElBzvR,KAAKJ,MAAa,IAIlB,IAAIywR,GAAG,CAAC,SAAS3b,EAAQr2Q,EAAOC,GAClC,aAyCAD,EAAOC,QAAU,SAAsBimR,EAAM/3Q,GAC3C,IAAI4Z,EACAkqQ,EACAn5C,EACAo5C,EACAf,EACA9uQ,EAEA8vQ,EAEAC,EACAC,EACAC,EACAtgR,EACAugR,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAt/P,EAEApzB,EACA2yR,EACAxuR,EACAyuR,EAGA1yQ,EAAOf,EAGXyI,EAAQm+P,EAAKn+P,MAEbkqQ,EAAM/L,EAAKM,QACXnmQ,EAAQ6lQ,EAAK7lQ,MACby4N,EAAOm5C,GAAO/L,EAAKO,SAAW,GAC9ByL,EAAOhM,EAAKS,SACZrnQ,EAAS4mQ,EAAK5mQ,OACd6xQ,EAAMe,GAAQ/jR,EAAQ+3Q,EAAKC,WAC3B9jQ,EAAM6vQ,GAAQhM,EAAKC,UAAY,KAE/BgM,EAAOpqQ,EAAMoqQ,KAEbC,EAAQrqQ,EAAMqqQ,MACdC,EAAQtqQ,EAAMsqQ,MACdC,EAAQvqQ,EAAMuqQ,MACdtgR,EAAS+V,EAAM/V,OACfugR,EAAOxqQ,EAAMwqQ,KACbC,EAAOzqQ,EAAMyqQ,KACbC,EAAQ1qQ,EAAMirQ,QACdN,EAAQ3qQ,EAAMkrQ,SACdN,GAAS,GAAK5qQ,EAAMmrQ,SAAW,EAC/BN,GAAS,GAAK7qQ,EAAMorQ,UAAY,EAMhChyO,EACA,EAAG,CACGqxO,EAAO,KACTD,GAAQlyQ,EAAM4xQ,MAAUO,EACxBA,GAAQ,EACRD,GAAQlyQ,EAAM4xQ,MAAUO,EACxBA,GAAQ,GAGVK,EAAOJ,EAAMF,EAAOI,GAEpBS,EACA,OAAS,CAKP,GAHAb,KADAh/P,EAAKs/P,IAAS,GAEdL,GAAQj/P,EAEG,IADXA,EAAMs/P,IAAS,GAAM,KAKnBvzQ,EAAO4yQ,KAAiB,MAAPW,MAEd,MAAS,GAALt/P,GAwKJ,IAAkB,IAAR,GAALA,GAAgB,CACxBs/P,EAAOJ,GAAc,MAAPI,IAA8BN,GAAS,GAAKh/P,GAAM,IAChE,SAAS6/P,EAEN,GAAS,GAAL7/P,EAAS,CAEhBxL,EAAMgrC,KArSH,GAsSH,MAAM5R,EAGN+kO,EAAK/8Q,IAAM,8BACX4e,EAAMgrC,KA3SJ,GA4SF,MAAM5R,EAnLNhhD,EAAa,MAAP0yR,GACNt/P,GAAM,MAEAi/P,EAAOj/P,IACTg/P,GAAQlyQ,EAAM4xQ,MAAUO,EACxBA,GAAQ,GAEVryR,GAAOoyR,GAAS,GAAKh/P,GAAM,EAC3Bg/P,KAAUh/P,EACVi/P,GAAQj/P,GAGNi/P,EAAO,KACTD,GAAQlyQ,EAAM4xQ,MAAUO,EACxBA,GAAQ,EACRD,GAAQlyQ,EAAM4xQ,MAAUO,EACxBA,GAAQ,GAEVK,EAAOH,EAAMH,EAAOK,GAEpBS,EACA,OAAS,CAMP,GAJAd,KADAh/P,EAAKs/P,IAAS,GAEdL,GAAQj/P,IAGC,IAFTA,EAAMs/P,IAAS,GAAM,MAiIhB,IAAkB,IAAR,GAALt/P,GAAgB,CACxBs/P,EAAOH,GAAc,MAAPG,IAA8BN,GAAS,GAAKh/P,GAAM,IAChE,SAAS8/P,EAGTnN,EAAK/8Q,IAAM,wBACX4e,EAAMgrC,KAzRR,GA0RE,MAAM5R,EAzHN,GAZA2xO,EAAc,MAAPD,EAEHL,GADJj/P,GAAM,MAEJg/P,GAAQlyQ,EAAM4xQ,MAAUO,GACxBA,GAAQ,GACGj/P,IACTg/P,GAAQlyQ,EAAM4xQ,MAAUO,EACxBA,GAAQ,KAGZM,GAAQP,GAAS,GAAKh/P,GAAM,GAEjB4+P,EAAM,CACfjM,EAAK/8Q,IAAM,gCACX4e,EAAMgrC,KAnKV,GAoKI,MAAM5R,EAOR,GAJAoxO,KAAUh/P,EACVi/P,GAAQj/P,EAGJu/P,GADJv/P,EAAK2+P,EAAOf,GACG,CAEb,IADA59P,EAAKu/P,EAAOv/P,GACH8+P,GACHtqQ,EAAMurQ,KAAM,CACdpN,EAAK/8Q,IAAM,gCACX4e,EAAMgrC,KAhLd,GAiLQ,MAAM5R,EA2BV,GAFA78C,EAAO,EACPyuR,EAAc/gR,EACA,IAAVsgR,GAEF,GADAhuR,GAAQ8tR,EAAQ7+P,EACZA,EAAKpzB,EAAK,CACZA,GAAOozB,EACP,GACEjU,EAAO4yQ,KAAUlgR,EAAO1N,aACfivB,GACXjvB,EAAO4tR,EAAOY,EACdC,EAAczzQ,QAGb,GAAIgzQ,EAAQ/+P,GAGf,GAFAjvB,GAAQ8tR,EAAQE,EAAQ/+P,GACxBA,GAAM++P,GACGnyR,EAAK,CACZA,GAAOozB,EACP,GACEjU,EAAO4yQ,KAAUlgR,EAAO1N,aACfivB,GAEX,GADAjvB,EAAO,EACHguR,EAAQnyR,EAAK,CAEfA,GADAozB,EAAK++P,EAEL,GACEhzQ,EAAO4yQ,KAAUlgR,EAAO1N,aACfivB,GACXjvB,EAAO4tR,EAAOY,EACdC,EAAczzQ,SAMlB,GADAhb,GAAQguR,EAAQ/+P,EACZA,EAAKpzB,EAAK,CACZA,GAAOozB,EACP,GACEjU,EAAO4yQ,KAAUlgR,EAAO1N,aACfivB,GACXjvB,EAAO4tR,EAAOY,EACdC,EAAczzQ,EAGlB,KAAOnf,EAAM,GACXmf,EAAO4yQ,KAAUa,EAAYzuR,KAC7Bgb,EAAO4yQ,KAAUa,EAAYzuR,KAC7Bgb,EAAO4yQ,KAAUa,EAAYzuR,KAC7BnE,GAAO,EAELA,IACFmf,EAAO4yQ,KAAUa,EAAYzuR,KACzBnE,EAAM,IACRmf,EAAO4yQ,KAAUa,EAAYzuR,WAI9B,CACHA,EAAO4tR,EAAOY,EACd,GACExzQ,EAAO4yQ,KAAU5yQ,EAAOhb,KACxBgb,EAAO4yQ,KAAU5yQ,EAAOhb,KACxBgb,EAAO4yQ,KAAU5yQ,EAAOhb,KACxBnE,GAAO,QACAA,EAAM,GACXA,IACFmf,EAAO4yQ,KAAU5yQ,EAAOhb,KACpBnE,EAAM,IACRmf,EAAO4yQ,KAAU5yQ,EAAOhb,OAehC,OAkBJ,aAEK2tR,EAAMn5C,GAAQo5C,EAAO7vQ,GAI9B4vQ,GADA9xR,EAAMqyR,GAAQ,EAGdD,IAAS,IADTC,GAAQryR,GAAO,IACO,EAGtB+lR,EAAKM,QAAUyL,EACf/L,EAAKS,SAAWuL,EAChBhM,EAAKO,SAAYwL,EAAMn5C,EAAYA,EAAOm5C,EAAZ,EAAmB,GAAKA,EAAMn5C,GAC5DotC,EAAKC,UAAa+L,EAAO7vQ,EAAaA,EAAM6vQ,EAAb,IAAqB,KAAOA,EAAO7vQ,GAClE0F,EAAMwqQ,KAAOA,EACbxqQ,EAAMyqQ,KAAOA,IAIb,IAAIe,GAAG,CAAC,SAASld,EAAQr2Q,EAAOC,GAClC,aAGA,IAAI4wM,EAAQwlE,EAAQ,mBAChB8U,EAAU9U,EAAQ,aAClBa,EAAUb,EAAQ,WAClBmd,EAAend,EAAQ,aACvBod,EAAgBpd,EAAQ,cA2BxByT,GAAmB,EAyBZ4J,EAAO,GAkBXC,EAAM,GAiBb,SAASC,EAAQ/iN,GACf,OAAWA,IAAM,GAAM,MACbA,IAAM,EAAK,SACP,MAAJA,IAAe,KACX,IAAJA,IAAa,IAIzB,SAASgjN,IACPlyR,KAAKoxD,KAAO,EACZpxD,KAAKm3O,MAAO,EACZn3O,KAAK+pI,KAAO,EACZ/pI,KAAKmyR,UAAW,EAChBnyR,KAAKoO,MAAQ,EACbpO,KAAKwwR,KAAO,EACZxwR,KAAKoyR,MAAQ,EACbpyR,KAAKusE,MAAQ,EAEbvsE,KAAKgsR,KAAO,KAGZhsR,KAAKqyR,MAAQ,EACbryR,KAAKywR,MAAQ,EACbzwR,KAAK0wR,MAAQ,EACb1wR,KAAK2wR,MAAQ,EACb3wR,KAAKqQ,OAAS,KAGdrQ,KAAK4wR,KAAO,EACZ5wR,KAAK6wR,KAAO,EAGZ7wR,KAAKvB,OAAS,EACduB,KAAK4M,OAAS,EAGd5M,KAAK0vR,MAAQ,EAGb1vR,KAAKqxR,QAAU,KACfrxR,KAAKsxR,SAAW,KAChBtxR,KAAKuxR,QAAU,EACfvxR,KAAKwxR,SAAW,EAGhBxxR,KAAKsyR,MAAQ,EACbtyR,KAAKuyR,KAAO,EACZvyR,KAAKwyR,MAAQ,EACbxyR,KAAKyyR,KAAO,EACZzyR,KAAKkD,KAAO,KAEZlD,KAAK0yR,KAAO,IAAIxjF,EAAMi4E,MAAM,KAC5BnnR,KAAK2yR,KAAO,IAAIzjF,EAAMi4E,MAAM,KAO5BnnR,KAAK4yR,OAAS,KACd5yR,KAAK6yR,QAAU,KACf7yR,KAAK2xR,KAAO,EACZ3xR,KAAK2gD,KAAO,EACZ3gD,KAAK8yR,IAAM,EAGb,SAASC,EAAiBxO,GACxB,IAAIn+P,EAEJ,OAAKm+P,GAASA,EAAKn+P,OACnBA,EAAQm+P,EAAKn+P,MACbm+P,EAAK0H,SAAW1H,EAAK4F,UAAY/jQ,EAAMmmD,MAAQ,EAC/Cg4M,EAAK/8Q,IAAM,GACP4e,EAAM2jH,OACRw6I,EAAKmD,MAAqB,EAAbthQ,EAAM2jH,MAErB3jH,EAAMgrC,KA1HM,EA2HZhrC,EAAM+wN,KAAO,EACb/wN,EAAM+rQ,SAAW,EACjB/rQ,EAAMoqQ,KAAO,MACbpqQ,EAAM4lQ,KAAO,KACb5lQ,EAAMwqQ,KAAO,EACbxqQ,EAAMyqQ,KAAO,EAEbzqQ,EAAMirQ,QAAUjrQ,EAAMwsQ,OAAS,IAAI1jF,EAAMk4E,MA7FzB,KA8FhBhhQ,EAAMkrQ,SAAWlrQ,EAAMysQ,QAAU,IAAI3jF,EAAMk4E,MA7F1B,KA+FjBhhQ,EAAMurQ,KAAO,EACbvrQ,EAAMu6B,MAAQ,EAxJM,GAqIewnO,EAwBrC,SAAS6K,EAAazO,GACpB,IAAIn+P,EAEJ,OAAKm+P,GAASA,EAAKn+P,QACnBA,EAAQm+P,EAAKn+P,OACPqqQ,MAAQ,EACdrqQ,EAAMsqQ,MAAQ,EACdtqQ,EAAMuqQ,MAAQ,EACPoC,EAAiBxO,IALW4D,EASrC,SAAS8K,EAAc1O,EAAMN,GAC3B,IAAIl6I,EACA3jH,EAGJ,OAAKm+P,GAASA,EAAKn+P,OACnBA,EAAQm+P,EAAKn+P,MAGT69P,EAAa,GACfl6I,EAAO,EACPk6I,GAAcA,IAGdl6I,EAA2B,GAAnBk6I,GAAc,GAClBA,EAAa,KACfA,GAAc,KAKdA,IAAeA,EAAa,GAAKA,EAAa,IACzCkE,GAEY,OAAjB/hQ,EAAM/V,QAAmB+V,EAAMisQ,QAAUpO,IAC3C79P,EAAM/V,OAAS,MAIjB+V,EAAM2jH,KAAOA,EACb3jH,EAAMisQ,MAAQpO,EACP+O,EAAazO,KA1Be4D,EA6BrC,SAASxC,EAAapB,EAAMN,GAC1B,IAAIn3Q,EACAsZ,EAEJ,OAAKm+P,GAGLn+P,EAAQ,IAAI8rQ,EAIZ3N,EAAKn+P,MAAQA,EACbA,EAAM/V,OAAS,KAvNK,KAwNpBvD,EAAMmmR,EAAc1O,EAAMN,MAExBM,EAAKn+P,MAAQ,MAERtZ,GAbaq7Q,EA+BtB,IAEI+K,EAAQC,EAFRC,GAAS,EAIb,SAASC,EAAYjtQ,GAEnB,GAAIgtQ,EAAQ,CACV,IAAIE,EAOJ,IALAJ,EAAS,IAAIhkF,EAAMk4E,MAAM,KACzB+L,EAAU,IAAIjkF,EAAMk4E,MAAM,IAG1BkM,EAAM,EACCA,EAAM,KAAOltQ,EAAMssQ,KAAKY,KAAS,EACxC,KAAOA,EAAM,KAAOltQ,EAAMssQ,KAAKY,KAAS,EACxC,KAAOA,EAAM,KAAOltQ,EAAMssQ,KAAKY,KAAS,EACxC,KAAOA,EAAM,KAAOltQ,EAAMssQ,KAAKY,KAAS,EAMxC,IAJAxB,EArRO,EAqRc1rQ,EAAMssQ,KAAM,EAAG,IAAKQ,EAAU,EAAG9sQ,EAAMusQ,KAAM,CAAC9B,KAAM,IAGzEyC,EAAM,EACCA,EAAM,IAAMltQ,EAAMssQ,KAAKY,KAAS,EAEvCxB,EA1RQ,EA0Ra1rQ,EAAMssQ,KAAM,EAAG,GAAMS,EAAS,EAAG/sQ,EAAMusQ,KAAM,CAAC9B,KAAM,IAGzEuC,GAAS,EAGXhtQ,EAAMirQ,QAAU6B,EAChB9sQ,EAAMmrQ,QAAU,EAChBnrQ,EAAMkrQ,SAAW6B,EACjB/sQ,EAAMorQ,SAAW,EA6pCnBlzR,EAAQ00R,aAAeA,EACvB10R,EAAQ20R,cAAgBA,EACxB30R,EAAQy0R,iBAAmBA,EAC3Bz0R,EAAQi1R,YAjtCR,SAAqBhP,GACnB,OAAOoB,EAAapB,EArKN,KAs3ChBjmR,EAAQqnR,aAAeA,EACvBrnR,EAAQwnR,QAtmCR,SAAiBvB,EAAMjmG,GACrB,IAAIl4J,EACA1H,EAAOf,EACPza,EACA62B,EACA04P,EAAM/yO,EACNkxO,EACAC,EACAP,EAAKC,EACL57E,EACAhyM,EACAyuR,EAEAoC,EAAWC,EAASC,EAEpBC,EAAWC,EAASC,EACpBr1R,EACAsO,EAEA4hM,EAEAvqM,EATA+sR,EAAO,EAMP4C,EAAO,IAAI5kF,EAAM61E,KAAK,GAKtBgP,EACF,CAAC,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,IAGjE,IAAKxP,IAASA,EAAKn+P,QAAUm+P,EAAK5mQ,SAC5B4mQ,EAAK7lQ,OAA2B,IAAlB6lQ,EAAKO,SACvB,OAAOqD,GAGT/hQ,EAAQm+P,EAAKn+P,OACHgrC,OAAS2gO,IAAQ3rQ,EAAMgrC,KA/Uf,IAmVlBr3B,EAAMwqP,EAAKS,SACXrnQ,EAAS4mQ,EAAK5mQ,OACd+hC,EAAO6kO,EAAKC,UACZthR,EAAOqhR,EAAKM,QACZnmQ,EAAQ6lQ,EAAK7lQ,MACb+zQ,EAAOlO,EAAKO,SACZ8L,EAAOxqQ,EAAMwqQ,KACbC,EAAOzqQ,EAAMyqQ,KAGbP,EAAMmC,EACNlC,EAAO7wO,EACP5yC,EA7XoB,EA+XpBknR,EACA,OACE,OAAQ5tQ,EAAMgrC,MACd,KAhXU,EAiXR,GAAmB,IAAfhrC,EAAM2jH,KAAY,CACpB3jH,EAAMgrC,KAtWM,GAuWZ,MAGF,KAAOy/N,EAAO,IAAI,CAChB,GAAa,IAAT4B,EAAc,MAAMuB,EACxBvB,IACA7B,GAAQlyQ,EAAMxb,MAAW2tR,EACzBA,GAAQ,EAGV,GAAkB,EAAbzqQ,EAAM2jH,MAAsB,QAAT6mJ,EAAiB,CACvCxqQ,EAAMgsQ,MAAQ,EAEd0B,EAAK,GAAY,IAAPlD,EACVkD,EAAK,GAAMlD,IAAS,EAAK,IACzBxqQ,EAAMgsQ,MAAQ7c,EAAMnvP,EAAMgsQ,MAAO0B,EAAM,EAAG,GAI1ClD,EAAO,EACPC,EAAO,EAEPzqQ,EAAMgrC,KAxYC,EAyYP,MAMF,GAJAhrC,EAAMhY,MAAQ,EACVgY,EAAM4lQ,OACR5lQ,EAAM4lQ,KAAKpsR,MAAO,KAED,EAAbwmB,EAAM2jH,UACA,IAAP6mJ,IAA2B,IAAMA,GAAQ,IAAM,GAAI,CACtDrM,EAAK/8Q,IAAM,yBACX4e,EAAMgrC,KAAO4gO,EACb,MAEF,GA7ZY,IA6ZA,GAAPpB,GAAwC,CAC3CrM,EAAK/8Q,IAAM,6BACX4e,EAAMgrC,KAAO4gO,EACb,MAOF,GAHAnB,GAAQ,EAERryR,EAAiC,GAAnB,IAHdoyR,KAAU,IAIU,IAAhBxqQ,EAAMisQ,MACRjsQ,EAAMisQ,MAAQ7zR,OAEX,GAAIA,EAAM4nB,EAAMisQ,MAAO,CAC1B9N,EAAK/8Q,IAAM,sBACX4e,EAAMgrC,KAAO4gO,EACb,MAEF5rQ,EAAMoqQ,KAAO,GAAKhyR,EAElB+lR,EAAKmD,MAAQthQ,EAAMgsQ,MAAQ,EAC3BhsQ,EAAMgrC,KAAc,IAAPw/N,EAlaH,GAka2BmB,EAErCnB,EAAO,EACPC,EAAO,EAEP,MACF,KAhbW,EAkbT,KAAOA,EAAO,IAAI,CAChB,GAAa,IAAT4B,EAAc,MAAMuB,EACxBvB,IACA7B,GAAQlyQ,EAAMxb,MAAW2tR,EACzBA,GAAQ,EAIV,GADAzqQ,EAAMhY,MAAQwiR,EAjcF,IAkcO,IAAdxqQ,EAAMhY,OAA8B,CACvCm2Q,EAAK/8Q,IAAM,6BACX4e,EAAMgrC,KAAO4gO,EACb,MAEF,GAAkB,MAAd5rQ,EAAMhY,MAAgB,CACxBm2Q,EAAK/8Q,IAAM,2BACX4e,EAAMgrC,KAAO4gO,EACb,MAEE5rQ,EAAM4lQ,OACR5lQ,EAAM4lQ,KAAKjtP,KAAS6xP,GAAQ,EAAK,GAEjB,IAAdxqQ,EAAMhY,QAER0lR,EAAK,GAAY,IAAPlD,EACVkD,EAAK,GAAMlD,IAAS,EAAK,IACzBxqQ,EAAMgsQ,MAAQ7c,EAAMnvP,EAAMgsQ,MAAO0B,EAAM,EAAG,IAI5ClD,EAAO,EACPC,EAAO,EAEPzqQ,EAAMgrC,KAjdE,EAmdV,KAndU,EAqdR,KAAOy/N,EAAO,IAAI,CAChB,GAAa,IAAT4B,EAAc,MAAMuB,EACxBvB,IACA7B,GAAQlyQ,EAAMxb,MAAW2tR,EACzBA,GAAQ,EAGNzqQ,EAAM4lQ,OACR5lQ,EAAM4lQ,KAAKtuQ,KAAOkzQ,GAEF,IAAdxqQ,EAAMhY,QAER0lR,EAAK,GAAY,IAAPlD,EACVkD,EAAK,GAAMlD,IAAS,EAAK,IACzBkD,EAAK,GAAMlD,IAAS,GAAM,IAC1BkD,EAAK,GAAMlD,IAAS,GAAM,IAC1BxqQ,EAAMgsQ,MAAQ7c,EAAMnvP,EAAMgsQ,MAAO0B,EAAM,EAAG,IAI5ClD,EAAO,EACPC,EAAO,EAEPzqQ,EAAMgrC,KA3eA,EA6eR,KA7eQ,EA+eN,KAAOy/N,EAAO,IAAI,CAChB,GAAa,IAAT4B,EAAc,MAAMuB,EACxBvB,IACA7B,GAAQlyQ,EAAMxb,MAAW2tR,EACzBA,GAAQ,EAGNzqQ,EAAM4lQ,OACR5lQ,EAAM4lQ,KAAKmE,OAAiB,IAAPS,EACrBxqQ,EAAM4lQ,KAAK2D,GAAMiB,GAAQ,GAET,IAAdxqQ,EAAMhY,QAER0lR,EAAK,GAAY,IAAPlD,EACVkD,EAAK,GAAMlD,IAAS,EAAK,IACzBxqQ,EAAMgsQ,MAAQ7c,EAAMnvP,EAAMgsQ,MAAO0B,EAAM,EAAG,IAI5ClD,EAAO,EACPC,EAAO,EAEPzqQ,EAAMgrC,KApgBG,EAsgBX,KAtgBW,EAugBT,GAAkB,KAAdhrC,EAAMhY,MAAgB,CAExB,KAAOyiR,EAAO,IAAI,CAChB,GAAa,IAAT4B,EAAc,MAAMuB,EACxBvB,IACA7B,GAAQlyQ,EAAMxb,MAAW2tR,EACzBA,GAAQ,EAGVzqQ,EAAM3nB,OAASmyR,EACXxqQ,EAAM4lQ,OACR5lQ,EAAM4lQ,KAAKoE,UAAYQ,GAEP,IAAdxqQ,EAAMhY,QAER0lR,EAAK,GAAY,IAAPlD,EACVkD,EAAK,GAAMlD,IAAS,EAAK,IACzBxqQ,EAAMgsQ,MAAQ7c,EAAMnvP,EAAMgsQ,MAAO0B,EAAM,EAAG,IAI5ClD,EAAO,EACPC,EAAO,OAGAzqQ,EAAM4lQ,OACb5lQ,EAAM4lQ,KAAK0D,MAAQ,MAErBtpQ,EAAMgrC,KAliBG,EAoiBX,KApiBW,EAqiBT,GAAkB,KAAdhrC,EAAMhY,SACRumM,EAAOvuL,EAAM3nB,QACFg0R,IAAQ99E,EAAO89E,GACtB99E,IACEvuL,EAAM4lQ,OACRxtR,EAAM4nB,EAAM4lQ,KAAKoE,UAAYhqQ,EAAM3nB,OAC9B2nB,EAAM4lQ,KAAK0D,QAEdtpQ,EAAM4lQ,KAAK0D,MAAQ,IAAI9wR,MAAMwnB,EAAM4lQ,KAAKoE,YAE1ClhF,EAAMq3E,SACJngQ,EAAM4lQ,KAAK0D,MACXhxQ,EACAxb,EAGAyxM,EAEAn2M,IAMc,IAAd4nB,EAAMhY,QACRgY,EAAMgsQ,MAAQ7c,EAAMnvP,EAAMgsQ,MAAO1zQ,EAAOi2L,EAAMzxM,IAEhDuvR,GAAQ99E,EACRzxM,GAAQyxM,EACRvuL,EAAM3nB,QAAUk2M,GAEdvuL,EAAM3nB,QAAU,MAAMu1R,EAE5B5tQ,EAAM3nB,OAAS,EACf2nB,EAAMgrC,KAtkBE,EAwkBV,KAxkBU,EAykBR,GAAkB,KAAdhrC,EAAMhY,MAAgB,CACxB,GAAa,IAATqkR,EAAc,MAAMuB,EACxBr/E,EAAO,EACP,GAEEn2M,EAAMkgB,EAAMxb,EAAOyxM,KAEfvuL,EAAM4lQ,MAAQxtR,GACb4nB,EAAM3nB,OAAS,QAClB2nB,EAAM4lQ,KAAK1nR,MAAQ4H,OAAO0vB,aAAap9B,UAElCA,GAAOm2M,EAAO89E,GAOvB,GALkB,IAAdrsQ,EAAMhY,QACRgY,EAAMgsQ,MAAQ7c,EAAMnvP,EAAMgsQ,MAAO1zQ,EAAOi2L,EAAMzxM,IAEhDuvR,GAAQ99E,EACRzxM,GAAQyxM,EACJn2M,EAAO,MAAMw1R,OAEV5tQ,EAAM4lQ,OACb5lQ,EAAM4lQ,KAAK1nR,KAAO,MAEpB8hB,EAAM3nB,OAAS,EACf2nB,EAAMgrC,KAhmBK,EAkmBb,KAlmBa,EAmmBX,GAAkB,KAAdhrC,EAAMhY,MAAgB,CACxB,GAAa,IAATqkR,EAAc,MAAMuB,EACxBr/E,EAAO,EACP,GACEn2M,EAAMkgB,EAAMxb,EAAOyxM,KAEfvuL,EAAM4lQ,MAAQxtR,GACb4nB,EAAM3nB,OAAS,QAClB2nB,EAAM4lQ,KAAKrU,SAAWzrQ,OAAO0vB,aAAap9B,UAErCA,GAAOm2M,EAAO89E,GAMvB,GALkB,IAAdrsQ,EAAMhY,QACRgY,EAAMgsQ,MAAQ7c,EAAMnvP,EAAMgsQ,MAAO1zQ,EAAOi2L,EAAMzxM,IAEhDuvR,GAAQ99E,EACRzxM,GAAQyxM,EACJn2M,EAAO,MAAMw1R,OAEV5tQ,EAAM4lQ,OACb5lQ,EAAM4lQ,KAAKrU,QAAU,MAEvBvxP,EAAMgrC,KAvnBE,EAynBV,KAznBU,EA0nBR,GAAkB,IAAdhrC,EAAMhY,MAAgB,CAExB,KAAOyiR,EAAO,IAAI,CAChB,GAAa,IAAT4B,EAAc,MAAMuB,EACxBvB,IACA7B,GAAQlyQ,EAAMxb,MAAW2tR,EACzBA,GAAQ,EAGV,GAAID,KAAwB,MAAdxqQ,EAAMgsQ,OAAiB,CACnC7N,EAAK/8Q,IAAM,sBACX4e,EAAMgrC,KAAO4gO,EACb,MAGFpB,EAAO,EACPC,EAAO,EAGLzqQ,EAAM4lQ,OACR5lQ,EAAM4lQ,KAAKyD,KAASrpQ,EAAMhY,OAAS,EAAK,EACxCgY,EAAM4lQ,KAAKpsR,MAAO,GAEpB2kR,EAAKmD,MAAQthQ,EAAMgsQ,MAAQ,EAC3BhsQ,EAAMgrC,KAAO2gO,EACb,MACF,KAnpBY,GAqpBV,KAAOlB,EAAO,IAAI,CAChB,GAAa,IAAT4B,EAAc,MAAMuB,EACxBvB,IACA7B,GAAQlyQ,EAAMxb,MAAW2tR,EACzBA,GAAQ,EAGVtM,EAAKmD,MAAQthQ,EAAMgsQ,MAAQH,EAAQrB,GAEnCA,EAAO,EACPC,EAAO,EAEPzqQ,EAAMgrC,KAhqBE,GAkqBV,KAlqBU,GAmqBR,GAAuB,IAAnBhrC,EAAM+rQ,SASR,OAPA5N,EAAKS,SAAWjrP,EAChBwqP,EAAKC,UAAY9kO,EACjB6kO,EAAKM,QAAU3hR,EACfqhR,EAAKO,SAAW2N,EAChBrsQ,EAAMwqQ,KAAOA,EACbxqQ,EAAMyqQ,KAAOA,EApsBC,EAwsBhBtM,EAAKmD,MAAQthQ,EAAMgsQ,MAAQ,EAC3BhsQ,EAAMgrC,KAAO2gO,EAEf,KAAKA,EACH,GArtBgB,IAqtBZzzG,GAptBY,IAotBSA,EAAqB,MAAM01G,EAEtD,KAlrBgB,GAmrBd,GAAI5tQ,EAAM+wN,KAAM,CAEdy5C,KAAiB,EAAPC,EACVA,GAAe,EAAPA,EAERzqQ,EAAMgrC,KA1qBC,GA2qBP,MAGF,KAAOy/N,EAAO,GAAG,CACf,GAAa,IAAT4B,EAAc,MAAMuB,EACxBvB,IACA7B,GAAQlyQ,EAAMxb,MAAW2tR,EACzBA,GAAQ,EASV,OANAzqQ,EAAM+wN,KAAe,EAAPy5C,EAGdC,GAAQ,EAGQ,GAJhBD,KAAU,IAKV,KAAK,EAGHxqQ,EAAMgrC,KA5sBM,GA6sBZ,MACF,KAAK,EAKH,GAJAiiO,EAAYjtQ,GAGZA,EAAMgrC,KA5sBQ,GA3CA,IAwvBVktH,EAAmB,CAErBsyG,KAAU,EACVC,GAAQ,EAER,MAAMmD,EAER,MACF,KAAK,EAGH5tQ,EAAMgrC,KA3tBK,GA4tBX,MACF,KAAK,EACHmzN,EAAK/8Q,IAAM,qBACX4e,EAAMgrC,KAAO4gO,EAGfpB,KAAU,EACVC,GAAQ,EAER,MACF,KAzuBgB,GA+uBd,IAJAD,KAAiB,EAAPC,EACVA,GAAe,EAAPA,EAGDA,EAAO,IAAI,CAChB,GAAa,IAAT4B,EAAc,MAAMuB,EACxBvB,IACA7B,GAAQlyQ,EAAMxb,MAAW2tR,EACzBA,GAAQ,EAGV,IAAY,MAAPD,KAAqBA,IAAS,GAAM,OAAS,CAChDrM,EAAK/8Q,IAAM,+BACX4e,EAAMgrC,KAAO4gO,EACb,MAUF,GARA5rQ,EAAM3nB,OAAgB,MAAPmyR,EAIfA,EAAO,EACPC,EAAO,EAEPzqQ,EAAMgrC,KAjwBO,GAtCG,IAwyBZktH,EAAqB,MAAM01G,EAEjC,KApwBe,GAqwBb5tQ,EAAMgrC,KApwBM,GAswBd,KAtwBc,GAwwBZ,GADAujJ,EAAOvuL,EAAM3nB,OACH,CAGR,GAFIk2M,EAAO89E,IAAQ99E,EAAO89E,GACtB99E,EAAOj1J,IAAQi1J,EAAOj1J,GACb,IAATi1J,EAAc,MAAMq/E,EAExB9kF,EAAMq3E,SAAS5oQ,EAAQe,EAAOxb,EAAMyxM,EAAM56K,GAE1C04P,GAAQ99E,EACRzxM,GAAQyxM,EACRj1J,GAAQi1J,EACR56K,GAAO46K,EACPvuL,EAAM3nB,QAAUk2M,EAChB,MAGFvuL,EAAMgrC,KAAO2gO,EACb,MACF,KAxxBe,GA0xBb,KAAOlB,EAAO,IAAI,CAChB,GAAa,IAAT4B,EAAc,MAAMuB,EACxBvB,IACA7B,GAAQlyQ,EAAMxb,MAAW2tR,EACzBA,GAAQ,EAmBV,GAhBAzqQ,EAAMmsQ,KAAkC,KAAnB,GAAP3B,GAEdA,KAAU,EACVC,GAAQ,EAERzqQ,EAAMosQ,MAAmC,GAAnB,GAAP5B,GAEfA,KAAU,EACVC,GAAQ,EAERzqQ,EAAMksQ,MAAmC,GAAnB,GAAP1B,GAEfA,KAAU,EACVC,GAAQ,EAGJzqQ,EAAMmsQ,KAAO,KAAOnsQ,EAAMosQ,MAAQ,GAAI,CACxCjO,EAAK/8Q,IAAM,sCACX4e,EAAMgrC,KAAO4gO,EACb,MAIF5rQ,EAAMqsQ,KAAO,EACbrsQ,EAAMgrC,KAxzBS,GA0zBjB,KA1zBiB,GA2zBf,KAAOhrC,EAAMqsQ,KAAOrsQ,EAAMksQ,OAAO,CAE/B,KAAOzB,EAAO,GAAG,CACf,GAAa,IAAT4B,EAAc,MAAMuB,EACxBvB,IACA7B,GAAQlyQ,EAAMxb,MAAW2tR,EACzBA,GAAQ,EAGVzqQ,EAAMssQ,KAAKqB,EAAM3tQ,EAAMqsQ,SAAmB,EAAP7B,EAEnCA,KAAU,EACVC,GAAQ,EAGV,KAAOzqQ,EAAMqsQ,KAAO,IAClBrsQ,EAAMssQ,KAAKqB,EAAM3tQ,EAAMqsQ,SAAW,EAapC,GAPArsQ,EAAMirQ,QAAUjrQ,EAAMwsQ,OACtBxsQ,EAAMmrQ,QAAU,EAEhB7iF,EAAO,CAACmiF,KAAMzqQ,EAAMmrQ,SACpBzkR,EAAMglR,EA74BA,EA64BqB1rQ,EAAMssQ,KAAM,EAAG,GAAItsQ,EAAMirQ,QAAS,EAAGjrQ,EAAMusQ,KAAMjkF,GAC5EtoL,EAAMmrQ,QAAU7iF,EAAKmiF,KAEjB/jR,EAAK,CACPy3Q,EAAK/8Q,IAAM,2BACX4e,EAAMgrC,KAAO4gO,EACb,MAGF5rQ,EAAMqsQ,KAAO,EACbrsQ,EAAMgrC,KA91BU,GAg2BlB,KAh2BkB,GAi2BhB,KAAOhrC,EAAMqsQ,KAAOrsQ,EAAMmsQ,KAAOnsQ,EAAMosQ,OAAO,CAC5C,KAGEiB,GAFAvC,EAAO9qQ,EAAMirQ,QAAQT,GAAS,GAAKxqQ,EAAMmrQ,SAAW,MAEhC,GAAM,IAC1BmC,EAAkB,MAAPxC,KAFXsC,EAAYtC,IAAS,KAIFL,IANZ,CAQP,GAAa,IAAT4B,EAAc,MAAMuB,EACxBvB,IACA7B,GAAQlyQ,EAAMxb,MAAW2tR,EACzBA,GAAQ,EAGV,GAAI6C,EAAW,GAEb9C,KAAU4C,EACV3C,GAAQ2C,EAERptQ,EAAMssQ,KAAKtsQ,EAAMqsQ,QAAUiB,MAExB,CACH,GAAiB,KAAbA,EAAiB,CAGnB,IADAvvR,EAAIqvR,EAAY,EACT3C,EAAO1sR,GAAG,CACf,GAAa,IAATsuR,EAAc,MAAMuB,EACxBvB,IACA7B,GAAQlyQ,EAAMxb,MAAW2tR,EACzBA,GAAQ,EAOV,GAHAD,KAAU4C,EACV3C,GAAQ2C,EAEW,IAAfptQ,EAAMqsQ,KAAY,CACpBlO,EAAK/8Q,IAAM,4BACX4e,EAAMgrC,KAAO4gO,EACb,MAEFxzR,EAAM4nB,EAAMssQ,KAAKtsQ,EAAMqsQ,KAAO,GAC9B99E,EAAO,GAAY,EAAPi8E,GAEZA,KAAU,EACVC,GAAQ,OAGL,GAAiB,KAAb6C,EAAiB,CAGxB,IADAvvR,EAAIqvR,EAAY,EACT3C,EAAO1sR,GAAG,CACf,GAAa,IAATsuR,EAAc,MAAMuB,EACxBvB,IACA7B,GAAQlyQ,EAAMxb,MAAW2tR,EACzBA,GAAQ,EAKVA,GAAQ2C,EAERh1R,EAAM,EACNm2M,EAAO,GAAY,GAJnBi8E,KAAU4C,IAMV5C,KAAU,EACVC,GAAQ,MAGL,CAGH,IADA1sR,EAAIqvR,EAAY,EACT3C,EAAO1sR,GAAG,CACf,GAAa,IAATsuR,EAAc,MAAMuB,EACxBvB,IACA7B,GAAQlyQ,EAAMxb,MAAW2tR,EACzBA,GAAQ,EAKVA,GAAQ2C,EAERh1R,EAAM,EACNm2M,EAAO,IAAa,KAJpBi8E,KAAU4C,IAMV5C,KAAU,EACVC,GAAQ,EAGV,GAAIzqQ,EAAMqsQ,KAAO99E,EAAOvuL,EAAMmsQ,KAAOnsQ,EAAMosQ,MAAO,CAChDjO,EAAK/8Q,IAAM,4BACX4e,EAAMgrC,KAAO4gO,EACb,MAEF,KAAOr9E,KACLvuL,EAAMssQ,KAAKtsQ,EAAMqsQ,QAAUj0R,GAMjC,GAAI4nB,EAAMgrC,OAAS4gO,EAAO,MAG1B,GAAwB,IAApB5rQ,EAAMssQ,KAAK,KAAY,CACzBnO,EAAK/8Q,IAAM,uCACX4e,EAAMgrC,KAAO4gO,EACb,MAeF,GATA5rQ,EAAMmrQ,QAAU,EAEhB7iF,EAAO,CAACmiF,KAAMzqQ,EAAMmrQ,SACpBzkR,EAAMglR,EA/gCD,EA+gCqB1rQ,EAAMssQ,KAAM,EAAGtsQ,EAAMmsQ,KAAMnsQ,EAAMirQ,QAAS,EAAGjrQ,EAAMusQ,KAAMjkF,GAGnFtoL,EAAMmrQ,QAAU7iF,EAAKmiF,KAGjB/jR,EAAK,CACPy3Q,EAAK/8Q,IAAM,8BACX4e,EAAMgrC,KAAO4gO,EACb,MAcF,GAXA5rQ,EAAMorQ,SAAW,EAGjBprQ,EAAMkrQ,SAAWlrQ,EAAMysQ,QACvBnkF,EAAO,CAACmiF,KAAMzqQ,EAAMorQ,UACpB1kR,EAAMglR,EA/hCA,EA+hCqB1rQ,EAAMssQ,KAAMtsQ,EAAMmsQ,KAAMnsQ,EAAMosQ,MAAOpsQ,EAAMkrQ,SAAU,EAAGlrQ,EAAMusQ,KAAMjkF,GAG/FtoL,EAAMorQ,SAAW9iF,EAAKmiF,KAGlB/jR,EAAK,CACPy3Q,EAAK/8Q,IAAM,wBACX4e,EAAMgrC,KAAO4gO,EACb,MAIF,GADA5rQ,EAAMgrC,KAn/BU,GA3CA,IA+hCZktH,EAAqB,MAAM01G,EAEjC,KAt/BkB,GAu/BhB5tQ,EAAMgrC,KAt/BS,GAw/BjB,KAx/BiB,GAy/Bf,GAAIqhO,GAAQ,GAAK/yO,GAAQ,IAAK,CAE5B6kO,EAAKS,SAAWjrP,EAChBwqP,EAAKC,UAAY9kO,EACjB6kO,EAAKM,QAAU3hR,EACfqhR,EAAKO,SAAW2N,EAChBrsQ,EAAMwqQ,KAAOA,EACbxqQ,EAAMyqQ,KAAOA,EAEbgB,EAAatN,EAAMgM,GAEnBx2P,EAAMwqP,EAAKS,SACXrnQ,EAAS4mQ,EAAK5mQ,OACd+hC,EAAO6kO,EAAKC,UACZthR,EAAOqhR,EAAKM,QACZnmQ,EAAQ6lQ,EAAK7lQ,MACb+zQ,EAAOlO,EAAKO,SACZ8L,EAAOxqQ,EAAMwqQ,KACbC,EAAOzqQ,EAAMyqQ,KAGTzqQ,EAAMgrC,OAAS2gO,IACjB3rQ,EAAMu6B,MAAQ,GAEhB,MAGF,IADAv6B,EAAMu6B,KAAO,EAIX8yO,GAFAvC,EAAO9qQ,EAAMirQ,QAAQT,GAAS,GAAKxqQ,EAAMmrQ,SAAU,MAE/B,GAAM,IAC1BmC,EAAkB,MAAPxC,KAFXsC,EAAYtC,IAAS,KAIJL,IANV,CAQP,GAAa,IAAT4B,EAAc,MAAMuB,EACxBvB,IACA7B,GAAQlyQ,EAAMxb,MAAW2tR,EACzBA,GAAQ,EAGV,GAAI4C,GAAgC,IAAV,IAAVA,GAAuB,CAIrC,IAHAE,EAAYH,EACZI,EAAUH,EACVI,EAAWH,EAKTD,GAHAvC,EAAO9qQ,EAAMirQ,QAAQwC,IACXjD,GAAS,GAAM+C,EAAYC,GAAW,IAAoCD,OAEhE,GAAM,IAC1BD,EAAkB,MAAPxC,IAENyC,GAJLH,EAAYtC,IAAS,KAIUL,IAPxB,CASP,GAAa,IAAT4B,EAAc,MAAMuB,EACxBvB,IACA7B,GAAQlyQ,EAAMxb,MAAW2tR,EACzBA,GAAQ,EAIVD,KAAU+C,EACV9C,GAAQ8C,EAERvtQ,EAAMu6B,MAAQgzO,EAQhB,GALA/C,KAAU4C,EACV3C,GAAQ2C,EAERptQ,EAAMu6B,MAAQ6yO,EACdptQ,EAAM3nB,OAASi1R,EACC,IAAZD,EAAe,CAIjBrtQ,EAAMgrC,KAhkCO,GAikCb,MAEF,GAAc,GAAVqiO,EAAc,CAEhBrtQ,EAAMu6B,MAAQ,EACdv6B,EAAMgrC,KAAO2gO,EACb,MAEF,GAAc,GAAV0B,EAAc,CAChBlP,EAAK/8Q,IAAM,8BACX4e,EAAMgrC,KAAO4gO,EACb,MAEF5rQ,EAAMspQ,MAAkB,GAAV+D,EACdrtQ,EAAMgrC,KAnlCY,GAqlCpB,KArlCoB,GAslClB,GAAIhrC,EAAMspQ,MAAO,CAGf,IADAvrR,EAAIiiB,EAAMspQ,MACHmB,EAAO1sR,GAAG,CACf,GAAa,IAATsuR,EAAc,MAAMuB,EACxBvB,IACA7B,GAAQlyQ,EAAMxb,MAAW2tR,EACzBA,GAAQ,EAGVzqQ,EAAM3nB,QAAUmyR,GAAS,GAAKxqQ,EAAMspQ,OAAQ,EAE5CkB,KAAUxqQ,EAAMspQ,MAChBmB,GAAQzqQ,EAAMspQ,MAEdtpQ,EAAMu6B,MAAQv6B,EAAMspQ,MAGtBtpQ,EAAM0sQ,IAAM1sQ,EAAM3nB,OAClB2nB,EAAMgrC,KAxmCU,GA0mClB,KA1mCkB,GA2mChB,KAGEqiO,GAFAvC,EAAO9qQ,EAAMkrQ,SAASV,GAAS,GAAKxqQ,EAAMorQ,UAAW,MAEjC,GAAM,IAC1BkC,EAAkB,MAAPxC,KAFXsC,EAAYtC,IAAS,KAIFL,IANZ,CAQP,GAAa,IAAT4B,EAAc,MAAMuB,EACxBvB,IACA7B,GAAQlyQ,EAAMxb,MAAW2tR,EACzBA,GAAQ,EAGV,GAAyB,IAAV,IAAV4C,GAAuB,CAI1B,IAHAE,EAAYH,EACZI,EAAUH,EACVI,EAAWH,EAKTD,GAHAvC,EAAO9qQ,EAAMkrQ,SAASuC,IACZjD,GAAS,GAAM+C,EAAYC,GAAW,IAAoCD,OAEhE,GAAM,IAC1BD,EAAkB,MAAPxC,IAENyC,GAJLH,EAAYtC,IAAS,KAIUL,IAPxB,CASP,GAAa,IAAT4B,EAAc,MAAMuB,EACxBvB,IACA7B,GAAQlyQ,EAAMxb,MAAW2tR,EACzBA,GAAQ,EAIVD,KAAU+C,EACV9C,GAAQ8C,EAERvtQ,EAAMu6B,MAAQgzO,EAOhB,GAJA/C,KAAU4C,EACV3C,GAAQ2C,EAERptQ,EAAMu6B,MAAQ6yO,EACA,GAAVC,EAAc,CAChBlP,EAAK/8Q,IAAM,wBACX4e,EAAMgrC,KAAO4gO,EACb,MAEF5rQ,EAAMxZ,OAAS8mR,EACfttQ,EAAMspQ,MAAoB,GAAZ,EACdtpQ,EAAMgrC,KA7pCa,GA+pCrB,KA/pCqB,GAgqCnB,GAAIhrC,EAAMspQ,MAAO,CAGf,IADAvrR,EAAIiiB,EAAMspQ,MACHmB,EAAO1sR,GAAG,CACf,GAAa,IAATsuR,EAAc,MAAMuB,EACxBvB,IACA7B,GAAQlyQ,EAAMxb,MAAW2tR,EACzBA,GAAQ,EAGVzqQ,EAAMxZ,QAAUgkR,GAAS,GAAKxqQ,EAAMspQ,OAAQ,EAE5CkB,KAAUxqQ,EAAMspQ,MAChBmB,GAAQzqQ,EAAMspQ,MAEdtpQ,EAAMu6B,MAAQv6B,EAAMspQ,MAGtB,GAAItpQ,EAAMxZ,OAASwZ,EAAMoqQ,KAAM,CAC7BjM,EAAK/8Q,IAAM,gCACX4e,EAAMgrC,KAAO4gO,EACb,MAIF5rQ,EAAMgrC,KAxrCW,GA0rCnB,KA1rCmB,GA2rCjB,GAAa,IAAT1R,EAAc,MAAMs0O,EAExB,GADAr/E,EAAO47E,EAAO7wO,EACVt5B,EAAMxZ,OAAS+nM,EAAM,CAEvB,IADAA,EAAOvuL,EAAMxZ,OAAS+nM,GACXvuL,EAAMsqQ,OACXtqQ,EAAMurQ,KAAM,CACdpN,EAAK/8Q,IAAM,gCACX4e,EAAMgrC,KAAO4gO,EACb,MAkBAr9E,EAAOvuL,EAAMuqQ,OACfh8E,GAAQvuL,EAAMuqQ,MACdhuR,EAAOyjB,EAAMqqQ,MAAQ97E,GAGrBhyM,EAAOyjB,EAAMuqQ,MAAQh8E,EAEnBA,EAAOvuL,EAAM3nB,SAAUk2M,EAAOvuL,EAAM3nB,QACxC2yR,EAAchrQ,EAAM/V,YAGpB+gR,EAAczzQ,EACdhb,EAAOo3B,EAAM3T,EAAMxZ,OACnB+nM,EAAOvuL,EAAM3nB,OAEXk2M,EAAOj1J,IAAQi1J,EAAOj1J,GAC1BA,GAAQi1J,EACRvuL,EAAM3nB,QAAUk2M,EAChB,GACEh3L,EAAOoc,KAASq3P,EAAYzuR,aACnBgyM,GACU,IAAjBvuL,EAAM3nB,SAAgB2nB,EAAMgrC,KA9uCjB,IA+uCf,MACF,KA3uCiB,GA4uCf,GAAa,IAAT1R,EAAc,MAAMs0O,EACxBr2Q,EAAOoc,KAAS3T,EAAM3nB,OACtBihD,IACAt5B,EAAMgrC,KApvCS,GAqvCf,MACF,KAhvCW,GAivCT,GAAIhrC,EAAM2jH,KAAM,CAEd,KAAO8mJ,EAAO,IAAI,CAChB,GAAa,IAAT4B,EAAc,MAAMuB,EACxBvB,IAEA7B,GAAQlyQ,EAAMxb,MAAW2tR,EACzBA,GAAQ,EAcV,GAXAN,GAAQ7wO,EACR6kO,EAAK4F,WAAaoG,EAClBnqQ,EAAMmmD,OAASgkN,EACXA,IACFhM,EAAKmD,MAAQthQ,EAAMgsQ,MAEdhsQ,EAAMhY,MAAQmnQ,EAAMnvP,EAAMgsQ,MAAOz0Q,EAAQ4yQ,EAAMx2P,EAAMw2P,GAAQ/G,EAAQpjQ,EAAMgsQ,MAAOz0Q,EAAQ4yQ,EAAMx2P,EAAMw2P,IAG7GA,EAAO7wO,GAEFt5B,EAAMhY,MAAQwiR,EAAOqB,EAAQrB,MAAWxqQ,EAAMgsQ,MAAO,CACxD7N,EAAK/8Q,IAAM,uBACX4e,EAAMgrC,KAAO4gO,EACb,MAGFpB,EAAO,EACPC,EAAO,EAITzqQ,EAAMgrC,KAhxCI,GAkxCZ,KAlxCY,GAmxCV,GAAIhrC,EAAM2jH,MAAQ3jH,EAAMhY,MAAO,CAE7B,KAAOyiR,EAAO,IAAI,CAChB,GAAa,IAAT4B,EAAc,MAAMuB,EACxBvB,IACA7B,GAAQlyQ,EAAMxb,MAAW2tR,EACzBA,GAAQ,EAGV,GAAID,KAAwB,WAAdxqQ,EAAMmmD,OAAqB,CACvCg4M,EAAK/8Q,IAAM,yBACX4e,EAAMgrC,KAAO4gO,EACb,MAGFpB,EAAO,EACPC,EAAO,EAITzqQ,EAAMgrC,KAtyCE,GAwyCV,KAxyCU,GAyyCRtkD,EAt1CgB,EAu1ChB,MAAMknR,EACR,KAAKhC,EACHllR,GAr1CgB,EAs1ChB,MAAMknR,EACR,KA5yCS,GA6yCP,OAv1CgB,EAw1ClB,KA7yCU,GA+yCV,QACE,OAAO7L,EAsBX,OARA5D,EAAKS,SAAWjrP,EAChBwqP,EAAKC,UAAY9kO,EACjB6kO,EAAKM,QAAU3hR,EACfqhR,EAAKO,SAAW2N,EAChBrsQ,EAAMwqQ,KAAOA,EACbxqQ,EAAMyqQ,KAAOA,GAGTzqQ,EAAMqqQ,OAAUF,IAAShM,EAAKC,WAAap+P,EAAMgrC,KAAO4gO,IACvC5rQ,EAAMgrC,KA50Cd,IApDO,IAg4CuBktH,KAtlC7C,SAAsBimG,EAAM7tI,EAAKh2H,EAAKi0L,GACpC,IAAIw8E,EACA/qQ,EAAQm+P,EAAKn+P,MAqCjB,OAlCqB,OAAjBA,EAAM/V,SACR+V,EAAMqqQ,MAAQ,GAAKrqQ,EAAMisQ,MACzBjsQ,EAAMuqQ,MAAQ,EACdvqQ,EAAMsqQ,MAAQ,EAEdtqQ,EAAM/V,OAAS,IAAI6+L,EAAM61E,KAAK3+P,EAAMqqQ,QAIlC97E,GAAQvuL,EAAMqqQ,OAChBvhF,EAAMq3E,SAASngQ,EAAM/V,OAAOqmI,EAAKh2H,EAAM0F,EAAMqqQ,MAAOrqQ,EAAMqqQ,MAAO,GACjErqQ,EAAMuqQ,MAAQ,EACdvqQ,EAAMsqQ,MAAQtqQ,EAAMqqQ,SAGpBU,EAAO/qQ,EAAMqqQ,MAAQrqQ,EAAMuqQ,OAChBh8E,IACTw8E,EAAOx8E,GAGTzF,EAAMq3E,SAASngQ,EAAM/V,OAAOqmI,EAAKh2H,EAAMi0L,EAAMw8E,EAAM/qQ,EAAMuqQ,QACzDh8E,GAAQw8E,IAGNjiF,EAAMq3E,SAASngQ,EAAM/V,OAAOqmI,EAAKh2H,EAAMi0L,EAAMA,EAAM,GACnDvuL,EAAMuqQ,MAAQh8E,EACdvuL,EAAMsqQ,MAAQtqQ,EAAMqqQ,QAGpBrqQ,EAAMuqQ,OAASQ,EACX/qQ,EAAMuqQ,QAAUvqQ,EAAMqqQ,QAASrqQ,EAAMuqQ,MAAQ,GAC7CvqQ,EAAMsqQ,MAAQtqQ,EAAMqqQ,QAASrqQ,EAAMsqQ,OAASS,KAG7C,EAgjCD8C,CAAa1P,EAAMA,EAAK5mQ,OAAQ4mQ,EAAKS,SAAUuL,EAAOhM,EAAKC,YAC7Dp+P,EAAMgrC,KA10CC,IA1CS,IAw3CpBk/N,GAAO/L,EAAKO,SACZyL,GAAQhM,EAAKC,UACbD,EAAK0H,UAAYqE,EACjB/L,EAAK4F,WAAaoG,EAClBnqQ,EAAMmmD,OAASgkN,EACXnqQ,EAAM2jH,MAAQwmJ,IAChBhM,EAAKmD,MAAQthQ,EAAMgsQ,MAChBhsQ,EAAMhY,MAAQmnQ,EAAMnvP,EAAMgsQ,MAAOz0Q,EAAQ4yQ,EAAMhM,EAAKS,SAAWuL,GAAQ/G,EAAQpjQ,EAAMgsQ,MAAOz0Q,EAAQ4yQ,EAAMhM,EAAKS,SAAWuL,IAE/HhM,EAAK0K,UAAY7oQ,EAAMyqQ,MAAQzqQ,EAAM+wN,KAAO,GAAK,IAC9B/wN,EAAMgrC,OAAS2gO,EAAO,IAAM,IAn2C3B,KAo2CD3rQ,EAAMgrC,MAz2CR,KAy2CyBhrC,EAAMgrC,KAAiB,IAAM,IACzD,IAARk/N,GAAsB,IAATC,GAl5CC,IAk5CcjyG,IA14Cd,IA04CqCxxK,IACvDA,GAp4CkB,GAs4CbA,IAsCTxO,EAAQkoR,WAnCR,SAAoBjC,GAElB,IAAKA,IAASA,EAAKn+P,MACjB,OAAO+hQ,EAGT,IAAI/hQ,EAAQm+P,EAAKn+P,MAKjB,OAJIA,EAAM/V,SACR+V,EAAM/V,OAAS,MAEjBk0Q,EAAKn+P,MAAQ,KA15CO,GAo7CtB9nB,EAAQunR,iBAtBR,SAA0BtB,EAAMyH,GAC9B,IAAI5lQ,EAGJ,OAAKm+P,GAASA,EAAKn+P,MAEM,IAAP,GADlBA,EAAQm+P,EAAKn+P,OACF2jH,MAA0Bo+I,GAGrC/hQ,EAAM4lQ,KAAOA,EACbA,EAAKpsR,MAAO,EAx6CQ,GAk6CeuoR,GAmBrC7pR,EAAQ41R,YAAc,sCAYpB,CAAC,kBAAkB,GAAG,YAAY,GAAG,UAAU,GAAG,YAAY,GAAG,aAAa,KAAKC,GAAG,CAAC,SAASzf,EAAQr2Q,EAAOC,GACjH,aAGA,IAAI4wM,EAAQwlE,EAAQ,mBAWhB0f,EAAQ,CACV,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GACrD,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAG,GAG3DC,EAAO,CACT,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAGtDC,EAAQ,CACV,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IACtD,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAClD,KAAM,MAAO,MAAO,MAAO,EAAG,GAG5BC,EAAO,CACT,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GACpC,GAAI,GAAI,GAAI,GAAI,GAAI,IAGtBl2R,EAAOC,QAAU,SAAuBmlB,EAAMivQ,EAAM8B,EAAY37B,EAAO37C,EAAOu3E,EAAa9B,EAAMjkF,GAE/F,IAYIgmF,EACAx1Q,EACAi0B,EACArF,EACA5qC,EAIAwd,EAMA8yQ,EAAWC,EAASC,EA1BpB7C,EAAOniF,EAAKmiF,KAGZryR,EAAM,EACN80R,EAAM,EACN9sR,EAAM,EAAGE,EAAM,EACfooN,EAAO,EACPrhN,EAAO,EACPonM,EAAO,EACPn1J,EAAO,EACPi1O,EAAO,EACPC,EAAO,EAMPjzR,EAAO,KACPkzR,EAAa,EAGb95M,EAAQ,IAAIm0H,EAAMi4E,MAAM2N,IACxBC,EAAO,IAAI7lF,EAAMi4E,MAAM2N,IACvBpF,EAAQ,KACRsF,EAAc,EAoClB,IAAKx2R,EAAM,EAAGA,GA7FF,GA6FkBA,IAC5Bu8E,EAAMv8E,GAAO,EAEf,IAAK80R,EAAM,EAAGA,EAAMz6B,EAAOy6B,IACzBv4M,EAAM23M,EAAK8B,EAAalB,MAK1B,IADAxkE,EAAO+hE,EACFnqR,EAtGO,GAsGQA,GAAO,GACN,IAAfq0E,EAAMr0E,GADkBA,KAM9B,GAHIooN,EAAOpoN,IACTooN,EAAOpoN,GAEG,IAARA,EAaF,OATAw2M,EAAMu3E,KAAiB,SAMvBv3E,EAAMu3E,KAAiB,SAEvB/lF,EAAKmiF,KAAO,EACL,EAET,IAAKrqR,EAAM,EAAGA,EAAME,GACC,IAAfq0E,EAAMv0E,GADaA,KASzB,IANIsoN,EAAOtoN,IACTsoN,EAAOtoN,GAITk5C,EAAO,EACFlhD,EAAM,EAAGA,GApIF,GAoIkBA,IAG5B,GAFAkhD,IAAS,GACTA,GAAQq7B,EAAMv8E,IACH,EACT,OAAQ,EAGZ,GAAIkhD,EAAO,IAtID,IAsIOj8B,GAA0B,IAAR/c,GACjC,OAAQ,EAKV,IADAquR,EAAK,GAAK,EACLv2R,EAAM,EAAGA,EAjJF,GAiJiBA,IAC3Bu2R,EAAKv2R,EAAM,GAAKu2R,EAAKv2R,GAAOu8E,EAAMv8E,GAIpC,IAAK80R,EAAM,EAAGA,EAAMz6B,EAAOy6B,IACM,IAA3BZ,EAAK8B,EAAalB,KACpBX,EAAKoC,EAAKrC,EAAK8B,EAAalB,OAAWA,GAiE3C,GApNU,IAyLN7vQ,GACA9hB,EAAO+tR,EAAQiD,EACfjyQ,EAAM,IA1LD,IA2LE+C,GACP9hB,EAAOyyR,EACPS,GAAc,IACdnF,EAAQ2E,EACRW,GAAe,IACft0Q,EAAM,MAEN/e,EAAO2yR,EACP5E,EAAQ6E,EACR7zQ,GAAO,GAIXk0Q,EAAO,EACPtB,EAAM,EACN90R,EAAMgI,EACNtD,EAAOuxR,EACPhnR,EAAOqhN,EACPja,EAAO,EACP1hK,GAAO,EAEPrF,GADA6mP,EAAO,GAAK7lE,GACE,EAhNL,IAmNJrrM,GAAiBkxQ,EAxNN,KAMN,IAmNPlxQ,GAAkBkxQ,EAxNJ,IAyNf,OAAO,EAKT,OAAS,CAGPnB,EAAYh1R,EAAMq2M,EACd89E,EAAKW,GAAO5yQ,GACd+yQ,EAAU,EACVC,EAAWf,EAAKW,IAETX,EAAKW,GAAO5yQ,GACnB+yQ,EAAU/D,EAAMsF,EAAcrC,EAAKW,IACnCI,EAAW/xR,EAAKkzR,EAAalC,EAAKW,MAGlCG,EAAU,GACVC,EAAW,GAIbgB,EAAO,GAAMl2R,EAAMq2M,EAEnBruM,EADA0Y,EAAO,GAAKzR,EAEZ,GAEEyvM,EAAMh6M,GAAQ0xR,GAAQ//E,IADtB31L,GAAQw1Q,IAC+BlB,GAAa,GAAOC,GAAW,GAAMC,EAAU,QACtE,IAATx0Q,GAIT,IADAw1Q,EAAO,GAAMl2R,EAAM,EACZo2R,EAAOF,GACZA,IAAS,EAWX,GATa,IAATA,GACFE,GAAQF,EAAO,EACfE,GAAQF,GAERE,EAAO,EAITtB,IACqB,KAAfv4M,EAAMv8E,GAAY,CACtB,GAAIA,IAAQkI,EAAO,MACnBlI,EAAMk0R,EAAK8B,EAAa7B,EAAKW,IAI/B,GAAI90R,EAAMswN,IAAS8lE,EAAO9mP,KAAUqF,EAAK,CAYvC,IAVa,IAAT0hK,IACFA,EAAOia,GAIT5rN,GAAQsD,EAIRk5C,EAAO,IADPjyC,EAAOjP,EAAMq2M,GAENpnM,EAAOonM,EAAOnuM,MACnBg5C,GAAQq7B,EAAMttE,EAAOonM,KACT,IACZpnM,IACAiyC,IAAS,EAKX,GADAi1O,GAAQ,GAAKlnR,EA5RR,IA6RAgW,GAAiBkxQ,EAlSV,KAMN,IA6RHlxQ,GAAkBkxQ,EAlSR,IAmSX,OAAO,EAQTz3E,EAJA/pK,EAAMyhP,EAAO9mP,GAICghL,GAAQ,GAAOrhN,GAAQ,GAAOvK,EAAOuxR,EAAc,GAiBrE,OAVa,IAATG,IAIF13E,EAAMh6M,EAAO0xR,GAAUp2R,EAAMq2M,GAAS,GAAO,IAAM,GAAK,GAK1DnG,EAAKmiF,KAAO/hE,EACL,IAGP,CAAC,kBAAkB,KAAKmmE,GAAG,CAAC,SAASvgB,EAAQr2Q,EAAOC,GACtD,aAEAD,EAAOC,QAAU,CACf,EAAQ,kBACR,EAAQ,aACR,EAAQ,GACR,KAAQ,aACR,KAAQ,eACR,KAAQ,aACR,KAAQ,sBACR,KAAQ,eACR,KAAQ,yBAER,IAAI42R,GAAG,CAAC,SAASxgB,EAAQr2Q,EAAOC,GAClC,aAGA,IAAI4wM,EAAQwlE,EAAQ,mBAqBpB,SAASlmM,EAAK7yC,GAA6B,IAAtB,IAAIn9B,EAAMm9B,EAAIl9B,SAAiBD,GAAO,GAAKm9B,EAAIn9B,GAAO,EAI3E,IA0DI22R,EACF,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAEvDC,EACF,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAEhEC,EACF,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAEnCC,EACF,CAAC,GAAG,GAAG,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAc3CC,EAAgB,IAAI32R,MAAM,KAC9B4vE,EAAK+mN,GAOL,IAAIC,EAAgB,IAAI52R,MAAM62R,IAC9BjnN,EAAKgnN,GAKL,IAAIE,EAAgB,IAAI92R,MAjBJ,KAkBpB4vE,EAAKknN,GAML,IAAIC,EAAgB,IAAI/2R,MAAM6qR,KAC9Bj7M,EAAKmnN,GAGL,IAAIC,EAAgB,IAAIh3R,MA7FJ,IA8FpB4vE,EAAKonN,GAGL,IAAIC,EAAgB,IAAIj3R,MAxFJ,IAyFpB4vE,EAAKqnN,GAIL,IAaIC,EACAC,EACAC,EAfAC,EAAiB,SAAUC,EAAaC,EAAYC,EAAYC,EAAO7mF,GAEzExvM,KAAKk2R,YAAeA,EACpBl2R,KAAKm2R,WAAeA,EACpBn2R,KAAKo2R,WAAeA,EACpBp2R,KAAKq2R,MAAeA,EACpBr2R,KAAKwvM,WAAeA,EAGpBxvM,KAAKs2R,UAAeJ,GAAeA,EAAYz3R,QAS7C83R,EAAW,SAASC,EAAUC,GAChCz2R,KAAKw2R,SAAWA,EAChBx2R,KAAK02R,SAAW,EAChB12R,KAAKy2R,UAAYA,GAKnB,SAASE,EAAOxF,GACd,OAAOA,EAAO,IAAMuE,EAAWvE,GAAQuE,EAAW,KAAOvE,IAAS,IAQpE,SAASyF,EAAWvsR,EAAGwmD,GAGrBxmD,EAAE4/Q,YAAY5/Q,EAAE2/Q,WAAmB,IAAN,EAC7B3/Q,EAAE4/Q,YAAY5/Q,EAAE2/Q,WAAcn5N,IAAM,EAAK,IAQ3C,SAASgmO,EAAUxsR,EAAG3K,EAAOjB,GACvB4L,EAAE0kR,SAjIY,GAiIWtwR,GAC3B4L,EAAEykR,QAAWpvR,GAAS2K,EAAE0kR,SAAY,MACpC6H,EAAUvsR,EAAGA,EAAEykR,QACfzkR,EAAEykR,OAASpvR,GApIK,GAoIgB2K,EAAE0kR,SAClC1kR,EAAE0kR,UAAYtwR,EArIE,KAuIhB4L,EAAEykR,QAAWpvR,GAAS2K,EAAE0kR,SAAY,MACpC1kR,EAAE0kR,UAAYtwR,GAKlB,SAASq4R,EAAUzsR,EAAG8C,EAAG4pR,GACvBF,EAAUxsR,EAAG0sR,EAAO,EAAF5pR,GAAe4pR,EAAO,EAAF5pR,EAAM,IAS9C,SAAS6pR,EAAWz+B,EAAM/5P,GACxB,IAAI4pB,EAAM,EACV,GACEA,GAAc,EAAPmwO,EACPA,KAAU,EACVnwO,IAAQ,UACC5pB,EAAM,GACjB,OAAO4pB,IAAQ,EAgIjB,SAAS6uQ,EAAUF,EAAML,EAAUrI,GAKjC,IAEIwC,EACA1sR,EAHA+yR,EAAY,IAAIt4R,MAAM0vR,IACtB/1B,EAAO,EAOX,IAAKs4B,EAAO,EAAGA,GA9SG,GA8SeA,IAC/BqG,EAAUrG,GAAQt4B,EAAQA,EAAO81B,EAASwC,EAAK,IAAO,EASxD,IAAK1sR,EAAI,EAAIA,GAAKuyR,EAAUvyR,IAAK,CAC/B,IAAI3F,EAAMu4R,EAAO,EAAF5yR,EAAM,GACT,IAAR3F,IAEJu4R,EAAO,EAAF5yR,GAAgB6yR,EAAWE,EAAU14R,KAAQA,KAmHtD,SAAS24R,EAAW9sR,GAClB,IAAIlG,EAGJ,IAAKA,EAAI,EAAGA,EA/bMizR,IA+bQjzR,IAAOkG,EAAEyjR,UAAY,EAAF3pR,GAAgB,EAC7D,IAAKA,EAAI,EAAGA,EA7bM,GA6bQA,IAAOkG,EAAE2jR,UAAY,EAAF7pR,GAAgB,EAC7D,IAAKA,EAAI,EAAGA,EA3bM,GA2bQA,IAAOkG,EAAE4jR,QAAU,EAAF9pR,GAAgB,EAE3DkG,EAAEyjR,UAAUuJ,KAAwB,EACpChtR,EAAEukR,QAAUvkR,EAAEwkR,WAAa,EAC3BxkR,EAAEuiR,SAAWviR,EAAEigQ,QAAU,EAO3B,SAASgtB,EAAUjtR,GAEbA,EAAE0kR,SAAW,EACf6H,EAAUvsR,EAAGA,EAAEykR,QACNzkR,EAAE0kR,SAAW,IAEtB1kR,EAAE4/Q,YAAY5/Q,EAAE2/Q,WAAa3/Q,EAAEykR,QAEjCzkR,EAAEykR,OAAS,EACXzkR,EAAE0kR,SAAW,EA8Bf,SAASjsC,EAAQi0C,EAAM5yR,EAAGgyB,EAAGyS,GAC3B,IAAI2uP,EAAQ,EAAFpzR,EACNqzR,EAAQ,EAAFrhQ,EACV,OAAQ4gQ,EAAKQ,GAAgBR,EAAKS,IAC1BT,EAAKQ,KAAkBR,EAAKS,IAAiB5uP,EAAMzkC,IAAMykC,EAAMzS,GASzE,SAASshQ,EAAWptR,EAAG0sR,EAAMxyQ,GAO3B,IAFA,IAAItE,EAAI5V,EAAE4+O,KAAK1kO,GACXzZ,EAAIyZ,GAAK,EACNzZ,GAAKT,EAAEkkR,WAERzjR,EAAIT,EAAEkkR,UACRzrC,EAAQi0C,EAAM1sR,EAAE4+O,KAAKn+O,EAAE,GAAIT,EAAE4+O,KAAKn+O,GAAIT,EAAEu+B,QACxC99B,KAGEg4O,EAAQi0C,EAAM92Q,EAAG5V,EAAE4+O,KAAKn+O,GAAIT,EAAEu+B,SAGlCv+B,EAAE4+O,KAAK1kO,GAAKla,EAAE4+O,KAAKn+O,GACnByZ,EAAIzZ,EAGJA,IAAM,EAERT,EAAE4+O,KAAK1kO,GAAKtE,EAUd,SAASy3Q,EAAertR,EAAGstR,EAAOC,GAKhC,IAAIzG,EACA0G,EAEAt/B,EACAm3B,EAFAoI,EAAK,EAIT,GAAmB,IAAfztR,EAAEuiR,SACJ,GACEuE,EAAQ9mR,EAAE4/Q,YAAY5/Q,EAAEskR,MAAW,EAAHmJ,IAAS,EAAMztR,EAAE4/Q,YAAY5/Q,EAAEskR,MAAW,EAAHmJ,EAAO,GAC9ED,EAAKxtR,EAAE4/Q,YAAY5/Q,EAAEokR,MAAQqJ,GAC7BA,IAEa,IAAT3G,EACF2F,EAAUzsR,EAAGwtR,EAAIF,IAKjBb,EAAUzsR,GADVkuP,EAAOo9B,EAAakC,IA1jBR,IA2jBe,EAAGF,GAEhB,KADdjI,EAAQyF,EAAY58B,KAGlBs+B,EAAUxsR,EADVwtR,GAAMjC,EAAYr9B,GACDm3B,GAMnBoH,EAAUzsR,EAHVkuP,EAAOo+B,IADPxF,GAImByG,GAEL,KADdlI,EAAQ0F,EAAY78B,KAGlBs+B,EAAUxsR,EADV8mR,GAAQ0E,EAAUt9B,GACCm3B,UAQhBoI,EAAKztR,EAAEuiR,UAGlBkK,EAAUzsR,EAvjBM,IAujBQstR,GAY1B,SAASI,EAAW1tR,EAAGzI,GAIrB,IAIIuC,EAAGgyB,EAEHnI,EANA+oQ,EAAWn1R,EAAK40R,SAChBwB,EAAWp2R,EAAK60R,UAAUP,YAC1BI,EAAY10R,EAAK60R,UAAUH,UAC3BD,EAAWz0R,EAAK60R,UAAUJ,MAE1BK,GAAY,EAUhB,IAHArsR,EAAEkkR,SAAW,EACblkR,EAAEmkR,SArmBgB,IAumBbrqR,EAAI,EAAGA,EAAIkyR,EAAOlyR,IACQ,IAAzB4yR,EAAS,EAAJ5yR,IACPkG,EAAE4+O,OAAO5+O,EAAEkkR,UAAYmI,EAAWvyR,EAClCkG,EAAEu+B,MAAMzkC,GAAK,GAGb4yR,EAAO,EAAF5yR,EAAM,GAAa,EAS5B,KAAOkG,EAAEkkR,SAAW,GAElBwI,EAAY,GADZ/oQ,EAAO3jB,EAAE4+O,OAAO5+O,EAAEkkR,UAAamI,EAAW,IAAMA,EAAW,IACjC,EAC1BrsR,EAAEu+B,MAAM5a,GAAQ,EAChB3jB,EAAEukR,UAEE0H,IACFjsR,EAAEwkR,YAAcmJ,EAAW,EAALhqQ,EAAS,IASnC,IALApsB,EAAK80R,SAAWA,EAKXvyR,EAAKkG,EAAEkkR,UAAY,EAAcpqR,GAAK,EAAGA,IAAOszR,EAAWptR,EAAG0sR,EAAM5yR,GAKzE6pB,EAAOqoQ,EACP,GAGElyR,EAAIkG,EAAE4+O,KAAK,GACX5+O,EAAE4+O,KAAK,GAAiB5+O,EAAE4+O,KAAK5+O,EAAEkkR,YACjCkJ,EAAWptR,EAAG0sR,EAAM,GAGpB5gQ,EAAI9rB,EAAE4+O,KAAK,GAEX5+O,EAAE4+O,OAAO5+O,EAAEmkR,UAAYrqR,EACvBkG,EAAE4+O,OAAO5+O,EAAEmkR,UAAYr4P,EAGvB4gQ,EAAY,EAAP/oQ,GAAqB+oQ,EAAS,EAAJ5yR,GAAkB4yR,EAAS,EAAJ5gQ,GACtD9rB,EAAEu+B,MAAM5a,IAAS3jB,EAAEu+B,MAAMzkC,IAAMkG,EAAEu+B,MAAMzS,GAAK9rB,EAAEu+B,MAAMzkC,GAAKkG,EAAEu+B,MAAMzS,IAAM,EACvE4gQ,EAAO,EAAF5yR,EAAM,GAAa4yR,EAAO,EAAF5gQ,EAAM,GAAanI,EAGhD3jB,EAAE4+O,KAAK,GAAiBj7N,IACxBypQ,EAAWptR,EAAG0sR,EAAM,SAEb1sR,EAAEkkR,UAAY,GAEvBlkR,EAAE4+O,OAAO5+O,EAAEmkR,UAAYnkR,EAAE4+O,KAAK,GAjehC,SAAoB5+O,EAAGzI,GAIrB,IAOImhD,EACA5+C,EAAGgyB,EACH06P,EACAoH,EACA5yR,EAXA0xR,EAAkBn1R,EAAK40R,SACvBE,EAAkB90R,EAAK80R,SACvBsB,EAAkBp2R,EAAK60R,UAAUP,YACjCI,EAAkB10R,EAAK60R,UAAUH,UACjC5G,EAAkB9tR,EAAK60R,UAAUN,WACjCx0R,EAAkBC,EAAK60R,UAAUL,WACjC5mF,EAAkB5tM,EAAK60R,UAAUjnF,WAMjCmmD,EAAW,EAEf,IAAKk7B,EAAO,EAAGA,GAlNG,GAkNeA,IAC/BxmR,EAAEgkR,SAASwC,GAAQ,EAQrB,IAFAkG,EAAwB,EAAnB1sR,EAAE4+O,KAAK5+O,EAAEmkR,UAAc,GAAa,EAEpCzrO,EAAI14C,EAAEmkR,SAAS,EAAGzrO,EA9NL,IA8NoBA,KAEpC8tO,EAAOkG,EAA4B,EAAvBA,EAAO,GADnB5yR,EAAIkG,EAAE4+O,KAAKlmM,IACW,GAAiB,GAAa,GACzCysJ,IACTqhF,EAAOrhF,EACPmmD,KAEFohC,EAAO,EAAF5yR,EAAM,GAAa0sR,EAGpB1sR,EAAIuyR,IAERrsR,EAAEgkR,SAASwC,KACXoH,EAAQ,EACJ9zR,GAAKxC,IACPs2R,EAAQvI,EAAMvrR,EAAExC,IAElB0D,EAAI0xR,EAAS,EAAJ5yR,GACTkG,EAAEukR,SAAWvpR,GAAKwrR,EAAOoH,GACrB3B,IACFjsR,EAAEwkR,YAAcxpR,GAAK2yR,EAAQ,EAAF7zR,EAAM,GAAa8zR,KAGlD,GAAiB,IAAbtiC,EAAJ,CAMA,EAAG,CAED,IADAk7B,EAAOrhF,EAAW,EACU,IAArBnlM,EAAEgkR,SAASwC,IAAeA,IACjCxmR,EAAEgkR,SAASwC,KACXxmR,EAAEgkR,SAASwC,EAAK,IAAM,EACtBxmR,EAAEgkR,SAAS7+E,KAIXmmD,GAAY,QACLA,EAAW,GAOpB,IAAKk7B,EAAOrhF,EAAqB,IAATqhF,EAAYA,IAElC,IADA1sR,EAAIkG,EAAEgkR,SAASwC,GACF,IAAN1sR,IACLgyB,EAAI9rB,EAAE4+O,OAAOlmM,IACL2zO,IACJK,EAAO,EAAF5gQ,EAAM,KAAe06P,IAE5BxmR,EAAEukR,UAAYiC,EAAOkG,EAAO,EAAF5gQ,EAAM,IAAY4gQ,EAAO,EAAF5gQ,GACjD4gQ,EAAO,EAAF5gQ,EAAM,GAAa06P,GAE1B1sR,MAmZJ+zR,CAAW7tR,EAAGzI,GAGdq1R,EAAUF,EAAML,EAAUrsR,EAAEgkR,UAQ9B,SAAS8J,EAAU9tR,EAAG0sR,EAAML,GAK1B,IAAIvyR,EAEAi0R,EADAC,GAAW,EAGXC,EAAUvB,EAAK,GAEfh8M,EAAQ,EACRw9M,EAAY,EACZC,EAAY,EAQhB,IANgB,IAAZF,IACFC,EAAY,IACZC,EAAY,GAEdzB,EAAkB,GAAZL,EAAS,GAAO,GAAa,MAE9BvyR,EAAI,EAAGA,GAAKuyR,EAAUvyR,IACzBi0R,EAASE,EACTA,EAAUvB,EAAW,GAAL5yR,EAAE,GAAO,KAEnB42E,EAAQw9M,GAAaH,IAAWE,IAG3Bv9M,EAAQy9M,EACjBnuR,EAAE4jR,QAAiB,EAATmK,IAAwBr9M,EAEd,IAAXq9M,GAELA,IAAWC,GAAWhuR,EAAE4jR,QAAiB,EAATmK,KACpC/tR,EAAE4jR,QAAQwK,OAED19M,GAAS,GAClB1wE,EAAE4jR,QAAQyK,MAGVruR,EAAE4jR,QAAQ0K,MAGZ59M,EAAQ,EACRs9M,EAAUD,EAEM,IAAZE,GACFC,EAAY,IACZC,EAAY,GAEHJ,IAAWE,GACpBC,EAAY,EACZC,EAAY,IAGZD,EAAY,EACZC,EAAY,IAUlB,SAASI,EAAUvuR,EAAG0sR,EAAML,GAK1B,IAAIvyR,EAEAi0R,EADAC,GAAW,EAGXC,EAAUvB,EAAK,GAEfh8M,EAAQ,EACRw9M,EAAY,EACZC,EAAY,EAQhB,IALgB,IAAZF,IACFC,EAAY,IACZC,EAAY,GAGTr0R,EAAI,EAAGA,GAAKuyR,EAAUvyR,IAIzB,GAHAi0R,EAASE,EACTA,EAAUvB,EAAW,GAAL5yR,EAAE,GAAO,OAEnB42E,EAAQw9M,GAAaH,IAAWE,GAAtC,CAGO,GAAIv9M,EAAQy9M,EACjB,GAAK1B,EAAUzsR,EAAG+tR,EAAQ/tR,EAAE4jR,eAA+B,KAAVlzM,QAE7B,IAAXq9M,GACLA,IAAWC,IACbvB,EAAUzsR,EAAG+tR,EAAQ/tR,EAAE4jR,SACvBlzM,KAGF+7M,EAAUzsR,EAvwBE,GAuwBUA,EAAE4jR,SACxB4I,EAAUxsR,EAAG0wE,EAAM,EAAG,IAEbA,GAAS,IAClB+7M,EAAUzsR,EAxwBE,GAwwBYA,EAAE4jR,SAC1B4I,EAAUxsR,EAAG0wE,EAAM,EAAG,KAGtB+7M,EAAUzsR,EAzwBE,GAywBcA,EAAE4jR,SAC5B4I,EAAUxsR,EAAG0wE,EAAM,GAAI,IAGzBA,EAAQ,EACRs9M,EAAUD,EACM,IAAZE,GACFC,EAAY,IACZC,EAAY,GAEHJ,IAAWE,GACpBC,EAAY,EACZC,EAAY,IAGZD,EAAY,EACZC,EAAY,IAuHlB,IAAIK,GAAmB,EA4BvB,SAAS7I,EAAiB3lR,EAAGsxB,EAAKm9P,EAAY3hD,GAM5C0/C,EAAUxsR,EAAG,GAAmB8sO,EAAO,EAAI,GAAI,GAzfjD,SAAoB9sO,EAAGsxB,EAAKn9B,EAAKs9M,GAM/Bw7E,EAAUjtR,GAGRusR,EAAUvsR,EAAG7L,GACbo4R,EAAUvsR,GAAI7L,GAKhB0wM,EAAMq3E,SAASl8Q,EAAE4/Q,YAAa5/Q,EAAEgG,OAAQsrB,EAAKn9B,EAAK6L,EAAE2/Q,SACpD3/Q,EAAE2/Q,SAAWxrR,EA0ebu6R,CAAW1uR,EAAGsxB,EAAKm9P,GAoKrBx6R,EAAQ4wR,SAlMR,SAAkB7kR,GAGXwuR,IAxmBP,WACE,IAAI10R,EACA0sR,EACApyR,EACA85P,EACA44B,EACA9C,EAAW,IAAIzvR,MAAM0vR,IAiBzB,IADA7vR,EAAS,EACJ85P,EAAO,EAAGA,EAAOygC,GAAgBzgC,IAEpC,IADAq9B,EAAYr9B,GAAQ95P,EACf0F,EAAI,EAAGA,EAAK,GAAGgxR,EAAY58B,GAAQp0P,IACtCwxR,EAAal3R,KAAY85P,EAY7B,IAJAo9B,EAAal3R,EAAO,GAAK85P,EAGzB44B,EAAO,EACF54B,EAAO,EAAIA,EAAO,GAAIA,IAEzB,IADAs9B,EAAUt9B,GAAQ44B,EACbhtR,EAAI,EAAGA,EAAK,GAAGixR,EAAY78B,GAAQp0P,IACtCuxR,EAAWvE,KAAU54B,EAKzB,IADA44B,IAAS,EACD54B,EA9XU,GA8XMA,IAEtB,IADAs9B,EAAUt9B,GAAQ44B,GAAQ,EACrBhtR,EAAI,EAAGA,EAAK,GAAIixR,EAAY78B,GAAM,EAAKp0P,IAC1CuxR,EAAW,IAAMvE,KAAU54B,EAM/B,IAAKs4B,EAAO,EAAGA,GA9XG,GA8XeA,IAC/BxC,EAASwC,GAAQ,EAInB,IADA1sR,EAAI,EACGA,GAAK,KACVoxR,EAAe,EAAFpxR,EAAM,GAAa,EAChCA,IACAkqR,EAAS,KAEX,KAAOlqR,GAAK,KACVoxR,EAAe,EAAFpxR,EAAM,GAAa,EAChCA,IACAkqR,EAAS,KAEX,KAAOlqR,GAAK,KACVoxR,EAAe,EAAFpxR,EAAM,GAAa,EAChCA,IACAkqR,EAAS,KAEX,KAAOlqR,GAAK,KACVoxR,EAAe,EAAFpxR,EAAM,GAAa,EAChCA,IACAkqR,EAAS,KASX,IAHA4I,EAAU1B,EAAc0D,IAAW5K,GAG9BlqR,EAAI,EAAGA,EAvaM,GAuaOA,IACvBqxR,EAAe,EAAFrxR,EAAM,GAAa,EAChCqxR,EAAe,EAAFrxR,GAAgB6yR,EAAW7yR,EAAG,GAI7C2xR,EAAgB,IAAIG,EAAeV,EAAcJ,EAAaiC,IAhb5CA,IAYA,IAqalBrB,EAAgB,IAAIE,EAAeT,EAAcJ,EAAa,EA9a5C,GASA,IAsalBY,EAAgB,IAAIC,EAAe,IAAIr3R,MAAM,GAAIy2R,EAAc,EA5a7C,GAiBF,GAq6Bd6D,GACAL,GAAmB,GAGrBxuR,EAAE6jR,OAAU,IAAIqI,EAASlsR,EAAEyjR,UAAWgI,GACtCzrR,EAAE8jR,OAAU,IAAIoI,EAASlsR,EAAE2jR,UAAW+H,GACtC1rR,EAAE+jR,QAAU,IAAImI,EAASlsR,EAAE4jR,QAAS+H,GAEpC3rR,EAAEykR,OAAS,EACXzkR,EAAE0kR,SAAW,EAGboI,EAAW9sR,IAmLb/L,EAAQ0xR,iBAAmBA,EAC3B1xR,EAAQ+rR,gBAnJR,SAAyBhgR,EAAGsxB,EAAKm9P,EAAY3hD,GAM3C,IAAIgiD,EAAUC,EACVC,EAAc,EAGdhvR,EAAE0hF,MAAQ,GAhhCY,IAmhCpB1hF,EAAEk6Q,KAAK0K,YACT5kR,EAAEk6Q,KAAK0K,UArGb,SAA0B5kR,GAKxB,IACIlG,EADAm1R,EAAa,WAIjB,IAAKn1R,EAAI,EAAGA,GAAK,GAAIA,IAAKm1R,KAAgB,EACxC,GAAkB,EAAbA,GAAkD,IAA9BjvR,EAAEyjR,UAAY,EAAF3pR,GACnC,OA77BsB,EAk8B1B,GAAoC,IAAhCkG,EAAEyjR,UAAU,KAA0D,IAAjCzjR,EAAEyjR,UAAU,KAChB,IAAjCzjR,EAAEyjR,UAAU,IACd,OAn8BwB,EAq8B1B,IAAK3pR,EAAI,GAAIA,EAz6BK,IAy6BSA,IACzB,GAAoC,IAAhCkG,EAAEyjR,UAAc,EAAJ3pR,GACd,OAv8BsB,EA88B1B,OA/8B0B,EAuhCHo1R,CAAiBlvR,IAItC0tR,EAAW1tR,EAAGA,EAAE6jR,QAIhB6J,EAAW1tR,EAAGA,EAAE8jR,QAUhBkL,EAnMJ,SAAuBhvR,GACrB,IAAIgvR,EAgBJ,IAbAlB,EAAU9tR,EAAGA,EAAEyjR,UAAWzjR,EAAE6jR,OAAOwI,UACnCyB,EAAU9tR,EAAGA,EAAE2jR,UAAW3jR,EAAE8jR,OAAOuI,UAGnCqB,EAAW1tR,EAAGA,EAAE+jR,SASXiL,EAAcG,GAAYH,GAAe,GACW,IAAnDhvR,EAAE4jR,QAA8B,EAAtBqH,EAAS+D,GAAiB,GADOA,KAUjD,OAJAhvR,EAAEukR,SAAW,GAAGyK,EAAY,GAAK,EAAE,EAAE,EAI9BA,EAwKSI,CAAcpvR,GAG5B8uR,EAAY9uR,EAAEukR,QAAQ,EAAE,IAAO,GAC/BwK,EAAe/uR,EAAEwkR,WAAW,EAAE,IAAO,IAMlBsK,IAAYA,EAAWC,IAI1CD,EAAWC,EAAcN,EAAa,EAGnCA,EAAW,GAAKK,IAAuB,IAATx9P,EASjCq0P,EAAiB3lR,EAAGsxB,EAAKm9P,EAAY3hD,GAvkCb,IAykCf9sO,EAAE85Q,UAAwBiV,IAAgBD,GAEnDtC,EAAUxsR,EAAG,GAAqB8sO,EAAO,EAAI,GAAI,GACjDugD,EAAertR,EAAGkrR,EAAcC,KAGhCqB,EAAUxsR,EAAG,GAAkB8sO,EAAO,EAAI,GAAI,GAjMlD,SAAwB9sO,EAAGqvR,EAAQC,EAAQC,GAIzC,IAAIzvR,EASJ,IAHA0sR,EAAUxsR,EAAGqvR,EAAO,IAAK,GACzB7C,EAAUxsR,EAAGsvR,EAAO,EAAK,GACzB9C,EAAUxsR,EAAGuvR,EAAQ,EAAI,GACpBzvR,EAAO,EAAGA,EAAOyvR,EAASzvR,IAE7B0sR,EAAUxsR,EAAGA,EAAE4jR,QAAuB,EAAfqH,EAASnrR,GAAU,GAAY,GAIxDyuR,EAAUvuR,EAAGA,EAAEyjR,UAAW4L,EAAO,GAGjCd,EAAUvuR,EAAGA,EAAE2jR,UAAW2L,EAAO,GA4K/BE,CAAexvR,EAAGA,EAAE6jR,OAAOwI,SAAS,EAAGrsR,EAAE8jR,OAAOuI,SAAS,EAAG2C,EAAY,GACxE3B,EAAertR,EAAGA,EAAEyjR,UAAWzjR,EAAE2jR,YAMnCmJ,EAAW9sR,GAEP8sO,GACFmgD,EAAUjtR,IAuEd/L,EAAQmuR,UA7DR,SAAmBpiR,EAAG8mR,EAAM0G,GAmD1B,OA5CAxtR,EAAE4/Q,YAAY5/Q,EAAEskR,MAAqB,EAAbtkR,EAAEuiR,UAAqBuE,IAAS,EAAK,IAC7D9mR,EAAE4/Q,YAAY5/Q,EAAEskR,MAAqB,EAAbtkR,EAAEuiR,SAAe,GAAY,IAAPuE,EAE9C9mR,EAAE4/Q,YAAY5/Q,EAAEokR,MAAQpkR,EAAEuiR,UAAiB,IAALiL,EACtCxtR,EAAEuiR,WAEW,IAATuE,EAEF9mR,EAAEyjR,UAAa,EAAH+J,MAEZxtR,EAAEigQ,UAEF6mB,IAKA9mR,EAAEyjR,UAA0C,GAA/B6H,EAAakC,GA3lCV,IA2lCuB,MACvCxtR,EAAE2jR,UAAyB,EAAf2I,EAAOxF,OA0Bb9mR,EAAEuiR,WAAaviR,EAAEqkR,YAAY,GAWvCpwR,EAAQyxR,UAhKR,SAAmB1lR,GACjBwsR,EAAUxsR,EAAGyvR,EAAiB,GAC9BhD,EAAUzsR,EAt8BM,IAs8BQkrR,GA5yB1B,SAAkBlrR,GACG,KAAfA,EAAE0kR,UACJ6H,EAAUvsR,EAAGA,EAAEykR,QACfzkR,EAAEykR,OAAS,EACXzkR,EAAE0kR,SAAW,GAEJ1kR,EAAE0kR,UAAY,IACvB1kR,EAAE4/Q,YAAY5/Q,EAAE2/Q,WAAwB,IAAX3/Q,EAAEykR,OAC/BzkR,EAAEykR,SAAW,EACbzkR,EAAE0kR,UAAY,GAoyBhBgL,CAAS1vR,KA8JT,CAAC,kBAAkB,KAAK2vR,GAAG,CAAC,SAAStlB,EAAQr2Q,EAAOC,GACtD,aA4BAD,EAAOC,QAzBP,WAEE0B,KAAK0e,MAAQ,KACb1e,KAAK6kR,QAAU,EAEf7kR,KAAK8kR,SAAW,EAEhB9kR,KAAKisR,SAAW,EAEhBjsR,KAAK2d,OAAS,KACd3d,KAAKglR,SAAW,EAEhBhlR,KAAKwkR,UAAY,EAEjBxkR,KAAKmqR,UAAY,EAEjBnqR,KAAKwH,IAAM,GAEXxH,KAAKomB,MAAQ,KAEbpmB,KAAKivR,UAAY,EAEjBjvR,KAAK0nR,MAAQ,IAIb,KAAK,GAAG,CAAC,GA5wRmC,CA6wR7C,O,gBCjyRD,SAAuBngE,GACvBA,EAAK9zK,QAAU,SACf,IAAIwmP,EAAmB,KAAMC,EAAe,KAGrB,oBAAZjpB,eACY,IAAX,EAAA3gQ,EAAwB,EAAAA,EAAO2gQ,QAAU,EAAQ,MACjC,oBAAX5gQ,SAAwBA,OAAO4gQ,QAAU,EAAQ,QAKlE,IADA,IAAIkpB,EAAa,CAAE,IAAK,IAAK,IAAK,IAAK,KAC/Bz7R,EAAI,EAAGA,GAAK,IAAKA,EAAGy7R,EAAWh3R,KAAK,KAAOzE,GAEnD,IAAI07R,EAAQ,CACZC,EAAM,KACN5lB,EAAK,MACLv5B,EAAK,MACLo/C,GAAK,IACLC,IAAO,IACPC,IAAO,IACPC,IAAM,KACNC,IAAO,IACPC,IAAO,IACPC,IAAM,KACNC,IAAM,KACNC,IAAM,KACNC,IAAM,KACNC,IAAM,KACNC,IAAM,KACNC,IAAM,KACNC,IAAO,IACPC,IAAM,KACNC,IAAM,KACNC,GAAM,MAGFC,EAAW,SAASlpB,IAAoC,GAA3B8nB,EAAW9oQ,QAAQghP,KAAmB6nB,EAAeE,EAAM,GAAK/nB,IAG7FmpB,EAAS,SAASnpB,GAAM4nB,EAAmB5nB,EAAIkpB,EAASlpB,IAC5D,SAASopB,IAAaD,EAAO,MAHLD,EAAS,MAKjC,SAASG,EAAW/2R,GAAoB,IAAZ,IAAI3C,EAAI,GAAYtD,EAAI,EAAGF,EAAMmG,EAAKlG,OAAQC,EAAIF,IAAOE,EAAGsD,EAAEtD,GAAKiG,EAAKg4B,WAAWj+B,GAAI,OAAOsD,EAa1H,IAAI25R,EAAQ,SAASh3R,GACpB,IAAImmE,EAAKnmE,EAAKg4B,WAAW,GAAIouC,EAAKpmE,EAAKg4B,WAAW,GAClD,OAAS,KAANmuC,GAAoB,KAANC,EAblB,SAAqBpmE,GAEpB,IADA,IAAI3C,EAAI,GACAtD,EAAI,EAAGA,EAAKiG,EAAKlG,QAAQ,IAAMC,EAAGsD,EAAEtD,GAAKwN,OAAO0vB,aAAaj3B,EAAKg4B,WAAW,EAAEj+B,IAAMiG,EAAKg4B,WAAW,EAAEj+B,EAAE,IAAI,IACrH,OAAOsD,EAAEgO,KAAK,IAUsB4rR,CAAYj3R,EAAKN,MAAM,IAClD,KAANymE,GAAoB,KAANC,EATlB,SAAqBpmE,GAEpB,IADA,IAAI3C,EAAI,GACAtD,EAAI,EAAGA,EAAKiG,EAAKlG,QAAQ,IAAMC,EAAGsD,EAAEtD,GAAKwN,OAAO0vB,aAAaj3B,EAAKg4B,WAAW,EAAEj+B,EAAE,IAAMiG,EAAKg4B,WAAW,EAAEj+B,IAAI,IACrH,OAAOsD,EAAEgO,KAAK,IAMsB6rR,CAAYl3R,EAAKN,MAAM,IAClD,OAANymE,EAAqBnmE,EAAKN,MAAM,GAC5BM,GAGJm3R,EAAW,SAAcr1R,GAAK,OAAOyF,OAAO0vB,aAAan1B,IACzDs1R,EAAW,SAAct1R,GAAK,OAAOyF,OAAO0vB,aAAan1B,IACvC,oBAAZwqQ,UACTuqB,EAAS,SAASnpB,GAAM4nB,EAAmB5nB,EAAIkpB,EAASlpB,IACxDspB,EAAQ,SAASh3R,GAChB,OAA0B,MAAvBA,EAAKg4B,WAAW,IAAsC,MAAvBh4B,EAAKg4B,WAAW,GAAsBs0O,QAAQ/hE,MAAMlyL,OAAO,KAAM0+Q,EAAW/2R,EAAKN,MAAM,KAClHM,GAERm3R,EAAW,SAAcr1R,GACxB,OAAwB,OAArBwzR,EAAkC/tR,OAAO0vB,aAAan1B,GAClDwqQ,QAAQ/hE,MAAMlyL,OAAOi9Q,EAAkB,CAAG,IAAFxzR,EAAMA,GAAG,IAAI,IAE7Ds1R,EAAW,SAAct1R,GACxB,OAAOwqQ,QAAQ/hE,MAAMlyL,OAAOk9Q,EAAc,CAACzzR,IAAI,KAGjD,IAGK2D,EADD4xR,GACC5xR,EAAM,oEACH,CACN0S,OAAQ,SAAS4B,GAGhB,IAFA,IAAI1c,EAAI,GACJ8oE,EAAG,EAAGC,EAAG,EAAGgpM,EAAG,EAAGkoB,EAAG,EAAGjoB,EAAG,EAAGC,EAAG,EAAGC,EAAG,EACnCx1Q,EAAI,EAAGA,EAAIggB,EAAMjgB,QAExBw9R,GADAnxN,EAAKpsD,EAAMie,WAAWj+B,OACV,EAGZs1Q,GAAY,EAALlpM,IAAW,GADlBC,EAAKrsD,EAAMie,WAAWj+B,OACQ,EAG9Bu1Q,GAAY,GAALlpM,IAAY,GADnBgpM,EAAKr1P,EAAMie,WAAWj+B,OACS,EAC/Bw1Q,EAAW,GAALH,EACFxoQ,MAAMw/D,GAAOkpM,EAAKC,EAAK,GAClB3oQ,MAAMwoQ,KAAOG,EAAK,IAC3BlyQ,GAAKoI,EAAIioI,OAAO4pJ,GAAM7xR,EAAIioI,OAAO2hI,GAAM5pQ,EAAIioI,OAAO4hI,GAAM7pQ,EAAIioI,OAAO6hI,GAEpE,OAAOlyQ,GAERgb,OAAQ,SAAoB0B,GAC3B,IAAI1c,EAAI,GACJ8oE,EAAG,EAAGC,EAAG,EAAGgpM,EAAG,EAASC,EAAG,EAAGC,EAAG,EAAGC,EAAG,EAC3Cx1P,EAAQA,EAAM9O,QAAQ,eAAgB,IACtC,IAAI,IAAIlR,EAAI,EAAGA,EAAIggB,EAAMjgB,QAGxBqsE,EAFK1gE,EAAIinB,QAAQ3S,EAAM2zH,OAAO3zI,OAElB,GADZs1Q,EAAK5pQ,EAAIinB,QAAQ3S,EAAM2zH,OAAO3zI,QACN,EACxBsD,GAAKkK,OAAO0vB,aAAakvC,GAGzBC,GAAY,GAALipM,IAAY,GADnBC,EAAK7pQ,EAAIinB,QAAQ3S,EAAM2zH,OAAO3zI,QACC,EACpB,KAAPu1Q,IAAajyQ,GAAKkK,OAAO0vB,aAAamvC,IAG1CgpM,GAAY,EAALE,IAAW,GADlBC,EAAK9pQ,EAAIinB,QAAQ3S,EAAM2zH,OAAO3zI,OAEnB,KAAPw1Q,IAAalyQ,GAAKkK,OAAO0vB,aAAam4O,IAE3C,OAAO/xQ,KAIN8vQ,EAA6B,oBAAXp9O,QAA6C,oBAAZnkB,cAAuD,IAArBA,QAAQmhB,YAA8BnhB,QAAQmhB,SAAS1D,KAE5I+jP,EAAc,aAElB,GAAqB,oBAAXr9O,OAAwB,CACjC,IAAIs9O,GAAQt9O,OAAO/xB,KACnB,IAAIqvQ,EAAM,IAAMt9O,OAAO/xB,KAAK,MAAO,QAAW,MAAMyzB,GAAK47O,GAAO,EAChED,EAAcC,EAAO,SAASr2O,EAAKs2O,GAAO,OAAO,EAAQ,IAAIv9O,OAAOiH,EAAKs2O,GAAO,IAAIv9O,OAAOiH,IAAUjH,OAAO/xB,KAAKs1F,KAAKvjE,QAElHA,OAAO8kP,QAAO9kP,OAAO8kP,MAAQ,SAASr1Q,GAAK,OAAO,IAAIuwB,OAAOvwB,KAE7DuwB,OAAO4zM,cAAa5zM,OAAO4zM,YAAc,SAASnkO,GAAK,OAAO,IAAIuwB,OAAOvwB,KAG9E,SAAS+3R,EAAY19R,GAEpB,OAAOszQ,EAAUp9O,OAAO8kP,MAAMh7Q,GAAO,IAAII,MAAMJ,GAIhD,SAAS29R,EAAe39R,GAEvB,OAAOszQ,EAAUp9O,OAAO4zM,YAAY9pO,GAAO,IAAII,MAAMJ,GAItD,IAAI49R,EAAM,SAAa/xR,GACtB,OAAGynQ,EAAgBC,EAAY1nQ,EAAG,UAC3BA,EAAEiF,MAAM,IAAIlF,KAAI,SAAS3D,GAAI,OAAyB,IAAlBA,EAAEk2B,WAAW,OAGzD,SAAS0/P,EAAKhyR,GACb,GAA0B,oBAAhBmrB,YAA6B,OAAO4mQ,EAAI/xR,GAElD,IADA,IAAIsxB,EAAM,IAAInG,YAAYnrB,EAAE5L,QAAS69R,EAAO,IAAIpxR,WAAWywB,GAClDj9B,EAAE,EAAGA,GAAG2L,EAAE5L,SAAUC,EAAG49R,EAAK59R,GAAuB,IAAlB2L,EAAEsyB,WAAWj+B,GACvD,OAAOi9B,EAGR,SAAS4gQ,EAAI53R,GACZ,GAAG/F,MAAMC,QAAQ8F,GAAO,OAAOA,EAAKyF,KAAI,SAAS+C,GAAK,OAAOjB,OAAO0vB,aAAazuB,MAAO6C,KAAK,IACjF,IAAZ,IAAIhO,EAAI,GAAYtD,EAAI,EAAGA,EAAIiG,EAAKlG,SAAUC,EAAGsD,EAAEtD,GAAKwN,OAAO0vB,aAAaj3B,EAAKjG,IAAK,OAAOsD,EAAEgO,KAAK,IAQrG,SAASwsR,EAAK73R,GACb,GAAyB,oBAAf6wB,YAA4B,MAAM,IAAI3vB,MAAM,eACtD,GAAGlB,aAAgB6wB,YAAa,OAAOgnQ,EAAK,IAAItxR,WAAWvG,IAE3D,IADD,IAAI3C,EAAI,IAAIpD,MAAM+F,EAAKlG,QACdC,EAAI,EAAGA,EAAIiG,EAAKlG,SAAUC,EAAGsD,EAAEtD,GAAKiG,EAAKjG,GACjD,OAAOsD,EAGR,IAAIy6R,EAAU,SAASC,GAAQ,MAAO,GAAGpyR,OAAOnK,MAAM,GAAIu8R,IAEtDC,EAAO,UAAW9nB,EAAO,mBAGzB+nB,EAAM,GACNC,EAAW,SAAkBD,GAEjC,SAASE,EAAQr2R,GAAiC,IAA5B,IAAIzE,EAAI,GAAItD,EAAI+H,EAAEhI,OAAO,EAASC,GAAG,GAAGsD,GAAKyE,EAAE4rI,OAAO3zI,KAAM,OAAOsD,EACzF,SAASkd,EAAK/R,EAAEwS,GAAiB,IAAZ,IAAI3d,EAAI,GAAUA,EAAEvD,OAASkhB,GAAG3d,GAAGmL,EAAG,OAAOnL,EAClE,SAAS+6R,EAAK98Q,EAAElT,GAAG,IAAI8C,EAAE,GAAGoQ,EAAG,OAAOpQ,EAAEpR,QAAQsO,EAAE8C,EAAEqP,EAAK,IAAInS,EAAE8C,EAAEpR,QAAQoR,EACzE,SAASwjD,EAAKpzC,EAAElT,GAAG,IAAI8C,EAAE,GAAGoQ,EAAE,OAAOpQ,EAAEpR,QAAQsO,EAAE8C,EAAEqP,EAAK,IAAInS,EAAE8C,EAAEpR,QAAQoR,EACxE,SAASmtR,EAAM/8Q,EAAElT,GAAG,IAAI8C,EAAE,GAAGoQ,EAAG,OAAOpQ,EAAEpR,QAAQsO,EAAE8C,EAAEA,EAAEqP,EAAK,IAAInS,EAAE8C,EAAEpR,QALpEm+R,EAAInpP,QAAU,SAQd,IAAIwpP,EAAQ/2R,KAAK0xC,IAAI,EAAE,IACvB,SAASslP,EAAMj9Q,EAAElT,GAAG,OAAGkT,EAAEg9Q,GAAOh9Q,GAAGg9Q,EAHnC,SAAgBh9Q,EAAElT,GAAG,IAAI8C,EAAE,GAAG3J,KAAKsW,MAAMyD,GAAI,OAAOpQ,EAAEpR,QAAQsO,EAAE8C,EAAEqP,EAAK,IAAInS,EAAE8C,EAAEpR,QAAQoR,EAGtCstR,CAAOl9Q,EAAElT,GAF1D,SAAgBkT,EAAElT,GAAG,IAAI8C,EAAE,GAAGoQ,EAAG,OAAOpQ,EAAEpR,QAAQsO,EAAE8C,EAAEqP,EAAK,IAAInS,EAAE8C,EAAEpR,QAAQoR,EAEiButR,CAAtBl3R,KAAKsW,MAAMyD,GAAoBlT,GACrG,SAASswR,EAAUhzR,EAAG3L,GAAiB,OAAZA,EAAIA,GAAK,EAAU2L,EAAE5L,QAAU,EAAIC,GAA8B,MAAR,GAAhB2L,EAAEsyB,WAAWj+B,KAA6C,MAAR,GAAlB2L,EAAEsyB,WAAWj+B,EAAE,KAA6C,MAAR,GAAlB2L,EAAEsyB,WAAWj+B,EAAE,KAA6C,MAAR,GAAlB2L,EAAEsyB,WAAWj+B,EAAE,KAA6C,MAAR,GAAlB2L,EAAEsyB,WAAWj+B,EAAE,KAA6C,KAAR,GAAlB2L,EAAEsyB,WAAWj+B,EAAE,KAA4C,MAAR,GAAlB2L,EAAEsyB,WAAWj+B,EAAE,IAC5R,IAAI4+R,EAAO,CACV,CAAC,MAAO,UACR,CAAC,MAAO,UACR,CAAC,MAAO,WACR,CAAC,MAAO,aACR,CAAC,MAAO,YACR,CAAC,MAAO,UACR,CAAC,MAAO,aAELC,EAAS,CACZ,CAAC,IAAK,MAAO,WACb,CAAC,IAAK,MAAO,YACb,CAAC,IAAK,MAAO,SACb,CAAC,IAAK,MAAO,SACb,CAAC,IAAK,MAAO,OACb,CAAC,IAAK,MAAO,QACb,CAAC,IAAK,MAAO,QACb,CAAC,IAAK,MAAO,UACb,CAAC,IAAK,MAAO,aACb,CAAC,IAAK,MAAO,WACb,CAAC,IAAK,MAAO,YACb,CAAC,IAAK,MAAO,aAEd,SAASC,EAAW3tR,GACnBA,EAAE,GAAK,UACPA,EAAE,GAAK,IACPA,EAAE,GAAK,OACPA,EAAE,GAAK,QACPA,EAAE,GAAK,WACPA,EAAE,GAAK,KACPA,EAAE,IAAK,QACPA,EAAE,IAAK,WACPA,EAAE,IAAK,QACPA,EAAE,IAAK,UACPA,EAAE,IAAK,SACPA,EAAE,IAAK,WACPA,EAAE,IAAK,QACPA,EAAE,IAAK,SACPA,EAAE,IAAK,aACPA,EAAE,IAAK,gBACPA,EAAE,IAAK,OACPA,EAAE,IAAK,UACPA,EAAE,IAAK,cACPA,EAAE,IAAK,iBACPA,EAAE,IAAK,sBACPA,EAAE,IAAK,sBACPA,EAAE,IAAK,2BACPA,EAAE,IAAK,QACPA,EAAE,IAAK,YACPA,EAAE,IAAK,SACPA,EAAE,IAAK,WACPA,EAAE,IAAK,IACPA,EAAE,IAAK,2BAGR,IAAI4tR,EAAY,GAChBD,EAAWC,GAIX,IAAIC,EAAc,GACdC,EAAO,EAGX,IAAIA,EAAO,EAAGA,GAAQ,IAAKA,EAAMD,EAAYC,GAAQ,GAAKA,EAG1D,IAAIA,EAAO,GAAIA,GAAQ,KAAMA,EAAMD,EAAYC,GAAQ,EAGvD,IAAIA,EAAO,GAAIA,GAAQ,KAAMA,EAAMD,EAAYC,GAAQ,GAEvD,IAAIA,EAAO,GAAIA,GAAQ,KAAMA,EAAMD,EAAYC,GAAQ,GAGvD,IAAIA,EAAO,GAAIA,GAAQ,KAAMA,EAAMD,EAAYC,GAAQA,EAAO,GAE9D,IAAIA,EAAO,GAAIA,GAAQ,KAAMA,EAAMD,EAAYC,GAAQA,EAAO,GAE9D,IAAIA,EAAO,GAAIA,GAAQ,KAAMA,EAAMD,EAAYC,GAAQA,EAAO,GAG9D,IAAIA,EAAO,GAAIA,GAAQ,KAAMA,EAAMD,EAAYC,GAAQA,EAAO,GAG9D,IAAIA,EAAO,GAAIA,GAAQ,KAAMA,EAAMD,EAAYC,GAAQA,EAAO,GAG9D,IAAIA,EAAO,GAAIA,GAAQ,KAAMA,EAAMD,EAAYC,GAAQA,EAAO,GAK9D,IAAIC,EAAc,GAmBlB,SAASC,EAAKp3R,EAAG61N,EAAGwhE,GAMnB,IALA,IAAIC,EAAMt3R,EAAI,GAAK,EAAI,EACnB41N,EAAI51N,EAAIs3R,EACRC,EAAM,EAAGC,EAAM,EAAGtsE,EAAI,EACtBusE,EAAM,EAAGC,EAAM,EAAGC,EAAI,EACtBhiE,EAAIl2N,KAAK8H,MAAMquN,GACb8hE,EAAM7hE,IAEX3K,GADAyK,EAAIl2N,KAAK8H,MAAMquN,IACP4hE,EAAMD,EACdI,EAAIhiE,EAAI+hE,EAAMD,IACV7hE,EAAID,EAAK,QACbC,EAAI,GAAKA,EAAID,GACb4hE,EAAMC,EAAKA,EAAMtsE,EACjBusE,EAAMC,EAAKA,EAAMC,EAGlB,GADGA,EAAI9hE,IAAQ6hE,EAAM7hE,GAAK8hE,EAAIF,EAAKvsE,EAAIqsE,IAAcI,EAAID,EAAKxsE,EAAIssE,KAC9DH,EAAO,MAAO,CAAC,EAAGC,EAAMpsE,EAAGysE,GAC/B,IAAIlvN,EAAIhpE,KAAK8H,MAAM+vR,EAAMpsE,EAAEysE,GAC3B,MAAO,CAAClvN,EAAG6uN,EAAIpsE,EAAIziJ,EAAEkvN,EAAGA,GAEzB,SAASC,EAAgBp+Q,EAAEyuL,EAAK4vF,GAC/B,GAAGr+Q,EAAI,SAAWA,EAAI,EAAG,OAAO,KAChC,IAAIksM,EAAU,EAAFlsM,EAAMvC,EAAOxX,KAAK8H,MAAM,OAASiS,EAAIksM,IAAQoyE,EAAI,EACzDC,EAAK,GACL10Q,EAAI,CAACwyM,EAAEnQ,EAAMsyE,EAAE/gR,EAAMu5C,EAAE,OAAOh3C,EAAEksM,GAAMzuM,EAAK8K,EAAE,EAAE2N,EAAE,EAAEppB,EAAE,EAAE2xR,EAAE,EAAEtwN,EAAE,EAAE2nL,EAAE,EAAE7mL,EAAE,GAOzE,GANGhpE,KAAK+sC,IAAInpB,EAAImtC,GAAK,OAAMntC,EAAImtC,EAAI,GAChCy3I,GAAQA,EAAKiwF,WAAUxyE,GAAQ,MAC/BriM,EAAImtC,EAAI,QACVntC,EAAImtC,EAAI,EACK,SAARv5C,IAAiBoM,EAAI20Q,EAAI/gR,EAAO,IAAKyuM,IAAQriM,EAAIwyM,IAE3C,KAATnQ,EAAcqyE,EAAOF,EAAK,CAAC,KAAK,GAAG,IAAM,CAAC,KAAK,EAAE,IAAKC,EAAI,OACxD,GAAY,IAATpyE,EAAaqyE,EAAOF,EAAK,CAAC,KAAK,EAAE,IAAM,CAAC,KAAK,EAAE,GAAIC,EAAI,MAC1D,CACDpyE,EAAO,MAAMA,EAEhB,IAAIp/M,EAAI,IAAI2oB,KAAK,KAAM,EAAG,GAC1B3oB,EAAE8/M,QAAQ9/M,EAAEm3M,UAAYiI,EAAO,GAC/BqyE,EAAO,CAACzxR,EAAEk3M,cAAel3M,EAAE+2M,WAAW,EAAE/2M,EAAEm3M,WAC1Cq6E,EAAMxxR,EAAEi3M,SACLmI,EAAO,KAAIoyE,GAAOA,EAAM,GAAK,GAC7BD,IAAIC,EA0FT,SAAmBpyE,EAAMnqN,GAEvBA,EAAE,IAAM,IACR,IAAIu8R,EAAMpyE,EAAKnI,SAEf,OADGmI,EAAO,KAAIoyE,GAAOA,EAAM,GAAK,GACzBA,EA/FMK,CAAU7xR,EAAGyxR,IAO3B,OALA10Q,EAAItB,EAAIg2Q,EAAK,GAAI10Q,EAAIqM,EAAIqoQ,EAAK,GAAI10Q,EAAI/c,EAAIyxR,EAAK,GAC/C10Q,EAAIisO,EAAIr4O,EAAO,GAAIA,EAAOxX,KAAK8H,MAAM0P,EAAO,IAC5CoM,EAAIskD,EAAI1wD,EAAO,GAAIA,EAAOxX,KAAK8H,MAAM0P,EAAO,IAC5CoM,EAAI40Q,EAAIhhR,EACRoM,EAAIolD,EAAIqvN,EACDz0Q,EAhER8zQ,EAAY,GAAKA,EAAY,IAAM,4BAEnCA,EAAY,GAAKA,EAAY,IAAM,iCAEnCA,EAAY,GAAKA,EAAY,IAAM,kCAEnCA,EAAY,GAAKA,EAAY,IAAM,uCAGnCA,EAAY,IAAM,8CAElBA,EAAY,IAAM,uDAElBA,EAAY,IAAM,sDAElBA,EAAY,IAAM,+DAmDlBhB,EAAIyB,gBAAkBA,EACtB,IAAIQ,EAAW,IAAInpQ,KAAK,KAAM,GAAI,GAAI,EAAG,EAAG,GACxCopQ,EAAWD,EAASE,UACpBC,EAAW,IAAItpQ,KAAK,KAAM,EAAG,EAAG,EAAG,EAAG,GAC1C,SAASupQ,EAAch/Q,EAAG0+Q,GACzB,IAAItoM,EAAQp2E,EAAE8+Q,UAGd,OAFGJ,EAAUtoM,GAAS,UACdp2E,GAAK++Q,IAAU3oM,GAAS,QACxBA,GAASyoM,EAAoE,KAAxD7+Q,EAAEi/Q,oBAAsBL,EAASK,uBAAiC,MAIhGtC,EAAIuC,aADJ,SAAyBl/Q,GAAK,OAAOA,EAAE7b,SAAS,KAKhD,IAAIg7R,EAAkB,WACrB,IAAIC,EAA8B,2BAClC,SAASC,EAAct9R,GACtB,OAA2B,GAAnBA,EAAEqvB,QAAQ,KAAcrvB,EAAIA,EAAE4N,QAAQyvR,EAA6B,MAI5E,IAAIE,EAA8B,8BAC9BC,EAAwB,eA+B5B,OAXA,SAA8Bv/Q,GAC7B,IAAuDje,EAAnDy9R,EAAIv5R,KAAK8H,MAAM9H,KAAK2Y,IAAI3Y,KAAK+sC,IAAIhzB,IAAI/Z,KAAKw5R,QAO9C,OALuB19R,EAApBy9R,IAAM,GAAKA,IAAM,EAAOx/Q,EAAE65K,YAAY,GAAG2lG,GACpCv5R,KAAK+sC,IAAIwsP,IAAM,EAjBxB,SAAmBx/Q,GAClB,IAAI4wC,EAAK5wC,EAAE,EAAE,GAAG,GACZje,EAAIs9R,EAAcr/Q,EAAEF,QAAQ,KAAM,OAAG/d,EAAEvD,QAAUoyD,IACrD7uD,EAAIie,EAAE65K,YAAY,KAAUr7L,QAAUoyD,EADyB7uD,EAExDie,EAAEg0M,cAAc,GAaO0rE,CAAU1/Q,GAC1B,KAANw/Q,EAAcx/Q,EAAEF,QAAQ,IAAIqQ,OAAO,EAAE,IAV9C,SAAmBnQ,GAClB,IAAIje,EAAIs9R,EAAcr/Q,EAAEF,QAAQ,KAChC,OAAQ/d,EAAEvD,QAAUwhB,EAAE,EAAE,GAAG,KAAa,MAANje,GAAmB,OAANA,EAAcie,EAAE65K,YAAY,GAAK93L,EASvE49R,CAAU3/Q,GAEZq/Q,EA3BR,SAAuBt9R,GACtB,OAAsB,GAAnBA,EAAEqvB,QAAQ,KAAmBrvB,EACzBA,EAAE4N,QAAQ2vR,EAA4B,OAAO3vR,QAAQ4vR,EAAsB,SAyB7DK,CAAc79R,EAAEukF,iBApCjB,GAoDtB,SAASu5M,EAAY7/Q,EAAGyuL,GACvB,cAAczuL,GACb,IAAK,SAAU,OAAOA,EACtB,IAAK,UAAW,OAAOA,EAAI,OAAS,QACpC,IAAK,SAAU,OAAU,EAAFA,KAASA,EAAIA,EAAE7b,SAAS,IAAMg7R,EAAgBn/Q,GACrE,IAAK,YAAa,MAAO,GACzB,IAAK,SACJ,GAAQ,MAALA,EAAW,MAAO,GACrB,GAAGA,aAAayV,KAAM,OAAOoG,EAAO,GAAImjQ,EAAch/Q,EAAGyuL,GAAQA,EAAKiwF,UAAWjwF,GAEnF,MAAM,IAAI7oM,MAAM,wCAA0Coa,GAY3D,SAAS8/Q,EAAWt8Q,EAAMu8Q,EAAKp5R,EAAKq5R,GACnC,IAAiCn2Q,EAA7B9nB,EAAE,GAAIk+R,EAAG,EAAGrsB,EAAG,EAAGrrP,EAAI5hB,EAAI4hB,EAAQ23Q,EAAO,EAC7C,OAAO18Q,GACN,KAAK,GACJ+E,EAAI5hB,EAAI4hB,EAAI,IAEb,KAAK,IACL,OAAOw3Q,EAAIvhS,QACV,KAAK,EAAG,KAAK,EAAGqrB,EAAMtB,EAAI,IAAK23Q,EAAO,EAAG,MACzC,QAASr2Q,EAAMtB,EAAI,IAAO23Q,EAAO,EAChC,MACF,KAAK,IACL,OAAOH,EAAIvhS,QACV,KAAK,EAAG,KAAK,EAAGqrB,EAAMljB,EAAIuvB,EAAGgqQ,EAAOH,EAAIvhS,OAAQ,MAChD,KAAK,EAAG,OAAO8+R,EAAO32R,EAAIuvB,EAAE,GAAG,GAC/B,KAAK,EAAG,OAAOonQ,EAAO32R,EAAIuvB,EAAE,GAAG,GAC/B,QAAS,OAAOonQ,EAAO32R,EAAIuvB,EAAE,GAAG,GAC/B,MACF,KAAK,IACL,OAAO6pQ,EAAIvhS,QACV,KAAK,EAAG,KAAK,EAAGqrB,EAAMljB,EAAImG,EAAGozR,EAAOH,EAAIvhS,OAAQ,MAChD,KAAK,EAAG,OAAO6+R,EAAK12R,EAAIsoE,GAAG,GAC3B,QAAS,OAAOouN,EAAK12R,EAAIsoE,GAAG,GAC3B,MACF,KAAK,IACL,OAAO8wN,EAAIvhS,QACV,KAAK,EAAG,KAAK,EAAGqrB,EAAM,GAAGljB,EAAI83R,EAAE,IAAI,GAAIyB,EAAOH,EAAIvhS,OAAQ,MAC1D,QAAS,KAAM,oBAAsBuhS,EACpC,MACF,KAAK,GACL,OAAOA,EAAIvhS,QACV,KAAK,EAAG,KAAK,EAAGqrB,EAAMljB,EAAI83R,EAAGyB,EAAOH,EAAIvhS,OAAQ,MAChD,QAAS,KAAM,oBAAsBuhS,EACpC,MACF,KAAK,GACL,OAAOA,EAAIvhS,QACV,KAAK,EAAG,KAAK,EAAGqrB,EAAMljB,EAAIwnE,EAAG+xN,EAAOH,EAAIvhS,OAAQ,MAChD,QAAS,KAAM,sBAAwBuhS,EACtC,MACF,KAAK,IACJ,GAAU,KAAPA,GAAqB,MAAPA,GAAsB,MAAPA,GAAsB,OAAPA,GAAuB,QAAPA,EAAe,KAAM,sBAAwBA,EAC5G,OAAa,IAAVp5R,EAAIqwD,GAAmB,KAAP+oO,GAAqB,MAAPA,GACvBnsB,EAAVosB,GAAO,EAAgB,IAARA,EAAY,IAAO,IAChB,IAARA,EAAY,GAAK,GAC3BC,EAAKh6R,KAAKsW,MAAM,GAAM5V,EAAImvP,EAAInvP,EAAIqwD,MACzB,GAAG48M,IAAIqsB,EAAK,GACV,MAARF,EAA2B,IAAPE,EAAW,IAAM,GAAGA,EAAGrsB,GAC9C7xQ,EAAI+6R,EAAKmD,EAAG,EAAID,GACL,OAARD,EAAqBh+R,EAAEouB,OAAO,EAAE,GAC5B,IAAMpuB,EAAEouB,OAAO,EAAE4vQ,EAAIvhS,OAAO,KARmBs+R,EAAKn2R,EAAImvP,EAAGiqC,EAAIvhS,QASvE,KAAK,GACL,OAAOuhS,GACN,IAAK,MAAO,IAAK,OAAQl2Q,EAAY,GAANljB,EAAI01N,EAAK11N,EAAI83R,EAAG,MAC/C,IAAK,MAAO,IAAK,OAAQ50Q,EAAuB,IAAV,GAANljB,EAAI01N,EAAK11N,EAAI83R,GAAM93R,EAAIwnE,EAAG,MAC1D,IAAK,MAAO,IAAK,OAAQtkD,EAAkC,IAAV,IAAV,GAANljB,EAAI01N,EAAK11N,EAAI83R,GAAM93R,EAAIwnE,GAAMloE,KAAKsW,MAAM5V,EAAImvP,EAAEnvP,EAAIqwD,GAAI,MACvF,QAAS,KAAM,uBAAyB+oO,EACvCG,EAAsB,IAAfH,EAAIvhS,OAAe,EAAI,EAAG,MACnC,KAAK,IACJqrB,EAAMtB,EAAG23Q,EAAO,EAGlB,OADaA,EAAO,EAAIpD,EAAKjzQ,EAAKq2Q,GAAQ,GAI3C,SAASC,EAAS/1R,GAEjB,GAAGA,EAAE5L,QADG,EACU,OAAO4L,EAEzB,IADA,IAAIS,EAAKT,EAAE5L,OAFH,EAEgBuD,EAAIqI,EAAE+lB,OAAO,EAAEtlB,GACjCA,GAAGT,EAAE5L,OAAQqM,GAHX,EAGiB9I,IAAIA,EAAEvD,OAAS,EAAI,IAAM,IAAM4L,EAAE+lB,OAAOtlB,EAHzD,GAIR,OAAO9I,EAtGR46R,EAAIyD,aAAejB,EAuBnBxC,EAAI0D,SAAWR,EAiFf,IAAIS,EAAY,WAChB,IAAIC,EAAO,KAUX,SAASC,EAAcT,EAAKp5R,GAC3B,IAAI5E,EACAupH,EAAMy0K,EAAI3uQ,QAAQ,KAAO2uQ,EAAI3uQ,QAAQ,KAAO,EAChD,GAAG2uQ,EAAIx4P,MAAM,eAAgB,CAC5B,GAAU,GAAP5gC,EAAU,MAAO,SACf,GAAGA,EAAM,EAAG,MAAO,IAAM65R,EAAcT,GAAMp5R,GAClD,IAAIqkN,EAAS+0E,EAAI3uQ,QAAQ,MAAqB,IAAZ45L,IAAeA,EAAO+0E,EAAI3uQ,QAAQ,MACpE,IAAIkhP,EAAKrsQ,KAAK8H,MAAM9H,KAAK2Y,IAAIjY,GAAKV,KAAKw5R,QAAQz0E,EAG/C,GAFGsnD,EAAK,IAAGA,GAAMtnD,IAEM,KADvBjpN,GAAK4E,EAAIV,KAAK0xC,IAAI,GAAG26N,IAAKz4E,YAAYvuE,EAAI,GAAG0/F,EAAOsnD,GAAItnD,IACnD55L,QAAQ,KAAa,CACzB,IAAIqvQ,EAAQx6R,KAAK8H,MAAM9H,KAAK2Y,IAAIjY,GAAKV,KAAKw5R,QAG1C,KAFuB,IAApB19R,EAAEqvB,QAAQ,KAAarvB,EAAIA,EAAEqwI,OAAO,GAAK,IAAMrwI,EAAEouB,OAAO,GAAK,MAAQswQ,EAAQ1+R,EAAEvD,OAAO8zQ,GACpFvwQ,GAAK,MAAQ0+R,EAAQnuB,GACF,OAAlBvwQ,EAAEouB,OAAO,EAAE,IAEhBpuB,GADAA,EAAIA,EAAEqwI,OAAO,GAAKrwI,EAAEouB,OAAO,EAAE66L,GAAU,IAAMjpN,EAAEouB,OAAO,EAAE66L,IAClDr7M,QAAQ,aAAa,MAAMA,QAAQ,QAAQ,MAElD5N,EAAIA,EAAE4N,QAAQ,MAAM,KAErB5N,EAAIA,EAAE4N,QAAQ,4BAA2B,SAAS+wR,EAAGC,EAAGC,EAAGC,GAAM,OAAOF,EAAKC,EAAKC,EAAG1wQ,OAAO,GAAG66L,EAAOsnD,GAAItnD,GAAU,IAAM61E,EAAG1wQ,OAAOmiP,GAAM,YACpIvwQ,EAAI4E,EAAIqtN,cAAc1oG,GAG7B,OAFGy0K,EAAIx4P,MAAM,WAAaxlC,EAAEwlC,MAAM,cAAaxlC,EAAIA,EAAEouB,OAAO,EAAEpuB,EAAEvD,OAAO,GAAK,IAAMuD,EAAEqwI,OAAOrwI,EAAEvD,OAAO,IACjGuhS,EAAIx4P,MAAM,QAAUxlC,EAAEwlC,MAAM,SAAQxlC,EAAIA,EAAE4N,QAAQ,MAAM,MACpD5N,EAAE4N,QAAQ,IAAI,KAEtB,IAAImxR,EAAQ,yBASRC,EAAO,iBACPC,EAAa,WACbC,EAAQ,sBACZ,SAASC,EAAMpsQ,GAEd,IADA,IAAYqsQ,EAARp/R,EAAI,GACAtD,EAAI,EAAGA,GAAKq2B,EAAIt2B,SAAUC,EAAG,OAAQ0iS,EAAGrsQ,EAAI4H,WAAWj+B,IAC9D,KAAK,GAAI,MACT,KAAK,GAAIsD,GAAI,IAAK,MAClB,KAAK,GAAIA,GAAI,IAAK,MAClB,QAASA,GAAIkK,OAAO0vB,aAAawlQ,GAElC,OAAOp/R,EAER,SAASq/R,EAAIz6R,EAAKmG,GAAK,IAAIu0R,EAAKp7R,KAAK0xC,IAAI,GAAG7qC,GAAI,MAAO,GAAI7G,KAAKsW,MAAM5V,EAAM06R,GAAIA,EAChF,SAASzkE,EAAIj2N,EAAKmG,GACjB,IAAIw0R,EAAQ36R,EAAMV,KAAK8H,MAAMpH,GAAM06R,EAAKp7R,KAAK0xC,IAAI,GAAG7qC,GACpD,OAAIA,GAAK,GAAK7G,KAAKsW,MAAM+kR,EAAQD,IAAK7iS,OAAe,EAC9CyH,KAAKsW,MAAM+kR,EAAQD,GAY3B,SAASE,EAAc/9Q,EAAMu8Q,EAAKp5R,GACjC,GAA0B,KAAvB6c,EAAKkZ,WAAW,KAAcqjQ,EAAIx4P,MAAMy5P,GAAa,CACvD,IAAIQ,EAAOzB,EAAIpwR,QAAQ,OAAO,IAAIA,QAAQ,MAAM,IAAIA,QAAQ,KAAK,IACjE,OAAGhJ,GAAO,EAAU46R,EAAc,IAAKC,EAAM76R,GACtC,IAAM46R,EAAc,IAAKC,GAAO76R,GAAO,IAE/C,GAAsC,KAAnCo5R,EAAIrjQ,WAAWqjQ,EAAIvhS,OAAS,GAAW,OA3E3C,SAAsBglB,EAAMu8Q,EAAKp5R,GAEhC,IADA,IAAI2kH,EAAMy0K,EAAIvhS,OAAS,EACS,KAA1BuhS,EAAIrjQ,WAAW4uF,EAAI,MAAaA,EACtC,OAAOg1K,EAAU98Q,EAAMu8Q,EAAI5vQ,OAAO,EAAEm7F,GAAM3kH,EAAMV,KAAK0xC,IAAI,GAAG,GAAGooP,EAAIvhS,OAAO8sH,KAwEzBm2K,CAAaj+Q,EAAMu8Q,EAAKp5R,GACzE,IAAyB,IAAtBo5R,EAAI3uQ,QAAQ,KAAa,OAhF7B,SAAuB5N,EAAMu8Q,EAAKp5R,GACjC,IAAI+6R,EAAO3B,EAAIpwR,QAAQ4wR,EAAK,IAAK5rP,EAAMorP,EAAIvhS,OAASkjS,EAAKljS,OACzD,OAAO8hS,EAAU98Q,EAAMk+Q,EAAM/6R,EAAMV,KAAK0xC,IAAI,GAAG,EAAEhD,IAAQ11B,EAAK,IAAI01B,GA8E/BgtP,CAAcn+Q,EAAMu8Q,EAAKp5R,GAC5D,IAAyB,IAAtBo5R,EAAI3uQ,QAAQ,KAAa,OAAOovQ,EAAcT,EAAKp5R,GACtD,GAAyB,KAAtBo5R,EAAIrjQ,WAAW,GAAW,MAAO,IAAI6kQ,EAAc/9Q,EAAKu8Q,EAAI5vQ,OAAsB,KAAf4vQ,EAAI3tJ,OAAO,GAAQ,EAAE,GAAGzrI,GAC9F,IAAI5E,EACAiF,EAAG46R,EAAIC,EAAIC,EAAO77R,KAAK+sC,IAAIrsC,GAAMqzD,EAAOrzD,EAAM,EAAI,IAAM,GAC5D,GAAGo5R,EAAIx4P,MAAM,SAAU,OAAOyyB,EAAOijO,EAAM6E,EAAK/B,EAAIvhS,QACpD,GAAGuhS,EAAIx4P,MAAM,WAEZ,MAD2B,OAA3BxlC,EAAIk7R,EAAMt2R,EAAI,MAAkB5E,EAAI,IAC7BA,EAAEvD,OAASuhS,EAAIvhS,OAASuD,EAAIm/R,EAAMnB,EAAI5vQ,OAAO,EAAE4vQ,EAAIvhS,OAAOuD,EAAEvD,SAAWuD,EAE/E,GAAIiF,EAAI+4R,EAAIx4P,MAAMu5P,GAAS,OAtD5B,SAAsB95R,EAAG86R,EAAM9nO,GAC9B,IAAI+nO,EAAM58L,SAASn+F,EAAE,GAAG,IAAKg7R,EAAK/7R,KAAKsW,MAAMulR,EAAOC,GAAMrgS,EAAOuE,KAAK8H,MAAMi0R,EAAGD,GAC3EE,EAAOD,EAAKtgS,EAAKqgS,EAAMG,EAAMH,EACjC,OAAO/nO,GAAiB,IAATt4D,EAAa,GAAK,GAAGA,GAAQ,KAAe,IAARugS,EAAYhjR,EAAK,IAAKjY,EAAE,GAAGxI,OAAS,EAAIwI,EAAE,GAAGxI,QAAU40D,EAAK6uO,EAAIj7R,EAAE,GAAGxI,QAAUwI,EAAE,GAAK,IAAMA,EAAE,GAAK81R,EAAKoF,EAAIl7R,EAAE,GAAGxI,SAmDlI2jS,CAAan7R,EAAG86R,EAAM9nO,GACxD,GAAG+lO,EAAIx4P,MAAM,UAAW,OAAOyyB,EAAOijO,EAAM6E,EAAK/B,EAAIvhS,OAASuhS,EAAI3uQ,QAAQ,MAC1E,GAAIpqB,EAAI+4R,EAAIx4P,MAAMw5P,GAEjB,OADAh/R,EAAIq/R,EAAIz6R,EAAKK,EAAE,GAAGxI,QAAQmR,QAAQ,aAAa,MAAMuxR,EAAMl6R,EAAE,KAAK2I,QAAQ,MAAM,IAAIuxR,EAAMl6R,EAAE,KAAK2I,QAAQ,YAAW,SAAS+wR,EAAIC,GAAM,MAAO,IAAMA,EAAK1hR,EAAK,IAAKiiR,EAAMl6R,EAAE,IAAIxI,OAAOmiS,EAAGniS,YAC3J,IAAvBuhS,EAAI3uQ,QAAQ,MAAervB,EAAIA,EAAE4N,QAAQ,OAAO,KAGxD,GADAowR,EAAMA,EAAIpwR,QAAQ,YAAa,MAC3B3I,EAAI+4R,EAAIx4P,MAAM,gBACjB,OAAOyyB,EAAOonO,EAAIU,EAAM96R,EAAE,GAAGxI,QAAQmR,QAAQ,kBAAkB,OAAOA,QAAQ,YAAY,OAAOA,QAAQ,OAAO3I,EAAE,GAAGxI,OAAO,KAAK,KAElI,GAAIwI,EAAI+4R,EAAIx4P,MAAM,qBAAuB,OAAOyyB,EAAOmmO,EAASlD,EAAM6E,EAAK,IAC3E,GAAI96R,EAAI+4R,EAAIx4P,MAAM,qBACjB,OAAO5gC,EAAM,EAAI,IAAM46R,EAAc/9Q,EAAMu8Q,GAAMp5R,GAAOw5R,EAAS,IAAIl6R,KAAK8H,MAAMpH,GAvClF,SAAeA,EAAKmG,GACnB,OAAIA,GAAK,GAAK7G,KAAKsW,OAAO5V,EAAIV,KAAK8H,MAAMpH,IAAMV,KAAK0xC,IAAI,GAAG7qC,KAAKtO,OACxD,EAED,EAmCiF04N,CAAMvwN,EAAKK,EAAE,GAAGxI,UAAY,IAAMs+R,EAAKlgE,EAAIj2N,EAAKK,EAAE,GAAGxI,QAAQwI,EAAE,GAAGxI,QAE1J,GAAIwI,EAAI+4R,EAAIx4P,MAAM,YAAc,OAAOg6P,EAAc/9Q,EAAKu8Q,EAAIpwR,QAAQ,SAAS,IAAIhJ,GACnF,GAAIK,EAAI+4R,EAAIx4P,MAAM,2BAGjB,OAFAxlC,EAAI86R,EAAQ0E,EAAc/9Q,EAAMu8Q,EAAIpwR,QAAQ,SAAS,IAAKhJ,IAC1Di7R,EAAK,EACE/E,EAAQA,EAAQkD,EAAIpwR,QAAQ,MAAM,KAAKA,QAAQ,SAAQ,SAASnJ,GAAG,OAAOo7R,EAAG7/R,EAAEvD,OAAOuD,EAAEqwI,OAAOwvJ,KAAU,MAAJp7R,EAAQ,IAAI,OAEzH,GAAGu5R,EAAIx4P,MAAM05P,GAEZ,MAAO,KADPl/R,EAAIw/R,EAAc/9Q,EAAM,aAAc7c,IACvBwpB,OAAO,EAAE,GAAK,KAAOpuB,EAAEouB,OAAO,EAAG,GAAK,IAAMpuB,EAAEouB,OAAO,GAErE,IAAIiyQ,EAAK,GACT,GAAIp7R,EAAI+4R,EAAIx4P,MAAM,+BAUjB,OATAq6P,EAAK37R,KAAKM,IAAIS,EAAE,GAAGxI,OAAO,GAC1BqjS,EAAKjE,EAAKkE,EAAM77R,KAAK0xC,IAAI,GAAGiqP,GAAI,GAAG,GACnC7/R,EAAI,GAAKi4D,EAEoB,MAD7BooO,EAAK9B,EAAU,IAAKt5R,EAAE,GAAI66R,EAAG,KACvBzvJ,OAAOgwJ,EAAG5jS,OAAO,KAAW4jS,EAAKA,EAAGjyQ,OAAO,EAAEiyQ,EAAG5jS,OAAO,GAAK,KAClEuD,GAAKqgS,EAAKp7R,EAAE,GAAK,IAAMA,EAAE,IACzBo7R,EAAKrF,EAAM8E,EAAG,GAAGD,IACXpjS,OAASwI,EAAE,GAAGxI,SAAQ4jS,EAAKlB,EAAMl6R,EAAE,GAAGmpB,OAAOnpB,EAAE,GAAGxI,OAAO4jS,EAAG5jS,SAAW4jS,GAC7ErgS,GAAKqgS,EAGN,GAAIp7R,EAAI+4R,EAAIx4P,MAAM,iCAGjB,OAFAq6P,EAAK37R,KAAKM,IAAIN,KAAKQ,IAAIO,EAAE,GAAGxI,OAAQwI,EAAE,GAAGxI,QAAQ,GAE1Cw7D,IADP6nO,EAAKjE,EAAKkE,EAAM77R,KAAK0xC,IAAI,GAAGiqP,GAAI,GAAG,IACjB,KAAKC,EAAG,GAAK,GAAK,MAAQ,KAAOA,EAAG,GAAKzuO,EAAKyuO,EAAG,GAAGD,GAAM56R,EAAE,GAAK,IAAMA,EAAE,GAAK+1R,EAAM8E,EAAG,GAAGD,GAAK3iR,EAAK,IAAK,EAAE2iR,EAAG,EAAI56R,EAAE,GAAGxI,OAASwI,EAAE,GAAGxI,SAExJ,GAAIwI,EAAI+4R,EAAIx4P,MAAM,YAEjB,OADAxlC,EAAIk7R,EAAMt2R,EAAK,GACZo5R,EAAIvhS,QAAUuD,EAAEvD,OAAeuD,EAC3Bm/R,EAAMnB,EAAI5vQ,OAAO,EAAE4vQ,EAAIvhS,OAAOuD,EAAEvD,SAAWuD,EAEnD,GAAIiF,EAAI+4R,EAAIx4P,MAAM,uBAAyB,CAC1CxlC,EAAI,GAAK4E,EAAImZ,QAAQ7Z,KAAKM,IAAIS,EAAE,GAAGxI,OAAO,KAAKmR,QAAQ,YAAY,MACnEiyR,EAAK7/R,EAAEqvB,QAAQ,KACf,IAAIixQ,EAAOtC,EAAI3uQ,QAAQ,KAAOwwQ,EAAIU,EAAOvC,EAAIvhS,OAASuD,EAAEvD,OAAS6jS,EACjE,OAAOnB,EAAMnB,EAAI5vQ,OAAO,EAAEkyQ,GAAQtgS,EAAIg+R,EAAI5vQ,OAAO4vQ,EAAIvhS,OAAO8jS,IAE7D,GAAIt7R,EAAI+4R,EAAIx4P,MAAM,sBAEjB,OADAq6P,EAAKhlE,EAAIj2N,EAAKK,EAAE,GAAGxI,QACZmI,EAAM,EAAI,IAAM46R,EAAc/9Q,EAAMu8Q,GAAMp5R,GAAOw5R,EA5E1D,SAAax5R,GACZ,OAAGA,EAAM,YAAcA,GAAO,WAAmB,IAAIA,GAAO,EAAS,EAAJA,EAAUA,EAAI,EAAE,GAC1E,GAAGV,KAAK8H,MAAMpH,GA0E6C47R,CAAI57R,IAAMgJ,QAAQ,aAAa,OAAOA,QAAQ,SAAQ,SAAS+wR,GAAM,MAAO,OAASA,EAAGliS,OAAS,EAAIs+R,EAAK,EAAE,EAAE4D,EAAGliS,QAAU,IAAMkiS,KAAS,IAAM5D,EAAK8E,EAAG56R,EAAE,GAAGxI,QAE/N,OAAOuhS,GACN,IAAK,aAAc,OAAOwB,EAAc/9Q,EAAM,WAAY7c,GAC1D,IAAK,UACL,IAAK,SACL,IAAK,QAAS,IAAIH,EAAI25R,EAASlD,EAAM6E,EAAK,IAAK,MAAa,MAANt7R,EAAYwzD,EAAOxzD,EAAI,GAC7E,IAAK,aAAc,OAAO+6R,EAAc/9Q,EAAM,aAAa7c,GAAKgJ,QAAQ,OAAO,KAC/E,IAAK,WAAY,OAAO4xR,EAAc/9Q,EAAM,WAAW7c,GAAKgJ,QAAQ,OAAO,KAG5E,MAAM,IAAI/J,MAAM,uBAAyBm6R,EAAM,KAWhD,SAASyC,EAAezC,EAAKp5R,GAC5B,IAAI5E,EACAupH,EAAMy0K,EAAI3uQ,QAAQ,KAAO2uQ,EAAI3uQ,QAAQ,KAAO,EAChD,GAAG2uQ,EAAIx4P,MAAM,eAAgB,CAC5B,GAAU,GAAP5gC,EAAU,MAAO,SACf,GAAGA,EAAM,EAAG,MAAO,IAAM67R,EAAezC,GAAMp5R,GACnD,IAAIqkN,EAAS+0E,EAAI3uQ,QAAQ,MAAqB,IAAZ45L,IAAeA,EAAO+0E,EAAI3uQ,QAAQ,MACpE,IAAIkhP,EAAKrsQ,KAAK8H,MAAM9H,KAAK2Y,IAAIjY,GAAKV,KAAKw5R,QAAQz0E,EAG/C,GAFGsnD,EAAK,IAAGA,GAAMtnD,KACjBjpN,GAAK4E,EAAIV,KAAK0xC,IAAI,GAAG26N,IAAKz4E,YAAYvuE,EAAI,GAAG0/F,EAAOsnD,GAAItnD,IAClDzjL,MAAM,QAAS,CACpB,IAAIk5P,EAAQx6R,KAAK8H,MAAM9H,KAAK2Y,IAAIjY,GAAKV,KAAKw5R,SACnB,IAApB19R,EAAEqvB,QAAQ,KAAarvB,EAAIA,EAAEqwI,OAAO,GAAK,IAAMrwI,EAAEouB,OAAO,GAAK,MAAQswQ,EAAQ1+R,EAAEvD,OAAO8zQ,GACpFvwQ,GAAK,MAAQ0+R,EAAQnuB,GAC1BvwQ,EAAIA,EAAE4N,QAAQ,MAAM,KAErB5N,EAAIA,EAAE4N,QAAQ,4BAA2B,SAAS+wR,EAAGC,EAAGC,EAAGC,GAAM,OAAOF,EAAKC,EAAKC,EAAG1wQ,OAAO,GAAG66L,EAAOsnD,GAAItnD,GAAU,IAAM61E,EAAG1wQ,OAAOmiP,GAAM,YACpIvwQ,EAAI4E,EAAIqtN,cAAc1oG,GAG7B,OAFGy0K,EAAIx4P,MAAM,WAAaxlC,EAAEwlC,MAAM,cAAaxlC,EAAIA,EAAEouB,OAAO,EAAEpuB,EAAEvD,OAAO,GAAK,IAAMuD,EAAEqwI,OAAOrwI,EAAEvD,OAAO,IACjGuhS,EAAIx4P,MAAM,QAAUxlC,EAAEwlC,MAAM,SAAQxlC,EAAIA,EAAE4N,QAAQ,MAAM,MACpD5N,EAAE4N,QAAQ,IAAI,KAEtB,SAAS8yR,EAAcj/Q,EAAMu8Q,EAAKp5R,GACjC,GAA0B,KAAvB6c,EAAKkZ,WAAW,KAAcqjQ,EAAIx4P,MAAMy5P,GAAa,CACvD,IAAIQ,EAAOzB,EAAIpwR,QAAQ,OAAO,IAAIA,QAAQ,MAAM,IAAIA,QAAQ,KAAK,IACjE,OAAGhJ,GAAO,EAAU87R,EAAc,IAAKjB,EAAM76R,GACtC,IAAM87R,EAAc,IAAKjB,GAAO76R,GAAO,IAE/C,GAAsC,KAAnCo5R,EAAIrjQ,WAAWqjQ,EAAIvhS,OAAS,GAAW,OArC3C,SAAuBglB,EAAMu8Q,EAAKp5R,GAEjC,IADA,IAAI2kH,EAAMy0K,EAAIvhS,OAAS,EACS,KAA1BuhS,EAAIrjQ,WAAW4uF,EAAI,MAAaA,EACtC,OAAOg1K,EAAU98Q,EAAMu8Q,EAAI5vQ,OAAO,EAAEm7F,GAAM3kH,EAAMV,KAAK0xC,IAAI,GAAG,GAAGooP,EAAIvhS,OAAO8sH,KAkCzBo3K,CAAcl/Q,EAAMu8Q,EAAKp5R,GAC1E,IAAyB,IAAtBo5R,EAAI3uQ,QAAQ,KAAa,OAjC7B,SAAwB5N,EAAMu8Q,EAAKp5R,GAClC,IAAI+6R,EAAO3B,EAAIpwR,QAAQ4wR,EAAK,IAAK5rP,EAAMorP,EAAIvhS,OAASkjS,EAAKljS,OACzD,OAAO8hS,EAAU98Q,EAAMk+Q,EAAM/6R,EAAMV,KAAK0xC,IAAI,GAAG,EAAEhD,IAAQ11B,EAAK,IAAI01B,GA+B/BguP,CAAen/Q,EAAMu8Q,EAAKp5R,GAC7D,IAAyB,IAAtBo5R,EAAI3uQ,QAAQ,KAAa,OAAOoxQ,EAAezC,EAAKp5R,GACvD,GAAyB,KAAtBo5R,EAAIrjQ,WAAW,GAAW,MAAO,IAAI+lQ,EAAcj/Q,EAAKu8Q,EAAI5vQ,OAAsB,KAAf4vQ,EAAI3tJ,OAAO,GAAQ,EAAE,GAAGzrI,GAC9F,IAAI5E,EACAiF,EAAG46R,EAAIC,EAAIC,EAAO77R,KAAK+sC,IAAIrsC,GAAMqzD,EAAOrzD,EAAM,EAAI,IAAM,GAC5D,GAAGo5R,EAAIx4P,MAAM,SAAU,OAAOyyB,EAAO8iO,EAAKgF,EAAK/B,EAAIvhS,QACnD,GAAGuhS,EAAIx4P,MAAM,WAEZ,OADAxlC,EAAK,GAAG4E,EAAiB,IAARA,IAAW5E,EAAI,IACzBA,EAAEvD,OAASuhS,EAAIvhS,OAASuD,EAAIm/R,EAAMnB,EAAI5vQ,OAAO,EAAE4vQ,EAAIvhS,OAAOuD,EAAEvD,SAAWuD,EAE/E,GAAIiF,EAAI+4R,EAAIx4P,MAAMu5P,GAAS,OArK5B,SAAsB95R,EAAG86R,EAAM9nO,GAC9B,OAAOA,GAAiB,IAAT8nO,EAAa,GAAK,GAAGA,GAAQ7iR,EAAK,IAAKjY,EAAE,GAAGxI,OAAS,EAAIwI,EAAE,GAAGxI,QAoK3CokS,CAAa57R,EAAG86R,EAAM9nO,GACxD,GAAG+lO,EAAIx4P,MAAM,UAAW,OAAOyyB,EAAO8iO,EAAKgF,EAAK/B,EAAIvhS,OAASuhS,EAAI3uQ,QAAQ,MACzE,GAAIpqB,EAAI+4R,EAAIx4P,MAAMw5P,GAIjB,OAFAh/R,GADFA,GAAK,GAAG4E,GAAKgJ,QAAQ,aAAa,MAAMuxR,EAAMl6R,EAAE,KAAK2I,QAAQ,MAAM,IAAIuxR,EAAMl6R,EAAE,MACvE2I,QAAQ,YAAW,SAAS+wR,EAAIC,GACxC,MAAO,IAAMA,EAAK1hR,EAAK,IAAKiiR,EAAMl6R,EAAE,IAAIxI,OAAOmiS,EAAGniS,YAClB,IAAvBuhS,EAAI3uQ,QAAQ,MAAervB,EAAIA,EAAE4N,QAAQ,OAAO,KAGxD,GADAowR,EAAMA,EAAIpwR,QAAQ,YAAa,MAC3B3I,EAAI+4R,EAAIx4P,MAAM,gBACjB,OAAOyyB,GAAQ,GAAG8nO,GAAMnyR,QAAQ,kBAAkB,OAAOA,QAAQ,YAAY,OAAOA,QAAQ,OAAO3I,EAAE,GAAGxI,OAAO,KAAK,KAErH,GAAIwI,EAAI+4R,EAAIx4P,MAAM,qBAAuB,OAAOyyB,EAAOmmO,EAAU,GAAG2B,GACpE,GAAI96R,EAAI+4R,EAAIx4P,MAAM,qBACjB,OAAO5gC,EAAM,EAAI,IAAM87R,EAAcj/Q,EAAMu8Q,GAAMp5R,GAAOw5R,EAAU,GAAGx5R,GAAQ,IAAMsY,EAAK,IAAIjY,EAAE,GAAGxI,QAElG,GAAIwI,EAAI+4R,EAAIx4P,MAAM,YAAc,OAAOk7P,EAAcj/Q,EAAKu8Q,EAAIpwR,QAAQ,SAAS,IAAIhJ,GACnF,GAAIK,EAAI+4R,EAAIx4P,MAAM,2BAGjB,OAFAxlC,EAAI86R,EAAQ4F,EAAcj/Q,EAAMu8Q,EAAIpwR,QAAQ,SAAS,IAAKhJ,IAC1Di7R,EAAK,EACE/E,EAAQA,EAAQkD,EAAIpwR,QAAQ,MAAM,KAAKA,QAAQ,SAAQ,SAASnJ,GAAG,OAAOo7R,EAAG7/R,EAAEvD,OAAOuD,EAAEqwI,OAAOwvJ,KAAU,MAAJp7R,EAAQ,IAAI,OAEzH,GAAGu5R,EAAIx4P,MAAM05P,GAEZ,MAAO,KADPl/R,EAAI0gS,EAAcj/Q,EAAM,aAAc7c,IACvBwpB,OAAO,EAAE,GAAK,KAAOpuB,EAAEouB,OAAO,EAAG,GAAK,IAAMpuB,EAAEouB,OAAO,GAErE,IAAIiyQ,EAAK,GACT,GAAIp7R,EAAI+4R,EAAIx4P,MAAM,+BAUjB,OATAq6P,EAAK37R,KAAKM,IAAIS,EAAE,GAAGxI,OAAO,GAC1BqjS,EAAKjE,EAAKkE,EAAM77R,KAAK0xC,IAAI,GAAGiqP,GAAI,GAAG,GACnC7/R,EAAI,GAAKi4D,EAEoB,MAD7BooO,EAAK9B,EAAU,IAAKt5R,EAAE,GAAI66R,EAAG,KACvBzvJ,OAAOgwJ,EAAG5jS,OAAO,KAAW4jS,EAAKA,EAAGjyQ,OAAO,EAAEiyQ,EAAG5jS,OAAO,GAAK,KAClEuD,GAAKqgS,EAAKp7R,EAAE,GAAK,IAAMA,EAAE,IACzBo7R,EAAKrF,EAAM8E,EAAG,GAAGD,IACXpjS,OAASwI,EAAE,GAAGxI,SAAQ4jS,EAAKlB,EAAMl6R,EAAE,GAAGmpB,OAAOnpB,EAAE,GAAGxI,OAAO4jS,EAAG5jS,SAAW4jS,GAC7ErgS,GAAKqgS,EAGN,GAAIp7R,EAAI+4R,EAAIx4P,MAAM,iCAGjB,OAFAq6P,EAAK37R,KAAKM,IAAIN,KAAKQ,IAAIO,EAAE,GAAGxI,OAAQwI,EAAE,GAAGxI,QAAQ,GAE1Cw7D,IADP6nO,EAAKjE,EAAKkE,EAAM77R,KAAK0xC,IAAI,GAAGiqP,GAAI,GAAG,IACjB,KAAKC,EAAG,GAAK,GAAK,MAAQ,KAAOA,EAAG,GAAKzuO,EAAKyuO,EAAG,GAAGD,GAAM56R,EAAE,GAAK,IAAMA,EAAE,GAAK+1R,EAAM8E,EAAG,GAAGD,GAAK3iR,EAAK,IAAK,EAAE2iR,EAAG,EAAI56R,EAAE,GAAGxI,OAASwI,EAAE,GAAGxI,SAExJ,GAAIwI,EAAI+4R,EAAIx4P,MAAM,YAEjB,OADAxlC,EAAI,GAAK4E,EACNo5R,EAAIvhS,QAAUuD,EAAEvD,OAAeuD,EAC3Bm/R,EAAMnB,EAAI5vQ,OAAO,EAAE4vQ,EAAIvhS,OAAOuD,EAAEvD,SAAWuD,EAEnD,GAAIiF,EAAI+4R,EAAIx4P,MAAM,sBAAwB,CACzCxlC,EAAI,GAAK4E,EAAImZ,QAAQ7Z,KAAKM,IAAIS,EAAE,GAAGxI,OAAO,KAAKmR,QAAQ,YAAY,MACnEiyR,EAAK7/R,EAAEqvB,QAAQ,KACf,IAAIixQ,EAAOtC,EAAI3uQ,QAAQ,KAAOwwQ,EAAIU,EAAOvC,EAAIvhS,OAASuD,EAAEvD,OAAS6jS,EACjE,OAAOnB,EAAMnB,EAAI5vQ,OAAO,EAAEkyQ,GAAQtgS,EAAIg+R,EAAI5vQ,OAAO4vQ,EAAIvhS,OAAO8jS,IAE7D,GAAIt7R,EAAI+4R,EAAIx4P,MAAM,sBACjB,OAAO5gC,EAAM,EAAI,IAAM87R,EAAcj/Q,EAAMu8Q,GAAMp5R,GAAOw5R,EAAS,GAAGx5R,GAAKgJ,QAAQ,aAAa,OAAOA,QAAQ,SAAQ,SAAS+wR,GAAM,MAAO,OAASA,EAAGliS,OAAS,EAAIs+R,EAAK,EAAE,EAAE4D,EAAGliS,QAAU,IAAMkiS,KAAS,IAAM5D,EAAK,EAAE91R,EAAE,GAAGxI,QAE5N,OAAOuhS,GACN,IAAK,UACL,IAAK,SACL,IAAK,QAAS,IAAIv5R,EAAI25R,EAAS,GAAG2B,GAAO,MAAa,MAANt7R,EAAYwzD,EAAOxzD,EAAI,GACvE,QACC,GAAGu5R,EAAIx4P,MAAM,aAAc,OAAOk7P,EAAcj/Q,EAAMu8Q,EAAI37R,MAAM,EAAE27R,EAAI/4P,YAAY,MAAOrgC,GAAOu6R,EAAMnB,EAAI37R,MAAM27R,EAAI/4P,YAAY,OAElI,MAAM,IAAIphC,MAAM,uBAAyBm6R,EAAM,KAEhD,OAAO,SAAmBv8Q,EAAMu8Q,EAAKp5R,GACpC,OAAY,EAAJA,KAAWA,EAAM87R,EAAcj/Q,EAAMu8Q,EAAKp5R,GAAO46R,EAAc/9Q,EAAMu8Q,EAAKp5R,IApRnE,GAsRhB,SAASk8R,EAAU9C,GAGlB,IAFA,IAAIl2Q,EAAM,GACNi5Q,GAAS,EACLrkS,EAAI,EAAGoM,EAAI,EAAGpM,EAAIshS,EAAIvhS,SAAUC,EAAG,OAAeshS,EAAIrjQ,WAAWj+B,IACxE,KAAK,GACJqkS,GAAUA,EAAQ,MACnB,KAAK,GAAI,KAAK,GAAI,KAAK,KACpBrkS,EAAG,MACN,KAAK,GACJorB,EAAIA,EAAIrrB,QAAUuhS,EAAI5vQ,OAAOtlB,EAAEpM,EAAEoM,GACjCA,EAAIpM,EAAE,EAGR,GADAorB,EAAIA,EAAIrrB,QAAUuhS,EAAI5vQ,OAAOtlB,IACf,IAAXi4R,EAAiB,MAAM,IAAIl9R,MAAM,WAAam6R,EAAM,0BACvD,OAAOl2Q,EAER8yQ,EAAIoG,OAASF,EACb,IAAIG,EAAU,kCACd,SAASC,EAAYlD,GAEpB,IADA,IAAIthS,EAAI,EAAeyO,EAAI,GAAInL,EAAI,GAC7BtD,EAAIshS,EAAIvhS,QACb,OAAQ0O,EAAI6yR,EAAI3tJ,OAAO3zI,IACtB,IAAK,IAAQ2+R,EAAU2C,EAAKthS,KAAIA,GAAI,GAAGA,IAAK,MAC5C,IAAK,IAAK,KAAsC,KAAzBshS,EAAIrjQ,aAAaj+B,IAAcA,EAAIshS,EAAIvhS,WAAsBC,EAAG,MACvF,IAAK,KACL,IAAK,IAAKA,GAAG,EAAG,MAChB,IAAK,MAAOA,EAAG,MACf,IAAK,IAAK,IAAK,IACd,GAAuB,MAApBshS,EAAI3tJ,OAAO3zI,EAAE,IAAkC,MAApBshS,EAAI3tJ,OAAO3zI,EAAE,GAAY,OAAO,EAE/D,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAEvD,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,OAAO,EAC7E,IAAK,IAAK,IAAK,IAAK,IAAK,IACxB,GAAsC,QAAnCshS,EAAI5vQ,OAAO1xB,EAAG,GAAG6nF,cAAyB,OAAO,EACpD,GAAsC,UAAnCy5M,EAAI5vQ,OAAO1xB,EAAG,GAAG6nF,cAA2B,OAAO,EACtD,GAAsC,UAAnCy5M,EAAI5vQ,OAAO1xB,EAAG,GAAG6nF,cAA2B,OAAO,IACpD7nF,EAAG,MACN,IAAK,IAEJ,IADAsD,EAAImL,EACsB,MAApB6yR,EAAI3tJ,OAAO3zI,MAAgBA,EAAIshS,EAAIvhS,QAAQuD,GAAKg+R,EAAI3tJ,OAAO3zI,GACjE,GAAGsD,EAAEwlC,MAAMy7P,GAAU,OAAO,EAC5B,MACD,IAAK,IAEL,IAAK,IAAK,IAAK,IACd,KAAMvkS,EAAIshS,EAAIvhS,SAAW,YAAY4yB,QAAQlkB,EAAE6yR,EAAI3tJ,SAAS3zI,KAAO,GAAS,MAAHyO,GAA8B,KAAnB6yR,EAAI3tJ,OAAO3zI,EAAE,IAAa,KAAK2yB,QAAQ2uQ,EAAI3tJ,OAAO3zI,EAAE,KAAK,KAC7I,MACD,IAAK,IAAK,KAAMshS,EAAI3tJ,SAAS3zI,KAAOyO,IAAgB,MACpD,IAAK,MAAOzO,EAAuB,KAAjBshS,EAAI3tJ,OAAO3zI,IAA8B,KAAjBshS,EAAI3tJ,OAAO3zI,MAAaA,EAAG,MACrE,IAAK,IAAK,IAAK,MAAOA,EAAG,MACzB,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACpF,KAAMA,EAAIshS,EAAIvhS,QAAU,aAAa4yB,QAAQ2uQ,EAAI3tJ,SAAS3zI,KAAO,IAAgB,MAClF,IAAK,IACL,UAAWA,EAGb,OAAO,EAGR,SAASykS,EAASnD,EAAK//Q,EAAGyuL,EAAM00F,GAI/B,IAHA,IAA8Cx1E,EAAI9iN,EAAGs2R,EAAjDt3Q,EAAM,GAAI9nB,EAAI,GAAItD,EAAI,EAAGyO,EAAI,GAAIk2R,EAAI,IACrCjlC,EAAG,IAED1/P,EAAIshS,EAAIvhS,QACb,OAAQ0O,EAAI6yR,EAAI3tJ,OAAO3zI,IACtB,IAAK,IACJ,IAAI2+R,EAAU2C,EAAKthS,GAAI,MAAM,IAAImH,MAAM,0BAA4BsH,EAAI,OAAQ6yR,GAC/El2Q,EAAIA,EAAIrrB,QAAU,CAACoR,EAAE,IAAKoQ,EAAE,WAAYvhB,GAAG,EAAG,MAC/C,IAAK,IACJ,IAAIsD,EAAE,GAAgC,MAA5Bo/R,EAAGpB,EAAIrjQ,aAAaj+B,KAAcA,EAAIshS,EAAIvhS,QAASuD,GAAKkK,OAAO0vB,aAAawlQ,GACtFt3Q,EAAIA,EAAIrrB,QAAU,CAACoR,EAAE,IAAKoQ,EAAEje,KAAMtD,EAAG,MACtC,IAAK,KAAM,IAAImyD,EAAImvO,EAAI3tJ,SAAS3zI,GAAImR,EAAW,MAANghD,GAAmB,MAANA,EAAaA,EAAI,IACtE/mC,EAAIA,EAAIrrB,QAAU,CAACoR,EAAEA,EAAGoQ,EAAE4wC,KAAMnyD,EAAG,MACpC,IAAK,IAAKorB,EAAIA,EAAIrrB,QAAU,CAACoR,EAAE,IAAKoQ,EAAE,KAAMvhB,GAAG,EAAG,MAClD,IAAK,IACJorB,EAAIA,EAAIrrB,QAAU,CAACoR,EAAE,IAAKoQ,EAAEA,KAAMvhB,EAAG,MACtC,IAAK,IAAK,IAAK,IACd,GAAuB,MAApBshS,EAAI3tJ,OAAO3zI,EAAE,IAAkC,MAApBshS,EAAI3tJ,OAAO3zI,EAAE,GAAY,CACtD,GAAO,MAAJkvN,GAAyE,OAA7DA,EAAGywE,EAAgBp+Q,EAAGyuL,EAA0B,MAApBsxF,EAAI3tJ,OAAO3zI,EAAE,KAA0B,MAAO,GACzForB,EAAIA,EAAIrrB,QAAU,CAACoR,EAAE,IAAKoQ,EAAE+/Q,EAAI5vQ,OAAO1xB,EAAE,IAAK2kS,EAAMl2R,EAAGzO,GAAG,EAAG,MAG/D,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACtDyO,EAAIA,EAAEqC,cAEP,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAChE,GAAGyQ,EAAI,EAAG,MAAO,GACjB,GAAO,MAAJ2tM,GAAgD,OAApCA,EAAGywE,EAAgBp+Q,EAAGyuL,IAAoB,MAAO,GACzD,IAAP1sM,EAAImL,IAAWzO,EAAIshS,EAAIvhS,QAAUuhS,EAAI3tJ,OAAO3zI,GAAG8Q,gBAAkBrC,GAAGnL,GAAGmL,EAC9D,MAANA,GAAmC,MAAtBk2R,EAAI7zR,gBAAuBrC,EAAI,KACtC,MAANA,IAAWA,EAAIixP,GAClBt0O,EAAIA,EAAIrrB,QAAU,CAACoR,EAAE1C,EAAG8S,EAAEje,GAAIqhS,EAAMl2R,EAAG,MACxC,IAAK,IAAK,IAAK,IAAK,IAAK,IACxB,IAAI+hE,EAAE,CAACr/D,EAAE1C,EAAG8S,EAAE9S,GAMd,GALO,MAAJygN,IAAUA,EAAGywE,EAAgBp+Q,EAAGyuL,IACG,QAAnCsxF,EAAI5vQ,OAAO1xB,EAAG,GAAG6nF,eAAkC,MAAJqnI,IAAU1+I,EAAEjvD,EAAI2tM,EAAG8wE,GAAK,GAAK,IAAM,KAAKxvN,EAAEr/D,EAAI,IAAKuuP,EAAG,IAAI1/P,GAAG,GACrE,UAAlCshS,EAAI5vQ,OAAO1xB,EAAE,GAAG6nF,eAAoC,MAAJqnI,IAAU1+I,EAAEjvD,EAAI2tM,EAAG8wE,GAAK,GAAK,KAAO,MAAMxvN,EAAEr/D,EAAI,IAAKnR,GAAG,EAAG0/P,EAAG,KAC5E,UAAlC4hC,EAAI5vQ,OAAO1xB,EAAE,GAAG6nF,eAAoC,MAAJqnI,IAAU1+I,EAAEjvD,EAAI2tM,EAAG8wE,GAAK,GAAK,KAAO,MAAMxvN,EAAEr/D,EAAI,IAAKnR,GAAG,EAAG0/P,EAAG,MAC/GlvL,EAAEr/D,EAAI,MAAOnR,GACb,MAAJkvN,GAAoB,MAAR1+I,EAAEr/D,EAAW,MAAO,GACnCia,EAAIA,EAAIrrB,QAAUywE,EAAGm0N,EAAMl2R,EAAG,MAC/B,IAAK,IAEJ,IADAnL,EAAImL,EACsB,MAApB6yR,EAAI3tJ,OAAO3zI,MAAgBA,EAAIshS,EAAIvhS,QAAQuD,GAAKg+R,EAAI3tJ,OAAO3zI,GACjE,GAAmB,MAAhBsD,EAAEqC,OAAO,GAAY,KAAM,4BAA8BrC,EAAI,IAChE,GAAGA,EAAEwlC,MAAMy7P,GAAU,CACpB,GAAO,MAAJr1E,GAAgD,OAApCA,EAAGywE,EAAgBp+Q,EAAGyuL,IAAoB,MAAO,GAChE5kL,EAAIA,EAAIrrB,QAAU,CAACoR,EAAE,IAAKoQ,EAAEje,EAAEwN,eAC9B6zR,EAAMrhS,EAAEqwI,OAAO,QACNrwI,EAAEqvB,QAAQ,MAAQ,IAC3BrvB,GAAKA,EAAEwlC,MAAM,kBAAkB,IAAI,IAAI,IACnC07P,EAAYlD,KAAMl2Q,EAAIA,EAAIrrB,QAAU,CAACoR,EAAE,IAAIoQ,EAAEje,KAElD,MAED,IAAK,IACJ,GAAS,MAAN4rN,EAAY,CACP,IAAP5rN,EAAImL,IAAWzO,EAAIshS,EAAIvhS,QAAgC,OAArB0O,EAAE6yR,EAAI3tJ,OAAO3zI,KAAasD,GAAKmL,EACjE2c,EAAIA,EAAIrrB,QAAU,CAACoR,EAAE,IAAKoQ,EAAEje,GAAI,MAGlC,IAAK,IAAK,IAAK,IACP,IAAPA,EAAImL,IAAWzO,EAAIshS,EAAIvhS,QAAU,YAAY4yB,QAAQlkB,EAAE6yR,EAAI3tJ,OAAO3zI,KAAO,GAAGsD,GAAKmL,EACjF2c,EAAIA,EAAIrrB,QAAU,CAACoR,EAAE,IAAKoQ,EAAEje,GAAI,MACjC,IAAK,IACG,IAAPA,EAAImL,EAAS6yR,EAAI3tJ,SAAS3zI,KAAOyO,GAAGnL,GAAGmL,EACvC2c,EAAIA,EAAIrrB,QAAU,CAACoR,EAAE1C,EAAG8S,EAAEje,GAAIqhS,EAAMl2R,EAAG,MACxC,IAAK,MAAOzO,EAAuB,KAAjBshS,EAAI3tJ,OAAO3zI,IAA8B,KAAjBshS,EAAI3tJ,OAAO3zI,MAAaA,EAAG,MACrE,IAAK,IAAK,IAAK,IAAKorB,EAAIA,EAAIrrB,QAAU,CAACoR,EAAU,IAAPuzR,EAAS,IAAIj2R,EAAI8S,EAAE9S,KAAMzO,EAAG,MACtE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC7E,IAAPsD,EAAImL,EAASzO,EAAIshS,EAAIvhS,QAAU,aAAa4yB,QAAQ2uQ,EAAI3tJ,SAAS3zI,KAAO,GAAGsD,GAAGg+R,EAAI3tJ,OAAO3zI,GACzForB,EAAIA,EAAIrrB,QAAU,CAACoR,EAAE,IAAKoQ,EAAEje,GAAI,MACjC,IAAK,IAAK8nB,EAAIA,EAAIrrB,QAAU,CAACoR,EAAE1C,EAAG8S,EAAE9S,KAAMzO,EAAG,MAC7C,IAAK,IAAKorB,EAAIA,EAAIrrB,QAAU,CAACoR,EAAE,IAAKoQ,EAAE,OAAQvhB,EAAG,MACjD,QACC,IAA2D,IAAxD,wCAAwC2yB,QAAQlkB,GAAW,MAAM,IAAItH,MAAM,0BAA4BsH,EAAI,OAAS6yR,GACvHl2Q,EAAIA,EAAIrrB,QAAU,CAACoR,EAAE,IAAKoQ,EAAE9S,KAAMzO,EAKrC,IAAqB4kS,EAAjBC,EAAK,EAAGtD,EAAM,EAClB,IAAIvhS,EAAEorB,EAAIrrB,OAAO,EAAG4kS,EAAI,IAAK3kS,GAAK,IAAKA,EACtC,OAAOorB,EAAIprB,GAAGmR,GACb,IAAK,IAAK,IAAK,IAAKia,EAAIprB,GAAGmR,EAAIuuP,EAAIilC,EAAI,IAAQE,EAAK,IAAGA,EAAK,GAAG,MAC/D,IAAK,KACAD,EAAIx5Q,EAAIprB,GAAGuhB,EAAEunB,MAAM,YAAWy4P,EAAI/5R,KAAKQ,IAAIu5R,EAAIqD,EAAI,GAAG7kS,OAAO,IAC9D8kS,EAAK,IAAGA,EAAK,GAEjB,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAKF,EAAIv5Q,EAAIprB,GAAGmR,EAAG,MACtD,IAAK,IAAgB,MAARwzR,IAAev5Q,EAAIprB,GAAGmR,EAAI,IAAQ0zR,EAAK,IAAGA,EAAK,IAAK,MACjE,IAAK,IACJ,MACD,IAAK,IACDA,EAAK,GAAKz5Q,EAAIprB,GAAGuhB,EAAEunB,MAAM,UAAS+7P,EAAK,GACvCA,EAAK,GAAKz5Q,EAAIprB,GAAGuhB,EAAEunB,MAAM,UAAS+7P,EAAK,GACvCA,EAAK,GAAKz5Q,EAAIprB,GAAGuhB,EAAEunB,MAAM,UAAS+7P,EAAK,GAI7C,OAAOA,GACN,KAAK,EAAG,MACR,KAAK,EACJ31E,EAAG32J,GAAK,KAAO22J,EAAG32J,EAAI,IAAK22J,EAAGmoC,GAC3BnoC,EAAGmoC,GAAM,KAAMnoC,EAAGmoC,EAAI,IAAKnoC,EAAGx/I,GAC9Bw/I,EAAGx/I,GAAM,KAAMw/I,EAAGx/I,EAAI,IAAKw/I,EAAG8wE,GACjC,MACD,KAAK,EACJ9wE,EAAG32J,GAAK,KAAO22J,EAAG32J,EAAI,IAAK22J,EAAGmoC,GAC3BnoC,EAAGmoC,GAAM,KAAMnoC,EAAGmoC,EAAI,IAAKnoC,EAAGx/I,GAKnC,IAAeykM,EAAX2wB,EAAO,GACX,IAAI9kS,EAAE,EAAGA,EAAIorB,EAAIrrB,SAAUC,EAC1B,OAAOorB,EAAIprB,GAAGmR,GACb,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MACxC,IAAK,IAAKia,EAAIprB,GAAGuhB,EAAI,GAAI6J,EAAIprB,GAAGmR,EAAI,IAAK,MACzC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAClGia,EAAIprB,GAAGuhB,EAAI8/Q,EAAWj2Q,EAAIprB,GAAGmR,EAAE8sB,WAAW,GAAI7S,EAAIprB,GAAGuhB,EAAG2tM,EAAIqyE,GACxDn2Q,EAAIprB,GAAGmR,EAAI,IAAK,MACjB,IAAK,IAAK,IAAK,IAEd,IADAgjQ,EAAKn0Q,EAAE,EACU,MAAXorB,EAAI+oP,KACS,OAAjB1lQ,EAAE2c,EAAI+oP,GAAIhjQ,IAAoB,MAAN1C,IACjB,MAANA,GAAmB,MAANA,IAA2B,MAAb2c,EAAI+oP,EAAG,KAA+B,MAAhB/oP,EAAI+oP,EAAG,GAAGhjQ,GAA6B,MAAhBia,EAAI+oP,EAAG,GAAGhjQ,GAA6B,MAAhBia,EAAI+oP,EAAG,GAAG5yP,IAC7F,MAAb6J,EAAIprB,GAAGmR,IAAoB,MAAN1C,GAAmB,MAANA,GAAmB,MAANA,IACzC,MAANA,IAA4B,MAAd2c,EAAI+oP,GAAI5yP,GAA2B,MAAd6J,EAAI+oP,GAAI5yP,GAA0B,MAAb6J,EAAI+oP,EAAG,IAA6B,KAAf/oP,EAAI+oP,EAAG,GAAGhjQ,KAExFia,EAAIprB,GAAGuhB,GAAK6J,EAAI+oP,GAAI5yP,EACpB6J,EAAI+oP,GAAM,CAAC5yP,EAAE,GAAIpQ,EAAE,OAAQgjQ,EAE5B2wB,GAAQ15Q,EAAIprB,GAAGuhB,EACfvhB,EAAIm0Q,EAAG,EAAG,MACX,IAAK,IAAK/oP,EAAIprB,GAAGmR,EAAI,IAAKia,EAAIprB,GAAGuhB,EAAI6/Q,EAAY7/Q,EAAEyuL,GAGrD,IAAa+0F,EAAKC,EAAdC,EAAK,GACT,GAAGH,EAAK/kS,OAAS,EAAG,CACM,IAAtB+kS,EAAK7mQ,WAAW,IAClB8mQ,EAAOxjR,EAAE,GAA0B,KAAvBujR,EAAK7mQ,WAAW,IAAa1c,EAAIA,EAC7CyjR,EAAOnD,EAAU,IAAKiD,EAAMC,KAG5BC,EAAOnD,EAAU,IAAKiD,EADtBC,EAAOxjR,EAAE,GAAKmjR,EAAO,GAAKnjR,EAAIA,GAE3BwjR,EAAM,GAAK35Q,EAAI,IAAkB,KAAZA,EAAI,GAAGja,IAC9B6zR,EAAOA,EAAKtzQ,OAAO,GACnBtG,EAAI,GAAG7J,EAAI,IAAM6J,EAAI,GAAG7J,IAG1B4yP,EAAG6wB,EAAKjlS,OAAO,EACf,IAAImlS,EAAQ95Q,EAAIrrB,OAChB,IAAIC,EAAE,EAAGA,EAAIorB,EAAIrrB,SAAUC,EAAG,GAAa,MAAVorB,EAAIprB,IAA0B,KAAZorB,EAAIprB,GAAGmR,GAAYia,EAAIprB,GAAGuhB,EAAEoR,QAAQ,MAAQ,EAAG,CAAEuyQ,EAAQllS,EAAG,MAC/G,IAAImlS,EAAM/5Q,EAAIrrB,OACd,GAAGmlS,IAAU95Q,EAAIrrB,SAAiC,IAAvBilS,EAAKryQ,QAAQ,KAAa,CACpD,IAAI3yB,EAAEorB,EAAIrrB,OAAO,EAAGC,GAAI,IAAIA,EACd,MAAVorB,EAAIprB,KAA0C,IAA5B,KAAK2yB,QAAQvH,EAAIprB,GAAGmR,KACtCgjQ,GAAI/oP,EAAIprB,GAAGuhB,EAAExhB,OAAO,GAAKo0Q,GAAM/oP,EAAIprB,GAAGuhB,EAAExhB,OAAQqrB,EAAIprB,GAAGuhB,EAAIyjR,EAAKtzQ,OAAOyiP,EAAG,EAAG/oP,EAAIprB,GAAGuhB,EAAExhB,SACjFo0Q,EAAK,EAAG/oP,EAAIprB,GAAGuhB,EAAI,IACpB6J,EAAIprB,GAAGuhB,EAAIyjR,EAAKtzQ,OAAO,EAAGyiP,EAAG,GAAIA,GAAM,GAC9C/oP,EAAIprB,GAAGmR,EAAI,IACXg0R,EAAQnlS,GAENm0Q,GAAI,GAAKgxB,EAAM/5Q,EAAIrrB,SAAQqrB,EAAI+5Q,GAAO5jR,EAAIyjR,EAAKtzQ,OAAO,EAAEyiP,EAAG,GAAK/oP,EAAI+5Q,GAAO5jR,QAE1E,GAAG2jR,IAAU95Q,EAAIrrB,SAAiC,IAAvBilS,EAAKryQ,QAAQ,KAAa,CAEzD,IADAwhP,EAAK6wB,EAAKryQ,QAAQ,KAAK,EACnB3yB,EAAEklS,EAAOllS,GAAI,IAAKA,EACrB,GAAa,MAAVorB,EAAIprB,KAA0C,IAA5B,KAAK2yB,QAAQvH,EAAIprB,GAAGmR,GAAzC,CAGA,IAFA/E,EAAEgf,EAAIprB,GAAGuhB,EAAEoR,QAAQ,MAAM,GAAG3yB,IAAIklS,EAAM95Q,EAAIprB,GAAGuhB,EAAEoR,QAAQ,KAAK,EAAEvH,EAAIprB,GAAGuhB,EAAExhB,OAAO,EAC9EklS,EAAK75Q,EAAIprB,GAAGuhB,EAAEmQ,OAAOtlB,EAAE,GACjBA,GAAG,IAAKA,EACV+nQ,GAAI,IAA6B,MAAvB/oP,EAAIprB,GAAGuhB,EAAEoyH,OAAOvnI,IAAqC,MAAvBgf,EAAIprB,GAAGuhB,EAAEoyH,OAAOvnI,MAAa64R,EAAKD,EAAKrxJ,OAAOwgI,KAAQ8wB,GAElG75Q,EAAIprB,GAAGuhB,EAAI0jR,EACX75Q,EAAIprB,GAAGmR,EAAI,IACXg0R,EAAQnlS,EAIT,IAFGm0Q,GAAI,GAAKgxB,EAAM/5Q,EAAIrrB,SAAQqrB,EAAI+5Q,GAAO5jR,EAAIyjR,EAAKtzQ,OAAO,EAAEyiP,EAAG,GAAK/oP,EAAI+5Q,GAAO5jR,GAC9E4yP,EAAK6wB,EAAKryQ,QAAQ,KAAK,EACnB3yB,EAAEklS,EAAOllS,EAAEorB,EAAIrrB,SAAUC,EAC5B,GAAa,MAAVorB,EAAIprB,MAA4C,IAA7B,MAAM2yB,QAAQvH,EAAIprB,GAAGmR,IAAanR,IAAMklS,GAA9D,CAGA,IAFA94R,EAAEgf,EAAIprB,GAAGuhB,EAAEoR,QAAQ,MAAM,GAAG3yB,IAAIklS,EAAM95Q,EAAIprB,GAAGuhB,EAAEoR,QAAQ,KAAK,EAAE,EAC9DsyQ,EAAK75Q,EAAIprB,GAAGuhB,EAAEmQ,OAAO,EAAEtlB,GACjBA,EAAEgf,EAAIprB,GAAGuhB,EAAExhB,SAAUqM,EACvB+nQ,EAAG6wB,EAAKjlS,SAAQklS,GAAMD,EAAKrxJ,OAAOwgI,MAEtC/oP,EAAIprB,GAAGuhB,EAAI0jR,EACX75Q,EAAIprB,GAAGmR,EAAI,IACXg0R,EAAQnlS,IAIX,IAAIA,EAAE,EAAGA,EAAEorB,EAAIrrB,SAAUC,EAAgB,MAAVorB,EAAIprB,IAAc,KAAK2yB,QAAQvH,EAAIprB,GAAGmR,IAAI,IACxE4zR,EAAOL,EAAM,GAAKnjR,EAAI,GAAKvhB,EAAE,GAAoB,MAAforB,EAAIprB,EAAE,GAAGuhB,GAAaA,EAAEA,EAC1D6J,EAAIprB,GAAGuhB,EAAIsgR,EAAUz2Q,EAAIprB,GAAGmR,EAAGia,EAAIprB,GAAGuhB,EAAGwjR,GACzC35Q,EAAIprB,GAAGmR,EAAI,KAEZ,IAAIi0R,EAAS,GACb,IAAIplS,EAAE,EAAGA,IAAMorB,EAAIrrB,SAAUC,EAAgB,MAAVorB,EAAIprB,KAAYolS,GAAUh6Q,EAAIprB,GAAGuhB,GACpE,OAAO6jR,EA3MRlH,EAAImH,QAAUb,EA6MdtG,EAAIoH,MAAQb,EACZ,IAAIc,EAAU,UACVC,EAAW,wCACf,SAASC,EAAQlkR,EAAGgiR,GACnB,GAAS,MAANA,EAAY,OAAO,EACtB,IAAImC,EAAStkR,WAAWmiR,EAAG,IAC3B,OAAOA,EAAG,IACT,IAAK,IAAM,GAAGhiR,GAAKmkR,EAAQ,OAAO,EAAM,MACxC,IAAK,IAAM,GAAGnkR,EAAKmkR,EAAQ,OAAO,EAAM,MACxC,IAAK,IAAM,GAAGnkR,EAAKmkR,EAAQ,OAAO,EAAM,MACxC,IAAK,KAAM,GAAGnkR,GAAKmkR,EAAQ,OAAO,EAAM,MACxC,IAAK,KAAM,GAAGnkR,GAAKmkR,EAAQ,OAAO,EAAM,MACxC,IAAK,KAAM,GAAGnkR,GAAKmkR,EAAQ,OAAO,EAEnC,OAAO,EAuBR,SAAStoQ,EAAOkkQ,EAAI//Q,EAAEje,GACb,MAALA,IAAWA,EAAI,IAClB,IAAI2/R,EAAO,GACX,cAAc3B,GACb,IAAK,SAC4B2B,EAAtB,UAAP3B,GAAmBh+R,EAAEqiS,OAAeriS,EAAEqiS,OAC7BrE,EACZ,MACD,IAAK,SAGO,OAFe2B,EAAhB,IAAP3B,GAAah+R,EAAEqiS,OAAeriS,EAAEqiS,QACX,MAAXriS,EAAEk7M,MAAiBl7M,EAAO,MAAIy7R,GAAWuC,MACrC2B,EAAQ3/R,EAAEk7M,OAASl7M,EAAEk7M,MAAMwgF,EAAYsC,KAAUvC,EAAUC,EAAYsC,KAC7E,MAAR2B,IAAcA,EAAO/D,EAAYoC,IAAQ,WAG9C,GAAG3C,EAAUsE,EAAK,GAAI,OAAO7B,EAAY7/Q,EAAGje,GACzCie,aAAayV,OAAMzV,EAAIg/Q,EAAch/Q,EAAGje,EAAE28R,WAC7C,IAAIt5R,EAtCL,SAAoBA,EAAG4a,GACtB,IAAI+/Q,EAAM8C,EAAUz9R,GAChBsa,EAAIqgR,EAAIvhS,OAAQ6lS,EAAMtE,EAAIrgR,EAAE,GAAG0R,QAAQ,KAE3C,GADG1R,EAAE,GAAK2kR,GAAK,KAAK3kR,EACjBqgR,EAAIvhS,OAAS,EAAG,MAAM,IAAIoH,MAAM,iCAAmCm6R,EAAIhwR,KAAK,KAAO,KACtF,GAAgB,iBAANiQ,EAAgB,MAAO,CAAC,EAAkB,IAAf+/Q,EAAIvhS,QAAgB6lS,GAAK,EAAEtE,EAAIA,EAAIvhS,OAAO,GAAG,KAClF,OAAOuhS,EAAIvhS,QACV,KAAK,EAAGuhS,EAAMsE,GAAK,EAAI,CAAC,UAAW,UAAW,UAAWtE,EAAI,IAAM,CAACA,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAI,KAAM,MAClG,KAAK,EAAGA,EAAMsE,GAAK,EAAI,CAACtE,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAIA,EAAI,IAAM,CAACA,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAI,KAAM,MACzF,KAAK,EAAGA,EAAMsE,GAAK,EAAI,CAACtE,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAIA,EAAI,IAAM,CAACA,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAI,KAGpF,IAAI8B,EAAK7hR,EAAI,EAAI+/Q,EAAI,GAAK//Q,EAAI,EAAI+/Q,EAAI,GAAKA,EAAI,GAC/C,IAA4B,IAAzBA,EAAI,GAAG3uQ,QAAQ,OAAwC,IAAzB2uQ,EAAI,GAAG3uQ,QAAQ,KAAa,MAAO,CAAC1R,EAAGmiR,GACxE,GAA4B,MAAzB9B,EAAI,GAAGx4P,MAAMy8P,IAA6C,MAAzBjE,EAAI,GAAGx4P,MAAMy8P,GAAkB,CAClE,IAAIM,EAAKvE,EAAI,GAAGx4P,MAAM08P,GAClBM,EAAKxE,EAAI,GAAGx4P,MAAM08P,GACtB,OAAOC,EAAQlkR,EAAGskR,GAAM,CAAC5kR,EAAGqgR,EAAI,IAAMmE,EAAQlkR,EAAGukR,GAAM,CAAC7kR,EAAGqgR,EAAI,IAAM,CAACrgR,EAAGqgR,EAAU,MAANuE,GAAoB,MAANC,EAAa,EAAI,IAE7G,MAAO,CAAC7kR,EAAGmiR,GAmBH2C,CAAW9C,EAAM1hR,GACzB,GAAGo9Q,EAAUh4R,EAAE,IAAK,OAAOy6R,EAAY7/Q,EAAGje,GAC1C,IAAS,IAANie,EAAYA,EAAI,YAAa,IAAS,IAANA,EAAaA,EAAI,aAC/C,GAAS,KAANA,GAAiB,MAALA,EAAW,MAAO,GACtC,OAAOkjR,EAAS99R,EAAE,GAAI4a,EAAGje,EAAGqD,EAAE,IAE/B,SAASq/R,EAAW1E,EAAKz0K,GACxB,GAAiB,iBAAPA,EAAiB,CAC1BA,GAAOA,IAAQ,EACjB,IAAI,IAAI7sH,EAAI,EAAGA,EAAI,MAAUA,EAC7B,GAAmB2B,MAAhBo9R,EAAU/+R,IACV,GAAG++R,EAAU/+R,IAAMshS,EAAK,CAAEz0K,EAAM7sH,EAAG,YADH6sH,EAAM,IAAGA,EAAM7sH,GAG/C6sH,EAAM,IAAGA,EAAM,KAGjB,OADDkyK,EAAUlyK,GAAOy0K,EACTz0K,EAERqxK,EAAIz+P,KAAOumQ,EACX9H,EAAIn4B,OAASg5B,EACbb,EAAI+H,UAAY,WAAuB,OAAOlH,GAC9Cb,EAAIgI,WAAa,SAAoBC,GACpC,IAAI,IAAInmS,EAAE,EAAM,KAAHA,IAAaA,OACX2B,IAAXwkS,EAAInmS,IAAkBgmS,EAAWG,EAAInmS,GAAIA,IAE9Ck+R,EAAIY,WAAaA,EACjBZ,EAAI9gQ,OAASA,GAEb+gQ,EAASD,GAET,IAgGIkI,EAhGAC,EAAqC,CACxC,iBAAkB,UAClB,eAAgBnI,EAAIn4B,OAAO,IAC3B,YAAa,sBACb,cAAem4B,EAAIn4B,OAAO,IAC1B,aAAcm4B,EAAIn4B,OAAO,IACzB,YAAam4B,EAAIn4B,OAAO,IACxB,cAAem4B,EAAIn4B,OAAO,IAC1B,aAAcm4B,EAAIn4B,OAAO,IACzB,SAAY,uCACZ,MAASm4B,EAAIn4B,OAAO,GACpB,SAAYm4B,EAAIn4B,OAAO,GACvB,QAAWm4B,EAAIn4B,OAAO,IACtB,WAAcm4B,EAAIn4B,OAAO,IACzB,SAAU,qBACV,aAAc,0BACd,SAAU,sBAGPugC,EAAmC,CACtC,EAAK,4BACL,EAAK,iCACL,EAAK,kCACL,EAAK,uCACL,GAAM,UAAW,GAAM,UAAW,GAAM,UAAW,GAAM,UACzD,GAAM,SAAU,GAAM,SAAU,GAAM,SAAU,GAAM,SAAU,GAAM,SACtE,GAAM,UAAW,GAAM,UAAW,GAAM,UAAW,GAAM,UACzD,GAAM,SACN,GAAM,0CACN,GAAM,mDACN,GAAM,kDACN,GAAM,2DACN,GAAM,SAAU,GAAM,SAAU,GAAM,SAAU,GAAM,SAAU,GAAM,SACtE,GAAM,SAAU,GAAM,SAAU,GAAM,SAAU,GAAM,SACtD,GAAM,IACN,GAAM,OACN,GAAM,QACN,GAAM,WACN,GAAM,4BACN,GAAM,iCACN,GAAM,kCACN,GAAM,uCACN,GAAM,KACN,GAAM,QACN,GAAM,QACN,GAAM,UACN,GAAM,SACN,GAAM,SACN,GAAM,WACN,GAAM,QACN,GAAM,SACN,GAAM,OACN,GAAM,UACN,GAAM,cACN,GAAM,QACN,GAAM,YACN,GAAM,UAIHC,EAAc,oCA2ChB,SAASH,GACXA,EAAMrxP,QAAU,QAsBhB,IAAIgrP,EAnBJ,WAGC,IAFA,IAAItxR,EAAI,EAAG+vM,EAAQ,IAAIt+M,MAAM,KAErBuF,EAAG,EAAQ,KAALA,IAAYA,EASzBgJ,EAAQ,GADRA,EAAQ,GADRA,EAAQ,GADRA,EAAQ,GADRA,EAAQ,GADRA,EAAQ,GADRA,EAAQ,GADRA,EAAQ,GADRA,EAAIhJ,IACW,UAAagJ,IAAM,EAAOA,IAAM,IAChC,UAAaA,IAAM,EAAOA,IAAM,IAChC,UAAaA,IAAM,EAAOA,IAAM,IAChC,UAAaA,IAAM,EAAOA,IAAM,IAChC,UAAaA,IAAM,EAAOA,IAAM,IAChC,UAAaA,IAAM,EAAOA,IAAM,IAChC,UAAaA,IAAM,EAAOA,IAAM,IAChC,UAAaA,IAAM,EAAOA,IAAM,EAC/C+vM,EAAM/4M,GAAKgJ,EAGZ,MAA6B,oBAAflC,WAA6B,IAAIA,WAAWiyM,GAASA,EAG5DgoF,GA+DRJ,EAAM5nF,MAAQuhF,EACdqG,EAAMK,KA/DN,SAAoBA,EAAM9yO,GAEzB,IADA,IAAIu1J,GAAY,EAARv1J,EAAWo4L,EAAI06C,EAAK1mS,OAAS,EAC7BC,EAAI,EAAGA,EAAI+rP,GAElB7iC,GADAA,EAAKA,IAAI,EAAK62E,EAA2B,KAAxB72E,EAAEu9E,EAAKxoQ,WAAWj+B,UAC1B,EAAK+/R,EAA2B,KAAxB72E,EAAEu9E,EAAKxoQ,WAAWj+B,OAGpC,OADGA,IAAM+rP,IAAG7iC,EAAKA,IAAI,EAAK62E,EAA2B,KAAxB72E,EAAIu9E,EAAKxoQ,WAAWj+B,OACrC,EAALkpN,GAyDRk9E,EAAMnpQ,IAtDN,SAAmBA,EAAK02B,GACvB,GAAG12B,EAAIl9B,OAAS,IAAO,OAYxB,SAAqBk9B,EAAK02B,GAEzB,IADA,IAAIu1J,GAAY,EAARv1J,EAAWo4L,EAAI9uN,EAAIl9B,OAAS,EAC5BC,EAAI,EAAGA,EAAI+rP,GAQlB7iC,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,GADAA,EAAKA,IAAI,EAAK62E,EAAe,KAAZ72E,EAAEjsL,EAAIj9B,UACd,EAAK+/R,EAAe,KAAZ72E,EAAEjsL,EAAIj9B,UACd,EAAK+/R,EAAe,KAAZ72E,EAAEjsL,EAAIj9B,UACd,EAAK+/R,EAAe,KAAZ72E,EAAEjsL,EAAIj9B,UACd,EAAK+/R,EAAe,KAAZ72E,EAAEjsL,EAAIj9B,UACd,EAAK+/R,EAAe,KAAZ72E,EAAEjsL,EAAIj9B,UACd,EAAK+/R,EAAe,KAAZ72E,EAAEjsL,EAAIj9B,UACd,EAAK+/R,EAAe,KAAZ72E,EAAEjsL,EAAIj9B,OAExB,KAAMA,EAAI+rP,EAAE,GAAG7iC,EAAKA,IAAI,EAAK62E,EAAe,KAAZ72E,EAAEjsL,EAAIj9B,OACtC,OAAY,EAALkpN,EAzBuBw9E,CAAYzpQ,EAAK02B,GAE/C,IADA,IAAIu1J,GAAY,EAARv1J,EAAWo4L,EAAI9uN,EAAIl9B,OAAS,EAC5BC,EAAI,EAAGA,EAAI+rP,GAIlB7iC,GADAA,GADAA,GADAA,EAAKA,IAAI,EAAK62E,EAAe,KAAZ72E,EAAEjsL,EAAIj9B,UACd,EAAK+/R,EAAe,KAAZ72E,EAAEjsL,EAAIj9B,UACd,EAAK+/R,EAAe,KAAZ72E,EAAEjsL,EAAIj9B,UACd,EAAK+/R,EAAe,KAAZ72E,EAAEjsL,EAAIj9B,OAExB,KAAMA,EAAI+rP,EAAE,GAAG7iC,EAAKA,IAAI,EAAK62E,EAAe,KAAZ72E,EAAEjsL,EAAIj9B,OACtC,OAAY,EAALkpN,GA6CRk9E,EAAM/vQ,IA1BN,SAAmBA,EAAKs9B,GAEvB,IADA,IAC6BllD,EAAGJ,EAD5B66M,GAAY,EAARv1J,EACA3zD,EAAI,EAAG+rP,EAAE11N,EAAIt2B,OAAcC,EAAI+rP,IACtCt9O,EAAI4nB,EAAI4H,WAAWj+B,MACZ,IACNkpN,EAAKA,IAAI,EAAK62E,EAAU,KAAP72E,EAAIz6M,IACZA,EAAI,KAEby6M,GADAA,EAAKA,IAAI,EAAK62E,EAA0B,KAAvB72E,GAAK,IAAMz6M,GAAG,EAAG,SACzB,EAAKsxR,EAAqB,KAAlB72E,GAAK,IAAO,GAAFz6M,KAClBA,GAAK,OAAUA,EAAI,OAC5BA,EAAa,IAAN,KAAFA,GAAYJ,EAAwB,KAApBgoB,EAAI4H,WAAWj+B,KAIpCkpN,GADAA,GADAA,GADAA,EAAKA,IAAI,EAAK62E,EAAyB,KAAtB72E,GAAK,IAAMz6M,GAAG,EAAG,QACzB,EAAKsxR,EAA0B,KAAvB72E,GAAK,IAAMz6M,GAAG,EAAG,SACzB,EAAKsxR,EAAqC,KAAlC72E,GAAK,IAAM76M,GAAG,EAAG,IAAQ,EAAFI,IAAM,QACrC,EAAKsxR,EAAqB,KAAlB72E,GAAK,IAAO,GAAF76M,MAI3B66M,GADAA,GADAA,EAAKA,IAAI,EAAK62E,EAA2B,KAAxB72E,GAAK,IAAMz6M,GAAG,GAAI,SAC1B,EAAKsxR,EAA0B,KAAvB72E,GAAK,IAAMz6M,GAAG,EAAG,SACzB,EAAKsxR,EAAqB,KAAlB72E,GAAK,IAAO,GAAFz6M,KAG7B,OAAY,EAALy6M,GAvFP7gM,CAAQ+9Q,EAAQ,IA+FjB,IAszCIO,EAtzCAC,EAAM,WACV,IAuFIhtJ,EAvFAh6I,EAAU,GAWd,SAASinS,EAAQhiS,GAChB,GAA6B,KAA1BA,EAAE8uI,OAAO9uI,EAAE9E,OAAS,GAAW,OAAwC,IAAhC8E,EAAEc,MAAM,GAAG,GAAGgtB,QAAQ,KAAe9tB,EAAIgiS,EAAQhiS,EAAEc,MAAM,GAAI,IACvG,IAAI8I,EAAI5J,EAAE0jC,YAAY,KACtB,OAAe,IAAP95B,EAAY5J,EAAIA,EAAEc,MAAM,EAAG8I,EAAE,GAGtC,SAASivQ,EAAS74Q,GACjB,GAA6B,KAA1BA,EAAE8uI,OAAO9uI,EAAE9E,OAAS,GAAW,OAAO29Q,EAAS74Q,EAAEc,MAAM,GAAI,IAC9D,IAAI8I,EAAI5J,EAAE0jC,YAAY,KACtB,OAAe,IAAP95B,EAAY5J,EAAIA,EAAEc,MAAM8I,EAAE,GAUnC,SAASq4R,EAAe7pQ,EAAKwwL,GACT,iBAATA,IAAmBA,EAAO,IAAIz2L,KAAKy2L,IAC7C,IAAIs5E,EAAMt5E,EAAKpI,WAEf0hF,GADAA,EAAMA,GAAO,EAAIt5E,EAAK/H,eACT,EAAK+H,EAAKhI,eAAe,EACtCxoL,EAAI+pQ,YAAY,EAAGD,GACnB,IAAIE,EAAOx5E,EAAKlI,cAAgB,KAEhC0hF,GADAA,EAAMA,GAAO,EAAKx5E,EAAKrI,WAAW,IACrB,EAAIqI,EAAKjI,UACtBvoL,EAAI+pQ,YAAY,EAAGC,GAqBpB,SAASC,EAAkB/nB,GAC1BgoB,GAAUhoB,EAAM,GAGhB,IAFA,IAAI77Q,EAAI,GACJoM,EAAQ,EACNyvQ,EAAKl+P,GAAKk+P,EAAKp/Q,OAAS,GAAG,CAChC,IAAIglB,EAAOo6P,EAAKioB,WAAW,GACvBt5H,EAAKqxG,EAAKioB,WAAW,GAAIC,EAAMloB,EAAKl+P,EAAI6sJ,EACxCjpK,EAAI,GACR,OAAOkgB,GAEN,KAAK,MAEO,GADXrV,EAAQyvQ,EAAKioB,WAAW,MACVviS,EAAEyiS,MAAQnoB,EAAKioB,WAAW,IAErCt5H,EAAK,IACI,EAARp+J,IAAW7K,EAAE0iS,MAAQpoB,EAAKioB,WAAW,IAC7B,EAAR13R,IAAW7K,EAAE2iS,MAAQroB,EAAKioB,WAAW,KAEtCviS,EAAEyiS,QAAOziS,EAAE4iS,GAAK,IAAIzwQ,KAAa,IAARnyB,EAAEyiS,QAIhCnoB,EAAKl+P,EAAIomR,EACT/jS,EAAEyhB,GAAQlgB,EAEX,OAAOvB,EAGR,SAASokS,IAAW,OAAO9tJ,IAAOA,EAAK,EAAQ,OAC/C,SAASj8G,EAAM6F,EAAM+0E,GACrB,GAAc,IAAX/0E,EAAK,IAAyB,IAAXA,EAAK,GAAY,OAAOmkQ,GAAUnkQ,EAAM+0E,GAC9D,GAAG/0E,EAAKzjC,OAAS,IAAK,MAAM,IAAIoH,MAAM,iBAAmBq8B,EAAKzjC,OAAS,UACvE,IAAI6nS,EAEAC,EACAC,EACAC,EACAC,EACAC,EALAC,EAAM,IAONC,EAAY,GAGZhpB,EAAO37O,EAAK79B,MAAM,EAAE,KACxBwhS,GAAUhoB,EAAM,GAGhB,IAAIipB,EAmFJ,SAAwBjpB,GACvB,GAAmB,IAAhBA,EAAKA,EAAKl+P,IAAkC,IAApBk+P,EAAKA,EAAKl+P,EAAI,GAAY,MAAO,CAAC,EAAG,GAEhEk+P,EAAKkpB,IAAIC,EAAkB,sBAI3BnpB,EAAKl+P,GAAK,GAGV,IAAI2mR,EAAOzoB,EAAKioB,WAAW,EAAG,KAE9B,MAAO,CAACjoB,EAAKioB,WAAW,EAAE,KAAMQ,GA/FxBW,CAAeppB,GAExB,OADAyoB,EAAOQ,EAAG,IAET,KAAK,EAAGF,EAAM,IAAK,MAAO,KAAK,EAAGA,EAAM,KAAM,MAC9C,KAAK,EAAG,GAAY,GAATE,EAAG,GAAS,OAAOT,GAAUnkQ,EAAM+0E,GAE9C,QAAS,MAAM,IAAIpxG,MAAM,sCAAwCygS,GAIvD,MAARM,GAAyCf,GAA1BhoB,EAAO37O,EAAK79B,MAAM,EAAEuiS,GAAsB,IAE5D,IAAI9qF,EAAS55K,EAAK79B,MAAM,EAAEuiS,IAqF1B,SAAsB/oB,EAAMyoB,GAC3B,IAAIljK,EAOJ,OAHAy6I,EAAKl+P,GAAK,EAGFyjH,EAAQy6I,EAAKioB,WAAW,IAC/B,KAAK,EAAM,GAAW,GAARQ,EAAW,MAAM,IAAIzgS,MAAM,gCAAkCu9H,GAAQ,MACnF,KAAK,GAAM,GAAW,GAARkjK,EAAW,MAAM,IAAIzgS,MAAM,iCAAmCu9H,GAAQ,MACpF,QAAS,MAAM,IAAIv9H,MAAM,sCAAwCu9H,GAIlEy6I,EAAKkpB,IAAI,OAAQ,uBAGjBlpB,EAAKkpB,IAAI,eAAgB,cArG1BG,CAAarpB,EAAMyoB,GAGnB,IAAIa,EAAUtpB,EAAKioB,WAAW,EAAG,KACjC,GAAY,IAATQ,GAA0B,IAAZa,EAAe,MAAM,IAAIthS,MAAM,uCAAyCshS,GAGzFtpB,EAAKl+P,GAAK,EAGV8mR,EAAY5oB,EAAKioB,WAAW,EAAG,KAG/BjoB,EAAKl+P,GAAK,EAGVk+P,EAAKkpB,IAAI,WAAY,6BAGrBL,EAAgB7oB,EAAKioB,WAAW,EAAG,KAGnCS,EAAO1oB,EAAKioB,WAAW,EAAG,KAG1Ba,EAAc9oB,EAAKioB,WAAW,EAAG,KAGjCU,EAAgB3oB,EAAKioB,WAAW,EAAG,KAGnC,IAAI,IAAI52N,GAAK,EAAGpkE,EAAI,EAAGA,EAAI,QAC1BokE,EAAI2uM,EAAKioB,WAAW,EAAG,MAClB,KAF4Bh7R,EAGjC+7R,EAAU/7R,GAAKokE,EAIhB,IAAIk4N,EAmEJ,SAAmBllQ,EAAM0kQ,GAGxB,IAFA,IAAIS,EAAWnhS,KAAK4C,KAAKo5B,EAAKzjC,OAAOmoS,GAAK,EACtCQ,EAAU,GACN1oS,EAAE,EAAGA,EAAI2oS,IAAY3oS,EAAG0oS,EAAQ1oS,EAAE,GAAKwjC,EAAK79B,MAAM3F,EAAEkoS,GAAKloS,EAAE,GAAGkoS,GAEtE,OADAQ,EAAQC,EAAS,GAAKnlQ,EAAK79B,MAAMgjS,EAAST,GACnCQ,EAxEME,CAAUplQ,EAAM0kQ,GAE9BW,EAAWZ,EAAaH,EAAeY,EAASR,EAAKC,GAGrD,IAAIW,EA+JJ,SAA0BJ,EAASX,EAAWI,EAAWD,GACxD,IAAI7oC,EAAKqpC,EAAQ3oS,OAAQ+oS,EAAc,GACnCC,EAAO,GAAI9rQ,EAAM,GAAI+rQ,EAAY,GACjCC,EAAUf,EAAM,EAAGloS,EAAE,EAAGoM,EAAE,EAAGyZ,EAAE,EAAGsuP,EAAG,EACzC,IAAIn0Q,EAAE,EAAGA,EAAIq/P,IAAMr/P,EAGlB,GAFAi9B,EAAM,IACNpX,EAAK7lB,EAAI+nS,IAAoB1oC,IAAIx5O,GAAGw5O,IACjC0pC,EAAKljR,GAAR,CACAmjR,EAAY,GACZ,IAAIrjR,EAAO,GACX,IAAIvZ,EAAEyZ,EAAGzZ,GAAG,GAAI,CACfuZ,EAAKvZ,IAAK,EACV28R,EAAK38R,IAAK,EACV6wB,EAAIA,EAAIl9B,QAAUqM,EAClB48R,EAAUvkS,KAAKikS,EAAQt8R,IACvB,IAAI88R,EAAOf,EAAU3gS,KAAK8H,MAAQ,EAAFlD,EAAI87R,IAEpC,GAAGA,EAAM,GADT/zB,EAAS,EAAF/nQ,EAAO68R,GACG,MAAM,IAAI9hS,MAAM,yBAA2BiF,EAAI,MAAM87R,GACtE,IAAIQ,EAAQQ,GAAO,MAEnB,GAAGvjR,EADHvZ,EAAI+8R,GAAcT,EAAQQ,GAAO/0B,IACrB,MAEb20B,EAAYjjR,GAAK,CAAEkiF,MAAO9qE,EAAKh3B,KAAKmjS,GAAW,CAACJ,KAEjD,OAAOF,EAvLUO,CAAiBX,EAASX,EAAWI,EAAWD,GAElEY,EAAYf,GAAWniS,KAAO,aAC3BiiS,EAAO,GAAKG,IAAkBsB,IAAYR,EAAYd,GAAepiS,KAAO,YAC/EkjS,EAAYX,EAAU,IAAIviS,KAAO,OACjCkjS,EAAYX,UAAYA,EACxBW,EAAYZ,IAAMA,EAGlB,IAAgBqB,EAAQ,GAAIC,EAAY,GAAIC,EAAY,IAkLxD,SAAwB1B,EAAWe,EAAaJ,EAASa,EAAO1B,EAAMvlQ,EAAOknQ,EAAWE,GAIvF,IAHA,IAEwB9jS,EAFpB+jS,EAAgB,EAAGC,EAAML,EAAMxpS,OAAO,EAAE,EACxC8pS,EAASf,EAAYf,GAAW9hS,KAChCjG,EAAI,EAAG8pS,EAAU,EACf9pS,EAAI6pS,EAAO9pS,OAAQC,GAAI,IAAK,CACjC,IAAIm/Q,EAAO0qB,EAAOlkS,MAAM3F,EAAGA,EAAE,KAC7BmnS,GAAUhoB,EAAM,IAChB2qB,EAAU3qB,EAAKioB,WAAW,GAC1BxhS,EAAOmkS,GAAU5qB,EAAK,EAAE2qB,EAAQF,GAChCL,EAAM9kS,KAAKmB,GACX,IAAItC,EAAI,CACPsC,KAAOA,EACPmf,KAAOo6P,EAAKioB,WAAW,GACvBpsC,MAAOmkB,EAAKioB,WAAW,GACvBr7C,EAAOozB,EAAKioB,WAAW,EAAG,KAC1Bn+E,EAAOk2D,EAAKioB,WAAW,EAAG,KAC1Bl+E,EAAOi2D,EAAKioB,WAAW,EAAG,KAC1B4C,MAAO7qB,EAAKioB,WAAW,IACvB1/Q,MAAOy3P,EAAKioB,WAAW,EAAG,KAC1Bt5R,MAAO,EACPrE,KAAM,GAGM,IADD01Q,EAAKioB,WAAW,GAAKjoB,EAAKioB,WAAW,GAAKjoB,EAAKioB,WAAW,GAAKjoB,EAAKioB,WAAW,KAC3E9jS,EAAE2mS,GAAKC,EAAU/qB,EAAMA,EAAKl+P,EAAE,IAEjC,IADDk+P,EAAKioB,WAAW,GAAKjoB,EAAKioB,WAAW,GAAKjoB,EAAKioB,WAAW,GAAKjoB,EAAKioB,WAAW,KAC3E9jS,EAAEmkS,GAAKyC,EAAU/qB,EAAMA,EAAKl+P,EAAE,IAC9C3d,EAAEwK,MAAQqxQ,EAAKioB,WAAW,EAAG,KAC7B9jS,EAAEmG,KAAO01Q,EAAKioB,WAAW,EAAG,KACzB9jS,EAAEmG,KAAO,GAAKnG,EAAEwK,MAAQ,IAAKxK,EAAEmG,KAAOnG,EAAEyhB,KAAO,EAAGzhB,EAAEwK,MAAQw7R,EAAYhmS,EAAEsC,KAAO,IACtE,IAAXtC,EAAEyhB,MACJ4kR,EAAgBrmS,EAAEwK,MACf+5R,EAAO,GAAK8B,IAAkBL,IAAYR,EAAYa,GAAe/jS,KAAO,gBAEtEtC,EAAEmG,MAAQ,MACnBnG,EAAEqyO,QAAU,WACgBh0O,IAAzBmnS,EAAYxlS,EAAEwK,SAAsBg7R,EAAYxlS,EAAEwK,OAASq8R,EAAgBzB,EAASplS,EAAEwK,MAAOg7R,EAAYX,UAAWW,EAAYZ,MACnIY,EAAYxlS,EAAEwK,OAAOlI,KAAOtC,EAAEsC,KAC9BtC,EAAE8jQ,QAAW0hC,EAAYxlS,EAAEwK,OAAO7H,KAAKN,MAAM,EAAErC,EAAEmG,QAEjDnG,EAAEqyO,QAAU,UACTryO,EAAEmG,KAAO,EAAGnG,EAAEmG,KAAO,EAChBkgS,IAAkBL,GAAchmS,EAAEwK,QAAUw7R,GAAcR,EAAYa,KAC7ErmS,EAAE8jQ,QAAUgjC,EAAe9mS,EAAGwlS,EAAYa,GAAe1jS,MAAO6iS,EAAYY,IAAO,IAAIzjS,QAGtF3C,EAAE8jQ,SAAS+/B,GAAU7jS,EAAE8jQ,QAAS,GACnC9kO,EAAM18B,GAAQtC,EACdkmS,EAAU/kS,KAAKnB,IAhOjB+mS,CAAetC,EAAWe,EAAaJ,EAASa,EAAO1B,EAD3C,GACwD2B,EAAWxB,GA6D/E,SAA0BsC,EAAIC,EAAIhB,GAIjC,IAHA,IAAIvpS,EAAI,EAAG+rP,EAAI,EAAG9iC,EAAI,EAAGC,EAAI,EAAG98M,EAAI,EAAGw9R,EAAKL,EAAMxpS,OAC9CyqS,EAAM,GAAIh6N,EAAI,GAEZxwE,EAAI4pS,IAAM5pS,EAAKwqS,EAAIxqS,GAAGwwE,EAAExwE,GAAGA,EAAGuqS,EAAGvqS,GAAGupS,EAAMvpS,GAEhD,KAAMoM,EAAIokE,EAAEzwE,SAAUqM,EAErB2/O,EAAIu+C,EADJtqS,EAAIwwE,EAAEpkE,IACI2/O,EAAG9iC,EAAIqhF,EAAGtqS,GAAGipN,EAAGC,EAAIohF,EAAGtqS,GAAGkpN,EACjCshF,EAAIxqS,KAAOA,KACH,IAAP+rP,GAAyBy+C,EAAIz+C,KAAOA,IAAGy+C,EAAIxqS,GAAKwqS,EAAIz+C,KAC7C,IAAP9iC,GAAYuhF,EAAIvhF,KAAOA,IAAGuhF,EAAIxqS,GAAKwqS,EAAIvhF,MAEjC,IAAPC,IAAuBshF,EAAIthF,GAAKlpN,IACzB,IAAP+rP,GAAY/rP,GAAKwqS,EAAIxqS,KAAMwqS,EAAIz+C,GAAKy+C,EAAIxqS,GAAOwwE,EAAEjoC,YAAYwjN,GAAK3/O,GAAGokE,EAAE/rE,KAAKsnP,KACrE,IAAP9iC,GAAYjpN,GAAKwqS,EAAIxqS,KAAMwqS,EAAIvhF,GAAKuhF,EAAIxqS,GAAOwwE,EAAEjoC,YAAY0gL,GAAK78M,GAAGokE,EAAE/rE,KAAKwkN,IAEhF,IAAIjpN,EAAE,EAAGA,EAAI4pS,IAAM5pS,EAAMwqS,EAAIxqS,KAAOA,KACzB,IAAPipN,GAAyBuhF,EAAIvhF,KAAOA,EAAGuhF,EAAIxqS,GAAKwqS,EAAIvhF,IACxC,IAAP8iC,GAAYy+C,EAAIz+C,KAAOA,IAAGy+C,EAAIxqS,GAAKwqS,EAAIz+C,KAGhD,IAAI/rP,EAAE,EAAGA,EAAI4pS,IAAM5pS,EAClB,GAAkB,IAAfsqS,EAAGtqS,GAAG+kB,KAAT,CAEA,IADA3Y,EAAIpM,IACIwqS,EAAIp+R,GAAI,GACfA,EAAIo+R,EAAIp+R,GACRm+R,EAAGvqS,GAAKuqS,EAAGn+R,GAAK,IAAMm+R,EAAGvqS,SACX,IAANoM,IAAY,IAAMo+R,EAAIp+R,IAAMA,GAAKo+R,EAAIp+R,IAC9Co+R,EAAIxqS,IAAM,EAIX,IADAuqS,EAAG,IAAM,IACLvqS,EAAE,EAAGA,EAAI4pS,IAAM5pS,EACA,IAAfsqS,EAAGtqS,GAAG+kB,OAAyBwlR,EAAGvqS,IAAM,KA7F7CyqS,CAAiBjB,EAAWC,EAAWF,GACvCA,EAAM7kK,QAEN,IAAIphI,EAAI,CACPkmS,UAAWA,EACXC,UAAWA,GAKZ,OADGlxL,GAAWA,EAAQmoJ,MAAKp9P,EAAEo9P,IAAM,CAACtjD,OAAQA,EAAQsrF,QAASA,IACtDplS,EAuFP,SAAS8mS,EAAezhQ,EAAO+hQ,EAAShB,GAKvC,IAJA,IAAI57R,EAAQ66B,EAAM76B,MAAOrE,EAAOk/B,EAAMl/B,KAElCnG,EAAI,GACJupH,EAAM/+G,EACJ47R,GAAQjgS,EAAO,GAAKojH,GAAO,GAChCvpH,EAAEmB,KAAKimS,EAAQ/kS,MAAMknH,EAAM89K,EAAM99K,EAAM89K,EAAOA,IAC9ClhS,GAAQkhS,EACR99K,EAAMs8K,GAAcO,EAAY,EAAN78K,GAE3B,OAAgB,IAAbvpH,EAAEvD,OAAsB6qS,GAAQ,GAC3B7M,EAAQz6R,GAAGqC,MAAM,EAAGgjC,EAAMl/B,MAKnC,SAASo/R,EAAWh8K,EAAKg+K,EAAKnC,EAASR,EAAKC,GAC3C,IAAI33N,EAAI84N,EACR,GAAGz8K,IAAQy8K,GACV,GAAW,IAARuB,EAAW,MAAM,IAAI1jS,MAAM,0CACxB,IAAY,IAAT0lH,EAAyB,CAClC,IAAIg9K,EAASnB,EAAQ77K,GAAMp1F,GAAKywQ,IAAM,GAAG,EACzC,IAAI2B,EAAQ,OACZ,IAAI,IAAI7pS,EAAI,EAAGA,EAAIy3B,IACd+4C,EAAI24N,GAAcU,EAAS,EAAF7pS,MAAUspS,IADhBtpS,EAEvBmoS,EAAU1jS,KAAK+rE,GAEhBq4N,EAAWM,GAAcU,EAAO3B,EAAI,GAAG2C,EAAM,EAAGnC,EAASR,EAAKC,IAKhE,SAASgC,EAAgBzB,EAAS56R,EAAOq6R,EAAWD,EAAKa,GACxD,IAAI9rQ,EAAM,GAAI+rQ,EAAY,GACtBD,IAAMA,EAAO,IACjB,IAAIE,EAAUf,EAAM,EAAG97R,EAAI,EAAG+nQ,EAAK,EACnC,IAAI/nQ,EAAE0B,EAAO1B,GAAG,GAAI,CACnB28R,EAAK38R,IAAK,EACV6wB,EAAIA,EAAIl9B,QAAUqM,EAClB48R,EAAUvkS,KAAKikS,EAAQt8R,IACvB,IAAI88R,EAAOf,EAAU3gS,KAAK8H,MAAQ,EAAFlD,EAAI87R,IAEpC,GAAGA,EAAM,GADT/zB,EAAS,EAAF/nQ,EAAO68R,GACG,MAAM,IAAI9hS,MAAM,yBAA2BiF,EAAI,MAAM87R,GACtE,IAAIQ,EAAQQ,GAAO,MACnB98R,EAAI+8R,GAAcT,EAAQQ,GAAO/0B,GAElC,MAAO,CAACpsK,MAAO9qE,EAAKh3B,KAAKmjS,GAAW,CAACJ,KAmFtC,SAASkB,EAAU/qB,EAAMjxQ,GACxB,OAAO,IAAI8oB,KAA6G,KAAnG8zQ,GAAe3rB,EAAKjxQ,EAAO,GAAG,IAAK1G,KAAK0xC,IAAI,EAAE,IAAI4xP,GAAe3rB,EAAKjxQ,GAAQ,IAAQ,cAiB5G,SAAS68R,EAASC,EAAKh7F,GACtB,IAAI1sM,EAAI0sM,GAAQ,GAAIogB,EAAO9sN,EAAE8sN,MAAQ,aAGrC,GAFI46E,EAAIvB,YAAWuB,EAAIvB,UAAY,IAC/BuB,EAAIxB,YAAWwB,EAAIxB,UAAY,IAChCwB,EAAIvB,UAAU1pS,SAAWirS,EAAIxB,UAAUzpS,OAAQ,MAAM,IAAIoH,MAAM,8BACtC,IAAzB6jS,EAAIvB,UAAU1pS,SAChBirS,EAAIvB,UAAU,GAAKr5E,EAAO,IAC1B46E,EAAIxB,UAAU,GAAK,CAAG5jS,KAAMwqN,EAAMrrM,KAAM,IAEtCzhB,EAAE2nS,QAAOD,EAAIxB,UAAU,GAAGQ,MAAQ1mS,EAAE2nS,OAGxC,SAAkBD,GACjB,IAAIE,EAAK,WACT,IAAGtE,EAAInuK,KAAKuyK,EAAK,IAAME,GAAvB,CACA,IAAIrmS,EAAI+lS,GAAQ,GAAI/lS,EAAE,GAAK,GAAIA,EAAE,GAAKA,EAAE,GAAK,GAAIA,EAAE,GAAK,GACxDmmS,EAAIxB,UAAU/kS,KAAK,CAAGmB,KAAMslS,EAAInmR,KAAM,EAAGqiP,QAAQviQ,EAAG4E,KAAK,EAAGsiP,EAAE,GAAI9iC,EAAE,GAAIC,EAAE,KAC1E8hF,EAAIvB,UAAUhlS,KAAKumS,EAAIvB,UAAU,GAAKyB,GACtCC,EAAYH,IARZI,CAASJ,GAUV,SAASG,EAAYH,EAAKrkS,GACzBokS,EAASC,GAET,IADA,IAAIK,GAAK,EAAO1/R,GAAI,EACZ3L,EAAIgrS,EAAIvB,UAAU1pS,OAAS,EAAGC,GAAK,IAAKA,EAAG,CAClD,IAAIsrS,EAAQN,EAAIxB,UAAUxpS,GAC1B,OAAOsrS,EAAMvmR,MACZ,KAAK,EACDpZ,EAAG0/R,GAAK,GACJL,EAAIxB,UAAU56Q,MAAOo8Q,EAAIvB,UAAU76Q,OAC1C,MACD,KAAK,EAAG,KAAK,EAAG,KAAK,EACpBjjB,GAAI,EACDkB,MAAMy+R,EAAMriF,EAAIqiF,EAAMv/C,EAAIu/C,EAAMpiF,KAAImiF,GAAK,GACzCC,EAAMriF,GAAK,GAAKqiF,EAAMv/C,GAAK,GAAKu/C,EAAMriF,GAAKqiF,EAAMv/C,IAAGs/C,GAAK,GAC5D,MACD,QAASA,GAAK,GAGhB,GAAIA,GAAO1kS,EAAX,CAEA,IAAIoX,EAAM,IAAIiZ,KAAK,KAAM,EAAG,IAAK5qB,EAAI,EACjCnG,EAAO,GACX,IAAIjG,EAAI,EAAGA,EAAIgrS,EAAIvB,UAAU1pS,SAAUC,EACT,IAA1BgrS,EAAIxB,UAAUxpS,GAAG+kB,MACpB9e,EAAKxB,KAAK,CAACumS,EAAIvB,UAAUzpS,GAAIgrS,EAAIxB,UAAUxpS,KAE5C,IAAIA,EAAI,EAAGA,EAAIiG,EAAKlG,SAAUC,EAAG,CAChC,IAAIwqS,EAAM3D,EAAQ5gS,EAAKjG,GAAG,IAE1B,IADA2L,GAAI,EACAS,EAAI,EAAGA,EAAInG,EAAKlG,SAAUqM,EAAMnG,EAAKmG,GAAG,KAAOo+R,IAAK7+R,GAAI,GACxDA,GAAG1F,EAAKxB,KAAK,CAAC+lS,EAAK,CACtB5kS,KAAM83Q,EAAS8sB,GAAKt5R,QAAQ,IAAI,IAChC6T,KAAM,EACNilR,MAAOuB,EACPtB,GAAIlsR,EAAK0pR,GAAI1pR,EACbqpP,QAAS,QAMX,IAFAnhQ,EAAKkG,MAAK,SAASpE,EAAE+hB,GAAK,OA5d3B,SAAiB7I,EAAG1Y,GAEnB,IADA,IAAIwjP,EAAI9qO,EAAErQ,MAAM,KAAMq4M,EAAI1gN,EAAEqI,MAAM,KAC1B5Q,EAAI,EAAGyO,EAAI,EAAG+8R,EAAIhkS,KAAKM,IAAIikP,EAAEhsP,OAAQkpN,EAAElpN,QAASC,EAAIwrS,IAAKxrS,EAAG,CACnE,GAAIyO,EAAIs9O,EAAE/rP,GAAGD,OAASkpN,EAAEjpN,GAAGD,OAAS,OAAO0O,EAC3C,GAAGs9O,EAAE/rP,IAAMipN,EAAEjpN,GAAI,OAAO+rP,EAAE/rP,GAAKipN,EAAEjpN,IAAM,EAAI,EAE5C,OAAO+rP,EAAEhsP,OAASkpN,EAAElpN,OAsda0rS,CAAQ1jS,EAAE,GAAI+hB,EAAE,OACjDkhR,EAAIvB,UAAY,GAAIuB,EAAIxB,UAAY,GAChCxpS,EAAI,EAAGA,EAAIiG,EAAKlG,SAAUC,EAAKgrS,EAAIvB,UAAUzpS,GAAKiG,EAAKjG,GAAG,GAAIgrS,EAAIxB,UAAUxpS,GAAKiG,EAAKjG,GAAG,GAC7F,IAAIA,EAAI,EAAGA,EAAIiG,EAAKlG,SAAUC,EAAG,CAChC,IAAI0rS,EAAMV,EAAIxB,UAAUxpS,GACpBkrS,EAAKF,EAAIvB,UAAUzpS,GAOvB,GALA0rS,EAAI9lS,KAAQ83Q,EAASwtB,GAAIh6R,QAAQ,IAAI,IACrCw6R,EAAI3/C,EAAI2/C,EAAIziF,EAAIyiF,EAAIxiF,IAAMwiF,EAAI1wC,MAAQ,GACtC0wC,EAAIjiS,KAAOiiS,EAAItkC,QAAUskC,EAAItkC,QAAQrnQ,OAAS,EAC9C2rS,EAAI59R,MAAQ,EACZ49R,EAAI1B,MAAS0B,EAAI1B,OAASuB,EACjB,IAANvrS,EACF0rS,EAAIxiF,EAAIjjN,EAAKlG,OAAS,EAAI,GAAK,EAC/B2rS,EAAIjiS,KAAO,EACXiiS,EAAI3mR,KAAO,OACL,GAAmB,KAAhBmmR,EAAGvlS,OAAO,GAAW,CAC9B,IAAIyG,EAAEpM,EAAE,EAAEoM,EAAInG,EAAKlG,QAAgB8mS,EAAQmE,EAAIvB,UAAUr9R,KAAK8+R,IAAjC9+R,GAE7B,IADAs/R,EAAIxiF,EAAI98M,GAAKnG,EAAKlG,QAAU,EAAIqM,EAC5BA,EAAEpM,EAAE,EAAEoM,EAAInG,EAAKlG,QAAgB8mS,EAAQmE,EAAIvB,UAAUr9R,KAAKy6R,EAAQqE,KAAzC9+R,GAC7Bs/R,EAAIziF,EAAI78M,GAAKnG,EAAKlG,QAAU,EAAIqM,EAChCs/R,EAAI3mR,KAAO,OAER8hR,EAAQmE,EAAIvB,UAAUzpS,EAAE,IAAI,KAAO6mS,EAAQqE,KAAKQ,EAAIziF,EAAIjpN,EAAI,GAC/D0rS,EAAI3mR,KAAO,IAMd,SAAS4mR,EAAOX,EAAKzyL,GACpB,IAAIqzL,EAAQrzL,GAAW,GAEvB,GADA4yL,EAAYH,GACS,OAAlBY,EAAMC,SAAmB,OA8nB7B,SAAmBb,EAAKzyL,GACvB,IAAIqzL,EAAQrzL,GAAW,GACnBntF,EAAM,GAAI0gR,EAAQ,GAClBxoS,EAAIsnS,GAAQ,GACZnjQ,EAAUmkQ,EAAM5yB,YAAc,EAAI,EAGlCh5Q,EAAI,EAAGoM,EAAI,EAEX2/R,EAAW,EAAGC,EAAO,EACrB57E,EAAO46E,EAAIvB,UAAU,GAAInrM,EAAK8xH,EAAM67E,EAAKjB,EAAIxB,UAAU,GACvD0C,EAAO,GACPC,EAAQ,EAEZ,IAAInsS,EAAI,EAAGA,EAAIgrS,EAAIvB,UAAU1pS,SAAUC,EAEtC,GADAs+F,EAAK0sM,EAAIvB,UAAUzpS,GAAG2F,MAAMyqN,EAAKrwN,SAASksS,EAAKjB,EAAIxB,UAAUxpS,IACtDyJ,MAASwiS,EAAG7kC,SAAiB,YAAN9oK,EAA9B,CACA,IAAIxwF,EAAQi+R,EAGRK,EAAUxB,GAAQtsM,EAAGv+F,QACzB,IAAIqM,EAAI,EAAGA,EAAIkyF,EAAGv+F,SAAUqM,EAAGggS,EAAQpF,YAAY,EAAsB,IAAnB1oM,EAAGrgE,WAAW7xB,IACpEggS,EAAUA,EAAQzmS,MAAM,EAAGymS,EAAQnrR,GACnCirR,EAAKF,GAAQ5F,EAAMnpQ,IAAIgvQ,EAAG7kC,QAAS,GAEnC,IAAIilC,EAASJ,EAAG7kC,QACH,GAAV3/N,IAAa4kQ,EAASC,EAAgBD,KAGzC/oS,EAAIsnS,GAAQ,KACV5D,YAAY,EAAG,UACjB1jS,EAAE0jS,YAAY,EAAG,IACjB1jS,EAAE0jS,YAAY,EA5BmC,GA6BjD1jS,EAAE0jS,YAAY,EAAGv/P,GAEdwkQ,EAAGxE,GAAIX,EAAexjS,EAAG2oS,EAAGxE,IAC1BnkS,EAAE0jS,YAAY,EAAG,GACtB1jS,EAAE0jS,aAAa,EAAqBkF,EAAKF,IACzC1oS,EAAE0jS,YAAY,EAAsBqF,EAAOtsS,QAC3CuD,EAAE0jS,YAAY,EAAsBiF,EAAG7kC,QAAQrnQ,QAC/CuD,EAAE0jS,YAAY,EAAGoF,EAAQrsS,QACzBuD,EAAE0jS,YAAY,EAAG,GAEjB+E,GAAYzoS,EAAEvD,OACdqrB,EAAI3mB,KAAKnB,GACTyoS,GAAYK,EAAQrsS,OACpBqrB,EAAI3mB,KAAK2nS,GAGTL,GAAYM,EAAOtsS,OACnBqrB,EAAI3mB,KAAK4nS,IAaT/oS,EAAIsnS,GAAQ,KACV5D,YAAY,EAAG,UACjB1jS,EAAE0jS,YAAY,EAAG,GACjB1jS,EAAE0jS,YAAY,EAAG,IACjB1jS,EAAE0jS,YAAY,EA/DmC,GAgEjD1jS,EAAE0jS,YAAY,EAAGv/P,GACjBnkC,EAAE0jS,YAAY,EAAG,GACjB1jS,EAAE0jS,aAAa,EAAGkF,EAAKF,IAEvB1oS,EAAE0jS,YAAY,EAAGqF,EAAOtsS,QACxBuD,EAAE0jS,YAAY,EAAGiF,EAAG7kC,QAAQrnQ,QAC5BuD,EAAE0jS,YAAY,EAAGoF,EAAQrsS,QACzBuD,EAAE0jS,YAAY,EAAG,GACjB1jS,EAAE0jS,YAAY,EAAG,GACjB1jS,EAAE0jS,YAAY,EAAG,GACjB1jS,EAAE0jS,YAAY,EAAG,GACjB1jS,EAAE0jS,YAAY,EAAG,GACjB1jS,EAAE0jS,YAAY,EAAGl5R,GAEjBq+R,GAAS7oS,EAAE2d,EACX6qR,EAAMrnS,KAAKnB,GACX6oS,GAASC,EAAQrsS,OACjB+rS,EAAMrnS,KAAK2nS,KACTJ,EAcH,OAVA1oS,EAAIsnS,GAAQ,KACV5D,YAAY,EAAG,WACjB1jS,EAAE0jS,YAAY,EAAG,GACjB1jS,EAAE0jS,YAAY,EAAG,GACjB1jS,EAAE0jS,YAAY,EAAGgF,GACjB1oS,EAAE0jS,YAAY,EAAGgF,GACjB1oS,EAAE0jS,YAAY,EAAGmF,GACjB7oS,EAAE0jS,YAAY,EAAG+E,GACjBzoS,EAAE0jS,YAAY,EAAG,GAEVjJ,EAAQ,CAAEA,EAAQ,GAAQA,EAAQ+N,GAAQxoS,IAluBdipS,CAAUvB,EAAKY,GAClD,IAAI7/C,EAAI,SAAUi/C,GAEjB,IADA,IAAIwB,EAAY,EAAGC,EAAW,EACtBzsS,EAAI,EAAGA,EAAIgrS,EAAIxB,UAAUzpS,SAAUC,EAAG,CAC7C,IAAIwjC,EAAOwnQ,EAAIxB,UAAUxpS,GACzB,GAAIwjC,EAAK4jO,QAAT,CACH,IAAIs9B,EAAOlhQ,EAAK4jO,QAAQrnQ,OAClB2kS,EAAO,IACNA,EAAO,KAAQ8H,GAAc9H,EAAO,IAAS,EAC3C+H,GAAa/H,EAAO,KAAW,IAStC,IANA,IAAI+D,EAAWuC,EAAIvB,UAAU1pS,OAAQ,GAAM,EAEvC2sS,EAAYF,EAAY,KAAS,EACjCG,GAFYH,EAAY,GAAM,GAERC,EAAWhE,EAAUiE,EAC3CE,EAAWD,EAAW,KAAS,EAC/BE,EAAYD,GAAW,IAAM,EAAIplS,KAAK4C,MAAMwiS,EAAQ,KAAK,KACrDD,EAAWC,EAAUC,EAAY,KAAS,EAAKD,GAASC,IAAcD,GAAW,IAAM,EAAIplS,KAAK4C,MAAMwiS,EAAQ,KAAK,KAC3H,IAAI7gD,EAAK,CAAC,EAAG8gD,EAAWD,EAASF,EAAUjE,EAASgE,EAAUD,EAAW,GAGzE,OAFAxB,EAAIxB,UAAU,GAAG//R,KAAO+iS,GAAa,EACrCzgD,EAAE,IAAMi/C,EAAIxB,UAAU,GAAG17R,MAAMi+O,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,KAAMA,EAAE,GAAG,GAAM,GACpEA,EArBA,CAsBLi/C,GACC1nS,EAAIsnS,GAAQ7+C,EAAE,IAAM,GACpB/rP,EAAI,EAAG+/R,EAAI,EAEd,IAAI//R,EAAI,EAAGA,EAAI,IAAKA,EAAGsD,EAAE0jS,YAAY,EAAG8F,EAAW9sS,IACnD,IAAIA,EAAI,EAAGA,EAAI,IAAKA,EAAGsD,EAAE0jS,YAAY,EAAG,GAMxC,IALA1jS,EAAE0jS,YAAY,EAAG,IACjB1jS,EAAE0jS,YAAY,EAAG,GACjB1jS,EAAE0jS,YAAY,EAAG,OACjB1jS,EAAE0jS,YAAY,EAAG,GACjB1jS,EAAE0jS,YAAY,EAAG,GACbhnS,EAAI,EAAGA,EAAI,IAAKA,EAAGsD,EAAE0jS,YAAY,EAAG,GAUxC,IATA1jS,EAAE0jS,YAAY,EAAG,GACjB1jS,EAAE0jS,YAAY,EAAGj7C,EAAE,IACnBzoP,EAAE0jS,YAAY,EAAGj7C,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAK,GAC7CzoP,EAAE0jS,YAAY,EAAG,GACjB1jS,EAAE0jS,YAAY,EAAG,MACjB1jS,EAAE0jS,YAAY,EAAGj7C,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAK,EAAGu9C,GAChDhmS,EAAE0jS,YAAY,EAAGj7C,EAAE,IACnBzoP,EAAE0jS,aAAa,EAAGj7C,EAAE,GAAKA,EAAE,GAAK,EAAGu9C,GACnChmS,EAAE0jS,YAAY,EAAGj7C,EAAE,IACf/rP,EAAI,EAAGA,EAAI,MAAOA,EAAGsD,EAAE0jS,aAAa,EAAGhnS,EAAI+rP,EAAE,GAAKA,EAAE,GAAK/rP,GAAK,GAEnE,GAAG+rP,EAAE,GACJ,IAAIg0C,EAAI,EAAGA,EAAIh0C,EAAE,KAAMg0C,EAAG,CACzB,KAAM//R,EAAI,IAAU,IAAJ+/R,IAAW//R,EAAGsD,EAAE0jS,aAAa,EAAGhnS,EAAI+rP,EAAE,GAAKA,EAAE,GAAK/rP,GAAK,GACvEsD,EAAE0jS,aAAa,EAAGjH,IAAMh0C,EAAE,GAAK,EAAIu9C,EAAavJ,EAAI,GAGtD,IAAIgN,EAAU,SAAS56O,GACtB,IAAI4tO,GAAK5tO,EAAGnyD,EAAE+/R,EAAE,IAAK//R,EAAGsD,EAAE0jS,aAAa,EAAGhnS,EAAE,GACzCmyD,MAAOnyD,EAAGsD,EAAE0jS,aAAa,EAAGsC,KAGhC,IADAvJ,EAAI//R,EAAI,EACJ+/R,GAAGh0C,EAAE,GAAI/rP,EAAE+/R,IAAK//R,EAAGsD,EAAE0jS,aAAa,EAAGgG,EAAOC,SAChD,IAAIlN,GAAGh0C,EAAE,GAAI/rP,EAAE+/R,IAAK//R,EAAGsD,EAAE0jS,aAAa,EAAGgG,EAAOE,SAChDH,EAAQhhD,EAAE,IACVghD,EAAQhhD,EAAE,IAGV,IAFA,IAAI3/O,EAAI,EAAGs4R,EAAO,EACdlhQ,EAAOwnQ,EAAIxB,UAAU,GACnBp9R,EAAI4+R,EAAIxB,UAAUzpS,SAAUqM,GACjCo3B,EAAOwnQ,EAAIxB,UAAUp9R,IACZg7P,WACXs9B,EAAOlhQ,EAAK4jO,QAAQrnQ,QACR,OACVyjC,EAAK11B,MAAQiyR,EACbgN,EAASrI,EAAO,KAAW,KAG5B,IADAqI,EAAShhD,EAAE,GAAK,GAAM,GACV,IAANzoP,EAAE2d,GAAW3d,EAAE0jS,aAAa,EAAGgG,EAAO1D,YAE5C,IADAvJ,EAAI//R,EAAI,EACJoM,EAAI,EAAGA,EAAI4+R,EAAIxB,UAAUzpS,SAAUqM,GACtCo3B,EAAOwnQ,EAAIxB,UAAUp9R,IACZg7P,YACXs9B,EAAOlhQ,EAAK4jO,QAAQrnQ,SACN2kS,GAAQ,OACpBlhQ,EAAK11B,MAAQiyR,EACbgN,EAASrI,EAAO,IAAS,KAE1B,KAAY,IAANphS,EAAE2d,GAAW3d,EAAE0jS,aAAa,EAAGgG,EAAO1D,YAC5C,IAAItpS,EAAI,EAAGA,EAAI+rP,EAAE,IAAI,IAAK/rP,EAAG,CAC5B,IAAIkrS,EAAKF,EAAIvB,UAAUzpS,GACvB,GAAIkrS,GAAoB,IAAdA,EAAGnrS,OAAb,CAMAyjC,EAAOwnQ,EAAIxB,UAAUxpS,GACZ,IAANA,IAASwjC,EAAK11B,MAAQ01B,EAAK/5B,KAAO+5B,EAAK11B,MAAQ,EAAIw7R,GACtD,IAAI6D,EAAa,IAANntS,GAAW4rS,EAAMx7E,MAAS5sL,EAAK59B,KAS1C,GARA8+R,EAAO,GAAGyI,EAAIptS,OAAO,GACrBuD,EAAE0jS,YAAY,GAAImG,EAAK,WACvB7pS,EAAE0jS,YAAY,EAAGtC,GACjBphS,EAAE0jS,YAAY,EAAGxjQ,EAAKze,MACtBzhB,EAAE0jS,YAAY,EAAGxjQ,EAAKw3N,OACtB13P,EAAE0jS,aAAa,EAAGxjQ,EAAKuoN,GACvBzoP,EAAE0jS,aAAa,EAAGxjQ,EAAKylL,GACvB3lN,EAAE0jS,aAAa,EAAGxjQ,EAAK0lL,GACnB1lL,EAAKwmQ,MACJ1mS,EAAE0jS,YAAY,GAAIxjQ,EAAKwmQ,MAAO,YADnB,IAAI59R,EAAI,EAAGA,EAAI,IAAKA,EAAG9I,EAAE0jS,YAAY,EAAG,GAExD1jS,EAAE0jS,YAAY,EAAGxjQ,EAAK9b,OAAS,GAC/BpkB,EAAE0jS,YAAY,EAAG,GAAI1jS,EAAE0jS,YAAY,EAAG,GACtC1jS,EAAE0jS,YAAY,EAAG,GAAI1jS,EAAE0jS,YAAY,EAAG,GACtC1jS,EAAE0jS,YAAY,EAAGxjQ,EAAK11B,OACtBxK,EAAE0jS,YAAY,EAAGxjQ,EAAK/5B,MAAOnG,EAAE0jS,YAAY,EAAG,OAvB9C,CACC,IAAI56R,EAAI,EAAGA,EAAI,KAAMA,EAAG9I,EAAE0jS,YAAY,EAAG,GACzC,IAAI56R,EAAI,EAAGA,EAAI,IAAKA,EAAG9I,EAAE0jS,YAAY,GAAI,GACzC,IAAI56R,EAAI,EAAGA,EAAI,KAAMA,EAAG9I,EAAE0jS,YAAY,EAAG,IAsB3C,IAAIhnS,EAAI,EAAGA,EAAIgrS,EAAIxB,UAAUzpS,SAAUC,EAExC,IADEwjC,EAAOwnQ,EAAIxB,UAAUxpS,IACfyJ,MAAQ,KAAQ,CAErB,IADAnG,EAAE2d,EAAKuiB,EAAK11B,MAAM,GAAM,EACpB1B,EAAI,EAAGA,EAAIo3B,EAAK/5B,OAAQ2C,EAAG9I,EAAE0jS,YAAY,EAAGxjQ,EAAK4jO,QAAQh7P,IAC7D,KAAU,IAAJA,IAAaA,EAAG9I,EAAE0jS,YAAY,EAAG,GAGzC,IAAIhnS,EAAI,EAAGA,EAAIgrS,EAAIxB,UAAUzpS,SAAUC,EAExC,IADEwjC,EAAOwnQ,EAAIxB,UAAUxpS,IACfyJ,KAAO,GAAK+5B,EAAK/5B,KAAO,KAAQ,CACrC,IAAI2C,EAAI,EAAGA,EAAIo3B,EAAK/5B,OAAQ2C,EAAG9I,EAAE0jS,YAAY,EAAGxjQ,EAAK4jO,QAAQh7P,IAC7D,KAAU,GAAJA,IAAYA,EAAG9I,EAAE0jS,YAAY,EAAG,GAGxC,KAAM1jS,EAAE2d,EAAI3d,EAAEvD,QAAQuD,EAAE0jS,YAAY,EAAG,GACvC,OAAO1jS,EA7nBR1D,EAAQm1C,QAAU,QAopBlB,IA+CIq4P,EA/CAzC,EAAO,GAGPrB,GAAc,EAEdhB,EAAmB,mBACnBwE,EAAa,CAAC,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,KACxDvB,EAAe,mCACfyB,EAAS,CAEZK,YAAa,EACbJ,SAAU,EACVC,SAAU,EACV5D,WAAYA,EACZgE,UAAW,EAEXhF,iBAAkBA,EAClBiF,qBAAsB,OACtBC,WAAY,EACZC,UAAW,EACXlC,aAAcA,EAEdmC,WAAY,CAAC,UAAU,UAAU,SAAS,YAAY,WAAW,SASlE,SAAS7P,EAAIv6R,GAEZ,IADA,IAAI8nB,EAAM,IAAIlrB,MAAMoD,EAAEvD,QACdC,EAAI,EAAGA,EAAIsD,EAAEvD,SAAUC,EAAGorB,EAAIprB,GAAKwN,OAAO0vB,aAAa55B,EAAEtD,IACjE,OAAOorB,EAAI9Z,KAAK,IA+BjB,SAASg7R,EAAgB5B,GACxB,OAAO0C,EAAQA,EAAMO,eAAejD,GAAWkD,EAASlD,GAezD,IAbA,IAQoBjlS,EAAS0L,EARzB08R,EAAa,CAAE,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,IAG7EC,EAAS,CAAI,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EAAI,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,KAGvJC,EAAS,CAAG,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAAO,MAAO,OAIzJC,EAAyC,oBAAfxhS,WAE1ByhS,EAAWD,EAAmB,IAAIxhS,WAAW,KAAQ,GACjDgkE,EAAI,EAAGA,EAAI,MAAUA,EAAGy9N,EAASz9N,SALZr/D,EAAkG,MAAlGA,EAA0B,SAAnC1L,EAKqC+qE,IALhB,EAAI/qE,GAAG,IAAsC,QAAjBA,GAAG,EAAIA,GAAG,MAA+B,GAAO0L,GAAG,EAAIA,IAO5H,SAAS+8R,EAAWzoS,EAAG6C,GACtB,IAAI6lS,EAAMF,EAAa,IAAJxoS,GACnB,OAAG6C,GAAK,EAAU6lS,IAAS,EAAE7lS,GAC7B6lS,EAAOA,GAAO,EAAKF,EAAUxoS,GAAG,EAAG,KAChC6C,GAAK,GAAW6lS,IAAS,GAAG7lS,GAC/B6lS,EAAOA,GAAO,EAAKF,EAAUxoS,GAAG,GAAI,QACpB,GAAG6C,GAIpB,SAAS8lS,EAAYnxQ,EAAKuiO,GAAM,IAAIrtM,EAAQ,EAAHqtM,EAAOn7M,EAAKm7M,IAAK,EAAI,OAASviO,EAAIonB,IAAI8N,GAAK,EAAI,EAAIl1B,EAAIonB,EAAE,IAAI,MAAM8N,EAAI,EAChH,SAASk8O,EAAYpxQ,EAAKuiO,GAAM,IAAIrtM,EAAQ,EAAHqtM,EAAOn7M,EAAKm7M,IAAK,EAAI,OAASviO,EAAIonB,IAAI8N,GAAK,EAAI,EAAIl1B,EAAIonB,EAAE,IAAI,MAAM8N,EAAI,EAEhH,SAASm8O,EAAYrxQ,EAAKuiO,GAAM,IAAIrtM,EAAQ,EAAHqtM,EAAOn7M,EAAKm7M,IAAK,EAAI,OAASviO,EAAIonB,IAAI8N,GAAK,EAAI,EAAIl1B,EAAIonB,EAAE,IAAI,MAAM8N,EAAI,GAChH,SAASo8O,EAAYtxQ,EAAKuiO,GAAM,IAAIrtM,EAAQ,EAAHqtM,EAAOn7M,EAAKm7M,IAAK,EAAI,OAASviO,EAAIonB,IAAI8N,GAAK,EAAI,EAAIl1B,EAAIonB,EAAE,IAAI,MAAM8N,EAAI,IAGhH,SAASq8O,EAAYvxQ,EAAKuiO,EAAI/5P,GAC7B,IAAI0sD,EAAQ,EAAHqtM,EAAOn7M,EAAKm7M,IAAK,EAAI74P,GAAM,GAAGlB,GAAG,EACtC8b,EAAI0b,EAAIonB,KAAO8N,EACnB,OAAG1sD,EAAI,EAAI0sD,EAAU5wC,EAAI5a,GACzB4a,GAAK0b,EAAIonB,EAAE,IAAK,EAAE8N,EACf1sD,EAAI,GAAK0sD,EAAU5wC,EAAI5a,GAC1B4a,GAAK0b,EAAIonB,EAAE,IAAK,GAAG8N,EAChB1sD,EAAI,GAAK0sD,EAAU5wC,EAAI5a,GAC1B4a,GAAK0b,EAAIonB,EAAE,IAAK,GAAG8N,GACRxrD,IAIZ,SAAS8nS,EAAQnmS,EAAGwlK,GACnB,IAAIi+E,EAAIzjP,EAAEvI,OAAQ2vE,EAAI,EAAEq8K,EAAIj+E,EAAK,EAAEi+E,EAAIj+E,EAAK,EAAG9tK,EAAI,EACnD,GAAG+rP,GAAKj+E,EAAI,OAAOxlK,EACnB,GAAG8qQ,EAAS,CACX,IAAI9vQ,EAAIm6R,EAAe/tN,GAEvB,GAAGpnE,EAAE2tM,KAAM3tM,EAAE2tM,KAAK3yM,QACb,KAAMtD,EAAIsI,EAAEvI,SAAUC,EAAGsD,EAAEtD,GAAKsI,EAAEtI,GACvC,OAAOsD,EACD,GAAG0qS,EAAkB,CAC3B,IAAI3lS,EAAI,IAAImE,WAAWkjE,GACvB,GAAGrnE,EAAE9B,IAAK8B,EAAE9B,IAAI+B,QACX,KAAMtI,EAAIsI,EAAEvI,SAAUC,EAAGqI,EAAErI,GAAKsI,EAAEtI,GACvC,OAAOqI,EAGR,OADAC,EAAEvI,OAAS2vE,EACJpnE,EAIR,SAASomS,EAAgBjpS,GAExB,IADA,IAAInC,EAAI,IAAIpD,MAAMuF,GACVzF,EAAI,EAAGA,EAAIyF,IAAKzF,EAAGsD,EAAEtD,GAAK,EAClC,OAAOsD,EACP,IACGqrS,EADCf,GACDe,EACI,SAAoB1oS,EAAMmlB,GAEhC,IADA,IAAIwjR,EAAO,EACLA,EAAO3oS,EAAKlG,QAAQ,CACzB,IAAIgsP,EAAIvkP,KAAKM,IAAI,MAAQ7B,EAAKlG,OAAS6uS,GACnCvqP,EAAIuqP,EAAO7iD,GAAK9lP,EAAKlG,OAKzB,IAHAqrB,EAAI47Q,YAAY,GAAI3iP,GACpBj5B,EAAI47Q,YAAY,EAAGj7C,GACnB3gO,EAAI47Q,YAAY,EAAU,OAALj7C,GACfA,KAAM,GAAG3gO,EAAIA,EAAInK,KAAOhb,EAAK2oS,KAEpC,OAAOxjR,EAAInK,GAIN,SAAShb,GACf,IAAIg3B,EAAM2tQ,GAAQ,GAAGpjS,KAAK8H,MAAkB,IAAZrJ,EAAKlG,SACjC8uS,EAAMF,EAAY1oS,EAAMg3B,GAC5B,OAAOA,EAAIt3B,MAAM,EAAGkpS,KAMrB,SAASxV,EAAWyV,EAAOC,EAAMC,GAChC,IAAIC,EAAS,EAAG98O,EAAI,EAAGnyD,EAAI,EAAGoM,EAAI,EAAG8iS,EAAQ,EAAGnjD,EAAI+iD,EAAM/uS,OAEtD4vR,EAAYqe,EAAmB,IAAI74Q,YAAY,IAAMu5Q,EAAgB,IACzE,IAAI1uS,EAAI,EAAGA,EAAI,KAAMA,EAAG2vR,EAAS3vR,GAAK,EAEtC,IAAIA,EAAI+rP,EAAG/rP,EAAIgvS,IAAOhvS,EAAG8uS,EAAM9uS,GAAK,EACpC+rP,EAAI+iD,EAAM/uS,OAEV,IAAIovS,EAAQnB,EAAmB,IAAI74Q,YAAY42N,GAAK2iD,EAAgB3iD,GAGpE,IAAI/rP,EAAI,EAAGA,EAAI+rP,IAAK/rP,EACnB2vR,EAAUx9N,EAAI28O,EAAM9uS,MACjBivS,EAAS98O,IAAG88O,EAAS98O,GACxBg9O,EAAMnvS,GAAK,EAGZ,IADA2vR,EAAS,GAAK,EACV3vR,EAAI,EAAGA,GAAKivS,IAAUjvS,EAAG2vR,EAAS3vR,EAAE,IAAOkvS,EAASA,EAAQvf,EAAS3vR,EAAE,IAAK,EAChF,IAAIA,EAAI,EAAGA,EAAI+rP,IAAK/rP,EAEP,IADZkvS,EAAQJ,EAAM9uS,MACCmvS,EAAMnvS,GAAK2vR,EAASuf,EAAM,OAI1C,IAAIE,EAAQ,EACZ,IAAIpvS,EAAI,EAAGA,EAAI+rP,IAAK/rP,EAEnB,GAAY,IADZovS,EAAQN,EAAM9uS,IAGb,IADAkvS,EAAQhB,EAAWiB,EAAMnvS,GAAIivS,IAAUA,EAAOG,EAC1ChjS,GAAK,GAAI6iS,EAAS,EAAIG,GAAU,EAAGhjS,GAAG,IAAKA,EAC9C2iS,EAAKG,EAAO9iS,GAAGgjS,GAAiB,GAANA,EAAapvS,GAAG,EAG7C,OAAOivS,EAGR,IAAII,GAAWrB,EAAmB,IAAI74Q,YAAY,KAAOu5Q,EAAgB,KACrEY,GAAWtB,EAAmB,IAAI74Q,YAAY,IAAOu5Q,EAAgB,IACzE,IAAIV,EAAkB,CACrB,IAAI,IAAIhuS,GAAI,EAAGA,GAAI,MAAOA,GAAGqvS,GAASrvS,IAAK,EAC3C,IAAIA,GAAI,EAAGA,GAAI,KAAMA,GAAGsvS,GAAStvS,IAAK,GAEvC,WAGC,IAFA,IAAIuvS,EAAQ,GACRvvS,EAAI,EACHA,EAAE,GAAIA,IAAKuvS,EAAM9qS,KAAK,GAC3B40R,EAAWkW,EAAOD,GAAU,IAE5B,IAAIR,EAAQ,GAEZ,IADA9uS,EAAI,EACEA,GAAG,IAAKA,IAAK8uS,EAAMrqS,KAAK,GAC9B,KAAMzE,GAAG,IAAKA,IAAK8uS,EAAMrqS,KAAK,GAC9B,KAAMzE,GAAG,IAAKA,IAAK8uS,EAAMrqS,KAAK,GAC9B,KAAMzE,GAAG,IAAKA,IAAK8uS,EAAMrqS,KAAK,GAC9B40R,EAAWyV,EAAOO,GAAU,KAZ7B,GAeA,IAAIG,GAAWxB,EAAmB,IAAI74Q,YAAY,OAASu5Q,EAAgB,OACvEe,GAAWzB,EAAmB,IAAI74Q,YAAY,OAASu5Q,EAAgB,OACvEgB,GAAW1B,EAAmB,IAAI74Q,YAAY,KAASu5Q,EAAgB,KACvEiB,GAAY,EAAGC,GAAY,EAG/B,SAASC,GAAI5pS,EAAM2oS,GAElB,IAAIkB,EAAQxB,EAAYroS,EAAM2oS,GAAQ,IAClCmB,EAASzB,EAAYroS,EADkB2oS,GAAQ,GACZ,EACnCoB,EAxIL,SAAqB/yQ,EAAKuiO,GAAM,IAAIrtM,EAAQ,EAAHqtM,EAAOn7M,EAAKm7M,IAAK,EAAI,OAASviO,EAAIonB,IAAI8N,GAAK,EAAI,EAAIl1B,EAAIonB,EAAE,IAAI,MAAM8N,EAAI,GAwIlG89O,CAAYhqS,EADiB2oS,GAAQ,GACX,EAAGA,GAAQ,EAUlD,IATA,IAAIz8O,EAAI,EAGJ28O,EAAQd,EAAmB,IAAIxhS,WAAW,IAAMkiS,EAAgB,IAChES,EAAQ,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAChEF,EAAS,EACTtf,EAAYqe,EAAmB,IAAIxhS,WAAW,GAAKkiS,EAAgB,GACnElW,EAAYwV,EAAmB,IAAIxhS,WAAW,GAAKkiS,EAAgB,GACnE3iD,EAAI+iD,EAAM/uS,OACNC,EAAI,EAAGA,EAAIgwS,IAAUhwS,EAC5B8uS,EAAMjB,EAAW7tS,IAAMmyD,EAAIk8O,EAAYpoS,EAAM2oS,GAC1CK,EAAS98O,IAAG88O,EAAS98O,GACxBw9N,EAASx9N,KACTy8O,GAAQ,EAIT,IAAIM,EAAQ,EAEZ,IADAvf,EAAS,GAAK,EACV3vR,EAAI,EAAGA,GAAKivS,IAAUjvS,EAAGw4R,EAAUx4R,GAAKkvS,EAASA,EAAQvf,EAAS3vR,EAAE,IAAK,EAC7E,IAAIA,EAAI,EAAGA,EAAI+rP,IAAK/rP,EAA4B,IAArBkvS,EAAQJ,EAAM9uS,MAAUmvS,EAAMnvS,GAAKw4R,EAAU0W,MAExE,IAAIE,EAAQ,EACZ,IAAIpvS,EAAI,EAAGA,EAAI+rP,IAAK/rP,EAEnB,GAAY,IADZovS,EAAQN,EAAM9uS,IACC,CACdkvS,EAAQjB,EAASkB,EAAMnvS,KAAM,EAAEovS,EAC/B,IAAI,IAAIhjS,GAAK,GAAI,EAAEgjS,GAAQ,EAAGhjS,GAAG,IAAKA,EAAGsjS,GAASR,EAAO9iS,GAAGgjS,GAAiB,EAANA,EAAYpvS,GAAG,EAKxF,IAAIkwS,EAAS,GAEb,IADAjB,EAAS,EACHiB,EAAOnwS,OAAS+vS,EAAQC,GAG7B,OADAnB,GAAgB,GADhBM,EAAQQ,GAASnB,EAAYtoS,EAAM2oS,KAE3BM,KAAW,GAClB,KAAK,GAGJ,IAFA/8O,EAAI,EAAIi8O,EAAYnoS,EAAM2oS,GAAOA,GAAQ,EACzCM,EAAQgB,EAAOA,EAAOnwS,OAAS,GACzBoyD,KAAM,GAAG+9O,EAAOzrS,KAAKyqS,GAC3B,MACD,KAAK,GAEJ,IADA/8O,EAAI,EAAIk8O,EAAYpoS,EAAM2oS,GAAOA,GAAQ,EACnCz8O,KAAM,GAAG+9O,EAAOzrS,KAAK,GAC3B,MACD,KAAK,GAEJ,IADA0tD,EAAI,GAAKo8O,EAAYtoS,EAAM2oS,GAAOA,GAAQ,EACpCz8O,KAAO,GAAG+9O,EAAOzrS,KAAK,GAC5B,MACD,QACCyrS,EAAOzrS,KAAKyqS,GACTD,EAASC,IAAOD,EAASC,GAM/B,IAAIiB,EAAKD,EAAOvqS,MAAM,EAAGmqS,GAAQM,EAAKF,EAAOvqS,MAAMmqS,GACnD,IAAI9vS,EAAI8vS,EAAO9vS,EAAI,MAAOA,EAAGmwS,EAAGnwS,GAAK,EACrC,IAAIA,EAAI+vS,EAAQ/vS,EAAI,KAAMA,EAAGowS,EAAGpwS,GAAK,EAGrC,OAFA2vS,GAAYtW,EAAW8W,EAAIX,GAAU,KACrCI,GAAYvW,EAAW+W,EAAIX,GAAU,IAC9Bb,EAmFR,SAASyB,GAAS3F,EAAS4F,GAC1B,IACIllR,EAjFL,SAAiBnlB,EAAMqqS,GAEtB,GAAc,GAAXrqS,EAAK,MAAuB,EAAVA,EAAK,IAAa,MAAO,CAACu3R,EAAY8S,GAAM,GAajE,IAVA,IAAI1B,EAAO,EAGPxxF,EAAS,EAETivF,EAAS5O,EAAe6S,GAAa,GAAG,IACxCC,EAAO,EACPC,EAAKnE,EAAOtsS,SAAS,EACrB0wS,EAAY,EAAGC,EAAY,EAEX,IAAN,EAAPtzF,IAEN,GADAA,EAASixF,EAAYpoS,EAAM2oS,GAAOA,GAAQ,EACtCxxF,IAAW,GAAM,EAuBrB,IATWA,IAAW,GAAM,GAE3BqzF,EAAY,EAAGC,EAAY,IAG3B9B,EAAOiB,GAAI5pS,EAAM2oS,GACjB6B,EAAYd,GAAWe,EAAYd,KAEhCU,GAAQE,EAAKD,EAAO,QAAkDC,GAAxCnE,EAASoC,EAAQpC,EAAQkE,EAAO,QAAoBxwS,UAC9E,CAEP,IAAIoyR,EAAOqc,EAAYvoS,EAAM2oS,EAAM6B,GAC/B52C,EAAQz8C,IAAS,GAAM,EAAIiyF,GAASld,GAAQqd,GAASrd,GAGzD,GAFAyc,GAAe,GAAP/0C,EAEiB,KAFNA,KAAU,KAEjB,EAAG,KAAawyC,EAAOkE,KAAU12C,MACxC,IAAW,KAARA,EAAa,MAGpB,IAAI82C,GADJ92C,GAAQ,KACa,EAAK,EAAMA,EAAK,GAAI,EAAO82C,EAAS,IAAGA,EAAS,GACrE,IAAItJ,EAAMkJ,EAAOzC,EAAOj0C,GAErB82C,EAAS,IACXtJ,GAAOmH,EAAYvoS,EAAM2oS,EAAM+B,GAC/B/B,GAAQ+B,GAITxe,EAAOqc,EAAYvoS,EAAM2oS,EAAM8B,GAE/B9B,GAAe,IADf/0C,EAAQz8C,IAAS,GAAM,EAAIkyF,GAASnd,GAAQsd,GAAStd,IAErD,IAAIye,GADe/2C,KAAU,GACR,EAAI,EAAKA,EAAK,GAAI,EACnCg3C,EAAM9C,EAAOl0C,GASjB,IAPG+2C,EAAS,IACXC,GAAOrC,EAAYvoS,EAAM2oS,EAAMgC,GAC/BhC,GAAQgC,IAILN,GAAOE,EAAKnJ,IAAsCmJ,GAA/BnE,EAASoC,EAAQpC,EAAQhF,IAAkBtnS,QAC5DwwS,EAAOlJ,GAAOgF,EAAOkE,GAAQlE,EAAOkE,EAAOM,KAAQN,OAvD3D,CAEW,EAAP3B,IAAUA,GAAQ,GAAU,EAALA,IAE1B,IAAI9gI,EAAK7nK,EAAK2oS,IAAO,GAAK3oS,EAAgB,GAAV2oS,IAAO,KAAO,EAI9C,GAHAA,GAAQ,IAEJ0B,GAAOE,EAAKD,EAAOziI,IAA2C0iI,GAArCnE,EAASoC,EAAQpC,EAAQkE,EAAOziI,IAAiB/tK,QACtD,mBAAdkG,EAAKgwM,KAEdhwM,EAAKgwM,KAAKo2F,EAAQkE,EAAM3B,IAAO,GAAIA,IAAO,GAAG9gI,GAC7CyiI,GAAQziI,EAAI8gI,GAAQ,EAAE9gI,OAChB,KAAMA,KAAO,GAAKu+H,EAAOkE,KAAUtqS,EAAK2oS,IAAO,GAAIA,GAAQ,EA+CpE,MAAO,CAAC0B,EAAMjE,EAASA,EAAO1mS,MAAM,EAAG4qS,GAAQ3B,EAAK,IAAK,GAK/CxnB,CADCsjB,EAAQ/kS,MAAM+kS,EAAQzpR,GAAG,GACZqvR,GAExB,OADA5F,EAAQzpR,GAAKmK,EAAI,GACVA,EAAI,GAGZ,SAAS0lR,GAAcC,EAAKjoS,GAC3B,IAAGioS,EACE,MAAM,IAAI5pS,MAAM2B,GADW,oBAAZmH,SAAyBA,QAAQhP,MAAM6H,GAI5D,SAAS6+R,GAAUnkQ,EAAM+0E,GACxB,IAAI4mK,EAAO37O,EACX2jQ,GAAUhoB,EAAM,GAEhB,IACI77Q,EAAI,CACPkmS,UAFe,GAGfC,UAH+B,IAKhCsB,EAASznS,EAAG,CAAE8sN,KAAM73G,EAAQ63G,OAI5B,IADA,IAAIpwN,EAAIm/Q,EAAKp/Q,OAAS,GACJ,IAAXo/Q,EAAKn/Q,IAA2B,IAAbm/Q,EAAKn/Q,EAAE,IAA2B,GAAbm/Q,EAAKn/Q,EAAE,IAA2B,GAAbm/Q,EAAKn/Q,EAAE,KAAeA,GAAK,KAAKA,EACpGm/Q,EAAKl+P,EAAIjhB,EAAI,EAGbm/Q,EAAKl+P,GAAK,EACV,IAAI+qR,EAAO7sB,EAAKioB,WAAW,GAC3BjoB,EAAKl+P,GAAK,EACV,IAAI8qR,EAAW5sB,EAAKioB,WAAW,GAK/B,IAFAjoB,EAAKl+P,EAAI8qR,EAEL/rS,EAAI,EAAGA,EAAIgsS,IAAQhsS,EAAG,CAEzBm/Q,EAAKl+P,GAAK,GACV,IAAI+vR,EAAM7xB,EAAKioB,WAAW,GACtBkJ,EAAMnxB,EAAKioB,WAAW,GACtB0C,EAAU3qB,EAAKioB,WAAW,GAC1B6J,EAAO9xB,EAAKioB,WAAW,GACvB8J,EAAO/xB,EAAKioB,WAAW,GAC3BjoB,EAAKl+P,GAAK,EACV,IAAI/S,EAASixQ,EAAKioB,WAAW,GACzB+J,EAAKjK,EAAkB/nB,EAAKx5Q,MAAMw5Q,EAAKl+P,EAAE6oR,EAAS3qB,EAAKl+P,EAAE6oR,EAAQmH,IACrE9xB,EAAKl+P,GAAK6oR,EAAUmH,EAAOC,EAE3B,IAAInlD,EAAIozB,EAAKl+P,EACbk+P,EAAKl+P,EAAI/S,EAAS,EAClBkjS,GAAiBjyB,EAAM6xB,EAAKV,EAAKhtS,EAAG6tS,GACpChyB,EAAKl+P,EAAI8qO,EAGV,OAAOzoP,EAKR,SAAS8tS,GAAiBjyB,EAAM6xB,EAAKV,EAAKhtS,EAAG6tS,GAE5ChyB,EAAKl+P,GAAK,EACV,IAAIvR,EAAQyvQ,EAAKioB,WAAW,GACxBiK,EAAOlyB,EAAKioB,WAAW,GACvB35E,EAviCL,SAAwBxwL,GACvB,IAAI8pQ,EAA0B,MAApB9pQ,EAAImqQ,WAAW,GACrBH,EAA0B,MAApBhqQ,EAAImqQ,WAAW,GACrBl/R,EAAM,IAAI8uB,KACV3oB,EAAU,GAAN44R,EACJxvQ,EAAU,IADMwvQ,KAAS,GACTA,KAAS,EAC7B/+R,EAAIopS,gBAAgB,GACpBppS,EAAIqpS,YAAYtK,EAAM,MACtB/+R,EAAI+lN,SAASx2L,EAAE,GACfvvB,EAAIimN,QAAQ9/M,GACZ,IAAIgpP,EAAU,GAAN0vC,EACJr3N,EAAU,IADMq3N,KAAS,GAK7B,OAJoBA,KAAS,EAC7B7+R,EAAIkmN,SAAS24E,GACb7+R,EAAImmN,WAAW3+I,GACfxnE,EAAIgmN,WAAWmpC,GAAG,GACXnvP,EAwhCIspS,CAAeryB,GAE1B,GAAW,KAARzvQ,EAAgB,MAAM,IAAIvI,MAAM,8BASpB,IARf,IAAI0vQ,EAAQsI,EAAKioB,WAAW,GACxBqK,EAAOtyB,EAAKioB,WAAW,GACvBsK,EAAOvyB,EAAKioB,WAAW,GAEvB0C,EAAU3qB,EAAKioB,WAAW,GAC1B6J,EAAO9xB,EAAKioB,WAAW,GAGvBxhS,EAAO,GAAY5F,EAAI,EAAGA,EAAI8pS,IAAW9pS,EAAG4F,GAAQ4H,OAAO0vB,aAAaiiP,EAAKA,EAAKl+P,MACtF,GAAGgwR,EAAM,CACR,IAAIU,EAAKzK,EAAkB/nB,EAAKx5Q,MAAMw5Q,EAAKl+P,EAAGk+P,EAAKl+P,EAAIgwR,KACnDU,EAAG,QAAS,IAAIlK,KAAIh6E,EAAOkkF,EAAG,OAAQlK,MACrC0J,GAAI,IAAI,QAAS,IAAI1J,KAAIh6E,EAAO0jF,EAAG,OAAQ1J,IAEjDtoB,EAAKl+P,GAAKgwR,EAKV,IAAIhrS,EAAOk5Q,EAAKx5Q,MAAMw5Q,EAAKl+P,EAAGk+P,EAAKl+P,EAAIwwR,GACvC,OAAOJ,GACN,KAAK,EAAGprS,EA7ZV,SAAyBykS,EAAS4F,GACjC,IAAIlD,EAAO,OAAOiD,GAAS3F,EAAS4F,GACpC,IACIsB,EAAU,IAAIC,EADDzE,EAAMyE,YAEnBzmR,EAAMwmR,EAAQE,cAAcpH,EAAQ/kS,MAAM+kS,EAAQzpR,GAAI2wR,EAAQG,kBAElE,OADArH,EAAQzpR,GAAK2wR,EAAQI,UACd5mR,EAuZS6mR,CAAgB9yB,EAAMuyB,GAAO,MAC5C,KAAK,EAAG,MACR,QAAS,MAAM,IAAIvqS,MAAM,sCAAwCkqS,GAIlE,IAAIN,GAAM,EACC,EAARrhS,IAEU,YADZmnQ,EAAQsI,EAAKioB,WAAW,MACEvwB,EAAQsI,EAAKioB,WAAW,GAAI2J,GAAM,GAC5DU,EAAOtyB,EAAKioB,WAAW,GACvBsK,EAAOvyB,EAAKioB,WAAW,IAGrBqK,GAAQT,GAAKF,GAAcC,EAAK,wBAA0BC,EAAM,OAASS,GACzEC,GAAQpB,GAAKQ,GAAcC,EAAK,0BAA4BT,EAAM,OAASoB,GAC9E,IAAIQ,EAAS9L,EAAMnpQ,IAAIh3B,EAAM,GACzB4wQ,GAAO,GAAOq7B,GAAQ,GAAIpB,GAAcC,EAAK,uBAAyBl6B,EAAQ,OAASq7B,GAC3FC,GAAQ7uS,EAAGsC,EAAMK,EAAM,CAACmsS,QAAQ,EAAM3K,GAAIh6E,IA8G3C,SAAS0kF,GAAQnH,EAAKplS,EAAMwhQ,EAASp3D,GACpC,IAAIoiG,EAASpiG,GAAQA,EAAKoiG,OACtBA,GAAQrH,EAASC,GACrB,IAAIxnQ,GAAQ4uQ,GAAUxL,EAAInuK,KAAKuyK,EAAKplS,GACpC,IAAI49B,EAAM,CACT,IAAI6uQ,EAAQrH,EAAIvB,UAAU,GACvB7jS,EAAKD,MAAM,EAAG0sS,EAAMtyS,SAAWsyS,EAAOA,EAAQzsS,GAE1B,KAAnBysS,EAAM1sS,OAAO,KAAW0sS,GAAS,KACpCA,GAASA,EAAQzsS,GAAMsL,QAAQ,KAAK,MAErCsyB,EAAO,CAAE59B,KAAM83Q,EAAS93Q,GAAOmf,KAAM,GACrCimR,EAAIxB,UAAU/kS,KAAK++B,GACnBwnQ,EAAIvB,UAAUhlS,KAAK4tS,GACfD,GAAQxL,EAAIp2F,MAAM8hG,OAAOtH,GAS9B,OAPDxnQ,EAAK4jO,QAAU,EACd5jO,EAAK/5B,KAAO29P,EAAUA,EAAQrnQ,OAAS,EACpCiwM,IACCA,EAAKi7F,QAAOznQ,EAAKwmQ,MAAQh6F,EAAKi7F,OAC9Bj7F,EAAKy3F,KAAIjkQ,EAAKikQ,GAAKz3F,EAAKy3F,IACxBz3F,EAAKi6F,KAAIzmQ,EAAKymQ,GAAKj6F,EAAKi6F,KAErBzmQ,EAgDR,OArBA5jC,EAAQ64H,KA3pBR,SAAcuyK,EAAKhtR,GAClB,IAAIu0R,EAAcvH,EAAIvB,UAAU/9R,KAAI,SAAS3D,GAAK,OAAOA,EAAE8/E,iBACvD2qN,EAAUD,EAAY7mS,KAAI,SAAS3D,GAAK,IAAI+hB,EAAI/hB,EAAE6I,MAAM,KAAM,OAAOkZ,EAAEA,EAAE/pB,QAAyB,KAAfgI,EAAEpC,OAAO,GAAY,EAAI,OAC5GkgB,GAAI,EACkB,KAAvB7H,EAAKigB,WAAW,IAAuBpY,GAAI,EAAM7H,EAAOu0R,EAAY,GAAG5sS,MAAM,GAAI,GAAKqY,GACpF6H,GAA2B,IAAvB7H,EAAK2U,QAAQ,KACtB,IAAI8/Q,EAASz0R,EAAK6pE,cACd11B,GAAU,IAANtsC,EAAa0sR,EAAY5/Q,QAAQ8/Q,GAAUD,EAAQ7/Q,QAAQ8/Q,GACnE,IAAU,IAAPtgP,EAAU,OAAO64O,EAAIxB,UAAUr3O,GAElC,IAAI16B,GAAKg7Q,EAAO3pQ,MAAMqtO,GAGtB,IAFAs8B,EAASA,EAAOvhS,QAAQ+sR,EAAK,IAC1BxmQ,IAAGg7Q,EAASA,EAAOvhS,QAAQilQ,EAAK,MAC/BhkN,EAAI,EAAGA,EAAIogP,EAAYxyS,SAAUoyD,EAAG,CACvC,IAAI16B,EAAI86Q,EAAYpgP,GAAGjhD,QAAQilQ,EAAK,KAAOo8B,EAAYpgP,IAAIjhD,QAAQ+sR,EAAK,KAAOwU,EAAQ,OAAOzH,EAAIxB,UAAUr3O,GAC5G,IAAI16B,EAAI+6Q,EAAQrgP,GAAGjhD,QAAQilQ,EAAK,KAAOq8B,EAAQrgP,IAAIjhD,QAAQ+sR,EAAK,KAAOwU,EAAQ,OAAOzH,EAAIxB,UAAUr3O,GAErG,OAAO,MA2oBRvyD,EAAQqjB,KAl4BR,SAAck8P,EAAM5mK,GACnB,OAAOA,GAAWA,EAAQxzF,MAAQ,UACjC,IAAK,OAAQ,OAPf,SAAmB24P,EAAUnlK,GAE5B,OADAmvL,IACO/pQ,EAAMi8G,EAAGC,aAAa6jI,GAAWnlK,GAKnBm6L,CAAUvzB,EAAM5mK,GACpC,IAAK,SAAU,OAAO56E,EAAM+/P,EAAIJ,EAAOh/Q,OAAO6gQ,IAAQ5mK,GACtD,IAAK,SAAU,OAAO56E,EAAM+/P,EAAIve,GAAO5mK,GAExC,OAAO56E,EAAMwhP,EAAM5mK,IA63BpB34G,EAAQ+9B,MAAQA,EAChB/9B,EAAQ2tB,MArmBR,SAAey9Q,EAAKzyL,GACnB,IAAIj1G,EAAIqoS,EAAOX,EAAKzyL,GACpB,OAAOA,GAAWA,EAAQxzF,MACzB,IAAK,OAA2D,OAAnD2iR,IAAU9tJ,EAAG44D,cAAcj6F,EAAQmlK,SAAU,GAAap6Q,EACvE,IAAK,SAAU,OAAOu6R,EAAIv6R,GAC1B,IAAK,SAAU,OAAOg6R,EAAOl/Q,OAAOy/Q,EAAIv6R,IAEzC,OAAOA,GA+lBR1D,EAAQ+yS,UAlnBR,SAAoB3H,EAAKttB,EAAUnlK,GAClCmvL,IACA,IAAIpkS,EAAIqoS,EAAOX,EAAKzyL,GACrBqhC,EAAG44D,cAAckrE,EAAUp6Q,IAgnB3B1D,EAAQ4wM,MAAQ,CACfoiG,QA9DD,SAAiB5iG,GAChB,IAAI1sM,EAAI,GAER,OADAynS,EAASznS,EAAG0sM,GACL1sM,GA4DP6uS,QAASA,GACTU,QAhCD,SAAiB7H,EAAKplS,GACrBmlS,EAASC,GACT,IAAIxnQ,EAAOojQ,EAAInuK,KAAKuyK,EAAKplS,GACzB,GAAG49B,EAAM,IAAI,IAAIp3B,EAAI,EAAGA,EAAI4+R,EAAIxB,UAAUzpS,SAAUqM,EAAG,GAAG4+R,EAAIxB,UAAUp9R,IAAMo3B,EAG7E,OAFAwnQ,EAAIxB,UAAU95P,OAAOtjC,EAAG,GACxB4+R,EAAIvB,UAAU/5P,OAAOtjC,EAAG,IACjB,EAER,OAAO,GAyBP0mS,QAtBD,SAAiB9H,EAAK+H,EAAUC,GAC/BjI,EAASC,GACT,IAAIxnQ,EAAOojQ,EAAInuK,KAAKuyK,EAAK+H,GACzB,GAAGvvQ,EAAM,IAAI,IAAIp3B,EAAI,EAAGA,EAAI4+R,EAAIxB,UAAUzpS,SAAUqM,EAAG,GAAG4+R,EAAIxB,UAAUp9R,IAAMo3B,EAG7E,OAFAwnQ,EAAIxB,UAAUp9R,GAAGxG,KAAO83Q,EAASs1B,GACjChI,EAAIvB,UAAUr9R,GAAK4mS,GACZ,EAER,OAAO,GAePV,OAZD,SAAgBtH,GAAOG,EAAYH,GAAK,IAavCiI,UAAWA,GACXC,WAAYA,GACZ/L,UAAWA,GACXpJ,QAASA,EACToV,SAtmBD,SAAkBC,GAAQ,IACzB,IACIxB,EAAU,IAAIC,EADDuB,EAAKvB,YAGtB,GADAD,EAAQE,cAAc,IAAItlS,WAAW,CAAC,EAAG,IAAKolS,EAAQG,mBACnDH,EAAQI,UACN,MAAM,IAAI7qS,MAAM,kCADCimS,EAAQgG,EAE7B,MAAM17Q,GAAIznB,QAAQhP,MAAM,4BAA8By2B,EAAE1O,SAAW0O,MAimBpEi3Q,YAAaf,EACbyF,YAAahD,GACbrD,OAAQA,GAGFptS,EAlzCG,GAuzCyB,IAAM+mS,EAAM,EAAQ,MAAS,MAAMjvQ,IAGtE,SAAS47Q,EAAQrtS,GAChB,MAAmB,iBAATA,EAA0B03R,EAAK13R,GACtC/F,MAAMC,QAAQ8F,GAn9ElB,SAAaA,GACZ,GAAyB,oBAAfuG,WAA4B,MAAM,IAAIrF,MAAM,eACtD,OAAO,IAAIqF,WAAWvG,GAi9ESstS,CAAIttS,GAC5BA,EAGR,SAASutS,EAASC,EAAO/I,EAASn3B,GAEjC,QAAkB,IAARozB,GAAuBA,EAAIn0F,cAAe,OAAO+gE,EAAMozB,EAAIn0F,cAAcihG,EAAO/I,EAASn3B,GAAOozB,EAAIn0F,cAAcihG,EAAO/I,GACnI,IAAIzkS,EAAe,QAAPstQ,EAAiBmgC,GAAUhJ,GAAWA,EACnD,GAA0B,oBAAhBiJ,YAA6B,OAAOA,YAAY1tS,EAAMwtS,GAC/D,GAAmB,oBAATx9Q,KAAsB,CAC/B,IAAIkpP,EAAO,IAAIlpP,KAAK,CAACq9Q,EAAQrtS,IAAQ,CAAC8e,KAAK,6BAC7C,GAAwB,oBAAdsM,WAA6BA,UAAUuiR,WAAY,OAAOviR,UAAUuiR,WAAWz0B,EAAMs0B,GAC/F,GAAqB,oBAAXI,OAAwB,OAAOA,OAAO10B,EAAMs0B,GACpD,GAAkB,oBAARlyQ,KAA2C,oBAAb3P,UAA4BA,SAASmQ,eAAiBR,IAAIC,gBAAiB,CAClH,IAAI/I,EAAM8I,IAAIC,gBAAgB29O,GACjC,GAAqB,iBAAX20B,QAAiE,mBAAlCA,OAAOC,WAAW,IAAI/xQ,SAE3D,OADGT,IAAIyyQ,iBAAyC,oBAAf9oS,YAA4BA,YAAW,WAAaq2B,IAAIyyQ,gBAAgBv7Q,KAAS,KAC3Gq7Q,OAAOC,UAAU/xQ,SAAS,CAAEvJ,IAAKA,EAAKilP,SAAU+1B,EAAOI,QAAQ,IAEvE,IAAIxrS,EAAIupB,SAASmQ,cAAc,KAC/B,GAAiB,MAAd15B,EAAE25B,SAIJ,OAHJ35B,EAAE25B,SAAWyxQ,EAAOprS,EAAE45B,KAAOxJ,EAAK7G,SAAS4V,KAAKysQ,YAAY5rS,GAAIA,EAAE6rS,QAClEtiR,SAAS4V,KAAK2sQ,YAAY9rS,GACnBk5B,IAAIyyQ,iBAAyC,oBAAf9oS,YAA4BA,YAAW,WAAaq2B,IAAIyyQ,gBAAgBv7Q,KAAS,KAC3GA,GAKV,GAAgB,oBAANq9O,GAAqC,oBAATz8H,MAA0C,oBAAX+6J,OAAwB,IAE5F,IAAIhpR,EAAMiuH,KAAKo6J,GAEkB,OAFVroR,EAAImP,KAAK,KAAMnP,EAAIjN,SAAW,SAClDje,MAAMC,QAAQuqS,KAAUA,EAAU7M,EAAI6M,IACzCt/Q,EAAImC,MAAMm9Q,GAAUt/Q,EAAI0P,QAAgB4vQ,EACvC,MAAMhzQ,GAAK,IAAIA,EAAE1O,UAAY0O,EAAE1O,QAAQ8f,MAAM,YAAa,MAAMpR,EAClE,MAAM,IAAIvwB,MAAM,oBAAsBssS,GAevC,SAASrrR,EAAK9kB,GAEb,IADA,IAAI+wS,EAAK/xS,OAAO8lB,KAAK9kB,GAAIgxS,EAAK,GACtBt0S,EAAI,EAAGA,EAAIq0S,EAAGt0S,SAAUC,EAAMsC,OAAOI,UAAUyC,eAAe/B,KAAKE,EAAG+wS,EAAGr0S,KAAKs0S,EAAG7vS,KAAK4vS,EAAGr0S,IACjG,OAAOs0S,EAGR,SAASC,EAAUhvS,EAAK1E,GAEvB,IADA,IAAIyC,EAAI,GAAMkxS,EAAIpsR,EAAK7iB,GACfvF,EAAI,EAAGA,IAAMw0S,EAAEz0S,SAAUC,EAA2B,MAArBsD,EAAEiC,EAAIivS,EAAEx0S,IAAIa,MAAeyC,EAAEiC,EAAIivS,EAAEx0S,IAAIa,IAAQ2zS,EAAEx0S,IACxF,OAAOsD,EAGR,SAASmxS,EAAMlvS,GAEd,IADA,IAAIjC,EAAI,GAAMkxS,EAAIpsR,EAAK7iB,GACfvF,EAAI,EAAGA,IAAMw0S,EAAEz0S,SAAUC,EAAGsD,EAAEiC,EAAIivS,EAAEx0S,KAAOw0S,EAAEx0S,GACrD,OAAOsD,EAGR,SAASoxS,EAAUnvS,GAElB,IADA,IAAIjC,EAAI,GAAMkxS,EAAIpsR,EAAK7iB,GACfvF,EAAI,EAAGA,IAAMw0S,EAAEz0S,SAAUC,EAAGsD,EAAEiC,EAAIivS,EAAEx0S,KAAO0mG,SAAS8tM,EAAEx0S,GAAG,IACjE,OAAOsD,EAYR,IAAI68R,EAAW,IAAInpQ,KAAK,KAAM,GAAI,GAAI,EAAG,EAAG,GAC5C,SAAS29Q,EAAQpzR,EAAG0+Q,GACnB,IAAItoM,EAAQp2E,EAAE8+Q,UAGd,OAFGJ,IAAUtoM,GAAS,YAEdA,GADOwoM,EAASE,UAAqE,KAAxD9+Q,EAAEi/Q,oBAAsBL,EAASK,uBAC1C,MAE7B,IAAIoU,EAAU,IAAI59Q,KACdopQ,EAAWD,EAASE,UAA2E,KAA9DuU,EAAQpU,oBAAsBL,EAASK,qBACxEqU,EAAYD,EAAQpU,oBACxB,SAASsU,EAAQvzR,GAChB,IAAI6J,EAAM,IAAI4L,KAKd,OAJA5L,EAAI2pR,QAAY,GAAJxzR,EAAS,GAAK,GAAK,IAAO6+Q,GAClCh1Q,EAAIo1Q,sBAAwBqU,GAC/BzpR,EAAI2pR,QAAQ3pR,EAAIi1Q,UAAoD,KAAvCj1Q,EAAIo1Q,oBAAsBqU,IAEjDzpR,EAIR,SAAS4pR,EAAarpS,GACrB,IAAIspS,EAAM,EAAGxN,EAAK,EAAGzoR,GAAO,EACxByY,EAAI9rB,EAAEm9B,MAAM,8EAChB,IAAIrR,EAAG,MAAM,IAAItwB,MAAM,IAAMwE,EAAI,gCACjC,IAAI,IAAI3L,EAAI,EAAGA,GAAKy3B,EAAE13B,SAAUC,EAC/B,GAAIy3B,EAAEz3B,GAAN,CAGA,OAFAynS,EAAK,EACFznS,EAAI,IAAGgf,GAAO,GACVyY,EAAEz3B,GAAG2F,MAAM8xB,EAAEz3B,GAAGD,OAAO,IAC7B,IAAK,IACJ,MAAM,IAAIoH,MAAM,mCAAqCswB,EAAEz3B,GAAG2F,MAAM8xB,EAAEz3B,GAAGD,OAAO,IAC7E,IAAK,IAAK0nS,GAAM,GAEhB,IAAK,IAAKA,GAAM,GAEhB,IAAK,IACJ,IAAIzoR,EAAM,MAAM,IAAI7X,MAAM,qCACrBsgS,GAAM,GAIbwN,GAAOxN,EAAK/gM,SAASjvE,EAAEz3B,GAAI,IAE5B,OAAOi1S,EAGR,IAAIC,EAAe,IAAIl+Q,KAAK,4BACzBnqB,MAAMqoS,EAAa3vF,iBAAgB2vF,EAAe,IAAIl+Q,KAAK,YAC9D,IAAIm+Q,EAAwC,MAA9BD,EAAa3vF,cAE3B,SAAS6vF,EAAU/+Q,EAAKg/Q,GACvB,IAAIhnS,EAAI,IAAI2oB,KAAKX,GACjB,GAAG8+Q,EAGF,OAFCE,EAAU,EAAGhnS,EAAE0mS,QAAQ1mS,EAAEgyR,UAAoC,GAAxBhyR,EAAEmyR,oBAA2B,KAC3D6U,EAAU,GAAGhnS,EAAE0mS,QAAQ1mS,EAAEgyR,UAAoC,GAAxBhyR,EAAEmyR,oBAA2B,KACnEnyR,EAER,GAAGgoB,aAAeW,KAAM,OAAOX,EAC/B,GAAiC,MAA9B6+Q,EAAa3vF,gBAA0B14M,MAAMwB,EAAEk3M,eAAgB,CACjE,IAAI55M,EAAI0C,EAAEk3M,cACV,OAAGlvL,EAAI1D,QAAQ,GAAKhnB,IAAM,GAC1B0C,EAAEkjS,YAAYljS,EAAEk3M,cAAgB,KADIl3M,EAGrC,IAAI5I,EAAI4wB,EAAIyS,MAAM,SAAS,CAAC,OAAO,IAAI,KAAK,IAAI,IAAI,KAChD1d,EAAM,IAAI4L,MAAMvxB,EAAE,IAAKA,EAAE,GAAK,GAAIA,EAAE,IAAMA,EAAE,IAAI,GAAMA,EAAE,IAAI,GAAMA,EAAE,IAAI,GAE5E,OADG4wB,EAAI1D,QAAQ,MAAQ,IAAGvH,EAAM,IAAI4L,KAAK5L,EAAIi1Q,UAAsC,GAA1Bj1Q,EAAIo1Q,oBAA2B,MACjFp1Q,EAGR,SAASkqR,GAAOz1S,GAEf,IADA,IAAIyD,EAAI,GACAtD,EAAI,EAAGA,GAAKH,EAAIE,SAAUC,EAAGsD,GAAKkK,OAAO0vB,aAAar9B,EAAIG,IAClE,OAAOsD,EAGR,SAASiyS,GAAIjyS,GACZ,GAAkB,oBAARqyB,OAAwBz1B,MAAMC,QAAQmD,GAAI,OAAOqyB,KAAKgI,MAAMhI,KAAKC,UAAUtyB,IACrF,GAAe,iBAALA,GAAsB,MAALA,EAAW,OAAOA,EAC7C,GAAGA,aAAa0zB,KAAM,OAAO,IAAIA,KAAK1zB,EAAE+8R,WACxC,IAAIj1Q,EAAM,GACV,IAAI,IAAIvF,KAAKviB,EAAMhB,OAAOI,UAAUyC,eAAe/B,KAAKE,EAAGuiB,KAAIuF,EAAIvF,GAAK0vR,GAAIjyS,EAAEuiB,KAC9E,OAAOuF,EAGR,SAAS5K,GAAK/R,EAAEwS,GAAiB,IAAZ,IAAI3d,EAAI,GAAUA,EAAEvD,OAASkhB,GAAG3d,GAAGmL,EAAG,OAAOnL,EAGlE,SAASkyS,GAAS7pS,GACjB,IAAI4V,EAAI5Y,OAAOgD,GACf,IAAIkB,MAAM0U,GAAI,OAAOA,EACrB,IAAI,KAAK1b,KAAK8F,GAAI,OAAO4V,EACzB,IAAIk0R,EAAK,EACLjU,EAAK71R,EAAEuF,QAAQ,iBAAiB,QAAQA,QAAQ,OAAO,IAAIA,QAAQ,QAAQ,WAAwB,OAAXukS,GAAM,IAAY,MAC9G,OAAI5oS,MAAM0U,EAAI5Y,OAAO64R,KACrBA,EAAKA,EAAGtwR,QAAQ,cAAa,SAAS+wR,EAAIC,GAAgB,OAAVuT,GAAMA,EAAWvT,KAC7Dr1R,MAAM0U,EAAI5Y,OAAO64R,IACdjgR,EAD2BA,EAAIk0R,GAFJl0R,EAAIk0R,EAKvC,SAASC,GAAU/pS,GAClB,IAAIrI,EAAI,IAAI0zB,KAAKrrB,GAAIlG,EAAI,IAAIuxB,KAAKugC,KAC9BztC,EAAIxmB,EAAEqyS,UAAWl+Q,EAAIn0B,EAAE8hN,WAAY/2M,EAAI/K,EAAEkiN,UAC7C,OAAG34M,MAAMwB,IACNyb,EAAI,GAAKA,EAAI,KADIrkB,GAEhBgyB,EAAI,GAAKppB,EAAI,IAAW,KAALyb,GACpBne,EAAEmF,cAAcg4B,MAAM,mDADexlC,EAErCqI,EAAEm9B,MAAM,iBAAyBrjC,EAC7BnC,EAGR,IAyEIsyS,GAzEAC,GAAuD,GAApC,UAAUjlS,MAAM,UAAU7Q,OAOjD,SAAS+1S,GAAW7vS,GACnB,OAAIA,EACDA,EAAKA,KAAag3R,EAAMh3R,EAAKA,MAC7BA,EAAKg2Q,cAAgB7I,EAAgB6pB,EAAMh3R,EAAKg2Q,eAAev2Q,SAAS,WACxEO,EAAKw1Q,SAAiBwhB,EAAMh3R,EAAKw1Q,YACjCx1Q,EAAKkyO,OAASlyO,EAAKkyO,MAAM6+B,WAAmBimB,EAAMqY,GAAOp1S,MAAMwC,UAAUiD,MAAMvC,KAAK6C,EAAKkyO,MAAM6+B,aAAa,KAC5G/wQ,EAAKmhQ,SAAWnhQ,EAAK8e,KAAak4Q,EAAMqY,GAAOrvS,EAAKmhQ,UAChD,KANU,KA0BlB,SAAS2uC,GAAejlK,EAAKttG,GAG5B,IAFA,IAAI3d,EAAIirH,EAAI24J,WAAarhR,EAAK0oH,EAAIxuG,OAC9B37B,EAAI68B,EAAK1yB,cAAec,EAAIjL,EAAEuK,QAAQ,MAAM,MACxClR,EAAE,EAAGA,EAAE6lB,EAAE9lB,SAAUC,EAAG,CAC7B,IAAIyF,EAAIogB,EAAE7lB,GAAG8Q,cACb,GAAGnK,GAAKlB,GAAKmM,GAAKnM,EAAG,OAAOqrI,EAAIxuG,MAAMzc,EAAE7lB,IAEzC,OAAO,KAGR,SAASg2S,GAAWllK,EAAKttG,GACxB,IAAIlgC,EAAIyyS,GAAejlK,EAAKttG,GAC5B,GAAQ,MAALlgC,EAAW,MAAM,IAAI6D,MAAM,oBAAsBq8B,EAAO,WAC3D,OAAOlgC,EAGR,SAAS2yS,GAAWnlK,EAAKttG,EAAM0yQ,GAC9B,IAAIA,EAAM,OArBMjwS,EAqBS+vS,GAAWllK,EAAKttG,KArBuB,SAAxBv9B,EAAKL,KAAKD,OAAO,GAb1D,SAAoBM,GACnB,IAAIA,EAAM,OAAO,KACjB,GAAGA,EAAKA,KAAM,OAAO+2R,EAAW/2R,EAAKA,MACrC,GAAGA,EAAKg2Q,cAAgB7I,EAAS,OAAOntQ,EAAKg2Q,eAC7C,GAAGh2Q,EAAKkyO,OAASlyO,EAAKkyO,MAAM6+B,WAAY,CACvC,IAAI1zQ,EAAI2C,EAAKkyO,MAAM6+B,aACnB,MAAe,iBAAL1zQ,EAAsB05R,EAAW15R,GACpCpD,MAAMwC,UAAUiD,MAAMvC,KAAKE,GAEnC,OAAG2C,EAAKmhQ,SAAWnhQ,EAAK8e,KAAa9e,EAAKmhQ,QACnC,KAGmE+uC,CAAWlwS,GAAQ6vS,GAAW7vS,GAAzG,IAAiBA,EAsBhB,IAAIu9B,EAAM,OAAO,KACjB,IAAM,OAAOyyQ,GAAWnlK,EAAKttG,GAAS,MAAM9L,GAAK,OAAO,MAGzD,SAAS0+Q,GAAUtlK,EAAKttG,EAAM0yQ,GAC7B,IAAIA,EAAM,OAAOJ,GAAWE,GAAWllK,EAAKttG,IAC5C,IAAIA,EAAM,OAAO,KACjB,IAAM,OAAO4yQ,GAAUtlK,EAAKttG,GAAS,MAAM9L,GAAK,OAAO,MASxD,SAAS2+Q,GAAavlK,EAAK9yH,EAAMopP,GAC7Bt2H,EAAI24J,UAAW7C,EAAIp2F,MAAM2hG,QAAQrhK,EAAK9yH,EAAMopP,GAC1Ct2H,EAAIttG,KAAKxlB,EAAMopP,GAYrB,SAASkvC,KACR,OAAIV,GACG,IAAIA,GADOhP,EAAIp2F,MAAMoiG,UAqB7B,SAAS2D,GAAav4R,EAAM/a,GAC3B,GAAqB,KAAlB+a,EAAK21H,OAAO,GAAW,OAAO31H,EAAKrY,MAAM,GAC5C,IAAI8C,EAASxF,EAAK2N,MAAM,KACH,KAAlB3N,EAAK0C,OAAO,IAAW8C,EAAOmmB,MAEjC,IADA,IAAI5sB,EAASgc,EAAKpN,MAAM,KACC,IAAlB5O,EAAOjC,QAAc,CAC3B,IAAIu5D,EAAOt3D,EAAO0iI,QACL,OAATprE,EAAe7wD,EAAOmmB,MACR,MAAT0qC,GAAc7wD,EAAOhE,KAAK60D,GAEpC,OAAO7wD,EAAO6I,KAAK,KAvCI,oBAAdskQ,YAA2BggC,GAAQhgC,WAERj2Q,EAAOC,cACtB,IAAVg2S,KAAuBA,GAAQ,EAAQ,OAsCnD,IAAIY,GAAa,8DACbC,GAAU,yEACVC,GAAS,+FAERF,GAAW1tQ,MAAM4tQ,MAAYA,GAAW,YAC7C,IAAIC,GAAQ,QAASC,GAAW,aAChC,SAASC,GAAYzyE,EAAK0yE,EAAWC,GAGpC,IAFA,IAAI1yL,EAAI,GACJoxG,EAAK,EAAGhnN,EAAI,EACVgnN,IAAO2O,EAAIrkO,QAA8C,MAA5B0O,EAAI21N,EAAInmM,WAAWw3L,KAAqB,KAANhnN,GAAkB,KAANA,IAAtDgnN,GAE3B,GADIqhF,IAAWzyL,EAAE,GAAK+/G,EAAIz+N,MAAM,EAAG8vN,IAChCA,IAAO2O,EAAIrkO,OAAQ,OAAOskH,EAC7B,IAAI5sF,EAAI2sM,EAAIt7L,MAAM2tQ,IAAYrqS,EAAE,EAAGmV,EAAE,GAAIvhB,EAAE,EAAGwwE,EAAE,GAAIkyN,EAAG,GAAIsU,EAAO,EAClE,GAAGv/Q,EAAG,IAAIz3B,EAAI,EAAGA,GAAKy3B,EAAE13B,SAAUC,EAAG,CAEpC,IADA0iS,EAAKjrQ,EAAEz3B,GACHyO,EAAE,EAAGA,GAAKi0R,EAAG3iS,QAAqC,KAArB2iS,EAAGzkQ,WAAWxvB,KAApBA,GAE3B,IADA+hE,EAAIkyN,EAAG/8R,MAAM,EAAE8I,GAAGgoB,OACU,IAAtBisQ,EAAGzkQ,WAAWxvB,EAAE,MAAYA,EAGlC,IAFAuoS,EAAmC,KAA1BvhF,EAAGitE,EAAGzkQ,WAAWxvB,EAAE,KAAmB,IAANgnN,EAAY,EAAI,EACzDl0M,EAAImhR,EAAG/8R,MAAM8I,EAAE,EAAEuoS,EAAMtU,EAAG3iS,OAAOi3S,GAC7B5qS,EAAE,EAAEA,GAAGokE,EAAEzwE,QAAmC,KAApBywE,EAAEvyC,WAAW7xB,KAAnBA,GACtB,GAAGA,IAAIokE,EAAEzwE,OACLywE,EAAE79C,QAAQ,KAAO,IAAG69C,EAAIA,EAAE7qE,MAAM,EAAG6qE,EAAE79C,QAAQ,OAChD0xF,EAAE7zC,GAAKjvD,EACHw1R,IAAS1yL,EAAE7zC,EAAE1/D,eAAiByQ,OAE9B,CACJ,IAAIsE,GAAS,IAAJzZ,GAAwB,UAAfokE,EAAE7qE,MAAM,EAAE,GAAa,QAAQ,IAAI6qE,EAAE7qE,MAAMyG,EAAE,GAC/D,GAAGi4G,EAAEx+F,IAAwB,OAAlB2qD,EAAE7qE,MAAMyG,EAAE,EAAEA,GAAa,SACpCi4G,EAAEx+F,GAAKtE,EACHw1R,IAAS1yL,EAAEx+F,EAAE/U,eAAiByQ,IAGpC,OAAO8iG,EAER,SAAS4yL,GAASlvS,GAAK,OAAOA,EAAEmJ,QAAQ0lS,GAAU,OAElD,IAaKM,GAA2DC,GAb5DC,GAAY,CACf,SAAU,IACV,SAAU,IACV,OAAQ,IACR,OAAQ,IACR,QAAS,KAENC,GAAY5C,EAAM2C,IAIlBE,IAECJ,GAAW,+CAAgDC,GAAY,uBACpE,SAASG,EAAYj3Q,GAC3B,IAAI10B,EAAI00B,EAAO,GAAIrgC,EAAI2L,EAAEgnB,QAAQ,aACjC,IAAS,GAAN3yB,EAAS,OAAO2L,EAAEuF,QAAQgmS,IAAU,SAASjV,EAAIC,GAAM,OAAOkV,GAAUnV,IAAKz0R,OAAO0vB,aAAawpE,SAASw7L,EAAGD,EAAGtvQ,QAAQ,MAAM,EAAE,GAAG,MAAMsvQ,KAAO/wR,QAAQimS,IAAU,SAAS1/Q,EAAEhpB,GAAI,OAAOjB,OAAO0vB,aAAawpE,SAASj4F,EAAE,QAC1N,IAAIrC,EAAIT,EAAEgnB,QAAQ,OAClB,OAAO2kR,EAAY3rS,EAAEhG,MAAM,EAAG3F,IAAM2L,EAAEhG,MAAM3F,EAAE,EAAEoM,GAAKkrS,EAAY3rS,EAAEhG,MAAMyG,EAAE,MAIzEmrS,GAAS,WAAYC,GAAW,gCACpC,SAASC,GAAUp3Q,GAElB,OADQA,EAAO,IACNnvB,QAAQqmS,IAAU,SAASztR,GAAK,OAAOutR,GAAUvtR,MAAO5Y,QAAQsmS,IAAS,SAAS7rS,GAAK,MAAO,MAAQ,MAAMA,EAAEsyB,WAAW,GAAGv4B,SAAS,KAAKC,OAAO,GAAK,OAEhK,SAAS+xS,GAAar3Q,GAAO,OAAOo3Q,GAAUp3Q,GAAMnvB,QAAQ,KAAK,WAEjE,IAAIymS,GAAe,mBACnB,SAASC,GAAWv3Q,GAEnB,OADQA,EAAO,IACNnvB,QAAQqmS,IAAU,SAASztR,GAAK,OAAOutR,GAAUvtR,MAAO5Y,QAAQ,MAAO,SAASA,QAAQymS,IAAa,SAAShsS,GAAK,MAAO,OAAS,MAAMA,EAAEsyB,WAAW,GAAGv4B,SAAS,KAAKC,OAAO,GAAK,OAS7L,IAAIkyS,GAAc,WACjB,IAAIC,EAAW,YACf,SAASC,EAAQ9V,EAAGC,GAAM,OAAO10R,OAAO0vB,aAAawpE,SAASw7L,EAAG,KACjE,OAAO,SAAqB7rQ,GAAO,OAAOA,EAAInlB,QAAQ4mS,EAASC,IAH9C,GASlB,SAASC,GAAah3S,GACrB,OAAOA,GACN,KAAK,EAAG,KAAK,EAAM,IAAK,IAAK,IAAK,OAAQ,IAAK,OAAQ,OAAO,EAE9D,QAAS,OAAO,GAIlB,IAAIi3S,GAAW,SAAmBC,GAEjC,IADA,IAAI9sR,EAAM,GAAIprB,EAAI,EAAGyO,EAAI,EAAGJ,EAAI,EAAGqpB,EAAI,EAAG/wB,EAAI,EAAGwrD,EAAI,EAC9CnyD,EAAIk4S,EAAKn4S,SACf0O,EAAIypS,EAAKj6Q,WAAWj+B,MACZ,IAAOorB,GAAO5d,OAAO0vB,aAAazuB,IAC1CJ,EAAI6pS,EAAKj6Q,WAAWj+B,KAChByO,EAAE,KAAOA,EAAE,KAAO9H,GAAU,GAAJ8H,IAAW,EAAI9H,GAAU,GAAJ0H,EAAS+c,GAAO5d,OAAO0vB,aAAav2B,KACrF+wB,EAAIwgR,EAAKj6Q,WAAWj+B,KAChByO,EAAI,IAAO2c,GAAO5d,OAAO0vB,cAAmB,GAAJzuB,IAAW,IAAY,GAAJJ,IAAW,EAAU,GAAJqpB,IAEhFy6B,IAAW,EAAJ1jD,IAAU,IAAY,GAAJJ,IAAW,IAAY,GAAJqpB,IAAW,EAAU,IADjE/wB,EAAIuxS,EAAKj6Q,WAAWj+B,OACkD,MACtEorB,GAAO5d,OAAO0vB,aAAa,OAAWi1B,IAAI,GAAI,OAC9C/mC,GAAO5d,OAAO0vB,aAAa,OAAY,KAAFi1B,OAEtC,OAAO/mC,GAGJsoR,GAAY,SAASwE,GAExB,IADA,IAAI9sR,EAAM,GAAIprB,EAAI,EAAGyO,EAAI,EAAGJ,EAAI,EAC1BrO,EAAIk4S,EAAKn4S,QAEd,OADA0O,EAAIypS,EAAKj6Q,WAAWj+B,MACb,GACN,KAAKyO,EAAI,IAAK2c,EAAI3mB,KAAK+I,OAAO0vB,aAAazuB,IAAK,MAChD,KAAKA,EAAI,KACR2c,EAAI3mB,KAAK+I,OAAO0vB,aAAa,KAAOzuB,GAAK,KACzC2c,EAAI3mB,KAAK+I,OAAO0vB,aAAa,KAAW,GAAJzuB,KACpC,MACD,KAAKA,GAAK,OAASA,EAAI,MACtBA,GAAK,MAAOJ,EAAI6pS,EAAKj6Q,WAAWj+B,KAAO,OAASyO,GAAG,IACnD2c,EAAI3mB,KAAK+I,OAAO0vB,aAAa,KAAQ7uB,GAAI,GAAM,KAC/C+c,EAAI3mB,KAAK+I,OAAO0vB,aAAa,KAAQ7uB,GAAI,GAAM,MAC/C+c,EAAI3mB,KAAK+I,OAAO0vB,aAAa,KAAQ7uB,GAAK,EAAK,MAC/C+c,EAAI3mB,KAAK+I,OAAO0vB,aAAa,KAAW,GAAJ7uB,KACpC,MACD,QACC+c,EAAI3mB,KAAK+I,OAAO0vB,aAAa,KAAOzuB,GAAK,MACzC2c,EAAI3mB,KAAK+I,OAAO0vB,aAAa,KAAQzuB,GAAK,EAAK,MAC/C2c,EAAI3mB,KAAK+I,OAAO0vB,aAAa,KAAW,GAAJzuB,KAGvC,OAAO2c,EAAI9Z,KAAK,KAGjB,GAAG8hQ,EAAS,CACX,IAAI+kC,GAAY,SAAmBlyS,GAClC,IAAuCksD,EAAGnyD,EAAuByO,EAA7D2c,EAAM4K,OAAO8kP,MAAM,EAAE70Q,EAAKlG,QAAeqM,EAAI,EAAGyZ,EAAI,EAAGyuP,EAAG,EAC9D,IAAIt0Q,EAAI,EAAGA,EAAIiG,EAAKlG,OAAQC,GAAGoM,EAC9BA,EAAI,GACAqC,EAAExI,EAAKg4B,WAAWj+B,IAAM,IAAKmyD,EAAI1jD,EAC7BA,EAAI,KAAO0jD,EAAW,IAAJ,GAAF1jD,IAA+B,GAArBxI,EAAKg4B,WAAWj+B,EAAE,IAAQoM,EAAE,GACtDqC,EAAI,KAAO0jD,EAAS,MAAJ,GAAF1jD,GAAqC,IAAJ,GAArBxI,EAAKg4B,WAAWj+B,EAAE,KAAgC,GAArBiG,EAAKg4B,WAAWj+B,EAAE,IAAQoM,EAAE,IACpFA,EAAI,EACV+lD,EAAY,QAAH,EAAJ1jD,GAAwC,MAAJ,GAArBxI,EAAKg4B,WAAWj+B,EAAE,IAAsC,IAAJ,GAArBiG,EAAKg4B,WAAWj+B,EAAE,KAAgC,GAArBiG,EAAKg4B,WAAWj+B,EAAE,IACtFs0Q,EAAK,QAAjBniN,GAAK,SAA2B,GAAI,MAAOA,EAAI,OAAY,KAAFA,IAEhD,IAAPmiN,IAAYlpP,EAAIvF,KAAU,IAAHyuP,EAAQlpP,EAAIvF,KAAOyuP,IAAK,EAAGA,EAAK,GAC1DlpP,EAAIvF,KAAOssC,EAAE,IAAK/mC,EAAIvF,KAAOssC,IAAI,EAElC,OAAO/mC,EAAIzlB,MAAM,EAAEkgB,GAAGngB,SAAS,SAE5B0yS,GAAS,qBACVH,GAASG,KAAWD,GAAUC,MAASH,GAAWE,IACrD,IAAIE,GAAY,SAAmBpyS,GAAQ,OAAOotQ,EAAYptQ,EAAM,UAAUP,SAAS,SACpFuyS,GAASG,KAAWC,GAAUD,MAASH,GAAWI,IAErD3E,GAAY,SAASztS,GAAQ,OAAOotQ,EAAYptQ,EAAM,QAAQP,SAAS,WAIxE,IACK4yS,GASAC,GAuB0BC,GAjC3BC,IACCH,GAAU,GACP,SAAkB3xS,EAAEiL,GAC1B,IAAIT,EAAIxK,EAAE,KAAKiL,GAAG,IAClB,OAAG0mS,GAAQnnS,GAAWmnS,GAAQnnS,GACtBmnS,GAAQnnS,GAAK,IAAI+6E,OAAO,cAAcvlF,EAAE,+DAA+DA,EAAE,IAAMiL,GAAG,MAIxH8mS,IACCH,GAAW,CACd,CAAC,OAAQ,KAAM,CAAC,SAAU,KAC1B,CAAC,OAAQ,KAAM,CAAC,OAAQ,KAAM,CAAC,KAAQ,KAAM,CAAC,KAAQ,KAAM,CAAC,MAAQ,MACpE7sS,KAAI,SAAS3D,GAAK,MAAO,CAAC,IAAImkF,OAAO,IAAMnkF,EAAE,GAAK,IAAK,MAAOA,EAAE,OAC3D,SAAoBsuB,GAc1B,IAbA,IAAI/yB,EAAI+yB,EAELnlB,QAAQ,cAAe,IAEvBA,QAAQ,cAAc,IAEtBA,QAAQ,QAAQ,KAAKA,QAAQ,QAAQ,KAErCA,QAAQ,cAAe,KAEvBA,QAAQ,uBAAuB,MAE/BA,QAAQ,WAAW,IACdlR,EAAI,EAAGA,EAAIu4S,GAASx4S,SAAUC,EAAGsD,EAAIA,EAAE4N,QAAQqnS,GAASv4S,GAAG,GAAIu4S,GAASv4S,GAAG,IACnF,OAAOsD,IAILq1S,IAA2BH,GAAW,GAClC,SAAkB3T,GACxB,YAAoBljS,IAAjB62S,GAAS3T,GAA0B2T,GAAS3T,GACvC2T,GAAS3T,GAAM,IAAI34M,OAAO,YAAc24M,EAAK,0BAA4BA,EAAK,IAAK,OAEzF+T,GAAW,wBAAyBC,GAAW,6BACnD,SAASC,GAAY7yS,EAAM+pM,GAC1B,IAAI3rJ,EAAIwyP,GAAY5wS,GAEhB2lQ,EAAU3lQ,EAAK6iC,MAAM6vQ,GAAQt0P,EAAE00P,YAAY,GAC3CrvR,EAAM,GACV,GAAGkiP,EAAQ7rQ,QAAUskD,EAAE56C,KAAM,CAC5B,GAAGumM,EAAKgpG,IAAK,MAAM,IAAI7xS,MAAM,4BAA8BykQ,EAAQ7rQ,OAAS,OAASskD,EAAE56C,MACvF,OAAOigB,EAMR,OAJAkiP,EAAQt+P,SAAQ,SAASvF,GACxB,IAAIwZ,EAAIxZ,EAAEmJ,QAAQ0nS,GAAS,IAAI9vQ,MAAM+vQ,IAClCt3R,GAAGmI,EAAIjlB,KAAK,CAAC8c,EAAE02R,GAAS12R,EAAE,IAAKpQ,EAAEoQ,EAAE,QAEhCmI,EAGR,IAAIuvR,GAAU,eACd,SAASC,GAASvyS,EAAEiL,GAAK,MAAO,IAAMjL,GAAKiL,EAAEk3B,MAAMmwQ,IAAS,wBAA0B,IAAM,IAAMrnS,EAAI,KAAOjL,EAAI,IAEjH,SAASwyS,GAAW90P,GAAK,OAAOj8B,EAAKi8B,GAAG34C,KAAI,SAASma,GAAK,MAAO,IAAMA,EAAI,KAAOw+B,EAAEx+B,GAAK,OAAOvU,KAAK,IACrG,SAAS8nS,GAAUzyS,EAAEiL,EAAEyyC,GAAK,MAAO,IAAM19C,GAAW,MAAL09C,EAAa80P,GAAW90P,GAAK,KAAa,MAALzyC,GAAcA,EAAEk3B,MAAMmwQ,IAAS,wBAA0B,IAAM,IAAMrnS,EAAI,KAAOjL,EAAI,KAAO,IAE/K,SAAS0yS,GAAahrS,EAAG8C,GAAK,IAAM,OAAO9C,EAAEirS,cAAcpoS,QAAQ,QAAQ,IAAO,MAAMwmB,GAAK,GAAGvmB,EAAG,MAAMumB,EAAK,MAAO,GAerH,IAqEI6hR,GAAQC,GArERC,GAAQ,CACX,GAAM,mCACN,QAAW,4BACX,SAAY,+BACZ,GAAM,0DACN,EAAK,sEACL,IAAO,yEACP,GAAM,uEACN,IAAO,4CACP,IAAO,mCAGR,KAAa,CACZ,4DACA,gDACA,sDACA,qDAGGC,GACK,0CADLA,GAEK,yCAFLA,GAGK,+CAiCLtQ,GAAa,SAASpL,GAA0B,IAAlB,IAAIj2R,EAAE,GAAoB/H,EAAE,EAAEA,EAAEg+R,EAAK,GAAGj+R,SAASC,EAAG,GAAGg+R,EAAK,GAAGh+R,GAAI,IAAI,IAAIoM,EAAE,EAAE2/O,EAAEiyC,EAAK,GAAGh+R,GAAGD,OAAOqM,EAAE2/O,EAAE3/O,GAA5F,MAAkGrE,EAAEtD,KAAKhD,MAAMsG,EAAGi2R,EAAK,GAAGh+R,GAAG2F,MAAMyG,EAAEA,EAArI,QAA4I,OAAOrE,GAC5L4xS,GAAcvQ,GACdW,GAAY,SAASzhS,EAAEqD,EAAE+rB,GAAgB,IAAX,IAAI8pQ,EAAG,GAAYxhS,EAAE2L,EAAG3L,EAAE03B,EAAG13B,GAAG,EAAGwhS,EAAG/8R,KAAK+I,OAAO0vB,aAAa08Q,GAAetxS,EAAEtI,KAAM,OAAOwhS,EAAGlwR,KAAK,IAAIJ,QAAQ+sR,EAAK,KACpJ4b,GAAa9P,GACb+P,GAAY,SAASxxS,EAAEqD,EAAEsV,GAAgB,IAAX,IAAIugR,EAAG,GAAYxhS,EAAE2L,EAAG3L,EAAE2L,EAAEsV,IAAKjhB,EAAGwhS,EAAG/8R,MAAM,IAAM6D,EAAEtI,GAAG0F,SAAS,KAAKC,OAAO,IAAK,OAAO67R,EAAGlwR,KAAK,KAC/HyoS,GAAaD,GACbE,GAAS,SAAS1xS,EAAEqD,EAAE+rB,GAAgB,IAAX,IAAI8pQ,EAAG,GAAYxhS,EAAE2L,EAAG3L,EAAE03B,EAAG13B,IAAKwhS,EAAG/8R,KAAK+I,OAAO0vB,aAAa+8Q,GAAY3xS,EAAEtI,KAAM,OAAOwhS,EAAGlwR,KAAK,KAC5H4oS,GAAUF,GACVG,GAAU,SAAS7xS,EAAEtI,GAAK,IAAIF,EAAMgrS,GAAexiS,EAAEtI,GAAI,OAAOF,EAAM,EAAIk6S,GAAO1xS,EAAGtI,EAAE,EAAEA,EAAE,EAAEF,EAAI,GAAK,IACrGs6S,GAAWD,GACXE,GAAU,SAAS/xS,EAAEtI,GAAK,IAAIF,EAAMgrS,GAAexiS,EAAEtI,GAAI,OAAOF,EAAM,EAAIk6S,GAAO1xS,EAAGtI,EAAE,EAAEA,EAAE,EAAEF,EAAI,GAAK,IACrGw6S,GAAWD,GACXE,GAAW,SAASjyS,EAAEtI,GAAK,IAAIF,EAAM,EAAEgrS,GAAexiS,EAAEtI,GAAI,OAAOF,EAAM,EAAIk6S,GAAO1xS,EAAGtI,EAAE,EAAEA,EAAE,EAAEF,EAAI,GAAK,IACxG06S,GAAYD,GAEhBhB,GAASC,GAAU,SAAelxS,EAAEtI,GAAK,IAAIF,EAAMgrS,GAAexiS,EAAEtI,GAAI,OAAOF,EAAM,EAAIiqS,GAAUzhS,EAAGtI,EAAE,EAAEA,EAAE,EAAEF,GAAO,IACrH,IAEI26S,GAAUC,GAFVC,GAAU,SAASryS,EAAEtI,GAAK,IAAIF,EAAMgrS,GAAexiS,EAAEtI,GAAI,OAAOF,EAAM,EAAIk6S,GAAO1xS,EAAGtI,EAAE,EAAEA,EAAE,EAAEF,GAAO,IACnG86S,GAAWD,GAEfF,GAAWC,GAAY,SAASpyS,EAAGukH,GAAO,OA9C1C,SAAwBvkH,EAAGukH,GAI1B,IAHA,IAAIlhH,EAAI,EAAI,GAAKrD,EAAEukH,EAAM,KAAO,GAC5Bn1F,IAAmB,IAAbpvB,EAAEukH,EAAM,KAAc,IAAOvkH,EAAEukH,EAAM,KAAO,EAAK,IACvDp1F,EAAc,GAATnvB,EAAEukH,EAAI,GACP7sH,EAAI,EAAGA,GAAK,IAAKA,EAAGy3B,EAAQ,IAAJA,EAAUnvB,EAAEukH,EAAM7sH,GAClD,OAAQ,MAAL03B,EAAwB,GAALD,EAAU9rB,GAAI5B,KAAYwtD,KACxC,GAAL7/B,EAAQA,GAAK,MACTA,GAAK,KAAMD,GAAKjwB,KAAK0xC,IAAI,EAAE,KAC3BvtC,EAAInE,KAAK0xC,IAAI,EAAGxhB,EAAI,IAAMD,GAsCeojR,CAAevyS,EAAGukH,IACnE,IAAIiuL,GAAS,SAAkBzyS,GAAK,OAAOnI,MAAMC,QAAQkI,IAEtD+qQ,IACF22B,GAAY,SAASzhS,EAAEqD,EAAE+rB,GAAK,OAAI1B,OAAO2rM,SAASr5N,GAAqCA,EAAE5C,SAAS,UAAUiG,EAAE+rB,GAAGxmB,QAAQ+sR,EAAK,IAAjE4b,GAAWvxS,EAAEqD,EAAE+rB,IAC5EoiR,GAAY,SAASxxS,EAAEqD,EAAEsV,GAAK,OAAO+U,OAAO2rM,SAASr5N,GAAKA,EAAE5C,SAAS,MAAMiG,EAAEA,EAAEsV,GAAK84R,GAAWzxS,EAAEqD,EAAEsV,IACnGk5R,GAAU,SAAiB7xS,EAAGtI,GAAK,IAAIg2B,OAAO2rM,SAASr5N,GAAI,OAAO8xS,GAAS9xS,EAAGtI,GAAI,IAAIF,EAAMwI,EAAEyyS,aAAa/6S,GAAI,OAAOF,EAAM,EAAIwI,EAAE5C,SAAS,OAAO1F,EAAE,EAAEA,EAAE,EAAEF,EAAI,GAAK,IACnKu6S,GAAU,SAAiB/xS,EAAGtI,GAAK,IAAIg2B,OAAO2rM,SAASr5N,GAAI,OAAOgyS,GAAShyS,EAAGtI,GAAI,IAAIF,EAAMwI,EAAEyyS,aAAa/6S,GAAI,OAAOF,EAAM,EAAIwI,EAAE5C,SAAS,OAAO1F,EAAE,EAAEA,EAAE,EAAEF,EAAI,GAAK,IACnKy6S,GAAW,SAAkBjyS,EAAGtI,GAAK,IAAIg2B,OAAO2rM,SAASr5N,GAAI,OAAOkyS,GAAUlyS,EAAGtI,GAAI,IAAIF,EAAM,EAAEwI,EAAEyyS,aAAa/6S,GAAI,OAAOsI,EAAE5C,SAAS,UAAU1F,EAAE,EAAEA,EAAE,EAAEF,EAAI,IAC5Jy5S,GAAS,SAAgBjxS,EAAGtI,GAAK,IAAIg2B,OAAO2rM,SAASr5N,GAAI,OAAOkxS,GAAQlxS,EAAGtI,GAAI,IAAIF,EAAMwI,EAAEyyS,aAAa/6S,GAAI,OAAOsI,EAAE5C,SAAS,UAAU1F,EAAE,EAAEA,EAAE,EAAEF,IAChJ66S,GAAU,SAAiBryS,EAAGtI,GAAK,IAAIg2B,OAAO2rM,SAASr5N,GAAI,OAAOsyS,GAAStyS,EAAGtI,GAAI,IAAIF,EAAMwI,EAAEyyS,aAAa/6S,GAAI,OAAOsI,EAAE5C,SAAS,OAAO1F,EAAE,EAAEA,EAAE,EAAEF,IAChJk6S,GAAS,SAAgB1xS,EAAGqD,EAAG+rB,GAAK,OAAQ1B,OAAO2rM,SAASr5N,GAAMA,EAAE5C,SAAS,OAAOiG,EAAE+rB,GAAKwiR,GAAQ5xS,EAAEqD,EAAE+rB,IACvG0xQ,GAAa,SAASpL,GAAQ,OAAQA,EAAK,GAAGj+R,OAAS,GAAKi2B,OAAO2rM,SAASq8D,EAAK,GAAG,IAAOhoQ,OAAOpqB,OAAOoyR,EAAK,IAAM2b,GAAY3b,IAChID,EAAU,SAASC,GAAQ,OAAOhoQ,OAAO2rM,SAASq8D,EAAK,IAAMhoQ,OAAOpqB,OAAOoyR,GAAQ,GAAGpyR,OAAOnK,MAAM,GAAIu8R,IACvGyc,GAAW,SAAiBnyS,EAAGtI,GAAK,OAAGg2B,OAAO2rM,SAASr5N,GAAWA,EAAE0yS,aAAah7S,GAAW06S,GAAUpyS,EAAEtI,IACxG86S,GAAS,SAAkBzyS,GAAK,OAAO2tB,OAAO2rM,SAASt5N,IAAMnI,MAAMC,QAAQkI,KAItD,oBAAZkqQ,UACTw3B,GAAY,SAASzhS,EAAEqD,EAAE+rB,GAAK,OAAO66O,QAAQ/hE,MAAMlyL,OAAO,KAAMhW,EAAE3C,MAAMgG,EAAE+rB,IAAIxmB,QAAQ+sR,EAAM,KAC5F+b,GAAS,SAAS1xS,EAAEqD,EAAE+rB,GAAK,OAAO66O,QAAQ/hE,MAAMlyL,OAAO,MAAOhW,EAAE3C,MAAMgG,EAAE+rB,KACxEyiR,GAAU,SAAS7xS,EAAEtI,GAAK,IAAIF,EAAMgrS,GAAexiS,EAAEtI,GAAI,OAAOF,EAAM,EAAIyyQ,QAAQ/hE,MAAMlyL,OAAOk9Q,EAAclzR,EAAE3C,MAAM3F,EAAE,EAAGA,EAAE,EAAEF,EAAI,IAAM,IACxIu6S,GAAU,SAAS/xS,EAAEtI,GAAK,IAAIF,EAAMgrS,GAAexiS,EAAEtI,GAAI,OAAOF,EAAM,EAAIyyQ,QAAQ/hE,MAAMlyL,OAAOi9Q,EAAkBjzR,EAAE3C,MAAM3F,EAAE,EAAGA,EAAE,EAAEF,EAAI,IAAM,IAC5Iy6S,GAAW,SAASjyS,EAAEtI,GAAK,IAAIF,EAAM,EAAEgrS,GAAexiS,EAAEtI,GAAI,OAAOF,EAAM,EAAIyyQ,QAAQ/hE,MAAMlyL,OAAO,KAAMhW,EAAE3C,MAAM3F,EAAE,EAAEA,EAAE,EAAEF,EAAI,IAAM,IAClIy5S,GAAS,SAASjxS,EAAEtI,GAAK,IAAIF,EAAMgrS,GAAexiS,EAAEtI,GAAI,OAAOF,EAAM,EAAIyyQ,QAAQ/hE,MAAMlyL,OAAO,KAAMhW,EAAE3C,MAAM3F,EAAE,EAAEA,EAAE,EAAEF,IAAQ,IAC5H66S,GAAU,SAASryS,EAAEtI,GAAK,IAAIF,EAAMgrS,GAAexiS,EAAEtI,GAAI,OAAOF,EAAM,EAAIyyQ,QAAQ/hE,MAAMlyL,OAAO,MAAOhW,EAAE3C,MAAM3F,EAAE,EAAEA,EAAE,EAAEF,IAAQ,KAG/H,IAAIm6S,GAAc,SAAS3xS,EAAGukH,GAAO,OAAOvkH,EAAEukH,IAC1C+sL,GAAiB,SAAStxS,EAAGukH,GAAO,OAAiB,IAATvkH,EAAEukH,EAAI,GAAWvkH,EAAEukH,IAC/DouL,GAAgB,SAAS3yS,EAAGukH,GAAO,IAAIt0D,EAAc,IAATjwD,EAAEukH,EAAI,GAAWvkH,EAAEukH,GAAM,OAAQt0D,EAAI,MAAUA,GAAyB,GAAnB,MAASA,EAAI,IAC9GuyO,GAAiB,SAASxiS,EAAGukH,GAAO,OAAOvkH,EAAEukH,EAAI,IAAI,GAAG,KAAKvkH,EAAEukH,EAAI,IAAI,KAAKvkH,EAAEukH,EAAI,IAAI,GAAGvkH,EAAEukH,IAC3Fs8K,GAAgB,SAAS7gS,EAAGukH,GAAO,OAAQvkH,EAAEukH,EAAI,IAAI,GAAKvkH,EAAEukH,EAAI,IAAI,GAAKvkH,EAAEukH,EAAI,IAAI,EAAGvkH,EAAEukH,IACxFquL,GAAgB,SAAS5yS,EAAGukH,GAAO,OAAQvkH,EAAEukH,IAAM,GAAKvkH,EAAEukH,EAAI,IAAI,GAAKvkH,EAAEukH,EAAI,IAAI,EAAGvkH,EAAEukH,EAAI,IAE9F,SAASomL,GAAUxpS,EAAM0H,GACxB,IAAUgqS,EAAIC,EAAWjpP,EAAG8yO,EAAIjlS,EAAGqiB,EAA/B/e,EAAE,GAAY+3S,EAAG,GACrB,OAAOlqS,GACN,IAAK,OAEJ,GADAkR,EAAM/gB,KAAK2f,EACRmyP,GAAWp9O,OAAO2rM,SAASrgO,MAAOgC,EAAIhC,KAAKqE,MAAMrE,KAAK2f,EAAG3f,KAAK2f,EAAE,EAAExX,GAAM/D,SAAS,gBAC/E,IAAI1F,EAAI,EAAGA,EAAIyJ,IAAQzJ,EAAKsD,GAAGkK,OAAO0vB,aAAa08Q,GAAet4S,KAAM+gB,IAAOA,GAAK,EACzF5Y,GAAQ,EACR,MAED,IAAK,OAAQnG,EAAI02S,GAAO14S,KAAMA,KAAK2f,EAAG3f,KAAK2f,EAAIxX,GAAO,MACtD,IAAK,UAAWA,GAAQ,EAAGnG,EAAIymS,GAAUzoS,KAAMA,KAAK2f,EAAG3f,KAAK2f,EAAIxX,GAAO,MAEvE,IAAK,OACJ,GAAsB,oBAAZ8oQ,QACL,OAAO0gC,GAAU7vS,KAAK9B,KAAMmI,EAAM,QADJnG,EAAIivQ,QAAQ/hE,MAAMlyL,OAAOi9Q,EAAkBj6R,KAAKqE,MAAMrE,KAAK2f,EAAG3f,KAAK2f,EAAE,EAAExX,IAE1GA,GAAO,EAAU,MAGlB,IAAK,aAAcnG,EAAI62S,GAAQ74S,KAAMA,KAAK2f,GAAIxX,EAAO,EAAIqhS,GAAexpS,KAAMA,KAAK2f,GAAI,MACvF,IAAK,WAAY3d,EAAI+2S,GAAQ/4S,KAAMA,KAAK2f,GAAIxX,EAAO,EAAIqhS,GAAexpS,KAAMA,KAAK2f,GAAI,MAErF,IAAK,SAAU3d,EAAIi3S,GAASj5S,KAAMA,KAAK2f,GAAIxX,EAAO,EAAI,EAAIqhS,GAAexpS,KAAMA,KAAK2f,GAAI,MAExF,IAAK,OAAQxX,EAAO,EAAKqhS,GAAexpS,KAAMA,KAAK2f,GAAI3d,EAAIi2S,GAAOj4S,KAAMA,KAAK2f,GAAc,EAAPxX,IAAaA,GAAQ,GAAG,MAE5G,IAAK,QAASA,EAAO,EAAKqhS,GAAexpS,KAAMA,KAAK2f,GAAI3d,EAAIq3S,GAAQr5S,KAAMA,KAAK2f,GAAc,EAAPxX,IAAaA,GAAQ,GAAY,EAAPA,IAAc,MAE9H,IAAK,OACJ,IADYA,EAAO,EAAGnG,EAAI,GACqB,KAAxC6uD,EAAE8nP,GAAY34S,KAAMA,KAAK2f,EAAIxX,OAAc4xS,EAAG52S,KAAK24R,EAASjrO,IACnE7uD,EAAI+3S,EAAG/pS,KAAK,IAAK,MAClB,IAAK,QACJ,IADa7H,EAAO,EAAGnG,EAAI,GACmB,KAAvC6uD,EAAEynP,GAAet4S,KAAKA,KAAK2f,EAAGxX,KAAY4xS,EAAG52S,KAAK24R,EAASjrO,IAAI1oD,GAAM,EAC5EA,GAAM,EAAGnG,EAAI+3S,EAAG/pS,KAAK,IAAK,MAG3B,IAAK,YACJ,IADiBhO,EAAI,GAAI+e,EAAM/gB,KAAK2f,EAChCjhB,EAAI,EAAGA,EAAIyJ,IAAQzJ,EAAG,CACzB,GAAGsB,KAAK0yR,OAAoC,IAA5B1yR,KAAK0yR,KAAKrhQ,QAAQtQ,GAIjC,OAHA8vC,EAAI8nP,GAAY34S,KAAM+gB,GACtB/gB,KAAK2f,EAAIoB,EAAM,EACf4iR,EAAKgO,GAAU7vS,KAAK9B,KAAMmI,EAAKzJ,EAAGmyD,EAAI,YAAc,aAC7CkpP,EAAG/pS,KAAK,IAAM2zR,EAEtBoW,EAAG52S,KAAK24R,EAASwc,GAAet4S,KAAM+gB,KACtCA,GAAK,EACJ/e,EAAI+3S,EAAG/pS,KAAK,IAAK7H,GAAQ,EAAG,MAE/B,IAAK,QACJ,GAAsB,oBAAZ8oQ,QAAyB,CAClCjvQ,EAAIivQ,QAAQ/hE,MAAMlyL,OAAOi9Q,EAAkBj6R,KAAKqE,MAAMrE,KAAK2f,EAAG3f,KAAK2f,EAAIxX,IACvE,MAGF,IAAK,YACJ,IADiBnG,EAAI,GAAI+e,EAAM/gB,KAAK2f,EAChCjhB,EAAI,EAAGA,GAAKyJ,IAAQzJ,EAAG,CAC1B,GAAGsB,KAAK0yR,OAAoC,IAA5B1yR,KAAK0yR,KAAKrhQ,QAAQtQ,GAIjC,OAHA8vC,EAAI8nP,GAAY34S,KAAM+gB,GACtB/gB,KAAK2f,EAAIoB,EAAM,EACf4iR,EAAKgO,GAAU7vS,KAAK9B,KAAMmI,EAAKzJ,EAAGmyD,EAAI,YAAc,aAC7CkpP,EAAG/pS,KAAK,IAAM2zR,EAEtBoW,EAAG52S,KAAK24R,EAAS6c,GAAY34S,KAAM+gB,KACnCA,GAAK,EACJ/e,EAAI+3S,EAAG/pS,KAAK,IAAK,MAEpB,QACD,OAAO7H,GACN,KAAK,EAA6C,OAA1C0xS,EAAKlB,GAAY34S,KAAMA,KAAK2f,GAAI3f,KAAK2f,IAAYk6R,EACzD,KAAK,EAAiF,OAA9EA,GAAY,MAANhqS,EAAY8pS,GAAgBrB,IAAgBt4S,KAAMA,KAAK2f,GAAI3f,KAAK2f,GAAK,EAAUk6R,EAC7F,KAAK,EAAG,KAAM,EACb,MAAS,MAANhqS,GAAwC,IAAR,IAAjB7P,KAAKA,KAAK2f,EAAE,KAAmBk6R,GAAO1xS,EAAO,EAAK0/R,GAAgB+R,IAAe55S,KAAMA,KAAK2f,GAAI3f,KAAK2f,GAAK,EAAUk6R,IAC/HC,EAAKtQ,GAAexpS,KAAMA,KAAK2f,GAAI3f,KAAK2f,GAAK,EAAYm6R,GACjE,KAAK,EAAG,KAAM,EACb,GAAS,MAANjqS,EAGW,OAFCiqS,EAAH,GAAR3xS,EAAgBgxS,GAASn5S,KAAMA,KAAK2f,GAC7Bw5R,GAAS,CAACn5S,KAAKA,KAAK2f,EAAE,GAAG3f,KAAKA,KAAK2f,EAAE,GAAG3f,KAAKA,KAAK2f,EAAE,GAAG3f,KAAKA,KAAK2f,EAAE,GAAG3f,KAAKA,KAAK2f,EAAE,GAAG3f,KAAKA,KAAK2f,EAAE,GAAG3f,KAAKA,KAAK2f,EAAE,GAAG3f,KAAKA,KAAK2f,EAAE,IAAK,GAC9I3f,KAAK2f,GAAK,EAAUm6R,EACd3xS,EAAO,EAEf,KAAK,GAAInG,EAAIw2S,GAAUx4S,KAAMA,KAAK2f,EAAGxX,IAExB,OAAdnI,KAAK2f,GAAGxX,EAAanG,EAGtB,IAEIg4S,GAAkB,SAAShzS,EAAGJ,EAAK2kH,GAAOvkH,EAAEukH,GAAc,IAAN3kH,EAAaI,EAAEukH,EAAI,GAAO3kH,IAAQ,EAAK,KAE/F,SAASqzS,GAAWpqS,EAAGjJ,EAAKvB,GAC3B,IAAI8C,EAAO,EAAGzJ,EAAI,EAClB,GAAS,SAAN2G,EAAc,CAClB,IAAI3G,EAAI,EAAGA,GAAKkI,EAAInI,SAAUC,EAAGs7S,GAAgBh6S,KAAM4G,EAAI+1B,WAAWj+B,GAAIsB,KAAK2f,EAAI,EAAIjhB,GACrFyJ,EAAO,EAAIvB,EAAInI,YACT,GAAS,SAAN4G,EAAc,CACvB,GAAsB,oBAAZ4rQ,SAA2C,KAAhBipB,EAEvC,IAAIx7R,EAAI,EAAGA,GAAKkI,EAAInI,SAAUC,EAAG,CAC7B,IAAIw7S,EAAYjpC,QAAQ/hE,MAAMpyL,OAAOo9Q,EAActzR,EAAIyrI,OAAO3zI,IAC9DsB,KAAKA,KAAK2f,EAAIjhB,GAAKw7S,EAAU,QAIjC,IADAtzS,EAAMA,EAAIgJ,QAAQ,gBAAiB,KAC/BlR,EAAI,EAAGA,GAAKkI,EAAInI,SAAUC,EAAGsB,KAAKA,KAAK2f,EAAIjhB,GAA0B,IAApBkI,EAAI+1B,WAAWj+B,GAElEyJ,EAAOvB,EAAInI,WACL,IAAS,QAAN4G,EAAa,CACtB,KAAM3G,EAAImR,IAAKnR,EACjBsB,KAAKA,KAAK2f,KAAQylF,SAASx+F,EAAIvC,MAAM,EAAE3F,EAAG,EAAEA,EAAE,GAAI,KAAK,EACnD,OAAOsB,KACH,GAAS,YAANqF,EAAiB,CAC5B,IAAIqb,EAAMxa,KAAKM,IAAIxG,KAAK2f,EAAI9P,EAAG7P,KAAKvB,QACjC,IAAIC,EAAI,EAAGA,EAAIwH,KAAKM,IAAII,EAAInI,OAAQoR,KAAMnR,EAAG,CAC5C,IAAI0iS,EAAKx6R,EAAI+1B,WAAWj+B,GACxBsB,KAAKA,KAAK2f,KAAa,IAALyhR,EAClBphS,KAAKA,KAAK2f,KAAQyhR,GAAM,EAEzB,KAAMphS,KAAK2f,EAAIe,GAAK1gB,KAAKA,KAAK2f,KAAO,EACrC,OAAO3f,KACD,OAAO6P,GACd,KAAM,EAAG1H,EAAO,EAAGnI,KAAKA,KAAK2f,GAAS,IAAJ/Y,EAAU,MAC5C,KAAM,EAAGuB,EAAO,EAAGnI,KAAKA,KAAK2f,GAAS,IAAJ/Y,EAAUA,KAAS,EAAG5G,KAAKA,KAAK2f,EAAE,GAAS,IAAJ/Y,EAAU,MACnF,KAAM,EAAGuB,EAAO,EAAGnI,KAAKA,KAAK2f,GAAS,IAAJ/Y,EAAUA,KAAS,EAAG5G,KAAKA,KAAK2f,EAAE,GAAS,IAAJ/Y,EAAUA,KAAS,EAAG5G,KAAKA,KAAK2f,EAAE,GAAS,IAAJ/Y,EAAU,MAC1H,KAAM,EAAGuB,EAAO,EAtCI,SAASnB,EAAGJ,EAAK2kH,GAAOvkH,EAAEukH,GAAc,IAAN3kH,EAAaI,EAAEukH,EAAI,GAAO3kH,IAAQ,EAAK,IAAOI,EAAEukH,EAAI,GAAO3kH,IAAQ,GAAM,IAAOI,EAAEukH,EAAI,GAAO3kH,IAAQ,GAAM,IAsC9IuzS,CAAgBn6S,KAAM4G,EAAK5G,KAAK2f,GAAI,MACvD,KAAM,EAAa,GAAVxX,EAAO,EAAY,MAAN9C,EAAW,EAnMnC,SAAyB2B,EAAGiZ,EAAGsrG,GAC9B,IAAI6uL,GAASn6R,EAAI,GAAO,EAAEA,IAAK,IAAc,EAAI,IAAM,EAAImW,EAAI,EAAGD,EAAI,EAClE0qN,EAAKu5D,GAAOn6R,EAAKA,EACjBzU,SAASq1O,GACC,GAANA,EAASzqN,EAAID,EAAI,GAExBC,EAAIlwB,KAAK8H,MAAM9H,KAAK2Y,IAAIgiO,GAAM36O,KAAK6pP,KACnC55N,EAAI0qN,EAAK36O,KAAK0xC,IAAI,EAAG,GAAKxhB,GACtBA,IAAM,QAAW5qB,SAAS2qB,IAAOA,EAAIjwB,KAAK0xC,IAAI,EAAE,KAASxhB,GAAK,MAC3DD,GAAKjwB,KAAK0xC,IAAI,EAAE,IAAKxhB,GAAG,QANZA,EAAI,KAAOD,EAAI5qB,MAAM0U,GAAK,MAAS,GAQvD,IAAI,IAAIvhB,EAAI,EAAGA,GAAK,IAAKA,EAAGy3B,GAAG,IAAKnvB,EAAEukH,EAAM7sH,GAAS,IAAJy3B,EACjDnvB,EAAEukH,EAAM,IAAW,GAAJn1F,IAAa,EAAU,GAAJD,EAClCnvB,EAAEukH,EAAM,GAAMn1F,GAAK,EAAKgkR,EAsLYC,CAAgBr6S,KAAM4G,EAAK5G,KAAK2f,GAAI,MAEvE,KAAK,GAAI,MACT,KAAM,EAAGxX,EAAO,EAzCI,SAASnB,EAAGJ,EAAK2kH,GAAOvkH,EAAEukH,GAAc,IAAN3kH,EAAaI,EAAEukH,EAAI,GAAO3kH,GAAO,EAAK,IAAOI,EAAEukH,EAAI,GAAO3kH,GAAO,GAAM,IAAOI,EAAEukH,EAAI,GAAO3kH,GAAO,GAAM,IAyC3I0zS,CAAet6S,KAAM4G,EAAK5G,KAAK2f,IAEnC,OAAhB3f,KAAK2f,GAAKxX,EAAanI,KAGxB,SAAS4xS,GAAW2I,EAAQC,GAC3B,IAAIrkR,EAAIqiR,GAAUx4S,KAAKA,KAAK2f,EAAE46R,EAAO97S,QAAQ,GAC7C,GAAG03B,IAAMokR,EAAQ,MAAM,IAAI10S,MAAM20S,EAAM,YAAcD,EAAS,QAAUpkR,GACxEn2B,KAAK2f,GAAK46R,EAAO97S,QAAQ,EAG1B,SAASonS,GAAUhoB,EAAM7hL,GACxB6hL,EAAKl+P,EAAIq8E,EACT6hL,EAAKioB,WAAa6L,GAClB9zB,EAAKkpB,IAAM6K,GACX/zB,EAAK6nB,YAAcuU,GAGpB,SAASQ,GAAU58B,EAAMp/Q,GAAUo/Q,EAAKl+P,GAAKlhB,EAE7C,SAAS6qS,GAAQ98H,GAChB,IAAIxqK,EAAIk6R,EAAY1vH,GAEpB,OADAq5H,GAAU7jS,EAAG,GACNA,EAIR,SAAS04S,GAAa/1S,EAAMg2S,EAAIjsG,GAC/B,GAAI/pM,EAAJ,CACA,IAAIi2S,EAASC,EAASp8S,EACtBonS,GAAUlhS,EAAMA,EAAKgb,GAAK,GAE1B,IADA,IAAI8qO,EAAI9lP,EAAKlG,OAAQq8S,EAAK,EAAG/U,EAAM,EAC7BphS,EAAKgb,EAAI8qO,GAAG,CAET,KADRqwD,EAAKn2S,EAAKmhS,WAAW,MACPgV,GAAW,IAALA,KAAoC,IAArBn2S,EAAKmhS,WAAW,KAAY,IAC/D,IAAIn+E,EAAIozF,GAAeD,IAAOC,GAAe,OAG7C,IADAt8S,EAAmB,KADnBm8S,EAAUj2S,EAAKmhS,WAAW,IAEtB+U,EAAU,EAAGA,EAAS,GAAgB,IAAVD,IAAmBC,EAASp8S,IAA4C,KAAhCm8S,EAAUj2S,EAAKmhS,WAAW,MAAc,EAAE+U,EAClH9U,EAAMphS,EAAKgb,EAAIlhB,EACf,IAAIsO,GAAK46M,EAAEtiN,GAAGo1S,IAAW91S,EAAMlG,EAAQiwM,GAEvC,GADA/pM,EAAKgb,EAAIomR,EACN4U,EAAG5tS,EAAG46M,EAAExjN,EAAG22S,GAAK,SAKrB,SAASE,KACR,IAAIte,EAAO,GAAIue,EAAQnpC,EAAU,IAAM,KACnCopC,EAAS,SAAmB1uI,GAC/B,IAAIxqK,EAAKsnS,GAAQ98H,GAEjB,OADAq5H,GAAU7jS,EAAG,GACNA,GAGJm5S,EAASD,EAAOD,GAEhBG,EAAS,WACRD,IACDA,EAAO18S,OAAS08S,EAAOx7R,KAAKw7R,EAASA,EAAO92S,MAAM,EAAG82S,EAAOx7R,IAAWA,EAAIw7R,EAAO18S,QAClF08S,EAAO18S,OAAS,GAAGi+R,EAAKv5R,KAAKg4S,GAChCA,EAAS,OAGNj4S,EAAO,SAAiBspK,GAC3B,OAAG2uI,GAAW3uI,EAAM2uI,EAAO18S,OAAS08S,EAAOx7R,EAAYw7R,GACvDC,IACQD,EAASD,EAAOh1S,KAAKQ,IAAI8lK,EAAG,EAAGyuI,MAUxC,MAAO,CAAG/3S,KAAKA,EAAMC,KAFV,SAAiBw4B,GAAOy/Q,IAAuC,OAA7BD,EAASx/Q,GAAehc,IAAWw7R,EAAOx7R,EAAIw7R,EAAO18S,QAAQyE,EAAK+3S,IAE/Ev6R,IAPtB,WAET,OADA06R,IACOtT,GAAW,CAACpL,KAKqB2e,MAAM3e,GAGhD,SAAS4e,GAAaC,EAAI93R,EAAM2lR,EAAS3qS,GACxC,IAAuBkhB,EAAnB9P,GAAK2rS,GAAO/3R,GAChB,IAAGlY,MAAMsE,GAAT,CACIpR,IAAQA,EAASs8S,GAAelrS,GAAGtM,IAAM6lS,GAAS,IAAI3qS,QAAU,GACpEkhB,EAAI,GAAK9P,GAAK,IAAO,EAAI,GAAK,EAC3BpR,GAAU,OAAQkhB,EAAMlhB,GAAU,SAAUkhB,EAAMlhB,GAAU,WAAYkhB,EAC3E,IAAI3d,EAAIu5S,EAAGr4S,KAAKyc,GACb9P,GAAK,IAAM7N,EAAE0jS,YAAY,EAAG71R,IAE9B7N,EAAE0jS,YAAY,EAAgB,KAAR,IAAJ71R,IAClB7N,EAAE0jS,YAAY,EAAI71R,GAAK,IAExB,IAAI,IAAInR,EAAI,EAAQ,GAALA,IAAUA,EAAG,CAC3B,KAAGD,GAAU,KACR,CAAEuD,EAAE0jS,YAAY,EAAGjnS,GAAS,MADZuD,EAAE0jS,YAAY,EAAmB,KAAN,IAATjnS,IAAsBA,IAAW,EAGtEA,EAAS,GAAK+6S,GAAOpQ,IAAUmS,EAAGp4S,KAAKimS,IAG3C,SAASqS,GAAex7L,EAAM8lL,EAAKr3F,GAClC,IAAI5kL,EAAMmqR,GAAIh0L,GAQd,GAPG8lL,EAAI17R,GACHyf,EAAI4xR,OAAM5xR,EAAI3c,GAAK44R,EAAI17R,EAAE8C,GACzB2c,EAAI6xR,OAAM7xR,EAAI7iB,GAAK8+R,EAAI17R,EAAEpD,KAEzB6iB,EAAI4xR,OAAM5xR,EAAI3c,GAAK44R,EAAI54R,GACvB2c,EAAI6xR,OAAM7xR,EAAI7iB,GAAK8+R,EAAI9+R,KAEvBynM,GAAQA,EAAKktG,KAAO,GAAI,CAC3B,KAAM9xR,EAAI3c,GAAK,KAAO2c,EAAI3c,GAAK,IAC/B,KAAM2c,EAAI7iB,GAAK,OAAS6iB,EAAI7iB,GAAK,MAElC,OAAO6iB,EAGR,SAAS+xR,GAAgB57L,EAAM5oD,EAAOq3I,GACrC,IAAI5kL,EAAMmqR,GAAIh0L,GAGd,OAFAn2F,EAAIzf,EAAIoxS,GAAe3xR,EAAIzf,EAAGgtD,EAAMhtD,EAAGqkM,GACvC5kL,EAAIsM,EAAIqlR,GAAe3xR,EAAIsM,EAAGihC,EAAMhtD,EAAGqkM,GAChC5kL,EAGR,SAASgyR,GAAgB3uS,EAAGyuS,GAC3B,GAAGzuS,EAAEuuS,MAAQvuS,EAAEA,EAAI,EAAiB,IAAZA,EAAI8mS,GAAI9mS,GAAUA,EAAEA,EAAI,GAAGA,EAAEA,GAAMyuS,EAAO,EAAK,MAAS,IAChF,GAAGzuS,EAAEwuS,MAAQxuS,EAAElG,EAAI,EAAiB,IAAZkG,EAAI8mS,GAAI9mS,GAAUA,EAAElG,EAAI,GAAGkG,EAAElG,GAAM20S,EAAO,EAAK,QAAaA,EAAO,EAAK,MAAU,MAC1G,IAAIvxS,EAAI0xS,GAAY5uS,GAGpB,OAFIA,EAAEuuS,MAAkB,MAAVvuS,EAAEuuS,OAAcrxS,EAAYA,EA8DNuF,QAAQ,WAAW,SA7DnDzC,EAAEwuS,MAAkB,MAAVxuS,EAAEwuS,OAActxS,EAAYA,EAwDNuF,QAAQ,kBAAkB,WAvDvDvF,EAGR,SAAS2xS,GAAiB/0S,EAAGynM,GAC5B,OAAY,GAATznM,EAAEoD,EAAEpD,GAAWA,EAAEoD,EAAEsxS,MAClB10S,EAAEmvB,EAAEnvB,IAAMynM,EAAKktG,MAAQ,GAAK,QAAWltG,EAAKktG,MAAQ,EAAI,MAAU,QAAa30S,EAAEmvB,EAAEulR,KAI3E,GAAT10S,EAAEoD,EAAE8C,GAAWlG,EAAEoD,EAAEqxS,MAClBz0S,EAAEmvB,EAAEjpB,IAAMuhM,EAAKktG,MAAQ,GAAK,MAAS,MAAU30S,EAAEmvB,EAAEslR,KAIhDI,GAAgB70S,EAAEoD,EAAGqkM,EAAKktG,MAAQ,IAAME,GAAgB70S,EAAEmvB,EAAGs4K,EAAKktG,OAH/D30S,EAAEoD,EAAEsxS,KAAO,GAAK,KAAOM,GAAWh1S,EAAEoD,EAAEpD,GAAK,KAAOA,EAAEmvB,EAAEulR,KAAO,GAAK,KAAOM,GAAWh1S,EAAEmvB,EAAEnvB,IALxFA,EAAEoD,EAAEqxS,KAAO,GAAK,KAAOQ,GAAWj1S,EAAEoD,EAAE8C,GAAK,KAAOlG,EAAEmvB,EAAEslR,KAAO,GAAK,KAAOQ,GAAWj1S,EAAEmvB,EAAEjpB,GA+CnG,SAASgvS,GAAWC,GAAU,OAAOh3M,SAAmBg3M,EAGjBxsS,QAAQ,WAAW,MAHM,IAAM,EACtE,SAASqsS,GAAW58R,GAAO,MAAO,IAAMA,EAAM,GAI9C,SAASg9R,GAAWC,GAAmD,IAAzC,IAAInvS,EAAcmvS,EAGT1sS,QAAQ,aAAa,MAHH7C,EAAI,EAAGrO,EAAI,EAASA,IAAMyO,EAAE1O,SAAUC,EAAGqO,EAAI,GAAGA,EAAII,EAAEwvB,WAAWj+B,GAAK,GAAI,OAAOqO,EAAI,EAC9I,SAASmvS,GAAW5xJ,GAAO,GAAGA,EAAM,EAAG,MAAM,IAAIzkJ,MAAM,kBAAoBykJ,GAAM,IAAIjgJ,EAAE,GAAI,MAAMigJ,EAAKA,EAAKA,EAAIpkJ,KAAK8H,OAAOs8I,EAAI,GAAG,IAAKjgJ,EAAI6B,OAAO0vB,cAAe0uH,EAAI,GAAG,GAAM,IAAMjgJ,EAAG,OAAOA,EAM9L,SAASkyS,GAAYC,GAEpB,IADA,IAAI70F,EAAI,EAAGC,EAAI,EACPlpN,EAAI,EAAGA,EAAI89S,EAAK/9S,SAAUC,EAAG,CACpC,IAAI0iS,EAAKob,EAAK7/Q,WAAWj+B,GACtB0iS,GAAM,IAAMA,GAAM,GAAIz5E,EAAI,GAAKA,GAAKy5E,EAAK,IACpCA,GAAM,IAAMA,GAAM,KAAIx5E,EAAI,GAAKA,GAAKw5E,EAAK,KAElD,MAAO,CAAEj0R,EAAGy6M,EAAI,EAAG3gN,EAAE0gN,EAAI,GAG1B,SAASo0F,GAAY97L,GAGpB,IAFA,IAAIqqC,EAAMrqC,EAAK9yG,EAAI,EACf9C,EAAE,GACAigJ,EAAKA,GAAMA,EAAI,GAAG,GAAI,EAAGjgJ,EAAI6B,OAAO0vB,cAAe0uH,EAAI,GAAG,GAAM,IAAMjgJ,EAC5E,OAAOA,GAAK41G,EAAKh5G,EAAI,GAEtB,SAASw1S,GAAaplP,GACrB,IAAIk0D,EAAMl0D,EAAMhmC,QAAQ,KACxB,OAAW,GAARk6F,EAAkB,CAAElhH,EAAGkyS,GAAYllP,GAAQjhC,EAAGmmR,GAAYllP,IACtD,CAAEhtD,EAAGkyS,GAAYllP,EAAMhzD,MAAM,EAAGknH,IAAOn1F,EAAGmmR,GAAYllP,EAAMhzD,MAAMknH,EAAM,KAEhF,SAASmxL,GAAaC,EAAGC,GACxB,YAAiB,IAAPA,GAAoC,iBAAPA,EACjCF,GAAaC,EAAGtyS,EAAGsyS,EAAGvmR,IAEZ,iBAAPumR,IAAiBA,EAAKZ,GAAY,IAC1B,iBAAPa,IAAiBA,EAAKb,GAAY,IACtCY,GAAMC,EAAKD,EAAKA,EAAK,IAAMC,GAGlC,SAASC,GAAkBxlP,GAC1B,IAAIr1D,EAAI,CAACqI,EAAE,CAAC8C,EAAE,EAAElG,EAAE,GAAGmvB,EAAE,CAACjpB,EAAE,EAAElG,EAAE,IAC1BskH,EAAM,EAAG7sH,EAAI,EAAG0iS,EAAK,EACrB5iS,EAAM64D,EAAM54D,OAChB,IAAI8sH,EAAM,EAAG7sH,EAAIF,MACZ4iS,EAAG/pO,EAAM16B,WAAWj+B,GAAG,IAAM,GAAK0iS,EAAK,MADpB1iS,EAEvB6sH,EAAM,GAAGA,EAAM61K,EAIhB,IAFAp/R,EAAEqI,EAAE8C,IAAMo+G,EAENA,EAAM,EAAG7sH,EAAIF,MACZ4iS,EAAG/pO,EAAM16B,WAAWj+B,GAAG,IAAM,GAAK0iS,EAAK,KADpB1iS,EAEvB6sH,EAAM,GAAGA,EAAM61K,EAIhB,GAFAp/R,EAAEqI,EAAEpD,IAAMskH,EAEP7sH,IAAMF,GAAiC,KAA1B64D,EAAM16B,aAAaj+B,GAAuC,OAA1BsD,EAAEo0B,EAAEjpB,EAAEnL,EAAEqI,EAAE8C,EAAGnL,EAAEo0B,EAAEnvB,EAAEjF,EAAEqI,EAAEpD,EAAUjF,EAEjF,IAAIupH,EAAM,EAAG7sH,GAAKF,MACb4iS,EAAG/pO,EAAM16B,WAAWj+B,GAAG,IAAM,GAAK0iS,EAAK,MADnB1iS,EAExB6sH,EAAM,GAAGA,EAAM61K,EAIhB,IAFAp/R,EAAEo0B,EAAEjpB,IAAMo+G,EAENA,EAAM,EAAG7sH,GAAKF,MACb4iS,EAAG/pO,EAAM16B,WAAWj+B,GAAG,IAAM,GAAK0iS,EAAK,KADnB1iS,EAExB6sH,EAAM,GAAGA,EAAM61K,EAGhB,OADAp/R,EAAEo0B,EAAEnvB,IAAMskH,EACHvpH,EASR,SAAS86S,GAAY78L,EAAMhgG,EAAGje,GAC7B,OAAW,MAARi+G,GAA0B,MAAVA,EAAKpwG,GAAuB,KAAVowG,EAAKpwG,EAAiB,QAC7CxP,IAAX4/G,EAAKpvD,EAAwBovD,EAAKpvD,GACxB,KAAVovD,EAAKpwG,IAAaowG,EAAK8C,GAAK/gH,GAAKA,EAAEqiS,SAAQpkL,EAAK8C,EAAI/gH,EAAEqiS,QAT1D,SAA0BpkL,EAAMhgG,GAC/B,IAAIivD,EAAe,KAAV+wC,EAAKpwG,GAAYoQ,aAAayV,KACvC,GAAa,MAAVuqF,EAAK8C,EAAW,IAAM,OAAQ9C,EAAKpvD,EAAI+rO,EAAI9gQ,OAAOmkF,EAAK8C,EAAG7zC,EAAImkO,EAAQpzR,GAAKA,GAAO,MAAMmW,IAC3F,IAAM,OAAQ6pF,EAAKpvD,EAAI+rO,EAAI9gQ,QAAQmkF,EAAK88L,IAAI,IAAIC,WAAW9tO,EAAI,GAAK,GAAKA,EAAImkO,EAAQpzR,GAAKA,GAAO,MAAMmW,GAAK,MAAO,GAAGnW,GAO5Fg9R,CAAiBh9L,EAAnC5/G,MAAL4f,EAA8CggG,EAAKhgG,EACxBA,IAG/B,SAASi9R,GAAkB/1F,EAAOzY,GACjC,IAAIvqM,EAAIuqM,GAAQA,EAAKyY,MAAQzY,EAAKyY,MAAQ,SACtCg2F,EAAS,GACb,OADiBA,EAAOh5S,GAAKgjN,EACtB,CAAEO,WAAY,CAACvjN,GAAIsjN,OAAQ01F,GAGnC,SAASC,GAAcC,EAAK14S,EAAM+pM,GACjC,IAAI1sM,EAAI0sM,GAAQ,GACZh9E,EAAQ2rL,EAAMz+S,MAAMC,QAAQw+S,GAAOr7S,EAAE0vH,MAErCmgG,EAAKwrF,IAAQ3rL,EAAQ,GAAO,IAC5B4rL,EAAK,EAAGC,EAAK,EACjB,GAAG1rF,GAAkB,MAAZ7vN,EAAEw7S,OAAgB,CAC1B,GAAsB,iBAAZx7S,EAAEw7S,OAAoBF,EAAKt7S,EAAEw7S,WAClC,CACJ,IAAIC,EAA6B,iBAAZz7S,EAAEw7S,OAAqBjB,GAAYv6S,EAAEw7S,QAAUx7S,EAAEw7S,OACtEF,EAAKG,EAAQx2S,EAAGs2S,EAAKE,EAAQtwS,EAE1B0kN,EAAG,UAASA,EAAG,QAAU,SAE9B,IAAIx6J,EAAQ,CAAEhtD,EAAG,CAAC8C,EAAE,IAAUlG,EAAE,KAAWmvB,EAAG,CAACjpB,EAAE,EAAGlG,EAAE,IACtD,GAAG4qN,EAAG,QAAS,CACd,IAAI6rF,EAASb,GAAkBhrF,EAAG,SAClCx6J,EAAMhtD,EAAE8C,EAAIuwS,EAAOrzS,EAAE8C,EACrBkqD,EAAMhtD,EAAEpD,EAAIy2S,EAAOrzS,EAAEpD,EACrBowD,EAAMjhC,EAAEjpB,EAAIjH,KAAKQ,IAAI2wD,EAAMjhC,EAAEjpB,EAAGuwS,EAAOtnR,EAAEjpB,GACzCkqD,EAAMjhC,EAAEnvB,EAAIf,KAAKQ,IAAI2wD,EAAMjhC,EAAEnvB,EAAGy2S,EAAOtnR,EAAEnvB,IAC/B,GAAPq2S,IAAUjmP,EAAMjhC,EAAEnvB,EAAIq2S,EAAKI,EAAOtnR,EAAEnvB,EAAI,GAE5C,IAAI,IAAI0gN,EAAI,EAAGA,GAAKhjN,EAAKlG,SAAUkpN,EAClC,GAAIhjN,EAAKgjN,GAAT,CACA,IAAI/oN,MAAMC,QAAQ8F,EAAKgjN,IAAK,MAAM,IAAI9hN,MAAM,2CAC5C,IAAI,IAAI+hN,EAAI,EAAGA,GAAKjjN,EAAKgjN,GAAGlpN,SAAUmpN,EACrC,QAAyB,IAAfjjN,EAAKgjN,GAAGC,GAAlB,CACA,IAAI3nG,EAAO,CAAEhgG,EAAGtb,EAAKgjN,GAAGC,IACpB+1F,EAAML,EAAK31F,EAAGi2F,EAAML,EAAK31F,EAK7B,GAJGvwJ,EAAMhtD,EAAEpD,EAAI02S,IAAKtmP,EAAMhtD,EAAEpD,EAAI02S,GAC7BtmP,EAAMhtD,EAAE8C,EAAIywS,IAAKvmP,EAAMhtD,EAAE8C,EAAIywS,GAC7BvmP,EAAMjhC,EAAEnvB,EAAI02S,IAAKtmP,EAAMjhC,EAAEnvB,EAAI02S,GAC7BtmP,EAAMjhC,EAAEjpB,EAAIywS,IAAKvmP,EAAMjhC,EAAEjpB,EAAIywS,IAC7Bj5S,EAAKgjN,GAAGC,IAA4B,iBAAfjjN,EAAKgjN,GAAGC,IAAoBhpN,MAAMC,QAAQ8F,EAAKgjN,GAAGC,KAASjjN,EAAKgjN,GAAGC,aAAclyL,KAGxG,GADG92B,MAAMC,QAAQohH,EAAKhgG,KAAMggG,EAAK56G,EAAIV,EAAKgjN,GAAGC,GAAG,GAAI3nG,EAAKhgG,EAAIggG,EAAKhgG,EAAE,IACtD,OAAXggG,EAAKhgG,EAAc,GAAGggG,EAAK56G,EAAG46G,EAAKpwG,EAAI,QAAU,KAAI7N,EAAE67S,WAAY,SAAe59L,EAAKpwG,EAAI,QACpE,iBAAXowG,EAAKhgG,EAAgBggG,EAAKpwG,EAAI,IACnB,kBAAXowG,EAAKhgG,EAAiBggG,EAAKpwG,EAAI,IACtCowG,EAAKhgG,aAAayV,MACzBuqF,EAAK8C,EAAI/gH,EAAEqiS,QAAUzH,EAAIn4B,OAAO,IAC7BziQ,EAAE87S,WAAa79L,EAAKpwG,EAAI,IAAKowG,EAAKpvD,EAAI+rO,EAAI9gQ,OAAOmkF,EAAK8C,EAAGswL,EAAQpzL,EAAKhgG,MAClEggG,EAAKpwG,EAAI,IAAKowG,EAAKhgG,EAAIozR,EAAQpzL,EAAKhgG,GAAIggG,EAAKpvD,EAAI+rO,EAAI9gQ,OAAOmkF,EAAK8C,EAAG9C,EAAKhgG,KAE5EggG,EAAKpwG,EAAI,SAXiGowG,EAAOt7G,EAAKgjN,GAAGC,GAa/H,GAAGl2F,EACEmgG,EAAG8rF,KAAM9rF,EAAG8rF,GAAO,IACpB9rF,EAAG8rF,GAAKC,IAAQ/rF,EAAG8rF,GAAKC,GAAK76L,IAAG9C,EAAK8C,EAAI8uG,EAAG8rF,GAAKC,GAAK76L,GACzD8uG,EAAG8rF,GAAKC,GAAO39L,MACT,CACN,IAAI4nG,EAAWk0F,GAAY,CAAE5uS,EAAEywS,EAAI32S,EAAE02S,IAClC9rF,EAAGhK,IAAagK,EAAGhK,GAAU9kG,IAAG9C,EAAK8C,EAAI8uG,EAAGhK,GAAU9kG,GACzD8uG,EAAGhK,GAAY5nG,IAKlB,OADG5oD,EAAMhtD,EAAE8C,EAAI,MAAU0kN,EAAG,QAAU6qF,GAAarlP,IAC5Cw6J,EAER,SAASksF,GAAap5S,EAAM+pM,GAAQ,OAAO0uG,GAAc,KAAMz4S,EAAM+pM,GAErE,SAASsvG,GAAev3S,EAAGzE,GAG1B,OAFKA,IAAGA,EAAIsnS,GAAQ,IACpBtnS,EAAE0jS,YAAY,EAAGj/R,GACVzE,EAIR,SAASi8S,GAAmBt5S,GAC3B,IAAIu5S,EAAgBv5S,EAAKmhS,WAAW,GACpC,OAAyB,IAAlBoY,EAAsB,GAAKv5S,EAAKmhS,WAAWoY,EAAe,QAElE,SAASC,GAAmBx5S,EAAM3C,GACjC,IAAIo8S,GAAQ,EAGZ,OAH4B,MAALp8S,IAAao8S,GAAQ,EAAMp8S,EAAIsnS,GAAQ,EAAI,EAAI3kS,EAAKlG,SAC3EuD,EAAE0jS,YAAY,EAAG/gS,EAAKlG,QAClBkG,EAAKlG,OAAS,GAAGuD,EAAE0jS,YAAY,EAAG/gS,EAAM,QACrCy5S,EAAQp8S,EAAEqC,MAAM,EAAGrC,EAAE2d,GAAK3d,EAUlC,SAASq8S,GAAa15S,GACrB,MAAO,CAAE25S,IAAK35S,EAAKmhS,WAAW,GAAIyY,KAAM55S,EAAKmhS,WAAW,IAUzD,SAAS0Y,GAAc75S,EAAMlG,GAC5B,IAAI+N,EAAQ7H,EAAKgb,EACbvR,EAAQzJ,EAAKmhS,WAAW,GACxB/wQ,EAAMkpR,GAAmBt5S,GACzB85S,EAAY,GACZ17L,EAAI,CAAGlzG,EAAGklB,EAAKguB,EAAGhuB,GACtB,GAAoB,IAAP,EAAR3mB,GAAkB,CAGtB,IADA,IAAIswS,EAAe/5S,EAAKmhS,WAAW,GAC1BpnS,EAAI,EAAGA,GAAKggT,IAAgBhgT,EAAG+/S,EAAUt7S,KAAKk7S,GAAa15S,IACpEo+G,EAAE97G,EAAIw3S,OAEF17L,EAAE97G,EAAI,CAAC,CAAEq3S,IAAK,EAAGC,KAAM,IAK5B,OADA55S,EAAKgb,EAAInT,EAAQ/N,EACVskH,GArPa,SAAS47L,EAAGC,GAChC,IAAI/tF,EACJ,QAAsB,IAAZ+tF,EAAyB/tF,EAAS+tF,OAE3C,IAAM/tF,EAAS,EAAQ,MACvB,MAAMz6L,GAAKy6L,EAAS,KAGrB8tF,EAAEE,IAAM,SAASt/S,EAAKoF,GACrB,IAAIoxP,EAAI,IAAIn3P,MAAM,KACduO,EAAI,EAAGzO,EAAI,EAAGoM,EAAI,EAAG+E,EAAI,EAC7B,IAAInR,EAAI,EAAQ,KAALA,IAAYA,EAAGq3P,EAAEr3P,GAAKA,EACjC,IAAIA,EAAI,EAAQ,KAALA,IAAYA,EACtBoM,EAAKA,EAAIirP,EAAEr3P,GAAMa,EAAIb,EAAEa,EAAId,QAASk+B,WAAW,GAAI,IACnD9sB,EAAIkmP,EAAEr3P,GAAIq3P,EAAEr3P,GAAKq3P,EAAEjrP,GAAIirP,EAAEjrP,GAAK+E,EAG/BnR,EAAIoM,EAAI,EAAG,IAAIgf,EAAMoyQ,EAAYv3R,EAAKlG,QACtC,IAAI0O,EAAI,EAAGA,GAAKxI,EAAKlG,SAAU0O,EAE9BrC,GAAKA,EAAIirP,EADTr3P,EAAKA,EAAI,EAAG,MACG,IACfmR,EAAIkmP,EAAEr3P,GAAIq3P,EAAEr3P,GAAKq3P,EAAEjrP,GAAIirP,EAAEjrP,GAAK+E,EAC9Bia,EAAI3c,GAAMxI,EAAKwI,GAAK4oP,EAAGA,EAAEr3P,GAAGq3P,EAAEjrP,GAAI,KAEnC,OAAOgf,GAGR60R,EAAEG,IAAM,SAAS9hD,GAChB,IAAInsC,EAAQ,MAAM,IAAIhrN,MAAM,sBAC5B,OAAOgrN,EAAOkuF,WAAW,OAAO5+O,OAAO68L,GAAKgiD,OAAO,QAIrDC,CAnCgB,GAmC4B,oBAAXpuF,OAAyBA,YAASxwN,GA8NnE,IAAI6+S,GAAuBV,GAY3B,SAASW,GAAex6S,GACvB,IAAI2lJ,EAAM3lJ,EAAKmhS,WAAW,GACtBsZ,EAAYz6S,EAAKmhS,WAAW,GAGhC,OAFAsZ,GAAaz6S,EAAKmhS,WAAW,IAAM,GACnCnhS,EAAKgb,IACE,CAAExS,EAAGm9I,EAAK80J,UAAWA,GAE7B,SAASC,GAAep/L,EAAMj+G,GAK7B,OAJS,MAALA,IAAWA,EAAIsnS,GAAQ,IAC3BtnS,EAAE0jS,aAAa,EAAGzlL,EAAK9yG,GACvBnL,EAAE0jS,YAAY,EAAGzlL,EAAKm/L,WAAan/L,EAAK51G,GACxCrI,EAAE0jS,YAAY,EAAG,GACV1jS,EAKR,IAAIs9S,GAAqBrB,GACrBsB,GAAqBpB,GAGzB,SAASqB,GAA2B76S,GACnC,IAAIu5S,EAAgBv5S,EAAKmhS,WAAW,GACpC,OAAyB,IAAlBoY,GAAyC,aAAlBA,EAA+B,GAAKv5S,EAAKmhS,WAAWoY,EAAe,QAElG,SAASuB,GAA2B96S,EAAM3C,GACzC,IAAIo8S,GAAQ,EAGZ,OAH4B,MAALp8S,IAAao8S,GAAQ,EAAMp8S,EAAIsnS,GAAQ,MAC9DtnS,EAAE0jS,YAAY,EAAG/gS,EAAKlG,OAAS,EAAIkG,EAAKlG,OAAS,YAC7CkG,EAAKlG,OAAS,GAAGuD,EAAE0jS,YAAY,EAAG/gS,EAAM,QACrCy5S,EAAQp8S,EAAEqC,MAAM,EAAGrC,EAAE2d,GAAK3d,EAIlC,IAAI09S,GAAyBzB,GAIzB0B,GAAcH,GACdI,GAAcH,GAIlB,SAASI,GAAel7S,GACvB,IAAIqC,EAAIrC,EAAKN,MAAMM,EAAKgb,EAAGhb,EAAKgb,EAAI,GAChCmgS,EAAgB,EAAP94S,EAAE,GAAS+4S,EAAe,EAAP/4S,EAAE,GAClCrC,EAAKgb,GAAK,EACV3Y,EAAE,IAAM,IACR,IAAIg5S,EAAc,IAATD,EAAa5G,GAAS,CAAC,EAAG,EAAG,EAAG,EAAGnyS,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,IAAK,GAAK6gS,GAAc7gS,EAAG,IAAM,EACjG,OAAO84S,EAASE,EAAK,IAAOA,EAa7B,SAASC,GAAUt7S,GAClB,IAAIs7G,EAAO,CAAG51G,EAAG,GAAI+rB,EAAG,IAKxB,OAJA6pF,EAAK51G,EAAEpD,EAAItC,EAAKmhS,WAAW,GAC3B7lL,EAAK7pF,EAAEnvB,EAAItC,EAAKmhS,WAAW,GAC3B7lL,EAAK51G,EAAE8C,EAAIxI,EAAKmhS,WAAW,GAC3B7lL,EAAK7pF,EAAEjpB,EAAIxI,EAAKmhS,WAAW,GACpB7lL,EAYR,IAAIigM,GAAqBD,GACrBE,GAXJ,SAAmBl5S,EAAGjF,GAMrB,OALKA,IAAGA,EAAIsnS,GAAQ,KACpBtnS,EAAE0jS,YAAY,EAAGz+R,EAAEoD,EAAEpD,GACrBjF,EAAE0jS,YAAY,EAAGz+R,EAAEmvB,EAAEnvB,GACrBjF,EAAE0jS,YAAY,EAAGz+R,EAAEoD,EAAE8C,GACrBnL,EAAE0jS,YAAY,EAAGz+R,EAAEmvB,EAAEjpB,GACdnL,GA6BR,SAASo+S,GAAWz7S,GAAQ,OAAOA,EAAKmhS,WAAW,EAAG,KACtD,SAASua,GAAW17S,EAAM3C,GAAK,OAAQA,GAAKsnS,GAAQ,IAAI5D,YAAY,EAAG/gS,EAAM,KAmC7E,SAAS27S,GAAe5mD,EAAO13P,GAE9B,GADKA,IAAGA,EAAIsnS,GAAQ,KACf5vC,GAASA,EAAM6mD,KAAkD,OAA1Cv+S,EAAE0jS,YAAY,EAAG,GAAI1jS,EAAE0jS,YAAY,EAAG,GAAW1jS,EAC1D,MAAf03P,EAAMzzP,OACTjE,EAAE0jS,YAAY,EAAG,GACjB1jS,EAAE0jS,YAAY,EAAGhsC,EAAMzzP,QACE,MAAfyzP,EAAM8mD,OAChBx+S,EAAE0jS,YAAY,EAAG,GACjB1jS,EAAE0jS,YAAY,EAAGhsC,EAAM8mD,SAEvBx+S,EAAE0jS,YAAY,EAAG,GACjB1jS,EAAE0jS,YAAY,EAAG,IAElB,IAAI+a,EAAM/mD,EAAMgnD,MAAQ,EAIxB,GAHID,EAAM,EAAGA,GAAO,MACXA,EAAM,IAAGA,GAAO,OACzBz+S,EAAE0jS,YAAY,EAAG+a,GACZ/mD,EAAMR,KAAsB,MAAfQ,EAAM8mD,MAIjB,CACN,IAAItnD,EAAOQ,EAAMR,KAAO,SACN,iBAAPA,IAAiBA,GAAO,SAAWA,EAAI90P,SAAS,KAAKC,OAAO,IACvErC,EAAE0jS,YAAY,EAAGtgM,SAAS8zJ,EAAI70P,MAAM,EAAG,GAAI,KAC3CrC,EAAE0jS,YAAY,EAAGtgM,SAAS8zJ,EAAI70P,MAAM,EAAG,GAAI,KAC3CrC,EAAE0jS,YAAY,EAAGtgM,SAAS8zJ,EAAI70P,MAAM,EAAG,GAAI,KAC3CrC,EAAE0jS,YAAY,EAAG,UATjB1jS,EAAE0jS,YAAY,EAAG,GACjB1jS,EAAE0jS,YAAY,EAAG,GACjB1jS,EAAE0jS,YAAY,EAAG,GASlB,OAAO1jS,EAkCR,SAAS2+S,GAA8B3+S,EAAG6uD,GAEzC,IACI16B,EAAIn0B,EAAE8jS,WAAW,GACrB,OAAQ3vQ,GACP,KAAK,EAAY,MAAO,GACxB,KAAK,WAAY,KAAK,WAAY,MAJrB,CAAE+kN,EAAG,SAAU06B,EAAG,eAAgBz6B,EAAG,MAAOiiC,GAAI,eAIZp7Q,EAAE8jS,WAAW,KAAO,GAEtE,GAAI3vQ,EAAI,IAAO,MAAM,IAAItwB,MAAM,0BAA4BswB,EAAE/xB,SAAS,KAEtE,OADApC,EAAE2d,GAAK,EACA3d,EAAE8jS,WAAW,EAAQ,GAALj1O,EAAS,QAAU,UAQ3C,IAkCI+vP,GAAc,GAEdC,GAAc,CAACD,GADD,IAIdE,GAAmB,CACvB,EAAM,CAAE38S,EAAG,WAAY0L,EAxCL,GAyClB,EAAM,CAAE1L,EAAG,WAAY0L,EAAG+wS,IAC1B,EAAM,CAAEz8S,EAAG,qBAAsB0L,EAAG+wS,IACpC,EAAM,CAAEz8S,EAAG,YAAa0L,EA1CN,GA2ClB,EAAM,CAAE1L,EAAG,YAAa0L,EA3CN,GA4ClB,EAAM,CAAE1L,EAAG,iBAAkB0L,EA5CX,GA6ClB,EAAM,CAAE1L,EAAG,aAAc0L,EA7CP,GA8ClB,EAAM,CAAE1L,EAAG,YAAa0L,EA9CN,GA+ClB,EAAM,CAAE1L,EAAG,cAAe0L,EA/CR,GAgDlB,GAAM,CAAE1L,EAAG,sBAAuB0L,EAhDhB,GAiDlB,GAAM,CAAE1L,EAAG,YAAa0L,EA1CN,IA2ClB,GAAM,CAAE1L,EAAG,eAAgB0L,EAAGkxS,MAC9B,GAAM,CAAE58S,EAAG,gBAAiB0L,EAAGkxS,MAC/B,GAAM,CAAE58S,EAAG,UAAW0L,EAAG+wS,IACzB,GAAM,CAAEz8S,EAAG,UAAW0L,EAAG+wS,IACzB,GAAM,CAAEz8S,EAAG,gBAAiB0L,EA/CV,IAgDlB,GAAM,CAAE1L,EAAG,iBAAkB0L,EAvDX,GAwDlB,GAAM,CAAE1L,EAAG,YAAa0L,EAjDN,IAkDlB,GAAM,CAAE1L,EAAG,oBAAqB0L,EAlDd,IAmDlB,GAAM,CAAE1L,EAAG,aAAc0L,EA1DP,EA0DiBtM,EAAG,WACtC,GAAM,CAAEY,EAAG,SAAU0L,EAtCH,IAuClB,GAAM,CAAE1L,EAAG,cAAe0L,EAAG+wS,IAC7B,GAAM,CAAEz8S,EAAG,gBAAiB0L,EAAG+wS,IAC/B,GAAM,CAAEz8S,EAAG,WAAY0L,EAAG+wS,IAC1B,GAAM,CAAEz8S,EAAG,UAAW0L,EAAG+wS,IACzB,IAAM,IAIFI,GAAe,CACnB,EAAM,CAAE78S,EAAG,WAAY0L,EAtEL,GAuElB,EAAM,CAAE1L,EAAG,QAAS0L,EAAG+wS,IACvB,EAAM,CAAEz8S,EAAG,UAAW0L,EAAG+wS,IACzB,EAAM,CAAEz8S,EAAG,SAAU0L,EAAG+wS,IACxB,EAAM,CAAEz8S,EAAG,WAAY0L,EAAG+wS,IAC1B,EAAM,CAAEz8S,EAAG,WAAY0L,EAAG+wS,IAC1B,EAAM,CAAEz8S,EAAG,WAAY0L,EAAG+wS,IAC1B,EAAM,CAAEz8S,EAAG,aAAc0L,EAAG+wS,IAC5B,EAAM,CAAEz8S,EAAG,YAAa0L,EAAG+wS,IAC3B,GAAM,CAAEz8S,EAAG,WAAY0L,EA1DL,IA2DlB,GAAM,CAAE1L,EAAG,cAAe0L,EA3DR,IA4DlB,GAAM,CAAE1L,EAAG,cAAe0L,EA5DR,IA6DlB,GAAM,CAAE1L,EAAG,eAAgB0L,EA7DT,IA8DlB,GAAM,CAAE1L,EAAG,YAAa0L,EAlFN,GAmFlB,GAAM,CAAE1L,EAAG,YAAa0L,EAnFN,GAoFlB,GAAM,CAAE1L,EAAG,YAAa0L,EApFN,GAqFlB,GAAM,CAAE1L,EAAG,YAAa0L,EA1DN,IA2DlB,GAAM,CAAE1L,EAAG,cAAe0L,EAAG+wS,IAC7B,GAAM,CAAEz8S,EAAG,cAAe0L,EAvFR,GAwFlB,IAAM,IAIFoxS,GAAoB,CACxB,WAAY,CAAE98S,EAAG,SAAU0L,EAhFT,IAiFlB,WAAY,CAAE1L,EAAG,WAAY0L,EAjFX,IAkFlB,WAAY,KAGZ,WACC,IAAI,IAAI2Y,KAAKy4R,GAAsBjgT,OAAOI,UAAUyC,eAAe/B,KAAKm/S,GAAmBz4R,KAC3Fs4R,GAAiBt4R,GAAKw4R,GAAax4R,GAAKy4R,GAAkBz4R,IAF3D,GAKA,IAoVKxmB,GApVDk/S,GAAejO,EAAU6N,GAAkB,KAC3CK,GAAYlO,EAAU+N,GAAc,KAGpCI,GAAc,CAClB,EAAQ,KACR,EAAQ,KACR,EAAQ,GACR,EAAQ,KACR,GAAQ,KACR,GAAQ,KACR,GAAQ,KACR,GAAQ,KACR,GAAQ,KACR,GAAQ,KACR,GAAQ,KACR,GAAQ,KACR,GAAQ,KACR,GAAQ,KACR,GAAQ,KACR,GAAQ,KACR,GAAQ,KACR,GAAQ,KACR,GAAQ,KACR,GAAQ,KACR,GAAQ,KACR,GAAQ,KACR,GAAQ,KACR,GAAQ,KACR,GAAQ,KACR,GAAQ,KACR,GAAQ,KACR,GAAQ,KACR,GAAQ,KACR,GAAQ,KACR,IAAQ,KACR,IAAQ,KACR,IAAQ,KACR,IAAQ,KACR,IAAQ,KACR,IAAQ,KACR,IAAQ,KACR,IAAQ,KACR,IAAQ,KACR,IAAQ,KACR,IAAQ,KACR,IAAQ,KACR,IAAQ,KACR,IAAQ,KACR,IAAQ,KACR,IAAQ,KACR,IAAQ,KACR,IAAQ,KACR,IAAQ,KACR,MAAQ,MAIJC,GAAiB,CACpB,KACA,QACA,aACA,WACA,YACA,iBACA,eACA,WACA,SACA,WACA,cACA,kBACA,gBACA,YACA,UACA,YACA,eACA,UACA,YAmGGC,GAASrN,GA5FQ,CAEpB,EACA,SACA,SACA,MACA,IACA,SACA,SACA,MAGA,EACA,SACA,SACA,MACA,IACA,SACA,SACA,MAEA,QACA,MACA,IACA,QACA,QACA,MACA,SACA,QACA,SACA,SACA,SACA,SACA,QACA,SACA,MACA,SAEA,IACA,SACA,SACA,MACA,QACA,QACA,MACA,IACA,MACA,SACA,SACA,SACA,SACA,SACA,SACA,SAEA,QACA,QACA,SACA,SACA,SACA,SACA,QACA,QACA,MACA,QACA,MACA,QACA,SACA,SACA,QACA,QAGA,SACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GA9FiC7pS,KAAI,SAAS3D,GAAK,MAAO,CAAEA,GAAG,GAAI,IAAKA,GAAG,EAAG,IAAM,IAAFA,OAmG/E86S,GAAO,CACXlnB,EAAM,SACN,EAAM,UACN,GAAM,UACN,GAAM,QACN,GAAM,SACN,GAAM,QACN,GAAM,OACN,GAAM,gBACN,IAAM,SAEFmnB,GAAQpO,EAAUmO,IAKlBE,GAA+B,CAElC,6EAA8E,YAG9E,sCAAuC,OAGvC,0CAA2C,OAC3C,sCAAuC,OAGvC,6DAA8D,YAC9D,sEAAuE,YACvE,wEAAyE,WAGzE,wEAAyE,OACzE,6EAA8E,OAG9E,sCAAuC,OACvC,6EAA8E,OAG9E,oEAAqE,OAGrE,gDAAiD,OAGjD,2CAA4C,OAG5C,wCAAyC,OAGzC,qCAAsC,aACtC,4EAA6E,aAG7E,8EAA+E,OAG/E,oCAAqC,OACrC,wCAAyC,OAGzC,4CAA6C,OAG7C,uCAAwC,OACxC,8EAA+E,OAG/E,wCAAyC,QACzC,+EAAgF,QAGhF,yCAA0C,OAC1C,gFAAiF,OAGjF,gDAAiD,OACjD,6CAA8C,OAC9C,uFAAwF,OACxF,oFAAqF,OAGrF,sCAAuC,OACvC,6EAA8E,OAG9E,qCAAsC,OACtC,2CAA4C,OAC5C,uCAAwC,OACxC,kFAAmF,OACnF,8EAA+E,OAC/E,4EAA6E,OAG7E,4CAA6C,OAC7C,mFAAoF,OAGpF,kCAAmC,OACnC,uCAAwC,OACxC,sCAAuC,OACvC,2CAA4C,OAG5C,qCAAsC,OAGtC,iCAAkC,OAClC,wEAAyE,OAGzE,0DAA2D,SAG3D,kEAAmE,OAGnE,wCAAyC,OACzC,6CAA8C,OAG9C,uCAAwC,MACxC,gDAAiD,MAGjD,iDAAkD,OAClD,uFAAwF,OAGxF,iDAAkD,OAGlD,2DAA4D,OAG5D,sCAAuC,OAGvC,4DAA6D,WAC7D,0EAA2E,OAC3E,4EAA6E,OAC7E,0EAA2E,OAC3E,4EAA6E,OAC7E,2EAA4E,OAG5E,2DAA4D,OAE5D,2DAA4D,OAC5D,0DAA2D,OAG3D,YAAa,OAEb,MAAS,MAGNC,IAsCH56R,EArCI9kB,GAAI,CACP2/S,UAAW,CACVC,KAAM,6EACNC,KAAM,uDACNC,KAAM,0DACNC,KAAM,uDACNC,KAAM,iFAEPC,KAAM,CACLL,KAAM,gFACNE,KAAM,0CAEPI,SAAU,CACTN,KAAM,2EACNE,KAAM,qCAEP3E,OAAQ,CACPyE,KAAM,4EACNE,KAAM,sCAEPK,OAAQ,CACPP,KAAM,6EACNE,KAAM,uCAEPM,QAAS,CACRR,KAAM,8EACNE,KAAM,wCAEPO,OAAQ,CACPT,KAAM,0CACNE,KAAM,uCAEP3oD,OAAQ,CACPyoD,KAAM,yEACNE,KAAM,qCAGA91S,SAAQ,SAASuY,GAAK,CAAC,OAAQ,QAAQvY,SAAQ,SAASiU,GAASje,GAAEuiB,GAAGtE,KAAIje,GAAEuiB,GAAGtE,GAAKje,GAAEuiB,GAAGq9R,YACjG96R,EAAK9kB,IAAGgK,SAAQ,SAASuY,GAAIuC,EAAK9kB,GAAEuiB,IAAIvY,SAAQ,SAASiU,GAAKwhS,GAAQz/S,GAAEuiB,GAAGtE,IAAMsE,QAC1EviB,IAGJsgT,GAvyDJ,SAAmBr+S,GAElB,IADA,IAAIjC,EAAI,GAAMkxS,EAAIpsR,EAAK7iB,GACfvF,EAAI,EAAGA,IAAMw0S,EAAEz0S,SAAUC,EACb,MAAhBsD,EAAEiC,EAAIivS,EAAEx0S,OAAcsD,EAAEiC,EAAIivS,EAAEx0S,KAAO,IACxCsD,EAAEiC,EAAIivS,EAAEx0S,KAAKyE,KAAK+vS,EAAEx0S,IAErB,OAAOsD,EAiyDkCugT,CAAUd,IAEpDtJ,GAAMqK,GAAK,+DAmCX,IAAIC,GAAiB3K,GAAU,QAAS,KAAM,CAC7C,MAASK,GAAMqK,GACf,YAAarK,GAAMniF,IACnB,YAAamiF,GAAMuK,MAGhBC,GAAiB,CACpB,CAAC,MAAO,mBACR,CAAC,MAAO,2DACR,CAAC,MAAO,4DACR,CAAC,OAAQ,4DAET,CAAC,MAAO,aACR,CAAC,MAAO,aACR,CAAC,MAAO,aACR,CAAC,MAAO,eACR,CAAC,MAAO,eACR,CAAC,MAAO,cAAe,CAAC,OAAQ,cAChC,CAAC,MAAO,cAAe,CAAC,OAAQ,cAChC,CAAC,MAAO,mBACR,CAAC,OAAQL,GAAQM,KAAK,KACrBx4S,KAAI,SAAS3D,GACd,OAAOqxS,GAAU,UAAW,KAAM,CAAC,UAAYrxS,EAAE,GAAI,YAAeA,EAAE,QAqDnEo8S,GAAO,CACVC,GAAI,qFACJC,MAAO,qFACPC,MAAO,gFACPC,IAAK,iFACLC,MAAO,uFACPC,MAAO,0FACPC,MAAO,mFACPC,KAAM,gFACNC,MAAO,qFACPC,IAAK,qEAIN,SAASC,GAActhR,GACtB,IAAI/9B,EAAI+9B,EAAK+E,YAAY,KACzB,OAAO/E,EAAK79B,MAAM,EAAEF,EAAE,GAAK,SAAW+9B,EAAK79B,MAAMF,EAAE,GAAK,QAGzD,SAASs/S,GAAW9+S,EAAM++S,GACzB,IAAId,EAAO,CAAC,MAAM,IAClB,IAAKj+S,EAAM,OAAOi+S,EACgB,MAA9Bc,EAAgBrxK,OAAO,KAC1BqxK,EAAkB,IAAIA,GAEvB,IAAI/vE,EAAO,GAaX,OAXChvO,EAAK6iC,MAAM4tQ,KAAW,IAAIppS,SAAQ,SAASvF,GAC3C,IAAI+hB,EAAI+sR,GAAY9uS,GAEpB,GAAa,kBAAT+hB,EAAE,GAAwB,CAC7B,IAAIm7R,EAAM,GAAIA,EAAIC,KAAOp7R,EAAEo7R,KAAMD,EAAIE,OAASr7R,EAAEq7R,OAAQF,EAAIG,GAAKt7R,EAAEs7R,GAAIH,EAAII,WAAav7R,EAAEu7R,WAC1F,IAAIC,EAAiC,aAAjBx7R,EAAEu7R,WAA4Bv7R,EAAEq7R,OAAS5O,GAAazsR,EAAEq7R,OAAQH,GACpFd,EAAKoB,GAAiBL,EACtBhwE,EAAKnrN,EAAEs7R,IAAMH,MAGff,EAAK,OAASjvE,EACPivE,EAGRzK,GAAM0K,KAAO,+DAEb,IAAIoB,GAAYnM,GAAU,gBAAiB,KAAM,CAEhD,MAASK,GAAM0K,OAIhB,SAASqB,GAAWtB,GACnB,IAAI5gT,EAAI,CAACkzS,GAAY+O,IAKrB,OAJAn9R,EAAK87R,EAAK,QAAQ52S,SAAQ,SAASm4S,GAClCniT,EAAEA,EAAEvD,QAAWq5S,GAAU,eAAgB,KAAM8K,EAAK,OAAOuB,OAEzDniT,EAAEvD,OAAO,IAAIuD,EAAEA,EAAEvD,QAAU,mBAAsBuD,EAAE,GAAGA,EAAE,GAAG4N,QAAQ,KAAK,MACpE5N,EAAEgO,KAAK,IAGf,IAAIo0S,GAAc,CAACvB,GAAKG,MAAOH,GAAKK,MAAOL,GAAKM,OAChD,SAASkB,GAASzB,EAAM0B,EAAKj/S,EAAGoe,EAAM8gS,EAAQC,GAG7C,GAFID,IAAQA,EAAS,IACjB3B,EAAK,SAAQA,EAAK,OAAS,IAC5B0B,EAAM,EAAG,IAAIA,EAAM,EAAG1B,EAAK,OAAO,MAAQ0B,KAAQA,GAMrD,GALAC,EAAOT,GAAK,MAAQQ,EACpBC,EAAOX,KAAOngS,EACd8gS,EAAOV,OAASx+S,EACbm/S,EAAYD,EAAOR,WAAaS,EAC3BJ,GAAY/yR,QAAQkzR,EAAOX,OAAS,IAAGW,EAAOR,WAAa,YAChEnB,EAAK,OAAO2B,EAAOT,IAAK,MAAM,IAAIj+S,MAAM,sBAAwBy+S,GAGnE,OAFA1B,EAAK,OAAO2B,EAAOT,IAAMS,EACzB3B,GAAM,IAAM2B,EAAOV,QAAQj0S,QAAQ,KAAK,MAAQ20S,EACzCD,EAkCR,SAASG,GAAeviR,EAAM9Z,EAAK06M,GAClC,MAAO,CACN,iCAAmC5gM,EAAO,OAC1C,8EAAgF4gM,GAAO,OAAS,IAAM16M,EAAM,QAC5G,0BACCpY,KAAK,IAqBR,IACKo5R,GADDsb,IACCtb,GAAU,6VAAoW7hF,EAAK9zK,QAAU,yDAC1X,WACN,OAAO21P,KAMLub,GAAa,CAChB,CAAC,cAAe,YAChB,CAAC,mBAAoB,iBACrB,CAAC,cAAe,YAChB,CAAC,oBAAqB,cACtB,CAAC,iBAAkB,eACnB,CAAC,cAAe,aAChB,CAAC,aAAc,WACf,CAAC,aAAc,UACf,CAAC,iBAAkB,YACnB,CAAC,gBAAiB,cAClB,CAAC,cAAe,YAChB,CAAC,aAAc,WACf,CAAC,WAAY,SACb,CAAC,kBAAmB,cAAe,QACnC,CAAC,mBAAoB,eAAgB,SAGtCxM,GAAMwM,WAAa,0EACnB9B,GAAK8B,WAAc,wFAEnB,IAAIC,GAAmB,WAEtB,IADA,IAAI39S,EAAI,IAAIrI,MAAM+lT,GAAWlmT,QACrBC,EAAI,EAAGA,EAAIimT,GAAWlmT,SAAUC,EAAG,CAC1C,IAAI2G,EAAIs/S,GAAWjmT,GACf4R,EAAI,MAAOjL,EAAE,GAAGhB,MAAM,EAAEgB,EAAE,GAAGgsB,QAAQ,MAAO,KAAMhsB,EAAE,GAAGhB,MAAMgB,EAAE,GAAGgsB,QAAQ,KAAK,GACnFpqB,EAAEvI,GAAK,IAAIksF,OAAO,IAAMt6E,EAAI,uBAA0BA,EAAI,KAE3D,OAAOrJ,EAPe,GAUvB,SAAS49S,GAAiBlgT,GACzB,IAAIpB,EAAI,GACRoB,EAAOgyS,GAAShyS,GAEhB,IAAI,IAAIjG,EAAI,EAAGA,EAAIimT,GAAWlmT,SAAUC,EAAG,CAC1C,IAAI2G,EAAIs/S,GAAWjmT,GAAI8gQ,EAAM76P,EAAK6iC,MAAMo9Q,GAAiBlmT,IAC/C,MAAP8gQ,GAAeA,EAAI/gQ,OAAS,IAAG8E,EAAE8B,EAAE,IAAM2wS,GAAYx2C,EAAI,KAChD,SAATn6P,EAAE,IAAiB9B,EAAE8B,EAAE,MAAK9B,EAAE8B,EAAE,IAAMyuS,EAAUvwS,EAAE8B,EAAE,MAGxD,OAAO9B,EAGR,IAAIuhT,GAAsBhN,GAAU,oBAAqB,KAAM,CAE9D,WAAYK,GAAMwM,WAClB,WAAYxM,GAAM4M,GAClB,gBAAiB5M,GAAM6M,QACvB,iBAAkB7M,GAAM8M,SACxB,YAAa9M,GAAMuK,MAGpB,SAASwC,GAAQ7/S,EAAGiL,EAAGyyC,EAAG/gD,EAAGuB,GACjB,MAARA,EAAE8B,IAAmB,MAALiL,GAAmB,KAANA,IAChC/M,EAAE8B,GAAKiL,EACPA,EAAI6lS,GAAU7lS,GACdtO,EAAEA,EAAEvD,QAAWskD,EAAI+0P,GAAUzyS,EAAEiL,EAAEyyC,GAAK60P,GAASvyS,EAAEiL,IA0BlD,IAAI60S,GAAY,CACf,CAAC,cAAe,cAAe,UAC/B,CAAC,aAAc,aAAc,UAC7B,CAAC,UAAW,UAAW,UACvB,CAAC,cAAe,cAAe,UAC/B,CAAC,UAAW,UAAW,UACvB,CAAC,oBAAqB,oBAAqB,QAC3C,CAAC,YAAa,YAAa,QAC3B,CAAC,gBAAiB,gBAAiB,QACnC,CAAC,YAAa,YAAa,QAC3B,CAAC,eAAgB,eAAgB,OACjC,CAAC,gBAAiB,gBAAiB,QAWpC,SAASC,GAAiBC,EAAIC,EAAK3kT,EAAO+tM,GACzC,IAAIzuL,EAAI,GACR,GAAgB,iBAANolS,EAAgBplS,EAAIu3R,GAAY6N,EAAI32G,QACzC,IAAI,IAAI5jM,EAAI,EAAGA,EAAIu6S,EAAG5mT,SAAUqM,EAAGmV,EAAIA,EAAE3V,OAAO+6S,EAAGv6S,GAAGV,KAAI,SAASm7S,GAAM,MAAO,CAACtlS,EAAEslS,OACxF,IAAIhuL,EAAuB,iBAAP+tL,EAAmB9N,GAAY8N,EAAK52G,GAAMtkM,KAAI,SAAU3D,GAAK,OAAOA,EAAEwZ,KAAQqlS,EAC9F/5L,EAAM,EAAG/sH,EAAM,EACnB,GAAG+4H,EAAM94H,OAAS,EAAG,IAAI,IAAIC,EAAI,EAAGA,IAAMuhB,EAAExhB,OAAQC,GAAK,EAAG,CAE3D,OADAF,GAAQyhB,EAAEvhB,EAAE,GAAI,EACTuhB,EAAEvhB,GAAGuhB,GACX,IAAK,aACL,IAAK,MACL,IAAK,QACL,IAAK,cACL,IAAK,SACL,IAAK,gBACL,IAAK,iBACL,IAAK,oBACL,IAAK,qBACL,IAAK,kBACL,IAAK,oBACL,IAAK,YACL,IAAK,WACL,IAAK,mBACL,IAAK,aACJtf,EAAM6kT,WAAahnT,EACnBmC,EAAM+mN,WAAanwF,EAAMlzH,MAAMknH,EAAKA,EAAM/sH,GAC1C,MAED,IAAK,eACL,IAAK,oBACL,IAAK,SACL,IAAK,oBACL,IAAK,oBACJmC,EAAM8kT,YAAcjnT,EACpBmC,EAAM+kT,aAAenuL,EAAMlzH,MAAMknH,EAAKA,EAAM/sH,GAC5C,MAED,IAAK,SACL,IAAK,YACJmC,EAAMglT,YAAcnnT,EACpBmC,EAAMilT,WAAaruL,EAAMlzH,MAAMknH,EAAKA,EAAM/sH,GAG5C+sH,GAAO/sH,GAnDT25S,GAAMgN,UAAY,4EAClBtC,GAAKsC,UAAa,0FA2ElB,IAAIU,GAAqB/N,GAAU,aAAc,KAAM,CACtD,MAASK,GAAMgN,UACf,WAAYhN,GAAM2N,KA2BnB3N,GAAM4N,WAAa,0EACnBlD,GAAKkD,WAAc,wFAEnB,IAAIC,GAAY,gBA6CZC,GAAsBnO,GAAU,aAAc,KAAM,CACvD,MAASK,GAAM4N,WACf,WAAY5N,GAAM2N,KAkBnB,IAAII,GAAkB,CACrBC,MAAO,QACPC,QAAS,UACTC,OAAQ,SACRC,SAAU,WACVC,SAAU,cACVC,WAAY,aACZC,UAAW,WACXC,YAAa,UAEbC,YAAa,cACbC,YAAa,UACbC,aAAc,YAIdC,SAAU,WAEVC,QAAS,UACTC,QAAS,UAOTC,WAAY,UAEZC,cAAe,gBACfC,WAAY,aACZC,SAAU,YAEPC,GAAgBlU,EAAM+S,IAE1B,SAASoB,GAAcC,EAAOzkF,EAAKl8N,GAElC2gT,EADAzkF,EAAMukF,GAAcvkF,IAAQA,GACfl8N,EAuDd,SAAS4gT,GAAe3pC,GACvB,IAAI4pC,EAAgB5pC,EAAKioB,WAAW,GAAI4hB,EAAiB7pC,EAAKioB,WAAW,GACzE,OAAO,IAAIpwQ,KAA6E,KAAtEgyR,EAAe,IAAIxhT,KAAK0xC,IAAI,EAAE,IAAM6vQ,EAAc,IAAO,cAAmBzP,cAAcpoS,QAAQ,QAAQ,IAa7H,SAAS+3S,GAAY9pC,EAAMp6P,EAAM7D,GAChC,IAAIpT,EAAQqxQ,EAAKl+P,EACboV,EAAM8oP,EAAKioB,WAAW,EAAG,YAC7B,GAAGlmR,EAAK,KAAOi+P,EAAKl+P,EAAInT,EAAS,KAAKqxQ,EAAKl+P,EAC3C,OAAOoV,EAIR,SAAS6yR,GAAa/pC,EAAMp6P,EAAM7D,GACjC,IAAImV,EAAM8oP,EAAKioB,WAAW,EAAG,UAE7B,OADGlmR,IAAKi+P,EAAKl+P,GAAM,GAAMoV,EAAIt2B,OAAO,EAAK,GAAM,GACxCs2B,EAMR,SAAS8yR,GAAmBhqC,EAAMiqC,EAAYloS,GAC7C,OAAkB,KAAfkoS,EAA0CF,GAAa/pC,GACnD8pC,GAAY9pC,EAAMiqC,EAAYloS,GAGtC,SAASmoS,GAAelqC,EAAMhuQ,EAAG+P,GAAO,OAAOioS,GAAmBhqC,EAAMhuQ,GAAW,IAAR+P,EAAgB,EAAG,GAiB9F,SAASooS,GAAoBnqC,GAG5B,MAAO,CAFaoqC,GAAyBpqC,EA/lC5B,IAgmCCoqC,GAAyBpqC,EAloC1B,IAqpClB,SAASqqC,GAAiBrqC,EAAKsqC,GAG9B,IAFA,IAAI5e,EAAM1rB,EAAKioB,WAAW,GACtBp/M,EAAO,GACH57E,EAAI,EAAGA,GAAKy+R,IAAOz+R,EAAG,CAC7B,IAAIs9S,EAAMvqC,EAAKioB,WAAW,GACtBtnS,EAAMq/Q,EAAKioB,WAAW,GAC1Bp/M,EAAK0hO,GAAOvqC,EAAKioB,WAAWtnS,EAAmB,OAAb2pT,EAAoB,UAAU,QAASv4S,QAAQ+sR,EAAK,IAAI/sR,QAAQilQ,EAAK,KACvF,OAAbszC,GAAuB3pT,EAAM,IAAIq/Q,EAAKl+P,GAAK,GAG/C,OADY,EAATk+P,EAAKl+P,IAAOk+P,EAAKl+P,EAAKk+P,EAAKl+P,GAAG,GAAM,GAChC+mE,EAIR,SAAS2hO,GAAWxqC,GACnB,IAAI11Q,EAAO01Q,EAAKioB,WAAW,GACvB/5R,EAAQ8xQ,EAAKx5Q,MAAMw5Q,EAAKl+P,EAAEk+P,EAAKl+P,EAAExX,GAGrC,OAFA01Q,EAAKl+P,GAAKxX,GACC,EAAPA,GAAY,IAAG01Q,EAAKl+P,GAAM,GAAY,EAAPxX,GAAa,GACzC4D,EAcR,SAASk8S,GAAyBpqC,EAAMp6P,EAAM6mR,GAC7C,IAA4Bx9R,EAAxB+C,EAAIguQ,EAAKioB,WAAW,GAASp3F,EAAO47F,GAAO,GAE/C,GADAzsB,EAAKl+P,GAAK,EAhrCO,KAirCd8D,GACA5T,IAAM4T,IAAmC,IAA3Bo9R,GAAUxvR,QAAQ5N,GAAY,MAAM,IAAI5d,MAAM,iBAAmB4d,EAAO,QAAU5T,GACnG,OAnrCiB,KAmrCV4T,EAAsB5T,EAAI4T,GAChC,KAAK,EAA0E,OAA1D3W,EAAM+wQ,EAAKioB,WAAW,EAAG,KAAUp3F,EAAK0wD,MAAKye,EAAKl+P,GAAK,GAAU7S,EACtF,KAAK,EAA+C,OAAzB+wQ,EAAKioB,WAAW,EAAG,KAC9C,KAAK,GAAkB,OAA8B,IAAvBjoB,EAAKioB,WAAW,GAC9C,KAAK,GAA2C,OAApBjoB,EAAKioB,WAAW,GAC5C,KAAK,GAAmB,OAAO6hB,GAAY9pC,EAAMhuQ,EAAG,GAAGD,QAAQ+sR,EAAK,IACpE,KAAK,GAAoB,OAAOirB,GAAa/pC,GAC7C,KAAK,GAAsB,OAAO2pC,GAAe3pC,GACjD,KAAK,GAAkB,OAAOwqC,GAAWxqC,GACzC,KAAK,GAAgB,OAxBvB,SAA6BA,GAE5B,IAAI77Q,EAAI,GAIR,OAHAA,EAAEsmT,KAAOzqC,EAAKioB,WAAW,GAEzBjoB,EAAKl+P,GAAK3d,EAAEsmT,KAAO,GAAKtmT,EAAEsmT,KAAO,GAAK,EAC/BtmT,EAkBsBumT,CAAoB1qC,GAChD,KAAK,GAAoB,OAAOkqC,GAAelqC,EAAMhuQ,GAAI6+L,EAAK0wD,KAAKxvP,QAAQ+sR,EAAK,IAChF,KAAK,GAAkB,OAtFzB,SAAiC9e,EAAMhuQ,GAAK,IAAIA,EAAG,MAAM,IAAIhK,MAAM,+CAAgD,OAAOgiT,GAAmBhqC,EAAMhuQ,EAAG,GAsFtH24S,CAAwB3qC,EAAMhuQ,GAAUD,QAAQ+sR,EAAK,IACnF,KAAK,KAAiC,OAxDxC,SAAgC9e,GAE/B,OAVD,SAAqCA,GAGpC,IAFA,IAAI4qC,EAAY5qC,EAAKioB,WAAW,GAC5Bh8Q,EAAM,GACFprB,EAAI,EAAGA,GAAK+pT,EAAY,IAAK/pT,EAAGorB,EAAI3mB,KAAK6kT,GAAoBnqC,IACrE,OAAO/zP,EAMA4+R,CAA4B7qC,GAsDW8qC,CAAuB9qC,GACpE,KAAK,KAAqB,OA7E5B,SAAmCA,GAClC,OATD,SAAwCA,GAGvC,IAFA,IAAIp/Q,EAASo/Q,EAAKioB,WAAW,GACzBh5R,EAAM,GACFpO,EAAI,EAAGA,GAAKD,IAAUC,EAAGoO,EAAIpO,GAAKm/Q,EAAKioB,WAAW,EAAG,YAAYl2R,QAAQ+sR,EAAK,IACtF,OAAO7vR,EAKA87S,CAA+B/qC,GA4EJgrC,CAA0BhrC,GAC3D,QAAS,MAAM,IAAIh4Q,MAAM,wCAA0C4d,EAAO,IAAM5T,IAGlF,SAASi5S,GAAyBrlS,EAAM/jB,GACvC,IAAIsC,EAAIsnS,GAAQ,GAAI/lS,EAAI+lS,GAAQ,GAEhC,OADAtnS,EAAE0jS,YAAY,EAAW,IAARjiR,EAAe,GAAOA,GAChCA,GACN,KAAK,EAAgBlgB,EAAEmiS,aAAa,EAAGhmS,GAAQ,MAC/C,KAAK,GAAgB6D,EAAI+lS,GAAQ,IAAM5D,YAAY,EAAGhmS,EAAO,KAAM,MACnE,KAAK,GAAkB6D,EAAEmiS,YAAY,EAAGhmS,EAAQ,EAAO,GAAO,MAC9D,KAAK,GAAuB6D,EArI9B,SAAwBma,GACvB,IACI7N,GADuB,iBAAR6N,EAAoB,IAAIgY,KAAKA,KAAK2G,MAAM3e,IAASA,GACvDqhR,UAAY,IAAO,YAC5Bp/Q,EAAI9P,EAAI3J,KAAK0xC,IAAI,EAAE,IAAKmL,GAAKlzC,EAAI8P,GAAKzZ,KAAK0xC,IAAI,EAAE,IAC3CmL,GAAK,IACf,IAAI8N,GADJlxC,GAAK,KACQzZ,KAAK0xC,IAAI,EAAE,IAAO,EAC5BiZ,EAAI,IAAKlxC,GAAQzZ,KAAK0xC,IAAI,EAAE,IAAKmL,GAAK8N,GACzC,IAAI7uD,EAAIsnS,GAAQ,GAA8C,OAA1CtnS,EAAE0jS,YAAY,EAAG/lR,GAAI3d,EAAE0jS,YAAY,EAAG3iP,GAAW/gD,EA8HpC+mT,CAAerpT,GAAQ,MACvD,KAAK,GACL,KAAK,GAIJ,KAHH6D,EAAI+lS,GAAQ,EAAI,GAAK5pS,EAAMjB,OAAS,IAAMiB,EAAMjB,OAAS,EAAI,EAAI,KAC5DinS,YAAY,EAAGhmS,EAAMjB,OAAS,GAChC8E,EAAEmiS,YAAY,EAAGhmS,EAAO,QAClB6D,EAAEoc,GAAKpc,EAAE9E,QAAQ8E,EAAEmiS,YAAY,EAAG,GACxC,MACD,QAAS,MAAM,IAAI7/R,MAAM,wCAA0C4d,EAAO,IAAM/jB,GAEjF,OAAO+8R,EAAQ,CAACz6R,EAAGuB,IAIpB,SAASylT,GAAkBnrC,EAAMorC,GAChC,IAAIC,EAAarrC,EAAKl+P,EAClBxX,EAAO01Q,EAAKioB,WAAW,GACvBqjB,EAAWtrC,EAAKioB,WAAW,GAC3ByhB,EAAQ,GAAI7oT,EAAI,EAChBypT,EAAW,EACXiB,GAAc,EAAGC,EAAU,GAC/B,IAAI3qT,EAAI,EAAGA,GAAKyqT,IAAYzqT,EAAG,CAC9B,IAAI4qT,EAASzrC,EAAKioB,WAAW,GACzByjB,EAAS1rC,EAAKioB,WAAW,GAC7ByhB,EAAM7oT,GAAK,CAAC4qT,EAAQC,EAASL,GAE9B3B,EAAM18S,MAAK,SAASpE,EAAE+hB,GAAK,OAAO/hB,EAAE,GAAK+hB,EAAE,MAC3C,IAAIghS,EAAQ,GACZ,IAAI9qT,EAAI,EAAGA,GAAKyqT,IAAYzqT,EAAG,CAC9B,GAAGm/Q,EAAKl+P,IAAM4nS,EAAM7oT,GAAG,GAAI,CAC1B,IAAIq0C,GAAO,EACX,GAAGr0C,EAAE,GAAKuqT,EAAO,OAAOA,EAAM1B,EAAM7oT,EAAE,GAAG,IAAImR,GAC5C,KAAK,EAAmBguQ,EAAKl+P,EAAE,IAAM4nS,EAAM7oT,GAAG,KAAMm/Q,EAAKl+P,GAAG,EAAGozB,GAAO,GAAS,MAC/E,KAAK,GACL,KAAK,KAAoC8qO,EAAKl+P,GAAK4nS,EAAM7oT,GAAG,KAAMm/Q,EAAKl+P,EAAE4nS,EAAM7oT,GAAG,GAAIq0C,GAAO,GAG9F,KADKk2Q,GAAU,GAAHvqT,IAASm/Q,EAAKl+P,GAAK4nS,EAAM7oT,GAAG,KAAMq0C,GAAK,EAAO8qO,EAAKl+P,EAAI4nS,EAAM7oT,GAAG,IACzEq0C,EAAM,MAAM,IAAIltC,MAAM,gCAAkC0hT,EAAM7oT,GAAG,GAAK,OAASm/Q,EAAKl+P,EAAI,KAAOjhB,GAEnG,GAAGuqT,EAAO,CACT,IAAIQ,EAASR,EAAM1B,EAAM7oT,GAAG,IAG5B,GAFA8qT,EAAMC,EAAOtlT,GAAK8jT,GAAyBpqC,EAAM4rC,EAAO55S,EAAG,CAACuvP,KAAI,IAChD,YAAbqqD,EAAOlmT,IAAiBimT,EAAMC,EAAOtlT,GAAK+H,OAAOs9S,EAAMC,EAAOtlT,IAAM,IAAM,KAAO,OAAS+H,OAAyB,MAAlBs9S,EAAMC,EAAOtlT,KAAcE,OAAO,IACvH,YAAZolT,EAAOtlT,EAAiB,OAAOqlT,EAAMC,EAAOtlT,IAC9C,KAAK,EAAGqlT,EAAMC,EAAOtlT,GAAK,KAE1B,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,IACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,IACL,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,KAAO,KAAM,IAClB,KAAK,MAAO,KAAM,IACjBq3R,EAAO2sB,EAAYqB,EAAMC,EAAOtlT,KAAK,EAAK,OAAS,MACpD,QAAS,MAAM,IAAI0B,MAAM,yBAA2B2jT,EAAMC,EAAOtlT,UAGlE,GAAmB,IAAhBojT,EAAM7oT,GAAG,IAGX,GAFAypT,EAAWqB,EAAMrB,SAAYF,GAAyBpqC,EA1xCxC,GA2xCd2d,EAAO2sB,IACY,IAAhBiB,EAAmB,CACrB,IAAIM,EAAS7rC,EAAKl+P,EAClBk+P,EAAKl+P,EAAI4nS,EAAM6B,GAAY,GAC3BC,EAAUnB,GAAiBrqC,EAAKsqC,GAChCtqC,EAAKl+P,EAAI+pS,QAEJ,GAAmB,IAAhBnC,EAAM7oT,GAAG,GAAU,CAC5B,GAAgB,IAAbypT,EAAgB,CAAEiB,EAAa1qT,EAAGm/Q,EAAKl+P,EAAI4nS,EAAM7oT,EAAE,GAAG,GAAI,SAC7D2qT,EAAUnB,GAAiBrqC,EAAKsqC,OAC1B,CACN,IACIvhT,EADAtC,EAAO+kT,EAAQ9B,EAAM7oT,GAAG,IAG5B,OAAOm/Q,EAAKA,EAAKl+P,IAChB,KAAK,GAAkBk+P,EAAKl+P,GAAK,EAAG/Y,EAAMyhT,GAAWxqC,GAAO,MAC5D,KAAK,GACL,KAAK,GAAoBA,EAAKl+P,GAAK,EAAG/Y,EAAMmhT,GAAelqC,EAAMA,EAAKA,EAAKl+P,EAAE,IAAI/P,QAAQ,WAAW,IAAK,MACzG,KAAK,EAAgBiuQ,EAAKl+P,GAAK,EAAG/Y,EAAMi3Q,EAAKioB,WAAW,EAAG,KAAM,MACjE,KAAK,GAAiBjoB,EAAKl+P,GAAK,EAAG/Y,EAAMi3Q,EAAKioB,WAAW,GAAI,MAC7D,KAAK,EAAgBjoB,EAAKl+P,GAAK,EAAG/Y,EAAMi3Q,EAAKioB,WAAW,EAAG,KAAM,MACjE,KAAK,GAAkBjoB,EAAKl+P,GAAK,EAAG/Y,EAAM+iT,GAAU9rC,EAAM,GAAI,MAC9D,KAAK,GAAsBA,EAAKl+P,GAAK,EAAG/Y,EAAMktS,EAAU0T,GAAe3pC,IAAQ,MAC/E,QAAS,MAAM,IAAIh4Q,MAAM,mBAAqBg4Q,EAAKA,EAAKl+P,IAEzD6pS,EAAMllT,GAAQsC,GAKjB,OADAi3Q,EAAKl+P,EAAIupS,EAAa/gT,EACfqhT,EAER,IAAII,GAAY,CAAE,WAAY,YAAa,gBAAiB,cAAe,mBAAoB,SAAUt/S,OArflF,CACtB,aAAe,aACf,cAAe,eACf,cAAe,eAmfhB,SAASu/S,GAAoBjjT,GAC5B,cAAcA,GACb,IAAK,UAAW,OAAO,GACvB,IAAK,SAAU,OAAa,EAAJA,IAAQA,EAAO,EAAO,EAC9C,IAAK,SAAU,OAAO,GACtB,IAAK,SAAU,GAAGA,aAAe8uB,KAAM,OAAO,GAE/C,OAAQ,EAET,SAASo0R,GAAkBtuS,EAASuuS,EAAId,GACvC,IAAIe,EAAM1gB,GAAQ,GAAI2gB,EAAO,GAAI73E,EAAO,GACpC5lE,EAAK,EAAG9tK,EAAI,EAEZy0N,EAAKm2E,GAAQ,GAAI4gB,EAAM5gB,GAAQ,GAOnC,GANAn2E,EAAGuyE,YAAY,EAAG,GAClBvyE,EAAGuyE,YAAY,EAAG,MAClBwkB,EAAIxkB,YAAY,EAAG,GACnBtzD,EAAKjvO,KAAKgwN,GAAK82F,EAAK9mT,KAAK+mT,GACzB19I,GAAM,EAAI2mD,EAAG10N,QAETsrT,EAAI,EACPG,EAAM5gB,GAAQ,IACV5D,YAAY,EAAG,GACnBukB,EAAKzwQ,QAAQ0wQ,GAEb,IAAIxtB,EAAO,CAAC4M,GAAQ,IAEpB,IADA5M,EAAK,GAAGgJ,YAAY,EAAGlqR,EAAQ/c,QAC3BC,EAAI,EAAGA,EAAI8c,EAAQ/c,SAAUC,EAAG,CACnC,IAAIgB,EAAQ8b,EAAQ9c,GAAG,GAKvB,KAJAy0N,EAAKm2E,GAAQ,EAAQ,GAAK5pS,EAAMjB,OAAS,IAAMiB,EAAMjB,OAAS,EAAI,EAAI,KACnEinS,YAAY,EAAGhnS,EAAE,GACpBy0N,EAAGuyE,YAAY,EAAGhmS,EAAMjB,OAAS,GACjC00N,EAAGuyE,YAAY,EAAGhmS,EAAO,QACnByzN,EAAGxzM,GAAKwzM,EAAG10N,QAAQ00N,EAAGuyE,YAAY,EAAG,GAC3ChJ,EAAKv5R,KAAKgwN,GAEXA,EAAKspE,EAAQC,GACbtqD,EAAK54L,QAAQ25K,GACb3mD,GAAM,EAAI2mD,EAAG10N,OAGd,IAAIC,EAAI,EAAGA,EAAI8c,EAAQ/c,SAAUC,EAChC,KAAGqrT,GAAOA,EAAGvuS,EAAQ9c,GAAG,QACrBkrT,GAAUv4R,QAAQ7V,EAAQ9c,GAAG,KAAO,IACnB,MAAjB8c,EAAQ9c,GAAG,GAAd,CAEA,IAAIkI,EAAM4U,EAAQ9c,GAAG,GAAI6sH,EAAM,EAC/B,GAAGw+L,EAAI,CAEN,IAAII,EAAQ,EADZ5+L,GAAOw+L,EAAGvuS,EAAQ9c,GAAG,KAErB,GAAc,WAAXyrT,EAAM5mT,GAAgC,iBAAPqD,EAAiB,CACtD,IAAIrI,EAAMqI,EAAI0I,MAAM,KAChB1I,IAASrI,EAAI,IAAK,MAASA,EAAI,IAAK,GAErC40N,EAAK21F,GAAyBqB,EAAMt6S,EAAGjJ,OACjC,CACN,IAAI63R,EAAIorB,GAAoBjjT,IACnB,GAAN63R,IAAWA,EAAI,GAAM73R,EAAMsF,OAAOtF,IACrCusN,EAAK21F,GAAyBrqB,EAAG73R,GAElCwrO,EAAKjvO,KAAKgwN,IAEV+2F,EAAM5gB,GAAQ,IACV5D,YAAY,EAAIqkB,EAAWx+L,EAAN,EAAE7sH,GAC3BurT,EAAK9mT,KAAK+mT,GAEV19I,GAAM,EAAI2mD,EAAG10N,OAGd,IAAIoyD,EAAI,GAAKuhL,EAAK3zO,OAAS,GAC3B,IAAIC,EAAI,EAAGA,EAAI0zO,EAAK3zO,SAAUC,EAAKurT,EAAKvrT,GAAGgnS,YAAY,EAAG70O,GAAIA,GAAKuhL,EAAK1zO,GAAGD,OAG3E,OAFAurT,EAAItkB,YAAY,EAAGl5H,GACnBw9I,EAAItkB,YAAY,EAAGtzD,EAAK3zO,QACjBg+R,EAAQ,CAACutB,GAAK1/S,OAAO2/S,GAAM3/S,OAAO8nO,IAI1C,SAASg4E,GAAwBloR,EAAM+mR,EAAOvgB,GAC7C,IAAI7qB,EAAO37O,EAAK4jO,QAChB,IAAI+X,EAAM,MAAO,GACjBgoB,GAAUhoB,EAAM,GAEhB,IAAIwsC,EAASC,EAAQC,EAAQC,EAASC,EAAU,EAChD5sC,EAAKkpB,IAAI,OAAQ,gBAEFlpB,EAAKioB,WAAW,GAC/B,IAAI4kB,EAAmB7sC,EAAKioB,WAAW,GACnC6D,EAAQ9rB,EAAKioB,WAAW,IAC5B,GAAG6D,IAAUrE,EAAIp2F,MAAMw8F,OAAOzB,cAAgBN,IAAUjB,EAAO,MAAM,IAAI7iS,MAAM,yBAA2B8jS,GAE1G,GAAe,KADf0gB,EAAUxsC,EAAKioB,WAAW,KACM,IAAZukB,EAAe,MAAM,IAAIxkT,MAAM,uBAAyBwkT,GAG5E,GAFAC,EAASzsC,EAAKioB,WAAW,IAAK0kB,EAAU3sC,EAAKioB,WAAW,GAEzC,IAAZukB,GAAiBG,IAAY3sC,EAAKl+P,EAAG,MAAM,IAAI9Z,MAAM,oBAAsB2kT,EAAU,QAAU3sC,EAAKl+P,GACnF,IAAZ0qS,IAAiBE,EAAS1sC,EAAKioB,WAAW,IAAK2kB,EAAU5sC,EAAKioB,WAAW,IACjF,IAUI6kB,EAVAC,EAAQ5B,GAAkBnrC,EAAMorC,GAEhCp0D,EAAO,CAAG61D,iBAAkBA,GAChC,IAAI,IAAIliS,KAAKoiS,EAAO/1D,EAAKrsO,GAAKoiS,EAAMpiS,GAIpC,GAFAqsO,EAAKg2D,MAAQP,EAEE,IAAZD,EAAe,OAAOx1D,EAEzB,GADG41D,EAAU5sC,EAAKl+P,GAAK,IAAGk+P,EAAKl+P,GAAK,GACjCk+P,EAAKl+P,IAAM8qS,EAAS,MAAM,IAAI5kT,MAAM,sBAAwBg4Q,EAAKl+P,EAAI,QAAU8qS,GAElF,IAAME,EAAQ3B,GAAkBnrC,EAAM,MAAS,MAAMznP,IACrD,IAAI5N,KAAKmiS,EAAO91D,EAAKrsO,GAAKmiS,EAAMniS,GAEhC,OADAqsO,EAAKg2D,MAAQ,CAACP,EAAQC,GACf11D,EAER,SAASi2D,GAAwBtvS,EAASktR,EAAOqhB,EAAId,EAAO8B,EAAUC,GACrE,IAAIhB,EAAM1gB,GAAQyhB,EAAW,GAAK,IAC9BruB,EAAO,CAACstB,GACZA,EAAItkB,YAAY,EAAG,OACnBskB,EAAItkB,YAAY,EAAG,GACnBskB,EAAItkB,YAAY,EAAG,WACnBskB,EAAItkB,YAAY,GAAIJ,EAAIp2F,MAAMw8F,OAAOzB,aAAc,OACnD+f,EAAItkB,YAAY,EAAIqlB,EAAW,EAAI,GACnCf,EAAItkB,YAAY,GAAIgD,EAAO,OAC3BshB,EAAItkB,YAAY,EAAIqlB,EAAW,GAAK,IACpC,IAAIE,EAAMnB,GAAkBtuS,EAASuuS,EAAId,GAGzC,GAFAvsB,EAAKv5R,KAAK8nT,GAEPF,EAAU,CACZ,IAAIG,EAAMpB,GAAkBiB,EAAU,KAAM,MAC5Cf,EAAItkB,YAAY,GAAIslB,EAAQ,OAC5BhB,EAAItkB,YAAY,EAAG,GAAKulB,EAAIxsT,QAC5Bi+R,EAAKv5R,KAAK+nT,GAEX,OAAOzuB,EAAQC,GAGhB,SAASyuB,GAAWttC,EAAMp/Q,GAAmC,OAAzBo/Q,EAAKioB,WAAWrnS,GAAgB,KAUpE,SAASkrT,GAAU9rC,EAAMp/Q,GAAU,OAAmC,IAA5Bo/Q,EAAKioB,WAAWrnS,GAC1D,SAAS2sT,GAAUnrS,EAAGje,GAAkD,OAAzCA,IAAGA,EAAEsnS,GAAQ,IAAItnS,EAAE0jS,YAAY,KAAMzlR,GAAWje,EAE/E,SAASqpT,GAAYxtC,GAAQ,OAAOA,EAAKioB,WAAW,EAAG,KACvD,SAASwlB,GAAYrrS,EAAGje,GAA+C,OAAtCA,IAAGA,EAAEsnS,GAAQ,IAAItnS,EAAE0jS,YAAY,EAAGzlR,GAAWje,EAC9E,SAASupT,GAAa1tC,EAAMp/Q,GAAU,OAZtC,SAAkBo/Q,EAAMp/Q,EAAQk8S,GAE/B,IADA,IAAIp8S,EAAM,GAAImC,EAASm9Q,EAAKl+P,EAAIlhB,EAC1Bo/Q,EAAKl+P,EAAIjf,GAAQnC,EAAI4E,KAAKw3S,EAAG98B,EAAMn9Q,EAASm9Q,EAAKl+P,IACvD,GAAGjf,IAAWm9Q,EAAKl+P,EAAG,MAAM,IAAI9Z,MAAM,eACtC,OAAOtH,EAQqCitT,CAAS3tC,EAAKp/Q,EAAO4sT,IAiBlE,SAASI,GAA2B5tC,EAAMp/Q,EAAQiwM,GACjD,IAAIg9G,EAAM7tC,EAAKioB,WAAWp3F,GAAQA,EAAKktG,MAAQ,GAAK,EAAI,GACpD/+R,EAAW,YACXw1P,EAAK4nB,EACNvrF,GAAQA,EAAKktG,MAAQ,IAAG3hB,EAAmB,MAC1CvrF,GAAqB,GAAbA,EAAKktG,KAGM,IAAbltG,EAAKktG,OACd/+R,EAAW,QAHKghQ,EAAKioB,WAAW,KAChBjpR,EAAW,aAIzB6xL,EAAKktG,MAAQ,GAAKltG,EAAKktG,MAAQ,IAAG/+R,EAAW,SAChD,IAAI7a,EAAI0pT,EAAM7tC,EAAKioB,WAAW4lB,EAAK7uS,GAAY,GAE/C,OADAo9Q,EAAmB5nB,EACZrwQ,EAIR,SAAS2pT,GAAkC9tC,GAC1C,IAAIxL,EAAK4nB,EACTA,EAAmB,KACnB,IAGc2xB,EAHVF,EAAM7tC,EAAKioB,WAAW,GAAI13R,EAAQyvQ,EAAKioB,WAAW,GACrB+lB,EAAiB,EAARz9S,EAAa09S,EAAkB,EAAR19S,EAC7DvF,EAAQ,GAAa,EAARuF,GACb29S,EAAO,EACPhpM,EAAI,GACL+oM,IAASC,EAAOluC,EAAKioB,WAAW,IAChC+lB,IAAQD,EAAW/tC,EAAKioB,WAAW,IACtC,IAAIjpR,EAAoB,GAAThU,EAAa,YAAc,YACtCrB,EAAc,IAARkkT,EAAY,GAAK7tC,EAAKioB,WAAW4lB,EAAK7uS,GAMhD,OALGivS,IAASjuC,EAAKl+P,GAAK,EAAIosS,GACvBF,IAAQhuC,EAAKl+P,GAAKisS,GACrB7oM,EAAElzG,EAAIrI,EACFskT,IAAW/oM,EAAEq8I,IAAM,MAAQr8I,EAAElzG,EAAI,OAAQkzG,EAAE97G,EAAI87G,EAAElzG,GACrDoqR,EAAmB5nB,EACZtvJ,EAER,SAASipM,GAAkCC,GAC1C,IAAIl3R,EAAOk3R,EAAMp8S,GAAG,GAEhBm6S,EAAM1gB,GAAQ,GAClB0gB,EAAItkB,YAAY,EAAG3wQ,EAAIt2B,QACvBurT,EAAItkB,YAAY,EAAG,GAGnB,IAAIwmB,EAAQ5iB,GAAQ,EAAIv0Q,EAAIt2B,QAK5B,OAJAytT,EAAMxmB,YAAY,EAAI3wQ,EAAIt2B,OAAQs2B,EAAK,WAIhC0nQ,EAFG,CAACutB,EAAKkC,IAMjB,SAASC,GAA2BtuC,EAAM6tC,EAAKh9G,GAE9C,GAAGA,EAAM,CACR,GAAGA,EAAKktG,MAAQ,GAAKltG,EAAKktG,MAAQ,EAAG,OAAO/9B,EAAKioB,WAAW4lB,EAAK,SACjE,GAAGh9G,EAAKktG,MAAQ,GAAI,OAAO/9B,EAAKioB,WAAW4lB,EAAK,aAKjD,OAFe,IADC7tC,EAAKioB,WAAW,GACHjoB,EAAKioB,WAAW4lB,EAAK,aAClC7tC,EAAKioB,WAAW4lB,EAAK,aAKtC,SAASU,GAAsBvuC,EAAMp/Q,EAAQiwM,GAC5C,IAAIg9G,EAAM7tC,EAAKioB,WAAWp3F,GAAqB,GAAbA,EAAKktG,KAAY,EAAI,GACvD,OAAW,IAAR8P,GAAa7tC,EAAKl+P,IAAY,IAC1BwsS,GAA2BtuC,EAAM6tC,EAAKh9G,GAG9C,SAAS29G,GAAuBxuC,EAAMp/Q,EAAQiwM,GAC7C,GAAGA,EAAKktG,KAAO,EAAG,OAAOwQ,GAAsBvuC,EAAMp/Q,EAAQiwM,GAC7D,IAAIg9G,EAAM7tC,EAAKioB,WAAW,GAC1B,OAAW,IAAR4lB,GAAa7tC,EAAKl+P,IAAY,IAC1Bk+P,EAAKioB,WAAW4lB,EAAMh9G,EAAKktG,MAAQ,IAAM/9B,EAAK6U,KAAS,QAAU,aAGzE,SAAS45B,GAAsBv3R,EAAK25K,EAAM1sM,GAKzC,OAJIA,IAAGA,EAAIsnS,GAAQ,EAAI,EAAIv0Q,EAAIt2B,SAC/BuD,EAAE0jS,YAAY,EAAG3wQ,EAAIt2B,QACrBuD,EAAE0jS,YAAY,EAAG,GACjB1jS,EAAE0jS,YAAY,GAAI3wQ,EAAK,WAChB/yB,EAoDR,SAASuqT,GAAsB1uC,GAC9B,IAAIr/Q,EAAMq/Q,EAAKioB,WAAW,GAE1B,OADQtnS,EAAM,EAAIq/Q,EAAKioB,WAAWtnS,EAAK,WAAWoR,QAAQ+sR,EAAM,IAAM,GA6BvE,SAAS6vB,GAAgBC,GACxB,IAAI3iS,EAAMw/Q,GAAQ,KAAM5qS,EAAI,EACxBmlT,EAAS4I,EAAG5I,OACZlwC,EAAIkwC,EAAOxyR,QAAQ,MAAQ,EAAI,GAAO,GAC1C,OAAOwyR,EAAOxxK,OAAO,IAAM,IAAK,IAAKshI,EAAE,GAAM,MAAO,IAAK,IAAKA,IAAG,EACjE7pP,EAAI47Q,YAAY,EAAE,GAAI57Q,EAAI47Q,YAAY,EAAG/xB,GACzC,IAAIhvQ,EAAO,CAAC,EAAE,QAAQ,QAAQ,QAAQ,IAAK,IAAIjG,EAAI,EAAGA,EAAIiG,EAAKlG,SAAUC,EAAGorB,EAAI47Q,YAAY,EAAG/gS,EAAKjG,IACpG,GAAQ,IAALi1Q,EAAW,CAGb,IAFAkwC,EAASA,EAAOx/S,MAAM,GACtBylB,EAAI47Q,YAAY,EAAGme,EAAOplT,OAAS,GAC/BC,EAAI,EAAGA,EAAImlT,EAAOplT,SAAUC,EAAGorB,EAAI47Q,YAAY,EAAGme,EAAOlnR,WAAWj+B,IACxEorB,EAAI47Q,YAAY,EAAG,QACb,GAAO,EAAJ/xB,EAAU,CAEnB,IADAhvQ,EAAO,kDAAkD2K,MAAM,KAC3D5Q,EAAI,EAAGA,EAAIiG,EAAKlG,SAAUC,EAAGorB,EAAI47Q,YAAY,EAAGtgM,SAASzgG,EAAKjG,GAAI,KAEtE,IADAorB,EAAI47Q,YAAY,EAAG,GAAGme,EAAOplT,OAAS,IAClCC,EAAI,EAAGA,EAAImlT,EAAOplT,SAAUC,EAAGorB,EAAI47Q,YAAY,EAAGme,EAAOlnR,WAAWj+B,IACxEorB,EAAI47Q,YAAY,EAAG,OACb,CAEN,IADA/gS,EAAO,kDAAkD2K,MAAM,KAC3D5Q,EAAI,EAAGA,EAAIiG,EAAKlG,SAAUC,EAAGorB,EAAI47Q,YAAY,EAAGtgM,SAASzgG,EAAKjG,GAAI,KAEtE,IADA,IAAIizN,EAAI,EACuB,OAAzBkyF,EAAOx/S,MAAQ,EAAFstN,EAAM,EAAFA,EAAI,IAAoC,QAAzBkyF,EAAOx/S,MAAQ,EAAFstN,EAAM,EAAFA,EAAI,MAAcA,EAGzE,IAFA7nM,EAAI47Q,YAAY,EAAG/zE,GACnB7nM,EAAI47Q,YAAY,EAAGme,EAAOplT,OAAS,GAC/BC,EAAI,EAAGA,EAAImlT,EAAOplT,SAAUC,EAAGorB,EAAI47Q,YAAY,EAA0B,IAAvBme,EAAOlnR,WAAWj+B,IAIxE,IAHAorB,EAAI47Q,YAAY,EAAG,GACnB57Q,EAAI47Q,YAAY,EAAG,OACnB57Q,EAAI47Q,YAAY,EAAG,OACfhnS,EAAI,EAAGA,EAAI,IAAKA,EAAGorB,EAAI47Q,YAAY,EAAG,GAE3C,OAAO57Q,EAAIzlB,MAAM,EAAGylB,EAAInK,GAIzB,SAAS+sS,GAAe7uC,GAA4G,MAAO,CAAnGA,EAAKioB,WAAW,GAAQjoB,EAAKioB,WAAW,GAAQjoB,EAAKioB,WAAW,GAAQjoB,EAAKioB,WAAW,IAGhI,SAAS6mB,GAAc9uC,EAAMp/Q,GAAU,IAAIgI,EAAIimT,GAAe7uC,GAAyB,OAAVp3Q,EAAE,GAAK,EAAUA,EAI9F,SAASmmT,GAAc/uC,GAItB,MAAO,CAAE52Q,EAHA42Q,EAAKioB,WAAW,GAGV34R,EAFL0wQ,EAAKioB,WAAW,GAEJ+mB,KADXhvC,EAAKioB,WAAW,IAG5B,SAASgnB,GAAcnlG,EAAGC,EAAGilG,EAAM7qT,GAKlC,OAJIA,IAAGA,EAAIsnS,GAAQ,IACnBtnS,EAAE0jS,YAAY,EAAG/9E,GACjB3lN,EAAE0jS,YAAY,EAAG99E,GACjB5lN,EAAE0jS,YAAY,EAAGmnB,GAAM,GAChB7qT,EAgBR,SAAS+qT,GAAUlvC,EAAMp/Q,EAAQiwM,GAChC,IAAI79I,EAAI69I,EAAKktG,KAAO,EAAI,EAAI,EAE5B,MAAO,CADQ/9B,EAAKioB,WAAWj1O,GAAgBgtN,EAAKioB,WAAWj1O,EAAE,KAAiBgtN,EAAKioB,WAAWj1O,EAAE,MAKrG,SAASm8P,GAAYnvC,GAGpB,MAAO,CAFIA,EAAKioB,WAAW,GAClB+Z,GAAehiC,IAiBzB,SAASovC,GAAYpvC,GACpB,IAAIqvC,EAAUrvC,EAAKioB,WAAW,GAC1BqnB,EAAStvC,EAAKioB,WAAW,GAG7B,MAAO,CAACz7R,EAAE,CAAC8C,EAFI0wQ,EAAKioB,WAAW,GAER7+R,EAAEimT,GAAU92R,EAAE,CAACjpB,EADxB0wQ,EAAKioB,WAAW,GACkB7+R,EAAEkmT,IAEnD,SAASC,GAAYnmT,EAAGjF,GAMvB,OALIA,IAAGA,EAAIsnS,GAAQ,IACnBtnS,EAAE0jS,YAAY,EAAGz+R,EAAEoD,EAAEpD,GACrBjF,EAAE0jS,YAAY,EAAGz+R,EAAEmvB,EAAEnvB,GACrBjF,EAAE0jS,YAAY,EAAGz+R,EAAEoD,EAAE8C,GACrBnL,EAAE0jS,YAAY,EAAGz+R,EAAEmvB,EAAEjpB,GACdnL,EAIR,SAASqrT,GAAWxvC,GACnB,IAAIqvC,EAAUrvC,EAAKioB,WAAW,GAC1BqnB,EAAStvC,EAAKioB,WAAW,GAG7B,MAAO,CAACz7R,EAAE,CAAC8C,EAFI0wQ,EAAKioB,WAAW,GAER7+R,EAAEimT,GAAU92R,EAAE,CAACjpB,EADxB0wQ,EAAKioB,WAAW,GACkB7+R,EAAEkmT,IAInD,IAAIG,GAAYD,GAGhB,SAASE,GAAY1vC,GACpBA,EAAKl+P,GAAK,EACV,IAAI6tS,EAAK3vC,EAAKioB,WAAW,GACrBzkR,EAAKw8P,EAAKioB,WAAW,GACrB13R,EAAQyvQ,EAAKioB,WAAW,GAE5B,OADAjoB,EAAKl+P,GAAG,GACD,CAAC0B,EAAImsS,EAAIp/S,GAsBjB,SAASq/S,GAAa5vC,GAAQA,EAAKl+P,GAAK,EAAGk+P,EAAKl+P,GAAKk+P,EAAKioB,WAAW,GACrE,IAAI4nB,GAAQ,CACZrzB,EAAMozB,GACN,EAAMA,GACN,EAAMA,GACN,EAAMA,GACN,EAdA,SAAoB5vC,GAInB,OAFAA,EAAKl+P,GAAK,EACVk+P,EAAKn+B,GAAKm+B,EAAKioB,WAAW,GAFhB,IAcX,EAAM2nB,GACN,EAAMA,GACN,GAAMA,GACN,GAAMA,GACN,GAAMA,GACN,GA9BA,SAAqB5vC,GACpB,IAAI/zP,EAAM,GAKV,OAJA+zP,EAAKl+P,GAAK,EACVk+P,EAAKl+P,GAAK,GACVmK,EAAI6jS,YAAc9vC,EAAKioB,WAAW,GAClCjoB,EAAKl+P,GAAK,EACHmK,GAyBR,GAAM2jS,GACN,GAAMA,GACN,GAAMA,GACN,GAAMA,GACN,GAAMA,GACN,GAAMA,GACN,GAAMA,GACN,GAAMF,IAmBN,SAASK,GAAU/vC,EAAMp/Q,GACxB,IAAIuD,EAAI,CAAC6rT,QAAQ,EAAGjgG,GAAG,GAGvB,OAFA5rN,EAAE6rT,QAAUhwC,EAAKioB,WAAW,IAAIrnS,GAAU,IAC7B,IAAKuD,EAAE4rN,GAAKiwD,EAAKioB,WAAW,GAAIjoB,EAAKl+P,GAAK,GAChD3d,EAAE6rT,SACR,KAAK,KACL,KAAK,KACL,KAAK,KACL,KAAK,IACL,KAAK,IACL,KAAK,EAAQ,KAAK,EACjB,MACD,QAAS,GAAGpvT,EAAS,EAAG,MAAM,IAAIoH,MAAM,uBAAyB7D,EAAE6rT,SAIpE,OADAhwC,EAAKioB,WAAWrnS,GACTuD,EAER,SAAS8rT,GAAUvtE,EAAI1wO,EAAG7N,GACzB,IAAI+gD,EAAI,KAAQ8N,EAAI,GACpB,OAAO7uD,EAAE+rT,UACR,IAAK,QAAS,MACd,IAAK,QAAShrQ,EAAI,KAAQ8N,EAAI,EAAG,MACjC,IAAK,QAAS9N,EAAI,EAAQ8N,EAAI,EAAG,MACjC,IAAK,QAAS9N,EAAI,EAAQ8N,EAAI,EAAG,MACjC,IAAK,QAAS9N,EAAI,EAAQ8N,EAAI,EAAG,MACjC,IAAK,MAAO,MACZ,QAAS,MAAM,IAAIhrD,MAAM,4BAE1B,IAAIikB,EAAMw/Q,GAAQz4O,GAWlB,OAVA/mC,EAAI47Q,YAAY,EAAG3iP,GACnBj5B,EAAI47Q,YAAY,EAAG71R,GAChBghD,EAAI,GAAG/mC,EAAI47Q,YAAY,EAAG,OAC1B70O,EAAI,GAAG/mC,EAAI47Q,YAAY,EAAG,MAC1B70O,EAAI,IACN/mC,EAAI47Q,YAAY,EAAG,OACnB57Q,EAAI47Q,YAAY,EAAG,GACnB57Q,EAAI47Q,YAAY,EAAG,MACnB57Q,EAAI47Q,YAAY,EAAG,IAEb57Q,EAqDR,SAASkkS,GAAkBrpT,EAAM+pM,GAChC,IAAI79I,GAAM69I,GAAQA,EAAKktG,MAAQ,EAAI,EAAI,EACnC55S,EAAIsnS,GAAQ,EAAIz4O,EAAIlsD,EAAKL,KAAK7F,QAClCuD,EAAE0jS,YAAY,EAAG/gS,EAAKq3F,KACtBh6F,EAAE0jS,YAAY,EAAG/gS,EAAKspT,IAAM,GAC5BjsT,EAAE0jS,YAAY,EAAG/gS,EAAKipN,IACtB5rN,EAAE0jS,YAAY,EAAG/gS,EAAKL,KAAK7F,QACxBiwM,EAAKktG,MAAQ,GAAG55S,EAAE0jS,YAAY,EAAG,GACpC1jS,EAAE0jS,YAAY70O,EAAIlsD,EAAKL,KAAK7F,OAAQkG,EAAKL,KAAMoqM,EAAKktG,KAAO,EAAI,OAAS,WACxE,IAAI9xR,EAAM9nB,EAAEqC,MAAM,EAAGrC,EAAE2d,GACV,OAAbmK,EAAInK,EAAI3d,EAAE2d,EAAUmK,EAwErB,SAASokS,GAAuBrwC,EAAMp/Q,EAAQiwM,GAC7C,IAAIrpM,EAAI,EACHqpM,GAAqB,GAAbA,EAAKktG,OACjBv2S,EAAIw4Q,EAAKioB,WAAW,IAErB,IAAIqoB,EAAQtwC,EAAKioB,WAAW,GAK5B,OAJIp3F,GAAqB,GAAbA,EAAKktG,OAChBv2S,EAAI,GAAK8oT,GAAS,IAAKA,GAAS,OAG1B,CADE,CAACC,SAAW,EAAF/oT,EAAIgpT,QAAU,EAAFhpT,IAAM,EAAEipT,OAAS,EAAFjpT,IAAM,EAAEkpT,OAAS,EAAFlpT,IAAM,GACvD8oT,GAiHb,SAASK,GAAa9vT,EAAG2G,EAAGqpM,EAAM1sM,GACjC,IAAIysT,EAAM//G,GAAsB,GAAbA,EAAKktG,KACpB55S,IAAGA,EAAIsnS,GAAQmlB,EAAM,EAAIppT,EAAE5G,OAAW,EAAI,EAAI4G,EAAE5G,SACpDuD,EAAE0jS,YAAY,EAAGhnS,GACjBsD,EAAE0jS,YAAa+oB,EAAK,EAAI,EAAIppT,EAAE5G,QAC1BgwT,GAAIzsT,EAAE0jS,YAAY,EAAG,GACzB1jS,EAAE0jS,aAAa+oB,EAAK,EAAI,GAAKppT,EAAE5G,OAAQ4G,EAAIopT,EAAK,OAAS,WACzD,IAAI3kS,EAAO9nB,EAAEvD,OAASuD,EAAE2d,EAAK3d,EAAEqC,MAAM,EAAGrC,EAAE2d,GAAK3d,EAE/C,OADY,MAAT8nB,EAAInK,IAAWmK,EAAInK,EAAImK,EAAIrrB,QACvBqrB,EAER,IAAI4kS,GAAoBrC,GAGxB,SAASsC,GAAiB9wC,EAAMp/Q,EAAQiwM,GACvC,IAAIhuL,EAAMm9P,EAAKl+P,EAAIlhB,EACfoyD,EAAiB,GAAb69I,EAAKktG,MAAcltG,EAAKktG,KAAW,EAAJ,EACnC30S,EAAI42Q,EAAKioB,WAAWj1O,GAAI82J,EAAIk2D,EAAKioB,WAAWj1O,GAC5C1jD,EAAI0wQ,EAAKioB,WAAW,GAAIl+E,EAAIi2D,EAAKioB,WAAW,GAEhD,OADAjoB,EAAKl+P,EAAIe,EACF,CAACrW,EAAG,CAACpD,EAAEA,EAAGkG,EAAEA,GAAIipB,EAAG,CAACnvB,EAAE0gN,EAAGx6M,EAAEy6M,IAgGnC,SAASgnG,GAASjqT,EAAMkqT,EAAOngH,EAAM1sM,GACpC,IAAIysT,EAAM//G,GAAsB,GAAbA,EAAKktG,KAcxB,OAbI55S,IAAGA,EAAIsnS,GAAQmlB,EAAK,GAAK,KAC7BzsT,EAAE0jS,YAAY,EAAG,GACd/gS,EAAKo3P,OACP/5P,EAAE0jS,YAAY,EAAI/gS,EAAKq4S,UAAU,GACjCh7S,EAAE0jS,YAAY,EAAG,SAEjB1jS,EAAE0jS,YAAY,EAAI/gS,EAAKq4S,UAAU,GACjCh7S,EAAE0jS,YAAY,EAAImpB,GAAO,IAE1B7sT,EAAE0jS,YAAY,EAAG,GACjB1jS,EAAE0jS,YAAY,EAAG,GACb+oB,GAAIzsT,EAAE0jS,YAAY,EAAG,GACzB1jS,EAAE0jS,YAAY,EAAG,GACV1jS,EAqBR,SAAS8sT,GAAcjxC,EAAMp/Q,EAAQiwM,GACpC,IAAIzuF,EAAO2sM,GAAc/uC,GACT,GAAbnvE,EAAKktG,QAAa/9B,EAAKl+P,EAC1B,IAAI/Y,EAxzBL,SAAmBi3Q,GAClB,IAAI59P,EAAI49P,EAAKioB,WAAW,GACxB,OAAa,IADmBjoB,EAAKioB,WAAW,GAC5B7lR,EAAU,IAANA,EAszBd8uS,CAAUlxC,GAGpB,OAFA59J,EAAKr5G,IAAMA,EACXq5G,EAAKpwG,GAAa,IAARjJ,IAAwB,IAARA,EAAiB,IAAM,IAC1Cq5G,EAuBR,IAAI+uM,GA5lBJ,SAAkCnxC,EAAMp/Q,EAAQiwM,GAAQ,OAAkB,IAAXjwM,EAAe,GAAK4tT,GAAuBxuC,EAAMp/Q,EAAQiwM,IA8mBxH,SAASugH,GAAiBpxC,EAAMp/Q,EAAQiwM,GACvC,IACIxoK,EADA93B,EAAQyvQ,EAAKioB,WAAW,GAExB9jS,EAAI,CACPktT,SAAkB,EAAR9gT,EACV+gT,YAAc/gT,IAAU,EAAK,EAC7BghT,UAAYhhT,IAAU,EAAK,EAC3BihT,KAAOjhT,IAAU,EAAK,EACtBkhT,SAAWlhT,IAAU,EAAK,EAC1BsxO,GAAKtxO,IAAU,EAAK,KACpBmhT,MAAOnhT,IAAU,GAAK,GAMvB,OAJkB,QAAfsgM,EAAK8gH,QAAkBtpR,EAzmB3B,SAAwB23O,EAAMp/Q,EAAQiwM,GACrCmvE,EAAKl+P,GAAK,EAAGlhB,GAAU,EACvB,IAAIkhB,EAAIk+P,EAAKl+P,EAAIlhB,EACbgxT,EAAUhE,GAA2B5tC,EAAMp/Q,EAAQiwM,GACnDisG,EAAK98B,EAAKioB,WAAW,GAEzB,GAAG6U,KADHh7R,GAAKk+P,EAAKl+P,GACG,MAAM,IAAI9Z,MAAM,iCAAmC8Z,EAAI,OAASg7R,GAE7E,OADA98B,EAAKl+P,GAAKg7R,EACH8U,EAimB0BC,CAAe7xC,EAAMp/Q,EAAO,EAAGiwM,IAEhE1sM,EAAEkkC,KAAOA,GAAQ23O,EAAKioB,WAAWrnS,EAAO,GACrB,iBAATynC,IAAmBlkC,EAAE2tT,KAAOzpR,GAC/BlkC,EAIR,IAAI4tT,GAAgB,CACnB,yBACA,kBACA,mBACA,gBACA,iBACA,iBACA,mBACA,qBACA,iBACA,kBACA,sBACA,wBACA,oBACA,yBAED,SAASC,GAAUhyC,EAAMp/Q,EAAQiwM,GAChC,IAAIhuM,EAASm9Q,EAAKl+P,EAAIlhB,EAClB2P,EAAQyvQ,EAAKioB,WAAW,GACxBgqB,EAAQjyC,EAAKioB,WAAW,GACxB4lB,EAAM7tC,EAAKioB,WAAW,GACtBiqB,EAAMlyC,EAAKioB,WAAWp3F,GAAqB,GAAbA,EAAKktG,KAAY,EAAI,GACnDoU,EAAO,IACPthH,GAAQA,EAAKktG,MAAQ,KACR,GAAbltG,EAAKktG,OAAW/9B,EAAKl+P,GAAK,GAC7BqwS,EAAOnyC,EAAKioB,WAAW,GACP,GAAbp3F,EAAKktG,OAAW/9B,EAAKl+P,GAAK,GAC7Bk+P,EAAKl+P,GAAK,GAEX,IAAIrb,EAAO6nT,GAA2BtuC,EAAM6tC,EAAKh9G,GACtC,GAARtgM,IAAc9J,EAAOsrT,GAActrT,EAAKq4B,WAAW,KACtD,IAAIszR,EAASvvT,EAASm9Q,EAAKl+P,EAE3B,OAFiC+uL,GAAqB,GAAbA,EAAKktG,QAAaqU,EAEpD,CACNH,MAAOA,EACPH,KAAMrrT,EACN0rT,KAAMA,EACNE,KALUxvT,GAAUm9Q,EAAKl+P,GAAa,IAARowS,EAAY,GAwhK5C,SAAiClyC,EAAMp/Q,EAAQiwM,EAAMqhH,GACpD,IAEII,EAFAzvT,EAASm9Q,EAAKl+P,EAAIlhB,EAClByxT,EAAOE,GAAWvyC,EAAMkyC,EAAKrhH,GAGjC,OADGhuM,IAAWm9Q,EAAKl+P,IAAGwwS,EAAOE,GAAexyC,EAAMn9Q,EAASm9Q,EAAKl+P,EAAGuwS,EAAMxhH,IAClE,CAACwhH,EAAMC,GA7hKkCG,CAAwBzyC,EAAMoyC,EAAQvhH,EAAMqhH,IAU7F,SAASQ,GAAkB1yC,EAAMp/Q,EAAQiwM,GACxC,GAAGA,EAAKktG,KAAO,EAAG,OAOnB,SAAgC/9B,EAAMp/Q,EAAQiwM,GACtB,GAApBmvE,EAAKA,EAAKl+P,EAAI,IAAYk+P,EAAKA,EAAKl+P,KACvC,IAAI3d,EAAIypT,GAA2B5tC,EAAMp/Q,EAAQiwM,GACjD,OAA0B,GAAnB1sM,EAAE26B,WAAW,GAAa36B,EAAEqC,MAAM,GAAKrC,EAVrBwuT,CAAuB3yC,EAAMp/Q,EAAQiwM,GAE9D,IADA,IAAI1sM,EAAI,GAAItB,EAASm9Q,EAAKl+P,EAAIlhB,EAAQD,EAAMq/Q,EAAKioB,WAAWp3F,EAAKktG,KAAO,EAAI,EAAI,GAChE,GAAVp9S,KAAawD,EAAEmB,KAAK4pT,GAAUlvC,EAAMnvE,EAAKktG,KAAmBltG,IAElE,GAAGmvE,EAAKl+P,GAAKjf,EAAQ,MAAM,IAAImF,MAAM,oBAAsBg4Q,EAAKl+P,EAAI,OAASjf,GAC7E,OAAOsB,EA4BR,SAASyuT,GAAY5yC,EAAMp/Q,EAAQiwM,GAClC,IAAIgiH,EAAMpD,GAAUzvC,EAAM,GAE1B,OAAOnvE,EAAKktG,MACX,KAAK,EAAG/9B,EAAKl+P,IAAMlhB,GAAU,EAAG,MAChC,KAAK,EAAG,KAAK,EAAGo/Q,EAAKl+P,GAAK,EAAGlhB,GAAU,EAAG,MAC1C,QAASo/Q,EAAKl+P,GAAK,EAAGlhB,GAAU,GAEjC,MAAO,CAACiyT,EAAKC,GAAyB9yC,EAAMp/Q,EAAQiwM,IAiDrD,IAAIkiH,GAAgB,GAoFpB,SAASC,GAAYpE,GACpB,IAAI9N,EAAIrV,GAAQ,IACZonB,EAAMnU,GAAYkQ,EAAG,IACzB9N,EAAEjZ,YAAY,EAAGgrB,EAAIzpT,GAAI03S,EAAEjZ,YAAY,EAAGgrB,EAAIzpT,GAC9C03S,EAAEjZ,YAAY,EAAGgrB,EAAIvjT,GAAIwxS,EAAEjZ,YAAY,EAAGgrB,EAAIvjT,GAE9C,IADA,IAAIu7R,EAAQ,kDAAkDp5R,MAAM,KAC5D5Q,EAAI,EAAGA,EAAI,KAAMA,EAAGigT,EAAEjZ,YAAY,EAAGtgM,SAASsjM,EAAMhqS,GAAI,KAChE,OAAO+9R,EAAQ,CAACkiB,EAAG6N,GAAgBC,EAAG,MAYvC,SAASqE,GAAmBrE,GAC3B,IAAIsE,EAAKtE,EAAG,GAAGuE,QACXrS,EAAIrV,GAAQ,GAAK,GAAKynB,EAAGtyT,OAAS,IACtCkgT,EAAEjZ,YAAY,EAAG,MACjB,IAAIgrB,EAAMnU,GAAYkQ,EAAG,IACzB9N,EAAEjZ,YAAY,EAAGgrB,EAAIzpT,GAAI03S,EAAEjZ,YAAY,EAAGgrB,EAAIzpT,GAC9C03S,EAAEjZ,YAAY,EAAGgrB,EAAIvjT,GAAIwxS,EAAEjZ,YAAY,EAAGgrB,EAAIvjT,GAC9C,IAAI,IAAIzO,EAAI,EAAGA,EAAIqyT,EAAGtyT,SAAUC,EAAGigT,EAAEjZ,YAAY,EAAGqrB,EAAGp0R,WAAWj+B,IAElE,OADAigT,EAAEjZ,YAAY,EAAG,GACViZ,EA4CR,SAASsS,GAAcpzC,EAAMp/Q,EAAQiwM,GACpC,IAAIA,EAAKwiH,WAAY,OAAOzW,GAAU58B,EAAMp/Q,GAC5C,IAAIoyD,EAAI69I,GAAQA,EAAKktG,MAAQ,GAAK,EAAI,EAClCuV,EAAWtzC,EAAKioB,WAAWj1O,GAC3BugQ,EAAUvzC,EAAKioB,WAAWj1O,GAC1BwgQ,EAAQxzC,EAAKioB,WAAWj1O,GACxBg8P,EAAOhvC,EAAKioB,WAAWj1O,GACvBziD,EAAQyvQ,EAAKioB,WAAW,GACpB,GAALj1O,IAAQgtN,EAAKl+P,GAAK,GACrB,IAAI3d,EAAI,CAAEqI,EAAE8mT,EAAU/6R,EAAEg7R,EAASvgQ,EAAEwgQ,EAAOxE,KAAKA,EAAMz+S,MAAMA,GAE3D,OADGsgM,EAAKktG,MAAQ,IAAMltG,EAAKktG,QAAM55S,EAAE+pF,MAAS39E,GAAS,EAAK,GACnDpM,EAtKR4uT,GAAc,GAAQ,SAAS/yC,EAAMp/Q,GACpC,IAAIsnS,EAAMloB,EAAKl+P,EAAIlhB,EACnBo/Q,EAAKl+P,GAAK,GACV,IAAI+/N,EAAKm+B,EAAKioB,WAAW,GACzBjoB,EAAKl+P,GAAK,EACVk+P,EAAKl+P,GAAK,EACVk+P,EAAKl+P,GAAK,EACVk+P,EAAKl+P,GAAK,EACVk+P,EAAKl+P,GAAK,EACV,IAAI2xS,EAAUzzC,EAAKioB,WAAW,GAG9B,OAFAjoB,EAAKl+P,GAAK2xS,EACVzzC,EAAKl+P,EAAIomR,EACF,CAAE/F,IAAItgD,IAwLd,IAAI6xE,GAAc3E,GACd4E,GAAYjG,GACZkG,GAAerF,GAgFfsF,GAAM,WACV,IAAIC,EAAmB,CAEvB,EAAQ,IAAe,EAAQ,IAC/B,EAAO,KAAgB,EAAM,IAC7B,IAAQ,IAAe,IAAQ,IAC/B,IAAQ,IAAe,IAAQ,IAC/B,IAAQ,IAAe,IAAQ,IAC/B,IAAQ,IAAe,IAAQ,IAC/B,IAAQ,IAAe,IAAQ,IAC/B,IAAQ,IAAe,IAAQ,IAC/B,IAAQ,IAAe,IAAO,KAC9B,IAAO,KAAgB,IAAM,MAC7B,IAAM,MAAiB,IAAM,MAC7B,IAAO,KAAgB,IAAO,KAC9B,IAAO,KAAgB,IAAO,KAG9Bt3B,EAAM,MAAiB,EAAQ,IAC/B,EAAQ,IAAe,GAAQ,IAC/B,GAAQ,IAAe,GAAQ,IAC/B,GAAQ,IAAe,GAAQ,IAC/B,GAAQ,IAAe,GAAQ,IAC/B,GAAQ,IAAe,GAAQ,IAC/B,GAAQ,IAAe,GAAQ,IAC/B,GAAQ,IAAe,GAAQ,IAC/B,GAAQ,IAAe,GAAQ,IAC/B,GAAQ,IAAe,GAAQ,IAC/B,GAAQ,IAAe,GAAQ,IAC/B,GAAQ,IAAe,GAAQ,IAC/B,GAAQ,IAAe,GAAQ,IAC/B,GAAQ,IAAe,GAAQ,IAC/B,GAAQ,IAAe,GAAQ,IAC/B,GAAQ,IAAe,GAAQ,IAC/B,GAAQ,IAAe,GAAQ,IAC/B,GAAO,KAAgB,GAAO,KAC9B,GAAO,KAEP,IAAM,OAEFu3B,EAAkBze,EAAM,CAC5B,EAAQ,IAAe,EAAQ,IAC/B,EAAO,KAAgB,EAAM,IAC7B,IAAQ,IAAe,IAAQ,IAC/B,IAAQ,IAAe,IAAQ,IAC/B,IAAQ,IAAe,IAAQ,IAC/B,IAAQ,IAAe,IAAQ,IAC/B,IAAQ,IAAe,IAAQ,IAC/B,IAAQ,IAAe,IAAQ,IAC/B,IAAQ,IAAe,IAAO,KAC9B,IAAO,KAAgB,IAAM,MAC7B,IAAM,MAAiB,IAAM,MAC7B,IAAO,KAAgB,IAAO,KAC9B,IAAO,KAAgB,IAAO,KAC9B9Y,EAAM,QAkJN,SAASw3B,EAAal2R,EAAK+yK,GAC1B,IAAI1sM,EAAI0sM,GAAQ,GAEhB,OADI1sM,EAAEqiS,SAAQriS,EAAEqiS,OAAS,YAClB0Z,GAjJR,SAAoBpiR,EAAK+yK,GACxB,IAAI5kL,EAAM,GAEN/c,EAAKmvR,EAAY,GACrB,OAAOxtF,EAAKjrL,MACX,IAAK,SAAU1W,EAAIqvR,EAAIJ,EAAOh/Q,OAAO2e,IAAO,MAC5C,IAAK,SAAU5uB,EAAIqvR,EAAIzgQ,GAAM,MAC7B,IAAK,SACL,IAAK,QAAS5uB,EAAI4uB,EAEnBkqQ,GAAU94R,EAAG,GAEb,IAAI+kT,EAAK/kT,EAAE+4R,WAAW,GAClBisB,GAAO,EACPC,GAAM,EAAOC,GAAK,EACtB,OAAOH,GACN,KAAK,EAAM,KAAK,EAAM,MACtB,KAAK,GAAME,GAAM,EAAMD,GAAO,EAAM,MACpC,KAAK,GAAMC,GAAM,EAAM,MACvB,KAAK,IACL,KAAK,IAAMD,GAAO,EAAM,MACxB,KAAK,IAAMA,GAAO,EAAME,GAAK,EAAM,MACnC,KAAK,IAAMF,GAAO,EAAM,MACxB,QAAS,MAAM,IAAIlsT,MAAM,4BAA8BisT,EAAG1tT,SAAS,KAEpE,IAA+B8tT,EAAO,EAAGC,EAAO,EACvC,GAANL,IAAYI,EAAOnlT,EAAE+4R,WAAW,IACmD/4R,EAAE4S,GAAK,EACpF,GAANmyS,IAAYI,EAAOnlT,EAAE+4R,WAAW,IAC1B,GAANgsB,IAAYK,EAAOplT,EAAE+4R,WAAW,IACnC,IAAIssB,EAAOrlT,EAAE+4R,WAAW,GAELusB,EAAa,KACvB,GAANP,IACH/kT,EAAE4S,GAAG,GACO5S,EAAE+4R,WAAW,GAIX,IAAX/4R,EAAEA,EAAE4S,KAAU0yS,EAAaV,EAAiB5kT,EAAEA,EAAE4S,KACnD5S,EAAE4S,GAAG,EAEL5S,EAAE4S,GAAG,GAEFsyS,IAAIllT,EAAE4S,GAAK,IAGd,IAFD,IAAImnE,EAAS,GAAIC,EAAQ,GACpBurO,EAAOH,EAAO,IAAMH,EAAM,IAAM,GAAIh/C,EAAKi/C,EAAK,GAAK,GAC3C,GAANH,EAAa/kT,EAAE4S,EAAI5S,EAAEtO,QAAoB,IAAVsO,EAAEA,EAAE4S,GAAY5S,EAAE4S,EAAI2yS,GAW1D,QAVAvrO,EAAQ,IACFziF,KAAO2sQ,QAAQ/hE,MAAMlyL,OAAOq1S,EAAYtlT,EAAE1I,MAAM0I,EAAE4S,EAAG5S,EAAE4S,EAAEqzP,IAAKpjQ,QAAQ,mBAAmB,IAC/F7C,EAAE4S,GAAKqzP,EACPjsL,EAAMtjE,KAAOvX,OAAO0vB,aAAa7uB,EAAE+4R,WAAW,IACrC,GAANgsB,GAAeG,IAAIlrO,EAAMn6E,OAASG,EAAE+4R,WAAW,IAClD/+M,EAAMvoF,IAAMuO,EAAE+4R,WAAW,GAChB,GAANgsB,IAAY/qO,EAAMn6E,OAASG,EAAE+4R,WAAW,IAC3C/+M,EAAM81I,IAAM9vN,EAAE+4R,WAAW,GACtB/+M,EAAMziF,KAAK7F,QAAQqoF,EAAO3jF,KAAK4jF,GACzB,GAAN+qO,IAAY/kT,EAAE4S,GAAKsyS,EAAK,GAAK,IACzBlrO,EAAMtjE,MACZ,IAAK,IACCuuS,GAAoB,GAAbjrO,EAAMvoF,MAAakwM,EAAKgpG,KAAK/oS,QAAQkQ,IAAI,YAAckoE,EAAMziF,KAAO,IAAMyiF,EAAMtjE,MAC5F,MACD,IAAK,IACL,IAAK,IACDirL,EAAKgpG,KAAK/oS,QAAQkQ,IAAI,YAAckoE,EAAMziF,KAAO,IAAMyiF,EAAMtjE,MAChE,MACD,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACJ,MACD,QAAS,MAAM,IAAI5d,MAAM,uBAAyBkhF,EAAMtjE,MAK1D,GAFc,KAAX1W,EAAEA,EAAE4S,GAAa5S,EAAE4S,EAAIwyS,EAAK,EACjB,GAANL,IAAY/kT,EAAE4S,EAAI,KACjB,GAANmyS,EAAY,CACd,GAAuB,KAApB/kT,EAAE+4R,WAAW,GAAa,MAAM,IAAIjgS,MAAM,4BAA8BkH,EAAE4S,EAAI,IAAM5S,EAAEA,EAAE4S,IAC3F5S,EAAE4S,EAAIwyS,EAGP,IAAIxqG,EAAI,EAAGC,EAAI,EAEf,IADA99L,EAAI,GAAK,GACL89L,EAAI,EAAGA,GAAK9gI,EAAOroF,SAAUmpN,EAAG99L,EAAI,GAAG89L,GAAK9gI,EAAO8gI,GAAGtjN,KAC1D,KAAM4tT,KAAS,GACd,GAAc,KAAXnlT,EAAEA,EAAE4S,GAGP,MAFE5S,EAAE4S,EACJmK,IAAM69L,GAAK,GAAIC,EAAI,EACfA,EAAI,EAAGA,GAAK9gI,EAAOroF,SAAUmpN,EAAG,CACnC,IAAI05E,EAAKv0R,EAAE1I,MAAM0I,EAAE4S,EAAG5S,EAAE4S,EAAEmnE,EAAO8gI,GAAGppN,KAAMuO,EAAE4S,GAAGmnE,EAAO8gI,GAAGppN,IACzDqnS,GAAUvE,EAAI,GACd,IAAIj3R,EAAI4mQ,QAAQ/hE,MAAMlyL,OAAOq1S,EAAY/wB,GACzC,OAAOx6M,EAAO8gI,GAAGnkM,MAChB,IAAK,IACJqG,EAAI69L,GAAGC,GAAKqpD,QAAQ/hE,MAAMlyL,OAAOq1S,EAAY/wB,GAC7Cx3Q,EAAI69L,GAAGC,GAAK99L,EAAI69L,GAAGC,GAAGzyL,OACtB,MACD,IAAK,IACY,IAAb9qB,EAAE5L,OAAcqrB,EAAI69L,GAAGC,GAAK,IAAIlyL,MAAMrrB,EAAEhG,MAAM,EAAE,IAAKgG,EAAEhG,MAAM,EAAE,GAAG,GAAIgG,EAAEhG,MAAM,EAAE,IAC9EylB,EAAI69L,GAAGC,GAAKv9M,EACjB,MACD,IAAK,IAAKyf,EAAI69L,GAAGC,GAAK9nM,WAAWzV,EAAE8qB,QAAS,MAC5C,IAAK,IAAK,IAAK,IAAKrL,EAAI69L,GAAGC,GAAKqqG,EAA8B,WAAzB3wB,EAAGwE,YAAY,EAAG,KAAoBxE,EAAGwE,WAAW,EAAG,KAAM,MAClG,IAAK,IAAK,OAAOz7R,EAAEk8E,eAClB,IAAK,IAAK,IAAK,IAAKz8D,EAAI69L,GAAGC,IAAK,EAAM,MACtC,IAAK,IAAK,IAAK,IAAK99L,EAAI69L,GAAGC,IAAK,EAAO,MACvC,IAAK,IAAK,IAAK,IAAK99L,EAAI69L,GAAGC,IAAK,EAAO,MACvC,QAAS,MAAM,IAAI/hN,MAAM,uBAAyBwE,EAAI,KACpD,MACH,IAAK,IACJ,IAAI0nT,EAAM,MAAM,IAAIlsT,MAAM,gCAAkCisT,EAAG1tT,SAAS,KACxE0lB,EAAI69L,GAAGC,GAAK,YAAcqqG,EAAK7sN,SAAS/6F,EAAE8qB,OAAQ,IAAKmsQ,EAAGwE,WAAW,IACrE,MACD,IAAK,IAAKh8Q,EAAI69L,GAAGC,IAAMv9M,EAAEuF,QAAQ,UAAU,IAAIulB,OAAQ,MACvD,IAAK,IAAKrL,EAAI69L,GAAGC,GAAK,IAAIlyL,KAAK4rQ,EAAGwE,YAAY,EAAG,KAAO,aAAiB,MACzE,IAAK,IAAKh8Q,EAAI69L,GAAGC,GAAK,IAAIlyL,KAAqC,OAA/B4rQ,EAAGwE,WAAW,GAAK,SAAwBxE,EAAGwE,WAAW,IAAK,MAC9F,IAAK,IAAKh8Q,EAAI69L,GAAGC,GAAK05E,EAAGwE,WAAW,EAAE,KAAK,IAAK,MAChD,IAAK,IAAKh8Q,EAAI69L,GAAGC,IAAM05E,EAAGwE,YAAY,EAAG,KAAM,MAC/C,IAAK,IAAK,GAAGksB,GAAwB,GAAjBlrO,EAAO8gI,GAAGppN,IAAU,CAAEsrB,EAAI69L,GAAGC,GAAK05E,EAAGwE,WAAW,EAAE,KAAM,MAE5E,IAAK,IAAK,IAAK,IAAKxE,EAAG3hR,GAAKmnE,EAAO8gI,GAAGppN,IAAK,MAC3C,IAAK,IACJ,GAAsB,eAAnBsoF,EAAO8gI,GAAGtjN,KAAuB,MAErC,QAAS,MAAM,IAAIuB,MAAM,6BAA+BihF,EAAO8gI,GAAGnkM,YAvC9C1W,EAAE4S,GAAGyyS,EA2C5B,GAAS,GAANN,GAAe/kT,EAAE4S,EAAI5S,EAAEtO,QAAsB,IAAZsO,EAAEA,EAAE4S,KAAc,MAAM,IAAI9Z,MAAM,2BAA6BkH,EAAE4S,EAAE,GAAK,OAAS5S,EAAEtO,OAAS,IAAMsO,EAAEA,EAAE4S,EAAE,GAAGvb,SAAS,KAExJ,OADGsqM,GAAQA,EAAK6jH,YAAWzoS,EAAMA,EAAIzlB,MAAM,EAAGqqM,EAAK6jH,YAC5CzoS,EAMa0oS,CAAW72R,EAAK35B,GAAIA,GASzC,IAAIywT,EAAQ,CAAE,EAAK,EAAG,EAAK,IAAK,EAAK,EAAG,EAAK,EAAG,IAAK,EAAG,GAAI,GAgG3D,MAAO,CACN/gS,SA7P2B,CAAC,EAAM,EAAM,GAAM,GAAM,IAAM,IAAM,IAAM,KA8PtEghS,YAxGF,SAAyB/2R,EAAK+yK,GAC7B,IAAM,OAAOwuG,GAAkB2U,EAAal2R,EAAK+yK,GAAOA,GACxD,MAAMt4K,GAAK,GAAGs4K,GAAQA,EAAKgpG,IAAK,MAAMthR,EACtC,MAAO,CAAEsxL,WAAW,GAAGD,OAAO,KAsG7BkrG,SAAUd,EACVe,WAnGF,SAAsB/gG,EAAInjB,GACzB,IAAI1sM,EAAI0sM,GAAQ,GAEhB,IADI1sM,EAAE6wT,UAAY,GAAGr3B,GAAQx5R,EAAE6wT,UAClB,UAAV7wT,EAAEyhB,KAAkB,MAAM,IAAI5d,MAAM,iCACvC,IAAI01S,EAAKP,KACL8X,EAAMC,GAAclhG,EAAI,CAAC/V,OAAO,EAAGsjD,KAAI,EAAM0+C,WAAU,IACvDllK,EAAUk6K,EAAI,GAAInuT,EAAOmuT,EAAIzuT,MAAM,GACnC3F,EAAI,EAAGoM,EAAI,EAAGkoT,EAAO,EAAGZ,EAAO,EACnC,IAAI1zT,EAAI,EAAGA,EAAIk6I,EAAQn6I,SAAUC,EAChC,GAAQ,MAALA,EAAH,CAGA,KAFEs0T,EACuB,iBAAfp6K,EAAQl6I,KAAiBk6I,EAAQl6I,GAAKk6I,EAAQl6I,GAAG0F,SAAS,KAC3C,iBAAfw0I,EAAQl6I,GAAiB,MAAM,IAAImH,MAAM,2BAA6B+yI,EAAQl6I,GAAK,YAAek6I,EAAQl6I,GAAM,KAC1H,GAAGk6I,EAAQvnH,QAAQunH,EAAQl6I,MAAQA,EAAG,IAAIoM,EAAE,EAAGA,EAAE,OAAOA,EACvD,IAA6C,GAA1C8tI,EAAQvnH,QAAQunH,EAAQl6I,GAAK,IAAMoM,GAAU,CAAE8tI,EAAQl6I,IAAM,IAAMoM,EAAG,OAE3E,IAAIusD,EAAQwlP,GAAkBhrF,EAAG,SAC7BohG,EAAW,GACf,IAAIv0T,EAAI,EAAGA,GAAK24D,EAAMjhC,EAAEjpB,EAAIkqD,EAAMhtD,EAAE8C,IAAKzO,EAAG,CAC3C,IAAI4rJ,EAAM,GACV,IAAIx/I,EAAE,EAAGA,EAAInG,EAAKlG,SAAUqM,EACV,MAAdnG,EAAKmG,GAAGpM,IAAY4rJ,EAAInnJ,KAAKwB,EAAKmG,GAAGpM,IAEzC,GAAiB,GAAd4rJ,EAAI7rJ,QAA6B,MAAdm6I,EAAQl6I,GAA9B,CACA,IAAIw0T,EAAQ,GAAIC,EAAS,GACzB,IAAIroT,EAAI,EAAGA,EAAIw/I,EAAI7rJ,SAAUqM,EAAG,CAC/B,cAAcw/I,EAAIx/I,IAEjB,IAAK,SAAUqoT,EAAS,IAAK,MAC7B,IAAK,SAAUA,EAAS,IAAK,MAC7B,IAAK,UAAWA,EAAS,IAAK,MAC9B,IAAK,SAAUA,EAAS7oK,EAAIx/I,aAAc4qB,KAAO,IAAM,IAAK,MAC5D,QAASy9R,EAAS,IAGnB,GAAY,MADZD,EAAQA,GAASA,GAASC,EAAS,IAAMA,GACxB,MAElBf,GAAQK,EAAMS,IAAU,EACxBD,EAASv0T,GAAKw0T,OAf8BD,EAASv0T,GAAK,IAkB3D,IAAIqkD,EAAIw4P,EAAGr4S,KAAK,IAKhB,IAJA6/C,EAAE2iP,YAAY,EAAG,WACjB3iP,EAAE2iP,YAAY,EAAG/gS,EAAKlG,QACtBskD,EAAE2iP,YAAY,EAAG,IAAM,GAAKstB,GAC5BjwQ,EAAE2iP,YAAY,EAAG0sB,GACb1zT,EAAE,EAAGA,EAAI,IAAKA,EAAGqkD,EAAE2iP,YAAY,EAAG,GAGtC,IAFA3iP,EAAE2iP,YAAY,EAAG,IAAgBksB,EAAgB13B,IAAiB,IAAO,GAErEx7R,EAAI,EAAGoM,EAAI,EAAGpM,EAAIk6I,EAAQn6I,SAAUC,EACvC,GAAiB,MAAdk6I,EAAQl6I,GAAX,CACA,IAAI00T,EAAK7X,EAAGr4S,KAAK,IACbmwT,GAAMz6K,EAAQl6I,GAAG2F,OAAO,IAAM,0BAAgDA,MAAM,EAAG,IAC3F+uT,EAAG1tB,YAAY,EAAG2tB,EAAI,QACtBD,EAAG1tB,YAAY,EAAkB,KAAfutB,EAASv0T,GAAY,IAAMu0T,EAASv0T,GAAI,QAC1D00T,EAAG1tB,YAAY,EAAG56R,GAClBsoT,EAAG1tB,YAAY,EAAG+sB,EAAMQ,EAASv0T,KAAO,GACxC00T,EAAG1tB,YAAY,EAAG,GAClB0tB,EAAG1tB,YAAY,EAAG,GAClB0tB,EAAG1tB,YAAY,EAAG,GAClB0tB,EAAG1tB,YAAY,EAAG,GAClB0tB,EAAG1tB,YAAY,EAAG,GAClB0tB,EAAG1tB,YAAY,EAAG,GAClB56R,GAAK2nT,EAAMQ,EAASv0T,KAAO,EAG5B,IAAI40T,EAAK/X,EAAGr4S,KAAK,KAEjB,IADAowT,EAAG5tB,YAAY,EAAG,IACdhnS,EAAE,EAAGA,EAAI,KAAKA,EAAG40T,EAAG5tB,YAAY,EAAG,GACvC,IAAIhnS,EAAE,EAAGA,EAAIiG,EAAKlG,SAAUC,EAAG,CAC9B,IAAI60T,EAAOhY,EAAGr4S,KAAKkvT,GAEnB,IADAmB,EAAK7tB,YAAY,EAAG,GAChB56R,EAAE,EAAGA,EAAE8tI,EAAQn6I,SAAUqM,EAC5B,GAAiB,MAAd8tI,EAAQ9tI,GACX,OAAOmoT,EAASnoT,IACf,IAAK,IAAKyoT,EAAK7tB,YAAY,EAAiB,MAAd/gS,EAAKjG,GAAGoM,GAAa,GAAOnG,EAAKjG,GAAGoM,GAAK,GAAO,IAAO,MACrF,IAAK,IAAKyoT,EAAK7tB,YAAY,EAAG/gS,EAAKjG,GAAGoM,IAAI,EAAG,KAAM,MACnD,IAAK,IACAnG,EAAKjG,GAAGoM,IAEXyoT,EAAK7tB,YAAY,GAAI,OAAO/gS,EAAKjG,GAAGoM,GAAGm5M,eAAe5/M,OAAO,GAAI,QACjEkvT,EAAK7tB,YAAY,GAAI,MAAM/gS,EAAKjG,GAAGoM,GAAGg5M,WAAW,IAAIz/M,OAAO,GAAI,QAChEkvT,EAAK7tB,YAAY,GAAI,KAAK/gS,EAAKjG,GAAGoM,GAAGo5M,WAAW7/M,OAAO,GAAI,SAJ5CkvT,EAAK7tB,YAAY,EAAG,WAAY,QAK9C,MACH,IAAK,IACJ,IAAI1iS,EAAKkJ,OAAOvH,EAAKjG,GAAGoM,IAAI,IAE5B,IADAyoT,EAAK7tB,YAAY,EAAG1iS,EAAI,QACpBgwT,EAAK,EAAGA,EAAO,IAAIhwT,EAAGvE,SAAUu0T,EAAMO,EAAK7tB,YAAY,EAAG,KAMlE,OADA6V,EAAGr4S,KAAK,GAAGwiS,YAAY,EAAG,IACnB6V,EAAG76R,QAlTD,GA4TN8yS,GAAO,WAEV,IAAIC,EAAe,CAClBC,GAAG,IAAKC,GAAG,IAAKC,GAAG,IAAKC,GAAG,IAAKC,GAAG,IAAKC,GAAG,IAC3CC,GAAG,IAAKC,GAAG,IAAKC,GAAG,IAAaC,GAAG,IACnCC,GAAG,IAAKC,GAAG,IAAKC,GAAG,IAAaC,GAAG,IACnCC,GAAG,IAAKC,GAAG,IAAKC,GAAG,IAAKC,GAAG,IAAKC,GAAG,IACnCC,GAAG,IAAKC,GAAG,IAAKC,GAAG,IAAaC,GAAG,IACnCC,GAAG,IAAKC,GAAG,IAAKC,GAAG,IAAKC,GAAG,IAAKC,GAAG,IAAKC,GAAG,IAC3CC,GAAG,IAAKC,GAAG,IAAKC,GAAG,IAAaC,GAAG,IACnCC,GAAG,IAAKC,GAAG,IAAKC,GAAG,IAAaC,GAAG,IACnCC,GAAG,IAAKC,GAAG,IAAKC,GAAG,IAAKC,GAAG,IAAKC,GAAG,IACnCC,GAAG,IAAKC,GAAG,IAAKC,GAAG,IAAaC,GAAG,IACnCC,GAAG,IAAKC,GAAG,IAAKvnP,EAAE,IAAM6zC,EAAE,IAAMh8G,EAAE,IAAM+D,EAAE,IAC1C4rT,GAAG,IAAKC,GAAG,IAAKC,GAAG,IACnB7gE,EAAE,IAAM5oP,EAAE,IAAMw6M,EAAE,IAAM0U,EAAE,IAC5Bg+D,EAAE,IAAQ5lB,EAAE,IAAMv5B,EAAE,IACpB06B,EAAE,IAAQW,EAAE,IAAMe,EAAE,IACpBM,EAAE,IAAQwmB,EAAE,IAAM75Q,EAAE,IAAMvd,EAAE,IAAMtI,EAAE,IAAMihB,EAAE,IAAMtV,EAAE,IAAMme,EAAE,IAC1D,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,KAAK,IAC3D,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,IAAK,IAAI,KAEvDquS,EAAkB,IAAIjsO,OAAO,MAAa9jE,EAAK2sS,GAAczjT,KAAK,KAAKJ,QAAQ,SAAU,SAASA,QAAQ,YAAY,QAAU,QAAS,MACzIknT,EAAe,SAAS/qS,EAAG60Q,GAAK,IAAI5+R,EAAIyxT,EAAa7yB,GAAK,MAAmB,iBAAL5+R,EAAgB+5R,EAAS/5R,GAAKA,GACtG+0T,EAAmB,SAASp2B,EAAIC,EAAIC,GAAM,IAAIm2B,EAAUp2B,EAAGjkQ,WAAW,GAAK,IAAO,EAAMkkQ,EAAGlkQ,WAAW,GAAK,GAAO,OAAgB,IAATq6R,EAAcr2B,EAAK5E,EAASi7B,IAYzJ,SAASC,EAAgBliS,EAAK25K,GAC7B,IAIc5jM,EAJV+wM,EAAU9mL,EAAIzlB,MAAM,WAAYq4M,GAAK,EAAGC,GAAK,EAAGi6E,EAAK,EAAGq1B,EAAK,EAAG34T,EAAM,GACtE44T,EAAU,GACVC,EAAmB,KACnBC,EAAM,GAAIC,EAAU,GAAIC,EAAU,GAAIC,EAAK,GAC3CC,EAAO,EAEX,KADI/oH,EAAKmkH,UAAY,GAAGr3B,GAAQ9sF,EAAKmkH,UAC9BhxB,IAAOhmF,EAAQp9M,SAAUojS,EAAI,CACnC41B,EAAO,EACP,IAEkB7wT,EAFd8wT,EAAK77G,EAAQgmF,GAAI1sQ,OAAOvlB,QAAQ,kCAAmCmnT,GAAkBnnT,QAAQinT,EAAiBC,GAC9GnkE,EAAO+kE,EAAK9nT,QAAQ,MAAO,MAAUN,MAAM,KAAKlF,KAAI,SAAS3D,GAAK,OAAOA,EAAEmJ,QAAQ,UAAW,QAC9FkrS,EAAGnoD,EAAO,GACd,GAAG+kE,EAAKj5T,OAAS,EAAG,OAAOq8S,GAC3B,IAAK,KACL,IAAK,IACL,IAAK,IACL,IAAK,IAAK,MACV,IAAK,IACsB,KAAvBnoD,EAAO,GAAGtgH,OAAO,IACnB8kL,EAAQh0T,KAAKu0T,EAAKrzT,MAAM,GAAGuL,QAAQ,MAAO,MAC3C,MACD,IAAK,IACL,IAAI+nT,GAAW,EAAOC,GAAW,EACjC,IAAIV,EAAG,EAAGA,EAAGvkE,EAAOl0P,SAAUy4T,EAAI,OAAOvkE,EAAOukE,GAAI7kL,OAAO,IAC1D,IAAK,IAAKu1E,EAAIxiH,SAASutJ,EAAOukE,GAAI7yT,MAAM,IAAI,EAAGuzT,GAAW,EAAM,MAChE,IAAK,IAEJ,IADAjwG,EAAIviH,SAASutJ,EAAOukE,GAAI7yT,MAAM,IAAI,EAAOuzT,IAAUhwG,EAAI,GACnD98M,EAAIvM,EAAIE,OAAQqM,GAAK68M,IAAK78M,EAAGvM,EAAIuM,GAAK,GAC1C,MACD,IAAK,IAEiB,OADrBlE,EAAM+rP,EAAOukE,GAAI7yT,MAAM,IAChBguI,OAAO,GAAYzrI,EAAMA,EAAIvC,MAAM,EAAEuC,EAAInI,OAAS,GACzC,SAARmI,EAAgBA,GAAM,EACd,UAARA,EAAiBA,GAAM,EACtB2E,MAAM2oS,GAASttS,IAGb2E,MAAM6oS,GAAUxtS,GAAKs9M,aAC/Bt9M,EAAMktS,EAAUltS,KAHhBA,EAAMstS,GAASttS,GACS,OAArBwwT,GAA6Bx6B,EAAImH,QAAQqzB,KAAmBxwT,EAAM4sS,EAAQ5sS,KAIxD,oBAAZqqQ,SAAyC,iBAAPrqQ,GAAuC,WAAlB8nM,GAAM,IAAIjrL,OAAsBirL,GAAM,IAAImkH,WAAUjsT,EAAMqqQ,QAAQ/hE,MAAMlyL,OAAO0xL,EAAKmkH,SAAUjsT,IAC/J+wT,GAAW,EACX,MACD,IAAK,IACJ,IAAIE,EAAUC,GAASnlE,EAAOukE,GAAI7yT,MAAM,GAAI,CAAC4C,EAAE0gN,EAAEx6M,EAAEy6M,IACnDrpN,EAAIopN,GAAGC,GAAK,CAACrpN,EAAIopN,GAAGC,GAAIiwG,GACxB,MACD,QAAS,GAAGnpH,GAAQA,EAAKgpG,IAAK,MAAM,IAAI7xS,MAAM,mBAAqB6xT,GAEjEC,IAAYp5T,EAAIopN,GAAGC,GAAKhhN,EAAKwwT,EAAmB,MACnD,MACA,IAAK,IACL,IAAIW,EAAS,EACb,IAAIb,EAAG,EAAGA,EAAGvkE,EAAOl0P,SAAUy4T,EAAI,OAAOvkE,EAAOukE,GAAI7kL,OAAO,IAC1D,IAAK,IAAKu1E,EAAIxiH,SAASutJ,EAAOukE,GAAI7yT,MAAM,IAAI,IAAK0zT,EAAQ,MACzD,IAAK,IAEJ,IADApwG,EAAIviH,SAASutJ,EAAOukE,GAAI7yT,MAAM,IAAI,EAC9ByG,EAAIvM,EAAIE,OAAQqM,GAAK68M,IAAK78M,EAAGvM,EAAIuM,GAAK,GAC1C,MACD,IAAK,IAAK2sT,EAAOryN,SAASutJ,EAAOukE,GAAI7yT,MAAM,IAAM,GAAI,MACrD,IAAK,IACL,IAAK,IAAK,MACV,IAAK,IACJ+yT,EAAmBD,EAAQ/xN,SAASutJ,EAAOukE,GAAI7yT,MAAM,KACrD,MACD,IAAK,IACL,IAAK,IACL,IAAK,IAAK,MACV,IAAK,IAEJ,IADAmzT,EAAK7kE,EAAOukE,GAAI7yT,MAAM,GAAGiL,MAAM,KAC3BxE,EAAIs6F,SAASoyN,EAAG,GAAI,IAAK1sT,GAAKs6F,SAASoyN,EAAG,GAAI,MAAO1sT,EACxD2sT,EAAOryN,SAASoyN,EAAG,GAAI,IACvBD,EAAQzsT,EAAE,GAAc,IAAT2sT,EAAa,CAACj+D,QAAO,GAAO,CAACw+D,IAAIP,GAAOQ,GAAYV,EAAQzsT,EAAE,IAC5E,MACH,IAAK,IAEAysT,EADJ3vG,EAAIxiH,SAASutJ,EAAOukE,GAAI7yT,MAAM,IAAI,KAClBkzT,EAAQ3vG,GAAK,IAC7B,MACD,IAAK,IAEA0vG,EADJ3vG,EAAIviH,SAASutJ,EAAOukE,GAAI7yT,MAAM,IAAI,KAClBizT,EAAQ3vG,GAAK,IAC1B8vG,EAAO,GAAKH,EAAQ3vG,GAAGuwG,IAAMT,EAAMH,EAAQ3vG,GAAGwwG,IAAMC,GAAMX,IAC5C,IAATA,IAAYH,EAAQ3vG,GAAG6xC,QAAS,GACxC,MACD,QAAS,GAAG9qD,GAAQA,EAAKgpG,IAAK,MAAM,IAAI7xS,MAAM,mBAAqB6xT,GAEjEK,EAAS,IAAGX,EAAmB,MAAM,MACxC,QAAS,GAAG1oH,GAAQA,EAAKgpG,IAAK,MAAM,IAAI7xS,MAAM,mBAAqB6xT,IAMpE,OAHGJ,EAAQ74T,OAAS,IAAG44T,EAAI,SAAWC,GACnCC,EAAQ94T,OAAS,IAAG44T,EAAI,SAAWE,GACnC7oH,GAAQA,EAAK6jH,YAAWh0T,EAAMA,EAAI8F,MAAM,EAAGqqM,EAAK6jH,YAC5C,CAACh0T,EAAK84T,GAGd,SAASgB,EAActrT,EAAG2hM,GACzB,IAAI4pH,EA1GL,SAAqBvrT,EAAG2hM,GACvB,OAAOA,EAAKjrL,MACX,IAAK,SAAU,OAAOwzS,EAAgBj7B,EAAOh/Q,OAAOjQ,GAAI2hM,GACxD,IAAK,SAAU,OAAOuoH,EAAgBlqT,EAAG2hM,GACzC,IAAK,SAAU,OAAOuoH,EAAgBlqT,EAAE3I,SAAS,UAAWsqM,GAC5D,IAAK,QAAS,OAAOuoH,EAAgBjjB,GAAOjnS,GAAI2hM,GAEjD,MAAM,IAAI7oM,MAAM,qBAAuB6oM,EAAKjrL,MAmG/B80S,CAAYxrT,EAAG2hM,GACxBokH,EAAMwF,EAAO,GAAIzmG,EAAKymG,EAAO,GAC7Bt2T,EAAI+7S,GAAa+U,EAAKpkH,GAE1B,OADA5nL,EAAK+qM,GAAI7lN,SAAQ,SAASuY,GAAKviB,EAAEuiB,GAAKstM,EAAGttM,MAClCviB,EAKR,SAASw2T,EAAmBv4M,EAAM4xG,EAAIlK,EAAGC,GACxC,IAAI5lN,EAAI,OAAS2lN,EAAE,GAAK,MAAQC,EAAE,GAAK,KACvC,OAAO3nG,EAAKpwG,GACX,IAAK,IACJ7N,GAAMi+G,EAAKhgG,GAAG,EACXggG,EAAK56G,IAAM46G,EAAK0zJ,IAAG3xQ,GAAK,KAAOy2T,GAASx4M,EAAK56G,EAAG,CAAC4B,EAAE0gN,EAAGx6M,EAAEy6M,KAAK,MACjE,IAAK,IAAK5lN,GAAKi+G,EAAKhgG,EAAI,OAAS,QAAS,MAC1C,IAAK,IAAKje,GAAKi+G,EAAKpvD,GAAKovD,EAAKhgG,EAAG,MACjC,IAAK,IAAKje,GAAK,KAAOi+G,EAAKpvD,GAAKovD,EAAKhgG,GAAK,IAAK,MAC/C,IAAK,IAAKje,GAAK,IAAMi+G,EAAKhgG,EAAErQ,QAAQ,KAAK,IAAM,IAEhD,OAAO5N,EAiDR,OAjLAyxT,EAAa,KAAO,IAiLb,CACNf,YA/DD,SAA0B3lT,EAAG2hM,GAAQ,OAAOwuG,GAAkBmb,EAActrT,EAAG2hM,GAAOA,IAgErFikH,SAAU0F,EACVzF,WA1BD,SAAuB/gG,EAAInjB,GAC1B,IACuCzuF,EAzBZn2F,EAwBvB4uS,EAAW,CAAC,eAAgB12T,EAAI,GAChCiF,EAAI41S,GAAkBhrF,EAAG,SACzBngG,EAAQ9yH,MAAMC,QAAQgzN,GACtB8mG,EAAK,OAETD,EAASv1T,KAAK,cACdu1T,EAASv1T,KAAK,mBACX0uN,EAAG,WA/BqB/nM,EA+BQ4uS,EAAU7mG,EAAG,SA9B3C7lN,SAAQ,SAASs+I,EAAK5rJ,GAC1B,IAAIg+N,EAAM,OAASh+N,EAAE,GAAK,KAAOA,EAAE,GAAK,IACrC4rJ,EAAIkvG,OAAQ98B,GAAO,KAEE,iBAAbpyE,EAAIzhJ,QAAmByhJ,EAAIsuK,IAAMC,GAASvuK,EAAIzhJ,QACnC,iBAAXyhJ,EAAIsuK,MAAiBtuK,EAAI0tK,IAAMc,GAAQxuK,EAAIsuK,MAChC,iBAAXtuK,EAAI0tK,MAAiBt7F,GAAOx2N,KAAKsW,MAAM8tI,EAAI0tK,OAErB,KAA9Bt7F,EAAIrqF,OAAOqqF,EAAIj+N,OAAS,IAAWqrB,EAAI3mB,KAAKu5N,OAuB7C7K,EAAG,UAnBP,SAA4B/nM,EAAK26D,GAChCA,EAAKz4E,SAAQ,SAASqT,EAAK3gB,GAC1B,IAAIg+N,EAAM,KACPr9M,EAAIm6O,OAAQ98B,GAAO,MACdr9M,EAAI64S,IAAKx7F,GAAO,IAAM,GAAKr9M,EAAI64S,IAAM,IACrC74S,EAAI84S,MAAKz7F,GAAO,IAAM,GAAKq8F,GAAM15S,EAAI84S,KAAO,KACjDz7F,EAAIj+N,OAAS,GAAGqrB,EAAI3mB,KAAKu5N,EAAM,KAAOh+N,EAAE,OAa5Bs6T,CAAmBN,EAAU7mG,EAAG,UAEhD6mG,EAASv1T,KAAK,OAAS8D,EAAEmvB,EAAEnvB,EAAIA,EAAEoD,EAAEpD,EAAI,GAAK,MAAQA,EAAEmvB,EAAEjpB,EAAIlG,EAAEoD,EAAE8C,EAAI,GAAK,KAAO,CAAClG,EAAEoD,EAAE8C,EAAElG,EAAEoD,EAAEpD,EAAEA,EAAEmvB,EAAEjpB,EAAElG,EAAEmvB,EAAEnvB,GAAG+I,KAAK,MAC/G,IAAI,IAAI23M,EAAI1gN,EAAEoD,EAAEpD,EAAG0gN,GAAK1gN,EAAEmvB,EAAEnvB,IAAK0gN,EAChC,IAAI,IAAIC,EAAI3gN,EAAEoD,EAAE8C,EAAGy6M,GAAK3gN,EAAEmvB,EAAEjpB,IAAKy6M,EAAG,CACnC,IAAIl8B,EAAQqwH,GAAY,CAAC90S,EAAE0gN,EAAEx6M,EAAEy6M,KAC/B3nG,EAAOyR,GAASmgG,EAAGlK,IAAI,IAAIC,GAAIiK,EAAGnmC,MACX,MAAVzrE,EAAKhgG,GAAeggG,EAAK56G,IAAK46G,EAAK0zJ,IAChD3xQ,EAAEmB,KAAKq1T,EAAmBv4M,EAAM4xG,EAAIlK,EAAGC,IAGzC,OAAO8wG,EAAS1oT,KAAK2oT,GAAMA,EAAK32T,EAAEgO,KAAK2oT,GAAMA,EAAK,IAAMA,IAvM/C,GAiNPM,GAAM,WAUT,SAASC,EAAenkS,EAAK25K,GAE5B,IADA,IAAImN,EAAU9mL,EAAIzlB,MAAM,MAAOq4M,GAAK,EAAGC,GAAK,EAAGi6E,EAAK,EAAGtjS,EAAM,GACtDsjS,IAAOhmF,EAAQp9M,SAAUojS,EAC/B,GAA2B,QAAvBhmF,EAAQgmF,GAAI1sQ,QAChB,KAAIwyL,EAAI,GAAR,CACA,IAAInrL,EAAWq/K,EAAQgmF,GAAI1sQ,OAAO7lB,MAAM,KACpCmU,EAAO+Y,EAAS,GAAI98B,EAAQ88B,EAAS,GAErC73B,EAAOk3M,IADTgmF,GACqB1sQ,OACvB,QAAS1R,GACR,KAAM,EACL,GAAa,QAAT9e,EAAgB,CAAEpG,IAAMopN,GAAK,GAAIC,EAAI,EAAG,SACvC,GAAa,QAATjjN,EAAgB,MAAM,IAAIkB,MAAM,oCAAsClB,GAC/E,MACD,KAAK,EACQ,SAATA,EAAiBpG,EAAIopN,GAAGC,IAAK,EACf,UAATjjN,EAAkBpG,EAAIopN,GAAGC,IAAK,EAC7Br8M,MAAM2oS,GAASx0S,IACf6L,MAAM6oS,GAAU10S,GAAOwkN,WAC3B3lN,EAAIopN,GAAGC,GAAKloN,EAD2BnB,EAAIopN,GAAGC,GAAKksF,EAAUp0S,GADjCnB,EAAIopN,GAAGC,GAAKssF,GAASx0S,KAGpDkoN,EAAG,MACN,KAAK,EACJjjN,EAAOA,EAAKN,MAAM,EAAEM,EAAKlG,OAAO,GAChCF,EAAIopN,GAAGC,KAAgB,KAATjjN,EAAcA,EAAO,KAGrC,GAAa,QAATA,EAAgB,YAvBgBpG,IAAMopN,GAAK,GAAIC,EAAI,EA0BxD,OADGlZ,GAAQA,EAAK6jH,YAAWh0T,EAAMA,EAAI8F,MAAM,EAAGqqM,EAAK6jH,YAC5Ch0T,EAGR,SAAS46T,EAAapkS,EAAK25K,GAAQ,OAAOqvG,GAzC1C,SAAoBhxS,EAAG2hM,GACtB,OAAOA,EAAKjrL,MACX,IAAK,SAAU,OAAOy1S,EAAel9B,EAAOh/Q,OAAOjQ,GAAI2hM,GACvD,IAAK,SAAU,OAAOwqH,EAAensT,EAAG2hM,GACxC,IAAK,SAAU,OAAOwqH,EAAensT,EAAE3I,SAAS,UAAWsqM,GAC3D,IAAK,QAAS,OAAOwqH,EAAellB,GAAOjnS,GAAI2hM,GAEhD,MAAM,IAAI7oM,MAAM,qBAAuB6oM,EAAKjrL,MAkCU21S,CAAWrkS,EAAK25K,GAAOA,GAG9E,IACK2qH,EAKAC,EAkDL,MAAO,CACN5G,YA3DD,SAAyB39R,EAAK25K,GAAQ,OAAOwuG,GAAkBic,EAAapkS,EAAK25K,GAAOA,IA4DvFikH,SAAUwG,EACVvG,YA1DIyG,EAAa,SAAYr3T,EAAGu3T,EAAOt5S,EAAG9b,EAAGkG,GAC5CrI,EAAEmB,KAAKo2T,GACPv3T,EAAEmB,KAAK8c,EAAI,IAAM9b,GACjBnC,EAAEmB,KAAK,IAAMkH,EAAEuF,QAAQ,KAAK,MAAQ,MAEjC0pT,EAAa,SAAYt3T,EAAGyhB,EAAMxD,EAAG5V,GACxCrI,EAAEmB,KAAKsgB,EAAO,IAAMxD,GACpBje,EAAEmB,KAAa,GAARsgB,EAAY,IAAMpZ,EAAEuF,QAAQ,KAAK,MAAQ,IAAMvF,IAEhD,SAAsBwnN,GAC5B,IACuC5xG,EADnCj+G,EAAI,GACJiF,EAAI41S,GAAkBhrF,EAAG,SACzBngG,EAAQ9yH,MAAMC,QAAQgzN,GAC1BwnG,EAAWr3T,EAAG,QAAS,EAAG,EAAG,WAC7Bq3T,EAAWr3T,EAAG,UAAW,EAAGiF,EAAEmvB,EAAEnvB,EAAIA,EAAEoD,EAAEpD,EAAI,EAAE,IAC9CoyT,EAAWr3T,EAAG,SAAU,EAAGiF,EAAEmvB,EAAEjpB,EAAIlG,EAAEoD,EAAE8C,EAAI,EAAE,IAC7CksT,EAAWr3T,EAAG,OAAQ,EAAG,EAAE,IAC3B,IAAI,IAAI2lN,EAAI1gN,EAAEoD,EAAEpD,EAAG0gN,GAAK1gN,EAAEmvB,EAAEnvB,IAAK0gN,EAAG,CACnC2xG,EAAWt3T,GAAI,EAAG,EAAG,OACrB,IAAI,IAAI4lN,EAAI3gN,EAAEoD,EAAE8C,EAAGy6M,GAAK3gN,EAAEmvB,EAAEjpB,IAAKy6M,EAAG,CACnC,IAAIl8B,EAAQqwH,GAAY,CAAC90S,EAAE0gN,EAAEx6M,EAAEy6M,IAE/B,GADA3nG,EAAOyR,GAASmgG,EAAGlK,IAAI,IAAIC,GAAKiK,EAAGnmC,GAEnC,OAAOzrE,EAAKpwG,GACX,IAAK,IACJ,IAAIjJ,EAAeq5G,EAAKpvD,EACpBjqD,GAAiB,MAAVq5G,EAAKhgG,IAAWrZ,EAAMq5G,EAAKhgG,GAC5B,MAAPrZ,EACWq5G,EAAK56G,IAAM46G,EAAK0zJ,EAAG2lD,EAAWt3T,EAAG,EAAG,EAAG,IAAMi+G,EAAK56G,GAC1Di0T,EAAWt3T,EAAG,EAAG,EAAG,IAErBs3T,EAAWt3T,EAAG,EAAG4E,EAAK,KAC3B,MACD,IAAK,IACJ0yT,EAAWt3T,EAAG,EAAGi+G,EAAKhgG,EAAI,EAAI,EAAGggG,EAAKhgG,EAAI,OAAS,SACnD,MACD,IAAK,IACJq5S,EAAWt3T,EAAG,EAAG,EAAeuJ,MAAM00G,EAAKhgG,GAAMggG,EAAKhgG,EAAI,KAAOggG,EAAKhgG,EAAI,KAC1E,MACD,IAAK,IACAggG,EAAKpvD,IAAGovD,EAAKpvD,EAAI+rO,EAAI9gQ,OAAOmkF,EAAK8C,GAAK65K,EAAIn4B,OAAO,IAAK4uC,EAAQS,EAAU7zL,EAAKhgG,MACtEq5S,EAAWt3T,EAAG,EAAGi+G,EAAKpvD,EAAG,KAEpC,MACD,QAASyoQ,EAAWt3T,EAAG,EAAG,EAAG,SAtBlBs3T,EAAWt3T,EAAG,EAAG,EAAG,KA8BlC,OAJAs3T,EAAWt3T,GAAI,EAAG,EAAG,OAEZA,EAAEgO,KADF,WA/FF,GA4GNwpT,GAAM,WAET,SAAS18S,EAAOzS,GAAK,OAAOA,EAAEuF,QAAQ,MAAO,OAAOA,QAAQ,KAAM,OAAOA,QAAQ,MAAM,OA2BvF,SAAS6pT,EAAa1sT,EAAG2hM,GAAQ,OAAOqvG,GAzBxC,SAAoBhpR,EAAK25K,GAExB,IADA,IAAImN,EAAU9mL,EAAIzlB,MAAM,MAAOq4M,GAAK,EAAGC,GAAK,EAAGi6E,EAAK,EAAGtjS,EAAM,GACtDsjS,IAAOhmF,EAAQp9M,SAAUojS,EAAI,CACnC,IAAIlvC,EAAS92C,EAAQgmF,GAAI1sQ,OAAO7lB,MAAM,KACtC,GAAiB,SAAdqjP,EAAO,GAAV,CACA,IAAIi1C,EAAO2U,GAAY5pD,EAAO,IAC9B,GAAGp0P,EAAIE,QAAUmpS,EAAK3gS,EAAG,IAAI0gN,EAAIppN,EAAIE,OAAQkpN,GAAKigF,EAAK3gS,IAAK0gN,EAAOppN,EAAIopN,KAAIppN,EAAIopN,GAAK,IAEpF,OADAA,EAAIigF,EAAK3gS,EAAG2gN,EAAIggF,EAAKz6R,EACdwlP,EAAO,IACb,IAAK,IAAKp0P,EAAIopN,GAAGC,GAAY+qC,EAAO,GAZT/iP,QAAQ,OAAO,MAAMA,QAAQ,OAAO,KAAKA,QAAQ,OAAO,MAY1C,MACzC,IAAK,IAAKrR,EAAIopN,GAAGC,IAAM+qC,EAAO,GAAI,MAClC,IAAK,MAAO,IAAI0gE,EAAK1gE,EAAOA,EAAOl0P,OAAS,GAE5C,IAAK,MACJ,OAAOk0P,EAAO,IACb,IAAK,KAAMp0P,EAAIopN,GAAGC,MAAM+qC,EAAO,GAAmB,MAClD,QAASp0P,EAAIopN,GAAGC,IAAM+qC,EAAO,GAEd,OAAbA,EAAO,KAAap0P,EAAIopN,GAAGC,GAAK,CAACrpN,EAAIopN,GAAGC,GAAIyrG,MAIlD,OADG3kH,GAAQA,EAAK6jH,YAAWh0T,EAAMA,EAAI8F,MAAM,EAAGqqM,EAAK6jH,YAC5Ch0T,EAG6Cm7T,CAAW3sT,EAAG2hM,GAAOA,GAG1E,IAAIoN,EAAS,CACZ,yBACA,oBACA,4EACC9rM,KAAK,MAEH2Q,EAAM,CACT,qCACA,2CACC3Q,KAAK,MAAQ,KAGXuiO,EAAO,CACV,wCACA,cACCviO,KAAK,MAEH0Q,EAAM,uCAEV,SAASi5S,EAAkB9nG,GAC1B,IAAIA,IAAOA,EAAG,QAAS,MAAO,GAI9B,IAHA,IAAqB5xG,EAAjBj+G,EAAI,GAAI+3S,EAAK,GAAUruH,EAAQ,GAC/BzkL,EAAIw1S,GAAa5qF,EAAG,SACpBngG,EAAQ9yH,MAAMC,QAAQgzN,GAClBlK,EAAI1gN,EAAEoD,EAAEpD,EAAG0gN,GAAK1gN,EAAEmvB,EAAEnvB,IAAK0gN,EAChC,IAAI,IAAIC,EAAI3gN,EAAEoD,EAAE8C,EAAGy6M,GAAK3gN,EAAEmvB,EAAEjpB,IAAKy6M,EAGhC,GAFAl8B,EAAQqwH,GAAY,CAAC90S,EAAE0gN,EAAEx6M,EAAEy6M,KAC3B3nG,EAAOyR,GAASmgG,EAAGlK,IAAI,IAAIC,GAAKiK,EAAGnmC,KACb,MAAVzrE,EAAKhgG,GAAwB,MAAXggG,EAAKpwG,EAAnC,CAEA,OADAkqS,EAAK,CAAC,OAAQruH,EAAO,KACdzrE,EAAKpwG,GACX,IAAK,IAAK,IAAK,MAAOkqS,EAAG52S,KAAK2Z,EAAOmjG,EAAKhgG,IAAK,MAC/C,IAAK,IACAggG,EAAK56G,GACF00S,EAAG,GAAG,MAAOA,EAAG,GAAG,IAAKA,EAAG,GAAG95L,EAAKhgG,EAAG85R,EAAG,GAAGj9R,EAAOmjG,EAAK56G,KADjD00S,EAAG,GAAG,IAAKA,EAAG,GAAG95L,EAAKhgG,GAEpC,MACD,IAAK,IACJ85R,EAAG,GAAK,MAAM95L,EAAK56G,EAAE,IAAI,KAAM00S,EAAG,GAAG,KAAMA,EAAG,GAAG95L,EAAKhgG,EAAE,IAAI,IAC5D85R,EAAG,GAAKj9R,EAAOmjG,EAAK56G,IAAI46G,EAAKhgG,EAAE,OAAO,UACtC,MACD,IAAK,IACJ,IAAIpQ,EAAIwjS,EAAQS,EAAU7zL,EAAKhgG,IAC/B85R,EAAG,GAAK,MAAOA,EAAG,GAAK,KAAMA,EAAG,GAAK,GAAGlqS,EACxCkqS,EAAG,GAAK95L,EAAKpvD,GAAK+rO,EAAI9gQ,OAAOmkF,EAAK8C,GAAK65K,EAAIn4B,OAAO,IAAK50P,GACvD,MACD,IAAK,IAAK,SAEX7N,EAAEmB,KAAK42S,EAAG/pS,KAAK,MAMjB,OAHAhO,EAAEmB,KAAK,YAAc8D,EAAEmvB,EAAEjpB,EAAElG,EAAEoD,EAAE8C,EAAE,GAAK,OAASlG,EAAEmvB,EAAEnvB,EAAEA,EAAEoD,EAAEpD,EAAE,GAAK,UAChEjF,EAAEmB,KAAK,2BAEAnB,EAAEgO,KAAK,MAQf,MAAO,CACN0iT,YAhED,SAAyB3lT,EAAG2hM,GAAQ,OAAOwuG,GAAkBuc,EAAa1sT,EAAG2hM,GAAOA,IAiEnFikH,SAAU8G,EACV7G,WARD,SAAsB/gG,GACrB,MAAO,CAAC/V,EAAQn7L,EAAK4xN,EAAM5xN,EAAKg5S,EAAkB9nG,GAAKnxM,GAAK1Q,KAAK,QAzFzD,GAoGN4pT,GAAM,WACT,SAASC,EAAal1T,EAAMpG,EAAKopN,EAAGC,EAAG5lN,GACnCA,EAAEo9P,IAAK7gQ,EAAIopN,GAAGC,GAAKjjN,EACL,SAATA,EAAiBpG,EAAIopN,GAAGC,IAAK,EACpB,UAATjjN,EAAkBpG,EAAIopN,GAAGC,IAAK,EACrB,KAATjjN,IACC4G,MAAM2oS,GAASvvS,IACf4G,MAAM6oS,GAAUzvS,GAAMu/M,WAC1B3lN,EAAIopN,GAAGC,GAAKjjN,EAD0BpG,EAAIopN,GAAGC,GAAKksF,EAAUnvS,GADjCpG,EAAIopN,GAAGC,GAAKssF,GAASvvS,IAgCtD,IAAIm1T,EAAa,CAClB,GAAM,IACN,EAAM,KACN,GAAM,KAIDC,EAAoB,CACzB,GAAM,EACN,EAAM,EACN,GAAM,GA2BL,SAASC,EAAiBjlS,EAAK25K,GAC9B,IAAI1sM,EAAI0sM,GAAQ,GACZ/tL,EAAM,GAENkxM,EAAK7vN,EAAE0vH,MAAQ,GAAO,GACtBr6D,EAAQ,CAAEhtD,EAAG,CAAC8C,EAAE,EAAGlG,EAAE,GAAImvB,EAAG,CAACjpB,EAAE,EAAGlG,EAAE,IAEnB,QAAlB8tB,EAAI1wB,MAAM,EAAE,GAEU,IAArB0wB,EAAI4H,WAAW,IAAiC,IAArB5H,EAAI4H,WAAW,IAC5Chc,EAAMoU,EAAIs9G,OAAO,GAAIt9G,EAAMA,EAAI1wB,MAAM,IAGT,IAArB0wB,EAAI4H,WAAW,IAAiC,IAArB5H,EAAI4H,WAAW,KAEjDhc,EAAMoU,EAAIs9G,OAAO,GAAIt9G,EAAMA,EAAI1wB,MAAM,IAGlCsc,EA1CN,SAAmBoU,GAElB,IADA,IAAIw0Q,EAAM,GAAI0wB,GAAQ,EAAOv5S,EAAM,EAAG0gR,EAAK,EACtC1gR,EAAMqU,EAAIt2B,SAASiiB,EACQ,KAA3B0gR,EAAGrsQ,EAAI4H,WAAWjc,IAAeu5S,GAASA,GACrCA,GAAS74B,KAAM04B,IAAYvwB,EAAInI,IAAOmI,EAAInI,IAAK,GAAG,GAI5D,IAAI1gR,KADJ0gR,EAAK,GACMmI,EAAUvoS,OAAOI,UAAUyC,eAAe/B,KAAKynS,EAAK7oR,IAC9D0gR,EAAGj+R,KAAK,CAAEomS,EAAI7oR,GAAMA,IAGrB,IAAM0gR,EAAG3iS,OAER,IAAIiiB,KADJ6oR,EAAMwwB,EACe/4T,OAAOI,UAAUyC,eAAe/B,KAAKynS,EAAK7oR,IAC9D0gR,EAAGj+R,KAAK,CAAEomS,EAAI7oR,GAAMA,IAMtB,OAFA0gR,EAAGv2R,MAAK,SAAS9D,EAAGC,GAAK,OAAOD,EAAE,GAAKC,EAAE,IAAM+yT,EAAkBhzT,EAAE,IAAMgzT,EAAkB/yT,EAAE,OAEtF8yT,EAAW14B,EAAG9zQ,MAAM,IAqBhB4sS,CAAUnlS,EAAI1wB,MAAM,EAAE,OACjC,IAAIsjN,EAAI,EAAGC,EAAI,EAAG3nM,EAAI,EAClBzT,EAAQ,EAAGkU,EAAM,EAAGy5S,EAAQx5S,EAAIgc,WAAW,GAAIs9R,GAAQ,EAAO74B,EAAG,EACrErsQ,EAAMA,EAAInlB,QAAQ,SAAU,MAC5B,IAp3MoBy0R,EACjBrE,EAm3MCo6B,EAAkB,MAAZp4T,EAAEqiS,QAl3MbrE,GADIA,EAAuB,iBADNqE,EAo3MsBriS,EAAEqiS,QAn3MPzH,EAAIn4B,OAAO4/B,GAAUA,GACjDz0R,QAAQq1R,EAAa,UACxB,IAAIr6M,OAAO,IAAMo1M,EAAM,MAi3MyB,KACtD,SAASq6B,IACR,IAAIhwT,EAAI0qB,EAAI1wB,MAAMmI,EAAOkU,GACrBu/F,EAAO,GAEX,GADkB,KAAf51G,EAAEgoI,OAAO,IAAuC,KAA1BhoI,EAAEgoI,OAAOhoI,EAAE5L,OAAS,KAAW4L,EAAIA,EAAEhG,MAAM,GAAG,GAAGuL,QAAQ,MAAM,MACxE,IAAbvF,EAAE5L,OAAcwhH,EAAKpwG,EAAI,SACvB,GAAG7N,EAAEo9P,IAAOn/I,EAAKpwG,EAAI,IAAKowG,EAAKhgG,EAAI5V,OACnC,GAAuB,IAApBA,EAAE8qB,OAAO12B,OAAgBwhH,EAAKpwG,EAAI,IAAKowG,EAAKhgG,EAAI5V,OACnD,GAAsB,IAAnBA,EAAEsyB,WAAW,GACE,IAAnBtyB,EAAEsyB,WAAW,IAA4C,IAA9BtyB,EAAEsyB,WAAWtyB,EAAE5L,OAAS,IAAcwhH,EAAKpwG,EAAI,IAAKowG,EAAKhgG,EAAI5V,EAAEhG,MAAM,GAAG,GAAGuL,QAAQ,MAAM,MAoyF3G,GAnyFMvF,EAmyFhB5L,QAnyFsBwhH,EAAKpwG,EAAI,IAAKowG,EAAK56G,EAAIgF,EAAEhG,MAAM,KAChD47G,EAAKpwG,EAAI,IAAKowG,EAAKhgG,EAAI5V,QAC1B,GAAQ,QAALA,EAAe41G,EAAKpwG,EAAI,IAAKowG,EAAKhgG,GAAI,OACzC,GAAQ,SAAL5V,EAAgB41G,EAAKpwG,EAAI,IAAKowG,EAAKhgG,GAAI,OAC1C,GAAI1U,MAAM0U,EAAIi0R,GAAS7pS,IACvB,IAAIkB,MAAM6oS,GAAU/pS,GAAG65M,YAAck2G,GAAO/vT,EAAEm9B,MAAM4yR,GAAM,CAC9Dn6M,EAAK8C,EAAI/gH,EAAEqiS,QAAUzH,EAAIn4B,OAAO,IAChC,IAAIlgP,EAAI,EACL61S,GAAO/vT,EAAEm9B,MAAM4yR,KAAO/vT,EAj4M7B,SAAoB0qB,EAAKsvQ,EAAQ78P,GAChC,IAAI8yR,GAAK,EAAGnkS,GAAK,EAAGppB,GAAK,EAAG2xR,GAAK,EAAGtwN,GAAK,EAAG2nL,GAAK,GAChDsuC,EAAO78P,MAAMy9P,IAAc,IAAIj5R,SAAQ,SAAS7H,EAAGzF,GACnD,IAAIuhB,EAAImlF,SAAS59D,EAAM9oC,EAAE,GAAI,IAC7B,OAAOyF,EAAEqL,cAAc6iI,OAAO,IAC7B,IAAK,IAAKioL,EAAIr6S,EAAG,MAAO,IAAK,IAAKlT,EAAIkT,EAAG,MACzC,IAAK,IAAKy+Q,EAAIz+Q,EAAG,MAAO,IAAK,IAAK81O,EAAI91O,EAAG,MACzC,IAAK,IAAQy+Q,GAAK,EAAGtwN,EAAInuD,EAAQkW,EAAIlW,MAGpC81O,GAAK,IAAW,GAAN3nL,GAAWj4C,GAAK,IAAKi4C,EAAIj4C,EAAGA,GAAK,GAC9C,IAAIokS,GAAY,IAAMD,GAAG,EAAEA,GAAG,IAAI5kS,MAAOuuL,gBAAgB5/M,OAAO,GAAK,KAAO,MAAQ8xB,GAAG,EAAEA,EAAE,IAAI9xB,OAAO,GAAK,KAAO,MAAQ0I,GAAG,EAAEA,EAAE,IAAI1I,OAAO,GACvH,GAAlBk2T,EAAQ97T,SAAa87T,EAAU,IAAMA,GACnB,GAAlBA,EAAQ97T,SAAa87T,EAAU,KAAOA,GACzC,IAAIC,GAAY,MAAQ97B,GAAG,EAAEA,EAAE,IAAIr6R,OAAO,GAAK,KAAO,MAAQ+pE,GAAG,EAAEA,EAAE,IAAI/pE,OAAO,GAAK,KAAO,MAAQ0xP,GAAG,EAAEA,EAAE,IAAI1xP,OAAO,GACtH,OAAS,GAANq6R,IAAiB,GAANtwN,IAAiB,GAAN2nL,EAAgBwkE,GAChC,GAAND,IAAiB,GAANnkS,IAAiB,GAANppB,EAAgBytT,EAClCD,EAAU,IAAMC,EAg3MOC,CAAWpwT,EAAGrI,EAAEqiS,OAASh6R,EAAEm9B,MAAM4yR,IAAM,IAAM71S,EAAE,GACvEviB,EAAE87S,WAAa79L,EAAKpwG,EAAI,IAAKowG,EAAKhgG,EAAI6zR,EAAUzpS,EAAGka,KAC/C07F,EAAKpwG,EAAI,IAAKowG,EAAKhgG,EAAIozR,EAAQS,EAAUzpS,EAAGka,MACjC,IAAfviB,EAAE04T,WAAoBz6M,EAAKpvD,EAAI+rO,EAAI9gQ,OAAOmkF,EAAK8C,EAAG9C,EAAKhgG,aAAayV,KAAO29Q,EAAQpzL,EAAKhgG,GAAGggG,EAAKhgG,IAC/Fje,EAAE24T,eAAe16M,EAAK8C,OAE1B9C,EAAKpwG,EAAI,IACTowG,EAAKhgG,EAAI5V,OAXyB41G,EAAKpwG,EAAI,KAAuB,IAAf7N,EAAE04T,WAAoBz6M,EAAKpvD,EAAIxmD,GAAG41G,EAAKhgG,EAAIA,EAmB/F,GANa,KAAVggG,EAAKpwG,IACA7N,EAAE0vH,OAAamgG,EAAGlK,KAAIkK,EAAGlK,GAAK,IAAIkK,EAAGlK,GAAGC,GAAK3nG,GAChD4xG,EAAGkqF,GAAY,CAAC5uS,EAAEy6M,EAAE3gN,EAAE0gN,KAAO1nG,GAClCzzG,EAAQkU,EAAI,EACT22C,EAAMjhC,EAAEjpB,EAAIy6M,IAAGvwJ,EAAMjhC,EAAEjpB,EAAIy6M,GAC3BvwJ,EAAMjhC,EAAEnvB,EAAI0gN,IAAGtwJ,EAAMjhC,EAAEnvB,EAAI0gN,GAC3By5E,GAAM+4B,IAASvyG,OAAsB,GAAZA,EAAI,IAAKD,EAAM3lN,EAAEuwT,WAAavwT,EAAEuwT,WAAa5qG,EAAG,OAAO,EAEpFuB,EAAO,KAAKxoM,EAAMqU,EAAIt2B,SAASiiB,EAAK,OAAQ0gR,EAAGrsQ,EAAI4H,WAAWjc,IAC7D,KAAK,GAAMu5S,GAASA,EAAO,MAC3B,KAAKE,EAAO,KAAK,GAAM,KAAK,GAAM,IAAIF,GAASI,IAAe,MAAMnxG,EAMrE,OAHGxoM,EAAMlU,EAAQ,GAAG6tT,IAEpBxoG,EAAG,QAAU6qF,GAAarlP,GACnBw6J,EAUR,SAAS+oG,EAAa7tT,EAAG2hM,GACxB,IAAI35K,EAAM,GAAIhpB,EAAqB,UAAb2iM,EAAKjrL,KAAmB,CAAC,EAAE,EAAE,EAAE,GAAKo3S,GAAU9tT,EAAG2hM,GACvE,OAAOA,EAAKjrL,MACX,IAAK,SAAUsR,EAAMinQ,EAAOh/Q,OAAOjQ,GAAI,MACvC,IAAK,SAAUgoB,EAAMhoB,EAAG,MACxB,IAAK,SACuBgoB,EAAP,OAAjB25K,EAAKmkH,SAAyB9lT,EAAE3I,SAAS,QACpCsqM,EAAKmkH,UAA+B,oBAAZ5hD,QAA+BA,QAAQ/hE,MAAMlyL,OAAO0xL,EAAKmkH,SAAU9lT,GACxFA,EAAE3I,SAAS,UACtB,MACD,IAAK,QAAS2wB,EAAMi/Q,GAAOjnS,GAAI,MAC/B,IAAK,SAAUgoB,EAAMhoB,EAAG,MACxB,QAAS,MAAM,IAAIlH,MAAM,qBAAuB6oM,EAAKjrL,MAItD,OAFe,KAAZ1X,EAAM,IAA0B,KAAZA,EAAM,IAA0B,KAAZA,EAAM,GAAYgpB,EAAM4hR,GAAS5hR,EAAI1wB,MAAM,IAChE,UAAbqqM,EAAKjrL,MAAwC,oBAAZwtP,SAA2BviE,EAAKmkH,WAAW99R,EAAMk8O,QAAQ/hE,MAAMlyL,OAAO0xL,EAAKmkH,SAAU5hD,QAAQ/hE,MAAMpyL,OAAO,KAAKiY,KACnI,uBAAnBA,EAAI1wB,MAAM,EAAE,IAAqCm1T,GAAI7G,SAAsB,UAAbjkH,EAAKjrL,KAAmBsR,EAAM4hR,GAAS5hR,GAAM25K,GAvB/G,SAA0B35K,EAAK25K,GAC9B,OAAKA,GAAQA,EAAKkrH,IACG,QAAlB7kS,EAAI1wB,MAAM,EAAE,IACZ0wB,EAAI1D,QAAQ,OAAS,GAAK0D,EAAI1D,QAAQ,MAAQ,GAAK0D,EAAI1D,QAAQ,MAAQ,EADtC2oS,EAAiBjlS,EAAK25K,GAEnDqvG,GAxIR,SAAwB14S,EAAGqpM,GAC1B,IAAI1sM,EAAI0sM,GAAQ,GACZnwM,EAAM,GACV,IAAI8G,GAAkB,IAAbA,EAAE5G,OAAc,OAAOF,EAGhC,IAFA,IAAImhB,EAAQra,EAAEiK,MAAM,UAChBm7O,EAAI/qO,EAAMjhB,OAAS,EACjBgsP,GAAK,GAAyB,IAApB/qO,EAAM+qO,GAAGhsP,UAAgBgsP,EAGzC,IAFA,IAAIj+O,EAAQ,GAAI++G,EAAM,EAClBo8F,EAAI,EACFA,GAAK8iC,IAAK9iC,GAEJ,IADXp8F,EAAM7rG,EAAMioM,GAAGt2L,QAAQ,MACTk6F,EAAM7rG,EAAMioM,GAAGlpN,OAAa8sH,IAC1C/+G,EAAQtG,KAAKQ,IAAI8F,EAAO++G,GAEzB,IAAIo8F,EAAI,EAAGA,GAAK8iC,IAAK9iC,EAAG,CACvBppN,EAAIopN,GAAK,GAET,IAAIC,EAAI,EAER,IADAiyG,EAAan6S,EAAMioM,GAAGtjN,MAAM,EAAGmI,GAAO2oB,OAAQ52B,EAAKopN,EAAGC,EAAG5lN,GACrD4lN,EAAI,EAAGA,IAAMloM,EAAMioM,GAAGlpN,OAAS+N,GAAO,GAAK,IAAKo7M,EACnDiyG,EAAan6S,EAAMioM,GAAGtjN,MAAMmI,EAAY,IAALo7M,EAAE,GAAMp7M,EAAQ,GAAFo7M,GAAMzyL,OAAO52B,EAAIopN,EAAEC,EAAE5lN,GAGxE,OADGA,EAAEuwT,YAAWh0T,EAAMA,EAAI8F,MAAM,EAAGrC,EAAEuwT,YAC9Bh0T,EAiHau8T,CAAe/lS,EAAK25K,GAAOA,GAHhBsrH,EAAiBjlS,EAAK25K,GAuB9CqsH,CAAiBhmS,EAAK25K,GAwB9B,MAAO,CACNgkH,YAtBD,SAAyB3lT,EAAG2hM,GAAQ,OAAOwuG,GAAkB0d,EAAa7tT,EAAG2hM,GAAOA,IAuBnFikH,SAAUiI,EACVhI,WAtBD,SAAsB/gG,GAIrB,IAHA,IACuC5xG,EADnCj+G,EAAI,GACJiF,EAAI41S,GAAkBhrF,EAAG,SACzBngG,EAAQ9yH,MAAMC,QAAQgzN,GAClBlK,EAAI1gN,EAAEoD,EAAEpD,EAAG0gN,GAAK1gN,EAAEmvB,EAAEnvB,IAAK0gN,EAAG,CAEnC,IADA,IAAIoyF,EAAK,GACDnyF,EAAI3gN,EAAEoD,EAAE8C,EAAGy6M,GAAK3gN,EAAEmvB,EAAEjpB,IAAKy6M,EAAG,CACnC,IAAIl8B,EAAQqwH,GAAY,CAAC90S,EAAE0gN,EAAEx6M,EAAEy6M,IAE/B,IADA3nG,EAAOyR,GAASmgG,EAAGlK,IAAI,IAAIC,GAAKiK,EAAGnmC,KACb,MAAVzrE,EAAKhgG,EAAjB,CAEA,IADA,IAAI4wC,GAAKovD,EAAKpvD,IAAMisP,GAAY78L,GAAOA,EAAKpvD,IAAM,IAAIxsD,MAAM,EAAE,IACxDwsD,EAAEpyD,OAAS,IAAIoyD,GAAK,IAC1BkpP,EAAG52S,KAAK0tD,GAAW,IAAN+2J,EAAU,IAAM,UAHCmyF,EAAG52S,KAAK,cAKvCnB,EAAEmB,KAAK42S,EAAG/pS,KAAK,KAEhB,OAAOhO,EAAEgO,KAAK,QA5LN,GAoNNgrT,GAAM,WA0BT,SAASC,EAAsBluT,EAAG2hM,GACjC,IAAI3hM,EAAG,OAAOA,EACd,IAAI/K,EAAI0sM,GAAQ,GAEZrkM,EAAMrI,EAAE0vH,MAAQ,GAAK,GAAMvtH,EAAI,SAAU+2T,EAAO,EAChD/d,EAAS,GAAIge,EAAS,CAACh3T,GAEvBi3T,EAAW,CAAC/wT,EAAG,CAACpD,EAAE,EAAGkG,EAAE,GAAIipB,EAAG,CAACnvB,EAAE,EAAGkG,EAAE,IACtColT,EAAYvwT,EAAEuwT,WAAa,EAE/B,GAAW,GAARxlT,EAAE,GAAY/K,EAAEq5T,KAAOC,OACrB,GAAW,IAARvuT,EAAE,GAAY/K,EAAEq5T,KAAOE,MAC1B,IAAW,IAARxuT,EAAE,GACL,MAAM,IAAIlH,MAAM,0BAA4BkH,EAAE,IAD3B/K,EAAEq5T,KAAOE,EAASv5T,EAAEw5T,MAAO,EAAMzuT,EAAE4S,EAAI,EA0D/D,OA/FD,SAAqBhb,EAAMg2S,EAAIjsG,GAC9B,GAAI/pM,EAAJ,CACAkhS,GAAUlhS,EAAMA,EAAKgb,GAAK,GAE1B,IADA,IAAI07S,EAAO3sH,EAAK2sH,MAAQC,EAClB32T,EAAKgb,EAAIhb,EAAKlG,QAAQ,CAC3B,IAAIq8S,EAAKn2S,EAAKmhS,WAAW,GACrBn+E,EAAI0zG,EAAKvgB,IAAOugB,EAAK,KACrB58T,EAASkG,EAAKmhS,WAAW,GACzBC,EAAMphS,EAAKgb,EAAIlhB,EACfsO,GAAK46M,EAAEtiN,GAAGo1S,IAAW91S,EAAMlG,EAAQiwM,GAEvC,GADA/pM,EAAKgb,EAAIomR,EACN4U,EAAG5tS,EAAG46M,EAAExjN,EAAG22S,GAAK,SA4BpB2gB,CAAY1uT,GAAG,SAASnG,EAAK80T,EAAI5gB,GAChC,GAAW,GAAR/tS,EAAE,GAAY,OAAO+tS,GACvB,KAAK,EACJ94S,EAAE25T,KAAO/0T,EACNA,GAAO,OAAQ5E,EAAEw5T,MAAO,GAC3B,MACD,KAAK,EAAMJ,EAAWx0T,EAAK,MAC3B,KAAK,GACA5E,EAAEw5T,OAAM50T,EAAI,GAAGqZ,EAAIrZ,EAAI,GAAGqZ,EAAE5b,MAAM,IAEvC,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GAEK,IAANy2S,GAAiC,MAAT,IAATl0S,EAAI,MAAgC,GAATA,EAAI,IAAa,IAAe,GAATA,EAAI,IAAa,KACpFA,EAAI,GAAGm8G,EAAI/gH,EAAEqiS,QAAUzH,EAAIn4B,OAAO,IAC/BziQ,EAAE87S,YAAal3S,EAAI,GAAGiJ,EAAI,IAAKjJ,EAAI,GAAGqZ,EAAIuzR,EAAQ5sS,EAAI,GAAGqZ,KAE1Dje,EAAE0vH,OACArnH,EAAEzD,EAAI,GAAGK,KAAIoD,EAAEzD,EAAI,GAAGK,GAAK,IAC/BoD,EAAEzD,EAAI,GAAGK,GAAGL,EAAI,GAAGuG,GAAKvG,EAAI,IACtByD,EAAE0xS,GAAYn1S,EAAI,KAAOA,EAAI,QAE/B,OAAOk0S,GACb,KAAK,GACJl0S,EAAI,GAAGqZ,EAAIrZ,EAAI,GAAGqZ,EAAE5b,MAAM,GAE3B,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GACL,KAAK,GASJ,GARGuC,EAAI,GAAKs0T,IACX7wT,EAAE,QAAUqyS,GAAa0e,GACzBje,EAAOh5S,GAAKkG,EACZA,EAAKrI,EAAE0vH,MAAQ,GAAK,GACpB0pM,EAAW,CAAC/wT,EAAG,CAACpD,EAAE,EAAGkG,EAAE,GAAIipB,EAAG,CAACnvB,EAAE,EAAGkG,EAAE,IACtC+tT,EAAOt0T,EAAI,GAAIzC,EAAI,SAAW+2T,EAAO,GACrCC,EAAOh4T,KAAKgB,IAEVouT,EAAY,GAAK3rT,EAAI,GAAGK,GAAKsrT,EAAW,MACxCvwT,EAAE0vH,OACArnH,EAAEzD,EAAI,GAAGK,KAAIoD,EAAEzD,EAAI,GAAGK,GAAK,IAC/BoD,EAAEzD,EAAI,GAAGK,GAAGL,EAAI,GAAGuG,GAAKvG,EAAI,IACtByD,EAAE0xS,GAAYn1S,EAAI,KAAOA,EAAI,GACjCw0T,EAAShlS,EAAEjpB,EAAIvG,EAAI,GAAGuG,IAAGiuT,EAAShlS,EAAEjpB,EAAIvG,EAAI,GAAGuG,GAC/CiuT,EAAShlS,EAAEnvB,EAAIL,EAAI,GAAGK,IAAGm0T,EAAShlS,EAAEnvB,EAAIL,EAAI,GAAGK,MAIlDjF,GAEHqI,EAAE,QAAUqyS,GAAa0e,GACzBje,EAAOh5S,GAAKkG,EACL,CAAEq9M,WAAYyzG,EAAQ1zG,OAAO01F,GAarC,SAASye,EAAW/9C,EAAMp/Q,EAAQiwM,GACjC,IAAI1sM,EAAI,CAAC,CAACmL,EAAE,EAAElG,EAAE,GAAI,CAAC4I,EAAE,IAAIoQ,EAAE,GAAI,GAUjC,OATGyuL,EAAK8sH,MAAqB,OAAb9sH,EAAKitH,MACpB35T,EAAE,GAAGmL,EAAI0wQ,EAAKioB,WAAW,GACzBjoB,EAAKl+P,IACL3d,EAAE,GAAGiF,EAAI42Q,EAAKioB,WAAW,GACzBjoB,EAAKl+P,GAAG,IAER3d,EAAE,GAAK67Q,EAAKioB,WAAW,GACvB9jS,EAAE,GAAGmL,EAAI0wQ,EAAKioB,WAAW,GAAI9jS,EAAE,GAAGiF,EAAI42Q,EAAKioB,WAAW,IAEhD9jS,EAGR,SAAS65T,EAAYh+C,EAAMp/Q,EAAQiwM,GAClC,IAAIq3F,EAAMloB,EAAKl+P,EAAIlhB,EACfuD,EAAI45T,EAAW/9C,EAAMp/Q,EAAQiwM,GAEjC,GADA1sM,EAAE,GAAG6N,EAAI,IACO,OAAb6+L,EAAKitH,KAAgB,CACvB99C,EAAKl+P,IACL,IAAInhB,EAAMq/Q,EAAKioB,WAAW,GAE1B,OADA9jS,EAAE,GAAGie,EAAI49P,EAAKioB,WAAWtnS,EAAK,QACvBwD,EAIR,OAFG0sM,EAAK8sH,MAAM39C,EAAKl+P,IACnB3d,EAAE,GAAGie,EAAI49P,EAAKioB,WAAWC,EAAMloB,EAAKl+P,EAAG,QAChC3d,EA4BR,SAAS85T,EAAaj+C,GACrB,IAAI77Q,EAAI,CAAC,CAACmL,EAAE,EAAElG,EAAE,GAAI,CAAC4I,EAAE,IAAIoQ,EAAE,GAAI,GAEjC,OADAje,EAAE,GAAGiF,EAAI42Q,EAAKioB,WAAW,GAAI9jS,EAAE,GAAK67Q,EAAKA,EAAKl+P,KAAM3d,EAAE,GAAGmL,EAAI0wQ,EAAKA,EAAKl+P,KAChE3d,EA6BR,SAAS+5T,EAAgBl+C,EAAMp/Q,GAC9B,IAAIuD,EAAI85T,EAAaj+C,GACjB9qN,EAAK8qN,EAAKioB,WAAW,GACrB9yO,EAAK6qN,EAAKioB,WAAW,GACrB1vQ,EAAIynP,EAAKioB,WAAW,GACxB,GAAQ,OAAL1vQ,EAA2B,OAAZp0B,EAAE,GAAGie,EAAI,EAAUje,EACrC,IAAIqI,EAAQ,MAAJ+rB,EAER,OAFoBA,GAAO,MAAFA,GAAY,MACrCp0B,EAAE,GAAGie,GAAO,EAAF5V,EAAM,KAAO+rB,EAAI,EAAK48B,GAAM58B,EAAM48B,KAAQ58B,IAAOA,GAAK,GAAM28B,GAAO38B,EAAI,GAAQ28B,MAAS38B,EAAI,MAC/Fp0B,EAgBR,SAASg6T,EAAgBn+C,EAAMp/Q,GAC9B,IAAIuD,EAAI85T,EAAaj+C,GACjB9qN,EAAK8qN,EAAKioB,WAAW,EAAE,KAE3B,OADA9jS,EAAE,GAAGie,EAAI8yC,EACF/wD,EASR,IAAIs5T,EAAU,CACfjhC,EAAQ,CAAEl2R,EAAE,MAAOkB,EAAEgmT,IACrB,EAAQ,CAAElnT,EAAE,OACZ,EAAQ,CAAEA,EAAE,YACZ,EAAQ,CAAEA,EAAE,aACZ,EAAQ,CAAEA,EAAE,SACZ,EAAQ,CAAEA,EAAE,QACZ,EAAQ,CAAEA,EAAE,QAASkB,EA5IpB,SAAqBw4Q,GACpB,IAAI77Q,EAAI,CAACqI,EAAE,CAAC8C,EAAE,EAAElG,EAAE,GAAGmvB,EAAE,CAACjpB,EAAE,EAAElG,EAAE,IAM9B,OALAjF,EAAEqI,EAAE8C,EAAI0wQ,EAAKioB,WAAW,GACxB9jS,EAAEqI,EAAEpD,EAAI42Q,EAAKioB,WAAW,GACxB9jS,EAAEo0B,EAAEjpB,EAAI0wQ,EAAKioB,WAAW,GACxB9jS,EAAEo0B,EAAEnvB,EAAI42Q,EAAKioB,WAAW,GACZ,OAAT9jS,EAAEqI,EAAE8C,IAAanL,EAAEqI,EAAE8C,EAAInL,EAAEo0B,EAAEjpB,EAAInL,EAAEqI,EAAEpD,EAAIjF,EAAEo0B,EAAEnvB,EAAI,GAC7CjF,IAsIT,EAAQ,CAAEmC,EAAE,WACZ,EAAQ,CAAEA,EAAE,SACZ,EAAQ,CAAEA,EAAE,UACZ,GAAQ,CAAEA,EAAE,SACZ,GAAQ,CAAEA,EAAE,QACZ,GAAQ,CAAEA,EAAE,SACZ,GAAQ,CAAEA,EAAE,UAAWkB,EA5GtB,SAAuBw4Q,EAAMp/Q,EAAQiwM,GACpC,IAAI1sM,EAAI45T,EAAW/9C,EAAMp/Q,EAAQiwM,GAEjC,OADA1sM,EAAE,GAAGie,EAAI49P,EAAKioB,WAAW,EAAG,KACrB9jS,IA0GT,GAAQ,CAAEmC,EAAE,SAAUkB,EAvGrB,SAAsBw4Q,EAAMp/Q,EAAQiwM,GACnC,IAAI1sM,EAAI45T,EAAW/9C,EAAMp/Q,EAAQiwM,GAEjC,OADA1sM,EAAE,GAAGie,EAAI49P,EAAKioB,WAAW,EAAG,KACrB9jS,IAqGT,GAAQ,CAAEmC,EAAE,QAASkB,EAAEw2T,GACvB,GAAQ,CAAE13T,EAAE,UAAWkB,EAnGtB,SAAuBw4Q,EAAMp/Q,EAAQiwM,GACpC,IAAIq3F,EAAMloB,EAAKl+P,EAAIlhB,EACfuD,EAAI45T,EAAW/9C,EAAMp/Q,EAAQiwM,GAGjC,GADA1sM,EAAE,GAAGie,EAAI49P,EAAKioB,WAAW,EAAG,KACzBp3F,EAAK8sH,KAAM39C,EAAKl+P,EAAIomR,MAClB,CACJ,IAAI3C,EAAOvlB,EAAKioB,WAAW,GAC3BjoB,EAAKl+P,GAAKyjR,EAEX,OAAOphS,IA0FT,GAAQ,CAAEmC,EAAE,SACZ,GAAQ,CAAEA,EAAE,UACZ,GAAQ,CAAEA,EAAE,UACZ,GAAQ,CAAEA,EAAE,UACZ,GAAQ,CAAEA,EAAE,UACZ,GAAQ,CAAEA,EAAE,WACZ,GAAQ,CAAEA,EAAE,UACZ,GAAQ,CAAEA,EAAE,WACZ,GAAQ,CAAEA,EAAE,UACZ,GAAQ,CAAEA,EAAE,UACZ,GAAQ,CAAEA,EAAE,UACZ,GAAQ,CAAEA,EAAE,SACZ,GAAQ,CAAEA,EAAE,WACZ,GAAQ,CAAEA,EAAE,YACZ,GAAQ,CAAEA,EAAE,UACZ,GAAQ,CAAEA,EAAE,WACZ,GAAQ,CAAEA,EAAE,SACZ,GAAQ,CAAEA,EAAE,UACZ,GAAQ,CAAEA,EAAE,aACZ,GAAQ,CAAEA,EAAE,eACZ,GAAQ,CAAEA,EAAE,aACZ,GAAQ,CAAEA,EAAE,UACZ,GAAQ,CAAEA,EAAE,SAAUkB,EAAEw2T,GACxB,GAAQ,CAAE13T,EAAE,YACZ,GAAQ,CAAEA,EAAE,UACZ,GAAQ,CAAEA,EAAE,SACZ,GAAQ,CAAEA,EAAE,aACZ,GAAQ,CAAEA,EAAE,SACZ,GAAQ,CAAEA,EAAE,aACZ,GAAQ,CAAEA,EAAE,UACZ,GAAQ,CAAEA,EAAE,aACZ,GAAQ,CAAEA,EAAE,QACZ,GAAQ,CAAEA,EAAE,YACZ,GAAQ,CAAEA,EAAE,UACZ,GAAQ,CAAEA,EAAE,UACZ,GAAQ,CAAEA,EAAE,SACZ,GAAQ,CAAEA,EAAE,SACZ,GAAQ,CAAEA,EAAE,SACZ,GAAQ,CAAEA,EAAE,UACZ,GAAQ,CAAEA,EAAE,SACZ,IAAQ,CAAEA,EAAE,GAAIkB,EAAEo1S,KAGb8gB,EAAU,CACflhC,EAAQ,CAAEl2R,EAAE,OACZ,EAAQ,CAAEA,EAAE,OACZ,EAAQ,CAAEA,EAAE,MACZ,EAAQ,CAAEA,EAAE,MACZ,EAAQ,CAAEA,EAAE,MACZ,EAAQ,CAAEA,EAAE,MACZ,EAAQ,CAAEA,EAAE,MACZ,EAAQ,CAAEA,EAAE,MACZ,GAAQ,CAAEA,EAAE,MACZ,GAAQ,CAAEA,EAAE,MACZ,GAAQ,CAAEA,EAAE,MACZ,GAAQ,CAAEA,EAAE,MACZ,GAAQ,CAAEA,EAAE,MACZ,GAAQ,CAAEA,EAAE,MACZ,GAAQ,CAAEA,EAAE,MACZ,GAAQ,CAAEA,EAAE,MACZ,GAAQ,CAAEA,EAAE,MACZ,GAAQ,CAAEA,EAAE,MACZ,GAAQ,CAAEA,EAAE,UAAWkB,EA/ItB,SAAwBw4Q,EAAMp/Q,GAC7B,IAAIuD,EAAI85T,EAAaj+C,GAGrB,OAFA77Q,EAAE,GAAG6N,EAAI,IACT7N,EAAE,GAAGie,EAAI49P,EAAKioB,WAAWrnS,EAAS,EAAG,QAC9BuD,IA4IT,GAAQ,CAAEmC,EAAE,WAAYkB,EAAE02T,GAC1B,GAAQ,CAAE53T,EAAE,WAAYkB,EA1IvB,SAAyBw4Q,EAAMp/Q,GAC9B,IAAIuD,EAAI85T,EAAaj+C,GACrB77Q,EAAE,GAAGie,EAAI49P,EAAKioB,WAAW,GACzB,IAAI7lR,EAAIje,EAAE,GAAGie,GAAK,EAElB,GAAY,EAATje,EAAE,GAAGie,EACP,OAAW,EAAJA,GACN,KAAK,EAAGA,EAAe,KAAVA,GAAK,GAAU,MAC5B,KAAK,EAAGA,GAAKA,GAAK,GAAK,GAAI,MAC3B,KAAK,EAAGA,GAAKA,GAAK,GAAK,IAAM,MAC7B,KAAK,EAAGA,GAAKA,GAAK,GAAK,GAAI,MAC3B,KAAK,EAAGA,GAAKA,GAAK,GAAK,GAAI,MAC3B,QAAS,KAAM,+BAAqC,EAAJA,GAIlD,OADAje,EAAE,GAAGie,EAAIA,EACFje,IA2HT,GAAQ,CAAEmC,EAAE,YAAakB,EA7GxB,SAA0Bw4Q,EAAMp/Q,GAC/B,IAAIuD,EAAI+5T,EAAgBl+C,GAExB,OADAA,EAAKl+P,GAAKlhB,EAAS,GACZuD,IA2GT,GAAQ,CAAEmC,EAAE,MACZ,GAAQ,CAAEA,EAAE,MACZ,GAAQ,CAAEA,EAAE,MACZ,GAAQ,CAAEA,EAAE,MACZ,GAAQ,CAAEA,EAAE,MACZ,GAAQ,CAAEA,EAAE,MACZ,GAAQ,CAAEA,EAAE,MACZ,GAAQ,CAAEA,EAAE,WAAYkB,EA/GvB,SAAyBw4Q,EAAMp/Q,GAC9B,IAAIuD,EAAI85T,EAAaj+C,GACjB9qN,EAAK8qN,EAAKioB,WAAW,GAEzB,OADA9jS,EAAE,GAAGie,EAAI8yC,GAAM,EACR/wD,IA4GT,GAAQ,CAAEmC,EAAE,WAAYkB,EAAE22T,GAC1B,GAAQ,CAAE73T,EAAE,YAAakB,EAnGxB,SAA0Bw4Q,EAAMp/Q,GAC/B,IAAIuD,EAAIg6T,EAAgBn+C,GAExB,OADAA,EAAKl+P,GAAKlhB,EAAS,GACZuD,IAiGT,IAAQ,CAAEmC,EAAE,GAAIkB,EAAEo1S,KAEjB,MAAO,CACNiY,YAzTD,SAA2B3lT,EAAG2hM,GAC7B,OAAOA,EAAKjrL,MACX,IAAK,SAAU,OAAOw3S,EAAsB7+B,EAAIJ,EAAOh/Q,OAAOjQ,IAAK2hM,GACnE,IAAK,SAAU,OAAOusH,EAAsB7+B,EAAIrvR,GAAI2hM,GACpD,IAAK,SACL,IAAK,QAAS,OAAOusH,EAAsBluT,EAAG2hM,GAE/C,KAAM,oBAAsBA,EAAKjrL,OAvBzB,GAobNw4S,GAAW,WACd,IAAIC,EAAS/kB,GAAS,KAAMglB,EAAUhlB,GAAS,OAE/C,SAASilB,EAAQn1T,GAEhB,IAAI4I,EAAI5I,EAAEugC,MAAM00R,GAChB,IAAIrsT,EAAG,MAAO,CAACA,EAAE,IAAKoQ,EAAE,IAExB,IAAIje,EAAI,CAAE6N,EAAE,IAAKoQ,EAAE+1R,GAAYnmS,EAAE,KAC7BwsT,EAAMp1T,EAAEugC,MAAM20R,GAElB,OADGE,IAAKr6T,EAAEqI,EAjHZ,SAAmBgyT,GAClB,IAAIC,EAAO,GAAInmS,EAAIkmS,EAAI70R,MAAM4tQ,IAAW12S,EAAI,EACxCs5P,GAAO,EACX,GAAG7hO,EAAG,KAAKz3B,GAAGy3B,EAAE13B,SAAUC,EAAG,CAC5B,IAAI8pB,EAAI+sR,GAAYp/Q,EAAEz3B,IACtB,OAAO8pB,EAAE,GAAG5Y,QAAQ,QAAQ,KAG3B,IAAK,YAGL,IAAK,UAAW,MAGhB,IAAK,UACJ,IAAI4Y,EAAE5hB,IAAK,MAEZ,IAAK,WACL,IAAK,YAAa01T,EAAKC,OAAS,EAAG,MACnC,IAAK,YAAa,MAGlB,IAAK,WACJ,GAAY,KAAT/zS,EAAE5hB,IAAY,MACjB01T,EAAKjqD,GAAK+nB,EAAMh1L,SAAS58E,EAAE5hB,IAAK,KAChC,MAGD,IAAK,WACJ,IAAI4hB,EAAE5hB,IAAK,MAEZ,IAAK,YACL,IAAK,aAAc01T,EAAKE,QAAU,EAAG,MACrC,IAAK,aAAc,MAGnB,IAAK,SAAUF,EAAKh4T,KAAOkkB,EAAE5hB,IAAK,MAGlC,IAAK,MAAO01T,EAAK9vJ,GAAKhkJ,EAAE5hB,IAAK,MAG7B,IAAK,UACJ,IAAI4hB,EAAE5hB,IAAK,MAEZ,IAAK,WACL,IAAK,YAAa01T,EAAKG,OAAS,EAAG,MACnC,IAAK,YAAa,MAGlB,IAAK,KACJ,IAAIj0S,EAAE5hB,IAAK,MACX,OAAO4hB,EAAE5hB,KACR,IAAK,SAAU01T,EAAKI,KAAO,SAAU,MACrC,IAAK,mBAAoBJ,EAAKI,KAAO,oBAAqB,MAC1D,IAAK,mBAAoBJ,EAAKI,KAAO,oBAGvC,IAAK,MACL,IAAK,OAAQJ,EAAKrlQ,EAAI,EAAG,MACzB,IAAK,OAAQ,MAGb,IAAK,KACJ,GAAY,KAATzuC,EAAE5hB,IAAY,MAElB,IAAK,MACL,IAAK,OAAQ01T,EAAKt1T,EAAI,EAAG,MACzB,IAAK,OAAQ,MAGb,IAAK,KACJ,GAAY,KAATwhB,EAAE5hB,IAAY,MAElB,IAAK,MACL,IAAK,OAAQ01T,EAAK59T,EAAI,EAAG,MACzB,IAAK,OAAQ,MAGb,IAAK,SACD8pB,EAAE0wO,MAAKojE,EAAK5iE,MAAQlxO,EAAE0wO,IAAI70P,MAAM,EAAE,IACrC,MAGD,IAAK,UAAWi4T,EAAKK,OAASn0S,EAAE5hB,IAAK,MAGrC,IAAK,aAAc01T,EAAKM,OAASp0S,EAAE5hB,IAAK,MAGxC,IAAK,UAAW,MAGhB,IAAK,UAAW,IAAK,WAAY,IAAK,YAAa,MACnD,IAAK,OAAQoxP,GAAO,EAAM,MAC1B,IAAK,SAAUA,GAAO,EAAO,MAC7B,QACC,GAA0B,KAAvBxvO,EAAE,GAAGmU,WAAW,KAAcq7N,EAAM,MAAM,IAAInyP,MAAM,4BAA8B2iB,EAAE,KAG1F,OAAO8zS,EAaQO,CAAUR,EAAI,KACrBr6T,EAER,IAAI86T,EAAS,gBAAiBC,EAAO,iBACrC,OAAO,SAAkBC,GACxB,OAAOA,EAAGptT,QAAQktT,EAAO,IAAIxtT,MAAMytT,GAAM3yT,IAAIgyT,GAAStwS,QAAO,SAAS7kB,GAAK,OAAOA,EAAEgZ,MAfvE,GAqBXg9S,GAAa,WAChB,IAAIC,EAAU,aAyBd,SAASC,EAAUl2T,GAClB,IAAIm2T,EAAQ,CAAC,GAAGn2T,EAAEgZ,EAAE,IACpB,OAAIhZ,EAAEgZ,GAEHhZ,EAAEoD,GA5BN,SAAoBiyT,EAAMe,EAAOC,GAChC,IAAIvhE,EAAQ,GAETugE,EAAKrlQ,GAAG8kM,EAAM54P,KAAK,+BACnBm5T,EAAKI,MAAM3gE,EAAM54P,KAAK,wBAA0Bm5T,EAAKI,KAAO,KAC5DJ,EAAK9vJ,IAAIuvF,EAAM54P,KAAK,aAAem5T,EAAK9vJ,GAAK,OAC7C8vJ,EAAKE,SAASzgE,EAAM54P,KAAK,yBACzBm5T,EAAKC,QAAQxgE,EAAM54P,KAAK,sBAC3Bk6T,EAAMl6T,KAAK,gBAAkB44P,EAAM/rP,KAAK,IAAM,MAE3CssT,EAAKt1T,IAAKq2T,EAAMl6T,KAAK,OAAQm6T,EAAMn6T,KAAK,SACxCm5T,EAAK59T,IAAK2+T,EAAMl6T,KAAK,OAAQm6T,EAAMn6T,KAAK,SACxCm5T,EAAKG,SAAUY,EAAMl6T,KAAK,OAAQm6T,EAAMn6T,KAAK,SAEhD,IAAIo6T,EAAQjB,EAAKM,QAAU,GACf,eAATW,GAAmC,SAATA,EAAkBA,EAAQ,MACtC,aAATA,IAAsBA,EAAQ,OAC1B,IAATA,IAAeF,EAAMl6T,KAAK,IAAMo6T,EAAQ,KAAMD,EAAMn6T,KAAK,KAAOo6T,EAAQ,MAE3ED,EAAMn6T,KAAK,WASHq6T,CAAWv2T,EAAEoD,EAAG+yT,EAAM,GAAIA,EAAM,IAEjCA,EAAM,GAAGptT,KAAK,IAAMotT,EAAM,GAAGxtT,QAAQstT,EAAQ,SAAWE,EAAM,GAAGptT,KAAK,KAJ7D,GAOjB,OAAO,SAAkBgtT,GACxB,OAAOA,EAAG5yT,IAAI+yT,GAAWntT,KAAK,KApCf,GAyCbytT,GAAW,0CAA2CC,GAAW,eACjEC,GAAa,+CACjB,SAASC,GAASn3T,EAAGioM,GACpB,IAAImvH,GAAOnvH,GAAOA,EAAKovH,SACnB/6M,EAAI,GACR,OAAIt8G,GAIDA,EAAE+gC,MAAM,0BACVu7E,EAAElzG,EAAImmS,GAAYW,GAASlwS,EAAEpC,MAAMoC,EAAE4qB,QAAQ,KAAK,GAAG/hB,MAAM,kBAAkB,IAAI,KACjFyzG,EAAE97G,EAAI0vS,GAASlwS,GACZo3T,IAAM96M,EAAEhgE,EAAIuzP,GAAWvzL,EAAElzG,KAGZpJ,EAAE+gC,MAAMk2R,MACxB36M,EAAE97G,EAAI0vS,GAASlwS,GACfs8G,EAAElzG,EAAImmS,GAAYW,IAAUlwS,EAAEmJ,QAAQ+tT,GAAY,IAAIn2R,MAAMi2R,KAAW,IAAIztT,KAAK,IAAIJ,QAAQwlS,GAAS,MAClGyoB,IAAM96M,EAAEhgE,EAAIk6Q,GAAWhB,GAASl5M,EAAE97G,MAI/B87G,GAjBO,CAAElzG,EAAG,IAqBpB,IAAIkuT,GAAQ,iDACRC,GAAQ,6BACRC,GAAQ,8BAiBZpb,GAAKqb,IAAM,oFACX,IAAIC,GAAe,mBACnB,SAASC,GAAcC,EAAK3vH,GAC3B,IAAIA,EAAK4vH,QAAS,MAAO,GACzB,IAAIt8T,EAAI,CAACkzS,IACTlzS,EAAEA,EAAEvD,QAAWq5S,GAAU,MAAO,KAAM,CACrCymB,MAAOpmB,GAAMqmB,KAAK,GAClBzjP,MAAOsjP,EAAII,MACXC,YAAaL,EAAI/jT,SAElB,IAAI,IAAI5b,EAAI,EAAGA,GAAK2/T,EAAI5/T,SAAUC,EAAK,GAAa,MAAV2/T,EAAI3/T,GAAP,CACtC,IAAI2L,EAAIg0T,EAAI3/T,GACRigU,EAAQ,OACTt0T,EAAEpD,EAAG03T,GAASt0T,EAAEpD,GAElB03T,GAAS,KACLt0T,EAAEwF,IAAGxF,EAAEwF,EAAI,IACZxF,EAAEwF,EAAE23B,MAAM22R,MAAeQ,GAAS,yBACrCA,GAAS,IAAMxoB,GAAU9rS,EAAEwF,GAAK,QAEjC8uT,GAAS,QACT38T,EAAEA,EAAEvD,QAAU,EAGf,OADGuD,EAAEvD,OAAO,IAAIuD,EAAEA,EAAEvD,QAAU,SAAYuD,EAAE,GAAGA,EAAE,GAAG4N,QAAQ,KAAK,MAC1D5N,EAAEgO,KAAK,IAyCf,IAAI4uT,GA3+IJ,SAAuB7pS,EAAK/yB,GAE3B,IAAIo8S,GAAQ,EAGZ,OAH4B,MAALp8S,IAAao8S,GAAQ,EAAMp8S,EAAIsnS,GAAQ,GAAK,EAAIv0Q,EAAIllB,EAAEpR,SAC7EuD,EAAE0jS,YAAY,EAAG,GACjByY,GAAmBppR,EAAIllB,EAAG7N,GACnBo8S,EAAQp8S,EAAEqC,MAAM,EAAGrC,EAAE2d,GAAK3d,GAw+IlC,SAAS68T,GAAcR,GACtB,IAAI9iB,EAAKP,KACTM,GAAaC,EAAI,cAXlB,SAA2B8iB,EAAKr8T,GAI/B,OAHIA,IAAGA,EAAIsnS,GAAQ,IACnBtnS,EAAE0jS,YAAY,EAAG24B,EAAII,OACrBz8T,EAAE0jS,YAAY,EAAG24B,EAAI/jT,QACdtY,EAOyB88T,CAAkBT,IAClD,IAAI,IAAI3/T,EAAI,EAAGA,EAAI2/T,EAAI5/T,SAAUC,EAAG48S,GAAaC,EAAI,aAAcqjB,GAAiBP,EAAI3/T,KAGxF,OADA48S,GAAaC,EAAI,aACVA,EAAG76R,MAEX,SAASq+S,GAAShqS,GACjB,GAAsB,oBAAZk8O,QAAyB,OAAOA,QAAQ/hE,MAAMpyL,OAAOo9Q,EAAcnlQ,GAE7E,IADA,IAAI/yB,EAAI,GAAI+3S,EAAKhlR,EAAIzlB,MAAM,IACnB5Q,EAAI,EAAGA,EAAIq7S,EAAGt7S,SAAUC,EAAGsD,EAAEtD,GAAKq7S,EAAGr7S,GAAGi+B,WAAW,GAC3D,OAAO36B,EAIR,SAASg9T,GAAoBnhD,EAAMp/Q,GAClC,IAAIuD,EAAI,GAIR,OAHAA,EAAEi9T,MAAQphD,EAAKioB,WAAW,GAC1B9jS,EAAEk9T,MAAQrhD,EAAKioB,WAAW,GACxBrnS,GAAU,IAAGo/Q,EAAKl+P,GAAKlhB,EAAS,GAC3BuD,EAcR,SAASm9T,GAAwBthD,GAOhC,IANA,IAAIr/Q,EAAMq/Q,EAAKioB,WAAW,GACtBplR,EAAMm9P,EAAKl+P,EAAInhB,EAAM,EACrBwD,EAAI,GACJunS,EAAM1rB,EAAKioB,WAAW,GACtBs5B,EAAQ,GAEN71B,KAAQ,GAAG61B,EAAMj8T,KAAK,CAAE0M,EAAGguQ,EAAKioB,WAAW,GAAI7lR,EAAG49P,EAAKioB,WAAW,EAAG,UAG3E,GAFA9jS,EAAEsC,KAAOu5Q,EAAKioB,WAAW,EAAG,QAC5B9jS,EAAEo9T,MAAQA,EACPvhD,EAAKl+P,GAAKe,EAAK,MAAM,IAAI7a,MAAM,0BAA4Bg4Q,EAAKl+P,EAAI,OAASe,GAChF,OAAO1e,EA8CR,SAASq9T,GAAuBxhD,EAAMp/Q,GACrC,IAAIsnS,EAAMloB,EAAKl+P,EAAIlhB,EACfuD,EAAI,GACRA,EAAEs9T,MAA8B,GAArBzhD,EAAKioB,WAAW,GAC3BjoB,EAAKl+P,GAAK,EACV3d,EAAEu9T,MAAQ1hD,EAAKioB,WAAW,GAC1B,IAAI05B,GAAQ,EACZ,OAAOx9T,EAAEu9T,OACR,KAAK,MAAQ,KAAK,MAAQ,KAAK,MAAQC,EAAoB,IAAXx9T,EAAEs9T,MAAgB,MAClE,KAAK,MAAQE,EAAoB,GAAXx9T,EAAEs9T,MAAgB,MACxC,KAAK,EAAGE,EAAoB,IAAXx9T,EAAEs9T,OAA4B,GAAXt9T,EAAEs9T,OAA4B,IAAXt9T,EAAEs9T,MAAgB,MACzE,QAAS,KAAM,sCAAwCt9T,EAAEu9T,MAE1D,IAAIC,EAAO,MAAM,IAAI35T,MAAM,mCAO3B,OANA7D,EAAEy9T,UAAY5hD,EAAKioB,WAAW,GAC9B9jS,EAAE09T,QAAU7hD,EAAKioB,WAAW,GAC5B9jS,EAAE29T,aAAe9hD,EAAKioB,WAAW,GACjCjoB,EAAKl+P,GAAK,EACV3d,EAAE49T,QAAU/hD,EAAKioB,WAAYC,EAAIloB,EAAKl+P,GAAI,EAAG,WAC7Ck+P,EAAKl+P,EAAIomR,EACF/jS,EAIR,SAAS69T,GAAyBhiD,EAAMp/Q,GACvC,IAAIuD,EAAI,GAAI+jS,EAAMloB,EAAKl+P,EAAIlhB,EAM3B,OALAo/Q,EAAKl+P,GAAK,EACV3d,EAAE89T,KAAOjiD,EAAKx5Q,MAAMw5Q,EAAKl+P,EAAGk+P,EAAKl+P,EAAE,IAAKk+P,EAAKl+P,GAAK,GAClD3d,EAAE+9T,SAAWliD,EAAKx5Q,MAAMw5Q,EAAKl+P,EAAGk+P,EAAKl+P,EAAE,IAAKk+P,EAAKl+P,GAAK,GACzCk+P,EAAKioB,WAAW,GAC7B9jS,EAAEg+T,aAAeniD,EAAKx5Q,MAAMw5Q,EAAKl+P,EAAGomR,GAAMloB,EAAKl+P,EAAIomR,EAC5C/jS,EAeR,SAASi+T,GAAiBpiD,GAEzB,GAAqB,KAAT,GADAA,EAAKioB,WAAW,IACD,MAAM,IAAIjgS,MAAM,2BAC3C,IAAI2mK,EAAKqxG,EAAKioB,WAAW,GAIzB,MAAO,CAAEj2R,EAAE,MAAOkzC,EAFRs8Q,GAAuBxhD,EAAMrxG,GAEdvsJ,EADV4/S,GAAyBhiD,EAAMA,EAAKp/Q,OAASo/Q,EAAKl+P,IAIlE,SAASugT,KAAqB,MAAM,IAAIr6T,MAAM,mDAE9C,SAASs6T,GAAiBtiD,GACzB,IAAIuiD,EAAU,CAAC,WAAW,YAAY,UAAU,WAAW,kBAAkB,iBAAiB,gBAAgB,aAC9GviD,EAAKl+P,GAAG,EACR,IAAI0gT,EAAMxiD,EAAKioB,WAAWjoB,EAAKp/Q,OAASo/Q,EAAKl+P,EAAG,QAC5C3d,EAAI,GAiBR,OAhBAq+T,EAAIzwT,QAAQwlS,IAAU,SAAmB3uS,GACxC,IAAI+hB,EAAI+sR,GAAY9uS,GACpB,OAAOkvS,GAASntR,EAAE,KACjB,IAAK,QAAS,MACd,IAAK,cAAe,IAAK,gBAAiB,MAC1C,IAAK,WAAY43S,EAAQp0T,SAAQ,SAASuY,GAAKviB,EAAEuiB,GAAKiE,EAAEjE,MAAQ,MAChE,IAAK,iBAAkBviB,EAAEs+T,iBAAmB93S,EAAE83S,iBAAkBt+T,EAAEu+T,mBAAqB/3S,EAAE+3S,mBAAoB,MAC7G,IAAK,kBAAmB,IAAK,iBAAkBv+T,EAAEw+T,KAAO,GAAI,MAC5D,IAAK,mBAAoB,MAEzB,IAAK,gBAAiBx+T,EAAEy+T,IAAMj4S,EAAEi4S,IAAK,MACrC,IAAK,kBAAmB,MACxB,IAAK,gBAAiBz+T,EAAEw+T,KAAKr9T,KAAKqlB,GAAI,MACtC,QAAS,MAAMA,EAAE,OAGZxmB,EA2BR,SAAS0+T,GAAsCC,GAC9C,IAAuBC,EAEeliU,EAFlCqhU,EAAW,EACXc,EAAkB9B,GAAS4B,GAC3BniU,EAAMqiU,EAAgBpiU,OAAS,EAInC,KAFAmiU,EAAgB1kC,EAAY19R,IACd,GAAKqiU,EAAgBpiU,OAC/BC,EAAI,EAAGA,GAAKF,IAAOE,EAAGkiU,EAAcliU,GAAKmiU,EAAgBniU,EAAE,GAC/D,IAAIA,EAAIF,EAAI,EAAGE,GAAK,IAAKA,EAKxBqhU,IAHyC,IAAZ,MAAXA,GAAiC,EAAI,GACtCA,GAAY,EAAK,OAFnBa,EAAcliU,GAM9B,OAAkB,MAAXqhU,EAIR,IACKe,GACAC,GACAC,GAEAC,GALDC,IACCJ,GAAW,CAAC,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,EAAM,IAAM,GAAM,EAAM,IAAM,GAAM,GAChGC,GAAc,CAAC,MAAQ,KAAQ,MAAQ,MAAQ,KAAQ,KAAQ,MAAQ,MAAQ,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,OAC/HC,GAAY,CAAC,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,KAAQ,KAAQ,MAAQ,MAAQ,IAAQ,KAAQ,KAAQ,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,KAAQ,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,IAAQ,KAAQ,KAAQ,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,MAAQ,KAAQ,MAAQ,MAAQ,MAAQ,MAAQ,IAAQ,KAAQ,KAAQ,KAAQ,KAAQ,MAAQ,MAAQ,KAAQ,KAAQ,OAE70BC,GAAS,SAASE,EAAOC,GAAS,OADsB,MAAzCC,EAC8BF,EAAQC,GADhB,EAAW,IAALC,GAArC,IAASA,GAcZ,SAASC,GAKf,IAJA,IAKIC,EAAMC,EAAkBC,EALxBd,EAAW5B,GAASuC,GACpBI,EAdsB,SAASf,GAGnC,IAFA,IAAIe,EAASX,GAAYJ,EAASliU,OAAS,GACvCkjU,EAAiB,IACbjjU,EAAIiiU,EAASliU,OAAO,EAAGC,GAAK,IAAKA,EAExC,IADA,IAAIkjU,EAAOjB,EAASjiU,GACZoM,EAAI,EAAQ,GAALA,IAAUA,EACd,GAAP82T,IAAaF,GAAUV,GAAUW,IACpCC,GAAQ,IAAKD,EAGf,OAAOD,EAIMG,CAAqBlB,GAC9BmB,EAAQnB,EAASliU,OACjBsjU,EAAmB7lC,EAAY,IAC3Bx9R,EAAI,EAAQ,IAALA,IAAWA,EAAGqjU,EAAiBrjU,GAAK,EAUnD,IARmB,IAAP,EAARojU,KACHP,EAAOG,GAAU,EACjBK,EAAiBD,GAASb,GAAOH,GAAS,GAAIS,KAC5CO,EACFP,EAAgB,IAATG,EACPF,EAAmBb,EAASA,EAASliU,OAAS,GAC9CsjU,EAAiBD,GAASb,GAAOO,EAAkBD,IAE9CO,EAAQ,GAEbP,EAAOG,GAAU,EACjBK,IAFED,GAEwBb,GAAON,EAASmB,GAAQP,GAElDA,EAAgB,IAATG,EACPK,IAFED,GAEwBb,GAAON,EAASmB,GAAQP,GAInD,IAFAO,EAAQ,GACRL,EAAW,GAAKd,EAASliU,OACnBgjU,EAAW,GAChBF,EAAOG,GAAU,EACjBK,EAAiBD,GAASb,GAAOH,GAASW,GAAWF,KAEnDE,EACFF,EAAgB,IAATG,EACPK,IAHED,GAGwBb,GAAON,EAASmB,GAAQP,KAChDO,IACAL,EAEH,OAAOM,IAqDT,IAAIC,GAAM,WACT,SAASC,EAAal1T,EAAG2hM,GACxB,OAAOA,EAAKjrL,MACX,IAAK,SAAU,OAAOy+S,EAAiBlmC,EAAOh/Q,OAAOjQ,GAAI2hM,GACzD,IAAK,SAAU,OAAOwzH,EAAiBn1T,EAAG2hM,GAC1C,IAAK,SAAU,OAAOwzH,EAAiBn1T,EAAE3I,SAAS,UAAWsqM,GAC7D,IAAK,QAAU,OAAOwzH,EAAiBluB,GAAOjnS,GAAI2hM,GAEnD,MAAM,IAAI7oM,MAAM,qBAAuB6oM,EAAKjrL,MAG7C,SAASy+S,EAAiBntS,EAAK25K,GAC9B,IACImjB,GADInjB,GAAQ,IACLh9E,MAAQ,GAAO,GAI1B,IAAI38F,EAAIyS,MAAM,WAAY,MAAM,IAAI3hC,MAAM,qBAG1C,OADAgsN,EAAG,QAAU6qF,GALD,CAAEryS,EAAG,CAAC8C,EAAE,EAAGlG,EAAE,GAAImvB,EAAG,CAACjpB,EAAE,EAAGlG,EAAE,KAMjC4qN,EA0BR,MAAO,CACN6gG,YAxBD,SAAyB3lT,EAAG2hM,GAAQ,OAAOwuG,GAAkB+kB,EAAal1T,EAAG2hM,GAAOA,IAyBnFikH,SAAUsP,EACVrP,WAvBD,SAAsB/gG,GAIrB,IAHA,IACuC5xG,EADnCj+G,EAAI,CAAC,iBACLiF,EAAI41S,GAAkBhrF,EAAG,SACzBngG,EAAQ9yH,MAAMC,QAAQgzN,GAClBlK,EAAI1gN,EAAEoD,EAAEpD,EAAG0gN,GAAK1gN,EAAEmvB,EAAEnvB,IAAK0gN,EAAG,CACnC3lN,EAAEmB,KAAK,uBACP,IAAI,IAAIykN,EAAI3gN,EAAEoD,EAAE8C,EAAGy6M,GAAK3gN,EAAEmvB,EAAEjpB,IAAKy6M,EAAG5lN,EAAEmB,KAAK,WAAaykN,EAAE,IAE1D,IADA5lN,EAAEmB,KAAK,iBACHykN,EAAI3gN,EAAEoD,EAAE8C,EAAGy6M,GAAK3gN,EAAEmvB,EAAEjpB,IAAKy6M,EAAG,CAC/B,IAAIl8B,EAAQqwH,GAAY,CAAC90S,EAAE0gN,EAAEx6M,EAAEy6M,KAC/B3nG,EAAOyR,GAASmgG,EAAGlK,IAAI,IAAIC,GAAIiK,EAAGnmC,MACZ,MAAVzrE,EAAKhgG,GAAeggG,EAAK56G,IAAK46G,EAAK0zJ,KAC/C3xQ,EAAEmB,KAAK,KAAO88G,EAAKpvD,IAAMisP,GAAY78L,GAAOA,EAAKpvD,KACjD7uD,EAAEmB,KAAK,WAERnB,EAAEmB,KAAK,sBAER,OAAOnB,EAAEgO,KAAK,IAAM,MA3CZ,GAwDV,SAASmyT,GAAQjpE,GAChB,IAAI,IAAIx6P,EAAE,EAAEsD,EAAE,EAAM,GAAHtD,IAAQA,EAAGsD,EAAM,IAAFA,GAASk3P,EAAIx6P,GAAG,IAAI,IAAIw6P,EAAIx6P,GAAG,EAAE,EAAEw6P,EAAIx6P,IACvE,OAAOsD,EAAEoC,SAAS,IAAImiF,cAAcliF,MAAM,GAqC3C,SAAS+9T,GAASplE,EAAK0jD,GACtB,GAAY,IAATA,EAAY,OAAO1jD,EACtB,IAAIP,EApCL,SAAiBvD,GAChB,IAAIvxC,EAAIuxC,EAAI,GAAG,IAAKmpE,EAAInpE,EAAI,GAAG,IAAK78B,EAAE68B,EAAI,GAAG,IACzC9qL,EAAIloE,KAAKQ,IAAIihN,EAAG06G,EAAGhmG,GAAIlmM,EAAIjwB,KAAKM,IAAImhN,EAAG06G,EAAGhmG,GAAIzU,EAAIx5I,EAAIj4C,EAC1D,GAAS,IAANyxL,EAAS,MAAO,CAAC,EAAG,EAAGD,GAE1B,IAAYouC,EAARusE,EAAK,EAAUC,EAAMn0P,EAAIj4C,EAE7B,OADA4/N,EAAInuC,GAAK26G,EAAK,EAAI,EAAIA,EAAKA,GACpBn0P,GACN,KAAKu5I,EAAG26G,IAAOD,EAAIhmG,GAAKzU,EAAI,GAAG,EAAG,MAClC,KAAKy6G,EAAGC,GAAOjmG,EAAI1U,GAAKC,EAAI,EAAI,MAChC,KAAKyU,EAAGimG,GAAO36G,EAAI06G,GAAKz6G,EAAI,EAE7B,MAAO,CAAC06G,EAAK,EAAGvsE,EAAGwsE,EAAK,GAwBdC,CA7CX,SAAiBz/Q,GAChB,IAAI/gD,EAAI+gD,EAAE1+C,MAAa,MAAP0+C,EAAE,GAAS,EAAE,GAAG1+C,MAAM,EAAE,GACxC,MAAO,CAAC+gG,SAASpjG,EAAEqC,MAAM,EAAE,GAAG,IAAI+gG,SAASpjG,EAAEqC,MAAM,EAAE,GAAG,IAAI+gG,SAASpjG,EAAEqC,MAAM,EAAE,GAAG,KA2ChEo+T,CAAQzlE,IAG1B,OAFcP,EAAI,GAAdikD,EAAO,EAAYjkD,EAAI,IAAM,EAAIikD,GACvB,GAAK,EAAIjkD,EAAI,KAAO,EAAIikD,GAC/ByhB,GAxBR,SAAiB1lE,GAChB,IAII/E,EAJAgnC,EAAIjiC,EAAI,GAAI1G,EAAI0G,EAAI,GAAIhS,EAAIgS,EAAI,GAChC70C,EAAQ,EAAJmuC,GAAStL,EAAI,GAAMA,EAAI,EAAIA,GAAIt0N,EAAIs0N,EAAI7iC,EAAE,EAC7CsxC,EAAM,CAAC/iO,EAAEA,EAAEA,GAAIusS,EAAK,EAAEhkC,EAG1B,GAAS,IAAN3oC,EAAS,OAAU,EAAH2sE,GAClB,KAAK,EAAG,KAAK,EAAGhrE,EAAI9vC,EAAI86G,EAAIxpE,EAAI,IAAMtxC,EAAGsxC,EAAI,IAAMxB,EAAG,MACtD,KAAK,EAAGA,EAAI9vC,GAAK,EAAI86G,GAAOxpE,EAAI,IAAMxB,EAAGwB,EAAI,IAAMtxC,EAAG,MACtD,KAAK,EAAG8vC,EAAI9vC,GAAK86G,EAAK,GAAMxpE,EAAI,IAAMtxC,EAAGsxC,EAAI,IAAMxB,EAAG,MACtD,KAAK,EAAGA,EAAI9vC,GAAK,EAAI86G,GAAOxpE,EAAI,IAAMxB,EAAGwB,EAAI,IAAMtxC,EAAG,MACtD,KAAK,EAAG8vC,EAAI9vC,GAAK86G,EAAK,GAAMxpE,EAAI,IAAMtxC,EAAGsxC,EAAI,IAAMxB,EAAG,MACtD,KAAK,EAAGA,EAAI9vC,GAAK,EAAI86G,GAAOxpE,EAAI,IAAMxB,EAAGwB,EAAI,IAAMtxC,EAEpD,IAAI,IAAIlpN,EAAI,EAAQ,GAALA,IAAUA,EAAGw6P,EAAIx6P,GAAKwH,KAAKsW,MAAa,IAAP08O,EAAIx6P,IACpD,OAAOw6P,EASQypE,CAAQlmE,IAKxB,IAA4CmmE,GAA9B,EACd,SAAS/J,GAAShwT,GAAS,OAAO3C,KAAK8H,OAAQnF,EAAS3C,KAAKsW,MAAM,IAAIomT,IAAM,KAAOA,IACpF,SAAS9J,GAAQ3iG,GAAM,OAAQjwN,KAAK8H,OAAOmoN,EAAK,GAAGysG,GAAM,IAAM,IAAM,IACrE,SAASC,GAAWC,GAAO,OAAQ58T,KAAKsW,OAAOsmT,EAAMF,GAAM,GAAGA,GAAI,KAAM,IAGxE,SAASG,GAAYC,GAAS,OAAOH,GAAW/J,GAAQD,GAASmK,KAEjE,SAASC,GAAcD,GACtB,IAAI5wP,EAAQlsE,KAAK+sC,IAAI+vR,EAAQD,GAAYC,IAASE,EAAON,GACzD,GAAGxwP,EAAQ,KAAO,IAAIwwP,GAVkB,EAULA,GAVT,KAUwBA,GAAQ18T,KAAK+sC,IAAI+vR,EAAQD,GAAYC,KAAW5wP,IAASA,EAAQlsE,KAAK+sC,IAAI+vR,EAAQD,GAAYC,IAASE,EAAON,IAChKA,GAAMM,EAcP,SAASjL,GAAYkL,GACjBA,EAAKt6T,OACPs6T,EAAKvK,IAAMC,GAASsK,EAAKt6T,OACzBs6T,EAAKnL,IAAMc,GAAQqK,EAAKvK,KACxBuK,EAAKP,IAAMA,IACFO,EAAKvK,KACduK,EAAKnL,IAAMc,GAAQqK,EAAKvK,KACxBuK,EAAKt6T,MAAQg6T,GAAWM,EAAKnL,KAC7BmL,EAAKP,IAAMA,IACiB,iBAAZO,EAAKnL,MACrBmL,EAAKt6T,MAAQg6T,GAAWM,EAAKnL,KAC7BmL,EAAKvK,IAAMC,GAASsK,EAAKt6T,OACzBs6T,EAAKP,IAAMA,IAETO,EAAKC,oBAAoBD,EAAKC,YAIlC,SAASrK,GAAM5iG,GAAM,OAAY,GAALA,EADd,GAEd,SAASiiG,GAAMiL,GAAM,OAFP,GAEcA,EAAW,GAGvC,IAsYIC,GACAC,GACAC,GACAC,GACAC,GA1YAC,GAAqB,CACxB,KAAQ,OACR,MAAS,QACT,OAAU,aACV,OAAU,WACV,OAAU,YACV,WAAc,iBACd,WAAc,eACd,kBAAqB,WACrB,WAAc,SACd,UAAa,WACb,eAAkB,cAClB,eAAkB,kBAClB,eAAkB,gBAClB,sBAAyB,YACzB,cAAiB,aAgTdC,GAAc,CAAE,WAAY,SAAU,SAAU,WAAY,QAC5DC,GAAc,CAAE,iBAAkB,cAAe,YAAa,YAAa,oBAAqB,kBAAmB,cAAe,eAqElIC,IACAR,GAAc,wDACdC,GAAc,wDACdC,GAAa,oDACbC,GAAa,oDACbC,GAAe,wDAEZ,SAAuB/+T,EAAMo/T,EAAQr1H,GAC3C,IAII7+L,EAJAspP,EAAS,GACb,OAAIx0P,IAMAkL,GALJlL,EAAOA,EAAKiL,QAAQ,sBAAsB,IAAIA,QAAQ,+BAA+B,KAK1E43B,MAAM87R,MA5HlB,SAAuBzzT,EAAGspP,EAAQzqD,GACjCyqD,EAAO6qE,UAAY,GAEnB,IADA,IAAIz/S,EAAsBuC,EAAK81Q,EAAIn4B,QAC3B/lQ,EAAE,EAAGA,EAAI6lB,EAAE9lB,SAAUC,EAAGy6P,EAAO6qE,UAAUz/S,EAAE7lB,IAAMk+R,EAAIn4B,OAAOlgP,EAAE7lB,IACtE,IAAIy3B,EAAItmB,EAAE,GAAG23B,MAAM4tQ,IACnB,GAAIj/Q,EACJ,IAAIz3B,EAAE,EAAGA,EAAIy3B,EAAE13B,SAAUC,EAAG,CAC3B,IAAI8pB,EAAI+sR,GAAYp/Q,EAAEz3B,IACtB,OAAOi3S,GAASntR,EAAE,KACjB,IAAK,WAAY,IAAK,aAAc,IAAK,aAAc,IAAK,YAAa,MACzE,IAAK,UACJ,IAAInjB,EAAE2wS,GAAYW,GAASnuR,EAAEy7S,aAAcn5T,EAAEs6F,SAAS58E,EAAEw0R,SAAS,IAEjE,GADA7jD,EAAO6qE,UAAUl5T,GAAKzF,EACnByF,EAAE,EAAG,CACP,GAAGA,EAAI,IAAO,CACb,IAAIA,EAAI,IAAOA,EAAI,IAAqC,MAAvBquP,EAAO6qE,UAAUl5T,KAAvBA,GAC3BquP,EAAO6qE,UAAUl5T,GAAKzF,EAEvBu3R,EAAIz+P,KAAK94B,EAAEyF,GAEX,MACF,IAAK,YAAa,MAClB,QAAS,GAAG4jM,EAAKgpG,IAAK,MAAM,IAAI7xS,MAAM,gBAAkB2iB,EAAE,GAAK,iBAsGjC07S,CAAcr0T,EAAGspP,EAAQzqD,IAGrD7+L,EAAElL,EAAK6iC,MAAMi8R,MAvPlB,SAAqB5zT,EAAGspP,EAAQ4qE,EAAQr1H,GACvCyqD,EAAOgrE,MAAQ,GACf,IAAI7H,EAAO,GACPtkE,GAAO,GACVnoP,EAAE,GAAG23B,MAAM4tQ,KAAW,IAAIppS,SAAQ,SAASvF,GAC3C,IAAI+hB,EAAI+sR,GAAY9uS,GACpB,OAAOkvS,GAASntR,EAAE,KACjB,IAAK,SAAU,IAAK,UAAW,IAAK,WAAY,MAGhD,IAAK,QAAS,IAAK,SAAU,MAC7B,IAAK,UAAW,IAAK,UACpB2wO,EAAOgrE,MAAMhhU,KAAKm5T,GAClBA,EAAO,GACP,MAGD,IAAK,QAAY9zS,EAAE5hB,MAAK01T,EAAKh4T,KAAOqyS,GAASnuR,EAAE5hB,MAAM,MACrD,IAAK,UAAW,IAAK,UAAW,MAGhC,IAAK,KAAM01T,EAAKjjE,KAAO7wO,EAAE5hB,IAAM8vS,GAAaluR,EAAE5hB,KAAO,EAAG,MACxD,IAAK,OAAQ01T,EAAKjjE,KAAO,EAAG,MAG5B,IAAK,KAAMijE,EAAKhjE,OAAS9wO,EAAE5hB,IAAM8vS,GAAaluR,EAAE5hB,KAAO,EAAG,MAC1D,IAAK,OAAQ01T,EAAKhjE,OAAS,EAAG,MAG9B,IAAK,KACJ,OAAO9wO,EAAE5hB,KACR,IAAK,OAAQ01T,EAAK/iE,UAAY,EAAM,MACpC,IAAK,SAAU+iE,EAAK/iE,UAAY,EAAM,MACtC,IAAK,SAAU+iE,EAAK/iE,UAAY,EAAM,MACtC,IAAK,mBAAoB+iE,EAAK/iE,UAAY,GAAM,MAChD,IAAK,mBAAoB+iE,EAAK/iE,UAAY,GACzC,MACH,IAAK,OAAQ+iE,EAAK/iE,UAAY,EAAG,MAGjC,IAAK,UAAW+iE,EAAKG,OAASj0S,EAAE5hB,IAAM8vS,GAAaluR,EAAE5hB,KAAO,EAAG,MAC/D,IAAK,YAAa01T,EAAKG,OAAS,EAAG,MAGnC,IAAK,WAAYH,EAAKE,QAAUh0S,EAAE5hB,IAAM8vS,GAAaluR,EAAE5hB,KAAO,EAAG,MACjE,IAAK,aAAc01T,EAAKE,QAAU,EAAG,MAGrC,IAAK,UAAWF,EAAKC,OAAS/zS,EAAE5hB,IAAM8vS,GAAaluR,EAAE5hB,KAAO,EAAG,MAC/D,IAAK,YAAa01T,EAAKC,OAAS,EAAG,MAGnC,IAAK,YAAaD,EAAK8H,SAAW57S,EAAE5hB,IAAM8vS,GAAaluR,EAAE5hB,KAAO,EAAG,MACnE,IAAK,cAAe01T,EAAK8H,SAAW,EAAG,MAGvC,IAAK,UAAW9H,EAAKnqF,OAAS3pN,EAAE5hB,IAAM8vS,GAAaluR,EAAE5hB,KAAO,EAAG,MAC/D,IAAK,YAAa01T,EAAKnqF,OAAS,EAAG,MAGnC,IAAK,MAAU3pN,EAAE5hB,MAAK01T,EAAK9vJ,IAAMhkJ,EAAE5hB,KAAK,MACxC,IAAK,QAAS,IAAK,QAAS,MAG5B,IAAK,aAAiB4hB,EAAE5hB,MAAK01T,EAAK+H,UAAY77S,EAAE5hB,KAAK,MACrD,IAAK,eAAgB,IAAK,eAAgB,MAG1C,IAAK,UAAc4hB,EAAE5hB,MAAK01T,EAAKK,OAASv3N,SAAS58E,EAAE5hB,IAAI,KAAK,MAC5D,IAAK,YAAa,IAAK,YAAa,MAGpC,IAAK,UAAc4hB,EAAE5hB,MAAK01T,EAAKl/R,OAAS5U,EAAE5hB,KAAK,MAC/C,IAAK,YAAa,IAAK,YAAa,MAGpC,IAAK,WACJ,GAAY,KAAT4hB,EAAE5hB,IAAY,MACjB4hB,EAAEqqS,SAAWz4B,EAAMh1L,SAAS58E,EAAE5hB,IAAK,KACnC,MAGD,IAAK,SAIJ,GAHI01T,EAAK5iE,QAAO4iE,EAAK5iE,MAAQ,IAC1BlxO,EAAE+3R,OAAM+b,EAAK5iE,MAAM6mD,KAAO7J,GAAaluR,EAAE+3R,OAEzC/3R,EAAE0wO,IAAKojE,EAAK5iE,MAAMR,IAAM1wO,EAAE0wO,IAAI70P,OAAO,QACnC,GAAGmkB,EAAE87S,QAAS,CAClBhI,EAAK5iE,MAAMzzP,MAAQm/F,SAAS58E,EAAE87S,QAAS,IACvC,IAAIC,EAAMjjB,GAAOgb,EAAK5iE,MAAMzzP,OAE5B,GADuB,IAApBq2T,EAAK5iE,MAAMzzP,QAAas+T,EAAMjjB,GAAO,KACpCijB,EAAK,MAAM,IAAI1+T,MAAMY,GACzB61T,EAAK5iE,MAAMR,IAAMqrE,EAAI,GAAGngU,SAAS,IAAMmgU,EAAI,GAAGngU,SAAS,IAAMmgU,EAAI,GAAGngU,SAAS,SACpEokB,EAAEg4R,QACX8b,EAAK5iE,MAAM8mD,MAAQp7M,SAAS58E,EAAEg4R,MAAO,IAClCh4R,EAAEk4R,OAAM4b,EAAK5iE,MAAMgnD,KAAO5gS,WAAW0I,EAAEk4R,OACvCl4R,EAAEg4R,OAASujB,EAAOS,eAAiBT,EAAOS,cAAcC,YAC1DnI,EAAK5iE,MAAMR,IAAMkpE,GAAS2B,EAAOS,cAAcC,UAAUnI,EAAK5iE,MAAM8mD,OAAOtnD,IAAKojE,EAAK5iE,MAAMgnD,MAAQ,KAIrG,MACD,IAAK,WAAY,IAAK,WAAY,MAGlC,IAAK,oBAAqB1oD,GAAO,EAAM,MACvC,IAAK,sBAAuBA,GAAO,EAAO,MAG1C,IAAK,UAAW,IAAK,WAAY,IAAK,YAAa,MACnD,IAAK,OAAQA,GAAO,EAAM,MAC1B,IAAK,SAAUA,GAAO,EAAO,MAC7B,QAAS,GAAGtpD,GAAQA,EAAKgpG,MACpB1/C,EAAM,MAAM,IAAInyP,MAAM,gBAAkB2iB,EAAE,GAAK,iBAsIvBk8S,CAAY70T,EAAGspP,EAAQ4qE,EAAQr1H,IAG1D7+L,EAAElL,EAAK6iC,MAAMg8R,MA5TlB,SAAqB3zT,EAAGspP,EAAQ4qE,EAAQr1H,GACvCyqD,EAAOwrE,MAAQ,GACf,IAAIzlT,EAAO,GACP84O,GAAO,GACVnoP,EAAE,GAAG23B,MAAM4tQ,KAAW,IAAIppS,SAAQ,SAASvF,GAC3C,IAAI+hB,EAAI+sR,GAAY9uS,GACpB,OAAOkvS,GAASntR,EAAE,KACjB,IAAK,SAAU,IAAK,UAAW,IAAK,WAAY,MAGhD,IAAK,SAAU,IAAK,QAAS,IAAK,UACjCtJ,EAAO,GAAIi6O,EAAOwrE,MAAMxhU,KAAK+b,GAAO,MACrC,IAAK,UAGL,IAAK,iBAAkB,MACvB,IAAK,gBACL,IAAK,kBAAmBi6O,EAAOwrE,MAAMxhU,KAAK+b,GAAOA,EAAO,GAAI,MAG5D,IAAK,eAAgB,IAAK,gBACtBsJ,EAAEo8S,cAAa1lT,EAAK0lT,YAAcp8S,EAAEo8S,aACvC,MACD,IAAK,iBAAkB,IAAK,iBAAkB,MAG9C,IAAK,WACA1lT,EAAKy7O,UAASz7O,EAAKy7O,QAAU,IAC9BnyO,EAAE87S,UAASplT,EAAKy7O,QAAQ2pE,QAAUl/N,SAAS58E,EAAE87S,QAAS,KACtD97S,EAAEg4R,QAAOthS,EAAKy7O,QAAQ6lD,MAAQp7M,SAAS58E,EAAEg4R,MAAO,KAChDh4R,EAAEk4R,OAAMxhS,EAAKy7O,QAAQ+lD,KAAO5gS,WAAW0I,EAAEk4R,OAEzCl4R,EAAE0wO,MAAKh6O,EAAKy7O,QAAQzB,IAAM1wO,EAAE0wO,IAAI70P,OAAO,IAC1C,MACD,IAAK,aAAc,IAAK,aAAc,MAGtC,IAAK,WACA6a,EAAK2lT,UAAS3lT,EAAK2lT,QAAU,IAC9Br8S,EAAEg4R,QAAOthS,EAAK2lT,QAAQrkB,MAAQp7M,SAAS58E,EAAEg4R,MAAO,KAChDh4R,EAAEk4R,OAAMxhS,EAAK2lT,QAAQnkB,KAAO5gS,WAAW0I,EAAEk4R,OAEhC,MAATl4R,EAAE0wO,MAAah6O,EAAK2lT,QAAQ3rE,IAAM1wO,EAAE0wO,IAAI70P,OAAO,IAClD,MACD,IAAK,aAAc,IAAK,aAAc,MAGtC,IAAK,QAAS,IAAK,UACnB,IAAK,UAAW,MAGhB,IAAK,SAAU,IAAK,WACpB,IAAK,WAAY,MAGjB,IAAK,UAAW,IAAK,WAAY,IAAK,YAAa,MACnD,IAAK,OAAQ2zP,GAAO,EAAM,MAC1B,IAAK,SAAUA,GAAO,EAAO,MAC7B,QAAS,GAAGtpD,GAAQA,EAAKgpG,MACpB1/C,EAAM,MAAM,IAAInyP,MAAM,gBAAkB2iB,EAAE,GAAK,iBAiQvBs8S,CAAYj1T,EAAGspP,EAAQ4qE,EAAQr1H,IAG1D7+L,EAAElL,EAAK6iC,MAAMk8R,MA1YlB,SAAuB7zT,EAAGspP,EAAQ4qE,EAAQr1H,GACzCyqD,EAAO4rE,QAAU,GACjB,IAAI9hE,EAAS,GACTjL,GAAO,GACVnoP,EAAE,GAAG23B,MAAM4tQ,KAAW,IAAIppS,SAAQ,SAASvF,GAC3C,IAAI+hB,EAAI+sR,GAAY9uS,GACpB,OAAOkvS,GAASntR,EAAE,KACjB,IAAK,WAAY,IAAK,YAAa,IAAK,aAAc,MAGtD,IAAK,UAAW,IAAK,WAAY,IAAK,YACrCy6O,EAAS,GACNz6O,EAAEw8S,aAAY/hE,EAAO+hE,WAAatuB,GAAaluR,EAAEw8S,aACjDx8S,EAAEy8S,eAAchiE,EAAOgiE,aAAevuB,GAAaluR,EAAEy8S,eACxD9rE,EAAO4rE,QAAQ5hU,KAAK8/P,GACpB,MACD,IAAK,YAGL,IAAK,UAAW,MAChB,IAAK,QAAS,IAAK,SACnB,IAAK,UAGL,IAAK,WAAY,MACjB,IAAK,SAAU,IAAK,UACpB,IAAK,WAGL,IAAK,SAAU,MACf,IAAK,OAAQ,IAAK,QAClB,IAAK,SAGL,IAAK,YAAa,MAClB,IAAK,UAAW,IAAK,WACrB,IAAK,YAAa,MAGlB,IAAK,YAAa,IAAK,aAAc,IAAK,cAC1C,IAAK,cAAe,MAGpB,IAAK,cAAe,IAAK,eAAgB,IAAK,gBAC9C,IAAK,gBAAiB,MAGtB,IAAK,YAAa,IAAK,aAAc,IAAK,cAC1C,IAAK,cAAe,MAGpB,IAAK,SAAU,IAAK,UAAW,IAAK,WACpC,IAAK,WAAY,MAGjB,IAAK,OAAQ,IAAK,QAAS,IAAK,SAChC,IAAK,SAAU,MAGf,IAAK,SAAU,IAAK,UACnB,MACD,IAAK,WAAY,IAAK,WAAY,MAGlC,IAAK,UAAW,IAAK,WAAY,IAAK,YAAa,MACnD,IAAK,OAAQjL,GAAO,EAAM,MAC1B,IAAK,SAAUA,GAAO,EAAO,MAC7B,QAAS,GAAGtpD,GAAQA,EAAKgpG,MACpB1/C,EAAM,MAAM,IAAInyP,MAAM,gBAAkB2iB,EAAE,GAAK,mBAsUrB08S,CAAcr1T,EAAGspP,EAAQ4qE,EAAQr1H,IAM9D7+L,EAAElL,EAAK6iC,MAAM+7R,MAlGlB,SAAuB1zT,EAAGspP,EAAQzqD,GAEjC,IAAIy2H,EADJhsE,EAAOisE,OAAS,GAEhB,IAAIptE,GAAO,GACVnoP,EAAE,GAAG23B,MAAM4tQ,KAAW,IAAIppS,SAAQ,SAASvF,GAC3C,IAAI+hB,EAAI+sR,GAAY9uS,GAAI/H,EAAI,EAC5B,OAAOi3S,GAASntR,EAAE,KACjB,IAAK,WAAY,IAAK,YAAa,IAAK,aAAc,IAAK,aAAc,MAGzE,IAAK,MAAO,IAAK,QAGhB,WAFA28S,EAAK38S,GACK,GACN9pB,EAAI,EAAGA,EAAIklU,GAAYnlU,SAAUC,EAAMymU,EAAGvB,GAAYllU,MACzDymU,EAAGvB,GAAYllU,IAAM0mG,SAAS+/N,EAAGvB,GAAYllU,IAAK,KACnD,IAAIA,EAAI,EAAGA,EAAImlU,GAAYplU,SAAUC,EAAMymU,EAAGtB,GAAYnlU,MACzDymU,EAAGtB,GAAYnlU,IAAMg4S,GAAayuB,EAAGtB,GAAYnlU,MAClD,GAAGymU,EAAGnoB,SAAW,IAChB,IAAIt+S,EAAI,IAAOA,EAAI,KAAQA,EAAG,GAAGy6P,EAAO6qE,UAAUmB,EAAGnoB,WAAa7jD,EAAO6qE,UAAUtlU,GAAI,CAAEymU,EAAGnoB,SAAWt+S,EAAG,MAE3Gy6P,EAAOisE,OAAOjiU,KAAKgiU,GAAK,MACzB,IAAK,QAAS,MAGd,IAAK,aAAc,IAAK,eACvB,IAAI7kE,EAAY,GACb93O,EAAE68S,WAAU/kE,EAAU+kE,SAAW78S,EAAE68S,UACnC78S,EAAE88S,aAAYhlE,EAAUglE,WAAa98S,EAAE88S,YACrB,MAAlB98S,EAAE+8S,eAAsBjlE,EAAUilE,aAAe/8S,EAAE+8S,cACnD/8S,EAAEg9S,SAAQllE,EAAUklE,OAASh9S,EAAEg9S,QAC/Bh9S,EAAEi9S,WAAUnlE,EAAUmlE,SAAW/uB,GAAaluR,EAAEi9S,WACnDN,EAAG7kE,UAAYA,EACf,MACD,IAAK,eAGL,IAAK,cACJ,MACD,IAAK,gBAAiB,IAAK,gBAAiB,MAG5C,IAAK,oBAAqBtI,GAAO,EAAM,MACvC,IAAK,sBAAuBA,GAAO,EAAO,MAG1C,IAAK,UAAW,IAAK,WAAY,IAAK,YAAa,MACnD,IAAK,OAAQA,GAAO,EAAM,MAC1B,IAAK,SAAUA,GAAO,EAAO,MAC7B,QAAS,GAAGtpD,GAAQA,EAAKgpG,MACpB1/C,EAAM,MAAM,IAAInyP,MAAM,gBAAkB2iB,EAAE,GAAK,mBAiDtBk9S,CAAc71T,EAAGspP,EAAQzqD,GAOlDyqD,GA5BUA,IAgCdwsE,GAAkB7tB,GAAU,aAAc,KAAM,CACnD,MAASK,GAAMqmB,KAAK,GACpB,WAAYrmB,GAAM2N,KAKnB,SAAS8f,GAAcrlF,EAAI7xC,GAC1B,IAAuC79I,EAAnC7uD,EAAI,CAACkzS,GAAYywB,IAYrB,OAXGplF,EAAGq8C,KAAsC,OAA9B/rO,EApIf,SAAuBg1Q,GACtB,IAAI7jU,EAAI,CAAC,aAIT,MAHA,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAO,GAAgB,MAAMgK,SAAQ,SAAS/E,GACpE,IAAI,IAAIvI,EAAIuI,EAAE,GAAIvI,GAAKuI,EAAE,KAAMvI,EAAe,MAATmnU,EAAGnnU,KAAYsD,EAAEA,EAAEvD,QAAWq5S,GAAU,SAAS,KAAK,CAACkF,SAASt+S,EAAEulU,WAAW9tB,GAAU0vB,EAAGnnU,UAEhH,IAAbsD,EAAEvD,OAAqB,IAC1BuD,EAAEA,EAAEvD,QAAU,aACduD,EAAE,GAAK81S,GAAU,UAAW,KAAM,CAAE/8N,MAAM/4E,EAAEvD,OAAO,IAAKmR,QAAQ,KAAM,KAC/D5N,EAAEgO,KAAK,KA4HI81T,CAAcvlF,EAAGq8C,QAAe56R,EAAEA,EAAEvD,QAAUoyD,GAChE7uD,EAAEA,EAAEvD,QAAU,oIACduD,EAAEA,EAAEvD,QAAU,2HACduD,EAAEA,EAAEvD,QAAU,0FACduD,EAAEA,EAAEvD,QAAU,gGACVoyD,EApEL,SAAuBk1Q,GACtB,IAAI/jU,EAAI,GAMR,OALAA,EAAEA,EAAEvD,QAAWq5S,GAAU,UAAU,MACnCiuB,EAAQ/5T,SAAQ,SAASmB,GACxBnL,EAAEA,EAAEvD,QAAWq5S,GAAU,KAAM,KAAM3qS,MAEtCnL,EAAEA,EAAEvD,QAAU,aACE,IAAbuD,EAAEvD,OAAqB,IAC1BuD,EAAE,GAAK81S,GAAU,UAAU,KAAM,CAAC/8N,MAAM/4E,EAAEvD,OAAO,IAAImR,QAAQ,KAAK,KAC3D5N,EAAEgO,KAAK,KA2DNg2T,CAAct3H,EAAKq3H,YAAW/jU,EAAEA,EAAEvD,QAAU,GACpDuD,EAAEA,EAAEvD,QAAU,uFACduD,EAAEA,EAAEvD,QAAU,oBACduD,EAAEA,EAAEvD,QAAU,uGAEXuD,EAAEvD,OAAO,IAAIuD,EAAEA,EAAEvD,QAAU,gBAAmBuD,EAAE,GAAGA,EAAE,GAAG4N,QAAQ,KAAK,MACjE5N,EAAEgO,KAAK,IAQf,SAASi2T,GAAavnU,EAAG2G,EAAGrD,GACvBA,IAAGA,EAAIsnS,GAAQ,EAAI,EAAIjkS,EAAE5G,SAC7BuD,EAAE0jS,YAAY,EAAGhnS,GACjBy/S,GAAmB94S,EAAGrD,GACtB,IAAI8nB,EAAO9nB,EAAEvD,OAASuD,EAAE2d,EAAK3d,EAAEqC,MAAM,EAAGrC,EAAE2d,GAAK3d,EAE/C,OADU,MAAPA,EAAE2d,IAAW3d,EAAE2d,EAAI3d,EAAEvD,QACjBqrB,EA7BR+4R,GAAKqjB,IAAM,6EAoGX,IAqBIC,GAAuBhzB,EArBL,CACrB,OACA,QACA,aACA,WACA,YACA,iBACA,eACA,WACA,SACA,WACA,cACA,kBACA,gBACA,YACA,UACA,YACA,eACA,UACA,aAIGizB,GAAgB3rB,GACpB,SAAS4rB,GAAcnnT,EAAMld,GACxBA,IAAGA,EAAIsnS,GAAQ,KACnB,IAAIg9B,EAAMH,GAAoBjnT,EAAK0lT,aACzB,MAAP0B,IAAaA,EAAM,IACtBtkU,EAAE0jS,YAAY,EAAG4gC,GACjB,IAAIx7T,EAAI,EACR,GAAU,IAAPw7T,EAMF,IAJAhmB,GAAe,CAACC,KAAK,GAAIv+S,GAEzBs+S,GAAe,CAACC,KAAK,GAAIv+S,GAEnB8I,EAAI,KAAMA,EAAG9I,EAAE0jS,YAAY,EAAG,OAC9B,CACN,KAAM56R,EAAI,IAAKA,EAAG9I,EAAE0jS,YAAY,EAAG,GAEnC,KAAM56R,EAAI,KAAMA,EAAG9I,EAAE0jS,YAAY,EAAG,GAUrC,OAAO1jS,EAAEvD,OAASuD,EAAE2d,EAAI3d,EAAEqC,MAAM,EAAGrC,EAAE2d,GAAK3d,EAW3C,SAASukU,GAAY5hU,EAAMkqT,EAAO7sT,GAcjC,OAbIA,IAAGA,EAAIsnS,GAAQ,KACnBtnS,EAAE0jS,YAAY,EAAGmpB,GAAO,GACxB7sT,EAAE0jS,YAAY,EAAG/gS,EAAKq4S,UAAU,GAChCh7S,EAAE0jS,YAAY,EAAG,GACjB1jS,EAAE0jS,YAAY,EAAG,GACjB1jS,EAAE0jS,YAAY,EAAG,GACjB1jS,EAAE0jS,YAAY,EAAG,GACjB1jS,EAAE0jS,YAAY,EAAG,GAEjB1jS,EAAE0jS,YAAY,EADH,GAEX1jS,EAAE0jS,YAAY,EAAG,GACjB1jS,EAAE0jS,YAAY,EAAG,GACjB1jS,EAAE0jS,YAAY,EAAG,GACV1jS,EAIR,SAASwkU,GAAW7hU,EAAM3C,GAMzB,OALIA,IAAGA,EAAIsnS,GAAQ,KACnBtnS,EAAE0jS,YAAY,EAAG,GACjB1jS,EAAE0jS,YAAY,EAAG,GACjB1jS,EAAE0jS,YAAY,EAAG,GACjB1jS,EAAE0jS,YAAY,EAAG,GACV1jS,EAGR,IAAIykU,GAAkBhsB,GA0MtB,SAASisB,GAAcnmF,EAAI7xC,GAC1B,IAAI6sG,EAAKP,KAcT,OAbAM,GAAaC,EAAI,sBA7GlB,SAAwBA,EAAIsqB,GAC3B,GAAIA,EAAJ,CACA,IAAIt8B,EAAM,EACV,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAO,GAAgB,MAAMv9R,SAAQ,SAAS/E,GACtE,IAAI,IAAIvI,EAAIuI,EAAE,GAAIvI,GAAKuI,EAAE,KAAMvI,EAAe,MAATmnU,EAAGnnU,MAAc6qS,KAG3C,GAAPA,IACH+R,GAAaC,EAAI,eAAgByC,GAAezU,IAChD,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAO,GAAgB,MAAMv9R,SAAQ,SAAS/E,GACtE,IAAI,IAAIvI,EAAIuI,EAAE,GAAIvI,GAAKuI,EAAE,KAAMvI,EAAe,MAATmnU,EAAGnnU,IAAY48S,GAAaC,EAAI,SAAU0qB,GAAavnU,EAAGmnU,EAAGnnU,QAEjG48S,GAAaC,EAAI,gBAkGjBorB,CAAeprB,EAAIh7D,EAAGq8C,KA/FvB,SAAyB2e,GAIxBD,GAAaC,EAAI,gBAAiByC,GAHxB,IAIV1C,GAAaC,EAAI,UAlOlB,SAAuB+gB,EAAMt6T,GACxBA,IAAGA,EAAIsnS,GAAQ,MACnBtnS,EAAE0jS,YAAY,EAAa,GAAV42B,EAAK9vJ,IA1vKvB,SAAyB8vJ,EAAMt6T,GACzBA,IAAGA,EAAIsnS,GAAQ,IACpB,IAAIs9B,GACFtK,EAAKhjE,OAAS,EAAO,IACrBgjE,EAAKG,OAAS,EAAO,IACrBH,EAAKE,QAAU,GAAO,IACtBF,EAAKC,OAAS,GAAO,IACrBD,EAAK8H,SAAW,GAAO,IACvB9H,EAAKnqF,OAAS,IAAO,GACvBnwO,EAAE0jS,YAAY,EAAGkhC,GACjB5kU,EAAE0jS,YAAY,EAAG,GAivKjBmhC,CAAgBvK,EAAMt6T,GACtBA,EAAE0jS,YAAY,EAAG42B,EAAKjjE,KAAO,IAAS,KACtC,IAAIytE,EAAM,EACW,eAAlBxK,EAAK+H,UAA4ByC,EAAM,EAChB,aAAlBxK,EAAK+H,YAA0ByC,EAAM,GAC7C9kU,EAAE0jS,YAAY,EAAGohC,GACjB9kU,EAAE0jS,YAAY,EAAG42B,EAAK/iE,WAAa,GACnCv3P,EAAE0jS,YAAY,EAAG42B,EAAKK,QAAU,GAChC36T,EAAE0jS,YAAY,EAAG42B,EAAKyK,SAAW,GACjC/kU,EAAE0jS,YAAY,EAAG,GACjB4a,GAAegc,EAAK5iE,MAAO13P,GAC3B,IAAIo7B,EAAS,EAKb,MAJkB,SAAfk/R,EAAKl/R,SAAmBA,EAAS,GAClB,SAAfk/R,EAAKl/R,SAAmBA,EAAS,GACpCp7B,EAAE0jS,YAAY,EAAGtoQ,GACjB+gR,GAAmBme,EAAKh4T,KAAMtC,GACvBA,EAAEvD,OAASuD,EAAE2d,EAAI3d,EAAEqC,MAAM,EAAGrC,EAAE2d,GAAK3d,EA+MdglU,CAAc,CACzCx6J,GAAG,GACHktF,MAAO,CAAC8mD,MAAM,GACdl8S,KAAM,UACNq4T,OAAQ,EACRv/R,OAAQ,WAGTk+Q,GAAaC,EAAI,eAmFjB0rB,CAAgB1rB,GAhFjB,SAAyBA,GAIxBD,GAAaC,EAAI,gBAAiByC,GAHxB,IAIV1C,GAAaC,EAAI,UAAW8qB,GAAc,CAACzB,YAAY,UACvDtpB,GAAaC,EAAI,UAAW8qB,GAAc,CAACzB,YAAY,aAEvDtpB,GAAaC,EAAI,eAyEjB2rB,CAAgB3rB,GAtEjB,SAA2BA,GAI1BD,GAAaC,EAAI,kBAAmByC,GAH1B,IAIV1C,GAAaC,EAAI,YA7IlB,SAAyBt4C,EAAQjhQ,GAQhC,OAPIA,IAAGA,EAAIsnS,GAAQ,KACnBtnS,EAAE0jS,YAAY,EAAG,GACjB8gC,GAAW,EAAMxkU,GACjBwkU,GAAW,EAAMxkU,GACjBwkU,GAAW,EAAMxkU,GACjBwkU,GAAW,EAAMxkU,GACjBwkU,GAAW,EAAMxkU,GACVA,EAAEvD,OAASuD,EAAE2d,EAAI3d,EAAEqC,MAAM,EAAGrC,EAAE2d,GAAK3d,EAqIZmlU,IAE9B7rB,GAAaC,EAAI,iBAgEjB6rB,CAAkB7rB,GA7DnB,SAAgCA,GAE/BD,GAAaC,EAAI,uBAAwByC,GAD/B,IAEV1C,GAAaC,EAAI,QAASgrB,GAAY,CACrCvpB,SAAU,EACVqqB,OAAU,EACVC,OAAU,EACVC,SAAU,GACR,QAEHjsB,GAAaC,EAAI,sBAoDjBisB,CAAuBjsB,GAjDxB,SAA2BA,EAAI52S,GAC9B22S,GAAaC,EAAI,kBAAmByC,GAAer5S,EAAKlG,SACxDkG,EAAKqH,SAAQ,SAASmB,GAAKmuS,GAAaC,EAAI,QAASgrB,GAAYp5T,EAAE,OAEnEmuS,GAAaC,EAAI,iBA8CjBksB,CAAkBlsB,EAAI7sG,EAAKq3H,SA3C5B,SAA0BxqB,GAGzBD,GAAaC,EAAI,iBAAkByC,GAFzB,IAGV1C,GAAaC,EAAI,WA9JlB,SAAwBx/C,EAAO/5P,GAO9B,OANIA,IAAGA,EAAIsnS,GAAQ,KACnBtnS,EAAE0jS,YAAY,EAAG3pC,EAAM2rE,MACvB1lU,EAAE0jS,YAAY,EAAG,GACjB1jS,EAAE0jS,YAAY,GAAI3pC,EAAM4rE,WACxB3lU,EAAE0jS,YAAY,EAAG,GACjB+Z,GAA2B1jD,EAAMz3P,MAAQ,GAAItC,GACtCA,EAAEvD,OAASuD,EAAE2d,EAAI3d,EAAEqC,MAAM,EAAGrC,EAAE2d,GAAK3d,EAuJb4lU,CAAe,CAC3CF,KAAK,EACLC,UAAU,EACVrjU,KAAK,YAGNg3S,GAAaC,EAAI,gBAkCjBssB,CAAiBtsB,GA/BlB,SAAwBA,GAGvBD,GAAaC,EAAI,eAAgByC,GAFvB,IAIV1C,GAAaC,EAAI,cA2BjBusB,CAAevsB,GAxBhB,SAA+BA,GAG9BD,GAAaC,EAAI,sBAvKlB,SAAmChS,EAAKw+B,EAAeC,GACtD,IAAIhmU,EAAIsnS,GAAQ,MAIhB,OAHAtnS,EAAE0jS,YAAY,EAmKJ,GAlKV+Z,GAoKuE,oBApK7Bz9S,GAC1Cy9S,GAmK4F,oBAnKlDz9S,GACnCA,EAAEvD,OAASuD,EAAE2d,EAAI3d,EAAEqC,MAAM,EAAGrC,EAAE2d,GAAK3d,EAkKFimU,IAExC3sB,GAAaC,EAAI,qBAoBjB2sB,CAAsB3sB,GAGtBD,GAAaC,EAAI,oBACVA,EAAG76R,MAEXmiS,GAAKslB,MAAQ,4EAGb,IAAIC,GAAqB,CACxB,WAAY,WAAY,WAAY,WACpC,eAAgB,eAAgB,eAChC,eAAgB,eAAgB,eAChC,aAAc,iBAGf,SAASC,GAAgBx4T,EAAGk0T,EAAQr1H,GACnCq1H,EAAOS,cAAcC,UAAY,GACjC,IAAI/qE,EAAQ,IACX7pP,EAAE,GAAG23B,MAAM4tQ,KAAW,IAAIppS,SAAQ,SAASvF,GAC3C,IAAI+hB,EAAI+sR,GAAY9uS,GACpB,OAAO+hB,EAAE,IAER,IAAK,eAAgB,IAAK,iBAAkB,MAG5C,IAAK,aACJkxO,EAAMR,IAAM1wO,EAAE5hB,IAAK,MAGpB,IAAK,YACJ8yP,EAAMR,IAAM1wO,EAAE8/S,QAAS,MAcxB,IAAK,UAAW,IAAK,WACrB,IAAK,UAAW,IAAK,WACrB,IAAK,UAAW,IAAK,WACrB,IAAK,UAAW,IAAK,WACrB,IAAK,cAAe,IAAK,eACzB,IAAK,cAAe,IAAK,eACzB,IAAK,cAAe,IAAK,eACzB,IAAK,cAAe,IAAK,eACzB,IAAK,cAAe,IAAK,eACzB,IAAK,cAAe,IAAK,eACzB,IAAK,YAAa,IAAK,aACvB,IAAK,eAAgB,IAAK,gBACF,MAAnB9/S,EAAE,GAAG6pH,OAAO,IACf0xL,EAAOS,cAAcC,UAAU2D,GAAmB/2S,QAAQ7I,EAAE,KAAOkxO,EACnEA,EAAQ,IAERA,EAAMp1P,KAAOkkB,EAAE,GAAGnkB,MAAM,EAAGmkB,EAAE,GAAG/pB,OAAS,GAE1C,MAED,QAAS,GAAGiwM,GAAQA,EAAKgpG,IAAK,MAAM,IAAI7xS,MAAM,gBAAkB2iB,EAAE,GAAK,qBAM1E,SAAS+/S,MAGT,SAASC,MAET,IAAIC,GAAY,6CACZC,GAAY,+CACZC,GAAY,6CAqBZC,GAAe,qDAGnB,SAASC,GAAgBlkU,EAAM+pM,GAE9B,IAAI/pM,GAAwB,IAAhBA,EAAKlG,OAAc,OAAOoqU,GAAgBC,MAEtD,IAAIj5T,EACAk0T,EAAS,GAGb,KAAKl0T,EAAElL,EAAK6iC,MAAMohS,KAAgB,MAAM,IAAI/iU,MAAM,oCAGlD,OAhCD,SAA6BlB,EAAMo/T,EAAQr1H,GAG1C,IAAI7+L,EAFJk0T,EAAOS,cAAgB,GAIvB,CAEC,CAAC,YAAaiE,GAAWJ,IAEzB,CAAC,aAAcK,GAAWH,IAE1B,CAAC,YAAaI,GAAWH,KACxBx8T,SAAQ,SAASmqB,GAClB,KAAKtmB,EAAElL,EAAK6iC,MAAMrR,EAAE,KAAM,MAAM,IAAItwB,MAAMswB,EAAE,GAAK,+BACjDA,EAAE,GAAGtmB,EAAGk0T,EAAQr1H,MAgBjBq6H,CAAoBl5T,EAAE,GAAIk0T,EAAQr1H,GAClCq1H,EAAO3kE,IAAMz6P,EACNo/T,EAGR,SAAS+E,GAAYE,EAAQt6H,GAC5B,GAAGA,GAAQA,EAAKu6H,UAAW,OAAOv6H,EAAKu6H,UACvC,GAAGD,GAA+B,iBAAdA,EAAO5pE,IAAiB,OAAO4pE,EAAO5pE,IAC1D,IAAIp9P,EAAI,CAACkzS,IAsKT,OArKAlzS,EAAEA,EAAEvD,QAAU,gGACduD,EAAEA,EAAEvD,QAAW,oBAEfuD,EAAEA,EAAEvD,QAAY,8BAChBuD,EAAEA,EAAEvD,QAAa,+DACjBuD,EAAEA,EAAEvD,QAAa,2DACjBuD,EAAEA,EAAEvD,QAAa,2CACjBuD,EAAEA,EAAEvD,QAAa,2CACjBuD,EAAEA,EAAEvD,QAAa,mDACjBuD,EAAEA,EAAEvD,QAAa,mDACjBuD,EAAEA,EAAEvD,QAAa,mDACjBuD,EAAEA,EAAEvD,QAAa,mDACjBuD,EAAEA,EAAEvD,QAAa,mDACjBuD,EAAEA,EAAEvD,QAAa,mDACjBuD,EAAEA,EAAEvD,QAAa,+CACjBuD,EAAEA,EAAEvD,QAAa,qDACjBuD,EAAEA,EAAEvD,QAAY,iBAEhBuD,EAAEA,EAAEvD,QAAY,+BAChBuD,EAAEA,EAAEvD,QAAa,gBACjBuD,EAAEA,EAAEvD,QAAc,gCAClBuD,EAAEA,EAAEvD,QAAc,sBAClBuD,EAAEA,EAAEvD,QAAc,sBAClBuD,EAAEA,EAAEvD,QAAc,8CAClBuD,EAAEA,EAAEvD,QAAc,2CAClBuD,EAAEA,EAAEvD,QAAc,wCAClBuD,EAAEA,EAAEvD,QAAc,0CAClBuD,EAAEA,EAAEvD,QAAc,qDAClBuD,EAAEA,EAAEvD,QAAc,qDAClBuD,EAAEA,EAAEvD,QAAc,4CAClBuD,EAAEA,EAAEvD,QAAc,2CAClBuD,EAAEA,EAAEvD,QAAc,4CAClBuD,EAAEA,EAAEvD,QAAc,4CAClBuD,EAAEA,EAAEvD,QAAc,+CAClBuD,EAAEA,EAAEvD,QAAc,2CAClBuD,EAAEA,EAAEvD,QAAc,2CAClBuD,EAAEA,EAAEvD,QAAc,8CAClBuD,EAAEA,EAAEvD,QAAc,0DAClBuD,EAAEA,EAAEvD,QAAc,wDAClBuD,EAAEA,EAAEvD,QAAc,wDAClBuD,EAAEA,EAAEvD,QAAc,6CAClBuD,EAAEA,EAAEvD,QAAc,4CAClBuD,EAAEA,EAAEvD,QAAc,6CAClBuD,EAAEA,EAAEvD,QAAc,2CAClBuD,EAAEA,EAAEvD,QAAc,uDAClBuD,EAAEA,EAAEvD,QAAc,6CAClBuD,EAAEA,EAAEvD,QAAc,6CAClBuD,EAAEA,EAAEvD,QAAc,+CAClBuD,EAAEA,EAAEvD,QAAc,kDAClBuD,EAAEA,EAAEvD,QAAc,qDAClBuD,EAAEA,EAAEvD,QAAc,qDAClBuD,EAAEA,EAAEvD,QAAc,sDAClBuD,EAAEA,EAAEvD,QAAc,6CAClBuD,EAAEA,EAAEvD,QAAa,iBACjBuD,EAAEA,EAAEvD,QAAa,gBACjBuD,EAAEA,EAAEvD,QAAc,gCAClBuD,EAAEA,EAAEvD,QAAc,sBAClBuD,EAAEA,EAAEvD,QAAc,sBAClBuD,EAAEA,EAAEvD,QAAc,8CAClBuD,EAAEA,EAAEvD,QAAc,2CAClBuD,EAAEA,EAAEvD,QAAc,wCAClBuD,EAAEA,EAAEvD,QAAc,0CAClBuD,EAAEA,EAAEvD,QAAc,2CAClBuD,EAAEA,EAAEvD,QAAc,2CAClBuD,EAAEA,EAAEvD,QAAc,4CAClBuD,EAAEA,EAAEvD,QAAc,2CAClBuD,EAAEA,EAAEvD,QAAc,4CAClBuD,EAAEA,EAAEvD,QAAc,4CAClBuD,EAAEA,EAAEvD,QAAc,8CAClBuD,EAAEA,EAAEvD,QAAc,2CAClBuD,EAAEA,EAAEvD,QAAc,2CAClBuD,EAAEA,EAAEvD,QAAc,8CAClBuD,EAAEA,EAAEvD,QAAc,0DAClBuD,EAAEA,EAAEvD,QAAc,wDAClBuD,EAAEA,EAAEvD,QAAc,wDAClBuD,EAAEA,EAAEvD,QAAc,6CAClBuD,EAAEA,EAAEvD,QAAc,4CAClBuD,EAAEA,EAAEvD,QAAc,6CAClBuD,EAAEA,EAAEvD,QAAc,2CAClBuD,EAAEA,EAAEvD,QAAc,uDAClBuD,EAAEA,EAAEvD,QAAc,6CAClBuD,EAAEA,EAAEvD,QAAc,6CAClBuD,EAAEA,EAAEvD,QAAc,+CAClBuD,EAAEA,EAAEvD,QAAc,kDAClBuD,EAAEA,EAAEvD,QAAc,qDAClBuD,EAAEA,EAAEvD,QAAc,2CAClBuD,EAAEA,EAAEvD,QAAc,sDAClBuD,EAAEA,EAAEvD,QAAc,6CAClBuD,EAAEA,EAAEvD,QAAa,iBACjBuD,EAAEA,EAAEvD,QAAY,kBAEhBuD,EAAEA,EAAEvD,QAAY,8BAChBuD,EAAEA,EAAEvD,QAAa,mBACjBuD,EAAEA,EAAEvD,QAAc,wDAClBuD,EAAEA,EAAEvD,QAAc,gCAClBuD,EAAEA,EAAEvD,QAAe,YACnBuD,EAAEA,EAAEvD,QAAgB,4GACpBuD,EAAEA,EAAEvD,QAAgB,gHACpBuD,EAAEA,EAAEvD,QAAgB,iHACpBuD,EAAEA,EAAEvD,QAAe,aACnBuD,EAAEA,EAAEvD,QAAe,qCACnBuD,EAAEA,EAAEvD,QAAc,gBAClBuD,EAAEA,EAAEvD,QAAc,gCAClBuD,EAAEA,EAAEvD,QAAe,YACnBuD,EAAEA,EAAEvD,QAAgB,oIACpBuD,EAAEA,EAAEvD,QAAgB,wIACpBuD,EAAEA,EAAEvD,QAAe,aACnBuD,EAAEA,EAAEvD,QAAe,qCACnBuD,EAAEA,EAAEvD,QAAc,gBAClBuD,EAAEA,EAAEvD,QAAa,oBACjBuD,EAAEA,EAAEvD,QAAa,iBACjBuD,EAAEA,EAAEvD,QAAc,mMAClBuD,EAAEA,EAAEvD,QAAc,yIAClBuD,EAAEA,EAAEvD,QAAc,yIAClBuD,EAAEA,EAAEvD,QAAa,kBACjBuD,EAAEA,EAAEvD,QAAa,qBACjBuD,EAAEA,EAAEvD,QAAc,kBAClBuD,EAAEA,EAAEvD,QAAe,gBACnBuD,EAAEA,EAAEvD,QAAgB,oJACpBuD,EAAEA,EAAEvD,QAAe,iBACnBuD,EAAEA,EAAEvD,QAAc,mBAClBuD,EAAEA,EAAEvD,QAAc,kBAClBuD,EAAEA,EAAEvD,QAAe,gBACnBuD,EAAEA,EAAEvD,QAAgB,oJACpBuD,EAAEA,EAAEvD,QAAe,iBACnBuD,EAAEA,EAAEvD,QAAc,mBAClBuD,EAAEA,EAAEvD,QAAc,kBAClBuD,EAAEA,EAAEvD,QAAe,gBACnBuD,EAAEA,EAAEvD,QAAgB,oJACpBuD,EAAEA,EAAEvD,QAAe,iBACnBuD,EAAEA,EAAEvD,QAAe,6LACnBuD,EAAEA,EAAEvD,QAAe,mDACnBuD,EAAEA,EAAEvD,QAAc,mBAClBuD,EAAEA,EAAEvD,QAAa,sBACjBuD,EAAEA,EAAEvD,QAAa,qBACjBuD,EAAEA,EAAEvD,QAAc,wDAClBuD,EAAEA,EAAEvD,QAAc,gCAClBuD,EAAEA,EAAEvD,QAAe,YACnBuD,EAAEA,EAAEvD,QAAgB,4GACpBuD,EAAEA,EAAEvD,QAAgB,sIACpBuD,EAAEA,EAAEvD,QAAgB,kHACpBuD,EAAEA,EAAEvD,QAAe,aACnBuD,EAAEA,EAAEvD,QAAe,2FACnBuD,EAAEA,EAAEvD,QAAc,gBAClBuD,EAAEA,EAAEvD,QAAc,gCAClBuD,EAAEA,EAAEvD,QAAe,YACnBuD,EAAEA,EAAEvD,QAAgB,4GACpBuD,EAAEA,EAAEvD,QAAgB,kHACpBuD,EAAEA,EAAEvD,QAAe,aACnBuD,EAAEA,EAAEvD,QAAe,yFACnBuD,EAAEA,EAAEvD,QAAc,gBAClBuD,EAAEA,EAAEvD,QAAa,sBACjBuD,EAAEA,EAAEvD,QAAY,iBAChBuD,EAAEA,EAAEvD,QAAW,qBAEfuD,EAAEA,EAAEvD,QAAW,qBACfuD,EAAEA,EAAEvD,QAAY,YAChBuD,EAAEA,EAAEvD,QAAa,mSACjBuD,EAAEA,EAAEvD,QAAY,aAChBuD,EAAEA,EAAEvD,QAAY,YAChBuD,EAAEA,EAAEvD,QAAa,mSACjBuD,EAAEA,EAAEvD,QAAY,aAChBuD,EAAEA,EAAEvD,QAAW,sBACfuD,EAAEA,EAAEvD,QAAW,yBACfuD,EAAEA,EAAEvD,QAAU,aACPuD,EAAEgO,KAAK,IA8Cf,SAASk5T,GAAcrrD,GACtB,IAAIsrD,EAAUtrD,EAAKioB,WAAW,GAC1B6U,EAAK98B,EAAKioB,WAAW,GAAK,EAC1B9jS,EAAI,CAACmnU,GACT,OAAOA,GACN,KAAK,EAAM,KAAK,EAAM,KAAK,EAAM,KAAK,EACtC,KAAK,EAAM,KAAK,GAAM,KAAK,GAAM,KAAK,GACrCnnU,EAAE,GAjCL,SAA4B67Q,GAC3B,IAAI77Q,EAAI,GAGR,OAFAA,EAAEonU,SAAWvrD,EAAKioB,WAAW,GAC7B9jS,EAAEqnU,WAAaxrD,EAAKioB,WAAW,GACxB9jS,EAAEonU,UACR,KAAK,EAAGvrD,EAAKl+P,GAAK,EAAG,MACrB,KAAK,EAAG3d,EAAEsnU,UAUZ,SAAqBzrD,EAAMp/Q,GAC1B,OAAOg8S,GAAU58B,EAXwB,GAAlB0rD,CAAY1rD,GAAU,MAC5C,KAAK,EAAG77Q,EAAEsnU,UAAY5c,GAAe7uC,GAAU,MAC/C,KAAK,EAAG77Q,EAAEsnU,UAXZ,SAA0BzrD,GAAQ,OAAOA,EAAKioB,WAAW,GAWjC0jC,CAAiB3rD,GAAU,MACjD,KAAK,EAAGA,EAAKl+P,GAAK,EAGnB,OADAk+P,EAAKl+P,GAAK,EACH3d,EAqBEynU,CAAmB5rD,GAAW,MACtC,KAAK,EAAM77Q,EAAE,GAbf,SAA6B67Q,EAAMp/Q,GAClC,OAAOg8S,GAAU58B,EAAMp/Q,GAYJirU,CAAoB7rD,EAAM88B,GAAK,MACjD,KAAK,GAAM,KAAK,GAAM34S,EAAE,GAAK67Q,EAAKioB,WAAkB,IAAP6U,EAAW,EAAI,GAAI,MAChE,QAAS,MAAM,IAAI90S,MAAM,8BAAgCsjU,EAAU,IAAMxuB,GAE1E,OAAO34S,EA4IR6gT,GAAK8mB,IAAM,4EACX9mB,GAAK+mB,KAAO,8EAsBZ,IAAIC,GAAW,KACf,SAASC,GAAmBxlB,EAAKpC,GAYhC,IAXA,IAAIvhE,EAAQ,CAAC,MAAO,OAEhBopF,EAAO,CAAC,SAASppF,EAAM,GAAGA,EAAM,GAAGA,EAAM,GAAGA,EAAM,GAAG,OAAO3wO,KAAK,KACjEhO,EAAI,CACP81S,GAAU,MAAO,KAAM,CAAE,UAz2NlB,gCAy2NuC,UAAWM,GAAU,UAAWA,GAAU,WA12NjF,2BA02N0GxoS,QAAQ,MAAM,KAC/HkoS,GAAU,gBAAiBA,GAAU,UAAW,KAAM,CAAC,QAAQ,OAAQ,KAAOwM,IAAO,CAAC,QAAQ,SAC9FxM,GAAU,cAAe,CACxBA,GAAU,WAAY,KAAM,CAACkyB,UAAU,UACvClyB,GAAU,SAAU,KAAM,CAACmyB,gBAAgB,IAAK,gBAAgB,UAC/Dj6T,KAAK,IAAK,CAACqR,GAAG,cAAe,QAAQ,IAAK6oT,UAAUvpF,EAAM3wO,KAAK,KAAK0M,KAAKqtT,KAEtEF,GAAiB,IAANvlB,GAAYulB,IAAY,IAqCzC,OAnCA3nB,EAASl2S,SAAQ,SAASvF,GAC1B,IAAI0G,EAAIovS,GAAY91S,EAAE,IAClB0jU,EAAW,CAAC,OAAS,UAAW,KAAO,YACvB,YAAjBA,EAAS1mT,OAAoB0mT,EAASC,MAAQ,QACjD,IAAIC,EAA4B,YAAjBF,EAAS1mT,KAAqBq0R,GAAU,SAAU,KAAM,CAACr0R,KAAK,mBAAoB,QAAQ,SAAW,KAChH6mT,EAAUxyB,GAAU,SAAUuyB,EAAUF,KAG1CN,GAEF7nU,EAAIA,EAAEsI,OAAO,CACb,WAAautS,GAAW,CACvBx2R,GAAG,WAAawoT,GAChBpmT,KAAK,eACLs4O,MAAM,yFAA2Ft1P,EAAE,GAAG+yP,OAAS,qBAAuB,IACtI+wE,UAAU,UACVC,YAAY,YACR,IACJF,EACAxyB,GAAU,WAAY,KAZT,CAAE/vF,GAAG,IAAK,SAAW,MAalC+vF,GAAU,SAAU,KAAM,CAAC,gBAAgB,SAC3C,6DACA,mCACC,qBACA,qBAEAF,GAAS,WAAY,CAACzqS,EAAEA,EAAE,EAAG,EAAGA,EAAElG,EAAE,EAAG,EAAGkG,EAAEA,EAAE,EAAG,GAAIA,EAAElG,EAAE,EAAG,IAAI+I,KAAK,MACrE4nS,GAAS,aAAc,SACvBA,GAAS,QAAS1rS,OAAOiB,EAAElG,IAC3B2wS,GAAS,WAAY1rS,OAAOiB,EAAEA,IAC9B1G,EAAE,GAAG+yP,OAAS,GAAK,eACpB,kBACD,kBAEAx3P,EAAEmB,KAAK,UACAnB,EAAEgO,KAAK,IAEf6yS,GAAK4nB,KAAO,+EA+DZ,IAAIC,GAAgB5yB,GAAU,WAAY,KAAM,CAAE,MAASK,GAAMqmB,KAAK,KACtE,SAASmM,GAAmBhmU,GAC3B,IAAI3C,EAAI,CAACkzS,GAAYw1B,IAEjBE,EAAU,GAmBd,OAlBA5oU,EAAEmB,KAAK,aACPwB,EAAKqH,SAAQ,SAASvF,GAAKA,EAAE,GAAGuF,SAAQ,SAAS6kD,GAAK,IAAI9pD,EAAIovS,GAAUtlP,EAAE9pD,GACtE6jU,EAAQv5S,QAAQtqB,IAAM,IACzB6jU,EAAQznU,KAAK4D,GACb/E,EAAEmB,KAAK,WAAa4D,EAAI,oBAEzB/E,EAAEmB,KAAK,cACPnB,EAAEmB,KAAK,iBACPwB,EAAKqH,SAAQ,SAASe,GACrBA,EAAE,GAAGf,SAAQ,SAASmB,GAErBnL,EAAEmB,KAAK,iBAAmB4J,EAAE,GAAK,eAAiB69T,EAAQv5S,QAAQ8kR,GAAUhpS,EAAEpG,IAAM,YACpF/E,EAAEmB,KAAKy0S,GAAS,IAAY,MAAPzqS,EAAE0C,EAAY,GAAKsmS,GAAUhpS,EAAE0C,KACpD7N,EAAEmB,KAAK,2BAGTnB,EAAEmB,KAAK,kBACJnB,EAAEvD,OAAO,IAAKuD,EAAEA,EAAEvD,QAAU,cAAiBuD,EAAE,GAAGA,EAAE,GAAG4N,QAAQ,KAAK,MAChE5N,EAAEgO,KAAK,IAwBf,IAAI66T,GAAyB5sB,GA4C7B,SAAS6sB,GAAmBnmU,GAC3B,IAAI42S,EAAKP,KACL4vB,EAAU,GA2Bd,OA1BAtvB,GAAaC,EAAI,oBAEjBD,GAAaC,EAAI,0BACjB52S,EAAKqH,SAAQ,SAAS2rQ,GACrBA,EAAQ,GAAG3rQ,SAAQ,SAASmB,GACxBy9T,EAAQv5S,QAAQlkB,EAAEpG,IAAM,IAC3B6jU,EAAQznU,KAAKgK,EAAEpG,EAAE1C,MAAM,EAAE,KACzBi3S,GAAaC,EAAI,mBArDpB,SAAgC52S,GAAQ,OAAOw5S,GAAmBx5S,EAAKN,MAAM,EAAG,KAqDxC0mU,CAAuB59T,EAAEpG,WAGhEu0S,GAAaC,EAAI,wBAEjBD,GAAaC,EAAI,uBACjB52S,EAAKqH,SAAQ,SAAS2rQ,GACrBA,EAAQ,GAAG3rQ,SAAQ,SAASmB,GAC3BA,EAAEy9T,QAAUA,EAAQv5S,QAAQlkB,EAAEpG,GAC9B,IAAIswD,EAAQ,CAAChtD,EAAEkyS,GAAY5kC,EAAQ,IAAIvhP,EAAEmmR,GAAY5kC,EAAQ,KAC7D2jC,GAAaC,EAAI,kBA5EpB,SAA+B52S,EAAM3C,GAQpC,OAPQ,MAALA,IAAWA,EAAIsnS,GAAQ,KAC1BtnS,EAAE0jS,YAAY,EAAG/gS,EAAK,GAAGimU,SACzBzqB,GAAoBx7S,EAAK,GAAK3C,GAC9BA,EAAE0jS,YAAY,EAAG,GACjB1jS,EAAE0jS,YAAY,EAAG,GACjB1jS,EAAE0jS,YAAY,EAAG,GACjB1jS,EAAE0jS,YAAY,EAAG,GACV1jS,EAoE+BgpU,CAAsB,CAAC3zQ,EAAOlqD,KAC/DA,EAAE0C,GAAK1C,EAAE0C,EAAEpR,OAAS,GAAG68S,GAAaC,EAAI,iBAh+M9C,SAA8BxmR,EAAK/yB,GAElC,IAAIo8S,GAAQ,EAKZ,OAL4B,MAALp8S,IAAao8S,GAAQ,EAAMp8S,EAAIsnS,GAAQ,GAAK,EAAIv0Q,EAAIllB,EAAEpR,SAC7EuD,EAAE0jS,YAAY,EAAG,GACjByY,GAAmBppR,EAAIllB,EAAG7N,GAC1BA,EAAE0jS,YAAY,EAAG,GAzClB,SAAsBulC,EAAKjpU,GACrBA,IAAGA,EAAIsnS,GAAQ,IACpBtnS,EAAE0jS,YAAY,EAAGulC,EAAI3sB,KAAO,GAC5Bt8S,EAAE0jS,YAAY,EAAGulC,EAAI1sB,MAAQ,GAuC7B2sB,CAAa,CAAE5sB,IAAK,EAAGC,KAAM,GAAKv8S,GAC3Bo8S,EAAQp8S,EAAEqC,MAAM,EAAGrC,EAAE2d,GAAK3d,EAy9M8BmpU,CAAqBh+T,IAClFmuS,GAAaC,EAAI,wBACVpuS,EAAEy9T,cAGXtvB,GAAaC,EAAI,qBAEjBD,GAAaC,EAAI,kBACVA,EAAG76R,MAqBX,IAAI0qT,GAAU,CAAE,OAAQ,OAAQ,OAAQ,QAAS,OAEjDvoB,GAAKwoB,GAAK,kFACVxoB,GAAKyoB,GAAK,sEAQV,IAAIxT,GAAW,WACd,IAAIyT,EAAU,gFACVC,EAAS,CAAEvkU,EAAE,EAAEkG,EAAE,GACrB,SAASs+T,EAAO9qC,EAAGC,EAAGC,EAAGC,GACxB,IAAI4a,GAAO,EAAOC,GAAO,EAET,GAAb9a,EAAGpiS,OAAak9S,GAAO,EACF,KAAhB9a,EAAGxuJ,OAAO,KAAaspK,GAAO,EAAM9a,EAAKA,EAAGx8R,MAAM,GAAI,IAE9C,GAAby8R,EAAGriS,OAAai9S,GAAO,EACF,KAAhB5a,EAAGzuJ,OAAO,KAAaqpK,GAAO,EAAM5a,EAAKA,EAAGz8R,MAAM,GAAI,IAE9D,IAAIsjN,EAAIk5E,EAAGpiS,OAAO,EAAkB,EAAhB2mG,SAASy7L,EAAG,IAAM,EAAGj5E,EAAIk5E,EAAGriS,OAAO,EAAkB,EAAhB2mG,SAAS07L,EAAG,IAAM,EAI3E,OAFG4a,EAAM9zF,GAAK4jH,EAAOr+T,IAAUy6M,EAC5B+zF,EAAMh0F,GAAK6jH,EAAOvkU,IAAU0gN,EACxBi5E,GAAM8a,EAAO,GAAK,KAAOQ,GAAWt0F,IAAM+zF,EAAO,GAAK,KAAOM,GAAWt0F,GAEhF,OAAO,SAAkB+jH,EAAM/pU,GAE9B,OADA6pU,EAAS7pU,EACF+pU,EAAK97T,QAAQ27T,EAASE,IApBhB,GAwBXE,GAAY,iLACZlT,GACI,SAAkBiT,EAAM/pU,GAC9B,OAAO+pU,EAAK97T,QAAQ+7T,IAAW,SAASC,EAAIhrC,EAAIC,EAAIC,EAAI+qC,EAAIC,GAC3D,IAAI3+T,EAAIkvS,GAAWvb,IAAOD,EAAK,EAAIl/R,EAAKwL,GACpClG,EAAIk1S,GAAW2vB,IAAOD,EAAK,EAAIlqU,EAAKsF,GAGxC,OAAO25R,EAAK,KAFE,GAAL35R,EAAS,GAAM4kU,EAAsB5kU,EAAE,EAAnB,IAAMA,EAAI,KAEjB,KADR,GAALkG,EAAS,GAAM0zR,EAAsB1zR,EAAE,EAAnB,IAAMA,EAAI,SAa1C,SAAS4+T,GAAmB1mU,EAAGgyD,EAAO4oD,GACrC,IAA6B51G,EAArBoyS,GAAaplP,GAAchtD,EAAG8C,EAAIovS,GAAYt8L,GAEtD,OATD,SAA2B56G,EAAG+sE,GAC7B,OAAO/sE,EAAEuK,QAAQ+7T,IAAW,SAASC,EAAIhrC,EAAIC,EAAIC,EAAI+qC,EAAIC,GACxD,OAAOlrC,GAAQ,KAAJC,EAAUA,EAAGC,EAAKob,GAAWG,GAAWvb,GAAI1uN,EAAMjlE,KAAS,KAAJ0+T,EAAUA,EAAGC,EAAK7vB,GAAWE,GAAW2vB,GAAM15P,EAAMnrE,OAOhH+kU,CAAkB3mU,EADb,CAAC4B,EAAEkG,EAAElG,EAAIoD,EAAEpD,EAAGkG,EAAEA,EAAEA,EAAI9C,EAAE8C,IAUrC,SAAS8+T,GAAM5mU,GACd,OAAOA,EAAEuK,QAAQ,WAAW,IAE7B,SAASs8T,GAAWruD,GAAQA,EAAKl+P,GAAG,EAGpC,SAASwsT,GAActuD,EAAMp/Q,GAC5B,IAAI0O,EAAI0wQ,EAAKioB,WAAqB,GAAVrnS,EAAc,EAAI,GAC1C,MAAO,CAAK,MAAJ0O,EAAaA,GAAK,GAAM,EAAIA,GAAK,GAAM,GAIhD,SAASi/T,GAAevuD,EAAMp/Q,EAAQiwM,GACrC,IAAI79I,EAAI,EACR,GAAG69I,EAAM,CACR,GAAGA,EAAKktG,MAAQ,GAAKltG,EAAKktG,MAAQ,EAAG,OAAOywB,GAAqBxuD,GAC5C,IAAbnvE,EAAKktG,OAAY/qP,EAAI,GAE9B,IAAI5pD,EAAE42Q,EAAKioB,WAAWj1O,GAAI82J,EAAEk2D,EAAKioB,WAAWj1O,GACxC1jD,EAAEg/T,GAActuD,EAAM,GACtBj2D,EAAEukH,GAActuD,EAAM,GAC1B,MAAO,CAAExzQ,EAAE,CAACpD,EAAEA,EAAGkG,EAAEA,EAAE,GAAIuuS,KAAKvuS,EAAE,GAAIwuS,KAAKxuS,EAAE,IAAKipB,EAAE,CAACnvB,EAAE0gN,EAAGx6M,EAAEy6M,EAAE,GAAI8zF,KAAK9zF,EAAE,GAAI+zF,KAAK/zF,EAAE,KAGnF,SAASykH,GAAqBxuD,GAC7B,IAAI52Q,EAAEklU,GAActuD,EAAM,GAAIl2D,EAAEwkH,GAActuD,EAAM,GAChD1wQ,EAAE0wQ,EAAKioB,WAAW,GAClBl+E,EAAEi2D,EAAKioB,WAAW,GACtB,MAAO,CAAEz7R,EAAE,CAACpD,EAAEA,EAAE,GAAIkG,EAAEA,EAAGuuS,KAAKz0S,EAAE,GAAI00S,KAAK10S,EAAE,IAAKmvB,EAAE,CAACnvB,EAAE0gN,EAAE,GAAIx6M,EAAEy6M,EAAG8zF,KAAK/zF,EAAE,GAAIg0F,KAAKh0F,EAAE,KAanF,SAAS2kH,GAAczuD,EAAMp/Q,EAAQiwM,GACpC,GAAGA,GAAQA,EAAKktG,MAAQ,GAAKltG,EAAKktG,MAAQ,EAAG,OAK9C,SAA6B/9B,GAC5B,IAAI52Q,EAAIklU,GAActuD,EAAM,GACxB1wQ,EAAI0wQ,EAAKioB,WAAW,GACxB,MAAO,CAAC7+R,EAAEA,EAAE,GAAIkG,EAAEA,EAAGuuS,KAAKz0S,EAAE,GAAI00S,KAAK10S,EAAE,IARaslU,CAAoB1uD,GACxE,IAAI52Q,EAAI42Q,EAAKioB,WAAWp3F,GAAqB,IAAbA,EAAKktG,KAAa,EAAI,GAClDzuS,EAAIg/T,GAActuD,EAAM,GAC5B,MAAO,CAAC52Q,EAAKkG,EAAEA,EAAE,GAAIuuS,KAAKvuS,EAAE,GAAIwuS,KAAKxuS,EAAE,IASxC,SAASq/T,GAAiB3uD,GACzB,IAAI52Q,EAAI42Q,EAAKioB,WAAW,GACpB34R,EAAI0wQ,EAAKioB,WAAW,GACxB,MAAO,CAAC7+R,EAAEA,EAAGkG,EAAM,IAAJA,EAAUs/T,WAAe,MAAJt/T,GAAauuS,KAAKvuS,GAAG,GAAIwuS,KAAKxuS,GAAG,IA6HtE,SAASu/T,GAAuB7uD,GAE/B,MAAO,CADIA,EAAKioB,WAAW,GAAUjoB,EAAKioB,WAAW,IA8FtD,SAAS6mC,GAAY9uD,EAAM+9B,GAC1B,IAAIh1S,EAAM,CAACi3Q,EAAKioB,WAAW,IAC3B,GAAW,IAAR8V,EAAY,OAAOh1S,EAAI,IACzB,KAAK,EAAMA,EAAI,GAAK,EAAM,MAC1B,KAAK,EAAMA,EAAI,GAAK,GAAM,MAC1B,KAAK,EAAMA,EAAI,GAAK,EAAM,MAC1B,KAAK,EAAMA,EAAI,GAAK,EAErB,OAAOA,EAAI,IACV,KAAK,EACJA,EAAI,GAAK+iT,GAAU9rC,EAAM,GAAK,OAAS,QAC5B,IAAR+9B,IAAY/9B,EAAKl+P,GAAK,GAAG,MAC7B,KAAK,GACL,KAAK,GACJ/Y,EAAI,GAAK26S,GAAK1jC,EAAKA,EAAKl+P,IACxBk+P,EAAKl+P,GAAe,IAARi8R,EAAc,EAAI,EAAI,MACnC,KAAK,EACJ/9B,EAAKl+P,GAAK,EAAG,MACd,KAAK,EACJ/Y,EAAI,GAAKw5S,GAAWviC,GAAU,MAC/B,KAAK,EACJj3Q,EAAI,GAAKylT,GAAuBxuC,EAAM,EAAG,CAAC+9B,KAAKA,EAAO,GAAKA,EAAO,EAAI,EAAIA,IAAQ,MACnF,QAAS,MAAM,IAAI/1S,MAAM,cAAgBe,EAAI,IAE9C,OAAOA,EAIR,SAASgmU,GAAkB/uD,EAAMkyC,EAAKrhH,GAGrC,IAFA,IAAI3zH,EAAQ8iM,EAAKioB,WAAyB,IAAbp3F,EAAKktG,KAAc,EAAI,GAChD9xR,EAAM,GACFprB,EAAI,EAAGA,GAAKq8E,IAASr8E,EAAGorB,EAAI3mB,MAAoB,IAAburM,EAAKktG,KAAcsE,GAAqB+M,IAAapvC,EAAM,IACtG,OAAO/zP,EAIR,SAAS+iT,GAAoBhvD,EAAMp/Q,EAAQiwM,GAC1C,IAAIjqH,EAAO,EAAG65B,EAAO,EACL,IAAbowF,EAAKktG,MACPn3N,EAAOo5L,EAAKioB,WAAW,GACvBxnL,EAAOu/J,EAAKioB,WAAW,KAEvBxnL,EAAO,EAAIu/J,EAAKioB,WAAW,GAC3BrhN,EAAO,EAAIo5L,EAAKioB,WAAW,IAEzBp3F,EAAKktG,MAAQ,GAAKltG,EAAKktG,KAAO,MAAOn3N,EAAmB,KAAR65B,IAAWA,EAAO,MAErE,IAAI,IAAI5/G,EAAI,EAAGsD,EAAI,GAAItD,GAAK+lF,IAASziF,EAAEtD,GAAK,MAAOA,EAClD,IAAI,IAAIoM,EAAI,EAAGA,GAAKwzG,IAAQxzG,EAAG9I,EAAEtD,GAAGoM,GAAK6hU,GAAY9uD,EAAMnvE,EAAKktG,MACjE,OAAO55S,EA8ER,SAAS8qU,GAAgBjvD,EAAMp/Q,EAAQiwM,GAEtC,OADAmvE,EAAKl+P,GAAK,EACH,CAAC6sT,GAAiB3uD,IAE1B,SAASkvD,GAAiBlvD,GAEzB,OADAA,EAAKl+P,GAAK,EACH,GAGR,IAAIqtT,GAAkBF,GAElBG,GAAmBF,GAEnBG,GAAoBH,GAEpBI,GAAmBL,GAEvB,SAASM,GAAgBvvD,GAExB,OADAA,EAAKl+P,GAAK,EACH,CAAC0rS,GAAYxtC,GAA4B,EAArBA,EAAKioB,WAAW,IAG5C,IAAIunC,GAAsBP,GAEtBQ,GAAyBF,GAEzBG,GAAuBR,GAEvBS,GAAiBV,GAEjBW,GAAkBX,GAGlBY,GAAY,CACf,OACA,MACA,UACA,KACA,SACA,KACA,eACA,KACA,SACA,KACA,KACA,KACA,cACA,KACA,KACA,KACA,YA6CGC,GAAW,CACf,EAAM,CAAExpU,EAAE,SAAUkB,EAxPpB,SAAsBw4Q,EAAMp/Q,EAAQiwM,GAEnC,OADAmvE,EAAKl+P,IACF+uL,GAAqB,IAAbA,EAAKktG,KAAmB,CAAC/9B,EAAKioB,WAAW,EAAG,KAAM,GAGtD,CAFGjoB,EAAKioB,WAAW,GAChBjoB,EAAKioB,WAAWp3F,GAAqB,GAAbA,EAAKktG,KAAY,EAAI,MAqPxD,EAAM,CAAEz3S,EAAE,SAAUkB,EAnGDo1S,IAoGnB,EAAM,CAAEt2S,EAAE,SAAUkB,EAAE6mU,IACtB,EAAM,CAAE/nU,EAAE,SAAUkB,EAAE6mU,IACtB,EAAM,CAAE/nU,EAAE,SAAUkB,EAAE6mU,IACtB,EAAM,CAAE/nU,EAAE,SAAUkB,EAAE6mU,IACtB,EAAM,CAAE/nU,EAAE,WAAYkB,EAAE6mU,IACxB,EAAM,CAAE/nU,EAAE,YAAakB,EAAE6mU,IACzB,EAAM,CAAE/nU,EAAE,QAASkB,EAAE6mU,IACrB,GAAM,CAAE/nU,EAAE,QAASkB,EAAE6mU,IACrB,GAAM,CAAE/nU,EAAE,QAASkB,EAAE6mU,IACrB,GAAM,CAAE/nU,EAAE,QAASkB,EAAE6mU,IACrB,GAAM,CAAE/nU,EAAE,QAASkB,EAAE6mU,IACrB,GAAM,CAAE/nU,EAAE,QAASkB,EAAE6mU,IACrB,GAAM,CAAE/nU,EAAE,WAAYkB,EAAE6mU,IACxB,GAAM,CAAE/nU,EAAE,WAAYkB,EAAE6mU,IACxB,GAAM,CAAE/nU,EAAE,WAAYkB,EAAE6mU,IACxB,GAAM,CAAE/nU,EAAE,WAAYkB,EAAE6mU,IACxB,GAAM,CAAE/nU,EAAE,YAAakB,EAAE6mU,IACzB,GAAM,CAAE/nU,EAAE,aAAckB,EAAE6mU,IAC1B,GAAM,CAAE/nU,EAAE,WAAYkB,EAAE6mU,IACxB,GAAM,CAAE/nU,EAAE,aAAckB,EAAE6mU,IAC1B,GAAM,CAAE/nU,EAAE,SAAUkB,EAzPpB,SAAsBw4Q,EAAMp/Q,EAAQiwM,GAAkB,OAAVmvE,EAAKl+P,IAAY8rS,GAA2B5tC,EAAMp/Q,EAAUiwM,KA0PxG,GAAM,CAAEvqM,EAAE,WAAYkB,EAlDtB,SAAwBw4Q,EAAMp/Q,EAAQiwM,GAIrC,OAHAmvE,EAAKl+P,GAAK,EACVk+P,EAAKl+P,GAAK,EACVk+P,EAAKl+P,GAAmB,GAAb+uL,EAAKktG,KAAY,EAAI,EACzB,CAAC,cA+CT,GAAM,CAAEz3S,EAAE,cAAekB,EA7CzB,SAA2Bw4Q,EAAMp/Q,EAAQiwM,GAExC,OADAmvE,EAAKl+P,GAAmB,GAAb+uL,EAAKktG,KAAY,EAAI,EACzB,CAAC,iBA4CT,GAAM,CAAEz3S,EAAE,SAAUkB,EAxQpB,SAAsBw4Q,GAAkB,OAAVA,EAAKl+P,IAAY4hS,GAAK1jC,EAAKioB,WAAW,MAyQpE,GAAM,CAAE3hS,EAAE,UAAWkB,EAnQrB,SAAuBw4Q,GAAkB,OAAVA,EAAKl+P,IAAiC,IAArBk+P,EAAKioB,WAAW,KAoQhE,GAAM,CAAE3hS,EAAE,SAAUkB,EAvQpB,SAAsBw4Q,GAAkB,OAAVA,EAAKl+P,IAAYk+P,EAAKioB,WAAW,KAwQ/D,GAAM,CAAE3hS,EAAE,SAAUkB,EAlQpB,SAAsBw4Q,GAAkB,OAAVA,EAAKl+P,IAAYygS,GAAWviC,KAmQ1D,GAAM,CAAE15Q,EAAE,WAAYkB,EAhZtB,SAAwBw4Q,EAAMp/Q,EAAQiwM,GACrC,IAAIjrL,GAAyB,GAAjBo6P,EAAKA,EAAKl+P,OAAgB,EAEtC,OADAk+P,EAAKl+P,GAAkB,GAAb+uL,EAAKktG,KAAY,EAAiB,IAAbltG,EAAKktG,KAAa,GAAK,EAC/C,CAACn4R,KA8YT,GAAM,CAAEtf,EAAE,UAAWkB,EA9SrB,SAAuBw4Q,EAAMp/Q,EAAQiwM,GAEpC,IAAIjrL,GAAuB,GAAfo6P,EAAKA,EAAKl+P,KAAY,EAClCk+P,EAAKl+P,GAAK,EACV,IAAIiuT,EAAQ/vD,EAAKioB,WAAWp3F,GAAQA,EAAKktG,MAAQ,EAAI,EAAI,GACzD,MAAO,CAACiyB,GAASD,GAAQE,GAAKF,GAAQnqT,KA0SvC,GAAM,CAAEtf,EAAE,aAAckB,EAvSxB,SAA0Bw4Q,EAAMp/Q,EAAQiwM,GACvC,IAAIjrL,EAAOo6P,EAAKA,EAAKl+P,KACjBouT,EAAUlwD,EAAKioB,WAAW,GAAIkoC,EAAMt/H,GAAQA,EAAKktG,MAAQ,EAAI,CAAU,IAARn4R,GAAgB,EAAI,EAAIo6P,EAAKioB,WAAW,IAI5G,SAAkBjoB,GACjB,MAAO,CAACA,EAAKA,EAAKl+P,EAAE,IAAI,EAAwB,MAArBk+P,EAAKioB,WAAW,IALqEmoC,CAASpwD,GACzH,MAAO,CAACkwD,GAAqB,IAAXC,EAAI,GAAWF,GAAOI,IAAOF,EAAI,OAqSpD,GAAM,CAAE7pU,EAAE,UAAWkB,EA1MrB,SAAuBw4Q,EAAMp/Q,EAAQiwM,GACpC,IAAIjrL,EAAQo6P,EAAKioB,WAAW,KAAO,EAAK,EACpCj1O,GAAM69I,GAASA,EAAKktG,MAAQ,EAAM,EAAI,EACtCuyB,EAAYtwD,EAAKioB,WAAWj1O,GAChC,OAAO69I,EAAKktG,MACX,KAAK,EAAG/9B,EAAKl+P,GAAK,EAAG,MACrB,KAAK,EAAG,KAAK,EAAGk+P,EAAKl+P,GAAK,EAAG,MAC7B,KAAK,EAAGk+P,EAAKl+P,GAAK,GAEnB,MAAO,CAAC8D,EAAM,EAAG0qT,KAkMlB,GAAM,CAAEhqU,EAAE,SAAUkB,EA7UpB,SAAsBw4Q,EAAMp/Q,EAAQiwM,GAEnC,IAAIjrL,GAAuB,GAAfo6P,EAAKA,EAAKl+P,KAAY,EAGlC,OAFAk+P,EAAKl+P,GAAK,EAEH,CAAC8D,EADE6oT,GAAczuD,EAAM,EAAGnvE,MA0UlC,GAAM,CAAEvqM,EAAE,UAAWkB,EAncrB,SAAuBw4Q,EAAMp/Q,EAAQiwM,GAGpC,MAAO,EAFsB,GAAjBmvE,EAAKA,EAAKl+P,OAAgB,EAC3BysT,GAAevuD,EAAMnvE,EAAKktG,MAAQ,GAAKltG,EAAKktG,KAAmBltG,MAkc3E,GAAM,CAAEvqM,EAAE,aAAckB,EA/KxB,SAA0Bw4Q,EAAMp/Q,EAAQiwM,GACvC,IAAIjrL,EAAQo6P,EAAKioB,WAAW,KAAO,EAAK,EAGxC,OAFAjoB,EAAKl+P,GAAM+uL,GAAqB,GAAbA,EAAKktG,KAAY,EAAI,EAEjC,CAACn4R,EADEo6P,EAAKioB,WAAWp3F,GAAqB,GAAbA,EAAKktG,KAAY,EAAI,MA6KxD,GAAM,CAAEz3S,EAAE,YAAakB,EA1IDo1S,IA2ItB,GAAM,CAAEt2S,EAAE,cAAekB,EAzIDo1S,IA0IxB,GAAM,CAAEt2S,EAAE,aAAckB,EA1KxB,SAA0Bw4Q,EAAMp/Q,EAAQiwM,GAGvC,MAAO,CAFKmvE,EAAKioB,WAAW,KAAO,EAAK,EAC9BjoB,EAAKioB,WAAWp3F,GAAqB,GAAbA,EAAKktG,KAAY,EAAI,MAyKxD,GAAM,CAAEz3S,EAAE,YAAakB,EAnKvB,SAAyBw4Q,EAAMp/Q,EAAQiwM,GACtC,IAAIjrL,EAAQo6P,EAAKioB,WAAW,KAAO,EAAK,EAIxC,OAHAjoB,EAAKl+P,GAAK,EACP+uL,EAAKktG,KAAO,GAAG/9B,EAAKl+P,IACP,IAAb+uL,EAAKktG,OAAY/9B,EAAKl+P,GAAK,GACvB,CAAC8D,KA+JT,GAAM,CAAEtf,EAAE,aAAckB,EArbxB,SAA0Bw4Q,EAAMp/Q,EAAQiwM,GACvC,IAAIjrL,GAAyB,GAAjBo6P,EAAKA,EAAKl+P,OAAgB,EAEtC,OADAk+P,EAAKl+P,GAAK+uL,GAASA,EAAKktG,KAAO,EAAK,GAAMltG,EAAKktG,KAAO,EAAI,EAAI,EACvD,CAACn4R,KAmbT,GAAM,CAAEtf,EAAE,UAAWkB,EA5UrB,SAAuBw4Q,EAAMp/Q,EAAQiwM,GACpC,IAAIjrL,GAAuB,GAAfo6P,EAAKA,EAAKl+P,KAAY,EAGlC,OAFAk+P,EAAKl+P,GAAK,EAEH,CAAC8D,EAxJT,SAA0Bo6P,EAAMp/Q,EAAQiwM,GACvC,IAAIktG,EAAOltG,GAAQA,EAAKktG,KAAOltG,EAAKktG,KAAO,EAC3C,GAAGA,GAAQ,GAAKA,GAAQ,EAAG,OAS5B,SAAgC/9B,GAC/B,IAAIuwD,EAAKvwD,EAAKioB,WAAW,GACrB34R,EAAI0wQ,EAAKioB,WAAW,GACpB6V,GAAa,MAALyyB,IAAgB,GAAI1yB,GAAa,MAAL0yB,IAAgB,GAIxD,OAHAA,GAAM,MACK,GAARzyB,GAAayyB,GAAM,OAAQA,GAAU,OAC7B,GAAR1yB,GAAavuS,GAAK,MAAMA,GAAQ,KAC5B,CAAClG,EAAEmnU,EAAGjhU,EAAEA,EAAEuuS,KAAKA,EAAKC,KAAKA,GAhBE0yB,CAAuBxwD,GACzD,IAAI52Q,EAAI42Q,EAAKioB,WAAW8V,GAAQ,GAAK,EAAI,GACrC0yB,EAAKzwD,EAAKioB,WAAW,GACrB4V,GAAa,MAAL4yB,IAAgB,GAAI3yB,GAAa,MAAL2yB,IAAgB,GAExD,GADAA,GAAM,MACK,GAAR3yB,EAAW,KAAM10S,EAAI,QAASA,GAAK,QACtC,GAAW,GAARy0S,EAAW,KAAM4yB,EAAK,MAAQA,GAAU,MAC3C,MAAO,CAACrnU,EAAEA,EAAEkG,EAAEmhU,EAAG5yB,KAAKA,EAAKC,KAAKA,GA8ItB4yB,CAAiB1wD,EAAM,EAAGnvE,MA0UrC,GAAM,CAAEvqM,EAAE,WAAYkB,EApatB,SAAwBw4Q,EAAMp/Q,EAAQiwM,GAGrC,MAAO,EAFsB,GAAjBmvE,EAAKA,EAAKl+P,OAAgB,EA3FvC,SAA2Bk+P,EAAMp/Q,EAAQiwM,GACxC,GAAGA,EAAKktG,KAAO,EAAG,OAAOywB,GAAqBxuD,GAC9C,IAAI52Q,EAAE42Q,EAAKioB,WAAwB,IAAbp3F,EAAKktG,KAAa,EAAI,GAAIj0F,EAAEk2D,EAAKioB,WAAwB,IAAbp3F,EAAKktG,KAAa,EAAI,GACpFzuS,EAAEg/T,GAActuD,EAAM,GACtBj2D,EAAEukH,GAActuD,EAAM,GAC1B,MAAO,CAAExzQ,EAAE,CAACpD,EAAKkG,EAAEA,EAAE,GAAIuuS,KAAKvuS,EAAE,GAAIwuS,KAAKxuS,EAAE,IAAKipB,EAAE,CAACnvB,EAAE0gN,EAAGx6M,EAAEy6M,EAAE,GAAI8zF,KAAK9zF,EAAE,GAAI+zF,KAAK/zF,EAAE,KAuFvE4mH,CAAkB3wD,EAAMp/Q,EAAYiwM,MAmahD,GAAM,CAAEvqM,EAAE,cAAekB,EA5DzB,SAA2Bw4Q,GAG1B,MAAO,CAFKA,EAAKioB,WAAW,KAAO,EAAK,EAC9BjoB,EAAKioB,WAAW,MA2D3B,GAAM,CAAE3hS,EAAE,eAAgBkB,EAxD1B,SAA4Bw4Q,GAG3B,MAAO,CAFKA,EAAKioB,WAAW,KAAO,EAAK,EAC9BjoB,EAAKioB,WAAW,MAuD3B,GAAM,CAAE3hS,EAAE,WAAYkB,EA1MtB,SAAwBw4Q,EAAMp/Q,EAAQiwM,GACrC,OAAgB,GAAbA,EAAKktG,KAMT,SAA8B/9B,GAC7B,IAAIp6P,EAAQo6P,EAAKioB,WAAW,KAAO,EAAK,EACpC2oC,EAAO5wD,EAAKioB,WAAW,EAAG,KAC9BjoB,EAAKl+P,GAAK,EACV,IAAIwuT,EAAYtwD,EAAKioB,WAAW,GAEhC,OADAjoB,EAAKl+P,GAAK,GACH,CAAC8D,EAAMgrT,EAAMN,GAZMO,CAAqB7wD,GAIxC,CAHKA,EAAKioB,WAAW,KAAO,EAAK,EAC7BjoB,EAAKioB,WAAW,GACXjoB,EAAKioB,WAAW,MAuMjC,GAAM,CAAE3hS,EAAE,WAAYkB,EAzUtB,SAAwBw4Q,EAAMp/Q,EAAQiwM,GACrC,IAAIjrL,GAAuB,GAAfo6P,EAAKA,EAAKl+P,KAAY,EAClCk+P,EAAKl+P,GAAK,EACV,IAAI8uT,EAAO5wD,EAAKioB,WAAW,GAG3B,OAFGp3F,GAAqB,GAAbA,EAAKktG,OAAW/9B,EAAKl+P,GAAK,IAE9B,CAAC8D,EAAMgrT,EADJnC,GAAczuD,EAAM,EAAGnvE,MAqUlC,GAAM,CAAEvqM,EAAE,YAAakB,EAzcvB,SAAyBw4Q,EAAMp/Q,EAAQiwM,GACtC,IAAIjrL,GAAyB,GAAjBo6P,EAAKA,EAAKl+P,OAAgB,EAClC8uT,EAAO5wD,EAAKioB,WAAW,EAAG,KAE9B,GAAGp3F,EAAM,OAAOA,EAAKktG,MACpB,KAAK,EAAG/9B,EAAKl+P,GAAK,GAInB,MAAO,CAAC8D,EAAMgrT,EADHrC,GAAevuD,EAAMhtN,EAAG69I,MAkcpC,GAAM,CAAEvqM,EAAE,cAAekB,EAnKzB,SAA2Bw4Q,EAAMp/Q,EAAQiwM,GACxC,IAAIjrL,GAAyB,GAAjBo6P,EAAKA,EAAKl+P,OAAgB,EAClC8uT,EAAO5wD,EAAKioB,WAAW,GACvBj1O,EAAI,EACR,GAAG69I,EAAM,OAAOA,EAAKktG,MACpB,KAAK,EAAG/qP,EAAI,GAAI,MAChB,KAAK,GAAIA,EAAI,EAGd,OADAgtN,EAAKl+P,GAAKkxC,EACH,CAACptC,EAAMgrT,KA2Jf,GAAM,CAAEtqU,EAAE,eAAgBkB,EAxb1B,SAA4Bw4Q,EAAMp/Q,EAAQiwM,GACzC,IAAIjrL,GAAyB,GAAjBo6P,EAAKA,EAAKl+P,OAAgB,EAClC8uT,EAAO5wD,EAAKioB,WAAW,GACvBj1O,EAAI,EACR,GAAG69I,EAAM,OAAOA,EAAKktG,MACpB,KAAK,EAAG/9B,EAAKl+P,GAAK,GAAIkxC,EAAI,EAAG,MAC7B,KAAK,GAAIA,EAAI,GAGd,OADAgtN,EAAKl+P,GAAKkxC,EACH,CAACptC,EAAMgrT,KAgbf,IAAM,IAGFE,GAAW,CACf,GAAM,GAAM,GAAM,GAClB,GAAM,GAAM,GAAM,GAClB,GAAM,GAAM,GAAM,GAClB,GAAM,GAAM,GAAM,GAClB,GAAM,GAAM,IAAM,GAClB,GAAM,GAAM,IAAM,GAClB,GAAM,GAAM,IAAM,GAClB,GAAM,GAAM,IAAM,GAClB,GAAM,GAAM,IAAM,GAClB,GAAM,GAAM,IAAM,GAClB,GAAM,GAAM,IAAM,GAClB,GAAM,GAAM,IAAM,GAClB,GAAM,GAAM,IAAM,GAClB,GAAM,GAAM,IAAM,GAClB,GAAM,GAAM,IAAM,GAClB,GAAM,GAAM,IAAM,GAClB,GAAM,GAAM,IAAM,GAClB,GAAM,GAAM,IAAM,GAClB,GAAM,GAAM,IAAM,GAClB,GAAM,GAAM,IAAM,GAClB,GAAM,GAAM,IAAM,GAClB,GAAM,GAAM,IAAM,KAElB,WAAY,IAAI,IAAInmT,KAAKmmT,GAAUhB,GAASnlT,GAAKmlT,GAASgB,GAASnmT,IAAnE,GAEA,IAAIomT,GAAQ,CACZ,EAAM,CAAEzqU,EAAE,YAAakB,EAAE+nU,IACzB,EAAM,CAAEjpU,EAAE,WAAYkB,EAAEmoU,IACxB,EAAM,CAAErpU,EAAE,YAAakB,EAAE2nU,IACzB,EAAM,CAAE7oU,EAAE,YAAakB,EAAEooU,IACzB,EAAM,CAAEtpU,EAAE,aAAckB,EAAE8nU,IAC1B,GAAM,CAAEhpU,EAAE,gBAAiBkB,EAAEgoU,IAC7B,GAAM,CAAElpU,EAAE,iBAAkBkB,EAAEkoU,IAC9B,GAAM,CAAEppU,EAAE,aAAckB,EAAE4nU,IAC1B,GAAM,CAAE9oU,EAAE,cAAekB,EAAE6nU,IAC3B,GAAM,CAAE/oU,EAAE,mBAAoBkB,EAAEioU,IAChC,GAAM,CAAEnpU,EAAE,UAAWkB,EAtIrB,SAAuBw4Q,GACtBA,EAAKl+P,GAAK,EACV,IAAI8uT,EAAO5wD,EAAKioB,WAAW,GACvB13R,EAAQyvQ,EAAKioB,WAAW,GACxBv6K,EAAMsyJ,EAAKioB,WAAW,GACtB34R,EAAI0wQ,EAAKioB,WAAW,GACpBl+E,EAAIi2D,EAAKioB,WAAW,GAExB,MAAO,CAAC2oC,KAAMA,EAAMI,QAAe,EAANzgU,EAAY0gU,GADhCpB,GAAWt/T,GAAS,EAAK,IACcm9G,IAAIA,EAAKp+G,EAAEA,EAAGy6M,EAAEA,KA+HjE,GAAM,CAAEzjN,EAAE,YAAakB,EA5HvB,SAAyBw4Q,GAExB,OADAA,EAAKl+P,GAAK,EACH,CAACk+P,EAAKioB,WAAW,MA2HzB,IAAM,IAEFipC,GAAQ,CACZ10C,EAAM,CAAEl2R,EAAE,cAAekB,EAtGzB,SAA2Bw4Q,GAE1B,OADAA,EAAKl+P,GAAK,EACH,CAAC,EAAG,KAqGZ,EAAM,CAAExb,EAAE,cAAekB,EArazB,SAA2Bw4Q,EAAMp/Q,EAAQiwM,GACxC,IAAIsgI,EAA4B,IAAjBnxD,EAAKA,EAAKl+P,EAAE,GAAa,EAAI,EAE5C,OADAk+P,EAAKl+P,GAAK+uL,GAAqB,GAAbA,EAAKktG,KAAY,EAAI,EAChC,CAACozB,KAmaT,EAAM,CAAE7qU,EAAE,YAAakB,EApbvB,SAAyBw4Q,EAAMp/Q,EAAQiwM,GACtC,IAAIugI,EAA0B,IAAjBpxD,EAAKA,EAAKl+P,EAAE,GAAa,EAAI,EAE1C,OADAk+P,EAAKl+P,GAAK,EACH,CAACsvT,EAAOpxD,EAAKioB,WAAWp3F,GAAqB,GAAbA,EAAKktG,KAAY,EAAI,MAkb7D,EAAM,CAAEz3S,EAAE,gBAAiBkB,EAtc3B,SAA6Bw4Q,EAAMp/Q,EAAQiwM,GAC1CmvE,EAAKl+P,GAAI,EAIT,IAHA,IAAI/S,EAASixQ,EAAKioB,WAAWp3F,GAAqB,GAAbA,EAAKktG,KAAY,EAAI,GACtD55S,EAAI,GAEAtD,EAAI,EAAGA,GAAKkO,IAAUlO,EAAGsD,EAAEmB,KAAK06Q,EAAKioB,WAAWp3F,GAAqB,GAAbA,EAAKktG,KAAY,EAAI,IACrF,OAAO55S,IAicR,EAAM,CAAEmC,EAAE,cAAekB,EA7bzB,SAA2Bw4Q,EAAMp/Q,EAAQiwM,GACxC,IAAIwgI,EAA4B,IAAjBrxD,EAAKA,EAAKl+P,EAAE,GAAa,EAAI,EAE5C,OADAk+P,EAAKl+P,GAAK,EACH,CAACuvT,EAASrxD,EAAKioB,WAAWp3F,GAAqB,GAAbA,EAAKktG,KAAY,EAAI,MA2b/D,GAAM,CAAEz3S,EAAE,aAAckB,EAjWxB,SAA0Bw4Q,EAAMp/Q,EAAQiwM,GACvCmvE,EAAKl+P,GAAK+uL,GAAqB,GAAbA,EAAKktG,KAAY,EAAI,IAiWxC,GAAM,CAAEz3S,EAAE,gBAAiBkB,EAjd3B,SAA6Bw4Q,GAC5B,IAAImxD,EAA2B,EAAjBnxD,EAAKA,EAAKl+P,EAAE,GAG1B,OADAk+P,EAAKl+P,GAAK,EACH,CAACqvT,EAFQ,KAgdjB,GAAM,CAAE7qU,EAAE,eAAgBkB,EA9Z1B,SAA4Bw4Q,GAE3B,OADAA,EAAKioB,WAAW,GACT4mC,GAAuB7uD,KA6Z/B,GAAM,CAAE15Q,EAAE,mBAAoBkB,EAzZ9B,SAAgCw4Q,GAE/B,OADAA,EAAKioB,WAAW,GACT4mC,GAAuB7uD,KAwZ/B,IAAM,CAAE15Q,EAAE,iBAAkBkB,EApb5B,SAA8Bw4Q,GAC7B,IAAIoxD,EAA0B,IAAjBpxD,EAAKA,EAAKl+P,EAAE,GAAa,EAAI,EAE1C,OADAk+P,EAAKl+P,GAAK,EACH,CAACsvT,EAAOpxD,EAAKioB,WAAW,MAkbhC,IAAM,IAKN,SAASuqB,GAAexyC,EAAMp/Q,EAAQyxT,EAAMxhH,GAC3C,GAAGA,EAAKktG,KAAO,EAAG,OAAOnB,GAAU58B,EAAMp/Q,GAGzC,IAFA,IAAIiC,EAASm9Q,EAAKl+P,EAAIlhB,EAClBuD,EAAI,GACAtD,EAAI,EAAGA,IAAMwxT,EAAKzxT,SAAUC,EACnC,OAAOwxT,EAAKxxT,GAAG,IACd,IAAK,WACJwxT,EAAKxxT,GAAG,GAAKmuU,GAAoBhvD,EAAM,EAAGnvE,GAC1C1sM,EAAEmB,KAAK+sT,EAAKxxT,GAAG,IACf,MACD,IAAK,aACJwxT,EAAKxxT,GAAG,GAAKkuU,GAAkB/uD,EAAMqyC,EAAKxxT,GAAG,GAAIgwM,GACjD1sM,EAAEmB,KAAK+sT,EAAKxxT,GAAG,IACf,MACD,IAAK,SACDgwM,GAAqB,IAAbA,EAAKktG,OACfsU,EAAKxxT,GAAG,GAAG,GAAKm/Q,EAAKioB,WAAW,GAChC9jS,EAAEmB,KAAK+sT,EAAKxxT,GAAG,KACd,MACH,IAAK,UACL,IAAK,iBACL,IAAK,aACL,IAAK,cACJ,KAAM,eAAiBwxT,EAAKxxT,GAAG,GAQlC,OADc,IAHdD,EAASiC,EAASm9Q,EAAKl+P,IAGN3d,EAAEmB,KAAKs3S,GAAU58B,EAAMp/Q,IACjCuD,EAIR,SAASouT,GAAWvyC,EAAMp/Q,EAAQiwM,GAGjC,IAFA,IACIiZ,EAAGtmM,EADH3gB,EAASm9Q,EAAKl+P,EAAIlhB,EACX0wU,EAAO,GACZzuU,GAAUm9Q,EAAKl+P,GACpBlhB,EAASiC,EAASm9Q,EAAKl+P,EACvB0B,EAAKw8P,EAAKA,EAAKl+P,GACfgoM,EAAIgmH,GAAStsT,GACH,KAAPA,GAAsB,KAAPA,IAAasmM,GAAY,KAAPtmM,EAAcutT,GAAQG,IAAOlxD,EAAKA,EAAKl+P,EAAI,KAC3EgoM,GAAMA,EAAEtiN,EACL8pU,EAAKhsU,KAAK,CAACwkN,EAAExjN,EAAGwjN,EAAEtiN,EAAEw4Q,EAAMp/Q,EAAQiwM,KADV+rG,GAAU58B,EAAMp/Q,GAGhD,OAAO0wU,EAGR,SAASC,GAAgB/pU,GAExB,IADA,IAAIrD,EAAI,GACAtD,EAAI,EAAGA,EAAI2G,EAAE5G,SAAUC,EAAG,CAEjC,IADA,IAAI+H,EAAIpB,EAAE3G,GAAIuI,EAAI,GACV6D,EAAI,EAAGA,EAAIrE,EAAEhI,SAAUqM,EAAG,CACjC,IAAI0d,EAAI/hB,EAAEqE,GACV,GAAG0d,EAAG,OAAOA,EAAE,IAEd,KAAK,EACTvhB,EAAE9D,KAAK,IAAMqlB,EAAE,GAAG5Y,QAAQ,KAAK,MAAQ,KAAM,MACzC,QAAS3I,EAAE9D,KAAKqlB,EAAE,SACZvhB,EAAE9D,KAAK,IAEfnB,EAAEmB,KAAK8D,EAAE+I,KAAK,MAEf,OAAOhO,EAAEgO,KAAK,KAnEf++T,GAAM,IAAQA,GAAM,IAuEpB,IAAIM,GAAW,CACdC,OAAQ,IACRC,UAAW,IACXC,OAAQ,IACRC,MAAO,IACPC,MAAO,KACPC,MAAO,IACPC,MAAO,KACPC,MAAO,IACPC,OAAQ,IACRC,MAAO,KACPC,SAAU,IACVC,OAAQ,KAILC,GAAmB,IAAItlP,OAAO,mCAMlC,SAASulP,GAAaC,EAAU3B,EAAM//H,GACrC,IAAI0hI,EAAU,MAAO,cACrB,GAAG1hI,EAAKktG,KAAO,KAAOw0B,EAASC,MAAQD,EAASC,IAAI5B,IAAQ,OAAO2B,EAAS1oH,WAAW+mH,GACvF,IAAI2B,EAASC,IAAK,MAAO,cACzB,IAAIA,EAAMD,EAASC,IAAI5B,GACvB,GAAG//H,EAAKktG,KAAO,EAGd,OAFG6yB,EAAO,MAAOA,GAAO,OACrBA,EAAO,IAAGA,GAAQA,GACN,GAARA,EAAY,GAAK2B,EAASC,IAAI5B,EAAO,GAE7C,IAAI4B,EAAK,MAAO,cAChB,IAAIruU,EAAI,GACR,GAAG0sM,EAAKktG,KAAO,EAAG,OAAOw0B,EAASC,EAAI,IAAI,IACzC,KAAK,IAEJ,OADAruU,GAAe,GAAXquU,EAAI,GAAW,OAASD,EAAS1oH,WAAW2oH,EAAI,IAC7CA,EAAI,IAAMA,EAAI,GAAKruU,EAAIA,EAAI,IAAMouU,EAAS1oH,WAAW2oH,EAAI,IACjE,KAAK,IACJ,OAAe,MAAZ3hI,EAAK4hI,IAAoBF,EAAS1oH,WAAWhZ,EAAK4hI,KAC9C,cAAgBF,EAASC,EAAI,IAAI,GACzC,KAAK,IAEL,QAAS,MAAO,aAAeD,EAASC,EAAI,IAAI,GAEjD,OAAOD,EAASC,EAAI,IAAI,GAAG,IAC1B,KAAK,KAEJ,OADAruU,GAAe,GAAXquU,EAAI,GAAW,OAAUD,EAAS1oH,WAAW2oH,EAAI,KAAO,cACrDA,EAAI,IAAMA,EAAI,GAAKruU,EAAIA,EAAI,IAAMouU,EAAS1oH,WAAW2oH,EAAI,IACjE,KAAK,MAAQ,OAAOD,EAASC,EAAI,IAAIhsU,MAAM,GAAG+F,KAAI,SAAS9F,GAAQ,OAAOA,EAAKqrT,QAAS3/S,KAAK,MAC7F,QACC,OAAIogU,EAASC,EAAI,IAAI,GAAG,IACxBruU,GAAe,GAAXquU,EAAI,GAAW,OAAUD,EAASC,EAAI,IAAI,GAAG,GAAGA,EAAI,KAAO,cACxDA,EAAI,IAAMA,EAAI,GAAKruU,EAAIA,EAAI,IAAMouU,EAASC,EAAI,IAAI,GAAG,GAAGA,EAAI,KAFhC,eAKtC,SAASE,GAASH,EAAU3B,EAAM//H,GACjC,OAxCD,SAAkC8hI,EAAO9hI,GACxC,KAAI8hI,GAAW9hI,GAAQA,EAAKktG,MAAQ,GAAKltG,EAAKktG,MAAQ,GAAI,MAAM,IAAI/1S,MAAM,oBAC1E,OAAIqqU,GAAgB3rU,KAAKisU,GAAe,IAAMA,EAAQ,IAC/CA,EAqCAC,CAAyBN,GAAaC,EAAU3B,EAAM//H,GAAOA,GAErE,SAASgiI,GAAkB7Y,EAAuBxgQ,EAAO4oD,EAAMmwN,EAAU1hI,GACxE,IAEgButF,EAAIjoB,EAAK7mQ,EAAsBlG,EAF3C20S,EAAQltG,GAAQA,EAAKktG,MAAS,EAC9B8B,EAAqC,CAACrzS,EAAE,CAAC8C,EAAE,EAAGlG,EAAE,GAAGmvB,EAAE,CAACjpB,EAAE,EAAGlG,EAAE,IAC7DwgB,EAAQ,GAAgBgnT,EAAK,EAAGkC,EAAQ,EAAMH,EAAM,GACxD,IAAI3Y,EAAQ,KAAOA,EAAQ,GAAG,GAAI,MAAO,GAEzC,IADA,IAAI+Y,GAAW,EAAGC,EAAK,GACf/uC,EAAK,EAAGgvC,EAAQjZ,EAAQ,GAAGp5T,OAAQqjS,EAAKgvC,IAAShvC,EAAI,CAC5D,IAAIz8R,EAAIwyT,EAAQ,GAAG/1B,GACnB,OAAOz8R,EAAE,IACR,IAAK,YACJoiB,EAAMtkB,KAAK,IAAMskB,EAAM6F,OAAQ,MAChC,IAAK,WACJ7F,EAAMtkB,KAAK,IAAMskB,EAAM6F,OAAQ,MAChC,IAAK,aACJ7F,EAAMtkB,KAAKskB,EAAM6F,MAAQ,KAAM,MAEhC,IAAK,SACL,IAAK,YACL,IAAK,SACL,IAAK,QACL,IAAK,QACL,IAAK,QACL,IAAK,QACL,IAAK,QACL,IAAK,SACL,IAAK,QACL,IAAK,WACL,IAAK,SAEJ,GADA2uQ,EAAKx0Q,EAAM6F,MAAO0mP,EAAKvsP,EAAM6F,MAC1BsjT,GAAW,EAAG,CAChB,OAAO/Y,EAAQ,GAAG+Y,GAAS,GAAG,IAC7B,KAAK,EAEJC,EAAK3xT,GAAK,IAAK24S,EAAQ,GAAG+Y,GAAS,GAAG,IAAK,MAC5C,KAAK,EAEJC,EAAK3xT,GAAK,KAAM24S,EAAQ,GAAG+Y,GAAS,GAAG,IAAK,MAC7C,QAGC,GAFAC,EAAK,GAEFniI,EAAKgpG,IAAK,MAAM,IAAI7xS,MAAM,+BAAiCgyT,EAAQ,GAAG+Y,GAAS,GAAG,IAEvF58D,GAAU68D,EACVD,GAAW,EAEZnpT,EAAMtkB,KAAK6wQ,EAAGq7D,GAAShqU,EAAE,IAAI42R,GAC7B,MAED,IAAK,WACJA,EAAKx0Q,EAAM6F,MAAO0mP,EAAKvsP,EAAM6F,MAC7B7F,EAAMtkB,KAAK6wQ,EAAG,IAAIioB,GAClB,MACD,IAAK,WACJA,EAAKx0Q,EAAM6F,MAAO0mP,EAAKvsP,EAAM6F,MAC7B7F,EAAMtkB,KAAK6wQ,EAAG,IAAIioB,GAClB,MACD,IAAK,WACJA,EAAKx0Q,EAAM6F,MAAO0mP,EAAKvsP,EAAM6F,MAC7B7F,EAAMtkB,KAAK6wQ,EAAG,IAAIioB,GAClB,MAED,IAAK,gBAEL,IAAK,cAEL,IAAK,YAEL,IAAK,iBACJ,MAGD,IAAK,SACR9uR,EAAIsuS,GAAgBp2S,EAAE,GAAG,GAAKq4S,EAAQhvG,GAClCjnL,EAAMtkB,KAAK24S,GAAgB3uS,EAAGyuS,IAC9B,MACD,IAAK,UACRzuS,EAAI8yG,EAAOw7L,GAAgBp2S,EAAE,GAAG,GAAK46G,EAAMyuF,GAASrpM,EAAE,GAAG,GACrDoiB,EAAMtkB,KAAK24S,GAAgB3uS,EAAGyuS,IAC9B,MACD,IAAK,WACR6yB,EAAOppU,EAAE,GAAG,GAAI8H,EAAIsuS,GAAgBp2S,EAAE,GAAG,GAAKq4S,EAAQhvG,GAClD8hI,EAAQD,GAASH,EAAU3B,EAAM//H,GAEjCjnL,EAAMtkB,KAAKqtU,EAAQ,IAAM10B,GAAgB3uS,EAAGyuS,IAC5C,MAED,IAAK,UACL,IAAK,aAEJ,IAAIm1B,EAAQ1rU,EAAE,GAAG,GAAKyzH,EAAQzzH,EAAE,GAAG,GAC/B0rU,IAAMA,EAAO,GAEjB,IAAI9wU,EAAe,IADnB8wU,GAAQ,KACe,GAAKtpT,EAAMpjB,OAAO0sU,GACzCtpT,EAAMhpB,QAAUsyU,EACJ,SAATj4M,IAAiBA,EAAO74H,EAAKmjI,SAChC37G,EAAMtkB,KAAK21H,EAAO,IAAM74H,EAAK+P,KAAK,KAAO,KACzC,MAED,IAAK,UACJyX,EAAMtkB,KAAKkC,EAAE,GAAK,OAAS,SAAU,MACtC,IAAK,SACJoiB,EAAMtkB,KAAKkC,EAAE,IAAK,MACnB,IAAK,SACJoiB,EAAMtkB,KAAK+I,OAAO7G,EAAE,KAAM,MAC3B,IAAK,SAEJoiB,EAAMtkB,KAAK,IAAMkC,EAAE,GAAGuK,QAAQ,KAAM,MAAQ,KAAM,MACnD,IAAK,SACJ6X,EAAMtkB,KAAKkC,EAAE,IAAK,MACnB,IAAK,WACR4B,EAAI40S,GAAgBx2S,EAAE,GAAG,GAAI46G,EAAO,CAAC51G,EAAE41G,GAAQy9L,EAAQhvG,GACnDjnL,EAAMtkB,KAAK64S,GAAiB,EAAKttG,IACjC,MACD,IAAK,UACRznM,EAAI40S,GAAgBx2S,EAAE,GAAG,GAAIq4S,EAAQhvG,GACjCjnL,EAAMtkB,KAAK64S,GAAiB,EAAKttG,IACjC,MACD,IAAK,YACR+/H,EAAOppU,EAAE,GAAG,GAAI4B,EAAI5B,EAAE,GAAG,GACrBmrU,EAAQD,GAASH,EAAU3B,EAAM//H,GACjCjnL,EAAMtkB,KAAKqtU,EAAQ,IAAMx0B,GAAiB,EAAKttG,IAC/C,MACD,IAAK,aACJjnL,EAAMtkB,KAAK,OAASskB,EAAM6F,MAAQ,KAClC,MAED,IAAK,gBACL,IAAK,cACJ,MAED,IAAK,UAEJqjT,EAAWtrU,EAAE,GAAG,GAChB,IAAI2rU,GAAOZ,EAASn9S,OAAO,IAAI09S,EAAQ,KAAOP,EAAS,IAAI,IAAIO,GAC3DrsU,EAAO0sU,EAAMA,EAAIrhB,KAAO,cAAgBzjT,OAAOykU,GAChDrsU,KAAQ2sU,KAAqB3sU,EAAO2sU,GAAoB3sU,IAC3DmjB,EAAMtkB,KAAKmB,GACX,MAED,IAAK,WAEJ,IAAkD4sU,EAA9CC,EAAW9rU,EAAE,GAAG,GAEpB,GAFyBsrU,EAAWtrU,EAAE,GAAG,KAEtCqpM,EAAKktG,MAAQ,GAGT,CACN,IAAI55S,EAAI,GAQR,GAP0C,SAArCouU,EAASe,IAAU,IAAI,IAAI,IAAI,KACW,QAArCf,EAASe,IAAU,IAAI,IAAI,IAAI,GACrCf,EAASe,GAASR,IAAYP,EAASe,GAASR,GAAS3gB,KAAO,IAClEhuT,EAAIouU,EAAS1oH,WAAW0oH,EAASe,GAASR,GAAS3gB,KAAK,GAAK,KAG1DhuT,EAAIouU,EAAS1oH,WAAWipH,EAAQ,GAAI,KACtCP,EAASe,IAAYf,EAASe,GAASR,GAAU3uU,GAAKouU,EAASe,GAASR,GAAShhB,UAC/E,GAAGygB,EAAS,IAAMA,EAAS,GAAGO,GAAU3uU,GAAKouU,EAAS,GAAGO,GAAShhB,SAClE,CACJ,IAAIyhB,EAAWjB,GAAaC,EAAUe,EAASziI,GAAMp/L,MAAM,MACxD8hU,EAAST,EAAU,GAAI3uU,EAAIovU,EAAST,EAAU,GAC5C3uU,GAAK,cAEXylB,EAAMtkB,KAAKnB,GACX,MAnBGmvU,EAAU,IAAGA,GAAWA,GACxBf,EAASe,KAAUD,EAAad,EAASe,GAASR,IAoBlDO,IAAYA,EAAa,CAACvhB,KAAM,gBACpCloS,EAAMtkB,KAAK+tU,EAAWvhB,MACtB,MAED,IAAK,WACJ,IAAI0hB,EAAK,IAAKC,EAAK,IACnB,GAAGV,GAAW,EAAG,CAEhB,OADAC,EAAK,GACEhZ,EAAQ,GAAG+Y,GAAS,GAAG,IAE7B,KAAK,EAAGS,EAAKnyT,GAAK,IAAK24S,EAAQ,GAAG+Y,GAAS,GAAG,IAAMS,EAAI,MAExD,KAAK,EAAGA,EAAKnyT,GAAK,KAAM24S,EAAQ,GAAG+Y,GAAS,GAAG,IAAMS,EAAI,MAEzD,KAAK,EAAGC,EAAKpyT,GAAK,IAAK24S,EAAQ,GAAG+Y,GAAS,GAAG,IAAMU,EAAI,MAExD,KAAK,EAAGA,EAAKpyT,GAAK,KAAM24S,EAAQ,GAAG+Y,GAAS,GAAG,IAAMU,EAAI,MACzD,QAEC,GAAG5iI,EAAKgpG,IAAK,MAAM,IAAI7xS,MAAM,+BAAiCgyT,EAAQ,GAAG+Y,GAAS,GAAG,IAEvFA,GAAW,EAEZnpT,EAAMtkB,KAAKkuU,EAAK5pT,EAAM6F,MAAQgkT,GAAK,MAEpC,IAAK,YAGL,IAAK,cACJ7pT,EAAMtkB,KAAK,SAAU,MAEtB,IAAK,SACJgK,EAAI,CAACA,EAAG9H,EAAE,GAAG,GAAI4B,EAAG5B,EAAE,GAAG,IACzB,IAAI6pE,EAAI,CAAE/hE,EAAG8yG,EAAK9yG,EAAGlG,EAAEg5G,EAAKh5G,GAC5B,GAAGmpU,EAASmB,QAAQx1B,GAAY5uS,IAAK,CACpC,IAAIqkU,EAAWpB,EAASmB,QAAQx1B,GAAY5uS,IAC5Csa,EAAMtkB,KAAKutU,GAAkBc,EAAS9zB,EAAQxuO,EAAGkhQ,EAAU1hI,QAEvD,CACJ,IAAI+iI,GAAM,EACV,IAAIx1C,EAAG,EAAEA,GAAIm0C,EAASsB,OAAOjzU,SAAUw9R,EAGtC,GADAjoB,EAAKo8D,EAASsB,OAAOz1C,KAClB9uR,EAAEA,EAAI6mQ,EAAG,GAAG3pQ,EAAE8C,GAAKA,EAAEA,EAAI6mQ,EAAG,GAAG59O,EAAEjpB,GACjCA,EAAElG,EAAI+sQ,EAAG,GAAG3pQ,EAAEpD,GAAKkG,EAAElG,EAAI+sQ,EAAG,GAAG59O,EAAEnvB,GAApC,CACAwgB,EAAMtkB,KAAKutU,GAAkB18D,EAAG,GAAI0pC,EAAQxuO,EAAGkhQ,EAAU1hI,IACzD+iI,GAAM,EACN,MAEGA,GAAKhqT,EAAMtkB,KAAKkC,EAAE,IAEvB,MAED,IAAK,WACJoiB,EAAMtkB,KAAK,IAAMisU,GAAgB/pU,EAAE,IAAM,KACzC,MAED,IAAK,aAEJ,MAED,IAAK,eACL,IAAK,mBACJurU,EAAU9uC,EACV,MAED,IAAK,SAGL,IAAK,YACJ,MAED,IAAK,aACJr6Q,EAAMtkB,KAAK,IACX,MAED,IAAK,aAGL,IAAK,eACJskB,EAAMtkB,KAAK,SAAU,MAEtB,IAAK,UAEJskB,EAAMtkB,KAAK,QAAUkC,EAAE,GAAGkmH,IAAM,KAAOlmH,EAAE,GAAGypU,GAAK,KACjD,MAED,IAAK,cACL,IAAK,eACL,IAAK,cACL,IAAK,WACL,IAAK,cAGL,IAAK,aAEL,IAAK,cACJ,MAED,IAAK,YACL,IAAK,aACL,IAAK,cACL,IAAK,aACL,IAAK,YACL,IAAK,gBACL,IAAK,mBACL,IAAK,iBACL,IAAK,WACL,IAAK,YACJ,MAAM,IAAIjpU,MAAM,oBAEjB,IAAK,YAEL,QAAS,MAAM,IAAIA,MAAM,+BAAiCqG,OAAO7G,IAGlE,GAAgB,GAAbqpM,EAAKktG,MAAcg1B,GAAW,IAA+C,GAD/D,CAAC,eAAgB,mBAAoB,eACLv/S,QAAQwmS,EAAQ,GAAG/1B,GAAI,IAAW,CAElF,IAAI6vC,GAAQ,EACZ,QAFAtsU,EAAIwyT,EAAQ,GAAG+Y,IAEN,GAAG,IAEX,KAAK,EAAGe,GAAQ,EAEhB,KAAK,EAEJd,EAAK3xT,GAAK,IAAK7Z,EAAE,GAAG,IAAK,MAC1B,KAAK,EAAGssU,GAAQ,EAEhB,KAAK,EAEJd,EAAK3xT,GAAK,KAAM7Z,EAAE,GAAG,IAAK,MAC3B,QAGC,GAFAwrU,EAAK,GAEFniI,EAAKgpG,IAAK,MAAM,IAAI7xS,MAAM,+BAAiCR,EAAE,GAAG,IAErEoiB,EAAMtkB,MAAMwuU,EAAQd,EAAK,IAAMppT,EAAM6F,OAASqkT,EAAQ,GAAKd,IAC3DD,GAAW,GAGb,GAAGnpT,EAAMhpB,OAAS,GAAKiwM,EAAKgpG,IAAK,MAAM,IAAI7xS,MAAM,qBACjD,OAAO4hB,EAAM,GAId,SAASkpS,GAAyB9yC,EAAMp/Q,EAAQiwM,GAC/C,IACIyhH,EADAzvT,EAASm9Q,EAAKl+P,EAAIlhB,EAAQD,EAAmB,GAAbkwM,EAAKktG,KAAY,EAAI,EAC/CmU,EAAMlyC,EAAKioB,WAAWtnS,GAChC,GAAU,OAAPuxT,EAAe,MAAO,CAAC,GAAGtV,GAAU58B,EAAMp/Q,EAAO,IACpD,IAAIyxT,EAAOE,GAAWvyC,EAAMkyC,EAAKrhH,GAGjC,OAFGjwM,IAAWsxT,EAAMvxT,IAAK2xT,EAAOE,GAAexyC,EAAMp/Q,EAASsxT,EAAMvxT,EAAK0xT,EAAMxhH,IAC/EmvE,EAAKl+P,EAAIjf,EACF,CAACwvT,EAAMC,GAwBf,SAASyhB,GAA0B/zD,EAAMp/Q,EAAQiwM,GAChD,IACIyhH,EADAzvT,EAASm9Q,EAAKl+P,EAAIlhB,EACZsxT,EAAMlyC,EAAKioB,WAAW,GAC5BoqB,EAAOE,GAAWvyC,EAAMkyC,EAAKrhH,GACjC,OAAU,OAAPqhH,EAAsB,CAAC,GAAGtV,GAAU58B,EAAMp/Q,EAAO,KACjDA,IAAWsxT,EAAM,IAAGI,EAAOE,GAAexyC,EAAMn9Q,EAASqvT,EAAM,EAAGG,EAAMxhH,IACpE,CAACwhH,EAAMC,IA8Bf,SAAS0hB,GAAch0D,EAAMp/Q,EAAQiwM,GACpC,IAAIhuL,EAAMm9P,EAAKl+P,EAAIlhB,EACfwhH,EAAO2sM,GAAc/uC,GACT,GAAbnvE,EAAKktG,QAAa/9B,EAAKl+P,EAC1B,IAAI/Y,EA9BL,SAA4Bi3Q,GAC3B,IAAI72Q,EACJ,GAAuC,QAApCsxS,GAAez6B,EAAKA,EAAKl+P,EAAI,GAAe,MAAO,CAACygS,GAAWviC,GAAM,KACxE,OAAOA,EAAKA,EAAKl+P,IAChB,KAAK,EAAmB,OAAbk+P,EAAKl+P,GAAK,EAAU,CAAC,SAAU,KAC1C,KAAK,EAA+C,OAAzC3Y,EAAuB,IAAnB62Q,EAAKA,EAAKl+P,EAAE,GAAYk+P,EAAKl+P,GAAK,EAAU,CAAC3Y,EAAE,KAC9D,KAAK,EAAuC,OAAjCA,EAAI62Q,EAAKA,EAAKl+P,EAAE,GAAIk+P,EAAKl+P,GAAK,EAAU,CAAC3Y,EAAE,KACtD,KAAK,EAAmB,OAAb62Q,EAAKl+P,GAAK,EAAU,CAAC,GAAG,KAEpC,MAAO,GAqBGmyT,CAAmBj0D,GACzBzvQ,EAAQyvQ,EAAKioB,WAAW,GACZ,GAAbp3F,EAAKktG,OACP/9B,EAAKioB,WAAW,GACbp3F,EAAKktG,MAAQ,GACD/9B,EAAKioB,WAAW,IAGhC,IAAIisC,EApEL,SAAoCl0D,EAAMp/Q,EAAQiwM,GACjD,IACIyhH,EADAzvT,EAASm9Q,EAAKl+P,EAAIlhB,EAAQD,EAAmB,GAAbkwM,EAAKktG,KAAY,EAAI,EAC/CmU,EAAMlyC,EAAKioB,WAAWtnS,GAChC,GAAU,OAAPuxT,EAAe,MAAO,CAAC,GAAGtV,GAAU58B,EAAMp/Q,EAAO,IACpD,IAAIyxT,EAAOE,GAAWvyC,EAAMkyC,EAAKrhH,GAGjC,OAFGjwM,IAAWsxT,EAAMvxT,IAAK2xT,EAAOE,GAAexyC,EAAMp/Q,EAASsxT,EAAMvxT,EAAK0xT,EAAMxhH,IAC/EmvE,EAAKl+P,EAAIjf,EACF,CAACwvT,EAAMC,GA6DJ6hB,CAA2Bn0D,EAAMn9P,EAAMm9P,EAAKl+P,EAAG+uL,GACzD,MAAO,CAACzuF,KAAKA,EAAMr5G,IAAIA,EAAI,GAAIixT,QAAQka,EAAKE,OAAS7jU,GAAS,EAAK,EAAGylQ,GAAGjtQ,EAAI,IAyB9E,SAASsrU,GAAwBvtU,EAAMlG,EAAQiwM,GAC9C,IAAIqhH,EAAMprT,EAAKmhS,WAAW,GACtBoqB,EAAOE,GAAWzrT,EAAMorT,EAAKrhH,GAC7BisG,EAAKh2S,EAAKmhS,WAAW,GAEzB,MAAO,CAACoqB,EADGvV,EAAK,EAAI0V,GAAe1rT,EAAMg2S,EAAIuV,EAAMxhH,GAAQ,MAK5D,IAAIyjI,GAA+BD,GAE/BE,GAA8BF,GAM9BG,GAA8BH,GAE9BI,GAAgCJ,GAEhChE,GAAQ,CACZ7zC,EAAQ,OACR,EAAQ,OACR,EAAQ,aACR,EAAQ,YACR,EAAQ,OACR,EAAQ,UACR,EAAQ,cACR,EAAQ,aACR,EAAQ,QACR,EAAQ,gBACR,GAAQ,OACR,GAAQ,aACR,GAAQ,cACR,GAAQ,cACR,GAAQ,cACR,GAAQ,OACR,GAAQ,QACR,GAAQ,MACR,GAAQ,iBACR,GAAQ,mBACR,GAAQ,iBACR,GAAQ,oBACR,GAAQ,OACR,GAAQ,UACR,GAAQ,mBACR,GAAQ,YACR,GAAQ,UACR,GAAQ,gBACR,GAAQ,cACR,GAAQ,YACR,GAAQ,UACR,GAAQ,cACR,GAAQ,eACR,GAAQ,eACR,GAAQ,OACR,GAAQ,cACR,GAAQ,QACR,GAAQ,gBACR,GAAQ,YACR,GAAQ,QACR,GAAQ,SACR,GAAQ,kBACR,GAAQ,eACR,GAAQ,OACR,GAAQ,MACR,GAAQ,OACR,GAAQ,QACR,GAAQ,QACR,GAAQ,gBACR,GAAQ,cACR,GAAQ,SACR,GAAQ,aACR,GAAQ,YACR,GAAQ,cACR,GAAQ,eACR,GAAQ,eACR,GAAQ,eACR,GAAQ,mBACR,GAAQ,mBACR,GAAQ,eACR,GAAQ,cACR,GAAQ,iBACR,GAAQ,eACR,GAAQ,cACR,GAAQ,kBACR,GAAQ,cACR,GAAQ,YACR,GAAQ,cACR,GAAQ,YACR,GAAQ,gBACR,GAAQ,OACR,GAAQ,SACR,GAAQ,cACR,GAAQ,YACR,GAAQ,eACR,GAAQ,mBACR,GAAQ,WACR,GAAQ,aACR,GAAQ,UACR,GAAQ,QACR,GAAQ,gBACR,GAAQ,cACR,GAAQ,cACR,GAAQ,QACR,GAAQ,UACR,GAAQ,OACR,GAAQ,SACR,GAAQ,YACR,GAAQ,UACR,GAAQ,eACR,GAAQ,gBACR,GAAQ,iBACR,IAAQ,iBACR,IAAQ,oBACR,IAAQ,oBACR,IAAQ,WACR,IAAQ,gBACR,IAAQ,gBACR,IAAQ,gBACR,IAAQ,gBACR,IAAQ,eACR,IAAQ,SACR,IAAQ,cACR,IAAQ,gBACR,IAAQ,QACR,IAAQ,QACR,IAAQ,QACR,IAAQ,QACR,IAAQ,UACR,IAAQ,UACR,IAAQ,QACR,IAAQ,MACR,IAAQ,cACR,IAAQ,iBACR,IAAQ,UACR,IAAQ,aACR,IAAQ,eACR,IAAQ,eACR,IAAQ,aACR,IAAQ,cACR,IAAQ,cACR,IAAQ,kBACR,IAAQ,YACR,IAAQ,iBACR,IAAQ,cACR,IAAQ,eACR,IAAQ,eACR,IAAQ,YACR,IAAQ,QACR,IAAQ,YACR,IAAQ,UACR,IAAQ,gBACR,IAAQ,UACR,IAAQ,aACR,IAAQ,aACR,IAAQ,gBACR,IAAQ,YACR,IAAQ,aACR,IAAQ,UACR,IAAQ,OACR,IAAQ,cACR,IAAQ,UACR,IAAQ,YACR,IAAQ,iBACR,IAAQ,cACR,IAAQ,oBACR,IAAQ,gBACR,IAAQ,eACR,IAAQ,iBACR,IAAQ,kBACR,IAAQ,cACR,IAAQ,qBACR,IAAQ,SACR,IAAQ,cACR,IAAQ,WACR,IAAQ,WACR,IAAQ,eACR,IAAQ,eACR,IAAQ,iBACR,IAAQ,eACR,IAAQ,kBACR,IAAQ,qBACR,IAAQ,aACR,IAAQ,YACR,IAAQ,YACR,IAAQ,gBACR,IAAQ,cACR,IAAQ,eACR,IAAQ,kBACR,IAAQ,oBACR,IAAQ,kBACR,IAAQ,iBACR,IAAQ,UACR,IAAQ,YACR,IAAQ,YACR,IAAQ,aACR,IAAQ,cACR,IAAQ,UACR,IAAQ,SACR,IAAQ,cACR,IAAQ,UACR,IAAQ,oBACR,IAAQ,kBACR,IAAQ,QACR,IAAQ,aACR,IAAQ,YACR,IAAQ,cACR,IAAQ,mBACR,IAAQ,oBACR,IAAQ,cACR,IAAQ,cACR,IAAQ,mBACR,IAAQ,eACR,IAAQ,aACR,IAAQ,eACR,IAAQ,gBACR,IAAQ,aACR,IAAQ,cACR,IAAQ,cACR,IAAQ,iBACR,IAAQ,YACR,IAAQ,cACR,IAAQ,eACR,IAAQ,aACR,IAAQ,aACR,IAAQ,gBACR,IAAQ,eACR,IAAQ,kBACR,IAAQ,gBACR,IAAQ,qBACR,IAAQ,WACR,IAAQ,OACR,IAAQ,gBACR,IAAQ,kBACR,IAAQ,aACR,IAAQ,aACR,IAAQ,eACR,IAAQ,iBACR,IAAQ,cACR,IAAQ,iBACR,IAAQ,qBACR,IAAQ,YACR,IAAQ,oBACR,IAAQ,WACR,IAAQ,cACR,IAAQ,iBACR,IAAQ,WACR,IAAQ,eACR,IAAQ,gBACR,IAAQ,gBACR,IAAQ,mBACR,IAAQ,iBACR,IAAQ,eACR,IAAQ,cACR,IAAQ,YACR,IAAQ,kBACR,IAAQ,oBACR,IAAQ,iBACR,IAAQ,YACR,IAAQ,aACR,IAAQ,oBACR,IAAQ,aACR,IAAQ,eACR,IAAQ,iBACR,IAAQ,kBACR,IAAQ,eACR,IAAQ,gBACR,IAAQ,gBACR,IAAQ,qBACR,IAAQ,mBACR,IAAQ,qBACR,IAAQ,yBACR,IAAQ,cACR,IAAQ,aACR,IAAQ,mBACR,IAAQ,sBACR,IAAQ,eACR,IAAQ,eACR,IAAQ,gBACR,IAAQ,cACR,IAAQ,kBACR,IAAQ,cACR,IAAQ,gBACR,IAAQ,kBACR,IAAQ,2BACR,IAAQ,eACR,IAAQ,iBACR,IAAQ,aACR,IAAQ,iBACR,IAAQ,YACR,IAAQ,mBACR,IAAQ,cACR,IAAQ,wBACR,IAAQ,kBACR,IAAQ,qBACR,IAAQ,kBACR,IAAQ,kBACR,IAAQ,kBACR,IAAQ,qBACR,IAAQ,aACR,IAAQ,iBACR,IAAQ,eACR,IAAQ,mBACR,IAAQ,aACR,IAAQ,eACR,IAAQ,kBACR,IAAQ,gBACR,IAAQ,gBACR,IAAQ,kBACR,IAAQ,kBACR,IAAQ,gBACR,IAAQ,iBACR,IAAQ,uBACR,IAAQ,0BACR,IAAQ,iBACR,IAAQ,eACR,IAAQ,YACR,IAAQ,cACR,IAAQ,aACR,IAAQ,iBACR,IAAQ,kBACR,IAAQ,kBACR,IAAQ,gBACR,IAAQ,kBACR,IAAQ,gBACR,IAAQ,gBACR,IAAQ,qBACR,IAAQ,cACR,IAAQ,mBACR,IAAQ,uBACR,IAAQ,mBACR,IAAQ,kBACR,IAAQ,mBACR,IAAQ,cACR,IAAQ,iBACR,IAAQ,kBACR,IAAQ,eACR,IAAQ,eACR,IAAQ,oBACR,IAAQ,sBACR,IAAQ,sBACR,IAAQ,mBACR,IAAQ,qBACR,IAAQ,qBACR,IAAQ,gBACR,IAAQ,aACR,IAAQ,YACR,IAAQ,cACR,IAAQ,mBACR,IAAQ,gBACR,IAAQ,wBACR,IAAQ,qBACR,IAAQ,SACR,IAAQ,kBACR,IAAQ,gBACR,IAAQ,kBACR,IAAQ,gBACR,IAAQ,gBACR,IAAQ,mBACR,IAAQ,mBACR,IAAQ,oBACR,IAAQ,eACR,IAAQ,oBACR,IAAQ,uBACR,IAAQ,cACR,IAAQ,WACR,IAAQ,WACR,IAAQ,aACR,IAAQ,aACR,IAAQ,eACR,IAAQ,eACR,IAAQ,cACR,IAAQ,qBACR,IAAQ,yBACR,IAAQ,mBACR,IAAQ,WACR,IAAQ,iBACR,IAAQ,iBACR,IAAQ,eACR,IAAQ,YACR,IAAQ,mBACR,IAAQ,mBACR,IAAQ,iBACR,IAAQ,kBACR,IAAQ,oBACR,IAAQ,mBACR,IAAQ,cACR,IAAQ,gBACR,IAAQ,WACR,IAAQ,YACR,IAAQ,cACR,IAAQ,cACR,IAAQ,mBACR,IAAQ,oBACR,IAAQ,iBACR,IAAQ,YACR,IAAQ,SACR,IAAQ,SACR,IAAQ,gBACR,IAAQ,mBACR,IAAQ,iBACR,IAAQ,WACR,IAAQ,gBACR,IAAQ,gBACR,IAAQ,cACR,IAAQ,iBACR,IAAQ,iBACR,IAAQ,oBACR,IAAQ,sBACR,IAAQ,aACR,IAAQ,cACR,IAAQ,cACR,IAAQ,oBACR,IAAQ,eACR,IAAQ,gBACR,IAAQ,qBAKJyzC,GAAO,CACXzzC,EAAQ,QACR,EAAQ,KACR,EAAQ,OACR,EAAQ,UACR,EAAQ,MACR,EAAQ,UACR,EAAQ,MACR,EAAQ,MACR,EAAQ,MACR,EAAQ,SACR,GAAQ,KACR,GAAQ,MACR,GAAQ,QACR,GAAQ,SACR,GAAQ,QACR,GAAQ,MACR,GAAQ,MACR,GAAQ,MACR,GAAQ,OACR,GAAQ,KACR,GAAQ,OACR,GAAQ,MACR,GAAQ,KACR,GAAQ,QACR,GAAQ,MACR,GAAQ,MACR,GAAQ,OACR,GAAQ,QACR,GAAQ,SACR,GAAQ,QACR,GAAQ,OACR,GAAQ,MACR,GAAQ,MACR,GAAQ,QACR,GAAQ,OACR,GAAQ,QACR,GAAQ,MACR,GAAQ,KACR,GAAQ,MACR,GAAQ,MACR,GAAQ,SACR,GAAQ,OACR,GAAQ,WACR,GAAQ,OACR,GAAQ,OACR,GAAQ,SACR,GAAQ,MACR,GAAQ,OACR,GAAQ,OACR,GAAQ,SACR,GAAQ,QACR,GAAQ,SACR,GAAQ,SACR,GAAQ,OACR,GAAQ,OACR,GAAQ,SACR,GAAQ,KACR,GAAQ,KACR,GAAQ,OACR,GAAQ,MACR,GAAQ,OACR,GAAQ,OACR,GAAQ,MACR,GAAQ,OACR,GAAQ,QACR,GAAQ,OACR,GAAQ,OACR,GAAQ,MACR,GAAQ,QACR,GAAQ,OACR,GAAQ,UACR,GAAQ,OACR,GAAQ,SACR,GAAQ,SACR,GAAQ,MACR,GAAQ,QACR,GAAQ,OACR,GAAQ,UACR,GAAQ,SACR,GAAQ,SACR,GAAQ,SACR,GAAQ,WACR,GAAQ,SACR,GAAQ,YACR,GAAQ,QACR,GAAQ,OACR,GAAQ,OACR,GAAQ,OACR,GAAQ,WACR,GAAQ,SACR,GAAQ,QACR,GAAQ,UACR,GAAQ,SACR,GAAQ,YACR,GAAQ,cACR,GAAQ,YACR,GAAQ,SACR,GAAQ,QACR,GAAQ,OACR,GAAQ,OACR,IAAQ,SACR,IAAQ,UACR,IAAQ,UACR,IAAQ,QACR,IAAQ,QACR,IAAQ,QACR,IAAQ,cACR,IAAQ,WACR,IAAQ,YACR,IAAQ,MACR,IAAQ,OACR,IAAQ,OACR,IAAQ,QACR,IAAQ,QACR,IAAQ,SACR,IAAQ,OACR,IAAQ,QACR,IAAQ,QACR,IAAQ,OACR,IAAQ,UACR,IAAQ,aACR,IAAQ,OACR,IAAQ,QACR,IAAQ,YACR,IAAQ,OACR,IAAQ,OACR,IAAQ,QACR,IAAQ,SACR,IAAQ,WACR,IAAQ,UACR,IAAQ,IACR,IAAQ,IACR,IAAQ,QACR,IAAQ,SACR,IAAQ,QACR,IAAQ,UACR,IAAQ,QACR,IAAQ,WACR,IAAQ,SACR,IAAQ,OACR,IAAQ,YACR,IAAQ,YACR,IAAQ,MACR,IAAQ,MACR,IAAQ,MACR,IAAQ,UACR,IAAQ,UACR,IAAQ,UACR,IAAQ,WACR,IAAQ,WACR,IAAQ,OACR,IAAQ,UACR,IAAQ,WACR,IAAQ,cACR,IAAQ,iBACR,IAAQ,gBACR,IAAQ,iBACR,IAAQ,WACR,IAAQ,cACR,IAAQ,iBACR,IAAQ,iBACR,IAAQ,aACR,IAAQ,QACR,IAAQ,UACR,IAAQ,WACR,IAAQ,QACR,IAAQ,QACR,IAAQ,OACR,IAAQ,OACR,IAAQ,SACR,IAAQ,aACR,IAAQ,MACR,IAAQ,QACR,IAAQ,QACR,IAAQ,OACR,IAAQ,WACR,IAAQ,UACR,IAAQ,OACR,IAAQ,UACR,IAAQ,YACR,IAAQ,UACR,IAAQ,OACR,IAAQ,UACR,IAAQ,UACR,IAAQ,OACR,IAAQ,WACR,IAAQ,gBACR,IAAQ,aACR,IAAQ,eACR,IAAQ,WACR,IAAQ,YACR,IAAQ,WACR,IAAQ,OACR,IAAQ,SACR,IAAQ,OACR,IAAQ,UACR,IAAQ,QACR,IAAQ,QACR,IAAQ,YACR,IAAQ,UACR,IAAQ,aACR,IAAQ,aACR,IAAQ,WACR,IAAQ,QACR,IAAQ,UACR,IAAQ,WACR,IAAQ,QACR,IAAQ,SACR,IAAQ,OACR,IAAQ,OACR,IAAQ,UACR,IAAQ,YACR,IAAQ,MACR,IAAQ,OACR,IAAQ,OACR,IAAQ,UACR,IAAQ,UACR,IAAQ,QACR,IAAQ,MACR,IAAQ,OACR,IAAQ,UACR,IAAQ,SACR,IAAQ,WACR,IAAQ,SACR,IAAQ,aACR,IAAQ,OACR,IAAQ,OACR,IAAQ,OACR,IAAQ,QACR,IAAQ,QACR,IAAQ,QACR,IAAQ,OACR,IAAQ,gBACR,IAAQ,WACR,IAAQ,aACR,IAAQ,cACR,IAAQ,gBACR,IAAQ,kBACR,IAAQ,gBACR,IAAQ,WACR,IAAQ,OACR,IAAQ,QACR,IAAQ,aACR,IAAQ,KACR,IAAQ,QACR,IAAQ,SACR,IAAQ,YACR,IAAQ,cACR,IAAQ,iBACR,IAAQ,OACR,IAAQ,gBACR,IAAQ,WACR,IAAQ,cACR,IAAQ,WACR,IAAQ,iBACR,IAAQ,aACR,IAAQ,YACR,IAAQ,eACR,IAAQ,eACR,IAAQ,cACR,IAAQ,aACR,IAAQ,cACR,IAAQ,eACR,IAAQ,SACR,IAAQ,WACR,IAAQ,UACR,IAAQ,UACR,IAAQ,YACR,IAAQ,UACR,IAAQ,SACR,IAAQ,SACR,IAAQ,aACR,IAAQ,YACR,IAAQ,OACR,IAAQ,YACR,IAAQ,QACR,IAAQ,OACR,IAAQ,SACR,IAAQ,YACR,IAAQ,QACR,IAAQ,YACR,IAAQ,WACR,IAAQ,UACR,IAAQ,cACR,IAAQ,cACR,IAAQ,SACR,IAAQ,eACR,IAAQ,WACR,IAAQ,YACR,IAAQ,UACR,IAAQ,WACR,IAAQ,cACR,IAAQ,MACR,IAAQ,SACR,IAAQ,UACR,IAAQ,QACR,IAAQ,UACR,IAAQ,UACR,IAAQ,WACR,IAAQ,WACR,IAAQ,UACR,IAAQ,SACR,IAAQ,QACR,IAAQ,WACR,IAAQ,QACR,IAAQ,YACR,IAAQ,UACR,IAAQ,MACR,IAAQ,QACR,IAAQ,QACR,IAAQ,QACR,IAAQ,OACR,IAAQ,QACR,IAAQ,UACR,IAAQ,UACR,IAAQ,QACR,IAAQ,OACR,IAAQ,OACR,IAAQ,QACR,IAAQ,QACR,IAAQ,QACR,IAAQ,WACR,IAAQ,aACR,IAAQ,cACR,IAAQ,OACR,IAAQ,WACR,IAAQ,OACR,IAAQ,gBACR,IAAQ,YACR,IAAQ,cACR,IAAQ,QACR,IAAQ,iBACR,IAAQ,kBACR,IAAQ,kBACR,IAAQ,iBACR,IAAQ,UACR,IAAQ,UACR,IAAQ,WACR,IAAQ,QACR,IAAQ,UACR,IAAQ,aACR,IAAQ,eACR,IAAQ,oBACR,IAAQ,QACR,IAAQ,UACR,IAAQ,aACR,IAAQ,eACR,IAAQ,QACR,IAAQ,cACR,IAAQ,cACR,IAAQ,WACR,IAAQ,eACR,IAAQ,YACR,IAAQ,WACR,IAAQ,WACR,IAAQ,OACR,IAAQ,OACR,IAAQ,UACR,IAAQ,QACR,IAAQ,SACR,IAAQ,OACR,IAAQ,WACR,IAAQ,gBACR,IAAQ,YACR,IAAQ,kBACR,IAAQ,eACR,IAAQ,gBACR,IAAQ,mBACR,IAAQ,cACR,IAAQ,gBACR,IAAQ,cACR,IAAQ,WACR,IAAQ,MAER,IAAQ,YACR,IAAQ,aACR,IAAQ,qBACR,IAAQ,mBACR,IAAQ,UACR,IAAQ,UACR,IAAQ,UACR,IAAQ,UACR,IAAQ,UACR,IAAQ,UACR,IAAQ,UACR,IAAQ,UACR,IAAQ,UACR,IAAQ,UACR,IAAQ,UACR,IAAQ,UACR,IAAQ,QACR,IAAQ,QACR,IAAQ,UACR,IAAQ,QACR,IAAQ,SACR,IAAQ,OACR,IAAQ,SACR,IAAQ,UACR,IAAQ,QACR,IAAQ,QACR,IAAQ,QACR,IAAQ,aACR,IAAQ,cACR,IAAQ,YACR,IAAQ,SACR,IAAQ,UACR,IAAQ,QACR,IAAQ,YACR,IAAQ,YACR,IAAQ,aACR,IAAQ,SACR,IAAQ,WACR,IAAQ,QACR,IAAQ,SACR,IAAQ,SACR,IAAQ,QACR,IAAQ,SACR,IAAQ,MACR,IAAQ,OACR,IAAQ,UACR,IAAQ,UACR,IAAQ,UACR,IAAQ,UACR,IAAQ,OACR,IAAQ,OACR,IAAQ,WACR,IAAQ,WACR,IAAQ,UACR,IAAQ,WACR,IAAQ,OACR,IAAQ,YACR,IAAQ,YACR,IAAQ,UACR,IAAQ,aACR,IAAQ,aACR,IAAQ,QACR,IAAQ,QACR,IAAQ,WACR,IAAQ,WACR,IAAQ,UACR,IAAQ,SACR,IAAQ,WACR,IAAQ,UACR,IAAQ,QACR,IAAQ,UACR,IAAQ,WACR,IAAQ,YACR,IAAQ,WACR,IAAQ,aACR,IAAQ,UACR,IAAQ,UACR,IAAQ,UACR,IAAQ,WACR,IAAQ,YACR,IAAQ,YACR,IAAQ,YACR,IAAQ,YACR,IAAQ,YACR,IAAQ,cACR,IAAQ,UACR,IAAQ,YACR,IAAQ,WACR,IAAQ,UACR,IAAQ,UACR,IAAQ,UACR,IAAQ,WACR,IAAQ,UACR,IAAQ,cACR,IAAQ,MACR,IAAQ,cACR,IAAQ,MACR,IAAQ,aACR,IAAQ,gBACR,IAAQ,UACR,IAAQ,eACR,IAAQ,UACR,IAAQ,WACR,IAAQ,SACR,IAAQ,YACR,IAAQ,cAEJwzC,GAAW,CACf,EAAQ,EACR,EAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,GAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EACR,IAAQ,EA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","file":"bundle.js","sourcesContent":["function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n}\n\nmodule.exports = _arrayLikeToArray;","function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nmodule.exports = _arrayWithHoles;","var arrayLikeToArray = require(\"./arrayLikeToArray\");\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}\n\nmodule.exports = _arrayWithoutHoles;","function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}\n\nmodule.exports = _assertThisInitialized;","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nfunction _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}\n\nmodule.exports = _asyncToGenerator;","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nmodule.exports = _classCallCheck;","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nmodule.exports = _createClass;","var superPropBase = require(\"./superPropBase\");\n\nfunction _get(target, property, receiver) {\n if (typeof Reflect !== \"undefined\" && Reflect.get) {\n module.exports = _get = Reflect.get;\n } else {\n module.exports = _get = function _get(target, property, receiver) {\n var base = superPropBase(target, property);\n if (!base) return;\n var desc = Object.getOwnPropertyDescriptor(base, property);\n\n if (desc.get) {\n return desc.get.call(receiver);\n }\n\n return desc.value;\n };\n }\n\n return _get(target, property, receiver || target);\n}\n\nmodule.exports = _get;","function _getPrototypeOf(o) {\n module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n };\n return _getPrototypeOf(o);\n}\n\nmodule.exports = _getPrototypeOf;","var setPrototypeOf = require(\"./setPrototypeOf\");\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}\n\nmodule.exports = _inherits;","function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter);\n}\n\nmodule.exports = _iterableToArray;","function _iterableToArrayLimit(arr, i) {\n if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nmodule.exports = _iterableToArrayLimit;","function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nmodule.exports = _nonIterableRest;","function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nmodule.exports = _nonIterableSpread;","var _typeof = require(\"@babel/runtime/helpers/typeof\");\n\nvar assertThisInitialized = require(\"./assertThisInitialized\");\n\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n }\n\n return assertThisInitialized(self);\n}\n\nmodule.exports = _possibleConstructorReturn;","function _setPrototypeOf(o, p) {\n module.exports = _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nmodule.exports = _setPrototypeOf;","var arrayWithHoles = require(\"./arrayWithHoles\");\n\nvar iterableToArrayLimit = require(\"./iterableToArrayLimit\");\n\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray\");\n\nvar nonIterableRest = require(\"./nonIterableRest\");\n\nfunction _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}\n\nmodule.exports = _slicedToArray;","var getPrototypeOf = require(\"./getPrototypeOf\");\n\nfunction _superPropBase(object, property) {\n while (!Object.prototype.hasOwnProperty.call(object, property)) {\n object = getPrototypeOf(object);\n if (object === null) break;\n }\n\n return object;\n}\n\nmodule.exports = _superPropBase;","var arrayWithoutHoles = require(\"./arrayWithoutHoles\");\n\nvar iterableToArray = require(\"./iterableToArray\");\n\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray\");\n\nvar nonIterableSpread = require(\"./nonIterableSpread\");\n\nfunction _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}\n\nmodule.exports = _toConsumableArray;","function _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n module.exports = _typeof = function _typeof(obj) {\n return typeof obj;\n };\n } else {\n module.exports = _typeof = function _typeof(obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nmodule.exports = _typeof;","var arrayLikeToArray = require(\"./arrayLikeToArray\");\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\n\nmodule.exports = _unsupportedIterableToArray;","module.exports = require(\"regenerator-runtime\");\n","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport const EPSILON_FLOAT32 = 1e-7;\nexport const EPSILON_FLOAT16 = 1e-4;\n/** Convenient class for storing tensor-related data. */\nexport class DataStorage {\n constructor(backend, dataMover) {\n this.backend = backend;\n this.dataMover = dataMover;\n this.data = new WeakMap();\n this.dataIdsCount = 0;\n }\n get(dataId) {\n if (!this.data.has(dataId)) {\n this.dataMover.moveData(this.backend, dataId);\n }\n return this.data.get(dataId);\n }\n set(dataId, value) {\n this.dataIdsCount++;\n this.data.set(dataId, value);\n }\n has(dataId) {\n return this.data.has(dataId);\n }\n delete(dataId) {\n this.dataIdsCount--;\n return this.data.delete(dataId);\n }\n numDataIds() {\n return this.dataIdsCount;\n }\n}\n/**\n * The interface that defines the kernels that should be implemented when\n * adding a new backend. New backends don't need to implement every one of the\n * methods, this can be done gradually (throw an error for unimplemented\n * methods).\n */\nexport class KernelBackend {\n refCount(dataId) {\n return notYetImplemented('refCount');\n }\n incRef(dataId) {\n return notYetImplemented('incRef');\n }\n timerAvailable() {\n return true;\n }\n time(f) {\n return notYetImplemented('time');\n }\n read(dataId) {\n return notYetImplemented('read');\n }\n readSync(dataId) {\n return notYetImplemented('readSync');\n }\n numDataIds() {\n return notYetImplemented('numDataIds');\n }\n disposeData(dataId, force) {\n return notYetImplemented('disposeData');\n }\n write(values, shape, dtype) {\n return notYetImplemented('write');\n }\n move(dataId, values, shape, dtype, refCount) {\n return notYetImplemented('move');\n }\n memory() {\n return notYetImplemented('memory');\n }\n /** Returns the highest precision for floats in bits (e.g. 16 or 32) */\n floatPrecision() {\n return notYetImplemented('floatPrecision');\n }\n /** Returns the smallest representable number. */\n epsilon() {\n return this.floatPrecision() === 32 ? EPSILON_FLOAT32 : EPSILON_FLOAT16;\n }\n dispose() {\n return notYetImplemented('dispose');\n }\n}\nfunction notYetImplemented(kernelName) {\n throw new Error(`'${kernelName}' not yet implemented or not found in the registry. ` +\n `This kernel may not be supported by the tfjs backend you have chosen`);\n}\n//# sourceMappingURL=backend.js.map","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n/**\n * Shuffles the array in-place using Fisher-Yates algorithm.\n *\n * ```js\n * const a = [1, 2, 3, 4, 5];\n * tf.util.shuffle(a);\n * console.log(a);\n * ```\n *\n * @param array The array to shuffle in-place.\n *\n * @doc {heading: 'Util', namespace: 'util'}\n */\n// tslint:disable-next-line:no-any\nexport function shuffle(array) {\n let counter = array.length;\n let temp = 0;\n let index = 0;\n // While there are elements in the array\n while (counter > 0) {\n // Pick a random index\n index = (Math.random() * counter) | 0;\n // Decrease counter by 1\n counter--;\n // And swap the last element with it\n temp = array[counter];\n array[counter] = array[index];\n array[index] = temp;\n }\n}\n/**\n * Shuffles two arrays in-place the same way using Fisher-Yates algorithm.\n *\n * ```js\n * const a = [1,2,3,4,5];\n * const b = [11,22,33,44,55];\n * tf.util.shuffleCombo(a, b);\n * console.log(a, b);\n * ```\n *\n * @param array The first array to shuffle in-place.\n * @param array2 The second array to shuffle in-place with the same permutation\n * as the first array.\n *\n * @doc {heading: 'Util', namespace: 'util'}\n */\nexport function shuffleCombo(\n// tslint:disable-next-line:no-any\narray, \n// tslint:disable-next-line:no-any\narray2) {\n if (array.length !== array2.length) {\n throw new Error(`Array sizes must match to be shuffled together ` +\n `First array length was ${array.length}` +\n `Second array length was ${array2.length}`);\n }\n let counter = array.length;\n let temp, temp2;\n let index = 0;\n // While there are elements in the array\n while (counter > 0) {\n // Pick a random index\n index = (Math.random() * counter) | 0;\n // Decrease counter by 1\n counter--;\n // And swap the last element of each array with it\n temp = array[counter];\n temp2 = array2[counter];\n array[counter] = array[index];\n array2[counter] = array2[index];\n array[index] = temp;\n array2[index] = temp2;\n }\n}\n/** Clamps a value to a specified range. */\nexport function clamp(min, x, max) {\n return Math.max(min, Math.min(x, max));\n}\nexport function nearestLargerEven(val) {\n return val % 2 === 0 ? val : val + 1;\n}\nexport function sum(arr) {\n let sum = 0;\n for (let i = 0; i < arr.length; i++) {\n sum += arr[i];\n }\n return sum;\n}\n/**\n * Returns a sample from a uniform [a, b) distribution.\n *\n * @param a The minimum support (inclusive).\n * @param b The maximum support (exclusive).\n * @return A pseudorandom number on the half-open interval [a,b).\n */\nexport function randUniform(a, b) {\n const r = Math.random();\n return (b * r) + (1 - r) * a;\n}\n/** Returns the squared Euclidean distance between two vectors. */\nexport function distSquared(a, b) {\n let result = 0;\n for (let i = 0; i < a.length; i++) {\n const diff = Number(a[i]) - Number(b[i]);\n result += diff * diff;\n }\n return result;\n}\n/**\n * Asserts that the expression is true. Otherwise throws an error with the\n * provided message.\n *\n * ```js\n * const x = 2;\n * tf.util.assert(x === 2, 'x is not 2');\n * ```\n *\n * @param expr The expression to assert (as a boolean).\n * @param msg A function that returns the message to report when throwing an\n * error. We use a function for performance reasons.\n *\n * @doc {heading: 'Util', namespace: 'util'}\n */\nexport function assert(expr, msg) {\n if (!expr) {\n throw new Error(typeof msg === 'string' ? msg : msg());\n }\n}\nexport function assertShapesMatch(shapeA, shapeB, errorMessagePrefix = '') {\n assert(arraysEqual(shapeA, shapeB), () => errorMessagePrefix + ` Shapes ${shapeA} and ${shapeB} must match`);\n}\nexport function assertNonNull(a) {\n assert(a != null, () => `The input to the tensor constructor must be a non-null value.`);\n}\n// NOTE: We explicitly type out what T extends instead of any so that\n// util.flatten on a nested array of number doesn't try to infer T as a\n// number[][], causing us to explicitly type util.flatten().\n/**\n * Flattens an arbitrarily nested array.\n *\n * ```js\n * const a = [[1, 2], [3, 4], [5, [6, [7]]]];\n * const flat = tf.util.flatten(a);\n * console.log(flat);\n * ```\n *\n * @param arr The nested array to flatten.\n * @param result The destination array which holds the elements.\n * @param skipTypedArray If true, avoids flattening the typed arrays. Defaults\n * to false.\n *\n * @doc {heading: 'Util', namespace: 'util'}\n */\nexport function flatten(arr, result = [], skipTypedArray = false) {\n if (result == null) {\n result = [];\n }\n if (Array.isArray(arr) || isTypedArray(arr) && !skipTypedArray) {\n for (let i = 0; i < arr.length; ++i) {\n flatten(arr[i], result, skipTypedArray);\n }\n }\n else {\n result.push(arr);\n }\n return result;\n}\n/**\n * Returns the size (number of elements) of the tensor given its shape.\n *\n * ```js\n * const shape = [3, 4, 2];\n * const size = tf.util.sizeFromShape(shape);\n * console.log(size);\n * ```\n *\n * @doc {heading: 'Util', namespace: 'util'}\n */\nexport function sizeFromShape(shape) {\n if (shape.length === 0) {\n // Scalar.\n return 1;\n }\n let size = shape[0];\n for (let i = 1; i < shape.length; i++) {\n size *= shape[i];\n }\n return size;\n}\nexport function isScalarShape(shape) {\n return shape.length === 0;\n}\nexport function arraysEqual(n1, n2) {\n if (n1 === n2) {\n return true;\n }\n if (n1 == null || n2 == null) {\n return false;\n }\n if (n1.length !== n2.length) {\n return false;\n }\n for (let i = 0; i < n1.length; i++) {\n if (n1[i] !== n2[i]) {\n return false;\n }\n }\n return true;\n}\nexport function isInt(a) {\n return a % 1 === 0;\n}\nexport function tanh(x) {\n // tslint:disable-next-line:no-any\n if (Math.tanh != null) {\n // tslint:disable-next-line:no-any\n return Math.tanh(x);\n }\n if (x === Infinity) {\n return 1;\n }\n else if (x === -Infinity) {\n return -1;\n }\n else {\n const e2x = Math.exp(2 * x);\n return (e2x - 1) / (e2x + 1);\n }\n}\nexport function sizeToSquarishShape(size) {\n const width = Math.ceil(Math.sqrt(size));\n return [width, Math.ceil(size / width)];\n}\n/**\n * Creates a new array with randomized indicies to a given quantity.\n *\n * ```js\n * const randomTen = tf.util.createShuffledIndices(10);\n * console.log(randomTen);\n * ```\n *\n * @param number Quantity of how many shuffled indicies to create.\n *\n * @doc {heading: 'Util', namespace: 'util'}\n */\nexport function createShuffledIndices(n) {\n const shuffledIndices = new Uint32Array(n);\n for (let i = 0; i < n; ++i) {\n shuffledIndices[i] = i;\n }\n shuffle(shuffledIndices);\n return shuffledIndices;\n}\nexport function rightPad(a, size) {\n if (size <= a.length) {\n return a;\n }\n return a + ' '.repeat(size - a.length);\n}\nexport function repeatedTry(checkFn, delayFn = (counter) => 0, maxCounter) {\n return new Promise((resolve, reject) => {\n let tryCount = 0;\n const tryFn = () => {\n if (checkFn()) {\n resolve();\n return;\n }\n tryCount++;\n const nextBackoff = delayFn(tryCount);\n if (maxCounter != null && tryCount >= maxCounter) {\n reject();\n return;\n }\n setTimeout(tryFn, nextBackoff);\n };\n tryFn();\n });\n}\n/**\n * Given the full size of the array and a shape that may contain -1 as the\n * implicit dimension, returns the inferred shape where -1 is replaced.\n * E.g. For shape=[2, -1, 3] and size=24, it will return [2, 4, 3].\n *\n * @param shape The shape, which may contain -1 in some dimension.\n * @param size The full size (number of elements) of the array.\n * @return The inferred shape where -1 is replaced with the inferred size.\n */\nexport function inferFromImplicitShape(shape, size) {\n let shapeProd = 1;\n let implicitIdx = -1;\n for (let i = 0; i < shape.length; ++i) {\n if (shape[i] >= 0) {\n shapeProd *= shape[i];\n }\n else if (shape[i] === -1) {\n if (implicitIdx !== -1) {\n throw Error(`Shapes can only have 1 implicit size. ` +\n `Found -1 at dim ${implicitIdx} and dim ${i}`);\n }\n implicitIdx = i;\n }\n else if (shape[i] < 0) {\n throw Error(`Shapes can not be < 0. Found ${shape[i]} at dim ${i}`);\n }\n }\n if (implicitIdx === -1) {\n if (size > 0 && size !== shapeProd) {\n throw Error(`Size(${size}) must match the product of shape ${shape}`);\n }\n return shape;\n }\n if (shapeProd === 0) {\n throw Error(`Cannot infer the missing size in [${shape}] when ` +\n `there are 0 elements`);\n }\n if (size % shapeProd !== 0) {\n throw Error(`The implicit shape can't be a fractional number. ` +\n `Got ${size} / ${shapeProd}`);\n }\n const newShape = shape.slice();\n newShape[implicitIdx] = size / shapeProd;\n return newShape;\n}\nexport function parseAxisParam(axis, shape) {\n const rank = shape.length;\n // Normalize input\n axis = axis == null ? shape.map((s, i) => i) : [].concat(axis);\n // Check for valid range\n assert(axis.every(ax => ax >= -rank && ax < rank), () => `All values in axis param must be in range [-${rank}, ${rank}) but ` +\n `got axis ${axis}`);\n // Check for only integers\n assert(axis.every(ax => isInt(ax)), () => `All values in axis param must be integers but ` +\n `got axis ${axis}`);\n // Handle negative axis.\n return axis.map(a => a < 0 ? rank + a : a);\n}\n/** Reduces the shape by removing all dimensions of shape 1. */\nexport function squeezeShape(shape, axis) {\n const newShape = [];\n const keptDims = [];\n const isEmptyArray = axis != null && Array.isArray(axis) && axis.length === 0;\n const axes = (axis == null || isEmptyArray) ?\n null :\n parseAxisParam(axis, shape).sort();\n let j = 0;\n for (let i = 0; i < shape.length; ++i) {\n if (axes != null) {\n if (axes[j] === i && shape[i] !== 1) {\n throw new Error(`Can't squeeze axis ${i} since its dim '${shape[i]}' is not 1`);\n }\n if ((axes[j] == null || axes[j] > i) && shape[i] === 1) {\n newShape.push(shape[i]);\n keptDims.push(i);\n }\n if (axes[j] <= i) {\n j++;\n }\n }\n if (shape[i] !== 1) {\n newShape.push(shape[i]);\n keptDims.push(i);\n }\n }\n return { newShape, keptDims };\n}\nexport function getTypedArrayFromDType(dtype, size) {\n let values = null;\n if (dtype == null || dtype === 'float32') {\n values = new Float32Array(size);\n }\n else if (dtype === 'int32') {\n values = new Int32Array(size);\n }\n else if (dtype === 'bool') {\n values = new Uint8Array(size);\n }\n else {\n throw new Error(`Unknown data type ${dtype}`);\n }\n return values;\n}\nexport function getArrayFromDType(dtype, size) {\n let values = null;\n if (dtype == null || dtype === 'float32') {\n values = new Float32Array(size);\n }\n else if (dtype === 'int32') {\n values = new Int32Array(size);\n }\n else if (dtype === 'bool') {\n values = new Uint8Array(size);\n }\n else if (dtype === 'string') {\n values = new Array(size);\n }\n else {\n throw new Error(`Unknown data type ${dtype}`);\n }\n return values;\n}\nexport function checkConversionForErrors(vals, dtype) {\n for (let i = 0; i < vals.length; i++) {\n const num = vals[i];\n if (isNaN(num) || !isFinite(num)) {\n throw Error(`A tensor of type ${dtype} being uploaded contains ${num}.`);\n }\n }\n}\n/** Returns true if the dtype is valid. */\nexport function isValidDtype(dtype) {\n return dtype === 'bool' || dtype === 'complex64' || dtype === 'float32' ||\n dtype === 'int32' || dtype === 'string';\n}\n/**\n * Returns true if the new type can't encode the old type without loss of\n * precision.\n */\nexport function hasEncodingLoss(oldType, newType) {\n if (newType === 'complex64') {\n return false;\n }\n if (newType === 'float32' && oldType !== 'complex64') {\n return false;\n }\n if (newType === 'int32' && oldType !== 'float32' && oldType !== 'complex64') {\n return false;\n }\n if (newType === 'bool' && oldType === 'bool') {\n return false;\n }\n return true;\n}\nexport function isTypedArray(a) {\n return a instanceof Float32Array || a instanceof Int32Array ||\n a instanceof Uint8Array;\n}\nexport function bytesPerElement(dtype) {\n if (dtype === 'float32' || dtype === 'int32') {\n return 4;\n }\n else if (dtype === 'complex64') {\n return 8;\n }\n else if (dtype === 'bool') {\n return 1;\n }\n else {\n throw new Error(`Unknown dtype ${dtype}`);\n }\n}\n/**\n * Returns the approximate number of bytes allocated in the string array - 2\n * bytes per character. Computing the exact bytes for a native string in JS is\n * not possible since it depends on the encoding of the html page that serves\n * the website.\n */\nexport function bytesFromStringArray(arr) {\n if (arr == null) {\n return 0;\n }\n let bytes = 0;\n arr.forEach(x => bytes += x.length);\n return bytes;\n}\n/** Returns true if the value is a string. */\nexport function isString(value) {\n return typeof value === 'string' || value instanceof String;\n}\nexport function isBoolean(value) {\n return typeof value === 'boolean';\n}\nexport function isNumber(value) {\n return typeof value === 'number';\n}\nexport function inferDtype(values) {\n if (Array.isArray(values)) {\n return inferDtype(values[0]);\n }\n if (values instanceof Float32Array) {\n return 'float32';\n }\n else if (values instanceof Int32Array || values instanceof Uint8Array) {\n return 'int32';\n }\n else if (isNumber(values)) {\n return 'float32';\n }\n else if (isString(values)) {\n return 'string';\n }\n else if (isBoolean(values)) {\n return 'bool';\n }\n return 'float32';\n}\nexport function isFunction(f) {\n return !!(f && f.constructor && f.call && f.apply);\n}\nexport function nearestDivisor(size, start) {\n for (let i = start; i < size; ++i) {\n if (size % i === 0) {\n return i;\n }\n }\n return size;\n}\nexport function computeStrides(shape) {\n const rank = shape.length;\n if (rank < 2) {\n return [];\n }\n // Last dimension has implicit stride of 1, thus having D-1 (instead of D)\n // strides.\n const strides = new Array(rank - 1);\n strides[rank - 2] = shape[rank - 1];\n for (let i = rank - 3; i >= 0; --i) {\n strides[i] = strides[i + 1] * shape[i + 1];\n }\n return strides;\n}\nfunction createNestedArray(offset, shape, a, isComplex = false) {\n const ret = new Array();\n if (shape.length === 1) {\n const d = shape[0] * (isComplex ? 2 : 1);\n for (let i = 0; i < d; i++) {\n ret[i] = a[offset + i];\n }\n }\n else {\n const d = shape[0];\n const rest = shape.slice(1);\n const len = rest.reduce((acc, c) => acc * c) * (isComplex ? 2 : 1);\n for (let i = 0; i < d; i++) {\n ret[i] = createNestedArray(offset + i * len, rest, a, isComplex);\n }\n }\n return ret;\n}\n// Provide a nested array of TypedArray in given shape.\nexport function toNestedArray(shape, a, isComplex = false) {\n if (shape.length === 0) {\n // Scalar type should return a single number.\n return a[0];\n }\n const size = shape.reduce((acc, c) => acc * c) * (isComplex ? 2 : 1);\n if (size === 0) {\n // A tensor with shape zero should be turned into empty list.\n return [];\n }\n if (size !== a.length) {\n throw new Error(`[${shape}] does not match the input size ${a.length}${isComplex ? ' for a complex tensor' : ''}.`);\n }\n return createNestedArray(0, shape, a, isComplex);\n}\nexport function makeOnesTypedArray(size, dtype) {\n const array = makeZerosTypedArray(size, dtype);\n for (let i = 0; i < array.length; i++) {\n array[i] = 1;\n }\n return array;\n}\nexport function makeZerosTypedArray(size, dtype) {\n if (dtype == null || dtype === 'float32' || dtype === 'complex64') {\n return new Float32Array(size);\n }\n else if (dtype === 'int32') {\n return new Int32Array(size);\n }\n else if (dtype === 'bool') {\n return new Uint8Array(size);\n }\n else {\n throw new Error(`Unknown data type ${dtype}`);\n }\n}\n/**\n * Make nested `TypedArray` filled with zeros.\n * @param shape The shape information for the nested array.\n * @param dtype dtype of the array element.\n */\nexport function makeZerosNestedTypedArray(shape, dtype) {\n const size = shape.reduce((prev, curr) => prev * curr, 1);\n if (dtype == null || dtype === 'float32') {\n return toNestedArray(shape, new Float32Array(size));\n }\n else if (dtype === 'int32') {\n return toNestedArray(shape, new Int32Array(size));\n }\n else if (dtype === 'bool') {\n return toNestedArray(shape, new Uint8Array(size));\n }\n else {\n throw new Error(`Unknown data type ${dtype}`);\n }\n}\nexport function assertNonNegativeIntegerDimensions(shape) {\n shape.forEach(dimSize => {\n assert(Number.isInteger(dimSize) && dimSize >= 0, () => `Tensor must have a shape comprised of positive integers but got ` +\n `shape [${shape}].`);\n });\n}\n/**\n * Computes flat index for a given location (multidimentionsal index) in a\n * Tensor/multidimensional array.\n *\n * @param locs Location in the tensor.\n * @param rank Rank of the tensor.\n * @param strides Tensor strides.\n */\nexport function locToIndex(locs, rank, strides) {\n if (rank === 0) {\n return 0;\n }\n else if (rank === 1) {\n return locs[0];\n }\n let index = locs[locs.length - 1];\n for (let i = 0; i < locs.length - 1; ++i) {\n index += strides[i] * locs[i];\n }\n return index;\n}\n/**\n * Computes the location (multidimensional index) in a tensor/multidimentional\n * array for a given flat index.\n *\n * @param index Index in flat array.\n * @param rank Rank of tensor.\n * @param strides Strides of tensor.\n */\nexport function indexToLoc(index, rank, strides) {\n if (rank === 0) {\n return [];\n }\n else if (rank === 1) {\n return [index];\n }\n const locs = new Array(rank);\n for (let i = 0; i < locs.length - 1; ++i) {\n locs[i] = Math.floor(index / strides[i]);\n index -= locs[i] * strides[i];\n }\n locs[locs.length - 1] = index;\n return locs;\n}\n/**\n * This method asserts whether an object is a Promise instance.\n * @param object\n */\n// tslint:disable-next-line: no-any\nexport function isPromise(object) {\n // We chose to not use 'obj instanceOf Promise' for two reasons:\n // 1. It only reliably works for es6 Promise, not other Promise\n // implementations.\n // 2. It doesn't work with framework that uses zone.js. zone.js monkey patch\n // the async calls, so it is possible the obj (patched) is comparing to a\n // pre-patched Promise.\n return object && object.then && typeof object.then === 'function';\n}\n//# sourceMappingURL=util_base.js.map","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { isPromise } from './util_base';\n// Expects flags from URL in the format ?tfjsflags=FLAG1:1,FLAG2:true.\nconst TENSORFLOWJS_FLAGS_PREFIX = 'tfjsflags';\n/**\n * The environment contains evaluated flags as well as the registered platform.\n * This is always used as a global singleton and can be retrieved with\n * `tf.env()`.\n *\n * @doc {heading: 'Environment'}\n */\nexport class Environment {\n // tslint:disable-next-line: no-any\n constructor(global) {\n this.global = global;\n this.flags = {};\n this.flagRegistry = {};\n this.urlFlags = {};\n // Jasmine spies on this in 'environment_test.ts'\n this.getQueryParams = getQueryParams;\n this.populateURLFlags();\n }\n setPlatform(platformName, platform) {\n if (this.platform != null) {\n console.warn(`Platform ${this.platformName} has already been set. ` +\n `Overwriting the platform with ${platform}.`);\n }\n this.platformName = platformName;\n this.platform = platform;\n }\n registerFlag(flagName, evaluationFn, setHook) {\n this.flagRegistry[flagName] = { evaluationFn, setHook };\n // Override the flag value from the URL. This has to happen here because the\n // environment is initialized before flags get registered.\n if (this.urlFlags[flagName] != null) {\n const flagValue = this.urlFlags[flagName];\n console.warn(`Setting feature override from URL ${flagName}: ${flagValue}.`);\n this.set(flagName, flagValue);\n }\n }\n async getAsync(flagName) {\n if (flagName in this.flags) {\n return this.flags[flagName];\n }\n this.flags[flagName] = await this.evaluateFlag(flagName);\n return this.flags[flagName];\n }\n get(flagName) {\n if (flagName in this.flags) {\n return this.flags[flagName];\n }\n const flagValue = this.evaluateFlag(flagName);\n if (isPromise(flagValue)) {\n throw new Error(`Flag ${flagName} cannot be synchronously evaluated. ` +\n `Please use getAsync() instead.`);\n }\n this.flags[flagName] = flagValue;\n return this.flags[flagName];\n }\n getNumber(flagName) {\n return this.get(flagName);\n }\n getBool(flagName) {\n return this.get(flagName);\n }\n getFlags() {\n return this.flags;\n }\n // For backwards compatibility.\n get features() {\n return this.flags;\n }\n set(flagName, value) {\n if (this.flagRegistry[flagName] == null) {\n throw new Error(`Cannot set flag ${flagName} as it has not been registered.`);\n }\n this.flags[flagName] = value;\n if (this.flagRegistry[flagName].setHook != null) {\n this.flagRegistry[flagName].setHook(value);\n }\n }\n evaluateFlag(flagName) {\n if (this.flagRegistry[flagName] == null) {\n throw new Error(`Cannot evaluate flag '${flagName}': no evaluation function found.`);\n }\n return this.flagRegistry[flagName].evaluationFn();\n }\n setFlags(flags) {\n this.flags = Object.assign({}, flags);\n }\n reset() {\n this.flags = {};\n this.urlFlags = {};\n this.populateURLFlags();\n }\n populateURLFlags() {\n if (typeof this.global === 'undefined' ||\n typeof this.global.location === 'undefined' ||\n typeof this.global.location.search === 'undefined') {\n return;\n }\n const urlParams = this.getQueryParams(this.global.location.search);\n if (TENSORFLOWJS_FLAGS_PREFIX in urlParams) {\n const keyValues = urlParams[TENSORFLOWJS_FLAGS_PREFIX].split(',');\n keyValues.forEach(keyValue => {\n const [key, value] = keyValue.split(':');\n this.urlFlags[key] = parseValue(key, value);\n });\n }\n }\n}\nexport function getQueryParams(queryString) {\n const params = {};\n queryString.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g, (s, ...t) => {\n decodeParam(params, t[0], t[1]);\n return t.join('=');\n });\n return params;\n}\nfunction decodeParam(params, name, value) {\n params[decodeURIComponent(name)] = decodeURIComponent(value || '');\n}\nfunction parseValue(flagName, value) {\n value = value.toLowerCase();\n if (value === 'true' || value === 'false') {\n return value === 'true';\n }\n else if (`${+value}` === value) {\n return +value;\n }\n throw new Error(`Could not parse value flag value ${value} for flag ${flagName}.`);\n}\n/**\n * Returns the current environment (a global singleton).\n *\n * The environment object contains the evaluated feature values as well as the\n * active platform.\n *\n * @doc {heading: 'Environment'}\n */\nexport function env() {\n return ENV;\n}\nexport let ENV = null;\nexport function setEnvironmentGlobal(environment) {\n ENV = environment;\n}\n//# sourceMappingURL=environment.js.map","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// Note that the identifier globalNameSpace is scoped to this module, but will\n// always resolve to the same global object regardless of how the module is\n// resolved.\n// tslint:disable-next-line:no-any\nlet globalNameSpace;\n// tslint:disable-next-line:no-any\nexport function getGlobalNamespace() {\n if (globalNameSpace == null) {\n // tslint:disable-next-line:no-any\n let ns;\n if (typeof (window) !== 'undefined') {\n ns = window;\n }\n else if (typeof (global) !== 'undefined') {\n ns = global;\n }\n else if (typeof (process) !== 'undefined') {\n ns = process;\n }\n else if (typeof (self) !== 'undefined') {\n ns = self;\n }\n else {\n throw new Error('Could not find a global object');\n }\n globalNameSpace = ns;\n }\n return globalNameSpace;\n}\n// tslint:disable-next-line:no-any\nfunction getGlobalMap() {\n const ns = getGlobalNamespace();\n if (ns._tfGlobals == null) {\n ns._tfGlobals = new Map();\n }\n return ns._tfGlobals;\n}\n/**\n * Returns a globally accessible 'singleton' object.\n *\n * @param key the name of the object\n * @param init a function to initialize to initialize this object\n * the first time it is fetched.\n */\nexport function getGlobal(key, init) {\n const globalMap = getGlobalMap();\n if (globalMap.has(key)) {\n return globalMap.get(key);\n }\n else {\n const singleton = init();\n globalMap.set(key, singleton);\n return globalMap.get(key);\n }\n}\n//# sourceMappingURL=global_util.js.map","export const Abs = 'Abs';\nexport const Acos = 'Acos';\nexport const Acosh = 'Acosh';\nexport const Add = 'Add';\nexport const AddN = 'AddN';\nexport const All = 'All';\nexport const Any = 'Any';\nexport const ArgMax = 'ArgMax';\nexport const ArgMin = 'ArgMin';\nexport const Asin = 'Asin';\nexport const Asinh = 'Asinh';\nexport const Atan = 'Atan';\nexport const Atanh = 'Atanh';\nexport const Atan2 = 'Atan2';\nexport const AvgPool = 'AvgPool';\nexport const AvgPoolGrad = 'AvgPoolGrad';\nexport const AvgPool3D = 'AvgPool3D';\nexport const AvgPool3DGrad = 'AvgPool3DGrad';\nexport const BatchMatMul = 'BatchMatMul';\nexport const BatchToSpaceND = 'BatchToSpaceND';\nexport const Bincount = 'Bincount';\nexport const BroadcastTo = 'BroadcastTo';\nexport const Cast = 'Cast';\nexport const Ceil = 'Ceil';\nexport const ClipByValue = 'ClipByValue';\nexport const Complex = 'Complex';\nexport const ComplexAbs = 'ComplexAbs';\nexport const Concat = 'Concat';\nexport const Conv2D = 'Conv2D';\nexport const Conv2DBackpropFilter = 'Conv2DBackpropFilter';\nexport const Conv2DBackpropInput = 'Conv2DBackpropInput';\nexport const Conv3D = 'Conv3D';\nexport const Conv3DBackpropFilterV2 = 'Conv3DBackpropFilterV2';\nexport const Conv3DBackpropInputV2 = 'Conv3DBackpropInputV2';\nexport const Cos = 'Cos';\nexport const Cosh = 'Cosh';\nexport const Cumsum = 'Cumsum';\nexport const CropAndResize = 'CropAndResize';\nexport const DenseBincount = 'DenseBincount';\nexport const DepthToSpace = 'DepthToSpace';\nexport const DepthwiseConv2dNative = 'DepthwiseConv2dNative';\nexport const DepthwiseConv2dNativeBackpropFilter = 'DepthwiseConv2dNativeBackpropFilter';\nexport const DepthwiseConv2dNativeBackpropInput = 'DepthwiseConv2dNativeBackpropInput';\nexport const Diag = 'Diag';\nexport const Dilation2D = 'Dilation2D';\nexport const Dilation2DBackpropInput = 'Dilation2DBackpropInput';\nexport const Dilation2DBackpropFilter = 'Dilation2DBackpropFilter';\nexport const RealDiv = 'RealDiv';\nexport const Einsum = 'Einsum';\nexport const Elu = 'Elu';\nexport const EluGrad = 'EluGrad';\nexport const Erf = 'Erf';\nexport const Equal = 'Equal';\nexport const Exp = 'Exp';\nexport const ExpandDims = 'ExpandDims';\nexport const Expm1 = 'Expm1';\nexport const FFT = 'FFT';\nexport const Fill = 'Fill';\nexport const FlipLeftRight = 'FlipLeftRight';\nexport const Floor = 'Floor';\nexport const FloorDiv = 'FloorDiv';\nexport const FusedBatchNorm = 'FusedBatchNorm';\nexport const GatherV2 = 'GatherV2';\nexport const GatherNd = 'GatherNd';\nexport const Greater = 'Greater';\nexport const GreaterEqual = 'GreaterEqual';\nexport const Identity = 'Identity';\nexport const IFFT = 'IFFT';\nexport const Imag = 'Imag';\nexport const IsFinite = 'IsFinite';\nexport const IsInf = 'IsInf';\nexport const IsNan = 'IsNan';\nexport const LeakyRelu = 'LeakyRelu';\nexport const Less = 'Less';\nexport const LessEqual = 'LessEqual';\nexport const LinSpace = 'LinSpace';\nexport const Log = 'Log';\nexport const Log1p = 'Log1p';\nexport const LogicalAnd = 'LogicalAnd';\nexport const LogicalNot = 'LogicalNot';\nexport const LogicalOr = 'LogicalOr';\nexport const LogSoftmax = 'LogSoftmax';\nexport const LRN = 'LRN';\nexport const LRNGrad = 'LRNGrad';\nexport const Max = 'Max';\nexport const Maximum = 'Maximum';\nexport const MaxPool = 'MaxPool';\nexport const MaxPoolGrad = 'MaxPoolGrad';\nexport const MaxPool3D = 'MaxPool3D';\nexport const MaxPool3DGrad = 'MaxPool3DGrad';\nexport const MaxPoolWithArgmax = 'MaxPoolWithArgmax';\nexport const Mean = 'Mean';\nexport const Min = 'Min';\nexport const Minimum = 'Minimum';\nexport const MirrorPad = 'MirrorPad';\nexport const Mod = 'Mod';\nexport const Multinomial = 'Multinomial';\nexport const Multiply = 'Multiply';\nexport const Neg = 'Neg';\nexport const NotEqual = 'NotEqual';\nexport const NonMaxSuppressionV3 = 'NonMaxSuppressionV3';\nexport const NonMaxSuppressionV4 = 'NonMaxSuppressionV4';\nexport const NonMaxSuppressionV5 = 'NonMaxSuppressionV5';\nexport const OnesLike = 'OnesLike';\nexport const OneHot = 'OneHot';\nexport const Pack = 'Pack';\nexport const PadV2 = 'PadV2';\nexport const Pool = 'Pool';\nexport const Pow = 'Pow';\nexport const Prelu = 'Prelu';\nexport const Prod = 'Prod';\nexport const Range = 'Range';\nexport const Real = 'Real';\nexport const Reciprocal = 'Reciprocal';\nexport const Relu = 'Relu';\nexport const Reshape = 'Reshape';\nexport const ResizeNearestNeighbor = 'ResizeNearestNeighbor';\nexport const ResizeNearestNeighborGrad = 'ResizeNearestNeighborGrad';\nexport const ResizeBilinear = 'ResizeBilinear';\nexport const ResizeBilinearGrad = 'ResizeBilinearGrad';\nexport const Relu6 = 'Relu6';\nexport const Reverse = 'Reverse';\nexport const Round = 'Round';\nexport const Rsqrt = 'Rsqrt';\nexport const ScatterNd = 'ScatterNd';\nexport const Select = 'Select';\nexport const Selu = 'Selu';\nexport const Slice = 'Slice';\nexport const Sin = 'Sin';\nexport const Sinh = 'Sinh';\nexport const Sign = 'Sign';\nexport const Sigmoid = 'Sigmoid';\nexport const Softplus = 'Softplus';\nexport const Sqrt = 'Sqrt';\nexport const Sum = 'Sum';\nexport const SpaceToBatchND = 'SpaceToBatchND';\nexport const SplitV = 'SplitV';\nexport const Softmax = 'Softmax';\nexport const SparseFillEmptyRows = 'SparseFillEmptyRows';\nexport const SparseReshape = 'SparseReshape';\nexport const SparseToDense = 'SparseToDense';\nexport const SquaredDifference = 'SquaredDifference';\nexport const Square = 'Square';\nexport const StridedSlice = 'StridedSlice';\nexport const Sub = 'Sub';\nexport const Tan = 'Tan';\nexport const Tanh = 'Tanh';\nexport const Tile = 'Tile';\nexport const TopK = 'TopK';\nexport const Transform = 'Transform';\nexport const Transpose = 'Transpose';\nexport const Unique = 'Unique';\nexport const Unpack = 'Unpack';\nexport const UnsortedSegmentSum = 'UnsortedSegmentSum';\nexport const ZerosLike = 'ZerosLike';\n/**\n * TensorFlow.js-only kernels\n */\nexport const Step = 'Step';\nexport const FromPixels = 'FromPixels';\nexport const RotateWithOffset = 'RotateWithOffset';\nexport const _FusedMatMul = '_FusedMatMul';\nexport const FusedConv2D = 'FusedConv2D';\nexport const FusedDepthwiseConv2D = 'FusedDepthwiseConv2D';\n//# sourceMappingURL=kernel_names.js.map","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { env } from './environment';\nimport { getGlobal } from './global_util';\nconst kernelRegistry = getGlobal('kernelRegistry', () => new Map());\nconst gradRegistry = getGlobal('gradRegistry', () => new Map());\n/**\n * Returns the kernel function (code) associated with the provided names.\n *\n * @param kernelName The official name of the kernel.\n * @param backendName The official name of the backend.\n */\nexport function getKernel(kernelName, backendName) {\n const key = makeKey(kernelName, backendName);\n return kernelRegistry.get(key);\n}\n/**\n * Returns the registered gradient info associated with the provided kernel.\n * @param kernelName The official TF kernel name.\n */\nexport function getGradient(kernelName) {\n return gradRegistry.get(kernelName);\n}\nexport function getKernelsForBackend(backendName) {\n const it = kernelRegistry.entries();\n const result = [];\n while (true) {\n const { done, value } = it.next();\n if (done) {\n break;\n }\n const [key, config] = value;\n const [backend,] = key.split('_');\n if (backend === backendName) {\n result.push(config);\n }\n }\n return result;\n}\n/**\n * Registers the function (forward pass) for the kernel in a global registry.\n *\n * @param config A config object with the following properties:\n * - `kernelName` The official name of the kernel.\n * - `backendName` The official name of the backend.\n * - `kernelFunc` The function to run during the forward pass of the kernel.\n * - `setupFunc` Optional. Gets called once, after the backend initializes.\n * - `disposeFunc` Optional. Gets called once, right before the backend is\n * disposed.\n */\nexport function registerKernel(config) {\n const { kernelName, backendName } = config;\n const key = makeKey(kernelName, backendName);\n if (kernelRegistry.has(key)) {\n console.warn(`The kernel '${kernelName}' for backend ` +\n `'${backendName}' is already registered`);\n }\n kernelRegistry.set(key, config);\n}\n/**\n * Registers a gradient function for a given kernel in the global registry,\n * to be used during the back-propagation of that kernel.\n *\n * @param config An object with the following properties:\n * - `kernelName` The name of the kernel that the gradient function is for.\n * - `gradFunc` The function to run during back-propagation.\n */\nexport function registerGradient(config) {\n const { kernelName } = config;\n if (gradRegistry.has(kernelName)) {\n // TODO (yassogba) after 3.0 assess whether we need to keep this gated\n // to debug mode.\n if (env().getBool('DEBUG')) {\n console.warn(`Overriding the gradient for '${kernelName}'`);\n }\n }\n gradRegistry.set(kernelName, config);\n}\n/**\n * Removes the kernel function from the registry.\n *\n * @param kernelName The official name of the kernel.\n * @param backendName The official name of the backend.\n *\n */\nexport function unregisterKernel(kernelName, backendName) {\n const key = makeKey(kernelName, backendName);\n if (!kernelRegistry.has(key)) {\n throw new Error(`The kernel '${kernelName}' for backend ` +\n `'${backendName}' is not registered`);\n }\n kernelRegistry.delete(key);\n}\n/** Removes the registered gradient from the global registry. */\nexport function unregisterGradient(kernelName) {\n if (!gradRegistry.has(kernelName)) {\n throw new Error(`The gradient '${kernelName}' for backend is not registered`);\n }\n gradRegistry.delete(kernelName);\n}\n/**\n * Finds kernels that have already been registered to a backend and re-registers\n * them for a new backend. Useful for registering custom backends.\n * @param registeredBackendName Already registered backend.\n * @param newBackendName New backend.\n */\nexport function copyRegisteredKernels(registeredBackendName, newBackendName) {\n const kernels = getKernelsForBackend(registeredBackendName);\n kernels.forEach(kernelConfig => {\n const newKernelConfig = Object.assign({}, kernelConfig, { backendName: newBackendName });\n registerKernel(newKernelConfig);\n });\n}\nfunction makeKey(kernelName, backendName) {\n return `${backendName}_${kernelName}`;\n}\n//# sourceMappingURL=kernel_registry.js.map","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { env } from './environment';\nimport * as base from './util_base';\nexport * from './util_base';\n/**\n * Create typed array for scalar value. Used for storing in `DataStorage`.\n */\nexport function createScalarValue(value, dtype) {\n if (dtype === 'string') {\n return encodeString(value);\n }\n return toTypedArray([value], dtype);\n}\nfunction noConversionNeeded(a, dtype) {\n return (a instanceof Float32Array && dtype === 'float32') ||\n (a instanceof Int32Array && dtype === 'int32') ||\n (a instanceof Uint8Array && dtype === 'bool');\n}\nexport function toTypedArray(a, dtype) {\n if (dtype === 'string') {\n throw new Error('Cannot convert a string[] to a TypedArray');\n }\n if (Array.isArray(a)) {\n a = base.flatten(a);\n }\n if (env().getBool('DEBUG')) {\n base.checkConversionForErrors(a, dtype);\n }\n if (noConversionNeeded(a, dtype)) {\n return a;\n }\n if (dtype == null || dtype === 'float32' || dtype === 'complex64') {\n return new Float32Array(a);\n }\n else if (dtype === 'int32') {\n return new Int32Array(a);\n }\n else if (dtype === 'bool') {\n const bool = new Uint8Array(a.length);\n for (let i = 0; i < bool.length; ++i) {\n if (Math.round(a[i]) !== 0) {\n bool[i] = 1;\n }\n }\n return bool;\n }\n else {\n throw new Error(`Unknown data type ${dtype}`);\n }\n}\n/**\n * Returns the current high-resolution time in milliseconds relative to an\n * arbitrary time in the past. It works across different platforms (node.js,\n * browsers).\n *\n * ```js\n * console.log(tf.util.now());\n * ```\n *\n * @doc {heading: 'Util', namespace: 'util'}\n */\nexport function now() {\n return env().platform.now();\n}\n/**\n * Returns a platform-specific implementation of\n * [`fetch`](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API).\n *\n * If `fetch` is defined on the global object (`window`, `process`, etc.),\n * `tf.util.fetch` returns that function.\n *\n * If not, `tf.util.fetch` returns a platform-specific solution.\n *\n * ```js\n * const resource = await tf.util.fetch('https://unpkg.com/@tensorflow/tfjs');\n * // handle response\n * ```\n *\n * @doc {heading: 'Util'}\n */\nexport function fetch(path, requestInits) {\n return env().platform.fetch(path, requestInits);\n}\n/**\n * Encodes the provided string into bytes using the provided encoding scheme.\n *\n * @param s The string to encode.\n * @param encoding The encoding scheme. Defaults to utf-8.\n *\n * @doc {heading: 'Util'}\n */\nexport function encodeString(s, encoding = 'utf-8') {\n encoding = encoding || 'utf-8';\n return env().platform.encode(s, encoding);\n}\n/**\n * Decodes the provided bytes into a string using the provided encoding scheme.\n * @param bytes The bytes to decode.\n *\n * @param encoding The encoding scheme. Defaults to utf-8.\n *\n * @doc {heading: 'Util'}\n */\nexport function decodeString(bytes, encoding = 'utf-8') {\n encoding = encoding || 'utf-8';\n return env().platform.decode(bytes, encoding);\n}\n//# sourceMappingURL=util.js.map","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { env } from './environment';\nimport * as util from './util';\nexport class Profiler {\n constructor(backendTimer, logger) {\n this.backendTimer = backendTimer;\n this.logger = logger;\n if (logger == null) {\n this.logger = new Logger();\n }\n }\n profileKernel(kernelName, inputs, f) {\n let outputs;\n const holdResultWrapperFn = () => {\n outputs = f();\n };\n let timer;\n const start = util.now();\n if (this.backendTimer.timerAvailable()) {\n timer = this.backendTimer.time(holdResultWrapperFn);\n }\n else {\n holdResultWrapperFn();\n for (const output of outputs) {\n output.dataSync();\n }\n timer = Promise.resolve({ kernelMs: util.now() - start });\n }\n if (env().getBool('CHECK_COMPUTATION_FOR_ERRORS')) {\n for (let i = 0; i < outputs.length; i++) {\n const output = outputs[i];\n // Dangling promise here because we don't want to propagate up\n // asynchronicity.\n output.data().then(tensorVals => {\n checkComputationForErrors(tensorVals, output.dtype, kernelName);\n });\n }\n }\n const kernelProfile = {\n kernelName,\n outputs,\n inputs,\n timeMs: timer.then(timing => timing.kernelMs),\n extraInfo: timer.then(timing => timing.getExtraProfileInfo != null ?\n timing.getExtraProfileInfo() :\n '')\n };\n return kernelProfile;\n }\n logKernelProfile(kernelProfile) {\n const { kernelName, outputs, timeMs, inputs, extraInfo } = kernelProfile;\n outputs.forEach(result => {\n Promise.all([result.data(), timeMs, extraInfo]).then(valueContainer => {\n this.logger.logKernelProfile(kernelName, result, valueContainer[0], valueContainer[1], inputs, valueContainer[2]);\n });\n });\n }\n}\nexport function checkComputationForErrors(vals, dtype, kernelName) {\n if (dtype !== 'float32') {\n // Only floating point computations will generate NaN values\n return false;\n }\n for (let i = 0; i < vals.length; i++) {\n const num = vals[i];\n if (isNaN(num) || !isFinite(num)) {\n // Throwing custom exception so behavior is testable.\n console.warn(`Found ${num} in the result of '${kernelName}'`);\n return true;\n }\n }\n return false;\n}\nexport class Logger {\n logKernelProfile(name, result, vals, timeMs, inputs, extraInfo) {\n const time = typeof timeMs === 'number' ? util.rightPad(`${timeMs}ms`, 9) :\n timeMs['error'];\n const paddedName = util.rightPad(name, 25);\n const rank = result.rank;\n const size = result.size;\n const shape = util.rightPad(result.shape.toString(), 14);\n let inputShapesDescription = '';\n for (const name in inputs) {\n const input = inputs[name];\n if (input != null) {\n // The input might be a non-tensor (e.g HTMLImageElement), in which case\n // we claim the output shape as input shape.\n const inputShape = input.shape || result.shape;\n const inputRank = inputShape.length;\n inputShapesDescription +=\n `${name}: ${inputRank}D ${inputRank > 0 ? inputShape : ''} `;\n }\n }\n console.log(`%c${paddedName}\\t%c${time}\\t%c${rank}D ${shape}\\t%c${size}\\t%c${inputShapesDescription}\\t%c${extraInfo}`, 'font-weight:bold', 'color:red', 'color:blue', 'color: orange', 'color: green', 'color: steelblue');\n }\n}\n//# sourceMappingURL=profiler.js.map","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { computeStrides, isString, rightPad, sizeFromShape } from './util';\n// Maximum number of values before we decide to show ellipsis.\nconst FORMAT_LIMIT_NUM_VALS = 20;\n// Number of first and last values to show when displaying a, b,...,y, z.\nconst FORMAT_NUM_FIRST_LAST_VALS = 3;\n// Number of significant digits to show.\nconst FORMAT_NUM_SIG_DIGITS = 7;\nexport function tensorToString(vals, shape, dtype, verbose) {\n const strides = computeStrides(shape);\n const padPerCol = computeMaxSizePerColumn(vals, shape, dtype, strides);\n const rank = shape.length;\n const valsLines = subTensorToString(vals, shape, dtype, strides, padPerCol);\n const lines = ['Tensor'];\n if (verbose) {\n lines.push(` dtype: ${dtype}`);\n lines.push(` rank: ${rank}`);\n lines.push(` shape: [${shape}]`);\n lines.push(` values:`);\n }\n lines.push(valsLines.map(l => ' ' + l).join('\\n'));\n return lines.join('\\n');\n}\nfunction computeMaxSizePerColumn(vals, shape, dtype, strides) {\n const n = sizeFromShape(shape);\n const numCols = strides[strides.length - 1];\n const padPerCol = new Array(numCols).fill(0);\n const rank = shape.length;\n const valuesOrTuples = dtype === 'complex64' ? createComplexTuples(vals) : vals;\n if (rank > 1) {\n for (let row = 0; row < n / numCols; row++) {\n const offset = row * numCols;\n for (let j = 0; j < numCols; j++) {\n padPerCol[j] = Math.max(padPerCol[j], valToString(valuesOrTuples[offset + j], 0, dtype).length);\n }\n }\n }\n return padPerCol;\n}\nfunction valToString(val, pad, dtype) {\n let valStr;\n if (Array.isArray(val)) {\n valStr = `${parseFloat(val[0].toFixed(FORMAT_NUM_SIG_DIGITS))} + ` +\n `${parseFloat(val[1].toFixed(FORMAT_NUM_SIG_DIGITS))}j`;\n }\n else if (isString(val)) {\n valStr = `'${val}'`;\n }\n else if (dtype === 'bool') {\n valStr = boolNumToString(val);\n }\n else {\n valStr = parseFloat(val.toFixed(FORMAT_NUM_SIG_DIGITS)).toString();\n }\n return rightPad(valStr, pad);\n}\nfunction boolNumToString(v) {\n return v === 0 ? 'false' : 'true';\n}\nfunction subTensorToString(vals, shape, dtype, strides, padPerCol, isLast = true) {\n const storagePerElement = dtype === 'complex64' ? 2 : 1;\n const size = shape[0];\n const rank = shape.length;\n if (rank === 0) {\n if (dtype === 'complex64') {\n const complexTuple = createComplexTuples(vals);\n return [valToString(complexTuple[0], 0, dtype)];\n }\n if (dtype === 'bool') {\n return [boolNumToString(vals[0])];\n }\n return [vals[0].toString()];\n }\n if (rank === 1) {\n if (size > FORMAT_LIMIT_NUM_VALS) {\n const firstValsSize = FORMAT_NUM_FIRST_LAST_VALS * storagePerElement;\n let firstVals = Array.from(vals.slice(0, firstValsSize));\n let lastVals = Array.from(vals.slice((size - FORMAT_NUM_FIRST_LAST_VALS) * storagePerElement, size * storagePerElement));\n if (dtype === 'complex64') {\n firstVals = createComplexTuples(firstVals);\n lastVals = createComplexTuples(lastVals);\n }\n return [\n '[' +\n firstVals.map((x, i) => valToString(x, padPerCol[i], dtype))\n .join(', ') +\n ', ..., ' +\n lastVals\n .map((x, i) => valToString(x, padPerCol[size - FORMAT_NUM_FIRST_LAST_VALS + i], dtype))\n .join(', ') +\n ']'\n ];\n }\n const displayVals = dtype === 'complex64' ? createComplexTuples(vals) :\n Array.from(vals);\n return [\n '[' +\n displayVals.map((x, i) => valToString(x, padPerCol[i], dtype))\n .join(', ') +\n ']'\n ];\n }\n // The array is rank 2 or more.\n const subshape = shape.slice(1);\n const substrides = strides.slice(1);\n const stride = strides[0] * storagePerElement;\n const lines = [];\n if (size > FORMAT_LIMIT_NUM_VALS) {\n for (let i = 0; i < FORMAT_NUM_FIRST_LAST_VALS; i++) {\n const start = i * stride;\n const end = start + stride;\n lines.push(...subTensorToString(vals.slice(start, end), subshape, dtype, substrides, padPerCol, false /* isLast */));\n }\n lines.push('...');\n for (let i = size - FORMAT_NUM_FIRST_LAST_VALS; i < size; i++) {\n const start = i * stride;\n const end = start + stride;\n lines.push(...subTensorToString(vals.slice(start, end), subshape, dtype, substrides, padPerCol, i === size - 1 /* isLast */));\n }\n }\n else {\n for (let i = 0; i < size; i++) {\n const start = i * stride;\n const end = start + stride;\n lines.push(...subTensorToString(vals.slice(start, end), subshape, dtype, substrides, padPerCol, i === size - 1 /* isLast */));\n }\n }\n const sep = rank === 2 ? ',' : '';\n lines[0] = '[' + lines[0] + sep;\n for (let i = 1; i < lines.length - 1; i++) {\n lines[i] = ' ' + lines[i] + sep;\n }\n let newLineSep = ',\\n';\n for (let i = 2; i < rank; i++) {\n newLineSep += '\\n';\n }\n lines[lines.length - 1] =\n ' ' + lines[lines.length - 1] + ']' + (isLast ? '' : newLineSep);\n return lines;\n}\nfunction createComplexTuples(vals) {\n const complexTuples = [];\n for (let i = 0; i < vals.length; i += 2) {\n complexTuples.push([vals[i], vals[i + 1]]);\n }\n return complexTuples;\n}\n//# sourceMappingURL=tensor_format.js.map","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { getGlobal } from './global_util';\nimport { tensorToString } from './tensor_format';\nimport * as util from './util';\nimport { computeStrides, toNestedArray } from './util';\n/**\n * A mutable object, similar to `tf.Tensor`, that allows users to set values\n * at locations before converting to an immutable `tf.Tensor`.\n *\n * See `tf.buffer` for creating a tensor buffer.\n *\n * @doc {heading: 'Tensors', subheading: 'Classes'}\n */\nexport class TensorBuffer {\n constructor(shape, dtype, values) {\n this.dtype = dtype;\n this.shape = shape.slice();\n this.size = util.sizeFromShape(shape);\n if (values != null) {\n const n = values.length;\n util.assert(n === this.size, () => `Length of values '${n}' does not match the size ` +\n `inferred by the shape '${this.size}'.`);\n }\n if (dtype === 'complex64') {\n throw new Error(`complex64 dtype TensorBuffers are not supported. Please create ` +\n `a TensorBuffer for the real and imaginary parts separately and ` +\n `call tf.complex(real, imag).`);\n }\n this.values = values || util.getArrayFromDType(dtype, this.size);\n this.strides = computeStrides(shape);\n }\n /**\n * Sets a value in the buffer at a given location.\n *\n * @param value The value to set.\n * @param locs The location indices.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\n set(value, ...locs) {\n if (locs.length === 0) {\n locs = [0];\n }\n util.assert(locs.length === this.rank, () => `The number of provided coordinates (${locs.length}) must ` +\n `match the rank (${this.rank})`);\n const index = this.locToIndex(locs);\n this.values[index] = value;\n }\n /**\n * Returns the value in the buffer at the provided location.\n *\n * @param locs The location indices.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\n get(...locs) {\n if (locs.length === 0) {\n locs = [0];\n }\n let i = 0;\n for (const loc of locs) {\n if (loc < 0 || loc >= this.shape[i]) {\n const msg = `Requested out of range element at ${locs}. ` +\n ` Buffer shape=${this.shape}`;\n throw new Error(msg);\n }\n i++;\n }\n let index = locs[locs.length - 1];\n for (let i = 0; i < locs.length - 1; ++i) {\n index += this.strides[i] * locs[i];\n }\n return this.values[index];\n }\n locToIndex(locs) {\n if (this.rank === 0) {\n return 0;\n }\n else if (this.rank === 1) {\n return locs[0];\n }\n let index = locs[locs.length - 1];\n for (let i = 0; i < locs.length - 1; ++i) {\n index += this.strides[i] * locs[i];\n }\n return index;\n }\n indexToLoc(index) {\n if (this.rank === 0) {\n return [];\n }\n else if (this.rank === 1) {\n return [index];\n }\n const locs = new Array(this.shape.length);\n for (let i = 0; i < locs.length - 1; ++i) {\n locs[i] = Math.floor(index / this.strides[i]);\n index -= locs[i] * this.strides[i];\n }\n locs[locs.length - 1] = index;\n return locs;\n }\n get rank() {\n return this.shape.length;\n }\n /**\n * Creates an immutable `tf.Tensor` object from the buffer.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\n toTensor() {\n return trackerFn().makeTensor(this.values, this.shape, this.dtype);\n }\n}\n// For tracking tensor creation and disposal.\nlet trackerFn = null;\n// Used by chaining methods to call into ops.\nlet opHandler = null;\n// Used to warn about deprecated methods.\nlet deprecationWarningFn = null;\n// This here so that we can use this method on dev branches and keep the\n// functionality at master.\n// tslint:disable-next-line:no-unused-expression\n[deprecationWarningFn];\n/**\n * An external consumer can register itself as the tensor tracker. This way\n * the Tensor class can notify the tracker for every tensor created and\n * disposed.\n */\nexport function setTensorTracker(fn) {\n trackerFn = fn;\n}\n/**\n * An external consumer can register itself as the op handler. This way the\n * Tensor class can have chaining methods that call into ops via the op\n * handler.\n */\nexport function setOpHandler(handler) {\n opHandler = handler;\n}\n/**\n * Sets the deprecation warning function to be used by this file. This way the\n * Tensor class can be a leaf but still use the environment.\n */\nexport function setDeprecationWarningFn(fn) {\n deprecationWarningFn = fn;\n}\n/**\n * A `tf.Tensor` object represents an immutable, multidimensional array of\n * numbers that has a shape and a data type.\n *\n * For performance reasons, functions that create tensors do not necessarily\n * perform a copy of the data passed to them (e.g. if the data is passed as a\n * `Float32Array`), and changes to the data will change the tensor. This is not\n * a feature and is not supported. To avoid this behavior, use the tensor before\n * changing the input data or create a copy with `copy = tf.add(yourTensor, 0)`.\n *\n * See `tf.tensor` for details on how to create a `tf.Tensor`.\n *\n * @doc {heading: 'Tensors', subheading: 'Classes'}\n */\nexport class Tensor {\n constructor(shape, dtype, dataId, id) {\n /** Whether this tensor has been globally kept. */\n this.kept = false;\n this.isDisposedInternal = false;\n this.shape = shape.slice();\n this.dtype = dtype || 'float32';\n this.size = util.sizeFromShape(shape);\n this.strides = computeStrides(shape);\n this.dataId = dataId;\n this.id = id;\n this.rankType = (this.rank < 5 ? this.rank.toString() : 'higher');\n }\n get rank() {\n return this.shape.length;\n }\n /**\n * Returns a promise of `tf.TensorBuffer` that holds the underlying data.\n *\n * @doc {heading: 'Tensors', subheading: 'Classes'}\n */\n async buffer() {\n const vals = await this.data();\n return opHandler.buffer(this.shape, this.dtype, vals);\n }\n /**\n * Returns a `tf.TensorBuffer` that holds the underlying data.\n * @doc {heading: 'Tensors', subheading: 'Classes'}\n */\n bufferSync() {\n return opHandler.buffer(this.shape, this.dtype, this.dataSync());\n }\n /**\n * Returns the tensor data as a nested array. The transfer of data is done\n * asynchronously.\n *\n * @doc {heading: 'Tensors', subheading: 'Classes'}\n */\n async array() {\n const vals = await this.data();\n return toNestedArray(this.shape, vals, this.dtype === 'complex64');\n }\n /**\n * Returns the tensor data as a nested array. The transfer of data is done\n * synchronously.\n *\n * @doc {heading: 'Tensors', subheading: 'Classes'}\n */\n arraySync() {\n return toNestedArray(this.shape, this.dataSync(), this.dtype === 'complex64');\n }\n /**\n * Asynchronously downloads the values from the `tf.Tensor`. Returns a\n * promise of `TypedArray` that resolves when the computation has finished.\n *\n * @doc {heading: 'Tensors', subheading: 'Classes'}\n */\n async data() {\n this.throwIfDisposed();\n const data = trackerFn().read(this.dataId);\n if (this.dtype === 'string') {\n const bytes = await data;\n try {\n return bytes.map(b => util.decodeString(b));\n }\n catch (_a) {\n throw new Error('Failed to decode the string bytes into utf-8. ' +\n 'To get the original bytes, call tensor.bytes().');\n }\n }\n return data;\n }\n /**\n * Synchronously downloads the values from the `tf.Tensor`. This blocks the\n * UI thread until the values are ready, which can cause performance issues.\n *\n * @doc {heading: 'Tensors', subheading: 'Classes'}\n */\n dataSync() {\n this.throwIfDisposed();\n const data = trackerFn().readSync(this.dataId);\n if (this.dtype === 'string') {\n try {\n return data.map(b => util.decodeString(b));\n }\n catch (_a) {\n throw new Error('Failed to decode the string bytes into utf-8. ' +\n 'To get the original bytes, call tensor.bytes().');\n }\n }\n return data;\n }\n /** Returns the underlying bytes of the tensor's data. */\n async bytes() {\n this.throwIfDisposed();\n const data = await trackerFn().read(this.dataId);\n if (this.dtype === 'string') {\n return data;\n }\n else {\n return new Uint8Array(data.buffer);\n }\n }\n /**\n * Disposes `tf.Tensor` from memory.\n *\n * @doc {heading: 'Tensors', subheading: 'Classes'}\n */\n dispose() {\n if (this.isDisposed) {\n return;\n }\n trackerFn().disposeTensor(this);\n this.isDisposedInternal = true;\n }\n get isDisposed() {\n return this.isDisposedInternal;\n }\n throwIfDisposed() {\n if (this.isDisposed) {\n throw new Error(`Tensor is disposed.`);\n }\n }\n /**\n * Prints the `tf.Tensor`. See `tf.print` for details.\n *\n * @param verbose Whether to print verbose information about the tensor,\n * including dtype and size.\n *\n * @doc {heading: 'Tensors', subheading: 'Classes'}\n */\n print(verbose = false) {\n return opHandler.print(this, verbose);\n }\n /**\n * Returns a copy of the tensor. See `tf.clone` for details.\n * @doc {heading: 'Tensors', subheading: 'Classes'}\n */\n clone() {\n this.throwIfDisposed();\n return opHandler.clone(this);\n }\n /**\n * Returns a human-readable description of the tensor. Useful for logging.\n *\n * @doc {heading: 'Tensors', subheading: 'Classes'}\n */\n toString(verbose = false) {\n const vals = this.dataSync();\n return tensorToString(vals, this.shape, this.dtype, verbose);\n }\n cast(dtype) {\n this.throwIfDisposed();\n return opHandler.cast(this, dtype);\n }\n variable(trainable = true, name, dtype) {\n this.throwIfDisposed();\n return trackerFn().makeVariable(this, trainable, name, dtype);\n }\n}\nObject.defineProperty(Tensor, Symbol.hasInstance, {\n value: (instance) => {\n // Implementation note: we should use properties of the object that will be\n // defined before the constructor body has finished executing (methods).\n // This is because when this code is transpiled by babel, babel will call\n // classCallCheck before the constructor body is run.\n // See https://github.com/tensorflow/tfjs/issues/3384 for backstory.\n return !!instance && instance.data != null && instance.dataSync != null &&\n instance.throwIfDisposed != null;\n }\n});\nexport function getGlobalTensorClass() {\n // Use getGlobal so that we can augment the Tensor class across package\n // boundaries becase the node resolution alg may result in different modules\n // being returned for this file depending on the path they are loaded from.\n return getGlobal('Tensor', () => {\n return Tensor;\n });\n}\n// Global side effect. Cache global reference to Tensor class\ngetGlobalTensorClass();\n/**\n * A mutable `tf.Tensor`, useful for persisting state, e.g. for training.\n *\n * @doc {heading: 'Tensors', subheading: 'Classes'}\n */\nexport class Variable extends Tensor {\n constructor(initialValue, trainable, name, tensorId) {\n super(initialValue.shape, initialValue.dtype, initialValue.dataId, tensorId);\n this.trainable = trainable;\n this.name = name;\n }\n /**\n * Assign a new `tf.Tensor` to this variable. The new `tf.Tensor` must have\n * the same shape and dtype as the old `tf.Tensor`.\n *\n * @param newValue New tensor to be assigned to this variable.\n *\n * @doc {heading: 'Tensors', subheading: 'Classes'}\n */\n assign(newValue) {\n if (newValue.dtype !== this.dtype) {\n throw new Error(`dtype of the new value (${newValue.dtype}) and ` +\n `previous value (${this.dtype}) must match`);\n }\n if (!util.arraysEqual(newValue.shape, this.shape)) {\n throw new Error(`shape of the new value (${newValue.shape}) and ` +\n `previous value (${this.shape}) must match`);\n }\n trackerFn().disposeTensor(this);\n this.dataId = newValue.dataId;\n trackerFn().incRef(this, null /* backend */);\n }\n dispose() {\n trackerFn().disposeVariable(this);\n this.isDisposedInternal = true;\n }\n}\nObject.defineProperty(Variable, Symbol.hasInstance, {\n value: (instance) => {\n return instance instanceof Tensor && instance.assign != null &&\n instance.assign instanceof Function;\n }\n});\n//# sourceMappingURL=tensor.js.map","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport var Rank;\n(function (Rank) {\n Rank[\"R0\"] = \"R0\";\n Rank[\"R1\"] = \"R1\";\n Rank[\"R2\"] = \"R2\";\n Rank[\"R3\"] = \"R3\";\n Rank[\"R4\"] = \"R4\";\n Rank[\"R5\"] = \"R5\";\n Rank[\"R6\"] = \"R6\";\n})(Rank || (Rank = {}));\n// Looks for upcasting types. Used, for example, in operations with mixed dtype\n// inputs.\nvar UpcastInt32AndMap;\n(function (UpcastInt32AndMap) {\n UpcastInt32AndMap[\"float32\"] = \"float32\";\n UpcastInt32AndMap[\"int32\"] = \"int32\";\n UpcastInt32AndMap[\"bool\"] = \"int32\";\n UpcastInt32AndMap[\"complex64\"] = \"complex64\";\n})(UpcastInt32AndMap || (UpcastInt32AndMap = {}));\nvar UpcastBoolAndMap;\n(function (UpcastBoolAndMap) {\n UpcastBoolAndMap[\"float32\"] = \"float32\";\n UpcastBoolAndMap[\"int32\"] = \"int32\";\n UpcastBoolAndMap[\"bool\"] = \"bool\";\n UpcastBoolAndMap[\"complex64\"] = \"complex64\";\n})(UpcastBoolAndMap || (UpcastBoolAndMap = {}));\nvar UpcastFloat32AndMap;\n(function (UpcastFloat32AndMap) {\n UpcastFloat32AndMap[\"float32\"] = \"float32\";\n UpcastFloat32AndMap[\"int32\"] = \"float32\";\n UpcastFloat32AndMap[\"bool\"] = \"float32\";\n UpcastFloat32AndMap[\"complex64\"] = \"complex64\";\n})(UpcastFloat32AndMap || (UpcastFloat32AndMap = {}));\nvar UpcastComplex64AndMap;\n(function (UpcastComplex64AndMap) {\n UpcastComplex64AndMap[\"float32\"] = \"complex64\";\n UpcastComplex64AndMap[\"int32\"] = \"complex64\";\n UpcastComplex64AndMap[\"bool\"] = \"complex64\";\n UpcastComplex64AndMap[\"complex64\"] = \"complex64\";\n})(UpcastComplex64AndMap || (UpcastComplex64AndMap = {}));\nconst upcastTypeMap = {\n 'float32': UpcastFloat32AndMap,\n 'int32': UpcastInt32AndMap,\n 'bool': UpcastBoolAndMap,\n 'complex64': UpcastComplex64AndMap\n};\nexport function upcastType(typeA, typeB) {\n if (typeA === 'string' || typeB === 'string') {\n if (typeA === 'string' && typeB === 'string') {\n return 'string';\n }\n throw new Error(`Can not upcast ${typeA} with ${typeB}`);\n }\n return upcastTypeMap[typeA][typeB];\n}\n/** Returns the output type after summation. */\nexport function sumOutType(type) {\n return upcastType(type, 'int32');\n}\n//# sourceMappingURL=types.js.map","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { Tensor } from './tensor';\nimport { upcastType } from './types';\nimport { assert } from './util';\nexport function makeTypesMatch(a, b) {\n if (a.dtype === b.dtype) {\n return [a, b];\n }\n const dtype = upcastType(a.dtype, b.dtype);\n return [a.cast(dtype), b.cast(dtype)];\n}\nexport function assertTypesMatch(a, b) {\n assert(a.dtype === b.dtype, () => `The dtypes of the first(${a.dtype}) and` +\n ` second(${b.dtype}) input must match`);\n}\nexport function isTensorInList(tensor, tensorList) {\n return tensorList.some(x => x.id === tensor.id);\n}\n/**\n * Extracts any `Tensor`s found within the provided object.\n *\n * @param container an object that may be a `Tensor` or may directly contain\n * `Tensor`s, such as a `Tensor[]` or `{key: Tensor, ...}`. In general it\n * is safe to pass any object here, except that `Promise`s are not\n * supported.\n * @returns An array of `Tensors` found within the passed object. If the\n * argument is simply a `Tensor', a list containing that `Tensor` is\n * returned. If the object is not a `Tensor` or does not\n * contain `Tensors`, an empty list is returned.\n */\nexport function getTensorsInContainer(result) {\n const list = [];\n const seen = new Set();\n walkTensorContainer(result, list, seen);\n return list;\n}\nfunction walkTensorContainer(container, list, seen) {\n if (container == null) {\n return;\n }\n if (container instanceof Tensor) {\n list.push(container);\n return;\n }\n if (!isIterable(container)) {\n return;\n }\n // Iteration over keys works also for arrays.\n const iterable = container;\n for (const k in iterable) {\n const val = iterable[k];\n if (!seen.has(val)) {\n seen.add(val);\n walkTensorContainer(val, list, seen);\n }\n }\n}\n// tslint:disable-next-line:no-any\nfunction isIterable(obj) {\n return Array.isArray(obj) || typeof obj === 'object';\n}\n//# sourceMappingURL=tensor_util.js.map","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { KernelBackend } from './backends/backend';\nimport { Environment, setEnvironmentGlobal } from './environment';\nimport { getGlobalNamespace } from './global_util';\nimport { Add, Cast, Identity } from './kernel_names';\nimport { getGradient, getKernel, getKernelsForBackend } from './kernel_registry';\nimport { Profiler } from './profiler';\nimport { backpropagateGradients, getFilteredNodesXToY } from './tape';\nimport { setTensorTracker, Tensor, Variable } from './tensor';\nimport { getTensorsInContainer } from './tensor_util';\nimport * as util from './util';\nimport { bytesFromStringArray, makeOnesTypedArray, now, sizeFromShape } from './util';\nfunction isRegisteredKernelInvocation(kernelInvocation) {\n return kernelInvocation.kernelName != null;\n}\nclass EngineState {\n constructor() {\n // Public since optimizers will use it.\n this.registeredVariables = {};\n this.nextTapeNodeId = 0;\n this.numBytes = 0;\n this.numTensors = 0;\n this.numStringTensors = 0;\n this.numDataBuffers = 0;\n // Number of nested tf.grad() statements when computing higher-order\n // gradients. E.g. `1` for first-order gradients and `2` for second-order\n // gradients. Used to track if the tape should be removed after a backprop.\n this.gradientDepth = 0;\n // Number of nested kernel calls. When kernel depth is greater than 1, we turn\n // off the tape.\n this.kernelDepth = 0;\n this.scopeStack = [];\n /**\n * Keeps track of the number of data moves during a kernel execution. We\n * maintain a stack since kernels can call other kernels, recursively.\n */\n this.numDataMovesStack = [];\n this.nextScopeId = 0;\n this.tensorInfo = new WeakMap();\n this.profiling = false;\n this.activeProfile = {\n newBytes: 0,\n newTensors: 0,\n peakBytes: 0,\n kernels: [],\n result: null,\n get kernelNames() {\n return Array.from(new Set(this.kernels.map(k => k.name)));\n }\n };\n }\n dispose() {\n for (const variableName in this.registeredVariables) {\n this.registeredVariables[variableName].dispose();\n }\n }\n}\nexport class Engine {\n constructor(ENV) {\n this.ENV = ENV;\n this.registry = {};\n this.registryFactory = {};\n this.pendingBackendInitId = 0;\n this.state = new EngineState();\n }\n async ready() {\n if (this.pendingBackendInit != null) {\n return this.pendingBackendInit.then(() => { });\n }\n if (this.backendInstance != null) {\n return;\n }\n const sortedBackends = this.getSortedBackends();\n for (let i = 0; i < sortedBackends.length; i++) {\n const backendName = sortedBackends[i];\n const success = await this.initializeBackend(backendName).success;\n if (success) {\n await this.setBackend(backendName);\n return;\n }\n }\n throw new Error(`Could not initialize any backends, all backend initializations ` +\n `failed.`);\n }\n get backend() {\n if (this.pendingBackendInit != null) {\n throw new Error(`Backend '${this.backendName}' has not yet been initialized. Make ` +\n `sure to await tf.ready() or await tf.setBackend() before calling ` +\n `other methods`);\n }\n if (this.backendInstance == null) {\n const { name, asyncInit } = this.initializeBackendsAndReturnBest();\n if (asyncInit) {\n throw new Error(`The highest priority backend '${name}' has not yet been ` +\n `initialized. Make sure to await tf.ready() or ` +\n `await tf.setBackend() before calling other methods`);\n }\n this.setBackend(name);\n }\n return this.backendInstance;\n }\n backendNames() {\n return Object.keys(this.registryFactory);\n }\n findBackend(backendName) {\n if (!(backendName in this.registry)) {\n // If the backend hasn't been initialized but we have a registry entry for\n // it, initialize it and return it.\n if (backendName in this.registryFactory) {\n const { asyncInit } = this.initializeBackend(backendName);\n if (asyncInit) {\n // Backend is not ready yet.\n return null;\n }\n }\n else {\n return null;\n }\n }\n return this.registry[backendName];\n }\n findBackendFactory(backendName) {\n if (!(backendName in this.registryFactory)) {\n return null;\n }\n return this.registryFactory[backendName].factory;\n }\n registerBackend(backendName, factory, priority = 1) {\n if (backendName in this.registryFactory) {\n console.warn(`${backendName} backend was already registered. ` +\n `Reusing existing backend factory.`);\n return false;\n }\n this.registryFactory[backendName] = { factory, priority };\n return true;\n }\n async setBackend(backendName) {\n if (this.registryFactory[backendName] == null) {\n throw new Error(`Backend name '${backendName}' not found in registry`);\n }\n this.backendName = backendName;\n if (this.registry[backendName] == null) {\n this.backendInstance = null;\n const { success, asyncInit } = this.initializeBackend(backendName);\n const result = asyncInit ? await success : success;\n if (!result) {\n return false;\n }\n }\n this.backendInstance = this.registry[backendName];\n this.setupRegisteredKernels();\n // Reset the profiler.\n this.profiler = new Profiler(this.backendInstance);\n return true;\n }\n setupRegisteredKernels() {\n const kernels = getKernelsForBackend(this.backendName);\n kernels.forEach(kernel => {\n if (kernel.setupFunc != null) {\n kernel.setupFunc(this.backendInstance);\n }\n });\n }\n disposeRegisteredKernels(backendName) {\n const kernels = getKernelsForBackend(backendName);\n kernels.forEach(kernel => {\n if (kernel.disposeFunc != null) {\n kernel.disposeFunc(this.registry[backendName]);\n }\n });\n }\n /**\n * Initializes a backend by looking up the backend name in the factory\n * registry and calling the factory method. Returns a boolean representing\n * whether the initialization of the backend suceeded. Throws an error if\n * there is no backend in the factory registry.\n */\n initializeBackend(backendName) {\n const registryFactoryEntry = this.registryFactory[backendName];\n if (registryFactoryEntry == null) {\n throw new Error(`Cannot initialize backend ${backendName}, no registration found.`);\n }\n try {\n const backend = registryFactoryEntry.factory();\n /* Test if the factory returns a promise.\n Done in a more liberal way than\n previous 'Promise.resolve(backend)===backend'\n as we needed to account for custom Promise\n implementations (e.g. Angular) */\n if (backend && !(backend instanceof KernelBackend) &&\n typeof backend.then === 'function') {\n const promiseId = ++this.pendingBackendInitId;\n const success = backend\n .then(backendInstance => {\n // Outdated promise. Another backend was set in the meantime.\n if (promiseId < this.pendingBackendInitId) {\n return false;\n }\n this.registry[backendName] = backendInstance;\n this.pendingBackendInit = null;\n return true;\n })\n .catch(err => {\n // Outdated promise. Another backend was set in the meantime.\n if (promiseId < this.pendingBackendInitId) {\n return false;\n }\n this.pendingBackendInit = null;\n console.warn(`Initialization of backend ${backendName} failed`);\n console.warn(err.stack || err.message);\n return false;\n });\n this.pendingBackendInit = success;\n return { success, asyncInit: true };\n }\n else {\n this.registry[backendName] = backend;\n return { success: true, asyncInit: false };\n }\n }\n catch (err) {\n console.warn(`Initialization of backend ${backendName} failed`);\n console.warn(err.stack || err.message);\n return { success: false, asyncInit: false };\n }\n }\n removeBackend(backendName) {\n if (!(backendName in this.registryFactory)) {\n throw new Error(`${backendName} backend not found in registry`);\n }\n if (this.backendName === backendName && this.pendingBackendInit != null) {\n // There is a pending promise of the backend we want to remove. Make it\n // obsolete.\n this.pendingBackendInitId++;\n }\n if (backendName in this.registry) {\n this.disposeRegisteredKernels(backendName);\n this.registry[backendName].dispose();\n delete this.registry[backendName];\n }\n delete this.registryFactory[backendName];\n // Unset the backend if it is active.\n if (this.backendName === backendName) {\n this.pendingBackendInit = null;\n this.backendName = null;\n this.backendInstance = null;\n }\n }\n getSortedBackends() {\n if (Object.keys(this.registryFactory).length === 0) {\n throw new Error('No backend found in registry.');\n }\n return Object.keys(this.registryFactory).sort((a, b) => {\n // Highest priority comes first.\n return this.registryFactory[b].priority -\n this.registryFactory[a].priority;\n });\n }\n initializeBackendsAndReturnBest() {\n const sortedBackends = this.getSortedBackends();\n for (let i = 0; i < sortedBackends.length; i++) {\n const backendName = sortedBackends[i];\n const { success, asyncInit } = this.initializeBackend(backendName);\n if (asyncInit || success) {\n return { name: backendName, asyncInit };\n }\n }\n throw new Error(`Could not initialize any backends, all backend initializations ` +\n `failed.`);\n }\n moveData(backend, dataId) {\n const info = this.state.tensorInfo.get(dataId);\n const srcBackend = info.backend;\n const values = this.readSync(dataId);\n const refCount = srcBackend.refCount(dataId);\n // Delete the tensor from the old backend and move it to the new\n // backend.\n srcBackend.disposeData(dataId, true);\n info.backend = backend;\n backend.move(dataId, values, info.shape, info.dtype, refCount);\n if (this.shouldCheckForMemLeaks()) {\n // Track the number of moves during a kernel execution to correctly\n // detect memory leaks.\n this.state.numDataMovesStack[this.state.numDataMovesStack.length - 1]++;\n }\n }\n tidy(nameOrFn, fn) {\n let name = null;\n if (fn == null) {\n // Called with only 1 argument.\n if (typeof nameOrFn !== 'function') {\n throw new Error('Please provide a function to tidy()');\n }\n fn = nameOrFn;\n }\n else {\n // Called with 2 arguments.\n if (typeof nameOrFn !== 'string' && !(nameOrFn instanceof String)) {\n throw new Error('When calling with two arguments, the first argument ' +\n 'to tidy() must be a string');\n }\n if (typeof fn !== 'function') {\n throw new Error('When calling with two arguments, the 2nd argument ' +\n 'to tidy() must be a function');\n }\n name = nameOrFn;\n // TODO(nsthorat,smilkov): Do operation logging and performance\n // profiling.\n }\n let result;\n return this.scopedRun(() => this.startScope(name), () => this.endScope(result), () => {\n result = fn();\n if (result instanceof Promise) {\n console.error('Cannot return a Promise inside of tidy.');\n }\n return result;\n });\n }\n scopedRun(start, end, f) {\n start();\n try {\n const res = f();\n end();\n return res;\n }\n catch (ex) {\n end();\n throw ex;\n }\n }\n nextTensorId() {\n return Engine.nextTensorId++;\n }\n nextVariableId() {\n return Engine.nextVariableId++;\n }\n /**\n * This method is called instead of the public-facing tensor.clone() when\n * saving a tensor for backwards pass. It makes sure to add the clone\n * operation to the tape regardless of being called inside a kernel\n * execution.\n */\n clone(x) {\n const y = ENGINE.runKernel(Identity, { x });\n const inputs = { x };\n const grad = (dy) => ({\n x: () => {\n const dtype = 'float32';\n const gradInputs = { x: dy };\n const attrs = { dtype };\n return ENGINE.runKernel(Cast, gradInputs, \n // tslint:disable-next-line: no-unnecessary-type-assertion\n attrs);\n }\n });\n const saved = [];\n this.addTapeNode(this.state.activeScope.name, inputs, [y], grad, saved, {});\n return y;\n }\n /**\n * Execute a kernel with the given name and return the output tensor.\n *\n * @param kernelName The name of the kernel to execute.\n * @param inputs A map of input names to tensors.\n * @param attrs A map of attribute names to their values. An attribute is a\n * primitive (non-tensor) input to the kernel.\n * @param inputsToSave A list of tensors, inputs to save for the backprop\n * computation.\n * @param outputsToSave A list of booleans, specifying which output to save\n * for the backprop computation. These are booleans since the output\n * tensors are not visible to the user.\n */\n runKernel(kernelName, inputs, attrs) {\n const hasKernel = getKernel(kernelName, this.backendName) != null;\n if (!hasKernel) {\n throw new Error(`Kernel '${kernelName}' not registered for backend '${this.backendName}'`);\n }\n return this.runKernelFunc({ kernelName, inputs, attrs });\n }\n shouldCheckForMemLeaks() {\n return this.ENV.getBool('IS_TEST');\n }\n checkKernelForMemLeak(kernelName, numDataIdsBefore, outInfos) {\n const numDataIdsAfter = this.backend.numDataIds();\n // Count the number of data ids associated with the result of the kernel.\n let numOutputDataIds = 0;\n outInfos.forEach(info => {\n // Complex numbers allocate 3 data ids, one for 'real', one for\n // 'imaginary', and one for the container that holds the former two.\n numOutputDataIds += (info.dtype === 'complex64' ? 3 : 1);\n });\n // Account for the number of moves during kernel execution. A \"data move\"\n // can happen in the middle of a kernel execution, placing a new (key,value)\n // pair in the data storage. Since data moves have net zero effect (we\n // always remove the data from the old backend), we have to cancel them out\n // when detecting memory leaks.\n const numMoves = this.state.numDataMovesStack[this.state.numDataMovesStack.length - 1];\n const dataIdsLeaked = numDataIdsAfter - numDataIdsBefore - numOutputDataIds - numMoves;\n if (dataIdsLeaked > 0) {\n throw new Error(`Backend '${this.backendName}' has an internal memory leak ` +\n `(${dataIdsLeaked} data ids) after running '${kernelName}'`);\n }\n }\n /**\n * Internal helper method to execute a kernel Func\n *\n * Use `runKernel` to execute kernels from outside of engine.\n */\n runKernelFunc(kernelParams) {\n let outputs;\n let saved = [];\n const isTapeOn = this.isTapeOn();\n const startingBytecount = this.state.numBytes;\n const startingNumTensors = this.state.numTensors;\n if (this.shouldCheckForMemLeaks()) {\n this.state.numDataMovesStack.push(0);\n }\n let kernelFunc;\n if (this.backendName == null) {\n // backend has not been initialized yet (backend initialization is lazy\n // can be deferred until an op/ kernel is run).\n // The below getter has side effects that will try to initialize the\n // backend and set properties like this.backendName\n // tslint:disable-next-line: no-unused-expression\n this.backend;\n }\n let out;\n const kernelOrScopeName = isRegisteredKernelInvocation(kernelParams) ?\n kernelParams.kernelName :\n this.state.activeScope != null ? this.state.activeScope.name : '';\n // Create the kernelFunc from either a registered kernel OR passed in\n // forward/backward functions (used by custom grad). In this context a\n // kernelFunc wraps a kernel implementation with some bookkeeping.\n if (isRegisteredKernelInvocation(kernelParams)) {\n const { kernelName, inputs, attrs } = kernelParams;\n if (this.backendName == null) {\n // backend has not been initialized yet (backend initialization is lazy\n // can be deferred until an op/ kernel is run).\n // The below getter has side effects that will try to initialize the\n // backend and set properties like this.backendName\n // tslint:disable-next-line: no-unused-expression\n this.backend;\n }\n const kernel = getKernel(kernelName, this.backendName);\n util.assert(kernel != null, () => `Cannot find registered kernel '${kernelName}' for backend '${this.backendName}'`);\n kernelFunc = () => {\n const numDataIdsBefore = this.backend.numDataIds();\n out = kernel.kernelFunc({ inputs, attrs, backend: this.backend });\n const outInfos = Array.isArray(out) ? out : [out];\n if (this.shouldCheckForMemLeaks()) {\n this.checkKernelForMemLeak(kernelName, numDataIdsBefore, outInfos);\n }\n const outTensors = outInfos.map((outInfo) => {\n // todo (yassogba) remove this option (Tensor) when node backend\n // methods have been modularized and they all return tensorInfo.\n // TensorInfos do not have a rank attribute.\n if (outInfo.rank != null) {\n return outInfo;\n }\n const { dataId, shape, dtype } = outInfo;\n return this.makeTensorFromDataId(dataId, shape, dtype);\n });\n // Save any required inputs and outputs.\n // Do not save unless we are recording to the tape. Otherwise it would\n // cause a mem leak since there would be no backprop for these tensors\n // (which would otherwise dispose them).\n if (isTapeOn) {\n const tensorsToSave = this.getTensorsForGradient(kernelName, inputs, outTensors);\n saved = this.saveTensorsForBackwardMode(tensorsToSave);\n }\n return outTensors;\n };\n }\n else {\n const { forwardFunc } = kernelParams;\n // Running a customGrad op.\n const saveFunc = (tensors) => {\n // Do not save unless we are recording to the tape. Otherwise it would\n // cause a mem leak since we would never run backprop, which disposes\n // the kept tensors.\n if (!isTapeOn) {\n return;\n }\n saved = tensors.map(tensor => this.keep(this.clone(tensor)));\n };\n kernelFunc = () => {\n const numDataIdsBefore = this.backend.numDataIds();\n out = this.tidy(() => forwardFunc(this.backend, saveFunc));\n const outs = (Array.isArray(out) ? out : [out]);\n if (this.shouldCheckForMemLeaks()) {\n // Scope name is used to print a more helpful error message if needed.\n this.checkKernelForMemLeak(kernelOrScopeName, numDataIdsBefore, outs);\n }\n return outs;\n };\n }\n //\n // Run the kernelFunc. Optionally profiling it.\n //\n const { inputs, attrs } = kernelParams;\n const backwardsFunc = isRegisteredKernelInvocation(kernelParams) ?\n null :\n kernelParams.backwardsFunc;\n let kernelProfile;\n this.scopedRun(\n // Stop recording to a tape when running a kernel.\n () => this.state.kernelDepth++, () => this.state.kernelDepth--, () => {\n if (!this.ENV.getBool('DEBUG') && !this.state.profiling) {\n outputs = kernelFunc();\n }\n else {\n kernelProfile = this.profiler.profileKernel(kernelOrScopeName, inputs, () => kernelFunc());\n if (this.ENV.getBool('DEBUG')) {\n this.profiler.logKernelProfile(kernelProfile);\n }\n outputs = kernelProfile.outputs;\n }\n });\n if (isTapeOn) {\n this.addTapeNode(kernelOrScopeName, inputs, outputs, backwardsFunc, saved, attrs);\n }\n if (this.state.profiling) {\n this.state.activeProfile.kernels.push({\n name: kernelOrScopeName,\n bytesAdded: this.state.numBytes - startingBytecount,\n totalBytesSnapshot: this.state.numBytes,\n tensorsAdded: this.state.numTensors - startingNumTensors,\n totalTensorsSnapshot: this.state.numTensors,\n inputShapes: Object.keys(inputs).map(key => inputs[key] != null ? inputs[key].shape : null),\n outputShapes: outputs.map(item => item.shape),\n kernelTimeMs: kernelProfile.timeMs,\n extraInfo: kernelProfile.extraInfo\n });\n }\n return (Array.isArray(out) ? outputs : outputs[0]);\n }\n /**\n * Saves tensors used in forward mode for use in backward mode.\n *\n * @param tensors the list of tensors to save.\n */\n saveTensorsForBackwardMode(tensors) {\n const saved = tensors.map(tensor => this.keep(this.clone(tensor)));\n return saved;\n }\n /**\n * Returns a list of tensors to save for a given gradient calculation.\n *\n * @param kernelName name of kernel to look up gradient for.\n * @param inputs a map of input tensors.\n * @param outputs an array of output tensors from forward mode of kernel.\n */\n getTensorsForGradient(kernelName, inputs, outputs) {\n const gradConfig = getGradient(kernelName);\n if (gradConfig != null) {\n const inputsToSave = gradConfig.inputsToSave || [];\n const outputsToSave = gradConfig.outputsToSave || [];\n // If saveAllInputs is true, all inputs will be saved. Otherwise, inputs\n // specified in inputsToSave will be saved.\n let inputTensorsToSave;\n if (gradConfig.saveAllInputs) {\n util.assert(Array.isArray(inputs), () => 'saveAllInputs is true, expected inputs to be an array.');\n inputTensorsToSave = Object.keys(inputs).map((key) => inputs[key]);\n }\n else {\n inputTensorsToSave = inputsToSave.map((inputName) => inputs[inputName]);\n }\n const outputTensorsToSave = outputs.filter((_, i) => outputsToSave[i]);\n return inputTensorsToSave.concat(outputTensorsToSave);\n }\n // We return an empty list rather than throw an error because the kernel we\n // are looking up may not actually be relevant to backproping through the\n // overall function\n //\n // See 'does not error if irrelevant (pruned) ops are missing grads' test\n // in gradients_test.ts for an example.\n return [];\n }\n /**\n * Internal method used by public APIs for tensor creation. Makes a new\n * tensor with the provided shape, dtype and values. It always\n * creates a new data id and writes the values to the underlying backend.\n */\n makeTensor(values, shape, dtype, backend) {\n if (values == null) {\n throw new Error('Values passed to engine.makeTensor() are null');\n }\n dtype = dtype || 'float32';\n backend = backend || this.backend;\n let backendVals = values;\n if (dtype === 'string' && util.isString(values[0])) {\n backendVals = values.map(d => util.encodeString(d));\n }\n const dataId = backend.write(backendVals, shape, dtype);\n const t = new Tensor(shape, dtype, dataId, this.nextTensorId());\n this.trackTensor(t, backend);\n // Count bytes for string tensors.\n if (dtype === 'string') {\n const info = this.state.tensorInfo.get(dataId);\n const newBytes = bytesFromStringArray(backendVals);\n this.state.numBytes += newBytes - info.bytes;\n info.bytes = newBytes;\n }\n return t;\n }\n /**\n * Internal method used by backends. Makes a new tensor\n * that is a wrapper around an existing data id. It doesn't create\n * a new data id, only increments the ref count used in memory tracking.\n */\n makeTensorFromDataId(dataId, shape, dtype, backend) {\n dtype = dtype || 'float32';\n const t = new Tensor(shape, dtype, dataId, this.nextTensorId());\n this.trackTensor(t, backend);\n return t;\n }\n makeVariable(initialValue, trainable = true, name, dtype) {\n name = name || this.nextVariableId().toString();\n if (dtype != null && dtype !== initialValue.dtype) {\n initialValue = initialValue.cast(dtype);\n }\n const v = new Variable(initialValue, trainable, name, this.nextTensorId());\n if (this.state.registeredVariables[v.name] != null) {\n throw new Error(`Variable with name ${v.name} was already registered`);\n }\n this.state.registeredVariables[v.name] = v;\n this.incRef(v, this.backend);\n return v;\n }\n trackTensor(a, backend) {\n this.state.numTensors++;\n if (a.dtype === 'string') {\n this.state.numStringTensors++;\n }\n // Bytes for complex numbers are counted by their components. Bytes for\n // string tensors are counted when writing values.\n let bytes = 0;\n if (a.dtype !== 'complex64' && a.dtype !== 'string') {\n bytes = a.size * util.bytesPerElement(a.dtype);\n }\n this.state.numBytes += bytes;\n if (!this.state.tensorInfo.has(a.dataId)) {\n this.state.numDataBuffers++;\n this.state.tensorInfo.set(a.dataId, {\n backend: backend || this.backend,\n dtype: a.dtype,\n shape: a.shape,\n bytes\n });\n }\n if (!(a instanceof Variable)) {\n this.track(a);\n }\n }\n // Track the tensor by dataId and increase the refCount for the dataId in the\n // backend.\n // TODO(pyu10055): This is currently used by makeVariable method, to increase\n // refCount on the backend for the dataId. It can potentially be replaced with\n // Identity op indead of calling backend directly.\n incRef(a, backend) {\n this.trackTensor(a, backend);\n this.backend.incRef(a.dataId);\n }\n removeDataId(dataId, backend) {\n if (this.state.tensorInfo.has(dataId) &&\n this.state.tensorInfo.get(dataId).backend === backend) {\n this.state.tensorInfo.delete(dataId);\n this.state.numDataBuffers--;\n }\n }\n disposeTensor(a) {\n if (!this.state.tensorInfo.has(a.dataId)) {\n return;\n }\n const info = this.state.tensorInfo.get(a.dataId);\n this.state.numTensors--;\n if (a.dtype === 'string') {\n this.state.numStringTensors--;\n this.state.numBytes -= info.bytes;\n }\n // Don't count bytes for complex numbers as they are counted by their\n // components.\n if (a.dtype !== 'complex64' && a.dtype !== 'string') {\n const bytes = a.size * util.bytesPerElement(a.dtype);\n this.state.numBytes -= bytes;\n }\n // Remove the reference to dataId if backend dispose the data successfully\n if (info.backend.disposeData(a.dataId)) {\n this.removeDataId(a.dataId, info.backend);\n }\n // TODO(nsthorat): Construct an error and save the stack trace for\n // debugging when in debug mode. Creating a stack trace is too expensive\n // to do unconditionally.\n }\n disposeVariables() {\n for (const varName in this.state.registeredVariables) {\n const v = this.state.registeredVariables[varName];\n this.disposeVariable(v);\n }\n }\n disposeVariable(v) {\n this.disposeTensor(v);\n if (this.state.registeredVariables[v.name] != null) {\n delete this.state.registeredVariables[v.name];\n }\n }\n memory() {\n const info = this.backend.memory();\n info.numTensors = this.state.numTensors;\n info.numDataBuffers = this.state.numDataBuffers;\n info.numBytes = this.state.numBytes;\n if (this.state.numStringTensors > 0) {\n info.unreliable = true;\n if (info.reasons == null) {\n info.reasons = [];\n }\n info.reasons.push('Memory usage by string tensors is approximate ' +\n '(2 bytes per character)');\n }\n return info;\n }\n async profile(query) {\n this.state.profiling = true;\n const startBytes = this.state.numBytes;\n const startNumTensors = this.state.numTensors;\n this.state.activeProfile.kernels = [];\n this.state.activeProfile.result = await query();\n this.state.profiling = false;\n this.state.activeProfile.peakBytes = Math.max(...this.state.activeProfile.kernels.map(d => d.totalBytesSnapshot));\n this.state.activeProfile.newBytes = this.state.numBytes - startBytes;\n this.state.activeProfile.newTensors =\n this.state.numTensors - startNumTensors;\n for (const kernel of this.state.activeProfile.kernels) {\n kernel.kernelTimeMs = await kernel.kernelTimeMs;\n kernel.extraInfo = await kernel.extraInfo;\n }\n return this.state.activeProfile;\n }\n isTapeOn() {\n return this.state.gradientDepth > 0 && this.state.kernelDepth === 0;\n }\n addTapeNode(kernelName, inputs, outputs, gradientsFunc, saved, attrs) {\n const tapeNode = { id: this.state.nextTapeNodeId++, kernelName, inputs, outputs, saved };\n const gradConfig = getGradient(kernelName);\n if (gradConfig != null) {\n gradientsFunc = gradConfig.gradFunc;\n }\n if (gradientsFunc != null) {\n tapeNode.gradient = (dys) => {\n // TODO(smilkov): To optimize back-prop, pass dys that are not used in\n // the backprop graph to the user as null instead of zeros\n dys = dys.map((dy, i) => {\n if (dy == null) {\n const output = outputs[i];\n const vals = util.makeZerosTypedArray(output.size, output.dtype);\n return this.makeTensor(vals, output.shape, output.dtype);\n }\n return dy;\n });\n // Grad functions of ops with single outputs expect a dy, while ops\n // with multiple outputs expect dys (array of dy).\n return gradientsFunc(dys.length > 1 ? dys : dys[0], saved, attrs);\n };\n }\n this.state.activeTape.push(tapeNode);\n }\n keep(result) {\n result.kept = true;\n return result;\n }\n startTape() {\n if (this.state.gradientDepth === 0) {\n this.state.activeTape = [];\n }\n this.state.gradientDepth++;\n }\n endTape() {\n this.state.gradientDepth--;\n }\n /**\n * Start a scope. Use this with endScope() to achieve the same functionality\n * as scope() without the need for a function closure.\n */\n startScope(name) {\n const scopeInfo = {\n track: [],\n name: 'unnamed scope',\n id: this.state.nextScopeId++\n };\n if (name) {\n scopeInfo.name = name;\n }\n this.state.scopeStack.push(scopeInfo);\n this.state.activeScope = scopeInfo;\n }\n /**\n * End a scope. Use this with startScope() to achieve the same functionality\n * as scope() without the need for a function closure.\n */\n endScope(result) {\n const tensorsToTrackInParent = getTensorsInContainer(result);\n const tensorsToTrackInParentSet = new Set(tensorsToTrackInParent.map(t => t.id));\n // Dispose the arrays tracked in this scope.\n for (let i = 0; i < this.state.activeScope.track.length; i++) {\n const tensor = this.state.activeScope.track[i];\n if (!tensor.kept && !tensorsToTrackInParentSet.has(tensor.id)) {\n tensor.dispose();\n }\n }\n const oldScope = this.state.scopeStack.pop();\n this.state.activeScope = this.state.scopeStack.length === 0 ?\n null :\n this.state.scopeStack[this.state.scopeStack.length - 1];\n // Track the current result in the parent scope.\n tensorsToTrackInParent.forEach(tensor => {\n // Only track the tensor if was allocated in the inner scope and is not\n // globally kept.\n if (!tensor.kept && tensor.scopeId === oldScope.id) {\n this.track(tensor);\n }\n });\n }\n /**\n * Returns gradients of `f` with respect to each of the `xs`. The gradients\n * returned are of the same length as `xs`, but some might be null if `f`\n * was not a function of that `x`. It also takes optional dy to multiply the\n * gradient, which defaults to `1`.\n */\n gradients(f, xs, dy, allowNoGradients = false) {\n util.assert(xs.length > 0, () => 'gradients() received an empty list of xs.');\n if (dy != null && dy.dtype !== 'float32') {\n throw new Error(`dy must have 'float32' dtype, but has '${dy.dtype}'`);\n }\n const y = this.scopedRun(() => this.startTape(), () => this.endTape(), () => this.tidy('forward', f));\n util.assert(y instanceof Tensor, () => 'The result y returned by f() must be a tensor.');\n // Filter out the nodes that don't connect x => y.\n const filteredTape = getFilteredNodesXToY(this.state.activeTape, xs, y);\n if (!allowNoGradients && filteredTape.length === 0 && xs.length > 0) {\n throw new Error('Cannot compute gradient of y=f(x) with respect to x. Make sure ' +\n 'that the f you passed encloses all operations that lead from x ' +\n 'to y.');\n }\n return this.tidy('backward', () => {\n const accumulatedGradientMap = {};\n accumulatedGradientMap[y.id] = (dy == null) ? ones(y.shape) : dy;\n // Backprop gradients through the filtered nodes.\n backpropagateGradients(accumulatedGradientMap, filteredTape, \n // Pass the tidy function to avoid circular dep with `tape.ts`.\n f => this.tidy(f), \n // Pass an add function to avoide a circular dep with `tape.ts`.\n add);\n const grads = xs.map(x => accumulatedGradientMap[x.id]);\n if (this.state.gradientDepth === 0) {\n // This means that we are not computing higher-order gradients\n // and can clean up the tape.\n this.state.activeTape.forEach(node => {\n for (const tensor of node.saved) {\n tensor.dispose();\n }\n });\n this.state.activeTape = null;\n }\n return { value: y, grads };\n });\n }\n customGrad(f) {\n util.assert(util.isFunction(f), () => 'The f passed in customGrad(f) must be a function.');\n return (...inputs) => {\n util.assert(inputs.every(t => t instanceof Tensor), () => 'The args passed in customGrad(f)(x1, x2,...) must all be ' +\n 'tensors');\n let res;\n const inputMap = {};\n inputs.forEach((input, i) => {\n inputMap[i] = input;\n });\n const forwardFunc = (_, save) => {\n res = f(...[...inputs, save]);\n util.assert(res.value instanceof Tensor, () => 'The function f passed in customGrad(f) must return an ' +\n 'object where `obj.value` is a tensor');\n util.assert(util.isFunction(res.gradFunc), () => 'The function f passed in customGrad(f) must return an ' +\n 'object where `obj.gradFunc` is a function.');\n return res.value;\n };\n const backwardsFunc = (dy, saved) => {\n const gradRes = res.gradFunc(dy, saved);\n const grads = Array.isArray(gradRes) ? gradRes : [gradRes];\n util.assert(grads.length === inputs.length, () => 'The function f passed in customGrad(f) must return an ' +\n 'object where `obj.gradFunc` is a function that returns ' +\n 'the same number of tensors as inputs passed to f(...).');\n util.assert(grads.every(t => t instanceof Tensor), () => 'The function f passed in customGrad(f) must return an ' +\n 'object where `obj.gradFunc` is a function that returns ' +\n 'a list of only tensors.');\n const gradMap = {};\n grads.forEach((grad, i) => {\n gradMap[i] = () => grad;\n });\n return gradMap;\n };\n return this.runKernelFunc({\n forwardFunc,\n backwardsFunc,\n inputs: inputMap,\n });\n };\n }\n readSync(dataId) {\n // Route the read to the correct backend.\n const info = this.state.tensorInfo.get(dataId);\n return info.backend.readSync(dataId);\n }\n read(dataId) {\n // Route the read to the correct backend.\n const info = this.state.tensorInfo.get(dataId);\n return info.backend.read(dataId);\n }\n async time(query) {\n const start = now();\n const timingInfo = await this.backend.time(query);\n timingInfo.wallMs = now() - start;\n return timingInfo;\n }\n /**\n * Tracks a Tensor in the current scope to be automatically cleaned up\n * when the current scope ends, and returns the value.\n *\n * @param result The Tensor to track in the current scope.\n */\n track(result) {\n if (this.state.activeScope != null) {\n result.scopeId = this.state.activeScope.id;\n this.state.activeScope.track.push(result);\n }\n return result;\n }\n get registeredVariables() {\n return this.state.registeredVariables;\n }\n /**\n * Resets the engine state. Removes all backends but does not remove\n * registered backend factories.\n */\n reset() {\n // Make any pending promise obsolete.\n this.pendingBackendInitId++;\n this.state.dispose();\n this.ENV.reset();\n this.state = new EngineState();\n for (const backendName in this.registry) {\n this.disposeRegisteredKernels(backendName);\n this.registry[backendName].dispose();\n delete this.registry[backendName];\n }\n this.backendName = null;\n this.backendInstance = null;\n this.pendingBackendInit = null;\n }\n}\nEngine.nextTensorId = 0;\nEngine.nextVariableId = 0;\nfunction ones(shape) {\n const values = makeOnesTypedArray(sizeFromShape(shape), 'float32');\n return ENGINE.makeTensor(values, shape, 'float32');\n}\nexport function getOrMakeEngine() {\n const ns = getGlobalNamespace();\n if (ns._tfengine == null) {\n const environment = new Environment(ns);\n ns._tfengine = new Engine(environment);\n }\n setEnvironmentGlobal(ns._tfengine.ENV);\n // Tell the current tensor interface that the global engine is responsible\n // for tracking.\n setTensorTracker(() => ns._tfengine);\n return ns._tfengine;\n}\nexport const ENGINE = getOrMakeEngine();\n/**\n * A implementation of the add op for use within engine and tape.\n *\n * This allows us to avoid a circular dependency between add.ts and engine.\n * It is exported to be available in tape tests.\n */\nexport function add(a, b) {\n // We duplicate Add here to avoid a circular dependency with add.ts.\n const inputs = { a, b };\n return ENGINE.runKernel(Add, inputs);\n}\n//# sourceMappingURL=engine.js.map","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport * as util from './util';\n/**\n * Computes a list of TapeNodes that connect x to y, filtering everything else\n * out and preserving the order of the original tape elements.\n *\n * @param tape The tape elements to filter.\n * @param xs The input Tensors.\n * @param y The output Tensor.\n */\nexport function getFilteredNodesXToY(tape, xs, y) {\n // Forward pass to compute all the nodes and Tensors that are transitively a\n // function of x.\n const tensorsFromX = {};\n const nodesFromX = {};\n for (let i = 0; i < xs.length; i++) {\n tensorsFromX[xs[i].id] = true;\n }\n for (let i = 0; i < tape.length; i++) {\n const node = tape[i];\n const nodeInputs = node.inputs;\n for (const inputName in nodeInputs) {\n const input = nodeInputs[inputName];\n let anyInputFromX = false;\n for (let j = 0; j < xs.length; j++) {\n if (tensorsFromX[input.id]) {\n node.outputs.forEach(output => tensorsFromX[output.id] = true);\n anyInputFromX = true;\n nodesFromX[node.id] = true;\n break;\n }\n }\n if (anyInputFromX) {\n break;\n }\n }\n }\n // Backward pass to find all of the nodes and Tensors that lead to y.\n const tensorsLeadToY = {};\n tensorsLeadToY[y.id] = true;\n const nodesToY = {};\n for (let i = tape.length - 1; i >= 0; i--) {\n const node = tape[i];\n const nodeInputs = node.inputs;\n // If any of the outputs lead to y, mark all of the inputs as leading to y.\n for (let j = 0; j < node.outputs.length; j++) {\n if (tensorsLeadToY[node.outputs[j].id]) {\n for (const inputName in nodeInputs) {\n tensorsLeadToY[nodeInputs[inputName].id] = true;\n nodesToY[node.id] = true;\n }\n break;\n }\n }\n }\n // Return the paths that come from x and lead to y.\n const filteredTape = [];\n for (let i = 0; i < tape.length; i++) {\n const node = tape[i];\n if (nodesFromX[node.id] && nodesToY[node.id]) {\n // Prune the inputs from the node that aren't a function of x.\n const prunedInputs = {};\n for (const inputName in node.inputs) {\n const nodeInput = node.inputs[inputName];\n if (tensorsFromX[nodeInput.id]) {\n prunedInputs[inputName] = nodeInput;\n }\n }\n // Copy the node and overwrite inputsAndArgs to the pruned version.\n const prunedNode = Object.assign({}, node);\n prunedNode.inputs = prunedInputs;\n prunedNode.outputs = node.outputs;\n filteredTape.push(prunedNode);\n }\n }\n return filteredTape;\n}\n/**\n * Backpropagate gradients through the filtered TapeNodes.\n *\n * @param tensorAccumulatedGradientMap A map of Tensor to its gradient. This map\n * is mutated by this method.\n * @param filteredTape The filtered TapeNodes to backprop through.\n */\nexport function backpropagateGradients(tensorAccumulatedGradientMap, filteredTape, tidy, add) {\n // Walk the tape backward and keep a map of Tensor to its gradient.\n for (let i = filteredTape.length - 1; i >= 0; i--) {\n const node = filteredTape[i];\n const dys = [];\n node.outputs.forEach(o => {\n const gradTensor = tensorAccumulatedGradientMap[o.id];\n if (gradTensor != null) {\n dys.push(gradTensor);\n }\n else {\n // This particular output is not in the back-propagation subgraph, so it\n // does not affect the final output, thus we put null for its dy.\n dys.push(null);\n }\n });\n if (node.gradient == null) {\n throw new Error(`Cannot compute gradient: gradient function not found ` +\n `for ${node.kernelName}.`);\n }\n // Backprop dy through this node and accumulate gradients over the inputs.\n const inputGradients = node.gradient(dys);\n for (const inputName in node.inputs) {\n if (!(inputName in inputGradients)) {\n throw new Error(`Cannot backprop through input ${inputName}. ` +\n `Available gradients found: ${Object.keys(inputGradients)}.`);\n }\n // Call the gradient function.\n const dx = tidy(() => inputGradients[inputName]());\n if (dx.dtype !== 'float32') {\n throw new Error(`Error in gradient for op ${node.kernelName}. The gradient of input ` +\n `${inputName} must have 'float32' dtype, but has '${dx.dtype}'`);\n }\n const x = node.inputs[inputName];\n if (!util.arraysEqual(dx.shape, x.shape)) {\n throw new Error(`Error in gradient for op ${node.kernelName}. The gradient of input ` +\n `'${inputName}' has shape '${dx.shape}', which does not match ` +\n `the shape of the input '${x.shape}'`);\n }\n if (tensorAccumulatedGradientMap[x.id] == null) {\n tensorAccumulatedGradientMap[x.id] = dx;\n }\n else {\n const curGradient = tensorAccumulatedGradientMap[x.id];\n tensorAccumulatedGradientMap[x.id] = add(curGradient, dx);\n curGradient.dispose();\n }\n }\n }\n}\n//# sourceMappingURL=tape.js.map","/**\n * @license\n * Copyright 2017 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// tslint:disable-next-line:no-any\nfunction _isNavigatorDefined() {\n return typeof navigator !== 'undefined' && navigator != null;\n}\nexport function isMobile(nav) {\n if (nav || _isNavigatorDefined()) {\n if (!nav) {\n nav = navigator;\n }\n if (nav.product === 'ReactNative') {\n return true;\n }\n // tslint:disable-next-line:no-any\n const a = nav.userAgent || nav.vendor || window.opera;\n // tslint:disable-next-line:max-line-length\n return /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i\n .test(a) ||\n // tslint:disable-next-line:max-line-length\n /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i\n .test(a.substr(0, 4));\n }\n return false;\n}\nexport function isBrowser() {\n return (typeof window !== 'undefined' && window.document != null) ||\n //@ts-ignore\n (typeof WorkerGlobalScope !== 'undefined');\n}\n//# sourceMappingURL=device_util.js.map","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport './engine';\nimport * as device_util from './device_util';\nimport { env } from './environment';\nconst ENV = env();\n/**\n * This file contains environment-related flag registrations.\n */\n/** Whether to enable debug mode. */\nENV.registerFlag('DEBUG', () => false, debugValue => {\n if (debugValue) {\n console.warn('Debugging mode is ON. The output of every math call will ' +\n 'be downloaded to CPU and checked for NaNs. ' +\n 'This significantly impacts performance.');\n }\n});\n/** Whether we are in a browser (as versus, say, node.js) environment. */\nENV.registerFlag('IS_BROWSER', () => device_util.isBrowser());\n/** Whether we are in a browser (as versus, say, node.js) environment. */\nENV.registerFlag('IS_NODE', () => (typeof process !== 'undefined') &&\n (typeof process.versions !== 'undefined') &&\n (typeof process.versions.node !== 'undefined'));\n/** Whether this browser is Chrome. */\nENV.registerFlag('IS_CHROME', () => typeof navigator !== 'undefined' && navigator != null &&\n navigator.userAgent != null && /Chrome/.test(navigator.userAgent) &&\n /Google Inc/.test(navigator.vendor));\n/**\n * True when the environment is \"production\" where we disable safety checks\n * to gain performance.\n */\nENV.registerFlag('PROD', () => false);\n/**\n * Whether to do sanity checks when inferring a shape from user-provided\n * values, used when creating a new tensor.\n */\nENV.registerFlag('TENSORLIKE_CHECK_SHAPE_CONSISTENCY', () => ENV.getBool('DEBUG'));\n/** Whether deprecation warnings are enabled. */\nENV.registerFlag('DEPRECATION_WARNINGS_ENABLED', () => true);\n/** True if running unit tests. */\nENV.registerFlag('IS_TEST', () => false);\n/** Whether to check computation result for errors. */\nENV.registerFlag('CHECK_COMPUTATION_FOR_ERRORS', () => true);\n/** Whether the backend needs to wrap input to imageBitmap. */\nENV.registerFlag('WRAP_TO_IMAGEBITMAP', () => false);\n//# sourceMappingURL=flags.js.map","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from './engine';\nimport { env } from './environment';\nimport { Tensor } from './tensor';\nimport { assert, flatten, inferDtype, isTypedArray, toTypedArray } from './util';\nexport function inferShape(val, dtype) {\n let firstElem = val;\n if (isTypedArray(val)) {\n return dtype === 'string' ? [] : [val.length];\n }\n if (!Array.isArray(val)) {\n return []; // Scalar.\n }\n const shape = [];\n while (Array.isArray(firstElem) ||\n isTypedArray(firstElem) && dtype !== 'string') {\n shape.push(firstElem.length);\n firstElem = firstElem[0];\n }\n if (Array.isArray(val) &&\n env().getBool('TENSORLIKE_CHECK_SHAPE_CONSISTENCY')) {\n deepAssertShapeConsistency(val, shape, []);\n }\n return shape;\n}\nfunction deepAssertShapeConsistency(val, shape, indices) {\n indices = indices || [];\n if (!(Array.isArray(val)) && !isTypedArray(val)) {\n assert(shape.length === 0, () => `Element arr[${indices.join('][')}] is a primitive, ` +\n `but should be an array/TypedArray of ${shape[0]} elements`);\n return;\n }\n assert(shape.length > 0, () => `Element arr[${indices.join('][')}] should be a primitive, ` +\n `but is an array of ${val.length} elements`);\n assert(val.length === shape[0], () => `Element arr[${indices.join('][')}] should have ${shape[0]} ` +\n `elements, but has ${val.length} elements`);\n const subShape = shape.slice(1);\n for (let i = 0; i < val.length; ++i) {\n deepAssertShapeConsistency(val[i], subShape, indices.concat(i));\n }\n}\nfunction assertDtype(expectedDtype, actualDType, argName, functionName) {\n if (expectedDtype === 'string_or_numeric') {\n return;\n }\n if (expectedDtype == null) {\n throw new Error(`Expected dtype cannot be null.`);\n }\n if (expectedDtype !== 'numeric' && expectedDtype !== actualDType ||\n expectedDtype === 'numeric' && actualDType === 'string') {\n throw new Error(`Argument '${argName}' passed to '${functionName}' must ` +\n `be ${expectedDtype} tensor, but got ${actualDType} tensor`);\n }\n}\nexport function convertToTensor(x, argName, functionName, parseAsDtype = 'numeric') {\n if (x instanceof Tensor) {\n assertDtype(parseAsDtype, x.dtype, argName, functionName);\n return x;\n }\n let inferredDtype = inferDtype(x);\n // If the user expects a bool/int/float, use that info to update the\n // inferredDtype when it is not a string.\n if (inferredDtype !== 'string' &&\n ['bool', 'int32', 'float32'].indexOf(parseAsDtype) >= 0) {\n inferredDtype = parseAsDtype;\n }\n assertDtype(parseAsDtype, inferredDtype, argName, functionName);\n if ((x == null) ||\n (!isTypedArray(x) && !Array.isArray(x) && typeof x !== 'number' &&\n typeof x !== 'boolean' && typeof x !== 'string')) {\n const type = x == null ? 'null' : x.constructor.name;\n throw new Error(`Argument '${argName}' passed to '${functionName}' must be a ` +\n `Tensor or TensorLike, but got '${type}'`);\n }\n const inferredShape = inferShape(x, inferredDtype);\n if (!isTypedArray(x) && !Array.isArray(x)) {\n x = [x];\n }\n const skipTypedArray = true;\n const values = inferredDtype !== 'string' ?\n toTypedArray(x, inferredDtype) :\n flatten(x, [], skipTypedArray);\n return ENGINE.makeTensor(values, inferredShape, inferredDtype);\n}\nexport function convertToTensorArray(arg, argName, functionName, parseAsDtype = 'numeric') {\n if (!Array.isArray(arg)) {\n throw new Error(`Argument ${argName} passed to ${functionName} must be a ` +\n '`Tensor[]` or `TensorLike[]`');\n }\n const tensors = arg;\n return tensors.map((t, i) => convertToTensor(t, `${argName}[${i}]`, functionName, parseAsDtype));\n}\n//# sourceMappingURL=tensor_util_env.js.map","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { isPromise } from '../util';\nexport const OP_SCOPE_SUFFIX = '__op';\n/**\n * Used for wrapping functions that perform math operations on\n * Tensors. The function will be wrapped in a named scope that cleans all\n * memory usage after the function is done.\n */\nexport function op(f) {\n const keys = Object.keys(f);\n if (keys.length !== 1) {\n throw new Error(`Please provide an object with a single key ` +\n `(operation name) mapping to a function. Got an object with ` +\n `${keys.length} keys.`);\n }\n let opName = keys[0];\n const fn = f[opName];\n // Strip the underscore from the end of the function name.\n if (opName.endsWith('_')) {\n opName = opName.substring(0, opName.length - 1);\n }\n // add an __op suffix to distinguish ops from kernels in tf.profile\n opName = opName + OP_SCOPE_SUFFIX;\n // tslint:disable-next-line:no-any\n const f2 = (...args) => {\n ENGINE.startScope(opName);\n try {\n const result = fn(...args);\n if (isPromise(result)) {\n console.error('Cannot return a Promise inside of tidy.');\n }\n ENGINE.endScope(result);\n return result;\n }\n catch (ex) {\n ENGINE.endScope(null);\n throw ex;\n }\n };\n Object.defineProperty(f2, 'name', { value: opName, configurable: true });\n // tslint:disable-next-line:no-any\n return f2;\n}\n//# sourceMappingURL=operation.js.map","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Complex } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { op } from './operation';\n/**\n * Converts two real numbers to a complex number.\n *\n * Given a tensor `real` representing the real part of a complex number, and a\n * tensor `imag` representing the imaginary part of a complex number, this\n * operation returns complex numbers elementwise of the form [r0, i0, r1, i1],\n * where r represents the real part and i represents the imag part.\n *\n * The input tensors real and imag must have the same shape.\n *\n * ```js\n * const real = tf.tensor1d([2.25, 3.25]);\n * const imag = tf.tensor1d([4.75, 5.75]);\n * const complex = tf.complex(real, imag);\n *\n * complex.print();\n * ```\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nfunction complex_(real, imag) {\n const $real = convertToTensor(real, 'real', 'complex');\n const $imag = convertToTensor(imag, 'imag', 'complex');\n util.assertShapesMatch($real.shape, $imag.shape, `real and imag shapes, ${$real.shape} and ${$imag.shape}, ` +\n `must match in call to tf.complex().`);\n const inputs = { real: $real, imag: $imag };\n return ENGINE.runKernel(Complex, inputs);\n}\nexport const complex = op({ complex_ });\n//# sourceMappingURL=complex.js.map","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { assert, assertNonNegativeIntegerDimensions, flatten, inferDtype, isTypedArray, sizeFromShape, toTypedArray } from '../util';\n/** This is shared code across all tensor creation methods. */\nexport function makeTensor(values, shape, inferredShape, dtype) {\n if (dtype == null) {\n dtype = inferDtype(values);\n }\n if (dtype === 'complex64') {\n throw new Error(`Cannot construct a complex64 tensor directly. ` +\n `Please use tf.complex(real, imag).`);\n }\n if (!isTypedArray(values) && !Array.isArray(values) &&\n typeof values !== 'number' && typeof values !== 'boolean' &&\n typeof values !== 'string') {\n throw new Error('values passed to tensor(values) must be a number/boolean/string or ' +\n 'an array of numbers/booleans/strings, or a TypedArray');\n }\n if (shape != null) {\n assertNonNegativeIntegerDimensions(shape);\n const providedSize = sizeFromShape(shape);\n const inferredSize = sizeFromShape(inferredShape);\n assert(providedSize === inferredSize, () => `Based on the provided shape, [${shape}], the tensor should have ` +\n `${providedSize} values but has ${inferredSize}`);\n for (let i = 0; i < inferredShape.length; ++i) {\n const inferred = inferredShape[i];\n const flatDimsDontMatch = i === inferredShape.length - 1 ?\n inferred !== sizeFromShape(shape.slice(i)) :\n true;\n assert(inferredShape[i] === shape[i] || !flatDimsDontMatch, () => `Error creating a new Tensor. Inferred shape ` +\n `(${inferredShape}) does not match the provided ` +\n `shape (${shape}). `);\n }\n }\n if (!isTypedArray(values) && !Array.isArray(values)) {\n values = [values];\n }\n shape = shape || inferredShape;\n values = dtype !== 'string' ?\n toTypedArray(values, dtype) :\n flatten(values, [], true);\n return ENGINE.makeTensor(values, shape, dtype);\n}\n//# sourceMappingURL=tensor_ops_util.js.map","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { inferShape } from '../tensor_util_env';\nimport { makeTensor } from './tensor_ops_util';\n/**\n * Creates a `tf.Tensor` with the provided values, shape and dtype.\n *\n * ```js\n * // Pass an array of values to create a vector.\n * tf.tensor([1, 2, 3, 4]).print();\n * ```\n *\n * ```js\n * // Pass a nested array of values to make a matrix or a higher\n * // dimensional tensor.\n * tf.tensor([[1, 2], [3, 4]]).print();\n * ```\n *\n * ```js\n * // Pass a flat array and specify a shape yourself.\n * tf.tensor([1, 2, 3, 4], [2, 2]).print();\n * ```\n *\n * @param values The values of the tensor. Can be nested array of numbers,\n * or a flat array, or a `TypedArray`. If the values are strings,\n * they will be encoded as utf-8 and kept as `Uint8Array[]`.\n * @param shape The shape of the tensor. Optional. If not provided,\n * it is inferred from `values`.\n * @param dtype The data type.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nexport function tensor(values, shape, dtype) {\n const inferredShape = inferShape(values, dtype);\n return makeTensor(values, shape, inferredShape, dtype);\n}\n//# sourceMappingURL=tensor.js.map","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n/* Type definitions for exporting and importing of models. */\n/**\n * A map from Tensor dtype to number of bytes per element of the Tensor.\n */\nexport const DTYPE_VALUE_SIZE_MAP = {\n 'float32': 4,\n 'float16': 2,\n 'int32': 4,\n 'uint16': 2,\n 'uint8': 1,\n 'bool': 1,\n 'complex64': 8\n};\n//# sourceMappingURL=types.js.map","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { complex } from '../ops/complex';\nimport { tensor } from '../ops/tensor';\nimport { sizeFromShape } from '../util';\nimport { DTYPE_VALUE_SIZE_MAP } from './types';\n/** Number of bytes reserved for the length of the string. (32bit integer). */\nconst NUM_BYTES_STRING_LENGTH = 4;\n/**\n * Encode a map from names to weight values as an ArrayBuffer, along with an\n * `Array` of `WeightsManifestEntry` as specification of the encoded weights.\n *\n * This function does not perform sharding.\n *\n * This function is the reverse of `decodeWeights`.\n *\n * @param tensors A map (\"dict\") from names to tensors.\n * @param group Group to which the weights belong (optional).\n * @returns A `Promise` of\n * - A flat `ArrayBuffer` with all the binary values of the `Tensor`s\n * concatenated.\n * - An `Array` of `WeightManifestEntry`s, carrying information including\n * tensor names, `dtype`s and shapes.\n * @throws Error: on unsupported tensor `dtype`.\n */\nexport async function encodeWeights(tensors, group) {\n // TODO(adarob, cais): Support quantization.\n const specs = [];\n const dataPromises = [];\n const names = Array.isArray(tensors) ?\n tensors.map(tensor => tensor.name) :\n Object.keys(tensors);\n for (let i = 0; i < names.length; ++i) {\n const name = names[i];\n const t = Array.isArray(tensors) ? tensors[i].tensor : tensors[name];\n if (t.dtype !== 'float32' && t.dtype !== 'int32' && t.dtype !== 'bool' &&\n t.dtype !== 'string' && t.dtype !== 'complex64') {\n throw new Error(`Unsupported dtype in weight '${name}': ${t.dtype}`);\n }\n const spec = { name, shape: t.shape, dtype: t.dtype };\n if (t.dtype === 'string') {\n const utf8bytes = new Promise(async (resolve) => {\n const vals = await t.bytes();\n const totalNumBytes = vals.reduce((p, c) => p + c.length, 0) +\n NUM_BYTES_STRING_LENGTH * vals.length;\n const bytes = new Uint8Array(totalNumBytes);\n let offset = 0;\n for (let i = 0; i < vals.length; i++) {\n const val = vals[i];\n const bytesOfLength = new Uint8Array(new Uint32Array([val.length]).buffer);\n bytes.set(bytesOfLength, offset);\n offset += NUM_BYTES_STRING_LENGTH;\n bytes.set(val, offset);\n offset += val.length;\n }\n resolve(bytes);\n });\n dataPromises.push(utf8bytes);\n }\n else {\n dataPromises.push(t.data());\n }\n if (group != null) {\n spec.group = group;\n }\n specs.push(spec);\n }\n const tensorValues = await Promise.all(dataPromises);\n return { data: concatenateTypedArrays(tensorValues), specs };\n}\n/**\n * Decode flat ArrayBuffer as weights.\n *\n * This function does not handle sharding.\n *\n * This function is the reverse of `encodeWeights`.\n *\n * @param buffer A flat ArrayBuffer carrying the binary values of the tensors\n * concatenated in the order specified in `specs`.\n * @param specs Specifications of the names, dtypes and shapes of the tensors\n * whose value are encoded by `buffer`.\n * @return A map from tensor name to tensor value, with the names corresponding\n * to names in `specs`.\n * @throws Error, if any of the tensors has unsupported dtype.\n */\nexport function decodeWeights(buffer, specs) {\n // TODO(adarob, cais): Support quantization.\n const out = {};\n let float16Decode;\n let offset = 0;\n for (const spec of specs) {\n const name = spec.name;\n const dtype = spec.dtype;\n const shape = spec.shape;\n const size = sizeFromShape(shape);\n let values;\n if ('quantization' in spec) {\n const quantization = spec.quantization;\n if (quantization.dtype === 'uint8' || quantization.dtype === 'uint16') {\n if (!('min' in quantization && 'scale' in quantization)) {\n throw new Error(`Weight ${spec.name} with quantization ${quantization.dtype} ` +\n `doesn't have corresponding metadata min and scale.`);\n }\n }\n else if (quantization.dtype === 'float16') {\n if (dtype !== 'float32') {\n throw new Error(`Weight ${spec.name} is quantized with ${quantization.dtype} ` +\n `which only supports weights of type float32 not ${dtype}.`);\n }\n }\n else {\n throw new Error(`Weight ${spec.name} has unknown ` +\n `quantization dtype ${quantization.dtype}. ` +\n `Supported quantization dtypes are: ` +\n `'uint8', 'uint16', and 'float16'.`);\n }\n const quantizationSizeFactor = DTYPE_VALUE_SIZE_MAP[quantization.dtype];\n const byteBuffer = buffer.slice(offset, offset + size * quantizationSizeFactor);\n const quantizedArray = (quantization.dtype === 'uint8') ?\n new Uint8Array(byteBuffer) :\n new Uint16Array(byteBuffer);\n if (dtype === 'float32') {\n if (quantization.dtype === 'uint8' || quantization.dtype === 'uint16') {\n values = new Float32Array(quantizedArray.length);\n for (let i = 0; i < quantizedArray.length; i++) {\n const v = quantizedArray[i];\n values[i] = v * quantization.scale + quantization.min;\n }\n }\n else if (quantization.dtype === 'float16') {\n if (float16Decode === undefined) {\n float16Decode = getFloat16Decoder();\n }\n values = float16Decode(quantizedArray);\n }\n else {\n throw new Error(`Unsupported quantization type ${quantization.dtype} ` +\n `for weight type float32.`);\n }\n }\n else if (dtype === 'int32') {\n if (quantization.dtype !== 'uint8' && quantization.dtype !== 'uint16') {\n throw new Error(`Unsupported quantization type ${quantization.dtype} ` +\n `for weight type int32.`);\n }\n values = new Int32Array(quantizedArray.length);\n for (let i = 0; i < quantizedArray.length; i++) {\n const v = quantizedArray[i];\n values[i] = Math.round(v * quantization.scale + quantization.min);\n }\n }\n else {\n throw new Error(`Unsupported dtype in weight '${name}': ${dtype}`);\n }\n offset += size * quantizationSizeFactor;\n }\n else if (dtype === 'string') {\n const size = sizeFromShape(spec.shape);\n values = [];\n for (let i = 0; i < size; i++) {\n const byteLength = new Uint32Array(buffer.slice(offset, offset + NUM_BYTES_STRING_LENGTH))[0];\n offset += NUM_BYTES_STRING_LENGTH;\n const bytes = new Uint8Array(buffer.slice(offset, offset + byteLength));\n values.push(bytes);\n offset += byteLength;\n }\n }\n else {\n const dtypeFactor = DTYPE_VALUE_SIZE_MAP[dtype];\n const byteBuffer = buffer.slice(offset, offset + size * dtypeFactor);\n if (dtype === 'float32') {\n values = new Float32Array(byteBuffer);\n }\n else if (dtype === 'int32') {\n values = new Int32Array(byteBuffer);\n }\n else if (dtype === 'bool') {\n values = new Uint8Array(byteBuffer);\n }\n else if (dtype === 'complex64') {\n values = new Float32Array(byteBuffer);\n const real = new Float32Array(values.length / 2);\n const image = new Float32Array(values.length / 2);\n for (let i = 0; i < real.length; i++) {\n real[i] = values[i * 2];\n image[i] = values[i * 2 + 1];\n }\n const realTensor = tensor(real, shape, 'float32');\n const imageTensor = tensor(image, shape, 'float32');\n out[name] = complex(realTensor, imageTensor);\n realTensor.dispose();\n imageTensor.dispose();\n }\n else {\n throw new Error(`Unsupported dtype in weight '${name}': ${dtype}`);\n }\n offset += size * dtypeFactor;\n }\n if (dtype !== 'complex64') {\n out[name] = tensor(values, shape, dtype);\n }\n }\n return out;\n}\n/**\n * Concatenate TypedArrays into an ArrayBuffer.\n */\nexport function concatenateTypedArrays(xs) {\n // TODO(adarob, cais): Support quantization.\n if (xs === null) {\n throw new Error(`Invalid input value: ${JSON.stringify(xs)}`);\n }\n let totalByteLength = 0;\n // `normalizedXs` is here for this reason: a `TypedArray`'s `buffer'\n // can have a different byte length from that of the `TypedArray` itself,\n // for example, when the `TypedArray` is created from an offset in an\n // `ArrayBuffer`. `normliazedXs` holds `TypedArray`s whose `buffer`s match\n // the `TypedArray` in byte length. If an element of `xs` does not show\n // this property, a new `TypedArray` that satisfy this property will be\n // constructed and pushed into `normalizedXs`.\n const normalizedXs = [];\n xs.forEach((x) => {\n totalByteLength += x.byteLength;\n // tslint:disable:no-any\n normalizedXs.push(x.byteLength === x.buffer.byteLength ? x :\n new x.constructor(x));\n if (!(x instanceof Float32Array || x instanceof Int32Array ||\n x instanceof Uint8Array)) {\n throw new Error(`Unsupported TypedArray subtype: ${x.constructor.name}`);\n }\n // tslint:enable:no-any\n });\n const y = new Uint8Array(totalByteLength);\n let offset = 0;\n normalizedXs.forEach((x) => {\n y.set(new Uint8Array(x.buffer), offset);\n offset += x.byteLength;\n });\n return y.buffer;\n}\n// Use Buffer on Node.js instead of Blob/atob/btoa\nconst useNodeBuffer = typeof Buffer !== 'undefined' &&\n (typeof Blob === 'undefined' || typeof atob === 'undefined' ||\n typeof btoa === 'undefined');\n/**\n * Calculate the byte length of a JavaScript string.\n *\n * Note that a JavaScript string can contain wide characters, therefore the\n * length of the string is not necessarily equal to the byte length.\n *\n * @param str Input string.\n * @returns Byte length.\n */\nexport function stringByteLength(str) {\n if (useNodeBuffer) {\n return Buffer.byteLength(str);\n }\n return new Blob([str]).size;\n}\n/**\n * Encode an ArrayBuffer as a base64 encoded string.\n *\n * @param buffer `ArrayBuffer` to be converted.\n * @returns A string that base64-encodes `buffer`.\n */\nexport function arrayBufferToBase64String(buffer) {\n if (useNodeBuffer) {\n return Buffer.from(buffer).toString('base64');\n }\n const buf = new Uint8Array(buffer);\n let s = '';\n for (let i = 0, l = buf.length; i < l; i++) {\n s += String.fromCharCode(buf[i]);\n }\n return btoa(s);\n}\n/**\n * Decode a base64 string as an ArrayBuffer.\n *\n * @param str Base64 string.\n * @returns Decoded `ArrayBuffer`.\n */\nexport function base64StringToArrayBuffer(str) {\n if (useNodeBuffer) {\n const buf = Buffer.from(str, 'base64');\n return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);\n }\n const s = atob(str);\n const buffer = new Uint8Array(s.length);\n for (let i = 0; i < s.length; ++i) {\n buffer.set([s.charCodeAt(i)], i);\n }\n return buffer.buffer;\n}\n/**\n * Concatenate a number of ArrayBuffers into one.\n *\n * @param buffers A number of array buffers to concatenate.\n * @returns Result of concatenating `buffers` in order.\n */\nexport function concatenateArrayBuffers(buffers) {\n if (buffers.length === 1) {\n return buffers[0];\n }\n let totalByteLength = 0;\n buffers.forEach((buffer) => {\n totalByteLength += buffer.byteLength;\n });\n const temp = new Uint8Array(totalByteLength);\n let offset = 0;\n buffers.forEach((buffer) => {\n temp.set(new Uint8Array(buffer), offset);\n offset += buffer.byteLength;\n });\n return temp.buffer;\n}\n/**\n * Get the basename of a path.\n *\n * Behaves in a way analogous to Linux's basename command.\n *\n * @param path\n */\nexport function basename(path) {\n const SEPARATOR = '/';\n path = path.trim();\n while (path.endsWith(SEPARATOR)) {\n path = path.slice(0, path.length - 1);\n }\n const items = path.split(SEPARATOR);\n return items[items.length - 1];\n}\n/**\n * Populate ModelArtifactsInfo fields for a model with JSON topology.\n * @param modelArtifacts\n * @returns A ModelArtifactsInfo object.\n */\nexport function getModelArtifactsInfoForJSON(modelArtifacts) {\n if (modelArtifacts.modelTopology instanceof ArrayBuffer) {\n throw new Error('Expected JSON model topology, received ArrayBuffer.');\n }\n return {\n dateSaved: new Date(),\n modelTopologyType: 'JSON',\n modelTopologyBytes: modelArtifacts.modelTopology == null ?\n 0 :\n stringByteLength(JSON.stringify(modelArtifacts.modelTopology)),\n weightSpecsBytes: modelArtifacts.weightSpecs == null ?\n 0 :\n stringByteLength(JSON.stringify(modelArtifacts.weightSpecs)),\n weightDataBytes: modelArtifacts.weightData == null ?\n 0 :\n modelArtifacts.weightData.byteLength,\n };\n}\n/**\n * Computes mantisa table for casting Float16 to Float32\n * See http://www.fox-toolkit.org/ftp/fasthalffloatconversion.pdf\n *\n * @returns Uint32Array, 2048 mantissa lookup values.\n */\nfunction computeFloat16MantisaTable() {\n const convertMantissa = (i) => {\n let m = i << 13;\n let e = 0;\n while ((m & 0x00800000) === 0) {\n e -= 0x00800000;\n m <<= 1;\n }\n m &= ~0x00800000;\n e += 0x38800000;\n return m | e;\n };\n const mantisaTable = new Uint32Array(2048);\n mantisaTable[0] = 0;\n for (let i = 1; i < 1024; i++) {\n mantisaTable[i] = convertMantissa(i);\n }\n for (let i = 1024; i < 2048; i++) {\n mantisaTable[i] = 0x38000000 + ((i - 1024) << 13);\n }\n return mantisaTable;\n}\n/**\n * Computes exponent table for casting Float16 to Float32\n * See http://www.fox-toolkit.org/ftp/fasthalffloatconversion.pdf\n *\n * @returns Uint32Array, 64 exponent lookup values.\n */\nfunction computeFloat16ExponentTable() {\n const exponentTable = new Uint32Array(64);\n exponentTable[0] = 0;\n exponentTable[31] = 0x47800000;\n exponentTable[32] = 0x80000000;\n exponentTable[63] = 0xc7800000;\n for (let i = 1; i < 31; i++) {\n exponentTable[i] = i << 23;\n }\n for (let i = 33; i < 63; i++) {\n exponentTable[i] = 0x80000000 + ((i - 32) << 23);\n }\n return exponentTable;\n}\n/**\n * Computes offset table for casting Float16 to Float32\n * See http://www.fox-toolkit.org/ftp/fasthalffloatconversion.pdf\n *\n * @returns Uint32Array, 6d offset values.\n */\nfunction computeFloat16OffsetTable() {\n const offsetTable = new Uint32Array(64);\n for (let i = 0; i < 64; i++) {\n offsetTable[i] = 1024;\n }\n offsetTable[0] = offsetTable[32] = 0;\n return offsetTable;\n}\n/**\n * Retrieve a Float16 decoder which will decode a ByteArray of Float16 values\n * to a Float32Array.\n *\n * @returns Function (buffer: Uint16Array) => Float32Array which decodes\n * the Uint16Array of Float16 bytes to a Float32Array.\n */\nexport function getFloat16Decoder() {\n // Algorithm is based off of\n // http://www.fox-toolkit.org/ftp/fasthalffloatconversion.pdf\n // Cache lookup tables\n const mantisaTable = computeFloat16MantisaTable();\n const exponentTable = computeFloat16ExponentTable();\n const offsetTable = computeFloat16OffsetTable();\n return (quantizedArray) => {\n const buffer = new ArrayBuffer(4 * quantizedArray.length);\n const bufferUint32View = new Uint32Array(buffer);\n for (let index = 0; index < quantizedArray.length; index++) {\n const float16Bits = quantizedArray[index];\n const float32Bits = mantisaTable[offsetTable[float16Bits >> 10] + (float16Bits & 0x3ff)] +\n exponentTable[float16Bits >> 10];\n bufferUint32View[index] = float32Bits;\n }\n return new Float32Array(buffer);\n };\n}\n//# sourceMappingURL=io_utils.js.map","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nexport class IORouterRegistry {\n constructor() {\n this.saveRouters = [];\n this.loadRouters = [];\n }\n static getInstance() {\n if (IORouterRegistry.instance == null) {\n IORouterRegistry.instance = new IORouterRegistry();\n }\n return IORouterRegistry.instance;\n }\n /**\n * Register a save-handler router.\n *\n * @param saveRouter A function that maps a URL-like string onto an instance\n * of `IOHandler` with the `save` method defined or `null`.\n */\n static registerSaveRouter(saveRouter) {\n IORouterRegistry.getInstance().saveRouters.push(saveRouter);\n }\n /**\n * Register a load-handler router.\n *\n * @param loadRouter A function that maps a URL-like string onto an instance\n * of `IOHandler` with the `load` method defined or `null`.\n */\n static registerLoadRouter(loadRouter) {\n IORouterRegistry.getInstance().loadRouters.push(loadRouter);\n }\n /**\n * Look up IOHandler for saving, given a URL-like string.\n *\n * @param url\n * @returns If only one match is found, an instance of IOHandler with the\n * `save` method defined. If no match is found, `null`.\n * @throws Error, if more than one match is found.\n */\n static getSaveHandlers(url) {\n return IORouterRegistry.getHandlers(url, 'save');\n }\n /**\n * Look up IOHandler for loading, given a URL-like string.\n *\n * @param url\n * @param loadOptions Optional, custom load options.\n * @returns All valid handlers for `url`, given the currently registered\n * handler routers.\n */\n static getLoadHandlers(url, loadOptions) {\n return IORouterRegistry.getHandlers(url, 'load', loadOptions);\n }\n static getHandlers(url, handlerType, loadOptions) {\n const validHandlers = [];\n const routers = handlerType === 'load' ?\n IORouterRegistry.getInstance().loadRouters :\n IORouterRegistry.getInstance().saveRouters;\n routers.forEach(router => {\n const handler = router(url, loadOptions);\n if (handler !== null) {\n validHandlers.push(handler);\n }\n });\n return validHandlers;\n }\n}\nexport const registerSaveRouter = (loudRouter) => IORouterRegistry.registerSaveRouter(loudRouter);\nexport const registerLoadRouter = (loudRouter) => IORouterRegistry.registerLoadRouter(loudRouter);\nexport const getSaveHandlers = (url) => IORouterRegistry.getSaveHandlers(url);\nexport const getLoadHandlers = (url, loadOptions) => IORouterRegistry.getLoadHandlers(url, loadOptions);\n//# sourceMappingURL=router_registry.js.map","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport '../flags';\nimport { env } from '../environment';\nimport { getModelArtifactsInfoForJSON } from './io_utils';\nimport { IORouterRegistry } from './router_registry';\nconst DATABASE_NAME = 'tensorflowjs';\nconst DATABASE_VERSION = 1;\n// Model data and ModelArtifactsInfo (metadata) are stored in two separate\n// stores for efficient access of the list of stored models and their metadata.\n// 1. The object store for model data: topology, weights and weight manifests.\nconst MODEL_STORE_NAME = 'models_store';\n// 2. The object store for ModelArtifactsInfo, including meta-information such\n// as the type of topology (JSON vs binary), byte size of the topology, byte\n// size of the weights, etc.\nconst INFO_STORE_NAME = 'model_info_store';\n/**\n * Delete the entire database for tensorflow.js, including the models store.\n */\nexport async function deleteDatabase() {\n const idbFactory = getIndexedDBFactory();\n return new Promise((resolve, reject) => {\n const deleteRequest = idbFactory.deleteDatabase(DATABASE_NAME);\n deleteRequest.onsuccess = () => resolve();\n deleteRequest.onerror = error => reject(error);\n });\n}\nfunction getIndexedDBFactory() {\n if (!env().getBool('IS_BROWSER')) {\n // TODO(cais): Add more info about what IOHandler subtypes are available.\n // Maybe point to a doc page on the web and/or automatically determine\n // the available IOHandlers and print them in the error message.\n throw new Error('Failed to obtain IndexedDB factory because the current environment' +\n 'is not a web browser.');\n }\n // tslint:disable-next-line:no-any\n const theWindow = typeof window === 'undefined' ? self : window;\n const factory = theWindow.indexedDB || theWindow.mozIndexedDB ||\n theWindow.webkitIndexedDB || theWindow.msIndexedDB ||\n theWindow.shimIndexedDB;\n if (factory == null) {\n throw new Error('The current browser does not appear to support IndexedDB.');\n }\n return factory;\n}\nfunction setUpDatabase(openRequest) {\n const db = openRequest.result;\n db.createObjectStore(MODEL_STORE_NAME, { keyPath: 'modelPath' });\n db.createObjectStore(INFO_STORE_NAME, { keyPath: 'modelPath' });\n}\n/**\n * IOHandler subclass: Browser IndexedDB.\n *\n * See the doc string of `browserIndexedDB` for more details.\n */\nexport class BrowserIndexedDB {\n constructor(modelPath) {\n this.indexedDB = getIndexedDBFactory();\n if (modelPath == null || !modelPath) {\n throw new Error('For IndexedDB, modelPath must not be null, undefined or empty.');\n }\n this.modelPath = modelPath;\n }\n async save(modelArtifacts) {\n // TODO(cais): Support saving GraphDef models.\n if (modelArtifacts.modelTopology instanceof ArrayBuffer) {\n throw new Error('BrowserLocalStorage.save() does not support saving model topology ' +\n 'in binary formats yet.');\n }\n return this.databaseAction(this.modelPath, modelArtifacts);\n }\n async load() {\n return this.databaseAction(this.modelPath);\n }\n /**\n * Perform database action to put model artifacts into or read model artifacts\n * from IndexedDB object store.\n *\n * Whether the action is put or get depends on whether `modelArtifacts` is\n * specified. If it is specified, the action will be put; otherwise the action\n * will be get.\n *\n * @param modelPath A unique string path for the model.\n * @param modelArtifacts If specified, it will be the model artifacts to be\n * stored in IndexedDB.\n * @returns A `Promise` of `SaveResult`, if the action is put, or a `Promise`\n * of `ModelArtifacts`, if the action is get.\n */\n databaseAction(modelPath, modelArtifacts) {\n return new Promise((resolve, reject) => {\n const openRequest = this.indexedDB.open(DATABASE_NAME, DATABASE_VERSION);\n openRequest.onupgradeneeded = () => setUpDatabase(openRequest);\n openRequest.onsuccess = () => {\n const db = openRequest.result;\n if (modelArtifacts == null) {\n // Read model out from object store.\n const modelTx = db.transaction(MODEL_STORE_NAME, 'readonly');\n const modelStore = modelTx.objectStore(MODEL_STORE_NAME);\n const getRequest = modelStore.get(this.modelPath);\n getRequest.onsuccess = () => {\n if (getRequest.result == null) {\n db.close();\n return reject(new Error(`Cannot find model with path '${this.modelPath}' ` +\n `in IndexedDB.`));\n }\n else {\n resolve(getRequest.result.modelArtifacts);\n }\n };\n getRequest.onerror = error => {\n db.close();\n return reject(getRequest.error);\n };\n modelTx.oncomplete = () => db.close();\n }\n else {\n // Put model into object store.\n const modelArtifactsInfo = getModelArtifactsInfoForJSON(modelArtifacts);\n // First, put ModelArtifactsInfo into info store.\n const infoTx = db.transaction(INFO_STORE_NAME, 'readwrite');\n let infoStore = infoTx.objectStore(INFO_STORE_NAME);\n const putInfoRequest = infoStore.put({ modelPath: this.modelPath, modelArtifactsInfo });\n let modelTx;\n putInfoRequest.onsuccess = () => {\n // Second, put model data into model store.\n modelTx = db.transaction(MODEL_STORE_NAME, 'readwrite');\n const modelStore = modelTx.objectStore(MODEL_STORE_NAME);\n const putModelRequest = modelStore.put({\n modelPath: this.modelPath,\n modelArtifacts,\n modelArtifactsInfo\n });\n putModelRequest.onsuccess = () => resolve({ modelArtifactsInfo });\n putModelRequest.onerror = error => {\n // If the put-model request fails, roll back the info entry as\n // well.\n infoStore = infoTx.objectStore(INFO_STORE_NAME);\n const deleteInfoRequest = infoStore.delete(this.modelPath);\n deleteInfoRequest.onsuccess = () => {\n db.close();\n return reject(putModelRequest.error);\n };\n deleteInfoRequest.onerror = error => {\n db.close();\n return reject(putModelRequest.error);\n };\n };\n };\n putInfoRequest.onerror = error => {\n db.close();\n return reject(putInfoRequest.error);\n };\n infoTx.oncomplete = () => {\n if (modelTx == null) {\n db.close();\n }\n else {\n modelTx.oncomplete = () => db.close();\n }\n };\n }\n };\n openRequest.onerror = error => reject(openRequest.error);\n });\n }\n}\nBrowserIndexedDB.URL_SCHEME = 'indexeddb://';\nexport const indexedDBRouter = (url) => {\n if (!env().getBool('IS_BROWSER')) {\n return null;\n }\n else {\n if (!Array.isArray(url) && url.startsWith(BrowserIndexedDB.URL_SCHEME)) {\n return browserIndexedDB(url.slice(BrowserIndexedDB.URL_SCHEME.length));\n }\n else {\n return null;\n }\n }\n};\nIORouterRegistry.registerSaveRouter(indexedDBRouter);\nIORouterRegistry.registerLoadRouter(indexedDBRouter);\n/**\n * Creates a browser IndexedDB IOHandler for saving and loading models.\n *\n * ```js\n * const model = tf.sequential();\n * model.add(\n * tf.layers.dense({units: 1, inputShape: [100], activation: 'sigmoid'}));\n *\n * const saveResult = await model.save('indexeddb://MyModel'));\n * console.log(saveResult);\n * ```\n *\n * @param modelPath A unique identifier for the model to be saved. Must be a\n * non-empty string.\n * @returns An instance of `BrowserIndexedDB` (sublcass of `IOHandler`),\n * which can be used with, e.g., `tf.Model.save`.\n */\nexport function browserIndexedDB(modelPath) {\n return new BrowserIndexedDB(modelPath);\n}\nfunction maybeStripScheme(key) {\n return key.startsWith(BrowserIndexedDB.URL_SCHEME) ?\n key.slice(BrowserIndexedDB.URL_SCHEME.length) :\n key;\n}\nexport class BrowserIndexedDBManager {\n constructor() {\n this.indexedDB = getIndexedDBFactory();\n }\n async listModels() {\n return new Promise((resolve, reject) => {\n const openRequest = this.indexedDB.open(DATABASE_NAME, DATABASE_VERSION);\n openRequest.onupgradeneeded = () => setUpDatabase(openRequest);\n openRequest.onsuccess = () => {\n const db = openRequest.result;\n const tx = db.transaction(INFO_STORE_NAME, 'readonly');\n const store = tx.objectStore(INFO_STORE_NAME);\n // tslint:disable:max-line-length\n // Need to cast `store` as `any` here because TypeScript's DOM\n // library does not have the `getAll()` method even though the\n // method is supported in the latest version of most mainstream\n // browsers:\n // https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore/getAll\n // tslint:enable:max-line-length\n // tslint:disable-next-line:no-any\n const getAllInfoRequest = store.getAll();\n getAllInfoRequest.onsuccess = () => {\n const out = {};\n for (const item of getAllInfoRequest.result) {\n out[item.modelPath] = item.modelArtifactsInfo;\n }\n resolve(out);\n };\n getAllInfoRequest.onerror = error => {\n db.close();\n return reject(getAllInfoRequest.error);\n };\n tx.oncomplete = () => db.close();\n };\n openRequest.onerror = error => reject(openRequest.error);\n });\n }\n async removeModel(path) {\n path = maybeStripScheme(path);\n return new Promise((resolve, reject) => {\n const openRequest = this.indexedDB.open(DATABASE_NAME, DATABASE_VERSION);\n openRequest.onupgradeneeded = () => setUpDatabase(openRequest);\n openRequest.onsuccess = () => {\n const db = openRequest.result;\n const infoTx = db.transaction(INFO_STORE_NAME, 'readwrite');\n const infoStore = infoTx.objectStore(INFO_STORE_NAME);\n const getInfoRequest = infoStore.get(path);\n let modelTx;\n getInfoRequest.onsuccess = () => {\n if (getInfoRequest.result == null) {\n db.close();\n return reject(new Error(`Cannot find model with path '${path}' ` +\n `in IndexedDB.`));\n }\n else {\n // First, delete the entry in the info store.\n const deleteInfoRequest = infoStore.delete(path);\n const deleteModelData = () => {\n // Second, delete the entry in the model store.\n modelTx = db.transaction(MODEL_STORE_NAME, 'readwrite');\n const modelStore = modelTx.objectStore(MODEL_STORE_NAME);\n const deleteModelRequest = modelStore.delete(path);\n deleteModelRequest.onsuccess = () => resolve(getInfoRequest.result.modelArtifactsInfo);\n deleteModelRequest.onerror = error => reject(getInfoRequest.error);\n };\n // Proceed with deleting model data regardless of whether deletion\n // of info data succeeds or not.\n deleteInfoRequest.onsuccess = deleteModelData;\n deleteInfoRequest.onerror = error => {\n deleteModelData();\n db.close();\n return reject(getInfoRequest.error);\n };\n }\n };\n getInfoRequest.onerror = error => {\n db.close();\n return reject(getInfoRequest.error);\n };\n infoTx.oncomplete = () => {\n if (modelTx == null) {\n db.close();\n }\n else {\n modelTx.oncomplete = () => db.close();\n }\n };\n };\n openRequest.onerror = error => reject(openRequest.error);\n });\n }\n}\n//# sourceMappingURL=indexed_db.js.map","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport '../flags';\nimport { env } from '../environment';\nimport { assert } from '../util';\nimport { arrayBufferToBase64String, base64StringToArrayBuffer, getModelArtifactsInfoForJSON } from './io_utils';\nimport { IORouterRegistry } from './router_registry';\nconst PATH_SEPARATOR = '/';\nconst PATH_PREFIX = 'tensorflowjs_models';\nconst INFO_SUFFIX = 'info';\nconst MODEL_TOPOLOGY_SUFFIX = 'model_topology';\nconst WEIGHT_SPECS_SUFFIX = 'weight_specs';\nconst WEIGHT_DATA_SUFFIX = 'weight_data';\nconst MODEL_METADATA_SUFFIX = 'model_metadata';\n/**\n * Purge all tensorflow.js-saved model artifacts from local storage.\n *\n * @returns Paths of the models purged.\n */\nexport function purgeLocalStorageArtifacts() {\n if (!env().getBool('IS_BROWSER') || typeof window === 'undefined' ||\n typeof window.localStorage === 'undefined') {\n throw new Error('purgeLocalStorageModels() cannot proceed because local storage is ' +\n 'unavailable in the current environment.');\n }\n const LS = window.localStorage;\n const purgedModelPaths = [];\n for (let i = 0; i < LS.length; ++i) {\n const key = LS.key(i);\n const prefix = PATH_PREFIX + PATH_SEPARATOR;\n if (key.startsWith(prefix) && key.length > prefix.length) {\n LS.removeItem(key);\n const modelName = getModelPathFromKey(key);\n if (purgedModelPaths.indexOf(modelName) === -1) {\n purgedModelPaths.push(modelName);\n }\n }\n }\n return purgedModelPaths;\n}\nfunction getModelKeys(path) {\n return {\n info: [PATH_PREFIX, path, INFO_SUFFIX].join(PATH_SEPARATOR),\n topology: [PATH_PREFIX, path, MODEL_TOPOLOGY_SUFFIX].join(PATH_SEPARATOR),\n weightSpecs: [PATH_PREFIX, path, WEIGHT_SPECS_SUFFIX].join(PATH_SEPARATOR),\n weightData: [PATH_PREFIX, path, WEIGHT_DATA_SUFFIX].join(PATH_SEPARATOR),\n modelMetadata: [PATH_PREFIX, path, MODEL_METADATA_SUFFIX].join(PATH_SEPARATOR)\n };\n}\n/**\n * Get model path from a local-storage key.\n *\n * E.g., 'tensorflowjs_models/my/model/1/info' --> 'my/model/1'\n *\n * @param key\n */\nfunction getModelPathFromKey(key) {\n const items = key.split(PATH_SEPARATOR);\n if (items.length < 3) {\n throw new Error(`Invalid key format: ${key}`);\n }\n return items.slice(1, items.length - 1).join(PATH_SEPARATOR);\n}\nfunction maybeStripScheme(key) {\n return key.startsWith(BrowserLocalStorage.URL_SCHEME) ?\n key.slice(BrowserLocalStorage.URL_SCHEME.length) :\n key;\n}\n/**\n * IOHandler subclass: Browser Local Storage.\n *\n * See the doc string to `browserLocalStorage` for more details.\n */\nexport class BrowserLocalStorage {\n constructor(modelPath) {\n if (!env().getBool('IS_BROWSER') || typeof window === 'undefined' ||\n typeof window.localStorage === 'undefined') {\n // TODO(cais): Add more info about what IOHandler subtypes are\n // available.\n // Maybe point to a doc page on the web and/or automatically determine\n // the available IOHandlers and print them in the error message.\n throw new Error('The current environment does not support local storage.');\n }\n this.LS = window.localStorage;\n if (modelPath == null || !modelPath) {\n throw new Error('For local storage, modelPath must not be null, undefined or empty.');\n }\n this.modelPath = modelPath;\n this.keys = getModelKeys(this.modelPath);\n }\n /**\n * Save model artifacts to browser local storage.\n *\n * See the documentation to `browserLocalStorage` for details on the saved\n * artifacts.\n *\n * @param modelArtifacts The model artifacts to be stored.\n * @returns An instance of SaveResult.\n */\n async save(modelArtifacts) {\n if (modelArtifacts.modelTopology instanceof ArrayBuffer) {\n throw new Error('BrowserLocalStorage.save() does not support saving model topology ' +\n 'in binary formats yet.');\n }\n else {\n const topology = JSON.stringify(modelArtifacts.modelTopology);\n const weightSpecs = JSON.stringify(modelArtifacts.weightSpecs);\n const modelArtifactsInfo = getModelArtifactsInfoForJSON(modelArtifacts);\n try {\n this.LS.setItem(this.keys.info, JSON.stringify(modelArtifactsInfo));\n this.LS.setItem(this.keys.topology, topology);\n this.LS.setItem(this.keys.weightSpecs, weightSpecs);\n this.LS.setItem(this.keys.weightData, arrayBufferToBase64String(modelArtifacts.weightData));\n const result = {\n format: modelArtifacts.format,\n generatedBy: modelArtifacts.generatedBy,\n convertedBy: modelArtifacts.convertedBy\n };\n if (modelArtifacts.signature != null) {\n result.signature = modelArtifacts.signature;\n }\n if (modelArtifacts.userDefinedMetadata != null) {\n result.userDefinedMetadata = modelArtifacts.userDefinedMetadata;\n }\n if (modelArtifacts.modelInitializer != null) {\n result.modelInitializer = modelArtifacts.modelInitializer;\n }\n this.LS.setItem(this.keys.modelMetadata, JSON.stringify(result));\n return { modelArtifactsInfo };\n }\n catch (err) {\n // If saving failed, clean up all items saved so far.\n this.LS.removeItem(this.keys.info);\n this.LS.removeItem(this.keys.topology);\n this.LS.removeItem(this.keys.weightSpecs);\n this.LS.removeItem(this.keys.weightData);\n this.LS.removeItem(this.keys.modelMetadata);\n throw new Error(`Failed to save model '${this.modelPath}' to local storage: ` +\n `size quota being exceeded is a possible cause of this failure: ` +\n `modelTopologyBytes=${modelArtifactsInfo.modelTopologyBytes}, ` +\n `weightSpecsBytes=${modelArtifactsInfo.weightSpecsBytes}, ` +\n `weightDataBytes=${modelArtifactsInfo.weightDataBytes}.`);\n }\n }\n }\n /**\n * Load a model from local storage.\n *\n * See the documentation to `browserLocalStorage` for details on the saved\n * artifacts.\n *\n * @returns The loaded model (if loading succeeds).\n */\n async load() {\n const info = JSON.parse(this.LS.getItem(this.keys.info));\n if (info == null) {\n throw new Error(`In local storage, there is no model with name '${this.modelPath}'`);\n }\n if (info.modelTopologyType !== 'JSON') {\n throw new Error('BrowserLocalStorage does not support loading non-JSON model ' +\n 'topology yet.');\n }\n const out = {};\n // Load topology.\n const topology = JSON.parse(this.LS.getItem(this.keys.topology));\n if (topology == null) {\n throw new Error(`In local storage, the topology of model '${this.modelPath}' ` +\n `is missing.`);\n }\n out.modelTopology = topology;\n // Load weight specs.\n const weightSpecs = JSON.parse(this.LS.getItem(this.keys.weightSpecs));\n if (weightSpecs == null) {\n throw new Error(`In local storage, the weight specs of model '${this.modelPath}' ` +\n `are missing.`);\n }\n out.weightSpecs = weightSpecs;\n // Load meta-data fields.\n const metadataString = this.LS.getItem(this.keys.modelMetadata);\n if (metadataString != null) {\n const metadata = JSON.parse(metadataString);\n out.format = metadata['format'];\n out.generatedBy = metadata['generatedBy'];\n out.convertedBy = metadata['convertedBy'];\n if (metadata['signature'] != null) {\n out.signature = metadata['signature'];\n }\n if (metadata['userDefinedMetadata'] != null) {\n out.userDefinedMetadata = metadata['userDefinedMetadata'];\n }\n if (metadata['modelInitializer'] != null) {\n out.modelInitializer = metadata['modelInitializer'];\n }\n }\n // Load weight data.\n const weightDataBase64 = this.LS.getItem(this.keys.weightData);\n if (weightDataBase64 == null) {\n throw new Error(`In local storage, the binary weight values of model ` +\n `'${this.modelPath}' are missing.`);\n }\n out.weightData = base64StringToArrayBuffer(weightDataBase64);\n return out;\n }\n}\nBrowserLocalStorage.URL_SCHEME = 'localstorage://';\nexport const localStorageRouter = (url) => {\n if (!env().getBool('IS_BROWSER')) {\n return null;\n }\n else {\n if (!Array.isArray(url) && url.startsWith(BrowserLocalStorage.URL_SCHEME)) {\n return browserLocalStorage(url.slice(BrowserLocalStorage.URL_SCHEME.length));\n }\n else {\n return null;\n }\n }\n};\nIORouterRegistry.registerSaveRouter(localStorageRouter);\nIORouterRegistry.registerLoadRouter(localStorageRouter);\n/**\n * Factory function for local storage IOHandler.\n *\n * This `IOHandler` supports both `save` and `load`.\n *\n * For each model's saved artifacts, four items are saved to local storage.\n * - `${PATH_SEPARATOR}/${modelPath}/info`: Contains meta-info about the\n * model, such as date saved, type of the topology, size in bytes, etc.\n * - `${PATH_SEPARATOR}/${modelPath}/topology`: Model topology. For Keras-\n * style models, this is a stringized JSON.\n * - `${PATH_SEPARATOR}/${modelPath}/weight_specs`: Weight specs of the\n * model, can be used to decode the saved binary weight values (see\n * item below).\n * - `${PATH_SEPARATOR}/${modelPath}/weight_data`: Concatenated binary\n * weight values, stored as a base64-encoded string.\n *\n * Saving may throw an `Error` if the total size of the artifacts exceed the\n * browser-specific quota.\n *\n * @param modelPath A unique identifier for the model to be saved. Must be a\n * non-empty string.\n * @returns An instance of `IOHandler`, which can be used with, e.g.,\n * `tf.Model.save`.\n */\nexport function browserLocalStorage(modelPath) {\n return new BrowserLocalStorage(modelPath);\n}\nexport class BrowserLocalStorageManager {\n constructor() {\n assert(env().getBool('IS_BROWSER'), () => 'Current environment is not a web browser');\n assert(typeof window === 'undefined' ||\n typeof window.localStorage !== 'undefined', () => 'Current browser does not appear to support localStorage');\n this.LS = window.localStorage;\n }\n async listModels() {\n const out = {};\n const prefix = PATH_PREFIX + PATH_SEPARATOR;\n const suffix = PATH_SEPARATOR + INFO_SUFFIX;\n for (let i = 0; i < this.LS.length; ++i) {\n const key = this.LS.key(i);\n if (key.startsWith(prefix) && key.endsWith(suffix)) {\n const modelPath = getModelPathFromKey(key);\n out[modelPath] = JSON.parse(this.LS.getItem(key));\n }\n }\n return out;\n }\n async removeModel(path) {\n path = maybeStripScheme(path);\n const keys = getModelKeys(path);\n if (this.LS.getItem(keys.info) == null) {\n throw new Error(`Cannot find model at path '${path}'`);\n }\n const info = JSON.parse(this.LS.getItem(keys.info));\n this.LS.removeItem(keys.info);\n this.LS.removeItem(keys.topology);\n this.LS.removeItem(keys.weightSpecs);\n this.LS.removeItem(keys.weightData);\n return info;\n }\n}\n//# sourceMappingURL=local_storage.js.map","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n/**\n * Classes and functions for model management across multiple storage mediums.\n *\n * Supported client actions:\n * - Listing models on all registered storage mediums.\n * - Remove model by URL from any registered storage mediums, by using URL\n * string.\n * - Moving or copying model from one path to another in the same medium or from\n * one medium to another, by using URL strings.\n */\nimport { assert } from '../util';\nimport { IORouterRegistry } from './router_registry';\nconst URL_SCHEME_SUFFIX = '://';\nexport class ModelStoreManagerRegistry {\n constructor() {\n this.managers = {};\n }\n static getInstance() {\n if (ModelStoreManagerRegistry.instance == null) {\n ModelStoreManagerRegistry.instance = new ModelStoreManagerRegistry();\n }\n return ModelStoreManagerRegistry.instance;\n }\n /**\n * Register a save-handler router.\n *\n * @param saveRouter A function that maps a URL-like string onto an instance\n * of `IOHandler` with the `save` method defined or `null`.\n */\n static registerManager(scheme, manager) {\n assert(scheme != null, () => 'scheme must not be undefined or null.');\n if (scheme.endsWith(URL_SCHEME_SUFFIX)) {\n scheme = scheme.slice(0, scheme.indexOf(URL_SCHEME_SUFFIX));\n }\n assert(scheme.length > 0, () => 'scheme must not be an empty string.');\n const registry = ModelStoreManagerRegistry.getInstance();\n assert(registry.managers[scheme] == null, () => `A model store manager is already registered for scheme '${scheme}'.`);\n registry.managers[scheme] = manager;\n }\n static getManager(scheme) {\n const manager = this.getInstance().managers[scheme];\n if (manager == null) {\n throw new Error(`Cannot find model manager for scheme '${scheme}'`);\n }\n return manager;\n }\n static getSchemes() {\n return Object.keys(this.getInstance().managers);\n }\n}\n/**\n * Helper method for parsing a URL string into a scheme and a path.\n *\n * @param url E.g., 'localstorage://my-model'\n * @returns A dictionary with two fields: scheme and path.\n * Scheme: e.g., 'localstorage' in the example above.\n * Path: e.g., 'my-model' in the example above.\n */\nfunction parseURL(url) {\n if (url.indexOf(URL_SCHEME_SUFFIX) === -1) {\n throw new Error(`The url string provided does not contain a scheme. ` +\n `Supported schemes are: ` +\n `${ModelStoreManagerRegistry.getSchemes().join(',')}`);\n }\n return {\n scheme: url.split(URL_SCHEME_SUFFIX)[0],\n path: url.split(URL_SCHEME_SUFFIX)[1],\n };\n}\nasync function cloneModelInternal(sourceURL, destURL, deleteSource = false) {\n assert(sourceURL !== destURL, () => `Old path and new path are the same: '${sourceURL}'`);\n const loadHandlers = IORouterRegistry.getLoadHandlers(sourceURL);\n assert(loadHandlers.length > 0, () => `Copying failed because no load handler is found for source URL ${sourceURL}.`);\n assert(loadHandlers.length < 2, () => `Copying failed because more than one (${loadHandlers.length}) ` +\n `load handlers for source URL ${sourceURL}.`);\n const loadHandler = loadHandlers[0];\n const saveHandlers = IORouterRegistry.getSaveHandlers(destURL);\n assert(saveHandlers.length > 0, () => `Copying failed because no save handler is found for destination ` +\n `URL ${destURL}.`);\n assert(saveHandlers.length < 2, () => `Copying failed because more than one (${loadHandlers.length}) ` +\n `save handlers for destination URL ${destURL}.`);\n const saveHandler = saveHandlers[0];\n const sourceScheme = parseURL(sourceURL).scheme;\n const sourcePath = parseURL(sourceURL).path;\n const sameMedium = sourceScheme === parseURL(sourceURL).scheme;\n const modelArtifacts = await loadHandler.load();\n // If moving within the same storage medium, remove the old model as soon as\n // the loading is done. Without doing this, it is possible that the combined\n // size of the two models will cause the cloning to fail.\n if (deleteSource && sameMedium) {\n await ModelStoreManagerRegistry.getManager(sourceScheme)\n .removeModel(sourcePath);\n }\n const saveResult = await saveHandler.save(modelArtifacts);\n // If moving between mediums, the deletion is done after the save succeeds.\n // This guards against the case in which saving to the destination medium\n // fails.\n if (deleteSource && !sameMedium) {\n await ModelStoreManagerRegistry.getManager(sourceScheme)\n .removeModel(sourcePath);\n }\n return saveResult.modelArtifactsInfo;\n}\n/**\n * List all models stored in registered storage mediums.\n *\n * For a web browser environment, the registered mediums are Local Storage and\n * IndexedDB.\n *\n * ```js\n * // First create and save a model.\n * const model = tf.sequential();\n * model.add(tf.layers.dense(\n * {units: 1, inputShape: [10], activation: 'sigmoid'}));\n * await model.save('localstorage://demo/management/model1');\n *\n * // Then list existing models.\n * console.log(JSON.stringify(await tf.io.listModels()));\n *\n * // Delete the model.\n * await tf.io.removeModel('localstorage://demo/management/model1');\n *\n * // List models again.\n * console.log(JSON.stringify(await tf.io.listModels()));\n * ```\n *\n * @returns A `Promise` of a dictionary mapping URLs of existing models to\n * their model artifacts info. URLs include medium-specific schemes, e.g.,\n * 'indexeddb://my/model/1'. Model artifacts info include type of the\n * model's topology, byte sizes of the topology, weights, etc.\n *\n * @doc {\n * heading: 'Models',\n * subheading: 'Management',\n * namespace: 'io',\n * ignoreCI: true\n * }\n */\nasync function listModels() {\n const schemes = ModelStoreManagerRegistry.getSchemes();\n const out = {};\n for (const scheme of schemes) {\n const schemeOut = await ModelStoreManagerRegistry.getManager(scheme).listModels();\n for (const path in schemeOut) {\n const url = scheme + URL_SCHEME_SUFFIX + path;\n out[url] = schemeOut[path];\n }\n }\n return out;\n}\n/**\n * Remove a model specified by URL from a reigstered storage medium.\n *\n * ```js\n * // First create and save a model.\n * const model = tf.sequential();\n * model.add(tf.layers.dense(\n * {units: 1, inputShape: [10], activation: 'sigmoid'}));\n * await model.save('localstorage://demo/management/model1');\n *\n * // Then list existing models.\n * console.log(JSON.stringify(await tf.io.listModels()));\n *\n * // Delete the model.\n * await tf.io.removeModel('localstorage://demo/management/model1');\n *\n * // List models again.\n * console.log(JSON.stringify(await tf.io.listModels()));\n * ```\n *\n * @param url A URL to a stored model, with a scheme prefix, e.g.,\n * 'localstorage://my-model-1', 'indexeddb://my/model/2'.\n * @returns ModelArtifactsInfo of the deleted model (if and only if deletion\n * is successful).\n * @throws Error if deletion fails, e.g., if no model exists at `path`.\n *\n * @doc {\n * heading: 'Models',\n * subheading: 'Management',\n * namespace: 'io',\n * ignoreCI: true\n * }\n */\nasync function removeModel(url) {\n const schemeAndPath = parseURL(url);\n const manager = ModelStoreManagerRegistry.getManager(schemeAndPath.scheme);\n return manager.removeModel(schemeAndPath.path);\n}\n/**\n * Copy a model from one URL to another.\n *\n * This function supports:\n *\n * 1. Copying within a storage medium, e.g.,\n * `tf.io.copyModel('localstorage://model-1', 'localstorage://model-2')`\n * 2. Copying between two storage mediums, e.g.,\n * `tf.io.copyModel('localstorage://model-1', 'indexeddb://model-1')`\n *\n * ```js\n * // First create and save a model.\n * const model = tf.sequential();\n * model.add(tf.layers.dense(\n * {units: 1, inputShape: [10], activation: 'sigmoid'}));\n * await model.save('localstorage://demo/management/model1');\n *\n * // Then list existing models.\n * console.log(JSON.stringify(await tf.io.listModels()));\n *\n * // Copy the model, from Local Storage to IndexedDB.\n * await tf.io.copyModel(\n * 'localstorage://demo/management/model1',\n * 'indexeddb://demo/management/model1');\n *\n * // List models again.\n * console.log(JSON.stringify(await tf.io.listModels()));\n *\n * // Remove both models.\n * await tf.io.removeModel('localstorage://demo/management/model1');\n * await tf.io.removeModel('indexeddb://demo/management/model1');\n * ```\n *\n * @param sourceURL Source URL of copying.\n * @param destURL Destination URL of copying.\n * @returns ModelArtifactsInfo of the copied model (if and only if copying\n * is successful).\n * @throws Error if copying fails, e.g., if no model exists at `sourceURL`, or\n * if `oldPath` and `newPath` are identical.\n *\n * @doc {\n * heading: 'Models',\n * subheading: 'Management',\n * namespace: 'io',\n * ignoreCI: true\n * }\n */\nasync function copyModel(sourceURL, destURL) {\n const deleteSource = false;\n return cloneModelInternal(sourceURL, destURL, deleteSource);\n}\n/**\n * Move a model from one URL to another.\n *\n * This function supports:\n *\n * 1. Moving within a storage medium, e.g.,\n * `tf.io.moveModel('localstorage://model-1', 'localstorage://model-2')`\n * 2. Moving between two storage mediums, e.g.,\n * `tf.io.moveModel('localstorage://model-1', 'indexeddb://model-1')`\n *\n * ```js\n * // First create and save a model.\n * const model = tf.sequential();\n * model.add(tf.layers.dense(\n * {units: 1, inputShape: [10], activation: 'sigmoid'}));\n * await model.save('localstorage://demo/management/model1');\n *\n * // Then list existing models.\n * console.log(JSON.stringify(await tf.io.listModels()));\n *\n * // Move the model, from Local Storage to IndexedDB.\n * await tf.io.moveModel(\n * 'localstorage://demo/management/model1',\n * 'indexeddb://demo/management/model1');\n *\n * // List models again.\n * console.log(JSON.stringify(await tf.io.listModels()));\n *\n * // Remove the moved model.\n * await tf.io.removeModel('indexeddb://demo/management/model1');\n * ```\n *\n * @param sourceURL Source URL of moving.\n * @param destURL Destination URL of moving.\n * @returns ModelArtifactsInfo of the copied model (if and only if copying\n * is successful).\n * @throws Error if moving fails, e.g., if no model exists at `sourceURL`, or\n * if `oldPath` and `newPath` are identical.\n *\n * @doc {\n * heading: 'Models',\n * subheading: 'Management',\n * namespace: 'io',\n * ignoreCI: true\n * }\n */\nasync function moveModel(sourceURL, destURL) {\n const deleteSource = true;\n return cloneModelInternal(sourceURL, destURL, deleteSource);\n}\nexport { moveModel, copyModel, removeModel, listModels };\n//# sourceMappingURL=model_management.js.map","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport '../flags';\nimport { env } from '../environment';\nimport { BrowserIndexedDB, BrowserIndexedDBManager } from '../io/indexed_db';\nimport { BrowserLocalStorage, BrowserLocalStorageManager } from '../io/local_storage';\nimport { ModelStoreManagerRegistry } from '../io/model_management';\nexport class PlatformBrowser {\n fetch(path, init) {\n return fetch(path, init);\n }\n now() {\n return performance.now();\n }\n encode(text, encoding) {\n if (encoding !== 'utf-8' && encoding !== 'utf8') {\n throw new Error(`Browser's encoder only supports utf-8, but got ${encoding}`);\n }\n if (this.textEncoder == null) {\n this.textEncoder = new TextEncoder();\n }\n return this.textEncoder.encode(text);\n }\n decode(bytes, encoding) {\n return new TextDecoder(encoding).decode(bytes);\n }\n}\nif (env().get('IS_BROWSER')) {\n env().setPlatform('browser', new PlatformBrowser());\n // Register LocalStorage IOHandler\n try {\n ModelStoreManagerRegistry.registerManager(BrowserLocalStorage.URL_SCHEME, new BrowserLocalStorageManager());\n }\n catch (err) {\n }\n // Register IndexedDB IOHandler\n try {\n ModelStoreManagerRegistry.registerManager(BrowserIndexedDB.URL_SCHEME, new BrowserIndexedDBManager());\n }\n catch (err) {\n }\n}\n//# sourceMappingURL=platform_browser.js.map","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { env } from '../environment';\n// We are wrapping this within an object so it can be stubbed by Jasmine.\nexport const getNodeFetch = {\n // tslint:disable-next-line:no-require-imports\n importFetch: () => require('node-fetch')\n};\nlet systemFetch;\n// These getters and setters are for testing so we don't export a mutable\n// variable.\nexport function resetSystemFetch() {\n systemFetch = null;\n}\nexport function setSystemFetch(fetchFn) {\n systemFetch = fetchFn;\n}\nexport function getSystemFetch() {\n return systemFetch;\n}\nexport class PlatformNode {\n constructor() {\n // tslint:disable-next-line:no-require-imports\n this.util = require('util');\n // According to the spec, the built-in encoder can do only UTF-8 encoding.\n // https://developer.mozilla.org/en-US/docs/Web/API/TextEncoder/TextEncoder\n this.textEncoder = new this.util.TextEncoder();\n }\n fetch(path, requestInits) {\n if (env().global.fetch != null) {\n return env().global.fetch(path, requestInits);\n }\n if (systemFetch == null) {\n systemFetch = getNodeFetch.importFetch();\n }\n return systemFetch(path, requestInits);\n }\n now() {\n const time = process.hrtime();\n return time[0] * 1000 + time[1] / 1000000;\n }\n encode(text, encoding) {\n if (encoding !== 'utf-8' && encoding !== 'utf8') {\n throw new Error(`Node built-in encoder only supports utf-8, but got ${encoding}`);\n }\n return this.textEncoder.encode(text);\n }\n decode(bytes, encoding) {\n if (bytes.length === 0) {\n return '';\n }\n return new this.util.TextDecoder(encoding).decode(bytes);\n }\n}\nif (env().get('IS_NODE')) {\n env().setPlatform('node', new PlatformNode());\n}\n//# sourceMappingURL=platform_node.js.map","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { TensorBuffer } from '../tensor';\nimport * as util from '../util';\n/**\n * Creates an empty `tf.TensorBuffer` with the specified `shape` and `dtype`.\n *\n * The values are stored in CPU as `TypedArray`. Fill the buffer using\n * `buffer.set()`, or by modifying directly `buffer.values`.\n *\n * When done, call `buffer.toTensor()` to get an immutable `tf.Tensor` with\n * those values.\n *\n * ```js\n * // Create a buffer and set values at particular indices.\n * const buffer = tf.buffer([2, 2]);\n * buffer.set(3, 0, 0);\n * buffer.set(5, 1, 0);\n *\n * // Convert the buffer back to a tensor.\n * buffer.toTensor().print();\n * ```\n *\n * @param shape An array of integers defining the output tensor shape.\n * @param dtype The dtype of the buffer. Defaults to 'float32'.\n * @param values The values of the buffer as `TypedArray`. Defaults to\n * zeros.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nexport function buffer(shape, dtype = 'float32', values) {\n dtype = dtype || 'float32';\n util.assertNonNegativeIntegerDimensions(shape);\n return new TensorBuffer(shape, dtype, values);\n}\n//# sourceMappingURL=buffer.js.map","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Cast } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { op } from './operation';\n/**\n * Casts a `tf.Tensor` to a new dtype.\n *\n * ```js\n * const x = tf.tensor1d([1.5, 2.5, 3]);\n * tf.cast(x, 'int32').print();\n * ```\n * @param x The input tensor to be casted.\n * @param dtype The dtype to cast the input tensor to.\n *\n * @doc {heading: 'Tensors', subheading: 'Transformations'}\n */\nfunction cast_(x, dtype) {\n const $x = convertToTensor(x, 'x', 'cast');\n // Sanity checks.\n if (!util.isValidDtype(dtype)) {\n throw new Error(`Failed to cast to unknown dtype ${dtype}`);\n }\n if (dtype === 'string' && $x.dtype !== 'string' ||\n dtype !== 'string' && $x.dtype === 'string') {\n throw new Error('Only strings can be casted to strings');\n }\n const inputs = { x: $x };\n const attrs = { dtype };\n return ENGINE.runKernel(Cast, inputs, attrs);\n}\nexport const cast = op({ cast_ });\n//# sourceMappingURL=cast.js.map","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Identity } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Creates a new tensor with the same values and shape as the specified\n * tensor.\n *\n * ```js\n * const x = tf.tensor([1, 2]);\n *\n * x.clone().print();\n * ```\n *\n * @param x The tensor to clone.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nfunction clone_(x) {\n const $x = convertToTensor(x, 'x', 'clone', 'string_or_numeric');\n const inputs = { x: $x };\n // Note this op is called tf.identity in python. Hence the kernel name used\n // here.\n return ENGINE.runKernel(Identity, inputs);\n}\nexport const clone = op({ clone_ });\n//# sourceMappingURL=clone.js.map","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n/**\n * Prints information about the `tf.Tensor` including its data.\n *\n * ```js\n * const verbose = true;\n * tf.tensor2d([1, 2, 3, 4], [2, 2]).print(verbose);\n * ```\n * @param x The tensor to be printed.\n * @param verbose Whether to print verbose information about the ` Tensor`,\n * including dtype and size.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nexport function print(x, verbose = false) {\n console.log(x.toString(verbose));\n}\n//# sourceMappingURL=print.js.map","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n/**\n * IOHandlers related to files, such as browser-triggered file downloads,\n * user-selected files in browser.\n */\nimport '../flags';\nimport { env } from '../environment';\nimport { basename, concatenateArrayBuffers, getModelArtifactsInfoForJSON } from './io_utils';\nimport { IORouterRegistry } from './router_registry';\nconst DEFAULT_FILE_NAME_PREFIX = 'model';\nconst DEFAULT_JSON_EXTENSION_NAME = '.json';\nconst DEFAULT_WEIGHT_DATA_EXTENSION_NAME = '.weights.bin';\nfunction defer(f) {\n return new Promise(resolve => setTimeout(resolve)).then(f);\n}\nexport class BrowserDownloads {\n constructor(fileNamePrefix) {\n if (!env().getBool('IS_BROWSER')) {\n // TODO(cais): Provide info on what IOHandlers are available under the\n // current environment.\n throw new Error('browserDownloads() cannot proceed because the current environment ' +\n 'is not a browser.');\n }\n if (fileNamePrefix.startsWith(BrowserDownloads.URL_SCHEME)) {\n fileNamePrefix = fileNamePrefix.slice(BrowserDownloads.URL_SCHEME.length);\n }\n if (fileNamePrefix == null || fileNamePrefix.length === 0) {\n fileNamePrefix = DEFAULT_FILE_NAME_PREFIX;\n }\n this.modelTopologyFileName = fileNamePrefix + DEFAULT_JSON_EXTENSION_NAME;\n this.weightDataFileName =\n fileNamePrefix + DEFAULT_WEIGHT_DATA_EXTENSION_NAME;\n }\n async save(modelArtifacts) {\n if (typeof (document) === 'undefined') {\n throw new Error('Browser downloads are not supported in ' +\n 'this environment since `document` is not present');\n }\n const weightsURL = window.URL.createObjectURL(new Blob([modelArtifacts.weightData], { type: 'application/octet-stream' }));\n if (modelArtifacts.modelTopology instanceof ArrayBuffer) {\n throw new Error('BrowserDownloads.save() does not support saving model topology ' +\n 'in binary formats yet.');\n }\n else {\n const weightsManifest = [{\n paths: ['./' + this.weightDataFileName],\n weights: modelArtifacts.weightSpecs\n }];\n const modelTopologyAndWeightManifest = {\n modelTopology: modelArtifacts.modelTopology,\n format: modelArtifacts.format,\n generatedBy: modelArtifacts.generatedBy,\n convertedBy: modelArtifacts.convertedBy,\n weightsManifest\n };\n if (modelArtifacts.signature != null) {\n modelTopologyAndWeightManifest.signature = modelArtifacts.signature;\n }\n if (modelArtifacts.userDefinedMetadata != null) {\n modelTopologyAndWeightManifest.userDefinedMetadata =\n modelArtifacts.userDefinedMetadata;\n }\n if (modelArtifacts.modelInitializer != null) {\n modelTopologyAndWeightManifest.modelInitializer =\n modelArtifacts.modelInitializer;\n }\n const modelTopologyAndWeightManifestURL = window.URL.createObjectURL(new Blob([JSON.stringify(modelTopologyAndWeightManifest)], { type: 'application/json' }));\n // If anchor elements are not provided, create them without attaching them\n // to parents, so that the downloaded file names can be controlled.\n const jsonAnchor = this.jsonAnchor == null ? document.createElement('a') :\n this.jsonAnchor;\n jsonAnchor.download = this.modelTopologyFileName;\n jsonAnchor.href = modelTopologyAndWeightManifestURL;\n // Trigger downloads by evoking a click event on the download anchors.\n // When multiple downloads are started synchronously, Firefox will only\n // save the last one.\n await defer(() => jsonAnchor.dispatchEvent(new MouseEvent('click')));\n if (modelArtifacts.weightData != null) {\n const weightDataAnchor = this.weightDataAnchor == null ?\n document.createElement('a') :\n this.weightDataAnchor;\n weightDataAnchor.download = this.weightDataFileName;\n weightDataAnchor.href = weightsURL;\n await defer(() => weightDataAnchor.dispatchEvent(new MouseEvent('click')));\n }\n return { modelArtifactsInfo: getModelArtifactsInfoForJSON(modelArtifacts) };\n }\n }\n}\nBrowserDownloads.URL_SCHEME = 'downloads://';\nclass BrowserFiles {\n constructor(files) {\n if (files == null || files.length < 1) {\n throw new Error(`When calling browserFiles, at least 1 file is required, ` +\n `but received ${files}`);\n }\n this.files = files;\n }\n async load() {\n const jsonFile = this.files[0];\n const weightFiles = this.files.slice(1);\n return new Promise((resolve, reject) => {\n const jsonReader = new FileReader();\n jsonReader.onload = (event) => {\n // tslint:disable-next-line:no-any\n const modelJSON = JSON.parse(event.target.result);\n const modelTopology = modelJSON.modelTopology;\n if (modelTopology == null) {\n reject(new Error(`modelTopology field is missing from file ${jsonFile.name}`));\n return;\n }\n if (weightFiles.length === 0) {\n resolve({ modelTopology });\n }\n const weightsManifest = modelJSON.weightsManifest;\n if (weightsManifest == null) {\n reject(new Error(`weightManifest field is missing from file ${jsonFile.name}`));\n return;\n }\n let pathToFile;\n try {\n pathToFile =\n this.checkManifestAndWeightFiles(weightsManifest, weightFiles);\n }\n catch (err) {\n reject(err);\n return;\n }\n const weightSpecs = [];\n const paths = [];\n const perFileBuffers = [];\n weightsManifest.forEach(weightsGroup => {\n weightsGroup.paths.forEach(path => {\n paths.push(path);\n perFileBuffers.push(null);\n });\n weightSpecs.push(...weightsGroup.weights);\n });\n weightsManifest.forEach(weightsGroup => {\n weightsGroup.paths.forEach(path => {\n const weightFileReader = new FileReader();\n weightFileReader.onload = (event) => {\n // tslint:disable-next-line:no-any\n const weightData = event.target.result;\n const index = paths.indexOf(path);\n perFileBuffers[index] = weightData;\n if (perFileBuffers.indexOf(null) === -1) {\n const result = {\n modelTopology,\n weightSpecs,\n weightData: concatenateArrayBuffers(perFileBuffers),\n format: modelJSON.format,\n generatedBy: modelJSON.generatedBy,\n convertedBy: modelJSON.convertedBy\n };\n if (modelJSON.signature != null) {\n result.signature = modelJSON.signature;\n }\n if (modelJSON.userDefinedMetadata != null) {\n result.userDefinedMetadata = modelJSON.userDefinedMetadata;\n }\n if (modelJSON.modelInitializer != null) {\n result.modelInitializer = modelJSON.modelInitializer;\n }\n resolve(result);\n }\n };\n weightFileReader.onerror = error => reject(`Failed to weights data from file of path '${path}'.`);\n weightFileReader.readAsArrayBuffer(pathToFile[path]);\n });\n });\n };\n jsonReader.onerror = error => reject(`Failed to read model topology and weights manifest JSON ` +\n `from file '${jsonFile.name}'. BrowserFiles supports loading ` +\n `Keras-style tf.Model artifacts only.`);\n jsonReader.readAsText(jsonFile);\n });\n }\n /**\n * Check the compatibility between weights manifest and weight files.\n */\n checkManifestAndWeightFiles(manifest, files) {\n const basenames = [];\n const fileNames = files.map(file => basename(file.name));\n const pathToFile = {};\n for (const group of manifest) {\n group.paths.forEach(path => {\n const pathBasename = basename(path);\n if (basenames.indexOf(pathBasename) !== -1) {\n throw new Error(`Duplicate file basename found in weights manifest: ` +\n `'${pathBasename}'`);\n }\n basenames.push(pathBasename);\n if (fileNames.indexOf(pathBasename) === -1) {\n throw new Error(`Weight file with basename '${pathBasename}' is not provided.`);\n }\n else {\n pathToFile[path] = files[fileNames.indexOf(pathBasename)];\n }\n });\n }\n if (basenames.length !== files.length) {\n throw new Error(`Mismatch in the number of files in weights manifest ` +\n `(${basenames.length}) and the number of weight files provided ` +\n `(${files.length}).`);\n }\n return pathToFile;\n }\n}\nexport const browserDownloadsRouter = (url) => {\n if (!env().getBool('IS_BROWSER')) {\n return null;\n }\n else {\n if (!Array.isArray(url) && url.startsWith(BrowserDownloads.URL_SCHEME)) {\n return browserDownloads(url.slice(BrowserDownloads.URL_SCHEME.length));\n }\n else {\n return null;\n }\n }\n};\nIORouterRegistry.registerSaveRouter(browserDownloadsRouter);\n/**\n * Creates an IOHandler that triggers file downloads from the browser.\n *\n * The returned `IOHandler` instance can be used as model exporting methods such\n * as `tf.Model.save` and supports only saving.\n *\n * ```js\n * const model = tf.sequential();\n * model.add(tf.layers.dense(\n * {units: 1, inputShape: [10], activation: 'sigmoid'}));\n * const saveResult = await model.save('downloads://mymodel');\n * // This will trigger downloading of two files:\n * // 'mymodel.json' and 'mymodel.weights.bin'.\n * console.log(saveResult);\n * ```\n *\n * @param fileNamePrefix Prefix name of the files to be downloaded. For use with\n * `tf.Model`, `fileNamePrefix` should follow either of the following two\n * formats:\n * 1. `null` or `undefined`, in which case the default file\n * names will be used:\n * - 'model.json' for the JSON file containing the model topology and\n * weights manifest.\n * - 'model.weights.bin' for the binary file containing the binary weight\n * values.\n * 2. A single string or an Array of a single string, as the file name prefix.\n * For example, if `'foo'` is provided, the downloaded JSON\n * file and binary weights file will be named 'foo.json' and\n * 'foo.weights.bin', respectively.\n * @param config Additional configuration for triggering downloads.\n * @returns An instance of `BrowserDownloads` `IOHandler`.\n *\n * @doc {\n * heading: 'Models',\n * subheading: 'Loading',\n * namespace: 'io',\n * ignoreCI: true\n * }\n */\nexport function browserDownloads(fileNamePrefix = 'model') {\n return new BrowserDownloads(fileNamePrefix);\n}\n/**\n * Creates an IOHandler that loads model artifacts from user-selected files.\n *\n * This method can be used for loading from files such as user-selected files\n * in the browser.\n * When used in conjunction with `tf.loadLayersModel`, an instance of\n * `tf.LayersModel` (Keras-style) can be constructed from the loaded artifacts.\n *\n * ```js\n * // Note: This code snippet won't run properly without the actual file input\n * // elements in the HTML DOM.\n *\n * // Suppose there are two HTML file input (``)\n * // elements.\n * const uploadJSONInput = document.getElementById('upload-json');\n * const uploadWeightsInput = document.getElementById('upload-weights');\n * const model = await tf.loadLayersModel(tf.io.browserFiles(\n * [uploadJSONInput.files[0], uploadWeightsInput.files[0]]));\n * ```\n *\n * @param files `File`s to load from. Currently, this function supports only\n * loading from files that contain Keras-style models (i.e., `tf.Model`s), for\n * which an `Array` of `File`s is expected (in that order):\n * - A JSON file containing the model topology and weight manifest.\n * - Optionally, One or more binary files containing the binary weights.\n * These files must have names that match the paths in the `weightsManifest`\n * contained by the aforementioned JSON file, or errors will be thrown\n * during loading. These weights files have the same format as the ones\n * generated by `tensorflowjs_converter` that comes with the `tensorflowjs`\n * Python PIP package. If no weights files are provided, only the model\n * topology will be loaded from the JSON file above.\n * @returns An instance of `Files` `IOHandler`.\n *\n * @doc {\n * heading: 'Models',\n * subheading: 'Loading',\n * namespace: 'io',\n * ignoreCI: true\n * }\n */\nexport function browserFiles(files) {\n return new BrowserFiles(files);\n}\n//# sourceMappingURL=browser_files.js.map","/**\n * @license\n * Copyright 2020 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n// Required side effectful code for tfjs-core\n// Set up Engine and ENV\nimport { getOrMakeEngine } from './engine';\ngetOrMakeEngine();\n// Register backend-agnostic flags.\nimport './flags';\n// Register platforms\nimport './platforms/platform_browser';\nimport './platforms/platform_node';\n// Set up OpHandler\nimport { buffer } from './ops/buffer';\nimport { cast } from './ops/cast';\nimport { clone } from './ops/clone';\nimport { print } from './ops/print';\nimport { setOpHandler } from './tensor';\nconst opHandler = {\n buffer,\n cast,\n clone,\n print\n};\nsetOpHandler(opHandler);\n//# sourceMappingURL=base_side_effects.js.map","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { assert } from '../util';\n/**\n * Monitor Promise.all progress, fire onProgress callback function.\n *\n * @param promises Promise list going to be monitored\n * @param onProgress Callback function. Fired when a promise resolved.\n * @param startFraction Optional fraction start. Default to 0.\n * @param endFraction Optional fraction end. Default to 1.\n */\nexport function monitorPromisesProgress(promises, onProgress, startFraction, endFraction) {\n checkPromises(promises);\n startFraction = startFraction == null ? 0 : startFraction;\n endFraction = endFraction == null ? 1 : endFraction;\n checkFraction(startFraction, endFraction);\n let resolvedPromise = 0;\n const registerMonitor = (promise) => {\n promise.then(value => {\n const fraction = startFraction +\n ++resolvedPromise / promises.length * (endFraction - startFraction);\n // pass fraction as parameter to callback function.\n onProgress(fraction);\n return value;\n });\n return promise;\n };\n function checkPromises(promises) {\n assert(promises != null && Array.isArray(promises) && promises.length > 0, () => 'promises must be a none empty array');\n }\n function checkFraction(startFraction, endFraction) {\n assert(startFraction >= 0 && startFraction <= 1, () => `Progress fraction must be in range [0, 1], but ` +\n `got startFraction ${startFraction}`);\n assert(endFraction >= 0 && endFraction <= 1, () => `Progress fraction must be in range [0, 1], but ` +\n `got endFraction ${endFraction}`);\n assert(endFraction >= startFraction, () => `startFraction must be no more than endFraction, but ` +\n `got startFraction ${startFraction} and endFraction ` +\n `${endFraction}`);\n }\n return Promise.all(promises.map(registerMonitor));\n}\n//# sourceMappingURL=progress.js.map","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { env } from '../environment';\nimport * as util from '../util';\nimport { decodeWeights } from './io_utils';\nimport { monitorPromisesProgress } from './progress';\nimport { DTYPE_VALUE_SIZE_MAP } from './types';\n/**\n * Reads binary weights data from a number of URLs.\n *\n * @param fetchURLs URLs to send the HTTP requests at, using `fetch` calls.\n * @param requestOptions RequestInit (options) for the HTTP requests.\n * @param fetchFunc Optional overriding value for the `window.fetch` function.\n * @param onProgress Optional, progress callback function, fired periodically\n * before the load is completed.\n * @returns A `Promise` of an Array of `ArrayBuffer`. The Array has the same\n * length as `fetchURLs`.\n */\nexport async function loadWeightsAsArrayBuffer(fetchURLs, loadOptions) {\n if (loadOptions == null) {\n loadOptions = {};\n }\n const fetchFunc = loadOptions.fetchFunc == null ? env().platform.fetch :\n loadOptions.fetchFunc;\n // Create the requests for all of the weights in parallel.\n const requests = fetchURLs.map(fetchURL => fetchFunc(fetchURL, loadOptions.requestInit, { isBinary: true }));\n const fetchStartFraction = 0;\n const fetchEndFraction = 0.5;\n const responses = loadOptions.onProgress == null ?\n await Promise.all(requests) :\n await monitorPromisesProgress(requests, loadOptions.onProgress, fetchStartFraction, fetchEndFraction);\n const bufferPromises = responses.map(response => response.arrayBuffer());\n const bufferStartFraction = 0.5;\n const bufferEndFraction = 1;\n const buffers = loadOptions.onProgress == null ?\n await Promise.all(bufferPromises) :\n await monitorPromisesProgress(bufferPromises, loadOptions.onProgress, bufferStartFraction, bufferEndFraction);\n return buffers;\n}\n/**\n * Reads a weights manifest JSON configuration, fetches the weights and\n * returns them as `Tensor`s.\n *\n * @param manifest The weights manifest JSON.\n * @param filePathPrefix The path prefix for filenames given in the manifest.\n * Defaults to the empty string.\n * @param weightNames The names of the weights to be fetched.\n */\nexport async function loadWeights(manifest, filePathPrefix = '', weightNames, requestInit) {\n // TODO(nsthorat): Groups are currently fetched atomically. If you need a\n // single weight from a group, the whole group will be fetched. At a future\n // date, we should support fetching only the individual shards within a\n // group that are needed to reconstruct the requested weight.\n // TODO(cais): Use `decodeWeights` for implementation.\n const fetchWeights = (fetchUrls) => loadWeightsAsArrayBuffer(fetchUrls, { requestInit });\n const loadWeights = weightsLoaderFactory(fetchWeights);\n return loadWeights(manifest, filePathPrefix, weightNames);\n}\n/**\n * Creates a function, which reads a weights manifest JSON configuration,\n * fetches the weight files using the specified function and returns them as\n * `Tensor`s.\n *\n * ```js\n * // example for creating a nodejs weight loader, which reads the weight files\n * // from disk using fs.readFileSync\n *\n * import * as fs from 'fs'\n *\n * const fetchWeightsFromDisk = (filePaths: string[]) =>\n * filePaths.map(filePath => fs.readFileSync(filePath).buffer)\n *\n * const loadWeights = tf.io.weightsLoaderFactory(fetchWeightsFromDisk)\n *\n * const manifest = JSON.parse(\n * fs.readFileSync('./my_model-weights_manifest').toString()\n * )\n * const weightMap = await loadWeights(manifest, './')\n * ```\n * @param fetchWeightsFunction The function used for fetching the weight files.\n * @returns Weight loading function.\n */\nexport function weightsLoaderFactory(fetchWeightsFunction) {\n return async (manifest, filePathPrefix = '', weightNames) => {\n // Collect all the groups, weights, and their relative offsets to be\n // fetched.\n const groupIndicesToFetchMap = manifest.map(() => false);\n const groupWeightsToFetch = {};\n const weightsFound = weightNames != null ? weightNames.map(() => false) : [];\n const allManifestWeightNames = [];\n manifest.forEach((manifestGroupConfig, groupIndex) => {\n let groupOffset = 0;\n manifestGroupConfig.weights.forEach(weightsEntry => {\n const rawDtype = ('quantization' in weightsEntry) ?\n weightsEntry.quantization.dtype :\n weightsEntry.dtype;\n const weightsBytes = DTYPE_VALUE_SIZE_MAP[rawDtype] *\n util.sizeFromShape(weightsEntry.shape);\n const enqueueWeightsForFetchingFn = () => {\n groupIndicesToFetchMap[groupIndex] = true;\n if (groupWeightsToFetch[groupIndex] == null) {\n groupWeightsToFetch[groupIndex] = [];\n }\n groupWeightsToFetch[groupIndex].push({\n manifestEntry: weightsEntry,\n groupOffset,\n sizeBytes: weightsBytes\n });\n };\n if (weightNames != null) {\n weightNames.forEach((weightName, weightIndex) => {\n if (weightName === weightsEntry.name) {\n enqueueWeightsForFetchingFn();\n weightsFound[weightIndex] = true;\n }\n });\n }\n else {\n enqueueWeightsForFetchingFn();\n }\n allManifestWeightNames.push(weightsEntry.name);\n groupOffset += weightsBytes;\n });\n });\n if (!weightsFound.every(found => found)) {\n const weightsNotFound = weightNames.filter((_, i) => !weightsFound[i]);\n throw new Error(`Could not find weights in manifest with names: ` +\n `${weightsNotFound.join(', ')}. \\n` +\n `Manifest JSON has weights with names: ` +\n `${allManifestWeightNames.join(', ')}.`);\n }\n // Convert the one-hot boolean groupId => shouldFetch map to a list of group\n // IDs.\n const groupIndicesToFetch = groupIndicesToFetchMap.reduce((accumulator, shouldFetch, i) => {\n if (shouldFetch) {\n accumulator.push(i);\n }\n return accumulator;\n }, []);\n const fetchUrls = [];\n groupIndicesToFetch.forEach(i => {\n manifest[i].paths.forEach(filepath => {\n const fetchUrl = filePathPrefix +\n (!filePathPrefix.endsWith('/') ? '/' : '') + filepath;\n fetchUrls.push(fetchUrl);\n });\n });\n const buffers = await fetchWeightsFunction(fetchUrls);\n const weightsTensorMap = {};\n let bufferIndexOffset = 0;\n groupIndicesToFetch.forEach(i => {\n const numBuffers = manifest[i].paths.length;\n let groupBytes = 0;\n for (let i = 0; i < numBuffers; i++) {\n groupBytes += buffers[bufferIndexOffset + i].byteLength;\n }\n // Create a buffer for the whole group.\n const groupBuffer = new ArrayBuffer(groupBytes);\n const groupByteBuffer = new Uint8Array(groupBuffer);\n let groupBufferOffset = 0;\n for (let i = 0; i < numBuffers; i++) {\n const buffer = new Uint8Array(buffers[bufferIndexOffset + i]);\n groupByteBuffer.set(buffer, groupBufferOffset);\n groupBufferOffset += buffer.byteLength;\n }\n const weightsEntries = groupWeightsToFetch[i];\n weightsEntries.forEach(weightsEntry => {\n const byteBuffer = groupBuffer.slice(weightsEntry.groupOffset, weightsEntry.groupOffset + weightsEntry.sizeBytes);\n const nameToTensorMap = decodeWeights(byteBuffer, [weightsEntry.manifestEntry]);\n for (const name in nameToTensorMap) {\n weightsTensorMap[name] = nameToTensorMap[name];\n }\n });\n bufferIndexOffset += numBuffers;\n });\n return weightsTensorMap;\n };\n}\n//# sourceMappingURL=weights_loader.js.map","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\n/**\n * IOHandler implementations based on HTTP requests in the web browser.\n *\n * Uses [`fetch`](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API).\n */\nimport { env } from '../environment';\nimport { assert } from '../util';\nimport { concatenateArrayBuffers, getModelArtifactsInfoForJSON } from './io_utils';\nimport { IORouterRegistry } from './router_registry';\nimport { loadWeightsAsArrayBuffer } from './weights_loader';\nconst OCTET_STREAM_MIME_TYPE = 'application/octet-stream';\nconst JSON_TYPE = 'application/json';\nexport class HTTPRequest {\n constructor(path, loadOptions) {\n this.DEFAULT_METHOD = 'POST';\n if (loadOptions == null) {\n loadOptions = {};\n }\n this.weightPathPrefix = loadOptions.weightPathPrefix;\n this.onProgress = loadOptions.onProgress;\n this.weightUrlConverter = loadOptions.weightUrlConverter;\n if (loadOptions.fetchFunc != null) {\n assert(typeof loadOptions.fetchFunc === 'function', () => 'Must pass a function that matches the signature of ' +\n '`fetch` (see ' +\n 'https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)');\n this.fetch = loadOptions.fetchFunc;\n }\n else {\n this.fetch = env().platform.fetch;\n }\n assert(path != null && path.length > 0, () => 'URL path for http must not be null, undefined or ' +\n 'empty.');\n if (Array.isArray(path)) {\n assert(path.length === 2, () => 'URL paths for http must have a length of 2, ' +\n `(actual length is ${path.length}).`);\n }\n this.path = path;\n if (loadOptions.requestInit != null &&\n loadOptions.requestInit.body != null) {\n throw new Error('requestInit is expected to have no pre-existing body, but has one.');\n }\n this.requestInit = loadOptions.requestInit || {};\n }\n async save(modelArtifacts) {\n if (modelArtifacts.modelTopology instanceof ArrayBuffer) {\n throw new Error('BrowserHTTPRequest.save() does not support saving model topology ' +\n 'in binary formats yet.');\n }\n const init = Object.assign({ method: this.DEFAULT_METHOD }, this.requestInit);\n init.body = new FormData();\n const weightsManifest = [{\n paths: ['./model.weights.bin'],\n weights: modelArtifacts.weightSpecs,\n }];\n const modelTopologyAndWeightManifest = {\n modelTopology: modelArtifacts.modelTopology,\n format: modelArtifacts.format,\n generatedBy: modelArtifacts.generatedBy,\n convertedBy: modelArtifacts.convertedBy,\n weightsManifest\n };\n if (modelArtifacts.signature != null) {\n modelTopologyAndWeightManifest.signature = modelArtifacts.signature;\n }\n if (modelArtifacts.userDefinedMetadata != null) {\n modelTopologyAndWeightManifest.userDefinedMetadata =\n modelArtifacts.userDefinedMetadata;\n }\n if (modelArtifacts.modelInitializer != null) {\n modelTopologyAndWeightManifest.modelInitializer =\n modelArtifacts.modelInitializer;\n }\n init.body.append('model.json', new Blob([JSON.stringify(modelTopologyAndWeightManifest)], { type: JSON_TYPE }), 'model.json');\n if (modelArtifacts.weightData != null) {\n init.body.append('model.weights.bin', new Blob([modelArtifacts.weightData], { type: OCTET_STREAM_MIME_TYPE }), 'model.weights.bin');\n }\n const response = await this.fetch(this.path, init);\n if (response.ok) {\n return {\n modelArtifactsInfo: getModelArtifactsInfoForJSON(modelArtifacts),\n responses: [response],\n };\n }\n else {\n throw new Error(`BrowserHTTPRequest.save() failed due to HTTP response status ` +\n `${response.status}.`);\n }\n }\n /**\n * Load model artifacts via HTTP request(s).\n *\n * See the documentation to `tf.io.http` for details on the saved\n * artifacts.\n *\n * @returns The loaded model artifacts (if loading succeeds).\n */\n async load() {\n const modelConfigRequest = await this.fetch(this.path, this.requestInit);\n if (!modelConfigRequest.ok) {\n throw new Error(`Request to ${this.path} failed with status code ` +\n `${modelConfigRequest.status}. Please verify this URL points to ` +\n `the model JSON of the model to load.`);\n }\n let modelConfig;\n try {\n modelConfig = await modelConfigRequest.json();\n }\n catch (e) {\n let message = `Failed to parse model JSON of response from ${this.path}.`;\n // TODO(nsthorat): Remove this after some time when we're comfortable that\n // .pb files are mostly gone.\n if (this.path.endsWith('.pb')) {\n message += ' Your path contains a .pb file extension. ' +\n 'Support for .pb models have been removed in TensorFlow.js 1.0 ' +\n 'in favor of .json models. You can re-convert your Python ' +\n 'TensorFlow model using the TensorFlow.js 1.0 conversion scripts ' +\n 'or you can convert your.pb models with the \\'pb2json\\'' +\n 'NPM script in the tensorflow/tfjs-converter repository.';\n }\n else {\n message += ' Please make sure the server is serving valid ' +\n 'JSON for this request.';\n }\n throw new Error(message);\n }\n const modelTopology = modelConfig.modelTopology;\n const weightsManifest = modelConfig.weightsManifest;\n const generatedBy = modelConfig.generatedBy;\n const convertedBy = modelConfig.convertedBy;\n const format = modelConfig.format;\n const signature = modelConfig.signature;\n const userDefinedMetadata = modelConfig.userDefinedMetadata;\n // We do not allow both modelTopology and weightsManifest to be missing.\n if (modelTopology == null && weightsManifest == null) {\n throw new Error(`The JSON from HTTP path ${this.path} contains neither model ` +\n `topology or manifest for weights.`);\n }\n let weightSpecs;\n let weightData;\n if (weightsManifest != null) {\n const results = await this.loadWeights(weightsManifest);\n [weightSpecs, weightData] = results;\n }\n const artifacts = {\n modelTopology,\n weightSpecs,\n weightData,\n generatedBy,\n convertedBy,\n format\n };\n if (signature != null) {\n artifacts.signature = signature;\n }\n if (userDefinedMetadata != null) {\n artifacts.userDefinedMetadata = userDefinedMetadata;\n }\n const initializer = modelConfig.modelInitializer;\n if (initializer) {\n artifacts.modelInitializer = initializer;\n }\n return artifacts;\n }\n async loadWeights(weightsManifest) {\n const weightPath = Array.isArray(this.path) ? this.path[1] : this.path;\n const [prefix, suffix] = parseUrl(weightPath);\n const pathPrefix = this.weightPathPrefix || prefix;\n const weightSpecs = [];\n for (const entry of weightsManifest) {\n weightSpecs.push(...entry.weights);\n }\n const fetchURLs = [];\n const urlPromises = [];\n for (const weightsGroup of weightsManifest) {\n for (const path of weightsGroup.paths) {\n if (this.weightUrlConverter != null) {\n urlPromises.push(this.weightUrlConverter(path));\n }\n else {\n fetchURLs.push(pathPrefix + path + suffix);\n }\n }\n }\n if (this.weightUrlConverter) {\n fetchURLs.push(...await Promise.all(urlPromises));\n }\n const buffers = await loadWeightsAsArrayBuffer(fetchURLs, {\n requestInit: this.requestInit,\n fetchFunc: this.fetch,\n onProgress: this.onProgress\n });\n return [weightSpecs, concatenateArrayBuffers(buffers)];\n }\n}\nHTTPRequest.URL_SCHEME_REGEX = /^https?:\\/\\//;\n/**\n * Extract the prefix and suffix of the url, where the prefix is the path before\n * the last file, and suffix is the search params after the last file.\n * ```\n * const url = 'http://tfhub.dev/model/1/tensorflowjs_model.pb?tfjs-format=file'\n * [prefix, suffix] = parseUrl(url)\n * // prefix = 'http://tfhub.dev/model/1/'\n * // suffix = '?tfjs-format=file'\n * ```\n * @param url the model url to be parsed.\n */\nexport function parseUrl(url) {\n const lastSlash = url.lastIndexOf('/');\n const lastSearchParam = url.lastIndexOf('?');\n const prefix = url.substring(0, lastSlash);\n const suffix = lastSearchParam > lastSlash ? url.substring(lastSearchParam) : '';\n return [prefix + '/', suffix];\n}\nexport function isHTTPScheme(url) {\n return url.match(HTTPRequest.URL_SCHEME_REGEX) != null;\n}\nexport const httpRouter = (url, loadOptions) => {\n if (typeof fetch === 'undefined' &&\n (loadOptions == null || loadOptions.fetchFunc == null)) {\n // `http` uses `fetch` or `node-fetch`, if one wants to use it in\n // an environment that is not the browser or node they have to setup a\n // global fetch polyfill.\n return null;\n }\n else {\n let isHTTP = true;\n if (Array.isArray(url)) {\n isHTTP = url.every(urlItem => isHTTPScheme(urlItem));\n }\n else {\n isHTTP = isHTTPScheme(url);\n }\n if (isHTTP) {\n return http(url, loadOptions);\n }\n }\n return null;\n};\nIORouterRegistry.registerSaveRouter(httpRouter);\nIORouterRegistry.registerLoadRouter(httpRouter);\n/**\n * Creates an IOHandler subtype that sends model artifacts to HTTP server.\n *\n * An HTTP request of the `multipart/form-data` mime type will be sent to the\n * `path` URL. The form data includes artifacts that represent the topology\n * and/or weights of the model. In the case of Keras-style `tf.Model`, two\n * blobs (files) exist in form-data:\n * - A JSON file consisting of `modelTopology` and `weightsManifest`.\n * - A binary weights file consisting of the concatenated weight values.\n * These files are in the same format as the one generated by\n * [tfjs_converter](https://js.tensorflow.org/tutorials/import-keras.html).\n *\n * The following code snippet exemplifies the client-side code that uses this\n * function:\n *\n * ```js\n * const model = tf.sequential();\n * model.add(\n * tf.layers.dense({units: 1, inputShape: [100], activation: 'sigmoid'}));\n *\n * const saveResult = await model.save(tf.io.http(\n * 'http://model-server:5000/upload', {requestInit: {method: 'PUT'}}));\n * console.log(saveResult);\n * ```\n *\n * If the default `POST` method is to be used, without any custom parameters\n * such as headers, you can simply pass an HTTP or HTTPS URL to `model.save`:\n *\n * ```js\n * const saveResult = await model.save('http://model-server:5000/upload');\n * ```\n *\n * The following GitHub Gist\n * https://gist.github.com/dsmilkov/1b6046fd6132d7408d5257b0976f7864\n * implements a server based on [flask](https://github.com/pallets/flask) that\n * can receive the request. Upon receiving the model artifacts via the requst,\n * this particular server reconsistutes instances of [Keras\n * Models](https://keras.io/models/model/) in memory.\n *\n *\n * @param path A URL path to the model.\n * Can be an absolute HTTP path (e.g.,\n * 'http://localhost:8000/model-upload)') or a relative path (e.g.,\n * './model-upload').\n * @param requestInit Request configurations to be used when sending\n * HTTP request to server using `fetch`. It can contain fields such as\n * `method`, `credentials`, `headers`, `mode`, etc. See\n * https://developer.mozilla.org/en-US/docs/Web/API/Request/Request\n * for more information. `requestInit` must not have a body, because the\n * body will be set by TensorFlow.js. File blobs representing the model\n * topology (filename: 'model.json') and the weights of the model (filename:\n * 'model.weights.bin') will be appended to the body. If `requestInit` has a\n * `body`, an Error will be thrown.\n * @param loadOptions Optional configuration for the loading. It includes the\n * following fields:\n * - weightPathPrefix Optional, this specifies the path prefix for weight\n * files, by default this is calculated from the path param.\n * - fetchFunc Optional, custom `fetch` function. E.g., in Node.js,\n * the `fetch` from node-fetch can be used here.\n * - onProgress Optional, progress callback function, fired periodically\n * before the load is completed.\n * @returns An instance of `IOHandler`.\n *\n * @doc {\n * heading: 'Models',\n * subheading: 'Loading',\n * namespace: 'io',\n * ignoreCI: true\n * }\n */\nexport function http(path, loadOptions) {\n return new HTTPRequest(path, loadOptions);\n}\n/**\n * Deprecated. Use `tf.io.http`.\n * @param path\n * @param loadOptions\n */\nexport function browserHTTPRequest(path, loadOptions) {\n return http(path, loadOptions);\n}\n//# sourceMappingURL=http.js.map","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nclass PassthroughLoader {\n constructor(modelArtifacts) {\n this.modelArtifacts = modelArtifacts;\n }\n async load() {\n return this.modelArtifacts;\n }\n}\nclass PassthroughSaver {\n constructor(saveHandler) {\n this.saveHandler = saveHandler;\n }\n async save(modelArtifacts) {\n return this.saveHandler(modelArtifacts);\n }\n}\n/**\n * Creates an IOHandler that loads model artifacts from memory.\n *\n * When used in conjunction with `tf.loadLayersModel`, an instance of\n * `tf.LayersModel` (Keras-style) can be constructed from the loaded artifacts.\n *\n * ```js\n * const model = await tf.loadLayersModel(tf.io.fromMemory(\n * modelTopology, weightSpecs, weightData));\n * ```\n *\n * @param modelArtifacts a object containing model topology (i.e., parsed from\n * the JSON format).\n * @param weightSpecs An array of `WeightsManifestEntry` objects describing the\n * names, shapes, types, and quantization of the weight data.\n * @param weightData A single `ArrayBuffer` containing the weight data,\n * concatenated in the order described by the weightSpecs.\n * @param trainingConfig Model training configuration. Optional.\n *\n * @returns A passthrough `IOHandler` that simply loads the provided data.\n */\nexport function fromMemory(modelArtifacts, weightSpecs, weightData, trainingConfig) {\n if (arguments.length === 1) {\n const isModelArtifacts = modelArtifacts.modelTopology != null ||\n modelArtifacts.weightSpecs != null;\n if (isModelArtifacts) {\n return new PassthroughLoader(modelArtifacts);\n }\n else {\n // Legacy support: with only modelTopology.\n // TODO(cais): Remove this deprecated API.\n console.warn('Please call tf.io.fromMemory() with only one argument. ' +\n 'The argument should be of type ModelArtifacts. ' +\n 'The multi-argument signature of tf.io.fromMemory() has been ' +\n 'deprecated and will be removed in a future release.');\n return new PassthroughLoader({ modelTopology: modelArtifacts });\n }\n }\n else {\n // Legacy support.\n // TODO(cais): Remove this deprecated API.\n console.warn('Please call tf.io.fromMemory() with only one argument. ' +\n 'The argument should be of type ModelArtifacts. ' +\n 'The multi-argument signature of tf.io.fromMemory() has been ' +\n 'deprecated and will be removed in a future release.');\n return new PassthroughLoader({\n modelTopology: modelArtifacts,\n weightSpecs,\n weightData,\n trainingConfig\n });\n }\n}\n/**\n * Creates an IOHandler that passes saved model artifacts to a callback.\n *\n * ```js\n * function handleSave(artifacts) {\n * // ... do something with the artifacts ...\n * return {modelArtifactsInfo: {...}, ...};\n * }\n *\n * const saveResult = model.save(tf.io.withSaveHandler(handleSave));\n * ```\n *\n * @param saveHandler A function that accepts a `ModelArtifacts` and returns a\n * `SaveResult`.\n */\nexport function withSaveHandler(saveHandler) {\n return new PassthroughSaver(saveHandler);\n}\n//# sourceMappingURL=passthrough.js.map","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { BatchMatMul } from '../kernel_names';\nimport { makeTypesMatch } from '../tensor_util';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Computes the dot product of two matrices, A * B. These must be matrices.\n *\n * ```js\n * const a = tf.tensor2d([1, 2], [1, 2]);\n * const b = tf.tensor2d([1, 2, 3, 4], [2, 2]);\n *\n * a.matMul(b).print(); // or tf.matMul(a, b)\n * ```\n * @param a First matrix in dot product operation.\n * @param b Second matrix in dot product operation.\n * @param transposeA If true, `a` is transposed before multiplication.\n * @param transposeB If true, `b` is transposed before multiplication.\n *\n * @doc {heading: 'Operations', subheading: 'Matrices'}\n */\nfunction matMul_(a, b, transposeA = false, transposeB = false) {\n let $a = convertToTensor(a, 'a', 'matMul');\n let $b = convertToTensor(b, 'b', 'matMul');\n [$a, $b] = makeTypesMatch($a, $b);\n const inputs = { a: $a, b: $b };\n const attrs = { transposeA, transposeB };\n return ENGINE.runKernel(BatchMatMul, inputs, attrs);\n}\nexport const matMul = op({ matMul_ });\n//# sourceMappingURL=mat_mul.js.map","/**\n * @license\n * Copyright 2020 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { OneHot } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport { op } from './operation';\n/**\n * Creates a one-hot `tf.Tensor`. The locations represented by `indices` take\n * value `onValue` (defaults to 1), while all other locations take value\n * `offValue` (defaults to 0). If `indices` is rank `R`, the output has rank\n * `R+1` with the last axis of size `depth`.\n *\n * ```js\n * tf.oneHot(tf.tensor1d([0, 1], 'int32'), 3).print();\n * ```\n *\n * @param indices `tf.Tensor` of indices with dtype `int32`.\n * @param depth The depth of the one hot dimension.\n * @param onValue A number used to fill in the output when the index matches\n * the location.\n * @param offValue A number used to fill in the output when the index does\n * not match the location.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nfunction oneHot_(indices, depth, onValue = 1, offValue = 0) {\n if (depth < 2) {\n throw new Error(`Error in oneHot: depth must be >=2, but it is ${depth}`);\n }\n const $indices = convertToTensor(indices, 'indices', 'oneHot', 'int32');\n const inputs = { indices: $indices };\n const attrs = { depth, onValue, offValue };\n return ENGINE.runKernel(OneHot, inputs, attrs);\n}\nexport const oneHot = op({ oneHot_ });\n//# sourceMappingURL=one_hot.js.map","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { Transpose } from '../kernel_names';\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { op } from './operation';\n/**\n * Transposes the `tf.Tensor`. Permutes the dimensions according to `perm`.\n *\n * The returned `tf.Tensor`'s dimension `i` will correspond to the input\n * dimension `perm[i]`. If `perm` is not given, it is set to `[n-1...0]`,\n * where `n` is the rank of the input `tf.Tensor`. Hence by default, this\n * operation performs a regular matrix transpose on 2-D input `tf.Tensor`s.\n *\n * ```js\n * const a = tf.tensor2d([1, 2, 3, 4, 5, 6], [2, 3]);\n *\n * a.transpose().print(); // or tf.transpose(a)\n * ```\n *\n * @param x The tensor to transpose.\n * @param perm The permutation of the dimensions of a.\n *\n * @doc {heading: 'Operations', subheading: 'Matrices'}\n */\nfunction transpose_(x, perm) {\n const $x = convertToTensor(x, 'x', 'transpose');\n if (perm == null) {\n perm = $x.shape.map((s, i) => i).reverse();\n }\n util.assert($x.rank === perm.length, () => `Error in transpose: rank of input ${$x.rank} ` +\n `must match length of perm ${perm}.`);\n perm.forEach(axis => {\n util.assert(axis >= 0 && axis < $x.rank, () => `All entries in 'perm' must be between 0 and ${$x.rank - 1}` +\n ` but got ${perm}`);\n });\n if ($x.rank <= 1) {\n return $x.clone();\n }\n const inputs = { x: $x };\n const attrs = { perm };\n return ENGINE.runKernel(Transpose, inputs, attrs);\n}\nexport const transpose = op({ transpose_ });\n//# sourceMappingURL=transpose.js.map","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { convertToTensor } from '../tensor_util_env';\nimport * as util from '../util';\nimport { cast } from './cast';\nimport { matMul } from './mat_mul';\nimport { oneHot } from './one_hot';\nimport { op } from './operation';\nimport { transpose } from './transpose';\n/**\n * Computes the confusion matrix from true labels and predicted labels.\n *\n * ```js\n * const labels = tf.tensor1d([0, 1, 2, 1, 0], 'int32');\n * const predictions = tf.tensor1d([0, 2, 2, 1, 0], 'int32');\n * const numClasses = 3;\n * const out = tf.math.confusionMatrix(labels, predictions, numClasses);\n * out.print();\n * // Expected output matrix:\n * // [[2, 0, 0],\n * // [0, 1, 1],\n * // [0, 0, 1]]\n * ```\n *\n * @param labels The target labels, assumed to be 0-based integers\n * for the classes. The shape is `[numExamples]`, where\n * `numExamples` is the number of examples included.\n * @param predictions The predicted classes, assumed to be\n * 0-based integers for the classes. Must have the same shape as `labels`.\n * @param numClasses Number of all classes, as an integer.\n * Its value must be larger than the largest element in `labels` and\n * `predictions`.\n * @returns The confusion matrix as a int32-type 2D tensor. The value at\n * row `r` and column `c` is the number of times examples of actual class\n * `r` were predicted as class `c`.\n *\n * @doc {heading: 'Operations', subheading: 'Evaluation'}\n */\nexport function confusionMatrix_(labels, predictions, numClasses) {\n const $labels = convertToTensor(labels, 'labels', 'confusionMatrix');\n const $predictions = convertToTensor(predictions, 'predictions', 'confusionMatrix');\n util.assert(numClasses == null || numClasses > 0 && Number.isInteger(numClasses), () => `If provided, numClasses must be a positive integer, ` +\n `but got ${numClasses}`);\n util.assert($labels.rank === 1, () => `Expected the rank of labels to be 1, but got ${$labels.rank}`);\n util.assert($predictions.rank === 1, () => `Expected the rank of predictions to be 1, ` +\n `but got ${$predictions.rank}`);\n util.assert($labels.shape[0] === $predictions.shape[0], () => `Mismatch in the number of examples: ` +\n `${$labels.shape[0]} vs. ${$predictions.shape[0]}. ` +\n `Labels and predictions should have the same number of elements.`);\n util.assert(numClasses > 0 && Number.isInteger(numClasses), () => `numClasses is required to be a positive integer, but got ` +\n `${numClasses}`);\n // TODO(cais): In the future, if oneHot supports tensors inputs for\n // `numClasses`, `confusionMatrix` can make `numClasses` optional.\n const oneHotLabels = oneHot(cast($labels, 'int32'), numClasses);\n const oneHotPredictions = oneHot(cast($predictions, 'int32'), numClasses);\n const oneHotLabelsT = transpose(oneHotLabels);\n const product = matMul(oneHotLabelsT, oneHotPredictions);\n return cast(product, 'int32');\n}\nexport const confusionMatrix = op({ confusionMatrix_ });\n//# sourceMappingURL=confusion_matrix.js.map","/**\n * @license\n * Copyright 2018 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { inferShape } from '../tensor_util_env';\nimport { assertNonNull } from '../util';\nimport { makeTensor } from './tensor_ops_util';\n/**\n * Creates rank-3 `tf.Tensor` with the provided values, shape and dtype.\n *\n * The same functionality can be achieved with `tf.tensor`, but in general\n * we recommend using `tf.tensor3d` as it makes the code more readable.\n *\n * ```js\n * // Pass a nested array.\n * tf.tensor3d([[[1], [2]], [[3], [4]]]).print();\n * ```\n * ```js\n * // Pass a flat array and specify a shape.\n * tf.tensor3d([1, 2, 3, 4], [2, 2, 1]).print();\n * ```\n *\n * @param values The values of the tensor. Can be nested array of numbers,\n * or a flat array, or a `TypedArray`.\n * @param shape The shape of the tensor. If not provided, it is inferred from\n * `values`.\n * @param dtype The data type.\n *\n * @doc {heading: 'Tensors', subheading: 'Creation'}\n */\nexport function tensor3d(values, shape, dtype) {\n assertNonNull(values);\n if (shape != null && shape.length !== 3) {\n throw new Error('tensor3d() requires shape to have three numbers');\n }\n const inferredShape = inferShape(values, dtype);\n if (inferredShape.length !== 3 && inferredShape.length !== 1) {\n throw new Error('tensor3d() requires values to be number[][][] or flat/TypedArray');\n }\n if (inferredShape.length === 1 && shape == null) {\n throw new Error('tensor3d() requires shape to be provided when `values` ' +\n 'are a flat array');\n }\n return makeTensor(values, shape, inferredShape, dtype);\n}\n//# sourceMappingURL=tensor3d.js.map","/**\n * @license\n * Copyright 2019 Google LLC. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * =============================================================================\n */\nimport { ENGINE } from '../engine';\nimport { env } from '../environment';\nimport { FromPixels } from '../kernel_names';\nimport { getKernel } from '../kernel_registry';\nimport { Tensor } from '../tensor';\nimport { convertToTensor } from '../tensor_util_env';\nimport { cast } from './cast';\nimport { op } from './operation';\nimport { tensor3d } from './tensor3d';\nlet fromPixels2DContext;\n/**\n * Creates a `tf.Tensor` from an image.\n *\n * ```js\n * const image = new ImageData(1, 1);\n * image.data[0] = 100;\n * image.data[1] = 150;\n * image.data[2] = 200;\n * image.data[3] = 255;\n *\n * tf.browser.fromPixels(image).print();\n * ```\n *\n * @param pixels The input image to construct the tensor from. The\n * supported image types are all 4-channel. You can also pass in an image\n * object with following attributes:\n * `{data: Uint8Array; width: number; height: number}`\n * @param numChannels The number of channels of the output tensor. A\n * numChannels value less than 4 allows you to ignore channels. Defaults to\n * 3 (ignores alpha channel of input image).\n *\n * @returns A Tensor3D with the shape `[height, width, numChannels]`.\n *\n * @doc {heading: 'Browser', namespace: 'browser', ignoreCI: true}\n */\nfunction fromPixels_(pixels, numChannels = 3) {\n // Sanity checks.\n if (numChannels > 4) {\n throw new Error('Cannot construct Tensor with more than 4 channels from pixels.');\n }\n if (pixels == null) {\n throw new Error('pixels passed to tf.browser.fromPixels() can not be null');\n }\n let isPixelData = false;\n let isImageData = false;\n let isVideo = false;\n let isImage = false;\n let isCanvasLike = false;\n let isImageBitmap = false;\n if (pixels.data instanceof Uint8Array) {\n isPixelData = true;\n }\n else if (typeof (ImageData) !== 'undefined' && pixels instanceof ImageData) {\n isImageData = true;\n }\n else if (typeof (HTMLVideoElement) !== 'undefined' &&\n pixels instanceof HTMLVideoElement) {\n isVideo = true;\n }\n else if (typeof (HTMLImageElement) !== 'undefined' &&\n pixels instanceof HTMLImageElement) {\n isImage = true;\n // tslint:disable-next-line: no-any\n }\n else if (pixels.getContext != null) {\n isCanvasLike = true;\n }\n else if (typeof (ImageBitmap) !== 'undefined' && pixels instanceof ImageBitmap) {\n isImageBitmap = true;\n }\n else {\n throw new Error('pixels passed to tf.browser.fromPixels() must be either an ' +\n `HTMLVideoElement, HTMLImageElement, HTMLCanvasElement, ImageData ` +\n `in browser, or OffscreenCanvas, ImageData in webworker` +\n ` or {data: Uint32Array, width: number, height: number}, ` +\n `but was ${pixels.constructor.name}`);\n }\n if (isVideo) {\n const HAVE_CURRENT_DATA_READY_STATE = 2;\n if (isVideo &&\n pixels.readyState <\n HAVE_CURRENT_DATA_READY_STATE) {\n throw new Error('The video element has not loaded data yet. Please wait for ' +\n '`loadeddata` event on the ': break;\n\t\t\tcase '': pass = false; break;\n\t\t\tdefault:\n\t\t\t\tif(y[0].charCodeAt(1) !== 47 && !pass) throw new Error('Unrecognized rich format ' + y[0]);\n\t\t}\n\t}\n\treturn font;\n}\n\nvar parse_rs = (function() {\n\tvar tregex = matchtag(\"t\"), rpregex = matchtag(\"rPr\");\n\t/* 18.4.4 r CT_RElt */\n\tfunction parse_r(r) {\n\t\t/* 18.4.12 t ST_Xstring */\n\t\tvar t = r.match(tregex)/*, cp = 65001*/;\n\t\tif(!t) return {t:\"s\", v:\"\"};\n\n\t\tvar o = ({t:'s', v:unescapexml(t[1])});\n\t\tvar rpr = r.match(rpregex);\n\t\tif(rpr) o.s = parse_rpr(rpr[1]);\n\t\treturn o;\n\t}\n\tvar rregex = /<(?:\\w+:)?r>/g, rend = /<\\/(?:\\w+:)?r>/;\n\treturn function parse_rs(rs) {\n\t\treturn rs.replace(rregex,\"\").split(rend).map(parse_r).filter(function(r) { return r.v; });\n\t};\n})();\n\n\n/* Parse a list of tags */\nvar rs_to_html = (function parse_rs_factory() {\n\tvar nlregex = /(\\r\\n|\\n)/g;\n\tfunction parse_rpr2(font, intro, outro) {\n\t\tvar style = [];\n\n\t\tif(font.u) style.push(\"text-decoration: underline;\");\n\t\tif(font.uval) style.push(\"text-underline-style:\" + font.uval + \";\");\n\t\tif(font.sz) style.push(\"font-size:\" + font.sz + \"pt;\");\n\t\tif(font.outline) style.push(\"text-effect: outline;\");\n\t\tif(font.shadow) style.push(\"text-shadow: auto;\");\n\t\tintro.push('');\n\n\t\tif(font.b) { intro.push(\"\"); outro.push(\"\"); }\n\t\tif(font.i) { intro.push(\"\"); outro.push(\"\"); }\n\t\tif(font.strike) { intro.push(\"\"); outro.push(\"\"); }\n\n\t\tvar align = font.valign || \"\";\n\t\tif(align == \"superscript\" || align == \"super\") align = \"sup\";\n\t\telse if(align == \"subscript\") align = \"sub\";\n\t\tif(align != \"\") { intro.push(\"<\" + align + \">\"); outro.push(\"\"); }\n\n\t\toutro.push(\"\");\n\t\treturn font;\n\t}\n\n\t/* 18.4.4 r CT_RElt */\n\tfunction r_to_html(r) {\n\t\tvar terms = [[],r.v,[]];\n\t\tif(!r.v) return \"\";\n\n\t\tif(r.s) parse_rpr2(r.s, terms[0], terms[2]);\n\n\t\treturn terms[0].join(\"\") + terms[1].replace(nlregex,'
') + terms[2].join(\"\");\n\t}\n\n\treturn function parse_rs(rs) {\n\t\treturn rs.map(r_to_html).join(\"\");\n\t};\n})();\n\n/* 18.4.8 si CT_Rst */\nvar sitregex = /<(?:\\w+:)?t[^>]*>([^<]*)<\\/(?:\\w+:)?t>/g, sirregex = /<(?:\\w+:)?r>/;\nvar sirphregex = /<(?:\\w+:)?rPh.*?>([\\s\\S]*?)<\\/(?:\\w+:)?rPh>/g;\nfunction parse_si(x, opts) {\n\tvar html = opts ? opts.cellHTML : true;\n\tvar z = {};\n\tif(!x) return { t: \"\" };\n\t//var y;\n\t/* 18.4.12 t ST_Xstring (Plaintext String) */\n\t// TODO: is whitespace actually valid here?\n\tif(x.match(/^\\s*<(?:\\w+:)?t[^>]*>/)) {\n\t\tz.t = unescapexml(utf8read(x.slice(x.indexOf(\">\")+1).split(/<\\/(?:\\w+:)?t>/)[0]||\"\"));\n\t\tz.r = utf8read(x);\n\t\tif(html) z.h = escapehtml(z.t);\n\t}\n\t/* 18.4.4 r CT_RElt (Rich Text Run) */\n\telse if((/*y = */x.match(sirregex))) {\n\t\tz.r = utf8read(x);\n\t\tz.t = unescapexml(utf8read((x.replace(sirphregex, '').match(sitregex)||[]).join(\"\").replace(tagregex,\"\")));\n\t\tif(html) z.h = rs_to_html(parse_rs(z.r));\n\t}\n\t/* 18.4.3 phoneticPr CT_PhoneticPr (TODO: needed for Asian support) */\n\t/* 18.4.6 rPh CT_PhoneticRun (TODO: needed for Asian support) */\n\treturn z;\n}\n\n/* 18.4 Shared String Table */\nvar sstr0 = /<(?:\\w+:)?sst([^>]*)>([\\s\\S]*)<\\/(?:\\w+:)?sst>/;\nvar sstr1 = /<(?:\\w+:)?(?:si|sstItem)>/g;\nvar sstr2 = /<\\/(?:\\w+:)?(?:si|sstItem)>/;\nfunction parse_sst_xml(data, opts) {\n\tvar s = ([]), ss = \"\";\n\tif(!data) return s;\n\t/* 18.4.9 sst CT_Sst */\n\tvar sst = data.match(sstr0);\n\tif(sst) {\n\t\tss = sst[2].replace(sstr1,\"\").split(sstr2);\n\t\tfor(var i = 0; i != ss.length; ++i) {\n\t\t\tvar o = parse_si(ss[i].trim(), opts);\n\t\t\tif(o != null) s[s.length] = o;\n\t\t}\n\t\tsst = parsexmltag(sst[1]); s.Count = sst.count; s.Unique = sst.uniqueCount;\n\t}\n\treturn s;\n}\n\nRELS.SST = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings\";\nvar straywsregex = /^\\s|\\s$|[\\t\\n\\r]/;\nfunction write_sst_xml(sst, opts) {\n\tif(!opts.bookSST) return \"\";\n\tvar o = [XML_HEADER];\n\to[o.length] = (writextag('sst', null, {\n\t\txmlns: XMLNS.main[0],\n\t\tcount: sst.Count,\n\t\tuniqueCount: sst.Unique\n\t}));\n\tfor(var i = 0; i != sst.length; ++i) { if(sst[i] == null) continue;\n\t\tvar s = sst[i];\n\t\tvar sitag = \"\";\n\t\tif(s.r) sitag += s.r;\n\t\telse {\n\t\t\tsitag += \"\" + escapexml(s.t) + \"\";\n\t\t}\n\t\tsitag += \"\";\n\t\to[o.length] = (sitag);\n\t}\n\tif(o.length>2){ o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* [MS-XLSB] 2.4.221 BrtBeginSst */\nfunction parse_BrtBeginSst(data) {\n\treturn [data.read_shift(4), data.read_shift(4)];\n}\n\n/* [MS-XLSB] 2.1.7.45 Shared Strings */\nfunction parse_sst_bin(data, opts) {\n\tvar s = ([]);\n\tvar pass = false;\n\trecordhopper(data, function hopper_sst(val, R_n, RT) {\n\t\tswitch(RT) {\n\t\t\tcase 0x009F: /* 'BrtBeginSst' */\n\t\t\t\ts.Count = val[0]; s.Unique = val[1]; break;\n\t\t\tcase 0x0013: /* 'BrtSSTItem' */\n\t\t\t\ts.push(val); break;\n\t\t\tcase 0x00A0: /* 'BrtEndSst' */\n\t\t\t\treturn true;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tpass = false; break;\n\n\t\t\tdefault:\n\t\t\t\tif(R_n.indexOf(\"Begin\") > 0){/* empty */}\n\t\t\t\telse if(R_n.indexOf(\"End\") > 0){/* empty */}\n\t\t\t\tif(!pass || opts.WTF) throw new Error(\"Unexpected record \" + RT + \" \" + R_n);\n\t\t}\n\t});\n\treturn s;\n}\n\nfunction write_BrtBeginSst(sst, o) {\n\tif(!o) o = new_buf(8);\n\to.write_shift(4, sst.Count);\n\to.write_shift(4, sst.Unique);\n\treturn o;\n}\n\nvar write_BrtSSTItem = write_RichStr;\n\nfunction write_sst_bin(sst) {\n\tvar ba = buf_array();\n\twrite_record(ba, \"BrtBeginSst\", write_BrtBeginSst(sst));\n\tfor(var i = 0; i < sst.length; ++i) write_record(ba, \"BrtSSTItem\", write_BrtSSTItem(sst[i]));\n\t/* FRTSST */\n\twrite_record(ba, \"BrtEndSst\");\n\treturn ba.end();\n}\nfunction _JS2ANSI(str) {\n\tif(typeof cptable !== 'undefined') return cptable.utils.encode(current_ansi, str);\n\tvar o = [], oo = str.split(\"\");\n\tfor(var i = 0; i < oo.length; ++i) o[i] = oo[i].charCodeAt(0);\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.4 Version */\nfunction parse_CRYPTOVersion(blob, length) {\n\tvar o = {};\n\to.Major = blob.read_shift(2);\n\to.Minor = blob.read_shift(2);\nif(length >= 4) blob.l += length - 4;\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.5 DataSpaceVersionInfo */\nfunction parse_DataSpaceVersionInfo(blob) {\n\tvar o = {};\n\to.id = blob.read_shift(0, 'lpp4');\n\to.R = parse_CRYPTOVersion(blob, 4);\n\to.U = parse_CRYPTOVersion(blob, 4);\n\to.W = parse_CRYPTOVersion(blob, 4);\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.6.1 DataSpaceMapEntry Structure */\nfunction parse_DataSpaceMapEntry(blob) {\n\tvar len = blob.read_shift(4);\n\tvar end = blob.l + len - 4;\n\tvar o = {};\n\tvar cnt = blob.read_shift(4);\n\tvar comps = [];\n\t/* [MS-OFFCRYPTO] 2.1.6.2 DataSpaceReferenceComponent Structure */\n\twhile(cnt-- > 0) comps.push({ t: blob.read_shift(4), v: blob.read_shift(0, 'lpp4') });\n\to.name = blob.read_shift(0, 'lpp4');\n\to.comps = comps;\n\tif(blob.l != end) throw new Error(\"Bad DataSpaceMapEntry: \" + blob.l + \" != \" + end);\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.6 DataSpaceMap */\nfunction parse_DataSpaceMap(blob) {\n\tvar o = [];\n\tblob.l += 4; // must be 0x8\n\tvar cnt = blob.read_shift(4);\n\twhile(cnt-- > 0) o.push(parse_DataSpaceMapEntry(blob));\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.7 DataSpaceDefinition */\nfunction parse_DataSpaceDefinition(blob) {\n\tvar o = [];\n\tblob.l += 4; // must be 0x8\n\tvar cnt = blob.read_shift(4);\n\twhile(cnt-- > 0) o.push(blob.read_shift(0, 'lpp4'));\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.8 DataSpaceDefinition */\nfunction parse_TransformInfoHeader(blob) {\n\tvar o = {};\n\t/*var len = */blob.read_shift(4);\n\tblob.l += 4; // must be 0x1\n\to.id = blob.read_shift(0, 'lpp4');\n\to.name = blob.read_shift(0, 'lpp4');\n\to.R = parse_CRYPTOVersion(blob, 4);\n\to.U = parse_CRYPTOVersion(blob, 4);\n\to.W = parse_CRYPTOVersion(blob, 4);\n\treturn o;\n}\n\nfunction parse_Primary(blob) {\n\t/* [MS-OFFCRYPTO] 2.2.6 IRMDSTransformInfo */\n\tvar hdr = parse_TransformInfoHeader(blob);\n\t/* [MS-OFFCRYPTO] 2.1.9 EncryptionTransformInfo */\n\thdr.ename = blob.read_shift(0, '8lpp4');\n\thdr.blksz = blob.read_shift(4);\n\thdr.cmode = blob.read_shift(4);\n\tif(blob.read_shift(4) != 0x04) throw new Error(\"Bad !Primary record\");\n\treturn hdr;\n}\n\n/* [MS-OFFCRYPTO] 2.3.2 Encryption Header */\nfunction parse_EncryptionHeader(blob, length) {\n\tvar tgt = blob.l + length;\n\tvar o = {};\n\to.Flags = (blob.read_shift(4) & 0x3F);\n\tblob.l += 4;\n\to.AlgID = blob.read_shift(4);\n\tvar valid = false;\n\tswitch(o.AlgID) {\n\t\tcase 0x660E: case 0x660F: case 0x6610: valid = (o.Flags == 0x24); break;\n\t\tcase 0x6801: valid = (o.Flags == 0x04); break;\n\t\tcase 0: valid = (o.Flags == 0x10 || o.Flags == 0x04 || o.Flags == 0x24); break;\n\t\tdefault: throw 'Unrecognized encryption algorithm: ' + o.AlgID;\n\t}\n\tif(!valid) throw new Error(\"Encryption Flags/AlgID mismatch\");\n\to.AlgIDHash = blob.read_shift(4);\n\to.KeySize = blob.read_shift(4);\n\to.ProviderType = blob.read_shift(4);\n\tblob.l += 8;\n\to.CSPName = blob.read_shift((tgt-blob.l)>>1, 'utf16le');\n\tblob.l = tgt;\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.3.3 Encryption Verifier */\nfunction parse_EncryptionVerifier(blob, length) {\n\tvar o = {}, tgt = blob.l + length;\n\tblob.l += 4; // SaltSize must be 0x10\n\to.Salt = blob.slice(blob.l, blob.l+16); blob.l += 16;\n\to.Verifier = blob.slice(blob.l, blob.l+16); blob.l += 16;\n\t/*var sz = */blob.read_shift(4);\n\to.VerifierHash = blob.slice(blob.l, tgt); blob.l = tgt;\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.3.4.* EncryptionInfo Stream */\nfunction parse_EncryptionInfo(blob) {\n\tvar vers = parse_CRYPTOVersion(blob);\n\tswitch(vers.Minor) {\n\t\tcase 0x02: return [vers.Minor, parse_EncInfoStd(blob, vers)];\n\t\tcase 0x03: return [vers.Minor, parse_EncInfoExt(blob, vers)];\n\t\tcase 0x04: return [vers.Minor, parse_EncInfoAgl(blob, vers)];\n\t}\n\tthrow new Error(\"ECMA-376 Encrypted file unrecognized Version: \" + vers.Minor);\n}\n\n/* [MS-OFFCRYPTO] 2.3.4.5 EncryptionInfo Stream (Standard Encryption) */\nfunction parse_EncInfoStd(blob) {\n\tvar flags = blob.read_shift(4);\n\tif((flags & 0x3F) != 0x24) throw new Error(\"EncryptionInfo mismatch\");\n\tvar sz = blob.read_shift(4);\n\t//var tgt = blob.l + sz;\n\tvar hdr = parse_EncryptionHeader(blob, sz);\n\tvar verifier = parse_EncryptionVerifier(blob, blob.length - blob.l);\n\treturn { t:\"Std\", h:hdr, v:verifier };\n}\n/* [MS-OFFCRYPTO] 2.3.4.6 EncryptionInfo Stream (Extensible Encryption) */\nfunction parse_EncInfoExt() { throw new Error(\"File is password-protected: ECMA-376 Extensible\"); }\n/* [MS-OFFCRYPTO] 2.3.4.10 EncryptionInfo Stream (Agile Encryption) */\nfunction parse_EncInfoAgl(blob) {\n\tvar KeyData = [\"saltSize\",\"blockSize\",\"keyBits\",\"hashSize\",\"cipherAlgorithm\",\"cipherChaining\",\"hashAlgorithm\",\"saltValue\"];\n\tblob.l+=4;\n\tvar xml = blob.read_shift(blob.length - blob.l, 'utf8');\n\tvar o = {};\n\txml.replace(tagregex, function xml_agile(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': break;\n\t\t\tcase '': case '': break;\n\n\t\t\tcase '': break;\n\t\t\tcase ' 4 || vers.Major < 2) throw new Error('unrecognized major version code: ' + vers.Major);\n\to.Flags = blob.read_shift(4); length -= 4;\n\tvar sz = blob.read_shift(4); length -= 4;\n\to.EncryptionHeader = parse_EncryptionHeader(blob, sz); length -= sz;\n\to.EncryptionVerifier = parse_EncryptionVerifier(blob, length);\n\treturn o;\n}\n/* [MS-OFFCRYPTO] 2.3.6.1 RC4 Encryption Header */\nfunction parse_RC4Header(blob) {\n\tvar o = {};\n\tvar vers = o.EncryptionVersionInfo = parse_CRYPTOVersion(blob, 4);\n\tif(vers.Major != 1 || vers.Minor != 1) throw 'unrecognized version code ' + vers.Major + ' : ' + vers.Minor;\n\to.Salt = blob.read_shift(16);\n\to.EncryptedVerifier = blob.read_shift(16);\n\to.EncryptedVerifierHash = blob.read_shift(16);\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.3.7.1 Binary Document Password Verifier Derivation */\nfunction crypto_CreatePasswordVerifier_Method1(Password) {\n\tvar Verifier = 0x0000, PasswordArray;\n\tvar PasswordDecoded = _JS2ANSI(Password);\n\tvar len = PasswordDecoded.length + 1, i, PasswordByte;\n\tvar Intermediate1, Intermediate2, Intermediate3;\n\tPasswordArray = new_raw_buf(len);\n\tPasswordArray[0] = PasswordDecoded.length;\n\tfor(i = 1; i != len; ++i) PasswordArray[i] = PasswordDecoded[i-1];\n\tfor(i = len-1; i >= 0; --i) {\n\t\tPasswordByte = PasswordArray[i];\n\t\tIntermediate1 = ((Verifier & 0x4000) === 0x0000) ? 0 : 1;\n\t\tIntermediate2 = (Verifier << 1) & 0x7FFF;\n\t\tIntermediate3 = Intermediate1 | Intermediate2;\n\t\tVerifier = Intermediate3 ^ PasswordByte;\n\t}\n\treturn Verifier ^ 0xCE4B;\n}\n\n/* [MS-OFFCRYPTO] 2.3.7.2 Binary Document XOR Array Initialization */\nvar crypto_CreateXorArray_Method1 = (function() {\n\tvar PadArray = [0xBB, 0xFF, 0xFF, 0xBA, 0xFF, 0xFF, 0xB9, 0x80, 0x00, 0xBE, 0x0F, 0x00, 0xBF, 0x0F, 0x00];\n\tvar InitialCode = [0xE1F0, 0x1D0F, 0xCC9C, 0x84C0, 0x110C, 0x0E10, 0xF1CE, 0x313E, 0x1872, 0xE139, 0xD40F, 0x84F9, 0x280C, 0xA96A, 0x4EC3];\n\tvar XorMatrix = [0xAEFC, 0x4DD9, 0x9BB2, 0x2745, 0x4E8A, 0x9D14, 0x2A09, 0x7B61, 0xF6C2, 0xFDA5, 0xEB6B, 0xC6F7, 0x9DCF, 0x2BBF, 0x4563, 0x8AC6, 0x05AD, 0x0B5A, 0x16B4, 0x2D68, 0x5AD0, 0x0375, 0x06EA, 0x0DD4, 0x1BA8, 0x3750, 0x6EA0, 0xDD40, 0xD849, 0xA0B3, 0x5147, 0xA28E, 0x553D, 0xAA7A, 0x44D5, 0x6F45, 0xDE8A, 0xAD35, 0x4A4B, 0x9496, 0x390D, 0x721A, 0xEB23, 0xC667, 0x9CEF, 0x29FF, 0x53FE, 0xA7FC, 0x5FD9, 0x47D3, 0x8FA6, 0x0F6D, 0x1EDA, 0x3DB4, 0x7B68, 0xF6D0, 0xB861, 0x60E3, 0xC1C6, 0x93AD, 0x377B, 0x6EF6, 0xDDEC, 0x45A0, 0x8B40, 0x06A1, 0x0D42, 0x1A84, 0x3508, 0x6A10, 0xAA51, 0x4483, 0x8906, 0x022D, 0x045A, 0x08B4, 0x1168, 0x76B4, 0xED68, 0xCAF1, 0x85C3, 0x1BA7, 0x374E, 0x6E9C, 0x3730, 0x6E60, 0xDCC0, 0xA9A1, 0x4363, 0x86C6, 0x1DAD, 0x3331, 0x6662, 0xCCC4, 0x89A9, 0x0373, 0x06E6, 0x0DCC, 0x1021, 0x2042, 0x4084, 0x8108, 0x1231, 0x2462, 0x48C4];\n\tvar Ror = function(Byte) { return ((Byte/2) | (Byte*128)) & 0xFF; };\n\tvar XorRor = function(byte1, byte2) { return Ror(byte1 ^ byte2); };\n\tvar CreateXorKey_Method1 = function(Password) {\n\t\tvar XorKey = InitialCode[Password.length - 1];\n\t\tvar CurrentElement = 0x68;\n\t\tfor(var i = Password.length-1; i >= 0; --i) {\n\t\t\tvar Char = Password[i];\n\t\t\tfor(var j = 0; j != 7; ++j) {\n\t\t\t\tif(Char & 0x40) XorKey ^= XorMatrix[CurrentElement];\n\t\t\t\tChar *= 2; --CurrentElement;\n\t\t\t}\n\t\t}\n\t\treturn XorKey;\n\t};\n\treturn function(password) {\n\t\tvar Password = _JS2ANSI(password);\n\t\tvar XorKey = CreateXorKey_Method1(Password);\n\t\tvar Index = Password.length;\n\t\tvar ObfuscationArray = new_raw_buf(16);\n\t\tfor(var i = 0; i != 16; ++i) ObfuscationArray[i] = 0x00;\n\t\tvar Temp, PasswordLastChar, PadIndex;\n\t\tif((Index & 1) === 1) {\n\t\t\tTemp = XorKey >> 8;\n\t\t\tObfuscationArray[Index] = XorRor(PadArray[0], Temp);\n\t\t\t--Index;\n\t\t\tTemp = XorKey & 0xFF;\n\t\t\tPasswordLastChar = Password[Password.length - 1];\n\t\t\tObfuscationArray[Index] = XorRor(PasswordLastChar, Temp);\n\t\t}\n\t\twhile(Index > 0) {\n\t\t\t--Index;\n\t\t\tTemp = XorKey >> 8;\n\t\t\tObfuscationArray[Index] = XorRor(Password[Index], Temp);\n\t\t\t--Index;\n\t\t\tTemp = XorKey & 0xFF;\n\t\t\tObfuscationArray[Index] = XorRor(Password[Index], Temp);\n\t\t}\n\t\tIndex = 15;\n\t\tPadIndex = 15 - Password.length;\n\t\twhile(PadIndex > 0) {\n\t\t\tTemp = XorKey >> 8;\n\t\t\tObfuscationArray[Index] = XorRor(PadArray[PadIndex], Temp);\n\t\t\t--Index;\n\t\t\t--PadIndex;\n\t\t\tTemp = XorKey & 0xFF;\n\t\t\tObfuscationArray[Index] = XorRor(Password[Index], Temp);\n\t\t\t--Index;\n\t\t\t--PadIndex;\n\t\t}\n\t\treturn ObfuscationArray;\n\t};\n})();\n\n/* [MS-OFFCRYPTO] 2.3.7.3 Binary Document XOR Data Transformation Method 1 */\nvar crypto_DecryptData_Method1 = function(password, Data, XorArrayIndex, XorArray, O) {\n\t/* If XorArray is set, use it; if O is not set, make changes in-place */\n\tif(!O) O = Data;\n\tif(!XorArray) XorArray = crypto_CreateXorArray_Method1(password);\n\tvar Index, Value;\n\tfor(Index = 0; Index != Data.length; ++Index) {\n\t\tValue = Data[Index];\n\t\tValue ^= XorArray[XorArrayIndex];\n\t\tValue = ((Value>>5) | (Value<<3)) & 0xFF;\n\t\tO[Index] = Value;\n\t\t++XorArrayIndex;\n\t}\n\treturn [O, XorArrayIndex, XorArray];\n};\n\nvar crypto_MakeXorDecryptor = function(password) {\n\tvar XorArrayIndex = 0, XorArray = crypto_CreateXorArray_Method1(password);\n\treturn function(Data) {\n\t\tvar O = crypto_DecryptData_Method1(\"\", Data, XorArrayIndex, XorArray);\n\t\tXorArrayIndex = O[1];\n\t\treturn O[0];\n\t};\n};\n\n/* 2.5.343 */\nfunction parse_XORObfuscation(blob, length, opts, out) {\n\tvar o = ({ key: parseuint16(blob), verificationBytes: parseuint16(blob) });\n\tif(opts.password) o.verifier = crypto_CreatePasswordVerifier_Method1(opts.password);\n\tout.valid = o.verificationBytes === o.verifier;\n\tif(out.valid) out.insitu = crypto_MakeXorDecryptor(opts.password);\n\treturn o;\n}\n\n/* 2.4.117 */\nfunction parse_FilePassHeader(blob, length, oo) {\n\tvar o = oo || {}; o.Info = blob.read_shift(2); blob.l -= 2;\n\tif(o.Info === 1) o.Data = parse_RC4Header(blob, length);\n\telse o.Data = parse_RC4CryptoHeader(blob, length);\n\treturn o;\n}\nfunction parse_FilePass(blob, length, opts) {\n\tvar o = ({ Type: opts.biff >= 8 ? blob.read_shift(2) : 0 }); /* wEncryptionType */\n\tif(o.Type) parse_FilePassHeader(blob, length-2, o);\n\telse parse_XORObfuscation(blob, opts.biff >= 8 ? length : length - 2, opts, o);\n\treturn o;\n}\n\n\nvar RTF = (function() {\n\tfunction rtf_to_sheet(d, opts) {\n\t\tswitch(opts.type) {\n\t\t\tcase 'base64': return rtf_to_sheet_str(Base64.decode(d), opts);\n\t\t\tcase 'binary': return rtf_to_sheet_str(d, opts);\n\t\t\tcase 'buffer': return rtf_to_sheet_str(d.toString('binary'), opts);\n\t\t\tcase 'array': return rtf_to_sheet_str(cc2str(d), opts);\n\t\t}\n\t\tthrow new Error(\"Unrecognized type \" + opts.type);\n\t}\n\n\tfunction rtf_to_sheet_str(str, opts) {\n\t\tvar o = opts || {};\n\t\tvar ws = o.dense ? ([]) : ({});\n\t\tvar range = ({s: {c:0, r:0}, e: {c:0, r:0}});\n\n\t\t// TODO: parse\n\t\tif(!str.match(/\\\\trowd/)) throw new Error(\"RTF missing table\");\n\n\t\tws['!ref'] = encode_range(range);\n\t\treturn ws;\n\t}\n\n\tfunction rtf_to_workbook(d, opts) { return sheet_to_workbook(rtf_to_sheet(d, opts), opts); }\n\n\t/* TODO: this is a stub */\n\tfunction sheet_to_rtf(ws) {\n\t\tvar o = [\"{\\\\rtf1\\\\ansi\"];\n\t\tvar r = safe_decode_range(ws['!ref']), cell;\n\t\tvar dense = Array.isArray(ws);\n\t\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\t\to.push(\"\\\\trowd\\\\trautofit1\");\n\t\t\tfor(var C = r.s.c; C <= r.e.c; ++C) o.push(\"\\\\cellx\" + (C+1));\n\t\t\to.push(\"\\\\pard\\\\intbl\");\n\t\t\tfor(C = r.s.c; C <= r.e.c; ++C) {\n\t\t\t\tvar coord = encode_cell({r:R,c:C});\n\t\t\t\tcell = dense ? (ws[R]||[])[C]: ws[coord];\n\t\t\t\tif(!cell || cell.v == null && (!cell.f || cell.F)) continue;\n\t\t\t\to.push(\" \" + (cell.w || (format_cell(cell), cell.w)));\n\t\t\t\to.push(\"\\\\cell\");\n\t\t\t}\n\t\t\to.push(\"\\\\pard\\\\intbl\\\\row\");\n\t\t}\n\t\treturn o.join(\"\") + \"}\";\n\t}\n\n\treturn {\n\t\tto_workbook: rtf_to_workbook,\n\t\tto_sheet: rtf_to_sheet,\n\t\tfrom_sheet: sheet_to_rtf\n\t};\n})();\nfunction hex2RGB(h) {\n\tvar o = h.slice(h[0]===\"#\"?1:0).slice(0,6);\n\treturn [parseInt(o.slice(0,2),16),parseInt(o.slice(2,4),16),parseInt(o.slice(4,6),16)];\n}\nfunction rgb2Hex(rgb) {\n\tfor(var i=0,o=1; i!=3; ++i) o = o*256 + (rgb[i]>255?255:rgb[i]<0?0:rgb[i]);\n\treturn o.toString(16).toUpperCase().slice(1);\n}\n\nfunction rgb2HSL(rgb) {\n\tvar R = rgb[0]/255, G = rgb[1]/255, B=rgb[2]/255;\n\tvar M = Math.max(R, G, B), m = Math.min(R, G, B), C = M - m;\n\tif(C === 0) return [0, 0, R];\n\n\tvar H6 = 0, S = 0, L2 = (M + m);\n\tS = C / (L2 > 1 ? 2 - L2 : L2);\n\tswitch(M){\n\t\tcase R: H6 = ((G - B) / C + 6)%6; break;\n\t\tcase G: H6 = ((B - R) / C + 2); break;\n\t\tcase B: H6 = ((R - G) / C + 4); break;\n\t}\n\treturn [H6 / 6, S, L2 / 2];\n}\n\nfunction hsl2RGB(hsl){\n\tvar H = hsl[0], S = hsl[1], L = hsl[2];\n\tvar C = S * 2 * (L < 0.5 ? L : 1 - L), m = L - C/2;\n\tvar rgb = [m,m,m], h6 = 6*H;\n\n\tvar X;\n\tif(S !== 0) switch(h6|0) {\n\t\tcase 0: case 6: X = C * h6; rgb[0] += C; rgb[1] += X; break;\n\t\tcase 1: X = C * (2 - h6); rgb[0] += X; rgb[1] += C; break;\n\t\tcase 2: X = C * (h6 - 2); rgb[1] += C; rgb[2] += X; break;\n\t\tcase 3: X = C * (4 - h6); rgb[1] += X; rgb[2] += C; break;\n\t\tcase 4: X = C * (h6 - 4); rgb[2] += C; rgb[0] += X; break;\n\t\tcase 5: X = C * (6 - h6); rgb[2] += X; rgb[0] += C; break;\n\t}\n\tfor(var i = 0; i != 3; ++i) rgb[i] = Math.round(rgb[i]*255);\n\treturn rgb;\n}\n\n/* 18.8.3 bgColor tint algorithm */\nfunction rgb_tint(hex, tint) {\n\tif(tint === 0) return hex;\n\tvar hsl = rgb2HSL(hex2RGB(hex));\n\tif (tint < 0) hsl[2] = hsl[2] * (1 + tint);\n\telse hsl[2] = 1 - (1 - hsl[2]) * (1 - tint);\n\treturn rgb2Hex(hsl2RGB(hsl));\n}\n\n/* 18.3.1.13 width calculations */\n/* [MS-OI29500] 2.1.595 Column Width & Formatting */\nvar DEF_MDW = 6, MAX_MDW = 15, MIN_MDW = 1, MDW = DEF_MDW;\nfunction width2px(width) { return Math.floor(( width + (Math.round(128/MDW))/256 )* MDW ); }\nfunction px2char(px) { return (Math.floor((px - 5)/MDW * 100 + 0.5))/100; }\nfunction char2width(chr) { return (Math.round((chr * MDW + 5)/MDW*256))/256; }\n//function px2char_(px) { return (((px - 5)/MDW * 100 + 0.5))/100; }\n//function char2width_(chr) { return (((chr * MDW + 5)/MDW*256))/256; }\nfunction cycle_width(collw) { return char2width(px2char(width2px(collw))); }\n/* XLSX/XLSB/XLS specify width in units of MDW */\nfunction find_mdw_colw(collw) {\n\tvar delta = Math.abs(collw - cycle_width(collw)), _MDW = MDW;\n\tif(delta > 0.005) for(MDW=MIN_MDW; MDW 0.5) guess--;\n\t\tif(Math.abs(guess) < delta) { delta = Math.abs(guess); _MDW = MDW; }\n\t}\n\tMDW = _MDW;\n}*/\n\nfunction process_col(coll) {\n\tif(coll.width) {\n\t\tcoll.wpx = width2px(coll.width);\n\t\tcoll.wch = px2char(coll.wpx);\n\t\tcoll.MDW = MDW;\n\t} else if(coll.wpx) {\n\t\tcoll.wch = px2char(coll.wpx);\n\t\tcoll.width = char2width(coll.wch);\n\t\tcoll.MDW = MDW;\n\t} else if(typeof coll.wch == 'number') {\n\t\tcoll.width = char2width(coll.wch);\n\t\tcoll.wpx = width2px(coll.width);\n\t\tcoll.MDW = MDW;\n\t}\n\tif(coll.customWidth) delete coll.customWidth;\n}\n\nvar DEF_PPI = 96, PPI = DEF_PPI;\nfunction px2pt(px) { return px * 96 / PPI; }\nfunction pt2px(pt) { return pt * PPI / 96; }\n\n/* [MS-EXSPXML3] 2.4.54 ST_enmPattern */\nvar XLMLPatternTypeMap = {\n\t\"None\": \"none\",\n\t\"Solid\": \"solid\",\n\t\"Gray50\": \"mediumGray\",\n\t\"Gray75\": \"darkGray\",\n\t\"Gray25\": \"lightGray\",\n\t\"HorzStripe\": \"darkHorizontal\",\n\t\"VertStripe\": \"darkVertical\",\n\t\"ReverseDiagStripe\": \"darkDown\",\n\t\"DiagStripe\": \"darkUp\",\n\t\"DiagCross\": \"darkGrid\",\n\t\"ThickDiagCross\": \"darkTrellis\",\n\t\"ThinHorzStripe\": \"lightHorizontal\",\n\t\"ThinVertStripe\": \"lightVertical\",\n\t\"ThinReverseDiagStripe\": \"lightDown\",\n\t\"ThinHorzCross\": \"lightGrid\"\n};\n\n/* 18.8.5 borders CT_Borders */\nfunction parse_borders(t, styles, themes, opts) {\n\tstyles.Borders = [];\n\tvar border = {};\n\tvar pass = false;\n\t(t[0].match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.4 border CT_Border */\n\t\t\tcase '': case '':\n\t\t\t\tborder = {};\n\t\t\t\tif(y.diagonalUp) border.diagonalUp = parsexmlbool(y.diagonalUp);\n\t\t\t\tif(y.diagonalDown) border.diagonalDown = parsexmlbool(y.diagonalDown);\n\t\t\t\tstyles.Borders.push(border);\n\t\t\t\tbreak;\n\t\t\tcase '': break;\n\n\t\t\t/* note: not in spec, appears to be CT_BorderPr */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* note: not in spec, appears to be CT_BorderPr */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.43 top CT_BorderPr */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.6 bottom CT_BorderPr */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.13 diagonal CT_BorderPr */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.25 horizontal CT_BorderPr */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.44 vertical CT_BorderPr */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.37 start CT_BorderPr */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.16 end CT_BorderPr */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.? color CT_Color */\n\t\t\tcase '':\n\t\t\t\tbreak;\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': pass = false; break;\n\t\t\tdefault: if(opts && opts.WTF) {\n\t\t\t\tif(!pass) throw new Error('unrecognized ' + y[0] + ' in borders');\n\t\t\t}\n\t\t}\n\t});\n}\n\n/* 18.8.21 fills CT_Fills */\nfunction parse_fills(t, styles, themes, opts) {\n\tstyles.Fills = [];\n\tvar fill = {};\n\tvar pass = false;\n\t(t[0].match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.20 fill CT_Fill */\n\t\t\tcase '': case '':\n\t\t\t\tfill = {}; styles.Fills.push(fill); break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.24 gradientFill CT_GradientFill */\n\t\t\tcase '': break;\n\t\t\tcase '': styles.Fills.push(fill); fill = {}; break;\n\n\t\t\t/* 18.8.32 patternFill CT_PatternFill */\n\t\t\tcase '':\n\t\t\t\tif(y.patternType) fill.patternType = y.patternType;\n\t\t\t\tbreak;\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.3 bgColor CT_Color */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.19 fgColor CT_Color */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.38 stop CT_GradientStop */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.? color CT_Color */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': pass = false; break;\n\t\t\tdefault: if(opts && opts.WTF) {\n\t\t\t\tif(!pass) throw new Error('unrecognized ' + y[0] + ' in fills');\n\t\t\t}\n\t\t}\n\t});\n}\n\n/* 18.8.23 fonts CT_Fonts */\nfunction parse_fonts(t, styles, themes, opts) {\n\tstyles.Fonts = [];\n\tvar font = {};\n\tvar pass = false;\n\t(t[0].match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.22 font CT_Font */\n\t\t\tcase '': break;\n\t\t\tcase '
': case '':\n\t\t\t\tstyles.Fonts.push(font);\n\t\t\t\tfont = {};\n\t\t\t\tbreak;\n\n\t\t\t/* 18.8.29 name CT_FontName */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.2 b CT_BooleanProperty */\n\t\t\tcase '': font.bold = 1; break;\n\n\t\t\t/* 18.8.26 i CT_BooleanProperty */\n\t\t\tcase '': font.italic = 1; break;\n\n\t\t\t/* 18.4.13 u CT_UnderlineProperty */\n\t\t\tcase '': font.underline = 1; break;\n\n\t\t\t/* 18.4.10 strike CT_BooleanProperty */\n\t\t\tcase '': font.strike = 1; break;\n\n\t\t\t/* 18.4.2 outline CT_BooleanProperty */\n\t\t\tcase '': font.outline = 1; break;\n\n\t\t\t/* 18.8.36 shadow CT_BooleanProperty */\n\t\t\tcase '': font.shadow = 1; break;\n\n\t\t\t/* 18.8.12 condense CT_BooleanProperty */\n\t\t\tcase '': font.condense = 1; break;\n\n\t\t\t/* 18.8.17 extend CT_BooleanProperty */\n\t\t\tcase '': font.extend = 1; break;\n\n\t\t\t/* 18.4.11 sz CT_FontSize */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.4.14 vertAlign CT_VerticalAlignFontProperty */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.18 family CT_FontFamily */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.35 scheme CT_FontScheme */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.4.1 charset CT_IntProperty */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* note: sometimes mc:AlternateContent appears bare */\n\t\t\tcase '': pass = false; break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': pass = false; break;\n\t\t\tdefault: if(opts && opts.WTF) {\n\t\t\t\tif(!pass) throw new Error('unrecognized ' + y[0] + ' in fonts');\n\t\t\t}\n\t\t}\n\t});\n}\n\n/* 18.8.31 numFmts CT_NumFmts */\nfunction parse_numFmts(t, styles, opts) {\n\tstyles.NumberFmt = [];\n\tvar k/*Array*/ = (keys(SSF._table));\n\tfor(var i=0; i < k.length; ++i) styles.NumberFmt[k[i]] = SSF._table[k[i]];\n\tvar m = t[0].match(tagregex);\n\tif(!m) return;\n\tfor(i=0; i < m.length; ++i) {\n\t\tvar y = parsexmltag(m[i]);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': case '': case '': break;\n\t\t\tcase '0) {\n\t\t\t\t\tif(j > 0x188) {\n\t\t\t\t\t\tfor(j = 0x188; j > 0x3c; --j) if(styles.NumberFmt[j] == null) break;\n\t\t\t\t\t\tstyles.NumberFmt[j] = f;\n\t\t\t\t\t}\n\t\t\t\t\tSSF.load(f,j);\n\t\t\t\t}\n\t\t\t} break;\n\t\t\tcase '': break;\n\t\t\tdefault: if(opts.WTF) throw new Error('unrecognized ' + y[0] + ' in numFmts');\n\t\t}\n\t}\n}\n\nfunction write_numFmts(NF) {\n\tvar o = [\"\"];\n\t[[5,8],[23,26],[41,44],[/*63*/50,/*66],[164,*/392]].forEach(function(r) {\n\t\tfor(var i = r[0]; i <= r[1]; ++i) if(NF[i] != null) o[o.length] = (writextag('numFmt',null,{numFmtId:i,formatCode:escapexml(NF[i])}));\n\t});\n\tif(o.length === 1) return \"\";\n\to[o.length] = (\"\");\n\to[0] = writextag('numFmts', null, { count:o.length-2 }).replace(\"/>\", \">\");\n\treturn o.join(\"\");\n}\n\n/* 18.8.10 cellXfs CT_CellXfs */\nvar cellXF_uint = [ \"numFmtId\", \"fillId\", \"fontId\", \"borderId\", \"xfId\" ];\nvar cellXF_bool = [ \"applyAlignment\", \"applyBorder\", \"applyFill\", \"applyFont\", \"applyNumberFormat\", \"applyProtection\", \"pivotButton\", \"quotePrefix\" ];\nfunction parse_cellXfs(t, styles, opts) {\n\tstyles.CellXf = [];\n\tvar xf;\n\tvar pass = false;\n\t(t[0].match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x), i = 0;\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': case '': case '': break;\n\n\t\t\t/* 18.8.45 xf CT_Xf */\n\t\t\tcase '':\n\t\t\t\txf = y;\n\t\t\t\tdelete xf[0];\n\t\t\t\tfor(i = 0; i < cellXF_uint.length; ++i) if(xf[cellXF_uint[i]])\n\t\t\t\t\txf[cellXF_uint[i]] = parseInt(xf[cellXF_uint[i]], 10);\n\t\t\t\tfor(i = 0; i < cellXF_bool.length; ++i) if(xf[cellXF_bool[i]])\n\t\t\t\t\txf[cellXF_bool[i]] = parsexmlbool(xf[cellXF_bool[i]]);\n\t\t\t\tif(xf.numFmtId > 0x188) {\n\t\t\t\t\tfor(i = 0x188; i > 0x3c; --i) if(styles.NumberFmt[xf.numFmtId] == styles.NumberFmt[i]) { xf.numFmtId = i; break; }\n\t\t\t\t}\n\t\t\t\tstyles.CellXf.push(xf); break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.1 alignment CT_CellAlignment */\n\t\t\tcase '':\n\t\t\t\tvar alignment = {};\n\t\t\t\tif(y.vertical) alignment.vertical = y.vertical;\n\t\t\t\tif(y.horizontal) alignment.horizontal = y.horizontal;\n\t\t\t\tif(y.textRotation != null) alignment.textRotation = y.textRotation;\n\t\t\t\tif(y.indent) alignment.indent = y.indent;\n\t\t\t\tif(y.wrapText) alignment.wrapText = parsexmlbool(y.wrapText);\n\t\t\t\txf.alignment = alignment;\n\t\t\t\tbreak;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.33 protection CT_CellProtection */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* note: sometimes mc:AlternateContent appears bare */\n\t\t\tcase '': pass = false; break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': pass = false; break;\n\t\t\tdefault: if(opts && opts.WTF) {\n\t\t\t\tif(!pass) throw new Error('unrecognized ' + y[0] + ' in cellXfs');\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction write_cellXfs(cellXfs) {\n\tvar o = [];\n\to[o.length] = (writextag('cellXfs',null));\n\tcellXfs.forEach(function(c) {\n\t\to[o.length] = (writextag('xf', null, c));\n\t});\n\to[o.length] = (\"\");\n\tif(o.length === 2) return \"\";\n\to[0] = writextag('cellXfs',null, {count:o.length-2}).replace(\"/>\",\">\");\n\treturn o.join(\"\");\n}\n\n/* 18.8 Styles CT_Stylesheet*/\nvar parse_sty_xml= (function make_pstyx() {\nvar numFmtRegex = /<(?:\\w+:)?numFmts([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?numFmts>/;\nvar cellXfRegex = /<(?:\\w+:)?cellXfs([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?cellXfs>/;\nvar fillsRegex = /<(?:\\w+:)?fills([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?fills>/;\nvar fontsRegex = /<(?:\\w+:)?fonts([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?fonts>/;\nvar bordersRegex = /<(?:\\w+:)?borders([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?borders>/;\n\nreturn function parse_sty_xml(data, themes, opts) {\n\tvar styles = {};\n\tif(!data) return styles;\n\tdata = data.replace(//mg,\"\").replace(//gm,\"\");\n\t/* 18.8.39 styleSheet CT_Stylesheet */\n\tvar t;\n\n\t/* 18.8.31 numFmts CT_NumFmts ? */\n\tif((t=data.match(numFmtRegex))) parse_numFmts(t, styles, opts);\n\n\t/* 18.8.23 fonts CT_Fonts ? */\n\tif((t=data.match(fontsRegex))) parse_fonts(t, styles, themes, opts);\n\n\t/* 18.8.21 fills CT_Fills ? */\n\tif((t=data.match(fillsRegex))) parse_fills(t, styles, themes, opts);\n\n\t/* 18.8.5 borders CT_Borders ? */\n\tif((t=data.match(bordersRegex))) parse_borders(t, styles, themes, opts);\n\n\t/* 18.8.9 cellStyleXfs CT_CellStyleXfs ? */\n\t/* 18.8.8 cellStyles CT_CellStyles ? */\n\n\t/* 18.8.10 cellXfs CT_CellXfs ? */\n\tif((t=data.match(cellXfRegex))) parse_cellXfs(t, styles, opts);\n\n\t/* 18.8.15 dxfs CT_Dxfs ? */\n\t/* 18.8.42 tableStyles CT_TableStyles ? */\n\t/* 18.8.11 colors CT_Colors ? */\n\t/* 18.2.10 extLst CT_ExtensionList ? */\n\n\treturn styles;\n};\n})();\n\nvar STYLES_XML_ROOT = writextag('styleSheet', null, {\n\t'xmlns': XMLNS.main[0],\n\t'xmlns:vt': XMLNS.vt\n});\n\nRELS.STY = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\";\n\nfunction write_sty_xml(wb, opts) {\n\tvar o = [XML_HEADER, STYLES_XML_ROOT], w;\n\tif(wb.SSF && (w = write_numFmts(wb.SSF)) != null) o[o.length] = w;\n\to[o.length] = ('');\n\to[o.length] = ('');\n\to[o.length] = ('');\n\to[o.length] = ('');\n\tif((w = write_cellXfs(opts.cellXfs))) o[o.length] = (w);\n\to[o.length] = ('');\n\to[o.length] = ('');\n\to[o.length] = ('');\n\n\tif(o.length>2){ o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* [MS-XLSB] 2.4.657 BrtFmt */\nfunction parse_BrtFmt(data, length) {\n\tvar numFmtId = data.read_shift(2);\n\tvar stFmtCode = parse_XLWideString(data,length-2);\n\treturn [numFmtId, stFmtCode];\n}\nfunction write_BrtFmt(i, f, o) {\n\tif(!o) o = new_buf(6 + 4 * f.length);\n\to.write_shift(2, i);\n\twrite_XLWideString(f, o);\n\tvar out = (o.length > o.l) ? o.slice(0, o.l) : o;\n\tif(o.l == null) o.l = o.length;\n\treturn out;\n}\n\n/* [MS-XLSB] 2.4.659 BrtFont TODO */\nfunction parse_BrtFont(data, length, opts) {\n\tvar out = ({});\n\n\tout.sz = data.read_shift(2) / 20;\n\n\tvar grbit = parse_FontFlags(data, 2, opts);\n\tif(grbit.fItalic) out.italic = 1;\n\tif(grbit.fCondense) out.condense = 1;\n\tif(grbit.fExtend) out.extend = 1;\n\tif(grbit.fShadow) out.shadow = 1;\n\tif(grbit.fOutline) out.outline = 1;\n\tif(grbit.fStrikeout) out.strike = 1;\n\n\tvar bls = data.read_shift(2);\n\tif(bls === 0x02BC) out.bold = 1;\n\n\tswitch(data.read_shift(2)) {\n\t\t/* case 0: out.vertAlign = \"baseline\"; break; */\n\t\tcase 1: out.vertAlign = \"superscript\"; break;\n\t\tcase 2: out.vertAlign = \"subscript\"; break;\n\t}\n\n\tvar underline = data.read_shift(1);\n\tif(underline != 0) out.underline = underline;\n\n\tvar family = data.read_shift(1);\n\tif(family > 0) out.family = family;\n\n\tvar bCharSet = data.read_shift(1);\n\tif(bCharSet > 0) out.charset = bCharSet;\n\n\tdata.l++;\n\tout.color = parse_BrtColor(data, 8);\n\n\tswitch(data.read_shift(1)) {\n\t\t/* case 0: out.scheme = \"none\": break; */\n\t\tcase 1: out.scheme = \"major\"; break;\n\t\tcase 2: out.scheme = \"minor\"; break;\n\t}\n\n\tout.name = parse_XLWideString(data, length - 21);\n\n\treturn out;\n}\nfunction write_BrtFont(font, o) {\n\tif(!o) o = new_buf(25+4*32);\n\to.write_shift(2, font.sz * 20);\n\twrite_FontFlags(font, o);\n\to.write_shift(2, font.bold ? 0x02BC : 0x0190);\n\tvar sss = 0;\n\tif(font.vertAlign == \"superscript\") sss = 1;\n\telse if(font.vertAlign == \"subscript\") sss = 2;\n\to.write_shift(2, sss);\n\to.write_shift(1, font.underline || 0);\n\to.write_shift(1, font.family || 0);\n\to.write_shift(1, font.charset || 0);\n\to.write_shift(1, 0);\n\twrite_BrtColor(font.color, o);\n\tvar scheme = 0;\n\tif(font.scheme == \"major\") scheme = 1;\n\tif(font.scheme == \"minor\") scheme = 2;\n\to.write_shift(1, scheme);\n\twrite_XLWideString(font.name, o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.650 BrtFill */\nvar XLSBFillPTNames = [\n\t\"none\",\n\t\"solid\",\n\t\"mediumGray\",\n\t\"darkGray\",\n\t\"lightGray\",\n\t\"darkHorizontal\",\n\t\"darkVertical\",\n\t\"darkDown\",\n\t\"darkUp\",\n\t\"darkGrid\",\n\t\"darkTrellis\",\n\t\"lightHorizontal\",\n\t\"lightVertical\",\n\t\"lightDown\",\n\t\"lightUp\",\n\t\"lightGrid\",\n\t\"lightTrellis\",\n\t\"gray125\",\n\t\"gray0625\"\n];\nvar rev_XLSBFillPTNames = (evert(XLSBFillPTNames));\n/* TODO: gradient fill representation */\nvar parse_BrtFill = parsenoop;\nfunction write_BrtFill(fill, o) {\n\tif(!o) o = new_buf(4*3 + 8*7 + 16*1);\n\tvar fls = rev_XLSBFillPTNames[fill.patternType];\n\tif(fls == null) fls = 0x28;\n\to.write_shift(4, fls);\n\tvar j = 0;\n\tif(fls != 0x28) {\n\t\t/* TODO: custom FG Color */\n\t\twrite_BrtColor({auto:1}, o);\n\t\t/* TODO: custom BG Color */\n\t\twrite_BrtColor({auto:1}, o);\n\n\t\tfor(; j < 12; ++j) o.write_shift(4, 0);\n\t} else {\n\t\tfor(; j < 4; ++j) o.write_shift(4, 0);\n\n\t\tfor(; j < 12; ++j) o.write_shift(4, 0); /* TODO */\n\t\t/* iGradientType */\n\t\t/* xnumDegree */\n\t\t/* xnumFillToLeft */\n\t\t/* xnumFillToRight */\n\t\t/* xnumFillToTop */\n\t\t/* xnumFillToBottom */\n\t\t/* cNumStop */\n\t\t/* xfillGradientStop */\n\t}\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.824 BrtXF */\nfunction parse_BrtXF(data, length) {\n\tvar tgt = data.l + length;\n\tvar ixfeParent = data.read_shift(2);\n\tvar ifmt = data.read_shift(2);\n\tdata.l = tgt;\n\treturn {ixfe:ixfeParent, numFmtId:ifmt };\n}\nfunction write_BrtXF(data, ixfeP, o) {\n\tif(!o) o = new_buf(16);\n\to.write_shift(2, ixfeP||0);\n\to.write_shift(2, data.numFmtId||0);\n\to.write_shift(2, 0); /* iFont */\n\to.write_shift(2, 0); /* iFill */\n\to.write_shift(2, 0); /* ixBorder */\n\to.write_shift(1, 0); /* trot */\n\to.write_shift(1, 0); /* indent */\n\tvar flow = 0;\n\to.write_shift(1, flow); /* flags */\n\to.write_shift(1, 0); /* flags */\n\to.write_shift(1, 0); /* xfGrbitAtr */\n\to.write_shift(1, 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.4 Blxf TODO */\nfunction write_Blxf(data, o) {\n\tif(!o) o = new_buf(10);\n\to.write_shift(1, 0); /* dg */\n\to.write_shift(1, 0);\n\to.write_shift(4, 0); /* color */\n\to.write_shift(4, 0); /* color */\n\treturn o;\n}\n/* [MS-XLSB] 2.4.302 BrtBorder TODO */\nvar parse_BrtBorder = parsenoop;\nfunction write_BrtBorder(border, o) {\n\tif(!o) o = new_buf(51);\n\to.write_shift(1, 0); /* diagonal */\n\twrite_Blxf(null, o); /* top */\n\twrite_Blxf(null, o); /* bottom */\n\twrite_Blxf(null, o); /* left */\n\twrite_Blxf(null, o); /* right */\n\twrite_Blxf(null, o); /* diag */\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.763 BrtStyle TODO */\nfunction write_BrtStyle(style, o) {\n\tif(!o) o = new_buf(12+4*10);\n\to.write_shift(4, style.xfId);\n\to.write_shift(2, 1);\n\to.write_shift(1, +style.builtinId);\n\to.write_shift(1, 0); /* iLevel */\n\twrite_XLNullableWideString(style.name || \"\", o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.272 BrtBeginTableStyles */\nfunction write_BrtBeginTableStyles(cnt, defTableStyle, defPivotStyle) {\n\tvar o = new_buf(4+256*2*4);\n\to.write_shift(4, cnt);\n\twrite_XLNullableWideString(defTableStyle, o);\n\twrite_XLNullableWideString(defPivotStyle, o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.1.7.50 Styles */\nfunction parse_sty_bin(data, themes, opts) {\n\tvar styles = {};\n\tstyles.NumberFmt = ([]);\n\tfor(var y in SSF._table) styles.NumberFmt[y] = SSF._table[y];\n\n\tstyles.CellXf = [];\n\tstyles.Fonts = [];\n\tvar state = [];\n\tvar pass = false;\n\trecordhopper(data, function hopper_sty(val, R_n, RT) {\n\t\tswitch(RT) {\n\t\t\tcase 0x002C: /* 'BrtFmt' */\n\t\t\t\tstyles.NumberFmt[val[0]] = val[1]; SSF.load(val[1], val[0]);\n\t\t\t\tbreak;\n\t\t\tcase 0x002B: /* 'BrtFont' */\n\t\t\t\tstyles.Fonts.push(val);\n\t\t\t\tif(val.color.theme != null && themes && themes.themeElements && themes.themeElements.clrScheme) {\n\t\t\t\t\tval.color.rgb = rgb_tint(themes.themeElements.clrScheme[val.color.theme].rgb, val.color.tint || 0);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 0x0401: /* 'BrtKnownFonts' */ break;\n\t\t\tcase 0x002D: /* 'BrtFill' */\n\t\t\t\tbreak;\n\t\t\tcase 0x002E: /* 'BrtBorder' */\n\t\t\t\tbreak;\n\t\t\tcase 0x002F: /* 'BrtXF' */\n\t\t\t\tif(state[state.length - 1] == \"BrtBeginCellXFs\") {\n\t\t\t\t\tstyles.CellXf.push(val);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 0x0030: /* 'BrtStyle' */\n\t\t\tcase 0x01FB: /* 'BrtDXF' */\n\t\t\tcase 0x023C: /* 'BrtMRUColor' */\n\t\t\tcase 0x01DB: /* 'BrtIndexedColor': */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0493: /* 'BrtDXF14' */\n\t\t\tcase 0x0836: /* 'BrtDXF15' */\n\t\t\tcase 0x046A: /* 'BrtSlicerStyleElement' */\n\t\t\tcase 0x0200: /* 'BrtTableStyleElement' */\n\t\t\tcase 0x082F: /* 'BrtTimelineStyleElement' */\n\t\t\tcase 0x0C00: /* 'BrtUid' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tpass = false; break;\n\t\t\tcase 0x0025: /* 'BrtACBegin' */\n\t\t\t\tstate.push(R_n); pass = true; break;\n\t\t\tcase 0x0026: /* 'BrtACEnd' */\n\t\t\t\tstate.pop(); pass = false; break;\n\n\t\t\tdefault:\n\t\t\t\tif((R_n||\"\").indexOf(\"Begin\") > 0) state.push(R_n);\n\t\t\t\telse if((R_n||\"\").indexOf(\"End\") > 0) state.pop();\n\t\t\t\telse if(!pass || (opts.WTF && state[state.length-1] != \"BrtACBegin\")) throw new Error(\"Unexpected record \" + RT + \" \" + R_n);\n\t\t}\n\t});\n\treturn styles;\n}\n\nfunction write_FMTS_bin(ba, NF) {\n\tif(!NF) return;\n\tvar cnt = 0;\n\t[[5,8],[23,26],[41,44],[/*63*/50,/*66],[164,*/392]].forEach(function(r) {\nfor(var i = r[0]; i <= r[1]; ++i) if(NF[i] != null) ++cnt;\n\t});\n\n\tif(cnt == 0) return;\n\twrite_record(ba, \"BrtBeginFmts\", write_UInt32LE(cnt));\n\t[[5,8],[23,26],[41,44],[/*63*/50,/*66],[164,*/392]].forEach(function(r) {\nfor(var i = r[0]; i <= r[1]; ++i) if(NF[i] != null) write_record(ba, \"BrtFmt\", write_BrtFmt(i, NF[i]));\n\t});\n\twrite_record(ba, \"BrtEndFmts\");\n}\n\nfunction write_FONTS_bin(ba) {\n\tvar cnt = 1;\n\n\tif(cnt == 0) return;\n\twrite_record(ba, \"BrtBeginFonts\", write_UInt32LE(cnt));\n\twrite_record(ba, \"BrtFont\", write_BrtFont({\n\t\tsz:12,\n\t\tcolor: {theme:1},\n\t\tname: \"Calibri\",\n\t\tfamily: 2,\n\t\tscheme: \"minor\"\n\t}));\n\t/* 1*65491BrtFont [ACFONTS] */\n\twrite_record(ba, \"BrtEndFonts\");\n}\n\nfunction write_FILLS_bin(ba) {\n\tvar cnt = 2;\n\n\tif(cnt == 0) return;\n\twrite_record(ba, \"BrtBeginFills\", write_UInt32LE(cnt));\n\twrite_record(ba, \"BrtFill\", write_BrtFill({patternType:\"none\"}));\n\twrite_record(ba, \"BrtFill\", write_BrtFill({patternType:\"gray125\"}));\n\t/* 1*65431BrtFill */\n\twrite_record(ba, \"BrtEndFills\");\n}\n\nfunction write_BORDERS_bin(ba) {\n\tvar cnt = 1;\n\n\tif(cnt == 0) return;\n\twrite_record(ba, \"BrtBeginBorders\", write_UInt32LE(cnt));\n\twrite_record(ba, \"BrtBorder\", write_BrtBorder({}));\n\t/* 1*65430BrtBorder */\n\twrite_record(ba, \"BrtEndBorders\");\n}\n\nfunction write_CELLSTYLEXFS_bin(ba) {\n\tvar cnt = 1;\n\twrite_record(ba, \"BrtBeginCellStyleXFs\", write_UInt32LE(cnt));\n\twrite_record(ba, \"BrtXF\", write_BrtXF({\n\t\tnumFmtId: 0,\n\t\tfontId: 0,\n\t\tfillId: 0,\n\t\tborderId: 0\n\t}, 0xFFFF));\n\t/* 1*65430(BrtXF *FRT) */\n\twrite_record(ba, \"BrtEndCellStyleXFs\");\n}\n\nfunction write_CELLXFS_bin(ba, data) {\n\twrite_record(ba, \"BrtBeginCellXFs\", write_UInt32LE(data.length));\n\tdata.forEach(function(c) { write_record(ba, \"BrtXF\", write_BrtXF(c,0)); });\n\t/* 1*65430(BrtXF *FRT) */\n\twrite_record(ba, \"BrtEndCellXFs\");\n}\n\nfunction write_STYLES_bin(ba) {\n\tvar cnt = 1;\n\n\twrite_record(ba, \"BrtBeginStyles\", write_UInt32LE(cnt));\n\twrite_record(ba, \"BrtStyle\", write_BrtStyle({\n\t\txfId:0,\n\t\tbuiltinId:0,\n\t\tname:\"Normal\"\n\t}));\n\t/* 1*65430(BrtStyle *FRT) */\n\twrite_record(ba, \"BrtEndStyles\");\n}\n\nfunction write_DXFS_bin(ba) {\n\tvar cnt = 0;\n\n\twrite_record(ba, \"BrtBeginDXFs\", write_UInt32LE(cnt));\n\t/* *2147483647(BrtDXF *FRT) */\n\twrite_record(ba, \"BrtEndDXFs\");\n}\n\nfunction write_TABLESTYLES_bin(ba) {\n\tvar cnt = 0;\n\n\twrite_record(ba, \"BrtBeginTableStyles\", write_BrtBeginTableStyles(cnt, \"TableStyleMedium9\", \"PivotStyleMedium4\"));\n\t/* *TABLESTYLE */\n\twrite_record(ba, \"BrtEndTableStyles\");\n}\n\nfunction write_COLORPALETTE_bin() {\n\treturn;\n\t/* BrtBeginColorPalette [INDEXEDCOLORS] [MRUCOLORS] BrtEndColorPalette */\n}\n\n/* [MS-XLSB] 2.1.7.50 Styles */\nfunction write_sty_bin(wb, opts) {\n\tvar ba = buf_array();\n\twrite_record(ba, \"BrtBeginStyleSheet\");\n\twrite_FMTS_bin(ba, wb.SSF);\n\twrite_FONTS_bin(ba, wb);\n\twrite_FILLS_bin(ba, wb);\n\twrite_BORDERS_bin(ba, wb);\n\twrite_CELLSTYLEXFS_bin(ba, wb);\n\twrite_CELLXFS_bin(ba, opts.cellXfs);\n\twrite_STYLES_bin(ba, wb);\n\twrite_DXFS_bin(ba, wb);\n\twrite_TABLESTYLES_bin(ba, wb);\n\twrite_COLORPALETTE_bin(ba, wb);\n\t/* FRTSTYLESHEET*/\n\twrite_record(ba, \"BrtEndStyleSheet\");\n\treturn ba.end();\n}\nRELS.THEME = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\";\n\n/* Even though theme layout is dk1 lt1 dk2 lt2, true order is lt1 dk1 lt2 dk2 */\nvar XLSXThemeClrScheme = [\n\t'', '', '', '',\n\t'', '', '',\n\t'', '', '',\n\t'', ''\n];\n/* 20.1.6.2 clrScheme CT_ColorScheme */\nfunction parse_clrScheme(t, themes, opts) {\n\tthemes.themeElements.clrScheme = [];\n\tvar color = {};\n\t(t[0].match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(y[0]) {\n\t\t\t/* 20.1.6.2 clrScheme (Color Scheme) CT_ColorScheme */\n\t\t\tcase '': break;\n\n\t\t\t/* 20.1.2.3.32 srgbClr CT_SRgbColor */\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\t\tif (y[0].charAt(1) === '/') {\n\t\t\t\t\tthemes.themeElements.clrScheme[XLSXThemeClrScheme.indexOf(y[0])] = color;\n\t\t\t\t\tcolor = {};\n\t\t\t\t} else {\n\t\t\t\t\tcolor.name = y[0].slice(3, y[0].length - 1);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tdefault: if(opts && opts.WTF) throw new Error('Unrecognized ' + y[0] + ' in clrScheme');\n\t\t}\n\t});\n}\n\n/* 20.1.4.1.18 fontScheme CT_FontScheme */\nfunction parse_fontScheme() { }\n\n/* 20.1.4.1.15 fmtScheme CT_StyleMatrix */\nfunction parse_fmtScheme() { }\n\nvar clrsregex = /]*)>[\\s\\S]*<\\/a:clrScheme>/;\nvar fntsregex = /]*)>[\\s\\S]*<\\/a:fontScheme>/;\nvar fmtsregex = /]*)>[\\s\\S]*<\\/a:fmtScheme>/;\n\n/* 20.1.6.10 themeElements CT_BaseStyles */\nfunction parse_themeElements(data, themes, opts) {\n\tthemes.themeElements = {};\n\n\tvar t;\n\n\t[\n\t\t/* clrScheme CT_ColorScheme */\n\t\t['clrScheme', clrsregex, parse_clrScheme],\n\t\t/* fontScheme CT_FontScheme */\n\t\t['fontScheme', fntsregex, parse_fontScheme],\n\t\t/* fmtScheme CT_StyleMatrix */\n\t\t['fmtScheme', fmtsregex, parse_fmtScheme]\n\t].forEach(function(m) {\n\t\tif(!(t=data.match(m[1]))) throw new Error(m[0] + ' not found in themeElements');\n\t\tm[2](t, themes, opts);\n\t});\n}\n\nvar themeltregex = /]*)>[\\s\\S]*<\\/a:themeElements>/;\n\n/* 14.2.7 Theme Part */\nfunction parse_theme_xml(data, opts) {\n\t/* 20.1.6.9 theme CT_OfficeStyleSheet */\n\tif(!data || data.length === 0) return parse_theme_xml(write_theme());\n\n\tvar t;\n\tvar themes = {};\n\n\t/* themeElements CT_BaseStyles */\n\tif(!(t=data.match(themeltregex))) throw new Error('themeElements not found in theme');\n\tparse_themeElements(t[0], themes, opts);\n\tthemes.raw = data;\n\treturn themes;\n}\n\nfunction write_theme(Themes, opts) {\n\tif(opts && opts.themeXLSX) return opts.themeXLSX;\n\tif(Themes && typeof Themes.raw == \"string\") return Themes.raw;\n\tvar o = [XML_HEADER];\n\to[o.length] = '';\n\to[o.length] = '';\n\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\treturn o.join(\"\");\n}\n/* [MS-XLS] 2.4.326 TODO: payload is a zip file */\nfunction parse_Theme(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar dwThemeVersion = blob.read_shift(4);\n\tif(dwThemeVersion === 124226) return;\n\tif(!opts.cellStyles || !jszip) { blob.l = end; return; }\n\tvar data = blob.slice(blob.l);\n\tblob.l = end;\n\tvar zip; try { zip = new jszip(data); } catch(e) { return; }\n\tvar themeXML = getzipstr(zip, \"theme/theme/theme1.xml\", true);\n\tif(!themeXML) return;\n\treturn parse_theme_xml(themeXML, opts);\n}\n\n/* 2.5.49 */\nfunction parse_ColorTheme(blob) { return blob.read_shift(4); }\n\n/* 2.5.155 */\nfunction parse_FullColorExt(blob) {\n\tvar o = {};\n\to.xclrType = blob.read_shift(2);\n\to.nTintShade = blob.read_shift(2);\n\tswitch(o.xclrType) {\n\t\tcase 0: blob.l += 4; break;\n\t\tcase 1: o.xclrValue = parse_IcvXF(blob, 4); break;\n\t\tcase 2: o.xclrValue = parse_LongRGBA(blob, 4); break;\n\t\tcase 3: o.xclrValue = parse_ColorTheme(blob, 4); break;\n\t\tcase 4: blob.l += 4; break;\n\t}\n\tblob.l += 8;\n\treturn o;\n}\n\n/* 2.5.164 TODO: read 7 bits*/\nfunction parse_IcvXF(blob, length) {\n\treturn parsenoop(blob, length);\n}\n\n/* 2.5.280 */\nfunction parse_XFExtGradient(blob, length) {\n\treturn parsenoop(blob, length);\n}\n\n/* [MS-XLS] 2.5.108 */\nfunction parse_ExtProp(blob) {\n\tvar extType = blob.read_shift(2);\n\tvar cb = blob.read_shift(2) - 4;\n\tvar o = [extType];\n\tswitch(extType) {\n\t\tcase 0x04: case 0x05: case 0x07: case 0x08:\n\t\tcase 0x09: case 0x0A: case 0x0B: case 0x0D:\n\t\t\to[1] = parse_FullColorExt(blob, cb); break;\n\t\tcase 0x06: o[1] = parse_XFExtGradient(blob, cb); break;\n\t\tcase 0x0E: case 0x0F: o[1] = blob.read_shift(cb === 1 ? 1 : 2); break;\n\t\tdefault: throw new Error(\"Unrecognized ExtProp type: \" + extType + \" \" + cb);\n\t}\n\treturn o;\n}\n\n/* 2.4.355 */\nfunction parse_XFExt(blob, length) {\n\tvar end = blob.l + length;\n\tblob.l += 2;\n\tvar ixfe = blob.read_shift(2);\n\tblob.l += 2;\n\tvar cexts = blob.read_shift(2);\n\tvar ext = [];\n\twhile(cexts-- > 0) ext.push(parse_ExtProp(blob, end-blob.l));\n\treturn {ixfe:ixfe, ext:ext};\n}\n\n/* xf is an XF, see parse_XFExt for xfext */\nfunction update_xfext(xf, xfext) {\n\txfext.forEach(function(xfe) {\n\t\tswitch(xfe[0]) { /* 2.5.108 extPropData */\n\t\t\tcase 0x04: break; /* foreground color */\n\t\t\tcase 0x05: break; /* background color */\n\t\t\tcase 0x06: break; /* gradient fill */\n\t\t\tcase 0x07: break; /* top cell border color */\n\t\t\tcase 0x08: break; /* bottom cell border color */\n\t\t\tcase 0x09: break; /* left cell border color */\n\t\t\tcase 0x0a: break; /* right cell border color */\n\t\t\tcase 0x0b: break; /* diagonal cell border color */\n\t\t\tcase 0x0d: /* text color */\n\t\t\t\tbreak;\n\t\t\tcase 0x0e: break; /* font scheme */\n\t\t\tcase 0x0f: break; /* indentation level */\n\t\t}\n\t});\n}\n\n/* 18.6 Calculation Chain */\nfunction parse_cc_xml(data) {\n\tvar d = [];\n\tif(!data) return d;\n\tvar i = 1;\n\t(data.match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(y[0]) {\n\t\t\tcase '': case '': break;\n\t\t\t/* 18.6.1 c CT_CalcCell 1 */\n\t\t\tcase ' 0){/* empty */}\n\t\t\t\telse if((R_n||\"\").indexOf(\"End\") > 0){/* empty */}\n\t\t\t\telse if(!pass || opts.WTF) throw new Error(\"Unexpected record \" + RT + \" \" + R_n);\n\t\t}\n\t});\n\treturn out;\n}\n\n//function write_cc_bin(data, opts) { }\n/* 18.14 Supplementary Workbook Data */\nfunction parse_xlink_xml() {\n\t//var opts = _opts || {};\n\t//if(opts.WTF) throw \"XLSX External Link\";\n}\n\n/* [MS-XLSB] 2.1.7.25 External Link */\nfunction parse_xlink_bin(data, rel, name, _opts) {\n\tif(!data) return data;\n\tvar opts = _opts || {};\n\n\tvar pass = false, end = false;\n\n\trecordhopper(data, function xlink_parse(val, R_n, RT) {\n\t\tif(end) return;\n\t\tswitch(RT) {\n\t\t\tcase 0x0167: /* 'BrtSupTabs' */\n\t\t\tcase 0x016B: /* 'BrtExternTableStart' */\n\t\t\tcase 0x016C: /* 'BrtExternTableEnd' */\n\t\t\tcase 0x016E: /* 'BrtExternRowHdr' */\n\t\t\tcase 0x016F: /* 'BrtExternCellBlank' */\n\t\t\tcase 0x0170: /* 'BrtExternCellReal' */\n\t\t\tcase 0x0171: /* 'BrtExternCellBool' */\n\t\t\tcase 0x0172: /* 'BrtExternCellError' */\n\t\t\tcase 0x0173: /* 'BrtExternCellString' */\n\t\t\tcase 0x01D8: /* 'BrtExternValueMeta' */\n\t\t\tcase 0x0241: /* 'BrtSupNameStart' */\n\t\t\tcase 0x0242: /* 'BrtSupNameValueStart' */\n\t\t\tcase 0x0243: /* 'BrtSupNameValueEnd' */\n\t\t\tcase 0x0244: /* 'BrtSupNameNum' */\n\t\t\tcase 0x0245: /* 'BrtSupNameErr' */\n\t\t\tcase 0x0246: /* 'BrtSupNameSt' */\n\t\t\tcase 0x0247: /* 'BrtSupNameNil' */\n\t\t\tcase 0x0248: /* 'BrtSupNameBool' */\n\t\t\tcase 0x0249: /* 'BrtSupNameFmla' */\n\t\t\tcase 0x024A: /* 'BrtSupNameBits' */\n\t\t\tcase 0x024B: /* 'BrtSupNameEnd' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tpass = false; break;\n\n\t\t\tdefault:\n\t\t\t\tif((R_n||\"\").indexOf(\"Begin\") > 0){/* empty */}\n\t\t\t\telse if((R_n||\"\").indexOf(\"End\") > 0){/* empty */}\n\t\t\t\telse if(!pass || opts.WTF) throw new Error(\"Unexpected record \" + RT.toString(16) + \" \" + R_n);\n\t\t}\n\t}, opts);\n}\n/* 20.5 DrawingML - SpreadsheetML Drawing */\nRELS.IMG = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\";\nRELS.DRAW = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing\";\n\n/* 20.5.2.35 wsDr CT_Drawing */\nfunction parse_drawing(data, rels) {\n\tif(!data) return \"??\";\n\t/*\n\t Chartsheet Drawing:\n\t - 20.5.2.35 wsDr CT_Drawing\n\t - 20.5.2.1 absoluteAnchor CT_AbsoluteAnchor\n\t - 20.5.2.16 graphicFrame CT_GraphicalObjectFrame\n\t - 20.1.2.2.16 graphic CT_GraphicalObject\n\t - 20.1.2.2.17 graphicData CT_GraphicalObjectData\n - chart reference\n\t the actual type is based on the URI of the graphicData\n\t\tTODO: handle embedded charts and other types of graphics\n\t*/\n\tvar id = (data.match(/]*r:id=\"([^\"]*)\"/)||[\"\",\"\"])[1];\n\n\treturn rels['!id'][id].Target;\n}\n\n/* L.5.5.2 SpreadsheetML Comments + VML Schema */\nvar _shapeid = 1024;\nfunction write_comments_vml(rId, comments) {\n\tvar csize = [21600, 21600];\n\t/* L.5.2.1.2 Path Attribute */\n\tvar bbox = [\"m0,0l0\",csize[1],csize[0],csize[1],csize[0],\"0xe\"].join(\",\");\n\tvar o = [\n\t\twritextag(\"xml\", null, { 'xmlns:v': XLMLNS.v, 'xmlns:o': XLMLNS.o, 'xmlns:x': XLMLNS.x, 'xmlns:mv': XLMLNS.mv }).replace(/\\/>/,\">\"),\n\t\twritextag(\"o:shapelayout\", writextag(\"o:idmap\", null, {'v:ext':\"edit\", 'data':rId}), {'v:ext':\"edit\"}),\n\t\twritextag(\"v:shapetype\", [\n\t\t\twritextag(\"v:stroke\", null, {joinstyle:\"miter\"}),\n\t\t\twritextag(\"v:path\", null, {gradientshapeok:\"t\", 'o:connecttype':\"rect\"})\n\t\t].join(\"\"), {id:\"_x0000_t202\", 'o:spt':202, coordsize:csize.join(\",\"),path:bbox})\n\t];\n\twhile(_shapeid < rId * 1000) _shapeid += 1000;\n\n\tcomments.forEach(function(x) {\n\tvar c = decode_cell(x[0]);\n\tvar fillopts = {'color2':\"#BEFF82\", 'type':\"gradient\"};\n\tif(fillopts.type == \"gradient\") fillopts.angle = \"-180\";\n\tvar fillparm = fillopts.type == \"gradient\" ? writextag(\"o:fill\", null, {type:\"gradientUnscaled\", 'v:ext':\"view\"}) : null;\n\tvar fillxml = writextag('v:fill', fillparm, fillopts);\n\n\tvar shadata = ({on:\"t\", 'obscured':\"t\"});\n\t++_shapeid;\n\n\to = o.concat([\n\t'',\n\t\tfillxml,\n\t\twritextag(\"v:shadow\", null, shadata),\n\t\twritextag(\"v:path\", null, {'o:connecttype':\"none\"}),\n\t\t'
',\n\t\t'',\n\t\t\t'',\n\t\t\t'',\n\t\t\t/* Part 4 19.4.2.3 Anchor (Anchor) */\n\t\t\twritetag('x:Anchor', [c.c+1, 0, c.r+1, 0, c.c+3, 20, c.r+5, 20].join(\",\")),\n\t\t\twritetag('x:AutoFill', \"False\"),\n\t\t\twritetag('x:Row', String(c.r)),\n\t\t\twritetag('x:Column', String(c.c)),\n\t\t\tx[1].hidden ? '' : '',\n\t\t'',\n\t''\n\t]); });\n\to.push('');\n\treturn o.join(\"\");\n}\nRELS.CMNT = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments\";\n\nfunction sheet_insert_comments(sheet, comments) {\n\tvar dense = Array.isArray(sheet);\n\tvar cell;\n\tcomments.forEach(function(comment) {\n\t\tvar r = decode_cell(comment.ref);\n\t\tif(dense) {\n\t\t\tif(!sheet[r.r]) sheet[r.r] = [];\n\t\t\tcell = sheet[r.r][r.c];\n\t\t} else cell = sheet[comment.ref];\n\t\tif (!cell) {\n\t\t\tcell = ({t:\"z\"});\n\t\t\tif(dense) sheet[r.r][r.c] = cell;\n\t\t\telse sheet[comment.ref] = cell;\n\t\t\tvar range = safe_decode_range(sheet[\"!ref\"]||\"BDWGO1000001:A1\");\n\t\t\tif(range.s.r > r.r) range.s.r = r.r;\n\t\t\tif(range.e.r < r.r) range.e.r = r.r;\n\t\t\tif(range.s.c > r.c) range.s.c = r.c;\n\t\t\tif(range.e.c < r.c) range.e.c = r.c;\n\t\t\tvar encoded = encode_range(range);\n\t\t\tif (encoded !== sheet[\"!ref\"]) sheet[\"!ref\"] = encoded;\n\t\t}\n\n\t\tif (!cell.c) cell.c = [];\n\t\tvar o = ({a: comment.author, t: comment.t, r: comment.r});\n\t\tif(comment.h) o.h = comment.h;\n\t\tcell.c.push(o);\n\t});\n}\n\n/* 18.7 Comments */\nfunction parse_comments_xml(data, opts) {\n\t/* 18.7.6 CT_Comments */\n\tif(data.match(/<(?:\\w+:)?comments *\\/>/)) return [];\n\tvar authors = [];\n\tvar commentList = [];\n\tvar authtag = data.match(/<(?:\\w+:)?authors>([\\s\\S]*)<\\/(?:\\w+:)?authors>/);\n\tif(authtag && authtag[1]) authtag[1].split(/<\\/\\w*:?author>/).forEach(function(x) {\n\t\tif(x === \"\" || x.trim() === \"\") return;\n\t\tvar a = x.match(/<(?:\\w+:)?author[^>]*>(.*)/);\n\t\tif(a) authors.push(a[1]);\n\t});\n\tvar cmnttag = data.match(/<(?:\\w+:)?commentList>([\\s\\S]*)<\\/(?:\\w+:)?commentList>/);\n\tif(cmnttag && cmnttag[1]) cmnttag[1].split(/<\\/\\w*:?comment>/).forEach(function(x) {\n\t\tif(x === \"\" || x.trim() === \"\") return;\n\t\tvar cm = x.match(/<(?:\\w+:)?comment[^>]*>/);\n\t\tif(!cm) return;\n\t\tvar y = parsexmltag(cm[0]);\n\t\tvar comment = ({ author: y.authorId && authors[y.authorId] || \"sheetjsghost\", ref: y.ref, guid: y.guid });\n\t\tvar cell = decode_cell(y.ref);\n\t\tif(opts.sheetRows && opts.sheetRows <= cell.r) return;\n\t\tvar textMatch = x.match(/<(?:\\w+:)?text>([\\s\\S]*)<\\/(?:\\w+:)?text>/);\n\t\tvar rt = !!textMatch && !!textMatch[1] && parse_si(textMatch[1]) || {r:\"\",t:\"\",h:\"\"};\n\t\tcomment.r = rt.r;\n\t\tif(rt.r == \"\") rt.t = rt.h = \"\";\n\t\tcomment.t = rt.t.replace(/\\r\\n/g,\"\\n\").replace(/\\r/g,\"\\n\");\n\t\tif(opts.cellHTML) comment.h = rt.h;\n\t\tcommentList.push(comment);\n\t});\n\treturn commentList;\n}\n\nvar CMNT_XML_ROOT = writextag('comments', null, { 'xmlns': XMLNS.main[0] });\nfunction write_comments_xml(data) {\n\tvar o = [XML_HEADER, CMNT_XML_ROOT];\n\n\tvar iauthor = [];\n\to.push(\"\");\n\tdata.forEach(function(x) { x[1].forEach(function(w) { var a = escapexml(w.a);\n\t\tif(iauthor.indexOf(a) > -1) return;\n\t\tiauthor.push(a);\n\t\to.push(\"\" + a + \"\");\n\t}); });\n\to.push(\"\");\n\to.push(\"\");\n\tdata.forEach(function(d) {\n\t\td[1].forEach(function(c) {\n\t\t\t/* 18.7.3 CT_Comment */\n\t\t\to.push('');\n\t\t\to.push(writetag(\"t\", c.t == null ? \"\" : escapexml(c.t)));\n\t\t\to.push('');\n\t\t});\n\t});\n\to.push(\"\");\n\tif(o.length>2) { o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* [MS-XLSB] 2.4.28 BrtBeginComment */\nfunction parse_BrtBeginComment(data) {\n\tvar out = {};\n\tout.iauthor = data.read_shift(4);\n\tvar rfx = parse_UncheckedRfX(data, 16);\n\tout.rfx = rfx.s;\n\tout.ref = encode_cell(rfx.s);\n\tdata.l += 16; /*var guid = parse_GUID(data); */\n\treturn out;\n}\nfunction write_BrtBeginComment(data, o) {\n\tif(o == null) o = new_buf(36);\n\to.write_shift(4, data[1].iauthor);\n\twrite_UncheckedRfX((data[0]), o);\n\to.write_shift(4, 0);\n\to.write_shift(4, 0);\n\to.write_shift(4, 0);\n\to.write_shift(4, 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.327 BrtCommentAuthor */\nvar parse_BrtCommentAuthor = parse_XLWideString;\nfunction write_BrtCommentAuthor(data) { return write_XLWideString(data.slice(0, 54)); }\n\n/* [MS-XLSB] 2.1.7.8 Comments */\nfunction parse_comments_bin(data, opts) {\n\tvar out = [];\n\tvar authors = [];\n\tvar c = {};\n\tvar pass = false;\n\trecordhopper(data, function hopper_cmnt(val, R_n, RT) {\n\t\tswitch(RT) {\n\t\t\tcase 0x0278: /* 'BrtCommentAuthor' */\n\t\t\t\tauthors.push(val); break;\n\t\t\tcase 0x027B: /* 'BrtBeginComment' */\n\t\t\t\tc = val; break;\n\t\t\tcase 0x027D: /* 'BrtCommentText' */\n\t\t\t\tc.t = val.t; c.h = val.h; c.r = val.r; break;\n\t\t\tcase 0x027C: /* 'BrtEndComment' */\n\t\t\t\tc.author = authors[c.iauthor];\n\t\t\t\tdelete (c).iauthor;\n\t\t\t\tif(opts.sheetRows && c.rfx && opts.sheetRows <= c.rfx.r) break;\n\t\t\t\tif(!c.t) c.t = \"\";\n\t\t\t\tdelete c.rfx; out.push(c); break;\n\n\t\t\tcase 0x0C00: /* 'BrtUid' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tpass = false; break;\n\t\t\tcase 0x0025: /* 'BrtACBegin' */ break;\n\t\t\tcase 0x0026: /* 'BrtACEnd' */ break;\n\n\n\t\t\tdefault:\n\t\t\t\tif((R_n||\"\").indexOf(\"Begin\") > 0){/* empty */}\n\t\t\t\telse if((R_n||\"\").indexOf(\"End\") > 0){/* empty */}\n\t\t\t\telse if(!pass || opts.WTF) throw new Error(\"Unexpected record \" + RT + \" \" + R_n);\n\t\t}\n\t});\n\treturn out;\n}\n\nfunction write_comments_bin(data) {\n\tvar ba = buf_array();\n\tvar iauthor = [];\n\twrite_record(ba, \"BrtBeginComments\");\n\n\twrite_record(ba, \"BrtBeginCommentAuthors\");\n\tdata.forEach(function(comment) {\n\t\tcomment[1].forEach(function(c) {\n\t\t\tif(iauthor.indexOf(c.a) > -1) return;\n\t\t\tiauthor.push(c.a.slice(0,54));\n\t\t\twrite_record(ba, \"BrtCommentAuthor\", write_BrtCommentAuthor(c.a));\n\t\t});\n\t});\n\twrite_record(ba, \"BrtEndCommentAuthors\");\n\n\twrite_record(ba, \"BrtBeginCommentList\");\n\tdata.forEach(function(comment) {\n\t\tcomment[1].forEach(function(c) {\n\t\t\tc.iauthor = iauthor.indexOf(c.a);\n\t\t\tvar range = {s:decode_cell(comment[0]),e:decode_cell(comment[0])};\n\t\t\twrite_record(ba, \"BrtBeginComment\", write_BrtBeginComment([range, c]));\n\t\t\tif(c.t && c.t.length > 0) write_record(ba, \"BrtCommentText\", write_BrtCommentText(c));\n\t\t\twrite_record(ba, \"BrtEndComment\");\n\t\t\tdelete c.iauthor;\n\t\t});\n\t});\n\twrite_record(ba, \"BrtEndCommentList\");\n\n\twrite_record(ba, \"BrtEndComments\");\n\treturn ba.end();\n}\nvar CT_VBA = \"application/vnd.ms-office.vbaProject\";\nfunction make_vba_xls(cfb) {\n\tvar newcfb = CFB.utils.cfb_new({root:\"R\"});\n\tcfb.FullPaths.forEach(function(p, i) {\n\t\tif(p.slice(-1) === \"/\" || !p.match(/_VBA_PROJECT_CUR/)) return;\n\t\tvar newpath = p.replace(/^[^\\/]*/,\"R\").replace(/\\/_VBA_PROJECT_CUR\\u0000*/, \"\");\n\t\tCFB.utils.cfb_add(newcfb, newpath, cfb.FileIndex[i].content);\n\t});\n\treturn CFB.write(newcfb);\n}\n\nfunction fill_vba_xls(cfb, vba) {\n\tvba.FullPaths.forEach(function(p, i) {\n\t\tif(i == 0) return;\n\t\tvar newpath = p.replace(/[^\\/]*[\\/]/, \"/_VBA_PROJECT_CUR/\");\n\t\tif(newpath.slice(-1) !== \"/\") CFB.utils.cfb_add(cfb, newpath, vba.FileIndex[i].content);\n\t});\n}\n\nvar VBAFMTS = [ \"xlsb\", \"xlsm\", \"xlam\", \"biff8\", \"xla\" ];\n\nRELS.DS = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/dialogsheet\";\nRELS.MS = \"http://schemas.microsoft.com/office/2006/relationships/xlMacrosheet\";\n\n/* macro and dialog sheet stubs */\nfunction parse_ds_bin() { return {'!type':'dialog'}; }\nfunction parse_ds_xml() { return {'!type':'dialog'}; }\nfunction parse_ms_bin() { return {'!type':'macro'}; }\nfunction parse_ms_xml() { return {'!type':'macro'}; }\n/* TODO: it will be useful to parse the function str */\nvar rc_to_a1 = (function(){\n\tvar rcregex = /(^|[^A-Za-z_])R(\\[?-?\\d+\\]|[1-9]\\d*|)C(\\[?-?\\d+\\]|[1-9]\\d*|)(?![A-Za-z0-9_])/g;\n\tvar rcbase = ({r:0,c:0});\n\tfunction rcfunc($$,$1,$2,$3) {\n\t\tvar cRel = false, rRel = false;\n\n\t\tif($2.length == 0) rRel = true;\n\t\telse if($2.charAt(0) == \"[\") { rRel = true; $2 = $2.slice(1, -1); }\n\n\t\tif($3.length == 0) cRel = true;\n\t\telse if($3.charAt(0) == \"[\") { cRel = true; $3 = $3.slice(1, -1); }\n\n\t\tvar R = $2.length>0?parseInt($2,10)|0:0, C = $3.length>0?parseInt($3,10)|0:0;\n\n\t\tif(cRel) C += rcbase.c; else --C;\n\t\tif(rRel) R += rcbase.r; else --R;\n\t\treturn $1 + (cRel ? \"\" : \"$\") + encode_col(C) + (rRel ? \"\" : \"$\") + encode_row(R);\n\t}\n\treturn function rc_to_a1(fstr, base) {\n\t\trcbase = base;\n\t\treturn fstr.replace(rcregex, rcfunc);\n\t};\n})();\n\nvar crefregex = /(^|[^._A-Z0-9])([$]?)([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])([$]?)(10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5})(?![_.\\(A-Za-z0-9])/g;\nvar a1_to_rc =(function(){\n\treturn function a1_to_rc(fstr, base) {\n\t\treturn fstr.replace(crefregex, function($0, $1, $2, $3, $4, $5) {\n\t\t\tvar c = decode_col($3) - ($2 ? 0 : base.c);\n\t\t\tvar r = decode_row($5) - ($4 ? 0 : base.r);\n\t\t\tvar R = (r == 0 ? \"\" : !$4 ? \"[\" + r + \"]\" : (r+1));\n\t\t\tvar C = (c == 0 ? \"\" : !$2 ? \"[\" + c + \"]\" : (c+1));\n\t\t\treturn $1 + \"R\" + R + \"C\" + C;\n\t\t});\n\t};\n})();\n\n/* no defined name can collide with a valid cell address A1:XFD1048576 ... except LOG10! */\nfunction shift_formula_str(f, delta) {\n\treturn f.replace(crefregex, function($0, $1, $2, $3, $4, $5) {\n\t\treturn $1+($2==\"$\" ? $2+$3 : encode_col(decode_col($3)+delta.c))+($4==\"$\" ? $4+$5 : encode_row(decode_row($5) + delta.r));\n\t});\n}\n\nfunction shift_formula_xlsx(f, range, cell) {\n\tvar r = decode_range(range), s = r.s, c = decode_cell(cell);\n\tvar delta = {r:c.r - s.r, c:c.c - s.c};\n\treturn shift_formula_str(f, delta);\n}\n\n/* TODO: parse formula */\nfunction fuzzyfmla(f) {\n\tif(f.length == 1) return false;\n\treturn true;\n}\n\nfunction _xlfn(f) {\n\treturn f.replace(/_xlfn\\./g,\"\");\n}\nfunction parseread1(blob) { blob.l+=1; return; }\n\n/* [MS-XLS] 2.5.51 */\nfunction parse_ColRelU(blob, length) {\n\tvar c = blob.read_shift(length == 1 ? 1 : 2);\n\treturn [c & 0x3FFF, (c >> 14) & 1, (c >> 15) & 1];\n}\n\n/* [MS-XLS] 2.5.198.105 ; [MS-XLSB] 2.5.97.89 */\nfunction parse_RgceArea(blob, length, opts) {\n\tvar w = 2;\n\tif(opts) {\n\t\tif(opts.biff >= 2 && opts.biff <= 5) return parse_RgceArea_BIFF2(blob, length, opts);\n\t\telse if(opts.biff == 12) w = 4;\n\t}\n\tvar r=blob.read_shift(w), R=blob.read_shift(w);\n\tvar c=parse_ColRelU(blob, 2);\n\tvar C=parse_ColRelU(blob, 2);\n\treturn { s:{r:r, c:c[0], cRel:c[1], rRel:c[2]}, e:{r:R, c:C[0], cRel:C[1], rRel:C[2]} };\n}\n/* BIFF 2-5 encodes flags in the row field */\nfunction parse_RgceArea_BIFF2(blob) {\n\tvar r=parse_ColRelU(blob, 2), R=parse_ColRelU(blob, 2);\n\tvar c=blob.read_shift(1);\n\tvar C=blob.read_shift(1);\n\treturn { s:{r:r[0], c:c, cRel:r[1], rRel:r[2]}, e:{r:R[0], c:C, cRel:R[1], rRel:R[2]} };\n}\n\n/* [MS-XLS] 2.5.198.105 ; [MS-XLSB] 2.5.97.90 */\nfunction parse_RgceAreaRel(blob, length, opts) {\n\tif(opts.biff < 8) return parse_RgceArea_BIFF2(blob, length, opts);\n\tvar r=blob.read_shift(opts.biff == 12 ? 4 : 2), R=blob.read_shift(opts.biff == 12 ? 4 : 2);\n\tvar c=parse_ColRelU(blob, 2);\n\tvar C=parse_ColRelU(blob, 2);\n\treturn { s:{r:r, c:c[0], cRel:c[1], rRel:c[2]}, e:{r:R, c:C[0], cRel:C[1], rRel:C[2]} };\n}\n\n/* [MS-XLS] 2.5.198.109 ; [MS-XLSB] 2.5.97.91 */\nfunction parse_RgceLoc(blob, length, opts) {\n\tif(opts && opts.biff >= 2 && opts.biff <= 5) return parse_RgceLoc_BIFF2(blob, length, opts);\n\tvar r = blob.read_shift(opts && opts.biff == 12 ? 4 : 2);\n\tvar c = parse_ColRelU(blob, 2);\n\treturn {r:r, c:c[0], cRel:c[1], rRel:c[2]};\n}\nfunction parse_RgceLoc_BIFF2(blob) {\n\tvar r = parse_ColRelU(blob, 2);\n\tvar c = blob.read_shift(1);\n\treturn {r:r[0], c:c, cRel:r[1], rRel:r[2]};\n}\n\n/* [MS-XLS] 2.5.198.107, 2.5.47 */\nfunction parse_RgceElfLoc(blob) {\n\tvar r = blob.read_shift(2);\n\tvar c = blob.read_shift(2);\n\treturn {r:r, c:c & 0xFF, fQuoted:!!(c & 0x4000), cRel:c>>15, rRel:c>>15 };\n}\n\n/* [MS-XLS] 2.5.198.111 ; [MS-XLSB] 2.5.97.92 TODO */\nfunction parse_RgceLocRel(blob, length, opts) {\n\tvar biff = opts && opts.biff ? opts.biff : 8;\n\tif(biff >= 2 && biff <= 5) return parse_RgceLocRel_BIFF2(blob, length, opts);\n\tvar r = blob.read_shift(biff >= 12 ? 4 : 2);\n\tvar cl = blob.read_shift(2);\n\tvar cRel = (cl & 0x4000) >> 14, rRel = (cl & 0x8000) >> 15;\n\tcl &= 0x3FFF;\n\tif(rRel == 1) while(r > 0x7FFFF) r -= 0x100000;\n\tif(cRel == 1) while(cl > 0x1FFF) cl = cl - 0x4000;\n\treturn {r:r,c:cl,cRel:cRel,rRel:rRel};\n}\nfunction parse_RgceLocRel_BIFF2(blob) {\n\tvar rl = blob.read_shift(2);\n\tvar c = blob.read_shift(1);\n\tvar rRel = (rl & 0x8000) >> 15, cRel = (rl & 0x4000) >> 14;\n\trl &= 0x3FFF;\n\tif(rRel == 1 && rl >= 0x2000) rl = rl - 0x4000;\n\tif(cRel == 1 && c >= 0x80) c = c - 0x100;\n\treturn {r:rl,c:c,cRel:cRel,rRel:rRel};\n}\n\n/* [MS-XLS] 2.5.198.27 ; [MS-XLSB] 2.5.97.18 */\nfunction parse_PtgArea(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar area = parse_RgceArea(blob, opts.biff >= 2 && opts.biff <= 5 ? 6 : 8, opts);\n\treturn [type, area];\n}\n\n/* [MS-XLS] 2.5.198.28 ; [MS-XLSB] 2.5.97.19 */\nfunction parse_PtgArea3d(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar ixti = blob.read_shift(2, 'i');\n\tvar w = 8;\n\tif(opts) switch(opts.biff) {\n\t\tcase 5: blob.l += 12; w = 6; break;\n\t\tcase 12: w = 12; break;\n\t}\n\tvar area = parse_RgceArea(blob, w, opts);\n\treturn [type, ixti, area];\n}\n\n/* [MS-XLS] 2.5.198.29 ; [MS-XLSB] 2.5.97.20 */\nfunction parse_PtgAreaErr(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tblob.l += opts && (opts.biff > 8) ? 12 : (opts.biff < 8 ? 6 : 8);\n\treturn [type];\n}\n/* [MS-XLS] 2.5.198.30 ; [MS-XLSB] 2.5.97.21 */\nfunction parse_PtgAreaErr3d(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar ixti = blob.read_shift(2);\n\tvar w = 8;\n\tif(opts) switch(opts.biff) {\n\t\tcase 5: blob.l += 12; w = 6; break;\n\t\tcase 12: w = 12; break;\n\t}\n\tblob.l += w;\n\treturn [type, ixti];\n}\n\n/* [MS-XLS] 2.5.198.31 ; [MS-XLSB] 2.5.97.22 */\nfunction parse_PtgAreaN(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar area = parse_RgceAreaRel(blob, length - 1, opts);\n\treturn [type, area];\n}\n\n/* [MS-XLS] 2.5.198.32 ; [MS-XLSB] 2.5.97.23 */\nfunction parse_PtgArray(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tblob.l += opts.biff == 2 ? 6 : opts.biff == 12 ? 14 : 7;\n\treturn [type];\n}\n\n/* [MS-XLS] 2.5.198.33 ; [MS-XLSB] 2.5.97.24 */\nfunction parse_PtgAttrBaxcel(blob) {\n\tvar bitSemi = blob[blob.l+1] & 0x01; /* 1 = volatile */\n\tvar bitBaxcel = 1;\n\tblob.l += 4;\n\treturn [bitSemi, bitBaxcel];\n}\n\n/* [MS-XLS] 2.5.198.34 ; [MS-XLSB] 2.5.97.25 */\nfunction parse_PtgAttrChoose(blob, length, opts) {\n\tblob.l +=2;\n\tvar offset = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\tvar o = [];\n\t/* offset is 1 less than the number of elements */\n\tfor(var i = 0; i <= offset; ++i) o.push(blob.read_shift(opts && opts.biff == 2 ? 1 : 2));\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.198.35 ; [MS-XLSB] 2.5.97.26 */\nfunction parse_PtgAttrGoto(blob, length, opts) {\n\tvar bitGoto = (blob[blob.l+1] & 0xFF) ? 1 : 0;\n\tblob.l += 2;\n\treturn [bitGoto, blob.read_shift(opts && opts.biff == 2 ? 1 : 2)];\n}\n\n/* [MS-XLS] 2.5.198.36 ; [MS-XLSB] 2.5.97.27 */\nfunction parse_PtgAttrIf(blob, length, opts) {\n\tvar bitIf = (blob[blob.l+1] & 0xFF) ? 1 : 0;\n\tblob.l += 2;\n\treturn [bitIf, blob.read_shift(opts && opts.biff == 2 ? 1 : 2)];\n}\n\n/* [MS-XLSB] 2.5.97.28 */\nfunction parse_PtgAttrIfError(blob) {\n\tvar bitIf = (blob[blob.l+1] & 0xFF) ? 1 : 0;\n\tblob.l += 2;\n\treturn [bitIf, blob.read_shift(2)];\n}\n\n/* [MS-XLS] 2.5.198.37 ; [MS-XLSB] 2.5.97.29 */\nfunction parse_PtgAttrSemi(blob, length, opts) {\n\tvar bitSemi = (blob[blob.l+1] & 0xFF) ? 1 : 0;\n\tblob.l += opts && opts.biff == 2 ? 3 : 4;\n\treturn [bitSemi];\n}\n\n/* [MS-XLS] 2.5.198.40 ; [MS-XLSB] 2.5.97.32 */\nfunction parse_PtgAttrSpaceType(blob) {\n\tvar type = blob.read_shift(1), cch = blob.read_shift(1);\n\treturn [type, cch];\n}\n\n/* [MS-XLS] 2.5.198.38 ; [MS-XLSB] 2.5.97.30 */\nfunction parse_PtgAttrSpace(blob) {\n\tblob.read_shift(2);\n\treturn parse_PtgAttrSpaceType(blob, 2);\n}\n\n/* [MS-XLS] 2.5.198.39 ; [MS-XLSB] 2.5.97.31 */\nfunction parse_PtgAttrSpaceSemi(blob) {\n\tblob.read_shift(2);\n\treturn parse_PtgAttrSpaceType(blob, 2);\n}\n\n/* [MS-XLS] 2.5.198.84 ; [MS-XLSB] 2.5.97.68 TODO */\nfunction parse_PtgRef(blob, length, opts) {\n\t//var ptg = blob[blob.l] & 0x1F;\n\tvar type = (blob[blob.l] & 0x60)>>5;\n\tblob.l += 1;\n\tvar loc = parse_RgceLoc(blob, 0, opts);\n\treturn [type, loc];\n}\n\n/* [MS-XLS] 2.5.198.88 ; [MS-XLSB] 2.5.97.72 TODO */\nfunction parse_PtgRefN(blob, length, opts) {\n\tvar type = (blob[blob.l] & 0x60)>>5;\n\tblob.l += 1;\n\tvar loc = parse_RgceLocRel(blob, 0, opts);\n\treturn [type, loc];\n}\n\n/* [MS-XLS] 2.5.198.85 ; [MS-XLSB] 2.5.97.69 TODO */\nfunction parse_PtgRef3d(blob, length, opts) {\n\tvar type = (blob[blob.l] & 0x60)>>5;\n\tblob.l += 1;\n\tvar ixti = blob.read_shift(2); // XtiIndex\n\tif(opts && opts.biff == 5) blob.l += 12;\n\tvar loc = parse_RgceLoc(blob, 0, opts); // TODO: or RgceLocRel\n\treturn [type, ixti, loc];\n}\n\n\n/* [MS-XLS] 2.5.198.62 ; [MS-XLSB] 2.5.97.45 TODO */\nfunction parse_PtgFunc(blob, length, opts) {\n\t//var ptg = blob[blob.l] & 0x1F;\n\tvar type = (blob[blob.l] & 0x60)>>5;\n\tblob.l += 1;\n\tvar iftab = blob.read_shift(opts && opts.biff <= 3 ? 1 : 2);\n\treturn [FtabArgc[iftab], Ftab[iftab], type];\n}\n/* [MS-XLS] 2.5.198.63 ; [MS-XLSB] 2.5.97.46 TODO */\nfunction parse_PtgFuncVar(blob, length, opts) {\n\tvar type = blob[blob.l++];\n\tvar cparams = blob.read_shift(1), tab = opts && opts.biff <= 3 ? [(type == 0x58 ? -1 : 0), blob.read_shift(1)]: parsetab(blob);\n\treturn [cparams, (tab[0] === 0 ? Ftab : Cetab)[tab[1]]];\n}\n\nfunction parsetab(blob) {\n\treturn [blob[blob.l+1]>>7, blob.read_shift(2) & 0x7FFF];\n}\n\n/* [MS-XLS] 2.5.198.41 ; [MS-XLSB] 2.5.97.33 */\nfunction parse_PtgAttrSum(blob, length, opts) {\n\tblob.l += opts && opts.biff == 2 ? 3 : 4; return;\n}\n\n/* [MS-XLS] 2.5.198.58 ; [MS-XLSB] 2.5.97.40 */\nfunction parse_PtgExp(blob, length, opts) {\n\tblob.l++;\n\tif(opts && opts.biff == 12) return [blob.read_shift(4, 'i'), 0];\n\tvar row = blob.read_shift(2);\n\tvar col = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\treturn [row, col];\n}\n\n/* [MS-XLS] 2.5.198.57 ; [MS-XLSB] 2.5.97.39 */\nfunction parse_PtgErr(blob) { blob.l++; return BErr[blob.read_shift(1)]; }\n\n/* [MS-XLS] 2.5.198.66 ; [MS-XLSB] 2.5.97.49 */\nfunction parse_PtgInt(blob) { blob.l++; return blob.read_shift(2); }\n\n/* [MS-XLS] 2.5.198.42 ; [MS-XLSB] 2.5.97.34 */\nfunction parse_PtgBool(blob) { blob.l++; return blob.read_shift(1)!==0;}\n\n/* [MS-XLS] 2.5.198.79 ; [MS-XLSB] 2.5.97.63 */\nfunction parse_PtgNum(blob) { blob.l++; return parse_Xnum(blob, 8); }\n\n/* [MS-XLS] 2.5.198.89 ; [MS-XLSB] 2.5.97.74 */\nfunction parse_PtgStr(blob, length, opts) { blob.l++; return parse_ShortXLUnicodeString(blob, length-1, opts); }\n\n/* [MS-XLS] 2.5.192.112 + 2.5.192.11{3,4,5,6,7} */\n/* [MS-XLSB] 2.5.97.93 + 2.5.97.9{4,5,6,7} */\nfunction parse_SerAr(blob, biff) {\n\tvar val = [blob.read_shift(1)];\n\tif(biff == 12) switch(val[0]) {\n\t\tcase 0x02: val[0] = 0x04; break; /* SerBool */\n\t\tcase 0x04: val[0] = 0x10; break; /* SerErr */\n\t\tcase 0x00: val[0] = 0x01; break; /* SerNum */\n\t\tcase 0x01: val[0] = 0x02; break; /* SerStr */\n\t}\n\tswitch(val[0]) {\n\t\tcase 0x04: /* SerBool -- boolean */\n\t\t\tval[1] = parsebool(blob, 1) ? 'TRUE' : 'FALSE';\n\t\t\tif(biff != 12) blob.l += 7; break;\n\t\tcase 0x25: /* appears to be an alias */\n\t\tcase 0x10: /* SerErr -- error */\n\t\t\tval[1] = BErr[blob[blob.l]];\n\t\t\tblob.l += ((biff == 12) ? 4 : 8); break;\n\t\tcase 0x00: /* SerNil -- honestly, I'm not sure how to reproduce this */\n\t\t\tblob.l += 8; break;\n\t\tcase 0x01: /* SerNum -- Xnum */\n\t\t\tval[1] = parse_Xnum(blob, 8); break;\n\t\tcase 0x02: /* SerStr -- XLUnicodeString (<256 chars) */\n\t\t\tval[1] = parse_XLUnicodeString2(blob, 0, {biff:biff > 0 && biff < 8 ? 2 : biff}); break;\n\t\tdefault: throw new Error(\"Bad SerAr: \" + val[0]); /* Unreachable */\n\t}\n\treturn val;\n}\n\n/* [MS-XLS] 2.5.198.61 ; [MS-XLSB] 2.5.97.44 */\nfunction parse_PtgExtraMem(blob, cce, opts) {\n\tvar count = blob.read_shift((opts.biff == 12) ? 4 : 2);\n\tvar out = [];\n\tfor(var i = 0; i != count; ++i) out.push(((opts.biff == 12) ? parse_UncheckedRfX : parse_Ref8U)(blob, 8));\n\treturn out;\n}\n\n/* [MS-XLS] 2.5.198.59 ; [MS-XLSB] 2.5.97.41 */\nfunction parse_PtgExtraArray(blob, length, opts) {\n\tvar rows = 0, cols = 0;\n\tif(opts.biff == 12) {\n\t\trows = blob.read_shift(4); // DRw\n\t\tcols = blob.read_shift(4); // DCol\n\t} else {\n\t\tcols = 1 + blob.read_shift(1); //DColByteU\n\t\trows = 1 + blob.read_shift(2); //DRw\n\t}\n\tif(opts.biff >= 2 && opts.biff < 8) { --rows; if(--cols == 0) cols = 0x100; }\n\t// $FlowIgnore\n\tfor(var i = 0, o = []; i != rows && (o[i] = []); ++i)\n\t\tfor(var j = 0; j != cols; ++j) o[i][j] = parse_SerAr(blob, opts.biff);\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.198.76 ; [MS-XLSB] 2.5.97.60 */\nfunction parse_PtgName(blob, length, opts) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar w = (!opts || (opts.biff >= 8)) ? 4 : 2;\n\tvar nameindex = blob.read_shift(w);\n\tswitch(opts.biff) {\n\t\tcase 2: blob.l += 5; break;\n\t\tcase 3: case 4: blob.l += 8; break;\n\t\tcase 5: blob.l += 12; break;\n\t}\n\treturn [type, 0, nameindex];\n}\n\n/* [MS-XLS] 2.5.198.77 ; [MS-XLSB] 2.5.97.61 */\nfunction parse_PtgNameX(blob, length, opts) {\n\tif(opts.biff == 5) return parse_PtgNameX_BIFF5(blob, length, opts);\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar ixti = blob.read_shift(2); // XtiIndex\n\tvar nameindex = blob.read_shift(4);\n\treturn [type, ixti, nameindex];\n}\nfunction parse_PtgNameX_BIFF5(blob) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar ixti = blob.read_shift(2, 'i'); // XtiIndex\n\tblob.l += 8;\n\tvar nameindex = blob.read_shift(2);\n\tblob.l += 12;\n\treturn [type, ixti, nameindex];\n}\n\n/* [MS-XLS] 2.5.198.70 ; [MS-XLSB] 2.5.97.54 */\nfunction parse_PtgMemArea(blob, length, opts) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tblob.l += (opts && opts.biff == 2 ? 3 : 4);\n\tvar cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\treturn [type, cce];\n}\n\n/* [MS-XLS] 2.5.198.72 ; [MS-XLSB] 2.5.97.56 */\nfunction parse_PtgMemFunc(blob, length, opts) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\treturn [type, cce];\n}\n\n\n/* [MS-XLS] 2.5.198.86 ; [MS-XLSB] 2.5.97.69 */\nfunction parse_PtgRefErr(blob, length, opts) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tblob.l += 4;\n\tif(opts.biff < 8) blob.l--;\n\tif(opts.biff == 12) blob.l += 2;\n\treturn [type];\n}\n\n/* [MS-XLS] 2.5.198.87 ; [MS-XLSB] 2.5.97.71 */\nfunction parse_PtgRefErr3d(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar ixti = blob.read_shift(2);\n\tvar w = 4;\n\tif(opts) switch(opts.biff) {\n\t\tcase 5: w = 15; break;\n\t\tcase 12: w = 6; break;\n\t}\n\tblob.l += w;\n\treturn [type, ixti];\n}\n\n/* [MS-XLS] 2.5.198.71 ; [MS-XLSB] 2.5.97.55 */\nvar parse_PtgMemErr = parsenoop;\n/* [MS-XLS] 2.5.198.73 ; [MS-XLSB] 2.5.97.57 */\nvar parse_PtgMemNoMem = parsenoop;\n/* [MS-XLS] 2.5.198.92 */\nvar parse_PtgTbl = parsenoop;\n\nfunction parse_PtgElfLoc(blob, length, opts) {\n\tblob.l += 2;\n\treturn [parse_RgceElfLoc(blob, 4, opts)];\n}\nfunction parse_PtgElfNoop(blob) {\n\tblob.l += 6;\n\treturn [];\n}\n/* [MS-XLS] 2.5.198.46 */\nvar parse_PtgElfCol = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.47 */\nvar parse_PtgElfColS = parse_PtgElfNoop;\n/* [MS-XLS] 2.5.198.48 */\nvar parse_PtgElfColSV = parse_PtgElfNoop;\n/* [MS-XLS] 2.5.198.49 */\nvar parse_PtgElfColV = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.50 */\nfunction parse_PtgElfLel(blob) {\n\tblob.l += 2;\n\treturn [parseuint16(blob), blob.read_shift(2) & 0x01];\n}\n/* [MS-XLS] 2.5.198.51 */\nvar parse_PtgElfRadical = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.52 */\nvar parse_PtgElfRadicalLel = parse_PtgElfLel;\n/* [MS-XLS] 2.5.198.53 */\nvar parse_PtgElfRadicalS = parse_PtgElfNoop;\n/* [MS-XLS] 2.5.198.54 */\nvar parse_PtgElfRw = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.55 */\nvar parse_PtgElfRwV = parse_PtgElfLoc;\n\n/* [MS-XLSB] 2.5.97.52 TODO */\nvar PtgListRT = [\n\t\"Data\",\n\t\"All\",\n\t\"Headers\",\n\t\"??\",\n\t\"?Data2\",\n\t\"??\",\n\t\"?DataHeaders\",\n\t\"??\",\n\t\"Totals\",\n\t\"??\",\n\t\"??\",\n\t\"??\",\n\t\"?DataTotals\",\n\t\"??\",\n\t\"??\",\n\t\"??\",\n\t\"?Current\"\n];\nfunction parse_PtgList(blob) {\n\tblob.l += 2;\n\tvar ixti = blob.read_shift(2);\n\tvar flags = blob.read_shift(2);\n\tvar idx = blob.read_shift(4);\n\tvar c = blob.read_shift(2);\n\tvar C = blob.read_shift(2);\n\tvar rt = PtgListRT[(flags >> 2) & 0x1F];\n\treturn {ixti: ixti, coltype:(flags&0x3), rt:rt, idx:idx, c:c, C:C};\n}\n/* [MS-XLS] 2.5.198.91 ; [MS-XLSB] 2.5.97.76 */\nfunction parse_PtgSxName(blob) {\n\tblob.l += 2;\n\treturn [blob.read_shift(4)];\n}\n\n/* [XLS] old spec */\nfunction parse_PtgSheet(blob, length, opts) {\n\tblob.l += 5;\n\tblob.l += 2;\n\tblob.l += (opts.biff == 2 ? 1 : 4);\n\treturn [\"PTGSHEET\"];\n}\nfunction parse_PtgEndSheet(blob, length, opts) {\n\tblob.l += (opts.biff == 2 ? 4 : 5);\n\treturn [\"PTGENDSHEET\"];\n}\nfunction parse_PtgMemAreaN(blob) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar cce = blob.read_shift(2);\n\treturn [type, cce];\n}\nfunction parse_PtgMemNoMemN(blob) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar cce = blob.read_shift(2);\n\treturn [type, cce];\n}\nfunction parse_PtgAttrNoop(blob) {\n\tblob.l += 4;\n\treturn [0, 0];\n}\n\n/* [MS-XLS] 2.5.198.25 ; [MS-XLSB] 2.5.97.16 */\nvar PtgTypes = {\n0x01: { n:'PtgExp', f:parse_PtgExp },\n0x02: { n:'PtgTbl', f:parse_PtgTbl },\n0x03: { n:'PtgAdd', f:parseread1 },\n0x04: { n:'PtgSub', f:parseread1 },\n0x05: { n:'PtgMul', f:parseread1 },\n0x06: { n:'PtgDiv', f:parseread1 },\n0x07: { n:'PtgPower', f:parseread1 },\n0x08: { n:'PtgConcat', f:parseread1 },\n0x09: { n:'PtgLt', f:parseread1 },\n0x0A: { n:'PtgLe', f:parseread1 },\n0x0B: { n:'PtgEq', f:parseread1 },\n0x0C: { n:'PtgGe', f:parseread1 },\n0x0D: { n:'PtgGt', f:parseread1 },\n0x0E: { n:'PtgNe', f:parseread1 },\n0x0F: { n:'PtgIsect', f:parseread1 },\n0x10: { n:'PtgUnion', f:parseread1 },\n0x11: { n:'PtgRange', f:parseread1 },\n0x12: { n:'PtgUplus', f:parseread1 },\n0x13: { n:'PtgUminus', f:parseread1 },\n0x14: { n:'PtgPercent', f:parseread1 },\n0x15: { n:'PtgParen', f:parseread1 },\n0x16: { n:'PtgMissArg', f:parseread1 },\n0x17: { n:'PtgStr', f:parse_PtgStr },\n0x1A: { n:'PtgSheet', f:parse_PtgSheet },\n0x1B: { n:'PtgEndSheet', f:parse_PtgEndSheet },\n0x1C: { n:'PtgErr', f:parse_PtgErr },\n0x1D: { n:'PtgBool', f:parse_PtgBool },\n0x1E: { n:'PtgInt', f:parse_PtgInt },\n0x1F: { n:'PtgNum', f:parse_PtgNum },\n0x20: { n:'PtgArray', f:parse_PtgArray },\n0x21: { n:'PtgFunc', f:parse_PtgFunc },\n0x22: { n:'PtgFuncVar', f:parse_PtgFuncVar },\n0x23: { n:'PtgName', f:parse_PtgName },\n0x24: { n:'PtgRef', f:parse_PtgRef },\n0x25: { n:'PtgArea', f:parse_PtgArea },\n0x26: { n:'PtgMemArea', f:parse_PtgMemArea },\n0x27: { n:'PtgMemErr', f:parse_PtgMemErr },\n0x28: { n:'PtgMemNoMem', f:parse_PtgMemNoMem },\n0x29: { n:'PtgMemFunc', f:parse_PtgMemFunc },\n0x2A: { n:'PtgRefErr', f:parse_PtgRefErr },\n0x2B: { n:'PtgAreaErr', f:parse_PtgAreaErr },\n0x2C: { n:'PtgRefN', f:parse_PtgRefN },\n0x2D: { n:'PtgAreaN', f:parse_PtgAreaN },\n0x2E: { n:'PtgMemAreaN', f:parse_PtgMemAreaN },\n0x2F: { n:'PtgMemNoMemN', f:parse_PtgMemNoMemN },\n0x39: { n:'PtgNameX', f:parse_PtgNameX },\n0x3A: { n:'PtgRef3d', f:parse_PtgRef3d },\n0x3B: { n:'PtgArea3d', f:parse_PtgArea3d },\n0x3C: { n:'PtgRefErr3d', f:parse_PtgRefErr3d },\n0x3D: { n:'PtgAreaErr3d', f:parse_PtgAreaErr3d },\n0xFF: {}\n};\n/* These are duplicated in the PtgTypes table */\nvar PtgDupes = {\n0x40: 0x20, 0x60: 0x20,\n0x41: 0x21, 0x61: 0x21,\n0x42: 0x22, 0x62: 0x22,\n0x43: 0x23, 0x63: 0x23,\n0x44: 0x24, 0x64: 0x24,\n0x45: 0x25, 0x65: 0x25,\n0x46: 0x26, 0x66: 0x26,\n0x47: 0x27, 0x67: 0x27,\n0x48: 0x28, 0x68: 0x28,\n0x49: 0x29, 0x69: 0x29,\n0x4A: 0x2A, 0x6A: 0x2A,\n0x4B: 0x2B, 0x6B: 0x2B,\n0x4C: 0x2C, 0x6C: 0x2C,\n0x4D: 0x2D, 0x6D: 0x2D,\n0x4E: 0x2E, 0x6E: 0x2E,\n0x4F: 0x2F, 0x6F: 0x2F,\n0x58: 0x22, 0x78: 0x22,\n0x59: 0x39, 0x79: 0x39,\n0x5A: 0x3A, 0x7A: 0x3A,\n0x5B: 0x3B, 0x7B: 0x3B,\n0x5C: 0x3C, 0x7C: 0x3C,\n0x5D: 0x3D, 0x7D: 0x3D\n};\n(function(){for(var y in PtgDupes) PtgTypes[y] = PtgTypes[PtgDupes[y]];})();\n\nvar Ptg18 = {\n0x01: { n:'PtgElfLel', f:parse_PtgElfLel },\n0x02: { n:'PtgElfRw', f:parse_PtgElfRw },\n0x03: { n:'PtgElfCol', f:parse_PtgElfCol },\n0x06: { n:'PtgElfRwV', f:parse_PtgElfRwV },\n0x07: { n:'PtgElfColV', f:parse_PtgElfColV },\n0x0A: { n:'PtgElfRadical', f:parse_PtgElfRadical },\n0x0B: { n:'PtgElfRadicalS', f:parse_PtgElfRadicalS },\n0x0D: { n:'PtgElfColS', f:parse_PtgElfColS },\n0x0F: { n:'PtgElfColSV', f:parse_PtgElfColSV },\n0x10: { n:'PtgElfRadicalLel', f:parse_PtgElfRadicalLel },\n0x19: { n:'PtgList', f:parse_PtgList },\n0x1D: { n:'PtgSxName', f:parse_PtgSxName },\n0xFF: {}\n};\nvar Ptg19 = {\n0x00: { n:'PtgAttrNoop', f:parse_PtgAttrNoop },\n0x01: { n:'PtgAttrSemi', f:parse_PtgAttrSemi },\n0x02: { n:'PtgAttrIf', f:parse_PtgAttrIf },\n0x04: { n:'PtgAttrChoose', f:parse_PtgAttrChoose },\n0x08: { n:'PtgAttrGoto', f:parse_PtgAttrGoto },\n0x10: { n:'PtgAttrSum', f:parse_PtgAttrSum },\n0x20: { n:'PtgAttrBaxcel', f:parse_PtgAttrBaxcel },\n0x40: { n:'PtgAttrSpace', f:parse_PtgAttrSpace },\n0x41: { n:'PtgAttrSpaceSemi', f:parse_PtgAttrSpaceSemi },\n0x80: { n:'PtgAttrIfError', f:parse_PtgAttrIfError },\n0xFF: {}\n};\nPtg19[0x21] = Ptg19[0x20];\n\n/* [MS-XLS] 2.5.198.103 ; [MS-XLSB] 2.5.97.87 */\nfunction parse_RgbExtra(blob, length, rgce, opts) {\n\tif(opts.biff < 8) return parsenoop(blob, length);\n\tvar target = blob.l + length;\n\tvar o = [];\n\tfor(var i = 0; i !== rgce.length; ++i) {\n\t\tswitch(rgce[i][0]) {\n\t\t\tcase 'PtgArray': /* PtgArray -> PtgExtraArray */\n\t\t\t\trgce[i][1] = parse_PtgExtraArray(blob, 0, opts);\n\t\t\t\to.push(rgce[i][1]);\n\t\t\t\tbreak;\n\t\t\tcase 'PtgMemArea': /* PtgMemArea -> PtgExtraMem */\n\t\t\t\trgce[i][2] = parse_PtgExtraMem(blob, rgce[i][1], opts);\n\t\t\t\to.push(rgce[i][2]);\n\t\t\t\tbreak;\n\t\t\tcase 'PtgExp': /* PtgExp -> PtgExtraCol */\n\t\t\t\tif(opts && opts.biff == 12) {\n\t\t\t\t\trgce[i][1][1] = blob.read_shift(4);\n\t\t\t\t\to.push(rgce[i][1]);\n\t\t\t\t} break;\n\t\t\tcase 'PtgList': /* TODO: PtgList -> PtgExtraList */\n\t\t\tcase 'PtgElfRadicalS': /* TODO: PtgElfRadicalS -> PtgExtraElf */\n\t\t\tcase 'PtgElfColS': /* TODO: PtgElfColS -> PtgExtraElf */\n\t\t\tcase 'PtgElfColSV': /* TODO: PtgElfColSV -> PtgExtraElf */\n\t\t\t\tthrow \"Unsupported \" + rgce[i][0];\n\t\t\tdefault: break;\n\t\t}\n\t}\n\tlength = target - blob.l;\n\t/* note: this is technically an error but Excel disregards */\n\t//if(target !== blob.l && blob.l !== target - length) throw new Error(target + \" != \" + blob.l);\n\tif(length !== 0) o.push(parsenoop(blob, length));\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.198.104 ; [MS-XLSB] 2.5.97.88 */\nfunction parse_Rgce(blob, length, opts) {\n\tvar target = blob.l + length;\n\tvar R, id, ptgs = [];\n\twhile(target != blob.l) {\n\t\tlength = target - blob.l;\n\t\tid = blob[blob.l];\n\t\tR = PtgTypes[id];\n\t\tif(id === 0x18 || id === 0x19) R = (id === 0x18 ? Ptg18 : Ptg19)[blob[blob.l + 1]];\n\t\tif(!R || !R.f) { /*ptgs.push*/(parsenoop(blob, length)); }\n\t\telse { ptgs.push([R.n, R.f(blob, length, opts)]); }\n\t}\n\treturn ptgs;\n}\n\nfunction stringify_array(f) {\n\tvar o = [];\n\tfor(var i = 0; i < f.length; ++i) {\n\t\tvar x = f[i], r = [];\n\t\tfor(var j = 0; j < x.length; ++j) {\n\t\t\tvar y = x[j];\n\t\t\tif(y) switch(y[0]) {\n\t\t\t\t// TODO: handle embedded quotes\n\t\t\t\tcase 0x02:\nr.push('\"' + y[1].replace(/\"/g,'\"\"') + '\"'); break;\n\t\t\t\tdefault: r.push(y[1]);\n\t\t\t} else r.push(\"\");\n\t\t}\n\t\to.push(r.join(\",\"));\n\t}\n\treturn o.join(\";\");\n}\n\n/* [MS-XLS] 2.2.2 ; [MS-XLSB] 2.2.2 TODO */\nvar PtgBinOp = {\n\tPtgAdd: \"+\",\n\tPtgConcat: \"&\",\n\tPtgDiv: \"/\",\n\tPtgEq: \"=\",\n\tPtgGe: \">=\",\n\tPtgGt: \">\",\n\tPtgLe: \"<=\",\n\tPtgLt: \"<\",\n\tPtgMul: \"*\",\n\tPtgNe: \"<>\",\n\tPtgPower: \"^\",\n\tPtgSub: \"-\"\n};\n\n// List of invalid characters needs to be tested further\nvar quoteCharacters = new RegExp(/[^\\w\\u4E00-\\u9FFF\\u3040-\\u30FF]/);\nfunction formula_quote_sheet_name(sname, opts) {\n\tif(!sname && !(opts && opts.biff <= 5 && opts.biff >= 2)) throw new Error(\"empty sheet name\");\n\tif (quoteCharacters.test(sname)) return \"'\" + sname + \"'\";\n\treturn sname;\n}\nfunction get_ixti_raw(supbooks, ixti, opts) {\n\tif(!supbooks) return \"SH33TJSERR0\";\n\tif(opts.biff > 8 && (!supbooks.XTI || !supbooks.XTI[ixti])) return supbooks.SheetNames[ixti];\n\tif(!supbooks.XTI) return \"SH33TJSERR6\";\n\tvar XTI = supbooks.XTI[ixti];\n\tif(opts.biff < 8) {\n\t\tif(ixti > 10000) ixti-= 65536;\n\t\tif(ixti < 0) ixti = -ixti;\n\t\treturn ixti == 0 ? \"\" : supbooks.XTI[ixti - 1];\n\t}\n\tif(!XTI) return \"SH33TJSERR1\";\n\tvar o = \"\";\n\tif(opts.biff > 8) switch(supbooks[XTI[0]][0]) {\n\t\tcase 0x0165: /* 'BrtSupSelf' */\n\t\t\to = XTI[1] == -1 ? \"#REF\" : supbooks.SheetNames[XTI[1]];\n\t\t\treturn XTI[1] == XTI[2] ? o : o + \":\" + supbooks.SheetNames[XTI[2]];\n\t\tcase 0x0166: /* 'BrtSupSame' */\n\t\t\tif(opts.SID != null) return supbooks.SheetNames[opts.SID];\n\t\t\treturn \"SH33TJSSAME\" + supbooks[XTI[0]][0];\n\t\tcase 0x0163: /* 'BrtSupBookSrc' */\n\t\t\t/* falls through */\n\t\tdefault: return \"SH33TJSSRC\" + supbooks[XTI[0]][0];\n\t}\n\tswitch(supbooks[XTI[0]][0][0]) {\n\t\tcase 0x0401:\n\t\t\to = XTI[1] == -1 ? \"#REF\" : (supbooks.SheetNames[XTI[1]] || \"SH33TJSERR3\");\n\t\t\treturn XTI[1] == XTI[2] ? o : o + \":\" + supbooks.SheetNames[XTI[2]];\n\t\tcase 0x3A01: return supbooks[XTI[0]].slice(1).map(function(name) { return name.Name; }).join(\";;\"); //return \"SH33TJSERR8\";\n\t\tdefault:\n\t\t\tif(!supbooks[XTI[0]][0][3]) return \"SH33TJSERR2\";\n\t\t\to = XTI[1] == -1 ? \"#REF\" : (supbooks[XTI[0]][0][3][XTI[1]] || \"SH33TJSERR4\");\n\t\t\treturn XTI[1] == XTI[2] ? o : o + \":\" + supbooks[XTI[0]][0][3][XTI[2]];\n\t}\n}\nfunction get_ixti(supbooks, ixti, opts) {\n\treturn formula_quote_sheet_name(get_ixti_raw(supbooks, ixti, opts), opts);\n}\nfunction stringify_formula(formula/*Array*/, range, cell, supbooks, opts) {\n\tvar biff = (opts && opts.biff) || 8;\n\tvar _range = /*range != null ? range :*/ {s:{c:0, r:0},e:{c:0, r:0}};\n\tvar stack = [], e1, e2, c, ixti=0, nameidx=0, r, sname=\"\";\n\tif(!formula[0] || !formula[0][0]) return \"\";\n\tvar last_sp = -1, sp = \"\";\n\tfor(var ff = 0, fflen = formula[0].length; ff < fflen; ++ff) {\n\t\tvar f = formula[0][ff];\n\t\tswitch(f[0]) {\n\t\t\tcase 'PtgUminus': /* [MS-XLS] 2.5.198.93 */\n\t\t\t\tstack.push(\"-\" + stack.pop()); break;\n\t\t\tcase 'PtgUplus': /* [MS-XLS] 2.5.198.95 */\n\t\t\t\tstack.push(\"+\" + stack.pop()); break;\n\t\t\tcase 'PtgPercent': /* [MS-XLS] 2.5.198.81 */\n\t\t\t\tstack.push(stack.pop() + \"%\"); break;\n\n\t\t\tcase 'PtgAdd': /* [MS-XLS] 2.5.198.26 */\n\t\t\tcase 'PtgConcat': /* [MS-XLS] 2.5.198.43 */\n\t\t\tcase 'PtgDiv': /* [MS-XLS] 2.5.198.45 */\n\t\t\tcase 'PtgEq': /* [MS-XLS] 2.5.198.56 */\n\t\t\tcase 'PtgGe': /* [MS-XLS] 2.5.198.64 */\n\t\t\tcase 'PtgGt': /* [MS-XLS] 2.5.198.65 */\n\t\t\tcase 'PtgLe': /* [MS-XLS] 2.5.198.68 */\n\t\t\tcase 'PtgLt': /* [MS-XLS] 2.5.198.69 */\n\t\t\tcase 'PtgMul': /* [MS-XLS] 2.5.198.75 */\n\t\t\tcase 'PtgNe': /* [MS-XLS] 2.5.198.78 */\n\t\t\tcase 'PtgPower': /* [MS-XLS] 2.5.198.82 */\n\t\t\tcase 'PtgSub': /* [MS-XLS] 2.5.198.90 */\n\t\t\t\te1 = stack.pop(); e2 = stack.pop();\n\t\t\t\tif(last_sp >= 0) {\n\t\t\t\t\tswitch(formula[0][last_sp][1][0]) {\n\t\t\t\t\t\tcase 0:\n\t\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\t\tsp = fill(\" \", formula[0][last_sp][1][1]); break;\n\t\t\t\t\t\tcase 1:\n\t\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\t\tsp = fill(\"\\r\", formula[0][last_sp][1][1]); break;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tsp = \"\";\n\t\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\t\tif(opts.WTF) throw new Error(\"Unexpected PtgAttrSpaceType \" + formula[0][last_sp][1][0]);\n\t\t\t\t\t}\n\t\t\t\t\te2 = e2 + sp;\n\t\t\t\t\tlast_sp = -1;\n\t\t\t\t}\n\t\t\t\tstack.push(e2+PtgBinOp[f[0]]+e1);\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgIsect': /* [MS-XLS] 2.5.198.67 */\n\t\t\t\te1 = stack.pop(); e2 = stack.pop();\n\t\t\t\tstack.push(e2+\" \"+e1);\n\t\t\t\tbreak;\n\t\t\tcase 'PtgUnion': /* [MS-XLS] 2.5.198.94 */\n\t\t\t\te1 = stack.pop(); e2 = stack.pop();\n\t\t\t\tstack.push(e2+\",\"+e1);\n\t\t\t\tbreak;\n\t\t\tcase 'PtgRange': /* [MS-XLS] 2.5.198.83 */\n\t\t\t\te1 = stack.pop(); e2 = stack.pop();\n\t\t\t\tstack.push(e2+\":\"+e1);\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgAttrChoose': /* [MS-XLS] 2.5.198.34 */\n\t\t\t\tbreak;\n\t\t\tcase 'PtgAttrGoto': /* [MS-XLS] 2.5.198.35 */\n\t\t\t\tbreak;\n\t\t\tcase 'PtgAttrIf': /* [MS-XLS] 2.5.198.36 */\n\t\t\t\tbreak;\n\t\t\tcase 'PtgAttrIfError': /* [MS-XLSB] 2.5.97.28 */\n\t\t\t\tbreak;\n\n\n\t\t\tcase 'PtgRef': /* [MS-XLS] 2.5.198.84 */\nc = shift_cell_xls((f[1][1]), _range, opts);\n\t\t\t\tstack.push(encode_cell_xls(c, biff));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgRefN': /* [MS-XLS] 2.5.198.88 */\nc = cell ? shift_cell_xls((f[1][1]), cell, opts) : (f[1][1]);\n\t\t\t\tstack.push(encode_cell_xls(c, biff));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgRef3d': /* [MS-XLS] 2.5.198.85 */\nixti = f[1][1]; c = shift_cell_xls((f[1][2]), _range, opts);\n\t\t\t\tsname = get_ixti(supbooks, ixti, opts);\n\t\t\t\tvar w = sname; /* IE9 fails on defined names */ // eslint-disable-line no-unused-vars\n\t\t\t\tstack.push(sname + \"!\" + encode_cell_xls(c, biff));\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgFunc': /* [MS-XLS] 2.5.198.62 */\n\t\t\tcase 'PtgFuncVar': /* [MS-XLS] 2.5.198.63 */\n\t\t\t\t/* f[1] = [argc, func, type] */\n\t\t\t\tvar argc = (f[1][0]), func = (f[1][1]);\n\t\t\t\tif(!argc) argc = 0;\n\t\t\t\targc &= 0x7F;\n\t\t\t\tvar args = argc == 0 ? [] : stack.slice(-argc);\n\t\t\t\tstack.length -= argc;\n\t\t\t\tif(func === 'User') func = args.shift();\n\t\t\t\tstack.push(func + \"(\" + args.join(\",\") + \")\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgBool': /* [MS-XLS] 2.5.198.42 */\n\t\t\t\tstack.push(f[1] ? \"TRUE\" : \"FALSE\"); break;\n\t\t\tcase 'PtgInt': /* [MS-XLS] 2.5.198.66 */\n\t\t\t\tstack.push(f[1]); break;\n\t\t\tcase 'PtgNum': /* [MS-XLS] 2.5.198.79 TODO: precision? */\n\t\t\t\tstack.push(String(f[1])); break;\n\t\t\tcase 'PtgStr': /* [MS-XLS] 2.5.198.89 */\n\t\t\t\t// $FlowIgnore\n\t\t\t\tstack.push('\"' + f[1].replace(/\"/g, '\"\"') + '\"'); break;\n\t\t\tcase 'PtgErr': /* [MS-XLS] 2.5.198.57 */\n\t\t\t\tstack.push(f[1]); break;\n\t\t\tcase 'PtgAreaN': /* [MS-XLS] 2.5.198.31 TODO */\nr = shift_range_xls(f[1][1], cell ? {s:cell} : _range, opts);\n\t\t\t\tstack.push(encode_range_xls((r), opts));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgArea': /* [MS-XLS] 2.5.198.27 TODO: fixed points */\nr = shift_range_xls(f[1][1], _range, opts);\n\t\t\t\tstack.push(encode_range_xls((r), opts));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgArea3d': /* [MS-XLS] 2.5.198.28 TODO */\nixti = f[1][1]; r = f[1][2];\n\t\t\t\tsname = get_ixti(supbooks, ixti, opts);\n\t\t\t\tstack.push(sname + \"!\" + encode_range_xls((r), opts));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgAttrSum': /* [MS-XLS] 2.5.198.41 */\n\t\t\t\tstack.push(\"SUM(\" + stack.pop() + \")\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgAttrBaxcel': /* [MS-XLS] 2.5.198.33 */\n\t\t\tcase 'PtgAttrSemi': /* [MS-XLS] 2.5.198.37 */\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgName': /* [MS-XLS] 2.5.198.76 ; [MS-XLSB] 2.5.97.60 TODO: revisions */\n\t\t\t\t/* f[1] = type, 0, nameindex */\n\t\t\t\tnameidx = (f[1][2]);\n\t\t\t\tvar lbl = (supbooks.names||[])[nameidx-1] || (supbooks[0]||[])[nameidx];\n\t\t\t\tvar name = lbl ? lbl.Name : \"SH33TJSNAME\" + String(nameidx);\n\t\t\t\tif(name in XLSXFutureFunctions) name = XLSXFutureFunctions[name];\n\t\t\t\tstack.push(name);\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgNameX': /* [MS-XLS] 2.5.198.77 ; [MS-XLSB] 2.5.97.61 TODO: revisions */\n\t\t\t\t/* f[1] = type, ixti, nameindex */\n\t\t\t\tvar bookidx = (f[1][1]); nameidx = (f[1][2]); var externbook;\n\t\t\t\t/* TODO: Properly handle missing values -- this should be using get_ixti_raw primarily */\n\t\t\t\tif(opts.biff <= 5) {\n\t\t\t\t\tif(bookidx < 0) bookidx = -bookidx;\n\t\t\t\t\tif(supbooks[bookidx]) externbook = supbooks[bookidx][nameidx];\n\t\t\t\t} else {\n\t\t\t\t\tvar o = \"\";\n\t\t\t\t\tif(((supbooks[bookidx]||[])[0]||[])[0] == 0x3A01){/* empty */}\n\t\t\t\t\telse if(((supbooks[bookidx]||[])[0]||[])[0] == 0x0401){\n\t\t\t\t\t\tif(supbooks[bookidx][nameidx] && supbooks[bookidx][nameidx].itab > 0) {\n\t\t\t\t\t\t\to = supbooks.SheetNames[supbooks[bookidx][nameidx].itab-1] + \"!\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse o = supbooks.SheetNames[nameidx-1]+ \"!\";\n\t\t\t\t\tif(supbooks[bookidx] && supbooks[bookidx][nameidx]) o += supbooks[bookidx][nameidx].Name;\n\t\t\t\t\telse if(supbooks[0] && supbooks[0][nameidx]) o += supbooks[0][nameidx].Name;\n\t\t\t\t\telse {\n\t\t\t\t\t\tvar ixtidata = get_ixti_raw(supbooks, bookidx, opts).split(\";;\");\n\t\t\t\t\t\tif(ixtidata[nameidx - 1]) o = ixtidata[nameidx - 1]; // TODO: confirm this is correct\n\t\t\t\t\t\telse o += \"SH33TJSERRX\";\n\t\t\t\t\t}\n\t\t\t\t\tstack.push(o);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif(!externbook) externbook = {Name: \"SH33TJSERRY\"};\n\t\t\t\tstack.push(externbook.Name);\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgParen': /* [MS-XLS] 2.5.198.80 */\n\t\t\t\tvar lp = '(', rp = ')';\n\t\t\t\tif(last_sp >= 0) {\n\t\t\t\t\tsp = \"\";\n\t\t\t\t\tswitch(formula[0][last_sp][1][0]) {\n\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\tcase 2: lp = fill(\" \", formula[0][last_sp][1][1]) + lp; break;\n\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\tcase 3: lp = fill(\"\\r\", formula[0][last_sp][1][1]) + lp; break;\n\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\tcase 4: rp = fill(\" \", formula[0][last_sp][1][1]) + rp; break;\n\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\tcase 5: rp = fill(\"\\r\", formula[0][last_sp][1][1]) + rp; break;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\t\tif(opts.WTF) throw new Error(\"Unexpected PtgAttrSpaceType \" + formula[0][last_sp][1][0]);\n\t\t\t\t\t}\n\t\t\t\t\tlast_sp = -1;\n\t\t\t\t}\n\t\t\t\tstack.push(lp + stack.pop() + rp); break;\n\n\t\t\tcase 'PtgRefErr': /* [MS-XLS] 2.5.198.86 */\n\t\t\t\tstack.push('#REF!'); break;\n\n\t\t\tcase 'PtgRefErr3d': /* [MS-XLS] 2.5.198.87 */\n\t\t\t\tstack.push('#REF!'); break;\n\n\t\t\tcase 'PtgExp': /* [MS-XLS] 2.5.198.58 TODO */\n\t\t\t\tc = {c:(f[1][1]),r:(f[1][0])};\n\t\t\t\tvar q = ({c: cell.c, r:cell.r});\n\t\t\t\tif(supbooks.sharedf[encode_cell(c)]) {\n\t\t\t\t\tvar parsedf = (supbooks.sharedf[encode_cell(c)]);\n\t\t\t\t\tstack.push(stringify_formula(parsedf, _range, q, supbooks, opts));\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tvar fnd = false;\n\t\t\t\t\tfor(e1=0;e1!=supbooks.arrayf.length; ++e1) {\n\t\t\t\t\t\t/* TODO: should be something like range_has */\n\t\t\t\t\t\te2 = supbooks.arrayf[e1];\n\t\t\t\t\t\tif(c.c < e2[0].s.c || c.c > e2[0].e.c) continue;\n\t\t\t\t\t\tif(c.r < e2[0].s.r || c.r > e2[0].e.r) continue;\n\t\t\t\t\t\tstack.push(stringify_formula(e2[1], _range, q, supbooks, opts));\n\t\t\t\t\t\tfnd = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif(!fnd) stack.push(f[1]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgArray': /* [MS-XLS] 2.5.198.32 TODO */\n\t\t\t\tstack.push(\"{\" + stringify_array(f[1]) + \"}\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMemArea': /* [MS-XLS] 2.5.198.70 TODO: confirm this is a non-display */\n\t\t\t\t//stack.push(\"(\" + f[2].map(encode_range).join(\",\") + \")\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgAttrSpace': /* [MS-XLS] 2.5.198.38 */\n\t\t\tcase 'PtgAttrSpaceSemi': /* [MS-XLS] 2.5.198.39 */\n\t\t\t\tlast_sp = ff;\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgTbl': /* [MS-XLS] 2.5.198.92 TODO */\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMemErr': /* [MS-XLS] 2.5.198.71 */\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMissArg': /* [MS-XLS] 2.5.198.74 */\n\t\t\t\tstack.push(\"\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgAreaErr': /* [MS-XLS] 2.5.198.29 */\n\t\t\t\tstack.push(\"#REF!\"); break;\n\n\t\t\tcase 'PtgAreaErr3d': /* [MS-XLS] 2.5.198.30 */\n\t\t\t\tstack.push(\"#REF!\"); break;\n\n\t\t\tcase 'PtgList': /* [MS-XLSB] 2.5.97.52 */\n\t\t\t\t// $FlowIgnore\n\t\t\t\tstack.push(\"Table\" + f[1].idx + \"[#\" + f[1].rt + \"]\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMemAreaN':\n\t\t\tcase 'PtgMemNoMemN':\n\t\t\tcase 'PtgAttrNoop':\n\t\t\tcase 'PtgSheet':\n\t\t\tcase 'PtgEndSheet':\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMemFunc': /* [MS-XLS] 2.5.198.72 TODO */\n\t\t\t\tbreak;\n\t\t\tcase 'PtgMemNoMem': /* [MS-XLS] 2.5.198.73 TODO */\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgElfCol': /* [MS-XLS] 2.5.198.46 */\n\t\t\tcase 'PtgElfColS': /* [MS-XLS] 2.5.198.47 */\n\t\t\tcase 'PtgElfColSV': /* [MS-XLS] 2.5.198.48 */\n\t\t\tcase 'PtgElfColV': /* [MS-XLS] 2.5.198.49 */\n\t\t\tcase 'PtgElfLel': /* [MS-XLS] 2.5.198.50 */\n\t\t\tcase 'PtgElfRadical': /* [MS-XLS] 2.5.198.51 */\n\t\t\tcase 'PtgElfRadicalLel': /* [MS-XLS] 2.5.198.52 */\n\t\t\tcase 'PtgElfRadicalS': /* [MS-XLS] 2.5.198.53 */\n\t\t\tcase 'PtgElfRw': /* [MS-XLS] 2.5.198.54 */\n\t\t\tcase 'PtgElfRwV': /* [MS-XLS] 2.5.198.55 */\n\t\t\t\tthrow new Error(\"Unsupported ELFs\");\n\n\t\t\tcase 'PtgSxName': /* [MS-XLS] 2.5.198.91 TODO -- find a test case */\n\t\t\t\tthrow new Error('Unrecognized Formula Token: ' + String(f));\n\t\t\tdefault: throw new Error('Unrecognized Formula Token: ' + String(f));\n\t\t}\n\t\tvar PtgNonDisp = ['PtgAttrSpace', 'PtgAttrSpaceSemi', 'PtgAttrGoto'];\n\t\tif(opts.biff != 3) if(last_sp >= 0 && PtgNonDisp.indexOf(formula[0][ff][0]) == -1) {\n\t\t\tf = formula[0][last_sp];\n\t\t\tvar _left = true;\n\t\t\tswitch(f[1][0]) {\n\t\t\t\t/* note: some bad XLSB files omit the PtgParen */\n\t\t\t\tcase 4: _left = false;\n\t\t\t\t/* falls through */\n\t\t\t\tcase 0:\n\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\tsp = fill(\" \", f[1][1]); break;\n\t\t\t\tcase 5: _left = false;\n\t\t\t\t/* falls through */\n\t\t\t\tcase 1:\n\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\tsp = fill(\"\\r\", f[1][1]); break;\n\t\t\t\tdefault:\n\t\t\t\t\tsp = \"\";\n\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\tif(opts.WTF) throw new Error(\"Unexpected PtgAttrSpaceType \" + f[1][0]);\n\t\t\t}\n\t\t\tstack.push((_left ? sp : \"\") + stack.pop() + (_left ? \"\" : sp));\n\t\t\tlast_sp = -1;\n\t\t}\n\t}\n\tif(stack.length > 1 && opts.WTF) throw new Error(\"bad formula stack\");\n\treturn stack[0];\n}\n\n/* [MS-XLS] 2.5.198.1 TODO */\nfunction parse_ArrayParsedFormula(blob, length, opts) {\n\tvar target = blob.l + length, len = opts.biff == 2 ? 1 : 2;\n\tvar rgcb, cce = blob.read_shift(len); // length of rgce\n\tif(cce == 0xFFFF) return [[],parsenoop(blob, length-2)];\n\tvar rgce = parse_Rgce(blob, cce, opts);\n\tif(length !== cce + len) rgcb = parse_RgbExtra(blob, length - cce - len, rgce, opts);\n\tblob.l = target;\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLS] 2.5.198.3 TODO */\nfunction parse_XLSCellParsedFormula(blob, length, opts) {\n\tvar target = blob.l + length, len = opts.biff == 2 ? 1 : 2;\n\tvar rgcb, cce = blob.read_shift(len); // length of rgce\n\tif(cce == 0xFFFF) return [[],parsenoop(blob, length-2)];\n\tvar rgce = parse_Rgce(blob, cce, opts);\n\tif(length !== cce + len) rgcb = parse_RgbExtra(blob, length - cce - len, rgce, opts);\n\tblob.l = target;\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLS] 2.5.198.21 */\nfunction parse_NameParsedFormula(blob, length, opts, cce) {\n\tvar target = blob.l + length;\n\tvar rgce = parse_Rgce(blob, cce, opts);\n\tvar rgcb;\n\tif(target !== blob.l) rgcb = parse_RgbExtra(blob, target - blob.l, rgce, opts);\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLS] 2.5.198.118 TODO */\nfunction parse_SharedParsedFormula(blob, length, opts) {\n\tvar target = blob.l + length;\n\tvar rgcb, cce = blob.read_shift(2); // length of rgce\n\tvar rgce = parse_Rgce(blob, cce, opts);\n\tif(cce == 0xFFFF) return [[],parsenoop(blob, length-2)];\n\tif(length !== cce + 2) rgcb = parse_RgbExtra(blob, target - cce - 2, rgce, opts);\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLS] 2.5.133 TODO: how to emit empty strings? */\nfunction parse_FormulaValue(blob) {\n\tvar b;\n\tif(__readUInt16LE(blob,blob.l + 6) !== 0xFFFF) return [parse_Xnum(blob),'n'];\n\tswitch(blob[blob.l]) {\n\t\tcase 0x00: blob.l += 8; return [\"String\", 's'];\n\t\tcase 0x01: b = blob[blob.l+2] === 0x1; blob.l += 8; return [b,'b'];\n\t\tcase 0x02: b = blob[blob.l+2]; blob.l += 8; return [b,'e'];\n\t\tcase 0x03: blob.l += 8; return [\"\",'s'];\n\t}\n\treturn [];\n}\nfunction write_FormulaValue(value) {\n\tif(value == null) {\n\t\t// Blank String Value\n\t\tvar o = new_buf(8);\n\t\to.write_shift(1, 0x03);\n\t\to.write_shift(1, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0xFFFF);\n\t\treturn o;\n\t} else if(typeof value == \"number\") return write_Xnum(value);\n\treturn write_Xnum(0);\n}\n\n/* [MS-XLS] 2.4.127 TODO */\nfunction parse_Formula(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar cell = parse_XLSCell(blob, 6);\n\tif(opts.biff == 2) ++blob.l;\n\tvar val = parse_FormulaValue(blob,8);\n\tvar flags = blob.read_shift(1);\n\tif(opts.biff != 2) {\n\t\tblob.read_shift(1);\n\t\tif(opts.biff >= 5) {\n\t\t\t/*var chn = */blob.read_shift(4);\n\t\t}\n\t}\n\tvar cbf = parse_XLSCellParsedFormula(blob, end - blob.l, opts);\n\treturn {cell:cell, val:val[0], formula:cbf, shared: (flags >> 3) & 1, tt:val[1]};\n}\nfunction write_Formula(cell, R, C, opts, os) {\n\t// Cell\n\tvar o1 = write_XLSCell(R, C, os);\n\n\t// FormulaValue\n\tvar o2 = write_FormulaValue(cell.v);\n\n\t// flags + cache\n\tvar o3 = new_buf(6);\n\tvar flags = 0x01 | 0x20;\n\to3.write_shift(2, flags);\n\to3.write_shift(4, 0);\n\n\t// CellParsedFormula\n\tvar bf = new_buf(cell.bf.length);\n\tfor(var i = 0; i < cell.bf.length; ++i) bf[i] = cell.bf[i];\n\n\tvar out = bconcat([o1, o2, o3, bf]);\n\treturn out;\n}\n\n\n/* XLSB Parsed Formula records have the same shape */\nfunction parse_XLSBParsedFormula(data, length, opts) {\n\tvar cce = data.read_shift(4);\n\tvar rgce = parse_Rgce(data, cce, opts);\n\tvar cb = data.read_shift(4);\n\tvar rgcb = cb > 0 ? parse_RgbExtra(data, cb, rgce, opts) : null;\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLSB] 2.5.97.1 ArrayParsedFormula */\nvar parse_XLSBArrayParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLSB] 2.5.97.4 CellParsedFormula */\nvar parse_XLSBCellParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLSB] 2.5.97.8 DVParsedFormula */\n//var parse_XLSBDVParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLSB] 2.5.97.9 FRTParsedFormula */\n//var parse_XLSBFRTParsedFormula = parse_XLSBParsedFormula2;\n/* [MS-XLSB] 2.5.97.12 NameParsedFormula */\nvar parse_XLSBNameParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLSB] 2.5.97.98 SharedParsedFormula */\nvar parse_XLSBSharedParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLS] 2.5.198.4 */\nvar Cetab = {\n0x0000: 'BEEP',\n0x0001: 'OPEN',\n0x0002: 'OPEN.LINKS',\n0x0003: 'CLOSE.ALL',\n0x0004: 'SAVE',\n0x0005: 'SAVE.AS',\n0x0006: 'FILE.DELETE',\n0x0007: 'PAGE.SETUP',\n0x0008: 'PRINT',\n0x0009: 'PRINTER.SETUP',\n0x000A: 'QUIT',\n0x000B: 'NEW.WINDOW',\n0x000C: 'ARRANGE.ALL',\n0x000D: 'WINDOW.SIZE',\n0x000E: 'WINDOW.MOVE',\n0x000F: 'FULL',\n0x0010: 'CLOSE',\n0x0011: 'RUN',\n0x0016: 'SET.PRINT.AREA',\n0x0017: 'SET.PRINT.TITLES',\n0x0018: 'SET.PAGE.BREAK',\n0x0019: 'REMOVE.PAGE.BREAK',\n0x001A: 'FONT',\n0x001B: 'DISPLAY',\n0x001C: 'PROTECT.DOCUMENT',\n0x001D: 'PRECISION',\n0x001E: 'A1.R1C1',\n0x001F: 'CALCULATE.NOW',\n0x0020: 'CALCULATION',\n0x0022: 'DATA.FIND',\n0x0023: 'EXTRACT',\n0x0024: 'DATA.DELETE',\n0x0025: 'SET.DATABASE',\n0x0026: 'SET.CRITERIA',\n0x0027: 'SORT',\n0x0028: 'DATA.SERIES',\n0x0029: 'TABLE',\n0x002A: 'FORMAT.NUMBER',\n0x002B: 'ALIGNMENT',\n0x002C: 'STYLE',\n0x002D: 'BORDER',\n0x002E: 'CELL.PROTECTION',\n0x002F: 'COLUMN.WIDTH',\n0x0030: 'UNDO',\n0x0031: 'CUT',\n0x0032: 'COPY',\n0x0033: 'PASTE',\n0x0034: 'CLEAR',\n0x0035: 'PASTE.SPECIAL',\n0x0036: 'EDIT.DELETE',\n0x0037: 'INSERT',\n0x0038: 'FILL.RIGHT',\n0x0039: 'FILL.DOWN',\n0x003D: 'DEFINE.NAME',\n0x003E: 'CREATE.NAMES',\n0x003F: 'FORMULA.GOTO',\n0x0040: 'FORMULA.FIND',\n0x0041: 'SELECT.LAST.CELL',\n0x0042: 'SHOW.ACTIVE.CELL',\n0x0043: 'GALLERY.AREA',\n0x0044: 'GALLERY.BAR',\n0x0045: 'GALLERY.COLUMN',\n0x0046: 'GALLERY.LINE',\n0x0047: 'GALLERY.PIE',\n0x0048: 'GALLERY.SCATTER',\n0x0049: 'COMBINATION',\n0x004A: 'PREFERRED',\n0x004B: 'ADD.OVERLAY',\n0x004C: 'GRIDLINES',\n0x004D: 'SET.PREFERRED',\n0x004E: 'AXES',\n0x004F: 'LEGEND',\n0x0050: 'ATTACH.TEXT',\n0x0051: 'ADD.ARROW',\n0x0052: 'SELECT.CHART',\n0x0053: 'SELECT.PLOT.AREA',\n0x0054: 'PATTERNS',\n0x0055: 'MAIN.CHART',\n0x0056: 'OVERLAY',\n0x0057: 'SCALE',\n0x0058: 'FORMAT.LEGEND',\n0x0059: 'FORMAT.TEXT',\n0x005A: 'EDIT.REPEAT',\n0x005B: 'PARSE',\n0x005C: 'JUSTIFY',\n0x005D: 'HIDE',\n0x005E: 'UNHIDE',\n0x005F: 'WORKSPACE',\n0x0060: 'FORMULA',\n0x0061: 'FORMULA.FILL',\n0x0062: 'FORMULA.ARRAY',\n0x0063: 'DATA.FIND.NEXT',\n0x0064: 'DATA.FIND.PREV',\n0x0065: 'FORMULA.FIND.NEXT',\n0x0066: 'FORMULA.FIND.PREV',\n0x0067: 'ACTIVATE',\n0x0068: 'ACTIVATE.NEXT',\n0x0069: 'ACTIVATE.PREV',\n0x006A: 'UNLOCKED.NEXT',\n0x006B: 'UNLOCKED.PREV',\n0x006C: 'COPY.PICTURE',\n0x006D: 'SELECT',\n0x006E: 'DELETE.NAME',\n0x006F: 'DELETE.FORMAT',\n0x0070: 'VLINE',\n0x0071: 'HLINE',\n0x0072: 'VPAGE',\n0x0073: 'HPAGE',\n0x0074: 'VSCROLL',\n0x0075: 'HSCROLL',\n0x0076: 'ALERT',\n0x0077: 'NEW',\n0x0078: 'CANCEL.COPY',\n0x0079: 'SHOW.CLIPBOARD',\n0x007A: 'MESSAGE',\n0x007C: 'PASTE.LINK',\n0x007D: 'APP.ACTIVATE',\n0x007E: 'DELETE.ARROW',\n0x007F: 'ROW.HEIGHT',\n0x0080: 'FORMAT.MOVE',\n0x0081: 'FORMAT.SIZE',\n0x0082: 'FORMULA.REPLACE',\n0x0083: 'SEND.KEYS',\n0x0084: 'SELECT.SPECIAL',\n0x0085: 'APPLY.NAMES',\n0x0086: 'REPLACE.FONT',\n0x0087: 'FREEZE.PANES',\n0x0088: 'SHOW.INFO',\n0x0089: 'SPLIT',\n0x008A: 'ON.WINDOW',\n0x008B: 'ON.DATA',\n0x008C: 'DISABLE.INPUT',\n0x008E: 'OUTLINE',\n0x008F: 'LIST.NAMES',\n0x0090: 'FILE.CLOSE',\n0x0091: 'SAVE.WORKBOOK',\n0x0092: 'DATA.FORM',\n0x0093: 'COPY.CHART',\n0x0094: 'ON.TIME',\n0x0095: 'WAIT',\n0x0096: 'FORMAT.FONT',\n0x0097: 'FILL.UP',\n0x0098: 'FILL.LEFT',\n0x0099: 'DELETE.OVERLAY',\n0x009B: 'SHORT.MENUS',\n0x009F: 'SET.UPDATE.STATUS',\n0x00A1: 'COLOR.PALETTE',\n0x00A2: 'DELETE.STYLE',\n0x00A3: 'WINDOW.RESTORE',\n0x00A4: 'WINDOW.MAXIMIZE',\n0x00A6: 'CHANGE.LINK',\n0x00A7: 'CALCULATE.DOCUMENT',\n0x00A8: 'ON.KEY',\n0x00A9: 'APP.RESTORE',\n0x00AA: 'APP.MOVE',\n0x00AB: 'APP.SIZE',\n0x00AC: 'APP.MINIMIZE',\n0x00AD: 'APP.MAXIMIZE',\n0x00AE: 'BRING.TO.FRONT',\n0x00AF: 'SEND.TO.BACK',\n0x00B9: 'MAIN.CHART.TYPE',\n0x00BA: 'OVERLAY.CHART.TYPE',\n0x00BB: 'SELECT.END',\n0x00BC: 'OPEN.MAIL',\n0x00BD: 'SEND.MAIL',\n0x00BE: 'STANDARD.FONT',\n0x00BF: 'CONSOLIDATE',\n0x00C0: 'SORT.SPECIAL',\n0x00C1: 'GALLERY.3D.AREA',\n0x00C2: 'GALLERY.3D.COLUMN',\n0x00C3: 'GALLERY.3D.LINE',\n0x00C4: 'GALLERY.3D.PIE',\n0x00C5: 'VIEW.3D',\n0x00C6: 'GOAL.SEEK',\n0x00C7: 'WORKGROUP',\n0x00C8: 'FILL.GROUP',\n0x00C9: 'UPDATE.LINK',\n0x00CA: 'PROMOTE',\n0x00CB: 'DEMOTE',\n0x00CC: 'SHOW.DETAIL',\n0x00CE: 'UNGROUP',\n0x00CF: 'OBJECT.PROPERTIES',\n0x00D0: 'SAVE.NEW.OBJECT',\n0x00D1: 'SHARE',\n0x00D2: 'SHARE.NAME',\n0x00D3: 'DUPLICATE',\n0x00D4: 'APPLY.STYLE',\n0x00D5: 'ASSIGN.TO.OBJECT',\n0x00D6: 'OBJECT.PROTECTION',\n0x00D7: 'HIDE.OBJECT',\n0x00D8: 'SET.EXTRACT',\n0x00D9: 'CREATE.PUBLISHER',\n0x00DA: 'SUBSCRIBE.TO',\n0x00DB: 'ATTRIBUTES',\n0x00DC: 'SHOW.TOOLBAR',\n0x00DE: 'PRINT.PREVIEW',\n0x00DF: 'EDIT.COLOR',\n0x00E0: 'SHOW.LEVELS',\n0x00E1: 'FORMAT.MAIN',\n0x00E2: 'FORMAT.OVERLAY',\n0x00E3: 'ON.RECALC',\n0x00E4: 'EDIT.SERIES',\n0x00E5: 'DEFINE.STYLE',\n0x00F0: 'LINE.PRINT',\n0x00F3: 'ENTER.DATA',\n0x00F9: 'GALLERY.RADAR',\n0x00FA: 'MERGE.STYLES',\n0x00FB: 'EDITION.OPTIONS',\n0x00FC: 'PASTE.PICTURE',\n0x00FD: 'PASTE.PICTURE.LINK',\n0x00FE: 'SPELLING',\n0x0100: 'ZOOM',\n0x0103: 'INSERT.OBJECT',\n0x0104: 'WINDOW.MINIMIZE',\n0x0109: 'SOUND.NOTE',\n0x010A: 'SOUND.PLAY',\n0x010B: 'FORMAT.SHAPE',\n0x010C: 'EXTEND.POLYGON',\n0x010D: 'FORMAT.AUTO',\n0x0110: 'GALLERY.3D.BAR',\n0x0111: 'GALLERY.3D.SURFACE',\n0x0112: 'FILL.AUTO',\n0x0114: 'CUSTOMIZE.TOOLBAR',\n0x0115: 'ADD.TOOL',\n0x0116: 'EDIT.OBJECT',\n0x0117: 'ON.DOUBLECLICK',\n0x0118: 'ON.ENTRY',\n0x0119: 'WORKBOOK.ADD',\n0x011A: 'WORKBOOK.MOVE',\n0x011B: 'WORKBOOK.COPY',\n0x011C: 'WORKBOOK.OPTIONS',\n0x011D: 'SAVE.WORKSPACE',\n0x0120: 'CHART.WIZARD',\n0x0121: 'DELETE.TOOL',\n0x0122: 'MOVE.TOOL',\n0x0123: 'WORKBOOK.SELECT',\n0x0124: 'WORKBOOK.ACTIVATE',\n0x0125: 'ASSIGN.TO.TOOL',\n0x0127: 'COPY.TOOL',\n0x0128: 'RESET.TOOL',\n0x0129: 'CONSTRAIN.NUMERIC',\n0x012A: 'PASTE.TOOL',\n0x012E: 'WORKBOOK.NEW',\n0x0131: 'SCENARIO.CELLS',\n0x0132: 'SCENARIO.DELETE',\n0x0133: 'SCENARIO.ADD',\n0x0134: 'SCENARIO.EDIT',\n0x0135: 'SCENARIO.SHOW',\n0x0136: 'SCENARIO.SHOW.NEXT',\n0x0137: 'SCENARIO.SUMMARY',\n0x0138: 'PIVOT.TABLE.WIZARD',\n0x0139: 'PIVOT.FIELD.PROPERTIES',\n0x013A: 'PIVOT.FIELD',\n0x013B: 'PIVOT.ITEM',\n0x013C: 'PIVOT.ADD.FIELDS',\n0x013E: 'OPTIONS.CALCULATION',\n0x013F: 'OPTIONS.EDIT',\n0x0140: 'OPTIONS.VIEW',\n0x0141: 'ADDIN.MANAGER',\n0x0142: 'MENU.EDITOR',\n0x0143: 'ATTACH.TOOLBARS',\n0x0144: 'VBAActivate',\n0x0145: 'OPTIONS.CHART',\n0x0148: 'VBA.INSERT.FILE',\n0x014A: 'VBA.PROCEDURE.DEFINITION',\n0x0150: 'ROUTING.SLIP',\n0x0152: 'ROUTE.DOCUMENT',\n0x0153: 'MAIL.LOGON',\n0x0156: 'INSERT.PICTURE',\n0x0157: 'EDIT.TOOL',\n0x0158: 'GALLERY.DOUGHNUT',\n0x015E: 'CHART.TREND',\n0x0160: 'PIVOT.ITEM.PROPERTIES',\n0x0162: 'WORKBOOK.INSERT',\n0x0163: 'OPTIONS.TRANSITION',\n0x0164: 'OPTIONS.GENERAL',\n0x0172: 'FILTER.ADVANCED',\n0x0175: 'MAIL.ADD.MAILER',\n0x0176: 'MAIL.DELETE.MAILER',\n0x0177: 'MAIL.REPLY',\n0x0178: 'MAIL.REPLY.ALL',\n0x0179: 'MAIL.FORWARD',\n0x017A: 'MAIL.NEXT.LETTER',\n0x017B: 'DATA.LABEL',\n0x017C: 'INSERT.TITLE',\n0x017D: 'FONT.PROPERTIES',\n0x017E: 'MACRO.OPTIONS',\n0x017F: 'WORKBOOK.HIDE',\n0x0180: 'WORKBOOK.UNHIDE',\n0x0181: 'WORKBOOK.DELETE',\n0x0182: 'WORKBOOK.NAME',\n0x0184: 'GALLERY.CUSTOM',\n0x0186: 'ADD.CHART.AUTOFORMAT',\n0x0187: 'DELETE.CHART.AUTOFORMAT',\n0x0188: 'CHART.ADD.DATA',\n0x0189: 'AUTO.OUTLINE',\n0x018A: 'TAB.ORDER',\n0x018B: 'SHOW.DIALOG',\n0x018C: 'SELECT.ALL',\n0x018D: 'UNGROUP.SHEETS',\n0x018E: 'SUBTOTAL.CREATE',\n0x018F: 'SUBTOTAL.REMOVE',\n0x0190: 'RENAME.OBJECT',\n0x019C: 'WORKBOOK.SCROLL',\n0x019D: 'WORKBOOK.NEXT',\n0x019E: 'WORKBOOK.PREV',\n0x019F: 'WORKBOOK.TAB.SPLIT',\n0x01A0: 'FULL.SCREEN',\n0x01A1: 'WORKBOOK.PROTECT',\n0x01A4: 'SCROLLBAR.PROPERTIES',\n0x01A5: 'PIVOT.SHOW.PAGES',\n0x01A6: 'TEXT.TO.COLUMNS',\n0x01A7: 'FORMAT.CHARTTYPE',\n0x01A8: 'LINK.FORMAT',\n0x01A9: 'TRACER.DISPLAY',\n0x01AE: 'TRACER.NAVIGATE',\n0x01AF: 'TRACER.CLEAR',\n0x01B0: 'TRACER.ERROR',\n0x01B1: 'PIVOT.FIELD.GROUP',\n0x01B2: 'PIVOT.FIELD.UNGROUP',\n0x01B3: 'CHECKBOX.PROPERTIES',\n0x01B4: 'LABEL.PROPERTIES',\n0x01B5: 'LISTBOX.PROPERTIES',\n0x01B6: 'EDITBOX.PROPERTIES',\n0x01B7: 'PIVOT.REFRESH',\n0x01B8: 'LINK.COMBO',\n0x01B9: 'OPEN.TEXT',\n0x01BA: 'HIDE.DIALOG',\n0x01BB: 'SET.DIALOG.FOCUS',\n0x01BC: 'ENABLE.OBJECT',\n0x01BD: 'PUSHBUTTON.PROPERTIES',\n0x01BE: 'SET.DIALOG.DEFAULT',\n0x01BF: 'FILTER',\n0x01C0: 'FILTER.SHOW.ALL',\n0x01C1: 'CLEAR.OUTLINE',\n0x01C2: 'FUNCTION.WIZARD',\n0x01C3: 'ADD.LIST.ITEM',\n0x01C4: 'SET.LIST.ITEM',\n0x01C5: 'REMOVE.LIST.ITEM',\n0x01C6: 'SELECT.LIST.ITEM',\n0x01C7: 'SET.CONTROL.VALUE',\n0x01C8: 'SAVE.COPY.AS',\n0x01CA: 'OPTIONS.LISTS.ADD',\n0x01CB: 'OPTIONS.LISTS.DELETE',\n0x01CC: 'SERIES.AXES',\n0x01CD: 'SERIES.X',\n0x01CE: 'SERIES.Y',\n0x01CF: 'ERRORBAR.X',\n0x01D0: 'ERRORBAR.Y',\n0x01D1: 'FORMAT.CHART',\n0x01D2: 'SERIES.ORDER',\n0x01D3: 'MAIL.LOGOFF',\n0x01D4: 'CLEAR.ROUTING.SLIP',\n0x01D5: 'APP.ACTIVATE.MICROSOFT',\n0x01D6: 'MAIL.EDIT.MAILER',\n0x01D7: 'ON.SHEET',\n0x01D8: 'STANDARD.WIDTH',\n0x01D9: 'SCENARIO.MERGE',\n0x01DA: 'SUMMARY.INFO',\n0x01DB: 'FIND.FILE',\n0x01DC: 'ACTIVE.CELL.FONT',\n0x01DD: 'ENABLE.TIPWIZARD',\n0x01DE: 'VBA.MAKE.ADDIN',\n0x01E0: 'INSERTDATATABLE',\n0x01E1: 'WORKGROUP.OPTIONS',\n0x01E2: 'MAIL.SEND.MAILER',\n0x01E5: 'AUTOCORRECT',\n0x01E9: 'POST.DOCUMENT',\n0x01EB: 'PICKLIST',\n0x01ED: 'VIEW.SHOW',\n0x01EE: 'VIEW.DEFINE',\n0x01EF: 'VIEW.DELETE',\n0x01FD: 'SHEET.BACKGROUND',\n0x01FE: 'INSERT.MAP.OBJECT',\n0x01FF: 'OPTIONS.MENONO',\n0x0205: 'MSOCHECKS',\n0x0206: 'NORMAL',\n0x0207: 'LAYOUT',\n0x0208: 'RM.PRINT.AREA',\n0x0209: 'CLEAR.PRINT.AREA',\n0x020A: 'ADD.PRINT.AREA',\n0x020B: 'MOVE.BRK',\n0x0221: 'HIDECURR.NOTE',\n0x0222: 'HIDEALL.NOTES',\n0x0223: 'DELETE.NOTE',\n0x0224: 'TRAVERSE.NOTES',\n0x0225: 'ACTIVATE.NOTES',\n0x026C: 'PROTECT.REVISIONS',\n0x026D: 'UNPROTECT.REVISIONS',\n0x0287: 'OPTIONS.ME',\n0x028D: 'WEB.PUBLISH',\n0x029B: 'NEWWEBQUERY',\n0x02A1: 'PIVOT.TABLE.CHART',\n0x02F1: 'OPTIONS.SAVE',\n0x02F3: 'OPTIONS.SPELL',\n0x0328: 'HIDEALL.INKANNOTS'\n};\n\n/* [MS-XLS] 2.5.198.17 */\n/* [MS-XLSB] 2.5.97.10 */\nvar Ftab = {\n0x0000: 'COUNT',\n0x0001: 'IF',\n0x0002: 'ISNA',\n0x0003: 'ISERROR',\n0x0004: 'SUM',\n0x0005: 'AVERAGE',\n0x0006: 'MIN',\n0x0007: 'MAX',\n0x0008: 'ROW',\n0x0009: 'COLUMN',\n0x000A: 'NA',\n0x000B: 'NPV',\n0x000C: 'STDEV',\n0x000D: 'DOLLAR',\n0x000E: 'FIXED',\n0x000F: 'SIN',\n0x0010: 'COS',\n0x0011: 'TAN',\n0x0012: 'ATAN',\n0x0013: 'PI',\n0x0014: 'SQRT',\n0x0015: 'EXP',\n0x0016: 'LN',\n0x0017: 'LOG10',\n0x0018: 'ABS',\n0x0019: 'INT',\n0x001A: 'SIGN',\n0x001B: 'ROUND',\n0x001C: 'LOOKUP',\n0x001D: 'INDEX',\n0x001E: 'REPT',\n0x001F: 'MID',\n0x0020: 'LEN',\n0x0021: 'VALUE',\n0x0022: 'TRUE',\n0x0023: 'FALSE',\n0x0024: 'AND',\n0x0025: 'OR',\n0x0026: 'NOT',\n0x0027: 'MOD',\n0x0028: 'DCOUNT',\n0x0029: 'DSUM',\n0x002A: 'DAVERAGE',\n0x002B: 'DMIN',\n0x002C: 'DMAX',\n0x002D: 'DSTDEV',\n0x002E: 'VAR',\n0x002F: 'DVAR',\n0x0030: 'TEXT',\n0x0031: 'LINEST',\n0x0032: 'TREND',\n0x0033: 'LOGEST',\n0x0034: 'GROWTH',\n0x0035: 'GOTO',\n0x0036: 'HALT',\n0x0037: 'RETURN',\n0x0038: 'PV',\n0x0039: 'FV',\n0x003A: 'NPER',\n0x003B: 'PMT',\n0x003C: 'RATE',\n0x003D: 'MIRR',\n0x003E: 'IRR',\n0x003F: 'RAND',\n0x0040: 'MATCH',\n0x0041: 'DATE',\n0x0042: 'TIME',\n0x0043: 'DAY',\n0x0044: 'MONTH',\n0x0045: 'YEAR',\n0x0046: 'WEEKDAY',\n0x0047: 'HOUR',\n0x0048: 'MINUTE',\n0x0049: 'SECOND',\n0x004A: 'NOW',\n0x004B: 'AREAS',\n0x004C: 'ROWS',\n0x004D: 'COLUMNS',\n0x004E: 'OFFSET',\n0x004F: 'ABSREF',\n0x0050: 'RELREF',\n0x0051: 'ARGUMENT',\n0x0052: 'SEARCH',\n0x0053: 'TRANSPOSE',\n0x0054: 'ERROR',\n0x0055: 'STEP',\n0x0056: 'TYPE',\n0x0057: 'ECHO',\n0x0058: 'SET.NAME',\n0x0059: 'CALLER',\n0x005A: 'DEREF',\n0x005B: 'WINDOWS',\n0x005C: 'SERIES',\n0x005D: 'DOCUMENTS',\n0x005E: 'ACTIVE.CELL',\n0x005F: 'SELECTION',\n0x0060: 'RESULT',\n0x0061: 'ATAN2',\n0x0062: 'ASIN',\n0x0063: 'ACOS',\n0x0064: 'CHOOSE',\n0x0065: 'HLOOKUP',\n0x0066: 'VLOOKUP',\n0x0067: 'LINKS',\n0x0068: 'INPUT',\n0x0069: 'ISREF',\n0x006A: 'GET.FORMULA',\n0x006B: 'GET.NAME',\n0x006C: 'SET.VALUE',\n0x006D: 'LOG',\n0x006E: 'EXEC',\n0x006F: 'CHAR',\n0x0070: 'LOWER',\n0x0071: 'UPPER',\n0x0072: 'PROPER',\n0x0073: 'LEFT',\n0x0074: 'RIGHT',\n0x0075: 'EXACT',\n0x0076: 'TRIM',\n0x0077: 'REPLACE',\n0x0078: 'SUBSTITUTE',\n0x0079: 'CODE',\n0x007A: 'NAMES',\n0x007B: 'DIRECTORY',\n0x007C: 'FIND',\n0x007D: 'CELL',\n0x007E: 'ISERR',\n0x007F: 'ISTEXT',\n0x0080: 'ISNUMBER',\n0x0081: 'ISBLANK',\n0x0082: 'T',\n0x0083: 'N',\n0x0084: 'FOPEN',\n0x0085: 'FCLOSE',\n0x0086: 'FSIZE',\n0x0087: 'FREADLN',\n0x0088: 'FREAD',\n0x0089: 'FWRITELN',\n0x008A: 'FWRITE',\n0x008B: 'FPOS',\n0x008C: 'DATEVALUE',\n0x008D: 'TIMEVALUE',\n0x008E: 'SLN',\n0x008F: 'SYD',\n0x0090: 'DDB',\n0x0091: 'GET.DEF',\n0x0092: 'REFTEXT',\n0x0093: 'TEXTREF',\n0x0094: 'INDIRECT',\n0x0095: 'REGISTER',\n0x0096: 'CALL',\n0x0097: 'ADD.BAR',\n0x0098: 'ADD.MENU',\n0x0099: 'ADD.COMMAND',\n0x009A: 'ENABLE.COMMAND',\n0x009B: 'CHECK.COMMAND',\n0x009C: 'RENAME.COMMAND',\n0x009D: 'SHOW.BAR',\n0x009E: 'DELETE.MENU',\n0x009F: 'DELETE.COMMAND',\n0x00A0: 'GET.CHART.ITEM',\n0x00A1: 'DIALOG.BOX',\n0x00A2: 'CLEAN',\n0x00A3: 'MDETERM',\n0x00A4: 'MINVERSE',\n0x00A5: 'MMULT',\n0x00A6: 'FILES',\n0x00A7: 'IPMT',\n0x00A8: 'PPMT',\n0x00A9: 'COUNTA',\n0x00AA: 'CANCEL.KEY',\n0x00AB: 'FOR',\n0x00AC: 'WHILE',\n0x00AD: 'BREAK',\n0x00AE: 'NEXT',\n0x00AF: 'INITIATE',\n0x00B0: 'REQUEST',\n0x00B1: 'POKE',\n0x00B2: 'EXECUTE',\n0x00B3: 'TERMINATE',\n0x00B4: 'RESTART',\n0x00B5: 'HELP',\n0x00B6: 'GET.BAR',\n0x00B7: 'PRODUCT',\n0x00B8: 'FACT',\n0x00B9: 'GET.CELL',\n0x00BA: 'GET.WORKSPACE',\n0x00BB: 'GET.WINDOW',\n0x00BC: 'GET.DOCUMENT',\n0x00BD: 'DPRODUCT',\n0x00BE: 'ISNONTEXT',\n0x00BF: 'GET.NOTE',\n0x00C0: 'NOTE',\n0x00C1: 'STDEVP',\n0x00C2: 'VARP',\n0x00C3: 'DSTDEVP',\n0x00C4: 'DVARP',\n0x00C5: 'TRUNC',\n0x00C6: 'ISLOGICAL',\n0x00C7: 'DCOUNTA',\n0x00C8: 'DELETE.BAR',\n0x00C9: 'UNREGISTER',\n0x00CC: 'USDOLLAR',\n0x00CD: 'FINDB',\n0x00CE: 'SEARCHB',\n0x00CF: 'REPLACEB',\n0x00D0: 'LEFTB',\n0x00D1: 'RIGHTB',\n0x00D2: 'MIDB',\n0x00D3: 'LENB',\n0x00D4: 'ROUNDUP',\n0x00D5: 'ROUNDDOWN',\n0x00D6: 'ASC',\n0x00D7: 'DBCS',\n0x00D8: 'RANK',\n0x00DB: 'ADDRESS',\n0x00DC: 'DAYS360',\n0x00DD: 'TODAY',\n0x00DE: 'VDB',\n0x00DF: 'ELSE',\n0x00E0: 'ELSE.IF',\n0x00E1: 'END.IF',\n0x00E2: 'FOR.CELL',\n0x00E3: 'MEDIAN',\n0x00E4: 'SUMPRODUCT',\n0x00E5: 'SINH',\n0x00E6: 'COSH',\n0x00E7: 'TANH',\n0x00E8: 'ASINH',\n0x00E9: 'ACOSH',\n0x00EA: 'ATANH',\n0x00EB: 'DGET',\n0x00EC: 'CREATE.OBJECT',\n0x00ED: 'VOLATILE',\n0x00EE: 'LAST.ERROR',\n0x00EF: 'CUSTOM.UNDO',\n0x00F0: 'CUSTOM.REPEAT',\n0x00F1: 'FORMULA.CONVERT',\n0x00F2: 'GET.LINK.INFO',\n0x00F3: 'TEXT.BOX',\n0x00F4: 'INFO',\n0x00F5: 'GROUP',\n0x00F6: 'GET.OBJECT',\n0x00F7: 'DB',\n0x00F8: 'PAUSE',\n0x00FB: 'RESUME',\n0x00FC: 'FREQUENCY',\n0x00FD: 'ADD.TOOLBAR',\n0x00FE: 'DELETE.TOOLBAR',\n0x00FF: 'User',\n0x0100: 'RESET.TOOLBAR',\n0x0101: 'EVALUATE',\n0x0102: 'GET.TOOLBAR',\n0x0103: 'GET.TOOL',\n0x0104: 'SPELLING.CHECK',\n0x0105: 'ERROR.TYPE',\n0x0106: 'APP.TITLE',\n0x0107: 'WINDOW.TITLE',\n0x0108: 'SAVE.TOOLBAR',\n0x0109: 'ENABLE.TOOL',\n0x010A: 'PRESS.TOOL',\n0x010B: 'REGISTER.ID',\n0x010C: 'GET.WORKBOOK',\n0x010D: 'AVEDEV',\n0x010E: 'BETADIST',\n0x010F: 'GAMMALN',\n0x0110: 'BETAINV',\n0x0111: 'BINOMDIST',\n0x0112: 'CHIDIST',\n0x0113: 'CHIINV',\n0x0114: 'COMBIN',\n0x0115: 'CONFIDENCE',\n0x0116: 'CRITBINOM',\n0x0117: 'EVEN',\n0x0118: 'EXPONDIST',\n0x0119: 'FDIST',\n0x011A: 'FINV',\n0x011B: 'FISHER',\n0x011C: 'FISHERINV',\n0x011D: 'FLOOR',\n0x011E: 'GAMMADIST',\n0x011F: 'GAMMAINV',\n0x0120: 'CEILING',\n0x0121: 'HYPGEOMDIST',\n0x0122: 'LOGNORMDIST',\n0x0123: 'LOGINV',\n0x0124: 'NEGBINOMDIST',\n0x0125: 'NORMDIST',\n0x0126: 'NORMSDIST',\n0x0127: 'NORMINV',\n0x0128: 'NORMSINV',\n0x0129: 'STANDARDIZE',\n0x012A: 'ODD',\n0x012B: 'PERMUT',\n0x012C: 'POISSON',\n0x012D: 'TDIST',\n0x012E: 'WEIBULL',\n0x012F: 'SUMXMY2',\n0x0130: 'SUMX2MY2',\n0x0131: 'SUMX2PY2',\n0x0132: 'CHITEST',\n0x0133: 'CORREL',\n0x0134: 'COVAR',\n0x0135: 'FORECAST',\n0x0136: 'FTEST',\n0x0137: 'INTERCEPT',\n0x0138: 'PEARSON',\n0x0139: 'RSQ',\n0x013A: 'STEYX',\n0x013B: 'SLOPE',\n0x013C: 'TTEST',\n0x013D: 'PROB',\n0x013E: 'DEVSQ',\n0x013F: 'GEOMEAN',\n0x0140: 'HARMEAN',\n0x0141: 'SUMSQ',\n0x0142: 'KURT',\n0x0143: 'SKEW',\n0x0144: 'ZTEST',\n0x0145: 'LARGE',\n0x0146: 'SMALL',\n0x0147: 'QUARTILE',\n0x0148: 'PERCENTILE',\n0x0149: 'PERCENTRANK',\n0x014A: 'MODE',\n0x014B: 'TRIMMEAN',\n0x014C: 'TINV',\n0x014E: 'MOVIE.COMMAND',\n0x014F: 'GET.MOVIE',\n0x0150: 'CONCATENATE',\n0x0151: 'POWER',\n0x0152: 'PIVOT.ADD.DATA',\n0x0153: 'GET.PIVOT.TABLE',\n0x0154: 'GET.PIVOT.FIELD',\n0x0155: 'GET.PIVOT.ITEM',\n0x0156: 'RADIANS',\n0x0157: 'DEGREES',\n0x0158: 'SUBTOTAL',\n0x0159: 'SUMIF',\n0x015A: 'COUNTIF',\n0x015B: 'COUNTBLANK',\n0x015C: 'SCENARIO.GET',\n0x015D: 'OPTIONS.LISTS.GET',\n0x015E: 'ISPMT',\n0x015F: 'DATEDIF',\n0x0160: 'DATESTRING',\n0x0161: 'NUMBERSTRING',\n0x0162: 'ROMAN',\n0x0163: 'OPEN.DIALOG',\n0x0164: 'SAVE.DIALOG',\n0x0165: 'VIEW.GET',\n0x0166: 'GETPIVOTDATA',\n0x0167: 'HYPERLINK',\n0x0168: 'PHONETIC',\n0x0169: 'AVERAGEA',\n0x016A: 'MAXA',\n0x016B: 'MINA',\n0x016C: 'STDEVPA',\n0x016D: 'VARPA',\n0x016E: 'STDEVA',\n0x016F: 'VARA',\n0x0170: 'BAHTTEXT',\n0x0171: 'THAIDAYOFWEEK',\n0x0172: 'THAIDIGIT',\n0x0173: 'THAIMONTHOFYEAR',\n0x0174: 'THAINUMSOUND',\n0x0175: 'THAINUMSTRING',\n0x0176: 'THAISTRINGLENGTH',\n0x0177: 'ISTHAIDIGIT',\n0x0178: 'ROUNDBAHTDOWN',\n0x0179: 'ROUNDBAHTUP',\n0x017A: 'THAIYEAR',\n0x017B: 'RTD',\n\n0x017C: 'CUBEVALUE',\n0x017D: 'CUBEMEMBER',\n0x017E: 'CUBEMEMBERPROPERTY',\n0x017F: 'CUBERANKEDMEMBER',\n0x0180: 'HEX2BIN',\n0x0181: 'HEX2DEC',\n0x0182: 'HEX2OCT',\n0x0183: 'DEC2BIN',\n0x0184: 'DEC2HEX',\n0x0185: 'DEC2OCT',\n0x0186: 'OCT2BIN',\n0x0187: 'OCT2HEX',\n0x0188: 'OCT2DEC',\n0x0189: 'BIN2DEC',\n0x018A: 'BIN2OCT',\n0x018B: 'BIN2HEX',\n0x018C: 'IMSUB',\n0x018D: 'IMDIV',\n0x018E: 'IMPOWER',\n0x018F: 'IMABS',\n0x0190: 'IMSQRT',\n0x0191: 'IMLN',\n0x0192: 'IMLOG2',\n0x0193: 'IMLOG10',\n0x0194: 'IMSIN',\n0x0195: 'IMCOS',\n0x0196: 'IMEXP',\n0x0197: 'IMARGUMENT',\n0x0198: 'IMCONJUGATE',\n0x0199: 'IMAGINARY',\n0x019A: 'IMREAL',\n0x019B: 'COMPLEX',\n0x019C: 'IMSUM',\n0x019D: 'IMPRODUCT',\n0x019E: 'SERIESSUM',\n0x019F: 'FACTDOUBLE',\n0x01A0: 'SQRTPI',\n0x01A1: 'QUOTIENT',\n0x01A2: 'DELTA',\n0x01A3: 'GESTEP',\n0x01A4: 'ISEVEN',\n0x01A5: 'ISODD',\n0x01A6: 'MROUND',\n0x01A7: 'ERF',\n0x01A8: 'ERFC',\n0x01A9: 'BESSELJ',\n0x01AA: 'BESSELK',\n0x01AB: 'BESSELY',\n0x01AC: 'BESSELI',\n0x01AD: 'XIRR',\n0x01AE: 'XNPV',\n0x01AF: 'PRICEMAT',\n0x01B0: 'YIELDMAT',\n0x01B1: 'INTRATE',\n0x01B2: 'RECEIVED',\n0x01B3: 'DISC',\n0x01B4: 'PRICEDISC',\n0x01B5: 'YIELDDISC',\n0x01B6: 'TBILLEQ',\n0x01B7: 'TBILLPRICE',\n0x01B8: 'TBILLYIELD',\n0x01B9: 'PRICE',\n0x01BA: 'YIELD',\n0x01BB: 'DOLLARDE',\n0x01BC: 'DOLLARFR',\n0x01BD: 'NOMINAL',\n0x01BE: 'EFFECT',\n0x01BF: 'CUMPRINC',\n0x01C0: 'CUMIPMT',\n0x01C1: 'EDATE',\n0x01C2: 'EOMONTH',\n0x01C3: 'YEARFRAC',\n0x01C4: 'COUPDAYBS',\n0x01C5: 'COUPDAYS',\n0x01C6: 'COUPDAYSNC',\n0x01C7: 'COUPNCD',\n0x01C8: 'COUPNUM',\n0x01C9: 'COUPPCD',\n0x01CA: 'DURATION',\n0x01CB: 'MDURATION',\n0x01CC: 'ODDLPRICE',\n0x01CD: 'ODDLYIELD',\n0x01CE: 'ODDFPRICE',\n0x01CF: 'ODDFYIELD',\n0x01D0: 'RANDBETWEEN',\n0x01D1: 'WEEKNUM',\n0x01D2: 'AMORDEGRC',\n0x01D3: 'AMORLINC',\n0x01D4: 'CONVERT',\n0x02D4: 'SHEETJS',\n0x01D5: 'ACCRINT',\n0x01D6: 'ACCRINTM',\n0x01D7: 'WORKDAY',\n0x01D8: 'NETWORKDAYS',\n0x01D9: 'GCD',\n0x01DA: 'MULTINOMIAL',\n0x01DB: 'LCM',\n0x01DC: 'FVSCHEDULE',\n0x01DD: 'CUBEKPIMEMBER',\n0x01DE: 'CUBESET',\n0x01DF: 'CUBESETCOUNT',\n0x01E0: 'IFERROR',\n0x01E1: 'COUNTIFS',\n0x01E2: 'SUMIFS',\n0x01E3: 'AVERAGEIF',\n0x01E4: 'AVERAGEIFS'\n};\nvar FtabArgc = {\n0x0002: 1, /* ISNA */\n0x0003: 1, /* ISERROR */\n0x000A: 0, /* NA */\n0x000F: 1, /* SIN */\n0x0010: 1, /* COS */\n0x0011: 1, /* TAN */\n0x0012: 1, /* ATAN */\n0x0013: 0, /* PI */\n0x0014: 1, /* SQRT */\n0x0015: 1, /* EXP */\n0x0016: 1, /* LN */\n0x0017: 1, /* LOG10 */\n0x0018: 1, /* ABS */\n0x0019: 1, /* INT */\n0x001A: 1, /* SIGN */\n0x001B: 2, /* ROUND */\n0x001E: 2, /* REPT */\n0x001F: 3, /* MID */\n0x0020: 1, /* LEN */\n0x0021: 1, /* VALUE */\n0x0022: 0, /* TRUE */\n0x0023: 0, /* FALSE */\n0x0026: 1, /* NOT */\n0x0027: 2, /* MOD */\n0x0028: 3, /* DCOUNT */\n0x0029: 3, /* DSUM */\n0x002A: 3, /* DAVERAGE */\n0x002B: 3, /* DMIN */\n0x002C: 3, /* DMAX */\n0x002D: 3, /* DSTDEV */\n0x002F: 3, /* DVAR */\n0x0030: 2, /* TEXT */\n0x0035: 1, /* GOTO */\n0x003D: 3, /* MIRR */\n0x003F: 0, /* RAND */\n0x0041: 3, /* DATE */\n0x0042: 3, /* TIME */\n0x0043: 1, /* DAY */\n0x0044: 1, /* MONTH */\n0x0045: 1, /* YEAR */\n0x0046: 1, /* WEEKDAY */\n0x0047: 1, /* HOUR */\n0x0048: 1, /* MINUTE */\n0x0049: 1, /* SECOND */\n0x004A: 0, /* NOW */\n0x004B: 1, /* AREAS */\n0x004C: 1, /* ROWS */\n0x004D: 1, /* COLUMNS */\n0x004F: 2, /* ABSREF */\n0x0050: 2, /* RELREF */\n0x0053: 1, /* TRANSPOSE */\n0x0055: 0, /* STEP */\n0x0056: 1, /* TYPE */\n0x0059: 0, /* CALLER */\n0x005A: 1, /* DEREF */\n0x005E: 0, /* ACTIVE.CELL */\n0x005F: 0, /* SELECTION */\n0x0061: 2, /* ATAN2 */\n0x0062: 1, /* ASIN */\n0x0063: 1, /* ACOS */\n0x0065: 3, /* HLOOKUP */\n0x0066: 3, /* VLOOKUP */\n0x0069: 1, /* ISREF */\n0x006A: 1, /* GET.FORMULA */\n0x006C: 2, /* SET.VALUE */\n0x006F: 1, /* CHAR */\n0x0070: 1, /* LOWER */\n0x0071: 1, /* UPPER */\n0x0072: 1, /* PROPER */\n0x0075: 2, /* EXACT */\n0x0076: 1, /* TRIM */\n0x0077: 4, /* REPLACE */\n0x0079: 1, /* CODE */\n0x007E: 1, /* ISERR */\n0x007F: 1, /* ISTEXT */\n0x0080: 1, /* ISNUMBER */\n0x0081: 1, /* ISBLANK */\n0x0082: 1, /* T */\n0x0083: 1, /* N */\n0x0085: 1, /* FCLOSE */\n0x0086: 1, /* FSIZE */\n0x0087: 1, /* FREADLN */\n0x0088: 2, /* FREAD */\n0x0089: 2, /* FWRITELN */\n0x008A: 2, /* FWRITE */\n0x008C: 1, /* DATEVALUE */\n0x008D: 1, /* TIMEVALUE */\n0x008E: 3, /* SLN */\n0x008F: 4, /* SYD */\n0x0090: 4, /* DDB */\n0x00A1: 1, /* DIALOG.BOX */\n0x00A2: 1, /* CLEAN */\n0x00A3: 1, /* MDETERM */\n0x00A4: 1, /* MINVERSE */\n0x00A5: 2, /* MMULT */\n0x00AC: 1, /* WHILE */\n0x00AF: 2, /* INITIATE */\n0x00B0: 2, /* REQUEST */\n0x00B1: 3, /* POKE */\n0x00B2: 2, /* EXECUTE */\n0x00B3: 1, /* TERMINATE */\n0x00B8: 1, /* FACT */\n0x00BA: 1, /* GET.WORKSPACE */\n0x00BD: 3, /* DPRODUCT */\n0x00BE: 1, /* ISNONTEXT */\n0x00C3: 3, /* DSTDEVP */\n0x00C4: 3, /* DVARP */\n0x00C5: 1, /* TRUNC */\n0x00C6: 1, /* ISLOGICAL */\n0x00C7: 3, /* DCOUNTA */\n0x00C9: 1, /* UNREGISTER */\n0x00CF: 4, /* REPLACEB */\n0x00D2: 3, /* MIDB */\n0x00D3: 1, /* LENB */\n0x00D4: 2, /* ROUNDUP */\n0x00D5: 2, /* ROUNDDOWN */\n0x00D6: 1, /* ASC */\n0x00D7: 1, /* DBCS */\n0x00E1: 0, /* END.IF */\n0x00E5: 1, /* SINH */\n0x00E6: 1, /* COSH */\n0x00E7: 1, /* TANH */\n0x00E8: 1, /* ASINH */\n0x00E9: 1, /* ACOSH */\n0x00EA: 1, /* ATANH */\n0x00EB: 3, /* DGET */\n0x00F4: 1, /* INFO */\n0x00F7: 4, /* DB */\n0x00FC: 2, /* FREQUENCY */\n0x0101: 1, /* EVALUATE */\n0x0105: 1, /* ERROR.TYPE */\n0x010F: 1, /* GAMMALN */\n0x0111: 4, /* BINOMDIST */\n0x0112: 2, /* CHIDIST */\n0x0113: 2, /* CHIINV */\n0x0114: 2, /* COMBIN */\n0x0115: 3, /* CONFIDENCE */\n0x0116: 3, /* CRITBINOM */\n0x0117: 1, /* EVEN */\n0x0118: 3, /* EXPONDIST */\n0x0119: 3, /* FDIST */\n0x011A: 3, /* FINV */\n0x011B: 1, /* FISHER */\n0x011C: 1, /* FISHERINV */\n0x011D: 2, /* FLOOR */\n0x011E: 4, /* GAMMADIST */\n0x011F: 3, /* GAMMAINV */\n0x0120: 2, /* CEILING */\n0x0121: 4, /* HYPGEOMDIST */\n0x0122: 3, /* LOGNORMDIST */\n0x0123: 3, /* LOGINV */\n0x0124: 3, /* NEGBINOMDIST */\n0x0125: 4, /* NORMDIST */\n0x0126: 1, /* NORMSDIST */\n0x0127: 3, /* NORMINV */\n0x0128: 1, /* NORMSINV */\n0x0129: 3, /* STANDARDIZE */\n0x012A: 1, /* ODD */\n0x012B: 2, /* PERMUT */\n0x012C: 3, /* POISSON */\n0x012D: 3, /* TDIST */\n0x012E: 4, /* WEIBULL */\n0x012F: 2, /* SUMXMY2 */\n0x0130: 2, /* SUMX2MY2 */\n0x0131: 2, /* SUMX2PY2 */\n0x0132: 2, /* CHITEST */\n0x0133: 2, /* CORREL */\n0x0134: 2, /* COVAR */\n0x0135: 3, /* FORECAST */\n0x0136: 2, /* FTEST */\n0x0137: 2, /* INTERCEPT */\n0x0138: 2, /* PEARSON */\n0x0139: 2, /* RSQ */\n0x013A: 2, /* STEYX */\n0x013B: 2, /* SLOPE */\n0x013C: 4, /* TTEST */\n0x0145: 2, /* LARGE */\n0x0146: 2, /* SMALL */\n0x0147: 2, /* QUARTILE */\n0x0148: 2, /* PERCENTILE */\n0x014B: 2, /* TRIMMEAN */\n0x014C: 2, /* TINV */\n0x0151: 2, /* POWER */\n0x0156: 1, /* RADIANS */\n0x0157: 1, /* DEGREES */\n0x015A: 2, /* COUNTIF */\n0x015B: 1, /* COUNTBLANK */\n0x015E: 4, /* ISPMT */\n0x015F: 3, /* DATEDIF */\n0x0160: 1, /* DATESTRING */\n0x0161: 2, /* NUMBERSTRING */\n0x0168: 1, /* PHONETIC */\n0x0170: 1, /* BAHTTEXT */\n0x0171: 1, /* THAIDAYOFWEEK */\n0x0172: 1, /* THAIDIGIT */\n0x0173: 1, /* THAIMONTHOFYEAR */\n0x0174: 1, /* THAINUMSOUND */\n0x0175: 1, /* THAINUMSTRING */\n0x0176: 1, /* THAISTRINGLENGTH */\n0x0177: 1, /* ISTHAIDIGIT */\n0x0178: 1, /* ROUNDBAHTDOWN */\n0x0179: 1, /* ROUNDBAHTUP */\n0x017A: 1, /* THAIYEAR */\n0x017E: 3, /* CUBEMEMBERPROPERTY */\n0x0181: 1, /* HEX2DEC */\n0x0188: 1, /* OCT2DEC */\n0x0189: 1, /* BIN2DEC */\n0x018C: 2, /* IMSUB */\n0x018D: 2, /* IMDIV */\n0x018E: 2, /* IMPOWER */\n0x018F: 1, /* IMABS */\n0x0190: 1, /* IMSQRT */\n0x0191: 1, /* IMLN */\n0x0192: 1, /* IMLOG2 */\n0x0193: 1, /* IMLOG10 */\n0x0194: 1, /* IMSIN */\n0x0195: 1, /* IMCOS */\n0x0196: 1, /* IMEXP */\n0x0197: 1, /* IMARGUMENT */\n0x0198: 1, /* IMCONJUGATE */\n0x0199: 1, /* IMAGINARY */\n0x019A: 1, /* IMREAL */\n0x019E: 4, /* SERIESSUM */\n0x019F: 1, /* FACTDOUBLE */\n0x01A0: 1, /* SQRTPI */\n0x01A1: 2, /* QUOTIENT */\n0x01A4: 1, /* ISEVEN */\n0x01A5: 1, /* ISODD */\n0x01A6: 2, /* MROUND */\n0x01A8: 1, /* ERFC */\n0x01A9: 2, /* BESSELJ */\n0x01AA: 2, /* BESSELK */\n0x01AB: 2, /* BESSELY */\n0x01AC: 2, /* BESSELI */\n0x01AE: 3, /* XNPV */\n0x01B6: 3, /* TBILLEQ */\n0x01B7: 3, /* TBILLPRICE */\n0x01B8: 3, /* TBILLYIELD */\n0x01BB: 2, /* DOLLARDE */\n0x01BC: 2, /* DOLLARFR */\n0x01BD: 2, /* NOMINAL */\n0x01BE: 2, /* EFFECT */\n0x01BF: 6, /* CUMPRINC */\n0x01C0: 6, /* CUMIPMT */\n0x01C1: 2, /* EDATE */\n0x01C2: 2, /* EOMONTH */\n0x01D0: 2, /* RANDBETWEEN */\n0x01D4: 3, /* CONVERT */\n0x01DC: 2, /* FVSCHEDULE */\n0x01DF: 1, /* CUBESETCOUNT */\n0x01E0: 2, /* IFERROR */\n0xFFFF: 0\n};\n/* [MS-XLSX] 2.2.3 Functions */\n/* [MS-XLSB] 2.5.97.10 Ftab */\nvar XLSXFutureFunctions = {\n\t\"_xlfn.ACOT\": \"ACOT\",\n\t\"_xlfn.ACOTH\": \"ACOTH\",\n\t\"_xlfn.AGGREGATE\": \"AGGREGATE\",\n\t\"_xlfn.ARABIC\": \"ARABIC\",\n\t\"_xlfn.AVERAGEIF\": \"AVERAGEIF\",\n\t\"_xlfn.AVERAGEIFS\": \"AVERAGEIFS\",\n\t\"_xlfn.BASE\": \"BASE\",\n\t\"_xlfn.BETA.DIST\": \"BETA.DIST\",\n\t\"_xlfn.BETA.INV\": \"BETA.INV\",\n\t\"_xlfn.BINOM.DIST\": \"BINOM.DIST\",\n\t\"_xlfn.BINOM.DIST.RANGE\": \"BINOM.DIST.RANGE\",\n\t\"_xlfn.BINOM.INV\": \"BINOM.INV\",\n\t\"_xlfn.BITAND\": \"BITAND\",\n\t\"_xlfn.BITLSHIFT\": \"BITLSHIFT\",\n\t\"_xlfn.BITOR\": \"BITOR\",\n\t\"_xlfn.BITRSHIFT\": \"BITRSHIFT\",\n\t\"_xlfn.BITXOR\": \"BITXOR\",\n\t\"_xlfn.CEILING.MATH\": \"CEILING.MATH\",\n\t\"_xlfn.CEILING.PRECISE\": \"CEILING.PRECISE\",\n\t\"_xlfn.CHISQ.DIST\": \"CHISQ.DIST\",\n\t\"_xlfn.CHISQ.DIST.RT\": \"CHISQ.DIST.RT\",\n\t\"_xlfn.CHISQ.INV\": \"CHISQ.INV\",\n\t\"_xlfn.CHISQ.INV.RT\": \"CHISQ.INV.RT\",\n\t\"_xlfn.CHISQ.TEST\": \"CHISQ.TEST\",\n\t\"_xlfn.COMBINA\": \"COMBINA\",\n\t\"_xlfn.CONCAT\": \"CONCAT\",\n\t\"_xlfn.CONFIDENCE.NORM\": \"CONFIDENCE.NORM\",\n\t\"_xlfn.CONFIDENCE.T\": \"CONFIDENCE.T\",\n\t\"_xlfn.COT\": \"COT\",\n\t\"_xlfn.COTH\": \"COTH\",\n\t\"_xlfn.COUNTIFS\": \"COUNTIFS\",\n\t\"_xlfn.COVARIANCE.P\": \"COVARIANCE.P\",\n\t\"_xlfn.COVARIANCE.S\": \"COVARIANCE.S\",\n\t\"_xlfn.CSC\": \"CSC\",\n\t\"_xlfn.CSCH\": \"CSCH\",\n\t\"_xlfn.DAYS\": \"DAYS\",\n\t\"_xlfn.DECIMAL\": \"DECIMAL\",\n\t\"_xlfn.ECMA.CEILING\": \"ECMA.CEILING\",\n\t\"_xlfn.ERF.PRECISE\": \"ERF.PRECISE\",\n\t\"_xlfn.ERFC.PRECISE\": \"ERFC.PRECISE\",\n\t\"_xlfn.EXPON.DIST\": \"EXPON.DIST\",\n\t\"_xlfn.F.DIST\": \"F.DIST\",\n\t\"_xlfn.F.DIST.RT\": \"F.DIST.RT\",\n\t\"_xlfn.F.INV\": \"F.INV\",\n\t\"_xlfn.F.INV.RT\": \"F.INV.RT\",\n\t\"_xlfn.F.TEST\": \"F.TEST\",\n\t\"_xlfn.FILTERXML\": \"FILTERXML\",\n\t\"_xlfn.FLOOR.MATH\": \"FLOOR.MATH\",\n\t\"_xlfn.FLOOR.PRECISE\": \"FLOOR.PRECISE\",\n\t\"_xlfn.FORECAST.ETS\": \"FORECAST.ETS\",\n\t\"_xlfn.FORECAST.ETS.CONFINT\": \"FORECAST.ETS.CONFINT\",\n\t\"_xlfn.FORECAST.ETS.SEASONALITY\": \"FORECAST.ETS.SEASONALITY\",\n\t\"_xlfn.FORECAST.ETS.STAT\": \"FORECAST.ETS.STAT\",\n\t\"_xlfn.FORECAST.LINEAR\": \"FORECAST.LINEAR\",\n\t\"_xlfn.FORMULATEXT\": \"FORMULATEXT\",\n\t\"_xlfn.GAMMA\": \"GAMMA\",\n\t\"_xlfn.GAMMA.DIST\": \"GAMMA.DIST\",\n\t\"_xlfn.GAMMA.INV\": \"GAMMA.INV\",\n\t\"_xlfn.GAMMALN.PRECISE\": \"GAMMALN.PRECISE\",\n\t\"_xlfn.GAUSS\": \"GAUSS\",\n\t\"_xlfn.HYPGEOM.DIST\": \"HYPGEOM.DIST\",\n\t\"_xlfn.IFERROR\": \"IFERROR\",\n\t\"_xlfn.IFNA\": \"IFNA\",\n\t\"_xlfn.IFS\": \"IFS\",\n\t\"_xlfn.IMCOSH\": \"IMCOSH\",\n\t\"_xlfn.IMCOT\": \"IMCOT\",\n\t\"_xlfn.IMCSC\": \"IMCSC\",\n\t\"_xlfn.IMCSCH\": \"IMCSCH\",\n\t\"_xlfn.IMSEC\": \"IMSEC\",\n\t\"_xlfn.IMSECH\": \"IMSECH\",\n\t\"_xlfn.IMSINH\": \"IMSINH\",\n\t\"_xlfn.IMTAN\": \"IMTAN\",\n\t\"_xlfn.ISFORMULA\": \"ISFORMULA\",\n\t\"_xlfn.ISO.CEILING\": \"ISO.CEILING\",\n\t\"_xlfn.ISOWEEKNUM\": \"ISOWEEKNUM\",\n\t\"_xlfn.LOGNORM.DIST\": \"LOGNORM.DIST\",\n\t\"_xlfn.LOGNORM.INV\": \"LOGNORM.INV\",\n\t\"_xlfn.MAXIFS\": \"MAXIFS\",\n\t\"_xlfn.MINIFS\": \"MINIFS\",\n\t\"_xlfn.MODE.MULT\": \"MODE.MULT\",\n\t\"_xlfn.MODE.SNGL\": \"MODE.SNGL\",\n\t\"_xlfn.MUNIT\": \"MUNIT\",\n\t\"_xlfn.NEGBINOM.DIST\": \"NEGBINOM.DIST\",\n\t\"_xlfn.NETWORKDAYS.INTL\": \"NETWORKDAYS.INTL\",\n\t\"_xlfn.NIGBINOM\": \"NIGBINOM\",\n\t\"_xlfn.NORM.DIST\": \"NORM.DIST\",\n\t\"_xlfn.NORM.INV\": \"NORM.INV\",\n\t\"_xlfn.NORM.S.DIST\": \"NORM.S.DIST\",\n\t\"_xlfn.NORM.S.INV\": \"NORM.S.INV\",\n\t\"_xlfn.NUMBERVALUE\": \"NUMBERVALUE\",\n\t\"_xlfn.PDURATION\": \"PDURATION\",\n\t\"_xlfn.PERCENTILE.EXC\": \"PERCENTILE.EXC\",\n\t\"_xlfn.PERCENTILE.INC\": \"PERCENTILE.INC\",\n\t\"_xlfn.PERCENTRANK.EXC\": \"PERCENTRANK.EXC\",\n\t\"_xlfn.PERCENTRANK.INC\": \"PERCENTRANK.INC\",\n\t\"_xlfn.PERMUTATIONA\": \"PERMUTATIONA\",\n\t\"_xlfn.PHI\": \"PHI\",\n\t\"_xlfn.POISSON.DIST\": \"POISSON.DIST\",\n\t\"_xlfn.QUARTILE.EXC\": \"QUARTILE.EXC\",\n\t\"_xlfn.QUARTILE.INC\": \"QUARTILE.INC\",\n\t\"_xlfn.QUERYSTRING\": \"QUERYSTRING\",\n\t\"_xlfn.RANK.AVG\": \"RANK.AVG\",\n\t\"_xlfn.RANK.EQ\": \"RANK.EQ\",\n\t\"_xlfn.RRI\": \"RRI\",\n\t\"_xlfn.SEC\": \"SEC\",\n\t\"_xlfn.SECH\": \"SECH\",\n\t\"_xlfn.SHEET\": \"SHEET\",\n\t\"_xlfn.SHEETS\": \"SHEETS\",\n\t\"_xlfn.SKEW.P\": \"SKEW.P\",\n\t\"_xlfn.STDEV.P\": \"STDEV.P\",\n\t\"_xlfn.STDEV.S\": \"STDEV.S\",\n\t\"_xlfn.SUMIFS\": \"SUMIFS\",\n\t\"_xlfn.SWITCH\": \"SWITCH\",\n\t\"_xlfn.T.DIST\": \"T.DIST\",\n\t\"_xlfn.T.DIST.2T\": \"T.DIST.2T\",\n\t\"_xlfn.T.DIST.RT\": \"T.DIST.RT\",\n\t\"_xlfn.T.INV\": \"T.INV\",\n\t\"_xlfn.T.INV.2T\": \"T.INV.2T\",\n\t\"_xlfn.T.TEST\": \"T.TEST\",\n\t\"_xlfn.TEXTJOIN\": \"TEXTJOIN\",\n\t\"_xlfn.UNICHAR\": \"UNICHAR\",\n\t\"_xlfn.UNICODE\": \"UNICODE\",\n\t\"_xlfn.VAR.P\": \"VAR.P\",\n\t\"_xlfn.VAR.S\": \"VAR.S\",\n\t\"_xlfn.WEBSERVICE\": \"WEBSERVICE\",\n\t\"_xlfn.WEIBULL.DIST\": \"WEIBULL.DIST\",\n\t\"_xlfn.WORKDAY.INTL\": \"WORKDAY.INTL\",\n\t\"_xlfn.XOR\": \"XOR\",\n\t\"_xlfn.Z.TEST\": \"Z.TEST\"\n};\n\n/* Part 3 TODO: actually parse formulae */\nfunction ods_to_csf_formula(f) {\n\tif(f.slice(0,3) == \"of:\") f = f.slice(3);\n\t/* 5.2 Basic Expressions */\n\tif(f.charCodeAt(0) == 61) {\n\t\tf = f.slice(1);\n\t\tif(f.charCodeAt(0) == 61) f = f.slice(1);\n\t}\n\tf = f.replace(/COM\\.MICROSOFT\\./g, \"\");\n\t/* Part 3 Section 5.8 References */\n\tf = f.replace(/\\[((?:\\.[A-Z]+[0-9]+)(?::\\.[A-Z]+[0-9]+)?)\\]/g, function($$, $1) { return $1.replace(/\\./g,\"\"); });\n\t/* TODO: something other than this */\n\tf = f.replace(/\\[.(#[A-Z]*[?!])\\]/g, \"$1\");\n\treturn f.replace(/[;~]/g,\",\").replace(/\\|/g,\";\");\n}\n\nfunction csf_to_ods_formula(f) {\n\tvar o = \"of:=\" + f.replace(crefregex, \"$1[.$2$3$4$5]\").replace(/\\]:\\[/g,\":\");\n\t/* TODO: something other than this */\n\treturn o.replace(/;/g, \"|\").replace(/,/g,\";\");\n}\n\nfunction ods_to_csf_3D(r) {\n\tvar a = r.split(\":\");\n\tvar s = a[0].split(\".\")[0];\n\treturn [s, a[0].split(\".\")[1] + (a.length > 1 ? (\":\" + (a[1].split(\".\")[1] || a[1].split(\".\")[0])) : \"\")];\n}\n\nfunction csf_to_ods_3D(r) {\n\treturn r.replace(/\\./,\"!\");\n}\n\nvar strs = {}; // shared strings\nvar _ssfopts = {}; // spreadsheet formatting options\n\nRELS.WS = [\n\t\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\",\n\t\"http://purl.oclc.org/ooxml/officeDocument/relationships/worksheet\"\n];\n\n/*global Map */\nvar browser_has_Map = typeof Map !== 'undefined';\n\nfunction get_sst_id(sst, str, rev) {\n\tvar i = 0, len = sst.length;\n\tif(rev) {\n\t\tif(browser_has_Map ? rev.has(str) : Object.prototype.hasOwnProperty.call(rev, str)) {\n\t\t\tvar revarr = browser_has_Map ? rev.get(str) : rev[str];\n\t\t\tfor(; i < revarr.length; ++i) {\n\t\t\t\tif(sst[revarr[i]].t === str) { sst.Count ++; return revarr[i]; }\n\t\t\t}\n\t\t}\n\t} else for(; i < len; ++i) {\n\t\tif(sst[i].t === str) { sst.Count ++; return i; }\n\t}\n\tsst[len] = ({t:str}); sst.Count ++; sst.Unique ++;\n\tif(rev) {\n\t\tif(browser_has_Map) {\n\t\t\tif(!rev.has(str)) rev.set(str, []);\n\t\t\trev.get(str).push(len);\n\t\t} else {\n\t\t\tif(!Object.prototype.hasOwnProperty.call(rev, str)) rev[str] = [];\n\t\t\trev[str].push(len);\n\t\t}\n\t}\n\treturn len;\n}\n\nfunction col_obj_w(C, col) {\n\tvar p = ({min:C+1,max:C+1});\n\t/* wch (chars), wpx (pixels) */\n\tvar wch = -1;\n\tif(col.MDW) MDW = col.MDW;\n\tif(col.width != null) p.customWidth = 1;\n\telse if(col.wpx != null) wch = px2char(col.wpx);\n\telse if(col.wch != null) wch = col.wch;\n\tif(wch > -1) { p.width = char2width(wch); p.customWidth = 1; }\n\telse if(col.width != null) p.width = col.width;\n\tif(col.hidden) p.hidden = true;\n\treturn p;\n}\n\nfunction default_margins(margins, mode) {\n\tif(!margins) return;\n\tvar defs = [0.7, 0.7, 0.75, 0.75, 0.3, 0.3];\n\tif(mode == 'xlml') defs = [1, 1, 1, 1, 0.5, 0.5];\n\tif(margins.left == null) margins.left = defs[0];\n\tif(margins.right == null) margins.right = defs[1];\n\tif(margins.top == null) margins.top = defs[2];\n\tif(margins.bottom == null) margins.bottom = defs[3];\n\tif(margins.header == null) margins.header = defs[4];\n\tif(margins.footer == null) margins.footer = defs[5];\n}\n\nfunction get_cell_style(styles, cell, opts) {\n\tvar z = opts.revssf[cell.z != null ? cell.z : \"General\"];\n\tvar i = 0x3c, len = styles.length;\n\tif(z == null && opts.ssf) {\n\t\tfor(; i < 0x188; ++i) if(opts.ssf[i] == null) {\n\t\t\tSSF.load(cell.z, i);\n\t\t\t// $FlowIgnore\n\t\t\topts.ssf[i] = cell.z;\n\t\t\topts.revssf[cell.z] = z = i;\n\t\t\tbreak;\n\t\t}\n\t}\n\tfor(i = 0; i != len; ++i) if(styles[i].numFmtId === z) return i;\n\tstyles[len] = {\n\t\tnumFmtId:z,\n\t\tfontId:0,\n\t\tfillId:0,\n\t\tborderId:0,\n\t\txfId:0,\n\t\tapplyNumberFormat:1\n\t};\n\treturn len;\n}\n\nfunction safe_format(p, fmtid, fillid, opts, themes, styles) {\n\ttry {\n\t\tif(opts.cellNF) p.z = SSF._table[fmtid];\n\t} catch(e) { if(opts.WTF) throw e; }\n\tif(p.t === 'z') return;\n\tif(p.t === 'd' && typeof p.v === 'string') p.v = parseDate(p.v);\n\tif(!opts || opts.cellText !== false) try {\n\t\tif(SSF._table[fmtid] == null) SSF.load(SSFImplicit[fmtid] || \"General\", fmtid);\n\t\tif(p.t === 'e') p.w = p.w || BErr[p.v];\n\t\telse if(fmtid === 0) {\n\t\t\tif(p.t === 'n') {\n\t\t\t\tif((p.v|0) === p.v) p.w = SSF._general_int(p.v);\n\t\t\t\telse p.w = SSF._general_num(p.v);\n\t\t\t}\n\t\t\telse if(p.t === 'd') {\n\t\t\t\tvar dd = datenum(p.v);\n\t\t\t\tif((dd|0) === dd) p.w = SSF._general_int(dd);\n\t\t\t\telse p.w = SSF._general_num(dd);\n\t\t\t}\n\t\t\telse if(p.v === undefined) return \"\";\n\t\t\telse p.w = SSF._general(p.v,_ssfopts);\n\t\t}\n\t\telse if(p.t === 'd') p.w = SSF.format(fmtid,datenum(p.v),_ssfopts);\n\t\telse p.w = SSF.format(fmtid,p.v,_ssfopts);\n\t} catch(e) { if(opts.WTF) throw e; }\n\tif(!opts.cellStyles) return;\n\tif(fillid != null) try {\n\t\tp.s = styles.Fills[fillid];\n\t\tif (p.s.fgColor && p.s.fgColor.theme && !p.s.fgColor.rgb) {\n\t\t\tp.s.fgColor.rgb = rgb_tint(themes.themeElements.clrScheme[p.s.fgColor.theme].rgb, p.s.fgColor.tint || 0);\n\t\t\tif(opts.WTF) p.s.fgColor.raw_rgb = themes.themeElements.clrScheme[p.s.fgColor.theme].rgb;\n\t\t}\n\t\tif (p.s.bgColor && p.s.bgColor.theme) {\n\t\t\tp.s.bgColor.rgb = rgb_tint(themes.themeElements.clrScheme[p.s.bgColor.theme].rgb, p.s.bgColor.tint || 0);\n\t\t\tif(opts.WTF) p.s.bgColor.raw_rgb = themes.themeElements.clrScheme[p.s.bgColor.theme].rgb;\n\t\t}\n\t} catch(e) { if(opts.WTF && styles.Fills) throw e; }\n}\n\nfunction check_ws(ws, sname, i) {\n\tif(ws && ws['!ref']) {\n\t\tvar range = safe_decode_range(ws['!ref']);\n\t\tif(range.e.c < range.s.c || range.e.r < range.s.r) throw new Error(\"Bad range (\" + i + \"): \" + ws['!ref']);\n\t}\n}\nfunction parse_ws_xml_dim(ws, s) {\n\tvar d = safe_decode_range(s);\n\tif(d.s.r<=d.e.r && d.s.c<=d.e.c && d.s.r>=0 && d.s.c>=0) ws[\"!ref\"] = encode_range(d);\n}\nvar mergecregex = /<(?:\\w:)?mergeCell ref=\"[A-Z0-9:]+\"\\s*[\\/]?>/g;\nvar sheetdataregex = /<(?:\\w+:)?sheetData[^>]*>([\\s\\S]*)<\\/(?:\\w+:)?sheetData>/;\nvar hlinkregex = /<(?:\\w:)?hyperlink [^>]*>/mg;\nvar dimregex = /\"(\\w*:\\w*)\"/;\nvar colregex = /<(?:\\w:)?col\\b[^>]*[\\/]?>/g;\nvar afregex = /<(?:\\w:)?autoFilter[^>]*([\\/]|>([\\s\\S]*)<\\/(?:\\w:)?autoFilter)>/g;\nvar marginregex= /<(?:\\w:)?pageMargins[^>]*\\/>/g;\nvar sheetprregex = /<(?:\\w:)?sheetPr\\b(?:[^>a-z][^>]*)?\\/>/;\nvar svsregex = /<(?:\\w:)?sheetViews[^>]*(?:[\\/]|>([\\s\\S]*)<\\/(?:\\w:)?sheetViews)>/;\n\n/* 18.3 Worksheets */\nfunction parse_ws_xml(data, opts, idx, rels, wb, themes, styles) {\n\tif(!data) return data;\n\tif(!rels) rels = {'!id':{}};\n\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\n\t/* 18.3.1.99 worksheet CT_Worksheet */\n\tvar s = opts.dense ? ([]) : ({});\n\tvar refguess = ({s: {r:2000000, c:2000000}, e: {r:0, c:0} });\n\n\tvar data1 = \"\", data2 = \"\";\n\tvar mtch = data.match(sheetdataregex);\n\tif(mtch) {\n\t\tdata1 = data.slice(0, mtch.index);\n\t\tdata2 = data.slice(mtch.index + mtch[0].length);\n\t} else data1 = data2 = data;\n\n\t/* 18.3.1.82 sheetPr CT_SheetPr */\n\tvar sheetPr = data1.match(sheetprregex);\n\tif(sheetPr) parse_ws_xml_sheetpr(sheetPr[0], s, wb, idx);\n\n\t/* 18.3.1.35 dimension CT_SheetDimension */\n\tvar ridx = (data1.match(/<(?:\\w*:)?dimension/)||{index:-1}).index;\n\tif(ridx > 0) {\n\t\tvar ref = data1.slice(ridx,ridx+50).match(dimregex);\n\t\tif(ref) parse_ws_xml_dim(s, ref[1]);\n\t}\n\n\t/* 18.3.1.88 sheetViews CT_SheetViews */\n\tvar svs = data1.match(svsregex);\n\tif(svs && svs[1]) parse_ws_xml_sheetviews(svs[1], wb);\n\n\t/* 18.3.1.17 cols CT_Cols */\n\tvar columns = [];\n\tif(opts.cellStyles) {\n\t\t/* 18.3.1.13 col CT_Col */\n\t\tvar cols = data1.match(colregex);\n\t\tif(cols) parse_ws_xml_cols(columns, cols);\n\t}\n\n\t/* 18.3.1.80 sheetData CT_SheetData ? */\n\tif(mtch) parse_ws_xml_data(mtch[1], s, opts, refguess, themes, styles);\n\n\t/* 18.3.1.2 autoFilter CT_AutoFilter */\n\tvar afilter = data2.match(afregex);\n\tif(afilter) s['!autofilter'] = parse_ws_xml_autofilter(afilter[0]);\n\n\t/* 18.3.1.55 mergeCells CT_MergeCells */\n\tvar merges = [];\n\tvar _merge = data2.match(mergecregex);\n\tif(_merge) for(ridx = 0; ridx != _merge.length; ++ridx)\n\t\tmerges[ridx] = safe_decode_range(_merge[ridx].slice(_merge[ridx].indexOf(\"\\\"\")+1));\n\n\t/* 18.3.1.48 hyperlinks CT_Hyperlinks */\n\tvar hlink = data2.match(hlinkregex);\n\tif(hlink) parse_ws_xml_hlinks(s, hlink, rels);\n\n\t/* 18.3.1.62 pageMargins CT_PageMargins */\n\tvar margins = data2.match(marginregex);\n\tif(margins) s['!margins'] = parse_ws_xml_margins(parsexmltag(margins[0]));\n\n\tif(!s[\"!ref\"] && refguess.e.c >= refguess.s.c && refguess.e.r >= refguess.s.r) s[\"!ref\"] = encode_range(refguess);\n\tif(opts.sheetRows > 0 && s[\"!ref\"]) {\n\t\tvar tmpref = safe_decode_range(s[\"!ref\"]);\n\t\tif(opts.sheetRows <= +tmpref.e.r) {\n\t\t\ttmpref.e.r = opts.sheetRows - 1;\n\t\t\tif(tmpref.e.r > refguess.e.r) tmpref.e.r = refguess.e.r;\n\t\t\tif(tmpref.e.r < tmpref.s.r) tmpref.s.r = tmpref.e.r;\n\t\t\tif(tmpref.e.c > refguess.e.c) tmpref.e.c = refguess.e.c;\n\t\t\tif(tmpref.e.c < tmpref.s.c) tmpref.s.c = tmpref.e.c;\n\t\t\ts[\"!fullref\"] = s[\"!ref\"];\n\t\t\ts[\"!ref\"] = encode_range(tmpref);\n\t\t}\n\t}\n\tif(columns.length > 0) s[\"!cols\"] = columns;\n\tif(merges.length > 0) s[\"!merges\"] = merges;\n\treturn s;\n}\n\nfunction write_ws_xml_merges(merges) {\n\tif(merges.length === 0) return \"\";\n\tvar o = '';\n\tfor(var i = 0; i != merges.length; ++i) o += '';\n\treturn o + '';\n}\n\n/* 18.3.1.82-3 sheetPr CT_ChartsheetPr / CT_SheetPr */\nfunction parse_ws_xml_sheetpr(sheetPr, s, wb, idx) {\n\tvar data = parsexmltag(sheetPr);\n\tif(!wb.Sheets[idx]) wb.Sheets[idx] = {};\n\tif(data.codeName) wb.Sheets[idx].CodeName = unescapexml(utf8read(data.codeName));\n}\nfunction write_ws_xml_sheetpr(ws, wb, idx, opts, o) {\n\tvar needed = false;\n\tvar props = {}, payload = null;\n\tif(opts.bookType !== 'xlsx' && wb.vbaraw) {\n\t\tvar cname = wb.SheetNames[idx];\n\t\ttry { if(wb.Workbook) cname = wb.Workbook.Sheets[idx].CodeName || cname; } catch(e) {}\n\t\tneeded = true;\n\t\tprops.codeName = utf8write(escapexml(cname));\n\t}\n\n\tif(ws && ws[\"!outline\"]) {\n\t\tvar outlineprops = {summaryBelow:1, summaryRight:1};\n\t\tif(ws[\"!outline\"].above) outlineprops.summaryBelow = 0;\n\t\tif(ws[\"!outline\"].left) outlineprops.summaryRight = 0;\n\t\tpayload = (payload||\"\") + writextag('outlinePr', null, outlineprops);\n\t}\n\n\tif(!needed && !payload) return;\n\to[o.length] = (writextag('sheetPr', payload, props));\n}\n\n/* 18.3.1.85 sheetProtection CT_SheetProtection */\nvar sheetprot_deffalse = [\"objects\", \"scenarios\", \"selectLockedCells\", \"selectUnlockedCells\"];\nvar sheetprot_deftrue = [\n\t\"formatColumns\", \"formatRows\", \"formatCells\",\n\t\"insertColumns\", \"insertRows\", \"insertHyperlinks\",\n\t\"deleteColumns\", \"deleteRows\",\n\t\"sort\", \"autoFilter\", \"pivotTables\"\n];\nfunction write_ws_xml_protection(sp) {\n\t// algorithmName, hashValue, saltValue, spinCount\n\tvar o = ({sheet:1});\n\tsheetprot_deffalse.forEach(function(n) { if(sp[n] != null && sp[n]) o[n] = \"1\"; });\n\tsheetprot_deftrue.forEach(function(n) { if(sp[n] != null && !sp[n]) o[n] = \"0\"; });\n\t/* TODO: algorithm */\n\tif(sp.password) o.password = crypto_CreatePasswordVerifier_Method1(sp.password).toString(16).toUpperCase();\n\treturn writextag('sheetProtection', null, o);\n}\n\nfunction parse_ws_xml_hlinks(s, data, rels) {\n\tvar dense = Array.isArray(s);\n\tfor(var i = 0; i != data.length; ++i) {\n\t\tvar val = parsexmltag(utf8read(data[i]), true);\n\t\tif(!val.ref) return;\n\t\tvar rel = ((rels || {})['!id']||[])[val.id];\n\t\tif(rel) {\n\t\t\tval.Target = rel.Target;\n\t\t\tif(val.location) val.Target += \"#\"+val.location;\n\t\t} else {\n\t\t\tval.Target = \"#\" + val.location;\n\t\t\trel = {Target: val.Target, TargetMode: 'Internal'};\n\t\t}\n\t\tval.Rel = rel;\n\t\tif(val.tooltip) { val.Tooltip = val.tooltip; delete val.tooltip; }\n\t\tvar rng = safe_decode_range(val.ref);\n\t\tfor(var R=rng.s.r;R<=rng.e.r;++R) for(var C=rng.s.c;C<=rng.e.c;++C) {\n\t\t\tvar addr = encode_cell({c:C,r:R});\n\t\t\tif(dense) {\n\t\t\t\tif(!s[R]) s[R] = [];\n\t\t\t\tif(!s[R][C]) s[R][C] = {t:\"z\",v:undefined};\n\t\t\t\ts[R][C].l = val;\n\t\t\t} else {\n\t\t\t\tif(!s[addr]) s[addr] = {t:\"z\",v:undefined};\n\t\t\t\ts[addr].l = val;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction parse_ws_xml_margins(margin) {\n\tvar o = {};\n\t[\"left\", \"right\", \"top\", \"bottom\", \"header\", \"footer\"].forEach(function(k) {\n\t\tif(margin[k]) o[k] = parseFloat(margin[k]);\n\t});\n\treturn o;\n}\nfunction write_ws_xml_margins(margin) {\n\tdefault_margins(margin);\n\treturn writextag('pageMargins', null, margin);\n}\n\nfunction parse_ws_xml_cols(columns, cols) {\n\tvar seencol = false;\n\tfor(var coli = 0; coli != cols.length; ++coli) {\n\t\tvar coll = parsexmltag(cols[coli], true);\n\t\tif(coll.hidden) coll.hidden = parsexmlbool(coll.hidden);\n\t\tvar colm=parseInt(coll.min, 10)-1, colM=parseInt(coll.max,10)-1;\n\t\tdelete coll.min; delete coll.max; coll.width = +coll.width;\n\t\tif(!seencol && coll.width) { seencol = true; find_mdw_colw(coll.width); }\n\t\tprocess_col(coll);\n\t\twhile(colm <= colM) columns[colm++] = dup(coll);\n\t}\n}\nfunction write_ws_xml_cols(ws, cols) {\n\tvar o = [\"\"], col;\n\tfor(var i = 0; i != cols.length; ++i) {\n\t\tif(!(col = cols[i])) continue;\n\t\to[o.length] = (writextag('col', null, col_obj_w(i, col)));\n\t}\n\to[o.length] = \"\";\n\treturn o.join(\"\");\n}\n\nfunction parse_ws_xml_autofilter(data) {\n\tvar o = { ref: (data.match(/ref=\"([^\"]*)\"/)||[])[1]};\n\treturn o;\n}\nfunction write_ws_xml_autofilter(data, ws, wb, idx) {\n\tvar ref = typeof data.ref == \"string\" ? data.ref : encode_range(data.ref);\n\tif(!wb.Workbook) wb.Workbook = ({Sheets:[]});\n\tif(!wb.Workbook.Names) wb.Workbook.Names = [];\n\tvar names = wb.Workbook.Names;\n\tvar range = decode_range(ref);\n\tif(range.s.r == range.e.r) { range.e.r = decode_range(ws[\"!ref\"]).e.r; ref = encode_range(range); }\n\tfor(var i = 0; i < names.length; ++i) {\n\t\tvar name = names[i];\n\t\tif(name.Name != '_xlnm._FilterDatabase') continue;\n\t\tif(name.Sheet != idx) continue;\n\t\tname.Ref = \"'\" + wb.SheetNames[idx] + \"'!\" + ref; break;\n\t}\n\tif(i == names.length) names.push({ Name: '_xlnm._FilterDatabase', Sheet: idx, Ref: \"'\" + wb.SheetNames[idx] + \"'!\" + ref });\n\treturn writextag(\"autoFilter\", null, {ref:ref});\n}\n\n/* 18.3.1.88 sheetViews CT_SheetViews */\n/* 18.3.1.87 sheetView CT_SheetView */\nvar sviewregex = /<(?:\\w:)?sheetView(?:[^>a-z][^>]*)?\\/?>/;\nfunction parse_ws_xml_sheetviews(data, wb) {\n\tif(!wb.Views) wb.Views = [{}];\n\t(data.match(sviewregex)||[]).forEach(function(r, i) {\n\t\tvar tag = parsexmltag(r);\n\t\t// $FlowIgnore\n\t\tif(!wb.Views[i]) wb.Views[i] = {};\n\t\t// $FlowIgnore\n\t\tif(parsexmlbool(tag.rightToLeft)) wb.Views[i].RTL = true;\n\t});\n}\nfunction write_ws_xml_sheetviews(ws, opts, idx, wb) {\n\tvar sview = ({workbookViewId:\"0\"});\n\t// $FlowIgnore\n\tif((((wb||{}).Workbook||{}).Views||[])[0]) sview.rightToLeft = wb.Workbook.Views[0].RTL ? \"1\" : \"0\";\n\treturn writextag(\"sheetViews\", writextag(\"sheetView\", null, sview), {});\n}\n\nfunction write_ws_xml_cell(cell, ref, ws, opts) {\n\tif(cell.v === undefined && typeof cell.f !== \"string\" || cell.t === 'z') return \"\";\n\tvar vv = \"\";\n\tvar oldt = cell.t, oldv = cell.v;\n\tif(cell.t !== \"z\") switch(cell.t) {\n\t\tcase 'b': vv = cell.v ? \"1\" : \"0\"; break;\n\t\tcase 'n': vv = ''+cell.v; break;\n\t\tcase 'e': vv = BErr[cell.v]; break;\n\t\tcase 'd':\n\t\t\tif(opts && opts.cellDates) vv = parseDate(cell.v, -1).toISOString();\n\t\t\telse {\n\t\t\t\tcell = dup(cell);\n\t\t\t\tcell.t = 'n';\n\t\t\t\tvv = ''+(cell.v = datenum(parseDate(cell.v)));\n\t\t\t}\n\t\t\tif(typeof cell.z === 'undefined') cell.z = SSF._table[14];\n\t\t\tbreak;\n\t\tdefault: vv = cell.v; break;\n\t}\n\tvar v = writetag('v', escapexml(vv)), o = ({r:ref});\n\t/* TODO: cell style */\n\tvar os = get_cell_style(opts.cellXfs, cell, opts);\n\tif(os !== 0) o.s = os;\n\tswitch(cell.t) {\n\t\tcase 'n': break;\n\t\tcase 'd': o.t = \"d\"; break;\n\t\tcase 'b': o.t = \"b\"; break;\n\t\tcase 'e': o.t = \"e\"; break;\n\t\tcase 'z': break;\n\t\tdefault: if(cell.v == null) { delete cell.t; break; }\n\t\t\tif(opts && opts.bookSST) {\n\t\t\t\tv = writetag('v', ''+get_sst_id(opts.Strings, cell.v, opts.revStrings));\n\t\t\t\to.t = \"s\"; break;\n\t\t\t}\n\t\t\to.t = \"str\"; break;\n\t}\n\tif(cell.t != oldt) { cell.t = oldt; cell.v = oldv; }\n\tif(typeof cell.f == \"string\" && cell.f) {\n\t\tvar ff = cell.F && cell.F.slice(0, ref.length) == ref ? {t:\"array\", ref:cell.F} : null;\n\t\tv = writextag('f', escapexml(cell.f), ff) + (cell.v != null ? v : \"\");\n\t}\n\tif(cell.l) ws['!links'].push([ref, cell.l]);\n\tif(cell.c) ws['!comments'].push([ref, cell.c]);\n\treturn writextag('c', v, o);\n}\n\nvar parse_ws_xml_data = (function() {\n\tvar cellregex = /<(?:\\w+:)?c[ \\/>]/, rowregex = /<\\/(?:\\w+:)?row>/;\n\tvar rregex = /r=[\"']([^\"']*)[\"']/, isregex = /<(?:\\w+:)?is>([\\S\\s]*?)<\\/(?:\\w+:)?is>/;\n\tvar refregex = /ref=[\"']([^\"']*)[\"']/;\n\tvar match_v = matchtag(\"v\"), match_f = matchtag(\"f\");\n\nreturn function parse_ws_xml_data(sdata, s, opts, guess, themes, styles) {\n\tvar ri = 0, x = \"\", cells = [], cref = [], idx=0, i=0, cc=0, d=\"\", p;\n\tvar tag, tagr = 0, tagc = 0;\n\tvar sstr, ftag;\n\tvar fmtid = 0, fillid = 0;\n\tvar do_format = Array.isArray(styles.CellXf), cf;\n\tvar arrayf = [];\n\tvar sharedf = [];\n\tvar dense = Array.isArray(s);\n\tvar rows = [], rowobj = {}, rowrite = false;\n\tvar sheetStubs = !!opts.sheetStubs;\n\tfor(var marr = sdata.split(rowregex), mt = 0, marrlen = marr.length; mt != marrlen; ++mt) {\n\t\tx = marr[mt].trim();\n\t\tvar xlen = x.length;\n\t\tif(xlen === 0) continue;\n\n\t\t/* 18.3.1.73 row CT_Row */\n\t\tfor(ri = 0; ri < xlen; ++ri) if(x.charCodeAt(ri) === 62) break; ++ri;\n\t\ttag = parsexmltag(x.slice(0,ri), true);\n\t\ttagr = tag.r != null ? parseInt(tag.r, 10) : tagr+1; tagc = -1;\n\t\tif(opts.sheetRows && opts.sheetRows < tagr) continue;\n\t\tif(guess.s.r > tagr - 1) guess.s.r = tagr - 1;\n\t\tif(guess.e.r < tagr - 1) guess.e.r = tagr - 1;\n\n\t\tif(opts && opts.cellStyles) {\n\t\t\trowobj = {}; rowrite = false;\n\t\t\tif(tag.ht) { rowrite = true; rowobj.hpt = parseFloat(tag.ht); rowobj.hpx = pt2px(rowobj.hpt); }\n\t\t\tif(tag.hidden == \"1\") { rowrite = true; rowobj.hidden = true; }\n\t\t\tif(tag.outlineLevel != null) { rowrite = true; rowobj.level = +tag.outlineLevel; }\n\t\t\tif(rowrite) rows[tagr-1] = rowobj;\n\t\t}\n\n\t\t/* 18.3.1.4 c CT_Cell */\n\t\tcells = x.slice(ri).split(cellregex);\n\t\tfor(var rslice = 0; rslice != cells.length; ++rslice) if(cells[rslice].trim().charAt(0) != \"<\") break;\n\t\tcells = cells.slice(rslice);\n\t\tfor(ri = 0; ri != cells.length; ++ri) {\n\t\t\tx = cells[ri].trim();\n\t\t\tif(x.length === 0) continue;\n\t\t\tcref = x.match(rregex); idx = ri; i=0; cc=0;\n\t\t\tx = \"\":\"\") + x;\n\t\t\tif(cref != null && cref.length === 2) {\n\t\t\t\tidx = 0; d=cref[1];\n\t\t\t\tfor(i=0; i != d.length; ++i) {\n\t\t\t\t\tif((cc=d.charCodeAt(i)-64) < 1 || cc > 26) break;\n\t\t\t\t\tidx = 26*idx + cc;\n\t\t\t\t}\n\t\t\t\t--idx;\n\t\t\t\ttagc = idx;\n\t\t\t} else ++tagc;\n\t\t\tfor(i = 0; i != x.length; ++i) if(x.charCodeAt(i) === 62) break; ++i;\n\t\t\ttag = parsexmltag(x.slice(0,i), true);\n\t\t\tif(!tag.r) tag.r = encode_cell({r:tagr-1, c:tagc});\n\t\t\td = x.slice(i);\n\t\t\tp = ({t:\"\"});\n\n\t\t\tif((cref=d.match(match_v))!= null && cref[1] !== '') p.v=unescapexml(cref[1]);\n\t\t\tif(opts.cellFormula) {\n\t\t\t\tif((cref=d.match(match_f))!= null && cref[1] !== '') {\n\t\t\t\t\t/* TODO: match against XLSXFutureFunctions */\n\t\t\t\t\tp.f=unescapexml(utf8read(cref[1])).replace(/\\r\\n/g, \"\\n\");\n\t\t\t\t\tif(!opts.xlfn) p.f = _xlfn(p.f);\n\t\t\t\t\tif(cref[0].indexOf('t=\"array\"') > -1) {\n\t\t\t\t\t\tp.F = (d.match(refregex)||[])[1];\n\t\t\t\t\t\tif(p.F.indexOf(\":\") > -1) arrayf.push([safe_decode_range(p.F), p.F]);\n\t\t\t\t\t} else if(cref[0].indexOf('t=\"shared\"') > -1) {\n\t\t\t\t\t\t// TODO: parse formula\n\t\t\t\t\t\tftag = parsexmltag(cref[0]);\n\t\t\t\t\t\tvar ___f = unescapexml(utf8read(cref[1]));\n\t\t\t\t\t\tif(!opts.xlfn) ___f = _xlfn(___f);\n\t\t\t\t\t\tsharedf[parseInt(ftag.si, 10)] = [ftag, ___f, tag.r];\n\t\t\t\t\t}\n\t\t\t\t} else if((cref=d.match(/]*\\/>/))) {\n\t\t\t\t\tftag = parsexmltag(cref[0]);\n\t\t\t\t\tif(sharedf[ftag.si]) p.f = shift_formula_xlsx(sharedf[ftag.si][1], sharedf[ftag.si][2]/*[0].ref*/, tag.r);\n\t\t\t\t}\n\t\t\t\t/* TODO: factor out contains logic */\n\t\t\t\tvar _tag = decode_cell(tag.r);\n\t\t\t\tfor(i = 0; i < arrayf.length; ++i)\n\t\t\t\t\tif(_tag.r >= arrayf[i][0].s.r && _tag.r <= arrayf[i][0].e.r)\n\t\t\t\t\t\tif(_tag.c >= arrayf[i][0].s.c && _tag.c <= arrayf[i][0].e.c)\n\t\t\t\t\t\t\tp.F = arrayf[i][1];\n\t\t\t}\n\n\t\t\tif(tag.t == null && p.v === undefined) {\n\t\t\t\tif(p.f || p.F) {\n\t\t\t\t\tp.v = 0; p.t = \"n\";\n\t\t\t\t} else if(!sheetStubs) continue;\n\t\t\t\telse p.t = \"z\";\n\t\t\t}\n\t\t\telse p.t = tag.t || \"n\";\n\t\t\tif(guess.s.c > tagc) guess.s.c = tagc;\n\t\t\tif(guess.e.c < tagc) guess.e.c = tagc;\n\t\t\t/* 18.18.11 t ST_CellType */\n\t\t\tswitch(p.t) {\n\t\t\t\tcase 'n':\n\t\t\t\t\tif(p.v == \"\" || p.v == null) {\n\t\t\t\t\t\tif(!sheetStubs) continue;\n\t\t\t\t\t\tp.t = 'z';\n\t\t\t\t\t} else p.v = parseFloat(p.v);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 's':\n\t\t\t\t\tif(typeof p.v == 'undefined') {\n\t\t\t\t\t\tif(!sheetStubs) continue;\n\t\t\t\t\t\tp.t = 'z';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsstr = strs[parseInt(p.v, 10)];\n\t\t\t\t\t\tp.v = sstr.t;\n\t\t\t\t\t\tp.r = sstr.r;\n\t\t\t\t\t\tif(opts.cellHTML) p.h = sstr.h;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'str':\n\t\t\t\t\tp.t = \"s\";\n\t\t\t\t\tp.v = (p.v!=null) ? utf8read(p.v) : '';\n\t\t\t\t\tif(opts.cellHTML) p.h = escapehtml(p.v);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'inlineStr':\n\t\t\t\t\tcref = d.match(isregex);\n\t\t\t\t\tp.t = 's';\n\t\t\t\t\tif(cref != null && (sstr = parse_si(cref[1]))) {\n\t\t\t\t\t\tp.v = sstr.t;\n\t\t\t\t\t\tif(opts.cellHTML) p.h = sstr.h;\n\t\t\t\t\t} else p.v = \"\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'b': p.v = parsexmlbool(p.v); break;\n\t\t\t\tcase 'd':\n\t\t\t\t\tif(opts.cellDates) p.v = parseDate(p.v, 1);\n\t\t\t\t\telse { p.v = datenum(parseDate(p.v, 1)); p.t = 'n'; }\n\t\t\t\t\tbreak;\n\t\t\t\t/* error string in .w, number in .v */\n\t\t\t\tcase 'e':\n\t\t\t\t\tif(!opts || opts.cellText !== false) p.w = p.v;\n\t\t\t\t\tp.v = RBErr[p.v]; break;\n\t\t\t}\n\t\t\t/* formatting */\n\t\t\tfmtid = fillid = 0;\n\t\t\tcf = null;\n\t\t\tif(do_format && tag.s !== undefined) {\n\t\t\t\tcf = styles.CellXf[tag.s];\n\t\t\t\tif(cf != null) {\n\t\t\t\t\tif(cf.numFmtId != null) fmtid = cf.numFmtId;\n\t\t\t\t\tif(opts.cellStyles) {\n\t\t\t\t\t\tif(cf.fillId != null) fillid = cf.fillId;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tsafe_format(p, fmtid, fillid, opts, themes, styles);\n\t\t\tif(opts.cellDates && do_format && p.t == 'n' && SSF.is_date(SSF._table[fmtid])) { p.t = 'd'; p.v = numdate(p.v); }\n\t\t\tif(dense) {\n\t\t\t\tvar _r = decode_cell(tag.r);\n\t\t\t\tif(!s[_r.r]) s[_r.r] = [];\n\t\t\t\ts[_r.r][_r.c] = p;\n\t\t\t} else s[tag.r] = p;\n\t\t}\n\t}\n\tif(rows.length > 0) s['!rows'] = rows;\n}; })();\n\nfunction write_ws_xml_data(ws, opts, idx, wb) {\n\tvar o = [], r = [], range = safe_decode_range(ws['!ref']), cell=\"\", ref, rr = \"\", cols = [], R=0, C=0, rows = ws['!rows'];\n\tvar dense = Array.isArray(ws);\n\tvar params = ({r:rr}), row, height = -1;\n\tfor(C = range.s.c; C <= range.e.c; ++C) cols[C] = encode_col(C);\n\tfor(R = range.s.r; R <= range.e.r; ++R) {\n\t\tr = [];\n\t\trr = encode_row(R);\n\t\tfor(C = range.s.c; C <= range.e.c; ++C) {\n\t\t\tref = cols[C] + rr;\n\t\t\tvar _cell = dense ? (ws[R]||[])[C]: ws[ref];\n\t\t\tif(_cell === undefined) continue;\n\t\t\tif((cell = write_ws_xml_cell(_cell, ref, ws, opts, idx, wb)) != null) r.push(cell);\n\t\t}\n\t\tif(r.length > 0 || (rows && rows[R])) {\n\t\t\tparams = ({r:rr});\n\t\t\tif(rows && rows[R]) {\n\t\t\t\trow = rows[R];\n\t\t\t\tif(row.hidden) params.hidden = 1;\n\t\t\t\theight = -1;\n\t\t\t\tif(row.hpx) height = px2pt(row.hpx);\n\t\t\t\telse if(row.hpt) height = row.hpt;\n\t\t\t\tif(height > -1) { params.ht = height; params.customHeight = 1; }\n\t\t\t\tif(row.level) { params.outlineLevel = row.level; }\n\t\t\t}\n\t\t\to[o.length] = (writextag('row', r.join(\"\"), params));\n\t\t}\n\t}\n\tif(rows) for(; R < rows.length; ++R) {\n\t\tif(rows && rows[R]) {\n\t\t\tparams = ({r:R+1});\n\t\t\trow = rows[R];\n\t\t\tif(row.hidden) params.hidden = 1;\n\t\t\theight = -1;\n\t\t\tif (row.hpx) height = px2pt(row.hpx);\n\t\t\telse if (row.hpt) height = row.hpt;\n\t\t\tif (height > -1) { params.ht = height; params.customHeight = 1; }\n\t\t\tif (row.level) { params.outlineLevel = row.level; }\n\t\t\to[o.length] = (writextag('row', \"\", params));\n\t\t}\n\t}\n\treturn o.join(\"\");\n}\n\nvar WS_XML_ROOT = writextag('worksheet', null, {\n\t'xmlns': XMLNS.main[0],\n\t'xmlns:r': XMLNS.r\n});\n\nfunction write_ws_xml(idx, opts, wb, rels) {\n\tvar o = [XML_HEADER, WS_XML_ROOT];\n\tvar s = wb.SheetNames[idx], sidx = 0, rdata = \"\";\n\tvar ws = wb.Sheets[s];\n\tif(ws == null) ws = {};\n\tvar ref = ws['!ref'] || 'A1';\n\tvar range = safe_decode_range(ref);\n\tif(range.e.c > 0x3FFF || range.e.r > 0xFFFFF) {\n\t\tif(opts.WTF) throw new Error(\"Range \" + ref + \" exceeds format limit A1:XFD1048576\");\n\t\trange.e.c = Math.min(range.e.c, 0x3FFF);\n\t\trange.e.r = Math.min(range.e.c, 0xFFFFF);\n\t\tref = encode_range(range);\n\t}\n\tif(!rels) rels = {};\n\tws['!comments'] = [];\n\tvar _drawing = [];\n\n\twrite_ws_xml_sheetpr(ws, wb, idx, opts, o);\n\n\to[o.length] = (writextag('dimension', null, {'ref': ref}));\n\n\to[o.length] = write_ws_xml_sheetviews(ws, opts, idx, wb);\n\n\t/* TODO: store in WB, process styles */\n\tif(opts.sheetFormat) o[o.length] = (writextag('sheetFormatPr', null, {\n\t\tdefaultRowHeight:opts.sheetFormat.defaultRowHeight||'16',\n\t\tbaseColWidth:opts.sheetFormat.baseColWidth||'10',\n\t\toutlineLevelRow:opts.sheetFormat.outlineLevelRow||'7'\n\t}));\n\n\tif(ws['!cols'] != null && ws['!cols'].length > 0) o[o.length] = (write_ws_xml_cols(ws, ws['!cols']));\n\n\to[sidx = o.length] = '';\n\tws['!links'] = [];\n\tif(ws['!ref'] != null) {\n\t\trdata = write_ws_xml_data(ws, opts, idx, wb, rels);\n\t\tif(rdata.length > 0) o[o.length] = (rdata);\n\t}\n\tif(o.length>sidx+1) { o[o.length] = (''); o[sidx]=o[sidx].replace(\"/>\",\">\"); }\n\n\t/* sheetCalcPr */\n\n\tif(ws['!protect'] != null) o[o.length] = write_ws_xml_protection(ws['!protect']);\n\n\t/* protectedRanges */\n\t/* scenarios */\n\n\tif(ws['!autofilter'] != null) o[o.length] = write_ws_xml_autofilter(ws['!autofilter'], ws, wb, idx);\n\n\t/* sortState */\n\t/* dataConsolidate */\n\t/* customSheetViews */\n\n\tif(ws['!merges'] != null && ws['!merges'].length > 0) o[o.length] = (write_ws_xml_merges(ws['!merges']));\n\n\t/* phoneticPr */\n\t/* conditionalFormatting */\n\t/* dataValidations */\n\n\tvar relc = -1, rel, rId = -1;\n\tif(ws['!links'].length > 0) {\n\t\to[o.length] = \"\";\nws['!links'].forEach(function(l) {\n\t\t\tif(!l[1].Target) return;\n\t\t\trel = ({\"ref\":l[0]});\n\t\t\tif(l[1].Target.charAt(0) != \"#\") {\n\t\t\t\trId = add_rels(rels, -1, escapexml(l[1].Target).replace(/#.*$/, \"\"), RELS.HLINK);\n\t\t\t\trel[\"r:id\"] = \"rId\"+rId;\n\t\t\t}\n\t\t\tif((relc = l[1].Target.indexOf(\"#\")) > -1) rel.location = escapexml(l[1].Target.slice(relc+1));\n\t\t\tif(l[1].Tooltip) rel.tooltip = escapexml(l[1].Tooltip);\n\t\t\to[o.length] = writextag(\"hyperlink\",null,rel);\n\t\t});\n\t\to[o.length] = \"\";\n\t}\n\tdelete ws['!links'];\n\n\t/* printOptions */\n\n\tif(ws['!margins'] != null) o[o.length] = write_ws_xml_margins(ws['!margins']);\n\n\t/* pageSetup */\n\t/* headerFooter */\n\t/* rowBreaks */\n\t/* colBreaks */\n\t/* customProperties */\n\t/* cellWatches */\n\n\tif(!opts || opts.ignoreEC || (opts.ignoreEC == (void 0))) o[o.length] = writetag(\"ignoredErrors\", writextag(\"ignoredError\", null, {numberStoredAsText:1, sqref:ref}));\n\n\t/* smartTags */\n\n\tif(_drawing.length > 0) {\n\t\trId = add_rels(rels, -1, \"../drawings/drawing\" + (idx+1) + \".xml\", RELS.DRAW);\n\t\to[o.length] = writextag(\"drawing\", null, {\"r:id\":\"rId\" + rId});\n\t\tws['!drawing'] = _drawing;\n\t}\n\n\tif(ws['!comments'].length > 0) {\n\t\trId = add_rels(rels, -1, \"../drawings/vmlDrawing\" + (idx+1) + \".vml\", RELS.VML);\n\t\to[o.length] = writextag(\"legacyDrawing\", null, {\"r:id\":\"rId\" + rId});\n\t\tws['!legacy'] = rId;\n\t}\n\n\t/* legacyDrawingHF */\n\t/* picture */\n\t/* oleObjects */\n\t/* controls */\n\t/* webPublishItems */\n\t/* tableParts */\n\t/* extLst */\n\n\tif(o.length>1) { o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n\n/* [MS-XLSB] 2.4.726 BrtRowHdr */\nfunction parse_BrtRowHdr(data, length) {\n\tvar z = ({});\n\tvar tgt = data.l + length;\n\tz.r = data.read_shift(4);\n\tdata.l += 4; // TODO: ixfe\n\tvar miyRw = data.read_shift(2);\n\tdata.l += 1; // TODO: top/bot padding\n\tvar flags = data.read_shift(1);\n\tdata.l = tgt;\n\tif(flags & 0x07) z.level = flags & 0x07;\n\tif(flags & 0x10) z.hidden = true;\n\tif(flags & 0x20) z.hpt = miyRw / 20;\n\treturn z;\n}\nfunction write_BrtRowHdr(R, range, ws) {\n\tvar o = new_buf(17+8*16);\n\tvar row = (ws['!rows']||[])[R]||{};\n\to.write_shift(4, R);\n\n\to.write_shift(4, 0); /* TODO: ixfe */\n\n\tvar miyRw = 0x0140;\n\tif(row.hpx) miyRw = px2pt(row.hpx) * 20;\n\telse if(row.hpt) miyRw = row.hpt * 20;\n\to.write_shift(2, miyRw);\n\n\to.write_shift(1, 0); /* top/bot padding */\n\n\tvar flags = 0x0;\n\tif(row.level) flags |= row.level;\n\tif(row.hidden) flags |= 0x10;\n\tif(row.hpx || row.hpt) flags |= 0x20;\n\to.write_shift(1, flags);\n\n\to.write_shift(1, 0); /* phonetic guide */\n\n\t/* [MS-XLSB] 2.5.8 BrtColSpan explains the mechanism */\n\tvar ncolspan = 0, lcs = o.l;\n\to.l += 4;\n\n\tvar caddr = {r:R, c:0};\n\tfor(var i = 0; i < 16; ++i) {\n\t\tif((range.s.c > ((i+1) << 10)) || (range.e.c < (i << 10))) continue;\n\t\tvar first = -1, last = -1;\n\t\tfor(var j = (i<<10); j < ((i+1)<<10); ++j) {\n\t\t\tcaddr.c = j;\n\t\t\tvar cell = Array.isArray(ws) ? (ws[caddr.r]||[])[caddr.c] : ws[encode_cell(caddr)];\n\t\t\tif(cell) { if(first < 0) first = j; last = j; }\n\t\t}\n\t\tif(first < 0) continue;\n\t\t++ncolspan;\n\t\to.write_shift(4, first);\n\t\to.write_shift(4, last);\n\t}\n\n\tvar l = o.l;\n\to.l = lcs;\n\to.write_shift(4, ncolspan);\n\to.l = l;\n\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\nfunction write_row_header(ba, ws, range, R) {\n\tvar o = write_BrtRowHdr(R, range, ws);\n\tif((o.length > 17) || (ws['!rows']||[])[R]) write_record(ba, 'BrtRowHdr', o);\n}\n\n/* [MS-XLSB] 2.4.820 BrtWsDim */\nvar parse_BrtWsDim = parse_UncheckedRfX;\nvar write_BrtWsDim = write_UncheckedRfX;\n\n/* [MS-XLSB] 2.4.821 BrtWsFmtInfo */\nfunction parse_BrtWsFmtInfo() {\n}\n//function write_BrtWsFmtInfo(ws, o) { }\n\n/* [MS-XLSB] 2.4.823 BrtWsProp */\nfunction parse_BrtWsProp(data, length) {\n\tvar z = {};\n\t/* TODO: pull flags */\n\tdata.l += 19;\n\tz.name = parse_XLSBCodeName(data, length - 19);\n\treturn z;\n}\nfunction write_BrtWsProp(str, o) {\n\tif(o == null) o = new_buf(84+4*str.length);\n\tfor(var i = 0; i < 3; ++i) o.write_shift(1,0);\n\twrite_BrtColor({auto:1}, o);\n\to.write_shift(-4,-1);\n\to.write_shift(-4,-1);\n\twrite_XLSBCodeName(str, o);\n\treturn o.slice(0, o.l);\n}\n\n/* [MS-XLSB] 2.4.306 BrtCellBlank */\nfunction parse_BrtCellBlank(data) {\n\tvar cell = parse_XLSBCell(data);\n\treturn [cell];\n}\nfunction write_BrtCellBlank(cell, ncell, o) {\n\tif(o == null) o = new_buf(8);\n\treturn write_XLSBCell(ncell, o);\n}\n\n\n/* [MS-XLSB] 2.4.307 BrtCellBool */\nfunction parse_BrtCellBool(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar fBool = data.read_shift(1);\n\treturn [cell, fBool, 'b'];\n}\nfunction write_BrtCellBool(cell, ncell, o) {\n\tif(o == null) o = new_buf(9);\n\twrite_XLSBCell(ncell, o);\n\to.write_shift(1, cell.v ? 1 : 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.308 BrtCellError */\nfunction parse_BrtCellError(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar bError = data.read_shift(1);\n\treturn [cell, bError, 'e'];\n}\n\n/* [MS-XLSB] 2.4.311 BrtCellIsst */\nfunction parse_BrtCellIsst(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar isst = data.read_shift(4);\n\treturn [cell, isst, 's'];\n}\nfunction write_BrtCellIsst(cell, ncell, o) {\n\tif(o == null) o = new_buf(12);\n\twrite_XLSBCell(ncell, o);\n\to.write_shift(4, ncell.v);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.313 BrtCellReal */\nfunction parse_BrtCellReal(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar value = parse_Xnum(data);\n\treturn [cell, value, 'n'];\n}\nfunction write_BrtCellReal(cell, ncell, o) {\n\tif(o == null) o = new_buf(16);\n\twrite_XLSBCell(ncell, o);\n\twrite_Xnum(cell.v, o);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.314 BrtCellRk */\nfunction parse_BrtCellRk(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar value = parse_RkNumber(data);\n\treturn [cell, value, 'n'];\n}\nfunction write_BrtCellRk(cell, ncell, o) {\n\tif(o == null) o = new_buf(12);\n\twrite_XLSBCell(ncell, o);\n\twrite_RkNumber(cell.v, o);\n\treturn o;\n}\n\n\n/* [MS-XLSB] 2.4.317 BrtCellSt */\nfunction parse_BrtCellSt(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar value = parse_XLWideString(data);\n\treturn [cell, value, 'str'];\n}\nfunction write_BrtCellSt(cell, ncell, o) {\n\tif(o == null) o = new_buf(12 + 4 * cell.v.length);\n\twrite_XLSBCell(ncell, o);\n\twrite_XLWideString(cell.v, o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.653 BrtFmlaBool */\nfunction parse_BrtFmlaBool(data, length, opts) {\n\tvar end = data.l + length;\n\tvar cell = parse_XLSBCell(data);\n\tcell.r = opts['!row'];\n\tvar value = data.read_shift(1);\n\tvar o = [cell, value, 'b'];\n\tif(opts.cellFormula) {\n\t\tdata.l += 2;\n\t\tvar formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n\t\to[3] = stringify_formula(formula, null/*range*/, cell, opts.supbooks, opts);/* TODO */\n\t}\n\telse data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.654 BrtFmlaError */\nfunction parse_BrtFmlaError(data, length, opts) {\n\tvar end = data.l + length;\n\tvar cell = parse_XLSBCell(data);\n\tcell.r = opts['!row'];\n\tvar value = data.read_shift(1);\n\tvar o = [cell, value, 'e'];\n\tif(opts.cellFormula) {\n\t\tdata.l += 2;\n\t\tvar formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n\t\to[3] = stringify_formula(formula, null/*range*/, cell, opts.supbooks, opts);/* TODO */\n\t}\n\telse data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.655 BrtFmlaNum */\nfunction parse_BrtFmlaNum(data, length, opts) {\n\tvar end = data.l + length;\n\tvar cell = parse_XLSBCell(data);\n\tcell.r = opts['!row'];\n\tvar value = parse_Xnum(data);\n\tvar o = [cell, value, 'n'];\n\tif(opts.cellFormula) {\n\t\tdata.l += 2;\n\t\tvar formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n\t\to[3] = stringify_formula(formula, null/*range*/, cell, opts.supbooks, opts);/* TODO */\n\t}\n\telse data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.656 BrtFmlaString */\nfunction parse_BrtFmlaString(data, length, opts) {\n\tvar end = data.l + length;\n\tvar cell = parse_XLSBCell(data);\n\tcell.r = opts['!row'];\n\tvar value = parse_XLWideString(data);\n\tvar o = [cell, value, 'str'];\n\tif(opts.cellFormula) {\n\t\tdata.l += 2;\n\t\tvar formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n\t\to[3] = stringify_formula(formula, null/*range*/, cell, opts.supbooks, opts);/* TODO */\n\t}\n\telse data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.682 BrtMergeCell */\nvar parse_BrtMergeCell = parse_UncheckedRfX;\nvar write_BrtMergeCell = write_UncheckedRfX;\n/* [MS-XLSB] 2.4.107 BrtBeginMergeCells */\nfunction write_BrtBeginMergeCells(cnt, o) {\n\tif(o == null) o = new_buf(4);\n\to.write_shift(4, cnt);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.662 BrtHLink */\nfunction parse_BrtHLink(data, length) {\n\tvar end = data.l + length;\n\tvar rfx = parse_UncheckedRfX(data, 16);\n\tvar relId = parse_XLNullableWideString(data);\n\tvar loc = parse_XLWideString(data);\n\tvar tooltip = parse_XLWideString(data);\n\tvar display = parse_XLWideString(data);\n\tdata.l = end;\n\tvar o = ({rfx:rfx, relId:relId, loc:loc, display:display});\n\tif(tooltip) o.Tooltip = tooltip;\n\treturn o;\n}\nfunction write_BrtHLink(l, rId) {\n\tvar o = new_buf(50+4*(l[1].Target.length + (l[1].Tooltip || \"\").length));\n\twrite_UncheckedRfX({s:decode_cell(l[0]), e:decode_cell(l[0])}, o);\n\twrite_RelID(\"rId\" + rId, o);\n\tvar locidx = l[1].Target.indexOf(\"#\");\n\tvar loc = locidx == -1 ? \"\" : l[1].Target.slice(locidx+1);\n\twrite_XLWideString(loc || \"\", o);\n\twrite_XLWideString(l[1].Tooltip || \"\", o);\n\twrite_XLWideString(\"\", o);\n\treturn o.slice(0, o.l);\n}\n\n/* [MS-XLSB] 2.4.692 BrtPane */\nfunction parse_BrtPane(/*data, length, opts*/) {\n}\n\n/* [MS-XLSB] 2.4.6 BrtArrFmla */\nfunction parse_BrtArrFmla(data, length, opts) {\n\tvar end = data.l + length;\n\tvar rfx = parse_RfX(data, 16);\n\tvar fAlwaysCalc = data.read_shift(1);\n\tvar o = [rfx]; o[2] = fAlwaysCalc;\n\tif(opts.cellFormula) {\n\t\tvar formula = parse_XLSBArrayParsedFormula(data, end - data.l, opts);\n\t\to[1] = formula;\n\t} else data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.750 BrtShrFmla */\nfunction parse_BrtShrFmla(data, length, opts) {\n\tvar end = data.l + length;\n\tvar rfx = parse_UncheckedRfX(data, 16);\n\tvar o = [rfx];\n\tif(opts.cellFormula) {\n\t\tvar formula = parse_XLSBSharedParsedFormula(data, end - data.l, opts);\n\t\to[1] = formula;\n\t\tdata.l = end;\n\t} else data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.323 BrtColInfo */\n/* TODO: once XLS ColInfo is set, combine the functions */\nfunction write_BrtColInfo(C, col, o) {\n\tif(o == null) o = new_buf(18);\n\tvar p = col_obj_w(C, col);\n\to.write_shift(-4, C);\n\to.write_shift(-4, C);\n\to.write_shift(4, (p.width || 10) * 256);\n\to.write_shift(4, 0/*ixfe*/); // style\n\tvar flags = 0;\n\tif(col.hidden) flags |= 0x01;\n\tif(typeof p.width == 'number') flags |= 0x02;\n\tif(col.level) flags |= (col.level << 8);\n\to.write_shift(2, flags); // bit flag\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.678 BrtMargins */\nvar BrtMarginKeys = [\"left\",\"right\",\"top\",\"bottom\",\"header\",\"footer\"];\nfunction parse_BrtMargins(data) {\n\tvar margins = ({});\n\tBrtMarginKeys.forEach(function(k) { margins[k] = parse_Xnum(data, 8); });\n\treturn margins;\n}\nfunction write_BrtMargins(margins, o) {\n\tif(o == null) o = new_buf(6*8);\n\tdefault_margins(margins);\n\tBrtMarginKeys.forEach(function(k) { write_Xnum((margins)[k], o); });\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.299 BrtBeginWsView */\nfunction parse_BrtBeginWsView(data) {\n\tvar f = data.read_shift(2);\n\tdata.l += 28;\n\treturn { RTL: f & 0x20 };\n}\nfunction write_BrtBeginWsView(ws, Workbook, o) {\n\tif(o == null) o = new_buf(30);\n\tvar f = 0x39c;\n\tif((((Workbook||{}).Views||[])[0]||{}).RTL) f |= 0x20;\n\to.write_shift(2, f); // bit flag\n\to.write_shift(4, 0);\n\to.write_shift(4, 0); // view first row\n\to.write_shift(4, 0); // view first col\n\to.write_shift(1, 0); // gridline color ICV\n\to.write_shift(1, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, 100); // zoom scale\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(4, 0); // workbook view id\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.309 BrtCellIgnoreEC */\nfunction write_BrtCellIgnoreEC(ref) {\n\tvar o = new_buf(24);\n\to.write_shift(4, 4);\n\to.write_shift(4, 1);\n\twrite_UncheckedRfX(ref, o);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.748 BrtSheetProtection */\nfunction write_BrtSheetProtection(sp, o) {\n\tif(o == null) o = new_buf(16*4+2);\n\to.write_shift(2, sp.password ? crypto_CreatePasswordVerifier_Method1(sp.password) : 0);\n\to.write_shift(4, 1); // this record should not be written if no protection\n\t[\n\t\t[\"objects\", false], // fObjects\n\t\t[\"scenarios\", false], // fScenarios\n\t\t[\"formatCells\", true], // fFormatCells\n\t\t[\"formatColumns\", true], // fFormatColumns\n\t\t[\"formatRows\", true], // fFormatRows\n\t\t[\"insertColumns\", true], // fInsertColumns\n\t\t[\"insertRows\", true], // fInsertRows\n\t\t[\"insertHyperlinks\", true], // fInsertHyperlinks\n\t\t[\"deleteColumns\", true], // fDeleteColumns\n\t\t[\"deleteRows\", true], // fDeleteRows\n\t\t[\"selectLockedCells\", false], // fSelLockedCells\n\t\t[\"sort\", true], // fSort\n\t\t[\"autoFilter\", true], // fAutoFilter\n\t\t[\"pivotTables\", true], // fPivotTables\n\t\t[\"selectUnlockedCells\", false] // fSelUnlockedCells\n\t].forEach(function(n) {\nif(n[1]) o.write_shift(4, sp[n[0]] != null && !sp[n[0]] ? 1 : 0);\n\t\telse o.write_shift(4, sp[n[0]] != null && sp[n[0]] ? 0 : 1);\n\t});\n\treturn o;\n}\n\nfunction parse_BrtDVal(/*data, length, opts*/) {\n}\nfunction parse_BrtDVal14(/*data, length, opts*/) {\n}\n/* [MS-XLSB] 2.1.7.61 Worksheet */\nfunction parse_ws_bin(data, _opts, idx, rels, wb, themes, styles) {\n\tif(!data) return data;\n\tvar opts = _opts || {};\n\tif(!rels) rels = {'!id':{}};\n\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\tvar s = (opts.dense ? [] : {});\n\n\tvar ref;\n\tvar refguess = {s: {r:2000000, c:2000000}, e: {r:0, c:0} };\n\n\tvar state = [];\n\tvar pass = false, end = false;\n\tvar row, p, cf, R, C, addr, sstr, rr, cell;\n\tvar merges = [];\n\topts.biff = 12;\n\topts['!row'] = 0;\n\n\tvar ai = 0, af = false;\n\n\tvar arrayf = [];\n\tvar sharedf = {};\n\tvar supbooks = opts.supbooks || wb.supbooks || ([[]]);\n\tsupbooks.sharedf = sharedf;\n\tsupbooks.arrayf = arrayf;\n\tsupbooks.SheetNames = wb.SheetNames || wb.Sheets.map(function(x) { return x.name; });\n\tif(!opts.supbooks) {\n\t\topts.supbooks = supbooks;\n\t\tif(wb.Names) for(var i = 0; i < wb.Names.length; ++i) supbooks[0][i+1] = wb.Names[i];\n\t}\n\n\tvar colinfo = [], rowinfo = [];\n\tvar seencol = false;\n\n\trecordhopper(data, function ws_parse(val, R_n, RT) {\n\t\tif(end) return;\n\t\tswitch(RT) {\n\t\t\tcase 0x0094: /* 'BrtWsDim' */\n\t\t\t\tref = val; break;\n\t\t\tcase 0x0000: /* 'BrtRowHdr' */\n\t\t\t\trow = val;\n\t\t\t\tif(opts.sheetRows && opts.sheetRows <= row.r) end=true;\n\t\t\t\trr = encode_row(R = row.r);\n\t\t\t\topts['!row'] = row.r;\n\t\t\t\tif(val.hidden || val.hpt || val.level != null) {\n\t\t\t\t\tif(val.hpt) val.hpx = pt2px(val.hpt);\n\t\t\t\t\trowinfo[val.r] = val;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0002: /* 'BrtCellRk' */\n\t\t\tcase 0x0003: /* 'BrtCellError' */\n\t\t\tcase 0x0004: /* 'BrtCellBool' */\n\t\t\tcase 0x0005: /* 'BrtCellReal' */\n\t\t\tcase 0x0006: /* 'BrtCellSt' */\n\t\t\tcase 0x0007: /* 'BrtCellIsst' */\n\t\t\tcase 0x0008: /* 'BrtFmlaString' */\n\t\t\tcase 0x0009: /* 'BrtFmlaNum' */\n\t\t\tcase 0x000A: /* 'BrtFmlaBool' */\n\t\t\tcase 0x000B: /* 'BrtFmlaError' */\n\t\t\t\tp = ({t:val[2]});\n\t\t\t\tswitch(val[2]) {\n\t\t\t\t\tcase 'n': p.v = val[1]; break;\n\t\t\t\t\tcase 's': sstr = strs[val[1]]; p.v = sstr.t; p.r = sstr.r; break;\n\t\t\t\t\tcase 'b': p.v = val[1] ? true : false; break;\n\t\t\t\t\tcase 'e': p.v = val[1]; if(opts.cellText !== false) p.w = BErr[p.v]; break;\n\t\t\t\t\tcase 'str': p.t = 's'; p.v = val[1]; break;\n\t\t\t\t}\n\t\t\t\tif((cf = styles.CellXf[val[0].iStyleRef])) safe_format(p,cf.numFmtId,null,opts, themes, styles);\n\t\t\t\tC = val[0].c;\n\t\t\t\tif(opts.dense) { if(!s[R]) s[R] = []; s[R][C] = p; }\n\t\t\t\telse s[encode_col(C) + rr] = p;\n\t\t\t\tif(opts.cellFormula) {\n\t\t\t\t\taf = false;\n\t\t\t\t\tfor(ai = 0; ai < arrayf.length; ++ai) {\n\t\t\t\t\t\tvar aii = arrayf[ai];\n\t\t\t\t\t\tif(row.r >= aii[0].s.r && row.r <= aii[0].e.r)\n\t\t\t\t\t\t\tif(C >= aii[0].s.c && C <= aii[0].e.c) {\n\t\t\t\t\t\t\t\tp.F = encode_range(aii[0]); af = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(!af && val.length > 3) p.f = val[3];\n\t\t\t\t}\n\t\t\t\tif(refguess.s.r > row.r) refguess.s.r = row.r;\n\t\t\t\tif(refguess.s.c > C) refguess.s.c = C;\n\t\t\t\tif(refguess.e.r < row.r) refguess.e.r = row.r;\n\t\t\t\tif(refguess.e.c < C) refguess.e.c = C;\n\t\t\t\tif(opts.cellDates && cf && p.t == 'n' && SSF.is_date(SSF._table[cf.numFmtId])) {\n\t\t\t\t\tvar _d = SSF.parse_date_code(p.v); if(_d) { p.t = 'd'; p.v = new Date(_d.y, _d.m-1,_d.d,_d.H,_d.M,_d.S,_d.u); }\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0001: /* 'BrtCellBlank' */\n\t\t\t\tif(!opts.sheetStubs || pass) break;\n\t\t\t\tp = ({t:'z',v:undefined});\n\t\t\t\tC = val[0].c;\n\t\t\t\tif(opts.dense) { if(!s[R]) s[R] = []; s[R][C] = p; }\n\t\t\t\telse s[encode_col(C) + rr] = p;\n\t\t\t\tif(refguess.s.r > row.r) refguess.s.r = row.r;\n\t\t\t\tif(refguess.s.c > C) refguess.s.c = C;\n\t\t\t\tif(refguess.e.r < row.r) refguess.e.r = row.r;\n\t\t\t\tif(refguess.e.c < C) refguess.e.c = C;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x00B0: /* 'BrtMergeCell' */\n\t\t\t\tmerges.push(val); break;\n\n\t\t\tcase 0x01EE: /* 'BrtHLink' */\n\t\t\t\tvar rel = rels['!id'][val.relId];\n\t\t\t\tif(rel) {\n\t\t\t\t\tval.Target = rel.Target;\n\t\t\t\t\tif(val.loc) val.Target += \"#\"+val.loc;\n\t\t\t\t\tval.Rel = rel;\n\t\t\t\t} else if(val.relId == '') {\n\t\t\t\t\tval.Target = \"#\" + val.loc;\n\t\t\t\t}\n\t\t\t\tfor(R=val.rfx.s.r;R<=val.rfx.e.r;++R) for(C=val.rfx.s.c;C<=val.rfx.e.c;++C) {\n\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\tif(!s[R]) s[R] = [];\n\t\t\t\t\t\tif(!s[R][C]) s[R][C] = {t:'z',v:undefined};\n\t\t\t\t\t\ts[R][C].l = val;\n\t\t\t\t\t} else {\n\t\t\t\t\t\taddr = encode_cell({c:C,r:R});\n\t\t\t\t\t\tif(!s[addr]) s[addr] = {t:'z',v:undefined};\n\t\t\t\t\t\ts[addr].l = val;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 0x01AA: /* 'BrtArrFmla' */\n\t\t\t\tif(!opts.cellFormula) break;\n\t\t\t\tarrayf.push(val);\n\t\t\t\tcell = ((opts.dense ? s[R][C] : s[encode_col(C) + rr]));\n\t\t\t\tcell.f = stringify_formula(val[1], refguess, {r:row.r, c:C}, supbooks, opts);\n\t\t\t\tcell.F = encode_range(val[0]);\n\t\t\t\tbreak;\n\t\t\tcase 0x01AB: /* 'BrtShrFmla' */\n\t\t\t\tif(!opts.cellFormula) break;\n\t\t\t\tsharedf[encode_cell(val[0].s)] = val[1];\n\t\t\t\tcell = (opts.dense ? s[R][C] : s[encode_col(C) + rr]);\n\t\t\t\tcell.f = stringify_formula(val[1], refguess, {r:row.r, c:C}, supbooks, opts);\n\t\t\t\tbreak;\n\n\t\t\t/* identical to 'ColInfo' in XLS */\n\t\t\tcase 0x003C: /* 'BrtColInfo' */\n\t\t\t\tif(!opts.cellStyles) break;\n\t\t\t\twhile(val.e >= val.s) {\n\t\t\t\t\tcolinfo[val.e--] = { width: val.w/256, hidden: !!(val.flags & 0x01), level: val.level };\n\t\t\t\t\tif(!seencol) { seencol = true; find_mdw_colw(val.w/256); }\n\t\t\t\t\tprocess_col(colinfo[val.e+1]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 0x00A1: /* 'BrtBeginAFilter' */\n\t\t\t\ts['!autofilter'] = { ref:encode_range(val) };\n\t\t\t\tbreak;\n\n\t\t\tcase 0x01DC: /* 'BrtMargins' */\n\t\t\t\ts['!margins'] = val;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0093: /* 'BrtWsProp' */\n\t\t\t\tif(!wb.Sheets[idx]) wb.Sheets[idx] = {};\n\t\t\t\tif(val.name) wb.Sheets[idx].CodeName = val.name;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0089: /* 'BrtBeginWsView' */\n\t\t\t\tif(!wb.Views) wb.Views = [{}];\n\t\t\t\tif(!wb.Views[0]) wb.Views[0] = {};\n\t\t\t\tif(val.RTL) wb.Views[0].RTL = true;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x01E5: /* 'BrtWsFmtInfo' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0040: /* 'BrtDVal' */\n\t\t\tcase 0x041D: /* 'BrtDVal14' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0097: /* 'BrtPane' */\n\t\t\t\tbreak;\n\t\t\tcase 0x00AF: /* 'BrtAFilterDateGroupItem' */\n\t\t\tcase 0x0284: /* 'BrtActiveX' */\n\t\t\tcase 0x0271: /* 'BrtBigName' */\n\t\t\tcase 0x0232: /* 'BrtBkHim' */\n\t\t\tcase 0x018C: /* 'BrtBrk' */\n\t\t\tcase 0x0458: /* 'BrtCFIcon' */\n\t\t\tcase 0x047A: /* 'BrtCFRuleExt' */\n\t\t\tcase 0x01D7: /* 'BrtCFVO' */\n\t\t\tcase 0x041A: /* 'BrtCFVO14' */\n\t\t\tcase 0x0289: /* 'BrtCellIgnoreEC' */\n\t\t\tcase 0x0451: /* 'BrtCellIgnoreEC14' */\n\t\t\tcase 0x0031: /* 'BrtCellMeta' */\n\t\t\tcase 0x024D: /* 'BrtCellSmartTagProperty' */\n\t\t\tcase 0x025F: /* 'BrtCellWatch' */\n\t\t\tcase 0x0234: /* 'BrtColor' */\n\t\t\tcase 0x041F: /* 'BrtColor14' */\n\t\t\tcase 0x00A8: /* 'BrtColorFilter' */\n\t\t\tcase 0x00AE: /* 'BrtCustomFilter' */\n\t\t\tcase 0x049C: /* 'BrtCustomFilter14' */\n\t\t\tcase 0x01F3: /* 'BrtDRef' */\n\t\t\tcase 0x01FB: /* 'BrtDXF' */\n\t\t\tcase 0x0226: /* 'BrtDrawing' */\n\t\t\tcase 0x00AB: /* 'BrtDynamicFilter' */\n\t\t\tcase 0x00A7: /* 'BrtFilter' */\n\t\t\tcase 0x0499: /* 'BrtFilter14' */\n\t\t\tcase 0x00A9: /* 'BrtIconFilter' */\n\t\t\tcase 0x049D: /* 'BrtIconFilter14' */\n\t\t\tcase 0x0227: /* 'BrtLegacyDrawing' */\n\t\t\tcase 0x0228: /* 'BrtLegacyDrawingHF' */\n\t\t\tcase 0x0295: /* 'BrtListPart' */\n\t\t\tcase 0x027F: /* 'BrtOleObject' */\n\t\t\tcase 0x01DE: /* 'BrtPageSetup' */\n\t\t\tcase 0x0219: /* 'BrtPhoneticInfo' */\n\t\t\tcase 0x01DD: /* 'BrtPrintOptions' */\n\t\t\tcase 0x0218: /* 'BrtRangeProtection' */\n\t\t\tcase 0x044F: /* 'BrtRangeProtection14' */\n\t\t\tcase 0x02A8: /* 'BrtRangeProtectionIso' */\n\t\t\tcase 0x0450: /* 'BrtRangeProtectionIso14' */\n\t\t\tcase 0x0400: /* 'BrtRwDescent' */\n\t\t\tcase 0x0098: /* 'BrtSel' */\n\t\t\tcase 0x0297: /* 'BrtSheetCalcProp' */\n\t\t\tcase 0x0217: /* 'BrtSheetProtection' */\n\t\t\tcase 0x02A6: /* 'BrtSheetProtectionIso' */\n\t\t\tcase 0x01F8: /* 'BrtSlc' */\n\t\t\tcase 0x0413: /* 'BrtSparkline' */\n\t\t\tcase 0x01AC: /* 'BrtTable' */\n\t\t\tcase 0x00AA: /* 'BrtTop10Filter' */\n\t\t\tcase 0x0C00: /* 'BrtUid' */\n\t\t\tcase 0x0032: /* 'BrtValueMeta' */\n\t\t\tcase 0x0816: /* 'BrtWebExtension' */\n\t\t\tcase 0x0415: /* 'BrtWsFmtInfoEx14' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tpass = false; break;\n\t\t\tcase 0x0025: /* 'BrtACBegin' */\n\t\t\t\tstate.push(R_n); pass = true; break;\n\t\t\tcase 0x0026: /* 'BrtACEnd' */\n\t\t\t\tstate.pop(); pass = false; break;\n\n\t\t\tdefault:\n\t\t\t\tif((R_n||\"\").indexOf(\"Begin\") > 0){/* empty */}\n\t\t\t\telse if((R_n||\"\").indexOf(\"End\") > 0){/* empty */}\n\t\t\t\telse if(!pass || opts.WTF) throw new Error(\"Unexpected record \" + RT + \" \" + R_n);\n\t\t}\n\t}, opts);\n\n\tdelete opts.supbooks;\n\tdelete opts['!row'];\n\n\tif(!s[\"!ref\"] && (refguess.s.r < 2000000 || ref && (ref.e.r > 0 || ref.e.c > 0 || ref.s.r > 0 || ref.s.c > 0))) s[\"!ref\"] = encode_range(ref || refguess);\n\tif(opts.sheetRows && s[\"!ref\"]) {\n\t\tvar tmpref = safe_decode_range(s[\"!ref\"]);\n\t\tif(opts.sheetRows <= +tmpref.e.r) {\n\t\t\ttmpref.e.r = opts.sheetRows - 1;\n\t\t\tif(tmpref.e.r > refguess.e.r) tmpref.e.r = refguess.e.r;\n\t\t\tif(tmpref.e.r < tmpref.s.r) tmpref.s.r = tmpref.e.r;\n\t\t\tif(tmpref.e.c > refguess.e.c) tmpref.e.c = refguess.e.c;\n\t\t\tif(tmpref.e.c < tmpref.s.c) tmpref.s.c = tmpref.e.c;\n\t\t\ts[\"!fullref\"] = s[\"!ref\"];\n\t\t\ts[\"!ref\"] = encode_range(tmpref);\n\t\t}\n\t}\n\tif(merges.length > 0) s[\"!merges\"] = merges;\n\tif(colinfo.length > 0) s[\"!cols\"] = colinfo;\n\tif(rowinfo.length > 0) s[\"!rows\"] = rowinfo;\n\treturn s;\n}\n\n/* TODO: something useful -- this is a stub */\nfunction write_ws_bin_cell(ba, cell, R, C, opts, ws) {\n\tif(cell.v === undefined) return;\n\tvar vv = \"\";\n\tswitch(cell.t) {\n\t\tcase 'b': vv = cell.v ? \"1\" : \"0\"; break;\n\t\tcase 'd': // no BrtCellDate :(\n\t\t\tcell = dup(cell);\n\t\t\tcell.z = cell.z || SSF._table[14];\n\t\t\tcell.v = datenum(parseDate(cell.v)); cell.t = 'n';\n\t\t\tbreak;\n\t\t/* falls through */\n\t\tcase 'n': case 'e': vv = ''+cell.v; break;\n\t\tdefault: vv = cell.v; break;\n\t}\n\tvar o = ({r:R, c:C});\n\t/* TODO: cell style */\n\to.s = get_cell_style(opts.cellXfs, cell, opts);\n\tif(cell.l) ws['!links'].push([encode_cell(o), cell.l]);\n\tif(cell.c) ws['!comments'].push([encode_cell(o), cell.c]);\n\tswitch(cell.t) {\n\t\tcase 's': case 'str':\n\t\t\tif(opts.bookSST) {\n\t\t\t\tvv = get_sst_id(opts.Strings, (cell.v), opts.revStrings);\n\t\t\t\to.t = \"s\"; o.v = vv;\n\t\t\t\twrite_record(ba, \"BrtCellIsst\", write_BrtCellIsst(cell, o));\n\t\t\t} else {\n\t\t\t\to.t = \"str\";\n\t\t\t\twrite_record(ba, \"BrtCellSt\", write_BrtCellSt(cell, o));\n\t\t\t}\n\t\t\treturn;\n\t\tcase 'n':\n\t\t\t/* TODO: determine threshold for Real vs RK */\n\t\t\tif(cell.v == (cell.v | 0) && cell.v > -1000 && cell.v < 1000) write_record(ba, \"BrtCellRk\", write_BrtCellRk(cell, o));\n\t\t\telse write_record(ba, \"BrtCellReal\", write_BrtCellReal(cell, o));\n\t\t\treturn;\n\t\tcase 'b':\n\t\t\to.t = \"b\";\n\t\t\twrite_record(ba, \"BrtCellBool\", write_BrtCellBool(cell, o));\n\t\t\treturn;\n\t\tcase 'e': /* TODO: error */ o.t = \"e\"; break;\n\t}\n\twrite_record(ba, \"BrtCellBlank\", write_BrtCellBlank(cell, o));\n}\n\nfunction write_CELLTABLE(ba, ws, idx, opts) {\n\tvar range = safe_decode_range(ws['!ref'] || \"A1\"), ref, rr = \"\", cols = [];\n\twrite_record(ba, 'BrtBeginSheetData');\n\tvar dense = Array.isArray(ws);\n\tvar cap = range.e.r;\n\tif(ws['!rows']) cap = Math.max(range.e.r, ws['!rows'].length - 1);\n\tfor(var R = range.s.r; R <= cap; ++R) {\n\t\trr = encode_row(R);\n\t\t/* [ACCELLTABLE] */\n\t\t/* BrtRowHdr */\n\t\twrite_row_header(ba, ws, range, R);\n\t\tif(R <= range.e.r) for(var C = range.s.c; C <= range.e.c; ++C) {\n\t\t\t/* *16384CELL */\n\t\t\tif(R === range.s.r) cols[C] = encode_col(C);\n\t\t\tref = cols[C] + rr;\n\t\t\tvar cell = dense ? (ws[R]||[])[C] : ws[ref];\n\t\t\tif(!cell) continue;\n\t\t\t/* write cell */\n\t\t\twrite_ws_bin_cell(ba, cell, R, C, opts, ws);\n\t\t}\n\t}\n\twrite_record(ba, 'BrtEndSheetData');\n}\n\nfunction write_MERGECELLS(ba, ws) {\n\tif(!ws || !ws['!merges']) return;\n\twrite_record(ba, 'BrtBeginMergeCells', write_BrtBeginMergeCells(ws['!merges'].length));\n\tws['!merges'].forEach(function(m) { write_record(ba, 'BrtMergeCell', write_BrtMergeCell(m)); });\n\twrite_record(ba, 'BrtEndMergeCells');\n}\n\nfunction write_COLINFOS(ba, ws) {\n\tif(!ws || !ws['!cols']) return;\n\twrite_record(ba, 'BrtBeginColInfos');\n\tws['!cols'].forEach(function(m, i) { if(m) write_record(ba, 'BrtColInfo', write_BrtColInfo(i, m)); });\n\twrite_record(ba, 'BrtEndColInfos');\n}\n\nfunction write_IGNOREECS(ba, ws) {\n\tif(!ws || !ws['!ref']) return;\n\twrite_record(ba, 'BrtBeginCellIgnoreECs');\n\twrite_record(ba, 'BrtCellIgnoreEC', write_BrtCellIgnoreEC(safe_decode_range(ws['!ref'])));\n\twrite_record(ba, 'BrtEndCellIgnoreECs');\n}\n\nfunction write_HLINKS(ba, ws, rels) {\n\t/* *BrtHLink */\n\tws['!links'].forEach(function(l) {\n\t\tif(!l[1].Target) return;\n\t\tvar rId = add_rels(rels, -1, l[1].Target.replace(/#.*$/, \"\"), RELS.HLINK);\n\t\twrite_record(ba, \"BrtHLink\", write_BrtHLink(l, rId));\n\t});\n\tdelete ws['!links'];\n}\nfunction write_LEGACYDRAWING(ba, ws, idx, rels) {\n\t/* [BrtLegacyDrawing] */\n\tif(ws['!comments'].length > 0) {\n\t\tvar rId = add_rels(rels, -1, \"../drawings/vmlDrawing\" + (idx+1) + \".vml\", RELS.VML);\n\t\twrite_record(ba, \"BrtLegacyDrawing\", write_RelID(\"rId\" + rId));\n\t\tws['!legacy'] = rId;\n\t}\n}\n\nfunction write_AUTOFILTER(ba, ws, wb, idx) {\n\tif(!ws['!autofilter']) return;\n\tvar data = ws['!autofilter'];\n\tvar ref = typeof data.ref === \"string\" ? data.ref : encode_range(data.ref);\n\n\t/* Update FilterDatabase defined name for the worksheet */\n\tif(!wb.Workbook) wb.Workbook = ({Sheets:[]});\n\tif(!wb.Workbook.Names) wb.Workbook.Names = [];\n\tvar names = wb.Workbook.Names;\n\tvar range = decode_range(ref);\n\tif(range.s.r == range.e.r) { range.e.r = decode_range(ws[\"!ref\"]).e.r; ref = encode_range(range); }\n\tfor(var i = 0; i < names.length; ++i) {\n\t\tvar name = names[i];\n\t\tif(name.Name != '_xlnm._FilterDatabase') continue;\n\t\tif(name.Sheet != idx) continue;\n\t\tname.Ref = \"'\" + wb.SheetNames[idx] + \"'!\" + ref; break;\n\t}\n\tif(i == names.length) names.push({ Name: '_xlnm._FilterDatabase', Sheet: idx, Ref: \"'\" + wb.SheetNames[idx] + \"'!\" + ref });\n\n\twrite_record(ba, \"BrtBeginAFilter\", write_UncheckedRfX(safe_decode_range(ref)));\n\t/* *FILTERCOLUMN */\n\t/* [SORTSTATE] */\n\t/* BrtEndAFilter */\n\twrite_record(ba, \"BrtEndAFilter\");\n}\n\nfunction write_WSVIEWS2(ba, ws, Workbook) {\n\twrite_record(ba, \"BrtBeginWsViews\");\n\t{ /* 1*WSVIEW2 */\n\t\t/* [ACUID] */\n\t\twrite_record(ba, \"BrtBeginWsView\", write_BrtBeginWsView(ws, Workbook));\n\t\t/* [BrtPane] */\n\t\t/* *4BrtSel */\n\t\t/* *4SXSELECT */\n\t\t/* *FRT */\n\t\twrite_record(ba, \"BrtEndWsView\");\n\t}\n\t/* *FRT */\n\twrite_record(ba, \"BrtEndWsViews\");\n}\n\nfunction write_WSFMTINFO() {\n\t/* [ACWSFMTINFO] */\n\t//write_record(ba, \"BrtWsFmtInfo\", write_BrtWsFmtInfo(ws));\n}\n\nfunction write_SHEETPROTECT(ba, ws) {\n\tif(!ws['!protect']) return;\n\t/* [BrtSheetProtectionIso] */\n\twrite_record(ba, \"BrtSheetProtection\", write_BrtSheetProtection(ws['!protect']));\n}\n\nfunction write_ws_bin(idx, opts, wb, rels) {\n\tvar ba = buf_array();\n\tvar s = wb.SheetNames[idx], ws = wb.Sheets[s] || {};\n\tvar c = s; try { if(wb && wb.Workbook) c = wb.Workbook.Sheets[idx].CodeName || c; } catch(e) {}\n\tvar r = safe_decode_range(ws['!ref'] || \"A1\");\n\tif(r.e.c > 0x3FFF || r.e.r > 0xFFFFF) {\n\t\tif(opts.WTF) throw new Error(\"Range \" + (ws['!ref'] || \"A1\") + \" exceeds format limit A1:XFD1048576\");\n\t\tr.e.c = Math.min(r.e.c, 0x3FFF);\n\t\tr.e.r = Math.min(r.e.c, 0xFFFFF);\n\t}\n\tws['!links'] = [];\n\t/* passed back to write_zip and removed there */\n\tws['!comments'] = [];\n\twrite_record(ba, \"BrtBeginSheet\");\n\tif(wb.vbaraw) write_record(ba, \"BrtWsProp\", write_BrtWsProp(c));\n\twrite_record(ba, \"BrtWsDim\", write_BrtWsDim(r));\n\twrite_WSVIEWS2(ba, ws, wb.Workbook);\n\twrite_WSFMTINFO(ba, ws);\n\twrite_COLINFOS(ba, ws, idx, opts, wb);\n\twrite_CELLTABLE(ba, ws, idx, opts, wb);\n\t/* [BrtSheetCalcProp] */\n\twrite_SHEETPROTECT(ba, ws);\n\t/* *([BrtRangeProtectionIso] BrtRangeProtection) */\n\t/* [SCENMAN] */\n\twrite_AUTOFILTER(ba, ws, wb, idx);\n\t/* [SORTSTATE] */\n\t/* [DCON] */\n\t/* [USERSHVIEWS] */\n\twrite_MERGECELLS(ba, ws);\n\t/* [BrtPhoneticInfo] */\n\t/* *CONDITIONALFORMATTING */\n\t/* [DVALS] */\n\twrite_HLINKS(ba, ws, rels);\n\t/* [BrtPrintOptions] */\n\tif(ws['!margins']) write_record(ba, \"BrtMargins\", write_BrtMargins(ws['!margins']));\n\t/* [BrtPageSetup] */\n\t/* [HEADERFOOTER] */\n\t/* [RWBRK] */\n\t/* [COLBRK] */\n\t/* *BrtBigName */\n\t/* [CELLWATCHES] */\n\tif(!opts || opts.ignoreEC || (opts.ignoreEC == (void 0))) write_IGNOREECS(ba, ws);\n\t/* [SMARTTAGS] */\n\t/* [BrtDrawing] */\n\twrite_LEGACYDRAWING(ba, ws, idx, rels);\n\t/* [BrtLegacyDrawingHF] */\n\t/* [BrtBkHim] */\n\t/* [OLEOBJECTS] */\n\t/* [ACTIVEXCONTROLS] */\n\t/* [WEBPUBITEMS] */\n\t/* [LISTPARTS] */\n\t/* FRTWORKSHEET */\n\twrite_record(ba, \"BrtEndSheet\");\n\treturn ba.end();\n}\nRELS.CHART = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart\";\nRELS.CHARTEX = \"http://schemas.microsoft.com/office/2014/relationships/chartEx\";\n\nfunction parse_Cache(data) {\n\tvar col = [];\n\tvar num = data.match(/^/);\n\tvar f;\n\n\t/* 21.2.2.150 pt CT_NumVal */\n\t(data.match(/(.*?)<\\/c:pt>/mg)||[]).forEach(function(pt) {\n\t\tvar q = pt.match(/(.*)<\\/c:v><\\/c:pt>/);\n\t\tif(!q) return;\n\t\tcol[+q[1]] = num ? +q[2] : q[2];\n\t});\n\n\t/* 21.2.2.71 formatCode CT_Xstring */\n\tvar nf = unescapexml((data.match(/([\\s\\S]*?)<\\/c:formatCode>/) || [\"\",\"General\"])[1]);\n\n\t(data.match(/(.*?)<\\/c:f>/mg)||[]).forEach(function(F) { f = F.replace(/<.*?>/g,\"\"); });\n\n\treturn [col, nf, f];\n}\n\n/* 21.2 DrawingML - Charts */\nfunction parse_chart(data, name, opts, rels, wb, csheet) {\n\tvar cs = ((csheet || {\"!type\":\"chart\"}));\n\tif(!data) return csheet;\n\t/* 21.2.2.27 chart CT_Chart */\n\n\tvar C = 0, R = 0, col = \"A\";\n\tvar refguess = {s: {r:2000000, c:2000000}, e: {r:0, c:0} };\n\n\t/* 21.2.2.120 numCache CT_NumData */\n\t(data.match(/[\\s\\S]*?<\\/c:numCache>/gm)||[]).forEach(function(nc) {\n\t\tvar cache = parse_Cache(nc);\n\t\trefguess.s.r = refguess.s.c = 0;\n\t\trefguess.e.c = C;\n\t\tcol = encode_col(C);\n\t\tcache[0].forEach(function(n,i) {\n\t\t\tcs[col + encode_row(i)] = {t:'n', v:n, z:cache[1] };\n\t\t\tR = i;\n\t\t});\n\t\tif(refguess.e.r < R) refguess.e.r = R;\n\t\t++C;\n\t});\n\tif(C > 0) cs[\"!ref\"] = encode_range(refguess);\n\treturn cs;\n}\nRELS.CS = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chartsheet\";\n\nvar CS_XML_ROOT = writextag('chartsheet', null, {\n\t'xmlns': XMLNS.main[0],\n\t'xmlns:r': XMLNS.r\n});\n\n/* 18.3 Worksheets also covers Chartsheets */\nfunction parse_cs_xml(data, opts, idx, rels, wb) {\n\tif(!data) return data;\n\t/* 18.3.1.12 chartsheet CT_ChartSheet */\n\tif(!rels) rels = {'!id':{}};\n\tvar s = ({'!type':\"chart\", '!drawel':null, '!rel':\"\"});\n\tvar m;\n\n\t/* 18.3.1.83 sheetPr CT_ChartsheetPr */\n\tvar sheetPr = data.match(sheetprregex);\n\tif(sheetPr) parse_ws_xml_sheetpr(sheetPr[0], s, wb, idx);\n\n\t/* 18.3.1.36 drawing CT_Drawing */\n\tif((m = data.match(/drawing r:id=\"(.*?)\"/))) s['!rel'] = m[1];\n\n\tif(rels['!id'][s['!rel']]) s['!drawel'] = rels['!id'][s['!rel']];\n\treturn s;\n}\nfunction write_cs_xml(idx, opts, wb, rels) {\n\tvar o = [XML_HEADER, CS_XML_ROOT];\n\to[o.length] = writextag(\"drawing\", null, {\"r:id\": \"rId1\"});\n\tadd_rels(rels, -1, \"../drawings/drawing\" + (idx+1) + \".xml\", RELS.DRAW);\n\tif(o.length>2) { o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n\n/* [MS-XLSB] 2.4.331 BrtCsProp */\nfunction parse_BrtCsProp(data, length) {\n\tdata.l += 10;\n\tvar name = parse_XLWideString(data, length - 10);\n\treturn { name: name };\n}\n\n/* [MS-XLSB] 2.1.7.7 Chart Sheet */\nfunction parse_cs_bin(data, opts, idx, rels, wb) {\n\tif(!data) return data;\n\tif(!rels) rels = {'!id':{}};\n\tvar s = {'!type':\"chart\", '!drawel':null, '!rel':\"\"};\n\tvar state = [];\n\tvar pass = false;\n\trecordhopper(data, function cs_parse(val, R_n, RT) {\n\t\tswitch(RT) {\n\n\t\t\tcase 0x0226: /* 'BrtDrawing' */\n\t\t\t\ts['!rel'] = val; break;\n\n\t\t\tcase 0x028B: /* 'BrtCsProp' */\n\t\t\t\tif(!wb.Sheets[idx]) wb.Sheets[idx] = {};\n\t\t\t\tif(val.name) wb.Sheets[idx].CodeName = val.name;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0232: /* 'BrtBkHim' */\n\t\t\tcase 0x028C: /* 'BrtCsPageSetup' */\n\t\t\tcase 0x029D: /* 'BrtCsProtection' */\n\t\t\tcase 0x02A7: /* 'BrtCsProtectionIso' */\n\t\t\tcase 0x0227: /* 'BrtLegacyDrawing' */\n\t\t\tcase 0x0228: /* 'BrtLegacyDrawingHF' */\n\t\t\tcase 0x01DC: /* 'BrtMargins' */\n\t\t\tcase 0x0C00: /* 'BrtUid' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tpass = false; break;\n\t\t\tcase 0x0025: /* 'BrtACBegin' */\n\t\t\t\tstate.push(R_n); break;\n\t\t\tcase 0x0026: /* 'BrtACEnd' */\n\t\t\t\tstate.pop(); break;\n\n\t\t\tdefault:\n\t\t\t\tif((R_n||\"\").indexOf(\"Begin\") > 0) state.push(R_n);\n\t\t\t\telse if((R_n||\"\").indexOf(\"End\") > 0) state.pop();\n\t\t\t\telse if(!pass || opts.WTF) throw new Error(\"Unexpected record \" + RT + \" \" + R_n);\n\t\t}\n\t}, opts);\n\n\tif(rels['!id'][s['!rel']]) s['!drawel'] = rels['!id'][s['!rel']];\n\treturn s;\n}\nfunction write_cs_bin() {\n\tvar ba = buf_array();\n\twrite_record(ba, \"BrtBeginSheet\");\n\t/* [BrtCsProp] */\n\t/* CSVIEWS */\n\t/* [[BrtCsProtectionIso] BrtCsProtection] */\n\t/* [USERCSVIEWS] */\n\t/* [BrtMargins] */\n\t/* [BrtCsPageSetup] */\n\t/* [HEADERFOOTER] */\n\t/* BrtDrawing */\n\t/* [BrtLegacyDrawing] */\n\t/* [BrtLegacyDrawingHF] */\n\t/* [BrtBkHim] */\n\t/* [WEBPUBITEMS] */\n\t/* FRTCHARTSHEET */\n\twrite_record(ba, \"BrtEndSheet\");\n\treturn ba.end();\n}\n/* 18.2.28 (CT_WorkbookProtection) Defaults */\nvar WBPropsDef = [\n\t['allowRefreshQuery', false, \"bool\"],\n\t['autoCompressPictures', true, \"bool\"],\n\t['backupFile', false, \"bool\"],\n\t['checkCompatibility', false, \"bool\"],\n\t['CodeName', ''],\n\t['date1904', false, \"bool\"],\n\t['defaultThemeVersion', 0, \"int\"],\n\t['filterPrivacy', false, \"bool\"],\n\t['hidePivotFieldList', false, \"bool\"],\n\t['promptedSolutions', false, \"bool\"],\n\t['publishItems', false, \"bool\"],\n\t['refreshAllConnections', false, \"bool\"],\n\t['saveExternalLinkValues', true, \"bool\"],\n\t['showBorderUnselectedTables', true, \"bool\"],\n\t['showInkAnnotation', true, \"bool\"],\n\t['showObjects', 'all'],\n\t['showPivotChartFilter', false, \"bool\"],\n\t['updateLinks', 'userSet']\n];\n\n/* 18.2.30 (CT_BookView) Defaults */\nvar WBViewDef = [\n\t['activeTab', 0, \"int\"],\n\t['autoFilterDateGrouping', true, \"bool\"],\n\t['firstSheet', 0, \"int\"],\n\t['minimized', false, \"bool\"],\n\t['showHorizontalScroll', true, \"bool\"],\n\t['showSheetTabs', true, \"bool\"],\n\t['showVerticalScroll', true, \"bool\"],\n\t['tabRatio', 600, \"int\"],\n\t['visibility', 'visible']\n\t//window{Height,Width}, {x,y}Window\n];\n\n/* 18.2.19 (CT_Sheet) Defaults */\nvar SheetDef = [\n\t//['state', 'visible']\n];\n\n/* 18.2.2 (CT_CalcPr) Defaults */\nvar CalcPrDef = [\n\t['calcCompleted', 'true'],\n\t['calcMode', 'auto'],\n\t['calcOnSave', 'true'],\n\t['concurrentCalc', 'true'],\n\t['fullCalcOnLoad', 'false'],\n\t['fullPrecision', 'true'],\n\t['iterate', 'false'],\n\t['iterateCount', '100'],\n\t['iterateDelta', '0.001'],\n\t['refMode', 'A1']\n];\n\n/* 18.2.3 (CT_CustomWorkbookView) Defaults */\n/*var CustomWBViewDef = [\n\t['autoUpdate', 'false'],\n\t['changesSavedWin', 'false'],\n\t['includeHiddenRowCol', 'true'],\n\t['includePrintSettings', 'true'],\n\t['maximized', 'false'],\n\t['minimized', 'false'],\n\t['onlySync', 'false'],\n\t['personalView', 'false'],\n\t['showComments', 'commIndicator'],\n\t['showFormulaBar', 'true'],\n\t['showHorizontalScroll', 'true'],\n\t['showObjects', 'all'],\n\t['showSheetTabs', 'true'],\n\t['showStatusbar', 'true'],\n\t['showVerticalScroll', 'true'],\n\t['tabRatio', '600'],\n\t['xWindow', '0'],\n\t['yWindow', '0']\n];*/\n\nfunction push_defaults_array(target, defaults) {\n\tfor(var j = 0; j != target.length; ++j) { var w = target[j];\n\t\tfor(var i=0; i != defaults.length; ++i) { var z = defaults[i];\n\t\t\tif(w[z[0]] == null) w[z[0]] = z[1];\n\t\t\telse switch(z[2]) {\n\t\t\tcase \"bool\": if(typeof w[z[0]] == \"string\") w[z[0]] = parsexmlbool(w[z[0]]); break;\n\t\t\tcase \"int\": if(typeof w[z[0]] == \"string\") w[z[0]] = parseInt(w[z[0]], 10); break;\n\t\t\t}\n\t\t}\n\t}\n}\nfunction push_defaults(target, defaults) {\n\tfor(var i = 0; i != defaults.length; ++i) { var z = defaults[i];\n\t\tif(target[z[0]] == null) target[z[0]] = z[1];\n\t\telse switch(z[2]) {\n\t\t\tcase \"bool\": if(typeof target[z[0]] == \"string\") target[z[0]] = parsexmlbool(target[z[0]]); break;\n\t\t\tcase \"int\": if(typeof target[z[0]] == \"string\") target[z[0]] = parseInt(target[z[0]], 10); break;\n\t\t}\n\t}\n}\n\nfunction parse_wb_defaults(wb) {\n\tpush_defaults(wb.WBProps, WBPropsDef);\n\tpush_defaults(wb.CalcPr, CalcPrDef);\n\n\tpush_defaults_array(wb.WBView, WBViewDef);\n\tpush_defaults_array(wb.Sheets, SheetDef);\n\n\t_ssfopts.date1904 = parsexmlbool(wb.WBProps.date1904);\n}\n\nfunction safe1904(wb) {\n\t/* TODO: store date1904 somewhere else */\n\tif(!wb.Workbook) return \"false\";\n\tif(!wb.Workbook.WBProps) return \"false\";\n\treturn parsexmlbool(wb.Workbook.WBProps.date1904) ? \"true\" : \"false\";\n}\n\nvar badchars = \"][*?\\/\\\\\".split(\"\");\nfunction check_ws_name(n, safe) {\n\tif(n.length > 31) { if(safe) return false; throw new Error(\"Sheet names cannot exceed 31 chars\"); }\n\tvar _good = true;\n\tbadchars.forEach(function(c) {\n\t\tif(n.indexOf(c) == -1) return;\n\t\tif(!safe) throw new Error(\"Sheet name cannot contain : \\\\ / ? * [ ]\");\n\t\t_good = false;\n\t});\n\treturn _good;\n}\nfunction check_wb_names(N, S, codes) {\n\tN.forEach(function(n,i) {\n\t\tcheck_ws_name(n);\n\t\tfor(var j = 0; j < i; ++j) if(n == N[j]) throw new Error(\"Duplicate Sheet Name: \" + n);\n\t\tif(codes) {\n\t\t\tvar cn = (S && S[i] && S[i].CodeName) || n;\n\t\t\tif(cn.charCodeAt(0) == 95 && cn.length > 22) throw new Error(\"Bad Code Name: Worksheet\" + cn);\n\t\t}\n\t});\n}\nfunction check_wb(wb) {\n\tif(!wb || !wb.SheetNames || !wb.Sheets) throw new Error(\"Invalid Workbook\");\n\tif(!wb.SheetNames.length) throw new Error(\"Workbook is empty\");\n\tvar Sheets = (wb.Workbook && wb.Workbook.Sheets) || [];\n\tcheck_wb_names(wb.SheetNames, Sheets, !!wb.vbaraw);\n\tfor(var i = 0; i < wb.SheetNames.length; ++i) check_ws(wb.Sheets[wb.SheetNames[i]], wb.SheetNames[i], i);\n\t/* TODO: validate workbook */\n}\n/* 18.2 Workbook */\nvar wbnsregex = /<\\w+:workbook/;\nfunction parse_wb_xml(data, opts) {\n\tif(!data) throw new Error(\"Could not find file\");\n\tvar wb = { AppVersion:{}, WBProps:{}, WBView:[], Sheets:[], CalcPr:{}, Names:[], xmlns: \"\" };\n\tvar pass = false, xmlns = \"xmlns\";\n\tvar dname = {}, dnstart = 0;\n\tdata.replace(tagregex, function xml_wb(x, idx) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.13 fileVersion CT_FileVersion ? */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.2.12 fileSharing CT_FileSharing ? */\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.28 workbookPr CT_WorkbookPr ? */\n\t\t\tcase '':\n\t\t\t\tWBPropsDef.forEach(function(w) {\n\t\t\t\t\tif(y[w[0]] == null) return;\n\t\t\t\t\tswitch(w[2]) {\n\t\t\t\t\t\tcase \"bool\": wb.WBProps[w[0]] = parsexmlbool(y[w[0]]); break;\n\t\t\t\t\t\tcase \"int\": wb.WBProps[w[0]] = parseInt(y[w[0]], 10); break;\n\t\t\t\t\t\tdefault: wb.WBProps[w[0]] = y[w[0]];\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif(y.codeName) wb.WBProps.CodeName = utf8read(y.codeName);\n\t\t\t\tbreak;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.29 workbookProtection CT_WorkbookProtection ? */\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.1 bookViews CT_BookViews ? */\n\t\t\tcase '': case '': break;\n\t\t\t/* 18.2.30 workbookView CT_BookView + */\n\t\t\tcase '': delete y[0]; wb.WBView.push(y); break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.20 sheets CT_Sheets 1 */\n\t\t\tcase '': case '': break; // aggregate sheet\n\t\t\t/* 18.2.19 sheet CT_Sheet + */\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.15 functionGroups CT_FunctionGroups ? */\n\t\t\tcase '': break;\n\t\t\t/* 18.2.14 functionGroup CT_FunctionGroup + */\n\t\t\tcase '': case '': break;\n\t\t\t/* 18.2.8 externalReference CT_ExternalReference + */\n\t\t\tcase '': break;\n\t\t\tcase '': case '': pass=false; break;\n\t\t\t/* 18.2.5 definedName CT_DefinedName + */\n\t\t\tcase '': {\n\t\t\t\tdname.Ref = unescapexml(utf8read(data.slice(dnstart, idx)));\n\t\t\t\twb.Names.push(dname);\n\t\t\t} break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.2 calcPr CT_CalcPr ? */\n\t\t\tcase '': delete y[0]; wb.CalcPr = y; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.16 oleSize CT_OleSize ? (ref required) */\n\t\t\tcase '': case '': case '': break;\n\n\t\t\t/* 18.2.18 pivotCaches CT_PivotCaches ? */\n\t\t\tcase '': case '': case '': break;\n\n\t\t\t/* 18.2.23 smartTagTypes CT_SmartTagTypes ? */\n\t\t\tcase '': case '': break;\n\t\t\t/* 18.2.22 smartTagType CT_SmartTagType ? */\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.11 fileRecoveryPr CT_FileRecoveryPr ? */\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.26 webPublishObjects CT_WebPublishObjects ? */\n\t\t\tcase '': case '': break;\n\t\t\t/* 18.2.25 webPublishObject CT_WebPublishObject ? */\n\t\t\tcase '': case '': case '': break;\n\t\t\t/* 18.2.7 ext CT_Extension + */\n\t\t\tcase '': pass=false; break;\n\n\t\t\t/* Others */\n\t\t\tcase '': pass=true; break;\n\t\t\tcase '': pass=false; break;\n\n\t\t\t/* TODO */\n\t\t\tcase ' 0);\n\n\t/* fileVersion */\n\t/* fileSharing */\n\n\tvar workbookPr = ({codeName:\"ThisWorkbook\"});\n\tif(wb.Workbook && wb.Workbook.WBProps) {\n\t\tWBPropsDef.forEach(function(x) {\nif((wb.Workbook.WBProps[x[0]]) == null) return;\n\t\t\tif((wb.Workbook.WBProps[x[0]]) == x[1]) return;\n\t\t\tworkbookPr[x[0]] = (wb.Workbook.WBProps[x[0]]);\n\t\t});\nif(wb.Workbook.WBProps.CodeName) { workbookPr.codeName = wb.Workbook.WBProps.CodeName; delete workbookPr.CodeName; }\n\t}\n\to[o.length] = (writextag('workbookPr', null, workbookPr));\n\n\t/* workbookProtection */\n\n\tvar sheets = wb.Workbook && wb.Workbook.Sheets || [];\n\tvar i = 0;\n\n\t/* bookViews only written if first worksheet is hidden */\n\tif(sheets && sheets[0] && !!sheets[0].Hidden) {\n\t\to[o.length] = \"\";\n\t\tfor(i = 0; i != wb.SheetNames.length; ++i) {\n\t\t\tif(!sheets[i]) break;\n\t\t\tif(!sheets[i].Hidden) break;\n\t\t}\n\t\tif(i == wb.SheetNames.length) i = 0;\n\t\to[o.length] = '';\n\t\to[o.length] = \"\";\n\t}\n\n\to[o.length] = \"\";\n\tfor(i = 0; i != wb.SheetNames.length; ++i) {\n\t\tvar sht = ({name:escapexml(wb.SheetNames[i].slice(0,31))});\n\t\tsht.sheetId = \"\"+(i+1);\n\t\tsht[\"r:id\"] = \"rId\"+(i+1);\n\t\tif(sheets[i]) switch(sheets[i].Hidden) {\n\t\t\tcase 1: sht.state = \"hidden\"; break;\n\t\t\tcase 2: sht.state = \"veryHidden\"; break;\n\t\t}\n\t\to[o.length] = (writextag('sheet',null,sht));\n\t}\n\to[o.length] = \"\";\n\n\t/* functionGroups */\n\t/* externalReferences */\n\n\tif(write_names) {\n\t\to[o.length] = \"\";\n\t\tif(wb.Workbook && wb.Workbook.Names) wb.Workbook.Names.forEach(function(n) {\n\t\t\tvar d = {name:n.Name};\n\t\t\tif(n.Comment) d.comment = n.Comment;\n\t\t\tif(n.Sheet != null) d.localSheetId = \"\"+n.Sheet;\n\t\t\tif(n.Hidden) d.hidden = \"1\";\n\t\t\tif(!n.Ref) return;\n\t\t\to[o.length] = writextag('definedName', escapexml(n.Ref), d);\n\t\t});\n\t\to[o.length] = \"\";\n\t}\n\n\t/* calcPr */\n\t/* oleSize */\n\t/* customWorkbookViews */\n\t/* pivotCaches */\n\t/* smartTagPr */\n\t/* smartTagTypes */\n\t/* webPublishing */\n\t/* fileRecoveryPr */\n\t/* webPublishObjects */\n\t/* extLst */\n\n\tif(o.length>2){ o[o.length] = ''; o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* [MS-XLSB] 2.4.304 BrtBundleSh */\nfunction parse_BrtBundleSh(data, length) {\n\tvar z = {};\n\tz.Hidden = data.read_shift(4); //hsState ST_SheetState\n\tz.iTabID = data.read_shift(4);\n\tz.strRelID = parse_RelID(data,length-8);\n\tz.name = parse_XLWideString(data);\n\treturn z;\n}\nfunction write_BrtBundleSh(data, o) {\n\tif(!o) o = new_buf(127);\n\to.write_shift(4, data.Hidden);\n\to.write_shift(4, data.iTabID);\n\twrite_RelID(data.strRelID, o);\n\twrite_XLWideString(data.name.slice(0,31), o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.815 BrtWbProp */\nfunction parse_BrtWbProp(data, length) {\n\tvar o = ({});\n\tvar flags = data.read_shift(4);\n\to.defaultThemeVersion = data.read_shift(4);\n\tvar strName = (length > 8) ? parse_XLWideString(data) : \"\";\n\tif(strName.length > 0) o.CodeName = strName;\n\to.autoCompressPictures = !!(flags & 0x10000);\n\to.backupFile = !!(flags & 0x40);\n\to.checkCompatibility = !!(flags & 0x1000);\n\to.date1904 = !!(flags & 0x01);\n\to.filterPrivacy = !!(flags & 0x08);\n\to.hidePivotFieldList = !!(flags & 0x400);\n\to.promptedSolutions = !!(flags & 0x10);\n\to.publishItems = !!(flags & 0x800);\n\to.refreshAllConnections = !!(flags & 0x40000);\n\to.saveExternalLinkValues = !!(flags & 0x80);\n\to.showBorderUnselectedTables = !!(flags & 0x04);\n\to.showInkAnnotation = !!(flags & 0x20);\n\to.showObjects = [\"all\", \"placeholders\", \"none\"][(flags >> 13) & 0x03];\n\to.showPivotChartFilter = !!(flags & 0x8000);\n\to.updateLinks = [\"userSet\", \"never\", \"always\"][(flags >> 8) & 0x03];\n\treturn o;\n}\nfunction write_BrtWbProp(data, o) {\n\tif(!o) o = new_buf(72);\n\tvar flags = 0;\n\tif(data) {\n\t\t/* TODO: mirror parse_BrtWbProp fields */\n\t\tif(data.filterPrivacy) flags |= 0x08;\n\t}\n\to.write_shift(4, flags);\n\to.write_shift(4, 0);\n\twrite_XLSBCodeName(data && data.CodeName || \"ThisWorkbook\", o);\n\treturn o.slice(0, o.l);\n}\n\nfunction parse_BrtFRTArchID$(data, length) {\n\tvar o = {};\n\tdata.read_shift(4);\n\to.ArchID = data.read_shift(4);\n\tdata.l += length - 8;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.687 BrtName */\nfunction parse_BrtName(data, length, opts) {\n\tvar end = data.l + length;\n\tdata.l += 4; //var flags = data.read_shift(4);\n\tdata.l += 1; //var chKey = data.read_shift(1);\n\tvar itab = data.read_shift(4);\n\tvar name = parse_XLNameWideString(data);\n\tvar formula = parse_XLSBNameParsedFormula(data, 0, opts);\n\tvar comment = parse_XLNullableWideString(data);\n\t//if(0 /* fProc */) {\n\t\t// unusedstring1: XLNullableWideString\n\t\t// description: XLNullableWideString\n\t\t// helpTopic: XLNullableWideString\n\t\t// unusedstring2: XLNullableWideString\n\t//}\n\tdata.l = end;\n\tvar out = ({Name:name, Ptg:formula});\n\tif(itab < 0xFFFFFFF) out.Sheet = itab;\n\tif(comment) out.Comment = comment;\n\treturn out;\n}\n\n/* [MS-XLSB] 2.1.7.61 Workbook */\nfunction parse_wb_bin(data, opts) {\n\tvar wb = { AppVersion:{}, WBProps:{}, WBView:[], Sheets:[], CalcPr:{}, xmlns: \"\" };\n\tvar state = [];\n\tvar pass = false;\n\n\tif(!opts) opts = {};\n\topts.biff = 12;\n\n\tvar Names = [];\n\tvar supbooks = ([[]]);\n\tsupbooks.SheetNames = [];\n\tsupbooks.XTI = [];\n\n\trecordhopper(data, function hopper_wb(val, R_n, RT) {\n\t\tswitch(RT) {\n\t\t\tcase 0x009C: /* 'BrtBundleSh' */\n\t\t\t\tsupbooks.SheetNames.push(val.name);\n\t\t\t\twb.Sheets.push(val); break;\n\n\t\t\tcase 0x0099: /* 'BrtWbProp' */\n\t\t\t\twb.WBProps = val; break;\n\n\t\t\tcase 0x0027: /* 'BrtName' */\n\t\t\t\tif(val.Sheet != null) opts.SID = val.Sheet;\n\t\t\t\tval.Ref = stringify_formula(val.Ptg, null, null, supbooks, opts);\n\t\t\t\tdelete opts.SID;\n\t\t\t\tdelete val.Ptg;\n\t\t\t\tNames.push(val);\n\t\t\t\tbreak;\n\t\t\tcase 0x040C: /* 'BrtNameExt' */ break;\n\n\t\t\tcase 0x0165: /* 'BrtSupSelf' */\n\t\t\tcase 0x0166: /* 'BrtSupSame' */\n\t\t\tcase 0x0163: /* 'BrtSupBookSrc' */\n\t\t\tcase 0x029B: /* 'BrtSupAddin' */\n\t\t\t\tif(!supbooks[0].length) supbooks[0] = [RT, val];\n\t\t\t\telse supbooks.push([RT, val]);\n\t\t\t\tsupbooks[supbooks.length - 1].XTI = [];\n\t\t\t\tbreak;\n\t\t\tcase 0x016A: /* 'BrtExternSheet' */\n\t\t\t\tif(supbooks.length === 0) { supbooks[0] = []; supbooks[0].XTI = []; }\n\t\t\t\tsupbooks[supbooks.length - 1].XTI = supbooks[supbooks.length - 1].XTI.concat(val);\n\t\t\t\tsupbooks.XTI = supbooks.XTI.concat(val);\n\t\t\t\tbreak;\n\t\t\tcase 0x0169: /* 'BrtPlaceholderName' */\n\t\t\t\tbreak;\n\n\t\t\t/* case 'BrtModelTimeGroupingCalcCol' */\n\t\t\tcase 0x0C00: /* 'BrtUid' */\n\t\t\tcase 0x0C01: /* 'BrtRevisionPtr' */\n\t\t\tcase 0x0817: /* 'BrtAbsPath15' */\n\t\t\tcase 0x0216: /* 'BrtBookProtection' */\n\t\t\tcase 0x02A5: /* 'BrtBookProtectionIso' */\n\t\t\tcase 0x009E: /* 'BrtBookView' */\n\t\t\tcase 0x009D: /* 'BrtCalcProp' */\n\t\t\tcase 0x0262: /* 'BrtCrashRecErr' */\n\t\t\tcase 0x0802: /* 'BrtDecoupledPivotCacheID' */\n\t\t\tcase 0x009B: /* 'BrtFileRecover' */\n\t\t\tcase 0x0224: /* 'BrtFileSharing' */\n\t\t\tcase 0x02A4: /* 'BrtFileSharingIso' */\n\t\t\tcase 0x0080: /* 'BrtFileVersion' */\n\t\t\tcase 0x0299: /* 'BrtFnGroup' */\n\t\t\tcase 0x0850: /* 'BrtModelRelationship' */\n\t\t\tcase 0x084D: /* 'BrtModelTable' */\n\t\t\tcase 0x0225: /* 'BrtOleSize' */\n\t\t\tcase 0x0805: /* 'BrtPivotTableRef' */\n\t\t\tcase 0x0254: /* 'BrtSmartTagType' */\n\t\t\tcase 0x081C: /* 'BrtTableSlicerCacheID' */\n\t\t\tcase 0x081B: /* 'BrtTableSlicerCacheIDs' */\n\t\t\tcase 0x0822: /* 'BrtTimelineCachePivotCacheID' */\n\t\t\tcase 0x018D: /* 'BrtUserBookView' */\n\t\t\tcase 0x009A: /* 'BrtWbFactoid' */\n\t\t\tcase 0x045D: /* 'BrtWbProp14' */\n\t\t\tcase 0x0229: /* 'BrtWebOpt' */\n\t\t\tcase 0x082B: /* 'BrtWorkBookPr15' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tstate.push(R_n); pass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tstate.pop(); pass = false; break;\n\t\t\tcase 0x0025: /* 'BrtACBegin' */\n\t\t\t\tstate.push(R_n); pass = true; break;\n\t\t\tcase 0x0026: /* 'BrtACEnd' */\n\t\t\t\tstate.pop(); pass = false; break;\n\n\t\t\tcase 0x0010: /* 'BrtFRTArchID$' */ break;\n\n\t\t\tdefault:\n\t\t\t\tif((R_n||\"\").indexOf(\"Begin\") > 0){/* empty */}\n\t\t\t\telse if((R_n||\"\").indexOf(\"End\") > 0){/* empty */}\n\t\t\t\telse if(!pass || (opts.WTF && state[state.length-1] != \"BrtACBegin\" && state[state.length-1] != \"BrtFRTBegin\")) throw new Error(\"Unexpected record \" + RT + \" \" + R_n);\n\t\t}\n\t}, opts);\n\n\tparse_wb_defaults(wb);\n\n\t// $FlowIgnore\n\twb.Names = Names;\n\n\t(wb).supbooks = supbooks;\n\treturn wb;\n}\n\nfunction write_BUNDLESHS(ba, wb) {\n\twrite_record(ba, \"BrtBeginBundleShs\");\n\tfor(var idx = 0; idx != wb.SheetNames.length; ++idx) {\n\t\tvar viz = wb.Workbook && wb.Workbook.Sheets && wb.Workbook.Sheets[idx] && wb.Workbook.Sheets[idx].Hidden || 0;\n\t\tvar d = { Hidden: viz, iTabID: idx+1, strRelID: 'rId' + (idx+1), name: wb.SheetNames[idx] };\n\t\twrite_record(ba, \"BrtBundleSh\", write_BrtBundleSh(d));\n\t}\n\twrite_record(ba, \"BrtEndBundleShs\");\n}\n\n/* [MS-XLSB] 2.4.649 BrtFileVersion */\nfunction write_BrtFileVersion(data, o) {\n\tif(!o) o = new_buf(127);\n\tfor(var i = 0; i != 4; ++i) o.write_shift(4, 0);\n\twrite_XLWideString(\"SheetJS\", o);\n\twrite_XLWideString(XLSX.version, o);\n\twrite_XLWideString(XLSX.version, o);\n\twrite_XLWideString(\"7262\", o);\n\to.length = o.l;\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.301 BrtBookView */\nfunction write_BrtBookView(idx, o) {\n\tif(!o) o = new_buf(29);\n\to.write_shift(-4, 0);\n\to.write_shift(-4, 460);\n\to.write_shift(4, 28800);\n\to.write_shift(4, 17600);\n\to.write_shift(4, 500);\n\to.write_shift(4, idx);\n\to.write_shift(4, idx);\n\tvar flags = 0x78;\n\to.write_shift(1, flags);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\nfunction write_BOOKVIEWS(ba, wb) {\n\t/* required if hidden tab appears before visible tab */\n\tif(!wb.Workbook || !wb.Workbook.Sheets) return;\n\tvar sheets = wb.Workbook.Sheets;\n\tvar i = 0, vistab = -1, hidden = -1;\n\tfor(; i < sheets.length; ++i) {\n\t\tif(!sheets[i] || !sheets[i].Hidden && vistab == -1) vistab = i;\n\t\telse if(sheets[i].Hidden == 1 && hidden == -1) hidden = i;\n\t}\n\tif(hidden > vistab) return;\n\twrite_record(ba, \"BrtBeginBookViews\");\n\twrite_record(ba, \"BrtBookView\", write_BrtBookView(vistab));\n\t/* 1*(BrtBookView *FRT) */\n\twrite_record(ba, \"BrtEndBookViews\");\n}\n\n/* [MS-XLSB] 2.4.305 BrtCalcProp */\n/*function write_BrtCalcProp(data, o) {\n\tif(!o) o = new_buf(26);\n\to.write_shift(4,0); // force recalc\n\to.write_shift(4,1);\n\to.write_shift(4,0);\n\twrite_Xnum(0, o);\n\to.write_shift(-4, 1023);\n\to.write_shift(1, 0x33);\n\to.write_shift(1, 0x00);\n\treturn o;\n}*/\n\n/* [MS-XLSB] 2.4.646 BrtFileRecover */\n/*function write_BrtFileRecover(data, o) {\n\tif(!o) o = new_buf(1);\n\to.write_shift(1,0);\n\treturn o;\n}*/\n\n/* [MS-XLSB] 2.1.7.61 Workbook */\nfunction write_wb_bin(wb, opts) {\n\tvar ba = buf_array();\n\twrite_record(ba, \"BrtBeginBook\");\n\twrite_record(ba, \"BrtFileVersion\", write_BrtFileVersion());\n\t/* [[BrtFileSharingIso] BrtFileSharing] */\n\twrite_record(ba, \"BrtWbProp\", write_BrtWbProp(wb.Workbook && wb.Workbook.WBProps || null));\n\t/* [ACABSPATH] */\n\t/* [[BrtBookProtectionIso] BrtBookProtection] */\n\twrite_BOOKVIEWS(ba, wb, opts);\n\twrite_BUNDLESHS(ba, wb, opts);\n\t/* [FNGROUP] */\n\t/* [EXTERNALS] */\n\t/* *BrtName */\n\t/* write_record(ba, \"BrtCalcProp\", write_BrtCalcProp()); */\n\t/* [BrtOleSize] */\n\t/* *(BrtUserBookView *FRT) */\n\t/* [PIVOTCACHEIDS] */\n\t/* [BrtWbFactoid] */\n\t/* [SMARTTAGTYPES] */\n\t/* [BrtWebOpt] */\n\t/* write_record(ba, \"BrtFileRecover\", write_BrtFileRecover()); */\n\t/* [WEBPUBITEMS] */\n\t/* [CRERRS] */\n\t/* FRTWORKBOOK */\n\twrite_record(ba, \"BrtEndBook\");\n\n\treturn ba.end();\n}\nfunction parse_wb(data, name, opts) {\n\tif(name.slice(-4)===\".bin\") return parse_wb_bin((data), opts);\n\treturn parse_wb_xml((data), opts);\n}\n\nfunction parse_ws(data, name, idx, opts, rels, wb, themes, styles) {\n\tif(name.slice(-4)===\".bin\") return parse_ws_bin((data), opts, idx, rels, wb, themes, styles);\n\treturn parse_ws_xml((data), opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_cs(data, name, idx, opts, rels, wb, themes, styles) {\n\tif(name.slice(-4)===\".bin\") return parse_cs_bin((data), opts, idx, rels, wb, themes, styles);\n\treturn parse_cs_xml((data), opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_ms(data, name, idx, opts, rels, wb, themes, styles) {\n\tif(name.slice(-4)===\".bin\") return parse_ms_bin((data), opts, idx, rels, wb, themes, styles);\n\treturn parse_ms_xml((data), opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_ds(data, name, idx, opts, rels, wb, themes, styles) {\n\tif(name.slice(-4)===\".bin\") return parse_ds_bin((data), opts, idx, rels, wb, themes, styles);\n\treturn parse_ds_xml((data), opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_sty(data, name, themes, opts) {\n\tif(name.slice(-4)===\".bin\") return parse_sty_bin((data), themes, opts);\n\treturn parse_sty_xml((data), themes, opts);\n}\n\nfunction parse_theme(data, name, opts) {\n\treturn parse_theme_xml(data, opts);\n}\n\nfunction parse_sst(data, name, opts) {\n\tif(name.slice(-4)===\".bin\") return parse_sst_bin((data), opts);\n\treturn parse_sst_xml((data), opts);\n}\n\nfunction parse_cmnt(data, name, opts) {\n\tif(name.slice(-4)===\".bin\") return parse_comments_bin((data), opts);\n\treturn parse_comments_xml((data), opts);\n}\n\nfunction parse_cc(data, name, opts) {\n\tif(name.slice(-4)===\".bin\") return parse_cc_bin((data), name, opts);\n\treturn parse_cc_xml((data), name, opts);\n}\n\nfunction parse_xlink(data, rel, name, opts) {\n\tif(name.slice(-4)===\".bin\") return parse_xlink_bin((data), rel, name, opts);\n\treturn parse_xlink_xml((data), rel, name, opts);\n}\n\nfunction write_wb(wb, name, opts) {\n\treturn (name.slice(-4)===\".bin\" ? write_wb_bin : write_wb_xml)(wb, opts);\n}\n\nfunction write_ws(data, name, opts, wb, rels) {\n\treturn (name.slice(-4)===\".bin\" ? write_ws_bin : write_ws_xml)(data, opts, wb, rels);\n}\n\n// eslint-disable-next-line no-unused-vars\nfunction write_cs(data, name, opts, wb, rels) {\n\treturn (name.slice(-4)===\".bin\" ? write_cs_bin : write_cs_xml)(data, opts, wb, rels);\n}\n\nfunction write_sty(data, name, opts) {\n\treturn (name.slice(-4)===\".bin\" ? write_sty_bin : write_sty_xml)(data, opts);\n}\n\nfunction write_sst(data, name, opts) {\n\treturn (name.slice(-4)===\".bin\" ? write_sst_bin : write_sst_xml)(data, opts);\n}\n\nfunction write_cmnt(data, name, opts) {\n\treturn (name.slice(-4)===\".bin\" ? write_comments_bin : write_comments_xml)(data, opts);\n}\n/*\nfunction write_cc(data, name:string, opts) {\n\treturn (name.slice(-4)===\".bin\" ? write_cc_bin : write_cc_xml)(data, opts);\n}\n*/\nvar attregexg2=/([\\w:]+)=((?:\")([^\"]*)(?:\")|(?:')([^']*)(?:'))/g;\nvar attregex2=/([\\w:]+)=((?:\")(?:[^\"]*)(?:\")|(?:')(?:[^']*)(?:'))/;\nfunction xlml_parsexmltag(tag, skip_root) {\n\tvar words = tag.split(/\\s+/);\n\tvar z = ([]); if(!skip_root) z[0] = words[0];\n\tif(words.length === 1) return z;\n\tvar m = tag.match(attregexg2), y, j, w, i;\n\tif(m) for(i = 0; i != m.length; ++i) {\n\t\ty = m[i].match(attregex2);\nif((j=y[1].indexOf(\":\")) === -1) z[y[1]] = y[2].slice(1,y[2].length-1);\n\t\telse {\n\t\t\tif(y[1].slice(0,6) === \"xmlns:\") w = \"xmlns\"+y[1].slice(6);\n\t\t\telse w = y[1].slice(j+1);\n\t\t\tz[w] = y[2].slice(1,y[2].length-1);\n\t\t}\n\t}\n\treturn z;\n}\nfunction xlml_parsexmltagobj(tag) {\n\tvar words = tag.split(/\\s+/);\n\tvar z = {};\n\tif(words.length === 1) return z;\n\tvar m = tag.match(attregexg2), y, j, w, i;\n\tif(m) for(i = 0; i != m.length; ++i) {\n\t\ty = m[i].match(attregex2);\nif((j=y[1].indexOf(\":\")) === -1) z[y[1]] = y[2].slice(1,y[2].length-1);\n\t\telse {\n\t\t\tif(y[1].slice(0,6) === \"xmlns:\") w = \"xmlns\"+y[1].slice(6);\n\t\t\telse w = y[1].slice(j+1);\n\t\t\tz[w] = y[2].slice(1,y[2].length-1);\n\t\t}\n\t}\n\treturn z;\n}\n\n// ----\n\nfunction xlml_format(format, value) {\n\tvar fmt = XLMLFormatMap[format] || unescapexml(format);\n\tif(fmt === \"General\") return SSF._general(value);\n\treturn SSF.format(fmt, value);\n}\n\nfunction xlml_set_custprop(Custprops, key, cp, val) {\n\tvar oval = val;\n\tswitch((cp[0].match(/dt:dt=\"([\\w.]+)\"/)||[\"\",\"\"])[1]) {\n\t\tcase \"boolean\": oval = parsexmlbool(val); break;\n\t\tcase \"i2\": case \"int\": oval = parseInt(val, 10); break;\n\t\tcase \"r4\": case \"float\": oval = parseFloat(val); break;\n\t\tcase \"date\": case \"dateTime.tz\": oval = parseDate(val); break;\n\t\tcase \"i8\": case \"string\": case \"fixed\": case \"uuid\": case \"bin.base64\": break;\n\t\tdefault: throw new Error(\"bad custprop:\" + cp[0]);\n\t}\n\tCustprops[unescapexml(key)] = oval;\n}\n\nfunction safe_format_xlml(cell, nf, o) {\n\tif(cell.t === 'z') return;\n\tif(!o || o.cellText !== false) try {\n\t\tif(cell.t === 'e') { cell.w = cell.w || BErr[cell.v]; }\n\t\telse if(nf === \"General\") {\n\t\t\tif(cell.t === 'n') {\n\t\t\t\tif((cell.v|0) === cell.v) cell.w = SSF._general_int(cell.v);\n\t\t\t\telse cell.w = SSF._general_num(cell.v);\n\t\t\t}\n\t\t\telse cell.w = SSF._general(cell.v);\n\t\t}\n\t\telse cell.w = xlml_format(nf||\"General\", cell.v);\n\t} catch(e) { if(o.WTF) throw e; }\n\ttry {\n\t\tvar z = XLMLFormatMap[nf]||nf||\"General\";\n\t\tif(o.cellNF) cell.z = z;\n\t\tif(o.cellDates && cell.t == 'n' && SSF.is_date(z)) {\n\t\t\tvar _d = SSF.parse_date_code(cell.v); if(_d) { cell.t = 'd'; cell.v = new Date(_d.y, _d.m-1,_d.d,_d.H,_d.M,_d.S,_d.u); }\n\t\t}\n\t} catch(e) { if(o.WTF) throw e; }\n}\n\nfunction process_style_xlml(styles, stag, opts) {\n\tif(opts.cellStyles) {\n\t\tif(stag.Interior) {\n\t\t\tvar I = stag.Interior;\n\t\t\tif(I.Pattern) I.patternType = XLMLPatternTypeMap[I.Pattern] || I.Pattern;\n\t\t}\n\t}\n\tstyles[stag.ID] = stag;\n}\n\n/* TODO: there must exist some form of OSP-blessed spec */\nfunction parse_xlml_data(xml, ss, data, cell, base, styles, csty, row, arrayf, o) {\n\tvar nf = \"General\", sid = cell.StyleID, S = {}; o = o || {};\n\tvar interiors = [];\n\tvar i = 0;\n\tif(sid === undefined && row) sid = row.StyleID;\n\tif(sid === undefined && csty) sid = csty.StyleID;\n\twhile(styles[sid] !== undefined) {\n\t\tif(styles[sid].nf) nf = styles[sid].nf;\n\t\tif(styles[sid].Interior) interiors.push(styles[sid].Interior);\n\t\tif(!styles[sid].Parent) break;\n\t\tsid = styles[sid].Parent;\n\t}\n\tswitch(data.Type) {\n\t\tcase 'Boolean':\n\t\t\tcell.t = 'b';\n\t\t\tcell.v = parsexmlbool(xml);\n\t\t\tbreak;\n\t\tcase 'String':\n\t\t\tcell.t = 's'; cell.r = xlml_fixstr(unescapexml(xml));\n\t\t\tcell.v = (xml.indexOf(\"<\") > -1 ? unescapexml(ss||xml).replace(/<.*?>/g, \"\") : cell.r); // todo: BR etc\n\t\t\tbreak;\n\t\tcase 'DateTime':\n\t\t\tif(xml.slice(-1) != \"Z\") xml += \"Z\";\n\t\t\tcell.v = (parseDate(xml) - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);\n\t\t\tif(cell.v !== cell.v) cell.v = unescapexml(xml);\n\t\t\telse if(cell.v<60) cell.v = cell.v -1;\n\t\t\tif(!nf || nf == \"General\") nf = \"yyyy-mm-dd\";\n\t\t\t/* falls through */\n\t\tcase 'Number':\n\t\t\tif(cell.v === undefined) cell.v=+xml;\n\t\t\tif(!cell.t) cell.t = 'n';\n\t\t\tbreak;\n\t\tcase 'Error': cell.t = 'e'; cell.v = RBErr[xml]; if(o.cellText !== false) cell.w = xml; break;\n\t\tdefault:\n\t\t\tif(xml == \"\" && ss == \"\") { cell.t = 'z'; }\n\t\t\telse { cell.t = 's'; cell.v = xlml_fixstr(ss||xml); }\n\t\t\tbreak;\n\t}\n\tsafe_format_xlml(cell, nf, o);\n\tif(o.cellFormula !== false) {\n\t\tif(cell.Formula) {\n\t\t\tvar fstr = unescapexml(cell.Formula);\n\t\t\t/* strictly speaking, the leading = is required but some writers omit */\n\t\t\tif(fstr.charCodeAt(0) == 61 /* = */) fstr = fstr.slice(1);\n\t\t\tcell.f = rc_to_a1(fstr, base);\n\t\t\tdelete cell.Formula;\n\t\t\tif(cell.ArrayRange == \"RC\") cell.F = rc_to_a1(\"RC:RC\", base);\n\t\t\telse if(cell.ArrayRange) {\n\t\t\t\tcell.F = rc_to_a1(cell.ArrayRange, base);\n\t\t\t\tarrayf.push([safe_decode_range(cell.F), cell.F]);\n\t\t\t}\n\t\t} else {\n\t\t\tfor(i = 0; i < arrayf.length; ++i)\n\t\t\t\tif(base.r >= arrayf[i][0].s.r && base.r <= arrayf[i][0].e.r)\n\t\t\t\t\tif(base.c >= arrayf[i][0].s.c && base.c <= arrayf[i][0].e.c)\n\t\t\t\t\t\tcell.F = arrayf[i][1];\n\t\t}\n\t}\n\tif(o.cellStyles) {\n\t\tinteriors.forEach(function(x) {\n\t\t\tif(!S.patternType && x.patternType) S.patternType = x.patternType;\n\t\t});\n\t\tcell.s = S;\n\t}\n\tif(cell.StyleID !== undefined) cell.ixfe = cell.StyleID;\n}\n\nfunction xlml_clean_comment(comment) {\n\tcomment.t = comment.v || \"\";\n\tcomment.t = comment.t.replace(/\\r\\n/g,\"\\n\").replace(/\\r/g,\"\\n\");\n\tcomment.v = comment.w = comment.ixfe = undefined;\n}\n\nfunction xlml_normalize(d) {\n\tif(has_buf && Buffer.isBuffer(d)) return d.toString('utf8');\n\tif(typeof d === 'string') return d;\n\t/* duktape */\n\tif(typeof Uint8Array !== 'undefined' && d instanceof Uint8Array) return utf8read(a2s(ab2a(d)));\n\tthrow new Error(\"Bad input format: expected Buffer or string\");\n}\n\n/* TODO: Everything */\n/* UOS uses CJK in tags */\nvar xlmlregex = /<(\\/?)([^\\s?>:\\/]+)(?:[\\s?:\\/][^>]*)?>/mg;\n//var xlmlregex = /<(\\/?)([a-z0-9]*:|)(\\w+)[^>]*>/mg;\nfunction parse_xlml_xml(d, _opts) {\n\tvar opts = _opts || {};\n\tmake_ssf(SSF);\n\tvar str = debom(xlml_normalize(d));\n\tif(opts.type == 'binary' || opts.type == 'array' || opts.type == 'base64') {\n\t\tif(typeof cptable !== 'undefined') str = cptable.utils.decode(65001, char_codes(str));\n\t\telse str = utf8read(str);\n\t}\n\tvar opening = str.slice(0, 1024).toLowerCase(), ishtml = false;\n\tif(opening.indexOf(\"= 0) ishtml = true; });\n\tif(ishtml) return HTML_.to_workbook(str, opts);\n\tvar Rn;\n\tvar state = [], tmp;\n\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\tvar sheets = {}, sheetnames = [], cursheet = (opts.dense ? [] : {}), sheetname = \"\";\n\tvar table = {}, cell = ({}), row = {};// eslint-disable-line no-unused-vars\n\tvar dtag = xlml_parsexmltag(''), didx = 0;\n\tvar c = 0, r = 0;\n\tvar refguess = {s: {r:2000000, c:2000000}, e: {r:0, c:0} };\n\tvar styles = {}, stag = {};\n\tvar ss = \"\", fidx = 0;\n\tvar merges = [];\n\tvar Props = {}, Custprops = {}, pidx = 0, cp = [];\n\tvar comments = [], comment = ({});\n\tvar cstys = [], csty, seencol = false;\n\tvar arrayf = [];\n\tvar rowinfo = [], rowobj = {}, cc = 0, rr = 0;\n\tvar Workbook = ({ Sheets:[], WBProps:{date1904:false} }), wsprops = {};\n\txlmlregex.lastIndex = 0;\n\tstr = str.replace(//mg,\"\");\n\tvar raw_Rn3 = \"\";\n\twhile((Rn = xlmlregex.exec(str))) switch((Rn[3] = (raw_Rn3 = Rn[3]).toLowerCase())) {\n\t\tcase 'data' /*case 'Data'*/:\n\t\t\tif(raw_Rn3 == \"data\") {\n\t\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(state[state.length-1][1]) break;\n\t\t\tif(Rn[1]==='/') parse_xlml_data(str.slice(didx, Rn.index), ss, dtag, state[state.length-1][0]==/*\"Comment\"*/\"comment\"?comment:cell, {c:c,r:r}, styles, cstys[c], row, arrayf, opts);\n\t\t\telse { ss = \"\"; dtag = xlml_parsexmltag(Rn[0]); didx = Rn.index + Rn[0].length; }\n\t\t\tbreak;\n\t\tcase 'cell' /*case 'Cell'*/:\n\t\t\tif(Rn[1]==='/'){\n\t\t\t\tif(comments.length > 0) cell.c = comments;\n\t\t\t\tif((!opts.sheetRows || opts.sheetRows > r) && cell.v !== undefined) {\n\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\tif(!cursheet[r]) cursheet[r] = [];\n\t\t\t\t\t\tcursheet[r][c] = cell;\n\t\t\t\t\t} else cursheet[encode_col(c) + encode_row(r)] = cell;\n\t\t\t\t}\n\t\t\t\tif(cell.HRef) {\n\t\t\t\t\tcell.l = ({Target:cell.HRef});\n\t\t\t\t\tif(cell.HRefScreenTip) cell.l.Tooltip = cell.HRefScreenTip;\n\t\t\t\t\tdelete cell.HRef; delete cell.HRefScreenTip;\n\t\t\t\t}\n\t\t\t\tif(cell.MergeAcross || cell.MergeDown) {\n\t\t\t\t\tcc = c + (parseInt(cell.MergeAcross,10)|0);\n\t\t\t\t\trr = r + (parseInt(cell.MergeDown,10)|0);\n\t\t\t\t\tmerges.push({s:{c:c,r:r},e:{c:cc,r:rr}});\n\t\t\t\t}\n\t\t\t\tif(!opts.sheetStubs) { if(cell.MergeAcross) c = cc + 1; else ++c; }\n\t\t\t\telse if(cell.MergeAcross || cell.MergeDown) {\nfor(var cma = c; cma <= cc; ++cma) {\n\t\t\t\t\t\tfor(var cmd = r; cmd <= rr; ++cmd) {\n\t\t\t\t\t\t\tif(cma > c || cmd > r) {\n\t\t\t\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\t\t\t\tif(!cursheet[cmd]) cursheet[cmd] = [];\n\t\t\t\t\t\t\t\t\tcursheet[cmd][cma] = {t:'z'};\n\t\t\t\t\t\t\t\t} else cursheet[encode_col(cma) + encode_row(cmd)] = {t:'z'};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tc = cc + 1;\n\t\t\t\t}\n\t\t\t\telse ++c;\n\t\t\t} else {\n\t\t\t\tcell = xlml_parsexmltagobj(Rn[0]);\n\t\t\t\tif(cell.Index) c = +cell.Index - 1;\n\t\t\t\tif(c < refguess.s.c) refguess.s.c = c;\n\t\t\t\tif(c > refguess.e.c) refguess.e.c = c;\n\t\t\t\tif(Rn[0].slice(-2) === \"/>\") ++c;\n\t\t\t\tcomments = [];\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'row' /*case 'Row'*/:\n\t\t\tif(Rn[1]==='/' || Rn[0].slice(-2) === \"/>\") {\n\t\t\t\tif(r < refguess.s.r) refguess.s.r = r;\n\t\t\t\tif(r > refguess.e.r) refguess.e.r = r;\n\t\t\t\tif(Rn[0].slice(-2) === \"/>\") {\n\t\t\t\t\trow = xlml_parsexmltag(Rn[0]);\n\t\t\t\t\tif(row.Index) r = +row.Index - 1;\n\t\t\t\t}\n\t\t\t\tc = 0; ++r;\n\t\t\t} else {\n\t\t\t\trow = xlml_parsexmltag(Rn[0]);\n\t\t\t\tif(row.Index) r = +row.Index - 1;\n\t\t\t\trowobj = {};\n\t\t\t\tif(row.AutoFitHeight == \"0\" || row.Height) {\n\t\t\t\t\trowobj.hpx = parseInt(row.Height, 10); rowobj.hpt = px2pt(rowobj.hpx);\n\t\t\t\t\trowinfo[r] = rowobj;\n\t\t\t\t}\n\t\t\t\tif(row.Hidden == \"1\") { rowobj.hidden = true; rowinfo[r] = rowobj; }\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'worksheet' /*case 'Worksheet'*/: /* TODO: read range from FullRows/FullColumns */\n\t\t\tif(Rn[1]==='/'){\n\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));\n\t\t\t\tsheetnames.push(sheetname);\n\t\t\t\tif(refguess.s.r <= refguess.e.r && refguess.s.c <= refguess.e.c) {\n\t\t\t\t\tcursheet[\"!ref\"] = encode_range(refguess);\n\t\t\t\t\tif(opts.sheetRows && opts.sheetRows <= refguess.e.r) {\n\t\t\t\t\t\tcursheet[\"!fullref\"] = cursheet[\"!ref\"];\n\t\t\t\t\t\trefguess.e.r = opts.sheetRows - 1;\n\t\t\t\t\t\tcursheet[\"!ref\"] = encode_range(refguess);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(merges.length) cursheet[\"!merges\"] = merges;\n\t\t\t\tif(cstys.length > 0) cursheet[\"!cols\"] = cstys;\n\t\t\t\tif(rowinfo.length > 0) cursheet[\"!rows\"] = rowinfo;\n\t\t\t\tsheets[sheetname] = cursheet;\n\t\t\t} else {\n\t\t\t\trefguess = {s: {r:2000000, c:2000000}, e: {r:0, c:0} };\n\t\t\t\tr = c = 0;\n\t\t\t\tstate.push([Rn[3], false]);\n\t\t\t\ttmp = xlml_parsexmltag(Rn[0]);\n\t\t\t\tsheetname = unescapexml(tmp.Name);\n\t\t\t\tcursheet = (opts.dense ? [] : {});\n\t\t\t\tmerges = [];\n\t\t\t\tarrayf = [];\n\t\t\t\trowinfo = [];\n\t\t\t\twsprops = {name:sheetname, Hidden:0};\n\t\t\t\tWorkbook.Sheets.push(wsprops);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'table' /*case 'Table'*/:\n\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\telse if(Rn[0].slice(-2) == \"/>\") break;\n\t\t\telse {\n\t\t\t\ttable = xlml_parsexmltag(Rn[0]);\n\t\t\t\tstate.push([Rn[3], false]);\n\t\t\t\tcstys = []; seencol = false;\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'style' /*case 'Style'*/:\n\t\t\tif(Rn[1]==='/') process_style_xlml(styles, stag, opts);\n\t\t\telse stag = xlml_parsexmltag(Rn[0]);\n\t\t\tbreak;\n\n\t\tcase 'numberformat' /*case 'NumberFormat'*/:\n\t\t\tstag.nf = unescapexml(xlml_parsexmltag(Rn[0]).Format || \"General\");\n\t\t\tif(XLMLFormatMap[stag.nf]) stag.nf = XLMLFormatMap[stag.nf];\n\t\t\tfor(var ssfidx = 0; ssfidx != 0x188; ++ssfidx) if(SSF._table[ssfidx] == stag.nf) break;\n\t\t\tif(ssfidx == 0x188) for(ssfidx = 0x39; ssfidx != 0x188; ++ssfidx) if(SSF._table[ssfidx] == null) { SSF.load(stag.nf, ssfidx); break; }\n\t\t\tbreak;\n\n\t\tcase 'column' /*case 'Column'*/:\n\t\t\tif(state[state.length-1][0] !== /*'Table'*/'table') break;\n\t\t\tcsty = xlml_parsexmltag(Rn[0]);\n\t\t\tif(csty.Hidden) { csty.hidden = true; delete csty.Hidden; }\n\t\t\tif(csty.Width) csty.wpx = parseInt(csty.Width, 10);\n\t\t\tif(!seencol && csty.wpx > 10) {\n\t\t\t\tseencol = true; MDW = DEF_MDW; //find_mdw_wpx(csty.wpx);\n\t\t\t\tfor(var _col = 0; _col < cstys.length; ++_col) if(cstys[_col]) process_col(cstys[_col]);\n\t\t\t}\n\t\t\tif(seencol) process_col(csty);\n\t\t\tcstys[(csty.Index-1||cstys.length)] = csty;\n\t\t\tfor(var i = 0; i < +csty.Span; ++i) cstys[cstys.length] = dup(csty);\n\t\t\tbreak;\n\n\t\tcase 'namedrange' /*case 'NamedRange'*/:\n\t\t\tif(Rn[1]==='/') break;\n\t\t\tif(!Workbook.Names) Workbook.Names = [];\n\t\t\tvar _NamedRange = parsexmltag(Rn[0]);\n\t\t\tvar _DefinedName = ({\n\t\t\t\tName: _NamedRange.Name,\n\t\t\t\tRef: rc_to_a1(_NamedRange.RefersTo.slice(1), {r:0, c:0})\n\t\t\t});\n\t\t\tif(Workbook.Sheets.length>0) _DefinedName.Sheet=Workbook.Sheets.length-1;\nWorkbook.Names.push(_DefinedName);\n\t\t\tbreak;\n\n\t\tcase 'namedcell' /*case 'NamedCell'*/: break;\n\t\tcase 'b' /*case 'B'*/: break;\n\t\tcase 'i' /*case 'I'*/: break;\n\t\tcase 'u' /*case 'U'*/: break;\n\t\tcase 's' /*case 'S'*/: break;\n\t\tcase 'em' /*case 'EM'*/: break;\n\t\tcase 'h2' /*case 'H2'*/: break;\n\t\tcase 'h3' /*case 'H3'*/: break;\n\t\tcase 'sub' /*case 'Sub'*/: break;\n\t\tcase 'sup' /*case 'Sup'*/: break;\n\t\tcase 'span' /*case 'Span'*/: break;\n\t\tcase 'alignment' /*case 'Alignment'*/:\n\t\t\tbreak;\n\t\tcase 'borders' /*case 'Borders'*/: break;\n\t\tcase 'border' /*case 'Border'*/: break;\n\t\tcase 'font' /*case 'Font'*/:\n\t\t\tif(Rn[0].slice(-2) === \"/>\") break;\n\t\t\telse if(Rn[1]===\"/\") ss += str.slice(fidx, Rn.index);\n\t\t\telse fidx = Rn.index + Rn[0].length;\n\t\t\tbreak;\n\t\tcase 'interior' /*case 'Interior'*/:\n\t\t\tif(!opts.cellStyles) break;\n\t\t\tstag.Interior = xlml_parsexmltag(Rn[0]);\n\t\t\tbreak;\n\t\tcase 'protection' /*case 'Protection'*/: break;\n\n\t\tcase 'author' /*case 'Author'*/:\n\t\tcase 'title' /*case 'Title'*/:\n\t\tcase 'description' /*case 'Description'*/:\n\t\tcase 'created' /*case 'Created'*/:\n\t\tcase 'keywords' /*case 'Keywords'*/:\n\t\tcase 'subject' /*case 'Subject'*/:\n\t\tcase 'category' /*case 'Category'*/:\n\t\tcase 'company' /*case 'Company'*/:\n\t\tcase 'lastauthor' /*case 'LastAuthor'*/:\n\t\tcase 'lastsaved' /*case 'LastSaved'*/:\n\t\tcase 'lastprinted' /*case 'LastPrinted'*/:\n\t\tcase 'version' /*case 'Version'*/:\n\t\tcase 'revision' /*case 'Revision'*/:\n\t\tcase 'totaltime' /*case 'TotalTime'*/:\n\t\tcase 'hyperlinkbase' /*case 'HyperlinkBase'*/:\n\t\tcase 'manager' /*case 'Manager'*/:\n\t\tcase 'contentstatus' /*case 'ContentStatus'*/:\n\t\tcase 'identifier' /*case 'Identifier'*/:\n\t\tcase 'language' /*case 'Language'*/:\n\t\tcase 'appname' /*case 'AppName'*/:\n\t\t\tif(Rn[0].slice(-2) === \"/>\") break;\n\t\t\telse if(Rn[1]===\"/\") xlml_set_prop(Props, raw_Rn3, str.slice(pidx, Rn.index));\n\t\t\telse pidx = Rn.index + Rn[0].length;\n\t\t\tbreak;\n\t\tcase 'paragraphs' /*case 'Paragraphs'*/: break;\n\n\t\tcase 'styles' /*case 'Styles'*/:\n\t\tcase 'workbook' /*case 'Workbook'*/:\n\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\telse state.push([Rn[3], false]);\n\t\t\tbreak;\n\n\t\tcase 'comment' /*case 'Comment'*/:\n\t\t\tif(Rn[1]==='/'){\n\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));\n\t\t\t\txlml_clean_comment(comment);\n\t\t\t\tcomments.push(comment);\n\t\t\t} else {\n\t\t\t\tstate.push([Rn[3], false]);\n\t\t\t\ttmp = xlml_parsexmltag(Rn[0]);\n\t\t\t\tcomment = ({a:tmp.Author});\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'autofilter' /*case 'AutoFilter'*/:\n\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\tvar AutoFilter = xlml_parsexmltag(Rn[0]);\n\t\t\t\tcursheet['!autofilter'] = { ref:rc_to_a1(AutoFilter.Range).replace(/\\$/g,\"\") };\n\t\t\t\tstate.push([Rn[3], true]);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'name' /*case 'Name'*/: break;\n\n\t\tcase 'datavalidation' /*case 'DataValidation'*/:\n\t\t\tif(Rn[1]==='/'){\n\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));\n\t\t\t} else {\n\t\t\t\tif(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'pixelsperinch' /*case 'PixelsPerInch'*/:\n\t\t\tbreak;\n\t\tcase 'componentoptions' /*case 'ComponentOptions'*/:\n\t\tcase 'documentproperties' /*case 'DocumentProperties'*/:\n\t\tcase 'customdocumentproperties' /*case 'CustomDocumentProperties'*/:\n\t\tcase 'officedocumentsettings' /*case 'OfficeDocumentSettings'*/:\n\t\tcase 'pivottable' /*case 'PivotTable'*/:\n\t\tcase 'pivotcache' /*case 'PivotCache'*/:\n\t\tcase 'names' /*case 'Names'*/:\n\t\tcase 'mapinfo' /*case 'MapInfo'*/:\n\t\tcase 'pagebreaks' /*case 'PageBreaks'*/:\n\t\tcase 'querytable' /*case 'QueryTable'*/:\n\t\tcase 'sorting' /*case 'Sorting'*/:\n\t\tcase 'schema' /*case 'Schema'*/: //case 'data' /*case 'data'*/:\n\t\tcase 'conditionalformatting' /*case 'ConditionalFormatting'*/:\n\t\tcase 'smarttagtype' /*case 'SmartTagType'*/:\n\t\tcase 'smarttags' /*case 'SmartTags'*/:\n\t\tcase 'excelworkbook' /*case 'ExcelWorkbook'*/:\n\t\tcase 'workbookoptions' /*case 'WorkbookOptions'*/:\n\t\tcase 'worksheetoptions' /*case 'WorksheetOptions'*/:\n\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\t/* FODS file root is */\n\t\t\tif(state.length == 0 && Rn[3] == \"document\") return parse_fods(str, opts);\n\t\t\t/* UOS file root is */\n\t\t\tif(state.length == 0 && Rn[3] == \"uof\"/*\"UOF\"*/) return parse_fods(str, opts);\n\n\t\t\tvar seen = true;\n\t\t\tswitch(state[state.length-1][0]) {\n\t\t\t\t/* OfficeDocumentSettings */\n\t\t\t\tcase 'officedocumentsettings' /*case 'OfficeDocumentSettings'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'allowpng' /*case 'AllowPNG'*/: break;\n\t\t\t\t\tcase 'removepersonalinformation' /*case 'RemovePersonalInformation'*/: break;\n\t\t\t\t\tcase 'downloadcomponents' /*case 'DownloadComponents'*/: break;\n\t\t\t\t\tcase 'locationofcomponents' /*case 'LocationOfComponents'*/: break;\n\t\t\t\t\tcase 'colors' /*case 'Colors'*/: break;\n\t\t\t\t\tcase 'color' /*case 'Color'*/: break;\n\t\t\t\t\tcase 'index' /*case 'Index'*/: break;\n\t\t\t\t\tcase 'rgb' /*case 'RGB'*/: break;\n\t\t\t\t\tcase 'targetscreensize' /*case 'TargetScreenSize'*/: break;\n\t\t\t\t\tcase 'readonlyrecommended' /*case 'ReadOnlyRecommended'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* ComponentOptions */\n\t\t\t\tcase 'componentoptions' /*case 'ComponentOptions'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'toolbar' /*case 'Toolbar'*/: break;\n\t\t\t\t\tcase 'hideofficelogo' /*case 'HideOfficeLogo'*/: break;\n\t\t\t\t\tcase 'spreadsheetautofit' /*case 'SpreadsheetAutoFit'*/: break;\n\t\t\t\t\tcase 'label' /*case 'Label'*/: break;\n\t\t\t\t\tcase 'caption' /*case 'Caption'*/: break;\n\t\t\t\t\tcase 'maxheight' /*case 'MaxHeight'*/: break;\n\t\t\t\t\tcase 'maxwidth' /*case 'MaxWidth'*/: break;\n\t\t\t\t\tcase 'nextsheetnumber' /*case 'NextSheetNumber'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* ExcelWorkbook */\n\t\t\t\tcase 'excelworkbook' /*case 'ExcelWorkbook'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'date1904' /*case 'Date1904'*/:\nWorkbook.WBProps.date1904 = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'windowheight' /*case 'WindowHeight'*/: break;\n\t\t\t\t\tcase 'windowwidth' /*case 'WindowWidth'*/: break;\n\t\t\t\t\tcase 'windowtopx' /*case 'WindowTopX'*/: break;\n\t\t\t\t\tcase 'windowtopy' /*case 'WindowTopY'*/: break;\n\t\t\t\t\tcase 'tabratio' /*case 'TabRatio'*/: break;\n\t\t\t\t\tcase 'protectstructure' /*case 'ProtectStructure'*/: break;\n\t\t\t\t\tcase 'protectwindow' /*case 'ProtectWindow'*/: break;\n\t\t\t\t\tcase 'protectwindows' /*case 'ProtectWindows'*/: break;\n\t\t\t\t\tcase 'activesheet' /*case 'ActiveSheet'*/: break;\n\t\t\t\t\tcase 'displayinknotes' /*case 'DisplayInkNotes'*/: break;\n\t\t\t\t\tcase 'firstvisiblesheet' /*case 'FirstVisibleSheet'*/: break;\n\t\t\t\t\tcase 'supbook' /*case 'SupBook'*/: break;\n\t\t\t\t\tcase 'sheetname' /*case 'SheetName'*/: break;\n\t\t\t\t\tcase 'sheetindex' /*case 'SheetIndex'*/: break;\n\t\t\t\t\tcase 'sheetindexfirst' /*case 'SheetIndexFirst'*/: break;\n\t\t\t\t\tcase 'sheetindexlast' /*case 'SheetIndexLast'*/: break;\n\t\t\t\t\tcase 'dll' /*case 'Dll'*/: break;\n\t\t\t\t\tcase 'acceptlabelsinformulas' /*case 'AcceptLabelsInFormulas'*/: break;\n\t\t\t\t\tcase 'donotsavelinkvalues' /*case 'DoNotSaveLinkValues'*/: break;\n\t\t\t\t\tcase 'iteration' /*case 'Iteration'*/: break;\n\t\t\t\t\tcase 'maxiterations' /*case 'MaxIterations'*/: break;\n\t\t\t\t\tcase 'maxchange' /*case 'MaxChange'*/: break;\n\t\t\t\t\tcase 'path' /*case 'Path'*/: break;\n\t\t\t\t\tcase 'xct' /*case 'Xct'*/: break;\n\t\t\t\t\tcase 'count' /*case 'Count'*/: break;\n\t\t\t\t\tcase 'selectedsheets' /*case 'SelectedSheets'*/: break;\n\t\t\t\t\tcase 'calculation' /*case 'Calculation'*/: break;\n\t\t\t\t\tcase 'uncalced' /*case 'Uncalced'*/: break;\n\t\t\t\t\tcase 'startupprompt' /*case 'StartupPrompt'*/: break;\n\t\t\t\t\tcase 'crn' /*case 'Crn'*/: break;\n\t\t\t\t\tcase 'externname' /*case 'ExternName'*/: break;\n\t\t\t\t\tcase 'formula' /*case 'Formula'*/: break;\n\t\t\t\t\tcase 'colfirst' /*case 'ColFirst'*/: break;\n\t\t\t\t\tcase 'collast' /*case 'ColLast'*/: break;\n\t\t\t\t\tcase 'wantadvise' /*case 'WantAdvise'*/: break;\n\t\t\t\t\tcase 'boolean' /*case 'Boolean'*/: break;\n\t\t\t\t\tcase 'error' /*case 'Error'*/: break;\n\t\t\t\t\tcase 'text' /*case 'Text'*/: break;\n\t\t\t\t\tcase 'ole' /*case 'OLE'*/: break;\n\t\t\t\t\tcase 'noautorecover' /*case 'NoAutoRecover'*/: break;\n\t\t\t\t\tcase 'publishobjects' /*case 'PublishObjects'*/: break;\n\t\t\t\t\tcase 'donotcalculatebeforesave' /*case 'DoNotCalculateBeforeSave'*/: break;\n\t\t\t\t\tcase 'number' /*case 'Number'*/: break;\n\t\t\t\t\tcase 'refmoder1c1' /*case 'RefModeR1C1'*/: break;\n\t\t\t\t\tcase 'embedsavesmarttags' /*case 'EmbedSaveSmartTags'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* WorkbookOptions */\n\t\t\t\tcase 'workbookoptions' /*case 'WorkbookOptions'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'owcversion' /*case 'OWCVersion'*/: break;\n\t\t\t\t\tcase 'height' /*case 'Height'*/: break;\n\t\t\t\t\tcase 'width' /*case 'Width'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* WorksheetOptions */\n\t\t\t\tcase 'worksheetoptions' /*case 'WorksheetOptions'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'visible' /*case 'Visible'*/:\n\t\t\t\t\t\tif(Rn[0].slice(-2) === \"/>\"){/* empty */}\n\t\t\t\t\t\telse if(Rn[1]===\"/\") switch(str.slice(pidx, Rn.index)) {\n\t\t\t\t\t\t\tcase \"SheetHidden\": wsprops.Hidden = 1; break;\n\t\t\t\t\t\t\tcase \"SheetVeryHidden\": wsprops.Hidden = 2; break;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse pidx = Rn.index + Rn[0].length;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'header' /*case 'Header'*/:\n\t\t\t\t\t\tif(!cursheet['!margins']) default_margins(cursheet['!margins']={}, 'xlml');\n\t\t\t\t\t\tcursheet['!margins'].header = parsexmltag(Rn[0]).Margin;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'footer' /*case 'Footer'*/:\n\t\t\t\t\t\tif(!cursheet['!margins']) default_margins(cursheet['!margins']={}, 'xlml');\n\t\t\t\t\t\tcursheet['!margins'].footer = parsexmltag(Rn[0]).Margin;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'pagemargins' /*case 'PageMargins'*/:\n\t\t\t\t\t\tvar pagemargins = parsexmltag(Rn[0]);\n\t\t\t\t\t\tif(!cursheet['!margins']) default_margins(cursheet['!margins']={},'xlml');\n\t\t\t\t\t\tif(pagemargins.Top) cursheet['!margins'].top = pagemargins.Top;\n\t\t\t\t\t\tif(pagemargins.Left) cursheet['!margins'].left = pagemargins.Left;\n\t\t\t\t\t\tif(pagemargins.Right) cursheet['!margins'].right = pagemargins.Right;\n\t\t\t\t\t\tif(pagemargins.Bottom) cursheet['!margins'].bottom = pagemargins.Bottom;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'displayrighttoleft' /*case 'DisplayRightToLeft'*/:\n\t\t\t\t\t\tif(!Workbook.Views) Workbook.Views = [];\n\t\t\t\t\t\tif(!Workbook.Views[0]) Workbook.Views[0] = {};\n\t\t\t\t\t\tWorkbook.Views[0].RTL = true;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'freezepanes' /*case 'FreezePanes'*/: break;\n\t\t\t\t\tcase 'frozennosplit' /*case 'FrozenNoSplit'*/: break;\n\n\t\t\t\t\tcase 'splithorizontal' /*case 'SplitHorizontal'*/:\n\t\t\t\t\tcase 'splitvertical' /*case 'SplitVertical'*/:\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'donotdisplaygridlines' /*case 'DoNotDisplayGridlines'*/:\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'activerow' /*case 'ActiveRow'*/: break;\n\t\t\t\t\tcase 'activecol' /*case 'ActiveCol'*/: break;\n\t\t\t\t\tcase 'toprowbottompane' /*case 'TopRowBottomPane'*/: break;\n\t\t\t\t\tcase 'leftcolumnrightpane' /*case 'LeftColumnRightPane'*/: break;\n\n\t\t\t\t\tcase 'unsynced' /*case 'Unsynced'*/: break;\n\t\t\t\t\tcase 'print' /*case 'Print'*/: break;\n\t\t\t\t\tcase 'panes' /*case 'Panes'*/: break;\n\t\t\t\t\tcase 'scale' /*case 'Scale'*/: break;\n\t\t\t\t\tcase 'pane' /*case 'Pane'*/: break;\n\t\t\t\t\tcase 'number' /*case 'Number'*/: break;\n\t\t\t\t\tcase 'layout' /*case 'Layout'*/: break;\n\t\t\t\t\tcase 'pagesetup' /*case 'PageSetup'*/: break;\n\t\t\t\t\tcase 'selected' /*case 'Selected'*/: break;\n\t\t\t\t\tcase 'protectobjects' /*case 'ProtectObjects'*/: break;\n\t\t\t\t\tcase 'enableselection' /*case 'EnableSelection'*/: break;\n\t\t\t\t\tcase 'protectscenarios' /*case 'ProtectScenarios'*/: break;\n\t\t\t\t\tcase 'validprinterinfo' /*case 'ValidPrinterInfo'*/: break;\n\t\t\t\t\tcase 'horizontalresolution' /*case 'HorizontalResolution'*/: break;\n\t\t\t\t\tcase 'verticalresolution' /*case 'VerticalResolution'*/: break;\n\t\t\t\t\tcase 'numberofcopies' /*case 'NumberofCopies'*/: break;\n\t\t\t\t\tcase 'activepane' /*case 'ActivePane'*/: break;\n\t\t\t\t\tcase 'toprowvisible' /*case 'TopRowVisible'*/: break;\n\t\t\t\t\tcase 'leftcolumnvisible' /*case 'LeftColumnVisible'*/: break;\n\t\t\t\t\tcase 'fittopage' /*case 'FitToPage'*/: break;\n\t\t\t\t\tcase 'rangeselection' /*case 'RangeSelection'*/: break;\n\t\t\t\t\tcase 'papersizeindex' /*case 'PaperSizeIndex'*/: break;\n\t\t\t\t\tcase 'pagelayoutzoom' /*case 'PageLayoutZoom'*/: break;\n\t\t\t\t\tcase 'pagebreakzoom' /*case 'PageBreakZoom'*/: break;\n\t\t\t\t\tcase 'filteron' /*case 'FilterOn'*/: break;\n\t\t\t\t\tcase 'fitwidth' /*case 'FitWidth'*/: break;\n\t\t\t\t\tcase 'fitheight' /*case 'FitHeight'*/: break;\n\t\t\t\t\tcase 'commentslayout' /*case 'CommentsLayout'*/: break;\n\t\t\t\t\tcase 'zoom' /*case 'Zoom'*/: break;\n\t\t\t\t\tcase 'lefttoright' /*case 'LeftToRight'*/: break;\n\t\t\t\t\tcase 'gridlines' /*case 'Gridlines'*/: break;\n\t\t\t\t\tcase 'allowsort' /*case 'AllowSort'*/: break;\n\t\t\t\t\tcase 'allowfilter' /*case 'AllowFilter'*/: break;\n\t\t\t\t\tcase 'allowinsertrows' /*case 'AllowInsertRows'*/: break;\n\t\t\t\t\tcase 'allowdeleterows' /*case 'AllowDeleteRows'*/: break;\n\t\t\t\t\tcase 'allowinsertcols' /*case 'AllowInsertCols'*/: break;\n\t\t\t\t\tcase 'allowdeletecols' /*case 'AllowDeleteCols'*/: break;\n\t\t\t\t\tcase 'allowinserthyperlinks' /*case 'AllowInsertHyperlinks'*/: break;\n\t\t\t\t\tcase 'allowformatcells' /*case 'AllowFormatCells'*/: break;\n\t\t\t\t\tcase 'allowsizecols' /*case 'AllowSizeCols'*/: break;\n\t\t\t\t\tcase 'allowsizerows' /*case 'AllowSizeRows'*/: break;\n\t\t\t\t\tcase 'nosummaryrowsbelowdetail' /*case 'NoSummaryRowsBelowDetail'*/: break;\n\t\t\t\t\tcase 'tabcolorindex' /*case 'TabColorIndex'*/: break;\n\t\t\t\t\tcase 'donotdisplayheadings' /*case 'DoNotDisplayHeadings'*/: break;\n\t\t\t\t\tcase 'showpagelayoutzoom' /*case 'ShowPageLayoutZoom'*/: break;\n\t\t\t\t\tcase 'nosummarycolumnsrightdetail' /*case 'NoSummaryColumnsRightDetail'*/: break;\n\t\t\t\t\tcase 'blackandwhite' /*case 'BlackAndWhite'*/: break;\n\t\t\t\t\tcase 'donotdisplayzeros' /*case 'DoNotDisplayZeros'*/: break;\n\t\t\t\t\tcase 'displaypagebreak' /*case 'DisplayPageBreak'*/: break;\n\t\t\t\t\tcase 'rowcolheadings' /*case 'RowColHeadings'*/: break;\n\t\t\t\t\tcase 'donotdisplayoutline' /*case 'DoNotDisplayOutline'*/: break;\n\t\t\t\t\tcase 'noorientation' /*case 'NoOrientation'*/: break;\n\t\t\t\t\tcase 'allowusepivottables' /*case 'AllowUsePivotTables'*/: break;\n\t\t\t\t\tcase 'zeroheight' /*case 'ZeroHeight'*/: break;\n\t\t\t\t\tcase 'viewablerange' /*case 'ViewableRange'*/: break;\n\t\t\t\t\tcase 'selection' /*case 'Selection'*/: break;\n\t\t\t\t\tcase 'protectcontents' /*case 'ProtectContents'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* PivotTable */\n\t\t\t\tcase 'pivottable' /*case 'PivotTable'*/: case 'pivotcache' /*case 'PivotCache'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'immediateitemsondrop' /*case 'ImmediateItemsOnDrop'*/: break;\n\t\t\t\t\tcase 'showpagemultipleitemlabel' /*case 'ShowPageMultipleItemLabel'*/: break;\n\t\t\t\t\tcase 'compactrowindent' /*case 'CompactRowIndent'*/: break;\n\t\t\t\t\tcase 'location' /*case 'Location'*/: break;\n\t\t\t\t\tcase 'pivotfield' /*case 'PivotField'*/: break;\n\t\t\t\t\tcase 'orientation' /*case 'Orientation'*/: break;\n\t\t\t\t\tcase 'layoutform' /*case 'LayoutForm'*/: break;\n\t\t\t\t\tcase 'layoutsubtotallocation' /*case 'LayoutSubtotalLocation'*/: break;\n\t\t\t\t\tcase 'layoutcompactrow' /*case 'LayoutCompactRow'*/: break;\n\t\t\t\t\tcase 'position' /*case 'Position'*/: break;\n\t\t\t\t\tcase 'pivotitem' /*case 'PivotItem'*/: break;\n\t\t\t\t\tcase 'datatype' /*case 'DataType'*/: break;\n\t\t\t\t\tcase 'datafield' /*case 'DataField'*/: break;\n\t\t\t\t\tcase 'sourcename' /*case 'SourceName'*/: break;\n\t\t\t\t\tcase 'parentfield' /*case 'ParentField'*/: break;\n\t\t\t\t\tcase 'ptlineitems' /*case 'PTLineItems'*/: break;\n\t\t\t\t\tcase 'ptlineitem' /*case 'PTLineItem'*/: break;\n\t\t\t\t\tcase 'countofsameitems' /*case 'CountOfSameItems'*/: break;\n\t\t\t\t\tcase 'item' /*case 'Item'*/: break;\n\t\t\t\t\tcase 'itemtype' /*case 'ItemType'*/: break;\n\t\t\t\t\tcase 'ptsource' /*case 'PTSource'*/: break;\n\t\t\t\t\tcase 'cacheindex' /*case 'CacheIndex'*/: break;\n\t\t\t\t\tcase 'consolidationreference' /*case 'ConsolidationReference'*/: break;\n\t\t\t\t\tcase 'filename' /*case 'FileName'*/: break;\n\t\t\t\t\tcase 'reference' /*case 'Reference'*/: break;\n\t\t\t\t\tcase 'nocolumngrand' /*case 'NoColumnGrand'*/: break;\n\t\t\t\t\tcase 'norowgrand' /*case 'NoRowGrand'*/: break;\n\t\t\t\t\tcase 'blanklineafteritems' /*case 'BlankLineAfterItems'*/: break;\n\t\t\t\t\tcase 'hidden' /*case 'Hidden'*/: break;\n\t\t\t\t\tcase 'subtotal' /*case 'Subtotal'*/: break;\n\t\t\t\t\tcase 'basefield' /*case 'BaseField'*/: break;\n\t\t\t\t\tcase 'mapchilditems' /*case 'MapChildItems'*/: break;\n\t\t\t\t\tcase 'function' /*case 'Function'*/: break;\n\t\t\t\t\tcase 'refreshonfileopen' /*case 'RefreshOnFileOpen'*/: break;\n\t\t\t\t\tcase 'printsettitles' /*case 'PrintSetTitles'*/: break;\n\t\t\t\t\tcase 'mergelabels' /*case 'MergeLabels'*/: break;\n\t\t\t\t\tcase 'defaultversion' /*case 'DefaultVersion'*/: break;\n\t\t\t\t\tcase 'refreshname' /*case 'RefreshName'*/: break;\n\t\t\t\t\tcase 'refreshdate' /*case 'RefreshDate'*/: break;\n\t\t\t\t\tcase 'refreshdatecopy' /*case 'RefreshDateCopy'*/: break;\n\t\t\t\t\tcase 'versionlastrefresh' /*case 'VersionLastRefresh'*/: break;\n\t\t\t\t\tcase 'versionlastupdate' /*case 'VersionLastUpdate'*/: break;\n\t\t\t\t\tcase 'versionupdateablemin' /*case 'VersionUpdateableMin'*/: break;\n\t\t\t\t\tcase 'versionrefreshablemin' /*case 'VersionRefreshableMin'*/: break;\n\t\t\t\t\tcase 'calculation' /*case 'Calculation'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* PageBreaks */\n\t\t\t\tcase 'pagebreaks' /*case 'PageBreaks'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'colbreaks' /*case 'ColBreaks'*/: break;\n\t\t\t\t\tcase 'colbreak' /*case 'ColBreak'*/: break;\n\t\t\t\t\tcase 'rowbreaks' /*case 'RowBreaks'*/: break;\n\t\t\t\t\tcase 'rowbreak' /*case 'RowBreak'*/: break;\n\t\t\t\t\tcase 'colstart' /*case 'ColStart'*/: break;\n\t\t\t\t\tcase 'colend' /*case 'ColEnd'*/: break;\n\t\t\t\t\tcase 'rowend' /*case 'RowEnd'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* AutoFilter */\n\t\t\t\tcase 'autofilter' /*case 'AutoFilter'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'autofiltercolumn' /*case 'AutoFilterColumn'*/: break;\n\t\t\t\t\tcase 'autofiltercondition' /*case 'AutoFilterCondition'*/: break;\n\t\t\t\t\tcase 'autofilterand' /*case 'AutoFilterAnd'*/: break;\n\t\t\t\t\tcase 'autofilteror' /*case 'AutoFilterOr'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* QueryTable */\n\t\t\t\tcase 'querytable' /*case 'QueryTable'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'id' /*case 'Id'*/: break;\n\t\t\t\t\tcase 'autoformatfont' /*case 'AutoFormatFont'*/: break;\n\t\t\t\t\tcase 'autoformatpattern' /*case 'AutoFormatPattern'*/: break;\n\t\t\t\t\tcase 'querysource' /*case 'QuerySource'*/: break;\n\t\t\t\t\tcase 'querytype' /*case 'QueryType'*/: break;\n\t\t\t\t\tcase 'enableredirections' /*case 'EnableRedirections'*/: break;\n\t\t\t\t\tcase 'refreshedinxl9' /*case 'RefreshedInXl9'*/: break;\n\t\t\t\t\tcase 'urlstring' /*case 'URLString'*/: break;\n\t\t\t\t\tcase 'htmltables' /*case 'HTMLTables'*/: break;\n\t\t\t\t\tcase 'connection' /*case 'Connection'*/: break;\n\t\t\t\t\tcase 'commandtext' /*case 'CommandText'*/: break;\n\t\t\t\t\tcase 'refreshinfo' /*case 'RefreshInfo'*/: break;\n\t\t\t\t\tcase 'notitles' /*case 'NoTitles'*/: break;\n\t\t\t\t\tcase 'nextid' /*case 'NextId'*/: break;\n\t\t\t\t\tcase 'columninfo' /*case 'ColumnInfo'*/: break;\n\t\t\t\t\tcase 'overwritecells' /*case 'OverwriteCells'*/: break;\n\t\t\t\t\tcase 'donotpromptforfile' /*case 'DoNotPromptForFile'*/: break;\n\t\t\t\t\tcase 'textwizardsettings' /*case 'TextWizardSettings'*/: break;\n\t\t\t\t\tcase 'source' /*case 'Source'*/: break;\n\t\t\t\t\tcase 'number' /*case 'Number'*/: break;\n\t\t\t\t\tcase 'decimal' /*case 'Decimal'*/: break;\n\t\t\t\t\tcase 'thousandseparator' /*case 'ThousandSeparator'*/: break;\n\t\t\t\t\tcase 'trailingminusnumbers' /*case 'TrailingMinusNumbers'*/: break;\n\t\t\t\t\tcase 'formatsettings' /*case 'FormatSettings'*/: break;\n\t\t\t\t\tcase 'fieldtype' /*case 'FieldType'*/: break;\n\t\t\t\t\tcase 'delimiters' /*case 'Delimiters'*/: break;\n\t\t\t\t\tcase 'tab' /*case 'Tab'*/: break;\n\t\t\t\t\tcase 'comma' /*case 'Comma'*/: break;\n\t\t\t\t\tcase 'autoformatname' /*case 'AutoFormatName'*/: break;\n\t\t\t\t\tcase 'versionlastedit' /*case 'VersionLastEdit'*/: break;\n\t\t\t\t\tcase 'versionlastrefresh' /*case 'VersionLastRefresh'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\tcase 'datavalidation' /*case 'DataValidation'*/:\n\t\t\t\tswitch(Rn[3]) {\n\t\t\t\t\tcase 'range' /*case 'Range'*/: break;\n\n\t\t\t\t\tcase 'type' /*case 'Type'*/: break;\n\t\t\t\t\tcase 'min' /*case 'Min'*/: break;\n\t\t\t\t\tcase 'max' /*case 'Max'*/: break;\n\t\t\t\t\tcase 'sort' /*case 'Sort'*/: break;\n\t\t\t\t\tcase 'descending' /*case 'Descending'*/: break;\n\t\t\t\t\tcase 'order' /*case 'Order'*/: break;\n\t\t\t\t\tcase 'casesensitive' /*case 'CaseSensitive'*/: break;\n\t\t\t\t\tcase 'value' /*case 'Value'*/: break;\n\t\t\t\t\tcase 'errorstyle' /*case 'ErrorStyle'*/: break;\n\t\t\t\t\tcase 'errormessage' /*case 'ErrorMessage'*/: break;\n\t\t\t\t\tcase 'errortitle' /*case 'ErrorTitle'*/: break;\n\t\t\t\t\tcase 'inputmessage' /*case 'InputMessage'*/: break;\n\t\t\t\t\tcase 'inputtitle' /*case 'InputTitle'*/: break;\n\t\t\t\t\tcase 'combohide' /*case 'ComboHide'*/: break;\n\t\t\t\t\tcase 'inputhide' /*case 'InputHide'*/: break;\n\t\t\t\t\tcase 'condition' /*case 'Condition'*/: break;\n\t\t\t\t\tcase 'qualifier' /*case 'Qualifier'*/: break;\n\t\t\t\t\tcase 'useblank' /*case 'UseBlank'*/: break;\n\t\t\t\t\tcase 'value1' /*case 'Value1'*/: break;\n\t\t\t\t\tcase 'value2' /*case 'Value2'*/: break;\n\t\t\t\t\tcase 'format' /*case 'Format'*/: break;\n\n\t\t\t\t\tcase 'cellrangelist' /*case 'CellRangeList'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\tcase 'sorting' /*case 'Sorting'*/:\n\t\t\t\tcase 'conditionalformatting' /*case 'ConditionalFormatting'*/:\n\t\t\t\tswitch(Rn[3]) {\n\t\t\t\t\tcase 'range' /*case 'Range'*/: break;\n\t\t\t\t\tcase 'type' /*case 'Type'*/: break;\n\t\t\t\t\tcase 'min' /*case 'Min'*/: break;\n\t\t\t\t\tcase 'max' /*case 'Max'*/: break;\n\t\t\t\t\tcase 'sort' /*case 'Sort'*/: break;\n\t\t\t\t\tcase 'descending' /*case 'Descending'*/: break;\n\t\t\t\t\tcase 'order' /*case 'Order'*/: break;\n\t\t\t\t\tcase 'casesensitive' /*case 'CaseSensitive'*/: break;\n\t\t\t\t\tcase 'value' /*case 'Value'*/: break;\n\t\t\t\t\tcase 'errorstyle' /*case 'ErrorStyle'*/: break;\n\t\t\t\t\tcase 'errormessage' /*case 'ErrorMessage'*/: break;\n\t\t\t\t\tcase 'errortitle' /*case 'ErrorTitle'*/: break;\n\t\t\t\t\tcase 'cellrangelist' /*case 'CellRangeList'*/: break;\n\t\t\t\t\tcase 'inputmessage' /*case 'InputMessage'*/: break;\n\t\t\t\t\tcase 'inputtitle' /*case 'InputTitle'*/: break;\n\t\t\t\t\tcase 'combohide' /*case 'ComboHide'*/: break;\n\t\t\t\t\tcase 'inputhide' /*case 'InputHide'*/: break;\n\t\t\t\t\tcase 'condition' /*case 'Condition'*/: break;\n\t\t\t\t\tcase 'qualifier' /*case 'Qualifier'*/: break;\n\t\t\t\t\tcase 'useblank' /*case 'UseBlank'*/: break;\n\t\t\t\t\tcase 'value1' /*case 'Value1'*/: break;\n\t\t\t\t\tcase 'value2' /*case 'Value2'*/: break;\n\t\t\t\t\tcase 'format' /*case 'Format'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* MapInfo (schema) */\n\t\t\t\tcase 'mapinfo' /*case 'MapInfo'*/: case 'schema' /*case 'Schema'*/: case 'data' /*case 'data'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'map' /*case 'Map'*/: break;\n\t\t\t\t\tcase 'entry' /*case 'Entry'*/: break;\n\t\t\t\t\tcase 'range' /*case 'Range'*/: break;\n\t\t\t\t\tcase 'xpath' /*case 'XPath'*/: break;\n\t\t\t\t\tcase 'field' /*case 'Field'*/: break;\n\t\t\t\t\tcase 'xsdtype' /*case 'XSDType'*/: break;\n\t\t\t\t\tcase 'filteron' /*case 'FilterOn'*/: break;\n\t\t\t\t\tcase 'aggregate' /*case 'Aggregate'*/: break;\n\t\t\t\t\tcase 'elementtype' /*case 'ElementType'*/: break;\n\t\t\t\t\tcase 'attributetype' /*case 'AttributeType'*/: break;\n\t\t\t\t/* These are from xsd (XML Schema Definition) */\n\t\t\t\t\tcase 'schema' /*case 'schema'*/:\n\t\t\t\t\tcase 'element' /*case 'element'*/:\n\t\t\t\t\tcase 'complextype' /*case 'complexType'*/:\n\t\t\t\t\tcase 'datatype' /*case 'datatype'*/:\n\t\t\t\t\tcase 'all' /*case 'all'*/:\n\t\t\t\t\tcase 'attribute' /*case 'attribute'*/:\n\t\t\t\t\tcase 'extends' /*case 'extends'*/: break;\n\n\t\t\t\t\tcase 'row' /*case 'row'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* SmartTags (can be anything) */\n\t\t\t\tcase 'smarttags' /*case 'SmartTags'*/: break;\n\n\t\t\t\tdefault: seen = false; break;\n\t\t\t}\n\t\t\tif(seen) break;\n\t\t\t/* CustomDocumentProperties */\n\t\t\tif(Rn[3].match(/!\\[CDATA/)) break;\n\t\t\tif(!state[state.length-1][1]) throw 'Unrecognized tag: ' + Rn[3] + \"|\" + state.join(\"|\");\n\t\t\tif(state[state.length-1][0]===/*'CustomDocumentProperties'*/'customdocumentproperties') {\n\t\t\t\tif(Rn[0].slice(-2) === \"/>\") break;\n\t\t\t\telse if(Rn[1]===\"/\") xlml_set_custprop(Custprops, raw_Rn3, cp, str.slice(pidx, Rn.index));\n\t\t\t\telse { cp = Rn; pidx = Rn.index + Rn[0].length; }\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(opts.WTF) throw 'Unrecognized tag: ' + Rn[3] + \"|\" + state.join(\"|\");\n\t}\n\tvar out = ({});\n\tif(!opts.bookSheets && !opts.bookProps) out.Sheets = sheets;\n\tout.SheetNames = sheetnames;\n\tout.Workbook = Workbook;\n\tout.SSF = SSF.get_table();\n\tout.Props = Props;\n\tout.Custprops = Custprops;\n\treturn out;\n}\n\nfunction parse_xlml(data, opts) {\n\tfix_read_opts(opts=opts||{});\n\tswitch(opts.type||\"base64\") {\n\t\tcase \"base64\": return parse_xlml_xml(Base64.decode(data), opts);\n\t\tcase \"binary\": case \"buffer\": case \"file\": return parse_xlml_xml(data, opts);\n\t\tcase \"array\": return parse_xlml_xml(a2s(data), opts);\n\t}\n}\n\n/* TODO */\nfunction write_props_xlml(wb, opts) {\n\tvar o = [];\n\t/* DocumentProperties */\n\tif(wb.Props) o.push(xlml_write_docprops(wb.Props, opts));\n\t/* CustomDocumentProperties */\n\tif(wb.Custprops) o.push(xlml_write_custprops(wb.Props, wb.Custprops, opts));\n\treturn o.join(\"\");\n}\n/* TODO */\nfunction write_wb_xlml() {\n\t/* OfficeDocumentSettings */\n\t/* ExcelWorkbook */\n\treturn \"\";\n}\n/* TODO */\nfunction write_sty_xlml(wb, opts) {\n\t/* Styles */\n\tvar styles = [''];\n\topts.cellXfs.forEach(function(xf, id) {\n\t\tvar payload = [];\n\t\tpayload.push(writextag('NumberFormat', null, {\"ss:Format\": escapexml(SSF._table[xf.numFmtId])}));\n\n\t\tvar o = {\"ss:ID\": \"s\" + (21+id)};\n\t\tstyles.push(writextag('Style', payload.join(\"\"), o));\n\t});\n\treturn writextag(\"Styles\", styles.join(\"\"));\n}\nfunction write_name_xlml(n) { return writextag(\"NamedRange\", null, {\"ss:Name\": n.Name, \"ss:RefersTo\":\"=\" + a1_to_rc(n.Ref, {r:0,c:0})}); }\nfunction write_names_xlml(wb) {\n\tif(!((wb||{}).Workbook||{}).Names) return \"\";\nvar names = wb.Workbook.Names;\n\tvar out = [];\n\tfor(var i = 0; i < names.length; ++i) {\n\t\tvar n = names[i];\n\t\tif(n.Sheet != null) continue;\n\t\tif(n.Name.match(/^_xlfn\\./)) continue;\n\t\tout.push(write_name_xlml(n));\n\t}\n\treturn writextag(\"Names\", out.join(\"\"));\n}\nfunction write_ws_xlml_names(ws, opts, idx, wb) {\n\tif(!ws) return \"\";\n\tif(!((wb||{}).Workbook||{}).Names) return \"\";\nvar names = wb.Workbook.Names;\n\tvar out = [];\n\tfor(var i = 0; i < names.length; ++i) {\n\t\tvar n = names[i];\n\t\tif(n.Sheet != idx) continue;\n\t\t/*switch(n.Name) {\n\t\t\tcase \"_\": continue;\n\t\t}*/\n\t\tif(n.Name.match(/^_xlfn\\./)) continue;\n\t\tout.push(write_name_xlml(n));\n\t}\n\treturn out.join(\"\");\n}\n/* WorksheetOptions */\nfunction write_ws_xlml_wsopts(ws, opts, idx, wb) {\n\tif(!ws) return \"\";\n\tvar o = [];\n\t/* NOTE: spec technically allows any order, but stick with implied order */\n\n\t/* FitToPage */\n\t/* DoNotDisplayColHeaders */\n\t/* DoNotDisplayRowHeaders */\n\t/* ViewableRange */\n\t/* Selection */\n\t/* GridlineColor */\n\t/* Name */\n\t/* ExcelWorksheetType */\n\t/* IntlMacro */\n\t/* Unsynced */\n\t/* Selected */\n\t/* CodeName */\n\n\tif(ws['!margins']) {\n\t\to.push(\"\");\n\t\tif(ws['!margins'].header) o.push(writextag(\"Header\", null, {'x:Margin':ws['!margins'].header}));\n\t\tif(ws['!margins'].footer) o.push(writextag(\"Footer\", null, {'x:Margin':ws['!margins'].footer}));\n\t\to.push(writextag(\"PageMargins\", null, {\n\t\t\t'x:Bottom': ws['!margins'].bottom || \"0.75\",\n\t\t\t'x:Left': ws['!margins'].left || \"0.7\",\n\t\t\t'x:Right': ws['!margins'].right || \"0.7\",\n\t\t\t'x:Top': ws['!margins'].top || \"0.75\"\n\t\t}));\n\t\to.push(\"\");\n\t}\n\n\t/* PageSetup */\n\t/* DisplayPageBreak */\n\t/* TransitionExpressionEvaluation */\n\t/* TransitionFormulaEntry */\n\t/* Print */\n\t/* Zoom */\n\t/* PageLayoutZoom */\n\t/* PageBreakZoom */\n\t/* ShowPageBreakZoom */\n\t/* DefaultRowHeight */\n\t/* DefaultColumnWidth */\n\t/* StandardWidth */\n\n\tif(wb && wb.Workbook && wb.Workbook.Sheets && wb.Workbook.Sheets[idx]) {\n\t\t/* Visible */\n\t\tif(wb.Workbook.Sheets[idx].Hidden) o.push(writextag(\"Visible\", (wb.Workbook.Sheets[idx].Hidden == 1 ? \"SheetHidden\" : \"SheetVeryHidden\"), {}));\n\t\telse {\n\t\t\t/* Selected */\n\t\t\tfor(var i = 0; i < idx; ++i) if(wb.Workbook.Sheets[i] && !wb.Workbook.Sheets[i].Hidden) break;\n\t\t\tif(i == idx) o.push(\"\");\n\t\t}\n\t}\n\n\t/* LeftColumnVisible */\n\n\tif(((((wb||{}).Workbook||{}).Views||[])[0]||{}).RTL) o.push(\"\");\n\n\t/* GridlineColorIndex */\n\t/* DisplayFormulas */\n\t/* DoNotDisplayGridlines */\n\t/* DoNotDisplayHeadings */\n\t/* DoNotDisplayOutline */\n\t/* ApplyAutomaticOutlineStyles */\n\t/* NoSummaryRowsBelowDetail */\n\t/* NoSummaryColumnsRightDetail */\n\t/* DoNotDisplayZeros */\n\t/* ActiveRow */\n\t/* ActiveColumn */\n\t/* FilterOn */\n\t/* RangeSelection */\n\t/* TopRowVisible */\n\t/* TopRowBottomPane */\n\t/* LeftColumnRightPane */\n\t/* ActivePane */\n\t/* SplitHorizontal */\n\t/* SplitVertical */\n\t/* FreezePanes */\n\t/* FrozenNoSplit */\n\t/* TabColorIndex */\n\t/* Panes */\n\n\t/* NOTE: Password not supported in XLML Format */\n\tif(ws['!protect']) {\n\t\to.push(writetag(\"ProtectContents\", \"True\"));\n\t\tif(ws['!protect'].objects) o.push(writetag(\"ProtectObjects\", \"True\"));\n\t\tif(ws['!protect'].scenarios) o.push(writetag(\"ProtectScenarios\", \"True\"));\n\t\tif(ws['!protect'].selectLockedCells != null && !ws['!protect'].selectLockedCells) o.push(writetag(\"EnableSelection\", \"NoSelection\"));\n\t\telse if(ws['!protect'].selectUnlockedCells != null && !ws['!protect'].selectUnlockedCells) o.push(writetag(\"EnableSelection\", \"UnlockedCells\"));\n\t[\n\t\t[ \"formatCells\", \"AllowFormatCells\" ],\n\t\t[ \"formatColumns\", \"AllowSizeCols\" ],\n\t\t[ \"formatRows\", \"AllowSizeRows\" ],\n\t\t[ \"insertColumns\", \"AllowInsertCols\" ],\n\t\t[ \"insertRows\", \"AllowInsertRows\" ],\n\t\t[ \"insertHyperlinks\", \"AllowInsertHyperlinks\" ],\n\t\t[ \"deleteColumns\", \"AllowDeleteCols\" ],\n\t\t[ \"deleteRows\", \"AllowDeleteRows\" ],\n\t\t[ \"sort\", \"AllowSort\" ],\n\t\t[ \"autoFilter\", \"AllowFilter\" ],\n\t\t[ \"pivotTables\", \"AllowUsePivotTables\" ]\n\t].forEach(function(x) { if(ws['!protect'][x[0]]) o.push(\"<\"+x[1]+\"/>\"); });\n\t}\n\n\tif(o.length == 0) return \"\";\n\treturn writextag(\"WorksheetOptions\", o.join(\"\"), {xmlns:XLMLNS.x});\n}\nfunction write_ws_xlml_comment(comments) {\n\treturn comments.map(function(c) {\n\t\t// TODO: formatted text\n\t\tvar t = xlml_unfixstr(c.t||\"\");\n\t\tvar d =writextag(\"ss:Data\", t, {\"xmlns\":\"http://www.w3.org/TR/REC-html40\"});\n\t\treturn writextag(\"Comment\", d, {\"ss:Author\":c.a});\n\t}).join(\"\");\n}\nfunction write_ws_xlml_cell(cell, ref, ws, opts, idx, wb, addr){\n\tif(!cell || (cell.v == undefined && cell.f == undefined)) return \"\";\n\n\tvar attr = {};\n\tif(cell.f) attr[\"ss:Formula\"] = \"=\" + escapexml(a1_to_rc(cell.f, addr));\n\tif(cell.F && cell.F.slice(0, ref.length) == ref) {\n\t\tvar end = decode_cell(cell.F.slice(ref.length + 1));\n\t\tattr[\"ss:ArrayRange\"] = \"RC:R\" + (end.r == addr.r ? \"\" : \"[\" + (end.r - addr.r) + \"]\") + \"C\" + (end.c == addr.c ? \"\" : \"[\" + (end.c - addr.c) + \"]\");\n\t}\n\n\tif(cell.l && cell.l.Target) {\n\t\tattr[\"ss:HRef\"] = escapexml(cell.l.Target);\n\t\tif(cell.l.Tooltip) attr[\"x:HRefScreenTip\"] = escapexml(cell.l.Tooltip);\n\t}\n\n\tif(ws['!merges']) {\n\t\tvar marr = ws['!merges'];\n\t\tfor(var mi = 0; mi != marr.length; ++mi) {\n\t\t\tif(marr[mi].s.c != addr.c || marr[mi].s.r != addr.r) continue;\n\t\t\tif(marr[mi].e.c > marr[mi].s.c) attr['ss:MergeAcross'] = marr[mi].e.c - marr[mi].s.c;\n\t\t\tif(marr[mi].e.r > marr[mi].s.r) attr['ss:MergeDown'] = marr[mi].e.r - marr[mi].s.r;\n\t\t}\n\t}\n\n\tvar t = \"\", p = \"\";\n\tswitch(cell.t) {\n\t\tcase 'z': if(!opts.sheetStubs) return \"\"; break;\n\t\tcase 'n': t = 'Number'; p = String(cell.v); break;\n\t\tcase 'b': t = 'Boolean'; p = (cell.v ? \"1\" : \"0\"); break;\n\t\tcase 'e': t = 'Error'; p = BErr[cell.v]; break;\n\t\tcase 'd': t = 'DateTime'; p = new Date(cell.v).toISOString(); if(cell.z == null) cell.z = cell.z || SSF._table[14]; break;\n\t\tcase 's': t = 'String'; p = escapexlml(cell.v||\"\"); break;\n\t}\n\t/* TODO: cell style */\n\tvar os = get_cell_style(opts.cellXfs, cell, opts);\n\tattr[\"ss:StyleID\"] = \"s\" + (21+os);\n\tattr[\"ss:Index\"] = addr.c + 1;\n\tvar _v = (cell.v != null ? p : \"\");\n\tvar m = cell.t == 'z' ? \"\" : ('' + _v + '');\n\n\tif((cell.c||[]).length > 0) m += write_ws_xlml_comment(cell.c);\n\n\treturn writextag(\"Cell\", m, attr);\n}\nfunction write_ws_xlml_row(R, row) {\n\tvar o = '';\n}\n/* TODO */\nfunction write_ws_xlml_table(ws, opts, idx, wb) {\n\tif(!ws['!ref']) return \"\";\n\tvar range = safe_decode_range(ws['!ref']);\n\tvar marr = ws['!merges'] || [], mi = 0;\n\tvar o = [];\n\tif(ws['!cols']) ws['!cols'].forEach(function(n, i) {\n\t\tprocess_col(n);\n\t\tvar w = !!n.width;\n\t\tvar p = col_obj_w(i, n);\n\t\tvar k = {\"ss:Index\":i+1};\n\t\tif(w) k['ss:Width'] = width2px(p.width);\n\t\tif(n.hidden) k['ss:Hidden']=\"1\";\n\t\to.push(writextag(\"Column\",null,k));\n\t});\n\tvar dense = Array.isArray(ws);\n\tfor(var R = range.s.r; R <= range.e.r; ++R) {\n\t\tvar row = [write_ws_xlml_row(R, (ws['!rows']||[])[R])];\n\t\tfor(var C = range.s.c; C <= range.e.c; ++C) {\n\t\t\tvar skip = false;\n\t\t\tfor(mi = 0; mi != marr.length; ++mi) {\n\t\t\t\tif(marr[mi].s.c > C) continue;\n\t\t\t\tif(marr[mi].s.r > R) continue;\n\t\t\t\tif(marr[mi].e.c < C) continue;\n\t\t\t\tif(marr[mi].e.r < R) continue;\n\t\t\t\tif(marr[mi].s.c != C || marr[mi].s.r != R) skip = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(skip) continue;\n\t\t\tvar addr = {r:R,c:C};\n\t\t\tvar ref = encode_cell(addr), cell = dense ? (ws[R]||[])[C] : ws[ref];\n\t\t\trow.push(write_ws_xlml_cell(cell, ref, ws, opts, idx, wb, addr));\n\t\t}\n\t\trow.push(\"\");\n\t\tif(row.length > 2) o.push(row.join(\"\"));\n\t}\n\treturn o.join(\"\");\n}\nfunction write_ws_xlml(idx, opts, wb) {\n\tvar o = [];\n\tvar s = wb.SheetNames[idx];\n\tvar ws = wb.Sheets[s];\n\n\tvar t = ws ? write_ws_xlml_names(ws, opts, idx, wb) : \"\";\n\tif(t.length > 0) o.push(\"\" + t + \"\");\n\n\t/* Table */\n\tt = ws ? write_ws_xlml_table(ws, opts, idx, wb) : \"\";\n\tif(t.length > 0) o.push(\"\" + t + \"
\");\n\n\t/* WorksheetOptions */\n\to.push(write_ws_xlml_wsopts(ws, opts, idx, wb));\n\n\treturn o.join(\"\");\n}\nfunction write_xlml(wb, opts) {\n\tif(!opts) opts = {};\n\tif(!wb.SSF) wb.SSF = SSF.get_table();\n\tif(wb.SSF) {\n\t\tmake_ssf(SSF); SSF.load_table(wb.SSF);\n\t\t// $FlowIgnore\n\t\topts.revssf = evert_num(wb.SSF); opts.revssf[wb.SSF[65535]] = 0;\n\t\topts.ssf = wb.SSF;\n\t\topts.cellXfs = [];\n\t\tget_cell_style(opts.cellXfs, {}, {revssf:{\"General\":0}});\n\t}\n\tvar d = [];\n\td.push(write_props_xlml(wb, opts));\n\td.push(write_wb_xlml(wb, opts));\n\td.push(\"\");\n\td.push(\"\");\n\tfor(var i = 0; i < wb.SheetNames.length; ++i)\n\t\td.push(writextag(\"Worksheet\", write_ws_xlml(i, opts, wb), {\"ss:Name\":escapexml(wb.SheetNames[i])}));\n\td[2] = write_sty_xlml(wb, opts);\n\td[3] = write_names_xlml(wb, opts);\n\treturn XML_HEADER + writextag(\"Workbook\", d.join(\"\"), {\n\t\t'xmlns': XLMLNS.ss,\n\t\t'xmlns:o': XLMLNS.o,\n\t\t'xmlns:x': XLMLNS.x,\n\t\t'xmlns:ss': XLMLNS.ss,\n\t\t'xmlns:dt': XLMLNS.dt,\n\t\t'xmlns:html': XLMLNS.html\n\t});\n}\n/* [MS-OLEDS] 2.3.8 CompObjStream */\nfunction parse_compobj(obj) {\n\tvar v = {};\n\tvar o = obj.content;\n/* [MS-OLEDS] 2.3.7 CompObjHeader -- All fields MUST be ignored */\n\to.l = 28;\n\n\tv.AnsiUserType = o.read_shift(0, \"lpstr-ansi\");\n\tv.AnsiClipboardFormat = parse_ClipboardFormatOrAnsiString(o);\n\n\tif(o.length - o.l <= 4) return v;\n\n\tvar m = o.read_shift(4);\n\tif(m == 0 || m > 40) return v;\n\to.l-=4; v.Reserved1 = o.read_shift(0, \"lpstr-ansi\");\n\n\tif(o.length - o.l <= 4) return v;\n\tm = o.read_shift(4);\n\tif(m !== 0x71b239f4) return v;\n\tv.UnicodeClipboardFormat = parse_ClipboardFormatOrUnicodeString(o);\n\n\tm = o.read_shift(4);\n\tif(m == 0 || m > 40) return v;\n\to.l-=4; v.Reserved2 = o.read_shift(0, \"lpwstr\");\n}\n\n/*\n\tContinue logic for:\n\t- 2.4.58 Continue\n\t- 2.4.59 ContinueBigName\n\t- 2.4.60 ContinueFrt\n\t- 2.4.61 ContinueFrt11\n\t- 2.4.62 ContinueFrt12\n*/\nfunction slurp(R, blob, length, opts) {\n\tvar l = length;\n\tvar bufs = [];\n\tvar d = blob.slice(blob.l,blob.l+l);\n\tif(opts && opts.enc && opts.enc.insitu) switch(R.n) {\n\tcase 'BOF': case 'FilePass': case 'FileLock': case 'InterfaceHdr': case 'RRDInfo': case 'RRDHead': case 'UsrExcl': break;\n\tdefault:\n\t\tif(d.length === 0) break;\n\t\topts.enc.insitu(d);\n\t}\n\tbufs.push(d);\n\tblob.l += l;\n\tvar next = (XLSRecordEnum[__readUInt16LE(blob,blob.l)]);\n\tvar start = 0;\n\twhile(next != null && next.n.slice(0,8) === 'Continue') {\n\t\tl = __readUInt16LE(blob,blob.l+2);\n\t\tstart = blob.l + 4;\n\t\tif(next.n == 'ContinueFrt') start += 4;\n\t\telse if(next.n.slice(0,11) == 'ContinueFrt') start += 12;\n\t\tbufs.push(blob.slice(start,blob.l+4+l));\n\t\tblob.l += 4+l;\n\t\tnext = (XLSRecordEnum[__readUInt16LE(blob, blob.l)]);\n\t}\n\tvar b = (bconcat(bufs));\n\tprep_blob(b, 0);\n\tvar ll = 0; b.lens = [];\n\tfor(var j = 0; j < bufs.length; ++j) { b.lens.push(ll); ll += bufs[j].length; }\n\treturn R.f(b, b.length, opts);\n}\n\nfunction safe_format_xf(p, opts, date1904) {\n\tif(p.t === 'z') return;\n\tif(!p.XF) return;\n\tvar fmtid = 0;\n\ttry {\n\t\tfmtid = p.z || p.XF.numFmtId || 0;\n\t\tif(opts.cellNF) p.z = SSF._table[fmtid];\n\t} catch(e) { if(opts.WTF) throw e; }\n\tif(!opts || opts.cellText !== false) try {\n\t\tif(p.t === 'e') { p.w = p.w || BErr[p.v]; }\n\t\telse if(fmtid === 0 || fmtid == \"General\") {\n\t\t\tif(p.t === 'n') {\n\t\t\t\tif((p.v|0) === p.v) p.w = SSF._general_int(p.v);\n\t\t\t\telse p.w = SSF._general_num(p.v);\n\t\t\t}\n\t\t\telse p.w = SSF._general(p.v);\n\t\t}\n\t\telse p.w = SSF.format(fmtid,p.v, {date1904:!!date1904});\n\t} catch(e) { if(opts.WTF) throw e; }\n\tif(opts.cellDates && fmtid && p.t == 'n' && SSF.is_date(SSF._table[fmtid] || String(fmtid))) {\n\t\tvar _d = SSF.parse_date_code(p.v); if(_d) { p.t = 'd'; p.v = new Date(_d.y, _d.m-1,_d.d,_d.H,_d.M,_d.S,_d.u); }\n\t}\n}\n\nfunction make_cell(val, ixfe, t) {\n\treturn ({v:val, ixfe:ixfe, t:t});\n}\n\n// 2.3.2\nfunction parse_workbook(blob, options) {\n\tvar wb = ({opts:{}});\n\tvar Sheets = {};\n\tif(DENSE != null && options.dense == null) options.dense = DENSE;\n\tvar out = ((options.dense ? [] : {}));\n\tvar Directory = {};\n\tvar range = ({});\n\tvar last_formula = null;\n\tvar sst = ([]);\n\tvar cur_sheet = \"\";\n\tvar Preamble = {};\n\tvar lastcell, last_cell = \"\", cc, cmnt, rngC, rngR;\n\tvar sharedf = {};\n\tvar arrayf = [];\n\tvar temp_val;\n\tvar country;\n\tvar cell_valid = true;\n\tvar XFs = []; /* XF records */\n\tvar palette = [];\n\tvar Workbook = ({ Sheets:[], WBProps:{date1904:false}, Views:[{}] }), wsprops = {};\n\tvar get_rgb = function getrgb(icv) {\n\t\tif(icv < 8) return XLSIcv[icv];\n\t\tif(icv < 64) return palette[icv-8] || XLSIcv[icv];\n\t\treturn XLSIcv[icv];\n\t};\n\tvar process_cell_style = function pcs(cell, line, options) {\n\t\tvar xfd = line.XF.data;\n\t\tif(!xfd || !xfd.patternType || !options || !options.cellStyles) return;\n\t\tline.s = ({});\n\t\tline.s.patternType = xfd.patternType;\n\t\tvar t;\n\t\tif((t = rgb2Hex(get_rgb(xfd.icvFore)))) { line.s.fgColor = {rgb:t}; }\n\t\tif((t = rgb2Hex(get_rgb(xfd.icvBack)))) { line.s.bgColor = {rgb:t}; }\n\t};\n\tvar addcell = function addcell(cell, line, options) {\n\t\tif(file_depth > 1) return;\n\t\tif(options.sheetRows && cell.r >= options.sheetRows) cell_valid = false;\n\t\tif(!cell_valid) return;\n\t\tif(options.cellStyles && line.XF && line.XF.data) process_cell_style(cell, line, options);\n\t\tdelete line.ixfe; delete line.XF;\n\t\tlastcell = cell;\n\t\tlast_cell = encode_cell(cell);\n\t\tif(!range || !range.s || !range.e) range = {s:{r:0,c:0},e:{r:0,c:0}};\n\t\tif(cell.r < range.s.r) range.s.r = cell.r;\n\t\tif(cell.c < range.s.c) range.s.c = cell.c;\n\t\tif(cell.r + 1 > range.e.r) range.e.r = cell.r + 1;\n\t\tif(cell.c + 1 > range.e.c) range.e.c = cell.c + 1;\n\t\tif(options.cellFormula && line.f) {\n\t\t\tfor(var afi = 0; afi < arrayf.length; ++afi) {\n\t\t\t\tif(arrayf[afi][0].s.c > cell.c || arrayf[afi][0].s.r > cell.r) continue;\n\t\t\t\tif(arrayf[afi][0].e.c < cell.c || arrayf[afi][0].e.r < cell.r) continue;\n\t\t\t\tline.F = encode_range(arrayf[afi][0]);\n\t\t\t\tif(arrayf[afi][0].s.c != cell.c || arrayf[afi][0].s.r != cell.r) delete line.f;\n\t\t\t\tif(line.f) line.f = \"\" + stringify_formula(arrayf[afi][1], range, cell, supbooks, opts);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t{\n\t\t\tif(options.dense) {\n\t\t\t\tif(!out[cell.r]) out[cell.r] = [];\n\t\t\t\tout[cell.r][cell.c] = line;\n\t\t\t} else out[last_cell] = line;\n\t\t}\n\t};\n\tvar opts = ({\n\t\tenc: false, // encrypted\n\t\tsbcch: 0, // cch in the preceding SupBook\n\t\tsnames: [], // sheetnames\n\t\tsharedf: sharedf, // shared formulae by address\n\t\tarrayf: arrayf, // array formulae array\n\t\trrtabid: [], // RRTabId\n\t\tlastuser: \"\", // Last User from WriteAccess\n\t\tbiff: 8, // BIFF version\n\t\tcodepage: 0, // CP from CodePage record\n\t\twinlocked: 0, // fLockWn from WinProtect\n\t\tcellStyles: !!options && !!options.cellStyles,\n\t\tWTF: !!options && !!options.wtf\n\t});\n\tif(options.password) opts.password = options.password;\n\tvar themes;\n\tvar merges = [];\n\tvar objects = [];\n\tvar colinfo = [], rowinfo = [];\n\t// eslint-disable-next-line no-unused-vars\n\tvar defwidth = 0, defheight = 0; // twips / MDW respectively\n\tvar seencol = false;\n\tvar supbooks = ([]); // 1-indexed, will hold extern names\n\tsupbooks.SheetNames = opts.snames;\n\tsupbooks.sharedf = opts.sharedf;\n\tsupbooks.arrayf = opts.arrayf;\n\tsupbooks.names = [];\n\tsupbooks.XTI = [];\n\tvar last_Rn = '';\n\tvar file_depth = 0; /* TODO: make a real stack */\n\tvar BIFF2Fmt = 0, BIFF2FmtTable = [];\n\tvar FilterDatabases = []; /* TODO: sort out supbooks and process elsewhere */\n\tvar last_lbl;\n\n\t/* explicit override for some broken writers */\n\topts.codepage = 1200;\n\tset_cp(1200);\n\tvar seen_codepage = false;\n\twhile(blob.l < blob.length - 1) {\n\t\tvar s = blob.l;\n\t\tvar RecordType = blob.read_shift(2);\n\t\tif(RecordType === 0 && last_Rn === 'EOF') break;\n\t\tvar length = (blob.l === blob.length ? 0 : blob.read_shift(2));\n\t\tvar R = XLSRecordEnum[RecordType];\n\t\t//console.log(RecordType.toString(16), RecordType, R, blob.l, length, blob.length);\n\t\t//if(!R) console.log(blob.slice(blob.l, blob.l + length));\n\t\tif(R && R.f) {\n\t\t\tif(options.bookSheets) {\n\t\t\t\tif(last_Rn === 'BoundSheet8' && R.n !== 'BoundSheet8') break;\n\t\t\t}\n\t\t\tlast_Rn = R.n;\n\t\t\tif(R.r === 2 || R.r == 12) {\n\t\t\t\tvar rt = blob.read_shift(2); length -= 2;\n\t\t\t\tif(!opts.enc && rt !== RecordType && (((rt&0xFF)<<8)|(rt>>8)) !== RecordType) throw new Error(\"rt mismatch: \" + rt + \"!=\" + RecordType);\n\t\t\t\tif(R.r == 12){ blob.l += 10; length -= 10; } // skip FRT\n\t\t\t}\n\t\t\t//console.error(R,blob.l,length,blob.length);\n\t\t\tvar val = ({});\n\t\t\tif(R.n === 'EOF') val = R.f(blob, length, opts);\n\t\t\telse val = slurp(R, blob, length, opts);\n\t\t\tvar Rn = R.n;\nif(file_depth == 0 && Rn != 'BOF') continue;\n\t\t\t/* nested switch statements to workaround V8 128 limit */\n\t\t\tswitch(Rn) {\n\t\t\t\t/* Workbook Options */\n\t\t\t\tcase 'Date1904':\nwb.opts.Date1904 = Workbook.WBProps.date1904 = val; break;\n\t\t\t\tcase 'WriteProtect': wb.opts.WriteProtect = true; break;\n\t\t\t\tcase 'FilePass':\n\t\t\t\t\tif(!opts.enc) blob.l = 0;\n\t\t\t\t\topts.enc = val;\n\t\t\t\t\tif(!options.password) throw new Error(\"File is password-protected\");\n\t\t\t\t\tif(val.valid == null) throw new Error(\"Encryption scheme unsupported\");\n\t\t\t\t\tif(!val.valid) throw new Error(\"Password is incorrect\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'WriteAccess': opts.lastuser = val; break;\n\t\t\t\tcase 'FileSharing': break; //TODO\n\t\t\t\tcase 'CodePage':\n\t\t\t\t\tvar cpval = Number(val);\n\t\t\t\t\t/* overrides based on test cases */\n\t\t\t\t\tswitch(cpval) {\n\t\t\t\t\t\tcase 0x5212: cpval = 1200; break;\n\t\t\t\t\t\tcase 0x8000: cpval = 10000; break;\n\t\t\t\t\t\tcase 0x8001: cpval = 1252; break;\n\t\t\t\t\t}\n\t\t\t\t\tset_cp(opts.codepage = cpval);\n\t\t\t\t\tseen_codepage = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'RRTabId': opts.rrtabid = val; break;\n\t\t\t\tcase 'WinProtect': opts.winlocked = val; break;\n\t\t\t\tcase 'Template': break; // TODO\n\t\t\t\tcase 'BookBool': break; // TODO\n\t\t\t\tcase 'UsesELFs': break;\n\t\t\t\tcase 'MTRSettings': break;\n\t\t\t\tcase 'RefreshAll':\n\t\t\t\tcase 'CalcCount':\n\t\t\t\tcase 'CalcDelta':\n\t\t\t\tcase 'CalcIter':\n\t\t\t\tcase 'CalcMode':\n\t\t\t\tcase 'CalcPrecision':\n\t\t\t\tcase 'CalcSaveRecalc':\n\t\t\t\t\twb.opts[Rn] = val; break;\n\t\t\t\tcase 'CalcRefMode': opts.CalcRefMode = val; break; // TODO: implement R1C1\n\t\t\t\tcase 'Uncalced': break;\n\t\t\t\tcase 'ForceFullCalculation': wb.opts.FullCalc = val; break;\n\t\t\t\tcase 'WsBool':\n\t\t\t\t\tif(val.fDialog) out[\"!type\"] = \"dialog\";\n\t\t\t\t\tbreak; // TODO\n\t\t\t\tcase 'XF':\n\t\t\t\t\tXFs.push(val); break;\n\t\t\t\tcase 'ExtSST': break; // TODO\n\t\t\t\tcase 'BookExt': break; // TODO\n\t\t\t\tcase 'RichTextStream': break;\n\t\t\t\tcase 'BkHim': break;\n\n\t\t\t\tcase 'SupBook':\n\t\t\t\t\tsupbooks.push([val]);\n\t\t\t\t\tsupbooks[supbooks.length-1].XTI = [];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'ExternName':\n\t\t\t\t\tsupbooks[supbooks.length-1].push(val);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Index': break; // TODO\n\t\t\t\tcase 'Lbl':\n\t\t\t\t\tlast_lbl = ({\n\t\t\t\t\t\tName: val.Name,\n\t\t\t\t\t\tRef: stringify_formula(val.rgce,range,null,supbooks,opts)\n\t\t\t\t\t});\n\t\t\t\t\tif(val.itab > 0) last_lbl.Sheet = val.itab - 1;\n\t\t\t\t\tsupbooks.names.push(last_lbl);\n\t\t\t\t\tif(!supbooks[0]) { supbooks[0] = []; supbooks[0].XTI = []; }\n\t\t\t\t\tsupbooks[supbooks.length-1].push(val);\n\t\t\t\t\tif(val.Name == \"_xlnm._FilterDatabase\" && val.itab > 0)\n\t\t\t\t\t\tif(val.rgce && val.rgce[0] && val.rgce[0][0] && val.rgce[0][0][0] == 'PtgArea3d')\n\t\t\t\t\t\t\tFilterDatabases[val.itab - 1] = { ref: encode_range(val.rgce[0][0][1][2]) };\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'ExternCount': opts.ExternCount = val; break;\n\t\t\t\tcase 'ExternSheet':\n\t\t\t\t\tif(supbooks.length == 0) { supbooks[0] = []; supbooks[0].XTI = []; }\n\t\t\t\t\tsupbooks[supbooks.length - 1].XTI = supbooks[supbooks.length - 1].XTI.concat(val); supbooks.XTI = supbooks.XTI.concat(val); break;\n\t\t\t\tcase 'NameCmt':\n\t\t\t\t\t/* TODO: search for correct name */\n\t\t\t\t\tif(opts.biff < 8) break;\n\t\t\t\t\tif(last_lbl != null) last_lbl.Comment = val[1];\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Protect': out[\"!protect\"] = val; break; /* for sheet or book */\n\t\t\t\tcase 'Password': if(val !== 0 && opts.WTF) console.error(\"Password verifier: \" + val); break;\n\t\t\t\tcase 'Prot4Rev': case 'Prot4RevPass': break; /*TODO: Revision Control*/\n\n\t\t\t\tcase 'BoundSheet8': {\n\t\t\t\t\tDirectory[val.pos] = val;\n\t\t\t\t\topts.snames.push(val.name);\n\t\t\t\t} break;\n\t\t\t\tcase 'EOF': {\n\t\t\t\t\tif(--file_depth) break;\n\t\t\t\t\tif(range.e) {\n\t\t\t\t\t\tif(range.e.r > 0 && range.e.c > 0) {\n\t\t\t\t\t\t\trange.e.r--; range.e.c--;\n\t\t\t\t\t\t\tout[\"!ref\"] = encode_range(range);\n\t\t\t\t\t\t\tif(options.sheetRows && options.sheetRows <= range.e.r) {\n\t\t\t\t\t\t\t\tvar tmpri = range.e.r;\n\t\t\t\t\t\t\t\trange.e.r = options.sheetRows - 1;\n\t\t\t\t\t\t\t\tout[\"!fullref\"] = out[\"!ref\"];\n\t\t\t\t\t\t\t\tout[\"!ref\"] = encode_range(range);\n\t\t\t\t\t\t\t\trange.e.r = tmpri;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\trange.e.r++; range.e.c++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(merges.length > 0) out[\"!merges\"] = merges;\n\t\t\t\t\t\tif(objects.length > 0) out[\"!objects\"] = objects;\n\t\t\t\t\t\tif(colinfo.length > 0) out[\"!cols\"] = colinfo;\n\t\t\t\t\t\tif(rowinfo.length > 0) out[\"!rows\"] = rowinfo;\n\t\t\t\t\t\tWorkbook.Sheets.push(wsprops);\n\t\t\t\t\t}\n\t\t\t\t\tif(cur_sheet === \"\") Preamble = out; else Sheets[cur_sheet] = out;\n\t\t\t\t\tout = ((options.dense ? [] : {}));\n\t\t\t\t} break;\n\t\t\t\tcase 'BOF': {\n\t\t\t\t\tif(opts.biff === 8) opts.biff = {\n0x0009:2,\n0x0209:3,\n0x0409:4\n\t\t\t\t\t}[RecordType] || {\n0x0200:2,\n0x0300:3,\n0x0400:4,\n0x0500:5,\n0x0600:8,\n0x0002:2,\n0x0007:2\n\t\t\t\t\t}[val.BIFFVer] || 8;\n\t\t\t\t\tif(opts.biff == 8 && val.BIFFVer == 0 && val.dt == 16) opts.biff = 2;\n\t\t\t\t\tif(file_depth++) break;\n\t\t\t\t\tcell_valid = true;\n\t\t\t\t\tout = ((options.dense ? [] : {}));\n\n\t\t\t\t\tif(opts.biff < 8 && !seen_codepage) { seen_codepage = true; set_cp(opts.codepage = options.codepage || 1252); }\n\t\t\t\t\tif(opts.biff < 5) {\n\t\t\t\t\t\tif(cur_sheet === \"\") cur_sheet = \"Sheet1\";\n\t\t\t\t\t\trange = {s:{r:0,c:0},e:{r:0,c:0}};\n\t\t\t\t\t\t/* fake BoundSheet8 */\n\t\t\t\t\t\tvar fakebs8 = {pos: blob.l - length, name:cur_sheet};\n\t\t\t\t\t\tDirectory[fakebs8.pos] = fakebs8;\n\t\t\t\t\t\topts.snames.push(cur_sheet);\n\t\t\t\t\t}\n\t\t\t\t\telse cur_sheet = (Directory[s] || {name:\"\"}).name;\n\t\t\t\t\tif(val.dt == 0x20) out[\"!type\"] = \"chart\";\n\t\t\t\t\tif(val.dt == 0x40) out[\"!type\"] = \"macro\";\n\t\t\t\t\tmerges = [];\n\t\t\t\t\tobjects = [];\n\t\t\t\t\topts.arrayf = arrayf = [];\n\t\t\t\t\tcolinfo = []; rowinfo = [];\n\t\t\t\t\tdefwidth = defheight = 0;\n\t\t\t\t\tseencol = false;\n\t\t\t\t\twsprops = {Hidden:(Directory[s]||{hs:0}).hs, name:cur_sheet };\n\t\t\t\t} break;\n\n\t\t\t\tcase 'Number': case 'BIFF2NUM': case 'BIFF2INT': {\n\t\t\t\t\tif(out[\"!type\"] == \"chart\") if(options.dense ? (out[val.r]||[])[val.c]: out[encode_cell({c:val.c, r:val.r})]) ++val.c;\n\t\t\t\t\ttemp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe]||{}, v:val.val, t:'n'});\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x1F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t} break;\n\t\t\t\tcase 'BoolErr': {\n\t\t\t\t\ttemp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe], v:val.val, t:val.t});\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x1F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t} break;\n\t\t\t\tcase 'RK': {\n\t\t\t\t\ttemp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe], v:val.rknum, t:'n'});\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x1F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t} break;\n\t\t\t\tcase 'MulRk': {\n\t\t\t\t\tfor(var j = val.c; j <= val.C; ++j) {\n\t\t\t\t\t\tvar ixfe = val.rkrec[j-val.c][0];\n\t\t\t\t\t\ttemp_val= ({ixfe:ixfe, XF:XFs[ixfe], v:val.rkrec[j-val.c][1], t:'n'});\n\t\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x1F];\n\t\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\t\taddcell({c:j, r:val.r}, temp_val, options);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 'Formula': {\n\t\t\t\t\tif(val.val == 'String') { last_formula = val; break; }\n\t\t\t\t\ttemp_val = make_cell(val.val, val.cell.ixfe, val.tt);\n\t\t\t\t\ttemp_val.XF = XFs[temp_val.ixfe];\n\t\t\t\t\tif(options.cellFormula) {\n\t\t\t\t\t\tvar _f = val.formula;\n\t\t\t\t\t\tif(_f && _f[0] && _f[0][0] && _f[0][0][0] == 'PtgExp') {\n\t\t\t\t\t\t\tvar _fr = _f[0][0][1][0], _fc = _f[0][0][1][1];\n\t\t\t\t\t\t\tvar _fe = encode_cell({r:_fr, c:_fc});\n\t\t\t\t\t\t\tif(sharedf[_fe]) temp_val.f = \"\"+stringify_formula(val.formula,range,val.cell,supbooks, opts);\n\t\t\t\t\t\t\telse temp_val.F = ((options.dense ? (out[_fr]||[])[_fc]: out[_fe]) || {}).F;\n\t\t\t\t\t\t} else temp_val.f = \"\"+stringify_formula(val.formula,range,val.cell,supbooks, opts);\n\t\t\t\t\t}\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x1F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell(val.cell, temp_val, options);\n\t\t\t\t\tlast_formula = val;\n\t\t\t\t} break;\n\t\t\t\tcase 'String': {\n\t\t\t\t\tif(last_formula) { /* technically always true */\n\t\t\t\t\t\tlast_formula.val = val;\n\t\t\t\t\t\ttemp_val = make_cell(val, last_formula.cell.ixfe, 's');\n\t\t\t\t\t\ttemp_val.XF = XFs[temp_val.ixfe];\n\t\t\t\t\t\tif(options.cellFormula) {\n\t\t\t\t\t\t\ttemp_val.f = \"\"+stringify_formula(last_formula.formula, range, last_formula.cell, supbooks, opts);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x1F];\n\t\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\t\taddcell(last_formula.cell, temp_val, options);\n\t\t\t\t\t\tlast_formula = null;\n\t\t\t\t\t} else throw new Error(\"String record expects Formula\");\n\t\t\t\t} break;\n\t\t\t\tcase 'Array': {\n\t\t\t\t\tarrayf.push(val);\n\t\t\t\t\tvar _arraystart = encode_cell(val[0].s);\n\t\t\t\t\tcc = options.dense ? (out[val[0].s.r]||[])[val[0].s.c] : out[_arraystart];\n\t\t\t\t\tif(options.cellFormula && cc) {\n\t\t\t\t\t\tif(!last_formula) break; /* technically unreachable */\n\t\t\t\t\t\tif(!_arraystart || !cc) break;\n\t\t\t\t\t\tcc.f = \"\"+stringify_formula(val[1], range, val[0], supbooks, opts);\n\t\t\t\t\t\tcc.F = encode_range(val[0]);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 'ShrFmla': {\n\t\t\t\t\tif(!cell_valid) break;\n\t\t\t\t\tif(!options.cellFormula) break;\n\t\t\t\t\tif(last_cell) {\n\t\t\t\t\t\t/* TODO: capture range */\n\t\t\t\t\t\tif(!last_formula) break; /* technically unreachable */\n\t\t\t\t\t\tsharedf[encode_cell(last_formula.cell)]= val[0];\n\t\t\t\t\t\tcc = options.dense ? (out[last_formula.cell.r]||[])[last_formula.cell.c] : out[encode_cell(last_formula.cell)];\n\t\t\t\t\t\t(cc||{}).f = \"\"+stringify_formula(val[0], range, lastcell, supbooks, opts);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 'LabelSst':\n\t\t\t\t\ttemp_val=make_cell(sst[val.isst].t, val.ixfe, 's');\n\t\t\t\t\tif(sst[val.isst].h) temp_val.h = sst[val.isst].h;\n\t\t\t\t\ttemp_val.XF = XFs[temp_val.ixfe];\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x1F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Blank': if(options.sheetStubs) {\n\t\t\t\t\ttemp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe], t:'z'});\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x1F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t} break;\n\t\t\t\tcase 'MulBlank': if(options.sheetStubs) {\n\t\t\t\t\tfor(var _j = val.c; _j <= val.C; ++_j) {\n\t\t\t\t\t\tvar _ixfe = val.ixfe[_j-val.c];\n\t\t\t\t\t\ttemp_val= ({ixfe:_ixfe, XF:XFs[_ixfe], t:'z'});\n\t\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x1F];\n\t\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\t\taddcell({c:_j, r:val.r}, temp_val, options);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 'RString':\n\t\t\t\tcase 'Label': case 'BIFF2STR':\n\t\t\t\t\ttemp_val=make_cell(val.val, val.ixfe, 's');\n\t\t\t\t\ttemp_val.XF = XFs[temp_val.ixfe];\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x1F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Dimensions': {\n\t\t\t\t\tif(file_depth === 1) range = val; /* TODO: stack */\n\t\t\t\t} break;\n\t\t\t\tcase 'SST': {\n\t\t\t\t\tsst = val;\n\t\t\t\t} break;\n\t\t\t\tcase 'Format': { /* val = [id, fmt] */\n\t\t\t\t\tif(opts.biff == 4) {\n\t\t\t\t\t\tBIFF2FmtTable[BIFF2Fmt++] = val[1];\n\t\t\t\t\t\tfor(var b4idx = 0; b4idx < BIFF2Fmt + 163; ++b4idx) if(SSF._table[b4idx] == val[1]) break;\n\t\t\t\t\t\tif(b4idx >= 163) SSF.load(val[1], BIFF2Fmt + 163);\n\t\t\t\t\t}\n\t\t\t\t\telse SSF.load(val[1], val[0]);\n\t\t\t\t} break;\n\t\t\t\tcase 'BIFF2FORMAT': {\n\t\t\t\t\tBIFF2FmtTable[BIFF2Fmt++] = val;\n\t\t\t\t\tfor(var b2idx = 0; b2idx < BIFF2Fmt + 163; ++b2idx) if(SSF._table[b2idx] == val) break;\n\t\t\t\t\tif(b2idx >= 163) SSF.load(val, BIFF2Fmt + 163);\n\t\t\t\t} break;\n\n\t\t\t\tcase 'MergeCells': merges = merges.concat(val); break;\n\n\t\t\t\tcase 'Obj': objects[val.cmo[0]] = opts.lastobj = val; break;\n\t\t\t\tcase 'TxO': opts.lastobj.TxO = val; break;\n\t\t\t\tcase 'ImData': opts.lastobj.ImData = val; break;\n\n\t\t\t\tcase 'HLink': {\n\t\t\t\t\tfor(rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR)\n\t\t\t\t\t\tfor(rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC) {\n\t\t\t\t\t\t\tcc = options.dense ? (out[rngR]||[])[rngC] : out[encode_cell({c:rngC,r:rngR})];\n\t\t\t\t\t\t\tif(cc) cc.l = val[1];\n\t\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 'HLinkTooltip': {\n\t\t\t\t\tfor(rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR)\n\t\t\t\t\t\tfor(rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC) {\n\t\t\t\t\t\t\tcc = options.dense ? (out[rngR]||[])[rngC] : out[encode_cell({c:rngC,r:rngR})];\n\t\t\t\t\t\t\tif(cc && cc.l) cc.l.Tooltip = val[1];\n\t\t\t\t\t\t\t}\n\t\t\t\t} break;\n\n\t\t\t\t/* Comments */\n\t\t\t\tcase 'Note': {\n\t\t\t\t\tif(opts.biff <= 5 && opts.biff >= 2) break; /* TODO: BIFF5 */\n\t\t\t\t\tcc = options.dense ? (out[val[0].r]||[])[val[0].c] : out[encode_cell(val[0])];\n\t\t\t\t\tvar noteobj = objects[val[2]];\n\t\t\t\t\tif(!cc) {\n\t\t\t\t\t\tif(options.dense) {\n\t\t\t\t\t\t\tif(!out[val[0].r]) out[val[0].r] = [];\n\t\t\t\t\t\t\tcc = out[val[0].r][val[0].c] = ({t:\"z\"});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcc = out[encode_cell(val[0])] = ({t:\"z\"});\n\t\t\t\t\t\t}\n\t\t\t\t\t\trange.e.r = Math.max(range.e.r, val[0].r);\n\t\t\t\t\t\trange.s.r = Math.min(range.s.r, val[0].r);\n\t\t\t\t\t\trange.e.c = Math.max(range.e.c, val[0].c);\n\t\t\t\t\t\trange.s.c = Math.min(range.s.c, val[0].c);\n\t\t\t\t\t}\n\t\t\t\t\tif(!cc.c) cc.c = [];\n\t\t\t\t\tcmnt = {a:val[1],t:noteobj.TxO.t};\n\t\t\t\t\tcc.c.push(cmnt);\n\t\t\t\t} break;\n\n\t\t\t\tdefault: switch(R.n) { /* nested */\n\t\t\t\tcase 'ClrtClient': break;\n\t\t\t\tcase 'XFExt': update_xfext(XFs[val.ixfe], val.ext); break;\n\n\t\t\t\tcase 'DefColWidth': defwidth = val; break;\n\t\t\t\tcase 'DefaultRowHeight': defheight = val[1]; break; // TODO: flags\n\n\t\t\t\tcase 'ColInfo': {\n\t\t\t\t\tif(!opts.cellStyles) break;\n\t\t\t\t\twhile(val.e >= val.s) {\n\t\t\t\t\t\tcolinfo[val.e--] = { width: val.w/256 };\n\t\t\t\t\t\tif(!seencol) { seencol = true; find_mdw_colw(val.w/256); }\n\t\t\t\t\t\tprocess_col(colinfo[val.e+1]);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 'Row': {\n\t\t\t\t\tvar rowobj = {};\n\t\t\t\t\tif(val.level != null) { rowinfo[val.r] = rowobj; rowobj.level = val.level; }\n\t\t\t\t\tif(val.hidden) { rowinfo[val.r] = rowobj; rowobj.hidden = true; }\n\t\t\t\t\tif(val.hpt) {\n\t\t\t\t\t\trowinfo[val.r] = rowobj;\n\t\t\t\t\t\trowobj.hpt = val.hpt; rowobj.hpx = pt2px(val.hpt);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\n\t\t\t\tcase 'LeftMargin':\n\t\t\t\tcase 'RightMargin':\n\t\t\t\tcase 'TopMargin':\n\t\t\t\tcase 'BottomMargin':\n\t\t\t\t\tif(!out['!margins']) default_margins(out['!margins'] = {});\n\t\t\t\t\tout['!margins'][Rn.slice(0,-6).toLowerCase()] = val;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Setup': // TODO\n\t\t\t\t\tif(!out['!margins']) default_margins(out['!margins'] = {});\n\t\t\t\t\tout['!margins'].header = val.header;\n\t\t\t\t\tout['!margins'].footer = val.footer;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Window2': // TODO\n\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\tif(val.RTL) Workbook.Views[0].RTL = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Header': break; // TODO\n\t\t\t\tcase 'Footer': break; // TODO\n\t\t\t\tcase 'HCenter': break; // TODO\n\t\t\t\tcase 'VCenter': break; // TODO\n\t\t\t\tcase 'Pls': break; // TODO\n\t\t\t\tcase 'GCW': break;\n\t\t\t\tcase 'LHRecord': break;\n\t\t\t\tcase 'DBCell': break; // TODO\n\t\t\t\tcase 'EntExU2': break; // TODO\n\t\t\t\tcase 'SxView': break; // TODO\n\t\t\t\tcase 'Sxvd': break; // TODO\n\t\t\t\tcase 'SXVI': break; // TODO\n\t\t\t\tcase 'SXVDEx': break; // TODO\n\t\t\t\tcase 'SxIvd': break; // TODO\n\t\t\t\tcase 'SXString': break; // TODO\n\t\t\t\tcase 'Sync': break;\n\t\t\t\tcase 'Addin': break;\n\t\t\t\tcase 'SXDI': break; // TODO\n\t\t\t\tcase 'SXLI': break; // TODO\n\t\t\t\tcase 'SXEx': break; // TODO\n\t\t\t\tcase 'QsiSXTag': break; // TODO\n\t\t\t\tcase 'Selection': break;\n\t\t\t\tcase 'Feat': break;\n\t\t\t\tcase 'FeatHdr': case 'FeatHdr11': break;\n\t\t\t\tcase 'Feature11': case 'Feature12': case 'List12': break;\n\t\t\t\tcase 'Country': country = val; break;\n\t\t\t\tcase 'RecalcId': break;\n\t\t\t\tcase 'DxGCol': break; // TODO: htmlify\n\t\t\t\tcase 'Fbi': case 'Fbi2': case 'GelFrame': break;\n\t\t\t\tcase 'Font': break; // TODO\n\t\t\t\tcase 'XFCRC': break; // TODO\n\t\t\t\tcase 'Style': break; // TODO\n\t\t\t\tcase 'StyleExt': break; // TODO\n\t\t\t\tcase 'Palette': palette = val; break;\n\t\t\t\tcase 'Theme': themes = val; break;\n\t\t\t\t/* Protection */\n\t\t\t\tcase 'ScenarioProtect': break;\n\t\t\t\tcase 'ObjProtect': break;\n\n\t\t\t\t/* Conditional Formatting */\n\t\t\t\tcase 'CondFmt12': break;\n\n\t\t\t\t/* Table */\n\t\t\t\tcase 'Table': break; // TODO\n\t\t\t\tcase 'TableStyles': break; // TODO\n\t\t\t\tcase 'TableStyle': break; // TODO\n\t\t\t\tcase 'TableStyleElement': break; // TODO\n\n\t\t\t\t/* PivotTable */\n\t\t\t\tcase 'SXStreamID': break; // TODO\n\t\t\t\tcase 'SXVS': break; // TODO\n\t\t\t\tcase 'DConRef': break; // TODO\n\t\t\t\tcase 'SXAddl': break; // TODO\n\t\t\t\tcase 'DConBin': break; // TODO\n\t\t\t\tcase 'DConName': break; // TODO\n\t\t\t\tcase 'SXPI': break; // TODO\n\t\t\t\tcase 'SxFormat': break; // TODO\n\t\t\t\tcase 'SxSelect': break; // TODO\n\t\t\t\tcase 'SxRule': break; // TODO\n\t\t\t\tcase 'SxFilt': break; // TODO\n\t\t\t\tcase 'SxItm': break; // TODO\n\t\t\t\tcase 'SxDXF': break; // TODO\n\n\t\t\t\t/* Scenario Manager */\n\t\t\t\tcase 'ScenMan': break;\n\n\t\t\t\t/* Data Consolidation */\n\t\t\t\tcase 'DCon': break;\n\n\t\t\t\t/* Watched Cell */\n\t\t\t\tcase 'CellWatch': break;\n\n\t\t\t\t/* Print Settings */\n\t\t\t\tcase 'PrintRowCol': break;\n\t\t\t\tcase 'PrintGrid': break;\n\t\t\t\tcase 'PrintSize': break;\n\n\t\t\t\tcase 'XCT': break;\n\t\t\t\tcase 'CRN': break;\n\n\t\t\t\tcase 'Scl': {\n\t\t\t\t\t//console.log(\"Zoom Level:\", val[0]/val[1],val);\n\t\t\t\t} break;\n\t\t\t\tcase 'SheetExt': {\n\t\t\t\t\t/* empty */\n\t\t\t\t} break;\n\t\t\t\tcase 'SheetExtOptional': {\n\t\t\t\t\t/* empty */\n\t\t\t\t} break;\n\n\t\t\t\t/* VBA */\n\t\t\t\tcase 'ObNoMacros': {\n\t\t\t\t\t/* empty */\n\t\t\t\t} break;\n\t\t\t\tcase 'ObProj': {\n\t\t\t\t\t/* empty */\n\t\t\t\t} break;\n\t\t\t\tcase 'CodeName': {\nif(!cur_sheet) Workbook.WBProps.CodeName = val || \"ThisWorkbook\";\n\t\t\t\t\telse wsprops.CodeName = val || wsprops.name;\n\t\t\t\t} break;\n\t\t\t\tcase 'GUIDTypeLib': {\n\t\t\t\t\t/* empty */\n\t\t\t\t} break;\n\n\t\t\t\tcase 'WOpt': break; // TODO: WTF?\n\t\t\t\tcase 'PhoneticInfo': break;\n\n\t\t\t\tcase 'OleObjectSize': break;\n\n\t\t\t\t/* Differential Formatting */\n\t\t\t\tcase 'DXF': case 'DXFN': case 'DXFN12': case 'DXFN12List': case 'DXFN12NoCB': break;\n\n\t\t\t\t/* Data Validation */\n\t\t\t\tcase 'Dv': case 'DVal': break;\n\n\t\t\t\t/* Data Series */\n\t\t\t\tcase 'BRAI': case 'Series': case 'SeriesText': break;\n\n\t\t\t\t/* Data Connection */\n\t\t\t\tcase 'DConn': break;\n\t\t\t\tcase 'DbOrParamQry': break;\n\t\t\t\tcase 'DBQueryExt': break;\n\n\t\t\t\tcase 'OleDbConn': break;\n\t\t\t\tcase 'ExtString': break;\n\n\t\t\t\t/* Formatting */\n\t\t\t\tcase 'IFmtRecord': break;\n\t\t\t\tcase 'CondFmt': case 'CF': case 'CF12': case 'CFEx': break;\n\n\t\t\t\t/* Explicitly Ignored */\n\t\t\t\tcase 'Excel9File': break;\n\t\t\t\tcase 'Units': break;\n\t\t\t\tcase 'InterfaceHdr': case 'Mms': case 'InterfaceEnd': case 'DSF': break;\n\t\t\t\tcase 'BuiltInFnGroupCount': /* 2.4.30 0x0E or 0x10 but excel 2011 generates 0x11? */ break;\n\t\t\t\t/* View Stuff */\n\t\t\t\tcase 'Window1': case 'HideObj': case 'GridSet': case 'Guts':\n\t\t\t\tcase 'UserBView': case 'UserSViewBegin': case 'UserSViewEnd': break;\n\t\t\t\tcase 'Pane': break;\n\t\t\t\tdefault: switch(R.n) { /* nested */\n\t\t\t\t/* Chart */\n\t\t\t\tcase 'Dat':\n\t\t\t\tcase 'Begin': case 'End':\n\t\t\t\tcase 'StartBlock': case 'EndBlock':\n\t\t\t\tcase 'Frame': case 'Area':\n\t\t\t\tcase 'Axis': case 'AxisLine': case 'Tick': break;\n\t\t\t\tcase 'AxesUsed':\n\t\t\t\tcase 'CrtLayout12': case 'CrtLayout12A': case 'CrtLink': case 'CrtLine': case 'CrtMlFrt': case 'CrtMlFrtContinue': break;\n\t\t\t\tcase 'LineFormat': case 'AreaFormat':\n\t\t\t\tcase 'Chart': case 'Chart3d': case 'Chart3DBarShape': case 'ChartFormat': case 'ChartFrtInfo': break;\n\t\t\t\tcase 'PlotArea': case 'PlotGrowth': break;\n\t\t\t\tcase 'SeriesList': case 'SerParent': case 'SerAuxTrend': break;\n\t\t\t\tcase 'DataFormat': case 'SerToCrt': case 'FontX': break;\n\t\t\t\tcase 'CatSerRange': case 'AxcExt': case 'SerFmt': break;\n\t\t\t\tcase 'ShtProps': break;\n\t\t\t\tcase 'DefaultText': case 'Text': case 'CatLab': break;\n\t\t\t\tcase 'DataLabExtContents': break;\n\t\t\t\tcase 'Legend': case 'LegendException': break;\n\t\t\t\tcase 'Pie': case 'Scatter': break;\n\t\t\t\tcase 'PieFormat': case 'MarkerFormat': break;\n\t\t\t\tcase 'StartObject': case 'EndObject': break;\n\t\t\t\tcase 'AlRuns': case 'ObjectLink': break;\n\t\t\t\tcase 'SIIndex': break;\n\t\t\t\tcase 'AttachedLabel': case 'YMult': break;\n\n\t\t\t\t/* Chart Group */\n\t\t\t\tcase 'Line': case 'Bar': break;\n\t\t\t\tcase 'Surf': break;\n\n\t\t\t\t/* Axis Group */\n\t\t\t\tcase 'AxisParent': break;\n\t\t\t\tcase 'Pos': break;\n\t\t\t\tcase 'ValueRange': break;\n\n\t\t\t\t/* Pivot Chart */\n\t\t\t\tcase 'SXViewEx9': break; // TODO\n\t\t\t\tcase 'SXViewLink': break;\n\t\t\t\tcase 'PivotChartBits': break;\n\t\t\t\tcase 'SBaseRef': break;\n\t\t\t\tcase 'TextPropsStream': break;\n\n\t\t\t\t/* Chart Misc */\n\t\t\t\tcase 'LnExt': break;\n\t\t\t\tcase 'MkrExt': break;\n\t\t\t\tcase 'CrtCoopt': break;\n\n\t\t\t\t/* Query Table */\n\t\t\t\tcase 'Qsi': case 'Qsif': case 'Qsir': case 'QsiSXTag': break;\n\t\t\t\tcase 'TxtQry': break;\n\n\t\t\t\t/* Filter */\n\t\t\t\tcase 'FilterMode': break;\n\t\t\t\tcase 'AutoFilter': case 'AutoFilterInfo': break;\n\t\t\t\tcase 'AutoFilter12': break;\n\t\t\t\tcase 'DropDownObjIds': break;\n\t\t\t\tcase 'Sort': break;\n\t\t\t\tcase 'SortData': break;\n\n\t\t\t\t/* Drawing */\n\t\t\t\tcase 'ShapePropsStream': break;\n\t\t\t\tcase 'MsoDrawing': case 'MsoDrawingGroup': case 'MsoDrawingSelection': break;\n\t\t\t\t/* Pub Stuff */\n\t\t\t\tcase 'WebPub': case 'AutoWebPub': break;\n\n\t\t\t\t/* Print Stuff */\n\t\t\t\tcase 'HeaderFooter': case 'HFPicture': case 'PLV':\n\t\t\t\tcase 'HorizontalPageBreaks': case 'VerticalPageBreaks': break;\n\t\t\t\t/* Behavioral */\n\t\t\t\tcase 'Backup': case 'CompressPictures': case 'Compat12': break;\n\n\t\t\t\t/* Should not Happen */\n\t\t\t\tcase 'Continue': case 'ContinueFrt12': break;\n\n\t\t\t\t/* Future Records */\n\t\t\t\tcase 'FrtFontList': case 'FrtWrapper': break;\n\n\t\t\t\tdefault: switch(R.n) { /* nested */\n\t\t\t\t/* BIFF5 records */\n\t\t\t\tcase 'TabIdConf': case 'Radar': case 'RadarArea': case 'DropBar': case 'Intl': case 'CoordList': case 'SerAuxErrBar': break;\n\n\t\t\t\t/* BIFF2-4 records */\n\t\t\t\tcase 'BIFF2FONTCLR': case 'BIFF2FMTCNT': case 'BIFF2FONTXTRA': break;\n\t\t\t\tcase 'BIFF2XF': case 'BIFF3XF': case 'BIFF4XF': break;\n\t\t\t\tcase 'BIFF4FMTCNT': case 'BIFF2ROW': case 'BIFF2WINDOW2': break;\n\n\t\t\t\t/* Miscellaneous */\n\t\t\t\tcase 'SCENARIO': case 'DConBin': case 'PicF': case 'DataLabExt':\n\t\t\t\tcase 'Lel': case 'BopPop': case 'BopPopCustom': case 'RealTimeData':\n\t\t\t\tcase 'Name': break;\n\t\t\t\tcase 'LHNGraph': case 'FnGroupName': case 'AddMenu': case 'LPr': break;\n\t\t\t\tcase 'ListObj': case 'ListField': break;\n\t\t\t\tcase 'RRSort': break;\n\t\t\t\tcase 'BigName': break;\n\t\t\t\tcase 'ToolbarHdr': case 'ToolbarEnd': break;\n\t\t\t\tcase 'DDEObjName': break;\n\t\t\t\tcase 'FRTArchId$': break;\n\t\t\t\tdefault: if(options.WTF) throw 'Unrecognized Record ' + R.n;\n\t\t\t}}}}\n\t\t} else blob.l += length;\n\t}\n\twb.SheetNames=keys(Directory).sort(function(a,b) { return Number(a) - Number(b); }).map(function(x){return Directory[x].name;});\n\tif(!options.bookSheets) wb.Sheets=Sheets;\n\tif(wb.Sheets) FilterDatabases.forEach(function(r,i) { wb.Sheets[wb.SheetNames[i]]['!autofilter'] = r; });\n\twb.Preamble=Preamble;\n\twb.Strings = sst;\n\twb.SSF = SSF.get_table();\n\tif(opts.enc) wb.Encryption = opts.enc;\n\tif(themes) wb.Themes = themes;\n\twb.Metadata = {};\n\tif(country !== undefined) wb.Metadata.Country = country;\n\tif(supbooks.names.length > 0) Workbook.Names = supbooks.names;\n\twb.Workbook = Workbook;\n\treturn wb;\n}\n\n/* TODO: split props*/\nvar PSCLSID = {\n\tSI: \"e0859ff2f94f6810ab9108002b27b3d9\",\n\tDSI: \"02d5cdd59c2e1b10939708002b2cf9ae\",\n\tUDI: \"05d5cdd59c2e1b10939708002b2cf9ae\"\n};\nfunction parse_xls_props(cfb, props, o) {\n\t/* [MS-OSHARED] 2.3.3.2.2 Document Summary Information Property Set */\n\tvar DSI = CFB.find(cfb, '!DocumentSummaryInformation');\n\tif(DSI && DSI.size > 0) try {\n\t\tvar DocSummary = parse_PropertySetStream(DSI, DocSummaryPIDDSI, PSCLSID.DSI);\n\t\tfor(var d in DocSummary) props[d] = DocSummary[d];\n\t} catch(e) {if(o.WTF) throw e;/* empty */}\n\n\t/* [MS-OSHARED] 2.3.3.2.1 Summary Information Property Set*/\n\tvar SI = CFB.find(cfb, '!SummaryInformation');\n\tif(SI && SI.size > 0) try {\n\t\tvar Summary = parse_PropertySetStream(SI, SummaryPIDSI, PSCLSID.SI);\n\t\tfor(var s in Summary) if(props[s] == null) props[s] = Summary[s];\n\t} catch(e) {if(o.WTF) throw e;/* empty */}\n\n\tif(props.HeadingPairs && props.TitlesOfParts) {\n\t\tload_props_pairs(props.HeadingPairs, props.TitlesOfParts, props, o);\n\t\tdelete props.HeadingPairs; delete props.TitlesOfParts;\n\t}\n}\nfunction write_xls_props(wb, cfb) {\n\tvar DSEntries = [], SEntries = [], CEntries = [];\n\tvar i = 0, Keys;\n\tif(wb.Props) {\n\t\tKeys = keys(wb.Props);\n\t\t// $FlowIgnore\n\t\tfor(i = 0; i < Keys.length; ++i) (Object.prototype.hasOwnProperty.call(DocSummaryRE, Keys[i]) ? DSEntries : Object.prototype.hasOwnProperty.call(SummaryRE, Keys[i]) ? SEntries : CEntries).push([Keys[i], wb.Props[Keys[i]]]);\n\t}\n\tif(wb.Custprops) {\n\t\tKeys = keys(wb.Custprops);\n\t\t// $FlowIgnore\n\t\tfor(i = 0; i < Keys.length; ++i) if(!Object.prototype.hasOwnProperty.call((wb.Props||{}), Keys[i])) (Object.prototype.hasOwnProperty.call(DocSummaryRE, Keys[i]) ? DSEntries : Object.prototype.hasOwnProperty.call(SummaryRE, Keys[i]) ? SEntries : CEntries).push([Keys[i], wb.Custprops[Keys[i]]]);\n\t}\n\tvar CEntries2 = [];\n\tfor(i = 0; i < CEntries.length; ++i) {\n\t\tif(XLSPSSkip.indexOf(CEntries[i][0]) > -1) continue;\n\t\tif(CEntries[i][1] == null) continue;\n\t\tCEntries2.push(CEntries[i]);\n\t}\n\tif(SEntries.length) CFB.utils.cfb_add(cfb, \"/\\u0005SummaryInformation\", write_PropertySetStream(SEntries, PSCLSID.SI, SummaryRE, SummaryPIDSI));\n\tif(DSEntries.length || CEntries2.length) CFB.utils.cfb_add(cfb, \"/\\u0005DocumentSummaryInformation\", write_PropertySetStream(DSEntries, PSCLSID.DSI, DocSummaryRE, DocSummaryPIDDSI, CEntries2.length ? CEntries2 : null, PSCLSID.UDI));\n}\n\nfunction parse_xlscfb(cfb, options) {\nif(!options) options = {};\nfix_read_opts(options);\nreset_cp();\nif(options.codepage) set_ansi(options.codepage);\nvar CompObj, WB;\nif(cfb.FullPaths) {\n\tif(CFB.find(cfb, '/encryption')) throw new Error(\"File is password-protected\");\n\tCompObj = CFB.find(cfb, '!CompObj');\n\tWB = CFB.find(cfb, '/Workbook') || CFB.find(cfb, '/Book');\n} else {\n\tswitch(options.type) {\n\t\tcase 'base64': cfb = s2a(Base64.decode(cfb)); break;\n\t\tcase 'binary': cfb = s2a(cfb); break;\n\t\tcase 'buffer': break;\n\t\tcase 'array': if(!Array.isArray(cfb)) cfb = Array.prototype.slice.call(cfb); break;\n\t}\n\tprep_blob(cfb, 0);\n\tWB = ({content: cfb});\n}\nvar WorkbookP;\n\nvar _data;\nif(CompObj) parse_compobj(CompObj);\nif(options.bookProps && !options.bookSheets) WorkbookP = ({});\nelse {\n\tvar T = has_buf ? 'buffer' : 'array';\n\tif(WB && WB.content) WorkbookP = parse_workbook(WB.content, options);\n\t/* Quattro Pro 7-8 */\n\telse if((_data=CFB.find(cfb, 'PerfectOffice_MAIN')) && _data.content) WorkbookP = WK_.to_workbook(_data.content, (options.type = T, options));\n\t/* Quattro Pro 9 */\n\telse if((_data=CFB.find(cfb, 'NativeContent_MAIN')) && _data.content) WorkbookP = WK_.to_workbook(_data.content, (options.type = T, options));\n\telse throw new Error(\"Cannot find Workbook stream\");\n\tif(options.bookVBA && cfb.FullPaths && CFB.find(cfb, '/_VBA_PROJECT_CUR/VBA/dir')) WorkbookP.vbaraw = make_vba_xls(cfb);\n}\n\nvar props = {};\nif(cfb.FullPaths) parse_xls_props(cfb, props, options);\n\nWorkbookP.Props = WorkbookP.Custprops = props; /* TODO: split up properties */\nif(options.bookFiles) WorkbookP.cfb = cfb;\n/*WorkbookP.CompObjP = CompObjP; // TODO: storage? */\nreturn WorkbookP;\n}\n\n\nfunction write_xlscfb(wb, opts) {\n\tvar o = opts || {};\n\tvar cfb = CFB.utils.cfb_new({root:\"R\"});\n\tvar wbpath = \"/Workbook\";\n\tswitch(o.bookType || \"xls\") {\n\t\tcase \"xls\": o.bookType = \"biff8\";\n\t\t/* falls through */\n\t\tcase \"xla\": if(!o.bookType) o.bookType = \"xla\";\n\t\t/* falls through */\n\t\tcase \"biff8\": wbpath = \"/Workbook\"; o.biff = 8; break;\n\t\tcase \"biff5\": wbpath = \"/Book\"; o.biff = 5; break;\n\t\tdefault: throw new Error(\"invalid type \" + o.bookType + \" for XLS CFB\");\n\t}\n\tCFB.utils.cfb_add(cfb, wbpath, write_biff_buf(wb, o));\n\tif(o.biff == 8 && (wb.Props || wb.Custprops)) write_xls_props(wb, cfb);\n\t// TODO: SI, DSI, CO\n\tif(o.biff == 8 && wb.vbaraw) fill_vba_xls(cfb, CFB.read(wb.vbaraw, {type: typeof wb.vbaraw == \"string\" ? \"binary\" : \"buffer\"}));\n\treturn cfb;\n}\n/* [MS-XLSB] 2.3 Record Enumeration */\nvar XLSBRecordEnum = {\n0x0000: { n:\"BrtRowHdr\", f:parse_BrtRowHdr },\n0x0001: { n:\"BrtCellBlank\", f:parse_BrtCellBlank },\n0x0002: { n:\"BrtCellRk\", f:parse_BrtCellRk },\n0x0003: { n:\"BrtCellError\", f:parse_BrtCellError },\n0x0004: { n:\"BrtCellBool\", f:parse_BrtCellBool },\n0x0005: { n:\"BrtCellReal\", f:parse_BrtCellReal },\n0x0006: { n:\"BrtCellSt\", f:parse_BrtCellSt },\n0x0007: { n:\"BrtCellIsst\", f:parse_BrtCellIsst },\n0x0008: { n:\"BrtFmlaString\", f:parse_BrtFmlaString },\n0x0009: { n:\"BrtFmlaNum\", f:parse_BrtFmlaNum },\n0x000A: { n:\"BrtFmlaBool\", f:parse_BrtFmlaBool },\n0x000B: { n:\"BrtFmlaError\", f:parse_BrtFmlaError },\n0x0010: { n:\"BrtFRTArchID$\", f:parse_BrtFRTArchID$ },\n0x0013: { n:\"BrtSSTItem\", f:parse_RichStr },\n0x0014: { n:\"BrtPCDIMissing\" },\n0x0015: { n:\"BrtPCDINumber\" },\n0x0016: { n:\"BrtPCDIBoolean\" },\n0x0017: { n:\"BrtPCDIError\" },\n0x0018: { n:\"BrtPCDIString\" },\n0x0019: { n:\"BrtPCDIDatetime\" },\n0x001A: { n:\"BrtPCDIIndex\" },\n0x001B: { n:\"BrtPCDIAMissing\" },\n0x001C: { n:\"BrtPCDIANumber\" },\n0x001D: { n:\"BrtPCDIABoolean\" },\n0x001E: { n:\"BrtPCDIAError\" },\n0x001F: { n:\"BrtPCDIAString\" },\n0x0020: { n:\"BrtPCDIADatetime\" },\n0x0021: { n:\"BrtPCRRecord\" },\n0x0022: { n:\"BrtPCRRecordDt\" },\n0x0023: { n:\"BrtFRTBegin\" },\n0x0024: { n:\"BrtFRTEnd\" },\n0x0025: { n:\"BrtACBegin\" },\n0x0026: { n:\"BrtACEnd\" },\n0x0027: { n:\"BrtName\", f:parse_BrtName },\n0x0028: { n:\"BrtIndexRowBlock\" },\n0x002A: { n:\"BrtIndexBlock\" },\n0x002B: { n:\"BrtFont\", f:parse_BrtFont },\n0x002C: { n:\"BrtFmt\", f:parse_BrtFmt },\n0x002D: { n:\"BrtFill\", f:parse_BrtFill },\n0x002E: { n:\"BrtBorder\", f:parse_BrtBorder },\n0x002F: { n:\"BrtXF\", f:parse_BrtXF },\n0x0030: { n:\"BrtStyle\" },\n0x0031: { n:\"BrtCellMeta\" },\n0x0032: { n:\"BrtValueMeta\" },\n0x0033: { n:\"BrtMdb\" },\n0x0034: { n:\"BrtBeginFmd\" },\n0x0035: { n:\"BrtEndFmd\" },\n0x0036: { n:\"BrtBeginMdx\" },\n0x0037: { n:\"BrtEndMdx\" },\n0x0038: { n:\"BrtBeginMdxTuple\" },\n0x0039: { n:\"BrtEndMdxTuple\" },\n0x003A: { n:\"BrtMdxMbrIstr\" },\n0x003B: { n:\"BrtStr\" },\n0x003C: { n:\"BrtColInfo\", f:parse_ColInfo },\n0x003E: { n:\"BrtCellRString\" },\n0x003F: { n:\"BrtCalcChainItem$\", f:parse_BrtCalcChainItem$ },\n0x0040: { n:\"BrtDVal\", f:parse_BrtDVal },\n0x0041: { n:\"BrtSxvcellNum\" },\n0x0042: { n:\"BrtSxvcellStr\" },\n0x0043: { n:\"BrtSxvcellBool\" },\n0x0044: { n:\"BrtSxvcellErr\" },\n0x0045: { n:\"BrtSxvcellDate\" },\n0x0046: { n:\"BrtSxvcellNil\" },\n0x0080: { n:\"BrtFileVersion\" },\n0x0081: { n:\"BrtBeginSheet\" },\n0x0082: { n:\"BrtEndSheet\" },\n0x0083: { n:\"BrtBeginBook\", f:parsenoop, p:0 },\n0x0084: { n:\"BrtEndBook\" },\n0x0085: { n:\"BrtBeginWsViews\" },\n0x0086: { n:\"BrtEndWsViews\" },\n0x0087: { n:\"BrtBeginBookViews\" },\n0x0088: { n:\"BrtEndBookViews\" },\n0x0089: { n:\"BrtBeginWsView\", f:parse_BrtBeginWsView },\n0x008A: { n:\"BrtEndWsView\" },\n0x008B: { n:\"BrtBeginCsViews\" },\n0x008C: { n:\"BrtEndCsViews\" },\n0x008D: { n:\"BrtBeginCsView\" },\n0x008E: { n:\"BrtEndCsView\" },\n0x008F: { n:\"BrtBeginBundleShs\" },\n0x0090: { n:\"BrtEndBundleShs\" },\n0x0091: { n:\"BrtBeginSheetData\" },\n0x0092: { n:\"BrtEndSheetData\" },\n0x0093: { n:\"BrtWsProp\", f:parse_BrtWsProp },\n0x0094: { n:\"BrtWsDim\", f:parse_BrtWsDim, p:16 },\n0x0097: { n:\"BrtPane\", f:parse_BrtPane },\n0x0098: { n:\"BrtSel\" },\n0x0099: { n:\"BrtWbProp\", f:parse_BrtWbProp },\n0x009A: { n:\"BrtWbFactoid\" },\n0x009B: { n:\"BrtFileRecover\" },\n0x009C: { n:\"BrtBundleSh\", f:parse_BrtBundleSh },\n0x009D: { n:\"BrtCalcProp\" },\n0x009E: { n:\"BrtBookView\" },\n0x009F: { n:\"BrtBeginSst\", f:parse_BrtBeginSst },\n0x00A0: { n:\"BrtEndSst\" },\n0x00A1: { n:\"BrtBeginAFilter\", f:parse_UncheckedRfX },\n0x00A2: { n:\"BrtEndAFilter\" },\n0x00A3: { n:\"BrtBeginFilterColumn\" },\n0x00A4: { n:\"BrtEndFilterColumn\" },\n0x00A5: { n:\"BrtBeginFilters\" },\n0x00A6: { n:\"BrtEndFilters\" },\n0x00A7: { n:\"BrtFilter\" },\n0x00A8: { n:\"BrtColorFilter\" },\n0x00A9: { n:\"BrtIconFilter\" },\n0x00AA: { n:\"BrtTop10Filter\" },\n0x00AB: { n:\"BrtDynamicFilter\" },\n0x00AC: { n:\"BrtBeginCustomFilters\" },\n0x00AD: { n:\"BrtEndCustomFilters\" },\n0x00AE: { n:\"BrtCustomFilter\" },\n0x00AF: { n:\"BrtAFilterDateGroupItem\" },\n0x00B0: { n:\"BrtMergeCell\", f:parse_BrtMergeCell },\n0x00B1: { n:\"BrtBeginMergeCells\" },\n0x00B2: { n:\"BrtEndMergeCells\" },\n0x00B3: { n:\"BrtBeginPivotCacheDef\" },\n0x00B4: { n:\"BrtEndPivotCacheDef\" },\n0x00B5: { n:\"BrtBeginPCDFields\" },\n0x00B6: { n:\"BrtEndPCDFields\" },\n0x00B7: { n:\"BrtBeginPCDField\" },\n0x00B8: { n:\"BrtEndPCDField\" },\n0x00B9: { n:\"BrtBeginPCDSource\" },\n0x00BA: { n:\"BrtEndPCDSource\" },\n0x00BB: { n:\"BrtBeginPCDSRange\" },\n0x00BC: { n:\"BrtEndPCDSRange\" },\n0x00BD: { n:\"BrtBeginPCDFAtbl\" },\n0x00BE: { n:\"BrtEndPCDFAtbl\" },\n0x00BF: { n:\"BrtBeginPCDIRun\" },\n0x00C0: { n:\"BrtEndPCDIRun\" },\n0x00C1: { n:\"BrtBeginPivotCacheRecords\" },\n0x00C2: { n:\"BrtEndPivotCacheRecords\" },\n0x00C3: { n:\"BrtBeginPCDHierarchies\" },\n0x00C4: { n:\"BrtEndPCDHierarchies\" },\n0x00C5: { n:\"BrtBeginPCDHierarchy\" },\n0x00C6: { n:\"BrtEndPCDHierarchy\" },\n0x00C7: { n:\"BrtBeginPCDHFieldsUsage\" },\n0x00C8: { n:\"BrtEndPCDHFieldsUsage\" },\n0x00C9: { n:\"BrtBeginExtConnection\" },\n0x00CA: { n:\"BrtEndExtConnection\" },\n0x00CB: { n:\"BrtBeginECDbProps\" },\n0x00CC: { n:\"BrtEndECDbProps\" },\n0x00CD: { n:\"BrtBeginECOlapProps\" },\n0x00CE: { n:\"BrtEndECOlapProps\" },\n0x00CF: { n:\"BrtBeginPCDSConsol\" },\n0x00D0: { n:\"BrtEndPCDSConsol\" },\n0x00D1: { n:\"BrtBeginPCDSCPages\" },\n0x00D2: { n:\"BrtEndPCDSCPages\" },\n0x00D3: { n:\"BrtBeginPCDSCPage\" },\n0x00D4: { n:\"BrtEndPCDSCPage\" },\n0x00D5: { n:\"BrtBeginPCDSCPItem\" },\n0x00D6: { n:\"BrtEndPCDSCPItem\" },\n0x00D7: { n:\"BrtBeginPCDSCSets\" },\n0x00D8: { n:\"BrtEndPCDSCSets\" },\n0x00D9: { n:\"BrtBeginPCDSCSet\" },\n0x00DA: { n:\"BrtEndPCDSCSet\" },\n0x00DB: { n:\"BrtBeginPCDFGroup\" },\n0x00DC: { n:\"BrtEndPCDFGroup\" },\n0x00DD: { n:\"BrtBeginPCDFGItems\" },\n0x00DE: { n:\"BrtEndPCDFGItems\" },\n0x00DF: { n:\"BrtBeginPCDFGRange\" },\n0x00E0: { n:\"BrtEndPCDFGRange\" },\n0x00E1: { n:\"BrtBeginPCDFGDiscrete\" },\n0x00E2: { n:\"BrtEndPCDFGDiscrete\" },\n0x00E3: { n:\"BrtBeginPCDSDTupleCache\" },\n0x00E4: { n:\"BrtEndPCDSDTupleCache\" },\n0x00E5: { n:\"BrtBeginPCDSDTCEntries\" },\n0x00E6: { n:\"BrtEndPCDSDTCEntries\" },\n0x00E7: { n:\"BrtBeginPCDSDTCEMembers\" },\n0x00E8: { n:\"BrtEndPCDSDTCEMembers\" },\n0x00E9: { n:\"BrtBeginPCDSDTCEMember\" },\n0x00EA: { n:\"BrtEndPCDSDTCEMember\" },\n0x00EB: { n:\"BrtBeginPCDSDTCQueries\" },\n0x00EC: { n:\"BrtEndPCDSDTCQueries\" },\n0x00ED: { n:\"BrtBeginPCDSDTCQuery\" },\n0x00EE: { n:\"BrtEndPCDSDTCQuery\" },\n0x00EF: { n:\"BrtBeginPCDSDTCSets\" },\n0x00F0: { n:\"BrtEndPCDSDTCSets\" },\n0x00F1: { n:\"BrtBeginPCDSDTCSet\" },\n0x00F2: { n:\"BrtEndPCDSDTCSet\" },\n0x00F3: { n:\"BrtBeginPCDCalcItems\" },\n0x00F4: { n:\"BrtEndPCDCalcItems\" },\n0x00F5: { n:\"BrtBeginPCDCalcItem\" },\n0x00F6: { n:\"BrtEndPCDCalcItem\" },\n0x00F7: { n:\"BrtBeginPRule\" },\n0x00F8: { n:\"BrtEndPRule\" },\n0x00F9: { n:\"BrtBeginPRFilters\" },\n0x00FA: { n:\"BrtEndPRFilters\" },\n0x00FB: { n:\"BrtBeginPRFilter\" },\n0x00FC: { n:\"BrtEndPRFilter\" },\n0x00FD: { n:\"BrtBeginPNames\" },\n0x00FE: { n:\"BrtEndPNames\" },\n0x00FF: { n:\"BrtBeginPName\" },\n0x0100: { n:\"BrtEndPName\" },\n0x0101: { n:\"BrtBeginPNPairs\" },\n0x0102: { n:\"BrtEndPNPairs\" },\n0x0103: { n:\"BrtBeginPNPair\" },\n0x0104: { n:\"BrtEndPNPair\" },\n0x0105: { n:\"BrtBeginECWebProps\" },\n0x0106: { n:\"BrtEndECWebProps\" },\n0x0107: { n:\"BrtBeginEcWpTables\" },\n0x0108: { n:\"BrtEndECWPTables\" },\n0x0109: { n:\"BrtBeginECParams\" },\n0x010A: { n:\"BrtEndECParams\" },\n0x010B: { n:\"BrtBeginECParam\" },\n0x010C: { n:\"BrtEndECParam\" },\n0x010D: { n:\"BrtBeginPCDKPIs\" },\n0x010E: { n:\"BrtEndPCDKPIs\" },\n0x010F: { n:\"BrtBeginPCDKPI\" },\n0x0110: { n:\"BrtEndPCDKPI\" },\n0x0111: { n:\"BrtBeginDims\" },\n0x0112: { n:\"BrtEndDims\" },\n0x0113: { n:\"BrtBeginDim\" },\n0x0114: { n:\"BrtEndDim\" },\n0x0115: { n:\"BrtIndexPartEnd\" },\n0x0116: { n:\"BrtBeginStyleSheet\" },\n0x0117: { n:\"BrtEndStyleSheet\" },\n0x0118: { n:\"BrtBeginSXView\" },\n0x0119: { n:\"BrtEndSXVI\" },\n0x011A: { n:\"BrtBeginSXVI\" },\n0x011B: { n:\"BrtBeginSXVIs\" },\n0x011C: { n:\"BrtEndSXVIs\" },\n0x011D: { n:\"BrtBeginSXVD\" },\n0x011E: { n:\"BrtEndSXVD\" },\n0x011F: { n:\"BrtBeginSXVDs\" },\n0x0120: { n:\"BrtEndSXVDs\" },\n0x0121: { n:\"BrtBeginSXPI\" },\n0x0122: { n:\"BrtEndSXPI\" },\n0x0123: { n:\"BrtBeginSXPIs\" },\n0x0124: { n:\"BrtEndSXPIs\" },\n0x0125: { n:\"BrtBeginSXDI\" },\n0x0126: { n:\"BrtEndSXDI\" },\n0x0127: { n:\"BrtBeginSXDIs\" },\n0x0128: { n:\"BrtEndSXDIs\" },\n0x0129: { n:\"BrtBeginSXLI\" },\n0x012A: { n:\"BrtEndSXLI\" },\n0x012B: { n:\"BrtBeginSXLIRws\" },\n0x012C: { n:\"BrtEndSXLIRws\" },\n0x012D: { n:\"BrtBeginSXLICols\" },\n0x012E: { n:\"BrtEndSXLICols\" },\n0x012F: { n:\"BrtBeginSXFormat\" },\n0x0130: { n:\"BrtEndSXFormat\" },\n0x0131: { n:\"BrtBeginSXFormats\" },\n0x0132: { n:\"BrtEndSxFormats\" },\n0x0133: { n:\"BrtBeginSxSelect\" },\n0x0134: { n:\"BrtEndSxSelect\" },\n0x0135: { n:\"BrtBeginISXVDRws\" },\n0x0136: { n:\"BrtEndISXVDRws\" },\n0x0137: { n:\"BrtBeginISXVDCols\" },\n0x0138: { n:\"BrtEndISXVDCols\" },\n0x0139: { n:\"BrtEndSXLocation\" },\n0x013A: { n:\"BrtBeginSXLocation\" },\n0x013B: { n:\"BrtEndSXView\" },\n0x013C: { n:\"BrtBeginSXTHs\" },\n0x013D: { n:\"BrtEndSXTHs\" },\n0x013E: { n:\"BrtBeginSXTH\" },\n0x013F: { n:\"BrtEndSXTH\" },\n0x0140: { n:\"BrtBeginISXTHRws\" },\n0x0141: { n:\"BrtEndISXTHRws\" },\n0x0142: { n:\"BrtBeginISXTHCols\" },\n0x0143: { n:\"BrtEndISXTHCols\" },\n0x0144: { n:\"BrtBeginSXTDMPS\" },\n0x0145: { n:\"BrtEndSXTDMPs\" },\n0x0146: { n:\"BrtBeginSXTDMP\" },\n0x0147: { n:\"BrtEndSXTDMP\" },\n0x0148: { n:\"BrtBeginSXTHItems\" },\n0x0149: { n:\"BrtEndSXTHItems\" },\n0x014A: { n:\"BrtBeginSXTHItem\" },\n0x014B: { n:\"BrtEndSXTHItem\" },\n0x014C: { n:\"BrtBeginMetadata\" },\n0x014D: { n:\"BrtEndMetadata\" },\n0x014E: { n:\"BrtBeginEsmdtinfo\" },\n0x014F: { n:\"BrtMdtinfo\" },\n0x0150: { n:\"BrtEndEsmdtinfo\" },\n0x0151: { n:\"BrtBeginEsmdb\" },\n0x0152: { n:\"BrtEndEsmdb\" },\n0x0153: { n:\"BrtBeginEsfmd\" },\n0x0154: { n:\"BrtEndEsfmd\" },\n0x0155: { n:\"BrtBeginSingleCells\" },\n0x0156: { n:\"BrtEndSingleCells\" },\n0x0157: { n:\"BrtBeginList\" },\n0x0158: { n:\"BrtEndList\" },\n0x0159: { n:\"BrtBeginListCols\" },\n0x015A: { n:\"BrtEndListCols\" },\n0x015B: { n:\"BrtBeginListCol\" },\n0x015C: { n:\"BrtEndListCol\" },\n0x015D: { n:\"BrtBeginListXmlCPr\" },\n0x015E: { n:\"BrtEndListXmlCPr\" },\n0x015F: { n:\"BrtListCCFmla\" },\n0x0160: { n:\"BrtListTrFmla\" },\n0x0161: { n:\"BrtBeginExternals\" },\n0x0162: { n:\"BrtEndExternals\" },\n0x0163: { n:\"BrtSupBookSrc\", f:parse_RelID},\n0x0165: { n:\"BrtSupSelf\" },\n0x0166: { n:\"BrtSupSame\" },\n0x0167: { n:\"BrtSupTabs\" },\n0x0168: { n:\"BrtBeginSupBook\" },\n0x0169: { n:\"BrtPlaceholderName\" },\n0x016A: { n:\"BrtExternSheet\", f:parse_ExternSheet },\n0x016B: { n:\"BrtExternTableStart\" },\n0x016C: { n:\"BrtExternTableEnd\" },\n0x016E: { n:\"BrtExternRowHdr\" },\n0x016F: { n:\"BrtExternCellBlank\" },\n0x0170: { n:\"BrtExternCellReal\" },\n0x0171: { n:\"BrtExternCellBool\" },\n0x0172: { n:\"BrtExternCellError\" },\n0x0173: { n:\"BrtExternCellString\" },\n0x0174: { n:\"BrtBeginEsmdx\" },\n0x0175: { n:\"BrtEndEsmdx\" },\n0x0176: { n:\"BrtBeginMdxSet\" },\n0x0177: { n:\"BrtEndMdxSet\" },\n0x0178: { n:\"BrtBeginMdxMbrProp\" },\n0x0179: { n:\"BrtEndMdxMbrProp\" },\n0x017A: { n:\"BrtBeginMdxKPI\" },\n0x017B: { n:\"BrtEndMdxKPI\" },\n0x017C: { n:\"BrtBeginEsstr\" },\n0x017D: { n:\"BrtEndEsstr\" },\n0x017E: { n:\"BrtBeginPRFItem\" },\n0x017F: { n:\"BrtEndPRFItem\" },\n0x0180: { n:\"BrtBeginPivotCacheIDs\" },\n0x0181: { n:\"BrtEndPivotCacheIDs\" },\n0x0182: { n:\"BrtBeginPivotCacheID\" },\n0x0183: { n:\"BrtEndPivotCacheID\" },\n0x0184: { n:\"BrtBeginISXVIs\" },\n0x0185: { n:\"BrtEndISXVIs\" },\n0x0186: { n:\"BrtBeginColInfos\" },\n0x0187: { n:\"BrtEndColInfos\" },\n0x0188: { n:\"BrtBeginRwBrk\" },\n0x0189: { n:\"BrtEndRwBrk\" },\n0x018A: { n:\"BrtBeginColBrk\" },\n0x018B: { n:\"BrtEndColBrk\" },\n0x018C: { n:\"BrtBrk\" },\n0x018D: { n:\"BrtUserBookView\" },\n0x018E: { n:\"BrtInfo\" },\n0x018F: { n:\"BrtCUsr\" },\n0x0190: { n:\"BrtUsr\" },\n0x0191: { n:\"BrtBeginUsers\" },\n0x0193: { n:\"BrtEOF\" },\n0x0194: { n:\"BrtUCR\" },\n0x0195: { n:\"BrtRRInsDel\" },\n0x0196: { n:\"BrtRREndInsDel\" },\n0x0197: { n:\"BrtRRMove\" },\n0x0198: { n:\"BrtRREndMove\" },\n0x0199: { n:\"BrtRRChgCell\" },\n0x019A: { n:\"BrtRREndChgCell\" },\n0x019B: { n:\"BrtRRHeader\" },\n0x019C: { n:\"BrtRRUserView\" },\n0x019D: { n:\"BrtRRRenSheet\" },\n0x019E: { n:\"BrtRRInsertSh\" },\n0x019F: { n:\"BrtRRDefName\" },\n0x01A0: { n:\"BrtRRNote\" },\n0x01A1: { n:\"BrtRRConflict\" },\n0x01A2: { n:\"BrtRRTQSIF\" },\n0x01A3: { n:\"BrtRRFormat\" },\n0x01A4: { n:\"BrtRREndFormat\" },\n0x01A5: { n:\"BrtRRAutoFmt\" },\n0x01A6: { n:\"BrtBeginUserShViews\" },\n0x01A7: { n:\"BrtBeginUserShView\" },\n0x01A8: { n:\"BrtEndUserShView\" },\n0x01A9: { n:\"BrtEndUserShViews\" },\n0x01AA: { n:\"BrtArrFmla\", f:parse_BrtArrFmla },\n0x01AB: { n:\"BrtShrFmla\", f:parse_BrtShrFmla },\n0x01AC: { n:\"BrtTable\" },\n0x01AD: { n:\"BrtBeginExtConnections\" },\n0x01AE: { n:\"BrtEndExtConnections\" },\n0x01AF: { n:\"BrtBeginPCDCalcMems\" },\n0x01B0: { n:\"BrtEndPCDCalcMems\" },\n0x01B1: { n:\"BrtBeginPCDCalcMem\" },\n0x01B2: { n:\"BrtEndPCDCalcMem\" },\n0x01B3: { n:\"BrtBeginPCDHGLevels\" },\n0x01B4: { n:\"BrtEndPCDHGLevels\" },\n0x01B5: { n:\"BrtBeginPCDHGLevel\" },\n0x01B6: { n:\"BrtEndPCDHGLevel\" },\n0x01B7: { n:\"BrtBeginPCDHGLGroups\" },\n0x01B8: { n:\"BrtEndPCDHGLGroups\" },\n0x01B9: { n:\"BrtBeginPCDHGLGroup\" },\n0x01BA: { n:\"BrtEndPCDHGLGroup\" },\n0x01BB: { n:\"BrtBeginPCDHGLGMembers\" },\n0x01BC: { n:\"BrtEndPCDHGLGMembers\" },\n0x01BD: { n:\"BrtBeginPCDHGLGMember\" },\n0x01BE: { n:\"BrtEndPCDHGLGMember\" },\n0x01BF: { n:\"BrtBeginQSI\" },\n0x01C0: { n:\"BrtEndQSI\" },\n0x01C1: { n:\"BrtBeginQSIR\" },\n0x01C2: { n:\"BrtEndQSIR\" },\n0x01C3: { n:\"BrtBeginDeletedNames\" },\n0x01C4: { n:\"BrtEndDeletedNames\" },\n0x01C5: { n:\"BrtBeginDeletedName\" },\n0x01C6: { n:\"BrtEndDeletedName\" },\n0x01C7: { n:\"BrtBeginQSIFs\" },\n0x01C8: { n:\"BrtEndQSIFs\" },\n0x01C9: { n:\"BrtBeginQSIF\" },\n0x01CA: { n:\"BrtEndQSIF\" },\n0x01CB: { n:\"BrtBeginAutoSortScope\" },\n0x01CC: { n:\"BrtEndAutoSortScope\" },\n0x01CD: { n:\"BrtBeginConditionalFormatting\" },\n0x01CE: { n:\"BrtEndConditionalFormatting\" },\n0x01CF: { n:\"BrtBeginCFRule\" },\n0x01D0: { n:\"BrtEndCFRule\" },\n0x01D1: { n:\"BrtBeginIconSet\" },\n0x01D2: { n:\"BrtEndIconSet\" },\n0x01D3: { n:\"BrtBeginDatabar\" },\n0x01D4: { n:\"BrtEndDatabar\" },\n0x01D5: { n:\"BrtBeginColorScale\" },\n0x01D6: { n:\"BrtEndColorScale\" },\n0x01D7: { n:\"BrtCFVO\" },\n0x01D8: { n:\"BrtExternValueMeta\" },\n0x01D9: { n:\"BrtBeginColorPalette\" },\n0x01DA: { n:\"BrtEndColorPalette\" },\n0x01DB: { n:\"BrtIndexedColor\" },\n0x01DC: { n:\"BrtMargins\", f:parse_BrtMargins },\n0x01DD: { n:\"BrtPrintOptions\" },\n0x01DE: { n:\"BrtPageSetup\" },\n0x01DF: { n:\"BrtBeginHeaderFooter\" },\n0x01E0: { n:\"BrtEndHeaderFooter\" },\n0x01E1: { n:\"BrtBeginSXCrtFormat\" },\n0x01E2: { n:\"BrtEndSXCrtFormat\" },\n0x01E3: { n:\"BrtBeginSXCrtFormats\" },\n0x01E4: { n:\"BrtEndSXCrtFormats\" },\n0x01E5: { n:\"BrtWsFmtInfo\", f:parse_BrtWsFmtInfo },\n0x01E6: { n:\"BrtBeginMgs\" },\n0x01E7: { n:\"BrtEndMGs\" },\n0x01E8: { n:\"BrtBeginMGMaps\" },\n0x01E9: { n:\"BrtEndMGMaps\" },\n0x01EA: { n:\"BrtBeginMG\" },\n0x01EB: { n:\"BrtEndMG\" },\n0x01EC: { n:\"BrtBeginMap\" },\n0x01ED: { n:\"BrtEndMap\" },\n0x01EE: { n:\"BrtHLink\", f:parse_BrtHLink },\n0x01EF: { n:\"BrtBeginDCon\" },\n0x01F0: { n:\"BrtEndDCon\" },\n0x01F1: { n:\"BrtBeginDRefs\" },\n0x01F2: { n:\"BrtEndDRefs\" },\n0x01F3: { n:\"BrtDRef\" },\n0x01F4: { n:\"BrtBeginScenMan\" },\n0x01F5: { n:\"BrtEndScenMan\" },\n0x01F6: { n:\"BrtBeginSct\" },\n0x01F7: { n:\"BrtEndSct\" },\n0x01F8: { n:\"BrtSlc\" },\n0x01F9: { n:\"BrtBeginDXFs\" },\n0x01FA: { n:\"BrtEndDXFs\" },\n0x01FB: { n:\"BrtDXF\" },\n0x01FC: { n:\"BrtBeginTableStyles\" },\n0x01FD: { n:\"BrtEndTableStyles\" },\n0x01FE: { n:\"BrtBeginTableStyle\" },\n0x01FF: { n:\"BrtEndTableStyle\" },\n0x0200: { n:\"BrtTableStyleElement\" },\n0x0201: { n:\"BrtTableStyleClient\" },\n0x0202: { n:\"BrtBeginVolDeps\" },\n0x0203: { n:\"BrtEndVolDeps\" },\n0x0204: { n:\"BrtBeginVolType\" },\n0x0205: { n:\"BrtEndVolType\" },\n0x0206: { n:\"BrtBeginVolMain\" },\n0x0207: { n:\"BrtEndVolMain\" },\n0x0208: { n:\"BrtBeginVolTopic\" },\n0x0209: { n:\"BrtEndVolTopic\" },\n0x020A: { n:\"BrtVolSubtopic\" },\n0x020B: { n:\"BrtVolRef\" },\n0x020C: { n:\"BrtVolNum\" },\n0x020D: { n:\"BrtVolErr\" },\n0x020E: { n:\"BrtVolStr\" },\n0x020F: { n:\"BrtVolBool\" },\n0x0210: { n:\"BrtBeginCalcChain$\" },\n0x0211: { n:\"BrtEndCalcChain$\" },\n0x0212: { n:\"BrtBeginSortState\" },\n0x0213: { n:\"BrtEndSortState\" },\n0x0214: { n:\"BrtBeginSortCond\" },\n0x0215: { n:\"BrtEndSortCond\" },\n0x0216: { n:\"BrtBookProtection\" },\n0x0217: { n:\"BrtSheetProtection\" },\n0x0218: { n:\"BrtRangeProtection\" },\n0x0219: { n:\"BrtPhoneticInfo\" },\n0x021A: { n:\"BrtBeginECTxtWiz\" },\n0x021B: { n:\"BrtEndECTxtWiz\" },\n0x021C: { n:\"BrtBeginECTWFldInfoLst\" },\n0x021D: { n:\"BrtEndECTWFldInfoLst\" },\n0x021E: { n:\"BrtBeginECTwFldInfo\" },\n0x0224: { n:\"BrtFileSharing\" },\n0x0225: { n:\"BrtOleSize\" },\n0x0226: { n:\"BrtDrawing\", f:parse_RelID },\n0x0227: { n:\"BrtLegacyDrawing\" },\n0x0228: { n:\"BrtLegacyDrawingHF\" },\n0x0229: { n:\"BrtWebOpt\" },\n0x022A: { n:\"BrtBeginWebPubItems\" },\n0x022B: { n:\"BrtEndWebPubItems\" },\n0x022C: { n:\"BrtBeginWebPubItem\" },\n0x022D: { n:\"BrtEndWebPubItem\" },\n0x022E: { n:\"BrtBeginSXCondFmt\" },\n0x022F: { n:\"BrtEndSXCondFmt\" },\n0x0230: { n:\"BrtBeginSXCondFmts\" },\n0x0231: { n:\"BrtEndSXCondFmts\" },\n0x0232: { n:\"BrtBkHim\" },\n0x0234: { n:\"BrtColor\" },\n0x0235: { n:\"BrtBeginIndexedColors\" },\n0x0236: { n:\"BrtEndIndexedColors\" },\n0x0239: { n:\"BrtBeginMRUColors\" },\n0x023A: { n:\"BrtEndMRUColors\" },\n0x023C: { n:\"BrtMRUColor\" },\n0x023D: { n:\"BrtBeginDVals\" },\n0x023E: { n:\"BrtEndDVals\" },\n0x0241: { n:\"BrtSupNameStart\" },\n0x0242: { n:\"BrtSupNameValueStart\" },\n0x0243: { n:\"BrtSupNameValueEnd\" },\n0x0244: { n:\"BrtSupNameNum\" },\n0x0245: { n:\"BrtSupNameErr\" },\n0x0246: { n:\"BrtSupNameSt\" },\n0x0247: { n:\"BrtSupNameNil\" },\n0x0248: { n:\"BrtSupNameBool\" },\n0x0249: { n:\"BrtSupNameFmla\" },\n0x024A: { n:\"BrtSupNameBits\" },\n0x024B: { n:\"BrtSupNameEnd\" },\n0x024C: { n:\"BrtEndSupBook\" },\n0x024D: { n:\"BrtCellSmartTagProperty\" },\n0x024E: { n:\"BrtBeginCellSmartTag\" },\n0x024F: { n:\"BrtEndCellSmartTag\" },\n0x0250: { n:\"BrtBeginCellSmartTags\" },\n0x0251: { n:\"BrtEndCellSmartTags\" },\n0x0252: { n:\"BrtBeginSmartTags\" },\n0x0253: { n:\"BrtEndSmartTags\" },\n0x0254: { n:\"BrtSmartTagType\" },\n0x0255: { n:\"BrtBeginSmartTagTypes\" },\n0x0256: { n:\"BrtEndSmartTagTypes\" },\n0x0257: { n:\"BrtBeginSXFilters\" },\n0x0258: { n:\"BrtEndSXFilters\" },\n0x0259: { n:\"BrtBeginSXFILTER\" },\n0x025A: { n:\"BrtEndSXFilter\" },\n0x025B: { n:\"BrtBeginFills\" },\n0x025C: { n:\"BrtEndFills\" },\n0x025D: { n:\"BrtBeginCellWatches\" },\n0x025E: { n:\"BrtEndCellWatches\" },\n0x025F: { n:\"BrtCellWatch\" },\n0x0260: { n:\"BrtBeginCRErrs\" },\n0x0261: { n:\"BrtEndCRErrs\" },\n0x0262: { n:\"BrtCrashRecErr\" },\n0x0263: { n:\"BrtBeginFonts\" },\n0x0264: { n:\"BrtEndFonts\" },\n0x0265: { n:\"BrtBeginBorders\" },\n0x0266: { n:\"BrtEndBorders\" },\n0x0267: { n:\"BrtBeginFmts\" },\n0x0268: { n:\"BrtEndFmts\" },\n0x0269: { n:\"BrtBeginCellXFs\" },\n0x026A: { n:\"BrtEndCellXFs\" },\n0x026B: { n:\"BrtBeginStyles\" },\n0x026C: { n:\"BrtEndStyles\" },\n0x0271: { n:\"BrtBigName\" },\n0x0272: { n:\"BrtBeginCellStyleXFs\" },\n0x0273: { n:\"BrtEndCellStyleXFs\" },\n0x0274: { n:\"BrtBeginComments\" },\n0x0275: { n:\"BrtEndComments\" },\n0x0276: { n:\"BrtBeginCommentAuthors\" },\n0x0277: { n:\"BrtEndCommentAuthors\" },\n0x0278: { n:\"BrtCommentAuthor\", f:parse_BrtCommentAuthor },\n0x0279: { n:\"BrtBeginCommentList\" },\n0x027A: { n:\"BrtEndCommentList\" },\n0x027B: { n:\"BrtBeginComment\", f:parse_BrtBeginComment},\n0x027C: { n:\"BrtEndComment\" },\n0x027D: { n:\"BrtCommentText\", f:parse_BrtCommentText },\n0x027E: { n:\"BrtBeginOleObjects\" },\n0x027F: { n:\"BrtOleObject\" },\n0x0280: { n:\"BrtEndOleObjects\" },\n0x0281: { n:\"BrtBeginSxrules\" },\n0x0282: { n:\"BrtEndSxRules\" },\n0x0283: { n:\"BrtBeginActiveXControls\" },\n0x0284: { n:\"BrtActiveX\" },\n0x0285: { n:\"BrtEndActiveXControls\" },\n0x0286: { n:\"BrtBeginPCDSDTCEMembersSortBy\" },\n0x0288: { n:\"BrtBeginCellIgnoreECs\" },\n0x0289: { n:\"BrtCellIgnoreEC\" },\n0x028A: { n:\"BrtEndCellIgnoreECs\" },\n0x028B: { n:\"BrtCsProp\", f:parse_BrtCsProp },\n0x028C: { n:\"BrtCsPageSetup\" },\n0x028D: { n:\"BrtBeginUserCsViews\" },\n0x028E: { n:\"BrtEndUserCsViews\" },\n0x028F: { n:\"BrtBeginUserCsView\" },\n0x0290: { n:\"BrtEndUserCsView\" },\n0x0291: { n:\"BrtBeginPcdSFCIEntries\" },\n0x0292: { n:\"BrtEndPCDSFCIEntries\" },\n0x0293: { n:\"BrtPCDSFCIEntry\" },\n0x0294: { n:\"BrtBeginListParts\" },\n0x0295: { n:\"BrtListPart\" },\n0x0296: { n:\"BrtEndListParts\" },\n0x0297: { n:\"BrtSheetCalcProp\" },\n0x0298: { n:\"BrtBeginFnGroup\" },\n0x0299: { n:\"BrtFnGroup\" },\n0x029A: { n:\"BrtEndFnGroup\" },\n0x029B: { n:\"BrtSupAddin\" },\n0x029C: { n:\"BrtSXTDMPOrder\" },\n0x029D: { n:\"BrtCsProtection\" },\n0x029F: { n:\"BrtBeginWsSortMap\" },\n0x02A0: { n:\"BrtEndWsSortMap\" },\n0x02A1: { n:\"BrtBeginRRSort\" },\n0x02A2: { n:\"BrtEndRRSort\" },\n0x02A3: { n:\"BrtRRSortItem\" },\n0x02A4: { n:\"BrtFileSharingIso\" },\n0x02A5: { n:\"BrtBookProtectionIso\" },\n0x02A6: { n:\"BrtSheetProtectionIso\" },\n0x02A7: { n:\"BrtCsProtectionIso\" },\n0x02A8: { n:\"BrtRangeProtectionIso\" },\n0x02A9: { n:\"BrtDValList\" },\n0x0400: { n:\"BrtRwDescent\" },\n0x0401: { n:\"BrtKnownFonts\" },\n0x0402: { n:\"BrtBeginSXTupleSet\" },\n0x0403: { n:\"BrtEndSXTupleSet\" },\n0x0404: { n:\"BrtBeginSXTupleSetHeader\" },\n0x0405: { n:\"BrtEndSXTupleSetHeader\" },\n0x0406: { n:\"BrtSXTupleSetHeaderItem\" },\n0x0407: { n:\"BrtBeginSXTupleSetData\" },\n0x0408: { n:\"BrtEndSXTupleSetData\" },\n0x0409: { n:\"BrtBeginSXTupleSetRow\" },\n0x040A: { n:\"BrtEndSXTupleSetRow\" },\n0x040B: { n:\"BrtSXTupleSetRowItem\" },\n0x040C: { n:\"BrtNameExt\" },\n0x040D: { n:\"BrtPCDH14\" },\n0x040E: { n:\"BrtBeginPCDCalcMem14\" },\n0x040F: { n:\"BrtEndPCDCalcMem14\" },\n0x0410: { n:\"BrtSXTH14\" },\n0x0411: { n:\"BrtBeginSparklineGroup\" },\n0x0412: { n:\"BrtEndSparklineGroup\" },\n0x0413: { n:\"BrtSparkline\" },\n0x0414: { n:\"BrtSXDI14\" },\n0x0415: { n:\"BrtWsFmtInfoEx14\" },\n0x0416: { n:\"BrtBeginConditionalFormatting14\" },\n0x0417: { n:\"BrtEndConditionalFormatting14\" },\n0x0418: { n:\"BrtBeginCFRule14\" },\n0x0419: { n:\"BrtEndCFRule14\" },\n0x041A: { n:\"BrtCFVO14\" },\n0x041B: { n:\"BrtBeginDatabar14\" },\n0x041C: { n:\"BrtBeginIconSet14\" },\n0x041D: { n:\"BrtDVal14\", f: parse_BrtDVal14 },\n0x041E: { n:\"BrtBeginDVals14\" },\n0x041F: { n:\"BrtColor14\" },\n0x0420: { n:\"BrtBeginSparklines\" },\n0x0421: { n:\"BrtEndSparklines\" },\n0x0422: { n:\"BrtBeginSparklineGroups\" },\n0x0423: { n:\"BrtEndSparklineGroups\" },\n0x0425: { n:\"BrtSXVD14\" },\n0x0426: { n:\"BrtBeginSXView14\" },\n0x0427: { n:\"BrtEndSXView14\" },\n0x0428: { n:\"BrtBeginSXView16\" },\n0x0429: { n:\"BrtEndSXView16\" },\n0x042A: { n:\"BrtBeginPCD14\" },\n0x042B: { n:\"BrtEndPCD14\" },\n0x042C: { n:\"BrtBeginExtConn14\" },\n0x042D: { n:\"BrtEndExtConn14\" },\n0x042E: { n:\"BrtBeginSlicerCacheIDs\" },\n0x042F: { n:\"BrtEndSlicerCacheIDs\" },\n0x0430: { n:\"BrtBeginSlicerCacheID\" },\n0x0431: { n:\"BrtEndSlicerCacheID\" },\n0x0433: { n:\"BrtBeginSlicerCache\" },\n0x0434: { n:\"BrtEndSlicerCache\" },\n0x0435: { n:\"BrtBeginSlicerCacheDef\" },\n0x0436: { n:\"BrtEndSlicerCacheDef\" },\n0x0437: { n:\"BrtBeginSlicersEx\" },\n0x0438: { n:\"BrtEndSlicersEx\" },\n0x0439: { n:\"BrtBeginSlicerEx\" },\n0x043A: { n:\"BrtEndSlicerEx\" },\n0x043B: { n:\"BrtBeginSlicer\" },\n0x043C: { n:\"BrtEndSlicer\" },\n0x043D: { n:\"BrtSlicerCachePivotTables\" },\n0x043E: { n:\"BrtBeginSlicerCacheOlapImpl\" },\n0x043F: { n:\"BrtEndSlicerCacheOlapImpl\" },\n0x0440: { n:\"BrtBeginSlicerCacheLevelsData\" },\n0x0441: { n:\"BrtEndSlicerCacheLevelsData\" },\n0x0442: { n:\"BrtBeginSlicerCacheLevelData\" },\n0x0443: { n:\"BrtEndSlicerCacheLevelData\" },\n0x0444: { n:\"BrtBeginSlicerCacheSiRanges\" },\n0x0445: { n:\"BrtEndSlicerCacheSiRanges\" },\n0x0446: { n:\"BrtBeginSlicerCacheSiRange\" },\n0x0447: { n:\"BrtEndSlicerCacheSiRange\" },\n0x0448: { n:\"BrtSlicerCacheOlapItem\" },\n0x0449: { n:\"BrtBeginSlicerCacheSelections\" },\n0x044A: { n:\"BrtSlicerCacheSelection\" },\n0x044B: { n:\"BrtEndSlicerCacheSelections\" },\n0x044C: { n:\"BrtBeginSlicerCacheNative\" },\n0x044D: { n:\"BrtEndSlicerCacheNative\" },\n0x044E: { n:\"BrtSlicerCacheNativeItem\" },\n0x044F: { n:\"BrtRangeProtection14\" },\n0x0450: { n:\"BrtRangeProtectionIso14\" },\n0x0451: { n:\"BrtCellIgnoreEC14\" },\n0x0457: { n:\"BrtList14\" },\n0x0458: { n:\"BrtCFIcon\" },\n0x0459: { n:\"BrtBeginSlicerCachesPivotCacheIDs\" },\n0x045A: { n:\"BrtEndSlicerCachesPivotCacheIDs\" },\n0x045B: { n:\"BrtBeginSlicers\" },\n0x045C: { n:\"BrtEndSlicers\" },\n0x045D: { n:\"BrtWbProp14\" },\n0x045E: { n:\"BrtBeginSXEdit\" },\n0x045F: { n:\"BrtEndSXEdit\" },\n0x0460: { n:\"BrtBeginSXEdits\" },\n0x0461: { n:\"BrtEndSXEdits\" },\n0x0462: { n:\"BrtBeginSXChange\" },\n0x0463: { n:\"BrtEndSXChange\" },\n0x0464: { n:\"BrtBeginSXChanges\" },\n0x0465: { n:\"BrtEndSXChanges\" },\n0x0466: { n:\"BrtSXTupleItems\" },\n0x0468: { n:\"BrtBeginSlicerStyle\" },\n0x0469: { n:\"BrtEndSlicerStyle\" },\n0x046A: { n:\"BrtSlicerStyleElement\" },\n0x046B: { n:\"BrtBeginStyleSheetExt14\" },\n0x046C: { n:\"BrtEndStyleSheetExt14\" },\n0x046D: { n:\"BrtBeginSlicerCachesPivotCacheID\" },\n0x046E: { n:\"BrtEndSlicerCachesPivotCacheID\" },\n0x046F: { n:\"BrtBeginConditionalFormattings\" },\n0x0470: { n:\"BrtEndConditionalFormattings\" },\n0x0471: { n:\"BrtBeginPCDCalcMemExt\" },\n0x0472: { n:\"BrtEndPCDCalcMemExt\" },\n0x0473: { n:\"BrtBeginPCDCalcMemsExt\" },\n0x0474: { n:\"BrtEndPCDCalcMemsExt\" },\n0x0475: { n:\"BrtPCDField14\" },\n0x0476: { n:\"BrtBeginSlicerStyles\" },\n0x0477: { n:\"BrtEndSlicerStyles\" },\n0x0478: { n:\"BrtBeginSlicerStyleElements\" },\n0x0479: { n:\"BrtEndSlicerStyleElements\" },\n0x047A: { n:\"BrtCFRuleExt\" },\n0x047B: { n:\"BrtBeginSXCondFmt14\" },\n0x047C: { n:\"BrtEndSXCondFmt14\" },\n0x047D: { n:\"BrtBeginSXCondFmts14\" },\n0x047E: { n:\"BrtEndSXCondFmts14\" },\n0x0480: { n:\"BrtBeginSortCond14\" },\n0x0481: { n:\"BrtEndSortCond14\" },\n0x0482: { n:\"BrtEndDVals14\" },\n0x0483: { n:\"BrtEndIconSet14\" },\n0x0484: { n:\"BrtEndDatabar14\" },\n0x0485: { n:\"BrtBeginColorScale14\" },\n0x0486: { n:\"BrtEndColorScale14\" },\n0x0487: { n:\"BrtBeginSxrules14\" },\n0x0488: { n:\"BrtEndSxrules14\" },\n0x0489: { n:\"BrtBeginPRule14\" },\n0x048A: { n:\"BrtEndPRule14\" },\n0x048B: { n:\"BrtBeginPRFilters14\" },\n0x048C: { n:\"BrtEndPRFilters14\" },\n0x048D: { n:\"BrtBeginPRFilter14\" },\n0x048E: { n:\"BrtEndPRFilter14\" },\n0x048F: { n:\"BrtBeginPRFItem14\" },\n0x0490: { n:\"BrtEndPRFItem14\" },\n0x0491: { n:\"BrtBeginCellIgnoreECs14\" },\n0x0492: { n:\"BrtEndCellIgnoreECs14\" },\n0x0493: { n:\"BrtDxf14\" },\n0x0494: { n:\"BrtBeginDxF14s\" },\n0x0495: { n:\"BrtEndDxf14s\" },\n0x0499: { n:\"BrtFilter14\" },\n0x049A: { n:\"BrtBeginCustomFilters14\" },\n0x049C: { n:\"BrtCustomFilter14\" },\n0x049D: { n:\"BrtIconFilter14\" },\n0x049E: { n:\"BrtPivotCacheConnectionName\" },\n0x0800: { n:\"BrtBeginDecoupledPivotCacheIDs\" },\n0x0801: { n:\"BrtEndDecoupledPivotCacheIDs\" },\n0x0802: { n:\"BrtDecoupledPivotCacheID\" },\n0x0803: { n:\"BrtBeginPivotTableRefs\" },\n0x0804: { n:\"BrtEndPivotTableRefs\" },\n0x0805: { n:\"BrtPivotTableRef\" },\n0x0806: { n:\"BrtSlicerCacheBookPivotTables\" },\n0x0807: { n:\"BrtBeginSxvcells\" },\n0x0808: { n:\"BrtEndSxvcells\" },\n0x0809: { n:\"BrtBeginSxRow\" },\n0x080A: { n:\"BrtEndSxRow\" },\n0x080C: { n:\"BrtPcdCalcMem15\" },\n0x0813: { n:\"BrtQsi15\" },\n0x0814: { n:\"BrtBeginWebExtensions\" },\n0x0815: { n:\"BrtEndWebExtensions\" },\n0x0816: { n:\"BrtWebExtension\" },\n0x0817: { n:\"BrtAbsPath15\" },\n0x0818: { n:\"BrtBeginPivotTableUISettings\" },\n0x0819: { n:\"BrtEndPivotTableUISettings\" },\n0x081B: { n:\"BrtTableSlicerCacheIDs\" },\n0x081C: { n:\"BrtTableSlicerCacheID\" },\n0x081D: { n:\"BrtBeginTableSlicerCache\" },\n0x081E: { n:\"BrtEndTableSlicerCache\" },\n0x081F: { n:\"BrtSxFilter15\" },\n0x0820: { n:\"BrtBeginTimelineCachePivotCacheIDs\" },\n0x0821: { n:\"BrtEndTimelineCachePivotCacheIDs\" },\n0x0822: { n:\"BrtTimelineCachePivotCacheID\" },\n0x0823: { n:\"BrtBeginTimelineCacheIDs\" },\n0x0824: { n:\"BrtEndTimelineCacheIDs\" },\n0x0825: { n:\"BrtBeginTimelineCacheID\" },\n0x0826: { n:\"BrtEndTimelineCacheID\" },\n0x0827: { n:\"BrtBeginTimelinesEx\" },\n0x0828: { n:\"BrtEndTimelinesEx\" },\n0x0829: { n:\"BrtBeginTimelineEx\" },\n0x082A: { n:\"BrtEndTimelineEx\" },\n0x082B: { n:\"BrtWorkBookPr15\" },\n0x082C: { n:\"BrtPCDH15\" },\n0x082D: { n:\"BrtBeginTimelineStyle\" },\n0x082E: { n:\"BrtEndTimelineStyle\" },\n0x082F: { n:\"BrtTimelineStyleElement\" },\n0x0830: { n:\"BrtBeginTimelineStylesheetExt15\" },\n0x0831: { n:\"BrtEndTimelineStylesheetExt15\" },\n0x0832: { n:\"BrtBeginTimelineStyles\" },\n0x0833: { n:\"BrtEndTimelineStyles\" },\n0x0834: { n:\"BrtBeginTimelineStyleElements\" },\n0x0835: { n:\"BrtEndTimelineStyleElements\" },\n0x0836: { n:\"BrtDxf15\" },\n0x0837: { n:\"BrtBeginDxfs15\" },\n0x0838: { n:\"brtEndDxfs15\" },\n0x0839: { n:\"BrtSlicerCacheHideItemsWithNoData\" },\n0x083A: { n:\"BrtBeginItemUniqueNames\" },\n0x083B: { n:\"BrtEndItemUniqueNames\" },\n0x083C: { n:\"BrtItemUniqueName\" },\n0x083D: { n:\"BrtBeginExtConn15\" },\n0x083E: { n:\"BrtEndExtConn15\" },\n0x083F: { n:\"BrtBeginOledbPr15\" },\n0x0840: { n:\"BrtEndOledbPr15\" },\n0x0841: { n:\"BrtBeginDataFeedPr15\" },\n0x0842: { n:\"BrtEndDataFeedPr15\" },\n0x0843: { n:\"BrtTextPr15\" },\n0x0844: { n:\"BrtRangePr15\" },\n0x0845: { n:\"BrtDbCommand15\" },\n0x0846: { n:\"BrtBeginDbTables15\" },\n0x0847: { n:\"BrtEndDbTables15\" },\n0x0848: { n:\"BrtDbTable15\" },\n0x0849: { n:\"BrtBeginDataModel\" },\n0x084A: { n:\"BrtEndDataModel\" },\n0x084B: { n:\"BrtBeginModelTables\" },\n0x084C: { n:\"BrtEndModelTables\" },\n0x084D: { n:\"BrtModelTable\" },\n0x084E: { n:\"BrtBeginModelRelationships\" },\n0x084F: { n:\"BrtEndModelRelationships\" },\n0x0850: { n:\"BrtModelRelationship\" },\n0x0851: { n:\"BrtBeginECTxtWiz15\" },\n0x0852: { n:\"BrtEndECTxtWiz15\" },\n0x0853: { n:\"BrtBeginECTWFldInfoLst15\" },\n0x0854: { n:\"BrtEndECTWFldInfoLst15\" },\n0x0855: { n:\"BrtBeginECTWFldInfo15\" },\n0x0856: { n:\"BrtFieldListActiveItem\" },\n0x0857: { n:\"BrtPivotCacheIdVersion\" },\n0x0858: { n:\"BrtSXDI15\" },\n0x0859: { n:\"BrtBeginModelTimeGroupings\" },\n0x085A: { n:\"BrtEndModelTimeGroupings\" },\n0x085B: { n:\"BrtBeginModelTimeGrouping\" },\n0x085C: { n:\"BrtEndModelTimeGrouping\" },\n0x085D: { n:\"BrtModelTimeGroupingCalcCol\" },\n0x0C00: { n:\"BrtUid\" },\n0x0C01: { n:\"BrtRevisionPtr\" },\n0x13e7: { n:\"BrtBeginCalcFeatures\" },\n0x13e8: { n:\"BrtEndCalcFeatures\" },\n0x13e9: { n:\"BrtCalcFeature\" },\n0xFFFF: { n:\"\" }\n};\n\nvar XLSBRE = evert_key(XLSBRecordEnum, 'n');\n\n/* [MS-XLS] 2.3 Record Enumeration */\nvar XLSRecordEnum = {\n0x0003: { n:\"BIFF2NUM\", f:parse_BIFF2NUM },\n0x0004: { n:\"BIFF2STR\", f:parse_BIFF2STR },\n0x0006: { n:\"Formula\", f:parse_Formula },\n0x0009: { n:'BOF', f:parse_BOF },\n0x000a: { n:'EOF', f:parsenoop2 },\n0x000c: { n:\"CalcCount\", f:parseuint16 },\n0x000d: { n:\"CalcMode\", f:parseuint16 },\n0x000e: { n:\"CalcPrecision\", f:parsebool },\n0x000f: { n:\"CalcRefMode\", f:parsebool },\n0x0010: { n:\"CalcDelta\", f:parse_Xnum },\n0x0011: { n:\"CalcIter\", f:parsebool },\n0x0012: { n:\"Protect\", f:parsebool },\n0x0013: { n:\"Password\", f:parseuint16 },\n0x0014: { n:\"Header\", f:parse_XLHeaderFooter },\n0x0015: { n:\"Footer\", f:parse_XLHeaderFooter },\n0x0017: { n:\"ExternSheet\", f:parse_ExternSheet },\n0x0018: { n:\"Lbl\", f:parse_Lbl },\n0x0019: { n:\"WinProtect\", f:parsebool },\n0x001a: { n:\"VerticalPageBreaks\" },\n0x001b: { n:\"HorizontalPageBreaks\" },\n0x001c: { n:\"Note\", f:parse_Note },\n0x001d: { n:\"Selection\" },\n0x0022: { n:\"Date1904\", f:parsebool },\n0x0023: { n:\"ExternName\", f:parse_ExternName },\n0x0024: { n:\"COLWIDTH\" },\n0x0026: { n:\"LeftMargin\", f:parse_Xnum },\n0x0027: { n:\"RightMargin\", f:parse_Xnum },\n0x0028: { n:\"TopMargin\", f:parse_Xnum },\n0x0029: { n:\"BottomMargin\", f:parse_Xnum },\n0x002a: { n:\"PrintRowCol\", f:parsebool },\n0x002b: { n:\"PrintGrid\", f:parsebool },\n0x002f: { n:\"FilePass\", f:parse_FilePass },\n0x0031: { n:\"Font\", f:parse_Font },\n0x0033: { n:\"PrintSize\", f:parseuint16 },\n0x003c: { n:\"Continue\" },\n0x003d: { n:\"Window1\", f:parse_Window1 },\n0x0040: { n:\"Backup\", f:parsebool },\n0x0041: { n:\"Pane\", f:parse_Pane },\n0x0042: { n:'CodePage', f:parseuint16 },\n0x004d: { n:\"Pls\" },\n0x0050: { n:\"DCon\" },\n0x0051: { n:\"DConRef\" },\n0x0052: { n:\"DConName\" },\n0x0055: { n:\"DefColWidth\", f:parseuint16 },\n0x0059: { n:\"XCT\" },\n0x005a: { n:\"CRN\" },\n0x005b: { n:\"FileSharing\" },\n0x005c: { n:'WriteAccess', f:parse_WriteAccess },\n0x005d: { n:\"Obj\", f:parse_Obj },\n0x005e: { n:\"Uncalced\" },\n0x005f: { n:\"CalcSaveRecalc\", f:parsebool },\n0x0060: { n:\"Template\" },\n0x0061: { n:\"Intl\" },\n0x0063: { n:\"ObjProtect\", f:parsebool },\n0x007d: { n:\"ColInfo\", f:parse_ColInfo },\n0x0080: { n:\"Guts\", f:parse_Guts },\n0x0081: { n:\"WsBool\", f:parse_WsBool },\n0x0082: { n:\"GridSet\", f:parseuint16 },\n0x0083: { n:\"HCenter\", f:parsebool },\n0x0084: { n:\"VCenter\", f:parsebool },\n0x0085: { n:'BoundSheet8', f:parse_BoundSheet8 },\n0x0086: { n:\"WriteProtect\" },\n0x008c: { n:\"Country\", f:parse_Country },\n0x008d: { n:\"HideObj\", f:parseuint16 },\n0x0090: { n:\"Sort\" },\n0x0092: { n:\"Palette\", f:parse_Palette },\n0x0097: { n:\"Sync\" },\n0x0098: { n:\"LPr\" },\n0x0099: { n:\"DxGCol\" },\n0x009a: { n:\"FnGroupName\" },\n0x009b: { n:\"FilterMode\" },\n0x009c: { n:\"BuiltInFnGroupCount\", f:parseuint16 },\n0x009d: { n:\"AutoFilterInfo\" },\n0x009e: { n:\"AutoFilter\" },\n0x00a0: { n:\"Scl\", f:parse_Scl },\n0x00a1: { n:\"Setup\", f:parse_Setup },\n0x00ae: { n:\"ScenMan\" },\n0x00af: { n:\"SCENARIO\" },\n0x00b0: { n:\"SxView\" },\n0x00b1: { n:\"Sxvd\" },\n0x00b2: { n:\"SXVI\" },\n0x00b4: { n:\"SxIvd\" },\n0x00b5: { n:\"SXLI\" },\n0x00b6: { n:\"SXPI\" },\n0x00b8: { n:\"DocRoute\" },\n0x00b9: { n:\"RecipName\" },\n0x00bd: { n:\"MulRk\", f:parse_MulRk },\n0x00be: { n:\"MulBlank\", f:parse_MulBlank },\n0x00c1: { n:'Mms', f:parsenoop2 },\n0x00c5: { n:\"SXDI\" },\n0x00c6: { n:\"SXDB\" },\n0x00c7: { n:\"SXFDB\" },\n0x00c8: { n:\"SXDBB\" },\n0x00c9: { n:\"SXNum\" },\n0x00ca: { n:\"SxBool\", f:parsebool },\n0x00cb: { n:\"SxErr\" },\n0x00cc: { n:\"SXInt\" },\n0x00cd: { n:\"SXString\" },\n0x00ce: { n:\"SXDtr\" },\n0x00cf: { n:\"SxNil\" },\n0x00d0: { n:\"SXTbl\" },\n0x00d1: { n:\"SXTBRGIITM\" },\n0x00d2: { n:\"SxTbpg\" },\n0x00d3: { n:\"ObProj\" },\n0x00d5: { n:\"SXStreamID\" },\n0x00d7: { n:\"DBCell\" },\n0x00d8: { n:\"SXRng\" },\n0x00d9: { n:\"SxIsxoper\" },\n0x00da: { n:\"BookBool\", f:parseuint16 },\n0x00dc: { n:\"DbOrParamQry\" },\n0x00dd: { n:\"ScenarioProtect\", f:parsebool },\n0x00de: { n:\"OleObjectSize\" },\n0x00e0: { n:\"XF\", f:parse_XF },\n0x00e1: { n:'InterfaceHdr', f:parse_InterfaceHdr },\n0x00e2: { n:'InterfaceEnd', f:parsenoop2 },\n0x00e3: { n:\"SXVS\" },\n0x00e5: { n:\"MergeCells\", f:parse_MergeCells },\n0x00e9: { n:\"BkHim\" },\n0x00eb: { n:\"MsoDrawingGroup\" },\n0x00ec: { n:\"MsoDrawing\" },\n0x00ed: { n:\"MsoDrawingSelection\" },\n0x00ef: { n:\"PhoneticInfo\" },\n0x00f0: { n:\"SxRule\" },\n0x00f1: { n:\"SXEx\" },\n0x00f2: { n:\"SxFilt\" },\n0x00f4: { n:\"SxDXF\" },\n0x00f5: { n:\"SxItm\" },\n0x00f6: { n:\"SxName\" },\n0x00f7: { n:\"SxSelect\" },\n0x00f8: { n:\"SXPair\" },\n0x00f9: { n:\"SxFmla\" },\n0x00fb: { n:\"SxFormat\" },\n0x00fc: { n:\"SST\", f:parse_SST },\n0x00fd: { n:\"LabelSst\", f:parse_LabelSst },\n0x00ff: { n:\"ExtSST\", f:parse_ExtSST },\n0x0100: { n:\"SXVDEx\" },\n0x0103: { n:\"SXFormula\" },\n0x0122: { n:\"SXDBEx\" },\n0x0137: { n:\"RRDInsDel\" },\n0x0138: { n:\"RRDHead\" },\n0x013b: { n:\"RRDChgCell\" },\n0x013d: { n:\"RRTabId\", f:parseuint16a },\n0x013e: { n:\"RRDRenSheet\" },\n0x013f: { n:\"RRSort\" },\n0x0140: { n:\"RRDMove\" },\n0x014a: { n:\"RRFormat\" },\n0x014b: { n:\"RRAutoFmt\" },\n0x014d: { n:\"RRInsertSh\" },\n0x014e: { n:\"RRDMoveBegin\" },\n0x014f: { n:\"RRDMoveEnd\" },\n0x0150: { n:\"RRDInsDelBegin\" },\n0x0151: { n:\"RRDInsDelEnd\" },\n0x0152: { n:\"RRDConflict\" },\n0x0153: { n:\"RRDDefName\" },\n0x0154: { n:\"RRDRstEtxp\" },\n0x015f: { n:\"LRng\" },\n0x0160: { n:\"UsesELFs\", f:parsebool },\n0x0161: { n:\"DSF\", f:parsenoop2 },\n0x0191: { n:\"CUsr\" },\n0x0192: { n:\"CbUsr\" },\n0x0193: { n:\"UsrInfo\" },\n0x0194: { n:\"UsrExcl\" },\n0x0195: { n:\"FileLock\" },\n0x0196: { n:\"RRDInfo\" },\n0x0197: { n:\"BCUsrs\" },\n0x0198: { n:\"UsrChk\" },\n0x01a9: { n:\"UserBView\" },\n0x01aa: { n:\"UserSViewBegin\" },\n0x01ab: { n:\"UserSViewEnd\" },\n0x01ac: { n:\"RRDUserView\" },\n0x01ad: { n:\"Qsi\" },\n0x01ae: { n:\"SupBook\", f:parse_SupBook },\n0x01af: { n:\"Prot4Rev\", f:parsebool },\n0x01b0: { n:\"CondFmt\" },\n0x01b1: { n:\"CF\" },\n0x01b2: { n:\"DVal\" },\n0x01b5: { n:\"DConBin\" },\n0x01b6: { n:\"TxO\", f:parse_TxO },\n0x01b7: { n:\"RefreshAll\", f:parsebool },\n0x01b8: { n:\"HLink\", f:parse_HLink },\n0x01b9: { n:\"Lel\" },\n0x01ba: { n:\"CodeName\", f:parse_XLUnicodeString },\n0x01bb: { n:\"SXFDBType\" },\n0x01bc: { n:\"Prot4RevPass\", f:parseuint16 },\n0x01bd: { n:\"ObNoMacros\" },\n0x01be: { n:\"Dv\" },\n0x01c0: { n:\"Excel9File\", f:parsenoop2 },\n0x01c1: { n:\"RecalcId\", f:parse_RecalcId, r:2},\n0x01c2: { n:\"EntExU2\", f:parsenoop2 },\n0x0200: { n:\"Dimensions\", f:parse_Dimensions },\n0x0201: { n:\"Blank\", f:parse_Blank },\n0x0203: { n:\"Number\", f:parse_Number },\n0x0204: { n:\"Label\", f:parse_Label },\n0x0205: { n:\"BoolErr\", f:parse_BoolErr },\n0x0206: { n:\"Formula\", f:parse_Formula },\n0x0207: { n:\"String\", f:parse_String },\n0x0208: { n:'Row', f:parse_Row },\n0x020b: { n:\"Index\" },\n0x0221: { n:\"Array\", f:parse_Array },\n0x0225: { n:\"DefaultRowHeight\", f:parse_DefaultRowHeight },\n0x0236: { n:\"Table\" },\n0x023e: { n:\"Window2\", f:parse_Window2 },\n0x027e: { n:\"RK\", f:parse_RK },\n0x0293: { n:\"Style\" },\n0x0406: { n:\"Formula\", f:parse_Formula },\n0x0418: { n:\"BigName\" },\n0x041e: { n:\"Format\", f:parse_Format },\n0x043c: { n:\"ContinueBigName\" },\n0x04bc: { n:\"ShrFmla\", f:parse_ShrFmla },\n0x0800: { n:\"HLinkTooltip\", f:parse_HLinkTooltip },\n0x0801: { n:\"WebPub\" },\n0x0802: { n:\"QsiSXTag\" },\n0x0803: { n:\"DBQueryExt\" },\n0x0804: { n:\"ExtString\" },\n0x0805: { n:\"TxtQry\" },\n0x0806: { n:\"Qsir\" },\n0x0807: { n:\"Qsif\" },\n0x0808: { n:\"RRDTQSIF\" },\n0x0809: { n:'BOF', f:parse_BOF },\n0x080a: { n:\"OleDbConn\" },\n0x080b: { n:\"WOpt\" },\n0x080c: { n:\"SXViewEx\" },\n0x080d: { n:\"SXTH\" },\n0x080e: { n:\"SXPIEx\" },\n0x080f: { n:\"SXVDTEx\" },\n0x0810: { n:\"SXViewEx9\" },\n0x0812: { n:\"ContinueFrt\" },\n0x0813: { n:\"RealTimeData\" },\n0x0850: { n:\"ChartFrtInfo\" },\n0x0851: { n:\"FrtWrapper\" },\n0x0852: { n:\"StartBlock\" },\n0x0853: { n:\"EndBlock\" },\n0x0854: { n:\"StartObject\" },\n0x0855: { n:\"EndObject\" },\n0x0856: { n:\"CatLab\" },\n0x0857: { n:\"YMult\" },\n0x0858: { n:\"SXViewLink\" },\n0x0859: { n:\"PivotChartBits\" },\n0x085a: { n:\"FrtFontList\" },\n0x0862: { n:\"SheetExt\" },\n0x0863: { n:\"BookExt\", r:12},\n0x0864: { n:\"SXAddl\" },\n0x0865: { n:\"CrErr\" },\n0x0866: { n:\"HFPicture\" },\n0x0867: { n:'FeatHdr', f:parsenoop2 },\n0x0868: { n:\"Feat\" },\n0x086a: { n:\"DataLabExt\" },\n0x086b: { n:\"DataLabExtContents\" },\n0x086c: { n:\"CellWatch\" },\n0x0871: { n:\"FeatHdr11\" },\n0x0872: { n:\"Feature11\" },\n0x0874: { n:\"DropDownObjIds\" },\n0x0875: { n:\"ContinueFrt11\" },\n0x0876: { n:\"DConn\" },\n0x0877: { n:\"List12\" },\n0x0878: { n:\"Feature12\" },\n0x0879: { n:\"CondFmt12\" },\n0x087a: { n:\"CF12\" },\n0x087b: { n:\"CFEx\" },\n0x087c: { n:\"XFCRC\", f:parse_XFCRC, r:12 },\n0x087d: { n:\"XFExt\", f:parse_XFExt, r:12 },\n0x087e: { n:\"AutoFilter12\" },\n0x087f: { n:\"ContinueFrt12\" },\n0x0884: { n:\"MDTInfo\" },\n0x0885: { n:\"MDXStr\" },\n0x0886: { n:\"MDXTuple\" },\n0x0887: { n:\"MDXSet\" },\n0x0888: { n:\"MDXProp\" },\n0x0889: { n:\"MDXKPI\" },\n0x088a: { n:\"MDB\" },\n0x088b: { n:\"PLV\" },\n0x088c: { n:\"Compat12\", f:parsebool, r:12 },\n0x088d: { n:\"DXF\" },\n0x088e: { n:\"TableStyles\", r:12 },\n0x088f: { n:\"TableStyle\" },\n0x0890: { n:\"TableStyleElement\" },\n0x0892: { n:\"StyleExt\" },\n0x0893: { n:\"NamePublish\" },\n0x0894: { n:\"NameCmt\", f:parse_NameCmt, r:12 },\n0x0895: { n:\"SortData\" },\n0x0896: { n:\"Theme\", f:parse_Theme, r:12 },\n0x0897: { n:\"GUIDTypeLib\" },\n0x0898: { n:\"FnGrp12\" },\n0x0899: { n:\"NameFnGrp12\" },\n0x089a: { n:\"MTRSettings\", f:parse_MTRSettings, r:12 },\n0x089b: { n:\"CompressPictures\", f:parsenoop2 },\n0x089c: { n:\"HeaderFooter\" },\n0x089d: { n:\"CrtLayout12\" },\n0x089e: { n:\"CrtMlFrt\" },\n0x089f: { n:\"CrtMlFrtContinue\" },\n0x08a3: { n:\"ForceFullCalculation\", f:parse_ForceFullCalculation },\n0x08a4: { n:\"ShapePropsStream\" },\n0x08a5: { n:\"TextPropsStream\" },\n0x08a6: { n:\"RichTextStream\" },\n0x08a7: { n:\"CrtLayout12A\" },\n0x1001: { n:\"Units\" },\n0x1002: { n:\"Chart\" },\n0x1003: { n:\"Series\" },\n0x1006: { n:\"DataFormat\" },\n0x1007: { n:\"LineFormat\" },\n0x1009: { n:\"MarkerFormat\" },\n0x100a: { n:\"AreaFormat\" },\n0x100b: { n:\"PieFormat\" },\n0x100c: { n:\"AttachedLabel\" },\n0x100d: { n:\"SeriesText\" },\n0x1014: { n:\"ChartFormat\" },\n0x1015: { n:\"Legend\" },\n0x1016: { n:\"SeriesList\" },\n0x1017: { n:\"Bar\" },\n0x1018: { n:\"Line\" },\n0x1019: { n:\"Pie\" },\n0x101a: { n:\"Area\" },\n0x101b: { n:\"Scatter\" },\n0x101c: { n:\"CrtLine\" },\n0x101d: { n:\"Axis\" },\n0x101e: { n:\"Tick\" },\n0x101f: { n:\"ValueRange\" },\n0x1020: { n:\"CatSerRange\" },\n0x1021: { n:\"AxisLine\" },\n0x1022: { n:\"CrtLink\" },\n0x1024: { n:\"DefaultText\" },\n0x1025: { n:\"Text\" },\n0x1026: { n:\"FontX\", f:parseuint16 },\n0x1027: { n:\"ObjectLink\" },\n0x1032: { n:\"Frame\" },\n0x1033: { n:\"Begin\" },\n0x1034: { n:\"End\" },\n0x1035: { n:\"PlotArea\" },\n0x103a: { n:\"Chart3d\" },\n0x103c: { n:\"PicF\" },\n0x103d: { n:\"DropBar\" },\n0x103e: { n:\"Radar\" },\n0x103f: { n:\"Surf\" },\n0x1040: { n:\"RadarArea\" },\n0x1041: { n:\"AxisParent\" },\n0x1043: { n:\"LegendException\" },\n0x1044: { n:\"ShtProps\", f:parse_ShtProps },\n0x1045: { n:\"SerToCrt\" },\n0x1046: { n:\"AxesUsed\" },\n0x1048: { n:\"SBaseRef\" },\n0x104a: { n:\"SerParent\" },\n0x104b: { n:\"SerAuxTrend\" },\n0x104e: { n:\"IFmtRecord\" },\n0x104f: { n:\"Pos\" },\n0x1050: { n:\"AlRuns\" },\n0x1051: { n:\"BRAI\" },\n0x105b: { n:\"SerAuxErrBar\" },\n0x105c: { n:\"ClrtClient\", f:parse_ClrtClient },\n0x105d: { n:\"SerFmt\" },\n0x105f: { n:\"Chart3DBarShape\" },\n0x1060: { n:\"Fbi\" },\n0x1061: { n:\"BopPop\" },\n0x1062: { n:\"AxcExt\" },\n0x1063: { n:\"Dat\" },\n0x1064: { n:\"PlotGrowth\" },\n0x1065: { n:\"SIIndex\" },\n0x1066: { n:\"GelFrame\" },\n0x1067: { n:\"BopPopCustom\" },\n0x1068: { n:\"Fbi2\" },\n\n0x0000: { n:\"Dimensions\", f:parse_Dimensions },\n0x0002: { n:\"BIFF2INT\", f:parse_BIFF2INT },\n0x0005: { n:\"BoolErr\", f:parse_BoolErr },\n0x0007: { n:\"String\", f:parse_BIFF2STRING },\n0x0008: { n:\"BIFF2ROW\" },\n0x000b: { n:\"Index\" },\n0x0016: { n:\"ExternCount\", f:parseuint16 },\n0x001e: { n:\"BIFF2FORMAT\", f:parse_BIFF2Format },\n0x001f: { n:\"BIFF2FMTCNT\" }, /* 16-bit cnt of BIFF2FORMAT records */\n0x0020: { n:\"BIFF2COLINFO\" },\n0x0021: { n:\"Array\", f:parse_Array },\n0x0025: { n:\"DefaultRowHeight\", f:parse_DefaultRowHeight },\n0x0032: { n:\"BIFF2FONTXTRA\", f:parse_BIFF2FONTXTRA },\n0x0034: { n:\"DDEObjName\" },\n0x003e: { n:\"BIFF2WINDOW2\" },\n0x0043: { n:\"BIFF2XF\" },\n0x0045: { n:\"BIFF2FONTCLR\" },\n0x0056: { n:\"BIFF4FMTCNT\" }, /* 16-bit cnt, similar to BIFF2 */\n0x007e: { n:\"RK\" }, /* Not necessarily same as 0x027e */\n0x007f: { n:\"ImData\", f:parse_ImData },\n0x0087: { n:\"Addin\" },\n0x0088: { n:\"Edg\" },\n0x0089: { n:\"Pub\" },\n0x0091: { n:\"Sub\" },\n0x0094: { n:\"LHRecord\" },\n0x0095: { n:\"LHNGraph\" },\n0x0096: { n:\"Sound\" },\n0x00a9: { n:\"CoordList\" },\n0x00ab: { n:\"GCW\" },\n0x00bc: { n:\"ShrFmla\" }, /* Not necessarily same as 0x04bc */\n0x00bf: { n:\"ToolbarHdr\" },\n0x00c0: { n:\"ToolbarEnd\" },\n0x00c2: { n:\"AddMenu\" },\n0x00c3: { n:\"DelMenu\" },\n0x00d6: { n:\"RString\", f:parse_RString },\n0x00df: { n:\"UDDesc\" },\n0x00ea: { n:\"TabIdConf\" },\n0x0162: { n:\"XL5Modify\" },\n0x01a5: { n:\"FileSharing2\" },\n0x0209: { n:'BOF', f:parse_BOF },\n0x0218: { n:\"Lbl\", f:parse_Lbl },\n0x0223: { n:\"ExternName\", f:parse_ExternName },\n0x0231: { n:\"Font\" },\n0x0243: { n:\"BIFF3XF\" },\n0x0409: { n:'BOF', f:parse_BOF },\n0x0443: { n:\"BIFF4XF\" },\n0x086d: { n:\"FeatInfo\" },\n0x0873: { n:\"FeatInfo11\" },\n0x0881: { n:\"SXAddl12\" },\n0x08c0: { n:\"AutoWebPub\" },\n0x08c1: { n:\"ListObj\" },\n0x08c2: { n:\"ListField\" },\n0x08c3: { n:\"ListDV\" },\n0x08c4: { n:\"ListCondFmt\" },\n0x08c5: { n:\"ListCF\" },\n0x08c6: { n:\"FMQry\" },\n0x08c7: { n:\"FMSQry\" },\n0x08c8: { n:\"PLV\" },\n0x08c9: { n:\"LnExt\" },\n0x08ca: { n:\"MkrExt\" },\n0x08cb: { n:\"CrtCoopt\" },\n0x08d6: { n:\"FRTArchId$\", r:12 },\n\n0x7262: {}\n};\n\nvar XLSRE = evert_key(XLSRecordEnum, 'n');\nfunction write_biff_rec(ba, type, payload, length) {\n\tvar t = +type || +XLSRE[type];\n\tif(isNaN(t)) return;\n\tvar len = length || (payload||[]).length || 0;\n\tvar o = ba.next(4);\n\to.write_shift(2, t);\n\to.write_shift(2, len);\n\tif(len > 0 && is_buf(payload)) ba.push(payload);\n}\n\nfunction write_biff_continue(ba, type, payload, length) {\n\tvar len = length || (payload||[]).length || 0;\n\tif(len <= 8224) return write_biff_rec(ba, type, payload, len);\n\tvar t = +type || +XLSRE[type];\n\tif(isNaN(t)) return;\n\tvar parts = payload.parts || [], sidx = 0;\n\tvar i = 0, w = 0;\n\twhile(w + (parts[sidx] || 8224) <= 8224) { w+= (parts[sidx] || 8224); sidx++; }\n\tvar o = ba.next(4);\n\to.write_shift(2, t);\n\to.write_shift(2, w);\n\tba.push(payload.slice(i, i + w));\n\ti += w;\n\twhile(i < len) {\n\t\to = ba.next(4);\n\t\to.write_shift(2, 0x3c); // TODO: figure out correct continue type\n\t\tw = 0;\n\t\twhile(w + (parts[sidx] || 8224) <= 8224) { w+= (parts[sidx] || 8224); sidx++; }\n\t\to.write_shift(2, w);\n\t\tba.push(payload.slice(i, i+w)); i+= w;\n\t}\n}\n\nfunction write_BIFF2Cell(out, r, c) {\n\tif(!out) out = new_buf(7);\n\tout.write_shift(2, r);\n\tout.write_shift(2, c);\n\tout.write_shift(2, 0);\n\tout.write_shift(1, 0);\n\treturn out;\n}\n\nfunction write_BIFF2BERR(r, c, val, t) {\n\tvar out = new_buf(9);\n\twrite_BIFF2Cell(out, r, c);\n\tif(t == 'e') { out.write_shift(1, val); out.write_shift(1, 1); }\n\telse { out.write_shift(1, val?1:0); out.write_shift(1, 0); }\n\treturn out;\n}\n\n/* TODO: codepage, large strings */\nfunction write_BIFF2LABEL(r, c, val) {\n\tvar out = new_buf(8 + 2*val.length);\n\twrite_BIFF2Cell(out, r, c);\n\tout.write_shift(1, val.length);\n\tout.write_shift(val.length, val, 'sbcs');\n\treturn out.l < out.length ? out.slice(0, out.l) : out;\n}\n\nfunction write_ws_biff2_cell(ba, cell, R, C) {\n\tif(cell.v != null) switch(cell.t) {\n\t\tcase 'd': case 'n':\n\t\t\tvar v = cell.t == 'd' ? datenum(parseDate(cell.v)) : cell.v;\n\t\t\tif((v == (v|0)) && (v >= 0) && (v < 65536))\n\t\t\t\twrite_biff_rec(ba, 0x0002, write_BIFF2INT(R, C, v));\n\t\t\telse\n\t\t\t\twrite_biff_rec(ba, 0x0003, write_BIFF2NUM(R,C, v));\n\t\t\treturn;\n\t\tcase 'b': case 'e': write_biff_rec(ba, 0x0005, write_BIFF2BERR(R, C, cell.v, cell.t)); return;\n\t\t/* TODO: codepage, sst */\n\t\tcase 's': case 'str':\n\t\t\twrite_biff_rec(ba, 0x0004, write_BIFF2LABEL(R, C, cell.v));\n\t\t\treturn;\n\t}\n\twrite_biff_rec(ba, 0x0001, write_BIFF2Cell(null, R, C));\n}\n\nfunction write_ws_biff2(ba, ws, idx, opts) {\n\tvar dense = Array.isArray(ws);\n\tvar range = safe_decode_range(ws['!ref'] || \"A1\"), ref, rr = \"\", cols = [];\n\tif(range.e.c > 0xFF || range.e.r > 0x3FFF) {\n\t\tif(opts.WTF) throw new Error(\"Range \" + (ws['!ref'] || \"A1\") + \" exceeds format limit A1:IV16384\");\n\t\trange.e.c = Math.min(range.e.c, 0xFF);\n\t\trange.e.r = Math.min(range.e.c, 0x3FFF);\n\t\tref = encode_range(range);\n\t}\n\tfor(var R = range.s.r; R <= range.e.r; ++R) {\n\t\trr = encode_row(R);\n\t\tfor(var C = range.s.c; C <= range.e.c; ++C) {\n\t\t\tif(R === range.s.r) cols[C] = encode_col(C);\n\t\t\tref = cols[C] + rr;\n\t\t\tvar cell = dense ? (ws[R]||[])[C] : ws[ref];\n\t\t\tif(!cell) continue;\n\t\t\t/* write cell */\n\t\t\twrite_ws_biff2_cell(ba, cell, R, C, opts);\n\t\t}\n\t}\n}\n\n/* Based on test files */\nfunction write_biff2_buf(wb, opts) {\n\tvar o = opts || {};\n\tif(DENSE != null && o.dense == null) o.dense = DENSE;\n\tvar ba = buf_array();\n\tvar idx = 0;\n\tfor(var i=0;i 0xFF || range.e.r >= MAX_ROWS) {\n\t\tif(opts.WTF) throw new Error(\"Range \" + (ws['!ref'] || \"A1\") + \" exceeds format limit A1:IV16384\");\n\t\trange.e.c = Math.min(range.e.c, 0xFF);\n\t\trange.e.r = Math.min(range.e.c, MAX_ROWS-1);\n\t}\n\n\twrite_biff_rec(ba, 0x0809, write_BOF(wb, 0x10, opts));\n\t/* [Uncalced] Index */\n\twrite_biff_rec(ba, \"CalcMode\", writeuint16(1));\n\twrite_biff_rec(ba, \"CalcCount\", writeuint16(100));\n\twrite_biff_rec(ba, \"CalcRefMode\", writebool(true));\n\twrite_biff_rec(ba, \"CalcIter\", writebool(false));\n\twrite_biff_rec(ba, \"CalcDelta\", write_Xnum(0.001));\n\twrite_biff_rec(ba, \"CalcSaveRecalc\", writebool(true));\n\twrite_biff_rec(ba, \"PrintRowCol\", writebool(false));\n\twrite_biff_rec(ba, \"PrintGrid\", writebool(false));\n\twrite_biff_rec(ba, \"GridSet\", writeuint16(1));\n\twrite_biff_rec(ba, \"Guts\", write_Guts([0,0]));\n\t/* DefaultRowHeight WsBool [Sync] [LPr] [HorizontalPageBreaks] [VerticalPageBreaks] */\n\t/* Header (string) */\n\t/* Footer (string) */\n\twrite_biff_rec(ba, \"HCenter\", writebool(false));\n\twrite_biff_rec(ba, \"VCenter\", writebool(false));\n\t/* ... */\n\twrite_biff_rec(ba, 0x200, write_Dimensions(range, opts));\n\t/* ... */\n\n\tif(b8) ws['!links'] = [];\n\tfor(var R = range.s.r; R <= range.e.r; ++R) {\n\t\trr = encode_row(R);\n\t\tfor(var C = range.s.c; C <= range.e.c; ++C) {\n\t\t\tif(R === range.s.r) cols[C] = encode_col(C);\n\t\t\tref = cols[C] + rr;\n\t\t\tvar cell = dense ? (ws[R]||[])[C] : ws[ref];\n\t\t\tif(!cell) continue;\n\t\t\t/* write cell */\n\t\t\twrite_ws_biff8_cell(ba, cell, R, C, opts);\n\t\t\tif(b8 && cell.l) ws['!links'].push([ref, cell.l]);\n\t\t}\n\t}\n\tvar cname = _sheet.CodeName || _sheet.name || s;\n\t/* ... */\n\tif(b8) write_biff_rec(ba, \"Window2\", write_Window2((_WB.Views||[])[0]));\n\t/* ... */\n\tif(b8 && (ws['!merges']||[]).length) write_biff_rec(ba, \"MergeCells\", write_MergeCells(ws['!merges']));\n\t/* [LRng] *QUERYTABLE [PHONETICINFO] CONDFMTS */\n\tif(b8) write_ws_biff8_hlinks(ba, ws);\n\t/* [DVAL] */\n\twrite_biff_rec(ba, \"CodeName\", write_XLUnicodeString(cname, opts));\n\t/* *WebPub *CellWatch [SheetExt] */\n\tif(b8) write_FEAT(ba, ws);\n\t/* *FEAT11 *RECORD12 */\n\twrite_biff_rec(ba, \"EOF\");\n\treturn ba.end();\n}\n\n/* [MS-XLS] 2.1.7.20.3 */\nfunction write_biff8_global(wb, bufs, opts) {\n\tvar A = buf_array();\n\tvar _WB = ((wb||{}).Workbook||{});\n\tvar _sheets = (_WB.Sheets||[]);\n\tvar _wb = _WB.WBProps||{};\n\tvar b8 = opts.biff == 8, b5 = opts.biff == 5;\n\twrite_biff_rec(A, 0x0809, write_BOF(wb, 0x05, opts));\n\tif(opts.bookType == \"xla\") write_biff_rec(A, \"Addin\");\n\twrite_biff_rec(A, \"InterfaceHdr\", b8 ? writeuint16(0x04b0) : null);\n\twrite_biff_rec(A, \"Mms\", writezeroes(2));\n\tif(b5) write_biff_rec(A, \"ToolbarHdr\");\n\tif(b5) write_biff_rec(A, \"ToolbarEnd\");\n\twrite_biff_rec(A, \"InterfaceEnd\");\n\twrite_biff_rec(A, \"WriteAccess\", write_WriteAccess(\"SheetJS\", opts));\n\t/* [FileSharing] */\n\twrite_biff_rec(A, \"CodePage\", writeuint16(b8 ? 0x04b0 : 0x04E4));\n\t/* *2047 Lel */\n\tif(b8) write_biff_rec(A, \"DSF\", writeuint16(0));\n\tif(b8) write_biff_rec(A, \"Excel9File\");\n\twrite_biff_rec(A, \"RRTabId\", write_RRTabId(wb.SheetNames.length));\n\tif(b8 && wb.vbaraw) write_biff_rec(A, \"ObProj\");\n\t/* [ObNoMacros] */\n\tif(b8 && wb.vbaraw) {\n\t\tvar cname = _wb.CodeName || \"ThisWorkbook\";\n\t\twrite_biff_rec(A, \"CodeName\", write_XLUnicodeString(cname, opts));\n\t}\n\twrite_biff_rec(A, \"BuiltInFnGroupCount\", writeuint16(0x11));\n\t/* *FnGroupName *FnGrp12 */\n\t/* *Lbl */\n\t/* [OleObjectSize] */\n\twrite_biff_rec(A, \"WinProtect\", writebool(false));\n\twrite_biff_rec(A, \"Protect\", writebool(false));\n\twrite_biff_rec(A, \"Password\", writeuint16(0));\n\tif(b8) write_biff_rec(A, \"Prot4Rev\", writebool(false));\n\tif(b8) write_biff_rec(A, \"Prot4RevPass\", writeuint16(0));\n\twrite_biff_rec(A, \"Window1\", write_Window1(opts));\n\twrite_biff_rec(A, \"Backup\", writebool(false));\n\twrite_biff_rec(A, \"HideObj\", writeuint16(0));\n\twrite_biff_rec(A, \"Date1904\", writebool(safe1904(wb)==\"true\"));\n\twrite_biff_rec(A, \"CalcPrecision\", writebool(true));\n\tif(b8) write_biff_rec(A, \"RefreshAll\", writebool(false));\n\twrite_biff_rec(A, \"BookBool\", writeuint16(0));\n\t/* ... */\n\twrite_FONTS_biff8(A, wb, opts);\n\twrite_FMTS_biff8(A, wb.SSF, opts);\n\twrite_CELLXFS_biff8(A, opts);\n\t/* ... */\n\tif(b8) write_biff_rec(A, \"UsesELFs\", writebool(false));\n\tvar a = A.end();\n\n\tvar C = buf_array();\n\t/* METADATA [MTRSettings] [ForceFullCalculation] */\n\tif(b8) write_biff_rec(C, \"Country\", write_Country());\n\t/* *SUPBOOK *LBL *RTD [RecalcId] *HFPicture *MSODRAWINGGROUP */\n\n\t/* BIFF8: [SST *Continue] ExtSST */\n\tif(b8 && opts.Strings) write_biff_continue(C, \"SST\", write_SST(opts.Strings, opts));\n\n\t/* *WebPub [WOpt] [CrErr] [BookExt] *FeatHdr *DConn [THEME] [CompressPictures] [Compat12] [GUIDTypeLib] */\n\twrite_biff_rec(C, \"EOF\");\n\tvar c = C.end();\n\n\tvar B = buf_array();\n\tvar blen = 0, j = 0;\n\tfor(j = 0; j < wb.SheetNames.length; ++j) blen += (b8 ? 12 : 11) + (b8 ? 2 : 1) * wb.SheetNames[j].length;\n\tvar start = a.length + blen + c.length;\n\tfor(j = 0; j < wb.SheetNames.length; ++j) {\n\t\tvar _sheet = _sheets[j] || ({});\n\t\twrite_biff_rec(B, \"BoundSheet8\", write_BoundSheet8({pos:start, hs:_sheet.Hidden||0, dt:0, name:wb.SheetNames[j]}, opts));\n\t\tstart += bufs[j].length;\n\t}\n\t/* 1*BoundSheet8 */\n\tvar b = B.end();\n\tif(blen != b.length) throw new Error(\"BS8 \" + blen + \" != \" + b.length);\n\n\tvar out = [];\n\tif(a.length) out.push(a);\n\tif(b.length) out.push(b);\n\tif(c.length) out.push(c);\n\treturn __toBuffer([out]);\n}\n\n/* [MS-XLS] 2.1.7.20 Workbook Stream */\nfunction write_biff8_buf(wb, opts) {\n\tvar o = opts || {};\n\tvar bufs = [];\n\n\tif(wb && !wb.SSF) {\n\t\twb.SSF = SSF.get_table();\n\t}\n\tif(wb && wb.SSF) {\n\t\tmake_ssf(SSF); SSF.load_table(wb.SSF);\n\t\t// $FlowIgnore\n\t\to.revssf = evert_num(wb.SSF); o.revssf[wb.SSF[65535]] = 0;\n\t\to.ssf = wb.SSF;\n\t}\n\n\to.Strings = []; o.Strings.Count = 0; o.Strings.Unique = 0;\n\tfix_write_opts(o);\n\n\to.cellXfs = [];\n\tget_cell_style(o.cellXfs, {}, {revssf:{\"General\":0}});\n\n\tif(!wb.Props) wb.Props = {};\n\n\tfor(var i = 0; i < wb.SheetNames.length; ++i) bufs[bufs.length] = write_ws_biff8(i, o, wb);\n\tbufs.unshift(write_biff8_global(wb, bufs, o));\n\treturn __toBuffer([bufs]);\n}\n\nfunction write_biff_buf(wb, opts) {\n\tvar o = opts || {};\n\tswitch(o.biff || 2) {\n\t\tcase 8: case 5: return write_biff8_buf(wb, opts);\n\t\tcase 4: case 3: case 2: return write_biff2_buf(wb, opts);\n\t}\n\tthrow new Error(\"invalid type \" + o.bookType + \" for BIFF\");\n}\n/* note: browser DOM element cannot see mso- style attrs, must parse */\nvar HTML_ = (function() {\n\tfunction html_to_sheet(str, _opts) {\n\t\tvar opts = _opts || {};\n\t\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\t\tvar ws = opts.dense ? ([]) : ({});\n\t\tstr = str.replace(//g, \"\");\n\t\tvar mtch = str.match(/\");\n\t\tvar mtch2 = str.match(/<\\/table/i);\n\t\tvar i = mtch.index, j = mtch2 && mtch2.index || str.length;\n\t\tvar rows = split_regex(str.slice(i, j), /(:?]*>)/i, \"\");\n\t\tvar R = -1, C = 0, RS = 0, CS = 0;\n\t\tvar range = {s:{r:10000000, c:10000000},e:{r:0,c:0}};\n\t\tvar merges = [];\n\t\tfor(i = 0; i < rows.length; ++i) {\n\t\t\tvar row = rows[i].trim();\n\t\t\tvar hd = row.slice(0,3).toLowerCase();\n\t\t\tif(hd == \"/i);\n\t\t\tfor(j = 0; j < cells.length; ++j) {\n\t\t\t\tvar cell = cells[j].trim();\n\t\t\t\tif(!cell.match(/\")) > -1) m = m.slice(cc+1);\n\t\t\t\tfor(var midx = 0; midx < merges.length; ++midx) {\n\t\t\t\t\tvar _merge = merges[midx];\n\t\t\t\t\tif(_merge.s.c == C && _merge.s.r < R && R <= _merge.e.r) { C = _merge.e.c + 1; midx = -1; }\n\t\t\t\t}\n\t\t\t\tvar tag = parsexmltag(cell.slice(0, cell.indexOf(\">\")));\n\t\t\t\tCS = tag.colspan ? +tag.colspan : 1;\n\t\t\t\tif((RS = +tag.rowspan)>1 || CS>1) merges.push({s:{r:R,c:C},e:{r:R + (RS||1) - 1, c:C + CS - 1}});\n\t\t\t\tvar _t = tag.t || \"\";\n\t\t\t\t/* TODO: generate stub cells */\n\t\t\t\tif(!m.length) { C += CS; continue; }\n\t\t\t\tm = htmldecode(m);\n\t\t\t\tif(range.s.r > R) range.s.r = R; if(range.e.r < R) range.e.r = R;\n\t\t\t\tif(range.s.c > C) range.s.c = C; if(range.e.c < C) range.e.c = C;\n\t\t\t\tif(!m.length) continue;\n\t\t\t\tvar o = {t:'s', v:m};\n\t\t\t\tif(opts.raw || !m.trim().length || _t == 's'){}\n\t\t\t\telse if(m === 'TRUE') o = {t:'b', v:true};\n\t\t\t\telse if(m === 'FALSE') o = {t:'b', v:false};\n\t\t\t\telse if(!isNaN(fuzzynum(m))) o = {t:'n', v:fuzzynum(m)};\n\t\t\t\telse if(!isNaN(fuzzydate(m).getDate())) {\n\t\t\t\t\to = ({t:'d', v:parseDate(m)});\n\t\t\t\t\tif(!opts.cellDates) o = ({t:'n', v:datenum(o.v)});\n\t\t\t\t\to.z = opts.dateNF || SSF._table[14];\n\t\t\t\t}\n\t\t\t\tif(opts.dense) { if(!ws[R]) ws[R] = []; ws[R][C] = o; }\n\t\t\t\telse ws[encode_cell({r:R, c:C})] = o;\n\t\t\t\tC += CS;\n\t\t\t}\n\t\t}\n\t\tws['!ref'] = encode_range(range);\n\t\tif(merges.length) ws[\"!merges\"] = merges;\n\t\treturn ws;\n\t}\n\tfunction html_to_book(str, opts) {\n\t\treturn sheet_to_workbook(html_to_sheet(str, opts), opts);\n\t}\n\tfunction make_html_row(ws, r, R, o) {\n\t\tvar M = (ws['!merges'] ||[]);\n\t\tvar oo = [];\n\t\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\t\tvar RS = 0, CS = 0;\n\t\t\tfor(var j = 0; j < M.length; ++j) {\n\t\t\t\tif(M[j].s.r > R || M[j].s.c > C) continue;\n\t\t\t\tif(M[j].e.r < R || M[j].e.c < C) continue;\n\t\t\t\tif(M[j].s.r < R || M[j].s.c < C) { RS = -1; break; }\n\t\t\t\tRS = M[j].e.r - M[j].s.r + 1; CS = M[j].e.c - M[j].s.c + 1; break;\n\t\t\t}\n\t\t\tif(RS < 0) continue;\n\t\t\tvar coord = encode_cell({r:R,c:C});\n\t\t\tvar cell = o.dense ? (ws[R]||[])[C] : ws[coord];\n\t\t\t/* TODO: html entities */\n\t\t\tvar w = (cell && cell.v != null) && (cell.h || escapehtml(cell.w || (format_cell(cell), cell.w) || \"\")) || \"\";\n\t\t\tvar sp = ({});\n\t\t\tif(RS > 1) sp.rowspan = RS;\n\t\t\tif(CS > 1) sp.colspan = CS;\n\t\t\tsp.t = cell && cell.t || 'z';\n\t\t\tif(o.editable) w = '' + w + '';\n\t\t\tsp.id = (o.id || \"sjs\") + \"-\" + coord;\n\t\t\tif(sp.t != \"z\") { sp.v = cell.v; if(cell.z != null) sp.z = cell.z; }\n\t\t\too.push(writextag('td', w, sp));\n\t\t}\n\t\tvar preamble = \"\";\n\t\treturn preamble + oo.join(\"\") + \"\";\n\t}\n\tfunction make_html_preamble(ws, R, o) {\n\t\tvar out = [];\n\t\treturn out.join(\"\") + '';\n\t}\n\tvar _BEGIN = 'SheetJS Table Export';\n\tvar _END = '';\n\tfunction sheet_to_html(ws, opts/*, wb:?Workbook*/) {\n\t\tvar o = opts || {};\n\t\tvar header = o.header != null ? o.header : _BEGIN;\n\t\tvar footer = o.footer != null ? o.footer : _END;\n\t\tvar out = [header];\n\t\tvar r = decode_range(ws['!ref']);\n\t\to.dense = Array.isArray(ws);\n\t\tout.push(make_html_preamble(ws, r, o));\n\t\tfor(var R = r.s.r; R <= r.e.r; ++R) out.push(make_html_row(ws, r, R, o));\n\t\tout.push(\"
\" + footer);\n\t\treturn out.join(\"\");\n\n\t}\n\treturn {\n\t\tto_workbook: html_to_book,\n\t\tto_sheet: html_to_sheet,\n\t\t_row: make_html_row,\n\t\tBEGIN: _BEGIN,\n\t\tEND: _END,\n\t\t_preamble: make_html_preamble,\n\t\tfrom_sheet: sheet_to_html\n\t};\n})();\n\nfunction sheet_add_dom(ws, table, _opts) {\n\tvar opts = _opts || {};\n\tif(DENSE != null) opts.dense = DENSE;\n\tvar or_R = 0, or_C = 0;\n\tif(opts.origin != null) {\n\t\tif(typeof opts.origin == 'number') or_R = opts.origin;\n\t\telse {\n\t\t\tvar _origin = typeof opts.origin == \"string\" ? decode_cell(opts.origin) : opts.origin;\n\t\t\tor_R = _origin.r; or_C = _origin.c;\n\t\t}\n\t}\n\tvar rows = table.getElementsByTagName('tr');\n\tvar sheetRows = Math.min(opts.sheetRows||10000000, rows.length);\n\tvar range = {s:{r:0,c:0},e:{r:or_R,c:or_C}};\n\tif(ws[\"!ref\"]) {\n\t\tvar _range = decode_range(ws[\"!ref\"]);\n\t\trange.s.r = Math.min(range.s.r, _range.s.r);\n\t\trange.s.c = Math.min(range.s.c, _range.s.c);\n\t\trange.e.r = Math.max(range.e.r, _range.e.r);\n\t\trange.e.c = Math.max(range.e.c, _range.e.c);\n\t\tif(or_R == -1) range.e.r = or_R = _range.e.r + 1;\n\t}\n\tvar merges = [], midx = 0;\n\tvar rowinfo = ws[\"!rows\"] || (ws[\"!rows\"] = []);\n\tvar _R = 0, R = 0, _C = 0, C = 0, RS = 0, CS = 0;\n\tif(!ws[\"!cols\"]) ws['!cols'] = [];\n\tfor(; _R < rows.length && R < sheetRows; ++_R) {\n\t\tvar row = rows[_R];\n\t\tif (is_dom_element_hidden(row)) {\n\t\t\tif (opts.display) continue;\n\t\t\trowinfo[R] = {hidden: true};\n\t\t}\n\t\tvar elts = (row.children);\n\t\tfor(_C = C = 0; _C < elts.length; ++_C) {\n\t\t\tvar elt = elts[_C];\n\t\t\tif (opts.display && is_dom_element_hidden(elt)) continue;\n\t\t\tvar v = elt.hasAttribute('v') ? elt.getAttribute('v') : htmldecode(elt.innerHTML);\n\t\t\tvar z = elt.getAttribute('z');\n\t\t\tfor(midx = 0; midx < merges.length; ++midx) {\n\t\t\t\tvar m = merges[midx];\n\t\t\t\tif(m.s.c == C + or_C && m.s.r < R + or_R && R + or_R <= m.e.r) { C = m.e.c+1 - or_C; midx = -1; }\n\t\t\t}\n\t\t\t/* TODO: figure out how to extract nonstandard mso- style */\n\t\t\tCS = +elt.getAttribute(\"colspan\") || 1;\n\t\t\tif( ((RS = (+elt.getAttribute(\"rowspan\") || 1)))>1 || CS>1) merges.push({s:{r:R + or_R,c:C + or_C},e:{r:R + or_R + (RS||1) - 1, c:C + or_C + (CS||1) - 1}});\n\t\t\tvar o = {t:'s', v:v};\n\t\t\tvar _t = elt.getAttribute(\"t\") || \"\";\n\t\t\tif(v != null) {\n\t\t\t\tif(v.length == 0) o.t = _t || 'z';\n\t\t\t\telse if(opts.raw || v.trim().length == 0 || _t == \"s\"){}\n\t\t\t\telse if(v === 'TRUE') o = {t:'b', v:true};\n\t\t\t\telse if(v === 'FALSE') o = {t:'b', v:false};\n\t\t\t\telse if(!isNaN(fuzzynum(v))) o = {t:'n', v:fuzzynum(v)};\n\t\t\t\telse if(!isNaN(fuzzydate(v).getDate())) {\n\t\t\t\t\to = ({t:'d', v:parseDate(v)});\n\t\t\t\t\tif(!opts.cellDates) o = ({t:'n', v:datenum(o.v)});\n\t\t\t\t\to.z = opts.dateNF || SSF._table[14];\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(o.z === undefined && z != null) o.z = z;\n\t\t\tif(opts.dense) { if(!ws[R + or_R]) ws[R + or_R] = []; ws[R + or_R][C + or_C] = o; }\n\t\t\telse ws[encode_cell({c:C + or_C, r:R + or_R})] = o;\n\t\t\tif(range.e.c < C + or_C) range.e.c = C + or_C;\n\t\t\tC += CS;\n\t\t}\n\t\t++R;\n\t}\n\tif(merges.length) ws['!merges'] = (ws[\"!merges\"] || []).concat(merges);\n\trange.e.r = Math.max(range.e.r, R - 1 + or_R);\n\tws['!ref'] = encode_range(range);\n\tif(R >= sheetRows) ws['!fullref'] = encode_range((range.e.r = rows.length-_R+R-1 + or_R,range)); // We can count the real number of rows to parse but we don't to improve the performance\n\treturn ws;\n}\n\nfunction parse_dom_table(table, _opts) {\n\tvar opts = _opts || {};\n\tvar ws = opts.dense ? ([]) : ({});\n\treturn sheet_add_dom(ws, table, _opts);\n}\n\nfunction table_to_book(table, opts) {\n\treturn sheet_to_workbook(parse_dom_table(table, opts), opts);\n}\n\nfunction is_dom_element_hidden(element) {\n\tvar display = '';\n\tvar get_computed_style = get_get_computed_style_function(element);\n\tif(get_computed_style) display = get_computed_style(element).getPropertyValue('display');\n\tif(!display) display = element.style.display; // Fallback for cases when getComputedStyle is not available (e.g. an old browser or some Node.js environments) or doesn't work (e.g. if the element is not inserted to a document)\n\treturn display === 'none';\n}\n\n/* global getComputedStyle */\nfunction get_get_computed_style_function(element) {\n\t// The proper getComputedStyle implementation is the one defined in the element window\n\tif(element.ownerDocument.defaultView && typeof element.ownerDocument.defaultView.getComputedStyle === 'function') return element.ownerDocument.defaultView.getComputedStyle;\n\t// If it is not available, try to get one from the global namespace\n\tif(typeof getComputedStyle === 'function') return getComputedStyle;\n\treturn null;\n}\n/* OpenDocument */\nvar parse_content_xml = (function() {\n\n\tvar parse_text_p = function(text) {\n\t\t/* 6.1.2 White Space Characters */\n\t\tvar fixed = text\n\t\t\t.replace(/[\\t\\r\\n]/g, \" \").trim().replace(/ +/g, \" \")\n\t\t\t.replace(//g,\" \")\n\t\t\t.replace(//g, function($$,$1) { return Array(parseInt($1,10)+1).join(\" \"); })\n\t\t\t.replace(/]*\\/>/g,\"\\t\")\n\t\t\t.replace(//g,\"\\n\");\n\t\tvar v = unescapexml(fixed.replace(/<[^>]*>/g,\"\"));\n\n\t\treturn [v];\n\t};\n\n\tvar number_formats = {\n\t\t/* ods name: [short ssf fmt, long ssf fmt] */\n\t\tday: [\"d\", \"dd\"],\n\t\tmonth: [\"m\", \"mm\"],\n\t\tyear: [\"y\", \"yy\"],\n\t\thours: [\"h\", \"hh\"],\n\t\tminutes: [\"m\", \"mm\"],\n\t\tseconds: [\"s\", \"ss\"],\n\t\t\"am-pm\": [\"A/P\", \"AM/PM\"],\n\t\t\"day-of-week\": [\"ddd\", \"dddd\"],\n\t\tera: [\"e\", \"ee\"],\n\t\t/* there is no native representation of LO \"Q\" format */\n\t\tquarter: [\"\\\\Qm\", \"m\\\\\\\"th quarter\\\"\"]\n\t};\n\n\treturn function pcx(d, _opts) {\n\t\tvar opts = _opts || {};\n\t\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\t\tvar str = xlml_normalize(d);\n\t\tvar state = [], tmp;\n\t\tvar tag;\n\t\tvar NFtag = {name:\"\"}, NF = \"\", pidx = 0;\n\t\tvar sheetag;\n\t\tvar rowtag;\n\t\tvar Sheets = {}, SheetNames = [];\n\t\tvar ws = opts.dense ? ([]) : ({});\n\t\tvar Rn, q;\n\t\tvar ctag = ({value:\"\"});\n\t\tvar textp = \"\", textpidx = 0, textptag;\n\t\tvar textR = [];\n\t\tvar R = -1, C = -1, range = {s: {r:1000000,c:10000000}, e: {r:0, c:0}};\n\t\tvar row_ol = 0;\n\t\tvar number_format_map = {};\n\t\tvar merges = [], mrange = {}, mR = 0, mC = 0;\n\t\tvar rowinfo = [], rowpeat = 1, colpeat = 1;\n\t\tvar arrayf = [];\n\t\tvar WB = {Names:[]};\n\t\tvar atag = ({});\n\t\tvar _Ref = [\"\", \"\"];\n\t\tvar comments = [], comment = ({});\n\t\tvar creator = \"\", creatoridx = 0;\n\t\tvar isstub = false, intable = false;\n\t\tvar i = 0;\n\t\txlmlregex.lastIndex = 0;\n\t\tstr = str.replace(//mg,\"\").replace(//gm,\"\");\n\t\twhile((Rn = xlmlregex.exec(str))) switch((Rn[3]=Rn[3].replace(/_.*$/,\"\"))) {\n\n\t\t\tcase 'table': case '工作表': // 9.1.2 \n\t\t\t\tif(Rn[1]==='/') {\n\t\t\t\t\tif(range.e.c >= range.s.c && range.e.r >= range.s.r) ws['!ref'] = encode_range(range);\n\t\t\t\t\telse ws['!ref'] = \"A1:A1\";\n\t\t\t\t\tif(opts.sheetRows > 0 && opts.sheetRows <= range.e.r) {\n\t\t\t\t\t\tws['!fullref'] = ws['!ref'];\n\t\t\t\t\t\trange.e.r = opts.sheetRows - 1;\n\t\t\t\t\t\tws['!ref'] = encode_range(range);\n\t\t\t\t\t}\n\t\t\t\t\tif(merges.length) ws['!merges'] = merges;\n\t\t\t\t\tif(rowinfo.length) ws[\"!rows\"] = rowinfo;\n\t\t\t\t\tsheetag.name = sheetag['名称'] || sheetag.name;\n\t\t\t\t\tif(typeof JSON !== 'undefined') JSON.stringify(sheetag);\n\t\t\t\t\tSheetNames.push(sheetag.name);\n\t\t\t\t\tSheets[sheetag.name] = ws;\n\t\t\t\t\tintable = false;\n\t\t\t\t}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\t\tsheetag = parsexmltag(Rn[0], false);\n\t\t\t\t\tR = C = -1;\n\t\t\t\t\trange.s.r = range.s.c = 10000000; range.e.r = range.e.c = 0;\n\t\t\t\t\tws = opts.dense ? ([]) : ({}); merges = [];\n\t\t\t\t\trowinfo = [];\n\t\t\t\t\tintable = true;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 'table-row-group': // 9.1.9 \n\t\t\t\tif(Rn[1] === \"/\") --row_ol; else ++row_ol;\n\t\t\t\tbreak;\n\t\t\tcase 'table-row': case '行': // 9.1.3 \n\t\t\t\tif(Rn[1] === '/') { R+=rowpeat; rowpeat = 1; break; }\n\t\t\t\trowtag = parsexmltag(Rn[0], false);\n\t\t\t\tif(rowtag['行号']) R = rowtag['行号'] - 1; else if(R == -1) R = 0;\n\t\t\t\trowpeat = +rowtag['number-rows-repeated'] || 1;\n\t\t\t\t/* TODO: remove magic */\n\t\t\t\tif(rowpeat < 10) for(i = 0; i < rowpeat; ++i) if(row_ol > 0) rowinfo[R + i] = {level: row_ol};\n\t\t\t\tC = -1; break;\n\t\t\tcase 'covered-table-cell': // 9.1.5 \n\t\t\t\tif(Rn[1] !== '/') ++C;\n\t\t\t\tif(opts.sheetStubs) {\n\t\t\t\t\tif(opts.dense) { if(!ws[R]) ws[R] = []; ws[R][C] = {t:'z'}; }\n\t\t\t\t\telse ws[encode_cell({r:R,c:C})] = {t:'z'};\n\t\t\t\t}\n\t\t\t\ttextp = \"\"; textR = [];\n\t\t\t\tbreak; /* stub */\n\t\t\tcase 'table-cell': case '数据':\n\t\t\t\tif(Rn[0].charAt(Rn[0].length-2) === '/') {\n\t\t\t\t\t++C;\n\t\t\t\t\tctag = parsexmltag(Rn[0], false);\n\t\t\t\t\tcolpeat = parseInt(ctag['number-columns-repeated']||\"1\", 10);\n\t\t\t\t\tq = ({t:'z', v:null});\n\t\t\t\t\tif(ctag.formula && opts.cellFormula != false) q.f = ods_to_csf_formula(unescapexml(ctag.formula));\n\t\t\t\t\tif((ctag['数据类型'] || ctag['value-type']) == \"string\") {\n\t\t\t\t\t\tq.t = \"s\"; q.v = unescapexml(ctag['string-value'] || \"\");\n\t\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\t\tif(!ws[R]) ws[R] = [];\n\t\t\t\t\t\t\tws[R][C] = q;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tws[encode_cell({r:R,c:C})] = q;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tC+= colpeat-1;\n\t\t\t\t} else if(Rn[1]!=='/') {\n\t\t\t\t\t++C;\n\t\t\t\t\tcolpeat = 1;\n\t\t\t\t\tvar rptR = rowpeat ? R + rowpeat - 1 : R;\n\t\t\t\t\tif(C > range.e.c) range.e.c = C;\n\t\t\t\t\tif(C < range.s.c) range.s.c = C;\n\t\t\t\t\tif(R < range.s.r) range.s.r = R;\n\t\t\t\t\tif(rptR > range.e.r) range.e.r = rptR;\n\t\t\t\t\tctag = parsexmltag(Rn[0], false);\n\t\t\t\t\tcomments = []; comment = ({});\n\t\t\t\t\tq = ({t:ctag['数据类型'] || ctag['value-type'], v:null});\n\t\t\t\t\tif(opts.cellFormula) {\n\t\t\t\t\t\tif(ctag.formula) ctag.formula = unescapexml(ctag.formula);\n\t\t\t\t\t\tif(ctag['number-matrix-columns-spanned'] && ctag['number-matrix-rows-spanned']) {\n\t\t\t\t\t\t\tmR = parseInt(ctag['number-matrix-rows-spanned'],10) || 0;\n\t\t\t\t\t\t\tmC = parseInt(ctag['number-matrix-columns-spanned'],10) || 0;\n\t\t\t\t\t\t\tmrange = {s: {r:R,c:C}, e:{r:R + mR-1,c:C + mC-1}};\n\t\t\t\t\t\t\tq.F = encode_range(mrange);\n\t\t\t\t\t\t\tarrayf.push([mrange, q.F]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(ctag.formula) q.f = ods_to_csf_formula(ctag.formula);\n\t\t\t\t\t\telse for(i = 0; i < arrayf.length; ++i)\n\t\t\t\t\t\t\tif(R >= arrayf[i][0].s.r && R <= arrayf[i][0].e.r)\n\t\t\t\t\t\t\t\tif(C >= arrayf[i][0].s.c && C <= arrayf[i][0].e.c)\n\t\t\t\t\t\t\t\t\tq.F = arrayf[i][1];\n\t\t\t\t\t}\n\t\t\t\t\tif(ctag['number-columns-spanned'] || ctag['number-rows-spanned']) {\n\t\t\t\t\t\tmR = parseInt(ctag['number-rows-spanned'],10) || 0;\n\t\t\t\t\t\tmC = parseInt(ctag['number-columns-spanned'],10) || 0;\n\t\t\t\t\t\tmrange = {s: {r:R,c:C}, e:{r:R + mR-1,c:C + mC-1}};\n\t\t\t\t\t\tmerges.push(mrange);\n\t\t\t\t\t}\n\n\t\t\t\t\t/* 19.675.2 table:number-columns-repeated */\n\t\t\t\t\tif(ctag['number-columns-repeated']) colpeat = parseInt(ctag['number-columns-repeated'], 10);\n\n\t\t\t\t\t/* 19.385 office:value-type */\n\t\t\t\t\tswitch(q.t) {\n\t\t\t\t\t\tcase 'boolean': q.t = 'b'; q.v = parsexmlbool(ctag['boolean-value']); break;\n\t\t\t\t\t\tcase 'float': q.t = 'n'; q.v = parseFloat(ctag.value); break;\n\t\t\t\t\t\tcase 'percentage': q.t = 'n'; q.v = parseFloat(ctag.value); break;\n\t\t\t\t\t\tcase 'currency': q.t = 'n'; q.v = parseFloat(ctag.value); break;\n\t\t\t\t\t\tcase 'date': q.t = 'd'; q.v = parseDate(ctag['date-value']);\n\t\t\t\t\t\t\tif(!opts.cellDates) { q.t = 'n'; q.v = datenum(q.v); }\n\t\t\t\t\t\t\tq.z = 'm/d/yy'; break;\n\t\t\t\t\t\tcase 'time': q.t = 'n'; q.v = parse_isodur(ctag['time-value'])/86400; break;\n\t\t\t\t\t\tcase 'number': q.t = 'n'; q.v = parseFloat(ctag['数据数值']); break;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tif(q.t === 'string' || q.t === 'text' || !q.t) {\n\t\t\t\t\t\t\t\tq.t = 's';\n\t\t\t\t\t\t\t\tif(ctag['string-value'] != null) { textp = unescapexml(ctag['string-value']); textR = []; }\n\t\t\t\t\t\t\t} else throw new Error('Unsupported value type ' + q.t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tisstub = false;\n\t\t\t\t\tif(q.t === 's') {\n\t\t\t\t\t\tq.v = textp || '';\n\t\t\t\t\t\tif(textR.length) q.R = textR;\n\t\t\t\t\t\tisstub = textpidx == 0;\n\t\t\t\t\t}\n\t\t\t\t\tif(atag.Target) q.l = atag;\n\t\t\t\t\tif(comments.length > 0) { q.c = comments; comments = []; }\n\t\t\t\t\tif(textp && opts.cellText !== false) q.w = textp;\n\t\t\t\t\tif(isstub) { q.t = \"z\"; delete q.v; }\n\t\t\t\t\tif(!isstub || opts.sheetStubs) {\n\t\t\t\t\t\tif(!(opts.sheetRows && opts.sheetRows <= R)) {\n\t\t\t\t\t\t\tfor(var rpt = 0; rpt < rowpeat; ++rpt) {\n\t\t\t\t\t\t\t\tcolpeat = parseInt(ctag['number-columns-repeated']||\"1\", 10);\n\t\t\t\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\t\t\t\tif(!ws[R + rpt]) ws[R + rpt] = [];\n\t\t\t\t\t\t\t\t\tws[R + rpt][C] = rpt == 0 ? q : dup(q);\n\t\t\t\t\t\t\t\t\twhile(--colpeat > 0) ws[R + rpt][C + colpeat] = dup(q);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tws[encode_cell({r:R + rpt,c:C})] = q;\n\t\t\t\t\t\t\t\t\twhile(--colpeat > 0) ws[encode_cell({r:R + rpt,c:C + colpeat})] = dup(q);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif(range.e.c <= C) range.e.c = C;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcolpeat = parseInt(ctag['number-columns-repeated']||\"1\", 10);\n\t\t\t\t\tC += colpeat-1; colpeat = 0;\n\t\t\t\t\tq = {};\n\t\t\t\t\ttextp = \"\"; textR = [];\n\t\t\t\t}\n\t\t\t\tatag = ({});\n\t\t\t\tbreak; // 9.1.4 \n\n\t\t\t/* pure state */\n\t\t\tcase 'document': // TODO: is the root for FODS\n\t\t\tcase 'document-content': case '电子表格文档': // 3.1.3.2 \n\t\t\tcase 'spreadsheet': case '主体': // 3.7 \n\t\t\tcase 'scripts': // 3.12 \n\t\t\tcase 'styles': // TODO \n\t\t\tcase 'font-face-decls': // 3.14 \n\t\t\tcase 'master-styles': //3.15.4 -- relevant for FODS\n\t\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw \"Bad state: \"+tmp;}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);\n\t\t\t\tbreak;\n\n\t\t\tcase 'annotation': // 14.1 \n\t\t\t\tif(Rn[1]==='/'){\n\t\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw \"Bad state: \"+tmp;\n\t\t\t\t\tcomment.t = textp;\n\t\t\t\t\tif(textR.length) comment.R = textR;\n\t\t\t\t\tcomment.a = creator;\n\t\t\t\t\tcomments.push(comment);\n\t\t\t\t}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') {state.push([Rn[3], false]);}\n\t\t\t\tcreator = \"\"; creatoridx = 0;\n\t\t\t\ttextp = \"\"; textpidx = 0; textR = [];\n\t\t\t\tbreak;\n\n\t\t\tcase 'creator': // 4.3.2.7 \n\t\t\t\tif(Rn[1]==='/') { creator = str.slice(creatoridx,Rn.index); }\n\t\t\t\telse creatoridx = Rn.index + Rn[0].length;\n\t\t\t\tbreak;\n\n\t\t\t/* ignore state */\n\t\t\tcase 'meta': case '元数据': // TODO: FODS/UOF\n\t\t\tcase 'settings': // TODO: \n\t\t\tcase 'config-item-set': // TODO: \n\t\t\tcase 'config-item-map-indexed': // TODO: \n\t\t\tcase 'config-item-map-entry': // TODO: \n\t\t\tcase 'config-item-map-named': // TODO: \n\t\t\tcase 'shapes': // 9.2.8 \n\t\t\tcase 'frame': // 10.4.2 \n\t\t\tcase 'text-box': // 10.4.3 \n\t\t\tcase 'image': // 10.4.4 \n\t\t\tcase 'data-pilot-tables': // 9.6.2 \n\t\t\tcase 'list-style': // 16.30 \n\t\t\tcase 'form': // 13.13 \n\t\t\tcase 'dde-links': // 9.8 \n\t\t\tcase 'event-listeners': // TODO\n\t\t\tcase 'chart': // TODO\n\t\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw \"Bad state: \"+tmp;}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], false]);\n\t\t\t\ttextp = \"\"; textpidx = 0; textR = [];\n\t\t\t\tbreak;\n\n\t\t\tcase 'scientific-number': // TODO: \n\t\t\t\tbreak;\n\t\t\tcase 'currency-symbol': // TODO: \n\t\t\t\tbreak;\n\t\t\tcase 'currency-style': // TODO: \n\t\t\t\tbreak;\n\t\t\tcase 'number-style': // 16.27.2 \n\t\t\tcase 'percentage-style': // 16.27.9 \n\t\t\tcase 'date-style': // 16.27.10 \n\t\t\tcase 'time-style': // 16.27.18 \n\t\t\t\tif(Rn[1]==='/'){\n\t\t\t\t\tnumber_format_map[NFtag.name] = NF;\n\t\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw \"Bad state: \"+tmp;\n\t\t\t\t} else if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\t\tNF = \"\";\n\t\t\t\t\tNFtag = parsexmltag(Rn[0], false);\n\t\t\t\t\tstate.push([Rn[3], true]);\n\t\t\t\t} break;\n\n\t\t\tcase 'script': break; // 3.13 \n\t\t\tcase 'libraries': break; // TODO: \n\t\t\tcase 'automatic-styles': break; // 3.15.3 \n\n\t\t\tcase 'default-style': // TODO: \n\t\t\tcase 'page-layout': break; // TODO: \n\t\t\tcase 'style': // 16.2 \n\t\t\t\tbreak;\n\t\t\tcase 'map': break; // 16.3 \n\t\t\tcase 'font-face': break; // 16.21 \n\n\t\t\tcase 'paragraph-properties': break; // 17.6 \n\t\t\tcase 'table-properties': break; // 17.15 \n\t\t\tcase 'table-column-properties': break; // 17.16 \n\t\t\tcase 'table-row-properties': break; // 17.17 \n\t\t\tcase 'table-cell-properties': break; // 17.18 \n\n\t\t\tcase 'number': // 16.27.3 \n\t\t\t\tswitch(state[state.length-1][0]) {\n\t\t\t\t\tcase 'time-style':\n\t\t\t\t\tcase 'date-style':\n\t\t\t\t\t\ttag = parsexmltag(Rn[0], false);\n\t\t\t\t\t\tNF += number_formats[Rn[3]][tag.style==='long'?1:0]; break;\n\t\t\t\t} break;\n\n\t\t\tcase 'fraction': break; // TODO 16.27.6 \n\n\t\t\tcase 'day': // 16.27.11 \n\t\t\tcase 'month': // 16.27.12 \n\t\t\tcase 'year': // 16.27.13 \n\t\t\tcase 'era': // 16.27.14 \n\t\t\tcase 'day-of-week': // 16.27.15 \n\t\t\tcase 'week-of-year': // 16.27.16 \n\t\t\tcase 'quarter': // 16.27.17 \n\t\t\tcase 'hours': // 16.27.19 \n\t\t\tcase 'minutes': // 16.27.20 \n\t\t\tcase 'seconds': // 16.27.21 \n\t\t\tcase 'am-pm': // 16.27.22 \n\t\t\t\tswitch(state[state.length-1][0]) {\n\t\t\t\t\tcase 'time-style':\n\t\t\t\t\tcase 'date-style':\n\t\t\t\t\t\ttag = parsexmltag(Rn[0], false);\n\t\t\t\t\t\tNF += number_formats[Rn[3]][tag.style==='long'?1:0]; break;\n\t\t\t\t} break;\n\n\t\t\tcase 'boolean-style': break; // 16.27.23 \n\t\t\tcase 'boolean': break; // 16.27.24 \n\t\t\tcase 'text-style': break; // 16.27.25 \n\t\t\tcase 'text': // 16.27.26 \n\t\t\t\tif(Rn[0].slice(-2) === \"/>\") break;\n\t\t\t\telse if(Rn[1]===\"/\") switch(state[state.length-1][0]) {\n\t\t\t\t\tcase 'number-style':\n\t\t\t\t\tcase 'date-style':\n\t\t\t\t\tcase 'time-style':\n\t\t\t\t\t\tNF += str.slice(pidx, Rn.index);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\telse pidx = Rn.index + Rn[0].length;\n\t\t\t\tbreak;\n\n\t\t\tcase 'named-range': // 9.4.12 \n\t\t\t\ttag = parsexmltag(Rn[0], false);\n\t\t\t\t_Ref = ods_to_csf_3D(tag['cell-range-address']);\n\t\t\t\tvar nrange = ({Name:tag.name, Ref:_Ref[0] + '!' + _Ref[1]});\n\t\t\t\tif(intable) nrange.Sheet = SheetNames.length;\n\t\t\t\tWB.Names.push(nrange);\n\t\t\t\tbreak;\n\n\t\t\tcase 'text-content': break; // 16.27.27 \n\t\t\tcase 'text-properties': break; // 16.27.27 \n\t\t\tcase 'embedded-text': break; // 16.27.4 \n\n\t\t\tcase 'body': case '电子表格': break; // 3.3 16.9.6 19.726.3\n\n\t\t\tcase 'forms': break; // 12.25.2 13.2\n\t\t\tcase 'table-column': break; // 9.1.6 \n\t\t\tcase 'table-header-rows': break; // 9.1.7 \n\t\t\tcase 'table-rows': break; // 9.1.12 \n\t\t\t/* TODO: outline levels */\n\t\t\tcase 'table-column-group': break; // 9.1.10 \n\t\t\tcase 'table-header-columns': break; // 9.1.11 \n\t\t\tcase 'table-columns': break; // 9.1.12 \n\n\t\t\tcase 'null-date': break; // 9.4.2 TODO: date1904\n\n\t\t\tcase 'graphic-properties': break; // 17.21 \n\t\t\tcase 'calculation-settings': break; // 9.4.1 \n\t\t\tcase 'named-expressions': break; // 9.4.11 \n\t\t\tcase 'label-range': break; // 9.4.9 \n\t\t\tcase 'label-ranges': break; // 9.4.10 \n\t\t\tcase 'named-expression': break; // 9.4.13 \n\t\t\tcase 'sort': break; // 9.4.19 \n\t\t\tcase 'sort-by': break; // 9.4.20 \n\t\t\tcase 'sort-groups': break; // 9.4.22 \n\n\t\t\tcase 'tab': break; // 6.1.4 \n\t\t\tcase 'line-break': break; // 6.1.5 \n\t\t\tcase 'span': break; // 6.1.7 \n\t\t\tcase 'p': case '文本串': // 5.1.3 \n\t\t\t\tif(['master-styles'].indexOf(state[state.length-1][0]) > -1) break;\n\t\t\t\tif(Rn[1]==='/' && (!ctag || !ctag['string-value'])) {\n\t\t\t\t\tvar ptp = parse_text_p(str.slice(textpidx,Rn.index), textptag);\n\t\t\t\t\ttextp = (textp.length > 0 ? textp + \"\\n\" : \"\") + ptp[0];\n\t\t\t\t} else { textptag = parsexmltag(Rn[0], false); textpidx = Rn.index + Rn[0].length; }\n\t\t\t\tbreak; // \n\t\t\tcase 's': break; // \n\n\t\t\tcase 'database-range': // 9.4.15 \n\t\t\t\tif(Rn[1]==='/') break;\n\t\t\t\ttry {\n\t\t\t\t\t_Ref = ods_to_csf_3D(parsexmltag(Rn[0])['target-range-address']);\n\t\t\t\t\tSheets[_Ref[0]]['!autofilter'] = { ref:_Ref[1] };\n\t\t\t\t} catch(e) {/* empty */}\n\t\t\t\tbreak;\n\n\t\t\tcase 'date': break; // <*:date>\n\n\t\t\tcase 'object': break; // 10.4.6.2 \n\t\t\tcase 'title': case '标题': break; // <*:title> OR \n\t\t\tcase 'desc': break; // <*:desc>\n\t\t\tcase 'binary-data': break; // 10.4.5 TODO: b64 blob\n\n\t\t\t/* 9.2 Advanced Tables */\n\t\t\tcase 'table-source': break; // 9.2.6\n\t\t\tcase 'scenario': break; // 9.2.6\n\n\t\t\tcase 'iteration': break; // 9.4.3 \n\t\t\tcase 'content-validations': break; // 9.4.4 \n\t\t\tcase 'filter': break; // 9.5.2 \n\t\t\tcase 'filter-and': break; // 9.5.3 \n\t\t\tcase 'filter-or': break; // 9.5.4 \n\t\t\tcase 'filter-condition': break; // 9.5.5 \n\n\t\t\tcase 'list-level-style-bullet': break; // 16.31 \n\t\t\tcase 'page-count': break; // TODO \n\t\t\tcase 'time': break; // TODO \n\n\t\t\t/* 9.3 Advanced Table Cells */\n\t\t\tcase 'cell-range-source': break; // 9.3.1 \n\t\t\tcase 'property': break; // 13.8 \n\n\t\t\tcase 'a': // 6.1.8 hyperlink\n\t\t\t\tif(Rn[1]!== '/') {\n\t\t\t\t\tatag = parsexmltag(Rn[0], false);\n\t\t\t\t\tif(!atag.href) break;\n\t\t\t\t\tatag.Target = atag.href; delete atag.href;\n\t\t\t\t\tif(atag.Target.charAt(0) == \"#\" && atag.Target.indexOf(\".\") > -1) {\n\t\t\t\t\t\t_Ref = ods_to_csf_3D(atag.Target.slice(1));\n\t\t\t\t\t\tatag.Target = \"#\" + _Ref[0] + \"!\" + _Ref[1];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t/* non-standard */\n\t\t\tcase 'table-protection': break;\n\t\t\tcase 'data-pilot-grand-total': break; // ';\n\treturn function wso() {\n\t\treturn XML_HEADER + payload;\n\t};\n})();\nvar write_content_ods = (function() {\n\t/* 6.1.2 White Space Characters */\n\tvar write_text_p = function(text) {\n\t\treturn escapexml(text)\n\t\t\t.replace(/ +/g, function($$){return '';})\n\t\t\t.replace(/\\t/g, \"\")\n\t\t\t.replace(/\\n/g, \"\")\n\t\t\t.replace(/^ /, \"\").replace(/ $/, \"\");\n\t};\n\n\tvar null_cell_xml = ' \\n';\n\tvar covered_cell_xml = ' \\n';\n\tvar write_ws = function(ws, wb, i) {\n\t\t/* Section 9 Tables */\n\t\tvar o = [];\n\t\to.push(' \\n');\n\t\tvar R=0,C=0, range = decode_range(ws['!ref']);\n\t\tvar marr = ws['!merges'] || [], mi = 0;\n\t\tvar dense = Array.isArray(ws);\n\t\tfor(R = 0; R < range.s.r; ++R) o.push(' \\n');\n\t\tfor(; R <= range.e.r; ++R) {\n\t\t\to.push(' \\n');\n\t\t\tfor(C=0; C < range.s.c; ++C) o.push(null_cell_xml);\n\t\t\tfor(; C <= range.e.c; ++C) {\n\t\t\t\tvar skip = false, ct = {}, textp = \"\";\n\t\t\t\tfor(mi = 0; mi != marr.length; ++mi) {\n\t\t\t\t\tif(marr[mi].s.c > C) continue;\n\t\t\t\t\tif(marr[mi].s.r > R) continue;\n\t\t\t\t\tif(marr[mi].e.c < C) continue;\n\t\t\t\t\tif(marr[mi].e.r < R) continue;\n\t\t\t\t\tif(marr[mi].s.c != C || marr[mi].s.r != R) skip = true;\n\t\t\t\t\tct['table:number-columns-spanned'] = (marr[mi].e.c - marr[mi].s.c + 1);\n\t\t\t\t\tct['table:number-rows-spanned'] = (marr[mi].e.r - marr[mi].s.r + 1);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif(skip) { o.push(covered_cell_xml); continue; }\n\t\t\t\tvar ref = encode_cell({r:R, c:C}), cell = dense ? (ws[R]||[])[C]: ws[ref];\n\t\t\t\tif(cell && cell.f) {\n\t\t\t\t\tct['table:formula'] = escapexml(csf_to_ods_formula(cell.f));\n\t\t\t\t\tif(cell.F) {\n\t\t\t\t\t\tif(cell.F.slice(0, ref.length) == ref) {\n\t\t\t\t\t\t\tvar _Fref = decode_range(cell.F);\n\t\t\t\t\t\t\tct['table:number-matrix-columns-spanned'] = (_Fref.e.c - _Fref.s.c + 1);\n\t\t\t\t\t\t\tct['table:number-matrix-rows-spanned'] = (_Fref.e.r - _Fref.s.r + 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(!cell) { o.push(null_cell_xml); continue; }\n\t\t\t\tswitch(cell.t) {\n\t\t\t\t\tcase 'b':\n\t\t\t\t\t\ttextp = (cell.v ? 'TRUE' : 'FALSE');\n\t\t\t\t\t\tct['office:value-type'] = \"boolean\";\n\t\t\t\t\t\tct['office:boolean-value'] = (cell.v ? 'true' : 'false');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'n':\n\t\t\t\t\t\ttextp = (cell.w||String(cell.v||0));\n\t\t\t\t\t\tct['office:value-type'] = \"float\";\n\t\t\t\t\t\tct['office:value'] = (cell.v||0);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 's': case 'str':\n\t\t\t\t\t\ttextp = cell.v == null ? \"\" : cell.v;\n\t\t\t\t\t\tct['office:value-type'] = \"string\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'd':\n\t\t\t\t\t\ttextp = (cell.w||(parseDate(cell.v).toISOString()));\n\t\t\t\t\t\tct['office:value-type'] = \"date\";\n\t\t\t\t\t\tct['office:date-value'] = (parseDate(cell.v).toISOString());\n\t\t\t\t\t\tct['table:style-name'] = \"ce1\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t//case 'e':\n\t\t\t\t\tdefault: o.push(null_cell_xml); continue;\n\t\t\t\t}\n\t\t\t\tvar text_p = write_text_p(textp);\n\t\t\t\tif(cell.l && cell.l.Target) {\n\t\t\t\t\tvar _tgt = cell.l.Target; _tgt = _tgt.charAt(0) == \"#\" ? \"#\" + csf_to_ods_3D(_tgt.slice(1)) : _tgt;\n\t\t\t\t\ttext_p = writextag('text:a', text_p, {'xlink:href': _tgt});\n\t\t\t\t}\n\t\t\t\to.push(' ' + writextag('table:table-cell', writextag('text:p', text_p, {}), ct) + '\\n');\n\t\t\t}\n\t\t\to.push(' \\n');\n\t\t}\n\t\to.push(' \\n');\n\t\treturn o.join(\"\");\n\t};\n\n\tvar write_automatic_styles_ods = function(o) {\n\t\to.push(' \\n');\n\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\t\to.push(' /\\n');\n\t\to.push(' \\n');\n\t\to.push(' /\\n');\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\n\t\t/* table */\n\t\to.push(' \\n'); // style:master-page-name=\"mp1\">\\n');\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\n\t\t/* table cells, text */\n\t\to.push(' \\n');\n\n\t\t/* page-layout */\n\n\t\to.push(' \\n');\n\t};\n\n\treturn function wcx(wb, opts) {\n\t\tvar o = [XML_HEADER];\n\t\t/* 3.1.3.2 */\n\t\tvar attr = wxt_helper({\n\t\t\t'xmlns:office': \"urn:oasis:names:tc:opendocument:xmlns:office:1.0\",\n\t\t\t'xmlns:table': \"urn:oasis:names:tc:opendocument:xmlns:table:1.0\",\n\t\t\t'xmlns:style': \"urn:oasis:names:tc:opendocument:xmlns:style:1.0\",\n\t\t\t'xmlns:text': \"urn:oasis:names:tc:opendocument:xmlns:text:1.0\",\n\t\t\t'xmlns:draw': \"urn:oasis:names:tc:opendocument:xmlns:drawing:1.0\",\n\t\t\t'xmlns:fo': \"urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0\",\n\t\t\t'xmlns:xlink': \"http://www.w3.org/1999/xlink\",\n\t\t\t'xmlns:dc': \"http://purl.org/dc/elements/1.1/\",\n\t\t\t'xmlns:meta': \"urn:oasis:names:tc:opendocument:xmlns:meta:1.0\",\n\t\t\t'xmlns:number': \"urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0\",\n\t\t\t'xmlns:presentation': \"urn:oasis:names:tc:opendocument:xmlns:presentation:1.0\",\n\t\t\t'xmlns:svg': \"urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0\",\n\t\t\t'xmlns:chart': \"urn:oasis:names:tc:opendocument:xmlns:chart:1.0\",\n\t\t\t'xmlns:dr3d': \"urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0\",\n\t\t\t'xmlns:math': \"http://www.w3.org/1998/Math/MathML\",\n\t\t\t'xmlns:form': \"urn:oasis:names:tc:opendocument:xmlns:form:1.0\",\n\t\t\t'xmlns:script': \"urn:oasis:names:tc:opendocument:xmlns:script:1.0\",\n\t\t\t'xmlns:ooo': \"http://openoffice.org/2004/office\",\n\t\t\t'xmlns:ooow': \"http://openoffice.org/2004/writer\",\n\t\t\t'xmlns:oooc': \"http://openoffice.org/2004/calc\",\n\t\t\t'xmlns:dom': \"http://www.w3.org/2001/xml-events\",\n\t\t\t'xmlns:xforms': \"http://www.w3.org/2002/xforms\",\n\t\t\t'xmlns:xsd': \"http://www.w3.org/2001/XMLSchema\",\n\t\t\t'xmlns:xsi': \"http://www.w3.org/2001/XMLSchema-instance\",\n\t\t\t'xmlns:sheet': \"urn:oasis:names:tc:opendocument:sh33tjs:1.0\",\n\t\t\t'xmlns:rpt': \"http://openoffice.org/2005/report\",\n\t\t\t'xmlns:of': \"urn:oasis:names:tc:opendocument:xmlns:of:1.2\",\n\t\t\t'xmlns:xhtml': \"http://www.w3.org/1999/xhtml\",\n\t\t\t'xmlns:grddl': \"http://www.w3.org/2003/g/data-view#\",\n\t\t\t'xmlns:tableooo': \"http://openoffice.org/2009/table\",\n\t\t\t'xmlns:drawooo': \"http://openoffice.org/2010/draw\",\n\t\t\t'xmlns:calcext': \"urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0\",\n\t\t\t'xmlns:loext': \"urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0\",\n\t\t\t'xmlns:field': \"urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0\",\n\t\t\t'xmlns:formx': \"urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0\",\n\t\t\t'xmlns:css3t': \"http://www.w3.org/TR/css3-text/\",\n\t\t\t'office:version': \"1.2\"\n\t\t});\n\n\t\tvar fods = wxt_helper({\n\t\t\t'xmlns:config': \"urn:oasis:names:tc:opendocument:xmlns:config:1.0\",\n\t\t\t'office:mimetype': \"application/vnd.oasis.opendocument.spreadsheet\"\n\t\t});\n\n\t\tif(opts.bookType == \"fods\") o.push('\\n');\n\t\telse o.push('\\n');\n\t\twrite_automatic_styles_ods(o);\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\t\tfor(var i = 0; i != wb.SheetNames.length; ++i) o.push(write_ws(wb.Sheets[wb.SheetNames[i]], wb, i, opts));\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\t\tif(opts.bookType == \"fods\") o.push('');\n\t\telse o.push('');\n\t\treturn o.join(\"\");\n\t};\n})();\n\nfunction write_ods(wb, opts) {\n\tif(opts.bookType == \"fods\") return write_content_ods(wb, opts);\n\nvar zip = zip_new();\n\tvar f = \"\";\n\n\tvar manifest = [];\n\tvar rdf = [];\n\n\t/* Part 3 Section 3.3 MIME Media Type */\n\tf = \"mimetype\";\n\tzip_add_file(zip, f, \"application/vnd.oasis.opendocument.spreadsheet\");\n\n\t/* Part 1 Section 2.2 Documents */\n\tf = \"content.xml\";\n\tzip_add_file(zip, f, write_content_ods(wb, opts));\n\tmanifest.push([f, \"text/xml\"]);\n\trdf.push([f, \"ContentFile\"]);\n\n\t/* TODO: these are hard-coded styles to satiate excel */\n\tf = \"styles.xml\";\n\tzip_add_file(zip, f, write_styles_ods(wb, opts));\n\tmanifest.push([f, \"text/xml\"]);\n\trdf.push([f, \"StylesFile\"]);\n\n\t/* TODO: this is hard-coded to satiate excel */\n\tf = \"meta.xml\";\n\tzip_add_file(zip, f, write_meta_ods());\n\tmanifest.push([f, \"text/xml\"]);\n\trdf.push([f, \"MetadataFile\"]);\n\n\t/* Part 3 Section 6 Metadata Manifest File */\n\tf = \"manifest.rdf\";\n\tzip_add_file(zip, f, write_rdf(rdf/*, opts*/));\n\tmanifest.push([f, \"application/rdf+xml\"]);\n\n\t/* Part 3 Section 4 Manifest File */\n\tf = \"META-INF/manifest.xml\";\n\tzip_add_file(zip, f, write_manifest(manifest/*, opts*/));\n\n\treturn zip;\n}\n\nfunction write_sheet_index(wb, sheet) {\n\tif(!sheet) return 0;\n\tvar idx = wb.SheetNames.indexOf(sheet);\n\tif(idx == -1) throw new Error(\"Sheet not found: \" + sheet);\n\treturn idx;\n}\n\nfunction write_obj_str(factory) {\n\treturn function write_str(wb, o) {\n\t\tvar idx = write_sheet_index(wb, o.sheet);\n\t\treturn factory.from_sheet(wb.Sheets[wb.SheetNames[idx]], o, wb);\n\t};\n}\n\nvar write_htm_str = write_obj_str(HTML_);\nvar write_csv_str = write_obj_str({from_sheet:sheet_to_csv});\nvar write_slk_str = write_obj_str(typeof SYLK !== \"undefined\" ? SYLK : {});\nvar write_dif_str = write_obj_str(typeof DIF !== \"undefined\" ? DIF : {});\nvar write_prn_str = write_obj_str(typeof PRN !== \"undefined\" ? PRN : {});\nvar write_rtf_str = write_obj_str(typeof RTF !== \"undefined\" ? RTF : {});\nvar write_txt_str = write_obj_str({from_sheet:sheet_to_txt});\nvar write_dbf_buf = write_obj_str(typeof DBF !== \"undefined\" ? DBF : {});\nvar write_eth_str = write_obj_str(typeof ETH !== \"undefined\" ? ETH : {});\n\nfunction fix_opts_func(defaults) {\n\treturn function fix_opts(opts) {\n\t\tfor(var i = 0; i != defaults.length; ++i) {\n\t\t\tvar d = defaults[i];\n\t\t\tif(opts[d[0]] === undefined) opts[d[0]] = d[1];\n\t\t\tif(d[2] === 'n') opts[d[0]] = Number(opts[d[0]]);\n\t\t}\n\t};\n}\n\nvar fix_read_opts = function(opts) {\nfix_opts_func([\n\t['cellNF', false], /* emit cell number format string as .z */\n\t['cellHTML', true], /* emit html string as .h */\n\t['cellFormula', true], /* emit formulae as .f */\n\t['cellStyles', false], /* emits style/theme as .s */\n\t['cellText', true], /* emit formatted text as .w */\n\t['cellDates', false], /* emit date cells with type `d` */\n\n\t['sheetStubs', false], /* emit empty cells */\n\t['sheetRows', 0, 'n'], /* read n rows (0 = read all rows) */\n\n\t['bookDeps', false], /* parse calculation chains */\n\t['bookSheets', false], /* only try to get sheet names (no Sheets) */\n\t['bookProps', false], /* only try to get properties (no Sheets) */\n\t['bookFiles', false], /* include raw file structure (keys, files, cfb) */\n\t['bookVBA', false], /* include vba raw data (vbaraw) */\n\n\t['password',''], /* password */\n\t['WTF', false] /* WTF mode (throws errors) */\n])(opts);\n};\n\nvar fix_write_opts = fix_opts_func([\n\t['cellDates', false], /* write date cells with type `d` */\n\n\t['bookSST', false], /* Generate Shared String Table */\n\n\t['bookType', 'xlsx'], /* Type of workbook (xlsx/m/b) */\n\n\t['compression', false], /* Use file compression */\n\n\t['WTF', false] /* WTF mode (throws errors) */\n]);\nfunction get_sheet_type(n) {\n\tif(RELS.WS.indexOf(n) > -1) return \"sheet\";\n\tif(RELS.CS && n == RELS.CS) return \"chart\";\n\tif(RELS.DS && n == RELS.DS) return \"dialog\";\n\tif(RELS.MS && n == RELS.MS) return \"macro\";\n\treturn (n && n.length) ? n : \"sheet\";\n}\nfunction safe_parse_wbrels(wbrels, sheets) {\n\tif(!wbrels) return 0;\n\ttry {\n\t\twbrels = sheets.map(function pwbr(w) { if(!w.id) w.id = w.strRelID; return [w.name, wbrels['!id'][w.id].Target, get_sheet_type(wbrels['!id'][w.id].Type)]; });\n\t} catch(e) { return null; }\n\treturn !wbrels || wbrels.length === 0 ? null : wbrels;\n}\n\nfunction safe_parse_sheet(zip, path, relsPath, sheet, idx, sheetRels, sheets, stype, opts, wb, themes, styles) {\n\ttry {\n\t\tsheetRels[sheet]=parse_rels(getzipstr(zip, relsPath, true), path);\n\t\tvar data = getzipdata(zip, path);\n\t\tvar _ws;\n\t\tswitch(stype) {\n\t\t\tcase 'sheet': _ws = parse_ws(data, path, idx, opts, sheetRels[sheet], wb, themes, styles); break;\n\t\t\tcase 'chart': _ws = parse_cs(data, path, idx, opts, sheetRels[sheet], wb, themes, styles);\n\t\t\t\tif(!_ws || !_ws['!drawel']) break;\n\t\t\t\tvar dfile = resolve_path(_ws['!drawel'].Target, path);\n\t\t\t\tvar drelsp = get_rels_path(dfile);\n\t\t\t\tvar draw = parse_drawing(getzipstr(zip, dfile, true), parse_rels(getzipstr(zip, drelsp, true), dfile));\n\t\t\t\tvar chartp = resolve_path(draw, dfile);\n\t\t\t\tvar crelsp = get_rels_path(chartp);\n\t\t\t\t_ws = parse_chart(getzipstr(zip, chartp, true), chartp, opts, parse_rels(getzipstr(zip, crelsp, true), chartp), wb, _ws);\n\t\t\t\tbreak;\n\t\t\tcase 'macro': _ws = parse_ms(data, path, idx, opts, sheetRels[sheet], wb, themes, styles); break;\n\t\t\tcase 'dialog': _ws = parse_ds(data, path, idx, opts, sheetRels[sheet], wb, themes, styles); break;\n\t\t\tdefault: throw new Error(\"Unrecognized sheet type \" + stype);\n\t\t}\n\t\tsheets[sheet] = _ws;\n\n\t\t/* scan rels for comments */\n\t\tvar comments = [];\n\t\tif(sheetRels && sheetRels[sheet]) keys(sheetRels[sheet]).forEach(function(n) {\n\t\t\tif(sheetRels[sheet][n].Type == RELS.CMNT) {\n\t\t\t\tvar dfile = resolve_path(sheetRels[sheet][n].Target, path);\n\t\t\t\tcomments = parse_cmnt(getzipdata(zip, dfile, true), dfile, opts);\n\t\t\t\tif(!comments || !comments.length) return;\n\t\t\t\tsheet_insert_comments(_ws, comments);\n\t\t\t}\n\t\t});\n\t} catch(e) { if(opts.WTF) throw e; }\n}\n\nfunction strip_front_slash(x) { return x.charAt(0) == '/' ? x.slice(1) : x; }\n\nfunction parse_zip(zip, opts) {\n\tmake_ssf(SSF);\n\topts = opts || {};\n\tfix_read_opts(opts);\n\n\t/* OpenDocument Part 3 Section 2.2.1 OpenDocument Package */\n\tif(safegetzipfile(zip, 'META-INF/manifest.xml')) return parse_ods(zip, opts);\n\t/* UOC */\n\tif(safegetzipfile(zip, 'objectdata.xml')) return parse_ods(zip, opts);\n\t/* Numbers */\n\tif(safegetzipfile(zip, 'Index/Document.iwa')) throw new Error('Unsupported NUMBERS file');\n\n\tvar entries = zipentries(zip);\n\tvar dir = parse_ct((getzipstr(zip, '[Content_Types].xml')));\n\tvar xlsb = false;\n\tvar sheets, binname;\n\tif(dir.workbooks.length === 0) {\n\t\tbinname = \"xl/workbook.xml\";\n\t\tif(getzipdata(zip,binname, true)) dir.workbooks.push(binname);\n\t}\n\tif(dir.workbooks.length === 0) {\n\t\tbinname = \"xl/workbook.bin\";\n\t\tif(!getzipdata(zip,binname,true)) throw new Error(\"Could not find workbook\");\n\t\tdir.workbooks.push(binname);\n\t\txlsb = true;\n\t}\n\tif(dir.workbooks[0].slice(-3) == \"bin\") xlsb = true;\n\n\tvar themes = ({});\n\tvar styles = ({});\n\tif(!opts.bookSheets && !opts.bookProps) {\n\t\tstrs = [];\n\t\tif(dir.sst) try { strs=parse_sst(getzipdata(zip, strip_front_slash(dir.sst)), dir.sst, opts); } catch(e) { if(opts.WTF) throw e; }\n\n\t\tif(opts.cellStyles && dir.themes.length) themes = parse_theme(getzipstr(zip, dir.themes[0].replace(/^\\//,''), true)||\"\",dir.themes[0], opts);\n\n\t\tif(dir.style) styles = parse_sty(getzipdata(zip, strip_front_slash(dir.style)), dir.style, themes, opts);\n\t}\n\n\t/*var externbooks = */dir.links.map(function(link) {\n\t\ttry {\n\t\t\tvar rels = parse_rels(getzipstr(zip, get_rels_path(strip_front_slash(link))), link);\n\t\t\treturn parse_xlink(getzipdata(zip, strip_front_slash(link)), rels, link, opts);\n\t\t} catch(e) {}\n\t});\n\n\tvar wb = parse_wb(getzipdata(zip, strip_front_slash(dir.workbooks[0])), dir.workbooks[0], opts);\n\n\tvar props = {}, propdata = \"\";\n\n\tif(dir.coreprops.length) {\n\t\tpropdata = getzipdata(zip, strip_front_slash(dir.coreprops[0]), true);\n\t\tif(propdata) props = parse_core_props(propdata);\n\t\tif(dir.extprops.length !== 0) {\n\t\t\tpropdata = getzipdata(zip, strip_front_slash(dir.extprops[0]), true);\n\t\t\tif(propdata) parse_ext_props(propdata, props, opts);\n\t\t}\n\t}\n\n\tvar custprops = {};\n\tif(!opts.bookSheets || opts.bookProps) {\n\t\tif (dir.custprops.length !== 0) {\n\t\t\tpropdata = getzipstr(zip, strip_front_slash(dir.custprops[0]), true);\n\t\t\tif(propdata) custprops = parse_cust_props(propdata, opts);\n\t\t}\n\t}\n\n\tvar out = ({});\n\tif(opts.bookSheets || opts.bookProps) {\n\t\tif(wb.Sheets) sheets = wb.Sheets.map(function pluck(x){ return x.name; });\n\t\telse if(props.Worksheets && props.SheetNames.length > 0) sheets=props.SheetNames;\n\t\tif(opts.bookProps) { out.Props = props; out.Custprops = custprops; }\n\t\tif(opts.bookSheets && typeof sheets !== 'undefined') out.SheetNames = sheets;\n\t\tif(opts.bookSheets ? out.SheetNames : opts.bookProps) return out;\n\t}\n\tsheets = {};\n\n\tvar deps = {};\n\tif(opts.bookDeps && dir.calcchain) deps=parse_cc(getzipdata(zip, strip_front_slash(dir.calcchain)),dir.calcchain,opts);\n\n\tvar i=0;\n\tvar sheetRels = ({});\n\tvar path, relsPath;\n\n\t{\n\t\tvar wbsheets = wb.Sheets;\n\t\tprops.Worksheets = wbsheets.length;\n\t\tprops.SheetNames = [];\n\t\tfor(var j = 0; j != wbsheets.length; ++j) {\n\t\t\tprops.SheetNames[j] = wbsheets[j].name;\n\t\t}\n\t}\n\n\tvar wbext = xlsb ? \"bin\" : \"xml\";\n\tvar wbrelsi = dir.workbooks[0].lastIndexOf(\"/\");\n\tvar wbrelsfile = (dir.workbooks[0].slice(0, wbrelsi+1) + \"_rels/\" + dir.workbooks[0].slice(wbrelsi+1) + \".rels\").replace(/^\\//,\"\");\n\tif(!safegetzipfile(zip, wbrelsfile)) wbrelsfile = 'xl/_rels/workbook.' + wbext + '.rels';\n\tvar wbrels = parse_rels(getzipstr(zip, wbrelsfile, true), wbrelsfile);\n\tif(wbrels) wbrels = safe_parse_wbrels(wbrels, wb.Sheets);\n\n\t/* Numbers iOS hack */\n\tvar nmode = (getzipdata(zip,\"xl/worksheets/sheet.xml\",true))?1:0;\n\twsloop: for(i = 0; i != props.Worksheets; ++i) {\n\t\tvar stype = \"sheet\";\n\t\tif(wbrels && wbrels[i]) {\n\t\t\tpath = 'xl/' + (wbrels[i][1]).replace(/[\\/]?xl\\//, \"\");\n\t\t\tif(!safegetzipfile(zip, path)) path = wbrels[i][1];\n\t\t\tif(!safegetzipfile(zip, path)) path = wbrelsfile.replace(/_rels\\/.*$/,\"\") + wbrels[i][1];\n\t\t\tstype = wbrels[i][2];\n\t\t} else {\n\t\t\tpath = 'xl/worksheets/sheet'+(i+1-nmode)+\".\" + wbext;\n\t\t\tpath = path.replace(/sheet0\\./,\"sheet.\");\n\t\t}\n\t\trelsPath = path.replace(/^(.*)(\\/)([^\\/]*)$/, \"$1/_rels/$3.rels\");\n\t\tif(opts && opts.sheets != null) switch(typeof opts.sheets) {\n\t\t\tcase \"number\": if(i != opts.sheets) continue wsloop; break;\n\t\t\tcase \"string\": if(props.SheetNames[i].toLowerCase() != opts.sheets.toLowerCase()) continue wsloop; break;\n\t\t\tdefault: if(Array.isArray && Array.isArray(opts.sheets)) {\n\t\t\t\tvar snjseen = false;\n\t\t\t\tfor(var snj = 0; snj != opts.sheets.length; ++snj) {\n\t\t\t\t\tif(typeof opts.sheets[snj] == \"number\" && opts.sheets[snj] == i) snjseen=1;\n\t\t\t\t\tif(typeof opts.sheets[snj] == \"string\" && opts.sheets[snj].toLowerCase() == props.SheetNames[i].toLowerCase()) snjseen = 1;\n\t\t\t\t}\n\t\t\t\tif(!snjseen) continue wsloop;\n\t\t\t}\n\t\t}\n\t\tsafe_parse_sheet(zip, path, relsPath, props.SheetNames[i], i, sheetRels, sheets, stype, opts, wb, themes, styles);\n\t}\n\n\tout = ({\n\t\tDirectory: dir,\n\t\tWorkbook: wb,\n\t\tProps: props,\n\t\tCustprops: custprops,\n\t\tDeps: deps,\n\t\tSheets: sheets,\n\t\tSheetNames: props.SheetNames,\n\t\tStrings: strs,\n\t\tStyles: styles,\n\t\tThemes: themes,\n\t\tSSF: SSF.get_table()\n\t});\n\tif(opts && opts.bookFiles) {\n\t\tout.keys = entries;\n\t\tout.files = zip.files;\n\t}\n\tif(opts && opts.bookVBA) {\n\t\tif(dir.vba.length > 0) out.vbaraw = getzipdata(zip,strip_front_slash(dir.vba[0]),true);\n\t\telse if(dir.defaults && dir.defaults.bin === CT_VBA) out.vbaraw = getzipdata(zip, 'xl/vbaProject.bin',true);\n\t}\n\treturn out;\n}\n\n/* [MS-OFFCRYPTO] 2.1.1 */\nfunction parse_xlsxcfb(cfb, _opts) {\n\tvar opts = _opts || {};\n\tvar f = 'Workbook', data = CFB.find(cfb, f);\n\ttry {\n\tf = '/!DataSpaces/Version';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\t/*var version = */parse_DataSpaceVersionInfo(data.content);\n\n\t/* 2.3.4.1 */\n\tf = '/!DataSpaces/DataSpaceMap';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\tvar dsm = parse_DataSpaceMap(data.content);\n\tif(dsm.length !== 1 || dsm[0].comps.length !== 1 || dsm[0].comps[0].t !== 0 || dsm[0].name !== \"StrongEncryptionDataSpace\" || dsm[0].comps[0].v !== \"EncryptedPackage\")\n\t\tthrow new Error(\"ECMA-376 Encrypted file bad \" + f);\n\n\t/* 2.3.4.2 */\n\tf = '/!DataSpaces/DataSpaceInfo/StrongEncryptionDataSpace';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\tvar seds = parse_DataSpaceDefinition(data.content);\n\tif(seds.length != 1 || seds[0] != \"StrongEncryptionTransform\")\n\t\tthrow new Error(\"ECMA-376 Encrypted file bad \" + f);\n\n\t/* 2.3.4.3 */\n\tf = '/!DataSpaces/TransformInfo/StrongEncryptionTransform/!Primary';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\t/*var hdr = */parse_Primary(data.content);\n\t} catch(e) {}\n\n\tf = '/EncryptionInfo';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\tvar einfo = parse_EncryptionInfo(data.content);\n\n\t/* 2.3.4.4 */\n\tf = '/EncryptedPackage';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\n/*global decrypt_agile */\nif(einfo[0] == 0x04 && typeof decrypt_agile !== 'undefined') return decrypt_agile(einfo[1], data.content, opts.password || \"\", opts);\n/*global decrypt_std76 */\nif(einfo[0] == 0x02 && typeof decrypt_std76 !== 'undefined') return decrypt_std76(einfo[1], data.content, opts.password || \"\", opts);\n\tthrow new Error(\"File is password-protected\");\n}\n\nfunction write_zip(wb, opts) {\n\t_shapeid = 1024;\n\tif(opts.bookType == \"ods\") return write_ods(wb, opts);\n\tif(wb && !wb.SSF) {\n\t\twb.SSF = SSF.get_table();\n\t}\n\tif(wb && wb.SSF) {\n\t\tmake_ssf(SSF); SSF.load_table(wb.SSF);\n\t\t// $FlowIgnore\n\t\topts.revssf = evert_num(wb.SSF); opts.revssf[wb.SSF[65535]] = 0;\n\t\topts.ssf = wb.SSF;\n\t}\n\topts.rels = {}; opts.wbrels = {};\n\topts.Strings = []; opts.Strings.Count = 0; opts.Strings.Unique = 0;\n\tif(browser_has_Map) opts.revStrings = new Map();\n\telse { opts.revStrings = {}; opts.revStrings.foo = []; delete opts.revStrings.foo; }\n\tvar wbext = opts.bookType == \"xlsb\" ? \"bin\" : \"xml\";\n\tvar vbafmt = VBAFMTS.indexOf(opts.bookType) > -1;\n\tvar ct = new_ct();\n\tfix_write_opts(opts = opts || {});\nvar zip = zip_new();\n\tvar f = \"\", rId = 0;\n\n\topts.cellXfs = [];\n\tget_cell_style(opts.cellXfs, {}, {revssf:{\"General\":0}});\n\n\tif(!wb.Props) wb.Props = {};\n\n\tf = \"docProps/core.xml\";\n\tzip_add_file(zip, f, write_core_props(wb.Props, opts));\n\tct.coreprops.push(f);\n\tadd_rels(opts.rels, 2, f, RELS.CORE_PROPS);\n\nf = \"docProps/app.xml\";\n\tif(wb.Props && wb.Props.SheetNames){/* empty */}\n\telse if(!wb.Workbook || !wb.Workbook.Sheets) wb.Props.SheetNames = wb.SheetNames;\n\telse {\n\t\tvar _sn = [];\n\t\tfor(var _i = 0; _i < wb.SheetNames.length; ++_i)\n\t\t\tif((wb.Workbook.Sheets[_i]||{}).Hidden != 2) _sn.push(wb.SheetNames[_i]);\n\t\twb.Props.SheetNames = _sn;\n\t}\n\twb.Props.Worksheets = wb.Props.SheetNames.length;\n\tzip_add_file(zip, f, write_ext_props(wb.Props, opts));\n\tct.extprops.push(f);\n\tadd_rels(opts.rels, 3, f, RELS.EXT_PROPS);\n\n\tif(wb.Custprops !== wb.Props && keys(wb.Custprops||{}).length > 0) {\n\t\tf = \"docProps/custom.xml\";\n\t\tzip_add_file(zip, f, write_cust_props(wb.Custprops, opts));\n\t\tct.custprops.push(f);\n\t\tadd_rels(opts.rels, 4, f, RELS.CUST_PROPS);\n\t}\n\n\tfor(rId=1;rId <= wb.SheetNames.length; ++rId) {\n\t\tvar wsrels = {'!id':{}};\n\t\tvar ws = wb.Sheets[wb.SheetNames[rId-1]];\n\t\tvar _type = (ws || {})[\"!type\"] || \"sheet\";\n\t\tswitch(_type) {\n\t\tcase \"chart\":\n\t\t\t/* falls through */\n\t\tdefault:\n\t\t\tf = \"xl/worksheets/sheet\" + rId + \".\" + wbext;\n\t\t\tzip_add_file(zip, f, write_ws(rId-1, f, opts, wb, wsrels));\n\t\t\tct.sheets.push(f);\n\t\t\tadd_rels(opts.wbrels, -1, \"worksheets/sheet\" + rId + \".\" + wbext, RELS.WS[0]);\n\t\t}\n\n\t\tif(ws) {\n\t\t\tvar comments = ws['!comments'];\n\t\t\tvar need_vml = false;\n\t\t\tif(comments && comments.length > 0) {\n\t\t\t\tvar cf = \"xl/comments\" + rId + \".\" + wbext;\n\t\t\t\tzip_add_file(zip, cf, write_cmnt(comments, cf, opts));\n\t\t\t\tct.comments.push(cf);\n\t\t\t\tadd_rels(wsrels, -1, \"../comments\" + rId + \".\" + wbext, RELS.CMNT);\n\t\t\t\tneed_vml = true;\n\t\t\t}\n\t\t\tif(ws['!legacy']) {\n\t\t\t\tif(need_vml) zip_add_file(zip, \"xl/drawings/vmlDrawing\" + (rId) + \".vml\", write_comments_vml(rId, ws['!comments']));\n\t\t\t}\n\t\t\tdelete ws['!comments'];\n\t\t\tdelete ws['!legacy'];\n\t\t}\n\n\t\tif(wsrels['!id'].rId1) zip_add_file(zip, get_rels_path(f), write_rels(wsrels));\n\t}\n\n\tif(opts.Strings != null && opts.Strings.length > 0) {\n\t\tf = \"xl/sharedStrings.\" + wbext;\n\t\tzip_add_file(zip, f, write_sst(opts.Strings, f, opts));\n\t\tct.strs.push(f);\n\t\tadd_rels(opts.wbrels, -1, \"sharedStrings.\" + wbext, RELS.SST);\n\t}\n\n\tf = \"xl/workbook.\" + wbext;\n\tzip_add_file(zip, f, write_wb(wb, f, opts));\n\tct.workbooks.push(f);\n\tadd_rels(opts.rels, 1, f, RELS.WB);\n\n\t/* TODO: something more intelligent with themes */\n\n\tf = \"xl/theme/theme1.xml\";\n\tzip_add_file(zip, f, write_theme(wb.Themes, opts));\n\tct.themes.push(f);\n\tadd_rels(opts.wbrels, -1, \"theme/theme1.xml\", RELS.THEME);\n\n\t/* TODO: something more intelligent with styles */\n\n\tf = \"xl/styles.\" + wbext;\n\tzip_add_file(zip, f, write_sty(wb, f, opts));\n\tct.styles.push(f);\n\tadd_rels(opts.wbrels, -1, \"styles.\" + wbext, RELS.STY);\n\n\tif(wb.vbaraw && vbafmt) {\n\t\tf = \"xl/vbaProject.bin\";\n\t\tzip_add_file(zip, f, wb.vbaraw);\n\t\tct.vba.push(f);\n\t\tadd_rels(opts.wbrels, -1, \"vbaProject.bin\", RELS.VBA);\n\t}\n\n\tzip_add_file(zip, \"[Content_Types].xml\", write_ct(ct, opts));\n\tzip_add_file(zip, '_rels/.rels', write_rels(opts.rels));\n\tzip_add_file(zip, 'xl/_rels/workbook.' + wbext + '.rels', write_rels(opts.wbrels));\n\n\tdelete opts.revssf; delete opts.ssf;\n\treturn zip;\n}\nfunction firstbyte(f,o) {\n\tvar x = \"\";\n\tswitch((o||{}).type || \"base64\") {\n\t\tcase 'buffer': return [f[0], f[1], f[2], f[3], f[4], f[5], f[6], f[7]];\n\t\tcase 'base64': x = Base64.decode(f.slice(0,12)); break;\n\t\tcase 'binary': x = f; break;\n\t\tcase 'array': return [f[0], f[1], f[2], f[3], f[4], f[5], f[6], f[7]];\n\t\tdefault: throw new Error(\"Unrecognized type \" + (o && o.type || \"undefined\"));\n\t}\n\treturn [x.charCodeAt(0), x.charCodeAt(1), x.charCodeAt(2), x.charCodeAt(3), x.charCodeAt(4), x.charCodeAt(5), x.charCodeAt(6), x.charCodeAt(7)];\n}\n\nfunction read_cfb(cfb, opts) {\n\tif(CFB.find(cfb, \"EncryptedPackage\")) return parse_xlsxcfb(cfb, opts);\n\treturn parse_xlscfb(cfb, opts);\n}\n\nfunction read_zip(data, opts) {\nvar zip, d = data;\n\tvar o = opts||{};\n\tif(!o.type) o.type = (has_buf && Buffer.isBuffer(data)) ? \"buffer\" : \"base64\";\n\tzip = zip_read(d, o);\n\treturn parse_zip(zip, o);\n}\n\nfunction read_plaintext(data, o) {\n\tvar i = 0;\n\tmain: while(i < data.length) switch(data.charCodeAt(i)) {\n\t\tcase 0x0A: case 0x0D: case 0x20: ++i; break;\n\t\tcase 0x3C: return parse_xlml(data.slice(i),o);\n\t\tdefault: break main;\n\t}\n\treturn PRN.to_workbook(data, o);\n}\n\nfunction read_plaintext_raw(data, o) {\n\tvar str = \"\", bytes = firstbyte(data, o);\n\tswitch(o.type) {\n\t\tcase 'base64': str = Base64.decode(data); break;\n\t\tcase 'binary': str = data; break;\n\t\tcase 'buffer': str = data.toString('binary'); break;\n\t\tcase 'array': str = cc2str(data); break;\n\t\tdefault: throw new Error(\"Unrecognized type \" + o.type);\n\t}\n\tif(bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF) str = utf8read(str);\n\treturn read_plaintext(str, o);\n}\n\nfunction read_utf16(data, o) {\n\tvar d = data;\n\tif(o.type == 'base64') d = Base64.decode(d);\n\td = cptable.utils.decode(1200, d.slice(2), 'str');\n\to.type = \"binary\";\n\treturn read_plaintext(d, o);\n}\n\nfunction bstrify(data) {\n\treturn !data.match(/[^\\x00-\\x7F]/) ? data : utf8write(data);\n}\n\nfunction read_prn(data, d, o, str) {\n\tif(str) { o.type = \"string\"; return PRN.to_workbook(data, o); }\n\treturn PRN.to_workbook(d, o);\n}\n\nfunction readSync(data, opts) {\n\treset_cp();\n\tif(typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) return readSync(new Uint8Array(data), opts);\n\tvar d = data, n = [0,0,0,0], str = false;\n\tvar o = opts||{};\n\tif(o.cellStyles) { o.cellNF = true; o.sheetStubs = true; }\n\t_ssfopts = {};\n\tif(o.dateNF) _ssfopts.dateNF = o.dateNF;\n\tif(!o.type) o.type = (has_buf && Buffer.isBuffer(data)) ? \"buffer\" : \"base64\";\n\tif(o.type == \"file\") { o.type = has_buf ? \"buffer\" : \"binary\"; d = read_binary(data); }\n\tif(o.type == \"string\") { str = true; o.type = \"binary\"; o.codepage = 65001; d = bstrify(data); }\n\tif(o.type == 'array' && typeof Uint8Array !== 'undefined' && data instanceof Uint8Array && typeof ArrayBuffer !== 'undefined') {\n\t\t// $FlowIgnore\n\t\tvar ab=new ArrayBuffer(3), vu=new Uint8Array(ab); vu.foo=\"bar\";\n\t\t// $FlowIgnore\n\t\tif(!vu.foo) {o=dup(o); o.type='array'; return readSync(ab2a(d), o);}\n\t}\n\tswitch((n = firstbyte(d, o))[0]) {\n\t\tcase 0xD0: if(n[1] === 0xCF && n[2] === 0x11 && n[3] === 0xE0 && n[4] === 0xA1 && n[5] === 0xB1 && n[6] === 0x1A && n[7] === 0xE1) return read_cfb(CFB.read(d, o), o); break;\n\t\tcase 0x09: if(n[1] <= 0x04) return parse_xlscfb(d, o); break;\n\t\tcase 0x3C: return parse_xlml(d, o);\n\t\tcase 0x49: if(n[1] === 0x44) return read_wb_ID(d, o); break;\n\t\tcase 0x54: if(n[1] === 0x41 && n[2] === 0x42 && n[3] === 0x4C) return DIF.to_workbook(d, o); break;\n\t\tcase 0x50: return (n[1] === 0x4B && n[2] < 0x09 && n[3] < 0x09) ? read_zip(d, o) : read_prn(data, d, o, str);\n\t\tcase 0xEF: return n[3] === 0x3C ? parse_xlml(d, o) : read_prn(data, d, o, str);\n\t\tcase 0xFF: if(n[1] === 0xFE) { return read_utf16(d, o); } break;\n\t\tcase 0x00: if(n[1] === 0x00 && n[2] >= 0x02 && n[3] === 0x00) return WK_.to_workbook(d, o); break;\n\t\tcase 0x03: case 0x83: case 0x8B: case 0x8C: return DBF.to_workbook(d, o);\n\t\tcase 0x7B: if(n[1] === 0x5C && n[2] === 0x72 && n[3] === 0x74) return RTF.to_workbook(d, o); break;\n\t\tcase 0x0A: case 0x0D: case 0x20: return read_plaintext_raw(d, o);\n\t}\n\tif(DBF.versions.indexOf(n[0]) > -1 && n[2] <= 12 && n[3] <= 31) return DBF.to_workbook(d, o);\n\treturn read_prn(data, d, o, str);\n}\n\nfunction readFileSync(filename, opts) {\n\tvar o = opts||{}; o.type = 'file';\n\treturn readSync(filename, o);\n}\nfunction write_cfb_ctr(cfb, o) {\n\tswitch(o.type) {\n\t\tcase \"base64\": case \"binary\": break;\n\t\tcase \"buffer\": case \"array\": o.type = \"\"; break;\n\t\tcase \"file\": return write_dl(o.file, CFB.write(cfb, {type:has_buf ? 'buffer' : \"\"}));\n\t\tcase \"string\": throw new Error(\"'string' output type invalid for '\" + o.bookType + \"' files\");\n\t\tdefault: throw new Error(\"Unrecognized type \" + o.type);\n\t}\n\treturn CFB.write(cfb, o);\n}\n\nfunction write_zip_type(wb, opts) {\n\tvar o = opts||{};\n\tvar z = write_zip(wb, o);\n\tvar oopts = {};\n\tif(o.compression) oopts.compression = 'DEFLATE';\n\tif(o.password) oopts.type = has_buf ? \"nodebuffer\" : \"string\";\n\telse switch(o.type) {\n\t\tcase \"base64\": oopts.type = \"base64\"; break;\n\t\tcase \"binary\": oopts.type = \"string\"; break;\n\t\tcase \"string\": throw new Error(\"'string' output type invalid for '\" + o.bookType + \"' files\");\n\t\tcase \"buffer\":\n\t\tcase \"file\": oopts.type = has_buf ? \"nodebuffer\" : \"string\"; break;\n\t\tdefault: throw new Error(\"Unrecognized type \" + o.type);\n\t}\n\tvar out = z.FullPaths ? CFB.write(z, {fileType:\"zip\", type: {\"nodebuffer\": \"buffer\", \"string\": \"binary\"}[oopts.type] || oopts.type}) : z.generate(oopts);\n/*jshint -W083 */\n\tif(o.password && typeof encrypt_agile !== 'undefined') return write_cfb_ctr(encrypt_agile(out, o.password), o); // eslint-disable-line no-undef\n/*jshint +W083 */\n\tif(o.type === \"file\") return write_dl(o.file, out);\n\treturn o.type == \"string\" ? utf8read(out) : out;\n}\n\nfunction write_cfb_type(wb, opts) {\n\tvar o = opts||{};\n\tvar cfb = write_xlscfb(wb, o);\n\treturn write_cfb_ctr(cfb, o);\n}\n\nfunction write_string_type(out, opts, bom) {\n\tif(!bom) bom = \"\";\n\tvar o = bom + out;\n\tswitch(opts.type) {\n\t\tcase \"base64\": return Base64.encode(utf8write(o));\n\t\tcase \"binary\": return utf8write(o);\n\t\tcase \"string\": return out;\n\t\tcase \"file\": return write_dl(opts.file, o, 'utf8');\n\t\tcase \"buffer\": {\n\t\t\tif(has_buf) return Buffer_from(o, 'utf8');\n\t\t\telse return write_string_type(o, {type:'binary'}).split(\"\").map(function(c) { return c.charCodeAt(0); });\n\t\t}\n\t}\n\tthrow new Error(\"Unrecognized type \" + opts.type);\n}\n\nfunction write_stxt_type(out, opts) {\n\tswitch(opts.type) {\n\t\tcase \"base64\": return Base64.encode(out);\n\t\tcase \"binary\": return out;\n\t\tcase \"string\": return out; /* override in sheet_to_txt */\n\t\tcase \"file\": return write_dl(opts.file, out, 'binary');\n\t\tcase \"buffer\": {\n\t\t\tif(has_buf) return Buffer_from(out, 'binary');\n\t\t\telse return out.split(\"\").map(function(c) { return c.charCodeAt(0); });\n\t\t}\n\t}\n\tthrow new Error(\"Unrecognized type \" + opts.type);\n}\n\n/* TODO: test consistency */\nfunction write_binary_type(out, opts) {\n\tswitch(opts.type) {\n\t\tcase \"string\":\n\t\tcase \"base64\":\n\t\tcase \"binary\":\n\t\t\tvar bstr = \"\";\n\t\t\t// $FlowIgnore\n\t\t\tfor(var i = 0; i < out.length; ++i) bstr += String.fromCharCode(out[i]);\n\t\t\treturn opts.type == 'base64' ? Base64.encode(bstr) : opts.type == 'string' ? utf8read(bstr) : bstr;\n\t\tcase \"file\": return write_dl(opts.file, out);\n\t\tcase \"buffer\": return out;\n\t\tdefault: throw new Error(\"Unrecognized type \" + opts.type);\n\t}\n}\n\nfunction writeSync(wb, opts) {\n\treset_cp();\n\tcheck_wb(wb);\n\tvar o = opts||{};\n\tif(o.cellStyles) { o.cellNF = true; o.sheetStubs = true; }\n\tif(o.type == \"array\") { o.type = \"binary\"; var out = (writeSync(wb, o)); o.type = \"array\"; return s2ab(out); }\n\tswitch(o.bookType || 'xlsb') {\n\t\tcase 'xml':\n\t\tcase 'xlml': return write_string_type(write_xlml(wb, o), o);\n\t\tcase 'slk':\n\t\tcase 'sylk': return write_string_type(write_slk_str(wb, o), o);\n\t\tcase 'htm':\n\t\tcase 'html': return write_string_type(write_htm_str(wb, o), o);\n\t\tcase 'txt': return write_stxt_type(write_txt_str(wb, o), o);\n\t\tcase 'csv': return write_string_type(write_csv_str(wb, o), o, \"\\ufeff\");\n\t\tcase 'dif': return write_string_type(write_dif_str(wb, o), o);\n\t\tcase 'dbf': return write_binary_type(write_dbf_buf(wb, o), o);\n\t\tcase 'prn': return write_string_type(write_prn_str(wb, o), o);\n\t\tcase 'rtf': return write_string_type(write_rtf_str(wb, o), o);\n\t\tcase 'eth': return write_string_type(write_eth_str(wb, o), o);\n\t\tcase 'fods': return write_string_type(write_ods(wb, o), o);\n\t\tcase 'biff2': if(!o.biff) o.biff = 2; /* falls through */\n\t\tcase 'biff3': if(!o.biff) o.biff = 3; /* falls through */\n\t\tcase 'biff4': if(!o.biff) o.biff = 4; return write_binary_type(write_biff_buf(wb, o), o);\n\t\tcase 'biff5': if(!o.biff) o.biff = 5; /* falls through */\n\t\tcase 'biff8':\n\t\tcase 'xla':\n\t\tcase 'xls': if(!o.biff) o.biff = 8; return write_cfb_type(wb, o);\n\t\tcase 'xlsx':\n\t\tcase 'xlsm':\n\t\tcase 'xlam':\n\t\tcase 'xlsb':\n\t\tcase 'ods': return write_zip_type(wb, o);\n\t\tdefault: throw new Error (\"Unrecognized bookType |\" + o.bookType + \"|\");\n\t}\n}\n\nfunction resolve_book_type(o) {\n\tif(o.bookType) return;\n\tvar _BT = {\n\t\t\"xls\": \"biff8\",\n\t\t\"htm\": \"html\",\n\t\t\"slk\": \"sylk\",\n\t\t\"socialcalc\": \"eth\",\n\t\t\"Sh33tJS\": \"WTF\"\n\t};\n\tvar ext = o.file.slice(o.file.lastIndexOf(\".\")).toLowerCase();\n\tif(ext.match(/^\\.[a-z]+$/)) o.bookType = ext.slice(1);\n\to.bookType = _BT[o.bookType] || o.bookType;\n}\n\nfunction writeFileSync(wb, filename, opts) {\n\tvar o = opts||{}; o.type = 'file';\n\to.file = filename;\n\tresolve_book_type(o);\n\treturn writeSync(wb, o);\n}\n\nfunction writeFileAsync(filename, wb, opts, cb) {\n\tvar o = opts||{}; o.type = 'file';\n\to.file = filename;\n\tresolve_book_type(o);\n\to.type = 'buffer';\n\tvar _cb = cb; if(!(_cb instanceof Function)) _cb = (opts);\n\treturn _fs.writeFile(filename, writeSync(wb, o), _cb);\n}\nfunction make_json_row(sheet, r, R, cols, header, hdr, dense, o) {\n\tvar rr = encode_row(R);\n\tvar defval = o.defval, raw = o.raw || !Object.prototype.hasOwnProperty.call(o, \"raw\");\n\tvar isempty = true;\n\tvar row = (header === 1) ? [] : {};\n\tif(header !== 1) {\n\t\tif(Object.defineProperty) try { Object.defineProperty(row, '__rowNum__', {value:R, enumerable:false}); } catch(e) { row.__rowNum__ = R; }\n\t\telse row.__rowNum__ = R;\n\t}\n\tif(!dense || sheet[R]) for (var C = r.s.c; C <= r.e.c; ++C) {\n\t\tvar val = dense ? sheet[R][C] : sheet[cols[C] + rr];\n\t\tif(val === undefined || val.t === undefined) {\n\t\t\tif(defval === undefined) continue;\n\t\t\tif(hdr[C] != null) { row[hdr[C]] = defval; }\n\t\t\tcontinue;\n\t\t}\n\t\tvar v = val.v;\n\t\tswitch(val.t){\n\t\t\tcase 'z': if(v == null) break; continue;\n\t\t\tcase 'e': v = void 0; break;\n\t\t\tcase 's': case 'd': case 'b': case 'n': break;\n\t\t\tdefault: throw new Error('unrecognized type ' + val.t);\n\t\t}\n\t\tif(hdr[C] != null) {\n\t\t\tif(v == null) {\n\t\t\t\tif(defval !== undefined) row[hdr[C]] = defval;\n\t\t\t\telse if(raw && v === null) row[hdr[C]] = null;\n\t\t\t\telse continue;\n\t\t\t} else {\n\t\t\t\trow[hdr[C]] = raw || (o.rawNumbers && val.t == \"n\") ? v : format_cell(val,v,o);\n\t\t\t}\n\t\t\tif(v != null) isempty = false;\n\t\t}\n\t}\n\treturn { row: row, isempty: isempty };\n}\n\n\nfunction sheet_to_json(sheet, opts) {\n\tif(sheet == null || sheet[\"!ref\"] == null) return [];\n\tvar val = {t:'n',v:0}, header = 0, offset = 1, hdr = [], v=0, vv=\"\";\n\tvar r = {s:{r:0,c:0},e:{r:0,c:0}};\n\tvar o = opts || {};\n\tvar range = o.range != null ? o.range : sheet[\"!ref\"];\n\tif(o.header === 1) header = 1;\n\telse if(o.header === \"A\") header = 2;\n\telse if(Array.isArray(o.header)) header = 3;\n\telse if(o.header == null) header = 0;\n\tswitch(typeof range) {\n\t\tcase 'string': r = safe_decode_range(range); break;\n\t\tcase 'number': r = safe_decode_range(sheet[\"!ref\"]); r.s.r = range; break;\n\t\tdefault: r = range;\n\t}\n\tif(header > 0) offset = 0;\n\tvar rr = encode_row(r.s.r);\n\tvar cols = [];\n\tvar out = [];\n\tvar outi = 0, counter = 0;\n\tvar dense = Array.isArray(sheet);\n\tvar R = r.s.r, C = 0, CC = 0;\n\tif(dense && !sheet[R]) sheet[R] = [];\n\tfor(C = r.s.c; C <= r.e.c; ++C) {\n\t\tcols[C] = encode_col(C);\n\t\tval = dense ? sheet[R][C] : sheet[cols[C] + rr];\n\t\tswitch(header) {\n\t\t\tcase 1: hdr[C] = C - r.s.c; break;\n\t\t\tcase 2: hdr[C] = cols[C]; break;\n\t\t\tcase 3: hdr[C] = o.header[C - r.s.c]; break;\n\t\t\tdefault:\n\t\t\t\tif(val == null) val = {w: \"__EMPTY\", t: \"s\"};\n\t\t\t\tvv = v = format_cell(val, null, o);\n\t\t\t\tcounter = 0;\n\t\t\t\tfor(CC = 0; CC < hdr.length; ++CC) if(hdr[CC] == vv) vv = v + \"_\" + (++counter);\n\t\t\t\thdr[C] = vv;\n\t\t}\n\t}\n\tfor (R = r.s.r + offset; R <= r.e.r; ++R) {\n\t\tvar row = make_json_row(sheet, r, R, cols, header, hdr, dense, o);\n\t\tif((row.isempty === false) || (header === 1 ? o.blankrows !== false : !!o.blankrows)) out[outi++] = row.row;\n\t}\n\tout.length = outi;\n\treturn out;\n}\n\nvar qreg = /\"/g;\nfunction make_csv_row(sheet, r, R, cols, fs, rs, FS, o) {\n\tvar isempty = true;\n\tvar row = [], txt = \"\", rr = encode_row(R);\n\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\tif (!cols[C]) continue;\n\t\tvar val = o.dense ? (sheet[R]||[])[C]: sheet[cols[C] + rr];\n\t\tif(val == null) txt = \"\";\n\t\telse if(val.v != null) {\n\t\t\tisempty = false;\n\t\t\ttxt = ''+(o.rawNumbers && val.t == \"n\" ? val.v : format_cell(val, null, o));\n\t\t\tfor(var i = 0, cc = 0; i !== txt.length; ++i) if((cc = txt.charCodeAt(i)) === fs || cc === rs || cc === 34 || o.forceQuotes) {txt = \"\\\"\" + txt.replace(qreg, '\"\"') + \"\\\"\"; break; }\n\t\t\tif(txt == \"ID\") txt = '\"ID\"';\n\t\t} else if(val.f != null && !val.F) {\n\t\t\tisempty = false;\n\t\t\ttxt = '=' + val.f; if(txt.indexOf(\",\") >= 0) txt = '\"' + txt.replace(qreg, '\"\"') + '\"';\n\t\t} else txt = \"\";\n\t\t/* NOTE: Excel CSV does not support array formulae */\n\t\trow.push(txt);\n\t}\n\tif(o.blankrows === false && isempty) return null;\n\treturn row.join(FS);\n}\n\nfunction sheet_to_csv(sheet, opts) {\n\tvar out = [];\n\tvar o = opts == null ? {} : opts;\n\tif(sheet == null || sheet[\"!ref\"] == null) return \"\";\n\tvar r = safe_decode_range(sheet[\"!ref\"]);\n\tvar FS = o.FS !== undefined ? o.FS : \",\", fs = FS.charCodeAt(0);\n\tvar RS = o.RS !== undefined ? o.RS : \"\\n\", rs = RS.charCodeAt(0);\n\tvar endregex = new RegExp((FS==\"|\" ? \"\\\\|\" : FS)+\"+$\");\n\tvar row = \"\", cols = [];\n\to.dense = Array.isArray(sheet);\n\tvar colinfo = o.skipHidden && sheet[\"!cols\"] || [];\n\tvar rowinfo = o.skipHidden && sheet[\"!rows\"] || [];\n\tfor(var C = r.s.c; C <= r.e.c; ++C) if (!((colinfo[C]||{}).hidden)) cols[C] = encode_col(C);\n\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\tif ((rowinfo[R]||{}).hidden) continue;\n\t\trow = make_csv_row(sheet, r, R, cols, fs, rs, FS, o);\n\t\tif(row == null) { continue; }\n\t\tif(o.strip) row = row.replace(endregex,\"\");\n\t\tout.push(row + RS);\n\t}\n\tdelete o.dense;\n\treturn out.join(\"\");\n}\n\nfunction sheet_to_txt(sheet, opts) {\n\tif(!opts) opts = {}; opts.FS = \"\\t\"; opts.RS = \"\\n\";\n\tvar s = sheet_to_csv(sheet, opts);\n\tif(typeof cptable == 'undefined' || opts.type == 'string') return s;\n\tvar o = cptable.utils.encode(1200, s, 'str');\n\treturn String.fromCharCode(255) + String.fromCharCode(254) + o;\n}\n\nfunction sheet_to_formulae(sheet) {\n\tvar y = \"\", x, val=\"\";\n\tif(sheet == null || sheet[\"!ref\"] == null) return [];\n\tvar r = safe_decode_range(sheet['!ref']), rr = \"\", cols = [], C;\n\tvar cmds = [];\n\tvar dense = Array.isArray(sheet);\n\tfor(C = r.s.c; C <= r.e.c; ++C) cols[C] = encode_col(C);\n\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\trr = encode_row(R);\n\t\tfor(C = r.s.c; C <= r.e.c; ++C) {\n\t\t\ty = cols[C] + rr;\n\t\t\tx = dense ? (sheet[R]||[])[C] : sheet[y];\n\t\t\tval = \"\";\n\t\t\tif(x === undefined) continue;\n\t\t\telse if(x.F != null) {\n\t\t\t\ty = x.F;\n\t\t\t\tif(!x.f) continue;\n\t\t\t\tval = x.f;\n\t\t\t\tif(y.indexOf(\":\") == -1) y = y + \":\" + y;\n\t\t\t}\n\t\t\tif(x.f != null) val = x.f;\n\t\t\telse if(x.t == 'z') continue;\n\t\t\telse if(x.t == 'n' && x.v != null) val = \"\" + x.v;\n\t\t\telse if(x.t == 'b') val = x.v ? \"TRUE\" : \"FALSE\";\n\t\t\telse if(x.w !== undefined) val = \"'\" + x.w;\n\t\t\telse if(x.v === undefined) continue;\n\t\t\telse if(x.t == 's') val = \"'\" + x.v;\n\t\t\telse val = \"\"+x.v;\n\t\t\tcmds[cmds.length] = y + \"=\" + val;\n\t\t}\n\t}\n\treturn cmds;\n}\n\nfunction sheet_add_json(_ws, js, opts) {\n\tvar o = opts || {};\n\tvar offset = +!o.skipHeader;\n\tvar ws = _ws || ({});\n\tvar _R = 0, _C = 0;\n\tif(ws && o.origin != null) {\n\t\tif(typeof o.origin == 'number') _R = o.origin;\n\t\telse {\n\t\t\tvar _origin = typeof o.origin == \"string\" ? decode_cell(o.origin) : o.origin;\n\t\t\t_R = _origin.r; _C = _origin.c;\n\t\t}\n\t}\n\tvar cell;\n\tvar range = ({s: {c:0, r:0}, e: {c:_C, r:_R + js.length - 1 + offset}});\n\tif(ws['!ref']) {\n\t\tvar _range = safe_decode_range(ws['!ref']);\n\t\trange.e.c = Math.max(range.e.c, _range.e.c);\n\t\trange.e.r = Math.max(range.e.r, _range.e.r);\n\t\tif(_R == -1) { _R = _range.e.r + 1; range.e.r = _R + js.length - 1 + offset; }\n\t} else {\n\t\tif(_R == -1) { _R = 0; range.e.r = js.length - 1 + offset; }\n\t}\n\tvar hdr = o.header || [], C = 0;\n\n\tjs.forEach(function (JS, R) {\n\t\tkeys(JS).forEach(function(k) {\n\t\t\tif((C=hdr.indexOf(k)) == -1) hdr[C=hdr.length] = k;\n\t\t\tvar v = JS[k];\n\t\t\tvar t = 'z';\n\t\t\tvar z = \"\";\n\t\t\tvar ref = encode_cell({c:_C + C,r:_R + R + offset});\n\t\t\tcell = utils.sheet_get_cell(ws, ref);\n\t\t\tif(v && typeof v === 'object' && !(v instanceof Date)){\n\t\t\t\tws[ref] = v;\n\t\t\t} else {\n\t\t\t\tif(typeof v == 'number') t = 'n';\n\t\t\t\telse if(typeof v == 'boolean') t = 'b';\n\t\t\t\telse if(typeof v == 'string') t = 's';\n\t\t\t\telse if(v instanceof Date) {\n\t\t\t\t\tt = 'd';\n\t\t\t\t\tif(!o.cellDates) { t = 'n'; v = datenum(v); }\n\t\t\t\t\tz = (o.dateNF || SSF._table[14]);\n\t\t\t\t}\n\t\t\t\tif(!cell) ws[ref] = cell = ({t:t, v:v});\n\t\t\t\telse {\n\t\t\t\t\tcell.t = t; cell.v = v;\n\t\t\t\t\tdelete cell.w; delete cell.R;\n\t\t\t\t\tif(z) cell.z = z;\n\t\t\t\t}\n\t\t\t\tif(z) cell.z = z;\n\t\t\t}\n\t\t});\n\t});\n\trange.e.c = Math.max(range.e.c, _C + hdr.length - 1);\n\tvar __R = encode_row(_R);\n\tif(offset) for(C = 0; C < hdr.length; ++C) ws[encode_col(C + _C) + __R] = {t:'s', v:hdr[C]};\n\tws['!ref'] = encode_range(range);\n\treturn ws;\n}\nfunction json_to_sheet(js, opts) { return sheet_add_json(null, js, opts); }\n\nvar utils = {\n\tencode_col: encode_col,\n\tencode_row: encode_row,\n\tencode_cell: encode_cell,\n\tencode_range: encode_range,\n\tdecode_col: decode_col,\n\tdecode_row: decode_row,\n\tsplit_cell: split_cell,\n\tdecode_cell: decode_cell,\n\tdecode_range: decode_range,\n\tformat_cell: format_cell,\n\tget_formulae: sheet_to_formulae,\n\tmake_csv: sheet_to_csv,\n\tmake_json: sheet_to_json,\n\tmake_formulae: sheet_to_formulae,\n\tsheet_add_aoa: sheet_add_aoa,\n\tsheet_add_json: sheet_add_json,\n\tsheet_add_dom: sheet_add_dom,\n\taoa_to_sheet: aoa_to_sheet,\n\tjson_to_sheet: json_to_sheet,\n\ttable_to_sheet: parse_dom_table,\n\ttable_to_book: table_to_book,\n\tsheet_to_csv: sheet_to_csv,\n\tsheet_to_txt: sheet_to_txt,\n\tsheet_to_json: sheet_to_json,\n\tsheet_to_html: HTML_.from_sheet,\n\tsheet_to_formulae: sheet_to_formulae,\n\tsheet_to_row_object_array: sheet_to_json\n};\n\n(function(utils) {\nutils.consts = utils.consts || {};\nfunction add_consts(R/*Array*/) { R.forEach(function(a){ utils.consts[a[0]] = a[1]; }); }\n\nfunction get_default(x, y, z) { return x[y] != null ? x[y] : (x[y] = z); }\n\n/* get cell, creating a stub if necessary */\nfunction ws_get_cell_stub(ws, R, C) {\n\t/* A1 cell address */\n\tif(typeof R == \"string\") {\n\t\t/* dense */\n\t\tif(Array.isArray(ws)) {\n\t\t\tvar RC = decode_cell(R);\n\t\t\tif(!ws[RC.r]) ws[RC.r] = [];\n\t\t\treturn ws[RC.r][RC.c] || (ws[RC.r][RC.c] = {t:'z'});\n\t\t}\n\t\treturn ws[R] || (ws[R] = {t:'z'});\n\t}\n\t/* cell address object */\n\tif(typeof R != \"number\") return ws_get_cell_stub(ws, encode_cell(R));\n\t/* R and C are 0-based indices */\n\treturn ws_get_cell_stub(ws, encode_cell({r:R,c:C||0}));\n}\nutils.sheet_get_cell = ws_get_cell_stub;\n\n/* find sheet index for given name / validate index */\nfunction wb_sheet_idx(wb, sh) {\n\tif(typeof sh == \"number\") {\n\t\tif(sh >= 0 && wb.SheetNames.length > sh) return sh;\n\t\tthrow new Error(\"Cannot find sheet # \" + sh);\n\t} else if(typeof sh == \"string\") {\n\t\tvar idx = wb.SheetNames.indexOf(sh);\n\t\tif(idx > -1) return idx;\n\t\tthrow new Error(\"Cannot find sheet name |\" + sh + \"|\");\n\t} else throw new Error(\"Cannot find sheet |\" + sh + \"|\");\n}\n\n/* simple blank workbook object */\nutils.book_new = function() {\n\treturn { SheetNames: [], Sheets: {} };\n};\n\n/* add a worksheet to the end of a given workbook */\nutils.book_append_sheet = function(wb, ws, name) {\n\tif(!name) for(var i = 1; i <= 0xFFFF; ++i, name = undefined) if(wb.SheetNames.indexOf(name = \"Sheet\" + i) == -1) break;\n\tif(!name || wb.SheetNames.length >= 0xFFFF) throw new Error(\"Too many worksheets\");\n\tcheck_ws_name(name);\n\tif(wb.SheetNames.indexOf(name) >= 0) throw new Error(\"Worksheet with name |\" + name + \"| already exists!\");\n\n\twb.SheetNames.push(name);\n\twb.Sheets[name] = ws;\n};\n\n/* set sheet visibility (visible/hidden/very hidden) */\nutils.book_set_sheet_visibility = function(wb, sh, vis) {\n\tget_default(wb,\"Workbook\",{});\n\tget_default(wb.Workbook,\"Sheets\",[]);\n\n\tvar idx = wb_sheet_idx(wb, sh);\n\t// $FlowIgnore\n\tget_default(wb.Workbook.Sheets,idx, {});\n\n\tswitch(vis) {\n\t\tcase 0: case 1: case 2: break;\n\t\tdefault: throw new Error(\"Bad sheet visibility setting \" + vis);\n\t}\n\t// $FlowIgnore\n\twb.Workbook.Sheets[idx].Hidden = vis;\n};\nadd_consts([\n\t[\"SHEET_VISIBLE\", 0],\n\t[\"SHEET_HIDDEN\", 1],\n\t[\"SHEET_VERY_HIDDEN\", 2]\n]);\n\n/* set number format */\nutils.cell_set_number_format = function(cell, fmt) {\n\tcell.z = fmt;\n\treturn cell;\n};\n\n/* set cell hyperlink */\nutils.cell_set_hyperlink = function(cell, target, tooltip) {\n\tif(!target) {\n\t\tdelete cell.l;\n\t} else {\n\t\tcell.l = ({ Target: target });\n\t\tif(tooltip) cell.l.Tooltip = tooltip;\n\t}\n\treturn cell;\n};\nutils.cell_set_internal_link = function(cell, range, tooltip) { return utils.cell_set_hyperlink(cell, \"#\" + range, tooltip); };\n\n/* add to cell comments */\nutils.cell_add_comment = function(cell, text, author) {\n\tif(!cell.c) cell.c = [];\n\tcell.c.push({t:text, a:author||\"SheetJS\"});\n};\n\n/* set array formula and flush related cells */\nutils.sheet_set_array_formula = function(ws, range, formula) {\n\tvar rng = typeof range != \"string\" ? range : safe_decode_range(range);\n\tvar rngstr = typeof range == \"string\" ? range : encode_range(range);\n\tfor(var R = rng.s.r; R <= rng.e.r; ++R) for(var C = rng.s.c; C <= rng.e.c; ++C) {\n\t\tvar cell = ws_get_cell_stub(ws, R, C);\n\t\tcell.t = 'n';\n\t\tcell.F = rngstr;\n\t\tdelete cell.v;\n\t\tif(R == rng.s.r && C == rng.s.c) cell.f = formula;\n\t}\n\treturn ws;\n};\n\nreturn utils;\n})(utils);\n\nif(has_buf && typeof require != 'undefined') (function() {\n\tvar Readable = require('stream').Readable;\n\n\tvar write_csv_stream = function(sheet, opts) {\n\t\tvar stream = Readable();\n\t\tvar o = opts == null ? {} : opts;\n\t\tif(sheet == null || sheet[\"!ref\"] == null) { stream.push(null); return stream; }\n\t\tvar r = safe_decode_range(sheet[\"!ref\"]);\n\t\tvar FS = o.FS !== undefined ? o.FS : \",\", fs = FS.charCodeAt(0);\n\t\tvar RS = o.RS !== undefined ? o.RS : \"\\n\", rs = RS.charCodeAt(0);\n\t\tvar endregex = new RegExp((FS==\"|\" ? \"\\\\|\" : FS)+\"+$\");\n\t\tvar row = \"\", cols = [];\n\t\to.dense = Array.isArray(sheet);\n\t\tvar colinfo = o.skipHidden && sheet[\"!cols\"] || [];\n\t\tvar rowinfo = o.skipHidden && sheet[\"!rows\"] || [];\n\t\tfor(var C = r.s.c; C <= r.e.c; ++C) if (!((colinfo[C]||{}).hidden)) cols[C] = encode_col(C);\n\t\tvar R = r.s.r;\n\t\tvar BOM = false;\n\t\tstream._read = function() {\n\t\t\tif(!BOM) { BOM = true; return stream.push(\"\\uFEFF\"); }\n\t\t\twhile(R <= r.e.r) {\n\t\t\t\t++R;\n\t\t\t\tif ((rowinfo[R-1]||{}).hidden) continue;\n\t\t\t\trow = make_csv_row(sheet, r, R-1, cols, fs, rs, FS, o);\n\t\t\t\tif(row != null) {\n\t\t\t\t\tif(o.strip) row = row.replace(endregex,\"\");\n\t\t\t\t\tstream.push(row + RS);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(R > r.e.r) return stream.push(null);\n\t\t};\n\t\treturn stream;\n\t};\n\n\tvar write_html_stream = function(ws, opts) {\n\t\tvar stream = Readable();\n\n\t\tvar o = opts || {};\n\t\tvar header = o.header != null ? o.header : HTML_.BEGIN;\n\t\tvar footer = o.footer != null ? o.footer : HTML_.END;\n\t\tstream.push(header);\n\t\tvar r = decode_range(ws['!ref']);\n\t\to.dense = Array.isArray(ws);\n\t\tstream.push(HTML_._preamble(ws, r, o));\n\t\tvar R = r.s.r;\n\t\tvar end = false;\n\t\tstream._read = function() {\n\t\t\tif(R > r.e.r) {\n\t\t\t\tif(!end) { end = true; stream.push(\"\" + footer); }\n\t\t\t\treturn stream.push(null);\n\t\t\t}\n\t\t\twhile(R <= r.e.r) {\n\t\t\t\tstream.push(HTML_._row(ws, r, R, o));\n\t\t\t\t++R;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t};\n\t\treturn stream;\n\t};\n\n\tvar write_json_stream = function(sheet, opts) {\n\t\tvar stream = Readable({objectMode:true});\n\n\t\tif(sheet == null || sheet[\"!ref\"] == null) { stream.push(null); return stream; }\n\t\tvar val = {t:'n',v:0}, header = 0, offset = 1, hdr = [], v=0, vv=\"\";\n\t\tvar r = {s:{r:0,c:0},e:{r:0,c:0}};\n\t\tvar o = opts || {};\n\t\tvar range = o.range != null ? o.range : sheet[\"!ref\"];\n\t\tif(o.header === 1) header = 1;\n\t\telse if(o.header === \"A\") header = 2;\n\t\telse if(Array.isArray(o.header)) header = 3;\n\t\tswitch(typeof range) {\n\t\t\tcase 'string': r = safe_decode_range(range); break;\n\t\t\tcase 'number': r = safe_decode_range(sheet[\"!ref\"]); r.s.r = range; break;\n\t\t\tdefault: r = range;\n\t\t}\n\t\tif(header > 0) offset = 0;\n\t\tvar rr = encode_row(r.s.r);\n\t\tvar cols = [];\n\t\tvar counter = 0;\n\t\tvar dense = Array.isArray(sheet);\n\t\tvar R = r.s.r, C = 0, CC = 0;\n\t\tif(dense && !sheet[R]) sheet[R] = [];\n\t\tfor(C = r.s.c; C <= r.e.c; ++C) {\n\t\t\tcols[C] = encode_col(C);\n\t\t\tval = dense ? sheet[R][C] : sheet[cols[C] + rr];\n\t\t\tswitch(header) {\n\t\t\t\tcase 1: hdr[C] = C - r.s.c; break;\n\t\t\t\tcase 2: hdr[C] = cols[C]; break;\n\t\t\t\tcase 3: hdr[C] = o.header[C - r.s.c]; break;\n\t\t\t\tdefault:\n\t\t\t\t\tif(val == null) val = {w: \"__EMPTY\", t: \"s\"};\n\t\t\t\t\tvv = v = format_cell(val, null, o);\n\t\t\t\t\tcounter = 0;\n\t\t\t\t\tfor(CC = 0; CC < hdr.length; ++CC) if(hdr[CC] == vv) vv = v + \"_\" + (++counter);\n\t\t\t\t\thdr[C] = vv;\n\t\t\t}\n\t\t}\n\t\tR = r.s.r + offset;\n\t\tstream._read = function() {\n\t\t\tif(R > r.e.r) return stream.push(null);\n\t\t\twhile(R <= r.e.r) {\n\t\t\t\t//if ((rowinfo[R-1]||{}).hidden) continue;\n\t\t\t\tvar row = make_json_row(sheet, r, R, cols, header, hdr, dense, o);\n\t\t\t\t++R;\n\t\t\t\tif((row.isempty === false) || (header === 1 ? o.blankrows !== false : !!o.blankrows)) {\n\t\t\t\t\tstream.push(row.row);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\treturn stream;\n\t};\n\n\tXLSX.stream = {\n\t\tto_json: write_json_stream,\n\t\tto_html: write_html_stream,\n\t\tto_csv: write_csv_stream\n\t};\n})();\n\nif(typeof parse_xlscfb !== \"undefined\") XLSX.parse_xlscfb = parse_xlscfb;\nXLSX.parse_zip = parse_zip;\nXLSX.read = readSync; //xlsread\nXLSX.readFile = readFileSync; //readFile\nXLSX.readFileSync = readFileSync;\nXLSX.write = writeSync;\nXLSX.writeFile = writeFileSync;\nXLSX.writeFileSync = writeFileSync;\nXLSX.writeFileAsync = writeFileAsync;\nXLSX.utils = utils;\nXLSX.SSF = SSF;\nif(typeof CFB !== \"undefined\") XLSX.CFB = CFB;\n}\n/*global define */\nif(typeof exports !== 'undefined') make_xlsx_lib(exports);\nelse if(typeof module !== 'undefined' && module.exports) make_xlsx_lib(module.exports);\nelse if(typeof define === 'function' && define.amd) define(function() { if(!XLSX.version) make_xlsx_lib(XLSX); return XLSX; });\nelse make_xlsx_lib(XLSX);\n/*exported XLS, ODS */\nvar XLS = XLSX, ODS = XLSX;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tif(__webpack_module_cache__[moduleId]) {\n\t\treturn __webpack_module_cache__[moduleId].exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// module exports must be returned from runtime so entry inlining is disabled\n// startup\n// Load entry module and return exports\nreturn __webpack_require__(2476);\n","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};"],"sourceRoot":""} \ No newline at end of file diff --git a/danfojs-browser/src/config/config.js b/danfojs-browser/src/config/config.js deleted file mode 100644 index 268663d2..00000000 --- a/danfojs-browser/src/config/config.js +++ /dev/null @@ -1,54 +0,0 @@ - -/** - * Package wide configuration class - */ -export class Configs { - constructor() { - this.table_width = 17; //set the width of each column printed in console - this.table_truncate = 16; //set the max number of string before text is truncated in printing - this.dtype_test_lim = 10; - this.table_max_row = 21; - this.table_max_col_in_console = 7; - } - - set_width(val) { - this.table_width = val; - } - - get get_width() { - return this.table_width; - } - - set_max_col_in_console(val) { - this.table_max_col_in_console = val; - } - - get get_max_col_in_console() { - return this.table_max_col_in_console; - } - - set_row_num(val) { - this.table_max_row = val; - } - - get get_max_row() { - return this.table_max_row; - } - - - get get_truncate() { - return this.table_truncate; - } - - set_truncate(val) { - this.table_truncate = val; - } - - get get_dtype_test_lim() { - return this.dtype_test_lim; - } - - set_dtype_test_lim(val) { - this.dtype_test_lim = val; - } -} diff --git a/danfojs-browser/src/core/concat.js b/danfojs-browser/src/core/concat.js deleted file mode 100644 index aa9bf9a2..00000000 --- a/danfojs-browser/src/core/concat.js +++ /dev/null @@ -1,221 +0,0 @@ -import { DataFrame } from './frame'; -import { Utils } from "./utils"; -import { Series } from './series'; - -const utils = new Utils(); - - -export class Concat { - constructor(kwargs) { - - - // check if keys exist in kwargs - utils.__in_object(kwargs, "df_list", "df_list not found: specify the list of dataframe"); - utils.__in_object(kwargs, "axis", "axis not found: specify the axis"); - - let df_list = null; //set the df_list to null - let axis = null; // set axis to null - let indexes = null; - - //check if df_list is an array - if (Array.isArray(kwargs["df_list"])) { - - df_list = kwargs["df_list"]; - } else { - throw new Error("df_list must be an Array of dataFrames/Series"); - } - - //check if axis is int and is either 0 or 1 - if (typeof kwargs["axis"] === "number") { - - if (kwargs["axis"] == 0 || kwargs["axis"] == 1) { - - axis = kwargs["axis"]; - } else { - axis = 1; - // throw new Error("Invalid axis: axis must be 0 or 1") - } - - } else { - throw new Error("axis must be a number"); - } - - - let df_object = Object.assign({}, df_list); // convert the array to object - - if (axis == 1) { - - let columns = []; - let duplicate_col_count = {}; - let max_length = 0; - let a_key = Object.keys(df_object)[0]; - indexes = df_object[a_key].index; - for (let key in df_object) { - - let column = df_object[key].columns; - let length = df_object[key].values.length; - - if (length > max_length) { - max_length = length; - } - - for (let index in column) { - - let col_name = column[index]; - if (col_name in duplicate_col_count) { - - let count = duplicate_col_count[col_name]; - let name = `${col_name}_${count + 1}`; - - columns.push(name); - - duplicate_col_count[col_name] = count + 1; - } else { - - columns.push(col_name); - duplicate_col_count[col_name] = 1; - } - } - - - } - - let data = new Array(max_length); - - for (let key in df_list) { - - let values = df_list[key].values; - - for (let index = 0; index < values.length; index++) { - - let val = values[index]; - if (typeof data[index] === "undefined") { - - if (Array.isArray(val)){ - data[index] = val; - } else { - data[index] = [ val ]; - } - - } else { - if (Array.isArray(val)){ - data[index].push(...val); - } else { - data[index].push(val); - } - - } - } - - if (values.length < max_length) { - let column_length = df_list[key].columns.length; - let null_array = Array(column_length); - - for (let col = 0; col < column_length; col++) { - null_array[col] = NaN; - } - - if (typeof data[max_length - 1] === "undefined") { - data[max_length - 1] = null_array; - } else { - data[max_length - 1].push(...null_array); - } - } - } - - let df = new DataFrame(data, { columns: columns, index: indexes }); //convert to dataframe - return df; - } else { - //concatenate base on axis 0 - let columns = []; - let row_indexes = []; - let col_i = 0; - for (let key in df_list) { - let column = df_list[key].columns; - columns.push(...column); - indexes = df_list[key].index; - let r_index = indexes.map((val) => { - return `${val}_row${col_i}`; - }); - row_indexes.push(...r_index); - col_i += 1; - } - - let column_set = new Set(columns); - - columns = Array.from(column_set); - - let data = []; - - for (let key in df_list) { - - let value = df_list[key].values; - - // let col_length = value[0].length - - let df_columns = df_list[key].columns; - - let not_exist = []; - for (let col_index in columns) { - let col_name = columns[col_index]; - - let is_index = df_columns.indexOf(col_name); - - if (is_index == -1) { - not_exist.push(col_name); - } - } - if (not_exist.length > 0) { - for (let i = 0; i < value.length; i++) { - let row_value = value[i]; - - let new_arr = Array(columns.length); - for (let j = 0; j < columns.length; j++) { - - let col_name = columns[j]; - if (not_exist.includes(col_name)) { - - new_arr[j] = NaN; - } else { - let index = df_columns.indexOf(col_name); - if (Array.isArray(row_value)){ - new_arr[j] = row_value[index]; - } else { - new_arr[j] = row_value; - } - - } - - } - data.push(new_arr); - } - } else { - data.push(...value); - } - - } - - if (Array.isArray(data[0])){ - let df = new DataFrame(data, { columns: columns, index: row_indexes }); - return df; - } else { - let sf = new Series(data, { index: row_indexes }); - return sf; - } - - - } - - } -} - - -/** -* Concatenate pandas objects along a particular axis with optional set logic along the other axes. -* @param {kwargs} {df_list: List of DataFrame to concatenate together axis: 0 for row axis and 1 for index axis -* @returns {DataFrame} -*/ -export const concat = (kwargs) => { - let concat_sf = new Concat(kwargs); - return concat_sf; -}; diff --git a/danfojs-browser/src/core/date_range.js b/danfojs-browser/src/core/date_range.js deleted file mode 100644 index 8e1ed433..00000000 --- a/danfojs-browser/src/core/date_range.js +++ /dev/null @@ -1,289 +0,0 @@ -import { Utils } from "./utils"; - -const utils = new Utils; - -/** - * Generate date range between a specified set of date - * @param {kwargs} kwargs { - * start : string - * end : string - * period: int - * freq : string - * } - * @returns Array - */ -export class date_range { - constructor(kwargs){ - - this.offset = null; - - if (utils.__key_in_object(kwargs, "start")){ - this.start = kwargs["start"]; - } else { - this.start = null; - } - - if (utils.__key_in_object(kwargs, "end")){ - this.end = kwargs["end"]; - } else { - this.end = null; - } - - if (utils.__key_in_object(kwargs, "period")){ - this.period = kwargs["period"]; - } else { - this.period = null; - } - - if (utils.__key_in_object(kwargs, "freq")){ - this.freq = kwargs["freq"]; - } else { - this.freq = "D"; - } - - this.freq_list = [ "M", "D", "s", "H", "m", "Y" ]; - - if (this.freq.length == 1){ - if (!this.freq_list.includes(this.freq)){ - throw new Error(`invalid freq ${this.freq}`); - } - } else { - let freq_split = this.freq.split(""); - this.offset = parseInt(freq_split[0]); - this.freq = freq_split[1]; - if (!this.freq_list.includes(this.freq)){ - throw new Error(`invalid freq ${this.freq}`); - } - } - - let rslt = this.range(this.start, this.end, this.period, this.offset); - return rslt; - - } - - range(start, end, period, offset = null){ - - let start_date = null; - let end_date = null; - let start_range = null; - let end_range = null; - if (start && end){ - start_date = new Date(start); - start_range = this.freq_type(start_date, this.freq); - end_date = new Date(end); - end_range = this.freq_type(end_date, this.freq); - - //check if the end year is greater than start year - let start_year = start_date.getFullYear(); - let end_year = end_date.getFullYear(); - if ((start_year < end_year)){ - // end_range = start_range + end_range - if (this.freq == "M"){ - end_range = this.month_end(start_date, end_date); - } else if (this.freq == "D"){ - end_range = this.day_end(start_date, end_date) - start_range; - - } - } - - let range_array = utils.__range(start_range, end_range); - - if (offset){ - range_array = this.offset_count(range_array, offset); - } - - if (this.freq == "M"){ - range_array = this.month_range(range_array); - } - - let date_range = range_array.map((x) => { - return this.set_dateProps(start_date, this.freq, x); - }); - date_range[date_range.length - 1] = end_date; - - let date_string = this.toLocalString(date_range); - - return date_string; - } else if (start && !(end)){ - start_date = new Date(start); - start_range = this.freq_type(start_date, this.freq); - end_range = offset ? ((period * offset) - 1) : period - 1; - - if (start_range > end_range){ - end_range = end_range + start_range; - } - let range_array = utils.__range(start_range, end_range); - - - if (offset){ - range_array = this.offset_count(range_array, offset); - } - - let date_range = range_array.map((x) => { - return this.set_dateProps(start_date, this.freq, x); - }); - - let date_string = this.toLocalString(date_range); - return date_string; - - } else if (end && !(start)){ - end_date = new Date(end); - end_range = this.freq_type(end_date, this.freq); - start_range = (end_range - period) + 1; - - let range_array = utils.__range(start_range, end_range); - - if (offset){ - range_array = this.offset_count(range_array, offset); - } - - let date_range = range_array.map((x) => { - return this.set_dateProps(end_date, this.freq, x); - }); - - let date_string = this.toLocalString(date_range); - return date_string; - } - } - - freq_type(date, ftype){ - - let rslt = null; - switch (ftype){ - - case "M": - rslt = date.getMonth(); - break; - case "Y": - rslt = date.getFullYear(); - break; - case "s": - rslt = date.getSeconds(); - break; - case "D": - rslt = date.getDate(); - break; - case "H": - rslt = date.getHours(); - break; - case "m": - rslt = date.getMinutes(); - break; - } - return rslt; - } - - offset_count(d_array, offset){ - - let r_array = []; - - for (let i = 0; i < d_array.length; i += offset){ - r_array.push(d_array[i]); - } - return r_array; - } - - set_dateProps(date, ftype, val){ - - let new_date = new Date(date.valueOf()); - switch (ftype){ - - case "M": - if (val.length == 2){ - - new_date.setYear(new_date.getFullYear() + val[0]); - new_date.setMonth(parseInt(val[1])); - } else { - new_date.setMonth(val); - } - - break; - case "Y": - new_date.setYear(val); - break; - case "s": - new_date.setSeconds(val); - break; - case "D": - new_date.setDate(val); - break; - case "H": - new_date.setHours(val); - break; - case "m": - new_date.setMinutes(val); - break; - } - return new_date; - } - - toLocalString(d_array){ - - let r_array = d_array.map((x) => { - - return x.toLocaleString(); - }); - - return r_array; - } - - month_end(start_date, end_date){ - - let end_month = end_date.getMonth(); - - let diff_year = end_date.getFullYear() - start_date.getFullYear(); - - let end_range = (12 * diff_year) + end_month; - - return end_range; - } - - month_range(range){ - - let minus = null; - let y_val = 0; - let d_range = range.map((x) => { - - if (x > 11){ - if (x % 12 == 0){ - minus = x; - y_val = x / 12; - return [ y_val, (x - minus) ]; - } else { - return [ y_val, (x - minus) ]; - } - - } - return [ y_val, x ]; - }); - - return d_range; - } - - day_end(start_date, end_date){ - - let month_end = this.month_end(start_date, end_date); - let range = utils.__range(start_date.getMonth(), month_end); - let m_range = this.month_range(range); - - // let s_date = new Date(start_date.getFullYear(),start_date.getMonth(),0) - let sum = 0; - for (let i = 0; i < m_range.length; i++){ - - let val = m_range[i]; - - let d_date = null; - if (i === m_range.length - 1) { - d_date = new Date(start_date.getFullYear() + val[0], val[1], end_date.getDate()).getDate(); - } else { - d_date = new Date(start_date.getFullYear() + val[0], val[1], 0).getDate(); - - } - - sum += d_date; - - } - return sum; - - } -} diff --git a/danfojs-browser/src/core/frame.js b/danfojs-browser/src/core/frame.js deleted file mode 100644 index 10636107..00000000 --- a/danfojs-browser/src/core/frame.js +++ /dev/null @@ -1,2172 +0,0 @@ -/** -* Copyright 2021, JsData. -* All rights reserved. -* -* This source code is licensed under the MIT license found in the -* LICENSE file in the root directory of this source tree. - -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -import * as tf from "@tensorflow/tfjs"; -import Ndframe from "./generic"; -import { Series } from "./series"; -import { Utils } from "./utils"; -import { GroupBy } from "./groupby"; -import { Plot } from "../plotting/plot"; -import { indexLoc } from "./indexing"; -import { concat } from "./concat.js"; - -const utils = new Utils(); -import { std, variance } from "mathjs"; - -/** - * A 2D frame object that stores data in structured tabular format - * @param {data} data, JSON, Array, 2D Tensor - * @param {kwargs} Object {columns: Array of column names, defaults to ordered numbers when not specified - * dtypes: strings of data types, automatically inferred when not specified - * index: row index for subseting array, defaults to ordered numbers when not specified} - * - * @returns DataFrame - */ -export class DataFrame extends Ndframe { - constructor(data, kwargs) { - super(data, kwargs); - this._set_column_property(); //set column property on DataFrame Class for easy accessing using the format df['colname'] - } - - _set_column_property() { - let col_vals = this.col_data; - let col_names = this.column_names; - - col_vals.forEach((col, i) => { - this[col_names[i]] = null; - Object.defineProperty(this, col_names[i], { - get() { - return new Series(this.col_data[i], { - columns: col_names[i], - index: this.index - }); - }, - set(value) { - this.addColumn({ column: col_names[i], value: value }); - } - }); - }); - } - /** - * Write a CSV file of the DataFrame contents - * @param {string} csvFilePath Path to save CSV when in Node.js form - * @returns {Promise} CSV representation of Object data - * - */ - async to_csv(csvFilePath = "") { - const csvContent = await super.to_csv(); - // behave differently for Node vs Web - if (typeof window === "undefined") { - // Write CSV on Node.js - // eslint-disable-next-line no-undef - const fs = require("fs"); - fs.writeFileSync( - csvFilePath, - csvContent, - (err) => err && console.error(err) - ); - } else { - // Download CSV on Web - const webCSV = "data:text/csv;charset=utf-8," + csvContent; - window.open(encodeURI(webCSV)); - } - return csvContent; - } - - /** - * Drop a list of rows or columns base on the specified axis - * @param {Object} kwargs Configuration object - * {columns: [Array(Columns| Index)] array of column names to drop - * axis: row=0, columns=1 - * inplace: specify whether to drop the row/column with/without creating a new DataFrame} - * @returns null | DataFrame - * - */ - drop(kwargs = {}) { - let params_needed = [ "columns", "index", "inplace", "axis" ]; - utils._throw_wrong_params_error(kwargs, params_needed); - - kwargs["inplace"] = kwargs["inplace"] || false; - - if (!("axis" in kwargs)) { - kwargs["axis"] = 1; - } - - let to_drop = null; - if ("index" in kwargs && kwargs["axis"] == 0) { - to_drop = kwargs["index"]; - } else { - to_drop = kwargs["columns"]; - } - - if (kwargs["axis"] == 1) { - if (!("columns" in kwargs)) { - throw Error( - "No column found. Axis of 1 must be accompanied by an array of column(s) names" - ); - } - let self = this; - let new_col_data = {}; - let new_dtype = []; - - const index = to_drop.map((x) => { - let col_idx = self.columns.indexOf(x); - if (col_idx == -1) { - throw new Error(`column "${x}" does not exist`); - } - return col_idx; - }); - - this.col_data.forEach((col, idx) => { - if (!index.includes(idx)) { - new_col_data[self.column_names[idx]] = col; - new_dtype.push(self.dtypes[idx]); - } - }); - - if (!kwargs["inplace"]) { - let old_cols = self.columns; - let new_columns = Object.keys(new_col_data); - let df = new DataFrame(new_col_data, { - index: self.index, - dtypes: new_dtype - }); - df.__set_col_property(df, df.col_data, new_columns, old_cols); - return df; - } else { - let old_cols = self.columns; - let new_columns = Object.keys(new_col_data); - this.__update_frame_in_place(null, null, new_col_data, null, new_dtype); - this.__set_col_property(self, self.col_data, new_columns, old_cols); - } - } else { - if (!utils.__key_in_object(kwargs, "index")) { - throw Error( - "No index label found. Axis of 0 must be accompanied by an array of index labels" - ); - } - to_drop.forEach((x) => { - if (!this.index.includes(x)) - throw new Error(`${x} does not exist in index`); - }); - const values = this.values; - let data_idx = []; - let new_data, new_index; - if (typeof to_drop[0] == "string") { - //get index of strings labels in rows - this.index.forEach((idx, i) => { - if (to_drop.includes(idx)) { - data_idx.push(i); - } - }); - new_data = utils.__remove_arr(values, data_idx); - new_index = utils.__remove_arr(this.index, data_idx); - } else { - new_data = utils.__remove_arr(values, to_drop); - new_index = utils.__remove_arr(this.index, to_drop); - } - - if (!kwargs["inplace"]) { - return new DataFrame(new_data, { - columns: this.columns, - index: new_index - }); - } else { - this.row_data_tensor = tf.tensor(new_data); - this.data = new_data; - this.__set_index(new_index); - } - } - } - - /** - * Purely label based indexing. Can accept string label names for both rows and columns - * @param {kwargs} kwargs object {rows: Array of index, columns: Array of column name(s)} - * @return DataFrame data stucture - */ - loc(kwargs = {}) { - let params_needed = [ "columns", "rows" ]; - utils._throw_wrong_params_error(kwargs, params_needed); - - kwargs["type"] = "loc"; - let [ new_data, columns, rows ] = indexLoc(this, kwargs); - let df_columns = { columns: columns }; - let df = new DataFrame(new_data, df_columns); - df.__set_index(rows); - return df; - } - - /** - * Access a dataframe element using row and column index - * @param {*} kwargs object {rows: Array of index, columns: Array of column index} - * @return DataFrame data stucture - */ - iloc(kwargs = {}) { - let params_needed = [ "columns", "rows" ]; - utils._throw_wrong_params_error(kwargs, params_needed); - - kwargs["type"] = "iloc"; - - let [ new_data, columns, rows ] = indexLoc(this, kwargs); - let df_columns = { columns: columns }; - let df = new DataFrame(new_data, df_columns); - df.__set_index(rows); - return df; - } - - /** - * Prints the first n values in a dataframe - * @param {rows} rows --> int - * @returns DataFrame - */ - head(rows = 5) { - if (rows > this.values.length || rows < 1) { - //return all values - return this; - } else { - //Creates a new dataframe with first [rows] - let data = this.values.slice(0, rows); - let idx = this.index.slice(0, rows); - let config = { columns: this.column_names, index: idx }; - let df = new DataFrame(data, config); - return df; - } - } - - /** - * Prints the last n values in a dataframe - * @param {rows} rows --> int - * @returns DataFrame - */ - tail(rows = 5) { - let row_len = this.values.length; - if (rows > row_len || rows < 1) { - //return all values - return this; - } else { - //Creates a new dataframe with last [rows] - let data = this.values.slice(row_len - rows); - let indx = this.index.slice(row_len - rows); - let config = { columns: this.column_names, index: indx }; - let df = new DataFrame(data, config); - return df; - } - } - - /** - * Gets [num] number of random rows in a dataframe - * @param {num} rows --> The number of rows to return - * @param {seed} seed --> (Optional) An integer specifying the random seed that will be used to create the distribution. - * @returns {Promise} resolves to a DataFrame object - */ - async sample(num = -1, seed = 1) { - if (num > this.shape[0]) { - throw new Error("Sample size n cannot be bigger than size of dataset"); - } - if (num < -1 || num == 0) { - throw new Error("Sample size cannot be less than -1 or 0"); - } - num = num === -1 ? this.shape[0] : num; - const shuffled_index = await tf.data.array(this.index).shuffle(num, seed).take(num).toArray(); - const df = this.iloc({ rows: shuffled_index }); - return df; - } - - - /** - * Return Addition of DataFrame and other, element-wise (binary operator add). - * @param {other} DataFrame, Series, Array or Number to add - * @returns {DataFrame} - */ - add(other, axis) { - if (this.__frame_is_compactible_for_operation) { - //check if all types a numeric - let tensors = this.__get_ops_tensors([ this, other ], axis); - let sum_vals = tensors[0].add(tensors[1]); - let col_names = this.columns; - return this.__get_df_from_tensor(sum_vals, col_names); - } else { - throw Error("TypeError: Dtypes of columns must be Float of Int"); - } - } - - /** - * Return subtraction of DataFrame and other, element-wise (binary operator add). - * @param {other} DataFrame, Series, Array or Number to add - * @returns {DataFrame} - */ - sub(other, axis) { - if (this.__frame_is_compactible_for_operation) { - //check if all types are numeric - let tensors = this.__get_ops_tensors([ this, other ], axis); - let result = tensors[0].sub(tensors[1]); - let col_names = this.columns; - return this.__get_df_from_tensor(result, col_names); - } else { - throw Error("TypeError: Dtypes of columns must be Float of Int"); - } - } - - /** - * Return subtraction of DataFrame and other, element-wise (binary operator add). - * @param {other} DataFrame, Series, Array or Number to add - * @returns {DataFrame} - */ - mul(other, axis) { - if (this.__frame_is_compactible_for_operation) { - //check if all types are numeric - let tensors = this.__get_ops_tensors([ this, other ], axis); - let result = tensors[0].mul(tensors[1]); - let col_names = this.columns; - return this.__get_df_from_tensor(result, col_names); - } else { - throw Error("TypeError: Dtypes of columns must be Float of Int"); - } - } - - /** - * Return division of DataFrame and other, element-wise (binary operator add). - * @param {other} DataFrame, Series, Array or Number to add - * @returns {DataFrame} - */ - div(other, axis) { - if (this.__frame_is_compactible_for_operation) { - //check if all types are numeric - let tensors = this.__get_ops_tensors([ this, other ], axis); - let result = tensors[0].div(tensors[1]); - let col_names = this.columns; - return this.__get_df_from_tensor(result, col_names); - } else { - throw Error("TypeError: Dtypes of columns must be Float of Int"); - } - } - - /** - * Return division of DataFrame and other, element-wise (binary operator add). - * @param {other} DataFrame, Series, Array or Number to add - * @returns {DataFrame} - */ - pow(other, axis) { - if (this.__frame_is_compactible_for_operation) { - //check if all types are numeric - let tensors = this.__get_ops_tensors([ this, other ], axis); - let result = tensors[0].pow(tensors[1]); - let col_names = this.columns; - return this.__get_df_from_tensor(result, col_names); - } else { - throw Error("TypeError: Dtypes of columns must be Float of Int"); - } - } - - /** - * Return division of DataFrame and other, element-wise (binary operator add). - * @param {other} DataFrame, Series, Array or Number to add - * @returns {DataFrame} - */ - mod(other, axis) { - if (this.__frame_is_compactible_for_operation) { - //check if all types are numeric - let tensors = this.__get_ops_tensors([ this, other ], axis); - let result = tensors[0].mod(tensors[1]); - let col_names = this.columns; - return this.__get_df_from_tensor(result, col_names); - } else { - throw Error("TypeError: Dtypes of columns must be Float of Int"); - } - } - - /** - * Return mean of DataFrame across specified axis. - * @param {axis} Number {0: row, 1 : column} Axis for the function to be applied on - * @returns {Series} - */ - mean(axis = 1) { - if (this.__frame_is_compactible_for_operation()) { - let values; - let val_mean = []; - if (axis == 1) { - values = this.col_data; - } else { - values = this.values; - } - - values.map((arr) => { - let temp = utils._remove_nans(arr); - let temp_mean = tf.tensor(temp).mean().arraySync(); - val_mean.push(Number(temp_mean.toFixed(5))); - }); - - let new_index; - if (axis == 1) { - new_index = this.column_names; - } else { - new_index = this.index; - } - let sf = new Series(val_mean, { columns: "sum", index: new_index }); - return sf; - } else { - throw Error("Dtype Error: Operation can not be performed on string type"); - } - } - - /** - * Return median of DataFrame across specified axis. - * @param {axis} Number {0: row, 1 : column} Axis for the function to be applied on - * @returns {Series} - */ - median(axis = 1) { - if (this.__frame_is_compactible_for_operation) { - //check if all types are numeric - let tensor_vals, idx; - if (axis == 1) { - tensor_vals = this.col_data_tensor.arraySync(); - idx = this.column_names; - } else { - tensor_vals = this.row_data_tensor.arraySync(); - idx = this.index; - } - let median = utils.__median(tensor_vals, false); - let sf = new Series(median, { index: idx }); - return sf; - } else { - throw Error("TypeError: Dtypes of columns must be Float of Int"); - } - } - - /** - * Return minimum element in a DataFrame across specified axis. - * @param {axis} Number {0: row, 1 : column} Axis for the function to be applied on - * @returns {Series} - */ - min(axis = 1) { - if (this.__frame_is_compactible_for_operation) { - //check if all types are numeric - let operands = this.__get_tensor_and_idx(this, axis); - let tensor_vals = operands[0]; - let idx = operands[1]; - let result = tensor_vals.min(operands[2]); - let sf = new Series(result.arraySync(), { index: idx }); - return sf; - } else { - throw Error("TypeError: Dtypes of columns must be Float of Int"); - } - } - - /** - * Return maximum element of DataFrame across specified axis. - * @param {axis} Number {0: row, 1 : column} Axis for the function to be applied on - * @returns {Series} - */ - max(axis = 1) { - if (this.__frame_is_compactible_for_operation) { - //check if all types are numeric - let operands = this.__get_tensor_and_idx(this, axis); - let tensor_vals = operands[0]; - let idx = operands[1]; - let result = tensor_vals.max(operands[2]); - let sf = new Series(result.arraySync(), { index: idx }); - return sf; - } else { - throw Error("TypeError: Dtypes of columns must be Float of Int"); - } - } - - /** - * Return standard deviation of DataFrame across specified axis. - * @param {axis} Number {0: row, 1 : column} Axis for the function to be applied on - * @returns {Series} - */ - std(axis = 1) { - if (this.__frame_is_compactible_for_operation) { - //check if all types are numeric - let tensor_vals = this.col_data_tensor.arraySync(); - let idx; - if (axis == 1) { - idx = this.column_names; - } else { - idx = this.index; - } - let median = std(tensor_vals, axis); - let sf = new Series(median, { index: idx }); - return sf; - } else { - throw Error("TypeError: Dtypes of columns must be Float of Int"); - } - } - - /** - * Return variance of DataFrame across specified axis. - * @param {axis} Number {0: row, 1 : column} Axis for the function to be applied on - * @returns {Series} - */ - var(axis = 1) { - if (this.__frame_is_compactible_for_operation) { - //check if all types are numeric - let tensor_vals = this.col_data_tensor.arraySync(); - let idx; - if (axis == 1) { - idx = this.column_names; - } else { - idx = this.index; - } - let median = variance(tensor_vals, axis); - let sf = new Series(median, { index: idx }); - return sf; - } else { - throw Error("TypeError: Dtypes of columns must be Float of Int"); - } - } - - /** - * Return number of non-null elements in a Series - * @returns {Series}, Count of non-null values - */ - count(axis = 1) { - if (this.__frame_is_compactible_for_operation) { - //check if all types are numeric - let tensor_vals, idx; - if (axis == 1) { - tensor_vals = this.col_data_tensor.arraySync(); - idx = this.column_names; - } else { - tensor_vals = this.row_data_tensor.arraySync(); - idx = this.index; - } - let counts = utils.__count_nan(tensor_vals, true, false); - let sf = new Series(counts, { index: idx }); - return sf; - } else { - throw Error("TypeError: Dtypes of columns must be Float of Int"); - } - } - - /** - * Rounds values in DataFrame to specified number of dp - * @returns {DataFrame}, New DataFrame with rounded values - */ - round(dp = 1) { - if (this.__frame_is_compactible_for_operation) { - //check if all types are numeric - let values = this.values; - let idx = this.index; - - let new_vals = utils.__round(values, dp, false); - let options = { columns: this.column_names, index: idx }; - let df = new DataFrame(new_vals, options); - return df; - } else { - throw Error("TypeError: Dtypes of columns must be Float of Int"); - } - } - - /** - * Perform Cummulative operations - * @param {axis} axis [int] {0 or 1} - * @param {ops} ops {String} name of operation - * @return {DataFrame} - */ - __cum_ops(axis = 0, ops) { - if (!(axis == 0) && !(axis == 1)) { - throw new Error("axis must be between 0 or 1"); - } - - if (this.__frame_is_compactible_for_operation) { - let data = []; - let df_data = null; - - if (axis == 0) { - df_data = this.col_data; - } else { - df_data = this.values; - } - - for (let i = 0; i < df_data.length; i++) { - let value = df_data[i]; - let temp_val = value[0]; - let temp_data = [ temp_val ]; - for (let j = 1; j < value.length; j++) { - let curr_val = value[j]; - switch (ops) { - case "max": - if (curr_val > temp_val) { - temp_val = curr_val; - temp_data.push(curr_val); - } else { - temp_data.push(temp_val); - } - break; - case "min": - if (curr_val < temp_val) { - temp_val = curr_val; - temp_data.push(curr_val); - } else { - temp_data.push(temp_val); - } - break; - case "sum": - temp_val = temp_val + curr_val; - temp_data.push(temp_val); - - break; - case "prod": - temp_val = temp_val * curr_val; - temp_data.push(temp_val); - - break; - } - } - data.push(temp_data); - } - - if (axis == 0) { - data = utils.__get_col_values(data); - } - - return new DataFrame(data, { columns: this.columns }); - } else { - throw Error("TypeError: Dtypes of columns must be Float of Int"); - } - } - /** - * calculate the cummulative sum along axis - * @param {kwargs} {axis: [int]} - * @returns {DataFrame} - */ - cumsum(kwargs = {}) { - let axis; - if (!utils.__key_in_object(kwargs, "axis")) { - axis = 0; - } else { - axis = kwargs["axis"]; - } - // let axis = kwargs["axis"] || 0 - let data = this.__cum_ops(axis, "sum"); - return data; - } - - /** - * calculate the cummulative min - * @param {kwargs} {axis: [int]} - * @returns {DataFrame} - */ - cummin(kwargs = {}) { - let axis; - if (!utils.__key_in_object(kwargs, "axis")) { - axis = 0; - } else { - axis = kwargs["axis"]; - } - let data = this.__cum_ops(axis, "min"); - return data; - } - - /** - * calculate the cummulative max - * @param {kwargs} {axis: [int]} - * @returns {DataFrame} - */ - cummax(kwargs = {}) { - let axis; - if (!utils.__key_in_object(kwargs, "axis")) { - axis = 0; - } else { - axis = kwargs["axis"]; - } - let data = this.__cum_ops(axis, "max"); - return data; - } - - /** - * calculate the cummulative prod - * @param {kwargs} {axis: [int]} - * @returns {DataFrame} - */ - cumprod(kwargs = {}) { - let axis; - if (!utils.__key_in_object(kwargs, "axis")) { - axis = 0; - } else { - axis = kwargs["axis"]; - } - let data = this.__cum_ops(axis, "prod"); - return data; - } - - /** - * Makes a new copy of a DataFrame - * @returns {DataFrame} - */ - copy() { - let df = new DataFrame([ ...this.values ], { - columns: [ ...this.column_names ], - index: this.index, - dtypes: this.dtypes - }); - return df; - } - - /** - * Generate a new index for the DataFrame. - * This is useful when the index is meaningless and needs to be reset to the default before another operation. - * @param {inplace} boolean: Modify the original object or return a new one. Default to false - */ - reset_index(inplace = false) { - if (inplace) { - this.__reset_index(); - } else { - let df = this.copy(); - df.__reset_index(); - return df; - } - } - - /** - * Set the DataFrame index (row labels) using an array of the same length. - * @param {kwargs} {index: Array of new index values} - */ - set_index(kwargs = {}) { - let params_needed = [ "key", "drop", "inplace" ]; - utils._throw_wrong_params_error(kwargs, params_needed); - - if (!utils.__key_in_object(kwargs, "key")) { - throw Error("Index ValueError: You must specify an array of index"); - } - - if (!utils.__key_in_object(kwargs, "inplace")) { - kwargs["inplace"] = false; - } - - if (!utils.__key_in_object(kwargs, "drop")) { - kwargs["drop"] = true; - } - - if ( - Array.isArray(kwargs["key"]) && - kwargs["key"].length != this.index.length - ) { - throw Error( - `Index LengthError: Lenght of new Index array ${kwargs["key"].length} must match lenght of existing index ${this.index.length}` - ); - } - - if ( - typeof kwargs["key"] == "string" && - this.column_names.includes(kwargs["key"]) - ) { - kwargs["key_name"] = kwargs["key"]; - kwargs["key"] = this[kwargs["key"]].values; - } - if (kwargs["inplace"]) { - // this.index_arr = kwargs['key'] - this.__set_index(kwargs["key"]); - if (kwargs["drop"] && typeof kwargs["key_name"] == "string") { - this.drop({ columns: [ kwargs["key_name"] ], inplace: true, axis: 1 }); - } - } else { - let df = this.copy(); - df.__set_index(kwargs["key"]); - if (kwargs["drop"] && typeof kwargs["key_name"] == "string") { - df.drop({ columns: [ kwargs["key_name"] ], axis: 1, inplace: true }); - } - return df; - } - } - - /** - * Generate descriptive statistics for all numeric columns - * Descriptive statistics include those that summarize the central tendency, - * dispersion and shape of a dataset’s distribution, excluding NaN values. - * @returns {Series} - */ - describe() { - let numeric_df = this.select_dtypes([ "float32", "int32" ]); - let col_names = numeric_df.column_names; - let index = [ "count", "mean", "std", "min", "median", "max", "variance" ]; - - let stats_arr = {}; - col_names.forEach((name) => { - let col_series = numeric_df[name]; - let count = col_series.count(); - let mean = col_series.mean(); - let std = col_series.std(); - let min = col_series.min(); - let median = col_series.median(); - let max = col_series.max(); - let variance = col_series.var(); - - let _stats = [ count, mean, std, min, median, max, variance ]; - stats_arr[name] = _stats; - }); - let df = new DataFrame(stats_arr, { index: index }); - return df.round(6); - } - - /** - * Return a subset of the DataFrame’s columns based on the column dtypes. - * @param {include} scalar or array-like. A selection of dtypes or strings to be included. At least one of these parameters must be supplied. - * @returns {DataFrame, Series} The subset of the frame including the dtypes. - */ - select_dtypes(include) { - let dtypes = this.dtypes; - let col_names = this.column_names; - let col_vals = {}; - let original_col_vals = this.col_data; - const __supported_dtypes = [ "float32", "int32", "string", "boolean" ]; - - if (include == undefined) { - //return all - let df = this.copy(); - return df; - } else { - //check if the right types are included - include.forEach((type) => { - if (!__supported_dtypes.includes(type)) { - throw Error(`Dtype Error: dtype ${type} not supported.`); - } - }); - - dtypes.forEach((dtype, i) => { - if (include.includes(dtype)) { - col_vals[col_names[i]] = original_col_vals[i]; - } - }); - let df = new DataFrame(col_vals); - return df; - } - } - - /** - * Sort a Dataframe in ascending or descending order by a specified column name. - * @param {kwargs} Object, {by: Column name to sort by - * ascending (Bool): Whether to return sorted values in ascending order or not, - * inplace (Bool): Whether to perform sorting on the original Series or not} - * @returns {Series} - */ - // sort_values(kwargs = {}) { - // if (utils.__key_in_object(kwargs, "by")) { - // let sort_col = this.column(kwargs["by"]) - // let sorted_col, sorted_index; - // let new_row_data = [] - - // if (utils.__key_in_object(kwargs, "inplace") && kwargs['inplace'] == true) { - // sort_col.sort_values(kwargs) - // sorted_index = sort_col.index - - // } else { - // sorted_col = sort_col.sort_values(kwargs) - // sorted_index = sorted_col.index - // } - - // sorted_index.map(idx => { - // new_row_data.push(this.values[idx]) - // }) - - // if (utils.__key_in_object(kwargs, "inplace") && kwargs['inplace'] == true) { - // this.data = new_row_data - // this.index_arr = sorted_index - // return null - // } else { - // let df = new DataFrame(new_row_data, { columns: this.column_names, index: sorted_index, dtype: this.dtypes }) - // return df - // } - - // } else { - // throw Error("Value Error: must specify the column to sort by") - // } - - // sorted_index.map(idx => { - // new_row_data.push(this.values[idx]) - // }) - - // if (utils.__key_in_object(kwargs, "inplace") && kwargs['inplace'] == true) { - // this.__update_frame_in_place(new_row_data, null, null, sorted_index, null) - - // } else { - // let df = new DataFrame(new_row_data, { columns: this.column_names, index: sorted_index, dtype: this.dtypes }) - // return df - // } - - // } else { - // throw Error("Value Error: must specify the column to sort by") - // } - - // } - - /** - * Return the sum of the values in a DataFrame across a specified axis. - * @params {kwargs} {axis: 0 for row and 1 for column} - * @returns {Series}, Sum of values accross axis - */ - sum(kwargs = { axis: 1 }) { - if (this.__frame_is_compactible_for_operation()) { - let values; - let val_sums = []; - if (kwargs["axis"] == 1) { - values = this.col_data; - } else { - values = this.values; - } - - values.map((arr) => { - let temp = utils._remove_nans(arr); - let temp_sum = tf.tensor(temp).sum().arraySync(); - val_sums.push(Number(temp_sum.toFixed(5))); - }); - - let new_index; - if (kwargs["axis"] == 1) { - new_index = this.column_names; - } else { - new_index = this.index; - } - let sf = new Series(val_sums, { columns: "sum", index: new_index }); - return sf; - } else { - throw Error("Dtype Error: Operation can not be performed on string type"); - } - } - - /** - * Returns the absolute values in DataFrame - * @return {DataFrame} - */ - abs() { - let data = this.values; - - let tensor_data = tf.tensor(data); - let abs_data = tensor_data.abs().arraySync(); - let df = new DataFrame(utils.__round(abs_data, 2, false), { - columns: this.column_names, - index: this.index - }); - return df; - } - - __get_tensor_and_idx(df, axis) { - let tensor_vals, idx, t_axis; - if (axis == 1) { - //Tensorflow uses 0 for column and 1 for rows, - // we use the opposite for consistency with Pandas (0 : row, 1: columns) - tensor_vals = df.row_data_tensor; - idx = df.column_names; - t_axis = 0; //switch the axis - } else { - tensor_vals = df.row_data_tensor; - idx = df.index; - t_axis = 1; - } - - return [ tensor_vals, idx, t_axis ]; - } - - /** - * Filter DataFrame element base on the element in a column - * @param {kwargs} kwargs {column : coumn name[string], is: String, to: string| int} - * @returns {DataFrame} - */ - query(kwargs) { - //define the set of operators to be used - let operators = [ ">", "<", "<=", ">=", "==", "!=" ]; - - if (!utils.__key_in_object(kwargs, "inplace")) { - kwargs["inplace"] = false; - } - - let column_index, operator, value; - - if (utils.__key_in_object(kwargs, "column")) { - if (this.columns.includes(kwargs["column"])) { - column_index = this.columns.indexOf(kwargs["column"]); - } else { - throw new Error(`column ${kwargs["column"]} does not exist`); - } - } else { - throw new Error("specify the column"); - } - - if (utils.__key_in_object(kwargs, "is")) { - if (operators.includes(kwargs["is"])) { - operator = kwargs["is"]; - } else { - throw new Error(` ${kwargs["is"]} is not a supported logical operator`); - } - } else { - throw new Error("specify an operator in param [is]"); - } - - if (utils.__key_in_object(kwargs, "to")) { - value = kwargs["to"]; - } else { - throw new Error("specify a value in param [to]"); - } - - let data = this.values; - let index = this.index; - let new_data = []; - let new_index = []; - - for (var i = 0; i < data.length; i++) { - let data_value = data[i]; - let elem = data_value[column_index]; - //use eval function for easy operation - //eval() takes in a string expression e.g eval('2>5') - if (eval(`elem${operator}value`)) { - new_data.push(data_value); - new_index.push(index[i]); - } - } - - if (new_data.length == 0) { - throw new Error( - `query returned empty data; is either ${value} does not exist in column ${kwargs["column"]}` - ); - } - if (kwargs["inplace"]) { - this.__update_frame_in_place( - new_data, - this.columns, - null, - new_index, - null - ); - } else { - let new_df = new DataFrame(new_data, { - columns: this.columns, - index: new_index - }); - return new_df; - } - } - - /** - * Add a column with values to the dataframe - * @param {kwargs} Object {column :[string] , value:[Array]} - * - */ - addColumn(kwargs) { - utils.__in_object(kwargs, "column", "column name not specified"); - utils.__in_object(kwargs, "value", "column value not specified"); - - let column_name = kwargs["column"]; - let data_length = this.shape[0]; - let value; - - if (kwargs["value"] instanceof Series) { - value = kwargs["value"].values; - } else { - value = kwargs["value"]; - } - - if (value.length != data_length) { - throw new Error( - `Array length ${value.length} not equal to ${data_length}` - ); - } - - if (this.columns.includes(column_name)) { - let col_idx = this.columns.indexOf(column_name); - let new_data = []; - - this.values.map((val, index) => { - let new_val = val.slice(); - new_val[col_idx] = value[index]; - new_data.push(new_val); - }); - this.__update_frame_in_place(new_data, null, null, null, null); - } else { - let data = this.values; - let new_data = []; - - data.map(function (val, index) { - let new_val = val.slice(); - new_val.push(value[index]); - new_data.push(new_val); - }); - - //add new dtype - let new_dtypes = [ ...this.dtypes ]; - new_dtypes.push(utils.__get_t(value)[0]); - - let new_col_names = [ ...this.columns ]; - new_col_names.push(column_name); - - this.__update_frame_in_place( - new_data, - new_col_names, - null, - null, - new_dtypes - ); - Object.defineProperty(this, column_name, { - get() { - return new Series(value, { columns: column_name, index: this.index }); - }, - set(value) { - this.addColumn({ column: column_name, value: value }); - } - }); - } - } - - /** - * - * @param {col} col is a list of columns - */ - groupby(col) { - const len = this.shape[0]; - const column_names = this.column_names; - const col_index = col.map((val) => column_names.indexOf(val)); - const col_dtype = this.dtypes.filter((val, index) => { - return col_index.includes(index); - }); - - const self = this; - const data = col.map( - (column_name) => { - if (!(column_names.includes(column_name))) - throw new Error(`column ${column_name} does not exist`); - const [ column_data, _ ] = indexLoc(self, { - rows: [ `0:${len}` ], - columns: [ `${column_name}` ], - type: "loc" - }); - return column_data; - } - ); - - const unique_columns = data.map((column_data) => utils.__unique(column_data)); - - function getRecursiveDict(uniq_columns) { - const first_uniq_columns = uniq_columns[0]; - const remaining_columns = uniq_columns.slice(1); - const c_dict = {}; - if (!remaining_columns.length) - first_uniq_columns.forEach((col_value) => c_dict[col_value] = []); - else - first_uniq_columns.forEach((col_value) => c_dict[col_value] = getRecursiveDict(remaining_columns)); - return c_dict; - } - const col_dict = getRecursiveDict(unique_columns); - - return new GroupBy( - col_dict, - col, - this.values, - column_names, - col_dtype - ).group(); - } - - /** - * Return a sequence of axis dimension along row and columns - * @params col_name: the name of a column in the database. - * @returns tensor of shape 1 - */ - column(col_name) { - if (!this.columns.includes(col_name)) { - throw new Error(`column ${col_name} does not exist`); - } - let col_indx_objs = utils.__arr_to_obj(this.columns); - let indx = col_indx_objs[col_name]; - let data = this.col_data[indx]; - return new Series(data, { columns: [ col_name ] }); - } - - /** - * Replace NaN or undefined with a specified value" - * @param {kwargs}, {column(s): Array of column name(s) to fill. If undefined fill all columns; - * value(s): Array | Scalar of value(s) to fill with. If single value is specified, we use it to fill all - * @return {DataFrame} - */ - fillna(kwargs = {}) { - let params_needed = [ "columns", "values", "inplace" ]; - utils._throw_wrong_params_error(kwargs, params_needed); - - if (!utils.__key_in_object(kwargs, "inplace")) { - kwargs["inplace"] = false; - } - - if (utils.__key_in_object(kwargs, "columns")) { - //check if the column(s) exists - kwargs["columns"].map((col) => { - if (!this.column_names.includes(col)) { - throw Error( - `Value Error: Specified columns must be one of ${this.column_names}, got ${col}` - ); - } - }); - - if (kwargs["columns"].length != kwargs["values"].length) { - throw Error(`Lenght Error: The lenght of the columns names must be equal to the lenght of the values, - got column of length ${kwargs["columns"].length} but values of length ${kwargs["values"].length}`); - } - let new_col_data = this.col_data; - kwargs["columns"].map((col, i) => { - let col_idx = this.column_names.indexOf(col); - let col_data = this.col_data[col_idx]; - - let __temp = []; - col_data.map((val) => { - //fill the column - if (isNaN(val) && typeof val != "string") { - __temp.push(kwargs["values"][i]); - } else { - __temp.push(val); - } - }); - new_col_data[col_idx] = __temp; - }); - - let final_data = {}; - new_col_data.map((col, i) => { - final_data[this.column_names[i]] = col; - }); - - if (kwargs["inplace"]) { - this.__update_frame_in_place(null, null, final_data, null, null); - } else { - return new DataFrame(final_data, { index: this.index }); - } - } else { - //fill all columns using same value - if (!utils.__key_in_object(kwargs, "values")) { - throw Error("Value Error: Please specify a fill value"); - } - - let nan_val; - if (Array.isArray(kwargs["values"])) { - nan_val = kwargs["values"][0]; - } else { - nan_val = kwargs["values"]; - } - let data = []; - let values = this.values; - let columns = this.columns; - - for (let i = 0; i < values.length; i++) { - let temp_data = []; - let row_value = values[i]; - for (let j = 0; j < row_value.length; j++) { - if (isNaN(row_value[j]) && typeof row_value[j] != "string") { - temp_data.push(nan_val); - } else { - temp_data.push(row_value[j]); - } - } - data.push(temp_data); - } - if (kwargs["inplace"]) { - this.__update_frame_in_place(data, null, null, null, null); - } else { - return new DataFrame(data, { columns: columns, index: this.index }); - } - } - } - - /** - * Return a boolean same-sized object indicating if the values are NaN. NaN and undefined values, - * gets mapped to True values. Everything else gets mapped to False values. - * @return {DataFrame} - */ - isna() { - let new_row_data = this.__isna(); - let columns = this.column_names; - return new DataFrame(new_row_data, { columns: columns, index: this.index }); - } - - /** - * Obtain index containing nan values - * @return Array list (int) - */ - nanIndex() { - let df_values = this.values; - let index_data = []; - - for (let i = 0; i < df_values.length; i++) { - let row_values = df_values[i]; - - if (row_values.includes(NaN)) { - index_data.push(i); - } - } - return index_data; - } - - /** - * Drop all rows containing NaN - * @param {kwargs} kwargs [Object] {axis: [int]{o or 1}, inplace:[boolean]} - */ - dropna(kwargs = {}) { - let axis = kwargs["axis"] || 0; - let inplace = kwargs["inplace"] || false; - - if (axis != 0 && axis != 1) { - throw new Error("axis must either be 1 or 0"); - } - - let df_values = null; - let columns = null; - if (axis == 0) { - df_values = this.values; - columns = this.columns; - } else { - df_values = this.col_data; - columns = []; - } - let data = []; - - for (let i = 0; i < df_values.length; i++) { - let values = df_values[i]; - - if (!values.includes(NaN)) { - if (axis == 0) { - data.push(values); - } else { - columns.push(this.columns[i]); - if (data.length == 0) { - for (let j = 0; j < values.length; j++) { - data.push([ values[j] ]); - } - } else { - for (let j = 0; j < data.length; j++) { - data[j].push(values[j]); - } - } - } - } - } - - if (inplace == true) { - this.data = data; - this.__reset_index(); - this.columns = columns; - } else { - return new DataFrame(data, { columns: columns }); - } - } - - /** - * Apply a function to each element or along a specified axis of the DataFrame. Supports JavaScipt functions - * when axis is not specified, and accepts Tensorflow functions when axis is specified. - * @param {kwargs} kargs is defined as {axis: undefined, 0 or 1, callable: [FUNCTION]} - * @return Array - */ - apply(kwargs) { - let is_callable = utils.__is_function(kwargs["callable"]); - if (!is_callable) { - throw new Error("the argument must be a function"); - } - - let callable = kwargs["callable"]; - let data = []; - - if (utils.__key_in_object(kwargs, "axis")) { - //This accepts all tensorflow operations - let axis = kwargs["axis"]; - let df_data; - if (axis == 0) { - df_data = this.values; - } else { - df_data = this.col_data; - } - - for (let i = 0; i < df_data.length; i++) { - let value = tf.tensor(df_data[i]); - let callable_data; - try { - callable_data = callable(value).arraySync(); - } catch (error) { - throw Error( - `Callable Error: You can only apply JavaScript functions on DataFrames when axis is not specified. This operation is applied on all element, and returns a DataFrame of the same shape.` - ); - } - - data.push(callable_data); - } - } else { - //perform element wise operation. This accepts any JavaScript function - let df_data = this.values; - let new_data = []; - df_data.forEach((row) => { - let new_row = []; - row.forEach((val) => { - new_row.push(callable(val)); - }); - new_data.push(new_row); - }); - data = new_data; - } - - if (utils.__is_1D_array(data)) { - if (kwargs["axis"] == 0) { - let sf = new Series(data, { index: this.index }); - return sf; - } else { - let sf = new Series(data, { index: this.column_names }); - return sf; - } - } else { - let df = new DataFrame(data, { - columns: this.column_names, - index: this.index - }); - return df; - } - } - - /** - * Returns Less than of DataFrame and other. Supports element wise operations - * @param {other} DataFrame, Series, Scalar - * @param {axis} Number {0 for row, 1 for index} Whether to compare by the index or columns - * @return {DataFrame} - */ - lt(other, axis) { - if (this.__frame_is_compactible_for_operation()) { - if (axis == undefined) { - axis = 0; - } - let df = this.__logical_ops(other, "lt", axis); - return df; - } else { - throw Error("Dtype Error: Operation can not be performed on string type"); - } - } - - /** - * Returns Greater than of DataFrame and other. Supports element wise operations - * @param {other} DataFrame, Series, Scalar - * @param {axis} Number {0 for row, 1 for index} Whether to compare by the index or columns - * @return {DataFrame} - */ - gt(other, axis) { - if (this.__frame_is_compactible_for_operation()) { - if (axis == undefined) { - axis = 0; - } - - let df = this.__logical_ops(other, "gt", axis); - return df; - } else { - throw Error("Dtype Error: Operation can not be performed on string type"); - } - } - - /** - * Returns Less than or Equal to of DataFrame and other. Supports element wise operations - * @param {other} DataFrame, Series, Scalar - * @param {axis} Number {0 for row, 1 for index} Whether to compare by the index or columns - * @return {DataFrame} - */ - le(other, axis) { - if (this.__frame_is_compactible_for_operation()) { - if (axis == undefined) { - axis = 0; - } - let df = this.__logical_ops(other, "le", axis); - return df; - } else { - throw Error("Dtype Error: Operation can not be performed on string type"); - } - } - - /** - * Returns Greater than or Equal to of DataFrame and other. Supports element wise operations - * @param {other} DataFrame, Series, Scalar - * @param {axis} Number {0 for row, 1 for index} Whether to compare by the index or columns - * @return {DataFrame} - */ - ge(other, axis) { - if (this.__frame_is_compactible_for_operation()) { - if (axis == undefined) { - axis = 0; - } - let df = this.__logical_ops(other, "ge", axis); - return df; - } else { - throw Error("Dtype Error: Operation can not be performed on string type"); - } - } - - /** - * Returns Not Equal to of DataFrame and other. Supports element wise operations - * @param {other} DataFrame, Series, Scalar - * @param {axis} Number {0 for row, 1 for index} Whether to compare by the index or columns - * @return {DataFrame} - */ - ne(other, axis) { - if (this.__frame_is_compactible_for_operation()) { - if (axis == undefined) { - axis = 0; - } - let df = this.__logical_ops(other, "ne", axis); - return df; - } else { - throw Error("Dtype Error: Operation can not be performed on string type"); - } - } - - /** - * Returns Greater than or Equal to of DataFrame and other. Supports element wise operations - * @param {other} DataFrame, Series, Scalar - * @param {axis} Number {0 for row, 1 for index} Whether to compare by the index or columns - * @return {DataFrame} - */ - eq(other, axis) { - if (this.__frame_is_compactible_for_operation()) { - if (axis == undefined) { - axis = 0; - } - let df = this.__logical_ops(other, "eq", axis); - return df; - } else { - throw Error("Dtype Error: Operation can not be performed on string type"); - } - } - - /** - * Replace all occurence of a value with a new specified value" - * @param {kwargs}, {"replace": the value you want to replace, - * "with": the new value you want to replace the olde value with - * "in": Array of column names to replace value in, If not specified, replace all columns} - * @return {Series} - */ - replace(kwargs = {}) { - let params_needed = [ "replace", "with", "in" ]; - utils._throw_wrong_params_error(kwargs, params_needed); - - if (utils.__key_in_object(kwargs, "in")) { - //fill specified columns only - //check if the column(s) exists - kwargs["in"].map((col) => { - if (!this.column_names.includes(col)) { - throw Error( - `Value Error: Specified columns must be one of ${this.column_names}, got ${col}` - ); - } - }); - - if ( - utils.__key_in_object(kwargs, "replace") && - utils.__key_in_object(kwargs, "with") - ) { - let new_col_data_obj = {}; - this.column_names.map((col, idx) => { - if (kwargs["in"].includes(col)) { - let temp_col_data = this.col_data[idx]; //retreive the column data - let __temp = []; - temp_col_data.map((val) => { - //replace the values - if (val == kwargs["replace"]) { - __temp.push(kwargs["with"]); - } else { - __temp.push(val); - } - }); - new_col_data_obj[col] = __temp; - } else { - new_col_data_obj[col] = this.col_data[idx]; - } - }); - return new DataFrame(new_col_data_obj, { - columns: this.column_names, - index: this.index - }); - } else { - throw Error( - "Params Error: Must specify both 'replace' and 'with' parameters." - ); - } - } else { - //fill every occurence in all columns and rows - if ( - utils.__key_in_object(kwargs, "replace") && - utils.__key_in_object(kwargs, "with") - ) { - let replaced_arr = []; - let old_arr = this.values; - - old_arr.map((inner_arr) => { - let temp = []; - inner_arr.map((val) => { - if (val == kwargs["replace"]) { - temp.push(kwargs["with"]); - } else { - temp.push(val); - } - }); - replaced_arr.push(temp); - }); - - let df = new DataFrame(replaced_arr, { - index: this.index, - columns: this.column_names - }); - return df; - } else { - throw Error( - "Params Error: Must specify both 'replace' and 'with' parameters." - ); - } - } - } - - //performs logical comparisons on DataFrame using Tensorflow.js - __logical_ops(val, logical_type, axis) { - let int_vals, other; - if (utils.__is_number(val)) { - other = val; - } else { - if (val.series) { - //series - if (axis == 0) { - if (val.values.length != this.shape[0]) { - throw Error( - `Shape Error: Operands could not be broadcast together with shapes ${this.shape} and ${val.values.length}.` - ); - } - other = tf.tensor(val.values); - } else { - if (val.values.length != this.shape[1]) { - throw Error( - `Shape Error: Operands could not be broadcast together with shapes ${this.shape} and ${val.values.length}.` - ); - } - other = tf.tensor(val.values); - } - } else if (Array.isArray(val)) { - //Array of Array - other = tf.tensor(val); - } else { - //DataFrame - other = val.row_data_tensor; - } - } - - switch (logical_type) { - case "lt": - int_vals = tf.tensor(this.values).less(other).arraySync(); - break; - case "gt": - int_vals = tf.tensor(this.values).greater(other).arraySync(); - break; - case "le": - int_vals = tf.tensor(this.values).lessEqual(other).arraySync(); - break; - case "ge": - int_vals = tf.tensor(this.values).greaterEqual(other).arraySync(); - break; - case "ne": - int_vals = tf.tensor(this.values).notEqual(other).arraySync(); - break; - case "eq": - int_vals = tf.tensor(this.values).equal(other).arraySync(); - break; - } - let bool_vals = utils.__map_int_to_bool(int_vals, 2); - let df = new DataFrame(bool_vals, { - columns: this.column_names, - index: this.index - }); - return df; - } - - //slice the corresponding arrays from tensor objects - __get_df_from_tensor(val, col_names) { - let len = val.shape[0]; - let new_array = []; - for (let i = 0; i < len; i++) { - let arr = val.slice([ i ], [ 1 ]).arraySync()[0]; - new_array.push(arr); - } - return new DataFrame(new_array, { columns: col_names }); - } - - //checks if DataFrame is compaticble for arithmetic operation - //compatible Dataframe must have only numerical dtypes - __frame_is_compactible_for_operation() { - let dtypes = this.dtypes; - const str = (element) => element == "string"; - - if (dtypes.some(str)) { - return false; - } else { - return true; - } - } - - //retreives the corresponding tensors based on specified axis - __get_ops_tensors(tensors, axis) { - if (utils.__is_undefined(tensors[1].series)) { - //check if add operation is on a series or DataFrame - let tensors_arr = []; - if (utils.__is_undefined(axis) || axis == 1) { - //axis = 1 (column) - tensors_arr.push(tensors[0].row_data_tensor); - tensors_arr.push(tensors[1]); - return tensors_arr; - } else { - //axis = 0 (rows) - tensors_arr.push(tensors[0].col_data_tensor); - tensors_arr.push(tensors[1]); - return tensors_arr; - } - } else { - //operation is being performed on a Dataframe or Series - let tensors_arr = []; - if (utils.__is_undefined(axis) || axis == 1) { - //axis = 1 (column) - let this_tensor, other_tensor; - - this_tensor = tensors[0].row_data_tensor; //tensorflow uses 1 for rows axis and 0 for column axis - if (tensors[1].series) { - other_tensor = tf.tensor(tensors[1].values, [ - 1, - tensors[1].values.length - ]); - } else { - other_tensor = tensors[1].row_data_tensor; - } - - tensors_arr.push(this_tensor); - tensors_arr.push(other_tensor); - return tensors_arr; - } else { - //axis = 0 (rows) - let this_tensor, other_tensor; - - this_tensor = tensors[0].row_data_tensor; - if (tensors[1].series) { - other_tensor = tf.tensor(tensors[1].values, [ - tensors[1].values.length, - 1 - ]); - } else { - other_tensor = tensors[1].row_data_tensor; - } - - tensors_arr.push(this_tensor); - tensors_arr.push(other_tensor); - return tensors_arr; - } - } - } - - /** - * Transpose index and columns. - * Reflect the DataFrame over its main diagonal by writing rows as columns and vice-versa. - * The property T is an accessor to the method transpose(). - */ - transpose() { - let new_values = this.col_data; - let new_index = this.column_names; - let new_col_names = this.index; - - let df = new DataFrame(new_values, { - columns: new_col_names, - index: new_index - }); - return df; - } - - /** - * The property T is an accessor to the method transpose(). - */ - get T() { - return this.transpose(); - } - - /** - * Returns the data types in the DataFrame - * @return {Array} list of data types for each column - */ - get ctypes() { - let cols = this.column_names; - let d_types = this.col_types; - let sf = new Series(d_types, { index: cols }); - return sf; - } - - /** - * Make plots of Series or DataFrame. - * Uses the Plotly as backend, so supports Plotly's configuration parameters - * @param {string} div Name of the div to show the plot - * @returns {Class} Plot class that expoese different plot type - */ - plot(div) { - const plt = new Plot(this, div); - return plt; - } - - /** - * Returns the Tensorflow tensor backing the DataFrame Object - * @returns {2D tensor} - */ - get tensor() { - return this.row_data_tensor; - } - - /** - * Sets the data types of an DataFrame - * @param {Object} kwargs {column: Name of the column to cast, dtype: [float32, int32, string] data type to cast to} - * @returns {DataFrame} - */ - astype(kwargs = {}) { - if (!utils.__key_in_object(kwargs, "column")) { - throw Error("Value Error: Please specify a column to cast"); - } - - if (!utils.__key_in_object(kwargs, "dtype")) { - throw Error("Value Error: Please specify dtype to cast to"); - } - - if (!this.column_names.includes(kwargs["column"])) { - throw Error(`'${kwargs["column"]}' not found in columns`); - } - - let col_idx = this.column_names.indexOf(kwargs["column"]); - let new_types = this.col_types; - let col_values = this.col_data; - - new_types[col_idx] = kwargs["dtype"]; - let new_col_values = []; - let temp_col = col_values[col_idx]; - - switch (kwargs["dtype"]) { - case "float32": - temp_col.map((val) => { - new_col_values.push(Number(val)); - }); - col_values[col_idx] = new_col_values; - break; - case "int32": - temp_col.map((val) => { - new_col_values.push(Number(Number(val).toFixed())); - }); - col_values[col_idx] = new_col_values; - - break; - case "string": - temp_col.map((val) => { - new_col_values.push(String(val)); - }); - col_values[col_idx] = new_col_values; - break; - default: - break; - } - - let new_col_obj = {}; - this.column_names.forEach((cname, i) => { - new_col_obj[cname] = col_values[i]; - }); - - let df = new DataFrame(new_col_obj, { - dtypes: new_types, - index: this.index - }); - return df; - } - - /** - * Return the unique values along an axis - * @param {axis} Int, 0 for row, and 1 for column. Default to 1 - * @return {Object} - */ - unique(axis = 1) { - if (axis == undefined || axis > 1 || axis < 0) { - throw Error( - `Axis Error: Please specify a correct axis. Axis must either be '0' or '1', got ${axis}` - ); - } - let _unique = {}; - if (axis == 1) { - //column - let col_names = this.column_names; - col_names.forEach((cname) => { - _unique[cname] = this[cname].unique().values; - }); - } else { - let rows = this.values; - let _index = this.index; - rows.forEach((row, i) => { - let data_set = new Set(row); - _unique[_index[i]] = Array.from(data_set); - }); - } - - return _unique; - } - - /** - * Return the number of unique value along an axis - * @param {axis} Int, 0 for row, and 1 for column. Default to 1 - * @return {Series} - */ - nunique(axis = 1) { - if (axis == undefined || axis > 1 || axis < 0) { - throw Error( - `Axis Error: Please specify a correct axis. Axis must either be '0' or '1', got ${axis}` - ); - } - - let _nunique = []; - if (axis == 1) { - //column - let col_names = this.column_names; - col_names.forEach((cname) => { - _nunique.push(this[cname].unique().values.length); - }); - let sf = new Series(_nunique, { index: this.column_names }); - return sf; - } else { - let rows = this.values; - rows.forEach((row) => { - let data_set = new Set(row); - _nunique.push(Array.from(data_set).length); - }); - } - let sf = new Series(_nunique, { index: this.index }); - return sf; - } - - /** - * Change axes labels. Object values must be unique (1-to-1). - * Labels not contained in a dict / Series will be left as-is. Extra labels listed don’t throw an error. - * @param {Object} kwargs {mapper: Dict-like or functions transformations to apply to that axis’ values, - * axis: Int, 0 for row, and 1 for column. Default to 1, - * inplace: Whether to return a new DataFrame. If True then value of copy is ignored. - * @returns {DataFrame} - */ - rename(kwargs = {}) { - let params_needed = [ "mapper", "inplace", "axis" ]; - utils._throw_wrong_params_error(kwargs, params_needed); - - // utils.__in_object(kwargs, "columns", "value not defined") - if (!utils.__key_in_object(kwargs, "inplace")) { - kwargs["inplace"] = false; - } - if (!utils.__key_in_object(kwargs, "axis")) { - kwargs["axis"] = 1; - } - if (!utils.__key_in_object(kwargs, "mapper")) { - throw Error("Please specify a mapper object"); - } - if (kwargs["axis"] == 1) { - //columns - let old_col_names = Object.keys(kwargs["mapper"]); - let new_col_names = Object.values(kwargs["mapper"]); - let col_names = [ ...this.column_names ]; - - old_col_names.forEach((cname, i) => { - if (!col_names.includes(cname)) { - throw Error( - `Label Error: Specified column '${cname}' not found in column axis` - ); - } - let idx = col_names.indexOf(cname); - col_names[idx] = new_col_names[i]; - }); - if (kwargs["inplace"]) { - this.columns = col_names; - this.__set_col_property(this, this.col_data, col_names, old_col_names); - } else { - let df = this.copy(); - df.columns = col_names; - df.__set_col_property(df, df.col_data, col_names, old_col_names); - return df; - } - } else { - //row - let old_index = Object.keys(kwargs["mapper"]); - let row_index = this.index; - let new_index = []; - - row_index.forEach((idx) => { - if (old_index.includes(idx)) { - new_index.push(kwargs["mapper"][idx]); - } else { - new_index.push(idx); - } - }); - - if (kwargs["inplace"]) { - this.__set_index(new_index); - } else { - let df = this.copy(); - df.__set_index(new_index); - return df; - } - } - } - /** - * Sort DataFrame by index - * @param {*} kwargs {inplace: Boolean, ascending: Bool} - * @returns DataFrame - */ - sort_index(kwargs = {}) { - let inplace = - typeof kwargs["inplace"] == "undefined" ? false : kwargs["inplace"]; - let asc = - typeof kwargs["ascending"] == "undefined" ? true : kwargs["ascending"]; - - let index_val = this.index; - let [ data, index ] = this.__sort_by(index_val, index_val, asc); - - if (inplace) { - this.__update_frame_in_place(data, null, null, index, null); - } else { - let df = this.copy(); - df.__update_frame_in_place(data, null, null, index, null); - return df; - } - } - - /** - * Sort a Dataframe in ascending or descending order by a specified column name. - * @param {kwargs} Object, {by: Column name to sort by - * ascending (Bool): Whether to return sorted values in ascending order or not, - * inplace (Bool): Whether to perform sorting on the original Series or not} - * @returns {Series} - */ - sort_values(kwargs = {}) { - if (!utils.__key_in_object(kwargs, "by")) { - throw Error(`use col_name to specify column name`); - } - - let inplace = - typeof kwargs["inplace"] == "undefined" ? false : kwargs["inplace"]; - let asc = - typeof kwargs["ascending"] == "undefined" ? true : kwargs["ascending"]; - let index_val = this.index; - let column_val = this.column(kwargs["by"]).values; - let [ data, index ] = this.__sort_by(column_val, index_val, asc); - - if (inplace) { - this.__update_frame_in_place(data, null, null, index, null); - } else { - let df = this.copy(); - df.__update_frame_in_place(data, null, null, index, null); - return df; - } - } - - //set all columns to DataFrame Property. This ensures easy access to columns as Series - __set_col_property(self, col_vals, col_names, old_col_names) { - //delete old name - old_col_names.forEach((name) => { - delete self[name]; - }); - - col_vals.forEach((col, i) => { - // self[col_names[i]] = new Series(col, { columns: col_names[i], index: self.index }) - Object.defineProperty(self, col_names[i], { - get() { - return new Series(col, { columns: col_names[i], index: self.index }); - }, - set(value) { - this.addColumn({ column: col_names[i], value: value }); - } - }); - }); - } - - //update a DataFrame in place - __update_frame_in_place(row_data, column_names, col_obj, index, dtypes) { - if (row_data != undefined) { - this.data = row_data; - } else { - //check column is available and create row from column - if (col_obj != undefined) { - let _res = utils._get_row_and_col_values(col_obj); - this.data = _res[0]; - this.columns = _res[1]; - column_names = _res[1]; - } - } - - if (col_obj != undefined) { - this.col_data = Object.values(col_obj); - this.columns = Object.keys(col_obj); - column_names = Object.keys(col_obj); - } else { - //check if row data is available and create column data from rows - if (row_data != undefined) { - this.col_data = utils.__get_col_values(row_data); //get column data from row - } - } - - if (column_names != undefined) { - this.columns = column_names; - } - if (index != undefined) { - this.index_arr = index; - } - if (dtypes != undefined) { - this.col_types = dtypes; - } - } - - __sort_by(col_value, df_index, asc) { - let values = this.values; - - let sorted_val = utils.__sort(col_value, asc); - let duplicate_obj = utils.__get_duplicate(col_value); - - let data = []; - let indexs = []; - for (let row_i = 0; row_i < sorted_val.length; row_i++) { - let val = sorted_val[row_i]; - let index = null; - - if (val in duplicate_obj) { - index = duplicate_obj[val]["index"][0]; - duplicate_obj[val]["index"].splice(0, 1); - } else { - index = col_value.indexOf(val); - } - - data.push(values[index]); - indexs.push(df_index[index]); - } - - return [ data, indexs ]; - } - - /** - * Append rows to a DataFrame - * @param {val} val Array | Series to append to the object - * @return DataFrame - */ - append(val) { - let df2 = null; - if (Array.isArray(val)) { - if (Array.isArray(val[0])) { - if (val[0].length != this.shape[1]) { - throw Error( - `length Mixmatch: The lenght of provided value (${val.length}) does not match the original DataFrame (${this.shape[1]})` - ); - } - df2 = new DataFrame(val); - } - } else if (utils.__is_object(val)) { - df2 = new DataFrame(val); - } else if (val instanceof DataFrame) { - df2 = val.copy(); - } - - let concat_df = concat({ df_list: [ this, df2 ], axis: 0 }); - - return concat_df; - } -} diff --git a/danfojs-browser/src/core/generic.js b/danfojs-browser/src/core/generic.js deleted file mode 100644 index 90bb2ec0..00000000 --- a/danfojs-browser/src/core/generic.js +++ /dev/null @@ -1,500 +0,0 @@ -/** -* Copyright 2020, JsData. -* All rights reserved. -* -* This source code is licensed under the MIT license found in the -* LICENSE file in the root directory of this source tree. - -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. - * -*/ - -import { tensor, Tensor } from "@tensorflow/tfjs"; -import { table } from "table"; -import { Utils } from "./utils"; -import { Configs } from "../config/config"; - - -const utils = new Utils(); -const config = new Configs(); //package wide configuration object -export default class NDframe { - /** - * N-Dimensiona data structure. Stores multi-dimensional - * data in a size-mutable, labeled data structure. Analogous to the Python Pandas DataFrame. - * - * @param {data} Array JSON, Tensor. Block of data. - * @param {kwargs} Object Optional Configuration Object - * {columns: Array of column names. If not specified and data is an array of array, use range index. - * dtypes: Data types of the columns, - * index: row index for subseting array } - * - * @returns NDframe - */ - - constructor(data, kwargs = {}) { - this.kwargs = kwargs; - - if (data instanceof Tensor) { - data = data.arraySync(); - } - - if (utils.__is_1D_array(data)) { - this.series = true; - this._read_array(data); - } else { - this.series = false; - if (utils.__is_object(data[0])) { - //check the type of the first object in the data - this._read_object(data, 1); //type 1 object are of JSON form [{a: 1, b: 2}, {a: 30, b: 20}] - } else if (utils.__is_object(data)) { - this._read_object(data, 2); //type 2 object are of the form {a: [1,2,3,4], b: [30,20, 30, 20}] - } else if ( - Array.isArray(data[0]) || - utils.__is_number(data[0]) || - utils.__is_string(data[0]) - ) { - this._read_array(data); - } else { - throw new Error("File format not supported"); - } - } - } - - /** - * - * @param {Array} data - * Read array of data into NDFrame - */ - _read_array(data) { - this.data = utils.__replace_undefined_with_NaN(data, this.series); - this.row_data_tensor = tensor(this.data); - - if (this.series) { - this.col_data = [ this.values ]; - } else { - this.col_data = utils.__get_col_values(this.data); - } - - this.col_data_tensor = tensor(this.col_data); //data saved as 2D column tensors - - if ("index" in this.kwargs) { - this.__set_index(this.kwargs["index"]); - } else { - this.index_arr = [ ...Array(this.row_data_tensor.shape[0]).keys() ]; - } - - if (this.ndim == 1) { - //series array - if ("columns" in this.kwargs) { - this.columns = this.kwargs["columns"]; - } else { - this.columns = [ "0" ]; - } - } else { - //2D Array - if ("columns" in this.kwargs) { - if ( - this.kwargs["columns"].length == Number(this.row_data_tensor.shape[1]) - ) { - this.columns = this.kwargs["columns"]; - } else { - throw `Column length mismatch. You provided a column of length ${this.kwargs["columns"].length} but data has length of ${this.row_data_tensor.shape[1]}`; - } - } else { - this.columns = [ ...Array(this.row_data_tensor.shape[1]).keys() ]; - } - } - - if ("dtypes" in this.kwargs) { - this._set_col_types(this.kwargs["dtypes"], false); - } else { - this._set_col_types(null, true); //infer dtypes - } - } - - /** - * Convert Javascript Object of arrays into NDFrame - * @param {*} data Object of Arrays - * @param {*} type type 1 object are of JSON form [{a: 1, b: 2}, {a: 30, b: 20}], - * type 2 object are of the form {a: [1,2,3,4], b: [30,20, 30, 20}] - */ - _read_object(data, type) { - if (type == 2) { - let [ row_arr, col_names ] = utils._get_row_and_col_values(data); - this.kwargs["columns"] = col_names; - this._read_array(row_arr); - } else { - let data_arr = data.map((item) => { - return Object.values(item); - }); - - this.data = utils.__replace_undefined_with_NaN(data_arr, this.series); //Defualt array data in row format - this.row_data_tensor = tensor(this.data); //data saved as row tensors - this.kwargs["columns"] = Object.keys(Object.values(data)[0]); //get names of the column from the first entry - - if (this.series) { - this.col_data = [ this.values ]; //data saved as 1D column tensors - } else { - this.col_data = utils.__get_col_values(this.data); - } - - this.col_data_tensor = tensor(this.col_data); //data saved as 2D column tensors - - if ("index" in this.kwargs) { - this.__set_index(this.kwargs["index"]); - } else { - this.index_arr = [ ...Array(this.row_data_tensor.shape[0]).keys() ]; - } - - if (this.ndim == 1) { - //series array - if (!this.kwargs["columns"]) { - this.columns = [ "0" ]; - } else { - this.columns = this.kwargs["columns"]; - } - } else { - //2D Array - if ("columns" in this.kwargs) { - if ( - this.kwargs["columns"].length == - Number(this.row_data_tensor.shape[1]) - ) { - this.columns = this.kwargs["columns"]; - } else { - throw `Column length mismatch. You provided a column of length ${this.kwargs["columns"].length} but data has column length of ${this.row_data_tensor.shape[1]}`; - } - } else { - this.columns = [ ...Array(this.row_data_tensor.shape[1]).keys() ]; - } - } - - if ("dtypes" in this.kwargs) { - this._set_col_types(this.kwargs["dtypes"], false); - } else { - this._set_col_types(null, true); //infer dtypes - } - } - } - - /** - * Sets the data type of the NDFrame. Supported types are ['float32', "int32", 'string', 'boolean'] - * @param {Array} dtypes Array of data types. - * @param {Boolean} infer Whether to automatically infer the dtypes from the Object - */ - _set_col_types(dtypes, infer) { - const __supported_dtypes = [ "float32", "int32", "string", "boolean" ]; - - if (infer) { - if (this.series) { - this.col_types = utils.__get_t(this.values); - } else { - this.col_types = utils.__get_t(this.col_data); - } - } else { - if (this.series) { - this.col_types = dtypes; - } else { - if (dtypes.length != this.columns.length) { - throw new Error( - `length Mixmatch: Length of specified dtypes is ${dtypes.length}, but length of columns is ${this.columns.length}` - ); - } - if (Array.isArray(dtypes)) { - dtypes.forEach((type, indx) => { - if (!__supported_dtypes.includes(type)) { - throw new Error( - `dtype error: dtype specified at index ${indx} is not supported` - ); - } - }); - this.col_types = dtypes; - } else { - throw new Error(`dtypes must be an Array of types`); - } - } - } - } - - /** - * Returns the data types in the DataFrame - * @return {Array} list of data types for each column - */ - get dtypes() { - // let col_data = utils.get_col_values(this.data) - // this.col_types = utils.__get_t(col_data) - // let sf = new Series({dtypes: this.col_types, index: this.column_names}) - return this.col_types; - } - - /** - * Gets dimension of the NDFrame - * @returns {Integer} dimension of NDFrame - */ - get ndim() { - if (this.series) { - return 1; - } else { - return this.row_data_tensor.shape.length; - } - } - - /** - * Gets values for index and columns - * @return {Object} axes configuration for index and columns of NDFrame - */ - get axes() { - let axes = { - index: this.index, - columns: this.columns - }; - return axes; - } - - /** - * Gets index of the NDframe - * @return {Array} array of index from series - */ - get index() { - return this.index_arr; - } - - /** - * Sets index of the NDFrame - */ - __set_index(labels) { - if (!Array.isArray(labels)) { - throw Error("Value Error: index must be an array"); - } - if (labels.length > this.shape[0] || labels.length < this.shape[0]) { - throw Error("Value Error: length of labels must match row shape of data"); - } - this.index_arr = labels; - } - - /** - * Generate a new index for NDFrame. - */ - __reset_index() { - let new_idx = [ ...Array(this.values.length).keys() ]; - this.index_arr = new_idx; - } - - /** - * Gets a sequence of axis dimension along row and columns - * @returns {Array} the shape of the NDFrame - */ - get shape() { - if (this.series) { - return [ this.values.length, 1 ]; - } else { - return this.row_data_tensor.shape; - } - } - - /** - * Gets the values in the NDFrame in JS array - * @returns {Array} Arrays of arrays of data instances - */ - get values() { - return this.data; - } - - /** - * Gets the column names of the data - * @returns {Array} strings of column names - */ - get column_names() { - return this.columns; - } - - /** - * Return a boolean same-sized object indicating if the values are NaN. NaN and undefined values - * gets mapped to True values. Everything else gets mapped to False values. - * @return {Array} - */ - __isna() { - let new_arr = []; - if (this.series) { - this.values.map((val) => { - // eslint-disable-next-line use-isnan - if (val == NaN) { - new_arr.push(true); - } else if (isNaN(val) && typeof val != "string") { - new_arr.push(true); - } else { - new_arr.push(false); - } - }); - } else { - let row_data = this.values; - row_data.map((arr) => { - let temp_arr = []; - arr.map((val) => { - // eslint-disable-next-line use-isnan - if (val == NaN) { - temp_arr.push(true); - } else if (isNaN(val) && typeof val != "string") { - temp_arr.push(true); - } else { - temp_arr.push(false); - } - }); - new_arr.push(temp_arr); - }); - } - return new_arr; - } - - /* - * Gets binary size of the NDFrame - * @returns {String} size of the NDFrame - */ - get size() { - return this.row_data_tensor.size; - } - - /** - * Return object data as comma-separated values (csv). - * @returns {Promise} CSV representation of Object data - */ - async to_csv() { - if (this.series) { - let csv = this.values.join(","); - return csv; - } else { - let records = this.values; - let header = this.column_names.join(","); - - let csv_str = `${header}\n`; - records.forEach((val) => { - let row = `${val.join(",")}\n`; - csv_str += row; - }); - return csv_str; - } - } - - /** - * Return object as JSON string. - * @returns {Promise } JSON representation of Object data - */ - async to_json() { - if (this.series) { - let obj = {}; - obj[this.column_names[0]] = this.values; - let json = JSON.stringify(obj); - return json; - } else { - let values = this.values; - let header = this.column_names; - let json_arr = []; - values.forEach((val) => { - let obj = {}; - header.forEach((h, i) => { - obj[h] = val[i]; - }); - json_arr.push(obj); - }); - return JSON.stringify(json_arr); - } - } - - /** - * Prints the data in a Series as a grid of row and columns - */ - toString() { - let table_width = config.get_width; - let table_truncate = config.get_truncate; - let max_row = config.get_max_row; - let max_col_in_console = config.get_max_col_in_console; - - // let data; - let data_arr = []; - let table_config = {}; - // let idx = this.index - let col_len = this.columns.length; - // let row_len = this.values.length - 1 - let header = []; - - if (col_len > max_col_in_console) { - //truncate displayed columns to fit in the console - let first_4_cols = this.columns.slice(0, 4); - let last_3_cols = this.columns.slice(col_len - 4); - //join columns with truncate ellipse in the middle - header = [ "" ].concat(first_4_cols).concat([ "..." ]).concat(last_3_cols); - - let sub_idx, values_1, value_2; - - if (this.values.length > max_row) { - //slice Object to show [max_rows] - let df_subset_1 = this.iloc({ - rows: [ `0:${max_row}` ], - columns: [ "0:4" ] - }); - let df_subset_2 = this.iloc({ - rows: [ `0:${max_row}` ], - columns: [ `${col_len - 4}:` ] - }); - sub_idx = this.index.slice(0, max_row); - values_1 = df_subset_1.values; - value_2 = df_subset_2.values; - } else { - let df_subset_1 = this.iloc({ rows: [ "0:" ], columns: [ "0:4" ] }); - let df_subset_2 = this.iloc({ - rows: [ "0:" ], - columns: [ `${col_len - 4}:` ] - }); - sub_idx = this.index.slice(0, max_row); - values_1 = df_subset_1.values; - value_2 = df_subset_2.values; - } - - // merge dfs - sub_idx.map((val, i) => { - let row = [ val ].concat(values_1[i]).concat([ "..." ]).concat(value_2[i]); - data_arr.push(row); - }); - } else { - //display all columns - header = [ "" ].concat(this.columns); - let idx, values; - if (this.values.length > max_row) { - //slice Object to show a max of [max_rows] - let data = this.loc({ rows: [ `0:${max_row}` ], columns: this.columns }); - idx = data.index; - values = data.values; - } else { - values = this.values; - idx = this.index; - } - - // merge cols - idx.forEach((val, i) => { - let row = [ val ].concat(values[i]); - data_arr.push(row); - }); - } - - //set column width of all columns - table_config[0] = 10; - for (let index = 1; index < header.length; index++) { - table_config[index] = { width: table_width, truncate: table_truncate }; - } - - let table_data = [ header ].concat(data_arr); //Adds the column names to values before printing - return table(table_data, { columns: table_config }); - } - - /** - * Pretty prints n number of rows in a DataFrame or Series in the console - * @param {rows} Number of rows to print - */ - print() { - console.log(this + ""); - } -} diff --git a/danfojs-browser/src/core/get_dummies.js b/danfojs-browser/src/core/get_dummies.js deleted file mode 100644 index 32a5391d..00000000 --- a/danfojs-browser/src/core/get_dummies.js +++ /dev/null @@ -1,139 +0,0 @@ -import { DataFrame } from "./frame"; -import { Utils } from "./utils"; - -const utils = new Utils; - -function oneHot(in_data, prefix, prefix_sep) { - let data_set = new Set(in_data); - let labels = Array.from(data_set); - let prefix_labels = null; - if (prefix) { - prefix_labels = labels.map((x) => { - return prefix + prefix_sep + x; - }); - } else { - prefix_labels = labels.map((x) => { - return x; - }); - } - - let onehot_data = utils.__zeros(in_data.length, labels.length); - - for (let i = 0; i < in_data.length; i++) { - - let elem = in_data[i]; - let elem_index = labels.indexOf(elem); - onehot_data[i][elem_index] = 1; - } - - return [ onehot_data, prefix_labels ]; - -} - -/** - * Generate one hot encoding for categorical variable in arrays |Serie | and Dataframe - * @param {kwargs} kwargs { data : Array | Series | DataFrame, - * prefix_sep: String e.g "_", - * prefix: String | Array of String, - * columns: [Array] columns to be encoded in DataFrame. - * } - */ -function get_dummy(kwargs = {}) { - utils.__in_object(kwargs, "data", "data not provided"); - - let prefix = kwargs["prefix"] || null; - let prefix_sep = kwargs["prefix_sep"] || [ "_" ]; - let columns = kwargs["columns"] || null; - - let is_dataframe = false; - let in_data = null; - - if (Array.isArray(kwargs["data"])) { - in_data = kwargs["data"]; - } else if (kwargs["data"] instanceof DataFrame) { - in_data = kwargs["data"]; - is_dataframe = true; - } else { - in_data = kwargs["data"].values; - } - - if (!is_dataframe) { - let [ onehot_data, prefix_labels ] = oneHot(in_data, prefix, prefix_sep); - - return new DataFrame(onehot_data, { columns: prefix_labels }); - } else { - - let column_index = []; - if (!columns) { - columns = []; - in_data.col_types.map((x, i) => { - - if (x == "string") { - let name_column = in_data.columns[i]; - columns.push(name_column); - column_index.push(i); - } - }); - } else { - - columns.forEach((x) => { - let col_idx = columns.indexOf(x); - column_index.push(col_idx); - }); - } - - if (prefix) { - if (Array.isArray(prefix)) { - if (prefix.length != columns.length) { - throw new Error("prefix must be the same length with the number of onehot encoding column"); - } - } else { - throw new Error("prefix for dataframe must be an array"); - } - } else { - prefix = columns; - } - - let df_data = in_data.values; - let df_columns = in_data.columns; - let col_data = in_data.col_data; - - let column_data = []; - column_index.forEach((x) => { - column_data.push(col_data[x]); - }); - - let one_hotColumns = []; - let one_hotData = []; - column_data.forEach((data, i) => { - - let [ onehot_data, prefix_labels ] = oneHot(data, prefix[i], prefix_sep); - one_hotColumns.push(...prefix_labels); - - if (one_hotData.length == 0) { - one_hotData.push(...onehot_data); - } else { - onehot_data.forEach((x, i) => { - one_hotData[i].push(...x); - }); - } - - }); - - let final_data = df_data.map((elem, i) => { - - let ele = elem.slice(); - let dt = utils.__remove_arr(ele, column_index); - dt.push(...one_hotData[i]); - return dt; - }); - - let final_columns = utils.__remove_arr(df_columns, column_index); - final_columns.push(...one_hotColumns); - - return new DataFrame(final_data, { columns: final_columns }); - } - -} - -export const get_dummies = get_dummy; diff --git a/danfojs-browser/src/core/groupby.js b/danfojs-browser/src/core/groupby.js deleted file mode 100644 index 02fcf198..00000000 --- a/danfojs-browser/src/core/groupby.js +++ /dev/null @@ -1,336 +0,0 @@ -import { DataFrame } from "./frame"; -import { Utils } from "./utils"; -import { Series } from "./series"; -const utils = new Utils; - -/** - * The class performs all groupby operation on a dataframe - * involveing all aggregate funciton - * @param {col_dict} col_dict Object of unique keys in the group by column - * @param {key_col} key_col Array contains the column names - * @param {data} Array the dataframe data - * @param {column_name} Array of all column name in the dataframe. - */ -export class GroupBy { - constructor(col_dict, key_col, data, column_name, col_dtype) { - - this.key_col = key_col; - this.col_dict = col_dict; - this.data = data; - this.column_name = column_name; - this.data_tensors = {}; //store the tensor version of the groupby data - this.col_dtype = col_dtype; - - } - - /** - * Group the dataframe by the column by - * creating an object to store the grouping - * @returns Groupby data structure - */ - group(){ - for (const value of this.data){ - const col_indexes = this.key_col.map((key) => this.column_name.indexOf(key)); - const col_values = col_indexes.map((idx) => value[idx]); - - let sub_col_dict = this.col_dict; - for (const col_value of col_values){ - if (!(col_value in sub_col_dict)) - break; - if (col_value === col_values[col_values.length - 1]) - sub_col_dict[col_value].push(value); - else - sub_col_dict = sub_col_dict[col_value]; - } - } - - const self = this; - function dfs(sub_col_dict, sub_data_tensors){ - for (const [ key, value ] of Object.entries(sub_col_dict)){ - if (Array.isArray(value)) { - if (value.length === 0) - delete sub_col_dict[key]; - else - sub_data_tensors[key] = new DataFrame(value, { columns:self.column_name }); - } else { - if (!(key in sub_data_tensors)) - sub_data_tensors[key] = {}; - dfs(value, sub_data_tensors[key]); - } - } - } - dfs(this.col_dict, this.data_tensors); - - return this; - } - - /** - * obtain the column for each group - * @param {col_name} col_name [Array]--> array of column names - * @return Groupby data structure - */ - col(col_names){ - this.selected_column = col_names; // store col_names for use later in .apply - if (Array.isArray(col_names)){ - - for (let i = 0; i < col_names.length; i++){ - - let col_name = col_names[i]; - if (!this.column_name.includes(col_name)){ - throw new Error(`Column ${col_name} does not exist in groups`); - } - } - } else { - throw new Error(`Col_name must be an array of column`); - } - - const group_col = {}; - function dfs(sub_data_tensors, sub_group_col) { - for (const [ key, value ] of Object.entries(sub_data_tensors)){ - if (value instanceof DataFrame) { - sub_group_col[key] = col_names.map((col_name) => value.column(col_name)); - } else { - sub_group_col[key] = {}; - dfs(value, sub_group_col[key]); - } - } - } - dfs(this.data_tensors, group_col); - - const gp = new GroupBy( - null, - this.key_col, - null, - col_names, - this.col_dtype - ); - gp.group_col = group_col; - gp.group_col_name = col_names; - return gp; - } - - - /** - * Basic root of all column arithemetic in groups - * @param {operation} operation String - */ - arithemetic(operation){ - const ops_name = [ "mean", "sum", "count", "mode", "std", "var", "cumsum", "cumprod", - "cummax", "cummin" ]; - const ops_map = { - "mean": "mean()", - "sum": "sum()", - "mode": "mode()", - "count": "count()", - "std" : "std()", - "var" : "var()", - "cumsum" : "cumsum().values", - "cumprod": "cumprod().values", - "cummax" : "cummax().values", - "cummin" : "cummin().values" - }; - const is_array_operation = Array.isArray(operation); - const count_group = {}; - - //the local variable to store variables to be used in eval - // this seems not to be needed in Node version, since local - //variable are easily accessed in the eval function - let local = null; - function dfs(sub_count_group, sub_group_col) { - for (const [ key, value ] of Object.entries(sub_group_col)){ - if (Array.isArray(value)) { - sub_count_group[key] = []; - let data; - if (is_array_operation) { - for (let i = 0; i < value.length; i++){ - const op = operation[i]; - if (!ops_name.includes(op)){ - throw new Error("operation does not exist"); - } - local = value[i]; - data = eval(`local.${ops_map[op]}`); - sub_count_group[key].push(data); - } - } else { - value.forEach((v) => { - local = v; - data = eval(`local.${operation}`); - sub_count_group[key].push(data); - }); - } - } else { - sub_count_group[key] = {}; - dfs(sub_count_group[key], value); - } - } - } - - dfs(count_group, this.group_col); - return count_group; - } - - operations(ops, name) { - if (!this.group_col) { - let column = this.column_name.filter((val) => !this.key_col.includes(val)); - let col_gp = this.col(column); - let value = col_gp.arithemetic(ops); - let df = col_gp.to_DataFrame(col_gp.key_col, col_gp.group_col_name, value, name); - return df; - } else { - let value = this.arithemetic(ops); - let df = this.to_DataFrame(this.key_col, this.group_col_name, value, name); - return df; - } - } - count(){ - return this.operations("count()", "count"); - } - - sum(){ - return this.operations("sum()", "sum"); - } - - std(){ - return this.operations("std()", "std"); - } - - var(){ - return this.operations("var()", "var"); - } - - mean(){ - return this.operations("mean()", "mean"); - } - - cumsum(){ - return this.operations("cumsum().values", "cumsum"); - } - cummax(){ - return this.operations("cummax().values", "cummax"); - } - - cumprod(){ - return this.operations("cumprod().values", "cumprod"); - } - - cummin(){ - return this.operations("cummin().values", "cummin"); - } - - max(){ - return this.operations("max()", "max"); - } - - min(){ - return this.operations("min()", "min"); - } - - /** - * returns dataframe of a group - * @param {*} key [Array] - */ - get_groups(key){ - if (this.key_col.length < 2) - return this.data_tensors[key]; - - if (key.length !== this.key_col.length) - throw new Error("specify the group by column"); - - utils.__is_object(this.data_tensors, key[0], `Key Error: ${key[0]} not in object`); - const last_key = key[key.length - 1]; - let sub_data_tensors = this.data_tensors; - for (const k of key) { - if (k === last_key) - return sub_data_tensors[k]; - else - sub_data_tensors = sub_data_tensors[k]; - } - } - - /** - * Map every column to an operation - * @param {kwargs} kwargs {column name: math operation} - * @example .agg({"A": "mean","B": "sum","C":"count"}) - */ - agg(kwargs = {}){ - - let columns = Object.keys(kwargs); - let operations = columns.map((x) => { return kwargs[x].toLocaleLowerCase(); }); - - let col_gp = this.col(columns); - - let data = col_gp.arithemetic(operations); - let df = this.to_DataFrame(col_gp.key_col, col_gp.group_col_name, data, operations); - - return df; - } - - to_DataFrame(key_col, col, data, ops){ - const df_data = []; - - function concatPathAndNode(path, node, col_dtype) { - if (Array.isArray(node)) { - if (Array.isArray(node[0])) { - const transposed_node = node[0].map((_, colIndex) => node.map((row) => row[colIndex])); - for (const n_array of transposed_node) - df_data.push(path.concat(n_array)); - } else - df_data.push(path.concat(node)); - } else { - for (const [ k, child ] of Object.entries(node)) { - const sanitized_k = col_dtype[0] === "string" ? k : parseInt(k); - concatPathAndNode(path.concat([ sanitized_k ]), child, col_dtype.slice(1)); - } - } - } - - concatPathAndNode([], data, this.col_dtype); - - const column = [ ...key_col ]; - const group_col = col.slice().map((x, i) => { - if (Array.isArray(ops)){ - return `${x}_${ops[i]}`; - } - return `${x}_${ops}`; - }); - column.push(...group_col); - - return new DataFrame(df_data, { columns: column }); - } - - apply(callable){ - let df_data; - let column; - if (!this.group_col) { - column = this.column_name.filter((val) => !this.key_col.includes(val)); - const col_gp = this.col(column); - df_data = col_gp.group_col; - } else { - column = this.group_col_name; - df_data = this.group_col; - } - const count_group = {}; - - function recursiveCount(sub_df_data, sub_count_group) { - for (const [ key, value ] of Object.entries(sub_df_data)) { - if (Array.isArray(value)) { - sub_count_group[key] = value.map(( callable_value ) => { - const callable_rslt = callable(callable_value); - if ((callable_rslt instanceof DataFrame) || (callable_rslt instanceof Series)) - return callable_rslt.values; - else - return callable_rslt; - }); - } else { - sub_count_group[key] = {}; - recursiveCount(value, sub_count_group[key]); - } - } - } - - recursiveCount(df_data, count_group); - - return this.to_DataFrame(this.key_col, column, count_group, "apply"); - } - -} diff --git a/danfojs-browser/src/core/indexing.js b/danfojs-browser/src/core/indexing.js deleted file mode 100644 index a9c399d2..00000000 --- a/danfojs-browser/src/core/indexing.js +++ /dev/null @@ -1,198 +0,0 @@ -import { Utils } from "./utils"; -const utils = new Utils(); - - -/** - * Obtain the defined the set of row and column index - * @param {*} kwargs object {rows:Array, columns:Array of column name, type: ["iloc","loc"]} - * @return Array - */ -export const indexLoc = (ndframe, kwargs) => { - - let rows = null; - let columns = null; - let isColumnSplit = false; - - if (Object.prototype.hasOwnProperty.call(kwargs, "rows")) { //check if the object has the key - if (Array.isArray(kwargs["rows"])) { - - if (kwargs["rows"].length == 1 && typeof kwargs["rows"][0] == "string") { - if (kwargs["rows"][0].includes(":")) { - - let column_split = kwargs["rows"][0].split(":"); - - if (kwargs['type'] == 'loc') { - //get index of first and last occurence of label - let start, end; - if (isNaN(Number(column_split[0]))) { - start = ndframe.index.indexOf(column_split[0]); - } else { - start = Number(column_split[0]); - } - - if (isNaN(Number(column_split[1]))) { - end = ndframe.index.lastIndexOf(column_split[1]) - 1 || (ndframe.values.length - 1); - } else { - end = Number(column_split[1]) - 1 || (ndframe.values.length - 1); - } - rows = utils.__range(start, end); - } else { - let start = parseInt(column_split[0]) || 0; - let end = parseInt(column_split[1]) - 1 || (ndframe.values.length - 1); - - if (typeof start == "number" && typeof end == "number") { - rows = utils.__range(start, end); - } - } - - } else { - if (kwargs["type"] == "loc") { - let row_idx = []; - ndframe.index.map((idx, i) => { - if (kwargs['rows'][0] == idx) { - row_idx.push(i); - } - }); - rows = row_idx; - } else { - throw new Error("Slice index must be separated by ':'"); - } - } - } else { - if (kwargs["type"] == "loc") { - //get all the index of specified labels - let row_idx = []; - ndframe.index.map((idx, i) => { - if (kwargs['rows'].includes(idx)) { - row_idx.push(i); - } - }); - rows = row_idx; - } else { - //return int index - rows = kwargs["rows"]; - } - } - } else { - throw new Error("rows parameter must be a Array"); - } - } else { - if (kwargs["type"] == "loc") { - rows = utils.__range(0, Number(ndframe.shape[0]) - 1); - // throw new Error("Invalid syntax, please specify a slice label") - } else { - rows = utils.__range(0, Number(ndframe.shape[0]) - 1); - } - } - - if (Object.prototype.hasOwnProperty.call(kwargs, "columns")) { - if (Array.isArray(kwargs["columns"])) { - if (kwargs["columns"].length == 1 && kwargs["columns"][0].includes(":")) { - - let column_split = kwargs["columns"][0].split(":"); - let start, end; - - if (kwargs["type"] == "iloc") { - if (column_split[0] == "") { - start = 0; - } else { - start = parseInt(column_split[0]) || 0; - } - - if (column_split[1] == "") { - end = parseInt(ndframe.columns.length - 1); - } else { - end = parseInt(column_split[1]) - 1 === 0 ? 0 : parseInt(column_split[1]) - 1; - } - - } else { - start = parseInt(ndframe.columns.indexOf(column_split[0])); - end = parseInt(ndframe.columns.indexOf(column_split[1])) - 1; - } - - if (typeof start == "number" && typeof end == "number") { - - columns = utils.__range(start, end); - isColumnSplit = true; - } - - } else { - columns = kwargs["columns"]; - } - - } else { - throw new Error("columns must be a list"); - } - } else { - //Return all column - if (kwargs["type"] == "loc") { - columns = ndframe.column_names; - } else { - columns = utils.__range(0, Number(ndframe.shape[1]) - 1); - } - } - - let data_values = ndframe.values; - let new_data = []; // store the data from the for loop - - for (var index = 0; index < rows.length; index++) { - let row_val = rows[index]; - let max_rowIndex = data_values.length - 1; //obtain the maximum row index - - if (row_val > max_rowIndex) { //check if the input row index is greater than the maximum row index - throw new Error(`Specified row index ${row_val} is bigger than maximum row index of ${max_rowIndex}`); - } - - if (Array.isArray(data_values[0])) { - - let value = data_values[row_val]; - let row_data = []; - - - for (var i in columns) { - var col_index; - if (kwargs["type"] == "loc" && !isColumnSplit) { - col_index = ndframe.columns.indexOf(columns[i]); //obtain the column index - - if (col_index == -1) { - throw new Error(`Column ${columns[i]} does not exist`); - } - } else { - col_index = columns[i]; - let max_colIndex = ndframe.columns.length - 1; //assign the maximum column index to a value - - if (col_index > max_colIndex) { - throw new Error(`column index ${col_index} is bigger than ${max_colIndex}`); - } - } - - let elem = value[col_index]; //obtain the element at the column index - row_data.push(elem); - } - - new_data.push(row_data); //store the data for each row in the new_data - - } else { - - new_data.push(data_values[row_val]); - } - - } - - let column_names = []; - if (kwargs["type"] == "iloc" || isColumnSplit) { - // let axes = ndframe.axes - columns.map((col) => { - column_names.push(ndframe.columns[col]); - }); - } else { - column_names = columns; - } - - //get index of columns - let final_row = []; - rows.forEach((i) => { - final_row.push(ndframe.index[i]); - }); - return [ new_data, column_names, final_row ]; -}; diff --git a/danfojs-browser/src/core/merge.js b/danfojs-browser/src/core/merge.js deleted file mode 100644 index 5d4a813f..00000000 --- a/danfojs-browser/src/core/merge.js +++ /dev/null @@ -1,329 +0,0 @@ -import { DataFrame } from './frame'; -import { Utils } from "./utils"; - -const utils = new Utils; -export class Merge { - - constructor(kwargs) { - - //check if keys exist in kwargs - utils.__in_object(kwargs, "left"); - utils.__in_object(kwargs, "right"); - utils.__in_object(kwargs, "on"); - // utils.__in_object(kwargs, "how") - if (!utils.__key_in_object(kwargs, "how")){ - this.how = 'inner'; - kwargs['how'] = 'inner'; - } else { - this.how = kwargs['how']; - } - - this.left = null; - this.right = null; - this.on = null; - // this.how = null; - - let how_keys = [ "outer", "inner", "left", "right" ]; - - if ((kwargs["left"] instanceof DataFrame) && (kwargs["right"] instanceof DataFrame)) { - this.left = kwargs["left"]; - this.right = kwargs["right"]; - } else { - throw new Error("The left and right key value must be a dataFrame"); - } - - if (Array.isArray(kwargs["on"])) { - this.on = kwargs["on"]; - } else { - throw new Error("key 'on' must be a list"); - } - - if (how_keys.includes(kwargs["how"])) { - - this.how = kwargs["how"]; - } else { - throw new Error(`${kwargs["how"]} specify in keyword how is not recognise`); - } - - this.left_col_index = []; - this.right_col_index = []; - - //find the index of the columns - for (let i = 0; i < this.on.length; i++) { - - if (this.left.columns.includes(this.on[i]) && this.right.columns.includes(this.on[i])) { - - let left_index = this.left.columns.indexOf(this.on[i]); - let right_index = this.right.columns.indexOf(this.on[i]); - - this.left_col_index.push(left_index); - this.right_col_index.push(right_index); - } - } - - this.left_key_dict = {}; - this.right_key_dict = {}; - - let left_values = this.left.values; - let right_values = this.right.values; - - - /** - * Create a dictionary for both left and right dataframe - containing the key combination of columns used as keys, and - the value of such keys combination are the rows having this - keys combination. - */ - for (let i = 0; i < left_values.length; i++) { - let left_value = left_values[i]; - let left_key_comb_values = []; - - //get the value in the column index - for (let j = 0; j < this.left_col_index.length; j++) { - let index = this.left_col_index[j]; - - left_key_comb_values.push(left_value[index]); - } - //combine into single hashable string - let left_key_comb = left_key_comb_values.join('_'); - - let self = this; // assign the this scope to self - //filter out the value that are not the column key - let left_value_filter = left_value.filter(function (val, index) { - return !self.left_col_index.includes(index); - }); - - //check if the key combination already exist or not - //before storing the key combination and the value - //associated with it - if (utils.__key_in_object(this.left_key_dict, left_key_comb)) { - this.left_key_dict[left_key_comb].filters.push(left_value_filter); - } else { - this.left_key_dict[left_key_comb] = { - filters: [left_value_filter], - comb_values: left_key_comb_values - }; - } - - } - for (let i = 0; i < right_values.length; i++) { - let right_value = right_values[i]; - let right_key_comb_values = []; - - for (let j = 0; j < this.right_col_index.length; j++) { - let index = this.right_col_index[j]; - - right_key_comb_values.push(right_value[index]); - } - let right_key_comb = right_key_comb_values.join('_'); - - let self = this; - let right_value_filter = right_value.filter(function (val, index) { - return !self.right_col_index.includes(index); - }); - - if (utils.__key_in_object(this.right_key_dict, right_key_comb)) { - this.right_key_dict[right_key_comb].filters.push(right_value_filter); - } else { - this.right_key_dict[right_key_comb] = { - filters: [right_value_filter], - comb_values: right_key_comb_values - }; - } - } - - - //create column - this.__create_columns(); - - let data = null; - switch (this.how) { - - case "outer": - data = this.outer(); - break; - case "inner": - data = this.inner(); - break; - case "left": - data = this.left_merge(); - break; - case "right": - data = this.right_merge(); - break; - } - - // eslint-disable-next-line no-self-assign - let df = new DataFrame(data = data, { columns: this.columns }); - - return df; - } - - __create_columns() { - - let self = this; - self.left_col = self.left.columns.filter((val, index) => { - return !self.left_col_index.includes(index); - }); - - self.right_col = self.right.columns.filter((val, index) => { - return !self.right_col_index.includes(index); - }); - - self.columns = [ ...self.on ]; - let column_duplicate = {}; - - let temp_column = [ ...self.left_col ]; - temp_column.push(...self.right_col); - - for (let i = 0; i < temp_column.length; i++) { - - let col = temp_column[i]; - if (utils.__key_in_object(column_duplicate, col)) { - - let col_name = `${col}_${column_duplicate[col]}`; - self.columns.push(col_name); - - column_duplicate[col] += 1; - } else { - self.columns.push(col); - column_duplicate[col] = 1; - } - } - } - - outer() { - - let keys = Object.keys(this.left_key_dict); // obtain the keys of the left dataframe - - keys.push(...Object.keys(this.right_key_dict)); - - keys = Array.from(new Set(keys)); // obtain the unique keys - - let data = this.basic(keys); - - return data; - - } - - inner() { - - let left_keys = Object.keys(this.left_key_dict); - let right_keys = Object.keys(this.right_key_dict); - - let keys = left_keys.filter((val) => { - return right_keys.includes(val); - }); - - let data = this.basic(keys); - - return data; - } - - left_merge() { - - let keys = Object.keys(this.left_key_dict); - let data = this.basic(keys); - - return data; - - } - - right_merge() { - let keys = Object.keys(this.right_key_dict); - let data = this.basic(keys); - - return data; - } - - basic(keys) { - - let data = []; - - for (let i = 0; i < keys.length; i++) { - let key = keys[i]; - - let key_array = key.split("_").filter((val) => { - return val != ""; - }); - - if (utils.__key_in_object(this.left_key_dict, key)) { - let left_row = this.left_key_dict[key].filters; - let key_array = this.left_key_dict[key].comb_values; - - - for (let left_i = 0; left_i < left_row.length; left_i++) { - - let left_row_row = left_row[left_i]; - - if (utils.__key_in_object(this.right_key_dict, key)) { - - let right_row = this.right_key_dict[key].filters; - - for (let r_i = 0; r_i < right_row.length; r_i++) { - - let right_row_row = right_row[r_i]; - - - let inner_data = key_array.slice(0); - inner_data.push(...left_row_row); - inner_data.push(...right_row_row); - - - data.push(inner_data); - } - } else { - let nan_array = Array(this.right_col.length); - - for (let i = 0; i < this.right_col.length; i++) { - nan_array[i] = NaN; - } - - let inner_data = key_array.slice(0); - inner_data.push(...left_row_row); - inner_data.push(...nan_array); - data.push(inner_data); - } - } - } else { - - let right_row = this.right_key_dict[key].filters; - let key_array = this.right_key_dict[key].comb_values; - - for (let i = 0; i < right_row.length; i++) { - - let right_row_row = right_row[i]; - - let nan_array = Array(this.left_col.length); - - for (let j = 0; j < nan_array.length; j++) { - nan_array[j] = NaN; - } - - let inner_data = key_array.slice(0); - inner_data.push(...nan_array); - inner_data.push(...right_row_row); - data.push(inner_data); - } - } - } - return data; - - } -} - - -/** -* Merge DataFrame or named Series objects with a database-style join. -* The join is done on columns or indexes. If joining columns on columns, the DataFrame indexes will be ignored. Otherwise -* if joining indexes on indexes or indexes on a column or columns, the index will be passed on. -* @param {kwargs}{left: DataFrame; -* right: DataFrame | Named Series, Object to merge with; -* on: label, Column or index level names to join on. These must be found in both DataFrames; -* how: {‘left’, ‘right’, ‘outer’, ‘inner’}. Type of merge to be performed. -* @returns {DataFrame} -*/ -export const merge = (kwargs) => { - let merge = new Merge(kwargs); - return merge; -}; diff --git a/danfojs-browser/src/core/series.js b/danfojs-browser/src/core/series.js deleted file mode 100644 index 25d2adc0..00000000 --- a/danfojs-browser/src/core/series.js +++ /dev/null @@ -1,1302 +0,0 @@ -/** -* Copyright 2020, JsData -* All rights reserved. -* -* This source code is licensed under the MIT license found in the -* LICENSE file in the root directory of this source tree. - -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. - * -*/ - - -import * as tf from "@tensorflow/tfjs"; -import { variance, std, median, mode } from 'mathjs'; -import { Utils } from "./utils"; -import { Str } from "./strings"; -import NDframe from "./generic"; -import { table } from 'table'; -import { Configs } from '../config/config'; -import { TimeSeries } from './timeseries'; -import { Plot } from '../plotting/plot'; -import { indexLoc } from './indexing'; - - -const utils = new Utils(); -const config = new Configs(); //package wide configuration object - - -/** - * One-dimensional ndarray with axis labels (including time series). - * The object supports both integer- and label-based indexing and provides a host of methods for performing operations involving the index. - * Operations between Series (+, -, /, , *) align values based on their associated index values– they need not be the same length. - * @param {data} data Array, JSON of 1D values - * @param {kwargs} Object {columns: column names, dtypes : data type of values} - * - * @returns Series - */ -export class Series extends NDframe { - constructor(data, kwargs) { - if (Array.isArray(data[0]) || utils.__is_object(data[0])) { - data = utils.__convert_2D_to_1D(data); - super(data, kwargs); - } else { - super(data, kwargs); - } - } - - - /** - * Returns a Series in Tensorflow's tensor format - * @returns {1D Tensor} - */ - get tensor() { - return tf.tensor(this.values).asType(this.dtypes[0]); - } - - - /** - * Returns the first n values in a Series - * @param {rows} Number of rows to return - * @returns {Series} - */ - head(rows = 5) { - if (rows > this.shape[0] || rows < 1) { - //return all values - return new Series(this.values, { columns: this.column_names }); - } else { - let data = this.values.slice(0, rows); - return new Series(data, { columns: this.column_names }); - } - - } - - - /** - * Returns the last n values in a Series - * @param {rows} number of rows to return - * @returns {Series} - */ - tail(rows = 5) { - if (rows > this.values.length || rows < 1) { - //return all values - return new Series(this.values, { columns: this.column_names }); - } else { - let data = this.values.slice(this.shape[0] - rows); - let idx = this.index.slice(this.shape[0] - rows); - let sf = new Series(data, { columns: this.column_names, index: idx }); - return sf; - } - - } - - /** - * Gets [num] number of random rows in a dataframe - * @param {num} rows --> The number of rows to return - * @param {seed} seed --> (Optional) An integer specifying the random seed that will be used to create the distribution. - * @returns {Promise} resolves to a Series object - */ - async sample(num = 5, seed = 1) { - if (num > this.shape[0]) { - throw new Error("Sample size n cannot be bigger than size of dataset"); - } - if (num < -1 || num == 0) { - throw new Error("Sample size cannot be less than -1 or 0"); - } - num = num === -1 ? this.shape[0] : num; - const shuffled_index = await tf.data.array(this.index).shuffle(num, seed).take(num).toArray(); - const sf = this.iloc(shuffled_index); - return sf; - } - - /** - * Return Addition of series and other, element-wise (binary operator add). - * Equivalent to series + other - * @param {other} Series or Number to add - * @returns {Series} - */ - add(other) { - if (utils.__is_number(other)) { - //broadcast addition - let sum = this.row_data_tensor.add(other).arraySync(); - return new Series(sum, { columns: this.column_names }); - } else { - if (this.__check_series_op_compactibility) { - let sum = this.tensor.add(other.tensor).arraySync(); - return new Series(sum, { columns: this.column_names }); - } - } - } - - - /** - * Returns the subtraction between a series and other, element-wise (binary operator subtraction). - * Equivalent to series - other - * @param {other} Series, Number to subtract - * @returns {Series} - */ - sub(other) { - if (utils.__is_number(other)) { - let sub = this.tensor.sub(other).arraySync(); - return new Series(sub, { columns: this.column_names }); - } else { - if (this.__check_series_op_compactibility) { - let sub = this.tensor.sub(other.tensor).arraySync(); - return new Series(sub, { columns: this.column_names }); - } - } - } - - - /** - * Return Multiplication of series and other, element-wise (binary operator mul). - * Equivalent to series * other - * @param {other} Series, Number to multiply with. - * @returns {Series} - */ - mul(other) { - if (utils.__is_number(other)) { - let mul = this.tensor.mul(other).arraySync(); - return new Series(mul, { columns: this.column_names }); - } else { - if (this.__check_series_op_compactibility) { - let mul = this.tensor.mul(other.tensor).arraySync(); - return new Series(mul, { columns: this.column_names }); - } - } - } - - - /** - * Return division of series and other, element-wise (binary operator div). - * Equivalent to series / other - * @param {other} Series, Number to divide with. - * @returns {Series} - */ - div(other, round = true) { - if (utils.__is_number(other)) { - let div_result = this.tensor.div(other); - return new Series(div_result.arraySync(), { columns: this.column_names, dtypes: [ div_result.dtype ] }); - } else { - if (this.__check_series_op_compactibility) { - let dtype; - //Check if caller needs a float division - if (round) { - dtype = "float32"; - } else { - dtype = "int32"; - } - //dtype may change after division because of how TFJS works internally, so save dtypes first - let tensor1 = this.tensor.asType(dtype); - let tensor2 = other.tensor.asType(dtype); - let result = tensor1.div(tensor2); - return new Series(result.arraySync(), { columns: this.column_names, dtypes: [ result.dtype ] }); - } - } - } - - /** - * Return Exponential power of series and other, element-wise (binary operator pow). - * Equivalent to series ** other - * @param {other} Series, Number to multiply with. - */ - pow(other) { - if (utils.__is_number(other)) { - let pow_result = this.tensor.pow(other).arraySync(); - return new Series(pow_result, { columns: this.column_names }); - } else { - if (this.__check_series_op_compactibility) { - let pow_result = this.tensor.pow(other.tensor).arraySync(); - return new Series(pow_result, { columns: this.column_names }); - } - } - } - - /** - * Return Modulo of series and other, element-wise (binary operator mod). - * Equivalent to series % other - * @param {other} Series, Number - * @returns {Series} - */ - mod(other) { - if (utils.__is_number(other)) { - let mod_result = this.tensor.mod(other).arraySync(); - return new Series(mod_result, { columns: this.column_names }); - } else { - if (this.__check_series_op_compactibility) { - let mod_result = this.tensor.mod(other.tensor).arraySync(); - return new Series(mod_result, { columns: this.column_names }); - } - } - } - - - /** - * Returns the mean of elements in Series - * @returns {Series} - */ - mean() { - utils._throw_str_dtype_error(this, 'mean'); - let values = utils._remove_nans(this.values); - let mean = tf.tensor(values).mean().arraySync(); - return mean; - } - - - /** - * Returns the median of elements in Series - * @returns {Series} - */ - median() { - utils._throw_str_dtype_error(this, 'median'); - let values = utils._remove_nans(this.values); - let median_val = median(values); - return median_val; - } - - - /** - * Returns the modal value of elements in Series - * @returns {Number} - */ - mode() { - utils._throw_str_dtype_error(this, 'median'); - let values = utils._remove_nans(this.values); - let modal_val = mode(values); - return modal_val; - } - - - /** - * Returns the minimum value in a Series - * @returns {Number} - */ - min() { - utils._throw_str_dtype_error(this, 'min'); - let min = this.row_data_tensor.min().arraySync(); - return min; - - } - - /** - * Returns the maximum value in a Series - * @returns {Number} - */ - max() { - utils._throw_str_dtype_error(this, 'max'); - let max = this.row_data_tensor.max().arraySync(); - return max; - - } - - - /** - * Return the sum of the values in a series. - * This is equivalent to the method tf.sum - * @returns {Number}, sum of values in Series - */ - sum() { - utils._throw_str_dtype_error(this, 'sum'); - if (this.dtypes[0] == "boolean") { - let temp = utils._remove_nans(this.values); - let temp_sum = tf.tensor(temp).sum().arraySync(); - return Number(temp_sum); - } - let temp = utils._remove_nans(this.values); - let temp_sum = tf.tensor(temp).sum().arraySync(); - return Number(temp_sum.toFixed(5)); - } - - - /** - * Return number of non-null elements in a Series - * @returns {Number}, Count of non-null values - */ - count() { - return utils.__count_nan(this.values, true, true); - } - - - /** - * Return maximum of series and other, element-wise (binary operator div). - * @param {other} Series, Numbers to check maximum against - * @returns {Series} - */ - maximum(other) { - if (utils.__is_number(other)) { - let max_result = this.row_data_tensor.maximum(other); - return new Series(max_result.arraySync(), { - columns: this.column_names, - dtypes: max_result.dtype, - index: this.index - }); - } else { - if (this.__check_series_op_compactibility) { - let tensor1 = this.row_data_tensor; - let tensor2 = other.tensor; - let result = tensor1.maximum(tensor2).arraySync(); - return new Series(result, { columns: this.column_names, index: this.index }); - } - } - } - - /** - * Return maximum of series and other, element-wise (binary operator div). - * @param {other} Series, Numbers to check maximum against - * @returns {Series} - */ - minimum(other) { - if (utils.__is_number(other)) { - let max_result = this.row_data_tensor.minimum(other); - return new Series(max_result.arraySync(), { - columns: this.column_names, - dtypes: max_result.dtype, - index: this.index - }); - } else { - if (this.__check_series_op_compactibility) { - let tensor1 = this.tensor; - let tensor2 = other.tensor; - let result = tensor1.minimum(tensor2).arraySync(); - return new Series(result, { columns: this.column_names, index: this.index }); - } - } - } - - - /** - * Round each value in a Series to the given number of decimals. - * @param {dp} Number, Numbers of Decimal places to round to - * @returns {Series} - */ - round(dp) { - if (utils.__is_undefined(dp)) { - //use tensorflow round function to roound to the nearest whole number - let result = tf.round(this.row_data_tensor).arraySync(); - return new Series(result, { columns: this.column_names, index: this.index }); - - } else { - let result = utils.__round(this.values, dp, true); - return new Series(result, { columns: this.column_names, index: this.index }); - - } - - } - - /** - * Return sample standard deviation over requested axis. - * @returns {Number} - */ - std() { - utils._throw_str_dtype_error(this, 'std'); - let values = utils._remove_nans(this.values); - // TODO: Use Tensorflow ops for faster computation - let std_val = std(values); //using math.js - return std_val; - - } - - /** - * Return unbiased variance of Series. - * @returns {Number} - */ - var() { - utils._throw_str_dtype_error(this, 'std'); - let values = utils._remove_nans(this.values); - // TODO: Use Tensorflow ops for faster computation - let var_val = variance(values); //using math.js - return var_val; - - } - - /** - * Return a boolean same-sized object indicating if the values are NaN. NaN and undefined values, - * gets mapped to True values. Everything else gets mapped to False values. - * @return {Series} - */ - isna() { - let new_arr = this.__isna(); - let sf = new Series(new_arr, { - index: this.index, - columns: this.column_names, - dtypes: [ "boolean" ] - }); - return sf; - } - - /** - * Replace NaN or undefined with a specified value" - * @param {kwargs}, {"value": the new value to replace the old value with, inplace: Perform operation inplace or not} - * @return {Series} - */ - fillna(kwargs = {}) { - let params_needed = [ "value", "inplace" ]; - utils._throw_wrong_params_error(kwargs, params_needed); - - kwargs['inplace'] = kwargs['inplace'] || false; - - if (!("value" in kwargs)) { - throw Error('Value Error: Must specify value to replace with'); - } - - let new_values = []; - this.values.forEach((val) => { - if (isNaN(val) && typeof val != "string") { - new_values.push(kwargs['value']); - } else { - new_values.push(val); - } - }); - - if (kwargs['inplace']) { - this.data = new_values; - } else { - let sf = new Series(new_values, { - columns: this.column_names, - index: this.index, - dtypes: this.dtypes - }); - return sf; - } - } - - - /** - * Sort a Series in ascending or descending order by some criterion. - * @param {kwargs} Object, {ascending (Bool): Whether to return sorted values in ascending order or not, - * inplace (Bool): Whether to perform sorting on the original Series or not} - * @returns {Series} - */ - sort_values(kwargs = {}) { - let params_needed = [ "inplace", "ascending" ]; - utils._throw_wrong_params_error(kwargs, params_needed); - - if (!('ascending' in kwargs)) { - kwargs['ascending'] = true; - } - - if (!('inplace' in kwargs)) { - kwargs['inplace'] = false; - } - - let sorted_values = []; - let arr_obj = [ ...this.values ]; - let range_idx = utils.__range(0, this.index.length - 1); - let sorted_idx = utils._sort_arr_with_index(range_idx, arr_obj, this.dtypes[0]); - - sorted_idx.forEach((idx) => { - sorted_values.push(this.values[idx]); - }); - - if (kwargs['ascending']) { - sorted_values = sorted_values.reverse(); - sorted_idx = sorted_idx.reverse(); - } - - if (kwargs['inplace']) { - this.data = sorted_values; - this.__set_index(sorted_idx); - } else { - let sf = new Series(sorted_values, { columns: this.column_names, index: sorted_idx }); - return sf; - } - } - - - /** - * Makes a deep copy of a Series - * @returns {Series} - */ - copy() { - - let sf = new Series([ ...this.values ], { - columns: [ ...this.column_names ], - index: [ ...this.index ], - dtypes: [ ...this.dtypes[0] ] - }); - return sf; - } - - - /** - * Generate descriptive statistics. - * Descriptive statistics include those that summarize the central tendency, - * dispersion and shape of a dataset’s distribution, excluding NaN values. - * @returns {Series} - */ - describe() { - if (this.dtypes[0] == "string") { - return null; - } else { - - let index = [ 'count', 'mean', 'std', 'min', 'median', 'max', 'variance' ]; - let count = this.count(); - let mean = this.mean(); - let std = this.std(); - let min = this.min(); - let median = this.median(); - let max = this.max(); - let variance = this.var(); - - let vals = [ count, mean, std, min, median, max, variance ]; - let sf = new Series(vals, { columns: this.columns, index: index }); - return sf; - - } - - - } - - - /** - * Returns Series with the index reset. - * This is useful when index is meaningless and needs to be reset to the default before another operation. - * @param {kwargs} {inplace: Modify the Series in place (do not create a new object} - */ - reset_index(kwargs = {}) { - let params_needed = [ "inplace" ]; - utils._throw_wrong_params_error(kwargs, params_needed); - - kwargs['inplace'] = kwargs['inplace'] || false; - - if (kwargs['inplace']) { - this.__reset_index(); - } else { - let sf = this.copy(); - sf.__reset_index(); - return sf; - } - } - - /** - * Returns Series with the specified index. - * Set the Series index (row labels) using an array of the same length. - * @param {kwargs} {index: Array of new index values, - * inplace: If operation should happen inplace - * } - */ - set_index(kwargs = {}) { - - let params_needed = [ "index", "inplace" ]; - utils._throw_wrong_params_error(kwargs, params_needed); - - - kwargs['inplace'] = kwargs['inplace'] || false; - - if (!('index' in kwargs)) { - throw Error("Index ValueError: You must specify an array of index"); - } - - if (kwargs['index'].length != this.index.length) { - throw Error(`Index LengthError: Lenght of new Index array ${kwargs['index'].length} must match lenght of existing index ${this.index.length}`); - } - - if (kwargs['inplace']) { - this.index_arr = kwargs['index']; - } else { - let sf = this.copy(); - sf.__set_index(kwargs['index']); - return sf; - } - } - - - /** - * Checks if two series are compatible for a mathematical operation - * @param {Series} other Series to compare against - * @returns{boolean} - */ - __check_series_op_compactibility(other) { - if (utils.__is_undefined(other.series)) { - throw Error("param [other] must be a Series or a single value that can be broadcasted"); - } - if (other.values.length != this.values.length) { - throw Error("Shape Error: Series shape do not match"); - } - if (this.dtypes[0] != 'float' || this.dtypes[0] != 'int') { - throw Error(`dtype Error: Cannot perform operation on type ${this.dtypes[0]} with type ${other.dtypes[0]}`); - } - if (other.dtypes[0] != 'float' || other.dtypes[0] != 'int') { - throw Error(`dtype Error: Cannot perform operation on type ${other.dtypes[0]} with type ${this.dtypes[0]}`); - } - - return true; - } - - /** - * map all the element in a column to a variable or function - * @param{callable} callable can either be a funtion or an object - * @return {Array} - */ - map(callable) { - let is_callable = utils.__is_function(callable); - - let data = this.data.map((val) => { - if (is_callable) { - return callable(val); - } else { - if (utils.__is_object(callable)) { - - if (val in callable) { - return callable[val]; - } else { - return NaN; - } - } else { - throw new Error("callable must either be a function or an object"); - } - } - }); - let sf = new Series(data, { - columns: this.column_names, - index: this.index - }); - return sf; - } - - /** - * Applies a function to each element of a Series - * @param {Function} Function to apply to each element of the series - * @return {Array} - */ - apply(callable) { - let is_callable = utils.__is_function(callable); - - if (!is_callable) { - throw new Error("the arguement most be a function"); - } - - let data = this.data.map((val) => { - return callable(val); - }); - return new Series(data, { columns: this.column_names, index: this.index }); - } - - /** - * Returns the unique value(s) in a Series - * @return {Series} - */ - unique() { - - let data_set = new Set(this.values); - let series = new Series(Array.from(data_set)); - - return series; - - } - - /** - * Return the number of unique value in a series - * @return {int} - */ - nunique() { - return this.unique().values.length; - } - - /** - * Returns unique values and their counts in a Series - * @return {Series} - */ - value_counts() { - - let s_data = this.values; - let data_dict = {}; - - for (let i = 0; i < s_data.length; i++) { - let val = s_data[i]; - - if (val in data_dict) { - data_dict[val] += 1; - } else { - data_dict[val] = 1; - } - } - - let index = Object.keys(data_dict).map((x) => { - return parseInt(x) ? parseInt(x) : x; - }); - let data = Object.values(data_dict); - - let series = new Series(data, { index: index }); - return series; - - } - - /** - * Returns the absolute values in Series - * @return {series} - */ - abs() { - let abs_data = this.row_data_tensor.abs().arraySync(); - return new Series(utils.__round(abs_data, 2, true)); - } - - - /** - * Returns the cumulative sum over a Series - * @return {Series} - */ - cumsum() { - let data = this.__cum_ops("sum"); - return data; - } - - /** - * Returns cumulative minimum over a Series - * @returns series - */ - cummin() { - let data = this.__cum_ops("min"); - return data; - } - - /** - * Returns cumulative maximum over a Series - * @returns series - */ - cummax() { - let data = this.__cum_ops("max"); - return data; - } - - /** - * Returns cumulative product over a Series - * @returns series - */ - cumprod() { - let data = this.__cum_ops("prod"); - return data; - } - - - /** - * Returns Less than of series and other. Supports element wise operations - * @param {other} Series, Scalar - * @return {Series} - */ - lt(other) { - return this.__bool_ops(other, "lt"); - } - - /** - * Returns Greater than of series and other. Supports element wise operations - * @param {other} Series, Scalar - * @return {Series} - */ - gt(other) { - return this.__bool_ops(other, "gt"); - } - - /** - * Returns Less than or Equal to of series and other. Supports element wise operations - * @param {other} Series, Scalar - * @return {Series} - */ - le(other) { - return this.__bool_ops(other, "le"); - } - - /** - * Returns Greater than or Equal to of series and other. Supports element wise operations - * @param {other} Series, Scalar - * @return {Series} - */ - ge(other) { - return this.__bool_ops(other, "ge"); - } - - /** - * Returns Not Equal to of series and other. Supports element wise operations - * @param {other} Series, Scalar - * @return {Series} - */ - ne(other) { - return this.__bool_ops(other, "ne"); - } - - - /** - * Returns Equal to of series and other. Supports element wise operations - * @param {other} Series, Scalar - * @return {Series} - */ - eq(other) { - return this.__bool_ops(other, "eq"); - } - - /** - * Replace all occurence of a value with a new value" - * @param {kwargs}, {"replace": the value you want to replace, - * "with": the new value you want to replace the olde value with, - * inplace: Perform operation inplace or not} - * @return {Series} - */ - replace(kwargs = {}) { - let params_needed = [ "replace", "with", "inplace" ]; - utils._throw_wrong_params_error(kwargs, params_needed); - - kwargs['inplace'] = kwargs['inplace'] || false; - - if (!("replace" in kwargs)) { - throw Error("Params Error: Must specify param 'replace'"); - } - - if (!("with" in kwargs)) { - throw Error("Params Error: Must specify param 'with'"); - } - - let replaced_arr = []; - let old_arr = this.values; - - old_arr.forEach((val) => { - if (val == kwargs['replace']) { - replaced_arr.push(kwargs['with']); - } else { - replaced_arr.push(val); - } - }); - - if (kwargs['inplace']) { - this.data = replaced_arr; - } else { - let sf = new Series(replaced_arr, { - index: this.index, - columns: this.columns, - dtypes: this.dtypes - }); - return sf; - } - - } - - - /** - * Return a new Series with missing values (NaN) removed. - * @param {kwargs} {inplace: Perform operation inplace or not} - * @return {Series} - */ - dropna(kwargs = {}) { - let params_needed = [ "inplace" ]; - utils._throw_wrong_params_error(kwargs, params_needed); - - kwargs['inplace'] = kwargs['inplace'] || false; - - let old_values = this.values; - let old_index = this.index; - let new_values = []; - let new_index = []; - let isna_vals = this.isna().values; - - isna_vals.forEach((val, i) => { - if (!val) { - new_values.push(old_values[i]); - new_index.push(old_index[i]); - } - }); - if (kwargs['inplace']) { - this.index_arr = new_index; - this.data = new_values; - } else { - let sf = new Series(new_values, { - columns: this.column_names, - index: new_index, - dtypes: this.dtypes - }); - return sf; - } - - } - - /** - * Return the integer indices that would sort the Series. - * @param {ascending} boolean true: will sort the Series in ascending order, false: will sort in descending order - * @return {Series} - */ - argsort(ascending = true) { - let sorted_index = this.sort_values({ ascending: ascending }).index; - let sf = new Series(sorted_index); - return sf; - } - - /** - * Return int position of the largest value in the Series. - * @return {Number} - */ - argmax() { - return this.row_data_tensor.argMax().arraySync(); - } - - - /** - * Return int position of the smallest value in the Series. - * @param {ascending} boolean true: will sort the Series in ascending order, false: will sort in descending order - * @return {Series} - */ - argmin() { - return this.row_data_tensor.argMin().arraySync(); - - } - - - /** - * Returns dtype of Series - * @return {string} - */ - get dtype() { - return this.dtypes[0]; - } - - /** - * Return Series with duplicate values removed - * @param {kwargs} {inplace: Perform operation inplace or not, - * keep: first | last which dupliate value to keep} - * @return {Series} - */ - drop_duplicates(kwargs = {}) { - let params_needed = [ "inplace", "keep" ]; - utils._throw_wrong_params_error(kwargs, params_needed); - - kwargs['inplace'] = kwargs['inplace'] || false; - kwargs['keep'] = kwargs['keep'] || "first"; - - - let data_arr, old_index; - if (kwargs['keep'] == "last") { - data_arr = this.values.reverse(); - old_index = this.index.reverse(); - } else { - data_arr = this.values; - old_index = this.index; - } - - let new_index = []; - let new_arr = []; - - data_arr.forEach((val, i) => { - if (!new_arr.includes(val)) { - new_index.push(old_index[i]); - new_arr.push(val); - } - }); - - if (kwargs['keep'] == "last") { - //re-reversed the array and index to its true ordering - new_arr = new_arr.reverse(); - new_index = new_index.reverse(); - } - - if (kwargs['inplace']) { - this.data = new_arr; - this.index_arr = new_index; - } else { - let sf = new Series(new_arr, { - index: new_index, - columns: this.column_names, - dtypes: this.dtypes - }); - return sf; - } - - } - - - /** - * Prints the data in a Series as a grid of row and columns - */ - toString() { - let table_width = 20; - let table_truncate = 20; - let max_row = config.get_max_row; - let data_arr = []; - let table_config = {}; - let header = [ "" ].concat(this.columns); - let idx, data; - - if (this.values.length > max_row) { - //slice Object to show a max of [max_rows] - data = this.values.slice(0, max_row); - idx = this.index.slice(0, max_row); - } else { - data = this.values; - idx = this.index; - } - - idx.forEach((val, i) => { - let row = [ val ].concat(data[i]); - data_arr.push(row); - }); - - //set column width of all columns - table_config[0] = 10; - table_config[1] = { width: table_width, truncate: table_truncate }; - - let table_data = [ header ].concat(data_arr); //Add the column names to values before printing - return table(table_data, { columns: table_config }); - } - - /** - * Perform boolean operations on bool values - * @param {*} other Other series to compare with - * @param {string} b_ops name of operation to perform [ne, ge, le, gt, lt, eq] - */ - __bool_ops(other, b_ops) { - let r_series; - let l_series = this.values; - - if (typeof other == "number") { - r_series = [ ...l_series ].fill(other); //create array of repeated value for broadcasting - } else { - if (!(other instanceof Series)) { - throw new Error("Value Error: 'other' must be an instance of Series"); - } - r_series = other.values; - } - - if (!(l_series.length === r_series.length)) { - throw new Error("Length Error: Both series must be of the same length"); - } - - let data = []; - - for (let i = 0; i < l_series.length; i++) { - - let l_val = l_series[i]; - let r_val = r_series[i]; - let bool = null; - switch (b_ops) { - - case "lt": - bool = l_val < r_val ? true : false; - data.push(bool); - break; - case "gt": - bool = l_val > r_val ? true : false; - data.push(bool); - break; - case "le": - bool = l_val <= r_val ? true : false; - data.push(bool); - break; - case "ge": - bool = l_val >= r_val ? true : false; - data.push(bool); - break; - case "ne": - bool = l_val != r_val ? true : false; - data.push(bool); - break; - case "eq": - bool = l_val === r_val ? true : false; - data.push(bool); - break; - } - } - return new Series(data); - - } - - /** - * perform cumulative operation on series data - * @returns array - */ - __cum_ops(ops) { - - let s_data = this.values; - let temp_val = s_data[0]; - let data = [ temp_val ]; - - for (let i = 1; i < s_data.length; i++) { - - let curr_val = s_data[i]; - switch (ops) { - case "max": - if (curr_val > temp_val) { - data.push(curr_val); - temp_val = curr_val; - } else { - data.push(temp_val); - } - break; - case "min": - if (curr_val < temp_val) { - data.push(curr_val); - temp_val = curr_val; - } else { - data.push(temp_val); - } - break; - case "sum": - temp_val = temp_val + curr_val; - data.push(temp_val); - break; - case "prod": - temp_val = temp_val * curr_val; - data.push(temp_val); - break; - - } - } - return new Series(data); - } - - - /** - * Cast Series to specified data type - * @param {string} dtype data type to cast to [float32, int32, string, boolean] - *@returns {Series} - */ - astype(dtype) { - const __supported_dtypes = [ 'float32', "int32", 'string', 'boolean' ]; - - if (!dtype) { - throw Error("Value Error: Please specify dtype to cast to"); - } - - if (!__supported_dtypes.includes(dtype)) { - throw Error(`dtype ${dtype} not supported. dtype must be one of ${__supported_dtypes}`); - } - - let col_values = this.values; - let new_values = []; - - switch (dtype) { - case "float32": - col_values.forEach((val) => { - new_values.push(Number(val)); - }); - break; - case "int32": - col_values.forEach((val) => { - new_values.push(Number(Number(val).toFixed())); - }); - break; - case "string": - col_values.forEach((val) => { - new_values.push(String(val)); - }); - break; - case "boolean": - col_values.forEach((val) => { - new_values.push(Boolean(val)); - }); - break; - default: - break; - } - - let sf = new Series(new_values, { dtypes: dtype, index: this.index }); - return sf; - - } - - - /** - * Exposes numerous string methods to manipulate Series of type string - */ - get str() { - if (this.dtypes[0] == "string") { - return new Str(this); - } else { - throw new Error("Cannot call accessor str on non-string type"); - } - - } - - /** - * Returns Danfo Time Object that exposes different time properties - */ - get dt() { - let timeseries = new TimeSeries({ data: this }); // parsed to date-time - timeseries.preprocessed(); - return timeseries; - - } - - /** - * Displays the data in a console friendly manner - */ - print() { - console.log(this + ""); - } - - - /** - * Make plots of Series or DataFrame. - * Uses the Plotly as backend, so therefore supports Plotly's configuration parameters - * @param {string} div Name of the div to show the plot - * @returns {Class} Plot class that expoese different plot type - */ - plot(div) { - const plt = new Plot(this, div); - return plt; - } - - /** - * Slice series by index - * @param {Array} row list of index to slice by - * @returns Series - */ - iloc(row) { - let kwargs = {}; - kwargs["rows"] = row; - kwargs["type"] = "iloc"; - - let [ new_data, columns, rows ] = indexLoc(this, kwargs); - let sf = new Series(new_data, { columns: columns, index: rows }); - - return sf; - } - - /** - * Adds new values to the end of a Series - * @param {Object} val Single value | Array | Series to append to the object - * @param {Boolean} inplace Whether to perform operation inplace or not - */ - append(val, inplace = false) { - if (inplace) { - let self = this; - if (Array.isArray(val)) { - val.forEach((el, i) => { - self.data.push(el); - self.index_arr.push(i); - }); - } else if (val instanceof Series) { - let value = val.values; - let old_index = val.index; - value.forEach((el, i) => { - self.data.push(el); - self.index_arr.push(old_index[i]); - }); - } else { - self.data.push(val); - self.index_arr.push(0); - } - } else { - let sf = this.copy(); - if (Array.isArray(val)) { - val.forEach((el, i) => { - sf.data.push(el); - sf.index_arr.push(i); - }); - } else if (val instanceof Series) { - let value = val.values; - let old_index = val.index; - value.forEach((el, i) => { - sf.data.push(el); - sf.index_arr.push(old_index[i]); - }); - } else { - sf.data.push(val); - sf.index_arr.push(0); - } - return sf; - } - - } - -} - diff --git a/danfojs-browser/src/core/strings.js b/danfojs-browser/src/core/strings.js deleted file mode 100644 index e767e0ee..00000000 --- a/danfojs-browser/src/core/strings.js +++ /dev/null @@ -1,423 +0,0 @@ -import { Series } from "./series"; - -/** - * String methods applied on Series and DataFrames - */ -export class Str { - constructor(series) { - this.series = series; - this.array = series.values; - } - - /** - * Converts all characters to lowercase. - * @return {array} - */ - toLowerCase() { - let new_arr = []; - this.array.map((val) => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(val); - } else { - new_arr.push(val.toLowerCase()); - } - - }); - let sf = this.__create_new_sf_from(new_arr, this.series); - return sf; - } - - /** - * Converts all characters to uppercase. - * @return {array} - */ - toUpperCase() { - let new_arr = []; - this.array.map((val) => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(val); - } else { - new_arr.push(val.toUpperCase()); - } - - }); - let sf = this.__create_new_sf_from(new_arr, this.series); - return sf; - } - - /** - * Capitalize first string - * @return {array} - */ - capitalize() { - let new_arr = []; - this.array.map((val) => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(val); - } else { - let f_char = val.slice(0, 1); - let l_char = val.slice(1); - let new_str = `${f_char.toUpperCase()}${l_char.toLowerCase()}`; - new_arr.push(new_str); - } - - }); - let sf = this.__create_new_sf_from(new_arr, this.series); - return sf; - - } - - /** - * Returns the character at the specified index (position) - * @params {index} index position of character - * @return {array} - */ - charAt(index = 0) { - let new_arr = []; - this.array.map((val) => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(val); - } else { - new_arr.push(val.charAt(index)); - } - }); - let sf = this.__create_new_sf_from(new_arr, this.series); - return sf; - } - - /** - * Joins two or more strings/arrays. 0 joins from the start - * @params {other} string|array to concatenate with. - * @params {position} where to concat the string from. O concats from the start, 1 concats from the end - * @params {isArray} whether operation is performed on Array or not - * @return {array} - */ - concat(other = "", position = 1) { - if (Array.isArray(other)) { - let final_arr = []; - for (let i = 0; i < other.length; i++) { - let l_str = this.array[i]; - let r_str = other[i]; - if (position == 1) { - final_arr.push(l_str.concat(r_str)); - } else { - final_arr.push(r_str.concat(l_str)); - } - - } - let sf = this.__create_new_sf_from(final_arr, this.series); - return sf; - } else { - - let new_arr = []; - - this.array.map((val) => { - if (position == 1) { - if (isNaN(val) && typeof val != "string") { - new_arr.push(String(val).concat(other)); - } else { - new_arr.push(val.concat(other)); - } - - } else { - if (isNaN(val) && typeof val != "string") { - new_arr.push(other.concat(String(val))); - } else { - new_arr.push(other.concat(val)); - } - } - }); - let sf = this.__create_new_sf_from(new_arr, this.series); - return sf; - } - - } - - - /** - * Checks whether a string begins with specified characters - * @params {String | Character} String or Character to check against - * @return {array} - */ - startsWith(str = "") { - let new_arr = []; - this.array.forEach((val) => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(false); - } else { - new_arr.push(val.startsWith(str)); - } - }); - let sf = this.__create_new_sf_from(new_arr, this.series); - return sf; - } - - /** - * Checks whether a string ends with specified characters - * @params {String | Character} String or Character to check against - * @return {array} - */ - endsWith(str = "") { - let new_arr = []; - this.array.map((val) => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(false); - } else { - new_arr.push(val.endsWith(str)); - } - }); - let sf = this.__create_new_sf_from(new_arr, this.series); - return sf; - } - - /** - * Checks whether a string contains the specified string/characters - * @params {String | Character} String or Character to check against - * @return {array} - */ - includes(str = "") { - let new_arr = []; - this.array.map((val) => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(false); - } else { - new_arr.push(val.includes(str)); - } - }); - let sf = this.__create_new_sf_from(new_arr, this.series); - return sf; - } - - /** - * Returns the position of the first found occurrence of a specified value in a string - * @params {String | Character} String or Character to check against - * @return {array} - */ - indexOf(str = "") { - let new_arr = []; - this.array.map((val) => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(-1); - } else { - new_arr.push(val.indexOf(str)); - } - }); - let sf = this.__create_new_sf_from(new_arr, this.series); - return sf; - } - - /** - * Returns the position of the last found occurrence of a specified value in a string - * @params {str: String | Character} String or Character to check against - * @return {array} - */ - lastIndexOf(str = "") { - let new_arr = []; - this.array.map((val) => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(-1); - } else { - new_arr.push(val.lastIndexOf(str)); - } - }); - let sf = this.__create_new_sf_from(new_arr, this.series); - return sf; - } - - - /** - * Searches a string for a specified value, or a regular expression, and returns a new string where the specified values are replaced - * @params {searchValue: String | Character} string value to replace - * @params {replaceValue: String | Character} string to replace with - * @return {array} - */ - replace(searchValue = "", replaceValue = "") { - let new_arr = []; - this.array.map((val) => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(val); - } else { - new_arr.push(val.replace(searchValue, replaceValue)); - } - }); - let sf = this.__create_new_sf_from(new_arr, this.series); - return sf; - } - - /** - * Returns a new string with a specified number of copies of an existing string - * @params {num: Integer} Number of times to repeat - * @return {array} - */ - repeat(num = 1) { - let new_arr = []; - this.array.map((val) => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(val); - } else { - new_arr.push(val.repeat(num)); - } - }); - let sf = this.__create_new_sf_from(new_arr, this.series); - return sf; - } - - - /** - * Searches a string for a specified value, or regular expression, and returns the position of the match - * @params {str: String | Character} String or Character to check against - * @return {array} - */ - search(str = "") { - let new_arr = []; - this.array.map((val) => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(-1); - } else { - new_arr.push(val.search(str)); - } - }); - let sf = this.__create_new_sf_from(new_arr, this.series); - return sf; - } - - /** - * Extracts a part of a string and returns a new string - * @params {startIndex: Int} index position of start character - * @params {endIndex: Int} index position of last character - * @return {array} - */ - slice(startIndex = 0, endIndex = 1) { - let new_arr = []; - this.array.map((val) => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(val); - } else { - new_arr.push(val.slice(startIndex, endIndex)); - } - }); - let sf = this.__create_new_sf_from(new_arr, this.series); - return sf; - } - - /** - * Splits a string into an array of substrings - * @params {val: string} string or character to split at - * @params {endIndex: Int} index position of last character - * @return {array} - */ - split(splitVal = " ") { - let new_arr = []; - this.array.map((val) => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(val); - } else { - new_arr.push(val.split(splitVal)); - } - }); - let sf = this.__create_new_sf_from(new_arr, this.series); - return sf; - } - - /** - * Extracts the characters from a string, beginning at a specified start position, and through the specified number of character - * @params {startIndex: Int} index position of start character - * @params {num: Int} number of characters to return - * @return {array} - */ - substr(startIndex = 0, num = 1) { - let new_arr = []; - this.array.map((val) => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(val); - } else { - new_arr.push(val.substr(startIndex, num)); - } - }); - let sf = this.__create_new_sf_from(new_arr, this.series); - return sf; - } - - /** - * Extracts the characters from a string, between two specified indices - * @params {startIndex: Int} index position of start character - * @params {endIndex: Int} index position of last character - * @return {array} - */ - substring(startIndex = 0, endIndex = 1) { - let new_arr = []; - this.array.map((val) => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(val); - } else { - new_arr.push(val.substring(startIndex, endIndex)); - } - }); - let sf = this.__create_new_sf_from(new_arr, this.series); - return sf; - } - - /** - * Removes whitespace from both ends of a string - * @return {array} - */ - trim() { - let new_arr = []; - this.array.map((val) => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(val); - } else { - new_arr.push(val.trim()); - } - }); - let sf = this.__create_new_sf_from(new_arr, this.series); - return sf; - } - - /** - * Joins strings to specified value - * @params {valToJoin} string value to join to the array - * @params {joinChar} Character to Join with - * @return {array} - */ - join(valToJoin = "", joinChar = " ") { - let new_arr = []; - this.array.map((val) => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(val); - } else { - let l_char = val; - let r_char = valToJoin; - let new_char = `${l_char}${joinChar}${r_char}`; - new_arr.push(new_char); - } - }); - let sf = this.__create_new_sf_from(new_arr, this.series); - return sf; - } - - /** - * Counts the number of characters in string - * @return {array} - */ - len() { - let new_arr = []; - this.array.map((val) => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(val); - } else { - new_arr.push(val.length); - } - }); - let sf = this.__create_new_sf_from(new_arr, this.series); - return sf; - } - - //create a new series - __create_new_sf_from(new_val, series) { - let sf = new Series(new_val, { columns: series.column_names, index: series.index }); - return sf; - } - - -} diff --git a/danfojs-browser/src/core/timeseries.js b/danfojs-browser/src/core/timeseries.js deleted file mode 100644 index 1d8af672..00000000 --- a/danfojs-browser/src/core/timeseries.js +++ /dev/null @@ -1,305 +0,0 @@ -import { Utils } from "./utils"; -import { Series } from "./series"; -const utils = new Utils; - - -/** - * @class - * @description Handle all datetime operations - * @param {kwargs} Object {"data":[array of string], "format": string} - */ -export class TimeSeries { - constructor(kwargs) { - - utils.__in_object(kwargs, "data", "specify the data"); - - if (kwargs["data"] instanceof Series) { - this.data = kwargs["data"].values; - } else { - this.data = kwargs["data"]; - } - - this.format = kwargs["format"] || null; - - this.keys = { //key: len - "Y": 4, - "m": 2, - "H": 2, - "M": 2, - "S": 2, - "b": 3, - "d": 2, - "-": 1 - }; - - this.__in_format = [ "%Y-m-d%", "%m-d-Y%", "%m-d-Y H%M%S%" ]; - - this.__monthName = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ]; - this.__weekName = [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ]; - - } - - /** - * @description preprocessed the data into desirable structure - */ - preprocessed() { - - let format_values = null; - if (this.format) { - format_values = this.generate_format(); - } - - this.date_list = []; - - for (let i = 0; i < this.data.length; i++) { - - let date_string = this.data[i]; - - if (this.format && !this.__in_format.includes(this.format)) { - - let format_dateString = this.__apply_format(date_string, format_values); - let valueDate = new Date(format_dateString); - - this.__is_validDate(valueDate); - - this.date_list.push(valueDate); - - } else if (this.is_timestamp(date_string)) { - - let string2int = parseInt(date_string); - let valueDate = new Date(string2int); - - this.__is_validDate(valueDate); - this.date_list.push(valueDate); - } else { - let valueDate = new Date(date_string); - - this.__is_validDate(valueDate); - this.date_list.push(valueDate); - } - } - - // return this.date_list; - - } - - /** - * @description if format is given, apply the format on each element of the data - * @return string - */ - __apply_format(elem, format) { - - let date_string = ""; - - let temp_val = 0; - - - for (let index in format) { - - let value = format[index]; - - if (index == 0) { - date_string += elem.slice(0, value); - - } else if (index > 4) { - - date_string += ":" + elem.slice(temp_val, temp_val + value); - } else if (index == 4) { - date_string += " " + elem.slice(temp_val, temp_val + value); - } else if (index > 0 && index <= 2) { - date_string += "-" + elem.slice(temp_val, temp_val + value); - } - - temp_val += value; - } - - return date_string; - - } - /** - * @description convert format string to their respective value. - */ - generate_format() { - - let format_list = this.format.split(""); - - let self = this; - let format_keys = format_list.filter(function (key) { - return utils.__key_in_object(self.keys, key); - }); - - let format_value = format_keys.map(function (val) { - return self.keys[val]; - }); - - - return format_value; - } - - /** - * @description check if a string is a timestamp - * @param {date_string} date_string [string] - */ - is_timestamp(date_string) { - - let string2int = parseInt(date_string); - let int2string = String(string2int); - - if (isNaN(string2int) || (int2string.length < date_string.length)) { - return false; - } else { - return true; - } - } - - /** - * @description check if a date instance returns Invalid date - * @param {date_instance} instance of new Date() - */ - __is_validDate(date_instance) { - - if (date_instance.toDateString() == "Invalid Date") { - throw new Error("Invalid date, the date format not recognise"); - } - } - - /** - * @description abstract all date operations - * @param {*} callback [FUNCTION] - * @return series - */ - __date_ops(callback) { - - let data = this.date_list.map(function (date_instance) { - - return callback(date_instance); - }); - - // eslint-disable-next-line no-self-assign - let series = new Series(data = data); - - return series; - } - - /** - * @description obtain the month in a date. - * @return Series - */ - month() { - - let series = this.__date_ops(function (date_instance) { - return date_instance.getMonth(); - }); - - return series; - } - - /** - * @return Series - */ - hour() { - let series = this.__date_ops(function (date_instance) { - return date_instance.getHours(); - }); - - return series; - } - - /** - * @return Series - */ - day() { - let series = this.__date_ops(function (date_instance) { - return date_instance.getDay(); - }); - - return series; - } - - /** - * @description generate year frome date instance - * @return Series - */ - year() { - - let series = this.__date_ops(function (date_instance) { - return date_instance.getFullYear(); - }); - - return series; - } - - /** - * @description generate month name - * @return Series - */ - month_name() { - - let self = this; - let series = this.__date_ops(function (date_instance) { - return self.__monthName[date_instance.getMonth()]; - }); - - return series; - } - - /** - * @description generate days of the week - * @return Series - */ - weekdays() { - let self = this; - let series = this.__date_ops(function (date_instance) { - return self.__weekName[date_instance.getDay()]; - }); - - return series; - } - - /** - * @description day of the month - * @return Series - */ - monthday() { - let series = this.__date_ops(function (date_instance) { - return date_instance.getDate(); - }); - - return series; - } - - /** - * @description obtain the seconds in a date - * @return Series - */ - seconds() { - let series = this.__date_ops(function (date_instance) { - return date_instance.getSeconds(); - }); - - return series; - } - - /** - * @description obtain the minutes in a date - * @return Series - */ - minutes() { - let series = this.__date_ops(function (date_instance) { - return date_instance.getMinutes(); - }); - - return series; - } - -} - - -export const to_datetime = (kwargs) => { - - let timeseries = new TimeSeries(kwargs); // parsed to date-time - timeseries.preprocessed(); // generate date-time list - - return timeseries; - -}; diff --git a/danfojs-browser/src/core/utils.js b/danfojs-browser/src/core/utils.js deleted file mode 100644 index 7b6c9475..00000000 --- a/danfojs-browser/src/core/utils.js +++ /dev/null @@ -1,688 +0,0 @@ -import { tensor, linspace } from "@tensorflow/tfjs"; -import { Configs } from "../config/config"; - -const config = new Configs(); - -export class Utils { - //remove an element from an array - remove(arr, index) { - let new_arr = arr.filter(function (val, i) { - return i != index; - }); - - return new_arr; - } - - //filter element present in an aray - __remove_arr(arr, index) { - let new_arr = arr.filter(function (val, i) { - return !index.includes(i); - }); - - return new_arr; - } - - // Returns if a value is a string - __is_string(value) { - return typeof value === "string" || value instanceof String; - } - - // Returns if a value is really a number - __is_number(value) { - return typeof value === "number" && isFinite(value); - } - - // Returns if a value is an object - __is_object(value) { - return value && typeof value === "object" && value.constructor && value.constructor.name === "Object"; - } - - // Returns if a value is null - __is_null(value) { - return value === null; - } - - // Returns if a value is undefined - __is_undefined(value) { - return typeof value === "undefined"; - } - - /** - * Optimized version of random sampling from an array, as implemented in Python - * - * - Chooses k unique random elements from a population sequence or set. - - Returns a new list containing elements from the population while - leaving the original population unchanged. The resulting list is - in selection order so that all sub-slices will also be valid random - samples. This allows raffle winners (the sample) to be partitioned - into grand prize and second place winners (the subslices). - - Members of the population need not be hashable or unique. If the - population contains repeats, then each occurrence is a possible - selection in the sample. - - To choose a sample in a range of integers, use range as an argument. - This is especially fast and space efficient for sampling from a - large population: sample(range(10000000), 60) - - Sampling without replacement entails tracking either potential - selections (the array) in a list or previous selections in a set. - - When the number of selections is small compared to the - population, then tracking selections is efficient, requiring - only a small set and an occasional reselection. For - a larger number of selections, the array tracking method is - preferred since the list takes less space than the - set and it doesn't suffer from frequent reselections. - * - * @param {*} array The array to sample values from randomly - * @param {*} num The number of elements to sample randomly - */ - // Chooses k unique random elements from array. - __sample_from_iter(array, k, destructive) { - var n = array.length; - - if (k < 0 || k > n) - throw new RangeError("Sample larger than population or is negative"); - - if ( - destructive || - n <= (k <= 5 ? 21 : 21 + Math.pow(4, Math.ceil(Math.log(k * 3, 4)))) - ) { - if (!destructive) array = Array.prototype.slice.call(array); - for (var i = 0; i < k; i++) { - // invariant: non-selected at [i,n) - var j = (i + Math.random() * (n - i)) | 0; - var x = array[i]; - array[i] = array[j]; - array[j] = x; - } - array.length = k; // truncate - return array; - } else { - var selected = new Set(); - // eslint-disable-next-line no-empty - while (selected.add((Math.random() * n) | 0).size < k) { } - // eslint-disable-next-line no-undef - return Array.prototype.map.call(selected, (i) => population[i]); - } - } - - //generate integers between two set of numbers - __range(start, end) { - let value = linspace(start, end, end - start + 1).arraySync(); - return value; - } - - //check if key is in object - __key_in_object(object, key) { - if (Object.prototype.hasOwnProperty.call(object, key)) { - return true; - } else { - return false; - } - } - - //transpose row array into column wise array - __get_col_values(data) { - let row_len = data.length; - let cols_len = data[0].length; - var cols_arr = []; - for (var i = 0; i <= cols_len - 1; i++) { - let temp_col = []; - for (let j = 0; j < row_len; j++) { - temp_col.push(data[j][i]); - } - cols_arr.push(temp_col); - } - return cols_arr; - } - - /** - * retrieve row array and column names from object of the form {a: [1,2,3,4], b: [30,20, 30, 20}] - * @param {*} data - */ - _get_row_and_col_values(data) { - let col_names = Object.keys(data); - let col_data = Object.values(data); - let first_col_len = col_data[0].length; - - col_data.forEach((data) => { - if (data.length != first_col_len) { - throw Error("Length Error: Length of columns must be the same!"); - } - }); - let rows_len = col_data[0].length; - let cols_len = col_names.length; - var rows_arr = []; - - for (var i = 0; i <= rows_len - 1; i++) { - var temp_row = []; - for (let j = 0; j < cols_len; j++) { - let _arr = col_data[j]; - temp_row.push(_arr[i]); - } - rows_arr.push(temp_row); - } - return [ rows_arr, col_names ]; - } - - //converts a 2D array of array to 1D for Series Class - __convert_2D_to_1D(data) { - let new_data = []; - data.map((val) => { - if (this.__is_object(val)) { - new_data.push(JSON.stringify(val)); - } else { - new_data.push(`${val}`); - } - }); - return new_data; - } - - __replace_undefined_with_NaN(data, isSeries) { - if (isSeries) { - let temp_arr = []; - data.forEach((val) => { - if (typeof val === "undefined" || val == Infinity || val == null) { - temp_arr.push(NaN); - } else { - temp_arr.push(val); - } - }); - return temp_arr; - } else { - let full_arr = []; - data.forEach((val) => { - var temp_arr = []; - val.forEach((ele) => { - if (typeof ele === "undefined" || ele == Infinity || ele == null) { - temp_arr.push(NaN); - } else { - temp_arr.push(ele); - } - }); - full_arr.push(temp_arr); - }); - return full_arr; - } - } - - __checker(arr_val) { - let dtypes = []; - let lim; - let int_tracker = []; - let float_tracker = []; - let string_tracker = []; - let bool_tracker = []; - - if (arr_val.length == 0) { - dtypes.push("string"); - } - - if (arr_val.length < config.get_dtype_test_lim) { - lim = arr_val.length - 1; - } else { - lim = config.get_dtype_test_lim - 1; - } - arr_val.forEach((ele, indx) => { - let count = indx; - if (typeof ele == "boolean") { - float_tracker.push(false); - int_tracker.push(false); - string_tracker.push(false); - bool_tracker.push(true); - } else if (isNaN(ele) && typeof ele != "string") { - float_tracker.push(true); - int_tracker.push(false); - string_tracker.push(false); - bool_tracker.push(false); - } else if (!isNaN(Number(ele))) { - if (ele.toString().includes(".")) { - float_tracker.push(true); - int_tracker.push(false); - string_tracker.push(false); - bool_tracker.push(false); - } else { - float_tracker.push(false); - int_tracker.push(true); - string_tracker.push(false); - bool_tracker.push(false); - } - } else { - float_tracker.push(false); - int_tracker.push(false); - string_tracker.push(true); - bool_tracker.push(false); - } - - if (count == lim) { - //if atleast one string appears return string dtype - const even = (element) => element == true; - if (string_tracker.some(even)) { - dtypes = "string"; - } else if (float_tracker.some(even)) { - dtypes = "float32"; - } else if (int_tracker.some(even)) { - dtypes = "int32"; - } else if (bool_tracker.some(even)) { - dtypes = "boolean"; - } else { - dtypes = "undefined"; - } - } - }); - - return dtypes; - } - //infer types from an array of array - __get_t(arr_val) { - const self = this; - if (this.__is_1D_array(arr_val)) { - return [ this.__checker(arr_val) ]; - } else { - const dtypes = arr_val.map((arr) => { - return self.__checker(arr); - }); - return dtypes; - } - } - - - __unique(data) { - let unique = new Set(); - - data.map(function (val) { - unique.add(val[0]); - }); - - let unique_array = Array.from(unique); - - return unique_array; - } - - //second version of In object - __in_object(object, key, message) { - if (!Object.prototype.hasOwnProperty.call(object, key)) { - throw new Error(message); - } - } - - //check if a array is 1D - __is_1D_array(arr) { - if ( - typeof arr[0] == "number" || - typeof arr[0] == "string" || - typeof arr[0] == "boolean" - ) { - return true; - } else { - return false; - } - } - - //converts an array to object with index as value - __arr_to_obj(arr) { - let arr_map = {}; - arr.forEach((ele, i) => { - arr_map[ele] = i; - }); - return arr_map; - } - - /** - * count the NaN and non-NaN values present in an array - * @param {Array} arr Array object - * @param {Boolean} val whether to return the value count instead of the null count - * @param {Boolean} isSeries Whether the Obj is of type series or not - */ - __count_nan(arr, return_val = true, isSeries) { - if (isSeries) { - let null_count = 0; - let val_count = 0; - arr.forEach((ele) => { - if (Number.isNaN(ele)) { - null_count = null_count + 1; - } else { - val_count = val_count + 1; - } - }); - if (return_val) { - return val_count; - } else { - return null_count; - } - } else { - let result_arr = []; - arr.forEach((ele_arr) => { - let null_count = 0; - let val_count = 0; - ele_arr.forEach((ele) => { - if (Number.isNaN(ele)) { - null_count = null_count + 1; - } else { - val_count = val_count + 1; - } - }); - if (return_val) { - result_arr.push(val_count); - } else { - result_arr.push(null_count); - } - }); - return result_arr; - } - } - - //computes the median of an array - __median(arr, isSeries) { - if (isSeries) { - const sorted = arr.slice().sort((a, b) => a - b); - const middle = Math.floor(sorted.length / 2); - - if (sorted.length % 2 === 0) { - return (sorted[middle - 1] + sorted[middle]) / 2; - } - - return sorted[middle]; - } else { - let result_arr = []; - arr.map((ele) => { - const sorted = ele.slice().sort((a, b) => a - b); - const middle = Math.floor(sorted.length / 2); - - if (sorted.length % 2 === 0) { - result_arr.push((sorted[middle - 1] + sorted[middle]) / 2); - } else { - result_arr.push(sorted[middle]); - } - }); - return result_arr; - } - } - - //computes the mode(s) of an array - __mode(arr) { - var modes = [], - count = [], - i, - maxIndex = 0; - - arr.forEach((val) => { - count[val] = (count[val] || 0) + 1; - if (count[val] > maxIndex) { - maxIndex = count[val]; - } - }); - - for (i in count) - if (this.__key_in_object(count, i)) { - if (count[i] === maxIndex) { - modes.push(Number(i)); - } - } - - return modes; - } - - //round elements of an array to ndp - __round(arr, dp = 2, isSeries) { - if (dp < 0) { - dp = 1; - } - if (isSeries) { - let new_arr = []; - arr.map((val) => { - new_arr.push(Number(val.toFixed(dp))); - }); - - return new_arr; - } else { - let result_arr = []; - arr.map((arr_ele) => { - let new_arr = []; - arr_ele.map((val) => { - new_arr.push(Number(val.toFixed(dp))); - }); - result_arr.push(new_arr); - }); - return result_arr; - } - } - - //check a variable is a function - __is_function(variable) { - return typeof variable == "function"; - } - - //generate a random list - __randgen(num, start, end) { - let gen_num = []; - - //random int - function randi(a, b) { - return Math.floor(Math.random() * (b - a) + a); - } - - function recursive(val, arr) { - if (!arr.includes(val)) { - return val; - } - - val = randi(start, end); - - recursive(val, arr); - } - - for (let i = 0; i < num; i++) { - let gen_val = randi(start, end); - let recur_val = recursive(gen_val, gen_num); - gen_num.push(recur_val); - } - - return gen_num; - } - - _throw_wrong_params_error(kwargs, params_needed) { - let keys = Object.keys(kwargs); - let bool = []; - for (let i = 0; i < keys.length; i++) { - if (params_needed.includes(keys[i])) { - bool.push(true); - } else { - bool.push(false); - } - } - const truthy = (element) => element == false; - if (bool.some(truthy)) { - throw Error( - `Params Error: A specified parameter is not supported. Your params must be any of the following [${params_needed}]` - ); - } - } - - //maps int values (0, 1) to bools (false, true) - __map_int_to_bool(arr, dim) { - let new_arr = []; - if (dim == 2) { - arr.map((outer_val) => { - let temp_arr = []; - outer_val.map((val) => { - if (val == 1) { - temp_arr.push(true); - } else { - temp_arr.push(false); - } - }); - new_arr.push(temp_arr); - }); - return new_arr; - } else { - arr.map((val) => { - if (val == 1) { - new_arr.push(true); - } else { - new_arr.push(false); - } - }); - return new_arr; - } - } - - __std(data) { - let tensor_data = data; - - let mean = tensor_data.mean(); - let sub_mean_pow = tensor_data.sub(mean).pow(2); - let mean_data = sub_mean_pow.mean(); - let std = mean_data.sqrt(); - - return std; - } - - __zeros(row, column) { - let zero_data = []; - - for (let i = 0; i < row; i++) { - let col_data = Array(column); - for (let j = 0; j < column; j++) { - col_data[j] = 0; - } - zero_data.push(col_data); - } - return zero_data; - } - - __shuffle(num, array) { - //https://stackoverflow.com/questions/18806210/generating-non-repeating-random-numbers-in-js/18806417 - var j, - temp; - - for (let i = 0; i < num; i++) { - j = Math.floor(Math.random() * (array.length - i)) + i; - - // swap randomly chosen element with current element - temp = array[i]; - array[i] = array[j]; - array[j] = temp; - } - - return array.slice(0, num); - } - - __sort(arr, ascending = true) { - let sorted = arr.slice(); - return sorted.sort((a, b) => { - if (ascending) { - if (typeof a === "string" && typeof b === "string") { - return a.charCodeAt() - b.charCodeAt(); - } else { - return a - b; - } - } else { - if (typeof a === "string" && typeof b === "string") { - return b.charCodeAt() - a.charCodeAt(); - } else { - return b - a; - } - } - }); - } - - __is_browser_env() { - var isBrowser = new Function( - "try {return this===window;}catch(e){ return false;}" - ); - // tests if global scope is binded to window - return isBrowser(); - } - - __is_node_env() { - var isNode = new Function( - "try {return this===global;}catch(e){return false;}" - ); - // tests if global scope is binded to window - return isNode(); - } - - _throw_str_dtype_error(obj, ops) { - if (obj.dtypes[0] == "string") { - throw Error( - `dtype error: String data type does not support ${ops} operation` - ); - } - } - - /** - * Remove NaN values from Array - * @param {*} arr - */ - _remove_nans(arr) { - let values = arr.filter((val) => !isNaN(val) && typeof val != "string"); - return values; - } - - /** -* Replace NaN with null before tensor operations -* @param {*} arr -*/ - _replace_nan_with_null(arr) { - let values = arr.map((val) => { - if (isNaN(val)) { - return null; - } else { - return val; - } - }); - return values; - } - - __get_duplicate(arr) { - let temp_obj = {}; - let rslt_obj = {}; - - arr.forEach((val, index) => { - if (val in temp_obj) { - temp_obj[val]["count"] += 1; - temp_obj[val]["index"].push(index); - } else { - temp_obj[val] = {}; - temp_obj[val]["count"] = 1; - temp_obj[val]["index"] = [ index ]; - } - }); - - for (let key in temp_obj) { - if (temp_obj[key]["count"] >= 2) { - rslt_obj[key] = {}; - rslt_obj[key]["count"] = temp_obj[key]["count"]; - rslt_obj[key]["index"] = temp_obj[key]["index"]; - } - } - - return rslt_obj; - } - - /** - * Sorts an array by index - * @param {Array} arr1 - * @param {Array} arr2 - * @param {string} dtype - * - * @returns sorted index - */ - _sort_arr_with_index(arr1, arr2, dtype) { - let sorted_idx = arr1.map((item, index) => { - return [ arr2[index], item ]; - }); - if (dtype == "string") { - sorted_idx.sort(); - } else { - sorted_idx.sort(([ arg1 ], [ arg2 ]) => arg2 - arg1); - } - - return sorted_idx.map(([ , item ]) => item); - } -} diff --git a/danfojs-browser/src/index.js b/danfojs-browser/src/index.js deleted file mode 100644 index b119f684..00000000 --- a/danfojs-browser/src/index.js +++ /dev/null @@ -1,20 +0,0 @@ -import NDframe from "./core/generic"; -import * as tf from "@tensorflow/tfjs"; - -export { Series } from "./core/series"; -export { DataFrame } from "./core/frame"; -export { to_datetime } from "./core/timeseries"; -export { read_csv, read_json, read_excel } from "./io/reader"; -export { merge } from "./core/merge"; -export { concat } from "./core/concat"; -export { LabelEncoder, OneHotEncoder } from "./preprocessing/encodings"; -export { MinMaxScaler, StandardScaler } from "./preprocessing/scalers"; -export { date_range } from "./core/date_range"; -export { get_dummies } from "./core/get_dummies"; -export { Configs } from "./config/config"; -export { NDframe }; -export { Str } from "./core/strings"; -export { Utils } from "./core/utils"; -export { tf }; - -export const _version = "0.2.7"; diff --git a/danfojs-browser/src/io/reader.js b/danfojs-browser/src/io/reader.js deleted file mode 100644 index d736dfa9..00000000 --- a/danfojs-browser/src/io/reader.js +++ /dev/null @@ -1,116 +0,0 @@ -import { data } from "@tensorflow/tfjs"; -import XLSX from "xlsx"; -import { DataFrame } from "../core/frame"; - - -/** - * Reads a CSV file from local or remote storage - * @param {string} source URL to CSV file - * @param {object} config (Optional). A CSV Config object that contains configurations - * for reading and decoding from CSV file(s). - * { start: The index position to start from when reading the CSV file. - * - * end: The end position to stop at when reading the CSV file. - * - * ...csvConfigs: other supported Tensorflow csvConfig parameters. See https://js.tensorflow.org/api/latest/#data.csv - * } - * - * @returns {Promise} DataFrame structure of parsed CSV data - */ -export const read_csv = async (source, configs = {}) => { - let { start, end } = configs; - if (!(source.startsWith("https") || source.startsWith("http") || source.startsWith("blob"))) { - throw new Error("Cannot read local file in browser environment"); - } - let tfdata = []; - await data.csv(source, configs) - .skip(start) - .take(end) - .forEachAsync((row) => { - return tfdata.push(row); - }); - const df = new DataFrame(tfdata); - return df; -}; - -/** - * Reads a JSON file from local or remote address - * @param {string} source URL or local file path to retreive JSON file. - * @returns {Promise} DataFrame structure of parsed CSV data - */ -export const read_json = async (source) => { - let res = await fetch(source, { method: "Get" }); - let json = await res.json(); - let df = new DataFrame(json); - return df; - -}; - -/** - * Reads an Excel file from local or remote address - * @param {string} source URL to Excel file - * @param {object} configs { - * - * sheet : string, (Optional) Name of the sheet which u want to parse. Default will be the first sheet. - * - * header_index : int, (Optional) Index of the row which represents the header(columns) of the data. Default will be the first non empty row. - * - * data_index : int, (Optional) Index of the row from which actual data(content) starts. Default will be the next row of `header_index`. - * - * } - * @returns {Promise} DataFrame structure of parsed Excel data - */ -export const read_excel = async (source, configs = {}) => { - let { sheet, header_index, data_index } = configs; - let workbook; - if (!header_index) { - //default header_index - header_index = 1; - } - if (!data_index) { - //default data_index - data_index = header_index + 1; - } - try { - let res = await fetch(source, { method: "Get" }); - res = await res.arrayBuffer(); - res = new Uint8Array(res); - workbook = XLSX.read(res, { type: "array" }); - - - // Parse worksheet from workbook - const worksheet = workbook.Sheets[sheet || workbook.SheetNames[0]]; - let range = XLSX.utils.decode_range(worksheet["!ref"]); - let column_names = [], - data = []; - for (let R = header_index - 1; R <= range.e.r; ++R) { - let row_data = []; - for (let C = range.s.c; C <= range.e.c; ++C) { - let cell_ref; - - //Populate column_names - if (R == header_index - 1) { - cell_ref = XLSX.utils.encode_cell({ c: C, r: header_index - 1 }); - if (worksheet[cell_ref]) { - column_names.push(worksheet[cell_ref].v); - } - } - - //Populate corresponding data row - if (R >= data_index - 1) { - cell_ref = XLSX.utils.encode_cell({ c: C, r: R }); - if (worksheet[cell_ref]) { - row_data.push(worksheet[cell_ref].v); - } - } - } - if (R >= data_index - 1) { - data.push(row_data); - } - } - let df = new DataFrame(data, { columns: column_names }); - return df; - } catch (err) { - throw new Error(err); - } -}; diff --git a/danfojs-browser/src/plotting/plot.js b/danfojs-browser/src/plotting/plot.js deleted file mode 100644 index 4653d9b5..00000000 --- a/danfojs-browser/src/plotting/plot.js +++ /dev/null @@ -1,867 +0,0 @@ -import { Utils } from "../core/utils"; -import { Series } from "../core/series"; -const utils = new Utils(); - -/** - * Change: Rising Odegua 6th Feb 2021 - * We no longer bundle Plotjs with DanfoJs. I noticed that removing this single - * inport reduces the bundle size from 5.7mb to 2.1mb. I know it's still a huge - * bundle, but it's progress! - * If you need to use Plotly, then you can add the Plotly CDN - * to your script before DanfoJs CDN - */ -try { - const version = Plotly.version; - console.info(`Using Plotly version ${version}`); -} catch (error) { - console.info(`Plotly CDN not found. If you need to make Plots, then add the Plotly CDN to your script`); -} - -/** - * Plotting methods and Functions performed on Series and DataFrames - */ -export class Plot { - constructor(ndframe, div) { - this.div = div; - this.ndframe = ndframe; - } - - - /** - * Plot Series or DataFrame as lines. This function is useful to plot lines using DataFrame’s values as coordinates. - * Make plots of Series or DataFrame. - * Uses the Plotly as backend, so supoorts Plotly's configuration parameters - * @param {string} div Name of the div to show the plot - * @param {Object} config configuration options for making Plots, supports Plotly parameters - */ - line(config = {}) { - - let ret_params = this.__get_plot_params(config); - let this_config = ret_params[0]; - let params = ret_params[1]; - - if (this.ndframe instanceof Series) { - let trace = {}; - let y = this.ndframe.values; - - params.forEach((param) => { - if(!(param == "layout")) { - trace[param] = config[param]; - } - }); - - trace["y"] = y; - trace['type'] = "line"; - - Plotly.newPlot(this.div, [ trace ], this_config['layout'], this_config); - - } else { - //check if plotting two columns against each other - if (utils.__key_in_object(this_config, 'x') && utils.__key_in_object(this_config, 'y')) { - if (!this.ndframe.column_names.includes(this_config['x'])) { - throw Error(`Column Error: ${this_config['x']} not found in columns`); - } - if (!this.ndframe.column_names.includes(this_config['y'])) { - throw Error(`Column Error: ${this_config['y']} not found in columns`); - } - - - let x = this.ndframe[this_config['x']].values; - let y = this.ndframe[this_config['y']].values; - - let trace = {}; - trace["x"] = x; - trace['y'] = y; - - - let xaxis = {}; let yaxis = {}; - xaxis['title'] = this_config['x']; - yaxis['title'] = this_config['y']; - - this_config['layout']['xaxis'] = xaxis; - this_config['layout']['yaxis'] = yaxis; - - Plotly.newPlot(this.div, [ trace ], this_config['layout'], this_config); - - } else if (utils.__key_in_object(this_config, 'x') || utils.__key_in_object(this_config, 'y')) { - //plot single column specified in either of param [x | y] against index - //plot columns against index - let data = []; - let cols_to_plot; - - if (utils.__key_in_object(this_config, "columns")) { - cols_to_plot = this.____check_if_cols_exist(this_config['columns']); - } else { - cols_to_plot = this.ndframe.column_names; - } - - cols_to_plot.forEach((c_name) => { - let trace = {}; - - params.forEach((param) => { //TODO accept individual configuration for traces - trace[param] = config[param]; - }); - if (utils.__key_in_object(this_config, 'x')) { - trace["x"] = this.ndframe[this_config['x']].values; - trace["y"] = this.ndframe[c_name].values; - trace['name'] = c_name; - } else { - trace["y"] = this.ndframe[this_config['y']].values; - trace["x"] = this.ndframe[c_name].values; - trace['name'] = c_name; - } - - data.push(trace); - - }); - Plotly.newPlot(this.div, data, this_config['layout'], this_config); - - } else { - //plot columns against index - let data = []; - let cols_to_plot; - - if (utils.__key_in_object(this_config, "columns")) { - cols_to_plot = this.____check_if_cols_exist(this_config['columns']); - } else { - cols_to_plot = this.ndframe.column_names; - } - - cols_to_plot.forEach((c_name) => { - let trace = {}; - - params.forEach((param) => { //TODO accept individual configuration for traces - trace[param] = config[param]; - }); - trace["x"] = this.ndframe.index; - trace["y"] = this.ndframe[c_name].values; - trace['name'] = c_name; - - data.push(trace); - - }); - Plotly.newPlot(this.div, data, this_config['layout'], this_config); - - } - - } - - - } - - - /** - * Plot Series or DataFrame as Bars. - * Uses the Plotly as backend, so supoorts Plotly's configuration parameters - * @param {string} div Name of the div to show the plot - * @param {Object} config configuration options for making Plots, supports Plotly parameters - */ - bar(config = {}) { - - let ret_params = this.__get_plot_params(config); - let this_config = ret_params[0]; - let params = ret_params[1]; - - if (this.ndframe instanceof Series) { - let trace = {}; - let y = this.ndframe.values; - - params.forEach((param) => { - if (!param == "layout") { - trace[param] = config[param]; - } - }); - - trace["y"] = y; - trace['type'] = "bar"; - - Plotly.newPlot(this.div, [ trace ], this_config['layout'], this_config); - - } else { - //check if plotting two columns against each other - if (utils.__key_in_object(this_config, 'x') && utils.__key_in_object(this_config, 'y')) { - if (!this.ndframe.column_names.includes(this_config['x'])) { - throw Error(`Column Error: ${this_config['x']} not found in columns`); - } - if (!this.ndframe.column_names.includes(this_config['y'])) { - throw Error(`Column Error: ${this_config['y']} not found in columns`); - } - - - let x = this.ndframe[this_config['x']].values; - let y = this.ndframe[this_config['y']].values; - - let trace = {}; - trace["x"] = x; - trace['y'] = y; - trace['type'] = "bar"; - - - let xaxis = {}; let yaxis = {}; - xaxis['title'] = this_config['x']; - yaxis['title'] = this_config['y']; - - this_config['layout']['xaxis'] = xaxis; - this_config['layout']['yaxis'] = yaxis; - - Plotly.newPlot(this.div, [ trace ], this_config['layout'], this_config); - - } else if (utils.__key_in_object(this_config, 'x') || utils.__key_in_object(this_config, 'y')) { - //plot single column specified in either of param [x | y] against index - let trace = {}; - - params.forEach((param) => { - if (!param == "layout") { - trace[param] = config[param]; - } - }); - - if (utils.__key_in_object(this_config, 'x')) { - trace['y'] = this.ndframe[this_config['x']].values; - } else { - trace['y'] = this.ndframe[this_config['y']].values; - } - trace['type'] = "bar"; - - Plotly.newPlot(this.div, [ trace ], this_config['layout'], this_config); - - } else { - //plot columns against index - let data = []; - let cols_to_plot; - - if (utils.__key_in_object(this_config, "columns")) { - cols_to_plot = this.____check_if_cols_exist(this_config['columns']); - } else { - cols_to_plot = this.ndframe.column_names; - } - - cols_to_plot.forEach((c_name) => { - let trace = {}; - - // params.forEach(param => { //TODO accept individual configuration for traces - // trace[param] = config[param] - // }) - trace['x'] = this.ndframe.index; - trace["y"] = this.ndframe[c_name].values; - trace['name'] = c_name; - trace['type'] = "bar"; - - data.push(trace); - - }); - Plotly.newPlot(this.div, data, this_config['layout'], this_config); - - } - - } - - - } - - - /** - * Plot two or more columns in a DataFrame as scatter points. If Series, plot against its index - * Uses the Plotly as backend, so supoorts Plotly's configuration parameters - * @param {string} div Name of the div to show the plot - * @param {Object} config configuration options for making Plots, supports Plotly parameters - */ - scatter(config = {}) { - - let ret_params = this.__get_plot_params(config); - let this_config = ret_params[0]; - let params = ret_params[1]; - - if (this.ndframe instanceof Series) { - let trace = {}; - - params.forEach((param) => { - if (!param == "layout") { - trace[param] = config[param]; - } - }); - - trace["x"] = this.ndframe.values; - trace['y'] = this.ndframe.index; - trace['type'] = "scatter"; - trace['mode'] = "markers"; - - Plotly.newPlot(this.div, [ trace ], this_config['layout'], this_config); - - } else { - //check if plotting two columns against each other - if (utils.__key_in_object(this_config, 'x') && utils.__key_in_object(this_config, 'y')) { - if (!this.ndframe.column_names.includes(this_config['x'])) { - throw Error(`Column Error: ${this_config['x']} not found in columns`); - } - if (!this.ndframe.column_names.includes(this_config['y'])) { - throw Error(`Column Error: ${this_config['y']} not found in columns`); - } - - - let x = this.ndframe[this_config['x']].values; - let y = this.ndframe[this_config['y']].values; - - let trace = {}; - trace["x"] = x; - trace['y'] = y; - trace['type'] = "scatter"; - trace['mode'] = "markers"; - - let xaxis = {}; let yaxis = {}; - xaxis['title'] = this_config['x']; - yaxis['title'] = this_config['y']; - - this_config['layout']['xaxis'] = xaxis; - this_config['layout']['yaxis'] = yaxis; - - Plotly.newPlot(this.div, [ trace ], this_config['layout'], this_config); - - } else if (utils.__key_in_object(this_config, 'x') || utils.__key_in_object(this_config, 'y')) { - //plot single column specified in either of param [x | y] against index - let trace = {}; - - params.forEach((param) => { - if (!param == "layout") { - trace[param] = config[param]; - } - }); - - if (utils.__key_in_object(this_config, 'x')) { - trace['y'] = this.ndframe.index; - trace['x'] = this.ndframe[this_config['x']].values; - - } else { - trace['x'] = this.ndframe.index; - trace['y'] = this.ndframe[this_config['y']].values; - - } - trace['type'] = "scatter"; - trace['mode'] = "markers"; - - Plotly.newPlot(this.div, [ trace ], this_config['layout'], this_config); - - } else { - //plot columns against index - let data = []; - let cols_to_plot; - - if (utils.__key_in_object(this_config, "columns")) { - cols_to_plot = this.____check_if_cols_exist(this_config['columns']); - } else { - cols_to_plot = this.ndframe.column_names; - } - - cols_to_plot.forEach((c_name) => { - let trace = {}; - - // params.forEach(param => { //TODO accept individual configuration for traces - // trace[param] = config[param] - // }) - trace['y'] = this.ndframe.index; - trace["x"] = this.ndframe[c_name].values; - trace['name'] = c_name; - trace['type'] = "scatter"; - trace['mode'] = "markers"; - data.push(trace); - - }); - Plotly.newPlot(this.div, data, this_config['layout'], this_config); - - } - - } - - - } - - - /** - * Plot columns in a Series/DataFrame as Histograms. - * Uses the Plotly as backend, so supoorts Plotly's configuration parameters - * @param {string} div Name of the div to show the plot - * @param {Object} config configuration options for making Plots, supports Plotly parameters - */ - hist(config = {}) { - - let ret_params = this.__get_plot_params(config); - let this_config = ret_params[0]; - let params = ret_params[1]; - - if (this.ndframe instanceof Series) { - let trace = {}; - - params.forEach((param) => { - if (!param == "layout") { - trace[param] = config[param]; - } - }); - - trace["x"] = this.ndframe.values; - trace['type'] = "histogram"; - - Plotly.newPlot(this.div, [ trace ], this_config['layout'], this_config); - - } else if (utils.__key_in_object(this_config, 'x')) { - //plot as vertical histogram - let trace = {}; - params.forEach((param) => { - if (!param == "layout") { - trace[param] = config[param]; - } - }); - - trace['x'] = this.ndframe[this_config['x']].values; - trace['type'] = "histogram"; - - Plotly.newPlot(this.div, [ trace ], this_config['layout'], this_config); - - } else if (utils.__key_in_object(this_config, 'y')) { - //plot as vertical histogram - let trace = {}; - params.forEach((param) => { - if (!param == "layout") { - trace[param] = config[param]; - } - }); - - trace['y'] = this.ndframe[this_config['y']].values; - trace['type'] = "histogram"; - - Plotly.newPlot(this.div, [ trace ], this_config['layout'], this_config); - - } else { - let data = []; - let cols_to_plot; - - if (utils.__key_in_object(this_config, "columns")) { - cols_to_plot = this.____check_if_cols_exist(this_config['columns']); - } else { - cols_to_plot = this.ndframe.column_names; - } - - cols_to_plot.forEach((c_name) => { - let trace = {}; - trace["x"] = this.ndframe[c_name].values; - trace['name'] = c_name; - trace['type'] = "histogram"; - data.push(trace); - - }); - Plotly.newPlot(this.div, data, this_config['layout'], this_config); - - } - - } - - - /** - * Makes Pie Plots from two Columns in a DataFrame. - * Uses the Plotly as backend, so supoorts Plotly's configuration parameters - * @param {string} div Name of the div to show the plot - * @param {Object} config configuration options for making Plots, supports Plotly parameters - */ - pie(config = {}) { - - let ret_params = this.__get_plot_params(config); - let this_config = ret_params[0]; - - - if (this.ndframe instanceof Series) { - let data = [ { - values: this.ndframe.values, - labels: this.ndframe.index, - type: 'pie', - name: this_config['labels'], - hoverinfo: 'label+percent+name', - automargin: true - } ]; - - Plotly.newPlot(this.div, data, this_config['layout'], this_config); - - } else if (utils.__key_in_object(this_config, 'values') && utils.__key_in_object(this_config, 'labels')) { - if (!this.ndframe.column_names.includes(this_config['labels'])) { - throw Error(`Column Error: ${this_config['labels']} not found in columns. labels name must be one of [ ${this.ndframe.column_names}]`); - } - if (!this.ndframe.column_names.includes(this_config['values'])) { - throw Error(`Column Error: ${this_config['values']} not found in columns. value name must be one of [ ${this.ndframe.column_names}]`); - } - let data = [ { - values: this.ndframe[this_config['values']].values, - labels: this.ndframe[this_config['labels']].values, - type: 'pie', - name: this_config['labels'], - hoverinfo: 'label+percent+name', - automargin: true - } ]; - - Plotly.newPlot(this.div, data, this_config['layout'], this_config); - - } else { - let cols_to_plot; - - if (utils.__key_in_object(this_config, "columns")) { - cols_to_plot = this.____check_if_cols_exist(this_config['columns']); - } else { - cols_to_plot = this.ndframe.column_names; - } - - if (utils.__key_in_object(this_config, 'row_pos')) { - if (this_config['row_pos'].length != cols_to_plot.length - 1) { - throw Error(`Lenght of row_pos array must be equal to number of columns. Got ${this_config['row_pos'].length}, expected ${cols_to_plot.length - 1}`); - } - } else { - let temp_arr = []; - for (let i = 0; i < cols_to_plot.length - 1; i++) { - temp_arr.push(0); - } - this_config['row_pos'] = temp_arr; - - } - - if (utils.__key_in_object(this_config, 'col_pos')) { - if (this_config['col_pos'].length != cols_to_plot.length - 1) { - throw Error(`Lenght of col_pos array must be equal to number of columns. Got ${this_config['col_pos'].length}, expected ${cols_to_plot.length - 1}`); - } - } else { - let temp_arr = []; - for (let i = 0; i < cols_to_plot.length - 1; i++) { - temp_arr.push(i); - } - this_config['col_pos'] = temp_arr; - - } - let data = []; - - cols_to_plot.forEach((c_name, i) => { - let trace = {}; - trace["values"] = this.ndframe[c_name].values; - trace['labels'] = this.ndframe[this_config['labels']].values; - trace['name'] = c_name; - trace['type'] = "pie"; - trace['domain'] = { row: this_config['row_pos'][i], column: this_config['col_pos'][i] }; - trace["hoverinfo"] = 'label+percent+name'; - trace['textposition'] = "outside"; - trace['automargin'] = true; - data.push(trace); - - }); - - if (!utils.__key_in_object(this_config, "grid")) { - //set default grid - let size = Number((this.ndframe.shape[1] / 2).toFixed()) + 1; - this_config['grid'] = { rows: size, columns: size }; - } - this_config['layout']['grid'] = this_config['grid']; - Plotly.newPlot(this.div, data, this_config['layout'], this_config); - - - } - - } - - - /** - * Plot Box plots from Series or DataFrame as lines. - * Uses the Plotly as backend, so supoorts Plotly's configuration parameters - * @param {Object} config configuration options for making Plots, supports Plotly parameters - */ - box(config = {}) { - - let ret_params = this.__get_plot_params(config); - let this_config = ret_params[0]; - let params = ret_params[1]; - - if (this.ndframe instanceof Series) { - let trace = {}; - let y = this.ndframe.values; - - params.forEach((param) => { - if (!param == "layout") { - trace[param] = config[param]; - } - }); - - trace["y"] = y; - trace['type'] = "box"; - - Plotly.newPlot(this.div, [ trace ], this_config['layout'], this_config); - - } else { - //check if plotting two columns against each other - if (utils.__key_in_object(this_config, 'x') && utils.__key_in_object(this_config, 'y')) { - if (!this.ndframe.column_names.includes(this_config['x'])) { - throw Error(`Column Error: ${this_config['x']} not found in columns`); - } - if (!this.ndframe.column_names.includes(this_config['y'])) { - throw Error(`Column Error: ${this_config['y']} not found in columns`); - } - - - let x = this.ndframe[this_config['x']].values; - let y = this.ndframe[this_config['y']].values; - - let trace = {}; - trace["x"] = x; - trace['y'] = y; - trace['type'] = 'box'; - - - let xaxis = {}; let yaxis = {}; - xaxis['title'] = this_config['x']; - yaxis['title'] = this_config['y']; - - this_config['layout']['xaxis'] = xaxis; - this_config['layout']['yaxis'] = yaxis; - - Plotly.newPlot(this.div, [ trace ], this_config['layout'], this_config); - - } else if (utils.__key_in_object(this_config, 'x') || utils.__key_in_object(this_config, 'y')) { - //plot single column specified in either of param [x | y] against index - let trace = {}; - - params.forEach((param) => { - if (!param == "layout") { - trace[param] = config[param]; - } - }); - - if (utils.__key_in_object(this_config, 'x')) { - trace['x'] = this.ndframe[this_config['x']].values; - trace['y'] = this.ndframe.index; - trace['type'] = 'box'; - } else { - trace['x'] = this.ndframe.index; - trace['y'] = this_config['y']; - trace['type'] = 'box'; - } - - Plotly.newPlot(this.div, [ trace ], this_config['layout'], this_config); - - } else { - //plot columns against index - let data = []; - let cols_to_plot; - - if (utils.__key_in_object(this_config, "columns")) { - cols_to_plot = this.____check_if_cols_exist(this_config['columns']); - } else { - cols_to_plot = this.ndframe.column_names; - } - - cols_to_plot.forEach((c_name) => { - let trace = {}; - - params.forEach((param) => { //TODO accept individual configuration for traces - trace[param] = config[param]; - }); - trace["x"] = this.ndframe[c_name].values; - trace["y"] = this.ndframe.index; - trace['name'] = c_name; - trace['type'] = 'box'; - data.push(trace); - - }); - Plotly.newPlot(this.div, data, this_config['layout'], this_config); - - } - - } - - - } - - - /** - * Plot Violin plots from Series or DataFrame as lines. - * Uses the Plotly as backend, so supoorts Plotly's configuration parameters - * @param {Object} config configuration options for making Plots, supports Plotly parameters - */ - violin(config = {}) { - - let ret_params = this.__get_plot_params(config); - let this_config = ret_params[0]; - let params = ret_params[1]; - - if (this.ndframe instanceof Series) { - let trace = {}; - let y = this.ndframe.values; - - params.forEach((param) => { - if (!param == "layout") { - trace[param] = config[param]; - } - }); - - trace["y"] = y; - trace['type'] = "violin"; - - Plotly.newPlot(this.div, [ trace ], this_config['layout'], this_config); - - } else { - //check if plotting two columns against each other - if (utils.__key_in_object(this_config, 'x') && utils.__key_in_object(this_config, 'y')) { - if (!this.ndframe.column_names.includes(this_config['x'])) { - throw Error(`Column Error: ${this_config['x']} not found in columns`); - } - if (!this.ndframe.column_names.includes(this_config['y'])) { - throw Error(`Column Error: ${this_config['y']} not found in columns`); - } - - - let x = this.ndframe[this_config['x']].values; - let y = this.ndframe[this_config['y']].values; - - let trace = {}; - trace["x"] = x; - trace['y'] = y; - trace['type'] = 'violin'; - - - let xaxis = {}; let yaxis = {}; - xaxis['title'] = this_config['x']; - yaxis['title'] = this_config['y']; - - this_config['layout']['xaxis'] = xaxis; - this_config['layout']['yaxis'] = yaxis; - - Plotly.newPlot(this.div, [ trace ], this_config['layout'], this_config); - - } else if (utils.__key_in_object(this_config, 'x') || utils.__key_in_object(this_config, 'y')) { - //plot single column specified in either of param [x | y] against index - let trace = {}; - - params.forEach((param) => { - if (!param == "layout") { - trace[param] = config[param]; - } - }); - - if (utils.__key_in_object(this_config, 'x')) { - trace['x'] = this.ndframe[this_config['x']].values; - trace['y'] = this.ndframe.index; - trace['type'] = 'violin'; - } else { - trace['x'] = this.ndframe.index; - trace['y'] = this_config['y']; - trace['type'] = 'violin'; - } - - Plotly.newPlot(this.div, [ trace ], this_config['layout'], this_config); - - } else { - //plot columns against index - let data = []; - let cols_to_plot; - - if (utils.__key_in_object(this_config, "columns")) { - cols_to_plot = this.____check_if_cols_exist(this_config['columns']); - } else { - cols_to_plot = this.ndframe.column_names; - } - - cols_to_plot.forEach((c_name) => { - let trace = {}; - - params.forEach((param) => { //TODO accept individual configuration for traces - trace[param] = config[param]; - }); - trace["y"] = this.ndframe[c_name].values; - trace['name'] = c_name; - trace['type'] = 'violin'; - data.push(trace); - - }); - Plotly.newPlot(this.div, data, this_config['layout'], this_config); - - } - - } - - - } - - /** - * Display DataFrame in a div using D3.js format - * Uses the Plotly as backend, so supoorts Plotly's configuration parameters - * @param {Object} config configuration options for making Plots, supports Plotly parameters - */ - table(config = {}) { - let ret_params = this.__get_plot_params(config); - let this_config = ret_params[0]; - let header = {}; - let cells = {}; - let cols_data = []; - let cols_2_show; - - - if (utils.__key_in_object(this_config, 'columns')) { - - this_config['columns'].forEach((cname) => { - if (!this.ndframe.column_names.includes(cname)) { - throw Error(`Column Error: ${cname} not found in columns. Columns should be one of [ ${this.ndframe.column_names} ]`); - } - - let idx = this.ndframe.column_names.indexOf(cname); - cols_data.push(this.ndframe.col_data[idx]); - }); - cols_2_show = this_config['columns']; - } else { - - cols_2_show = this.ndframe.column_names; - cols_data = this.ndframe.col_data; - - } - - header['values'] = cols_2_show; - cells['values'] = cols_data; - - if (this_config['header_style']) { - Object.keys(this_config['header_style']).forEach((param) => { - header[param] = this_config['header_style'][param]; - }); - } - - if (this_config['cell_style']) { - Object.keys(this_config['cell_style']).forEach((param) => { - cells[param] = this_config['cell_style'][param]; - }); - } - var data = [ { - type: 'table', - header: header, - cells: cells - } ]; - Plotly.newPlot(this.div, data, this_config['layout'], this_config); - - } - - - __get_plot_params(config) { - let params = Object.keys(config); - let this_config = {}; - - params.forEach((param) => { - this_config[param] = config[param]; - }); - - if (!utils.__key_in_object(config, "layout")) { - this_config['layout'] = {}; - } - - - return [ this_config, params ]; - - } - - ____check_if_cols_exist(cols) { - cols.forEach((col) => { - if (!this.ndframe.column_names.includes(col)) { - throw Error(`Column Error: ${col} not found in columns. Columns should be one of [ ${this.ndframe.column_names} ]`); - } - }); - return cols; - } - - -} diff --git a/danfojs-browser/src/preprocessing/encodings.js b/danfojs-browser/src/preprocessing/encodings.js deleted file mode 100644 index ace33885..00000000 --- a/danfojs-browser/src/preprocessing/encodings.js +++ /dev/null @@ -1,108 +0,0 @@ -import { Series } from "../core/series"; -import { Utils } from "../core/utils"; -import { DataFrame } from "../core/frame"; - -const utils = new Utils; - -export class LabelEncoder { - - /** - * - * @param {data} data [Array|Series] - * @returns Array. - */ - fit(data) { - let in_data = null; - if (Array.isArray(data)) { - in_data = data; - } else if (data instanceof Series) { - in_data = data.values; - } else { - throw new Error("data must be an array or a Series"); - } - - let data_set = new Set(in_data); - this.label = Array.from(data_set); - - let self = this; - let output_data = in_data.map((x) => { - return self.label.indexOf(x); - }); - - return new Series(output_data); - } - - /** - * Transform data using the label generated from fitting - * @param {data} data [Array|Series] - * @returns Array - */ - transform(data) { - let in_data = null; - if (Array.isArray(data)) { - in_data = data; - } else if (data instanceof Series) { - in_data = data.values; - } else { - throw new Error("data must be an array or a Series"); - } - - let self = this; - let output_data = in_data.map((x) => { - return self.label.indexOf(x); - }); - return new Series(output_data); - } -} - -export class OneHotEncoder { - - fit(data) { - let in_data = null; - if (Array.isArray(data)) { - in_data = data; - } else if (data instanceof Series) { - in_data = data.values; - } else { - throw new Error("data must be an array"); - } - - let data_set = new Set(in_data); - this.label = Array.from(data_set); - - let onehot_data = utils.__zeros(in_data.length, this.label.length); - - for (let i = 0; i < in_data.length; i++) { - - let elem = in_data[i]; - let elem_index = this.label.indexOf(elem); - onehot_data[i][elem_index] = 1; - } - - return new DataFrame(onehot_data, { columns: this.label }); - - } - - transform(data) { - let in_data = null; - - if (Array.isArray(data)) { - in_data = data; - } else if (data instanceof Series) { - in_data = data.values; - } else { - throw new Error("data must be an array"); - } - - let onehot_data = utils.__zeros(in_data.length, this.label.length); - - for (let i = 0; i < in_data.length; i++) { - let elem = in_data[i]; - let elem_index = this.label.indexOf(elem); - onehot_data[i][elem_index] = 1; - } - - return new DataFrame(onehot_data, { columns: this.label }); - - } -} diff --git a/danfojs-browser/src/preprocessing/scalers.js b/danfojs-browser/src/preprocessing/scalers.js deleted file mode 100644 index 2542512c..00000000 --- a/danfojs-browser/src/preprocessing/scalers.js +++ /dev/null @@ -1,267 +0,0 @@ -import { tensor, moments } from "@tensorflow/tfjs"; -import { Series } from "../core/series"; -import { DataFrame } from "../core/frame"; -import { Utils } from "../core/utils"; - -const utils = new Utils(); - -export class MinMaxScaler { - /** - * Fit minmax scaler on data, to obtain their min and max value - * @param {data} data [DataRame | Series | Array] - * @returns Array - */ - fit(data) { - let tensor_data = null; - if (Array.isArray(data)) { - tensor_data = tensor(data); - } else if (data instanceof DataFrame || data instanceof Series) { - if (data.dtypes.includes("string")) { - throw Error("Dtype Error: Cannot perform operation on string dtypes"); - } - tensor_data = tensor(data.values); - } else { - throw new Error("data must either be an Array, DataFrame or Series"); - } - - this.max = tensor_data.max(0); - this.min = tensor_data.min(0); - - let output_data = tensor_data - .sub(this.min) - .div(this.max.sub(this.min)) - .arraySync(); - - if (data instanceof Series || Array.isArray(data)) { - return new Series(output_data); - } else { - return new DataFrame(output_data); - } - } - - /** - * Transform an array using the min and max generated from the fitting on data - * @param {data} data [Array] - * @returns array - */ - transform(data) { - if (data instanceof Series) { - if (data.dtypes.includes("string")) { - throw Error("Dtype Error: Cannot perform operation on string dtypes"); - } - let tensor_data = tensor(data.values); - let output_data = tensor_data - .sub(this.min) - .div(this.max.sub(this.min)) - .arraySync(); - return new Series(output_data); - } else if (Array.isArray(data)) { - let tensor_data = tensor(data); - let output_data = tensor_data - .sub(this.min) - .div(this.max.sub(this.min)) - .arraySync(); - if (utils.__is_1D_array(data)) { - return new Series(output_data); - } else { - return new DataFrame(output_data); - } - } else if (data instanceof DataFrame) { - if (data.dtypes.includes("string")) { - throw Error("Dtype Error: Cannot perform operation on string dtypes"); - } - let tensor_data = tensor(data.values); - let output_data = tensor_data - .sub(this.min) - .div(this.max.sub(this.min)) - .arraySync(); - return new DataFrame(output_data); - } else { - throw Error("Value Error: Data type not supoorted"); - } - } -} - -export class StandardScaler { - /** - * - * @param {data} data [DataRame | Series | Array] - * @returns Array - */ - fit(data) { - let tensor_data = null; - if (Array.isArray(data)) { - tensor_data = tensor(data); - } else if (data instanceof DataFrame || data instanceof Series) { - if (data.dtypes.includes("string")) { - throw Error("Dtype Error: Cannot perform operation on string dtypes"); - } - tensor_data = tensor(data.values); - } else { - throw new Error("data must either be an Array, DataFrame or Series"); - } - - this.std = moments(tensor_data, 0).variance.sqrt(); - this.mean = tensor_data.mean(0); - let output_data = tensor_data.sub(this.mean).div(this.std).arraySync(); - - if (data instanceof Series || Array.isArray(data)) { - return new Series((data = output_data)); - } else { - return new DataFrame((data = output_data)); - } - } - - transform(data) { - // if(!Array.isArray(data)){ - // throw new Error(data) - // } - - if (data instanceof Series) { - if (data.dtypes.includes("string")) { - throw Error("Dtype Error: Cannot perform operation on string dtypes"); - } - let tensor_data = tensor(data.values); - let output_data = tensor_data.sub(this.mean).div(this.std).arraySync(); - return new Series(output_data); - } else if (Array.isArray(data)) { - let tensor_data = tensor(data); - let output_data = tensor_data.sub(this.mean).div(this.std).arraySync(); - if (utils.__is_1D_array(data)) { - return new Series(output_data); - } else { - return new DataFrame(output_data); - } - } else if (data instanceof DataFrame) { - if (data.dtypes.includes("string")) { - throw Error("Dtype Error: Cannot perform operation on string dtypes"); - } - let tensor_data = tensor(data.values); - let output_data = tensor_data.sub(this.mean).div(this.std).arraySync(); - return new DataFrame(output_data); - } else { - throw Error("Value Error: Data type not supoorted"); - } - } -} - -// export class RobustScaler{ - -// __median(arr, isTensor,return_index) { -// if (!isTensor) { -// const sorted = arr.slice().sort((a, b) => a - b); -// const middle = Math.floor(sorted.length / 2); - -// if (sorted.length % 2 === 0) { - -// return return_index ? [(middle - 1) , middle] : (sorted[middle - 1] + sorted[middle]) / 2; -// } - -// return return_index ? middle : sorted[middle] ; -// } else { -// let result_arr = [] -// arr.map(ele => { -// const sorted = ele.slice().sort((a, b) => a - b); -// const middle = Math.floor(sorted.length / 2); - -// if (sorted.length % 2 === 0) { -// result_arr.push(return_index ? [(middle - 1) , middle] :(sorted[middle - 1] + sorted[middle]) / 2 ) -// } else { -// result_arr.push(return_index ? middle : sorted[middle]) -// } - -// }) -// return result_arr -// } - -// } - -// quantile(data,isTensor){ - -// if(isTensor){ -// data = utils.__get_col_values(data); -// } - -// let median = this.__median(data,isTensor,true) -// let med = this.__median(data,isTensor,false) - -// let q1 = [] -// let q2 = [] - -// if(!isTensor){ -// let sorted = data.slice().sort((a, b) => a - b); - -// if(Array.isArray(median)){ -// let lower = median[0] -// let lower_data = sorted.slice(0,lower+1) -// let upper_data = sorted.slice(lower+1,) - -// q1.push(this.__median(lower_data,isTensor,false)); -// q2.push(this.__median(upper_data,isTensor,false)); - -// }else{ -// let lower_data = sorted.slice(0,median) -// let upper_data = sorted.slice(median+1,) - -// q1.push(this.__median(lower_data,isTensor,false)); -// q2.push(this.__median(upper_data,isTensor,false)); -// } - -// }else{ - -// data.map((x,i)=>{ -// let sorted = x.slice().sort((a, b) => a - b); - -// if(Array.isArray(median[i])){ -// let lower = median[i][0] -// let lower_data = sorted.slice(0,lower+1) -// let upper_data = sorted.slice(lower+1,) - -// q1.push(this.__median(lower_data,!isTensor,false)); -// q2.push(this.__median(upper_data,!isTensor,false)); - -// }else{ -// let lower_data = sorted.slice(0,median[i]) -// let upper_data = sorted.slice(median[i]+1,) - -// q1.push(this.__median(lower_data,!isTensor,false)); -// q2.push(this.__median(upper_data,!isTensor,false)); -// } - -// }) -// } - -// return [q1,q2, med] - -// } - -// /** -// * Fit robust scalar on data to obtain the first quantile and third quantile -// * @param {data} data [DataRame | Series | Array] -// * @returns Array -// */ -// fit(data){ - -// let tensor_data = null -// let isTensor = false; -// if(Array.isArray(data)){ -// tensor_data = tensor(data) -// } -// else if((data instanceof DataFrame)){ -// tensor_data = tensor(data.values) -// isTensor = true; -// } -// else if((data instanceof Series)){ -// tensor_data = tensor(data.values) -// } -// else{ -// throw new Error("data must either be an Array, DataFrame or Series") -// } - -// let [q1, q3, median] = this.quantile(data,isTensor) -// let q3_tensor = tensor(q3) -// let output_data = tensor_data.sub(median).div(q3_tensor.sub(q1)).arraySync() - -// return output_data; -// } -// } diff --git a/danfojs-browser/tests/config/config.js b/danfojs-browser/tests/config/config.js deleted file mode 100644 index 75d2b433..00000000 --- a/danfojs-browser/tests/config/config.js +++ /dev/null @@ -1,24 +0,0 @@ -/* eslint-disable no-undef */ - -describe("Config", function () { - const config = new dfd.Configs(); - - it("gets the default config val for table width", function () { - let table_width = config.get_width; - assert.equal(table_width, 17); - }); - it("gets the default config val for table truncation", function () { - let table_trunc = config.get_truncate; - assert.equal(table_trunc, 16); - }); - it("Sets the config val for table width", function () { - config.set_width(7); - let table_width = config.get_width; - assert.equal(table_width, 7); - }); - it("Sets the config val for table truncation", function () { - config.set_truncate(5); - let table_trunc = config.get_truncate; - assert.equal(table_trunc, 5); - }); -}); diff --git a/danfojs-browser/tests/core/date_range.js b/danfojs-browser/tests/core/date_range.js deleted file mode 100644 index 20bfcb74..00000000 --- a/danfojs-browser/tests/core/date_range.js +++ /dev/null @@ -1,59 +0,0 @@ - -describe("date_range", function(){ - - it("Obtain date between start with end not specified, but period and freq specified", function(){ - - - let d = new dfd.date_range({ "start":'1/1/2018', period:5, freq:'M' }); - let rslt = [ - '1/1/2018, 12:00:00 AM', - '2/1/2018, 12:00:00 AM', - '3/1/2018, 12:00:00 AM', - '4/1/2018, 12:00:00 AM', - '5/1/2018, 12:00:00 AM' - ]; - - assert.deepEqual(d, rslt); - - - }); - it("Obtain date between start with end not specified, but period and freq specified, plus offset", function(){ - - let d = new dfd.date_range({ start:'1/1/2018', period:5, freq:'3M' }); - let rslt = [ - '1/1/2018, 12:00:00 AM', - '4/1/2018, 12:00:00 AM', - '7/1/2018, 12:00:00 AM', - '10/1/2018, 12:00:00 AM', - '1/1/2019, 12:00:00 AM' - ]; - - assert.deepEqual(d, rslt); - - - }); - it("Obtain date range with start not specified but end and period is given", function(){ - - let d = new dfd.date_range({ end:'1/1/2018', period:8 }); - let rslt = [ - '12/25/2017, 12:00:00 AM', - '12/26/2017, 12:00:00 AM', - '12/27/2017, 12:00:00 AM', - '12/28/2017, 12:00:00 AM', - '12/29/2017, 12:00:00 AM', - '12/30/2017, 12:00:00 AM', - '12/31/2017, 12:00:00 AM', - '1/1/2018, 12:00:00 AM' - ]; - - assert.deepEqual(d, rslt); - - - }); - it("inputing wrong freq", function(){ - assert.throws(function () { new dfd.date_range({ end:'1/1/2018', period:8, freq:"d" }); }, Error, 'invalid freq d'); - }); - it("inputing wrong freq with offset", function(){ - assert.throws(function () { new dfd.date_range({ end:'1/1/2018', period:8, freq:"4d" }); }, Error, 'invalid freq d'); - }); -}); diff --git a/danfojs-browser/tests/core/frame.js b/danfojs-browser/tests/core/frame.js deleted file mode 100644 index 10eebc2d..00000000 --- a/danfojs-browser/tests/core/frame.js +++ /dev/null @@ -1,2379 +0,0 @@ -/* eslint-disable no-undef */ - -describe("DataFrame", function () { - - //TODO: Write browser side test for fs - // describe("to_csv", function () { - // afterEach(function(){ - // // Clean up generated file - // fs.unlinkSync(testCSVPath); - // }); - - // it("save dataframe to CSV file", async function () { - // let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ] ]; - // let cols = [ "A", "B", "C" ]; - // let df = new dfd.DataFrame(data, { columns: cols }); - // await df.to_csv(testCSVPath); - // assert.isTrue(fs.existsSync(testCSVPath)); - // }); - - // it("return dataframe csv string", async function () { - // let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ] ]; - // let cols = [ "A", "B", "C" ]; - // let df = new dfd.DataFrame(data, { columns: cols }); - // const csvContent = await df.to_csv(testCSVPath); - // assert.deepEqual(csvContent, "A,B,C\n1,2,3\n4,5,6\n"); - // }); - - // }); - - describe("drop", function () { - it("throw error for wrong row index", function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - assert.throws(function () { df.drop({ columns: [ 3 ], axis: 0, inplace: false }); }, Error, 'No index label found. Axis of 0 must be accompanied by an array of index labels'); - }); - it("throw error for wrong row index", function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - assert.throws(function () { df.drop({ columns: [ "D" ], axis: 1, inplace: false }); }, Error, 'column "D" does not exist'); - }); - - it("drop a column inplace", function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - df.drop({ columns: [ "C", "B" ], axis: 1, inplace: true }); - let column = [ "A" ]; - assert.deepEqual(df.columns, column); - }); - it("check if data is updated after column is dropped", function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - df.drop({ columns: [ "C" ], axis: 1, inplace: true }); - let new_data = [ [ 1, 2 ], [ 4, 5 ] ]; - assert.deepEqual(df.values, new_data); - assert.deepEqual(df.dtypes.length, 2); - - }); - - it("check if data is updated after row is dropped", function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - df.drop({ index: [ 0 ], axis: 0, inplace: true }); - let new_data = [ [ 4, 5, 6 ] ]; - assert.deepEqual(df.values, new_data); - }); - it("check if new dataframe is properly created after column is dropped (not-in-inplace)", function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - let df_drop = df.drop({ columns: [ "C" ], axis: 1, inplace: false }); - - let expected_data = [ [ 1, 2 ], [ 4, 5 ] ]; - let expected_cols = [ "A", "B" ]; - let expected_df = new dfd.DataFrame(expected_data, { columns: expected_cols }); - assert.deepEqual(df_drop.values, expected_df.values); - }); - it("check that the dtype is updated after column drop", function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - df.drop({ columns: [ "A" ], axis: 1, inplace: true }); - let dtype = [ 'int32', 'int32' ]; - assert.deepEqual(df.ctypes.values, dtype); - }); - it("drop row by single string labels", function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 34, 5 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols, index: [ "a", "b", "c" ] }); - df.drop({ index: [ "a" ], axis: 0, inplace: true }); - let new_data = [ [ 4, 5, 6 ], [ 20, 34, 5 ] ]; - assert.deepEqual(df.values, new_data); - }); - it("drop row by two or more string labels", function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 34, 5 ], [ 2, 3.4, 5 ], [ 2.0, 340, 5 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols, index: [ "a", "b", "c", "a", "b" ] }); - df.drop({ index: [ "a", "b" ], axis: 0, inplace: true }); - let new_data = [ [ 20, 34, 5 ] ]; - assert.deepEqual(df.values, new_data); - - }); - }); - - describe("head", function () { - it("Gets the first n rows in a DataFrame", function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - assert.deepEqual(df.head(2).values, [ [ 1, 2, 3 ], [ 4, 5, 6 ] ]); - }); - it("Return all rows in a DataFrame if row specified is greater than values", function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - assert.deepEqual(df.head(10).values, data); - }); - it("Return all rows in a DataFrame if row specified is less than 0", function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - assert.deepEqual(df.head(-1).values, data); - }); - - }); - - describe("tail", function () { - it("Prints the last n rows of a DataFrame", function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - assert.deepEqual(df.tail(2).values, [ [ 20, 30, 40 ], [ 39, 89, 78 ] ]); - }); - it("Return all rows in a DataFrame if row specified is greater than values", function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - assert.deepEqual(df.tail(10).values, data); - }); - it("Return all rows in a DataFrame if row specified is less than 0", function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - assert.deepEqual(df.tail(-1).values, data); - }); - it("Return last 3 row index in a DataFrame", function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - assert.deepEqual(df.tail(2).index, [ 2, 3 ]); - }); - it("Check print format on head call", function () { - let data = [ [ 1, 2, 34, 5, 0, 6, 4, 5, 6, 7 ], [ 20, 30, 40, 39, 89, 78, 45, 56, 56, 45 ] ]; - let df = new dfd.DataFrame(data); - assert.deepEqual(df.tail(2).values, [ [ 1, 2, 34, 5, 0, 6, 4, 5, 6, 7 ], [ 20, 30, 40, 39, 89, 78, 45, 56, 56, 45 ] ]); - }); - }); - - describe("sample", function () { - it("Samples n number of random elements from a DataFrame", async function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ], [ 100, 200, 300 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - let expected = [ [ 1, 2, 3 ], [ 20, 30, 40 ] ]; - let values = (await df.sample(2)).values; - assert.deepEqual(values, expected); - }); - it("Throw error if n is greater than lenght of Dataframe", async function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ], [ 100, 200, 300 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - try { - await df.sample(100); - } catch (e) { - expect(e).to.be.instanceOf(Error); - expect(e.message).to.eql('Sample size n cannot be bigger than size of dataset'); - } - }); - it("Throw error if n is less than -1", async function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ], [ 100, 200, 300 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - try { - await df.sample(-2); - } catch (e) { - expect(e).to.be.instanceOf(Error); - expect(e.message).to.eql('Sample size cannot be less than -1 or 0'); - } - }); - it("Throw error if n is 0", async function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ], [ 100, 200, 300 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - try { - await df.sample(0); - } catch (e) { - expect(e).to.be.instanceOf(Error); - expect(e.message).to.eql('Sample size cannot be less than -1 or 0'); - } - }); - it("Return all values if n is -1", async function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ], [ 100, 200, 300 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - assert.deepEqual((await df.sample(-1)).shape, [ 5, 3 ]); - }); - }); - - describe("loc", function () { - - it("throw error for wrong column name", function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - assert.throws(function () { df.loc({ "rows": [ 0, 1 ], "columns": [ "A", "D" ] }); }, Error, "Column D does not exist"); - }); - it("check data after selecting column", function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - - let col_df = df.loc({ "rows": [ 0, 1 ], "columns": [ "B", "C" ] }); - let col_data = [ [ 2, 3 ], [ 5, 6 ] ]; - - assert.deepEqual(col_df.values, col_data); - - }); - it("check data after selecting row index", function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - - let col_df = df.loc({ "rows": [ 1 ], "columns": [ "B", "C" ] }); - let col_data = [ [ 5, 6 ] ]; - - assert.deepEqual(col_df.values, col_data); - - }); - it("check data after row and column slice", function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - - let col_df = df.loc({ "rows": [ "0:2" ], "columns": [ "B:C" ] }); - let col_data = [ [ 2 ], [ 5 ] ]; - - assert.deepEqual(col_df.values, col_data); - - }); - it("check data after row slice", function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - - let col_df = df.loc({ "rows": [ "0:2" ], "columns": [ "B", "C" ] }); - let col_data = [ [ 2, 3 ], [ 5, 6 ] ]; - - assert.deepEqual(col_df.values, col_data); - - }); - it("check data after column slice", function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - - let col_df = df.loc({ "rows": [ 0, 1 ], "columns": [ "A:C" ] }); - let col_data = [ [ 1, 2 ], [ 4, 5 ] ]; - assert.deepEqual(col_df.values, col_data); - - }); - it("loc by single string index", function () { - let data = { - "Name": [ "Apples", "Mango", "Banana", "Pear" ], - "Count": [ 21, 5, 30, 10 ], - "Price": [ 200, 300, 40, 250 ] - }; - - let df = new dfd.DataFrame(data); - df.set_index({ key: [ "a", "b", "c", "a" ], inplace: true }); - let sub_df = df.loc({ rows: [ "a" ], columns: [ "Name", "Count" ] }); - let expected = [ [ "Apples", 21 ], [ "Pear", 10 ] ]; - assert.deepEqual(sub_df.values, expected); - - }); - it("loc by multiple string index", function () { - let data = { - "Name": [ "Apples", "Mango", "Banana", "Pear" ], - "Count": [ 21, 5, 30, 10 ], - "Price": [ 200, 300, 40, 250 ] - }; - - let df = new dfd.DataFrame(data); - df.set_index({ key: [ "a", "b", "c", "a" ], inplace: true }); - let sub_df = df.loc({ rows: [ "a", "b" ], columns: [ "Name", "Count" ] }); - let expected = [ [ "Apples", 21 ], [ "Mango", 5 ], [ "Pear", 10 ] ]; - assert.deepEqual(sub_df.values, expected); - - }); - it("loc by slice string index", function () { - let data = { - "Name": [ "Apples", "Mango", "Banana", "Pear" ], - "Count": [ 21, 5, 30, 10 ], - "Price": [ 200, 300, 40, 250 ] - }; - - let df = new dfd.DataFrame(data); - df.set_index({ key: [ "a", "b", "c", "d" ], inplace: true }); - let sub_df = df.loc({ rows: [ "a:c" ], columns: [ "Name", "Count" ] }); - let expected = [ [ "Apples", 21 ], [ "Mango", 5 ] ]; - assert.deepEqual(sub_df.values, expected); - - }); - - - }); - - describe("iloc", function () { - - it("throw error for wrong column index", function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - assert.throws(function () { df.iloc({ "rows": [ 0, 1 ], "columns": [ 0, 3 ] }); }, Error, "column index 3 is bigger than 2"); - }); - - it("throw error for wrong row index", function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - assert.throws(function () { df.iloc({ "rows": 0, "columns": [ 0, 3 ] }); }, Error, "rows parameter must be a Array"); - }); - - it("throw error for wrong column index", function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - assert.throws(function () { df.iloc({ "rows": [ 0, 1 ], "columns": 3 }); }, Error, "columns must be a list"); - }); - - it("throw error for wrong row index", function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - assert.throws(function () { df.iloc({ "rows": [ 0, 8 ], "columns": [ 1, 2 ] }); }, Error, "Specified row index 8 is bigger than maximum row index of 1"); - }); - - it("check data after selecting column", function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - - let col_df = df.iloc({ "rows": [ 0, 1 ], "columns": [ 1, 2 ] }); - let col_data = [ [ 2, 3 ], [ 5, 6 ] ]; - - assert.deepEqual(col_df.values, col_data); - - }); - it("check data after selecting row index", function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - - let col_df = df.iloc({ "rows": [ 1 ], "columns": [ 1, 2 ] }); - let col_data = [ [ 5, 6 ] ]; - - assert.deepEqual(col_df.values, col_data); - - }); - it("check data after row and column slice", function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - - let col_df = df.iloc({ "rows": [ "0:2" ], "columns": [ "1:2" ] }); - let col_data = [ [ 2 ], [ 5 ] ]; - - assert.deepEqual(col_df.values, col_data); - - }); - it("check data after row slice", function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - - let col_df = df.iloc({ "rows": [ "0:2" ], "columns": [ 1, 2 ] }); - let col_data = [ [ 2, 3 ], [ 5, 6 ] ]; - - assert.deepEqual(col_df.values, col_data); - - }); - it("check data after column slice", function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - - let col_df = df.iloc({ "rows": [ 0, 1, 2 ], "columns": [ "1:2" ] }); - let col_data = [ [ 2 ], [ 5 ], [ 30 ] ]; - assert.deepEqual(col_df.values, col_data); - - }); - it("Return all columns if columns parameter is not specified", function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - - let col_df = df.iloc({ "rows": [ 0, 1, 2 ] }); - let col_data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ] ]; - assert.deepEqual(col_df.values, col_data); - - }); - it("Return all rows if rows parameter is not specified", function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - - let col_df = df.iloc({ "columns": [ "1:2" ] }); - let col_data = [ [ 2 ], [ 5 ], [ 30 ], [ 89 ] ]; - assert.deepEqual(col_df.values, col_data); - - }); - - it("column slice starting with 0 and returning a single result works", function () { - let data = { - "Name": [ "Apples", "Mango", "Banana", "Pear" ], - "Count": [ 21, 5, 30, 10 ], - "Price": [ 200, 300, 40, 250 ] - }; - let df = new dfd.DataFrame(data); - let sub_df = df.iloc({ rows: [ "2:3" ], columns: [ "0:1" ] }); - const result = [ [ "Banana" ] ]; - assert.deepEqual(sub_df.values, result); - - }); - it("column slice with format '0:' works", function () { - let data = { - "Name": [ "Apples", "Mango", "Banana", "Pear" ], - "Count": [ 21, 5, 30, 10 ], - "Price": [ 200, 300, 40, 250 ] - }; - let df = new dfd.DataFrame(data); - let sub_df = df.iloc({ rows: [ "2:3" ], columns: [ "0:" ] }); - const result = [ [ "Banana", 30, 40 ] ]; - assert.deepEqual(sub_df.values, result); - - }); - it("column slice with format ':2' works", function () { - let data = { - "Name": [ "Apples", "Mango", "Banana", "Pear" ], - "Count": [ 21, 5, 30, 10 ], - "Price": [ 200, 300, 40, 250 ] - }; - let df = new dfd.DataFrame(data); - let sub_df = df.iloc({ rows: [ "2:3" ], columns: [ ":2" ] }); - const result = [ [ "Banana", 30 ] ]; - assert.deepEqual(sub_df.values, result); - - }); - it("row slice with format ':2' works", function () { - let data = { - "Name": [ "Apples", "Mango", "Banana", "Pear" ], - "Count": [ 21, 5, 30, 10 ], - "Price": [ 200, 300, 40, 250 ] - }; - let df = new dfd.DataFrame(data); - let sub_df = df.iloc({ rows: [ ":2" ], columns: [ ":1" ] }); - const result = [ [ 'Apples' ], [ 'Mango' ] ]; - assert.deepEqual(sub_df.values, result); - - }); - it("row slice with format '1:' works", function () { - let data = { - "Name": [ "Apples", "Mango", "Banana", "Pear" ], - "Count": [ 21, 5, 30, 10 ], - "Price": [ 200, 300, 40, 250 ] - }; - let df = new dfd.DataFrame(data); - let sub_df = df.iloc({ rows: [ ":2" ], columns: [ ":2" ] }); - const result = [ [ 'Apples', 21 ], [ 'Mango', 5 ] ]; - assert.deepEqual(sub_df.values, result); - - }); - - - }); - - - describe("add", function () { - it("Return Addition of DataFrame with a single Number", function () { - let data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; - let df = new dfd.DataFrame(data); - assert.deepEqual(df.add(2).values, [ [ 2, 4, 6 ], [ 362, 182, 362 ] ]); - }); - it("Return addition of a DataFrame with a Series along default axis 1", function () { - let data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; - let sf = new dfd.Series([ 1, 2, 1 ]); - let df = new dfd.DataFrame(data); - assert.deepEqual(df.add(sf).values, [ [ 1, 4, 5 ], [ 361, 182, 361 ] ]); - }); - it("Return addition of a DataFrame with a Series along axis 0", function () { - let data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; - let sf = new dfd.Series([ 1, 2 ]); - let df = new dfd.DataFrame(data); - assert.deepEqual(df.add(sf, 0).values, [ [ 1, 3, 5 ], [ 362, 182, 362 ] ]); - }); - it("Return addition of a DataFrame with a DataFrame along default axis 1", function () { - let df1 = new dfd.DataFrame([ [ 0, 2, 4 ], [ 360, 180, 360 ] ]); - let df2 = new dfd.DataFrame([ [ 1, 2, 4 ], [ 10, 5, 0 ] ]); - assert.deepEqual(df1.add(df2).values, [ [ 1, 4, 8 ], [ 370, 185, 360 ] ]); - }); - it("Return addition of a DataFrame with a DataFrame along axis 0", function () { - let df1 = new dfd.DataFrame([ [ 0, 2, 4 ], [ 360, 180, 360 ] ]); - let df2 = new dfd.DataFrame([ [ 1, 2, 4 ], [ 10, 5, 0 ] ]); - assert.deepEqual(df1.add(df2).values, [ [ 1, 4, 8 ], [ 370, 185, 360 ] ]); - }); - - }); - - describe("sub", function () { - it("Return subtraction of DataFrame with a single Number", function () { - let data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; - let df = new dfd.DataFrame(data); - assert.deepEqual(df.sub(2).values, [ [ -2, 0, 2 ], [ 358, 178, 358 ] ]); - }); - it("Return subtraction of a DataFrame with a Series along default axis 1", function () { - let data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; - let sf = new dfd.Series([ 1, 2, 1 ]); - let df = new dfd.DataFrame(data); - assert.deepEqual(df.sub(sf).values, [ [ -1, 0, 3 ], [ 359, 178, 359 ] ]); - }); - it("Return subtraction of a DataFrame with a Series along axis 0", function () { - let data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; - let sf = new dfd.Series([ 1, 2 ]); - let df = new dfd.DataFrame(data); - assert.deepEqual(df.sub(sf, 0).values, [ [ -1, 1, 3 ], [ 358, 178, 358 ] ]); - }); - it("Return subtraction of a DataFrame with a DataFrame along default axis 1", function () { - let df1 = new dfd.DataFrame([ [ 0, 2, 4 ], [ 360, 180, 360 ] ]); - let df2 = new dfd.DataFrame([ [ 1, 2, 4 ], [ 10, 5, 0 ] ]); - assert.deepEqual(df1.sub(df2).values, [ [ -1, 0, 0 ], [ 350, 175, 360 ] ]); - }); - it("Return subtraction of a DataFrame with a DataFrame along axis 0", function () { - let df1 = new dfd.DataFrame([ [ 0, 2, 4 ], [ 360, 180, 360 ] ]); - let df2 = new dfd.DataFrame([ [ 1, 2, 4 ], [ 10, 5, 0 ] ]); - assert.deepEqual(df1.sub(df2).values, [ [ -1, 0, 0 ], [ 350, 175, 360 ] ]); - }); - - }); - - describe("mul", function () { - it("Return multiplication of DataFrame with a single Number", function () { - let data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; - let df = new dfd.DataFrame(data); - assert.deepEqual(df.mul(2).values, [ [ 0, 4, 8 ], [ 720, 360, 720 ] ]); - }); - it("Return multiplication of a DataFrame with a Series along default axis 1", function () { - let data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; - let sf = new dfd.Series([ 1, 2, 1 ]); - let df = new dfd.DataFrame(data); - assert.deepEqual(df.mul(sf).values, [ [ 0, 4, 4 ], [ 360, 360, 360 ] ]); - }); - it("Return multiplication of a DataFrame with a Series along axis 0", function () { - let data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; - let sf = new dfd.Series([ 1, 2 ]); - let df = new dfd.DataFrame(data); - assert.deepEqual(df.mul(sf, 0).values, [ [ 0, 2, 4 ], [ 720, 360, 720 ] ]); - }); - it("Return multiplication of a DataFrame with a DataFrame along default axis 1", function () { - let df1 = new dfd.DataFrame([ [ 0, 2, 4 ], [ 360, 180, 360 ] ]); - let df2 = new dfd.DataFrame([ [ 1, 2, 4 ], [ 10, 5, 0 ] ]); - assert.deepEqual(df1.mul(df2).values, [ [ 0, 4, 16 ], [ 3600, 900, 0 ] ]); - }); - it("Return multiplication of a DataFrame with a DataFrame along axis 0", function () { - let df1 = new dfd.DataFrame([ [ 0, 2, 4 ], [ 360, 180, 360 ] ]); - let df2 = new dfd.DataFrame([ [ 1, 2, 4 ], [ 10, 5, 0 ] ]); - assert.deepEqual(df1.mul(df2, 0).values, [ [ 0, 4, 16 ], [ 3600, 900, 0 ] ]); - }); - - }); - - describe("div", function () { - it("Return division of DataFrame with a single Number", function () { - let data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; - let df = new dfd.DataFrame(data); - assert.deepEqual(df.div(2).values, [ [ 0, 1, 2 ], [ 180, 90, 180 ] ]); - }); - it("Return division of a DataFrame with a Series along default axis 1", function () { - let data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; - let sf = new dfd.Series([ 1, 2, 1 ]); - let df = new dfd.DataFrame(data); - assert.deepEqual(df.div(sf).values, [ [ 0, 1, 4 ], [ 360, 90, 360 ] ]); - }); - it("Return division of a DataFrame with a Series along axis 0", function () { - let data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; - let sf = new dfd.Series([ 1, 2 ]); - let df = new dfd.DataFrame(data); - assert.deepEqual(df.div(sf, 0).values, [ [ 0, 2, 4 ], [ 180, 90, 180 ] ]); - }); - it("Return division of a DataFrame with a DataFrame along default axis 1", function () { - let df1 = new dfd.DataFrame([ [ 0, 2, 4 ], [ 360, 180, 360 ] ]); - let df2 = new dfd.DataFrame([ [ 1, 2, 4 ], [ 10, 5, 0 ] ]); - assert.deepEqual(df1.div(df2).values, [ [ 0, 1, 1 ], [ 36, 36, NaN ] ]); - }); - it("Return division of a DataFrame with a DataFrame along axis 0", function () { - let df1 = new dfd.DataFrame([ [ 0, 2, 4 ], [ 360, 180, 360 ] ]); - assert.deepEqual(df1.div(df1).values, [ [ NaN, 1, 1 ], [ 1, 1, 1 ] ]); - }); - it("Return division of a DataFrame with a DataFrame along axis 0", function () { - let df1 = new dfd.DataFrame([ [ 0, 2, 4 ], [ 360, 180, 360 ] ]); - let df2 = new dfd.DataFrame([ [ 1, 2, 4 ], [ 10, 5, 0 ] ]); - assert.deepEqual(df1.div(df2).values, [ [ 0, 1, 1 ], [ 36, 36, NaN ] ]); - }); - - }); - - describe("pow", function () { - it("Return exponential of DataFrame with a single Number", function () { - let data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; - let df = new dfd.DataFrame(data); - assert.deepEqual(df.pow(2).values, [ [ 0, 4, 16 ], [ 129600, 32400, 129600 ] ]); - }); - it("Return exponential of a DataFrame with a Series along default axis 1", function () { - let data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; - let sf = new dfd.Series([ 1, 2, 1 ]); - let df = new dfd.DataFrame(data); - assert.deepEqual(df.pow(sf).values, [ [ 0, 4, 4 ], [ 360, 32400, 360 ] ]); - }); - it("Return exponential of a DataFrame with a Series along axis 0", function () { - let data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; - let sf = new dfd.Series([ 1, 2 ]); - let df = new dfd.DataFrame(data); - assert.deepEqual(df.pow(sf, 0).values, [ [ 0, 2, 4 ], [ 129600, 32400, 129600 ] ]); - }); - it("Return exponential of a DataFrame with another DataFrame along default axis 1", function () { - let df1 = new dfd.DataFrame([ [ 0, 2, 4 ], [ 3, 10, 4 ] ]); - let df2 = new dfd.DataFrame([ [ 1, 2, 4 ], [ 10, 5, 0 ] ]); - assert.deepEqual(df1.pow(df2).values, [ [ 0, 4, 256 ], [ 59049, 100000, 1 ] ]); - }); - it("Return exponential of a DataFrame with another DataFrame along axis 0", function () { - let df1 = new dfd.DataFrame([ [ 0, 2, 4 ], [ 3, 10, 4 ] ]); - let df2 = new dfd.DataFrame([ [ 1, 2, 4 ], [ 10, 5, 0 ] ]); - assert.deepEqual(df1.pow(df2, 0).values, [ [ 0, 4, 256 ], [ 59049, 100000, 1 ] ]); - }); - - }); - - describe("mod", function () { - it("Return modulus of DataFrame with a single Number", function () { - let data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; - let df = new dfd.DataFrame(data); - assert.deepEqual(df.mod(2).values, [ [ 0, 0, 0 ], [ 0, 0, 0 ] ]); - }); - it("Return modulus of a DataFrame with a Series along default axis 1", function () { - let data = [ [ 0, 2, 4 ], [ 31, 15, 360 ] ]; - let sf = new dfd.Series([ 1, 2, 1 ]); - let df = new dfd.DataFrame(data); - assert.deepEqual(df.mod(sf).values, [ [ 0, 0, 0 ], [ 0, 1, 0 ] ]); - }); - it("Return modulus of a DataFrame with a Series along axis 0", function () { - let data = [ [ 0, 2, 4 ], [ 31, 15, 360 ] ]; - let sf = new dfd.Series([ 1, 2 ]); - let df = new dfd.DataFrame(data); - assert.deepEqual(df.mod(sf, 0).values, [ [ 0, 0, 0 ], [ 1, 1, 0 ] ]); - }); - it("Return modulus of a DataFrame with a DataFrame along default axis 1", function () { - let df1 = new dfd.DataFrame([ [ 0, 2, 4 ], [ 31, 15, 360 ] ]); - let df2 = new dfd.DataFrame([ [ 1, 2, 4 ], [ 10, 5, 0 ] ]); - assert.deepEqual(df1.mod(df2).values, [ [ 0, 0, 0 ], [ 1, 0, NaN ] ]); - }); - it("Return modulus of a DataFrame with a DataFrame along axis 0", function () { - let df1 = new dfd.DataFrame([ [ 0, 2, 4 ], [ 360, 180, 360 ] ]); - let df2 = new dfd.DataFrame([ [ 1, 2, 4 ], [ 10, 5, 0 ] ]); - assert.deepEqual(df1.mod(df2).values, [ [ 0, 0, 0 ], [ 0, 0, NaN ] ]); - }); - - }); - - describe("mean", function () { - it("Returns the mean of a DataFrame (Default axis is [1:column])", function () { - let data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; - let df = new dfd.DataFrame(data, { columns: [ "col1", "col2", "col3" ] }); - assert.deepEqual(df.mean().values, [ 180, 91, 182 ]); - }); - it("Return mean of a DataFrame along axis 0 (row)", function () { - let data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; - let df = new dfd.DataFrame(data); - assert.deepEqual(df.mean(0).values, [ 2, 300 ]); - }); - it("Removes NaN before calculating mean of a DataFrame", function () { - let data = [ [ 11, 20, 3 ], [ NaN, 15, 6 ], [ 2, 30, 40 ], [ 2, 89, 78 ] ]; - let df = new dfd.DataFrame(data); - assert.deepEqual(df.mean().values, [ 5, 38.5, 31.75 ]); - }); - }); - - describe("median", function () { - it("Returns the median of a DataFrame (Default axis is [1:column])", function () { - let data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; - let df = new dfd.DataFrame(data); - assert.deepEqual(df.median().values, [ 180, 91, 182 ]); - }); - it("Return median of a DataFrame along axis 0 (row)", function () { - let data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; - let df = new dfd.DataFrame(data); - assert.deepEqual(df.median({ "axis": 0 }).values, [ 2, 360 ]); - }); - - }); - - // describe("mode", function () { - // it("Returns the mode of a DataFrame (Default axis is [1:column])", function () { - // let data = [[0, 2, 4], [360, 180, 360]] - // let df = new dfd.DataFrame(data) - // assert.deepEqual(df.mode().values, [362, 182, 362]) - // }) - // it("Returns mode of a DataFrame along axis 0 (row)", function () { - // let data = [[0, 2, 4], [360, 180, 360]] - // let df = new dfd.DataFrame(data) - // assert.deepEqual(df.mode({ "axis": 0 }).values, [1, 182]) - // }) - // it("Returns mode of a DataFrame along axis 1", function () { - // let data = [{ "col1": [0, 2, 4] }, { "col2": [360, 180, 360] }] - // let df = new dfd.DataFrame(data) - // assert.deepEqual(df.mode().values, [1, 362, 40]) - // }) - - // }) - - describe("min", function () { - it("Returns the minimum values in a DataFrame (Default axis is [1:column])", function () { - let data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; - let df = new dfd.DataFrame(data); - assert.deepEqual(df.min().values, [ 0, 2, 4 ]); - }); - it("Returns the minimum values of a DataFrame along axis 0 (row)", function () { - let data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; - let df = new dfd.DataFrame(data); - assert.deepEqual(df.min({ "axis": 0 }).values, [ 0, 180 ]); - }); - - }); - - describe("max", function () { - it("Returns the maximum values in a DataFrame (Default axis is [1:column])", function () { - let data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; - let df = new dfd.DataFrame(data); - assert.deepEqual(df.max().values, [ 360, 180, 360 ]); - }); - it("Returns the maximum values of a DataFrame along axis 0 (row)", function () { - let data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; - let df = new dfd.DataFrame(data); - assert.deepEqual(df.max({ "axis": 0 }).values, [ 4, 360 ]); - }); - - }); - - describe("std", function () { - it("Returns the standard deviations of values in a DataFrame (Default axis is [1:column])", function () { - let data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; - let df = new dfd.DataFrame(data); - assert.deepEqual(df.std().values, [ 254.55844122715712, 125.86500705120545, 251.7300141024109 ]); - }); - it("Return the standard deviations of values of a DataFrame along axis 0 (row)", function () { - let data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; - let df = new dfd.DataFrame(data); - assert.deepEqual(df.std(0).values, [ 2, 103.92304845413264 ]); - }); - - - }); - - describe("var", function () { - it("Returns the variance of values in a DataFrame (Default axis is [1:column])", function () { - let data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; - let df = new dfd.DataFrame(data); - assert.deepEqual(df.var().values, [ 64800, 15842, 63368 ]); - }); - it("Return the variance of values of a DataFrame along axis 0 (row)", function () { - let data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; - let df = new dfd.DataFrame(data); - assert.deepEqual(df.var(0).values, [ 4, 10800 ]); - }); - - - }); - - describe("describe", function () { - it("Returns descriptive statistics of columns in a DataFrame created from an array", function () { - let data = [ [ 0, 2, 4, "a" ], - [ 360, 180, 360, "b" ], - [ 2, 4, 6, "c" ] ]; - - let df = new dfd.DataFrame(data); - let res = [ [ 3, 3, 3 ], [ 120.666664, 62, 123.333336 ], - [ 207.271159, 102.19589, 204.961785 ], - [ 0, 2, 4 ], [ 2, 4, 6 ], - [ 360, 180, 360 ], - [ 42961.333333, 10444, 42009.333333 ] ]; - - assert.deepEqual(df.describe().values, res); - }); - it("Returns descriptive statistics of columns in a DataFrame created from an Object", function () { - let data = { - "col1": [ 0, 2, 4 ], - "col2": [ 360, 180, 360 ], - "col3": [ 2, 4, 6 ], - "col4": [ "boy", "girl", "man" ], - "col5": [ "apple", "car", "bee" ] - }; - let df = new dfd.DataFrame(data); - - let res = [ [ 3, 3, 3 ], [ 2, 300, 4 ], - [ 2, 103.923048, 2 ], - [ 0, 180, 2 ], [ 2, 360, 4 ], - [ 4, 360, 6 ], - [ 4, 10800, 4 ] ]; - - assert.deepEqual(df.describe().values, res); - }); - - }); - - describe("count", function () { - it("Returns the count of non-nan values in a DataFrame (Default axis is [1:column])", function () { - let data = [ [ 0, 2, 4 ], [ 360, 180.1, 360.11 ], [ NaN, 2, 4 ], [ 360, undefined, 360 ] ]; - let df = new dfd.DataFrame(data); - assert.deepEqual(df.count().values, [ 3, 3, 4 ]); - }); - it("Return the count of non NaN values of a DataFrame along axis 0", function () { - let data = [ [ 0, 2, 4, NaN ], [ 360, undefined, 360, 70 ] ]; - let df = new dfd.DataFrame(data); - assert.deepEqual(df.count(0).values, [ 3, 3 ]); - }); - - }); - - describe("round", function () { - it("Rounds values in a DataFrame to 3dp", function () { - let data = [ [ 10.1, 2.092, 4.23 ], [ 360.232244, 180.0190290, 36.902612 ] ]; - let df = new dfd.DataFrame(data); - let expected = [ [ 10.1, 2.092, 4.23 ], [ 360.232, 180.0190, 36.903 ] ]; - assert.deepEqual(df.round(3).values, expected); - }); - it("Rounds values in a DataFrame to 1dp", function () { - let data = [ [ 10.1, 2.092, 4.23 ], [ 360.232244, 180.0190290, 36.902612 ] ]; - let df = new dfd.DataFrame(data); - let expected = [ [ 10.1, 2.1, 4.2 ], [ 360.2, 180.0, 36.9 ] ]; - assert.deepEqual(df.round(1).values, expected); - }); - - }); - - describe("sort_values", function () { - it("Sort values in DataFrame by specified column in ascending order (Default)", function () { - let data = [ [ 0, 2, 4, "a" ], - [ 360, 180, 360, "b" ], - [ 2, 4, 6, "c" ] ]; - - let df = new dfd.DataFrame(data, { "columns": [ "col1", "col2", "col3", "col4" ] }); - df.sort_values({ "by": "col1", inplace: true, ascending: true }); - let expected = [ [ 0, 2, 4, "a" ], [ 2, 4, 6, "c" ], [ 360, 180, 360, "b" ] ]; - assert.deepEqual(df.values, expected); - assert.deepEqual(df.index, [ 0, 2, 1 ]); - - }); - - it("Sort values in DataFrame by specified column in ascending order (Default)", function () { - let data = [ [ 0, 2, 4, "a" ], - [ 360, 180, 1, "b" ], - [ 2, 4, 6, "c" ] ]; - - let df = new dfd.DataFrame(data, { "columns": [ "col1", "col2", "col3", "col4" ] }); - let df_sort = df.sort_values({ "by": "col3" }); - let expected = [ [ 360, 180, 1, "b" ], [ 0, 2, 4, "a" ], [ 2, 4, 6, "c" ] ]; - assert.deepEqual(df_sort.values, expected); - assert.deepEqual(df_sort.index, [ 1, 0, 2 ]); - - }); - it("Sort values in DataFrame by specified column in descending order", function () { - let data = [ [ 0, 2, 4, "a" ], - [ 360, 180, 360, "b" ], - [ 2, 4, 6, "c" ] ]; - - let df = new dfd.DataFrame(data, { "columns": [ "col1", "col2", "col3", "col4" ] }); - let expected = [ [ 360, 180, 360, "b" ], [ 2, 4, 6, "c" ], [ 0, 2, 4, "a" ] ]; - assert.deepEqual(df.sort_values({ "by": "col1", "ascending": false }).values, expected); - }); - - it("Sort values in DataFrame by specified column in descending order (second col)", function () { - let data = [ [ 0, 2, 4, "a" ], - [ 360, 180, 1, "b" ], - [ 2, 4, 6, "c" ] ]; - - let df = new dfd.DataFrame(data, { "columns": [ "col1", "col2", "col3", "col4" ] }); - let expected = [ [ 2, 4, 6, "c" ], [ 0, 2, 4, "a" ], [ 360, 180, 1, "b" ] ]; - assert.deepEqual(df.sort_values({ "by": "col3", "ascending": false }).values, expected); - }); - it("Sort values in DataFrame by specified column containing alpha(numeric) values", function () { - let data = [ [ 0, 2, 4, "a" ], - [ 360, 180, 1, "b" ], - [ 2, 4, 6, "c" ] ]; - - let df = new dfd.DataFrame(data, { "columns": [ "col1", "col2", "col3", "col4" ] }); - let expected = [ [ 2, 4, 6, 'c' ], [ 360, 180, 1, 'b' ], [ 0, 2, 4, 'a' ] ]; - assert.deepEqual(df.sort_values({ "by": "col4", "ascending": false }).values, expected); - }); - it("Sort duplicate DataGrame with duplicate columns", function () { - - let data = { - "A": [ 1, 2, 3, 4, 5, 3, 5, 6, 4, 5, 3, 4 ], - "B": [ 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4 ] - }; - - let df = new dfd.DataFrame(data); - let expected = [ [ 1, 2 ], - [ 2, 3 ], - [ 3, 4 ], - [ 3, 7 ], - [ 3, 3 ], - [ 4, 5 ], - [ 4, 1 ], - [ 4, 4 ], - [ 5, 6 ], - [ 5, 8 ], - [ 5, 2 ], - [ 6, 9 ] ]; - assert.deepEqual(df.sort_values({ "by": "A", "ascending": true }).values, expected); - }); - - - }); - - describe("copy", function () { - it("Makes a deep copy of DataFrame", function () { - let data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; - let df = new dfd.DataFrame(data); - let df_copy = df.copy(); - assert.deepEqual(df_copy.values, [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]); - }); - it("Confirms child copy modification does not affect parent DataFrame", function () { - let data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; - let df = new dfd.DataFrame(data); - let df_copy = df.copy(); - df_copy.addColumn({ column: "col_new", value: [ "boy", "girl" ] }); - assert.notDeepEqual(df_copy.values, df.values); - }); - - }); - - - describe("set_index", function () { - it("Sets the index of a DataFrame created from an Object", function () { - let data = [ { alpha: "A", count: 1 }, { alpha: "B", count: 2 }, { alpha: "C", count: 3 } ]; - let df = new dfd.DataFrame(data); - let df_new = df.set_index({ "key": [ "one", "two", "three" ] }); - assert.deepEqual(df_new.index, [ "one", "two", "three" ]); - }); - it("Sets the index of a DataFrame from column name", function () { - let data = [ { alpha: "A", count: 1 }, { alpha: "B", count: 2 }, { alpha: "C", count: 3 } ]; - let df = new dfd.DataFrame(data); - let df_new = df.set_index({ "key": "alpha" }); - assert.deepEqual(df_new.index, [ "A", "B", "C" ]); - }); - it("Sets the index of a DataFrame from column name", function () { - let data = [ { alpha: "A", count: 1 }, { alpha: "B", count: 2 }, { alpha: "C", count: 3 } ]; - let df = new dfd.DataFrame(data); - let df_new = df.set_index({ key: "alpha", drop: true }); - assert.deepEqual(df_new.index, [ "A", "B", "C" ]); - }); - it("Sets the index of a DataFrame created from an Array", function () { - let data = [ [ 0, 2, 4 ], [ 360, 180, 360 ], [ 0, 2, 4 ], [ 360, 180, 360 ], [ 0, 2, 4 ] ]; - let df = new dfd.DataFrame(data); - df.set_index({ "key": [ "one", "two", "three", "four", "five" ], "inplace": true }); - assert.deepEqual(df.index, [ "one", "two", "three", "four", "five" ]); - }); - - }); - - describe("reset_index", function () { - it("Resets the index of a DataFrame created from an Object", function () { - let data = [ { alpha: "A", count: 1 }, { alpha: "B", count: 2 }, { alpha: "C", count: 3 } ]; - let df = new dfd.DataFrame(data); - let df_new = df.set_index({ "key": [ "one", "two", "three" ] }); - let df_reset = df_new.reset_index(); - assert.deepEqual(df_reset.index, [ 0, 1, 2 ]); - }); - it("Resets the index of a DataFrame created from an Array", function () { - let data = [ [ 0, 2, 4 ], [ 360, 180, 360 ], [ 0, 2, 4 ], [ 360, 180, 360 ], [ 0, 2, 4 ] ]; - let df = new dfd.DataFrame(data); - df.set_index({ "key": [ "one", "two", "three", "four", "five" ], "inplace": true }); - df.reset_index(true); - assert.deepEqual(df.index, [ 0, 1, 2, 3, 4 ]); - }); - - }); - - - // describe("apply", function () { - // it("Apply a function to all values of a DataFrame", function () { - // let data = [[0, 2, 4], - // [360, 180, 360], - // [0, 2, 4]] - // let df = new dfd.DataFrame(data) - - // let apply_func = (x) => { - // return x + 1000 - // } - // let expected = [[1000, 1002, 1004], [1360, 1180, 1360], [1000, 1002, 1004]] - // assert.deepEqual(df.apply(apply_func), expected) - // }); - - // it("Throws error on applying function to string columns", function () { - // let data = [[0, 2, "ab"], - // [360, 180, "mk"], - // [0, 2, "po"]] - // let df = new dfd.DataFrame(data) - - // let apply_func = (x) => { - // return x + 1000 - // } - // let expected = "Dtypes Error: columns dtypes must be numeric, got strings" - // assert.deepEqual(df.apply(apply_func), expected) - // }); - // }); - - - describe("query", function () { - - it("Get the DataFrame containing rows with the filtered column", function () { - - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - let query_df = df.query({ "column": "B", "is": ">=", "to": 5 }); - let query_data = [ [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; - assert.deepEqual(query_df.values, query_data); - }); - it("Get the Dataframe containing rows with the filtered column in String values", function () { - let data = { "Abs": [ 20, 30, 47 ], "Count": [ 34, 4, 5 ], "country code": [ "NG", "FR", "GH" ] }; - let cols = [ "Abs", "Count", "country code" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - let query_df = df.query({ column: "country code", is: "==", to: "NG" }); - let query_data = [ [ 20, 34, "NG" ] ]; - assert.deepEqual(query_df.values, query_data); - }); - it("Print Error for value key not specified", function () { - - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - - assert.throws(function () { df.query({ "column": "B", "is": ">=" }); }, Error, "specify a value in param [to]"); - }); - it("Print Error for operator key not specified", function () { - - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - - assert.throws(function () { df.query({ "column": "B", "to": 5 }); }, Error, "specify an operator in param [is]"); - }); - - it("Print Error for column key not specified", function () { - - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - - assert.throws(function () { df.query({ "is": ">=", "to": 5 }); }, Error, "specify the column"); - }); - it("Print Error for column name not in dataframe", function () { - - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - - assert.throws(function () { df.query({ "column": "D", "is": ">=", "to": 5 }); }, Error, "column D does not exist"); - }); - it("Confirms that query index are updated", function () { - - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - let df_query = df.query({ "column": "B", "is": ">=", "to": 5 }); - assert.deepEqual(df_query.index, [ 1, 2, 3 ]); - }); - it("Confirms that columns data are updated inplace", function () { - - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - df.query({ "column": "B", "is": ">=", "to": 5, inplace: true }); - assert.deepEqual(df.col_data, [ [ 4, 20, 39 ], [ 5, 30, 89 ], [ 6, 40, 78 ] ]); - }); - it("Confirms that query happens inplace", function () { - - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - df.query({ "column": "B", "is": ">=", "to": 5, inplace: true }); - let query_data = [ [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; - assert.deepEqual(df.values, query_data); - }); - it("Confirms that query happens inplace and index are updated", function () { - - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - df.query({ "column": "B", "is": ">=", "to": 5, inplace: true }); - assert.deepEqual(df.index, [ 1, 2, 3 ]); - }); - it("Wrong query value", function () { - let data = { - "A": [ 30, 1, 2, 3 ], - "B": [ 34, 4, 5, 6 ], - "C": [ 20, 20, 30, 40 ] - }; - - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - - assert.throws(function () { df.query({ "column": "B", "is": ">", "to": 40 }); }, Error, "query returned empty data; is either 40 does not exist in column B"); - }); - - }); - - describe("addColumn", function () { - it("Print the data, after changing a column data", function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - - let new_col = [ 1, 2, 3, 4 ]; - - df.addColumn({ "column": "C", "value": new_col }); - - let new_data = [ [ 1, 2, 1 ], [ 4, 5, 2 ], [ 20, 30, 3 ], [ 39, 89, 4 ] ]; - - assert.deepEqual(df.values, new_data); - }); - it("Print the Dataframe column names, after a new column is added ", function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - - let new_col = [ 1, 2, 3, 4 ]; - - df.addColumn({ "column": "D", "value": new_col }); - - let new_column = [ "A", "B", "C", "D" ]; - - assert.deepEqual(df.column_names, new_column); - }); - it("Print Error for column name not in keyword passed", function () { - - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - let new_col = [ 1, 2, 3, 4 ]; - - assert.throws(function () { df.addColumn({ "value": new_col }); }, Error, "column name not specified"); - }); - it("Check if new column value length is the same with Dataframe length", function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - let new_col = [ 1, 2, 3 ]; - assert.throws(function () { df.addColumn({ "column": "D", "value": new_col }); }, Error, "Array length 3 not equal to 4"); - }); - - it("Check that dtype is updated after a new column is added ", function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - let new_col = [ "n", "b", "c", "f" ]; - - df.addColumn({ "column": "D", "value": new_col }); - let dtype = [ "int32", "int32", "int32", "string" ]; - - assert.deepEqual(df.dtypes, dtype); - }); - - it("add series as value to a new column ", function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - let sf = new dfd.Series([ "n", "b", "c", "f" ]); - - df.addColumn({ "column": "D", "value": sf }); - let dtype = [ "int32", "int32", "int32", "string" ]; - - assert.deepEqual(df.dtypes, dtype); - }); - - }); - - // describe("groupby", function () { - // it("Check group by One column data", function () { - - // let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]] - // let cols = ["A", "B", "C"] - // let df = new dfd.DataFrame(data, { columns: cols }) - // let group_df = df.groupby(["A"]); - - // let group_dict = { - // '1': [[1, 2, 3]], - // '4': [[4, 5, 6]], - // '20': [[20, 30, 40]], - // '39': [[39, 89, 78]] - // } - - // assert.deepEqual(group_df.col_dict, group_dict); - // }); - // it("Obtain the DataFrame of one of the group", function () { - - // let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]] - // let cols = ["A", "B", "C"] - // let df = new dfd.DataFrame(data, { columns: cols }) - // let group_df = df.groupby(["A"]); - // let new_data = [[1, 2, 3]] - - // assert.deepEqual(group_df.get_groups([1]).values, new_data); - // }); - // it("Check group by Two column data", function () { - - // let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]] - // let cols = ["A", "B", "C"] - // let df = new dfd.DataFrame(data, { columns: cols }) - // let group_df = df.groupby(["A", "B"]); - // let new_data = { - // '1': { '2': [[1, 2, 3]] }, - // '4': { '5': [[4, 5, 6]] }, - // '20': { '30': [[20, 30, 40]] }, - // '39': { '89': [[39, 89, 78]] } - // } - - // assert.deepEqual(group_df.col_dict, new_data); - // }); - - // it("Obtain the DataFrame of one of the group, grouped by two column", function () { - - // let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]] - // let cols = ["A", "B", "C"] - // let df = new dfd.DataFrame(data, { columns: cols }) - // let group_df = df.groupby(["A", "B"]); - // let new_data = [[1, 2, 3]] - - // assert.deepEqual(group_df.get_groups([1, 2]).values, new_data); - // }); - - // it("Count column in group", function () { - - // let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]] - // let cols = ["A", "B", "C"] - // let df = new dfd.DataFrame(data, { columns: cols }) - // let group_df = df.groupby(["A", "B"]); - // let new_data = { - // '1': { '2': [1] }, - // '4': { '5': [1] }, - // '20': { '30': [1] }, - // '39': { '89': [1] } - // } - - // assert.deepEqual(group_df.col(["C"]).count(), new_data); - // }); - // it("sum column element in group", function () { - - // let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]] - // let cols = ["A", "B", "C"] - // let df = new dfd.DataFrame(data, { columns: cols }) - // let group_df = df.groupby(["A", "B"]); - // let new_data = { - // '1': { '2': [3] }, - // '4': { '5': [6] }, - // '20': { '30': [40] }, - // '39': { '89': [78] } - // } - - // assert.deepEqual(group_df.col(["C"]).sum(), new_data); - // }); - - // it("sum column element group by one column", function () { - - // let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]] - // let cols = ["A", "B", "C"] - // let df = new dfd.DataFrame(data, { columns: cols }) - // let group_df = df.groupby(["A"]); - - // let new_data = { '1': [2, 3], '4': [5, 6], '20': [30, 40], '39': [89, 78] } - - // assert.deepEqual(group_df.col(["B", "C"]).sum(), new_data); - // }); - - // it("Perform aggregate on column for groupby", function () { - - // let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]] - // let cols = ["A", "B", "C"] - // let df = new dfd.DataFrame(data, { columns: cols }) - // let group_df = df.groupby(["A", "B"]); - // let new_data = { - // '1': { '2': [2, 1] }, - // '4': { '5': [5, 1] }, - // '20': { '30': [30, 1] }, - // '39': { '89': [89, 1] } - // } - - // assert.deepEqual(group_df.agg({ "B": "mean", "C": "count" }), new_data); - // }); - - - // }); - - describe("column", function () { - it("Obtain a column from a dataframe created from object", function () { - let data = [ { alpha: "A", count: 1 }, { alpha: "B", count: 2 }, { alpha: "C", count: 3 } ]; - let options = { columns: [ "Gender", "count" ] }; - let df = new dfd.DataFrame(data, options); - let col_data = df.column("count"); - let rslt_data = [ 1, 2, 3 ]; - assert.deepEqual(col_data.values, rslt_data); - }); - it("Obtain a column from a dataframe", function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - let col_data = df.column("C"); - let rslt_data = [ 3, 6, 40, 78 ]; - assert.deepEqual(col_data.values, rslt_data); - }); - it("Throw Error for wrong column", function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - assert.throws(() => { df.column("D"); }, Error, "column D does not exist"); - - }); - }); - - // describe("Concatenate", function () { - - // it("Check the axis 0 concatenation", function () { - // let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]] - // let cols = ["A", "B", "C"] - // let df = new dfd.DataFrame(data, { columns: cols }) - - // let data1 = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]] - // let cols1 = ["A", "B", "C"] - // let df1 = new dfd.DataFrame(data1, { columns: cols1 }) - - // let data2 = [[1, 2, 3, 5], [4, 5, 6, 8], [20, 30, 40, 10]] - // let cols2 = ["A", "B", "C", "D"] - // let df2 = new dfd.DataFrame(data2, { columns: cols2 }) - - // let new_df = DataFrame.concat({ "df_list": [df, df1, df2], "axis": 0 }) - - // let data_values = [[1, 2, 3, NaN], [4, 5, 6, NaN], [20, 30, 40, NaN], [39, 89, 78, NaN], - // [1, 2, 3, NaN], [4, 5, 6, NaN], [20, 30, 40, NaN], [39, 89, 78, NaN], - // [1, 2, 3, 5], [4, 5, 6, 8], [20, 30, 40, 10]] - - // assert.deepEqual(new_df.values, data_values); - // }); - - // it("Check the axis 1 concatenation", function () { - // let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]] - // let cols = ["A", "B", "C"] - // let df = new dfd.DataFrame(data, { columns: cols }) - - // let data1 = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]] - // let cols1 = ["A", "B", "C"] - // let df1 = new dfd.DataFrame(data1, { columns: cols1 }) - - // let data2 = [[1, 2, 3, 5], [4, 5, 6, 8], [20, 30, 40, 10]] - // let cols2 = ["A", "B", "C", "D"] - // let df2 = new dfd.DataFrame(data2, { columns: cols2 }) - - // let new_df = DataFrame.concat({ "df_list": [df, df1, df2], "axis": 1 }) - - // let data_values = [[1, 2, 3, 1, 2, 3, 1, 2, 3, 5], [4, 5, 6, 4, 5, 6, 4, 5, 6, 8], - // [20, 30, 40, 20, 30, 40, 20, 30, 40, 10], [39, 89, 78, 39, 89, 78, NaN, - // NaN, NaN, NaN]] - // assert.deepEqual(new_df.values, data_values); - // }); - // }); - - - describe("Apply", function () { - it("Apply math operation on dataframe element wise", function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - let rslt = [ [ 2, 3, 4 ], [ 5, 6, 7 ], [ 21, 31, 41 ], [ 40, 90, 79 ] ]; - - let apply_rslt = df.apply({ - callable: (x) => { - return x + 1; - } - }); - - assert.deepEqual(apply_rslt.values, rslt); - }); - - it("Apply string function on all elements of a dataframe", function () { - let data = [ [ "BOY", "GIRL", "ALL" ], [ "Man", "Woman", "Girl" ] ]; - let df = new dfd.DataFrame(data); - let rslt = [ [ "boy", "girl", "all" ], [ "man", "woman", "girl" ] ]; - - let apply_rslt = df.apply({ - callable: (x) => { - return x.toLowerCase(); - - } - }); - assert.deepEqual(apply_rslt.values, rslt); - }); - - it("Throws error if you try to run a function that does not operate on axis and axis is specified", function () { - let data = [ [ "BOY", "GIRL", "ALL" ], [ "Man", "Woman", "Girl" ] ]; - let df = new dfd.DataFrame(data); - - let err = `Callable Error: You can only apply JavaScript functions on DataFrames when axis is not specified. This operation is applied on all element, and returns a DataFrame of the same shape.`; - - assert.throws(() => { - df.apply({ - axis: 0, callable: (x) => { - return x.toLowerCase(); - } - }); - }, Error, err); - - }); - - it("Apply math operation on dataframe at axis 1", function () { - let data = [ [ 1, 2, 3 ], - [ 4, 5, 6 ], - [ 20, 30, 40 ], - [ 39, 89, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - let rslt = [ 64, 126, 127 ]; - - let apply_rslt = df.apply({ - axis: 1, callable: (x) => { - return x.sum(); - } - }); - - assert.deepEqual(apply_rslt.values, rslt); - }); - - it("Apply tensor operation on dataframe at axis 0", function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - - let rslt = [ 6, 15, 90, 206 ]; - - let apply_rslt = df.apply({ - axis: 0, callable: (x) => { - return x.sum(); - } - }); - - assert.deepEqual(apply_rslt.values, rslt); - - }); - - it("Apply add operation element wise dataframe on axis 1", function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - - let result = [ [ 2, 3, 4 ], - [ 5, 6, 7 ], - [ 21, 31, 41 ], - [ 40, 90, 79 ] ]; - - let apply_rslt = df.apply({ - axis: 0, callable: (x) => { - return x.add(1); - } - }); - - assert.deepEqual(apply_rslt.values, result); - }); - }); - - describe("dropna", function () { - it("drop inplace at axis 0 at inplace false", function () { - let data = [ [ NaN, 1, 2, 3 ], [ 3, 4, NaN, 9 ], [ 5, 6, 7, 8 ] ]; - let column = [ "A", "B", "C", "D" ]; - let df = new dfd.DataFrame(data, { columns: column }); - - let df_val = [ [ 5, 6, 7, 8 ] ]; - - assert.deepEqual(df.dropna().values, df_val); - - }); - it("drop inplace at axis 1, inplace false ", function () { - let data = [ [ NaN, 1, 2, 3 ], [ 3, 4, NaN, 9 ], [ 5, 6, 7, 8 ] ]; - let column = [ "A", "B", "C", "D" ]; - let df = new dfd.DataFrame(data, { columns: column }); - - let df_val = [ [ 1, 3 ], [ 4, 9 ], [ 6, 8 ] ]; - - assert.deepEqual(df.dropna({ axis: 1 }).values, df_val); - - }); - it("drop inplace at axis 1, inplace true ", function () { - let data = [ [ NaN, 1, 2, 3 ], [ 3, 4, NaN, 9 ], [ 5, 6, 7, 8 ] ]; - let column = [ "A", "B", "C", "D" ]; - let df = new dfd.DataFrame(data, { columns: column }); - - let df_val = [ [ 1, 3 ], [ 4, 9 ], [ 6, 8 ] ]; - df.dropna({ axis: 1, inplace: true }); - - - assert.deepEqual(df.values, df_val); - - }); - it("drop inplace at axis 0 at inplace true", function () { - let data = [ [ NaN, 1, 2, 3 ], [ 3, 4, NaN, 9 ], [ 5, 6, 7, 8 ] ]; - let column = [ "A", "B", "C", "D" ]; - let df = new dfd.DataFrame(data, { columns: column }); - - let df_val = [ [ 5, 6, 7, 8 ] ]; - - df.dropna({ inplace: true }); - assert.deepEqual(df.values, df_val); - - }); - }); - - describe("isna", function () { - - it("check if each value are nan", function () { - let data = [ [ NaN, 1, 2, 3 ], [ 3, 4, undefined, 9 ], [ 5, 6, 7, 8 ] ]; - let column = [ "A", "B", "C", "D" ]; - let df = new dfd.DataFrame(data, { columns: column }); - - let df_val = [ - [ true, false, false, false ], - [ false, false, true, false ], - [ false, false, false, false ] - ]; - - assert.deepEqual(df.isna().values, df_val); - }); - }); - - describe("fillna", function () { - - it("replace all NaN value", function () { - let data = [ [ NaN, 1, 2, 3 ], [ 3, 4, NaN, 9 ], [ 5, 6, 7, 8 ] ]; - let column = [ "A", "B", "C", "D" ]; - let df = new dfd.DataFrame(data, { columns: column }); - - let df_val = [ [ -999, 1, 2, 3 ], [ 3, 4, -999, 9 ], [ 5, 6, 7, 8 ] ]; - df.fillna({ values: -999, inplace: true }); - assert.deepEqual(df.values, df_val); - }); - it("replace all NaN value", function () { - let data = [ [ NaN, 1, 2, 3 ], [ 3, 4, NaN, 9 ], [ 5, 6, 7, 8 ] ]; - let column = [ "A", "B", "C", "D" ]; - let df = new dfd.DataFrame(data, { columns: column }); - - let df_val = [ [ -999, 1, 2, 3 ], [ 3, 4, -999, 9 ], [ 5, 6, 7, 8 ] ]; - - let df_filled = df.fillna({ values: [ -999 ] }); - assert.deepEqual(df_filled.values, df_val); - }); - - it("Fills only a specified column", function () { - let data = [ [ 1, 2, 3 ], - [ 4, 5, 6 ], - [ 20, NaN, 40 ], - [ 39, NaN, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - let new_vals = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 2, 40 ], [ 39, 2, 78 ] ]; - let df_filled = df.fillna({ columns: [ "B" ], values: [ 2 ] }); - - assert.deepEqual(df_filled.values, new_vals); - }); - it("Fills column with specified values not in place", function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ NaN, 20, 40 ], [ NaN, -1, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - let new_vals = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ -2, 20, 40 ], [ -2, -1, 78 ] ]; - let df_filled = df.fillna({ columns: [ "A" ], values: [ -2 ] }); - - assert.deepEqual(df_filled.values, new_vals); - }); - - it("Fills a list of columns with specified values", function () { - let data = [ [ 1, undefined, 3 ], [ 4, undefined, 6 ], [ NaN, "boy", 40 ], [ NaN, "girl", 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - let new_vals = [ [ 1, "girl", 3 ], [ 4, "girl", 6 ], [ 200, "boy", 40 ], [ 200, "girl", 78 ] ]; - let df_filled = df.fillna({ columns: [ "A", "B" ], values: [ 200, "girl" ] }); - assert.deepEqual(df_filled.values, new_vals); - }); - it("Fills a list of columns with specified values inplace", function () { - let data = [ [ 1, undefined, 3 ], [ 4, undefined, 6 ], [ NaN, "boy", 40 ], [ NaN, "girl", 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - let new_vals = [ [ 1, "girl", 3 ], [ 4, "girl", 6 ], [ 200, "boy", 40 ], [ 200, "girl", 78 ] ]; - df.fillna({ columns: [ "A", "B" ], values: [ 200, "girl" ], inplace: true }); - assert.deepEqual(df.values, new_vals); - }); - }); - - - describe("nanindex", function () { - - it("print out the nanIndex", function () { - let data = [ [ NaN, 1, 2, 3 ], [ 3, 4, NaN, 9 ], [ 5, 6, 7, 8 ] ]; - let column = [ "A", "B", "C", "D" ]; - let df = new dfd.DataFrame(data, { columns: column }); - - let df_val = [ 0, 1 ]; - assert.deepEqual(df.nanIndex(), df_val); - }); - }); - - describe("select_dtypes", function () { - - it("Returns float columns in a DataFrame", function () { - let data = [ [ 30, 1, 2, "boy" ], [ 3.2, 4, 30, "girl" ], [ 5.09, 6, 7, "cat" ] ]; - let column = [ "A", "B", "C", "D" ]; - let df = new dfd.DataFrame(data, { columns: column }); - let df_sub = df.select_dtypes([ 'float32' ]); - assert.deepEqual(df_sub.col_data, [ [ 30, 3.2, 5.09 ] ]); - }); - - it("Returns int columns in a DataFrame", function () { - let data = [ [ 30, 1, 2, "boy" ], - [ 3.2, 4, 30, "girl" ], - [ 5.09, 6, 7, "cat" ] ]; - let column = [ "A", "B", "C", "D" ]; - let df = new dfd.DataFrame(data, { columns: column }); - let df_sub = df.select_dtypes([ 'int32' ]); - assert.deepEqual(df_sub.values, [ [ 1, 2 ], [ 4, 30 ], [ 6, 7 ] ]); - }); - - it("Returns string columns in a DataFrame", function () { - let data = [ [ 30, 1, 2, "boy" ], - [ 3.2, 4, 30, "girl" ], - [ 5.09, 6, 7, "cat" ] ]; - let column = [ "A", "B", "C", "D" ]; - let df = new dfd.DataFrame(data, { columns: column }); - let df_sub = df.select_dtypes([ 'string' ]); - assert.deepEqual(df_sub.col_data, [ [ "boy", "girl", "cat" ] ]); - }); - - it("Returns string and float columns in a DataFrame", function () { - let data = [ [ 30, 1, 2, "boy" ], - [ 3.2, 4, 30, "girl" ], - [ 5.09, 6, 7, "cat" ] ]; - let column = [ "A", "B", "C", "D" ]; - let df = new dfd.DataFrame(data, { columns: column }); - let df_sub = df.select_dtypes([ 'string', 'float32' ]); - assert.deepEqual(df_sub.col_data, [ [ 30, 3.2, 5.09 ], [ "boy", "girl", "cat" ] ]); - }); - - it("Returns int and float columns in a DataFrame", function () { - let data = [ [ 30, 1, 2, "boy" ], - [ 3.2, 4, 30, "girl" ], - [ 5.09, 6, 7, "cat" ] ]; - let column = [ "A", "B", "C", "D" ]; - let df = new dfd.DataFrame(data, { columns: column }); - let df_sub = df.select_dtypes([ 'int32', 'float32' ]); - assert.deepEqual(df_sub.values, [ [ 30, 1, 2 ], [ 3.2, 4, 30 ], [ 5.09, 6, 7 ] ]); - }); - }); - - describe("cum_ops", function () { - - it("check cumsum data", function () { - let data = [ [ 2, 1, 2, 3 ], [ 3, 4, 11, 9 ], [ 5, 6, 7, 8 ] ]; - let column = [ "A", "B", "C", "D" ]; - let df = new dfd.DataFrame(data, { columns: column }); - let rslt = [ [ 2, 1, 2, 3 ], [ 5, 5, 13, 12 ], [ 10, 11, 20, 20 ] ]; - - assert.deepEqual(df.cumsum().values, rslt); - }); - it("check cumsum data along axis 1", function () { - let data = [ [ 2, 1, 2, 3 ], [ 3, 4, 11, 9 ], [ 5, 6, 7, 8 ] ]; - let column = [ "A", "B", "C", "D" ]; - let df = new dfd.DataFrame(data, { columns: column }); - let rslt = [ [ 2, 3, 5, 8 ], [ 3, 7, 18, 27 ], [ 5, 11, 18, 26 ] ]; - - assert.deepEqual(df.cumsum({ axis: 1 }).values, rslt); - }); - }); - - describe("__set_column_property", async function () { - it("Access column object using list subset and name of column", async function () { - let data = [ { alpha: "A", count: 1 }, { alpha: "B", count: 2 }, { alpha: "C", count: 3 } ]; - let df = new dfd.DataFrame(data); - let col1 = [ "A", "B", "C" ]; - let col2 = [ 1, 2, 3 ]; - assert.deepEqual(df['alpha'].values, col1); - assert.deepEqual(df['count'].values, col2); - }); - it("Access column object using list subset and name of column after assigning", function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new dfd.DataFrame(data, { columns: cols }); - df["A"] = [ 30, 40 ]; - let col1 = [ 30, 40 ]; - assert.deepEqual(df["A"].values, col1); - }); - }); - - describe("lt", function () { - it("Returns Less than of DataFrame and other DataFrame (element-wise)", function () { - let data1 = [ [ 10, 45, 56, 10 ], [ 25, 23, 20, 10 ] ]; - let data2 = [ [ 100, 450, 590, 5 ], [ 25, 2, 0, 10 ] ]; - - let df = new dfd.DataFrame(data1); - let df2 = new dfd.DataFrame(data2); - let expected = [ [ true, true, true, false ], - [ false, false, false, false ] ]; - assert.deepEqual(df.lt(df2).values, expected); - }); - - it("Return Less than of series scalar (element-wise)", function () { - let data1 = [ [ 10, 45, 56, 10 ], [ 25, 23, 20, 10 ] ]; - let sf = new dfd.DataFrame(data1); - let expected = [ [ true, false, false, true ], - [ true, true, true, true ] ]; - assert.deepEqual(sf.lt(30).values, expected); - }); - it("Return Less than of series and DataFrame scalar along axis 1 (column)", function () { - let data1 = [ [ 10, 45, 56, 10 ], - [ 23, 20, 10, 10 ] ]; - let sf = new dfd.Series([ 10, 23, 56, 100 ]); - let df = new dfd.DataFrame(data1); - let expected = [ [ false, false, false, true ], [ false, true, true, true ] ]; - assert.deepEqual(df.lt(sf, 1).values, expected); - }); - - it("Return Less than of Array and DataFrame scalar along axis 1 (column)", function () { - let data1 = [ [ 10, 45, 56, 10 ], [ 23, 20, 10, 10 ] ]; - let sf = [ 10, 23, 56, 100 ]; - let df = new dfd.DataFrame(data1); - let expected = [ [ false, false, false, true ], [ false, true, true, true ] ]; - assert.deepEqual(df.lt(sf, 1).values, expected); - }); - - }); - - describe("gt", function () { - it("Return Greater than of series and other series (element-wise)", function () { - let data1 = [ [ 10, 45, 56, 10 ], [ 25, 23, 20, 10 ] ]; - let data2 = [ [ 100, 450, 590, 5 ], [ 25, 2, 0, 10 ] ]; - - let df = new dfd.DataFrame(data1); - let df2 = new dfd.DataFrame(data2); - let expected = [ [ false, false, false, true ], [ false, true, true, false ] ]; - assert.deepEqual(df.gt(df2).values, expected); - }); - - it("Return Greater than of series scalar (element-wise)", function () { - let data1 = [ [ 10, 45, 56, 10 ], [ 25, 23, 20, 10 ] ]; - let sf = new dfd.DataFrame(data1); - let expected = [ [ false, true, true, false ], [ false, false, false, false ] ]; - assert.deepEqual(sf.gt(30).values, expected); - }); - - it("Return Less than of Array and DataFrame scalar along axis 1 (column)", function () { - let data1 = [ [ 10, 45, 56, 10 ], [ 23, 20, 10, 10 ] ]; - let sf = [ 10, 23, 56, 100 ]; - let df = new dfd.DataFrame(data1); - let expected = [ [ false, true, false, false ], [ true, false, false, false ] ]; - assert.deepEqual(df.gt(sf, 1).values, expected); - }); - - }); - - describe("le", function () { - it("Return Less than or Equal to of series and other series (element-wise)", function () { - let data1 = [ [ 10, 45, 56, 10 ], [ 25, 23, 20, 10 ] ]; - let data2 = [ [ 100, 450, 590, 5 ], [ 25, 2, 0, 10 ] ]; - - let df = new dfd.DataFrame(data1); - let df2 = new dfd.DataFrame(data2); - let expected = [ [ true, true, true, false ], [ true, false, false, true ] ]; - assert.deepEqual(df.le(df2).values, expected); - }); - - it("Return Less than or Equal to of series scalar (element-wise)", function () { - let data1 = [ [ 10, 45, 56, 10 ], [ 25, 23, 30, 10 ] ]; - let sf = new dfd.DataFrame(data1); - let expected = [ [ true, false, false, true ], [ true, true, true, true ] ]; - assert.deepEqual(sf.le(30).values, expected); - }); - - }); - - describe("ge", function () { - it("Return Greater than or Equal to of series and other series (element-wise)", function () { - let data1 = [ [ 10, 45, 56, 10 ], [ 25, 23, 20, 10 ] ]; - let data2 = [ [ 100, 450, 590, 5 ], [ 25, 2, 0, 10 ] ]; - - let df = new dfd.DataFrame(data1); - let df2 = new dfd.DataFrame(data2); - let expected = [ [ false, false, false, true ], [ true, true, true, true ] ]; - assert.deepEqual(df.ge(df2).values, expected); - }); - - it("Return Greater than or Equal to of series scalar (element-wise)", function () { - let data1 = [ [ 10, 45, 56, 10 ], [ 25, 23, 30, 10 ] ]; - let sf = new dfd.DataFrame(data1); - let expected = [ [ false, true, true, false ], [ false, false, true, false ] ]; - assert.deepEqual(sf.ge(30).values, expected); - }); - - }); - - describe("ne", function () { - it("Return Not Equal to of series and other series (element-wise)", function () { - let data1 = [ [ 10, 45, 56, 10 ], [ 25, 23, 20, 10 ] ]; - let data2 = [ [ 100, 450, 590, 5 ], [ 25, 2, 0, 10 ] ]; - - let df = new dfd.DataFrame(data1); - let df2 = new dfd.DataFrame(data2); - let expected = [ [ true, true, true, true ], [ false, true, true, false ] ]; - assert.deepEqual(df.ne(df2).values, expected); - }); - - it("Return Not Equal to of series scalar (element-wise)", function () { - let data1 = [ [ 10, 45, 56, 10 ], [ 25, 23, 30, 10 ] ]; - let sf = new dfd.DataFrame(data1); - let expected = [ [ true, true, true, true ], [ true, true, false, true ] ]; - assert.deepEqual(sf.ne(30).values, expected); - }); - - }); - - describe("eq", function () { - it("Return Equal to of DataFrame and other DataFrame (element-wise)", function () { - let data1 = [ [ 10, 45, 56, 10 ], [ 25, 23, 20, 10 ] ]; - let data2 = [ [ 100, 450, 590, 5 ], [ 25, 2, 0, 10 ] ]; - - let df = new dfd.DataFrame(data1); - let df2 = new dfd.DataFrame(data2); - let expected = [ [ false, false, false, false ], [ true, false, false, true ] ]; - assert.deepEqual(df.eq(df2).values, expected); - }); - - it("Return Equal to of DataFrame with scalar (element-wise)", function () { - let data1 = [ [ 10, 45, 56, 10 ], [ 25, 23, 30, 10 ] ]; - let sf = new dfd.DataFrame(data1); - let expected = [ [ false, false, false, false ], [ false, false, true, false ] ]; - assert.deepEqual(sf.eq(30).values, expected); - }); - it("Return Equal to of series and DataFrame scalar along axis 1 (column)", function () { - let data1 = { "Col1": [ 10, 45, 56, 10 ], "Col2": [ 23, 20, 10, 10 ] }; - let sf = new dfd.Series([ 10, 23 ]); - let df = new dfd.DataFrame(data1); - let expected = [ [ true, false, false, true ], [ true, false, false, false ] ]; - assert.deepEqual(df.eq(sf, 1).col_data, expected); - }); - - }); - - describe("replace", function () { - it("Replace values given in replace param", function () { - let data1 = [ [ 10, 45, 56, 25 ], [ 23, 20, 10, 24 ] ]; - let sf = new dfd.DataFrame(data1); - let expected = [ [ -999, 45, 56, 25 ], [ 23, 20, -999, 24 ] ]; - let df_rep = sf.replace({ replace: 10, with: -999 }); - assert.deepEqual(df_rep.values, expected); - }); - - it("Replace values given in replace param with value (String type)", function () { - let data1 = [ [ "A", "A", "A", "B" ], [ "B", "C", "C", "D" ] ]; - let df = new dfd.DataFrame(data1); - let expected = [ [ "boy", "boy", "boy", "B" ], [ "B", "C", "C", "D" ] ]; - let df_rep = df.replace({ replace: "A", with: "boy" }); - assert.deepEqual(df_rep.values, expected); - }); - it("Throw error on wrong param passed", function () { - let data1 = [ [ "A", "A", "A", "B" ], [ "B", "C", "C", "D" ] ]; - let sf = new dfd.DataFrame(data1); - let expected = `Params Error: A specified parameter is not supported. Your params must be any of the following [replace,with,in]`; - assert.throws(() => { sf.replace({ replce: "A", with: "boy" }); }, Error, expected); - }); - it("Replace values in specified two column(s)", function () { - let data1 = [ [ "A", "A", 1, "girl" ], - [ "B", "A", 2, "woman" ], - [ "A", "B", 3, "man" ] ]; - let df = new dfd.DataFrame(data1, { columns: [ "col1", "col2", "col3", "col4" ] }); - let expected = [ [ "boy", "boy", 1, "girl" ], - [ "B", "boy", 2, "woman" ], - [ "boy", "B", 3, "man" ] ]; - let df_rep = df.replace({ replace: "A", with: "boy", in: [ "col1", "col2" ] }); - assert.deepEqual(df_rep.values, expected); - }); - - it("Replace values in specified single column(s)", function () { - let data1 = [ [ 2, "A", 1, "girl" ], - [ 3, "A", 2, "woman" ], - [ 4, "B", 3, "man" ] ]; - let df = new dfd.DataFrame(data1, { columns: [ "col1", "col2", "col3", "col4" ] }); - let expected = [ [ 2, "A", 1, "girl" ], - [ 100, "A", 2, "woman" ], - [ 4, "B", 3, "man" ] ]; - let df_rep = df.replace({ replace: 3, with: 100, in: [ "col1" ] }); - assert.deepEqual(df_rep.values, expected); - }); - - - }); - - describe("drop_duplicates", function () { - it("Return Series with duplicate values removed (Default, first values kept)", function () { - let data1 = [ 10, 45, 56, 10, 23, 20, 10, 10 ]; - let sf = new dfd.Series(data1); - let expected = [ 10, 45, 56, 23, 20 ]; - let expected_index = [ 0, 1, 2, 4, 5 ]; - let df_drop = sf.drop_duplicates(); - assert.deepEqual(df_drop.values, expected); - assert.deepEqual(df_drop.index, expected_index); - - }); - - it("Return Series with duplicate values removed (last values kept)", function () { - let data1 = [ 10, 45, 56, 10, 23, 20, 10, 10 ]; - let sf = new dfd.Series(data1); - let expected = [ 45, 56, 23, 20, 10 ]; - let expected_index = [ 1, 2, 4, 5, 7 ]; - let df_drop = sf.drop_duplicates({ keep: "last" }); - assert.deepEqual(df_drop.values, expected); - assert.deepEqual(df_drop.index, expected_index); - - }); - - it("Return Series with duplicate values removed (String)", function () { - let data1 = [ "A", "A", "A", "B", "B", "C", "C", "D" ]; - let sf = new dfd.Series(data1); - let expected = [ "A", "B", "C", "D" ]; - let expected_index = [ 0, 3, 5, 7 ]; - sf.drop_duplicates({ inplace: true }); - assert.deepEqual(sf.values, expected); - assert.deepEqual(sf.index, expected_index); - - }); - - }); - - describe("sum", function () { - it("Sum values of a DataFrame by Default axis column (axis=1)", function () { - let data1 = [ [ 30, 40, 3.1 ], - [ 5, 5, 5.1 ], - [ 5, 5, 3.2 ] ]; - let sf = new dfd.DataFrame(data1); - let res = [ 40, 50, 11.4 ]; - assert.deepEqual(sf.sum().values, res); - }); - it("Sum values of a DataFrame along row axis (axis=0)", function () { - let data1 = [ [ 30, 40, 3.1 ], - [ 5, 5, 5.1 ], - [ 5, 5, 3.2 ] ]; - let df = new dfd.DataFrame(data1); - let res = [ 73.1, 15.1, 13.2 ]; - assert.deepEqual(df.sum({ axis: 0 }).values, res); - }); - it("Sum values of a mixed DataFrame along row axis (axis=0)", function () { - let data1 = [ [ 30, 40, 3.1, true ], - [ 5, 5, 5.1, true ], - [ 5, 5, 3.2, true ] ]; - let df = new dfd.DataFrame(data1); - let res = [ 74.1, 16.1, 14.2 ]; - assert.deepEqual(df.sum({ axis: 0 }).values, res); - }); - it("Sum values of a boolean DataFrame along row axis (axis=0)", function () { - let data1 = [ [ true, true, false, true ], - [ false, false, false, false ], - [ false, true, true, false ] ]; - let df = new dfd.DataFrame(data1); - let res = [ 3, 0, 2 ]; - assert.deepEqual(df.sum({ axis: 0 }).values, res); - }); - it("Sum values of a boolean DataFrame along default column axis (axis=1)", function () { - let data1 = [ [ true, true, false, true ], - [ false, false, false, false ], - [ false, true, true, false ] ]; - let df = new dfd.DataFrame(data1); - let res = [ 1, 2, 1, 1 ]; - assert.deepEqual(df.sum().values, res); - }); - it("Sum values of a df with missing values", function () { - let data1 = [ [ 11, 20, 3 ], [ null, 15, 6 ], [ 2, 30, 40 ], [ 2, 89, 78 ] ]; - let df = new dfd.DataFrame(data1); - let res = [ 15, 154, 127 ]; - assert.deepEqual(df.sum().values, res); - }); - }); - - describe("abs", function () { - it("Returns the absolute values in DataFrame of ints", function () { - let data1 = [ [ -10, 45, 56, 10 ], [ -25, 23, 20, -10 ] ]; - let df = new dfd.DataFrame(data1); - let expected = [ [ 10, 45, 56, 10 ], [ 25, 23, 20, 10 ] ]; - assert.deepEqual(df.abs().values, expected); - }); - - it("Returns the absolute values in mixed DataFrame", function () { - let data1 = [ [ -10, -45.1, 56, 10 ], [ -25, -23.2, 20, -10 ] ]; - let df = new dfd.DataFrame(data1); - let expected = [ [ 10, 45.1, 56, 10 ], [ 25, 23.2, 20, 10 ] ]; - assert.deepEqual(df.abs().values, expected); - }); - }); - - describe("T", function () { - it("Returns the Tranpose of a DataFrame", function () { - let data1 = [ [ 10, 45, 56, 10 ], - [ 25, 23, 20, 10 ] ]; - - let cols = [ "a", "b", "c", "d" ]; - let df = new dfd.DataFrame(data1, { columns: cols }); - let df_trans = df.T; - let expected_vals = [ [ 10, 25 ], [ 45, 23 ], [ 56, 20 ], [ 10, 10 ] ]; - let expected_index = cols; - let expected_col_names = [ 0, 1 ]; - assert.deepEqual(df_trans.index, expected_index); - assert.deepEqual(df_trans.values, expected_vals); - assert.deepEqual(df_trans.column_names, expected_col_names); - - }); - - }); - - - describe("astype", function () { - it("set type of float column to int", function () { - let data = { - "A": [ -20.1, 30, 47.3, -20 ], - "B": [ 34, -4, 5, 6 ], - "C": [ 20.1, -20.23, 30.3, 40.11 ], - "D": [ "a", "b", "c", "c" ] - }; - let ndframe = new dfd.DataFrame(data); - let df = ndframe.astype({ column: "A", dtype: "int32" }); - - assert.deepEqual(df.dtypes, [ 'int32', 'int32', 'float32', 'string' ]); - assert.deepEqual(df['A'].values, [ -20, 30, 47, -20 ]); - - }); - it("set type of int column to float", function () { - let data = { - "A": [ -20.1, 30, 47.3, -20 ], - "B": [ 34, -4, 5, 6 ], - "C": [ 20.1, -20.23, 30.3, 40.11 ], - "D": [ "a", "b", "c", "c" ] - }; - let ndframe = new dfd.DataFrame(data); - let df = ndframe.astype({ column: "B", dtype: "float32" }); - - assert.deepEqual(df.dtypes, [ 'float32', 'float32', 'float32', 'string' ]); - assert.deepEqual(df['B'].values, [ 34, -4, 5, 6 ]); - - }); - it("set type of string column to int", function () { - let data = { - "A": [ -20.1, 30, 47.3, -20 ], - "B": [ 34, -4, 5, 6 ], - "C": [ 20.1, -20.23, 30.3, 40.11 ], - "D": [ "20.1", "21", "23.4", "50.78" ] - }; - let ndframe = new dfd.DataFrame(data); - let df = ndframe.astype({ column: "D", dtype: "int32" }); - - assert.deepEqual(df.dtypes, [ 'float32', 'int32', 'float32', 'int32' ]); - assert.deepEqual(df['D'].values, [ 20, 21, 23, 51 ]); - - }); - it("set type of string column to float", function () { - let data = { - "A": [ -20.1, 30, 47.3, -20 ], - "B": [ 34, -4, 5, 6 ], - "C": [ 20.1, -20.23, 30.3, 40.11 ], - "D": [ "20.1", "21", "23.4", "50.78" ] - }; - let ndframe = new dfd.DataFrame(data); - let df = ndframe.astype({ column: "D", dtype: "float32" }); - - assert.deepEqual(df.dtypes, [ 'float32', 'int32', 'float32', 'float32' ]); - assert.deepEqual(df['D'].values, [ 20.1, 21, 23.4, 50.78 ]); - - }); - }); - - - describe("nunique", function () { - it("Returns the number of unique elements along axis 1", function () { - let data = { - "A": [ -20, 30, 47.3, -20 ], - "B": [ 34, -4, 5, 6 ], - "C": [ 20, 20, 30, 30 ], - "D": [ "a", "b", "c", "c" ] - }; - - let ndframe = new dfd.DataFrame(data); - let df = ndframe.nunique(1); - let res = [ 3, 4, 2, 3 ]; - assert.deepEqual(df.values, res); - - }); - it("Returns the number of unique elements along axis 0", function () { - let data = { - "A": [ 20, 30, 47.3, 30 ], - "B": [ 34, -4, 5, 30 ], - "C": [ 20, 20, 30, 30 ], - "D": [ "a", "b", "c", "c" ] - }; - - let ndframe = new dfd.DataFrame(data); - let df = ndframe.nunique(0); - let res = [ 3, 4, 4, 2 ]; - assert.deepEqual(df.values, res); - - }); - - }); - - - describe("unique", function () { - it("Returns the unique elements along axis 1", function () { - let data = { - "A": [ -20, 30, 47.3, -20 ], - "B": [ 34, -4, 5, 6 ], - "C": [ 20, 20, 30, 30 ], - "D": [ "a", "b", "c", "c" ] - }; - - let ndframe = new dfd.DataFrame(data); - let df = ndframe.unique(1); - let res = { - "A": [ -20, 30, 47.3 ], - "B": [ 34, -4, 5, 6 ], - "C": [ 20, 30 ], - "D": [ "a", "b", "c" ] - }; - - assert.deepEqual(df, res); - - }); - it("Returns the unique elements along axis 0", function () { - let data = { - "A": [ -20, 30, 47.3, -20 ], - "B": [ 34, -4, 5, 6 ], - "C": [ 20, 20, 30, 30 ], - "D": [ "a", "b", "c", "c" ] - }; - - let ndframe = new dfd.DataFrame(data); - let df = ndframe.unique(0); - let res = { - 0: [ -20, 34, 20, "a" ], - 1: [ 30, -4, 20, "b" ], - 2: [ 47.3, 5, 30, "c" ], - 3: [ -20, 6, 30, "c" ] - }; - assert.deepEqual(df, res); - - }); - }); - - - describe("rename", function () { - it("Rename columns along axis 1", function () { - let data = { - "A": [ -20, 30, 47.3, -20 ], - "B": [ 34, -4, 5, 6 ], - "C": [ 20, 20, 30, 30 ], - "D": [ "a", "b", "c", "c" ] - }; - - let ndframe = new dfd.DataFrame(data); - let df = ndframe.rename({ mapper: { "A": "a1", "B": "b1" } }); - let res = [ "a1", "b1", "C", "D" ]; - assert.deepEqual(df.columns, res); - - }); - it("confirms original column name is not modified along axis 1", function () { - let data = { - "A": [ -20, 30, 47.3, -20 ], - "B": [ 34, -4, 5, 6 ], - "C": [ 20, 20, 30, 30 ], - "D": [ "a", "b", "c", "c" ] - }; - - let ndframe = new dfd.DataFrame(data); - // let df = ndframe.rename({ mapper: { "A": "a1", "B": "b1" } }) - let res = [ "A", "B", "C", "D" ]; - assert.deepEqual(ndframe.columns, res); - - }); - it("Rename columns along axis 1 inplace", function () { - let data = { - "A": [ -20, 30, 47.3, -20 ], - "B": [ 34, -4, 5, 6 ], - "C": [ 20, 20, 30, 30 ], - "D": [ "a", "b", "c", "c" ] - }; - - let df = new dfd.DataFrame(data); - df.rename({ mapper: { "A": "a1", "B": "b1" }, inplace: true }); - let res = [ "a1", "b1", "C", "D" ]; - assert.deepEqual(df.columns, res); - - }); - it("Rename string index along axis 0", function () { - let data = { - "A": [ -20, 30, 47.3, -20 ], - "B": [ 34, -4, 5, 6 ], - "C": [ 20, 20, 30, 30 ], - "D": [ "a", "b", "c", "c" ] - }; - - let ndframe = new dfd.DataFrame(data, { index: [ "a", "b", "c", "d" ] }); - let df = ndframe.rename({ mapper: { "a": 0, "b": 1 }, axis: 0 }); - let res = [ 0, 1, "c", "d" ]; - assert.deepEqual(df.index, res); - - }); - it("Rename string index along axis 0 inplace", function () { - let data = { - "A": [ -20, 30, 47.3, -20 ], - "B": [ 34, -4, 5, 6 ], - "C": [ 20, 20, 30, 30 ], - "D": [ "a", "b", "c", "c" ] - }; - - let df = new dfd.DataFrame(data, { index: [ "a", "b", "c", "d" ] }); - df.rename({ mapper: { "a": 0, "b": 1 }, axis: 0, inplace: true }); - let res = [ 0, 1, "c", "d" ]; - assert.deepEqual(df.index, res); - - }); - }); - - describe("sort_index", function () { - - it("sort index in ascending order", function () { - let data = [ [ 0, 2, 4, "b" ], - [ 360, 180, 360, "a" ], - [ 2, 4, 6, "c" ] ]; - - let df = new dfd.DataFrame(data, { "columns": [ "col1", "col2", "col3", "col4" ] }); - df.set_index({ key: [ "b", "a", "c" ], inplace: true }); - - let df2 = df.sort_index(); - let rslt = [ [ 360, 180, 360, 'a' ], [ 0, 2, 4, 'b' ], [ 2, 4, 6, 'c' ] ]; - - assert.deepEqual(df2.values, rslt); - }); - it("sort index in descending order", function () { - let data = [ [ 0, 2, 4, "b" ], - [ 360, 180, 360, "a" ], - [ 2, 4, 6, "c" ] ]; - - let df = new dfd.DataFrame(data, { "columns": [ "col1", "col2", "col3", "col4" ] }); - df.set_index({ key: [ "b", "a", "c" ], inplace: true }); - - let df2 = df.sort_index({ ascending: false }); - let rslt = [ [ 2, 4, 6, 'c' ], [ 0, 2, 4, 'b' ], [ 360, 180, 360, 'a' ] ]; - - assert.deepEqual(df2.values, rslt); - }); - it("sort index in descending order with inplace set to true", function () { - let data = [ [ 0, 2, 4, "b" ], - [ 360, 180, 360, "a" ], - [ 2, 4, 6, "c" ] ]; - - let df = new dfd.DataFrame(data, { "columns": [ "col1", "col2", "col3", "col4" ] }); - df.set_index({ key: [ "b", "a", "c" ], inplace: true }); - - df.sort_index({ ascending: false, inplace: true }); - let rslt = [ [ 2, 4, 6, 'c' ], [ 0, 2, 4, 'b' ], [ 360, 180, 360, 'a' ] ]; - assert.deepEqual(df.values, rslt); - }); - }); - - describe("append", function () { - - it("Add a new single row (array) to the end of a DataFrame", function () { - let data = [ [ 0, 2, 4, "b" ], - [ 360, 180, 360, "a" ], - [ 2, 4, 6, "c" ] ]; - - let df = new dfd.DataFrame(data); - let expected_val = [ [ 0, 2, 4, "b" ], - [ 360, 180, 360, "a" ], - [ 2, 4, 6, "c" ], - [ 20, 40, 60, "d" ] ]; - - let rslt_df = df.append([ [ 20, 40, 60, "d" ] ]); - assert.deepEqual(rslt_df.values, expected_val); - - }); - - it("Add a new single row (object) to the end of a DataFrame", function () { - let data = [ [ 0, 2, 4, "b" ], - [ 360, 180, 360, "a" ], - [ 2, 4, 6, "c" ] ]; - - let df = new dfd.DataFrame(data, { "columns": [ "col1", "col2", "col3", "col4" ] }); - let expected_val = [ [ 0, 2, 4, "b" ], - [ 360, 180, 360, "a" ], - [ 2, 4, 6, "c" ], - [ 20, 40, 60, "d" ] ]; - let rslt_df = df.append({ col1: [ 20 ], col2: [ 40 ], col3: [ 60 ], col4: [ "d" ] }); - assert.deepEqual(rslt_df.values, expected_val); - - }); - - it("Add a new single row (object) to the end of a DataFrame", function () { - let data = [ [ 0, 2, 4, "b" ], - [ 360, 180, 360, "a" ], - [ 2, 4, 6, "c" ] ]; - - let df = new dfd.DataFrame(data, { "columns": [ "col1", "col2", "col3", "col4" ] }); - let df2 = new dfd.DataFrame([ [ 20, 40, 60, "d" ] ], { "columns": [ "col1", "col2", "col3", "col4" ] }); - - let expected_val = [ [ 0, 2, 4, "b" ], - [ 360, 180, 360, "a" ], - [ 2, 4, 6, "c" ], - [ 20, 40, 60, "d" ] ]; - - let rslt_df = df.append(df2); - assert.deepEqual(rslt_df.values, expected_val); - - }); - it("Confirm index Change after append", function () { - let data = [ [ 0, 2, 4, "b" ], - [ 360, 180, 360, "a" ], - [ 2, 4, 6, "c" ] ]; - - let df = new dfd.DataFrame(data, { "columns": [ "col1", "col2", "col3", "col4" ] }); - let df2 = new dfd.DataFrame([ [ 20, 40, 60, "d" ] ], { "columns": [ "col1", "col2", "col3", "col4" ] }); - - let rslt_df = df.append(df2); - assert.deepEqual(rslt_df.index, [ "0_row0", "1_row0", "2_row0", "0_row1" ]); - - }); - }); - describe("Str", function () { - it("Str (startsWith) works for columns selected from a DF", function () { - let data = { - "Name": [ "Apples", "Bake", "Application", undefined ], - "Count": [ 2, 5, 4, 10 ], - "Price": [ 200, 300, 40, 250 ] - }; - - let df = new dfd.DataFrame(data); - let name_sf = df['Name']; - assert.deepEqual(name_sf.str.startsWith("App").values, [ true, false, true, false ]); - }); - it("Str (toLowerCase) works for columns selected from a DF", function () { - let data = { - "Name": [ "Apples", "Bake", "Application", undefined ], - "Count": [ 2, 5, 4, 10 ], - "Price": [ 200, 300, 40, 250 ] - }; - - let df = new dfd.DataFrame(data); - let name_sf = df['Name']; - assert.deepEqual(name_sf.str.toLowerCase().values, [ "apples", "bake", "application", NaN ]); - }); - }); -}); diff --git a/danfojs-browser/tests/core/generic.js b/danfojs-browser/tests/core/generic.js deleted file mode 100644 index c270882a..00000000 --- a/danfojs-browser/tests/core/generic.js +++ /dev/null @@ -1,271 +0,0 @@ -/* eslint-disable no-undef */ -const tf = require("@tensorflow/tfjs"); - -describe("Generic (NDFrame)", function () { - describe("NDframe Created from Array", function () { - it("prints the shape of a 1D array", function () { - let data = [ 1, 2, 3, "Boy", "Girl" ]; - let ndframe = new dfd.NDframe(data); - assert.deepEqual(ndframe.shape, [ 5, 1 ]); - }); - it("prints the default assigned column name in a series", function () { - let data = [ "Boy", 20, 25 ]; - let ndframe = new dfd.NDframe(data); - assert.deepEqual(ndframe.column_names, [ "0" ]); - }); - it("prints the assigned column name in a series", function () { - let data = [ "Boy", 20, 25 ]; - let options = { "columns": 'Records' }; - let ndframe = new dfd.NDframe(data, options); - assert.deepEqual(ndframe.column_names, "Records"); - }); - it("prints the shape of a 2D array", function () { - let data = [ [ "Boy", 20 ], [ "Girl", 25 ] ]; - let ndframe = new dfd.NDframe(data); - assert.deepEqual(ndframe.shape, [ 2, 2 ]); - }); - it("prints the default assigned column names in 2D frame", function () { - let data = [ [ "Boy", 20 ], [ "Girl", 25 ] ]; - let ndframe = new dfd.NDframe(data); - assert.deepEqual(ndframe.column_names, [ 0, 1 ]); - }); - it("prints the assigned column names", function () { - let data = [ [ "Boy", 20 ], [ "Girl", 25 ] ]; - let options = { "columns": [ "Gender", "Age" ] }; - let ndframe = new dfd.NDframe(data, options); - assert.deepEqual(ndframe.column_names, [ "Gender", "Age" ]); - }); - it("prints the size of a frame", function () { - let data = [ [ "Boy", 20, 1 ], [ "Girl", 25, 3 ] ]; - let options = { "columns": [ "Gender", "Age", "count" ] }; - let ndframe = new dfd.NDframe(data, options); - assert.deepEqual(ndframe.size, 6); - }); - it("prints the dimension of a frame", function () { - let data = [ [ "Boy", 20, 1 ], [ "Girl", 25, 3 ] ]; - let options = { "columns": [ "Gender", "Age", "count" ] }; - let ndframe = new dfd.NDframe(data, options); - assert.deepEqual(ndframe.ndim, 2); - }); - it("prints the values of a frame", function () { - let data = [ [ 21, 20, 1 ], [ 20, 25, 3 ] ]; - let ndframe = new dfd.NDframe(data); - assert.deepEqual(ndframe.values, data); - }); - it("prints the values of a frame", function () { - let data = [ [ 21, 20, 1 ], [ 20, 25, 3 ] ]; - let ndframe = new dfd.NDframe(data); - assert.deepEqual(ndframe.values, data); - }); - }); - - describe("NDframe Created from JavaScript Object", function () { - - it("prints the shape of a 2D frame created from an Object", function () { - let data = [ { alpha: "A", count: 1 }, { alpha: "B", count: 2 }, { alpha: "C", count: 3 } ]; - let ndframe = new dfd.NDframe(data); - assert.deepEqual(ndframe.shape, [ 3, 2 ]); - }); - it("prints the column names of frame created from an Object", function () { - let data = [ { alpha: "A", count: 1 }, { alpha: "B", count: 2 }, { alpha: "C", count: 3 } ]; - let ndframe = new dfd.NDframe(data); - assert.deepEqual(ndframe.column_names, [ "alpha", "count" ]); - }); - it("prints the shape of a 1D frame created from an Object", function () { - let data = [ { alpha: "A", count: 1 } ]; - let ndframe = new dfd.NDframe(data); - assert.deepEqual(ndframe.shape, [ 1, 2 ]); - }); - - it("prints the size of a frame created from an Object", function () { - let data = [ { alpha: "A", count: 1 }, { alpha: "B", count: 2 }, { alpha: "C", count: 3 } ]; - let options = { columns: [ "Gender", "Age", "count" ] }; - let ndframe = new dfd.NDframe(data, options); - assert.deepEqual(ndframe.size, 6); - }); - it("prints the dimension of a frame created from an Object", function () { - let data = [ { alpha: "A", count: 1 }, { alpha: "B", count: 2 } ]; - let options = { columns: [ "Gender", "Age", "count" ] }; - let ndframe = new dfd.NDframe(data, options); - assert.deepEqual(ndframe.ndim, 2); - }); - it("prints the values of a frame created from an Object", function () { - let data = [ { alpha: "A", count: 1 }, { alpha: "B", count: 2 } ]; - let ndframe = new dfd.NDframe(data); - assert.deepEqual(ndframe.values, [ [ "A", 1 ], [ "B", 2 ] ]); - }); - it("prints the values of a frame created from an Object with null values", function () { - let data = [ { alpha: "A", count: null }, { alpha: null, count: 2 } ]; - let ndframe = new dfd.NDframe(data); - assert.deepEqual(ndframe.values, [ [ "A", NaN ], [ NaN, 2 ] ]); - }); - }); - - describe("NDframe Created from a Tensor", function () { - - it("prints the shape of a 2D frame created from a 2D tensor", function () { - let data = tf.tensor([ 1, 2, 3, 4 ]); - let ndframe = new dfd.NDframe(data); - assert.deepEqual(ndframe.ndim, 1); - assert.deepEqual(ndframe.values, [ 1, 2, 3, 4 ]); - - }); - it("prints the shape of a 2D frame created from a 1D tensor", function () { - let data = tf.tensor([ [ 2, 3, 4 ], [ 4, 5, 6 ] ]); - let ndframe = new dfd.NDframe(data, { columns: [ "alpha", "count", "sum" ] }); - assert.deepEqual(ndframe.column_names, [ "alpha", "count", "sum" ]); - }); - - }); - - describe("index", function () { - it("Returns the index of an NDframe", function () { - let data = [ { alpha: "A", count: 1 }, { alpha: "B", count: 2 }, { alpha: "C", count: 3 } ]; - let df = new dfd.NDframe(data); - assert.deepEqual(df.index, [ 0, 1, 2 ]); - }); - it("Returns the index of an NDframe created from an Array", function () { - let data = [ [ 12, 2, 20 ], [ 90, 5, 23 ], [ 45, 56, 70 ], [ 9, 10, 19 ] ]; - let df = new dfd.NDframe(data); - assert.deepEqual(df.index, [ 0, 1, 2, 3 ]); - }); - }); - - describe("NDframe Created from JavaScript Object of Arrays", function () { - - it("retrieves the col data created from OA ", function () { - let data = { alpha: [ "A", "B", "C", "D" ], count: [ 1, 2, 3, 4 ] }; - let ndframe = new dfd.NDframe(data); - // assert.deepEqual(ndframe.shape, [4, 2]) - assert.deepEqual(ndframe.col_data, [ [ "A", "B", "C", "D" ], [ 1, 2, 3, 4 ] ]); - }); - it("retrieves the col data ", function () { - let data = { alpha: [ "A", "B", "C", "D" ], count: [ 1, 2, 3, 4 ], sum: [ 20.3, 30.456, 40.90, 90.1 ] }; - let ndframe = new dfd.NDframe(data); - let res = [ [ "A", "B", "C", "D" ], [ 1, 2, 3, 4 ], [ 20.3, 30.456, 40.90, 90.1 ] ]; - assert.deepEqual(ndframe.col_data, res); - }); - it("retrieves the row data created from OA ", function () { - let data = { alpha: [ "A", "B" ], count: [ 1, 2 ] }; - let ndframe = new dfd.NDframe(data); - // assert.deepEqual(ndframe.shape, [4, 2]) - assert.deepEqual(ndframe.values, [ [ "A", 1 ], [ "B", 2 ] ]); - }); - }); - - describe("__set_index", function () { - it("sets the index of an NDframe", function () { - let data = [ { alpha: "A", count: 1 }, { alpha: "B", count: 2 }, { alpha: "C", count: 3 } ]; - let df = new dfd.NDframe(data); - df.__set_index([ "A", "B", "C" ]); - assert.deepEqual(df.index, [ "A", "B", "C" ]); - }); - it("Returns the index of an NDframe created from an Array", function () { - let data = [ [ 12, 2, 20 ], [ 90, 5, 23 ], [ 45, 56, 70 ], [ 9, 10, 19 ] ]; - let df = new dfd.NDframe(data); - df.__set_index([ 10, 20, 30, 40 ]); - assert.deepEqual(df.index, [ 10, 20, 30, 40 ]); - }); - }); - - - describe("dtype", function () { - it("Returns int dtype set during creation of 1DFrame (Series) from an Object", function () { - let data = [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]; - let options = { dtypes: [ 'int32' ] }; - let ndframe = new dfd.NDframe(data, options); - assert.deepEqual(ndframe.dtypes, [ 'int32' ]); - }); - - it("Returns string dtype set during creation of 1DFrame (Series) from an Array", function () { - let data = [ "Alice", "Yemi", "Rising", "Mark" ]; - let options = { dtypes: [ 'string' ] }; - let ndframe = new dfd.NDframe(data, options); - assert.deepEqual(ndframe.dtypes, [ "string" ]); - }); - - it("Returns string dtype automatically inferred from 1DFrame (Series)", function () { - let data = [ "Alice", "Yemi", "Rising", "Mark" ]; - let options = { columns: 'Names' }; - let ndframe = new dfd.NDframe(data, options); - assert.deepEqual(ndframe.dtypes, [ "string" ]); - }); - - it("Returns int dtype automatically inferred from 1DFrame (Series)", function () { - let data = [ 20, 30, 20, 20 ]; - let options = { columns: 'Size' }; - let ndframe = new dfd.NDframe(data, options); - assert.deepEqual(ndframe.dtypes, [ "int32" ]); - }); - it("Returns float dtype automatically inferred from 1DFrame (Series)", function () { - let data = [ 20.1, 30.4, 20.2, 4.23, 20.1 ]; - let options = { columns: 'Size' }; - let ndframe = new dfd.NDframe(data, options); - assert.deepEqual(ndframe.dtypes, [ "float32" ]); - }); - - - it("Returns dtype set during creation of 2DFrame from an Object", function () { - let data = [ { alpha: "A", count: 1 }, { alpha: "B", count: 2 } ]; - let options = { dtypes: [ 'string', 'int32' ] }; - let ndframe = new dfd.NDframe(data, options); - assert.deepEqual(ndframe.dtypes, [ 'string', 'int32' ]); - }); - it("Returns dtype set during creation of 2DFrame from an Array", function () { - let data = [ [ "Alice", 2, 3.0 ], [ "Boy", 5, 6.1 ], [ "Girl", 30, 40 ], [ 39, 89, 78.2 ] ]; - let cols = [ "Name", "Count", "Score" ]; - let options = { columns: cols, dtypes: [ 'string', 'int32', 'float32' ] }; - let ndframe = new dfd.NDframe(data, options); - assert.deepEqual(ndframe.dtypes, [ "string", "int32", "float32" ]); - }); - - it("Returns dtype automatically inferred from 2DFrame", function () { - let data = [ [ "Alice", 2, 3.1 ], [ "Boy", 5, 6.1 ], [ "Girl", 30, 40.2 ], [ 39, 89, 78.2 ] ]; - let cols = [ "Name", "Count", "Score" ]; - let options = { columns: cols }; - let ndframe = new dfd.NDframe(data, options); - assert.deepEqual(ndframe.dtypes, [ "string", "int32", "float32" ]); - }); - - }); - - - describe("to_csv", async function () { - it("Converts DataFrame to csv format and return string", async function () { - let data = [ { alpha: "A", count: 1 }, { alpha: "B", count: 2 }, { alpha: "C", count: 3 } ]; - let df = new dfd.NDframe(data); - let result = `alpha,count\nA,1\nB,2\nC,3\n`; - df.to_csv().then((csv) => { - assert.deepEqual(csv, result); - }); - }); - it("Converts DataFrame of Series to csv format and return string when path is not specified", async function () { - let data = [ [ 12, 2, 20 ], [ 90, 5, 23 ], [ 45, 56, 70 ], [ 9, 10, 19 ] ]; - let df = new dfd.NDframe(data, { columns: [ "A", "B", "C" ] }); - let result = `A,B,C\n12,2,20\n90,5,23\n45,56,70\n9,10,19\n`; - assert.deepEqual(await df.to_csv(), result); - }); - }); - - describe("to_json", async function () { - it("Converts DataFrame to json format and return string", async function () { - let data = [ { alpha: "A", count: 1 }, { alpha: "B", count: 2 }, { alpha: "C", count: 3 } ]; - let result = JSON.stringify([ { alpha: "A", count: 1 }, { alpha: "B", count: 2 }, { alpha: "C", count: 3 } ]); - - let df = new dfd.NDframe(data); - df.to_json().then((json) => { - assert.deepEqual(json, result); - }); - }); - it("Converts DataFrame to json format", async function () { - let data = [ [ 12, 2, 20 ], [ 90, 5, 23 ], [ 45, 56, 70 ] ]; - let df = new dfd.NDframe(data, { columns: [ "A", "B", "C" ] }); - let result = JSON.stringify([ { A: 12, B: 2, C: 20 }, { A: 90, B: 5, C: 23 }, { A: 45, B: 56, C: 70 } ]); - df.to_json().then((json) => { - assert.deepEqual(json, result); - }); - }); - }); - - -}); diff --git a/danfojs-browser/tests/core/get_dummies.js b/danfojs-browser/tests/core/get_dummies.js deleted file mode 100644 index 2be074b2..00000000 --- a/danfojs-browser/tests/core/get_dummies.js +++ /dev/null @@ -1,149 +0,0 @@ -describe("get_dummies", function(){ - - it("test on array", function(){ - - let data = [ "dog", "male", "female", "male", "female", "male", "dog" ]; - - let df = dfd.get_dummies({ data:data }); - - let df_values = [ - [ 1, 0, 0 ], - [ 0, 1, 0 ], - [ 0, 0, 1 ], - [ 0, 1, 0 ], - [ 0, 0, 1 ], - [ 0, 1, 0 ], - [ 1, 0, 0 ] - ]; - let df_columns = [ 'dog', 'male', 'female' ]; - - assert.deepEqual(df.values, df_values); - assert.deepEqual(df.columns, df_columns); - - }); - it("test on Series", function(){ - - let data = [ "dog", "male", "female", "male", "female", "male", "dog" ]; - let series = new dfd.Series(data); - - let df = dfd.get_dummies({ data:series, prefix:"test", prefix_sep:"/" }); - - let df_values = [ - [ 1, 0, 0 ], - [ 0, 1, 0 ], - [ 0, 0, 1 ], - [ 0, 1, 0 ], - [ 0, 0, 1 ], - [ 0, 1, 0 ], - [ 1, 0, 0 ] - ]; - let df_columns = [ 'test/dog', 'test/male', 'test/female' ]; - - assert.deepEqual(df.values, df_values); - assert.deepEqual(df.columns, df_columns); - }); - - it("get dummies on DataFrame", function(){ - - let data = [ [ 1, "dog", 1.0, "fat" ], [ 3, "fog", 2.0, "good" ], [ 4, "gof", 3.0, "best" ] ]; - let columns = [ "A", "B", "C", "d" ]; - let df = new dfd.DataFrame(data, { columns:columns }); - - let df1 = dfd.get_dummies({ data:df, prefix_sep:"_", columns:[ "A", "d" ] }); - let df1_columns = [ - 'C', 'd', - 'A_1', 'A_3', - 'A_4', 'd_dog', - 'd_fog', 'd_gof' - ]; - - let df1_values = [ - [ 1, 'fat', 1, 0, 0, 1, 0, 0 ], - [ 2, 'good', 0, 1, 0, 0, 1, 0 ], - [ 3, 'best', 0, 0, 1, 0, 0, 1 ] - ]; - - assert.deepEqual(df1.values, df1_values); - assert.deepEqual(df1.columns, df1_columns); - - }); - it("Throw error if the prefix specified is not equal to the column specified", function(){ - - let data = [ [ 1, "dog", 1.0, "fat" ], [ 3, "fog", 2.0, "good" ], [ 4, "gof", 3.0, "best" ] ]; - let columns = [ "A", "B", "C", "d" ]; - let df = new dfd.DataFrame(data, { columns:columns }); - - assert.throws(function () { dfd.get_dummies({ data:df, prefix:[ "fg" ], prefix_sep:"_", columns:[ "A", "d" ] }); }, Error, - 'prefix must be the same length with the number of onehot encoding column'); - - }); - it("replace column sepecified with prefix", function(){ - - let data = [ [ 1, "dog", 1.0, "fat" ], [ 3, "fog", 2.0, "good" ], [ 4, "gof", 3.0, "best" ] ]; - let columns = [ "A", "B", "C", "d" ]; - let df = new dfd.DataFrame(data, { columns:columns }); - - let df1 = dfd.get_dummies({ data:df, prefix:[ "F", "G" ], prefix_sep:"_", columns:[ "A", "d" ] }); - let df1_columns = [ - 'C', 'd', - 'F_1', 'F_3', - 'F_4', 'G_dog', - 'G_fog', 'G_gof' - ]; - - let df1_values = [ - [ 1, 'fat', 1, 0, 0, 1, 0, 0 ], - [ 2, 'good', 0, 1, 0, 0, 1, 0 ], - [ 3, 'best', 0, 0, 1, 0, 0, 1 ] - ]; - - assert.deepEqual(df1.values, df1_values); - assert.deepEqual(df1.columns, df1_columns); - - }); - - it("infer the onehotencoding column base on string dtypes", function(){ - - let data = [ [ 1, "dog", 1.0, "fat" ], [ 3, "fog", 2.0, "good" ], [ 4, "gof", 3.0, "best" ] ]; - let columns = [ "A", "B", "C", "d" ]; - let df = new dfd.DataFrame(data, { columns:columns }); - - let df1 = dfd.get_dummies({ data:df, prefix_sep:"_" }); - let df1_columns = [ - 'A', 'C', - 'B_dog', 'B_fog', - 'B_gof', 'd_fat', - 'd_good', 'd_best' - ]; - let df1_values = [ - [ - 1, 1, 1, 0, - 0, 1, 0, 0 - ], - [ - 3, 2, 0, 1, - 0, 0, 1, 0 - ], - [ - 4, 3, 0, 0, - 1, 0, 0, 1 - ] - ]; - - assert.deepEqual(df1.values, df1_values); - assert.deepEqual(df1.columns, df1_columns); - - }); - it("replace column sepecified with prefix", function(){ - - let data = [ [ 1, "dog", 1.0, "fat" ], [ 3, "fog", 2.0, "good" ], [ 4, "gof", 3.0, "best" ] ]; - let columns = [ "A", "B", "C", "d" ]; - let df = new dfd.DataFrame(data, { columns:columns }); - - assert.throws(function () { dfd.get_dummies({ data:df, prefix:"F", prefix_sep:"_", columns:[ "A", "d" ] }); }, Error, - "prefix for dataframe must be an array"); - - }); - - -}); diff --git a/danfojs-browser/tests/core/series.js b/danfojs-browser/tests/core/series.js deleted file mode 100644 index 3d079cf9..00000000 --- a/danfojs-browser/tests/core/series.js +++ /dev/null @@ -1,1304 +0,0 @@ -/* eslint-disable no-undef */ -const tf = require("@tensorflow/tfjs"); - -describe("Series", function () { - describe("tensor", function () { - it("Returns the tensor object of a Series", function () { - let data = [ 1, 2, 3, 4, 5, 620, 30, 40, 39, 89, 78 ]; - let sf = new dfd.Series(data); - assert.deepEqual(sf.tensor.dtype, "int32"); - }); - it("Returns the float dtype of a tensor object", function () { - let data = [ 1.1, 2.2, 3, 4.1, 5, 620, 30.1, 40, 39, 89, 78 ]; - let sf = new dfd.Series(data); - assert.deepEqual(sf.tensor.dtype, "float32"); - }); - it("Compares a tensor returned from a Series to Tensorflow's tensor", function () { - let data = [ 1.1, 2.2, 3, 4.1, 5, 620, 30.1, 40, 39, 89, 78 ]; - let sf = new dfd.Series(data); - let tf_data = tf.tensor(data); - assert.deepEqual(sf.tensor.arraySync(), tf_data.arraySync()); - }); - }); - describe("tensor", function () { - it("Returns the dtype string Series", function () { - let data = [ "b", "c", "d" ]; - let sf = new dfd.Series(data); - assert.deepEqual(sf.dtype, "string"); - }); - it("Returns the dtype int Series", function () { - let data = [ 1, 2, 3, 4, 5 ]; - let sf = new dfd.Series(data); - assert.deepEqual(sf.dtype, "int32"); - }); - it("Returns the dtype int Series", function () { - let data = [ 1.1, 2.2, 3.3, 4.5, 5 ]; - let sf = new dfd.Series(data); - assert.deepEqual(sf.dtype, "float32"); - }); - }); - - describe("head", function () { - it("Gets the first n rows in a Series", function () { - let data = [ 1, 2, 3, 4, 5, 620, 30, 40, 39, 89, 78 ]; - let cols = [ "A" ]; - let sf = new dfd.Series(data, { columns: cols }); - assert.deepEqual(sf.head(2).values, [ 1, 2 ]); - }); - it("Return all rows in a Series if row specified is greater than values", function () { - let data = [ "Boy", "Girl", "Man", "Woman", "Tall" ]; - let cols = [ "Items" ]; - let sf = new dfd.Series(data, { columns: cols }); - assert.deepEqual(sf.head(10).values, data); - }); - it("Return all rows in a Series if row specified is less than 0", function () { - let data = [ 1, 2, 3, 4, 5, 620, 30, 40, 39, 89, 78 ]; - let sf = new dfd.Series(data); - assert.deepEqual(sf.head(-1).values, data); - }); - }); - - describe("tail", function () { - it("Prints the last n rows of a Series", function () { - let data = [ 1, 2, 3, 4, 5, 620, 30, 40, 39, 89, 78 ]; - let sf = new dfd.Series(data); - assert.deepEqual(sf.tail(2).values, [ 89, 78 ]); - }); - it("Return all rows in a Series if row specified is greater than values", function () { - let data = [ 1, 2, 3, 4, 5, 620, 30, 40, 39, 89, 78 ]; - let sf = new dfd.Series(data); - assert.deepEqual(sf.tail(15).values, data); - }); - it("Return all rows in a Series if row specified is less than 0", function () { - let data = [ "Boy", "Girl", "Man", "Woman", "Tall" ]; - let cols = [ "Items" ]; - let sf = new dfd.Series(data, { columns: cols }); - assert.deepEqual(sf.tail(-1).values, data); - }); - }); - - describe("sample", function () { - it("Samples n number of random elements from a DataFrame", async function () { - let data = [ 1, 2, 3, 4, 5, 620, 30, 40, 39, 89, 78 ]; - let sf = new dfd.Series(data); - assert.deepEqual((await sf.sample(7)).values.length, 7); - }); - it("Return all values if n of sample -1", async function () { - let data = [ 1, 2, 3, 4, 5, 620, 30, 40, 39, 89, 78 ]; - let sf = new dfd.Series(data); - assert.deepEqual((await sf.sample(-1)).values.length, data.length); - }); - it("Throw error if n is greater than lenght of Series", async function () { - let data = [ 1, 2, 3, 4, 5, 620, 30, 40, 39, 89, 78 ]; - let sf = new dfd.Series(data); - try { - await sf.sample(100); - } catch (e) { - expect(e).to.be.instanceOf(Error); - expect(e.message).to.eql('Sample size n cannot be bigger than size of dataset'); - } - }); - }); - - describe("add", function () { - it("Return Addition of series with another series", function () { - let data = [ 1, 2, 3, 4, 5, 6 ]; - let data2 = [ 30, 40, 39, 1, 2, 1 ]; - let sf = new dfd.Series(data); - let sf2 = new dfd.Series(data2); - assert.deepEqual(sf.add(sf2).values, [ 31, 42, 42, 5, 7, 7 ]); - }); - it("Return Addition of series with a single value (Broadcasting)", function () { - let data = [ 1, 2, 3, 4, 5 ]; - let sf = new dfd.Series(data); - assert.deepEqual(sf.add(1).values, [ 2, 3, 4, 5, 6 ]); - }); - it("Throws type error on addition of string type", function () { - let data = [ 1, 2, 3, 4 ]; - let data2 = [ "A", "B", "C", "d" ]; - let sf = new dfd.Series(data); - let sf2 = new dfd.Series(data2); - assert.throws( - () => { - sf.add(sf2); - }, - Error, - "Argument 'x' passed to 'cast' must be numeric tensor, but got string tensor" - ); - }); - // it("Throws length error if series lenght mixmatch", function () { - // let data = [1, 2, 3, 4] - // let data2 = [1, 2, 3, 4, 5, 6] - // let sf = new dfd.Series(data) - // let sf2 = new dfd.Series(data2) - // assert.throws(() => { sf.add(sf2) }, Error, "Incompatible shapes: [4] vs. [6]") - // }) - }); - - describe("sub", function () { - it("Return Subtraction of series with another series", function () { - let data1 = [ 30, 40, 39, 1, 2, 1 ]; - let data2 = [ 1, 2, 3, 4, 5, 6 ]; - let sf1 = new dfd.Series(data1); - let sf2 = new dfd.Series(data2); - assert.deepEqual(sf1.sub(sf2).values, [ 29, 38, 36, -3, -3, -5 ]); - }); - it("Return Subtraction of series with a single value (Broadcasting)", function () { - let data = [ 1, 2, 3, 4, 5 ]; - let sf = new dfd.Series(data); - assert.deepEqual(sf.sub(1).values, [ 0, 1, 2, 3, 4 ]); - }); - it("Throws type error on Subtraction of string type", function () { - let data = [ 1, 2, 3, 4 ]; - let data2 = [ "A", "B", "C", "d" ]; - let sf = new dfd.Series(data); - let sf2 = new dfd.Series(data2); - assert.throws( - () => { - sf.sub(sf2); - }, - Error, - "Argument 'x' passed to 'cast' must be numeric tensor, but got string tensor" - ); - }); - // it("Throws length error if series lenght mixmatch", function () { - // let data = [1, 2, 3, 4] - // let data2 = [1, 2, 3, 4, 5, 6] - // let sf = new dfd.Series(data) - // let sf2 = new dfd.Series(data2) - // assert.throws(() => { sf.sub(sf2) }, Error, "Incompatible shapes: [4] vs. [6]") - // }) - }); - - describe("mul", function () { - it("Return multiplication of series with another series", function () { - let data1 = [ 30, 40, 3, 5 ]; - let data2 = [ 1, 2, 3, 4 ]; - let sf1 = new dfd.Series(data1); - let sf2 = new dfd.Series(data2); - assert.deepEqual(sf1.mul(sf2).values, [ 30, 80, 9, 20 ]); - }); - it("Return multiplication of series with a single value (Broadcasting)", function () { - let data = [ 1, 2, 3, 4, 5 ]; - let sf = new dfd.Series(data); - assert.deepEqual(sf.mul(1).values, [ 1, 2, 3, 4, 5 ]); - }); - // it("Throws type error on multiplication of string type", function () { - // let data = [1, 2, 3, 4] - // let data2 = ["A", "B", "C", "d"] - // let sf = new dfd.Series(data) - // let sf2 = new dfd.Series(data2) - // assert.throws(() => { sf.mul(sf2) }, Error, "Argument 'x' passed to 'cast' must be numeric tensor, but got string tensor") - // }) - // it("Throws length error if series lenght mixmatch", function () { - // let data = [1, 2, 3, 4] - // let data2 = [1, 2, 3, 4, 5, 6] - // let sf = new dfd.Series(data) - // let sf2 = new dfd.Series(data2) - // assert.throws(() => { sf.mul(sf2) }, Error, "Operands could not be broadcast together with shapes 4 and 6") - // }) - }); - - describe("div", function () { - it("Return float division of series with another series", function () { - let data1 = [ 30, 40, 3, 5 ]; - let data2 = [ 1, 2, 3, 4 ]; - let sf1 = new dfd.Series(data1); - let sf2 = new dfd.Series(data2); - assert.deepEqual(sf1.div(sf2).values, [ 30, 20, 1, 1.25 ]); - }); - it("Return integer division of series with another series", function () { - let data1 = [ 30, 40, 3, 5 ]; - let data2 = [ 1, 2, 3, 4 ]; - let sf1 = new dfd.Series(data1); - let sf2 = new dfd.Series(data2); - assert.deepEqual(sf1.div(sf2, false).values, [ 30, 20, 1, 1 ]); - }); - it("Return division of series with a single value (Broadcasting)", function () { - let data = [ 10, 2, 3, 90 ]; - let sf = new dfd.Series(data); - assert.deepEqual(sf.div(2).values, [ 5, 1, 1.5, 45 ]); - }); - // it("Throws type error on division of string type", function () { - // let data = [1, 2, 3, 4] - // let data2 = ["A", "B", "C", "d"] - // let sf = new dfd.Series(data) - // let sf2 = new dfd.Series(data2) - // assert.throws(() => { sf.mul(sf2) }, Error, "Argument 'x' passed to 'cast' must be numeric tensor, but got string tensor") - // }) - // it("Throws length error if series lenght mixmatch", function () { - // let data = [1, 2, 3, 4] - // let data2 = [1, 2, 3, 4, 5, 6] - // let sf = new dfd.Series(data) - // let sf2 = new dfd.Series(data2) - // assert.throws(() => { sf.mul(sf2) }, Error, "Operands could not be broadcast together with shapes 4 and 6") - // }) - }); - - describe("pow", function () { - it("Return Exponetial power of series with another series", function () { - let data1 = [ 2, 3, 4, 5 ]; - let data2 = [ 1, 2, 3, 0 ]; - let sf1 = new dfd.Series(data1); - let sf2 = new dfd.Series(data2); - assert.deepEqual(sf1.pow(sf2).values, [ 2, 9, 64, 1 ]); - }); - it("Return Exponetial power of series with a single value (Broadcasting)", function () { - let data = [ 1, 2, 3, 4, 5 ]; - let sf = new dfd.Series(data); - assert.deepEqual(sf.pow(2).values, [ 1, 4, 9, 16, 25 ]); - }); - }); - - describe("mod", function () { - it("Return modulo of series with another float series", function () { - let data1 = [ 2, 30, 4, 5 ]; - let data2 = [ 1.1, 2.2, 3.3, 2.4 ]; - let sf1 = new dfd.Series(data1); - let sf2 = new dfd.Series(data2); - let expected = [ - 0.8999999761581421, - 1.3999993801116943, - 0.7000000476837158, - 0.19999980926513672 - ]; - assert.deepEqual(sf1.mod(sf2).values, expected); - }); - it("Return modulo of series with another int series", function () { - let data1 = [ 2, 30, 4, 5 ]; - let data2 = [ 1, 2, 3, 1 ]; - let sf1 = new dfd.Series(data1); - let sf2 = new dfd.Series(data2); - assert.deepEqual(sf1.mod(sf2).values, [ 0, 0, 1, 0 ]); - }); - it("Return modulo power of series with a single value (Broadcasting)", function () { - let data = [ 1, 2, 3, 4, 5 ]; - let sf = new dfd.Series(data); - assert.deepEqual(sf.mod(2).values, [ 1, 0, 1, 0, 1 ]); - }); - }); - - describe("mean", function () { - it("Computes the mean of elements in a int series", function () { - let data1 = [ 30, 40, 3, 5 ]; - let sf = new dfd.Series(data1); - assert.deepEqual(sf.mean(), 19.5); - }); - it("Computes the mean of elements in a float series", function () { - let data1 = [ 30.1, 40.2, 3.1, 5.1 ]; - let sf = new dfd.Series(data1); - assert.deepEqual(sf.mean(), 19.625); - }); - it("Computes the mean of elements in a float series with NaN", function () { - let data1 = [ 30.1, 40.2, 3.1, 5.1, NaN ]; - let sf = new dfd.Series(data1); - assert.deepEqual(sf.mean(), 19.625); - }); - it("Throws error if dtype is string", function () { - let data1 = [ "boy", "girl", "Man" ]; - let sf = new dfd.Series(data1); - assert.throws( - () => { - sf.mean(); - }, - Error, - "dtype error: String data type does not support mean operation" - ); - }); - }); - - describe("median", function () { - it("Computes the median value of elements across int Series", function () { - let data1 = [ 30, 40, 3, 5 ]; - let sf = new dfd.Series(data1); - assert.deepEqual(sf.median(), 17.5); - }); - it("Computes the median value of elements across float Series", function () { - let data1 = [ 30.1, 40.2, 3.1, 5.1 ]; - let sf = new dfd.Series(data1); - assert.deepEqual(sf.median(), 17.6); - }); - }); - - describe("sum", function () { - it("Sum values of a Int Series", function () { - let data1 = [ 30, 40, 3, 5, 5, 5, 5, 5, 3, 3, 3, 21, 3 ]; - let sf = new dfd.Series(data1); - assert.deepEqual(sf.sum(), 131); - }); - it("Sum values of a Float Series", function () { - let data1 = [ 30.1, 3.1, 40.2, 3.1, 5.1 ]; - let sf = new dfd.Series(data1); - assert.deepEqual(sf.sum(), 81.6); - }); - it("Sum values of a bool Series", function () { - let data1 = [ true, true, false, false, false ]; - let sf = new dfd.Series(data1); - assert.deepEqual(sf.sum(), 2); - }); - it("Sum values a Series with missing values", function () { - let data1 = [ 11, NaN, 2, 2 ]; - let sf = new dfd.Series(data1); - assert.deepEqual(sf.sum(), 15); - }); - }); - - describe("mode", function () { - it("Computes the multi-modal values of a Series", function () { - let data1 = [ 30, 40, 3, 5, 5, 5, 5, 5, 3, 3, 3, 21, 3 ]; - let sf = new dfd.Series(data1); - assert.deepEqual(sf.mode(), [ 5, 3 ]); - }); - it("Computes the modal value of a Series", function () { - let data1 = [ 30.1, 3.1, 40.2, 3.1, 5.1, NaN ]; - let sf = new dfd.Series(data1); - assert.deepEqual(sf.mode(), [ 3.1 ]); - }); - }); - - describe("min", function () { - it("Returns the single smallest elementin a Series", function () { - let data = [ 30, 40, 3, 5 ]; - let sf = new dfd.Series(data); - assert.deepEqual(sf.min(), 3); - }); - it("Computes the minimum of elements across an float Series", function () { - let data1 = [ 30.1, 40.2, 3.12, 5.1 ]; - let sf = new dfd.Series(data1, { dtypes: [ "float32" ] }); - assert.deepEqual(Number(sf.min().toFixed(2)), 3.12); - }); - }); - - describe("max", function () { - it("Computes the maximum of elements across dimensions of a Series", function () { - let data1 = [ 30, 40, 3, 5 ]; - let sf = new dfd.Series(data1); - assert.deepEqual(sf.max(), 40); - }); - it("Return sum of float values in a series", function () { - let data1 = [ 30.1, 40.21, 3.1, 5.1 ]; - let sf = new dfd.Series(data1); - assert.deepEqual(Number(sf.max().toFixed(2)), 40.21); - }); - it("Throws error on addition of string Series", function () { - let data1 = [ "boy", "gitl", "woman", "man" ]; - let sf = new dfd.Series(data1); - assert.throws( - () => { - sf.max(); - }, - Error, - "dtype error: String data type does not support max operation" - ); - }); - }); - - describe("std", function () { - it("Computes the standard of elements in a int series", function () { - let data1 = [ 30, 40, 3, 5 ]; - let sf = new dfd.Series(data1); - assert.deepEqual(sf.std(), 18.375708603116962); - }); - it("Computes the standard deviation of elements in a float series", function () { - let data1 = [ 30.1, 40.2, 3.1, 5.1 ]; - let sf = new dfd.Series(data1); - assert.deepEqual(sf.std(), 18.412925713566906); - }); - it("Computes the standard deviation of elements in a float series with missing values", function () { - let data1 = [ 30, 40, 3, 5, undefined ]; - let sf = new dfd.Series(data1); - assert.deepEqual(sf.std(), 18.375708603116962); - }); - }); - - describe("var", function () { - it("Computes the variance of elements in a int series", function () { - let data1 = [ 30, 40, 3, 5 ]; - let sf = new dfd.Series(data1); - assert.deepEqual(sf.var(), 337.6666666666667); - }); - it("Computes the variance of elements in a float series", function () { - let data1 = [ 30.1, 40.2, 3.1, 5.1 ]; - let sf = new dfd.Series(data1); - assert.deepEqual(sf.var(), 339.03583333333336); - }); - it("Computes the variance of elements in a int series with missing values", function () { - let data1 = [ 30, undefined, 40, 3, 5 ]; - let sf = new dfd.Series(data1); - assert.deepEqual(sf.var(), 337.6666666666667); - }); - }); - - describe("describe", function () { - it("Computes the descriptive statistics on an int Series", function () { - let data1 = [ 10, 45, 56, 25, 23, 20, 10 ]; - let sf = new dfd.Series(data1); - assert.deepEqual(sf.describe().round().values, [ - 7, - 27, - 17, - 10, - 23, - 56, - 302 - ]); - }); - it("Computes the descriptive statistics on a float Series", function () { - let data1 = [ 30.1, 40.2, 3.1, 5.1 ]; - let sf = new dfd.Series(data1); - assert.deepEqual(sf.describe().round().values, [ - 4, - 20, - 18, - 3, - 18, - 40, - 339 - ]); - }); - it("Computes the descriptive statistics on a float Series", function () { - let data1 = [ 30.1, 40.2, 3.1, 5.1 ]; - let sf = new dfd.Series(data1); - assert.deepEqual(sf.describe().index, [ - "count", - "mean", - "std", - "min", - "median", - "max", - "variance" - ]); - }); - }); - - describe("maximum", function () { - it("Returns the max of a and b (a > b ? a : b) element-wise. Supports broadcasting.", function () { - let data1 = [ 30, 40, 3, 5 ]; - let data2 = [ 10, 41, 2, 0 ]; - let sf1 = new dfd.Series(data1); - let sf2 = new dfd.Series(data2); - assert.deepEqual(sf1.maximum(sf2).values, [ 30, 41, 3, 5 ]); - }); - it("Throws error on checking maximum of incompatible Series", function () { - let data1 = [ 30, 40, 3, 5 ]; - let data2 = [ 10, 41, 2 ]; - let sf1 = new dfd.Series(data1); - let sf2 = new dfd.Series(data2); - assert.throws( - () => { - sf1.maximum(sf2); - }, - Error, - "Operands could not be broadcast together with shapes 4 and 3" - ); - }); - }); - - describe("minimum", function () { - it("Returns the min of a and b (a < b ? a : b) element-wise. Supports broadcasting.", function () { - let data1 = [ 30, 40, 3, 5 ]; - let data2 = [ 10, 41, 2, 0 ]; - let sf1 = new dfd.Series(data1); - let sf2 = new dfd.Series(data2); - assert.deepEqual(sf1.minimum(sf2).values, [ 10, 40, 2, 0 ]); - }); - // it("Return sum of float values in a series", function () { - // let data1 = [30.1, 40.9, 3, 5] - // let data2 = [10.2, 41, 2, 0] - // let sf1 = new dfd.Series(data1) - // let sf2 = new dfd.Series(data2) - // assert.deepEqual(sf1.minimum(sf2).values, [30, 41, 3, 5]) - - // }) - }); - - describe("count", function () { - it("Returns the count of non NaN values in a string Series", function () { - let data = [ "boy", "gitl", "woman", NaN ]; - let sf = new dfd.Series(data); - assert.deepEqual(sf.count(), 3); - }); - it("Returns the count of non NaN values in a string Series", function () { - let data = [ "boy", "gitl", "woman", "Man" ]; - let sf = new dfd.Series(data); - assert.deepEqual(sf.count(), 4); - }); - it("Returns the count of non NaN values in a int Series", function () { - let data = [ 20, 30, NaN, 2, NaN, 30, 21 ]; - let sf = new dfd.Series(data); - assert.deepEqual(sf.count(), 5); - }); - it("Returns the count of non NaN values in a float Series", function () { - let data = [ 20.1, 30.4, NaN, 2.1, NaN, 30.0, 21.3 ]; - let sf = new dfd.Series(data); - assert.deepEqual(sf.count(), 5); - }); - }); - - describe("round", function () { - it("Rounds elements in a Series to nearest whole number", function () { - let data1 = [ 30.21091, 40.190901, 3.564, 5.0212 ]; - let sf = new dfd.Series(data1); - assert.deepEqual(sf.round().values, [ 30, 40, 4, 5 ]); - }); - it("Rounds elements in a Series to 1dp", function () { - let data1 = [ 30.21091, 40.190901, 3.564, 5.0212 ]; - let sf = new dfd.Series(data1); - assert.deepEqual(sf.round(1).values, [ 30.2, 40.2, 3.6, 5.0 ]); - }); - it("Rounds elements in a Series to 2dp", function () { - let data1 = [ 30.2191, 40.190901, 3.564, 5.0212 ]; - let sf = new dfd.Series(data1); - assert.deepEqual(sf.round(2).values, [ 30.22, 40.19, 3.56, 5.02 ]); - }); - }); - - describe("isna", function () { - it("Return a boolean same-sized object indicating if string Series contain NaN", function () { - let data1 = [ NaN, undefined, "girl", "Man" ]; - let sf = new dfd.Series(data1); - assert.deepEqual(sf.isna().values, [ true, true, false, false ]); - }); - it("Return a boolean same-sized object indicating if float Series values are NaN", function () { - let data1 = [ 30.21091, NaN, 3.564, undefined ]; - let sf = new dfd.Series(data1); - assert.deepEqual(sf.isna().values, [ false, true, false, true ]); - }); - it("Return a boolean same-sized object indicating if int Series values are NaN", function () { - let data1 = [ 30, 40, 3, 5, undefined, undefined ]; - let sf = new dfd.Series(data1); - assert.deepEqual(sf.isna().values, [ - false, - false, - false, - false, - true, - true - ]); - }); - }); - - describe("sort_values", function () { - it("Sort values in a Series in ascending order (not inplace)", function () { - let sf = new dfd.Series([ 20, 30, 1, 2, 4, 57, 89, 0, 4 ]); - let result = [ 0, 1, 2, 4, 4, 20, 30, 57, 89 ]; - let sorted_sf = sf.sort_values(); - assert.deepEqual(sorted_sf.values, result); - }); - it("confirms that sort_values in ascending order does not happen inplace", function () { - let sf = new dfd.Series([ 20, 30, 1, 2, 4, 57, 89, 0, 4 ]); - let result = [ 0, 1, 2, 4, 4, 20, 30, 57, 89 ]; - let expected_index = [ 7, 2, 3, 8, 4, 0, 1, 5, 6 ]; - sf.sort_values({ inplace: true }); - assert.deepEqual(sf.values, result); - assert.deepEqual(sf.index, expected_index); - }); - it("Sort values in a Series in Descending order", function () { - let sf = new dfd.Series([ 20, 30, 1, 2, 4, 57, 89, 0, 4 ]); - let result = [ 89, 57, 30, 20, 4, 4, 2, 1, 0 ]; - let sorted_sf = sf.sort_values({ ascending: false }); - assert.deepEqual(sorted_sf.values, result); - }); - it("confirms that sort_values in descending order happens inplace", function () { - let sf = new dfd.Series([ 20, 30, 1, 2, 4, 57, 89, 0, 4 ]); - let result = [ 89, 57, 30, 20, 4, 4, 2, 1, 0 ]; - sf.sort_values({ ascending: false, inplace: true }); - assert.deepEqual(sf.values, result); - }); - it("Confirms that series index is sorted in ascending order (not in inplace)", function () { - let sf = new dfd.Series([ 20, 30, 1, 2, 4, 57, 89, 0, 4 ]); - let result = [ 7, 2, 3, 8, 4, 0, 1, 5, 6 ]; - let sorted_sf = sf.sort_values(); - assert.deepEqual(sorted_sf.index, result); - }); - it("Confirms that series index is sorted in descending order (not in inplace)", function () { - let sf = new dfd.Series([ 20, 30, 1, 2, 4, 57, 89, 0, 4 ]); - let result = [ 6, 5, 1, 0, 4, 8, 3, 2, 7 ]; - let sorted_sf = sf.sort_values({ ascending: false }); - assert.deepEqual(sorted_sf.index, result); - }); - it("Sort string values in a Series", function () { - let sf = new dfd.Series([ "boy", "zebra", "girl", "man" ]); - let result = [ "boy", "girl", "man", "zebra" ]; - let sorted_sf = sf.sort_values({ ascending: false }); - assert.deepEqual(sorted_sf.values, result); - }); - // it("Throws error on sorting of string", function () { - // let sf = new dfd.Series(["boy", "man", "girl"]) - // assert.throws(() => { sf.sort_values() }, Error, "Dtype Error: cannot sort Series of type string") - // }) - }); - - describe("copy", function () { - it("Checks if copied values are the same as the first one", function () { - let sf = new dfd.Series([ 30.21091, 40.190901, 3.564, 5.0212 ]); - let sf_copy = sf.copy(); - assert.deepEqual(sf.values, sf_copy.values); - }); - it("Checks if copied index are the same", function () { - let sf = new dfd.Series([ 30.21091, 40.190901, 3.564, 5.0212 ]); - sf = sf.set_index({ index: [ "a", "b", "c", "d" ] }); - let sf_copy = sf.copy(); - assert.deepEqual(sf.index, sf_copy.index); - }); - // it("Checks if copied dtype is the same", function () { - // let sf = new dfd.Series([30.21091, 40.190901, 3.564, 5.0212]) - // sf.round() - // sf.astype(['int32']) - // let sf_copy = sf.copy() - // assert.deepEqual(sf.dtypes[0], sf_copy.dtypes[0]) - // assert.deepEqual(sf.values, sf_copy.values) - - // }) - }); - - describe("reset_index", function () { - it("resets the index of a Series", function () { - let data = [ - { alpha: "A", count: 1 }, - { alpha: "B", count: 2 }, - { alpha: "C", count: 3 } - ]; - let df = new dfd.Series(data); - let df_new = df.set_index({ index: [ "one", "two", "three" ] }); - let df_reset = df_new.reset_index(); - assert.deepEqual(df_reset.index, [ 0, 1, 2 ]); - }); - it("Reset the index of a Series created from an Array", function () { - let data = [ 1, 2, 3, 4, 5, 6 ]; - let df = new dfd.Series(data); - df.set_index({ - index: [ "one", "two", "three", "four", "five", "six" ], - inplace: true - }); - let df_new = df.reset_index(); - assert.deepEqual(df_new.index, [ 0, 1, 2, 3, 4, 5 ]); - }); - it("checks that the original series changed after reseting new index inplace", function () { - let data = [ - { alpha: "A", count: 1 }, - { alpha: "B", count: 2 }, - { alpha: "C", count: 3 } - ]; - let df = new dfd.Series(data); - df.reset_index({ inplace: true }); - assert.deepEqual(df.index, [ 0, 1, 2 ]); - }); - }); - - describe("set_index", function () { - it("sets the index of an Series", function () { - let data = [ - { alpha: "A", count: 1 }, - { alpha: "B", count: 2 }, - { alpha: "C", count: 3 } - ]; - let df = new dfd.Series(data); - let df_new = df.set_index({ index: [ "one", "two", "three" ] }); - assert.deepEqual(df_new.index, [ "one", "two", "three" ]); - assert.notDeepEqual(df.index, df_new.index); - }); - it("checks that the original series is not modified after setting new index not-inplace", function () { - let data = [ - { alpha: "A", count: 1 }, - { alpha: "B", count: 2 }, - { alpha: "C", count: 3 } - ]; - let df = new dfd.Series(data); - let df_new = df.set_index({ index: [ "one", "two", "three" ] }); - assert.notDeepEqual(df.index, df_new.index); - }); - it("sets the index of an Series inplace", function () { - let data = [ 12, 2, 20, 50 ]; - let df = new dfd.Series(data); - df.set_index({ index: [ "one", "two", "three", "four" ], inplace: true }); - assert.deepEqual(df.index, [ "one", "two", "three", "four" ]); - }); - }); - - describe("Map", function () { - it("map series element to object keys", function () { - let sf = new dfd.Series([ 1, 2, 3, 4 ]); - let map = { 1: "ok", 2: "okie", 3: "frit", 4: "gop" }; - - let rslt = [ "ok", "okie", "frit", "gop" ]; - - assert.deepEqual(sf.map(map).values, rslt); - }); - - it("map series element to a function statement", function () { - let sf = new dfd.Series([ 1, 2, 3, 4 ]); - let func_map = (x) => { - return x + 1; - }; - - let rslt = [ 2, 3, 4, 5 ]; - - assert.deepEqual(sf.map(func_map).values, rslt); - }); - }); - - describe("Apply", function () { - it("apply a function to a series element", function () { - let sf = new dfd.Series([ 1, 2, 3, 4, 5, 6, 7, 8 ]); - - let apply_func = (x) => { - return x + x; - }; - - let rslt = [ 2, 4, 6, 8, 10, 12, 14, 16 ]; - assert.deepEqual(sf.apply(apply_func).values, rslt); - }); - }); - - describe("unique", function () { - it("returns the unique values in a Series of type int", function () { - let sf = new dfd.Series([ 1, 2, 3, 4, 5, 6, 7, 8, 1, 1, 22, 8, 5, 5, 5 ]); - let expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 22 ]; - assert.deepEqual(sf.unique().values, expected); - }); - it("returns the unique values in a Series of type string", function () { - let sf = new dfd.Series([ "a", "a", "b", "c", "c", "d", "e", "d", "d", "e" ]); - let expected = [ "a", "b", "c", "d", "e" ]; - assert.deepEqual(sf.unique().values, expected); - }); - it("returns the unique values in a Series of type string", function () { - let sf = new dfd.Series([ "a", "a", "b", "c", "c", "d", "e", "d", "d", "e" ]); - let expected = [ "a", "b", "c", "d", "e" ]; - assert.deepEqual(sf.unique().values, expected); - }); - it("returns the nunique values in a Series of type string", function () { - let sf = new dfd.Series([ "a", "a", "b", "c", "c", "d", "e", "d", "d", "e" ]); - let expected = 5; - assert.deepEqual(sf.nunique(), expected); - }); - }); - - describe("value_counts", function () { - it("returns the unique values and their counts in a Series of type int", function () { - let sf = new dfd.Series([ 1, 2, 3, 4, 5, 6, 7, 8, 1, 1, 22, 8, 5, 5, 5 ]); - let expected_index = [ 1, 2, 3, 4, 5, 6, 7, 8, 22 ]; - let expected_vals = [ 3, 1, 1, 1, 4, 1, 1, 2, 1 ]; - assert.deepEqual(sf.value_counts().values, expected_vals); - assert.deepEqual(sf.value_counts().index, expected_index); - }); - it("returns the unique values and their counts in a Series of type string", function () { - let sf = new dfd.Series([ "a", "a", "b", "c", "c", "d", "e", "d", "d", "e" ]); - let expected_vals = [ 2, 1, 2, 3, 2 ]; - let expected_index = [ "a", "b", "c", "d", "e" ]; - assert.deepEqual(sf.value_counts().values, expected_vals); - assert.deepEqual(sf.value_counts().index, expected_index); - }); - }); - - describe("abs", function () { - it("Returns the absolute values in Series", function () { - let data1 = [ -10, 45, 56, -25, 23, -20, 10 ]; - let sf = new dfd.Series(data1); - assert.deepEqual(sf.abs().values, [ 10, 45, 56, 25, 23, 20, 10 ]); - }); - it("Computes the descriptive statistics on a float Series", function () { - let data1 = [ -30.1, -40.2, -3.1, -5.1 ]; - let sf = new dfd.Series(data1); - assert.deepEqual(sf.abs().values, [ 30.1, 40.2, 3.1, 5.1 ]); - }); - }); - - describe("fillna", function () { - it("replace all NaN value with specified value", function () { - let data = [ NaN, 1, 2, 33, 4, NaN, 5, 6, 7, 8 ]; - let sf = new dfd.Series(data); - let sf_val = [ -999, 1, 2, 33, 4, -999, 5, 6, 7, 8 ]; - sf.fillna({ value: -999, inplace: true }); - assert.deepEqual(sf.values, sf_val); - }); - it("replace all NaN value in string Series with specified value", function () { - let data = [ NaN, "boy", NaN, "hey", "Man", undefined ]; - let sf = new dfd.Series(data); - let sf_val = [ "filled", "boy", "filled", "hey", "Man", "filled" ]; - let sf_fill = sf.fillna({ value: "filled" }); - assert.deepEqual(sf_fill.values, sf_val); - }); - }); - - describe("cumsum", function () { - it("Return cumulative sum over a Series", function () { - let data1 = [ 10, 45, 56, 25, 23, 20, 10 ]; - let sf = new dfd.Series(data1); - assert.deepEqual(sf.cumsum().values, [ 10, 55, 111, 136, 159, 179, 189 ]); - }); - }); - - describe("cummax", function () { - it("Return cumulative maximum over a Series", function () { - let data1 = [ 10, 45, 56, 25, 23, 20, 10 ]; - let sf = new dfd.Series(data1); - assert.deepEqual(sf.cummax().values, [ 10, 45, 56, 56, 56, 56, 56 ]); - }); - }); - - describe("cummin", function () { - it("Return cumulative minimum over a Series", function () { - let data1 = [ 10, 45, 56, 25, 23, 20, 10 ]; - let sf = new dfd.Series(data1); - assert.deepEqual(sf.cummin().values, [ 10, 10, 10, 10, 10, 10, 10 ]); - }); - }); - - describe("cumprod", function () { - it("Return cumulative product over a Series", function () { - let data1 = [ 1, 2, 10, 3, 12, 14, 1 ]; - let sf = new dfd.Series(data1); - let rslt = [ 1, 2, 20, 60, 720, 10080, 10080 ]; - assert.deepEqual(sf.cumprod().values, rslt); - }); - }); - - describe("lt", function () { - it("Return Less than of series and other series (element-wise)", function () { - let data1 = [ 10, 45, 56, 25, 23, 20, 10 ]; - let data2 = [ 100, 450, 590, 5, 25, 2, 0 ]; - - let sf = new dfd.Series(data1); - let sf2 = new dfd.Series(data2); - let expected = [ true, true, true, false, true, false, false ]; - assert.deepEqual(sf.lt(sf2).values, expected); - }); - - it("Return Less than of series scalar (element-wise)", function () { - let data1 = [ 10, 45, 56, 25, 23, 20, 10 ]; - let sf = new dfd.Series(data1); - let expected = [ true, false, false, true, true, true, true ]; - assert.deepEqual(sf.lt(30).values, expected); - }); - }); - - describe("gt", function () { - it("Return Greater than of series and other series (element-wise)", function () { - let data1 = [ 10, 45, 56, 25, 23, 20, 10 ]; - let data2 = [ 100, 450, 590, 5, 25, 2, 0 ]; - - let sf = new dfd.Series(data1); - let sf2 = new dfd.Series(data2); - let expected = [ false, false, false, true, false, true, true ]; - assert.deepEqual(sf.gt(sf2).values, expected); - }); - - it("Return Greater than of series scalar (element-wise)", function () { - let data1 = [ 10, 45, 56, 25, 23, 20, 10 ]; - let sf = new dfd.Series(data1); - let expected = [ false, true, true, false, false, false, false ]; - assert.deepEqual(sf.gt(30).values, expected); - }); - }); - - describe("le", function () { - it("Return Less than or Equal to of series and other series (element-wise)", function () { - let data1 = [ 10, 45, 56, 25, 23, 20, 10 ]; - let data2 = [ 100, 450, 590, 5, 25, 2, 0 ]; - - let sf = new dfd.Series(data1); - let sf2 = new dfd.Series(data2); - let expected = [ true, true, true, false, true, false, false ]; - assert.deepEqual(sf.le(sf2).values, expected); - }); - - it("Return Less than or Equal to of series scalar (element-wise)", function () { - let data1 = [ 10, 45, 56, 25, 23, 20, 10 ]; - let sf = new dfd.Series(data1); - let expected = [ true, false, false, true, true, true, true ]; - assert.deepEqual(sf.le(30).values, expected); - }); - }); - - describe("ge", function () { - it("Return Greater than or Equal to of series and other series (element-wise)", function () { - let data1 = [ 10, 45, 56, 25, 23, 20, 10 ]; - let data2 = [ 100, 450, 56, 5, 25, 20, 0 ]; - - let sf = new dfd.Series(data1); - let sf2 = new dfd.Series(data2); - let expected = [ false, false, true, true, false, true, true ]; - assert.deepEqual(sf.ge(sf2).values, expected); - }); - - it("Return Greater than or Equal to of series scalar (element-wise)", function () { - let data1 = [ 30, 45, 56, 25, 23, 20, 10 ]; - let sf = new dfd.Series(data1); - let expected = [ true, true, true, false, false, false, false ]; - assert.deepEqual(sf.ge(30).values, expected); - }); - }); - - describe("ne", function () { - it("Return Not Equal to of series and other series (element-wise)", function () { - let data1 = [ 10, 45, 56, 25, 23, 20, 10 ]; - let data2 = [ 10, 450, 56, 5, 25, 2, 0 ]; - - let sf = new dfd.Series(data1); - let sf2 = new dfd.Series(data2); - let expected = [ false, true, false, true, true, true, true ]; - assert.deepEqual(sf.ne(sf2).values, expected); - }); - - it("Return Not Equal to of series scalar (element-wise)", function () { - let data1 = [ 10, 30, 56, 30, 23, 20, 10 ]; - let sf = new dfd.Series(data1); - let expected = [ true, false, true, false, true, true, true ]; - assert.deepEqual(sf.ne(30).values, expected); - }); - }); - - describe("eq", function () { - it("Return Equal to of series and other series (element-wise)", function () { - let data1 = [ 10, 45, 56, 25, 23, 20, 10 ]; - let data2 = [ 100, 450, 590, 25, 25, 2, 0 ]; - - let sf = new dfd.Series(data1); - let sf2 = new dfd.Series(data2); - let expected = [ false, false, false, true, false, false, false ]; - assert.deepEqual(sf.eq(sf2).values, expected); - }); - - it("Return Equal to of series scalar (element-wise)", function () { - let data1 = [ 10, 45, 56, 25, 23, 20, 30 ]; - let sf = new dfd.Series(data1); - let expected = [ false, false, false, false, false, false, true ]; - assert.deepEqual(sf.eq(30).values, expected); - }); - }); - - describe("replace", function () { - it("Replace values given in replace param with value", function () { - let data1 = [ 10, 45, 56, 25, 23, 20, 10 ]; - let sf = new dfd.Series(data1); - let expected = [ -50, 45, 56, 25, 23, 20, -50 ]; - let df_rep = sf.replace({ replace: 10, with: -50 }); - assert.deepEqual(df_rep.values, expected); - }); - - it("Replace values given in replace param with value (String type)", function () { - let data1 = [ "A", "A", "A", "B", "B", "C", "C", "D" ]; - let sf = new dfd.Series(data1); - let expected = [ "boy", "boy", "boy", "B", "B", "C", "C", "D" ]; - sf.replace({ replace: "A", with: "boy", inplace: true }); - assert.deepEqual(sf.values, expected); - }); - it("Throw error on wrong param passed", function () { - let data1 = [ "A", "A", "A", "B", "B", "C", "C", "D" ]; - let sf = new dfd.Series(data1); - let expected = `Params Error: A specified parameter is not supported. Your params must be any of the following [replace,with,inplace]`; - assert.throws( - () => { - sf.replace({ replce: "A", with: "boy", inplace: true }); - }, - Error, - expected - ); - }); - }); - - describe("drop_duplicates", function () { - it("Return Series with duplicate values removed (Default, first values kept)", function () { - let data1 = [ 10, 45, 56, 10, 23, 20, 10, 10 ]; - let sf = new dfd.Series(data1); - let expected = [ 10, 45, 56, 23, 20 ]; - let expected_index = [ 0, 1, 2, 4, 5 ]; - let df_drop = sf.drop_duplicates(); - assert.deepEqual(df_drop.values, expected); - assert.deepEqual(df_drop.index, expected_index); - }); - - it("Return Series with duplicate values removed (last values kept)", function () { - let data1 = [ 10, 45, 56, 10, 23, 20, 10, 10 ]; - let sf = new dfd.Series(data1); - let expected = [ 45, 56, 23, 20, 10 ]; - let expected_index = [ 1, 2, 4, 5, 7 ]; - let df_drop = sf.drop_duplicates({ keep: "last" }); - assert.deepEqual(df_drop.values, expected); - assert.deepEqual(df_drop.index, expected_index); - }); - - it("Return Series with duplicate values removed (String)", function () { - let data1 = [ "A", "A", "A", "B", "B", "C", "C", "D" ]; - let sf = new dfd.Series(data1); - let expected = [ "A", "B", "C", "D" ]; - let expected_index = [ 0, 3, 5, 7 ]; - sf.drop_duplicates({ inplace: true }); - assert.deepEqual(sf.values, expected); - assert.deepEqual(sf.index, expected_index); - }); - }); - - describe("dropna", function () { - it("Return a new Series with missing values removed (Int)", function () { - let data1 = [ 10, 45, undefined, 10, 23, 20, undefined, 10 ]; - let sf = new dfd.Series(data1); - let expected = [ 10, 45, 10, 23, 20, 10 ]; - let expected_index = [ 0, 1, 3, 4, 5, 7 ]; - let sf_drop = sf.dropna(); - assert.deepEqual(sf_drop.values, expected); - assert.deepEqual(sf_drop.index, expected_index); - }); - - it("Return a new Series with missing values removed (String)", function () { - let data1 = [ "A", NaN, "A", "B", "B", NaN, "C", undefined ]; - let sf = new dfd.Series(data1); - let expected = [ "A", "A", "B", "B", "C" ]; - let expected_index = [ 0, 2, 3, 4, 6 ]; - - sf.dropna({ inplace: true }); - assert.deepEqual(sf.values, expected); - assert.deepEqual(sf.index, expected_index); - }); - }); - - describe("argsort", function () { - it("Return the integer indices that would sort the Series values", function () { - let data1 = [ 10, 45, 20, 10, 23, 20, 30, 11 ]; - let sf = new dfd.Series(data1); - let expected = [ 3, 0, 7, 5, 2, 4, 6, 1 ]; - let sf_sort = sf.argsort(); - assert.deepEqual(sf_sort.values, expected); - }); - - it("Return the integer indices that would sort the Series values", function () { - let data1 = [ 10.22, 4.5, 2.0, 10, 23.23, 20.1, 30, 11 ]; - let sf = new dfd.Series(data1); - let expected = [ 6, 4, 5, 7, 0, 3, 1, 2 ]; - let sf_sort = sf.argsort(false); - assert.deepEqual(sf_sort.values, expected); - }); - }); - - describe("argmax", function () { - it("Return int position of the largest value in the Series.", function () { - let data1 = [ 10, 45, 20, 10, 23, 20, 30, 11 ]; - let sf = new dfd.Series(data1); - let expected = 1; - let argmax = sf.argmax(); - assert.deepEqual(argmax, expected); - }); - - it("Return int position of the largest value in the Float Series.", function () { - let data1 = [ 10.22, 4.5, 2.0, 10, 23.23, 20.1, 30, 11 ]; - let sf = new dfd.Series(data1); - let expected = 6; - let argmax = sf.argmax(); - assert.deepEqual(argmax, expected); - }); - }); - - describe("argmin", function () { - it("Return int position of the smallest value in the Series", function () { - let data1 = [ 10, 45, 20, 122, 23, 20, 30, 11 ]; - let sf = new dfd.Series(data1); - let expected = 0; - let argmin = sf.argmin(); - assert.deepEqual(argmin, expected); - }); - - it("Return int position of the smallest value in a Float Series", function () { - let data1 = [ 10.22, 4.5, 2.0, 10, 23.23, 20.1, 30, 11 ]; - let sf = new dfd.Series(data1); - let expected = 2; - let argmin = sf.argmin(); - assert.deepEqual(argmin, expected); - }); - }); - - describe("Str", function () { - it("Converts all characters to lowercase.", function () { - let data = [ "lower", "CAPITALS", "this is a sentence", "SwApCaSe" ]; - let res = [ "lower", "capitals", "this is a sentence", "swapcase" ]; - let sf = new dfd.Series(data); - assert.deepEqual(sf.str.toLowerCase().values, res); - }); - it("Converts all characters to uppercase.", function () { - let data = [ "lower", "CAPITALS", "this is a sentence", "SwApCaSe" ]; - let res = [ "LOWER", "CAPITALS", "THIS IS A SENTENCE", "SWAPCASE" ]; - let sf = new dfd.Series(data); - assert.deepEqual(sf.str.toUpperCase().values, res); - }); - it("Converts all characters to capital case.", function () { - let data = [ "lower", "CAPITALS", "this is a sentence", "SwApCaSe" ]; - let res = [ "Lower", "Capitals", "This is a sentence", "Swapcase" ]; - let sf = new dfd.Series(data); - assert.deepEqual(sf.str.capitalize().values, res); - }); - - it("Returns the character at the specified index (position)", function () { - let data = [ "lower", "CAPITALS", "this is a sentence", "SwApCaSe" ]; - let res = [ "w", "P", "i", "A" ]; - let sf = new dfd.Series(data); - assert.deepEqual(sf.str.charAt(2).values, res); - }); - - it("Throws error on concat of numeric series", function () { - let data = [ 1, 2, 3, 4, 5, 6 ]; - let sf = new dfd.Series(data); - assert.throws( - () => { - sf.str.concat("20", 1); - }, - Error, - "Cannot call accessor str on non-string type" - ); - - }); - }); - - describe("dt", function () { - it("check month generated", function () { - let data = [ "02Sep2019", "03Dec2019", "04Jan2019" ]; - let sf = new dfd.Series(data); - let new_data = [ 8, 11, 0 ]; - assert.deepEqual(sf.dt.month().values, new_data); - }); - - it("check month Name generated", function () { - let data = [ "06-30-02019", "07-29-2019", "08-28-2019" ]; - let sf = new dfd.Series(data); - let new_data = [ "Jun", "Jul", "Aug" ]; - assert.deepEqual(sf.dt.month_name().values, new_data); - }); - - it("check days of the weeks generated", function () { - let data = [ "06-30-02019", "07-29-2019", "08-28-2019" ]; - let sf = new dfd.Series(data); - let new_data = [ "Sun", "Mon", "Wed" ]; - assert.deepEqual(sf.dt.weekdays().values, new_data); - }); - - it("check day of the month generated", function () { - let data = [ "06-30-02019", "07-29-2019", "08-28-2019" ]; - let sf = new dfd.Series(data); - let new_data = [ 30, 29, 28 ]; - assert.deepEqual(sf.dt.monthday().values, new_data); - }); - }); - - describe("astype", function () { - it("set type of float column to int", function () { - let data = [ -20.1, 30, 47.3, -20 ]; - let ndframe = new dfd.Series(data); - let df = ndframe.astype("int32"); - - assert.deepEqual(df.dtypes, "int32"); - assert.deepEqual(df.values, [ -20, 30, 47, -20 ]); - }); - it("set type of int column to float", function () { - let data = [ 34, -4, 5, 6 ]; - let ndframe = new dfd.Series(data); - let df = ndframe.astype("float32"); - assert.deepEqual(df.dtypes, "float32"); - assert.deepEqual(df.values, [ 34, -4, 5, 6 ]); - }); - it("set type of string column to int", function () { - let data = [ "20.1", "21", "23.4", "50.78" ]; - let ndframe = new dfd.Series(data); - let df = ndframe.astype("int32"); - - assert.deepEqual(df.dtypes, "int32"); - assert.deepEqual(df.values, [ 20, 21, 23, 51 ]); - }); - it("set type of string column to float", function () { - let data = [ "20.1", "21", "23.4", "50.78" ]; - let ndframe = new dfd.Series(data); - let df = ndframe.astype("float32"); - - assert.deepEqual(df.dtypes, "float32"); - assert.deepEqual(df.values, [ 20.1, 21, 23.4, 50.78 ]); - }); - }); - - describe("iloc", function () { - it("indexing by list of index", function () { - let data = [ 1, 2, 3, 4, "a", "b", "c" ]; - let sf = new dfd.Series(data); - - let expected_val = [ 2, "a", 3, 4, "b" ]; - - assert.deepEqual(sf.iloc([ 1, 4, 2, 3, 5 ]).values, expected_val); - }); - it("indexing by slicing", function () { - let data = [ 1, 2, 3, 4, "a", "b", "c" ]; - let sf = new dfd.Series(data); - - let expected_val = [ 2, 3, 4 ]; - - assert.deepEqual(sf.iloc([ "1:4" ]).values, expected_val); - }); - it("indexing by slicing format ':5' works", function () { - let data = [ 1, 2, 3, 4, "a", "b", "c" ]; - let sf = new dfd.Series(data); - let expected_val = [ 1, 2, 3, 4, 'a' ]; - assert.deepEqual(sf.iloc([ ":5" ]).values, expected_val); - }); - it("indexing by slicing format '2:` works", function () { - let data = [ 1, 2, 3, 4, "a", "b", "c" ]; - let sf = new dfd.Series(data); - let expected_val = [ 3, 4, "a", "b", "c" ]; - assert.deepEqual(sf.iloc([ "2:" ]).values, expected_val); - }); - }); - - describe("append", function () { - it("Add a new single value to the end of a Series", function () { - let data = [ 1, 2, 3, 4, "a", "b", "c" ]; - let sf = new dfd.Series(data); - let expected_val = [ 1, 2, 3, 4, "a", "b", "c", "d" ]; - sf.append("d", true); - assert.deepEqual(sf.values, expected_val); - }); - it("Add a new array of values to the end of a Series", function () { - let data = [ 1, 2, 3, 4 ]; - let to_add = [ "a", "b", "c" ]; - let sf = new dfd.Series(data); - let expected_val = [ 1, 2, 3, 4, "a", "b", "c" ]; - sf.append(to_add, true); - assert.deepEqual(sf.values, expected_val); - }); - it("Add a Series to the end of another Series", function () { - let sf1 = new dfd.Series([ 1, 2, 3, 4 ]); - let sf2 = new dfd.Series([ "a", "b", "c" ]); - let expected_val = [ 1, 2, 3, 4, "a", "b", "c" ]; - sf1.append(sf2, true); - assert.deepEqual(sf1.values, expected_val); - }); - it("Add a new single value to the end of a Series", function () { - let data = [ 1, 2, 3, 4, "a", "b", "c" ]; - let sf = new dfd.Series(data); - let expected_val = [ 1, 2, 3, 4, "a", "b", "c", "d" ]; - sf = sf.append("d"); - assert.deepEqual(sf.values, expected_val); - }); - it("Add a new array of values to the end of a Series", function () { - let data = [ 1, 2, 3, 4 ]; - let to_add = [ "a", "b", "c" ]; - let sf = new dfd.Series(data); - let expected_val = [ 1, 2, 3, 4, "a", "b", "c" ]; - sf = sf.append(to_add); - assert.deepEqual(sf.values, expected_val); - }); - it("Add a Series to the end of another Series", function () { - let sf1 = new dfd.Series([ 1, 2, 3, 4 ]); - let sf2 = new dfd.Series([ "a", "b", "c" ]); - let expected_val = [ 1, 2, 3, 4, "a", "b", "c" ]; - sf1 = sf1.append(sf2); - assert.deepEqual(sf1.values, expected_val); - }); - it("Confirm index Change after append", function () { - let sf1 = new dfd.Series([ 1, 2, 3, 4 ]); - let sf2 = new dfd.Series([ "a", "b", "c" ]); - sf1 = sf1.append(sf2); - assert.deepEqual(sf1.index, [ 0, 1, 2, 3, 0, 1, 2 ]); - }); - it("Confirm index Change after append inplace", function () { - let sf1 = new dfd.Series([ 1, 2, 3, 4 ]); - let sf2 = new dfd.Series([ "a", "b", "c" ]); - sf1.append(sf2, true); - assert.deepEqual(sf1.index, [ 0, 1, 2, 3, 0, 1, 2 ]); - }); - }); -}); diff --git a/danfojs-browser/tests/core/timeseries.js b/danfojs-browser/tests/core/timeseries.js deleted file mode 100644 index f74ba207..00000000 --- a/danfojs-browser/tests/core/timeseries.js +++ /dev/null @@ -1,88 +0,0 @@ - -describe("TimeSeries", function () { - - it("Check date formatting", function () { - - let data = [ "02Sep2019", "03Sep2019", "04Sep2019" ]; - - let times = dfd.to_datetime({ "data": data, "format": "%d%b%Y%" }); - - let new_data = [ new Date("02-Sep-2019"), new Date("03-Sep-2019"), new Date("04-Sep-2019") ]; - - assert.deepEqual(times.date_list, new_data); - - }); - - it("Check Invalid date Formatting", function () { - - let data = [ "30-06-02019", "29-06-2019", "28-06-2019" ]; - - assert.throws(function () { dfd.to_datetime({ "data": data }); }, Error, "Invalid date, the date format not recognise"); - - }); - - it("check month generated", function () { - - let data = [ "02Sep2019", "03Dec2019", "04Jan2019" ]; - - let times = dfd.to_datetime({ "data": data, "format": "%d%b%Y%" }); - - let new_data = [ 8, 11, 0 ]; - - assert.deepEqual(times.month().values, new_data); - }); - - it("check month Name generated", function () { - - let data = [ "06-30-02019", "07-29-2019", "08-28-2019" ]; - - let times = dfd.to_datetime({ "data": data }); - - let new_data = [ "Jun", "Jul", "Aug" ]; - - assert.deepEqual(times.month_name().values, new_data); - }); - - it("check days of the weeks generated", function () { - - let data = [ "06-30-02019", "07-29-2019", "08-28-2019" ]; - - let times = dfd.to_datetime({ "data": data }); - - let new_data = [ "Sun", "Mon", "Wed" ]; - - assert.deepEqual(times.weekdays().values, new_data); - }); - - it("check day of the month generated", function () { - - let data = [ "06-30-02019", "07-29-2019", "08-28-2019" ]; - - let times = dfd.to_datetime({ "data": data }); - - let new_data = [ 30, 29, 28 ]; - - assert.deepEqual(times.monthday().values, new_data); - }); - it("check the seconds generated", function () { - - let data = [ "06-30-02019 00:00:12", "07-29-2019 00:30:40", "08-28-2019 00:12:04" ]; - - let times = dfd.to_datetime({ "data": data }); - - let new_data = [ 12, 40, 4 ]; - - assert.deepEqual(times.seconds().values, new_data); - }); - it("check the minutes generated", function () { - - let data = [ "06-30-02019 00:00:12", "07-29-2019 00:30:40", "08-28-2019 00:12:04" ]; - - let times = dfd.to_datetime({ "data": data }); - - let new_data = [ 0, 30, 12 ]; - - assert.deepEqual(times.minutes().values, new_data); - }); - -}); diff --git a/danfojs-browser/tests/core/utils.js b/danfojs-browser/tests/core/utils.js deleted file mode 100644 index c0aa1d5c..00000000 --- a/danfojs-browser/tests/core/utils.js +++ /dev/null @@ -1,247 +0,0 @@ -/* eslint-disable no-undef */ - - -describe("Utils Functions", function () { - const utils = new dfd.Utils; - - it("removes an element from an array", function () { - let arr = [ 1, 2, 3, 4 ]; - assert.deepEqual(utils.remove(arr, 2), [ 1, 2, 4 ]); - }); - it("Checks if variable is a string", function () { - let arr = [ "1", "2" ]; - assert.isTrue(utils.__is_string(arr[0])); - }); - it("Checks if variable is a number", function () { - let arr = [ 1, 2, 3, 4 ]; - assert.isTrue(utils.__is_number(arr[0])); - }); - it("Checks if value is null", function () { - let val = null; - let val2 = 1; - assert.isTrue(utils.__is_null(val)); - assert.isFalse(utils.__is_null(val2)); - }); - - it("Checks if value is undefined", function () { - let arr; - assert.isTrue(utils.__is_undefined(arr)); - }); - it("random sample n elements from array", function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ], [ 100, 200, 300 ] ]; - assert.isFalse(utils.__sample_from_iter(data, 2) == utils.__sample_from_iter(data, 2)); - assert.isFalse(utils.__sample_from_iter(data, 3) === utils.__sample_from_iter(data, 3)); - - }); - it("Generate number betwee two set of values", function () { - - let start = 0; - let end = 5; - let data = [ 0, 1, 2, 3, 4, 5 ]; - assert.deepEqual(utils.__range(start, end), data); - }); - - describe("__get_col_values", function () { - it("converts an array of rows to array of columns", function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ] ]; - let result = [ [ 1, 4, 20 ], [ 2, 5, 30 ], [ 3, 6, 40 ] ]; - assert.deepEqual(utils.__get_col_values(data), result); - }); - }); - - describe("__get_t", function () { - it("Returns string type present in an 1D array", function () { - let data = [ 'Alice', 'Boy', 'Girl', "39" ]; - let result = [ 'string' ]; - assert.deepEqual(utils.__get_t(data), result); - }); - it("Returns float type present in an 1D array", function () { - let data = [ 1.1, 2.1, 3.2, 4.4 ]; - let result = [ 'float32' ]; - assert.deepEqual(utils.__get_t(data), result); - }); - it("Returns int type present in an 1D array", function () { - let data = [ 1, 2, 3, 45 ]; - let result = [ 'int32' ]; - assert.deepEqual(utils.__get_t(data), result); - }); - it("Returns float when there's a mixture of int and float in a 1D array", function () { - let data = [ 1, 2.1, 3, 45 ]; - let result = [ 'float32' ]; - assert.deepEqual(utils.__get_t(data), result); - }); - it("Returns float type when NaN is present in an 1D array", function () { - let data = [ 1, 2, 3, 45, NaN ]; - let result = [ 'float32' ]; - assert.deepEqual(utils.__get_t(data), result); - }); - it("Returns correct dtype if NaN present in data", function () { - let data = [ - [ 18.7, 17.4, 18, NaN, 19.3 ], - [ 20, NaN, 19, 18, 20 ] ]; - let result = [ 'float32', 'float32' ]; - assert.deepEqual(utils.__get_t(data), result); - }); - it("Returns the data type present in an 2D array", function () { - let data = [ [ 'Alice', 'Boy', 'Girl', "39" ], [ 2, 5, 30, 89 ], [ 3.1, 6.1, 40.1, 78.2 ] ]; - let result = [ 'string', 'int32', 'float32' ]; - assert.deepEqual(utils.__get_t(data), result); - }); - it("Returns the string dtype when there's a mixture of dtyoes in a 2D array", function () { - let data = [ [ 'Alice', 'Boy', 'Girl', 21 ], [ 2, 5, 30, "hey" ], [ 3, 6, 40.1, 78.2 ] ]; - let result = [ 'string', 'string', 'float32' ]; - assert.deepEqual(utils.__get_t(data), result); - }); - it("Returns bool type in a 1D array", function () { - let data = [ true, true, false, false, false, true ]; - let result = [ 'boolean' ]; - assert.deepEqual(utils.__get_t(data), result); - }); - it("Returns bool type in a 2D array", function () { - let data = [ [ true, false, true ], [ "boy", "girl", "man" ], [ 20, 30, 24 ] ]; - let result = [ 'boolean', 'string', 'int32' ]; - assert.deepEqual(utils.__get_t(data), result); - }); - it("Returns string type if values are all NaN", function () { - let data = [ [ true, false, true ], [ "boy", "girl", "boy" ], [ NaN, undefined, NaN ] ]; - let result = [ 'boolean', 'string', 'float32' ]; - assert.deepEqual(utils.__get_t(data), result); - }); - }); - - describe("__map_int_to_bool", function () { - it("map ints to bools in array of arrays", function () { - let data = [ [ 1, 0, 1 ], [ 1, 1, 0 ] ]; - assert.deepEqual(utils.__map_int_to_bool(data, 2), [ [ true, false, true ], [ true, true, false ] ]); - }); - it("map ints to bools in array", function () { - let data = [ 1, 0, 0, 1, 1 ]; - assert.deepEqual(utils.__map_int_to_bool(data, 1), [ true, false, false, true, true ]); - }); - }); - - - describe("__median", function () { - it("Gets the median value of an even array", function () { - let data = [ 100, 2, 3, 20, 30, 40 ]; - assert.deepEqual(utils.__median(data, true), 25); - }); - it("Gets the median value of an odd array", function () { - let data = [ 1, 30, 20, 50, 40 ]; - assert.deepEqual(utils.__median(data, true), 30); - }); - }); - - describe("__mode", function () { - it("Gets the modal value(s) of an array", function () { - let data = [ 100, 2, 3, 20, 20, 40 ]; - assert.deepEqual(utils.__mode(data), [ 20 ]); - }); - it("Returns the multi-modal values of an array", function () { - let data = [ 100, 2, 3, 20, 20, 40, 4, 4, 4, 20 ]; - assert.deepEqual(utils.__mode(data), [ 4, 20 ]); - }); - }); - - describe("__round", function () { - it("round elements in array to 1 dp", function () { - let data = [ 10.01, 2.2, 3.11, 20.505, 20.22, 40.0909 ]; - assert.deepEqual(utils.__round(data, 1, true), [ 10.0, 2.2, 3.1, 20.5, 20.2, 40.1 ]); - }); - it("round elements in array to 2 dp", function () { - let data = [ 10.019, 2.2099, 3.1145, 20.506, 20.22, 40.0909 ]; - assert.deepEqual(utils.__round(data, 2, true), [ 10.02, 2.21, 3.11, 20.51, 20.22, 40.09 ]); - }); - }); - - describe("__replace_undefined_with_NaN", function () { - it("replace undefined in Series with NaN", function () { - let data = [ 10.01, 2.2, undefined, 20.505, 20.22, undefined ]; - assert.deepEqual(utils.__replace_undefined_with_NaN(data, true), [ 10.01, 2.2, NaN, 20.505, 20.22, NaN ]); - }); - it("replace undefined in DataFrame with NaN", function () { - let data = [ [ 10.01, 2.2, undefined, 20.505, 20.22, undefined ], - [ 10.01, undefined, undefined, 20.505, 20, undefined ] ]; - - let result = [ [ 10.01, 2.2, NaN, 20.505, 20.22, NaN ], - [ 10.01, NaN, NaN, 20.505, 20, NaN ] ]; - assert.deepEqual(utils.__replace_undefined_with_NaN(data, false), result); - }); - it("replace null in Series with NaN", function () { - let data = [ 10.01, 2.2, null, 20.505, 20.22, null ]; - assert.deepEqual(utils.__replace_undefined_with_NaN(data, true), [ 10.01, 2.2, NaN, 20.505, 20.22, NaN ]); - }); - it("replace null in DataFrame with NaN", function () { - let data = [ [ 10.01, 2.2, null, 20.505, 20.22, null ], - [ 10.01, null, null, 20.505, 20, null ] ]; - - let result = [ [ 10.01, 2.2, NaN, 20.505, 20.22, NaN ], - [ 10.01, NaN, NaN, 20.505, 20, NaN ] ]; - assert.deepEqual(utils.__replace_undefined_with_NaN(data, false), result); - }); - }); - - describe("__convert_2D_to_1D", function () { - it("convert 2D array of array to 1D of string values", function () { - let data = [ [ 10.01, 2.2, "a" ], [ 20.505, 20.22, "boy" ] ]; - assert.deepEqual(utils.__convert_2D_to_1D(data), [ "10.01,2.2,a", "20.505,20.22,boy" ]); - }); - - }); - - // describe("_throw_wrong_params_error", function () { - // it("check if the right params are passed to a function", function () { - // let params_needed = ["replace", "with", "inplace"] - // let kwargs = { "replae": 2, "with": 12, "inplace": true } - // assert.equal(utils._throw_wrong_params_error(kwargs, params_needed), false) - // }) - // it("check if the right params are passed to a function 2", function () { - // let params_needed = ["replace", "with", "inplace"] - // let kwargs = { "replace": 2, "with": 12, "inplace": true } - // assert.equal(utils._throw_wrong_params_error(kwargs, params_needed), true) - // }) - - // }) - - describe("_get_row_and_col_values", function () { - it("retreive rows and labels from column object", function () { - let data = { "Alpha": [ "A", "B", "C", "D" ], count: [ 1, 2, 3, 4 ], sum: [ 20.3, 30.456, 40.90, 90.1 ] }; - let res = [ [ "A", 1, 20.3 ], [ "B", 2, 30.456 ], [ "C", 3, 40.90 ], [ "D", 4, 90.1 ] ]; - assert.deepEqual(utils._get_row_and_col_values(data)[0], res); - assert.deepEqual(utils._get_row_and_col_values(data)[1], [ "Alpha", "count", "sum" ]); - - }); - - - }); - - - describe("_get_duplicate", function(){ - it("obtain duplicate and their index", function(){ - - let data = [ 1, 2, 3, 4, 5, 3, 4, 6, 4, 5 ]; - let res = { '3': { count: 2, index: [ 2, 5 ] }, - '4': { count: 3, index: [ 3, 6, 8 ] }, - '5': { count: 2, index: [ 4, 9 ] } }; - - assert.deepEqual(utils.__get_duplicate(data), res); - }); - }); - - describe("__shuffle", function() { - it("returns array with correct shape", function() { - let data = [ 1, 2, 3, 4, 5 ]; - assert.deepEqual(utils.__shuffle(3, data).length, 3); - }); - - it("returns original values when num equals total length", function() { - let data = [ 1, 2, 3, 4, 5 ]; - assert.deepEqual(utils.__shuffle(5, data).sort(), [ 1, 2, 3, 4, 5 ]); - }); - - it("returns empty array when num equals zero", function() { - let data = [ 1, 2, 3, 4, 5 ]; - assert.deepEqual(utils.__shuffle(0, data), []); - }); - }); -}); diff --git a/danfojs-browser/tests/io/reader.js b/danfojs-browser/tests/io/reader.js deleted file mode 100644 index 7177cc78..00000000 --- a/danfojs-browser/tests/io/reader.js +++ /dev/null @@ -1,36 +0,0 @@ -/* eslint-disable no-undef */ -describe("read_csv", async function () { - this.timeout(10000); // all tests in this suite get 10 seconds before timeout - it("reads a csv file from source over the internet", async function () { - const csvUrl = - "https://storage.googleapis.com/tfjs-examples/multivariate-linear-regression/data/boston-housing-train.csv"; - - const df = await dfd.read_csv(csvUrl); - const num_of_columns = df.column_names.length; - assert.equal(num_of_columns, 13); - - }); -}); - -describe("read_json", async function () { - this.timeout(10000); // all tests in this suite get 10 seconds before timeout - it("reads a json file from source over the internet", async function () { - const jUrl = - "https://raw.githubusercontent.com/risenW/Tensorflowjs_Projects/master/recommender-sys/Python-Model/web_book_data.json"; - - const df = await dfd.read_json(jUrl); - const num_of_columns = df.column_names.length; - assert.equal(num_of_columns, 4); - - }); -}); - -describe("read_excel", async function () { - this.timeout(10000); // all tests in this suite get 10 seconds before timeout - it("reads an excel file from source over the internet", async function () { - const remote_url = - "https://file-examples-com.github.io/uploads/2017/02/file_example_XLS_100.xls"; - const df = await dfd.read_excel(remote_url); - assert(df.columns.length, 8); - }); -}); diff --git a/danfojs-browser/tests/preprocessing/encodings.js b/danfojs-browser/tests/preprocessing/encodings.js deleted file mode 100644 index 9f05f356..00000000 --- a/danfojs-browser/tests/preprocessing/encodings.js +++ /dev/null @@ -1,94 +0,0 @@ - -describe("Encodings", function () { - - describe("LabelEncoder", function () { - - it("test the label encoding on array", function () { - let data = [ "dog", "cat", "man", "dog", "cat", "man", "man", "cat" ]; - let encode = new dfd.LabelEncoder(); - let fit_data = [ - 0, 1, 2, 0, - 1, 2, 2, 1 - ]; - assert.deepEqual(encode.fit(data).values, fit_data); - assert.deepEqual(encode.transform([ "dog", "man" ]).values, [ 0, 2 ]); - }); - it("test the label encoding on Series", function () { - let data = [ "dog", "cat", "man", "dog", "cat", "man", "man", "cat" ]; - let series = new dfd.Series(data); - let encode = new dfd.LabelEncoder(); - let fit_data = [ - 0, 1, 2, 0, - 1, 2, 2, 1 - ]; - assert.deepEqual(encode.fit(series).values, fit_data); - assert.deepEqual(encode.transform([ "dog", "man" ]).values, [ 0, 2 ]); - }); - it("label encoding directly from a Series", function () { - let data = new dfd.Series([ "dog", "cat", "man", "dog", "cat", "man", "man", "cat" ]); - let to_label_encode = new dfd.Series([ "dog", "man" ]); - let encode = new dfd.LabelEncoder(); - let fit_data = [ - 0, 1, 2, 0, - 1, 2, 2, 1 - ]; - assert.deepEqual(encode.fit(data).values, fit_data); - assert.deepEqual(encode.transform(to_label_encode).values, [ 0, 2 ]); - }); - // it("Label encoding on Series", function () { - // let data = ["dog", "cat", "man", "dog", "cat", "man", "man", "cat"] - // let series = new dfd.Series(data) - // let encode = new dfd.LabelEncoder() - // let fit_data = [ - // 0, 1, 2, 0, - // 1, 2, 2, 1 - // ] - // assert.deepEqual(encode.fit(series).values, fit_data) - // assert.deepEqual(encode.transform(["dog", "man"]).values, [0, 2]) - // }); - - }); - - describe("OneHotEncoder", function () { - - it("test onehotencoding on array", function () { - let data = [ "dog", "cat", "man", "dog", "cat", "man", "man", "cat" ]; - let encode = new dfd.OneHotEncoder(); - let fit_data = [ - [ 1, 0, 0 ], - [ 0, 1, 0 ], - [ 0, 0, 1 ], - [ 1, 0, 0 ], - [ 0, 1, 0 ], - [ 0, 0, 1 ], - [ 0, 0, 1 ], - [ 0, 1, 0 ] - ]; - let transform_data = [ [ 0, 0, 1 ], [ 0, 1, 0 ] ]; - - assert.deepEqual(encode.fit(data).values, fit_data); - assert.deepEqual(encode.transform([ "man", "cat" ]).values, transform_data); - }); - it("test onehotencoding on Series", function () { - let data = [ "dog", "cat", "man", "dog", "cat", "man", "man", "cat" ]; - let series = new dfd.Series(data); - let encode = new dfd.OneHotEncoder(); - let fit_data = [ - [ 1, 0, 0 ], - [ 0, 1, 0 ], - [ 0, 0, 1 ], - [ 1, 0, 0 ], - [ 0, 1, 0 ], - [ 0, 0, 1 ], - [ 0, 0, 1 ], - [ 0, 1, 0 ] - ]; - let transform_data = [ [ 0, 0, 1 ], [ 0, 1, 0 ] ]; - - assert.deepEqual(encode.fit(series).values, fit_data); - assert.deepEqual(encode.transform(new dfd.Series([ "man", "cat" ])).values, transform_data); - }); - }); - - -}); diff --git a/danfojs-browser/tests/preprocessing/scaler.js b/danfojs-browser/tests/preprocessing/scaler.js deleted file mode 100644 index 43ba76da..00000000 --- a/danfojs-browser/tests/preprocessing/scaler.js +++ /dev/null @@ -1,54 +0,0 @@ -describe("Preprocessing", function(){ - - describe("MinMaxscaler", function(){ - - it("Standardize values in a DataFrame", function(){ - let data = [ [ -1, 2 ], [ -0.5, 6 ], [ 0, 10 ], [ 1, 18 ] ]; - let scaler = new dfd.MinMaxScaler(); - let fit_data = [ [ 0, 0 ], [ 0.25, 0.25 ], [ 0.5, 0.5 ], [ 1, 1 ] ]; - let transform_data = [ [ 1.5, 0. ] ]; - scaler.fit(new dfd.DataFrame(data)); - assert.deepEqual(scaler.transform(new dfd.DataFrame(data)).values, fit_data); - assert.deepEqual(scaler.transform([ [ 2, 2 ] ]).values, transform_data); - }); - it("Standardize values in a Series", function(){ - let data = [ -1, 2, -0.5, 60, 101, 18 ]; - let scaler = new dfd.MinMaxScaler(); - let result = [ 0, 0.029411764815449715, 0.0049019609577953815, 0.5980392098426819, 1, 0.18627451360225677 ]; - let transform_data = [ 0.029411764815449715, 0.029411764815449715 ]; - scaler.fit(new dfd.Series(data)); - assert.deepEqual(scaler.transform(new dfd.Series(data)).values, result); - assert.deepEqual(scaler.transform([ 2, 2 ]).values, transform_data); - }); - }); - - describe("StandardScaler", function(){ - - it("basic test", function(){ - let data = [ [ 0, 0 ], [ 0, 0 ], [ 1, 1 ], [ 1, 1 ] ]; - - let scaler = new dfd.StandardScaler(); - let fit_data = [ [ -1, -1 ], [ -1, -1 ], [ 1, 1 ], [ 1, 1 ] ]; - let transform_data = [ [ 3, 3 ] ]; - - assert.deepEqual(scaler.fit(new dfd.DataFrame(data)).round().values, fit_data); - assert.deepEqual(scaler.transform([ [ 2, 2 ] ]).round().values, transform_data); - }); - }); - - - // describe("RobustScaler", function(){ - // it("basic test", function(){ - - // let data = [[3,1], [7,3], [8,4], [5,6], [12,5], [14,12], [21,23], [15,15], [18,2], [14,15]] - // // let data2 = [[4,100,900],[5,110,800],[21,220,890],[20,300,500]] - // let data2 = [0, 4, 4, 4, 7, 10, 11, 12, 14, 16, 17, 25] - - - // let scaler = new RobustScaler() - - // // console.log(scaler.quantile(data2,true)) - - // }); - // }); -}); diff --git a/danfojs-browser/types/config/config.d.ts b/danfojs-browser/types/config/config.d.ts deleted file mode 100644 index cd41525e..00000000 --- a/danfojs-browser/types/config/config.d.ts +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Package wide configuration class - */ -export class Configs { - table_width: number; - table_truncate: number; - dtype_test_lim: number; - table_max_row: number; - table_max_col_in_console: number; - set_width(val?: any): void; - get get_width(): number; - set_max_col_in_console(val?: any): void; - get get_max_col_in_console(): number; - set_row_num(val?: any): void; - get get_max_row(): number; - get get_truncate(): number; - set_truncate(val?: any): void; - get get_dtype_test_lim(): number; - set_dtype_test_lim(val?: any): void; -} diff --git a/danfojs-browser/types/core/concat.d.ts b/danfojs-browser/types/core/concat.d.ts deleted file mode 100644 index 269f31e2..00000000 --- a/danfojs-browser/types/core/concat.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export class Concat { - constructor(kwargs?: any); -} -export function concat(kwargs?: any): DataFrame; -import { DataFrame } from "./frame"; diff --git a/danfojs-browser/types/core/date_range.d.ts b/danfojs-browser/types/core/date_range.d.ts deleted file mode 100644 index 58f7060a..00000000 --- a/danfojs-browser/types/core/date_range.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -/** - * Generate date range between a specified set of date - * @param {kwargs} kwargs { - * start : string - * end : string - * period: int - * freq : string - * } - * @returns Array - */ -export class date_range { - constructor(kwargs?: any); - offset: number; - start?: any; - end?: any; - period?: any; - freq?: any; - freq_list: string[]; - range(start?: any, end?: any, period?: any, offset?: any): any; - freq_type(date?: any, ftype?: any): any; - offset_count(d_array?: any, offset?: any): any[]; - set_dateProps(date?: any, ftype?: any, val?: any): Date; - toLocalString(d_array?: any): any; - month_end(start_date?: any, end_date?: any): any; - month_range(range?: any): any; - day_end(start_date?: any, end_date?: any): number; -} diff --git a/danfojs-browser/types/core/frame.d.ts b/danfojs-browser/types/core/frame.d.ts deleted file mode 100644 index 466b1ea0..00000000 --- a/danfojs-browser/types/core/frame.d.ts +++ /dev/null @@ -1,404 +0,0 @@ -/** - * A 2D frame object that stores data in structured tabular format - * @param {data} data, JSON, Array, 2D Tensor - * @param {kwargs} Object {columns: Array of column names, defaults to ordered numbers when not specified - * dtypes: strings of data types, automatically inferred when not specified - * index: row index for subseting array, defaults to ordered numbers when not specified} - * - * @returns DataFrame - */ -export class DataFrame extends Ndframe { - constructor(data?: any, kwargs?: any); - _set_column_property(): void; - /** - * Drop a list of rows or columns base on the specified axis - * @param {Object} kwargs Configuration object - * {columns: [Array(Columns| Index)] array of column names to drop - * axis: row=0, columns=1 - * inplace: specify whether to drop the row/column with/without creating a new DataFrame} - * @returns null | DataFrame - * - */ - drop(kwargs?: any): DataFrame; - /** - * Purely label based indexing. Can accept string label names for both rows and columns - * @param {kwargs} kwargs object {rows: Array of index, columns: Array of column name(s)} - * @return DataFrame data stucture - */ - loc(kwargs?: any): DataFrame; - /** - * Access a dataframe element using row and column index - * @param {*} kwargs object {rows: Array of index, columns: Array of column index} - * @return DataFrame data stucture - */ - iloc(kwargs?: any): DataFrame; - /** - * Prints the first n values in a dataframe - * @param {rows} rows --> int - * @returns DataFrame - */ - head(rows?: any): DataFrame; - /** - * Prints the last n values in a dataframe - * @param {rows} rows --> int - * @returns DataFrame - */ - tail(rows?: any): DataFrame; - /** - * Gets [num] number of random rows in a dataframe - * @param {rows} rows --> int - * @returns DataFrame - */ - sample(num?: number): DataFrame; - /** - * Return Addition of DataFrame and other, element-wise (binary operator add). - * @param {other} DataFrame, Series, Array or Number to add - * @returns {DataFrame} - */ - add(other?: any, axis?: any): DataFrame; - /** - * Return subtraction of DataFrame and other, element-wise (binary operator add). - * @param {other} DataFrame, Series, Array or Number to add - * @returns {DataFrame} - */ - sub(other?: any, axis?: any): DataFrame; - /** - * Return subtraction of DataFrame and other, element-wise (binary operator add). - * @param {other} DataFrame, Series, Array or Number to add - * @returns {DataFrame} - */ - mul(other?: any, axis?: any): DataFrame; - /** - * Return division of DataFrame and other, element-wise (binary operator add). - * @param {other} DataFrame, Series, Array or Number to add - * @returns {DataFrame} - */ - div(other?: any, axis?: any): DataFrame; - /** - * Return division of DataFrame and other, element-wise (binary operator add). - * @param {other} DataFrame, Series, Array or Number to add - * @returns {DataFrame} - */ - pow(other?: any, axis?: any): DataFrame; - /** - * Return division of DataFrame and other, element-wise (binary operator add). - * @param {other} DataFrame, Series, Array or Number to add - * @returns {DataFrame} - */ - mod(other?: any, axis?: any): DataFrame; - /** - * Return mean of DataFrame across specified axis. - * @param {axis} Number {0: row, 1 : column} Axis for the function to be applied on - * @returns {Series} - */ - mean(axis?: number): Series; - /** - * Return median of DataFrame across specified axis. - * @param {axis} Number {0: row, 1 : column} Axis for the function to be applied on - * @returns {Series} - */ - median(axis?: number): Series; - /** - * Return minimum element in a DataFrame across specified axis. - * @param {axis} Number {0: row, 1 : column} Axis for the function to be applied on - * @returns {Series} - */ - min(axis?: number): Series; - /** - * Return maximum element of DataFrame across specified axis. - * @param {axis} Number {0: row, 1 : column} Axis for the function to be applied on - * @returns {Series} - */ - max(axis?: number): Series; - /** - * Return standard deviation of DataFrame across specified axis. - * @param {axis} Number {0: row, 1 : column} Axis for the function to be applied on - * @returns {Series} - */ - std(axis?: number): Series; - /** - * Return variance of DataFrame across specified axis. - * @param {axis} Number {0: row, 1 : column} Axis for the function to be applied on - * @returns {Series} - */ - var(axis?: number): Series; - /** - * Return number of non-null elements in a Series - * @returns {Series}, Count of non-null values - */ - count(axis?: number): Series; - /** - * Rounds values in DataFrame to specified number of dp - * @returns {DataFrame}, New DataFrame with rounded values - */ - round(dp?: number): DataFrame; - /** - * Perform Cummulative operations - * @param {axis} axis [int] {0 or 1} - * @param {ops} ops {String} name of operation - * @return {DataFrame} - */ - __cum_ops(axis?: any, ops?: any): DataFrame; - /** - * calculate the cummulative sum along axis - * @param {kwargs} {axis: [int]} - * @returns {DataFrame} - */ - cumsum(kwargs?: {}): DataFrame; - /** - * calculate the cummulative min - * @param {kwargs} {axis: [int]} - * @returns {DataFrame} - */ - cummin(kwargs?: {}): DataFrame; - /** - * calculate the cummulative max - * @param {kwargs} {axis: [int]} - * @returns {DataFrame} - */ - cummax(kwargs?: {}): DataFrame; - /** - * calculate the cummulative prod - * @param {kwargs} {axis: [int]} - * @returns {DataFrame} - */ - cumprod(kwargs?: {}): DataFrame; - /** - * Makes a new copy of a DataFrame - * @returns {DataFrame} - */ - copy(): DataFrame; - /** - * Generate a new index for the DataFrame. - * This is useful when the index is meaningless and needs to be reset to the default before another operation. - * @param {inplace} boolean: Modify the original object or return a new one. Default to false - */ - reset_index(inplace?: boolean): DataFrame; - /** - * Set the DataFrame index (row labels) using an array of the same length. - * @param {kwargs} {index: Array of new index values} - */ - set_index(kwargs?: {}): DataFrame; - /** - * Generate descriptive statistics for all numeric columns - * Descriptive statistics include those that summarize the central tendency, - * dispersion and shape of a dataset’s distribution, excluding NaN values. - * @returns {Series} - */ - describe(): Series; - /** - * Return a subset of the DataFrame’s columns based on the column dtypes. - * @param {include} scalar or array-like. A selection of dtypes or strings to be included. At least one of these parameters must be supplied. - * @returns {DataFrame, Series} The subset of the frame including the dtypes. - */ - select_dtypes(include?: any): DataFrame; - /** - * Sort a Dataframe in ascending or descending order by a specified column name. - * @param {kwargs} Object, {by: Column name to sort by - * ascending (Bool): Whether to return sorted values in ascending order or not, - * inplace (Bool): Whether to perform sorting on the original Series or not} - * @returns {Series} - */ - /** - * Return the sum of the values in a DataFrame across a specified axis. - * @params {kwargs} {axis: 0 for row and 1 for column} - * @returns {Series}, Sum of values accross axis - */ - sum(kwargs?: { - axis: number; - }): Series; - /** - * Returns the absolute values in DataFrame - * @return {DataFrame} - */ - abs(): DataFrame; - __get_tensor_and_idx(df?: any, axis?: any): any[]; - /** - * Filter DataFrame element base on the element in a column - * @param {kwargs} kwargs {column : coumn name[string], is: String, to: string| int} - * @returns {DataFrame} - */ - query(kwargs?: any): DataFrame; - /** - * Add a column with values to the dataframe - * @param {kwargs} Object {column :[string] , value:[Array]} - * - */ - addColumn(kwargs?: any): void; - /** - * - * @param {col} col is a list of column with maximum length of two - */ - groupby(col?: any): GroupBy; - /** - * Return a sequence of axis dimension along row and columns - * @params col_name: the name of a column in the database. - * @returns tensor of shape 1 - */ - column(col_name?: any): Series; - /** - * Replace NaN or undefined with a specified value" - * @param {kwargs}, {column(s): Array of column name(s) to fill. If undefined fill all columns; - * value(s): Array | Scalar of value(s) to fill with. If single value is specified, we use it to fill all - * @return {DataFrame} - */ - fillna(kwargs?: {}): DataFrame; - /** - * Return a boolean same-sized object indicating if the values are NaN. NaN and undefined values, - * gets mapped to True values. Everything else gets mapped to False values. - * @return {DataFrame} - */ - isna(): DataFrame; - /** - * Obtain index containing nan values - * @return Array list (int) - */ - nanIndex(): number[]; - /** - * Drop all rows containing NaN - * @param {kwargs} kwargs [Object] {axis: [int]{o or 1}, inplace:[boolean]} - */ - dropna(kwargs?: any): DataFrame; - /** - * Apply a function to each element or along a specified axis of the DataFrame. Supports JavaScipt functions - * when axis is not specified, and accepts Tensorflow functions when axis is specified. - * @param {kwargs} kargs is defined as {axis: undefined, 0 or 1, callable: [FUNCTION]} - * @return Array - */ - apply(kwargs?: any): Series | DataFrame; - /** - * Returns Less than of DataFrame and other. Supports element wise operations - * @param {other} DataFrame, Series, Scalar - * @param {axis} Number {0 for row, 1 for index} Whether to compare by the index or columns - * @return {DataFrame} - */ - lt(other?: any, axis?: any): DataFrame; - /** - * Returns Greater than of DataFrame and other. Supports element wise operations - * @param {other} DataFrame, Series, Scalar - * @param {axis} Number {0 for row, 1 for index} Whether to compare by the index or columns - * @return {DataFrame} - */ - gt(other?: any, axis?: any): DataFrame; - /** - * Returns Less than or Equal to of DataFrame and other. Supports element wise operations - * @param {other} DataFrame, Series, Scalar - * @param {axis} Number {0 for row, 1 for index} Whether to compare by the index or columns - * @return {DataFrame} - */ - le(other?: any, axis?: any): DataFrame; - /** - * Returns Greater than or Equal to of DataFrame and other. Supports element wise operations - * @param {other} DataFrame, Series, Scalar - * @param {axis} Number {0 for row, 1 for index} Whether to compare by the index or columns - * @return {DataFrame} - */ - ge(other?: any, axis?: any): DataFrame; - /** - * Returns Not Equal to of DataFrame and other. Supports element wise operations - * @param {other} DataFrame, Series, Scalar - * @param {axis} Number {0 for row, 1 for index} Whether to compare by the index or columns - * @return {DataFrame} - */ - ne(other?: any, axis?: any): DataFrame; - /** - * Returns Greater than or Equal to of DataFrame and other. Supports element wise operations - * @param {other} DataFrame, Series, Scalar - * @param {axis} Number {0 for row, 1 for index} Whether to compare by the index or columns - * @return {DataFrame} - */ - eq(other?: any, axis?: any): DataFrame; - /** - * Replace all occurence of a value with a new specified value" - * @param {kwargs}, {"replace": the value you want to replace, - * "with": the new value you want to replace the olde value with - * "in": Array of column names to replace value in, If not specified, replace all columns} - * @return {Series} - */ - replace(kwargs?: {}): Series; - __logical_ops(val?: any, logical_type?: any, axis?: any): DataFrame; - __get_df_from_tensor(val?: any, col_names?: any): DataFrame; - __frame_is_compactible_for_operation(): boolean; - __get_ops_tensors(tensors?: any, axis?: any): any[]; - /** - * Transpose index and columns. - * Reflect the DataFrame over its main diagonal by writing rows as columns and vice-versa. - * The property T is an accessor to the method transpose(). - */ - transpose(): DataFrame; - /** - * The property T is an accessor to the method transpose(). - */ - get T(): DataFrame; - /** - * Returns the data types in the DataFrame - * @return {Array} list of data types for each column - */ - get ctypes(): Series; - /** - * Make plots of Series or DataFrame. - * Uses the Plotly as backend, so supports Plotly's configuration parameters - * @param {string} div Name of the div to show the plot - * @returns {Class} Plot class that expoese different plot type - */ - plot(div: string): any; - /** - * Returns the Tensorflow tensor backing the DataFrame Object - * @returns {2D tensor} - */ - get tensor(): Tensor2D; - /** - * Sets the data types of an DataFrame - * @param {Object} kwargs {column: Name of the column to cast, dtype: [float32, int32, string] data type to cast to} - * @returns {DataFrame} - */ - astype(kwargs?: any): DataFrame; - /** - * Return the unique values along an axis - * @param {axis} Int, 0 for row, and 1 for column. Default to 1 - * @return {Object} - */ - unique(axis?: number): any; - /** - * Return the number of unique value along an axis - * @param {axis} Int, 0 for row, and 1 for column. Default to 1 - * @return {Series} - */ - nunique(axis?: number): Series; - /** - * Change axes labels. Object values must be unique (1-to-1). - * Labels not contained in a dict / Series will be left as-is. Extra labels listed don’t throw an error. - * @param {Object} kwargs {mapper: Dict-like or functions transformations to apply to that axis’ values, - * axis: Int, 0 for row, and 1 for column. Default to 1, - * inplace: Whether to return a new DataFrame. If True then value of copy is ignored. - * @returns {DataFrame} - */ - rename(kwargs?: any): DataFrame; - /** - * Sort DataFrame by index - * @param {*} kwargs {inplace: Boolean, ascending: Bool} - * @returns DataFrame - */ - sort_index(kwargs?: any): DataFrame; - /** - * Sort a Dataframe in ascending or descending order by a specified column name. - * @param {kwargs} Object, {by: Column name to sort by - * ascending (Bool): Whether to return sorted values in ascending order or not, - * inplace (Bool): Whether to perform sorting on the original Series or not} - * @returns {Series} - */ - sort_values(kwargs?: {}): Series; - __set_col_property(self?: any, col_vals?: any, col_names?: any, old_col_names?: any): void; - __update_frame_in_place(row_data?: any, column_names?: any, col_obj?: any, index?: any, dtypes?: any): void; - __sort_by(col_value?: any, df_index?: any, asc?: any): any[][]; - /** - * Append rows to a DataFrame - * @param {val} val Array | Series to append to the object - * @return DataFrame - */ - append(val?: any): DataFrame; -} -import { Tensor2D } from "@tensorflow/tfjs-core"; -import Ndframe from "./generic"; -import { Series } from "./series"; -import { GroupBy } from "./groupby"; diff --git a/danfojs-browser/types/core/generic.d.ts b/danfojs-browser/types/core/generic.d.ts deleted file mode 100644 index edb2146e..00000000 --- a/danfojs-browser/types/core/generic.d.ts +++ /dev/null @@ -1,112 +0,0 @@ -export default class NDframe { - /** - * N-Dimensiona data structure. Stores multi-dimensional - * data in a size-mutable, labeled data structure. Analogous to the Python Pandas DataFrame. - * - * @param {data} Array JSON, Tensor. Block of data. - * @param {kwargs} Object Optional Configuration Object - * {columns: Array of column names. If not specified and data is an array of array, use range index. - * dtypes: Data types of the columns, - * index: row index for subseting array } - * - * @returns NDframe - */ - constructor(data?: any, kwargs?: {}); - kwargs: {}; - series: boolean; - /** - * - * @param {Array} data - * Read array of data into NDFrame - */ - _read_array(data?: any[]): void; - data?: any[]; - row_data_tensor?: any; - col_data?: any[][]; - col_data_tensor?: any; - index_arr?: any[]; - columns?: any; - /** - * Convert Javascript Object of arrays into NDFrame - * @param {*} data Object of Arrays - * @param {*} type type 1 object are of JSON form [{a: 1, b: 2}, {a: 30, b: 20}], - * type 2 object are of the form {a: [1,2,3,4], b: [30,20, 30, 20}] - */ - _read_object(data?: any, type?: any): void; - /** - * Sets the data type of the NDFrame. Supported types are ['float32', "int32", 'string', 'boolean'] - * @param {Array} dtypes Array of data types. - * @param {Boolean} infer Whether to automatically infer the dtypes from the Object - */ - _set_col_types(dtypes: Array, infer: boolean): void; - col_types?: any[]; - /** - * Returns the data types in the DataFrame - * @return {Array} list of data types for each column - */ - get dtypes(): any[]; - /** - * Gets dimension of the NDFrame - * @returns {Integer} dimension of NDFrame - */ - get ndim(): any; - /** - * Gets values for index and columns - * @return {Object} axes configuration for index and columns of NDFrame - */ - get axes(): any; - /** - * Gets index of the NDframe - * @return {Array} array of index from series - */ - get index(): any[]; - /** - * Sets index of the NDFrame - */ - __set_index(labels?: any): void; - /** - * Generate a new index for NDFrame. - */ - __reset_index(): void; - /** - * Gets a sequence of axis dimension along row and columns - * @returns {Array} the shape of the NDFrame - */ - get shape(): any[]; - /** - * Gets the values in the NDFrame in JS array - * @returns {Array} Arrays of arrays of data instances - */ - get values(): any[]; - /** - * Gets the column names of the data - * @returns {Array} strings of column names - */ - get column_names(): any[]; - /** - * Return a boolean same-sized object indicating if the values are NaN. NaN and undefined values - * gets mapped to True values. Everything else gets mapped to False values. - * @return {Array} - */ - __isna(): any[]; - get size(): any; - /** - * Return object data as comma-separated values (csv). - * @returns {Promise} CSV representation of Object data - */ - to_csv(): Promise; - /** - * Return object as JSON string. - * @returns {Promise } JSON representation of Object data - */ - to_json(): Promise; - /** - * Prints the data in a Series as a grid of row and columns - */ - toString(): any; - /** - * Pretty prints n number of rows in a DataFrame or Series in the console - * @param {rows} Number of rows to print - */ - print(): void; -} diff --git a/danfojs-browser/types/core/get_dummies.d.ts b/danfojs-browser/types/core/get_dummies.d.ts deleted file mode 100644 index a0edcaa0..00000000 --- a/danfojs-browser/types/core/get_dummies.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -/** - * Generate one hot encoding for categorical variable in arrays |Serie | and Dataframe - * @param {kwargs} kwargs { data : Array | Series | DataFrame, - * prefix_sep: String e.g "_", - * prefix: String | Array of String, - * columns: [Array] columns to be encoded in DataFrame. - * } - */ -export function get_dummies(kwargs?: any): DataFrame; -import { DataFrame } from "./frame"; diff --git a/danfojs-browser/types/core/groupby.d.ts b/danfojs-browser/types/core/groupby.d.ts deleted file mode 100644 index c8231934..00000000 --- a/danfojs-browser/types/core/groupby.d.ts +++ /dev/null @@ -1,59 +0,0 @@ -/** - * The class performs all groupby operation on a dataframe - * involveing all aggregate funciton - * @param {col_dict} col_dict Object of unique keys in the group by column - * @param {key_col} key_col Array contains the column names - * @param {data} Array the dataframe data - * @param {column_name} Array of all column name in the dataframe. - */ -export class GroupBy { - constructor(col_dict?: any, key_col?: any, data?: any, column_name?: any); - key_col?: any; - col_dict?: any; - data?: any; - column_name?: any; - data_tensors: {}; - /** - * Group the dataframe by the column by - * creating an object to store the grouping - * @returns Groupby data structure - */ - group(): GroupBy; - /** - * obtain the column for each group - * @param {col_name} col_name [Array]--> array of column names - * @return Groupby data structure - */ - col(col_names?: any): GroupBy; - group_col_name?: any[]; - group_col: {}; - /** - * Basic root of all column arithemetic in groups - * @param {operation} operatioin String - */ - arithemetic(operation?: any): {}; - count(): DataFrame; - sum(): DataFrame; - std(): DataFrame; - var(): DataFrame; - mean(): DataFrame; - cumsum(): DataFrame; - cummax(): DataFrame; - cumprod(): DataFrame; - cummin(): DataFrame; - max(): DataFrame; - min(): DataFrame; - /** - * returns dataframe of a group - * @param {*} key [Array] - */ - get_groups(key?: any): any; - /** - * Map every column to an operaton - * @param {kwargs} kwargs {column name: math operation} - * @example .agg({"A": "mean","B": "sum","C":"count"}) - */ - agg(kwargs?: any): DataFrame; - to_DataFrame(key_col?: any, col?: any, data?: any, ops?: any): DataFrame; -} -import { DataFrame } from "./frame"; diff --git a/danfojs-browser/types/core/indexing.d.ts b/danfojs-browser/types/core/indexing.d.ts deleted file mode 100644 index 9615effa..00000000 --- a/danfojs-browser/types/core/indexing.d.ts +++ /dev/null @@ -1 +0,0 @@ -export function indexLoc(ndframe?: any, kwargs?: any): any[]; diff --git a/danfojs-browser/types/core/merge.d.ts b/danfojs-browser/types/core/merge.d.ts deleted file mode 100644 index 8162a6c9..00000000 --- a/danfojs-browser/types/core/merge.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -export class Merge { - constructor(kwargs?: any); - how?: any; - left: DataFrame; - right: DataFrame; - on?: any[]; - left_col_index?: any[]; - right_col_index?: any[]; - left_key_dict: {}; - right_key_dict: {}; - __create_columns(): void; - outer(): any[]; - inner(): any[]; - left_merge(): any[]; - right_merge(): any[]; - basic(keys?: any): any[]; -} -export function merge(kwargs?: any): DataFrame; -import { DataFrame } from "./frame"; diff --git a/danfojs-browser/types/core/series.d.ts b/danfojs-browser/types/core/series.d.ts deleted file mode 100644 index 2461da65..00000000 --- a/danfojs-browser/types/core/series.d.ts +++ /dev/null @@ -1,370 +0,0 @@ -/** - * One-dimensional ndarray with axis labels (including time series). - * The object supports both integer- and label-based indexing and provides a host of methods for performing operations involving the index. - * Operations between Series (+, -, /, , *) align values based on their associated index values– they need not be the same length. - * @param {data} data Array, JSON of 1D values - * @param {kwargs} Object {columns: column names, dtypes : data type of values} - * - * @returns Series - */ -export class Series extends NDframe { - constructor(data?: any, kwargs?: any); - /** - * Returns a Series in Tensorflow's tensor format - * @returns {1D Tensor} - */ - get tensor(): Tensor1D; - /** - * Returns the first n values in a Series - * @param {rows} Number of rows to return - * @returns {Series} - */ - head(rows?: number): Series; - /** - * Returns the last n values in a Series - * @param {rows} number of rows to return - * @returns {Series} - */ - tail(rows?: number): Series; - /** - * Returns n number of random rows in a Series - * @param {rows} number of rows to return - * @returns {Series} - */ - sample(num?: number): Series; - /** - * Return Addition of series and other, element-wise (binary operator add). - * Equivalent to series + other - * @param {other} Series or Number to add - * @returns {Series} - */ - add(other?: any): Series; - /** - * Returns the subtraction between a series and other, element-wise (binary operator subtraction). - * Equivalent to series - other - * @param {other} Series, Number to subtract - * @returns {Series} - */ - sub(other?: any): Series; - /** - * Return Multiplication of series and other, element-wise (binary operator mul). - * Equivalent to series * other - * @param {other} Series, Number to multiply with. - * @returns {Series} - */ - mul(other?: any): Series; - /** - * Return division of series and other, element-wise (binary operator div). - * Equivalent to series / other - * @param {other} Series, Number to divide with. - * @returns {Series} - */ - div(other?: any, round?: boolean): Series; - /** - * Return Exponential power of series and other, element-wise (binary operator pow). - * Equivalent to series ** other - * @param {other} Series, Number to multiply with. - */ - pow(other?: any): Series; - /** - * Return Modulo of series and other, element-wise (binary operator mod). - * Equivalent to series % other - * @param {other} Series, Number - * @returns {Series} - */ - mod(other?: any): Series; - /** - * Returns the mean of elements in Series - * @returns {Series} - */ - mean(): Series; - /** - * Returns the median of elements in Series - * @returns {Series} - */ - median(): Series; - /** - * Returns the modal value of elements in Series - * @returns {Number} - */ - mode(): number; - /** - * Returns the minimum value in a Series - * @returns {Number} - */ - min(): number; - /** - * Returns the maximum value in a Series - * @returns {Number} - */ - max(): number; - /** - * Return the sum of the values in a series. - * This is equivalent to the method tf.sum - * @returns {Number}, sum of values in Series - */ - sum(): number; - /** - * Return number of non-null elements in a Series - * @returns {Number}, Count of non-null values - */ - count(): number; - /** - * Return maximum of series and other, element-wise (binary operator div). - * @param {other} Series, Numbers to check maximum against - * @returns {Series} - */ - maximum(other?: any): Series; - /** - * Return maximum of series and other, element-wise (binary operator div). - * @param {other} Series, Numbers to check maximum against - * @returns {Series} - */ - minimum(other?: any): Series; - /** - * Round each value in a Series to the given number of decimals. - * @param {dp} Number, Numbers of Decimal places to round to - * @returns {Series} - */ - round(dp?: any): Series; - /** - * Return sample standard deviation over requested axis. - * @returns {Number} - */ - std(): number; - /** - * Return unbiased variance of Series. - * @returns {Number} - */ - var(): number; - /** - * Return a boolean same-sized object indicating if the values are NaN. NaN and undefined values, - * gets mapped to True values. Everything else gets mapped to False values. - * @return {Series} - */ - isna(): Series; - /** - * Replace NaN or undefined with a specified value" - * @param {kwargs}, {"value": the new value to replace the old value with, inplace: Perform operation inplace or not} - * @return {Series} - */ - fillna(kwargs?: {}): Series; - /** - * Sort a Series in ascending or descending order by some criterion. - * @param {kwargs} Object, {ascending (Bool): Whether to return sorted values in ascending order or not, - * inplace (Bool): Whether to perform sorting on the original Series or not} - * @returns {Series} - */ - sort_values(kwargs?: {}): Series; - /** - * Makes a deep copy of a Series - * @returns {Series} - */ - copy(): Series; - /** - * Generate descriptive statistics. - * Descriptive statistics include those that summarize the central tendency, - * dispersion and shape of a dataset’s distribution, excluding NaN values. - * @returns {Series} - */ - describe(): Series; - /** - * Returns Series with the index reset. - * This is useful when index is meaningless and needs to be reset to the default before another operation. - * @param {kwargs} {inplace: Modify the Series in place (do not create a new object} - */ - reset_index(kwargs?: {}): Series; - /** - * Returns Series with the specified index. - * Set the Series index (row labels) using an array of the same length. - * @param {kwargs} {index: Array of new index values, - * inplace: If operation should happen inplace - * } - */ - set_index(kwargs?: {}): Series; - /** - * Checks if two series are compatible for a mathematical operation - * @param {Series} other Series to compare against - * @returns{boolean} - */ - __check_series_op_compactibility(other: Series): boolean; - /** - * map all the element in a column to a variable or function - * @param{callable} callable can either be a funtion or an object - * @return {Array} - */ - map(callable?: any): any[]; - /** - * Applies a function to each element of a Series - * @param {Function} Function to apply to each element of the series - * @return {Array} - */ - apply(callable?: any): any[]; - /** - * Returns the unique value(s) in a Series - * @return {Series} - */ - unique(): Series; - /** - * Return the number of unique value in a series - * @return {int} - */ - nunique(): any; - /** - * Returns unique values and their counts in a Series - * @return {Series} - */ - value_counts(): Series; - /** - * Returns the absolute values in Series - * @return {series} - */ - abs(): any; - /** - * Returns the cumulative sum over a Series - * @return {Series} - */ - cumsum(): Series; - /** - * Returns cumulative minimum over a Series - * @returns series - */ - cummin(): Series; - /** - * Returns cumulative maximum over a Series - * @returns series - */ - cummax(): Series; - /** - * Returns cumulative product over a Series - * @returns series - */ - cumprod(): Series; - /** - * Returns Less than of series and other. Supports element wise operations - * @param {other} Series, Scalar - * @return {Series} - */ - lt(other?: any): Series; - /** - * Returns Greater than of series and other. Supports element wise operations - * @param {other} Series, Scalar - * @return {Series} - */ - gt(other?: any): Series; - /** - * Returns Less than or Equal to of series and other. Supports element wise operations - * @param {other} Series, Scalar - * @return {Series} - */ - le(other?: any): Series; - /** - * Returns Greater than or Equal to of series and other. Supports element wise operations - * @param {other} Series, Scalar - * @return {Series} - */ - ge(other?: any): Series; - /** - * Returns Not Equal to of series and other. Supports element wise operations - * @param {other} Series, Scalar - * @return {Series} - */ - ne(other?: any): Series; - /** - * Returns Equal to of series and other. Supports element wise operations - * @param {other} Series, Scalar - * @return {Series} - */ - eq(other?: any): Series; - /** - * Replace all occurence of a value with a new value" - * @param {kwargs}, {"replace": the value you want to replace, - * "with": the new value you want to replace the olde value with, - * inplace: Perform operation inplace or not} - * @return {Series} - */ - replace(kwargs?: {}): Series; - /** - * Return a new Series with missing values (NaN) removed. - * @param {kwargs} {inplace: Perform operation inplace or not} - * @return {Series} - */ - dropna(kwargs?: {}): Series; - /** - * Return the integer indices that would sort the Series. - * @param {ascending} boolean true: will sort the Series in ascending order, false: will sort in descending order - * @return {Series} - */ - argsort(ascending?: boolean): Series; - /** - * Return int position of the largest value in the Series. - * @return {Number} - */ - argmax(): number; - /** - * Return int position of the smallest value in the Series. - * @param {ascending} boolean true: will sort the Series in ascending order, false: will sort in descending order - * @return {Series} - */ - argmin(): Series; - /** - * Returns dtype of Series - * @return {string} - */ - get dtype(): string; - /** - * Return Series with duplicate values removed - * @param {kwargs} {inplace: Perform operation inplace or not, - * keep: first | last which dupliate value to keep} - * @return {Series} - */ - drop_duplicates(kwargs?: {}): Series; - /** - * Perform boolean operations on bool values - * @param {*} other Other series to compare with - * @param {string} b_ops name of operation to perform [ne, ge, le, gt, lt, eq] - */ - __bool_ops(other?: any, b_ops: string): Series; - /** - * perform cumulative operation on series data - * @returns array - */ - __cum_ops(ops?: any): Series; - /** - * Cast Series to specified data type - * @param {string} dtype data type to cast to [float32, int32, string, boolean] - *@returns {Series} - */ - astype(dtype: string): Series; - /** - * Exposes numerous string methods to manipulate Series - */ - get str(): Str; - /** - * Returns Danfo Time Object that exposes different time properties - */ - get dt(): TimeSeries; - /** - * Make plots of Series or DataFrame. - * Uses the Plotly as backend, so therefore supports Plotly's configuration parameters - * @param {string} div Name of the div to show the plot - * @returns {Class} Plot class that expoese different plot type - */ - plot(div: string): any; - /** - * Slice series by index - * @param {Array} row list of index to slice by - * @returns Series - */ - iloc(row?: any[]): Series; - /** - * Adds new values to the end of a Series - * @param {Object} val Single value | Array | Series to append to the object - * @param {Boolean} inplace Whether to perform operation inplace or not - */ - append(val?: any, inplace?: boolean): Series; -} -import { Tensor1D } from "@tensorflow/tfjs"; -import NDframe from "./generic"; -import { Str } from "./strings"; -import { TimeSeries } from "./timeseries"; diff --git a/danfojs-browser/types/core/strings.d.ts b/danfojs-browser/types/core/strings.d.ts deleted file mode 100644 index 22bfb110..00000000 --- a/danfojs-browser/types/core/strings.d.ts +++ /dev/null @@ -1,133 +0,0 @@ -/** - * String methods applied on Series and DataFrames - */ -export class Str { - constructor(series?: any); - series?: any; - array?: any; - /** - * Converts all characters to lowercase. - * @return {array} - */ - toLowerCase(): any[]; - /** - * Converts all characters to uppercase. - * @return {array} - */ - toUpperCase(): any[]; - /** - * Capitalize first string - * @return {array} - */ - capitalize(): any[]; - /** - * Returns the character at the specified index (position) - * @params {index} index position of character - * @return {array} - */ - charAt(index?: number): any[]; - /** - * Joins two or more strings/arrays. 0 joins from the start - * @params {other} string|array to concatenate with. - * @params {position} where to concat the string from. O concats from the start, 1 concats from the end - * @params {isArray} whether operation is performed on Array or not - * @return {array} - */ - concat(other?: string, position?: number): any[]; - /** - * Checks whether a string begins with specified characters - * @params {String | Character} String or Character to check against - * @return {array} - */ - startsWith(str?: string): any[]; - /** - * Checks whether a string ends with specified characters - * @params {String | Character} String or Character to check against - * @return {array} - */ - endsWith(str?: string): any[]; - /** - * Checks whether a string contains the specified string/characters - * @params {String | Character} String or Character to check against - * @return {array} - */ - includes(str?: string): any[]; - /** - * Returns the position of the first found occurrence of a specified value in a string - * @params {String | Character} String or Character to check against - * @return {array} - */ - indexOf(str?: string): any[]; - /** - * Returns the position of the last found occurrence of a specified value in a string - * @params {str: String | Character} String or Character to check against - * @return {array} - */ - lastIndexOf(str?: string): any[]; - /** - * Searches a string for a specified value, or a regular expression, and returns a new string where the specified values are replaced - * @params {searchValue: String | Character} string value to replace - * @params {replaceValue: String | Character} string to replace with - * @return {array} - */ - replace(searchValue?: string, replaceValue?: string): any[]; - /** - * Returns a new string with a specified number of copies of an existing string - * @params {num: Integer} Number of times to repeat - * @return {array} - */ - repeat(num?: number): any[]; - /** - * Searches a string for a specified value, or regular expression, and returns the position of the match - * @params {str: String | Character} String or Character to check against - * @return {array} - */ - search(str?: string): any[]; - /** - * Extracts a part of a string and returns a new string - * @params {startIndex: Int} index position of start character - * @params {endIndex: Int} index position of last character - * @return {array} - */ - slice(startIndex?: number, endIndex?: number): any[]; - /** - * Splits a string into an array of substrings - * @params {val: string} string or character to split at - * @params {endIndex: Int} index position of last character - * @return {array} - */ - split(splitVal?: string): any[]; - /** - * Extracts the characters from a string, beginning at a specified start position, and through the specified number of character - * @params {startIndex: Int} index position of start character - * @params {num: Int} number of characters to return - * @return {array} - */ - substr(startIndex?: number, num?: number): any[]; - /** - * Extracts the characters from a string, between two specified indices - * @params {startIndex: Int} index position of start character - * @params {endIndex: Int} index position of last character - * @return {array} - */ - substring(startIndex?: number, endIndex?: number): any[]; - /** - * Removes whitespace from both ends of a string - * @return {array} - */ - trim(): any[]; - /** - * Joins strings to specified value - * @params {valToJoin} string value to join to the array - * @params {joinChar} Character to Join with - * @return {array} - */ - join(valToJoin?: string, joinChar?: string): any[]; - /** - * Counts the number of characters in string - * @return {array} - */ - len(): any[]; - __create_new_sf_from(new_val?: any, series?: any): Series; -} -import { Series } from "./series"; diff --git a/danfojs-browser/types/core/timeseries.d.ts b/danfojs-browser/types/core/timeseries.d.ts deleted file mode 100644 index d140a554..00000000 --- a/danfojs-browser/types/core/timeseries.d.ts +++ /dev/null @@ -1,98 +0,0 @@ -/** - * @class - * @description Handle all datetime operations - * @param {kwargs} Object {"data":[array of string], "format": string} - */ -export class TimeSeries { - constructor(kwargs?: any); - data?: any; - format?: any; - keys: { - Y: number; - m: number; - H: number; - M: number; - S: number; - b: number; - d: number; - "-": number; - }; - __in_format: string[]; - __monthName: string[]; - __weekName: string[]; - /** - * @description preprocessed the data into desirable structure - */ - preprocessed(): void; - date_list?: any[]; - /** - * @description if format is given, apply the format on each element of the data - * @return string - */ - __apply_format(elem?: any, format?: any): string; - /** - * @description convert format string to their respective value. - */ - generate_format(): any; - /** - * @description check if a string is a timestamp - * @param {date_string} date_string [string] - */ - is_timestamp(date_string?: any): boolean; - /** - * @description check if a date instance returns Invalid date - * @param {date_instance} instance of new Date() - */ - __is_validDate(date_instance?: any): void; - /** - * @description abstract all date operations - * @param {*} callback [FUNCTION] - * @return series - */ - __date_ops(callback?: any): Series; - /** - * @description obtain the month in a date. - * @return Series - */ - month(): Series; - /** - * @return Series - */ - hour(): Series; - /** - * @return Series - */ - day(): Series; - /** - * @description generate year frome date instance - * @return Series - */ - year(): Series; - /** - * @description generate month name - * @return Series - */ - month_name(): Series; - /** - * @description generate days of the week - * @return Series - */ - weekdays(): Series; - /** - * @description day of the month - * @return Series - */ - monthday(): Series; - /** - * @description obtain the seconds in a date - * @return Series - */ - seconds(): Series; - /** - * @description obtain the minutes in a date - * @return Series - */ - minutes(): Series; -} -export function to_datetime(kwargs?: any): TimeSeries; -import { Series } from "./series"; diff --git a/danfojs-browser/types/core/utils.d.ts b/danfojs-browser/types/core/utils.d.ts deleted file mode 100644 index cf122a5c..00000000 --- a/danfojs-browser/types/core/utils.d.ts +++ /dev/null @@ -1,94 +0,0 @@ -export class Utils { - remove(arr?: any, index?: any): any; - __remove_arr(arr?: any, index?: any): any; - __is_string(value?: any): boolean; - __is_number(value?: any): boolean; - __is_object(value?: any): boolean; - __is_null(value?: any): boolean; - __is_undefined(value?: any): boolean; - /** - * Optimized version of random sampling from an array, as implemented in Python - * - * - Chooses k unique random elements from a population sequence or set. - - Returns a new list containing elements from the population while - leaving the original population unchanged. The resulting list is - in selection order so that all sub-slices will also be valid random - samples. This allows raffle winners (the sample) to be partitioned - into grand prize and second place winners (the subslices). - - Members of the population need not be hashable or unique. If the - population contains repeats, then each occurrence is a possible - selection in the sample. - - To choose a sample in a range of integers, use range as an argument. - This is especially fast and space efficient for sampling from a - large population: sample(range(10000000), 60) - - Sampling without replacement entails tracking either potential - selections (the array) in a list or previous selections in a set. - - When the number of selections is small compared to the - population, then tracking selections is efficient, requiring - only a small set and an occasional reselection. For - a larger number of selections, the array tracking method is - preferred since the list takes less space than the - set and it doesn't suffer from frequent reselections. - * - * @param {*} array The array to sample values from randomly - * @param {*} num The number of elements to sample randomly - */ - __sample_from_iter(array?: any, k?: any, destructive?: any): any; - __range(start?: any, end?: any): any; - __key_in_object(object?: any, key?: any): boolean; - __get_col_values(data?: any): any[][]; - /** - * retrieve row array and column names from object of the form {a: [1,2,3,4], b: [30,20, 30, 20}] - * @param {*} data - */ - _get_row_and_col_values(data?: any): (string[] | any[][])[]; - __convert_2D_to_1D(data?: any): any[]; - __replace_undefined_with_NaN(data?: any, isSeries?: any): any[]; - __get_t(arr_val?: any): any[]; - __unique(data?: any): any; - __in_object(object?: any, key?: any, message?: any): void; - __is_1D_array(arr?: any): boolean; - __arr_to_obj(arr?: any): {}; - /** - * count the NaN and non-NaN values present in an array - * @param {Array} arr Array object - * @param {Boolean} val whether to return the value count instead of the null count - * @param {Boolean} isSeries Whether the Obj is of type series or not - */ - __count_nan(arr?: any[], return_val: boolean, isSeries: boolean): number | any[]; - __median(arr?: any, isSeries?: any): any; - __mode(arr?: any): number[]; - __round(arr?: any, dp: number, isSeries?: any): any[]; - __is_function(variable?: any): boolean; - __randgen(num?: any, start?: any, end?: any): any[]; - _throw_wrong_params_error(kwargs?: any, params_needed?: any): void; - __map_int_to_bool(arr?: any, dim?: any): any[]; - __std(data?: any): any; - __zeros(row?: any, column?: any): any[][]; - __shuffle(num?: any, array?: any): any; - __sort(arr?: any, ascending?: boolean): any; - __is_browser_env(): any; - __is_node_env(): any; - _throw_str_dtype_error(obj?: any, ops?: any): void; - /** - * Remove NaN values from Array - * @param {*} arr - */ - _remove_nans(arr?: any): any; - __get_duplicate(arr?: any): {}; - /** - * Sorts an array by index - * @param {Array} arr1 - * @param {Array} arr2 - * @param {string} dtype - * - * @returns sorted index - */ - _sort_arr_with_index(arr1?: any[], arr2?: any[], dtype: string): any[]; -} diff --git a/danfojs-browser/types/index.d.ts b/danfojs-browser/types/index.d.ts deleted file mode 100644 index ab3b0102..00000000 --- a/danfojs-browser/types/index.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Series } from "./core/series"; -import { DataFrame } from "./core/frame"; -import { to_datetime } from "./core/timeseries"; -import { merge } from "./core/merge"; -import { concat } from "./core/concat"; -import { date_range } from "./core/date_range"; -import { get_dummies } from "./core/get_dummies"; -import { read_csv, read_json, read_excel, read } from "./io/reader"; -import { LabelEncoder, OneHotEncoder } from "./preprocessing/encodings"; -import { MinMaxScaler, StandardScaler } from "./preprocessing/scalers"; - -declare module 'danfojs-node' { - export { Series, DataFrame, to_datetime, merge, concat, date_range, get_dummies, read_csv, read_json, read_excel, read, LabelEncoder, OneHotEncoder, MinMaxScaler, StandardScaler } -} \ No newline at end of file diff --git a/danfojs-browser/types/io/reader.d.ts b/danfojs-browser/types/io/reader.d.ts deleted file mode 100644 index 686b9a42..00000000 --- a/danfojs-browser/types/io/reader.d.ts +++ /dev/null @@ -1,4 +0,0 @@ -export function read_csv(source?: any, chunk?: any): Promise; -export function read_json(source?: any): Promise; -export function read_excel(kwargs?: any): Promise; -import { DataFrame } from "../core/frame"; diff --git a/danfojs-browser/types/plotting/plot.d.ts b/danfojs-browser/types/plotting/plot.d.ts deleted file mode 100644 index de3963e9..00000000 --- a/danfojs-browser/types/plotting/plot.d.ts +++ /dev/null @@ -1,66 +0,0 @@ -/** - * Plotting methods and Functions performed on Series and DataFrames - */ -export class Plot { - constructor(ndframe?: any, div?: any); - div?: any; - ndframe?: any; - /** - * Plot Series or DataFrame as lines. This function is useful to plot lines using DataFrame’s values as coordinates. - * Make plots of Series or DataFrame. - * Uses the Plotly as backend, so supoorts Plotly's configuration parameters - * @param {string} div Name of the div to show the plot - * @param {Object} config configuration options for making Plots, supports Plotly parameters - */ - line(config?: any): void; - /** - * Plot Series or DataFrame as Bars. - * Uses the Plotly as backend, so supoorts Plotly's configuration parameters - * @param {string} div Name of the div to show the plot - * @param {Object} config configuration options for making Plots, supports Plotly parameters - */ - bar(config?: any): void; - /** - * Plot two or more columns in a DataFrame as scatter points. If Series, plot against its index - * Uses the Plotly as backend, so supoorts Plotly's configuration parameters - * @param {string} div Name of the div to show the plot - * @param {Object} config configuration options for making Plots, supports Plotly parameters - */ - scatter(config?: any): void; - /** - * Plot columns in a Series/DataFrame as Histograms. - * Uses the Plotly as backend, so supoorts Plotly's configuration parameters - * @param {string} div Name of the div to show the plot - * @param {Object} config configuration options for making Plots, supports Plotly parameters - */ - hist(config?: any): void; - /** - * Makes Pie Plots from two Columns in a DataFrame. - * Uses the Plotly as backend, so supoorts Plotly's configuration parameters - * @param {string} div Name of the div to show the plot - * @param {Object} config configuration options for making Plots, supports Plotly parameters - */ - pie(config?: any): void; - /** - * Plot Box plots from Series or DataFrame as lines. - * Uses the Plotly as backend, so supoorts Plotly's configuration parameters - * @param {Object} config configuration options for making Plots, supports Plotly parameters - */ - box(config?: any): void; - /** - * Plot Violin plots from Series or DataFrame as lines. - * Uses the Plotly as backend, so supoorts Plotly's configuration parameters - * @param {Object} config configuration options for making Plots, supports Plotly parameters - */ - violin(config?: any): void; - /** - * Display DataFrame in a div using D3.js format - * Uses the Plotly as backend, so supoorts Plotly's configuration parameters - * @param {Object} config configuration options for making Plots, supports Plotly parameters - */ - table(config?: any): void; - __get_plot_params(config?: any): (string[] | { - layout: {}; - })[]; - ____check_if_cols_exist(cols?: any): any; -} diff --git a/danfojs-browser/types/preprocessing/encodings.d.ts b/danfojs-browser/types/preprocessing/encodings.d.ts deleted file mode 100644 index 4b866774..00000000 --- a/danfojs-browser/types/preprocessing/encodings.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -export class LabelEncoder { - /** - * - * @param {data} data [Array|Series] - * @returns Array. - */ - fit(data?: any): Series; - label?: any; - /** - * Transform data using the label generated from fitting - * @param {data} data [Array|Series] - * @returns Array - */ - transform(data?: any): Series; -} -export class OneHotEncoder { - fit(data?: any): DataFrame; - label?: any; - transform(data?: any): DataFrame; -} -import { Series } from "../core/series"; -import { DataFrame } from "../core/frame"; diff --git a/danfojs-browser/types/preprocessing/scalers.d.ts b/danfojs-browser/types/preprocessing/scalers.d.ts deleted file mode 100644 index aade7b34..00000000 --- a/danfojs-browser/types/preprocessing/scalers.d.ts +++ /dev/null @@ -1,29 +0,0 @@ -export class MinMaxScaler { - /** - * Fit minmax scaler on data, to obtain their min and max value - * @param {data} data [DataRame | Series | Array] - * @returns Array - */ - fit(data?: any): Series | DataFrame; - max?: any; - min?: any; - /** - * Transform an array using the min and max generated from the fitting on data - * @param {data} data [Array] - * @returns array - */ - transform(data?: any): Series | DataFrame; -} -export class StandardScaler { - /** - * - * @param {data} data [DataRame | Series | Array] - * @returns Array - */ - fit(data?: any): Series | DataFrame; - std?: any; - mean?: any; - transform(data?: any): Series | DataFrame; -} -import { Series } from "../core/series"; -import { DataFrame } from "../core/frame"; diff --git a/danfojs-browser/webpack.config.js b/danfojs-browser/webpack.config.js deleted file mode 100644 index b825af40..00000000 --- a/danfojs-browser/webpack.config.js +++ /dev/null @@ -1,38 +0,0 @@ -/* eslint-disable no-undef */ -const path = require("path"); - -const createConfig = (target) => { - return { - mode: "production", - devtool: "source-map", - context: path.resolve(__dirname), - entry: { - index: `./src/index.js` - }, - target: target, - output: { - path: path.resolve(__dirname, "lib"), - filename: `bundle.js`, - library: "dfd" - }, - module: { - rules: [ - { - use: { - loader: "babel-loader", - options: { presets: [ "@babel/preset-env" ] } - }, - test: /\.(js|jsx)$/, - exclude: /node_modules/ - } - ] - }, - resolve: { - fallback: { - fs: false - } - } - }; -}; - -module.exports = [ createConfig("web") ]; diff --git a/danfojs-node/.editorconfig b/danfojs-node/.editorconfig deleted file mode 100644 index cb8b48c7..00000000 --- a/danfojs-node/.editorconfig +++ /dev/null @@ -1,9 +0,0 @@ -# Editor configuration, see http://editorconfig.org -root = true - -[*] -charset = utf-8 -indent_style = space -indent_size = 2 -insert_final_newline = true -trim_trailing_whitespace = true \ No newline at end of file diff --git a/danfojs-node/dist/config/config.js b/danfojs-node/dist/config/config.js deleted file mode 100644 index d9a6c793..00000000 --- a/danfojs-node/dist/config/config.js +++ /dev/null @@ -1,59 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.Configs = void 0; - -class Configs { - constructor() { - this.table_width = 17; - this.table_truncate = 16; - this.dtype_test_lim = 10; - this.table_max_row = 21; - this.table_max_col_in_console = 7; - } - - set_width(val) { - this.table_width = val; - } - - get get_width() { - return this.table_width; - } - - set_max_col_in_console(val) { - this.table_max_col_in_console = val; - } - - get get_max_col_in_console() { - return this.table_max_col_in_console; - } - - set_row_num(val) { - this.table_max_row = val; - } - - get get_max_row() { - return this.table_max_row; - } - - get get_truncate() { - return this.table_truncate; - } - - set_truncate(val) { - this.table_truncate = val; - } - - get get_dtype_test_lim() { - return this.dtype_test_lim; - } - - set_dtype_test_lim(val) { - this.dtype_test_lim = val; - } - -} - -exports.Configs = Configs; \ No newline at end of file diff --git a/danfojs-node/dist/core/concat.js b/danfojs-node/dist/core/concat.js deleted file mode 100644 index 665e154a..00000000 --- a/danfojs-node/dist/core/concat.js +++ /dev/null @@ -1,204 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.concat = exports.Concat = void 0; - -var _frame = require("./frame"); - -var _utils = require("./utils"); - -var _series = require("./series"); - -const utils = new _utils.Utils(); - -class Concat { - constructor(kwargs) { - utils.__in_object(kwargs, "df_list", "df_list not found: specify the list of dataframe"); - - utils.__in_object(kwargs, "axis", "axis not found: specify the axis"); - - let df_list = null; - let axis = null; - let indexes = null; - - if (Array.isArray(kwargs["df_list"])) { - df_list = kwargs["df_list"]; - } else { - throw new Error("df_list must be an Array of dataFrames/Series"); - } - - if (typeof kwargs["axis"] === "number") { - if (kwargs["axis"] == 0 || kwargs["axis"] == 1) { - axis = kwargs["axis"]; - } else { - axis = 1; - } - } else { - throw new Error("axis must be a number"); - } - - let df_object = Object.assign({}, df_list); - - if (axis == 1) { - let columns = []; - let duplicate_col_count = {}; - let max_length = 0; - let a_key = Object.keys(df_object)[0]; - indexes = df_object[a_key].index; - - for (let key in df_object) { - let column = df_object[key].columns; - let length = df_object[key].values.length; - - if (length > max_length) { - max_length = length; - } - - for (let index in column) { - let col_name = column[index]; - - if (col_name in duplicate_col_count) { - let count = duplicate_col_count[col_name]; - let name = `${col_name}_${count + 1}`; - columns.push(name); - duplicate_col_count[col_name] = count + 1; - } else { - columns.push(col_name); - duplicate_col_count[col_name] = 1; - } - } - } - - let data = new Array(max_length); - - for (let key in df_list) { - let values = df_list[key].values; - - for (let index = 0; index < values.length; index++) { - let val = values[index]; - - if (typeof data[index] === "undefined") { - if (Array.isArray(val)) { - data[index] = val; - } else { - data[index] = [val]; - } - } else { - if (Array.isArray(val)) { - data[index].push(...val); - } else { - data[index].push(val); - } - } - } - - if (values.length < max_length) { - let column_length = df_list[key].columns.length; - let null_array = Array(column_length); - - for (let col = 0; col < column_length; col++) { - null_array[col] = NaN; - } - - if (typeof data[max_length - 1] === "undefined") { - data[max_length - 1] = null_array; - } else { - data[max_length - 1].push(...null_array); - } - } - } - - let df = new _frame.DataFrame(data, { - columns: columns, - index: indexes - }); - return df; - } else { - let columns = []; - let row_indexes = []; - let col_i = 0; - - for (let key in df_list) { - let column = df_list[key].columns; - columns.push(...column); - indexes = df_list[key].index; - let r_index = indexes.map(val => { - return `${val}_row${col_i}`; - }); - row_indexes.push(...r_index); - col_i += 1; - } - - let column_set = new Set(columns); - columns = Array.from(column_set); - let data = []; - - for (let key in df_list) { - let value = df_list[key].values; - let df_columns = df_list[key].columns; - let not_exist = []; - - for (let col_index in columns) { - let col_name = columns[col_index]; - let is_index = df_columns.indexOf(col_name); - - if (is_index == -1) { - not_exist.push(col_name); - } - } - - if (not_exist.length > 0) { - for (let i = 0; i < value.length; i++) { - let row_value = value[i]; - let new_arr = Array(columns.length); - - for (let j = 0; j < columns.length; j++) { - let col_name = columns[j]; - - if (not_exist.includes(col_name)) { - new_arr[j] = NaN; - } else { - let index = df_columns.indexOf(col_name); - - if (Array.isArray(row_value)) { - new_arr[j] = row_value[index]; - } else { - new_arr[j] = row_value; - } - } - } - - data.push(new_arr); - } - } else { - data.push(...value); - } - } - - if (Array.isArray(data[0])) { - let df = new _frame.DataFrame(data, { - columns: columns, - index: row_indexes - }); - return df; - } else { - let sf = new _series.Series(data, { - index: row_indexes - }); - return sf; - } - } - } - -} - -exports.Concat = Concat; - -const concat = kwargs => { - let concat_sf = new Concat(kwargs); - return concat_sf; -}; - -exports.concat = concat; \ No newline at end of file diff --git a/danfojs-node/dist/core/date_range.js b/danfojs-node/dist/core/date_range.js deleted file mode 100644 index 7843571a..00000000 --- a/danfojs-node/dist/core/date_range.js +++ /dev/null @@ -1,276 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.date_range = void 0; - -var _utils = require("./utils"); - -const utils = new _utils.Utils(); - -class date_range { - constructor(kwargs) { - this.offset = null; - - if (utils.__key_in_object(kwargs, "start")) { - this.start = kwargs["start"]; - } else { - this.start = null; - } - - if (utils.__key_in_object(kwargs, "end")) { - this.end = kwargs["end"]; - } else { - this.end = null; - } - - if (utils.__key_in_object(kwargs, "period")) { - this.period = kwargs["period"]; - } else { - this.period = null; - } - - if (utils.__key_in_object(kwargs, "freq")) { - this.freq = kwargs["freq"]; - } else { - this.freq = "D"; - } - - this.freq_list = ["M", "D", "s", "H", "m", "Y"]; - - if (this.freq.length == 1) { - if (!this.freq_list.includes(this.freq)) { - throw new Error(`invalid freq ${this.freq}`); - } - } else { - let freq_split = this.freq.split(""); - this.offset = parseInt(freq_split[0]); - this.freq = freq_split[1]; - - if (!this.freq_list.includes(this.freq)) { - throw new Error(`invalid freq ${this.freq}`); - } - } - - let rslt = this.range(this.start, this.end, this.period, this.offset); - return rslt; - } - - range(start, end, period, offset = null) { - let start_date = null; - let end_date = null; - let start_range = null; - let end_range = null; - - if (start && end) { - start_date = new Date(start); - start_range = this.freq_type(start_date, this.freq); - end_date = new Date(end); - end_range = this.freq_type(end_date, this.freq); - let start_year = start_date.getFullYear(); - let end_year = end_date.getFullYear(); - - if (start_year < end_year) { - if (this.freq == "M") { - end_range = this.month_end(start_date, end_date); - } else if (this.freq == "D") { - end_range = this.day_end(start_date, end_date) - start_range; - } - } - - let range_array = utils.__range(start_range, end_range); - - if (offset) { - range_array = this.offset_count(range_array, offset); - } - - if (this.freq == "M") { - range_array = this.month_range(range_array); - } - - let date_range = range_array.map(x => { - return this.set_dateProps(start_date, this.freq, x); - }); - date_range[date_range.length - 1] = end_date; - let date_string = this.toLocalString(date_range); - return date_string; - } else if (start && !end) { - start_date = new Date(start); - start_range = this.freq_type(start_date, this.freq); - end_range = offset ? period * offset - 1 : period - 1; - - if (start_range > end_range) { - end_range = end_range + start_range; - } - - let range_array = utils.__range(start_range, end_range); - - if (offset) { - range_array = this.offset_count(range_array, offset); - } - - let date_range = range_array.map(x => { - return this.set_dateProps(start_date, this.freq, x); - }); - let date_string = this.toLocalString(date_range); - return date_string; - } else if (end && !start) { - end_date = new Date(end); - end_range = this.freq_type(end_date, this.freq); - start_range = end_range - period + 1; - - let range_array = utils.__range(start_range, end_range); - - if (offset) { - range_array = this.offset_count(range_array, offset); - } - - let date_range = range_array.map(x => { - return this.set_dateProps(end_date, this.freq, x); - }); - let date_string = this.toLocalString(date_range); - return date_string; - } - } - - freq_type(date, ftype) { - let rslt = null; - - switch (ftype) { - case "M": - rslt = date.getMonth(); - break; - - case "Y": - rslt = date.getFullYear(); - break; - - case "s": - rslt = date.getSeconds(); - break; - - case "D": - rslt = date.getDate(); - break; - - case "H": - rslt = date.getHours(); - break; - - case "m": - rslt = date.getMinutes(); - break; - } - - return rslt; - } - - offset_count(d_array, offset) { - let r_array = []; - - for (let i = 0; i < d_array.length; i += offset) { - r_array.push(d_array[i]); - } - - return r_array; - } - - set_dateProps(date, ftype, val) { - let new_date = new Date(date.valueOf()); - - switch (ftype) { - case "M": - if (val.length == 2) { - new_date.setYear(new_date.getFullYear() + val[0]); - new_date.setMonth(parseInt(val[1])); - } else { - new_date.setMonth(val); - } - - break; - - case "Y": - new_date.setYear(val); - break; - - case "s": - new_date.setSeconds(val); - break; - - case "D": - new_date.setDate(val); - break; - - case "H": - new_date.setHours(val); - break; - - case "m": - new_date.setMinutes(val); - break; - } - - return new_date; - } - - toLocalString(d_array) { - let r_array = d_array.map(x => { - return x.toLocaleString(); - }); - return r_array; - } - - month_end(start_date, end_date) { - let end_month = end_date.getMonth(); - let diff_year = end_date.getFullYear() - start_date.getFullYear(); - let end_range = 12 * diff_year + end_month; - return end_range; - } - - month_range(range) { - let minus = null; - let y_val = 0; - let d_range = range.map(x => { - if (x > 11) { - if (x % 12 == 0) { - minus = x; - y_val = x / 12; - return [y_val, x - minus]; - } else { - return [y_val, x - minus]; - } - } - - return [y_val, x]; - }); - return d_range; - } - - day_end(start_date, end_date) { - let month_end = this.month_end(start_date, end_date); - - let range = utils.__range(start_date.getMonth(), month_end); - - let m_range = this.month_range(range); - let sum = 0; - - for (let i = 0; i < m_range.length; i++) { - let val = m_range[i]; - let d_date = null; - - if (i === m_range.length - 1) { - d_date = new Date(start_date.getFullYear() + val[0], val[1], end_date.getDate()).getDate(); - } else { - d_date = new Date(start_date.getFullYear() + val[0], val[1], 0).getDate(); - } - - sum += d_date; - } - - return sum; - } - -} - -exports.date_range = date_range; \ No newline at end of file diff --git a/danfojs-node/dist/core/frame.js b/danfojs-node/dist/core/frame.js deleted file mode 100644 index f3e77241..00000000 --- a/danfojs-node/dist/core/frame.js +++ /dev/null @@ -1,1881 +0,0 @@ -"use strict"; - -var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); - -var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.DataFrame = void 0; - -var tf = _interopRequireWildcard(require("@tensorflow/tfjs-node")); - -var _generic = _interopRequireDefault(require("./generic")); - -var _series = require("./series"); - -var _utils = require("./utils"); - -var _groupby = require("./groupby"); - -var _indexing = require("./indexing"); - -var _concat = require("./concat.js"); - -var _mathjs = require("mathjs"); - -const utils = new _utils.Utils(); - -class DataFrame extends _generic.default { - constructor(data, kwargs) { - super(data, kwargs); - - this._set_column_property(); - } - - _set_column_property() { - let col_vals = this.col_data; - let col_names = this.column_names; - col_vals.forEach((col, i) => { - this[col_names[i]] = null; - Object.defineProperty(this, col_names[i], { - get() { - return new _series.Series(this.col_data[i], { - columns: col_names[i], - index: this.index - }); - }, - - set(value) { - this.addColumn({ - column: col_names[i], - value: value - }); - } - - }); - }); - } - - async to_csv(csvFilePath = "") { - const csvContent = await super.to_csv(); - - if (typeof window === "undefined") { - const fs = require("fs"); - - fs.writeFileSync(csvFilePath, csvContent, err => err && console.error(err)); - } else { - const webCSV = "data:text/csv;charset=utf-8," + csvContent; - window.open(encodeURI(webCSV)); - } - - return csvContent; - } - - drop(kwargs = {}) { - let params_needed = ["columns", "index", "inplace", "axis"]; - - utils._throw_wrong_params_error(kwargs, params_needed); - - kwargs["inplace"] = kwargs["inplace"] || false; - - if (!("axis" in kwargs)) { - kwargs["axis"] = 1; - } - - let to_drop = null; - - if ("index" in kwargs && kwargs["axis"] == 0) { - to_drop = kwargs["index"]; - } else { - to_drop = kwargs["columns"]; - } - - if (kwargs["axis"] == 1) { - if (!("columns" in kwargs)) { - throw Error("No column found. Axis of 1 must be accompanied by an array of column(s) names"); - } - - let self = this; - let new_col_data = {}; - let new_dtype = []; - const index = to_drop.map(x => { - let col_idx = self.columns.indexOf(x); - - if (col_idx == -1) { - throw new Error(`column "${x}" does not exist`); - } - - return col_idx; - }); - this.col_data.forEach((col, idx) => { - if (!index.includes(idx)) { - new_col_data[self.column_names[idx]] = col; - new_dtype.push(self.dtypes[idx]); - } - }); - - if (!kwargs["inplace"]) { - let old_cols = self.columns; - let new_columns = Object.keys(new_col_data); - let df = new DataFrame(new_col_data, { - index: self.index, - dtypes: new_dtype - }); - - df.__set_col_property(df, df.col_data, new_columns, old_cols); - - return df; - } else { - let old_cols = self.columns; - let new_columns = Object.keys(new_col_data); - - this.__update_frame_in_place(null, null, new_col_data, null, new_dtype); - - this.__set_col_property(self, self.col_data, new_columns, old_cols); - } - } else { - if (!utils.__key_in_object(kwargs, "index")) { - throw Error("No index label found. Axis of 0 must be accompanied by an array of index labels"); - } - - to_drop.forEach(x => { - if (!this.index.includes(x)) throw new Error(`${x} does not exist in index`); - }); - const values = this.values; - let data_idx = []; - let new_data, new_index; - - if (typeof to_drop[0] == "string") { - this.index.forEach((idx, i) => { - if (to_drop.includes(idx)) { - data_idx.push(i); - } - }); - new_data = utils.__remove_arr(values, data_idx); - new_index = utils.__remove_arr(this.index, data_idx); - } else { - new_data = utils.__remove_arr(values, to_drop); - new_index = utils.__remove_arr(this.index, to_drop); - } - - if (!kwargs["inplace"]) { - return new DataFrame(new_data, { - columns: this.columns, - index: new_index - }); - } else { - this.row_data_tensor = tf.tensor(new_data); - this.data = new_data; - - this.__set_index(new_index); - } - } - } - - loc(kwargs = {}) { - let params_needed = ["columns", "rows"]; - - utils._throw_wrong_params_error(kwargs, params_needed); - - kwargs["type"] = "loc"; - let [new_data, columns, rows] = (0, _indexing.indexLoc)(this, kwargs); - let df_columns = { - columns: columns - }; - let df = new DataFrame(new_data, df_columns); - - df.__set_index(rows); - - return df; - } - - iloc(kwargs = {}) { - let params_needed = ["columns", "rows"]; - - utils._throw_wrong_params_error(kwargs, params_needed); - - kwargs["type"] = "iloc"; - let [new_data, columns, rows] = (0, _indexing.indexLoc)(this, kwargs); - let df_columns = { - columns: columns - }; - let df = new DataFrame(new_data, df_columns); - - df.__set_index(rows); - - return df; - } - - head(rows = 5) { - if (rows > this.values.length || rows < 1) { - return this; - } else { - let data = this.values.slice(0, rows); - let idx = this.index.slice(0, rows); - let config = { - columns: this.column_names, - index: idx - }; - let df = new DataFrame(data, config); - return df; - } - } - - tail(rows = 5) { - let row_len = this.values.length; - - if (rows > row_len || rows < 1) { - return this; - } else { - let data = this.values.slice(row_len - rows); - let indx = this.index.slice(row_len - rows); - let config = { - columns: this.column_names, - index: indx - }; - let df = new DataFrame(data, config); - return df; - } - } - - async sample(num = -1, seed = 1) { - if (num > this.shape[0]) { - throw new Error("Sample size n cannot be bigger than size of dataset"); - } - - if (num < -1 || num == 0) { - throw new Error("Sample size cannot be less than -1 or 0"); - } - - num = num === -1 ? this.shape[0] : num; - const shuffled_index = await tf.data.array(this.index).shuffle(num, seed).take(num).toArray(); - const df = this.iloc({ - rows: shuffled_index - }); - return df; - } - - add(other, axis) { - if (this.__frame_is_compactible_for_operation) { - let tensors = this.__get_ops_tensors([this, other], axis); - - let sum_vals = tensors[0].add(tensors[1]); - let col_names = this.columns; - return this.__get_df_from_tensor(sum_vals, col_names); - } else { - throw Error("TypeError: Dtypes of columns must be Float of Int"); - } - } - - sub(other, axis) { - if (this.__frame_is_compactible_for_operation) { - let tensors = this.__get_ops_tensors([this, other], axis); - - let result = tensors[0].sub(tensors[1]); - let col_names = this.columns; - return this.__get_df_from_tensor(result, col_names); - } else { - throw Error("TypeError: Dtypes of columns must be Float of Int"); - } - } - - mul(other, axis) { - if (this.__frame_is_compactible_for_operation) { - let tensors = this.__get_ops_tensors([this, other], axis); - - let result = tensors[0].mul(tensors[1]); - let col_names = this.columns; - return this.__get_df_from_tensor(result, col_names); - } else { - throw Error("TypeError: Dtypes of columns must be Float of Int"); - } - } - - div(other, axis) { - if (this.__frame_is_compactible_for_operation) { - let tensors = this.__get_ops_tensors([this, other], axis); - - let result = tensors[0].div(tensors[1]); - let col_names = this.columns; - return this.__get_df_from_tensor(result, col_names); - } else { - throw Error("TypeError: Dtypes of columns must be Float of Int"); - } - } - - pow(other, axis) { - if (this.__frame_is_compactible_for_operation) { - let tensors = this.__get_ops_tensors([this, other], axis); - - let result = tensors[0].pow(tensors[1]); - let col_names = this.columns; - return this.__get_df_from_tensor(result, col_names); - } else { - throw Error("TypeError: Dtypes of columns must be Float of Int"); - } - } - - mod(other, axis) { - if (this.__frame_is_compactible_for_operation) { - let tensors = this.__get_ops_tensors([this, other], axis); - - let result = tensors[0].mod(tensors[1]); - let col_names = this.columns; - return this.__get_df_from_tensor(result, col_names); - } else { - throw Error("TypeError: Dtypes of columns must be Float of Int"); - } - } - - mean(axis = 1) { - if (this.__frame_is_compactible_for_operation()) { - let values; - let val_mean = []; - - if (axis == 1) { - values = this.col_data; - } else { - values = this.values; - } - - values.map(arr => { - let temp = utils._remove_nans(arr); - - let temp_mean = tf.tensor(temp).mean().arraySync(); - val_mean.push(Number(temp_mean.toFixed(5))); - }); - let new_index; - - if (axis == 1) { - new_index = this.column_names; - } else { - new_index = this.index; - } - - let sf = new _series.Series(val_mean, { - columns: "sum", - index: new_index - }); - return sf; - } else { - throw Error("Dtype Error: Operation can not be performed on string type"); - } - } - - median(axis = 1) { - if (this.__frame_is_compactible_for_operation) { - let tensor_vals, idx; - - if (axis == 1) { - tensor_vals = this.col_data_tensor.arraySync(); - idx = this.column_names; - } else { - tensor_vals = this.row_data_tensor.arraySync(); - idx = this.index; - } - - let median = utils.__median(tensor_vals, false); - - let sf = new _series.Series(median, { - index: idx - }); - return sf; - } else { - throw Error("TypeError: Dtypes of columns must be Float of Int"); - } - } - - min(axis = 1) { - if (this.__frame_is_compactible_for_operation) { - let operands = this.__get_tensor_and_idx(this, axis); - - let tensor_vals = operands[0]; - let idx = operands[1]; - let result = tensor_vals.min(operands[2]); - let sf = new _series.Series(result.arraySync(), { - index: idx - }); - return sf; - } else { - throw Error("TypeError: Dtypes of columns must be Float of Int"); - } - } - - max(axis = 1) { - if (this.__frame_is_compactible_for_operation) { - let operands = this.__get_tensor_and_idx(this, axis); - - let tensor_vals = operands[0]; - let idx = operands[1]; - let result = tensor_vals.max(operands[2]); - let sf = new _series.Series(result.arraySync(), { - index: idx - }); - return sf; - } else { - throw Error("TypeError: Dtypes of columns must be Float of Int"); - } - } - - std(axis = 1) { - if (this.__frame_is_compactible_for_operation) { - let tensor_vals = this.col_data_tensor.arraySync(); - let idx; - - if (axis == 1) { - idx = this.column_names; - } else { - idx = this.index; - } - - let median = (0, _mathjs.std)(tensor_vals, axis); - let sf = new _series.Series(median, { - index: idx - }); - return sf; - } else { - throw Error("TypeError: Dtypes of columns must be Float of Int"); - } - } - - var(axis = 1) { - if (this.__frame_is_compactible_for_operation) { - let tensor_vals = this.col_data_tensor.arraySync(); - let idx; - - if (axis == 1) { - idx = this.column_names; - } else { - idx = this.index; - } - - let median = (0, _mathjs.variance)(tensor_vals, axis); - let sf = new _series.Series(median, { - index: idx - }); - return sf; - } else { - throw Error("TypeError: Dtypes of columns must be Float of Int"); - } - } - - count(axis = 1) { - if (this.__frame_is_compactible_for_operation) { - let tensor_vals, idx; - - if (axis == 1) { - tensor_vals = this.col_data_tensor.arraySync(); - idx = this.column_names; - } else { - tensor_vals = this.row_data_tensor.arraySync(); - idx = this.index; - } - - let counts = utils.__count_nan(tensor_vals, true, false); - - let sf = new _series.Series(counts, { - index: idx - }); - return sf; - } else { - throw Error("TypeError: Dtypes of columns must be Float of Int"); - } - } - - round(dp = 1) { - if (this.__frame_is_compactible_for_operation) { - let values = this.values; - let idx = this.index; - - let new_vals = utils.__round(values, dp, false); - - let options = { - columns: this.column_names, - index: idx - }; - let df = new DataFrame(new_vals, options); - return df; - } else { - throw Error("TypeError: Dtypes of columns must be Float of Int"); - } - } - - __cum_ops(axis = 0, ops) { - if (!(axis == 0) && !(axis == 1)) { - throw new Error("axis must be between 0 or 1"); - } - - if (this.__frame_is_compactible_for_operation) { - let data = []; - let df_data = null; - - if (axis == 0) { - df_data = this.col_data; - } else { - df_data = this.values; - } - - for (let i = 0; i < df_data.length; i++) { - let value = df_data[i]; - let temp_val = value[0]; - let temp_data = [temp_val]; - - for (let j = 1; j < value.length; j++) { - let curr_val = value[j]; - - switch (ops) { - case "max": - if (curr_val > temp_val) { - temp_val = curr_val; - temp_data.push(curr_val); - } else { - temp_data.push(temp_val); - } - - break; - - case "min": - if (curr_val < temp_val) { - temp_val = curr_val; - temp_data.push(curr_val); - } else { - temp_data.push(temp_val); - } - - break; - - case "sum": - temp_val = temp_val + curr_val; - temp_data.push(temp_val); - break; - - case "prod": - temp_val = temp_val * curr_val; - temp_data.push(temp_val); - break; - } - } - - data.push(temp_data); - } - - if (axis == 0) { - data = utils.__get_col_values(data); - } - - return new DataFrame(data, { - columns: this.columns - }); - } else { - throw Error("TypeError: Dtypes of columns must be Float of Int"); - } - } - - cumsum(kwargs = {}) { - let axis; - - if (!utils.__key_in_object(kwargs, "axis")) { - axis = 0; - } else { - axis = kwargs["axis"]; - } - - let data = this.__cum_ops(axis, "sum"); - - return data; - } - - cummin(kwargs = {}) { - let axis; - - if (!utils.__key_in_object(kwargs, "axis")) { - axis = 0; - } else { - axis = kwargs["axis"]; - } - - let data = this.__cum_ops(axis, "min"); - - return data; - } - - cummax(kwargs = {}) { - let axis; - - if (!utils.__key_in_object(kwargs, "axis")) { - axis = 0; - } else { - axis = kwargs["axis"]; - } - - let data = this.__cum_ops(axis, "max"); - - return data; - } - - cumprod(kwargs = {}) { - let axis; - - if (!utils.__key_in_object(kwargs, "axis")) { - axis = 0; - } else { - axis = kwargs["axis"]; - } - - let data = this.__cum_ops(axis, "prod"); - - return data; - } - - copy() { - let df = new DataFrame([...this.values], { - columns: [...this.column_names], - index: this.index, - dtypes: this.dtypes - }); - return df; - } - - reset_index(inplace = false) { - if (inplace) { - this.__reset_index(); - } else { - let df = this.copy(); - - df.__reset_index(); - - return df; - } - } - - set_index(kwargs = {}) { - let params_needed = ["key", "drop", "inplace"]; - - utils._throw_wrong_params_error(kwargs, params_needed); - - if (!utils.__key_in_object(kwargs, "key")) { - throw Error("Index ValueError: You must specify an array of index"); - } - - if (!utils.__key_in_object(kwargs, "inplace")) { - kwargs["inplace"] = false; - } - - if (!utils.__key_in_object(kwargs, "drop")) { - kwargs["drop"] = true; - } - - if (Array.isArray(kwargs["key"]) && kwargs["key"].length != this.index.length) { - throw Error(`Index LengthError: Lenght of new Index array ${kwargs["key"].length} must match lenght of existing index ${this.index.length}`); - } - - if (typeof kwargs["key"] == "string" && this.column_names.includes(kwargs["key"])) { - kwargs["key_name"] = kwargs["key"]; - kwargs["key"] = this[kwargs["key"]].values; - } - - if (kwargs["inplace"]) { - this.__set_index(kwargs["key"]); - - if (kwargs["drop"] && typeof kwargs["key_name"] == "string") { - this.drop({ - columns: [kwargs["key_name"]], - inplace: true, - axis: 1 - }); - } - } else { - let df = this.copy(); - - df.__set_index(kwargs["key"]); - - if (kwargs["drop"] && typeof kwargs["key_name"] == "string") { - df.drop({ - columns: [kwargs["key_name"]], - axis: 1, - inplace: true - }); - } - - return df; - } - } - - describe() { - let numeric_df = this.select_dtypes(["float32", "int32"]); - let col_names = numeric_df.column_names; - let index = ["count", "mean", "std", "min", "median", "max", "variance"]; - let stats_arr = {}; - col_names.forEach(name => { - let col_series = numeric_df[name]; - let count = col_series.count(); - let mean = col_series.mean(); - let std = col_series.std(); - let min = col_series.min(); - let median = col_series.median(); - let max = col_series.max(); - let variance = col_series.var(); - let _stats = [count, mean, std, min, median, max, variance]; - stats_arr[name] = _stats; - }); - let df = new DataFrame(stats_arr, { - index: index - }); - return df.round(6); - } - - select_dtypes(include) { - let dtypes = this.dtypes; - let col_names = this.column_names; - let col_vals = {}; - let original_col_vals = this.col_data; - const __supported_dtypes = ["float32", "int32", "string", "boolean"]; - - if (include == undefined) { - let df = this.copy(); - return df; - } else { - include.forEach(type => { - if (!__supported_dtypes.includes(type)) { - throw Error(`Dtype Error: dtype ${type} not supported.`); - } - }); - dtypes.forEach((dtype, i) => { - if (include.includes(dtype)) { - col_vals[col_names[i]] = original_col_vals[i]; - } - }); - let df = new DataFrame(col_vals); - return df; - } - } - - sum(kwargs = { - axis: 1 - }) { - if (this.__frame_is_compactible_for_operation()) { - let values; - let val_sums = []; - - if (kwargs["axis"] == 1) { - values = this.col_data; - } else { - values = this.values; - } - - values.map(arr => { - let temp = utils._remove_nans(arr); - - let temp_sum = tf.tensor(temp).sum().arraySync(); - val_sums.push(Number(temp_sum.toFixed(5))); - }); - let new_index; - - if (kwargs["axis"] == 1) { - new_index = this.column_names; - } else { - new_index = this.index; - } - - let sf = new _series.Series(val_sums, { - columns: "sum", - index: new_index - }); - return sf; - } else { - throw Error("Dtype Error: Operation can not be performed on string type"); - } - } - - abs() { - let data = this.values; - let tensor_data = tf.tensor(data); - let abs_data = tensor_data.abs().arraySync(); - let df = new DataFrame(utils.__round(abs_data, 2, false), { - columns: this.column_names, - index: this.index - }); - return df; - } - - __get_tensor_and_idx(df, axis) { - let tensor_vals, idx, t_axis; - - if (axis == 1) { - let temp_tensor_vals = df.row_data_tensor; - let flat_tensor_array = tf.util.flatten(temp_tensor_vals.arraySync()); - - const flat_tensor_array_without_nans = utils._replace_nan_with_null(flat_tensor_array); - - tensor_vals = tf.tensor(flat_tensor_array_without_nans, temp_tensor_vals.shape); - idx = df.column_names; - t_axis = 0; - } else { - tensor_vals = df.row_data_tensor; - idx = df.index; - t_axis = 1; - } - - return [tensor_vals, idx, t_axis]; - } - - query(kwargs) { - let operators = [">", "<", "<=", ">=", "==", "!="]; - - if (!utils.__key_in_object(kwargs, "inplace")) { - kwargs["inplace"] = false; - } - - let column_index, operator, value; - - if (utils.__key_in_object(kwargs, "column")) { - if (this.columns.includes(kwargs["column"])) { - column_index = this.columns.indexOf(kwargs["column"]); - } else { - throw new Error(`column ${kwargs["column"]} does not exist`); - } - } else { - throw new Error("specify the column"); - } - - if (utils.__key_in_object(kwargs, "is")) { - if (operators.includes(kwargs["is"])) { - operator = kwargs["is"]; - } else { - throw new Error(` ${kwargs["is"]} is not a supported logical operator`); - } - } else { - throw new Error("specify an operator in param [is]"); - } - - if (utils.__key_in_object(kwargs, "to")) { - value = kwargs["to"]; - } else { - throw new Error("specify a value in param [to]"); - } - - let data = this.values; - let index = this.index; - let new_data = []; - let new_index = []; - - for (var i = 0; i < data.length; i++) { - let data_value = data[i]; - let elem = data_value[column_index]; - - if (eval(`elem${operator}value`)) { - new_data.push(data_value); - new_index.push(index[i]); - } - } - - if (new_data.length == 0) { - throw new Error(`query returned empty data; is either ${value} does not exist in column ${kwargs["column"]}`); - } - - if (kwargs["inplace"]) { - this.__update_frame_in_place(new_data, this.columns, null, new_index, null); - } else { - let new_df = new DataFrame(new_data, { - columns: this.columns, - index: new_index - }); - return new_df; - } - } - - addColumn(kwargs) { - utils.__in_object(kwargs, "column", "column name not specified"); - - utils.__in_object(kwargs, "value", "column value not specified"); - - let column_name = kwargs["column"]; - let data_length = this.shape[0]; - let value; - - if (kwargs["value"] instanceof _series.Series) { - value = kwargs["value"].values; - } else { - value = kwargs["value"]; - } - - if (value.length != data_length) { - throw new Error(`Array length ${value.length} not equal to ${data_length}`); - } - - if (this.columns.includes(column_name)) { - let col_idx = this.columns.indexOf(column_name); - let new_data = []; - this.values.map((val, index) => { - let new_val = val.slice(); - new_val[col_idx] = value[index]; - new_data.push(new_val); - }); - - this.__update_frame_in_place(new_data, null, null, null, null); - } else { - let data = this.values; - let new_data = []; - data.map(function (val, index) { - let new_val = val.slice(); - new_val.push(value[index]); - new_data.push(new_val); - }); - let new_dtypes = [...this.dtypes]; - new_dtypes.push(utils.__get_t(value)[0]); - let new_col_names = [...this.columns]; - new_col_names.push(column_name); - - this.__update_frame_in_place(new_data, new_col_names, null, null, new_dtypes); - - Object.defineProperty(this, column_name, { - get() { - return new _series.Series(value, { - columns: column_name, - index: this.index - }); - }, - - set(value) { - this.addColumn({ - column: column_name, - value: value - }); - } - - }); - } - } - - groupby(col) { - const len = this.shape[0]; - const column_names = this.column_names; - const col_index = col.map(val => column_names.indexOf(val)); - const col_dtype = this.dtypes.filter((val, index) => { - return col_index.includes(index); - }); - const self = this; - const data = col.map(column_name => { - if (!column_names.includes(column_name)) throw new Error(`column ${column_name} does not exist`); - const [column_data, _] = (0, _indexing.indexLoc)(self, { - rows: [`0:${len}`], - columns: [`${column_name}`], - type: "loc" - }); - return column_data; - }); - const unique_columns = data.map(column_data => utils.__unique(column_data)); - - function getRecursiveDict(uniq_columns) { - const first_uniq_columns = uniq_columns[0]; - const remaining_columns = uniq_columns.slice(1); - const c_dict = {}; - if (!remaining_columns.length) first_uniq_columns.forEach(col_value => c_dict[col_value] = []);else first_uniq_columns.forEach(col_value => c_dict[col_value] = getRecursiveDict(remaining_columns)); - return c_dict; - } - - const col_dict = getRecursiveDict(unique_columns); - return new _groupby.GroupBy(col_dict, col, this.values, column_names, col_dtype).group(); - } - - column(col_name) { - if (!this.columns.includes(col_name)) { - throw new Error(`column ${col_name} does not exist`); - } - - let col_indx_objs = utils.__arr_to_obj(this.columns); - - let indx = col_indx_objs[col_name]; - let data = this.col_data[indx]; - return new _series.Series(data, { - columns: [col_name] - }); - } - - fillna(kwargs = {}) { - let params_needed = ["columns", "values", "inplace"]; - - utils._throw_wrong_params_error(kwargs, params_needed); - - if (!utils.__key_in_object(kwargs, "inplace")) { - kwargs["inplace"] = false; - } - - if (utils.__key_in_object(kwargs, "columns")) { - kwargs["columns"].map(col => { - if (!this.column_names.includes(col)) { - throw Error(`Value Error: Specified columns must be one of ${this.column_names}, got ${col}`); - } - }); - - if (kwargs["columns"].length != kwargs["values"].length) { - throw Error(`Lenght Error: The lenght of the columns names must be equal to the lenght of the values, - got column of length ${kwargs["columns"].length} but values of length ${kwargs["values"].length}`); - } - - let new_col_data = this.col_data; - kwargs["columns"].map((col, i) => { - let col_idx = this.column_names.indexOf(col); - let col_data = this.col_data[col_idx]; - let __temp = []; - col_data.map(val => { - if (isNaN(val) && typeof val != "string") { - __temp.push(kwargs["values"][i]); - } else { - __temp.push(val); - } - }); - new_col_data[col_idx] = __temp; - }); - let final_data = {}; - new_col_data.map((col, i) => { - final_data[this.column_names[i]] = col; - }); - - if (kwargs["inplace"]) { - this.__update_frame_in_place(null, null, final_data, null, null); - } else { - return new DataFrame(final_data, { - index: this.index - }); - } - } else { - if (!utils.__key_in_object(kwargs, "values")) { - throw Error("Value Error: Please specify a fill value"); - } - - let nan_val; - - if (Array.isArray(kwargs["values"])) { - nan_val = kwargs["values"][0]; - } else { - nan_val = kwargs["values"]; - } - - let data = []; - let values = this.values; - let columns = this.columns; - - for (let i = 0; i < values.length; i++) { - let temp_data = []; - let row_value = values[i]; - - for (let j = 0; j < row_value.length; j++) { - if (isNaN(row_value[j]) && typeof row_value[j] != "string") { - temp_data.push(nan_val); - } else { - temp_data.push(row_value[j]); - } - } - - data.push(temp_data); - } - - if (kwargs["inplace"]) { - this.__update_frame_in_place(data, null, null, null, null); - } else { - return new DataFrame(data, { - columns: columns, - index: this.index - }); - } - } - } - - isna() { - let new_row_data = this.__isna(); - - let columns = this.column_names; - return new DataFrame(new_row_data, { - columns: columns, - index: this.index - }); - } - - nanIndex() { - let df_values = this.values; - let index_data = []; - - for (let i = 0; i < df_values.length; i++) { - let row_values = df_values[i]; - - if (row_values.includes(NaN)) { - index_data.push(i); - } - } - - return index_data; - } - - dropna(kwargs = {}) { - let axis = kwargs["axis"] || 0; - let inplace = kwargs["inplace"] || false; - - if (axis != 0 && axis != 1) { - throw new Error("axis must either be 1 or 0"); - } - - let df_values = null; - let columns = null; - - if (axis == 0) { - df_values = this.values; - columns = this.columns; - } else { - df_values = this.col_data; - columns = []; - } - - let data = []; - - for (let i = 0; i < df_values.length; i++) { - let values = df_values[i]; - - if (!values.includes(NaN)) { - if (axis == 0) { - data.push(values); - } else { - columns.push(this.columns[i]); - - if (data.length == 0) { - for (let j = 0; j < values.length; j++) { - data.push([values[j]]); - } - } else { - for (let j = 0; j < data.length; j++) { - data[j].push(values[j]); - } - } - } - } - } - - if (inplace == true) { - this.data = data; - - this.__reset_index(); - - this.columns = columns; - } else { - return new DataFrame(data, { - columns: columns - }); - } - } - - apply(kwargs) { - let is_callable = utils.__is_function(kwargs["callable"]); - - if (!is_callable) { - throw new Error("the argument must be a function"); - } - - let callable = kwargs["callable"]; - let data = []; - - if (utils.__key_in_object(kwargs, "axis")) { - let axis = kwargs["axis"]; - let df_data; - - if (axis == 0) { - df_data = this.values; - } else { - df_data = this.col_data; - } - - for (let i = 0; i < df_data.length; i++) { - let value = tf.tensor(df_data[i]); - let callable_data; - - try { - callable_data = callable(value).arraySync(); - } catch (error) { - throw Error(`Callable Error: You can only apply JavaScript functions on DataFrames when axis is not specified. This operation is applied on all element, and returns a DataFrame of the same shape.`); - } - - data.push(callable_data); - } - } else { - let df_data = this.values; - let new_data = []; - df_data.forEach(row => { - let new_row = []; - row.forEach(val => { - new_row.push(callable(val)); - }); - new_data.push(new_row); - }); - data = new_data; - } - - if (utils.__is_1D_array(data)) { - if (kwargs["axis"] == 0) { - let sf = new _series.Series(data, { - index: this.index - }); - return sf; - } else { - let sf = new _series.Series(data, { - index: this.column_names - }); - return sf; - } - } else { - let df = new DataFrame(data, { - columns: this.column_names, - index: this.index - }); - return df; - } - } - - lt(other, axis) { - if (this.__frame_is_compactible_for_operation()) { - if (axis == undefined) { - axis = 0; - } - - let df = this.__logical_ops(other, "lt", axis); - - return df; - } else { - throw Error("Dtype Error: Operation can not be performed on string type"); - } - } - - gt(other, axis) { - if (this.__frame_is_compactible_for_operation()) { - if (axis == undefined) { - axis = 0; - } - - let df = this.__logical_ops(other, "gt", axis); - - return df; - } else { - throw Error("Dtype Error: Operation can not be performed on string type"); - } - } - - le(other, axis) { - if (this.__frame_is_compactible_for_operation()) { - if (axis == undefined) { - axis = 0; - } - - let df = this.__logical_ops(other, "le", axis); - - return df; - } else { - throw Error("Dtype Error: Operation can not be performed on string type"); - } - } - - ge(other, axis) { - if (this.__frame_is_compactible_for_operation()) { - if (axis == undefined) { - axis = 0; - } - - let df = this.__logical_ops(other, "ge", axis); - - return df; - } else { - throw Error("Dtype Error: Operation can not be performed on string type"); - } - } - - ne(other, axis) { - if (this.__frame_is_compactible_for_operation()) { - if (axis == undefined) { - axis = 0; - } - - let df = this.__logical_ops(other, "ne", axis); - - return df; - } else { - throw Error("Dtype Error: Operation can not be performed on string type"); - } - } - - eq(other, axis) { - if (this.__frame_is_compactible_for_operation()) { - if (axis == undefined) { - axis = 0; - } - - let df = this.__logical_ops(other, "eq", axis); - - return df; - } else { - throw Error("Dtype Error: Operation can not be performed on string type"); - } - } - - replace(kwargs = {}) { - let params_needed = ["replace", "with", "in"]; - - utils._throw_wrong_params_error(kwargs, params_needed); - - if (utils.__key_in_object(kwargs, "in")) { - kwargs["in"].map(col => { - if (!this.column_names.includes(col)) { - throw Error(`Value Error: Specified columns must be one of ${this.column_names}, got ${col}`); - } - }); - - if (utils.__key_in_object(kwargs, "replace") && utils.__key_in_object(kwargs, "with")) { - let new_col_data_obj = {}; - this.column_names.map((col, idx) => { - if (kwargs["in"].includes(col)) { - let temp_col_data = this.col_data[idx]; - let __temp = []; - temp_col_data.map(val => { - if (val == kwargs["replace"]) { - __temp.push(kwargs["with"]); - } else { - __temp.push(val); - } - }); - new_col_data_obj[col] = __temp; - } else { - new_col_data_obj[col] = this.col_data[idx]; - } - }); - return new DataFrame(new_col_data_obj, { - columns: this.column_names, - index: this.index - }); - } else { - throw Error("Params Error: Must specify both 'replace' and 'with' parameters."); - } - } else { - if (utils.__key_in_object(kwargs, "replace") && utils.__key_in_object(kwargs, "with")) { - let replaced_arr = []; - let old_arr = this.values; - old_arr.map(inner_arr => { - let temp = []; - inner_arr.map(val => { - if (val == kwargs["replace"]) { - temp.push(kwargs["with"]); - } else { - temp.push(val); - } - }); - replaced_arr.push(temp); - }); - let df = new DataFrame(replaced_arr, { - index: this.index, - columns: this.column_names - }); - return df; - } else { - throw Error("Params Error: Must specify both 'replace' and 'with' parameters."); - } - } - } - - __logical_ops(val, logical_type, axis) { - let int_vals, other; - - if (utils.__is_number(val)) { - other = val; - } else { - if (val.series) { - if (axis == 0) { - if (val.values.length != this.shape[0]) { - throw Error(`Shape Error: Operands could not be broadcast together with shapes ${this.shape} and ${val.values.length}.`); - } - - other = tf.tensor(val.values); - } else { - if (val.values.length != this.shape[1]) { - throw Error(`Shape Error: Operands could not be broadcast together with shapes ${this.shape} and ${val.values.length}.`); - } - - other = tf.tensor(val.values); - } - } else if (Array.isArray(val)) { - other = tf.tensor(val); - } else { - other = val.row_data_tensor; - } - } - - switch (logical_type) { - case "lt": - int_vals = tf.tensor(this.values).less(other).arraySync(); - break; - - case "gt": - int_vals = tf.tensor(this.values).greater(other).arraySync(); - break; - - case "le": - int_vals = tf.tensor(this.values).lessEqual(other).arraySync(); - break; - - case "ge": - int_vals = tf.tensor(this.values).greaterEqual(other).arraySync(); - break; - - case "ne": - int_vals = tf.tensor(this.values).notEqual(other).arraySync(); - break; - - case "eq": - int_vals = tf.tensor(this.values).equal(other).arraySync(); - break; - } - - let bool_vals = utils.__map_int_to_bool(int_vals, 2); - - let df = new DataFrame(bool_vals, { - columns: this.column_names, - index: this.index - }); - return df; - } - - __get_df_from_tensor(val, col_names) { - let len = val.shape[0]; - let new_array = []; - - for (let i = 0; i < len; i++) { - let arr = val.slice([i], [1]).arraySync()[0]; - new_array.push(arr); - } - - return new DataFrame(new_array, { - columns: col_names - }); - } - - __frame_is_compactible_for_operation() { - let dtypes = this.dtypes; - - const str = element => element == "string"; - - if (dtypes.some(str)) { - return false; - } else { - return true; - } - } - - __get_ops_tensors(tensors, axis) { - if (utils.__is_undefined(tensors[1].series)) { - let tensors_arr = []; - - if (utils.__is_undefined(axis) || axis == 1) { - tensors_arr.push(tensors[0].row_data_tensor); - tensors_arr.push(tensors[1]); - return tensors_arr; - } else { - tensors_arr.push(tensors[0].col_data_tensor); - tensors_arr.push(tensors[1]); - return tensors_arr; - } - } else { - let tensors_arr = []; - - if (utils.__is_undefined(axis) || axis == 1) { - let this_tensor, other_tensor; - this_tensor = tensors[0].row_data_tensor; - - if (tensors[1].series) { - other_tensor = tf.tensor(tensors[1].values, [1, tensors[1].values.length]); - } else { - other_tensor = tensors[1].row_data_tensor; - } - - tensors_arr.push(this_tensor); - tensors_arr.push(other_tensor); - return tensors_arr; - } else { - let this_tensor, other_tensor; - this_tensor = tensors[0].row_data_tensor; - - if (tensors[1].series) { - other_tensor = tf.tensor(tensors[1].values, [tensors[1].values.length, 1]); - } else { - other_tensor = tensors[1].row_data_tensor; - } - - tensors_arr.push(this_tensor); - tensors_arr.push(other_tensor); - return tensors_arr; - } - } - } - - transpose() { - let new_values = this.col_data; - let new_index = this.column_names; - let new_col_names = this.index; - let df = new DataFrame(new_values, { - columns: new_col_names, - index: new_index - }); - return df; - } - - get T() { - return this.transpose(); - } - - get ctypes() { - let cols = this.column_names; - let d_types = this.col_types; - let sf = new _series.Series(d_types, { - index: cols - }); - return sf; - } - - plot(div) { - const plt = new Plot(this, div); - return plt; - } - - get tensor() { - return this.row_data_tensor; - } - - astype(kwargs = {}) { - if (!utils.__key_in_object(kwargs, "column")) { - throw Error("Value Error: Please specify a column to cast"); - } - - if (!utils.__key_in_object(kwargs, "dtype")) { - throw Error("Value Error: Please specify dtype to cast to"); - } - - if (!this.column_names.includes(kwargs["column"])) { - throw Error(`'${kwargs["column"]}' not found in columns`); - } - - let col_idx = this.column_names.indexOf(kwargs["column"]); - let new_types = this.col_types; - let col_values = this.col_data; - new_types[col_idx] = kwargs["dtype"]; - let new_col_values = []; - let temp_col = col_values[col_idx]; - - switch (kwargs["dtype"]) { - case "float32": - temp_col.map(val => { - new_col_values.push(Number(val)); - }); - col_values[col_idx] = new_col_values; - break; - - case "int32": - temp_col.map(val => { - new_col_values.push(Number(Number(val).toFixed())); - }); - col_values[col_idx] = new_col_values; - break; - - case "string": - temp_col.map(val => { - new_col_values.push(String(val)); - }); - col_values[col_idx] = new_col_values; - break; - - default: - break; - } - - let new_col_obj = {}; - this.column_names.forEach((cname, i) => { - new_col_obj[cname] = col_values[i]; - }); - let df = new DataFrame(new_col_obj, { - dtypes: new_types, - index: this.index - }); - return df; - } - - unique(axis = 1) { - if (axis == undefined || axis > 1 || axis < 0) { - throw Error(`Axis Error: Please specify a correct axis. Axis must either be '0' or '1', got ${axis}`); - } - - let _unique = {}; - - if (axis == 1) { - let col_names = this.column_names; - col_names.forEach(cname => { - _unique[cname] = this[cname].unique().values; - }); - } else { - let rows = this.values; - let _index = this.index; - rows.forEach((row, i) => { - let data_set = new Set(row); - _unique[_index[i]] = Array.from(data_set); - }); - } - - return _unique; - } - - nunique(axis = 1) { - if (axis == undefined || axis > 1 || axis < 0) { - throw Error(`Axis Error: Please specify a correct axis. Axis must either be '0' or '1', got ${axis}`); - } - - let _nunique = []; - - if (axis == 1) { - let col_names = this.column_names; - col_names.forEach(cname => { - _nunique.push(this[cname].unique().values.length); - }); - let sf = new _series.Series(_nunique, { - index: this.column_names - }); - return sf; - } else { - let rows = this.values; - rows.forEach(row => { - let data_set = new Set(row); - - _nunique.push(Array.from(data_set).length); - }); - } - - let sf = new _series.Series(_nunique, { - index: this.index - }); - return sf; - } - - rename(kwargs = {}) { - let params_needed = ["mapper", "inplace", "axis"]; - - utils._throw_wrong_params_error(kwargs, params_needed); - - if (!utils.__key_in_object(kwargs, "inplace")) { - kwargs["inplace"] = false; - } - - if (!utils.__key_in_object(kwargs, "axis")) { - kwargs["axis"] = 1; - } - - if (!utils.__key_in_object(kwargs, "mapper")) { - throw Error("Please specify a mapper object"); - } - - if (kwargs["axis"] == 1) { - let old_col_names = Object.keys(kwargs["mapper"]); - let new_col_names = Object.values(kwargs["mapper"]); - let col_names = [...this.column_names]; - old_col_names.forEach((cname, i) => { - if (!col_names.includes(cname)) { - throw Error(`Label Error: Specified column '${cname}' not found in column axis`); - } - - let idx = col_names.indexOf(cname); - col_names[idx] = new_col_names[i]; - }); - - if (kwargs["inplace"]) { - this.columns = col_names; - - this.__set_col_property(this, this.col_data, col_names, old_col_names); - } else { - let df = this.copy(); - df.columns = col_names; - - df.__set_col_property(df, df.col_data, col_names, old_col_names); - - return df; - } - } else { - let old_index = Object.keys(kwargs["mapper"]); - let row_index = this.index; - let new_index = []; - row_index.forEach(idx => { - if (old_index.includes(idx)) { - new_index.push(kwargs["mapper"][idx]); - } else { - new_index.push(idx); - } - }); - - if (kwargs["inplace"]) { - this.__set_index(new_index); - } else { - let df = this.copy(); - - df.__set_index(new_index); - - return df; - } - } - } - - sort_index(kwargs = {}) { - let inplace = typeof kwargs["inplace"] == "undefined" ? false : kwargs["inplace"]; - let asc = typeof kwargs["ascending"] == "undefined" ? true : kwargs["ascending"]; - let index_val = this.index; - - let [data, index] = this.__sort_by(index_val, index_val, asc); - - if (inplace) { - this.__update_frame_in_place(data, null, null, index, null); - } else { - let df = this.copy(); - - df.__update_frame_in_place(data, null, null, index, null); - - return df; - } - } - - sort_values(kwargs = {}) { - if (!utils.__key_in_object(kwargs, "by")) { - throw Error(`use col_name to specify column name`); - } - - let inplace = typeof kwargs["inplace"] == "undefined" ? false : kwargs["inplace"]; - let asc = typeof kwargs["ascending"] == "undefined" ? true : kwargs["ascending"]; - let index_val = this.index; - let column_val = this.column(kwargs["by"]).values; - - let [data, index] = this.__sort_by(column_val, index_val, asc); - - if (inplace) { - this.__update_frame_in_place(data, null, null, index, null); - } else { - let df = this.copy(); - - df.__update_frame_in_place(data, null, null, index, null); - - return df; - } - } - - __set_col_property(self, col_vals, col_names, old_col_names) { - old_col_names.forEach(name => { - delete self[name]; - }); - col_vals.forEach((col, i) => { - Object.defineProperty(self, col_names[i], { - get() { - return new _series.Series(col, { - columns: col_names[i], - index: self.index - }); - }, - - set(value) { - this.addColumn({ - column: col_names[i], - value: value - }); - } - - }); - }); - } - - __update_frame_in_place(row_data, column_names, col_obj, index, dtypes) { - if (row_data != undefined) { - this.data = row_data; - } else { - if (col_obj != undefined) { - let _res = utils._get_row_and_col_values(col_obj); - - this.data = _res[0]; - this.columns = _res[1]; - column_names = _res[1]; - } - } - - if (col_obj != undefined) { - this.col_data = Object.values(col_obj); - this.columns = Object.keys(col_obj); - column_names = Object.keys(col_obj); - } else { - if (row_data != undefined) { - this.col_data = utils.__get_col_values(row_data); - } - } - - if (column_names != undefined) { - this.columns = column_names; - } - - if (index != undefined) { - this.index_arr = index; - } - - if (dtypes != undefined) { - this.col_types = dtypes; - } - } - - __sort_by(col_value, df_index, asc) { - let values = this.values; - - let sorted_val = utils.__sort(col_value, asc); - - let duplicate_obj = utils.__get_duplicate(col_value); - - let data = []; - let indexs = []; - - for (let row_i = 0; row_i < sorted_val.length; row_i++) { - let val = sorted_val[row_i]; - let index = null; - - if (duplicate_obj.hasOwnProperty(val)) { - index = duplicate_obj[val]["index"][0]; - duplicate_obj[val]["index"].splice(0, 1); - } else { - index = col_value.indexOf(val); - } - - data.push(values[index]); - indexs.push(df_index[index]); - } - - return [data, indexs]; - } - - append(val) { - let df2 = null; - - if (Array.isArray(val)) { - if (Array.isArray(val[0])) { - if (val[0].length != this.shape[1]) { - throw Error(`length Mixmatch: The lenght of provided value (${val.length}) does not match the original DataFrame (${this.shape[1]})`); - } - - df2 = new DataFrame(val); - } - } else if (utils.__is_object(val)) { - df2 = new DataFrame(val); - } else if (val instanceof DataFrame) { - df2 = val.copy(); - } - - let concat_df = (0, _concat.concat)({ - df_list: [this, df2], - axis: 0 - }); - return concat_df; - } - -} - -exports.DataFrame = DataFrame; \ No newline at end of file diff --git a/danfojs-node/dist/core/generic.js b/danfojs-node/dist/core/generic.js deleted file mode 100644 index 31c48532..00000000 --- a/danfojs-node/dist/core/generic.js +++ /dev/null @@ -1,397 +0,0 @@ -"use strict"; - -var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.default = void 0; - -var tf = _interopRequireWildcard(require("@tensorflow/tfjs-node")); - -var _table = require("table"); - -var _utils = require("./utils"); - -var _config = require("../config/config"); - -const utils = new _utils.Utils(); -const config = new _config.Configs(); - -class NDframe { - constructor(data, kwargs = {}) { - this.kwargs = kwargs; - - if (data instanceof tf.Tensor) { - data = data.arraySync(); - } - - if (utils.__is_1D_array(data)) { - this.series = true; - - this._read_array(data); - } else { - this.series = false; - - if (utils.__is_object(data[0])) { - this._read_object(data, 1); - } else if (utils.__is_object(data)) { - this._read_object(data, 2); - } else if (Array.isArray(data[0]) || utils.__is_number(data[0]) || utils.__is_string(data[0])) { - this._read_array(data); - } else { - throw new Error("File format not supported"); - } - } - } - - _read_array(data) { - this.data = utils.__replace_undefined_with_NaN(data, this.series); - this.row_data_tensor = tf.tensor(this.data); - - if (this.series) { - this.col_data = [this.values]; - } else { - this.col_data = utils.__get_col_values(this.data); - } - - this.col_data_tensor = tf.tensor(this.col_data); - - if ("index" in this.kwargs) { - this.__set_index(this.kwargs["index"]); - } else { - this.index_arr = [...Array(this.row_data_tensor.shape[0]).keys()]; - } - - if (this.ndim == 1) { - if ("columns" in this.kwargs) { - this.columns = this.kwargs["columns"]; - } else { - this.columns = ["0"]; - } - } else { - if ("columns" in this.kwargs) { - if (this.kwargs["columns"].length == Number(this.row_data_tensor.shape[1])) { - this.columns = this.kwargs["columns"]; - } else { - throw `Column length mismatch. You provided a column of length ${this.kwargs["columns"].length} but data has lenght of ${this.row_data_tensor.shape[1]}`; - } - } else { - this.columns = [...Array(this.row_data_tensor.shape[1]).keys()]; - } - } - - if ("dtypes" in this.kwargs) { - this._set_col_types(this.kwargs["dtypes"], false); - } else { - this._set_col_types(null, true); - } - } - - _read_object(data, type) { - if (type == 2) { - let [row_arr, col_names] = utils._get_row_and_col_values(data); - - this.kwargs["columns"] = col_names; - - this._read_array(row_arr); - } else { - let data_arr = data.map(item => { - return Object.values(item); - }); - this.data = utils.__replace_undefined_with_NaN(data_arr, this.series); - this.row_data_tensor = tf.tensor(this.data); - this.kwargs["columns"] = Object.keys(Object.values(data)[0]); - - if (this.series) { - this.col_data = [this.values]; - } else { - this.col_data = utils.__get_col_values(this.data); - } - - this.col_data_tensor = tf.tensor(this.col_data); - - if ("index" in this.kwargs) { - this.__set_index(this.kwargs["index"]); - } else { - this.index_arr = [...Array(this.row_data_tensor.shape[0]).keys()]; - } - - if (this.ndim == 1) { - if (!this.kwargs["columns"]) { - this.columns = ["0"]; - } else { - this.columns = this.kwargs["columns"]; - } - } else { - if ("columns" in this.kwargs) { - if (this.kwargs["columns"].length == Number(this.row_data_tensor.shape[1])) { - this.columns = this.kwargs["columns"]; - } else { - throw `Column length mismatch. You provided a column of length ${this.kwargs["columns"].length} but data has column length of ${this.row_data_tensor.shape[1]}`; - } - } else { - this.columns = [...Array(this.row_data_tensor.shape[1]).keys()]; - } - } - - if ("dtypes" in this.kwargs) { - this._set_col_types(this.kwargs["dtypes"], false); - } else { - this._set_col_types(null, true); - } - } - } - - _set_col_types(dtypes, infer) { - const __supported_dtypes = ["float32", "int32", "string", "boolean"]; - - if (infer) { - if (this.series) { - this.col_types = utils.__get_t(this.values); - } else { - this.col_types = utils.__get_t(this.col_data); - } - } else { - if (this.series) { - this.col_types = dtypes; - } else { - if (dtypes.length != this.columns.length) { - throw new Error(`length Mixmatch: Length of specified dtypes is ${dtypes.length}, but length of columns is ${this.columns.length}`); - } - - if (Array.isArray(dtypes)) { - dtypes.forEach((type, indx) => { - if (!__supported_dtypes.includes(type)) { - throw new Error(`dtype error: dtype specified at index ${indx} is not supported`); - } - }); - this.col_types = dtypes; - } else { - throw new Error(`dtypes must be an Array of types`); - } - } - } - } - - get dtypes() { - return this.col_types; - } - - get ndim() { - if (this.series) { - return 1; - } else { - return this.row_data_tensor.shape.length; - } - } - - get axes() { - let axes = { - index: this.index, - columns: this.columns - }; - return axes; - } - - get index() { - return this.index_arr; - } - - __set_index(labels) { - if (!Array.isArray(labels)) { - throw Error("Value Error: index must be an array"); - } - - if (labels.length > this.shape[0] || labels.length < this.shape[0]) { - throw Error("Value Error: length of labels must match row shape of data"); - } - - this.index_arr = labels; - } - - __reset_index() { - let new_idx = [...Array(this.values.length).keys()]; - this.index_arr = new_idx; - } - - get shape() { - if (this.series) { - return [this.values.length, 1]; - } else { - return this.row_data_tensor.shape; - } - } - - get values() { - return this.data; - } - - get column_names() { - return this.columns; - } - - __isna() { - let new_arr = []; - - if (this.series) { - this.values.map(val => { - if (val == NaN) { - new_arr.push(true); - } else if (isNaN(val) && typeof val != "string") { - new_arr.push(true); - } else { - new_arr.push(false); - } - }); - } else { - let row_data = this.values; - row_data.map(arr => { - let temp_arr = []; - arr.map(val => { - if (val == NaN) { - temp_arr.push(true); - } else if (isNaN(val) && typeof val != "string") { - temp_arr.push(true); - } else { - temp_arr.push(false); - } - }); - new_arr.push(temp_arr); - }); - } - - return new_arr; - } - - get size() { - return this.row_data_tensor.size; - } - - async to_csv() { - if (this.series) { - let csv = this.values.join(","); - return csv; - } else { - let records = this.values; - let header = this.column_names.join(","); - let csv_str = `${header}\n`; - records.forEach(val => { - let row = `${val.join(",")}\n`; - csv_str += row; - }); - return csv_str; - } - } - - async to_json() { - if (this.series) { - let obj = {}; - obj[this.column_names[0]] = this.values; - let json = JSON.stringify(obj); - return json; - } else { - let values = this.values; - let header = this.column_names; - let json_arr = []; - values.forEach(val => { - let obj = {}; - header.forEach((h, i) => { - obj[h] = val[i]; - }); - json_arr.push(obj); - }); - return JSON.stringify(json_arr); - } - } - - toString() { - let table_width = config.get_width; - let table_truncate = config.get_truncate; - let max_row = config.get_max_row; - let max_col_in_console = config.get_max_col_in_console; - let data_arr = []; - let table_config = {}; - let col_len = this.columns.length; - let header = []; - - if (col_len > max_col_in_console) { - let first_4_cols = this.columns.slice(0, 4); - let last_3_cols = this.columns.slice(col_len - 4); - header = [""].concat(first_4_cols).concat(["..."]).concat(last_3_cols); - let sub_idx, values_1, value_2; - - if (this.values.length > max_row) { - let df_subset_1 = this.iloc({ - rows: [`0:${max_row}`], - columns: ["0:4"] - }); - let df_subset_2 = this.iloc({ - rows: [`0:${max_row}`], - columns: [`${col_len - 4}:`] - }); - sub_idx = this.index.slice(0, max_row); - values_1 = df_subset_1.values; - value_2 = df_subset_2.values; - } else { - let df_subset_1 = this.iloc({ - rows: ["0:"], - columns: ["0:4"] - }); - let df_subset_2 = this.iloc({ - rows: ["0:"], - columns: [`${col_len - 4}:`] - }); - sub_idx = this.index.slice(0, max_row); - values_1 = df_subset_1.values; - value_2 = df_subset_2.values; - } - - sub_idx.map((val, i) => { - let row = [val].concat(values_1[i]).concat(["..."]).concat(value_2[i]); - data_arr.push(row); - }); - } else { - header = [""].concat(this.columns); - let idx, values; - - if (this.values.length > max_row) { - let data = this.loc({ - rows: [`0:${max_row}`], - columns: this.columns - }); - idx = data.index; - values = data.values; - } else { - values = this.values; - idx = this.index; - } - - idx.forEach((val, i) => { - let row = [val].concat(values[i]); - data_arr.push(row); - }); - } - - table_config[0] = 10; - - for (let index = 1; index < header.length; index++) { - table_config[index] = { - width: table_width, - truncate: table_truncate - }; - } - - let table_data = [header].concat(data_arr); - return (0, _table.table)(table_data, { - columns: table_config - }); - } - - print() { - console.log(this + ""); - } - -} - -exports.default = NDframe; \ No newline at end of file diff --git a/danfojs-node/dist/core/get_dummies.js b/danfojs-node/dist/core/get_dummies.js deleted file mode 100644 index cfd7748c..00000000 --- a/danfojs-node/dist/core/get_dummies.js +++ /dev/null @@ -1,134 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.get_dummies = void 0; - -var _frame = require("./frame"); - -var _utils = require("./utils"); - -const utils = new _utils.Utils(); - -function oneHot(in_data, prefix, prefix_sep) { - let data_set = new Set(in_data); - let labels = Array.from(data_set); - let prefix_labels = null; - - if (prefix) { - prefix_labels = labels.map(x => { - return prefix + prefix_sep + x; - }); - } else { - prefix_labels = labels.map(x => { - return x; - }); - } - - let onehot_data = utils.__zeros(in_data.length, labels.length); - - for (let i = 0; i < in_data.length; i++) { - let elem = in_data[i]; - let elem_index = labels.indexOf(elem); - onehot_data[i][elem_index] = 1; - } - - return [onehot_data, prefix_labels]; -} - -function get_dummy(kwargs = {}) { - utils.__in_object(kwargs, "data", "data not provided"); - - let prefix = kwargs["prefix"] || null; - let prefix_sep = kwargs["prefix_sep"] || ["_"]; - let columns = kwargs["columns"] || null; - let is_dataframe = false; - let in_data = null; - - if (Array.isArray(kwargs["data"])) { - in_data = kwargs["data"]; - } else if (kwargs["data"] instanceof _frame.DataFrame) { - in_data = kwargs["data"]; - is_dataframe = true; - } else { - in_data = kwargs["data"].values; - } - - if (!is_dataframe) { - let [onehot_data, prefix_labels] = oneHot(in_data, prefix, prefix_sep); - return new _frame.DataFrame(onehot_data, { - columns: prefix_labels - }); - } else { - let column_index = []; - - if (!columns) { - columns = []; - in_data.col_types.map((x, i) => { - if (x == "string") { - let name_column = in_data.columns[i]; - columns.push(name_column); - column_index.push(i); - } - }); - } else { - columns.forEach(x => { - let col_idx = columns.indexOf(x); - column_index.push(col_idx); - }); - } - - if (prefix) { - if (Array.isArray(prefix)) { - if (prefix.length != columns.length) { - throw new Error("prefix must be the same length with the number of onehot encoding column"); - } - } else { - throw new Error("prefix for dataframe must be an array"); - } - } else { - prefix = columns; - } - - let df_data = in_data.values; - let df_columns = in_data.columns; - let col_data = in_data.col_data; - let column_data = []; - column_index.forEach(x => { - column_data.push(col_data[x]); - }); - let one_hotColumns = []; - let one_hotData = []; - column_data.forEach((data, i) => { - let [onehot_data, prefix_labels] = oneHot(data, prefix[i], prefix_sep); - one_hotColumns.push(...prefix_labels); - - if (one_hotData.length == 0) { - one_hotData.push(...onehot_data); - } else { - onehot_data.forEach((x, i) => { - one_hotData[i].push(...x); - }); - } - }); - let final_data = df_data.map((elem, i) => { - let ele = elem.slice(); - - let dt = utils.__remove_arr(ele, column_index); - - dt.push(...one_hotData[i]); - return dt; - }); - - let final_columns = utils.__remove_arr(df_columns, column_index); - - final_columns.push(...one_hotColumns); - return new _frame.DataFrame(final_data, { - columns: final_columns - }); - } -} - -const get_dummies = get_dummy; -exports.get_dummies = get_dummies; \ No newline at end of file diff --git a/danfojs-node/dist/core/groupby.js b/danfojs-node/dist/core/groupby.js deleted file mode 100644 index 75642fef..00000000 --- a/danfojs-node/dist/core/groupby.js +++ /dev/null @@ -1,294 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.GroupBy = void 0; - -var _frame = require("./frame"); - -var _utils = require("./utils"); - -var _series = require("./series"); - -const utils = new _utils.Utils(); - -class GroupBy { - constructor(col_dict, key_col, data, column_name, col_dtype) { - this.key_col = key_col; - this.col_dict = col_dict; - this.data = data; - this.column_name = column_name; - this.data_tensors = {}; - this.col_dtype = col_dtype; - } - - group() { - for (const value of this.data) { - const col_indexes = this.key_col.map(key => this.column_name.indexOf(key)); - const col_values = col_indexes.map(idx => value[idx]); - let sub_col_dict = this.col_dict; - - for (const col_value of col_values) { - if (!(col_value in sub_col_dict)) break; - if (col_value === col_values[col_values.length - 1]) sub_col_dict[col_value].push(value);else sub_col_dict = sub_col_dict[col_value]; - } - } - - const self = this; - - function dfs(sub_col_dict, sub_data_tensors) { - for (const [key, value] of Object.entries(sub_col_dict)) { - if (Array.isArray(value)) { - if (value.length === 0) delete sub_col_dict[key];else sub_data_tensors[key] = new _frame.DataFrame(value, { - columns: self.column_name - }); - } else { - if (!(key in sub_data_tensors)) sub_data_tensors[key] = {}; - dfs(value, sub_data_tensors[key]); - } - } - } - - dfs(this.col_dict, this.data_tensors); - return this; - } - - col(col_names) { - this.selected_column = col_names; - - if (Array.isArray(col_names)) { - for (let i = 0; i < col_names.length; i++) { - let col_name = col_names[i]; - - if (!this.column_name.includes(col_name)) { - throw new Error(`Column ${col_name} does not exist in groups`); - } - } - } else { - throw new Error(`Col_name must be an array of column`); - } - - const group_col = {}; - - function dfs(sub_data_tensors, sub_group_col) { - for (const [key, value] of Object.entries(sub_data_tensors)) { - if (value instanceof _frame.DataFrame) { - sub_group_col[key] = col_names.map(col_name => value.column(col_name)); - } else { - sub_group_col[key] = {}; - dfs(value, sub_group_col[key]); - } - } - } - - dfs(this.data_tensors, group_col); - const gp = new GroupBy(null, this.key_col, null, col_names, this.col_dtype); - gp.group_col = group_col; - gp.group_col_name = col_names; - return gp; - } - - arithemetic(operation) { - let ops_name = ["mean", "sum", "count", "mode", "std", "var", "cumsum", "cumprod", "cummax", "cummin"]; - let ops_map = { - "mean": "mean()", - "sum": "sum()", - "mode": "mode()", - "count": "count()", - "std": "std()", - "var": "var()", - "cumsum": "cumsum().values", - "cumprod": "cumprod().values", - "cummax": "cummax().values", - "cummin": "cummin().values" - }; - const is_array_operation = Array.isArray(operation); - const count_group = {}; - - function dfs(sub_count_group, sub_group_col) { - for (const [key, value] of Object.entries(sub_group_col)) { - if (Array.isArray(value)) { - sub_count_group[key] = []; - let data; - - if (is_array_operation) { - for (let i = 0; i < value.length; i++) { - const op = operation[i]; - - if (!ops_name.includes(op)) { - throw new Error("operation does not exist"); - } - - data = eval(`value[i].${ops_map[op]}`); - sub_count_group[key].push(data); - } - } else { - value.forEach(v => { - data = eval(`v.${operation}`); - sub_count_group[key].push(data); - }); - } - } else { - sub_count_group[key] = {}; - dfs(sub_count_group[key], value); - } - } - } - - dfs(count_group, this.group_col); - return count_group; - } - - operations(ops, name) { - if (!this.group_col) { - let column = this.column_name.filter(val => !this.key_col.includes(val)); - let col_gp = this.col(column); - let value = col_gp.arithemetic(ops); - let df = col_gp.to_DataFrame(col_gp.key_col, col_gp.group_col_name, value, name); - return df; - } else { - let value = this.arithemetic(ops); - let df = this.to_DataFrame(this.key_col, this.group_col_name, value, name); - return df; - } - } - - count() { - return this.operations("count()", "count"); - } - - sum() { - return this.operations("sum()", "sum"); - } - - std() { - return this.operations("std()", "std"); - } - - var() { - return this.operations("var()", "var"); - } - - mean() { - return this.operations("mean()", "mean"); - } - - cumsum() { - return this.operations("cumsum().values", "cumsum"); - } - - cummax() { - return this.operations("cummax().values", "cummax"); - } - - cumprod() { - return this.operations("cumprod().values", "cumprod"); - } - - cummin() { - return this.operations("cummin().values", "cummin"); - } - - max() { - return this.operations("max()", "max"); - } - - min() { - return this.operations("min()", "min"); - } - - get_groups(key) { - if (this.key_col.length < 2) return this.data_tensors[key]; - if (key.length !== this.key_col.length) throw new Error("specify the group by column"); - - utils.__is_object(this.data_tensors, key[0], `Key Error: ${key[0]} not in object`); - - const last_key = key[key.length - 1]; - let sub_data_tensors = this.data_tensors; - - for (const k of key) { - if (k === last_key) return sub_data_tensors[k];else sub_data_tensors = sub_data_tensors[k]; - } - } - - agg(kwargs = {}) { - let columns = Object.keys(kwargs); - let operations = columns.map(x => { - return kwargs[x].toLocaleLowerCase(); - }); - let col_gp = this.col(columns); - let data = col_gp.arithemetic(operations); - let df = this.to_DataFrame(col_gp.key_col, col_gp.group_col_name, data, operations); - return df; - } - - to_DataFrame(key_col, col, data, ops) { - const df_data = []; - - function concatPathAndNode(path, node, col_dtype) { - if (Array.isArray(node)) { - if (Array.isArray(node[0])) { - const transposed_node = node[0].map((_, colIndex) => node.map(row => row[colIndex])); - - for (const n_array of transposed_node) df_data.push(path.concat(n_array)); - } else df_data.push(path.concat(node)); - } else { - for (const [k, child] of Object.entries(node)) { - const sanitized_k = col_dtype[0] === "string" ? k : parseInt(k); - concatPathAndNode(path.concat([sanitized_k]), child, col_dtype.slice(1)); - } - } - } - - concatPathAndNode([], data, this.col_dtype); - const column = [...key_col]; - const group_col = col.slice().map((x, i) => { - if (Array.isArray(ops)) { - return `${x}_${ops[i]}`; - } - - return `${x}_${ops}`; - }); - column.push(...group_col); - return new _frame.DataFrame(df_data, { - columns: column - }); - } - - apply(callable) { - let df_data; - let column; - - if (!this.group_col) { - column = this.column_name.filter(val => !this.key_col.includes(val)); - const col_gp = this.col(column); - df_data = col_gp.group_col; - } else { - column = this.group_col_name; - df_data = this.group_col; - } - - const count_group = {}; - - function recursiveCount(sub_df_data, sub_count_group) { - for (const [key, value] of Object.entries(sub_df_data)) { - if (Array.isArray(value)) { - sub_count_group[key] = value.map(callable_value => { - const callable_rslt = callable(callable_value); - if (callable_rslt instanceof _frame.DataFrame || callable_rslt instanceof _series.Series) return callable_rslt.values;else return callable_rslt; - }); - } else { - sub_count_group[key] = {}; - recursiveCount(value, sub_count_group[key]); - } - } - } - - recursiveCount(df_data, count_group); - return this.to_DataFrame(this.key_col, column, count_group, "apply"); - } - -} - -exports.GroupBy = GroupBy; \ No newline at end of file diff --git a/danfojs-node/dist/core/indexing.js b/danfojs-node/dist/core/indexing.js deleted file mode 100644 index 11d26588..00000000 --- a/danfojs-node/dist/core/indexing.js +++ /dev/null @@ -1,185 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.indexLoc = void 0; - -var _utils = require("./utils"); - -const utils = new _utils.Utils(); - -const indexLoc = (ndframe, kwargs) => { - let rows = null; - let columns = null; - let isColumnSplit = false; - - if (Object.prototype.hasOwnProperty.call(kwargs, "rows")) { - if (Array.isArray(kwargs["rows"])) { - if (kwargs["rows"].length == 1 && typeof kwargs["rows"][0] == "string") { - if (kwargs["rows"][0].includes(":")) { - let column_split = kwargs["rows"][0].split(":"); - - if (kwargs['type'] == 'loc') { - let start, end; - - if (isNaN(Number(column_split[0]))) { - start = ndframe.index.indexOf(column_split[0]); - } else { - start = Number(column_split[0]); - } - - if (isNaN(Number(column_split[1]))) { - end = ndframe.index.lastIndexOf(column_split[1]) - 1 || ndframe.values.length - 1; - } else { - end = Number(column_split[1]) - 1 || ndframe.values.length - 1; - } - - rows = utils.__range(start, end); - } else { - let start = parseInt(column_split[0]) || 0; - let end = parseInt(column_split[1]) - 1 || ndframe.values.length - 1; - - if (typeof start == "number" && typeof end == "number") { - rows = utils.__range(start, end); - } - } - } else { - if (kwargs["type"] == "loc") { - let row_idx = []; - ndframe.index.map((idx, i) => { - if (kwargs['rows'][0] == idx) { - row_idx.push(i); - } - }); - rows = row_idx; - } else { - throw new Error("Slice index must be separated by ':'"); - } - } - } else { - if (kwargs["type"] == "loc") { - let row_idx = []; - ndframe.index.map((idx, i) => { - if (kwargs['rows'].includes(idx)) { - row_idx.push(i); - } - }); - rows = row_idx; - } else { - rows = kwargs["rows"]; - } - } - } else { - throw new Error("rows parameter must be a Array"); - } - } else { - if (kwargs["type"] == "loc") { - rows = utils.__range(0, Number(ndframe.shape[0]) - 1); - } else { - rows = utils.__range(0, Number(ndframe.shape[0]) - 1); - } - } - - if (Object.prototype.hasOwnProperty.call(kwargs, "columns")) { - if (Array.isArray(kwargs["columns"])) { - if (kwargs["columns"].length == 1 && kwargs["columns"][0].includes(":")) { - let column_split = kwargs["columns"][0].split(":"); - let start, end; - - if (kwargs["type"] == "iloc") { - if (column_split[0] == "") { - start = 0; - } else { - start = parseInt(column_split[0]) || 0; - } - - if (column_split[1] == "") { - end = parseInt(ndframe.columns.length - 1); - } else { - end = parseInt(column_split[1]) - 1 === 0 ? 0 : parseInt(column_split[1]) - 1; - } - } else { - start = parseInt(ndframe.columns.indexOf(column_split[0])); - end = parseInt(ndframe.columns.indexOf(column_split[1])) - 1; - } - - if (typeof start == "number" && typeof end == "number") { - columns = utils.__range(start, end); - isColumnSplit = true; - } - } else { - columns = kwargs["columns"]; - } - } else { - throw new Error("columns must be a list"); - } - } else { - if (kwargs["type"] == "loc") { - columns = ndframe.column_names; - } else { - columns = utils.__range(0, Number(ndframe.shape[1]) - 1); - } - } - - let data_values = ndframe.values; - let new_data = []; - - for (var index = 0; index < rows.length; index++) { - let row_val = rows[index]; - let max_rowIndex = data_values.length - 1; - - if (row_val > max_rowIndex) { - throw new Error(`Specified row index ${row_val} is bigger than maximum row index of ${max_rowIndex}`); - } - - if (Array.isArray(data_values[0])) { - let value = data_values[row_val]; - let row_data = []; - - for (var i in columns) { - var col_index; - - if (kwargs["type"] == "loc" && !isColumnSplit) { - col_index = ndframe.columns.indexOf(columns[i]); - - if (col_index == -1) { - throw new Error(`Column ${columns[i]} does not exist`); - } - } else { - col_index = columns[i]; - let max_colIndex = ndframe.columns.length - 1; - - if (col_index > max_colIndex) { - throw new Error(`column index ${col_index} is bigger than ${max_colIndex}`); - } - } - - let elem = value[col_index]; - row_data.push(elem); - } - - new_data.push(row_data); - } else { - new_data.push(data_values[row_val]); - } - } - - let column_names = []; - - if (kwargs["type"] == "iloc" || isColumnSplit) { - columns.map(col => { - column_names.push(ndframe.columns[col]); - }); - } else { - column_names = columns; - } - - let final_row = []; - rows.forEach(i => { - final_row.push(ndframe.index[i]); - }); - return [new_data, column_names, final_row]; -}; - -exports.indexLoc = indexLoc; \ No newline at end of file diff --git a/danfojs-node/dist/core/merge.js b/danfojs-node/dist/core/merge.js deleted file mode 100644 index 13b79f60..00000000 --- a/danfojs-node/dist/core/merge.js +++ /dev/null @@ -1,276 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.merge = exports.Merge = void 0; - -var _frame = require("./frame"); - -var _utils = require("./utils"); - -const utils = new _utils.Utils(); - -class Merge { - constructor(kwargs) { - utils.__in_object(kwargs, "left"); - - utils.__in_object(kwargs, "right"); - - utils.__in_object(kwargs, "on"); - - if (!utils.__key_in_object(kwargs, "how")) { - this.how = 'inner'; - kwargs['how'] = 'inner'; - } else { - this.how = kwargs['how']; - } - - this.left = null; - this.right = null; - this.on = null; - let how_keys = ["outer", "inner", "left", "right"]; - - if (kwargs["left"] instanceof _frame.DataFrame && kwargs["right"] instanceof _frame.DataFrame) { - this.left = kwargs["left"]; - this.right = kwargs["right"]; - } else { - throw new Error("The left and right key value must be a dataFrame"); - } - - if (Array.isArray(kwargs["on"])) { - this.on = kwargs["on"]; - } else { - throw new Error("key 'on' must be a list"); - } - - if (how_keys.includes(kwargs["how"])) { - this.how = kwargs["how"]; - } else { - throw new Error(`${kwargs["how"]} specify in keyword how is not recognise`); - } - - this.left_col_index = []; - this.right_col_index = []; - - for (let i = 0; i < this.on.length; i++) { - if (this.left.columns.includes(this.on[i]) && this.right.columns.includes(this.on[i])) { - let left_index = this.left.columns.indexOf(this.on[i]); - let right_index = this.right.columns.indexOf(this.on[i]); - this.left_col_index.push(left_index); - this.right_col_index.push(right_index); - } - } - - this.left_key_dict = {}; - this.right_key_dict = {}; - let left_values = this.left.values; - let right_values = this.right.values; - - for (let i = 0; i < left_values.length; i++) { - let left_value = left_values[i]; - let left_key_comb_values = []; - - for (let j = 0; j < this.left_col_index.length; j++) { - let index = this.left_col_index[j]; - left_key_comb_values.push(left_value[index]); - } - - let left_key_comb = left_key_comb_values.join('_'); - let self = this; - let left_value_filter = left_value.filter(function (val, index) { - return !self.left_col_index.includes(index); - }); - - if (utils.__key_in_object(this.left_key_dict, left_key_comb)) { - this.left_key_dict[left_key_comb].filters.push(left_value_filter); - } else { - this.left_key_dict[left_key_comb] = { - filters: [left_value_filter], - comb_values: left_key_comb_values - }; - } - } - - for (let i = 0; i < right_values.length; i++) { - let right_value = right_values[i]; - let right_key_comb_values = []; - - for (let j = 0; j < this.right_col_index.length; j++) { - let index = this.right_col_index[j]; - right_key_comb_values.push(right_value[index]); - } - - let right_key_comb = right_key_comb_values.join('_'); - let self = this; - let right_value_filter = right_value.filter(function (val, index) { - return !self.right_col_index.includes(index); - }); - - if (utils.__key_in_object(this.right_key_dict, right_key_comb)) { - this.right_key_dict[right_key_comb].filters.push(right_value_filter); - } else { - this.right_key_dict[right_key_comb] = { - filters: [right_value_filter], - comb_values: right_key_comb_values - }; - } - } - - this.__create_columns(); - - let data = null; - - switch (this.how) { - case "outer": - data = this.outer(); - break; - - case "inner": - data = this.inner(); - break; - - case "left": - data = this.left_merge(); - break; - - case "right": - data = this.right_merge(); - break; - } - - let df = new _frame.DataFrame(data = data, { - columns: this.columns - }); - return df; - } - - __create_columns() { - let self = this; - self.left_col = self.left.columns.filter((val, index) => { - return !self.left_col_index.includes(index); - }); - self.right_col = self.right.columns.filter((val, index) => { - return !self.right_col_index.includes(index); - }); - self.columns = [...self.on]; - let column_duplicate = {}; - let temp_column = [...self.left_col]; - temp_column.push(...self.right_col); - - for (let i = 0; i < temp_column.length; i++) { - let col = temp_column[i]; - - if (utils.__key_in_object(column_duplicate, col)) { - let col_name = `${col}_${column_duplicate[col]}`; - self.columns.push(col_name); - column_duplicate[col] += 1; - } else { - self.columns.push(col); - column_duplicate[col] = 1; - } - } - } - - outer() { - let keys = Object.keys(this.left_key_dict); - keys.push(...Object.keys(this.right_key_dict)); - keys = Array.from(new Set(keys)); - let data = this.basic(keys); - return data; - } - - inner() { - let left_keys = Object.keys(this.left_key_dict); - let right_keys = Object.keys(this.right_key_dict); - let keys = left_keys.filter(val => { - return right_keys.includes(val); - }); - let data = this.basic(keys); - return data; - } - - left_merge() { - let keys = Object.keys(this.left_key_dict); - let data = this.basic(keys); - return data; - } - - right_merge() { - let keys = Object.keys(this.right_key_dict); - let data = this.basic(keys); - return data; - } - - basic(keys) { - let data = []; - - for (let i = 0; i < keys.length; i++) { - let key = keys[i]; - let key_array = key.split("_").filter(val => { - return val != ""; - }); - - if (utils.__key_in_object(this.left_key_dict, key)) { - let left_row = this.left_key_dict[key].filters; - let key_array = this.left_key_dict[key].comb_values; - - for (let left_i = 0; left_i < left_row.length; left_i++) { - let left_row_row = left_row[left_i]; - - if (utils.__key_in_object(this.right_key_dict, key)) { - let right_row = this.right_key_dict[key].filters; - - for (let r_i = 0; r_i < right_row.length; r_i++) { - let right_row_row = right_row[r_i]; - let inner_data = key_array.slice(0); - inner_data.push(...left_row_row); - inner_data.push(...right_row_row); - data.push(inner_data); - } - } else { - let nan_array = Array(this.right_col.length); - - for (let i = 0; i < this.right_col.length; i++) { - nan_array[i] = NaN; - } - - let inner_data = key_array.slice(0); - inner_data.push(...left_row_row); - inner_data.push(...nan_array); - data.push(inner_data); - } - } - } else { - let right_row = this.right_key_dict[key].filters; - let key_array = this.right_key_dict[key].comb_values; - - for (let i = 0; i < right_row.length; i++) { - let right_row_row = right_row[i]; - let nan_array = Array(this.left_col.length); - - for (let j = 0; j < nan_array.length; j++) { - nan_array[j] = NaN; - } - - let inner_data = key_array.slice(0); - inner_data.push(...nan_array); - inner_data.push(...right_row_row); - data.push(inner_data); - } - } - } - - return data; - } - -} - -exports.Merge = Merge; - -const merge = kwargs => { - let merge = new Merge(kwargs); - return merge; -}; - -exports.merge = merge; \ No newline at end of file diff --git a/danfojs-node/dist/core/series.js b/danfojs-node/dist/core/series.js deleted file mode 100644 index b22d8a10..00000000 --- a/danfojs-node/dist/core/series.js +++ /dev/null @@ -1,1046 +0,0 @@ -"use strict"; - -var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); - -var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.Series = void 0; - -var tf = _interopRequireWildcard(require("@tensorflow/tfjs-node")); - -var _mathjs = require("mathjs"); - -var _utils = require("./utils"); - -var _strings = require("./strings"); - -var _generic = _interopRequireDefault(require("./generic")); - -var _table = require("table"); - -var _config = require("../config/config"); - -var _timeseries = require("./timeseries"); - -var _indexing = require("./indexing"); - -const utils = new _utils.Utils(); -const config = new _config.Configs(); - -class Series extends _generic.default { - constructor(data, kwargs) { - if (Array.isArray(data[0]) || utils.__is_object(data[0])) { - data = utils.__convert_2D_to_1D(data); - super(data, kwargs); - } else { - super(data, kwargs); - } - } - - get tensor() { - return tf.tensor(this.values).asType(this.dtypes[0]); - } - - head(rows = 5) { - if (rows > this.shape[0] || rows < 1) { - return new Series(this.values, { - columns: this.column_names - }); - } else { - let data = this.values.slice(0, rows); - return new Series(data, { - columns: this.column_names - }); - } - } - - tail(rows = 5) { - if (rows > this.values.length || rows < 1) { - return new Series(this.values, { - columns: this.column_names - }); - } else { - let data = this.values.slice(this.shape[0] - rows); - let idx = this.index.slice(this.shape[0] - rows); - let sf = new Series(data, { - columns: this.column_names, - index: idx - }); - return sf; - } - } - - async sample(num = 5, seed = 1) { - if (num > this.shape[0]) { - throw new Error("Sample size n cannot be bigger than size of dataset"); - } - - if (num < -1 || num == 0) { - throw new Error("Sample size cannot be less than -1 or 0"); - } - - num = num === -1 ? this.shape[0] : num; - const shuffled_index = await tf.data.array(this.index).shuffle(num, seed).take(num).toArray(); - const sf = this.iloc(shuffled_index); - return sf; - } - - add(other) { - if (utils.__is_number(other)) { - let sum = this.row_data_tensor.add(other).arraySync(); - return new Series(sum, { - columns: this.column_names - }); - } else { - if (this.__check_series_op_compactibility) { - let sum = this.tensor.add(other.tensor).arraySync(); - return new Series(sum, { - columns: this.column_names - }); - } - } - } - - sub(other) { - if (utils.__is_number(other)) { - let sub = this.tensor.sub(other).arraySync(); - return new Series(sub, { - columns: this.column_names - }); - } else { - if (this.__check_series_op_compactibility) { - let sub = this.tensor.sub(other.tensor).arraySync(); - return new Series(sub, { - columns: this.column_names - }); - } - } - } - - mul(other) { - if (utils.__is_number(other)) { - let mul = this.tensor.mul(other).arraySync(); - return new Series(mul, { - columns: this.column_names - }); - } else { - if (this.__check_series_op_compactibility) { - let mul = this.tensor.mul(other.tensor).arraySync(); - return new Series(mul, { - columns: this.column_names - }); - } - } - } - - div(other, round = true) { - if (utils.__is_number(other)) { - let div_result = this.tensor.div(other); - return new Series(div_result.arraySync(), { - columns: this.column_names, - dtypes: [div_result.dtype] - }); - } else { - if (this.__check_series_op_compactibility) { - let dtype; - - if (round) { - dtype = "float32"; - } else { - dtype = "int32"; - } - - let tensor1 = this.tensor.asType(dtype); - let tensor2 = other.tensor.asType(dtype); - let result = tensor1.div(tensor2); - return new Series(result.arraySync(), { - columns: this.column_names, - dtypes: [result.dtype] - }); - } - } - } - - pow(other) { - if (utils.__is_number(other)) { - let pow_result = this.tensor.pow(other).arraySync(); - return new Series(pow_result, { - columns: this.column_names - }); - } else { - if (this.__check_series_op_compactibility) { - let pow_result = this.tensor.pow(other.tensor).arraySync(); - return new Series(pow_result, { - columns: this.column_names - }); - } - } - } - - mod(other) { - if (utils.__is_number(other)) { - let mod_result = this.tensor.mod(other).arraySync(); - return new Series(mod_result, { - columns: this.column_names - }); - } else { - if (this.__check_series_op_compactibility) { - let mod_result = this.tensor.mod(other.tensor).arraySync(); - return new Series(mod_result, { - columns: this.column_names - }); - } - } - } - - mean() { - utils._throw_str_dtype_error(this, 'mean'); - - let values = utils._remove_nans(this.values); - - let mean = tf.tensor(values).mean().arraySync(); - return mean; - } - - median() { - utils._throw_str_dtype_error(this, 'median'); - - let values = utils._remove_nans(this.values); - - let median_val = (0, _mathjs.median)(values); - return median_val; - } - - mode() { - utils._throw_str_dtype_error(this, 'median'); - - let values = utils._remove_nans(this.values); - - let modal_val = (0, _mathjs.mode)(values); - return modal_val; - } - - min() { - utils._throw_str_dtype_error(this, 'min'); - - let min = this.row_data_tensor.min().arraySync(); - return min; - } - - max() { - utils._throw_str_dtype_error(this, 'max'); - - let max = this.row_data_tensor.max().arraySync(); - return max; - } - - sum() { - utils._throw_str_dtype_error(this, 'sum'); - - if (this.dtypes[0] == "boolean") { - let temp = utils._remove_nans(this.values); - - let temp_sum = tf.tensor(temp).sum().arraySync(); - return Number(temp_sum); - } - - let temp = utils._remove_nans(this.values); - - let temp_sum = tf.tensor(temp).sum().arraySync(); - return Number(temp_sum.toFixed(5)); - } - - count() { - return utils.__count_nan(this.values, true, true); - } - - maximum(other) { - if (utils.__is_number(other)) { - let max_result = this.row_data_tensor.maximum(other); - return new Series(max_result.arraySync(), { - columns: this.column_names, - dtypes: max_result.dtype, - index: this.index - }); - } else { - if (this.__check_series_op_compactibility) { - let tensor1 = this.row_data_tensor; - let tensor2 = other.tensor; - let result = tensor1.maximum(tensor2).arraySync(); - return new Series(result, { - columns: this.column_names, - index: this.index - }); - } - } - } - - minimum(other) { - if (utils.__is_number(other)) { - let max_result = this.row_data_tensor.minimum(other); - return new Series(max_result.arraySync(), { - columns: this.column_names, - dtypes: max_result.dtype, - index: this.index - }); - } else { - if (this.__check_series_op_compactibility) { - let tensor1 = this.tensor; - let tensor2 = other.tensor; - let result = tensor1.minimum(tensor2).arraySync(); - return new Series(result, { - columns: this.column_names, - index: this.index - }); - } - } - } - - round(dp) { - if (utils.__is_undefined(dp)) { - let result = tf.round(this.row_data_tensor).arraySync(); - return new Series(result, { - columns: this.column_names, - index: this.index - }); - } else { - let result = utils.__round(this.values, dp, true); - - return new Series(result, { - columns: this.column_names, - index: this.index - }); - } - } - - std() { - utils._throw_str_dtype_error(this, 'std'); - - let values = utils._remove_nans(this.values); - - let std_val = (0, _mathjs.std)(values); - return std_val; - } - - var() { - utils._throw_str_dtype_error(this, 'std'); - - let values = utils._remove_nans(this.values); - - let var_val = (0, _mathjs.variance)(values); - return var_val; - } - - isna() { - let new_arr = this.__isna(); - - let sf = new Series(new_arr, { - index: this.index, - columns: this.column_names, - dtypes: ["boolean"] - }); - return sf; - } - - fillna(kwargs = {}) { - let params_needed = ["value", "inplace"]; - - utils._throw_wrong_params_error(kwargs, params_needed); - - kwargs['inplace'] = kwargs['inplace'] || false; - - if (!("value" in kwargs)) { - throw Error('Value Error: Must specify value to replace with'); - } - - let new_values = []; - this.values.forEach(val => { - if (isNaN(val) && typeof val != "string") { - new_values.push(kwargs['value']); - } else { - new_values.push(val); - } - }); - - if (kwargs['inplace']) { - this.data = new_values; - } else { - let sf = new Series(new_values, { - columns: this.column_names, - index: this.index, - dtypes: this.dtypes - }); - return sf; - } - } - - sort_values(kwargs = {}) { - let params_needed = ["inplace", "ascending"]; - - utils._throw_wrong_params_error(kwargs, params_needed); - - if (!('ascending' in kwargs)) { - kwargs['ascending'] = true; - } - - if (!('inplace' in kwargs)) { - kwargs['inplace'] = false; - } - - let sorted_values = []; - let arr_obj = [...this.values]; - - let range_idx = utils.__range(0, this.index.length - 1); - - let sorted_idx = utils._sort_arr_with_index(range_idx, arr_obj, this.dtypes[0]); - - sorted_idx.forEach(idx => { - sorted_values.push(this.values[idx]); - }); - - if (kwargs['ascending']) { - sorted_values = sorted_values.reverse(); - sorted_idx = sorted_idx.reverse(); - } - - if (kwargs['inplace']) { - this.data = sorted_values; - - this.__set_index(sorted_idx); - } else { - let sf = new Series(sorted_values, { - columns: this.column_names, - index: sorted_idx - }); - return sf; - } - } - - copy() { - let sf = new Series([...this.values], { - columns: [...this.column_names], - index: [...this.index], - dtypes: [...this.dtypes[0]] - }); - return sf; - } - - describe() { - if (this.dtypes[0] == "string") { - return null; - } else { - let index = ['count', 'mean', 'std', 'min', 'median', 'max', 'variance']; - let count = this.count(); - let mean = this.mean(); - let std = this.std(); - let min = this.min(); - let median = this.median(); - let max = this.max(); - let variance = this.var(); - let vals = [count, mean, std, min, median, max, variance]; - let sf = new Series(vals, { - columns: this.columns, - index: index - }); - return sf; - } - } - - reset_index(kwargs = {}) { - let params_needed = ["inplace"]; - - utils._throw_wrong_params_error(kwargs, params_needed); - - kwargs['inplace'] = kwargs['inplace'] || false; - - if (kwargs['inplace']) { - this.__reset_index(); - } else { - let sf = this.copy(); - - sf.__reset_index(); - - return sf; - } - } - - set_index(kwargs = {}) { - let params_needed = ["index", "inplace"]; - - utils._throw_wrong_params_error(kwargs, params_needed); - - kwargs['inplace'] = kwargs['inplace'] || false; - - if (!('index' in kwargs)) { - throw Error("Index ValueError: You must specify an array of index"); - } - - if (kwargs['index'].length != this.index.length) { - throw Error(`Index LengthError: Lenght of new Index array ${kwargs['index'].length} must match lenght of existing index ${this.index.length}`); - } - - if (kwargs['inplace']) { - this.index_arr = kwargs['index']; - } else { - let sf = this.copy(); - - sf.__set_index(kwargs['index']); - - return sf; - } - } - - __check_series_op_compactibility(other) { - if (utils.__is_undefined(other.series)) { - throw Error("param [other] must be a Series or a single value that can be broadcasted"); - } - - if (other.values.length != this.values.length) { - throw Error("Shape Error: Series shape do not match"); - } - - if (this.dtypes[0] != 'float' || this.dtypes[0] != 'int') { - throw Error(`dtype Error: Cannot perform operation on type ${this.dtypes[0]} with type ${other.dtypes[0]}`); - } - - if (other.dtypes[0] != 'float' || other.dtypes[0] != 'int') { - throw Error(`dtype Error: Cannot perform operation on type ${other.dtypes[0]} with type ${this.dtypes[0]}`); - } - - return true; - } - - map(callable) { - let is_callable = utils.__is_function(callable); - - let data = this.data.map(val => { - if (is_callable) { - return callable(val); - } else { - if (utils.__is_object(callable)) { - if (val in callable) { - return callable[val]; - } else { - return NaN; - } - } else { - throw new Error("callable must either be a function or an object"); - } - } - }); - let sf = new Series(data, { - columns: this.column_names, - index: this.index - }); - return sf; - } - - apply(callable) { - let is_callable = utils.__is_function(callable); - - if (!is_callable) { - throw new Error("the arguement most be a function"); - } - - let data = this.data.map(val => { - return callable(val); - }); - return new Series(data, { - columns: this.column_names, - index: this.index - }); - } - - unique() { - let data_set = new Set(this.values); - let series = new Series(Array.from(data_set)); - return series; - } - - nunique() { - return this.unique().values.length; - } - - value_counts() { - let s_data = this.values; - let data_dict = {}; - - for (let i = 0; i < s_data.length; i++) { - let val = s_data[i]; - - if (val in data_dict) { - data_dict[val] += 1; - } else { - data_dict[val] = 1; - } - } - - let index = Object.keys(data_dict).map(x => { - return parseInt(x) ? parseInt(x) : x; - }); - let data = Object.values(data_dict); - let series = new Series(data, { - index: index - }); - return series; - } - - abs() { - let abs_data = this.row_data_tensor.abs().arraySync(); - return new Series(utils.__round(abs_data, 2, true)); - } - - cumsum() { - let data = this.__cum_ops("sum"); - - return data; - } - - cummin() { - let data = this.__cum_ops("min"); - - return data; - } - - cummax() { - let data = this.__cum_ops("max"); - - return data; - } - - cumprod() { - let data = this.__cum_ops("prod"); - - return data; - } - - lt(other) { - return this.__bool_ops(other, "lt"); - } - - gt(other) { - return this.__bool_ops(other, "gt"); - } - - le(other) { - return this.__bool_ops(other, "le"); - } - - ge(other) { - return this.__bool_ops(other, "ge"); - } - - ne(other) { - return this.__bool_ops(other, "ne"); - } - - eq(other) { - return this.__bool_ops(other, "eq"); - } - - replace(kwargs = {}) { - let params_needed = ["replace", "with", "inplace"]; - - utils._throw_wrong_params_error(kwargs, params_needed); - - kwargs['inplace'] = kwargs['inplace'] || false; - - if (!("replace" in kwargs)) { - throw Error("Params Error: Must specify param 'replace'"); - } - - if (!("with" in kwargs)) { - throw Error("Params Error: Must specify param 'with'"); - } - - let replaced_arr = []; - let old_arr = this.values; - old_arr.forEach(val => { - if (val == kwargs['replace']) { - replaced_arr.push(kwargs['with']); - } else { - replaced_arr.push(val); - } - }); - - if (kwargs['inplace']) { - this.data = replaced_arr; - } else { - let sf = new Series(replaced_arr, { - index: this.index, - columns: this.columns, - dtypes: this.dtypes - }); - return sf; - } - } - - dropna(kwargs = {}) { - let params_needed = ["inplace"]; - - utils._throw_wrong_params_error(kwargs, params_needed); - - kwargs['inplace'] = kwargs['inplace'] || false; - let old_values = this.values; - let old_index = this.index; - let new_values = []; - let new_index = []; - let isna_vals = this.isna().values; - isna_vals.forEach((val, i) => { - if (!val) { - new_values.push(old_values[i]); - new_index.push(old_index[i]); - } - }); - - if (kwargs['inplace']) { - this.index_arr = new_index; - this.data = new_values; - } else { - let sf = new Series(new_values, { - columns: this.column_names, - index: new_index, - dtypes: this.dtypes - }); - return sf; - } - } - - argsort(ascending = true) { - let sorted_index = this.sort_values({ - ascending: ascending - }).index; - let sf = new Series(sorted_index); - return sf; - } - - argmax() { - return this.row_data_tensor.argMax().arraySync(); - } - - argmin() { - return this.row_data_tensor.argMin().arraySync(); - } - - get dtype() { - return this.dtypes[0]; - } - - drop_duplicates(kwargs = {}) { - let params_needed = ["inplace", "keep"]; - - utils._throw_wrong_params_error(kwargs, params_needed); - - kwargs['inplace'] = kwargs['inplace'] || false; - kwargs['keep'] = kwargs['keep'] || "first"; - let data_arr, old_index; - - if (kwargs['keep'] == "last") { - data_arr = this.values.reverse(); - old_index = this.index.reverse(); - } else { - data_arr = this.values; - old_index = this.index; - } - - let new_index = []; - let new_arr = []; - data_arr.forEach((val, i) => { - if (!new_arr.includes(val)) { - new_index.push(old_index[i]); - new_arr.push(val); - } - }); - - if (kwargs['keep'] == "last") { - new_arr = new_arr.reverse(); - new_index = new_index.reverse(); - } - - if (kwargs['inplace']) { - this.data = new_arr; - this.index_arr = new_index; - } else { - let sf = new Series(new_arr, { - index: new_index, - columns: this.column_names, - dtypes: this.dtypes - }); - return sf; - } - } - - toString() { - let table_width = 20; - let table_truncate = 20; - let max_row = config.get_max_row; - let data_arr = []; - let table_config = {}; - let header = [""].concat(this.columns); - let idx, data; - - if (this.values.length > max_row) { - data = this.values.slice(0, max_row); - idx = this.index.slice(0, max_row); - } else { - data = this.values; - idx = this.index; - } - - idx.forEach((val, i) => { - let row = [val].concat(data[i]); - data_arr.push(row); - }); - table_config[0] = 10; - table_config[1] = { - width: table_width, - truncate: table_truncate - }; - let table_data = [header].concat(data_arr); - return (0, _table.table)(table_data, { - columns: table_config - }); - } - - __bool_ops(other, b_ops) { - let r_series; - let l_series = this.values; - - if (typeof other == "number") { - r_series = [...l_series].fill(other); - } else { - if (!(other instanceof Series)) { - throw new Error("Value Error: 'other' must be an instance of Series"); - } - - r_series = other.values; - } - - if (!(l_series.length === r_series.length)) { - throw new Error("Length Error: Both series must be of the same length"); - } - - let data = []; - - for (let i = 0; i < l_series.length; i++) { - let l_val = l_series[i]; - let r_val = r_series[i]; - let bool = null; - - switch (b_ops) { - case "lt": - bool = l_val < r_val ? true : false; - data.push(bool); - break; - - case "gt": - bool = l_val > r_val ? true : false; - data.push(bool); - break; - - case "le": - bool = l_val <= r_val ? true : false; - data.push(bool); - break; - - case "ge": - bool = l_val >= r_val ? true : false; - data.push(bool); - break; - - case "ne": - bool = l_val != r_val ? true : false; - data.push(bool); - break; - - case "eq": - bool = l_val === r_val ? true : false; - data.push(bool); - break; - } - } - - return new Series(data); - } - - __cum_ops(ops) { - let s_data = this.values; - let temp_val = s_data[0]; - let data = [temp_val]; - - for (let i = 1; i < s_data.length; i++) { - let curr_val = s_data[i]; - - switch (ops) { - case "max": - if (curr_val > temp_val) { - data.push(curr_val); - temp_val = curr_val; - } else { - data.push(temp_val); - } - - break; - - case "min": - if (curr_val < temp_val) { - data.push(curr_val); - temp_val = curr_val; - } else { - data.push(temp_val); - } - - break; - - case "sum": - temp_val = temp_val + curr_val; - data.push(temp_val); - break; - - case "prod": - temp_val = temp_val * curr_val; - data.push(temp_val); - break; - } - } - - return new Series(data); - } - - astype(dtype) { - const __supported_dtypes = ['float32', "int32", 'string', 'boolean']; - - if (!dtype) { - throw Error("Value Error: Please specify dtype to cast to"); - } - - if (!__supported_dtypes.includes(dtype)) { - throw Error(`dtype ${dtype} not supported. dtype must be one of ${__supported_dtypes}`); - } - - let col_values = this.values; - let new_values = []; - - switch (dtype) { - case "float32": - col_values.forEach(val => { - new_values.push(Number(val)); - }); - break; - - case "int32": - col_values.forEach(val => { - new_values.push(Number(Number(val).toFixed())); - }); - break; - - case "string": - col_values.forEach(val => { - new_values.push(String(val)); - }); - break; - - case "boolean": - col_values.forEach(val => { - new_values.push(Boolean(val)); - }); - break; - - default: - break; - } - - let sf = new Series(new_values, { - dtypes: dtype, - index: this.index - }); - return sf; - } - - get str() { - if (this.dtypes[0] == "string") { - return new _strings.Str(this); - } else { - throw new Error("Cannot call accessor str on non-string type"); - } - } - - get dt() { - let timeseries = new _timeseries.TimeSeries({ - data: this - }); - timeseries.preprocessed(); - return timeseries; - } - - print() { - console.log(this + ""); - } - - plot(div) { - const plt = new Plot(this, div); - return plt; - } - - iloc(row) { - let kwargs = {}; - kwargs["rows"] = row; - kwargs["type"] = "iloc"; - let [new_data, columns, rows] = (0, _indexing.indexLoc)(this, kwargs); - let sf = new Series(new_data, { - columns: columns, - index: rows - }); - return sf; - } - - append(val, inplace = false) { - if (inplace) { - let self = this; - - if (Array.isArray(val)) { - val.forEach((el, i) => { - self.data.push(el); - self.index_arr.push(i); - }); - } else if (val instanceof Series) { - let value = val.values; - let old_index = val.index; - value.forEach((el, i) => { - self.data.push(el); - self.index_arr.push(old_index[i]); - }); - } else { - self.data.push(val); - self.index_arr.push(0); - } - } else { - let sf = this.copy(); - - if (Array.isArray(val)) { - val.forEach((el, i) => { - sf.data.push(el); - sf.index_arr.push(i); - }); - } else if (val instanceof Series) { - let value = val.values; - let old_index = val.index; - value.forEach((el, i) => { - sf.data.push(el); - sf.index_arr.push(old_index[i]); - }); - } else { - sf.data.push(val); - sf.index_arr.push(0); - } - - return sf; - } - } - -} - -exports.Series = Series; \ No newline at end of file diff --git a/danfojs-node/dist/core/strings.js b/danfojs-node/dist/core/strings.js deleted file mode 100644 index 55680aae..00000000 --- a/danfojs-node/dist/core/strings.js +++ /dev/null @@ -1,359 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.Str = void 0; - -var _series = require("./series"); - -class Str { - constructor(series) { - this.series = series; - this.array = series.values; - } - - toLowerCase() { - let new_arr = []; - this.array.map(val => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(val); - } else { - new_arr.push(val.toLowerCase()); - } - }); - - let sf = this.__create_new_sf_from(new_arr, this.series); - - return sf; - } - - toUpperCase() { - let new_arr = []; - this.array.map(val => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(val); - } else { - new_arr.push(val.toUpperCase()); - } - }); - - let sf = this.__create_new_sf_from(new_arr, this.series); - - return sf; - } - - capitalize() { - let new_arr = []; - this.array.map(val => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(val); - } else { - let f_char = val.slice(0, 1); - let l_char = val.slice(1); - let new_str = `${f_char.toUpperCase()}${l_char.toLowerCase()}`; - new_arr.push(new_str); - } - }); - - let sf = this.__create_new_sf_from(new_arr, this.series); - - return sf; - } - - charAt(index = 0) { - let new_arr = []; - this.array.map(val => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(val); - } else { - new_arr.push(val.charAt(index)); - } - }); - - let sf = this.__create_new_sf_from(new_arr, this.series); - - return sf; - } - - concat(other = "", position = 1) { - if (Array.isArray(other)) { - let final_arr = []; - - for (let i = 0; i < other.length; i++) { - let l_str = this.array[i]; - let r_str = other[i]; - - if (position == 1) { - final_arr.push(l_str.concat(r_str)); - } else { - final_arr.push(r_str.concat(l_str)); - } - } - - let sf = this.__create_new_sf_from(final_arr, this.series); - - return sf; - } else { - let new_arr = []; - this.array.map(val => { - if (position == 1) { - if (isNaN(val) && typeof val != "string") { - new_arr.push(String(val).concat(other)); - } else { - new_arr.push(val.concat(other)); - } - } else { - if (isNaN(val) && typeof val != "string") { - new_arr.push(other.concat(String(val))); - } else { - new_arr.push(other.concat(val)); - } - } - }); - - let sf = this.__create_new_sf_from(new_arr, this.series); - - return sf; - } - } - - startsWith(str = "") { - let new_arr = []; - this.array.forEach(val => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(false); - } else { - new_arr.push(val.startsWith(str)); - } - }); - - let sf = this.__create_new_sf_from(new_arr, this.series); - - return sf; - } - - endsWith(str = "") { - let new_arr = []; - this.array.map(val => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(false); - } else { - new_arr.push(val.endsWith(str)); - } - }); - - let sf = this.__create_new_sf_from(new_arr, this.series); - - return sf; - } - - includes(str = "") { - let new_arr = []; - this.array.map(val => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(false); - } else { - new_arr.push(val.includes(str)); - } - }); - - let sf = this.__create_new_sf_from(new_arr, this.series); - - return sf; - } - - indexOf(str = "") { - let new_arr = []; - this.array.map(val => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(-1); - } else { - new_arr.push(val.indexOf(str)); - } - }); - - let sf = this.__create_new_sf_from(new_arr, this.series); - - return sf; - } - - lastIndexOf(str = "") { - let new_arr = []; - this.array.map(val => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(-1); - } else { - new_arr.push(val.lastIndexOf(str)); - } - }); - - let sf = this.__create_new_sf_from(new_arr, this.series); - - return sf; - } - - replace(searchValue = "", replaceValue = "") { - let new_arr = []; - this.array.map(val => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(val); - } else { - new_arr.push(val.replace(searchValue, replaceValue)); - } - }); - - let sf = this.__create_new_sf_from(new_arr, this.series); - - return sf; - } - - repeat(num = 1) { - let new_arr = []; - this.array.map(val => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(val); - } else { - new_arr.push(val.repeat(num)); - } - }); - - let sf = this.__create_new_sf_from(new_arr, this.series); - - return sf; - } - - search(str = "") { - let new_arr = []; - this.array.map(val => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(-1); - } else { - new_arr.push(val.search(str)); - } - }); - - let sf = this.__create_new_sf_from(new_arr, this.series); - - return sf; - } - - slice(startIndex = 0, endIndex = 1) { - let new_arr = []; - this.array.map(val => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(val); - } else { - new_arr.push(val.slice(startIndex, endIndex)); - } - }); - - let sf = this.__create_new_sf_from(new_arr, this.series); - - return sf; - } - - split(splitVal = " ") { - let new_arr = []; - this.array.map(val => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(val); - } else { - new_arr.push(val.split(splitVal)); - } - }); - - let sf = this.__create_new_sf_from(new_arr, this.series); - - return sf; - } - - substr(startIndex = 0, num = 1) { - let new_arr = []; - this.array.map(val => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(val); - } else { - new_arr.push(val.substr(startIndex, num)); - } - }); - - let sf = this.__create_new_sf_from(new_arr, this.series); - - return sf; - } - - substring(startIndex = 0, endIndex = 1) { - let new_arr = []; - this.array.map(val => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(val); - } else { - new_arr.push(val.substring(startIndex, endIndex)); - } - }); - - let sf = this.__create_new_sf_from(new_arr, this.series); - - return sf; - } - - trim() { - let new_arr = []; - this.array.map(val => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(val); - } else { - new_arr.push(val.trim()); - } - }); - - let sf = this.__create_new_sf_from(new_arr, this.series); - - return sf; - } - - join(valToJoin = "", joinChar = " ") { - let new_arr = []; - this.array.map(val => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(val); - } else { - let l_char = val; - let r_char = valToJoin; - let new_char = `${l_char}${joinChar}${r_char}`; - new_arr.push(new_char); - } - }); - - let sf = this.__create_new_sf_from(new_arr, this.series); - - return sf; - } - - len() { - let new_arr = []; - this.array.map(val => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(val); - } else { - new_arr.push(val.length); - } - }); - - let sf = this.__create_new_sf_from(new_arr, this.series); - - return sf; - } - - __create_new_sf_from(new_val, series) { - let sf = new _series.Series(new_val, { - columns: series.column_names, - index: series.index - }); - return sf; - } - -} - -exports.Str = Str; \ No newline at end of file diff --git a/danfojs-node/dist/core/timeseries.js b/danfojs-node/dist/core/timeseries.js deleted file mode 100644 index e9f545e7..00000000 --- a/danfojs-node/dist/core/timeseries.js +++ /dev/null @@ -1,223 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.to_datetime = exports.TimeSeries = void 0; - -var _utils = require("./utils"); - -var _series = require("./series"); - -const utils = new _utils.Utils(); - -class TimeSeries { - constructor(kwargs) { - utils.__in_object(kwargs, "data", "specify the data"); - - if (kwargs["data"] instanceof _series.Series) { - this.data = kwargs["data"].values; - } else { - this.data = kwargs["data"]; - } - - this.format = kwargs["format"] || null; - this.keys = { - "Y": 4, - "m": 2, - "H": 2, - "M": 2, - "S": 2, - "b": 3, - "d": 2, - "-": 1 - }; - this.__in_format = ["%Y-m-d%", "%m-d-Y%", "%m-d-Y H%M%S%"]; - this.__monthName = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; - this.__weekName = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]; - } - - preprocessed() { - let format_values = null; - - if (this.format) { - format_values = this.generate_format(); - } - - this.date_list = []; - - for (let i = 0; i < this.data.length; i++) { - let date_string = this.data[i]; - - if (this.format && !this.__in_format.includes(this.format)) { - let format_dateString = this.__apply_format(date_string, format_values); - - let valueDate = new Date(format_dateString); - - this.__is_validDate(valueDate); - - this.date_list.push(valueDate); - } else if (this.is_timestamp(date_string)) { - let string2int = parseInt(date_string); - let valueDate = new Date(string2int); - - this.__is_validDate(valueDate); - - this.date_list.push(valueDate); - } else { - let valueDate = new Date(date_string); - - this.__is_validDate(valueDate); - - this.date_list.push(valueDate); - } - } - } - - __apply_format(elem, format) { - let date_string = ""; - let temp_val = 0; - - for (let index in format) { - let value = format[index]; - - if (index == 0) { - date_string += elem.slice(0, value); - } else if (index > 4) { - date_string += ":" + elem.slice(temp_val, temp_val + value); - } else if (index == 4) { - date_string += " " + elem.slice(temp_val, temp_val + value); - } else if (index > 0 && index <= 2) { - date_string += "-" + elem.slice(temp_val, temp_val + value); - } - - temp_val += value; - } - - return date_string; - } - - generate_format() { - let format_list = this.format.split(""); - let self = this; - let format_keys = format_list.filter(function (key) { - return utils.__key_in_object(self.keys, key); - }); - let format_value = format_keys.map(function (val) { - return self.keys[val]; - }); - return format_value; - } - - is_timestamp(date_string) { - let string2int = parseInt(date_string); - let int2string = String(string2int); - - if (isNaN(string2int) || int2string.length < date_string.length) { - return false; - } else { - return true; - } - } - - __is_validDate(date_instance) { - if (date_instance.toDateString() == "Invalid Date") { - throw new Error("Invalid date, the date format not recognise"); - } - } - - __date_ops(callback) { - let data = this.date_list.map(function (date_instance) { - return callback(date_instance); - }); - let series = new _series.Series(data = data); - return series; - } - - month() { - let series = this.__date_ops(function (date_instance) { - return date_instance.getMonth(); - }); - - return series; - } - - hour() { - let series = this.__date_ops(function (date_instance) { - return date_instance.getHours(); - }); - - return series; - } - - day() { - let series = this.__date_ops(function (date_instance) { - return date_instance.getDay(); - }); - - return series; - } - - year() { - let series = this.__date_ops(function (date_instance) { - return date_instance.getFullYear(); - }); - - return series; - } - - month_name() { - let self = this; - - let series = this.__date_ops(function (date_instance) { - return self.__monthName[date_instance.getMonth()]; - }); - - return series; - } - - weekdays() { - let self = this; - - let series = this.__date_ops(function (date_instance) { - return self.__weekName[date_instance.getDay()]; - }); - - return series; - } - - monthday() { - let series = this.__date_ops(function (date_instance) { - return date_instance.getDate(); - }); - - return series; - } - - seconds() { - let series = this.__date_ops(function (date_instance) { - return date_instance.getSeconds(); - }); - - return series; - } - - minutes() { - let series = this.__date_ops(function (date_instance) { - return date_instance.getMinutes(); - }); - - return series; - } - -} - -exports.TimeSeries = TimeSeries; - -const to_datetime = kwargs => { - let timeseries = new TimeSeries(kwargs); - timeseries.preprocessed(); - return timeseries; -}; - -exports.to_datetime = to_datetime; \ No newline at end of file diff --git a/danfojs-node/dist/core/utils.js b/danfojs-node/dist/core/utils.js deleted file mode 100644 index e7f3132c..00000000 --- a/danfojs-node/dist/core/utils.js +++ /dev/null @@ -1,607 +0,0 @@ -"use strict"; - -var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.Utils = void 0; - -var tf = _interopRequireWildcard(require("@tensorflow/tfjs-node")); - -var _config = require("../config/config"); - -const config = new _config.Configs(); - -class Utils { - remove(arr, index) { - let new_arr = arr.filter(function (val, i) { - return i != index; - }); - return new_arr; - } - - __remove_arr(arr, index) { - let new_arr = arr.filter(function (val, i) { - return !index.includes(i); - }); - return new_arr; - } - - __is_string(value) { - return typeof value === "string" || value instanceof String; - } - - __is_number(value) { - return typeof value === "number" && isFinite(value); - } - - __is_object(value) { - return value && typeof value === "object" && value.constructor && value.constructor.name === "Object"; - } - - __is_null(value) { - return value === null; - } - - __is_undefined(value) { - return typeof value === "undefined"; - } - - __sample_from_iter(array, k, destructive) { - var n = array.length; - if (k < 0 || k > n) throw new RangeError("Sample larger than population or is negative"); - - if (destructive || n <= (k <= 5 ? 21 : 21 + Math.pow(4, Math.ceil(Math.log(k * 3, 4))))) { - if (!destructive) array = Array.prototype.slice.call(array); - - for (var i = 0; i < k; i++) { - var j = i + Math.random() * (n - i) | 0; - var x = array[i]; - array[i] = array[j]; - array[j] = x; - } - - array.length = k; - return array; - } else { - var selected = new Set(); - - while (selected.add(Math.random() * n | 0).size < k) {} - - return Array.prototype.map.call(selected, i => population[i]); - } - } - - __range(start, end) { - let value = tf.linspace(start, end, end - start + 1).arraySync(); - return value; - } - - __key_in_object(object, key) { - if (Object.prototype.hasOwnProperty.call(object, key)) { - return true; - } else { - return false; - } - } - - __get_col_values(data) { - let row_len = data.length; - let cols_len = data[0].length; - var cols_arr = []; - - for (var i = 0; i <= cols_len - 1; i++) { - let temp_col = []; - - for (let j = 0; j < row_len; j++) { - temp_col.push(data[j][i]); - } - - cols_arr.push(temp_col); - } - - return cols_arr; - } - - _get_row_and_col_values(data) { - let col_names = Object.keys(data); - let col_data = Object.values(data); - let first_col_len = col_data[0].length; - col_data.forEach(data => { - if (data.length != first_col_len) { - throw Error("Length Error: Length of columns must be the same!"); - } - }); - let rows_len = col_data[0].length; - let cols_len = col_names.length; - var rows_arr = []; - - for (var i = 0; i <= rows_len - 1; i++) { - var temp_row = []; - - for (let j = 0; j < cols_len; j++) { - let _arr = col_data[j]; - temp_row.push(_arr[i]); - } - - rows_arr.push(temp_row); - } - - return [rows_arr, col_names]; - } - - __convert_2D_to_1D(data) { - let new_data = []; - data.map(val => { - if (this.__is_object(val)) { - new_data.push(JSON.stringify(val)); - } else { - new_data.push(`${val}`); - } - }); - return new_data; - } - - __replace_undefined_with_NaN(data, isSeries) { - if (isSeries) { - let temp_arr = []; - data.forEach(val => { - if (typeof val === "undefined" || val == Infinity || val == null) { - temp_arr.push(NaN); - } else { - temp_arr.push(val); - } - }); - return temp_arr; - } else { - let full_arr = []; - data.forEach(val => { - var temp_arr = []; - val.forEach(ele => { - if (typeof ele === "undefined" || ele == Infinity || ele == null) { - temp_arr.push(NaN); - } else { - temp_arr.push(ele); - } - }); - full_arr.push(temp_arr); - }); - return full_arr; - } - } - - __checker(arr_val) { - let dtypes = []; - let lim; - let int_tracker = []; - let float_tracker = []; - let string_tracker = []; - let bool_tracker = []; - - if (arr_val.length == 0) { - dtypes.push("string"); - } - - if (arr_val.length < config.get_dtype_test_lim) { - lim = arr_val.length - 1; - } else { - lim = config.get_dtype_test_lim - 1; - } - - arr_val.forEach((ele, indx) => { - let count = indx; - - if (typeof ele == "boolean") { - float_tracker.push(false); - int_tracker.push(false); - string_tracker.push(false); - bool_tracker.push(true); - } else if (isNaN(ele) && typeof ele != "string") { - float_tracker.push(true); - int_tracker.push(false); - string_tracker.push(false); - bool_tracker.push(false); - } else if (!isNaN(Number(ele))) { - if (ele.toString().includes(".")) { - float_tracker.push(true); - int_tracker.push(false); - string_tracker.push(false); - bool_tracker.push(false); - } else { - float_tracker.push(false); - int_tracker.push(true); - string_tracker.push(false); - bool_tracker.push(false); - } - } else { - float_tracker.push(false); - int_tracker.push(false); - string_tracker.push(true); - bool_tracker.push(false); - } - - if (count == lim) { - const even = element => element == true; - - if (string_tracker.some(even)) { - dtypes = "string"; - } else if (float_tracker.some(even)) { - dtypes = "float32"; - } else if (int_tracker.some(even)) { - dtypes = "int32"; - } else if (bool_tracker.some(even)) { - dtypes = "boolean"; - } else { - dtypes = "undefined"; - } - } - }); - return dtypes; - } - - __get_t(arr_val) { - const self = this; - - if (this.__is_1D_array(arr_val)) { - return [this.__checker(arr_val)]; - } else { - const dtypes = arr_val.map(arr => { - return self.__checker(arr); - }); - return dtypes; - } - } - - __unique(data) { - let unique = new Set(); - data.map(function (val) { - unique.add(val[0]); - }); - let unique_array = Array.from(unique); - return unique_array; - } - - __in_object(object, key, message) { - if (!Object.prototype.hasOwnProperty.call(object, key)) { - throw new Error(message); - } - } - - __is_1D_array(arr) { - if (typeof arr[0] == "number" || typeof arr[0] == "string" || typeof arr[0] == "boolean") { - return true; - } else { - return false; - } - } - - __arr_to_obj(arr) { - let arr_map = {}; - arr.forEach((ele, i) => { - arr_map[ele] = i; - }); - return arr_map; - } - - __count_nan(arr, return_val = true, isSeries) { - if (isSeries) { - let null_count = 0; - let val_count = 0; - arr.forEach(ele => { - if (Number.isNaN(ele)) { - null_count = null_count + 1; - } else { - val_count = val_count + 1; - } - }); - - if (return_val) { - return val_count; - } else { - return null_count; - } - } else { - let result_arr = []; - arr.forEach(ele_arr => { - let null_count = 0; - let val_count = 0; - ele_arr.forEach(ele => { - if (Number.isNaN(ele)) { - null_count = null_count + 1; - } else { - val_count = val_count + 1; - } - }); - - if (return_val) { - result_arr.push(val_count); - } else { - result_arr.push(null_count); - } - }); - return result_arr; - } - } - - __median(arr, isSeries) { - if (isSeries) { - const sorted = arr.slice().sort((a, b) => a - b); - const middle = Math.floor(sorted.length / 2); - - if (sorted.length % 2 === 0) { - return (sorted[middle - 1] + sorted[middle]) / 2; - } - - return sorted[middle]; - } else { - let result_arr = []; - arr.map(ele => { - const sorted = ele.slice().sort((a, b) => a - b); - const middle = Math.floor(sorted.length / 2); - - if (sorted.length % 2 === 0) { - result_arr.push((sorted[middle - 1] + sorted[middle]) / 2); - } else { - result_arr.push(sorted[middle]); - } - }); - return result_arr; - } - } - - __mode(arr) { - var modes = [], - count = [], - i, - maxIndex = 0; - arr.forEach(val => { - count[val] = (count[val] || 0) + 1; - - if (count[val] > maxIndex) { - maxIndex = count[val]; - } - }); - - for (i in count) if (this.__key_in_object(count, i)) { - if (count[i] === maxIndex) { - modes.push(Number(i)); - } - } - - return modes; - } - - __round(arr, dp = 2, isSeries) { - if (dp < 0) { - dp = 1; - } - - if (isSeries) { - let new_arr = []; - arr.map(val => { - new_arr.push(Number(val.toFixed(dp))); - }); - return new_arr; - } else { - let result_arr = []; - arr.map(arr_ele => { - let new_arr = []; - arr_ele.map(val => { - new_arr.push(Number(val.toFixed(dp))); - }); - result_arr.push(new_arr); - }); - return result_arr; - } - } - - __is_function(variable) { - return typeof variable == "function"; - } - - __randgen(num, start, end) { - let gen_num = []; - - function randi(a, b) { - return Math.floor(Math.random() * (b - a) + a); - } - - function recursive(val, arr) { - if (!arr.includes(val)) { - return val; - } - - val = randi(start, end); - recursive(val, arr); - } - - for (let i = 0; i < num; i++) { - let gen_val = randi(start, end); - let recur_val = recursive(gen_val, gen_num); - gen_num.push(recur_val); - } - - return gen_num; - } - - _throw_wrong_params_error(kwargs, params_needed) { - let keys = Object.keys(kwargs); - let bool = []; - - for (let i = 0; i < keys.length; i++) { - if (params_needed.includes(keys[i])) { - bool.push(true); - } else { - bool.push(false); - } - } - - const truthy = element => element == false; - - if (bool.some(truthy)) { - throw Error(`Params Error: A specified parameter is not supported. Your params must be any of the following [${params_needed}]`); - } - } - - __map_int_to_bool(arr, dim) { - let new_arr = []; - - if (dim == 2) { - arr.map(outer_val => { - let temp_arr = []; - outer_val.map(val => { - if (val == 1) { - temp_arr.push(true); - } else { - temp_arr.push(false); - } - }); - new_arr.push(temp_arr); - }); - return new_arr; - } else { - arr.map(val => { - if (val == 1) { - new_arr.push(true); - } else { - new_arr.push(false); - } - }); - return new_arr; - } - } - - __std(data) { - let tensor_data = data; - let mean = tensor_data.mean(); - let sub_mean_pow = tensor_data.sub(mean).pow(2); - let mean_data = sub_mean_pow.mean(); - let std = mean_data.sqrt(); - return std; - } - - __zeros(row, column) { - let zero_data = []; - - for (let i = 0; i < row; i++) { - let col_data = Array(column); - - for (let j = 0; j < column; j++) { - col_data[j] = 0; - } - - zero_data.push(col_data); - } - - return zero_data; - } - - __shuffle(num, array) { - var i = array.length, - j = 0, - temp; - - while (i--) { - j = Math.floor(Math.random() * (i + 1)); - temp = array[i]; - array[i] = array[j]; - array[j] = temp; - } - - return array.slice(0, num); - } - - __sort(arr, ascending = true) { - let sorted = arr.slice(); - return sorted.sort((a, b) => { - if (ascending) { - if (typeof a === "string" && typeof b === "string") { - return a.charCodeAt() - b.charCodeAt(); - } else { - return a - b; - } - } else { - if (typeof a === "string" && typeof b === "string") { - return b.charCodeAt() - a.charCodeAt(); - } else { - return b - a; - } - } - }); - } - - __is_browser_env() { - var isBrowser = new Function("try {return this===window;}catch(e){ return false;}"); - return isBrowser(); - } - - __is_node_env() { - var isNode = new Function("try {return this===global;}catch(e){return false;}"); - return isNode(); - } - - _throw_str_dtype_error(obj, ops) { - if (obj.dtypes[0] == "string") { - throw Error(`dtype error: String data type does not support ${ops} operation`); - } - } - - _remove_nans(arr) { - let values = arr.filter(val => !isNaN(val) && typeof val != "string"); - return values; - } - - _replace_nan_with_null(arr) { - let values = arr.map(val => { - if (isNaN(val)) { - return null; - } else { - return val; - } - }); - return values; - } - - __get_duplicate(arr) { - let temp_obj = {}; - let rslt_obj = {}; - arr.forEach((val, index) => { - if (temp_obj.hasOwnProperty(val)) { - temp_obj[val]["count"] += 1; - temp_obj[val]["index"].push(index); - } else { - temp_obj[val] = {}; - temp_obj[val]["count"] = 1; - temp_obj[val]["index"] = [index]; - } - }); - - for (let key in temp_obj) { - if (temp_obj[key]["count"] >= 2) { - rslt_obj[key] = {}; - rslt_obj[key]["count"] = temp_obj[key]["count"]; - rslt_obj[key]["index"] = temp_obj[key]["index"]; - } - } - - return rslt_obj; - } - - _sort_arr_with_index(arr1, arr2, dtype) { - let sorted_idx = arr1.map((item, index) => { - return [arr2[index], item]; - }); - - if (dtype == "string") { - sorted_idx.sort(); - } else { - sorted_idx.sort(([arg1], [arg2]) => arg2 - arg1); - } - - return sorted_idx.map(([, item]) => item); - } - -} - -exports.Utils = Utils; \ No newline at end of file diff --git a/danfojs-node/dist/index.js b/danfojs-node/dist/index.js deleted file mode 100644 index 5c2b93e8..00000000 --- a/danfojs-node/dist/index.js +++ /dev/null @@ -1,159 +0,0 @@ -"use strict"; - -var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); - -var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); - -Object.defineProperty(exports, "__esModule", { - value: true -}); -Object.defineProperty(exports, "NDframe", { - enumerable: true, - get: function () { - return _generic.default; - } -}); -Object.defineProperty(exports, "Series", { - enumerable: true, - get: function () { - return _series.Series; - } -}); -Object.defineProperty(exports, "DataFrame", { - enumerable: true, - get: function () { - return _frame.DataFrame; - } -}); -Object.defineProperty(exports, "to_datetime", { - enumerable: true, - get: function () { - return _timeseries.to_datetime; - } -}); -Object.defineProperty(exports, "read_csv", { - enumerable: true, - get: function () { - return _reader.read_csv; - } -}); -Object.defineProperty(exports, "read_json", { - enumerable: true, - get: function () { - return _reader.read_json; - } -}); -Object.defineProperty(exports, "read_excel", { - enumerable: true, - get: function () { - return _reader.read_excel; - } -}); -Object.defineProperty(exports, "read", { - enumerable: true, - get: function () { - return _reader.read; - } -}); -Object.defineProperty(exports, "merge", { - enumerable: true, - get: function () { - return _merge.merge; - } -}); -Object.defineProperty(exports, "concat", { - enumerable: true, - get: function () { - return _concat.concat; - } -}); -Object.defineProperty(exports, "LabelEncoder", { - enumerable: true, - get: function () { - return _encodings.LabelEncoder; - } -}); -Object.defineProperty(exports, "OneHotEncoder", { - enumerable: true, - get: function () { - return _encodings.OneHotEncoder; - } -}); -Object.defineProperty(exports, "MinMaxScaler", { - enumerable: true, - get: function () { - return _scalers.MinMaxScaler; - } -}); -Object.defineProperty(exports, "StandardScaler", { - enumerable: true, - get: function () { - return _scalers.StandardScaler; - } -}); -Object.defineProperty(exports, "date_range", { - enumerable: true, - get: function () { - return _date_range.date_range; - } -}); -Object.defineProperty(exports, "get_dummies", { - enumerable: true, - get: function () { - return _get_dummies.get_dummies; - } -}); -Object.defineProperty(exports, "Configs", { - enumerable: true, - get: function () { - return _config.Configs; - } -}); -Object.defineProperty(exports, "Str", { - enumerable: true, - get: function () { - return _strings.Str; - } -}); -Object.defineProperty(exports, "Utils", { - enumerable: true, - get: function () { - return _utils.Utils; - } -}); -exports.tf = exports._version = void 0; - -var _generic = _interopRequireDefault(require("./core/generic")); - -var tf = _interopRequireWildcard(require("@tensorflow/tfjs-node")); - -exports.tf = tf; - -var _series = require("./core/series"); - -var _frame = require("./core/frame"); - -var _timeseries = require("./core/timeseries"); - -var _reader = require("./io/reader"); - -var _merge = require("./core/merge"); - -var _concat = require("./core/concat"); - -var _encodings = require("./preprocessing/encodings"); - -var _scalers = require("./preprocessing/scalers"); - -var _date_range = require("./core/date_range"); - -var _get_dummies = require("./core/get_dummies"); - -var _config = require("./config/config"); - -var _strings = require("./core/strings"); - -var _utils = require("./core/utils"); - -const _version = "0.2.7"; -exports._version = _version; \ No newline at end of file diff --git a/danfojs-node/dist/io/reader.js b/danfojs-node/dist/io/reader.js deleted file mode 100644 index 27aabe15..00000000 --- a/danfojs-node/dist/io/reader.js +++ /dev/null @@ -1,118 +0,0 @@ -"use strict"; - -var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.read = exports.read_excel = exports.read_json = exports.read_csv = void 0; - -var _interopRequireWildcard2 = _interopRequireDefault(require("@babel/runtime/helpers/interopRequireWildcard")); - -var _tfjsNode = require("@tensorflow/tfjs-node"); - -var _nodeFetch = _interopRequireDefault(require("node-fetch")); - -var _frictionless = require("frictionless.js"); - -var _streamToArray = _interopRequireDefault(require("stream-to-array")); - -var _frame = require("../core/frame"); - -const read_csv = async (source, configs = {}) => { - let { - start, - end - } = configs; - - if (!(source.startsWith("file://") || source.startsWith("http") || source.startsWith("blob"))) { - source = source.startsWith("/") ? `file://${source}` : `file://${process.cwd()}/${source}`; - } - - let tfdata = []; - await _tfjsNode.data.csv(source, configs).skip(start).take(end).forEachAsync(row => { - return tfdata.push(row); - }); - const df = new _frame.DataFrame(tfdata); - return df; -}; - -exports.read_csv = read_csv; - -const read_json = async source => { - if (source.startsWith("https://") || source.startsWith("http://") || source.startsWith("file://")) { - let res = await (0, _nodeFetch.default)(source, { - method: "Get" - }); - let json = await res.json(); - let df = new _frame.DataFrame(json); - return df; - } else { - let fs = await Promise.resolve().then(() => (0, _interopRequireWildcard2.default)(require("fs"))); - return new Promise((resolve, reject) => { - fs.readFile(source, (err, data) => { - if (err) reject(err); - let df = new _frame.DataFrame(JSON.parse(data)); - resolve(df); - }); - }); - } -}; - -exports.read_json = read_json; - -const read_excel = async (source, configs) => { - const df = await read(source, configs); - return df; -}; - -exports.read_excel = read_excel; - -const read = async (source, configs = {}) => { - let { - data_num, - header, - sheet - } = configs; - data_num = data_num === undefined ? 0 : data_num; - header = header === undefined ? true : header; - let rows, file; - - if ((0, _frictionless.isDataset)(source)) { - console.info("datapackage.json found. Loading Dataset package from Datahub.io"); - const dataset = await _frictionless.Dataset.load(source); - file = dataset.resources[data_num]; - rows = await (0, _streamToArray.default)(await file.rows()); - } else { - try { - file = (0, _frictionless.open)(source); - - if (sheet) { - rows = await (0, _streamToArray.default)(await file.rows({ - sheet - })); - } else { - rows = await (0, _streamToArray.default)(await file.rows()); - } - } catch (error) { - console.log(error); - } - } - - if (["csv", "xls", "xlsx"].includes(await file.descriptor.format)) { - if (header) { - let df = new _frame.DataFrame(rows.slice(1), { - columns: rows[0] - }); - return df; - } else { - let df = new _frame.DataFrame(rows); - return df; - } - } else { - let df = new _frame.DataFrame(rows); - return df; - } -}; - -exports.read = read; \ No newline at end of file diff --git a/danfojs-node/dist/plotting/plot.js b/danfojs-node/dist/plotting/plot.js deleted file mode 100644 index ff98bd6e..00000000 --- a/danfojs-node/dist/plotting/plot.js +++ /dev/null @@ -1,681 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.Plot = void 0; - -var _utils = require("../core/utils"); - -var _series = require("../core/series"); - -const utils = new _utils.Utils(); - -try { - const version = Plotly.version; - console.info(`Using Plotly version ${version}`); -} catch (error) { - console.info(`Plotly CDN not found. If you need to make Plots, then add the Plotly CDN to your script`); -} - -class Plot { - constructor(ndframe, div) { - this.div = div; - this.ndframe = ndframe; - } - - line(config = {}) { - let ret_params = this.__get_plot_params(config); - - let this_config = ret_params[0]; - let params = ret_params[1]; - - if (this.ndframe instanceof _series.Series) { - let trace = {}; - let y = this.ndframe.values; - params.forEach(param => { - if (!param == "layout") { - trace[param] = config[param]; - } - }); - trace["y"] = y; - trace['type'] = "line"; - Plotly.newPlot(this.div, [trace], this_config['layout'], this_config); - } else { - if (utils.__key_in_object(this_config, 'x') && utils.__key_in_object(this_config, 'y')) { - if (!this.ndframe.column_names.includes(this_config['x'])) { - throw Error(`Column Error: ${this_config['x']} not found in columns`); - } - - if (!this.ndframe.column_names.includes(this_config['y'])) { - throw Error(`Column Error: ${this_config['y']} not found in columns`); - } - - let x = this.ndframe[this_config['x']].values; - let y = this.ndframe[this_config['y']].values; - let trace = {}; - trace["x"] = x; - trace['y'] = y; - let xaxis = {}; - let yaxis = {}; - xaxis['title'] = this_config['x']; - yaxis['title'] = this_config['y']; - this_config['layout']['xaxis'] = xaxis; - this_config['layout']['yaxis'] = yaxis; - Plotly.newPlot(this.div, [trace], this_config['layout'], this_config); - } else if (utils.__key_in_object(this_config, 'x') || utils.__key_in_object(this_config, 'y')) { - let data = []; - let cols_to_plot; - - if (utils.__key_in_object(this_config, "columns")) { - cols_to_plot = this.____check_if_cols_exist(this_config['columns']); - } else { - cols_to_plot = this.ndframe.column_names; - } - - cols_to_plot.forEach(c_name => { - let trace = {}; - params.forEach(param => { - trace[param] = config[param]; - }); - - if (utils.__key_in_object(this_config, 'x')) { - trace["x"] = this.ndframe[this_config['x']].values; - trace["y"] = this.ndframe[c_name].values; - trace['name'] = c_name; - } else { - trace["y"] = this.ndframe[this_config['y']].values; - trace["x"] = this.ndframe[c_name].values; - trace['name'] = c_name; - } - - data.push(trace); - }); - Plotly.newPlot(this.div, data, this_config['layout'], this_config); - } else { - let data = []; - let cols_to_plot; - - if (utils.__key_in_object(this_config, "columns")) { - cols_to_plot = this.____check_if_cols_exist(this_config['columns']); - } else { - cols_to_plot = this.ndframe.column_names; - } - - cols_to_plot.forEach(c_name => { - let trace = {}; - params.forEach(param => { - trace[param] = config[param]; - }); - trace["x"] = this.ndframe.index; - trace["y"] = this.ndframe[c_name].values; - trace['name'] = c_name; - data.push(trace); - }); - Plotly.newPlot(this.div, data, this_config['layout'], this_config); - } - } - } - - bar(config = {}) { - let ret_params = this.__get_plot_params(config); - - let this_config = ret_params[0]; - let params = ret_params[1]; - - if (this.ndframe instanceof _series.Series) { - let trace = {}; - let y = this.ndframe.values; - params.forEach(param => { - if (!param == "layout") { - trace[param] = config[param]; - } - }); - trace["y"] = y; - trace['type'] = "bar"; - Plotly.newPlot(this.div, [trace], this_config['layout'], this_config); - } else { - if (utils.__key_in_object(this_config, 'x') && utils.__key_in_object(this_config, 'y')) { - if (!this.ndframe.column_names.includes(this_config['x'])) { - throw Error(`Column Error: ${this_config['x']} not found in columns`); - } - - if (!this.ndframe.column_names.includes(this_config['y'])) { - throw Error(`Column Error: ${this_config['y']} not found in columns`); - } - - let x = this.ndframe[this_config['x']].values; - let y = this.ndframe[this_config['y']].values; - let trace = {}; - trace["x"] = x; - trace['y'] = y; - trace['type'] = "bar"; - let xaxis = {}; - let yaxis = {}; - xaxis['title'] = this_config['x']; - yaxis['title'] = this_config['y']; - this_config['layout']['xaxis'] = xaxis; - this_config['layout']['yaxis'] = yaxis; - Plotly.newPlot(this.div, [trace], this_config['layout'], this_config); - } else if (utils.__key_in_object(this_config, 'x') || utils.__key_in_object(this_config, 'y')) { - let trace = {}; - params.forEach(param => { - if (!param == "layout") { - trace[param] = config[param]; - } - }); - - if (utils.__key_in_object(this_config, 'x')) { - trace['y'] = this.ndframe[this_config['x']].values; - } else { - trace['y'] = this.ndframe[this_config['y']].values; - } - - trace['type'] = "bar"; - Plotly.newPlot(this.div, [trace], this_config['layout'], this_config); - } else { - let data = []; - let cols_to_plot; - - if (utils.__key_in_object(this_config, "columns")) { - cols_to_plot = this.____check_if_cols_exist(this_config['columns']); - } else { - cols_to_plot = this.ndframe.column_names; - } - - cols_to_plot.forEach(c_name => { - let trace = {}; - trace['x'] = this.ndframe.index; - trace["y"] = this.ndframe[c_name].values; - trace['name'] = c_name; - trace['type'] = "bar"; - data.push(trace); - }); - Plotly.newPlot(this.div, data, this_config['layout'], this_config); - } - } - } - - scatter(config = {}) { - let ret_params = this.__get_plot_params(config); - - let this_config = ret_params[0]; - let params = ret_params[1]; - - if (this.ndframe instanceof _series.Series) { - let trace = {}; - params.forEach(param => { - if (!param == "layout") { - trace[param] = config[param]; - } - }); - trace["x"] = this.ndframe.values; - trace['y'] = this.ndframe.index; - trace['type'] = "scatter"; - trace['mode'] = "markers"; - Plotly.newPlot(this.div, [trace], this_config['layout'], this_config); - } else { - if (utils.__key_in_object(this_config, 'x') && utils.__key_in_object(this_config, 'y')) { - if (!this.ndframe.column_names.includes(this_config['x'])) { - throw Error(`Column Error: ${this_config['x']} not found in columns`); - } - - if (!this.ndframe.column_names.includes(this_config['y'])) { - throw Error(`Column Error: ${this_config['y']} not found in columns`); - } - - let x = this.ndframe[this_config['x']].values; - let y = this.ndframe[this_config['y']].values; - let trace = {}; - trace["x"] = x; - trace['y'] = y; - trace['type'] = "scatter"; - trace['mode'] = "markers"; - let xaxis = {}; - let yaxis = {}; - xaxis['title'] = this_config['x']; - yaxis['title'] = this_config['y']; - this_config['layout']['xaxis'] = xaxis; - this_config['layout']['yaxis'] = yaxis; - Plotly.newPlot(this.div, [trace], this_config['layout'], this_config); - } else if (utils.__key_in_object(this_config, 'x') || utils.__key_in_object(this_config, 'y')) { - let trace = {}; - params.forEach(param => { - if (!param == "layout") { - trace[param] = config[param]; - } - }); - - if (utils.__key_in_object(this_config, 'x')) { - trace['y'] = this.ndframe.index; - trace['x'] = this.ndframe[this_config['x']].values; - } else { - trace['x'] = this.ndframe.index; - trace['y'] = this.ndframe[this_config['y']].values; - } - - trace['type'] = "scatter"; - trace['mode'] = "markers"; - Plotly.newPlot(this.div, [trace], this_config['layout'], this_config); - } else { - let data = []; - let cols_to_plot; - - if (utils.__key_in_object(this_config, "columns")) { - cols_to_plot = this.____check_if_cols_exist(this_config['columns']); - } else { - cols_to_plot = this.ndframe.column_names; - } - - cols_to_plot.forEach(c_name => { - let trace = {}; - trace['y'] = this.ndframe.index; - trace["x"] = this.ndframe[c_name].values; - trace['name'] = c_name; - trace['type'] = "scatter"; - trace['mode'] = "markers"; - data.push(trace); - }); - Plotly.newPlot(this.div, data, this_config['layout'], this_config); - } - } - } - - hist(config = {}) { - let ret_params = this.__get_plot_params(config); - - let this_config = ret_params[0]; - let params = ret_params[1]; - - if (this.ndframe instanceof _series.Series) { - let trace = {}; - params.forEach(param => { - if (!param == "layout") { - trace[param] = config[param]; - } - }); - trace["x"] = this.ndframe.values; - trace['type'] = "histogram"; - Plotly.newPlot(this.div, [trace], this_config['layout'], this_config); - } else if (utils.__key_in_object(this_config, 'x')) { - let trace = {}; - params.forEach(param => { - if (!param == "layout") { - trace[param] = config[param]; - } - }); - trace['x'] = this.ndframe[this_config['y']].values; - trace['type'] = "histogram"; - Plotly.newPlot(this.div, [trace], this_config['layout'], this_config); - } else if (utils.__key_in_object(this_config, 'y')) { - let trace = {}; - params.forEach(param => { - if (!param == "layout") { - trace[param] = config[param]; - } - }); - trace['y'] = this.ndframe[this_config['y']].values; - trace['type'] = "histogram"; - Plotly.newPlot(this.div, [trace], this_config['layout'], this_config); - } else { - let data = []; - let cols_to_plot; - - if (utils.__key_in_object(this_config, "columns")) { - cols_to_plot = this.____check_if_cols_exist(this_config['columns']); - } else { - cols_to_plot = this.ndframe.column_names; - } - - cols_to_plot.forEach(c_name => { - let trace = {}; - trace["x"] = this.ndframe[c_name].values; - trace['name'] = c_name; - trace['type'] = "histogram"; - data.push(trace); - }); - Plotly.newPlot(this.div, data, this_config['layout'], this_config); - } - } - - pie(config = {}) { - let ret_params = this.__get_plot_params(config); - - let this_config = ret_params[0]; - - if (this.ndframe instanceof _series.Series) { - let data = [{ - values: this.ndframe.values, - labels: this.ndframe.index, - type: 'pie', - name: this_config['labels'], - hoverinfo: 'label+percent+name', - automargin: true - }]; - Plotly.newPlot(this.div, data, this_config['layout'], this_config); - } else if (utils.__key_in_object(this_config, 'values') && utils.__key_in_object(this_config, 'labels')) { - if (!this.ndframe.column_names.includes(this_config['labels'])) { - throw Error(`Column Error: ${this_config['labels']} not found in columns. labels name must be one of [ ${this.ndframe.column_names}]`); - } - - if (!this.ndframe.column_names.includes(this_config['values'])) { - throw Error(`Column Error: ${this_config['values']} not found in columns. value name must be one of [ ${this.ndframe.column_names}]`); - } - - let data = [{ - values: this.ndframe[this_config['values']].values, - labels: this.ndframe[this_config['labels']].values, - type: 'pie', - name: this_config['labels'], - hoverinfo: 'label+percent+name', - automargin: true - }]; - Plotly.newPlot(this.div, data, this_config['layout'], this_config); - } else { - let cols_to_plot; - - if (utils.__key_in_object(this_config, "columns")) { - cols_to_plot = this.____check_if_cols_exist(this_config['columns']); - } else { - cols_to_plot = this.ndframe.column_names; - } - - if (utils.__key_in_object(this_config, 'row_pos')) { - if (this_config['row_pos'].length != cols_to_plot.length - 1) { - throw Error(`Lenght of row_pos array must be equal to number of columns. Got ${this_config['row_pos'].length}, expected ${cols_to_plot.length - 1}`); - } - } else { - let temp_arr = []; - - for (let i = 0; i < cols_to_plot.length - 1; i++) { - temp_arr.push(0); - } - - this_config['row_pos'] = temp_arr; - } - - if (utils.__key_in_object(this_config, 'col_pos')) { - if (this_config['col_pos'].length != cols_to_plot.length - 1) { - throw Error(`Lenght of col_pos array must be equal to number of columns. Got ${this_config['col_pos'].length}, expected ${cols_to_plot.length - 1}`); - } - } else { - let temp_arr = []; - - for (let i = 0; i < cols_to_plot.length - 1; i++) { - temp_arr.push(i); - } - - this_config['col_pos'] = temp_arr; - } - - let data = []; - cols_to_plot.forEach((c_name, i) => { - let trace = {}; - trace["values"] = this.ndframe[c_name].values; - trace['labels'] = this.ndframe[this_config['labels']].values; - trace['name'] = c_name; - trace['type'] = "pie"; - trace['domain'] = { - row: this_config['row_pos'][i], - column: this_config['col_pos'][i] - }; - trace["hoverinfo"] = 'label+percent+name'; - trace['textposition'] = "outside"; - trace['automargin'] = true; - data.push(trace); - }); - - if (!utils.__key_in_object(this_config, "grid")) { - let size = Number((this.ndframe.shape[1] / 2).toFixed()) + 1; - this_config['grid'] = { - rows: size, - columns: size - }; - } - - this_config['layout']['grid'] = this_config['grid']; - Plotly.newPlot(this.div, data, this_config['layout'], this_config); - } - } - - box(config = {}) { - let ret_params = this.__get_plot_params(config); - - let this_config = ret_params[0]; - let params = ret_params[1]; - - if (this.ndframe instanceof _series.Series) { - let trace = {}; - let y = this.ndframe.values; - params.forEach(param => { - if (!param == "layout") { - trace[param] = config[param]; - } - }); - trace["y"] = y; - trace['type'] = "box"; - Plotly.newPlot(this.div, [trace], this_config['layout'], this_config); - } else { - if (utils.__key_in_object(this_config, 'x') && utils.__key_in_object(this_config, 'y')) { - if (!this.ndframe.column_names.includes(this_config['x'])) { - throw Error(`Column Error: ${this_config['x']} not found in columns`); - } - - if (!this.ndframe.column_names.includes(this_config['y'])) { - throw Error(`Column Error: ${this_config['y']} not found in columns`); - } - - let x = this.ndframe[this_config['x']].values; - let y = this.ndframe[this_config['y']].values; - let trace = {}; - trace["x"] = x; - trace['y'] = y; - trace['type'] = 'box'; - let xaxis = {}; - let yaxis = {}; - xaxis['title'] = this_config['x']; - yaxis['title'] = this_config['y']; - this_config['layout']['xaxis'] = xaxis; - this_config['layout']['yaxis'] = yaxis; - Plotly.newPlot(this.div, [trace], this_config['layout'], this_config); - } else if (utils.__key_in_object(this_config, 'x') || utils.__key_in_object(this_config, 'y')) { - let trace = {}; - params.forEach(param => { - if (!param == "layout") { - trace[param] = config[param]; - } - }); - - if (utils.__key_in_object(this_config, 'x')) { - trace['x'] = this.ndframe[this_config['x']].values; - trace['y'] = this.ndframe.index; - trace['type'] = 'box'; - } else { - trace['x'] = this.ndframe.index; - trace['y'] = this_config['y']; - trace['type'] = 'box'; - } - - Plotly.newPlot(this.div, [trace], this_config['layout'], this_config); - } else { - let data = []; - let cols_to_plot; - - if (utils.__key_in_object(this_config, "columns")) { - cols_to_plot = this.____check_if_cols_exist(this_config['columns']); - } else { - cols_to_plot = this.ndframe.column_names; - } - - cols_to_plot.forEach(c_name => { - let trace = {}; - params.forEach(param => { - trace[param] = config[param]; - }); - trace["y"] = this.ndframe[c_name].values; - trace['name'] = c_name; - trace['type'] = 'box'; - data.push(trace); - }); - Plotly.newPlot(this.div, data, this_config['layout'], this_config); - } - } - } - - violin(config = {}) { - let ret_params = this.__get_plot_params(config); - - let this_config = ret_params[0]; - let params = ret_params[1]; - - if (this.ndframe instanceof _series.Series) { - let trace = {}; - let y = this.ndframe.values; - params.forEach(param => { - if (!param == "layout") { - trace[param] = config[param]; - } - }); - trace["y"] = y; - trace['type'] = "violin"; - Plotly.newPlot(this.div, [trace], this_config['layout'], this_config); - } else { - if (utils.__key_in_object(this_config, 'x') && utils.__key_in_object(this_config, 'y')) { - if (!this.ndframe.column_names.includes(this_config['x'])) { - throw Error(`Column Error: ${this_config['x']} not found in columns`); - } - - if (!this.ndframe.column_names.includes(this_config['y'])) { - throw Error(`Column Error: ${this_config['y']} not found in columns`); - } - - let x = this.ndframe[this_config['x']].values; - let y = this.ndframe[this_config['y']].values; - let trace = {}; - trace["x"] = x; - trace['y'] = y; - trace['type'] = 'violin'; - let xaxis = {}; - let yaxis = {}; - xaxis['title'] = this_config['x']; - yaxis['title'] = this_config['y']; - this_config['layout']['xaxis'] = xaxis; - this_config['layout']['yaxis'] = yaxis; - Plotly.newPlot(this.div, [trace], this_config['layout'], this_config); - } else if (utils.__key_in_object(this_config, 'x') || utils.__key_in_object(this_config, 'y')) { - let trace = {}; - params.forEach(param => { - if (!param == "layout") { - trace[param] = config[param]; - } - }); - - if (utils.__key_in_object(this_config, 'x')) { - trace['x'] = this.ndframe[this_config['x']].values; - trace['y'] = this.ndframe.index; - trace['type'] = 'violin'; - } else { - trace['x'] = this.ndframe.index; - trace['y'] = this_config['y']; - trace['type'] = 'violin'; - } - - Plotly.newPlot(this.div, [trace], this_config['layout'], this_config); - } else { - let data = []; - let cols_to_plot; - - if (utils.__key_in_object(this_config, "columns")) { - cols_to_plot = this.____check_if_cols_exist(this_config['columns']); - } else { - cols_to_plot = this.ndframe.column_names; - } - - cols_to_plot.forEach(c_name => { - let trace = {}; - params.forEach(param => { - trace[param] = config[param]; - }); - trace["y"] = this.ndframe[c_name].values; - trace['name'] = c_name; - trace['type'] = 'violin'; - data.push(trace); - }); - Plotly.newPlot(this.div, data, this_config['layout'], this_config); - } - } - } - - table(config = {}) { - let ret_params = this.__get_plot_params(config); - - let this_config = ret_params[0]; - let header = {}; - let cells = {}; - let cols_data = []; - let cols_2_show; - - if (utils.__key_in_object(this_config, 'columns')) { - this_config['columns'].forEach(cname => { - if (!this.ndframe.column_names.includes(cname)) { - throw Error(`Column Error: ${cname} not found in columns. Columns should be one of [ ${this.ndframe.column_names} ]`); - } - - let idx = this.ndframe.column_names.indexOf(cname); - cols_data.push(this.ndframe.col_data[idx]); - }); - cols_2_show = this_config['columns']; - } else { - cols_2_show = this.ndframe.column_names; - cols_data = this.ndframe.col_data; - } - - header['values'] = cols_2_show; - cells['values'] = cols_data; - - if (this_config['header_style']) { - Object.keys(this_config['header_style']).forEach(param => { - header[param] = this_config['header_style'][param]; - }); - } - - if (this_config['cell_style']) { - Object.keys(this_config['cell_style']).forEach(param => { - cells[param] = this_config['cell_style'][param]; - }); - } - - var data = [{ - type: 'table', - header: header, - cells: cells - }]; - Plotly.newPlot(this.div, data, this_config['layout'], this_config); - } - - __get_plot_params(config) { - let params = Object.keys(config); - let this_config = {}; - params.forEach(param => { - this_config[param] = config[param]; - }); - - if (!utils.__key_in_object(config, "layout")) { - this_config['layout'] = {}; - } - - return [this_config, params]; - } - - ____check_if_cols_exist(cols) { - cols.forEach(col => { - if (!this.ndframe.column_names.includes(col)) { - throw Error(`Column Error: ${col} not found in columns. Columns should be one of [ ${this.ndframe.column_names} ]`); - } - }); - return cols; - } - -} - -exports.Plot = Plot; \ No newline at end of file diff --git a/danfojs-node/dist/preprocessing/encodings.js b/danfojs-node/dist/preprocessing/encodings.js deleted file mode 100644 index ec79dd12..00000000 --- a/danfojs-node/dist/preprocessing/encodings.js +++ /dev/null @@ -1,113 +0,0 @@ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.OneHotEncoder = exports.LabelEncoder = void 0; - -var _series = require("../core/series"); - -var _utils = require("../core/utils"); - -var _frame = require("../core/frame"); - -const utils = new _utils.Utils(); - -class LabelEncoder { - fit(data) { - let in_data = null; - - if (Array.isArray(data)) { - in_data = data; - } else if (data instanceof _series.Series) { - in_data = data.values; - } else { - throw new Error("data must be an array or a Series"); - } - - let data_set = new Set(in_data); - this.label = Array.from(data_set); - let self = this; - let output_data = in_data.map(x => { - return self.label.indexOf(x); - }); - return new _series.Series(output_data); - } - - transform(data) { - let in_data = null; - - if (Array.isArray(data)) { - in_data = data; - } else if (data instanceof _series.Series) { - in_data = data.values; - } else { - throw new Error("data must be an array or a Series"); - } - - let self = this; - let output_data = in_data.map(x => { - return self.label.indexOf(x); - }); - return new _series.Series(output_data); - } - -} - -exports.LabelEncoder = LabelEncoder; - -class OneHotEncoder { - fit(data) { - let in_data = null; - - if (Array.isArray(data)) { - in_data = data; - } else if (data instanceof _series.Series) { - in_data = data.values; - } else { - throw new Error("data must be an array"); - } - - let data_set = new Set(in_data); - this.label = Array.from(data_set); - - let onehot_data = utils.__zeros(in_data.length, this.label.length); - - for (let i = 0; i < in_data.length; i++) { - let elem = in_data[i]; - let elem_index = this.label.indexOf(elem); - onehot_data[i][elem_index] = 1; - } - - return new _frame.DataFrame(onehot_data, { - columns: this.label - }); - } - - transform(data) { - let in_data = null; - - if (Array.isArray(data)) { - in_data = data; - } else if (data instanceof _series.Series) { - in_data = data.values; - } else { - throw new Error("data must be an array"); - } - - let onehot_data = utils.__zeros(in_data.length, this.label.length); - - for (let i = 0; i < in_data.length; i++) { - let elem = in_data[i]; - let elem_index = this.label.indexOf(elem); - onehot_data[i][elem_index] = 1; - } - - return new _frame.DataFrame(onehot_data, { - columns: this.label - }); - } - -} - -exports.OneHotEncoder = OneHotEncoder; \ No newline at end of file diff --git a/danfojs-node/dist/preprocessing/scalers.js b/danfojs-node/dist/preprocessing/scalers.js deleted file mode 100644 index 157b0163..00000000 --- a/danfojs-node/dist/preprocessing/scalers.js +++ /dev/null @@ -1,142 +0,0 @@ -"use strict"; - -var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.StandardScaler = exports.MinMaxScaler = void 0; - -var tf = _interopRequireWildcard(require("@tensorflow/tfjs-node")); - -var _series = require("../core/series"); - -var _frame = require("../core/frame"); - -var _utils = require("../core/utils"); - -const utils = new _utils.Utils(); - -class MinMaxScaler { - fit(data) { - let tensor_data = null; - - if (Array.isArray(data)) { - tensor_data = tf.tensor(data); - } else if (data instanceof _frame.DataFrame || data instanceof _series.Series) { - if (data.dtypes.includes("string")) { - throw Error("Dtype Error: Cannot perform operation on string dtypes"); - } - - tensor_data = tf.tensor(data.values); - } else { - throw new Error("data must either be an Array, DataFrame or Series"); - } - - this.max = tensor_data.max(0); - this.min = tensor_data.min(0); - let output_data = tensor_data.sub(this.min).div(this.max.sub(this.min)).arraySync(); - - if (data instanceof _series.Series || Array.isArray(data)) { - return new _series.Series(output_data); - } else { - return new _frame.DataFrame(output_data); - } - } - - transform(data) { - if (data instanceof _series.Series) { - if (data.dtypes.includes("string")) { - throw Error("Dtype Error: Cannot perform operation on string dtypes"); - } - - let tensor_data = tf.tensor(data.values); - let output_data = tensor_data.sub(this.min).div(this.max.sub(this.min)).arraySync(); - return new _series.Series(output_data); - } else if (Array.isArray(data)) { - let tensor_data = tf.tensor(data); - let output_data = tensor_data.sub(this.min).div(this.max.sub(this.min)).arraySync(); - - if (utils.__is_1D_array(data)) { - return new _series.Series(output_data); - } else { - return new _frame.DataFrame(output_data); - } - } else if (data instanceof _frame.DataFrame) { - if (data.dtypes.includes("string")) { - throw Error("Dtype Error: Cannot perform operation on string dtypes"); - } - - let tensor_data = tf.tensor(data.values); - let output_data = tensor_data.sub(this.min).div(this.max.sub(this.min)).arraySync(); - return new _frame.DataFrame(output_data); - } else { - throw Error("Value Error: Data type not supoorted"); - } - } - -} - -exports.MinMaxScaler = MinMaxScaler; - -class StandardScaler { - fit(data) { - let tensor_data = null; - - if (Array.isArray(data)) { - tensor_data = tf.tensor(data); - } else if (data instanceof _frame.DataFrame || data instanceof _series.Series) { - if (data.dtypes.includes("string")) { - throw Error("Dtype Error: Cannot perform operation on string dtypes"); - } - - tensor_data = tf.tensor(data.values); - } else { - throw new Error("data must either be an Array, DataFrame or Series"); - } - - this.std = tf.moments(tensor_data, 0).variance.sqrt(); - this.mean = tensor_data.mean(0); - let output_data = tensor_data.sub(this.mean).div(this.std).arraySync(); - - if (data instanceof _series.Series || Array.isArray(data)) { - return new _series.Series(data = output_data); - } else { - return new _frame.DataFrame(data = output_data); - } - } - - transform(data) { - if (data instanceof _series.Series) { - if (data.dtypes.includes("string")) { - throw Error("Dtype Error: Cannot perform operation on string dtypes"); - } - - let tensor_data = tf.tensor(data.values); - let output_data = tensor_data.sub(this.mean).div(this.std).arraySync(); - return new _series.Series(output_data); - } else if (Array.isArray(data)) { - let tensor_data = tf.tensor(data); - let output_data = tensor_data.sub(this.mean).div(this.std).arraySync(); - - if (utils.__is_1D_array(data)) { - return new _series.Series(output_data); - } else { - return new _frame.DataFrame(output_data); - } - } else if (data instanceof _frame.DataFrame) { - if (data.dtypes.includes("string")) { - throw Error("Dtype Error: Cannot perform operation on string dtypes"); - } - - let tensor_data = tf.tensor(data.values); - let output_data = tensor_data.sub(this.mean).div(this.std).arraySync(); - return new _frame.DataFrame(output_data); - } else { - throw Error("Value Error: Data type not supoorted"); - } - } - -} - -exports.StandardScaler = StandardScaler; \ No newline at end of file diff --git a/danfojs-node/src/config/config.js b/danfojs-node/src/config/config.js deleted file mode 100644 index 268663d2..00000000 --- a/danfojs-node/src/config/config.js +++ /dev/null @@ -1,54 +0,0 @@ - -/** - * Package wide configuration class - */ -export class Configs { - constructor() { - this.table_width = 17; //set the width of each column printed in console - this.table_truncate = 16; //set the max number of string before text is truncated in printing - this.dtype_test_lim = 10; - this.table_max_row = 21; - this.table_max_col_in_console = 7; - } - - set_width(val) { - this.table_width = val; - } - - get get_width() { - return this.table_width; - } - - set_max_col_in_console(val) { - this.table_max_col_in_console = val; - } - - get get_max_col_in_console() { - return this.table_max_col_in_console; - } - - set_row_num(val) { - this.table_max_row = val; - } - - get get_max_row() { - return this.table_max_row; - } - - - get get_truncate() { - return this.table_truncate; - } - - set_truncate(val) { - this.table_truncate = val; - } - - get get_dtype_test_lim() { - return this.dtype_test_lim; - } - - set_dtype_test_lim(val) { - this.dtype_test_lim = val; - } -} diff --git a/danfojs-node/src/core/concat.js b/danfojs-node/src/core/concat.js deleted file mode 100644 index aa9bf9a2..00000000 --- a/danfojs-node/src/core/concat.js +++ /dev/null @@ -1,221 +0,0 @@ -import { DataFrame } from './frame'; -import { Utils } from "./utils"; -import { Series } from './series'; - -const utils = new Utils(); - - -export class Concat { - constructor(kwargs) { - - - // check if keys exist in kwargs - utils.__in_object(kwargs, "df_list", "df_list not found: specify the list of dataframe"); - utils.__in_object(kwargs, "axis", "axis not found: specify the axis"); - - let df_list = null; //set the df_list to null - let axis = null; // set axis to null - let indexes = null; - - //check if df_list is an array - if (Array.isArray(kwargs["df_list"])) { - - df_list = kwargs["df_list"]; - } else { - throw new Error("df_list must be an Array of dataFrames/Series"); - } - - //check if axis is int and is either 0 or 1 - if (typeof kwargs["axis"] === "number") { - - if (kwargs["axis"] == 0 || kwargs["axis"] == 1) { - - axis = kwargs["axis"]; - } else { - axis = 1; - // throw new Error("Invalid axis: axis must be 0 or 1") - } - - } else { - throw new Error("axis must be a number"); - } - - - let df_object = Object.assign({}, df_list); // convert the array to object - - if (axis == 1) { - - let columns = []; - let duplicate_col_count = {}; - let max_length = 0; - let a_key = Object.keys(df_object)[0]; - indexes = df_object[a_key].index; - for (let key in df_object) { - - let column = df_object[key].columns; - let length = df_object[key].values.length; - - if (length > max_length) { - max_length = length; - } - - for (let index in column) { - - let col_name = column[index]; - if (col_name in duplicate_col_count) { - - let count = duplicate_col_count[col_name]; - let name = `${col_name}_${count + 1}`; - - columns.push(name); - - duplicate_col_count[col_name] = count + 1; - } else { - - columns.push(col_name); - duplicate_col_count[col_name] = 1; - } - } - - - } - - let data = new Array(max_length); - - for (let key in df_list) { - - let values = df_list[key].values; - - for (let index = 0; index < values.length; index++) { - - let val = values[index]; - if (typeof data[index] === "undefined") { - - if (Array.isArray(val)){ - data[index] = val; - } else { - data[index] = [ val ]; - } - - } else { - if (Array.isArray(val)){ - data[index].push(...val); - } else { - data[index].push(val); - } - - } - } - - if (values.length < max_length) { - let column_length = df_list[key].columns.length; - let null_array = Array(column_length); - - for (let col = 0; col < column_length; col++) { - null_array[col] = NaN; - } - - if (typeof data[max_length - 1] === "undefined") { - data[max_length - 1] = null_array; - } else { - data[max_length - 1].push(...null_array); - } - } - } - - let df = new DataFrame(data, { columns: columns, index: indexes }); //convert to dataframe - return df; - } else { - //concatenate base on axis 0 - let columns = []; - let row_indexes = []; - let col_i = 0; - for (let key in df_list) { - let column = df_list[key].columns; - columns.push(...column); - indexes = df_list[key].index; - let r_index = indexes.map((val) => { - return `${val}_row${col_i}`; - }); - row_indexes.push(...r_index); - col_i += 1; - } - - let column_set = new Set(columns); - - columns = Array.from(column_set); - - let data = []; - - for (let key in df_list) { - - let value = df_list[key].values; - - // let col_length = value[0].length - - let df_columns = df_list[key].columns; - - let not_exist = []; - for (let col_index in columns) { - let col_name = columns[col_index]; - - let is_index = df_columns.indexOf(col_name); - - if (is_index == -1) { - not_exist.push(col_name); - } - } - if (not_exist.length > 0) { - for (let i = 0; i < value.length; i++) { - let row_value = value[i]; - - let new_arr = Array(columns.length); - for (let j = 0; j < columns.length; j++) { - - let col_name = columns[j]; - if (not_exist.includes(col_name)) { - - new_arr[j] = NaN; - } else { - let index = df_columns.indexOf(col_name); - if (Array.isArray(row_value)){ - new_arr[j] = row_value[index]; - } else { - new_arr[j] = row_value; - } - - } - - } - data.push(new_arr); - } - } else { - data.push(...value); - } - - } - - if (Array.isArray(data[0])){ - let df = new DataFrame(data, { columns: columns, index: row_indexes }); - return df; - } else { - let sf = new Series(data, { index: row_indexes }); - return sf; - } - - - } - - } -} - - -/** -* Concatenate pandas objects along a particular axis with optional set logic along the other axes. -* @param {kwargs} {df_list: List of DataFrame to concatenate together axis: 0 for row axis and 1 for index axis -* @returns {DataFrame} -*/ -export const concat = (kwargs) => { - let concat_sf = new Concat(kwargs); - return concat_sf; -}; diff --git a/danfojs-node/src/core/date_range.js b/danfojs-node/src/core/date_range.js deleted file mode 100644 index 4676c97d..00000000 --- a/danfojs-node/src/core/date_range.js +++ /dev/null @@ -1,288 +0,0 @@ -import { Utils } from "./utils"; - -const utils = new Utils; - -/** - * Generate date range between a specified set of date - * @param {kwargs} kwargs { - * start : string - * end : string - * period: int - * freq : string - * } - * @returns Array - */ -export class date_range { - constructor(kwargs){ - - this.offset = null; - - if (utils.__key_in_object(kwargs, "start")){ - this.start = kwargs["start"]; - } else { - this.start = null; - } - - if (utils.__key_in_object(kwargs, "end")){ - this.end = kwargs["end"]; - } else { - this.end = null; - } - - if (utils.__key_in_object(kwargs, "period")){ - this.period = kwargs["period"]; - } else { - this.period = null; - } - - if (utils.__key_in_object(kwargs, "freq")){ - this.freq = kwargs["freq"]; - } else { - this.freq = "D"; - } - - this.freq_list = [ "M", "D", "s", "H", "m", "Y" ]; - - if (this.freq.length == 1){ - if (!this.freq_list.includes(this.freq)){ - throw new Error(`invalid freq ${this.freq}`); - } - } else { - let freq_split = this.freq.split(""); - this.offset = parseInt(freq_split[0]); - this.freq = freq_split[1]; - if (!this.freq_list.includes(this.freq)){ - throw new Error(`invalid freq ${this.freq}`); - } - } - - let rslt = this.range(this.start, this.end, this.period, this.offset); - return rslt; - - } - - range(start, end, period, offset = null){ - - let start_date = null; - let end_date = null; - let start_range = null; - let end_range = null; - if (start && end){ - start_date = new Date(start); - start_range = this.freq_type(start_date, this.freq); - end_date = new Date(end); - end_range = this.freq_type(end_date, this.freq); - - //check if the end year is greater than start year - let start_year = start_date.getFullYear(); - let end_year = end_date.getFullYear(); - if ((start_year < end_year)){ - // end_range = start_range + end_range - if (this.freq == "M"){ - end_range = this.month_end(start_date, end_date); - } else if (this.freq == "D"){ - end_range = this.day_end(start_date, end_date) - start_range; - - } - } - - let range_array = utils.__range(start_range, end_range); - - if (offset){ - range_array = this.offset_count(range_array, offset); - } - - if (this.freq == "M"){ - range_array = this.month_range(range_array); - } - - let date_range = range_array.map((x) => { - return this.set_dateProps(start_date, this.freq, x); - }); - date_range[date_range.length - 1] = end_date; - - let date_string = this.toLocalString(date_range); - - return date_string; - } else if (start && !(end)){ - start_date = new Date(start); - start_range = this.freq_type(start_date, this.freq); - end_range = offset ? ((period * offset) - 1) : period - 1; - - if (start_range > end_range){ - end_range = end_range + start_range; - } - let range_array = utils.__range(start_range, end_range); - - - if (offset){ - range_array = this.offset_count(range_array, offset); - } - - let date_range = range_array.map((x) => { - return this.set_dateProps(start_date, this.freq, x); - }); - - let date_string = this.toLocalString(date_range); - return date_string; - - } else if (end && !(start)){ - end_date = new Date(end); - end_range = this.freq_type(end_date, this.freq); - start_range = (end_range - period) + 1; - - let range_array = utils.__range(start_range, end_range); - - if (offset){ - range_array = this.offset_count(range_array, offset); - } - - let date_range = range_array.map((x) => { - return this.set_dateProps(end_date, this.freq, x); - }); - - let date_string = this.toLocalString(date_range); - return date_string; - } - } - - freq_type(date, ftype){ - - let rslt = null; - switch (ftype){ - - case "M": - rslt = date.getMonth(); - break; - case "Y": - rslt = date.getFullYear(); - break; - case "s": - rslt = date.getSeconds(); - break; - case "D": - rslt = date.getDate(); - break; - case "H": - rslt = date.getHours(); - break; - case "m": - rslt = date.getMinutes(); - break; - } - return rslt; - } - - offset_count(d_array, offset){ - - let r_array = []; - - for (let i = 0; i < d_array.length; i += offset){ - r_array.push(d_array[i]); - } - return r_array; - } - - set_dateProps(date, ftype, val){ - - let new_date = new Date(date.valueOf()); - switch (ftype){ - - case "M": - if (val.length == 2){ - - new_date.setYear(new_date.getFullYear() + val[0]); - new_date.setMonth(parseInt(val[1])); - } else { - new_date.setMonth(val); - } - - break; - case "Y": - new_date.setYear(val); - break; - case "s": - new_date.setSeconds(val); - break; - case "D": - new_date.setDate(val); - break; - case "H": - new_date.setHours(val); - break; - case "m": - new_date.setMinutes(val); - break; - } - return new_date; - } - - toLocalString(d_array){ - - let r_array = d_array.map((x) => { - - return x.toLocaleString(); - }); - - return r_array; - } - - month_end(start_date, end_date){ - - let end_month = end_date.getMonth(); - - let diff_year = end_date.getFullYear() - start_date.getFullYear(); - - let end_range = (12 * diff_year) + end_month; - - return end_range; - } - - month_range(range){ - - let minus = null; - let y_val = 0; - let d_range = range.map((x) => { - - if (x > 11){ - if (x % 12 == 0){ - minus = x; - y_val = x / 12; - return [ y_val, (x - minus) ]; - } else { - return [ y_val, (x - minus) ]; - } - - } - return [ y_val, x ]; - }); - - return d_range; - } - - day_end(start_date, end_date){ - - let month_end = this.month_end(start_date, end_date); - let range = utils.__range(start_date.getMonth(), month_end); - let m_range = this.month_range(range); - - // let s_date = new Date(start_date.getFullYear(),start_date.getMonth(),0) - let sum = 0; - for (let i = 0; i < m_range.length; i++){ - - let val = m_range[i]; - let d_date = null; - if (i === m_range.length - 1) { - d_date = new Date(start_date.getFullYear() + val[0], val[1], end_date.getDate()).getDate(); - } else { - d_date = new Date(start_date.getFullYear() + val[0], val[1], 0).getDate(); - - } - - sum += d_date; - - } - return sum; - - } -} diff --git a/danfojs-node/src/core/frame.js b/danfojs-node/src/core/frame.js deleted file mode 100644 index a5ff8820..00000000 --- a/danfojs-node/src/core/frame.js +++ /dev/null @@ -1,2175 +0,0 @@ -/** -* Copyright 2020, JsData. -* All rights reserved. -* -* This source code is licensed under the MIT license found in the -* LICENSE file in the root directory of this source tree. - -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -import * as tf from '@tensorflow/tfjs-node'; -import Ndframe from "./generic"; -import { Series } from "./series"; -import { Utils } from "./utils"; -import { GroupBy } from "./groupby"; -import { indexLoc } from "./indexing"; -import { concat } from "./concat.js"; - -const utils = new Utils(); -import { std, variance } from "mathjs"; - -/** - * A 2D frame object that stores data in structured tabular format - * @param {data} data, JSON, Array, 2D Tensor - * @param {kwargs} Object {columns: Array of column names, defaults to ordered numbers when not specified - * dtypes: strings of data types, automatically inferred when not specified - * index: row index for subseting array, defaults to ordered numbers when not specified} - * - * @returns DataFrame - */ -export class DataFrame extends Ndframe { - constructor(data, kwargs) { - super(data, kwargs); - this._set_column_property(); //set column property on DataFrame Class for easy accessing using the format df['colname'] - } - - _set_column_property() { - let col_vals = this.col_data; - let col_names = this.column_names; - - col_vals.forEach((col, i) => { - this[col_names[i]] = null; - Object.defineProperty(this, col_names[i], { - get() { - return new Series(this.col_data[i], { - columns: col_names[i], - index: this.index - }); - }, - set(value) { - this.addColumn({ column: col_names[i], value: value }); - } - }); - }); - } - /** - * Write a CSV file of the DataFrame contents - * @param {string} csvFilePath Path to save CSV when in Node.js form - * @returns {Promise} CSV representation of Object data - * - */ - async to_csv(csvFilePath = "") { - const csvContent = await super.to_csv(); - // behave differently for Node vs Web - if (typeof window === "undefined") { - // Write CSV on Node.js - // eslint-disable-next-line no-undef - const fs = require("fs"); - fs.writeFileSync( - csvFilePath, - csvContent, - (err) => err && console.error(err) - ); - } else { - // Download CSV on Web - const webCSV = "data:text/csv;charset=utf-8," + csvContent; - window.open(encodeURI(webCSV)); - } - return csvContent; - } - - /** - * Drop a list of rows or columns base on the specified axis - * @param {Object} kwargs Configuration object - * {columns: [Array(Columns| Index)] array of column names to drop - * axis: row=0, columns=1 - * inplace: specify whether to drop the row/column with/without creating a new DataFrame} - * @returns null | DataFrame - * - */ - drop(kwargs = {}) { - let params_needed = ["columns", "index", "inplace", "axis"]; - utils._throw_wrong_params_error(kwargs, params_needed); - - kwargs["inplace"] = kwargs["inplace"] || false; - - if (!("axis" in kwargs)) { - kwargs["axis"] = 1; - } - - let to_drop = null; - if ("index" in kwargs && kwargs["axis"] == 0) { - to_drop = kwargs["index"]; - } else { - to_drop = kwargs["columns"]; - } - - if (kwargs["axis"] == 1) { - if (!("columns" in kwargs)) { - throw Error( - "No column found. Axis of 1 must be accompanied by an array of column(s) names" - ); - } - let self = this; - let new_col_data = {}; - let new_dtype = []; - - const index = to_drop.map((x) => { - let col_idx = self.columns.indexOf(x); - if (col_idx == -1) { - throw new Error(`column "${x}" does not exist`); - } - return col_idx; - }); - - this.col_data.forEach((col, idx) => { - if (!index.includes(idx)) { - new_col_data[self.column_names[idx]] = col; - new_dtype.push(self.dtypes[idx]); - } - }); - - if (!kwargs["inplace"]) { - let old_cols = self.columns; - let new_columns = Object.keys(new_col_data); - let df = new DataFrame(new_col_data, { - index: self.index, - dtypes: new_dtype - }); - df.__set_col_property(df, df.col_data, new_columns, old_cols); - return df; - } else { - let old_cols = self.columns; - let new_columns = Object.keys(new_col_data); - this.__update_frame_in_place(null, null, new_col_data, null, new_dtype); - this.__set_col_property(self, self.col_data, new_columns, old_cols); - } - } else { - if (!utils.__key_in_object(kwargs, "index")) { - throw Error( - "No index label found. Axis of 0 must be accompanied by an array of index labels" - ); - } - to_drop.forEach((x) => { - if (!this.index.includes(x)) - throw new Error(`${x} does not exist in index`); - }); - const values = this.values; - let data_idx = []; - let new_data, new_index; - if (typeof to_drop[0] == "string") { - //get index of strings labels in rows - this.index.forEach((idx, i) => { - if (to_drop.includes(idx)) { - data_idx.push(i); - } - }); - new_data = utils.__remove_arr(values, data_idx); - new_index = utils.__remove_arr(this.index, data_idx); - } else { - new_data = utils.__remove_arr(values, to_drop); - new_index = utils.__remove_arr(this.index, to_drop); - } - - if (!kwargs["inplace"]) { - return new DataFrame(new_data, { - columns: this.columns, - index: new_index - }); - } else { - this.row_data_tensor = tf.tensor(new_data); - this.data = new_data; - this.__set_index(new_index); - } - } - } - - /** - * Purely label based indexing. Can accept string label names for both rows and columns - * @param {kwargs} kwargs object {rows: Array of index, columns: Array of column name(s)} - * @return DataFrame data stucture - */ - loc(kwargs = {}) { - let params_needed = ["columns", "rows"]; - utils._throw_wrong_params_error(kwargs, params_needed); - - kwargs["type"] = "loc"; - let [new_data, columns, rows] = indexLoc(this, kwargs); - let df_columns = { columns: columns }; - let df = new DataFrame(new_data, df_columns); - df.__set_index(rows); - return df; - } - - /** - * Access a dataframe element using row and column index - * @param {*} kwargs object {rows: Array of index, columns: Array of column index} - * @return DataFrame data stucture - */ - iloc(kwargs = {}) { - let params_needed = ["columns", "rows"]; - utils._throw_wrong_params_error(kwargs, params_needed); - - kwargs["type"] = "iloc"; - - let [new_data, columns, rows] = indexLoc(this, kwargs); - let df_columns = { columns: columns }; - let df = new DataFrame(new_data, df_columns); - df.__set_index(rows); - return df; - } - - /** - * Prints the first n values in a dataframe - * @param {rows} rows --> int - * @returns DataFrame - */ - head(rows = 5) { - if (rows > this.values.length || rows < 1) { - //return all values - return this; - } else { - //Creates a new dataframe with first [rows] - let data = this.values.slice(0, rows); - let idx = this.index.slice(0, rows); - let config = { columns: this.column_names, index: idx }; - let df = new DataFrame(data, config); - return df; - } - } - - /** - * Prints the last n values in a dataframe - * @param {rows} rows --> int - * @returns DataFrame - */ - tail(rows = 5) { - let row_len = this.values.length; - if (rows > row_len || rows < 1) { - //return all values - return this; - } else { - //Creates a new dataframe with last [rows] - let data = this.values.slice(row_len - rows); - let indx = this.index.slice(row_len - rows); - let config = { columns: this.column_names, index: indx }; - let df = new DataFrame(data, config); - return df; - } - } - - /** - * Gets [num] number of random rows in a dataframe - * @param {num} rows --> The number of rows to return - * @param {seed} seed --> (Optional) An integer specifying the random seed that will be used to create the distribution. - * @returns {Promise} resolves to a DataFrame object - */ - async sample(num = -1, seed = 1) { - if (num > this.shape[0]) { - throw new Error("Sample size n cannot be bigger than size of dataset"); - } - if (num < -1 || num == 0) { - throw new Error("Sample size cannot be less than -1 or 0"); - } - num = num === -1 ? this.shape[0] : num; - const shuffled_index = await tf.data.array(this.index).shuffle(num, seed).take(num).toArray(); - const df = this.iloc({ rows: shuffled_index }); - return df; - } - - /** - * Return Addition of DataFrame and other, element-wise (binary operator add). - * @param {other} DataFrame, Series, Array or Number to add - * @returns {DataFrame} - */ - add(other, axis) { - if (this.__frame_is_compactible_for_operation) { - //check if all types a numeric - let tensors = this.__get_ops_tensors([this, other], axis); - let sum_vals = tensors[0].add(tensors[1]); - let col_names = this.columns; - return this.__get_df_from_tensor(sum_vals, col_names); - } else { - throw Error("TypeError: Dtypes of columns must be Float of Int"); - } - } - - /** - * Return subtraction of DataFrame and other, element-wise (binary operator add). - * @param {other} DataFrame, Series, Array or Number to add - * @returns {DataFrame} - */ - sub(other, axis) { - if (this.__frame_is_compactible_for_operation) { - //check if all types are numeric - let tensors = this.__get_ops_tensors([this, other], axis); - let result = tensors[0].sub(tensors[1]); - let col_names = this.columns; - return this.__get_df_from_tensor(result, col_names); - } else { - throw Error("TypeError: Dtypes of columns must be Float of Int"); - } - } - - /** - * Return subtraction of DataFrame and other, element-wise (binary operator add). - * @param {other} DataFrame, Series, Array or Number to add - * @returns {DataFrame} - */ - mul(other, axis) { - if (this.__frame_is_compactible_for_operation) { - //check if all types are numeric - let tensors = this.__get_ops_tensors([this, other], axis); - let result = tensors[0].mul(tensors[1]); - let col_names = this.columns; - return this.__get_df_from_tensor(result, col_names); - } else { - throw Error("TypeError: Dtypes of columns must be Float of Int"); - } - } - - /** - * Return division of DataFrame and other, element-wise (binary operator add). - * @param {other} DataFrame, Series, Array or Number to add - * @returns {DataFrame} - */ - div(other, axis) { - if (this.__frame_is_compactible_for_operation) { - //check if all types are numeric - let tensors = this.__get_ops_tensors([this, other], axis); - let result = tensors[0].div(tensors[1]); - let col_names = this.columns; - return this.__get_df_from_tensor(result, col_names); - } else { - throw Error("TypeError: Dtypes of columns must be Float of Int"); - } - } - - /** - * Return division of DataFrame and other, element-wise (binary operator add). - * @param {other} DataFrame, Series, Array or Number to add - * @returns {DataFrame} - */ - pow(other, axis) { - if (this.__frame_is_compactible_for_operation) { - //check if all types are numeric - let tensors = this.__get_ops_tensors([this, other], axis); - let result = tensors[0].pow(tensors[1]); - let col_names = this.columns; - return this.__get_df_from_tensor(result, col_names); - } else { - throw Error("TypeError: Dtypes of columns must be Float of Int"); - } - } - - /** - * Return division of DataFrame and other, element-wise (binary operator add). - * @param {other} DataFrame, Series, Array or Number to add - * @returns {DataFrame} - */ - mod(other, axis) { - if (this.__frame_is_compactible_for_operation) { - //check if all types are numeric - let tensors = this.__get_ops_tensors([this, other], axis); - let result = tensors[0].mod(tensors[1]); - let col_names = this.columns; - return this.__get_df_from_tensor(result, col_names); - } else { - throw Error("TypeError: Dtypes of columns must be Float of Int"); - } - } - - /** - * Return mean of DataFrame across specified axis. - * @param {axis} Number {0: row, 1 : column} Axis for the function to be applied on - * @returns {Series} - */ - mean(axis = 1) { - if (this.__frame_is_compactible_for_operation()) { - let values; - let val_mean = []; - if (axis == 1) { - values = this.col_data; - } else { - values = this.values; - } - - values.map((arr) => { - let temp = utils._remove_nans(arr); - let temp_mean = tf.tensor(temp).mean().arraySync(); - val_mean.push(Number(temp_mean.toFixed(5))); - }); - - let new_index; - if (axis == 1) { - new_index = this.column_names; - } else { - new_index = this.index; - } - let sf = new Series(val_mean, { columns: "sum", index: new_index }); - return sf; - } else { - throw Error("Dtype Error: Operation can not be performed on string type"); - } - - } - - /** - * Return median of DataFrame across specified axis. - * @param {axis} Number {0: row, 1 : column} Axis for the function to be applied on - * @returns {Series} - */ - median(axis = 1) { - if (this.__frame_is_compactible_for_operation) { - //check if all types are numeric - let tensor_vals, idx; - if (axis == 1) { - tensor_vals = this.col_data_tensor.arraySync(); - idx = this.column_names; - } else { - tensor_vals = this.row_data_tensor.arraySync(); - idx = this.index; - } - let median = utils.__median(tensor_vals, false); - let sf = new Series(median, { index: idx }); - return sf; - } else { - throw Error("TypeError: Dtypes of columns must be Float of Int"); - } - } - - /** - * Return minimum element in a DataFrame across specified axis. - * @param {axis} Number {0: row, 1 : column} Axis for the function to be applied on - * @returns {Series} - */ - min(axis = 1) { - if (this.__frame_is_compactible_for_operation) { - //check if all types are numeric - let operands = this.__get_tensor_and_idx(this, axis); - let tensor_vals = operands[0]; - let idx = operands[1]; - let result = tensor_vals.min(operands[2]); - let sf = new Series(result.arraySync(), { index: idx }); - return sf; - } else { - throw Error("TypeError: Dtypes of columns must be Float of Int"); - } - } - - /** - * Return maximum element of DataFrame across specified axis. - * @param {axis} Number {0: row, 1 : column} Axis for the function to be applied on - * @returns {Series} - */ - max(axis = 1) { - if (this.__frame_is_compactible_for_operation) { - //check if all types are numeric - let operands = this.__get_tensor_and_idx(this, axis); - let tensor_vals = operands[0]; - let idx = operands[1]; - let result = tensor_vals.max(operands[2]); - let sf = new Series(result.arraySync(), { index: idx }); - return sf; - } else { - throw Error("TypeError: Dtypes of columns must be Float of Int"); - } - } - - /** - * Return standard deviation of DataFrame across specified axis. - * @param {axis} Number {0: row, 1 : column} Axis for the function to be applied on - * @returns {Series} - */ - std(axis = 1) { - if (this.__frame_is_compactible_for_operation) { - //check if all types are numeric - let tensor_vals = this.col_data_tensor.arraySync(); - let idx; - if (axis == 1) { - idx = this.column_names; - } else { - idx = this.index; - } - let median = std(tensor_vals, axis); - let sf = new Series(median, { index: idx }); - return sf; - } else { - throw Error("TypeError: Dtypes of columns must be Float of Int"); - } - } - - /** - * Return variance of DataFrame across specified axis. - * @param {axis} Number {0: row, 1 : column} Axis for the function to be applied on - * @returns {Series} - */ - var(axis = 1) { - if (this.__frame_is_compactible_for_operation) { - //check if all types are numeric - let tensor_vals = this.col_data_tensor.arraySync(); - let idx; - if (axis == 1) { - idx = this.column_names; - } else { - idx = this.index; - } - let median = variance(tensor_vals, axis); - let sf = new Series(median, { index: idx }); - return sf; - } else { - throw Error("TypeError: Dtypes of columns must be Float of Int"); - } - } - - /** - * Return number of non-null elements in a Series - * @returns {Series}, Count of non-null values - */ - count(axis = 1) { - if (this.__frame_is_compactible_for_operation) { - //check if all types are numeric - let tensor_vals, idx; - if (axis == 1) { - tensor_vals = this.col_data_tensor.arraySync(); - idx = this.column_names; - } else { - tensor_vals = this.row_data_tensor.arraySync(); - idx = this.index; - } - let counts = utils.__count_nan(tensor_vals, true, false); - let sf = new Series(counts, { index: idx }); - return sf; - } else { - throw Error("TypeError: Dtypes of columns must be Float of Int"); - } - } - - /** - * Rounds values in DataFrame to specified number of dp - * @returns {DataFrame}, New DataFrame with rounded values - */ - round(dp = 1) { - if (this.__frame_is_compactible_for_operation) { - //check if all types are numeric - let values = this.values; - let idx = this.index; - - let new_vals = utils.__round(values, dp, false); - let options = { columns: this.column_names, index: idx }; - let df = new DataFrame(new_vals, options); - return df; - } else { - throw Error("TypeError: Dtypes of columns must be Float of Int"); - } - } - - /** - * Perform Cummulative operations - * @param {axis} axis [int] {0 or 1} - * @param {ops} ops {String} name of operation - * @return {DataFrame} - */ - __cum_ops(axis = 0, ops) { - if (!(axis == 0) && !(axis == 1)) { - throw new Error("axis must be between 0 or 1"); - } - - if (this.__frame_is_compactible_for_operation) { - let data = []; - let df_data = null; - - if (axis == 0) { - df_data = this.col_data; - } else { - df_data = this.values; - } - - for (let i = 0; i < df_data.length; i++) { - let value = df_data[i]; - let temp_val = value[0]; - let temp_data = [temp_val]; - for (let j = 1; j < value.length; j++) { - let curr_val = value[j]; - switch (ops) { - case "max": - if (curr_val > temp_val) { - temp_val = curr_val; - temp_data.push(curr_val); - } else { - temp_data.push(temp_val); - } - break; - case "min": - if (curr_val < temp_val) { - temp_val = curr_val; - temp_data.push(curr_val); - } else { - temp_data.push(temp_val); - } - break; - case "sum": - temp_val = temp_val + curr_val; - temp_data.push(temp_val); - - break; - case "prod": - temp_val = temp_val * curr_val; - temp_data.push(temp_val); - - break; - } - } - data.push(temp_data); - } - - if (axis == 0) { - data = utils.__get_col_values(data); - } - - return new DataFrame(data, { columns: this.columns }); - } else { - throw Error("TypeError: Dtypes of columns must be Float of Int"); - } - } - /** - * calculate the cummulative sum along axis - * @param {kwargs} {axis: [int]} - * @returns {DataFrame} - */ - cumsum(kwargs = {}) { - let axis; - if (!utils.__key_in_object(kwargs, "axis")) { - axis = 0; - } else { - axis = kwargs["axis"]; - } - // let axis = kwargs["axis"] || 0 - let data = this.__cum_ops(axis, "sum"); - return data; - } - - /** - * calculate the cummulative min - * @param {kwargs} {axis: [int]} - * @returns {DataFrame} - */ - cummin(kwargs = {}) { - let axis; - if (!utils.__key_in_object(kwargs, "axis")) { - axis = 0; - } else { - axis = kwargs["axis"]; - } - let data = this.__cum_ops(axis, "min"); - return data; - } - - /** - * calculate the cummulative max - * @param {kwargs} {axis: [int]} - * @returns {DataFrame} - */ - cummax(kwargs = {}) { - let axis; - if (!utils.__key_in_object(kwargs, "axis")) { - axis = 0; - } else { - axis = kwargs["axis"]; - } - let data = this.__cum_ops(axis, "max"); - return data; - } - - /** - * calculate the cummulative prod - * @param {kwargs} {axis: [int]} - * @returns {DataFrame} - */ - cumprod(kwargs = {}) { - let axis; - if (!utils.__key_in_object(kwargs, "axis")) { - axis = 0; - } else { - axis = kwargs["axis"]; - } - let data = this.__cum_ops(axis, "prod"); - return data; - } - - /** - * Makes a new copy of a DataFrame - * @returns {DataFrame} - */ - copy() { - let df = new DataFrame([...this.values], { - columns: [...this.column_names], - index: this.index, - dtypes: this.dtypes - }); - return df; - } - - /** - * Generate a new index for the DataFrame. - * This is useful when the index is meaningless and needs to be reset to the default before another operation. - * @param {inplace} boolean: Modify the original object or return a new one. Default to false - */ - reset_index(inplace = false) { - if (inplace) { - this.__reset_index(); - } else { - let df = this.copy(); - df.__reset_index(); - return df; - } - } - - /** - * Set the DataFrame index (row labels) using an array of the same length. - * @param {kwargs} {index: Array of new index values} - */ - set_index(kwargs = {}) { - let params_needed = ["key", "drop", "inplace"]; - utils._throw_wrong_params_error(kwargs, params_needed); - - if (!utils.__key_in_object(kwargs, "key")) { - throw Error("Index ValueError: You must specify an array of index"); - } - - if (!utils.__key_in_object(kwargs, "inplace")) { - kwargs["inplace"] = false; - } - - if (!utils.__key_in_object(kwargs, "drop")) { - kwargs["drop"] = true; - } - - if ( - Array.isArray(kwargs["key"]) && - kwargs["key"].length != this.index.length - ) { - throw Error( - `Index LengthError: Lenght of new Index array ${kwargs["key"].length} must match lenght of existing index ${this.index.length}` - ); - } - - if ( - typeof kwargs["key"] == "string" && - this.column_names.includes(kwargs["key"]) - ) { - kwargs["key_name"] = kwargs["key"]; - kwargs["key"] = this[kwargs["key"]].values; - } - if (kwargs["inplace"]) { - // this.index_arr = kwargs['key'] - this.__set_index(kwargs["key"]); - if (kwargs["drop"] && typeof kwargs["key_name"] == "string") { - this.drop({ columns: [kwargs["key_name"]], inplace: true, axis: 1 }); - } - } else { - let df = this.copy(); - df.__set_index(kwargs["key"]); - if (kwargs["drop"] && typeof kwargs["key_name"] == "string") { - df.drop({ columns: [kwargs["key_name"]], axis: 1, inplace: true }); - } - return df; - } - } - - /** - * Generate descriptive statistics for all numeric columns - * Descriptive statistics include those that summarize the central tendency, - * dispersion and shape of a dataset’s distribution, excluding NaN values. - * @returns {Series} - */ - describe() { - let numeric_df = this.select_dtypes(["float32", "int32"]); - let col_names = numeric_df.column_names; - let index = ["count", "mean", "std", "min", "median", "max", "variance"]; - - let stats_arr = {}; - col_names.forEach((name) => { - let col_series = numeric_df[name]; - let count = col_series.count(); - let mean = col_series.mean(); - let std = col_series.std(); - let min = col_series.min(); - let median = col_series.median(); - let max = col_series.max(); - let variance = col_series.var(); - - let _stats = [count, mean, std, min, median, max, variance]; - stats_arr[name] = _stats; - }); - let df = new DataFrame(stats_arr, { index: index }); - return df.round(6); - } - - /** - * Return a subset of the DataFrame’s columns based on the column dtypes. - * @param {include} scalar or array-like. A selection of dtypes or strings to be included. At least one of these parameters must be supplied. - * @returns {DataFrame, Series} The subset of the frame including the dtypes. - */ - select_dtypes(include) { - let dtypes = this.dtypes; - let col_names = this.column_names; - let col_vals = {}; - let original_col_vals = this.col_data; - const __supported_dtypes = ["float32", "int32", "string", "boolean"]; - - if (include == undefined) { - //return all - let df = this.copy(); - return df; - } else { - //check if the right types are included - include.forEach((type) => { - if (!__supported_dtypes.includes(type)) { - throw Error(`Dtype Error: dtype ${type} not supported.`); - } - }); - - dtypes.forEach((dtype, i) => { - if (include.includes(dtype)) { - col_vals[col_names[i]] = original_col_vals[i]; - } - }); - let df = new DataFrame(col_vals); - return df; - } - } - - /** - * Sort a Dataframe in ascending or descending order by a specified column name. - * @param {kwargs} Object, {by: Column name to sort by - * ascending (Bool): Whether to return sorted values in ascending order or not, - * inplace (Bool): Whether to perform sorting on the original Series or not} - * @returns {Series} - */ - // sort_values(kwargs = {}) { - // if (utils.__key_in_object(kwargs, "by")) { - // let sort_col = this.column(kwargs["by"]) - // let sorted_col, sorted_index; - // let new_row_data = [] - - // if (utils.__key_in_object(kwargs, "inplace") && kwargs['inplace'] == true) { - // sort_col.sort_values(kwargs) - // sorted_index = sort_col.index - - // } else { - // sorted_col = sort_col.sort_values(kwargs) - // sorted_index = sorted_col.index - // } - - // sorted_index.map(idx => { - // new_row_data.push(this.values[idx]) - // }) - - // if (utils.__key_in_object(kwargs, "inplace") && kwargs['inplace'] == true) { - // this.data = new_row_data - // this.index_arr = sorted_index - // return null - // } else { - // let df = new DataFrame(new_row_data, { columns: this.column_names, index: sorted_index, dtype: this.dtypes }) - // return df - // } - - // } else { - // throw Error("Value Error: must specify the column to sort by") - // } - - // sorted_index.map(idx => { - // new_row_data.push(this.values[idx]) - // }) - - // if (utils.__key_in_object(kwargs, "inplace") && kwargs['inplace'] == true) { - // this.__update_frame_in_place(new_row_data, null, null, sorted_index, null) - - // } else { - // let df = new DataFrame(new_row_data, { columns: this.column_names, index: sorted_index, dtype: this.dtypes }) - // return df - // } - - // } else { - // throw Error("Value Error: must specify the column to sort by") - // } - - // } - - /** - * Return the sum of the values in a DataFrame across a specified axis. - * @params {kwargs} {axis: 0 for row and 1 for column} - * @returns {Series}, Sum of values accross axis - */ - sum(kwargs = { axis: 1 }) { - if (this.__frame_is_compactible_for_operation()) { - let values; - let val_sums = []; - if (kwargs["axis"] == 1) { - values = this.col_data; - } else { - values = this.values; - } - - values.map((arr) => { - let temp = utils._remove_nans(arr); - let temp_sum = tf.tensor(temp).sum().arraySync(); - val_sums.push(Number(temp_sum.toFixed(5))); - }); - - let new_index; - if (kwargs["axis"] == 1) { - new_index = this.column_names; - } else { - new_index = this.index; - } - let sf = new Series(val_sums, { columns: "sum", index: new_index }); - return sf; - } else { - throw Error("Dtype Error: Operation can not be performed on string type"); - } - } - - /** - * Returns the absolute values in DataFrame - * @return {DataFrame} - */ - abs() { - let data = this.values; - - let tensor_data = tf.tensor(data); - let abs_data = tensor_data.abs().arraySync(); - let df = new DataFrame(utils.__round(abs_data, 2, false), { - columns: this.column_names, - index: this.index - }); - return df; - } - - __get_tensor_and_idx(df, axis) { - let tensor_vals, idx, t_axis; - if (axis == 1) { - let temp_tensor_vals = df.row_data_tensor; - // Why do we flatten and replace NaNs with Null? See https://github.com/opensource9ja/danfojs/issues/200 - let flat_tensor_array = tf.util.flatten(temp_tensor_vals.arraySync()); - const flat_tensor_array_without_nans = utils._replace_nan_with_null(flat_tensor_array); - tensor_vals = tf.tensor(flat_tensor_array_without_nans, temp_tensor_vals.shape); - idx = df.column_names; - //Tensorflow uses 0 for column and 1 for rows, - // we use the opposite for consistency with the Pandas API (0 : row, 1: columns) - t_axis = 0; //switch the axis - } else { - tensor_vals = df.row_data_tensor; - idx = df.index; - t_axis = 1; - } - - return [tensor_vals, idx, t_axis]; - } - - /** - * Filter DataFrame element base on the element in a column - * @param {kwargs} kwargs {column : coumn name[string], is: String, to: string| int} - * @returns {DataFrame} - */ - query(kwargs) { - //define the set of operators to be used - let operators = [">", "<", "<=", ">=", "==", "!="]; - - if (!utils.__key_in_object(kwargs, "inplace")) { - kwargs["inplace"] = false; - } - - let column_index, operator, value; - - if (utils.__key_in_object(kwargs, "column")) { - if (this.columns.includes(kwargs["column"])) { - column_index = this.columns.indexOf(kwargs["column"]); - } else { - throw new Error(`column ${kwargs["column"]} does not exist`); - } - } else { - throw new Error("specify the column"); - } - - if (utils.__key_in_object(kwargs, "is")) { - if (operators.includes(kwargs["is"])) { - operator = kwargs["is"]; - } else { - throw new Error(` ${kwargs["is"]} is not a supported logical operator`); - } - } else { - throw new Error("specify an operator in param [is]"); - } - - if (utils.__key_in_object(kwargs, "to")) { - value = kwargs["to"]; - } else { - throw new Error("specify a value in param [to]"); - } - - let data = this.values; - let index = this.index; - let new_data = []; - let new_index = []; - - for (var i = 0; i < data.length; i++) { - let data_value = data[i]; - let elem = data_value[column_index]; - //use eval function for easy operation - //eval() takes in a string expression e.g eval('2>5') - if (eval(`elem${operator}value`)) { - new_data.push(data_value); - new_index.push(index[i]); - } - } - - if (new_data.length == 0) { - throw new Error( - `query returned empty data; is either ${value} does not exist in column ${kwargs["column"]}` - ); - } - if (kwargs["inplace"]) { - this.__update_frame_in_place( - new_data, - this.columns, - null, - new_index, - null - ); - } else { - let new_df = new DataFrame(new_data, { - columns: this.columns, - index: new_index - }); - return new_df; - } - } - - /** - * Add a column with values to the dataframe - * @param {kwargs} Object {column :[string] , value:[Array]} - * - */ - addColumn(kwargs) { - utils.__in_object(kwargs, "column", "column name not specified"); - utils.__in_object(kwargs, "value", "column value not specified"); - - let column_name = kwargs["column"]; - let data_length = this.shape[0]; - let value; - - if (kwargs["value"] instanceof Series) { - value = kwargs["value"].values; - } else { - value = kwargs["value"]; - } - - if (value.length != data_length) { - throw new Error( - `Array length ${value.length} not equal to ${data_length}` - ); - } - - if (this.columns.includes(column_name)) { - let col_idx = this.columns.indexOf(column_name); - let new_data = []; - - this.values.map((val, index) => { - let new_val = val.slice(); - new_val[col_idx] = value[index]; - new_data.push(new_val); - }); - this.__update_frame_in_place(new_data, null, null, null, null); - } else { - let data = this.values; - let new_data = []; - - data.map(function (val, index) { - let new_val = val.slice(); - new_val.push(value[index]); - new_data.push(new_val); - }); - - //add new dtype - let new_dtypes = [...this.dtypes]; - new_dtypes.push(utils.__get_t(value)[0]); - - let new_col_names = [...this.columns]; - new_col_names.push(column_name); - - this.__update_frame_in_place( - new_data, - new_col_names, - null, - null, - new_dtypes - ); - Object.defineProperty(this, column_name, { - get() { - return new Series(value, { columns: column_name, index: this.index }); - }, - set(value) { - this.addColumn({ column: column_name, value: value }); - } - }); - } - } - - /** - * - * @param {col} col is a list of column with maximum length of two - */ - groupby(col) { - const len = this.shape[0]; - const column_names = this.column_names; - const col_index = col.map((val) => column_names.indexOf(val)); - const col_dtype = this.dtypes.filter((val, index) => { - return col_index.includes(index); - }); - - const self = this; - const data = col.map( - (column_name) => { - if (!(column_names.includes(column_name))) - throw new Error(`column ${column_name} does not exist`); - const [column_data, _] = indexLoc(self, { - rows: [`0:${len}`], - columns: [`${column_name}`], - type: "loc" - }); - return column_data; - } - ); - - const unique_columns = data.map((column_data) => utils.__unique(column_data)); - - function getRecursiveDict(uniq_columns) { - const first_uniq_columns = uniq_columns[0]; - const remaining_columns = uniq_columns.slice(1); - const c_dict = {}; - if (!remaining_columns.length) - first_uniq_columns.forEach((col_value) => c_dict[col_value] = []); - else - first_uniq_columns.forEach((col_value) => c_dict[col_value] = getRecursiveDict(remaining_columns)); - return c_dict; - } - const col_dict = getRecursiveDict(unique_columns); - - return new GroupBy( - col_dict, - col, - this.values, - column_names, - col_dtype - ).group(); - } - - /** - * Return a sequence of axis dimension along row and columns - * @params col_name: the name of a column in the database. - * @returns tensor of shape 1 - */ - column(col_name) { - if (!this.columns.includes(col_name)) { - throw new Error(`column ${col_name} does not exist`); - } - let col_indx_objs = utils.__arr_to_obj(this.columns); - let indx = col_indx_objs[col_name]; - let data = this.col_data[indx]; - return new Series(data, { columns: [col_name] }); - } - - /** - * Replace NaN or undefined with a specified value" - * @param {kwargs}, {column(s): Array of column name(s) to fill. If undefined fill all columns; - * value(s): Array | Scalar of value(s) to fill with. If single value is specified, we use it to fill all - * @return {DataFrame} - */ - fillna(kwargs = {}) { - let params_needed = ["columns", "values", "inplace"]; - utils._throw_wrong_params_error(kwargs, params_needed); - - if (!utils.__key_in_object(kwargs, "inplace")) { - kwargs["inplace"] = false; - } - - if (utils.__key_in_object(kwargs, "columns")) { - //check if the column(s) exists - kwargs["columns"].map((col) => { - if (!this.column_names.includes(col)) { - throw Error( - `Value Error: Specified columns must be one of ${this.column_names}, got ${col}` - ); - } - }); - - if (kwargs["columns"].length != kwargs["values"].length) { - throw Error(`Lenght Error: The lenght of the columns names must be equal to the lenght of the values, - got column of length ${kwargs["columns"].length} but values of length ${kwargs["values"].length}`); - } - let new_col_data = this.col_data; - kwargs["columns"].map((col, i) => { - let col_idx = this.column_names.indexOf(col); - let col_data = this.col_data[col_idx]; - - let __temp = []; - col_data.map((val) => { - //fill the column - if (isNaN(val) && typeof val != "string") { - __temp.push(kwargs["values"][i]); - } else { - __temp.push(val); - } - }); - new_col_data[col_idx] = __temp; - }); - - let final_data = {}; - new_col_data.map((col, i) => { - final_data[this.column_names[i]] = col; - }); - - if (kwargs["inplace"]) { - this.__update_frame_in_place(null, null, final_data, null, null); - } else { - return new DataFrame(final_data, { index: this.index }); - } - } else { - //fill all columns using same value - if (!utils.__key_in_object(kwargs, "values")) { - throw Error("Value Error: Please specify a fill value"); - } - - let nan_val; - if (Array.isArray(kwargs["values"])) { - nan_val = kwargs["values"][0]; - } else { - nan_val = kwargs["values"]; - } - let data = []; - let values = this.values; - let columns = this.columns; - - for (let i = 0; i < values.length; i++) { - let temp_data = []; - let row_value = values[i]; - for (let j = 0; j < row_value.length; j++) { - if (isNaN(row_value[j]) && typeof row_value[j] != "string") { - temp_data.push(nan_val); - } else { - temp_data.push(row_value[j]); - } - } - data.push(temp_data); - } - if (kwargs["inplace"]) { - this.__update_frame_in_place(data, null, null, null, null); - } else { - return new DataFrame(data, { columns: columns, index: this.index }); - } - } - } - - /** - * Return a boolean same-sized object indicating if the values are NaN. NaN and undefined values, - * gets mapped to True values. Everything else gets mapped to False values. - * @return {DataFrame} - */ - isna() { - let new_row_data = this.__isna(); - let columns = this.column_names; - return new DataFrame(new_row_data, { columns: columns, index: this.index }); - } - - /** - * Obtain index containing nan values - * @return Array list (int) - */ - nanIndex() { - let df_values = this.values; - let index_data = []; - - for (let i = 0; i < df_values.length; i++) { - let row_values = df_values[i]; - - if (row_values.includes(NaN)) { - index_data.push(i); - } - } - return index_data; - } - - /** - * Drop all rows containing NaN - * @param {kwargs} kwargs [Object] {axis: [int]{o or 1}, inplace:[boolean]} - */ - dropna(kwargs = {}) { - let axis = kwargs["axis"] || 0; - let inplace = kwargs["inplace"] || false; - - if (axis != 0 && axis != 1) { - throw new Error("axis must either be 1 or 0"); - } - - let df_values = null; - let columns = null; - if (axis == 0) { - df_values = this.values; - columns = this.columns; - } else { - df_values = this.col_data; - columns = []; - } - let data = []; - - for (let i = 0; i < df_values.length; i++) { - let values = df_values[i]; - - if (!values.includes(NaN)) { - if (axis == 0) { - data.push(values); - } else { - columns.push(this.columns[i]); - if (data.length == 0) { - for (let j = 0; j < values.length; j++) { - data.push([values[j]]); - } - } else { - for (let j = 0; j < data.length; j++) { - data[j].push(values[j]); - } - } - } - } - } - - if (inplace == true) { - this.data = data; - this.__reset_index(); - this.columns = columns; - } else { - return new DataFrame(data, { columns: columns }); - } - } - - /** - * Apply a function to each element or along a specified axis of the DataFrame. Supports JavaScipt functions - * when axis is not specified, and accepts Tensorflow functions when axis is specified. - * @param {kwargs} kargs is defined as {axis: undefined, 0 or 1, callable: [FUNCTION]} - * @return Array - */ - apply(kwargs) { - let is_callable = utils.__is_function(kwargs["callable"]); - if (!is_callable) { - throw new Error("the argument must be a function"); - } - - let callable = kwargs["callable"]; - let data = []; - - if (utils.__key_in_object(kwargs, "axis")) { - //This accepts all tensorflow operations - let axis = kwargs["axis"]; - let df_data; - if (axis == 0) { - df_data = this.values; - } else { - df_data = this.col_data; - } - - for (let i = 0; i < df_data.length; i++) { - let value = tf.tensor(df_data[i]); - let callable_data; - try { - callable_data = callable(value).arraySync(); - } catch (error) { - throw Error( - `Callable Error: You can only apply JavaScript functions on DataFrames when axis is not specified. This operation is applied on all element, and returns a DataFrame of the same shape.` - ); - } - - data.push(callable_data); - } - } else { - //perform element wise operation. This accepts any JavaScript function - let df_data = this.values; - let new_data = []; - df_data.forEach((row) => { - let new_row = []; - row.forEach((val) => { - new_row.push(callable(val)); - }); - new_data.push(new_row); - }); - data = new_data; - } - - if (utils.__is_1D_array(data)) { - if (kwargs["axis"] == 0) { - let sf = new Series(data, { index: this.index }); - return sf; - } else { - let sf = new Series(data, { index: this.column_names }); - return sf; - } - } else { - let df = new DataFrame(data, { - columns: this.column_names, - index: this.index - }); - return df; - } - } - - /** - * Returns Less than of DataFrame and other. Supports element wise operations - * @param {other} DataFrame, Series, Scalar - * @param {axis} Number {0 for row, 1 for index} Whether to compare by the index or columns - * @return {DataFrame} - */ - lt(other, axis) { - if (this.__frame_is_compactible_for_operation()) { - if (axis == undefined) { - axis = 0; - } - let df = this.__logical_ops(other, "lt", axis); - return df; - } else { - throw Error("Dtype Error: Operation can not be performed on string type"); - } - } - - /** - * Returns Greater than of DataFrame and other. Supports element wise operations - * @param {other} DataFrame, Series, Scalar - * @param {axis} Number {0 for row, 1 for index} Whether to compare by the index or columns - * @return {DataFrame} - */ - gt(other, axis) { - if (this.__frame_is_compactible_for_operation()) { - if (axis == undefined) { - axis = 0; - } - - let df = this.__logical_ops(other, "gt", axis); - return df; - } else { - throw Error("Dtype Error: Operation can not be performed on string type"); - } - } - - /** - * Returns Less than or Equal to of DataFrame and other. Supports element wise operations - * @param {other} DataFrame, Series, Scalar - * @param {axis} Number {0 for row, 1 for index} Whether to compare by the index or columns - * @return {DataFrame} - */ - le(other, axis) { - if (this.__frame_is_compactible_for_operation()) { - if (axis == undefined) { - axis = 0; - } - let df = this.__logical_ops(other, "le", axis); - return df; - } else { - throw Error("Dtype Error: Operation can not be performed on string type"); - } - } - - /** - * Returns Greater than or Equal to of DataFrame and other. Supports element wise operations - * @param {other} DataFrame, Series, Scalar - * @param {axis} Number {0 for row, 1 for index} Whether to compare by the index or columns - * @return {DataFrame} - */ - ge(other, axis) { - if (this.__frame_is_compactible_for_operation()) { - if (axis == undefined) { - axis = 0; - } - let df = this.__logical_ops(other, "ge", axis); - return df; - } else { - throw Error("Dtype Error: Operation can not be performed on string type"); - } - } - - /** - * Returns Not Equal to of DataFrame and other. Supports element wise operations - * @param {other} DataFrame, Series, Scalar - * @param {axis} Number {0 for row, 1 for index} Whether to compare by the index or columns - * @return {DataFrame} - */ - ne(other, axis) { - if (this.__frame_is_compactible_for_operation()) { - if (axis == undefined) { - axis = 0; - } - let df = this.__logical_ops(other, "ne", axis); - return df; - } else { - throw Error("Dtype Error: Operation can not be performed on string type"); - } - } - - /** - * Returns Greater than or Equal to of DataFrame and other. Supports element wise operations - * @param {other} DataFrame, Series, Scalar - * @param {axis} Number {0 for row, 1 for index} Whether to compare by the index or columns - * @return {DataFrame} - */ - eq(other, axis) { - if (this.__frame_is_compactible_for_operation()) { - if (axis == undefined) { - axis = 0; - } - let df = this.__logical_ops(other, "eq", axis); - return df; - } else { - throw Error("Dtype Error: Operation can not be performed on string type"); - } - } - - /** - * Replace all occurence of a value with a new specified value" - * @param {kwargs}, {"replace": the value you want to replace, - * "with": the new value you want to replace the olde value with - * "in": Array of column names to replace value in, If not specified, replace all columns} - * @return {Series} - */ - replace(kwargs = {}) { - let params_needed = ["replace", "with", "in"]; - utils._throw_wrong_params_error(kwargs, params_needed); - - if (utils.__key_in_object(kwargs, "in")) { - //fill specified columns only - //check if the column(s) exists - kwargs["in"].map((col) => { - if (!this.column_names.includes(col)) { - throw Error( - `Value Error: Specified columns must be one of ${this.column_names}, got ${col}` - ); - } - }); - - if ( - utils.__key_in_object(kwargs, "replace") && - utils.__key_in_object(kwargs, "with") - ) { - let new_col_data_obj = {}; - this.column_names.map((col, idx) => { - if (kwargs["in"].includes(col)) { - let temp_col_data = this.col_data[idx]; //retreive the column data - let __temp = []; - temp_col_data.map((val) => { - //replace the values - if (val == kwargs["replace"]) { - __temp.push(kwargs["with"]); - } else { - __temp.push(val); - } - }); - new_col_data_obj[col] = __temp; - } else { - new_col_data_obj[col] = this.col_data[idx]; - } - }); - return new DataFrame(new_col_data_obj, { - columns: this.column_names, - index: this.index - }); - } else { - throw Error( - "Params Error: Must specify both 'replace' and 'with' parameters." - ); - } - } else { - //fill every occurence in all columns and rows - if ( - utils.__key_in_object(kwargs, "replace") && - utils.__key_in_object(kwargs, "with") - ) { - let replaced_arr = []; - let old_arr = this.values; - - old_arr.map((inner_arr) => { - let temp = []; - inner_arr.map((val) => { - if (val == kwargs["replace"]) { - temp.push(kwargs["with"]); - } else { - temp.push(val); - } - }); - replaced_arr.push(temp); - }); - - let df = new DataFrame(replaced_arr, { - index: this.index, - columns: this.column_names - }); - return df; - } else { - throw Error( - "Params Error: Must specify both 'replace' and 'with' parameters." - ); - } - } - } - - //performs logical comparisons on DataFrame using Tensorflow.js - __logical_ops(val, logical_type, axis) { - let int_vals, other; - if (utils.__is_number(val)) { - other = val; - } else { - if (val.series) { - //series - if (axis == 0) { - if (val.values.length != this.shape[0]) { - throw Error( - `Shape Error: Operands could not be broadcast together with shapes ${this.shape} and ${val.values.length}.` - ); - } - other = tf.tensor(val.values); - } else { - if (val.values.length != this.shape[1]) { - throw Error( - `Shape Error: Operands could not be broadcast together with shapes ${this.shape} and ${val.values.length}.` - ); - } - other = tf.tensor(val.values); - } - } else if (Array.isArray(val)) { - //Array of Array - other = tf.tensor(val); - } else { - //DataFrame - other = val.row_data_tensor; - } - } - - switch (logical_type) { - case "lt": - int_vals = tf.tensor(this.values).less(other).arraySync(); - break; - case "gt": - int_vals = tf.tensor(this.values).greater(other).arraySync(); - break; - case "le": - int_vals = tf.tensor(this.values).lessEqual(other).arraySync(); - break; - case "ge": - int_vals = tf.tensor(this.values).greaterEqual(other).arraySync(); - break; - case "ne": - int_vals = tf.tensor(this.values).notEqual(other).arraySync(); - break; - case "eq": - int_vals = tf.tensor(this.values).equal(other).arraySync(); - break; - } - let bool_vals = utils.__map_int_to_bool(int_vals, 2); - let df = new DataFrame(bool_vals, { - columns: this.column_names, - index: this.index - }); - return df; - } - - //slice the corresponding arrays from tensor objects - __get_df_from_tensor(val, col_names) { - let len = val.shape[0]; - let new_array = []; - for (let i = 0; i < len; i++) { - let arr = val.slice([i], [1]).arraySync()[0]; - new_array.push(arr); - } - return new DataFrame(new_array, { columns: col_names }); - } - - //checks if DataFrame is compaticble for arithmetic operation - //compatible Dataframe must have only numerical dtypes - __frame_is_compactible_for_operation() { - let dtypes = this.dtypes; - const str = (element) => element == "string"; - - if (dtypes.some(str)) { - return false; - } else { - return true; - } - } - - //retreives the corresponding tensors based on specified axis - __get_ops_tensors(tensors, axis) { - if (utils.__is_undefined(tensors[1].series)) { - //check if add operation is on a series or DataFrame - let tensors_arr = []; - if (utils.__is_undefined(axis) || axis == 1) { - //axis = 1 (column) - tensors_arr.push(tensors[0].row_data_tensor); - tensors_arr.push(tensors[1]); - return tensors_arr; - } else { - //axis = 0 (rows) - tensors_arr.push(tensors[0].col_data_tensor); - tensors_arr.push(tensors[1]); - return tensors_arr; - } - } else { - //operation is being performed on a Dataframe or Series - let tensors_arr = []; - if (utils.__is_undefined(axis) || axis == 1) { - //axis = 1 (column) - let this_tensor, other_tensor; - - this_tensor = tensors[0].row_data_tensor; //tensorflow uses 1 for rows axis and 0 for column axis - if (tensors[1].series) { - other_tensor = tf.tensor(tensors[1].values, [ - 1, - tensors[1].values.length - ]); - } else { - other_tensor = tensors[1].row_data_tensor; - } - - tensors_arr.push(this_tensor); - tensors_arr.push(other_tensor); - return tensors_arr; - } else { - //axis = 0 (rows) - let this_tensor, other_tensor; - - this_tensor = tensors[0].row_data_tensor; - if (tensors[1].series) { - other_tensor = tf.tensor(tensors[1].values, [ - tensors[1].values.length, - 1 - ]); - } else { - other_tensor = tensors[1].row_data_tensor; - } - - tensors_arr.push(this_tensor); - tensors_arr.push(other_tensor); - return tensors_arr; - } - } - } - - /** - * Transpose index and columns. - * Reflect the DataFrame over its main diagonal by writing rows as columns and vice-versa. - * The property T is an accessor to the method transpose(). - */ - transpose() { - let new_values = this.col_data; - let new_index = this.column_names; - let new_col_names = this.index; - - let df = new DataFrame(new_values, { - columns: new_col_names, - index: new_index - }); - return df; - } - - /** - * The property T is an accessor to the method transpose(). - */ - get T() { - return this.transpose(); - } - - /** - * Returns the data types in the DataFrame - * @return {Array} list of data types for each column - */ - get ctypes() { - let cols = this.column_names; - let d_types = this.col_types; - let sf = new Series(d_types, { index: cols }); - return sf; - } - - /** - * Make plots of Series or DataFrame. - * Uses the Plotly as backend, so supports Plotly's configuration parameters - * @param {string} div Name of the div to show the plot - * @returns {Class} Plot class that expoese different plot type - */ - plot(div) { - const plt = new Plot(this, div); - return plt; - } - - /** - * Returns the Tensorflow tensor backing the DataFrame Object - * @returns {2D tensor} - */ - get tensor() { - return this.row_data_tensor; - } - - /** - * Sets the data types of an DataFrame - * @param {Object} kwargs {column: Name of the column to cast, dtype: [float32, int32, string] data type to cast to} - * @returns {DataFrame} - */ - astype(kwargs = {}) { - if (!utils.__key_in_object(kwargs, "column")) { - throw Error("Value Error: Please specify a column to cast"); - } - - if (!utils.__key_in_object(kwargs, "dtype")) { - throw Error("Value Error: Please specify dtype to cast to"); - } - - if (!this.column_names.includes(kwargs["column"])) { - throw Error(`'${kwargs["column"]}' not found in columns`); - } - - let col_idx = this.column_names.indexOf(kwargs["column"]); - let new_types = this.col_types; - let col_values = this.col_data; - - new_types[col_idx] = kwargs["dtype"]; - let new_col_values = []; - let temp_col = col_values[col_idx]; - - switch (kwargs["dtype"]) { - case "float32": - temp_col.map((val) => { - new_col_values.push(Number(val)); - }); - col_values[col_idx] = new_col_values; - break; - case "int32": - temp_col.map((val) => { - new_col_values.push(Number(Number(val).toFixed())); - }); - col_values[col_idx] = new_col_values; - - break; - case "string": - temp_col.map((val) => { - new_col_values.push(String(val)); - }); - col_values[col_idx] = new_col_values; - break; - default: - break; - } - - let new_col_obj = {}; - this.column_names.forEach((cname, i) => { - new_col_obj[cname] = col_values[i]; - }); - - let df = new DataFrame(new_col_obj, { - dtypes: new_types, - index: this.index - }); - return df; - } - - /** - * Return the unique values along an axis - * @param {axis} Int, 0 for row, and 1 for column. Default to 1 - * @return {Object} - */ - unique(axis = 1) { - if (axis == undefined || axis > 1 || axis < 0) { - throw Error( - `Axis Error: Please specify a correct axis. Axis must either be '0' or '1', got ${axis}` - ); - } - let _unique = {}; - if (axis == 1) { - //column - let col_names = this.column_names; - col_names.forEach((cname) => { - _unique[cname] = this[cname].unique().values; - }); - } else { - let rows = this.values; - let _index = this.index; - rows.forEach((row, i) => { - let data_set = new Set(row); - _unique[_index[i]] = Array.from(data_set); - }); - } - - return _unique; - } - - /** - * Return the number of unique value along an axis - * @param {axis} Int, 0 for row, and 1 for column. Default to 1 - * @return {Series} - */ - nunique(axis = 1) { - if (axis == undefined || axis > 1 || axis < 0) { - throw Error( - `Axis Error: Please specify a correct axis. Axis must either be '0' or '1', got ${axis}` - ); - } - - let _nunique = []; - if (axis == 1) { - //column - let col_names = this.column_names; - col_names.forEach((cname) => { - _nunique.push(this[cname].unique().values.length); - }); - let sf = new Series(_nunique, { index: this.column_names }); - return sf; - } else { - let rows = this.values; - rows.forEach((row) => { - let data_set = new Set(row); - _nunique.push(Array.from(data_set).length); - }); - } - let sf = new Series(_nunique, { index: this.index }); - return sf; - } - - /** - * Change axes labels. Object values must be unique (1-to-1). - * Labels not contained in a dict / Series will be left as-is. Extra labels listed don’t throw an error. - * @param {Object} kwargs {mapper: Dict-like or functions transformations to apply to that axis’ values, - * axis: Int, 0 for row, and 1 for column. Default to 1, - * inplace: Whether to return a new DataFrame. If True then value of copy is ignored. - * @returns {DataFrame} - */ - rename(kwargs = {}) { - let params_needed = ["mapper", "inplace", "axis"]; - utils._throw_wrong_params_error(kwargs, params_needed); - - // utils.__in_object(kwargs, "columns", "value not defined") - if (!utils.__key_in_object(kwargs, "inplace")) { - kwargs["inplace"] = false; - } - if (!utils.__key_in_object(kwargs, "axis")) { - kwargs["axis"] = 1; - } - if (!utils.__key_in_object(kwargs, "mapper")) { - throw Error("Please specify a mapper object"); - } - if (kwargs["axis"] == 1) { - //columns - let old_col_names = Object.keys(kwargs["mapper"]); - let new_col_names = Object.values(kwargs["mapper"]); - let col_names = [...this.column_names]; - - old_col_names.forEach((cname, i) => { - if (!col_names.includes(cname)) { - throw Error( - `Label Error: Specified column '${cname}' not found in column axis` - ); - } - let idx = col_names.indexOf(cname); - col_names[idx] = new_col_names[i]; - }); - if (kwargs["inplace"]) { - this.columns = col_names; - this.__set_col_property(this, this.col_data, col_names, old_col_names); - } else { - let df = this.copy(); - df.columns = col_names; - df.__set_col_property(df, df.col_data, col_names, old_col_names); - return df; - } - } else { - //row - let old_index = Object.keys(kwargs["mapper"]); - let row_index = this.index; - let new_index = []; - - row_index.forEach((idx) => { - if (old_index.includes(idx)) { - new_index.push(kwargs["mapper"][idx]); - } else { - new_index.push(idx); - } - }); - - if (kwargs["inplace"]) { - this.__set_index(new_index); - } else { - let df = this.copy(); - df.__set_index(new_index); - return df; - } - } - } - /** - * Sort DataFrame by index - * @param {*} kwargs {inplace: Boolean, ascending: Bool} - * @returns DataFrame - */ - sort_index(kwargs = {}) { - let inplace = - typeof kwargs["inplace"] == "undefined" ? false : kwargs["inplace"]; - let asc = - typeof kwargs["ascending"] == "undefined" ? true : kwargs["ascending"]; - - let index_val = this.index; - let [data, index] = this.__sort_by(index_val, index_val, asc); - - if (inplace) { - this.__update_frame_in_place(data, null, null, index, null); - } else { - let df = this.copy(); - df.__update_frame_in_place(data, null, null, index, null); - return df; - } - } - - /** - * Sort a Dataframe in ascending or descending order by a specified column name. - * @param {kwargs} Object, {by: Column name to sort by - * ascending (Bool): Whether to return sorted values in ascending order or not, - * inplace (Bool): Whether to perform sorting on the original Series or not} - * @returns {Series} - */ - sort_values(kwargs = {}) { - if (!utils.__key_in_object(kwargs, "by")) { - throw Error(`use col_name to specify column name`); - } - - let inplace = - typeof kwargs["inplace"] == "undefined" ? false : kwargs["inplace"]; - let asc = - typeof kwargs["ascending"] == "undefined" ? true : kwargs["ascending"]; - let index_val = this.index; - let column_val = this.column(kwargs["by"]).values; - let [data, index] = this.__sort_by(column_val, index_val, asc); - - if (inplace) { - this.__update_frame_in_place(data, null, null, index, null); - } else { - let df = this.copy(); - df.__update_frame_in_place(data, null, null, index, null); - return df; - } - } - - //set all columns to DataFrame Property. This ensures easy access to columns as Series - __set_col_property(self, col_vals, col_names, old_col_names) { - //delete old name - old_col_names.forEach((name) => { - delete self[name]; - }); - - col_vals.forEach((col, i) => { - // self[col_names[i]] = new Series(col, { columns: col_names[i], index: self.index }) - Object.defineProperty(self, col_names[i], { - get() { - return new Series(col, { columns: col_names[i], index: self.index }); - }, - set(value) { - this.addColumn({ column: col_names[i], value: value }); - } - }); - }); - } - - //update a DataFrame in place - __update_frame_in_place(row_data, column_names, col_obj, index, dtypes) { - if (row_data != undefined) { - this.data = row_data; - } else { - //check column is available and create row from column - if (col_obj != undefined) { - let _res = utils._get_row_and_col_values(col_obj); - this.data = _res[0]; - this.columns = _res[1]; - column_names = _res[1]; - } - } - - if (col_obj != undefined) { - this.col_data = Object.values(col_obj); - this.columns = Object.keys(col_obj); - column_names = Object.keys(col_obj); - } else { - //check if row data is available and create column data from rows - if (row_data != undefined) { - this.col_data = utils.__get_col_values(row_data); //get column data from row - } - } - - if (column_names != undefined) { - this.columns = column_names; - } - if (index != undefined) { - this.index_arr = index; - } - if (dtypes != undefined) { - this.col_types = dtypes; - } - } - - __sort_by(col_value, df_index, asc) { - let values = this.values; - - let sorted_val = utils.__sort(col_value, asc); - let duplicate_obj = utils.__get_duplicate(col_value); - - let data = []; - let indexs = []; - for (let row_i = 0; row_i < sorted_val.length; row_i++) { - let val = sorted_val[row_i]; - let index = null; - - if (duplicate_obj.hasOwnProperty(val)) { - index = duplicate_obj[val]["index"][0]; - duplicate_obj[val]["index"].splice(0, 1); - } else { - index = col_value.indexOf(val); - } - - data.push(values[index]); - indexs.push(df_index[index]); - } - - return [data, indexs]; - } - - /** - * Append rows to a DataFrame - * @param {val} val Array | Series to append to the object - * @return DataFrame - */ - append(val) { - let df2 = null; - if (Array.isArray(val)) { - if (Array.isArray(val[0])) { - if (val[0].length != this.shape[1]) { - throw Error( - `length Mixmatch: The lenght of provided value (${val.length}) does not match the original DataFrame (${this.shape[1]})` - ); - } - df2 = new DataFrame(val); - } - } else if (utils.__is_object(val)) { - df2 = new DataFrame(val); - } else if (val instanceof DataFrame) { - df2 = val.copy(); - } - - let concat_df = concat({ df_list: [this, df2], axis: 0 }); - - return concat_df; - } -} diff --git a/danfojs-node/src/core/generic.js b/danfojs-node/src/core/generic.js deleted file mode 100644 index 8b41f412..00000000 --- a/danfojs-node/src/core/generic.js +++ /dev/null @@ -1,500 +0,0 @@ -/** -* Copyright 2020, JsData. -* All rights reserved. -* -* This source code is licensed under the MIT license found in the -* LICENSE file in the root directory of this source tree. - -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. - * -*/ - -import * as tf from '@tensorflow/tfjs-node'; -import { table } from "table"; -import { Utils } from "./utils"; -import { Configs } from "../config/config"; - - -const utils = new Utils(); -const config = new Configs(); //package wide configuration object -export default class NDframe { - /** - * N-Dimensiona data structure. Stores multi-dimensional - * data in a size-mutable, labeled data structure. Analogous to the Python Pandas DataFrame. - * - * @param {data} Array JSON, Tensor. Block of data. - * @param {kwargs} Object Optional Configuration Object - * {columns: Array of column names. If not specified and data is an array of array, use range index. - * dtypes: Data types of the columns, - * index: row index for subseting array } - * - * @returns NDframe - */ - - constructor(data, kwargs = {}) { - this.kwargs = kwargs; - - if (data instanceof tf.Tensor) { - data = data.arraySync(); - } - - if (utils.__is_1D_array(data)) { - this.series = true; - this._read_array(data); - } else { - this.series = false; - if (utils.__is_object(data[0])) { - //check the type of the first object in the data - this._read_object(data, 1); //type 1 object are of JSON form [{a: 1, b: 2}, {a: 30, b: 20}] - } else if (utils.__is_object(data)) { - this._read_object(data, 2); //type 2 object are of the form {a: [1,2,3,4], b: [30,20, 30, 20}] - } else if ( - Array.isArray(data[0]) || - utils.__is_number(data[0]) || - utils.__is_string(data[0]) - ) { - this._read_array(data); - } else { - throw new Error("File format not supported"); - } - } - } - - /** - * - * @param {Array} data - * Read array of data into NDFrame - */ - _read_array(data) { - this.data = utils.__replace_undefined_with_NaN(data, this.series); - this.row_data_tensor = tf.tensor(this.data); - - if (this.series) { - this.col_data = [ this.values ]; - } else { - this.col_data = utils.__get_col_values(this.data); - } - - this.col_data_tensor = tf.tensor(this.col_data); //data saved as 2D column tensors - - if ("index" in this.kwargs) { - this.__set_index(this.kwargs["index"]); - } else { - this.index_arr = [ ...Array(this.row_data_tensor.shape[0]).keys() ]; - } - - if (this.ndim == 1) { - //series array - if ("columns" in this.kwargs) { - this.columns = this.kwargs["columns"]; - } else { - this.columns = [ "0" ]; - } - } else { - //2D Array - if ("columns" in this.kwargs) { - if ( - this.kwargs["columns"].length == Number(this.row_data_tensor.shape[1]) - ) { - this.columns = this.kwargs["columns"]; - } else { - throw `Column length mismatch. You provided a column of length ${this.kwargs["columns"].length} but data has lenght of ${this.row_data_tensor.shape[1]}`; - } - } else { - this.columns = [ ...Array(this.row_data_tensor.shape[1]).keys() ]; - } - } - - if ("dtypes" in this.kwargs) { - this._set_col_types(this.kwargs["dtypes"], false); - } else { - this._set_col_types(null, true); //infer dtypes - } - } - - /** - * Convert Javascript Object of arrays into NDFrame - * @param {*} data Object of Arrays - * @param {*} type type 1 object are of JSON form [{a: 1, b: 2}, {a: 30, b: 20}], - * type 2 object are of the form {a: [1,2,3,4], b: [30,20, 30, 20}] - */ - _read_object(data, type) { - if (type == 2) { - let [ row_arr, col_names ] = utils._get_row_and_col_values(data); - this.kwargs["columns"] = col_names; - this._read_array(row_arr); - } else { - let data_arr = data.map((item) => { - return Object.values(item); - }); - - this.data = utils.__replace_undefined_with_NaN(data_arr, this.series); //Defualt array data in row format - this.row_data_tensor = tf.tensor(this.data); //data saved as row tensors - this.kwargs["columns"] = Object.keys(Object.values(data)[0]); //get names of the column from the first entry - - if (this.series) { - this.col_data = [ this.values ]; //data saved as 1D column tensors - } else { - this.col_data = utils.__get_col_values(this.data); - } - - this.col_data_tensor = tf.tensor(this.col_data); //data saved as 2D column tensors - - if ("index" in this.kwargs) { - this.__set_index(this.kwargs["index"]); - } else { - this.index_arr = [ ...Array(this.row_data_tensor.shape[0]).keys() ]; - } - - if (this.ndim == 1) { - //series array - if (!this.kwargs["columns"]) { - this.columns = [ "0" ]; - } else { - this.columns = this.kwargs["columns"]; - } - } else { - //2D Array - if ("columns" in this.kwargs) { - if ( - this.kwargs["columns"].length == - Number(this.row_data_tensor.shape[1]) - ) { - this.columns = this.kwargs["columns"]; - } else { - throw `Column length mismatch. You provided a column of length ${this.kwargs["columns"].length} but data has column length of ${this.row_data_tensor.shape[1]}`; - } - } else { - this.columns = [ ...Array(this.row_data_tensor.shape[1]).keys() ]; - } - } - - if ("dtypes" in this.kwargs) { - this._set_col_types(this.kwargs["dtypes"], false); - } else { - this._set_col_types(null, true); //infer dtypes - } - } - } - - /** - * Sets the data type of the NDFrame. Supported types are ['float32', "int32", 'string', 'boolean'] - * @param {Array} dtypes Array of data types. - * @param {Boolean} infer Whether to automatically infer the dtypes from the Object - */ - _set_col_types(dtypes, infer) { - const __supported_dtypes = [ "float32", "int32", "string", "boolean" ]; - - if (infer) { - if (this.series) { - this.col_types = utils.__get_t(this.values); - } else { - this.col_types = utils.__get_t(this.col_data); - } - } else { - if (this.series) { - this.col_types = dtypes; - } else { - if (dtypes.length != this.columns.length) { - throw new Error( - `length Mixmatch: Length of specified dtypes is ${dtypes.length}, but length of columns is ${this.columns.length}` - ); - } - if (Array.isArray(dtypes)) { - dtypes.forEach((type, indx) => { - if (!__supported_dtypes.includes(type)) { - throw new Error( - `dtype error: dtype specified at index ${indx} is not supported` - ); - } - }); - this.col_types = dtypes; - } else { - throw new Error(`dtypes must be an Array of types`); - } - } - } - } - - /** - * Returns the data types in the DataFrame - * @return {Array} list of data types for each column - */ - get dtypes() { - // let col_data = utils.get_col_values(this.data) - // this.col_types = utils.__get_t(col_data) - // let sf = new Series({dtypes: this.col_types, index: this.column_names}) - return this.col_types; - } - - /** - * Gets dimension of the NDFrame - * @returns {Integer} dimension of NDFrame - */ - get ndim() { - if (this.series) { - return 1; - } else { - return this.row_data_tensor.shape.length; - } - } - - /** - * Gets values for index and columns - * @return {Object} axes configuration for index and columns of NDFrame - */ - get axes() { - let axes = { - index: this.index, - columns: this.columns - }; - return axes; - } - - /** - * Gets index of the NDframe - * @return {Array} array of index from series - */ - get index() { - return this.index_arr; - } - - /** - * Sets index of the NDFrame - */ - __set_index(labels) { - if (!Array.isArray(labels)) { - throw Error("Value Error: index must be an array"); - } - if (labels.length > this.shape[0] || labels.length < this.shape[0]) { - throw Error("Value Error: length of labels must match row shape of data"); - } - this.index_arr = labels; - } - - /** - * Generate a new index for NDFrame. - */ - __reset_index() { - let new_idx = [ ...Array(this.values.length).keys() ]; - this.index_arr = new_idx; - } - - /** - * Gets a sequence of axis dimension along row and columns - * @returns {Array} the shape of the NDFrame - */ - get shape() { - if (this.series) { - return [ this.values.length, 1 ]; - } else { - return this.row_data_tensor.shape; - } - } - - /** - * Gets the values in the NDFrame in JS array - * @returns {Array} Arrays of arrays of data instances - */ - get values() { - return this.data; - } - - /** - * Gets the column names of the data - * @returns {Array} strings of column names - */ - get column_names() { - return this.columns; - } - - /** - * Return a boolean same-sized object indicating if the values are NaN. NaN and undefined values - * gets mapped to True values. Everything else gets mapped to False values. - * @return {Array} - */ - __isna() { - let new_arr = []; - if (this.series) { - this.values.map((val) => { - // eslint-disable-next-line use-isnan - if (val == NaN) { - new_arr.push(true); - } else if (isNaN(val) && typeof val != "string") { - new_arr.push(true); - } else { - new_arr.push(false); - } - }); - } else { - let row_data = this.values; - row_data.map((arr) => { - let temp_arr = []; - arr.map((val) => { - // eslint-disable-next-line use-isnan - if (val == NaN) { - temp_arr.push(true); - } else if (isNaN(val) && typeof val != "string") { - temp_arr.push(true); - } else { - temp_arr.push(false); - } - }); - new_arr.push(temp_arr); - }); - } - return new_arr; - } - - /* - * Gets binary size of the NDFrame - * @returns {String} size of the NDFrame - */ - get size() { - return this.row_data_tensor.size; - } - - /** - * Return object data as comma-separated values (csv). - * @returns {Promise} CSV representation of Object data - */ - async to_csv() { - if (this.series) { - let csv = this.values.join(","); - return csv; - } else { - let records = this.values; - let header = this.column_names.join(","); - - let csv_str = `${header}\n`; - records.forEach((val) => { - let row = `${val.join(",")}\n`; - csv_str += row; - }); - return csv_str; - } - } - - /** - * Return object as JSON string. - * @returns {Promise } JSON representation of Object data - */ - async to_json() { - if (this.series) { - let obj = {}; - obj[this.column_names[0]] = this.values; - let json = JSON.stringify(obj); - return json; - } else { - let values = this.values; - let header = this.column_names; - let json_arr = []; - values.forEach((val) => { - let obj = {}; - header.forEach((h, i) => { - obj[h] = val[i]; - }); - json_arr.push(obj); - }); - return JSON.stringify(json_arr); - } - } - - /** - * Prints the data in a Series as a grid of row and columns - */ - toString() { - let table_width = config.get_width; - let table_truncate = config.get_truncate; - let max_row = config.get_max_row; - let max_col_in_console = config.get_max_col_in_console; - - // let data; - let data_arr = []; - let table_config = {}; - // let idx = this.index - let col_len = this.columns.length; - // let row_len = this.values.length - 1 - let header = []; - - if (col_len > max_col_in_console) { - //truncate displayed columns to fit in the console - let first_4_cols = this.columns.slice(0, 4); - let last_3_cols = this.columns.slice(col_len - 4); - //join columns with truncate ellipse in the middle - header = [ "" ].concat(first_4_cols).concat([ "..." ]).concat(last_3_cols); - - let sub_idx, values_1, value_2; - - if (this.values.length > max_row) { - //slice Object to show [max_rows] - let df_subset_1 = this.iloc({ - rows: [ `0:${max_row}` ], - columns: [ "0:4" ] - }); - let df_subset_2 = this.iloc({ - rows: [ `0:${max_row}` ], - columns: [ `${col_len - 4}:` ] - }); - sub_idx = this.index.slice(0, max_row); - values_1 = df_subset_1.values; - value_2 = df_subset_2.values; - } else { - let df_subset_1 = this.iloc({ rows: [ "0:" ], columns: [ "0:4" ] }); - let df_subset_2 = this.iloc({ - rows: [ "0:" ], - columns: [ `${col_len - 4}:` ] - }); - sub_idx = this.index.slice(0, max_row); - values_1 = df_subset_1.values; - value_2 = df_subset_2.values; - } - - // merge dfs - sub_idx.map((val, i) => { - let row = [ val ].concat(values_1[i]).concat([ "..." ]).concat(value_2[i]); - data_arr.push(row); - }); - } else { - //display all columns - header = [ "" ].concat(this.columns); - let idx, values; - if (this.values.length > max_row) { - //slice Object to show a max of [max_rows] - let data = this.loc({ rows: [ `0:${max_row}` ], columns: this.columns }); - idx = data.index; - values = data.values; - } else { - values = this.values; - idx = this.index; - } - - // merge cols - idx.forEach((val, i) => { - let row = [ val ].concat(values[i]); - data_arr.push(row); - }); - } - - //set column width of all columns - table_config[0] = 10; - for (let index = 1; index < header.length; index++) { - table_config[index] = { width: table_width, truncate: table_truncate }; - } - - let table_data = [ header ].concat(data_arr); //Adds the column names to values before printing - return table(table_data, { columns: table_config }); - } - - /** - * Pretty prints n number of rows in a DataFrame or Series in the console - * @param {rows} Number of rows to print - */ - print() { - console.log(this + ""); - } -} diff --git a/danfojs-node/src/core/get_dummies.js b/danfojs-node/src/core/get_dummies.js deleted file mode 100644 index 32a5391d..00000000 --- a/danfojs-node/src/core/get_dummies.js +++ /dev/null @@ -1,139 +0,0 @@ -import { DataFrame } from "./frame"; -import { Utils } from "./utils"; - -const utils = new Utils; - -function oneHot(in_data, prefix, prefix_sep) { - let data_set = new Set(in_data); - let labels = Array.from(data_set); - let prefix_labels = null; - if (prefix) { - prefix_labels = labels.map((x) => { - return prefix + prefix_sep + x; - }); - } else { - prefix_labels = labels.map((x) => { - return x; - }); - } - - let onehot_data = utils.__zeros(in_data.length, labels.length); - - for (let i = 0; i < in_data.length; i++) { - - let elem = in_data[i]; - let elem_index = labels.indexOf(elem); - onehot_data[i][elem_index] = 1; - } - - return [ onehot_data, prefix_labels ]; - -} - -/** - * Generate one hot encoding for categorical variable in arrays |Serie | and Dataframe - * @param {kwargs} kwargs { data : Array | Series | DataFrame, - * prefix_sep: String e.g "_", - * prefix: String | Array of String, - * columns: [Array] columns to be encoded in DataFrame. - * } - */ -function get_dummy(kwargs = {}) { - utils.__in_object(kwargs, "data", "data not provided"); - - let prefix = kwargs["prefix"] || null; - let prefix_sep = kwargs["prefix_sep"] || [ "_" ]; - let columns = kwargs["columns"] || null; - - let is_dataframe = false; - let in_data = null; - - if (Array.isArray(kwargs["data"])) { - in_data = kwargs["data"]; - } else if (kwargs["data"] instanceof DataFrame) { - in_data = kwargs["data"]; - is_dataframe = true; - } else { - in_data = kwargs["data"].values; - } - - if (!is_dataframe) { - let [ onehot_data, prefix_labels ] = oneHot(in_data, prefix, prefix_sep); - - return new DataFrame(onehot_data, { columns: prefix_labels }); - } else { - - let column_index = []; - if (!columns) { - columns = []; - in_data.col_types.map((x, i) => { - - if (x == "string") { - let name_column = in_data.columns[i]; - columns.push(name_column); - column_index.push(i); - } - }); - } else { - - columns.forEach((x) => { - let col_idx = columns.indexOf(x); - column_index.push(col_idx); - }); - } - - if (prefix) { - if (Array.isArray(prefix)) { - if (prefix.length != columns.length) { - throw new Error("prefix must be the same length with the number of onehot encoding column"); - } - } else { - throw new Error("prefix for dataframe must be an array"); - } - } else { - prefix = columns; - } - - let df_data = in_data.values; - let df_columns = in_data.columns; - let col_data = in_data.col_data; - - let column_data = []; - column_index.forEach((x) => { - column_data.push(col_data[x]); - }); - - let one_hotColumns = []; - let one_hotData = []; - column_data.forEach((data, i) => { - - let [ onehot_data, prefix_labels ] = oneHot(data, prefix[i], prefix_sep); - one_hotColumns.push(...prefix_labels); - - if (one_hotData.length == 0) { - one_hotData.push(...onehot_data); - } else { - onehot_data.forEach((x, i) => { - one_hotData[i].push(...x); - }); - } - - }); - - let final_data = df_data.map((elem, i) => { - - let ele = elem.slice(); - let dt = utils.__remove_arr(ele, column_index); - dt.push(...one_hotData[i]); - return dt; - }); - - let final_columns = utils.__remove_arr(df_columns, column_index); - final_columns.push(...one_hotColumns); - - return new DataFrame(final_data, { columns: final_columns }); - } - -} - -export const get_dummies = get_dummy; diff --git a/danfojs-node/src/core/groupby.js b/danfojs-node/src/core/groupby.js deleted file mode 100644 index 7d11d916..00000000 --- a/danfojs-node/src/core/groupby.js +++ /dev/null @@ -1,332 +0,0 @@ -import { DataFrame } from "./frame"; -import { Utils } from "./utils"; -import { Series } from "./series"; -const utils = new Utils; - -/** - * The class performs all groupby operation on a dataframe - * involveing all aggregate funciton - * @param {col_dict} col_dict Object of unique keys in the group by column - * @param {key_col} key_col Array contains the column names - * @param {data} Array the dataframe data - * @param {column_name} Array of all column name in the dataframe. - */ -export class GroupBy { - constructor(col_dict, key_col, data, column_name, col_dtype) { - - this.key_col = key_col; - this.col_dict = col_dict; - this.data = data; - this.column_name = column_name; - this.data_tensors = {}; //store the tensor version of the groupby data - this.col_dtype = col_dtype; - - } - - /** - * Group the dataframe by the column by - * creating an object to store the grouping - * @returns Groupby data structure - */ - group(){ - for (const value of this.data){ - const col_indexes = this.key_col.map((key) => this.column_name.indexOf(key)); - const col_values = col_indexes.map((idx) => value[idx]); - - let sub_col_dict = this.col_dict; - for (const col_value of col_values){ - if (!(col_value in sub_col_dict)) - break; - if (col_value === col_values[col_values.length - 1]) - sub_col_dict[col_value].push(value); - else - sub_col_dict = sub_col_dict[col_value]; - } - } - - const self = this; - function dfs(sub_col_dict, sub_data_tensors){ - for (const [ key, value ] of Object.entries(sub_col_dict)){ - if (Array.isArray(value)) { - if (value.length === 0) - delete sub_col_dict[key]; - else - sub_data_tensors[key] = new DataFrame(value, { columns:self.column_name }); - } else { - if (!(key in sub_data_tensors)) - sub_data_tensors[key] = {}; - dfs(value, sub_data_tensors[key]); - } - } - } - dfs(this.col_dict, this.data_tensors); - - - return this; - - } - - /** - * obtain the column for each group - * @param {col_name} col_name [Array]--> array of column names - * @return Groupby data structure - */ - col(col_names){ - this.selected_column = col_names; // store col_names for use later in .apply - if (Array.isArray(col_names)){ - - for (let i = 0; i < col_names.length; i++){ - - let col_name = col_names[i]; - if (!this.column_name.includes(col_name)){ - throw new Error(`Column ${col_name} does not exist in groups`); - } - } - } else { - throw new Error(`Col_name must be an array of column`); - } - - const group_col = {}; - function dfs(sub_data_tensors, sub_group_col) { - for (const [ key, value ] of Object.entries(sub_data_tensors)){ - if (value instanceof DataFrame) { - sub_group_col[key] = col_names.map((col_name) => value.column(col_name)); - } else { - sub_group_col[key] = {}; - dfs(value, sub_group_col[key]); - } - } - } - dfs(this.data_tensors, group_col); - - const gp = new GroupBy( - null, - this.key_col, - null, - col_names, - this.col_dtype - ); - gp.group_col = group_col; - gp.group_col_name = col_names; - return gp; - } - - /** - * Basic root of all column arithemetic in groups - * @param {operation} operation String - */ - arithemetic(operation){ - - let ops_name = [ "mean", "sum", "count", "mode", "std", "var", "cumsum", "cumprod", - "cummax", "cummin" ]; - let ops_map = { - "mean": "mean()", - "sum": "sum()", - "mode": "mode()", - "count": "count()", - "std" : "std()", - "var" : "var()", - "cumsum" : "cumsum().values", - "cumprod": "cumprod().values", - "cummax" : "cummax().values", - "cummin" : "cummin().values" - }; - const is_array_operation = Array.isArray(operation); - const count_group = {}; - - function dfs(sub_count_group, sub_group_col) { - for (const [ key, value ] of Object.entries(sub_group_col)){ - if (Array.isArray(value)) { - sub_count_group[key] = []; - let data; - if (is_array_operation) { - for (let i = 0; i < value.length; i++){ - const op = operation[i]; - if (!ops_name.includes(op)){ - throw new Error("operation does not exist"); - } - data = eval(`value[i].${ops_map[op]}`); - sub_count_group[key].push(data); - } - } else { - value.forEach((v) => { - data = eval(`v.${operation}`); - sub_count_group[key].push(data); - }); - } - } else { - sub_count_group[key] = {}; - dfs(sub_count_group[key], value); - } - } - } - - dfs(count_group, this.group_col); - return count_group; - } - - operations(ops, name) { - if (!this.group_col) { - let column = this.column_name.filter((val) => !this.key_col.includes(val)); - let col_gp = this.col(column); - let value = col_gp.arithemetic(ops); - let df = col_gp.to_DataFrame(col_gp.key_col, col_gp.group_col_name, value, name); - return df; - } else { - let value = this.arithemetic(ops); - let df = this.to_DataFrame(this.key_col, this.group_col_name, value, name); - return df; - } - } - count(){ - return this.operations("count()", "count"); - } - - sum(){ - return this.operations("sum()", "sum"); - } - - std(){ - return this.operations("std()", "std"); - } - - var(){ - return this.operations("var()", "var"); - } - - mean(){ - return this.operations("mean()", "mean"); - } - - cumsum(){ - return this.operations("cumsum().values", "cumsum"); - } - cummax(){ - return this.operations("cummax().values", "cummax"); - } - - cumprod(){ - return this.operations("cumprod().values", "cumprod"); - } - - cummin(){ - return this.operations("cummin().values", "cummin"); - } - - max(){ - return this.operations("max()", "max"); - } - - min(){ - return this.operations("min()", "min"); - } - - /** - * returns dataframe of a group - * @param {*} key [Array] - */ - get_groups(key){ - if (this.key_col.length < 2) - return this.data_tensors[key]; - - if (key.length !== this.key_col.length) - throw new Error("specify the group by column"); - - utils.__is_object(this.data_tensors, key[0], `Key Error: ${key[0]} not in object`); - const last_key = key[key.length - 1]; - let sub_data_tensors = this.data_tensors; - for (const k of key) { - if (k === last_key) - return sub_data_tensors[k]; - else - sub_data_tensors = sub_data_tensors[k]; - } - } - - /** - * Map every column to an operaton - * @param {kwargs} kwargs {column name: math operation} - * @example .agg({"A": "mean","B": "sum","C":"count"}) - */ - agg(kwargs = {}){ - - let columns = Object.keys(kwargs); - let operations = columns.map((x) => { return kwargs[x].toLocaleLowerCase(); }); - - let col_gp = this.col(columns); - - let data = col_gp.arithemetic(operations); - let df = this.to_DataFrame(col_gp.key_col, col_gp.group_col_name, data, operations); - - return df; - } - - to_DataFrame(key_col, col, data, ops){ - const df_data = []; - - function concatPathAndNode(path, node, col_dtype) { - if (Array.isArray(node)) { - if (Array.isArray(node[0])) { - const transposed_node = node[0].map((_, colIndex) => node.map((row) => row[colIndex])); - for (const n_array of transposed_node) - df_data.push(path.concat(n_array)); - } else - df_data.push(path.concat(node)); - } else { - for (const [ k, child ] of Object.entries(node)) { - const sanitized_k = col_dtype[0] === "string" ? k : parseInt(k); - concatPathAndNode(path.concat([ sanitized_k ]), child, col_dtype.slice(1)); - } - } - } - - concatPathAndNode([], data, this.col_dtype); - - const column = [ ...key_col ]; - const group_col = col.slice().map((x, i) => { - if (Array.isArray(ops)){ - return `${x}_${ops[i]}`; - } - return `${x}_${ops}`; - }); - column.push(...group_col); - - return new DataFrame(df_data, { columns: column }); - } - - apply(callable){ - let df_data; - let column; - if (!this.group_col) { - column = this.column_name.filter((val) => !this.key_col.includes(val)); - const col_gp = this.col(column); - df_data = col_gp.group_col; - } else { - column = this.group_col_name; - df_data = this.group_col; - } - const count_group = {}; - - function recursiveCount(sub_df_data, sub_count_group) { - for (const [ key, value ] of Object.entries(sub_df_data)) { - if (Array.isArray(value)) { - sub_count_group[key] = value.map(( callable_value ) => { - const callable_rslt = callable(callable_value); - if ((callable_rslt instanceof DataFrame) || (callable_rslt instanceof Series)) - return callable_rslt.values; - else - return callable_rslt; - }); - } else { - sub_count_group[key] = {}; - recursiveCount(value, sub_count_group[key]); - } - } - } - - recursiveCount(df_data, count_group); - - return this.to_DataFrame(this.key_col, column, count_group, "apply"); - } - -} diff --git a/danfojs-node/src/core/indexing.js b/danfojs-node/src/core/indexing.js deleted file mode 100644 index a69da513..00000000 --- a/danfojs-node/src/core/indexing.js +++ /dev/null @@ -1,198 +0,0 @@ -import { Utils } from "./utils"; -const utils = new Utils(); - - -/** - * Obtain the defined the set of row and column index - * @param {*} kwargs object {rows:Array, columns:Array of column name, type: ["iloc","loc"]} - * @return Array - */ -export const indexLoc = (ndframe, kwargs) => { - - let rows = null; - let columns = null; - let isColumnSplit = false; - - if (Object.prototype.hasOwnProperty.call(kwargs, "rows")) { //check if the object has the key - if (Array.isArray(kwargs["rows"])) { - - if (kwargs["rows"].length == 1 && typeof kwargs["rows"][0] == "string") { - if (kwargs["rows"][0].includes(":")) { - - let column_split = kwargs["rows"][0].split(":"); - - if (kwargs['type'] == 'loc') { - //get index of first and last occurence of label - let start, end; - if (isNaN(Number(column_split[0]))) { - start = ndframe.index.indexOf(column_split[0]); - } else { - start = Number(column_split[0]); - } - - if (isNaN(Number(column_split[1]))) { - end = ndframe.index.lastIndexOf(column_split[1]) - 1 || (ndframe.values.length - 1); - } else { - end = Number(column_split[1]) - 1 || (ndframe.values.length - 1); - } - rows = utils.__range(start, end); - } else { - let start = parseInt(column_split[0]) || 0; - let end = parseInt(column_split[1]) - 1 || (ndframe.values.length - 1); - - if (typeof start == "number" && typeof end == "number") { - rows = utils.__range(start, end); - } - } - - } else { - if (kwargs["type"] == "loc") { - let row_idx = []; - ndframe.index.map((idx, i) => { - if (kwargs['rows'][0] == idx) { - row_idx.push(i); - } - }); - rows = row_idx; - } else { - throw new Error("Slice index must be separated by ':'"); - } - } - } else { - if (kwargs["type"] == "loc") { - //get all the index of specified labels - let row_idx = []; - ndframe.index.map((idx, i) => { - if (kwargs['rows'].includes(idx)) { - row_idx.push(i); - } - }); - rows = row_idx; - } else { - //return int index - rows = kwargs["rows"]; - } - } - } else { - throw new Error("rows parameter must be a Array"); - } - } else { - if (kwargs["type"] == "loc") { - rows = utils.__range(0, Number(ndframe.shape[0]) - 1); - // throw new Error("Invalid syntax, please specify a slice label") - } else { - rows = utils.__range(0, Number(ndframe.shape[0]) - 1); - } - } - - if (Object.prototype.hasOwnProperty.call(kwargs, "columns")) { - if (Array.isArray(kwargs["columns"])) { - if (kwargs["columns"].length == 1 && kwargs["columns"][0].includes(":")) { - - let column_split = kwargs["columns"][0].split(":"); - let start, end; - - if (kwargs["type"] == "iloc") { - if (column_split[0] == "") { - start = 0; - } else { - start = parseInt(column_split[0]) || 0; - } - - if (column_split[1] == "") { - end = parseInt(ndframe.columns.length - 1); - } else { - end = parseInt(column_split[1]) - 1 === 0 ? 0 : parseInt(column_split[1]) - 1; - } - - } else { - start = parseInt(ndframe.columns.indexOf(column_split[0])); - end = parseInt(ndframe.columns.indexOf(column_split[1])) - 1; - } - - if (typeof start == "number" && typeof end == "number") { - - columns = utils.__range(start, end); - isColumnSplit = true; - } - - } else { - columns = kwargs["columns"]; - } - - } else { - throw new Error("columns must be a list"); - } - } else { - //Return all column - if (kwargs["type"] == "loc") { - columns = ndframe.column_names; - } else { - columns = utils.__range(0, Number(ndframe.shape[1]) - 1); - } - } - - let data_values = ndframe.values; - let new_data = []; // store the data from the for loop - - for (var index = 0; index < rows.length; index++) { - let row_val = rows[index]; - let max_rowIndex = data_values.length - 1; //obtain the maximum row index - - if (row_val > max_rowIndex) { //check if the input row index is greater than the maximum row index - throw new Error(`Specified row index ${row_val} is bigger than maximum row index of ${max_rowIndex}`); - } - - if (Array.isArray(data_values[0])) { - - let value = data_values[row_val]; - let row_data = []; - - - for (var i in columns) { - var col_index; - if (kwargs["type"] == "loc" && !isColumnSplit) { - col_index = ndframe.columns.indexOf(columns[i]); //obtain the column index - - if (col_index == -1) { - throw new Error(`Column ${columns[i]} does not exist`); - } - } else { - col_index = columns[i]; - let max_colIndex = ndframe.columns.length - 1; //assign the maximum column index to a value - - if (col_index > max_colIndex) { - throw new Error(`column index ${col_index} is bigger than ${max_colIndex}`); - } - } - - let elem = value[col_index]; //obtain the element at the column index - row_data.push(elem); - } - - new_data.push(row_data); //store the data for each row in the new_data - - } else { - - new_data.push(data_values[row_val]); - } - - } - - let column_names = []; - if (kwargs["type"] == "iloc" || isColumnSplit) { - // let axes = ndframe.axes - columns.map((col) => { - column_names.push(ndframe.columns[col]); - }); - } else { - column_names = columns; - } - - //get index of columns - let final_row = []; - rows.forEach((i) => { - final_row.push(ndframe.index[i]); - }); - return [new_data, column_names, final_row]; -}; diff --git a/danfojs-node/src/core/merge.js b/danfojs-node/src/core/merge.js deleted file mode 100644 index 5d4a813f..00000000 --- a/danfojs-node/src/core/merge.js +++ /dev/null @@ -1,329 +0,0 @@ -import { DataFrame } from './frame'; -import { Utils } from "./utils"; - -const utils = new Utils; -export class Merge { - - constructor(kwargs) { - - //check if keys exist in kwargs - utils.__in_object(kwargs, "left"); - utils.__in_object(kwargs, "right"); - utils.__in_object(kwargs, "on"); - // utils.__in_object(kwargs, "how") - if (!utils.__key_in_object(kwargs, "how")){ - this.how = 'inner'; - kwargs['how'] = 'inner'; - } else { - this.how = kwargs['how']; - } - - this.left = null; - this.right = null; - this.on = null; - // this.how = null; - - let how_keys = [ "outer", "inner", "left", "right" ]; - - if ((kwargs["left"] instanceof DataFrame) && (kwargs["right"] instanceof DataFrame)) { - this.left = kwargs["left"]; - this.right = kwargs["right"]; - } else { - throw new Error("The left and right key value must be a dataFrame"); - } - - if (Array.isArray(kwargs["on"])) { - this.on = kwargs["on"]; - } else { - throw new Error("key 'on' must be a list"); - } - - if (how_keys.includes(kwargs["how"])) { - - this.how = kwargs["how"]; - } else { - throw new Error(`${kwargs["how"]} specify in keyword how is not recognise`); - } - - this.left_col_index = []; - this.right_col_index = []; - - //find the index of the columns - for (let i = 0; i < this.on.length; i++) { - - if (this.left.columns.includes(this.on[i]) && this.right.columns.includes(this.on[i])) { - - let left_index = this.left.columns.indexOf(this.on[i]); - let right_index = this.right.columns.indexOf(this.on[i]); - - this.left_col_index.push(left_index); - this.right_col_index.push(right_index); - } - } - - this.left_key_dict = {}; - this.right_key_dict = {}; - - let left_values = this.left.values; - let right_values = this.right.values; - - - /** - * Create a dictionary for both left and right dataframe - containing the key combination of columns used as keys, and - the value of such keys combination are the rows having this - keys combination. - */ - for (let i = 0; i < left_values.length; i++) { - let left_value = left_values[i]; - let left_key_comb_values = []; - - //get the value in the column index - for (let j = 0; j < this.left_col_index.length; j++) { - let index = this.left_col_index[j]; - - left_key_comb_values.push(left_value[index]); - } - //combine into single hashable string - let left_key_comb = left_key_comb_values.join('_'); - - let self = this; // assign the this scope to self - //filter out the value that are not the column key - let left_value_filter = left_value.filter(function (val, index) { - return !self.left_col_index.includes(index); - }); - - //check if the key combination already exist or not - //before storing the key combination and the value - //associated with it - if (utils.__key_in_object(this.left_key_dict, left_key_comb)) { - this.left_key_dict[left_key_comb].filters.push(left_value_filter); - } else { - this.left_key_dict[left_key_comb] = { - filters: [left_value_filter], - comb_values: left_key_comb_values - }; - } - - } - for (let i = 0; i < right_values.length; i++) { - let right_value = right_values[i]; - let right_key_comb_values = []; - - for (let j = 0; j < this.right_col_index.length; j++) { - let index = this.right_col_index[j]; - - right_key_comb_values.push(right_value[index]); - } - let right_key_comb = right_key_comb_values.join('_'); - - let self = this; - let right_value_filter = right_value.filter(function (val, index) { - return !self.right_col_index.includes(index); - }); - - if (utils.__key_in_object(this.right_key_dict, right_key_comb)) { - this.right_key_dict[right_key_comb].filters.push(right_value_filter); - } else { - this.right_key_dict[right_key_comb] = { - filters: [right_value_filter], - comb_values: right_key_comb_values - }; - } - } - - - //create column - this.__create_columns(); - - let data = null; - switch (this.how) { - - case "outer": - data = this.outer(); - break; - case "inner": - data = this.inner(); - break; - case "left": - data = this.left_merge(); - break; - case "right": - data = this.right_merge(); - break; - } - - // eslint-disable-next-line no-self-assign - let df = new DataFrame(data = data, { columns: this.columns }); - - return df; - } - - __create_columns() { - - let self = this; - self.left_col = self.left.columns.filter((val, index) => { - return !self.left_col_index.includes(index); - }); - - self.right_col = self.right.columns.filter((val, index) => { - return !self.right_col_index.includes(index); - }); - - self.columns = [ ...self.on ]; - let column_duplicate = {}; - - let temp_column = [ ...self.left_col ]; - temp_column.push(...self.right_col); - - for (let i = 0; i < temp_column.length; i++) { - - let col = temp_column[i]; - if (utils.__key_in_object(column_duplicate, col)) { - - let col_name = `${col}_${column_duplicate[col]}`; - self.columns.push(col_name); - - column_duplicate[col] += 1; - } else { - self.columns.push(col); - column_duplicate[col] = 1; - } - } - } - - outer() { - - let keys = Object.keys(this.left_key_dict); // obtain the keys of the left dataframe - - keys.push(...Object.keys(this.right_key_dict)); - - keys = Array.from(new Set(keys)); // obtain the unique keys - - let data = this.basic(keys); - - return data; - - } - - inner() { - - let left_keys = Object.keys(this.left_key_dict); - let right_keys = Object.keys(this.right_key_dict); - - let keys = left_keys.filter((val) => { - return right_keys.includes(val); - }); - - let data = this.basic(keys); - - return data; - } - - left_merge() { - - let keys = Object.keys(this.left_key_dict); - let data = this.basic(keys); - - return data; - - } - - right_merge() { - let keys = Object.keys(this.right_key_dict); - let data = this.basic(keys); - - return data; - } - - basic(keys) { - - let data = []; - - for (let i = 0; i < keys.length; i++) { - let key = keys[i]; - - let key_array = key.split("_").filter((val) => { - return val != ""; - }); - - if (utils.__key_in_object(this.left_key_dict, key)) { - let left_row = this.left_key_dict[key].filters; - let key_array = this.left_key_dict[key].comb_values; - - - for (let left_i = 0; left_i < left_row.length; left_i++) { - - let left_row_row = left_row[left_i]; - - if (utils.__key_in_object(this.right_key_dict, key)) { - - let right_row = this.right_key_dict[key].filters; - - for (let r_i = 0; r_i < right_row.length; r_i++) { - - let right_row_row = right_row[r_i]; - - - let inner_data = key_array.slice(0); - inner_data.push(...left_row_row); - inner_data.push(...right_row_row); - - - data.push(inner_data); - } - } else { - let nan_array = Array(this.right_col.length); - - for (let i = 0; i < this.right_col.length; i++) { - nan_array[i] = NaN; - } - - let inner_data = key_array.slice(0); - inner_data.push(...left_row_row); - inner_data.push(...nan_array); - data.push(inner_data); - } - } - } else { - - let right_row = this.right_key_dict[key].filters; - let key_array = this.right_key_dict[key].comb_values; - - for (let i = 0; i < right_row.length; i++) { - - let right_row_row = right_row[i]; - - let nan_array = Array(this.left_col.length); - - for (let j = 0; j < nan_array.length; j++) { - nan_array[j] = NaN; - } - - let inner_data = key_array.slice(0); - inner_data.push(...nan_array); - inner_data.push(...right_row_row); - data.push(inner_data); - } - } - } - return data; - - } -} - - -/** -* Merge DataFrame or named Series objects with a database-style join. -* The join is done on columns or indexes. If joining columns on columns, the DataFrame indexes will be ignored. Otherwise -* if joining indexes on indexes or indexes on a column or columns, the index will be passed on. -* @param {kwargs}{left: DataFrame; -* right: DataFrame | Named Series, Object to merge with; -* on: label, Column or index level names to join on. These must be found in both DataFrames; -* how: {‘left’, ‘right’, ‘outer’, ‘inner’}. Type of merge to be performed. -* @returns {DataFrame} -*/ -export const merge = (kwargs) => { - let merge = new Merge(kwargs); - return merge; -}; diff --git a/danfojs-node/src/core/series.js b/danfojs-node/src/core/series.js deleted file mode 100644 index 0c184a61..00000000 --- a/danfojs-node/src/core/series.js +++ /dev/null @@ -1,1302 +0,0 @@ -/** -* Copyright 2020, JsData -* All rights reserved. -* -* This source code is licensed under the MIT license found in the -* LICENSE file in the root directory of this source tree. - -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. - * -*/ - - -import * as tf from '@tensorflow/tfjs-node'; -import { variance, std, median, mode } from 'mathjs'; -import { Utils } from "./utils"; -import { Str } from "./strings"; -import NDframe from "./generic"; -import { table } from 'table'; -import { Configs } from '../config/config'; -import { TimeSeries } from './timeseries'; -import { indexLoc } from './indexing'; - - -const utils = new Utils(); -const config = new Configs(); //package wide configuration object - - -/** - * One-dimensional ndarray with axis labels (including time series). - * The object supports both integer- and label-based indexing and provides a host of methods for performing operations involving the index. - * Operations between Series (+, -, /, , *) align values based on their associated index values– they need not be the same length. - * @param {data} data Array, JSON of 1D values - * @param {kwargs} Object {columns: column names, dtypes : data type of values} - * - * @returns Series - */ -export class Series extends NDframe { - constructor(data, kwargs) { - if (Array.isArray(data[0]) || utils.__is_object(data[0])) { - data = utils.__convert_2D_to_1D(data); - super(data, kwargs); - } else { - super(data, kwargs); - } - } - - - /** - * Returns a Series in Tensorflow's tensor format - * @returns {1D Tensor} - */ - get tensor() { - return tf.tensor(this.values).asType(this.dtypes[0]); - } - - - /** - * Returns the first n values in a Series - * @param {rows} Number of rows to return - * @returns {Series} - */ - head(rows = 5) { - if (rows > this.shape[0] || rows < 1) { - //return all values - return new Series(this.values, { columns: this.column_names }); - } else { - let data = this.values.slice(0, rows); - return new Series(data, { columns: this.column_names }); - } - - } - - - /** - * Returns the last n values in a Series - * @param {rows} number of rows to return - * @returns {Series} - */ - tail(rows = 5) { - if (rows > this.values.length || rows < 1) { - //return all values - return new Series(this.values, { columns: this.column_names }); - } else { - let data = this.values.slice(this.shape[0] - rows); - let idx = this.index.slice(this.shape[0] - rows); - let sf = new Series(data, { columns: this.column_names, index: idx }); - return sf; - } - - } - - /** - * Gets [num] number of random rows in a dataframe - * @param {num} rows --> The number of rows to return - * @param {seed} seed --> (Optional) An integer specifying the random seed that will be used to create the distribution. - * @returns {Promise} resolves to a Series object - */ - async sample(num = 5, seed = 1) { - if (num > this.shape[0]) { - throw new Error("Sample size n cannot be bigger than size of dataset"); - } - if (num < -1 || num == 0) { - throw new Error("Sample size cannot be less than -1 or 0"); - } - num = num === -1 ? this.shape[0] : num; - const shuffled_index = await tf.data.array(this.index).shuffle(num, seed).take(num).toArray(); - const sf = this.iloc(shuffled_index); - return sf; - } - - /** - * Return Addition of series and other, element-wise (binary operator add). - * Equivalent to series + other - * @param {other} Series or Number to add - * @returns {Series} - */ - add(other) { - if (utils.__is_number(other)) { - //broadcast addition - let sum = this.row_data_tensor.add(other).arraySync(); - return new Series(sum, { columns: this.column_names }); - } else { - if (this.__check_series_op_compactibility) { - let sum = this.tensor.add(other.tensor).arraySync(); - return new Series(sum, { columns: this.column_names }); - } - } - } - - - /** - * Returns the subtraction between a series and other, element-wise (binary operator subtraction). - * Equivalent to series - other - * @param {other} Series, Number to subtract - * @returns {Series} - */ - sub(other) { - if (utils.__is_number(other)) { - let sub = this.tensor.sub(other).arraySync(); - return new Series(sub, { columns: this.column_names }); - } else { - if (this.__check_series_op_compactibility) { - let sub = this.tensor.sub(other.tensor).arraySync(); - return new Series(sub, { columns: this.column_names }); - } - } - } - - - /** - * Return Multiplication of series and other, element-wise (binary operator mul). - * Equivalent to series * other - * @param {other} Series, Number to multiply with. - * @returns {Series} - */ - mul(other) { - if (utils.__is_number(other)) { - let mul = this.tensor.mul(other).arraySync(); - return new Series(mul, { columns: this.column_names }); - } else { - if (this.__check_series_op_compactibility) { - let mul = this.tensor.mul(other.tensor).arraySync(); - return new Series(mul, { columns: this.column_names }); - } - } - } - - - /** - * Return division of series and other, element-wise (binary operator div). - * Equivalent to series / other - * @param {other} Series, Number to divide with. - * @returns {Series} - */ - div(other, round = true) { - if (utils.__is_number(other)) { - let div_result = this.tensor.div(other); - return new Series(div_result.arraySync(), { columns: this.column_names, dtypes: [div_result.dtype] }); - } else { - if (this.__check_series_op_compactibility) { - let dtype; - //Check if caller needs a float division - if (round) { - dtype = "float32"; - } else { - dtype = "int32"; - } - //dtype may change after division because of how TFJS works internally, so save dtypes first - let tensor1 = this.tensor.asType(dtype); - let tensor2 = other.tensor.asType(dtype); - let result = tensor1.div(tensor2); - return new Series(result.arraySync(), { columns: this.column_names, dtypes: [result.dtype] }); - } - } - } - - /** - * Return Exponential power of series and other, element-wise (binary operator pow). - * Equivalent to series ** other - * @param {other} Series, Number to multiply with. - */ - pow(other) { - if (utils.__is_number(other)) { - let pow_result = this.tensor.pow(other).arraySync(); - return new Series(pow_result, { columns: this.column_names }); - } else { - if (this.__check_series_op_compactibility) { - let pow_result = this.tensor.pow(other.tensor).arraySync(); - return new Series(pow_result, { columns: this.column_names }); - } - } - } - - /** - * Return Modulo of series and other, element-wise (binary operator mod). - * Equivalent to series % other - * @param {other} Series, Number - * @returns {Series} - */ - mod(other) { - if (utils.__is_number(other)) { - let mod_result = this.tensor.mod(other).arraySync(); - return new Series(mod_result, { columns: this.column_names }); - } else { - if (this.__check_series_op_compactibility) { - let mod_result = this.tensor.mod(other.tensor).arraySync(); - return new Series(mod_result, { columns: this.column_names }); - } - } - } - - - /** - * Returns the mean of elements in Series - * @returns {Series} - */ - mean() { - utils._throw_str_dtype_error(this, 'mean'); - let values = utils._remove_nans(this.values); - let mean = tf.tensor(values).mean().arraySync(); - return mean; - } - - - /** - * Returns the median of elements in Series - * @returns {Series} - */ - median() { - utils._throw_str_dtype_error(this, 'median'); - let values = utils._remove_nans(this.values); - let median_val = median(values); - return median_val; - } - - - /** - * Returns the modal value of elements in Series - * @returns {Number} - */ - mode() { - utils._throw_str_dtype_error(this, 'median'); - let values = utils._remove_nans(this.values); - let modal_val = mode(values); - return modal_val; - } - - - /** - * Returns the minimum value in a Series - * @returns {Number} - */ - min() { - utils._throw_str_dtype_error(this, 'min'); - let min = this.row_data_tensor.min().arraySync(); - return min; - - } - - /** - * Returns the maximum value in a Series - * @returns {Number} - */ - max() { - utils._throw_str_dtype_error(this, 'max'); - let max = this.row_data_tensor.max().arraySync(); - return max; - - } - - - /** - * Return the sum of the values in a series. - * This is equivalent to the method tf.sum - * @returns {Number}, sum of values in Series - */ - sum() { - utils._throw_str_dtype_error(this, 'sum'); - - if (this.dtypes[0] == "boolean") { - let temp = utils._remove_nans(this.values); - let temp_sum = tf.tensor(temp).sum().arraySync(); - return Number(temp_sum); - } - let temp = utils._remove_nans(this.values); - let temp_sum = tf.tensor(temp).sum().arraySync(); - return Number(temp_sum.toFixed(5)); - } - - - /** - * Return number of non-null elements in a Series - * @returns {Number}, Count of non-null values - */ - count() { - return utils.__count_nan(this.values, true, true); - } - - - /** - * Return maximum of series and other, element-wise (binary operator div). - * @param {other} Series, Numbers to check maximum against - * @returns {Series} - */ - maximum(other) { - if (utils.__is_number(other)) { - let max_result = this.row_data_tensor.maximum(other); - return new Series(max_result.arraySync(), { - columns: this.column_names, - dtypes: max_result.dtype, - index: this.index - }); - } else { - if (this.__check_series_op_compactibility) { - let tensor1 = this.row_data_tensor; - let tensor2 = other.tensor; - let result = tensor1.maximum(tensor2).arraySync(); - return new Series(result, { columns: this.column_names, index: this.index }); - } - } - } - - /** - * Return maximum of series and other, element-wise (binary operator div). - * @param {other} Series, Numbers to check maximum against - * @returns {Series} - */ - minimum(other) { - if (utils.__is_number(other)) { - let max_result = this.row_data_tensor.minimum(other); - return new Series(max_result.arraySync(), { - columns: this.column_names, - dtypes: max_result.dtype, - index: this.index - }); - } else { - if (this.__check_series_op_compactibility) { - let tensor1 = this.tensor; - let tensor2 = other.tensor; - let result = tensor1.minimum(tensor2).arraySync(); - return new Series(result, { columns: this.column_names, index: this.index }); - } - } - } - - - /** - * Round each value in a Series to the given number of decimals. - * @param {dp} Number, Numbers of Decimal places to round to - * @returns {Series} - */ - round(dp) { - if (utils.__is_undefined(dp)) { - //use tensorflow round function to roound to the nearest whole number - let result = tf.round(this.row_data_tensor).arraySync(); - return new Series(result, { columns: this.column_names, index: this.index }); - - } else { - let result = utils.__round(this.values, dp, true); - return new Series(result, { columns: this.column_names, index: this.index }); - - } - - } - - /** - * Return sample standard deviation over requested axis. - * @returns {Number} - */ - std() { - utils._throw_str_dtype_error(this, 'std'); - let values = utils._remove_nans(this.values); - // TODO: Use Tensorflow ops for faster computation - let std_val = std(values); //using math.js - return std_val; - - } - - /** - * Return unbiased variance of Series. - * @returns {Number} - */ - var() { - utils._throw_str_dtype_error(this, 'std'); - let values = utils._remove_nans(this.values); - // TODO: Use Tensorflow ops for faster computation - let var_val = variance(values); //using math.js - return var_val; - - } - - /** - * Return a boolean same-sized object indicating if the values are NaN. NaN and undefined values, - * gets mapped to True values. Everything else gets mapped to False values. - * @return {Series} - */ - isna() { - let new_arr = this.__isna(); - let sf = new Series(new_arr, { - index: this.index, - columns: this.column_names, - dtypes: ["boolean"] - }); - return sf; - } - - /** - * Replace NaN or undefined with a specified value" - * @param {kwargs}, {"value": the new value to replace the old value with, inplace: Perform operation inplace or not} - * @return {Series} - */ - fillna(kwargs = {}) { - let params_needed = ["value", "inplace"]; - utils._throw_wrong_params_error(kwargs, params_needed); - - kwargs['inplace'] = kwargs['inplace'] || false; - - if (!("value" in kwargs)) { - throw Error('Value Error: Must specify value to replace with'); - } - - let new_values = []; - this.values.forEach((val) => { - if (isNaN(val) && typeof val != "string") { - new_values.push(kwargs['value']); - } else { - new_values.push(val); - } - }); - - if (kwargs['inplace']) { - this.data = new_values; - } else { - let sf = new Series(new_values, { - columns: this.column_names, - index: this.index, - dtypes: this.dtypes - }); - return sf; - } - } - - - /** - * Sort a Series in ascending or descending order by some criterion. - * @param {kwargs} Object, {ascending (Bool): Whether to return sorted values in ascending order or not, - * inplace (Bool): Whether to perform sorting on the original Series or not} - * @returns {Series} - */ - sort_values(kwargs = {}) { - let params_needed = ["inplace", "ascending"]; - utils._throw_wrong_params_error(kwargs, params_needed); - - if (!('ascending' in kwargs)) { - kwargs['ascending'] = true; - } - - if (!('inplace' in kwargs)) { - kwargs['inplace'] = false; - } - - let sorted_values = []; - let arr_obj = [...this.values]; - let range_idx = utils.__range(0, this.index.length - 1); - let sorted_idx = utils._sort_arr_with_index(range_idx, arr_obj, this.dtypes[0]); - - sorted_idx.forEach((idx) => { - sorted_values.push(this.values[idx]); - }); - - if (kwargs['ascending']) { - sorted_values = sorted_values.reverse(); - sorted_idx = sorted_idx.reverse(); - } - - if (kwargs['inplace']) { - this.data = sorted_values; - this.__set_index(sorted_idx); - } else { - let sf = new Series(sorted_values, { columns: this.column_names, index: sorted_idx }); - return sf; - } - } - - - /** - * Makes a deep copy of a Series - * @returns {Series} - */ - copy() { - - let sf = new Series([...this.values], { - columns: [...this.column_names], - index: [...this.index], - dtypes: [...this.dtypes[0]] - }); - return sf; - } - - - /** - * Generate descriptive statistics. - * Descriptive statistics include those that summarize the central tendency, - * dispersion and shape of a dataset’s distribution, excluding NaN values. - * @returns {Series} - */ - describe() { - if (this.dtypes[0] == "string") { - return null; - } else { - - let index = ['count', 'mean', 'std', 'min', 'median', 'max', 'variance']; - let count = this.count(); - let mean = this.mean(); - let std = this.std(); - let min = this.min(); - let median = this.median(); - let max = this.max(); - let variance = this.var(); - - let vals = [count, mean, std, min, median, max, variance]; - let sf = new Series(vals, { columns: this.columns, index: index }); - return sf; - - } - - - } - - - /** - * Returns Series with the index reset. - * This is useful when index is meaningless and needs to be reset to the default before another operation. - * @param {kwargs} {inplace: Modify the Series in place (do not create a new object} - */ - reset_index(kwargs = {}) { - let params_needed = ["inplace"]; - utils._throw_wrong_params_error(kwargs, params_needed); - - kwargs['inplace'] = kwargs['inplace'] || false; - - if (kwargs['inplace']) { - this.__reset_index(); - } else { - let sf = this.copy(); - sf.__reset_index(); - return sf; - } - } - - /** - * Returns Series with the specified index. - * Set the Series index (row labels) using an array of the same length. - * @param {kwargs} {index: Array of new index values, - * inplace: If operation should happen inplace - * } - */ - set_index(kwargs = {}) { - - let params_needed = ["index", "inplace"]; - utils._throw_wrong_params_error(kwargs, params_needed); - - - kwargs['inplace'] = kwargs['inplace'] || false; - - if (!('index' in kwargs)) { - throw Error("Index ValueError: You must specify an array of index"); - } - - if (kwargs['index'].length != this.index.length) { - throw Error(`Index LengthError: Lenght of new Index array ${kwargs['index'].length} must match lenght of existing index ${this.index.length}`); - } - - if (kwargs['inplace']) { - this.index_arr = kwargs['index']; - } else { - let sf = this.copy(); - sf.__set_index(kwargs['index']); - return sf; - } - } - - - /** - * Checks if two series are compatible for a mathematical operation - * @param {Series} other Series to compare against - * @returns{boolean} - */ - __check_series_op_compactibility(other) { - if (utils.__is_undefined(other.series)) { - throw Error("param [other] must be a Series or a single value that can be broadcasted"); - } - if (other.values.length != this.values.length) { - throw Error("Shape Error: Series shape do not match"); - } - if (this.dtypes[0] != 'float' || this.dtypes[0] != 'int') { - throw Error(`dtype Error: Cannot perform operation on type ${this.dtypes[0]} with type ${other.dtypes[0]}`); - } - if (other.dtypes[0] != 'float' || other.dtypes[0] != 'int') { - throw Error(`dtype Error: Cannot perform operation on type ${other.dtypes[0]} with type ${this.dtypes[0]}`); - } - - return true; - } - - /** - * map all the element in a column to a variable or function - * @param{callable} callable can either be a funtion or an object - * @return {Array} - */ - map(callable) { - let is_callable = utils.__is_function(callable); - - let data = this.data.map((val) => { - if (is_callable) { - return callable(val); - } else { - if (utils.__is_object(callable)) { - - if (val in callable) { - return callable[val]; - } else { - return NaN; - } - } else { - throw new Error("callable must either be a function or an object"); - } - } - }); - let sf = new Series(data, { - columns: this.column_names, - index: this.index - }); - return sf; - } - - /** - * Applies a function to each element of a Series - * @param {Function} Function to apply to each element of the series - * @return {Array} - */ - apply(callable) { - let is_callable = utils.__is_function(callable); - - if (!is_callable) { - throw new Error("the arguement most be a function"); - } - - let data = this.data.map((val) => { - return callable(val); - }); - return new Series(data, { columns: this.column_names, index: this.index }); - } - - /** - * Returns the unique value(s) in a Series - * @return {Series} - */ - unique() { - - let data_set = new Set(this.values); - let series = new Series(Array.from(data_set)); - - return series; - - } - - /** - * Return the number of unique value in a series - * @return {int} - */ - nunique() { - return this.unique().values.length; - } - - /** - * Returns unique values and their counts in a Series - * @return {Series} - */ - value_counts() { - - let s_data = this.values; - let data_dict = {}; - - for (let i = 0; i < s_data.length; i++) { - let val = s_data[i]; - - if (val in data_dict) { - data_dict[val] += 1; - } else { - data_dict[val] = 1; - } - } - - let index = Object.keys(data_dict).map((x) => { - return parseInt(x) ? parseInt(x) : x; - }); - let data = Object.values(data_dict); - - let series = new Series(data, { index: index }); - return series; - - } - - /** - * Returns the absolute values in Series - * @return {series} - */ - abs() { - let abs_data = this.row_data_tensor.abs().arraySync(); - return new Series(utils.__round(abs_data, 2, true)); - } - - - /** - * Returns the cumulative sum over a Series - * @return {Series} - */ - cumsum() { - let data = this.__cum_ops("sum"); - return data; - } - - /** - * Returns cumulative minimum over a Series - * @returns series - */ - cummin() { - let data = this.__cum_ops("min"); - return data; - } - - /** - * Returns cumulative maximum over a Series - * @returns series - */ - cummax() { - let data = this.__cum_ops("max"); - return data; - } - - /** - * Returns cumulative product over a Series - * @returns series - */ - cumprod() { - let data = this.__cum_ops("prod"); - return data; - } - - - /** - * Returns Less than of series and other. Supports element wise operations - * @param {other} Series, Scalar - * @return {Series} - */ - lt(other) { - return this.__bool_ops(other, "lt"); - } - - /** - * Returns Greater than of series and other. Supports element wise operations - * @param {other} Series, Scalar - * @return {Series} - */ - gt(other) { - return this.__bool_ops(other, "gt"); - } - - /** - * Returns Less than or Equal to of series and other. Supports element wise operations - * @param {other} Series, Scalar - * @return {Series} - */ - le(other) { - return this.__bool_ops(other, "le"); - } - - /** - * Returns Greater than or Equal to of series and other. Supports element wise operations - * @param {other} Series, Scalar - * @return {Series} - */ - ge(other) { - return this.__bool_ops(other, "ge"); - } - - /** - * Returns Not Equal to of series and other. Supports element wise operations - * @param {other} Series, Scalar - * @return {Series} - */ - ne(other) { - return this.__bool_ops(other, "ne"); - } - - - /** - * Returns Equal to of series and other. Supports element wise operations - * @param {other} Series, Scalar - * @return {Series} - */ - eq(other) { - return this.__bool_ops(other, "eq"); - } - - /** - * Replace all occurence of a value with a new value" - * @param {kwargs}, {"replace": the value you want to replace, - * "with": the new value you want to replace the olde value with, - * inplace: Perform operation inplace or not} - * @return {Series} - */ - replace(kwargs = {}) { - let params_needed = ["replace", "with", "inplace"]; - utils._throw_wrong_params_error(kwargs, params_needed); - - kwargs['inplace'] = kwargs['inplace'] || false; - - if (!("replace" in kwargs)) { - throw Error("Params Error: Must specify param 'replace'"); - } - - if (!("with" in kwargs)) { - throw Error("Params Error: Must specify param 'with'"); - } - - let replaced_arr = []; - let old_arr = this.values; - - old_arr.forEach((val) => { - if (val == kwargs['replace']) { - replaced_arr.push(kwargs['with']); - } else { - replaced_arr.push(val); - } - }); - - if (kwargs['inplace']) { - this.data = replaced_arr; - } else { - let sf = new Series(replaced_arr, { - index: this.index, - columns: this.columns, - dtypes: this.dtypes - }); - return sf; - } - - } - - - /** - * Return a new Series with missing values (NaN) removed. - * @param {kwargs} {inplace: Perform operation inplace or not} - * @return {Series} - */ - dropna(kwargs = {}) { - let params_needed = ["inplace"]; - utils._throw_wrong_params_error(kwargs, params_needed); - - kwargs['inplace'] = kwargs['inplace'] || false; - - let old_values = this.values; - let old_index = this.index; - let new_values = []; - let new_index = []; - let isna_vals = this.isna().values; - - isna_vals.forEach((val, i) => { - if (!val) { - new_values.push(old_values[i]); - new_index.push(old_index[i]); - } - }); - if (kwargs['inplace']) { - this.index_arr = new_index; - this.data = new_values; - } else { - let sf = new Series(new_values, { - columns: this.column_names, - index: new_index, - dtypes: this.dtypes - }); - return sf; - } - - } - - /** - * Return the integer indices that would sort the Series. - * @param {ascending} boolean true: will sort the Series in ascending order, false: will sort in descending order - * @return {Series} - */ - argsort(ascending = true) { - let sorted_index = this.sort_values({ ascending: ascending }).index; - let sf = new Series(sorted_index); - return sf; - } - - /** - * Return int position of the largest value in the Series. - * @return {Number} - */ - argmax() { - return this.row_data_tensor.argMax().arraySync(); - } - - - /** - * Return int position of the smallest value in the Series. - * @param {ascending} boolean true: will sort the Series in ascending order, false: will sort in descending order - * @return {Series} - */ - argmin() { - return this.row_data_tensor.argMin().arraySync(); - - } - - - /** - * Returns dtype of Series - * @return {string} - */ - get dtype() { - return this.dtypes[0]; - } - - /** - * Return Series with duplicate values removed - * @param {kwargs} {inplace: Perform operation inplace or not, - * keep: first | last which dupliate value to keep} - * @return {Series} - */ - drop_duplicates(kwargs = {}) { - let params_needed = ["inplace", "keep"]; - utils._throw_wrong_params_error(kwargs, params_needed); - - kwargs['inplace'] = kwargs['inplace'] || false; - kwargs['keep'] = kwargs['keep'] || "first"; - - - let data_arr, old_index; - if (kwargs['keep'] == "last") { - data_arr = this.values.reverse(); - old_index = this.index.reverse(); - } else { - data_arr = this.values; - old_index = this.index; - } - - let new_index = []; - let new_arr = []; - - data_arr.forEach((val, i) => { - if (!new_arr.includes(val)) { - new_index.push(old_index[i]); - new_arr.push(val); - } - }); - - if (kwargs['keep'] == "last") { - //re-reversed the array and index to its true ordering - new_arr = new_arr.reverse(); - new_index = new_index.reverse(); - } - - if (kwargs['inplace']) { - this.data = new_arr; - this.index_arr = new_index; - } else { - let sf = new Series(new_arr, { - index: new_index, - columns: this.column_names, - dtypes: this.dtypes - }); - return sf; - } - - } - - - /** - * Prints the data in a Series as a grid of row and columns - */ - toString() { - let table_width = 20; - let table_truncate = 20; - let max_row = config.get_max_row; - let data_arr = []; - let table_config = {}; - let header = [""].concat(this.columns); - let idx, data; - - if (this.values.length > max_row) { - //slice Object to show a max of [max_rows] - data = this.values.slice(0, max_row); - idx = this.index.slice(0, max_row); - } else { - data = this.values; - idx = this.index; - } - - idx.forEach((val, i) => { - let row = [val].concat(data[i]); - data_arr.push(row); - }); - - //set column width of all columns - table_config[0] = 10; - table_config[1] = { width: table_width, truncate: table_truncate }; - - let table_data = [header].concat(data_arr); //Add the column names to values before printing - return table(table_data, { columns: table_config }); - } - - /** - * Perform boolean operations on bool values - * @param {*} other Other series to compare with - * @param {string} b_ops name of operation to perform [ne, ge, le, gt, lt, eq] - */ - __bool_ops(other, b_ops) { - let r_series; - let l_series = this.values; - - if (typeof other == "number") { - r_series = [...l_series].fill(other); //create array of repeated value for broadcasting - } else { - if (!(other instanceof Series)) { - throw new Error("Value Error: 'other' must be an instance of Series"); - } - r_series = other.values; - } - - if (!(l_series.length === r_series.length)) { - throw new Error("Length Error: Both series must be of the same length"); - } - - let data = []; - - for (let i = 0; i < l_series.length; i++) { - - let l_val = l_series[i]; - let r_val = r_series[i]; - let bool = null; - switch (b_ops) { - - case "lt": - bool = l_val < r_val ? true : false; - data.push(bool); - break; - case "gt": - bool = l_val > r_val ? true : false; - data.push(bool); - break; - case "le": - bool = l_val <= r_val ? true : false; - data.push(bool); - break; - case "ge": - bool = l_val >= r_val ? true : false; - data.push(bool); - break; - case "ne": - bool = l_val != r_val ? true : false; - data.push(bool); - break; - case "eq": - bool = l_val === r_val ? true : false; - data.push(bool); - break; - } - } - return new Series(data); - - } - - /** - * perform cumulative operation on series data - * @returns array - */ - __cum_ops(ops) { - - let s_data = this.values; - let temp_val = s_data[0]; - let data = [temp_val]; - - for (let i = 1; i < s_data.length; i++) { - - let curr_val = s_data[i]; - switch (ops) { - case "max": - if (curr_val > temp_val) { - data.push(curr_val); - temp_val = curr_val; - } else { - data.push(temp_val); - } - break; - case "min": - if (curr_val < temp_val) { - data.push(curr_val); - temp_val = curr_val; - } else { - data.push(temp_val); - } - break; - case "sum": - temp_val = temp_val + curr_val; - data.push(temp_val); - break; - case "prod": - temp_val = temp_val * curr_val; - data.push(temp_val); - break; - - } - } - return new Series(data); - } - - - /** - * Cast Series to specified data type - * @param {string} dtype data type to cast to [float32, int32, string, boolean] - *@returns {Series} - */ - astype(dtype) { - const __supported_dtypes = ['float32', "int32", 'string', 'boolean']; - - if (!dtype) { - throw Error("Value Error: Please specify dtype to cast to"); - } - - if (!__supported_dtypes.includes(dtype)) { - throw Error(`dtype ${dtype} not supported. dtype must be one of ${__supported_dtypes}`); - } - - let col_values = this.values; - let new_values = []; - - switch (dtype) { - case "float32": - col_values.forEach((val) => { - new_values.push(Number(val)); - }); - break; - case "int32": - col_values.forEach((val) => { - new_values.push(Number(Number(val).toFixed())); - }); - break; - case "string": - col_values.forEach((val) => { - new_values.push(String(val)); - }); - break; - case "boolean": - col_values.forEach((val) => { - new_values.push(Boolean(val)); - }); - break; - default: - break; - } - - let sf = new Series(new_values, { dtypes: dtype, index: this.index }); - return sf; - - } - - - /** - * Exposes numerous string methods to manipulate Series of type string - */ - get str() { - if (this.dtypes[0] == "string") { - return new Str(this); - } else { - throw new Error("Cannot call accessor str on non-string type"); - } - - } - - /** - * Returns Danfo Time Object that exposes different time properties - */ - get dt() { - let timeseries = new TimeSeries({ data: this }); // parsed to date-time - timeseries.preprocessed(); - return timeseries; - - } - - /** - * Displays the data in a console friendly manner - */ - print() { - console.log(this + ""); - } - - - /** - * Make plots of Series or DataFrame. - * Uses the Plotly as backend, so therefore supports Plotly's configuration parameters - * @param {string} div Name of the div to show the plot - * @returns {Class} Plot class that expoese different plot type - */ - plot(div) { - const plt = new Plot(this, div); - return plt; - } - - /** - * Slice series by index - * @param {Array} row list of index to slice by - * @returns Series - */ - iloc(row) { - let kwargs = {}; - kwargs["rows"] = row; - kwargs["type"] = "iloc"; - - let [new_data, columns, rows] = indexLoc(this, kwargs); - let sf = new Series(new_data, { columns: columns, index: rows }); - - return sf; - } - - /** - * Adds new values to the end of a Series - * @param {Object} val Single value | Array | Series to append to the object - * @param {Boolean} inplace Whether to perform operation inplace or not - */ - append(val, inplace = false) { - if (inplace) { - let self = this; - if (Array.isArray(val)) { - val.forEach((el, i) => { - self.data.push(el); - self.index_arr.push(i); - }); - } else if (val instanceof Series) { - let value = val.values; - let old_index = val.index; - value.forEach((el, i) => { - self.data.push(el); - self.index_arr.push(old_index[i]); - }); - } else { - self.data.push(val); - self.index_arr.push(0); - } - } else { - let sf = this.copy(); - if (Array.isArray(val)) { - val.forEach((el, i) => { - sf.data.push(el); - sf.index_arr.push(i); - }); - } else if (val instanceof Series) { - let value = val.values; - let old_index = val.index; - value.forEach((el, i) => { - sf.data.push(el); - sf.index_arr.push(old_index[i]); - }); - } else { - sf.data.push(val); - sf.index_arr.push(0); - } - return sf; - } - - } - -} - diff --git a/danfojs-node/src/core/strings.js b/danfojs-node/src/core/strings.js deleted file mode 100644 index e767e0ee..00000000 --- a/danfojs-node/src/core/strings.js +++ /dev/null @@ -1,423 +0,0 @@ -import { Series } from "./series"; - -/** - * String methods applied on Series and DataFrames - */ -export class Str { - constructor(series) { - this.series = series; - this.array = series.values; - } - - /** - * Converts all characters to lowercase. - * @return {array} - */ - toLowerCase() { - let new_arr = []; - this.array.map((val) => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(val); - } else { - new_arr.push(val.toLowerCase()); - } - - }); - let sf = this.__create_new_sf_from(new_arr, this.series); - return sf; - } - - /** - * Converts all characters to uppercase. - * @return {array} - */ - toUpperCase() { - let new_arr = []; - this.array.map((val) => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(val); - } else { - new_arr.push(val.toUpperCase()); - } - - }); - let sf = this.__create_new_sf_from(new_arr, this.series); - return sf; - } - - /** - * Capitalize first string - * @return {array} - */ - capitalize() { - let new_arr = []; - this.array.map((val) => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(val); - } else { - let f_char = val.slice(0, 1); - let l_char = val.slice(1); - let new_str = `${f_char.toUpperCase()}${l_char.toLowerCase()}`; - new_arr.push(new_str); - } - - }); - let sf = this.__create_new_sf_from(new_arr, this.series); - return sf; - - } - - /** - * Returns the character at the specified index (position) - * @params {index} index position of character - * @return {array} - */ - charAt(index = 0) { - let new_arr = []; - this.array.map((val) => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(val); - } else { - new_arr.push(val.charAt(index)); - } - }); - let sf = this.__create_new_sf_from(new_arr, this.series); - return sf; - } - - /** - * Joins two or more strings/arrays. 0 joins from the start - * @params {other} string|array to concatenate with. - * @params {position} where to concat the string from. O concats from the start, 1 concats from the end - * @params {isArray} whether operation is performed on Array or not - * @return {array} - */ - concat(other = "", position = 1) { - if (Array.isArray(other)) { - let final_arr = []; - for (let i = 0; i < other.length; i++) { - let l_str = this.array[i]; - let r_str = other[i]; - if (position == 1) { - final_arr.push(l_str.concat(r_str)); - } else { - final_arr.push(r_str.concat(l_str)); - } - - } - let sf = this.__create_new_sf_from(final_arr, this.series); - return sf; - } else { - - let new_arr = []; - - this.array.map((val) => { - if (position == 1) { - if (isNaN(val) && typeof val != "string") { - new_arr.push(String(val).concat(other)); - } else { - new_arr.push(val.concat(other)); - } - - } else { - if (isNaN(val) && typeof val != "string") { - new_arr.push(other.concat(String(val))); - } else { - new_arr.push(other.concat(val)); - } - } - }); - let sf = this.__create_new_sf_from(new_arr, this.series); - return sf; - } - - } - - - /** - * Checks whether a string begins with specified characters - * @params {String | Character} String or Character to check against - * @return {array} - */ - startsWith(str = "") { - let new_arr = []; - this.array.forEach((val) => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(false); - } else { - new_arr.push(val.startsWith(str)); - } - }); - let sf = this.__create_new_sf_from(new_arr, this.series); - return sf; - } - - /** - * Checks whether a string ends with specified characters - * @params {String | Character} String or Character to check against - * @return {array} - */ - endsWith(str = "") { - let new_arr = []; - this.array.map((val) => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(false); - } else { - new_arr.push(val.endsWith(str)); - } - }); - let sf = this.__create_new_sf_from(new_arr, this.series); - return sf; - } - - /** - * Checks whether a string contains the specified string/characters - * @params {String | Character} String or Character to check against - * @return {array} - */ - includes(str = "") { - let new_arr = []; - this.array.map((val) => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(false); - } else { - new_arr.push(val.includes(str)); - } - }); - let sf = this.__create_new_sf_from(new_arr, this.series); - return sf; - } - - /** - * Returns the position of the first found occurrence of a specified value in a string - * @params {String | Character} String or Character to check against - * @return {array} - */ - indexOf(str = "") { - let new_arr = []; - this.array.map((val) => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(-1); - } else { - new_arr.push(val.indexOf(str)); - } - }); - let sf = this.__create_new_sf_from(new_arr, this.series); - return sf; - } - - /** - * Returns the position of the last found occurrence of a specified value in a string - * @params {str: String | Character} String or Character to check against - * @return {array} - */ - lastIndexOf(str = "") { - let new_arr = []; - this.array.map((val) => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(-1); - } else { - new_arr.push(val.lastIndexOf(str)); - } - }); - let sf = this.__create_new_sf_from(new_arr, this.series); - return sf; - } - - - /** - * Searches a string for a specified value, or a regular expression, and returns a new string where the specified values are replaced - * @params {searchValue: String | Character} string value to replace - * @params {replaceValue: String | Character} string to replace with - * @return {array} - */ - replace(searchValue = "", replaceValue = "") { - let new_arr = []; - this.array.map((val) => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(val); - } else { - new_arr.push(val.replace(searchValue, replaceValue)); - } - }); - let sf = this.__create_new_sf_from(new_arr, this.series); - return sf; - } - - /** - * Returns a new string with a specified number of copies of an existing string - * @params {num: Integer} Number of times to repeat - * @return {array} - */ - repeat(num = 1) { - let new_arr = []; - this.array.map((val) => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(val); - } else { - new_arr.push(val.repeat(num)); - } - }); - let sf = this.__create_new_sf_from(new_arr, this.series); - return sf; - } - - - /** - * Searches a string for a specified value, or regular expression, and returns the position of the match - * @params {str: String | Character} String or Character to check against - * @return {array} - */ - search(str = "") { - let new_arr = []; - this.array.map((val) => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(-1); - } else { - new_arr.push(val.search(str)); - } - }); - let sf = this.__create_new_sf_from(new_arr, this.series); - return sf; - } - - /** - * Extracts a part of a string and returns a new string - * @params {startIndex: Int} index position of start character - * @params {endIndex: Int} index position of last character - * @return {array} - */ - slice(startIndex = 0, endIndex = 1) { - let new_arr = []; - this.array.map((val) => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(val); - } else { - new_arr.push(val.slice(startIndex, endIndex)); - } - }); - let sf = this.__create_new_sf_from(new_arr, this.series); - return sf; - } - - /** - * Splits a string into an array of substrings - * @params {val: string} string or character to split at - * @params {endIndex: Int} index position of last character - * @return {array} - */ - split(splitVal = " ") { - let new_arr = []; - this.array.map((val) => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(val); - } else { - new_arr.push(val.split(splitVal)); - } - }); - let sf = this.__create_new_sf_from(new_arr, this.series); - return sf; - } - - /** - * Extracts the characters from a string, beginning at a specified start position, and through the specified number of character - * @params {startIndex: Int} index position of start character - * @params {num: Int} number of characters to return - * @return {array} - */ - substr(startIndex = 0, num = 1) { - let new_arr = []; - this.array.map((val) => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(val); - } else { - new_arr.push(val.substr(startIndex, num)); - } - }); - let sf = this.__create_new_sf_from(new_arr, this.series); - return sf; - } - - /** - * Extracts the characters from a string, between two specified indices - * @params {startIndex: Int} index position of start character - * @params {endIndex: Int} index position of last character - * @return {array} - */ - substring(startIndex = 0, endIndex = 1) { - let new_arr = []; - this.array.map((val) => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(val); - } else { - new_arr.push(val.substring(startIndex, endIndex)); - } - }); - let sf = this.__create_new_sf_from(new_arr, this.series); - return sf; - } - - /** - * Removes whitespace from both ends of a string - * @return {array} - */ - trim() { - let new_arr = []; - this.array.map((val) => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(val); - } else { - new_arr.push(val.trim()); - } - }); - let sf = this.__create_new_sf_from(new_arr, this.series); - return sf; - } - - /** - * Joins strings to specified value - * @params {valToJoin} string value to join to the array - * @params {joinChar} Character to Join with - * @return {array} - */ - join(valToJoin = "", joinChar = " ") { - let new_arr = []; - this.array.map((val) => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(val); - } else { - let l_char = val; - let r_char = valToJoin; - let new_char = `${l_char}${joinChar}${r_char}`; - new_arr.push(new_char); - } - }); - let sf = this.__create_new_sf_from(new_arr, this.series); - return sf; - } - - /** - * Counts the number of characters in string - * @return {array} - */ - len() { - let new_arr = []; - this.array.map((val) => { - if (isNaN(val) && typeof val != "string") { - new_arr.push(val); - } else { - new_arr.push(val.length); - } - }); - let sf = this.__create_new_sf_from(new_arr, this.series); - return sf; - } - - //create a new series - __create_new_sf_from(new_val, series) { - let sf = new Series(new_val, { columns: series.column_names, index: series.index }); - return sf; - } - - -} diff --git a/danfojs-node/src/core/timeseries.js b/danfojs-node/src/core/timeseries.js deleted file mode 100644 index 1d8af672..00000000 --- a/danfojs-node/src/core/timeseries.js +++ /dev/null @@ -1,305 +0,0 @@ -import { Utils } from "./utils"; -import { Series } from "./series"; -const utils = new Utils; - - -/** - * @class - * @description Handle all datetime operations - * @param {kwargs} Object {"data":[array of string], "format": string} - */ -export class TimeSeries { - constructor(kwargs) { - - utils.__in_object(kwargs, "data", "specify the data"); - - if (kwargs["data"] instanceof Series) { - this.data = kwargs["data"].values; - } else { - this.data = kwargs["data"]; - } - - this.format = kwargs["format"] || null; - - this.keys = { //key: len - "Y": 4, - "m": 2, - "H": 2, - "M": 2, - "S": 2, - "b": 3, - "d": 2, - "-": 1 - }; - - this.__in_format = [ "%Y-m-d%", "%m-d-Y%", "%m-d-Y H%M%S%" ]; - - this.__monthName = [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" ]; - this.__weekName = [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ]; - - } - - /** - * @description preprocessed the data into desirable structure - */ - preprocessed() { - - let format_values = null; - if (this.format) { - format_values = this.generate_format(); - } - - this.date_list = []; - - for (let i = 0; i < this.data.length; i++) { - - let date_string = this.data[i]; - - if (this.format && !this.__in_format.includes(this.format)) { - - let format_dateString = this.__apply_format(date_string, format_values); - let valueDate = new Date(format_dateString); - - this.__is_validDate(valueDate); - - this.date_list.push(valueDate); - - } else if (this.is_timestamp(date_string)) { - - let string2int = parseInt(date_string); - let valueDate = new Date(string2int); - - this.__is_validDate(valueDate); - this.date_list.push(valueDate); - } else { - let valueDate = new Date(date_string); - - this.__is_validDate(valueDate); - this.date_list.push(valueDate); - } - } - - // return this.date_list; - - } - - /** - * @description if format is given, apply the format on each element of the data - * @return string - */ - __apply_format(elem, format) { - - let date_string = ""; - - let temp_val = 0; - - - for (let index in format) { - - let value = format[index]; - - if (index == 0) { - date_string += elem.slice(0, value); - - } else if (index > 4) { - - date_string += ":" + elem.slice(temp_val, temp_val + value); - } else if (index == 4) { - date_string += " " + elem.slice(temp_val, temp_val + value); - } else if (index > 0 && index <= 2) { - date_string += "-" + elem.slice(temp_val, temp_val + value); - } - - temp_val += value; - } - - return date_string; - - } - /** - * @description convert format string to their respective value. - */ - generate_format() { - - let format_list = this.format.split(""); - - let self = this; - let format_keys = format_list.filter(function (key) { - return utils.__key_in_object(self.keys, key); - }); - - let format_value = format_keys.map(function (val) { - return self.keys[val]; - }); - - - return format_value; - } - - /** - * @description check if a string is a timestamp - * @param {date_string} date_string [string] - */ - is_timestamp(date_string) { - - let string2int = parseInt(date_string); - let int2string = String(string2int); - - if (isNaN(string2int) || (int2string.length < date_string.length)) { - return false; - } else { - return true; - } - } - - /** - * @description check if a date instance returns Invalid date - * @param {date_instance} instance of new Date() - */ - __is_validDate(date_instance) { - - if (date_instance.toDateString() == "Invalid Date") { - throw new Error("Invalid date, the date format not recognise"); - } - } - - /** - * @description abstract all date operations - * @param {*} callback [FUNCTION] - * @return series - */ - __date_ops(callback) { - - let data = this.date_list.map(function (date_instance) { - - return callback(date_instance); - }); - - // eslint-disable-next-line no-self-assign - let series = new Series(data = data); - - return series; - } - - /** - * @description obtain the month in a date. - * @return Series - */ - month() { - - let series = this.__date_ops(function (date_instance) { - return date_instance.getMonth(); - }); - - return series; - } - - /** - * @return Series - */ - hour() { - let series = this.__date_ops(function (date_instance) { - return date_instance.getHours(); - }); - - return series; - } - - /** - * @return Series - */ - day() { - let series = this.__date_ops(function (date_instance) { - return date_instance.getDay(); - }); - - return series; - } - - /** - * @description generate year frome date instance - * @return Series - */ - year() { - - let series = this.__date_ops(function (date_instance) { - return date_instance.getFullYear(); - }); - - return series; - } - - /** - * @description generate month name - * @return Series - */ - month_name() { - - let self = this; - let series = this.__date_ops(function (date_instance) { - return self.__monthName[date_instance.getMonth()]; - }); - - return series; - } - - /** - * @description generate days of the week - * @return Series - */ - weekdays() { - let self = this; - let series = this.__date_ops(function (date_instance) { - return self.__weekName[date_instance.getDay()]; - }); - - return series; - } - - /** - * @description day of the month - * @return Series - */ - monthday() { - let series = this.__date_ops(function (date_instance) { - return date_instance.getDate(); - }); - - return series; - } - - /** - * @description obtain the seconds in a date - * @return Series - */ - seconds() { - let series = this.__date_ops(function (date_instance) { - return date_instance.getSeconds(); - }); - - return series; - } - - /** - * @description obtain the minutes in a date - * @return Series - */ - minutes() { - let series = this.__date_ops(function (date_instance) { - return date_instance.getMinutes(); - }); - - return series; - } - -} - - -export const to_datetime = (kwargs) => { - - let timeseries = new TimeSeries(kwargs); // parsed to date-time - timeseries.preprocessed(); // generate date-time list - - return timeseries; - -}; diff --git a/danfojs-node/src/core/utils.js b/danfojs-node/src/core/utils.js deleted file mode 100644 index b4931c1a..00000000 --- a/danfojs-node/src/core/utils.js +++ /dev/null @@ -1,688 +0,0 @@ -import * as tf from '@tensorflow/tfjs-node'; -import { Configs } from "../config/config"; - -const config = new Configs(); - -export class Utils { - //remove an element from an array - remove(arr, index) { - let new_arr = arr.filter(function (val, i) { - return i != index; - }); - - return new_arr; - } - - //filter element present in an aray - __remove_arr(arr, index) { - let new_arr = arr.filter(function (val, i) { - return !index.includes(i); - }); - - return new_arr; - } - - // Returns if a value is a string - __is_string(value) { - return typeof value === "string" || value instanceof String; - } - - // Returns if a value is really a number - __is_number(value) { - return typeof value === "number" && isFinite(value); - } - - // Returns if a value is an object - __is_object(value) { - return value && typeof value === "object" && value.constructor && value.constructor.name === "Object"; - } - - // Returns if a value is null - __is_null(value) { - return value === null; - } - - // Returns if a value is undefined - __is_undefined(value) { - return typeof value === "undefined"; - } - - /** - * Optimized version of random sampling from an array, as implemented in Python - * - * - Chooses k unique random elements from a population sequence or set. - - Returns a new list containing elements from the population while - leaving the original population unchanged. The resulting list is - in selection order so that all sub-slices will also be valid random - samples. This allows raffle winners (the sample) to be partitioned - into grand prize and second place winners (the subslices). - - Members of the population need not be hashable or unique. If the - population contains repeats, then each occurrence is a possible - selection in the sample. - - To choose a sample in a range of integers, use range as an argument. - This is especially fast and space efficient for sampling from a - large population: sample(range(10000000), 60) - - Sampling without replacement entails tracking either potential - selections (the array) in a list or previous selections in a set. - - When the number of selections is small compared to the - population, then tracking selections is efficient, requiring - only a small set and an occasional reselection. For - a larger number of selections, the array tracking method is - preferred since the list takes less space than the - set and it doesn't suffer from frequent reselections. - * - * @param {*} array The array to sample values from randomly - * @param {*} num The number of elements to sample randomly - */ - // Chooses k unique random elements from array. - __sample_from_iter(array, k, destructive) { - var n = array.length; - - if (k < 0 || k > n) - throw new RangeError("Sample larger than population or is negative"); - - if ( - destructive || - n <= (k <= 5 ? 21 : 21 + Math.pow(4, Math.ceil(Math.log(k * 3, 4)))) - ) { - if (!destructive) array = Array.prototype.slice.call(array); - for (var i = 0; i < k; i++) { - // invariant: non-selected at [i,n) - var j = (i + Math.random() * (n - i)) | 0; - var x = array[i]; - array[i] = array[j]; - array[j] = x; - } - array.length = k; // truncate - return array; - } else { - var selected = new Set(); - // eslint-disable-next-line no-empty - while (selected.add((Math.random() * n) | 0).size < k) { } - // eslint-disable-next-line no-undef - return Array.prototype.map.call(selected, (i) => population[i]); - } - } - - //generate integers between two set of numbers - __range(start, end) { - let value = tf.linspace(start, end, end - start + 1).arraySync(); - return value; - } - - //check if key is in object - __key_in_object(object, key) { - if (Object.prototype.hasOwnProperty.call(object, key)) { - return true; - } else { - return false; - } - } - - //transpose row array into column wise array - __get_col_values(data) { - let row_len = data.length; - let cols_len = data[0].length; - var cols_arr = []; - for (var i = 0; i <= cols_len - 1; i++) { - let temp_col = []; - for (let j = 0; j < row_len; j++) { - temp_col.push(data[j][i]); - } - cols_arr.push(temp_col); - } - return cols_arr; - } - - /** - * retrieve row array and column names from object of the form {a: [1,2,3,4], b: [30,20, 30, 20}] - * @param {*} data - */ - _get_row_and_col_values(data) { - let col_names = Object.keys(data); - let col_data = Object.values(data); - let first_col_len = col_data[0].length; - - col_data.forEach((data) => { - if (data.length != first_col_len) { - throw Error("Length Error: Length of columns must be the same!"); - } - }); - let rows_len = col_data[0].length; - let cols_len = col_names.length; - var rows_arr = []; - - for (var i = 0; i <= rows_len - 1; i++) { - var temp_row = []; - for (let j = 0; j < cols_len; j++) { - let _arr = col_data[j]; - temp_row.push(_arr[i]); - } - rows_arr.push(temp_row); - } - return [rows_arr, col_names]; - } - - //converts a 2D array of array to 1D for Series Class - __convert_2D_to_1D(data) { - let new_data = []; - data.map((val) => { - if (this.__is_object(val)) { - new_data.push(JSON.stringify(val)); - } else { - new_data.push(`${val}`); - } - }); - return new_data; - } - - __replace_undefined_with_NaN(data, isSeries) { - if (isSeries) { - let temp_arr = []; - data.forEach((val) => { - if (typeof val === "undefined" || val == Infinity || val == null) { - temp_arr.push(NaN); - } else { - temp_arr.push(val); - } - }); - return temp_arr; - } else { - let full_arr = []; - data.forEach((val) => { - var temp_arr = []; - val.forEach((ele) => { - if (typeof ele === "undefined" || ele == Infinity || ele == null) { - temp_arr.push(NaN); - } else { - temp_arr.push(ele); - } - }); - full_arr.push(temp_arr); - }); - return full_arr; - } - } - - __checker(arr_val) { - let dtypes = []; - let lim; - let int_tracker = []; - let float_tracker = []; - let string_tracker = []; - let bool_tracker = []; - - if (arr_val.length == 0) { - dtypes.push("string"); - } - - if (arr_val.length < config.get_dtype_test_lim) { - lim = arr_val.length - 1; - } else { - lim = config.get_dtype_test_lim - 1; - } - arr_val.forEach((ele, indx) => { - let count = indx; - if (typeof ele == "boolean") { - float_tracker.push(false); - int_tracker.push(false); - string_tracker.push(false); - bool_tracker.push(true); - } else if (isNaN(ele) && typeof ele != "string") { - float_tracker.push(true); - int_tracker.push(false); - string_tracker.push(false); - bool_tracker.push(false); - } else if (!isNaN(Number(ele))) { - if (ele.toString().includes(".")) { - float_tracker.push(true); - int_tracker.push(false); - string_tracker.push(false); - bool_tracker.push(false); - } else { - float_tracker.push(false); - int_tracker.push(true); - string_tracker.push(false); - bool_tracker.push(false); - } - } else { - float_tracker.push(false); - int_tracker.push(false); - string_tracker.push(true); - bool_tracker.push(false); - } - - if (count == lim) { - //if atleast one string appears return string dtype - const even = (element) => element == true; - if (string_tracker.some(even)) { - dtypes = "string"; - } else if (float_tracker.some(even)) { - dtypes = "float32"; - } else if (int_tracker.some(even)) { - dtypes = "int32"; - } else if (bool_tracker.some(even)) { - dtypes = "boolean"; - } else { - dtypes = "undefined"; - } - } - }); - - return dtypes; - } - //infer types from an array of array - __get_t(arr_val) { - const self = this; - if (this.__is_1D_array(arr_val)) { - return [this.__checker(arr_val)]; - } else { - const dtypes = arr_val.map((arr) => { - return self.__checker(arr); - }); - return dtypes; - } - } - - __unique(data) { - let unique = new Set(); - - data.map(function (val) { - unique.add(val[0]); - }); - - let unique_array = Array.from(unique); - - return unique_array; - } - - //second version of In object - __in_object(object, key, message) { - if (!Object.prototype.hasOwnProperty.call(object, key)) { - throw new Error(message); - } - } - - //check if a array is 1D - __is_1D_array(arr) { - if ( - typeof arr[0] == "number" || - typeof arr[0] == "string" || - typeof arr[0] == "boolean" - ) { - return true; - } else { - return false; - } - } - - //converts an array to object with index as value - __arr_to_obj(arr) { - let arr_map = {}; - arr.forEach((ele, i) => { - arr_map[ele] = i; - }); - return arr_map; - } - - /** - * count the NaN and non-NaN values present in an array - * @param {Array} arr Array object - * @param {Boolean} val whether to return the value count instead of the null count - * @param {Boolean} isSeries Whether the Obj is of type series or not - */ - __count_nan(arr, return_val = true, isSeries) { - if (isSeries) { - let null_count = 0; - let val_count = 0; - arr.forEach((ele) => { - if (Number.isNaN(ele)) { - null_count = null_count + 1; - } else { - val_count = val_count + 1; - } - }); - if (return_val) { - return val_count; - } else { - return null_count; - } - } else { - let result_arr = []; - arr.forEach((ele_arr) => { - let null_count = 0; - let val_count = 0; - ele_arr.forEach((ele) => { - if (Number.isNaN(ele)) { - null_count = null_count + 1; - } else { - val_count = val_count + 1; - } - }); - if (return_val) { - result_arr.push(val_count); - } else { - result_arr.push(null_count); - } - }); - return result_arr; - } - } - - //computes the median of an array - __median(arr, isSeries) { - if (isSeries) { - const sorted = arr.slice().sort((a, b) => a - b); - const middle = Math.floor(sorted.length / 2); - - if (sorted.length % 2 === 0) { - return (sorted[middle - 1] + sorted[middle]) / 2; - } - - return sorted[middle]; - } else { - let result_arr = []; - arr.map((ele) => { - const sorted = ele.slice().sort((a, b) => a - b); - const middle = Math.floor(sorted.length / 2); - - if (sorted.length % 2 === 0) { - result_arr.push((sorted[middle - 1] + sorted[middle]) / 2); - } else { - result_arr.push(sorted[middle]); - } - }); - return result_arr; - } - } - - //computes the mode(s) of an array - __mode(arr) { - var modes = [], - count = [], - i, - maxIndex = 0; - - arr.forEach((val) => { - count[val] = (count[val] || 0) + 1; - if (count[val] > maxIndex) { - maxIndex = count[val]; - } - }); - - for (i in count) - if (this.__key_in_object(count, i)) { - if (count[i] === maxIndex) { - modes.push(Number(i)); - } - } - - return modes; - } - - //round elements of an array to ndp - __round(arr, dp = 2, isSeries) { - if (dp < 0) { - dp = 1; - } - if (isSeries) { - let new_arr = []; - arr.map((val) => { - new_arr.push(Number(val.toFixed(dp))); - }); - - return new_arr; - } else { - let result_arr = []; - arr.map((arr_ele) => { - let new_arr = []; - arr_ele.map((val) => { - new_arr.push(Number(val.toFixed(dp))); - }); - result_arr.push(new_arr); - }); - return result_arr; - } - } - - //check a variable is a function - __is_function(variable) { - return typeof variable == "function"; - } - - //generate a random list - __randgen(num, start, end) { - let gen_num = []; - - //random int - function randi(a, b) { - return Math.floor(Math.random() * (b - a) + a); - } - - function recursive(val, arr) { - if (!arr.includes(val)) { - return val; - } - - val = randi(start, end); - - recursive(val, arr); - } - - for (let i = 0; i < num; i++) { - let gen_val = randi(start, end); - let recur_val = recursive(gen_val, gen_num); - gen_num.push(recur_val); - } - - return gen_num; - } - - _throw_wrong_params_error(kwargs, params_needed) { - let keys = Object.keys(kwargs); - let bool = []; - for (let i = 0; i < keys.length; i++) { - if (params_needed.includes(keys[i])) { - bool.push(true); - } else { - bool.push(false); - } - } - const truthy = (element) => element == false; - if (bool.some(truthy)) { - throw Error( - `Params Error: A specified parameter is not supported. Your params must be any of the following [${params_needed}]` - ); - } - } - - //maps int values (0, 1) to bools (false, true) - __map_int_to_bool(arr, dim) { - let new_arr = []; - if (dim == 2) { - arr.map((outer_val) => { - let temp_arr = []; - outer_val.map((val) => { - if (val == 1) { - temp_arr.push(true); - } else { - temp_arr.push(false); - } - }); - new_arr.push(temp_arr); - }); - return new_arr; - } else { - arr.map((val) => { - if (val == 1) { - new_arr.push(true); - } else { - new_arr.push(false); - } - }); - return new_arr; - } - } - - __std(data) { - let tensor_data = data; - - let mean = tensor_data.mean(); - let sub_mean_pow = tensor_data.sub(mean).pow(2); - let mean_data = sub_mean_pow.mean(); - let std = mean_data.sqrt(); - - return std; - } - - __zeros(row, column) { - let zero_data = []; - - for (let i = 0; i < row; i++) { - let col_data = Array(column); - for (let j = 0; j < column; j++) { - col_data[j] = 0; - } - zero_data.push(col_data); - } - return zero_data; - } - - __shuffle(num, array) { - //https://stackoverflow.com/questions/18806210/generating-non-repeating-random-numbers-in-js/18806417 - var i = array.length, - j = 0, - temp; - - while (i--) { - j = Math.floor(Math.random() * (i + 1)); - - // swap randomly chosen element with current element - temp = array[i]; - array[i] = array[j]; - array[j] = temp; - } - - return array.slice(0, num); - } - - __sort(arr, ascending = true) { - let sorted = arr.slice(); - return sorted.sort((a, b) => { - if (ascending) { - if (typeof a === "string" && typeof b === "string") { - return a.charCodeAt() - b.charCodeAt(); - } else { - return a - b; - } - } else { - if (typeof a === "string" && typeof b === "string") { - return b.charCodeAt() - a.charCodeAt(); - } else { - return b - a; - } - } - }); - } - - __is_browser_env() { - var isBrowser = new Function( - "try {return this===window;}catch(e){ return false;}" - ); - // tests if global scope is binded to window - return isBrowser(); - } - - __is_node_env() { - var isNode = new Function( - "try {return this===global;}catch(e){return false;}" - ); - // tests if global scope is binded to window - return isNode(); - } - - _throw_str_dtype_error(obj, ops) { - if (obj.dtypes[0] == "string") { - throw Error( - `dtype error: String data type does not support ${ops} operation` - ); - } - } - - /** - * Remove NaN values from Array - * @param {*} arr - */ - _remove_nans(arr) { - let values = arr.filter((val) => !isNaN(val) && typeof val != "string"); - return values; - } - - /** - * Replace NaN with null before tensor operations - * @param {*} arr - */ - _replace_nan_with_null(arr) { - let values = arr.map((val) => { - if (isNaN(val)) { - return null; - } else { - return val; - } - }); - return values; - } - - __get_duplicate(arr) { - let temp_obj = {}; - let rslt_obj = {}; - - arr.forEach((val, index) => { - if (temp_obj.hasOwnProperty(val)) { - temp_obj[val]["count"] += 1; - temp_obj[val]["index"].push(index); - } else { - temp_obj[val] = {}; - temp_obj[val]["count"] = 1; - temp_obj[val]["index"] = [index]; - } - }); - - for (let key in temp_obj) { - if (temp_obj[key]["count"] >= 2) { - rslt_obj[key] = {}; - rslt_obj[key]["count"] = temp_obj[key]["count"]; - rslt_obj[key]["index"] = temp_obj[key]["index"]; - } - } - - return rslt_obj; - } - - /** - * Sorts an array by index - * @param {Array} arr1 - * @param {Array} arr2 - * @param {string} dtype - * - * @returns sorted index - */ - _sort_arr_with_index(arr1, arr2, dtype) { - let sorted_idx = arr1.map((item, index) => { - return [arr2[index], item]; - }); - if (dtype == "string") { - sorted_idx.sort(); - } else { - sorted_idx.sort(([arg1], [arg2]) => arg2 - arg1); - } - - return sorted_idx.map(([, item]) => item); - } -} diff --git a/danfojs-node/src/index.js b/danfojs-node/src/index.js deleted file mode 100644 index 6b9415a0..00000000 --- a/danfojs-node/src/index.js +++ /dev/null @@ -1,20 +0,0 @@ -import NDframe from "./core/generic"; -import * as tf from "@tensorflow/tfjs-node"; - -export { Series } from "./core/series"; -export { DataFrame } from "./core/frame"; -export { to_datetime } from "./core/timeseries"; -export { read_csv, read_json, read_excel, read } from "./io/reader"; -export { merge } from "./core/merge"; -export { concat } from "./core/concat"; -export { LabelEncoder, OneHotEncoder } from "./preprocessing/encodings"; -export { MinMaxScaler, StandardScaler } from "./preprocessing/scalers"; -export { date_range } from "./core/date_range"; -export { get_dummies } from "./core/get_dummies"; -export { Configs } from "./config/config"; -export { NDframe }; -export { Str } from "./core/strings"; -export { Utils } from "./core/utils"; -export { tf }; - -export const _version = "0.2.7"; diff --git a/danfojs-node/src/io/reader.js b/danfojs-node/src/io/reader.js deleted file mode 100644 index f4738e21..00000000 --- a/danfojs-node/src/io/reader.js +++ /dev/null @@ -1,138 +0,0 @@ -import { data } from "@tensorflow/tfjs-node"; -import fetch from "node-fetch"; -import { open, Dataset, isDataset } from "frictionless.js"; -import toArray from "stream-to-array"; -import { DataFrame } from "../core/frame"; - - -/** - * Reads a CSV file from local or remote storage - * - * @param {source} URL or local file path to retreive CSV file. If it's a local path, it - * must have prefix `file://` and it only works in node environment. - * @param {config} (Optional). A CSV Config object that contains configurations - * for reading and decoding from CSV file(s). - * - * @returns {Promise} DataFrame structure of parsed CSV data - */ -export const read_csv = async (source, configs = {}) => { - let { start, end } = configs; - if (!(source.startsWith("file://") || source.startsWith("http") || source.startsWith("blob"))) { - //probabily a relative path, append file:// to it - source = source.startsWith("/") ? `file://${source}` : `file://${process.cwd()}/${source}`; - } - - let tfdata = []; - await data.csv(source, configs) - .skip(start) - .take(end) - .forEachAsync((row) => { - return tfdata.push(row); - }); - const df = new DataFrame(tfdata); - return df; -}; - -/** - * Reads a JSON file from local or remote address - * - * @param {source} URL or local file path to retreive JSON file. - * @returns {Promise} DataFrame structure of parsed CSV data - */ -export const read_json = async (source) => { - if ( - source.startsWith("https://") || - source.startsWith("http://") || - source.startsWith("file://") - ) { - //read from URL - let res = await fetch(source, { method: "Get" }); - let json = await res.json(); - let df = new DataFrame(json); - return df; - } else { - //Try reading file from local env - let fs = await import("fs"); - return new Promise((resolve, reject) => { - fs.readFile(source, (err, data) => { - if (err) reject(err); - let df = new DataFrame(JSON.parse(data)); - resolve(df); - }); - }); - } -}; - -/** - * Reads an Excel file from local or remote address - * @param {string} source URL or local file path to retreive Excel file. - * @param {object} configs (Optional) Configuration options when reading excel files - * - * { - * sheet : string, (Optional) number of the sheet to parse. Default will be the first sheet. - * } - * @returns {Promise} DataFrame structure of parsed Excel data - */ -export const read_excel = async (source, configs) => { - const df = await read(source, configs); - return df; -}; - -/** - * Opens a file using frictionless.js specification. - * @param {string} source A path to the file/resources. It can be a local file, - * a URL to a tabular data (CSV, EXCEL) or Datahub.io Data Resource. - * Data comes with extra properties and specification conforming to the Frictionless Data standards. - * @param {object} configs { - * - * data_num (Defaults => 0): The specific dataset to load, when reading data from a datapackage.json - * - * header (Defaults => true): Whether the dataset contains header or not. - * - * sheet (Defaults => 0): Number of the excel sheet which u want to load. - * } - * @returns {DataFrame} Danfo DataFrame/Series - */ -export const read = async ( - source, - configs = {} -) => { - let { data_num, header, sheet } = configs; - data_num = data_num === undefined ? 0 : data_num; - header = header === undefined ? true : header; - let rows, file; - - if (isDataset(source)) { - console.info( - "datapackage.json found. Loading Dataset package from Datahub.io" - ); - const dataset = await Dataset.load(source); - file = dataset.resources[data_num]; - rows = await toArray(await file.rows()); - } else { - try { - file = open(source); - if (sheet) { - rows = await toArray(await file.rows({ sheet })); - } else { - rows = await toArray(await file.rows()); - } - } catch (error) { - console.log(error); - } - } - - if ([ "csv", "xls", "xlsx" ].includes(await file.descriptor.format)) { - if (header) { - let df = new DataFrame(rows.slice(1), { columns: rows[0] }); - return df; - } else { - let df = new DataFrame(rows); - return df; - } - } else { - let df = new DataFrame(rows); - return df; - } -}; - diff --git a/danfojs-node/src/preprocessing/encodings.js b/danfojs-node/src/preprocessing/encodings.js deleted file mode 100644 index ace33885..00000000 --- a/danfojs-node/src/preprocessing/encodings.js +++ /dev/null @@ -1,108 +0,0 @@ -import { Series } from "../core/series"; -import { Utils } from "../core/utils"; -import { DataFrame } from "../core/frame"; - -const utils = new Utils; - -export class LabelEncoder { - - /** - * - * @param {data} data [Array|Series] - * @returns Array. - */ - fit(data) { - let in_data = null; - if (Array.isArray(data)) { - in_data = data; - } else if (data instanceof Series) { - in_data = data.values; - } else { - throw new Error("data must be an array or a Series"); - } - - let data_set = new Set(in_data); - this.label = Array.from(data_set); - - let self = this; - let output_data = in_data.map((x) => { - return self.label.indexOf(x); - }); - - return new Series(output_data); - } - - /** - * Transform data using the label generated from fitting - * @param {data} data [Array|Series] - * @returns Array - */ - transform(data) { - let in_data = null; - if (Array.isArray(data)) { - in_data = data; - } else if (data instanceof Series) { - in_data = data.values; - } else { - throw new Error("data must be an array or a Series"); - } - - let self = this; - let output_data = in_data.map((x) => { - return self.label.indexOf(x); - }); - return new Series(output_data); - } -} - -export class OneHotEncoder { - - fit(data) { - let in_data = null; - if (Array.isArray(data)) { - in_data = data; - } else if (data instanceof Series) { - in_data = data.values; - } else { - throw new Error("data must be an array"); - } - - let data_set = new Set(in_data); - this.label = Array.from(data_set); - - let onehot_data = utils.__zeros(in_data.length, this.label.length); - - for (let i = 0; i < in_data.length; i++) { - - let elem = in_data[i]; - let elem_index = this.label.indexOf(elem); - onehot_data[i][elem_index] = 1; - } - - return new DataFrame(onehot_data, { columns: this.label }); - - } - - transform(data) { - let in_data = null; - - if (Array.isArray(data)) { - in_data = data; - } else if (data instanceof Series) { - in_data = data.values; - } else { - throw new Error("data must be an array"); - } - - let onehot_data = utils.__zeros(in_data.length, this.label.length); - - for (let i = 0; i < in_data.length; i++) { - let elem = in_data[i]; - let elem_index = this.label.indexOf(elem); - onehot_data[i][elem_index] = 1; - } - - return new DataFrame(onehot_data, { columns: this.label }); - - } -} diff --git a/danfojs-node/src/preprocessing/scalers.js b/danfojs-node/src/preprocessing/scalers.js deleted file mode 100644 index f966cf13..00000000 --- a/danfojs-node/src/preprocessing/scalers.js +++ /dev/null @@ -1,267 +0,0 @@ -import * as tf from '@tensorflow/tfjs-node'; -import { Series } from "../core/series"; -import { DataFrame } from "../core/frame"; -import { Utils } from "../core/utils"; - -const utils = new Utils(); - -export class MinMaxScaler { - /** - * Fit minmax scaler on data, to obtain their min and max value - * @param {data} data [DataRame | Series | Array] - * @returns Array - */ - fit(data) { - let tensor_data = null; - if (Array.isArray(data)) { - tensor_data = tf.tensor(data); - } else if (data instanceof DataFrame || data instanceof Series) { - if (data.dtypes.includes("string")) { - throw Error("Dtype Error: Cannot perform operation on string dtypes"); - } - tensor_data = tf.tensor(data.values); - } else { - throw new Error("data must either be an Array, DataFrame or Series"); - } - - this.max = tensor_data.max(0); - this.min = tensor_data.min(0); - - let output_data = tensor_data - .sub(this.min) - .div(this.max.sub(this.min)) - .arraySync(); - - if (data instanceof Series || Array.isArray(data)) { - return new Series(output_data); - } else { - return new DataFrame(output_data); - } - } - - /** - * Transform an array using the min and max generated from the fitting on data - * @param {data} data [Array] - * @returns array - */ - transform(data) { - if (data instanceof Series) { - if (data.dtypes.includes("string")) { - throw Error("Dtype Error: Cannot perform operation on string dtypes"); - } - let tensor_data = tf.tensor(data.values); - let output_data = tensor_data - .sub(this.min) - .div(this.max.sub(this.min)) - .arraySync(); - return new Series(output_data); - } else if (Array.isArray(data)) { - let tensor_data = tf.tensor(data); - let output_data = tensor_data - .sub(this.min) - .div(this.max.sub(this.min)) - .arraySync(); - if (utils.__is_1D_array(data)) { - return new Series(output_data); - } else { - return new DataFrame(output_data); - } - } else if (data instanceof DataFrame) { - if (data.dtypes.includes("string")) { - throw Error("Dtype Error: Cannot perform operation on string dtypes"); - } - let tensor_data = tf.tensor(data.values); - let output_data = tensor_data - .sub(this.min) - .div(this.max.sub(this.min)) - .arraySync(); - return new DataFrame(output_data); - } else { - throw Error("Value Error: Data type not supoorted"); - } - } -} - -export class StandardScaler { - /** - * - * @param {data} data [DataRame | Series | Array] - * @returns Array - */ - fit(data) { - let tensor_data = null; - if (Array.isArray(data)) { - tensor_data = tf.tensor(data); - } else if (data instanceof DataFrame || data instanceof Series) { - if (data.dtypes.includes("string")) { - throw Error("Dtype Error: Cannot perform operation on string dtypes"); - } - tensor_data = tf.tensor(data.values); - } else { - throw new Error("data must either be an Array, DataFrame or Series"); - } - - this.std = tf.moments(tensor_data, 0).variance.sqrt(); - this.mean = tensor_data.mean(0); - let output_data = tensor_data.sub(this.mean).div(this.std).arraySync(); - - if (data instanceof Series || Array.isArray(data)) { - return new Series((data = output_data)); - } else { - return new DataFrame((data = output_data)); - } - } - - transform(data) { - // if(!Array.isArray(data)){ - // throw new Error(data) - // } - - if (data instanceof Series) { - if (data.dtypes.includes("string")) { - throw Error("Dtype Error: Cannot perform operation on string dtypes"); - } - let tensor_data = tf.tensor(data.values); - let output_data = tensor_data.sub(this.mean).div(this.std).arraySync(); - return new Series(output_data); - } else if (Array.isArray(data)) { - let tensor_data = tf.tensor(data); - let output_data = tensor_data.sub(this.mean).div(this.std).arraySync(); - if (utils.__is_1D_array(data)) { - return new Series(output_data); - } else { - return new DataFrame(output_data); - } - } else if (data instanceof DataFrame) { - if (data.dtypes.includes("string")) { - throw Error("Dtype Error: Cannot perform operation on string dtypes"); - } - let tensor_data = tf.tensor(data.values); - let output_data = tensor_data.sub(this.mean).div(this.std).arraySync(); - return new DataFrame(output_data); - } else { - throw Error("Value Error: Data type not supoorted"); - } - } -} - -// export class RobustScaler{ - -// __median(arr, isTensor,return_index) { -// if (!isTensor) { -// const sorted = arr.slice().sort((a, b) => a - b); -// const middle = Math.floor(sorted.length / 2); - -// if (sorted.length % 2 === 0) { - -// return return_index ? [(middle - 1) , middle] : (sorted[middle - 1] + sorted[middle]) / 2; -// } - -// return return_index ? middle : sorted[middle] ; -// } else { -// let result_arr = [] -// arr.map(ele => { -// const sorted = ele.slice().sort((a, b) => a - b); -// const middle = Math.floor(sorted.length / 2); - -// if (sorted.length % 2 === 0) { -// result_arr.push(return_index ? [(middle - 1) , middle] :(sorted[middle - 1] + sorted[middle]) / 2 ) -// } else { -// result_arr.push(return_index ? middle : sorted[middle]) -// } - -// }) -// return result_arr -// } - -// } - -// quantile(data,isTensor){ - -// if(isTensor){ -// data = utils.__get_col_values(data); -// } - -// let median = this.__median(data,isTensor,true) -// let med = this.__median(data,isTensor,false) - -// let q1 = [] -// let q2 = [] - -// if(!isTensor){ -// let sorted = data.slice().sort((a, b) => a - b); - -// if(Array.isArray(median)){ -// let lower = median[0] -// let lower_data = sorted.slice(0,lower+1) -// let upper_data = sorted.slice(lower+1,) - -// q1.push(this.__median(lower_data,isTensor,false)); -// q2.push(this.__median(upper_data,isTensor,false)); - -// }else{ -// let lower_data = sorted.slice(0,median) -// let upper_data = sorted.slice(median+1,) - -// q1.push(this.__median(lower_data,isTensor,false)); -// q2.push(this.__median(upper_data,isTensor,false)); -// } - -// }else{ - -// data.map((x,i)=>{ -// let sorted = x.slice().sort((a, b) => a - b); - -// if(Array.isArray(median[i])){ -// let lower = median[i][0] -// let lower_data = sorted.slice(0,lower+1) -// let upper_data = sorted.slice(lower+1,) - -// q1.push(this.__median(lower_data,!isTensor,false)); -// q2.push(this.__median(upper_data,!isTensor,false)); - -// }else{ -// let lower_data = sorted.slice(0,median[i]) -// let upper_data = sorted.slice(median[i]+1,) - -// q1.push(this.__median(lower_data,!isTensor,false)); -// q2.push(this.__median(upper_data,!isTensor,false)); -// } - -// }) -// } - -// return [q1,q2, med] - -// } - -// /** -// * Fit robust scalar on data to obtain the first quantile and third quantile -// * @param {data} data [DataRame | Series | Array] -// * @returns Array -// */ -// fit(data){ - -// let tensor_data = null -// let isTensor = false; -// if(Array.isArray(data)){ -// tensor_data = tf.tensor(data) -// } -// else if((data instanceof DataFrame)){ -// tensor_data = tf.tensor(data.values) -// isTensor = true; -// } -// else if((data instanceof Series)){ -// tensor_data = tf.tensor(data.values) -// } -// else{ -// throw new Error("data must either be an Array, DataFrame or Series") -// } - -// let [q1, q3, median] = this.quantile(data,isTensor) -// let q3_tensor = tf.tensor(q3) -// let output_data = tensor_data.sub(median).div(q3_tensor.sub(q1)).arraySync() - -// return output_data; -// } -// } diff --git a/danfojs-node/tests/config/config.js b/danfojs-node/tests/config/config.js deleted file mode 100644 index f6f39af5..00000000 --- a/danfojs-node/tests/config/config.js +++ /dev/null @@ -1,25 +0,0 @@ -import { Configs } from '../../src/config/config'; -import { assert } from 'chai'; - -const config = new Configs(); - -describe("Config", function () { - it("gets the default config val for table width", function () { - let table_width = config.get_width; - assert.equal(table_width, 17); - }); - it("gets the default config val for table truncation", function () { - let table_trunc = config.get_truncate; - assert.equal(table_trunc, 16); - }); - it("Sets the config val for table width", function () { - config.set_width(7); - let table_width = config.get_width; - assert.equal(table_width, 7); - }); - it("Sets the config val for table truncation", function () { - config.set_truncate(5); - let table_trunc = config.get_truncate; - assert.equal(table_trunc, 5); - }); -}); diff --git a/danfojs-node/tests/core/date_range.js b/danfojs-node/tests/core/date_range.js deleted file mode 100644 index 1652ff64..00000000 --- a/danfojs-node/tests/core/date_range.js +++ /dev/null @@ -1,75 +0,0 @@ -import { assert } from "chai"; -import { date_range } from '../../src/core/date_range'; - -describe("date_range", function(){ - - // it("Obtain date between start and end specified", function(){ - - // let d = new date_range({"start":'2018-04-24',"end":'2018-04-27'}) - // let rslt = [ - // '4/24/2018, 12:00:00 AM', - // '4/25/2018, 12:00:00 AM', - // '4/26/2018, 12:00:00 AM', - // '4/27/2018, 12:00:00 AM' - // ] - - // assert.deepEqual(d,rslt) - - - // }); - it("Obtain date between start with end not specified, but period and freq specified", function(){ - - - let d = new date_range({ "start":'1/1/2018', period:5, freq:'M' }); - let rslt = [ - '1/1/2018, 12:00:00 AM', - '2/1/2018, 12:00:00 AM', - '3/1/2018, 12:00:00 AM', - '4/1/2018, 12:00:00 AM', - '5/1/2018, 12:00:00 AM' - ]; - - assert.deepEqual(d, rslt); - - - }); - it("Obtain date between start with end not specified, but period and freq specified, plus offset", function(){ - - let d = new date_range({ start:'1/1/2018', period:5, freq:'3M' }); - let rslt = [ - '1/1/2018, 12:00:00 AM', - '4/1/2018, 12:00:00 AM', - '7/1/2018, 12:00:00 AM', - '10/1/2018, 12:00:00 AM', - '1/1/2019, 12:00:00 AM' - ]; - - assert.deepEqual(d, rslt); - - - }); - it("Obtain date range with start not specified but end and period is given", function(){ - - let d = new date_range({ end:'1/1/2018', period:8 }); - let rslt = [ - '12/25/2017, 12:00:00 AM', - '12/26/2017, 12:00:00 AM', - '12/27/2017, 12:00:00 AM', - '12/28/2017, 12:00:00 AM', - '12/29/2017, 12:00:00 AM', - '12/30/2017, 12:00:00 AM', - '12/31/2017, 12:00:00 AM', - '1/1/2018, 12:00:00 AM' - ]; - - assert.deepEqual(d, rslt); - - - }); - it("inputing wrong freq", function(){ - assert.throws(function () { new date_range({ end:'1/1/2018', period:8, freq:"d" }); }, Error, 'invalid freq d'); - }); - it("inputing wrong freq with offset", function(){ - assert.throws(function () { new date_range({ end:'1/1/2018', period:8, freq:"4d" }); }, Error, 'invalid freq d'); - }); -}); diff --git a/danfojs-node/tests/core/frame.js b/danfojs-node/tests/core/frame.js deleted file mode 100644 index 01e1250e..00000000 --- a/danfojs-node/tests/core/frame.js +++ /dev/null @@ -1,2384 +0,0 @@ -import { assert, expect } from "chai"; -import { DataFrame } from '../../src/core/frame'; -import { Series } from "../../src/core/series"; -import fs from "fs"; - -const testCSVPath = "./tester.csv"; - -describe("DataFrame", function () { - - describe("to_csv", function () { - afterEach(function () { - // Clean up generated file - fs.unlinkSync(testCSVPath); - }); - - it("save dataframe to CSV file", async function () { - let data = [[1, 2, 3], [4, 5, 6]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - await df.to_csv(testCSVPath); - assert.isTrue(fs.existsSync(testCSVPath)); - }); - - it("return dataframe csv string", async function () { - let data = [[1, 2, 3], [4, 5, 6]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - const csvContent = await df.to_csv(testCSVPath); - assert.deepEqual(csvContent, "A,B,C\n1,2,3\n4,5,6\n"); - }); - - }); - - describe("drop", function () { - it("throw error for wrong row index", function () { - let data = [[1, 2, 3], [4, 5, 6]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - assert.throws(function () { df.drop({ columns: [3], axis: 0, inplace: false }); }, Error, 'No index label found. Axis of 0 must be accompanied by an array of index labels'); - }); - it("throw error for wrong row index", function () { - let data = [[1, 2, 3], [4, 5, 6]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - assert.throws(function () { df.drop({ columns: ["D"], axis: 1, inplace: false }); }, Error, 'column "D" does not exist'); - }); - - it("drop a column inplace", function () { - let data = [[1, 2, 3], [4, 5, 6]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - df.drop({ columns: ["C", "B"], axis: 1, inplace: true }); - let column = ["A"]; - assert.deepEqual(df.columns, column); - }); - it("check if data is updated after column is dropped", function () { - let data = [[1, 2, 3], [4, 5, 6]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - df.drop({ columns: ["C"], axis: 1, inplace: true }); - let new_data = [[1, 2], [4, 5]]; - assert.deepEqual(df.values, new_data); - assert.deepEqual(df.dtypes.length, 2); - - }); - - it("check if data is updated after row is dropped", function () { - let data = [[1, 2, 3], [4, 5, 6]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - df.drop({ index: [0], axis: 0, inplace: true }); - let new_data = [[4, 5, 6]]; - assert.deepEqual(df.values, new_data); - }); - it("check if new dataframe is properly created after column is dropped (not-in-inplace)", function () { - let data = [[1, 2, 3], [4, 5, 6]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - let df_drop = df.drop({ columns: ["C"], axis: 1, inplace: false }); - - let expected_data = [[1, 2], [4, 5]]; - let expected_cols = ["A", "B"]; - let expected_df = new DataFrame(expected_data, { columns: expected_cols }); - assert.deepEqual(df_drop.values, expected_df.values); - }); - it("check that the dtype is updated after column drop", function () { - let data = [[1, 2, 3], [4, 5, 6]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - df.drop({ columns: ["A"], axis: 1, inplace: true }); - let dtype = ['int32', 'int32']; - assert.deepEqual(df.ctypes.values, dtype); - }); - it("drop row by single string labels", function () { - let data = [[1, 2, 3], [4, 5, 6], [20, 34, 5]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols, index: ["a", "b", "c"] }); - df.drop({ index: ["a"], axis: 0, inplace: true }); - let new_data = [[4, 5, 6], [20, 34, 5]]; - assert.deepEqual(df.values, new_data); - }); - it("drop row by two or more string labels", function () { - let data = [[1, 2, 3], [4, 5, 6], [20, 34, 5], [2, 3.4, 5], [2.0, 340, 5]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols, index: ["a", "b", "c", "a", "b"] }); - df.drop({ index: ["a", "b"], axis: 0, inplace: true }); - let new_data = [[20, 34, 5]]; - assert.deepEqual(df.values, new_data); - - }); - }); - - describe("head", function () { - it("Gets the first n rows in a DataFrame", function () { - let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - assert.deepEqual(df.head(2).values, [[1, 2, 3], [4, 5, 6]]); - }); - it("Return all rows in a DataFrame if row specified is greater than values", function () { - let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - assert.deepEqual(df.head(10).values, data); - }); - it("Return all rows in a DataFrame if row specified is less than 0", function () { - let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - assert.deepEqual(df.head(-1).values, data); - }); - - }); - - describe("tail", function () { - it("Prints the last n rows of a DataFrame", function () { - let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - assert.deepEqual(df.tail(2).values, [[20, 30, 40], [39, 89, 78]]); - }); - it("Return all rows in a DataFrame if row specified is greater than values", function () { - let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - assert.deepEqual(df.tail(10).values, data); - }); - it("Return all rows in a DataFrame if row specified is less than 0", function () { - let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - assert.deepEqual(df.tail(-1).values, data); - }); - it("Return last 3 row index in a DataFrame", function () { - let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - assert.deepEqual(df.tail(2).index, [2, 3]); - }); - it("Check print format on head call", function () { - let data = [[1, 2, 34, 5, 0, 6, 4, 5, 6, 7], [20, 30, 40, 39, 89, 78, 45, 56, 56, 45]]; - let df = new DataFrame(data); - assert.deepEqual(df.tail(2).values, [[1, 2, 34, 5, 0, 6, 4, 5, 6, 7], [20, 30, 40, 39, 89, 78, 45, 56, 56, 45]]); - }); - }); - - describe("sample", function () { - it("Samples n number of random elements from a DataFrame", async function () { - let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78], [100, 200, 300]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - let expected = [[1, 2, 3], [20, 30, 40]]; - let values = (await df.sample(2)).values; - assert.deepEqual(values, expected); - }); - it("Throw error if n is greater than lenght of Dataframe", async function () { - let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78], [100, 200, 300]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - try { - await df.sample(100); - } catch (e) { - expect(e).to.be.instanceOf(Error); - expect(e.message).to.eql('Sample size n cannot be bigger than size of dataset'); - } - }); - it("Throw error if n is less than -1", async function () { - let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78], [100, 200, 300]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - try { - await df.sample(-2); - } catch (e) { - expect(e).to.be.instanceOf(Error); - expect(e.message).to.eql('Sample size cannot be less than -1 or 0'); - } - }); - it("Throw error if n is 0", async function () { - let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78], [100, 200, 300]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - try { - await df.sample(0); - } catch (e) { - expect(e).to.be.instanceOf(Error); - expect(e.message).to.eql('Sample size cannot be less than -1 or 0'); - } - }); - it("Return all values if n is -1", async function () { - let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78], [100, 200, 300]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - assert.deepEqual((await df.sample(-1)).shape, [5, 3]); - }); - }); - - describe("loc", function () { - - it("throw error for wrong column name", function () { - let data = [[1, 2, 3], [4, 5, 6]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - assert.throws(function () { df.loc({ "rows": [0, 1], "columns": ["A", "D"] }); }, Error, "Column D does not exist"); - }); - it("check data after selecting column", function () { - let data = [[1, 2, 3], [4, 5, 6]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - - let col_df = df.loc({ "rows": [0, 1], "columns": ["B", "C"] }); - let col_data = [[2, 3], [5, 6]]; - - assert.deepEqual(col_df.values, col_data); - - }); - it("check data after selecting row index", function () { - let data = [[1, 2, 3], [4, 5, 6]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - - let col_df = df.loc({ "rows": [1], "columns": ["B", "C"] }); - let col_data = [[5, 6]]; - - assert.deepEqual(col_df.values, col_data); - - }); - it("check data after row and column slice", function () { - let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - - let col_df = df.loc({ "rows": ["0:2"], "columns": ["B:C"] }); - let col_data = [[2], [5]]; - - assert.deepEqual(col_df.values, col_data); - - }); - it("check data after row slice", function () { - let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - - let col_df = df.loc({ "rows": ["0:2"], "columns": ["B", "C"] }); - let col_data = [[2, 3], [5, 6]]; - - assert.deepEqual(col_df.values, col_data); - - }); - it("check data after column slice", function () { - let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - - let col_df = df.loc({ "rows": [0, 1], "columns": ["A:C"] }); - let col_data = [[1, 2], [4, 5]]; - assert.deepEqual(col_df.values, col_data); - - }); - it("loc by single string index", function () { - let data = { - "Name": ["Apples", "Mango", "Banana", "Pear"], - "Count": [21, 5, 30, 10], - "Price": [200, 300, 40, 250] - }; - - let df = new DataFrame(data); - df.set_index({ key: ["a", "b", "c", "a"], inplace: true }); - let sub_df = df.loc({ rows: ["a"], columns: ["Name", "Count"] }); - let expected = [["Apples", 21], ["Pear", 10]]; - assert.deepEqual(sub_df.values, expected); - - }); - it("loc by multiple string index", function () { - let data = { - "Name": ["Apples", "Mango", "Banana", "Pear"], - "Count": [21, 5, 30, 10], - "Price": [200, 300, 40, 250] - }; - - let df = new DataFrame(data); - df.set_index({ key: ["a", "b", "c", "a"], inplace: true }); - let sub_df = df.loc({ rows: ["a", "b"], columns: ["Name", "Count"] }); - let expected = [["Apples", 21], ["Mango", 5], ["Pear", 10]]; - assert.deepEqual(sub_df.values, expected); - - }); - it("loc by slice string index", function () { - let data = { - "Name": ["Apples", "Mango", "Banana", "Pear"], - "Count": [21, 5, 30, 10], - "Price": [200, 300, 40, 250] - }; - - let df = new DataFrame(data); - df.set_index({ key: ["a", "b", "c", "d"], inplace: true }); - let sub_df = df.loc({ rows: ["a:c"], columns: ["Name", "Count"] }); - let expected = [["Apples", 21], ["Mango", 5]]; - assert.deepEqual(sub_df.values, expected); - - }); - - - }); - - describe("iloc", function () { - - it("throw error for wrong column index", function () { - let data = [[1, 2, 3], [4, 5, 6]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - assert.throws(function () { df.iloc({ "rows": [0, 1], "columns": [0, 3] }); }, Error, "column index 3 is bigger than 2"); - }); - - it("throw error for wrong row index", function () { - let data = [[1, 2, 3], [4, 5, 6]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - assert.throws(function () { df.iloc({ "rows": 0, "columns": [0, 3] }); }, Error, "rows parameter must be a Array"); - }); - - it("throw error for wrong column index", function () { - let data = [[1, 2, 3], [4, 5, 6]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - assert.throws(function () { df.iloc({ "rows": [0, 1], "columns": 3 }); }, Error, "columns must be a list"); - }); - - it("throw error for wrong row index", function () { - let data = [[1, 2, 3], [4, 5, 6]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - assert.throws(function () { df.iloc({ "rows": [0, 8], "columns": [1, 2] }); }, Error, "Specified row index 8 is bigger than maximum row index of 1"); - }); - - it("check data after selecting column", function () { - let data = [[1, 2, 3], [4, 5, 6]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - - let col_df = df.iloc({ "rows": [0, 1], "columns": [1, 2] }); - let col_data = [[2, 3], [5, 6]]; - - assert.deepEqual(col_df.values, col_data); - - }); - it("check data after selecting row index", function () { - let data = [[1, 2, 3], [4, 5, 6]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - - let col_df = df.iloc({ "rows": [1], "columns": [1, 2] }); - let col_data = [[5, 6]]; - - assert.deepEqual(col_df.values, col_data); - - }); - it("check data after row and column slice", function () { - let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - - let col_df = df.iloc({ "rows": ["0:2"], "columns": ["1:2"] }); - let col_data = [[2], [5]]; - - assert.deepEqual(col_df.values, col_data); - - }); - it("check data after row slice", function () { - let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - - let col_df = df.iloc({ "rows": ["0:2"], "columns": [1, 2] }); - let col_data = [[2, 3], [5, 6]]; - - assert.deepEqual(col_df.values, col_data); - - }); - it("check data after column slice", function () { - let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - - let col_df = df.iloc({ "rows": [0, 1, 2], "columns": ["1:2"] }); - let col_data = [[2], [5], [30]]; - assert.deepEqual(col_df.values, col_data); - - }); - it("Return all columns if columns parameter is not specified", function () { - let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - - let col_df = df.iloc({ "rows": [0, 1, 2] }); - let col_data = [[1, 2, 3], [4, 5, 6], [20, 30, 40]]; - assert.deepEqual(col_df.values, col_data); - - }); - it("Return all rows if rows parameter is not specified", function () { - let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - - let col_df = df.iloc({ "columns": ["1:2"] }); - let col_data = [[2], [5], [30], [89]]; - assert.deepEqual(col_df.values, col_data); - - }); - it("column slice starting with 0 and returning a single result works", function () { - let data = { - "Name": ["Apples", "Mango", "Banana", "Pear"], - "Count": [21, 5, 30, 10], - "Price": [200, 300, 40, 250] - }; - let df = new DataFrame(data); - let sub_df = df.iloc({ rows: ["2:3"], columns: ["0:1"] }); - const result = [["Banana"]]; - assert.deepEqual(sub_df.values, result); - - }); - it("column slice with format '0:' works", function () { - let data = { - "Name": ["Apples", "Mango", "Banana", "Pear"], - "Count": [21, 5, 30, 10], - "Price": [200, 300, 40, 250] - }; - let df = new DataFrame(data); - let sub_df = df.iloc({ rows: ["2:3"], columns: ["0:"] }); - const result = [["Banana", 30, 40]]; - assert.deepEqual(sub_df.values, result); - - }); - it("column slice with format ':2' works", function () { - let data = { - "Name": ["Apples", "Mango", "Banana", "Pear"], - "Count": [21, 5, 30, 10], - "Price": [200, 300, 40, 250] - }; - let df = new DataFrame(data); - let sub_df = df.iloc({ rows: ["2:3"], columns: [":2"] }); - const result = [["Banana", 30]]; - assert.deepEqual(sub_df.values, result); - - }); - it("row slice with format ':2' works", function () { - let data = { - "Name": ["Apples", "Mango", "Banana", "Pear"], - "Count": [21, 5, 30, 10], - "Price": [200, 300, 40, 250] - }; - let df = new DataFrame(data); - let sub_df = df.iloc({ rows: [":2"], columns: [":1"] }); - const result = [['Apples'], ['Mango']]; - assert.deepEqual(sub_df.values, result); - - }); - it("row slice with format '1:' works", function () { - let data = { - "Name": ["Apples", "Mango", "Banana", "Pear"], - "Count": [21, 5, 30, 10], - "Price": [200, 300, 40, 250] - }; - let df = new DataFrame(data); - let sub_df = df.iloc({ rows: [":2"], columns: [":2"] }); - const result = [['Apples', 21], ['Mango', 5]]; - assert.deepEqual(sub_df.values, result); - - }); - - }); - - - describe("add", function () { - it("Return Addition of DataFrame with a single Number", function () { - let data = [[0, 2, 4], [360, 180, 360]]; - let df = new DataFrame(data); - assert.deepEqual(df.add(2).values, [[2, 4, 6], [362, 182, 362]]); - }); - it("Return addition of a DataFrame with a Series along default axis 1", function () { - let data = [[0, 2, 4], [360, 180, 360]]; - let sf = new Series([1, 2, 1]); - let df = new DataFrame(data); - assert.deepEqual(df.add(sf).values, [[1, 4, 5], [361, 182, 361]]); - }); - it("Return addition of a DataFrame with a Series along axis 0", function () { - let data = [[0, 2, 4], [360, 180, 360]]; - let sf = new Series([1, 2]); - let df = new DataFrame(data); - assert.deepEqual(df.add(sf, 0).values, [[1, 3, 5], [362, 182, 362]]); - }); - it("Return addition of a DataFrame with a DataFrame along default axis 1", function () { - let df1 = new DataFrame([[0, 2, 4], [360, 180, 360]]); - let df2 = new DataFrame([[1, 2, 4], [10, 5, 0]]); - assert.deepEqual(df1.add(df2).values, [[1, 4, 8], [370, 185, 360]]); - }); - it("Return addition of a DataFrame with a DataFrame along axis 0", function () { - let df1 = new DataFrame([[0, 2, 4], [360, 180, 360]]); - let df2 = new DataFrame([[1, 2, 4], [10, 5, 0]]); - assert.deepEqual(df1.add(df2).values, [[1, 4, 8], [370, 185, 360]]); - }); - - }); - - describe("sub", function () { - it("Return subtraction of DataFrame with a single Number", function () { - let data = [[0, 2, 4], [360, 180, 360]]; - let df = new DataFrame(data); - assert.deepEqual(df.sub(2).values, [[-2, 0, 2], [358, 178, 358]]); - }); - it("Return subtraction of a DataFrame with a Series along default axis 1", function () { - let data = [[0, 2, 4], [360, 180, 360]]; - let sf = new Series([1, 2, 1]); - let df = new DataFrame(data); - assert.deepEqual(df.sub(sf).values, [[-1, 0, 3], [359, 178, 359]]); - }); - it("Return subtraction of a DataFrame with a Series along axis 0", function () { - let data = [[0, 2, 4], [360, 180, 360]]; - let sf = new Series([1, 2]); - let df = new DataFrame(data); - assert.deepEqual(df.sub(sf, 0).values, [[-1, 1, 3], [358, 178, 358]]); - }); - it("Return subtraction of a DataFrame with a DataFrame along default axis 1", function () { - let df1 = new DataFrame([[0, 2, 4], [360, 180, 360]]); - let df2 = new DataFrame([[1, 2, 4], [10, 5, 0]]); - assert.deepEqual(df1.sub(df2).values, [[-1, 0, 0], [350, 175, 360]]); - }); - it("Return subtraction of a DataFrame with a DataFrame along axis 0", function () { - let df1 = new DataFrame([[0, 2, 4], [360, 180, 360]]); - let df2 = new DataFrame([[1, 2, 4], [10, 5, 0]]); - assert.deepEqual(df1.sub(df2).values, [[-1, 0, 0], [350, 175, 360]]); - }); - - }); - - describe("mul", function () { - it("Return multiplication of DataFrame with a single Number", function () { - let data = [[0, 2, 4], [360, 180, 360]]; - let df = new DataFrame(data); - assert.deepEqual(df.mul(2).values, [[0, 4, 8], [720, 360, 720]]); - }); - it("Return multiplication of a DataFrame with a Series along default axis 1", function () { - let data = [[0, 2, 4], [360, 180, 360]]; - let sf = new Series([1, 2, 1]); - let df = new DataFrame(data); - assert.deepEqual(df.mul(sf).values, [[0, 4, 4], [360, 360, 360]]); - }); - it("Return multiplication of a DataFrame with a Series along axis 0", function () { - let data = [[0, 2, 4], [360, 180, 360]]; - let sf = new Series([1, 2]); - let df = new DataFrame(data); - assert.deepEqual(df.mul(sf, 0).values, [[0, 2, 4], [720, 360, 720]]); - }); - it("Return multiplication of a DataFrame with a DataFrame along default axis 1", function () { - let df1 = new DataFrame([[0, 2, 4], [360, 180, 360]]); - let df2 = new DataFrame([[1, 2, 4], [10, 5, 0]]); - assert.deepEqual(df1.mul(df2).values, [[0, 4, 16], [3600, 900, 0]]); - }); - it("Return multiplication of a DataFrame with a DataFrame along axis 0", function () { - let df1 = new DataFrame([[0, 2, 4], [360, 180, 360]]); - let df2 = new DataFrame([[1, 2, 4], [10, 5, 0]]); - assert.deepEqual(df1.mul(df2, 0).values, [[0, 4, 16], [3600, 900, 0]]); - }); - - }); - - describe("div", function () { - it("Return division of DataFrame with a single Number", function () { - let data = [[0, 2, 4], [360, 180, 360]]; - let df = new DataFrame(data); - assert.deepEqual(df.div(2).values, [[0, 1, 2], [180, 90, 180]]); - }); - it("Return division of a DataFrame with a Series along default axis 1", function () { - let data = [[0, 2, 4], [360, 180, 360]]; - let sf = new Series([1, 2, 1]); - let df = new DataFrame(data); - assert.deepEqual(df.div(sf).values, [[0, 1, 4], [360, 90, 360]]); - }); - it("Return division of a DataFrame with a Series along axis 0", function () { - let data = [[0, 2, 4], [360, 180, 360]]; - let sf = new Series([1, 2]); - let df = new DataFrame(data); - assert.deepEqual(df.div(sf, 0).values, [[0, 2, 4], [180, 90, 180]]); - }); - it("Return division of a DataFrame with a DataFrame along default axis 1", function () { - let df1 = new DataFrame([[0, 2, 4], [360, 180, 360]]); - let df2 = new DataFrame([[1, 2, 4], [10, 5, 0]]); - assert.deepEqual(df1.div(df2).values, [[0, 1, 1], [36, 36, NaN]]); - }); - it("Return division of a DataFrame with a DataFrame along axis 0", function () { - let df1 = new DataFrame([[0, 2, 4], [360, 180, 360]]); - assert.deepEqual(df1.div(df1).values, [[NaN, 1, 1], [1, 1, 1]]); - }); - it("Return division of a DataFrame with a DataFrame along axis 0", function () { - let df1 = new DataFrame([[0, 2, 4], [360, 180, 360]]); - let df2 = new DataFrame([[1, 2, 4], [10, 5, 0]]); - assert.deepEqual(df1.div(df2).values, [[0, 1, 1], [36, 36, NaN]]); - }); - - }); - - describe("pow", function () { - it("Return exponential of DataFrame with a single Number", function () { - let data = [[0, 2, 4], [360, 180, 360]]; - let df = new DataFrame(data); - assert.deepEqual(df.pow(2).values, [[0, 4, 16], [129600, 32400, 129600]]); - }); - it("Return exponential of a DataFrame with a Series along default axis 1", function () { - let data = [[0, 2, 4], [360, 180, 360]]; - let sf = new Series([1, 2, 1]); - let df = new DataFrame(data); - assert.deepEqual(df.pow(sf).values, [[0, 4, 4], [360, 32400, 360]]); - }); - it("Return exponential of a DataFrame with a Series along axis 0", function () { - let data = [[0, 2, 4], [360, 180, 360]]; - let sf = new Series([1, 2]); - let df = new DataFrame(data); - assert.deepEqual(df.pow(sf, 0).values, [[0, 2, 4], [129600, 32400, 129600]]); - }); - it("Return exponential of a DataFrame with another DataFrame along default axis 1", function () { - let df1 = new DataFrame([[0, 2, 4], [3, 10, 4]]); - let df2 = new DataFrame([[1, 2, 4], [10, 5, 0]]); - assert.deepEqual(df1.pow(df2).values, [[0, 4, 256], [59049, 100000, 1]]); - }); - it("Return exponential of a DataFrame with another DataFrame along axis 0", function () { - let df1 = new DataFrame([[0, 2, 4], [3, 10, 4]]); - let df2 = new DataFrame([[1, 2, 4], [10, 5, 0]]); - assert.deepEqual(df1.pow(df2, 0).values, [[0, 4, 256], [59049, 100000, 1]]); - }); - - }); - - describe("mod", function () { - it("Return modulus of DataFrame with a single Number", function () { - let data = [[0, 2, 4], [360, 180, 360]]; - let df = new DataFrame(data); - assert.deepEqual(df.mod(2).values, [[0, 0, 0], [0, 0, 0]]); - }); - it("Return modulus of a DataFrame with a Series along default axis 1", function () { - let data = [[0, 2, 4], [31, 15, 360]]; - let sf = new Series([1, 2, 1]); - let df = new DataFrame(data); - assert.deepEqual(df.mod(sf).values, [[0, 0, 0], [0, 1, 0]]); - }); - it("Return modulus of a DataFrame with a Series along axis 0", function () { - let data = [[0, 2, 4], [31, 15, 360]]; - let sf = new Series([1, 2]); - let df = new DataFrame(data); - assert.deepEqual(df.mod(sf, 0).values, [[0, 0, 0], [1, 1, 0]]); - }); - it("Return modulus of a DataFrame with a DataFrame along default axis 1", function () { - let df1 = new DataFrame([[0, 2, 4], [31, 15, 360]]); - let df2 = new DataFrame([[1, 2, 4], [10, 5, 0]]); - assert.deepEqual(df1.mod(df2).values, [[0, 0, 0], [1, 0, NaN]]); - }); - it("Return modulus of a DataFrame with a DataFrame along axis 0", function () { - let df1 = new DataFrame([[0, 2, 4], [360, 180, 360]]); - let df2 = new DataFrame([[1, 2, 4], [10, 5, 0]]); - assert.deepEqual(df1.mod(df2).values, [[0, 0, 0], [0, 0, NaN]]); - }); - - }); - - describe("mean", function () { - it("Returns the mean of a DataFrame (Default axis is [1:column])", function () { - let data = [[0, 2, 4], [360, 180, 360]]; - let df = new DataFrame(data, { columns: ["col1", "col2", "col3"] }); - assert.deepEqual(df.mean().values, [180, 91, 182]); - }); - it("Return mean of a DataFrame along axis 0 (row)", function () { - let data = [[0, 2, 4], [360, 180, 360]]; - let df = new DataFrame(data); - assert.deepEqual(df.mean(0).values, [2, 300]); - }); - it("Removes NaN before calculating mean of a DataFrame", function () { - let data = [[11, 20, 3], [NaN, 15, 6], [2, 30, 40], [2, 89, 78]]; - let df = new DataFrame(data); - assert.deepEqual(df.mean().values, [5, 38.5, 31.75]); - }); - }); - - describe("median", function () { - it("Returns the median of a DataFrame (Default axis is [1:column])", function () { - let data = [[0, 2, 4], [360, 180, 360]]; - let df = new DataFrame(data); - assert.deepEqual(df.median().values, [180, 91, 182]); - }); - it("Return median of a DataFrame along axis 0 (row)", function () { - let data = [[0, 2, 4], [360, 180, 360]]; - let df = new DataFrame(data); - assert.deepEqual(df.median({ "axis": 0 }).values, [2, 360]); - }); - - }); - - // describe("mode", function () { - // it("Returns the mode of a DataFrame (Default axis is [1:column])", function () { - // let data = [[0, 2, 4], [360, 180, 360]] - // let df = new DataFrame(data) - // assert.deepEqual(df.mode().values, [362, 182, 362]) - // }) - // it("Returns mode of a DataFrame along axis 0 (row)", function () { - // let data = [[0, 2, 4], [360, 180, 360]] - // let df = new DataFrame(data) - // assert.deepEqual(df.mode({ "axis": 0 }).values, [1, 182]) - // }) - // it("Returns mode of a DataFrame along axis 1", function () { - // let data = [{ "col1": [0, 2, 4] }, { "col2": [360, 180, 360] }] - // let df = new DataFrame(data) - // assert.deepEqual(df.mode().values, [1, 362, 40]) - // }) - - // }) - - describe("min", function () { - it("Returns the minimum values in a DataFrame (Default axis is [1:column])", function () { - let data = [[0, 2, 4], [360, 180, 360]]; - let df = new DataFrame(data); - assert.deepEqual(df.min().values, [0, 2, 4]); - }); - it("Returns the minimum values of a DataFrame along axis 0 (row)", function () { - let data = [[0, 2, 4], [360, 180, 360]]; - let df = new DataFrame(data); - assert.deepEqual(df.min({ "axis": 0 }).values, [0, 180]); - }); - - }); - - describe("max", function () { - it("Returns the maximum values in a DataFrame (Default axis is [1:column])", function () { - let data = [[0, 2, 4], [360, 180, 360]]; - let df = new DataFrame(data); - assert.deepEqual(df.max().values, [360, 180, 360]); - }); - it("Returns the maximum values of a DataFrame along axis 0 (row)", function () { - let data = [[0, 2, 4], [360, 180, 360]]; - let df = new DataFrame(data); - assert.deepEqual(df.max({ "axis": 0 }).values, [4, 360]); - }); - - }); - - describe("std", function () { - it("Returns the standard deviations of values in a DataFrame (Default axis is [1:column])", function () { - let data = [[0, 2, 4], [360, 180, 360]]; - let df = new DataFrame(data); - assert.deepEqual(df.std().values, [254.55844122715712, 125.86500705120545, 251.7300141024109]); - }); - it("Return the standard deviations of values of a DataFrame along axis 0 (row)", function () { - let data = [[0, 2, 4], [360, 180, 360]]; - let df = new DataFrame(data); - assert.deepEqual(df.std(0).values, [2, 103.92304845413264]); - }); - - - }); - - describe("var", function () { - it("Returns the variance of values in a DataFrame (Default axis is [1:column])", function () { - let data = [[0, 2, 4], [360, 180, 360]]; - let df = new DataFrame(data); - assert.deepEqual(df.var().values, [64800, 15842, 63368]); - }); - it("Return the variance of values of a DataFrame along axis 0 (row)", function () { - let data = [[0, 2, 4], [360, 180, 360]]; - let df = new DataFrame(data); - assert.deepEqual(df.var(0).values, [4, 10800]); - }); - - - }); - - describe("describe", function () { - it("Returns descriptive statistics of columns in a DataFrame created from an array", function () { - let data = [[0, 2, 4, "a"], - [360, 180, 360, "b"], - [2, 4, 6, "c"]]; - - let df = new DataFrame(data); - let res = [[3, 3, 3], [120.666664, 62, 123.333336], - [207.271159, 102.19589, 204.961785], - [0, 2, 4], [2, 4, 6], - [360, 180, 360], - [42961.333333, 10444, 42009.333333]]; - - assert.deepEqual(df.describe().values, res); - }); - it("Returns descriptive statistics of columns in a DataFrame created from an Object", function () { - let data = { - "col1": [0, 2, 4], - "col2": [360, 180, 360], - "col3": [2, 4, 6], - "col4": ["boy", "girl", "man"], - "col5": ["apple", "car", "bee"] - }; - let df = new DataFrame(data); - - let res = [[3, 3, 3], [2, 300, 4], - [2, 103.923048, 2], - [0, 180, 2], [2, 360, 4], - [4, 360, 6], - [4, 10800, 4]]; - - assert.deepEqual(df.describe().values, res); - }); - - }); - - describe("count", function () { - it("Returns the count of non-nan values in a DataFrame (Default axis is [1:column])", function () { - let data = [[0, 2, 4], [360, 180.1, 360.11], [NaN, 2, 4], [360, undefined, 360]]; - let df = new DataFrame(data); - assert.deepEqual(df.count().values, [3, 3, 4]); - }); - it("Return the count of non NaN values of a DataFrame along axis 0", function () { - let data = [[0, 2, 4, NaN], [360, undefined, 360, 70]]; - let df = new DataFrame(data); - assert.deepEqual(df.count(0).values, [3, 3]); - }); - - }); - - describe("round", function () { - it("Rounds values in a DataFrame to 3dp", function () { - let data = [[10.1, 2.092, 4.23], [360.232244, 180.0190290, 36.902612]]; - let df = new DataFrame(data); - let expected = [[10.1, 2.092, 4.23], [360.232, 180.0190, 36.903]]; - assert.deepEqual(df.round(3).values, expected); - }); - it("Rounds values in a DataFrame to 1dp", function () { - let data = [[10.1, 2.092, 4.23], [360.232244, 180.0190290, 36.902612]]; - let df = new DataFrame(data); - let expected = [[10.1, 2.1, 4.2], [360.2, 180.0, 36.9]]; - assert.deepEqual(df.round(1).values, expected); - }); - - }); - - describe("sort_values", function () { - it("Sort values in DataFrame by specified column in ascending order (Default)", function () { - let data = [[0, 2, 4, "a"], - [360, 180, 360, "b"], - [2, 4, 6, "c"]]; - - let df = new DataFrame(data, { "columns": ["col1", "col2", "col3", "col4"] }); - df.sort_values({ "by": "col1", inplace: true, ascending: true }); - let expected = [[0, 2, 4, "a"], [2, 4, 6, "c"], [360, 180, 360, "b"]]; - assert.deepEqual(df.values, expected); - assert.deepEqual(df.index, [0, 2, 1]); - - }); - - it("Sort values in DataFrame by specified column in ascending order (Default)", function () { - let data = [[0, 2, 4, "a"], - [360, 180, 1, "b"], - [2, 4, 6, "c"]]; - - let df = new DataFrame(data, { "columns": ["col1", "col2", "col3", "col4"] }); - let df_sort = df.sort_values({ "by": "col3" }); - let expected = [[360, 180, 1, "b"], [0, 2, 4, "a"], [2, 4, 6, "c"]]; - assert.deepEqual(df_sort.values, expected); - assert.deepEqual(df_sort.index, [1, 0, 2]); - - }); - it("Sort values in DataFrame by specified column in descending order", function () { - let data = [[0, 2, 4, "a"], - [360, 180, 360, "b"], - [2, 4, 6, "c"]]; - - let df = new DataFrame(data, { "columns": ["col1", "col2", "col3", "col4"] }); - let expected = [[360, 180, 360, "b"], [2, 4, 6, "c"], [0, 2, 4, "a"]]; - assert.deepEqual(df.sort_values({ "by": "col1", "ascending": false }).values, expected); - }); - - it("Sort values in DataFrame by specified column in descending order (second col)", function () { - let data = [[0, 2, 4, "a"], - [360, 180, 1, "b"], - [2, 4, 6, "c"]]; - - let df = new DataFrame(data, { "columns": ["col1", "col2", "col3", "col4"] }); - let expected = [[2, 4, 6, "c"], [0, 2, 4, "a"], [360, 180, 1, "b"]]; - assert.deepEqual(df.sort_values({ "by": "col3", "ascending": false }).values, expected); - }); - it("Sort values in DataFrame by specified column containing alpha(numeric) values", function () { - let data = [[0, 2, 4, "a"], - [360, 180, 1, "b"], - [2, 4, 6, "c"]]; - - let df = new DataFrame(data, { "columns": ["col1", "col2", "col3", "col4"] }); - let expected = [[2, 4, 6, 'c'], [360, 180, 1, 'b'], [0, 2, 4, 'a']]; - assert.deepEqual(df.sort_values({ "by": "col4", "ascending": false }).values, expected); - }); - it("Sort duplicate DataGrame with duplicate columns", function () { - - let data = { - "A": [1, 2, 3, 4, 5, 3, 5, 6, 4, 5, 3, 4], - "B": [2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4] - }; - - let df = new DataFrame(data); - let expected = [[1, 2], - [2, 3], - [3, 4], - [3, 7], - [3, 3], - [4, 5], - [4, 1], - [4, 4], - [5, 6], - [5, 8], - [5, 2], - [6, 9]]; - assert.deepEqual(df.sort_values({ "by": "A", "ascending": true }).values, expected); - }); - - - }); - - describe("copy", function () { - it("Makes a deep copy of DataFrame", function () { - let data = [[0, 2, 4], [360, 180, 360]]; - let df = new DataFrame(data); - let df_copy = df.copy(); - assert.deepEqual(df_copy.values, [[0, 2, 4], [360, 180, 360]]); - }); - it("Confirms child copy modification does not affect parent DataFrame", function () { - let data = [[0, 2, 4], [360, 180, 360]]; - let df = new DataFrame(data); - let df_copy = df.copy(); - df_copy.addColumn({ column: "col_new", value: ["boy", "girl"] }); - assert.notDeepEqual(df_copy.values, df.values); - }); - - }); - - - describe("set_index", function () { - it("Sets the index of a DataFrame created from an Object", function () { - let data = [{ alpha: "A", count: 1 }, { alpha: "B", count: 2 }, { alpha: "C", count: 3 }]; - let df = new DataFrame(data); - let df_new = df.set_index({ "key": ["one", "two", "three"] }); - assert.deepEqual(df_new.index, ["one", "two", "three"]); - }); - it("Sets the index of a DataFrame from column name", function () { - let data = [{ alpha: "A", count: 1 }, { alpha: "B", count: 2 }, { alpha: "C", count: 3 }]; - let df = new DataFrame(data); - let df_new = df.set_index({ "key": "alpha" }); - assert.deepEqual(df_new.index, ["A", "B", "C"]); - }); - it("Sets the index of a DataFrame from column name", function () { - let data = [{ alpha: "A", count: 1 }, { alpha: "B", count: 2 }, { alpha: "C", count: 3 }]; - let df = new DataFrame(data); - let df_new = df.set_index({ key: "alpha", drop: true }); - assert.deepEqual(df_new.index, ["A", "B", "C"]); - }); - it("Sets the index of a DataFrame created from an Array", function () { - let data = [[0, 2, 4], [360, 180, 360], [0, 2, 4], [360, 180, 360], [0, 2, 4]]; - let df = new DataFrame(data); - df.set_index({ "key": ["one", "two", "three", "four", "five"], "inplace": true }); - assert.deepEqual(df.index, ["one", "two", "three", "four", "five"]); - }); - - }); - - describe("reset_index", function () { - it("Resets the index of a DataFrame created from an Object", function () { - let data = [{ alpha: "A", count: 1 }, { alpha: "B", count: 2 }, { alpha: "C", count: 3 }]; - let df = new DataFrame(data); - let df_new = df.set_index({ "key": ["one", "two", "three"] }); - let df_reset = df_new.reset_index(); - assert.deepEqual(df_reset.index, [0, 1, 2]); - }); - it("Resets the index of a DataFrame created from an Array", function () { - let data = [[0, 2, 4], [360, 180, 360], [0, 2, 4], [360, 180, 360], [0, 2, 4]]; - let df = new DataFrame(data); - df.set_index({ "key": ["one", "two", "three", "four", "five"], "inplace": true }); - df.reset_index(true); - assert.deepEqual(df.index, [0, 1, 2, 3, 4]); - }); - - }); - - - // describe("apply", function () { - // it("Apply a function to all values of a DataFrame", function () { - // let data = [[0, 2, 4], - // [360, 180, 360], - // [0, 2, 4]] - // let df = new DataFrame(data) - - // let apply_func = (x) => { - // return x + 1000 - // } - // let expected = [[1000, 1002, 1004], [1360, 1180, 1360], [1000, 1002, 1004]] - // assert.deepEqual(df.apply(apply_func), expected) - // }); - - // it("Throws error on applying function to string columns", function () { - // let data = [[0, 2, "ab"], - // [360, 180, "mk"], - // [0, 2, "po"]] - // let df = new DataFrame(data) - - // let apply_func = (x) => { - // return x + 1000 - // } - // let expected = "Dtypes Error: columns dtypes must be numeric, got strings" - // assert.deepEqual(df.apply(apply_func), expected) - // }); - // }); - - - describe("query", function () { - - it("Get the DataFrame containing rows with the filtered column", function () { - - let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - let query_df = df.query({ "column": "B", "is": ">=", "to": 5 }); - let query_data = [[4, 5, 6], [20, 30, 40], [39, 89, 78]]; - assert.deepEqual(query_df.values, query_data); - }); - it("Get the Dataframe containing rows with the filtered column in String values", function () { - let data = { "Abs": [20, 30, 47], "Count": [34, 4, 5], "country code": ["NG", "FR", "GH"] }; - let cols = ["Abs", "Count", "country code"]; - let df = new DataFrame(data, { columns: cols }); - let query_df = df.query({ column: "country code", is: "==", to: "NG" }); - let query_data = [[20, 34, "NG"]]; - assert.deepEqual(query_df.values, query_data); - }); - it("Print Error for value key not specified", function () { - - let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - - assert.throws(function () { df.query({ "column": "B", "is": ">=" }); }, Error, "specify a value in param [to]"); - }); - it("Print Error for operator key not specified", function () { - - let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - - assert.throws(function () { df.query({ "column": "B", "to": 5 }); }, Error, "specify an operator in param [is]"); - }); - - it("Print Error for column key not specified", function () { - - let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - - assert.throws(function () { df.query({ "is": ">=", "to": 5 }); }, Error, "specify the column"); - }); - it("Print Error for column name not in dataframe", function () { - - let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - - assert.throws(function () { df.query({ "column": "D", "is": ">=", "to": 5 }); }, Error, "column D does not exist"); - }); - it("Confirms that query index are updated", function () { - - let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - let df_query = df.query({ "column": "B", "is": ">=", "to": 5 }); - assert.deepEqual(df_query.index, [1, 2, 3]); - }); - it("Confirms that columns data are updated inplace", function () { - - let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - df.query({ "column": "B", "is": ">=", "to": 5, inplace: true }); - assert.deepEqual(df.col_data, [[4, 20, 39], [5, 30, 89], [6, 40, 78]]); - }); - it("Confirms that query happens inplace", function () { - - let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - df.query({ "column": "B", "is": ">=", "to": 5, inplace: true }); - let query_data = [[4, 5, 6], [20, 30, 40], [39, 89, 78]]; - assert.deepEqual(df.values, query_data); - }); - it("Confirms that query happens inplace and index are updated", function () { - - let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - df.query({ "column": "B", "is": ">=", "to": 5, inplace: true }); - assert.deepEqual(df.index, [1, 2, 3]); - }); - it("Wrong query value", function () { - let data = { - "A": [30, 1, 2, 3], - "B": [34, 4, 5, 6], - "C": [20, 20, 30, 40] - }; - - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - - assert.throws(function () { df.query({ "column": "B", "is": ">", "to": 40 }); }, Error, "query returned empty data; is either 40 does not exist in column B"); - }); - - }); - - describe("addColumn", function () { - it("Print the data, after changing a column data", function () { - let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - - let new_col = [1, 2, 3, 4]; - - df.addColumn({ "column": "C", "value": new_col }); - - let new_data = [[1, 2, 1], [4, 5, 2], [20, 30, 3], [39, 89, 4]]; - - assert.deepEqual(df.values, new_data); - }); - it("Print the Dataframe column names, after a new column is added ", function () { - let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - - let new_col = [1, 2, 3, 4]; - - df.addColumn({ "column": "D", "value": new_col }); - - let new_column = ["A", "B", "C", "D"]; - - assert.deepEqual(df.column_names, new_column); - }); - it("Print Error for column name not in keyword passed", function () { - - let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - let new_col = [1, 2, 3, 4]; - - assert.throws(function () { df.addColumn({ "value": new_col }); }, Error, "column name not specified"); - }); - it("Check if new column value length is the same with Dataframe length", function () { - let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - let new_col = [1, 2, 3]; - assert.throws(function () { df.addColumn({ "column": "D", "value": new_col }); }, Error, "Array length 3 not equal to 4"); - }); - - it("Check that dtype is updated after a new column is added ", function () { - let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - let new_col = ["n", "b", "c", "f"]; - - df.addColumn({ "column": "D", "value": new_col }); - let dtype = ["int32", "int32", "int32", "string"]; - - assert.deepEqual(df.dtypes, dtype); - }); - - it("add series as value to a new column ", function () { - let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - let sf = new Series(["n", "b", "c", "f"]); - - df.addColumn({ "column": "D", "value": sf }); - let dtype = ["int32", "int32", "int32", "string"]; - - assert.deepEqual(df.dtypes, dtype); - }); - - }); - - // describe("groupby", function () { - // it("Check group by One column data", function () { - - // let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]] - // let cols = ["A", "B", "C"] - // let df = new DataFrame(data, { columns: cols }) - // let group_df = df.groupby(["A"]); - - // let group_dict = { - // '1': [[1, 2, 3]], - // '4': [[4, 5, 6]], - // '20': [[20, 30, 40]], - // '39': [[39, 89, 78]] - // } - - // assert.deepEqual(group_df.col_dict, group_dict); - // }); - // it("Obtain the DataFrame of one of the group", function () { - - // let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]] - // let cols = ["A", "B", "C"] - // let df = new DataFrame(data, { columns: cols }) - // let group_df = df.groupby(["A"]); - // let new_data = [[1, 2, 3]] - - // assert.deepEqual(group_df.get_groups([1]).values, new_data); - // }); - // it("Check group by Two column data", function () { - - // let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]] - // let cols = ["A", "B", "C"] - // let df = new DataFrame(data, { columns: cols }) - // let group_df = df.groupby(["A", "B"]); - // let new_data = { - // '1': { '2': [[1, 2, 3]] }, - // '4': { '5': [[4, 5, 6]] }, - // '20': { '30': [[20, 30, 40]] }, - // '39': { '89': [[39, 89, 78]] } - // } - - // assert.deepEqual(group_df.col_dict, new_data); - // }); - - // it("Obtain the DataFrame of one of the group, grouped by two column", function () { - - // let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]] - // let cols = ["A", "B", "C"] - // let df = new DataFrame(data, { columns: cols }) - // let group_df = df.groupby(["A", "B"]); - // let new_data = [[1, 2, 3]] - - // assert.deepEqual(group_df.get_groups([1, 2]).values, new_data); - // }); - - // it("Count column in group", function () { - - // let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]] - // let cols = ["A", "B", "C"] - // let df = new DataFrame(data, { columns: cols }) - // let group_df = df.groupby(["A", "B"]); - // let new_data = { - // '1': { '2': [1] }, - // '4': { '5': [1] }, - // '20': { '30': [1] }, - // '39': { '89': [1] } - // } - - // assert.deepEqual(group_df.col(["C"]).count(), new_data); - // }); - // it("sum column element in group", function () { - - // let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]] - // let cols = ["A", "B", "C"] - // let df = new DataFrame(data, { columns: cols }) - // let group_df = df.groupby(["A", "B"]); - // let new_data = { - // '1': { '2': [3] }, - // '4': { '5': [6] }, - // '20': { '30': [40] }, - // '39': { '89': [78] } - // } - - // assert.deepEqual(group_df.col(["C"]).sum(), new_data); - // }); - - // it("sum column element group by one column", function () { - - // let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]] - // let cols = ["A", "B", "C"] - // let df = new DataFrame(data, { columns: cols }) - // let group_df = df.groupby(["A"]); - - // let new_data = { '1': [2, 3], '4': [5, 6], '20': [30, 40], '39': [89, 78] } - - // assert.deepEqual(group_df.col(["B", "C"]).sum(), new_data); - // }); - - // it("Perform aggregate on column for groupby", function () { - - // let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]] - // let cols = ["A", "B", "C"] - // let df = new DataFrame(data, { columns: cols }) - // let group_df = df.groupby(["A", "B"]); - // let new_data = { - // '1': { '2': [2, 1] }, - // '4': { '5': [5, 1] }, - // '20': { '30': [30, 1] }, - // '39': { '89': [89, 1] } - // } - - // assert.deepEqual(group_df.agg({ "B": "mean", "C": "count" }), new_data); - // }); - - - // }); - - describe("column", function () { - it("Obtain a column from a dataframe created from object", function () { - let data = [{ alpha: "A", count: 1 }, { alpha: "B", count: 2 }, { alpha: "C", count: 3 }]; - let options = { columns: ["Gender", "count"] }; - let df = new DataFrame(data, options); - let col_data = df.column("count"); - let rslt_data = [1, 2, 3]; - assert.deepEqual(col_data.values, rslt_data); - }); - it("Obtain a column from a dataframe", function () { - let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - let col_data = df.column("C"); - let rslt_data = [3, 6, 40, 78]; - assert.deepEqual(col_data.values, rslt_data); - }); - it("Throw Error for wrong column", function () { - let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - assert.throws(() => { df.column("D"); }, Error, "column D does not exist"); - - }); - }); - - // describe("Concatenate", function () { - - // it("Check the axis 0 concatenation", function () { - // let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]] - // let cols = ["A", "B", "C"] - // let df = new DataFrame(data, { columns: cols }) - - // let data1 = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]] - // let cols1 = ["A", "B", "C"] - // let df1 = new DataFrame(data1, { columns: cols1 }) - - // let data2 = [[1, 2, 3, 5], [4, 5, 6, 8], [20, 30, 40, 10]] - // let cols2 = ["A", "B", "C", "D"] - // let df2 = new DataFrame(data2, { columns: cols2 }) - - // let new_df = DataFrame.concat({ "df_list": [df, df1, df2], "axis": 0 }) - - // let data_values = [[1, 2, 3, NaN], [4, 5, 6, NaN], [20, 30, 40, NaN], [39, 89, 78, NaN], - // [1, 2, 3, NaN], [4, 5, 6, NaN], [20, 30, 40, NaN], [39, 89, 78, NaN], - // [1, 2, 3, 5], [4, 5, 6, 8], [20, 30, 40, 10]] - - // assert.deepEqual(new_df.values, data_values); - // }); - - // it("Check the axis 1 concatenation", function () { - // let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]] - // let cols = ["A", "B", "C"] - // let df = new DataFrame(data, { columns: cols }) - - // let data1 = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]] - // let cols1 = ["A", "B", "C"] - // let df1 = new DataFrame(data1, { columns: cols1 }) - - // let data2 = [[1, 2, 3, 5], [4, 5, 6, 8], [20, 30, 40, 10]] - // let cols2 = ["A", "B", "C", "D"] - // let df2 = new DataFrame(data2, { columns: cols2 }) - - // let new_df = DataFrame.concat({ "df_list": [df, df1, df2], "axis": 1 }) - - // let data_values = [[1, 2, 3, 1, 2, 3, 1, 2, 3, 5], [4, 5, 6, 4, 5, 6, 4, 5, 6, 8], - // [20, 30, 40, 20, 30, 40, 20, 30, 40, 10], [39, 89, 78, 39, 89, 78, NaN, - // NaN, NaN, NaN]] - // assert.deepEqual(new_df.values, data_values); - // }); - // }); - - - describe("Apply", function () { - it("Apply math operation on dataframe element wise", function () { - let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - let rslt = [[2, 3, 4], [5, 6, 7], [21, 31, 41], [40, 90, 79]]; - - let apply_rslt = df.apply({ - callable: (x) => { - return x + 1; - } - }); - - assert.deepEqual(apply_rslt.values, rslt); - }); - - it("Apply string function on all elements of a dataframe", function () { - let data = [["BOY", "GIRL", "ALL"], ["Man", "Woman", "Girl"]]; - let df = new DataFrame(data); - let rslt = [["boy", "girl", "all"], ["man", "woman", "girl"]]; - - let apply_rslt = df.apply({ - callable: (x) => { - return x.toLowerCase(); - - } - }); - assert.deepEqual(apply_rslt.values, rslt); - }); - - it("Throws error if you try to run a function that does not operate on axis and axis is specified", function () { - let data = [["BOY", "GIRL", "ALL"], ["Man", "Woman", "Girl"]]; - let df = new DataFrame(data); - - let err = `Callable Error: You can only apply JavaScript functions on DataFrames when axis is not specified. This operation is applied on all element, and returns a DataFrame of the same shape.`; - - assert.throws(() => { - df.apply({ - axis: 0, callable: (x) => { - return x.toLowerCase(); - } - }); - }, Error, err); - - }); - - it("Apply math operation on dataframe at axis 1", function () { - let data = [[1, 2, 3], - [4, 5, 6], - [20, 30, 40], - [39, 89, 78]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - let rslt = [64, 126, 127]; - - let apply_rslt = df.apply({ - axis: 1, callable: (x) => { - return x.sum(); - } - }); - - assert.deepEqual(apply_rslt.values, rslt); - }); - - it("Apply tensor operation on dataframe at axis 0", function () { - let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - - let rslt = [6, 15, 90, 206]; - - let apply_rslt = df.apply({ - axis: 0, callable: (x) => { - return x.sum(); - } - }); - - assert.deepEqual(apply_rslt.values, rslt); - - }); - - it("Apply add operation element wise dataframe on axis 1", function () { - let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - - let result = [[2, 3, 4], - [5, 6, 7], - [21, 31, 41], - [40, 90, 79]]; - - let apply_rslt = df.apply({ - axis: 0, callable: (x) => { - return x.add(1); - } - }); - - assert.deepEqual(apply_rslt.values, result); - }); - }); - - describe("dropna", function () { - it("drop inplace at axis 0 at inplace false", function () { - let data = [[NaN, 1, 2, 3], [3, 4, NaN, 9], [5, 6, 7, 8]]; - let column = ["A", "B", "C", "D"]; - let df = new DataFrame(data, { columns: column }); - - let df_val = [[5, 6, 7, 8]]; - - assert.deepEqual(df.dropna().values, df_val); - - }); - it("drop inplace at axis 1, inplace false ", function () { - let data = [[NaN, 1, 2, 3], [3, 4, NaN, 9], [5, 6, 7, 8]]; - let column = ["A", "B", "C", "D"]; - let df = new DataFrame(data, { columns: column }); - - let df_val = [[1, 3], [4, 9], [6, 8]]; - - assert.deepEqual(df.dropna({ axis: 1 }).values, df_val); - - }); - it("drop inplace at axis 1, inplace true ", function () { - let data = [[NaN, 1, 2, 3], [3, 4, NaN, 9], [5, 6, 7, 8]]; - let column = ["A", "B", "C", "D"]; - let df = new DataFrame(data, { columns: column }); - - let df_val = [[1, 3], [4, 9], [6, 8]]; - df.dropna({ axis: 1, inplace: true }); - - - assert.deepEqual(df.values, df_val); - - }); - it("drop inplace at axis 0 at inplace true", function () { - let data = [[NaN, 1, 2, 3], [3, 4, NaN, 9], [5, 6, 7, 8]]; - let column = ["A", "B", "C", "D"]; - let df = new DataFrame(data, { columns: column }); - - let df_val = [[5, 6, 7, 8]]; - - df.dropna({ inplace: true }); - assert.deepEqual(df.values, df_val); - - }); - }); - - describe("isna", function () { - - it("check if each value are nan", function () { - let data = [[NaN, 1, 2, 3], [3, 4, undefined, 9], [5, 6, 7, 8]]; - let column = ["A", "B", "C", "D"]; - let df = new DataFrame(data, { columns: column }); - - let df_val = [ - [true, false, false, false], - [false, false, true, false], - [false, false, false, false] - ]; - - assert.deepEqual(df.isna().values, df_val); - }); - }); - - describe("fillna", function () { - - it("replace all NaN value", function () { - let data = [[NaN, 1, 2, 3], [3, 4, NaN, 9], [5, 6, 7, 8]]; - let column = ["A", "B", "C", "D"]; - let df = new DataFrame(data, { columns: column }); - - let df_val = [[-999, 1, 2, 3], [3, 4, -999, 9], [5, 6, 7, 8]]; - df.fillna({ values: -999, inplace: true }); - assert.deepEqual(df.values, df_val); - }); - it("replace all NaN value", function () { - let data = [[NaN, 1, 2, 3], [3, 4, NaN, 9], [5, 6, 7, 8]]; - let column = ["A", "B", "C", "D"]; - let df = new DataFrame(data, { columns: column }); - - let df_val = [[-999, 1, 2, 3], [3, 4, -999, 9], [5, 6, 7, 8]]; - - let df_filled = df.fillna({ values: [-999] }); - assert.deepEqual(df_filled.values, df_val); - }); - - it("Fills only a specified column", function () { - let data = [[1, 2, 3], - [4, 5, 6], - [20, NaN, 40], - [39, NaN, 78]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - let new_vals = [[1, 2, 3], [4, 5, 6], [20, 2, 40], [39, 2, 78]]; - let df_filled = df.fillna({ columns: ["B"], values: [2] }); - - assert.deepEqual(df_filled.values, new_vals); - }); - it("Fills column with specified values not in place", function () { - let data = [[1, 2, 3], [4, 5, 6], [NaN, 20, 40], [NaN, -1, 78]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - let new_vals = [[1, 2, 3], [4, 5, 6], [-2, 20, 40], [-2, -1, 78]]; - let df_filled = df.fillna({ columns: ["A"], values: [-2] }); - - assert.deepEqual(df_filled.values, new_vals); - }); - - it("Fills a list of columns with specified values", function () { - let data = [[1, undefined, 3], [4, undefined, 6], [NaN, "boy", 40], [NaN, "girl", 78]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - let new_vals = [[1, "girl", 3], [4, "girl", 6], [200, "boy", 40], [200, "girl", 78]]; - let df_filled = df.fillna({ columns: ["A", "B"], values: [200, "girl"] }); - assert.deepEqual(df_filled.values, new_vals); - }); - it("Fills a list of columns with specified values inplace", function () { - let data = [[1, undefined, 3], [4, undefined, 6], [NaN, "boy", 40], [NaN, "girl", 78]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - let new_vals = [[1, "girl", 3], [4, "girl", 6], [200, "boy", 40], [200, "girl", 78]]; - df.fillna({ columns: ["A", "B"], values: [200, "girl"], inplace: true }); - assert.deepEqual(df.values, new_vals); - }); - }); - - - describe("nanindex", function () { - - it("print out the nanIndex", function () { - let data = [[NaN, 1, 2, 3], [3, 4, NaN, 9], [5, 6, 7, 8]]; - let column = ["A", "B", "C", "D"]; - let df = new DataFrame(data, { columns: column }); - - let df_val = [0, 1]; - assert.deepEqual(df.nanIndex(), df_val); - }); - }); - - describe("select_dtypes", function () { - - it("Returns float columns in a DataFrame", function () { - let data = [[30, 1, 2, "boy"], [3.2, 4, 30, "girl"], [5.09, 6, 7, "cat"]]; - let column = ["A", "B", "C", "D"]; - let df = new DataFrame(data, { columns: column }); - let df_sub = df.select_dtypes(['float32']); - assert.deepEqual(df_sub.col_data, [[30, 3.2, 5.09]]); - }); - - it("Returns int columns in a DataFrame", function () { - let data = [[30, 1, 2, "boy"], - [3.2, 4, 30, "girl"], - [5.09, 6, 7, "cat"]]; - let column = ["A", "B", "C", "D"]; - let df = new DataFrame(data, { columns: column }); - let df_sub = df.select_dtypes(['int32']); - assert.deepEqual(df_sub.values, [[1, 2], [4, 30], [6, 7]]); - }); - - it("Returns string columns in a DataFrame", function () { - let data = [[30, 1, 2, "boy"], - [3.2, 4, 30, "girl"], - [5.09, 6, 7, "cat"]]; - let column = ["A", "B", "C", "D"]; - let df = new DataFrame(data, { columns: column }); - let df_sub = df.select_dtypes(['string']); - assert.deepEqual(df_sub.col_data, [["boy", "girl", "cat"]]); - }); - - it("Returns string and float columns in a DataFrame", function () { - let data = [[30, 1, 2, "boy"], - [3.2, 4, 30, "girl"], - [5.09, 6, 7, "cat"]]; - let column = ["A", "B", "C", "D"]; - let df = new DataFrame(data, { columns: column }); - let df_sub = df.select_dtypes(['string', 'float32']); - assert.deepEqual(df_sub.col_data, [[30, 3.2, 5.09], ["boy", "girl", "cat"]]); - }); - - it("Returns int and float columns in a DataFrame", function () { - let data = [[30, 1, 2, "boy"], - [3.2, 4, 30, "girl"], - [5.09, 6, 7, "cat"]]; - let column = ["A", "B", "C", "D"]; - let df = new DataFrame(data, { columns: column }); - let df_sub = df.select_dtypes(['int32', 'float32']); - assert.deepEqual(df_sub.values, [[30, 1, 2], [3.2, 4, 30], [5.09, 6, 7]]); - }); - }); - - describe("cum_ops", function () { - - it("check cumsum data", function () { - let data = [[2, 1, 2, 3], [3, 4, 11, 9], [5, 6, 7, 8]]; - let column = ["A", "B", "C", "D"]; - let df = new DataFrame(data, { columns: column }); - let rslt = [[2, 1, 2, 3], [5, 5, 13, 12], [10, 11, 20, 20]]; - - assert.deepEqual(df.cumsum().values, rslt); - }); - it("check cumsum data along axis 1", function () { - let data = [[2, 1, 2, 3], [3, 4, 11, 9], [5, 6, 7, 8]]; - let column = ["A", "B", "C", "D"]; - let df = new DataFrame(data, { columns: column }); - let rslt = [[2, 3, 5, 8], [3, 7, 18, 27], [5, 11, 18, 26]]; - - assert.deepEqual(df.cumsum({ axis: 1 }).values, rslt); - }); - }); - - describe("__set_column_property", async function () { - it("Access column object using list subset and name of column", async function () { - let data = [{ alpha: "A", count: 1 }, { alpha: "B", count: 2 }, { alpha: "C", count: 3 }]; - let df = new DataFrame(data); - let col1 = ["A", "B", "C"]; - let col2 = [1, 2, 3]; - assert.deepEqual(df['alpha'].values, col1); - assert.deepEqual(df['count'].values, col2); - }); - it("Access column object using list subset and name of column after assigning", function () { - let data = [[1, 2, 3], [4, 5, 6]]; - let cols = ["A", "B", "C"]; - let df = new DataFrame(data, { columns: cols }); - df["A"] = [30, 40]; - let col1 = [30, 40]; - assert.deepEqual(df["A"].values, col1); - }); - }); - - describe("lt", function () { - it("Returns Less than of DataFrame and other DataFrame (element-wise)", function () { - let data1 = [[10, 45, 56, 10], [25, 23, 20, 10]]; - let data2 = [[100, 450, 590, 5], [25, 2, 0, 10]]; - - let df = new DataFrame(data1); - let df2 = new DataFrame(data2); - let expected = [[true, true, true, false], - [false, false, false, false]]; - assert.deepEqual(df.lt(df2).values, expected); - }); - - it("Return Less than of series scalar (element-wise)", function () { - let data1 = [[10, 45, 56, 10], [25, 23, 20, 10]]; - let sf = new DataFrame(data1); - let expected = [[true, false, false, true], - [true, true, true, true]]; - assert.deepEqual(sf.lt(30).values, expected); - }); - it("Return Less than of series and DataFrame scalar along axis 1 (column)", function () { - let data1 = [[10, 45, 56, 10], - [23, 20, 10, 10]]; - let sf = new Series([10, 23, 56, 100]); - let df = new DataFrame(data1); - let expected = [[false, false, false, true], [false, true, true, true]]; - assert.deepEqual(df.lt(sf, 1).values, expected); - }); - - it("Return Less than of Array and DataFrame scalar along axis 1 (column)", function () { - let data1 = [[10, 45, 56, 10], [23, 20, 10, 10]]; - let sf = [10, 23, 56, 100]; - let df = new DataFrame(data1); - let expected = [[false, false, false, true], [false, true, true, true]]; - assert.deepEqual(df.lt(sf, 1).values, expected); - }); - - }); - - describe("gt", function () { - it("Return Greater than of series and other series (element-wise)", function () { - let data1 = [[10, 45, 56, 10], [25, 23, 20, 10]]; - let data2 = [[100, 450, 590, 5], [25, 2, 0, 10]]; - - let df = new DataFrame(data1); - let df2 = new DataFrame(data2); - let expected = [[false, false, false, true], [false, true, true, false]]; - assert.deepEqual(df.gt(df2).values, expected); - }); - - it("Return Greater than of series scalar (element-wise)", function () { - let data1 = [[10, 45, 56, 10], [25, 23, 20, 10]]; - let sf = new DataFrame(data1); - let expected = [[false, true, true, false], [false, false, false, false]]; - assert.deepEqual(sf.gt(30).values, expected); - }); - - it("Return Less than of Array and DataFrame scalar along axis 1 (column)", function () { - let data1 = [[10, 45, 56, 10], [23, 20, 10, 10]]; - let sf = [10, 23, 56, 100]; - let df = new DataFrame(data1); - let expected = [[false, true, false, false], [true, false, false, false]]; - assert.deepEqual(df.gt(sf, 1).values, expected); - }); - - }); - - describe("le", function () { - it("Return Less than or Equal to of series and other series (element-wise)", function () { - let data1 = [[10, 45, 56, 10], [25, 23, 20, 10]]; - let data2 = [[100, 450, 590, 5], [25, 2, 0, 10]]; - - let df = new DataFrame(data1); - let df2 = new DataFrame(data2); - let expected = [[true, true, true, false], [true, false, false, true]]; - assert.deepEqual(df.le(df2).values, expected); - }); - - it("Return Less than or Equal to of series scalar (element-wise)", function () { - let data1 = [[10, 45, 56, 10], [25, 23, 30, 10]]; - let sf = new DataFrame(data1); - let expected = [[true, false, false, true], [true, true, true, true]]; - assert.deepEqual(sf.le(30).values, expected); - }); - - }); - - describe("ge", function () { - it("Return Greater than or Equal to of series and other series (element-wise)", function () { - let data1 = [[10, 45, 56, 10], [25, 23, 20, 10]]; - let data2 = [[100, 450, 590, 5], [25, 2, 0, 10]]; - - let df = new DataFrame(data1); - let df2 = new DataFrame(data2); - let expected = [[false, false, false, true], [true, true, true, true]]; - assert.deepEqual(df.ge(df2).values, expected); - }); - - it("Return Greater than or Equal to of series scalar (element-wise)", function () { - let data1 = [[10, 45, 56, 10], [25, 23, 30, 10]]; - let sf = new DataFrame(data1); - let expected = [[false, true, true, false], [false, false, true, false]]; - assert.deepEqual(sf.ge(30).values, expected); - }); - - }); - - describe("ne", function () { - it("Return Not Equal to of series and other series (element-wise)", function () { - let data1 = [[10, 45, 56, 10], [25, 23, 20, 10]]; - let data2 = [[100, 450, 590, 5], [25, 2, 0, 10]]; - - let df = new DataFrame(data1); - let df2 = new DataFrame(data2); - let expected = [[true, true, true, true], [false, true, true, false]]; - assert.deepEqual(df.ne(df2).values, expected); - }); - - it("Return Not Equal to of series scalar (element-wise)", function () { - let data1 = [[10, 45, 56, 10], [25, 23, 30, 10]]; - let sf = new DataFrame(data1); - let expected = [[true, true, true, true], [true, true, false, true]]; - assert.deepEqual(sf.ne(30).values, expected); - }); - - }); - - describe("eq", function () { - it("Return Equal to of DataFrame and other DataFrame (element-wise)", function () { - let data1 = [[10, 45, 56, 10], [25, 23, 20, 10]]; - let data2 = [[100, 450, 590, 5], [25, 2, 0, 10]]; - - let df = new DataFrame(data1); - let df2 = new DataFrame(data2); - let expected = [[false, false, false, false], [true, false, false, true]]; - assert.deepEqual(df.eq(df2).values, expected); - }); - - it("Return Equal to of DataFrame with scalar (element-wise)", function () { - let data1 = [[10, 45, 56, 10], [25, 23, 30, 10]]; - let sf = new DataFrame(data1); - let expected = [[false, false, false, false], [false, false, true, false]]; - assert.deepEqual(sf.eq(30).values, expected); - }); - it("Return Equal to of series and DataFrame scalar along axis 1 (column)", function () { - let data1 = { "Col1": [10, 45, 56, 10], "Col2": [23, 20, 10, 10] }; - let sf = new Series([10, 23]); - let df = new DataFrame(data1); - let expected = [[true, false, false, true], [true, false, false, false]]; - assert.deepEqual(df.eq(sf, 1).col_data, expected); - }); - - }); - - describe("replace", function () { - it("Replace values given in replace param", function () { - let data1 = [[10, 45, 56, 25], [23, 20, 10, 24]]; - let sf = new DataFrame(data1); - let expected = [[-999, 45, 56, 25], [23, 20, -999, 24]]; - let df_rep = sf.replace({ replace: 10, with: -999 }); - assert.deepEqual(df_rep.values, expected); - }); - - it("Replace values given in replace param with value (String type)", function () { - let data1 = [["A", "A", "A", "B"], ["B", "C", "C", "D"]]; - let df = new DataFrame(data1); - let expected = [["boy", "boy", "boy", "B"], ["B", "C", "C", "D"]]; - let df_rep = df.replace({ replace: "A", with: "boy" }); - assert.deepEqual(df_rep.values, expected); - }); - it("Throw error on wrong param passed", function () { - let data1 = [["A", "A", "A", "B"], ["B", "C", "C", "D"]]; - let sf = new DataFrame(data1); - let expected = `Params Error: A specified parameter is not supported. Your params must be any of the following [replace,with,in]`; - assert.throws(() => { sf.replace({ replce: "A", with: "boy" }); }, Error, expected); - }); - it("Replace values in specified two column(s)", function () { - let data1 = [["A", "A", 1, "girl"], - ["B", "A", 2, "woman"], - ["A", "B", 3, "man"]]; - let df = new DataFrame(data1, { columns: ["col1", "col2", "col3", "col4"] }); - let expected = [["boy", "boy", 1, "girl"], - ["B", "boy", 2, "woman"], - ["boy", "B", 3, "man"]]; - let df_rep = df.replace({ replace: "A", with: "boy", in: ["col1", "col2"] }); - assert.deepEqual(df_rep.values, expected); - }); - - it("Replace values in specified single column(s)", function () { - let data1 = [[2, "A", 1, "girl"], - [3, "A", 2, "woman"], - [4, "B", 3, "man"]]; - let df = new DataFrame(data1, { columns: ["col1", "col2", "col3", "col4"] }); - let expected = [[2, "A", 1, "girl"], - [100, "A", 2, "woman"], - [4, "B", 3, "man"]]; - let df_rep = df.replace({ replace: 3, with: 100, in: ["col1"] }); - assert.deepEqual(df_rep.values, expected); - }); - - - }); - - describe("drop_duplicates", function () { - it("Return Series with duplicate values removed (Default, first values kept)", function () { - let data1 = [10, 45, 56, 10, 23, 20, 10, 10]; - let sf = new Series(data1); - let expected = [10, 45, 56, 23, 20]; - let expected_index = [0, 1, 2, 4, 5]; - let df_drop = sf.drop_duplicates(); - assert.deepEqual(df_drop.values, expected); - assert.deepEqual(df_drop.index, expected_index); - - }); - - it("Return Series with duplicate values removed (last values kept)", function () { - let data1 = [10, 45, 56, 10, 23, 20, 10, 10]; - let sf = new Series(data1); - let expected = [45, 56, 23, 20, 10]; - let expected_index = [1, 2, 4, 5, 7]; - let df_drop = sf.drop_duplicates({ keep: "last" }); - assert.deepEqual(df_drop.values, expected); - assert.deepEqual(df_drop.index, expected_index); - - }); - - it("Return Series with duplicate values removed (String)", function () { - let data1 = ["A", "A", "A", "B", "B", "C", "C", "D"]; - let sf = new Series(data1); - let expected = ["A", "B", "C", "D"]; - let expected_index = [0, 3, 5, 7]; - sf.drop_duplicates({ inplace: true }); - assert.deepEqual(sf.values, expected); - assert.deepEqual(sf.index, expected_index); - - }); - - }); - - describe("sum", function () { - it("Sum values of a DataFrame by Default axis column (axis=1)", function () { - let data1 = [[30, 40, 3.1], - [5, 5, 5.1], - [5, 5, 3.2]]; - let sf = new DataFrame(data1); - let res = [40, 50, 11.4]; - assert.deepEqual(sf.sum().values, res); - }); - it("Sum values of a DataFrame along row axis (axis=0)", function () { - let data1 = [[30, 40, 3.1], - [5, 5, 5.1], - [5, 5, 3.2]]; - let df = new DataFrame(data1); - let res = [73.1, 15.1, 13.2]; - assert.deepEqual(df.sum({ axis: 0 }).values, res); - }); - it("Sum values of a mixed DataFrame along row axis (axis=0)", function () { - let data1 = [[30, 40, 3.1, true], - [5, 5, 5.1, true], - [5, 5, 3.2, true]]; - let df = new DataFrame(data1); - let res = [74.1, 16.1, 14.2]; - assert.deepEqual(df.sum({ axis: 0 }).values, res); - }); - it("Sum values of a boolean DataFrame along row axis (axis=0)", function () { - let data1 = [[true, true, false, true], - [false, false, false, false], - [false, true, true, false]]; - let df = new DataFrame(data1); - let res = [3, 0, 2]; - assert.deepEqual(df.sum({ axis: 0 }).values, res); - }); - it("Sum values of a boolean DataFrame along default column axis (axis=1)", function () { - let data1 = [[true, true, false, true], - [false, false, false, false], - [false, true, true, false]]; - let df = new DataFrame(data1); - let res = [1, 2, 1, 1]; - assert.deepEqual(df.sum().values, res); - }); - it("Sum values of a df with missing values", function () { - let data1 = [[11, 20, 3], [null, 15, 6], [2, 30, 40], [2, 89, 78]]; - let df = new DataFrame(data1); - let res = [15, 154, 127]; - assert.deepEqual(df.sum().values, res); - }); - - }); - - describe("abs", function () { - it("Returns the absolute values in DataFrame of ints", function () { - let data1 = [[-10, 45, 56, 10], [-25, 23, 20, -10]]; - let df = new DataFrame(data1); - let expected = [[10, 45, 56, 10], [25, 23, 20, 10]]; - assert.deepEqual(df.abs().values, expected); - }); - - it("Returns the absolute values in mixed DataFrame", function () { - let data1 = [[-10, -45.1, 56, 10], [-25, -23.2, 20, -10]]; - let df = new DataFrame(data1); - let expected = [[10, 45.1, 56, 10], [25, 23.2, 20, 10]]; - assert.deepEqual(df.abs().values, expected); - }); - }); - - describe("T", function () { - it("Returns the Tranpose of a DataFrame", function () { - let data1 = [[10, 45, 56, 10], - [25, 23, 20, 10]]; - - let cols = ["a", "b", "c", "d"]; - let df = new DataFrame(data1, { columns: cols }); - let df_trans = df.T; - let expected_vals = [[10, 25], [45, 23], [56, 20], [10, 10]]; - let expected_index = cols; - let expected_col_names = [0, 1]; - assert.deepEqual(df_trans.index, expected_index); - assert.deepEqual(df_trans.values, expected_vals); - assert.deepEqual(df_trans.column_names, expected_col_names); - - }); - - }); - - - describe("astype", function () { - it("set type of float column to int", function () { - let data = { - "A": [-20.1, 30, 47.3, -20], - "B": [34, -4, 5, 6], - "C": [20.1, -20.23, 30.3, 40.11], - "D": ["a", "b", "c", "c"] - }; - let ndframe = new DataFrame(data); - let df = ndframe.astype({ column: "A", dtype: "int32" }); - - assert.deepEqual(df.dtypes, ['int32', 'int32', 'float32', 'string']); - assert.deepEqual(df['A'].values, [-20, 30, 47, -20]); - - }); - it("set type of int column to float", function () { - let data = { - "A": [-20.1, 30, 47.3, -20], - "B": [34, -4, 5, 6], - "C": [20.1, -20.23, 30.3, 40.11], - "D": ["a", "b", "c", "c"] - }; - let ndframe = new DataFrame(data); - let df = ndframe.astype({ column: "B", dtype: "float32" }); - - assert.deepEqual(df.dtypes, ['float32', 'float32', 'float32', 'string']); - assert.deepEqual(df['B'].values, [34, -4, 5, 6]); - - }); - it("set type of string column to int", function () { - let data = { - "A": [-20.1, 30, 47.3, -20], - "B": [34, -4, 5, 6], - "C": [20.1, -20.23, 30.3, 40.11], - "D": ["20.1", "21", "23.4", "50.78"] - }; - let ndframe = new DataFrame(data); - let df = ndframe.astype({ column: "D", dtype: "int32" }); - - assert.deepEqual(df.dtypes, ['float32', 'int32', 'float32', 'int32']); - assert.deepEqual(df['D'].values, [20, 21, 23, 51]); - - }); - it("set type of string column to float", function () { - let data = { - "A": [-20.1, 30, 47.3, -20], - "B": [34, -4, 5, 6], - "C": [20.1, -20.23, 30.3, 40.11], - "D": ["20.1", "21", "23.4", "50.78"] - }; - let ndframe = new DataFrame(data); - let df = ndframe.astype({ column: "D", dtype: "float32" }); - - assert.deepEqual(df.dtypes, ['float32', 'int32', 'float32', 'float32']); - assert.deepEqual(df['D'].values, [20.1, 21, 23.4, 50.78]); - - }); - }); - - - describe("nunique", function () { - it("Returns the number of unique elements along axis 1", function () { - let data = { - "A": [-20, 30, 47.3, -20], - "B": [34, -4, 5, 6], - "C": [20, 20, 30, 30], - "D": ["a", "b", "c", "c"] - }; - - let ndframe = new DataFrame(data); - let df = ndframe.nunique(1); - let res = [3, 4, 2, 3]; - assert.deepEqual(df.values, res); - - }); - it("Returns the number of unique elements along axis 0", function () { - let data = { - "A": [20, 30, 47.3, 30], - "B": [34, -4, 5, 30], - "C": [20, 20, 30, 30], - "D": ["a", "b", "c", "c"] - }; - - let ndframe = new DataFrame(data); - let df = ndframe.nunique(0); - let res = [3, 4, 4, 2]; - assert.deepEqual(df.values, res); - - }); - - }); - - - describe("unique", function () { - it("Returns the unique elements along axis 1", function () { - let data = { - "A": [-20, 30, 47.3, -20], - "B": [34, -4, 5, 6], - "C": [20, 20, 30, 30], - "D": ["a", "b", "c", "c"] - }; - - let ndframe = new DataFrame(data); - let df = ndframe.unique(1); - let res = { - "A": [-20, 30, 47.3], - "B": [34, -4, 5, 6], - "C": [20, 30], - "D": ["a", "b", "c"] - }; - - assert.deepEqual(df, res); - - }); - it("Returns the unique elements along axis 0", function () { - let data = { - "A": [-20, 30, 47.3, -20], - "B": [34, -4, 5, 6], - "C": [20, 20, 30, 30], - "D": ["a", "b", "c", "c"] - }; - - let ndframe = new DataFrame(data); - let df = ndframe.unique(0); - let res = { - 0: [-20, 34, 20, "a"], - 1: [30, -4, 20, "b"], - 2: [47.3, 5, 30, "c"], - 3: [-20, 6, 30, "c"] - }; - assert.deepEqual(df, res); - - }); - }); - - - describe("rename", function () { - it("Rename columns along axis 1", function () { - let data = { - "A": [-20, 30, 47.3, -20], - "B": [34, -4, 5, 6], - "C": [20, 20, 30, 30], - "D": ["a", "b", "c", "c"] - }; - - let ndframe = new DataFrame(data); - let df = ndframe.rename({ mapper: { "A": "a1", "B": "b1" } }); - let res = ["a1", "b1", "C", "D"]; - assert.deepEqual(df.columns, res); - - }); - it("confirms original column name is not modified along axis 1", function () { - let data = { - "A": [-20, 30, 47.3, -20], - "B": [34, -4, 5, 6], - "C": [20, 20, 30, 30], - "D": ["a", "b", "c", "c"] - }; - - let ndframe = new DataFrame(data); - // let df = ndframe.rename({ mapper: { "A": "a1", "B": "b1" } }) - let res = ["A", "B", "C", "D"]; - assert.deepEqual(ndframe.columns, res); - - }); - it("Rename columns along axis 1 inplace", function () { - let data = { - "A": [-20, 30, 47.3, -20], - "B": [34, -4, 5, 6], - "C": [20, 20, 30, 30], - "D": ["a", "b", "c", "c"] - }; - - let df = new DataFrame(data); - df.rename({ mapper: { "A": "a1", "B": "b1" }, inplace: true }); - let res = ["a1", "b1", "C", "D"]; - assert.deepEqual(df.columns, res); - - }); - it("Rename string index along axis 0", function () { - let data = { - "A": [-20, 30, 47.3, -20], - "B": [34, -4, 5, 6], - "C": [20, 20, 30, 30], - "D": ["a", "b", "c", "c"] - }; - - let ndframe = new DataFrame(data, { index: ["a", "b", "c", "d"] }); - let df = ndframe.rename({ mapper: { "a": 0, "b": 1 }, axis: 0 }); - let res = [0, 1, "c", "d"]; - assert.deepEqual(df.index, res); - - }); - it("Rename string index along axis 0 inplace", function () { - let data = { - "A": [-20, 30, 47.3, -20], - "B": [34, -4, 5, 6], - "C": [20, 20, 30, 30], - "D": ["a", "b", "c", "c"] - }; - - let df = new DataFrame(data, { index: ["a", "b", "c", "d"] }); - df.rename({ mapper: { "a": 0, "b": 1 }, axis: 0, inplace: true }); - let res = [0, 1, "c", "d"]; - assert.deepEqual(df.index, res); - - }); - }); - - describe("sort_index", function () { - - it("sort index in ascending order", function () { - let data = [[0, 2, 4, "b"], - [360, 180, 360, "a"], - [2, 4, 6, "c"]]; - - let df = new DataFrame(data, { "columns": ["col1", "col2", "col3", "col4"] }); - df.set_index({ key: ["b", "a", "c"], inplace: true }); - - let df2 = df.sort_index(); - let rslt = [[360, 180, 360, 'a'], [0, 2, 4, 'b'], [2, 4, 6, 'c']]; - - assert.deepEqual(df2.values, rslt); - }); - it("sort index in descending order", function () { - let data = [[0, 2, 4, "b"], - [360, 180, 360, "a"], - [2, 4, 6, "c"]]; - - let df = new DataFrame(data, { "columns": ["col1", "col2", "col3", "col4"] }); - df.set_index({ key: ["b", "a", "c"], inplace: true }); - - let df2 = df.sort_index({ ascending: false }); - let rslt = [[2, 4, 6, 'c'], [0, 2, 4, 'b'], [360, 180, 360, 'a']]; - - assert.deepEqual(df2.values, rslt); - }); - it("sort index in descending order with inplace set to true", function () { - let data = [[0, 2, 4, "b"], - [360, 180, 360, "a"], - [2, 4, 6, "c"]]; - - let df = new DataFrame(data, { "columns": ["col1", "col2", "col3", "col4"] }); - df.set_index({ key: ["b", "a", "c"], inplace: true }); - - df.sort_index({ ascending: false, inplace: true }); - let rslt = [[2, 4, 6, 'c'], [0, 2, 4, 'b'], [360, 180, 360, 'a']]; - assert.deepEqual(df.values, rslt); - }); - }); - - describe("append", function () { - - it("Add a new single row (array) to the end of a DataFrame", function () { - let data = [[0, 2, 4, "b"], - [360, 180, 360, "a"], - [2, 4, 6, "c"]]; - - let df = new DataFrame(data); - let expected_val = [[0, 2, 4, "b"], - [360, 180, 360, "a"], - [2, 4, 6, "c"], - [20, 40, 60, "d"]]; - - let rslt_df = df.append([[20, 40, 60, "d"]]); - assert.deepEqual(rslt_df.values, expected_val); - - }); - - it("Add a new single row (object) to the end of a DataFrame", function () { - let data = [[0, 2, 4, "b"], - [360, 180, 360, "a"], - [2, 4, 6, "c"]]; - - let df = new DataFrame(data, { "columns": ["col1", "col2", "col3", "col4"] }); - let expected_val = [[0, 2, 4, "b"], - [360, 180, 360, "a"], - [2, 4, 6, "c"], - [20, 40, 60, "d"]]; - let rslt_df = df.append({ col1: [20], col2: [40], col3: [60], col4: ["d"] }); - assert.deepEqual(rslt_df.values, expected_val); - - }); - - it("Add a new single row (object) to the end of a DataFrame", function () { - let data = [[0, 2, 4, "b"], - [360, 180, 360, "a"], - [2, 4, 6, "c"]]; - - let df = new DataFrame(data, { "columns": ["col1", "col2", "col3", "col4"] }); - let df2 = new DataFrame([[20, 40, 60, "d"]], { "columns": ["col1", "col2", "col3", "col4"] }); - - let expected_val = [[0, 2, 4, "b"], - [360, 180, 360, "a"], - [2, 4, 6, "c"], - [20, 40, 60, "d"]]; - - let rslt_df = df.append(df2); - assert.deepEqual(rslt_df.values, expected_val); - - }); - it("Confirm index Change after append", function () { - let data = [[0, 2, 4, "b"], - [360, 180, 360, "a"], - [2, 4, 6, "c"]]; - - let df = new DataFrame(data, { "columns": ["col1", "col2", "col3", "col4"] }); - let df2 = new DataFrame([[20, 40, 60, "d"]], { "columns": ["col1", "col2", "col3", "col4"] }); - - let rslt_df = df.append(df2); - assert.deepEqual(rslt_df.index, ["0_row0", "1_row0", "2_row0", "0_row1"]); - - }); - }); - - describe("Str", function () { - it("Str (startsWith) works for columns selected from a DF", function () { - let data = { - "Name": ["Apples", "Bake", "Application", undefined], - "Count": [2, 5, 4, 10], - "Price": [200, 300, 40, 250] - }; - - let df = new DataFrame(data); - let name_sf = df['Name']; - assert.deepEqual(name_sf.str.startsWith("App").values, [true, false, true, false]); - }); - it("Str (toLowerCase) works for columns selected from a DF", function () { - let data = { - "Name": ["Apples", "Bake", "Application", undefined], - "Count": [2, 5, 4, 10], - "Price": [200, 300, 40, 250] - }; - - let df = new DataFrame(data); - let name_sf = df['Name']; - assert.deepEqual(name_sf.str.toLowerCase().values, ["apples", "bake", "application", NaN]); - }); - }); - -}); diff --git a/danfojs-node/tests/core/generic.js b/danfojs-node/tests/core/generic.js deleted file mode 100644 index 84632a6e..00000000 --- a/danfojs-node/tests/core/generic.js +++ /dev/null @@ -1,273 +0,0 @@ -import { assert } from "chai"; -import NDframe from '../../src/core/generic'; -import * as tf from '@tensorflow/tfjs-node'; - - -describe("Generic (NDFrame)", function () { - describe("NDframe Created from Array", function () { - it("prints the shape of a 1D array", function () { - let data = [ 1, 2, 3, "Boy", "Girl" ]; - let ndframe = new NDframe(data); - assert.deepEqual(ndframe.shape, [ 5, 1 ]); - }); - it("prints the default assigned column name in a series", function () { - let data = [ "Boy", 20, 25 ]; - let ndframe = new NDframe(data); - assert.deepEqual(ndframe.column_names, [ "0" ]); - }); - it("prints the assigned column name in a series", function () { - let data = [ "Boy", 20, 25 ]; - let options = { "columns": 'Records' }; - let ndframe = new NDframe(data, options); - assert.deepEqual(ndframe.column_names, "Records"); - }); - it("prints the shape of a 2D array", function () { - let data = [ [ "Boy", 20 ], [ "Girl", 25 ] ]; - let ndframe = new NDframe(data); - assert.deepEqual(ndframe.shape, [ 2, 2 ]); - }); - it("prints the default assigned column names in 2D frame", function () { - let data = [ [ "Boy", 20 ], [ "Girl", 25 ] ]; - let ndframe = new NDframe(data); - assert.deepEqual(ndframe.column_names, [ 0, 1 ]); - }); - it("prints the assigned column names", function () { - let data = [ [ "Boy", 20 ], [ "Girl", 25 ] ]; - let options = { "columns": [ "Gender", "Age" ] }; - let ndframe = new NDframe(data, options); - assert.deepEqual(ndframe.column_names, [ "Gender", "Age" ]); - }); - it("prints the size of a frame", function () { - let data = [ [ "Boy", 20, 1 ], [ "Girl", 25, 3 ] ]; - let options = { "columns": [ "Gender", "Age", "count" ] }; - let ndframe = new NDframe(data, options); - assert.deepEqual(ndframe.size, 6); - }); - it("prints the dimension of a frame", function () { - let data = [ [ "Boy", 20, 1 ], [ "Girl", 25, 3 ] ]; - let options = { "columns": [ "Gender", "Age", "count" ] }; - let ndframe = new NDframe(data, options); - assert.deepEqual(ndframe.ndim, 2); - }); - it("prints the values of a frame", function () { - let data = [ [ 21, 20, 1 ], [ 20, 25, 3 ] ]; - let ndframe = new NDframe(data); - assert.deepEqual(ndframe.values, data); - }); - it("prints the values of a frame", function () { - let data = [ [ 21, 20, 1 ], [ 20, 25, 3 ] ]; - let ndframe = new NDframe(data); - assert.deepEqual(ndframe.values, data); - }); - }); - - describe("NDframe Created from JavaScript Object", function () { - - it("prints the shape of a 2D frame created from an Object", function () { - let data = [ { alpha: "A", count: 1 }, { alpha: "B", count: 2 }, { alpha: "C", count: 3 } ]; - let ndframe = new NDframe(data); - assert.deepEqual(ndframe.shape, [ 3, 2 ]); - }); - it("prints the column names of frame created from an Object", function () { - let data = [ { alpha: "A", count: 1 }, { alpha: "B", count: 2 }, { alpha: "C", count: 3 } ]; - let ndframe = new NDframe(data); - assert.deepEqual(ndframe.column_names, [ "alpha", "count" ]); - }); - it("prints the shape of a 1D frame created from an Object", function () { - let data = [ { alpha: "A", count: 1 } ]; - let ndframe = new NDframe(data); - assert.deepEqual(ndframe.shape, [ 1, 2 ]); - }); - - it("prints the size of a frame created from an Object", function () { - let data = [ { alpha: "A", count: 1 }, { alpha: "B", count: 2 }, { alpha: "C", count: 3 } ]; - let options = { columns: [ "Gender", "Age", "count" ] }; - let ndframe = new NDframe(data, options); - assert.deepEqual(ndframe.size, 6); - }); - it("prints the dimension of a frame created from an Object", function () { - let data = [ { alpha: "A", count: 1 }, { alpha: "B", count: 2 } ]; - let options = { columns: [ "Gender", "Age", "count" ] }; - let ndframe = new NDframe(data, options); - assert.deepEqual(ndframe.ndim, 2); - }); - it("prints the values of a frame created from an Object", function () { - let data = [ { alpha: "A", count: 1 }, { alpha: "B", count: 2 } ]; - let ndframe = new NDframe(data); - assert.deepEqual(ndframe.values, [ [ "A", 1 ], [ "B", 2 ] ]); - }); - it("prints the values of a frame created from an Object with null values", function () { - let data = [ { alpha: "A", count: null }, { alpha: null, count: 2 } ]; - let ndframe = new NDframe(data); - assert.deepEqual(ndframe.values, [ [ "A", NaN ], [ NaN, 2 ] ]); - }); - }); - - describe("NDframe Created from a Tensor", function () { - - it("prints the shape of a 2D frame created from a 2D tensor", function () { - let data = tf.tensor([ 1, 2, 3, 4 ]); - let ndframe = new NDframe(data); - assert.deepEqual(ndframe.ndim, 1); - assert.deepEqual(ndframe.values, [ 1, 2, 3, 4 ]); - - }); - it("prints the shape of a 2D frame created from a 1D tensor", function () { - let data = tf.tensor([ [ 2, 3, 4 ], [ 4, 5, 6 ] ]); - let ndframe = new NDframe(data, { columns: [ "alpha", "count", "sum" ] }); - assert.deepEqual(ndframe.column_names, [ "alpha", "count", "sum" ]); - }); - - }); - - describe("index", function () { - it("Returns the index of an NDframe", function () { - let data = [ { alpha: "A", count: 1 }, { alpha: "B", count: 2 }, { alpha: "C", count: 3 } ]; - let df = new NDframe(data); - assert.deepEqual(df.index, [ 0, 1, 2 ]); - }); - it("Returns the index of an NDframe created from an Array", function () { - let data = [ [ 12, 2, 20 ], [ 90, 5, 23 ], [ 45, 56, 70 ], [ 9, 10, 19 ] ]; - let df = new NDframe(data); - assert.deepEqual(df.index, [ 0, 1, 2, 3 ]); - }); - }); - - describe("NDframe Created from JavaScript Object of Arrays", function () { - - it("retrieves the col data created from OA ", function () { - let data = { alpha: [ "A", "B", "C", "D" ], count: [ 1, 2, 3, 4 ] }; - let ndframe = new NDframe(data); - // assert.deepEqual(ndframe.shape, [4, 2]) - assert.deepEqual(ndframe.col_data, [ [ "A", "B", "C", "D" ], [ 1, 2, 3, 4 ] ]); - }); - it("retrieves the col data ", function () { - let data = { alpha: [ "A", "B", "C", "D" ], count: [ 1, 2, 3, 4 ], sum: [ 20.3, 30.456, 40.90, 90.1 ] }; - let ndframe = new NDframe(data); - let res = [ [ "A", "B", "C", "D" ], [ 1, 2, 3, 4 ], [ 20.3, 30.456, 40.90, 90.1 ] ]; - assert.deepEqual(ndframe.col_data, res); - }); - it("retrieves the row data created from OA ", function () { - let data = { alpha: [ "A", "B" ], count: [ 1, 2 ] }; - let ndframe = new NDframe(data); - // assert.deepEqual(ndframe.shape, [4, 2]) - assert.deepEqual(ndframe.values, [ [ "A", 1 ], [ "B", 2 ] ]); - }); - }); - - describe("__set_index", function () { - it("sets the index of an NDframe", function () { - let data = [ { alpha: "A", count: 1 }, { alpha: "B", count: 2 }, { alpha: "C", count: 3 } ]; - let df = new NDframe(data); - df.__set_index([ "A", "B", "C" ]); - assert.deepEqual(df.index, [ "A", "B", "C" ]); - }); - it("Returns the index of an NDframe created from an Array", function () { - let data = [ [ 12, 2, 20 ], [ 90, 5, 23 ], [ 45, 56, 70 ], [ 9, 10, 19 ] ]; - let df = new NDframe(data); - df.__set_index([ 10, 20, 30, 40 ]); - assert.deepEqual(df.index, [ 10, 20, 30, 40 ]); - }); - }); - - - describe("dtype", function () { - it("Returns int dtype set during creation of 1DFrame (Series) from an Object", function () { - let data = [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]; - let options = { dtypes: [ 'int32' ] }; - let ndframe = new NDframe(data, options); - assert.deepEqual(ndframe.dtypes, [ 'int32' ]); - }); - - it("Returns string dtype set during creation of 1DFrame (Series) from an Array", function () { - let data = [ "Alice", "Yemi", "Rising", "Mark" ]; - let options = { dtypes: [ 'string' ] }; - let ndframe = new NDframe(data, options); - assert.deepEqual(ndframe.dtypes, [ "string" ]); - }); - - it("Returns string dtype automatically inferred from 1DFrame (Series)", function () { - let data = [ "Alice", "Yemi", "Rising", "Mark" ]; - let options = { columns: 'Names' }; - let ndframe = new NDframe(data, options); - assert.deepEqual(ndframe.dtypes, [ "string" ]); - }); - - it("Returns int dtype automatically inferred from 1DFrame (Series)", function () { - let data = [ 20, 30, 20, 20 ]; - let options = { columns: 'Size' }; - let ndframe = new NDframe(data, options); - assert.deepEqual(ndframe.dtypes, [ "int32" ]); - }); - it("Returns float dtype automatically inferred from 1DFrame (Series)", function () { - let data = [ 20.1, 30.4, 20.2, 4.23, 20.1 ]; - let options = { columns: 'Size' }; - let ndframe = new NDframe(data, options); - assert.deepEqual(ndframe.dtypes, [ "float32" ]); - }); - - - it("Returns dtype set during creation of 2DFrame from an Object", function () { - let data = [ { alpha: "A", count: 1 }, { alpha: "B", count: 2 } ]; - let options = { dtypes: [ 'string', 'int32' ] }; - let ndframe = new NDframe(data, options); - assert.deepEqual(ndframe.dtypes, [ 'string', 'int32' ]); - }); - it("Returns dtype set during creation of 2DFrame from an Array", function () { - let data = [ [ "Alice", 2, 3.0 ], [ "Boy", 5, 6.1 ], [ "Girl", 30, 40 ], [ 39, 89, 78.2 ] ]; - let cols = [ "Name", "Count", "Score" ]; - let options = { columns: cols, dtypes: [ 'string', 'int32', 'float32' ] }; - let ndframe = new NDframe(data, options); - assert.deepEqual(ndframe.dtypes, [ "string", "int32", "float32" ]); - }); - - it("Returns dtype automatically inferred from 2DFrame", function () { - let data = [ [ "Alice", 2, 3.1 ], [ "Boy", 5, 6.1 ], [ "Girl", 30, 40.2 ], [ 39, 89, 78.2 ] ]; - let cols = [ "Name", "Count", "Score" ]; - let options = { columns: cols }; - let ndframe = new NDframe(data, options); - assert.deepEqual(ndframe.dtypes, [ "string", "int32", "float32" ]); - }); - - }); - - - describe("to_csv", async function () { - it("Converts DataFrame to csv format and return string", async function () { - let data = [ { alpha: "A", count: 1 }, { alpha: "B", count: 2 }, { alpha: "C", count: 3 } ]; - let df = new NDframe(data); - let result = `alpha,count\nA,1\nB,2\nC,3\n`; - df.to_csv().then((csv) => { - assert.deepEqual(csv, result); - }); - }); - it("Converts DataFrame of Series to csv format and return string when path is not specified", async function () { - let data = [ [ 12, 2, 20 ], [ 90, 5, 23 ], [ 45, 56, 70 ], [ 9, 10, 19 ] ]; - let df = new NDframe(data, { columns: [ "A", "B", "C" ] }); - let result = `A,B,C\n12,2,20\n90,5,23\n45,56,70\n9,10,19\n`; - assert.deepEqual(await df.to_csv(), result); - }); - }); - - describe("to_json", async function () { - it("Converts DataFrame to json format and return string", async function () { - let data = [ { alpha: "A", count: 1 }, { alpha: "B", count: 2 }, { alpha: "C", count: 3 } ]; - let result = JSON.stringify([ { alpha: "A", count: 1 }, { alpha: "B", count: 2 }, { alpha: "C", count: 3 } ]); - - let df = new NDframe(data); - df.to_json().then((json) => { - assert.deepEqual(json, result); - }); - }); - it("Converts DataFrame to json format", async function () { - let data = [ [ 12, 2, 20 ], [ 90, 5, 23 ], [ 45, 56, 70 ] ]; - let df = new NDframe(data, { columns: [ "A", "B", "C" ] }); - let result = JSON.stringify([ { A: 12, B: 2, C: 20 }, { A: 90, B: 5, C: 23 }, { A: 45, B: 56, C: 70 } ]); - df.to_json().then((json) => { - assert.deepEqual(json, result); - }); - }); - }); - - -}); diff --git a/danfojs-node/tests/core/get_dummies.js b/danfojs-node/tests/core/get_dummies.js deleted file mode 100644 index 28178a86..00000000 --- a/danfojs-node/tests/core/get_dummies.js +++ /dev/null @@ -1,154 +0,0 @@ -import { assert } from "chai"; -import { get_dummies } from '../../src/core/get_dummies'; -import { DataFrame } from "../../src/core/frame"; -import { Series } from "../../src/core/series"; - -describe("get_dummies", function(){ - - it("test on array", function(){ - - let data = [ "dog", "male", "female", "male", "female", "male", "dog" ]; - - let df = get_dummies({ data:data }); - - let df_values = [ - [ 1, 0, 0 ], - [ 0, 1, 0 ], - [ 0, 0, 1 ], - [ 0, 1, 0 ], - [ 0, 0, 1 ], - [ 0, 1, 0 ], - [ 1, 0, 0 ] - ]; - let df_columns = [ 'dog', 'male', 'female' ]; - - assert.deepEqual(df.values, df_values); - assert.deepEqual(df.columns, df_columns); - - }); - it("test on Series", function(){ - - let data = [ "dog", "male", "female", "male", "female", "male", "dog" ]; - let series = new Series(data); - - let df = get_dummies({ data:series, prefix:"test", prefix_sep:"/" }); - - let df_values = [ - [ 1, 0, 0 ], - [ 0, 1, 0 ], - [ 0, 0, 1 ], - [ 0, 1, 0 ], - [ 0, 0, 1 ], - [ 0, 1, 0 ], - [ 1, 0, 0 ] - ]; - let df_columns = [ 'test/dog', 'test/male', 'test/female' ]; - - assert.deepEqual(df.values, df_values); - assert.deepEqual(df.columns, df_columns); - }); - - it("get dummies on DataFrame", function(){ - - let data = [ [ 1, "dog", 1.0, "fat" ], [ 3, "fog", 2.0, "good" ], [ 4, "gof", 3.0, "best" ] ]; - let columns = [ "A", "B", "C", "d" ]; - let df = new DataFrame(data, { columns:columns }); - - let df1 = get_dummies({ data:df, prefix_sep:"_", columns:[ "A", "d" ] }); - let df1_columns = [ - 'C', 'd', - 'A_1', 'A_3', - 'A_4', 'd_dog', - 'd_fog', 'd_gof' - ]; - - let df1_values = [ - [ 1, 'fat', 1, 0, 0, 1, 0, 0 ], - [ 2, 'good', 0, 1, 0, 0, 1, 0 ], - [ 3, 'best', 0, 0, 1, 0, 0, 1 ] - ]; - - assert.deepEqual(df1.values, df1_values); - assert.deepEqual(df1.columns, df1_columns); - - }); - it("Throw error if the prefix specified is not equal to the column specified", function(){ - - let data = [ [ 1, "dog", 1.0, "fat" ], [ 3, "fog", 2.0, "good" ], [ 4, "gof", 3.0, "best" ] ]; - let columns = [ "A", "B", "C", "d" ]; - let df = new DataFrame(data, { columns:columns }); - - assert.throws(function () { get_dummies({ data:df, prefix:[ "fg" ], prefix_sep:"_", columns:[ "A", "d" ] }); }, Error, - 'prefix must be the same length with the number of onehot encoding column'); - - }); - it("replace column sepecified with prefix", function(){ - - let data = [ [ 1, "dog", 1.0, "fat" ], [ 3, "fog", 2.0, "good" ], [ 4, "gof", 3.0, "best" ] ]; - let columns = [ "A", "B", "C", "d" ]; - let df = new DataFrame(data, { columns:columns }); - - let df1 = get_dummies({ data:df, prefix:[ "F", "G" ], prefix_sep:"_", columns:[ "A", "d" ] }); - let df1_columns = [ - 'C', 'd', - 'F_1', 'F_3', - 'F_4', 'G_dog', - 'G_fog', 'G_gof' - ]; - - let df1_values = [ - [ 1, 'fat', 1, 0, 0, 1, 0, 0 ], - [ 2, 'good', 0, 1, 0, 0, 1, 0 ], - [ 3, 'best', 0, 0, 1, 0, 0, 1 ] - ]; - - assert.deepEqual(df1.values, df1_values); - assert.deepEqual(df1.columns, df1_columns); - - }); - - it("infer the onehotencoding column base on string dtypes", function(){ - - let data = [ [ 1, "dog", 1.0, "fat" ], [ 3, "fog", 2.0, "good" ], [ 4, "gof", 3.0, "best" ] ]; - let columns = [ "A", "B", "C", "d" ]; - let df = new DataFrame(data, { columns:columns }); - - let df1 = get_dummies({ data:df, prefix_sep:"_" }); - let df1_columns = [ - 'A', 'C', - 'B_dog', 'B_fog', - 'B_gof', 'd_fat', - 'd_good', 'd_best' - ]; - let df1_values = [ - [ - 1, 1, 1, 0, - 0, 1, 0, 0 - ], - [ - 3, 2, 0, 1, - 0, 0, 1, 0 - ], - [ - 4, 3, 0, 0, - 1, 0, 0, 1 - ] - ]; - - assert.deepEqual(df1.values, df1_values); - assert.deepEqual(df1.columns, df1_columns); - - }); - it("replace column sepecified with prefix", function(){ - - let data = [ [ 1, "dog", 1.0, "fat" ], [ 3, "fog", 2.0, "good" ], [ 4, "gof", 3.0, "best" ] ]; - let columns = [ "A", "B", "C", "d" ]; - let df = new DataFrame(data, { columns:columns }); - - assert.throws(function () { get_dummies({ data:df, prefix:"F", prefix_sep:"_", columns:[ "A", "d" ] }); }, Error, - "prefix for dataframe must be an array"); - - }); - - -}); diff --git a/danfojs-node/tests/core/groupby.js b/danfojs-node/tests/core/groupby.js deleted file mode 100644 index 58d3c799..00000000 --- a/danfojs-node/tests/core/groupby.js +++ /dev/null @@ -1,296 +0,0 @@ -import { assert } from "chai"; -import { DataFrame } from '../../src/core/frame'; - -describe("groupby", function () { - it("Check group by One column data", function () { - - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new DataFrame(data, { columns: cols }); - let group_df = df.groupby([ "A" ]); - - let group_dict = { - '1': [ [ 1, 2, 3 ] ], - '4': [ [ 4, 5, 6 ] ], - '20': [ [ 20, 30, 40 ] ], - '39': [ [ 39, 89, 78 ] ] - }; - - assert.deepEqual(group_df.col_dict, group_dict); - }); - it("Obtain the DataFrame of one of the group", function () { - - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new DataFrame(data, { columns: cols }); - let group_df = df.groupby([ "A" ]); - let new_data = [ [ 1, 2, 3 ] ]; - - assert.deepEqual(group_df.get_groups([ 1 ]).values, new_data); - }); - it("Check group by Two column data", function () { - - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new DataFrame(data, { columns: cols }); - let group_df = df.groupby([ "A", "B" ]); - let new_data = { - '1': { '2': [ [ 1, 2, 3 ] ] }, - '4': { '5': [ [ 4, 5, 6 ] ] }, - '20': { '30': [ [ 20, 30, 40 ] ] }, - '39': { '89': [ [ 39, 89, 78 ] ] } - }; - - assert.deepEqual(group_df.col_dict, new_data); - }); - - it("Obtain the DataFrame of one of the group, grouped by two column", function () { - - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new DataFrame(data, { columns: cols }); - let group_df = df.groupby([ "A", "B" ]); - let new_data = [ [ 1, 2, 3 ] ]; - - assert.deepEqual(group_df.get_groups([ 1, 2 ]).values, new_data); - }); - - it("Count column in group", function () { - - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new DataFrame(data, { columns: cols }); - let group_df = df.groupby([ "A", "B" ]); - let new_data = [ - [ 1, 2, 1 ], - [ 4, 5, 1 ], - [ 20, 30, 1 ], - [ 39, 89, 1 ] - ]; - - assert.deepEqual(group_df.col([ "C" ]).count().values, new_data); - }); - it("sum column element in group", function () { - - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new DataFrame(data, { columns: cols }); - let group_df = df.groupby([ "A", "B" ]); - let new_data = [ - [ 1, 2, 3 ], - [ 4, 5, 6 ], - [ 20, 30, 40 ], - [ 39, 89, 78 ] - ]; - assert.deepEqual(group_df.col([ "C" ]).sum().values, new_data); - }); - - it("sum column element group by one column", function () { - - let data = [ [ 1, 2, 3 ], [ 1, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new DataFrame(data, { columns: cols }); - let group_df = df.groupby([ "A", "B" ]); - - let new_data = [ - [ 1, 2, 2, 3 ], - [ 1, 5, 5, 6 ], - [ 20, 30, 30, 40 ], - [ 39, 89, 89, 78 ] - ]; - - assert.deepEqual(group_df.col([ "B", "C" ]).sum().values, new_data); - }); - - it("Perform aggregate on column for groupby", function () { - - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new DataFrame(data, { columns: cols }); - let group_df = df.groupby([ "A", "B" ]); - let new_data = [ - [ 1, 2, 2, 1 ], - [ 4, 5, 5, 1 ], - [ 20, 30, 30, 1 ], - [ 39, 89, 89, 1 ] - ]; - - assert.deepEqual(group_df.agg({ "B": "mean", "C": "count" }).values, new_data); - }); - it("cummulative sum for groupby", function () { - - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new DataFrame(data, { columns: cols }); - let group_df = df.groupby([ "A", "B" ]); - let new_data = [ - [ 1, 2, 2, 3 ], - [ 4, 5, 5, 6 ], - [ 20, 30, 30, 40 ], - [ 39, 89, 89, 78 ] - ]; - assert.deepEqual(group_df.col([ "B", "C" ]).cumsum().values, new_data); - }); - it("cummulative max for groupby", function () { - - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new DataFrame(data, { columns: cols }); - let group_df = df.groupby([ "A" ]); - let new_data = [ [ 1, 3 ], [ 4, 6 ], [ 20, 40 ], [ 39, 78 ] ]; - - - assert.deepEqual(group_df.col([ "C" ]).cummax().values, new_data); - }); - it("cummulative min for groupby", function () { - - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new DataFrame(data, { columns: cols }); - let group_df = df.groupby([ "A" ]); - let new_data = [ [ 1, 3 ], [ 4, 6 ], [ 20, 40 ], [ 39, 78 ] ]; - - assert.deepEqual(group_df.col([ "C" ]).cummin().values, new_data); - }); - - it("cummulative prod for groupby", function () { - - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new DataFrame(data, { columns: cols }); - let group_df = df.groupby([ "A" ]); - let new_data = [ [ 1, 3 ], [ 4, 6 ], [ 20, 40 ], [ 39, 78 ] ]; - - assert.deepEqual(group_df.col([ "C" ]).cumprod().values, new_data); - }); - it("mean for groupby", function () { - - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; - let cols = [ "A", "B", "C" ]; - let df = new DataFrame(data, { columns: cols }); - let group_df = df.groupby([ "A", "B" ]); - let new_data = [ - [ 1, 2, 2, 3 ], - [ 4, 5, 5, 6 ], - [ 20, 30, 30, 40 ], - [ 39, 89, 89, 78 ] - ]; - - assert.deepEqual(group_df.col([ "B", "C" ]).mean().values, new_data); - }); - - it("printing multiindex table, example with cumsum operation for dataframe group by one column", function(){ - let data = { 'A': [ 'foo', 'bar', 'foo', 'bar', - 'foo', 'bar', 'foo', 'foo' ], - 'B': [ 'one', 'one', 'two', 'three', - 'two', 'two', 'one', 'three' ], - 'C': [ 1, 3, 2, 4, 5, 2, 6, 7 ], - 'D': [ 3, 2, 4, 1, 5, 6, 7, 8 ] }; - - - let df = new DataFrame(data); - - let grp = df.groupby([ "A" ]); - let rslt = [ - [ 'foo', 1 ], - [ 'foo', 3 ], - [ 'foo', 8 ], - [ 'foo', 14 ], - [ 'foo', 21 ], - [ 'bar', 3 ], - [ 'bar', 7 ], - [ 'bar', 9 ] - ]; - assert.deepEqual(grp.col([ "C" ]).cumsum().values, rslt); - - }); - it("printing multiindex table, example with cumsum operation for dataframe group by one column", function(){ - let data = { 'A': [ 'foo', 'bar', 'foo', 'bar', - 'foo', 'bar', 'foo', 'foo' ], - 'B': [ 'one', 'one', 'two', 'three', - 'two', 'two', 'one', 'three' ], - 'C': [ 1, 3, 2, 4, 5, 2, 6, 7 ], - 'D': [ 3, 2, 4, 1, 5, 6, 7, 8 ] }; - - let df = new DataFrame(data); - - - let grp = df.groupby([ "A", "B" ]); - let rslt = [ - [ 'foo', 'one', 1, 3 ], - [ 'foo', 'one', 7, 10 ], - [ 'foo', 'two', 2, 4 ], - [ 'foo', 'two', 7, 9 ], - [ 'foo', 'three', 7, 8 ], - [ 'bar', 'one', 3, 2 ], - [ 'bar', 'two', 2, 6 ], - [ 'bar', 'three', 4, 1 ] - ]; - assert.deepEqual(grp.col([ "C", "D" ]).cumsum().values, rslt); - - }); - it("should apply grouby operation to all column", function(){ - let data = { 'A': [ 'foo', 'bar', 'foo', 'bar', - 'foo', 'bar', 'foo', 'foo' ], - 'B': [ 'one', 'one', 'two', 'three', - 'two', 'two', 'one', 'three' ], - 'C': [ 1, 3, 2, 4, 5, 2, 6, 7 ], - 'D': [ 3, 2, 4, 1, 5, 6, 7, 8 ] }; - - let df = new DataFrame(data); - - let grp = df.groupby([ "A", "B" ]); - let rslt = [ - [ 'foo', 'one', 2, 2 ], - [ 'foo', 'two', 2, 2 ], - [ 'foo', 'three', 1, 1 ], - [ 'bar', 'one', 1, 1 ], - [ 'bar', 'two', 1, 1 ], - [ 'bar', 'three', 1, 1 ] - ]; - - assert.deepEqual(grp.count().values, rslt); - }); - it("should apply function to specific column", function () { - - let data = { 'A': [ 'foo', 'bar', 'foo', 'bar', - 'foo', 'bar', 'foo', 'foo' ], - 'B': [ 'one', 'one', 'two', 'three', - 'two', 'two', 'one', 'three' ], - 'C': [ 1, 3, 2, 4, 5, 2, 6, 7 ], - 'D': [ 3, 2, 4, 1, 5, 6, 7, 8 ] }; - let df = new DataFrame(data); - let group_df = df.groupby([ "A"]); - let rslt = [ - [ 'foo', 5, 3 ], - [ 'foo', 6, 4 ], - [ 'foo', 7, 7 ], - [ 'foo', 9, 8 ], - [ 'foo', 10, 9 ], - [ 'bar', 4, 5 ], - [ 'bar', 3, 6 ], - [ 'bar', 8, 4 ] - ]; - assert.deepEqual(group_df.col(['D', 'C']).apply((x) => x.add(2)).values, rslt); - }); - it("should apply function to group column", function () { - - let data = { 'A': [ 'foo', 'bar', 'foo', 'bar', - 'foo', 'bar', 'foo', 'foo' ], - 'B': [ 'one', 'one', 'two', 'three', - 'two', 'two', 'one', 'three' ], - 'C': [ 1, 3, 2, 4, 5, 2, 6, 7 ], - 'D': [ 3, 2, 4, 1, 5, 6, 7, 8 ] }; - let df = new DataFrame(data); - let group_df = df.groupby([ "A", "B"]); - let rslt = [ - [ 'foo', 'one', 2, 2 ], - [ 'foo', 'two', 2, 2 ], - [ 'foo', 'three', 1, 1 ], - [ 'bar', 'one', 1, 1 ], - [ 'bar', 'two', 1, 1 ], - [ 'bar', 'three', 1, 1 ] - ]; - assert.deepEqual(group_df.apply((x) => x.count()).values, rslt); - }); -}); diff --git a/danfojs-node/tests/core/series.js b/danfojs-node/tests/core/series.js deleted file mode 100644 index 2c8cfd0c..00000000 --- a/danfojs-node/tests/core/series.js +++ /dev/null @@ -1,1305 +0,0 @@ -import { assert, expect } from "chai"; -import { Series } from "../../src/core/series"; -import * as tf from '@tensorflow/tfjs-node'; - -describe("Series", function () { - describe("tensor", function () { - it("Returns the tensor object of a Series", function () { - let data = [1, 2, 3, 4, 5, 620, 30, 40, 39, 89, 78]; - let sf = new Series(data); - assert.deepEqual(sf.tensor.dtype, "int32"); - }); - it("Returns the float dtype of a tensor object", function () { - let data = [1.1, 2.2, 3, 4.1, 5, 620, 30.1, 40, 39, 89, 78]; - let sf = new Series(data); - assert.deepEqual(sf.tensor.dtype, "float32"); - }); - it("Compares a tensor returned from a Series to Tensorflow's tensor", function () { - let data = [1.1, 2.2, 3, 4.1, 5, 620, 30.1, 40, 39, 89, 78]; - let sf = new Series(data); - let tf_data = tf.tensor(data); - assert.deepEqual(sf.tensor.arraySync(), tf_data.arraySync()); - }); - }); - describe("tensor", function () { - it("Returns the dtype string Series", function () { - let data = ["b", "c", "d"]; - let sf = new Series(data); - assert.deepEqual(sf.dtype, "string"); - }); - it("Returns the dtype int Series", function () { - let data = [1, 2, 3, 4, 5]; - let sf = new Series(data); - assert.deepEqual(sf.dtype, "int32"); - }); - it("Returns the dtype int Series", function () { - let data = [1.1, 2.2, 3.3, 4.5, 5]; - let sf = new Series(data); - assert.deepEqual(sf.dtype, "float32"); - }); - }); - - describe("head", function () { - it("Gets the first n rows in a Series", function () { - let data = [1, 2, 3, 4, 5, 620, 30, 40, 39, 89, 78]; - let cols = ["A"]; - let sf = new Series(data, { columns: cols }); - assert.deepEqual(sf.head(2).values, [1, 2]); - }); - it("Return all rows in a Series if row specified is greater than values", function () { - let data = ["Boy", "Girl", "Man", "Woman", "Tall"]; - let cols = ["Items"]; - let sf = new Series(data, { columns: cols }); - assert.deepEqual(sf.head(10).values, data); - }); - it("Return all rows in a Series if row specified is less than 0", function () { - let data = [1, 2, 3, 4, 5, 620, 30, 40, 39, 89, 78]; - let sf = new Series(data); - assert.deepEqual(sf.head(-1).values, data); - }); - }); - - describe("tail", function () { - it("Prints the last n rows of a Series", function () { - let data = [1, 2, 3, 4, 5, 620, 30, 40, 39, 89, 78]; - let sf = new Series(data); - assert.deepEqual(sf.tail(2).values, [89, 78]); - }); - it("Return all rows in a Series if row specified is greater than values", function () { - let data = [1, 2, 3, 4, 5, 620, 30, 40, 39, 89, 78]; - let sf = new Series(data); - assert.deepEqual(sf.tail(15).values, data); - }); - it("Return all rows in a Series if row specified is less than 0", function () { - let data = ["Boy", "Girl", "Man", "Woman", "Tall"]; - let cols = ["Items"]; - let sf = new Series(data, { columns: cols }); - assert.deepEqual(sf.tail(-1).values, data); - }); - }); - - describe("sample", function () { - it("Samples n number of random elements from a DataFrame", async function () { - let data = [1, 2, 3, 4, 5, 620, 30, 40, 39, 89, 78]; - let sf = new Series(data); - assert.deepEqual((await sf.sample(7)).values.length, 7); - }); - it("Return all values if n of sample -1", async function () { - let data = [1, 2, 3, 4, 5, 620, 30, 40, 39, 89, 78]; - let sf = new Series(data); - assert.deepEqual((await sf.sample(-1)).values.length, data.length); - }); - it("Throw error if n is greater than lenght of Series", async function () { - let data = [1, 2, 3, 4, 5, 620, 30, 40, 39, 89, 78]; - let sf = new Series(data); - try { - await sf.sample(100); - } catch (e) { - expect(e).to.be.instanceOf(Error); - expect(e.message).to.eql('Sample size n cannot be bigger than size of dataset'); - } - }); - }); - - describe("add", function () { - it("Return Addition of series with another series", function () { - let data = [1, 2, 3, 4, 5, 6]; - let data2 = [30, 40, 39, 1, 2, 1]; - let sf = new Series(data); - let sf2 = new Series(data2); - assert.deepEqual(sf.add(sf2).values, [31, 42, 42, 5, 7, 7]); - }); - it("Return Addition of series with a single value (Broadcasting)", function () { - let data = [1, 2, 3, 4, 5]; - let sf = new Series(data); - assert.deepEqual(sf.add(1).values, [2, 3, 4, 5, 6]); - }); - it("Throws type error on addition of string type", function () { - let data = [1, 2, 3, 4]; - let data2 = ["A", "B", "C", "d"]; - let sf = new Series(data); - let sf2 = new Series(data2); - assert.throws( - () => { - sf.add(sf2); - }, - Error, - "Argument 'x' passed to 'cast' must be numeric tensor, but got string tensor" - ); - }); - // it("Throws length error if series lenght mixmatch", function () { - // let data = [1, 2, 3, 4] - // let data2 = [1, 2, 3, 4, 5, 6] - // let sf = new Series(data) - // let sf2 = new Series(data2) - // assert.throws(() => { sf.add(sf2) }, Error, "Incompatible shapes: [4] vs. [6]") - // }) - }); - - describe("sub", function () { - it("Return Subtraction of series with another series", function () { - let data1 = [30, 40, 39, 1, 2, 1]; - let data2 = [1, 2, 3, 4, 5, 6]; - let sf1 = new Series(data1); - let sf2 = new Series(data2); - assert.deepEqual(sf1.sub(sf2).values, [29, 38, 36, -3, -3, -5]); - }); - it("Return Subtraction of series with a single value (Broadcasting)", function () { - let data = [1, 2, 3, 4, 5]; - let sf = new Series(data); - assert.deepEqual(sf.sub(1).values, [0, 1, 2, 3, 4]); - }); - it("Throws type error on Subtraction of string type", function () { - let data = [1, 2, 3, 4]; - let data2 = ["A", "B", "C", "d"]; - let sf = new Series(data); - let sf2 = new Series(data2); - assert.throws( - () => { - sf.sub(sf2); - }, - Error, - "Argument 'x' passed to 'cast' must be numeric tensor, but got string tensor" - ); - }); - // it("Throws length error if series lenght mixmatch", function () { - // let data = [1, 2, 3, 4] - // let data2 = [1, 2, 3, 4, 5, 6] - // let sf = new Series(data) - // let sf2 = new Series(data2) - // assert.throws(() => { sf.sub(sf2) }, Error, "Incompatible shapes: [4] vs. [6]") - // }) - }); - - describe("mul", function () { - it("Return multiplication of series with another series", function () { - let data1 = [30, 40, 3, 5]; - let data2 = [1, 2, 3, 4]; - let sf1 = new Series(data1); - let sf2 = new Series(data2); - assert.deepEqual(sf1.mul(sf2).values, [30, 80, 9, 20]); - }); - it("Return multiplication of series with a single value (Broadcasting)", function () { - let data = [1, 2, 3, 4, 5]; - let sf = new Series(data); - assert.deepEqual(sf.mul(1).values, [1, 2, 3, 4, 5]); - }); - // it("Throws type error on multiplication of string type", function () { - // let data = [1, 2, 3, 4] - // let data2 = ["A", "B", "C", "d"] - // let sf = new Series(data) - // let sf2 = new Series(data2) - // assert.throws(() => { sf.mul(sf2) }, Error, "Argument 'x' passed to 'cast' must be numeric tensor, but got string tensor") - // }) - // it("Throws length error if series lenght mixmatch", function () { - // let data = [1, 2, 3, 4] - // let data2 = [1, 2, 3, 4, 5, 6] - // let sf = new Series(data) - // let sf2 = new Series(data2) - // assert.throws(() => { sf.mul(sf2) }, Error, "Operands could not be broadcast together with shapes 4 and 6") - // }) - }); - - describe("div", function () { - it("Return float division of series with another series", function () { - let data1 = [30, 40, 3, 5]; - let data2 = [1, 2, 3, 4]; - let sf1 = new Series(data1); - let sf2 = new Series(data2); - assert.deepEqual(sf1.div(sf2).values, [30, 20, 1, 1.25]); - }); - it("Return integer division of series with another series", function () { - let data1 = [30, 40, 3, 5]; - let data2 = [1, 2, 3, 4]; - let sf1 = new Series(data1); - let sf2 = new Series(data2); - assert.deepEqual(sf1.div(sf2, false).values, [30, 20, 1, 1]); - }); - it("Return division of series with a single value (Broadcasting)", function () { - let data = [10, 2, 3, 90]; - let sf = new Series(data); - assert.deepEqual(sf.div(2).values, [5, 1, 1.5, 45]); - }); - // it("Throws type error on division of string type", function () { - // let data = [1, 2, 3, 4] - // let data2 = ["A", "B", "C", "d"] - // let sf = new Series(data) - // let sf2 = new Series(data2) - // assert.throws(() => { sf.mul(sf2) }, Error, "Argument 'x' passed to 'cast' must be numeric tensor, but got string tensor") - // }) - // it("Throws length error if series lenght mixmatch", function () { - // let data = [1, 2, 3, 4] - // let data2 = [1, 2, 3, 4, 5, 6] - // let sf = new Series(data) - // let sf2 = new Series(data2) - // assert.throws(() => { sf.mul(sf2) }, Error, "Operands could not be broadcast together with shapes 4 and 6") - // }) - }); - - describe("pow", function () { - it("Return Exponetial power of series with another series", function () { - let data1 = [2, 3, 4, 5]; - let data2 = [1, 2, 3, 0]; - let sf1 = new Series(data1); - let sf2 = new Series(data2); - assert.deepEqual(sf1.pow(sf2).values, [2, 9, 64, 1]); - }); - it("Return Exponetial power of series with a single value (Broadcasting)", function () { - let data = [1, 2, 3, 4, 5]; - let sf = new Series(data); - assert.deepEqual(sf.pow(2).values, [1, 4, 9, 16, 25]); - }); - }); - - describe("mod", function () { - it("Return modulo of series with another float series", function () { - let data1 = [2, 30, 4, 5]; - let data2 = [1.1, 2.2, 3.3, 2.4]; - let sf1 = new Series(data1); - let sf2 = new Series(data2); - let expected = [ - 0.8999999761581421, - 1.3999993801116943, - 0.7000000476837158, - 0.19999980926513672 - ]; - assert.deepEqual(sf1.mod(sf2).values, expected); - }); - it("Return modulo of series with another int series", function () { - let data1 = [2, 30, 4, 5]; - let data2 = [1, 2, 3, 1]; - let sf1 = new Series(data1); - let sf2 = new Series(data2); - assert.deepEqual(sf1.mod(sf2).values, [0, 0, 1, 0]); - }); - it("Return modulo power of series with a single value (Broadcasting)", function () { - let data = [1, 2, 3, 4, 5]; - let sf = new Series(data); - assert.deepEqual(sf.mod(2).values, [1, 0, 1, 0, 1]); - }); - }); - - describe("mean", function () { - it("Computes the mean of elements in a int series", function () { - let data1 = [30, 40, 3, 5]; - let sf = new Series(data1); - assert.deepEqual(sf.mean(), 19.5); - }); - it("Computes the mean of elements in a float series", function () { - let data1 = [30.1, 40.2, 3.1, 5.1]; - let sf = new Series(data1); - assert.deepEqual(sf.mean(), 19.625); - }); - it("Computes the mean of elements in a float series with NaN", function () { - let data1 = [30.1, 40.2, 3.1, 5.1, NaN]; - let sf = new Series(data1); - assert.deepEqual(sf.mean(), 19.625); - }); - it("Throws error if dtype is string", function () { - let data1 = ["boy", "girl", "Man"]; - let sf = new Series(data1); - assert.throws( - () => { - sf.mean(); - }, - Error, - "dtype error: String data type does not support mean operation" - ); - }); - }); - - describe("median", function () { - it("Computes the median value of elements across int Series", function () { - let data1 = [30, 40, 3, 5]; - let sf = new Series(data1); - assert.deepEqual(sf.median(), 17.5); - }); - it("Computes the median value of elements across float Series", function () { - let data1 = [30.1, 40.2, 3.1, 5.1, NaN]; - let sf = new Series(data1); - assert.deepEqual(sf.median(), 17.6); - }); - }); - - describe("sum", function () { - it("Sum values of a Int Series", function () { - let data1 = [30, 40, 3, 5, 5, 5, 5, 5, 3, 3, 3, 21, 3]; - let sf = new Series(data1); - assert.deepEqual(sf.sum(), 131); - }); - it("Sum values of a Float Series", function () { - let data1 = [30.1, 3.1, 40.2, 3.1, 5.1]; - let sf = new Series(data1); - assert.deepEqual(sf.sum(), 81.6); - }); - it("Sum values of a bool Series", function () { - let data1 = [true, true, false, false, false]; - let sf = new Series(data1); - assert.deepEqual(sf.sum(), 2); - }); - it("Sum values a Series with missing values", function () { - let data1 = [11, NaN, 2, 2]; - let sf = new Series(data1); - assert.deepEqual(sf.sum(), 15); - }); - }); - - describe("mode", function () { - it("Computes the multi-modal values of a Series", function () { - let data1 = [30, 40, 3, 5, 5, 5, 5, 5, 3, 3, 3, 21, 3]; - let sf = new Series(data1); - assert.deepEqual(sf.mode(), [5, 3]); - }); - it("Computes the modal value of a Series", function () { - let data1 = [30.1, 3.1, 40.2, 3.1, 5.1]; - let sf = new Series(data1); - assert.deepEqual(sf.mode(), [3.1]); - }); - }); - - describe("min", function () { - it("Returns the single smallest elementin a Series", function () { - let data = [30, 40, 3, 5]; - let sf = new Series(data); - assert.deepEqual(sf.min(), 3); - }); - it("Computes the minimum of elements across an float Series", function () { - let data1 = [30.1, 40.2, 3.12, 5.1]; - let sf = new Series(data1, { dtypes: ["float32"] }); - assert.deepEqual(Number(sf.min().toFixed(2)), 3.12); - }); - }); - - describe("max", function () { - it("Computes the maximum of elements across dimensions of a Series", function () { - let data1 = [30, 40, 3, 5]; - let sf = new Series(data1); - assert.deepEqual(sf.max(), 40); - }); - it("Return sum of float values in a series", function () { - let data1 = [30.1, 40.21, 3.1, 5.1]; - let sf = new Series(data1); - assert.deepEqual(Number(sf.max().toFixed(2)), 40.21); - }); - it("Throws error on addition of string Series", function () { - let data1 = ["boy", "gitl", "woman", "man"]; - let sf = new Series(data1); - assert.throws( - () => { - sf.max(); - }, - Error, - "dtype error: String data type does not support max operation" - ); - }); - }); - - describe("std", function () { - it("Computes the standard of elements in a int series", function () { - let data1 = [30, 40, 3, 5]; - let sf = new Series(data1); - assert.deepEqual(sf.std(), 18.375708603116962); - }); - it("Computes the standard deviation of elements in a float series", function () { - let data1 = [30.1, 40.2, 3.1, 5.1]; - let sf = new Series(data1); - assert.deepEqual(sf.std(), 18.412925713566906); - }); - it("Computes the standard deviation of elements in a float series with missing values", function () { - let data1 = [30, 40, 3, 5, undefined]; - let sf = new Series(data1); - assert.deepEqual(sf.std(), 18.375708603116962); - }); - }); - - describe("var", function () { - it("Computes the variance of elements in a int series", function () { - let data1 = [30, 40, 3, 5]; - let sf = new Series(data1); - assert.deepEqual(sf.var(), 337.6666666666667); - }); - it("Computes the variance of elements in a float series", function () { - let data1 = [30.1, 40.2, 3.1, 5.1]; - let sf = new Series(data1); - assert.deepEqual(sf.var(), 339.03583333333336); - }); - it("Computes the variance of elements in a int series with missing values", function () { - let data1 = [30, undefined, 40, 3, 5]; - let sf = new Series(data1); - assert.deepEqual(sf.var(), 337.6666666666667); - }); - }); - - describe("describe", function () { - it("Computes the descriptive statistics on an int Series", function () { - let data1 = [10, 45, 56, 25, 23, 20, 10]; - let sf = new Series(data1); - assert.deepEqual(sf.describe().round().values, [ - 7, - 27, - 17, - 10, - 23, - 56, - 302 - ]); - }); - it("Computes the descriptive statistics on a float Series", function () { - let data1 = [30.1, 40.2, 3.1, 5.1]; - let sf = new Series(data1); - assert.deepEqual(sf.describe().round().values, [ - 4, - 20, - 18, - 3, - 18, - 40, - 339 - ]); - }); - it("Computes the descriptive statistics on a float Series", function () { - let data1 = [30.1, 40.2, 3.1, 5.1]; - let sf = new Series(data1); - assert.deepEqual(sf.describe().index, [ - "count", - "mean", - "std", - "min", - "median", - "max", - "variance" - ]); - }); - }); - - describe("maximum", function () { - it("Returns the max of a and b (a > b ? a : b) element-wise. Supports broadcasting.", function () { - let data1 = [30, 40, 3, 5]; - let data2 = [10, 41, 2, 0]; - let sf1 = new Series(data1); - let sf2 = new Series(data2); - assert.deepEqual(sf1.maximum(sf2).values, [30, 41, 3, 5]); - }); - it("Throws error on checking maximum of incompatible Series", function () { - let data1 = [30, 40, 3, 5]; - let data2 = [10, 41, 2]; - let sf1 = new Series(data1); - let sf2 = new Series(data2); - assert.throws( - () => { - sf1.maximum(sf2); - }, - Error, - "Operands could not be broadcast together with shapes 4 and 3" - ); - }); - }); - - describe("minimum", function () { - it("Returns the min of a and b (a < b ? a : b) element-wise. Supports broadcasting.", function () { - let data1 = [30, 40, 3, 5]; - let data2 = [10, 41, 2, 0]; - let sf1 = new Series(data1); - let sf2 = new Series(data2); - assert.deepEqual(sf1.minimum(sf2).values, [10, 40, 2, 0]); - }); - // it("Return sum of float values in a series", function () { - // let data1 = [30.1, 40.9, 3, 5] - // let data2 = [10.2, 41, 2, 0] - // let sf1 = new Series(data1) - // let sf2 = new Series(data2) - // assert.deepEqual(sf1.minimum(sf2).values, [30, 41, 3, 5]) - - // }) - }); - - describe("count", function () { - it("Returns the count of non NaN values in a string Series", function () { - let data = ["boy", "gitl", "woman", NaN]; - let sf = new Series(data); - assert.deepEqual(sf.count(), 3); - }); - it("Returns the count of non NaN values in a string Series", function () { - let data = ["boy", "gitl", "woman", "Man"]; - let sf = new Series(data); - assert.deepEqual(sf.count(), 4); - }); - it("Returns the count of non NaN values in a int Series", function () { - let data = [20, 30, NaN, 2, NaN, 30, 21]; - let sf = new Series(data); - assert.deepEqual(sf.count(), 5); - }); - it("Returns the count of non NaN values in a float Series", function () { - let data = [20.1, 30.4, NaN, 2.1, NaN, 30.0, 21.3]; - let sf = new Series(data); - assert.deepEqual(sf.count(), 5); - }); - }); - - describe("round", function () { - it("Rounds elements in a Series to nearest whole number", function () { - let data1 = [30.21091, 40.190901, 3.564, 5.0212]; - let sf = new Series(data1); - assert.deepEqual(sf.round().values, [30, 40, 4, 5]); - }); - it("Rounds elements in a Series to 1dp", function () { - let data1 = [30.21091, 40.190901, 3.564, 5.0212]; - let sf = new Series(data1); - assert.deepEqual(sf.round(1).values, [30.2, 40.2, 3.6, 5.0]); - }); - it("Rounds elements in a Series to 2dp", function () { - let data1 = [30.2191, 40.190901, 3.564, 5.0212]; - let sf = new Series(data1); - assert.deepEqual(sf.round(2).values, [30.22, 40.19, 3.56, 5.02]); - }); - }); - - describe("isna", function () { - it("Return a boolean same-sized object indicating if string Series contain NaN", function () { - let data1 = [NaN, undefined, "girl", "Man"]; - let sf = new Series(data1); - assert.deepEqual(sf.isna().values, [true, true, false, false]); - }); - it("Return a boolean same-sized object indicating if float Series values are NaN", function () { - let data1 = [30.21091, NaN, 3.564, undefined]; - let sf = new Series(data1); - assert.deepEqual(sf.isna().values, [false, true, false, true]); - }); - it("Return a boolean same-sized object indicating if int Series values are NaN", function () { - let data1 = [30, 40, 3, 5, undefined, undefined]; - let sf = new Series(data1); - assert.deepEqual(sf.isna().values, [ - false, - false, - false, - false, - true, - true - ]); - }); - }); - - describe("sort_values", function () { - it("Sort values in a Series in ascending order (not inplace)", function () { - let sf = new Series([20, 30, 1, 2, 4, 57, 89, 0, 4]); - let result = [0, 1, 2, 4, 4, 20, 30, 57, 89]; - let sorted_sf = sf.sort_values(); - assert.deepEqual(sorted_sf.values, result); - }); - it("confirms that sort_values in ascending order does not happen inplace", function () { - let sf = new Series([20, 30, 1, 2, 4, 57, 89, 0, 4]); - let result = [0, 1, 2, 4, 4, 20, 30, 57, 89]; - let expected_index = [7, 2, 3, 8, 4, 0, 1, 5, 6]; - sf.sort_values({ inplace: true }); - assert.deepEqual(sf.values, result); - assert.deepEqual(sf.index, expected_index); - }); - it("Sort values in a Series in Descending order", function () { - let sf = new Series([20, 30, 1, 2, 4, 57, 89, 0, 4]); - let result = [89, 57, 30, 20, 4, 4, 2, 1, 0]; - let sorted_sf = sf.sort_values({ ascending: false }); - assert.deepEqual(sorted_sf.values, result); - }); - it("confirms that sort_values in descending order happens inplace", function () { - let sf = new Series([20, 30, 1, 2, 4, 57, 89, 0, 4]); - let result = [89, 57, 30, 20, 4, 4, 2, 1, 0]; - sf.sort_values({ ascending: false, inplace: true }); - assert.deepEqual(sf.values, result); - }); - it("Confirms that series index is sorted in ascending order (not in inplace)", function () { - let sf = new Series([20, 30, 1, 2, 4, 57, 89, 0, 4]); - let result = [7, 2, 3, 8, 4, 0, 1, 5, 6]; - let sorted_sf = sf.sort_values(); - assert.deepEqual(sorted_sf.index, result); - }); - it("Confirms that series index is sorted in descending order (not in inplace)", function () { - let sf = new Series([20, 30, 1, 2, 4, 57, 89, 0, 4]); - let result = [6, 5, 1, 0, 4, 8, 3, 2, 7]; - let sorted_sf = sf.sort_values({ ascending: false }); - assert.deepEqual(sorted_sf.index, result); - }); - it("Sort string values in a Series", function () { - let sf = new Series(["boy", "zebra", "girl", "man"]); - let result = ["boy", "girl", "man", "zebra"]; - let sorted_sf = sf.sort_values({ ascending: false }); - assert.deepEqual(sorted_sf.values, result); - }); - // it("Throws error on sorting of string", function () { - // let sf = new Series(["boy", "man", "girl"]) - // assert.throws(() => { sf.sort_values() }, Error, "Dtype Error: cannot sort Series of type string") - // }) - }); - - describe("copy", function () { - it("Checks if copied values are the same as the first one", function () { - let sf = new Series([30.21091, 40.190901, 3.564, 5.0212]); - let sf_copy = sf.copy(); - assert.deepEqual(sf.values, sf_copy.values); - }); - it("Checks if copied index are the same", function () { - let sf = new Series([30.21091, 40.190901, 3.564, 5.0212]); - sf = sf.set_index({ index: ["a", "b", "c", "d"] }); - let sf_copy = sf.copy(); - assert.deepEqual(sf.index, sf_copy.index); - }); - // it("Checks if copied dtype is the same", function () { - // let sf = new Series([30.21091, 40.190901, 3.564, 5.0212]) - // sf.round() - // sf.astype(['int32']) - // let sf_copy = sf.copy() - // assert.deepEqual(sf.dtypes[0], sf_copy.dtypes[0]) - // assert.deepEqual(sf.values, sf_copy.values) - - // }) - }); - - describe("reset_index", function () { - it("resets the index of a Series", function () { - let data = [ - { alpha: "A", count: 1 }, - { alpha: "B", count: 2 }, - { alpha: "C", count: 3 } - ]; - let df = new Series(data); - let df_new = df.set_index({ index: ["one", "two", "three"] }); - let df_reset = df_new.reset_index(); - assert.deepEqual(df_reset.index, [0, 1, 2]); - }); - it("Reset the index of a Series created from an Array", function () { - let data = [1, 2, 3, 4, 5, 6]; - let df = new Series(data); - df.set_index({ - index: ["one", "two", "three", "four", "five", "six"], - inplace: true - }); - let df_new = df.reset_index(); - assert.deepEqual(df_new.index, [0, 1, 2, 3, 4, 5]); - }); - it("checks that the original series changed after reseting new index inplace", function () { - let data = [ - { alpha: "A", count: 1 }, - { alpha: "B", count: 2 }, - { alpha: "C", count: 3 } - ]; - let df = new Series(data); - df.reset_index({ inplace: true }); - assert.deepEqual(df.index, [0, 1, 2]); - }); - }); - - describe("set_index", function () { - it("sets the index of an Series", function () { - let data = [ - { alpha: "A", count: 1 }, - { alpha: "B", count: 2 }, - { alpha: "C", count: 3 } - ]; - let df = new Series(data); - let df_new = df.set_index({ index: ["one", "two", "three"] }); - assert.deepEqual(df_new.index, ["one", "two", "three"]); - assert.notDeepEqual(df.index, df_new.index); - }); - it("checks that the original series is not modified after setting new index not-inplace", function () { - let data = [ - { alpha: "A", count: 1 }, - { alpha: "B", count: 2 }, - { alpha: "C", count: 3 } - ]; - let df = new Series(data); - let df_new = df.set_index({ index: ["one", "two", "three"] }); - assert.notDeepEqual(df.index, df_new.index); - }); - it("sets the index of an Series inplace", function () { - let data = [12, 2, 20, 50]; - let df = new Series(data); - df.set_index({ index: ["one", "two", "three", "four"], inplace: true }); - assert.deepEqual(df.index, ["one", "two", "three", "four"]); - }); - }); - - describe("Map", function () { - it("map series element to object keys", function () { - let sf = new Series([1, 2, 3, 4]); - let map = { 1: "ok", 2: "okie", 3: "frit", 4: "gop" }; - - let rslt = ["ok", "okie", "frit", "gop"]; - - assert.deepEqual(sf.map(map).values, rslt); - }); - - it("map series element to a function statement", function () { - let sf = new Series([1, 2, 3, 4]); - let func_map = (x) => { - return x + 1; - }; - - let rslt = [2, 3, 4, 5]; - - assert.deepEqual(sf.map(func_map).values, rslt); - }); - }); - - describe("Apply", function () { - it("apply a function to a series element", function () { - let sf = new Series([1, 2, 3, 4, 5, 6, 7, 8]); - - let apply_func = (x) => { - return x + x; - }; - - let rslt = [2, 4, 6, 8, 10, 12, 14, 16]; - assert.deepEqual(sf.apply(apply_func).values, rslt); - }); - }); - - describe("unique", function () { - it("returns the unique values in a Series of type int", function () { - let sf = new Series([1, 2, 3, 4, 5, 6, 7, 8, 1, 1, 22, 8, 5, 5, 5]); - let expected = [1, 2, 3, 4, 5, 6, 7, 8, 22]; - assert.deepEqual(sf.unique().values, expected); - }); - it("returns the unique values in a Series of type string", function () { - let sf = new Series(["a", "a", "b", "c", "c", "d", "e", "d", "d", "e"]); - let expected = ["a", "b", "c", "d", "e"]; - assert.deepEqual(sf.unique().values, expected); - }); - it("returns the unique values in a Series of type string", function () { - let sf = new Series(["a", "a", "b", "c", "c", "d", "e", "d", "d", "e"]); - let expected = ["a", "b", "c", "d", "e"]; - assert.deepEqual(sf.unique().values, expected); - }); - it("returns the nunique values in a Series of type string", function () { - let sf = new Series(["a", "a", "b", "c", "c", "d", "e", "d", "d", "e"]); - let expected = 5; - assert.deepEqual(sf.nunique(), expected); - }); - }); - - describe("value_counts", function () { - it("returns the unique values and their counts in a Series of type int", function () { - let sf = new Series([1, 2, 3, 4, 5, 6, 7, 8, 1, 1, 22, 8, 5, 5, 5]); - let expected_index = [1, 2, 3, 4, 5, 6, 7, 8, 22]; - let expected_vals = [3, 1, 1, 1, 4, 1, 1, 2, 1]; - assert.deepEqual(sf.value_counts().values, expected_vals); - assert.deepEqual(sf.value_counts().index, expected_index); - }); - it("returns the unique values and their counts in a Series of type string", function () { - let sf = new Series(["a", "a", "b", "c", "c", "d", "e", "d", "d", "e"]); - let expected_vals = [2, 1, 2, 3, 2]; - let expected_index = ["a", "b", "c", "d", "e"]; - assert.deepEqual(sf.value_counts().values, expected_vals); - assert.deepEqual(sf.value_counts().index, expected_index); - }); - }); - - describe("abs", function () { - it("Returns the absolute values in Series", function () { - let data1 = [-10, 45, 56, -25, 23, -20, 10]; - let sf = new Series(data1); - assert.deepEqual(sf.abs().values, [10, 45, 56, 25, 23, 20, 10]); - }); - it("Computes the descriptive statistics on a float Series", function () { - let data1 = [-30.1, -40.2, -3.1, -5.1]; - let sf = new Series(data1); - assert.deepEqual(sf.abs().values, [30.1, 40.2, 3.1, 5.1]); - }); - }); - - describe("fillna", function () { - it("replace all NaN value with specified value", function () { - let data = [NaN, 1, 2, 33, 4, NaN, 5, 6, 7, 8]; - let sf = new Series(data); - let sf_val = [-999, 1, 2, 33, 4, -999, 5, 6, 7, 8]; - sf.fillna({ value: -999, inplace: true }); - assert.deepEqual(sf.values, sf_val); - }); - it("replace all NaN value in string Series with specified value", function () { - let data = [NaN, "boy", NaN, "hey", "Man", undefined]; - let sf = new Series(data); - let sf_val = ["filled", "boy", "filled", "hey", "Man", "filled"]; - let sf_fill = sf.fillna({ value: "filled" }); - assert.deepEqual(sf_fill.values, sf_val); - }); - }); - - describe("cumsum", function () { - it("Return cumulative sum over a Series", function () { - let data1 = [10, 45, 56, 25, 23, 20, 10]; - let sf = new Series(data1); - assert.deepEqual(sf.cumsum().values, [10, 55, 111, 136, 159, 179, 189]); - }); - }); - - describe("cummax", function () { - it("Return cumulative maximum over a Series", function () { - let data1 = [10, 45, 56, 25, 23, 20, 10]; - let sf = new Series(data1); - assert.deepEqual(sf.cummax().values, [10, 45, 56, 56, 56, 56, 56]); - }); - }); - - describe("cummin", function () { - it("Return cumulative minimum over a Series", function () { - let data1 = [10, 45, 56, 25, 23, 20, 10]; - let sf = new Series(data1); - assert.deepEqual(sf.cummin().values, [10, 10, 10, 10, 10, 10, 10]); - }); - }); - - describe("cumprod", function () { - it("Return cumulative product over a Series", function () { - let data1 = [1, 2, 10, 3, 12, 14, 1]; - let sf = new Series(data1); - let rslt = [1, 2, 20, 60, 720, 10080, 10080]; - assert.deepEqual(sf.cumprod().values, rslt); - }); - }); - - describe("lt", function () { - it("Return Less than of series and other series (element-wise)", function () { - let data1 = [10, 45, 56, 25, 23, 20, 10]; - let data2 = [100, 450, 590, 5, 25, 2, 0]; - - let sf = new Series(data1); - let sf2 = new Series(data2); - let expected = [true, true, true, false, true, false, false]; - assert.deepEqual(sf.lt(sf2).values, expected); - }); - - it("Return Less than of series scalar (element-wise)", function () { - let data1 = [10, 45, 56, 25, 23, 20, 10]; - let sf = new Series(data1); - let expected = [true, false, false, true, true, true, true]; - assert.deepEqual(sf.lt(30).values, expected); - }); - }); - - describe("gt", function () { - it("Return Greater than of series and other series (element-wise)", function () { - let data1 = [10, 45, 56, 25, 23, 20, 10]; - let data2 = [100, 450, 590, 5, 25, 2, 0]; - - let sf = new Series(data1); - let sf2 = new Series(data2); - let expected = [false, false, false, true, false, true, true]; - assert.deepEqual(sf.gt(sf2).values, expected); - }); - - it("Return Greater than of series scalar (element-wise)", function () { - let data1 = [10, 45, 56, 25, 23, 20, 10]; - let sf = new Series(data1); - let expected = [false, true, true, false, false, false, false]; - assert.deepEqual(sf.gt(30).values, expected); - }); - }); - - describe("le", function () { - it("Return Less than or Equal to of series and other series (element-wise)", function () { - let data1 = [10, 45, 56, 25, 23, 20, 10]; - let data2 = [100, 450, 590, 5, 25, 2, 0]; - - let sf = new Series(data1); - let sf2 = new Series(data2); - let expected = [true, true, true, false, true, false, false]; - assert.deepEqual(sf.le(sf2).values, expected); - }); - - it("Return Less than or Equal to of series scalar (element-wise)", function () { - let data1 = [10, 45, 56, 25, 23, 20, 10]; - let sf = new Series(data1); - let expected = [true, false, false, true, true, true, true]; - assert.deepEqual(sf.le(30).values, expected); - }); - }); - - describe("ge", function () { - it("Return Greater than or Equal to of series and other series (element-wise)", function () { - let data1 = [10, 45, 56, 25, 23, 20, 10]; - let data2 = [100, 450, 56, 5, 25, 20, 0]; - - let sf = new Series(data1); - let sf2 = new Series(data2); - let expected = [false, false, true, true, false, true, true]; - assert.deepEqual(sf.ge(sf2).values, expected); - }); - - it("Return Greater than or Equal to of series scalar (element-wise)", function () { - let data1 = [30, 45, 56, 25, 23, 20, 10]; - let sf = new Series(data1); - let expected = [true, true, true, false, false, false, false]; - assert.deepEqual(sf.ge(30).values, expected); - }); - }); - - describe("ne", function () { - it("Return Not Equal to of series and other series (element-wise)", function () { - let data1 = [10, 45, 56, 25, 23, 20, 10]; - let data2 = [10, 450, 56, 5, 25, 2, 0]; - - let sf = new Series(data1); - let sf2 = new Series(data2); - let expected = [false, true, false, true, true, true, true]; - assert.deepEqual(sf.ne(sf2).values, expected); - }); - - it("Return Not Equal to of series scalar (element-wise)", function () { - let data1 = [10, 30, 56, 30, 23, 20, 10]; - let sf = new Series(data1); - let expected = [true, false, true, false, true, true, true]; - assert.deepEqual(sf.ne(30).values, expected); - }); - }); - - describe("eq", function () { - it("Return Equal to of series and other series (element-wise)", function () { - let data1 = [10, 45, 56, 25, 23, 20, 10]; - let data2 = [100, 450, 590, 25, 25, 2, 0]; - - let sf = new Series(data1); - let sf2 = new Series(data2); - let expected = [false, false, false, true, false, false, false]; - assert.deepEqual(sf.eq(sf2).values, expected); - }); - - it("Return Equal to of series scalar (element-wise)", function () { - let data1 = [10, 45, 56, 25, 23, 20, 30]; - let sf = new Series(data1); - let expected = [false, false, false, false, false, false, true]; - assert.deepEqual(sf.eq(30).values, expected); - }); - }); - - describe("replace", function () { - it("Replace values given in replace param with value", function () { - let data1 = [10, 45, 56, 25, 23, 20, 10]; - let sf = new Series(data1); - let expected = [-50, 45, 56, 25, 23, 20, -50]; - let df_rep = sf.replace({ replace: 10, with: -50 }); - assert.deepEqual(df_rep.values, expected); - }); - - it("Replace values given in replace param with value (String type)", function () { - let data1 = ["A", "A", "A", "B", "B", "C", "C", "D"]; - let sf = new Series(data1); - let expected = ["boy", "boy", "boy", "B", "B", "C", "C", "D"]; - sf.replace({ replace: "A", with: "boy", inplace: true }); - assert.deepEqual(sf.values, expected); - }); - it("Throw error on wrong param passed", function () { - let data1 = ["A", "A", "A", "B", "B", "C", "C", "D"]; - let sf = new Series(data1); - let expected = `Params Error: A specified parameter is not supported. Your params must be any of the following [replace,with,inplace]`; - assert.throws( - () => { - sf.replace({ replce: "A", with: "boy", inplace: true }); - }, - Error, - expected - ); - }); - }); - - describe("drop_duplicates", function () { - it("Return Series with duplicate values removed (Default, first values kept)", function () { - let data1 = [10, 45, 56, 10, 23, 20, 10, 10]; - let sf = new Series(data1); - let expected = [10, 45, 56, 23, 20]; - let expected_index = [0, 1, 2, 4, 5]; - let df_drop = sf.drop_duplicates(); - assert.deepEqual(df_drop.values, expected); - assert.deepEqual(df_drop.index, expected_index); - }); - - it("Return Series with duplicate values removed (last values kept)", function () { - let data1 = [10, 45, 56, 10, 23, 20, 10, 10]; - let sf = new Series(data1); - let expected = [45, 56, 23, 20, 10]; - let expected_index = [1, 2, 4, 5, 7]; - let df_drop = sf.drop_duplicates({ keep: "last" }); - assert.deepEqual(df_drop.values, expected); - assert.deepEqual(df_drop.index, expected_index); - }); - - it("Return Series with duplicate values removed (String)", function () { - let data1 = ["A", "A", "A", "B", "B", "C", "C", "D"]; - let sf = new Series(data1); - let expected = ["A", "B", "C", "D"]; - let expected_index = [0, 3, 5, 7]; - sf.drop_duplicates({ inplace: true }); - assert.deepEqual(sf.values, expected); - assert.deepEqual(sf.index, expected_index); - }); - }); - - describe("dropna", function () { - it("Return a new Series with missing values removed (Int)", function () { - let data1 = [10, 45, undefined, 10, 23, 20, undefined, 10]; - let sf = new Series(data1); - let expected = [10, 45, 10, 23, 20, 10]; - let expected_index = [0, 1, 3, 4, 5, 7]; - let sf_drop = sf.dropna(); - assert.deepEqual(sf_drop.values, expected); - assert.deepEqual(sf_drop.index, expected_index); - }); - - it("Return a new Series with missing values removed (String)", function () { - let data1 = ["A", NaN, "A", "B", "B", NaN, "C", undefined]; - let sf = new Series(data1); - let expected = ["A", "A", "B", "B", "C"]; - let expected_index = [0, 2, 3, 4, 6]; - - sf.dropna({ inplace: true }); - assert.deepEqual(sf.values, expected); - assert.deepEqual(sf.index, expected_index); - }); - }); - - describe("argsort", function () { - it("Return the integer indices that would sort the Series values", function () { - let data1 = [10, 45, 20, 10, 23, 20, 30, 11]; - let sf = new Series(data1); - let expected = [3, 0, 7, 5, 2, 4, 6, 1]; - let sf_sort = sf.argsort(); - assert.deepEqual(sf_sort.values, expected); - }); - - it("Return the integer indices that would sort the Series values", function () { - let data1 = [10.22, 4.5, 2.0, 10, 23.23, 20.1, 30, 11]; - let sf = new Series(data1); - let expected = [6, 4, 5, 7, 0, 3, 1, 2]; - let sf_sort = sf.argsort(false); - assert.deepEqual(sf_sort.values, expected); - }); - }); - - describe("argmax", function () { - it("Return int position of the largest value in the Series.", function () { - let data1 = [10, 45, 20, 10, 23, 20, 30, 11]; - let sf = new Series(data1); - let expected = 1; - let argmax = sf.argmax(); - assert.deepEqual(argmax, expected); - }); - - it("Return int position of the largest value in the Float Series.", function () { - let data1 = [10.22, 4.5, 2.0, 10, 23.23, 20.1, 30, 11]; - let sf = new Series(data1); - let expected = 6; - let argmax = sf.argmax(); - assert.deepEqual(argmax, expected); - }); - }); - - describe("argmin", function () { - it("Return int position of the smallest value in the Series", function () { - let data1 = [10, 45, 20, 122, 23, 20, 30, 11]; - let sf = new Series(data1); - let expected = 0; - let argmin = sf.argmin(); - assert.deepEqual(argmin, expected); - }); - - it("Return int position of the smallest value in a Float Series", function () { - let data1 = [10.22, 4.5, 2.0, 10, 23.23, 20.1, 30, 11]; - let sf = new Series(data1); - let expected = 2; - let argmin = sf.argmin(); - assert.deepEqual(argmin, expected); - }); - }); - - describe("Str", function () { - it("Converts all characters to lowercase.", function () { - let data = ["lower", "CAPITALS", "this is a sentence", "SwApCaSe"]; - let res = ["lower", "capitals", "this is a sentence", "swapcase"]; - let sf = new Series(data); - assert.deepEqual(sf.str.toLowerCase().values, res); - }); - it("Converts all characters to uppercase.", function () { - let data = ["lower", "CAPITALS", "this is a sentence", "SwApCaSe"]; - let res = ["LOWER", "CAPITALS", "THIS IS A SENTENCE", "SWAPCASE"]; - let sf = new Series(data); - assert.deepEqual(sf.str.toUpperCase().values, res); - }); - it("Converts all characters to capital case.", function () { - let data = ["lower", "CAPITALS", "this is a sentence", "SwApCaSe"]; - let res = ["Lower", "Capitals", "This is a sentence", "Swapcase"]; - let sf = new Series(data); - assert.deepEqual(sf.str.capitalize().values, res); - }); - - it("Returns the character at the specified index (position)", function () { - let data = ["lower", "CAPITALS", "this is a sentence", "SwApCaSe"]; - let res = ["w", "P", "i", "A"]; - let sf = new Series(data); - assert.deepEqual(sf.str.charAt(2).values, res); - }); - - it("Throws error on concat of numeric series", function () { - let data = [1, 2, 3, 4, 5, 6]; - let sf = new Series(data); - assert.throws( - () => { - sf.str.concat("20", 1); - }, - Error, - "Cannot call accessor str on non-string type" - ); - - }); - }); - - describe("dt", function () { - it("check month generated", function () { - let data = ["02Sep2019", "03Dec2019", "04Jan2019"]; - let sf = new Series(data); - let new_data = [8, 11, 0]; - assert.deepEqual(sf.dt.month().values, new_data); - }); - - it("check month Name generated", function () { - let data = ["06-30-02019", "07-29-2019", "08-28-2019"]; - let sf = new Series(data); - let new_data = ["Jun", "Jul", "Aug"]; - assert.deepEqual(sf.dt.month_name().values, new_data); - }); - - it("check days of the weeks generated", function () { - let data = ["06-30-02019", "07-29-2019", "08-28-2019"]; - let sf = new Series(data); - let new_data = ["Sun", "Mon", "Wed"]; - assert.deepEqual(sf.dt.weekdays().values, new_data); - }); - - it("check day of the month generated", function () { - let data = ["06-30-02019", "07-29-2019", "08-28-2019"]; - let sf = new Series(data); - let new_data = [30, 29, 28]; - assert.deepEqual(sf.dt.monthday().values, new_data); - }); - }); - - describe("astype", function () { - it("set type of float column to int", function () { - let data = [-20.1, 30, 47.3, -20]; - let ndframe = new Series(data); - let df = ndframe.astype("int32"); - - assert.deepEqual(df.dtypes, "int32"); - assert.deepEqual(df.values, [-20, 30, 47, -20]); - }); - it("set type of int column to float", function () { - let data = [34, -4, 5, 6]; - let ndframe = new Series(data); - let df = ndframe.astype("float32"); - assert.deepEqual(df.dtypes, "float32"); - assert.deepEqual(df.values, [34, -4, 5, 6]); - }); - it("set type of string column to int", function () { - let data = ["20.1", "21", "23.4", "50.78"]; - let ndframe = new Series(data); - let df = ndframe.astype("int32"); - - assert.deepEqual(df.dtypes, "int32"); - assert.deepEqual(df.values, [20, 21, 23, 51]); - }); - it("set type of string column to float", function () { - let data = ["20.1", "21", "23.4", "50.78"]; - let ndframe = new Series(data); - let df = ndframe.astype("float32"); - - assert.deepEqual(df.dtypes, "float32"); - assert.deepEqual(df.values, [20.1, 21, 23.4, 50.78]); - }); - }); - - describe("iloc", function () { - it("indexing by list of index", function () { - let data = [1, 2, 3, 4, "a", "b", "c"]; - let sf = new Series(data); - - let expected_val = [2, "a", 3, 4, "b"]; - - assert.deepEqual(sf.iloc([1, 4, 2, 3, 5]).values, expected_val); - }); - it("indexing by slicing", function () { - let data = [1, 2, 3, 4, "a", "b", "c"]; - let sf = new Series(data); - - let expected_val = [2, 3, 4]; - - assert.deepEqual(sf.iloc(["1:4"]).values, expected_val); - }); - it("indexing by slicing format ':5' works", function () { - let data = [1, 2, 3, 4, "a", "b", "c"]; - let sf = new Series(data); - let expected_val = [1, 2, 3, 4, 'a']; - assert.deepEqual(sf.iloc([":5"]).values, expected_val); - }); - it("indexing by slicing format '2:` works", function () { - let data = [1, 2, 3, 4, "a", "b", "c"]; - let sf = new Series(data); - let expected_val = [3, 4, "a", "b", "c"]; - assert.deepEqual(sf.iloc(["2:"]).values, expected_val); - }); - }); - - describe("append", function () { - it("Add a new single value to the end of a Series", function () { - let data = [1, 2, 3, 4, "a", "b", "c"]; - let sf = new Series(data); - let expected_val = [1, 2, 3, 4, "a", "b", "c", "d"]; - sf.append("d", true); - assert.deepEqual(sf.values, expected_val); - }); - it("Add a new array of values to the end of a Series", function () { - let data = [1, 2, 3, 4]; - let to_add = ["a", "b", "c"]; - let sf = new Series(data); - let expected_val = [1, 2, 3, 4, "a", "b", "c"]; - sf.append(to_add, true); - assert.deepEqual(sf.values, expected_val); - }); - it("Add a Series to the end of another Series", function () { - let sf1 = new Series([1, 2, 3, 4]); - let sf2 = new Series(["a", "b", "c"]); - let expected_val = [1, 2, 3, 4, "a", "b", "c"]; - sf1.append(sf2, true); - assert.deepEqual(sf1.values, expected_val); - }); - it("Add a new single value to the end of a Series", function () { - let data = [1, 2, 3, 4, "a", "b", "c"]; - let sf = new Series(data); - let expected_val = [1, 2, 3, 4, "a", "b", "c", "d"]; - sf = sf.append("d"); - assert.deepEqual(sf.values, expected_val); - }); - it("Add a new array of values to the end of a Series", function () { - let data = [1, 2, 3, 4]; - let to_add = ["a", "b", "c"]; - let sf = new Series(data); - let expected_val = [1, 2, 3, 4, "a", "b", "c"]; - sf = sf.append(to_add); - assert.deepEqual(sf.values, expected_val); - }); - it("Add a Series to the end of another Series", function () { - let sf1 = new Series([1, 2, 3, 4]); - let sf2 = new Series(["a", "b", "c"]); - let expected_val = [1, 2, 3, 4, "a", "b", "c"]; - sf1 = sf1.append(sf2); - assert.deepEqual(sf1.values, expected_val); - }); - it("Confirm index Change after append", function () { - let sf1 = new Series([1, 2, 3, 4]); - let sf2 = new Series(["a", "b", "c"]); - sf1 = sf1.append(sf2); - assert.deepEqual(sf1.index, [0, 1, 2, 3, 0, 1, 2]); - }); - it("Confirm index Change after append inplace", function () { - let sf1 = new Series([1, 2, 3, 4]); - let sf2 = new Series(["a", "b", "c"]); - sf1.append(sf2, true); - assert.deepEqual(sf1.index, [0, 1, 2, 3, 0, 1, 2]); - }); - }); -}); diff --git a/danfojs-node/tests/core/strings.js b/danfojs-node/tests/core/strings.js deleted file mode 100644 index 294b7d5b..00000000 --- a/danfojs-node/tests/core/strings.js +++ /dev/null @@ -1,168 +0,0 @@ -import { assert } from "chai"; -import { Str } from '../../src/core/strings'; -import { Series } from "../../src/core/series"; - - -describe("Str", function () { - it("Converts all characters to lowercase.", function () { - let data = ['lower', 'CAPITALS', 'this is a sentence', 'SwApCaSe']; - let res = ['lower', 'capitals', 'this is a sentence', 'swapcase']; - let str = new Str(new Series(data)); - assert.deepEqual(str.toLowerCase().values, res); - }); - it("Converts all characters to uppercase.", function () { - let data = ['lower', 'CAPITALS', 'this is a sentence', 'SwApCaSe']; - let res = ['LOWER', 'CAPITALS', 'THIS IS A SENTENCE', 'SWAPCASE']; - let str = new Str(new Series(data)); - assert.deepEqual(str.toUpperCase().values, res); - }); - it("Converts all characters to capital case.", function () { - let data = ['lower', 'CAPITALS', 'this is a sentence', 'SwApCaSe']; - let res = ['Lower', 'Capitals', 'This is a sentence', 'Swapcase']; - let str = new Str(new Series(data)); - assert.deepEqual(str.capitalize().values, res); - }); - - it("Returns the character at the specified index (position)", function () { - let data = ['lower', 'CAPITALS', 'this is a sentence', 'SwApCaSe']; - let res = ["w", "P", "i", "A"]; - let str = new Str(new Series(data)); - assert.deepEqual(str.charAt(2).values, res); - }); - it("Joins two or more strings. 0 joins from the start", function () { - let data = ['lower', 'CAPITALS', 'sentence', 'SwApCaSe']; - let data2 = ['XX', 'YY', 'BB', '01']; - - let res = ['XXlower', 'YYCAPITALS', 'BBsentence', '01SwApCaSe']; - let str = new Str(new Series(data)); - assert.deepEqual(str.concat(data2, 0).values, res); - }); - - it("Joins two or more strings. 1 joins from the end", function () { - let data = ['lower', 'CAPITALS', 'sentence', 'SwApCaSe']; - let data2 = ['XX', 'YY', 'BB', '01']; - - let res = ['lowerXX', 'CAPITALSYY', 'sentenceBB', 'SwApCaSe01']; - let str = new Str(new Series(data)); - assert.deepEqual(str.concat(data2, 1).values, res); - }); - - it("Joins two arrays of strings. 0 joins from the start", function () { - let data = ['lower', 'CAPITALS', 'sentence', 'SwApCaSe']; - let res = ['prelower', 'preCAPITALS', 'presentence', 'preSwApCaSe']; - let str = new Str(new Series(data)); - assert.deepEqual(str.concat("pre", 0).values, res); - }); - - it("Joins two or more strings. 1 joins from the end", function () { - let data = ['lower', 'CAPITALS', 'this is a sentence', 'SwApCaSe']; - let res = ['lowerpost', 'CAPITALSpost', 'this is a sentencepost', 'SwApCaSepost']; - let str = new Str(new Series(data)); - assert.deepEqual(str.concat("post", 1).values, res); - }); - - it("Checks whether a string begins with specified characters", function () { - let data = ['lower', 'CAPITALS', 'this is a sentence', 'SwApCaSe']; - let res = [true, false, false, false]; - let str = new Str(new Series(data)); - assert.deepEqual(str.startsWith("l").values, res); - }); - it("Checks whether a string ends with specified characters", function () { - let data = ['lower', 'CAPITALS', 'this is a sentence', 'SwApCaSe']; - let res = [false, false, true, true]; - let str = new Str(new Series(data)); - assert.deepEqual(str.endsWith("e").values, res); - }); - - it("Checks whether a string contains the specified string/characters", function () { - let data = ['lower', 'CAPITALS', 'this is a sentence', 'SwApCaSe']; - let res = [false, false, true, false]; - let str = new Str(new Series(data)); - assert.deepEqual(str.includes("sentence").values, res); - }); - - it("Returns the position of the first found occurrence of a specified value in a string", function () { - let data = ['lower', 'CAPITALS', 'this is a sentence', 'SwApCaSe']; - let res = [-1, 0, -1, 4]; - let str = new Str(new Series(data)); - assert.deepEqual(str.indexOf("C").values, res); - }); - - it("Returns the position of the last found occurrence of a specified value in a string", function () { - let data = ['lower', 'CAPITALS', 'this is a sentence', 'SwApCaSe']; - let res = [4, -1, -1, -1]; - let str = new Str(new Series(data)); - assert.deepEqual(str.lastIndexOf("r").values, res); - }); - - it("Returns a new string with a specified number of copies of an existing string", function () { - let data = ['a', 'b', 'c', 'd']; - let res = ['aaa', 'bbb', 'ccc', 'ddd']; - let str = new Str(new Series(data)); - assert.deepEqual(str.repeat(3).values, res); - }); - - it("Searches a string for a specified value, or a regular expression, and returns a new string where the specified values are replaced", function () { - let data = ['lower', 'CAPITALS', 'this is a sentence', 'SwApCaSe']; - let res = ['lower', 'CXXXPITALS', 'this is a sentence', 'SwXXXpCaSe']; - let str = new Str(new Series(data)); - assert.deepEqual(str.replace("A", "XXX").values, res); - }); - - it("Searches a string for a specified value, or regular expression, and returns the position of the match", function () { - let data = ['lower', 'CAPITALS', 'this is a sentence', 'SwApCaSe']; - let res = [-1, 1, -1, 2]; - let str = new Str(new Series(data)); - assert.deepEqual(str.search("A").values, res); - }); - - it("Extracts a part of a string and returns a new string", function () { - let data = ['lower', 'CAPITALS', 'this is a sentence', 'SwApCaSe']; - let res = ['ow', 'AP', 'hi', 'wA']; - let str = new Str(new Series(data)); - assert.deepEqual(str.slice(1, 3).values, res); - }); - - it("Splits a string into an array of substrings", function () { - let data = ['lower part', 'CAPITALS city', 'is a sentence', 'SwAp CaSe']; - let res = ["lower,part", "CAPITALS,city", "is,a,sentence", "SwAp,CaSe"]; - let str = new Str(new Series(data)); - assert.deepEqual(str.split(" ").values, res); - }); - - it("Extracts the characters from a string, beginning at a specified start position, and through the specified number of character", function () { - let data = ['lower part', 'CAPITALS city', 'this is a sentence', 'SwAp CaSe']; - let res = [" p", "AL", "is", "Ca"]; - let str = new Str(new Series(data)); - assert.deepEqual(str.substr(5, 2).values, res); - }); - - it("Extracts the characters from a string, between two specified indices", function () { - let data = ['lower part', 'CAPITALS city', 'this is a sentence', 'SwAp CaSe']; - let res = ["w", "P", "i", "A"]; - let str = new Str(new Series(data)); - assert.deepEqual(str.substring(2, 3).values, res); - }); - - it("Removes whitespace from both ends of a string", function () { - let data = ['lower part ', ' CAPITALS city', ' this is a sentence', ' SwAp CaSe']; - let res = ['lower part', 'CAPITALS city', 'this is a sentence', 'SwAp CaSe']; - let str = new Str(new Series(data)); - assert.deepEqual(str.trim().values, res); - }); - - it("Joins strings to specified value", function () { - let data = ['lower part', 'CAPITALS city', 'this is a sentence', 'SwAp CaSe']; - let res = ['lower part,new', 'CAPITALS city,new', 'this is a sentence,new', 'SwAp CaSe,new']; - let str = new Str(new Series(data)); - assert.deepEqual(str.join("new", ",").values, res); - }); - - it("Counts the number of characters in string", function () { - let data = ['lower part', 'CAPITALS', 'this is a sentence', 'SwApCaSe']; - let res = [10, 8, 18, 8]; - let str = new Str(new Series(data)); - assert.deepEqual(str.len().values, res); - }); - -}); diff --git a/danfojs-node/tests/core/timeseries.js b/danfojs-node/tests/core/timeseries.js deleted file mode 100644 index 917d7186..00000000 --- a/danfojs-node/tests/core/timeseries.js +++ /dev/null @@ -1,90 +0,0 @@ -import { assert } from "chai"; -import { to_datetime } from '../../src/core/timeseries'; - -describe("TimeSeries", function () { - - it("Check date formatting", function () { - - let data = [ "02Sep2019", "03Sep2019", "04Sep2019" ]; - - let times = to_datetime({ "data": data, "format": "%d%b%Y%" }); - - let new_data = [ new Date("02-Sep-2019"), new Date("03-Sep-2019"), new Date("04-Sep-2019") ]; - - assert.deepEqual(times.date_list, new_data); - - }); - - it("Check Invalid date Formatting", function () { - - let data = [ "30-06-02019", "29-06-2019", "28-06-2019" ]; - - assert.throws(function () { to_datetime({ "data": data }); }, Error, "Invalid date, the date format not recognise"); - - }); - - it("check month generated", function () { - - let data = [ "02Sep2019", "03Dec2019", "04Jan2019" ]; - - let times = to_datetime({ "data": data, "format": "%d%b%Y%" }); - - let new_data = [ 8, 11, 0 ]; - - assert.deepEqual(times.month().values, new_data); - }); - - it("check month Name generated", function () { - - let data = [ "06-30-02019", "07-29-2019", "08-28-2019" ]; - - let times = to_datetime({ "data": data }); - - let new_data = [ "Jun", "Jul", "Aug" ]; - - assert.deepEqual(times.month_name().values, new_data); - }); - - it("check days of the weeks generated", function () { - - let data = [ "06-30-02019", "07-29-2019", "08-28-2019" ]; - - let times = to_datetime({ "data": data }); - - let new_data = [ "Sun", "Mon", "Wed" ]; - - assert.deepEqual(times.weekdays().values, new_data); - }); - - it("check day of the month generated", function () { - - let data = [ "06-30-02019", "07-29-2019", "08-28-2019" ]; - - let times = to_datetime({ "data": data }); - - let new_data = [ 30, 29, 28 ]; - - assert.deepEqual(times.monthday().values, new_data); - }); - it("check the seconds generated", function () { - - let data = [ "06-30-02019 00:00:12", "07-29-2019 00:30:40", "08-28-2019 00:12:04" ]; - - let times = to_datetime({ "data": data }); - - let new_data = [ 12, 40, 4 ]; - - assert.deepEqual(times.seconds().values, new_data); - }); - it("check the minutes generated", function () { - - let data = [ "06-30-02019 00:00:12", "07-29-2019 00:30:40", "08-28-2019 00:12:04" ]; - - let times = to_datetime({ "data": data }); - - let new_data = [ 0, 30, 12 ]; - - assert.deepEqual(times.minutes().values, new_data); - }); - -}); diff --git a/danfojs-node/tests/core/utils.js b/danfojs-node/tests/core/utils.js deleted file mode 100644 index 1d9d3222..00000000 --- a/danfojs-node/tests/core/utils.js +++ /dev/null @@ -1,231 +0,0 @@ -import { assert } from "chai"; -import { Utils } from '../../src/core/utils'; -const utils = new Utils; - - -describe("Utils Functions", function () { - it("removes an element from an array", function () { - let arr = [ 1, 2, 3, 4 ]; - assert.deepEqual(utils.remove(arr, 2), [ 1, 2, 4 ]); - }); - it("Checks if variable is a string", function () { - let arr = [ "1", "2" ]; - assert.isTrue(utils.__is_string(arr[0])); - }); - it("Checks if variable is a number", function () { - let arr = [ 1, 2, 3, 4 ]; - assert.isTrue(utils.__is_number(arr[0])); - }); - it("Checks if value is null", function () { - let val = null; - let val2 = 1; - assert.isTrue(utils.__is_null(val)); - assert.isFalse(utils.__is_null(val2)); - }); - - it("Checks if value is undefined", function () { - let arr; - assert.isTrue(utils.__is_undefined(arr)); - }); - it("random sample n elements from array", function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ], [ 100, 200, 300 ] ]; - assert.isFalse(utils.__sample_from_iter(data, 2) == utils.__sample_from_iter(data, 2)); - assert.isFalse(utils.__sample_from_iter(data, 3) === utils.__sample_from_iter(data, 3)); - - }); - it("Generate number betwee two set of values", function () { - - let start = 0; - let end = 5; - let data = [ 0, 1, 2, 3, 4, 5 ]; - assert.deepEqual(utils.__range(start, end), data); - }); - - describe("__get_col_values", function () { - it("converts an array of rows to array of columns", function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ] ]; - let result = [ [ 1, 4, 20 ], [ 2, 5, 30 ], [ 3, 6, 40 ] ]; - assert.deepEqual(utils.__get_col_values(data), result); - }); - }); - - describe("__get_t", function () { - it("Returns string type present in an 1D array", function () { - let data = [ 'Alice', 'Boy', 'Girl', "39" ]; - let result = [ 'string' ]; - assert.deepEqual(utils.__get_t(data), result); - }); - it("Returns float type present in an 1D array", function () { - let data = [ 1.1, 2.1, 3.2, 4.4 ]; - let result = [ 'float32' ]; - assert.deepEqual(utils.__get_t(data), result); - }); - it("Returns int type present in an 1D array", function () { - let data = [ 1, 2, 3, 45 ]; - let result = [ 'int32' ]; - assert.deepEqual(utils.__get_t(data), result); - }); - it("Returns float when there's a mixture of int and float in a 1D array", function () { - let data = [ 1, 2.1, 3, 45 ]; - let result = [ 'float32' ]; - assert.deepEqual(utils.__get_t(data), result); - }); - it("Returns float type when NaN is present in an 1D array", function () { - let data = [ 1, 2, 3, 45, NaN ]; - let result = [ 'float32' ]; - assert.deepEqual(utils.__get_t(data), result); - }); - it("Returns correct dtype if NaN present in data", function () { - let data = [ - [18.7, 17.4, 18, NaN, 19.3], - [ 20, NaN, 19, 18, 20 ]]; - let result = [ 'float32', 'float32' ]; - assert.deepEqual(utils.__get_t(data), result); - }); - it("Returns the data type present in an 2D array", function () { - let data = [ [ 'Alice', 'Boy', 'Girl', "39" ], [ 2, 5, 30, 89 ], [ 3.1, 6.1, 40.1, 78.2 ] ]; - let result = [ 'string', 'int32', 'float32' ]; - assert.deepEqual(utils.__get_t(data), result); - }); - it("Returns the string dtype when there's a mixture of dtyoes in a 2D array", function () { - let data = [ [ 'Alice', 'Boy', 'Girl', 21 ], [ 2, 5, 30, "hey" ], [ 3, 6, 40.1, 78.2 ] ]; - let result = [ 'string', 'string', 'float32' ]; - assert.deepEqual(utils.__get_t(data), result); - }); - it("Returns bool type in a 1D array", function () { - let data = [ true, true, false, false, false, true ]; - let result = [ 'boolean' ]; - assert.deepEqual(utils.__get_t(data), result); - }); - it("Returns bool type in a 2D array", function () { - let data = [ [ true, false, true ], [ "boy", "girl", "man" ], [ 20, 30, 24 ] ]; - let result = [ 'boolean', 'string', 'int32' ]; - assert.deepEqual(utils.__get_t(data), result); - }); - it("Returns string type if values are all NaN", function () { - let data = [ [ true, false, true ], [ "boy", "girl", "boy" ], [ NaN, undefined, NaN ] ]; - let result = [ 'boolean', 'string', 'float32' ]; - assert.deepEqual(utils.__get_t(data), result); - }); - }); - - describe("__map_int_to_bool", function () { - it("map ints to bools in array of arrays", function () { - let data = [ [ 1, 0, 1 ], [ 1, 1, 0 ] ]; - assert.deepEqual(utils.__map_int_to_bool(data, 2), [ [ true, false, true ], [ true, true, false ] ]); - }); - it("map ints to bools in array", function () { - let data = [ 1, 0, 0, 1, 1 ]; - assert.deepEqual(utils.__map_int_to_bool(data, 1), [ true, false, false, true, true ]); - }); - }); - - - describe("__median", function () { - it("Gets the median value of an even array", function () { - let data = [ 100, 2, 3, 20, 30, 40 ]; - assert.deepEqual(utils.__median(data, true), 25); - }); - it("Gets the median value of an odd array", function () { - let data = [ 1, 30, 20, 50, 40 ]; - assert.deepEqual(utils.__median(data, true), 30); - }); - }); - - describe("__mode", function () { - it("Gets the modal value(s) of an array", function () { - let data = [ 100, 2, 3, 20, 20, 40 ]; - assert.deepEqual(utils.__mode(data), [ 20 ]); - }); - it("Returns the multi-modal values of an array", function () { - let data = [ 100, 2, 3, 20, 20, 40, 4, 4, 4, 20 ]; - assert.deepEqual(utils.__mode(data), [ 4, 20 ]); - }); - }); - - describe("__round", function () { - it("round elements in array to 1 dp", function () { - let data = [ 10.01, 2.2, 3.11, 20.505, 20.22, 40.0909 ]; - assert.deepEqual(utils.__round(data, 1, true), [ 10.0, 2.2, 3.1, 20.5, 20.2, 40.1 ]); - }); - it("round elements in array to 2 dp", function () { - let data = [ 10.019, 2.2099, 3.1145, 20.506, 20.22, 40.0909 ]; - assert.deepEqual(utils.__round(data, 2, true), [ 10.02, 2.21, 3.11, 20.51, 20.22, 40.09 ]); - }); - }); - - describe("__replace_undefined_with_NaN", function () { - it("replace undefined in Series with NaN", function () { - let data = [ 10.01, 2.2, undefined, 20.505, 20.22, undefined ]; - assert.deepEqual(utils.__replace_undefined_with_NaN(data, true), [ 10.01, 2.2, NaN, 20.505, 20.22, NaN ]); - }); - it("replace undefined in DataFrame with NaN", function () { - let data = [ [ 10.01, 2.2, undefined, 20.505, 20.22, undefined ], - [ 10.01, undefined, undefined, 20.505, 20, undefined ] ]; - - let result = [ [ 10.01, 2.2, NaN, 20.505, 20.22, NaN ], - [ 10.01, NaN, NaN, 20.505, 20, NaN ] ]; - assert.deepEqual(utils.__replace_undefined_with_NaN(data, false), result); - }); - it("replace null in Series with NaN", function () { - let data = [ 10.01, 2.2, null, 20.505, 20.22, null ]; - assert.deepEqual(utils.__replace_undefined_with_NaN(data, true), [ 10.01, 2.2, NaN, 20.505, 20.22, NaN ]); - }); - it("replace null in DataFrame with NaN", function () { - let data = [ [ 10.01, 2.2, null, 20.505, 20.22, null ], - [ 10.01, null, null, 20.505, 20, null ] ]; - - let result = [ [ 10.01, 2.2, NaN, 20.505, 20.22, NaN ], - [ 10.01, NaN, NaN, 20.505, 20, NaN ] ]; - assert.deepEqual(utils.__replace_undefined_with_NaN(data, false), result); - }); - }); - - describe("__convert_2D_to_1D", function () { - it("convert 2D array of array to 1D of string values", function () { - let data = [ [ 10.01, 2.2, "a" ], [ 20.505, 20.22, "boy" ] ]; - assert.deepEqual(utils.__convert_2D_to_1D(data), [ "10.01,2.2,a", "20.505,20.22,boy" ]); - }); - - }); - - // describe("_throw_wrong_params_error", function () { - // it("check if the right params are passed to a function", function () { - // let params_needed = ["replace", "with", "inplace"] - // let kwargs = { "replae": 2, "with": 12, "inplace": true } - // assert.equal(utils._throw_wrong_params_error(kwargs, params_needed), false) - // }) - // it("check if the right params are passed to a function 2", function () { - // let params_needed = ["replace", "with", "inplace"] - // let kwargs = { "replace": 2, "with": 12, "inplace": true } - // assert.equal(utils._throw_wrong_params_error(kwargs, params_needed), true) - // }) - - // }) - - describe("_get_row_and_col_values", function () { - it("retreive rows and labels from column object", function () { - let data = { "Alpha": [ "A", "B", "C", "D" ], count: [ 1, 2, 3, 4 ], sum: [ 20.3, 30.456, 40.90, 90.1 ] }; - let res = [ [ "A", 1, 20.3 ], [ "B", 2, 30.456 ], [ "C", 3, 40.90 ], [ "D", 4, 90.1 ] ]; - assert.deepEqual(utils._get_row_and_col_values(data)[0], res); - assert.deepEqual(utils._get_row_and_col_values(data)[1], [ "Alpha", "count", "sum" ]); - - }); - - - }); - - - describe("_get_duplicate", function(){ - it("obtain duplicate and their index", function(){ - - let data = [ 1, 2, 3, 4, 5, 3, 4, 6, 4, 5 ]; - let res = { '3': { count: 2, index: [ 2, 5 ] }, - '4': { count: 3, index: [ 3, 6, 8 ] }, - '5': { count: 2, index: [ 4, 9 ] } }; - - assert.deepEqual(utils.__get_duplicate(data), res); - }); - }); - -}); diff --git a/danfojs-node/tests/io/reader.js b/danfojs-node/tests/io/reader.js deleted file mode 100644 index 854b0266..00000000 --- a/danfojs-node/tests/io/reader.js +++ /dev/null @@ -1,118 +0,0 @@ -import { assert } from "chai"; -import { read_csv, read_json, read_excel, read } from "../../src/io/reader"; - -describe("read_csv", async function () { - this.timeout(10000); // all tests in this suite get 10 seconds before timeout - it("reads a csv file from source over the internet", async function () { - const csvUrl = - "https://storage.googleapis.com/tfjs-examples/multivariate-linear-regression/data/boston-housing-train.csv"; - - const df = await read_csv(csvUrl); - const num_of_columns = df.column_names.length; - assert.equal(num_of_columns, 13); - - }); - - it("reads a csv file from source from local disk", async function () { - const csvUrl = "tests/samples/titanic.csv"; - const df = await read_csv(csvUrl); - const num_of_columns = df.column_names.length; - assert.equal(num_of_columns, 8); - }); -}); - -describe("read_json", async function () { - this.timeout(10000); // all tests in this suite get 10 seconds before timeout - it("reads a json file from source over the internet", async function () { - const jUrl = - "https://raw.githubusercontent.com/risenW/Tensorflowjs_Projects/master/recommender-sys/Python-Model/web_book_data.json"; - - const df = await read_json(jUrl); - const num_of_columns = df.column_names.length; - assert.equal(num_of_columns, 4); - - }); - - it("reads a json file from source from local disk", async function () { - const jUrl = "tests/samples/book.json"; - const df = await read_json(jUrl); - const num_of_columns = df.column_names.length; - assert.equal(num_of_columns, 4); - }); -}); - -describe("read_excel", async function () { - this.timeout(10000); // all tests in this suite get 10 seconds before timeout - it("reads an excel file from source over the internet", async function () { - const remote_url = - "https://file-examples-com.github.io/uploads/2017/02/file_example_XLS_100.xls"; - const df = await read_excel(remote_url, { sheet: 0 }); - assert(df.columns.length, 8); - }); - - it("reads an excel file from source from local disk", async function () { - const file_url = "tests/samples/SampleData.xlsx"; - const df = await read_excel(file_url); - assert(df.columns.length, 4); - }); -}); - -describe("read: Generic read function from frictionless.js", async function () { - this.timeout(20000); // all tests in this suite get 10 seconds before timeout - - it("read an excel file from source over the internet", async function () { - const remote_url = - "https://file-examples-com.github.io/uploads/2017/02/file_example_XLS_100.xls"; - const df = await read(remote_url); - assert(df.columns.length, 8); - - }); - - it("read an excel file from source from local disk", async function () { - const file_url = "tests/samples/SampleData.xlsx"; - const df = await read(file_url); - assert(df.columns.length, 4); - }); - - it("read a csv file from source over the internet", async function () { - const csvUrl = - "https://storage.googleapis.com/tfjs-examples/multivariate-linear-regression/data/boston-housing-train.csv"; - - const df = await read(csvUrl); - const num_of_columns = df.column_names.length; - assert.equal(num_of_columns, 13); - }); - - it("read a csv file from source from local disk", async function () { - const csvUrl = "tests/samples/titanic.csv"; - - const df = await read(csvUrl); - const num_of_columns = df.column_names.length; - assert.equal(num_of_columns, 8); - - }); - it("read a csv file from source from local disk with header set to false", async function () { - const csvUrl = "tests/samples/titanic.csv"; - const df = await read(csvUrl, { header: false }); - const num_of_columns = df.column_names.length; - assert.equal(num_of_columns, 8); - }); - - it("read a Dataset package", async function () { - const jUrl = - "https://raw.githubusercontent.com/frictionlessdata/frictionless-js/master/test/fixtures/co2-ppm/datapackage.json"; - - const df = await read(jUrl); - const num_of_columns = df.column_names.length; - assert.equal(num_of_columns, 6); - }); - - it("read a specific data from Dataset package", async function () { - const jUrl = - "https://raw.githubusercontent.com/frictionlessdata/frictionless-js/master/test/fixtures/co2-ppm/datapackage.json"; - - const df = await read(jUrl, { data_num: 2 }); - const num_of_columns = df.column_names.length; - assert.equal(num_of_columns, 3); - }); -}); diff --git a/danfojs-node/tests/preprocessing/encodings.js b/danfojs-node/tests/preprocessing/encodings.js deleted file mode 100644 index 2f8df208..00000000 --- a/danfojs-node/tests/preprocessing/encodings.js +++ /dev/null @@ -1,97 +0,0 @@ -import { assert } from "chai"; -import { LabelEncoder, OneHotEncoder } from "../../src/preprocessing/encodings"; -import { Series } from "../../src/core/series"; - -describe("Encodings", function () { - - describe("LabelEncoder", function () { - - it("test the label encoding on array", function () { - let data = [ "dog", "cat", "man", "dog", "cat", "man", "man", "cat" ]; - let encode = new LabelEncoder(); - let fit_data = [ - 0, 1, 2, 0, - 1, 2, 2, 1 - ]; - assert.deepEqual(encode.fit(data).values, fit_data); - assert.deepEqual(encode.transform([ "dog", "man" ]).values, [ 0, 2 ]); - }); - it("test the label encoding on Series", function () { - let data = [ "dog", "cat", "man", "dog", "cat", "man", "man", "cat" ]; - let series = new Series(data); - let encode = new LabelEncoder(); - let fit_data = [ - 0, 1, 2, 0, - 1, 2, 2, 1 - ]; - assert.deepEqual(encode.fit(series).values, fit_data); - assert.deepEqual(encode.transform([ "dog", "man" ]).values, [ 0, 2 ]); - }); - it("label encoding directly from a Series", function () { - let data = new Series([ "dog", "cat", "man", "dog", "cat", "man", "man", "cat" ]); - let to_label_encode = new Series([ "dog", "man" ]); - let encode = new LabelEncoder(); - let fit_data = [ - 0, 1, 2, 0, - 1, 2, 2, 1 - ]; - assert.deepEqual(encode.fit(data).values, fit_data); - assert.deepEqual(encode.transform(to_label_encode).values, [ 0, 2 ]); - }); - // it("Label encoding on Series", function () { - // let data = ["dog", "cat", "man", "dog", "cat", "man", "man", "cat"] - // let series = new Series(data) - // let encode = new LabelEncoder() - // let fit_data = [ - // 0, 1, 2, 0, - // 1, 2, 2, 1 - // ] - // assert.deepEqual(encode.fit(series).values, fit_data) - // assert.deepEqual(encode.transform(["dog", "man"]).values, [0, 2]) - // }); - - }); - - describe("OneHotEncoder", function () { - - it("test onehotencoding on array", function () { - let data = [ "dog", "cat", "man", "dog", "cat", "man", "man", "cat" ]; - let encode = new OneHotEncoder(); - let fit_data = [ - [ 1, 0, 0 ], - [ 0, 1, 0 ], - [ 0, 0, 1 ], - [ 1, 0, 0 ], - [ 0, 1, 0 ], - [ 0, 0, 1 ], - [ 0, 0, 1 ], - [ 0, 1, 0 ] - ]; - let transform_data = [ [ 0, 0, 1 ], [ 0, 1, 0 ] ]; - - assert.deepEqual(encode.fit(data).values, fit_data); - assert.deepEqual(encode.transform([ "man", "cat" ]).values, transform_data); - }); - it("test onehotencoding on Series", function () { - let data = [ "dog", "cat", "man", "dog", "cat", "man", "man", "cat" ]; - let series = new Series(data); - let encode = new OneHotEncoder(); - let fit_data = [ - [ 1, 0, 0 ], - [ 0, 1, 0 ], - [ 0, 0, 1 ], - [ 1, 0, 0 ], - [ 0, 1, 0 ], - [ 0, 0, 1 ], - [ 0, 0, 1 ], - [ 0, 1, 0 ] - ]; - let transform_data = [ [ 0, 0, 1 ], [ 0, 1, 0 ] ]; - - assert.deepEqual(encode.fit(series).values, fit_data); - assert.deepEqual(encode.transform(new Series([ "man", "cat" ])).values, transform_data); - }); - }); - - -}); diff --git a/danfojs-node/tests/preprocessing/scaler.js b/danfojs-node/tests/preprocessing/scaler.js deleted file mode 100644 index 0d5b7167..00000000 --- a/danfojs-node/tests/preprocessing/scaler.js +++ /dev/null @@ -1,60 +0,0 @@ -import { assert } from "chai"; -import { MinMaxScaler, StandardScaler } from "../../src/preprocessing/scalers"; -import { DataFrame } from '../../src/core/frame'; -import { Series } from '../../src/core/series'; - - -describe("Preprocessing", function(){ - - describe("MinMaxscaler", function(){ - - it("Standardize values in a DataFrame", function(){ - let data = [ [ -1, 2 ], [ -0.5, 6 ], [ 0, 10 ], [ 1, 18 ] ]; - let scaler = new MinMaxScaler(); - let fit_data = [ [ 0, 0 ], [ 0.25, 0.25 ], [ 0.5, 0.5 ], [ 1, 1 ] ]; - let transform_data = [ [ 1.5, 0. ] ]; - scaler.fit(new DataFrame(data)); - assert.deepEqual(scaler.transform(new DataFrame(data)).values, fit_data); - assert.deepEqual(scaler.transform([ [ 2, 2 ] ]).values, transform_data); - }); - it("Standardize values in a Series", function(){ - let data = [ -1, 2, -0.5, 60, 101, 18 ]; - let scaler = new MinMaxScaler(); - let result = [ 0, 0.029411764815449715, 0.0049019609577953815, 0.5980392098426819, 1, 0.18627451360225677 ]; - let transform_data = [ 0.029411764815449715, 0.029411764815449715 ]; - scaler.fit(new Series(data)); - assert.deepEqual(scaler.transform(new Series(data)).values, result); - assert.deepEqual(scaler.transform([ 2, 2 ]).values, transform_data); - }); - }); - - describe("StandardScaler", function(){ - - it("basic test", function(){ - let data = [ [ 0, 0 ], [ 0, 0 ], [ 1, 1 ], [ 1, 1 ] ]; - - let scaler = new StandardScaler(); - let fit_data = [ [ -1, -1 ], [ -1, -1 ], [ 1, 1 ], [ 1, 1 ] ]; - let transform_data = [ [ 3, 3 ] ]; - - assert.deepEqual(scaler.fit(new DataFrame(data)).round().values, fit_data); - assert.deepEqual(scaler.transform([ [ 2, 2 ] ]).round().values, transform_data); - }); - }); - - - // describe("RobustScaler", function(){ - // it("basic test", function(){ - - // let data = [[3,1], [7,3], [8,4], [5,6], [12,5], [14,12], [21,23], [15,15], [18,2], [14,15]] - // // let data2 = [[4,100,900],[5,110,800],[21,220,890],[20,300,500]] - // let data2 = [0, 4, 4, 4, 7, 10, 11, 12, 14, 16, 17, 25] - - - // let scaler = new RobustScaler() - - // // console.log(scaler.quantile(data2,true)) - - // }); - // }); -}); diff --git a/danfojs-node/tests/samples/SampleData.xlsx b/danfojs-node/tests/samples/SampleData.xlsx deleted file mode 100644 index 67a11847..00000000 Binary files a/danfojs-node/tests/samples/SampleData.xlsx and /dev/null differ diff --git a/danfojs-node/tests/samples/book.json b/danfojs-node/tests/samples/book.json deleted file mode 100644 index 39974173..00000000 --- a/danfojs-node/tests/samples/book.json +++ /dev/null @@ -1 +0,0 @@ -[{"book_id":1,"title":"Harry Potter and the Half-Blood Prince (Harry Potter, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1361039191m\/1.jpg","authors":"J.K. Rowling, Mary GrandPr\u00e9"},{"book_id":2,"title":"Harry Potter and the Order of the Phoenix (Harry Potter, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1387141547m\/2.jpg","authors":"J.K. Rowling, Mary GrandPr\u00e9"},{"book_id":3,"title":"Harry Potter and the Sorcerer's Stone (Harry Potter, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1474154022m\/3.jpg","authors":"J.K. Rowling, Mary GrandPr\u00e9"},{"book_id":5,"title":"Harry Potter and the Prisoner of Azkaban (Harry Potter, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1499277281m\/5.jpg","authors":"J.K. Rowling, Mary GrandPr\u00e9, Rufus Beck"},{"book_id":6,"title":"Harry Potter and the Goblet of Fire (Harry Potter, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1361482611m\/6.jpg","authors":"J.K. Rowling, Mary GrandPr\u00e9"},{"book_id":8,"title":"Harry Potter Boxed Set, Books 1-5 (Harry Potter, #1-5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"J.K. Rowling, Mary GrandPr\u00e9"},{"book_id":10,"title":"Harry Potter Collection (Harry Potter, #1-6)","image_url":"https:\/\/images.gr-assets.com\/books\/1328867351m\/10.jpg","authors":"J.K. Rowling"},{"book_id":11,"title":"The Hitchhiker's Guide to the Galaxy (Hitchhiker's Guide to the Galaxy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327656754m\/11.jpg","authors":"Douglas Adams"},{"book_id":13,"title":"The Ultimate Hitchhiker's Guide to the Galaxy","image_url":"https:\/\/images.gr-assets.com\/books\/1404613595m\/13.jpg","authors":"Douglas Adams"},{"book_id":21,"title":"A Short History of Nearly Everything","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bill Bryson"},{"book_id":24,"title":"In a Sunburned Country","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bill Bryson"},{"book_id":25,"title":"I'm a Stranger Here Myself: Notes on Returning to America after Twenty Years Away","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bill Bryson"},{"book_id":26,"title":"The Lost Continent: Travels in Small Town America","image_url":"https:\/\/images.gr-assets.com\/books\/1404042682m\/26.jpg","authors":"Bill Bryson"},{"book_id":27,"title":"Neither Here nor There: Travels in Europe","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bill Bryson"},{"book_id":28,"title":"Notes from a Small Island","image_url":"https:\/\/images.gr-assets.com\/books\/1479653223m\/28.jpg","authors":"Bill Bryson"},{"book_id":29,"title":"The Mother Tongue: English and How It Got That Way","image_url":"https:\/\/images.gr-assets.com\/books\/1388209925m\/29.jpg","authors":"Bill Bryson"},{"book_id":30,"title":"J.R.R. Tolkien 4-Book Boxed Set: The Hobbit and The Lord of the Rings","image_url":"https:\/\/images.gr-assets.com\/books\/1346072396m\/30.jpg","authors":"J.R.R. Tolkien"},{"book_id":33,"title":"The Lord of the Rings (The Lord of the Rings, #1-3)","image_url":"https:\/\/images.gr-assets.com\/books\/1411114164m\/33.jpg","authors":"J.R.R. Tolkien"},{"book_id":34,"title":"The Fellowship of the Ring (The Lord of the Rings, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1298411339m\/34.jpg","authors":"J.R.R. Tolkien"},{"book_id":36,"title":"The Lord of the Rings: Weapons and Warfare","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Chris Smith, Christopher Lee, Richard Taylor"},{"book_id":50,"title":"Hatchet (Brian's Saga, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Gary Paulsen"},{"book_id":67,"title":"The Known World","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Edward P. Jones"},{"book_id":93,"title":"Heidi","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Johanna Spyri, Angelo Rinaldi, Beverly Cleary"},{"book_id":98,"title":"What to Expect the First Year (What to Expect)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Heidi Murkoff, Sharon Mazel, Heidi Murkoff, Arlene Eisenberg, Sandee Hathaway, Mark D. Widome"},{"book_id":105,"title":"Chapterhouse: Dune (Dune Chronicles #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1260954505m\/105.jpg","authors":"Frank Herbert"},{"book_id":106,"title":"Dune Messiah (Dune Chronicles #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1392528394m\/106.jpg","authors":"Frank Herbert"},{"book_id":112,"title":"Children of Dune (Dune Chronicles #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Frank Herbert"},{"book_id":117,"title":"Heretics of Dune (Dune Chronicles #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Frank Herbert"},{"book_id":119,"title":"The Lord of the Rings: The Art of The Fellowship of the Ring","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Gary Russell"},{"book_id":122,"title":"The Power of One (The Power of One, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bryce Courtenay"},{"book_id":231,"title":"I am Charlotte Simmons","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tom Wolfe"},{"book_id":249,"title":"Tropic of Cancer","image_url":"https:\/\/images.gr-assets.com\/books\/1408753140m\/249.jpg","authors":"Henry Miller"},{"book_id":250,"title":"Tropic of Capricorn","image_url":"https:\/\/images.gr-assets.com\/books\/1417652073m\/250.jpg","authors":"Henry Miller"},{"book_id":264,"title":"The Portrait of a Lady","image_url":"https:\/\/images.gr-assets.com\/books\/1502148606m\/264.jpg","authors":"Henry James, Patricia Crick"},{"book_id":275,"title":"The Lover","image_url":"https:\/\/images.gr-assets.com\/books\/1423329337m\/275.jpg","authors":"Marguerite Duras, Barbara Bray, Maxine Hong Kingston"},{"book_id":291,"title":"The Broken Wings","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kahlil Gibran, Anthony R. Ferris"},{"book_id":295,"title":"Treasure Island","image_url":"https:\/\/images.gr-assets.com\/books\/1485248909m\/295.jpg","authors":"Robert Louis Stevenson"},{"book_id":304,"title":"Daniel Deronda","image_url":"https:\/\/images.gr-assets.com\/books\/1320432000m\/304.jpg","authors":"George Eliot, Edmund White"},{"book_id":320,"title":"One Hundred Years of Solitude","image_url":"https:\/\/images.gr-assets.com\/books\/1327881361m\/320.jpg","authors":"Gabriel Garc\u00eda M\u00e1rquez, Gregory Rabassa"},{"book_id":343,"title":"Perfume: The Story of a Murderer","image_url":"https:\/\/images.gr-assets.com\/books\/1409112276m\/343.jpg","authors":"Patrick S\u00fcskind, John E. Woods"},{"book_id":348,"title":"The Door Into Summer","image_url":"https:\/\/images.gr-assets.com\/books\/1342241886m\/348.jpg","authors":"Robert A. Heinlein"},{"book_id":350,"title":"Stranger in a Strange Land","image_url":"https:\/\/images.gr-assets.com\/books\/1156897088m\/350.jpg","authors":"Robert A. Heinlein"},{"book_id":353,"title":"Time Enough for Love","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert A. Heinlein"},{"book_id":355,"title":"Job: A Comedy of Justice","image_url":"https:\/\/images.gr-assets.com\/books\/1438043968m\/355.jpg","authors":"Robert A. Heinlein"},{"book_id":357,"title":"The Long Dark Tea-Time of the Soul (Dirk Gently, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1388257271m\/357.jpg","authors":"Douglas Adams"},{"book_id":359,"title":"The Salmon of Doubt (Dirk Gently, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Douglas Adams"},{"book_id":360,"title":"Mostly Harmless (Hitchhiker's Guide to the Galaxy, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1320725132m\/360.jpg","authors":"Douglas Adams"},{"book_id":365,"title":"Dirk Gently's Holistic Detective Agency (Dirk Gently #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1404697381m\/365.jpg","authors":"Douglas Adams"},{"book_id":378,"title":"The Phantom Tollbooth","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Norton Juster, Jules Feiffer"},{"book_id":386,"title":"Another Bullshit Night in Suck City","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nick Flynn"},{"book_id":400,"title":"Libra","image_url":"https:\/\/images.gr-assets.com\/books\/1327935630m\/400.jpg","authors":"Don DeLillo"},{"book_id":415,"title":"Gravity's Rainbow","image_url":"https:\/\/images.gr-assets.com\/books\/1414969925m\/415.jpg","authors":"Thomas Pynchon"},{"book_id":424,"title":"Slouching Towards Bethlehem","image_url":"https:\/\/images.gr-assets.com\/books\/1327952074m\/424.jpg","authors":"Joan Didion"},{"book_id":428,"title":"Play It as It Lays","image_url":"https:\/\/images.gr-assets.com\/books\/1327935636m\/428.jpg","authors":"Joan Didion, David Thomson"},{"book_id":431,"title":"The New York Trilogy","image_url":"https:\/\/images.gr-assets.com\/books\/1386924429m\/431.jpg","authors":"Paul Auster, Art Spiegelman"},{"book_id":432,"title":"City of Glass (The New York Trilogy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1309986722m\/432.jpg","authors":"Paul Auster"},{"book_id":446,"title":"The Brooklyn Follies","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Paul Auster"},{"book_id":447,"title":"Moon Palace","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Paul Auster"},{"book_id":449,"title":"Timbuktu","image_url":"https:\/\/images.gr-assets.com\/books\/1355142497m\/449.jpg","authors":"Paul Auster"},{"book_id":456,"title":"Leviathan","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Paul Auster"},{"book_id":475,"title":"Collapse: How Societies Choose to Fail or Succeed","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jared Diamond"},{"book_id":597,"title":"Killing Yourself to Live: 85% of a True Story","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Chuck Klosterman"},{"book_id":599,"title":"Sex, Drugs, and Cocoa Puffs: A Low Culture Manifesto","image_url":"https:\/\/images.gr-assets.com\/books\/1380742001m\/599.jpg","authors":"Chuck Klosterman"},{"book_id":621,"title":"The Automatic Millionaire: A Powerful One-Step Plan to Live and Finish Rich","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Bach"},{"book_id":629,"title":"Zen and the Art of Motorcycle Maintenance: An Inquiry Into Values","image_url":"https:\/\/images.gr-assets.com\/books\/1410136019m\/629.jpg","authors":"Robert M. Pirsig"},{"book_id":647,"title":"No Logo","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Naomi Klein"},{"book_id":656,"title":"War and Peace","image_url":"https:\/\/images.gr-assets.com\/books\/1413215930m\/656.jpg","authors":"Leo Tolstoy, Henry Gifford, Aylmer Maude, Louise Maude"},{"book_id":662,"title":"Atlas Shrugged","image_url":"https:\/\/images.gr-assets.com\/books\/1405868167m\/662.jpg","authors":"Ayn Rand, Leonard Peikoff"},{"book_id":665,"title":"The Virtue of Selfishness: A New Concept of Egoism","image_url":"https:\/\/images.gr-assets.com\/books\/1425001997m\/665.jpg","authors":"Ayn Rand, Nathaniel Branden"},{"book_id":667,"title":"Anthem","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ayn Rand"},{"book_id":668,"title":"We the Living","image_url":"https:\/\/images.gr-assets.com\/books\/1306188481m\/668.jpg","authors":"Ayn Rand, Leonard Peikoff"},{"book_id":676,"title":"Sailing Alone Around the Room: New and Selected Poems","image_url":"https:\/\/images.gr-assets.com\/books\/1403183272m\/676.jpg","authors":"Billy Collins"},{"book_id":698,"title":"Digging to America","image_url":"https:\/\/images.gr-assets.com\/books\/1327901292m\/698.jpg","authors":"Anne Tyler"},{"book_id":703,"title":"The Plot Against America","image_url":"https:\/\/images.gr-assets.com\/books\/1327711853m\/703.jpg","authors":"Philip Roth"},{"book_id":706,"title":"America (The Book): A Citizen's Guide to Democracy Inaction","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jon Stewart, Ben Karlin, David Javerbaum, Rich Bloomquist, Steve Bodow, Tim Carvell, Eric Drysdale, J.R. Havlan, Scott Jacobson, Tom Johnson, Rob Kutner, Chris Regan, Jason Reich, Jason Ross, Stephen Colbert, Samantha Bee, Rob Corddry, Brendan Hay, Ed Helms"},{"book_id":760,"title":"Memories of My Melancholy Whores","image_url":"https:\/\/images.gr-assets.com\/books\/1327484658m\/760.jpg","authors":"Gabriel Garc\u00eda M\u00e1rquez, Edith Grossman"},{"book_id":771,"title":"The Elegant Universe: Superstrings, Hidden Dimensions, and the Quest for the Ultimate Theory","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Brian Greene"},{"book_id":816,"title":"Cryptonomicon","image_url":"https:\/\/images.gr-assets.com\/books\/1327931476m\/816.jpg","authors":"Neal Stephenson"},{"book_id":822,"title":"The Confusion (The Baroque Cycle, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1407706997m\/822.jpg","authors":"Neal Stephenson"},{"book_id":823,"title":"Quicksilver (The Baroque Cycle, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1377095669m\/823.jpg","authors":"Neal Stephenson"},{"book_id":825,"title":"Zodiac","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Neal Stephenson"},{"book_id":827,"title":"The Diamond Age: or, A Young Lady's Illustrated Primer","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Neal Stephenson"},{"book_id":830,"title":"Snow Crash","image_url":"https:\/\/images.gr-assets.com\/books\/1477624625m\/830.jpg","authors":"Neal Stephenson"},{"book_id":840,"title":"The Design of Everyday Things","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Donald A. Norman"},{"book_id":865,"title":"The Alchemist","image_url":"https:\/\/images.gr-assets.com\/books\/1483412266m\/865.jpg","authors":"Paulo Coelho, Alan R. Clarke"},{"book_id":870,"title":"Fullmetal Alchemist, Vol. 1 (Fullmetal Alchemist, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Hiromu Arakawa, Akira Watanabe"},{"book_id":880,"title":"Pompeii","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert Harris"},{"book_id":890,"title":"Of Mice and Men","image_url":"https:\/\/images.gr-assets.com\/books\/1437235233m\/890.jpg","authors":"John Steinbeck"},{"book_id":900,"title":"The Game: Penetrating the Secret Society of Pickup Artists","image_url":"https:\/\/images.gr-assets.com\/books\/1410129471m\/900.jpg","authors":"Neil Strauss"},{"book_id":902,"title":"The Westing Game","image_url":"https:\/\/images.gr-assets.com\/books\/1356850909m\/902.jpg","authors":"Ellen Raskin"},{"book_id":903,"title":"The Egypt Game (Game, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Zilpha Keatley Snyder"},{"book_id":930,"title":"Memoirs of a Geisha","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Arthur Golden"},{"book_id":952,"title":"The Five Love Languages of Children","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Gary Chapman, D. Ross Campbell"},{"book_id":960,"title":"Angels & Demons (Robert Langdon, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1303390735m\/960.jpg","authors":"Dan Brown"},{"book_id":968,"title":"The Da Vinci Code (Robert Langdon, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1303252999m\/968.jpg","authors":"Dan Brown"},{"book_id":976,"title":"Deception Point","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dan Brown"},{"book_id":998,"title":"The Millionaire Next Door: The Surprising Secrets of Americas Wealthy","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Thomas J. Stanley, William D. Danko"},{"book_id":1005,"title":"Think and Grow Rich: The Landmark Bestseller - Now Revised and Updated for the 21st Century","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Napoleon Hill"},{"book_id":1032,"title":"Trump: The Art of the Deal","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Donald J. Trump, Tony Schwartz"},{"book_id":1052,"title":"The Richest Man in Babylon","image_url":"https:\/\/images.gr-assets.com\/books\/1348336780m\/1052.jpg","authors":"George S. Clason"},{"book_id":1067,"title":"1776","image_url":"https:\/\/images.gr-assets.com\/books\/1306787560m\/1067.jpg","authors":"David McCullough"},{"book_id":1078,"title":"The Good Earth (House of Earth, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1312497600m\/1078.jpg","authors":"Pearl S. Buck"},{"book_id":1097,"title":"Fast Food Nation: The Dark Side of the All-American Meal","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Eric Schlosser"},{"book_id":1103,"title":"Snow Flower and the Secret Fan","image_url":"https:\/\/images.gr-assets.com\/books\/1327880508m\/1103.jpg","authors":"Lisa See"},{"book_id":1110,"title":"The Broker","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Grisham"},{"book_id":1171,"title":"Liar's Poker","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael Lewis"},{"book_id":1191,"title":"Giada's Family Dinners","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Giada De Laurentiis, Victoria Pearson"},{"book_id":1192,"title":"Everyday Italian: 125 Simple and Delicious Recipes","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Giada De Laurentiis"},{"book_id":1202,"title":"Freakonomics: A Rogue Economist Explores the Hidden Side of Everything (Freakonomics, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327909092m\/1202.jpg","authors":"Steven D. Levitt, Stephen J. Dubner"},{"book_id":1232,"title":"The Shadow of the Wind (The Cemetery of Forgotten Books, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1344545047m\/1232.jpg","authors":"Carlos Ruiz Zaf\u00f3n, Lucia Graves"},{"book_id":1241,"title":"A Million Little Pieces","image_url":"https:\/\/images.gr-assets.com\/books\/1483206985m\/1241.jpg","authors":"James Frey"},{"book_id":1274,"title":"Men Are from Mars, Women Are from Venus","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Gray"},{"book_id":1295,"title":"The Clan of the Cave Bear (Earth's Children, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1385331302m\/1295.jpg","authors":"Jean M. Auel"},{"book_id":1301,"title":"Moneyball: The Art of Winning an Unfair Game","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael Lewis"},{"book_id":1303,"title":"The 48 Laws of Power","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert Greene, Joost Elffers"},{"book_id":1305,"title":"Gates of Fire: An Epic Novel of the Battle of Thermopylae","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Steven Pressfield"},{"book_id":1307,"title":"Fire Sea (The Death Gate Cycle, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1325422748m\/1307.jpg","authors":"Margaret Weis, Tracy Hickman"},{"book_id":1319,"title":"The War of Art: Break Through the Blocks & Win Your Inner Creative Battles","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Steven Pressfield, Robert McKee"},{"book_id":1362,"title":"The Histories","image_url":"https:\/\/images.gr-assets.com\/books\/1399225547m\/1362.jpg","authors":"Herodotus, Aubrey de S\u00e9lincourt, John M. Marincola"},{"book_id":1371,"title":"The Iliad","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Homer, Robert Fagles, Fr\u00e9d\u00e9ric Mugler, Bernard Knox"},{"book_id":1375,"title":"The Iliad\/The Odyssey","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Homer, Robert Fagles, Bernard Knox"},{"book_id":1381,"title":"The Odyssey","image_url":"https:\/\/images.gr-assets.com\/books\/1390173285m\/1381.jpg","authors":"Homer, Robert Fagles, E.V. Rieu, Fr\u00e9d\u00e9ric Mugler, Bernard Knox"},{"book_id":1420,"title":"Hamlet","image_url":"https:\/\/images.gr-assets.com\/books\/1351051208m\/1420.jpg","authors":"William Shakespeare, Richard Andrews, Rex Gibson"},{"book_id":1426,"title":"Warrior of the Light","image_url":"https:\/\/images.gr-assets.com\/books\/1359135200m\/1426.jpg","authors":"Paulo Coelho"},{"book_id":1427,"title":"The Zahir","image_url":"https:\/\/images.gr-assets.com\/books\/1493044059m\/1427.jpg","authors":"Paulo Coelho, Margaret Jull Costa"},{"book_id":1428,"title":"By the River Piedra I Sat Down and Wept","image_url":"https:\/\/images.gr-assets.com\/books\/1466877798m\/1428.jpg","authors":"Paulo Coelho, Alan R. Clarke"},{"book_id":1430,"title":"Eleven Minutes","image_url":"https:\/\/images.gr-assets.com\/books\/1358266987m\/1430.jpg","authors":"Paulo Coelho, Margaret Jull Costa"},{"book_id":1431,"title":"Veronika Decides to Die","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Paulo Coelho, Margaret Jull Costa"},{"book_id":1519,"title":"The Oresteia (\u039f\u03c1\u03ad\u03c3\u03c4\u03b5\u03b9\u03b1, #1-3)","image_url":"https:\/\/images.gr-assets.com\/books\/1391822282m\/1519.jpg","authors":"Aeschylus, Robert Fagles, William Bedell Stanford"},{"book_id":1524,"title":"Agamemnon (Oresteia, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Aeschylus, Judith Affleck, Philip de May, Patricia E. Easterling, John Harrison"},{"book_id":1540,"title":"The Oedipus Cycle: Oedipus Rex\/Oedipus at Colonus\/Antigone (The Theban Plays, #1\u20133)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sophocles, Dudley Fitts, Elena Bono, Robert Fitzgerald"},{"book_id":1554,"title":"Oedipus Rex (The Theban Plays, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sophocles, J.E. Thomas"},{"book_id":1591,"title":"Lysistrata","image_url":"https:\/\/images.gr-assets.com\/books\/1335892524m\/1591.jpg","authors":"Aristophanes, Sarah Ruden"},{"book_id":1617,"title":"Night (The Night Trilogy #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1473495285m\/1617.jpg","authors":"Elie Wiesel, Marion Wiesel"},{"book_id":1618,"title":"The Curious Incident of the Dog in the Night-Time","image_url":"https:\/\/images.gr-assets.com\/books\/1479863624m\/1618.jpg","authors":"Mark Haddon"},{"book_id":1622,"title":"A Midsummer Night's Dream","image_url":"https:\/\/images.gr-assets.com\/books\/1327874534m\/1622.jpg","authors":"William Shakespeare, Barbara A. Mowat, Paul Werstine, Catherine Belsey"},{"book_id":1624,"title":"West with the Night","image_url":"https:\/\/images.gr-assets.com\/books\/1368204688m\/1624.jpg","authors":"Beryl Markham"},{"book_id":1625,"title":"Twelfth Night","image_url":"https:\/\/images.gr-assets.com\/books\/1416628008m\/1625.jpg","authors":"William Shakespeare"},{"book_id":1627,"title":"Brokeback Mountain","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Annie Proulx"},{"book_id":1633,"title":"Getting Things Done: The Art of Stress-Free Productivity","image_url":"https:\/\/images.gr-assets.com\/books\/1312474060m\/1633.jpg","authors":"David Allen"},{"book_id":1635,"title":"Execution: The Discipline of Getting Things Done","image_url":"https:\/\/images.gr-assets.com\/books\/1350857284m\/1635.jpg","authors":"Larry Bossidy, Ram Charan, Charles Burck"},{"book_id":1715,"title":"Metamorphoses","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ovid, David Raeburn, Denis Feeney"},{"book_id":1823,"title":"Them: Adventures with Extremists","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jon Ronson"},{"book_id":1824,"title":"The Men Who Stare at Goats","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jon Ronson"},{"book_id":1842,"title":"Guns, Germs, and Steel: The Fates of Human Societies","image_url":"https:\/\/images.gr-assets.com\/books\/1453215833m\/1842.jpg","authors":"Jared Diamond"},{"book_id":1845,"title":"Into the Wild","image_url":"https:\/\/images.gr-assets.com\/books\/1403173986m\/1845.jpg","authors":"Jon Krakauer"},{"book_id":1846,"title":"Wild at Heart: Discovering the Secret of a Man's Soul","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Eldredge"},{"book_id":1848,"title":"Wild Swans: Three Daughters of China","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jung Chang"},{"book_id":1849,"title":"Wild Fire (John Corey, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nelson DeMille"},{"book_id":1852,"title":"The Call of the Wild","image_url":"https:\/\/images.gr-assets.com\/books\/1452291694m\/1852.jpg","authors":"Jack London"},{"book_id":1869,"title":"Nickel and Dimed: On (Not) Getting By in America","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Barbara Ehrenreich"},{"book_id":1875,"title":"The History of Sexuality, Volume 1: An Introduction","image_url":"https:\/\/images.gr-assets.com\/books\/1486236798m\/1875.jpg","authors":"Michel Foucault, Robert Hurley"},{"book_id":1885,"title":"Pride and Prejudice","image_url":"https:\/\/images.gr-assets.com\/books\/1320399351m\/1885.jpg","authors":"Jane Austen"},{"book_id":1897,"title":"Eiger Dreams: Ventures Among Men and Mountains","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jon Krakauer"},{"book_id":1898,"title":"Into Thin Air: A Personal Account of the Mount Everest Disaster","image_url":"https:\/\/images.gr-assets.com\/books\/1463384482m\/1898.jpg","authors":"Jon Krakauer"},{"book_id":1911,"title":"The World Is Flat: A Brief History of the Twenty-first Century","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Thomas L. Friedman"},{"book_id":1934,"title":"Little Women (Little Women, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Louisa May Alcott"},{"book_id":1953,"title":"A Tale of Two Cities","image_url":"https:\/\/images.gr-assets.com\/books\/1344922523m\/1953.jpg","authors":"Charles Dickens, Richard Maxwell, Hablot Knight Browne"},{"book_id":1990,"title":"Martin Chuzzlewit","image_url":"https:\/\/images.gr-assets.com\/books\/1334392783m\/1990.jpg","authors":"Charles Dickens, Patricia Ingham, Hablot Knight Browne"},{"book_id":2002,"title":"Harry Potter Schoolbooks Box Set: Two Classic Books from the Library of Hogwarts School of Witchcraft and Wizardry","image_url":"https:\/\/images.gr-assets.com\/books\/1479775271m\/2002.jpg","authors":"J.K. Rowling"},{"book_id":2049,"title":"The High Window (Philip Marlowe, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1466754245m\/2049.jpg","authors":"Raymond Chandler"},{"book_id":2050,"title":"Farewell, My Lovely (Philip Marlowe, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1465778099m\/2050.jpg","authors":"Raymond Chandler"},{"book_id":2052,"title":"The Big Sleep (Philip Marlowe, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1371584712m\/2052.jpg","authors":"Raymond Chandler"},{"book_id":2054,"title":"The Long Goodbye (Philip Marlowe, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1388225584m\/2054.jpg","authors":"Raymond Chandler"},{"book_id":2067,"title":"Breaking the Spell: Religion as a Natural Phenomenon","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Daniel C. Dennett"},{"book_id":2068,"title":"Darwin's Dangerous Idea: Evolution and the Meanings of Life","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Daniel C. Dennett"},{"book_id":2094,"title":"A Briefer History of Time","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Stephen Hawking, Leonard Mlodinow"},{"book_id":2095,"title":"The Universe in a Nutshell","image_url":"https:\/\/images.gr-assets.com\/books\/1159814395m\/2095.jpg","authors":"Stephen Hawking"},{"book_id":2122,"title":"The Fountainhead","image_url":"https:\/\/images.gr-assets.com\/books\/1491163636m\/2122.jpg","authors":"Ayn Rand, Leonard Peikoff"},{"book_id":2137,"title":"A Home at the End of the World","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael Cunningham"},{"book_id":2142,"title":"Blink","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ted Dekker"},{"book_id":2152,"title":"The Jane Austen Book Club","image_url":"https:\/\/images.gr-assets.com\/books\/1309282966m\/2152.jpg","authors":"Karen Joy Fowler"},{"book_id":2156,"title":"Persuasion","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jane Austen, James Kinsley, Deidre Shauna Lynch"},{"book_id":2159,"title":"Confessions of an Economic Hit Man","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Perkins"},{"book_id":2165,"title":"The Old Man and the Sea","image_url":"https:\/\/images.gr-assets.com\/books\/1329189714m\/2165.jpg","authors":"Ernest Hemingway"},{"book_id":2175,"title":"Madame Bovary","image_url":"https:\/\/images.gr-assets.com\/books\/1335676143m\/2175.jpg","authors":"Gustave Flaubert, Margaret Mauldon, Malcolm Bowie, Mark Overstall"},{"book_id":2183,"title":"Sentimental Education","image_url":"https:\/\/images.gr-assets.com\/books\/1327788473m\/2183.jpg","authors":"Gustave Flaubert, Robert Baldick, Geoffrey Wall"},{"book_id":2187,"title":"Middlesex","image_url":"https:\/\/images.gr-assets.com\/books\/1437029776m\/2187.jpg","authors":"Jeffrey Eugenides"},{"book_id":2199,"title":"Team of Rivals: The Political Genius of Abraham Lincoln","image_url":"https:\/\/images.gr-assets.com\/books\/1347278868m\/2199.jpg","authors":"Doris Kearns Goodwin, Suzanne Toren"},{"book_id":2203,"title":"John Adams","image_url":"https:\/\/images.gr-assets.com\/books\/1478144278m\/2203.jpg","authors":"David McCullough"},{"book_id":2255,"title":"Way of the Peaceful Warrior: A Book That Changes Lives","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dan Millman"},{"book_id":2265,"title":"It's Not About the Bike: My Journey Back to Life","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lance Armstrong, Sally Jenkins"},{"book_id":2279,"title":"Truman","image_url":"https:\/\/images.gr-assets.com\/books\/1364681969m\/2279.jpg","authors":"David McCullough"},{"book_id":2368,"title":"Mornings on Horseback","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David McCullough"},{"book_id":2371,"title":"The Johnstown Flood","image_url":"https:\/\/images.gr-assets.com\/books\/1313667349m\/2371.jpg","authors":"David McCullough"},{"book_id":2372,"title":"The Path Between the Seas: The Creation of the Panama Canal, 1870-1914","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David McCullough"},{"book_id":2373,"title":"The Bone Collector (Lincoln Rhyme, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jeffery Deaver"},{"book_id":2430,"title":"The List","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Steve Martini"},{"book_id":2442,"title":"Witches Abroad (Discworld, #12; Witches #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1403326937m\/2442.jpg","authors":"Terry Pratchett"},{"book_id":2493,"title":"The Time Machine","image_url":"https:\/\/images.gr-assets.com\/books\/1327942880m\/2493.jpg","authors":"H.G. Wells, Greg Bear, Carlo Pagetti"},{"book_id":2517,"title":"My Name is Red","image_url":"https:\/\/images.gr-assets.com\/books\/1374015288m\/2517.jpg","authors":"Orhan Pamuk, Erda\u011f M. G\u00f6knar"},{"book_id":2526,"title":"Blindness","image_url":"https:\/\/images.gr-assets.com\/books\/1327866409m\/2526.jpg","authors":"Jos\u00e9 Saramago, Giovanni Pontiero"},{"book_id":2528,"title":"All the Names","image_url":"https:\/\/images.gr-assets.com\/books\/1327955213m\/2528.jpg","authors":"Jos\u00e9 Saramago, Margaret Jull Costa"},{"book_id":2530,"title":"Baltasar and Blimunda","image_url":"https:\/\/images.gr-assets.com\/books\/1483229660m\/2530.jpg","authors":"Jos\u00e9 Saramago, Giovanni Pontiero"},{"book_id":2547,"title":"The Prophet","image_url":"https:\/\/images.gr-assets.com\/books\/1355046521m\/2547.jpg","authors":"Kahlil Gibran"},{"book_id":2612,"title":"The Tipping Point: How Little Things Can Make a Big Difference","image_url":"https:\/\/images.gr-assets.com\/books\/1473396980m\/2612.jpg","authors":"Malcolm Gladwell"},{"book_id":2615,"title":"The Innovator's Dilemma: The Revolutionary Book that Will Change the Way You Do Business (Collins Business Essentials)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Clayton M. Christensen"},{"book_id":2623,"title":"Great Expectations","image_url":"https:\/\/images.gr-assets.com\/books\/1327920219m\/2623.jpg","authors":"Charles Dickens"},{"book_id":2657,"title":"To Kill a Mockingbird","image_url":"https:\/\/images.gr-assets.com\/books\/1361975680m\/2657.jpg","authors":"Harper Lee"},{"book_id":2666,"title":"The Bonfire of the Vanities","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tom Wolfe"},{"book_id":2677,"title":"A Modest Proposal and Other Satirical Works","image_url":"https:\/\/images.gr-assets.com\/books\/1264316062m\/2677.jpg","authors":"Jonathan Swift"},{"book_id":2696,"title":"The Canterbury Tales","image_url":"https:\/\/images.gr-assets.com\/books\/1261208589m\/2696.jpg","authors":"Geoffrey Chaucer, Nevill Coghill"},{"book_id":2715,"title":"Salt: A World History","image_url":"https:\/\/images.gr-assets.com\/books\/1414608893m\/2715.jpg","authors":"Mark Kurlansky"},{"book_id":2743,"title":"The Lost Boy (Dave Pelzer #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1282635105m\/2743.jpg","authors":"Dave Pelzer"},{"book_id":2744,"title":"Anansi Boys","image_url":"https:\/\/images.gr-assets.com\/books\/1479778049m\/2744.jpg","authors":"Neil Gaiman"},{"book_id":2748,"title":"Microserfs","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Douglas Coupland"},{"book_id":2767,"title":"A People's History of the United States","image_url":"https:\/\/images.gr-assets.com\/books\/1494279423m\/2767.jpg","authors":"Howard Zinn"},{"book_id":2784,"title":"Ways of Seeing","image_url":"https:\/\/images.gr-assets.com\/books\/1464018308m\/2784.jpg","authors":"John Berger"},{"book_id":2794,"title":"The Crying of Lot 49","image_url":"https:\/\/images.gr-assets.com\/books\/1375727632m\/2794.jpg","authors":"Thomas Pynchon"},{"book_id":2839,"title":"Bridge to Terabithia","image_url":"https:\/\/images.gr-assets.com\/books\/1327880087m\/2839.jpg","authors":"Katherine Paterson"},{"book_id":2865,"title":"Girl with a Pearl Earring","image_url":"https:\/\/images.gr-assets.com\/books\/1327197580m\/2865.jpg","authors":"Tracy Chevalier"},{"book_id":2872,"title":"Falling Angels","image_url":"https:\/\/images.gr-assets.com\/books\/1327995250m\/2872.jpg","authors":"Tracy Chevalier"},{"book_id":2873,"title":"The Virgin Blue","image_url":"https:\/\/images.gr-assets.com\/books\/1395581883m\/2873.jpg","authors":"Tracy Chevalier"},{"book_id":2879,"title":"Bleach, Volume 15","image_url":"https:\/\/images.gr-assets.com\/books\/1417981626m\/2879.jpg","authors":"Tite Kubo"},{"book_id":2880,"title":"Bleach, Volume 01","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tite Kubo"},{"book_id":2915,"title":"The River (Brian's Saga, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Gary Paulsen"},{"book_id":2932,"title":"Robinson Crusoe","image_url":"https:\/\/images.gr-assets.com\/books\/1403180114m\/2932.jpg","authors":"Daniel Defoe, Gerald McCann, Virginia Woolf"},{"book_id":2956,"title":"The Adventures of Huckleberry Finn","image_url":"https:\/\/images.gr-assets.com\/books\/1405973850m\/2956.jpg","authors":"Mark Twain, John Seelye, Guy Cardwell"},{"book_id":2978,"title":"Lost Horizon","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Hilton"},{"book_id":2998,"title":"The Secret Garden","image_url":"https:\/\/images.gr-assets.com\/books\/1327873635m\/2998.jpg","authors":"Frances Hodgson Burnett"},{"book_id":3008,"title":"A Little Princess","image_url":"https:\/\/images.gr-assets.com\/books\/1327868556m\/3008.jpg","authors":"Frances Hodgson Burnett, Nancy Bond"},{"book_id":3028,"title":"Economics in One Lesson: The Shortest & Surest Way to Understand Basic Economics","image_url":"https:\/\/images.gr-assets.com\/books\/1320423284m\/3028.jpg","authors":"Henry Hazlitt"},{"book_id":3049,"title":"Sir Gawain and the Green Knight ","image_url":"https:\/\/images.gr-assets.com\/books\/1309282183m\/3049.jpg","authors":"Unknown, Burton Raffel, Neil D. Isaacs"},{"book_id":3061,"title":"The Natural Way to Draw","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kimon Nicolaides, Mamie Harmon"},{"book_id":3087,"title":"A Room with a View","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"E.M. Forster"},{"book_id":3102,"title":"Howards End","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"E.M. Forster"},{"book_id":3103,"title":"Maurice","image_url":"https:\/\/images.gr-assets.com\/books\/1361934128m\/3103.jpg","authors":"E.M. Forster"},{"book_id":3109,"title":"The Omnivore's Dilemma: A Natural History of Four Meals","image_url":"https:\/\/images.gr-assets.com\/books\/1393804353m\/3109.jpg","authors":"Michael Pollan"},{"book_id":3110,"title":"Assassination Vacation","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sarah Vowell"},{"book_id":3273,"title":"Moloka'i","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Alan Brennert"},{"book_id":3291,"title":"The Stories of Eva Luna","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Isabel Allende"},{"book_id":3300,"title":"In\u00e9s of My Soul","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Isabel Allende, Margaret Sayers Peden"},{"book_id":3304,"title":"City of the Beasts (Eagle and Jaguar, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1331488122m\/3304.jpg","authors":"Isabel Allende, Margaret Sayers Peden"},{"book_id":3368,"title":"Don't Make Me Think: A Common Sense Approach to Web Usability","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Steve Krug"},{"book_id":3378,"title":"Generation X: Tales for an Accelerated Culture","image_url":"https:\/\/images.gr-assets.com\/books\/1485623844m\/3378.jpg","authors":"Douglas Coupland"},{"book_id":3379,"title":"All Families are Psychotic","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Douglas Coupland"},{"book_id":3381,"title":"Hey Nostradamus!","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Douglas Coupland"},{"book_id":3384,"title":"Girlfriend in a Coma","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Douglas Coupland"},{"book_id":3388,"title":"Corelli's Mandolin","image_url":"https:\/\/images.gr-assets.com\/books\/1479680795m\/3388.jpg","authors":"Louis de Berni\u00e8res"},{"book_id":3412,"title":"The Thorn Birds","image_url":"https:\/\/images.gr-assets.com\/books\/1391416796m\/3412.jpg","authors":"Colleen McCullough"},{"book_id":3431,"title":"The Five People You Meet in Heaven","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mitch Albom"},{"book_id":3446,"title":"Going After Cacciato","image_url":"https:\/\/images.gr-assets.com\/books\/1399498199m\/3446.jpg","authors":"Tim O'Brien"},{"book_id":3447,"title":"In the Lake of the Woods","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tim O'Brien"},{"book_id":3462,"title":"The Rescue","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nicholas Sparks"},{"book_id":3463,"title":"A Bend in the Road","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nicholas Sparks"},{"book_id":3464,"title":"True Believer (Jeremy Marsh & Lexie Darnell, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1385739017m\/3464.jpg","authors":"Nicholas Sparks"},{"book_id":3465,"title":"Three Weeks With My Brother","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nicholas Sparks, Micah Sparks"},{"book_id":3466,"title":"The Wedding (The Notebook, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1385738787m\/3466.jpg","authors":"Nicholas Sparks"},{"book_id":3467,"title":"The People of Sparks (Book of Ember, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1397931991m\/3467.jpg","authors":"Jeanne DuPrau"},{"book_id":3473,"title":"A Walk to Remember","image_url":"https:\/\/images.gr-assets.com\/books\/1385738968m\/3473.jpg","authors":"Nicholas Sparks"},{"book_id":3476,"title":"Icy Sparks","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Gwyn Hyman Rubio"},{"book_id":3478,"title":"Message in a Bottle","image_url":"https:\/\/images.gr-assets.com\/books\/1163789140m\/3478.jpg","authors":"Nicholas Sparks"},{"book_id":3483,"title":"Special Topics in Calamity Physics","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Marisha Pessl"},{"book_id":3507,"title":"Twelve Sharp (Stephanie Plum, #12)","image_url":"https:\/\/images.gr-assets.com\/books\/1316727699m\/3507.jpg","authors":"Janet Evanovich"},{"book_id":3559,"title":"From Beirut to Jerusalem","image_url":"https:\/\/images.gr-assets.com\/books\/1328295618m\/3559.jpg","authors":"Thomas L. Friedman"},{"book_id":3562,"title":"Emily of New Moon (Emily, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327883976m\/3562.jpg","authors":"L.M. Montgomery"},{"book_id":3579,"title":"The Complete Anne of Green Gables Boxed Set (Anne of Green Gables, #1-8)","image_url":"https:\/\/images.gr-assets.com\/books\/1267721500m\/3579.jpg","authors":"L.M. Montgomery"},{"book_id":3581,"title":"Sherlock Holmes: The Complete Novels and Stories, Volume I","image_url":"https:\/\/images.gr-assets.com\/books\/1320490450m\/3581.jpg","authors":"Arthur Conan Doyle"},{"book_id":3586,"title":"The Complete Sherlock Holmes, Vol 2","image_url":"https:\/\/images.gr-assets.com\/books\/1347663158m\/3586.jpg","authors":"Arthur Conan Doyle, Kyle Freeman"},{"book_id":3590,"title":"The Adventures of Sherlock Holmes","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Arthur Conan Doyle"},{"book_id":3636,"title":"The Giver (The Giver, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1342493368m\/3636.jpg","authors":"Lois Lowry"},{"book_id":3648,"title":"The Emperor's Children","image_url":"https:\/\/images.gr-assets.com\/books\/1320497348m\/3648.jpg","authors":"Claire Messud"},{"book_id":3656,"title":"The Sea","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Banville"},{"book_id":3679,"title":"On Beauty","image_url":"https:\/\/images.gr-assets.com\/books\/1495961870m\/3679.jpg","authors":"Zadie Smith"},{"book_id":3682,"title":"A Great and Terrible Beauty (Gemma Doyle, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1284558475m\/3682.jpg","authors":"Libba Bray"},{"book_id":3685,"title":"Black Beauty","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anna Sewell"},{"book_id":3686,"title":"Truth and Beauty","image_url":"https:\/\/images.gr-assets.com\/books\/1410140355m\/3686.jpg","authors":"Ann Patchett"},{"book_id":3690,"title":"The Power and the Glory","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Graham Greene, John Updike"},{"book_id":3692,"title":"The Heart of the Matter","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Graham Greene"},{"book_id":3698,"title":"The Quiet American","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Graham Greene, Robert Stone"},{"book_id":3710,"title":"The Autograph Man","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Zadie Smith"},{"book_id":3711,"title":"White Teeth","image_url":"https:\/\/images.gr-assets.com\/books\/1374739885m\/3711.jpg","authors":"Zadie Smith"},{"book_id":3717,"title":"Stranger than Fiction","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Chuck Palahniuk"},{"book_id":3750,"title":"Moonraker (James Bond, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ian Fleming"},{"book_id":3757,"title":"Doctor No (James Bond, #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ian Fleming"},{"book_id":3758,"title":"Casino Royale (James Bond, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1497801490m\/3758.jpg","authors":"Ian Fleming"},{"book_id":3759,"title":"Goldfinger (James Bond, #7)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ian Fleming"},{"book_id":3760,"title":"Diamonds Are Forever (James Bond, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ian Fleming"},{"book_id":3762,"title":"On Her Majesty's Secret Service (James Bond, #11)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ian Fleming"},{"book_id":3763,"title":"Live and Let Die (James Bond, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1327953982m\/3763.jpg","authors":"Ian Fleming"},{"book_id":3764,"title":"From Russia With Love (James Bond, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ian Fleming"},{"book_id":3805,"title":"The Corrections","image_url":"https:\/\/images.gr-assets.com\/books\/1355011305m\/3805.jpg","authors":"Jonathan Franzen"},{"book_id":3832,"title":"Cover Her Face (Adam Dalgliesh #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1298412294m\/3832.jpg","authors":"P.D. James"},{"book_id":3836,"title":"Don Quixote","image_url":"https:\/\/images.gr-assets.com\/books\/1364958765m\/3836.jpg","authors":"Miguel de Cervantes Saavedra, Roberto Gonz\u00e1lez Echevarr\u00eda, John Rutherford"},{"book_id":3858,"title":"Holy Cow: An Indian Adventure","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sarah Macdonald"},{"book_id":3867,"title":"The History of Love","image_url":"https:\/\/images.gr-assets.com\/books\/1327911009m\/3867.jpg","authors":"Nicole Krauss"},{"book_id":3869,"title":"A Brief History of Time","image_url":"https:\/\/images.gr-assets.com\/books\/1333578746m\/3869.jpg","authors":"Stephen Hawking, Cao Chi, Ph\u1ea1m V\u0103n Thi\u1ec1u"},{"book_id":3872,"title":"A History of the World in 6 Glasses","image_url":"https:\/\/images.gr-assets.com\/books\/1415681601m\/3872.jpg","authors":"Tom Standage"},{"book_id":3873,"title":"A History of God: The 4,000-Year Quest of Judaism, Christianity, and Islam","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Karen Armstrong"},{"book_id":3876,"title":"The Sun Also Rises","image_url":"https:\/\/images.gr-assets.com\/books\/1331828228m\/3876.jpg","authors":"Ernest Hemingway"},{"book_id":3882,"title":"Rachael Ray 365: No Repeats: A Year of Deliciously Different Dinners","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rachael Ray"},{"book_id":3885,"title":"The Taste of Home Cookbook","image_url":"https:\/\/images.gr-assets.com\/books\/1309198140m\/3885.jpg","authors":"Janet Briggs, Beth Wittlinger"},{"book_id":3888,"title":"The America's Test Kitchen Family Cookbook","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"America's Test Kitchen, Carl Tremblay, Daniel J. Van Ackere"},{"book_id":3895,"title":"The Barefoot Contessa Cookbook","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ina Garten, Melanie Acevedo"},{"book_id":3972,"title":"Olympos (Ilium, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dan Simmons"},{"book_id":3973,"title":"Ilium (Ilium, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1390894862m\/3973.jpg","authors":"Dan Simmons"},{"book_id":3974,"title":"The Terror","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dan Simmons"},{"book_id":3977,"title":"Endymion (Hyperion Cantos, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1329611385m\/3977.jpg","authors":"Dan Simmons"},{"book_id":3980,"title":"From the Mixed-Up Files of Mrs. Basil E. Frankweiler","image_url":"https:\/\/images.gr-assets.com\/books\/1327784751m\/3980.jpg","authors":"E.L. Konigsburg"},{"book_id":3985,"title":"The Amazing Adventures of Kavalier & Clay","image_url":"https:\/\/images.gr-assets.com\/books\/1479660066m\/3985.jpg","authors":"Michael Chabon"},{"book_id":4004,"title":"The Pilgrimage","image_url":"https:\/\/images.gr-assets.com\/books\/1307909268m\/4004.jpg","authors":"Paulo Coelho, Alan R. Clarke"},{"book_id":4005,"title":"The Fifth Mountain","image_url":"https:\/\/images.gr-assets.com\/books\/1358268472m\/4005.jpg","authors":"Paulo Coelho"},{"book_id":4006,"title":"The Valkyries","image_url":"https:\/\/images.gr-assets.com\/books\/1414013931m\/4006.jpg","authors":"Paulo Coelho, Alan R. Clarke"},{"book_id":4008,"title":"The Devil and Miss Prym (On the Seventh Day, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1359082264m\/4008.jpg","authors":"Paulo Coelho, Amanda Hopkinson, Nick Caistor"},{"book_id":4009,"title":"Nine Stories","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"J.D. Salinger"},{"book_id":4031,"title":"Lunar Park","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bret Easton Ellis"},{"book_id":4035,"title":"The Burden of Proof","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Scott Turow"},{"book_id":4069,"title":"Man's Search for Meaning","image_url":"https:\/\/images.gr-assets.com\/books\/1467136625m\/4069.jpg","authors":"Viktor E. Frankl"},{"book_id":4076,"title":"In Search of Excellence: Lessons from America's Best-Run Companies","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tom Peters, Robert H. Waterman Jr."},{"book_id":4099,"title":"The Pragmatic Programmer: From Journeyman to Master","image_url":"https:\/\/images.gr-assets.com\/books\/1401432508m\/4099.jpg","authors":"Andrew Hunt, Dave Thomas"},{"book_id":4122,"title":"Built to Last: Successful Habits of Visionary Companies","image_url":"https:\/\/images.gr-assets.com\/books\/1412047084m\/4122.jpg","authors":"James C. Collins, Jerry I. Porras"},{"book_id":4135,"title":"I Like You: Hospitality Under the Influence","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Amy Sedaris"},{"book_id":4136,"title":"Holidays on Ice","image_url":"https:\/\/images.gr-assets.com\/books\/1328330843m\/4136.jpg","authors":"David Sedaris"},{"book_id":4137,"title":"Me Talk Pretty One Day","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Sedaris"},{"book_id":4138,"title":"Naked","image_url":"https:\/\/images.gr-assets.com\/books\/1394178867m\/4138.jpg","authors":"David Sedaris"},{"book_id":4143,"title":"Barrel Fever: Stories and Essays","image_url":"https:\/\/images.gr-assets.com\/books\/1453273003m\/4143.jpg","authors":"David Sedaris"},{"book_id":4214,"title":"Life of Pi","image_url":"https:\/\/images.gr-assets.com\/books\/1320562005m\/4214.jpg","authors":"Yann Martel"},{"book_id":4261,"title":"Songbook","image_url":"https:\/\/images.gr-assets.com\/books\/1417984618m\/4261.jpg","authors":"Nick Hornby"},{"book_id":4264,"title":"Fever Pitch","image_url":"https:\/\/images.gr-assets.com\/books\/1426114203m\/4264.jpg","authors":"Nick Hornby"},{"book_id":4268,"title":"How to Be Good","image_url":"https:\/\/images.gr-assets.com\/books\/1327935893m\/4268.jpg","authors":"Nick Hornby"},{"book_id":4271,"title":"About a Boy","image_url":"https:\/\/images.gr-assets.com\/books\/1382004144m\/4271.jpg","authors":"Nick Hornby"},{"book_id":4325,"title":"Dreamland","image_url":"https:\/\/images.gr-assets.com\/books\/1385861832m\/4325.jpg","authors":"Sarah Dessen"},{"book_id":4339,"title":"Dispatches","image_url":"https:\/\/images.gr-assets.com\/books\/1343099128m\/4339.jpg","authors":"Michael Herr"},{"book_id":4364,"title":"Maximum City: Bombay Lost and Found","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Suketu Mehta"},{"book_id":4373,"title":"First They Killed My Father: A Daughter of Cambodia Remembers","image_url":"https:\/\/images.gr-assets.com\/books\/1407105580m\/4373.jpg","authors":"Loung Ung"},{"book_id":4381,"title":"Fahrenheit 451","image_url":"https:\/\/images.gr-assets.com\/books\/1351643740m\/4381.jpg","authors":"Ray Bradbury"},{"book_id":4395,"title":"The Grapes of Wrath","image_url":"https:\/\/images.gr-assets.com\/books\/1352912927m\/4395.jpg","authors":"John Steinbeck"},{"book_id":4406,"title":"East of Eden","image_url":"https:\/\/images.gr-assets.com\/books\/1441547516m\/4406.jpg","authors":"John Steinbeck"},{"book_id":4407,"title":"American Gods (American Gods, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1258417001m\/4407.jpg","authors":"Neil Gaiman"},{"book_id":4473,"title":"A Prayer for Owen Meany","image_url":"https:\/\/images.gr-assets.com\/books\/1260470010m\/4473.jpg","authors":"John Irving"},{"book_id":4477,"title":"Complications: A Surgeon's Notes on an Imperfect Science","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Atul Gawande, Susanne Kuhlmann-Krieg"},{"book_id":4507,"title":"Sickened: The Memoir of a Munchausen by Proxy Childhood","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Julie Gregory"},{"book_id":4516,"title":"Marina","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Carlos Ruiz Zaf\u00f3n"},{"book_id":4530,"title":"Olivia Joules and the Overactive Imagination","image_url":"https:\/\/images.gr-assets.com\/books\/1408588694m\/4530.jpg","authors":"Helen Fielding"},{"book_id":4538,"title":"The View from Saturday","image_url":"https:\/\/images.gr-assets.com\/books\/1476944774m\/4538.jpg","authors":"E.L. Konigsburg"},{"book_id":4588,"title":"Extremely Loud and Incredibly Close","image_url":"https:\/\/images.gr-assets.com\/books\/1327879967m\/4588.jpg","authors":"Jonathan Safran Foer"},{"book_id":4591,"title":"Genome: the Autobiography of a Species in 23 Chapters","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Matt Ridley"},{"book_id":4599,"title":"Carter Beats the Devil","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Glen David Gold"},{"book_id":4600,"title":"Moo, Baa, La La La!","image_url":"https:\/\/images.gr-assets.com\/books\/1451996462m\/4600.jpg","authors":"Sandra Boynton"},{"book_id":4625,"title":"The Complete Short Stories","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ernest Hemingway"},{"book_id":4630,"title":"To Have and Have Not","image_url":"https:\/\/images.gr-assets.com\/books\/1400886825m\/4630.jpg","authors":"Ernest Hemingway"},{"book_id":4631,"title":"A Moveable Feast","image_url":"https:\/\/images.gr-assets.com\/books\/1427463201m\/4631.jpg","authors":"Ernest Hemingway"},{"book_id":4633,"title":"Islands in the Stream","image_url":"https:\/\/images.gr-assets.com\/books\/1400891142m\/4633.jpg","authors":"Ernest Hemingway"},{"book_id":4645,"title":"The Snows of Kilimanjaro and Other Stories","image_url":"https:\/\/images.gr-assets.com\/books\/1400889884m\/4645.jpg","authors":"Ernest Hemingway"},{"book_id":4652,"title":"In Our Time","image_url":"https:\/\/images.gr-assets.com\/books\/1369859426m\/4652.jpg","authors":"Ernest Hemingway"},{"book_id":4656,"title":"The Fourth Hand","image_url":"https:\/\/images.gr-assets.com\/books\/1375776688m\/4656.jpg","authors":"John Irving"},{"book_id":4657,"title":"The Water-Method Man","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Irving"},{"book_id":4659,"title":"A Widow for One Year","image_url":"https:\/\/images.gr-assets.com\/books\/1375776653m\/4659.jpg","authors":"John Irving"},{"book_id":4660,"title":"The 158-Pound Marriage","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Irving"},{"book_id":4662,"title":"The Short Stories","image_url":"https:\/\/images.gr-assets.com\/books\/1400891315m\/4662.jpg","authors":"F. Scott Fitzgerald, Matthew J. Bruccoli"},{"book_id":4671,"title":"The Great Gatsby","image_url":"https:\/\/images.gr-assets.com\/books\/1490528560m\/4671.jpg","authors":"F. Scott Fitzgerald"},{"book_id":4687,"title":"The Cider House Rules","image_url":"https:\/\/images.gr-assets.com\/books\/1327962519m\/4687.jpg","authors":"John Irving"},{"book_id":4692,"title":"The Physician (Cole Family Trilogy, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Noah Gordon"},{"book_id":4701,"title":"A Spot of Bother","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mark Haddon"},{"book_id":4708,"title":"The Beautiful and Damned","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"F. Scott Fitzgerald"},{"book_id":4796,"title":"The Winter of Our Discontent","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Steinbeck, Susan Shillinglaw"},{"book_id":4799,"title":"Cannery Row","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Steinbeck"},{"book_id":4806,"title":"Longitude: The True Story of a Lone Genius Who Solved the Greatest Scientific Problem of His Time","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dava Sobel, Neil Armstrong"},{"book_id":4813,"title":"1421: The Year China Discovered America","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Gavin Menzies"},{"book_id":4820,"title":"Mayflower: A Story of Courage, Community, and War","image_url":"https:\/\/images.gr-assets.com\/books\/1474488130m\/4820.jpg","authors":"Nathaniel Philbrick"},{"book_id":4830,"title":"Shalimar the Clown","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Salman Rushdie"},{"book_id":4835,"title":"Haroun and the Sea of Stories (Khalifa Brothers, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1419913148m\/4835.jpg","authors":"Salman Rushdie, Paul Birkbeck"},{"book_id":4865,"title":"How to Win Friends and Influence People","image_url":"https:\/\/images.gr-assets.com\/books\/1442726934m\/4865.jpg","authors":"Dale Carnegie"},{"book_id":4866,"title":"How to Stop Worrying and Start Living","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dale Carnegie"},{"book_id":4887,"title":"The Drama of the Gifted Child: The Search for the True Self","image_url":"https:\/\/images.gr-assets.com\/books\/1339395245m\/4887.jpg","authors":"Alice Miller, Ruth Ward"},{"book_id":4894,"title":"Who Moved My Cheese?","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Spencer Johnson, Kenneth H. Blanchard"},{"book_id":4898,"title":"Blue Ocean Strategy: How To Create Uncontested Market Space And Make The Competition Irrelevant","image_url":"https:\/\/images.gr-assets.com\/books\/1416445924m\/4898.jpg","authors":"W. Chan Kim, Ren\u00e9e Mauborgne"},{"book_id":4900,"title":"Heart of Darkness","image_url":"https:\/\/images.gr-assets.com\/books\/1392799983m\/4900.jpg","authors":"Joseph Conrad"},{"book_id":4909,"title":"Teacher Man (Frank McCourt, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Frank McCourt"},{"book_id":4912,"title":"'Tis (Frank McCourt, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1375947803m\/4912.jpg","authors":"Frank McCourt"},{"book_id":4921,"title":"Three Men in a Boat (Three Men, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1392791656m\/4921.jpg","authors":"Jerome K. Jerome"},{"book_id":4929,"title":"Kafka on the Shore","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Haruki Murakami, Philip Gabriel"},{"book_id":4934,"title":"The Brothers Karamazov","image_url":"https:\/\/images.gr-assets.com\/books\/1427728126m\/4934.jpg","authors":"Fyodor Dostoyevsky, Richard Pevear, Larissa Volokhonsky"},{"book_id":4948,"title":"The Very Hungry Caterpillar Board Book","image_url":"https:\/\/images.gr-assets.com\/books\/1327878225m\/4948.jpg","authors":"Eric Carle"},{"book_id":4950,"title":"The Hungry Tide","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Amitav Ghosh"},{"book_id":4952,"title":"What Is the What","image_url":"https:\/\/images.gr-assets.com\/books\/1328837457m\/4952.jpg","authors":"Dave Eggers"},{"book_id":4953,"title":"A Heartbreaking Work of Staggering Genius","image_url":"https:\/\/images.gr-assets.com\/books\/1327714834m\/4953.jpg","authors":"Dave Eggers"},{"book_id":4954,"title":"You Shall Know Our Velocity!","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dave Eggers"},{"book_id":4955,"title":"How We Are Hungry","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dave Eggers"},{"book_id":4965,"title":"Year of Wonders","image_url":"https:\/\/images.gr-assets.com\/books\/1327936622m\/4965.jpg","authors":"Geraldine Brooks"},{"book_id":4978,"title":"Wolves of the Calla (The Dark Tower, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1419360231m\/4978.jpg","authors":"Stephen King, Bernie Wrightson"},{"book_id":4979,"title":"A Man Without a Country","image_url":"https:\/\/images.gr-assets.com\/books\/1330997432m\/4979.jpg","authors":"Kurt Vonnegut Jr."},{"book_id":4980,"title":"Breakfast of Champions","image_url":"https:\/\/images.gr-assets.com\/books\/1327934446m\/4980.jpg","authors":"Kurt Vonnegut Jr."},{"book_id":4981,"title":"Slaughterhouse-Five","image_url":"https:\/\/images.gr-assets.com\/books\/1440319389m\/4981.jpg","authors":"Kurt Vonnegut Jr."},{"book_id":4982,"title":"The Sirens of Titan","image_url":"https:\/\/images.gr-assets.com\/books\/1419363185m\/4982.jpg","authors":"Kurt Vonnegut Jr."},{"book_id":4983,"title":"Kurt Vonnegut's Cat's Cradle (Modern Critical Interpretations)","image_url":"https:\/\/images.gr-assets.com\/books\/1297118346m\/4983.jpg","authors":"Harold Bloom, Terry Southern, David H. Goldsmith, James Lundquist, Lawrence R. Broer, Peter J. Reed, Loree Rackstraw, William S. Doxey, Jerome Klinkowitz, Richard Giannone, John L. Simons, Leonard Mustazza, Zoltan Ab di-Nagy, Peter Freese, Wendy B. Faris"},{"book_id":4984,"title":"Bagombo Snuff Box","image_url":"https:\/\/images.gr-assets.com\/books\/1327353727m\/4984.jpg","authors":"Kurt Vonnegut Jr."},{"book_id":4985,"title":"Welcome to the Monkey House","image_url":"https:\/\/images.gr-assets.com\/books\/1381107552m\/4985.jpg","authors":"Kurt Vonnegut Jr."},{"book_id":4986,"title":"God Bless You, Dr. Kevorkian","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kurt Vonnegut Jr."},{"book_id":4987,"title":"Jailbird","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kurt Vonnegut Jr."},{"book_id":4989,"title":"The Red Tent","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anita Diamant"},{"book_id":5015,"title":"Saturday","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ian McEwan"},{"book_id":5038,"title":"The Pillars of Creation (Sword of Truth, #7)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Terry Goodkind"},{"book_id":5043,"title":"The Pillars of the Earth (The Kingsbridge Series, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ken Follett"},{"book_id":5052,"title":"Code to Zero","image_url":"https:\/\/images.gr-assets.com\/books\/1309209804m\/5052.jpg","authors":"Ken Follett"},{"book_id":5053,"title":"The Man From St. Petersburg","image_url":"https:\/\/images.gr-assets.com\/books\/1411331808m\/5053.jpg","authors":"Ken Follett"},{"book_id":5055,"title":"Night Over Water","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ken Follett"},{"book_id":5062,"title":"Jackdaws","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ken Follett"},{"book_id":5064,"title":"World Without End (The Kingsbridge Series, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ken Follett"},{"book_id":5068,"title":"Last Orders","image_url":"https:\/\/images.gr-assets.com\/books\/1457623323m\/5068.jpg","authors":"Graham Swift"},{"book_id":5084,"title":"My Life in France","image_url":"https:\/\/images.gr-assets.com\/books\/1395564378m\/5084.jpg","authors":"Julia Child, Alex Prud'Homme"},{"book_id":5091,"title":"The Dark Tower (The Dark Tower, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1372296329m\/5091.jpg","authors":"Stephen King"},{"book_id":5093,"title":"Song of Susannah (The Dark Tower, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1372296326m\/5093.jpg","authors":"Stephen King, Darrel Anderson"},{"book_id":5094,"title":"The Drawing of the Three (The Dark Tower, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1370918050m\/5094.jpg","authors":"Stephen King"},{"book_id":5096,"title":"Wizard and Glass (The Dark Tower, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1327946510m\/5096.jpg","authors":"Stephen King, Dave McKean"},{"book_id":5107,"title":"The Catcher in the Rye","image_url":"https:\/\/images.gr-assets.com\/books\/1398034300m\/5107.jpg","authors":"J.D. Salinger"},{"book_id":5113,"title":"Franny and Zooey","image_url":"https:\/\/images.gr-assets.com\/books\/1355037988m\/5113.jpg","authors":"J.D. Salinger"},{"book_id":5114,"title":"Raise High the Roof Beam, Carpenters & Seymour: An Introduction","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"J.D. Salinger"},{"book_id":5128,"title":"The Doors of Perception & Heaven and Hell","image_url":"https:\/\/images.gr-assets.com\/books\/1375947566m\/5128.jpg","authors":"Aldous Huxley"},{"book_id":5129,"title":"Brave New World","image_url":"https:\/\/images.gr-assets.com\/books\/1487389574m\/5129.jpg","authors":"Aldous Huxley"},{"book_id":5130,"title":"Island","image_url":"https:\/\/images.gr-assets.com\/books\/1375947541m\/5130.jpg","authors":"Aldous Huxley"},{"book_id":5139,"title":"The Devil Wears Prada (The Devil Wears Prada, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lauren Weisberger"},{"book_id":5148,"title":"A Separate Peace","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Knowles"},{"book_id":5157,"title":"Black and Blue","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anna Quindlen"},{"book_id":5158,"title":"A Virtuous Woman","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kaye Gibbons"},{"book_id":5159,"title":"Here on Earth","image_url":"https:\/\/images.gr-assets.com\/books\/1388299278m\/5159.jpg","authors":"Alice Hoffman"},{"book_id":5160,"title":"The Heart of a Woman","image_url":"https:\/\/images.gr-assets.com\/books\/1417404078m\/5160.jpg","authors":"Maya Angelou"},{"book_id":5161,"title":"The Deep End of the Ocean (Cappadora Family, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jacquelyn Mitchard"},{"book_id":5166,"title":"Midwives","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Chris Bohjalian"},{"book_id":5167,"title":"Cane River","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lalita Tademy"},{"book_id":5168,"title":"Where the Heart Is","image_url":"https:\/\/images.gr-assets.com\/books\/1327959469m\/5168.jpg","authors":"Billie Letts"},{"book_id":5171,"title":"Drowning Ruth","image_url":"https:\/\/images.gr-assets.com\/books\/1390180160m\/5171.jpg","authors":"Christina Schwarz"},{"book_id":5174,"title":"Fall on Your Knees","image_url":"https:\/\/images.gr-assets.com\/books\/1481449709m\/5174.jpg","authors":"Ann-Marie MacDonald"},{"book_id":5175,"title":"What Looks Like Crazy on an Ordinary Day (Idlewild, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Pearl Cleage"},{"book_id":5176,"title":"While I Was Gone","image_url":"https:\/\/images.gr-assets.com\/books\/1495632082m\/5176.jpg","authors":"Sue Miller"},{"book_id":5179,"title":"Mother of Pearl","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Melinda Haynes"},{"book_id":5180,"title":"The Rapture of Canaan","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sheri Reynolds"},{"book_id":5181,"title":"Jewel","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bret Lott"},{"book_id":5182,"title":"Songs in Ordinary Time","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mary McGarry Morris"},{"book_id":5186,"title":"Breath, Eyes, Memory","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Edwidge Danticat"},{"book_id":5187,"title":"The Book of Ruth","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jane Hamilton"},{"book_id":5190,"title":"Open House","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Elizabeth Berg"},{"book_id":5191,"title":"The Pilot's Wife","image_url":"https:\/\/images.gr-assets.com\/books\/1435011220m\/5191.jpg","authors":"Anita Shreve"},{"book_id":5196,"title":"Tara Road","image_url":"https:\/\/images.gr-assets.com\/books\/1403194637m\/5196.jpg","authors":"Maeve Binchy"},{"book_id":5197,"title":"A Lesson Before Dying","image_url":"https:\/\/images.gr-assets.com\/books\/1405866945m\/5197.jpg","authors":"Ernest J. Gaines"},{"book_id":5198,"title":"Paradise","image_url":"https:\/\/images.gr-assets.com\/books\/1327935897m\/5198.jpg","authors":"Toni Morrison"},{"book_id":5203,"title":"She's Come Undone","image_url":"https:\/\/images.gr-assets.com\/books\/1408313457m\/5203.jpg","authors":"Wally Lamb"},{"book_id":5204,"title":"We Were the Mulvaneys","image_url":"https:\/\/images.gr-assets.com\/books\/1309282868m\/5204.jpg","authors":"Joyce Carol Oates"},{"book_id":5205,"title":"A Map of the World","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jane Hamilton, Frank Muller, C.J. Critt"},{"book_id":5211,"title":"A Fine Balance","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rohinton Mistry"},{"book_id":5246,"title":"Ethan Frome","image_url":"https:\/\/images.gr-assets.com\/books\/1389822254m\/5246.jpg","authors":"Edith Wharton"},{"book_id":5289,"title":"Complete Works of Oscar Wilde","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Oscar Wilde, Merlin Holland"},{"book_id":5296,"title":"An Ideal Husband","image_url":"https:\/\/images.gr-assets.com\/books\/1417045098m\/5296.jpg","authors":"Oscar Wilde"},{"book_id":5297,"title":"The Picture of Dorian Gray","image_url":"https:\/\/images.gr-assets.com\/books\/1424596966m\/5297.jpg","authors":"Oscar Wilde, Jeffrey Eugenides"},{"book_id":5306,"title":"Travels with Charley: In Search of America","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Steinbeck"},{"book_id":5308,"title":"The Pearl","image_url":"https:\/\/images.gr-assets.com\/books\/1437234939m\/5308.jpg","authors":"John Steinbeck"},{"book_id":5326,"title":"A Christmas Carol","image_url":"https:\/\/images.gr-assets.com\/books\/1406512317m\/5326.jpg","authors":"Charles Dickens"},{"book_id":5338,"title":"A Christmas Carol and Other Christmas Writings","image_url":"https:\/\/images.gr-assets.com\/books\/1388952779m\/5338.jpg","authors":"Charles Dickens, Michael Slater"},{"book_id":5344,"title":"Hard Times","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Charles Dickens"},{"book_id":5345,"title":"The Innocent Man: Murder and Injustice in a Small Town","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Grisham"},{"book_id":5346,"title":"The Last Juror","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Grisham"},{"book_id":5347,"title":"Bleachers","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Grisham"},{"book_id":5348,"title":"The Testament","image_url":"https:\/\/images.gr-assets.com\/books\/1403174228m\/5348.jpg","authors":"John Grisham"},{"book_id":5349,"title":"The Rainmaker","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Grisham"},{"book_id":5350,"title":"The Partner","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Grisham"},{"book_id":5351,"title":"The Street Lawyer","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Grisham"},{"book_id":5352,"title":"The Summons","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Grisham"},{"book_id":5354,"title":"The Brethren","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Grisham"},{"book_id":5355,"title":"The Chamber","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Grisham"},{"book_id":5356,"title":"The King of Torts","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Grisham"},{"book_id":5357,"title":"Skipping Christmas","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Grisham"},{"book_id":5358,"title":"The Firm (Penguin Readers, Level 5)","image_url":"https:\/\/images.gr-assets.com\/books\/1418465200m\/5358.jpg","authors":"John Grisham"},{"book_id":5359,"title":"The Client","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Grisham"},{"book_id":5360,"title":"A Painted House","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Grisham"},{"book_id":5364,"title":"Dragonfly in Amber (Outlander, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1456114344m\/5364.jpg","authors":"Diana Gabaldon"},{"book_id":5367,"title":"The Great Book of Amber (The Chronicles of Amber, #1-10)","image_url":"https:\/\/images.gr-assets.com\/books\/1165519096m\/5367.jpg","authors":"Roger Zelazny"},{"book_id":5368,"title":"Forever Amber ","image_url":"https:\/\/images.gr-assets.com\/books\/1350464965m\/5368.jpg","authors":"Kathleen Winsor"},{"book_id":5369,"title":"The Amber Room","image_url":"https:\/\/images.gr-assets.com\/books\/1329497506m\/5369.jpg","authors":"Steve Berry"},{"book_id":5413,"title":"'Salem's Lot","image_url":"https:\/\/images.gr-assets.com\/books\/1320478491m\/5413.jpg","authors":"Stephen King, Jerry N. Uelsmann"},{"book_id":5417,"title":"Carrie \/ 'Salem's Lot \/ The Shining","image_url":"https:\/\/images.gr-assets.com\/books\/1376725117m\/5417.jpg","authors":"Stephen King"},{"book_id":5439,"title":"Interpreter of Maladies","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jhumpa Lahiri"},{"book_id":5452,"title":"Girls in Pants: The Third Summer of the Sisterhood (Sisterhood, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1320473346m\/5452.jpg","authors":"Ann Brashares"},{"book_id":5453,"title":"Forever in Blue: The Fourth Summer of the Sisterhood (Sisterhood, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ann Brashares"},{"book_id":5454,"title":"The Second Summer of the Sisterhood (Sisterhood, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1467700995m\/5454.jpg","authors":"Ann Brashares"},{"book_id":5470,"title":"1984","image_url":"https:\/\/images.gr-assets.com\/books\/1348990566m\/5470.jpg","authors":"George Orwell, Erich Fromm, Cel\u00e2l \u00dcster"},{"book_id":5472,"title":"Animal Farm \/ 1984","image_url":"https:\/\/images.gr-assets.com\/books\/1327959366m\/5472.jpg","authors":"George Orwell, Christopher Hitchens"},{"book_id":5479,"title":"Brave New World \/ Brave New World Revisited","image_url":"https:\/\/images.gr-assets.com\/books\/1331315450m\/5479.jpg","authors":"Aldous Huxley, Christopher Hitchens"},{"book_id":5481,"title":"Brave New World Revisited ","image_url":"https:\/\/images.gr-assets.com\/books\/1410136964m\/5481.jpg","authors":"Aldous Huxley"},{"book_id":5508,"title":"Anne Frank: Beyond the Diary - A Photographic Remembrance","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ruud van der Rol, Rian Verhoeven, Anna Quindlen, Anne Frank, Tony Langham, Plym Peters"},{"book_id":5509,"title":"Anne Frank Remembered: The Story of the Woman Who Helped to Hide the Frank Family","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Miep Gies, Alison Leslie Gold"},{"book_id":5517,"title":"A Raisin in the Sun","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lorraine Hansberry"},{"book_id":5526,"title":"Dear John","image_url":"https:\/\/images.gr-assets.com\/books\/1397749854m\/5526.jpg","authors":"Nicholas Sparks"},{"book_id":5527,"title":"All the King's Men","image_url":"https:\/\/images.gr-assets.com\/books\/1342193852m\/5527.jpg","authors":"Robert Penn Warren"},{"book_id":5544,"title":"Surely You're Joking, Mr. Feynman!: Adventures of a Curious Character","image_url":"https:\/\/images.gr-assets.com\/books\/1348445281m\/5544.jpg","authors":"Richard Feynman"},{"book_id":5548,"title":"What Do You Care What Other People Think?","image_url":"https:\/\/images.gr-assets.com\/books\/1297913068m\/5548.jpg","authors":"Richard Feynman"},{"book_id":5552,"title":"QED: The Strange Theory of Light and Matter","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Richard Feynman"},{"book_id":5553,"title":"Six Easy Pieces: Essentials of Physics By Its Most Brilliant Teacher","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Richard Feynman"},{"book_id":5559,"title":"Jack: Straight from the Gut","image_url":"https:\/\/images.gr-assets.com\/books\/1297699934m\/5559.jpg","authors":"Jack Welch, John A. Byrne, Mike Barnicle"},{"book_id":5571,"title":"Cradle to Cradle: Remaking the Way We Make Things","image_url":"https:\/\/images.gr-assets.com\/books\/1417605547m\/5571.jpg","authors":"William McDonough, Michael Braungart"},{"book_id":5575,"title":"Cradle and All","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Patterson"},{"book_id":5659,"title":"The Wind in the Willows","image_url":"https:\/\/images.gr-assets.com\/books\/1423183570m\/5659.jpg","authors":"Kenneth Grahame, Gillian Avery"},{"book_id":5693,"title":"Selected Stories","image_url":"https:\/\/images.gr-assets.com\/books\/1491936310m\/5693.jpg","authors":"Anton Chekhov, Richard Pevear, Larissa Volokhonsky"},{"book_id":5695,"title":"Demons","image_url":"https:\/\/images.gr-assets.com\/books\/1386958613m\/5695.jpg","authors":"Fyodor Dostoyevsky, Richard Pevear, Larissa Volokhonsky"},{"book_id":5697,"title":"The Complete Short Novels","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anton Chekhov, Richard Pevear, Larissa Volokhonsky"},{"book_id":5720,"title":"Rainbow Six (Jack Ryan Universe, #10)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tom Clancy"},{"book_id":5752,"title":"The Blank Slate: The Modern Denial of Human Nature","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Steven Pinker"},{"book_id":5755,"title":"The Language Instinct: How the Mind Creates Language","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Steven Pinker"},{"book_id":5759,"title":"Fight Club","image_url":"https:\/\/images.gr-assets.com\/books\/1357128997m\/5759.jpg","authors":"Chuck Palahniuk"},{"book_id":5787,"title":"The Aleph and Other Stories ","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jorge Luis Borges, Andrew Hurley"},{"book_id":5797,"title":"Vanity Fair","image_url":"https:\/\/images.gr-assets.com\/books\/1344386439m\/5797.jpg","authors":"William Makepeace Thackeray, John Carey"},{"book_id":5805,"title":"V for Vendetta","image_url":"https:\/\/images.gr-assets.com\/books\/1343668985m\/5805.jpg","authors":"Alan Moore, David Lloyd"},{"book_id":5809,"title":"V.","image_url":"https:\/\/images.gr-assets.com\/books\/1328110787m\/5809.jpg","authors":"Thomas Pynchon"},{"book_id":5826,"title":"Bel Canto","image_url":"https:\/\/images.gr-assets.com\/books\/1352997328m\/5826.jpg","authors":"Ann Patchett"},{"book_id":5845,"title":"A Bend in the River","image_url":"https:\/\/images.gr-assets.com\/books\/1353691563m\/5845.jpg","authors":"V.S. Naipaul"},{"book_id":5849,"title":"A House for Mr Biswas","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"V.S. Naipaul"},{"book_id":5872,"title":"Regeneration (Regeneration, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1365925619m\/5872.jpg","authors":"Pat Barker"},{"book_id":5890,"title":"The Woman in White","image_url":"https:\/\/images.gr-assets.com\/books\/1295661017m\/5890.jpg","authors":"Wilkie Collins, Matthew Sweet"},{"book_id":5907,"title":"The Hobbit","image_url":"https:\/\/images.gr-assets.com\/books\/1372847500m\/5907.jpg","authors":"J.R.R. Tolkien"},{"book_id":5932,"title":"Twenty Love Poems and a Song of Despair","image_url":"https:\/\/images.gr-assets.com\/books\/1447622711m\/5932.jpg","authors":"Pablo Neruda, W.S. Merwin, Cristina Garc\u00eda"},{"book_id":5936,"title":"The Poetry of Pablo Neruda","image_url":"https:\/\/images.gr-assets.com\/books\/1417605511m\/5936.jpg","authors":"Pablo Neruda, Ilan Stavans"},{"book_id":5942,"title":"Anil's Ghost","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael Ondaatje"},{"book_id":5946,"title":"In the Skin of a Lion","image_url":"https:\/\/images.gr-assets.com\/books\/1405864361m\/5946.jpg","authors":"Michael Ondaatje"},{"book_id":5954,"title":"Narcissus and Goldmund","image_url":"https:\/\/images.gr-assets.com\/books\/1374680750m\/5954.jpg","authors":"Hermann Hesse, Ursule Molinaro"},{"book_id":6138,"title":"The Moonstone","image_url":"https:\/\/images.gr-assets.com\/books\/1403192382m\/6138.jpg","authors":"Wilkie Collins, Carolyn G. Heilbrun"},{"book_id":6149,"title":"Beloved","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Toni Morrison"},{"book_id":6150,"title":"Cry, the Beloved Country","image_url":"https:\/\/images.gr-assets.com\/books\/1344182368m\/6150.jpg","authors":"Alan Paton"},{"book_id":6159,"title":"Reservation Blues","image_url":"https:\/\/images.gr-assets.com\/books\/1398195783m\/6159.jpg","authors":"Sherman Alexie"},{"book_id":6174,"title":"Survival in Auschwitz","image_url":"https:\/\/images.gr-assets.com\/books\/1414374949m\/6174.jpg","authors":"Primo Levi, Stuart J. Woolf, Philip Roth"},{"book_id":6185,"title":"Wuthering Heights","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Emily Bront\u00eb, Richard J. Dunn"},{"book_id":6192,"title":"Disgrace","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"J.M. Coetzee"},{"book_id":6193,"title":"Life and Times of Michael K","image_url":"https:\/\/images.gr-assets.com\/books\/1327203650m\/6193.jpg","authors":"J.M. Coetzee"},{"book_id":6194,"title":"Waiting for the Barbarians","image_url":"https:\/\/images.gr-assets.com\/books\/1330879044m\/6194.jpg","authors":"J.M. Coetzee"},{"book_id":6259,"title":"Birdsong","image_url":"https:\/\/images.gr-assets.com\/books\/1349952101m\/6259.jpg","authors":"Sebastian Faulks"},{"book_id":6288,"title":"The Road","image_url":"https:\/\/images.gr-assets.com\/books\/1439197219m\/6288.jpg","authors":"Cormac McCarthy"},{"book_id":6294,"title":"Howl's Moving Castle (Howl's Moving Castle, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1407450489m\/6294.jpg","authors":"Diana Wynne Jones"},{"book_id":6295,"title":"Howl and Other Poems","image_url":"https:\/\/images.gr-assets.com\/books\/1327870926m\/6295.jpg","authors":"Allen Ginsberg, William Carlos Williams"},{"book_id":6310,"title":"Charlie and the Chocolate Factory (Charlie Bucket, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1309211401m\/6310.jpg","authors":"Roald Dahl, Quentin Blake"},{"book_id":6319,"title":"The BFG","image_url":"https:\/\/images.gr-assets.com\/books\/1327872673m\/6319.jpg","authors":"Roald Dahl, Quentin Blake"},{"book_id":6327,"title":"The Witches","image_url":"https:\/\/images.gr-assets.com\/books\/1351707720m\/6327.jpg","authors":"Roald Dahl, Quentin Blake"},{"book_id":6328,"title":"Revolting Rhymes","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Roald Dahl, Quentin Blake"},{"book_id":6334,"title":"Never Let Me Go","image_url":"https:\/\/images.gr-assets.com\/books\/1353048590m\/6334.jpg","authors":"Kazuo Ishiguro"},{"book_id":6419,"title":"Plum Lovin' (Stephanie Plum, #12.5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Janet Evanovich"},{"book_id":6420,"title":"Visions of Sugar Plums (Stephanie Plum, #8.5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Janet Evanovich"},{"book_id":6422,"title":"Four to Score (Stephanie Plum, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1311983211m\/6422.jpg","authors":"Janet Evanovich"},{"book_id":6423,"title":"High Five (Stephanie Plum, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1270849101m\/6423.jpg","authors":"Janet Evanovich"},{"book_id":6424,"title":"Seven Up (Stephanie Plum, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1311720512m\/6424.jpg","authors":"Janet Evanovich"},{"book_id":6425,"title":"Hard Eight (Stephanie Plum, #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1479699438m\/6425.jpg","authors":"Janet Evanovich, Lorelei King"},{"book_id":6426,"title":"Motor Mouth (Alex Barnaby #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1479699584m\/6426.jpg","authors":"Janet Evanovich"},{"book_id":6427,"title":"Two for the Dough (Stephanie Plum, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1330926461m\/6427.jpg","authors":"Janet Evanovich"},{"book_id":6440,"title":"Ivanhoe","image_url":"https:\/\/images.gr-assets.com\/books\/1405336818m\/6440.jpg","authors":"Walter Scott"},{"book_id":6462,"title":"His Excellency: George Washington","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Joseph J. Ellis"},{"book_id":6514,"title":"The Bell Jar","image_url":"https:\/\/images.gr-assets.com\/books\/1473890514m\/6514.jpg","authors":"Sylvia Plath"},{"book_id":6520,"title":"My Friend Leonard","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Frey"},{"book_id":6526,"title":"Book of the Dead (Kay Scarpetta, #15)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Patricia Cornwell"},{"book_id":6528,"title":"Predator (Kay Scarpetta, #14)","image_url":"https:\/\/images.gr-assets.com\/books\/1310552145m\/6528.jpg","authors":"Patricia Cornwell"},{"book_id":6530,"title":"Trace (Kay Scarpetta, #13)","image_url":"https:\/\/images.gr-assets.com\/books\/1310723816m\/6530.jpg","authors":"Patricia Cornwell"},{"book_id":6531,"title":"Point of Origin (Kay Scarpetta, #9)","image_url":"https:\/\/images.gr-assets.com\/books\/1399629118m\/6531.jpg","authors":"Patricia Cornwell"},{"book_id":6534,"title":"Postmortem (Kay Scarpetta, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1341835831m\/6534.jpg","authors":"Patricia Cornwell"},{"book_id":6537,"title":"From Potter's Field (Kay Scarpetta, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1309209800m\/6537.jpg","authors":"Patricia Cornwell"},{"book_id":6538,"title":"Portrait of a Killer: Jack the Ripper - Case Closed","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Patricia Cornwell"},{"book_id":6539,"title":"The Body Farm (Kay Scarpetta, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Patricia Cornwell"},{"book_id":6541,"title":"Cause of Death (Kay Scarpetta, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1327632787m\/6541.jpg","authors":"Patricia Cornwell"},{"book_id":6551,"title":"Herzog","image_url":"https:\/\/images.gr-assets.com\/books\/1386924221m\/6551.jpg","authors":"Saul Bellow, Philip Roth"},{"book_id":6554,"title":"Darkness","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Saul"},{"book_id":6572,"title":"Suffer the Children","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Saul"},{"book_id":6588,"title":"The Big Bad Wolf (Alex Cross, #9)","image_url":"https:\/\/images.gr-assets.com\/books\/1388328154m\/6588.jpg","authors":"James Patterson"},{"book_id":6596,"title":"The Four Agreements: A Practical Guide to Personal Freedom","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Miguel Ruiz"},{"book_id":6613,"title":"Four Blondes","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Candace Bushnell"},{"book_id":6614,"title":"Lipstick Jungle","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Candace Bushnell"},{"book_id":6628,"title":"The Big Over Easy (Nursery Crime, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1432412758m\/6628.jpg","authors":"Jasper Fforde"},{"book_id":6656,"title":"The Divine Comedy","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dante Alighieri, Allen Mandelbaum, Eugenio Montale"},{"book_id":6667,"title":"Boy: Tales of Childhood","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Roald Dahl, Quentin Blake"},{"book_id":6670,"title":"The Magic Finger (Young Puffin Developing Reader)","image_url":"https:\/\/images.gr-assets.com\/books\/1434928966m\/6670.jpg","authors":"Roald Dahl, Quentin Blake"},{"book_id":6671,"title":"The Wonderful Story of Henry Sugar and Six More","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Roald Dahl"},{"book_id":6678,"title":"Going Solo","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Roald Dahl, Quentin Blake"},{"book_id":6687,"title":"Charlie and the Great Glass Elevator (Charlie Bucket, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1309211607m\/6687.jpg","authors":"Roald Dahl, Quentin Blake"},{"book_id":6689,"title":"James and the Giant Peach","image_url":"https:\/\/images.gr-assets.com\/books\/1320412586m\/6689.jpg","authors":"Roald Dahl, Quentin Blake"},{"book_id":6690,"title":"Danny the Champion of the World","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Roald Dahl, Quentin Blake"},{"book_id":6693,"title":"Fantastic Mr. Fox","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Roald Dahl, Quentin Blake"},{"book_id":6694,"title":"The Giraffe and the Pelly and Me","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Roald Dahl, Quentin Blake"},{"book_id":6697,"title":"Little Altars Everywhere","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rebecca Wells"},{"book_id":6708,"title":"The Power of Now: A Guide to Spiritual Enlightenment","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Eckhart Tolle"},{"book_id":6709,"title":"Practicing the Power of Now: Essential Teachings, Meditations, and Exercises from the Power of Now","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Eckhart Tolle"},{"book_id":6748,"title":"A Supposedly Fun Thing I'll Never Do Again: Essays and Arguments","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Foster Wallace"},{"book_id":6749,"title":"Oblivion","image_url":"https:\/\/images.gr-assets.com\/books\/1311905400m\/6749.jpg","authors":"David Foster Wallace"},{"book_id":6750,"title":"The Broom of the System","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Foster Wallace"},{"book_id":6751,"title":"Consider the Lobster and Other Essays","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Foster Wallace"},{"book_id":6753,"title":"Brief Interviews with Hideous Men","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Foster Wallace"},{"book_id":6759,"title":"Infinite Jest","image_url":"https:\/\/images.gr-assets.com\/books\/1446876799m\/6759.jpg","authors":"David Foster Wallace"},{"book_id":6819,"title":"Ghostwritten","image_url":"https:\/\/images.gr-assets.com\/books\/1320415093m\/6819.jpg","authors":"David Mitchell"},{"book_id":6820,"title":"number9dream","image_url":"https:\/\/images.gr-assets.com\/books\/1320540682m\/6820.jpg","authors":"David Mitchell"},{"book_id":6853,"title":"One for the Money (Stephanie Plum, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1316730230m\/6853.jpg","authors":"Janet Evanovich"},{"book_id":6854,"title":"Three to Get Deadly (Stephanie Plum, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1311727539m\/6854.jpg","authors":"Janet Evanovich"},{"book_id":6858,"title":"Hot Six (Stephanie Plum, #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Janet Evanovich"},{"book_id":6862,"title":"Amsterdam","image_url":"https:\/\/images.gr-assets.com\/books\/1403191209m\/6862.jpg","authors":"Ian McEwan"},{"book_id":6867,"title":"Atonement","image_url":"https:\/\/images.gr-assets.com\/books\/1320449708m\/6867.jpg","authors":"Ian McEwan"},{"book_id":6870,"title":"Enduring Love","image_url":"https:\/\/images.gr-assets.com\/books\/1313656531m\/6870.jpg","authors":"Ian McEwan"},{"book_id":6872,"title":"The Comfort of Strangers","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ian McEwan"},{"book_id":6882,"title":"Papillon","image_url":"https:\/\/images.gr-assets.com\/books\/1327865561m\/6882.jpg","authors":"Henri Charri\u00e8re"},{"book_id":6900,"title":"Tuesdays with Morrie","image_url":"https:\/\/images.gr-assets.com\/books\/1423763749m\/6900.jpg","authors":"Mitch Albom, Saulius Dagys"},{"book_id":6952,"title":"Like Water for Chocolate","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Laura Esquivel, Thomas Christensen, Carol Christensen"},{"book_id":6969,"title":"Emma","image_url":"https:\/\/images.gr-assets.com\/books\/1373627931m\/6969.jpg","authors":"Jane Austen, Fiona Stafford"},{"book_id":6976,"title":"The Mermaid Chair","image_url":"https:\/\/images.gr-assets.com\/books\/1388259308m\/6976.jpg","authors":"Sue Monk Kidd"},{"book_id":7035,"title":"Morality for Beautiful Girls (No. 1 Ladies' Detective Agency, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1379303019m\/7035.jpg","authors":"Alexander McCall Smith"},{"book_id":7036,"title":"The Kalahari Typing School for Men (No. 1 Ladies' Detective Agency, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1380393680m\/7036.jpg","authors":"Alexander McCall Smith"},{"book_id":7039,"title":"Tears of the Giraffe (No. 1 Ladies' Detective Agency, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Alexander McCall Smith"},{"book_id":7053,"title":"In the Company of Cheerful Ladies (No. 1 Ladies' Detective Agency, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1422951731m\/7053.jpg","authors":"Alexander McCall Smith"},{"book_id":7058,"title":"The Good Husband of Zebra Drive (No. 1 Ladies' Detective Agency, #8)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Alexander McCall Smith"},{"book_id":7061,"title":"The No. 1 Ladies' Detective Agency (No. 1 Ladies' Detective Agency, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1459953654m\/7061.jpg","authors":"Alexander McCall Smith"},{"book_id":7062,"title":"Paris to the Moon","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Adam Gopnik"},{"book_id":7069,"title":"The World According to Garp","image_url":"https:\/\/images.gr-assets.com\/books\/1447234581m\/7069.jpg","authors":"John Irving"},{"book_id":7073,"title":"A Son of the Circus","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Irving"},{"book_id":7081,"title":"The Android's Dream","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Scalzi"},{"book_id":7082,"title":"Do Androids Dream of Electric Sheep?","image_url":"https:\/\/images.gr-assets.com\/books\/1435458683m\/7082.jpg","authors":"Philip K. Dick, Roger Zelazny"},{"book_id":7126,"title":"The Count of Monte Cristo","image_url":"https:\/\/images.gr-assets.com\/books\/1309203605m\/7126.jpg","authors":"Alexandre Dumas, Robin Buss"},{"book_id":7144,"title":"Crime and Punishment","image_url":"https:\/\/images.gr-assets.com\/books\/1382846449m\/7144.jpg","authors":"Fyodor Dostoyevsky, David McDuff"},{"book_id":7184,"title":"Twenty Years After (The D'Artagnan Romances, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Alexandre Dumas, David Coward, Auguste Maquet"},{"book_id":7186,"title":"La Dame aux Cam\u00e9lias","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Alexandre Dumas fils, David Coward"},{"book_id":7190,"title":"The Three Musketeers","image_url":"https:\/\/images.gr-assets.com\/books\/1320436982m\/7190.jpg","authors":"Alexandre Dumas"},{"book_id":7194,"title":"The Club Dumas","image_url":"https:\/\/images.gr-assets.com\/books\/1327896341m\/7194.jpg","authors":"Arturo P\u00e9rez-Reverte, Sonia Soto"},{"book_id":7199,"title":"The Way the Crow Flies","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ann-Marie MacDonald"},{"book_id":7201,"title":"As the Crow Flies","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jeffrey Archer"},{"book_id":7214,"title":"Blue Like Jazz: Nonreligious Thoughts on Christian Spirituality","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Donald Miller"},{"book_id":7244,"title":"The Poisonwood Bible","image_url":"https:\/\/images.gr-assets.com\/books\/1412242487m\/7244.jpg","authors":"Barbara Kingsolver"},{"book_id":7252,"title":"How to Make Love Like a Porn Star: A Cautionary Tale","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jenna Jameson, Neil Strauss"},{"book_id":7329,"title":"Unfinished Tales of N\u00famenor and Middle-Earth","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"J.R.R. Tolkien, Christopher Tolkien"},{"book_id":7332,"title":"The Silmarillion (Middle-Earth Universe)","image_url":"https:\/\/images.gr-assets.com\/books\/1336502583m\/7332.jpg","authors":"J.R.R. Tolkien, Christopher Tolkien, Ted Nasmith"},{"book_id":7354,"title":"The Shipping News","image_url":"https:\/\/images.gr-assets.com\/books\/1469036074m\/7354.jpg","authors":"Annie Proulx"},{"book_id":7389,"title":"Runaways, Vol. 1: Pride and Joy (Runaways, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1264516899m\/7389.jpg","authors":"Brian K. Vaughan, Adrian Alphona"},{"book_id":7432,"title":"Pardonable Lies (Maisie Dobbs, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jacqueline Winspear"},{"book_id":7433,"title":"Messenger of Truth (Maisie Dobbs, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jacqueline Winspear"},{"book_id":7437,"title":"Naked Lunch","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"William S. Burroughs, James Grauerholz, Barry Miles"},{"book_id":7442,"title":"The Electric Kool-Aid Acid Test","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tom Wolfe"},{"book_id":7445,"title":"The Glass Castle","image_url":"https:\/\/images.gr-assets.com\/books\/1400930557m\/7445.jpg","authors":"Jeannette Walls"},{"book_id":7455,"title":"Sex and the City","image_url":"https:\/\/images.gr-assets.com\/books\/1344270731m\/7455.jpg","authors":"Candace Bushnell"},{"book_id":7493,"title":"Founding Brothers: The Revolutionary Generation","image_url":"https:\/\/images.gr-assets.com\/books\/1388791106m\/7493.jpg","authors":"Joseph J. Ellis"},{"book_id":7494,"title":"Suzanne's Diary for Nicholas","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Patterson"},{"book_id":7510,"title":"The Beach House","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Patterson, Peter de Jonge"},{"book_id":7520,"title":"Path of the Assassin (Scot Harvath, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Brad Thor"},{"book_id":7531,"title":"The Idiot Girls' Action-Adventure Club: True Tales from a Magnificent and Clumsy Life","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Laurie Notaro"},{"book_id":7572,"title":"Even Cowgirls Get the Blues","image_url":"https:\/\/images.gr-assets.com\/books\/1336172455m\/7572.jpg","authors":"Tom Robbins"},{"book_id":7579,"title":"Awakening the Buddha Within: Tibetan Wisdom for the Western World","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lama Surya Das"},{"book_id":7588,"title":"A Portrait of the Artist as a Young Man","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Joyce, Seamus Deane"},{"book_id":7603,"title":"Reading Lolita in Tehran","image_url":"https:\/\/images.gr-assets.com\/books\/1397751318m\/7603.jpg","authors":"Azar Nafisi"},{"book_id":7604,"title":"Lolita","image_url":"https:\/\/images.gr-assets.com\/books\/1377756377m\/7604.jpg","authors":"Vladimir Nabokov, Craig Raine"},{"book_id":7613,"title":"Animal Farm","image_url":"https:\/\/images.gr-assets.com\/books\/1424037542m\/7613.jpg","authors":"George Orwell"},{"book_id":7624,"title":"Lord of the Flies","image_url":"https:\/\/images.gr-assets.com\/books\/1327869409m\/7624.jpg","authors":"William Golding"},{"book_id":7628,"title":"The Good Soldier","image_url":"https:\/\/images.gr-assets.com\/books\/1389213508m\/7628.jpg","authors":"Ford Madox Ford, Kenneth Womack, William Baker"},{"book_id":7661,"title":"Next","image_url":"https:\/\/images.gr-assets.com\/books\/1358010468m\/7661.jpg","authors":"Michael Crichton"},{"book_id":7663,"title":"A Case of Need","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jeffery Hudson, Michael Crichton"},{"book_id":7667,"title":"Airframe","image_url":"https:\/\/images.gr-assets.com\/books\/1405420599m\/7667.jpg","authors":"Michael Crichton"},{"book_id":7668,"title":"Rising Sun","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael Crichton"},{"book_id":7669,"title":"Timeline","image_url":"https:\/\/images.gr-assets.com\/books\/1405420745m\/7669.jpg","authors":"Michael Crichton"},{"book_id":7670,"title":"The Andromeda Strain","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael Crichton"},{"book_id":7672,"title":"Congo","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael Crichton"},{"book_id":7673,"title":"Eaters of the Dead","image_url":"https:\/\/images.gr-assets.com\/books\/1388369310m\/7673.jpg","authors":"Michael Crichton"},{"book_id":7675,"title":"Disclosure","image_url":"https:\/\/images.gr-assets.com\/books\/1398678136m\/7675.jpg","authors":"Michael Crichton"},{"book_id":7677,"title":"Jurassic Park (Jurassic Park, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael Crichton"},{"book_id":7679,"title":"The Terminal Man","image_url":"https:\/\/images.gr-assets.com\/books\/1461056182m\/7679.jpg","authors":"Michael Crichton"},{"book_id":7682,"title":"The Great Train Robbery","image_url":"https:\/\/images.gr-assets.com\/books\/1328309104m\/7682.jpg","authors":"Michael Crichton"},{"book_id":7707,"title":"Pygmalion & My Fair Lady","image_url":"https:\/\/images.gr-assets.com\/books\/1327891970m\/7707.jpg","authors":"George Bernard Shaw, Alan Jay Lerner"},{"book_id":7714,"title":"Pygmalion","image_url":"https:\/\/images.gr-assets.com\/books\/1453757285m\/7714.jpg","authors":"George Bernard Shaw"},{"book_id":7723,"title":"The Metamorphosis and Other Stories","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Franz Kafka, Jason Baker, Donna Freed"},{"book_id":7728,"title":"Antigone (The Theban Plays, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1486701308m\/7728.jpg","authors":"Sophocles, J.E. Thomas"},{"book_id":7733,"title":"Gulliver's Travels","image_url":"https:\/\/images.gr-assets.com\/books\/1427829692m\/7733.jpg","authors":"Jonathan Swift, Robert DeMaria Jr."},{"book_id":7742,"title":"Ahab's Wife, or The Star-Gazer","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sena Jeter Naslund"},{"book_id":7745,"title":"Fear and Loathing in Las Vegas","image_url":"https:\/\/images.gr-assets.com\/books\/1394204569m\/7745.jpg","authors":"Hunter S. Thompson, Ralph Steadman"},{"book_id":7748,"title":"Fear and Loathing on the Campaign Trail '72","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Hunter S. Thompson"},{"book_id":7763,"title":"The Joy Luck Club","image_url":"https:\/\/images.gr-assets.com\/books\/1304978653m\/7763.jpg","authors":"Amy Tan"},{"book_id":7769,"title":"Dr. Seuss's ABC: An Amazing Alphabet Book! (Bright and Early Board Books)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dr. Seuss"},{"book_id":7770,"title":"One Fish, Two Fish, Red Fish, Blue Fish","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dr. Seuss"},{"book_id":7779,"title":"Horton Hears a Who!","image_url":"https:\/\/images.gr-assets.com\/books\/1327924655m\/7779.jpg","authors":"Dr. Seuss"},{"book_id":7780,"title":"The Secret Art of Dr. Seuss","image_url":"https:\/\/images.gr-assets.com\/books\/1320429156m\/7780.jpg","authors":"Dr. Seuss, Maurice Sendak, Audrey Geisel"},{"book_id":7784,"title":"The Lorax","image_url":"https:\/\/images.gr-assets.com\/books\/1327879938m\/7784.jpg","authors":"Dr. Seuss"},{"book_id":7785,"title":"I Can Read With My Eyes Shut!","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dr. Seuss"},{"book_id":7788,"title":"The Cat in the Hat and Other Dr. Seuss Favorites","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dr. Seuss, Various"},{"book_id":7797,"title":"Ten Apples Up On Top!","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Theo LeSieg, Roy McKie"},{"book_id":7805,"title":"Pale Fire","image_url":"https:\/\/images.gr-assets.com\/books\/1388155863m\/7805.jpg","authors":"Vladimir Nabokov"},{"book_id":7815,"title":"The Year of Magical Thinking","image_url":"https:\/\/images.gr-assets.com\/books\/1327878638m\/7815.jpg","authors":"Joan Didion"},{"book_id":7869,"title":"The Bourne Identity (Jason Bourne, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1335860740m\/7869.jpg","authors":"Robert Ludlum"},{"book_id":7882,"title":"On the Banks of Plum Creek (Little House, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Laura Ingalls Wilder, Garth Williams"},{"book_id":7909,"title":"Betsy-Tacy (Betsy-Tacy, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Maud Hart Lovelace, Lois Lenski"},{"book_id":7911,"title":"Five Little Peppers and How They Grew","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Margaret Sidney"},{"book_id":7926,"title":"All-of-a-Kind Family (All-of-a-Kind Family, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sydney Taylor"},{"book_id":7967,"title":"Speaker for the Dead (Ender's Saga, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1295660894m\/7967.jpg","authors":"Orson Scott Card"},{"book_id":7968,"title":"Red Prophet (Tales of Alvin Maker, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1379147136m\/7968.jpg","authors":"Orson Scott Card"},{"book_id":7973,"title":"Enchantment","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Orson Scott Card"},{"book_id":7979,"title":"The Bellmaker (Redwall, #7)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Brian Jacques"},{"book_id":7980,"title":"Pearls of Lutra (Redwall, #9)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Brian Jacques"},{"book_id":7981,"title":"The Long Patrol (Redwall, #10)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Brian Jacques, Allan Curless"},{"book_id":7983,"title":"Salamandastron (Redwall, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Brian Jacques, Gary Chalk"},{"book_id":7987,"title":"The Legend of Luke (Redwall, #12)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Brian Jacques"},{"book_id":7993,"title":"Mariel of Redwall (Redwall, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1299761476m\/7993.jpg","authors":"Brian Jacques, Gary Chalk"},{"book_id":7996,"title":"Redwall (Redwall, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327877368m\/7996.jpg","authors":"Brian Jacques"},{"book_id":7998,"title":"Outcast of Redwall (Redwall, #8)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Brian Jacques"},{"book_id":7999,"title":"Marlfox (Redwall, #11)","image_url":"https:\/\/images.gr-assets.com\/books\/1311702426m\/7999.jpg","authors":"Brian Jacques"},{"book_id":8073,"title":"Cloudy With a Chance of Meatballs","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Judi Barrett, Ron Barrett"},{"book_id":8087,"title":"Deerskin","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robin McKinley"},{"book_id":8088,"title":"Sunshine","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robin McKinley"},{"book_id":8089,"title":"Rose Daughter","image_url":"https:\/\/images.gr-assets.com\/books\/1398552029m\/8089.jpg","authors":"Robin McKinley"},{"book_id":8127,"title":"Anne of Green Gables (Anne of Green Gables, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"L.M. Montgomery"},{"book_id":8155,"title":"A Woman of Substance (Emma Harte Saga #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1330029941m\/8155.jpg","authors":"Barbara Taylor Bradford"},{"book_id":8172,"title":"Superman: Birthright","image_url":"https:\/\/images.gr-assets.com\/books\/1343584198m\/8172.jpg","authors":"Mark Waid, Alfred Gough, Miles Millar, Dave McCaig, Gerry Alanguilan, Leinil Francis Yu"},{"book_id":8248,"title":"By the Shores of Silver Lake (Little House, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Laura Ingalls Wilder, Garth Williams"},{"book_id":8252,"title":"Farmer Boy (Little House, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Laura Ingalls Wilder, Garth Williams"},{"book_id":8253,"title":"Little Town on the Prairie (Little House, #7)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Laura Ingalls Wilder, Garth Williams"},{"book_id":8282,"title":"The Long Winter (Little House, #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Laura Ingalls Wilder, Garth Williams"},{"book_id":8296,"title":"The First Four Years (Little House, #9)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Laura Ingalls Wilder, Garth Williams"},{"book_id":8337,"title":"Little House in the Big Woods (Little House, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1475195170m\/8337.jpg","authors":"Laura Ingalls Wilder, Garth Williams"},{"book_id":8492,"title":"Prophet","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Frank E. Peretti"},{"book_id":8515,"title":"The Man Who Listens to Horses","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Monty Roberts, Lucy Grealy, Lawrence Scanlan"},{"book_id":8600,"title":"Eats, Shoots & Leaves: The Zero Tolerance Approach to Punctuation","image_url":"https:\/\/images.gr-assets.com\/books\/1473392595m\/8600.jpg","authors":"Lynne Truss"},{"book_id":8646,"title":"Crow Lake","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mary Lawson"},{"book_id":8647,"title":"Shadow of the Giant (Ender's Shadow, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Orson Scott Card"},{"book_id":8648,"title":"Xenocide (Ender's Saga, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Orson Scott Card"},{"book_id":8650,"title":"The Lost World (Jurassic Park, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1386864575m\/8650.jpg","authors":"Michael Crichton"},{"book_id":8676,"title":"Unlimited Power : The New Science Of Personal Achievement","image_url":"https:\/\/images.gr-assets.com\/books\/1419212761m\/8676.jpg","authors":"Anthony Robbins, Kenneth H. Blanchard, Jason Winters"},{"book_id":8680,"title":"Fierce Invalids Home from Hot Climates","image_url":"https:\/\/images.gr-assets.com\/books\/1327866336m\/8680.jpg","authors":"Tom Robbins"},{"book_id":8682,"title":"Jitterbug Perfume","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tom Robbins"},{"book_id":8694,"title":"Life, the Universe and Everything (Hitchhiker's Guide, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1333577589m\/8694.jpg","authors":"Douglas Adams"},{"book_id":8695,"title":"The Restaurant at the End of the Universe (Hitchhiker's Guide, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Douglas Adams"},{"book_id":8696,"title":"Last Chance to See","image_url":"https:\/\/images.gr-assets.com\/books\/1327867839m\/8696.jpg","authors":"Douglas Adams, Mark Carwardine"},{"book_id":8698,"title":"So Long, and Thanks for All the Fish (Hitchhiker's Guide to the Galaxy, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1369563116m\/8698.jpg","authors":"Douglas Adams"},{"book_id":8725,"title":"Comfort Me with Apples: More Adventures at the Table","image_url":"https:\/\/images.gr-assets.com\/books\/1339885200m\/8725.jpg","authors":"Ruth Reichl"},{"book_id":8732,"title":"The Red Pony","image_url":"https:\/\/images.gr-assets.com\/books\/1391231816m\/8732.jpg","authors":"John Steinbeck"},{"book_id":8745,"title":"Desert Flower","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Waris Dirie, Cathleen Miller"},{"book_id":8765,"title":"I Feel Bad about My Neck: And Other Thoughts on Being a Woman","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nora Ephron"},{"book_id":8852,"title":"Macbeth","image_url":"https:\/\/images.gr-assets.com\/books\/1459795224m\/8852.jpg","authors":"William Shakespeare"},{"book_id":8908,"title":"World War Z: An Oral History of the Zombie War","image_url":"https:\/\/images.gr-assets.com\/books\/1386328204m\/8908.jpg","authors":"Max Brooks"},{"book_id":8909,"title":"The War of the Worlds","image_url":"https:\/\/images.gr-assets.com\/books\/1320391644m\/8909.jpg","authors":"H.G. Wells, Arthur C. Clarke"},{"book_id":8914,"title":"The First World War","image_url":"https:\/\/images.gr-assets.com\/books\/1403194704m\/8914.jpg","authors":"John Keegan"},{"book_id":8921,"title":"The Hound of the Baskervilles","image_url":"https:\/\/images.gr-assets.com\/books\/1355929358m\/8921.jpg","authors":"Arthur Conan Doyle, Anne Perry"},{"book_id":8948,"title":"Sons of Destiny (Cirque Du Freak, #12)","image_url":"https:\/\/images.gr-assets.com\/books\/1344270002m\/8948.jpg","authors":"Darren Shan"},{"book_id":8949,"title":"Lord of the Shadows (Cirque Du Freak, #11)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Darren Shan"},{"book_id":8951,"title":"The Lake of Souls (Cirque Du Freak, #10)","image_url":"https:\/\/images.gr-assets.com\/books\/1255988654m\/8951.jpg","authors":"Darren Shan"},{"book_id":8952,"title":"Killers of the Dawn (Cirque Du Freak, #9)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Darren Shan"},{"book_id":8953,"title":"Freak the Mighty (Freak The Mighty, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rodman Philbrick"},{"book_id":8957,"title":"Tunnels of Blood (Cirque Du Freak, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Darren Shan"},{"book_id":8960,"title":"Vampire Mountain (Cirque Du Freak, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1255813254m\/8960.jpg","authors":"Darren Shan"},{"book_id":8962,"title":"A Living Nightmare (Cirque Du Freak, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Darren Shan"},{"book_id":8963,"title":"Hunters of the Dusk (Cirque Du Freak, #7)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Darren Shan"},{"book_id":8964,"title":"Jesus Freaks: Stories of Those Who Stood for Jesus, the Ultimate Jesus Freaks (Jesus Freaks, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"D.C. Talk, The Voice of the Martyrs"},{"book_id":8965,"title":"The Vampire's Assistant (Cirque Du Freak, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Darren Shan"},{"book_id":8966,"title":"Allies of the Night (Cirque du Freak, #8)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Darren Shan"},{"book_id":8967,"title":"Trials of Death (Cirque Du Freak, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Darren Shan"},{"book_id":8968,"title":"The Vampire Prince (Cirque Du Freak, #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Darren Shan"},{"book_id":9010,"title":"I Hope They Serve Beer in Hell (Tucker Max, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tucker Max"},{"book_id":9013,"title":"The Long Walk: The True Story of a Trek to Freedom","image_url":"https:\/\/images.gr-assets.com\/books\/1417980460m\/9013.jpg","authors":"Slavomir Rawicz"},{"book_id":9014,"title":"The Long Walk","image_url":"https:\/\/images.gr-assets.com\/books\/1309212400m\/9014.jpg","authors":"Richard Bachman, Stephen King"},{"book_id":9282,"title":"The Smoke Jumper","image_url":"https:\/\/images.gr-assets.com\/books\/1403193693m\/9282.jpg","authors":"Nicholas Evans"},{"book_id":9298,"title":"Last Chance Saloon","image_url":"https:\/\/images.gr-assets.com\/books\/1407708818m\/9298.jpg","authors":"Marian Keyes"},{"book_id":9300,"title":"Watermelon (Walsh Family, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1345767584m\/9300.jpg","authors":"Marian Keyes"},{"book_id":9301,"title":"Rachel's Holiday (Walsh Family, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1407709261m\/9301.jpg","authors":"Marian Keyes"},{"book_id":9302,"title":"The Other Side of the Story","image_url":"https:\/\/images.gr-assets.com\/books\/1407107814m\/9302.jpg","authors":"Marian Keyes"},{"book_id":9303,"title":"Lucy Sullivan Is Getting Married","image_url":"https:\/\/images.gr-assets.com\/books\/1407707569m\/9303.jpg","authors":"Marian Keyes"},{"book_id":9328,"title":"The House of the Spirits","image_url":"https:\/\/images.gr-assets.com\/books\/1358615501m\/9328.jpg","authors":"Isabel Allende, Magda Bogin"},{"book_id":9355,"title":"Until I Find You","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Irving"},{"book_id":9370,"title":"Skinny Legs and All","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tom Robbins"},{"book_id":9375,"title":"Fried Green Tomatoes at the Whistle Stop Cafe","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Fannie Flagg"},{"book_id":9416,"title":"Confessions of a Shopaholic (Shopaholic, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327872404m\/9416.jpg","authors":"Sophie Kinsella"},{"book_id":9417,"title":"Shopaholic and Sister (Shopaholic, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sophie Kinsella"},{"book_id":9418,"title":"Shopaholic Takes Manhattan (Shopaholic, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1266449959m\/9418.jpg","authors":"Sophie Kinsella"},{"book_id":9419,"title":"Shopaholic Ties the Knot (Shopaholic, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1371383294m\/9419.jpg","authors":"Sophie Kinsella"},{"book_id":9420,"title":"Shopaholic & Baby (Shopaholic, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sophie Kinsella"},{"book_id":9454,"title":"Phenomenology of Spirit","image_url":"https:\/\/images.gr-assets.com\/books\/1425522818m\/9454.jpg","authors":"Georg Wilhelm Friedrich Hegel, A.V. Miller, John Niemeyer Findlay"},{"book_id":9475,"title":"Midnight for Charlie Bone (The Children of the Red King, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1328868798m\/9475.jpg","authors":"Jenny Nimmo"},{"book_id":9503,"title":"Saving Fish from Drowning","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Amy Tan"},{"book_id":9516,"title":"Persepolis: The Story of a Childhood (Persepolis, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1425871473m\/9516.jpg","authors":"Marjane Satrapi, Mattias Ripa"},{"book_id":9517,"title":"Persepolis 2: The Story of a Return (Persepolis, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1327865598m\/9517.jpg","authors":"Marjane Satrapi, Anjali Singh"},{"book_id":9522,"title":"Persepolis, Volume 1","image_url":"https:\/\/images.gr-assets.com\/books\/1375777630m\/9522.jpg","authors":"Marjane Satrapi"},{"book_id":9526,"title":"Embroideries","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Marjane Satrapi, Anjali Singh"},{"book_id":9530,"title":"Shadow Divers","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert Kurson"},{"book_id":9531,"title":"Peter and the Shadow Thieves (Peter and the Starcatchers, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dave Barry, Ridley Pearson, Greg Call"},{"book_id":9532,"title":"Ender's Shadow (Ender's Shadow, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Orson Scott Card"},{"book_id":9534,"title":"Shadow of the Hegemon (Ender's Shadow, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Orson Scott Card"},{"book_id":9539,"title":"The Shadow Rising (Wheel of Time, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1470841890m\/9539.jpg","authors":"Robert Jordan"},{"book_id":9549,"title":"Shadows of the Empire (Star Wars)","image_url":"https:\/\/images.gr-assets.com\/books\/1361481442m\/9549.jpg","authors":"Steve Perry"},{"book_id":9555,"title":"The Elephant Vanishes","image_url":"https:\/\/images.gr-assets.com\/books\/1391384346m\/9555.jpg","authors":"Haruki Murakami, Jay Rubin, Alfred Birnbaum"},{"book_id":9557,"title":"Sputnik Sweetheart","image_url":"https:\/\/images.gr-assets.com\/books\/1486764070m\/9557.jpg","authors":"Haruki Murakami, Philip Gabriel"},{"book_id":9566,"title":"Still Life with Woodpecker","image_url":"https:\/\/images.gr-assets.com\/books\/1308749778m\/9566.jpg","authors":"Tom Robbins"},{"book_id":9567,"title":"Half Asleep in Frog Pajamas","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tom Robbins"},{"book_id":9569,"title":"Villa Incognito","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tom Robbins"},{"book_id":9570,"title":"Another Roadside Attraction","image_url":"https:\/\/images.gr-assets.com\/books\/1327866271m\/9570.jpg","authors":"Tom Robbins"},{"book_id":9589,"title":"Hocus Pocus","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kurt Vonnegut Jr."},{"book_id":9590,"title":"God Bless You, Mr. Rosewater","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kurt Vonnegut Jr."},{"book_id":9592,"title":"Mother Night","image_url":"https:\/\/images.gr-assets.com\/books\/1344621657m\/9592.jpg","authors":"Kurt Vonnegut Jr."},{"book_id":9593,"title":"Gal\u00e1pagos","image_url":"https:\/\/images.gr-assets.com\/books\/1355012643m\/9593.jpg","authors":"Kurt Vonnegut Jr."},{"book_id":9594,"title":"Timequake","image_url":"https:\/\/images.gr-assets.com\/books\/1405784951m\/9594.jpg","authors":"Kurt Vonnegut Jr."},{"book_id":9595,"title":"Slapstick, or Lonesome No More!","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kurt Vonnegut Jr."},{"book_id":9597,"title":"Player Piano","image_url":"https:\/\/images.gr-assets.com\/books\/1488041609m\/9597.jpg","authors":"Kurt Vonnegut Jr."},{"book_id":9598,"title":"Deadeye Dick","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kurt Vonnegut Jr."},{"book_id":9601,"title":"Bluebeard","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kurt Vonnegut Jr."},{"book_id":9646,"title":"Homage to Catalonia","image_url":"https:\/\/images.gr-assets.com\/books\/1394868278m\/9646.jpg","authors":"George Orwell, Lionel Trilling"},{"book_id":9648,"title":"Keep the Aspidistra Flying","image_url":"https:\/\/images.gr-assets.com\/books\/1331244097m\/9648.jpg","authors":"George Orwell"},{"book_id":9650,"title":"Burmese Days","image_url":"https:\/\/images.gr-assets.com\/books\/1415573403m\/9650.jpg","authors":"George Orwell"},{"book_id":9654,"title":"Fear of Flying","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Erica Jong"},{"book_id":9712,"title":"Love in the Time of Cholera","image_url":"https:\/\/images.gr-assets.com\/books\/1327124987m\/9712.jpg","authors":"Gabriel Garc\u00eda M\u00e1rquez, Edith Grossman"},{"book_id":9717,"title":"The Unbearable Lightness of Being","image_url":"https:\/\/images.gr-assets.com\/books\/1265401884m\/9717.jpg","authors":"Milan Kundera, Michael Henry Heim"},{"book_id":9742,"title":"The Audacity of Hope: Thoughts on Reclaiming the American Dream","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Barack Obama"},{"book_id":9762,"title":"Loving What Is: Four Questions That Can Change Your Life","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Byron Katie, Stephen Mitchell"},{"book_id":9777,"title":"The God of Small Things","image_url":"https:\/\/images.gr-assets.com\/books\/1436217001m\/9777.jpg","authors":"Arundhati Roy"},{"book_id":9784,"title":"Women in Love (Brangwen Family, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"D.H. Lawrence"},{"book_id":9791,"title":"A Walk in the Woods","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bill Bryson"},{"book_id":9799,"title":"The Fortress of Solitude","image_url":"https:\/\/images.gr-assets.com\/books\/1418677318m\/9799.jpg","authors":"Jonathan Lethem"},{"book_id":9804,"title":"The Baron in the Trees","image_url":"https:\/\/images.gr-assets.com\/books\/1344432724m\/9804.jpg","authors":"Italo Calvino, Archibald Colquhoun"},{"book_id":9809,"title":"Invisible Cities","image_url":"https:\/\/images.gr-assets.com\/books\/1468623303m\/9809.jpg","authors":"Italo Calvino, William Weaver"},{"book_id":9820,"title":"Crossing to Safety","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Wallace Stegner"},{"book_id":9822,"title":"Mrs. Frisby and the Rats of NIMH (Rats of NIMH, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1351191064m\/9822.jpg","authors":"Robert C. O'Brien"},{"book_id":9827,"title":"King Rat (Asian Saga, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Clavell"},{"book_id":9833,"title":"Blind Willow, Sleeping Woman","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Haruki Murakami, Philip Gabriel, Jay Rubin"},{"book_id":9838,"title":"The Bookseller of Kabul","image_url":"https:\/\/images.gr-assets.com\/books\/1388611939m\/9838.jpg","authors":"\u00c5sne Seierstad, Ingrid Christopherson"},{"book_id":9844,"title":"Prep","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Curtis Sittenfeld"},{"book_id":9854,"title":"The End of Poverty","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jeffrey D. Sachs, Bono"},{"book_id":9864,"title":"The Ground Beneath Her Feet","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Salman Rushdie"},{"book_id":9865,"title":"The Moor's Last Sigh","image_url":"https:\/\/images.gr-assets.com\/books\/1359386233m\/9865.jpg","authors":"Salman Rushdie"},{"book_id":9912,"title":"The Rules of Attraction","image_url":"https:\/\/images.gr-assets.com\/books\/1468426907m\/9912.jpg","authors":"Bret Easton Ellis"},{"book_id":9913,"title":"Glamorama","image_url":"https:\/\/images.gr-assets.com\/books\/1403179508m\/9913.jpg","authors":"Bret Easton Ellis"},{"book_id":9914,"title":"The Informers","image_url":"https:\/\/images.gr-assets.com\/books\/1374684746m\/9914.jpg","authors":"Bret Easton Ellis"},{"book_id":9915,"title":"Less Than Zero","image_url":"https:\/\/images.gr-assets.com\/books\/1443060100m\/9915.jpg","authors":"Bret Easton Ellis"},{"book_id":9943,"title":"The Atonement Child","image_url":"https:\/\/images.gr-assets.com\/books\/1406513472m\/9943.jpg","authors":"Francine Rivers"},{"book_id":9957,"title":"The Cement Garden","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ian McEwan"},{"book_id":9998,"title":"The Woman in the Dunes","image_url":"https:\/\/images.gr-assets.com\/books\/1361254930m\/9998.jpg","authors":"K\u014db\u014d Abe, E. Dale Saunders"},{"book_id":10006,"title":"Oracle Night","image_url":"https:\/\/images.gr-assets.com\/books\/1328287302m\/10006.jpg","authors":"Paul Auster"},{"book_id":10009,"title":"Homo Faber","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Max Frisch"},{"book_id":10031,"title":"The Wall","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jean-Paul Sartre"},{"book_id":10033,"title":"Being and Nothingness","image_url":"https:\/\/images.gr-assets.com\/books\/1329978583m\/10033.jpg","authors":"Jean-Paul Sartre, Hazel E. Barnes, Mary Warnock, Richard Eyre"},{"book_id":10037,"title":"No Exit and Three Other Plays","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jean-Paul Sartre, Stuart Gilbert, Lionel Abel"},{"book_id":10058,"title":"Flags of Our Fathers","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James D. Bradley, Ron Powers"},{"book_id":10065,"title":"Wayside School Is Falling Down (Wayside School #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1405055796m\/10065.jpg","authors":"Louis Sachar, Joel Schick"},{"book_id":10073,"title":"A Long Way Down","image_url":"https:\/\/images.gr-assets.com\/books\/1467861525m\/10073.jpg","authors":"Nick Hornby"},{"book_id":10084,"title":"River of Blue Fire (Otherland, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1309992269m\/10084.jpg","authors":"Tad Williams"},{"book_id":10090,"title":"Mountain of Black Glass (Otherland, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1309992323m\/10090.jpg","authors":"Tad Williams"},{"book_id":10092,"title":"Sea of Silver Light (Otherland, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tad Williams"},{"book_id":10104,"title":"The Six Wives of Henry VIII","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Alison Weir"},{"book_id":10105,"title":"The Last Wife of Henry VIII","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Carolly Erickson"},{"book_id":10108,"title":"The Autobiography of Henry VIII: With Notes by His Fool, Will Somers","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Margaret George"},{"book_id":10115,"title":"The Memoirs of Cleopatra","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Margaret George"},{"book_id":10155,"title":"The Lost World (Professor Challenger, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1320504012m\/10155.jpg","authors":"Arthur Conan Doyle"},{"book_id":10176,"title":"Dress Your Family in Corduroy and Denim","image_url":"https:\/\/images.gr-assets.com\/books\/1352983006m\/10176.jpg","authors":"David Sedaris"},{"book_id":10210,"title":"Jane Eyre","image_url":"https:\/\/images.gr-assets.com\/books\/1327867269m\/10210.jpg","authors":"Charlotte Bront\u00eb, Michael Mason"},{"book_id":10222,"title":"The Far Pavilions","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"M.M. Kaye"},{"book_id":10235,"title":"Mountains Beyond Mountains: The Quest of Dr. Paul Farmer, A Man Who Would Cure the World","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tracy Kidder"},{"book_id":10238,"title":"The Tao of Physics: An Exploration of the Parallels between Modern Physics and Eastern Mysticism","image_url":"https:\/\/images.gr-assets.com\/books\/1327908532m\/10238.jpg","authors":"Fritjof Capra"},{"book_id":10365,"title":"Where the Red Fern Grows","image_url":"https:\/\/images.gr-assets.com\/books\/1166154337m\/10365.jpg","authors":"Wilson Rawls"},{"book_id":10374,"title":"Hard-Boiled Wonderland and the End of the World","image_url":"https:\/\/images.gr-assets.com\/books\/1399844477m\/10374.jpg","authors":"Haruki Murakami, Alfred Birnbaum"},{"book_id":10395,"title":"How Soccer Explains the World","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Franklin Foer"},{"book_id":10412,"title":"He's Just Not That Into You: The No-Excuses Truth to Understanding Guys","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Greg Behrendt, Liz Tuccillo"},{"book_id":10441,"title":"The Memory Keeper's Daughter","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kim Edwards"},{"book_id":10444,"title":"Ballet Shoes (Shoes, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Noel Streatfeild, Diane Goode"},{"book_id":10461,"title":"Desolation Angels","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jack Kerouac, Joyce Johnson"},{"book_id":10505,"title":"History of Beauty","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Umberto Eco, Girolamo De Michele, Alastair McEwen"},{"book_id":10506,"title":"The Island of the Day Before","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Umberto Eco"},{"book_id":10507,"title":"Baudolino","image_url":"https:\/\/images.gr-assets.com\/books\/1479698120m\/10507.jpg","authors":"Umberto Eco, William Weaver, R.C.S. Libri"},{"book_id":10534,"title":"The Art of War","image_url":"https:\/\/images.gr-assets.com\/books\/1453417993m\/10534.jpg","authors":"Sun Tzu, Thomas Cleary"},{"book_id":10538,"title":"The Life and Times of the Thunderbolt Kid","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bill Bryson"},{"book_id":10541,"title":"Made in America: An Informal History of the English Language in the United States","image_url":"https:\/\/images.gr-assets.com\/books\/1388209927m\/10541.jpg","authors":"Bill Bryson"},{"book_id":10566,"title":"Lisey's Story","image_url":"https:\/\/images.gr-assets.com\/books\/1316346037m\/10566.jpg","authors":"Stephen King"},{"book_id":10567,"title":"Cell","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Stephen King"},{"book_id":10569,"title":"On Writing: A Memoir of the Craft","image_url":"https:\/\/images.gr-assets.com\/books\/1436735207m\/10569.jpg","authors":"Stephen King"},{"book_id":10572,"title":"A Clash of Kings (A Song of Ice and Fire, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1358254974m\/10572.jpg","authors":"George R.R. Martin"},{"book_id":10574,"title":"The Colorado Kid (Hard Case Crime #13)","image_url":"https:\/\/images.gr-assets.com\/books\/1422099676m\/10574.jpg","authors":"Stephen King"},{"book_id":10577,"title":"Roadwork","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Richard Bachman, Stephen King"},{"book_id":10579,"title":"Everything's Eventual: 14 Dark Tales","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Stephen King"},{"book_id":10583,"title":"Pet Sematary","image_url":"https:\/\/images.gr-assets.com\/books\/1308894674m\/10583.jpg","authors":"Stephen King"},{"book_id":10584,"title":"Desperation","image_url":"https:\/\/images.gr-assets.com\/books\/1395764566m\/10584.jpg","authors":"Stephen King"},{"book_id":10585,"title":"Insomnia","image_url":"https:\/\/images.gr-assets.com\/books\/1354355494m\/10585.jpg","authors":"Stephen King, Bettina Blanch Tyroller"},{"book_id":10588,"title":"Nightmares and Dreamscapes","image_url":"https:\/\/images.gr-assets.com\/books\/1370950676m\/10588.jpg","authors":"Stephen King"},{"book_id":10589,"title":"Bag of Bones","image_url":"https:\/\/images.gr-assets.com\/books\/1365592796m\/10589.jpg","authors":"Stephen King"},{"book_id":10592,"title":"Carrie","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Stephen King"},{"book_id":10596,"title":"The Regulators","image_url":"https:\/\/images.gr-assets.com\/books\/1364033309m\/10596.jpg","authors":"Richard Bachman, Stephen King"},{"book_id":10603,"title":"Cujo","image_url":"https:\/\/images.gr-assets.com\/books\/1394208144m\/10603.jpg","authors":"Stephen King"},{"book_id":10605,"title":"Thinner","image_url":"https:\/\/images.gr-assets.com\/books\/1346947063m\/10605.jpg","authors":"Richard Bachman, Stephen King"},{"book_id":10607,"title":"Black House (The Talisman, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Stephen King, Peter Straub"},{"book_id":10611,"title":"The Eyes of the Dragon","image_url":"https:\/\/images.gr-assets.com\/books\/1430121758m\/10611.jpg","authors":"Stephen King"},{"book_id":10614,"title":"Misery","image_url":"https:\/\/images.gr-assets.com\/books\/1270545451m\/10614.jpg","authors":"Stephen King"},{"book_id":10617,"title":"The Bachman Books","image_url":"https:\/\/images.gr-assets.com\/books\/1374049003m\/10617.jpg","authors":"Richard Bachman, Stephen King"},{"book_id":10618,"title":"Apt Pupil","image_url":"https:\/\/images.gr-assets.com\/books\/1330222469m\/10618.jpg","authors":"Stephen King"},{"book_id":10619,"title":"Rose Madder","image_url":"https:\/\/images.gr-assets.com\/books\/1375870513m\/10619.jpg","authors":"Stephen King"},{"book_id":10625,"title":"Dolores Claiborne","image_url":"https:\/\/images.gr-assets.com\/books\/1394213480m\/10625.jpg","authors":"Stephen King, Dominique Dill"},{"book_id":10628,"title":"Night Shift","image_url":"https:\/\/images.gr-assets.com\/books\/1342215309m\/10628.jpg","authors":"Stephen King, John D. MacDonald"},{"book_id":10629,"title":"Christine","image_url":"https:\/\/images.gr-assets.com\/books\/1327270815m\/10629.jpg","authors":"Stephen King, Marie Milpois"},{"book_id":10639,"title":"The Paradox of Choice: Why More Is Less","image_url":"https:\/\/images.gr-assets.com\/books\/1410138134m\/10639.jpg","authors":"Barry Schwartz"},{"book_id":10669,"title":"When Genius Failed: The Rise and Fall of Long-Term Capital Management","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Roger Lowenstein"},{"book_id":10692,"title":"The Historian","image_url":"https:\/\/images.gr-assets.com\/books\/1338298031m\/10692.jpg","authors":"Elizabeth Kostova"},{"book_id":10739,"title":"The Moviegoer","image_url":"https:\/\/images.gr-assets.com\/books\/1437668043m\/10739.jpg","authors":"Walker Percy"},{"book_id":10765,"title":"A Year in the Merde","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Stephen Clarke"},{"book_id":10775,"title":"The Garden of Eden","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ernest Hemingway"},{"book_id":10799,"title":"A Farewell to Arms","image_url":"https:\/\/images.gr-assets.com\/books\/1313714836m\/10799.jpg","authors":"Ernest Hemingway"},{"book_id":10836,"title":"Che Guevara: A Revolutionary Life","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jon Lee Anderson"},{"book_id":10847,"title":"Under the Banner of Heaven: A Story of Violent Faith","image_url":"https:\/\/images.gr-assets.com\/books\/1356441391m\/10847.jpg","authors":"Jon Krakauer"},{"book_id":10867,"title":"The Pleasure of My Company","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Steve Martin"},{"book_id":10873,"title":"Shopgirl","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Steve Martin"},{"book_id":10878,"title":"The Great Shark Hunt: Strange Tales from a Strange Time (The Gonzo Papers, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Hunter S. Thompson"},{"book_id":10882,"title":"Hell's Angels: A Strange and Terrible Saga","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Hunter S. Thompson"},{"book_id":10883,"title":"Benjamin Franklin: An American Life","image_url":"https:\/\/images.gr-assets.com\/books\/1397772877m\/10883.jpg","authors":"Walter Isaacson"},{"book_id":10884,"title":"Einstein: His Life and Universe","image_url":"https:\/\/images.gr-assets.com\/books\/1328011405m\/10884.jpg","authors":"Walter Isaacson"},{"book_id":10890,"title":"Traveling Mercies: Some Thoughts on Faith","image_url":"https:\/\/images.gr-assets.com\/books\/1403182174m\/10890.jpg","authors":"Anne Lamott"},{"book_id":10907,"title":"The Pursuit of Happyness","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Chris Gardner"},{"book_id":10908,"title":"Harvesting the Heart","image_url":"https:\/\/images.gr-assets.com\/books\/1309198959m\/10908.jpg","authors":"Jodi Picoult"},{"book_id":10909,"title":"The Tenth Circle","image_url":"https:\/\/images.gr-assets.com\/books\/1348575053m\/10909.jpg","authors":"Jodi Picoult"},{"book_id":10910,"title":"Mercy","image_url":"https:\/\/images.gr-assets.com\/books\/1299040130m\/10910.jpg","authors":"Jodi Picoult"},{"book_id":10911,"title":"Second Glance","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jodi Picoult"},{"book_id":10912,"title":"Picture Perfect","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jodi Picoult"},{"book_id":10913,"title":"Keeping Faith","image_url":"https:\/\/images.gr-assets.com\/books\/1407111555m\/10913.jpg","authors":"Jodi Picoult"},{"book_id":10914,"title":"Songs of the Humpback Whale","image_url":"https:\/\/images.gr-assets.com\/books\/1421422550m\/10914.jpg","authors":"Jodi Picoult"},{"book_id":10915,"title":"Salem Falls","image_url":"https:\/\/images.gr-assets.com\/books\/1344397557m\/10915.jpg","authors":"Jodi Picoult"},{"book_id":10916,"title":"The Pact","image_url":"https:\/\/images.gr-assets.com\/books\/1410754561m\/10916.jpg","authors":"Jodi Picoult"},{"book_id":10917,"title":"My Sister's Keeper","image_url":"https:\/\/images.gr-assets.com\/books\/1369504683m\/10917.jpg","authors":"Jodi Picoult"},{"book_id":10920,"title":"Cold Mountain","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Charles Frazier"},{"book_id":10929,"title":"For One More Day","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mitch Albom"},{"book_id":10956,"title":"The Virgin Suicides","image_url":"https:\/\/images.gr-assets.com\/books\/1319032910m\/10956.jpg","authors":"Jeffrey Eugenides"},{"book_id":10959,"title":"Sophie's World","image_url":"https:\/\/images.gr-assets.com\/books\/1343459906m\/10959.jpg","authors":"Jostein Gaarder, Paulette M\u00f8ller"},{"book_id":10964,"title":"Outlander (Outlander, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1402600310m\/10964.jpg","authors":"Diana Gabaldon"},{"book_id":10965,"title":"A Breath of Snow and Ashes (Outlander, #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Diana Gabaldon"},{"book_id":10967,"title":"The Fiery Cross (Outlander, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1407366842m\/10967.jpg","authors":"Diana Gabaldon"},{"book_id":10975,"title":"The Sound and the Fury","image_url":"https:\/\/images.gr-assets.com\/books\/1433089995m\/10975.jpg","authors":"William Faulkner"},{"book_id":10979,"title":"Light in August","image_url":"https:\/\/images.gr-assets.com\/books\/1355360091m\/10979.jpg","authors":"William Faulkner"},{"book_id":10987,"title":"Voyager (Outlander, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1483278195m\/10987.jpg","authors":"Diana Gabaldon"},{"book_id":10988,"title":"Drums of Autumn (Outlander, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1500688941m\/10988.jpg","authors":"Diana Gabaldon"},{"book_id":10990,"title":"Lord John and the Private Matter (Lord John Grey, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1320485657m\/10990.jpg","authors":"Diana Gabaldon"},{"book_id":11003,"title":"Eleven on Top (Stephanie Plum, #11)","image_url":"https:\/\/images.gr-assets.com\/books\/1166394806m\/11003.jpg","authors":"Janet Evanovich"},{"book_id":11012,"title":"Dubliners","image_url":"https:\/\/images.gr-assets.com\/books\/1334138184m\/11012.jpg","authors":"James Joyce, Jeri Johnson"},{"book_id":11031,"title":"The Flanders Panel","image_url":"https:\/\/images.gr-assets.com\/books\/1328874807m\/11031.jpg","authors":"Arturo P\u00e9rez-Reverte, Margaret Jull Costa"},{"book_id":11041,"title":"Delta of Venus","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ana\u00efs Nin"},{"book_id":11077,"title":"The Sex Lives of Cannibals: Adrift in the Equatorial Pacific","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"J. Maarten Troost"},{"book_id":11125,"title":"Digital Fortress","image_url":"https:\/\/images.gr-assets.com\/books\/1360095966m\/11125.jpg","authors":"Dan Brown"},{"book_id":11127,"title":"The Chronicles of Narnia (Chronicles of Narnia, #1-7)","image_url":"https:\/\/images.gr-assets.com\/books\/1449868701m\/11127.jpg","authors":"C.S. Lewis, Pauline Baynes"},{"book_id":11138,"title":"Mere Christianity","image_url":"https:\/\/images.gr-assets.com\/books\/1468102872m\/11138.jpg","authors":"C.S. Lewis"},{"book_id":11149,"title":"The Screwtape Letters","image_url":"https:\/\/images.gr-assets.com\/books\/1347801873m\/11149.jpg","authors":"C.S. Lewis"},{"book_id":11206,"title":"In the Time of the Butterflies","image_url":"https:\/\/images.gr-assets.com\/books\/1411410276m\/11206.jpg","authors":"Julia Alvarez"},{"book_id":11208,"title":"How the Garc\u00eda Girls Lost Their Accents ","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Julia Alvarez"},{"book_id":11229,"title":"The Sea, the Sea","image_url":"https:\/\/images.gr-assets.com\/books\/1302898449m\/11229.jpg","authors":"Iris Murdoch, Mary Kinzie"},{"book_id":11275,"title":"The Wind-Up Bird Chronicle","image_url":"https:\/\/images.gr-assets.com\/books\/1327872639m\/11275.jpg","authors":"Haruki Murakami, Jay Rubin"},{"book_id":11279,"title":"Summer of Night","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dan Simmons"},{"book_id":11286,"title":"Carrion Comfort","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dan Simmons"},{"book_id":11289,"title":"The Rise of Endymion (Hyperion Cantos, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1329609799m\/11289.jpg","authors":"Dan Simmons"},{"book_id":11297,"title":"Norwegian Wood","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Haruki Murakami, Jay Rubin"},{"book_id":11298,"title":"A Wild Sheep Chase (The Rat, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1327908774m\/11298.jpg","authors":"Haruki Murakami, Alfred Birnbaum"},{"book_id":11299,"title":"After the Quake","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Haruki Murakami, Jay Rubin"},{"book_id":11301,"title":"Horton Hatches the Egg","image_url":"https:\/\/images.gr-assets.com\/books\/1408927129m\/11301.jpg","authors":"Dr. Seuss"},{"book_id":11306,"title":"The Dark Is Rising Sequence (The Dark Is Rising #1-5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Susan Cooper"},{"book_id":11312,"title":"Over Sea, Under Stone (The Dark Is Rising, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1443993959m\/11312.jpg","authors":"Susan Cooper"},{"book_id":11313,"title":"Silver on the Tree (The Dark is Rising, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1364805592m\/11313.jpg","authors":"Susan Cooper"},{"book_id":11318,"title":"Trouble Is My Business","image_url":"https:\/\/images.gr-assets.com\/books\/1388189902m\/11318.jpg","authors":"Raymond Chandler"},{"book_id":11324,"title":"Under the Net","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Iris Murdoch"},{"book_id":11334,"title":"Song of Solomon","image_url":"https:\/\/images.gr-assets.com\/books\/1451448230m\/11334.jpg","authors":"Toni Morrison"},{"book_id":11337,"title":"The Bluest Eye","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Toni Morrison"},{"book_id":11339,"title":"100 Love Sonnets","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Pablo Neruda, Stephen Tapscott"},{"book_id":11346,"title":"Sula","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Toni Morrison"},{"book_id":11359,"title":"Tar Baby","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Toni Morrison"},{"book_id":11366,"title":"The Guns of August","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Barbara W. Tuchman, Robert K. Massie"},{"book_id":11376,"title":"Main Street","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sinclair Lewis"},{"book_id":11413,"title":"Captivating: Unveiling the Mystery of a Woman's Soul","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Eldredge, Stasi Eldredge"},{"book_id":11422,"title":"Redeeming Love","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Francine Rivers"},{"book_id":11429,"title":"Ever After (Lost Love, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Karen Kingsbury"},{"book_id":11430,"title":"Return (Redemption, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1406513762m\/11430.jpg","authors":"Karen Kingsbury, Gary Smalley"},{"book_id":11432,"title":"Reunion (Redemption, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1406506549m\/11432.jpg","authors":"Karen Kingsbury, Gary Smalley"},{"book_id":11433,"title":"Redemption (Redemption, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1406514548m\/11433.jpg","authors":"Karen Kingsbury, Gary Smalley"},{"book_id":11436,"title":"Rejoice (Redemption, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1406505041m\/11436.jpg","authors":"Karen Kingsbury, Gary Smalley"},{"book_id":11437,"title":"Where I'm Calling From: New and Selected Stories","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Raymond Carver"},{"book_id":11438,"title":"What We Talk About When We Talk About Love","image_url":"https:\/\/images.gr-assets.com\/books\/1475474209m\/11438.jpg","authors":"Raymond Carver"},{"book_id":11446,"title":"Will You Please Be Quiet, Please?","image_url":"https:\/\/images.gr-assets.com\/books\/1360355821m\/11446.jpg","authors":"Raymond Carver"},{"book_id":11449,"title":"Cathedral","image_url":"https:\/\/images.gr-assets.com\/books\/1421615759m\/11449.jpg","authors":"Raymond Carver"},{"book_id":11466,"title":"This Boy's Life","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tobias Wolff"},{"book_id":11472,"title":"We Wish to Inform You That Tomorrow We Will Be Killed with Our Families","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Philip Gourevitch"},{"book_id":11486,"title":"The Color Purple","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Alice Walker"},{"book_id":11507,"title":"My Name Is Asher Lev","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Chaim Potok"},{"book_id":11525,"title":"1,000 Places to See Before You Die","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Patricia Schultz"},{"book_id":11553,"title":"Boy's Life","image_url":"https:\/\/images.gr-assets.com\/books\/1314302694m\/11553.jpg","authors":"Robert McCammon"},{"book_id":11557,"title":"Swan Song","image_url":"https:\/\/images.gr-assets.com\/books\/1445981000m\/11557.jpg","authors":"Robert McCammon"},{"book_id":11563,"title":"Danse Macabre","image_url":"https:\/\/images.gr-assets.com\/books\/1309287093m\/11563.jpg","authors":"Stephen King"},{"book_id":11564,"title":"The Girl Who Loved Tom Gordon","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Stephen King"},{"book_id":11566,"title":"The Green Mile","image_url":"https:\/\/images.gr-assets.com\/books\/1373903563m\/11566.jpg","authors":"Stephen King"},{"book_id":11570,"title":"Dreamcatcher","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Stephen King, William Olivier Desmond"},{"book_id":11573,"title":"The Dead Zone","image_url":"https:\/\/images.gr-assets.com\/books\/1283509622m\/11573.jpg","authors":"Stephen King"},{"book_id":11574,"title":"The Body","image_url":"https:\/\/images.gr-assets.com\/books\/1328182521m\/11574.jpg","authors":"Stephen King, Robin A.H. Waterfield"},{"book_id":11580,"title":"Creepshow","image_url":"https:\/\/images.gr-assets.com\/books\/1332002598m\/11580.jpg","authors":"Stephen King, Bernie Wrightson, Michele Wrightson"},{"book_id":11588,"title":"The Shining (The Shining #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1353277730m\/11588.jpg","authors":"Stephen King"},{"book_id":11590,"title":"'Salem's Lot","image_url":"https:\/\/images.gr-assets.com\/books\/1327891565m\/11590.jpg","authors":"Stephen King"},{"book_id":11597,"title":"The Dark Half","image_url":"https:\/\/images.gr-assets.com\/books\/1430122353m\/11597.jpg","authors":"Stephen King"},{"book_id":11602,"title":"Hearts in Atlantis","image_url":"https:\/\/images.gr-assets.com\/books\/1374048926m\/11602.jpg","authors":"Stephen King"},{"book_id":11605,"title":"Riding the Bullet","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Stephen King, Josh Hamilton"},{"book_id":11607,"title":"The Running Man","image_url":"https:\/\/images.gr-assets.com\/books\/1333160557m\/11607.jpg","authors":"Richard Bachman, Stephen King"},{"book_id":11623,"title":"The Unabridged Journals of Sylvia Plath","image_url":"https:\/\/images.gr-assets.com\/books\/1473939372m\/11623.jpg","authors":"Sylvia Plath, Karen V. Kukil"},{"book_id":11650,"title":"American Pastoral (The American Trilogy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1203002984m\/11650.jpg","authors":"Philip Roth"},{"book_id":11666,"title":"Rabbit at Rest (Rabbit Angstrom #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1320394471m\/11666.jpg","authors":"John Updike"},{"book_id":11686,"title":"The Stories of John Cheever","image_url":"https:\/\/images.gr-assets.com\/books\/1339732173m\/11686.jpg","authors":"John Cheever"},{"book_id":11690,"title":"Istanbul: Memories and the City","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Orhan Pamuk"},{"book_id":11691,"title":"Snow","image_url":"https:\/\/images.gr-assets.com\/books\/1357684424m\/11691.jpg","authors":"Orhan Pamuk, Maureen Freely"},{"book_id":11711,"title":"Vernon God Little","image_url":"https:\/\/images.gr-assets.com\/books\/1339082247m\/11711.jpg","authors":"D.B.C. Pierre"},{"book_id":11713,"title":"The English Patient","image_url":"https:\/\/images.gr-assets.com\/books\/1320527907m\/11713.jpg","authors":"Michael Ondaatje"},{"book_id":11734,"title":"The Human Stain (The American Trilogy, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Philip Roth"},{"book_id":11741,"title":"Housekeeping","image_url":"https:\/\/images.gr-assets.com\/books\/1327882949m\/11741.jpg","authors":"Marilynne Robinson"},{"book_id":11761,"title":"Underworld","image_url":"https:\/\/images.gr-assets.com\/books\/1334304280m\/11761.jpg","authors":"Don DeLillo"},{"book_id":11762,"title":"White Noise","image_url":"https:\/\/images.gr-assets.com\/books\/1327934706m\/11762.jpg","authors":"Don DeLillo"},{"book_id":11768,"title":"The Hotel New Hampshire","image_url":"https:\/\/images.gr-assets.com\/books\/1318013543m\/11768.jpg","authors":"John Irving"},{"book_id":11824,"title":"The Whipping Boy","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sid Fleischman, Peter S\u00eds"},{"book_id":11831,"title":"Dicey's Song (Tillerman Cycle, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Cynthia Voigt"},{"book_id":11899,"title":"The Hours","image_url":"https:\/\/images.gr-assets.com\/books\/1479663379m\/11899.jpg","authors":"Michael Cunningham"},{"book_id":11901,"title":"The Witching Hour (Lives of the Mayfair Witches, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327289387m\/11901.jpg","authors":"Anne Rice"},{"book_id":11908,"title":"The Adventures of Augie March","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Saul Bellow, Christopher Hitchens"},{"book_id":11915,"title":"Broken (Women of the Otherworld, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1330706568m\/11915.jpg","authors":"Kelley Armstrong"},{"book_id":11918,"title":"Bitten (Women of the Otherworld, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1306101770m\/11918.jpg","authors":"Kelley Armstrong"},{"book_id":11919,"title":"Haunted (Women of the Otherworld, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1432874286m\/11919.jpg","authors":"Kelley Armstrong"},{"book_id":11922,"title":"Stolen (Women of the Otherworld, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1300923278m\/11922.jpg","authors":"Kelley Armstrong"},{"book_id":11987,"title":"The Myth of Sisyphus and Other Essays","image_url":"https:\/\/images.gr-assets.com\/books\/1401656886m\/11987.jpg","authors":"Albert Camus, Justin O'Brien"},{"book_id":11989,"title":"The Plague","image_url":"https:\/\/images.gr-assets.com\/books\/1342837610m\/11989.jpg","authors":"Albert Camus, Stuart Gilbert"},{"book_id":11991,"title":"The Fall","image_url":"https:\/\/images.gr-assets.com\/books\/1467904855m\/11991.jpg","authors":"Albert Camus, Justin O'Brien"},{"book_id":12007,"title":"Use of Weapons (Culture, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Iain M. Banks"},{"book_id":12009,"title":"The Algebraist","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Iain M. Banks"},{"book_id":12013,"title":"Excession (Culture, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1288930712m\/12013.jpg","authors":"Iain M. Banks"},{"book_id":12016,"title":"Look to Windward (Culture, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1288930978m\/12016.jpg","authors":"Iain M. Banks"},{"book_id":12017,"title":"Inversions (Culture, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1288930844m\/12017.jpg","authors":"Iain M. Banks"},{"book_id":12021,"title":"The Crow Road","image_url":"https:\/\/images.gr-assets.com\/books\/1330063373m\/12021.jpg","authors":"Iain Banks"},{"book_id":12067,"title":"Good Omens: The Nice and Accurate Prophecies of Agnes Nutter, Witch","image_url":"https:\/\/images.gr-assets.com\/books\/1392528568m\/12067.jpg","authors":"Terry Pratchett, Neil Gaiman"},{"book_id":12073,"title":"Philosophical Investigations","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ludwig Wittgenstein, G.E.M. Anscombe"},{"book_id":12075,"title":"Tractatus Logico-Philosophicus","image_url":"https:\/\/images.gr-assets.com\/books\/1396830687m\/12075.jpg","authors":"Ludwig Wittgenstein"},{"book_id":12083,"title":"Long Day's Journey Into Night","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Eugene O'Neill"},{"book_id":12125,"title":"Homecoming (Tillerman Cycle, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Cynthia Voigt"},{"book_id":12194,"title":"Lord Jim","image_url":"https:\/\/images.gr-assets.com\/books\/1372366969m\/12194.jpg","authors":"Joseph Conrad"},{"book_id":12204,"title":"The Road Not Taken and Other Poems","image_url":"https:\/\/images.gr-assets.com\/books\/1415677882m\/12204.jpg","authors":"Robert Frost"},{"book_id":12220,"title":"A Streetcar Named Desire","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tennessee Williams"},{"book_id":12296,"title":"The Scarlet Letter","image_url":"https:\/\/images.gr-assets.com\/books\/1404810944m\/12296.jpg","authors":"Nathaniel Hawthorne, Thomas E. Connolly, Nina Baym"},{"book_id":12321,"title":"Beyond Good and Evil","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Friedrich Nietzsche, R.J. Hollingdale, Michael Tanner"},{"book_id":12349,"title":"My Year of Meats","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ruth Ozeki"},{"book_id":12357,"title":"Take the Cannoli","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sarah Vowell"},{"book_id":12358,"title":"The Partly Cloudy Patriot","image_url":"https:\/\/images.gr-assets.com\/books\/1430720573m\/12358.jpg","authors":"Sarah Vowell, Katherine Streeter"},{"book_id":12374,"title":"Independence Day","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Richard Ford"},{"book_id":12395,"title":"Journey to the End of the Night","image_url":"https:\/\/images.gr-assets.com\/books\/1462934409m\/12395.jpg","authors":"Louis-Ferdinand C\u00e9line, Ralph Manheim, William T. Vollmann"},{"book_id":12448,"title":"Look Homeward, Angel","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Thomas Wolfe"},{"book_id":12467,"title":"The Naked and the Dead","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Norman Mailer"},{"book_id":12468,"title":"The Executioner's Song","image_url":"https:\/\/images.gr-assets.com\/books\/1325755176m\/12468.jpg","authors":"Norman Mailer"},{"book_id":12497,"title":"No Country for Old Men","image_url":"https:\/\/images.gr-assets.com\/books\/1443231179m\/12497.jpg","authors":"Cormac McCarthy"},{"book_id":12499,"title":"Belly Laughs: The Naked Truth About Pregnancy and Childbirth","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jenny McCarthy"},{"book_id":12505,"title":"The Idiot","image_url":"https:\/\/images.gr-assets.com\/books\/1327865902m\/12505.jpg","authors":"Fyodor Dostoyevsky, Constance Garnett, Alan Myers, Joseph Frank, Anna Brailovsky"},{"book_id":12527,"title":"Pilgrim at Tinker Creek","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Annie Dillard"},{"book_id":12535,"title":"Plan B: Further Thoughts on Faith","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anne Lamott"},{"book_id":12540,"title":"Operating Instructions: A Journal of My Son's First Year","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anne Lamott"},{"book_id":12542,"title":"Grace (Eventually): Thoughts on Faith","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anne Lamott"},{"book_id":12543,"title":"Bird by Bird: Some Instructions on Writing and Life","image_url":"https:\/\/images.gr-assets.com\/books\/1394996112m\/12543.jpg","authors":"Anne Lamott"},{"book_id":12555,"title":"The Bonesetter's Daughter","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Amy Tan"},{"book_id":12557,"title":"The Kitchen God's Wife","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Amy Tan"},{"book_id":12609,"title":"The Spirit Catches You and You Fall Down: A Hmong Child, Her American Doctors, and the Collision of Two Cultures","image_url":"https:\/\/images.gr-assets.com\/books\/1432610033m\/12609.jpg","authors":"Anne Fadiman"},{"book_id":12617,"title":"Manufacturing Consent: The Political Economy of the Mass Media","image_url":"https:\/\/images.gr-assets.com\/books\/1222383663m\/12617.jpg","authors":"Noam Chomsky, Edward S. Herman"},{"book_id":12651,"title":"The Social Contract","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jean-Jacques Rousseau, Maurice Cranston"},{"book_id":12657,"title":"The Source","image_url":"https:\/\/images.gr-assets.com\/books\/1412531751m\/12657.jpg","authors":"James A. Michener"},{"book_id":12658,"title":"Hawaii","image_url":"https:\/\/images.gr-assets.com\/books\/1415585664m\/12658.jpg","authors":"James A. Michener"},{"book_id":12659,"title":"Texas","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James A. Michener"},{"book_id":12661,"title":"Chesapeake","image_url":"https:\/\/images.gr-assets.com\/books\/1421707536m\/12661.jpg","authors":"James A. Michener"},{"book_id":12663,"title":"The Covenant","image_url":"https:\/\/images.gr-assets.com\/books\/1310975573m\/12663.jpg","authors":"James A. Michener"},{"book_id":12691,"title":"Marley and Me: Life and Love With the World's Worst Dog","image_url":"https:\/\/images.gr-assets.com\/books\/1308858322m\/12691.jpg","authors":"John Grogan"},{"book_id":12722,"title":"The Moon Is Down","image_url":"https:\/\/images.gr-assets.com\/books\/1327961310m\/12722.jpg","authors":"John Steinbeck"},{"book_id":12749,"title":"Swann's Way (In Search of Lost Time, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1452956236m\/12749.jpg","authors":"Marcel Proust, Simon Vance, Lydia Davis"},{"book_id":12781,"title":"The Satanic Verses","image_url":"https:\/\/images.gr-assets.com\/books\/1281988101m\/12781.jpg","authors":"Salman Rushdie"},{"book_id":12786,"title":"The City of Falling Angels","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Berendt"},{"book_id":12839,"title":"A Separate Reality","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Carlos Castaneda"},{"book_id":12857,"title":"The Gambler","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Fyodor Dostoyevsky, Constance Garnett, Gary Saul Morson"},{"book_id":12873,"title":"Rebecca","image_url":"https:\/\/images.gr-assets.com\/books\/1327871977m\/12873.jpg","authors":"Daphne du Maurier, Sally Beauman"},{"book_id":12898,"title":"Death of a Salesman","image_url":"https:\/\/images.gr-assets.com\/books\/1469024140m\/12898.jpg","authors":"Arthur Miller"},{"book_id":12914,"title":"The Aeneid","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Virgil, Robert Fitzgerald"},{"book_id":12923,"title":"The Castle of Otranto","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Horace Walpole"},{"book_id":12930,"title":"Messenger (The Giver, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lois Lowry"},{"book_id":12936,"title":"Gathering Blue (The Giver, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lois Lowry"},{"book_id":12938,"title":"King Lear","image_url":"https:\/\/images.gr-assets.com\/books\/1331563731m\/12938.jpg","authors":"William Shakespeare"},{"book_id":12948,"title":"The Turn of the Screw","image_url":"https:\/\/images.gr-assets.com\/books\/1443203592m\/12948.jpg","authors":"Henry James"},{"book_id":12957,"title":"Much Ado About Nothing","image_url":"https:\/\/images.gr-assets.com\/books\/1327885569m\/12957.jpg","authors":"William Shakespeare, Barbara A. Mowat, Paul Werstine, Gail Kern Paster, Robert Jackson"},{"book_id":12967,"title":"Winter's Tale","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mark Helprin"},{"book_id":12985,"title":"The Tempest","image_url":"https:\/\/images.gr-assets.com\/books\/1327793692m\/12985.jpg","authors":"William Shakespeare"},{"book_id":12996,"title":"Othello","image_url":"https:\/\/images.gr-assets.com\/books\/1459795105m\/12996.jpg","authors":"William Shakespeare"},{"book_id":13006,"title":"Julius Caesar","image_url":"https:\/\/images.gr-assets.com\/books\/1354574927m\/13006.jpg","authors":"William Shakespeare, Roma Gill"},{"book_id":13020,"title":"King Henry IV, Part 1 (Wars of the Roses, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"William Shakespeare, David Scott Kastan"},{"book_id":13023,"title":"Alice in Wonderland","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jane Carruth, Lewis Carroll, Rene Cloke"},{"book_id":13060,"title":"Nature Girl","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Carl Hiaasen"},{"book_id":13061,"title":"Stormy Weather","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Carl Hiaasen"},{"book_id":13062,"title":"Skin Tight (Mick Stranahan, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Carl Hiaasen"},{"book_id":13063,"title":"Basket Case","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Carl Hiaasen"},{"book_id":13064,"title":"Tourist Season","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Carl Hiaasen"},{"book_id":13065,"title":"Native Tongue (Skink, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Carl Hiaasen"},{"book_id":13066,"title":"Sick Puppy","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Carl Hiaasen"},{"book_id":13067,"title":"Flush","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Carl Hiaasen"},{"book_id":13068,"title":"Double Whammy","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Carl Hiaasen"},{"book_id":13074,"title":"Strip Tease","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Carl Hiaasen"},{"book_id":13079,"title":"Skinny Dip","image_url":"https:\/\/images.gr-assets.com\/books\/1375588741m\/13079.jpg","authors":"Carl Hiaasen"},{"book_id":13083,"title":"Hoot","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Carl Hiaasen"},{"book_id":13103,"title":"The Celestine Prophecy (Celestine Prophecy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1341360412m\/13103.jpg","authors":"James Redfield"},{"book_id":13105,"title":"The Tenth Insight: Holding the Vision (Celestine Prophecy, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Redfield"},{"book_id":13128,"title":"Cross (Alex Cross, #12)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Patterson"},{"book_id":13130,"title":"Judge & Jury","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Patterson, Andrew Gross"},{"book_id":13131,"title":"The 6th Target (Women's Murder Club, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1336275870m\/13131.jpg","authors":"James Patterson, Maxine Paetro"},{"book_id":13132,"title":"3rd Degree (Women's Murder Club, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Patterson, Andrew Gross"},{"book_id":13133,"title":"The Quickie","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Patterson, Michael Ledwidge"},{"book_id":13134,"title":"You've Been Warned","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Patterson, Howard Roughan"},{"book_id":13136,"title":"2nd Chance (Women's Murder Club, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Patterson, Andrew Gross"},{"book_id":13137,"title":"1st to Die (Women's Murder Club, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Patterson"},{"book_id":13139,"title":"School's Out\u2014Forever (Maximum Ride, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1346079917m\/13139.jpg","authors":"James Patterson"},{"book_id":13140,"title":"Jack & Jill (Alex Cross, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Patterson"},{"book_id":13143,"title":"Pop Goes the Weasel (Alex Cross, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Patterson"},{"book_id":13145,"title":"Along Came a Spider (Alex Cross, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Patterson"},{"book_id":13147,"title":"Honeymoon (Honeymoon, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Patterson, Howard Roughan"},{"book_id":13148,"title":"Kiss the Girls (Alex Cross, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Patterson"},{"book_id":13151,"title":"London Bridges (Alex Cross, #10)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Patterson"},{"book_id":13152,"title":"The Angel Experiment (Maximum Ride, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1339277875m\/13152.jpg","authors":"James Patterson"},{"book_id":13153,"title":"Hide and Seek","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Patterson"},{"book_id":13157,"title":"The Jester","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Patterson, Andrew Gross"},{"book_id":13162,"title":"When the Wind Blows (When the Wind Blows, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Patterson"},{"book_id":13168,"title":"Runaway Ralph (Ralph S. Mouse, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1327883411m\/13168.jpg","authors":"Beverly Cleary"},{"book_id":13214,"title":"I Know Why the Caged Bird Sings","image_url":"https:\/\/images.gr-assets.com\/books\/1327957927m\/13214.jpg","authors":"Maya Angelou"},{"book_id":13235,"title":"The Complete Stories and Poems","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lewis Carroll"},{"book_id":13258,"title":"What Was She Thinking? [Notes on a Scandal]","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Zo\u00eb Heller"},{"book_id":13270,"title":"Poetics","image_url":"https:\/\/images.gr-assets.com\/books\/1348161995m\/13270.jpg","authors":"Aristotle, Malcolm Heath"},{"book_id":13350,"title":"Eragon & Eldest (Inheritance, #1-2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Christopher Paolini"},{"book_id":13360,"title":"Battlefield of the Mind: Winning the Battle in Your Mind","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Joyce Meyer"},{"book_id":13374,"title":"A Complicated Kindness","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Miriam Toews"},{"book_id":13376,"title":"The House of the Scorpion (Matteo Alacran, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1401734230m\/13376.jpg","authors":"Nancy Farmer"},{"book_id":13440,"title":"Skeleton Crew","image_url":"https:\/\/images.gr-assets.com\/books\/1271861632m\/13440.jpg","authors":"Stephen King"},{"book_id":13451,"title":"Storm of the Century: An Original Screenplay","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Stephen King"},{"book_id":13496,"title":"A Game of Thrones (A Song of Ice and Fire, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1436732693m\/13496.jpg","authors":"George R.R. Martin"},{"book_id":13497,"title":"A Feast for Crows (A Song of Ice and Fire, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1429538615m\/13497.jpg","authors":"George R.R. Martin"},{"book_id":13501,"title":"The Hedge Knight (The Hedge Knight Graphic Novels, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1443806558m\/13501.jpg","authors":"Ben Avery, Mike S. Miller, George R.R. Martin"},{"book_id":13521,"title":"Son of a Witch (The Wicked Years, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1370992595m\/13521.jpg","authors":"Gregory Maguire, Douglas Smith"},{"book_id":13529,"title":"March","image_url":"https:\/\/images.gr-assets.com\/books\/1327935441m\/13529.jpg","authors":"Geraldine Brooks"},{"book_id":13570,"title":"Tsubasa: RESERVoir CHRoNiCLE, Vol. 01","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"CLAMP, Anthony Gerard"},{"book_id":13614,"title":"Death Note, Vol. 8: Target (Death Note, #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1487897453m\/13614.jpg","authors":"Tsugumi Ohba, Takeshi Obata"},{"book_id":13615,"title":"Death Note, Vol. 1: Boredom (Death Note, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1419952134m\/13615.jpg","authors":"Tsugumi Ohba, Takeshi Obata"},{"book_id":13616,"title":"Death Note, Vol. 4: Love (Death Note, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1432686076m\/13616.jpg","authors":"Tsugumi Ohba, Takeshi Obata"},{"book_id":13617,"title":"Death Note, Vol. 5: Whiteout (Death Note, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1449779269m\/13617.jpg","authors":"Tsugumi Ohba, Takeshi Obata"},{"book_id":13618,"title":"Death Note, Vol. 3: Hard Run (Death Note, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1419952370m\/13618.jpg","authors":"Tsugumi Ohba, Takeshi Obata"},{"book_id":13619,"title":"Death Note, Vol. 2: Confluence (Death Note, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1419952210m\/13619.jpg","authors":"Tsugumi Ohba, Takeshi Obata"},{"book_id":13620,"title":"Death Note, Vol. 6: Give-and-Take (Death Note, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1485574610m\/13620.jpg","authors":"Tsugumi Ohba, Takeshi Obata"},{"book_id":13621,"title":"Death Note, Vol. 7: Zero (Death Note, #7)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tsugumi Ohba, Takeshi Obata"},{"book_id":13642,"title":"A Wizard of Earthsea (Earthsea Cycle, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1353424536m\/13642.jpg","authors":"Ursula K. Le Guin"},{"book_id":13651,"title":"The Dispossessed","image_url":"https:\/\/images.gr-assets.com\/books\/1353467455m\/13651.jpg","authors":"Ursula K. Le Guin"},{"book_id":13658,"title":"The Other Wind (Earthsea Cycle, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1309285821m\/13658.jpg","authors":"Ursula K. Le Guin"},{"book_id":13659,"title":"Tales from Earthsea (Earthsea Cycle, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1309202073m\/13659.jpg","authors":"Ursula K. Le Guin"},{"book_id":13661,"title":"Tehanu (Earthsea Cycle, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ursula K. Le Guin"},{"book_id":13662,"title":"The Tombs of Atuan (Earthsea Cycle, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1417900879m\/13662.jpg","authors":"Ursula K. Le Guin"},{"book_id":13667,"title":"The Farthest Shore (Earthsea Cycle, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ursula K. Le Guin"},{"book_id":13747,"title":"Julie and Julia: 365 Days, 524 Recipes, 1 Tiny Apartment Kitchen: How One Girl Risked Her Marriage, Her Job, and Her Sanity to Master the Art of Living","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Julie Powell"},{"book_id":13809,"title":"Exile's Return (Conclave of Shadows, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1409594776m\/13809.jpg","authors":"Raymond E. Feist"},{"book_id":13810,"title":"Magician: Master (The Riftwar Saga, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1320457190m\/13810.jpg","authors":"Raymond E. Feist"},{"book_id":13811,"title":"Talon of the Silver Hawk (Conclave of Shadows, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1409594805m\/13811.jpg","authors":"Raymond E. Feist"},{"book_id":13812,"title":"Magician: Apprentice (The Riftwar Saga, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1408317983m\/13812.jpg","authors":"Raymond E. Feist"},{"book_id":13813,"title":"A Darkness At Sethanon (The Riftwar Saga, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Raymond E. Feist"},{"book_id":13815,"title":"Servant of the Empire (The Empire Trilogy, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Raymond E. Feist, Janny Wurts"},{"book_id":13817,"title":"Shards of a Broken Crown (The Serpentwar Saga, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Raymond E. Feist"},{"book_id":13821,"title":"Lord of Light","image_url":"https:\/\/images.gr-assets.com\/books\/1330127327m\/13821.jpg","authors":"Roger Zelazny, S\u00f6nmez G\u00fcven"},{"book_id":13829,"title":"Terrier (Beka Cooper, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1398029898m\/13829.jpg","authors":"Tamora Pierce"},{"book_id":13830,"title":"The Woman Who Rides Like a Man (Song of the Lioness, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tamora Pierce"},{"book_id":13831,"title":"Alanna: The First Adventure (Song of the Lioness, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tamora Pierce"},{"book_id":13833,"title":"Emperor Mage (Immortals, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1166573612m\/13833.jpg","authors":"Tamora Pierce"},{"book_id":13834,"title":"The Realms of the Gods (Immortals, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1262375414m\/13834.jpg","authors":"Tamora Pierce"},{"book_id":13835,"title":"In the Hand of the Goddess (Song of the Lioness, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tamora Pierce"},{"book_id":13836,"title":"Wild Magic (Immortals, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1166573613m\/13836.jpg","authors":"Tamora Pierce"},{"book_id":13837,"title":"Lioness Rampant (Song of the Lioness, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1390366673m\/13837.jpg","authors":"Tamora Pierce"},{"book_id":13839,"title":"The Botany of Desire: A Plant's-Eye View of the World","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael Pollan"},{"book_id":13872,"title":"Geek Love","image_url":"https:\/\/images.gr-assets.com\/books\/1366699063m\/13872.jpg","authors":"Katherine Dunn"},{"book_id":13878,"title":"Prince of the Blood (Krondor's Sons, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Raymond E. Feist"},{"book_id":13881,"title":"Rage of a Demon King (The Serpentwar Saga, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Raymond E. Feist"},{"book_id":13888,"title":"Knife of Dreams (Wheel of Time, #11)","image_url":"https:\/\/images.gr-assets.com\/books\/1397856387m\/13888.jpg","authors":"Robert Jordan"},{"book_id":13890,"title":"A Crown of Swords (Wheel of Time, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1358542379m\/13890.jpg","authors":"Robert Jordan"},{"book_id":13891,"title":"Winter's Heart (Wheel of Time, #9)","image_url":"https:\/\/images.gr-assets.com\/books\/1480096268m\/13891.jpg","authors":"Robert Jordan"},{"book_id":13895,"title":"The Fires of Heaven (Wheel of Time, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1327866286m\/13895.jpg","authors":"Robert Jordan"},{"book_id":13912,"title":"A Beautiful Mind","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sylvia Nasar"},{"book_id":13925,"title":"Child of the Prophecy (Sevenwaters, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1343590673m\/13925.jpg","authors":"Juliet Marillier"},{"book_id":13927,"title":"Son of the Shadows (Sevenwaters, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Juliet Marillier"},{"book_id":13928,"title":"Daughter of the Forest (Sevenwaters, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1343589988m\/13928.jpg","authors":"Juliet Marillier"},{"book_id":13929,"title":"Wildwood Dancing (Wildwood, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1393127105m\/13929.jpg","authors":"Juliet Marillier"},{"book_id":13986,"title":"Arrows of the Queen (Heralds of Valdemar, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1296358547m\/13986.jpg","authors":"Mercedes Lackey"},{"book_id":14014,"title":"Arrow's Fall (Heralds of Valdemar, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mercedes Lackey"},{"book_id":14028,"title":"Snow Country","image_url":"https:\/\/images.gr-assets.com\/books\/1474272606m\/14028.jpg","authors":"Yasunari Kawabata, Edward G. Seidensticker"},{"book_id":14050,"title":"The Time Traveler's Wife","image_url":"https:\/\/images.gr-assets.com\/books\/1437728815m\/14050.jpg","authors":"Audrey Niffenegger"},{"book_id":14064,"title":"I Am Legend","image_url":"https:\/\/images.gr-assets.com\/books\/1390170456m\/14064.jpg","authors":"Richard Matheson"},{"book_id":14069,"title":"Throne of Jade (Temeraire, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Naomi Novik"},{"book_id":14082,"title":"Malgudi Days","image_url":"https:\/\/images.gr-assets.com\/books\/1455574981m\/14082.jpg","authors":"R.K. Narayan, Jhumpa Lahiri"},{"book_id":14096,"title":"Wherever You Go, There You Are: Mindfulness Meditation in Everyday Life","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jon Kabat-Zinn"},{"book_id":14118,"title":"Beauty and the Beast (Disney)","image_url":"https:\/\/images.gr-assets.com\/books\/1395619448m\/14118.jpg","authors":"Teddy Slater, Ron Dias, Ric Gonz\u00e1lez"},{"book_id":14142,"title":"The Art of Loving","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Erich Fromm, Peter D. Kramer, Rainer Funk"},{"book_id":14185,"title":"The Three Stigmata of Palmer Eldritch","image_url":"https:\/\/images.gr-assets.com\/books\/1338461946m\/14185.jpg","authors":"Philip K. Dick"},{"book_id":14201,"title":"Jonathan Strange & Mr Norrell","image_url":"https:\/\/images.gr-assets.com\/books\/1357027589m\/14201.jpg","authors":"Susanna Clarke"},{"book_id":14241,"title":"The Liars' Club","image_url":"https:\/\/images.gr-assets.com\/books\/1499665766m\/14241.jpg","authors":"Mary Karr"},{"book_id":14249,"title":"Prodigal Summer","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Barbara Kingsolver"},{"book_id":14250,"title":"Pigs in Heaven","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Barbara Kingsolver"},{"book_id":14280,"title":"Runaway","image_url":"https:\/\/images.gr-assets.com\/books\/1431005856m\/14280.jpg","authors":"Alice Munro"},{"book_id":14295,"title":"Pastoralia","image_url":"https:\/\/images.gr-assets.com\/books\/1348067120m\/14295.jpg","authors":"George Saunders"},{"book_id":14316,"title":"Black Swan Green","image_url":"https:\/\/images.gr-assets.com\/books\/1320562118m\/14316.jpg","authors":"David Mitchell"},{"book_id":14318,"title":"Chronicles, Vol. 1","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bob Dylan"},{"book_id":14358,"title":"A Ring of Endless Light (Austin Family, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1279354664m\/14358.jpg","authors":"Madeleine L'Engle"},{"book_id":14362,"title":"Bless Me, Ultima","image_url":"https:\/\/images.gr-assets.com\/books\/1474056548m\/14362.jpg","authors":"Rudolfo Anaya"},{"book_id":14376,"title":"Einstein's Dreams","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Alan Lightman"},{"book_id":14383,"title":"No Rest for the Wicked (Immortals After Dark #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1357615569m\/14383.jpg","authors":"Kresley Cole"},{"book_id":14384,"title":"A Hunger Like No Other (Immortals After Dark #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1357616154m\/14384.jpg","authors":"Kresley Cole"},{"book_id":14403,"title":"The Story of Ruby Bridges","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert Coles, George Ford"},{"book_id":14404,"title":"The Monkey's Raincoat (Elvis Cole, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert Crais"},{"book_id":14460,"title":"Kitty Goes to Washington (Kitty Norville, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Carrie Vaughn"},{"book_id":14461,"title":"Kitty and the Midnight Hour (Kitty Norville #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Carrie Vaughn"},{"book_id":14469,"title":"Selected Stories","image_url":"https:\/\/images.gr-assets.com\/books\/1328753059m\/14469.jpg","authors":"O. Henry, Victoria Blake"},{"book_id":14480,"title":"Calling Doctor Amelia Bedelia","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Herman Parish, Lynn Sweat"},{"book_id":14481,"title":"Come Back, Amelia Bedelia","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Peggy Parish, Wallace Tripp"},{"book_id":14497,"title":"Neverwhere","image_url":"https:\/\/images.gr-assets.com\/books\/1348747943m\/14497.jpg","authors":"Neil Gaiman"},{"book_id":14498,"title":"Neil Gaiman's Neverwhere","image_url":"https:\/\/images.gr-assets.com\/books\/1309582431m\/14498.jpg","authors":"Mike Carey, Glenn Fabry, Neil Gaiman"},{"book_id":14554,"title":"If Tomorrow Comes (Tracy Whitney Series, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sidney Sheldon"},{"book_id":14570,"title":"Eight Cousins (Eight Cousins, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1328864060m\/14570.jpg","authors":"Louisa May Alcott"},{"book_id":14572,"title":"Peace Is Every Step: The Path of Mindfulness in Everyday Life","image_url":"https:\/\/images.gr-assets.com\/books\/1320544155m\/14572.jpg","authors":"Thich Nhat Hanh, Arnold Kotler, Dalai Lama XIV"},{"book_id":14595,"title":"Please Kill Me: The Uncensored Oral History of Punk","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Legs McNeil, Gillian McCain"},{"book_id":14662,"title":"The Red and the Black","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Stendhal, Roger Gard"},{"book_id":14680,"title":"The Charterhouse of Parma","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Stendhal, Richard Howard, Robert Andrew Parker"},{"book_id":14706,"title":"Faust: First Part","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Johann Wolfgang von Goethe, Peter Salm"},{"book_id":14743,"title":"The God Delusion","image_url":"https:\/\/images.gr-assets.com\/books\/1347220693m\/14743.jpg","authors":"Richard Dawkins"},{"book_id":14748,"title":"Good in Bed (Cannie Shapiro, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327936464m\/14748.jpg","authors":"Jennifer Weiner"},{"book_id":14755,"title":"The Guy Not Taken: Stories","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jennifer Weiner"},{"book_id":14756,"title":"Goodnight Nobody","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jennifer Weiner"},{"book_id":14758,"title":"In Her Shoes","image_url":"https:\/\/images.gr-assets.com\/books\/1435252471m\/14758.jpg","authors":"Jennifer Weiner"},{"book_id":14785,"title":"Chosen Prey (Lucas Davenport, #12)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Sandford"},{"book_id":14817,"title":"A Scanner Darkly","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Philip K. Dick"},{"book_id":14836,"title":"Midnight's Children","image_url":"https:\/\/images.gr-assets.com\/books\/1371063511m\/14836.jpg","authors":"Salman Rushdie"},{"book_id":14839,"title":"Last Man Standing","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Baldacci"},{"book_id":14864,"title":"Plain Truth","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jodi Picoult"},{"book_id":14865,"title":"Vanishing Acts","image_url":"https:\/\/images.gr-assets.com\/books\/1407719603m\/14865.jpg","authors":"Jodi Picoult"},{"book_id":14866,"title":"Nineteen Minutes","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jodi Picoult"},{"book_id":14891,"title":"A Tree Grows in Brooklyn","image_url":"https:\/\/images.gr-assets.com\/books\/1327883484m\/14891.jpg","authors":"Betty Smith"},{"book_id":14905,"title":"The Complete Novels","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jane Austen"},{"book_id":14935,"title":"Sense and Sensibility","image_url":"https:\/\/images.gr-assets.com\/books\/1397245675m\/14935.jpg","authors":"Jane Austen, Tony Tanner, Ros Ballaster"},{"book_id":14940,"title":"Who's Afraid of Virginia Woolf?","image_url":"https:\/\/images.gr-assets.com\/books\/1327962277m\/14940.jpg","authors":"Edward Albee"},{"book_id":14942,"title":"Mrs. Dalloway","image_url":"https:\/\/images.gr-assets.com\/books\/1479336522m\/14942.jpg","authors":"Virginia Woolf, Maureen Howard"},{"book_id":14963,"title":"A Wedding in December","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anita Shreve"},{"book_id":14964,"title":"Body Surfing","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anita Shreve"},{"book_id":14965,"title":"Light on Snow","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anita Shreve"},{"book_id":14975,"title":"Labyrinth (Languedoc, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1312498906m\/14975.jpg","authors":"Kate Mosse"},{"book_id":14990,"title":"Spook: Science Tackles the Afterlife","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mary Roach"},{"book_id":14995,"title":"Odd Thomas (Odd Thomas, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dean Koontz"},{"book_id":14996,"title":"Brother Odd (Odd Thomas, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dean Koontz"},{"book_id":15014,"title":"Crucial Conversations: Tools for Talking When Stakes Are High","image_url":"https:\/\/images.gr-assets.com\/books\/1497193248m\/15014.jpg","authors":"Kerry Patterson, Joseph Grenny, Ron McMillan, Al Switzler, Stephen R. Covey"},{"book_id":15015,"title":"Conversations with God: An Uncommon Dialogue, Book 1","image_url":"https:\/\/images.gr-assets.com\/books\/1327944254m\/15015.jpg","authors":"Neale Donald Walsch"},{"book_id":15018,"title":"Conversations With God: An Uncommon Dialogue, Book 3","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Neale Donald Walsch"},{"book_id":15019,"title":"Conversations With God: An Uncommon Dialogue, Book 2","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Neale Donald Walsch"},{"book_id":15047,"title":"The Passion","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jeanette Winterson"},{"book_id":15050,"title":"Sexing the Cherry","image_url":"https:\/\/images.gr-assets.com\/books\/1328824090m\/15050.jpg","authors":"Jeanette Winterson"},{"book_id":15054,"title":"Written on the Body","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jeanette Winterson"},{"book_id":15055,"title":"Oranges Are Not the Only Fruit","image_url":"https:\/\/images.gr-assets.com\/books\/1267717580m\/15055.jpg","authors":"Jeanette Winterson"},{"book_id":15096,"title":"Five Quarters of the Orange","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Joanne Harris"},{"book_id":15101,"title":"Blackberry Wine","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Joanne Harris"},{"book_id":15154,"title":"The Collectors (Camel Club, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Baldacci"},{"book_id":15157,"title":"Saving Faith","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Baldacci"},{"book_id":15158,"title":"The Camel Club (Camel Club, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Baldacci"},{"book_id":15159,"title":"Absolute Power","image_url":"https:\/\/images.gr-assets.com\/books\/1328399707m\/15159.jpg","authors":"David Baldacci"},{"book_id":15161,"title":"The Ladies of Grace Adieu and Other Stories","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Susanna Clarke, Charles Vess"},{"book_id":15171,"title":"A Girl Named Zippy","image_url":"https:\/\/images.gr-assets.com\/books\/1334082673m\/15171.jpg","authors":"Haven Kimmel"},{"book_id":15195,"title":"The Complete Maus (Maus, #1-2)","image_url":"https:\/\/images.gr-assets.com\/books\/1327354180m\/15195.jpg","authors":"Art Spiegelman"},{"book_id":15196,"title":"Maus I: A Survivor's Tale: My Father Bleeds History (Maus, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327884972m\/15196.jpg","authors":"Art Spiegelman"},{"book_id":15197,"title":"Maus II: A Survivor's Tale: And Here My Troubles Began (Maus, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1327887479m\/15197.jpg","authors":"Art Spiegelman"},{"book_id":15241,"title":"The Two Towers (The Lord of the Rings, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1298415523m\/15241.jpg","authors":"J.R.R. Tolkien"},{"book_id":15309,"title":"The Laughing Corpse (Anita Blake, Vampire Hunter, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Laurell K. Hamilton"},{"book_id":15398,"title":"The Last Days of Dogtown","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anita Diamant"},{"book_id":15433,"title":"Night Mare (Xanth, #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Piers Anthony"},{"book_id":15447,"title":"The Source of Magic (Xanth, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Piers Anthony"},{"book_id":15547,"title":"Magic Kingdom For Sale\/Sold (Magic Kingdom of Landover, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Terry Brooks"},{"book_id":15549,"title":"Armageddon's Children (Genesis of Shannara, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Terry Brooks"},{"book_id":15557,"title":"Jarka Ruus (High Druid of Shannara, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Terry Brooks"},{"book_id":15559,"title":"Morgawr (The Voyage of the Jerle Shannara, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1341521219m\/15559.jpg","authors":"Terry Brooks"},{"book_id":15560,"title":"Ilse Witch (Voyage of the Jerle Shannara, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1403187876m\/15560.jpg","authors":"Terry Brooks"},{"book_id":15561,"title":"Wizard at Large (Magic Kingdom of Landover, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Terry Brooks"},{"book_id":15566,"title":"The Elf Queen of Shannara (Heritage of Shannara, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Terry Brooks"},{"book_id":15567,"title":"The Wishsong of Shannara (The Original Shannara Trilogy, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1328325115m\/15567.jpg","authors":"Terry Brooks"},{"book_id":15568,"title":"The Druid of Shannara (Heritage of Shannara, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Terry Brooks"},{"book_id":15575,"title":"The Sword of Shannara (The Original Shannara Trilogy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1470063017m\/15575.jpg","authors":"Terry Brooks"},{"book_id":15595,"title":"The Midwife's Apprentice","image_url":"https:\/\/images.gr-assets.com\/books\/1305983479m\/15595.jpg","authors":"Karen Cushman"},{"book_id":15613,"title":"Billy Budd, Sailor","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Herman Melville"},{"book_id":15622,"title":"Native Son","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Richard Wright"},{"book_id":15638,"title":"Cyrano de Bergerac","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Edmond Rostand, Eteel Lawson, Lowell Bair"},{"book_id":15645,"title":"Inferno (The Divine Comedy #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1333579470m\/15645.jpg","authors":"Dante Alighieri, Anthony M. Esolen"},{"book_id":15654,"title":"The Stranger Beside Me: Ted Bundy The Shocking Inside Story","image_url":"https:\/\/images.gr-assets.com\/books\/1330072383m\/15654.jpg","authors":"Ann Rule"},{"book_id":15655,"title":"The Kindness of Strangers","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Katrina Kittle"},{"book_id":15673,"title":"Wayside School Gets A Little Stranger (Wayside School #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Louis Sachar"},{"book_id":15676,"title":"Strangers","image_url":"https:\/\/images.gr-assets.com\/books\/1308458895m\/15676.jpg","authors":"Dean Koontz"},{"book_id":15677,"title":"Strangers on a Train","image_url":"https:\/\/images.gr-assets.com\/books\/1331234879m\/15677.jpg","authors":"Patricia Highsmith"},{"book_id":15719,"title":"Marvel 1602","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Neil Gaiman, Andy Kubert, Richard Isanove, Peter Sanderson"},{"book_id":15746,"title":"One Door Away from Heaven","image_url":"https:\/\/images.gr-assets.com\/books\/1308459846m\/15746.jpg","authors":"Dean Koontz"},{"book_id":15752,"title":"By the Light of the Moon","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dean Koontz"},{"book_id":15760,"title":"Dark Rivers of the Heart","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dean Koontz"},{"book_id":15764,"title":"The Amateur Marriage","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anne Tyler"},{"book_id":15769,"title":"The Bourne Supremacy (Jason Bourne, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1335860600m\/15769.jpg","authors":"Robert Ludlum"},{"book_id":15779,"title":"Sideways Stories from Wayside School (Wayside School #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Louis Sachar, Adam McCauley"},{"book_id":15836,"title":"Fugitive Pieces","image_url":"https:\/\/images.gr-assets.com\/books\/1327866798m\/15836.jpg","authors":"Anne Michaels"},{"book_id":15852,"title":"Relativity: The Special and the General Theory","image_url":"https:\/\/images.gr-assets.com\/books\/1420607613m\/15852.jpg","authors":"Albert Einstein, Nigel Calder, Robert W. Lawson"},{"book_id":15858,"title":"Mirror Mirror","image_url":"https:\/\/images.gr-assets.com\/books\/1407710336m\/15858.jpg","authors":"Gregory Maguire"},{"book_id":15860,"title":"State of Fear","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael Crichton"},{"book_id":15881,"title":"Harry Potter and the Chamber of Secrets (Harry Potter, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1474169725m\/15881.jpg","authors":"J.K. Rowling, Mary GrandPr\u00e9"},{"book_id":15888,"title":"An Instance of the Fingerpost","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Iain Pears"},{"book_id":15904,"title":"The Sunday Philosophy Club (Isabel Dalhousie, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Alexander McCall Smith"},{"book_id":15924,"title":"At First Sight (Jeremy Marsh & Lexie Darnell, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nicholas Sparks"},{"book_id":15925,"title":"The Guardian","image_url":"https:\/\/images.gr-assets.com\/books\/1388195339m\/15925.jpg","authors":"Nicholas Sparks"},{"book_id":15926,"title":"Nights in Rodanthe","image_url":"https:\/\/images.gr-assets.com\/books\/1328145638m\/15926.jpg","authors":"Nicholas Sparks"},{"book_id":15931,"title":"The Notebook (The Notebook, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1385738917m\/15931.jpg","authors":"Nicholas Sparks"},{"book_id":15957,"title":"The Patron Saint of Liars","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ann Patchett"},{"book_id":15997,"title":"Paradise Lost","image_url":"https:\/\/images.gr-assets.com\/books\/1455618673m\/15997.jpg","authors":"John Milton, John Leonard"},{"book_id":16006,"title":"Paradise (Second Opportunities, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Judith McNaught"},{"book_id":16012,"title":"Paradise Kiss, Vol. 1 (Paradise Kiss, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ai Yazawa"},{"book_id":16055,"title":"The Magician's Assistant","image_url":"https:\/\/images.gr-assets.com\/books\/1327936126m\/16055.jpg","authors":"Ann Patchett"},{"book_id":16059,"title":"The Dive From Clausen's Pier","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ann Packer"},{"book_id":16076,"title":"The Awakening and Selected Stories","image_url":"https:\/\/images.gr-assets.com\/books\/1403398895m\/16076.jpg","authors":"Kate Chopin, Cynthia Brantley Johnson, Alyssa Harad"},{"book_id":16130,"title":"Alexander Hamilton","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ron Chernow"},{"book_id":16176,"title":"The Red Queen: Sex and the Evolution of Human Nature","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Matt Ridley"},{"book_id":16178,"title":"Dairy Queen (Dairy Queen, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Catherine Gilbert Murdock"},{"book_id":16180,"title":"The Boleyn Inheritance (The Plantagenet and Tudor Novels, #10)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Philippa Gregory"},{"book_id":16181,"title":"The Constant Princess (The Plantagenet and Tudor Novels, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1355932704m\/16181.jpg","authors":"Philippa Gregory"},{"book_id":16183,"title":"The Virgin's Lover (The Plantagenet and Tudor Novels, #13)","image_url":"https:\/\/images.gr-assets.com\/books\/1441424964m\/16183.jpg","authors":"Philippa Gregory"},{"book_id":16188,"title":"Wideacre (The Wideacre Trilogy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1289170133m\/16188.jpg","authors":"Philippa Gregory"},{"book_id":16200,"title":"Ella Minnow Pea: A Novel in Letters","image_url":"https:\/\/images.gr-assets.com\/books\/1479697890m\/16200.jpg","authors":"Mark Dunn"},{"book_id":16204,"title":"Daisy Miller","image_url":"https:\/\/images.gr-assets.com\/books\/1327911289m\/16204.jpg","authors":"Henry James"},{"book_id":16213,"title":"The Hot Zone: The Terrifying True Story of the Origins of the Ebola Virus","image_url":"https:\/\/images.gr-assets.com\/books\/1413747743m\/16213.jpg","authors":"Richard Preston"},{"book_id":16235,"title":"Sister of My Heart","image_url":"https:\/\/images.gr-assets.com\/books\/1403188554m\/16235.jpg","authors":"Chitra Banerjee Divakaruni"},{"book_id":16243,"title":"Case Histories (Jackson Brodie #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1451442186m\/16243.jpg","authors":"Kate Atkinson"},{"book_id":16249,"title":"Angry Housewives Eating Bon Bons","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lorna Landvik"},{"book_id":16255,"title":"Tales of the City (Tales of the City, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1483075229m\/16255.jpg","authors":"Armistead Maupin"},{"book_id":16256,"title":"More Tales of the City (Tales of the City, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1347443502m\/16256.jpg","authors":"Armistead Maupin"},{"book_id":16286,"title":"The Magus","image_url":"https:\/\/images.gr-assets.com\/books\/1441323311m\/16286.jpg","authors":"John Fowles"},{"book_id":16297,"title":"Cards on the Table (Hercule Poirot, #15)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Agatha Christie"},{"book_id":16298,"title":"A Murder Is Announced (Miss Marple, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Agatha Christie"},{"book_id":16299,"title":"And Then There Were None","image_url":"https:\/\/images.gr-assets.com\/books\/1391120695m\/16299.jpg","authors":"Agatha Christie"},{"book_id":16300,"title":"Sleeping Murder (Miss Marple, #13)","image_url":"https:\/\/images.gr-assets.com\/books\/1308808135m\/16300.jpg","authors":"Agatha Christie"},{"book_id":16304,"title":"Murder on the Orient Express (Hercule Poirot, #10)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Agatha Christie"},{"book_id":16305,"title":"Evil Under the Sun (Hercule Poirot, #23)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Agatha Christie"},{"book_id":16307,"title":"Hallowe'en Party (Hercule Poirot, #36)","image_url":"https:\/\/images.gr-assets.com\/books\/1295673439m\/16307.jpg","authors":"Agatha Christie"},{"book_id":16312,"title":"One, Two, Buckle My Shoe (Hercule Poirot, #22)","image_url":"https:\/\/images.gr-assets.com\/books\/1328750172m\/16312.jpg","authors":"Agatha Christie, Hugh Fraser"},{"book_id":16315,"title":"Crooked House","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Agatha Christie"},{"book_id":16316,"title":"The Big Four (Hercule Poirot, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1372506728m\/16316.jpg","authors":"Agatha Christie"},{"book_id":16319,"title":"The Body in the Library (Miss Marple, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Agatha Christie"},{"book_id":16322,"title":"The A.B.C. Murders (Hercule Poirot, #13)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Agatha Christie"},{"book_id":16326,"title":"Death in the Clouds (Hercule Poirot, #12)","image_url":"https:\/\/images.gr-assets.com\/books\/1308808359m\/16326.jpg","authors":"Agatha Christie"},{"book_id":16328,"title":"The Murder of Roger Ackroyd (Hercule Poirot, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Agatha Christie"},{"book_id":16331,"title":"Murder at the Vicarage (Miss Marple, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Agatha Christie"},{"book_id":16333,"title":"At Bertram's Hotel (Miss Marple, #11)","image_url":"https:\/\/images.gr-assets.com\/books\/1375949033m\/16333.jpg","authors":"Agatha Christie"},{"book_id":16335,"title":"The Mystery of the Blue Train (Hercule Poirot, #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Agatha Christie"},{"book_id":16341,"title":"The Moving Finger (Miss Marple, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1396227246m\/16341.jpg","authors":"Agatha Christie"},{"book_id":16342,"title":"Cat Among the Pigeons (Hercule Poirot, #32)","image_url":"https:\/\/images.gr-assets.com\/books\/1275665326m\/16342.jpg","authors":"Agatha Christie"},{"book_id":16343,"title":"The Mysterious Affair at Styles (Hercule Poirot, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Agatha Christie, \u03a1\u03bf\u03b6\u03af\u03c4\u03b1 \u03a3\u03ce\u03ba\u03bf\u03c5"},{"book_id":16349,"title":"Hercule Poirot's Christmas (Hercule Poirot, #20)","image_url":"https:\/\/images.gr-assets.com\/books\/1308808460m\/16349.jpg","authors":"Agatha Christie"},{"book_id":16360,"title":"Murder in Mesopotamia (Hercule Poirot, #14)","image_url":"https:\/\/images.gr-assets.com\/books\/1308808558m\/16360.jpg","authors":"Agatha Christie"},{"book_id":16363,"title":"Appointment with Death (Hercule Poirot, #19)","image_url":"https:\/\/images.gr-assets.com\/books\/1308808730m\/16363.jpg","authors":"Agatha Christie"},{"book_id":16372,"title":"The Mirror Crack'd from Side to Side (Miss Marple, #9)","image_url":"https:\/\/images.gr-assets.com\/books\/1466335226m\/16372.jpg","authors":"Agatha Christie"},{"book_id":16387,"title":"Carry on, Jeeves (Jeeves, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1358970388m\/16387.jpg","authors":"P.G. Wodehouse"},{"book_id":16396,"title":"The Inimitable Jeeves (Jeeves, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"P.G. Wodehouse"},{"book_id":16424,"title":"Peril at End House (Hercule Poirot, #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1327938128m\/16424.jpg","authors":"Agatha Christie"},{"book_id":16429,"title":"The Husband","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dean Koontz"},{"book_id":16431,"title":"Sole Survivor","image_url":"https:\/\/images.gr-assets.com\/books\/1308459581m\/16431.jpg","authors":"Dean Koontz"},{"book_id":16433,"title":"Forever Odd (Odd Thomas, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dean Koontz"},{"book_id":16434,"title":"The Taking","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dean Koontz"},{"book_id":16435,"title":"Life Expectancy","image_url":"https:\/\/images.gr-assets.com\/books\/1308458308m\/16435.jpg","authors":"Dean Koontz"},{"book_id":16527,"title":"Daughter of Fortune","image_url":"https:\/\/images.gr-assets.com\/books\/1299666780m\/16527.jpg","authors":"Isabel Allende, Margaret Sayers Peden"},{"book_id":16532,"title":"Of Love and Shadows","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Isabel Allende, Margaret Sayers Peden"},{"book_id":16619,"title":"Democracy in America ","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Alexis de Tocqueville, Isaac Kramnick, Gerald Bevan"},{"book_id":16631,"title":"Steppenwolf","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Hermann Hesse, Basil Creighton"},{"book_id":16634,"title":"The Glass Bead Game","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Hermann Hesse, Richard Winston, Clara Winston, Theodore Ziolkowski"},{"book_id":16640,"title":"The Sorrows of Young Werther","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Johann Wolfgang von Goethe, Burton Pike"},{"book_id":16685,"title":"The Cat Who Walks Through Walls (The World As Myth)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert A. Heinlein"},{"book_id":16690,"title":"The Moon is a Harsh Mistress","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert A. Heinlein"},{"book_id":16696,"title":"The Final Solution","image_url":"https:\/\/images.gr-assets.com\/books\/1407709227m\/16696.jpg","authors":"Michael Chabon, Jay Ryan"},{"book_id":16697,"title":"The Mysteries of Pittsburgh","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael Chabon"},{"book_id":16703,"title":"The Yiddish Policemen's Union","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael Chabon"},{"book_id":16707,"title":"Wonder Boys","image_url":"https:\/\/images.gr-assets.com\/books\/1380670205m\/16707.jpg","authors":"Michael Chabon, Hans Hermann"},{"book_id":16729,"title":"Beach Music","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Pat Conroy"},{"book_id":16735,"title":"The Prince of Tides","image_url":"https:\/\/images.gr-assets.com\/books\/1320541074m\/16735.jpg","authors":"Pat Conroy"},{"book_id":16788,"title":"Fragile Things: Short Fictions and Wonders","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Neil Gaiman"},{"book_id":16790,"title":"Smoke and Mirrors: Short Fiction and Illusions","image_url":"https:\/\/images.gr-assets.com\/books\/1409595076m\/16790.jpg","authors":"Neil Gaiman"},{"book_id":16791,"title":"Death: The High Cost of Living Collected","image_url":"https:\/\/images.gr-assets.com\/books\/1366407293m\/16791.jpg","authors":"Neil Gaiman, Chris Bachalo, Mark Buckingham, Tori Amos"},{"book_id":16793,"title":"Stardust","image_url":"https:\/\/images.gr-assets.com\/books\/1459127484m\/16793.jpg","authors":"Neil Gaiman"},{"book_id":16842,"title":"A Single Man","image_url":"https:\/\/images.gr-assets.com\/books\/1380688373m\/16842.jpg","authors":"Christopher Isherwood"},{"book_id":16884,"title":"The Making of the Atomic Bomb","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Richard Rhodes"},{"book_id":16900,"title":"Civil Disobedience and Other Essays","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Henry David Thoreau"},{"book_id":16902,"title":"Walden","image_url":"https:\/\/images.gr-assets.com\/books\/1465675526m\/16902.jpg","authors":"Henry David Thoreau"},{"book_id":16948,"title":"Children of God (The Sparrow, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1373509005m\/16948.jpg","authors":"Mary Doria Russell"},{"book_id":16951,"title":"When the Lion Feeds (Courtney, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Wilbur Smith"},{"book_id":16981,"title":"Invisible Man","image_url":"https:\/\/images.gr-assets.com\/books\/1352854247m\/16981.jpg","authors":"Ralph Ellison"},{"book_id":16982,"title":"Marvels","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kurt Busiek, Alex Ross"},{"book_id":16992,"title":"Kingdom Come","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mark Waid, Alex Ross, Elliot S. Maggin"},{"book_id":17020,"title":"13 Little Blue Envelopes (Little Blue Envelope, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1375030179m\/17020.jpg","authors":"Maureen Johnson"},{"book_id":17061,"title":"Coraline","image_url":"https:\/\/images.gr-assets.com\/books\/1493497435m\/17061.jpg","authors":"Neil Gaiman"},{"book_id":17125,"title":"One Day in the Life of Ivan Denisovich","image_url":"https:\/\/images.gr-assets.com\/books\/1427731744m\/17125.jpg","authors":"Aleksandr Solzhenitsyn, H.T. Willetts"},{"book_id":17136,"title":"The Time Machine\/The Invisible Man","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"H.G. Wells, Alfred MacAdam"},{"book_id":17143,"title":"Go Tell It on the Mountain","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Baldwin"},{"book_id":17150,"title":"My \u00c1ntonia","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Willa Cather"},{"book_id":17157,"title":"Marie Antoinette: The Journey","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Antonia Fraser"},{"book_id":17162,"title":"The Chocolate War (Chocolate War, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1333120554m\/17162.jpg","authors":"Robert Cormier"},{"book_id":17174,"title":"A Yellow Raft in Blue Water","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael Dorris"},{"book_id":17184,"title":"The Invisible Man","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"H.G. Wells"},{"book_id":17204,"title":"The Friday Night Knitting Club (Friday Night Knitting Club, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kate Jacobs"},{"book_id":17206,"title":"Lady Friday (The Keys to the Kingdom, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1304528767m\/17206.jpg","authors":"Garth Nix"},{"book_id":17208,"title":"Friday","image_url":"https:\/\/images.gr-assets.com\/books\/1315410828m\/17208.jpg","authors":"Robert A. Heinlein"},{"book_id":17214,"title":"Starship Troopers","image_url":"https:\/\/images.gr-assets.com\/books\/1406457252m\/17214.jpg","authors":"Robert A. Heinlein"},{"book_id":17231,"title":"Darkly Dreaming Dexter (Dexter, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1334404607m\/17231.jpg","authors":"Jeff Lindsay"},{"book_id":17245,"title":"Dracula","image_url":"https:\/\/images.gr-assets.com\/books\/1387151694m\/17245.jpg","authors":"Bram Stoker, Nina Auerbach, David J. Skal"},{"book_id":17250,"title":"The Crucible","image_url":"https:\/\/images.gr-assets.com\/books\/1447764813m\/17250.jpg","authors":"Arthur Miller, Christopher Bigsby"},{"book_id":17267,"title":"The Great Divorce","image_url":"https:\/\/images.gr-assets.com\/books\/1166805741m\/17267.jpg","authors":"C.S. Lewis"},{"book_id":17303,"title":"Piercing the Darkness (Darkness, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1308796365m\/17303.jpg","authors":"Frank E. Peretti"},{"book_id":17309,"title":"This Present Darkness (Darkness, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Frank E. Peretti"},{"book_id":17324,"title":"The Visitation","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Frank E. Peretti"},{"book_id":17343,"title":"Till We Have Faces","image_url":"https:\/\/images.gr-assets.com\/books\/1381692105m\/17343.jpg","authors":"C.S. Lewis"},{"book_id":17349,"title":"The Demon-Haunted World: Science as a Candle in the Dark","image_url":"https:\/\/images.gr-assets.com\/books\/1405201597m\/17349.jpg","authors":"Carl Sagan, Ann Druyan"},{"book_id":17461,"title":"Misty of Chincoteague (Misty, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Marguerite Henry, Wesley Dennis"},{"book_id":17478,"title":"Five Go to Smuggler's Top (Famous Five, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1408924745m\/17478.jpg","authors":"Enid Blyton"},{"book_id":17487,"title":"Five Go Adventuring Again (Famous Five, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1408923873m\/17487.jpg","authors":"Enid Blyton"},{"book_id":17488,"title":"Five on a Treasure Island (Famous Five, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1408926754m\/17488.jpg","authors":"Enid Blyton"},{"book_id":17490,"title":"The Faraway Tree Stories (The Faraway Tree #1-3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Enid Blyton"},{"book_id":17491,"title":"The Enchanted Wood (The Faraway Tree, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1428732266m\/17491.jpg","authors":"Enid Blyton"},{"book_id":17529,"title":"Rebecca of Sunnybrook Farm","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kate Douglas Wiggin"},{"book_id":17533,"title":"Rose in Bloom (Eight Cousins, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1344269387m\/17533.jpg","authors":"Louisa May Alcott"},{"book_id":17567,"title":"A Girl of the Limberlost (Limberlost, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Gene Stratton-Porter"},{"book_id":17645,"title":"The Penelopiad","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Margaret Atwood"},{"book_id":17650,"title":"The Robber Bride","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Margaret Atwood"},{"book_id":17660,"title":"The Tommyknockers","image_url":"https:\/\/images.gr-assets.com\/books\/1394210331m\/17660.jpg","authors":"Stephen King"},{"book_id":17683,"title":"Dead Beat (The Dresden Files, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1345667776m\/17683.jpg","authors":"Jim Butcher"},{"book_id":17688,"title":"The Metamorphosis, In the Penal Colony, and Other Stories: The Great Short Works of Franz Kafka","image_url":"https:\/\/images.gr-assets.com\/books\/1446102089m\/17688.jpg","authors":"Franz Kafka"},{"book_id":17689,"title":"Franz Kafka's The Castle (Dramatization)","image_url":"https:\/\/images.gr-assets.com\/books\/1327873352m\/17689.jpg","authors":"David Fishelson, Aaron Leichter, Max Brod, Franz Kafka"},{"book_id":17690,"title":"The Trial","image_url":"https:\/\/images.gr-assets.com\/books\/1320399438m\/17690.jpg","authors":"Franz Kafka, Edwin Muir, Willa Muir, Max Brod"},{"book_id":17716,"title":"Waiting for Godot","image_url":"https:\/\/images.gr-assets.com\/books\/1327910301m\/17716.jpg","authors":"Samuel Beckett"},{"book_id":17717,"title":"Labyrinths: Selected Stories and Other Writings","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jorge Luis Borges, Donald A. Yates, James E. Irby, Andr\u00e9 Maurois"},{"book_id":17728,"title":"The House of Mirth","image_url":"https:\/\/images.gr-assets.com\/books\/1328729186m\/17728.jpg","authors":"Edith Wharton, Nina Bawden"},{"book_id":17768,"title":"Post Captain (Aubrey\/Maturin, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1375475591m\/17768.jpg","authors":"Patrick O'Brian"},{"book_id":17780,"title":"In the Heart of the Sea: The Tragedy of the Whaleship Essex","image_url":"https:\/\/images.gr-assets.com\/books\/1335902168m\/17780.jpg","authors":"Nathaniel Philbrick"},{"book_id":17781,"title":"Heart of the Sea (Gallaghers of Ardmore \/ Irish Trilogy, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nora Roberts"},{"book_id":17799,"title":"South of the Border, West of the Sun","image_url":"https:\/\/images.gr-assets.com\/books\/1443685506m\/17799.jpg","authors":"Haruki Murakami, Philip Gabriel"},{"book_id":17800,"title":"Dance Dance Dance (The Rat, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1443689019m\/17800.jpg","authors":"Haruki Murakami"},{"book_id":17801,"title":"Underground: The Tokyo Gas Attack and the Japanese Psyche","image_url":"https:\/\/images.gr-assets.com\/books\/1443692668m\/17801.jpg","authors":"Haruki Murakami, Alfred Birnbaum, Philip Gabriel"},{"book_id":17803,"title":"After Dark","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Haruki Murakami, Jay Rubin"},{"book_id":17810,"title":"In the Miso Soup","image_url":"https:\/\/images.gr-assets.com\/books\/1309282509m\/17810.jpg","authors":"Ry\u016b Murakami, Ralph McCarthy"},{"book_id":17841,"title":"Foucault's Pendulum","image_url":"https:\/\/images.gr-assets.com\/books\/1396645125m\/17841.jpg","authors":"Umberto Eco, William Weaver"},{"book_id":17863,"title":"Accelerando (Singularity)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Charles Stross"},{"book_id":17876,"title":"Notes from Underground, White Nights, The Dream of a Ridiculous Man, and Selections from The House of the Dead","image_url":"https:\/\/images.gr-assets.com\/books\/1411241656m\/17876.jpg","authors":"Fyodor Dostoyevsky, Andrew R. MacAndrew, Ben Marcus"},{"book_id":17877,"title":"The House of the Dead","image_url":"https:\/\/images.gr-assets.com\/books\/1327908745m\/17877.jpg","authors":"Fyodor Dostoyevsky, Ergin Altay"},{"book_id":17961,"title":"Collected Fictions","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jorge Luis Borges, Andrew Hurley"},{"book_id":17977,"title":"The Ancestor's Tale: A Pilgrimage to the Dawn of Evolution","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Richard Dawkins"},{"book_id":17994,"title":"The Code Book: The Science of Secrecy from Ancient Egypt to Quantum Cryptography","image_url":"https:\/\/images.gr-assets.com\/books\/1403181687m\/17994.jpg","authors":"Simon Singh"},{"book_id":18005,"title":"How I Became a Pirate","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Melinda Long, David Shannon"},{"book_id":18035,"title":"Right Ho, Jeeves (Jeeves, #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"P.G. Wodehouse"},{"book_id":18116,"title":"His Dark Materials (His Dark Materials #1-3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Philip Pullman"},{"book_id":18122,"title":"The Amber Spyglass (His Dark Materials, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1329189152m\/18122.jpg","authors":"Philip Pullman"},{"book_id":18130,"title":"A Wind in the Door (A Wrinkle in Time Quintet, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1327464177m\/18130.jpg","authors":"Madeleine L'Engle"},{"book_id":18131,"title":"A Wrinkle in Time (A Wrinkle in Time Quintet, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1329061522m\/18131.jpg","authors":"Madeleine L'Engle"},{"book_id":18135,"title":"Romeo and Juliet","image_url":"https:\/\/images.gr-assets.com\/books\/1327872146m\/18135.jpg","authors":"William Shakespeare, Robert Jackson"},{"book_id":18254,"title":"Oliver Twist","image_url":"https:\/\/images.gr-assets.com\/books\/1327868529m\/18254.jpg","authors":"Charles Dickens, George Cruikshank, Philip Horne"},{"book_id":18266,"title":"Gargantua and Pantagruel","image_url":"https:\/\/images.gr-assets.com\/books\/1336964698m\/18266.jpg","authors":"Fran\u00e7ois Rabelais, M.A. Screech"},{"book_id":18288,"title":"Critique of Pure Reason","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Immanuel Kant, Paul Guyer, Allen W. Wood"},{"book_id":18304,"title":"The Anti-Christ","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Friedrich Nietzsche, H.L. Mencken"},{"book_id":18342,"title":"It","image_url":"https:\/\/images.gr-assets.com\/books\/1309376909m\/18342.jpg","authors":"Stephen King"},{"book_id":18373,"title":"Flowers for Algernon","image_url":"https:\/\/images.gr-assets.com\/books\/1367141311m\/18373.jpg","authors":"Daniel Keyes"},{"book_id":18386,"title":"The Death of Ivan Ilych","image_url":"https:\/\/images.gr-assets.com\/books\/1336967150m\/18386.jpg","authors":"Leo Tolstoy, Aylmer Maude"},{"book_id":18392,"title":"The Lost Years (The Lost Years of Merlin, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"T.A. Barron"},{"book_id":18402,"title":"The Dante Club","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Matthew Pearl"},{"book_id":18405,"title":"Gone with the Wind","image_url":"https:\/\/images.gr-assets.com\/books\/1328025229m\/18405.jpg","authors":"Margaret Mitchell"},{"book_id":18414,"title":"Utopia","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Thomas More, Paul Turner"},{"book_id":18419,"title":"The Kissing Hand","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Audrey Penn, Ruth E. Harper, Nancy M. Leak"},{"book_id":18420,"title":"Hands Of Light","image_url":"https:\/\/images.gr-assets.com\/books\/1320544153m\/18420.jpg","authors":"Barbara Ann Brennan, Jos. A. Smith"},{"book_id":18422,"title":"Gifted Hands: The Ben Carson Story","image_url":"https:\/\/images.gr-assets.com\/books\/1331248043m\/18422.jpg","authors":"Ben Carson, Cecil Murphey"},{"book_id":18423,"title":"The Left Hand of Darkness","image_url":"https:\/\/images.gr-assets.com\/books\/1488213612m\/18423.jpg","authors":"Ursula K. Le Guin, Lech J\u0119czmyk"},{"book_id":18431,"title":"The Rule of Four","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ian Caldwell, Dustin Thomason"},{"book_id":18452,"title":"The Painted Bird","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jerzy Kosi\u0144ski"},{"book_id":18490,"title":"Frankenstein","image_url":"https:\/\/images.gr-assets.com\/books\/1381512375m\/18490.jpg","authors":"Mary Wollstonecraft Shelley, Percy Bysshe Shelley, Maurice Hindle"},{"book_id":18512,"title":"The Return of the King (The Lord of the Rings, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1389977161m\/18512.jpg","authors":"J.R.R. Tolkien"},{"book_id":18521,"title":"A Room of One's Own","image_url":"https:\/\/images.gr-assets.com\/books\/1327883012m\/18521.jpg","authors":"Virginia Woolf"},{"book_id":18525,"title":"Dr. Faustus","image_url":"https:\/\/images.gr-assets.com\/books\/1392156779m\/18525.jpg","authors":"Christopher Marlowe"},{"book_id":18545,"title":"Rosencrantz and Guildenstern Are Dead","image_url":"https:\/\/images.gr-assets.com\/books\/1338735611m\/18545.jpg","authors":"Tom Stoppard, Henry Popkin"},{"book_id":18553,"title":"The Cay (The Cay, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Theodore Taylor"},{"book_id":18580,"title":"Summer of My German Soldier (Summer of My German Soldier, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bette Greene"},{"book_id":18600,"title":"Touching the Void: The True Story of One Man's Miraculous Survival","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Joe Simpson"},{"book_id":18630,"title":"The Player of Games (Culture, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Iain M. Banks"},{"book_id":18646,"title":"Galileo's Daughter: A Historical Memoir of Science, Faith and Love","image_url":"https:\/\/images.gr-assets.com\/books\/1414607526m\/18646.jpg","authors":"Dava Sobel"},{"book_id":18723,"title":"Brick Lane","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Monica Ali"},{"book_id":18728,"title":"No Ordinary Time: Franklin and Eleanor Roosevelt: The Home Front in World War II","image_url":"https:\/\/images.gr-assets.com\/books\/1423756471m\/18728.jpg","authors":"Doris Kearns Goodwin"},{"book_id":18749,"title":"Half of a Yellow Sun","image_url":"https:\/\/images.gr-assets.com\/books\/1327934717m\/18749.jpg","authors":"Chimamanda Ngozi Adichie"},{"book_id":18750,"title":"Beauty's Punishment (Sleeping Beauty, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1426861477m\/18750.jpg","authors":"A.N. Roquelaure, Anne Rice"},{"book_id":18765,"title":"I, Claudius (Claudius, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert Graves"},{"book_id":18825,"title":"Money","image_url":"https:\/\/images.gr-assets.com\/books\/1367084993m\/18825.jpg","authors":"Martin Amis"},{"book_id":18839,"title":"Orlando","image_url":"https:\/\/images.gr-assets.com\/books\/1443118010m\/18839.jpg","authors":"Virginia Woolf"},{"book_id":18864,"title":"The Rum Diary","image_url":"https:\/\/images.gr-assets.com\/books\/1430534762m\/18864.jpg","authors":"Hunter S. Thompson"},{"book_id":18878,"title":"The Belgariad, Vol. 1: Pawn of Prophecy \/ Queen of Sorcery \/ Magician's Gambit (The Belgariad, #1-3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Eddings"},{"book_id":18884,"title":"Polgara the Sorceress (Malloreon)","image_url":"https:\/\/images.gr-assets.com\/books\/1403179783m\/18884.jpg","authors":"David Eddings, Leigh Eddings"},{"book_id":18889,"title":"Lady of Avalon (Avalon, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Marion Zimmer Bradley, Diana L. Paxson"},{"book_id":18892,"title":"The Forest House (Avalon, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1319444215m\/18892.jpg","authors":"Marion Zimmer Bradley, Diana L. Paxson"},{"book_id":18931,"title":"Please Stop Laughing at Me... One Woman's Inspirational Story","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jodee Blanco"},{"book_id":18943,"title":"Confessions of an Ugly Stepsister","image_url":"https:\/\/images.gr-assets.com\/books\/1338457460m\/18943.jpg","authors":"Gregory Maguire"},{"book_id":18956,"title":"Homicide: A Year on the Killing Streets","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Simon"},{"book_id":18989,"title":"Tinker, Tailor, Soldier, Spy","image_url":"https:\/\/images.gr-assets.com\/books\/1327889127m\/18989.jpg","authors":"John le Carr\u00e9"},{"book_id":18990,"title":"The Honourable Schoolboy","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John le Carr\u00e9"},{"book_id":18999,"title":"Smiley's People","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John le Carr\u00e9"},{"book_id":19000,"title":"The Constant Gardener","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John le Carr\u00e9"},{"book_id":19001,"title":"A Perfect Spy","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John le Carr\u00e9"},{"book_id":19049,"title":"What the Bleep Do We Know!?: Discovering the Endless Possibilities for Altering Your Everyday Reality","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"William Arntz, Betsy Chasse, Mark Vicente"},{"book_id":19057,"title":"I Am the Messenger","image_url":"https:\/\/images.gr-assets.com\/books\/1398483261m\/19057.jpg","authors":"Markus Zusak"},{"book_id":19063,"title":"The Book Thief","image_url":"https:\/\/images.gr-assets.com\/books\/1390053681m\/19063.jpg","authors":"Markus Zusak"},{"book_id":19068,"title":"The Nicomachean Ethics","image_url":"https:\/\/images.gr-assets.com\/books\/1472992134m\/19068.jpg","authors":"Aristotle, J.A.K. Thomson, Jonathan Barnes, Hugh Tredennick"},{"book_id":19083,"title":"Politics","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Aristotle"},{"book_id":19089,"title":"Middlemarch","image_url":"https:\/\/images.gr-assets.com\/books\/1481264628m\/19089.jpg","authors":"George Eliot, Michel Faber"},{"book_id":19106,"title":"The Nose","image_url":"https:\/\/images.gr-assets.com\/books\/1360321953m\/19106.jpg","authors":"Nikolai Gogol, Kevin Hawkes"},{"book_id":19117,"title":"Fathers and Sons","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ivan Turgenev, George Reavy, Jane Costlow"},{"book_id":19164,"title":"Purgatorio (The Divine Comedy, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dante Alighieri, Robert M. Durling"},{"book_id":19302,"title":"Pippi Longstocking","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Astrid Lindgren, Lauren Child, Florence Lamborn, Nancy Seligsohn"},{"book_id":19307,"title":"Pippi in the South Seas","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Astrid Lindgren, Gerry Bothmer"},{"book_id":19312,"title":"The Brothers Lionheart","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Astrid Lindgren, Ilon Wikland, Jill M. Morgan"},{"book_id":19314,"title":"Ronia, the Robber's Daughter","image_url":"https:\/\/images.gr-assets.com\/books\/1451632787m\/19314.jpg","authors":"Astrid Lindgren, Patricia Crampton, Trina Schart Hyman"},{"book_id":19321,"title":"The Tale of Peter Rabbit","image_url":"https:\/\/images.gr-assets.com\/books\/1485118382m\/19321.jpg","authors":"Beatrix Potter"},{"book_id":19330,"title":"The Complete Tales","image_url":"https:\/\/images.gr-assets.com\/books\/1355114621m\/19330.jpg","authors":"Beatrix Potter"},{"book_id":19351,"title":"The Epic of Gilgamesh","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anonymous, N.K. Sandars"},{"book_id":19380,"title":"Candide","image_url":"https:\/\/images.gr-assets.com\/books\/1345060082m\/19380.jpg","authors":"Voltaire"},{"book_id":19400,"title":"The Decline and Fall of the Roman Empire","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Edward Gibbon, Daniel J. Boorstin, Gian Battista Piranesi, Hans-Friedrich Mueller"},{"book_id":19448,"title":"All-American Girl (All-American Girl, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1291882422m\/19448.jpg","authors":"Meg Cabot"},{"book_id":19452,"title":"Ready or Not (All-American Girl, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1327951939m\/19452.jpg","authors":"Meg Cabot"},{"book_id":19469,"title":"The Face on the Milk Carton (Janie Johnson, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Caroline B. Cooney"},{"book_id":19494,"title":"The Spy Who Came In from the Cold","image_url":"https:\/\/images.gr-assets.com\/books\/1327719782m\/19494.jpg","authors":"John le Carr\u00e9"},{"book_id":19501,"title":"Eat, Pray, Love","image_url":"https:\/\/images.gr-assets.com\/books\/1503066414m\/19501.jpg","authors":"Elizabeth Gilbert"},{"book_id":19534,"title":"The Brothers K","image_url":"https:\/\/images.gr-assets.com\/books\/1403176622m\/19534.jpg","authors":"David James Duncan"},{"book_id":19543,"title":"Where the Wild Things Are","image_url":"https:\/\/images.gr-assets.com\/books\/1384434560m\/19543.jpg","authors":"Maurice Sendak"},{"book_id":19552,"title":"Essentials of Classic Italian Cooking","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Marcella Hazan, Karin Kretschmann"},{"book_id":19581,"title":"Ghost Story","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Peter Straub"},{"book_id":19596,"title":"Color: A Natural History of the Palette","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Victoria Finlay"},{"book_id":19631,"title":"Birds of America","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lorrie Moore"},{"book_id":19661,"title":"Family Matters","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rohinton Mistry"},{"book_id":19668,"title":"Without Remorse (Jack Ryan Universe, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1310082706m\/19668.jpg","authors":"Tom Clancy"},{"book_id":19670,"title":"Debt of Honor (Jack Ryan Universe, #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1310086695m\/19670.jpg","authors":"Tom Clancy"},{"book_id":19674,"title":"The Teeth of the Tiger (Jack Ryan Universe, #12)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tom Clancy"},{"book_id":19675,"title":"Executive Orders (Jack Ryan Universe, #9)","image_url":"https:\/\/images.gr-assets.com\/books\/1419127064m\/19675.jpg","authors":"Tom Clancy"},{"book_id":19687,"title":"The Bear and the Dragon (Jack Ryan Universe, #11)","image_url":"https:\/\/images.gr-assets.com\/books\/1361933747m\/19687.jpg","authors":"Tom Clancy"},{"book_id":19688,"title":"Breaking Point (Tom Clancy's Net Force, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Steve Perry, Tom Clancy, Steve Pieczenik"},{"book_id":19691,"title":"The Hunt for Red October (Jack Ryan Universe, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1281995542m\/19691.jpg","authors":"Tom Clancy"},{"book_id":19707,"title":"Red Rabbit (Jack Ryan Universe, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tom Clancy"},{"book_id":19793,"title":"The Power of Intention: Learning to Co-create Your World Your Way","image_url":"https:\/\/images.gr-assets.com\/books\/1347598399m\/19793.jpg","authors":"Wayne W. Dyer"},{"book_id":19797,"title":"The Power of Art","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Simon Schama"},{"book_id":20082,"title":"The Renegades of Pern (Pern, #10)","image_url":"https:\/\/images.gr-assets.com\/books\/1283622741m\/20082.jpg","authors":"Anne McCaffrey"},{"book_id":20249,"title":"Hunters of Dune (Dune Chronicles #7)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Brian Herbert, Kevin J. Anderson"},{"book_id":20252,"title":"House Corrino (Prelude to Dune #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1298689043m\/20252.jpg","authors":"Brian Herbert, Kevin J. Anderson"},{"book_id":20253,"title":"House Harkonnen (Prelude to Dune #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1403181168m\/20253.jpg","authors":"Brian Herbert, Kevin J. Anderson"},{"book_id":20413,"title":"A Child's Garden of Verses","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert Louis Stevenson, Tasha Tudor"},{"book_id":20417,"title":"Have Space Suit\u2014Will Travel","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert A. Heinlein"},{"book_id":20563,"title":"Adam Bede","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"George Eliot, Joanna Trollope, Hugh Osborne"},{"book_id":20564,"title":"The Mill on the Floss","image_url":"https:\/\/images.gr-assets.com\/books\/1394285531m\/20564.jpg","authors":"George Eliot, A.S. Byatt"},{"book_id":20995,"title":"The Art of Seduction","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert Greene"},{"book_id":21025,"title":"The Gift of Therapy: An Open Letter to a New Generation of Therapists and Their Patients","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Irvin D. Yalom, Nicola Ferguson"},{"book_id":21027,"title":"Love's Executioner and Other Tales of Psychotherapy","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Irvin D. Yalom"},{"book_id":21031,"title":"When Nietzsche Wept","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Irvin D. Yalom"},{"book_id":21060,"title":"Crown Duel (Crown & Court #1-2)","image_url":"https:\/\/images.gr-assets.com\/books\/1360507771m\/21060.jpg","authors":"Sherwood Smith"},{"book_id":21323,"title":"Cold Fire \/ Hideaway \/ The Key to Midnight","image_url":"https:\/\/images.gr-assets.com\/books\/1309287773m\/21323.jpg","authors":"Dean Koontz, Leigh Nichols"},{"book_id":21324,"title":"Fables, Vol. 8: Wolves","image_url":"https:\/\/images.gr-assets.com\/books\/1375393296m\/21324.jpg","authors":"Bill Willingham, Mark Buckingham, Steve Leialoha, Shawn McManus, Andrew Pepoy"},{"book_id":21325,"title":"Fables, Vol. 4: March of the Wooden Soldiers","image_url":"https:\/\/images.gr-assets.com\/books\/1327870401m\/21325.jpg","authors":"Bill Willingham, Mark Buckingham, Craig Hamilton, Steve Leialoha, P. Craig Russell"},{"book_id":21326,"title":"Fables, Vol. 1: Legends in Exile","image_url":"https:\/\/images.gr-assets.com\/books\/1375392441m\/21326.jpg","authors":"Bill Willingham, Lan Medina, Steve Leialoha, Craig Hamilton, James Jean"},{"book_id":21327,"title":"Fables, Vol. 7: Arabian Nights [and Days] (Fables, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1327962799m\/21327.jpg","authors":"Bill Willingham, Mark Buckingham, Steve Leialoha, Jim Fern, Jimmy Palmiotti, Andrew Pepoy"},{"book_id":21328,"title":"Fables, Vol. 6: Homelands","image_url":"https:\/\/images.gr-assets.com\/books\/1327962707m\/21328.jpg","authors":"Bill Willingham, Mark Buckingham, David Hahn, Steve Leialoha"},{"book_id":21329,"title":"Fables, Vol. 3: Storybook Love","image_url":"https:\/\/images.gr-assets.com\/books\/1363682851m\/21329.jpg","authors":"Bill Willingham, Mark Buckingham, Steve Leialoha, James Jean"},{"book_id":21330,"title":"Fables, Vol. 5: The Mean Seasons","image_url":"https:\/\/images.gr-assets.com\/books\/1327870458m\/21330.jpg","authors":"Bill Willingham, Mark Buckingham, Steve Leialoha, Tony Akins, Jimmy Palmiotti"},{"book_id":21337,"title":"Prodigal Son (Dean Koontz's Frankenstein, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dean Koontz, Kevin J. Anderson, Scott Brick"},{"book_id":21340,"title":"City of Night (Dean Koontz's Frankenstein, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1320441939m\/21340.jpg","authors":"Dean Koontz, Ed Gorman, John Bedford Lloyd"},{"book_id":21343,"title":"The Five Dysfunctions of a Team: A Leadership Fable","image_url":"https:\/\/images.gr-assets.com\/books\/1400841022m\/21343.jpg","authors":"Patrick Lencioni"},{"book_id":21348,"title":"Aesop's Fables","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Aesop, Laura Harris, Laura Gibbs"},{"book_id":21362,"title":"Seize the Night (Moonlight Bay, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1382311797m\/21362.jpg","authors":"Dean Koontz, Keith Szarabajka"},{"book_id":21436,"title":"Cat and Mouse (Alex Cross, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1375828879m\/21436.jpg","authors":"James Patterson, Keith David, Anthony Heald"},{"book_id":21445,"title":"The 5th Horseman (Women's Murder Club, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1396631487m\/21445.jpg","authors":"James Patterson, Maxine Paetro"},{"book_id":21484,"title":"The Winds of War (The Henry Family, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Herman Wouk"},{"book_id":21611,"title":"The Forever War (The Forever War, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1386852511m\/21611.jpg","authors":"Joe Haldeman"},{"book_id":21618,"title":"Forever Peace (The Forever War, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1267317517m\/21618.jpg","authors":"Joe Haldeman"},{"book_id":21671,"title":"Mystic River","image_url":"https:\/\/images.gr-assets.com\/books\/1407109549m\/21671.jpg","authors":"Dennis Lehane"},{"book_id":21681,"title":"Darkness, Take My Hand (Kenzie & Gennaro, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1392049150m\/21681.jpg","authors":"Dennis Lehane"},{"book_id":21683,"title":"Prayers for Rain (Kenzie & Gennaro, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dennis Lehane"},{"book_id":21685,"title":"A Drink Before the War (Kenzie & Gennaro, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dennis Lehane"},{"book_id":21686,"title":"Shutter Island","image_url":"https:\/\/images.gr-assets.com\/books\/1329269081m\/21686.jpg","authors":"Dennis Lehane"},{"book_id":21704,"title":"The Black Dahlia (L.A. Quartet, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1387048173m\/21704.jpg","authors":"James Ellroy"},{"book_id":21717,"title":"Triptych (Will Trent, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Karin Slaughter"},{"book_id":21718,"title":"Blindsighted (Grant County, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Karin Slaughter"},{"book_id":21719,"title":"Kisscut (Grant County, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1348096108m\/21719.jpg","authors":"Karin Slaughter"},{"book_id":21720,"title":"Beyond Reach (Grant County, #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Karin Slaughter"},{"book_id":21721,"title":"A Faint Cold Fear (Grant County, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1394126332m\/21721.jpg","authors":"Karin Slaughter"},{"book_id":21722,"title":"Faithless (Grant County, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1167323214m\/21722.jpg","authors":"Karin Slaughter"},{"book_id":21726,"title":"The Ruins","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Scott B. Smith"},{"book_id":21727,"title":"A Simple Plan","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Scott B. Smith"},{"book_id":21745,"title":"Without Fail (Jack Reacher, #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lee Child, Dick Hill"},{"book_id":21787,"title":"The Princess Bride ","image_url":"https:\/\/images.gr-assets.com\/books\/1327903636m\/21787.jpg","authors":"William Goldman"},{"book_id":21796,"title":"Marathon Man","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"William Goldman"},{"book_id":21996,"title":"The Devil in the White City: Murder, Magic, and Madness at the Fair That Changed America","image_url":"https:\/\/images.gr-assets.com\/books\/1312066724m\/21996.jpg","authors":"Erik Larson, Tony Goldwyn"},{"book_id":22026,"title":"The Sicilian","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mario Puzo"},{"book_id":22028,"title":"Omerta","image_url":"https:\/\/images.gr-assets.com\/books\/1327867034m\/22028.jpg","authors":"Mario Puzo"},{"book_id":22034,"title":"The Godfather","image_url":"https:\/\/images.gr-assets.com\/books\/1394988109m\/22034.jpg","authors":"Mario Puzo, Robert Thompson, Peter Bart"},{"book_id":22076,"title":"From a Buick 8","image_url":"https:\/\/images.gr-assets.com\/books\/1304686732m\/22076.jpg","authors":"Stephen King"},{"book_id":22175,"title":"Strange Pilgrims","image_url":"https:\/\/images.gr-assets.com\/books\/1411334612m\/22175.jpg","authors":"Gabriel Garc\u00eda M\u00e1rquez"},{"book_id":22188,"title":"Gossip Girl (Gossip Girl, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1398814332m\/22188.jpg","authors":"Cecily von Ziegesar"},{"book_id":22192,"title":"All I Want is Everything (Gossip Girl, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Cecily von Ziegesar"},{"book_id":22193,"title":"You're the One That I Want (Gossip Girl, #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Cecily von Ziegesar"},{"book_id":22200,"title":"Count Zero (Sprawl, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"William Gibson"},{"book_id":22205,"title":"This Lullaby","image_url":"https:\/\/images.gr-assets.com\/books\/1397779294m\/22205.jpg","authors":"Sarah Dessen"},{"book_id":22206,"title":"Lullaby","image_url":"https:\/\/images.gr-assets.com\/books\/1327268513m\/22206.jpg","authors":"Chuck Palahniuk"},{"book_id":22207,"title":"Lullabies for Little Criminals","image_url":"https:\/\/images.gr-assets.com\/books\/1327893204m\/22207.jpg","authors":"Heather O'Neill"},{"book_id":22232,"title":"Stargirl (Stargirl, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1335947642m\/22232.jpg","authors":"Jerry Spinelli"},{"book_id":22283,"title":"Survivor","image_url":"https:\/\/images.gr-assets.com\/books\/1327346693m\/22283.jpg","authors":"Chuck Palahniuk"},{"book_id":22284,"title":"Diary","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Chuck Palahniuk"},{"book_id":22285,"title":"Rant","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Chuck Palahniuk"},{"book_id":22288,"title":"Haunted","image_url":"https:\/\/images.gr-assets.com\/books\/1391152326m\/22288.jpg","authors":"Chuck Palahniuk"},{"book_id":22290,"title":"Invisible Monsters","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Chuck Palahniuk"},{"book_id":22304,"title":"Life After God","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Douglas Coupland"},{"book_id":22320,"title":"Pattern Recognition (Blue Ant, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1288326931m\/22320.jpg","authors":"William Gibson"},{"book_id":22321,"title":"All Tomorrow's Parties (Bridge, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"William Gibson"},{"book_id":22322,"title":"Spook Country (Blue Ant, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"William Gibson"},{"book_id":22323,"title":"Burning Chrome (Sprawl, #0)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"William Gibson, Bruce Sterling"},{"book_id":22325,"title":"Idoru (Bridge #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"William Gibson"},{"book_id":22326,"title":"Virtual Light (Bridge, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1409238094m\/22326.jpg","authors":"William Gibson"},{"book_id":22327,"title":"The Miracle Worker","image_url":"https:\/\/images.gr-assets.com\/books\/1419184250m\/22327.jpg","authors":"William Gibson"},{"book_id":22328,"title":"Neuromancer","image_url":"https:\/\/images.gr-assets.com\/books\/1167348726m\/22328.jpg","authors":"William Gibson"},{"book_id":22358,"title":"We3","image_url":"https:\/\/images.gr-assets.com\/books\/1336056522m\/22358.jpg","authors":"Grant Morrison, Frank Quitely"},{"book_id":22369,"title":"All-Star Superman, Vol. 1","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Grant Morrison, Frank Quitely"},{"book_id":22374,"title":"Batman: Arkham Asylum - A Serious House on Serious Earth","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Grant Morrison, Dave McKean"},{"book_id":22411,"title":"Invisible Prey (Lucas Davenport, #17)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Sandford"},{"book_id":22416,"title":"Transmetropolitan, Vol. 1: Back on the Street (Transmetropolitan, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1320606005m\/22416.jpg","authors":"Warren Ellis, Darick Robertston, Garth Ennis"},{"book_id":22417,"title":"Transmetropolitan, Vol. 2: Lust for Life (Transmetropolitan, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1427758922m\/22417.jpg","authors":"Warren Ellis, Darick Robertson"},{"book_id":22418,"title":"Transmetropolitan, Vol. 3: Year of the Bastard (Transmetropolitan, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1452027011m\/22418.jpg","authors":"Warren Ellis, Darick Robertson, Rodney Ramos"},{"book_id":22420,"title":"Transmetropolitan, Vol. 5: Lonely City (Transmetropolitan, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1374683445m\/22420.jpg","authors":"Warren Ellis, Darick Robertson, Rodney Ramos, Patrick Stewart"},{"book_id":22421,"title":"Transmetropolitan, Vol. 4: The New Scum (Transmetropolitan, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1452027299m\/22421.jpg","authors":"Warren Ellis, Darick Robertson, Rodney Ramos, Keith Akin"},{"book_id":22435,"title":"The Fabric of the Cosmos: Space, Time, and the Texture of Reality","image_url":"https:\/\/images.gr-assets.com\/books\/1435242004m\/22435.jpg","authors":"Brian Greene"},{"book_id":22463,"title":"The Origin of Species","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Charles Darwin"},{"book_id":22469,"title":"Wolverine: Origin","image_url":"https:\/\/images.gr-assets.com\/books\/1320663605m\/22469.jpg","authors":"Paul Jenkins, Andy Kubert, Richard Isanove, Joe Quesada, Bill Jemas"},{"book_id":22543,"title":"Death by Black Hole - And Other Cosmic Quandaries","image_url":"https:\/\/images.gr-assets.com\/books\/1395019749m\/22543.jpg","authors":"Neil deGrasse Tyson"},{"book_id":22584,"title":"Flow My Tears, the Policeman Said","image_url":"https:\/\/images.gr-assets.com\/books\/1398026028m\/22584.jpg","authors":"Philip K. Dick"},{"book_id":22590,"title":"Ubik","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Philip K. Dick, David Alabort, Manuel Esp\u00edn"},{"book_id":22628,"title":"The Perks of Being a Wallflower","image_url":"https:\/\/images.gr-assets.com\/books\/1167352178m\/22628.jpg","authors":"Stephen Chbosky"},{"book_id":22632,"title":"The Trial and Death of Socrates","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Plato, G.M.A. Grube, John M. Cooper"},{"book_id":22649,"title":"Bookends","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jane Green"},{"book_id":22680,"title":"American Sphinx: The Character of Thomas Jefferson","image_url":"https:\/\/images.gr-assets.com\/books\/1403187214m\/22680.jpg","authors":"Joseph J. Ellis"},{"book_id":22686,"title":"The Other Woman","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jane Green"},{"book_id":22695,"title":"Summer Sisters","image_url":"https:\/\/images.gr-assets.com\/books\/1167356646m\/22695.jpg","authors":"Judy Blume"},{"book_id":22875,"title":"The One Tree (The Second Chronicles of Thomas Covenant, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Stephen R. Donaldson"},{"book_id":22896,"title":"Practical Magic","image_url":"https:\/\/images.gr-assets.com\/books\/1490354120m\/22896.jpg","authors":"Alice Hoffman"},{"book_id":22904,"title":"The Complete Stories","image_url":"https:\/\/images.gr-assets.com\/books\/1223588017m\/22904.jpg","authors":"Franz Kafka, Nahum N. Glatzer, John Updike, Willa Muir, Edwin Muir, Tania Stern, James Stern, Ernst Kaiser, Eithne Wilkins"},{"book_id":22911,"title":"Amerika","image_url":"https:\/\/images.gr-assets.com\/books\/1327894257m\/22911.jpg","authors":"Franz Kafka, \u0628\u0647\u0631\u0627\u0645 \u0645\u0642\u062f\u0627\u062f\u06cc"},{"book_id":22917,"title":"The Complete Grimm's Fairy Tales","image_url":"https:\/\/images.gr-assets.com\/books\/1369540060m\/22917.jpg","authors":"Jacob Grimm, Wilhelm Grimm, Josef Scharl, Padraic Colum, Joseph Campbell, Margaret Raine Hunt, James Stern"},{"book_id":22995,"title":"La casa de Bernarda Alba","image_url":"https:\/\/images.gr-assets.com\/books\/1328758570m\/22995.jpg","authors":"Federico Garc\u00eda Lorca, Antonio Sobejano-Moran, Paola Bianco"},{"book_id":23031,"title":"Time's Arrow","image_url":"https:\/\/images.gr-assets.com\/books\/1353213337m\/23031.jpg","authors":"Martin Amis"},{"book_id":23196,"title":"The River Why","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David James Duncan"},{"book_id":23217,"title":"Size 14 Is Not Fat Either (Heather Wells, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1479654269m\/23217.jpg","authors":"Meg Cabot"},{"book_id":23219,"title":"Queen of Babble (Queen of Babble, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1371049249m\/23219.jpg","authors":"Meg Cabot"},{"book_id":23220,"title":"Size 12 Is Not Fat (Heather Wells, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1259077761m\/23220.jpg","authors":"Meg Cabot"},{"book_id":23221,"title":"How to Be Popular","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Meg Cabot"},{"book_id":23223,"title":"Every Boy's Got One (Boy, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Meg Cabot"},{"book_id":23224,"title":"Darkest Hour (The Mediator, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Meg Cabot"},{"book_id":23225,"title":"Haunted (The Mediator, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Meg Cabot"},{"book_id":23228,"title":"Boy Meets Boy","image_url":"https:\/\/images.gr-assets.com\/books\/1356335082m\/23228.jpg","authors":"David Levithan"},{"book_id":23232,"title":"The Realm of Possibility","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Levithan"},{"book_id":23289,"title":"The Dead","image_url":"https:\/\/images.gr-assets.com\/books\/1456153413m\/23289.jpg","authors":"James Joyce"},{"book_id":23316,"title":"Round Ireland with a Fridge","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tony Hawks"},{"book_id":23419,"title":"The Consolations of Philosophy","image_url":"https:\/\/images.gr-assets.com\/books\/1403191802m\/23419.jpg","authors":"Alain de Botton"},{"book_id":23422,"title":"The Art of Travel","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Alain de Botton"},{"book_id":23426,"title":"On Love","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Alain de Botton"},{"book_id":23454,"title":"Dragons of Winter Night (Dragonlance: Chronicles, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Margaret Weis, Tracy Hickman"},{"book_id":23522,"title":"Mythology: Timeless Tales of Gods and Heroes","image_url":"https:\/\/images.gr-assets.com\/books\/1305000423m\/23522.jpg","authors":"Edith Hamilton, Steele Savage"},{"book_id":23529,"title":"From Hell","image_url":"https:\/\/images.gr-assets.com\/books\/1327894621m\/23529.jpg","authors":"Alan Moore, Eddie Campbell, Pete Mullins"},{"book_id":23534,"title":"Love Is a Dog from Hell","image_url":"https:\/\/images.gr-assets.com\/books\/1377260823m\/23534.jpg","authors":"Charles Bukowski"},{"book_id":23577,"title":"Lies & the Lying Liars Who Tell Them: A Fair & Balanced Look at the Right","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Al Franken"},{"book_id":23686,"title":"Ranma \u00bd, Vol. 1 (Ranma \u00bd (US 2nd), #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rumiko Takahashi"},{"book_id":23753,"title":"The Absolute Sandman, Volume One","image_url":"https:\/\/images.gr-assets.com\/books\/1312226853m\/23753.jpg","authors":"Neil Gaiman, Mike Dringenberg, Chris Bachalo, Michael Zulli, Kelly Jones, Charles Vess, Colleen Doran, Malcolm Jones III, Steve Parkhouse, Daniel Vozzo, Lee Loughridge, Steve Oliff, Todd Klein, Dave McKean, Sam Kieth"},{"book_id":23754,"title":"Preludes & Nocturnes (The Sandman #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1411609637m\/23754.jpg","authors":"Neil Gaiman, Sam Kieth, Mike Dringenberg, Malcolm Jones III, Todd Klein, Karen Berger"},{"book_id":23772,"title":"Green Eggs and Ham","image_url":"https:\/\/images.gr-assets.com\/books\/1468680100m\/23772.jpg","authors":"Dr. Seuss, \u05dc\u05d0\u05d4 \u05e0\u05d0\u05d5\u05e8"},{"book_id":23807,"title":"The Silence of the Lambs (Hannibal Lecter, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1390426249m\/23807.jpg","authors":"Thomas Harris"},{"book_id":23814,"title":"King Solomon's Mines (Allan Quatermain, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1418964233m\/23814.jpg","authors":"H. Rider Haggard"},{"book_id":23875,"title":"El coronel no tiene quien le escriba","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Gabriel Garc\u00eda M\u00e1rquez"},{"book_id":23876,"title":"Of Love and Other Demons","image_url":"https:\/\/images.gr-assets.com\/books\/1324357590m\/23876.jpg","authors":"Gabriel Garc\u00eda M\u00e1rquez"},{"book_id":23878,"title":"Chronicle of a Death Foretold","image_url":"https:\/\/images.gr-assets.com\/books\/1430736599m\/23878.jpg","authors":"Gabriel Garc\u00eda M\u00e1rquez, Gregory Rabassa"},{"book_id":23884,"title":"The General in His Labyrinth","image_url":"https:\/\/images.gr-assets.com\/books\/1361537151m\/23884.jpg","authors":"Gabriel Garc\u00eda M\u00e1rquez, Edith Grossman"},{"book_id":23885,"title":"No One Writes to the Colonel and Other Stories","image_url":"https:\/\/images.gr-assets.com\/books\/1410130190m\/23885.jpg","authors":"Gabriel Garc\u00eda M\u00e1rquez, J.S. Bernstein"},{"book_id":23887,"title":"The Autumn of the Patriarch","image_url":"https:\/\/images.gr-assets.com\/books\/1410136666m\/23887.jpg","authors":"Gabriel Garc\u00eda M\u00e1rquez, Gregory Rabassa"},{"book_id":23919,"title":"The Complete Stories and Poems","image_url":"https:\/\/images.gr-assets.com\/books\/1327942676m\/23919.jpg","authors":"Edgar Allan Poe"},{"book_id":23940,"title":"Junky","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"William S. Burroughs, Oliver Harris, Allen Ginsberg"},{"book_id":23955,"title":"Trainspotting","image_url":"https:\/\/images.gr-assets.com\/books\/1375258001m\/23955.jpg","authors":"Irvine Welsh, Eric Lindor Fall"},{"book_id":23960,"title":"Glue","image_url":"https:\/\/images.gr-assets.com\/books\/1357448113m\/23960.jpg","authors":"Irvine Welsh"},{"book_id":23965,"title":"Porno","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Irvine Welsh"},{"book_id":23966,"title":"Filth","image_url":"https:\/\/images.gr-assets.com\/books\/1452500604m\/23966.jpg","authors":"Irvine Welsh"},{"book_id":24019,"title":"The New Best Recipe","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Cook's Illustrated Magazine, John Burgoyne, Carl Tremblay"},{"book_id":24093,"title":"Street Magic (The Circle Opens, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1328861813m\/24093.jpg","authors":"Tamora Pierce"},{"book_id":24094,"title":"Wolf-Speaker (Immortals, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1495451734m\/24094.jpg","authors":"Tamora Pierce"},{"book_id":24096,"title":"Leonardo's Notebooks","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Leonardo da Vinci, H. Anna Suh"},{"book_id":24100,"title":"The Golden Notebook","image_url":"https:\/\/images.gr-assets.com\/books\/1367457541m\/24100.jpg","authors":"Doris Lessing"},{"book_id":24113,"title":"G\u00f6del, Escher, Bach: An Eternal Golden Braid","image_url":"https:\/\/images.gr-assets.com\/books\/1428732588m\/24113.jpg","authors":"Douglas R. Hofstadter"},{"book_id":24128,"title":"The Merchant of Venice","image_url":"https:\/\/images.gr-assets.com\/books\/1327871054m\/24128.jpg","authors":"William Shakespeare, Robert Jackson, Barbara A. Mowat, Paul Werstine"},{"book_id":24137,"title":"Catherine, Called Birdy","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Karen Cushman"},{"book_id":24178,"title":"Charlotte's Web","image_url":"https:\/\/images.gr-assets.com\/books\/1439632243m\/24178.jpg","authors":"E.B. White, Garth Williams, Rosemary Wells"},{"book_id":24192,"title":"The Runaway Jury","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Grisham"},{"book_id":24213,"title":"Alice's Adventures in Wonderland & Through the Looking-Glass","image_url":"https:\/\/images.gr-assets.com\/books\/1327872220m\/24213.jpg","authors":"Lewis Carroll, John Tenniel, Martin Gardner"},{"book_id":24215,"title":"Alice's Adventures in Wonderland: A Pop-Up Adaptation","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert Sabuda, Lewis Carroll"},{"book_id":24244,"title":"The Black Ice (Harry Bosch, #2; Harry Bosch Universe, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1372241876m\/24244.jpg","authors":"Michael Connelly"},{"book_id":24271,"title":"Skellig (Skellig, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1320460285m\/24271.jpg","authors":"David Almond"},{"book_id":24280,"title":"Les Mis\u00e9rables","image_url":"https:\/\/images.gr-assets.com\/books\/1411852091m\/24280.jpg","authors":"Victor Hugo, Lee Fahnestock, Norman MacAfee"},{"book_id":24335,"title":"The Trumpet of the Swan","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"E.B. White, Fred Marcellino"},{"book_id":24337,"title":"Ella Enchanted","image_url":"https:\/\/images.gr-assets.com\/books\/1410727190m\/24337.jpg","authors":"Gail Carson Levine"},{"book_id":24384,"title":"The Cricket in Times Square","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"George Selden, Garth Williams"},{"book_id":24408,"title":"The Bronze Bow","image_url":"https:\/\/images.gr-assets.com\/books\/1369712582m\/24408.jpg","authors":"Elizabeth George Speare"},{"book_id":24431,"title":"Trickster's Choice (Daughter of the Lioness, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1395898571m\/24431.jpg","authors":"Tamora Pierce"},{"book_id":24472,"title":"Peony in Love","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lisa See"},{"book_id":24475,"title":"Chuck Klosterman IV: A Decade of Curious People and Dangerous Ideas","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Chuck Klosterman"},{"book_id":24476,"title":"Fargo Rock City: A Heavy Metal Odyssey in Rural North Dakota","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Chuck Klosterman"},{"book_id":24494,"title":"The Calvin and Hobbes Lazy Sunday Book","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bill Watterson"},{"book_id":24580,"title":"The Adventures of Tom Sawyer & Adventures of Huckleberry Finn","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mark Twain"},{"book_id":24583,"title":"The Adventures of Tom Sawyer","image_url":"https:\/\/images.gr-assets.com\/books\/1404811979m\/24583.jpg","authors":"Mark Twain, Guy Cardwell, John Seelye"},{"book_id":24687,"title":"Don't Let's Go to the Dogs Tonight","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Alexandra Fuller"},{"book_id":24724,"title":"Drop City","image_url":"https:\/\/images.gr-assets.com\/books\/1327936131m\/24724.jpg","authors":"T.C. Boyle, Richard Poe"},{"book_id":24731,"title":"The Tortilla Curtain","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"T.C. Boyle"},{"book_id":24761,"title":"An Acceptable Time (A Wrinkle in Time Quintet, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Madeleine L'Engle"},{"book_id":24765,"title":"Specials (Uglies, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Scott Westerfeld"},{"book_id":24766,"title":"The Secret Hour (Midnighters, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1501166713m\/24766.jpg","authors":"Scott Westerfeld"},{"book_id":24767,"title":"Touching Darkness (Midnighters, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1315537376m\/24767.jpg","authors":"Scott Westerfeld"},{"book_id":24768,"title":"Pretties (Uglies, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Scott Westerfeld"},{"book_id":24769,"title":"Blue Noon (Midnighters, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1315537301m\/24769.jpg","authors":"Scott Westerfeld"},{"book_id":24770,"title":"Uglies (Uglies, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1443904172m\/24770.jpg","authors":"Scott Westerfeld"},{"book_id":24779,"title":"The Castle of Llyr (The Chronicles of Prydain #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1405714238m\/24779.jpg","authors":"Lloyd Alexander"},{"book_id":24780,"title":"The Book of Three (The Chronicles of Prydain, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1405184012m\/24780.jpg","authors":"Lloyd Alexander"},{"book_id":24781,"title":"The High King (The Chronicles of Prydain #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1407209964m\/24781.jpg","authors":"Lloyd Alexander"},{"book_id":24782,"title":"Taran Wanderer (The Chronicles of Prydain #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1406315774m\/24782.jpg","authors":"Lloyd Alexander"},{"book_id":24784,"title":"The Black Cauldron (The Chronicles of Prydain #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1405377996m\/24784.jpg","authors":"Lloyd Alexander"},{"book_id":24790,"title":"Paula","image_url":"https:\/\/images.gr-assets.com\/books\/1316284499m\/24790.jpg","authors":"Isabel Allende"},{"book_id":24796,"title":"Zorro","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Isabel Allende, Margaret Sayers Peden"},{"book_id":24800,"title":"House of Leaves","image_url":"https:\/\/images.gr-assets.com\/books\/1403889034m\/24800.jpg","authors":"Mark Z. Danielewski"},{"book_id":24807,"title":"The Areas of My Expertise: An Almanac of Complete World Knowledge Compiled with Instructive Annotation and Arranged in Useful Order","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Hodgman"},{"book_id":24812,"title":"The Complete Calvin and Hobbes","image_url":"https:\/\/images.gr-assets.com\/books\/1473064526m\/24812.jpg","authors":"Bill Watterson"},{"book_id":24813,"title":"The Calvin and Hobbes Tenth Anniversary Book","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bill Watterson"},{"book_id":24814,"title":"It's a Magical World: A Calvin and Hobbes Collection","image_url":"https:\/\/images.gr-assets.com\/books\/1437420710m\/24814.jpg","authors":"Bill Watterson"},{"book_id":24815,"title":"The Indispensable Calvin and Hobbes","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bill Watterson"},{"book_id":24816,"title":"Homicidal Psycho Jungle Cat: A Calvin and Hobbes Collection","image_url":"https:\/\/images.gr-assets.com\/books\/1448818381m\/24816.jpg","authors":"Bill Watterson"},{"book_id":24818,"title":"The Days Are Just Packed: A Calvin and Hobbes Collection","image_url":"https:\/\/images.gr-assets.com\/books\/1418211162m\/24818.jpg","authors":"Bill Watterson"},{"book_id":24830,"title":"The Illustrated Man","image_url":"https:\/\/images.gr-assets.com\/books\/1374049820m\/24830.jpg","authors":"Ray Bradbury"},{"book_id":24861,"title":"Demian. Die Geschichte von Emil Sinclairs Jugend","image_url":"https:\/\/images.gr-assets.com\/books\/1421510580m\/24861.jpg","authors":"Hermann Hesse"},{"book_id":24870,"title":"The Masterharper of Pern (Pern, #15)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anne McCaffrey"},{"book_id":24929,"title":"Lost","image_url":"https:\/\/images.gr-assets.com\/books\/1407711681m\/24929.jpg","authors":"Gregory Maguire, Douglas Smith"},{"book_id":24937,"title":"Wicked: The Grimmerie","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Cote, Stephen Schwartz, Joan Marcus, Winnie Holzman"},{"book_id":24938,"title":"Wicked - Piano\/Vocal Arrangement","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Stephen Schwartz, Gregory Maguire"},{"book_id":24963,"title":"Greenwitch (The Dark Is Rising, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1347322295m\/24963.jpg","authors":"Susan Cooper"},{"book_id":24965,"title":"Fear and Trembling","image_url":"https:\/\/images.gr-assets.com\/books\/1309286516m\/24965.jpg","authors":"S\u00f8ren Kierkegaard, Alastair Hannay"},{"book_id":24983,"title":"Doomsday Book (Oxford Time Travel, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1403972500m\/24983.jpg","authors":"Connie Willis"},{"book_id":25014,"title":"The Map That Changed the World","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Simon Winchester"},{"book_id":25017,"title":"Krakatoa: The Day the World Exploded","image_url":"https:\/\/images.gr-assets.com\/books\/1407108467m\/25017.jpg","authors":"Simon Winchester"},{"book_id":25019,"title":"The Professor and the Madman: A Tale of Murder, Insanity and the Making of the Oxford English Dictionary","image_url":"https:\/\/images.gr-assets.com\/books\/1407110918m\/25019.jpg","authors":"Simon Winchester"},{"book_id":25051,"title":"Mrs. Piggle-Wiggle (Mrs. Piggle Wiggle, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Betty MacDonald, Alexandra Boiger"},{"book_id":25052,"title":"Mrs. Piggle-Wiggle's Magic (Mrs. Piggle Wiggle, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Betty MacDonald, Alexandra Boiger"},{"book_id":25053,"title":"Hello, Mrs. Piggle-Wiggle (Mrs. Piggle Wiggle, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Betty MacDonald, Alexandra Boiger"},{"book_id":25078,"title":"Savage Inequalities: Children in America's Schools","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jonathan Kozol"},{"book_id":25099,"title":"The Doll's House (The Sandman #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1298566119m\/25099.jpg","authors":"Neil Gaiman, Steve Parkhouse, Chris Bachalo, Michael Zulli, Mike Dringenberg, Malcolm Jones III, Todd Klein, Clive Barker"},{"book_id":25100,"title":"Dream Country (The Sandman #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1402485052m\/25100.jpg","authors":"Neil Gaiman, Kelley Jones, Charles Vess, Colleen Doran, Malcolm Jones III, Steve Erickson"},{"book_id":25101,"title":"Season of Mists (The Sandman #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1327937313m\/25101.jpg","authors":"Neil Gaiman, Matt Wagner, George Pratt, Dick Giordano, Kelley Jones, P. Craig Russell, Mike Dringenberg, Malcolm Jones III, Todd Klein, Harlan Ellison"},{"book_id":25102,"title":"A Game of You (The Sandman #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1312279891m\/25102.jpg","authors":"Neil Gaiman, Shawn McManus, Colleen Doran, Bryan Talbot, George Pratt, Stan Woch, Dick Giordano, Todd Klein"},{"book_id":25103,"title":"Worlds' End (The Sandman #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1339922260m\/25103.jpg","authors":"Neil Gaiman, Mike Allred, Gary Amaro, Mark Buckingham, David Giordano, Tony Harris, Steve Leialoha, Vince Locke, Shea Anton Pensa, Alec Stevens, Bryan Talbot, John Watkiss, Todd Klein, Michael Zulli, Stephen King"},{"book_id":25104,"title":"The Wake (The Sandman #10)","image_url":"https:\/\/images.gr-assets.com\/books\/1339922545m\/25104.jpg","authors":"Neil Gaiman, Michael Zulli, Jon J. Muth, Charles Vess, Mikal Gilmore"},{"book_id":25105,"title":"Brief Lives (The Sandman #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1339922078m\/25105.jpg","authors":"Neil Gaiman, Jill Thompson, Vince Locke, Peter Straub"},{"book_id":25106,"title":"Fables and Reflections (The Sandman #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1311961999m\/25106.jpg","authors":"Neil Gaiman, Bryan Talbot, Stan Woch, P. Craig Russell, Shawn McManus, John Watkiss, Jill Thompson, Duncan Eagleson, Kent Williams, Todd Klein"},{"book_id":25148,"title":"The Fuck-Up","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Arthur Nersesian"},{"book_id":25176,"title":"The Man With a Load of Mischief (Richard Jury, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Martha Grimes"},{"book_id":25179,"title":"Blankets","image_url":"https:\/\/images.gr-assets.com\/books\/1460925949m\/25179.jpg","authors":"Craig Thompson"},{"book_id":25190,"title":"Beauty's Release (Sleeping Beauty, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1167595462m\/25190.jpg","authors":"A.N. Roquelaure, Anne Rice"},{"book_id":25200,"title":"Silence","image_url":"https:\/\/images.gr-assets.com\/books\/1327991351m\/25200.jpg","authors":"Sh\u016bsaku End\u014d, William Johnston"},{"book_id":25295,"title":"The Legend of Huma (Dragonlance: Heroes, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Richard A. Knaak"},{"book_id":25307,"title":"No god but God: The Origins, Evolution and Future of Islam","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Reza Aslan"},{"book_id":25346,"title":"Out of the Dust","image_url":"https:\/\/images.gr-assets.com\/books\/1328867076m\/25346.jpg","authors":"Karen Hesse"},{"book_id":25347,"title":"Out of Egypt (Christ the Lord, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1381744119m\/25347.jpg","authors":"Anne Rice"},{"book_id":25350,"title":"Out of the Silent Planet (Space Trilogy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1310984018m\/25350.jpg","authors":"C.S. Lewis"},{"book_id":25354,"title":"Bastard Out of Carolina","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dorothy Allison"},{"book_id":25365,"title":"Out","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Natsuo Kirino, Stephen Snyder"},{"book_id":25373,"title":"Nick & Norah's Infinite Playlist","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rachel Cohn, David Levithan"},{"book_id":25378,"title":"The Dirt: Confessions of the World's Most Notorious Rock Band","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tommy Lee, Vince Neil, Nikki Sixx, Neil Strauss, Mick Mars, Tommy Lee"},{"book_id":25403,"title":"The Orange Girl","image_url":"https:\/\/images.gr-assets.com\/books\/1415583796m\/25403.jpg","authors":"Jostein Gaarder, James Anderson"},{"book_id":25460,"title":"Animal, Vegetable, Miracle: A Year of Food Life","image_url":"https:\/\/images.gr-assets.com\/books\/1480104279m\/25460.jpg","authors":"Barbara Kingsolver, Steven L. Hopp, Camille Kingsolver, Richard A. Houser"},{"book_id":25657,"title":"Sellevision","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Augusten Burroughs"},{"book_id":25669,"title":"How the Irish Saved Civilization","image_url":"https:\/\/images.gr-assets.com\/books\/1403191471m\/25669.jpg","authors":"Thomas Cahill"},{"book_id":25698,"title":"The Wealth of Nations","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Adam Smith"},{"book_id":25790,"title":"The Lord of the Rings Sketchbook","image_url":"https:\/\/images.gr-assets.com\/books\/1416453209m\/25790.jpg","authors":"Alan Lee, Ian McKellen"},{"book_id":25807,"title":"The Postman Always Rings Twice","image_url":"https:\/\/images.gr-assets.com\/books\/1344265267m\/25807.jpg","authors":"James M. Cain"},{"book_id":25955,"title":"The Medium is the Massage","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Marshall McLuhan, Quentin Fiore, Jerome Agel"},{"book_id":26023,"title":"Bright Lights, Big Ass: A Self-Indulgent, Surly, Ex-Sorority Girl's Guide to Why It Often Sucks in the City, or Who Are These Idiots and Why Do They All Live Next Door to Me?","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jen Lancaster"},{"book_id":26046,"title":"Morrigan's Cross (Circle Trilogy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1457728199m\/26046.jpg","authors":"Nora Roberts"},{"book_id":26050,"title":"Angels Fall","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nora Roberts"},{"book_id":26085,"title":"Identity Crisis","image_url":"https:\/\/images.gr-assets.com\/books\/1327948044m\/26085.jpg","authors":"Brad Meltzer, Rags Morales, Michael Bair, Joss Whedon"},{"book_id":26097,"title":"Slowness","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Milan Kundera, Linda Asher"},{"book_id":26101,"title":"Laughable Loves","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Milan Kundera, Suzanne Rappaport"},{"book_id":26114,"title":"The Joke","image_url":"https:\/\/images.gr-assets.com\/books\/1448044837m\/26114.jpg","authors":"Milan Kundera"},{"book_id":26123,"title":"Learned Optimism: How to Change Your Mind and Your Life","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Martin E.P. Seligman"},{"book_id":26324,"title":"Social Intelligence: The New Science of Human Relationships","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Daniel Goleman"},{"book_id":26329,"title":"Emotional Intelligence: Why It Can Matter More Than IQ","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Daniel Goleman"},{"book_id":26435,"title":"The Problem of Pain","image_url":"https:\/\/images.gr-assets.com\/books\/1328546308m\/26435.jpg","authors":"C.S. Lewis"},{"book_id":26506,"title":"Sisters","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Danielle Steel"},{"book_id":26581,"title":"Sleeping Beauty Box Set","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"A.N. Roquelaure, Anne Rice"},{"book_id":26582,"title":"The Claiming of Sleeping Beauty (Sleeping Beauty, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1340735794m\/26582.jpg","authors":"A.N. Roquelaure, Anne Rice"},{"book_id":26596,"title":"Complete Poems, 1904-1962","image_url":"https:\/\/images.gr-assets.com\/books\/1355093052m\/26596.jpg","authors":"E.E. Cummings"},{"book_id":26599,"title":"Selected Poems","image_url":"https:\/\/images.gr-assets.com\/books\/1320891958m\/26599.jpg","authors":"E.E. Cummings, Richard S. Kennedy"},{"book_id":26661,"title":"Praying God's Word: Breaking Free From Spiritual Strongholds","image_url":"https:\/\/images.gr-assets.com\/books\/1266101982m\/26661.jpg","authors":"Beth Moore"},{"book_id":26722,"title":"Act of Treason (Mitch Rapp, #9)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Vince Flynn"},{"book_id":26999,"title":"Something Rotten (Thursday Next, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1479773726m\/26999.jpg","authors":"Jasper Fforde"},{"book_id":27000,"title":"Lost in a Good Book (Thursday Next, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1419889476m\/27000.jpg","authors":"Jasper Fforde"},{"book_id":27001,"title":"The Well of Lost Plots (Thursday Next #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1304713470m\/27001.jpg","authors":"Jasper Fforde"},{"book_id":27002,"title":"First Among Sequels (Thursday Next, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1338467549m\/27002.jpg","authors":"Jasper Fforde"},{"book_id":27003,"title":"The Eyre Affair (Thursday Next, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1445540555m\/27003.jpg","authors":"Jasper Fforde"},{"book_id":27037,"title":"Confessions","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Augustine of Hippo, Henry Chadwick, Albert Cook Outler"},{"book_id":27126,"title":"Bitter Is the New Black: Confessions of a Condescending, Egomaniacal, Self-Centered Smartass, Or, Why You Should Never Carry A Prada Bag to the Unemployment Office","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jen Lancaster"},{"book_id":27208,"title":"The Third Policeman","image_url":"https:\/\/images.gr-assets.com\/books\/1343027425m\/27208.jpg","authors":"Flann O'Brien"},{"book_id":27252,"title":"Pope Joan","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Donna Woolfolk Cross"},{"book_id":27266,"title":"Glass Houses (The Morganville Vampires, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rachel Caine"},{"book_id":27297,"title":"The Analects","image_url":"https:\/\/images.gr-assets.com\/books\/1309201523m\/27297.jpg","authors":"Confucius, D.C. Lau"},{"book_id":27298,"title":"The Twentieth Wife (Taj Mahal Trilogy, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Indu Sundaresan"},{"book_id":27323,"title":"Hiroshima","image_url":"https:\/\/images.gr-assets.com\/books\/1499717742m\/27323.jpg","authors":"John Hersey"},{"book_id":27333,"title":"Silent Spring","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rachel Carson, Linda Lear, Edward O. Wilson"},{"book_id":27397,"title":"A Civil Action","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jonathan Harr"},{"book_id":27398,"title":"The Lost Painting","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jonathan Harr"},{"book_id":27494,"title":"Leaves of Grass","image_url":"https:\/\/images.gr-assets.com\/books\/1418012204m\/27494.jpg","authors":"Walt Whitman"},{"book_id":27523,"title":"Left Behind (Left Behind, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1406505054m\/27523.jpg","authors":"Tim LaHaye, Jerry B. Jenkins"},{"book_id":27525,"title":"Armageddon: The Cosmic Battle of the Ages (Left Behind, #11)","image_url":"https:\/\/images.gr-assets.com\/books\/1406507661m\/27525.jpg","authors":"Tim LaHaye, Jerry B. Jenkins"},{"book_id":27526,"title":"Desecration (Left Behind, #9)","image_url":"https:\/\/images.gr-assets.com\/books\/1406505722m\/27526.jpg","authors":"Tim LaHaye, Jerry B. Jenkins"},{"book_id":27528,"title":"Nicolae (Left Behind, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tim LaHaye, Jerry B. Jenkins"},{"book_id":27530,"title":"The Remnant (Left Behind, #10)","image_url":"https:\/\/images.gr-assets.com\/books\/1406506156m\/27530.jpg","authors":"Tim LaHaye, Jerry B. Jenkins"},{"book_id":27712,"title":"The Neverending Story","image_url":"https:\/\/images.gr-assets.com\/books\/1327871159m\/27712.jpg","authors":"Michael Ende, Ralph Manheim, Roswitha Quadflieg"},{"book_id":27822,"title":"Eugene Onegin","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Alexander Pushkin, James E. Falen"},{"book_id":27999,"title":"Close Range","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Annie Proulx"},{"book_id":28078,"title":"The Birth of Venus","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sarah Dunant"},{"book_id":28116,"title":"The Know-It-All: One Man's Humble Quest to Become the Smartest Person in the World","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"A.J. Jacobs"},{"book_id":28184,"title":"Blue Shoes and Happiness (No. 1 Ladies' Detective Agency, #7)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Alexander McCall Smith"},{"book_id":28186,"title":"The Sea of Monsters (Percy Jackson and the Olympians, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1400602661m\/28186.jpg","authors":"Rick Riordan"},{"book_id":28187,"title":"The Lightning Thief (Percy Jackson and the Olympians, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1400602609m\/28187.jpg","authors":"Rick Riordan"},{"book_id":28194,"title":"Inkheart (Inkworld, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1328866790m\/28194.jpg","authors":"Cornelia Funke, Anthea Bell"},{"book_id":28195,"title":"Inkspell (Inkworld, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1395358683m\/28195.jpg","authors":"Cornelia Funke, Anthea Bell"},{"book_id":28212,"title":"And the Band Played On: Politics, People, and the AIDS Epidemic","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Randy Shilts, William Greider"},{"book_id":28239,"title":"Dark Star Safari: Overland from Cairo to Cape Town","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Paul Theroux"},{"book_id":28248,"title":"Priestess of the White (Age of the Five, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1410130842m\/28248.jpg","authors":"Trudi Canavan"},{"book_id":28249,"title":"The Magicians' Guild (Black Magician Trilogy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327356788m\/28249.jpg","authors":"Trudi Canavan"},{"book_id":28250,"title":"The Novice (Black Magician Trilogy, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1327357280m\/28250.jpg","authors":"Trudi Canavan"},{"book_id":28251,"title":"The High Lord (Black Magician Trilogy, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1327357942m\/28251.jpg","authors":"Trudi Canavan"},{"book_id":28351,"title":"And to Think That I Saw it on Mulberry Street","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dr. Seuss"},{"book_id":28381,"title":"Dead Souls","image_url":"https:\/\/images.gr-assets.com\/books\/1387201057m\/28381.jpg","authors":"Nikolai Gogol, Robert A. Maguire"},{"book_id":28407,"title":"Germinal (Les Rougon-Macquart, #13)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"\u00c9mile Zola, Roger Pearson"},{"book_id":28481,"title":"Dragon Wing (The Death Gate Cycle, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1403168128m\/28481.jpg","authors":"Margaret Weis, Tracy Hickman"},{"book_id":28482,"title":"The Hand of Chaos (The Death Gate Cycle, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1327837169m\/28482.jpg","authors":"Margaret Weis, Tracy Hickman"},{"book_id":28483,"title":"The Seventh Gate (The Death Gate Cycle, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1327837380m\/28483.jpg","authors":"Margaret Weis, Tracy Hickman"},{"book_id":28484,"title":"Into the Labyrinth (The Death Gate Cycle, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1327837279m\/28484.jpg","authors":"Margaret Weis, Tracy Hickman"},{"book_id":28485,"title":"Elven Star (The Death Gate Cycle, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1324543424m\/28485.jpg","authors":"Margaret Weis, Tracy Hickman"},{"book_id":28507,"title":"Serpent Mage (The Death Gate Cycle, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1327837018m\/28507.jpg","authors":"Margaret Weis, Tracy Hickman"},{"book_id":28541,"title":"Dragonsong (Harper Hall, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1407659596m\/28541.jpg","authors":"Anne McCaffrey"},{"book_id":28547,"title":"Dragonsinger (Harper Hall, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1410942014m\/28547.jpg","authors":"Anne McCaffrey"},{"book_id":28553,"title":"Dragondrums (Harper Hall, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1410942131m\/28553.jpg","authors":"Anne McCaffrey"},{"book_id":28568,"title":"The Vanished Man (Lincoln Rhyme, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1257881028m\/28568.jpg","authors":"Jeffery Deaver"},{"book_id":28634,"title":"Immortality","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Milan Kundera"},{"book_id":28635,"title":"Identity","image_url":"https:\/\/images.gr-assets.com\/books\/1410130249m\/28635.jpg","authors":"Milan Kundera, Linda Asher"},{"book_id":28676,"title":"American Psycho","image_url":"https:\/\/images.gr-assets.com\/books\/1436934349m\/28676.jpg","authors":"Bret Easton Ellis"},{"book_id":28689,"title":"Stone of Farewell (Memory, Sorrow, and Thorn, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tad Williams"},{"book_id":28691,"title":"To Green Angel Tower (Memory, Sorrow, and Thorn, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1347824309m\/28691.jpg","authors":"Tad Williams"},{"book_id":28695,"title":"City of Golden Shadow (Otherland, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1329075235m\/28695.jpg","authors":"Tad Williams"},{"book_id":28698,"title":"To Green Angel Tower, Part 2 (Memory, Sorrow, and Thorn, #3; Part 2)","image_url":"https:\/\/images.gr-assets.com\/books\/1309992900m\/28698.jpg","authors":"Tad Williams"},{"book_id":28700,"title":"Falling Man","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Don DeLillo, \u0645\u062d\u0645\u062f\u0635\u0627\u062f\u0642 \u0631\u0626\u06cc\u0633\u06cc"},{"book_id":28703,"title":"Cosmopolis","image_url":"https:\/\/images.gr-assets.com\/books\/1328389098m\/28703.jpg","authors":"Don DeLillo"},{"book_id":28734,"title":"Magic's Price (Valdemar: Last Herald-Mage #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1478489331m\/28734.jpg","authors":"Mercedes Lackey"},{"book_id":28735,"title":"By the Sword (Valdemar)","image_url":"https:\/\/images.gr-assets.com\/books\/1424369518m\/28735.jpg","authors":"Mercedes Lackey"},{"book_id":28747,"title":"CivilWarLand in Bad Decline","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"George Saunders"},{"book_id":28759,"title":"Magic's Pawn (Valdemar: Last Herald-Mage #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1345854036m\/28759.jpg","authors":"Mercedes Lackey"},{"book_id":28760,"title":"Magic's Promise (Valdemar: Last Herald-Mage #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mercedes Lackey"},{"book_id":28815,"title":"Influence: The Psychology of Persuasion","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert B. Cialdini"},{"book_id":28859,"title":"The Gospel According to Jesus Christ","image_url":"https:\/\/images.gr-assets.com\/books\/1328196306m\/28859.jpg","authors":"Jos\u00e9 Saramago"},{"book_id":28862,"title":"The Prince","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Niccol\u00f2 Machiavelli, Adolph Caso, Rufus Goodwin, Benjamin Martinez"},{"book_id":28866,"title":"Dark Prince (Dark, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1405352801m\/28866.jpg","authors":"Christine Feehan"},{"book_id":28876,"title":"His Majesty's Dragon (Temeraire, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1376392909m\/28876.jpg","authors":"Naomi Novik"},{"book_id":28877,"title":"Red Dragon (Hannibal Lecter, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Thomas Harris"},{"book_id":28881,"title":"Lamb: The Gospel According to Biff, Christ's Childhood Pal","image_url":"https:\/\/images.gr-assets.com\/books\/1331419009m\/28881.jpg","authors":"Christopher Moore"},{"book_id":28899,"title":"Heat","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mike Lupica"},{"book_id":28921,"title":"The Remains of the Day","image_url":"https:\/\/images.gr-assets.com\/books\/1327128714m\/28921.jpg","authors":"Kazuo Ishiguro"},{"book_id":28922,"title":"An Artist of the Floating World","image_url":"https:\/\/images.gr-assets.com\/books\/1327786035m\/28922.jpg","authors":"Kazuo Ishiguro"},{"book_id":28923,"title":"When We Were Orphans","image_url":"https:\/\/images.gr-assets.com\/books\/1465820100m\/28923.jpg","authors":"Kazuo Ishiguro"},{"book_id":28940,"title":"Behind the Scenes at the Museum","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kate Atkinson"},{"book_id":29022,"title":"The Twelve Caesars","image_url":"https:\/\/images.gr-assets.com\/books\/1347187766m\/29022.jpg","authors":"Suetonius, Michael Grant, Robert Graves"},{"book_id":29034,"title":"Twelve Angry Men","image_url":"https:\/\/images.gr-assets.com\/books\/1327910292m\/29034.jpg","authors":"Reginald Rose, David Mamet"},{"book_id":29036,"title":"The Great Influenza: The Story of the Deadliest Pandemic in History","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John M. Barry"},{"book_id":29044,"title":"The Secret History","image_url":"https:\/\/images.gr-assets.com\/books\/1451554846m\/29044.jpg","authors":"Donna Tartt"},{"book_id":29059,"title":"Choke","image_url":"https:\/\/images.gr-assets.com\/books\/1403186013m\/29059.jpg","authors":"Chuck Palahniuk"},{"book_id":29127,"title":"The Last Unicorn (The Last Unicorn, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1358147318m\/29127.jpg","authors":"Peter S. Beagle"},{"book_id":29187,"title":"Time of the Twins (Dragonlance: Legends, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1390667790m\/29187.jpg","authors":"Margaret Weis, Tracy Hickman"},{"book_id":29209,"title":"The Color of Water: A Black Man's Tribute to His White Mother","image_url":"https:\/\/images.gr-assets.com\/books\/1401311300m\/29209.jpg","authors":"James McBride"},{"book_id":29254,"title":"Be Here Now","image_url":"https:\/\/images.gr-assets.com\/books\/1369858407m\/29254.jpg","authors":"Ram Dass, Richard Alpert"},{"book_id":29291,"title":"Make Way for Ducklings","image_url":"https:\/\/images.gr-assets.com\/books\/1362580777m\/29291.jpg","authors":"Robert McCloskey"},{"book_id":29393,"title":"Our Band Could Be Your Life: Scenes from the American Indie Underground 1981-1991","image_url":"https:\/\/images.gr-assets.com\/books\/1168029429m\/29393.jpg","authors":"Michael Azerrad"},{"book_id":29394,"title":"Cursor's Fury (Codex Alera, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jim Butcher"},{"book_id":29396,"title":"Furies of Calderon (Codex Alera, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1329104514m\/29396.jpg","authors":"Jim Butcher"},{"book_id":29397,"title":"Woken Furies (Takeshi Kovacs, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Richard K. Morgan"},{"book_id":29484,"title":"Strange Candy (Anita Blake, Vampire Hunter #0.5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Laurell K. Hamilton"},{"book_id":29486,"title":"Candy Girl: A Year in the Life of an Unlikely Stripper","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Diablo Cody"},{"book_id":29501,"title":"The End of Faith: Religion, Terror, and the Future of Reason","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sam Harris"},{"book_id":29547,"title":"Everyone Worth Knowing","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lauren Weisberger"},{"book_id":29579,"title":"Foundation (Foundation #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1417900846m\/29579.jpg","authors":"Isaac Asimov"},{"book_id":29580,"title":"Second Foundation (Foundation #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1417900922m\/29580.jpg","authors":"Isaac Asimov"},{"book_id":29581,"title":"Foundation and Empire (Foundation #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Isaac Asimov"},{"book_id":29582,"title":"Foundation and Earth (Foundation #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Isaac Asimov"},{"book_id":29641,"title":"The End of the Affair","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Graham Greene, Monica Ali"},{"book_id":29744,"title":"Goodbye, Columbus and Five Short Stories","image_url":"https:\/\/images.gr-assets.com\/books\/1408068287m\/29744.jpg","authors":"Philip Roth"},{"book_id":29797,"title":"The Pilgrim's Progress","image_url":"https:\/\/images.gr-assets.com\/books\/1405982367m\/29797.jpg","authors":"John Bunyan"},{"book_id":29800,"title":"Scott Pilgrim, Volume 1: Scott Pilgrim's Precious Little Life","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bryan Lee O'Malley"},{"book_id":29801,"title":"Scott Pilgrim, Volume 2: Scott Pilgrim vs. The World","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bryan Lee O'Malley"},{"book_id":29802,"title":"Scott Pilgrim, Volume 3: Scott Pilgrim & The Infinite Sadness","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bryan Lee O'Malley"},{"book_id":29923,"title":"The Last Full Measure (The Civil War Trilogy, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1331939776m\/29923.jpg","authors":"Jeff Shaara"},{"book_id":29925,"title":"Gods and Generals (The Civil War Trilogy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1330062676m\/29925.jpg","authors":"Jeff Shaara"},{"book_id":29946,"title":"Illusions: The Adventures of a Reluctant Messiah","image_url":"https:\/\/images.gr-assets.com\/books\/1353964306m\/29946.jpg","authors":"Richard Bach"},{"book_id":29948,"title":"The Bridge Across Forever: A True Love Story","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Richard Bach"},{"book_id":29981,"title":"The Island of Dr. Moreau","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"H.G. Wells"},{"book_id":29999,"title":"The Maltese Falcon","image_url":"https:\/\/images.gr-assets.com\/books\/1306421260m\/29999.jpg","authors":"Dashiell Hammett"},{"book_id":30005,"title":"Red Harvest","image_url":"https:\/\/images.gr-assets.com\/books\/1320423692m\/30005.jpg","authors":"Dashiell Hammett"},{"book_id":30013,"title":"Prelude to Foundation","image_url":"https:\/\/images.gr-assets.com\/books\/1335782474m\/30013.jpg","authors":"Isaac Asimov"},{"book_id":30016,"title":"The Naked Sun (Robot #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1335782263m\/30016.jpg","authors":"Isaac Asimov"},{"book_id":30036,"title":"Elric of Melnibon\u00e9 (Elric, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael Moorcock"},{"book_id":30043,"title":"A River Runs Through It and Other Stories","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Norman Maclean"},{"book_id":30065,"title":"The Walking Dead, Vol. 05: The Best Defense","image_url":"https:\/\/images.gr-assets.com\/books\/1345769360m\/30065.jpg","authors":"Robert Kirkman, Charlie Adlard, Cliff Rathburn"},{"book_id":30068,"title":"The Book of the Dead (Pendergast, #7; Diogenes, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Douglas Preston, Lincoln Child"},{"book_id":30069,"title":"The Walking Dead, Vol. 03: Safety Behind Bars","image_url":"https:\/\/images.gr-assets.com\/books\/1345769167m\/30069.jpg","authors":"Robert Kirkman, Charlie Adlard"},{"book_id":30071,"title":"The Walking Dead, Book One (The Walking Dead #1-12)","image_url":"https:\/\/images.gr-assets.com\/books\/1464733555m\/30071.jpg","authors":"Robert Kirkman, Tony Moore, Charlie Adlard, Cliff Rathburn"},{"book_id":30118,"title":"A Light in the Attic","image_url":"https:\/\/images.gr-assets.com\/books\/1427169918m\/30118.jpg","authors":"Shel Silverstein"},{"book_id":30119,"title":"Where the Sidewalk Ends","image_url":"https:\/\/images.gr-assets.com\/books\/1168052448m\/30119.jpg","authors":"Shel Silverstein"},{"book_id":30120,"title":"Falling Up","image_url":"https:\/\/images.gr-assets.com\/books\/1327871908m\/30120.jpg","authors":"Shel Silverstein"},{"book_id":30122,"title":"The Missing Piece","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Shel Silverstein"},{"book_id":30125,"title":"The Missing Piece Meets the Big O ","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Shel Silverstein"},{"book_id":30183,"title":"Marked (House of Night, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1317067002m\/30183.jpg","authors":"P.C. Cast, Kristin Cast"},{"book_id":30224,"title":"Mistral's Kiss (Merry Gentry, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Laurell K. Hamilton"},{"book_id":30225,"title":"The Harlequin (Anita Blake, Vampire Hunter #15)","image_url":"https:\/\/images.gr-assets.com\/books\/1257988532m\/30225.jpg","authors":"Laurell K. Hamilton"},{"book_id":30226,"title":"A Stroke of Midnight (Merry Gentry, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1400966510m\/30226.jpg","authors":"Laurell K. Hamilton"},{"book_id":30228,"title":"Micah (Anita Blake, Vampire Hunter, #13)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Laurell K. Hamilton"},{"book_id":30240,"title":"A Caress of Twilight (Merry Gentry, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1327877187m\/30240.jpg","authors":"Laurell K. Hamilton"},{"book_id":30241,"title":"Bloody Bones (Anita Blake, Vampire Hunter #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1304126691m\/30241.jpg","authors":"Laurell K. Hamilton"},{"book_id":30242,"title":"Burnt Offerings (Anita Blake, Vampire Hunter, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1289528358m\/30242.jpg","authors":"Laurell K. Hamilton"},{"book_id":30243,"title":"Seduced by Moonlight (Merry Gentry, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1500145890m\/30243.jpg","authors":"Laurell K. Hamilton"},{"book_id":30244,"title":"The Killing Dance (Anita Blake, Vampire Hunter, #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Laurell K. Hamilton"},{"book_id":30245,"title":"Cerulean Sins (Anita Blake, Vampire Hunter, #11)","image_url":"https:\/\/images.gr-assets.com\/books\/1396595697m\/30245.jpg","authors":"Laurell K. Hamilton"},{"book_id":30246,"title":"Blue Moon (Anita Blake, Vampire Hunter, #8)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Laurell K. Hamilton"},{"book_id":30248,"title":"Narcissus in Chains (Anita Blake, Vampire Hunter, #10)","image_url":"https:\/\/images.gr-assets.com\/books\/1386179578m\/30248.jpg","authors":"Laurell K. Hamilton"},{"book_id":30259,"title":"For a Few Demons More (The Hollows, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1319592584m\/30259.jpg","authors":"Kim Harrison"},{"book_id":30260,"title":"A Fistful of Charms (The Hollows, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1348805978m\/30260.jpg","authors":"Kim Harrison"},{"book_id":30262,"title":"The Good, the Bad, and the Undead (The Hollows, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1391023304m\/30262.jpg","authors":"Kim Harrison"},{"book_id":30263,"title":"Every Which Way But Dead (The Hollows, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1347819379m\/30263.jpg","authors":"Kim Harrison"},{"book_id":30264,"title":"Dead Witch Walking (The Hollows, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1391713381m\/30264.jpg","authors":"Kim Harrison"},{"book_id":30271,"title":"Incubus Dreams (Anita Blake, Vampire Hunter, #12)","image_url":"https:\/\/images.gr-assets.com\/books\/1362831466m\/30271.jpg","authors":"Laurell K. Hamilton"},{"book_id":30273,"title":"The Lunatic Cafe (Anita Blake, Vampire Hunter #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Laurell K. Hamilton"},{"book_id":30274,"title":"Circus of the Damned (Anita Blake, Vampire Hunter, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Laurell K. Hamilton"},{"book_id":30281,"title":"Guilty Pleasures (Anita Blake, Vampire Hunter, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Laurell K. Hamilton"},{"book_id":30289,"title":"The Republic","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Plato, Desmond Lee"},{"book_id":30292,"title":"Five Dialogues: Euthyphro, Apology, Crito, Meno, Phaedo","image_url":"https:\/\/images.gr-assets.com\/books\/1399079227m\/30292.jpg","authors":"Plato, G.M.A. Grube, John M. Cooper"},{"book_id":30324,"title":"Blood and Chocolate","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Annette Curtis Klause"},{"book_id":30334,"title":"Hawksong (The Kiesha'ra, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Amelia Atwater-Rhodes"},{"book_id":30343,"title":"Ricochet","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sandra Brown"},{"book_id":30347,"title":"The Alibi","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sandra Brown"},{"book_id":30474,"title":"The Communist Manifesto","image_url":"https:\/\/images.gr-assets.com\/books\/1420003664m\/30474.jpg","authors":"Karl Marx, Friedrich Engels, Gareth Stedman Jones"},{"book_id":30512,"title":"Paddy Clarke Ha Ha Ha","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Roddy Doyle"},{"book_id":30593,"title":"Pnin","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Vladimir Nabokov, David Lodge"},{"book_id":30597,"title":"The Hunchback of Notre-Dame","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Victor Hugo, Walter J. Cobb"},{"book_id":30633,"title":"The Four Loves","image_url":"https:\/\/images.gr-assets.com\/books\/1276287504m\/30633.jpg","authors":"C.S. Lewis"},{"book_id":30636,"title":"Miracles","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"C.S. Lewis"},{"book_id":30658,"title":"Meditations on First Philosophy","image_url":"https:\/\/images.gr-assets.com\/books\/1405624521m\/30658.jpg","authors":"Ren\u00e9 Descartes, Donald A. Cress"},{"book_id":30659,"title":"Meditations","image_url":"https:\/\/images.gr-assets.com\/books\/1421618636m\/30659.jpg","authors":"Marcus Aurelius, Martin Hammond, Diskin Clay"},{"book_id":30672,"title":"Darkness at Noon","image_url":"https:\/\/images.gr-assets.com\/books\/1290053535m\/30672.jpg","authors":"Arthur Koestler, Daphne Hardy"},{"book_id":30852,"title":"The Woman Warrior","image_url":"https:\/\/images.gr-assets.com\/books\/1418654290m\/30852.jpg","authors":"Maxine Hong Kingston"},{"book_id":30868,"title":"The Bean Trees (Greer Family, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1443483961m\/30868.jpg","authors":"Barbara Kingsolver"},{"book_id":30919,"title":"Scoop","image_url":"https:\/\/images.gr-assets.com\/books\/1416017359m\/30919.jpg","authors":"Evelyn Waugh"},{"book_id":30933,"title":"Brideshead Revisited: The Sacred and Profane Memories of Captain Charles Ryder","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Evelyn Waugh"},{"book_id":31072,"title":"Under the Volcano","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Malcolm Lowry"},{"book_id":31087,"title":"The Last Boleyn","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Karen Harper"},{"book_id":31098,"title":"Swapping Lives","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jane Green"},{"book_id":31099,"title":"Babyville","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jane Green"},{"book_id":31100,"title":"To Have and to Hold","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jane Green"},{"book_id":31101,"title":"Mr. Maybe","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jane Green"},{"book_id":31106,"title":"Second Chance","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jane Green"},{"book_id":31122,"title":"I Capture the Castle","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dodie Smith"},{"book_id":31157,"title":"The Rising: Antichrist is Born (Before They Were Left Behind, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tim LaHaye, Jerry B. Jenkins"},{"book_id":31168,"title":"Shirley","image_url":"https:\/\/images.gr-assets.com\/books\/1422609409m\/31168.jpg","authors":"Charlotte Bront\u00eb, Lucasta Miller, collaborative, Jessica Cox"},{"book_id":31173,"title":"Villette","image_url":"https:\/\/images.gr-assets.com\/books\/1320412741m\/31173.jpg","authors":"Charlotte Bront\u00eb, A.S. Byatt, \u039c\u03b1\u03c1\u03af\u03b1 \u039b\u03b1\u03ca\u03bd\u03ac, Ignes Sodre"},{"book_id":31175,"title":"The Professor","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Charlotte Bront\u00eb"},{"book_id":31178,"title":"Back When We Were Grownups","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anne Tyler"},{"book_id":31181,"title":"Breathing Lessons","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anne Tyler"},{"book_id":31196,"title":"The Razor's Edge","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"W. Somerset Maugham"},{"book_id":31231,"title":"The Matarese Circle (Matarese #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert Ludlum"},{"book_id":31242,"title":"Bleak House","image_url":"https:\/\/images.gr-assets.com\/books\/1280113147m\/31242.jpg","authors":"Charles Dickens, Nicola Bradbury, Hablot Knight Browne"},{"book_id":31244,"title":"Our Mutual Friend","image_url":"https:\/\/images.gr-assets.com\/books\/1403189244m\/31244.jpg","authors":"Charles Dickens"},{"book_id":31250,"title":"Little Dorrit","image_url":"https:\/\/images.gr-assets.com\/books\/1496619146m\/31250.jpg","authors":"Charles Dickens, Helen Small, Stephen Wall"},{"book_id":31259,"title":"The Bourne Ultimatum (Jason Bourne, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1408928937m\/31259.jpg","authors":"Robert Ludlum"},{"book_id":31266,"title":"The Scarlatti Inheritance","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert Ludlum"},{"book_id":31268,"title":"The Aquitaine Progression","image_url":"https:\/\/images.gr-assets.com\/books\/1408931400m\/31268.jpg","authors":"Robert Ludlum"},{"book_id":31271,"title":"The Matlock Paper","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert Ludlum"},{"book_id":31300,"title":"A Caribbean Mystery (Miss Marple, #10)","image_url":"https:\/\/images.gr-assets.com\/books\/1309280346m\/31300.jpg","authors":"Agatha Christie"},{"book_id":31304,"title":"Nemesis (Miss Marple, #12)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Agatha Christie"},{"book_id":31312,"title":"The Dance Of Anger: A Woman's Guide to Changing the Patterns of Intimate Relationships","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Harriet Lerner"},{"book_id":31313,"title":"Dance of the Gods (Circle Trilogy, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nora Roberts"},{"book_id":31314,"title":"Barnyard Dance","image_url":"https:\/\/images.gr-assets.com\/books\/1404580374m\/31314.jpg","authors":"Sandra Boynton"},{"book_id":31331,"title":"Blood Canticle (The Vampire Chronicles, #10)","image_url":"https:\/\/images.gr-assets.com\/books\/1327963715m\/31331.jpg","authors":"Anne Rice"},{"book_id":31332,"title":"The Vampire Armand (The Vampire Chronicles, #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anne Rice"},{"book_id":31333,"title":"Violin","image_url":"https:\/\/images.gr-assets.com\/books\/1479198883m\/31333.jpg","authors":"Anne Rice"},{"book_id":31334,"title":"Belinda","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anne Rice, Anne Rampling"},{"book_id":31335,"title":"Cry to Heaven","image_url":"https:\/\/images.gr-assets.com\/books\/1385216547m\/31335.jpg","authors":"Anne Rice"},{"book_id":31336,"title":"The Tale of the Body Thief (The Vampire Chronicles, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1361577271m\/31336.jpg","authors":"Anne Rice"},{"book_id":31337,"title":"Blackwood Farm (The Vampire Chronicles, #9)","image_url":"https:\/\/images.gr-assets.com\/books\/1327522790m\/31337.jpg","authors":"Anne Rice"},{"book_id":31338,"title":"Memnoch the Devil (The Vampire Chronicles, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1301778006m\/31338.jpg","authors":"Anne Rice"},{"book_id":31340,"title":"Lasher (Lives of the Mayfair Witches, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anne Rice"},{"book_id":31341,"title":"Blood And Gold (The Vampire Chronicles, #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1168274792m\/31341.jpg","authors":"Anne Rice"},{"book_id":31342,"title":"Vittorio, The Vampire (New Tales of the Vampires, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1289014320m\/31342.jpg","authors":"Anne Rice"},{"book_id":31343,"title":"Pandora (New Tales of the Vampires, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anne Rice"},{"book_id":31357,"title":"Prentice Alvin (Tales of Alvin Maker, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Orson Scott Card"},{"book_id":31360,"title":"Children of the Mind (Ender's Saga, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Orson Scott Card"},{"book_id":31374,"title":"A Great Deliverance (Inspector Lynley, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Elizabeth George"},{"book_id":31426,"title":"The Collected Poems","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sylvia Plath, Ted Hughes"},{"book_id":31456,"title":"The Twits","image_url":"https:\/\/images.gr-assets.com\/books\/1406090629m\/31456.jpg","authors":"Roald Dahl, Quentin Blake"},{"book_id":31463,"title":"Far from the Madding Crowd","image_url":"https:\/\/images.gr-assets.com\/books\/1388279695m\/31463.jpg","authors":"Thomas Hardy, Rosemarie Morgan, Shannon Russell"},{"book_id":31491,"title":"The Rainbow","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"D.H. Lawrence, Daphne Merkin"},{"book_id":31493,"title":"Standing in the Rainbow (Elmwood Springs, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1304980220m\/31493.jpg","authors":"Fannie Flagg"},{"book_id":31548,"title":"Of Human Bondage","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"W. Somerset Maugham, Benjamin DeMott, Maeve Binchy"},{"book_id":31555,"title":"Phantoms in the Brain: Probing the Mysteries of the Human Mind","image_url":"https:\/\/images.gr-assets.com\/books\/1409601908m\/31555.jpg","authors":"V.S. Ramachandran, Sandra Blakeslee, Oliver Sacks"},{"book_id":31623,"title":"Blow Fly (Kay Scarpetta, #12)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Patricia Cornwell"},{"book_id":31741,"title":"Innocent Erendira and Other Stories","image_url":"https:\/\/images.gr-assets.com\/books\/1410129032m\/31741.jpg","authors":"Gabriel Garc\u00eda M\u00e1rquez, Gregory Rabassa"},{"book_id":31795,"title":"The Story of Philosophy: The Lives and Opinions of the World's Greatest Philosophers","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Will Durant"},{"book_id":31818,"title":"The Philosophy of Andy Warhol (From A to B and Back Again)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Andy Warhol"},{"book_id":31819,"title":"Harry Potter and Philosophy: If Aristotle Ran Hogwarts","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Baggett, Shawn E. Klein"},{"book_id":31862,"title":"Discourse on Method and Meditations on First Philosophy","image_url":"https:\/\/images.gr-assets.com\/books\/1405624402m\/31862.jpg","authors":"Ren\u00e9 Descartes, Donald A. Cress"},{"book_id":31975,"title":"Astonishing X-Men, Volume 2: Dangerous","image_url":"https:\/\/images.gr-assets.com\/books\/1500464823m\/31975.jpg","authors":"Joss Whedon, John Cassaday"},{"book_id":31979,"title":"Astonishing X-Men, Volume 1: Gifted","image_url":"https:\/\/images.gr-assets.com\/books\/1500464817m\/31979.jpg","authors":"Joss Whedon, John Cassaday"},{"book_id":32067,"title":"Lady Chatterley's Lover","image_url":"https:\/\/images.gr-assets.com\/books\/1425007748m\/32067.jpg","authors":"D.H. Lawrence, Doris Lessing, Chester Brown"},{"book_id":32071,"title":"Sons and Lovers","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"D.H. Lawrence, Geoff Dyer"},{"book_id":32085,"title":"All Creatures Great and Small (All Creatures Great and Small, #1-2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Herriot"},{"book_id":32127,"title":"Ina May's Guide to Childbirth","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ina May Gaskin"},{"book_id":32145,"title":"Stiff: The Curious Lives of Human Cadavers","image_url":"https:\/\/images.gr-assets.com\/books\/1347656489m\/32145.jpg","authors":"Mary Roach"},{"book_id":32234,"title":"White Oleander","image_url":"https:\/\/images.gr-assets.com\/books\/1501159524m\/32234.jpg","authors":"Janet Fitch"},{"book_id":32254,"title":"The Mephisto Club (Rizzoli & Isles, #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tess Gerritsen"},{"book_id":32255,"title":"Vanish (Rizzoli & Isles, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tess Gerritsen"},{"book_id":32257,"title":"The Sinner (Rizzoli & Isles, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1277923817m\/32257.jpg","authors":"Tess Gerritsen"},{"book_id":32258,"title":"Body Double (Rizzoli & Isles, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tess Gerritsen"},{"book_id":32261,"title":"Tess of the D'Urbervilles","image_url":"https:\/\/images.gr-assets.com\/books\/1497218117m\/32261.jpg","authors":"Thomas Hardy, Tim Dolin, Margaret R. Higonnet"},{"book_id":32263,"title":"The Surgeon (Rizzoli & Isles, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1277923728m\/32263.jpg","authors":"Tess Gerritsen"},{"book_id":32276,"title":"Dragons of Eden: Speculations on the Evolution of Human Intelligence","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Carl Sagan"},{"book_id":32349,"title":"Mutant Message Down Under","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Marlo Morgan"},{"book_id":32370,"title":"Dry","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Augusten Burroughs"},{"book_id":32416,"title":"Hannibal Rising (Hannibal Lecter, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1394208690m\/32416.jpg","authors":"Thomas Harris"},{"book_id":32418,"title":"Hannibal (Hannibal Lecter, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1327356556m\/32418.jpg","authors":"Thomas Harris"},{"book_id":32421,"title":"Velocity","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dean Koontz"},{"book_id":32422,"title":"Hideaway","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dean Koontz"},{"book_id":32423,"title":"Watchers","image_url":"https:\/\/images.gr-assets.com\/books\/1308458930m\/32423.jpg","authors":"Dean Koontz"},{"book_id":32424,"title":"Lightning","image_url":"https:\/\/images.gr-assets.com\/books\/1410030512m\/32424.jpg","authors":"Dean Koontz"},{"book_id":32426,"title":"Icebound","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Axton, Dean Koontz"},{"book_id":32428,"title":"Shadow Fires","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Leigh Nichols, Dean Koontz"},{"book_id":32429,"title":"Dragon Tears","image_url":"https:\/\/images.gr-assets.com\/books\/1308458435m\/32429.jpg","authors":"Dean Koontz"},{"book_id":32430,"title":"The Bad Place","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dean Koontz"},{"book_id":32432,"title":"Fear Nothing (Moonlight Bay, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1168390806m\/32432.jpg","authors":"Dean Koontz"},{"book_id":32433,"title":"The Key to Midnight","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Leigh Nichols, Dean Koontz"},{"book_id":32434,"title":"Mr. Murder","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dean Koontz"},{"book_id":32435,"title":"Phantoms","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dean Koontz"},{"book_id":32437,"title":"The Face","image_url":"https:\/\/images.gr-assets.com\/books\/1370732538m\/32437.jpg","authors":"Dean Koontz"},{"book_id":32438,"title":"Shattered","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"K.R. Dwyer, Dean Koontz"},{"book_id":32439,"title":"Intensity","image_url":"https:\/\/images.gr-assets.com\/books\/1308458213m\/32439.jpg","authors":"Dean Koontz"},{"book_id":32441,"title":"The Good Guy","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dean Koontz"},{"book_id":32442,"title":"Cold Fire","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dean Koontz"},{"book_id":32443,"title":"The Eyes of Darkness","image_url":"https:\/\/images.gr-assets.com\/books\/1328218196m\/32443.jpg","authors":"Leigh Nichols, Dean Koontz"},{"book_id":32445,"title":"Strange Highways","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dean Koontz"},{"book_id":32446,"title":"The Door to December","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Richard Paige, Dean Koontz"},{"book_id":32453,"title":"The Servants of Twilight","image_url":"https:\/\/images.gr-assets.com\/books\/1327999566m\/32453.jpg","authors":"Leigh Nichols, Dean Koontz"},{"book_id":32456,"title":"Darkfall","image_url":"https:\/\/images.gr-assets.com\/books\/1308458183m\/32456.jpg","authors":"Dean Koontz"},{"book_id":32499,"title":"The Pelican Brief","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Grisham"},{"book_id":32501,"title":"Echo Park (Harry Bosch, #12; Harry Bosch Universe, #14)","image_url":"https:\/\/images.gr-assets.com\/books\/1168391416m\/32501.jpg","authors":"Michael Connelly"},{"book_id":32502,"title":"Angels Flight (Harry Bosch, #6; Harry Bosch Universe, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1440615586m\/32502.jpg","authors":"Michael Connelly"},{"book_id":32504,"title":"Blood Work (Harry Bosch Universe, #8; Terry McCaleb #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael Connelly"},{"book_id":32505,"title":"The Closers (Harry Bosch, #11; Harry Bosch Universe, #13)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael Connelly"},{"book_id":32506,"title":"The Poet (Jack McEvoy, #1; Harry Bosch Universe, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael Connelly"},{"book_id":32507,"title":"Chasing the Dime","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael Connelly"},{"book_id":32508,"title":"The Black Echo (Harry Bosch, #1; Harry Bosch Universe, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1344265342m\/32508.jpg","authors":"Michael Connelly"},{"book_id":32523,"title":"Hide (Detective D.D. Warren, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1327979037m\/32523.jpg","authors":"Lisa Gardner"},{"book_id":32525,"title":"Art Through the Ages ","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Helen Gardner, Fred S. Kleiner, Christin J. Mamiya"},{"book_id":32527,"title":"Alone (Detective D.D. Warren, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lisa Gardner"},{"book_id":32529,"title":"The Next Accident (Quincy & Rainie, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1348816896m\/32529.jpg","authors":"Lisa Gardner"},{"book_id":32530,"title":"The Third Victim (Quincy & Rainie, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lisa Gardner"},{"book_id":32542,"title":"A Time to Kill","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Grisham"},{"book_id":32552,"title":"Essential Tales and Poems","image_url":"https:\/\/images.gr-assets.com\/books\/1328753072m\/32552.jpg","authors":"Edgar Allan Poe, Benjamin F. Fisher"},{"book_id":32559,"title":"The Fall of the House of Usher and Other Tales ","image_url":"https:\/\/images.gr-assets.com\/books\/1355276847m\/32559.jpg","authors":"Edgar Allan Poe, Stephen Marlowe"},{"book_id":32585,"title":"Hunger","image_url":"https:\/\/images.gr-assets.com\/books\/1456243307m\/32585.jpg","authors":"Knut Hamsun, George Egerton"},{"book_id":32626,"title":"Books of Blood: Volumes One to Three (Books of Blood #1-3)","image_url":"https:\/\/images.gr-assets.com\/books\/1306747123m\/32626.jpg","authors":"Clive Barker"},{"book_id":32628,"title":"The Great and Secret Show (Book of the Art #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1407710558m\/32628.jpg","authors":"Clive Barker"},{"book_id":32636,"title":"Days of Magic, Nights of War (Abarat, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Clive Barker"},{"book_id":32638,"title":"The Thief of Always","image_url":"https:\/\/images.gr-assets.com\/books\/1309239541m\/32638.jpg","authors":"Clive Barker"},{"book_id":32650,"title":"The Return of the Native ","image_url":"https:\/\/images.gr-assets.com\/books\/1403182613m\/32650.jpg","authors":"Thomas Hardy, Alexander Theroux"},{"book_id":32669,"title":"Clear and Present Danger (Jack Ryan Universe, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1291440438m\/32669.jpg","authors":"Tom Clancy"},{"book_id":32682,"title":"Patriot Games (Jack Ryan Universe, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1328007145m\/32682.jpg","authors":"Tom Clancy"},{"book_id":32692,"title":"Gerald's Game","image_url":"https:\/\/images.gr-assets.com\/books\/1297737756m\/32692.jpg","authors":"Stephen King"},{"book_id":32767,"title":"At the Mountains of Madness","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"H.P. Lovecraft, China Mi\u00e9ville, S.T. Joshi"},{"book_id":32769,"title":"At the Mountains of Madness and Other Tales of Terror","image_url":"https:\/\/images.gr-assets.com\/books\/1226634493m\/32769.jpg","authors":"H.P. Lovecraft"},{"book_id":32807,"title":"Trojan Odyssey (Dirk Pitt, #17)","image_url":"https:\/\/images.gr-assets.com\/books\/1371338649m\/32807.jpg","authors":"Clive Cussler"},{"book_id":32812,"title":"Paradiso (The Divine Comedy, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dante Alighieri, Dorothy L. Sayers, Barbara Reynolds"},{"book_id":32827,"title":"From the Earth to the Moon (Extraordinary Voyages, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jules Verne"},{"book_id":32829,"title":"Journey to the Center of the Earth (Extraordinary Voyages, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jules Verne"},{"book_id":32831,"title":"The Mysterious Island (Extraordinary Voyages, #12)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jules Verne, Caleb Carr, Jordan Stump"},{"book_id":32929,"title":"Goodnight Moon","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Margaret Wise Brown, Clement Hurd"},{"book_id":32979,"title":"The Secret of the Old Clock (Nancy Drew, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1351534678m\/32979.jpg","authors":"Carolyn Keene, Russell H. Tandy, Sara Paretsky"},{"book_id":32987,"title":"The Greatest Generation","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tom Brokaw"},{"book_id":33144,"title":"Paint it Black","image_url":"https:\/\/images.gr-assets.com\/books\/1288972477m\/33144.jpg","authors":"Janet Fitch"},{"book_id":33293,"title":"Naked Economics: Undressing the Dismal Science","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Charles Wheelan"},{"book_id":33313,"title":"Kitchen Confidential: Adventures in the Culinary Underbelly","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anthony Bourdain"},{"book_id":33333,"title":"Searching for God Knows What","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Donald Miller"},{"book_id":33335,"title":"The Hidden Messages in Water","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Masaru Emoto, David A. Thayne"},{"book_id":33356,"title":"Jennifer Government","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Max Barry"},{"book_id":33418,"title":"Parallel Worlds: A Journey Through Creation, Higher Dimensions, and the Future of the Cosmos","image_url":"https:\/\/images.gr-assets.com\/books\/1435244003m\/33418.jpg","authors":"Michio Kaku"},{"book_id":33426,"title":"Hyperspace","image_url":"https:\/\/images.gr-assets.com\/books\/1404794967m\/33426.jpg","authors":"Michio Kaku"},{"book_id":33441,"title":"Fluke: Or, I Know Why the Winged Whale Sings","image_url":"https:\/\/images.gr-assets.com\/books\/1168444068m\/33441.jpg","authors":"Christopher Moore"},{"book_id":33443,"title":"Chocolate Chip Cookie Murder (Hannah Swensen, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Joanne Fluke"},{"book_id":33449,"title":"The 22 Immutable Laws of Marketing: Violate Them at Your Own Risk","image_url":"https:\/\/images.gr-assets.com\/books\/1417627150m\/33449.jpg","authors":"Al Ries, Jack Trout"},{"book_id":33453,"title":"You Suck (A Love Story, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1331323414m\/33453.jpg","authors":"Christopher Moore"},{"book_id":33454,"title":"Bloodsucking Fiends (A Love Story, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Christopher Moore"},{"book_id":33455,"title":"Island of the Sequined Love Nun","image_url":"https:\/\/images.gr-assets.com\/books\/1168444146m\/33455.jpg","authors":"Christopher Moore, Oliver Wyman"},{"book_id":33456,"title":"A Dirty Job (Grim Reaper, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1331323415m\/33456.jpg","authors":"Christopher Moore"},{"book_id":33457,"title":"Practical Demonkeeping (Pine Cove, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1429229158m\/33457.jpg","authors":"Christopher Moore"},{"book_id":33458,"title":"The Lust Lizard of Melancholy Cove (Pine Cove, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1168444147m\/33458.jpg","authors":"Christopher Moore"},{"book_id":33459,"title":"Coyote Blue","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Christopher Moore"},{"book_id":33507,"title":"Twenty Thousand Leagues Under the Sea","image_url":"https:\/\/images.gr-assets.com\/books\/1494979127m\/33507.jpg","authors":"Jules Verne, Anthony Bonner"},{"book_id":33512,"title":"One Thousand White Women: The Journals of May Dodd (One Thousand White Women#1)","image_url":"https:\/\/images.gr-assets.com\/books\/1389821957m\/33512.jpg","authors":"Jim Fergus"},{"book_id":33514,"title":"The Elements of Style","image_url":"https:\/\/images.gr-assets.com\/books\/1393947922m\/33514.jpg","authors":"William Strunk Jr., E.B. White"},{"book_id":33547,"title":"Hell House","image_url":"https:\/\/images.gr-assets.com\/books\/1384259876m\/33547.jpg","authors":"Richard Matheson"},{"book_id":33569,"title":"That Was Then, This Is Now","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"S.E. Hinton"},{"book_id":33600,"title":"Shantaram","image_url":"https:\/\/images.gr-assets.com\/books\/1333482282m\/33600.jpg","authors":"Gregory David Roberts"},{"book_id":33609,"title":"Katherine","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anya Seton, Philippa Gregory"},{"book_id":33668,"title":"4th of July (Women's Murder Club, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Patterson, Maxine Paetro"},{"book_id":33676,"title":"Saving the World and Other Extreme Sports (Maximum Ride, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Patterson"},{"book_id":33722,"title":"The Undomestic Goddess","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sophie Kinsella"},{"book_id":33723,"title":"Girls' Night In","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lauren Henderson, Chris Manby, Sarah Mlynowski, Jill A. Davis, Stella Duffy, Lisa Jewell, Marian Keyes, Sophie Kinsella, Ad\u00e8le Lang, Carole Matthews, Anna Maxted, Megan McCafferty, Alisa Valdes, Isabel Wolff, Meg Cabot, Jessica Adams, Louise Bagshawe, Emily Barr, Jenny Colgan, Lynda Curnyn, Jennifer Weiner"},{"book_id":33724,"title":"Can You Keep a Secret?","image_url":"https:\/\/images.gr-assets.com\/books\/1330464293m\/33724.jpg","authors":"Sophie Kinsella"},{"book_id":33726,"title":"Crazy For You","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jennifer Crusie"},{"book_id":33727,"title":"Welcome to Temptation (Dempseys, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1479663151m\/33727.jpg","authors":"Jennifer Crusie"},{"book_id":33729,"title":"Faking It (Dempseys, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1311973997m\/33729.jpg","authors":"Jennifer Crusie"},{"book_id":33732,"title":"Anyone But You","image_url":"https:\/\/images.gr-assets.com\/books\/1263487145m\/33732.jpg","authors":"Jennifer Crusie"},{"book_id":33770,"title":"Getting Over It","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anna Maxted"},{"book_id":33808,"title":"The Lion's Game (John Corey, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nelson DeMille"},{"book_id":33810,"title":"Plum Island (John Corey, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nelson DeMille"},{"book_id":33813,"title":"The Gold Coast","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nelson DeMille"},{"book_id":33820,"title":"Up Country","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nelson DeMille"},{"book_id":33896,"title":"Thirteen Moons","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Charles Frazier"},{"book_id":33906,"title":"Story of a Girl","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sara Zarr"},{"book_id":33917,"title":"The Namesake","image_url":"https:\/\/images.gr-assets.com\/books\/1480106986m\/33917.jpg","authors":"Jhumpa Lahiri"},{"book_id":33926,"title":"The Girls' Guide to Hunting and Fishing","image_url":"https:\/\/images.gr-assets.com\/books\/1309210476m\/33926.jpg","authors":"Melissa Bank"},{"book_id":34053,"title":"Just So Stories","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rudyard Kipling"},{"book_id":34057,"title":"Captains Courageous","image_url":"https:\/\/images.gr-assets.com\/books\/1327959659m\/34057.jpg","authors":"Rudyard Kipling"},{"book_id":34072,"title":"Jimmy Corrigan, the Smartest Kid on Earth","image_url":"https:\/\/images.gr-assets.com\/books\/1327962921m\/34072.jpg","authors":"Chris Ware"},{"book_id":34080,"title":"The Waste Land","image_url":"https:\/\/images.gr-assets.com\/books\/1327910597m\/34080.jpg","authors":"T.S. Eliot, Michael North"},{"book_id":34084,"title":"The Waste Lands (The Dark Tower, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Stephen King, Ned Dameron"},{"book_id":34262,"title":"Peter and the Starcatchers (Peter and the Starcatchers, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dave Barry, Ridley Pearson, Greg Call"},{"book_id":34268,"title":"Peter Pan","image_url":"https:\/\/images.gr-assets.com\/books\/1337714526m\/34268.jpg","authors":"J.M. Barrie, Michael Hague"},{"book_id":34295,"title":"Whitethorn Woods","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Maeve Binchy"},{"book_id":34310,"title":"The Glass Lake","image_url":"https:\/\/images.gr-assets.com\/books\/1342485933m\/34310.jpg","authors":"Maeve Binchy"},{"book_id":34312,"title":"The Copper Beech","image_url":"https:\/\/images.gr-assets.com\/books\/1355114025m\/34312.jpg","authors":"Maeve Binchy"},{"book_id":34451,"title":"Eat to Live: The Revolutionary Formula for Fast and Sustained Weight Loss","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Joel Fuhrman"},{"book_id":34452,"title":"Many Lives, Many Masters: The True Story of a Prominent Psychiatrist, His Young Patient, and the Past Life Therapy That Changed Both Their Lives","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Brian L. Weiss"},{"book_id":34484,"title":"Small Gods (Discworld, #13)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Terry Pratchett"},{"book_id":34492,"title":"Wintersmith (Discworld, #35; Tiffany Aching, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1290229201m\/34492.jpg","authors":"Terry Pratchett"},{"book_id":34494,"title":"The Wee Free Men (Discworld, #30; Tiffany Aching, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1443764106m\/34494.jpg","authors":"Terry Pratchett"},{"book_id":34497,"title":"The Color of Magic (Discworld, #1; Rincewind #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1407111017m\/34497.jpg","authors":"Terry Pratchett"},{"book_id":34498,"title":"The Truth (Discworld, #25; Industrial Revolution, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Terry Pratchett"},{"book_id":34499,"title":"Sourcery (Discworld, #5; Rincewind #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Terry Pratchett"},{"book_id":34501,"title":"A Hat Full of Sky (Discworld, #32; Tiffany Aching, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1319037274m\/34501.jpg","authors":"Terry Pratchett"},{"book_id":34502,"title":"Soul Music (Discworld, #16; Death, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Terry Pratchett"},{"book_id":34503,"title":"The Last Hero (Discworld, #27; Rincewind #7)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Terry Pratchett, Paul Kidby"},{"book_id":34504,"title":"Wyrd Sisters (Discworld, #6; Witches #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1275974472m\/34504.jpg","authors":"Terry Pratchett"},{"book_id":34506,"title":"The Light Fantastic (Discworld, #2; Rincewind #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Terry Pratchett"},{"book_id":34507,"title":"Equal Rites (Discworld, #3; Witches #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1407706800m\/34507.jpg","authors":"Terry Pratchett"},{"book_id":34508,"title":"Interesting Times: The Play","image_url":"https:\/\/images.gr-assets.com\/books\/1387302457m\/34508.jpg","authors":"Stephen Briggs, Terry Pratchett"},{"book_id":34510,"title":"Moving Pictures (Discworld, #10; Industrial Revolution, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1320456553m\/34510.jpg","authors":"Terry Pratchett"},{"book_id":34511,"title":"Monstrous Regiment (Discworld, #31; Industrial Revolution, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1375908503m\/34511.jpg","authors":"Terry Pratchett"},{"book_id":34517,"title":"Reaper Man (Discworld, #11; Death, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1389211958m\/34517.jpg","authors":"Terry Pratchett"},{"book_id":34527,"title":"Feet of Clay (Discworld, #19; City Watch, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1320490628m\/34527.jpg","authors":"Terry Pratchett"},{"book_id":34529,"title":"Lords and Ladies (Discworld, #14; Witches #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1469186110m\/34529.jpg","authors":"Terry Pratchett"},{"book_id":34532,"title":"Hogfather (Discworld, #20; Death, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1416342611m\/34532.jpg","authors":"Terry Pratchett"},{"book_id":34534,"title":"The Amazing Maurice and His Educated Rodents (Discworld, #28)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Terry Pratchett"},{"book_id":34541,"title":"Carpe Jugulum (Discworld #23; Witches #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Terry Pratchett"},{"book_id":34548,"title":"If Chins Could Kill: Confessions of a B-Movie Actor","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bruce Campbell"},{"book_id":34605,"title":"The Damnation Game","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Clive Barker"},{"book_id":34760,"title":"All I Really Need to Know I Learned in Kindergarten","image_url":"https:\/\/images.gr-assets.com\/books\/1403541609m\/34760.jpg","authors":"Robert Fulghum"},{"book_id":34871,"title":"The Complete Clive Barker's The Great And Secret Show","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Chris Ryall, Gabriel Rodr\u00edguez, Clive Barker"},{"book_id":34897,"title":"The Dragon Reborn (Wheel of Time, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1480096580m\/34897.jpg","authors":"Robert Jordan"},{"book_id":34898,"title":"My Father's Dragon (My Father's Dragon, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ruth Stiles Gannett"},{"book_id":34919,"title":"The Talismans of Shannara (Heritage of Shannara, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Terry Brooks"},{"book_id":34941,"title":"Star Wars - Episode I: The Phantom Menace","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Terry Brooks, George Lucas"},{"book_id":34988,"title":"The Scions of Shannara (Heritage of Shannara, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1429347355m\/34988.jpg","authors":"Terry Brooks"},{"book_id":34993,"title":"The Sum of All Fears (Jack Ryan Universe, #7)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tom Clancy"},{"book_id":35100,"title":"Battle Cry of Freedom","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James M. McPherson"},{"book_id":35125,"title":"Alien","image_url":"https:\/\/images.gr-assets.com\/books\/1332019229m\/35125.jpg","authors":"Alan Dean Foster"},{"book_id":35210,"title":"How to Talk to Anyone: 92 Little Tricks for Big Success in Relationships","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Leil Lowndes"},{"book_id":35220,"title":"The Red Badge of Courage","image_url":"https:\/\/images.gr-assets.com\/books\/1327936136m\/35220.jpg","authors":"Stephen Crane"},{"book_id":35231,"title":"Lord of Chaos (Wheel of Time, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1480096417m\/35231.jpg","authors":"Robert Jordan"},{"book_id":35233,"title":"The Wheel of Time: Boxed Set #1 (Wheel of Time, #1-3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert Jordan"},{"book_id":35332,"title":"Remember (Redemption, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1406506306m\/35332.jpg","authors":"Karen Kingsbury, Gary Smalley"},{"book_id":35354,"title":"Remember Me","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mary Higgins Clark"},{"book_id":35430,"title":"Path of Destruction (Star Wars: Darth Bane, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Drew Karpyshyn"},{"book_id":35476,"title":"Black Elk Speaks: Being the Life Story of a Holy Man of the Oglala Sioux","image_url":"https:\/\/images.gr-assets.com\/books\/1328819916m\/35476.jpg","authors":"Black Elk, John G. Neihardt"},{"book_id":35488,"title":"Cash","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Johnny Cash, Patrick Carr"},{"book_id":35519,"title":"The Power of Myth","image_url":"https:\/\/images.gr-assets.com\/books\/1327878742m\/35519.jpg","authors":"Joseph Campbell, Bill Moyers"},{"book_id":35539,"title":"The Beatles: The Biography","image_url":"https:\/\/images.gr-assets.com\/books\/1327951066m\/35539.jpg","authors":"Bob Spitz"},{"book_id":35729,"title":"Lover Eternal (Black Dagger Brotherhood, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1300845974m\/35729.jpg","authors":"J.R. Ward"},{"book_id":35743,"title":"The Tin Drum","image_url":"https:\/\/images.gr-assets.com\/books\/1327945103m\/35743.jpg","authors":"G\u00fcnter Grass"},{"book_id":35805,"title":"The Capture (Guardians of Ga'Hoole, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kathryn Lasky"},{"book_id":35816,"title":"2061: Odyssey Three (Space Odyssey, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Arthur C. Clarke"},{"book_id":35921,"title":"On Basilisk Station (Honor Harrington, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Weber"},{"book_id":35982,"title":"My Horizontal Life: A Collection of One-Night Stands","image_url":"https:\/\/images.gr-assets.com\/books\/1388631721m\/35982.jpg","authors":"Chelsea Handler"},{"book_id":36058,"title":"The Big Nowhere (L.A. Quartet, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Ellroy"},{"book_id":36064,"title":"American Tabloid (Underworld USA, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1403181563m\/36064.jpg","authors":"James Ellroy"},{"book_id":36071,"title":"First Things First","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Stephen R. Covey, A. Roger Merrill, Rebecca R. Merrill"},{"book_id":36072,"title":"The 7 Habits of Highly Effective People: Powerful Lessons in Personal Change","image_url":"https:\/\/images.gr-assets.com\/books\/1421842784m\/36072.jpg","authors":"Stephen R. Covey"},{"book_id":36076,"title":"The Speed of Trust: The One Thing that Changes Everything","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Stephen M.R. Covey"},{"book_id":36086,"title":"The Ghost Map: The Story of London's Most Terrifying Epidemic - and How It Changed Science, Cities, and the Modern World","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Steven Johnson"},{"book_id":36159,"title":"Black Sun Rising (The Coldfire Trilogy, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"C.S. Friedman"},{"book_id":36315,"title":"The Best of H.P. Lovecraft: Bloodcurdling Tales of Horror and the Macabre","image_url":"https:\/\/images.gr-assets.com\/books\/1333214256m\/36315.jpg","authors":"H.P. Lovecraft, August Derleth, Robert Bloch"},{"book_id":36529,"title":"Narrative of the Life of Frederick Douglass","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Frederick Douglass"},{"book_id":36638,"title":"The Wolves of Willoughby Chase (The Wolves Chronicles, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1441688212m\/36638.jpg","authors":"Joan Aiken, Pat Marriott"},{"book_id":37034,"title":"The Woman in Black","image_url":"https:\/\/images.gr-assets.com\/books\/1327869942m\/37034.jpg","authors":"Susan Hill, John Lawrence"},{"book_id":37095,"title":"The Shell Seekers","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rosamunde Pilcher"},{"book_id":37100,"title":"Devil in a Blue Dress (Easy Rawlins, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1336545202m\/37100.jpg","authors":"Walter Mosley"},{"book_id":37186,"title":"The Miraculous Journey of Edward Tulane","image_url":"https:\/\/images.gr-assets.com\/books\/1361121815m\/37186.jpg","authors":"Kate DiCamillo, Bagram Ibatoulline"},{"book_id":37187,"title":"The Tiger Rising","image_url":"https:\/\/images.gr-assets.com\/books\/1479692331m\/37187.jpg","authors":"Kate DiCamillo"},{"book_id":37190,"title":"The Tale of Despereaux","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kate DiCamillo, Timothy Basil Ering"},{"book_id":37296,"title":"Night Prey (Lucas Davenport, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1341920902m\/37296.jpg","authors":"John Sandford"},{"book_id":37297,"title":"Eyes of Prey (Lucas Davenport, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1400408527m\/37297.jpg","authors":"John Sandford"},{"book_id":37298,"title":"Mind Prey (Lucas Davenport, #7)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Sandford"},{"book_id":37300,"title":"Broken Prey (Lucas Davenport, #16)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Sandford"},{"book_id":37301,"title":"Rules of Prey (Lucas Davenport, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Sandford"},{"book_id":37302,"title":"Certain Prey (Lucas Davenport, #10)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Sandford"},{"book_id":37303,"title":"Silent Prey (Lucas Davenport #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1309286873m\/37303.jpg","authors":"John Sandford"},{"book_id":37304,"title":"Winter Prey (Lucas Davenport, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Sandford"},{"book_id":37338,"title":"Wicked Ties (Wicked Lovers, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Shayla Black"},{"book_id":37377,"title":"On the Night You Were Born","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nancy Tillman"},{"book_id":37380,"title":"The Heart is a Lonely Hunter","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Carson McCullers"},{"book_id":37398,"title":"Jazz","image_url":"https:\/\/images.gr-assets.com\/books\/1317531331m\/37398.jpg","authors":"Toni Morrison"},{"book_id":37415,"title":"Their Eyes Were Watching God","image_url":"https:\/\/images.gr-assets.com\/books\/1368072803m\/37415.jpg","authors":"Zora Neale Hurston"},{"book_id":37426,"title":"Little Children","image_url":"https:\/\/images.gr-assets.com\/books\/1327556734m\/37426.jpg","authors":"Tom Perrotta"},{"book_id":37435,"title":"The Secret Life of Bees","image_url":"https:\/\/images.gr-assets.com\/books\/1473454532m\/37435.jpg","authors":"Sue Monk Kidd"},{"book_id":37442,"title":"Wicked: The Life and Times of the Wicked Witch of the West (The Wicked Years, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1437733293m\/37442.jpg","authors":"Gregory Maguire, Douglas Smith"},{"book_id":37451,"title":"You Know You Love Me (Gossip Girl, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1388599269m\/37451.jpg","authors":"Cecily von Ziegesar"},{"book_id":37470,"title":"The Other Boleyn Girl (The Plantagenet and Tudor Novels, #9)","image_url":"https:\/\/images.gr-assets.com\/books\/1355932638m\/37470.jpg","authors":"Philippa Gregory"},{"book_id":37526,"title":"Henry V","image_url":"https:\/\/images.gr-assets.com\/books\/1331563646m\/37526.jpg","authors":"William Shakespeare, Barbara A. Mowat, Paul Werstine"},{"book_id":37586,"title":"The Lost Colony (Artemis Fowl, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1360177158m\/37586.jpg","authors":"Eoin Colfer"},{"book_id":37619,"title":"Warlock (Ancient Egypt, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Wilbur Smith"},{"book_id":37677,"title":"The Call of the Wild\/White Fang","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jack London"},{"book_id":37732,"title":"Are You There God? It's Me, Margaret","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Judy Blume"},{"book_id":37737,"title":"Fudge-a-Mania (Fudge, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Judy Blume"},{"book_id":37738,"title":"Freckle Juice","image_url":"https:\/\/images.gr-assets.com\/books\/1295888341m\/37738.jpg","authors":"Judy Blume"},{"book_id":37739,"title":"Blubber","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Judy Blume"},{"book_id":37741,"title":"Tales of a Fourth Grade Nothing (Fudge, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Judy Blume"},{"book_id":37743,"title":"Forever . . .","image_url":"https:\/\/images.gr-assets.com\/books\/1327962165m\/37743.jpg","authors":"Judy Blume"},{"book_id":37781,"title":"Things Fall Apart (The African Trilogy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1352082529m\/37781.jpg","authors":"Chinua Achebe"},{"book_id":37793,"title":"A Doll's House","image_url":"https:\/\/images.gr-assets.com\/books\/1427119396m\/37793.jpg","authors":"Henrik Ibsen, Michael Meyer"},{"book_id":37847,"title":"The Long Hard Road Out of Hell","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Marilyn Manson, Neil Strauss"},{"book_id":37875,"title":"The Art of the Start: The Time-Tested, Battle-Hardened Guide for Anyone Starting Anything","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Guy Kawasaki"},{"book_id":38030,"title":"Savannah Blues (Weezie and Bebe Mysteries, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327883095m\/38030.jpg","authors":"Mary Kay Andrews"},{"book_id":38169,"title":"Alas, Babylon","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Pat Frank"},{"book_id":38180,"title":"On the Beach","image_url":"https:\/\/images.gr-assets.com\/books\/1327943327m\/38180.jpg","authors":"Nevil Shute"},{"book_id":38210,"title":"The Art of Happiness","image_url":"https:\/\/images.gr-assets.com\/books\/1309287434m\/38210.jpg","authors":"Dalai Lama XIV, Howard C. Cutler"},{"book_id":38262,"title":"Moll Flanders","image_url":"https:\/\/images.gr-assets.com\/books\/1338130955m\/38262.jpg","authors":"Daniel Defoe"},{"book_id":38296,"title":"The Last of the Mohicans (The Leatherstocking Tales #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Fenimore Cooper"},{"book_id":38315,"title":"Fooled by Randomness: The Hidden Role of Chance in Life and in the Markets","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nassim Nicholas Taleb"},{"book_id":38333,"title":"Black Hole","image_url":"https:\/\/images.gr-assets.com\/books\/1327895219m\/38333.jpg","authors":"Charles Burns"},{"book_id":38412,"title":"Fermat's Enigma: The Epic Quest to Solve the World's Greatest Mathematical Problem","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Simon Singh"},{"book_id":38447,"title":"The Handmaid's Tale","image_url":"https:\/\/images.gr-assets.com\/books\/1498057733m\/38447.jpg","authors":"Margaret Atwood"},{"book_id":38462,"title":"Giovanni's Room","image_url":"https:\/\/images.gr-assets.com\/books\/1501485157m\/38462.jpg","authors":"James Baldwin"},{"book_id":38500,"title":"Women","image_url":"https:\/\/images.gr-assets.com\/books\/1325028693m\/38500.jpg","authors":"Charles Bukowski"},{"book_id":38501,"title":"Ham on Rye","image_url":"https:\/\/images.gr-assets.com\/books\/1388195001m\/38501.jpg","authors":"Charles Bukowski"},{"book_id":38502,"title":"Notes of a Dirty Old Man","image_url":"https:\/\/images.gr-assets.com\/books\/1329635507m\/38502.jpg","authors":"Charles Bukowski"},{"book_id":38503,"title":"Tales of Ordinary Madness","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Charles Bukowski"},{"book_id":38505,"title":"Hollywood","image_url":"https:\/\/images.gr-assets.com\/books\/1361998529m\/38505.jpg","authors":"Charles Bukowski"},{"book_id":38529,"title":"Bite Me If You Can (Argeneau #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1351280801m\/38529.jpg","authors":"Lynsay Sands"},{"book_id":38548,"title":"Love Bites (Argeneau #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1354343261m\/38548.jpg","authors":"Lynsay Sands"},{"book_id":38562,"title":"A Bite to Remember (Argeneau #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1351280715m\/38562.jpg","authors":"Lynsay Sands"},{"book_id":38568,"title":"A Quick Bite (Argeneau #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1410129015m\/38568.jpg","authors":"Lynsay Sands"},{"book_id":38619,"title":"Magic Bites (Kate Daniels, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1331612872m\/38619.jpg","authors":"Ilona Andrews"},{"book_id":38703,"title":"Small Steps (Holes, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Louis Sachar"},{"book_id":38709,"title":"Holes (Holes, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327781893m\/38709.jpg","authors":"Louis Sachar, Louis Sachar"},{"book_id":38723,"title":"The Feminine Mystique","image_url":"https:\/\/images.gr-assets.com\/books\/1479777578m\/38723.jpg","authors":"Betty Friedan, Anna Quindlen"},{"book_id":38739,"title":"The Lord God Made Them All","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Herriot"},{"book_id":38743,"title":"All Things Bright and Beautiful (All Creatures Great and Small)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Herriot"},{"book_id":38787,"title":"Pedro P\u00e1ramo","image_url":"https:\/\/images.gr-assets.com\/books\/1500663791m\/38787.jpg","authors":"Juan Rulfo, Margaret Sayers Peden, Susan Sontag"},{"book_id":38855,"title":"Confederates in the Attic: Dispatches from the Unfinished Civil War","image_url":"https:\/\/images.gr-assets.com\/books\/1428284996m\/38855.jpg","authors":"Tony Horwitz"},{"book_id":38980,"title":"The Princess Diaries (The Princess Diaries, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1355011082m\/38980.jpg","authors":"Meg Cabot"},{"book_id":38990,"title":"Fun Home: A Family Tragicomic","image_url":"https:\/\/images.gr-assets.com\/books\/1327652831m\/38990.jpg","authors":"Alison Bechdel"},{"book_id":39020,"title":"1491: New Revelations of the Americas Before Columbus","image_url":"https:\/\/images.gr-assets.com\/books\/1327865228m\/39020.jpg","authors":"Charles C. Mann"},{"book_id":39026,"title":"Deep Storm (Jeremy Logan, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lincoln Child"},{"book_id":39028,"title":"The Wheel of Darkness (Pendergast, #8)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Douglas Preston, Lincoln Child"},{"book_id":39030,"title":"Reliquary (Pendergast, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Douglas Preston, Lincoln Child"},{"book_id":39031,"title":"The Cabinet of Curiosities (Pendergast, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1169235779m\/39031.jpg","authors":"Douglas Preston, Lincoln Child"},{"book_id":39032,"title":"Mount Dragon","image_url":"https:\/\/images.gr-assets.com\/books\/1312037682m\/39032.jpg","authors":"Douglas Preston, Lincoln Child"},{"book_id":39033,"title":"Still Life With Crows (Pendergast, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1169235780m\/39033.jpg","authors":"Douglas Preston, Lincoln Child"},{"book_id":39045,"title":"I Don't Know How She Does It","image_url":"https:\/\/images.gr-assets.com\/books\/1320396351m\/39045.jpg","authors":"Allison Pearson"},{"book_id":39542,"title":"How to Be a Domestic Goddess: Baking and the Art of Comfort Cooking","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nigella Lawson"},{"book_id":39662,"title":"Different Seasons","image_url":"https:\/\/images.gr-assets.com\/books\/1329662611m\/39662.jpg","authors":"Stephen King"},{"book_id":39664,"title":"Rita Hayworth and Shawshank Redemption: A Story from Different Seasons","image_url":"https:\/\/images.gr-assets.com\/books\/1315100686m\/39664.jpg","authors":"Stephen King"},{"book_id":39792,"title":"The Man Who Smiled (Kurt Wallander, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Henning Mankell, Laurie Thompson"},{"book_id":39795,"title":"The Dogs of Riga (Kurt Wallander, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1341858828m\/39795.jpg","authors":"Henning Mankell, Laurie Thompson"},{"book_id":39796,"title":"Sidetracked (Kurt Wallander, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Henning Mankell, Steven T. Murray"},{"book_id":39798,"title":"Firewall (Wallander, #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1341858941m\/39798.jpg","authors":"Henning Mankell, Ebba Segerberg"},{"book_id":39799,"title":"One Step Behind (Kurt Wallander, #7)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Henning Mankell, Ebba Segerberg"},{"book_id":39801,"title":"The White Lioness (Kurt Wallander, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Henning Mankell, Laurie Thompson"},{"book_id":39916,"title":"Epileptic","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David B."},{"book_id":39926,"title":"The Beauty Myth","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Naomi Wolf"},{"book_id":39933,"title":"How to Read Literature Like a Professor: A Lively and Entertaining Guide to Reading Between the Lines","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Thomas C. Foster"},{"book_id":39963,"title":"A Long Way from Chicago (A Long Way from Chicago, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Richard Peck"},{"book_id":39980,"title":"A Year Down Yonder (A Long Way from Chicago, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Richard Peck"},{"book_id":39988,"title":"Matilda","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Roald Dahl, Quentin Blake"},{"book_id":39999,"title":"The Boy in the Striped Pajamas","image_url":"https:\/\/images.gr-assets.com\/books\/1366228171m\/39999.jpg","authors":"John Boyne"},{"book_id":40024,"title":"The Alienist (Dr. Laszlo Kreizler, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Caleb Carr"},{"book_id":40067,"title":"Thunderstruck","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Erik Larson"},{"book_id":40102,"title":"Blink: The Power of Thinking Without Thinking","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Malcolm Gladwell"},{"book_id":40136,"title":"The Nasty Bits: Collected Varietal Cuts, Usable Trim, Scraps, and Bones","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anthony Bourdain"},{"book_id":40158,"title":"The Queen of Attolia (The Queen's Thief, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1293505506m\/40158.jpg","authors":"Megan Whalen Turner"},{"book_id":40159,"title":"The King of Attolia (The Queen's Thief, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1293505327m\/40159.jpg","authors":"Megan Whalen Turner"},{"book_id":40168,"title":"The Creative License: Giving Yourself Permission to Be The Artist You Truly Are","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Danny Gregory"},{"book_id":40173,"title":"Are You There, Vodka? It's Me, Chelsea","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Chelsea Handler"},{"book_id":40189,"title":"A Year in Provence","image_url":"https:\/\/images.gr-assets.com\/books\/1494896848m\/40189.jpg","authors":"Peter Mayle"},{"book_id":40200,"title":"The Crimson Petal and the White","image_url":"https:\/\/images.gr-assets.com\/books\/1408937589m\/40200.jpg","authors":"Michel Faber"},{"book_id":40217,"title":"Kushiel's Justice (Imriel's Trilogy, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jacqueline Carey"},{"book_id":40223,"title":"Kushiel's Avatar (Ph\u00e8dre's Trilogy, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jacqueline Carey"},{"book_id":40271,"title":"Alvin Journeyman (Tales of Alvin Maker, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Orson Scott Card"},{"book_id":40289,"title":"The Abyss","image_url":"https:\/\/images.gr-assets.com\/books\/1225165505m\/40289.jpg","authors":"Orson Scott Card, James Cameron"},{"book_id":40290,"title":"Seventh Son (Tales of Alvin Maker, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327295457m\/40290.jpg","authors":"Orson Scott Card"},{"book_id":40293,"title":"Pastwatch: The Redemption of Christopher Columbus","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Orson Scott Card"},{"book_id":40313,"title":"Full Tilt (Full #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1479699860m\/40313.jpg","authors":"Janet Evanovich, Charlotte Hughes"},{"book_id":40317,"title":"Lean Mean Thirteen (Stephanie Plum, #13)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Janet Evanovich"},{"book_id":40320,"title":"Full House (Full #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1479699904m\/40320.jpg","authors":"Janet Evanovich, Charlotte Hughes"},{"book_id":40329,"title":"Metro Girl (Alex Barnaby, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Janet Evanovich"},{"book_id":40331,"title":"To the Nines (Stephanie Plum, #9)","image_url":"https:\/\/images.gr-assets.com\/books\/1169433446m\/40331.jpg","authors":"Janet Evanovich"},{"book_id":40395,"title":"A Princess of Mars (Barsoom, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1332272118m\/40395.jpg","authors":"Edgar Rice Burroughs, John Seelye"},{"book_id":40425,"title":"Tarzan of the Apes (Tarzan, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Edgar Rice Burroughs"},{"book_id":40440,"title":"The Thirteenth Tale","image_url":"https:\/\/images.gr-assets.com\/books\/1346267826m\/40440.jpg","authors":"Diane Setterfield"},{"book_id":40445,"title":"Altered Carbon (Takeshi Kovacs, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1387128955m\/40445.jpg","authors":"Richard K. Morgan"},{"book_id":40465,"title":"Thank You for Smoking","image_url":"https:\/\/images.gr-assets.com\/books\/1350349077m\/40465.jpg","authors":"Christopher Buckley"},{"book_id":40470,"title":"Cities of the Plain (The Border Trilogy, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Cormac McCarthy"},{"book_id":40471,"title":"Outer Dark","image_url":"https:\/\/images.gr-assets.com\/books\/1356452527m\/40471.jpg","authors":"Cormac McCarthy"},{"book_id":40482,"title":"Harvest","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tess Gerritsen"},{"book_id":40483,"title":"Story of O (Story of O #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1464369941m\/40483.jpg","authors":"Pauline R\u00e9age, Sabine d'Estree"},{"book_id":40493,"title":"The Valley of Horses (Earth's Children, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1324059760m\/40493.jpg","authors":"Jean M. Auel"},{"book_id":40496,"title":"How Green Was My Valley","image_url":"https:\/\/images.gr-assets.com\/books\/1440708862m\/40496.jpg","authors":"Richard Llewellyn"},{"book_id":40526,"title":"Time and Again (Time, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1393198563m\/40526.jpg","authors":"Jack Finney"},{"book_id":40580,"title":"Stupid White Men","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael Moore"},{"book_id":40710,"title":"Blowback (Scot Harvath, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Brad Thor"},{"book_id":40722,"title":"The Sportswriter","image_url":"https:\/\/images.gr-assets.com\/books\/1327936345m\/40722.jpg","authors":"Richard Ford"},{"book_id":40745,"title":"Mindset: The New Psychology of Success","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Carol S. Dweck"},{"book_id":40923,"title":"Theodore Rex","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Edmund Morris"},{"book_id":40929,"title":"The Rise of Theodore Roosevelt","image_url":"https:\/\/images.gr-assets.com\/books\/1452010007m\/40929.jpg","authors":"Edmund Morris"},{"book_id":40992,"title":"Shadow & Claw (The Book of the New Sun #1-2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Gene Wolfe"},{"book_id":41069,"title":"Stand on Zanzibar","image_url":"https:\/\/images.gr-assets.com\/books\/1360613921m\/41069.jpg","authors":"John Brunner"},{"book_id":41193,"title":"A Thousand Acres","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jane Smiley"},{"book_id":41219,"title":"Possession","image_url":"https:\/\/images.gr-assets.com\/books\/1391124124m\/41219.jpg","authors":"A.S. Byatt"},{"book_id":41424,"title":"Beauty: A Retelling of the Story of Beauty and the Beast","image_url":"https:\/\/images.gr-assets.com\/books\/1294192311m\/41424.jpg","authors":"Robin McKinley"},{"book_id":41490,"title":"On the Street Where You Live","image_url":"https:\/\/images.gr-assets.com\/books\/1341761800m\/41490.jpg","authors":"Mary Higgins Clark"},{"book_id":41502,"title":"Lord John and the Brotherhood of the Blade (Lord John Grey, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Diana Gabaldon"},{"book_id":41667,"title":"My Side of the Mountain (Mountain, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jean Craighead George"},{"book_id":41681,"title":"The Jungle","image_url":"https:\/\/images.gr-assets.com\/books\/1332140681m\/41681.jpg","authors":"Upton Sinclair, Earl Lee, Kathleen DeGrave"},{"book_id":41684,"title":"The Jungle Books","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rudyard Kipling, Alev Lytle Croutier"},{"book_id":41689,"title":"The Key to Rebecca","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ken Follett"},{"book_id":41698,"title":"Deep Six (Dirk Pitt, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1400897211m\/41698.jpg","authors":"Clive Cussler"},{"book_id":41701,"title":"The Mediterranean Caper (Dirk Pitt, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Clive Cussler"},{"book_id":41704,"title":"Shock Wave (Dirk Pitt, #13)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Clive Cussler"},{"book_id":41706,"title":"Raise the Titanic! (Dirk Pitt, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Clive Cussler"},{"book_id":41707,"title":"Atlantis Found (Dirk Pitt, #15)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Clive Cussler"},{"book_id":41710,"title":"Iceberg (Dirk Pitt, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Clive Cussler"},{"book_id":41716,"title":"Sahara (Dirk Pitt, #11)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Clive Cussler"},{"book_id":41804,"title":"I, Robot (Robot #0.1)","image_url":"https:\/\/images.gr-assets.com\/books\/1388321463m\/41804.jpg","authors":"Isaac Asimov"},{"book_id":41810,"title":"The Robots of Dawn (Robot #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1351030933m\/41810.jpg","authors":"Isaac Asimov"},{"book_id":41811,"title":"The Caves of Steel (Robot #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1335782224m\/41811.jpg","authors":"Isaac Asimov"},{"book_id":41820,"title":"Pebble in the Sky (Galactic Empire #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1335782053m\/41820.jpg","authors":"Isaac Asimov"},{"book_id":41821,"title":"The Gods Themselves","image_url":"https:\/\/images.gr-assets.com\/books\/1351076141m\/41821.jpg","authors":"Isaac Asimov"},{"book_id":41865,"title":"Twilight (Twilight, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1361039443m\/41865.jpg","authors":"Stephenie Meyer"},{"book_id":41899,"title":"Fantastic Beasts and Where to Find Them","image_url":"https:\/\/images.gr-assets.com\/books\/1303738520m\/41899.jpg","authors":"Newt Scamander, J.K. Rowling, Albus Dumbledore"},{"book_id":41913,"title":"The Children of Men","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"P.D. James"},{"book_id":41918,"title":"There are No Children Here: The Story of Two Boys Growing Up in the Other America","image_url":"https:\/\/images.gr-assets.com\/books\/1320394274m\/41918.jpg","authors":"Alex Kotlowitz"},{"book_id":41950,"title":"Quentins","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Maeve Binchy"},{"book_id":41951,"title":"Scarlet Feather","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Maeve Binchy"},{"book_id":41958,"title":"Nights of Rain and Stars","image_url":"https:\/\/images.gr-assets.com\/books\/1355496059m\/41958.jpg","authors":"Maeve Binchy"},{"book_id":41962,"title":"Light a Penny Candle","image_url":"https:\/\/images.gr-assets.com\/books\/1320391955m\/41962.jpg","authors":"Maeve Binchy"},{"book_id":41967,"title":"Evening Class","image_url":"https:\/\/images.gr-assets.com\/books\/1368673760m\/41967.jpg","authors":"Maeve Binchy"},{"book_id":41977,"title":"Circle of Friends","image_url":"https:\/\/images.gr-assets.com\/books\/1342486126m\/41977.jpg","authors":"Maeve Binchy"},{"book_id":42038,"title":"Shakespeare's Sonnets","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"William Shakespeare, Katherine Duncan-Jones"},{"book_id":42058,"title":"Richard III","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"William Shakespeare, John Jowett"},{"book_id":42149,"title":"Baby Proof","image_url":"https:\/\/images.gr-assets.com\/books\/1361466583m\/42149.jpg","authors":"Emily Giffin"},{"book_id":42155,"title":"Something Blue (Darcy & Rachel, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Emily Giffin"},{"book_id":42156,"title":"Something Borrowed (Darcy & Rachel, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1305063535m\/42156.jpg","authors":"Emily Giffin"},{"book_id":42172,"title":"The Christmas Shoes (Christmas Hope #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1434144615m\/42172.jpg","authors":"Donna VanLiere"},{"book_id":42369,"title":"The Hundred Dresses","image_url":"https:\/\/images.gr-assets.com\/books\/1476941110m\/42369.jpg","authors":"Eleanor Estes, Louis Slobodkin"},{"book_id":42389,"title":"Band of Brothers: E Company, 506th Regiment, 101st Airborne from Normandy to Hitler's Eagle's Nest","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Stephen E. Ambrose"},{"book_id":42407,"title":"Babar the King","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jean de Brunhoff"},{"book_id":42432,"title":"God Emperor of Dune (Dune Chronicles #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1327131560m\/42432.jpg","authors":"Frank Herbert"},{"book_id":42435,"title":"In Harm's Way: The Sinking of the U.S.S. Indianapolis and the Extraordinary Story of Its Survivors","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Doug Stanton"},{"book_id":42512,"title":"We Were Soldiers Once... and Young: Ia Drang - The Battle that Changed the War in Vietnam","image_url":"https:\/\/images.gr-assets.com\/books\/1328912889m\/42512.jpg","authors":"Harold G. Moore, Joseph L. Galloway"},{"book_id":42547,"title":"The Autobiography of Martin Luther King, Jr.","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Martin Luther King Jr., Clayborne Carson"},{"book_id":42603,"title":"Black Like Me","image_url":"https:\/\/images.gr-assets.com\/books\/1311696842m\/42603.jpg","authors":"John Howard Griffin"},{"book_id":42607,"title":"As You Like It","image_url":"https:\/\/images.gr-assets.com\/books\/1327935363m\/42607.jpg","authors":"William Shakespeare"},{"book_id":42631,"title":"Having a Mary Heart in a Martha World: Finding Intimacy With God in the Busyness of Life","image_url":"https:\/\/images.gr-assets.com\/books\/1341472478m\/42631.jpg","authors":"Joanna Weaver"},{"book_id":42641,"title":"Resurrection","image_url":"https:\/\/images.gr-assets.com\/books\/1335874776m\/42641.jpg","authors":"Leo Tolstoy, Louise Maude, Aylmer Maude"},{"book_id":42661,"title":"The Fall of Berlin 1945","image_url":"https:\/\/images.gr-assets.com\/books\/1312049741m\/42661.jpg","authors":"Antony Beevor"},{"book_id":42691,"title":"The Haj","image_url":"https:\/\/images.gr-assets.com\/books\/1359743182m\/42691.jpg","authors":"Leon Uris"},{"book_id":42692,"title":"Mila 18","image_url":"https:\/\/images.gr-assets.com\/books\/1359742799m\/42692.jpg","authors":"Leon Uris"},{"book_id":42696,"title":"Trinity","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Leon Uris"},{"book_id":42697,"title":"Exodus","image_url":"https:\/\/images.gr-assets.com\/books\/1359742531m\/42697.jpg","authors":"Leon Uris"},{"book_id":42898,"title":"Lover Revealed (Black Dagger Brotherhood, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"J.R. Ward"},{"book_id":42899,"title":"Dark Lover (Black Dagger Brotherhood, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1429676285m\/42899.jpg","authors":"J.R. Ward"},{"book_id":42900,"title":"Lover Awakened (Black Dagger Brotherhood, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1388773547m\/42900.jpg","authors":"J.R. Ward"},{"book_id":42909,"title":"All Things Wise and Wonderful","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Herriot"},{"book_id":42933,"title":"Tai-Pan (Asian Saga, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Clavell"},{"book_id":42986,"title":"War and Remembrance (The Henry Family, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Herman Wouk"},{"book_id":43015,"title":"A Long Way Gone: Memoirs of a Boy Soldier","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ishmael Beah"},{"book_id":43035,"title":"White Fang","image_url":"https:\/\/images.gr-assets.com\/books\/1475878443m\/43035.jpg","authors":"Jack London"},{"book_id":43037,"title":"The Call of the Wild, White Fang and Other Stories","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jack London"},{"book_id":43049,"title":"The Sea Wolf","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jack London"},{"book_id":43070,"title":"The Essential Calvin and Hobbes: A Calvin and Hobbes Treasury","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bill Watterson"},{"book_id":43081,"title":"Marching Powder: A True Story of Friendship, Cocaine, and South America's Strangest Jail","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rusty Young, Thomas McFadden"},{"book_id":43255,"title":"Not Without My Daughter","image_url":"https:\/\/images.gr-assets.com\/books\/1416296090m\/43255.jpg","authors":"Betty Mahmoody"},{"book_id":43324,"title":"Are You Afraid of the Dark?","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sidney Sheldon"},{"book_id":43325,"title":"Nothing Lasts Forever","image_url":"https:\/\/images.gr-assets.com\/books\/1344265620m\/43325.jpg","authors":"Sidney Sheldon"},{"book_id":43326,"title":"Tell Me Your Dreams","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sidney Sheldon"},{"book_id":43327,"title":"The Sky is Falling","image_url":"https:\/\/images.gr-assets.com\/books\/1353302273m\/43327.jpg","authors":"Sidney Sheldon"},{"book_id":43328,"title":"Rage of Angels","image_url":"https:\/\/images.gr-assets.com\/books\/1356445383m\/43328.jpg","authors":"Sidney Sheldon"},{"book_id":43330,"title":"Master of the Game","image_url":"https:\/\/images.gr-assets.com\/books\/1170095440m\/43330.jpg","authors":"Sidney Sheldon"},{"book_id":43339,"title":"Where Are the Children?","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mary Higgins Clark"},{"book_id":43342,"title":"You Belong To Me","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mary Higgins Clark"},{"book_id":43345,"title":"A Cry In The Night","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mary Higgins Clark"},{"book_id":43352,"title":"I'll Be Seeing You","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mary Higgins Clark"},{"book_id":43357,"title":"Pretend You Don't See Her","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mary Higgins Clark"},{"book_id":43369,"title":"god is Not Great: How Religion Poisons Everything","image_url":"https:\/\/images.gr-assets.com\/books\/1411218313m\/43369.jpg","authors":"Christopher Hitchens"},{"book_id":43448,"title":"Flowers in the Attic (Dollanganger, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327880853m\/43448.jpg","authors":"V.C. Andrews"},{"book_id":43545,"title":"The Once and Future King (The Once and Future King #1-4)","image_url":"https:\/\/images.gr-assets.com\/books\/1338741283m\/43545.jpg","authors":"T.H. White"},{"book_id":43615,"title":"The Gunslinger (The Dark Tower, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1375776480m\/43615.jpg","authors":"Stephen King"},{"book_id":43641,"title":"Water for Elephants","image_url":"https:\/\/images.gr-assets.com\/books\/1494428973m\/43641.jpg","authors":"Sara Gruen"},{"book_id":43739,"title":"Iron Man: Extremis","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Warren Ellis, Adi Granov"},{"book_id":43758,"title":"The Queen of the Damned (The Vampire Chronicles, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1327871992m\/43758.jpg","authors":"Anne Rice"},{"book_id":43763,"title":"Interview with the Vampire (The Vampire Chronicles, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1380631642m\/43763.jpg","authors":"Anne Rice"},{"book_id":43780,"title":"Vampire Chronicles: Interview with the Vampire, The Vampire Lestat, The Queen of the Damned (Anne Rice)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anne Rice, Robert O'Keefe, F. Murray Abraham, Michael York, Kate Nelligan, David Purdham"},{"book_id":43781,"title":"Merrick (The Vampire Chronicles #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1170230458m\/43781.jpg","authors":"Anne Rice"},{"book_id":43782,"title":"The Mummy (Ramses the Damned #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anne Rice"},{"book_id":43797,"title":"Pandora \/ Vittorio the Vampire (New Tales of the Vampires)","image_url":"https:\/\/images.gr-assets.com\/books\/1320491463m\/43797.jpg","authors":"Anne Rice"},{"book_id":43798,"title":"The Feast of All Saints","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anne Rice"},{"book_id":43799,"title":"Exit to Eden","image_url":"https:\/\/images.gr-assets.com\/books\/1328206253m\/43799.jpg","authors":"Anne Rampling, Anne Rice"},{"book_id":43805,"title":"Servant of the Bones","image_url":"https:\/\/images.gr-assets.com\/books\/1312931293m\/43805.jpg","authors":"Anne Rice"},{"book_id":43808,"title":"Anne Rice's The Vampire Lestat: A Graphic Novel","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Faye Perozich, Anne Rice, John Bolton, Daerick Gr\u00f6ss"},{"book_id":43814,"title":"The Vampire Lestat (The Vampire Chronicles, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1347515742m\/43814.jpg","authors":"Anne Rice"},{"book_id":43818,"title":"Anne Rice's The Tale of the Body Thief (A Graphic Novel)","image_url":"https:\/\/images.gr-assets.com\/books\/1316019640m\/43818.jpg","authors":"Faye Perozich, Travis Moore, Michael Halbleib, Daerick Gr\u00f6ss, Anne Rice"},{"book_id":43841,"title":"When Christ and His Saints Slept (Henry II & Eleanor of Aquitaine, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1333577582m\/43841.jpg","authors":"Sharon Kay Penman"},{"book_id":43877,"title":"The Monk Who Sold His Ferrari: A Fable About Fulfilling Your Dreams Reaching Your Destiny","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robin S. Sharma"},{"book_id":43884,"title":"Phantom (Sword of Truth, #10)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Terry Goodkind"},{"book_id":43886,"title":"Debt of Bones (Sword of Truth, #0.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1502300279m\/43886.jpg","authors":"Terry Goodkind"},{"book_id":43887,"title":"Chainfire (Sword of Truth, #9)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Terry Goodkind"},{"book_id":43889,"title":"Wizard's First Rule (Sword of Truth, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Terry Goodkind"},{"book_id":43892,"title":"Blood of the Fold (Sword of Truth, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1443563626m\/43892.jpg","authors":"Terry Goodkind"},{"book_id":43893,"title":"Naked Empire (Sword of Truth, #8)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Terry Goodkind"},{"book_id":43908,"title":"Shadow of a Dark Queen (The Serpentwar Saga, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Raymond E. Feist"},{"book_id":43915,"title":"Magician: Apprentice (Raymond E. Feist's Magician: Apprentice #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Raymond E. Feist, Michael Avon Oeming, Bryan J.L. Glass, Ryan Stegman"},{"book_id":43916,"title":"Magician (The Riftwar Saga, #1-2)","image_url":"https:\/\/images.gr-assets.com\/books\/1472201148m\/43916.jpg","authors":"Raymond E. Feist"},{"book_id":43917,"title":"Rise of a Merchant Prince (The Serpentwar Saga, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1360282060m\/43917.jpg","authors":"Raymond E. Feist"},{"book_id":43924,"title":"Promise Me (Myron Bolitar #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1361152177m\/43924.jpg","authors":"Harlan Coben"},{"book_id":43926,"title":"The Innocent","image_url":"https:\/\/images.gr-assets.com\/books\/1309197260m\/43926.jpg","authors":"Harlan Coben"},{"book_id":43927,"title":"No Second Chance","image_url":"https:\/\/images.gr-assets.com\/books\/1309281936m\/43927.jpg","authors":"Harlan Coben"},{"book_id":43928,"title":"Deal Breaker (Myron Bolitar #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Harlan Coben"},{"book_id":43929,"title":"Darkest Fear (Myron Bolitar #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1315745037m\/43929.jpg","authors":"Harlan Coben"},{"book_id":43930,"title":"Gone for Good","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Harlan Coben"},{"book_id":43931,"title":"The Woods","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Harlan Coben"},{"book_id":43932,"title":"Drop Shot (Myron Bolitar #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Harlan Coben"},{"book_id":43933,"title":"Tell No One","image_url":"https:\/\/images.gr-assets.com\/books\/1421365049m\/43933.jpg","authors":"Harlan Coben"},{"book_id":43944,"title":"Suite Fran\u00e7aise","image_url":"https:\/\/images.gr-assets.com\/books\/1320445773m\/43944.jpg","authors":"Ir\u00e8ne N\u00e9mirovsky, Sandra Smith"},{"book_id":43945,"title":"Portnoy's Complaint","image_url":"https:\/\/images.gr-assets.com\/books\/1327929440m\/43945.jpg","authors":"Philip Roth, Luca Marinelli"},{"book_id":43992,"title":"True Evil","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Greg Iles"},{"book_id":43993,"title":"The Quiet Game","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Greg Iles"},{"book_id":44001,"title":"Small Island","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Andrea Levy"},{"book_id":44133,"title":"The Winter's Tale","image_url":"https:\/\/images.gr-assets.com\/books\/1327893509m\/44133.jpg","authors":"William Shakespeare"},{"book_id":44170,"title":"The Looking Glass Wars (The Looking Glass Wars, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1354845928m\/44170.jpg","authors":"Frank Beddor"},{"book_id":44184,"title":"Monster","image_url":"https:\/\/images.gr-assets.com\/books\/1404962824m\/44184.jpg","authors":"Walter Dean Myers"},{"book_id":44186,"title":"The Monster at the End of this Book","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jon Stone, Michael J. Smollin"},{"book_id":44255,"title":"Toujours Provence","image_url":"https:\/\/images.gr-assets.com\/books\/1411874268m\/44255.jpg","authors":"Peter Mayle"},{"book_id":44360,"title":"Sex God: Exploring the Endless Connections between Sexuality and Spirituality","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rob Bell"},{"book_id":44361,"title":"Velvet Elvis: Repainting the Christian Faith","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rob Bell"},{"book_id":44399,"title":"Too Busy Not to Pray: Slowing Down to Be With God","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bill Hybels, Lavonne Neff"},{"book_id":44543,"title":"Slammerkin","image_url":"https:\/\/images.gr-assets.com\/books\/1315155075m\/44543.jpg","authors":"Emma Donoghue"},{"book_id":44559,"title":"Life is Elsewhere","image_url":"https:\/\/images.gr-assets.com\/books\/1327945876m\/44559.jpg","authors":"Milan Kundera, Aaron Asher"},{"book_id":44597,"title":"Wide Sargasso Sea","image_url":"https:\/\/images.gr-assets.com\/books\/1327870846m\/44597.jpg","authors":"Jean Rhys"},{"book_id":44644,"title":"Principle-Centered Leadership","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Stephen R. Covey"},{"book_id":44652,"title":"Fablehaven (Fablehaven, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1460309528m\/44652.jpg","authors":"Brandon Mull"},{"book_id":44659,"title":"Pawn of Prophecy (The Belgariad, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1391346857m\/44659.jpg","authors":"David Eddings"},{"book_id":44660,"title":"The Belgariad Boxed Set: Pawn of Prophecy \/ Queen of Sorcery \/ Magician's Gambit \/ Castle of Wizardry \/ Enchanters' End Game (The Belgariad, #1-5)","image_url":"https:\/\/images.gr-assets.com\/books\/1391347386m\/44660.jpg","authors":"David Eddings"},{"book_id":44687,"title":"Enchanters' End Game (The Belgariad, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1217735909m\/44687.jpg","authors":"David Eddings"},{"book_id":44688,"title":"Magician's Gambit (The Belgariad, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1315276590m\/44688.jpg","authors":"David Eddings"},{"book_id":44796,"title":"The Moon and Sixpence","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"W. Somerset Maugham"},{"book_id":44905,"title":"Writing Down the Bones: Freeing the Writer Within","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Natalie Goldberg"},{"book_id":45020,"title":"Shakespeare's Landlord (Lily Bard, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Charlaine Harris"},{"book_id":45032,"title":"Mansfield Park","image_url":"https:\/\/images.gr-assets.com\/books\/1397063295m\/45032.jpg","authors":"Jane Austen, Kathryn Sutherland, Tony Tanner, Claire Lamont"},{"book_id":45100,"title":"Ship of Magic (Liveship Traders, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1360507722m\/45100.jpg","authors":"Robin Hobb"},{"book_id":45101,"title":"The Mad Ship (Liveship Traders, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1328628210m\/45101.jpg","authors":"Robin Hobb"},{"book_id":45102,"title":"Ship of Destiny (Liveship Traders, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1403180325m\/45102.jpg","authors":"Robin Hobb"},{"book_id":45106,"title":"Forest Mage (Soldier Son, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1446012746m\/45106.jpg","authors":"Robin Hobb"},{"book_id":45107,"title":"Assassin's Apprentice (Farseer Trilogy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1320339497m\/45107.jpg","authors":"Robin Hobb"},{"book_id":45108,"title":"Fool's Fate (Tawny Man, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robin Hobb"},{"book_id":45109,"title":"Golden Fool (Tawny Man, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robin Hobb"},{"book_id":45110,"title":"Shaman's Crossing (Soldier Son, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robin Hobb"},{"book_id":45112,"title":"Assassin's Quest (Farseer Trilogy, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1399584431m\/45112.jpg","authors":"Robin Hobb"},{"book_id":45162,"title":"Fingersmith","image_url":"https:\/\/images.gr-assets.com\/books\/1327879025m\/45162.jpg","authors":"Sarah Waters"},{"book_id":45169,"title":"Step on a Crack (Michael Bennett, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Patterson, Michael Ledwidge"},{"book_id":45181,"title":"Five Children and It (Five Children, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327882197m\/45181.jpg","authors":"E. Nesbit"},{"book_id":45195,"title":"A Passage to India","image_url":"https:\/\/images.gr-assets.com\/books\/1421883612m\/45195.jpg","authors":"E.M. Forster, Oliver Stallybrass, Pankaj Mishra"},{"book_id":45220,"title":"I Never Promised You a Rose Garden","image_url":"https:\/\/images.gr-assets.com\/books\/1309209871m\/45220.jpg","authors":"Hannah Green, Joanne Greenberg"},{"book_id":45234,"title":"The Gun Seller","image_url":"https:\/\/images.gr-assets.com\/books\/1480110444m\/45234.jpg","authors":"Hugh Laurie"},{"book_id":45244,"title":"Judas Unchained","image_url":"https:\/\/images.gr-assets.com\/books\/1316501189m\/45244.jpg","authors":"Peter F. Hamilton"},{"book_id":45245,"title":"The Reality Dysfunction (Night's Dawn, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1331274659m\/45245.jpg","authors":"Peter F. Hamilton"},{"book_id":45252,"title":"Pandora's Star","image_url":"https:\/\/images.gr-assets.com\/books\/1440699949m\/45252.jpg","authors":"Peter F. Hamilton"},{"book_id":45260,"title":"The Naked God (Night's Dawn, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1316548289m\/45260.jpg","authors":"Peter F. Hamilton"},{"book_id":45369,"title":"Arthur & George","image_url":"https:\/\/images.gr-assets.com\/books\/1419234701m\/45369.jpg","authors":"Julian Barnes"},{"book_id":45432,"title":"The Supernaturalist","image_url":"https:\/\/images.gr-assets.com\/books\/1233460677m\/45432.jpg","authors":"Eoin Colfer"},{"book_id":45546,"title":"Undaunted Courage: The Pioneering First Mission to Explore America's Wild Frontier","image_url":"https:\/\/images.gr-assets.com\/books\/1408925996m\/45546.jpg","authors":"Stephen E. Ambrose"},{"book_id":45685,"title":"The Canterville Ghost","image_url":"https:\/\/images.gr-assets.com\/books\/1363935696m\/45685.jpg","authors":"Oscar Wilde, Inga Moore"},{"book_id":45760,"title":"Girl With Curious Hair","image_url":"https:\/\/images.gr-assets.com\/books\/1350027419m\/45760.jpg","authors":"David Foster Wallace"},{"book_id":45967,"title":"The Blind Owl","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sadegh Hedayat, D.P. Costello"},{"book_id":45974,"title":"The Book of Disquiet","image_url":"https:\/\/images.gr-assets.com\/books\/1382871857m\/45974.jpg","authors":"Fernando Pessoa, Richard Zenith"},{"book_id":45978,"title":"Eldest (The Inheritance Cycle, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1387119654m\/45978.jpg","authors":"Christopher Paolini"},{"book_id":46012,"title":"16 Lighthouse Road (Cedar Cove, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1388881732m\/46012.jpg","authors":"Debbie Macomber"},{"book_id":46114,"title":"The Waves","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Virginia Woolf"},{"book_id":46164,"title":"Tender Is the Night","image_url":"https:\/\/images.gr-assets.com\/books\/1438797669m\/46164.jpg","authors":"F. Scott Fitzgerald"},{"book_id":46165,"title":"This Side of Paradise","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"F. Scott Fitzgerald"},{"book_id":46170,"title":"For Whom the Bell Tolls","image_url":"https:\/\/images.gr-assets.com\/books\/1492591524m\/46170.jpg","authors":"Ernest Hemingway"},{"book_id":46182,"title":"In Watermelon Sugar","image_url":"https:\/\/images.gr-assets.com\/books\/1482476781m\/46182.jpg","authors":"Richard Brautigan"},{"book_id":46190,"title":"Love Is a Mix Tape","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rob Sheffield"},{"book_id":46191,"title":"Why Men Love Bitches: From Doormat to Dreamgirl\u2014A Woman's Guide to Holding Her Own in a Relationship","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sherry Argov"},{"book_id":46199,"title":"Letters to a Young Poet","image_url":"https:\/\/images.gr-assets.com\/books\/1321994947m\/46199.jpg","authors":"Rainer Maria Rilke, Reginald Snell, Franz Xaver Kappus"},{"book_id":46201,"title":"The Selected Poetry of Rainer Maria Rilke","image_url":"https:\/\/images.gr-assets.com\/books\/1343101334m\/46201.jpg","authors":"Rainer Maria Rilke, Stephen Mitchell, Robert Hass"},{"book_id":46202,"title":"Magic Study (Study, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Maria V. Snyder"},{"book_id":46227,"title":"Ask the Dust (Arturo Bandini, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1388283697m\/46227.jpg","authors":"John Fante, Charles Bukowski"},{"book_id":46292,"title":"The Divan","image_url":"https:\/\/images.gr-assets.com\/books\/1327770153m\/46292.jpg","authors":"Hafez"},{"book_id":46306,"title":"The Complete Fairy Tales","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Hans Christian Andersen, Lily Owens, Arthur Rackham, Hans Richter"},{"book_id":46349,"title":"Funny in Farsi: A Memoir of Growing Up Iranian in America","image_url":"https:\/\/images.gr-assets.com\/books\/1411923160m\/46349.jpg","authors":"Firoozeh Dumas"},{"book_id":46438,"title":"The Last Templar (Templar, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Raymond Khoury"},{"book_id":46460,"title":"Call for the Dead","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John le Carr\u00e9"},{"book_id":46544,"title":"The Shelters of Stone (Earth's Children, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jean M. Auel"},{"book_id":46601,"title":"An Echo in the Darkness (Mark of the Lion, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1481920193m\/46601.jpg","authors":"Francine Rivers"},{"book_id":46654,"title":"The Foundation Trilogy (Foundation, #1-3)","image_url":"https:\/\/images.gr-assets.com\/books\/1316412178m\/46654.jpg","authors":"Isaac Asimov"},{"book_id":46656,"title":"Foundation and Chaos (Second Foundation Trilogy #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Greg Bear"},{"book_id":46661,"title":"The Book of Joe","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jonathan Tropper"},{"book_id":46674,"title":"Feeling Good: The New Mood Therapy","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David D. Burns"},{"book_id":46676,"title":"When Bad Things Happen to Good People","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Harold S. Kushner"},{"book_id":46677,"title":"Alexander and the Terrible, Horrible, No Good, Very Bad Day","image_url":"https:\/\/images.gr-assets.com\/books\/1405259744m\/46677.jpg","authors":"Judith Viorst, Ray Cruz"},{"book_id":46755,"title":"Surfacing","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Margaret Atwood"},{"book_id":46756,"title":"Oryx and Crake (MaddAddam, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1494109986m\/46756.jpg","authors":"Margaret Atwood"},{"book_id":46777,"title":"Tithe (Modern Faerie Tales, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1342120818m\/46777.jpg","authors":"Holly Black"},{"book_id":46787,"title":"Uncle Tom's Cabin","image_url":"https:\/\/images.gr-assets.com\/books\/1414349231m\/46787.jpg","authors":"Harriet Beecher Stowe"},{"book_id":46799,"title":"Go Ask Alice","image_url":"https:\/\/images.gr-assets.com\/books\/1327870536m\/46799.jpg","authors":"Beatrice Sparks, Anonymous"},{"book_id":46815,"title":"Wasted: A Memoir of Anorexia and Bulimia","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Marya Hornbacher"},{"book_id":46906,"title":"Fruits Basket, Vol. 15","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Natsuki Takaya, Alethea Nibley, Athena Nibley"},{"book_id":46908,"title":"Fruits Basket, Vol. 14","image_url":"https:\/\/images.gr-assets.com\/books\/1393736589m\/46908.jpg","authors":"Natsuki Takaya, Alethea Nibley, Athena Nibley"},{"book_id":46913,"title":"FRUiTS","image_url":"https:\/\/images.gr-assets.com\/books\/1431398203m\/46913.jpg","authors":"Shoichi Aoki, Mark Sanders, Shoich Aoki"},{"book_id":46917,"title":"Rabbit Redux (Rabbit Angstrom #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Updike"},{"book_id":46945,"title":"Requiem for a Dream","image_url":"https:\/\/images.gr-assets.com\/books\/1353949849m\/46945.jpg","authors":"Hubert Selby Jr., Darren Aronofsky, Richard Price"},{"book_id":47021,"title":"The Taming of the Shrew","image_url":"https:\/\/images.gr-assets.com\/books\/1327935253m\/47021.jpg","authors":"William Shakespeare"},{"book_id":47076,"title":"The Girls","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lori Lansens"},{"book_id":47212,"title":"Storm Front (The Dresden Files, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1419456275m\/47212.jpg","authors":"Jim Butcher"},{"book_id":47281,"title":"Number the Stars","image_url":"https:\/\/images.gr-assets.com\/books\/1370917812m\/47281.jpg","authors":"Lois Lowry"},{"book_id":47304,"title":"The Freedom Writers Diary","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Erin Gruwell, Zlata Filipovi\u0107, The Freedom Writers"},{"book_id":47345,"title":"Man and Boy (Harry Silver, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tony Parsons"},{"book_id":47401,"title":"Chocolat (Chocolat, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Joanne Harris"},{"book_id":47520,"title":"Castle in the Air (Howl's Moving Castle, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Diana Wynne Jones"},{"book_id":47558,"title":"The Gashlycrumb Tinies (The Vinegar Works, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327933644m\/47558.jpg","authors":"Edward Gorey"},{"book_id":47559,"title":"Amphigorey (Amphigorey, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327649608m\/47559.jpg","authors":"Edward Gorey"},{"book_id":47613,"title":"Mister Monday (The Keys to the Kingdom, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Garth Nix"},{"book_id":47618,"title":"Sir Thursday (The Keys to the Kingdom, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1304528609m\/47618.jpg","authors":"Garth Nix"},{"book_id":47619,"title":"Drowned Wednesday (The Keys to the Kingdom, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1304528425m\/47619.jpg","authors":"Garth Nix"},{"book_id":47620,"title":"Grim Tuesday (The Keys to the Kingdom, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1304528058m\/47620.jpg","authors":"Garth Nix"},{"book_id":47624,"title":"Lirael (Abhorsen, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Garth Nix"},{"book_id":47667,"title":"Seeing","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jos\u00e9 Saramago, Margaret Jull Costa"},{"book_id":47697,"title":"The Sandman: King of Dreams","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Alisa Kwitney, Neil Gaiman"},{"book_id":47701,"title":"InterWorld (InterWorld, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Neil Gaiman, Michael Reaves"},{"book_id":47720,"title":"The Sandman: Endless Nights","image_url":"https:\/\/images.gr-assets.com\/books\/1327948224m\/47720.jpg","authors":"Neil Gaiman, Barron Storey, Bill Sienkiewicz, Glenn Fabry, Dave McKean, P. Craig Russell, Milo Manara, Miguelanxo Prado, Frank Quitely, Todd Klein"},{"book_id":47730,"title":"The Complete Poems","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anne Sexton, Maxine Kumin"},{"book_id":47780,"title":"Hunting and Gathering","image_url":"https:\/\/images.gr-assets.com\/books\/1327865734m\/47780.jpg","authors":"Anna Gavalda, Alison Anderson"},{"book_id":47878,"title":"Charlie Bone and the Beast (The Children of the Red King, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1290344896m\/47878.jpg","authors":"Jenny Nimmo"},{"book_id":47881,"title":"Charlie Bone and the Hidden King (The Children of the Red King, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jenny Nimmo"},{"book_id":47922,"title":"Because I'm Worth It (Gossip Girl, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Cecily von Ziegesar"},{"book_id":47944,"title":"Empress of the World (Battle Hall Davies, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sara Ryan"},{"book_id":47956,"title":"Daughter of the Blood (The Black Jewels #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1400569100m\/47956.jpg","authors":"Anne Bishop"},{"book_id":47957,"title":"Heir to the Shadows (The Black Jewels, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1325423413m\/47957.jpg","authors":"Anne Bishop"},{"book_id":47959,"title":"Queen of the Darkness (The Black Jewels, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1325423531m\/47959.jpg","authors":"Anne Bishop"},{"book_id":47989,"title":"Night Watch (Discworld, #29; City Watch, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1320518310m\/47989.jpg","authors":"Terry Pratchett"},{"book_id":47990,"title":"Jingo (Discworld, #21; City Watch, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1327921813m\/47990.jpg","authors":"Terry Pratchett"},{"book_id":47994,"title":"The Last Continent (Discworld, #22; Rincewind #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1332672492m\/47994.jpg","authors":"Terry Pratchett"},{"book_id":48002,"title":"Thief of Time (Discworld, #26; Death, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Terry Pratchett"},{"book_id":48019,"title":"The Effective Executive: The Definitive Guide to Getting the Right Things Done (Harperbusiness Essentials)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Peter F. Drucker"},{"book_id":48037,"title":"Carmilla","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"J. Sheridan Le Fanu"},{"book_id":48132,"title":"My Family and Other Animals (Corfu Trilogy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327885239m\/48132.jpg","authors":"Gerald Durrell, Helma Lapi\u0146a"},{"book_id":48183,"title":"The Honk and Holler Opening Soon","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Billie Letts"},{"book_id":48304,"title":"Vegan Cupcakes Take Over the World: 75 Dairy-Free Recipes for Cupcakes that Rule","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Isa Chandra Moskowitz, Terry Hope Romero, Sara Quin"},{"book_id":48318,"title":"The Solitaire Mystery: A Novel About Family and Destiny","image_url":"https:\/\/images.gr-assets.com\/books\/1327883395m\/48318.jpg","authors":"Jostein Gaarder, Sarah Jane Hails"},{"book_id":48328,"title":"Revolutionary Road","image_url":"https:\/\/images.gr-assets.com\/books\/1353721885m\/48328.jpg","authors":"Richard Yates"},{"book_id":48464,"title":"A Good Man is Hard to Find and Other Stories","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Flannery O'Connor"},{"book_id":48467,"title":"Wise Blood","image_url":"https:\/\/images.gr-assets.com\/books\/1389629799m\/48467.jpg","authors":"Flannery O'Connor"},{"book_id":48484,"title":"Blindsight (Firefall, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Peter Watts"},{"book_id":48697,"title":"Art in Theory 1900 - 2000: An Anthology of Changing Ideas","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Charles Harrison, Paul Wood"},{"book_id":48757,"title":"The Tao of Pooh","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Benjamin Hoff, Ernest H. Shepard"},{"book_id":48758,"title":"Boy Meets Girl: Say Hello to Courtship","image_url":"https:\/\/images.gr-assets.com\/books\/1170356477m\/48758.jpg","authors":"Joshua Harris"},{"book_id":48811,"title":"Nancy Drew: #1-64","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Carolyn Keene"},{"book_id":48834,"title":"I Have Lived a Thousand Years","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Livia E. Bitton-Jackson"},{"book_id":48855,"title":"The Diary of a Young Girl","image_url":"https:\/\/images.gr-assets.com\/books\/1358276407m\/48855.jpg","authors":"Anne Frank, Eleanor Roosevelt, B.M. Mooyaart-Doubleday"},{"book_id":48862,"title":"Brighton Rock","image_url":"https:\/\/images.gr-assets.com\/books\/1337363402m\/48862.jpg","authors":"Graham Greene, J.M. Coetzee"},{"book_id":48974,"title":"I Am the Cheese","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert Cormier"},{"book_id":49006,"title":"The Darkest Hour (Warriors, #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Erin Hunter"},{"book_id":49011,"title":"The Bloody Chamber and Other Stories","image_url":"https:\/\/images.gr-assets.com\/books\/1388633104m\/49011.jpg","authors":"Angela Carter"},{"book_id":49041,"title":"New Moon (Twilight, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1361039440m\/49041.jpg","authors":"Stephenie Meyer"},{"book_id":49158,"title":"For Women Only: What You Need to Know about the Inner Lives of Men","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Shaunti Feldhahn"},{"book_id":49176,"title":"Games People Play","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Eric Berne"},{"book_id":49195,"title":"My Life","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bill Clinton"},{"book_id":49221,"title":"A Grief Observed","image_url":"https:\/\/images.gr-assets.com\/books\/1412529325m\/49221.jpg","authors":"C.S. Lewis"},{"book_id":49234,"title":"The Third Chimpanzee: The Evolution and Future of the Human Animal","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jared Diamond"},{"book_id":49245,"title":"His Needs, Her Needs: Building an Affair-Proof Marriage","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Willard F. Harley Jr."},{"book_id":49250,"title":"D-Day, June 6, 1944: The Battle for the Normandy Beaches","image_url":"https:\/\/images.gr-assets.com\/books\/1391798880m\/49250.jpg","authors":"Stephen E. Ambrose"},{"book_id":49251,"title":"Citizen Soldiers: The U. S. Army from the Normandy Beaches to the Bulge to the Surrender of Germany","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Stephen E. Ambrose"},{"book_id":49322,"title":"The Introvert Advantage: How to Thrive in an Extrovert World","image_url":"https:\/\/images.gr-assets.com\/books\/1348042078m\/49322.jpg","authors":"Marti Olsen Laney"},{"book_id":49350,"title":"The Concrete Blonde (Harry Bosch, #3; Harry Bosch Universe, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael Connelly"},{"book_id":49353,"title":"The Last Coyote (Harry Bosch, #4; Harry Bosch Universe, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael Connelly"},{"book_id":49436,"title":"Three Cups of Tea: One Man's Mission to Promote Peace ... One School at a Time","image_url":"https:\/\/images.gr-assets.com\/books\/1395407074m\/49436.jpg","authors":"Greg Mortenson, David Oliver Relin"},{"book_id":49455,"title":"Notes from Underground","image_url":"https:\/\/images.gr-assets.com\/books\/1327909683m\/49455.jpg","authors":"Fyodor Dostoyevsky, Christian Redl, Philip Dossick, Emanuela Guercetti, Michelle-Ir\u00e8ne Brudny, Richard Pevear, Norman Dietz, Donald Fanger, coderati, Boris de Schl\u0153zer, Larissa Volokhonsky"},{"book_id":49465,"title":"Those Who Save Us","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jenna Blum"},{"book_id":49540,"title":"Les Liaisons dangereuses","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Pierre-Ambroise Choderlos de Laclos, Douglas Parm\u00e9e"},{"book_id":49552,"title":"The Stranger","image_url":"https:\/\/images.gr-assets.com\/books\/1349927872m\/49552.jpg","authors":"Albert Camus, Matthew Ward"},{"book_id":49596,"title":"The Secret Adversary (Tommy and Tuppence #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1331721280m\/49596.jpg","authors":"Agatha Christie"},{"book_id":49628,"title":"Cloud Atlas","image_url":"https:\/\/images.gr-assets.com\/books\/1406383769m\/49628.jpg","authors":"David Mitchell"},{"book_id":49750,"title":"An Abundance of Katherines","image_url":"https:\/\/images.gr-assets.com\/books\/1360206426m\/49750.jpg","authors":"John Green"},{"book_id":49824,"title":"The Mammoth Hunters (Earth's Children, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jean M. Auel"},{"book_id":50001,"title":"The Complete Guide to Middle-Earth","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert Foster, J.R.R. Tolkien"},{"book_id":50027,"title":"Homeland (Forgotten Realms: The Dark Elf Trilogy, #1; Legend of Drizzt, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"R.A. Salvatore"},{"book_id":50033,"title":"Dandelion Wine (Green Town, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1374049845m\/50033.jpg","authors":"Ray Bradbury"},{"book_id":50039,"title":"I'm with the Band: Confessions of a Groupie","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Pamela Des Barres, Dave Navarro"},{"book_id":50051,"title":"The Last Picture Show","image_url":"https:\/\/images.gr-assets.com\/books\/1344275927m\/50051.jpg","authors":"Larry McMurtry"},{"book_id":50091,"title":"The Complete Robot (Robot #0.3)","image_url":"https:\/\/images.gr-assets.com\/books\/1405467461m\/50091.jpg","authors":"Isaac Asimov"},{"book_id":50140,"title":"Big Sur","image_url":"https:\/\/images.gr-assets.com\/books\/1428984256m\/50140.jpg","authors":"Jack Kerouac, Aram Saroyan"},{"book_id":50144,"title":"Kitchen","image_url":"https:\/\/images.gr-assets.com\/books\/1327904393m\/50144.jpg","authors":"Banana Yoshimoto, Megan Backus"},{"book_id":50275,"title":"Last Exit to Brooklyn","image_url":"https:\/\/images.gr-assets.com\/books\/1362815242m\/50275.jpg","authors":"Hubert Selby Jr., Gilbert Sorrentino"},{"book_id":50365,"title":"A Suitable Boy (A Suitable Boy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1329421639m\/50365.jpg","authors":"Vikram Seth"},{"book_id":50398,"title":"Northanger Abbey","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jane Austen, Alfred MacAdam"},{"book_id":50453,"title":"Hot Water Music","image_url":"https:\/\/images.gr-assets.com\/books\/1428126071m\/50453.jpg","authors":"Charles Bukowski"},{"book_id":50618,"title":"The Book of Illusions","image_url":"https:\/\/images.gr-assets.com\/books\/1391954093m\/50618.jpg","authors":"Paul Auster"},{"book_id":50695,"title":"Everyman","image_url":"https:\/\/images.gr-assets.com\/books\/1327649258m\/50695.jpg","authors":"Philip Roth"},{"book_id":50750,"title":"You Slay Me (Aisling Grey #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1310496976m\/50750.jpg","authors":"Katie MacAlister"},{"book_id":50798,"title":"Jude the Obscure","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Thomas Hardy"},{"book_id":50833,"title":"Valley of the Dolls","image_url":"https:\/\/images.gr-assets.com\/books\/1328281855m\/50833.jpg","authors":"Jacqueline Susann"},{"book_id":50930,"title":"The Mark (Left Behind, #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1406510315m\/50930.jpg","authors":"Tim LaHaye, Jerry B. Jenkins"},{"book_id":50937,"title":"First, Break All the Rules: What the World's Greatest Managers Do Differently","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Marcus Buckingham, Curt Coffman"},{"book_id":51019,"title":"Cat's Eye","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Margaret Atwood"},{"book_id":51070,"title":"The Secret Diary of Adrian Mole, Aged 13 3\/4 (Adrian Mole, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1285269220m\/51070.jpg","authors":"Sue Townsend"},{"book_id":51078,"title":"Batman: Knightfall, Vol. 1: Broken Bat","image_url":"https:\/\/images.gr-assets.com\/books\/1376156963m\/51078.jpg","authors":"Doug Moench, Chuck Dixon, Jim Aparo, Norm Breyfogle, Graham Nolan, Jim Balent"},{"book_id":51113,"title":"The Samurai's Garden","image_url":"https:\/\/images.gr-assets.com\/books\/1327876036m\/51113.jpg","authors":"Gail Tsukiyama"},{"book_id":51114,"title":"Women of the Silk","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Gail Tsukiyama"},{"book_id":51299,"title":"Letter to a Christian Nation","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sam Harris"},{"book_id":51362,"title":"The Survivors Club","image_url":"https:\/\/images.gr-assets.com\/books\/1298426240m\/51362.jpg","authors":"Lisa Gardner"},{"book_id":51364,"title":"Misquoting Jesus: The Story Behind Who Changed the Bible and Why","image_url":"https:\/\/images.gr-assets.com\/books\/1407109431m\/51364.jpg","authors":"Bart D. Ehrman"},{"book_id":51370,"title":"Leading Change","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John P. Kotter"},{"book_id":51428,"title":"Rebel Angels (Gemma Doyle, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1333820283m\/51428.jpg","authors":"Libba Bray"},{"book_id":51496,"title":"The Strange Case of Dr. Jekyll and Mr. Hyde","image_url":"https:\/\/images.gr-assets.com\/books\/1318116526m\/51496.jpg","authors":"Robert Louis Stevenson, Vladimir Nabokov, Mervyn Peake, Dan Chaon"},{"book_id":51497,"title":"The Strange Case of Dr. Jekyll and Mr. Hyde and Other Tales of Terror","image_url":"https:\/\/images.gr-assets.com\/books\/1327927453m\/51497.jpg","authors":"Robert Louis Stevenson, Robert Mighall"},{"book_id":51504,"title":"Post Office","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Charles Bukowski"},{"book_id":51606,"title":"Johnny Got His Gun","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dalton Trumbo"},{"book_id":51715,"title":"Mythologies","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Roland Barthes, Annette Lavers"},{"book_id":51737,"title":"The Truth About Forever","image_url":"https:\/\/images.gr-assets.com\/books\/1362767907m\/51737.jpg","authors":"Sarah Dessen"},{"book_id":51738,"title":"Just Listen","image_url":"https:\/\/images.gr-assets.com\/books\/1358270741m\/51738.jpg","authors":"Sarah Dessen"},{"book_id":51740,"title":"Staying Fat for Sarah Byrnes","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Chris Crutcher"},{"book_id":51799,"title":"The Decameron","image_url":"https:\/\/images.gr-assets.com\/books\/1472027832m\/51799.jpg","authors":"Giovanni Boccaccio, G.H. McWilliam"},{"book_id":51893,"title":"Thus Spoke Zarathustra","image_url":"https:\/\/images.gr-assets.com\/books\/1480901846m\/51893.jpg","authors":"Friedrich Nietzsche, Walter Kaufmann"},{"book_id":51964,"title":"Old Man's War (Old Man's War, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1487044882m\/51964.jpg","authors":"John Scalzi"},{"book_id":51985,"title":"Existentialism Is a Humanism","image_url":"https:\/\/images.gr-assets.com\/books\/1328870158m\/51985.jpg","authors":"Jean-Paul Sartre, Arlette Elka\u00efm-Sartre, Annie Cohen-Solal, Carol Macomber"},{"book_id":52036,"title":"Siddhartha","image_url":"https:\/\/images.gr-assets.com\/books\/1428715580m\/52036.jpg","authors":"Hermann Hesse, Hilda Rosner"},{"book_id":52258,"title":"The Price of Salt","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Patricia Highsmith"},{"book_id":52309,"title":"The Autobiography of Benjamin Franklin","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Benjamin Franklin, Lewis Leary"},{"book_id":52318,"title":"Wild Seed (Patternmaster, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Octavia E. Butler"},{"book_id":52350,"title":"The Stepford Wives","image_url":"https:\/\/images.gr-assets.com\/books\/1403404262m\/52350.jpg","authors":"Ira Levin"},{"book_id":52357,"title":"Beowulf","image_url":"https:\/\/images.gr-assets.com\/books\/1327878125m\/52357.jpg","authors":"Unknown, Seamus Heaney"},{"book_id":52367,"title":"Batman: The Dark Knight Strikes Again (The Dark Knight Saga, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Frank Miller, Lynn Varley"},{"book_id":52372,"title":"On Photography","image_url":"https:\/\/images.gr-assets.com\/books\/1328061531m\/52372.jpg","authors":"Susan Sontag"},{"book_id":52397,"title":"Parable of the Sower (Earthseed, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Octavia E. Butler"},{"book_id":52415,"title":"The Fifth Woman (Kurt Wallander, #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Henning Mankell, Steven T. Murray"},{"book_id":52471,"title":"Big Cherry Holler (Big Stone Gap, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Adriana Trigiani"},{"book_id":52529,"title":"The Secret (The Secret, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1482865039m\/52529.jpg","authors":"Rhonda Byrne"},{"book_id":52588,"title":"Cunt: A Declaration of Independence","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Inga Muscio, Betty Dodson"},{"book_id":52629,"title":"The Fifth Dominion (Imajica Part #1\/2)","image_url":"https:\/\/images.gr-assets.com\/books\/1456717471m\/52629.jpg","authors":"Clive Barker"},{"book_id":52635,"title":"The Hellbound Heart","image_url":"https:\/\/images.gr-assets.com\/books\/1327312426m\/52635.jpg","authors":"Clive Barker"},{"book_id":52640,"title":"Weaveworld","image_url":"https:\/\/images.gr-assets.com\/books\/1329374451m\/52640.jpg","authors":"Clive Barker"},{"book_id":52783,"title":"Henderson the Rain King","image_url":"https:\/\/images.gr-assets.com\/books\/1297116277m\/52783.jpg","authors":"Saul Bellow, Luciano Bianciardi"},{"book_id":52823,"title":"Tartuffe","image_url":"https:\/\/images.gr-assets.com\/books\/1319501006m\/52823.jpg","authors":"Moli\u00e8re, Martin Sorrell"},{"book_id":52872,"title":"Flight","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sherman Alexie"},{"book_id":52873,"title":"The Lone Ranger and Tonto Fistfight in Heaven","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sherman Alexie"},{"book_id":53022,"title":"The Collected Poems of W.B. Yeats","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"W.B. Yeats, Richard J. Finneran"},{"book_id":53061,"title":"Death in Venice","image_url":"https:\/\/images.gr-assets.com\/books\/1410132000m\/53061.jpg","authors":"Thomas Mann, Michael Henry Heim, Michael Cunningham"},{"book_id":53064,"title":"Death in Venice and Other Tales","image_url":"https:\/\/images.gr-assets.com\/books\/1309376701m\/53064.jpg","authors":"Thomas Mann, Joachim Neugroschel"},{"book_id":53168,"title":"Demon Thief (The Demonata, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1344268460m\/53168.jpg","authors":"Darren Shan"},{"book_id":53200,"title":"Black Holes and Baby Universes","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Stephen Hawking"},{"book_id":53343,"title":"On Writing Well: The Classic Guide to Writing Nonfiction","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"William Zinsser"},{"book_id":53413,"title":"Hopscotch","image_url":"https:\/\/images.gr-assets.com\/books\/1367728486m\/53413.jpg","authors":"Julio Cort\u00e1zar, Gregory Rabassa"},{"book_id":53447,"title":"El t\u00fanel","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ernesto Sabato"},{"book_id":53496,"title":"Walk Two Moons","image_url":"https:\/\/images.gr-assets.com\/books\/1389035862m\/53496.jpg","authors":"Sharon Creech"},{"book_id":53498,"title":"Love That Dog (Jack, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1415581593m\/53498.jpg","authors":"Sharon Creech"},{"book_id":53580,"title":"The Going-To-Bed Book","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sandra Boynton"},{"book_id":53625,"title":"Four Blind Mice (Alex Cross, #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1408929456m\/53625.jpg","authors":"James Patterson"},{"book_id":53639,"title":"Zorba the Greek","image_url":"https:\/\/images.gr-assets.com\/books\/1328007439m\/53639.jpg","authors":"Nikos Kazantzakis, \u039d\u03af\u03ba\u03bf\u03c2 \u039a\u03b1\u03b6\u03b1\u03bd\u03c4\u03b6\u03ac\u03ba\u03b7\u03c2"},{"book_id":53645,"title":"Tender at the Bone: Growing Up at the Table","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ruth Reichl"},{"book_id":53764,"title":"The Great Dune Trilogy ","image_url":"https:\/\/images.gr-assets.com\/books\/1419962914m\/53764.jpg","authors":"Frank Herbert"},{"book_id":53809,"title":"Maktub","image_url":"https:\/\/images.gr-assets.com\/books\/1361293164m\/53809.jpg","authors":"Paulo Coelho"},{"book_id":53817,"title":"What's So Amazing About Grace?","image_url":"https:\/\/images.gr-assets.com\/books\/1328050483m\/53817.jpg","authors":"Philip Yancey"},{"book_id":53834,"title":"The Jesus I Never Knew","image_url":"https:\/\/images.gr-assets.com\/books\/1328995519m\/53834.jpg","authors":"Philip Yancey"},{"book_id":53835,"title":"The Age of Innocence","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Edith Wharton, Maureen Howard"},{"book_id":53926,"title":"Travesuras de la ni\u00f1a mala","image_url":"https:\/\/images.gr-assets.com\/books\/1405421130m\/53926.jpg","authors":"Mario Vargas Llosa"},{"book_id":53969,"title":"The Feast of the Goat","image_url":"https:\/\/images.gr-assets.com\/books\/1439920504m\/53969.jpg","authors":"Mario Vargas Llosa, Edith Grossman"},{"book_id":54120,"title":"The Double","image_url":"https:\/\/images.gr-assets.com\/books\/1328876706m\/54120.jpg","authors":"Jos\u00e9 Saramago, Margaret Jull Costa"},{"book_id":54270,"title":"Mein Kampf","image_url":"https:\/\/images.gr-assets.com\/books\/1395618385m\/54270.jpg","authors":"Adolf Hitler"},{"book_id":54479,"title":"Around the World in Eighty Days","image_url":"https:\/\/images.gr-assets.com\/books\/1308815551m\/54479.jpg","authors":"Jules Verne, Michael Glencross, Brian W. Aldiss"},{"book_id":54492,"title":"The Prisoner of Zenda","image_url":"https:\/\/images.gr-assets.com\/books\/1356449081m\/54492.jpg","authors":"Anthony Hope"},{"book_id":54499,"title":"The Man in the Iron Mask (The D'Artagnan Romances, #3.3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Alexandre Dumas, Francine du Plessix Gray, Joachim Neugroschel"},{"book_id":54529,"title":"Falling Leaves: The Memoir of an Unwanted Chinese Daughter","image_url":"https:\/\/images.gr-assets.com\/books\/1423952608m\/54529.jpg","authors":"Adeline Yen Mah"},{"book_id":54539,"title":"Silas Marner","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"George Eliot"},{"book_id":54620,"title":"Mary Barton","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Elizabeth Gaskell, Shirley Foster"},{"book_id":54666,"title":"What's the Matter with Kansas? How Conservatives Won the Heart of America","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Thomas Frank"},{"book_id":54984,"title":"La catedral del mar","image_url":"https:\/\/images.gr-assets.com\/books\/1366301973m\/54984.jpg","authors":"Ildefonso Falcones"},{"book_id":55018,"title":"The Tin Roof Blowdown (Dave Robicheaux, #16)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Lee Burke"},{"book_id":55019,"title":"Black Cherry Blues (Dave Robicheaux, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1314479487m\/55019.jpg","authors":"James Lee Burke"},{"book_id":55022,"title":"The Neon Rain (Dave Robicheaux, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Lee Burke"},{"book_id":55030,"title":"Cosmos","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Carl Sagan"},{"book_id":55095,"title":"Live from New York: An Uncensored History of Saturday Night Live","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Andrew Miller, Tom Shales"},{"book_id":55229,"title":"April 1865: The Month That Saved America","image_url":"https:\/\/images.gr-assets.com\/books\/1407706523m\/55229.jpg","authors":"Jay Winik"},{"book_id":55352,"title":"Brain Droppings","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"George Carlin"},{"book_id":55354,"title":"Napalm & Silly Putty","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"George Carlin"},{"book_id":55398,"title":"House of Chains (The Malazan Book of the Fallen, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Steven Erikson"},{"book_id":55399,"title":"Gardens of the Moon (The Malazan Book of the Fallen, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1355144064m\/55399.jpg","authors":"Steven Erikson"},{"book_id":55401,"title":"Deadhouse Gates (The Malazan Book of the Fallen, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Steven Erikson"},{"book_id":55403,"title":"Black Hawk Down","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mark Bowden"},{"book_id":56034,"title":"The French Lieutenant's Woman","image_url":"https:\/\/images.gr-assets.com\/books\/1466630905m\/56034.jpg","authors":"John Fowles"},{"book_id":56066,"title":"Savannah Breeze (Weezie and Bebe Mysteries, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mary Kay Andrews"},{"book_id":56073,"title":"Living History","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Hillary Rodham Clinton"},{"book_id":56157,"title":"The Proper Care and Feeding of Husbands","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Laura C. Schlessinger"},{"book_id":56353,"title":"I, Elizabeth","image_url":"https:\/\/images.gr-assets.com\/books\/1403186670m\/56353.jpg","authors":"Rosalind Miles"},{"book_id":56373,"title":"Tipping the Velvet","image_url":"https:\/\/images.gr-assets.com\/books\/1388633460m\/56373.jpg","authors":"Sarah Waters"},{"book_id":56405,"title":"Love and Respect: The Love She Most Desires; The Respect He Desperately Needs","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Emerson Eggerichs"},{"book_id":56452,"title":"Now, Discover Your Strengths","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Marcus Buckingham, Donald O. Clifton"},{"book_id":56454,"title":"Strengths Finder 2.0","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tom Rath"},{"book_id":56465,"title":"The Gift of Fear: Survival Signals That Protect Us from Violence","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Gavin de Becker"},{"book_id":56466,"title":"The Traveler's Gift: Seven Decisions that Determine Personal Success","image_url":"https:\/\/images.gr-assets.com\/books\/1380857528m\/56466.jpg","authors":"Andy Andrews"},{"book_id":56480,"title":"Passion and Purity: Learning to Bring Your Love Life Under Christ's Control","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Elisabeth Elliot"},{"book_id":56495,"title":"The Purpose Driven Life: What on Earth Am I Here for?","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rick Warren"},{"book_id":56594,"title":"A Severe Mercy: A Story of Faith, Tragedy and Triumph","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sheldon Vanauken, C.S. Lewis"},{"book_id":56616,"title":"Double Indemnity","image_url":"https:\/\/images.gr-assets.com\/books\/1404786837m\/56616.jpg","authors":"James M. Cain"},{"book_id":56627,"title":"Stumbling on Happiness","image_url":"https:\/\/images.gr-assets.com\/books\/1327947323m\/56627.jpg","authors":"Daniel Todd Gilbert"},{"book_id":56634,"title":"Through Gates of Splendor","image_url":"https:\/\/images.gr-assets.com\/books\/1406510855m\/56634.jpg","authors":"Elisabeth Elliot"},{"book_id":56674,"title":"Empire of the Sun (Empire of the Sun, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1338519188m\/56674.jpg","authors":"J.G. Ballard"},{"book_id":56728,"title":"You Are Special (Wemmicksville, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Max Lucado"},{"book_id":56759,"title":"The Mayor of Casterbridge","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Thomas Hardy, Keith Wilson"},{"book_id":56842,"title":"Fatherland","image_url":"https:\/\/images.gr-assets.com\/books\/1261912137m\/56842.jpg","authors":"Robert Harris"},{"book_id":56899,"title":"Aura","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Carlos Fuentes"},{"book_id":56912,"title":"The Judgment of Paris: The Revolutionary Decade That Gave the World Impressionism","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ross King"},{"book_id":56913,"title":"Barefoot in Paris","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ina Garten, Quentin Bacon"},{"book_id":56919,"title":"La tregua","image_url":"https:\/\/images.gr-assets.com\/books\/1371167309m\/56919.jpg","authors":"Mario Benedetti"},{"book_id":57605,"title":"Pat the Bunny","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dorothy Kunhardt"},{"book_id":57727,"title":"L.A. Confidential (L.A. Quartet, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Ellroy"},{"book_id":57736,"title":"Shoeless Joe","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"W.P. Kinsella"},{"book_id":57854,"title":"Tao Te Ching","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lao Tzu, Gia-Fu Feng, Jane English, Chungliang Al Huang, Rowena Pattee Kryder, Toinette Lippe"},{"book_id":57891,"title":"Battle Royale","image_url":"https:\/\/images.gr-assets.com\/books\/1331235272m\/57891.jpg","authors":"Koushun Takami, Yuji Oniki"},{"book_id":57913,"title":"The Illuminatus! Trilogy","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert Shea, Robert Anton Wilson"},{"book_id":57951,"title":"The Watchman (Elvis Cole, #11; Joe Pike, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert Crais"},{"book_id":58027,"title":"Alias Grace","image_url":"https:\/\/images.gr-assets.com\/books\/1472960163m\/58027.jpg","authors":"Margaret Atwood, Brigitte Walitzek"},{"book_id":58033,"title":"Four Great Tragedies: Hamlet \/ Othello \/ King Lear \/ Macbeth","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"William Shakespeare, Sylvan Barnet, Alvin Kernan, Russell Fraser"},{"book_id":58077,"title":"Grave Sight (Harper Connelly, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1328694483m\/58077.jpg","authors":"Charlaine Harris"},{"book_id":58098,"title":"for colored girls who have considered suicide\/when the rainbow is enuf","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ntozake Shange"},{"book_id":58314,"title":"The Elementary Particles","image_url":"https:\/\/images.gr-assets.com\/books\/1403180525m\/58314.jpg","authors":"Michel Houellebecq, Frank Wynne"},{"book_id":58345,"title":"The Awakening","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kate Chopin"},{"book_id":58547,"title":"Journals","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kurt Cobain"},{"book_id":58696,"title":"David Copperfield","image_url":"https:\/\/images.gr-assets.com\/books\/1461452762m\/58696.jpg","authors":"Charles Dickens, Jeremy Tambling"},{"book_id":58728,"title":"Anne Frank's Tales from the Secret Annex","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anne Frank, Susan Massotty"},{"book_id":58822,"title":"Big Stone Gap (Big Stone Gap, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Adriana Trigiani"},{"book_id":58889,"title":"Sandry's Book (Circle of Magic, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1328860148m\/58889.jpg","authors":"Tamora Pierce"},{"book_id":58890,"title":"Tris's Book (Circle of Magic, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1328860149m\/58890.jpg","authors":"Tamora Pierce"},{"book_id":58893,"title":"Briar's Book (Circle of Magic, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1481568171m\/58893.jpg","authors":"Tamora Pierce"},{"book_id":58894,"title":"Daja's Book (Circle of Magic, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1328860149m\/58894.jpg","authors":"Tamora Pierce"},{"book_id":58922,"title":"The Runaway Bunny","image_url":"https:\/\/images.gr-assets.com\/books\/1468816103m\/58922.jpg","authors":"Margaret Wise Brown, Clement Hurd"},{"book_id":58962,"title":"Trunk Music (Harry Bosch, #5; Harry Bosch Universe, #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael Connelly"},{"book_id":59091,"title":"Tobacco Road (Brown Thrasher Books)","image_url":"https:\/\/images.gr-assets.com\/books\/1369852920m\/59091.jpg","authors":"Erskine Caldwell, Lewis Nordan"},{"book_id":59142,"title":"Eug\u00e9nie Grandet","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Honor\u00e9 de Balzac, Sylvia Raphael, Christopher Prendergast"},{"book_id":59145,"title":"P\u00e8re Goriot","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Honor\u00e9 de Balzac"},{"book_id":59151,"title":"Chess Story","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Stefan Zweig, Joel Rotenberg, Hans Hausmann, Dirk Muller, Peter Gay, Willy Trenk-Trebitsch, Mario Adorf, Gert Westphal"},{"book_id":59219,"title":"The Talisman (The Talisman, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1170530286m\/59219.jpg","authors":"Stephen King, Peter Straub"},{"book_id":59263,"title":"The Golem's Eye (Bartimaeus, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jonathan Stroud"},{"book_id":59264,"title":"Ptolemy's Gate (Bartimaeus, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jonathan Stroud"},{"book_id":59715,"title":"The Authoritative Calvin and Hobbes: A Calvin and Hobbes Treasury","image_url":"https:\/\/images.gr-assets.com\/books\/1391114055m\/59715.jpg","authors":"Bill Watterson"},{"book_id":59716,"title":"To the Lighthouse","image_url":"https:\/\/images.gr-assets.com\/books\/1346239665m\/59716.jpg","authors":"Virginia Woolf"},{"book_id":59780,"title":"Cosmicomics","image_url":"https:\/\/images.gr-assets.com\/books\/1327975008m\/59780.jpg","authors":"Italo Calvino, William Weaver, \u0391\u03bd\u03c4\u03b1\u03af\u03bf\u03c2 \u03a7\u03c1\u03c5\u03c3\u03bf\u03c3\u03c4\u03bf\u03bc\u03af\u03b4\u03b7\u03c2, \u0395\u03bb\u03b5\u03c5\u03b8\u03b5\u03c1\u03af\u03b1 \u039a\u03bf\u03c8\u03b9\u03b4\u03ac"},{"book_id":59810,"title":"Jewels of the Sun (Gallaghers of Ardmore, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1388194052m\/59810.jpg","authors":"Nora Roberts"},{"book_id":59813,"title":"Valley of Silence (Circle Trilogy, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1377646212m\/59813.jpg","authors":"Nora Roberts"},{"book_id":59819,"title":"Tears of the Moon (Gallaghers of Ardmore \/ Irish Trilogy, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nora Roberts"},{"book_id":59821,"title":"Red Lily (In the Garden, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1362364238m\/59821.jpg","authors":"Nora Roberts"},{"book_id":59822,"title":"Face the Fire (Three Sisters Island, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1330175555m\/59822.jpg","authors":"Nora Roberts"},{"book_id":59825,"title":"Inner Harbor (Chesapeake Bay Saga, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1399120297m\/59825.jpg","authors":"Nora Roberts"},{"book_id":59829,"title":"Dance Upon the Air (Three Sisters Island, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1263843885m\/59829.jpg","authors":"Nora Roberts"},{"book_id":59830,"title":"Heaven and Earth (Three Sisters Island, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1345222134m\/59830.jpg","authors":"Nora Roberts"},{"book_id":59836,"title":"The Gift","image_url":"https:\/\/images.gr-assets.com\/books\/1403190508m\/59836.jpg","authors":"Danielle Steel"},{"book_id":59882,"title":"Accident","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Danielle Steel"},{"book_id":59887,"title":"The Promise","image_url":"https:\/\/images.gr-assets.com\/books\/1408930765m\/59887.jpg","authors":"Danielle Steel"},{"book_id":59889,"title":"Safe Harbour","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Danielle Steel"},{"book_id":59924,"title":"The Lathe of Heaven","image_url":"https:\/\/images.gr-assets.com\/books\/1433084322m\/59924.jpg","authors":"Ursula K. Le Guin"},{"book_id":59952,"title":"300","image_url":"https:\/\/images.gr-assets.com\/books\/1438711575m\/59952.jpg","authors":"Frank Miller, Lynn Varley"},{"book_id":59960,"title":"Batman: The Dark Knight Returns (The Dark Knight Saga, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327892039m\/59960.jpg","authors":"Frank Miller, Klaus Janson, Lynn Varley"},{"book_id":59969,"title":"Sin City, Vol. 2: A Dame to Kill For (Sin City, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1470924735m\/59969.jpg","authors":"Frank Miller"},{"book_id":59978,"title":"Sin City, Vol. 4: That Yellow Bastard (Sin City, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1471122291m\/59978.jpg","authors":"Frank Miller"},{"book_id":59980,"title":"Batman: Year One","image_url":"https:\/\/images.gr-assets.com\/books\/1327940389m\/59980.jpg","authors":"Frank Miller, David Mazzucchelli, Richmond Lewis, Dennis O'Neil"},{"book_id":60057,"title":"Lucia, Lucia","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Adriana Trigiani"},{"book_id":60080,"title":"Groundwork of the Metaphysics of Morals","image_url":"https:\/\/images.gr-assets.com\/books\/1398209445m\/60080.jpg","authors":"Immanuel Kant, Mary J. Gregor, Christine M. Korsgaard"},{"book_id":60142,"title":"La ciudad y los perros","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mario Vargas Llosa"},{"book_id":60177,"title":"Ozma of Oz (Oz, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"L. Frank Baum"},{"book_id":60211,"title":"The Shadow of the Torturer (The Book of the New Sun #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1329650008m\/60211.jpg","authors":"Gene Wolfe"},{"book_id":60220,"title":"Simply Irresistible (Chinooks Hockey Team, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1170538816m\/60220.jpg","authors":"Rachel Gibson"},{"book_id":60223,"title":"See Jane Score (Chinooks Hockey Team, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1330265531m\/60223.jpg","authors":"Rachel Gibson"},{"book_id":60229,"title":"Halo: The Fall of Reach","image_url":"https:\/\/images.gr-assets.com\/books\/1436746591m\/60229.jpg","authors":"Eric S. Nylund"},{"book_id":60400,"title":"The Ruins of Gorlan (Ranger's Apprentice, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1293952830m\/60400.jpg","authors":"John Flanagan"},{"book_id":60431,"title":"Andy Goldsworthy: A Collaboration with Nature","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Andy Goldsworthy"},{"book_id":60471,"title":"Coming Home","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rosamunde Pilcher"},{"book_id":60510,"title":"Poison Study (Study, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Maria V. Snyder"},{"book_id":60551,"title":"The Book on the Taboo Against Knowing Who You Are","image_url":"https:\/\/images.gr-assets.com\/books\/1403166178m\/60551.jpg","authors":"Alan W. Watts"},{"book_id":60748,"title":"A Child Called \"It\" (Dave Pelzer #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dave Pelzer"},{"book_id":60792,"title":"The Accidental Tourist","image_url":"https:\/\/images.gr-assets.com\/books\/1502220282m\/60792.jpg","authors":"Anne Tyler, Jennifer Bassett"},{"book_id":60925,"title":"Fledgling","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Octavia E. Butler"},{"book_id":60929,"title":"Dawn (Xenogenesis, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Octavia E. Butler"},{"book_id":60931,"title":"Kindred","image_url":"https:\/\/images.gr-assets.com\/books\/1339423248m\/60931.jpg","authors":"Octavia E. Butler"},{"book_id":60932,"title":"Parable of the Talents (Earthseed, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1170553715m\/60932.jpg","authors":"Octavia E. Butler"},{"book_id":60935,"title":"Possessing the Secret of Joy","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Alice Walker"},{"book_id":60937,"title":"The Temple of My Familiar","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Alice Walker"},{"book_id":61115,"title":"Possible Side Effects","image_url":"https:\/\/images.gr-assets.com\/books\/1412064839m\/61115.jpg","authors":"Augusten Burroughs"},{"book_id":61179,"title":"Ringworld (Ringworld, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1408793358m\/61179.jpg","authors":"Larry Niven"},{"book_id":61181,"title":"The Ringworld Engineers (Ringworld #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Larry Niven"},{"book_id":61264,"title":"Silk","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Alessandro Baricco"},{"book_id":61266,"title":"Novecento. Un monologo","image_url":"https:\/\/images.gr-assets.com\/books\/1346326152m\/61266.jpg","authors":"Alessandro Baricco"},{"book_id":61329,"title":"Crossing the Chasm: Marketing and Selling High-Tech Products to Mainstream Customers","image_url":"https:\/\/images.gr-assets.com\/books\/1421709292m\/61329.jpg","authors":"Geoffrey A. Moore, Regis McKenna"},{"book_id":61505,"title":"A Little History of the World","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"E.H. Gombrich, Caroline Mustill, Clifford Harper"},{"book_id":61535,"title":"The Selfish Gene","image_url":"https:\/\/images.gr-assets.com\/books\/1366758096m\/61535.jpg","authors":"Richard Dawkins"},{"book_id":61539,"title":"The Structure of Scientific Revolutions","image_url":"https:\/\/images.gr-assets.com\/books\/1396422530m\/61539.jpg","authors":"Thomas S. Kuhn"},{"book_id":61549,"title":"Mr. Popper's Penguins","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Richard Atwater, Florence Atwater, Robert Lawson"},{"book_id":61663,"title":"Pale Blue Dot: A Vision of the Human Future in Space","image_url":"https:\/\/images.gr-assets.com\/books\/1500191671m\/61663.jpg","authors":"Carl Sagan, Ann Druyan"},{"book_id":61665,"title":"Billions & Billions: Thoughts on Life and Death at the Brink of the Millennium","image_url":"https:\/\/images.gr-assets.com\/books\/1366573520m\/61665.jpg","authors":"Carl Sagan, Ann Druyan"},{"book_id":61666,"title":"Contact","image_url":"https:\/\/images.gr-assets.com\/books\/1408792653m\/61666.jpg","authors":"Carl Sagan"},{"book_id":61672,"title":"Bonjour tristesse","image_url":"https:\/\/images.gr-assets.com\/books\/1346107613m\/61672.jpg","authors":"Fran\u00e7oise Sagan"},{"book_id":61794,"title":"La vida del Lazarillo de Tormes","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anonymous"},{"book_id":61834,"title":"A Night to Remember","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Walter Lord, Nathaniel Philbrick"},{"book_id":61886,"title":"The Curse of Chalion (World of the Five Gods, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1322571773m\/61886.jpg","authors":"Lois McMaster Bujold"},{"book_id":61899,"title":"A Civil Campaign (Vorkosigan Saga, #12)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lois McMaster Bujold"},{"book_id":61903,"title":"Shards of Honour (Vorkosigan Saga, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1392767899m\/61903.jpg","authors":"Lois McMaster Bujold"},{"book_id":61904,"title":"Paladin of Souls (World of the Five Gods, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lois McMaster Bujold"},{"book_id":61905,"title":"Barrayar (Vorkosigan Saga, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1397151220m\/61905.jpg","authors":"Lois McMaster Bujold"},{"book_id":61906,"title":"The Warrior's Apprentice (Vorkosigan Saga, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lois McMaster Bujold"},{"book_id":61909,"title":"Mirror Dance (Vorkosigan Saga, #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1297831387m\/61909.jpg","authors":"Lois McMaster Bujold"},{"book_id":61915,"title":"Falling Free (Vorkosigan Saga, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lois McMaster Bujold"},{"book_id":61926,"title":"All the Weyrs of Pern (Pern, #11)","image_url":"https:\/\/images.gr-assets.com\/books\/1322034004m\/61926.jpg","authors":"Anne McCaffrey"},{"book_id":61938,"title":"The Rowan (The Tower and the Hive, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1358551536m\/61938.jpg","authors":"Anne McCaffrey"},{"book_id":61942,"title":"The Dragonriders of Pern (Dragonriders of Pern, #1-3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anne McCaffrey"},{"book_id":61958,"title":"Moreta: Dragonlady of Pern (Pern, #7)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anne McCaffrey"},{"book_id":61974,"title":"Nerilka's Story (Pern, #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1296104206m\/61974.jpg","authors":"Anne McCaffrey"},{"book_id":61975,"title":"Dragonflight (Dragonriders of Pern, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anne McCaffrey, Teodor Panasi\u0144ski"},{"book_id":62012,"title":"The Guns of Avalon (The Chronicles of Amber #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1368213721m\/62012.jpg","authors":"Roger Zelazny"},{"book_id":62032,"title":"The 13\u00bd Lives of Captain Bluebear (Zamonia, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Walter Moers, John Brownjohn"},{"book_id":62103,"title":"The Complete Phantom of the Opera","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"George C. Perry, Clive Barda, Jane Rice, Andrew Lloyd Webber"},{"book_id":62111,"title":"The Swiss Family Robinson ","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Johann David Wyss, Scott McKowen, Arthur Pober"},{"book_id":62212,"title":"In the Company of the Courtesan","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sarah Dunant"},{"book_id":62233,"title":"The Elves of Cintra (Genesis of Shannara, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Terry Brooks"},{"book_id":62291,"title":"A Storm of Swords (A Song of Ice and Fire, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1497931121m\/62291.jpg","authors":"George R.R. Martin"},{"book_id":62446,"title":"The Prince and the Pauper","image_url":"https:\/\/images.gr-assets.com\/books\/1376406798m\/62446.jpg","authors":"Mark Twain, Everett H. Emerson"},{"book_id":62479,"title":"Servant of the Shard (Forgotten Realms: Paths of Darkness, #3; The Sellswords, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"R.A. Salvatore"},{"book_id":62485,"title":"The Icewind Dale Trilogy Collector's Edition (Forgotten Realms: Icewind Dale, #1-3; Legend of Drizzt, #4-6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"R.A. Salvatore"},{"book_id":62530,"title":"Thud! (Discworld, #34; City Watch #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1320495268m\/62530.jpg","authors":"Terry Pratchett"},{"book_id":62571,"title":"The Keep (Adversary Cycle, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"F. Paul Wilson"},{"book_id":62953,"title":"Ghost World","image_url":"https:\/\/images.gr-assets.com\/books\/1327894702m\/62953.jpg","authors":"Daniel Clowes"},{"book_id":63032,"title":"2666","image_url":"https:\/\/images.gr-assets.com\/books\/1412644327m\/63032.jpg","authors":"Roberto Bola\u00f1o"},{"book_id":63033,"title":"The Savage Detectives","image_url":"https:\/\/images.gr-assets.com\/books\/1342651149m\/63033.jpg","authors":"Roberto Bola\u00f1o, Natasha Wimmer"},{"book_id":63432,"title":"3001: The Final Odyssey (Space Odyssey, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Arthur C. Clarke"},{"book_id":63461,"title":"Terms of Endearment","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Larry McMurtry"},{"book_id":63689,"title":"The Great Railway Bazaar","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Paul Theroux"},{"book_id":63697,"title":"The Man Who Mistook His Wife for a Hat and Other Clinical Tales","image_url":"https:\/\/images.gr-assets.com\/books\/1447047702m\/63697.jpg","authors":"Oliver Sacks"},{"book_id":63720,"title":"The Fifth Elephant (Discworld, #24; City Watch, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1327961702m\/63720.jpg","authors":"Terry Pratchett"},{"book_id":63832,"title":"Blue Highways","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"William Least Heat-Moon"},{"book_id":64023,"title":"Celebration of Discipline: The Path to Spiritual Growth","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Richard J. Foster"},{"book_id":64081,"title":"The Irresistible Revolution: Living as an Ordinary Radical","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Shane Claiborne"},{"book_id":64216,"title":"Guards! Guards! (Discworld, #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1431127356m\/64216.jpg","authors":"Terry Pratchett"},{"book_id":64217,"title":"Pyramids (Discworld, #7)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Terry Pratchett"},{"book_id":64218,"title":"Eric (Discworld, #9; Rincewind #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1377865202m\/64218.jpg","authors":"Terry Pratchett"},{"book_id":64222,"title":"Going Postal (Discworld, #33; Moist von Lipwig, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Terry Pratchett"},{"book_id":64394,"title":"The Stainless Steel Rat (Stainless Steel Rat, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1328073906m\/64394.jpg","authors":"Harry Harrison"},{"book_id":64401,"title":"Another Fine Myth (Myth Adventures, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert Lynn Asprin"},{"book_id":64481,"title":"A Northern Light","image_url":"https:\/\/images.gr-assets.com\/books\/1376507768m\/64481.jpg","authors":"Jennifer Donnelly"},{"book_id":64582,"title":"Chaos: Making a New Science","image_url":"https:\/\/images.gr-assets.com\/books\/1327941595m\/64582.jpg","authors":"James Gleick"},{"book_id":64666,"title":"An Anthropologist on Mars: Seven Paradoxical Tales","image_url":"https:\/\/images.gr-assets.com\/books\/1356447436m\/64666.jpg","authors":"Oliver Sacks"},{"book_id":64732,"title":"The Forge of God (Forge of God, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Greg Bear"},{"book_id":64794,"title":"Dancing Wu Li Masters: An Overview of the New Physics (Perennial Classics)","image_url":"https:\/\/images.gr-assets.com\/books\/1410138626m\/64794.jpg","authors":"Gary Zukav"},{"book_id":64854,"title":"M is for Malice (Kinsey Millhone, #13)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sue Grafton"},{"book_id":64857,"title":"D is for Deadbeat (Kinsey Millhone, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1389287799m\/64857.jpg","authors":"Sue Grafton"},{"book_id":64860,"title":"E is for Evidence (Kinsey Millhone, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sue Grafton"},{"book_id":64862,"title":"R is for Ricochet (Kinsey Millhone, #18)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sue Grafton"},{"book_id":64863,"title":"A is for Alibi (Kinsey Millhone, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sue Grafton"},{"book_id":64864,"title":"N is for Noose (Kinsey Millhone, #14)","image_url":"https:\/\/images.gr-assets.com\/books\/1356443226m\/64864.jpg","authors":"Sue Grafton"},{"book_id":64865,"title":"B is for Burglar (Kinsey Millhone, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sue Grafton"},{"book_id":64895,"title":"Cod: A Biography of the Fish that Changed the World","image_url":"https:\/\/images.gr-assets.com\/books\/1356452461m\/64895.jpg","authors":"Mark Kurlansky"},{"book_id":64948,"title":"Whispers","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dean Koontz"},{"book_id":64949,"title":"The Voice of the Night","image_url":"https:\/\/images.gr-assets.com\/books\/1308461608m\/64949.jpg","authors":"Brian Coffey, Dean Koontz"},{"book_id":64955,"title":"Midnight","image_url":"https:\/\/images.gr-assets.com\/books\/1308459731m\/64955.jpg","authors":"Dean Koontz"},{"book_id":64960,"title":"The Face of Fear","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Brian Coffey, Dean Koontz"},{"book_id":65070,"title":"A Corner of the Universe","image_url":"https:\/\/images.gr-assets.com\/books\/1400681323m\/65070.jpg","authors":"Ann M. Martin"},{"book_id":65091,"title":"The Frog Princess (Tales of the Frog Princess, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1397766099m\/65091.jpg","authors":"E.D. Baker"},{"book_id":65110,"title":"The Penultimate Peril (A Series of Unfortunate Events, #12)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lemony Snicket, Brett Helquist"},{"book_id":65111,"title":"The Grim Grotto (A Series of Unfortunate Events, #11)","image_url":"https:\/\/images.gr-assets.com\/books\/1415580928m\/65111.jpg","authors":"Lemony Snicket, Brett Helquist"},{"book_id":65112,"title":"The End (A Series of Unfortunate Events, #13)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lemony Snicket, Brett Helquist"},{"book_id":65113,"title":"A Series of Unfortunate Events Box: The Complete Wreck (Books 1-13)","image_url":"https:\/\/images.gr-assets.com\/books\/1307655939m\/65113.jpg","authors":"Lemony Snicket, Brett Helquist"},{"book_id":65118,"title":"The Hostile Hospital (A Series of Unfortunate Events, #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1442446120m\/65118.jpg","authors":"Lemony Snicket, Brett Helquist"},{"book_id":65119,"title":"The Miserable Mill (A Series of Unfortunate Events, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1352146209m\/65119.jpg","authors":"Lemony Snicket, Brett Helquist"},{"book_id":65217,"title":"The Five Chinese Brothers","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Claire Huchet Bishop, Kurt Wiese"},{"book_id":65336,"title":"Selected Poems","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"William Carlos Williams, Charles Tomlinson"},{"book_id":65399,"title":"Sullivan's Island (Lowcountry Tales, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327888744m\/65399.jpg","authors":"Dorothea Benton Frank"},{"book_id":65497,"title":"Love Comes Softly (Love Comes Softly, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1273177650m\/65497.jpg","authors":"Janette Oke"},{"book_id":65605,"title":"The Magician's Nephew (Chronicles of Narnia, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1308814770m\/65605.jpg","authors":"C.S. Lewis"},{"book_id":65633,"title":"The Chronicles of Narnia - The Lion, the Witch, and the Wardrobe Official Illustrated Movie Companion","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Perry Moore, Andrew Adamson, C.S. Lewis"},{"book_id":65641,"title":"The Silver Chair (Chronicles of Narnia, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1336139237m\/65641.jpg","authors":"C.S. Lewis, Pauline Baynes"},{"book_id":65684,"title":"Monster","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Frank E. Peretti"},{"book_id":65840,"title":"Anne of Windy Poplars (Anne of Green Gables, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"L.M. Montgomery"},{"book_id":65910,"title":"The Perfect Husband (Quincy & Rainie, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lisa Gardner"},{"book_id":65948,"title":"From the Corner of His Eye","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dean Koontz"},{"book_id":66354,"title":"Flow: The Psychology of Optimal Experience","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mihaly Csikszentmihalyi"},{"book_id":66370,"title":"Rage","image_url":"https:\/\/images.gr-assets.com\/books\/1299003176m\/66370.jpg","authors":"Richard Bachman, Stephen King"},{"book_id":66470,"title":"Chromosome 6 (Jack Stapleton & Laurie Montgomery, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1290140777m\/66470.jpg","authors":"Robin Cook"},{"book_id":66559,"title":"Sharp Objects","image_url":"https:\/\/images.gr-assets.com\/books\/1423241485m\/66559.jpg","authors":"Gillian Flynn"},{"book_id":66655,"title":"Necroscope (Necroscope, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Brian Lumley"},{"book_id":66676,"title":"The Two Swords (Forgotten Realms: Hunter's Blades, #3; Legend of Drizzt, #16)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"R.A. Salvatore"},{"book_id":66678,"title":"Exile (Forgotten Realms: The Dark Elf Trilogy, #2; Legend of Drizzt, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"R.A. Salvatore"},{"book_id":66683,"title":"The Thousand Orcs (Forgotten Realms: Hunter's Blades, #1; Legend of Drizzt, #14)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"R.A. Salvatore"},{"book_id":66692,"title":"Streams of Silver (Forgotten Realms: Icewind Dale, #2; Legend of Drizzt, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1457322786m\/66692.jpg","authors":"R.A. Salvatore"},{"book_id":66693,"title":"The Crystal Shard (Forgotten Realms: Icewind Dale, #1; Legend of Drizzt, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1331146192m\/66693.jpg","authors":"R.A. Salvatore"},{"book_id":66695,"title":"Sojourn (Forgotten Realms: The Dark Elf Trilogy, #3; Legend of Drizzt, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1322861953m\/66695.jpg","authors":"R.A. Salvatore"},{"book_id":66857,"title":"Moab Is My Washpot (Memoir #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327963490m\/66857.jpg","authors":"Stephen Fry"},{"book_id":66933,"title":"The Wretched of the Earth","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Frantz Fanon, Jean-Paul Sartre, Richard Philcox, Homi K. Bhabha"},{"book_id":67035,"title":"Relic (Pendergast, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Douglas Preston, Lincoln Child"},{"book_id":67238,"title":"Dead Poets Society","image_url":"https:\/\/images.gr-assets.com\/books\/1359814692m\/67238.jpg","authors":"N.H. Kleinbaum"},{"book_id":67513,"title":"Touch the Dark (Cassandra Palmer, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1307391100m\/67513.jpg","authors":"Karen Chance"},{"book_id":67657,"title":"The Lady & Sons Savannah Country Cookbook","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Paula H. Deen, John Berendt"},{"book_id":67863,"title":"Animal-Speak: The Spiritual & Magical Powers of Creatures Great & Small","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ted Andrews, Winston Allen, Margaret K. Andrews"},{"book_id":67920,"title":"Sybil: The Classic True Story of a Woman Possessed by Sixteen Personalities","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Flora Rheta Schreiber"},{"book_id":67931,"title":"The Analyst","image_url":"https:\/\/images.gr-assets.com\/books\/1280112638m\/67931.jpg","authors":"John Katzenbach"},{"book_id":68099,"title":"Death at La Fenice (Commissario Brunetti, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1441466744m\/68099.jpg","authors":"Donna Leon"},{"book_id":68143,"title":"The Wisdom of Crowds","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Surowiecki"},{"book_id":68210,"title":"Gilead (Gilead, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1451555787m\/68210.jpg","authors":"Marilynne Robinson"},{"book_id":68378,"title":"Dragons of Spring Dawning (Dragonlance: Chronicles, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1312062224m\/68378.jpg","authors":"Margaret Weis, Tracy Hickman"},{"book_id":68380,"title":"Dragonlance Chronicles (Dragonlance #1-3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Margaret Weis, Tracy Hickman"},{"book_id":68396,"title":"The Halfling's Gem (Forgotten Realms: Icewind Dale, #3; Legend of Drizzt, #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"R.A. Salvatore"},{"book_id":68418,"title":"The Dark Elf Trilogy Collector's Edition (Forgotten Realms: Dark Elf Trilogy, #1-3; Legend of Drizzt, #1-3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"R.A. Salvatore"},{"book_id":68427,"title":"Elantris (Elantris, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1475740953m\/68427.jpg","authors":"Brandon Sanderson"},{"book_id":68428,"title":"The Final Empire (Mistborn, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1480717416m\/68428.jpg","authors":"Brandon Sanderson"},{"book_id":68429,"title":"The Well of Ascension (Mistborn, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1480717596m\/68429.jpg","authors":"Brandon Sanderson"},{"book_id":68452,"title":"Pani Jeziora (Saga o Wied\u017aminie, #7)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Andrzej Sapkowski"},{"book_id":68453,"title":"Czas pogardy (Saga o Wied\u017aminie, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Andrzej Sapkowski"},{"book_id":68455,"title":"Wie\u017ca Jask\u00f3\u0142ki (Saga o Wied\u017aminie, #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Andrzej Sapkowski"},{"book_id":68458,"title":"Krew elf\u00f3w (Saga o Wied\u017aminie, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Andrzej Sapkowski"},{"book_id":68483,"title":"The Vor Game (Vorkosigan Saga, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1322571824m\/68483.jpg","authors":"Lois McMaster Bujold"},{"book_id":68487,"title":"Royal Assassin (Farseer Trilogy, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1387145228m\/68487.jpg","authors":"Robin Hobb"},{"book_id":68488,"title":"Fool's Errand (Tawny Man, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1360508839m\/68488.jpg","authors":"Robin Hobb"},{"book_id":68494,"title":"Perdido Street Station (Bas-Lag, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1393537963m\/68494.jpg","authors":"China Mi\u00e9ville"},{"book_id":68496,"title":"Un Lun Dun","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"China Mi\u00e9ville"},{"book_id":68497,"title":"The Scar (Bas-Lag, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1320435192m\/68497.jpg","authors":"China Mi\u00e9ville"},{"book_id":68520,"title":"The Winter King (The Warlord Chronicles, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1311987677m\/68520.jpg","authors":"Bernard Cornwell"},{"book_id":68521,"title":"Excalibur (The Warlord Chronicles, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bernard Cornwell"},{"book_id":68524,"title":"Enemy of God (The Warlord Chronicles, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1311985643m\/68524.jpg","authors":"Bernard Cornwell"},{"book_id":68526,"title":"Lords of the North (The Saxon Stories, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bernard Cornwell"},{"book_id":68527,"title":"The Last Kingdom (The Saxon Stories, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1407107780m\/68527.jpg","authors":"Bernard Cornwell"},{"book_id":68528,"title":"The Pale Horseman (The Saxon Stories, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1421710510m\/68528.jpg","authors":"Bernard Cornwell"},{"book_id":68530,"title":"Vagabond (The Grail Quest, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1407707722m\/68530.jpg","authors":"Bernard Cornwell"},{"book_id":68531,"title":"The Archer's Tale (The Grail Quest, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1407709312m\/68531.jpg","authors":"Bernard Cornwell"},{"book_id":68591,"title":"Brida","image_url":"https:\/\/images.gr-assets.com\/books\/1403772793m\/68591.jpg","authors":"Paulo Coelho, Montserrat Mira"},{"book_id":68783,"title":"Girl, Interrupted","image_url":"https:\/\/images.gr-assets.com\/books\/1475482930m\/68783.jpg","authors":"Susanna Kaysen"},{"book_id":68811,"title":"Momo","image_url":"https:\/\/images.gr-assets.com\/books\/1420905611m\/68811.jpg","authors":"Michael Ende"},{"book_id":68930,"title":"They Do It with Mirrors (Miss Marple, #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Agatha Christie"},{"book_id":68984,"title":"The Power of Your Subconscious Mind","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Joseph Murphy, Ian McMahan"},{"book_id":68985,"title":"The Power of Full Engagement: Managing Energy, Not Time, Is the Key to High Performance and Personal Renewal","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jim Loehr, Tony Schwartz"},{"book_id":69136,"title":"The Book of Lost Things","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Connolly"},{"book_id":69242,"title":"Made to Stick: Why Some Ideas Survive and Others Die","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Chip Heath, Dan Heath"},{"book_id":69392,"title":"Milkweed","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jerry Spinelli"},{"book_id":69477,"title":"Z for Zachariah","image_url":"https:\/\/images.gr-assets.com\/books\/1420324231m\/69477.jpg","authors":"Robert C. O'Brien"},{"book_id":69571,"title":"Rich Dad, Poor Dad","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert T. Kiyosaki"},{"book_id":70241,"title":"Crash","image_url":"https:\/\/images.gr-assets.com\/books\/1281416649m\/70241.jpg","authors":"J.G. Ballard"},{"book_id":70287,"title":"The Many Lives & Secret Sorrows of Josephine B. (Josephine Bonaparte, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1355931779m\/70287.jpg","authors":"Sandra Gulland"},{"book_id":70401,"title":"On the Road","image_url":"https:\/\/images.gr-assets.com\/books\/1413588576m\/70401.jpg","authors":"Jack Kerouac"},{"book_id":70420,"title":"The Undercover Economist","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tim Harford"},{"book_id":70487,"title":"Attack of the Deranged Mutant Killer Monster Snow Goons","image_url":"https:\/\/images.gr-assets.com\/books\/1384735429m\/70487.jpg","authors":"Bill Watterson"},{"book_id":70489,"title":"There's Treasure Everywhere: A Calvin and Hobbes Collection","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bill Watterson"},{"book_id":70509,"title":"Absurdistan","image_url":"https:\/\/images.gr-assets.com\/books\/1486266465m\/70509.jpg","authors":"Gary Shteyngart"},{"book_id":70535,"title":"2001: A Space Odyssey (Space Odyssey, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Arthur C. Clarke"},{"book_id":70539,"title":"2010: Odyssey Two (Space Odyssey, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Arthur C. Clarke"},{"book_id":70561,"title":"The Gulag Archipelago 1918-1956","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Aleksandr Solzhenitsyn, Edward E. Ericson Jr."},{"book_id":70912,"title":"The Dice Man","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Luke Rhinehart"},{"book_id":71252,"title":"The Kindly Ones (The Sandman #9)","image_url":"https:\/\/images.gr-assets.com\/books\/1339922887m\/71252.jpg","authors":"Neil Gaiman, Marc Hempel, Richard Case, D'Israeli, Teddy Kristiansen, Glyn Dillon, Charles Vess, Dean Ormston, Kevin Nowlan, Todd Klein, Frank McConnell"},{"book_id":71292,"title":"Asterix the Gaul (Asterix, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ren\u00e9 Goscinny, Albert Uderzo, Anthea Bell, Derek Hockridge"},{"book_id":71332,"title":"Push","image_url":"https:\/\/images.gr-assets.com\/books\/1414633395m\/71332.jpg","authors":"Sapphire"},{"book_id":71458,"title":"Stupeur et tremblements","image_url":"https:\/\/images.gr-assets.com\/books\/1336069300m\/71458.jpg","authors":"Am\u00e9lie Nothomb"},{"book_id":71622,"title":"The Widow of the South","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert Hicks"},{"book_id":71728,"title":"Jonathan Livingston Seagull","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Richard Bach, Russell Munson"},{"book_id":71771,"title":"The Bastard (Kent Family Chronicles, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Jakes"},{"book_id":71776,"title":"At Home in Mitford (Mitford Years, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jan Karon"},{"book_id":71784,"title":"A New Song (Mitford Years, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1344358382m\/71784.jpg","authors":"Jan Karon"},{"book_id":71787,"title":"In This Mountain (Mitford Years, #7)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jan Karon"},{"book_id":71811,"title":"Moon Called (Mercy Thompson, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1272070347m\/71811.jpg","authors":"Patricia Briggs"},{"book_id":71823,"title":"The Green Mile, Part 6: Coffey on the Mile","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Stephen King"},{"book_id":71863,"title":"A Killing Frost (Tomorrow, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Marsden"},{"book_id":71864,"title":"The Dead of Night (Tomorrow, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Marsden"},{"book_id":71865,"title":"Tomorrow, When the War Began (Tomorrow, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Marsden"},{"book_id":71867,"title":"The Other Side of Dawn (Tomorrow, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1331588583m\/71867.jpg","authors":"John Marsden"},{"book_id":71869,"title":"Burning For Revenge (Tomorrow, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Marsden"},{"book_id":71870,"title":"Darkness, Be My Friend (Tomorrow, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Marsden"},{"book_id":71984,"title":"Ghost Wars: The Secret History of the CIA, Afghanistan, and bin Laden from the Soviet Invasion to September 10, 2001","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Steve Coll"},{"book_id":72003,"title":"Angels in America","image_url":"https:\/\/images.gr-assets.com\/books\/1170797663m\/72003.jpg","authors":"Tony Kushner"},{"book_id":72148,"title":"Restless","image_url":"https:\/\/images.gr-assets.com\/books\/1330951946m\/72148.jpg","authors":"William Boyd"},{"book_id":72159,"title":"Cat on a Hot Tin Roof","image_url":"https:\/\/images.gr-assets.com\/books\/1389369390m\/72159.jpg","authors":"Tennessee Williams"},{"book_id":72223,"title":"The Worst Hard Time: The Untold Story of Those Who Survived the Great American Dust Bowl","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Timothy Egan"},{"book_id":72536,"title":"The Sociopath Next Door","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Martha Stout"},{"book_id":72623,"title":"Dream Man","image_url":"https:\/\/images.gr-assets.com\/books\/1349066255m\/72623.jpg","authors":"Linda Howard"},{"book_id":72657,"title":"Pedagogy of the Oppressed","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Paulo Freire, Myra Bergman Ramos, Donaldo Macedo, Richard Shaull"},{"book_id":72659,"title":"Never Cry Wolf","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Farley Mowat"},{"book_id":72854,"title":"Into the Wilderness (Wilderness, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1320395200m\/72854.jpg","authors":"Sara Donati"},{"book_id":72855,"title":"Lake in the Clouds (Wilderness, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1367533032m\/72855.jpg","authors":"Sara Donati"},{"book_id":72929,"title":"Affinity","image_url":"https:\/\/images.gr-assets.com\/books\/1328087803m\/72929.jpg","authors":"Sarah Waters"},{"book_id":72978,"title":"Titus Andronicus","image_url":"https:\/\/images.gr-assets.com\/books\/1397028943m\/72978.jpg","authors":"William Shakespeare"},{"book_id":73051,"title":"Better than Life (Red Dwarf #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1301794541m\/73051.jpg","authors":"Grant Naylor"},{"book_id":73062,"title":"Scarlett","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Alexandra Ripley"},{"book_id":73064,"title":"Natural Born Charmer (Chicago Stars, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1308742575m\/73064.jpg","authors":"Susan Elizabeth Phillips"},{"book_id":73070,"title":"It Had to Be You (Chicago Stars, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1297088239m\/73070.jpg","authors":"Susan Elizabeth Phillips"},{"book_id":73080,"title":"Nobody's Baby But Mine (Chicago Stars, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1298032580m\/73080.jpg","authors":"Susan Elizabeth Phillips"},{"book_id":73084,"title":"Heaven, Texas (Chicago Stars, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1308646849m\/73084.jpg","authors":"Susan Elizabeth Phillips"},{"book_id":73086,"title":"Kiss an Angel","image_url":"https:\/\/images.gr-assets.com\/books\/1309115033m\/73086.jpg","authors":"Susan Elizabeth Phillips"},{"book_id":73089,"title":"Match Me If You Can (Chicago Stars, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1327154923m\/73089.jpg","authors":"Susan Elizabeth Phillips"},{"book_id":73095,"title":"Dream a Little Dream (Chicago Stars, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1308818689m\/73095.jpg","authors":"Susan Elizabeth Phillips"},{"book_id":73100,"title":"This Heart of Mine (Chicago Stars, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1391625031m\/73100.jpg","authors":"Susan Elizabeth Phillips"},{"book_id":73184,"title":"Living Buddha, Living Christ","image_url":"https:\/\/images.gr-assets.com\/books\/1309211729m\/73184.jpg","authors":"Thich Nhat Hanh"},{"book_id":73186,"title":"The Case for Christ","image_url":"https:\/\/images.gr-assets.com\/books\/1448776489m\/73186.jpg","authors":"Lee Strobel"},{"book_id":73297,"title":"The Scarlet Thread ","image_url":"https:\/\/images.gr-assets.com\/books\/1406510347m\/73297.jpg","authors":"Francine Rivers"},{"book_id":73385,"title":"A Knight in Shining Armor","image_url":"https:\/\/images.gr-assets.com\/books\/1330613623m\/73385.jpg","authors":"Jude Deveraux"},{"book_id":73860,"title":"Dibs in Search of Self","image_url":"https:\/\/images.gr-assets.com\/books\/1403187565m\/73860.jpg","authors":"Virginia M. Axline"},{"book_id":73864,"title":"A Man Named Dave (Dave Pelzer #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dave Pelzer"},{"book_id":73906,"title":"Taliesin (The Pendragon Cycle, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1170843303m\/73906.jpg","authors":"Stephen R. Lawhead"},{"book_id":73945,"title":"Apology","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Plato, James J. Helm"},{"book_id":73960,"title":"Lorna Doone","image_url":"https:\/\/images.gr-assets.com\/books\/1299346797m\/73960.jpg","authors":"R.D. Blackmore, Michelle Allen"},{"book_id":73965,"title":"Drinking: A Love Story","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Caroline Knapp"},{"book_id":73968,"title":"Love Story (Love Story, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Erich Segal"},{"book_id":74033,"title":"Innocent in Death (In Death, #24)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"J.D. Robb"},{"book_id":74034,"title":"Amusing Ourselves to Death: Public Discourse in the Age of Show Business","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Neil Postman, Andrew Postman"},{"book_id":74036,"title":"Ceremony in Death (In Death, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1376018955m\/74036.jpg","authors":"J.D. Robb"},{"book_id":74169,"title":"Facing Your Giants: A David and Goliath Story for Everyday People","image_url":"https:\/\/images.gr-assets.com\/books\/1380857035m\/74169.jpg","authors":"Max Lucado"},{"book_id":74256,"title":"Le Petit Nicolas (Le petit Nicolas, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ren\u00e9 Goscinny, Jean-Jacques Semp\u00e9"},{"book_id":74270,"title":"Luck in the Shadows (Nightrunner, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1486846979m\/74270.jpg","authors":"Lynn Flewelling"},{"book_id":74389,"title":"The Plains of Passage (Earth's Children, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1324059606m\/74389.jpg","authors":"Jean M. Auel"},{"book_id":74406,"title":"Fifth Business","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robertson Davies"},{"book_id":74462,"title":"Unless","image_url":"https:\/\/images.gr-assets.com\/books\/1327970989m\/74462.jpg","authors":"Carol Shields"},{"book_id":74532,"title":"George's Marvellous Medicine","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Roald Dahl, Quentin Blake"},{"book_id":74731,"title":"The Stupidest Angel: A Heartwarming Tale of Christmas Terror (Pine Cove, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1331320721m\/74731.jpg","authors":"Christopher Moore"},{"book_id":74812,"title":"Born on a Blue Day: Inside the Extraordinary Mind of an Autistic Savant","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Daniel Tammet"},{"book_id":74821,"title":"Day by Day Armageddon (Day by Day Armageddon,#1)","image_url":"https:\/\/images.gr-assets.com\/books\/1474936945m\/74821.jpg","authors":"J.L. Bourne"},{"book_id":74824,"title":"The Alexandria Link (Cotton Malone, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Steve Berry"},{"book_id":74862,"title":"\u0645\u0627\u0647\u06cc \u0633\u06cc\u0627\u0647 \u06a9\u0648\u0686\u0648\u0644\u0648","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Samad Behrangi"},{"book_id":74928,"title":"Hellsing, Vol. 01 (Hellsing, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1403205185m\/74928.jpg","authors":"Kohta Hirano, Duane Johnson"},{"book_id":74997,"title":"Five Run Away Together (Famous Five, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1319213384m\/74997.jpg","authors":"Enid Blyton"},{"book_id":74998,"title":"The Magic Faraway Tree (The Faraway Tree, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Enid Blyton"},{"book_id":75020,"title":"The Romanov Prophecy","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Steve Berry"},{"book_id":75024,"title":"The Templar Legacy (Cotton Malone, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1413393638m\/75024.jpg","authors":"Steve Berry"},{"book_id":75162,"title":"Soul on Ice","image_url":"https:\/\/images.gr-assets.com\/books\/1417410878m\/75162.jpg","authors":"Eldridge Cleaver"},{"book_id":76104,"title":"The Exploits of Sherlock Holmes","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Adrian Conan Doyle, John Dickson Carr"},{"book_id":76171,"title":"We","image_url":"https:\/\/images.gr-assets.com\/books\/1421883730m\/76171.jpg","authors":"Yevgeny Zamyatin, Clarence Brown"},{"book_id":76179,"title":"Envy","image_url":"https:\/\/images.gr-assets.com\/books\/1263146546m\/76179.jpg","authors":"Sandra Brown"},{"book_id":76237,"title":"The Further Adventures of Sherlock Holmes: After Sir Arthur Conan Doyle (Classic Crime)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Richard Lancelyn Green, Ronald Knox, Julian Symons, Various"},{"book_id":76248,"title":"Sherlock Holmes of Baker Street: A Life of the World's First Consulting Detective","image_url":"https:\/\/images.gr-assets.com\/books\/1355676228m\/76248.jpg","authors":"William S. Baring-Gould"},{"book_id":76334,"title":"A New Earth: Awakening to Your Life's Purpose","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Eckhart Tolle"},{"book_id":76401,"title":"Bury My Heart at Wounded Knee: An Indian History of the American West","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dee Brown"},{"book_id":76527,"title":"The Life and Opinions of Tristram Shandy, Gentleman","image_url":"https:\/\/images.gr-assets.com\/books\/1403402384m\/76527.jpg","authors":"Laurence Sterne, Melvyn New"},{"book_id":76620,"title":"Watership Down (Watership Down, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1405136931m\/76620.jpg","authors":"Richard Adams"},{"book_id":76658,"title":"On a Pale Horse (Incarnations of Immortality, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Piers Anthony"},{"book_id":76659,"title":"Bearing an Hourglass (Incarnations of Immortality, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Piers Anthony"},{"book_id":76660,"title":"With a Tangled Skein (Incarnations of Immortality, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Piers Anthony"},{"book_id":76661,"title":"Being a Green Mother (Incarnations of Immortality, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Piers Anthony"},{"book_id":76664,"title":"A Spell for Chameleon (Xanth #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1476435403m\/76664.jpg","authors":"Piers Anthony"},{"book_id":76667,"title":"Wielding a Red Sword (Incarnations of Immortality, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Piers Anthony"},{"book_id":76668,"title":"For Love of Evil (Incarnations of Immortality, #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Piers Anthony"},{"book_id":76679,"title":"Forward the Foundation (Foundation: Prequel #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Isaac Asimov"},{"book_id":76683,"title":"Foundation's Edge (Foundation #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Isaac Asimov"},{"book_id":76688,"title":"Robots and Empire (Robot #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1335782304m\/76688.jpg","authors":"Isaac Asimov"},{"book_id":76706,"title":"Track of the Cat (Anna Pigeon, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1326365792m\/76706.jpg","authors":"Nevada Barr"},{"book_id":76740,"title":"The Demolished Man","image_url":"https:\/\/images.gr-assets.com\/books\/1360171879m\/76740.jpg","authors":"Alfred Bester"},{"book_id":76778,"title":"The Martian Chronicles","image_url":"https:\/\/images.gr-assets.com\/books\/1374049948m\/76778.jpg","authors":"Ray Bradbury"},{"book_id":76865,"title":"Good to Great: Why Some Companies Make the Leap... and Others Don't","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James C. Collins"},{"book_id":76867,"title":"A Darkness More Than Night (Harry Bosch, #7; Terry McCaleb, #2; Harry Bosch Universe, #9)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael Connelly"},{"book_id":76889,"title":"100 Selected Poems","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"E.E. Cummings"},{"book_id":77013,"title":"As I Lay Dying","image_url":"https:\/\/images.gr-assets.com\/books\/1451810782m\/77013.jpg","authors":"William Faulkner"},{"book_id":77103,"title":"The Glass Palace","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Amitav Ghosh"},{"book_id":77142,"title":"Snow Falling on Cedars","image_url":"https:\/\/images.gr-assets.com\/books\/1479863528m\/77142.jpg","authors":"David Guterson"},{"book_id":77156,"title":"Plainsong (Plainsong, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kent Haruf"},{"book_id":77160,"title":"Across the Nightingale Floor (Tales of the Otori, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lian Hearn"},{"book_id":77161,"title":"Grass for His Pillow (Tales of the Otori, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lian Hearn"},{"book_id":77163,"title":"Stones from the River","image_url":"https:\/\/images.gr-assets.com\/books\/1366513909m\/77163.jpg","authors":"Ursula Hegi"},{"book_id":77203,"title":"The Kite Runner","image_url":"https:\/\/images.gr-assets.com\/books\/1484565687m\/77203.jpg","authors":"Khaled Hosseini"},{"book_id":77262,"title":"Animal Dreams","image_url":"https:\/\/images.gr-assets.com\/books\/1481663395m\/77262.jpg","authors":"Barbara Kingsolver"},{"book_id":77270,"title":"The Jungle Book","image_url":"https:\/\/images.gr-assets.com\/books\/1327873594m\/77270.jpg","authors":"Rudyard Kipling"},{"book_id":77276,"title":"A Swiftly Tilting Planet (A Wrinkle in Time Quintet, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1327465278m\/77276.jpg","authors":"Madeleine L'Engle"},{"book_id":77281,"title":"The Far Side Gallery","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Gary Larson"},{"book_id":77295,"title":"Gift from the Sea","image_url":"https:\/\/images.gr-assets.com\/books\/1328312670m\/77295.jpg","authors":"Anne Morrow Lindbergh"},{"book_id":77298,"title":"Aunt Julia and the Scriptwriter","image_url":"https:\/\/images.gr-assets.com\/books\/1327993472m\/77298.jpg","authors":"Mario Vargas Llosa, Helen R. Lane"},{"book_id":77366,"title":"The Hero and the Crown (Damar, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robin McKinley"},{"book_id":77368,"title":"Spindle's End","image_url":"https:\/\/images.gr-assets.com\/books\/1308815054m\/77368.jpg","authors":"Robin McKinley"},{"book_id":77378,"title":"The Seven-Percent Solution","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nicholas Meyer"},{"book_id":77390,"title":"Anne of Avonlea (Anne of Green Gables, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1305545757m\/77390.jpg","authors":"L.M. Montgomery"},{"book_id":77391,"title":"Anne of Ingleside (Anne of Green Gables, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1285712495m\/77391.jpg","authors":"L.M. Montgomery"},{"book_id":77392,"title":"Anne of the Island (Anne of Green Gables, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"L.M. Montgomery"},{"book_id":77394,"title":"Anne's House of Dreams (Anne of Green Gables, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"L.M. Montgomery"},{"book_id":77395,"title":"Rainbow Valley (Anne of Green Gables, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1403192556m\/77395.jpg","authors":"L.M. Montgomery"},{"book_id":77398,"title":"Gap Creek","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert Morgan"},{"book_id":77427,"title":"H.M.S. Surprise","image_url":"https:\/\/images.gr-assets.com\/books\/1453820127m\/77427.jpg","authors":"Patrick O'Brian"},{"book_id":77430,"title":"Master and Commander","image_url":"https:\/\/images.gr-assets.com\/books\/1467992540m\/77430.jpg","authors":"Patrick O'Brian"},{"book_id":77431,"title":"The Mauritius Command","image_url":"https:\/\/images.gr-assets.com\/books\/1455373531m\/77431.jpg","authors":"Patrick O'Brian"},{"book_id":77449,"title":"Here be Dragons (Welsh Princes, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1448657042m\/77449.jpg","authors":"Sharon Kay Penman"},{"book_id":77477,"title":"Blessings","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anna Quindlen"},{"book_id":77504,"title":"Blue Mars (Mars Trilogy, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kim Stanley Robinson"},{"book_id":77505,"title":"Green Mars (Mars Trilogy, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kim Stanley Robinson"},{"book_id":77507,"title":"Red Mars (Mars Trilogy, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kim Stanley Robinson"},{"book_id":77554,"title":"The Stone Diaries","image_url":"https:\/\/images.gr-assets.com\/books\/1285159303m\/77554.jpg","authors":"Carol Shields"},{"book_id":77565,"title":"The Fall of Hyperion (Hyperion Cantos, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1429215870m\/77565.jpg","authors":"Dan Simmons"},{"book_id":77566,"title":"Hyperion (Hyperion Cantos, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1405546838m\/77566.jpg","authors":"Dan Simmons"},{"book_id":77661,"title":"The Daughter of Time (Inspector Alan Grant, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1394326949m\/77661.jpg","authors":"Josephine Tey"},{"book_id":77699,"title":"Dinner at the Homesick Restaurant","image_url":"https:\/\/images.gr-assets.com\/books\/1502218870m\/77699.jpg","authors":"Anne Tyler"},{"book_id":77711,"title":"A Fire Upon the Deep (Zones of Thought, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1333915005m\/77711.jpg","authors":"Vernor Vinge"},{"book_id":77727,"title":"Calvin and Hobbes","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bill Watterson, G.B. Trudeau"},{"book_id":77735,"title":"The Honor of the Queen (Honor Harrington, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1304286399m\/77735.jpg","authors":"David Weber"},{"book_id":77736,"title":"The Short Victorious War (Honor Harrington, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1321561719m\/77736.jpg","authors":"David Weber"},{"book_id":77738,"title":"Flag in Exile (Honor Harrington, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1321561696m\/77738.jpg","authors":"David Weber"},{"book_id":77739,"title":"Honor Among Enemies (Honor Harrington, #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Weber"},{"book_id":77767,"title":"Little House on the Prairie (Little House, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Laura Ingalls Wilder, Garth Williams"},{"book_id":77770,"title":"These Happy Golden Years (Little House, #8)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Laura Ingalls Wilder, Garth Williams"},{"book_id":77773,"title":"To Say Nothing of the Dog (Oxford Time Travel, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1469410460m\/77773.jpg","authors":"Connie Willis"},{"book_id":77786,"title":"Vision of the Future (Star Wars: The Hand of Thrawn, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1328289436m\/77786.jpg","authors":"Timothy Zahn"},{"book_id":77787,"title":"Specter of the Past (Star Wars: The Hand of Thrawn, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1326718522m\/77787.jpg","authors":"Timothy Zahn"},{"book_id":77866,"title":"Any Human Heart","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"William Boyd"},{"book_id":77995,"title":"The Necklace and Other Short Stories","image_url":"https:\/\/images.gr-assets.com\/books\/1327649717m\/77995.jpg","authors":"Guy de Maupassant"},{"book_id":78039,"title":"Ramona the Pest (Ramona, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1408926719m\/78039.jpg","authors":"Beverly Cleary"},{"book_id":78129,"title":"Killing Floor (Jack Reacher, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1399313258m\/78129.jpg","authors":"Lee Child"},{"book_id":78131,"title":"The Killing Game (Eve Duncan, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1314902885m\/78131.jpg","authors":"Iris Johansen"},{"book_id":78250,"title":"The Teachings of Don Juan: A Yaqui Way of Knowledge ","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Carlos Castaneda"},{"book_id":78408,"title":"Lemony Snicket: The Unauthorized Autobiography (A Series of Unfortunate Events companion)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lemony Snicket"},{"book_id":78411,"title":"The Bad Beginning (A Series of Unfortunate Events, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1490085391m\/78411.jpg","authors":"Lemony Snicket, Brett Helquist"},{"book_id":78418,"title":"The Reptile Room (A Series of Unfortunate Events, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1352146294m\/78418.jpg","authors":"Lemony Snicket, Brett Helquist"},{"book_id":78427,"title":"The Total Money Makeover: A Proven Plan for Financial Fitness","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dave Ramsey"},{"book_id":78433,"title":"The Blind Assassin","image_url":"https:\/\/images.gr-assets.com\/books\/1451445426m\/78433.jpg","authors":"Margaret Atwood"},{"book_id":78508,"title":"The River of Doubt: Theodore Roosevelt's Darkest Journey","image_url":"https:\/\/images.gr-assets.com\/books\/1430014768m\/78508.jpg","authors":"Candice Millard"},{"book_id":78629,"title":"Tortured for Christ N\/E","image_url":"https:\/\/images.gr-assets.com\/books\/1419182359m\/78629.jpg","authors":"Richard Wurmbrand"},{"book_id":78674,"title":"Out to Canaan (Mitford Years, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jan Karon"},{"book_id":78728,"title":"Ignorance","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Milan Kundera, Linda Asher"},{"book_id":78876,"title":"Maskerade (Discworld, #18; Witches #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Terry Pratchett"},{"book_id":78950,"title":"Little Men (Little Women, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Louisa May Alcott"},{"book_id":78960,"title":"Good Wives (Little Women, #1.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1282713827m\/78960.jpg","authors":"Louisa May Alcott"},{"book_id":78970,"title":"A Matter of Honor","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jeffrey Archer"},{"book_id":78971,"title":"False Impression","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jeffrey Archer"},{"book_id":78972,"title":"The Fourth Estate","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jeffrey Archer"},{"book_id":78976,"title":"A Twist in the Tale","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jeffrey Archer"},{"book_id":78982,"title":"Not a Penny More, Not a Penny Less","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jeffrey Archer"},{"book_id":78983,"title":"Kane and Abel (Kane and Abel, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jeffrey Archer"},{"book_id":78985,"title":"Sons of Fortune","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jeffrey Archer"},{"book_id":78987,"title":"The Prodigal Daughter (Kane & Abel, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jeffrey Archer"},{"book_id":78989,"title":"Shall We Tell the President? (Kane & Abel, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jeffrey Archer"},{"book_id":79006,"title":"Honor Among Thieves","image_url":"https:\/\/images.gr-assets.com\/books\/1316131242m\/79006.jpg","authors":"Jeffrey Archer"},{"book_id":79016,"title":"First Among Equals","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jeffrey Archer"},{"book_id":79121,"title":"The Happy Prince","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Oscar Wilde"},{"book_id":79257,"title":"Don't Panic: The Official Hitchhiker's Guide to the Galaxy Companion","image_url":"https:\/\/images.gr-assets.com\/books\/1328797053m\/79257.jpg","authors":"Neil Gaiman"},{"book_id":79378,"title":"Roses are Red (Alex Cross, #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Patterson"},{"book_id":79379,"title":"Violets Are Blue (Alex Cross, #7)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Patterson"},{"book_id":79421,"title":"The Heavenly Man: The Remarkable True Story of Chinese Christian Brother Yun","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Paul Hattaway, Brother Yun"},{"book_id":79422,"title":"Y: The Last Man, Vol. 8: Kimono Dragons (Y: The Last Man, #8)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Brian K. Vaughan, Pia Guerra, Goran Sud\u017euka, Jos\u00e9 Marz\u00e1n Jr."},{"book_id":79426,"title":"Y: The Last Man, Vol. 7: Paper Dolls (Y: The Last Man, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1311830366m\/79426.jpg","authors":"Brian K. Vaughan, Pia Guerra, Goran Sud\u017euka, Jos\u00e9 Marz\u00e1n Jr."},{"book_id":79428,"title":"The Abolition of Man","image_url":"https:\/\/images.gr-assets.com\/books\/1418843138m\/79428.jpg","authors":"C.S. Lewis"},{"book_id":79649,"title":"The Seagull","image_url":"https:\/\/images.gr-assets.com\/books\/1443340069m\/79649.jpg","authors":"Anton Chekhov, Michael Frayn"},{"book_id":79705,"title":"Apollyon (Left Behind, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tim LaHaye, Jerry B. Jenkins"},{"book_id":79790,"title":"Magical Thinking: True Stories","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Augusten Burroughs"},{"book_id":79834,"title":"Lust for Life","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Irving Stone"},{"book_id":79879,"title":"From Head to Toe","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Eric Carle"},{"book_id":79885,"title":"The Lincoln Lawyer (Mickey Haller, #1; Harry Bosch Universe, #16)","image_url":"https:\/\/images.gr-assets.com\/books\/1370140049m\/79885.jpg","authors":"Michael Connelly"},{"book_id":80176,"title":"Winesburg, Ohio","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sherwood Anderson"},{"book_id":80369,"title":"Discipline and Punish: The Birth of the Prison","image_url":"https:\/\/images.gr-assets.com\/books\/1400737037m\/80369.jpg","authors":"Michel Foucault, Alan Sheridan, Thomas Mathiesen, Walter Seitter, Drago Braco Rotar"},{"book_id":80449,"title":"On the Genealogy of Morals","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Friedrich Nietzsche, Douglas Smith"},{"book_id":80534,"title":"Me & Emma","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Elizabeth Flock"},{"book_id":80536,"title":"Little Earthquakes","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jennifer Weiner"},{"book_id":80566,"title":"Run","image_url":"https:\/\/images.gr-assets.com\/books\/1327362631m\/80566.jpg","authors":"Ann Patchett"},{"book_id":80568,"title":"Sam's Letters to Jennifer","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Patterson"},{"book_id":80570,"title":"Smashed: Story of a Drunken Girlhood","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Koren Zailckas"},{"book_id":80616,"title":"The Thin Man","image_url":"https:\/\/images.gr-assets.com\/books\/1321111302m\/80616.jpg","authors":"Dashiell Hammett"},{"book_id":80630,"title":"Turning Angel","image_url":"https:\/\/images.gr-assets.com\/books\/1327877096m\/80630.jpg","authors":"Greg Iles"},{"book_id":80631,"title":"Blood Memory","image_url":"https:\/\/images.gr-assets.com\/books\/1327877256m\/80631.jpg","authors":"Greg Iles"},{"book_id":80642,"title":"Garlic and Sapphires: The Secret Life of a Critic in Disguise","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ruth Reichl"},{"book_id":80660,"title":"We Need to Talk About Kevin","image_url":"https:\/\/images.gr-assets.com\/books\/1327865017m\/80660.jpg","authors":"Lionel Shriver"},{"book_id":80670,"title":"Otherwise Known as Sheila the Great (Fudge #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1416181295m\/80670.jpg","authors":"Judy Blume"},{"book_id":80672,"title":"Double Fudge (Fudge, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Judy Blume"},{"book_id":80674,"title":"Superfudge (Fudge, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Judy Blume"},{"book_id":80750,"title":"The Covenant (Abram's Daughters, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Beverly Lewis"},{"book_id":80834,"title":"Pyongyang: A Journey in North Korea","image_url":"https:\/\/images.gr-assets.com\/books\/1327884533m\/80834.jpg","authors":"Guy Delisle"},{"book_id":80890,"title":"Buddenbrooks: The Decline of a Family","image_url":"https:\/\/images.gr-assets.com\/books\/1337128414m\/80890.jpg","authors":"Thomas Mann, John E. Woods, T.J. Reed"},{"book_id":81176,"title":"Dude, Where's My Country?","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael Moore"},{"book_id":81227,"title":"Infidel","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ayaan Hirsi Ali"},{"book_id":81524,"title":"The Dark Hills Divide (The Land of Elyon, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1393452185m\/81524.jpg","authors":"Patrick Carman"},{"book_id":81779,"title":"The Symposium","image_url":"https:\/\/images.gr-assets.com\/books\/1359922039m\/81779.jpg","authors":"Plato, Christopher Gill"},{"book_id":81903,"title":"Curtain (Hercule Poirot, #39)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Agatha Christie"},{"book_id":81922,"title":"Rich Dad's Cashflow Quadrant: Rich Dad's Guide to Financial Freedom","image_url":"https:\/\/images.gr-assets.com\/books\/1483023081m\/81922.jpg","authors":"Robert T. Kiyosaki, Sharon L. Lechter"},{"book_id":81939,"title":"The Mastery of Love: A Practical Guide to the Art of Relationship --Toltec Wisdom Book","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Miguel Ruiz"},{"book_id":81948,"title":"The E-Myth Revisited: Why Most Small Businesses Don't Work and What to Do About It","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael E. Gerber"},{"book_id":81959,"title":"As a Man Thinketh","image_url":"https:\/\/images.gr-assets.com\/books\/1303439193m\/81959.jpg","authors":"James Allen"},{"book_id":81992,"title":"Singularity Sky (Eschaton, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1446324638m\/81992.jpg","authors":"Charles Stross"},{"book_id":82192,"title":"The Crystal Cave (Arthurian Saga, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mary Stewart"},{"book_id":82356,"title":"The Comedy of Errors","image_url":"https:\/\/images.gr-assets.com\/books\/1328543324m\/82356.jpg","authors":"William Shakespeare"},{"book_id":82397,"title":"Richard II","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"William Shakespeare, Roma Gill, Robert Jackson"},{"book_id":82434,"title":"Saving Francesca","image_url":"https:\/\/images.gr-assets.com\/books\/1327865374m\/82434.jpg","authors":"Melina Marchetta"},{"book_id":82436,"title":"Looking for Alibrandi","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Melina Marchetta"},{"book_id":82553,"title":"The Night Is for Hunting (Tomorrow, #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Marsden"},{"book_id":82747,"title":" Angels (Walsh Family, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1407711412m\/82747.jpg","authors":"Marian Keyes"},{"book_id":82748,"title":"Sushi for Beginners","image_url":"https:\/\/images.gr-assets.com\/books\/1407709390m\/82748.jpg","authors":"Marian Keyes"},{"book_id":82751,"title":"Chinese Cinderella: The True Story of an Unwanted Daughter","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Adeline Yen Mah"},{"book_id":82780,"title":"The Year of Secret Assignments (Ashbury\/Brookfield, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1388634474m\/82780.jpg","authors":"Jaclyn Moriarty"},{"book_id":82817,"title":"Zoya","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Danielle Steel"},{"book_id":82888,"title":"Dom Casmurro","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Machado de Assis"},{"book_id":82970,"title":"Lucky","image_url":"https:\/\/images.gr-assets.com\/books\/1327190847m\/82970.jpg","authors":"Alice Sebold"},{"book_id":82991,"title":"Silence of the Grave (Inspector Erlendur #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1316131788m\/82991.jpg","authors":"Arnaldur Indri\u00f0ason, Bernard Scudder"},{"book_id":83083,"title":"Birds of a Feather (Maisie Dobbs, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1386728383m\/83083.jpg","authors":"Jacqueline Winspear"},{"book_id":83143,"title":"Tatiana and Alexander (The Bronze Horseman, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1390089221m\/83143.jpg","authors":"Paullina Simons"},{"book_id":83144,"title":"The Bronze Horseman (The Bronze Horseman, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327921996m\/83144.jpg","authors":"Paullina Simons"},{"book_id":83346,"title":"Through the Looking-Glass, and What Alice Found There","image_url":"https:\/\/images.gr-assets.com\/books\/1359299332m\/83346.jpg","authors":"Lewis Carroll, John Tenniel, Peter Glassman"},{"book_id":83369,"title":"The Mysterious Benedict Society (The Mysterious Benedict Society, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1342715444m\/83369.jpg","authors":"Trenton Lee Stewart, Carson Ellis"},{"book_id":83539,"title":"Fantastic Voyage","image_url":"https:\/\/images.gr-assets.com\/books\/1320425345m\/83539.jpg","authors":"Isaac Asimov"},{"book_id":83674,"title":"The Bridges of Madison County","image_url":"https:\/\/images.gr-assets.com\/books\/1344267141m\/83674.jpg","authors":"Robert James Waller"},{"book_id":83763,"title":"Prey","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael Crichton"},{"book_id":84022,"title":"Welcome to the World, Baby Girl! (Elmwood Springs, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Fannie Flagg"},{"book_id":84052,"title":"Morning, Noon & Night","image_url":"https:\/\/images.gr-assets.com\/books\/1344267638m\/84052.jpg","authors":"Sidney Sheldon"},{"book_id":84054,"title":"The Stars Shine Down","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sidney Sheldon"},{"book_id":84119,"title":"The Horse and His Boy (Chronicles of Narnia, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1388210968m\/84119.jpg","authors":"C.S. Lewis"},{"book_id":84132,"title":"The Dream Hunter (Dark-Hunter #10, Dream-Hunter #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1437696622m\/84132.jpg","authors":"Sherrilyn Kenyon"},{"book_id":84133,"title":"Devil May Cry (Dark-Hunter, #11)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sherrilyn Kenyon"},{"book_id":84135,"title":"Sins of the Night (Dark-Hunter #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1317065358m\/84135.jpg","authors":"Sherrilyn Kenyon"},{"book_id":84136,"title":"Fantasy Lover (Dark-Hunterverse #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1348332807m\/84136.jpg","authors":"Sherrilyn Kenyon"},{"book_id":84139,"title":"Unleash the Night (Dark Hunter, #8; Were-Hunter, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1462051642m\/84139.jpg","authors":"Sherrilyn Kenyon"},{"book_id":84140,"title":"Night Embrace (Dark-Hunter #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1171050611m\/84140.jpg","authors":"Sherrilyn Kenyon"},{"book_id":84142,"title":"Kiss of the Night (Dark-Hunter, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1348682795m\/84142.jpg","authors":"Sherrilyn Kenyon"},{"book_id":84144,"title":"Seize the Night (Dark-Hunter #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1348418164m\/84144.jpg","authors":"Sherrilyn Kenyon"},{"book_id":84145,"title":"Dance with the Devil (Dark-Hunter #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1388703603m\/84145.jpg","authors":"Sherrilyn Kenyon"},{"book_id":84146,"title":"Dark Side of the Moon (Dark-Hunter #9, Were-Hunter #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sherrilyn Kenyon"},{"book_id":84151,"title":"Night Play (Dark-Hunter #5, Were-Hunter #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1316131575m\/84151.jpg","authors":"Sherrilyn Kenyon"},{"book_id":84351,"title":"The Secret History of the Pink Carnation (Pink Carnation, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lauren Willig"},{"book_id":84369,"title":"The Last Battle (Chronicles of Narnia, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1308814830m\/84369.jpg","authors":"C.S. Lewis"},{"book_id":84525,"title":"What Got You Here Won't Get You There: How Successful People Become Even More Successful","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Marshall Goldsmith, Mark Reiter"},{"book_id":84552,"title":"Priestess of Avalon (Avalon, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1274559433m\/84552.jpg","authors":"Marion Zimmer Bradley, Diana L. Paxson"},{"book_id":84699,"title":"Never Eat Alone: And Other Secrets to Success, One Relationship at a Time","image_url":"https:\/\/images.gr-assets.com\/books\/1320417949m\/84699.jpg","authors":"Keith Ferrazzi"},{"book_id":84736,"title":"Mary, Mary (Alex Cross, #11)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Patterson"},{"book_id":84777,"title":"City of Bones (Harry Bosch, #8; Harry Bosch Universe, #10)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael Connelly"},{"book_id":84785,"title":"The Overlook (Harry Bosch, #13; Harry Bosch Universe, #15)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael Connelly"},{"book_id":84786,"title":"Void Moon","image_url":"https:\/\/images.gr-assets.com\/books\/1344267460m\/84786.jpg","authors":"Michael Connelly"},{"book_id":84839,"title":"Gone (Quincy & Rainie, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lisa Gardner"},{"book_id":84842,"title":"Prior Bad Acts (Kovac and Liska, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tami Hoag"},{"book_id":84844,"title":"Guilty as Sin (Deer Lake, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1340516937m\/84844.jpg","authors":"Tami Hoag"},{"book_id":84847,"title":"Ashes to Ashes (Kovac and Liska, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tami Hoag"},{"book_id":84927,"title":"Amadeus","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Peter Shaffer"},{"book_id":84981,"title":"Tuck Everlasting","image_url":"https:\/\/images.gr-assets.com\/books\/1445184695m\/84981.jpg","authors":"Natalie Babbitt"},{"book_id":85301,"title":"Unaccustomed Earth","image_url":"https:\/\/images.gr-assets.com\/books\/1320398140m\/85301.jpg","authors":"Jhumpa Lahiri"},{"book_id":85306,"title":"Hour Game (Sean King & Michelle Maxwell, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Baldacci"},{"book_id":85310,"title":"Mortal Prey (Lucas Davenport, #13)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Sandford"},{"book_id":85321,"title":"The Tenth Justice","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Brad Meltzer"},{"book_id":85379,"title":"Cruel & Unusual (Kay Scarpetta, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1327865095m\/85379.jpg","authors":"Patricia Cornwell"},{"book_id":85386,"title":"Rabbit, Run (Rabbit Angstrom #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1333578676m\/85386.jpg","authors":"John Updike"},{"book_id":85391,"title":"Rabbit Is Rich (Rabbit Angstrom #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Updike"},{"book_id":85392,"title":"Term Limits","image_url":"https:\/\/images.gr-assets.com\/books\/1311847654m\/85392.jpg","authors":"Vince Flynn"},{"book_id":85418,"title":"Just One Look","image_url":"https:\/\/images.gr-assets.com\/books\/1309286625m\/85418.jpg","authors":"Harlan Coben"},{"book_id":85425,"title":"Final Jeopardy (Alexandra Cooper, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Linda Fairstein"},{"book_id":85431,"title":"Friday Night Lights: A Town, a Team, and a Dream","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"H.G. Bissinger"},{"book_id":85437,"title":"Coma","image_url":"https:\/\/images.gr-assets.com\/books\/1309286934m\/85437.jpg","authors":"Robin Cook"},{"book_id":85443,"title":"The Lords of Discipline","image_url":"https:\/\/images.gr-assets.com\/books\/1320483838m\/85443.jpg","authors":"Pat Conroy"},{"book_id":85448,"title":"The Great Santini","image_url":"https:\/\/images.gr-assets.com\/books\/1442599829m\/85448.jpg","authors":"Pat Conroy"},{"book_id":85459,"title":"Northern Lights","image_url":"https:\/\/images.gr-assets.com\/books\/1309209276m\/85459.jpg","authors":"Nora Roberts"},{"book_id":85491,"title":"The Villa","image_url":"https:\/\/images.gr-assets.com\/books\/1351343027m\/85491.jpg","authors":"Nora Roberts"},{"book_id":85622,"title":"Tales of a Female Nomad: Living at Large in the World","image_url":"https:\/\/images.gr-assets.com\/books\/1320531284m\/85622.jpg","authors":"Rita Golden Gelman"},{"book_id":85679,"title":"Mother Courage and Her Children","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bertolt Brecht, David Hare"},{"book_id":85733,"title":"Beach Road","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Patterson, Peter de Jonge"},{"book_id":85737,"title":"Treasure (Dirk Pitt, #9)","image_url":"https:\/\/images.gr-assets.com\/books\/1314486012m\/85737.jpg","authors":"Clive Cussler"},{"book_id":85957,"title":"Assassins (Left Behind, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1406512196m\/85957.jpg","authors":"Tim LaHaye, Jerry B. Jenkins"},{"book_id":85958,"title":"The Indwelling (Left Behind, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1406508233m\/85958.jpg","authors":"Tim LaHaye, Jerry B. Jenkins"},{"book_id":85987,"title":"Portrait in Sepia","image_url":"https:\/\/images.gr-assets.com\/books\/1379900929m\/85987.jpg","authors":"Isabel Allende, Margaret Sayers Peden"},{"book_id":85989,"title":"Princess on the Brink (The Princess Diaries, #8)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Meg Cabot"},{"book_id":85990,"title":"Princess Academy (Princess Academy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1349410861m\/85990.jpg","authors":"Shannon Hale"},{"book_id":85993,"title":"Party Princess (The Princess Diaries, #7)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Meg Cabot"},{"book_id":86147,"title":"Bright Lights, Big City","image_url":"https:\/\/images.gr-assets.com\/books\/1399647015m\/86147.jpg","authors":"Jay McInerney"},{"book_id":86172,"title":"A Man in Full","image_url":"https:\/\/images.gr-assets.com\/books\/1320472513m\/86172.jpg","authors":"Tom Wolfe"},{"book_id":86321,"title":"Black Rose (In the Garden, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1298119100m\/86321.jpg","authors":"Nora Roberts"},{"book_id":86424,"title":"Lifeguard","image_url":"https:\/\/images.gr-assets.com\/books\/1344264201m\/86424.jpg","authors":"James Patterson, Andrew Gross"},{"book_id":86524,"title":"The Path to Power (The Years of Lyndon Johnson, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert A. Caro"},{"book_id":86525,"title":"Master of the Senate (The Years of Lyndon Johnson, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert A. Caro"},{"book_id":86643,"title":"Mistress of the Art of Death (Mistress of the Art of Death, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1435958507m\/86643.jpg","authors":"Ariana Franklin"},{"book_id":86655,"title":"The Keep","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jennifer Egan"},{"book_id":86658,"title":"The Secret Agent","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Joseph Conrad"},{"book_id":86663,"title":"Ten Big Ones (Stephanie Plum, #10)","image_url":"https:\/\/images.gr-assets.com\/books\/1171076278m\/86663.jpg","authors":"Janet Evanovich"},{"book_id":86737,"title":"City of Masks (Stravaganza, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1294870497m\/86737.jpg","authors":"Mary Hoffman"},{"book_id":86856,"title":"A Cook's Tour: Global Adventures in Extreme Cuisines","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anthony Bourdain"},{"book_id":87220,"title":"Loser","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jerry Spinelli"},{"book_id":87264,"title":"Mem\u00f3rias P\u00f3stumas de Br\u00e1s Cubas","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Machado de Assis"},{"book_id":87280,"title":"Too Loud a Solitude","image_url":"https:\/\/images.gr-assets.com\/books\/1359996651m\/87280.jpg","authors":"Bohumil Hrabal"},{"book_id":87346,"title":"The Cherry Orchard","image_url":"https:\/\/images.gr-assets.com\/books\/1464433142m\/87346.jpg","authors":"Anton Chekhov, Tom Murphy"},{"book_id":87424,"title":"Tintin in the Land of the Soviets (Tintin #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327959256m\/87424.jpg","authors":"Herg\u00e9, Leslie Lonsdale-Cooper, Michael Turner"},{"book_id":87425,"title":"Tintin in Tibet (Tintin, #20)","image_url":"https:\/\/images.gr-assets.com\/books\/1327958643m\/87425.jpg","authors":"Herg\u00e9, Leslie Lonsdale-Cooper, Michael Turner"},{"book_id":87632,"title":"Ultramarathon Man: Confessions of an All-Night Runner","image_url":"https:\/\/images.gr-assets.com\/books\/1309199653m\/87632.jpg","authors":"Dean Karnazes"},{"book_id":87640,"title":"PostSecret: Extraordinary Confessions from Ordinary Lives (PostSecret)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Frank Warren"},{"book_id":87665,"title":"Orthodoxy","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"G.K. Chesterton"},{"book_id":87745,"title":"Wish You Well","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Baldacci"},{"book_id":88061,"title":"Dreams from My Father: A Story of Race and Inheritance","image_url":"https:\/\/images.gr-assets.com\/books\/1352340675m\/88061.jpg","authors":"Barack Obama"},{"book_id":88071,"title":"The Last Colony (Old Man's War #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Scalzi"},{"book_id":88072,"title":"Agent to the Stars","image_url":"https:\/\/images.gr-assets.com\/books\/1303914309m\/88072.jpg","authors":"John Scalzi"},{"book_id":88077,"title":"The Magic Mountain","image_url":"https:\/\/images.gr-assets.com\/books\/1403170928m\/88077.jpg","authors":"Thomas Mann, John E. Woods"},{"book_id":88442,"title":"Austerlitz","image_url":"https:\/\/images.gr-assets.com\/books\/1327920142m\/88442.jpg","authors":"W.G. Sebald, Anthea Bell"},{"book_id":88514,"title":"Platform","image_url":"https:\/\/images.gr-assets.com\/books\/1328330240m\/88514.jpg","authors":"Michel Houellebecq"},{"book_id":88815,"title":"The Reluctant Fundamentalist","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mohsin Hamid"},{"book_id":89160,"title":"Judgment in Death (In Death, #11)","image_url":"https:\/\/images.gr-assets.com\/books\/1390135645m\/89160.jpg","authors":"J.D. Robb, Nora Roberts"},{"book_id":89165,"title":"J is for Judgment (Kinsey Millhone, #10)","image_url":"https:\/\/images.gr-assets.com\/books\/1315138239m\/89165.jpg","authors":"Sue Grafton"},{"book_id":89184,"title":"Absolution Gap","image_url":"https:\/\/images.gr-assets.com\/books\/1309210984m\/89184.jpg","authors":"Alastair Reynolds"},{"book_id":89185,"title":"Chasm City","image_url":"https:\/\/images.gr-assets.com\/books\/1309203334m\/89185.jpg","authors":"Alastair Reynolds"},{"book_id":89186,"title":"Pushing Ice","image_url":"https:\/\/images.gr-assets.com\/books\/1309197028m\/89186.jpg","authors":"Alastair Reynolds"},{"book_id":89187,"title":"Revelation Space","image_url":"https:\/\/images.gr-assets.com\/books\/1405532042m\/89187.jpg","authors":"Alastair Reynolds"},{"book_id":89190,"title":"Redemption Ark","image_url":"https:\/\/images.gr-assets.com\/books\/1309206851m\/89190.jpg","authors":"Alastair Reynolds"},{"book_id":89195,"title":"The Prefect (Prefect Dreyfus Emergency, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327988786m\/89195.jpg","authors":"Alastair Reynolds"},{"book_id":89284,"title":"Assholes Finish First (Tucker Max, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tucker Max"},{"book_id":89369,"title":"The Te of Piglet","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Benjamin Hoff"},{"book_id":89370,"title":"Tao of Pooh and Te of Piglet Boxed Set","image_url":"https:\/\/images.gr-assets.com\/books\/1444316923m\/89370.jpg","authors":"Benjamin Hoff"},{"book_id":89375,"title":"90 Minutes in Heaven: A True Story of Death and Life","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Don Piper, Cecil Murphey"},{"book_id":89399,"title":"Fortune's Rocks","image_url":"https:\/\/images.gr-assets.com\/books\/1344271150m\/89399.jpg","authors":"Anita Shreve"},{"book_id":89551,"title":"Ramona and Her Mother (Ramona, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1445632007m\/89551.jpg","authors":"Beverly Cleary"},{"book_id":89656,"title":"C is for Corpse (Kinsey Millhone, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sue Grafton"},{"book_id":89691,"title":"The Dogs of Babel","image_url":"https:\/\/images.gr-assets.com\/books\/1344269639m\/89691.jpg","authors":"Carolyn Parkhurst"},{"book_id":89716,"title":"Al Capone Does My Shirts (Al Capone at Alcatraz, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1309198452m\/89716.jpg","authors":"Gennifer Choldenko"},{"book_id":89717,"title":"The Haunting of Hill House","image_url":"https:\/\/images.gr-assets.com\/books\/1327871336m\/89717.jpg","authors":"Shirley Jackson, Laura Miller"},{"book_id":89723,"title":"The Lottery and Other Stories","image_url":"https:\/\/images.gr-assets.com\/books\/1416448200m\/89723.jpg","authors":"Shirley Jackson"},{"book_id":89724,"title":"We Have Always Lived in the Castle","image_url":"https:\/\/images.gr-assets.com\/books\/1415357189m\/89724.jpg","authors":"Shirley Jackson, Jonathan Lethem"},{"book_id":89731,"title":"Kira-Kira","image_url":"https:\/\/images.gr-assets.com\/books\/1437825008m\/89731.jpg","authors":"Cynthia Kadohata"},{"book_id":89755,"title":"Tangerine","image_url":"https:\/\/images.gr-assets.com\/books\/1328875988m\/89755.jpg","authors":"Edward Bloor, Danny De Vito"},{"book_id":89763,"title":"Esperanza Rising","image_url":"https:\/\/images.gr-assets.com\/books\/1328869043m\/89763.jpg","authors":"Pam Mu\u00f1oz Ryan"},{"book_id":89788,"title":"The Lady and the Unicorn","image_url":"https:\/\/images.gr-assets.com\/books\/1311281285m\/89788.jpg","authors":"Tracy Chevalier"},{"book_id":89884,"title":"Eventide (Plainsong, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1320471712m\/89884.jpg","authors":"Kent Haruf"},{"book_id":89959,"title":"The Constitution of the United States of America","image_url":"https:\/\/images.gr-assets.com\/books\/1328756752m\/89959.jpg","authors":"Founding Fathers"},{"book_id":90072,"title":"Dr. Seuss's Green Eggs and Ham: For Soprano, Boy Soprano, and Orchestra","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert Kapilow, Dr. Seuss"},{"book_id":90078,"title":"An Essay Concerning Human Understanding","image_url":"https:\/\/images.gr-assets.com\/books\/1416179522m\/90078.jpg","authors":"John Locke"},{"book_id":90192,"title":"The House of the Seven Gables","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nathaniel Hawthorne, Robert S. Levine"},{"book_id":90420,"title":"Copper Sun","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sharon M. Draper"},{"book_id":90475,"title":"Teen Idol","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Meg Cabot"},{"book_id":91017,"title":"Rubicon: The Last Years of the Roman Republic","image_url":"https:\/\/images.gr-assets.com\/books\/1320470983m\/91017.jpg","authors":"Tom Holland"},{"book_id":91201,"title":"Doctors","image_url":"https:\/\/images.gr-assets.com\/books\/1383563051m\/91201.jpg","authors":"Erich Segal"},{"book_id":91203,"title":"Three Comrades","image_url":"https:\/\/images.gr-assets.com\/books\/1320543184m\/91203.jpg","authors":"Erich Maria Remarque"},{"book_id":91244,"title":"Beezus and Ramona (Ramona, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1408924681m\/91244.jpg","authors":"Beverly Cleary"},{"book_id":91247,"title":"Ramona and Her Father (Ramona, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1408925643m\/91247.jpg","authors":"Beverly Cleary, Alan Tiegreen"},{"book_id":91248,"title":"Ramona the Brave (Ramona, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1408925322m\/91248.jpg","authors":"Beverly Cleary, Alan Tiegreen"},{"book_id":91249,"title":"Ramona Forever (Ramona, #7)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Beverly Cleary"},{"book_id":91253,"title":"Ramona Quimby, Age 8 (Ramona, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1300270683m\/91253.jpg","authors":"Beverly Cleary"},{"book_id":91357,"title":"The Devil's Arithmetic","image_url":"https:\/\/images.gr-assets.com\/books\/1342046407m\/91357.jpg","authors":"Jane Yolen"},{"book_id":91439,"title":"The Beet Queen","image_url":"https:\/\/images.gr-assets.com\/books\/1358758806m\/91439.jpg","authors":"Louise Erdrich"},{"book_id":91440,"title":"Love Medicine","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Louise Erdrich"},{"book_id":91474,"title":"Proven Guilty (The Dresden Files, #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1345667469m\/91474.jpg","authors":"Jim Butcher"},{"book_id":91475,"title":"White Night (The Dresden Files, #9)","image_url":"https:\/\/images.gr-assets.com\/books\/1309552288m\/91475.jpg","authors":"Jim Butcher"},{"book_id":91476,"title":"Grave Peril (The Dresden Files, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1266470209m\/91476.jpg","authors":"Jim Butcher"},{"book_id":91477,"title":"Fool Moon (The Dresden Files, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1345556849m\/91477.jpg","authors":"Jim Butcher"},{"book_id":91478,"title":"Summer Knight (The Dresden Files, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1345557469m\/91478.jpg","authors":"Jim Butcher"},{"book_id":91479,"title":"Death Masks (The Dresden Files, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1345557713m\/91479.jpg","authors":"Jim Butcher"},{"book_id":91571,"title":"Measure for Measure","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"William Shakespeare, Barbara A. Mowat, Paul Werstine"},{"book_id":91582,"title":"Lady Susan","image_url":"https:\/\/images.gr-assets.com\/books\/1328864949m\/91582.jpg","authors":"Jane Austen, Robert William Chapman"},{"book_id":91661,"title":"The Beekeeper's Apprentice (Mary Russell, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Laurie R. King"},{"book_id":91714,"title":"Civil War: A Marvel Comics Event","image_url":"https:\/\/images.gr-assets.com\/books\/1345813608m\/91714.jpg","authors":"Mark Millar, Steve McNiven, Dexter Vines, Morry Hollowell"},{"book_id":91760,"title":"The Diary of Frida Kahlo: An Intimate Self-Portrait","image_url":"https:\/\/images.gr-assets.com\/books\/1407009131m\/91760.jpg","authors":"Frida Kahlo, Carlos Fuentes, Sarah M. Lowe"},{"book_id":91767,"title":"Frida: A Biography of Frida Kahlo","image_url":"https:\/\/images.gr-assets.com\/books\/1407108642m\/91767.jpg","authors":"Hayden Herrera"},{"book_id":91953,"title":"Leviathan","image_url":"https:\/\/images.gr-assets.com\/books\/1326788684m\/91953.jpg","authors":"Thomas Hobbes, C.B. Macpherson"},{"book_id":91981,"title":"The Dragonbone Chair (Memory, Sorrow, and Thorn, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1477417642m\/91981.jpg","authors":"Tad Williams"},{"book_id":91989,"title":"Black Powder War (Temeraire, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Naomi Novik"},{"book_id":92057,"title":"The Autobiography of Malcolm X","image_url":"https:\/\/images.gr-assets.com\/books\/1434682864m\/92057.jpg","authors":"Malcolm X, Alex Haley"},{"book_id":92121,"title":"Nine Princes in Amber (The Chronicles of Amber #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1416090973m\/92121.jpg","authors":"Roger Zelazny"},{"book_id":92143,"title":"Bone: The Complete Edition","image_url":"https:\/\/images.gr-assets.com\/books\/1483068004m\/92143.jpg","authors":"Jeff Smith"},{"book_id":92147,"title":"Map of Bones (Sigma Force, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Rollins"},{"book_id":92160,"title":"London","image_url":"https:\/\/images.gr-assets.com\/books\/1320450619m\/92160.jpg","authors":"Edward Rutherfurd"},{"book_id":92163,"title":"Sarum: The Novel of England","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Edward Rutherfurd"},{"book_id":92227,"title":"The Green Mile, Part 1: The Two Dead Girls","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Stephen King"},{"book_id":92250,"title":"Angels in America, Part One: Millennium Approaches","image_url":"https:\/\/images.gr-assets.com\/books\/1354209439m\/92250.jpg","authors":"Tony Kushner"},{"book_id":92254,"title":"Angels in America, Part Two: Perestroika","image_url":"https:\/\/images.gr-assets.com\/books\/1354209700m\/92254.jpg","authors":"Tony Kushner"},{"book_id":92303,"title":"The Importance of Being Earnest","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Oscar Wilde"},{"book_id":92307,"title":"Being and Time","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Martin Heidegger"},{"book_id":92308,"title":"The Importance of Being Earnest and Other Plays","image_url":"https:\/\/images.gr-assets.com\/books\/1260426623m\/92308.jpg","authors":"Oscar Wilde, Richard Allen Cave"},{"book_id":92364,"title":"Eye of the Needle","image_url":"https:\/\/images.gr-assets.com\/books\/1327939511m\/92364.jpg","authors":"Ken Follett"},{"book_id":92367,"title":"Whiteout","image_url":"https:\/\/images.gr-assets.com\/books\/1309209422m\/92367.jpg","authors":"Ken Follett"},{"book_id":92371,"title":"Lie Down with Lions","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ken Follett"},{"book_id":92373,"title":"The Third Twin","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ken Follett"},{"book_id":92375,"title":"Hornet Flight","image_url":"https:\/\/images.gr-assets.com\/books\/1309202400m\/92375.jpg","authors":"Ken Follett"},{"book_id":92508,"title":"The Bridge of San Luis Rey","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Thornton Wilder"},{"book_id":92517,"title":"The Glass Menagerie","image_url":"https:\/\/images.gr-assets.com\/books\/1391591003m\/92517.jpg","authors":"Tennessee Williams"},{"book_id":92780,"title":"Cold Comfort Farm","image_url":"https:\/\/images.gr-assets.com\/books\/1416161594m\/92780.jpg","authors":"Stella Gibbons, Lynne Truss, Roz Chast"},{"book_id":92845,"title":"The Black Unicorn (Magic Kingdom of Landover, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1460848089m\/92845.jpg","authors":"Terry Brooks"},{"book_id":92846,"title":"Antrax (Voyage of the Jerle Shannara, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Terry Brooks"},{"book_id":92855,"title":"First King of Shannara (The Original Shannara Trilogy, #0)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Terry Brooks"},{"book_id":92871,"title":"Brothers Majere (Dragonlance: Preludes, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1312057416m\/92871.jpg","authors":"Kevin Stein"},{"book_id":92918,"title":"Krondor: The Betrayal (The Riftwar Legacy, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Raymond E. Feist"},{"book_id":92956,"title":"The Memory of Earth (Homecoming, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Orson Scott Card"},{"book_id":93000,"title":"Piano\/Vocal\/Guitar Sheet Music: The Chronicles of Narnia: The Lion, the Witch and The Wardrobe","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Harry Gregson-Williams"},{"book_id":93007,"title":"The Merry Adventures of Robin Hood","image_url":"https:\/\/images.gr-assets.com\/books\/1389006722m\/93007.jpg","authors":"Howard Pyle"},{"book_id":93101,"title":"The Arabian Nights","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anonymous, Richard Francis Burton, A.S. Byatt"},{"book_id":93157,"title":"The Monk","image_url":"https:\/\/images.gr-assets.com\/books\/1365712491m\/93157.jpg","authors":"Matthew Lewis"},{"book_id":93261,"title":"The Legend of Sleepy Hollow","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Washington Irving"},{"book_id":93263,"title":"The Legend of Sleepy Hollow (Graphic Novel)","image_url":"https:\/\/images.gr-assets.com\/books\/1171253283m\/93263.jpg","authors":"Bo Hampton, Tracey Hampton, Washington Irving"},{"book_id":93269,"title":"Earth Abides","image_url":"https:\/\/images.gr-assets.com\/books\/1320505234m\/93269.jpg","authors":"George R. Stewart"},{"book_id":93276,"title":"King Arthur and His Knights: Selected Tales","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Thomas Malory, Eug\u00e8ne Vinaver"},{"book_id":93371,"title":"Akira, Vol. 1","image_url":"https:\/\/images.gr-assets.com\/books\/1343804802m\/93371.jpg","authors":"Katsuhiro Otomo, Yoko Umezawa, Linda M. York, Jo Duffy"},{"book_id":93426,"title":"Genghis Khan and the Making of the Modern World","image_url":"https:\/\/images.gr-assets.com\/books\/1320531289m\/93426.jpg","authors":"Jack Weatherford"},{"book_id":93436,"title":"The End of Mr. Y","image_url":"https:\/\/images.gr-assets.com\/books\/1389137862m\/93436.jpg","authors":"Scarlett Thomas"},{"book_id":93453,"title":"When Will Jesus Bring the Pork Chops?","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"George Carlin"},{"book_id":93575,"title":"Gaudy Night (Lord Peter Wimsey, #12)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dorothy L. Sayers"},{"book_id":93722,"title":"The Boy Next Door (Boy, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Meg Cabot"},{"book_id":93723,"title":"Boy Meets Girl (Boy, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1328033372m\/93723.jpg","authors":"Meg Cabot"},{"book_id":93724,"title":"Twilight (The Mediator, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1327959055m\/93724.jpg","authors":"Meg Cabot"},{"book_id":93726,"title":"Princess in Training (The Princess Diaries, #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Meg Cabot"},{"book_id":93728,"title":"Princess in Love (The Princess Diaries, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1271682172m\/93728.jpg","authors":"Meg Cabot"},{"book_id":93729,"title":"Princess in Waiting (The Princess Diaries, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1493531966m\/93729.jpg","authors":"Meg Cabot"},{"book_id":93731,"title":"Princess in Pink (The Princess Diaries, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Meg Cabot"},{"book_id":93768,"title":"War of the Twins (Dragonlance: Legends, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1390667903m\/93768.jpg","authors":"Margaret Weis, Tracy Hickman"},{"book_id":93788,"title":"Night Fall (John Corey, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nelson DeMille"},{"book_id":93793,"title":"The Messenger (Gabriel Allon, #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Daniel Silva"},{"book_id":93794,"title":"The Kill Artist (Gabriel Allon, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1391616227m\/93794.jpg","authors":"Daniel Silva"},{"book_id":93795,"title":"The English Assassin (Gabriel Allon, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Daniel Silva"},{"book_id":93796,"title":"The Secret Servant (Gabriel Allon, #7)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Daniel Silva"},{"book_id":93797,"title":"The Unlikely Spy","image_url":"https:\/\/images.gr-assets.com\/books\/1309203396m\/93797.jpg","authors":"Daniel Silva"},{"book_id":93799,"title":"Prince of Fire (Gabriel Allon, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Daniel Silva"},{"book_id":93801,"title":"The Confessor (Gabriel Allon, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1341575498m\/93801.jpg","authors":"Daniel Silva"},{"book_id":93802,"title":"A Death in Vienna (Gabriel Allon, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Daniel Silva"},{"book_id":93808,"title":"The Cold Moon (Lincoln Rhyme, #7)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jeffery Deaver"},{"book_id":93947,"title":"Simple Genius (Sean King & Michelle Maxwell, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Baldacci"},{"book_id":93981,"title":"The Interpretation of Dreams","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sigmund Freud"},{"book_id":94064,"title":"Rainbow Boys (Rainbow Trilogy, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Alex Sanchez"},{"book_id":94299,"title":"The Search (Eve Duncan, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Iris Johansen"},{"book_id":94319,"title":"Ark Angel (Alex Rider, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1311648941m\/94319.jpg","authors":"Anthony Horowitz"},{"book_id":94486,"title":"The Invention of Morel","image_url":"https:\/\/images.gr-assets.com\/books\/1327960951m\/94486.jpg","authors":"Adolfo Bioy Casares, Suzanne Jill Levine, Jorge Luis Borges, Ruth L.C. Simms, Norah Borges de Torre"},{"book_id":94510,"title":"100 Bullets, Vol. 1: First Shot, Last Call","image_url":"https:\/\/images.gr-assets.com\/books\/1327888942m\/94510.jpg","authors":"Brian Azzarello, Eduardo Risso"},{"book_id":94578,"title":"The Gay Science","image_url":"https:\/\/images.gr-assets.com\/books\/1374735026m\/94578.jpg","authors":"Friedrich Nietzsche, Walter Kaufmann"},{"book_id":94669,"title":"The Mistress of Spices","image_url":"https:\/\/images.gr-assets.com\/books\/1488839181m\/94669.jpg","authors":"Chitra Banerjee Divakaruni"},{"book_id":94672,"title":"Beneath a Marble Sky","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Shors"},{"book_id":94798,"title":"Halo: Ghosts of Onyx","image_url":"https:\/\/images.gr-assets.com\/books\/1317792529m\/94798.jpg","authors":"Eric S. Nylund"},{"book_id":94799,"title":"Ghost Soldiers: The Epic Account of World War II's Greatest Rescue Mission","image_url":"https:\/\/images.gr-assets.com\/books\/1320454587m\/94799.jpg","authors":"Hampton Sides"},{"book_id":94803,"title":"Frog and Toad Together (Frog and Toad, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Arnold Lobel"},{"book_id":94804,"title":"Days with Frog and Toad (Frog and Toad, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Arnold Lobel"},{"book_id":94807,"title":"The Frog and Toad Treasury: Frog and Toad are Friends\/Frog and Toad Together\/Frog and Toad All Year (Frog and Toad #1-3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Arnold Lobel"},{"book_id":94813,"title":"Dark Guardian (Dark, #9)","image_url":"https:\/\/images.gr-assets.com\/books\/1327896501m\/94813.jpg","authors":"Christine Feehan"},{"book_id":95144,"title":"In the Night Kitchen","image_url":"https:\/\/images.gr-assets.com\/books\/1327934189m\/95144.jpg","authors":"Maurice Sendak"},{"book_id":95186,"title":"The Inheritance of Loss","image_url":"https:\/\/images.gr-assets.com\/books\/1327909065m\/95186.jpg","authors":"Kiran Desai"},{"book_id":95395,"title":"Preacher, Volume 4: Ancient History","image_url":"https:\/\/images.gr-assets.com\/books\/1309916054m\/95395.jpg","authors":"Garth Ennis, Steve Dillon, Steve Pugh, Matt Hollingsworth, Carlos Ezquerra, Richard Case"},{"book_id":95406,"title":"Preacher, Volume 2: Until the End of the World","image_url":"https:\/\/images.gr-assets.com\/books\/1309914965m\/95406.jpg","authors":"Garth Ennis, Steve Dillon"},{"book_id":95420,"title":"Personal History","image_url":"https:\/\/images.gr-assets.com\/books\/1320504681m\/95420.jpg","authors":"Katharine Graham"},{"book_id":95431,"title":"Preacher, Volume 1: Gone to Texas","image_url":"https:\/\/images.gr-assets.com\/books\/1309914494m\/95431.jpg","authors":"Garth Ennis, Steve Dillon, Joe R. Lansdale"},{"book_id":95558,"title":"Solaris","image_url":"https:\/\/images.gr-assets.com\/books\/1498631519m\/95558.jpg","authors":"Stanis\u0142aw Lem"},{"book_id":95602,"title":"Mark of the Lion Trilogy","image_url":"https:\/\/images.gr-assets.com\/books\/1349032180m\/95602.jpg","authors":"Francine Rivers"},{"book_id":95607,"title":"Unveiled: Tamar (Lineage of Grace #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Francine Rivers"},{"book_id":95608,"title":"Leota's Garden","image_url":"https:\/\/images.gr-assets.com\/books\/1406507728m\/95608.jpg","authors":"Francine Rivers"},{"book_id":95617,"title":"A Voice in the Wind (Mark of the Lion, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1459567327m\/95617.jpg","authors":"Francine Rivers, Richard Ferrone"},{"book_id":95619,"title":"And the Shofar Blew","image_url":"https:\/\/images.gr-assets.com\/books\/1406507476m\/95619.jpg","authors":"Francine Rivers"},{"book_id":95621,"title":"As Sure as the Dawn (Mark of the Lion, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1490993178m\/95621.jpg","authors":"Francine Rivers"},{"book_id":95622,"title":"The Last Sin Eater","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Francine Rivers"},{"book_id":95643,"title":"The Places in Between","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rory Stewart"},{"book_id":95658,"title":"Best Friends for Never (The Clique, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1344263568m\/95658.jpg","authors":"Lisi Harrison"},{"book_id":95659,"title":"Invasion of the Boy Snatchers (The Clique, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lisi Harrison"},{"book_id":95660,"title":"The Pretty Committee Strikes Back (The Clique, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lisi Harrison"},{"book_id":95661,"title":"Revenge of the Wannabes (The Clique, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lisi Harrison"},{"book_id":95693,"title":"The Blue Castle ","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"L.M. Montgomery"},{"book_id":95707,"title":"Your Best Life Now: 7 Steps to Living at Your Full Potential","image_url":"https:\/\/images.gr-assets.com\/books\/1344265872m\/95707.jpg","authors":"Joel Osteen"},{"book_id":95708,"title":"The Now Habit: A Strategic Program for Overcoming Procrastination and Enjoying Guilt-Free Play","image_url":"https:\/\/images.gr-assets.com\/books\/1421795425m\/95708.jpg","authors":"Neil A. Fiore"},{"book_id":95747,"title":"The Miracle of Mindfulness: An Introduction to the Practice of Meditation","image_url":"https:\/\/images.gr-assets.com\/books\/1320448079m\/95747.jpg","authors":"Thich Nhat Hanh"},{"book_id":95784,"title":"The Rape of Nanking","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Iris Chang"},{"book_id":95819,"title":"The Poetry of Robert Frost (Collected Poems, Complete & Unabridged)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert Frost, Edward Connery Lathem"},{"book_id":95887,"title":"Eat That Frog!: 21 Great Ways to Stop Procrastinating and Get More Done in Less Time","image_url":"https:\/\/images.gr-assets.com\/books\/1328854785m\/95887.jpg","authors":"Brian Tracy"},{"book_id":96081,"title":"Sea Glass","image_url":"https:\/\/images.gr-assets.com\/books\/1422821164m\/96081.jpg","authors":"Anita Shreve"},{"book_id":96082,"title":"The Last Time They Met","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anita Shreve"},{"book_id":96123,"title":"All the President's Men","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Carl Bernstein, Bob Woodward"},{"book_id":96259,"title":"Crush","image_url":"https:\/\/images.gr-assets.com\/books\/1422764050m\/96259.jpg","authors":"Richard Siken"},{"book_id":96358,"title":"Batman: The Killing Joke","image_url":"https:\/\/images.gr-assets.com\/books\/1346331835m\/96358.jpg","authors":"Alan Moore, Brian Bolland, Tim Sale"},{"book_id":96463,"title":"The Chronicles of Pern: First Fall (Pern, #12)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anne McCaffrey"},{"book_id":96472,"title":"Sundiver (The Uplift Saga, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Brin"},{"book_id":96593,"title":"The Success Principles: How to Get from Where You Are to Where You Want to Be","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jack Canfield, Janet Switzer"},{"book_id":96594,"title":"Fearless (The Lost Fleet, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jack Campbell"},{"book_id":96642,"title":"Rocket Boys (Coalwood #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1320533768m\/96642.jpg","authors":"Homer Hickam"},{"book_id":96647,"title":"Scar Tissue","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anthony Kiedis, Larry Sloman"},{"book_id":96702,"title":"Broken for You","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Stephanie Kallos"},{"book_id":96884,"title":"The Happiness Hypothesis: Finding Modern Truth in Ancient Wisdom","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jonathan Haidt"},{"book_id":96977,"title":"Castle Roogna (Xanth, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Piers Anthony"},{"book_id":96980,"title":"Centaur Aisle (Xanth, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Piers Anthony"},{"book_id":97084,"title":"Apathy and Other Small Victories","image_url":"https:\/\/images.gr-assets.com\/books\/1311996129m\/97084.jpg","authors":"Paul Neilan"},{"book_id":97390,"title":"\u0413\u043e\u0440\u0435 \u043e\u0442 \u0443\u043c\u0430","image_url":"https:\/\/images.gr-assets.com\/books\/1342993233m\/97390.jpg","authors":"Aleksandr Griboyedov, \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440 \u0421\u0435\u0440\u0433\u0435\u0435\u0432\u0438\u0447 \u0413\u0440\u0438\u0431\u043e\u0435\u0434\u043e\u0432"},{"book_id":97408,"title":"Perfect","image_url":"https:\/\/images.gr-assets.com\/books\/1328750860m\/97408.jpg","authors":"Natasha Friend"},{"book_id":97632,"title":"The Debutante Divorcee","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Plum Sykes"},{"book_id":97782,"title":"Then We Came to the End","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Joshua Ferris"},{"book_id":97860,"title":"Tuesday","image_url":"https:\/\/images.gr-assets.com\/books\/1328870556m\/97860.jpg","authors":"David Wiesner"},{"book_id":97862,"title":"One Tuesday Morning (9\/11, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Karen Kingsbury"},{"book_id":97875,"title":"44 Scotland Street (44 Scotland Street, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1298439814m\/97875.jpg","authors":"Alexander McCall Smith"},{"book_id":97898,"title":"The Full Cupboard of Life (No. 1 Ladies' Detective Agency, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Alexander McCall Smith"},{"book_id":98048,"title":"The Passion of Artemisia","image_url":"https:\/\/images.gr-assets.com\/books\/1311648181m\/98048.jpg","authors":"Susan Vreeland"},{"book_id":98233,"title":"Founders at Work: Stories of Startups' Early Days","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jessica Livingston"},{"book_id":98250,"title":"Once a Runner","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John L. Parker Jr."},{"book_id":98405,"title":"Born in Shame (Born In Trilogy, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nora Roberts"},{"book_id":98413,"title":"Nana, Vol. 1 (Nana, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ai Yazawa"},{"book_id":98427,"title":"The General's Daughter","image_url":"https:\/\/images.gr-assets.com\/books\/1334443536m\/98427.jpg","authors":"Nelson DeMille"},{"book_id":98573,"title":"Harold and the Purple Crayon","image_url":"https:\/\/images.gr-assets.com\/books\/1327390957m\/98573.jpg","authors":"Crockett Johnson"},{"book_id":98685,"title":"Genius: The Life and Science of Richard Feynman","image_url":"https:\/\/images.gr-assets.com\/books\/1320409497m\/98685.jpg","authors":"James Gleick"},{"book_id":98687,"title":"Call Me by Your Name","image_url":"https:\/\/images.gr-assets.com\/books\/1283737003m\/98687.jpg","authors":"Andr\u00e9 Aciman"},{"book_id":98807,"title":"Subterranean","image_url":"https:\/\/images.gr-assets.com\/books\/1336889308m\/98807.jpg","authors":"James Rollins"},{"book_id":98920,"title":"The Bastard of Istanbul","image_url":"https:\/\/images.gr-assets.com\/books\/1309282092m\/98920.jpg","authors":"Elif Shafak"},{"book_id":99085,"title":"Lord Brocktree (Redwall, #13)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Brian Jacques"},{"book_id":99107,"title":"Winnie-the-Pooh (Winnie-the-Pooh, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"A.A. Milne, Ernest H. Shepard"},{"book_id":99110,"title":"The Complete Tales and Poems of Winnie-the-Pooh (Winnie-the-Pooh, #1-4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"A.A. Milne, Ernest H. Shepard"},{"book_id":99111,"title":"The World of Winnie-the-Pooh (Winnie-the-Pooh, #1-2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"A.A. Milne, Ernest H. Shepard"},{"book_id":99208,"title":"The Monkey Wrench Gang (Monkey Wrench Gang, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Edward Abbey"},{"book_id":99218,"title":"The Machine Crusade (Legends of Dune, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1412547890m\/99218.jpg","authors":"Brian Herbert, Kevin J. Anderson"},{"book_id":99219,"title":"The Butlerian Jihad (Legends of Dune, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Brian Herbert, Kevin J. Anderson"},{"book_id":99245,"title":"Nightfall","image_url":"https:\/\/images.gr-assets.com\/books\/1368557860m\/99245.jpg","authors":"Isaac Asimov, Robert Silverberg"},{"book_id":99296,"title":"Diary of a Worm","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Doreen Cronin, Harry Bliss"},{"book_id":99297,"title":"Mr. Darcy's Diary (Jane Austen Heroes, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Amanda Grange"},{"book_id":99298,"title":"The Harry Potter Collection 1-4 (Harry Potter, #1-4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"J.K. Rowling, Mary GrandPr\u00e9"},{"book_id":99300,"title":"The Yellow Wallpaper and Other Stories","image_url":"https:\/\/images.gr-assets.com\/books\/1327909237m\/99300.jpg","authors":"Charlotte Perkins Gilman"},{"book_id":99315,"title":"A Whole New Mind: Why Right-Brainers Will Rule the Future","image_url":"https:\/\/images.gr-assets.com\/books\/1309284710m\/99315.jpg","authors":"Daniel H. Pink"},{"book_id":99329,"title":"The History of Tom Jones, a Foundling","image_url":"https:\/\/images.gr-assets.com\/books\/1444450775m\/99329.jpg","authors":"Henry Fielding, Thomas Keymer, Alice Wakely"},{"book_id":99383,"title":"Blood Rites (The Dresden Files, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1345557965m\/99383.jpg","authors":"Jim Butcher"},{"book_id":99452,"title":"Ogre, Ogre (Xanth #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1350835009m\/99452.jpg","authors":"Piers Anthony"},{"book_id":99461,"title":"Split Infinity (Apprentice Adept #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Piers Anthony"},{"book_id":99561,"title":"Looking for Alaska","image_url":"https:\/\/images.gr-assets.com\/books\/1394798630m\/99561.jpg","authors":"John Green"},{"book_id":99610,"title":"The Best Laid Plans","image_url":"https:\/\/images.gr-assets.com\/books\/1353374848m\/99610.jpg","authors":"Sidney Sheldon"},{"book_id":99664,"title":"The Painted Veil","image_url":"https:\/\/images.gr-assets.com\/books\/1320421719m\/99664.jpg","authors":"W. Somerset Maugham"},{"book_id":99713,"title":"A Coney Island of the Mind","image_url":"https:\/\/images.gr-assets.com\/books\/1327958248m\/99713.jpg","authors":"Lawrence Ferlinghetti"},{"book_id":99894,"title":"The Boys from Brazil","image_url":"https:\/\/images.gr-assets.com\/books\/1328882615m\/99894.jpg","authors":"Ira Levin"},{"book_id":99944,"title":"The Bhagavad Gita","image_url":"https:\/\/images.gr-assets.com\/books\/1383059639m\/99944.jpg","authors":"Krishna-Dwaipayana Vyasa, Simon Brodbeck, Juan Mascar\u00f3"},{"book_id":99955,"title":"Common Sense, The Rights of Man and Other Essential Writings","image_url":"https:\/\/images.gr-assets.com\/books\/1309203355m\/99955.jpg","authors":"Thomas Paine, Sidney Hook, Jack Fruchtman Jr."},{"book_id":100247,"title":"Vagabonding: An Uncommon Guide to the Art of Long-Term World Travel","image_url":"https:\/\/images.gr-assets.com\/books\/1320532720m\/100247.jpg","authors":"Rolf Potts"},{"book_id":100322,"title":"Assata: An Autobiography","image_url":"https:\/\/images.gr-assets.com\/books\/1328857268m\/100322.jpg","authors":"Assata Shakur, Angela Y. Davis, Lennox S. Hinds"},{"book_id":100365,"title":"The Mote in God's Eye","image_url":"https:\/\/images.gr-assets.com\/books\/1399490037m\/100365.jpg","authors":"Larry Niven, Jerry Pournelle"},{"book_id":100464,"title":"Dragon Rider (Dragon Rider, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1328004947m\/100464.jpg","authors":"Cornelia Funke"},{"book_id":100476,"title":"The Sea of Trolls (Sea of Trolls, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nancy Farmer"},{"book_id":100915,"title":"The Lion, the Witch, and the Wardrobe (Chronicles of Narnia, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1353029077m\/100915.jpg","authors":"C.S. Lewis"},{"book_id":100924,"title":"Perelandra (Space Trilogy, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"C.S. Lewis"},{"book_id":100933,"title":"That Hideous Strength (Space Trilogy, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"C.S. Lewis"},{"book_id":101094,"title":"The Famished Road","image_url":"https:\/\/images.gr-assets.com\/books\/1344396715m\/101094.jpg","authors":"Ben Okri"},{"book_id":101249,"title":"I'm Just Here for the Food: Food + Heat = Cooking","image_url":"https:\/\/images.gr-assets.com\/books\/1473385712m\/101249.jpg","authors":"Alton Brown"},{"book_id":101255,"title":"On Food and Cooking: The Science and Lore of the Kitchen","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Harold McGee"},{"book_id":101299,"title":"The Reader","image_url":"https:\/\/images.gr-assets.com\/books\/1327936339m\/101299.jpg","authors":"Bernhard Schlink, Carol Brown Janeway"},{"book_id":101869,"title":"The Atrocity Archives (Laundry Files, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Charles Stross"},{"book_id":101911,"title":"Vinegar Hill","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"A. Manette Ansay"},{"book_id":102030,"title":"Musashi","image_url":"https:\/\/images.gr-assets.com\/books\/1327942522m\/102030.jpg","authors":"Eiji Yoshikawa, Charles Terry, Edwin O. Reischauer"},{"book_id":102324,"title":"Swamp Thing, Vol. 1: Saga of the Swamp Thing","image_url":"https:\/\/images.gr-assets.com\/books\/1393967527m\/102324.jpg","authors":"Alan Moore, Stephen R. Bissette, John Totleben, Rick Veitch, Ramsey Campbell"},{"book_id":102327,"title":"Armor","image_url":"https:\/\/images.gr-assets.com\/books\/1465894856m\/102327.jpg","authors":"John Steakley"},{"book_id":102439,"title":"Rainbows End","image_url":"https:\/\/images.gr-assets.com\/books\/1316729149m\/102439.jpg","authors":"Vernor Vinge"},{"book_id":102458,"title":"Hellboy, Vol. 1: Seed of Destruction (Hellboy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1486039246m\/102458.jpg","authors":"Mike Mignola, John Byrne"},{"book_id":102459,"title":"Hellboy, Vol. 2: Wake the Devil (Hellboy, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1486039250m\/102459.jpg","authors":"Mike Mignola"},{"book_id":102461,"title":"Hellboy, Vol. 3: The Chained Coffin and Others (Hellboy, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1486039255m\/102461.jpg","authors":"Mike Mignola"},{"book_id":102525,"title":"H is for Homicide (Kinsey Millhone, #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1315138195m\/102525.jpg","authors":"Sue Grafton"},{"book_id":102733,"title":"One Past Midnight: The Langoliers","image_url":"https:\/\/images.gr-assets.com\/books\/1429051428m\/102733.jpg","authors":"Stephen King, Willem Dafoe"},{"book_id":102857,"title":"Born in Death (In Death, #23)","image_url":"https:\/\/images.gr-assets.com\/books\/1298297096m\/102857.jpg","authors":"J.D. Robb, Susan Ericksen"},{"book_id":102868,"title":"A Study in Scarlet","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Arthur Conan Doyle"},{"book_id":102920,"title":"Understanding Comics: The Invisible Art","image_url":"https:\/\/images.gr-assets.com\/books\/1328408101m\/102920.jpg","authors":"Scott McCloud"},{"book_id":102953,"title":"Preacher, Volume 3: Proud Americans","image_url":"https:\/\/images.gr-assets.com\/books\/1309915653m\/102953.jpg","authors":"Garth Ennis, Steve Dillon, Penn Jillette"},{"book_id":102954,"title":"Preacher, Volume 7: Salvation","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Garth Ennis, Steve Dillon"},{"book_id":102955,"title":"Preacher, Volume 8: All Hell's a-Coming","image_url":"https:\/\/images.gr-assets.com\/books\/1309916812m\/102955.jpg","authors":"Garth Ennis, Steve Dillon, John McCrea"},{"book_id":102956,"title":"Preacher, Volume 5: Dixie Fried","image_url":"https:\/\/images.gr-assets.com\/books\/1309916427m\/102956.jpg","authors":"Garth Ennis, Steve Dillon"},{"book_id":102957,"title":"Preacher, Volume 6: War in the Sun","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Garth Ennis, Steve Dillon, Peter Snejbjerg"},{"book_id":102958,"title":"Preacher, Volume 9: Alamo","image_url":"https:\/\/images.gr-assets.com\/books\/1309916938m\/102958.jpg","authors":"Garth Ennis, Steve Dillon"},{"book_id":103035,"title":"Cabal","image_url":"https:\/\/images.gr-assets.com\/books\/1405259936m\/103035.jpg","authors":"Clive Barker"},{"book_id":103111,"title":"X-Men: The Dark Phoenix Saga","image_url":"https:\/\/images.gr-assets.com\/books\/1409504820m\/103111.jpg","authors":"Chris Claremont, John Byrne"},{"book_id":103159,"title":"The Forsyte Saga (The Forsyte Chronicles, #1-3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Galsworthy"},{"book_id":103342,"title":"Stolen Lives: Twenty Years in a Desert Jail","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Malika Oufkir, Mich\u00e8le Fitoussi"},{"book_id":103610,"title":"The Prayer of Jabez: Breaking Through to the Blessed Life","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bruce H. Wilkinson"},{"book_id":103815,"title":"Among the Enemy (Shadow Children, #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Margaret Peterson Haddix"},{"book_id":103902,"title":"Gustav Klimt: 1862-1918","image_url":"https:\/\/images.gr-assets.com\/books\/1393794080m\/103902.jpg","authors":"Gilles N\u00e9ret"},{"book_id":103983,"title":"Skeleton Key (Alex Rider, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1306076661m\/103983.jpg","authors":"Anthony Horowitz"},{"book_id":104086,"title":"The Summer Tree (The Fionavar Tapestry #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1412531529m\/104086.jpg","authors":"Guy Gavriel Kay"},{"book_id":104088,"title":"The Wandering Fire (The Fionavar Tapestry, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1389962006m\/104088.jpg","authors":"Guy Gavriel Kay"},{"book_id":104089,"title":"Tigana","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Guy Gavriel Kay"},{"book_id":104101,"title":"The Lions of Al-Rassan","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Guy Gavriel Kay"},{"book_id":104159,"title":"Twilight Watch (Watch #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1382426338m\/104159.jpg","authors":"Sergei Lukyanenko, Andrew Bromfield"},{"book_id":104160,"title":"Day Watch (Watch #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sergei Lukyanenko, Andrew Bromfield"},{"book_id":104189,"title":"Same Kind of Different as Me","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ron Hall, Denver Moore, Lynn Vincent"},{"book_id":104219,"title":"Low Country","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anne Rivers Siddons"},{"book_id":104378,"title":"Keeping the Moon","image_url":"https:\/\/images.gr-assets.com\/books\/1359205648m\/104378.jpg","authors":"Sarah Dessen"},{"book_id":104379,"title":"That Summer","image_url":"https:\/\/images.gr-assets.com\/books\/1309197116m\/104379.jpg","authors":"Sarah Dessen"},{"book_id":104734,"title":"The Vagina Monologues","image_url":"https:\/\/images.gr-assets.com\/books\/1327243997m\/104734.jpg","authors":"Eve Ensler, Gloria Steinem"},{"book_id":104737,"title":"A Monstrous Regiment of Women (Mary Russell, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1334169424m\/104737.jpg","authors":"Laurie R. King"},{"book_id":104837,"title":"Antony and Cleopatra","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"William Shakespeare, Cynthia Marshall, Barbara A. Mowat, Paul Werstine"},{"book_id":105189,"title":"The Story of a Shipwrecked Sailor","image_url":"https:\/\/images.gr-assets.com\/books\/1450711004m\/105189.jpg","authors":"Gabriel Garc\u00eda M\u00e1rquez, Randolph Hogan"},{"book_id":105548,"title":"The Foot Book: Dr. Seuss's Wacky Book of Opposites (Bright and Early Board Books)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dr. Seuss"},{"book_id":105549,"title":"The Sneetches and Other Stories","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dr. Seuss"},{"book_id":105551,"title":"Fox in Socks","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dr. Seuss"},{"book_id":105552,"title":"Mr. Brown Can Moo! Can You?","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dr. Seuss"},{"book_id":105574,"title":"Scandal in Spring (Wallflowers, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1452549904m\/105574.jpg","authors":"Lisa Kleypas"},{"book_id":105576,"title":"Five Point Someone","image_url":"https:\/\/images.gr-assets.com\/books\/1298571209m\/105576.jpg","authors":"Chetan Bhagat"},{"book_id":105578,"title":"One Night at the Call Center","image_url":"https:\/\/images.gr-assets.com\/books\/1320500924m\/105578.jpg","authors":"Chetan Bhagat"},{"book_id":105687,"title":"All Souls: A Family Story from Southie","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael Patrick MacDonald"},{"book_id":105703,"title":"Pride of Baghdad","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Brian K. Vaughan, Niko Henrichon"},{"book_id":105744,"title":"Meg (MEG, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1407870638m\/105744.jpg","authors":"Steve Alten"},{"book_id":105760,"title":"Zodiac","image_url":"https:\/\/images.gr-assets.com\/books\/1297734691m\/105760.jpg","authors":"Robert Graysmith"},{"book_id":105920,"title":"Ultimate Spider-Man, Volume 1: Power and Responsibility","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Brian Michael Bendis, Mark Bagley"},{"book_id":105973,"title":"House of M","image_url":"https:\/\/images.gr-assets.com\/books\/1409502209m\/105973.jpg","authors":"Brian Michael Bendis, Olivier Coipel, Tim Townsend, Rick Magyar, John Dell, Scott Hanna, Frank D'Armata, Chris Eliopoulos, James Taveras, Omar Otieku, Tom Valente, Esad Ribic"},{"book_id":105986,"title":"The Code of the Woosters (Jeeves, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1299729089m\/105986.jpg","authors":"P.G. Wodehouse"},{"book_id":105992,"title":"Helter Skelter: The True Story of the Manson Murders","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Vincent Bugliosi, Curt Gentry"},{"book_id":105999,"title":"Dear Mr. Henshaw (Leigh Botts, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Beverly Cleary, Paul O. Zelinsky"},{"book_id":106069,"title":"Batman: The Long Halloween","image_url":"https:\/\/images.gr-assets.com\/books\/1350137101m\/106069.jpg","authors":"Jeph Loeb, Tim Sale, Gregory Wright, Richard Starkings"},{"book_id":106076,"title":"Batman: Dark Victory","image_url":"https:\/\/images.gr-assets.com\/books\/1327940341m\/106076.jpg","authors":"Jeph Loeb, Tim Sale"},{"book_id":106085,"title":"Masquerade (Blue Bloods, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1322287499m\/106085.jpg","authors":"Melissa de la Cruz"},{"book_id":106124,"title":"The Dragonslayer (Bone, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1497684403m\/106124.jpg","authors":"Jeff Smith, Steve Hamaker"},{"book_id":106128,"title":"Break No Bones (Temperance Brennan, #9)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kathy Reichs"},{"book_id":106129,"title":"Charlie Bone and the Invisible Boy (The Children of the Red King, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1328867540m\/106129.jpg","authors":"Jenny Nimmo"},{"book_id":106131,"title":"Charlie Bone and the Castle of Mirrors (The Children of the Red King, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1290344623m\/106131.jpg","authors":"Jenny Nimmo"},{"book_id":106134,"title":"Out from Boneville (Bone, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327921261m\/106134.jpg","authors":"Jeff Smith, Steve Hamaker"},{"book_id":106264,"title":"Sarah, Plain and Tall (Sarah, Plain and Tall, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327254558m\/106264.jpg","authors":"Patricia MacLachlan"},{"book_id":106312,"title":"The Twelfth Card (Lincoln Rhyme, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1328407138m\/106312.jpg","authors":"Jeffery Deaver"},{"book_id":106393,"title":"The Coldest Winter Ever","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sister Souljah"},{"book_id":106590,"title":"Lincoln","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Herbert Donald"},{"book_id":106646,"title":"The Doomsday Conspiracy","image_url":"https:\/\/images.gr-assets.com\/books\/1408853925m\/106646.jpg","authors":"Sidney Sheldon"},{"book_id":106648,"title":"Memories of Midnight","image_url":"https:\/\/images.gr-assets.com\/books\/1501701194m\/106648.jpg","authors":"Sidney Sheldon"},{"book_id":106835,"title":"The Intelligent Investor (Collins Business Essentials)","image_url":"https:\/\/images.gr-assets.com\/books\/1409602421m\/106835.jpg","authors":"Benjamin Graham, Jason Zweig, Warren Buffett"},{"book_id":106859,"title":"Superman for All Seasons","image_url":"https:\/\/images.gr-assets.com\/books\/1343797123m\/106859.jpg","authors":"Jeph Loeb, Tim Sale, Bjarne Hansen"},{"book_id":106882,"title":"French Women Don't Get Fat: The Secret of Eating for Pleasure","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mireille Guiliano"},{"book_id":107007,"title":"The League of Extraordinary Gentlemen, Vol. 2","image_url":"https:\/\/images.gr-assets.com\/books\/1327904678m\/107007.jpg","authors":"Alan Moore, Kevin O'Neill"},{"book_id":107017,"title":"Batman: Hush, Vol. 1","image_url":"https:\/\/images.gr-assets.com\/books\/1460914534m\/107017.jpg","authors":"Jeph Loeb, Jim Lee, Scott Williams"},{"book_id":107021,"title":"Batman: Hush, Vol. 2","image_url":"https:\/\/images.gr-assets.com\/books\/1460914478m\/107021.jpg","authors":"Jeph Loeb, Jim Lee, Scott Williams"},{"book_id":107029,"title":"The Batman Chronicles, Vol. 1","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bill Finger, Gardner F. Fox, Bob Kane, Jerry Robinson, Sheldon Moldoff"},{"book_id":107032,"title":"Batman: A Death in the Family","image_url":"https:\/\/images.gr-assets.com\/books\/1327940363m\/107032.jpg","authors":"Jim Starlin, Jim Aparo, Mike DeCarlo"},{"book_id":107172,"title":"DC: The New Frontier, Volume 1","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Darwyn Cooke, Dave Stewart, Jared K. Fletcher"},{"book_id":107195,"title":"I Kissed Dating Goodbye","image_url":"https:\/\/images.gr-assets.com\/books\/1320506446m\/107195.jpg","authors":"Joshua Harris"},{"book_id":107291,"title":"Needful Things","image_url":"https:\/\/images.gr-assets.com\/books\/1315767817m\/107291.jpg","authors":"Stephen King"},{"book_id":107301,"title":"A Town Like Alice","image_url":"https:\/\/images.gr-assets.com\/books\/1327957610m\/107301.jpg","authors":"Nevil Shute"},{"book_id":107664,"title":"Raven's Gate (The Gatekeepers, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1328842690m\/107664.jpg","authors":"Anthony Horowitz"},{"book_id":107670,"title":"Evil Star (The Gatekeepers, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anthony Horowitz"},{"book_id":107770,"title":"The Secret (Highlands' Lairds #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1312123398m\/107770.jpg","authors":"Julie Garwood"},{"book_id":107772,"title":"The Prize","image_url":"https:\/\/images.gr-assets.com\/books\/1304789713m\/107772.jpg","authors":"Julie Garwood"},{"book_id":107773,"title":"Mercy (Buchanan-Renard, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Julie Garwood"},{"book_id":107774,"title":"Honor's Splendour","image_url":"https:\/\/images.gr-assets.com\/books\/1313525352m\/107774.jpg","authors":"Julie Garwood"},{"book_id":107776,"title":"Ransom (Highlands' Lairds, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Julie Garwood"},{"book_id":107778,"title":"The Wedding (Lairds' Fianc\u00e9es, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1295998049m\/107778.jpg","authors":"Julie Garwood"},{"book_id":107779,"title":"The Bride (Lairds' Fianc\u00e9es, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1334369134m\/107779.jpg","authors":"Julie Garwood"},{"book_id":107781,"title":"The Gift (Crown's Spies, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1329160736m\/107781.jpg","authors":"Julie Garwood"},{"book_id":107783,"title":"The Lion's Lady (Crown's Spies, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1348750925m\/107783.jpg","authors":"Julie Garwood"},{"book_id":107789,"title":"Heartbreaker (Buchanan-Renard, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Julie Garwood"},{"book_id":107821,"title":"Bridge of Sighs","image_url":"https:\/\/images.gr-assets.com\/books\/1320397300m\/107821.jpg","authors":"Richard Russo"},{"book_id":107896,"title":"Starter for Ten","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Nicholls"},{"book_id":108077,"title":"The Watsons Go to Birmingham - 1963","image_url":"https:\/\/images.gr-assets.com\/books\/1320496341m\/108077.jpg","authors":"Christopher Paul Curtis"},{"book_id":108229,"title":"The Perfect Storm: A True Story of Men Against the Sea","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sebastian Junger"},{"book_id":108385,"title":"Dark Gold (Dark, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Christine Feehan"},{"book_id":108942,"title":"Bad Luck and Trouble (Jack Reacher, #11)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lee Child"},{"book_id":109367,"title":"Survivor In Death (In Death, #20)","image_url":"https:\/\/images.gr-assets.com\/books\/1298296888m\/109367.jpg","authors":"J.D. Robb"},{"book_id":109499,"title":"Lies Women Believe: And the Truth that Sets Them Free","image_url":"https:\/\/images.gr-assets.com\/books\/1328823111m\/109499.jpg","authors":"Nancy Leigh DeMoss, Elisabeth Elliot"},{"book_id":109509,"title":"The Afghan","image_url":"https:\/\/images.gr-assets.com\/books\/1309198395m\/109509.jpg","authors":"Frederick Forsyth"},{"book_id":109510,"title":"The Negotiator","image_url":"https:\/\/images.gr-assets.com\/books\/1320493289m\/109510.jpg","authors":"Frederick Forsyth"},{"book_id":109515,"title":"How I Raised Myself from Failure to Success in Selling","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Frank Bettger"},{"book_id":109520,"title":"I Am Not Myself These Days","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Josh Kilmer-Purcell"},{"book_id":109901,"title":"The Cold Dish (Walt Longmire, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1398028367m\/109901.jpg","authors":"Craig Johnson"},{"book_id":110090,"title":"True History of the Kelly Gang","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Peter Carey"},{"book_id":110331,"title":"The Federalist Papers","image_url":"https:\/\/images.gr-assets.com\/books\/1327865541m\/110331.jpg","authors":"Alexander Hamilton, James Madison, John Jay, Philo-Publius, Clinton Rossiter, Charles R. Kessler"},{"book_id":110384,"title":"Romancing Mister Bridgerton (Bridgertons, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1274211494m\/110384.jpg","authors":"Julia Quinn"},{"book_id":110385,"title":"An Offer From a Gentleman (Bridgertons, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1306208628m\/110385.jpg","authors":"Julia Quinn"},{"book_id":110386,"title":"To Sir Phillip, With Love (Bridgertons, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1274211519m\/110386.jpg","authors":"Julia Quinn"},{"book_id":110387,"title":"The Secret Diaries of Miss Miranda Cheever (Bevelstoke, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1274212433m\/110387.jpg","authors":"Julia Quinn"},{"book_id":110388,"title":"On the Way to the Wedding (Bridgertons, #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1368840197m\/110388.jpg","authors":"Julia Quinn"},{"book_id":110391,"title":"The Duke and I (Bridgertons, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1379594717m\/110391.jpg","authors":"Julia Quinn"},{"book_id":110393,"title":"It's in His Kiss (Bridgertons, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1314461965m\/110393.jpg","authors":"Julia Quinn"},{"book_id":110396,"title":"When He was Wicked (Bridgertons, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1274212205m\/110396.jpg","authors":"Julia Quinn"},{"book_id":110444,"title":"The Lake House (When the Wind Blows, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Patterson"},{"book_id":110494,"title":"Living Dead in Dallas (Sookie Stackhouse, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1329501808m\/110494.jpg","authors":"Charlaine Harris"},{"book_id":110692,"title":"The Redemption of Althalus","image_url":"https:\/\/images.gr-assets.com\/books\/1403185455m\/110692.jpg","authors":"David Eddings, Leigh Eddings"},{"book_id":110694,"title":"The Seeress of Kell (The Malloreon, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Eddings"},{"book_id":110737,"title":"Seabiscuit: An American Legend","image_url":"https:\/\/images.gr-assets.com\/books\/1171644213m\/110737.jpg","authors":"Laura Hillenbrand"},{"book_id":110763,"title":"The Gnostic Gospels","image_url":"https:\/\/images.gr-assets.com\/books\/1403187711m\/110763.jpg","authors":"Elaine Pagels"},{"book_id":110871,"title":"Th\u00e9r\u00e8se Raquin","image_url":"https:\/\/images.gr-assets.com\/books\/1282318692m\/110871.jpg","authors":"\u00c9mile Zola, Robin Buss"},{"book_id":110890,"title":"The Looming Tower: Al-Qaeda and the Road to 9\/11","image_url":"https:\/\/images.gr-assets.com\/books\/1320471617m\/110890.jpg","authors":"Lawrence Wright"},{"book_id":111021,"title":"Dawn (Warriors: The New Prophecy, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Erin Hunter"},{"book_id":111023,"title":"Passage to Dawn (Forgotten Realms: Legacy of the Drow, #4; Legend of Drizzt, #10)","image_url":"https:\/\/images.gr-assets.com\/books\/1312023199m\/111023.jpg","authors":"R.A. Salvatore"},{"book_id":111126,"title":"Hateship, Friendship, Courtship, Loveship, Marriage: Stories","image_url":"https:\/\/images.gr-assets.com\/books\/1494106094m\/111126.jpg","authors":"Alice Munro"},{"book_id":111180,"title":"Perfect Match","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jodi Picoult"},{"book_id":111218,"title":"Innocent Traitor","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Alison Weir"},{"book_id":111220,"title":"Eleanor of Aquitaine: A Life ","image_url":"https:\/\/images.gr-assets.com\/books\/1320538974m\/111220.jpg","authors":"Alison Weir"},{"book_id":111222,"title":"The Life of Elizabeth I","image_url":"https:\/\/images.gr-assets.com\/books\/1320433923m\/111222.jpg","authors":"Alison Weir"},{"book_id":111306,"title":"Jacob (Nightwalkers, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jacquelyn Frank"},{"book_id":111332,"title":"Into the Wild (Warriors, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Erin Hunter"},{"book_id":111450,"title":"Quidditch Through the Ages","image_url":"https:\/\/images.gr-assets.com\/books\/1369689506m\/111450.jpg","authors":"Kennilworthy Whisp, J.K. Rowling"},{"book_id":112200,"title":"Selected Poems","image_url":"https:\/\/images.gr-assets.com\/books\/1260829838m\/112200.jpg","authors":"Emily Dickinson"},{"book_id":112204,"title":"The Complete Poems of Emily Dickinson","image_url":"https:\/\/images.gr-assets.com\/books\/1498347611m\/112204.jpg","authors":"Emily Dickinson, Thomas H. Johnson"},{"book_id":112292,"title":"Dauntless (The Lost Fleet, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1309198180m\/112292.jpg","authors":"Jack Campbell"},{"book_id":112322,"title":"Saint Maybe","image_url":"https:\/\/images.gr-assets.com\/books\/1453274893m\/112322.jpg","authors":"Anne Tyler"},{"book_id":112517,"title":"Rama Revealed (Rama, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1375814909m\/112517.jpg","authors":"Arthur C. Clarke, Gentry Lee"},{"book_id":112518,"title":"The Garden of Rama (Rama, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1375814957m\/112518.jpg","authors":"Arthur C. Clarke, Gentry Lee"},{"book_id":112520,"title":"Rama II (Rama, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1375814981m\/112520.jpg","authors":"Arthur C. Clarke, Gentry Lee"},{"book_id":112525,"title":"Winter's Bone","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Daniel Woodrell"},{"book_id":112537,"title":"Rendezvous with Rama (Rama, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1405456427m\/112537.jpg","authors":"Arthur C. Clarke"},{"book_id":112675,"title":"Knocked Out by My Nunga-Nungas (Confessions of Georgia Nicolson, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Louise Rennison"},{"book_id":112693,"title":"Then He Ate My Boy Entrancers (Confessions of Georgia Nicolson, #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Louise Rennison"},{"book_id":112750,"title":"Darkfever (Fever, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1392579949m\/112750.jpg","authors":"Karen Marie Moning"},{"book_id":112751,"title":"Spell of the Highlander (Highlander, #7)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Karen Marie Moning"},{"book_id":112752,"title":"The Immortal Highlander (Highlander, #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Karen Marie Moning"},{"book_id":112754,"title":"Kiss of the Highlander (Highlander, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1400966202m\/112754.jpg","authors":"Karen Marie Moning"},{"book_id":112755,"title":"The Dark Highlander (Highlander, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Karen Marie Moning"},{"book_id":112756,"title":"To Tame a Highland Warrior (Highlander, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Karen Marie Moning"},{"book_id":112803,"title":"The Story of My Experiments With Truth","image_url":"https:\/\/images.gr-assets.com\/books\/1320560971m\/112803.jpg","authors":"Mahatma Gandhi"},{"book_id":112872,"title":"A Light in the Window (Mitford Years, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jan Karon"},{"book_id":112874,"title":"These High, Green Hills (Mitford Years, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jan Karon"},{"book_id":112879,"title":"Once Upon a Crime (The Sisters Grimm, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1349015477m\/112879.jpg","authors":"Michael Buckley, Peter Ferguson"},{"book_id":113091,"title":"A Death in the Family","image_url":"https:\/\/images.gr-assets.com\/books\/1327885315m\/113091.jpg","authors":"James Agee"},{"book_id":113138,"title":"The Winner","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Baldacci"},{"book_id":113205,"title":"Heart of a Dog","image_url":"https:\/\/images.gr-assets.com\/books\/1457906509m\/113205.jpg","authors":"Mikhail Bulgakov, Mirra Ginsburg, Mikhail Bulgakov"},{"book_id":113304,"title":"The Thief Lord","image_url":"https:\/\/images.gr-assets.com\/books\/1327960342m\/113304.jpg","authors":"Cornelia Funke"},{"book_id":113310,"title":"The Eight (The Eight #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Katherine Neville"},{"book_id":113429,"title":"No One Belongs Here More Than You","image_url":"https:\/\/images.gr-assets.com\/books\/1341079226m\/113429.jpg","authors":"Miranda July"},{"book_id":113435,"title":"Crossroads of Twilight (Wheel of Time, #10)","image_url":"https:\/\/images.gr-assets.com\/books\/1408325146m\/113435.jpg","authors":"Robert Jordan"},{"book_id":113436,"title":"Eragon (The Inheritance Cycle, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1366212852m\/113436.jpg","authors":"Christopher Paolini"},{"book_id":113441,"title":"The Day of the Locust","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nathanael West, Alfred Kazin"},{"book_id":113576,"title":"The Smartest Guys in the Room: The Amazing Rise and Scandalous Fall of Enron","image_url":"https:\/\/images.gr-assets.com\/books\/1309204701m\/113576.jpg","authors":"Bethany McLean, Peter Elkind"},{"book_id":113934,"title":"The Goal: A Process of Ongoing Improvement","image_url":"https:\/\/images.gr-assets.com\/books\/1475538019m\/113934.jpg","authors":"Eliyahu M. Goldratt, Jeff Cox"},{"book_id":113946,"title":"How the Grinch Stole Christmas!","image_url":"https:\/\/images.gr-assets.com\/books\/1327958149m\/113946.jpg","authors":"Dr. Seuss"},{"book_id":114128,"title":"Hidden Riches","image_url":"https:\/\/images.gr-assets.com\/books\/1309207156m\/114128.jpg","authors":"Nora Roberts"},{"book_id":114129,"title":"Born in Ice (Born In Trilogy, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1388252955m\/114129.jpg","authors":"Nora Roberts"},{"book_id":114132,"title":"Midnight Bayou","image_url":"https:\/\/images.gr-assets.com\/books\/1309200744m\/114132.jpg","authors":"Nora Roberts"},{"book_id":114133,"title":"High Noon","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nora Roberts"},{"book_id":114141,"title":"Sanctuary","image_url":"https:\/\/images.gr-assets.com\/books\/1351342765m\/114141.jpg","authors":"Nora Roberts"},{"book_id":114143,"title":"The Reef","image_url":"https:\/\/images.gr-assets.com\/books\/1309201310m\/114143.jpg","authors":"Nora Roberts"},{"book_id":114144,"title":"Montana Sky","image_url":"https:\/\/images.gr-assets.com\/books\/1309197209m\/114144.jpg","authors":"Nora Roberts"},{"book_id":114145,"title":"Born in Fire (Born In Trilogy, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nora Roberts"},{"book_id":114152,"title":"Finding the Dream (Dream Trilogy #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nora Roberts"},{"book_id":114159,"title":"Blue Dahlia (In the Garden, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nora Roberts"},{"book_id":114162,"title":"Secrets of a Summer Night (Wallflowers, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lisa Kleypas"},{"book_id":114166,"title":"Devil in Winter (Wallflowers, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1309220205m\/114166.jpg","authors":"Lisa Kleypas"},{"book_id":114170,"title":"Then Came You (The Gamblers, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1417410330m\/114170.jpg","authors":"Lisa Kleypas"},{"book_id":114184,"title":"Blue Smoke","image_url":"https:\/\/images.gr-assets.com\/books\/1309286007m\/114184.jpg","authors":"Nora Roberts"},{"book_id":114187,"title":"Chesapeake Blue (Chesapeake Bay Saga, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1304979355m\/114187.jpg","authors":"Nora Roberts"},{"book_id":114188,"title":"Holding the Dream (Dream Trilogy #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nora Roberts"},{"book_id":114203,"title":"Birthright","image_url":"https:\/\/images.gr-assets.com\/books\/1309282307m\/114203.jpg","authors":"Nora Roberts"},{"book_id":114206,"title":"Key of Valor (Key Trilogy, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nora Roberts"},{"book_id":114230,"title":"Bartleby the Scrivener","image_url":"https:\/\/images.gr-assets.com\/books\/1320404048m\/114230.jpg","authors":"Herman Melville"},{"book_id":114308,"title":"Swimmy","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Leo Lionni"},{"book_id":114345,"title":"The Little House Collection (Little House, #1-9)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Laura Ingalls Wilder, Garth Williams"},{"book_id":114683,"title":"Wall and Piece","image_url":"https:\/\/images.gr-assets.com\/books\/1327904853m\/114683.jpg","authors":"Banksy"},{"book_id":114701,"title":"Into the Land of the Unicorns (Unicorn Chronicles, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bruce Coville"},{"book_id":114954,"title":"The Opal Deception (Artemis Fowl, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Eoin Colfer"},{"book_id":114955,"title":"The Arctic Incident (Artemis Fowl, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Eoin Colfer"},{"book_id":114982,"title":"The Ruby in the Smoke (Sally Lockhart, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Philip Pullman"},{"book_id":115076,"title":"Love Walked In","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Marisa de los Santos"},{"book_id":115130,"title":"A Stranger In The Mirror","image_url":"https:\/\/images.gr-assets.com\/books\/1418330902m\/115130.jpg","authors":"Sidney Sheldon"},{"book_id":115476,"title":"Nostromo","image_url":"https:\/\/images.gr-assets.com\/books\/1328865264m\/115476.jpg","authors":"Joseph Conrad"},{"book_id":116012,"title":"Carolina Moon","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nora Roberts"},{"book_id":116020,"title":"Walden & Civil Disobedience","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Henry David Thoreau, W.S. Merwin"},{"book_id":116053,"title":"September","image_url":"https:\/\/images.gr-assets.com\/books\/1420776195m\/116053.jpg","authors":"Rosamunde Pilcher"},{"book_id":116054,"title":"Winter Solstice","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rosamunde Pilcher"},{"book_id":116114,"title":"From Here to Eternity","image_url":"https:\/\/images.gr-assets.com\/books\/1330924946m\/116114.jpg","authors":"James Jones"},{"book_id":116236,"title":"The Education of Little Tree","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Forrest Carter"},{"book_id":116257,"title":"The System of the World (The Baroque Cycle, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1407712273m\/116257.jpg","authors":"Neal Stephenson"},{"book_id":116295,"title":"Guards! Guards!: The Play","image_url":"https:\/\/images.gr-assets.com\/books\/1353573648m\/116295.jpg","authors":"Stephen Briggs, Terry Pratchett"},{"book_id":116296,"title":"Making Money (Discworld, #36; Moist Von Lipwig, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Terry Pratchett"},{"book_id":116343,"title":"The Hollow Hills (Arthurian Saga, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mary Stewart"},{"book_id":116356,"title":"Footfall","image_url":"https:\/\/images.gr-assets.com\/books\/1320440216m\/116356.jpg","authors":"Larry Niven, Jerry Pournelle"},{"book_id":116445,"title":"Dies the Fire (Emberverse, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1414175443m\/116445.jpg","authors":"S.M. Stirling"},{"book_id":116494,"title":"Anastasia Krupnik (Anastasia Krupnik, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1476942137m\/116494.jpg","authors":"Lois Lowry"},{"book_id":116563,"title":"So You Want to Be a Wizard (Young Wizards, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1328877065m\/116563.jpg","authors":"Diane Duane"},{"book_id":116982,"title":"The Hand of Oberon (The Chronicles of Amber #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1417644788m\/116982.jpg","authors":"Roger Zelazny"},{"book_id":117047,"title":"The Blind Watchmaker: Why the Evidence of Evolution Reveals a Universe Without Design","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Richard Dawkins"},{"book_id":117251,"title":"Hamlet: Screenplay, Introduction And Film Diary","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kenneth Branagh, William Shakespeare"},{"book_id":117833,"title":"The Master and Margarita","image_url":"https:\/\/images.gr-assets.com\/books\/1327867963m\/117833.jpg","authors":"Mikhail Bulgakov, Katherine Tiernan O'Connor, Diana Burgin, Ellendea Proffer"},{"book_id":117835,"title":"Nourishing Traditions: The Cookbook That Challenges Politically Correct Nutrition and the Diet Dictocrats","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sally Fallon Morell"},{"book_id":118389,"title":"The Love Song of J. Alfred Prufrock and Other Poems","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"T.S. Eliot"},{"book_id":118944,"title":"American Born Chinese","image_url":"https:\/\/images.gr-assets.com\/books\/1317066615m\/118944.jpg","authors":"Gene Luen Yang"},{"book_id":119073,"title":"The Name of the Rose","image_url":"https:\/\/images.gr-assets.com\/books\/1415375471m\/119073.jpg","authors":"Umberto Eco, William Weaver, Se\u00e1n Barrett"},{"book_id":119091,"title":"Taltos (Lives of the Mayfair Witches, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anne Rice, Tim Curry"},{"book_id":119239,"title":"Selected Poems","image_url":"https:\/\/images.gr-assets.com\/books\/1411634706m\/119239.jpg","authors":"George Gordon Byron, Peter J. Manning, Susan J. Wolfson"},{"book_id":119247,"title":"The Great Brain (Great Brain #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1311781413m\/119247.jpg","authors":"John D. Fitzgerald, Mercer Mayer"},{"book_id":119322,"title":"The Golden Compass (His Dark Materials, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1451271747m\/119322.jpg","authors":"Philip Pullman"},{"book_id":119324,"title":"The Subtle Knife (His Dark Materials, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1451271814m\/119324.jpg","authors":"Philip Pullman"},{"book_id":119382,"title":"The Sands of Time","image_url":"https:\/\/images.gr-assets.com\/books\/1356453253m\/119382.jpg","authors":"Sidney Sheldon"},{"book_id":119389,"title":"Windmills of the Gods","image_url":"https:\/\/images.gr-assets.com\/books\/1405239745m\/119389.jpg","authors":"Sidney Sheldon"},{"book_id":119760,"title":"The Seat of the Soul","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Gary Zukav"},{"book_id":119829,"title":"The Sunne in Splendour","image_url":"https:\/\/images.gr-assets.com\/books\/1361649213m\/119829.jpg","authors":"Sharon Kay Penman"},{"book_id":119838,"title":"Tears of a Tiger (Hazelwood High, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1348102787m\/119838.jpg","authors":"Sharon M. Draper"},{"book_id":120230,"title":"Barefoot Contessa at Home: Everyday Recipes You'll Make Over and Over Again","image_url":"https:\/\/images.gr-assets.com\/books\/1320557161m\/120230.jpg","authors":"Ina Garten, Quentin Bacon"},{"book_id":120231,"title":"Barefoot Contessa Family Style: Easy Ideas and Recipes That Make Everyone Feel Like Family","image_url":"https:\/\/images.gr-assets.com\/books\/1320438055m\/120231.jpg","authors":"Ina Garten, Maura McEvoy"},{"book_id":120253,"title":"Good Faeries\/Bad Faeries","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Brian Froud, Terry Windling"},{"book_id":120461,"title":"Oscar et la dame rose","image_url":"https:\/\/images.gr-assets.com\/books\/1399593530m\/120461.jpg","authors":"\u00c9ric-Emmanuel Schmitt"},{"book_id":120840,"title":"David Gets In Trouble","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Shannon"},{"book_id":121127,"title":"Faith of the Fallen (Sword of Truth, #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Terry Goodkind"},{"book_id":121410,"title":"Adrift: Seventy-Six Days Lost at Sea","image_url":"https:\/\/images.gr-assets.com\/books\/1356596323m\/121410.jpg","authors":"Steven Callahan"},{"book_id":121581,"title":"The Past Through Tomorrow (Future History, #1-21)","image_url":"https:\/\/images.gr-assets.com\/books\/1325885616m\/121581.jpg","authors":"Robert A. Heinlein, Damon Knight"},{"book_id":121648,"title":"Five Little Pigs (Hercule Poirot, #24)","image_url":"https:\/\/images.gr-assets.com\/books\/1429422068m\/121648.jpg","authors":"Agatha Christie"},{"book_id":121715,"title":"The Weight of Glory","image_url":"https:\/\/images.gr-assets.com\/books\/1381283728m\/121715.jpg","authors":"C.S. Lewis"},{"book_id":121732,"title":"Surprised by Joy: The Shape of My Early Life","image_url":"https:\/\/images.gr-assets.com\/books\/1381407473m\/121732.jpg","authors":"C.S. Lewis"},{"book_id":121749,"title":"Prince Caspian (Chronicles of Narnia, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1308814880m\/121749.jpg","authors":"C.S. Lewis"},{"book_id":121792,"title":"The Revenge of the Baby-Sat","image_url":"https:\/\/images.gr-assets.com\/books\/1384734025m\/121792.jpg","authors":"Bill Watterson"},{"book_id":121809,"title":"Tennis Shoes Among the Nephites (Tennis Shoes, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1442362440m\/121809.jpg","authors":"Chris Heimerdinger"},{"book_id":121927,"title":"Danse Macabre (Anita Blake, Vampire Hunter, #14)","image_url":"https:\/\/images.gr-assets.com\/books\/1289499526m\/121927.jpg","authors":"Laurell K. Hamilton"},{"book_id":122125,"title":"How Do Dinosaurs Say Good Night?","image_url":"https:\/\/images.gr-assets.com\/books\/1278431558m\/122125.jpg","authors":"Jane Yolen, Mark Teague"},{"book_id":122211,"title":"Disappearing Acts","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Terry McMillan"},{"book_id":122212,"title":"Waiting to Exhale (Waiting To Exhale #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1309282766m\/122212.jpg","authors":"Terry McMillan"},{"book_id":122574,"title":"Getting Stoned with Savages: A Trip Through the Islands of Fiji and Vanuatu","image_url":"https:\/\/images.gr-assets.com\/books\/1320524119m\/122574.jpg","authors":"J. Maarten Troost"},{"book_id":122649,"title":"Lady Windermere's Fan","image_url":"https:\/\/images.gr-assets.com\/books\/1336666367m\/122649.jpg","authors":"Oscar Wilde"},{"book_id":122756,"title":"My Brother Sam Is Dead","image_url":"https:\/\/images.gr-assets.com\/books\/1328867125m\/122756.jpg","authors":"James Lincoln Collier, Christopher Collier"},{"book_id":122781,"title":"A Walk Across America","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Peter Jenkins"},{"book_id":122967,"title":"The Ugly Duckling","image_url":"https:\/\/images.gr-assets.com\/books\/1381355973m\/122967.jpg","authors":"Hans Christian Andersen, Jerry Pinkney"},{"book_id":123063,"title":"Under the Skin","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michel Faber"},{"book_id":123106,"title":"Twisted","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Laurie Halse Anderson"},{"book_id":123170,"title":"Big Red (Big Red, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1320551723m\/123170.jpg","authors":"Jim Kjelgaard, Carl Pfeuffer"},{"book_id":123543,"title":"The Bourne Legacy (Jason Bourne, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Eric Van Lustbader"},{"book_id":123598,"title":"Black Notice (Kay Scarpetta, #10)","image_url":"https:\/\/images.gr-assets.com\/books\/1388461944m\/123598.jpg","authors":"Patricia Cornwell"},{"book_id":123632,"title":"Man and His Symbols","image_url":"https:\/\/images.gr-assets.com\/books\/1327336291m\/123632.jpg","authors":"C.G. Jung, Joseph L. Henderson, Aniela Jaff\u00e9, Jolande Jacobi, John Freeman, Marie-Louise von Franz"},{"book_id":123845,"title":"Self-Reliance and Other Essays","image_url":"https:\/\/images.gr-assets.com\/books\/1319099192m\/123845.jpg","authors":"Ralph Waldo Emerson"},{"book_id":123933,"title":"No Exit","image_url":"https:\/\/images.gr-assets.com\/books\/1362639118m\/123933.jpg","authors":"Jean-Paul Sartre"},{"book_id":124272,"title":"The Wings of the Dove","image_url":"https:\/\/images.gr-assets.com\/books\/1320514843m\/124272.jpg","authors":"Henry James, Amy Bloom, Pierre A. Walker"},{"book_id":124509,"title":"Smilla's Sense of Snow","image_url":"https:\/\/images.gr-assets.com\/books\/1485595488m\/124509.jpg","authors":"Peter H\u00f8eg, Tiina Nunnally"},{"book_id":124524,"title":"Joni: An Unforgettable Story","image_url":"https:\/\/images.gr-assets.com\/books\/1360187347m\/124524.jpg","authors":"Joni Eareckson Tada, Joe Musser"},{"book_id":124918,"title":"Airport","image_url":"https:\/\/images.gr-assets.com\/books\/1309288724m\/124918.jpg","authors":"Arthur Hailey"},{"book_id":125190,"title":"Swallows and Amazons (Swallows and Amazons, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1277148503m\/125190.jpg","authors":"Arthur Ransome"},{"book_id":125404,"title":"The Indian in the Cupboard (The Indian in the Cupboard, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lynne Reid Banks"},{"book_id":125423,"title":"The Very Quiet Cricket","image_url":"https:\/\/images.gr-assets.com\/books\/1309287060m\/125423.jpg","authors":"Eric Carle"},{"book_id":125502,"title":"What I Loved","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Siri Hustvedt"},{"book_id":125507,"title":"The True Story of the 3 Little Pigs","image_url":"https:\/\/images.gr-assets.com\/books\/1327884731m\/125507.jpg","authors":"Jon Scieszka, Lane Smith"},{"book_id":125540,"title":"One Day at Horrorland (Goosebumps, #16)","image_url":"https:\/\/images.gr-assets.com\/books\/1328867794m\/125540.jpg","authors":"R.L. Stine"},{"book_id":125542,"title":"Stay Out of the Basement (Goosebumps, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1328867797m\/125542.jpg","authors":"R.L. Stine"},{"book_id":125553,"title":"Welcome to Dead House (Goosebumps, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1328867798m\/125553.jpg","authors":"R.L. Stine"},{"book_id":125564,"title":"Night of the Living Dummy (Goosebumps, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1328867793m\/125564.jpg","authors":"R.L. Stine"},{"book_id":125662,"title":"Say Cheese and Die! (Goosebumps, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1328867794m\/125662.jpg","authors":"R.L. Stine"},{"book_id":125925,"title":"Industrial Magic (Women of the Otherworld, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kelley Armstrong"},{"book_id":125926,"title":"Dime Store Magic (Women of the Otherworld, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1355183293m\/125926.jpg","authors":"Kelley Armstrong"},{"book_id":125955,"title":"White: The Great Pursuit (The Circle, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1380858193m\/125955.jpg","authors":"Ted Dekker"},{"book_id":125956,"title":"Black: The Birth of Evil (The Circle, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ted Dekker"},{"book_id":125958,"title":"Skin","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ted Dekker"},{"book_id":125959,"title":"Saint (Paradise, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ted Dekker"},{"book_id":125963,"title":"Thr3e","image_url":"https:\/\/images.gr-assets.com\/books\/1380856492m\/125963.jpg","authors":"Ted Dekker"},{"book_id":126061,"title":"The Double Helix","image_url":"https:\/\/images.gr-assets.com\/books\/1384152213m\/126061.jpg","authors":"James D. Watson"},{"book_id":126066,"title":"The Sacred Romance Drawing Closer To The Heart Of God","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Eldredge, Brent Curtis"},{"book_id":126151,"title":"Kaffir Boy: An Autobiography","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mark Mathabane"},{"book_id":126185,"title":"The Christmas Train","image_url":"https:\/\/images.gr-assets.com\/books\/1354941481m\/126185.jpg","authors":"David Baldacci"},{"book_id":126232,"title":"Jaws","image_url":"https:\/\/images.gr-assets.com\/books\/1327958767m\/126232.jpg","authors":"Peter Benchley"},{"book_id":126381,"title":"Purple Hibiscus","image_url":"https:\/\/images.gr-assets.com\/books\/1329431038m\/126381.jpg","authors":"Chimamanda Ngozi Adichie"},{"book_id":126507,"title":"Lost Light (Harry Bosch, #9; Harry Bosch Universe, #11)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael Connelly"},{"book_id":126583,"title":"Appointment in Samarra","image_url":"https:\/\/images.gr-assets.com\/books\/1320446769m\/126583.jpg","authors":"John O'Hara"},{"book_id":126609,"title":"Sister Carrie","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Theodore Dreiser"},{"book_id":126807,"title":"The Double Bind","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Chris Bohjalian"},{"book_id":127249,"title":"The Third Secret","image_url":"https:\/\/images.gr-assets.com\/books\/1320437464m\/127249.jpg","authors":"Steve Berry"},{"book_id":127451,"title":"Don't Die, My Love","image_url":"https:\/\/images.gr-assets.com\/books\/1320416427m\/127451.jpg","authors":"Lurlene McDaniel"},{"book_id":127455,"title":"The Lies of Locke Lamora (Gentleman Bastard, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Scott Lynch"},{"book_id":127459,"title":"The Sweet Far Thing (Gemma Doyle, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1358704741m\/127459.jpg","authors":"Libba Bray"},{"book_id":127515,"title":"Invasion of the Body Snatchers","image_url":"https:\/\/images.gr-assets.com\/books\/1344394499m\/127515.jpg","authors":"Jack Finney"},{"book_id":127567,"title":"The Dolphins of Pern (Pern, #13)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anne McCaffrey"},{"book_id":127584,"title":"Dragonquest (Pern, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1307994633m\/127584.jpg","authors":"Anne McCaffrey"},{"book_id":127586,"title":"The White Dragon (Pern, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1307994871m\/127586.jpg","authors":"Anne McCaffrey"},{"book_id":127712,"title":"Point of Impact (Bob Lee Swagger, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1315656617m\/127712.jpg","authors":"Stephen Hunter"},{"book_id":127823,"title":"The Icebound Land (Ranger's Apprentice, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Flanagan"},{"book_id":127970,"title":"The Prize Winner of Defiance, Ohio: How My Mother Raised 10 Kids on 25 Words or Less","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Terry Ryan"},{"book_id":128029,"title":"A Thousand Splendid Suns","image_url":"https:\/\/images.gr-assets.com\/books\/1345958969m\/128029.jpg","authors":"Khaled Hosseini"},{"book_id":128048,"title":"Carry On, Mr. Bowditch","image_url":"https:\/\/images.gr-assets.com\/books\/1480110382m\/128048.jpg","authors":"Jean Lee Latham"},{"book_id":128066,"title":"The Pianist: The Extraordinary Story of One Man's Survival in Warsaw, 1939\u201345","image_url":"https:\/\/images.gr-assets.com\/books\/1491050715m\/128066.jpg","authors":"W\u0142adys\u0142aw Szpilman, Anthea Bell"},{"book_id":128092,"title":"The Pigman (The Pigman, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1393796714m\/128092.jpg","authors":"Paul Zindel"},{"book_id":128711,"title":"The Yacoubian Building","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Alaa Al Aswany, \u0639\u0644\u0627\u0621 \u0627\u0644\u0623\u0633\u0648\u0627\u0646\u064a"},{"book_id":128752,"title":"Bare Bones (Temperance Brennan, #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kathy Reichs"},{"book_id":128754,"title":"Deadly Decisions (Temperance Brennan, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1452313887m\/128754.jpg","authors":"Kathy Reichs"},{"book_id":128755,"title":"Cross Bones (Temperance Brennan, #8)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kathy Reichs"},{"book_id":128756,"title":"Death du Jour (Temperance Brennan, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kathy Reichs"},{"book_id":128757,"title":"Bones to Ashes (Temperance Brennan, #10)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kathy Reichs"},{"book_id":128759,"title":"Fatal Voyage (Temperance Brennan, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kathy Reichs"},{"book_id":128940,"title":"The Persian Pickle Club","image_url":"https:\/\/images.gr-assets.com\/books\/1311998766m\/128940.jpg","authors":"Sandra Dallas"},{"book_id":129117,"title":"The Spellman Files (The Spellmans, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lisa Lutz"},{"book_id":129237,"title":"A Theory of Justice","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Rawls"},{"book_id":129327,"title":"The Case of Charles Dexter Ward","image_url":"https:\/\/images.gr-assets.com\/books\/1385837737m\/129327.jpg","authors":"H.P. Lovecraft"},{"book_id":129510,"title":"Empire of Ivory (Temeraire, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Naomi Novik"},{"book_id":129523,"title":"Divided in Death (In Death, #18)","image_url":"https:\/\/images.gr-assets.com\/books\/1389938707m\/129523.jpg","authors":"J.D. Robb"},{"book_id":129565,"title":"Financial Peace Revisited","image_url":"https:\/\/images.gr-assets.com\/books\/1309201190m\/129565.jpg","authors":"Dave Ramsey"},{"book_id":129603,"title":"You Can Heal Your Life","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Louise L. Hay"},{"book_id":129616,"title":"Something Wonderful (Sequels, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1435634530m\/129616.jpg","authors":"Judith McNaught"},{"book_id":129617,"title":"Perfect (Second Opportunities, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1403442859m\/129617.jpg","authors":"Judith McNaught"},{"book_id":129618,"title":"Until You (Westmoreland, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1354435714m\/129618.jpg","authors":"Judith McNaught"},{"book_id":129619,"title":"A Kingdom of Dreams (Westmoreland, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Judith McNaught"},{"book_id":129620,"title":"Once and Always (Sequels, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Judith McNaught"},{"book_id":129621,"title":"Almost Heaven (Sequels, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1351327172m\/129621.jpg","authors":"Judith McNaught"},{"book_id":129645,"title":"Cocktails for Three","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Madeleine Wickham"},{"book_id":129650,"title":"Mastering the Art of French Cooking","image_url":"https:\/\/images.gr-assets.com\/books\/1333577773m\/129650.jpg","authors":"Julia Child, Simone Beck, Louisette Bertholle"},{"book_id":129798,"title":"The King in Yellow and Other Horror Stories","image_url":"https:\/\/images.gr-assets.com\/books\/1416873291m\/129798.jpg","authors":"Robert W. Chambers, E.F. Bleiler"},{"book_id":129947,"title":"The Water is Wide: A Memoir","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Pat Conroy"},{"book_id":129984,"title":"Big Fish","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Daniel Wallace"},{"book_id":130119,"title":"An Enquiry Concerning Human Understanding","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Hume"},{"book_id":130260,"title":"Birdman (Jack Caffery, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mo Hayder"},{"book_id":130440,"title":"Doctor Zhivago","image_url":"https:\/\/images.gr-assets.com\/books\/1385508725m\/130440.jpg","authors":"Boris Pasternak, Max Hayward, Manya Harari, John Bayley"},{"book_id":130580,"title":"Old Yeller (Old Yeller, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327940112m\/130580.jpg","authors":"Fred Gipson"},{"book_id":130916,"title":"The Saving Graces","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Patricia Gaffney"},{"book_id":131123,"title":"The Austere Academy (A Series of Unfortunate Events, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1320706187m\/131123.jpg","authors":"Lemony Snicket, Brett Helquist"},{"book_id":131304,"title":"Big Bang: The Origin of the Universe","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Simon Singh"},{"book_id":131359,"title":"Death on the Nile (Hercule Poirot, #17)","image_url":"https:\/\/images.gr-assets.com\/books\/1486837149m\/131359.jpg","authors":"Agatha Christie"},{"book_id":131830,"title":"Women's Bodies, Women's Wisdom: Creating Physical and Emotional Health and Healing","image_url":"https:\/\/images.gr-assets.com\/books\/1320512401m\/131830.jpg","authors":"Christiane Northrup"},{"book_id":132152,"title":"Streams in the Desert","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lettie B. Cowman, James Reimann"},{"book_id":132314,"title":"The Complete Tales and Poems","image_url":"https:\/\/images.gr-assets.com\/books\/1388017636m\/132314.jpg","authors":"Edgar Allan Poe"},{"book_id":132336,"title":"Body of Evidence (Kay Scarpetta, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1341835877m\/132336.jpg","authors":"Patricia Cornwell"},{"book_id":132391,"title":"The Little Mermaid","image_url":"https:\/\/images.gr-assets.com\/books\/1309204955m\/132391.jpg","authors":"Hans Christian Andersen, Lisbeth Zwerger, Anthea Bell"},{"book_id":132609,"title":"Where's Spot?","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Eric Hill"},{"book_id":132626,"title":"On the Genealogy of Morals\/Ecce Homo","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Friedrich Nietzsche, Walter Kaufmann, R.J. Hollingdale"},{"book_id":132688,"title":"The Way to Cook","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Julia Child"},{"book_id":132778,"title":"Vengeance in Death (In Death, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1314315865m\/132778.jpg","authors":"J.D. Robb"},{"book_id":132900,"title":"The Happiest Baby on the Block: The New Way to Calm Crying and Help Your Newborn Baby Sleep Longer","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Harvey Karp"},{"book_id":133017,"title":"Hellblazer: Original Sins","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jamie Delano, John Ridgway, Alfredo Alcal\u00e1"},{"book_id":133241,"title":"Saving Grace","image_url":"https:\/\/images.gr-assets.com\/books\/1304789462m\/133241.jpg","authors":"Julie Garwood"},{"book_id":133266,"title":"Four Past Midnight ","image_url":"https:\/\/images.gr-assets.com\/books\/1321023197m\/133266.jpg","authors":"Stephen King"},{"book_id":133394,"title":"Our Man in Havana","image_url":"https:\/\/images.gr-assets.com\/books\/1327926887m\/133394.jpg","authors":"Graham Greene"},{"book_id":133430,"title":"Centennial","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James A. Michener"},{"book_id":133445,"title":"The Edible Woman","image_url":"https:\/\/images.gr-assets.com\/books\/1320439047m\/133445.jpg","authors":"Margaret Atwood"},{"book_id":133486,"title":"Nicholas and Alexandra","image_url":"https:\/\/images.gr-assets.com\/books\/1333577599m\/133486.jpg","authors":"Robert K. Massie"},{"book_id":133488,"title":"Tales of the South Pacific","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James A. Michener"},{"book_id":133518,"title":"The Things They Carried","image_url":"https:\/\/images.gr-assets.com\/books\/1424663847m\/133518.jpg","authors":"Tim O'Brien"},{"book_id":133526,"title":"Blueberries for Sal","image_url":"https:\/\/images.gr-assets.com\/books\/1363586056m\/133526.jpg","authors":"Robert McCloskey"},{"book_id":133664,"title":"Academ's Fury (Codex Alera, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1381026900m\/133664.jpg","authors":"Jim Butcher"},{"book_id":133729,"title":"Lucky Man","image_url":"https:\/\/images.gr-assets.com\/books\/1398617130m\/133729.jpg","authors":"Michael J. Fox"},{"book_id":133765,"title":"Those Left Behind (Serenity, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1403203994m\/133765.jpg","authors":"Joss Whedon, Brett Matthews, Will Conrad"},{"book_id":133767,"title":"Glorious Appearing: The End of Days (Left Behind, #12)","image_url":"https:\/\/images.gr-assets.com\/books\/1402100211m\/133767.jpg","authors":"Tim LaHaye, Jerry B. Jenkins"},{"book_id":133906,"title":"The Collected Poems","image_url":"https:\/\/images.gr-assets.com\/books\/1367492866m\/133906.jpg","authors":"Langston Hughes"},{"book_id":133954,"title":"Washington Square","image_url":"https:\/\/images.gr-assets.com\/books\/1309286618m\/133954.jpg","authors":"Henry James, Michael Cunningham"},{"book_id":134353,"title":"I'm OK - You're OK","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Thomas A. Harris"},{"book_id":134360,"title":"Diane Arbus: Monograph","image_url":"https:\/\/images.gr-assets.com\/books\/1312051661m\/134360.jpg","authors":"Diane Arbus, Stan Grossfeld, Doon Arbus, Marvin Israel"},{"book_id":134958,"title":"Elizabeth: The Struggle for the Throne","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Starkey"},{"book_id":135479,"title":"Cat's Cradle","image_url":"https:\/\/images.gr-assets.com\/books\/1327867150m\/135479.jpg","authors":"Kurt Vonnegut Jr."},{"book_id":135611,"title":"Shakespeare: The World as Stage","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bill Bryson"},{"book_id":136081,"title":"Dearly Devoted Dexter (Dexter, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1327896144m\/136081.jpg","authors":"Jeff Lindsay"},{"book_id":136116,"title":"The Scarlet Pimpernel","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Emmuska Orczy"},{"book_id":136167,"title":"The Other Side of Midnight (Midnight #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sidney Sheldon"},{"book_id":136251,"title":"Harry Potter and the Deathly Hallows (Harry Potter, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1474171184m\/136251.jpg","authors":"J.K. Rowling, Mary GrandPr\u00e9"},{"book_id":136636,"title":"Thunderhead","image_url":"https:\/\/images.gr-assets.com\/books\/1344263984m\/136636.jpg","authors":"Douglas Preston, Lincoln Child"},{"book_id":136637,"title":"Brimstone (Pendergast, #5; Diogenes, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1369943498m\/136637.jpg","authors":"Douglas Preston, Lincoln Child"},{"book_id":136638,"title":"Dance of Death (Pendergast, #6; Diogenes, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1172082458m\/136638.jpg","authors":"Douglas Preston, Lincoln Child"},{"book_id":136640,"title":"The Codex","image_url":"https:\/\/images.gr-assets.com\/books\/1316729332m\/136640.jpg","authors":"Douglas Preston"},{"book_id":136641,"title":"Tyrannosaur Canyon (Wyman Ford #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1419207931m\/136641.jpg","authors":"Douglas Preston"},{"book_id":136642,"title":"The Ice Limit (Ice Limit #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Douglas Preston, Lincoln Child"},{"book_id":136782,"title":"Stormbreaker (Alex Rider, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1288354739m\/136782.jpg","authors":"Anthony Horowitz"},{"book_id":136977,"title":"The Places That Scare You: A Guide to Fearlessness in Difficult Times","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Pema Ch\u00f6dr\u00f6n"},{"book_id":137098,"title":"The Little Lady Agency (The Little Lady Agency, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Hester Browne"},{"book_id":137791,"title":"Divine Secrets of the Ya-Ya Sisterhood","image_url":"https:\/\/images.gr-assets.com\/books\/1408313524m\/137791.jpg","authors":"Rebecca Wells"},{"book_id":137792,"title":"Ya Yas in Bloom","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rebecca Wells"},{"book_id":137894,"title":"Batman: No Man's Land, Vol. 1","image_url":"https:\/\/images.gr-assets.com\/books\/1377876110m\/137894.jpg","authors":"Bob Gale, Devin Grayson, Alex Maleev, Dale Eaglesham"},{"book_id":138069,"title":"The Three Pigs","image_url":"https:\/\/images.gr-assets.com\/books\/1172092242m\/138069.jpg","authors":"David Wiesner"},{"book_id":138070,"title":"Flotsam","image_url":"https:\/\/images.gr-assets.com\/books\/1381052967m\/138070.jpg","authors":"David Wiesner"},{"book_id":138134,"title":"The Complete Poems","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Keats"},{"book_id":138202,"title":"Sloppy Firsts (Jessica Darling, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1320531275m\/138202.jpg","authors":"Megan McCafferty"},{"book_id":138269,"title":"Catch Me If You Can: The True Story of a Real Fake","image_url":"https:\/\/images.gr-assets.com\/books\/1358730242m\/138269.jpg","authors":"Frank W. Abagnale, Stan Redding"},{"book_id":138395,"title":"The Walking Dead, Vol. 06: This Sorrowful Life","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert Kirkman, Charlie Adlard, Cliff Rathburn"},{"book_id":138396,"title":"The Walking Dead, Vol. 02: Miles Behind Us","image_url":"https:\/\/images.gr-assets.com\/books\/1298563748m\/138396.jpg","authors":"Robert Kirkman, Charlie Adlard"},{"book_id":138397,"title":"The Walking Dead, Vol. 04: The Heart's Desire","image_url":"https:\/\/images.gr-assets.com\/books\/1460242153m\/138397.jpg","authors":"Robert Kirkman, Charlie Adlard, Cliff Rathburn"},{"book_id":138398,"title":"The Walking Dead, Vol. 01: Days Gone Bye","image_url":"https:\/\/images.gr-assets.com\/books\/1389233242m\/138398.jpg","authors":"Robert Kirkman, Tony Moore"},{"book_id":138399,"title":"The Walking Dead, Book Two (The Walking Dead #13-24)","image_url":"https:\/\/images.gr-assets.com\/books\/1366213424m\/138399.jpg","authors":"Robert Kirkman, Charlie Adlard"},{"book_id":138683,"title":"Dark Fire (Matthew Shardlake, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"C.J. Sansom"},{"book_id":138684,"title":"Sovereign (Matthew Shardlake, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"C.J. Sansom"},{"book_id":138685,"title":"Dissolution (Matthew Shardlake, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1329914905m\/138685.jpg","authors":"C.J. Sansom"},{"book_id":138872,"title":"Follow the River","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Alexander Thom"},{"book_id":138959,"title":"Stuart Little","image_url":"https:\/\/images.gr-assets.com\/books\/1347367311m\/138959.jpg","authors":"E.B. White, Garth Williams"},{"book_id":139004,"title":"Essays and Poems","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ralph Waldo Emerson, Peter Norberg"},{"book_id":139069,"title":"Endurance: Shackleton's Incredible Voyage","image_url":"https:\/\/images.gr-assets.com\/books\/1391329559m\/139069.jpg","authors":"Alfred Lansing"},{"book_id":139087,"title":"The Line of Beauty","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Alan Hollinghurst"},{"book_id":139176,"title":"The Quiche of Death (Agatha Raisin, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"M.C. Beaton"},{"book_id":139220,"title":"Heat: An Amateur's Adventures as Kitchen Slave, Line Cook, Pasta-Maker, and Apprentice to a Dante-Quoting Butcher in Tuscany","image_url":"https:\/\/images.gr-assets.com\/books\/1320554917m\/139220.jpg","authors":"Bill Buford"},{"book_id":139253,"title":"The House on Mango Street","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sandra Cisneros"},{"book_id":139254,"title":"Empress Orchid (Empress Orchid, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anchee Min"},{"book_id":139417,"title":"A Kiss of Shadows (Merry Gentry, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1486707201m\/139417.jpg","authors":"Laurell K. Hamilton"},{"book_id":139463,"title":"Maniac Magee","image_url":"https:\/\/images.gr-assets.com\/books\/1395884800m\/139463.jpg","authors":"Jerry Spinelli"},{"book_id":139569,"title":"Stone Butch Blues","image_url":"https:\/\/images.gr-assets.com\/books\/1328758827m\/139569.jpg","authors":"Leslie Feinberg"},{"book_id":139855,"title":"Knowing God","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"J.I. Packer"},{"book_id":140075,"title":"All Together Dead (Sookie Stackhouse, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1417964062m\/140075.jpg","authors":"Charlaine Harris"},{"book_id":140077,"title":"Dead to the World (Sookie Stackhouse, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1468561630m\/140077.jpg","authors":"Charlaine Harris"},{"book_id":140078,"title":"Grave Surprise (Harper Connelly, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Charlaine Harris"},{"book_id":140079,"title":"Definitely Dead (Sookie Stackhouse, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1468562748m\/140079.jpg","authors":"Charlaine Harris"},{"book_id":140082,"title":"Club Dead (Sookie Stackhouse, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1329501590m\/140082.jpg","authors":"Charlaine Harris"},{"book_id":140091,"title":"Real Murders (Aurora Teagarden, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1307067671m\/140091.jpg","authors":"Charlaine Harris"},{"book_id":140097,"title":"An Ice Cold Grave (Harper Connelly, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Charlaine Harris"},{"book_id":140131,"title":"The Three Little Pigs (Disney Classic)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Al Dempster, Milt Banta, Golden Books, Walt Disney Company"},{"book_id":140225,"title":"The Voyage of the Dawn Treader (Chronicles of Narnia, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1343185059m\/140225.jpg","authors":"C.S. Lewis, Pauline Baynes"},{"book_id":140278,"title":"4:50 from Paddington (Miss Marple, #8)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Agatha Christie"},{"book_id":140302,"title":"Poirot Investiga (H\u00e9rcules Poirot, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1359475912m\/140302.jpg","authors":"Agatha Christie"},{"book_id":140345,"title":"Absent In The Spring","image_url":"https:\/\/images.gr-assets.com\/books\/1396225976m\/140345.jpg","authors":"Mary Westmacott, Agatha Christie"},{"book_id":140524,"title":"The Unexpected Mrs. Pollifax (Mrs. Pollifax #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1407611607m\/140524.jpg","authors":"Dorothy Gilman"},{"book_id":140671,"title":"The Black Company (The Chronicles of the Black Company, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Glen Cook"},{"book_id":140963,"title":"O Pioneers!","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Willa Cather"},{"book_id":140974,"title":"The Path of Daggers (Wheel of Time, #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1390508613m\/140974.jpg","authors":"Robert Jordan"},{"book_id":141019,"title":"Snow White and the Seven Dwarfs (Little Golden Book)","image_url":"https:\/\/images.gr-assets.com\/books\/1320524015m\/141019.jpg","authors":"Walt Disney Company"},{"book_id":141077,"title":"The Kreutzer Sonata","image_url":"https:\/\/images.gr-assets.com\/books\/1451489791m\/141077.jpg","authors":"Leo Tolstoy, Isai Kamen, Doris Lessing"},{"book_id":141372,"title":"Brian's Winter (Brian's Saga, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Gary Paulsen"},{"book_id":141526,"title":"Pulp","image_url":"https:\/\/images.gr-assets.com\/books\/1348053445m\/141526.jpg","authors":"Charles Bukowski"},{"book_id":141565,"title":"This Is Your Brain on Music: The Science of a Human Obsession","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Daniel J. Levitin"},{"book_id":141828,"title":"L'\u00c9cume des jours","image_url":"https:\/\/images.gr-assets.com\/books\/1332596603m\/141828.jpg","authors":"Boris Vian"},{"book_id":141935,"title":"Curious George Visits the Library","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Margret Rey, H.A. Rey, Martha Weston"},{"book_id":142079,"title":"S is for Silence (Kinsey Millhone, #19)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sue Grafton"},{"book_id":142080,"title":"Collected Poems, 1909-1962","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"T.S. Eliot"},{"book_id":142108,"title":"Rich Dad's Guide to Investing: What the Rich Invest in That the Poor and Middle Class Do Not!","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert T. Kiyosaki, Sharon L. Lechter"},{"book_id":142292,"title":"My Stroke of Insight: A Brain Scientist's Personal Journey","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jill Bolte Taylor"},{"book_id":142395,"title":"Samarkand","image_url":"https:\/\/images.gr-assets.com\/books\/1327995121m\/142395.jpg","authors":"Amin Maalouf, Russell Harris"},{"book_id":142540,"title":"The Empty Chair (Lincoln Rhyme, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1336331745m\/142540.jpg","authors":"Jeffery Deaver"},{"book_id":142545,"title":"The Stone Monkey (Lincoln Rhyme, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1336331827m\/142545.jpg","authors":"Jeffery Deaver"},{"book_id":142900,"title":"The Master Butchers Singing Club","image_url":"https:\/\/images.gr-assets.com\/books\/1410133209m\/142900.jpg","authors":"Louise Erdrich"},{"book_id":143513,"title":"The Three Sisters","image_url":"https:\/\/images.gr-assets.com\/books\/1416873197m\/143513.jpg","authors":"Anton Chekhov"},{"book_id":143534,"title":"The Gift of the Magi","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"O. Henry, Lisbeth Zwerger"},{"book_id":143761,"title":"A Good Yarn (Blossom Street, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Debbie Macomber"},{"book_id":144127,"title":"The Runelords (Runelords #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Farland"},{"book_id":144349,"title":"The Burning Bridge (Ranger's Apprentice, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Flanagan"},{"book_id":144350,"title":"The Battle for Skandia (Ranger's Apprentice, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1294443954m\/144350.jpg","authors":"John Flanagan"},{"book_id":144773,"title":"Contest","image_url":"https:\/\/images.gr-assets.com\/books\/1311984048m\/144773.jpg","authors":"Matthew Reilly"},{"book_id":144789,"title":"Scarecrow (Shane Schofield, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1316635676m\/144789.jpg","authors":"Matthew Reilly"},{"book_id":144790,"title":"Ice Station (Shane Schofield, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Matthew Reilly"},{"book_id":144791,"title":"Seven Deadly Wonders (Jack West Jr, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Matthew Reilly"},{"book_id":144792,"title":"Temple","image_url":"https:\/\/images.gr-assets.com\/books\/1312054860m\/144792.jpg","authors":"Matthew Reilly"},{"book_id":144793,"title":"Area 7 (Shane Schofield, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Matthew Reilly"},{"book_id":144800,"title":"The Raw Shark Texts","image_url":"https:\/\/images.gr-assets.com\/books\/1405099268m\/144800.jpg","authors":"Steven Hall"},{"book_id":144974,"title":"The Velveteen Rabbit","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Margery Williams Bianco, William Nicholson"},{"book_id":144977,"title":"The Tender Bar","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"J.R. Moehringer"},{"book_id":145397,"title":"Me: Stories of My Life","image_url":"https:\/\/images.gr-assets.com\/books\/1403186270m\/145397.jpg","authors":"Katharine Hepburn"},{"book_id":146064,"title":"Jesus Land","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Julia Scheeres"},{"book_id":146274,"title":"Manhunt: The 12-Day Chase for Lincoln's Killer","image_url":"https:\/\/images.gr-assets.com\/books\/1344193262m\/146274.jpg","authors":"James L. Swanson"},{"book_id":147074,"title":"Janet Evanovich Three and Four Two-Book Set (Stephanie Plum, #3-4)","image_url":"https:\/\/images.gr-assets.com\/books\/1317792858m\/147074.jpg","authors":"Janet Evanovich"},{"book_id":147243,"title":"Touching Spirit Bear (Spirit Bear, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ben Mikaelsen"},{"book_id":147602,"title":"The First American: The Life and Times of Benjamin Franklin","image_url":"https:\/\/images.gr-assets.com\/books\/1320438405m\/147602.jpg","authors":"H.W. Brands"},{"book_id":147732,"title":"Miss Nelson Is Missing! (Miss Nelson, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Harry Allard, James Marshall"},{"book_id":147801,"title":"Black Water (Pendragon, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1431981444m\/147801.jpg","authors":"D.J. MacHale"},{"book_id":147843,"title":"Green Rider (Green Rider, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kristen Britain"},{"book_id":147844,"title":"First Rider's Call (Green Rider, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kristen Britain"},{"book_id":147865,"title":"Love, Rosie","image_url":"https:\/\/images.gr-assets.com\/books\/1420732457m\/147865.jpg","authors":"Cecelia Ahern"},{"book_id":147915,"title":"A Storm of Swords: Blood and Gold (A Song of Ice and Fire, #3: Part 2 of 2)","image_url":"https:\/\/images.gr-assets.com\/books\/1354567206m\/147915.jpg","authors":"George R.R. Martin"},{"book_id":147941,"title":"Figure Drawing for All It's Worth (How to draw and paint)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Andrew Loomis"},{"book_id":148337,"title":"Where Eagles Dare ","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Alistair MacLean, Clint Willis"},{"book_id":148584,"title":"Elephants Can Remember (Hercule Poirot, #37)","image_url":"https:\/\/images.gr-assets.com\/books\/1309211932m\/148584.jpg","authors":"Agatha Christie"},{"book_id":148769,"title":"The First Part Last (Heaven, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Angela Johnson"},{"book_id":148809,"title":"The Fourth Bear (Nursery Crime, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jasper Fforde"},{"book_id":148821,"title":"Brunelleschi's Dome: How a Renaissance Genius Reinvented Architecture","image_url":"https:\/\/images.gr-assets.com\/books\/1309288056m\/148821.jpg","authors":"Ross King"},{"book_id":149049,"title":"The Fountains of Paradise","image_url":"https:\/\/images.gr-assets.com\/books\/1344265959m\/149049.jpg","authors":"Arthur C. Clarke"},{"book_id":149196,"title":"Eva Luna","image_url":"https:\/\/images.gr-assets.com\/books\/1478631242m\/149196.jpg","authors":"Isabel Allende, Margaret Sayers Peden"},{"book_id":149267,"title":"The Stand","image_url":"https:\/\/images.gr-assets.com\/books\/1213131305m\/149267.jpg","authors":"Stephen King, Bernie Wrightson"},{"book_id":149302,"title":"Silverthorn (The Riftwar Saga, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1272603402m\/149302.jpg","authors":"Raymond E. Feist"},{"book_id":149572,"title":"The Odessa File","image_url":"https:\/\/images.gr-assets.com\/books\/1348786945m\/149572.jpg","authors":"Frederick Forsyth"},{"book_id":149621,"title":"Ice Station Zebra","image_url":"https:\/\/images.gr-assets.com\/books\/1364039405m\/149621.jpg","authors":"Alistair MacLean"},{"book_id":149847,"title":"Mort: The Play","image_url":"https:\/\/images.gr-assets.com\/books\/1353573597m\/149847.jpg","authors":"Terry Pratchett, Stephen Briggs"},{"book_id":150037,"title":"The Vile Village (A Series of Unfortunate Events, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1352066958m\/150037.jpg","authors":"Lemony Snicket, Brett Helquist"},{"book_id":150720,"title":"Proof","image_url":"https:\/\/images.gr-assets.com\/books\/1417605435m\/150720.jpg","authors":"David Auburn"},{"book_id":150739,"title":"Dealing with Dragons (Enchanted Forest Chronicles, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1385526967m\/150739.jpg","authors":"Patricia C. Wrede, Peter de S\u00e8ve"},{"book_id":151370,"title":"Many Waters (A Wrinkle in Time Quintet, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1330360643m\/151370.jpg","authors":"Madeleine L'Engle"},{"book_id":151926,"title":"The Ghost Road (Regeneration, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Pat Barker"},{"book_id":152380,"title":"Mary Poppins (Mary Poppins, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327947805m\/152380.jpg","authors":"P.L. Travers, Mary Shepard"},{"book_id":152402,"title":"Lucky (Lucky Santangelo, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jackie Collins"},{"book_id":152519,"title":"Incidents in the Life of a Slave Girl","image_url":"https:\/\/images.gr-assets.com\/books\/1418788224m\/152519.jpg","authors":"Harriet Jacobs"},{"book_id":152662,"title":"What's Eating Gilbert Grape","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Peter Hedges"},{"book_id":152695,"title":"The Blue Bistro","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Elin Hilderbrand"},{"book_id":153007,"title":"Kushiel's Scion (Imriel's Trilogy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1344265086m\/153007.jpg","authors":"Jacqueline Carey"},{"book_id":153008,"title":"Kushiel's Dart (Ph\u00e8dre's Trilogy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1328168291m\/153008.jpg","authors":"Jacqueline Carey"},{"book_id":153025,"title":"Heart-Shaped Box","image_url":"https:\/\/images.gr-assets.com\/books\/1328043955m\/153025.jpg","authors":"Joe Hill"},{"book_id":153136,"title":"The Cake Bible","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rose Levy Beranbaum, Maria Guarnaschelli, Vincent Lee, Manuela Paul, Dean G. Bornstein"},{"book_id":153175,"title":"King of Foxes (Conclave of Shadows, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1409600307m\/153175.jpg","authors":"Raymond E. Feist"},{"book_id":153193,"title":"Undead and Unemployed (Undead, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"MaryJanice Davidson"},{"book_id":153492,"title":"The 39 Steps (Richard Hannay, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1391320797m\/153492.jpg","authors":"John Buchan"},{"book_id":153540,"title":"The Little House","image_url":"https:\/\/images.gr-assets.com\/books\/1363184334m\/153540.jpg","authors":"Virginia Lee Burton"},{"book_id":153542,"title":"Mike Mulligan and His Steam Shovel","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Virginia Lee Burton"},{"book_id":153747,"title":"Moby-Dick or, The Whale","image_url":"https:\/\/images.gr-assets.com\/books\/1327940656m\/153747.jpg","authors":"Herman Melville, Andrew Delbanco, Tom Quirk"},{"book_id":153779,"title":"Bloodhound (Beka Cooper, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1320443071m\/153779.jpg","authors":"Tamora Pierce"},{"book_id":153780,"title":"Trickster's Queen (Daughter of the Lioness, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tamora Pierce"},{"book_id":153781,"title":"Magic Steps (The Circle Opens, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1366188641m\/153781.jpg","authors":"Tamora Pierce"},{"book_id":153782,"title":"Shatterglass (The Circle Opens, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1366303866m\/153782.jpg","authors":"Tamora Pierce"},{"book_id":153783,"title":"The Will of the Empress (Circle Reforged, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tamora Pierce"},{"book_id":153784,"title":"First Test (Protector of the Small, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1320478357m\/153784.jpg","authors":"Tamora Pierce"},{"book_id":153785,"title":"Page (Protector of the Small, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1215394280m\/153785.jpg","authors":"Tamora Pierce"},{"book_id":153792,"title":"Cold Fire (The Circle Opens, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1328861813m\/153792.jpg","authors":"Tamora Pierce"},{"book_id":153795,"title":"Squire (Protector of the Small, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tamora Pierce"},{"book_id":153800,"title":"Lady Knight (Protector of the Small, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1215394344m\/153800.jpg","authors":"Tamora Pierce"},{"book_id":153865,"title":"Captain Underpants and the Attack of the Talking Toilets (Captain Underpants, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dav Pilkey"},{"book_id":153866,"title":"Captain Underpants and the Perilous Plot of Professor Poopypants (Captain Underpants, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dav Pilkey"},{"book_id":154091,"title":"Mona Lisa Overdrive (Sprawl, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1374778887m\/154091.jpg","authors":"William Gibson"},{"book_id":154423,"title":"Two Little Girls in Blue","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mary Higgins Clark"},{"book_id":154424,"title":"Consent to Kill (Mitch Rapp, #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1403880384m\/154424.jpg","authors":"Vince Flynn"},{"book_id":154795,"title":"The Death of Superman","image_url":"https:\/\/images.gr-assets.com\/books\/1383536130m\/154795.jpg","authors":"Dan Jurgens, Jerry Ordway, Louise Simonson, Roger Stern, Jon Bogdanove, Tom Grummett, Jackson Butch Guice, Brett Breeding, Rick Burchett, Doug Hazlewood, Dennis Janke, Denis Rodier"},{"book_id":154798,"title":"Superman: Red Son","image_url":"https:\/\/images.gr-assets.com\/books\/1298557533m\/154798.jpg","authors":"Mark Millar, Kilian Plunkett, Andrew Robinson, Walden Wong, Dave Johnson"},{"book_id":155106,"title":"Amelia Bedelia and the Surprise Shower","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Peggy Parish, Barbara Siebel Thomas"},{"book_id":155291,"title":"Agents of Light and Darkness (Nightside, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Simon R. Green"},{"book_id":155370,"title":"Double Identity","image_url":"https:\/\/images.gr-assets.com\/books\/1344394478m\/155370.jpg","authors":"Margaret Peterson Haddix"},{"book_id":155421,"title":"Something from the Nightside (Nightside, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1354812342m\/155421.jpg","authors":"Simon R. Green"},{"book_id":155712,"title":"Mrs. Mike (Mrs. Mike, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1309212489m\/155712.jpg","authors":"Benedict Freedman, Nancy Freedman"},{"book_id":155981,"title":"Psycho-Cybernetics, A New Way to Get More Living Out of Life","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Maxwell Maltz"},{"book_id":156427,"title":"Psycho","image_url":"https:\/\/images.gr-assets.com\/books\/1393286878m\/156427.jpg","authors":"Robert Bloch"},{"book_id":156529,"title":"Y: The Last Man, Vol. 6: Girl on Girl (Y: The Last Man, #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Brian K. Vaughan, Pia Guerra, Goran Sud\u017euka, Jos\u00e9 Marz\u00e1n Jr."},{"book_id":156530,"title":"Y: The Last Man, Vol. 3: One Small Step (Y: The Last Man, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1306252925m\/156530.jpg","authors":"Brian K. Vaughan, Pia Guerra, Jos\u00e9 Marz\u00e1n Jr., Paul Chadwick"},{"book_id":156532,"title":"Y: The Last Man, Vol. 9: Motherland (Y: The Last Man, #9)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Brian K. Vaughan, Pia Guerra, Goran Sud\u017euka, Jos\u00e9 Marz\u00e1n Jr."},{"book_id":156533,"title":"Y: The Last Man, Vol. 5: Ring of Truth (Y: The Last Man, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Brian K. Vaughan, Pia Guerra, Jos\u00e9 Marz\u00e1n Jr."},{"book_id":156534,"title":"Y: The Last Man, Vol. 1: Unmanned","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Brian K. Vaughan, Pia Guerra, Jos\u00e9 Marz\u00e1n Jr."},{"book_id":156538,"title":"North and South","image_url":"https:\/\/images.gr-assets.com\/books\/1349633381m\/156538.jpg","authors":"Elizabeth Gaskell, Alan Shelston"},{"book_id":157055,"title":"Once Upon a Marigold (Upon a Marigold, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jean Ferris"},{"book_id":157076,"title":"The Most Dangerous Game","image_url":"https:\/\/images.gr-assets.com\/books\/1386885674m\/157076.jpg","authors":"Richard Connell"},{"book_id":157993,"title":"The Little Prince","image_url":"https:\/\/images.gr-assets.com\/books\/1367545443m\/157993.jpg","authors":"Antoine de Saint-Exup\u00e9ry, Richard Howard, Dom Marcos Barbosa, Melina Karakosta"},{"book_id":158119,"title":"If You Could See Me Now","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Cecelia Ahern"},{"book_id":158141,"title":"Wiseguy","image_url":"https:\/\/images.gr-assets.com\/books\/1223643389m\/158141.jpg","authors":"Nicholas Pileggi"},{"book_id":158446,"title":"Captain Blood","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rafael Sabatini"},{"book_id":158516,"title":"The Twelve Chairs","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ilya Ilf, Eugene Petrov, Maurice Friedberg, John H.C. Richardson"},{"book_id":158944,"title":"The Fannie Farmer Cookbook: Anniversary","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Marion Cunningham, Fannie Merritt Farmer, Archibald Candy Corporation"},{"book_id":158988,"title":"Fables, Vol. 9: Sons of Empire","image_url":"https:\/\/images.gr-assets.com\/books\/1375396700m\/158988.jpg","authors":"Bill Willingham, Mark Buckingham, Steve Leialoha, Andrew Pepoy, Gene Ha, Joshua Middleton, I\u00f1aki Miranda, Mike Allred"},{"book_id":159061,"title":"Go Away, Big Green Monster!","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ed Emberley"},{"book_id":159177,"title":"Love and War (North and South, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Jakes"},{"book_id":159178,"title":"North and South (North and South, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Jakes"},{"book_id":159418,"title":"Discourse on Method","image_url":"https:\/\/images.gr-assets.com\/books\/1405624619m\/159418.jpg","authors":"Ren\u00e9 Descartes, Donald A. Cress"},{"book_id":159582,"title":"The Yearling","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Marjorie Kinnan Rawlings"},{"book_id":159760,"title":"Reviving Ophelia: Saving the Selves of Adolescent Girls","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mary Pipher"},{"book_id":159964,"title":"The Dhammapada","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anonymous, Ananda Maitreya, Thich Nhat Hanh, Balangoda Ananda Maitreya Maitreya"},{"book_id":160149,"title":"The Call of Cthulhu and Other Weird Stories","image_url":"https:\/\/images.gr-assets.com\/books\/1320618937m\/160149.jpg","authors":"H.P. Lovecraft, S.T. Joshi"},{"book_id":160194,"title":"Noises Off","image_url":"https:\/\/images.gr-assets.com\/books\/1320486520m\/160194.jpg","authors":"Michael Frayn"},{"book_id":160251,"title":"Ordinary People","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Judith Guest"},{"book_id":160629,"title":"A Bear Called Paddington (Paddington, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1393784912m\/160629.jpg","authors":"Michael Bond, Peggy Fortnum"},{"book_id":160830,"title":"All Marketers Are Liars: The Power of Telling Authentic Stories in a Low-Trust World","image_url":"https:\/\/images.gr-assets.com\/books\/1420382656m\/160830.jpg","authors":"Seth Godin"},{"book_id":160848,"title":"Wanted","image_url":"https:\/\/images.gr-assets.com\/books\/1355855954m\/160848.jpg","authors":"Mark Millar, J.G. Jones, Brian K. Vaughan"},{"book_id":160988,"title":"The Best Nest","image_url":"https:\/\/images.gr-assets.com\/books\/1320398047m\/160988.jpg","authors":"P.D. Eastman"},{"book_id":161099,"title":"Good Night, Mr. Tom","image_url":"https:\/\/images.gr-assets.com\/books\/1282757902m\/161099.jpg","authors":"Michelle Magorian"},{"book_id":161156,"title":"The Longest Day","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Cornelius Ryan"},{"book_id":161275,"title":"Superman: Whatever Happened to the Man of Tomorrow?","image_url":"https:\/\/images.gr-assets.com\/books\/1308365122m\/161275.jpg","authors":"Alan Moore, Curt Swan, George P\u00e9rez, Kurt Schaffenberger"},{"book_id":161361,"title":"The Christmas Box (The Christmas Box, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Richard Paul Evans"},{"book_id":161415,"title":"See You at the Top","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Zig Ziglar, Al Mayton"},{"book_id":161426,"title":"How I Live Now","image_url":"https:\/\/images.gr-assets.com\/books\/1327870252m\/161426.jpg","authors":"Meg Rosoff"},{"book_id":161656,"title":"The Tail of Emily Windsnap (Emily Windsnap, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Liz Kessler, Sarah Gibb"},{"book_id":161744,"title":"Common Sense","image_url":"https:\/\/images.gr-assets.com\/books\/1309209451m\/161744.jpg","authors":"Thomas Paine"},{"book_id":161846,"title":"The Midwich Cuckoos","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Wyndham"},{"book_id":161887,"title":"East","image_url":"https:\/\/images.gr-assets.com\/books\/1277997811m\/161887.jpg","authors":"Edith Pattou"},{"book_id":162085,"title":"Pretty Little Liars (Pretty Little Liars, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1377830522m\/162085.jpg","authors":"Sara Shepard"},{"book_id":162086,"title":"Such a Pretty Girl","image_url":"https:\/\/images.gr-assets.com\/books\/1336185676m\/162086.jpg","authors":"Laura Wiess"},{"book_id":162089,"title":"Flawless (Pretty Little Liars, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sara Shepard"},{"book_id":162332,"title":"The Sailor Who Fell from Grace with the Sea","image_url":"https:\/\/images.gr-assets.com\/books\/1327629352m\/162332.jpg","authors":"Yukio Mishima, John Nathan"},{"book_id":162719,"title":"Just Ella (The Palace Chronicles, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327897599m\/162719.jpg","authors":"Margaret Peterson Haddix"},{"book_id":162823,"title":"The Case-Book of Sherlock Holmes","image_url":"https:\/\/images.gr-assets.com\/books\/1316863480m\/162823.jpg","authors":"Arthur Conan Doyle"},{"book_id":162898,"title":"A Connecticut Yankee in King Arthur's Court","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mark Twain"},{"book_id":163363,"title":"All But My Life: A Memoir","image_url":"https:\/\/images.gr-assets.com\/books\/1316131452m\/163363.jpg","authors":"Gerda Weissmann Klein"},{"book_id":163465,"title":"The Great Gilly Hopkins","image_url":"https:\/\/images.gr-assets.com\/books\/1443418961m\/163465.jpg","authors":"Katherine Paterson"},{"book_id":163977,"title":"Tortilla Flat","image_url":"https:\/\/images.gr-assets.com\/books\/1400859671m\/163977.jpg","authors":"John Steinbeck"},{"book_id":164154,"title":"A Canticle for Leibowitz","image_url":"https:\/\/images.gr-assets.com\/books\/1450516880m\/164154.jpg","authors":"Walter M. Miller Jr."},{"book_id":164323,"title":"The Google Story: Inside the Hottest Business, Media, and Technology Success of Our Time","image_url":"https:\/\/images.gr-assets.com\/books\/1320394284m\/164323.jpg","authors":"David A. Vise"},{"book_id":164531,"title":"The Railway Children","image_url":"https:\/\/images.gr-assets.com\/books\/1328865877m\/164531.jpg","authors":"E. Nesbit"},{"book_id":164542,"title":"My Friend Flicka (Flicka, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mary O'Hara, Dave Blossom"},{"book_id":164719,"title":"Lord Loss (The Demonata, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1344267992m\/164719.jpg","authors":"Darren Shan"},{"book_id":164723,"title":"Diagnostic and Statistical Manual of Mental Disorders DSM-IV-TR","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"American Psychiatric Association"},{"book_id":164836,"title":"Succulent Wild Woman","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"S.A.R.K."},{"book_id":165030,"title":"Anybody Out There? (Walsh Family, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1358594290m\/165030.jpg","authors":"Marian Keyes"},{"book_id":165053,"title":"Graffiti World: Street Art from Five Continents","image_url":"https:\/\/images.gr-assets.com\/books\/1302039517m\/165053.jpg","authors":"Nicholas Ganz, Tristan Manco"},{"book_id":165395,"title":"Rubyfruit Jungle","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rita Mae Brown"},{"book_id":166101,"title":"River, Cross My Heart","image_url":"https:\/\/images.gr-assets.com\/books\/1344268600m\/166101.jpg","authors":"Breena Clarke"},{"book_id":166562,"title":"Between a Rock and a Hard Place","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Aron Ralston"},{"book_id":166580,"title":"The Sandman: The Dream Hunters","image_url":"https:\/\/images.gr-assets.com\/books\/1327940077m\/166580.jpg","authors":"Neil Gaiman, Yoshitaka Amano"},{"book_id":166997,"title":"Stoner","image_url":"https:\/\/images.gr-assets.com\/books\/1320600716m\/166997.jpg","authors":"John Williams, John McGahern"},{"book_id":167010,"title":"Fables, Vol. 2: Animal Farm","image_url":"https:\/\/images.gr-assets.com\/books\/1364233122m\/167010.jpg","authors":"Bill Willingham, Mark Buckingham, Steve Leialoha, James Jean"},{"book_id":167216,"title":"Amy and Isabelle ","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Elizabeth Strout"},{"book_id":168569,"title":"Sudden Prey (Lucas Davenport, #8)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Sandford"},{"book_id":168571,"title":"Shadow Prey (Lucas Davenport, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Sandford"},{"book_id":168642,"title":"In Cold Blood","image_url":"https:\/\/images.gr-assets.com\/books\/1424931136m\/168642.jpg","authors":"Truman Capote"},{"book_id":168668,"title":"Catch-22","image_url":"https:\/\/images.gr-assets.com\/books\/1463157317m\/168668.jpg","authors":"Joseph Heller"},{"book_id":168814,"title":"Keys to Drawing","image_url":"https:\/\/images.gr-assets.com\/books\/1172360760m\/168814.jpg","authors":"Bert Dodson"},{"book_id":169211,"title":"F is for Fugitive (Kinsey Millhone, #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sue Grafton"},{"book_id":169331,"title":"Addicted","image_url":"https:\/\/images.gr-assets.com\/books\/1266487564m\/169331.jpg","authors":"Zane"},{"book_id":169487,"title":"Self Matters: Creating Your Life from the Inside Out","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Phillip C. McGraw"},{"book_id":169718,"title":"Babbitt","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sinclair Lewis"},{"book_id":169756,"title":"Feed","image_url":"https:\/\/images.gr-assets.com\/books\/1327891005m\/169756.jpg","authors":"M.T. Anderson"},{"book_id":169848,"title":"A Christmas Carol, The Chimes and The Cricket on the Hearth","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Charles Dickens, Katharine Kroeber Wiley"},{"book_id":169871,"title":"Talking to Dragons (Enchanted Forest Chronicles, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Patricia C. Wrede, Peter de S\u00e8ve"},{"book_id":169875,"title":"Searching for Dragons (Enchanted Forest Chronicles, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Patricia C. Wrede, Peter de S\u00e8ve"},{"book_id":169879,"title":"Calling on Dragons (Enchanted Forest Chronicles, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1428442349m\/169879.jpg","authors":"Patricia C. Wrede, Peter de S\u00e8ve"},{"book_id":169959,"title":"The King's Buccaneer (Krondor's Sons, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Raymond E. Feist"},{"book_id":170171,"title":"Catalyst","image_url":"https:\/\/images.gr-assets.com\/books\/1409449341m\/170171.jpg","authors":"Laurie Halse Anderson"},{"book_id":170210,"title":"Dead as a Doornail (Sookie Stackhouse, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1468562419m\/170210.jpg","authors":"Charlaine Harris"},{"book_id":170529,"title":"What My Mother Doesn't Know (What My Mother Doesn't Know #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1355585638m\/170529.jpg","authors":"Sonya Sones"},{"book_id":170548,"title":"Don't Sweat the Small Stuff ... and it's all small stuff: Simple Ways to Keep the Little Things from Taking Over Your Life","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Richard Carlson"},{"book_id":170618,"title":"Daddy's Little Girl","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mary Higgins Clark"},{"book_id":170619,"title":"All Around the Town","image_url":"https:\/\/images.gr-assets.com\/books\/1355139896m\/170619.jpg","authors":"Mary Higgins Clark"},{"book_id":170632,"title":"Let Me Call You Sweetheart","image_url":"https:\/\/images.gr-assets.com\/books\/1355138627m\/170632.jpg","authors":"Mary Higgins Clark"},{"book_id":170641,"title":"I Heard That Song Before","image_url":"https:\/\/images.gr-assets.com\/books\/1408925501m\/170641.jpg","authors":"Mary Higgins Clark"},{"book_id":170650,"title":"Loves Music, Loves to Dance","image_url":"https:\/\/images.gr-assets.com\/books\/1416640001m\/170650.jpg","authors":"Mary Higgins Clark"},{"book_id":170651,"title":"A Stranger Is Watching","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mary Higgins Clark"},{"book_id":171001,"title":"She Said Yes: The Unlikely Martyrdom of Cassie Bernall","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Misty Bernall"},{"book_id":171020,"title":"A Mango-Shaped Space","image_url":"https:\/\/images.gr-assets.com\/books\/1326056834m\/171020.jpg","authors":"Wendy Mass"},{"book_id":171102,"title":"The Birth House","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ami McKay"},{"book_id":171201,"title":"Wit","image_url":"https:\/\/images.gr-assets.com\/books\/1327908183m\/171201.jpg","authors":"Margaret Edson"},{"book_id":171471,"title":"The Spine of the World (Forgotten Realms: Paths of Darkness, #2; Legend of Drizzt, #12)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"R.A. Salvatore"},{"book_id":171547,"title":"Songs of Innocence and of Experience","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"William Blake"},{"book_id":171624,"title":"The Ipcress File (Secret File, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1295903974m\/171624.jpg","authors":"Len Deighton"},{"book_id":172327,"title":"The Ersatz Elevator (A Series of Unfortunate Events, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1352066916m\/172327.jpg","authors":"Lemony Snicket, Brett Helquist"},{"book_id":172691,"title":"Conspiracy in Death (In Death, #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1305124508m\/172691.jpg","authors":"J.D. Robb"},{"book_id":172732,"title":"The Motorcycle Diaries: Notes on a Latin American Journey","image_url":"https:\/\/images.gr-assets.com\/books\/1354902593m\/172732.jpg","authors":"Ernesto Che Guevara, Aleida Guevara March"},{"book_id":172764,"title":"Full Moon Rising (Riley Jenson Guardian #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Keri Arthur"},{"book_id":173526,"title":"The Ragamuffin Gospel: Good News for the Bedraggled, Beat-Up, and Burnt Out","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Brennan Manning, Michael W. Smith, Rich Mullins"},{"book_id":173572,"title":"Where Is God When It Hurts?","image_url":"https:\/\/images.gr-assets.com\/books\/1328847643m\/173572.jpg","authors":"Philip Yancey"},{"book_id":173673,"title":"A Course in Miracles","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Foundation for Inner Peace"},{"book_id":174403,"title":"Back Roads","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tawni O'Dell"},{"book_id":174703,"title":"What to Expect When You're Expecting","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Heidi Murkoff, Arlene Eisenberg, Sandee Hathaway"},{"book_id":174834,"title":"The Cost of Discipleship","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dietrich Bonhoeffer"},{"book_id":174845,"title":"Life Together: The Classic Exploration of Christian Community","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dietrich Bonhoeffer"},{"book_id":174879,"title":"On Becoming a Person: A Therapist's View of Psychotherapy","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Carl R. Rogers, Peter D. Kramer"},{"book_id":175004,"title":"Eagle Strike (Alex Rider, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1373920729m\/175004.jpg","authors":"Anthony Horowitz"},{"book_id":175078,"title":"The Seven Storey Mountain","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Thomas Merton, Robert Giroux, William H. Shannon"},{"book_id":175113,"title":"The Return of the Prodigal Son: A Story of Homecoming","image_url":"https:\/\/images.gr-assets.com\/books\/1327010857m\/175113.jpg","authors":"Henri J.M. Nouwen"},{"book_id":175242,"title":"Every Dead Thing (Charlie Parker, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1393929687m\/175242.jpg","authors":"John Connolly"},{"book_id":175319,"title":"Methuselah's Children","image_url":"https:\/\/images.gr-assets.com\/books\/1253209003m\/175319.jpg","authors":"Robert A. Heinlein"},{"book_id":175324,"title":"Double Star","image_url":"https:\/\/images.gr-assets.com\/books\/1327984434m\/175324.jpg","authors":"Robert A. Heinlein"},{"book_id":175510,"title":"My Utmost for His Highest","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Oswald Chambers"},{"book_id":175516,"title":"The Fall of the House of Usher","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Edgar Allan Poe"},{"book_id":175675,"title":"Ragtime","image_url":"https:\/\/images.gr-assets.com\/books\/1320531790m\/175675.jpg","authors":"E.L. Doctorow"},{"book_id":175983,"title":"Memories of Ice (The Malazan Book of the Fallen, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1316729348m\/175983.jpg","authors":"Steven Erikson"},{"book_id":176326,"title":"The Problem Child (The Sisters Grimm, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1349015533m\/176326.jpg","authors":"Michael Buckley, Peter Ferguson"},{"book_id":176327,"title":"The Fairy-Tale Detectives (The Sisters Grimm, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1349272153m\/176327.jpg","authors":"Michael Buckley, Peter Ferguson"},{"book_id":176788,"title":"Arrow's Flight (Heralds of Valdemar, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mercedes Lackey"},{"book_id":176839,"title":"One True Thing","image_url":"https:\/\/images.gr-assets.com\/books\/1320401814m\/176839.jpg","authors":"Anna Quindlen"},{"book_id":176892,"title":"The Elvenbane (Halfblood Chronicles, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Andre Norton, Mercedes Lackey"},{"book_id":177515,"title":"The Ice Queen","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Alice Hoffman"},{"book_id":178357,"title":"SantaLand Diaries","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Sedaris"},{"book_id":178476,"title":"Slave to Sensation (Psy-Changeling #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1403541641m\/178476.jpg","authors":"Nalini Singh"},{"book_id":178599,"title":"Arsenic and Old Lace","image_url":"https:\/\/images.gr-assets.com\/books\/1319500896m\/178599.jpg","authors":"Joseph Kesselring"},{"book_id":178788,"title":"The China Study: The Most Comprehensive Study of Nutrition Ever Conducted And the Startling Implications for Diet, Weight Loss, And Long-term Health","image_url":"https:\/\/images.gr-assets.com\/books\/1376474019m\/178788.jpg","authors":"T. Colin Campbell, Thomas M. Campbell II"},{"book_id":178813,"title":"Trading Up","image_url":"https:\/\/images.gr-assets.com\/books\/1351341588m\/178813.jpg","authors":"Candace Bushnell"},{"book_id":179033,"title":"The Chronicles of Thomas Covenant, the Unbeliever (The Chronicles of Thomas Covenant the Unbeliever, #1-3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Stephen R. Donaldson"},{"book_id":179064,"title":"The Goose Girl (The Books of Bayern, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1330728389m\/179064.jpg","authors":"Shannon Hale"},{"book_id":179142,"title":"All My Sons","image_url":"https:\/\/images.gr-assets.com\/books\/1309210788m\/179142.jpg","authors":"Arthur Miller, Christopher Bigsby"},{"book_id":179174,"title":"The Secret of the Unicorn (Tintin, #11)","image_url":"https:\/\/images.gr-assets.com\/books\/1344263637m\/179174.jpg","authors":"Herg\u00e9"},{"book_id":179264,"title":"The Madonnas of Leningrad","image_url":"https:\/\/images.gr-assets.com\/books\/1479681269m\/179264.jpg","authors":"Debra Dean"},{"book_id":179565,"title":"The Marvelous Land of Oz (Oz, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"L. Frank Baum, David McKee"},{"book_id":179735,"title":"The Girl Next Door","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jack Ketchum"},{"book_id":179780,"title":"The Exorcist","image_url":"https:\/\/images.gr-assets.com\/books\/1375168676m\/179780.jpg","authors":"William Peter Blatty"},{"book_id":180066,"title":"Beautiful Boy: A Father's Journey Through His Son's Addiction","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Sheff"},{"book_id":180116,"title":"Awaken the Giant Within: How to Take Immediate Control of Your Mental, Emotional, Physical and Financial Destiny!","image_url":"https:\/\/images.gr-assets.com\/books\/1415677371m\/180116.jpg","authors":"Anthony Robbins, Tony Robbins, Frederick L. Covan"},{"book_id":180426,"title":"Dark Desire (Dark, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Christine Feehan"},{"book_id":180463,"title":"Leadership and Self-Deception: Getting Out of the Box","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"The Arbinger Institute"},{"book_id":180617,"title":"Pinocchio","image_url":"https:\/\/images.gr-assets.com\/books\/1327938097m\/180617.jpg","authors":"Carlo Collodi, John Boyne, Monteiro Lobato, Unknown"},{"book_id":180930,"title":"Wicca: A Guide for the Solitary Practitioner","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Scott Cunningham"},{"book_id":181077,"title":"Sadako and the Thousand Paper Cranes","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Eleanor Coerr, Ronald Himler"},{"book_id":181116,"title":"Monday Mourning (Temperance Brennan, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1452312670m\/181116.jpg","authors":"Kathy Reichs"},{"book_id":181206,"title":"The 80\/20 Principle: The Secret to Achieving More with Less","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Richard Koch"},{"book_id":181400,"title":"The Tale of Three Trees","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Angela Elwell Hunt, Tim Jonke"},{"book_id":181601,"title":"If You Give a Pig a Party","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Laura Joffe Numeroff, Felicia Bond"},{"book_id":181886,"title":"Ancestors of Avalon (Avalon, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1311305924m\/181886.jpg","authors":"Diana L. Paxson, Marion Zimmer Bradley"},{"book_id":182012,"title":"Indelible (Grant County, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1299703450m\/182012.jpg","authors":"Karin Slaughter"},{"book_id":182381,"title":"Cranford","image_url":"https:\/\/images.gr-assets.com\/books\/1375746052m\/182381.jpg","authors":"Elizabeth Gaskell"},{"book_id":182425,"title":"False Memory","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dean Koontz"},{"book_id":182496,"title":"Evergreen","image_url":"https:\/\/images.gr-assets.com\/books\/1392996056m\/182496.jpg","authors":"Belva Plain"},{"book_id":182683,"title":"Fame (Firstborn, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1406506537m\/182683.jpg","authors":"Karen Kingsbury"},{"book_id":183092,"title":"Night Light (Restoration #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Terri Blackstock"},{"book_id":183554,"title":"Developing the Leader Within You","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John C. Maxwell"},{"book_id":183656,"title":"The Two Princesses of Bamarre","image_url":"https:\/\/images.gr-assets.com\/books\/1442734248m\/183656.jpg","authors":"Gail Carson Levine"},{"book_id":183660,"title":"Fairest","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Gail Carson Levine"},{"book_id":183822,"title":"Sandstorm (Sigma Force, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1305960920m\/183822.jpg","authors":"James Rollins"},{"book_id":184040,"title":"Y: The Last Man, Vol. 4: Safeword (Y: The Last Man, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1335238541m\/184040.jpg","authors":"Brian K. Vaughan, Pia Guerra, Goran Parlov, Jos\u00e9 Marz\u00e1n Jr."},{"book_id":184324,"title":"Dark Demon (Dark, #16)","image_url":"https:\/\/images.gr-assets.com\/books\/1309288721m\/184324.jpg","authors":"Christine Feehan"},{"book_id":184419,"title":"The Man Who Was Thursday: A Nightmare","image_url":"https:\/\/images.gr-assets.com\/books\/1403181403m\/184419.jpg","authors":"G.K. Chesterton, Jonathan Lethem"},{"book_id":184644,"title":"Baking: From My Home to Yours","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dorie Greenspan, Alan Richardson"},{"book_id":184655,"title":"Transfer of Power (Mitch Rapp, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Vince Flynn"},{"book_id":184657,"title":"Memorial Day (Mitch Rapp, #7)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Vince Flynn"},{"book_id":184661,"title":"The Third Option (Mitch Rapp, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1314830587m\/184661.jpg","authors":"Vince Flynn"},{"book_id":184850,"title":"Virgin River (Virgin River, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robyn Carr"},{"book_id":185012,"title":"Doubt","image_url":"https:\/\/images.gr-assets.com\/books\/1327908288m\/185012.jpg","authors":"John Patrick Shanley"},{"book_id":185253,"title":"The Magic of Recluce (The Saga of Recluce #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"L.E. Modesitt Jr."},{"book_id":185289,"title":"Dragon Prince (Dragon Prince, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1309210730m\/185289.jpg","authors":"Melanie Rawn"},{"book_id":185911,"title":"When the Bough Breaks (Alex Delaware, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jonathan Kellerman"},{"book_id":186074,"title":"The Name of the Wind (The Kingkiller Chronicle, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1472068073m\/186074.jpg","authors":"Patrick Rothfuss"},{"book_id":186103,"title":"Peeps (Peeps, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1443904244m\/186103.jpg","authors":"Scott Westerfeld"},{"book_id":186190,"title":"Forrest Gump (Forrest Gump, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Winston Groom"},{"book_id":186669,"title":"Brilliance of the Moon (Tales of the Otori, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lian Hearn"},{"book_id":187020,"title":"Empire Falls","image_url":"https:\/\/images.gr-assets.com\/books\/1403184884m\/187020.jpg","authors":"Richard Russo"},{"book_id":187049,"title":"From the Two Rivers: The Eye of the World, Part 1 (Wheel of time, #1-1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert Jordan"},{"book_id":187065,"title":"New Spring (Wheel of Time, #0)","image_url":"https:\/\/images.gr-assets.com\/books\/1328959234m\/187065.jpg","authors":"Robert Jordan"},{"book_id":187124,"title":"Running with the Demon (Word & Void, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1451687782m\/187124.jpg","authors":"Terry Brooks"},{"book_id":187181,"title":"The Chosen","image_url":"https:\/\/images.gr-assets.com\/books\/1403191327m\/187181.jpg","authors":"Chaim Potok"},{"book_id":187633,"title":"Art and Fear: Observations on the Perils (and Rewards) of Artmaking","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Bayles, Ted Orland"},{"book_id":187811,"title":"Shadowland (The Mediator, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327886166m\/187811.jpg","authors":"Meg Cabot"},{"book_id":187812,"title":"Avalon High","image_url":"https:\/\/images.gr-assets.com\/books\/1172542154m\/187812.jpg","authors":"Meg Cabot"},{"book_id":188230,"title":"Crocodile on the Sandbank (Amelia Peabody #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1306096774m\/188230.jpg","authors":"Elizabeth Peters"},{"book_id":188572,"title":"The Complete Sherlock Holmes","image_url":"https:\/\/images.gr-assets.com\/books\/1465539139m\/188572.jpg","authors":"Arthur Conan Doyle"},{"book_id":189147,"title":"To Your Scattered Bodies Go (Riverworld, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327657439m\/189147.jpg","authors":"Philip Jos\u00e9 Farmer"},{"book_id":189182,"title":"The Story About Ping","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Marjorie Flack, Kurt Wiese"},{"book_id":189783,"title":"The Elfstones of Shannara (The Original Shannara Trilogy, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1420148388m\/189783.jpg","authors":"Terry Brooks"},{"book_id":189802,"title":"Belgarath the Sorcerer","image_url":"https:\/\/images.gr-assets.com\/books\/1333692194m\/189802.jpg","authors":"David Eddings, Leigh Eddings"},{"book_id":189811,"title":"King of the Murgos (The Malloreon, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Eddings"},{"book_id":190115,"title":"Sacred Contracts: Awakening Your Divine Potential","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Caroline Myss"},{"book_id":190344,"title":"First Term at Malory Towers (Malory Towers, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1300285044m\/190344.jpg","authors":"Enid Blyton"},{"book_id":190361,"title":"Obsidian Butterfly (Anita Blake, Vampire Hunter, #9)","image_url":"https:\/\/images.gr-assets.com\/books\/1327139907m\/190361.jpg","authors":"Laurell K. Hamilton"},{"book_id":190999,"title":"Way Station","image_url":"https:\/\/images.gr-assets.com\/books\/1326490682m\/190999.jpg","authors":"Clifford D. Simak"},{"book_id":191113,"title":"Don't Let the Pigeon Drive the Bus!","image_url":"https:\/\/images.gr-assets.com\/books\/1328495575m\/191113.jpg","authors":"Mo Willems"},{"book_id":191117,"title":"Don't Let the Pigeon Stay Up Late!","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mo Willems"},{"book_id":191139,"title":"Oh, The Places You'll Go!","image_url":"https:\/\/images.gr-assets.com\/books\/1421708635m\/191139.jpg","authors":"Dr. Seuss"},{"book_id":191170,"title":"Giggle, Giggle, Quack","image_url":"https:\/\/images.gr-assets.com\/books\/1408923126m\/191170.jpg","authors":"Doreen Cronin, Betsy Lewin"},{"book_id":192214,"title":"Vector Prime (Star Wars: The New Jedi Order, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1412181316m\/192214.jpg","authors":"R.A. Salvatore"},{"book_id":192341,"title":"The Starter Wife","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Gigi Levangie Grazer"},{"book_id":192510,"title":"\u062f\u0631\u062e\u062a \u0632\u06cc\u0628\u0627\u06cc \u0645\u0646","image_url":"https:\/\/images.gr-assets.com\/books\/1502523710m\/192510.jpg","authors":"Jos\u00e9 Mauro de Vasconcelos, \u0642\u0627\u0633\u0645 \u0635\u0646\u0639\u0648\u06cc"},{"book_id":192888,"title":"Clouds of Witness (Lord Peter Wimsey, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1287510321m\/192888.jpg","authors":"Dorothy L. Sayers"},{"book_id":192892,"title":"Unnatural Death (Lord Peter Wimsey, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1316244142m\/192892.jpg","authors":"Dorothy L. Sayers"},{"book_id":192893,"title":"Whose Body? (Lord Peter Wimsey, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1387573241m\/192893.jpg","authors":"Dorothy L. Sayers"},{"book_id":193093,"title":"Stone Soup","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Marcia Brown"},{"book_id":193755,"title":"The Diving Bell and the Butterfly","image_url":"https:\/\/images.gr-assets.com\/books\/1336930564m\/193755.jpg","authors":"Jean-Dominique Bauby, Jeremy Leggatt"},{"book_id":194086,"title":"Sleeping Arrangements","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Madeleine Wickham"},{"book_id":194366,"title":"The Return of Sherlock Holmes","image_url":"https:\/\/images.gr-assets.com\/books\/1374680848m\/194366.jpg","authors":"Arthur Conan Doyle"},{"book_id":194373,"title":"The Memoirs of Sherlock Holmes","image_url":"https:\/\/images.gr-assets.com\/books\/1410716044m\/194373.jpg","authors":"Arthur Conan Doyle"},{"book_id":194479,"title":"Crisis on Infinite Earths","image_url":"https:\/\/images.gr-assets.com\/books\/1327906696m\/194479.jpg","authors":"Marv Wolfman, George P\u00e9rez"},{"book_id":194618,"title":"Ross Poldark (Poldark, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1360785361m\/194618.jpg","authors":"Winston Graham"},{"book_id":194755,"title":"Esio Trot","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Roald Dahl, Quentin Blake"},{"book_id":194808,"title":"To Build a Fire","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jack London"},{"book_id":194870,"title":"The Complete Adventures of Peter Rabbit","image_url":"https:\/\/images.gr-assets.com\/books\/1309201736m\/194870.jpg","authors":"Beatrix Potter"},{"book_id":196613,"title":"Skinny Bitch","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rory Freedman, Kim Barnouin"},{"book_id":196764,"title":"A Piece of Cake","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Cupcake Brown"},{"book_id":196951,"title":"The Hat","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jan Brett"},{"book_id":196970,"title":"The Night Before Christmas","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Clement C. Moore, Jan Brett"},{"book_id":197084,"title":"Are You My Mother?","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"P.D. Eastman"},{"book_id":197436,"title":"Ralph S. Mouse by Beverly Cleary: Teacher Guide (Novel Units)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Gloria Levine"},{"book_id":197457,"title":"The Sight (Warriors: Power of Three, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1363489119m\/197457.jpg","authors":"Erin Hunter"},{"book_id":197459,"title":"Sunset (Warriors: The New Prophecy, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1363488668m\/197459.jpg","authors":"Erin Hunter"},{"book_id":197512,"title":"The Pigeon Finds a Hot Dog!","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mo Willems"},{"book_id":198331,"title":"Valhalla Rising (Dirk Pitt, #16)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Clive Cussler"},{"book_id":198332,"title":"Inca Gold (Dirk Pitt, #12)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Clive Cussler"},{"book_id":198511,"title":"Dear Theo","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Vincent van Gogh, Irving Stone, Jean Stone"},{"book_id":198863,"title":"Screw It, Let's Do It: Lessons In Life","image_url":"https:\/\/images.gr-assets.com\/books\/1312059228m\/198863.jpg","authors":"Richard Branson"},{"book_id":199530,"title":"Can't Wait to Get to Heaven","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Fannie Flagg"},{"book_id":199531,"title":"Daisy Fay and the Miracle Man ","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Fannie Flagg"},{"book_id":199532,"title":"A Redbird Christmas","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Fannie Flagg"},{"book_id":199687,"title":"Second Helpings (Jessica Darling, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1388707744m\/199687.jpg","authors":"Megan McCafferty"},{"book_id":199782,"title":"Queen of Babble in the Big City (Queen of Babble, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1407106698m\/199782.jpg","authors":"Meg Cabot"},{"book_id":199785,"title":"Reunion (The Mediator, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1327954705m\/199785.jpg","authors":"Meg Cabot"},{"book_id":199786,"title":"Ninth Key (The Mediator, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1327954597m\/199786.jpg","authors":"Meg Cabot"},{"book_id":200572,"title":"My Man Jeeves (Jeeves, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"P.G. Wodehouse"},{"book_id":200963,"title":"Meet Samantha: An American Girl (American Girls: Samantha, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1424726132m\/200963.jpg","authors":"Susan S. Adler, Ren\u00e9e Graef, Nancy Niles"},{"book_id":201114,"title":"Sold","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Patricia McCormick"},{"book_id":201126,"title":"We're Going on a Bear Hunt","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael Rosen, Helen Oxenbury"},{"book_id":201138,"title":"The Berenstain Bears and Too Much TV","image_url":"https:\/\/images.gr-assets.com\/books\/1457297865m\/201138.jpg","authors":"Stan Berenstain, Jan Berenstain"},{"book_id":201145,"title":"A Kiss for Little Bear (An I Can Read Book) by Minarik, Else Holmelund [1984]","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Else Holmelund Minarik, Maurice Sendak"},{"book_id":201146,"title":"Little Bear","image_url":"https:\/\/images.gr-assets.com\/books\/1318518124m\/201146.jpg","authors":"Else Holmelund Minarik, Maurice Sendak"},{"book_id":201175,"title":"Rapture in Death (In Death, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1347628556m\/201175.jpg","authors":"J.D. Robb, Susan Ericksen"},{"book_id":201341,"title":"Mossflower (Redwall, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1281811805m\/201341.jpg","authors":"Brian Jacques"},{"book_id":201342,"title":"Mattimeo (Redwall, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Brian Jacques"},{"book_id":201345,"title":"Martin the Warrior (Redwall, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1327877608m\/201345.jpg","authors":"Brian Jacques"},{"book_id":202146,"title":"Flyboys: A True Story of Courage","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James D. Bradley"},{"book_id":202292,"title":"The First Wives Club","image_url":"https:\/\/images.gr-assets.com\/books\/1405833638m\/202292.jpg","authors":"Olivia Goldsmith"},{"book_id":202948,"title":"Ladder of Years","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anne Tyler"},{"book_id":203220,"title":"Les Fleurs du Mal","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Charles Baudelaire, Richard Howard"},{"book_id":203288,"title":"The Ship Who Sang (Brainship, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1355931323m\/203288.jpg","authors":"Anne McCaffrey"},{"book_id":203805,"title":"Vincent Van Gogh: The Complete Paintings","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rainer Metzger, Ingo F. Walther"},{"book_id":204041,"title":"Naruto, Vol. 11: Impassioned Efforts (Naruto, #11)","image_url":"https:\/\/images.gr-assets.com\/books\/1435525208m\/204041.jpg","authors":"Masashi Kishimoto, Frances Wall"},{"book_id":204042,"title":"Naruto, Vol. 01: The Tests of the Ninja (Naruto, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1435524806m\/204042.jpg","authors":"Masashi Kishimoto, Katy Bridges"},{"book_id":204045,"title":"Naruto, Vol. 05: Exam Hell (Naruto, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1435524968m\/204045.jpg","authors":"Masashi Kishimoto"},{"book_id":204276,"title":"Split Second (Sean King & Michelle Maxwell, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Baldacci"},{"book_id":204479,"title":"Spying in High Heels (High Heels, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327885046m\/204479.jpg","authors":"Gemma Halliday"},{"book_id":204779,"title":"The Masque of the Red Death","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Edgar Allan Poe"},{"book_id":205218,"title":"Ethics","image_url":"https:\/\/images.gr-assets.com\/books\/1462223700m\/205218.jpg","authors":"Baruch Spinoza, Edwin M. Curley, Stuart Hampshire, Edwin Curley"},{"book_id":205330,"title":"There Was an Old Lady Who Swallowed a Fly","image_url":"https:\/\/images.gr-assets.com\/books\/1172674507m\/205330.jpg","authors":"Simms Taback"},{"book_id":205476,"title":"Our Town","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Thornton Wilder, Donald Margulies, Tappan Wilder"},{"book_id":205821,"title":"Caddie Woodlawn (Caddie Woodlawn #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Carol Ryrie Brink"},{"book_id":206172,"title":"The Pit and the Pendulum","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Edgar Allan Poe"},{"book_id":206193,"title":"Takedown (Scot Harvath, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Brad Thor"},{"book_id":206195,"title":"State of the Union (Scot Harvath, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Brad Thor"},{"book_id":206196,"title":"The Lions of Lucerne (Scot Harvath, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Brad Thor"},{"book_id":206197,"title":"The First Commandment (Scot Harvath, #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Brad Thor"},{"book_id":206236,"title":"The Power of the Dog","image_url":"https:\/\/images.gr-assets.com\/books\/1467260965m\/206236.jpg","authors":"Don Winslow"},{"book_id":206309,"title":"Fish: A Proven Way to Boost Morale and Improve Results","image_url":"https:\/\/images.gr-assets.com\/books\/1393219562m\/206309.jpg","authors":"Stephen C. Lundin, Harry Paul, John Christensen, Kenneth H. Blanchard"},{"book_id":206682,"title":"Dexter in the Dark (Dexter, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jeff Lindsay"},{"book_id":206731,"title":"The Tibetan Book of Living and Dying","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sogyal Rinpoche, Andrew Harvey"},{"book_id":206962,"title":"Hop On Pop","image_url":"https:\/\/images.gr-assets.com\/books\/1327947739m\/206962.jpg","authors":"Dr. Seuss"},{"book_id":207034,"title":"The Prophet of Yonwood (Book of Ember, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1320636285m\/207034.jpg","authors":"Jeanne DuPrau"},{"book_id":207153,"title":"Shiloh (Shiloh, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Phyllis Reynolds Naylor"},{"book_id":207266,"title":"The Adventures of Captain Underpants (Captain Underpants, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dav Pilkey"},{"book_id":207365,"title":"Claimed By Shadow (Cassandra Palmer, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1307391261m\/207365.jpg","authors":"Karen Chance"},{"book_id":207569,"title":"The Sign of the Beaver","image_url":"https:\/\/images.gr-assets.com\/books\/1362166273m\/207569.jpg","authors":"Elizabeth George Speare"},{"book_id":207684,"title":"Jinx","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Meg Cabot"},{"book_id":207687,"title":"Big Boned (Heather Wells, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1496810737m\/207687.jpg","authors":"Meg Cabot"},{"book_id":207694,"title":"The Nanny","image_url":"https:\/\/images.gr-assets.com\/books\/1389595555m\/207694.jpg","authors":"Melissa Nathan"},{"book_id":207781,"title":"The Art Spirit: Notes, Articles, Fragments of Letters and Talks to Students, Bearing on the Concept and Technique of Picture Making, the Study of Art (Icon Editions)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert Henri, Forbes Watson, Margery A. Ryerson"},{"book_id":207802,"title":"Ida B. . . and Her Plans to Maximize Fun, Avoid Disaster, and (Possibly) Save the World","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Katherine Hannigan"},{"book_id":208036,"title":"Metaphysics","image_url":"https:\/\/images.gr-assets.com\/books\/1355049704m\/208036.jpg","authors":"Aristotle, Joe Sachs"},{"book_id":208146,"title":"Grandfather's Journey","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Allen Say"},{"book_id":208324,"title":"Means of Ascent (The Years of Lyndon Johnson, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert A. Caro"},{"book_id":209194,"title":"The Man in the Brown Suit","image_url":"https:\/\/images.gr-assets.com\/books\/1390018729m\/209194.jpg","authors":"Agatha Christie"},{"book_id":209631,"title":"Cinderella","image_url":"https:\/\/images.gr-assets.com\/books\/1393792231m\/209631.jpg","authors":"Loek Koopmans, Charles Perrault, Anthea Bell"},{"book_id":209966,"title":"Planetary, Volume 1: All Over the World and Other Stories","image_url":"https:\/\/images.gr-assets.com\/books\/1374683466m\/209966.jpg","authors":"Warren Ellis, John Cassaday"},{"book_id":210243,"title":"Origin in Death (In Death, #21)","image_url":"https:\/\/images.gr-assets.com\/books\/1410761398m\/210243.jpg","authors":"J.D. Robb"},{"book_id":210329,"title":"The Dark Is Rising (The Dark is Rising, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Susan Cooper"},{"book_id":210404,"title":"A Sand County Almanac and Sketches Here and There","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Aldo Leopold"},{"book_id":210834,"title":"Kim","image_url":"https:\/\/images.gr-assets.com\/books\/1387747342m\/210834.jpg","authors":"Rudyard Kipling, Edward Said"},{"book_id":211099,"title":"Losing My Virginity: How I've Survived, Had Fun, and Made a Fortune Doing Business My Way","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Richard Branson"},{"book_id":212525,"title":"Ethan Frome and Other Short Fiction","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Edith Wharton, Mary Gordon"},{"book_id":213233,"title":"Better: A Surgeon's Notes on Performance","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Atul Gawande"},{"book_id":213367,"title":"Desiring God: Meditations of a Christian Hedonist","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Piper"},{"book_id":213647,"title":"The Warrior Heir (The Heir Chronicles, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1360575642m\/213647.jpg","authors":"Cinda Williams Chima"},{"book_id":213753,"title":"Life As We Knew It (Last Survivors, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1328012816m\/213753.jpg","authors":"Susan Beth Pfeffer"},{"book_id":213975,"title":"Witness in Death (In Death, #10)","image_url":"https:\/\/images.gr-assets.com\/books\/1368396677m\/213975.jpg","authors":"J.D. Robb, Susan Ericksen"},{"book_id":214332,"title":"The Case for Faith: A Journalist Investigates the Toughest Objections to Christianity","image_url":"https:\/\/images.gr-assets.com\/books\/1296487661m\/214332.jpg","authors":"Lee Strobel"},{"book_id":214333,"title":"The Case for a Creator: A Journalist Investigates Scientific Evidence That Points Toward God","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lee Strobel"},{"book_id":214579,"title":"The Story of B: An Adventure of the Mind and Spirit","image_url":"https:\/\/images.gr-assets.com\/books\/1403169485m\/214579.jpg","authors":"Daniel Quinn"},{"book_id":214614,"title":"Desert Solitaire","image_url":"https:\/\/images.gr-assets.com\/books\/1399583343m\/214614.jpg","authors":"Edward Abbey"},{"book_id":214856,"title":"Leven Thumps and the Gateway to Foo (Leven Thumps, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Obert Skye"},{"book_id":215492,"title":"Lord Edgware Dies (Hercule Poirot, #9)","image_url":"https:\/\/images.gr-assets.com\/books\/1375949065m\/215492.jpg","authors":"Agatha Christie"},{"book_id":215539,"title":"The Pilgrims of Rayne (Pendragon, #8)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"D.J. MacHale"},{"book_id":215540,"title":"The Quillan Games (Pendragon, #7)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"D.J. MacHale"},{"book_id":215541,"title":"The Reality Bug (Pendragon, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1431402995m\/215541.jpg","authors":"D.J. MacHale"},{"book_id":215542,"title":"The Rivers of Zadaa (Pendragon, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1432151614m\/215542.jpg","authors":"D.J. MacHale"},{"book_id":215543,"title":"The Lost City of Faar (Pendragon, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1431400965m\/215543.jpg","authors":"D.J. MacHale"},{"book_id":215631,"title":"Pay It Forward","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Catherine Ryan Hyde"},{"book_id":215643,"title":"Visions of Heat (Psy-Changeling #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nalini Singh"},{"book_id":216048,"title":"Thank You, Mr. Falker","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Patricia Polacco"},{"book_id":216131,"title":"Secret Prey (Lucas Davenport, #9)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Sandford"},{"book_id":216304,"title":"A Woman After God's Own Heart","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Elizabeth George"},{"book_id":216363,"title":"The Man in the High Castle","image_url":"https:\/\/images.gr-assets.com\/books\/1448756803m\/216363.jpg","authors":"Philip K. Dick"},{"book_id":216377,"title":"VALIS (VALIS Trilogy, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Philip K. Dick"},{"book_id":216422,"title":"The Last Command","image_url":"https:\/\/images.gr-assets.com\/books\/1451092026m\/216422.jpg","authors":"Timothy Zahn"},{"book_id":216442,"title":"Dark Force Rising","image_url":"https:\/\/images.gr-assets.com\/books\/1451092000m\/216442.jpg","authors":"Timothy Zahn"},{"book_id":216443,"title":"Heir to the Empire (Star Wars: The Thrawn Trilogy #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1398253847m\/216443.jpg","authors":"Timothy Zahn"},{"book_id":217376,"title":"The Wallflower, Vol. 1 (The Wallflower, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1320462572m\/217376.jpg","authors":"Tomoko Hayakawa, David Ury"},{"book_id":217432,"title":"Between Sisters","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kristin Hannah"},{"book_id":217433,"title":"Home Again","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kristin Hannah"},{"book_id":217436,"title":"On Mystic Lake","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kristin Hannah"},{"book_id":218357,"title":"The Space Between Us","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Thrity Umrigar"},{"book_id":218427,"title":"Gateway (Heechee Saga, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1441698400m\/218427.jpg","authors":"Frederik Pohl"},{"book_id":218467,"title":"Lucifer's Hammer","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Larry Niven, Jerry Pournelle"},{"book_id":218659,"title":"Everything That Rises Must Converge: Stories","image_url":"https:\/\/images.gr-assets.com\/books\/1412859621m\/218659.jpg","authors":"Flannery O'Connor, Robert Fitzgerald"},{"book_id":219205,"title":"Lord Foul's Bane (The Chronicles of Thomas Covenant the Unbeliever, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1333217655m\/219205.jpg","authors":"Stephen R. Donaldson"},{"book_id":219499,"title":"The Strange Case of Dr. Jekyll and Mr. Hyde and Other Stories ","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert Louis Stevenson, Jenny Davidson"},{"book_id":219535,"title":"The Other","image_url":"https:\/\/images.gr-assets.com\/books\/1326661013m\/219535.jpg","authors":"Thomas Tryon"},{"book_id":219919,"title":"The Robe","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lloyd C. Douglas"},{"book_id":220826,"title":"K\u00fcrk Mantolu Madonna","image_url":"https:\/\/images.gr-assets.com\/books\/1362477552m\/220826.jpg","authors":"Sabahattin Ali"},{"book_id":220968,"title":"One Shot (Jack Reacher, #9)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lee Child"},{"book_id":220969,"title":"Die Trying (Jack Reacher, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1377633008m\/220969.jpg","authors":"Lee Child"},{"book_id":220970,"title":"Tripwire (Jack Reacher, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lee Child"},{"book_id":221059,"title":"JPod","image_url":"https:\/\/images.gr-assets.com\/books\/1316729451m\/221059.jpg","authors":"Douglas Coupland"},{"book_id":221298,"title":"The Gods of War (Emperor, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Conn Iggulden"},{"book_id":222078,"title":"The Story of Art","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"E.H. Gombrich"},{"book_id":222458,"title":"Rules","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Cynthia Lord"},{"book_id":222576,"title":"The Grey King (The Dark Is Rising, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Susan Cooper"},{"book_id":223380,"title":"Stories of Your Life and Others","image_url":"https:\/\/images.gr-assets.com\/books\/1356138316m\/223380.jpg","authors":"Ted Chiang"},{"book_id":223462,"title":"Gods in Alabama","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Joshilyn Jackson"},{"book_id":223838,"title":"In His Steps","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Charles M. Sheldon"},{"book_id":224410,"title":"Dracula (Marvel Illustrated)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Roy Thomas, Dick Giordano, Mark D. Beazley, Bram Stoker"},{"book_id":224500,"title":"Point Blank (Alex Rider, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1375494413m\/224500.jpg","authors":"Anthony Horowitz"},{"book_id":225038,"title":"Half Magic (Tales of Magic, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Edward Eager, N.M. Bodecker"},{"book_id":225343,"title":"Heartburn","image_url":"https:\/\/images.gr-assets.com\/books\/1386647458m\/225343.jpg","authors":"Nora Ephron"},{"book_id":225545,"title":"A Color of His Own","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Leo Lionni"},{"book_id":225774,"title":"National Velvet","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Enid Bagnold"},{"book_id":226004,"title":"A Deepness in the Sky (Zones of Thought, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1217218691m\/226004.jpg","authors":"Vernor Vinge"},{"book_id":226162,"title":"The Omen","image_url":"https:\/\/images.gr-assets.com\/books\/1421963974m\/226162.jpg","authors":"David Seltzer"},{"book_id":226315,"title":"The Next Big Thing","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Johanna Edwards"},{"book_id":226378,"title":"A Hero of Our Time","image_url":"https:\/\/images.gr-assets.com\/books\/1344023178m\/226378.jpg","authors":"Mikhail Lermontov, Paul Foote"},{"book_id":226706,"title":"If There Be Thorns (Dollanganger, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1321684186m\/226706.jpg","authors":"V.C. Andrews"},{"book_id":226709,"title":"Petals on the Wind (Dollanganger, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"V.C. Andrews"},{"book_id":226791,"title":"Total Control","image_url":"https:\/\/images.gr-assets.com\/books\/1344266875m\/226791.jpg","authors":"David Baldacci"},{"book_id":226858,"title":"What We Keep ","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Elizabeth Berg"},{"book_id":227265,"title":"Ishmael:A Novel","image_url":"https:\/\/images.gr-assets.com\/books\/1388180479m\/227265.jpg","authors":"Daniel Quinn"},{"book_id":227280,"title":"I Do -- But I Don't","image_url":"https:\/\/images.gr-assets.com\/books\/1480111926m\/227280.jpg","authors":"Cara Lockwood"},{"book_id":227443,"title":"Bridget Jones's Diary (Bridget Jones, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1292060045m\/227443.jpg","authors":"Helen Fielding"},{"book_id":227454,"title":"The Legacy (Forgotten Realms: Legacy of the Drow, #1; Legend of Drizzt, #7)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"R.A. Salvatore"},{"book_id":227463,"title":"A Clockwork Orange","image_url":"https:\/\/images.gr-assets.com\/books\/1348339306m\/227463.jpg","authors":"Anthony Burgess"},{"book_id":227492,"title":"Friends and Lovers","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Eric Jerome Dickey"},{"book_id":227570,"title":"Lady Cottington's Pressed Fairy Book","image_url":"https:\/\/images.gr-assets.com\/books\/1408938052m\/227570.jpg","authors":"Terry Jones, Brian Froud"},{"book_id":227571,"title":"Peace Like a River","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Leif Enger"},{"book_id":227590,"title":"The Other Daughter","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lisa Gardner"},{"book_id":227593,"title":"Three Junes","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Julia Glass"},{"book_id":227603,"title":"Prozac Nation","image_url":"https:\/\/images.gr-assets.com\/books\/1282607176m\/227603.jpg","authors":"Elizabeth Wurtzel"},{"book_id":227651,"title":"Among the Hidden (Shadow Children, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Margaret Peterson Haddix"},{"book_id":227658,"title":"Running Out of Time","image_url":"https:\/\/images.gr-assets.com\/books\/1408913584m\/227658.jpg","authors":"Margaret Peterson Haddix"},{"book_id":227711,"title":"I Know This Much Is True","image_url":"https:\/\/images.gr-assets.com\/books\/1373532198m\/227711.jpg","authors":"Wally Lamb"},{"book_id":227729,"title":"The Coffin Dancer (Lincoln Rhyme, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jeffery Deaver"},{"book_id":227778,"title":"Charlie Bone and the Time Twister (The Children of the Red King, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jenny Nimmo"},{"book_id":227865,"title":"The Eternity Code (Artemis Fowl, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1327945417m\/227865.jpg","authors":"Eoin Colfer"},{"book_id":227941,"title":"Jemima J","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jane Green"},{"book_id":228063,"title":"xxxHolic, Vol. 1 (xxxHOLiC, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"CLAMP, William Flanagan"},{"book_id":228194,"title":"The Green Mile, Part 2: The Mouse on the Mile","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Stephen King"},{"book_id":228198,"title":"The Green Mile, Part 3: Coffey's Hands","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Stephen King"},{"book_id":228199,"title":"The Green Mile, Part 4: The Bad Death of Eduard Delacroix","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Stephen King"},{"book_id":228200,"title":"The Green Mile, Part 5: Night Journey","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Stephen King"},{"book_id":228220,"title":"The House of Thunder","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Leigh Nichols, Dean Koontz"},{"book_id":228221,"title":"The Mask","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Owen West, Dean Koontz"},{"book_id":228258,"title":"Tribulation Force (Left Behind, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tim LaHaye, Jerry B. Jenkins"},{"book_id":228261,"title":"Soul Harvest: The World Takes Sides (Left Behind, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1406513506m\/228261.jpg","authors":"Tim LaHaye, Jerry B. Jenkins"},{"book_id":228296,"title":"Rosemary's Baby","image_url":"https:\/\/images.gr-assets.com\/books\/1327878603m\/228296.jpg","authors":"Ira Levin"},{"book_id":228333,"title":"The Nanny Diaries (Nanny, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Emma McLaughlin, Nicola Kraus"},{"book_id":228534,"title":"The Weight of Water","image_url":"https:\/\/images.gr-assets.com\/books\/1327936566m\/228534.jpg","authors":"Anita Shreve"},{"book_id":228560,"title":"Sophie's Choice","image_url":"https:\/\/images.gr-assets.com\/books\/1356714742m\/228560.jpg","authors":"William Styron"},{"book_id":228630,"title":"Black Boy","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Richard Wright, Jerry W. Ward Jr."},{"book_id":228665,"title":"The Eye of the World (Wheel of Time, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1337818095m\/228665.jpg","authors":"Robert Jordan"},{"book_id":228696,"title":"Owl Moon","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jane Yolen, John Schoenherr"},{"book_id":228765,"title":"Zen of Seeing: Seeing\/Drawing as Meditation","image_url":"https:\/\/images.gr-assets.com\/books\/1403191163m\/228765.jpg","authors":"Frederick Franck"},{"book_id":228990,"title":"The Illearth War (The Chronicles of Thomas Covenant the Unbeliever, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1387037078m\/228990.jpg","authors":"Stephen R. Donaldson"},{"book_id":228992,"title":"White Gold Wielder (The Second Chronicles of Thomas Covenant, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1329385743m\/228992.jpg","authors":"Stephen R. Donaldson"},{"book_id":229123,"title":"Christy","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Catherine Marshall"},{"book_id":229145,"title":"Cardcaptor Sakura, Vol. 1 (Cardcaptor Sakura, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1451030958m\/229145.jpg","authors":"CLAMP, Maria Simpson"},{"book_id":229149,"title":"Cardcaptor Sakura: Master of the Clow, Vol. 1 (Cardcaptor Sakura, #7)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"CLAMP, Anita Sengupta"},{"book_id":229432,"title":"The Pickwick Papers","image_url":"https:\/\/images.gr-assets.com\/books\/1360795072m\/229432.jpg","authors":"Charles Dickens"},{"book_id":230003,"title":"Daring to Dream (Dream Trilogy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1309200789m\/230003.jpg","authors":"Nora Roberts"},{"book_id":231560,"title":"Uncle Vanya","image_url":"https:\/\/images.gr-assets.com\/books\/1443337895m\/231560.jpg","authors":"Anton Chekhov"},{"book_id":231562,"title":"The Enemy (Jack Reacher, #8)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lee Child"},{"book_id":231585,"title":"Small Sacrifices: A True Story of Passion and Murder","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ann Rule"},{"book_id":231604,"title":"D\u00e9j\u00e0 Dead (Temperance Brennan, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1334157601m\/231604.jpg","authors":"Kathy Reichs"},{"book_id":231804,"title":"The Outsiders","image_url":"https:\/\/images.gr-assets.com\/books\/1442129426m\/231804.jpg","authors":"S.E. Hinton"},{"book_id":231821,"title":"The Incredible Journey","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sheila Burnford"},{"book_id":231850,"title":"Corduroy","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Don Freeman"},{"book_id":231989,"title":"The Wayfarer Redemption (Wayfarer Redemption, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1312033613m\/231989.jpg","authors":"Sara Douglass"},{"book_id":232109,"title":"The Mouse and the Motorcycle (Ralph S. Mouse, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1348990967m\/232109.jpg","authors":"Beverly Cleary, Louis Darling, Tracy Dockray"},{"book_id":232123,"title":"All That Remains (Kay Scarpetta, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1341835948m\/232123.jpg","authors":"Patricia Cornwell"},{"book_id":232145,"title":"Unnatural Exposure (Kay Scarpetta, #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1383293921m\/232145.jpg","authors":"Patricia Cornwell"},{"book_id":232268,"title":"The Locket (The Locket, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Richard Paul Evans"},{"book_id":232576,"title":"Harriet the Spy (Harriet the Spy #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1320540825m\/232576.jpg","authors":"Louise Fitzhugh"},{"book_id":232577,"title":"Gorillas in the Mist","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dian Fossey"},{"book_id":232958,"title":"I Love You Through and Through","image_url":"https:\/\/images.gr-assets.com\/books\/1328866587m\/232958.jpg","authors":"Bernadette Rossetti-Shustak, Caroline Jayne Church"},{"book_id":233044,"title":"The Shop on Blossom Street (Blossom Street, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1459531418m\/233044.jpg","authors":"Debbie Macomber"},{"book_id":233093,"title":"The Cat in the Hat","image_url":"https:\/\/images.gr-assets.com\/books\/1468890477m\/233093.jpg","authors":"Dr. Seuss"},{"book_id":233389,"title":"The Lives of the Artists","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Giorgio Vasari, Julia Conway Bondanella, Peter Bondanella"},{"book_id":233637,"title":"The Hidden Staircase (Nancy Drew #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1172964121m\/233637.jpg","authors":"Carolyn Keene, Mildred Benson"},{"book_id":233649,"title":"The Great Hunt (Wheel of Time, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert Jordan"},{"book_id":233667,"title":"Firestarter","image_url":"https:\/\/images.gr-assets.com\/books\/1394208032m\/233667.jpg","authors":"Stephen King"},{"book_id":233691,"title":"The Far Side Gallery 3","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Gary Larson"},{"book_id":233722,"title":"Kristy's Great Idea (The Baby-Sitters Club, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ann M. Martin"},{"book_id":233818,"title":"Island of the Blue Dolphins (Island of the Blue Dolphins, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1475166260m\/233818.jpg","authors":"Scott O'Dell"},{"book_id":234184,"title":"Stone of Tears (Sword of Truth, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1478930875m\/234184.jpg","authors":"Terry Goodkind"},{"book_id":234225,"title":"Dune (Dune Chronicles #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1434908555m\/234225.jpg","authors":"Frank Herbert"},{"book_id":234489,"title":"The Uplift War (The Uplift Saga, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1375272637m\/234489.jpg","authors":"David Brin"},{"book_id":234501,"title":"Startide Rising (The Uplift Saga, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1476445711m\/234501.jpg","authors":"David Brin"},{"book_id":234724,"title":"Shadow Puppets (Ender's Shadow, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Orson Scott Card"},{"book_id":235127,"title":"No Talking","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Andrew Clements"},{"book_id":235718,"title":"Succubus Blues (Georgina Kincaid, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1361624810m\/235718.jpg","authors":"Richelle Mead"},{"book_id":235773,"title":"Waiting","image_url":"https:\/\/images.gr-assets.com\/books\/1327881519m\/235773.jpg","authors":"Ha Jin"},{"book_id":236056,"title":"There's a Boy in the Girls' Bathroom","image_url":"https:\/\/images.gr-assets.com\/books\/1346870062m\/236056.jpg","authors":"Louis Sachar"},{"book_id":236093,"title":"The Wonderful Wizard of Oz (Oz, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1398003737m\/236093.jpg","authors":"L. Frank Baum, W.W. Denslow"},{"book_id":236208,"title":"Night Chills","image_url":"https:\/\/images.gr-assets.com\/books\/1308460533m\/236208.jpg","authors":"Dean Koontz"},{"book_id":236862,"title":"Death Without Company (Walt Longmire, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1349807862m\/236862.jpg","authors":"Craig Johnson"},{"book_id":237114,"title":"Moonlight Becomes You","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mary Higgins Clark"},{"book_id":237209,"title":"In the Woods (Dublin Murder Squad, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1348442606m\/237209.jpg","authors":"Tana French"},{"book_id":237320,"title":"So B. It","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sarah Weeks"},{"book_id":237665,"title":"Kitten's First Full Moon","image_url":"https:\/\/images.gr-assets.com\/books\/1400866970m\/237665.jpg","authors":"Kevin Henkes"},{"book_id":238125,"title":"Holiday in Death (In Death, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1389932347m\/238125.jpg","authors":"J.D. Robb"},{"book_id":238126,"title":"Immortal in Death (In Death, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"J.D. Robb"},{"book_id":238127,"title":"Seduction in Death (In Death, #13)","image_url":"https:\/\/images.gr-assets.com\/books\/1305123885m\/238127.jpg","authors":"J.D. Robb"},{"book_id":238137,"title":"Purity in Death (In Death, #15)","image_url":"https:\/\/images.gr-assets.com\/books\/1305124004m\/238137.jpg","authors":"J.D. Robb"},{"book_id":238139,"title":"Imitation in Death (In Death, #17)","image_url":"https:\/\/images.gr-assets.com\/books\/1305124047m\/238139.jpg","authors":"J.D. Robb"},{"book_id":238140,"title":"Reunion in Death (In Death, #14)","image_url":"https:\/\/images.gr-assets.com\/books\/1305123931m\/238140.jpg","authors":"J.D. Robb"},{"book_id":238141,"title":"Memory in Death (In Death, #22)","image_url":"https:\/\/images.gr-assets.com\/books\/1299457743m\/238141.jpg","authors":"J.D. Robb"},{"book_id":238142,"title":"Visions in Death (In Death, #19)","image_url":"https:\/\/images.gr-assets.com\/books\/1390188401m\/238142.jpg","authors":"J.D. Robb"},{"book_id":238360,"title":"Megan Meade's Guide to the McGowan Boys","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kate Brian"},{"book_id":239102,"title":"Starless Night (Forgotten Realms: Legacy of the Drow, #2; Legend of Drizzt, #8)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"R.A. Salvatore"},{"book_id":239103,"title":"Siege of Darkness (Forgotten Realms: Legacy of the Drow, #3; Legend of Drizzt, #9)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"R.A. Salvatore"},{"book_id":239105,"title":"The Silent Blade (Forgotten Realms: Paths of Darkness, #1; Legend of Drizzt, #11)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"R.A. Salvatore"},{"book_id":239107,"title":"Sea of Swords (Forgotten Realms: Paths of Darkness, #4; Legend of Drizzt, #13)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"R.A. Salvatore"},{"book_id":239109,"title":"The Lone Drow (Forgotten Realms: Hunter's Blades, #2; Legend of Drizzt, #15)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"R.A. Salvatore"},{"book_id":239186,"title":"Isaac's Storm: A Man, a Time, and the Deadliest Hurricane in History","image_url":"https:\/\/images.gr-assets.com\/books\/1403179592m\/239186.jpg","authors":"Erik Larson"},{"book_id":239239,"title":"The Prestige","image_url":"https:\/\/images.gr-assets.com\/books\/1414195709m\/239239.jpg","authors":"Christopher Priest"},{"book_id":239381,"title":"Just a Mess (Little Critter)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mercer Mayer"},{"book_id":239388,"title":"Just Me and My Dad (Little Critter)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mercer Mayer"},{"book_id":239399,"title":"The Ghost Brigades (Old Man's War, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1403295928m\/239399.jpg","authors":"John Scalzi"},{"book_id":239509,"title":"Women Who Love Too Much: When You Keep Wishing and Hoping He'll Change","image_url":"https:\/\/images.gr-assets.com\/books\/1173029153m\/239509.jpg","authors":"Robin Norwood"},{"book_id":239810,"title":"The Best Christmas Pageant Ever (The Herdmans #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Barbara Robinson"},{"book_id":239917,"title":"Sign of the Unicorn (The Chronicles of Amber #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1368213756m\/239917.jpg","authors":"Roger Zelazny"},{"book_id":240130,"title":"The Paper Bag Princess","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert Munsch, Michael Martchenko"},{"book_id":240976,"title":"The Book of Laughter and Forgetting","image_url":"https:\/\/images.gr-assets.com\/books\/1446568718m\/240976.jpg","authors":"Milan Kundera, Aaron Asher"},{"book_id":241387,"title":"When Crickets Cry","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Charles Martin"},{"book_id":241823,"title":"Women Who Run With the Wolves: Myths and Stories of the Wild Woman Archetype","image_url":"https:\/\/images.gr-assets.com\/books\/1500974527m\/241823.jpg","authors":"Clarissa Pinkola Est\u00e9s"},{"book_id":241934,"title":"Sunset Express (Elvis Cole, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1344369358m\/241934.jpg","authors":"Robert Crais"},{"book_id":241936,"title":"The Last Detective (Elvis Cole, #9)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert Crais"},{"book_id":241969,"title":"Between, Georgia","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Joshilyn Jackson"},{"book_id":242006,"title":"Running with Scissors","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Augusten Burroughs"},{"book_id":242157,"title":"How to Talk to a Widower","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jonathan Tropper"},{"book_id":242472,"title":"The Black Swan: The Impact of the Highly Improbable","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nassim Nicholas Taleb"},{"book_id":243298,"title":"The Shining Ones (The Tamuli, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1403187182m\/243298.jpg","authors":"David Eddings"},{"book_id":243308,"title":"Steel Magnolias (DPS Acting Edition)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert Harling"},{"book_id":243598,"title":"The Sheltering Sky","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Paul Bowles"},{"book_id":243601,"title":"Imperium: A Novel of Ancient Rome (Cicero, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert Harris"},{"book_id":243685,"title":"A History of Western Philosophy","image_url":"https:\/\/images.gr-assets.com\/books\/1344399003m\/243685.jpg","authors":"Bertrand Russell"},{"book_id":243705,"title":"The Collector","image_url":"https:\/\/images.gr-assets.com\/books\/1394828024m\/243705.jpg","authors":"John Fowles"},{"book_id":244102,"title":"Open Season (Joe Pickett, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1255789732m\/244102.jpg","authors":"C.J. Box"},{"book_id":244115,"title":"Skippyjon Jones in Mummy Trouble (Skippyjon Jones, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Judy Schachner"},{"book_id":244383,"title":"Ask and It Is Given: Learning to Manifest Your Desires","image_url":"https:\/\/images.gr-assets.com\/books\/1390062620m\/244383.jpg","authors":"Esther Hicks, Jerry Hicks, Wayne W. Dyer"},{"book_id":244572,"title":"Charmed Life (Chrestomanci, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1396706429m\/244572.jpg","authors":"Diana Wynne Jones"},{"book_id":245700,"title":"The Art of Amy Brown","image_url":"https:\/\/images.gr-assets.com\/books\/1328765892m\/245700.jpg","authors":"Amy Brown, Charles de Lint"},{"book_id":246225,"title":"Strong Poison (Lord Peter Wimsey, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1486963427m\/246225.jpg","authors":"Dorothy L. Sayers"},{"book_id":246468,"title":"The Jordan Rules","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sam Smith, Doug Grud"},{"book_id":246546,"title":"An Old-Fashioned Girl","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Louisa May Alcott"},{"book_id":248470,"title":"River Secrets (The Books of Bayern, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1362875702m\/248470.jpg","authors":"Shannon Hale"},{"book_id":248482,"title":"Enna Burning (The Books of Bayern, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1388286936m\/248482.jpg","authors":"Shannon Hale"},{"book_id":248483,"title":"Austenland (Austenland, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Shannon Hale"},{"book_id":248484,"title":"Book of a Thousand Days","image_url":"https:\/\/images.gr-assets.com\/books\/1362875998m\/248484.jpg","authors":"Shannon Hale, James Noel Smith"},{"book_id":248596,"title":"Something Wicked This Way Comes (Green Town, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1409596011m\/248596.jpg","authors":"Ray Bradbury"},{"book_id":248682,"title":"Key of Knowledge (Key Trilogy, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1282136458m\/248682.jpg","authors":"Nora Roberts"},{"book_id":248704,"title":"It's Kind of a Funny Story","image_url":"https:\/\/images.gr-assets.com\/books\/1420629730m\/248704.jpg","authors":"Ned Vizzini"},{"book_id":248787,"title":"The World Without Us","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Alan Weisman"},{"book_id":248871,"title":"Berserk, Vol. 1 (Berserk, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1501000017m\/248871.jpg","authors":"Kentaro Miura, Jason DeAngelis"},{"book_id":249042,"title":"Darkness Visible: A Memoir of Madness","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"William Styron"},{"book_id":249747,"title":"Artemis Fowl (Artemis Fowl, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327945104m\/249747.jpg","authors":"Eoin Colfer"},{"book_id":250024,"title":"The City and the Stars","image_url":"https:\/\/images.gr-assets.com\/books\/1340242824m\/250024.jpg","authors":"Arthur C. Clarke"},{"book_id":250729,"title":"The Vanishing Act of Esme Lennox","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Maggie O'Farrell"},{"book_id":251446,"title":"Glengarry Glen Ross","image_url":"https:\/\/images.gr-assets.com\/books\/1396078804m\/251446.jpg","authors":"David Mamet"},{"book_id":251519,"title":"Good Grief","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lolly Winston"},{"book_id":251665,"title":"Hotel du Lac","image_url":"https:\/\/images.gr-assets.com\/books\/1346713260m\/251665.jpg","authors":"Anita Brookner"},{"book_id":251688,"title":"Breakfast at Tiffany's","image_url":"https:\/\/images.gr-assets.com\/books\/1477015353m\/251688.jpg","authors":"Truman Capote"},{"book_id":251762,"title":"Bee Season","image_url":"https:\/\/images.gr-assets.com\/books\/1371912051m\/251762.jpg","authors":"Myla Goldberg"},{"book_id":251964,"title":"The Black Lyon (Montgomery\/Taggert, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jude Deveraux"},{"book_id":252499,"title":"The Queen's Fool (The Plantagenet and Tudor Novels, #12)","image_url":"https:\/\/images.gr-assets.com\/books\/1399204116m\/252499.jpg","authors":"Philippa Gregory"},{"book_id":252577,"title":"Angela's Ashes (Frank McCourt, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Frank McCourt"},{"book_id":252938,"title":"Twilight (Warriors: The New Prophecy, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1363786463m\/252938.jpg","authors":"Erin Hunter"},{"book_id":252999,"title":"Dark Legend (Dark, #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1330425833m\/252999.jpg","authors":"Christine Feehan"},{"book_id":253058,"title":"Temple of the Winds (Sword of Truth, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Terry Goodkind, Dick Hill"},{"book_id":253106,"title":"The Earth, My Butt, and Other Big Round Things","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Carolyn Mackler"},{"book_id":253264,"title":"Inherit the Wind","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jerome Lawrence, Robert E. Lee"},{"book_id":254308,"title":"Oblomov","image_url":"https:\/\/images.gr-assets.com\/books\/1456384296m\/254308.jpg","authors":"Ivan Goncharov, Stephen Pearl, Galya Diment"},{"book_id":254799,"title":"The Creative Habit: Learn It and Use It for Life","image_url":"https:\/\/images.gr-assets.com\/books\/1477230182m\/254799.jpg","authors":"Twyla Tharp"},{"book_id":255127,"title":"The Fifth Discipline: The Art & Practice of The Learning Organization","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Peter M. Senge"},{"book_id":255458,"title":"Systematic Theology: An Introduction to Biblical Doctrine","image_url":"https:\/\/images.gr-assets.com\/books\/1328224325m\/255458.jpg","authors":"Wayne A. Grudem"},{"book_id":256008,"title":"Lonesome Dove","image_url":"https:\/\/images.gr-assets.com\/books\/1378573063m\/256008.jpg","authors":"Larry McMurtry"},{"book_id":256566,"title":"Everything Is Illuminated","image_url":"https:\/\/images.gr-assets.com\/books\/1479774440m\/256566.jpg","authors":"Jonathan Safran Foer"},{"book_id":256598,"title":"Curse of the Bane (The Last Apprentice \/ Wardstone Chronicles, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Joseph Delaney, Patrick Arrasmith"},{"book_id":256683,"title":"City of Bones (The Mortal Instruments, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1432730315m\/256683.jpg","authors":"Cassandra Clare"},{"book_id":257257,"title":"The 20th Century Art Book","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Phaidon Press"},{"book_id":257845,"title":"True Grit","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Charles Portis"},{"book_id":257990,"title":"G is for Gumshoe (Kinsey Millhone, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1315138148m\/257990.jpg","authors":"Sue Grafton"},{"book_id":259538,"title":"Outbreak (Dr. Marissa Blumenthal, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1344166275m\/259538.jpg","authors":"Robin Cook"},{"book_id":259836,"title":"Dragons of Autumn Twilight (Dragonlance: Chronicles, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1390668127m\/259836.jpg","authors":"Margaret Weis, Tracy Hickman"},{"book_id":260025,"title":"Test of the Twins (Dragonlance: Legends, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Margaret Weis, Tracy Hickman"},{"book_id":260791,"title":"The Pursuit of Holiness","image_url":"https:\/\/images.gr-assets.com\/books\/1372784705m\/260791.jpg","authors":"Jerry Bridges, Foster W. Cline, Jim Fay"},{"book_id":261083,"title":"Heretic (The Grail Quest, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1382119406m\/261083.jpg","authors":"Bernard Cornwell"},{"book_id":261122,"title":"The Dead Girls' Dance (The Morganville Vampires, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rachel Caine"},{"book_id":261161,"title":"Dial L for Loser (The Clique, #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lisi Harrison"},{"book_id":261240,"title":"The Cask of Amontillado","image_url":"https:\/\/images.gr-assets.com\/books\/1327936575m\/261240.jpg","authors":"Edgar Allan Poe"},{"book_id":261243,"title":"History of the Peloponnesian War","image_url":"https:\/\/images.gr-assets.com\/books\/1422072332m\/261243.jpg","authors":"Thucydides, Rex Warner, Moses I. Finley"},{"book_id":261331,"title":"The Tea Rose (The Tea Rose, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327888567m\/261331.jpg","authors":"Jennifer Donnelly"},{"book_id":261604,"title":"Rhapsody: Child of Blood (Symphony of Ages, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1453703106m\/261604.jpg","authors":"Elizabeth Haydon"},{"book_id":261689,"title":"The Grand Sophy","image_url":"https:\/\/images.gr-assets.com\/books\/1414731822m\/261689.jpg","authors":"Georgette Heyer"},{"book_id":262228,"title":"O is for Outlaw (Kinsey Millhone, #15)","image_url":"https:\/\/images.gr-assets.com\/books\/1403183790m\/262228.jpg","authors":"Sue Grafton"},{"book_id":262229,"title":"Q is for Quarry (Kinsey Millhone, #17)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sue Grafton"},{"book_id":262430,"title":"Gregor the Overlander (Underland Chronicles, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Suzanne Collins"},{"book_id":262545,"title":"The Whistling Season","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ivan Doig"},{"book_id":262731,"title":"The Definitive Book of Body Language","image_url":"https:\/\/images.gr-assets.com\/books\/1320537802m\/262731.jpg","authors":"Allan Pease, Barbara Pease"},{"book_id":263050,"title":"The Death and Life of Charlie St. Cloud","image_url":"https:\/\/images.gr-assets.com\/books\/1329827169m\/263050.jpg","authors":"Ben Sherwood"},{"book_id":263145,"title":"Vampire Knight, Vol. 1 (Vampire Knight, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1329232329m\/263145.jpg","authors":"Matsuri Hino, Tomo Kimura"},{"book_id":263147,"title":"Vampire Kisses (Vampire Kisses, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1345950574m\/263147.jpg","authors":"Ellen Schreiber"},{"book_id":263148,"title":"Vampireville (Vampire Kisses, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ellen Schreiber"},{"book_id":263149,"title":"Single White Vampire (Argeneau #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1354343077m\/263149.jpg","authors":"Lynsay Sands"},{"book_id":263171,"title":"Dance with a Vampire (Vampire Kisses, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1443971681m\/263171.jpg","authors":"Ellen Schreiber"},{"book_id":263172,"title":"Kissing Coffins (Vampire Kisses, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ellen Schreiber"},{"book_id":263173,"title":"Vampire Knight, Vol. 2 (Vampire Knight, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1329259095m\/263173.jpg","authors":"Matsuri Hino, Tomo Kimura"},{"book_id":263179,"title":"How to Marry a Millionaire Vampire (Love at Stake, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1343779854m\/263179.jpg","authors":"Kerrelyn Sparks"},{"book_id":264158,"title":"The Raven","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Edgar Allan Poe, Gustave Dor\u00e9"},{"book_id":264778,"title":"Sacajawea (Lewis & Clark Expedition)","image_url":"https:\/\/images.gr-assets.com\/books\/1315509057m\/264778.jpg","authors":"Anna Lee Waldo"},{"book_id":265205,"title":"Life Application Study Bible: NIV","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anonymous, Ronald A. Beers, Ronald A. Beers"},{"book_id":265264,"title":"One","image_url":"https:\/\/images.gr-assets.com\/books\/1356137029m\/265264.jpg","authors":"Richard Bach"},{"book_id":265650,"title":"Shakespeare's Romeo and Juliet","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael Rosen, Jane Ray"},{"book_id":266607,"title":"Valiant (Modern Faerie Tales #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1332713354m\/266607.jpg","authors":"Holly Black"},{"book_id":266765,"title":"Girls in Love (Girls, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1438919442m\/266765.jpg","authors":"Jacqueline Wilson"},{"book_id":266904,"title":"The Penderwicks: A Summer Tale of Four Sisters, Two Rabbits, and a Very Interesting Boy (The Penderwicks #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1320508900m\/266904.jpg","authors":"Jeanne Birdsall"},{"book_id":267243,"title":"Ironweed","image_url":"https:\/\/images.gr-assets.com\/books\/1408926209m\/267243.jpg","authors":"William Kennedy"},{"book_id":267869,"title":"Silent in the Grave (Lady Julia Grey, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1483424891m\/267869.jpg","authors":"Deanna Raybourn"},{"book_id":267972,"title":"Wait Till Helen Comes","image_url":"https:\/\/images.gr-assets.com\/books\/1486692223m\/267972.jpg","authors":"Mary Downing Hahn"},{"book_id":268275,"title":"Chill Factor","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sandra Brown"},{"book_id":268559,"title":"Winter Moon","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dean Koontz"},{"book_id":268598,"title":"Loyalty in Death (In Death, #9)","image_url":"https:\/\/images.gr-assets.com\/books\/1458243301m\/268598.jpg","authors":"J.D. Robb, Susan Ericksen"},{"book_id":268601,"title":"Glory in Death (In Death, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1309282048m\/268601.jpg","authors":"J.D. Robb"},{"book_id":268602,"title":"Naked in Death (In Death, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1297783540m\/268602.jpg","authors":"J.D. Robb"},{"book_id":268604,"title":"Portrait in Death (In Death, #16)","image_url":"https:\/\/images.gr-assets.com\/books\/1483391474m\/268604.jpg","authors":"J.D. Robb"},{"book_id":268955,"title":"Mummies in the Morning (Magic Tree House, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1403192895m\/268955.jpg","authors":"Mary Pope Osborne, Salvatore Murdocca"},{"book_id":269322,"title":"The Raven and other poems","image_url":"https:\/\/images.gr-assets.com\/books\/1297913274m\/269322.jpg","authors":"Edgar Allan Poe, Philip Pullman"},{"book_id":269386,"title":"The Sweet Potato Queens' Book of Love","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jill Conner Browne"},{"book_id":269746,"title":"Catering to Nobody (A Goldy Bear Culinary Mystery, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1340227366m\/269746.jpg","authors":"Diane Mott Davidson"},{"book_id":269795,"title":"The Commitments","image_url":"https:\/\/images.gr-assets.com\/books\/1173298169m\/269795.jpg","authors":"Roddy Doyle"},{"book_id":270032,"title":"Seven Years in Tibet","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Heinrich Harrer"},{"book_id":270067,"title":"A Pocket for Corduroy","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Don Freeman"},{"book_id":270435,"title":"Heal Your Body: The Mental Causes for Physical Illness and the Metaphysical Way to Overcome Them","image_url":"https:\/\/images.gr-assets.com\/books\/1404193356m\/270435.jpg","authors":"Louise L. Hay"},{"book_id":270521,"title":"The Russia House","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John le Carr\u00e9"},{"book_id":270730,"title":"Crank (Crank, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ellen Hopkins"},{"book_id":270804,"title":"Glass (Crank, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ellen Hopkins"},{"book_id":270805,"title":"Impulse (Impulse, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ellen Hopkins"},{"book_id":270807,"title":"Burned (Burned, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ellen Hopkins"},{"book_id":271199,"title":"Fruits Basket, Vol. 1","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Natsuki Takaya, Alethea Nibley, Athena Nibley"},{"book_id":271264,"title":"Bleach, Volume 03","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tite Kubo"},{"book_id":272264,"title":"The Face Of Deception (Eve Duncan, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1314902854m\/272264.jpg","authors":"Iris Johansen"},{"book_id":272315,"title":"Keeping You a Secret","image_url":"https:\/\/images.gr-assets.com\/books\/1358442201m\/272315.jpg","authors":"Julie Anne Peters"},{"book_id":272607,"title":"Fade Away (Myron Bolitar #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Harlan Coben"},{"book_id":272895,"title":"The Black Stallion (The Black Stallion, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Walter Farley, Keith Ward"},{"book_id":273511,"title":"Midnight (Warriors: The New Prophecy, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Erin Hunter"},{"book_id":273512,"title":"Starlight (Warriors: The New Prophecy, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Erin Hunter"},{"book_id":275000,"title":"Fire and Ice (Warriors, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Erin Hunter"},{"book_id":275245,"title":"Pygmalion and Three Other Plays","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"George Bernard Shaw, John A. Bertolini"},{"book_id":275247,"title":"Little Lord Fauntleroy","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Frances Hodgson Burnett"},{"book_id":276287,"title":"M.C. Escher: The Graphic Work","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"M.C. Escher, Bruce Brooks Pfeiffer"},{"book_id":276289,"title":"The Magic Mirror of M.C. Escher","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bruno Ernst, M.C. Escher, John E. Brigham"},{"book_id":276342,"title":"Angel Falls","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kristin Hannah"},{"book_id":276877,"title":"Absolute Fear (New Orleans, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lisa Jackson"},{"book_id":277190,"title":"The Wrath of Mulgarath (The Spiderwick Chronicles, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1358702186m\/277190.jpg","authors":"Holly Black, Tony DiTerlizzi"},{"book_id":277191,"title":"The Ironwood Tree (The Spiderwick Chronicles, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1417954144m\/277191.jpg","authors":"Holly Black, Tony DiTerlizzi"},{"book_id":277397,"title":"Ellen Foster","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kaye Gibbons"},{"book_id":278102,"title":"Kaleidoscope","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Danielle Steel"},{"book_id":279561,"title":"Broken Angels (Takeshi Kovacs, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Richard K. Morgan"},{"book_id":279692,"title":"Miss Nelson Is Back (Miss Nelson, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Harry Allard, James Marshall"},{"book_id":280111,"title":"Holy Bible: New International Version","image_url":"https:\/\/images.gr-assets.com\/books\/1382581321m\/280111.jpg","authors":"Anonymous"},{"book_id":280125,"title":"The Orc King (Forgotten Realms: Transitions, #1; Legend of Drizzt, #17)","image_url":"https:\/\/images.gr-assets.com\/books\/1474922224m\/280125.jpg","authors":"R.A. Salvatore"},{"book_id":280240,"title":"Rumpelstiltskin","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Paul O. Zelinsky"},{"book_id":280277,"title":"Lucinda's Secret (The Spiderwick Chronicles, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1358701877m\/280277.jpg","authors":"Holly Black, Tony DiTerlizzi"},{"book_id":280366,"title":"Jar City (Inspector Erlendur, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1316129835m\/280366.jpg","authors":"Arnaldur Indri\u00f0ason, Bernard Scudder"},{"book_id":280410,"title":"The Nine: Inside the Secret World of the Supreme Court","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jeffrey Toobin"},{"book_id":280958,"title":"Sin City: Una Dura Despedida, #1 de 3","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Frank Miller"},{"book_id":281235,"title":"Bunnicula (Bunnicula, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Howe, Deborah Howe, Alan Daniel"},{"book_id":281350,"title":"Grave Secrets (Temperance Brennan, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kathy Reichs"},{"book_id":281433,"title":"Tick Tock","image_url":"https:\/\/images.gr-assets.com\/books\/1310582919m\/281433.jpg","authors":"Dean Koontz"},{"book_id":281512,"title":"He Chose the Nails","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Max Lucado"},{"book_id":282282,"title":"Skip Beat!, Vol. 01","image_url":"https:\/\/images.gr-assets.com\/books\/1173395297m\/282282.jpg","authors":"Yoshiki Nakamura, Tomo Kimura"},{"book_id":282356,"title":"Hana-Kimi, Vol. 1 (Hana-Kimi, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Hisaya Nakajo, David Ury"},{"book_id":282425,"title":"Boys Over Flowers: Hana Yori Dango, Vol. 1 (Boys Over Flowers, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1357464446m\/282425.jpg","authors":"Yoko Kamio, \u795e\u5c3e\u8449\u5b50"},{"book_id":283494,"title":"Ironside (Modern Faerie Tales, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1354844906m\/283494.jpg","authors":"Holly Black"},{"book_id":284195,"title":"Nantucket Nights","image_url":"https:\/\/images.gr-assets.com\/books\/1317065229m\/284195.jpg","authors":"Elin Hilderbrand"},{"book_id":284440,"title":"Skulduggery Pleasant (Skulduggery Pleasant, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1334279051m\/284440.jpg","authors":"Derek Landy, Tom Percival"},{"book_id":284698,"title":"Tokyo Mew Mew, Vol. 1 (Tokyo Mew Mew, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1371146694m\/284698.jpg","authors":"Mia Ikumi, Reiko Yoshida"},{"book_id":284996,"title":"The Complete Stories","image_url":"https:\/\/images.gr-assets.com\/books\/1489956381m\/284996.jpg","authors":"Flannery O'Connor"},{"book_id":285011,"title":"The Negotiator (O'Malley, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1406508359m\/285011.jpg","authors":"Dee Henderson"},{"book_id":285092,"title":"High Fidelity","image_url":"https:\/\/images.gr-assets.com\/books\/1327928082m\/285092.jpg","authors":"Nick Hornby"},{"book_id":285205,"title":"Blood Bound (Mercy Thompson, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1358229157m\/285205.jpg","authors":"Patricia Briggs"},{"book_id":285212,"title":"On the Prowl (Alpha & Omega, #0.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1422192630m\/285212.jpg","authors":"Patricia Briggs, Eileen Wilks, Karen Chance, Sunny"},{"book_id":285500,"title":"The Declaration of Independence and The Constitution of the United States","image_url":"https:\/\/images.gr-assets.com\/books\/1320508156m\/285500.jpg","authors":"Founding Fathers"},{"book_id":286507,"title":"Demon Lord of Karanda (The Malloreon, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1342528740m\/286507.jpg","authors":"David Eddings"},{"book_id":286957,"title":"The Yellow Wall-Paper","image_url":"https:\/\/images.gr-assets.com\/books\/1351778524m\/286957.jpg","authors":"Charlotte Perkins Gilman, Elaine Hedges"},{"book_id":287380,"title":"Kare Kano: His and Her Circumstances, Vol. 1","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Masami Tsuda, Darcy Lockman, Jack Niida"},{"book_id":287633,"title":"Dark Magic (Dark, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1327895205m\/287633.jpg","authors":"Christine Feehan"},{"book_id":287655,"title":"The Second Assistant: A Tale from the Bottom of the Hollywood Ladder","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Clare Naylor, Mimi Hare"},{"book_id":287861,"title":"Mortal Engines (The Hungry City Chronicles, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1352173057m\/287861.jpg","authors":"Philip Reeve"},{"book_id":288644,"title":"Q & A","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Vikas Swarup"},{"book_id":289029,"title":"Who Will Cry When You Die? Life Lessons from the Monk Who Sold His Ferrari","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robin S. Sharma"},{"book_id":289601,"title":"A Certain Slant of Light (Light, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Laura Whitcomb"},{"book_id":289644,"title":"Even Now (Lost Love, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Karen Kingsbury"},{"book_id":289695,"title":"Seeing Redd (The Looking Glass Wars, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1354846350m\/289695.jpg","authors":"Frank Beddor"},{"book_id":290039,"title":"Flyy Girl (Flyy Girl, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1415677404m\/290039.jpg","authors":"Omar Tyree"},{"book_id":290628,"title":"The Darkest Road (The Fionavar Tapestry, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Guy Gavriel Kay"},{"book_id":290882,"title":"The Upanishads: Translations from the Sanskrit","image_url":"https:\/\/images.gr-assets.com\/books\/1327881361m\/290882.jpg","authors":"Anonymous, Juan Mascar\u00f3"},{"book_id":291354,"title":"The Ruby Knight (The Elenium, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1487687688m\/291354.jpg","authors":"David Eddings"},{"book_id":291356,"title":"The Sapphire Rose (The Elenium, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Eddings"},{"book_id":291364,"title":"Curious George Rides a Bike","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"H.A. Rey"},{"book_id":292275,"title":"Hedda Gabler","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Henrik Ibsen, William Archer"},{"book_id":292408,"title":"Angle of Repose","image_url":"https:\/\/images.gr-assets.com\/books\/1329151576m\/292408.jpg","authors":"Wallace Stegner"},{"book_id":292740,"title":"Sleepers","image_url":"https:\/\/images.gr-assets.com\/books\/1327871596m\/292740.jpg","authors":"Lorenzo Carcaterra"},{"book_id":293101,"title":"The Amityville Horror","image_url":"https:\/\/images.gr-assets.com\/books\/1306079371m\/293101.jpg","authors":"Jay Anson"},{"book_id":293595,"title":"Chicka Chicka Boom Boom","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bill Martin Jr., John Archambault, Lois Ehlert"},{"book_id":293625,"title":"Child of God","image_url":"https:\/\/images.gr-assets.com\/books\/1320509467m\/293625.jpg","authors":"Cormac McCarthy"},{"book_id":294042,"title":"Black Order (Sigma Force, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1305960795m\/294042.jpg","authors":"James Rollins"},{"book_id":294043,"title":"Excavation","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Rollins"},{"book_id":294044,"title":"Ice Hunt","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Rollins"},{"book_id":294045,"title":"Deep Fathom","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Rollins"},{"book_id":294046,"title":"The Judas Strain (Sigma Force, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1367267369m\/294046.jpg","authors":"James Rollins"},{"book_id":294047,"title":"Amazonia","image_url":"https:\/\/images.gr-assets.com\/books\/1440044334m\/294047.jpg","authors":"James Rollins"},{"book_id":294081,"title":"The Mambo Kings Play Songs of Love","image_url":"https:\/\/images.gr-assets.com\/books\/1330072994m\/294081.jpg","authors":"Oscar Hijuelos"},{"book_id":294430,"title":"Lucky You","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Carl Hiaasen"},{"book_id":294613,"title":"Little Bear's Friend","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Else Holmelund Minarik, Maurice Sendak"},{"book_id":294951,"title":"Fiddler on the Roof","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Joseph Stein, Jerry Bock, Sheldon Harnick"},{"book_id":294963,"title":"Rurouni Kenshin, Vol. 1: Meiji Swordsman Romantic Story (Rurouni Kenshin, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nobuhiro Watsuki, Kenichiro Yagi"},{"book_id":295086,"title":"Rising Storm (Warriors, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Erin Hunter"},{"book_id":295132,"title":"Care of the Soul: A Guide for Cultivating Depth and Sacredness in Everyday Life","image_url":"https:\/\/images.gr-assets.com\/books\/1360677664m\/295132.jpg","authors":"Thomas Moore"},{"book_id":295169,"title":"The Wind Singer (Wind on Fire, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1293635554m\/295169.jpg","authors":"William Nicholson, Peter S\u00eds"},{"book_id":295305,"title":"Wolf Brother (Chronicles of Ancient Darkness, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michelle Paver, Geoff Taylor"},{"book_id":295649,"title":"Bloody Jack (Bloody Jack, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1392868382m\/295649.jpg","authors":"L.A. Meyer"},{"book_id":295834,"title":"The Unusual Suspects (The Sisters Grimm, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1276514128m\/295834.jpg","authors":"Michael Buckley, Peter Ferguson"},{"book_id":295961,"title":"The Eagle Has Landed (Liam Devlin, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jack Higgins"},{"book_id":296125,"title":"Stormy, Misty's Foal (Misty, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Marguerite Henry"},{"book_id":296264,"title":"The Black Arrow","image_url":"https:\/\/images.gr-assets.com\/books\/1328014614m\/296264.jpg","authors":"Robert Louis Stevenson"},{"book_id":296298,"title":"The Guns of Navarone","image_url":"https:\/\/images.gr-assets.com\/books\/1381683551m\/296298.jpg","authors":"Alistair MacLean"},{"book_id":296302,"title":"The Last Summer (of You and Me)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ann Brashares"},{"book_id":296662,"title":"Lies My Teacher Told Me","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James W. Loewen"},{"book_id":296942,"title":"Moonrise (Warriors: The New Prophecy, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Erin Hunter"},{"book_id":297134,"title":"The Things We Do for Love","image_url":"https:\/\/images.gr-assets.com\/books\/1320542055m\/297134.jpg","authors":"Kristin Hannah"},{"book_id":297135,"title":"Summer Island","image_url":"https:\/\/images.gr-assets.com\/books\/1320540976m\/297135.jpg","authors":"Kristin Hannah"},{"book_id":297186,"title":"L.A. Requiem (Elvis Cole, #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1328900044m\/297186.jpg","authors":"Robert Crais"},{"book_id":297249,"title":"The Boxcar Children (The Boxcar Children, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1173489650m\/297249.jpg","authors":"Gertrude Chandler Warner, L. Kate Deal"},{"book_id":297627,"title":"The League of Extraordinary Gentlemen, Vol. 1","image_url":"https:\/\/images.gr-assets.com\/books\/1327894724m\/297627.jpg","authors":"Alan Moore, Kevin O'Neill"},{"book_id":297673,"title":"The Brief Wondrous Life of Oscar Wao","image_url":"https:\/\/images.gr-assets.com\/books\/1391409748m\/297673.jpg","authors":"Junot D\u00edaz"},{"book_id":297792,"title":"The Slippery Slope (A Series of Unfortunate Events, #10)","image_url":"https:\/\/images.gr-assets.com\/books\/1343701012m\/297792.jpg","authors":"Lemony Snicket, Brett Helquist"},{"book_id":298137,"title":"Mao's Last Dancer","image_url":"https:\/\/images.gr-assets.com\/books\/1309282858m\/298137.jpg","authors":"Li Cunxin"},{"book_id":298230,"title":"Agnes Grey","image_url":"https:\/\/images.gr-assets.com\/books\/1400875530m\/298230.jpg","authors":"Anne Bront\u00eb, Angeline Goreau"},{"book_id":298275,"title":"Nausea","image_url":"https:\/\/images.gr-assets.com\/books\/1377674928m\/298275.jpg","authors":"Jean-Paul Sartre, Lloyd Alexander, Hayden Carruth"},{"book_id":298567,"title":"Revenge of the Witch (The Last Apprentice \/ Wardstone Chronicles, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1381497933m\/298567.jpg","authors":"Joseph Delaney, Patrick Arrasmith"},{"book_id":298568,"title":"Night of the Soul Stealer (The Last Apprentice \/ Wardstone Chronicles, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Joseph Delaney, Patrick Arrasmith"},{"book_id":298663,"title":"The Killer Inside Me","image_url":"https:\/\/images.gr-assets.com\/books\/1403187402m\/298663.jpg","authors":"Jim Thompson"},{"book_id":298730,"title":"Among the Barons (Shadow Children, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Margaret Peterson Haddix"},{"book_id":298816,"title":"Peace Child: An Unforgettable Story of Primitive Jungle Treachery in the 20th Century","image_url":"https:\/\/images.gr-assets.com\/books\/1328779463m\/298816.jpg","authors":"Don Richardson"},{"book_id":299215,"title":"The Road to Serfdom","image_url":"https:\/\/images.gr-assets.com\/books\/1327787673m\/299215.jpg","authors":"Friedrich A. Hayek"},{"book_id":299384,"title":"Sleeping Beauty: a Little Golden Book (Disney Princess)","image_url":"https:\/\/images.gr-assets.com\/books\/1320416694m\/299384.jpg","authors":"Michael Teitelbaum, Walt Disney Company"},{"book_id":300044,"title":"Knife Edge (Noughts & Crosses, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1364405912m\/300044.jpg","authors":"Malorie Blackman"},{"book_id":300225,"title":"Bloodline","image_url":"https:\/\/images.gr-assets.com\/books\/1298570618m\/300225.jpg","authors":"Sidney Sheldon"},{"book_id":300226,"title":"The Naked Face","image_url":"https:\/\/images.gr-assets.com\/books\/1398003487m\/300226.jpg","authors":"Sidney Sheldon"},{"book_id":300650,"title":"On Becoming Baby Wise: Giving Your Infant the Gift of Nighttime Sleep","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Gary Ezzo"},{"book_id":300905,"title":"\u0633\u0645\u0641\u0648\u0646\u06cc \u0645\u0631\u062f\u06af\u0627\u0646","image_url":"https:\/\/images.gr-assets.com\/books\/1333982726m\/300905.jpg","authors":"\u0639\u0628\u0627\u0633 \u0645\u0639\u0631\u0648\u0641\u06cc"},{"book_id":301022,"title":"The Boyfriend List: 15 Guys, 11 Shrink Appointments, 4 Ceramic Frogs and Me, Ruby Oliver (Ruby Oliver, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1342343845m\/301022.jpg","authors":"E. Lockhart"},{"book_id":301023,"title":"ttyl (Internet Girls, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1350771009m\/301023.jpg","authors":"Lauren Myracle"},{"book_id":301082,"title":"Dead Until Dark (Sookie Stackhouse, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1468560853m\/301082.jpg","authors":"Charlaine Harris"},{"book_id":301538,"title":"The Darkness That Comes Before (The Prince of Nothing, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1421630062m\/301538.jpg","authors":"R. Scott Bakker"},{"book_id":301736,"title":"Guess How Much I Love You","image_url":"https:\/\/images.gr-assets.com\/books\/1320457007m\/301736.jpg","authors":"Sam McBratney, Anita Jeram"},{"book_id":302625,"title":"Nemesis","image_url":"https:\/\/images.gr-assets.com\/books\/1336582027m\/302625.jpg","authors":"Isaac Asimov"},{"book_id":302998,"title":"The Buddha of Suburbia","image_url":"https:\/\/images.gr-assets.com\/books\/1344618639m\/302998.jpg","authors":"Hanif Kureishi"},{"book_id":303098,"title":"Riptide","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Douglas Preston, Lincoln Child"},{"book_id":303454,"title":"Among the Brave (Shadow Children, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Margaret Peterson Haddix"},{"book_id":303460,"title":"Among the Betrayed (Shadow Children, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Margaret Peterson Haddix"},{"book_id":303472,"title":"Among the Impostors (Shadow Children, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Margaret Peterson Haddix"},{"book_id":304027,"title":"Lover Unbound (Black Dagger Brotherhood, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1351276662m\/304027.jpg","authors":"J.R. Ward"},{"book_id":304079,"title":"The Essential Rumi","image_url":"https:\/\/images.gr-assets.com\/books\/1391414844m\/304079.jpg","authors":"Jalaluddin Rumi, Coleman Barks"},{"book_id":305234,"title":"Wicked Lovely (Wicked Lovely, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327814035m\/305234.jpg","authors":"Melissa Marr"},{"book_id":306364,"title":"Sugar Daddy (Travises, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lisa Kleypas"},{"book_id":306654,"title":"Cold Sassy Tree","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Olive Ann Burns"},{"book_id":307791,"title":"The City of Ember (Book of Ember, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1397931596m\/307791.jpg","authors":"Jeanne DuPrau"},{"book_id":308540,"title":"The Haunted Mask (Goosebumps, #11)","image_url":"https:\/\/images.gr-assets.com\/books\/1328867787m\/308540.jpg","authors":"R.L. Stine"},{"book_id":310146,"title":"The True Confessions of Charlotte Doyle","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Avi"},{"book_id":310258,"title":"The Snowy Day","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ezra Jack Keats"},{"book_id":310259,"title":"Love You Forever","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert Munsch, Sheila McGraw"},{"book_id":310272,"title":"There's a Wocket in My Pocket!","image_url":"https:\/\/images.gr-assets.com\/books\/1327448521m\/310272.jpg","authors":"Dr. Seuss"},{"book_id":310459,"title":"Roll of Thunder, Hear My Cry (Logans, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mildred D. Taylor"},{"book_id":310612,"title":"A Confederacy of Dunces","image_url":"https:\/\/images.gr-assets.com\/books\/1436747103m\/310612.jpg","authors":"John Kennedy Toole, Walker Percy"},{"book_id":311196,"title":"Frederica","image_url":"https:\/\/images.gr-assets.com\/books\/1395082866m\/311196.jpg","authors":"Georgette Heyer"},{"book_id":312043,"title":"The Fire Within (The Last Dragon Chronicles, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1362325249m\/312043.jpg","authors":"Chris d'Lacey"},{"book_id":312050,"title":"Icefire (The Last Dragon Chronicles, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1362400475m\/312050.jpg","authors":"Chris d'Lacey"},{"book_id":313256,"title":"Dark Challenge (Dark, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1330425767m\/313256.jpg","authors":"Christine Feehan"},{"book_id":313263,"title":"Dark Fire (Dark, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1269221471m\/313263.jpg","authors":"Christine Feehan"},{"book_id":313267,"title":"Dark Destiny (Dark, #13)","image_url":"https:\/\/images.gr-assets.com\/books\/1327896698m\/313267.jpg","authors":"Christine Feehan"},{"book_id":313605,"title":"Getting to Yes: Negotiating an Agreement Without Giving In","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Roger Fisher, William Ury, Bruce Patton"},{"book_id":313620,"title":"If You Want to Walk on Water, You've Got to Get Out of the Boat","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Ortberg"},{"book_id":313631,"title":"More Than a Carpenter","image_url":"https:\/\/images.gr-assets.com\/books\/1439771268m\/313631.jpg","authors":"Josh McDowell"},{"book_id":313998,"title":"Johnny Mnemonic","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"William Gibson, Terry Bisson"},{"book_id":315425,"title":"In Defense of Food: An Eater's Manifesto","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael Pollan"},{"book_id":315519,"title":"Rich Man, Poor Man","image_url":"https:\/\/images.gr-assets.com\/books\/1353725186m\/315519.jpg","authors":"Irwin Shaw"},{"book_id":315578,"title":"Auschwitz: A Doctor's Eyewitness Account","image_url":"https:\/\/images.gr-assets.com\/books\/1356698317m\/315578.jpg","authors":"Mikl\u00f3s Nyiszli, Tib\u00e8re Kremer, Bruno Bettelheim, Richard Seaver"},{"book_id":315882,"title":"Henry's Freedom Box: A True Story from the Underground Railroad","image_url":"https:\/\/images.gr-assets.com\/books\/1328867106m\/315882.jpg","authors":"Ellen Levine, Kadir Nelson"},{"book_id":316445,"title":"Luna","image_url":"https:\/\/images.gr-assets.com\/books\/1339269673m\/316445.jpg","authors":"Julie Anne Peters"},{"book_id":316496,"title":"Oscar and Lucinda","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Peter Carey"},{"book_id":316558,"title":"Kabul Beauty School: An American Woman Goes Behind the Veil","image_url":"https:\/\/images.gr-assets.com\/books\/1320448527m\/316558.jpg","authors":"Deborah Rodriguez"},{"book_id":316845,"title":"The Sword in the Stone (The Once and Future King, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1355212194m\/316845.jpg","authors":"T.H. White"},{"book_id":317282,"title":"Memoirs of a Teenage Amnesiac","image_url":"https:\/\/images.gr-assets.com\/books\/1317793286m\/317282.jpg","authors":"Gabrielle Zevin"},{"book_id":317504,"title":"Mistress of the Empire (The Empire Trilogy, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1333694789m\/317504.jpg","authors":"Raymond E. Feist, Janny Wurts"},{"book_id":318404,"title":"Drums, Girls & Dangerous Pie (Drums, Girls & Dangerous Pie, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1377989934m\/318404.jpg","authors":"Jordan Sonnenblick"},{"book_id":318431,"title":"Long Walk to Freedom","image_url":"https:\/\/images.gr-assets.com\/books\/1327997342m\/318431.jpg","authors":"Nelson Mandela"},{"book_id":318525,"title":"Red Storm Rising","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tom Clancy"},{"book_id":318742,"title":"The Souls of Black Folk","image_url":"https:\/\/images.gr-assets.com\/books\/1309202855m\/318742.jpg","authors":"W.E.B. Du Bois, Donald B. Gibson, Monica W. Elbert"},{"book_id":319300,"title":"Georgiana: Duchess of Devonshire","image_url":"https:\/\/images.gr-assets.com\/books\/1332041559m\/319300.jpg","authors":"Amanda Foreman"},{"book_id":319644,"title":"Gregor and the Marks of Secret (Underland Chronicles, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1397854344m\/319644.jpg","authors":"Suzanne Collins"},{"book_id":320167,"title":"The Last Precinct (Kay Scarpetta, #11)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Patricia Cornwell"},{"book_id":320700,"title":"Shadows over Innsmouth","image_url":"https:\/\/images.gr-assets.com\/books\/1293833116m\/320700.jpg","authors":"Stephen Jones, H.P. Lovecraft, Kim Newman, Brian Mooney, Nicholas Royle, David Langford, Michael Marshall Smith, Brian Lumley, Neil Gaiman, Basil Copper, Jack Yeovil, Guy N. Smith, Adrian Cole, D.F. Lewis, Ramsey Campbell, David Sutton, Peter Tremayne"},{"book_id":321545,"title":"A Morbid Taste for Bones (Chronicles of Brother Cadfael, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1296427936m\/321545.jpg","authors":"Ellis Peters"},{"book_id":321552,"title":"The Agony and the Ecstasy","image_url":"https:\/\/images.gr-assets.com\/books\/1327879079m\/321552.jpg","authors":"Irving Stone, \u05e9\u05de\u05d5\u05d0\u05dc \u05e9\u05e0\u05d9\u05e6\u05e8"},{"book_id":321577,"title":"Girl in Hyacinth Blue","image_url":"https:\/\/images.gr-assets.com\/books\/1364742503m\/321577.jpg","authors":"Susan Vreeland"},{"book_id":321645,"title":"Kissed by an Angel\/The Power of Love\/Soulmates (Kissed by an Angel, #1-3)","image_url":"https:\/\/images.gr-assets.com\/books\/1302945904m\/321645.jpg","authors":"Elizabeth Chandler"},{"book_id":322351,"title":"How to Eat Fried Worms","image_url":"https:\/\/images.gr-assets.com\/books\/1320519921m\/322351.jpg","authors":"Thomas Rockwell"},{"book_id":323289,"title":"The Witness","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sandra Brown"},{"book_id":323355,"title":"The Book of Mormon: Another Testament of Jesus Christ","image_url":"https:\/\/images.gr-assets.com\/books\/1327389004m\/323355.jpg","authors":"Anonymous, Joseph Smith Jr."},{"book_id":324277,"title":"The Carnivorous Carnival (A Series of Unfortunate Events, #9)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lemony Snicket, Brett Helquist"},{"book_id":324737,"title":"Fresh Wind, Fresh Fire: What Happens When God's Spirit Invades the Heart of His People","image_url":"https:\/\/images.gr-assets.com\/books\/1384258871m\/324737.jpg","authors":"Jim Cymbala, Dean Merrill"},{"book_id":324748,"title":"The Dip: A Little Book That Teaches You When to Quit (and When to Stick)","image_url":"https:\/\/images.gr-assets.com\/books\/1311282216m\/324748.jpg","authors":"Seth Godin"},{"book_id":325085,"title":"Nicholas Nickleby","image_url":"https:\/\/images.gr-assets.com\/books\/1352758388m\/325085.jpg","authors":"Charles Dickens, Mark Ford"},{"book_id":325128,"title":"Kidnapped (David Balfour, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1328869457m\/325128.jpg","authors":"Robert Louis Stevenson"},{"book_id":325416,"title":"The Voyages of Doctor Dolittle (Doctor Dolittle, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Hugh Lofting, Michael Hague"},{"book_id":325421,"title":"The Story of Doctor Dolittle (Doctor Dolittle, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Hugh Lofting, Michael Hague"},{"book_id":326272,"title":"\u0639\u0642\u0627\u06cc\u062f \u06cc\u06a9 \u062f\u0644\u0642\u06a9","image_url":"https:\/\/images.gr-assets.com\/books\/1394632139m\/326272.jpg","authors":"Heinrich B\u00f6ll, \u0645\u062d\u0645\u062f \u0627\u0633\u0645\u0627\u0639\u06cc\u0644\u200c\u0632\u0627\u062f\u0647"},{"book_id":327194,"title":"Three Little Kittens","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Masha, Marie Simchow Stern"},{"book_id":327242,"title":"Anatomy for the Artist","image_url":"https:\/\/images.gr-assets.com\/books\/1309295064m\/327242.jpg","authors":"Sarah Simblet"},{"book_id":327246,"title":"Anatomy for the Artist","image_url":"https:\/\/images.gr-assets.com\/books\/1328858785m\/327246.jpg","authors":"Jen\u0151 Barcsay"},{"book_id":327255,"title":"The Fourth Protocol","image_url":"https:\/\/images.gr-assets.com\/books\/1351838040m\/327255.jpg","authors":"Frederick Forsyth"},{"book_id":327847,"title":"The Joy of Cooking","image_url":"https:\/\/images.gr-assets.com\/books\/1379313627m\/327847.jpg","authors":"Irma S. Rombauer, Marion Rombauer Becker, Ethan Becker"},{"book_id":328802,"title":"Totto-chan: The Little Girl at the Window","image_url":"https:\/\/images.gr-assets.com\/books\/1354795941m\/328802.jpg","authors":"Tetsuko Kuroyanagi, Chihiro Iwasaki, Dorothy Britton"},{"book_id":328854,"title":"Motherless Brooklyn","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jonathan Lethem"},{"book_id":328907,"title":"Sharpe's Tiger (Sharpe, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bernard Cornwell"},{"book_id":330721,"title":"Dreaming of You (The Gamblers, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1443223862m\/330721.jpg","authors":"Lisa Kleypas"},{"book_id":330744,"title":"InuYasha: Turning Back Time (InuYasha, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1288648681m\/330744.jpg","authors":"Rumiko Takahashi"},{"book_id":330760,"title":"The Subterraneans","image_url":"https:\/\/images.gr-assets.com\/books\/1428958819m\/330760.jpg","authors":"Jack Kerouac"},{"book_id":330944,"title":"The Field of Swords (Emperor, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Conn Iggulden"},{"book_id":330947,"title":"The Gates of Rome (Emperor, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1313874666m\/330947.jpg","authors":"Conn Iggulden"},{"book_id":331256,"title":"Roadside Picnic","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Arkady Strugatsky, Boris Strugatsky, Antonina W. Bouis, Antonina W. Bouis, Theodore Sturgeon"},{"book_id":331319,"title":"An American Tragedy","image_url":"https:\/\/images.gr-assets.com\/books\/1309283443m\/331319.jpg","authors":"Theodore Dreiser, Richard R. Lingeman"},{"book_id":331695,"title":"Almost French: Love and a New Life in Paris","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sarah Turnbull"},{"book_id":331701,"title":"Stone Soup","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jon J. Muth"},{"book_id":331920,"title":"Flipped","image_url":"https:\/\/images.gr-assets.com\/books\/1388554293m\/331920.jpg","authors":"Wendelin Van Draanen"},{"book_id":332348,"title":"The Year of Fog","image_url":"https:\/\/images.gr-assets.com\/books\/1320513174m\/332348.jpg","authors":"Michelle Richmond"},{"book_id":332613,"title":"One Flew Over the Cuckoo's Nest","image_url":"https:\/\/images.gr-assets.com\/books\/1485308778m\/332613.jpg","authors":"Ken Kesey"},{"book_id":332631,"title":"Y: The Last Man, Vol. 2: Cycles (Y: The Last Man, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Brian K. Vaughan, Pia Guerra, Jos\u00e9 Marz\u00e1n Jr."},{"book_id":332775,"title":"Incarceron (Incarceron, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327414514m\/332775.jpg","authors":"Catherine Fisher"},{"book_id":333538,"title":"The Castle","image_url":"https:\/\/images.gr-assets.com\/books\/1331696371m\/333538.jpg","authors":"Franz Kafka, Mark Harman, Regaip Minareci, \u015eerif Ye\u015filbucak"},{"book_id":333867,"title":"The Stars My Destination","image_url":"https:\/\/images.gr-assets.com\/books\/1433671750m\/333867.jpg","authors":"Alfred Bester, Neil Gaiman"},{"book_id":333907,"title":"Fatal Vision","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Joe McGinniss"},{"book_id":334123,"title":"The Amulet of Samarkand (Bartimaeus, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327877926m\/334123.jpg","authors":"Jonathan Stroud"},{"book_id":334176,"title":"The Sparrow (The Sparrow, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1230829367m\/334176.jpg","authors":"Mary Doria Russell"},{"book_id":334286,"title":"Equus","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Peter Shaffer"},{"book_id":334643,"title":"Abhorsen (Abhorsen, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1401683669m\/334643.jpg","authors":"Garth Nix"},{"book_id":334818,"title":"Miss Rumphius","image_url":"https:\/\/images.gr-assets.com\/books\/1281468926m\/334818.jpg","authors":"Barbara Cooney"},{"book_id":335397,"title":"Two Years Before the Mast: A Sailor's Life at Sea","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Richard Henry Dana Jr."},{"book_id":335459,"title":"Everyday Food: Great Food Fast","image_url":"https:\/\/images.gr-assets.com\/books\/1320479731m\/335459.jpg","authors":"Martha Stewart"},{"book_id":336161,"title":"The Grouchy Ladybug","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Eric Carle"},{"book_id":336245,"title":"A Dangerous Path (Warriors, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Erin Hunter"},{"book_id":337058,"title":"Jacob Have I Loved","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Katherine Paterson"},{"book_id":337113,"title":"The Tenant of Wildfell Hall","image_url":"https:\/\/images.gr-assets.com\/books\/1479652419m\/337113.jpg","authors":"Anne Bront\u00eb, Stevie Davies"},{"book_id":337116,"title":"The Difference Engine ","image_url":"https:\/\/images.gr-assets.com\/books\/1327891675m\/337116.jpg","authors":"William Gibson, Bruce Sterling"},{"book_id":337615,"title":"Nine Parts of Desire: The Hidden World of Islamic Women","image_url":"https:\/\/images.gr-assets.com\/books\/1403182793m\/337615.jpg","authors":"Geraldine Brooks"},{"book_id":337623,"title":"Eye of the Storm (Sean Dillon, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jack Higgins"},{"book_id":338691,"title":"Still Life (Chief Inspector Armand Gamache, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1324373974m\/338691.jpg","authors":"Louise Penny"},{"book_id":338798,"title":"Ulysses","image_url":"https:\/\/images.gr-assets.com\/books\/1428891345m\/338798.jpg","authors":"James Joyce"},{"book_id":339026,"title":"The Akhenaten Adventure (Children of the Lamp, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"P.B. Kerr"},{"book_id":341027,"title":"The Mane Event (Pride, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Shelly Laurenston"},{"book_id":341281,"title":"The Woodlanders","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Thomas Hardy, Patricia Ingham"},{"book_id":341553,"title":"The Faithful Spy (John Wells, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Alex Berenson"},{"book_id":341735,"title":"Replay","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ken Grimwood"},{"book_id":341879,"title":"Just Kids","image_url":"https:\/\/images.gr-assets.com\/books\/1259762407m\/341879.jpg","authors":"Patti Smith"},{"book_id":342240,"title":"The Cove (FBI Thriller #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Catherine Coulter"},{"book_id":342445,"title":"The Dark Tower: The Gunslinger Born","image_url":"https:\/\/images.gr-assets.com\/books\/1489721554m\/342445.jpg","authors":"Peter David, Robin Furth, Jae Lee, Richard Isanove, Stephen King"},{"book_id":342504,"title":"The Science of Getting Rich","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Wallace D. Wattles"},{"book_id":342637,"title":"Dali: The Paintings","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert Descharnes, Gilles N\u00e9ret"},{"book_id":342667,"title":"A Total Waste of Makeup (Charlize Edwards, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kim Gruenenfelder"},{"book_id":342994,"title":"The Little Match Girl","image_url":"https:\/\/images.gr-assets.com\/books\/1411481144m\/342994.jpg","authors":"Hans Christian Andersen, Rachel Isadora"},{"book_id":343614,"title":"The Law of Attraction: The Basics of the Teachings of Abraham","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Esther Hicks, Jerry Hicks"},{"book_id":343718,"title":"A Dog's Life: The Autobiography of a Stray","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ann M. Martin"},{"book_id":343881,"title":"Cloudstreet","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tim Winton"},{"book_id":344262,"title":"Bloodfever (Fever, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1302566396m\/344262.jpg","authors":"Karen Marie Moning"},{"book_id":345299,"title":"Midnight Tides (The Malazan Book of the Fallen, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1366996057m\/345299.jpg","authors":"Steven Erikson"},{"book_id":345627,"title":"Vampire Academy (Vampire Academy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1361098973m\/345627.jpg","authors":"Richelle Mead"},{"book_id":346087,"title":"Captain's Fury (Codex Alera, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1315083292m\/346087.jpg","authors":"Jim Butcher"},{"book_id":347143,"title":"The Abstinence Teacher","image_url":"https:\/\/images.gr-assets.com\/books\/1320459201m\/347143.jpg","authors":"Tom Perrotta"},{"book_id":347577,"title":"Away Laughing on a Fast Camel (Confessions of Georgia Nicolson, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Louise Rennison"},{"book_id":347610,"title":"King Leopold's Ghost","image_url":"https:\/\/images.gr-assets.com\/books\/1348621563m\/347610.jpg","authors":"Adam Hochschild"},{"book_id":347656,"title":"Don't Waste Your Life","image_url":"https:\/\/images.gr-assets.com\/books\/1369824233m\/347656.jpg","authors":"John Piper"},{"book_id":347698,"title":"The Secret River","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kate Grenville"},{"book_id":347852,"title":"The Road Less Traveled: A New Psychology of Love, Traditional Values, and Spiritual Growth","image_url":"https:\/\/images.gr-assets.com\/books\/1322673263m\/347852.jpg","authors":"M. Scott Peck"},{"book_id":348225,"title":"These Is My Words: The Diary of Sarah Agnes Prine, 1881-1901, Arizona Territories (Sarah Agnes Prine, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nancy E. Turner"},{"book_id":348489,"title":"Snowflake Bentley","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jacqueline Briggs Martin, Mary Azarian"},{"book_id":348564,"title":"Flat Stanley (Flat Stanley, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jeff Brown, Scott Nash, Macky Pamintuan"},{"book_id":348573,"title":"The Borrowers (The Borrowers, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1308945559m\/348573.jpg","authors":"Mary Norton, Beth Krush, Joe Krush"},{"book_id":348632,"title":"The Blood of Flowers","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anita Amirrezvani"},{"book_id":349090,"title":"Infinity Welcomes Careful Drivers (Red Dwarf #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1403947775m\/349090.jpg","authors":"Grant Naylor"},{"book_id":349129,"title":"The Man Who Walked Between the Towers","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mordicai Gerstein"},{"book_id":349254,"title":"The Lord of the Rings: The Return of the King: Visual Companion","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jude Fisher"},{"book_id":349473,"title":"Blaze","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Richard Bachman, Stephen King"},{"book_id":349929,"title":"Passing","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nella Larsen, Ntozake Shange, Thadious M. Davis"},{"book_id":350065,"title":"Scruples","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Judith Krantz"},{"book_id":350684,"title":"Whitney, My Love (Westmoreland, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Judith McNaught"},{"book_id":351023,"title":"The Worst Witch (Worst Witch, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jill Murphy"},{"book_id":351064,"title":"The Monkey's Paw (Oxford Bookworms)","image_url":"https:\/\/images.gr-assets.com\/books\/1297721168m\/351064.jpg","authors":"Diane Mowat, W.W. Jacobs"},{"book_id":351559,"title":"Murder Must Advertise (Lord Peter Wimsey, #10)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dorothy L. Sayers"},{"book_id":351648,"title":"What the Dead Know","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Laura Lippman"},{"book_id":352262,"title":"How to Train Your Dragon (How to Train Your Dragon, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1431930187m\/352262.jpg","authors":"Cressida Cowell"},{"book_id":352383,"title":"Antigone","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jean Anouilh"},{"book_id":352921,"title":"A Fatal Grace (Chief Inspector Armand Gamache, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1327918653m\/352921.jpg","authors":"Louise Penny"},{"book_id":353342,"title":"The Cross of Lead (Crispin, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Avi"},{"book_id":353814,"title":"The Charm School","image_url":"https:\/\/images.gr-assets.com\/books\/1337601423m\/353814.jpg","authors":"Nelson DeMille"},{"book_id":355190,"title":"Orientalism","image_url":"https:\/\/images.gr-assets.com\/books\/1409777781m\/355190.jpg","authors":"Edward Said"},{"book_id":355697,"title":"All Quiet on the Western Front","image_url":"https:\/\/images.gr-assets.com\/books\/1441227765m\/355697.jpg","authors":"Erich Maria Remarque, A.W. Wheen"},{"book_id":355916,"title":"Physik (Septimus Heap, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1398052658m\/355916.jpg","authors":"Angie Sage, Mark Zug"},{"book_id":355917,"title":"Flyte (Septimus Heap, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Angie Sage, Mark Zug"},{"book_id":356321,"title":"The Story of Babar","image_url":"https:\/\/images.gr-assets.com\/books\/1353333493m\/356321.jpg","authors":"Jean de Brunhoff, Merle S. Haas"},{"book_id":356373,"title":"Experiencing God: Knowing and Doing the Will of God, Workbook","image_url":"https:\/\/images.gr-assets.com\/books\/1293504214m\/356373.jpg","authors":"Henry T. Blackaby, Claude V. King, Richard Blackaby"},{"book_id":356824,"title":"India After Gandhi: The History of the World's Largest Democracy","image_url":"https:\/\/images.gr-assets.com\/books\/1500471959m\/356824.jpg","authors":"Ramachandra Guha"},{"book_id":356896,"title":"The Greatest Salesman in the World","image_url":"https:\/\/images.gr-assets.com\/books\/1403192719m\/356896.jpg","authors":"Og Mandino"},{"book_id":357636,"title":"Civilization and Its Discontents","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sigmund Freud, James Strachey, Peter Gay"},{"book_id":357664,"title":"Because of Winn-Dixie","image_url":"https:\/\/images.gr-assets.com\/books\/1456871914m\/357664.jpg","authors":"Kate DiCamillo, Chris Sheban"},{"book_id":359194,"title":"The Lucifer Effect: Understanding How Good People Turn Evil","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Philip G. Zimbardo"},{"book_id":359375,"title":"Night Watch (Watch #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1351342315m\/359375.jpg","authors":"Sergei Lukyanenko, Andrew Bromfield"},{"book_id":359410,"title":"Elsewhere","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Gabrielle Zevin"},{"book_id":359461,"title":"The Guardian (O'Malley #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1406514522m\/359461.jpg","authors":"Dee Henderson"},{"book_id":359463,"title":"Danger in the Shadows (O'Malley #0.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1406507237m\/359463.jpg","authors":"Dee Henderson"},{"book_id":359581,"title":"The Courts of Chaos (The Chronicles of Amber #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1417786728m\/359581.jpg","authors":"Roger Zelazny"},{"book_id":359770,"title":"House of Sand and Fog","image_url":"https:\/\/images.gr-assets.com\/books\/1428883041m\/359770.jpg","authors":"Andre Dubus III"},{"book_id":360562,"title":"Sharpe's Rifles (Sharpe, #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bernard Cornwell"},{"book_id":361081,"title":"Pacific Vortex! (Dirk Pitt, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1269478239m\/361081.jpg","authors":"Clive Cussler, Michael Pritchard"},{"book_id":361459,"title":"An Unquiet Mind: A Memoir of Moods and Madness","image_url":"https:\/\/images.gr-assets.com\/books\/1350028748m\/361459.jpg","authors":"Kay Redfield Jamison"},{"book_id":363752,"title":"Bridget Jones: The Edge of Reason (Bridget Jones, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1395233618m\/363752.jpg","authors":"Helen Fielding"},{"book_id":363851,"title":"Jeremy Fink and the Meaning of Life","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Wendy Mass"},{"book_id":363973,"title":"The Little Old Lady Who Was Not Afraid of Anything","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Linda Williams, Megan Lloyd"},{"book_id":364089,"title":"The Last Don","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mario Puzo"},{"book_id":364550,"title":"Two Treatises of Government","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Locke, Peter Laslett, Raymond Geuss"},{"book_id":364826,"title":"\u0633\u06cc\u0646\u0648\u0647\u0647","image_url":"https:\/\/images.gr-assets.com\/books\/1388361248m\/364826.jpg","authors":"Mika Waltari, \u0630\u0628\u06cc\u062d\u200c\u0627\u0644\u0644\u0647 \u0645\u0646\u0635\u0648\u0631\u06cc"},{"book_id":365006,"title":"The Oath","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Frank E. Peretti"},{"book_id":365990,"title":"The Crossing (The Border Trilogy, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1327197531m\/365990.jpg","authors":"Cormac McCarthy"},{"book_id":366337,"title":"Back on Blossom Street (Blossom Street, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Debbie Macomber"},{"book_id":366346,"title":"204 Rosewood Lane (Cedar Cove, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Debbie Macomber"},{"book_id":366522,"title":"P.S. I Love You","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Cecelia Ahern"},{"book_id":367802,"title":"Collected Poems","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dylan Thomas"},{"book_id":368468,"title":"Bud, Not Buddy","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Christopher Paul Curtis"},{"book_id":368593,"title":"The 4-Hour Workweek","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Timothy Ferriss"},{"book_id":368772,"title":"The Caine Mutiny","image_url":"https:\/\/images.gr-assets.com\/books\/1410224968m\/368772.jpg","authors":"Herman Wouk"},{"book_id":368916,"title":"84, Charing Cross Road","image_url":"https:\/\/images.gr-assets.com\/books\/1287338794m\/368916.jpg","authors":"Helene Hanff"},{"book_id":369110,"title":"Captains and the Kings","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Taylor Caldwell"},{"book_id":370057,"title":"The Truth Seeker (O'Malley #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1406514043m\/370057.jpg","authors":"Dee Henderson"},{"book_id":370493,"title":"The Giving Tree","image_url":"https:\/\/images.gr-assets.com\/books\/1174210942m\/370493.jpg","authors":"Shel Silverstein"},{"book_id":371456,"title":"Nana (Les Rougon-Macquart, #9)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"\u00c9mile Zola"},{"book_id":371787,"title":"Sorceress of Darshiva (The Malloreon, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1342438281m\/371787.jpg","authors":"David Eddings"},{"book_id":372319,"title":"Jo's Boys (Little Women, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Louisa May Alcott"},{"book_id":372384,"title":"The Final Detail (Myron Bolitar #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1300230473m\/372384.jpg","authors":"Harlan Coben"},{"book_id":372385,"title":"Back Spin (Myron Bolitar #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1431404184m\/372385.jpg","authors":"Harlan Coben"},{"book_id":372638,"title":"Lyle, Lyle, Crocodile","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bernard Waber"},{"book_id":373606,"title":"Ain't She Sweet","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Susan Elizabeth Phillips"},{"book_id":373755,"title":"Absalom, Absalom!","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"William Faulkner"},{"book_id":373915,"title":"20th Century Ghosts","image_url":"https:\/\/images.gr-assets.com\/books\/1388224829m\/373915.jpg","authors":"Joe Hill, Christopher Golden"},{"book_id":373925,"title":"Sweeney Todd: The Demon Barber of Fleet Street","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Stephen Sondheim, Hugh Wheeler, Christopher Godfrey Bond"},{"book_id":374233,"title":"If on a Winter's Night a Traveler","image_url":"https:\/\/images.gr-assets.com\/books\/1355316130m\/374233.jpg","authors":"Italo Calvino, William Weaver"},{"book_id":375013,"title":"Schindler's List","image_url":"https:\/\/images.gr-assets.com\/books\/1348163457m\/375013.jpg","authors":"Thomas Keneally"},{"book_id":375802,"title":"Ender's Game (Ender's Saga, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1408303130m\/375802.jpg","authors":"Orson Scott Card"},{"book_id":375901,"title":"Fr\u00e9d\u00e9ric","image_url":"https:\/\/images.gr-assets.com\/books\/1329956148m\/375901.jpg","authors":"Leo Lionni"},{"book_id":376514,"title":"The Manchurian Candidate (Movie Tie-In Edition)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Richard Condon"},{"book_id":376561,"title":"Invitation to a Beheading","image_url":"https:\/\/images.gr-assets.com\/books\/1405182507m\/376561.jpg","authors":"Vladimir Nabokov"},{"book_id":376613,"title":"The Cobra Event","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Richard Preston"},{"book_id":377425,"title":"Flight of the Intruder (Jake Grafton #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327959569m\/377425.jpg","authors":"Stephen Coonts"},{"book_id":379316,"title":"The Darkest Evening of the Year","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dean Koontz"},{"book_id":380975,"title":"K is for Killer (Kinsey Millhone, #11)","image_url":"https:\/\/images.gr-assets.com\/books\/1315138307m\/380975.jpg","authors":"Sue Grafton"},{"book_id":380976,"title":"P is for Peril (Kinsey Millhone, #16)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sue Grafton"},{"book_id":381102,"title":"Griffin and Sabine (Griffin & Sabine #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1356716196m\/381102.jpg","authors":"Nick Bantock"},{"book_id":381421,"title":"Jesus Calling: Enjoying Peace in His Presence","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sarah Young"},{"book_id":381440,"title":"The Society of the Spectacle","image_url":"https:\/\/images.gr-assets.com\/books\/1370746722m\/381440.jpg","authors":"Guy Debord, Donald Nicholson-Smith"},{"book_id":381489,"title":"Private (Private, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1331126301m\/381489.jpg","authors":"Kate Brian"},{"book_id":381704,"title":"Bergdorf Blondes","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Plum Sykes"},{"book_id":381787,"title":"Truth Will Prevail (The Work and the Glory, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Gerald N. Lund"},{"book_id":382450,"title":"Fevre Dream","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"George R.R. Martin"},{"book_id":382549,"title":"The Cardinal of the Kremlin (Jack Ryan Universe, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1319381380m\/382549.jpg","authors":"Tom Clancy"},{"book_id":382680,"title":"One False Move (Myron Bolitar #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1403190750m\/382680.jpg","authors":"Harlan Coben"},{"book_id":383028,"title":"The Hard Way (Jack Reacher, #10)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lee Child"},{"book_id":383196,"title":"\u0647\u0634\u062a \u06a9\u062a\u0627\u0628","image_url":"https:\/\/images.gr-assets.com\/books\/1485890816m\/383196.jpg","authors":"\u0633\u0647\u0631\u0627\u0628 \u0633\u067e\u0647\u0631\u06cc"},{"book_id":383206,"title":"Wives and Daughters","image_url":"https:\/\/images.gr-assets.com\/books\/1348267609m\/383206.jpg","authors":"Elizabeth Gaskell, Pam Morris"},{"book_id":383514,"title":"Her Royal Spyness (Her Royal Spyness Mysteries, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rhys Bowen"},{"book_id":384457,"title":"Agnes and the Hitman","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jennifer Crusie, Bob Mayer"},{"book_id":384597,"title":"Arcadia","image_url":"https:\/\/images.gr-assets.com\/books\/1463617930m\/384597.jpg","authors":"Tom Stoppard"},{"book_id":385228,"title":"On Liberty","image_url":"https:\/\/images.gr-assets.com\/books\/1459346459m\/385228.jpg","authors":"John Stuart Mill"},{"book_id":385255,"title":"Random Family: Love, Drugs, Trouble, and Coming of Age in the Bronx","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Adrian Nicole LeBlanc"},{"book_id":385706,"title":"Gregor and the Curse of the Warmbloods (Underland Chronicles, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1397852674m\/385706.jpg","authors":"Suzanne Collins"},{"book_id":385742,"title":"Gregor and the Prophecy of Bane (Underland Chronicles, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1337457481m\/385742.jpg","authors":"Suzanne Collins"},{"book_id":386142,"title":"Legally Blonde","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Amanda Brown"},{"book_id":386187,"title":"Midnight in the Garden of Good and Evil","image_url":"https:\/\/images.gr-assets.com\/books\/1427166915m\/386187.jpg","authors":"John Berendt"},{"book_id":386234,"title":"Just for You (Little Critter)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mercer Mayer"},{"book_id":386286,"title":"Julie of the Wolves (Julie of the Wolves, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jean Craighead George, John Schoenherr"},{"book_id":386372,"title":"Mort (Death, #1; Discworld, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Terry Pratchett"},{"book_id":386421,"title":"I Was So Mad","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mercer Mayer"},{"book_id":387749,"title":"Ben-Hur: A Tale of the Christ","image_url":"https:\/\/images.gr-assets.com\/books\/1450180491m\/387749.jpg","authors":"Lew Wallace"},{"book_id":388018,"title":"The Clocks (Hercule Poirot, #34)","image_url":"https:\/\/images.gr-assets.com\/books\/1375949009m\/388018.jpg","authors":"Agatha Christie, Robin Bailey"},{"book_id":388223,"title":"Robin Hood, The Prince of Thieves","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Alexandre Dumas"},{"book_id":389627,"title":"Diary of a Wimpy Kid (Diary of a Wimpy Kid, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jeff Kinney"},{"book_id":389763,"title":"Change Your Thoughts - Change Your Life: Living the Wisdom of the Tao","image_url":"https:\/\/images.gr-assets.com\/books\/1328770256m\/389763.jpg","authors":"Wayne W. Dyer"},{"book_id":389827,"title":"When Calls the Heart (Canadian West, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Janette Oke"},{"book_id":390305,"title":"A Perfect Evil (Maggie O'Dell, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Alex Kava"},{"book_id":390711,"title":"Noble House (Asian Saga, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1365185986m\/390711.jpg","authors":"James Clavell"},{"book_id":391724,"title":"The Black Cat","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Edgar Allan Poe"},{"book_id":391729,"title":"The Tell-Tale Heart and Other Writings","image_url":"https:\/\/images.gr-assets.com\/books\/1327936583m\/391729.jpg","authors":"Edgar Allan Poe"},{"book_id":392217,"title":"Hornet's Nest (Andy Brazil, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Patricia Cornwell"},{"book_id":392297,"title":"Sin City, Vol. 1: The Hard Goodbye (Sin City, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1470924635m\/392297.jpg","authors":"Frank Miller"},{"book_id":392431,"title":"Damaged: The Heartbreaking True Story of a Forgotten Child","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Cathy Glass"},{"book_id":392563,"title":"The Rest Is Noise: Listening to the Twentieth Century","image_url":"https:\/\/images.gr-assets.com\/books\/1311973474m\/392563.jpg","authors":"Alex Ross"},{"book_id":393060,"title":"The Post-Birthday World","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lionel Shriver"},{"book_id":393145,"title":"The Riddle (The Books of Pellinor, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1360170670m\/393145.jpg","authors":"Alison Croggon"},{"book_id":393146,"title":"The Naming (The Books of Pellinor, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1378497748m\/393146.jpg","authors":"Alison Croggon"},{"book_id":393199,"title":"Down and Out in Paris and London","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"George Orwell"},{"book_id":394228,"title":"Well-Schooled in Murder (Inspector Lynley, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Elizabeth George"},{"book_id":394469,"title":"Suttree","image_url":"https:\/\/images.gr-assets.com\/books\/1397600192m\/394469.jpg","authors":"Cormac McCarthy"},{"book_id":394535,"title":"Blood Meridian, or the Evening Redness in the West","image_url":"https:\/\/images.gr-assets.com\/books\/1453995760m\/394535.jpg","authors":"Cormac McCarthy"},{"book_id":394683,"title":"A Bargain for Frances","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Russell Hoban, Lillian Hoban"},{"book_id":394772,"title":"The Mixed-Up Chameleon","image_url":"https:\/\/images.gr-assets.com\/books\/1350959503m\/394772.jpg","authors":"Eric Carle"},{"book_id":394841,"title":"Travel Team","image_url":"https:\/\/images.gr-assets.com\/books\/1309210198m\/394841.jpg","authors":"Mike Lupica"},{"book_id":395090,"title":"Ariel","image_url":"https:\/\/images.gr-assets.com\/books\/1442258738m\/395090.jpg","authors":"Sylvia Plath"},{"book_id":395182,"title":"Lucky Jim","image_url":"https:\/\/images.gr-assets.com\/books\/1373459729m\/395182.jpg","authors":"Kingsley Amis, David Lodge"},{"book_id":395220,"title":"Zami: A New Spelling of My Name","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Audre Lorde"},{"book_id":395233,"title":"The Letters of Vincent van Gogh","image_url":"https:\/\/images.gr-assets.com\/books\/1328110665m\/395233.jpg","authors":"Vincent van Gogh, Ronald de Leeuw, Mark Roskill, Arnold J. Pomerans"},{"book_id":395851,"title":"The Struggle (The Vampire Diaries, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"L.J. Smith"},{"book_id":395871,"title":"The Awakening \/ The Struggle (The Vampire Diaries, #1-2)","image_url":"https:\/\/images.gr-assets.com\/books\/1393837129m\/395871.jpg","authors":"L.J. Smith"},{"book_id":395875,"title":"Dark Reunion (The Vampire Diaries, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"L.J. Smith"},{"book_id":395922,"title":"The Awakening (The Vampire Diaries, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"L.J. Smith"},{"book_id":395962,"title":"Kushiel's Chosen (Ph\u00e8dre's Trilogy, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1395020871m\/395962.jpg","authors":"Jacqueline Carey"},{"book_id":396266,"title":"The Winter Rose (The Tea Rose, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1319665261m\/396266.jpg","authors":"Jennifer Donnelly"},{"book_id":397456,"title":"Dawn (Cutler, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"V.C. Andrews"},{"book_id":397466,"title":"Dark Angel (Casteel, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1322289444m\/397466.jpg","authors":"V.C. Andrews"},{"book_id":397860,"title":"The Fog","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Herbert"},{"book_id":397867,"title":"The Rats (Rats, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1356454885m\/397867.jpg","authors":"James Herbert"},{"book_id":398323,"title":"Out Stealing Horses","image_url":"https:\/\/images.gr-assets.com\/books\/1317791439m\/398323.jpg","authors":"Per Petterson, Anne Born"},{"book_id":400354,"title":"Men at Arms (Discworld, #15; City Watch #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Terry Pratchett"},{"book_id":400412,"title":"The Waste Land and Other Poems","image_url":"https:\/\/images.gr-assets.com\/books\/1372992691m\/400412.jpg","authors":"T.S. Eliot"},{"book_id":400881,"title":"Shadows Linger (The Chronicles of the Black Company, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Glen Cook"},{"book_id":400906,"title":"The White Rose (The Chronicles of the Black Company, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1327901074m\/400906.jpg","authors":"Glen Cook"},{"book_id":400924,"title":"Chronicles of the Black Company (The Chronicles of the Black Company, #1-3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Glen Cook"},{"book_id":401514,"title":"Alive: The Story of the Andes Survivors","image_url":"https:\/\/images.gr-assets.com\/books\/1404247131m\/401514.jpg","authors":"Piers Paul Read"},{"book_id":401679,"title":"Llama Llama Red Pajama","image_url":"https:\/\/images.gr-assets.com\/books\/1309211387m\/401679.jpg","authors":"Anna Dewdney"},{"book_id":401876,"title":"The House of God","image_url":"https:\/\/images.gr-assets.com\/books\/1320486672m\/401876.jpg","authors":"Samuel Shem, John Updike"},{"book_id":402013,"title":"Angus, Thongs and Full-Frontal Snogging (Confessions of Georgia Nicolson, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Louise Rennison"},{"book_id":402014,"title":"On the Bright Side, I'm Now the Girlfriend of a Sex God (Confessions of Georgia Nicolson, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Louise Rennison"},{"book_id":402015,"title":"Dancing in My Nuddy-Pants (Confessions of Georgia Nicolson, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1327885836m\/402015.jpg","authors":"Louise Rennison"},{"book_id":402017,"title":"The Cake Mix Doctor","image_url":"https:\/\/images.gr-assets.com\/books\/1404582048m\/402017.jpg","authors":"Anne Byrn, Anthony Loew"},{"book_id":402045,"title":"The Mists of Avalon (Avalon, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1388857089m\/402045.jpg","authors":"Marion Zimmer Bradley"},{"book_id":402093,"title":"Sh\u014dgun (Asian Saga, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1397228842m\/402093.jpg","authors":"James Clavell"},{"book_id":402128,"title":"Old Possum's Book of Practical Cats","image_url":"https:\/\/images.gr-assets.com\/books\/1327882662m\/402128.jpg","authors":"T.S. Eliot, Edward Gorey"},{"book_id":402843,"title":"Zen Mind, Beginner's Mind: Informal Talks on Zen Meditation and Practice","image_url":"https:\/\/images.gr-assets.com\/books\/1392992935m\/402843.jpg","authors":"Shunryu Suzuki"},{"book_id":404223,"title":"The Wounded Land (The Second Chronicles of Thomas Covenant, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1323997527m\/404223.jpg","authors":"Stephen R. Donaldson"},{"book_id":404562,"title":"Henry & Ramona","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Cynthia J. McGean"},{"book_id":406373,"title":"Faust","image_url":"https:\/\/images.gr-assets.com\/books\/1320404568m\/406373.jpg","authors":"Johann Wolfgang von Goethe, Walter Kaufmann"},{"book_id":407234,"title":"Blood Brothers (Sign of Seven, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nora Roberts"},{"book_id":407429,"title":"The Stinky Cheese Man and Other Fairly Stupid Tales","image_url":"https:\/\/images.gr-assets.com\/books\/1488588399m\/407429.jpg","authors":"Jon Scieszka, Lane Smith"},{"book_id":407813,"title":"The Blue Sword (Damar, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1286927812m\/407813.jpg","authors":"Robin McKinley"},{"book_id":407999,"title":"Competitive Strategy: Techniques for Analyzing Industries and Competitors","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael E. Porter"},{"book_id":408615,"title":"Left to Tell: Discovering God Amidst the Rwandan Holocaust","image_url":"https:\/\/images.gr-assets.com\/books\/1328860563m\/408615.jpg","authors":"Immacul\u00e9e Ilibagiza, Steve Erwin"},{"book_id":409918,"title":"The Narrows (Harry Bosch, #10; Harry Bosch Universe, #12)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael Connelly"},{"book_id":410445,"title":"T is for Trespass (Kinsey Millhone, #20)","image_url":"https:\/\/images.gr-assets.com\/books\/1266546923m\/410445.jpg","authors":"Sue Grafton"},{"book_id":411053,"title":"Better Homes and Gardens New Cook Book ","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Better Homes and Gardens"},{"book_id":411527,"title":"Slam","image_url":"https:\/\/images.gr-assets.com\/books\/1327963062m\/411527.jpg","authors":"Nick Hornby"},{"book_id":412732,"title":"The Dharma Bums","image_url":"https:\/\/images.gr-assets.com\/books\/1428986082m\/412732.jpg","authors":"Jack Kerouac"},{"book_id":413158,"title":"Put Me in the Zoo","image_url":"https:\/\/images.gr-assets.com\/books\/1327947254m\/413158.jpg","authors":"Robert Lopshire"},{"book_id":414298,"title":"Straight Man","image_url":"https:\/\/images.gr-assets.com\/books\/1430659357m\/414298.jpg","authors":"Richard Russo"},{"book_id":414895,"title":"Planet of the Apes","image_url":"https:\/\/images.gr-assets.com\/books\/1320558901m\/414895.jpg","authors":"Pierre Boulle, Xan Fielding"},{"book_id":414999,"title":"Childhood's End","image_url":"https:\/\/images.gr-assets.com\/books\/1320552628m\/414999.jpg","authors":"Arthur C. Clarke"},{"book_id":416580,"title":"The Seventh Scroll (Ancient Egypt, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Wilbur Smith"},{"book_id":417524,"title":"Joseph Had a Little Overcoat","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Simms Taback"},{"book_id":417780,"title":"Why Mosquitoes Buzz in People's Ears","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Verna Aardema, Leo Dillon, Diane Dillon"},{"book_id":419083,"title":"Killing Pablo: The Hunt for the World's Greatest Outlaw","image_url":"https:\/\/images.gr-assets.com\/books\/1311648121m\/419083.jpg","authors":"Mark Bowden"},{"book_id":419103,"title":"Sin City, Vol. 3: The Big Fat Kill (Sin City, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1470924869m\/419103.jpg","authors":"Frank Miller"},{"book_id":420278,"title":"The Complete Poems 1927-1979","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Elizabeth Bishop"},{"book_id":420282,"title":"The Polar Express","image_url":"https:\/\/images.gr-assets.com\/books\/1356707942m\/420282.jpg","authors":"Chris Van Allsburg"},{"book_id":420297,"title":"Curious George","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"H.A. Rey"},{"book_id":420404,"title":"Yertle the Turtle and Other Stories","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dr. Seuss"},{"book_id":420496,"title":"A Knight of the Word (Word & Void, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1403811542m\/420496.jpg","authors":"Terry Brooks"},{"book_id":420734,"title":"Open Season","image_url":"https:\/\/images.gr-assets.com\/books\/1324869940m\/420734.jpg","authors":"Linda Howard"},{"book_id":420739,"title":"After the Night","image_url":"https:\/\/images.gr-assets.com\/books\/1337053790m\/420739.jpg","authors":"Linda Howard"},{"book_id":421129,"title":"Undead and Unwed (Undead, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1298768655m\/421129.jpg","authors":"MaryJanice Davidson"},{"book_id":421549,"title":"Certain Girls (Cannie Shapiro #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jennifer Weiner"},{"book_id":422452,"title":"Against a Dark Background","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Iain M. Banks"},{"book_id":423156,"title":"King of the Wind: The Story of the Godolphin Arabian","image_url":"https:\/\/images.gr-assets.com\/books\/1329982839m\/423156.jpg","authors":"Marguerite Henry, Wesley Dennis"},{"book_id":425029,"title":"Presumed Innocent","image_url":"https:\/\/images.gr-assets.com\/books\/1404412704m\/425029.jpg","authors":"Scott Turow"},{"book_id":425123,"title":"Gone, Baby, Gone (Kenzie & Gennaro, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dennis Lehane"},{"book_id":425124,"title":"Sacred (Kenzie & Gennaro, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dennis Lehane"},{"book_id":425377,"title":"Lord of Scoundrels (Scoundrels, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1381766823m\/425377.jpg","authors":"Loretta Chase"},{"book_id":426025,"title":"A Rose for Emily and Other Stories","image_url":"https:\/\/images.gr-assets.com\/books\/1487468453m\/426025.jpg","authors":"William Faulkner"},{"book_id":426030,"title":"The Healer (O'Malley #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1406510508m\/426030.jpg","authors":"Dee Henderson"},{"book_id":426504,"title":"Ficciones","image_url":"https:\/\/images.gr-assets.com\/books\/1388197956m\/426504.jpg","authors":"Jorge Luis Borges, Anthony Kerrigan, Anthony Bonner"},{"book_id":426625,"title":"Fancy Nancy","image_url":"https:\/\/images.gr-assets.com\/books\/1376473636m\/426625.jpg","authors":"Jane O'Connor, Robin Preiss Glasser"},{"book_id":426775,"title":"Chasing Harry Winston","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lauren Weisberger"},{"book_id":426825,"title":"QB VII","image_url":"https:\/\/images.gr-assets.com\/books\/1359742726m\/426825.jpg","authors":"Leon Uris"},{"book_id":427920,"title":"Chicken Soup for the Teenage Soul: 101 Stories of Life, Love and Learning (Chicken Soup for the Soul)","image_url":"https:\/\/images.gr-assets.com\/books\/1331052651m\/427920.jpg","authors":"Jack Canfield, Mark Victor Hansen, Kimberly Kirberger"},{"book_id":428042,"title":"Airborn (Matt Cruse, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kenneth Oppel"},{"book_id":428223,"title":"The Invisible Wall: A Love Story That Broke Barriers","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Harry Bernstein"},{"book_id":428263,"title":"Eclipse (Twilight, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1361038355m\/428263.jpg","authors":"Stephenie Meyer"},{"book_id":428862,"title":"Wreck This Journal","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Keri Smith"},{"book_id":429024,"title":"The Old Curiosity Shop","image_url":"https:\/\/images.gr-assets.com\/books\/1332523435m\/429024.jpg","authors":"Charles Dickens, Norman Page"},{"book_id":429138,"title":"River God (Ancient Egypt, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Wilbur Smith"},{"book_id":429883,"title":"The Hidden City (The Tamuli, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Eddings"},{"book_id":430968,"title":"Merle's Door: Lessons from a Freethinking Dog","image_url":"https:\/\/images.gr-assets.com\/books\/1310704047m\/430968.jpg","authors":"Ted Kerasote"},{"book_id":432020,"title":"Yu Yu Hakusho, Volume 1: Goodbye, Material World! (Yu Yu Hakusho, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Yoshihiro Togashi"},{"book_id":432283,"title":"If Life Is a Bowl of Cherries What Am I Doing in the Pits?","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Erma Bombeck"},{"book_id":433035,"title":"Sad Cypress (Hercule Poirot, #21)","image_url":"https:\/\/images.gr-assets.com\/books\/1396229541m\/433035.jpg","authors":"Agatha Christie"},{"book_id":433533,"title":"Rilla of Ingleside (Anne of Green Gables, #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1285712722m\/433533.jpg","authors":"L.M. Montgomery"},{"book_id":433567,"title":"Flatland: A Romance of Many Dimensions","image_url":"https:\/\/images.gr-assets.com\/books\/1435435775m\/433567.jpg","authors":"Edwin A. Abbott, Banesh Hoffmann"},{"book_id":434229,"title":"Cape Fear","image_url":"https:\/\/images.gr-assets.com\/books\/1396110398m\/434229.jpg","authors":"John D. MacDonald"},{"book_id":434535,"title":"The Peacegiver: How Christ Offers to Heal Our Hearts and Homes","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James L. Ferrell"},{"book_id":434764,"title":"Believing Christ: The Parable of the Bicycle and Other Good News","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Stephen E. Robinson"},{"book_id":435045,"title":"Wicked Deeds on a Winter's Night (Immortals After Dark #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1357614752m\/435045.jpg","authors":"Kresley Cole"},{"book_id":436806,"title":"Story of the Eye","image_url":"https:\/\/images.gr-assets.com\/books\/1490682356m\/436806.jpg","authors":"Georges Bataille, Joachim Neugroschel, Dovid Bergelson"},{"book_id":437885,"title":"Frosty the Snowman (Frosty the Snowman)","image_url":"https:\/\/images.gr-assets.com\/books\/1377635241m\/437885.jpg","authors":"Diane Muldrow"},{"book_id":438024,"title":"Let's Pretend This Never Happened (Dear Dumb Diary #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1328861650m\/438024.jpg","authors":"Jim Benton"},{"book_id":438492,"title":"The Wide Window (A Series of Unfortunate Events, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1320705923m\/438492.jpg","authors":"Lemony Snicket, Brett Helquist"},{"book_id":439173,"title":"Frindle","image_url":"https:\/\/images.gr-assets.com\/books\/1344395824m\/439173.jpg","authors":"Andrew Clements, Brian Selznick"},{"book_id":439275,"title":"Princess in the Spotlight (The Princess Diaries, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Meg Cabot"},{"book_id":439288,"title":"Speak","image_url":"https:\/\/images.gr-assets.com\/books\/1310121762m\/439288.jpg","authors":"Laurie Halse Anderson"},{"book_id":439363,"title":"Love\u2605Com, Vol. 1","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Aya Nakahara, Pookie Rolf"},{"book_id":440960,"title":"Batman and Son","image_url":"https:\/\/images.gr-assets.com\/books\/1328217465m\/440960.jpg","authors":"Grant Morrison, Andy Kubert, John Van Fleet, Jesse Delperdang"},{"book_id":441618,"title":"Breaking Free: Discover the Victory of Total Surrender","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Beth Moore"},{"book_id":443540,"title":"All He Ever Wanted","image_url":"https:\/\/images.gr-assets.com\/books\/1358594609m\/443540.jpg","authors":"Anita Shreve"},{"book_id":444304,"title":"The Field Guide (The Spiderwick Chronicles, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1358701476m\/444304.jpg","authors":"Holly Black, Tony DiTerlizzi"},{"book_id":444347,"title":"Chasing Vermeer (Chasing Vermeer, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Blue Balliett, Brett Helquist"},{"book_id":444381,"title":"The Princess and the Goblin (Princess Irene and Curdie, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"George MacDonald, Arthur Hughes"},{"book_id":448836,"title":"Second Treatise of Government","image_url":"https:\/\/images.gr-assets.com\/books\/1405624453m\/448836.jpg","authors":"John Locke, C.B. Macpherson"},{"book_id":448873,"title":"The Thief (The Queen's Thief, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Megan Whalen Turner"},{"book_id":450573,"title":"The Odd Couple","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Neil Simon"},{"book_id":450836,"title":"Like a Fire Burning (The Work and the Glory, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Gerald N. Lund"},{"book_id":452157,"title":"The Road to the Dark Tower: Exploring Stephen King's Magnum Opus","image_url":"https:\/\/images.gr-assets.com\/books\/1309204235m\/452157.jpg","authors":"Bev Vincent"},{"book_id":452235,"title":"The Firm","image_url":"https:\/\/images.gr-assets.com\/books\/1174886821m\/452235.jpg","authors":"John Grisham"},{"book_id":452244,"title":"Lost Souls","image_url":"https:\/\/images.gr-assets.com\/books\/1420793346m\/452244.jpg","authors":"Poppy Z. Brite"},{"book_id":452306,"title":"The Sisterhood of the Traveling Pants (Sisterhood, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1461611233m\/452306.jpg","authors":"Ann Brashares"},{"book_id":454236,"title":"Miracle in the Andes","image_url":"https:\/\/images.gr-assets.com\/books\/1320544978m\/454236.jpg","authors":"Nando Parrado, Vince Rause"},{"book_id":454856,"title":"Look Me in the Eye: My Life with Asperger's","image_url":"https:\/\/images.gr-assets.com\/books\/1320509615m\/454856.jpg","authors":"John Elder Robison"},{"book_id":455373,"title":"Sphere","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael Crichton"},{"book_id":455764,"title":"Audrey Rose","image_url":"https:\/\/images.gr-assets.com\/books\/1344267955m\/455764.jpg","authors":"Frank De Felitta"},{"book_id":455925,"title":"Running Blind (Jack Reacher, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1174926706m\/455925.jpg","authors":"Lee Child"},{"book_id":455930,"title":"Echo Burning (Jack Reacher, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lee Child"},{"book_id":455941,"title":"Persuader (Jack Reacher, #7)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lee Child"},{"book_id":456028,"title":"Red: The Heroic Rescue (The Circle, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1380858319m\/456028.jpg","authors":"Ted Dekker"},{"book_id":456057,"title":"Showdown (Paradise, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1329547365m\/456057.jpg","authors":"Ted Dekker"},{"book_id":457264,"title":"The Second Sex","image_url":"https:\/\/images.gr-assets.com\/books\/1327978178m\/457264.jpg","authors":"Simone de Beauvoir, H.M. Parshley, Deirdre Bair"},{"book_id":457457,"title":"Fine Things","image_url":"https:\/\/images.gr-assets.com\/books\/1320501112m\/457457.jpg","authors":"Danielle Steel"},{"book_id":457762,"title":"Sylvester and the Magic Pebble","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"William Steig"},{"book_id":458034,"title":"Caressed by Ice (Psy-Changeling #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nalini Singh"},{"book_id":459064,"title":"Reaper's Gale (The Malazan Book of the Fallen, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1403011403m\/459064.jpg","authors":"Steven Erikson"},{"book_id":459386,"title":"The Mermaids Singing (Tony Hill & Carol Jordan, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Val McDermid"},{"book_id":460548,"title":"Go, Dog. Go!","image_url":"https:\/\/images.gr-assets.com\/books\/1333578440m\/460548.jpg","authors":"P.D. Eastman"},{"book_id":460635,"title":"The Bone People","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Keri Hulme"},{"book_id":460717,"title":"The Dogs of War","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Frederick Forsyth"},{"book_id":462033,"title":"Maisie Dobbs (Maisie Dobbs, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1312066155m\/462033.jpg","authors":"Jacqueline Winspear"},{"book_id":462684,"title":"The Story of Tracy Beaker","image_url":"https:\/\/images.gr-assets.com\/books\/1320527485m\/462684.jpg","authors":"Jacqueline Wilson, Nick Sharratt"},{"book_id":464260,"title":"The Fire Next Time","image_url":"https:\/\/images.gr-assets.com\/books\/1488825618m\/464260.jpg","authors":"James Baldwin, K\u0131van\u00e7 G\u00fcney"},{"book_id":465226,"title":"The Redbreast (Harry Hole, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1320540474m\/465226.jpg","authors":"Jo Nesb\u00f8, Don Bartlett"},{"book_id":465904,"title":"Dragonsdawn (Pern, #9)","image_url":"https:\/\/images.gr-assets.com\/books\/1304015693m\/465904.jpg","authors":"Anne McCaffrey"},{"book_id":467032,"title":"The Bad Seed","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"William March, Elaine Showalter"},{"book_id":468070,"title":"Nigella Express: Good Food, Fast","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nigella Lawson"},{"book_id":469571,"title":"All the Pretty Horses (The Border Trilogy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1498463335m\/469571.jpg","authors":"Cormac McCarthy"},{"book_id":469901,"title":"Mr. Perfect","image_url":"https:\/\/images.gr-assets.com\/books\/1327960914m\/469901.jpg","authors":"Linda Howard"},{"book_id":470495,"title":"All Over But the Shoutin'","image_url":"https:\/\/images.gr-assets.com\/books\/1327905477m\/470495.jpg","authors":"Rick Bragg"},{"book_id":472025,"title":"Why I Am Not a Christian and Other Essays on Religion and Related Subjects","image_url":"https:\/\/images.gr-assets.com\/books\/1347925703m\/472025.jpg","authors":"Bertrand Russell, Paul Edwards"},{"book_id":472331,"title":"Watchmen","image_url":"https:\/\/images.gr-assets.com\/books\/1442239711m\/472331.jpg","authors":"Alan Moore, Dave Gibbons, John Higgins"},{"book_id":472343,"title":"Duma Key","image_url":"https:\/\/images.gr-assets.com\/books\/1470266968m\/472343.jpg","authors":"Stephen King"},{"book_id":473623,"title":"The Folk of the Faraway Tree (The Faraway Tree, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Enid Blyton"},{"book_id":474634,"title":"The Wedding Girl","image_url":"https:\/\/images.gr-assets.com\/books\/1320539465m\/474634.jpg","authors":"Madeleine Wickham"},{"book_id":474858,"title":"A Bad Case of Stripes","image_url":"https:\/\/images.gr-assets.com\/books\/1328867924m\/474858.jpg","authors":"David Shannon"},{"book_id":475276,"title":"D.N.Angel, Vol. 1 (D.N.Angel, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Yukiru Sugisaki"},{"book_id":475339,"title":"Madeline","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ludwig Bemelmans"},{"book_id":476543,"title":"The Darkest Night (Lords of the Underworld #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1322237965m\/476543.jpg","authors":"Gena Showalter"},{"book_id":477338,"title":"Blue is for Nightmares (Blue is for Nightmares, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1350054787m\/477338.jpg","authors":"Laurie Faria Stolarz"},{"book_id":478657,"title":"Undead and Unreturnable (Undead, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"MaryJanice Davidson"},{"book_id":478894,"title":"The Sword of Shannara Trilogy (Shannara, #1-3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Terry Brooks"},{"book_id":478951,"title":"The Bonehunters (Malazan Book of the Fallen, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1399934281m\/478951.jpg","authors":"Steven Erikson"},{"book_id":479415,"title":"The Horse Whisperer","image_url":"https:\/\/images.gr-assets.com\/books\/1320410310m\/479415.jpg","authors":"Nicholas Evans"},{"book_id":479561,"title":"The Neutronium Alchemist (Night's Dawn, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Peter F. Hamilton"},{"book_id":480204,"title":"The Phantom of the Opera","image_url":"https:\/\/images.gr-assets.com\/books\/1327867727m\/480204.jpg","authors":"Gaston Leroux, Alexander Teixeira de Mattos"},{"book_id":480479,"title":"Under the Tuscan Sun","image_url":"https:\/\/images.gr-assets.com\/books\/1320524083m\/480479.jpg","authors":"Frances Mayes"},{"book_id":480570,"title":"The First Man in Rome (Masters of Rome, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Colleen McCullough"},{"book_id":481335,"title":"The Vision","image_url":"https:\/\/images.gr-assets.com\/books\/1350747881m\/481335.jpg","authors":"Dean Koontz"},{"book_id":481446,"title":"Nefertiti","image_url":"https:\/\/images.gr-assets.com\/books\/1320449831m\/481446.jpg","authors":"Michelle Moran"},{"book_id":481462,"title":"The Howling","image_url":"https:\/\/images.gr-assets.com\/books\/1285664467m\/481462.jpg","authors":"Gary Brandner"},{"book_id":481743,"title":"The Wave","image_url":"https:\/\/images.gr-assets.com\/books\/1320402950m\/481743.jpg","authors":"Morton Rhue, Todd Strasser"},{"book_id":481749,"title":"Jesus the Christ","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James E. Talmage"},{"book_id":483445,"title":"The Magical Worlds of Harry Potter: A Treasury of Myths, Legends, and Fascinating Facts","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Colbert"},{"book_id":484167,"title":"Millennium Snow, Vol. 1","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bisco Hatori"},{"book_id":485894,"title":"The Metamorphosis","image_url":"https:\/\/images.gr-assets.com\/books\/1359061917m\/485894.jpg","authors":"Franz Kafka, Stanley Corngold"},{"book_id":487445,"title":"The Onion Field","image_url":"https:\/\/images.gr-assets.com\/books\/1320511693m\/487445.jpg","authors":"Joseph Wambaugh"},{"book_id":487666,"title":"Beyond Band of Brothers: The War Memoirs of Major Dick Winters","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dick Winters, Cole C. Kingseed"},{"book_id":489972,"title":"The Snowman","image_url":"https:\/\/images.gr-assets.com\/books\/1355497688m\/489972.jpg","authors":"Raymond Briggs"},{"book_id":490403,"title":"Upon the Midnight Clear (Dark-Hunter #12, Dream-Hunter #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1437691219m\/490403.jpg","authors":"Sherrilyn Kenyon"},{"book_id":490867,"title":"Knuffle Bunny: A Cautionary Tale (Knuffle Bunny, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mo Willems"},{"book_id":491735,"title":"The Dirty Girls Social Club (Dirty Girls, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1317066640m\/491735.jpg","authors":"Alisa Valdes, Alisa Valdes-Rodriguez"},{"book_id":493455,"title":"The Uglies Trilogy (Uglies, #1-3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Scott Westerfeld"},{"book_id":493456,"title":"Extras (Uglies, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Scott Westerfeld"},{"book_id":495395,"title":"The Year of Living Biblically: One Man's Humble Quest to Follow the Bible as Literally as Possible","image_url":"https:\/\/images.gr-assets.com\/books\/1327977486m\/495395.jpg","authors":"A.J. Jacobs"},{"book_id":497164,"title":"Camera Lucida: Reflections on Photography","image_url":"https:\/\/images.gr-assets.com\/books\/1312018081m\/497164.jpg","authors":"Roland Barthes, Richard Howard"},{"book_id":497199,"title":"Factotum","image_url":"https:\/\/images.gr-assets.com\/books\/1407706616m\/497199.jpg","authors":"Charles Bukowski"},{"book_id":498389,"title":"The Devil's Star (Harry Hole, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1328611163m\/498389.jpg","authors":"Jo Nesb\u00f8"},{"book_id":498641,"title":"The Practice of the Presence of God","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Brother Lawrence"},{"book_id":498835,"title":"Sepulchre (Languedoc, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1328120460m\/498835.jpg","authors":"Kate Mosse"},{"book_id":500503,"title":"Sailor Moon, #1 (Sailor Moon, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327981776m\/500503.jpg","authors":"Naoko Takeuchi"},{"book_id":500743,"title":"The Wizard Heir (The Heir Chronicles, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1298426467m\/500743.jpg","authors":"Cinda Williams Chima"},{"book_id":501124,"title":"One Good Turn (Jackson Brodie, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kate Atkinson"},{"book_id":502295,"title":"Gonzo: The Life of Hunter S. Thompson","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jann S. Wenner, Corey Seymour"},{"book_id":502406,"title":"Curious George Takes a Job","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"H.A. Rey"},{"book_id":503248,"title":"My Lobotomy","image_url":"https:\/\/images.gr-assets.com\/books\/1320449273m\/503248.jpg","authors":"Howard Dully, Charles Fleming"},{"book_id":504369,"title":"Field of Dishonor (Honor Harrington, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1321561655m\/504369.jpg","authors":"David Weber"},{"book_id":504420,"title":"Protect and Defend (Mitch Rapp, #10)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Vince Flynn"},{"book_id":505304,"title":"The Poky Little Puppy (A Little Golden Book)","image_url":"https:\/\/images.gr-assets.com\/books\/1320424154m\/505304.jpg","authors":"Janette Sebring Lowrey, Gustaf Tenggren"},{"book_id":508413,"title":"The Shunning (The Heritage of Lancaster County, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Beverly Lewis"},{"book_id":508903,"title":"The Cat Who Could Read Backwards (Cat Who..., #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lilian Jackson Braun"},{"book_id":509784,"title":"The End of Eternity","image_url":"https:\/\/images.gr-assets.com\/books\/1405527675m\/509784.jpg","authors":"Isaac Asimov"},{"book_id":511240,"title":"Yotsuba&!, Vol. 01 (Yotsuba&! #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1284943754m\/511240.jpg","authors":"Kiyohiko Azuma, \u3042\u305a\u307e \u304d\u3088\u3072\u3053"},{"book_id":511527,"title":"Double Act","image_url":"https:\/\/images.gr-assets.com\/books\/1353573624m\/511527.jpg","authors":"Jacqueline Wilson, Nick Sharratt, Sue Heap"},{"book_id":511614,"title":"The 101 Dalmatians (The Hundred and One Dalmatians, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1387310637m\/511614.jpg","authors":"Dodie Smith, Michael Dooling"},{"book_id":511684,"title":"The Illustrated Mum","image_url":"https:\/\/images.gr-assets.com\/books\/1320392229m\/511684.jpg","authors":"Jacqueline Wilson, Nick Sharratt"},{"book_id":512475,"title":"The Cradle Will Fall","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mary Higgins Clark"},{"book_id":513176,"title":"Rogue Squadron (Star Wars: X-Wing, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327860341m\/513176.jpg","authors":"Michael A. Stackpole"},{"book_id":513207,"title":"Champions of the Force (Star Wars: The Jedi Academy Trilogy, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1327008722m\/513207.jpg","authors":"Kevin J. Anderson"},{"book_id":513367,"title":"In Search of Schr\u00f6dinger's Cat: Quantum Physics and Reality","image_url":"https:\/\/images.gr-assets.com\/books\/1440464162m\/513367.jpg","authors":"John Gribbin"},{"book_id":514210,"title":"The Way of Zen","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Alan W. Watts"},{"book_id":514313,"title":"Bringing Down the House: The Inside Story of Six M.I.T. Students Who Took Vegas for Millions","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ben Mezrich"},{"book_id":515905,"title":"Knuffle Bunny Too: A Case of Mistaken Identity (Knuffle Bunny, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1327894604m\/515905.jpg","authors":"Mo Willems"},{"book_id":517188,"title":"The Prime of Miss Jean Brodie","image_url":"https:\/\/images.gr-assets.com\/books\/1379598918m\/517188.jpg","authors":"Muriel Spark"},{"book_id":517344,"title":"Clementine (Clementine, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sara Pennypacker, Marla Frazee"},{"book_id":518848,"title":"Sabriel (Abhorsen, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1293655399m\/518848.jpg","authors":"Garth Nix"},{"book_id":519048,"title":"The Seeing Stone (The Spiderwick Chronicles, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1358701671m\/519048.jpg","authors":"Holly Black, Tony DiTerlizzi"},{"book_id":519112,"title":"The Melancholy Death of Oyster Boy and Other Stories","image_url":"https:\/\/images.gr-assets.com\/books\/1338646527m\/519112.jpg","authors":"Tim Burton"},{"book_id":519933,"title":"The Lives of Christopher Chant (Chrestomanci, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1356549015m\/519933.jpg","authors":"Diana Wynne Jones"},{"book_id":520738,"title":"On Ugliness","image_url":"https:\/\/images.gr-assets.com\/books\/1320443510m\/520738.jpg","authors":"Umberto Eco"},{"book_id":522471,"title":"Hope Was Here","image_url":"https:\/\/images.gr-assets.com\/books\/1309211597m\/522471.jpg","authors":"Joan Bauer"},{"book_id":522525,"title":"Mistakes Were Made (But Not by Me): Why We Justify Foolish Beliefs, Bad Decisions, and Hurtful Acts","image_url":"https:\/\/images.gr-assets.com\/books\/1328876733m\/522525.jpg","authors":"Carol Tavris, Elliot Aronson"},{"book_id":522534,"title":"Geisha, a Life","image_url":"https:\/\/images.gr-assets.com\/books\/1359402937m\/522534.jpg","authors":"Mineko Iwasaki, Rande Brown"},{"book_id":522776,"title":"The Wolf of Wall Street","image_url":"https:\/\/images.gr-assets.com\/books\/1320489812m\/522776.jpg","authors":"Jordan Belfort"},{"book_id":525488,"title":"Boundaries: When to Say Yes, How to Say No to Take Control of Your Life","image_url":"https:\/\/images.gr-assets.com\/books\/1406403521m\/525488.jpg","authors":"Henry Cloud, John Townsend"},{"book_id":525995,"title":"Jumanji","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Chris Van Allsburg"},{"book_id":527744,"title":"After the Funeral (Hercule Poirot, #29)","image_url":"https:\/\/images.gr-assets.com\/books\/1384881992m\/527744.jpg","authors":"Agatha Christie"},{"book_id":527862,"title":"The Acid House","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Irvine Welsh"},{"book_id":529626,"title":"Sometimes a Great Notion","image_url":"https:\/\/images.gr-assets.com\/books\/1364846481m\/529626.jpg","authors":"Ken Kesey"},{"book_id":530793,"title":"The Wives of Henry VIII","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Antonia Fraser"},{"book_id":530848,"title":"Eighth Grade Bites (The Chronicles of Vladimir Tod, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Heather Brewer"},{"book_id":530965,"title":"The Day of the Triffids","image_url":"https:\/\/images.gr-assets.com\/books\/1320530145m\/530965.jpg","authors":"John Wyndham"},{"book_id":531197,"title":"Lyra's Oxford (His Dark Materials, #3.5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Philip Pullman, John Lawrence"},{"book_id":531262,"title":"A Handful of Dust","image_url":"https:\/\/images.gr-assets.com\/books\/1344266314m\/531262.jpg","authors":"Evelyn Waugh"},{"book_id":531350,"title":"The Choice","image_url":"https:\/\/images.gr-assets.com\/books\/1385739133m\/531350.jpg","authors":"Nicholas Sparks"},{"book_id":531421,"title":"Bella Tuscany","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Frances Mayes"},{"book_id":531989,"title":"Drown","image_url":"https:\/\/images.gr-assets.com\/books\/1313700390m\/531989.jpg","authors":"Junot D\u00edaz"},{"book_id":533465,"title":"Balzac and the Little Chinese Seamstress","image_url":"https:\/\/images.gr-assets.com\/books\/1403188885m\/533465.jpg","authors":"Dai Sijie, Ina Rilke"},{"book_id":533675,"title":"Pinocchio","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Eugene Bradley Coco, Ron Dias"},{"book_id":534255,"title":"Autobiography of a Face","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lucy Grealy"},{"book_id":534289,"title":"The I Ching or Book of Changes","image_url":"https:\/\/images.gr-assets.com\/books\/1406503668m\/534289.jpg","authors":"Anonymous, Richard Wilhelm, Cary F. Baynes, C.G. Jung"},{"book_id":534415,"title":"Dragons of Summer Flame (Dragonlance: The Second Generation, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Margaret Weis, Tracy Hickman"},{"book_id":534733,"title":"Rising Tides (Chesapeake Bay Saga, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nora Roberts"},{"book_id":535441,"title":"The Zombie Survival Guide: Complete Protection from the Living Dead","image_url":"https:\/\/images.gr-assets.com\/books\/1320562270m\/535441.jpg","authors":"Max Brooks"},{"book_id":535494,"title":"How Should We Then Live? The Rise and Decline of Western Thought and Culture","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Francis A. Schaeffer"},{"book_id":536790,"title":"Trumps of Doom (The Chronicles of Amber, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1418027077m\/536790.jpg","authors":"Roger Zelazny"},{"book_id":536982,"title":"The Never War (Pendragon, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"D.J. MacHale"},{"book_id":537070,"title":"Gregor and the Code of Claw (Underland Chronicles, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1365854331m\/537070.jpg","authors":"Suzanne Collins"},{"book_id":537094,"title":"The Overcoat","image_url":"https:\/\/images.gr-assets.com\/books\/1448040003m\/537094.jpg","authors":"Nikolai Gogol"},{"book_id":537296,"title":"Frog and Toad Are Friends (Frog and Toad, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Arnold Lobel"},{"book_id":537375,"title":"The Endurance: Shackleton's Legendary Antarctic Expedition","image_url":"https:\/\/images.gr-assets.com\/books\/1320487170m\/537375.jpg","authors":"Caroline Alexander"},{"book_id":538845,"title":"Quo Vadis","image_url":"https:\/\/images.gr-assets.com\/books\/1340709653m\/538845.jpg","authors":"Henryk Sienkiewicz, W.S. Kuniczak"},{"book_id":539282,"title":"Fences (The Century Cycle #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1481833774m\/539282.jpg","authors":"August Wilson"},{"book_id":539904,"title":"A Bridge Too Far","image_url":"https:\/\/images.gr-assets.com\/books\/1326921431m\/539904.jpg","authors":"Cornelius Ryan"},{"book_id":540020,"title":"The Day of the Jackal","image_url":"https:\/\/images.gr-assets.com\/books\/1405364996m\/540020.jpg","authors":"Frederick Forsyth"},{"book_id":541024,"title":"More Than Human","image_url":"https:\/\/images.gr-assets.com\/books\/1403192694m\/541024.jpg","authors":"Theodore Sturgeon"},{"book_id":541341,"title":"Deep and Dark and Dangerous (A Ghost Story)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mary Downing Hahn"},{"book_id":541920,"title":"An Army at Dawn: The War in North Africa, 1942-1943 (World War II Liberation Trilogy, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rick Atkinson"},{"book_id":542389,"title":"Stalingrad: The Fateful Siege, 1942\u20131943","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Antony Beevor"},{"book_id":542414,"title":"Scorpia (Alex Rider, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anthony Horowitz"},{"book_id":542639,"title":"The Shock of the New","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert Hughes"},{"book_id":542752,"title":"Things Not Seen (Things, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327910708m\/542752.jpg","authors":"Andrew Clements"},{"book_id":543086,"title":"Tom's Midnight Garden","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Philippa Pearce, Susan Einzig"},{"book_id":543103,"title":"Generation Kill: Devil Dogs, Iceman, Captain America, and the New Face of American War","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Evan Wright"},{"book_id":543339,"title":"Dances with Wolves (Dances with Wolves, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael Blake"},{"book_id":543505,"title":"The Tale of Mrs. Tiggy-Winkle","image_url":"https:\/\/images.gr-assets.com\/books\/1311281900m\/543505.jpg","authors":"Beatrix Potter"},{"book_id":543873,"title":"Mister Pip","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lloyd Jones"},{"book_id":544257,"title":"Midnight Alley (The Morganville Vampires, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rachel Caine"},{"book_id":544424,"title":"Leaving Paradise (Leaving Paradise, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Simone Elkeles"},{"book_id":544891,"title":"Beastly (Beastly, #1; Kendra Chronicles, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1334260193m\/544891.jpg","authors":"Alex Flinn"},{"book_id":545425,"title":"\u0627\u0644\u0631\u062d\u064a\u0642 \u0627\u0644\u0645\u062e\u062a\u0648\u0645","image_url":"https:\/\/images.gr-assets.com\/books\/1289025514m\/545425.jpg","authors":"Safiy al-Rahman al-Mubarakfuri"},{"book_id":545951,"title":"Death Comes for the Archbishop","image_url":"https:\/\/images.gr-assets.com\/books\/1436632846m\/545951.jpg","authors":"Willa Cather"},{"book_id":546018,"title":"Roots: The Saga of an American Family","image_url":"https:\/\/images.gr-assets.com\/books\/1329398936m\/546018.jpg","authors":"Alex Haley"},{"book_id":547094,"title":"I Am Legend and Other Stories","image_url":"https:\/\/images.gr-assets.com\/books\/1317791583m\/547094.jpg","authors":"Richard Matheson"},{"book_id":550454,"title":"Aztec (Aztec, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Gary Jennings"},{"book_id":550720,"title":"The Night Watch","image_url":"https:\/\/images.gr-assets.com\/books\/1394331077m\/550720.jpg","authors":"Sarah Waters"},{"book_id":550844,"title":"Cycle of the Werewolf","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Stephen King, Bernie Wrightson"},{"book_id":550940,"title":"The Chase (Isaac Bell, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Clive Cussler"},{"book_id":551536,"title":"Fire Star (The Last Dragon Chronicles, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Chris d'Lacey"},{"book_id":551876,"title":"Tikki Tikki Tembo","image_url":"https:\/\/images.gr-assets.com\/books\/1317064300m\/551876.jpg","authors":"Arlene Mosel, Blair Lent"},{"book_id":552887,"title":"Double Cross (Alex Cross, #13)","image_url":"https:\/\/images.gr-assets.com\/books\/1256839349m\/552887.jpg","authors":"James Patterson"},{"book_id":552894,"title":"7th Heaven (Women's Murder Club, #7)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Patterson, Maxine Paetro"},{"book_id":552987,"title":"A War of Gifts (Ender's Saga, #1.1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Orson Scott Card"},{"book_id":554674,"title":"The Story of the Trapp Family Singers","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Maria Augusta von Trapp"},{"book_id":555500,"title":"Peter and the Secret of Rundoon (Peter and the Starcatchers, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dave Barry, Ridley Pearson, Greg Call"},{"book_id":556136,"title":"The Wednesday Wars","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Gary D. Schmidt"},{"book_id":556511,"title":"The Very Busy Spider","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Eric Carle"},{"book_id":556602,"title":"Sarah's Key","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tatiana de Rosnay"},{"book_id":556629,"title":"The Holiness of God","image_url":"https:\/\/images.gr-assets.com\/books\/1175783071m\/556629.jpg","authors":"R.C. Sproul"},{"book_id":559889,"title":"Flood Tide (Dirk Pitt, #14)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Clive Cussler"},{"book_id":561403,"title":"The It Girl (It Girl, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1344263385m\/561403.jpg","authors":"Cecily von Ziegesar"},{"book_id":561456,"title":"The Titan's Curse (Percy Jackson and the Olympians, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1361038385m\/561456.jpg","authors":"Rick Riordan"},{"book_id":561909,"title":"The Hiding Place: The Triumphant True Story of Corrie Ten Boom","image_url":"https:\/\/images.gr-assets.com\/books\/1320418824m\/561909.jpg","authors":"Corrie ten Boom, John Sherrill, Elizabeth Sherrill"},{"book_id":562763,"title":"Scaredy Squirrel (Scaredy Squirrel)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"M\u00e9lanie Watt"},{"book_id":562930,"title":"The Book of Luke","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jenny O'Connell"},{"book_id":563458,"title":"Fallen Hearts (Casteel, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"V.C. Andrews"},{"book_id":563887,"title":"The Littles","image_url":"https:\/\/images.gr-assets.com\/books\/1360058166m\/563887.jpg","authors":"John Lawrence Peterson, Roberta Carter Clark"},{"book_id":567616,"title":"The Art Book","image_url":"https:\/\/images.gr-assets.com\/books\/1411210646m\/567616.jpg","authors":"Phaidon Press"},{"book_id":567678,"title":"The Wasp Factory","image_url":"https:\/\/images.gr-assets.com\/books\/1434940562m\/567678.jpg","authors":"Iain Banks"},{"book_id":567704,"title":"Imajica","image_url":"https:\/\/images.gr-assets.com\/books\/1333844729m\/567704.jpg","authors":"Clive Barker"},{"book_id":567795,"title":"The Five Love Languages: How to Express Heartfelt Commitment to Your Mate","image_url":"https:\/\/images.gr-assets.com\/books\/1369401342m\/567795.jpg","authors":"Gary Chapman"},{"book_id":568099,"title":"Waylander (The Drenai Saga, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1403179303m\/568099.jpg","authors":"David Gemmell"},{"book_id":568236,"title":"A Distant Mirror: The Calamitous 14th Century","image_url":"https:\/\/images.gr-assets.com\/books\/1403200553m\/568236.jpg","authors":"Barbara W. Tuchman"},{"book_id":568454,"title":"D.Gray-man, Volume 01","image_url":"https:\/\/images.gr-assets.com\/books\/1440124280m\/568454.jpg","authors":"Katsura Hoshino, Mayumi Kobayashi"},{"book_id":568476,"title":"Henry Huggins (Henry Huggins, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Beverly Cleary, Tracy Dockray"},{"book_id":568592,"title":"Fushigi Y\u00fbgi: The Mysterious Play, Vol. 1: Priestess","image_url":"https:\/\/images.gr-assets.com\/books\/1459065488m\/568592.jpg","authors":"Yuu Watase, Yuji Oniki"},{"book_id":568645,"title":"Cross My Heart and Hope to Spy (Gallagher Girls, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1342448094m\/568645.jpg","authors":"Ally Carter"},{"book_id":569346,"title":"Full Moon o Sagashite, Vol. 1","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Arina Tanemura, Tomo Kimura"},{"book_id":569564,"title":"The Complete Works","image_url":"https:\/\/images.gr-assets.com\/books\/1327884293m\/569564.jpg","authors":"William Shakespeare"},{"book_id":570172,"title":"The Brain That Changes Itself: Stories of Personal Triumph from the Frontiers of Brain Science","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Norman Doidge"},{"book_id":571508,"title":"Rumors of War (Children of the Promise, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dean Hughes"},{"book_id":571555,"title":"While My Pretty One Sleeps","image_url":"https:\/\/images.gr-assets.com\/books\/1421102605m\/571555.jpg","authors":"Mary Higgins Clark"},{"book_id":573201,"title":"The Icarus Agenda","image_url":"https:\/\/images.gr-assets.com\/books\/1403167832m\/573201.jpg","authors":"Robert Ludlum"},{"book_id":576570,"title":"The Princess and the Pea","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Janet Stevens, Hans Christian Andersen"},{"book_id":576666,"title":"And Ladies of the Club","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Helen Hooven Santmyer"},{"book_id":577283,"title":"The Confessions of Nat Turner","image_url":"https:\/\/images.gr-assets.com\/books\/1406138384m\/577283.jpg","authors":"William Styron"},{"book_id":577542,"title":"Rikki-Tikki-Tavi","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rudyard Kipling, Jerry Pinkney"},{"book_id":579143,"title":"Scuffy the Tugboat (Big Little Golden Book)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Gertrude Crampton"},{"book_id":579696,"title":"Our Dumb Century: The Onion Presents 100 Years of Headlines from America's Finest News Source","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Scott Dikkers, Maria Schneider, John Krewson, Robert Siegel, David Javerbaum, Todd Hanson, Carol Kolb, Mike Loew, Tim Harrod"},{"book_id":581125,"title":"The Minority Report","image_url":"https:\/\/images.gr-assets.com\/books\/1390719396m\/581125.jpg","authors":"Philip K. Dick"},{"book_id":581409,"title":"Strega Nona","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tomie dePaola"},{"book_id":581552,"title":"In the Penal Colony","image_url":"https:\/\/images.gr-assets.com\/books\/1480867517m\/581552.jpg","authors":"Franz Kafka"},{"book_id":582533,"title":"Creative Visualization: Use the Power of Your Imagination to Create What You Want in Your Life","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Shakti Gawain"},{"book_id":583924,"title":"Undead and Unappreciated (Undead, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"MaryJanice Davidson"},{"book_id":584637,"title":"Utilitarianism","image_url":"https:\/\/images.gr-assets.com\/books\/1405624617m\/584637.jpg","authors":"John Stuart Mill, George Sher"},{"book_id":586472,"title":"The Right Stuff","image_url":"https:\/\/images.gr-assets.com\/books\/1393654700m\/586472.jpg","authors":"Tom Wolfe"},{"book_id":586516,"title":"Hammer of the Gods","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Stephen Davis"},{"book_id":587582,"title":"Queen of Sorcery (The Belgariad, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1428943169m\/587582.jpg","authors":"David Eddings"},{"book_id":587638,"title":"Gentlemen of the Road","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael Chabon, Gary Gianni"},{"book_id":587666,"title":"Like the Flowing River ","image_url":"https:\/\/images.gr-assets.com\/books\/1399717203m\/587666.jpg","authors":"Paulo Coelho"},{"book_id":588138,"title":"The Hero With a Thousand Faces","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Joseph Campbell"},{"book_id":588234,"title":"Ceremony","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Leslie Marmon Silko"},{"book_id":588369,"title":"A Place Called Here","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Cecelia Ahern"},{"book_id":588747,"title":"Lady Audley's Secret","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mary Elizabeth Braddon"},{"book_id":589979,"title":"Daughter of the Empire (The Empire Trilogy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1404668411m\/589979.jpg","authors":"Raymond E. Feist, Janny Wurts"},{"book_id":590552,"title":"Chicken Soup with Rice: A Book of Months (The Nutshell Library)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Maurice Sendak"},{"book_id":592089,"title":"The Bar Code Tattoo (Bar Code, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1443904058m\/592089.jpg","authors":"Suzanne Weyn"},{"book_id":592657,"title":"Deliverance","image_url":"https:\/\/images.gr-assets.com\/books\/1334998332m\/592657.jpg","authors":"James Dickey"},{"book_id":594361,"title":"The Lion King: A little Golden Book","image_url":"https:\/\/images.gr-assets.com\/books\/1320412442m\/594361.jpg","authors":"Justine Korman Fontes, Don Williams, Walt Disney Company"},{"book_id":595375,"title":"Annie on My Mind","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nancy Garden"},{"book_id":595822,"title":"The Protector (O'Malley #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1406506767m\/595822.jpg","authors":"Dee Henderson"},{"book_id":596259,"title":"Standing for Something: 10 Neglected Virtues That Will Heal Our Hearts and Homes","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Gordon B. Hinckley"},{"book_id":597790,"title":"The Children of H\u00farin","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"J.R.R. Tolkien, Christopher Tolkien, Alan Lee"},{"book_id":598117,"title":"Sounder","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"William H. Armstrong, James Barkley"},{"book_id":598159,"title":"Panda Bear, Panda Bear, What Do You See?","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bill Martin Jr., Eric Carle"},{"book_id":598160,"title":"Polar Bear, Polar Bear, What Do You Hear?","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bill Martin Jr., Eric Carle"},{"book_id":599090,"title":"A New Hope (Star Wars: Novelizations #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1408936775m\/599090.jpg","authors":"Alan Dean Foster, George Lucas"},{"book_id":603204,"title":"How to Cook Everything: Simple Recipes for Great Food","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mark Bittman"},{"book_id":603422,"title":"The Moosewood Cookbook: Recipes from Moosewood Restaurant, Ithaca, New York","image_url":"https:\/\/images.gr-assets.com\/books\/1344370160m\/603422.jpg","authors":"Mollie Katzen"},{"book_id":603911,"title":"SilverFin (Young Bond, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1404538648m\/603911.jpg","authors":"Charlie Higson"},{"book_id":604635,"title":"Na\u00efve. Super","image_url":"https:\/\/images.gr-assets.com\/books\/1328731029m\/604635.jpg","authors":"Erlend Loe, Tor Ketil Solberg"},{"book_id":604803,"title":"Confessor (Sword of Truth, #11)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Terry Goodkind"},{"book_id":605015,"title":"Dead and Alive (Dean Koontz's Frankenstein, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dean Koontz"},{"book_id":606818,"title":"Holy Blood, Holy Grail","image_url":"https:\/\/images.gr-assets.com\/books\/1320394892m\/606818.jpg","authors":"Michael Baigent, Richard Leigh, Henry Lincoln"},{"book_id":607639,"title":"The Beach","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Alex Garland"},{"book_id":608216,"title":"The Summer Garden (The Bronze Horseman, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1411993309m\/608216.jpg","authors":"Paullina Simons"},{"book_id":608287,"title":"Jesus' Son","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Denis Johnson"},{"book_id":608474,"title":"The Sign of Four","image_url":"https:\/\/images.gr-assets.com\/books\/1299346921m\/608474.jpg","authors":"Arthur Conan Doyle, Peter Ackroyd, Ed Glinert"},{"book_id":608601,"title":"Ox-Cart Man (Picture Puffin)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Donald Hall, Barbara Cooney"},{"book_id":608906,"title":"Firestar's Quest (Warriors Super Edition, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1363488985m\/608906.jpg","authors":"Erin Hunter"},{"book_id":609035,"title":"Foxe's Book of Martyrs","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Foxe, W. Grinton Berry"},{"book_id":609870,"title":"The Vow: The Kim & Krickitt Carpenter Story","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kim Carpenter, John R. Perry, Krickitt Carpenter"},{"book_id":611298,"title":"I Am America (And So Can You!)","image_url":"https:\/\/images.gr-assets.com\/books\/1435873807m\/611298.jpg","authors":"Stephen Colbert, Richard Dahm, Paul Dinello, Allison Silverman, Michael Brumm, Eric Drydale, Rob Dubbin, Glenn Eichler, Peter Grosz, Peter Gwinn, Jay Katsir, Laura Krafft, Frank Lesser, Tom Purcell"},{"book_id":612188,"title":"Memories, Dreams, Reflections","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"C.G. Jung, Aniela Jaff\u00e9, Richard Winston, Clara Winston"},{"book_id":613283,"title":"Princess: A True Story of Life Behind the Veil in Saudi Arabia","image_url":"https:\/\/images.gr-assets.com\/books\/1377538002m\/613283.jpg","authors":"Jean Sasson"},{"book_id":613991,"title":"The King Beyond the Gate (The Drenai Saga, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Gemmell"},{"book_id":615233,"title":"Clifford's Halloween","image_url":"https:\/\/images.gr-assets.com\/books\/1328835774m\/615233.jpg","authors":"Norman Bridwell"},{"book_id":615570,"title":"The Artist's Way: A Spiritual Path to Higher Creativity","image_url":"https:\/\/images.gr-assets.com\/books\/1440952332m\/615570.jpg","authors":"Julia Cameron"},{"book_id":615921,"title":"Halo: First Strike","image_url":"https:\/\/images.gr-assets.com\/books\/1320418133m\/615921.jpg","authors":"Eric S. Nylund"},{"book_id":616318,"title":"Justice, Volume 1","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jim Krueger, Alex Ross, Doug Braithwaite"},{"book_id":616678,"title":"The Diamond Throne (The Elenium, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Eddings"},{"book_id":616828,"title":"Heart of Darkness and The Secret Sharer","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Joseph Conrad"},{"book_id":617526,"title":"The Six Sacred Stones (Jack West Jr, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1303511210m\/617526.jpg","authors":"Matthew Reilly"},{"book_id":618177,"title":"Legend (The Drenai Saga, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Gemmell"},{"book_id":621739,"title":"Millions of Cats","image_url":"https:\/\/images.gr-assets.com\/books\/1318725166m\/621739.jpg","authors":"Wanda G\u00e1g"},{"book_id":623976,"title":"Alcatraz Versus the Evil Librarians (Alcatraz, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1332516621m\/623976.jpg","authors":"Brandon Sanderson"},{"book_id":625094,"title":"The Leopard","image_url":"https:\/\/images.gr-assets.com\/books\/1376481466m\/625094.jpg","authors":"Giuseppe Tomasi di Lampedusa, Archibald Colquhoun"},{"book_id":625554,"title":"Pillar of Light (The Work and the Glory, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1416338631m\/625554.jpg","authors":"Gerald N. Lund"},{"book_id":625603,"title":"Horus Rising","image_url":"https:\/\/images.gr-assets.com\/books\/1414166935m\/625603.jpg","authors":"Dan Abnett"},{"book_id":627206,"title":"The New Drawing on the Right Side of the Brain","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Betty Edwards"},{"book_id":627984,"title":"Stone Cold (Camel Club, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Baldacci"},{"book_id":628139,"title":"Sea Swept (Chesapeake Bay Saga, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nora Roberts"},{"book_id":630621,"title":"The Incredible Hulk: Planet Hulk","image_url":"https:\/\/images.gr-assets.com\/books\/1312315970m\/630621.jpg","authors":"Greg Pak, Aaron Lopresti, Carlo Pagulayan, Juan Santacruz, Gary Frank, Takeshi Miyazawa"},{"book_id":633270,"title":"The Ear, the Eye, and the Arm","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nancy Farmer"},{"book_id":634407,"title":"Knots and Crosses (Inspector Rebus, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ian Rankin, Mircea Pric\u0103jan"},{"book_id":634583,"title":"Wings of Fire: An Autobiography","image_url":"https:\/\/images.gr-assets.com\/books\/1295670969m\/634583.jpg","authors":"A.P.J. Abdul Kalam, Arun Tiwari"},{"book_id":635083,"title":"Owen","image_url":"https:\/\/images.gr-assets.com\/books\/1415585883m\/635083.jpg","authors":"Kevin Henkes"},{"book_id":639787,"title":"The Murder on the Links (Hercule Poirot, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1384562979m\/639787.jpg","authors":"Agatha Christie"},{"book_id":639864,"title":"Autobiography of a Yogi","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Paramahansa Yogananda"},{"book_id":641604,"title":"Purple Cow: Transform Your Business by Being Remarkable","image_url":"https:\/\/images.gr-assets.com\/books\/1309203098m\/641604.jpg","authors":"Seth Godin"},{"book_id":643301,"title":"Angels and Demons \/ The Da Vinci Code (Robert Langdon, #1-2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dan Brown"},{"book_id":643962,"title":"L is for Lawless (Kinsey Millhone, #12)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sue Grafton"},{"book_id":643974,"title":"I is for Innocent (Kinsey Millhone, #9)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sue Grafton"},{"book_id":643988,"title":"Indemnity Only (V.I. Warshawski, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1388939553m\/643988.jpg","authors":"Sara Paretsky"},{"book_id":644655,"title":"Raven Black (Shetland Island, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ann Cleeves"},{"book_id":645023,"title":"Castle of Wizardry (The Belgariad, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1421711682m\/645023.jpg","authors":"David Eddings"},{"book_id":645180,"title":"Soon I Will Be Invincible","image_url":"https:\/\/images.gr-assets.com\/books\/1320554514m\/645180.jpg","authors":"Austin Grossman"},{"book_id":646056,"title":"The Little Mermaid","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael Teitelbaum, Sue DiCicco"},{"book_id":646195,"title":"Babe: The Gallant Pig","image_url":"https:\/\/images.gr-assets.com\/books\/1320498616m\/646195.jpg","authors":"Dick King-Smith, Maggie Kneen"},{"book_id":646462,"title":"The Qur'an \/ \u0627\u0644\u0642\u0631\u0622\u0646 \u0627\u0644\u0643\u0631\u064a\u0645","image_url":"https:\/\/images.gr-assets.com\/books\/1275263838m\/646462.jpg","authors":"Anonymous"},{"book_id":648194,"title":"Hissy Fit","image_url":"https:\/\/images.gr-assets.com\/books\/1355940330m\/648194.jpg","authors":"Mary Kay Andrews"},{"book_id":651260,"title":"Domes of Fire (The Tamuli, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1388212602m\/651260.jpg","authors":"David Eddings"},{"book_id":653396,"title":"Feel the Fear and Do It Anyway","image_url":"https:\/\/images.gr-assets.com\/books\/1363288028m\/653396.jpg","authors":"Susan Jeffers"},{"book_id":653559,"title":"Sherlock Holmes and the Case of the Hound of the Baskervilles (Illustrated Classic Editions)","image_url":"https:\/\/images.gr-assets.com\/books\/1292693979m\/653559.jpg","authors":"Malvina G. Vogel, Arthur Conan Doyle"},{"book_id":653711,"title":"Crystal Singer (Crystal Singer, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1403186691m\/653711.jpg","authors":"Anne McCaffrey"},{"book_id":655601,"title":"Divine Madness (Cherub, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1283561989m\/655601.jpg","authors":"Robert Muchamore"},{"book_id":657034,"title":"Heartsick (Archie Sheridan & Gretchen Lowell, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1317065387m\/657034.jpg","authors":"Chelsea Cain"},{"book_id":657371,"title":"Tweak: Growing Up On Methamphetamines","image_url":"https:\/\/images.gr-assets.com\/books\/1259233004m\/657371.jpg","authors":"Nic Sheff"},{"book_id":659388,"title":"Nobody's Fool","image_url":"https:\/\/images.gr-assets.com\/books\/1463435569m\/659388.jpg","authors":"Richard Russo"},{"book_id":659469,"title":"The Hobbit: Graphic Novel","image_url":"https:\/\/images.gr-assets.com\/books\/1374681632m\/659469.jpg","authors":"Chuck Dixon, J.R.R. Tolkien, David Wenzel, Sean Deming"},{"book_id":659546,"title":"Promise Not to Tell","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jennifer McMahon"},{"book_id":659612,"title":"Seeds of Yesterday (Dollanganger, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1321685100m\/659612.jpg","authors":"V.C. Andrews"},{"book_id":659622,"title":"Garden of Shadows (Dollanganger, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"V.C. Andrews"},{"book_id":662597,"title":"Cut","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Patricia McCormick"},{"book_id":663098,"title":"The Devil You Know (Felix Castor, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mike Carey"},{"book_id":666758,"title":"The Knowledge of the Holy","image_url":"https:\/\/images.gr-assets.com\/books\/1411484750m\/666758.jpg","authors":"A.W. Tozer"},{"book_id":667234,"title":"The Cat in the Hat Comes Back","image_url":"https:\/\/images.gr-assets.com\/books\/1332799738m\/667234.jpg","authors":"Dr. Seuss"},{"book_id":667985,"title":"Chobits, Vol. 1","image_url":"https:\/\/images.gr-assets.com\/books\/1487723428m\/667985.jpg","authors":"CLAMP, Shirley Kubo"},{"book_id":668710,"title":"Magic and Other Misdemeanors (The Sisters Grimm, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael Buckley, Peter Ferguson"},{"book_id":669570,"title":"Dragon Slippers (Dragon Slippers, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1316730294m\/669570.jpg","authors":"Jessica Day George"},{"book_id":669780,"title":"Season of Migration to the North","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tayeb Salih, Denys Johnson-Davies"},{"book_id":671724,"title":"The Death of Kings (Emperor, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1320470253m\/671724.jpg","authors":"Conn Iggulden"},{"book_id":672493,"title":"The Pursuit of God","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"A.W. Tozer"},{"book_id":672875,"title":"Le Morte d'Arthur: King Arthur and the Legends of the Round Table","image_url":"https:\/\/images.gr-assets.com\/books\/1309288301m\/672875.jpg","authors":"Thomas Malory, Keith Baines, Robert Graves"},{"book_id":672948,"title":"Arch of Triumph: A Novel of a Man Without a Country","image_url":"https:\/\/images.gr-assets.com\/books\/1353844109m\/672948.jpg","authors":"Erich Maria Remarque"},{"book_id":673252,"title":"Anne McCaffrey's Dragonflight #1","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Brynne Stephens, Lela Dowling, Cynthia Martin, Anne McCaffrey"},{"book_id":673657,"title":"Guardians of the West (The Malloreon, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1342528416m\/673657.jpg","authors":"David Eddings"},{"book_id":674220,"title":"Again the Magic (Wallflowers, #0)","image_url":"https:\/\/images.gr-assets.com\/books\/1418771403m\/674220.jpg","authors":"Lisa Kleypas"},{"book_id":675614,"title":"Book of Shadows (Sweep, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Cate Tiernan"},{"book_id":675905,"title":"Summer People","image_url":"https:\/\/images.gr-assets.com\/books\/1317063942m\/675905.jpg","authors":"Elin Hilderbrand"},{"book_id":676555,"title":"The Beatles Anthology","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"The Beatles, Paul McCartney, Ringo Starr, John Lennon, George Harrison"},{"book_id":676737,"title":"Grendel","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Gardner"},{"book_id":676924,"title":"Betrayed (House of Night, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"P.C. Cast, Kristin Cast"},{"book_id":682153,"title":"Three Fates","image_url":"https:\/\/images.gr-assets.com\/books\/1309201516m\/682153.jpg","authors":"Nora Roberts"},{"book_id":682745,"title":"The Basketball Diaries","image_url":"https:\/\/images.gr-assets.com\/books\/1493867556m\/682745.jpg","authors":"Jim Carroll"},{"book_id":682751,"title":"Animalia","image_url":"https:\/\/images.gr-assets.com\/books\/1344705263m\/682751.jpg","authors":"Graeme Base"},{"book_id":682761,"title":"The Nazi Officer's Wife: How One Jewish Woman Survived the Holocaust","image_url":"https:\/\/images.gr-assets.com\/books\/1177117840m\/682761.jpg","authors":"Edith Hahn Beer, Susan Dworkin, Susan Sarandon, Julia Ormond, Rory Kennedy"},{"book_id":682793,"title":"Pudd'nhead Wilson","image_url":"https:\/\/images.gr-assets.com\/books\/1473261603m\/682793.jpg","authors":"Mark Twain"},{"book_id":682804,"title":"The Killer Angels (The Civil War Trilogy, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1355371689m\/682804.jpg","authors":"Michael Shaara"},{"book_id":682920,"title":"The Little Mouse, the Red Ripe Strawberry, and the Big Hungry Bear","image_url":"https:\/\/images.gr-assets.com\/books\/1413750983m\/682920.jpg","authors":"Don Wood, Audrey Wood"},{"book_id":685401,"title":"Permission Marketing: Turning Strangers Into Friends And Friends Into Customers","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Seth Godin"},{"book_id":687215,"title":"The Power That Preserves (The Chronicles of Thomas Covenant the Unbeliever, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Stephen R. Donaldson"},{"book_id":687278,"title":"When Things Fall Apart: Heart Advice for Difficult Times","image_url":"https:\/\/images.gr-assets.com\/books\/1320553046m\/687278.jpg","authors":"Pema Ch\u00f6dr\u00f6n"},{"book_id":688191,"title":"Everlost (Skinjacker, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Neal Shusterman"},{"book_id":688663,"title":"The Art of Simple Food: Notes, Lessons, and Recipes from a Delicious Revolution","image_url":"https:\/\/images.gr-assets.com\/books\/1320458644m\/688663.jpg","authors":"Alice Waters"},{"book_id":690866,"title":"The Hundred Secret Senses","image_url":"https:\/\/images.gr-assets.com\/books\/1327869967m\/690866.jpg","authors":"Amy Tan"},{"book_id":690926,"title":"The Twilight Collection (Twilight, #1-3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Stephenie Meyer"},{"book_id":690955,"title":"Bad Kitty","image_url":"https:\/\/images.gr-assets.com\/books\/1403422027m\/690955.jpg","authors":"Nick Bruel"},{"book_id":691520,"title":"No One Here Gets Out Alive","image_url":"https:\/\/images.gr-assets.com\/books\/1344270704m\/691520.jpg","authors":"Danny Sugerman, Jerry Hopkins"},{"book_id":693016,"title":"Mine Till Midnight (The Hathaways, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1380326170m\/693016.jpg","authors":"Lisa Kleypas"},{"book_id":693172,"title":"Twilight Eyes","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dean Koontz"},{"book_id":693208,"title":"The Absolutely True Diary of a Part-Time Indian","image_url":"https:\/\/images.gr-assets.com\/books\/1327908992m\/693208.jpg","authors":"Sherman Alexie, Ellen Forney"},{"book_id":696177,"title":"The Gentlemen's Alliance \u2020, Vol. 1","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Arina Tanemura"},{"book_id":697210,"title":"Lost & Found (Rocky Pelligrino, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jacqueline Sheehan"},{"book_id":701738,"title":"Incendiary","image_url":"https:\/\/images.gr-assets.com\/books\/1320474372m\/701738.jpg","authors":"Chris Cleave"},{"book_id":702539,"title":"Get Shorty (Chili Palmer, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1330673682m\/702539.jpg","authors":"Elmore Leonard"},{"book_id":703292,"title":"The Witch of Blackbird Pond","image_url":"https:\/\/images.gr-assets.com\/books\/1345499790m\/703292.jpg","authors":"Elizabeth George Speare"},{"book_id":704043,"title":"Kiss of Midnight (Midnight Breed, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327884885m\/704043.jpg","authors":"Lara Adrian"},{"book_id":710969,"title":"Mates, Dates, and Inflatable Bras (Mates, Dates, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Cathy Hopkins"},{"book_id":711901,"title":"Lone Survivor: The Eyewitness Account of Operation Redwing and the Lost Heroes of SEAL Team 10","image_url":"https:\/\/images.gr-assets.com\/books\/1344265535m\/711901.jpg","authors":"Marcus Luttrell, Patrick Robinson"},{"book_id":712313,"title":"Barefoot","image_url":"https:\/\/images.gr-assets.com\/books\/1344271499m\/712313.jpg","authors":"Elin Hilderbrand"},{"book_id":712807,"title":"Ruby Holler","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sharon Creech"},{"book_id":714380,"title":"The Discoverers: A History of Man's Search to Know His World and Himself","image_url":"https:\/\/images.gr-assets.com\/books\/1321817832m\/714380.jpg","authors":"Daniel J. Boorstin"},{"book_id":714569,"title":"A Countess Below Stairs","image_url":"https:\/\/images.gr-assets.com\/books\/1311649247m\/714569.jpg","authors":"Eva Ibbotson"},{"book_id":714711,"title":"You Can Win: A Step by Step Tool for Top Achievers","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Shiv Khera"},{"book_id":714902,"title":"Noughts & Crosses (Noughts & Crosses, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1443903273m\/714902.jpg","authors":"Malorie Blackman"},{"book_id":715791,"title":"Kiss of Crimson (Midnight Breed, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lara Adrian"},{"book_id":715834,"title":"The Apprentice (Rizzoli & Isles, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1467859772m\/715834.jpg","authors":"Tess Gerritsen"},{"book_id":716696,"title":"\u0631\u0628\u0627\u0639\u064a\u0627\u062a \u062e\u064a\u0627\u0645","image_url":"https:\/\/images.gr-assets.com\/books\/1441007730m\/716696.jpg","authors":"Omar Khayy\u00e1m, \u0645\u062d\u0645\u062f\u0639\u0644\u06cc \u0641\u0631\u0648\u063a\u06cc, \u0642\u0627\u0633\u0645 \u063a\u0646\u06cc"},{"book_id":716944,"title":"Owl Babies","image_url":"https:\/\/images.gr-assets.com\/books\/1408930554m\/716944.jpg","authors":"Martin Waddell, Patrick Benson"},{"book_id":720298,"title":"Codependent No More: How to Stop Controlling Others and Start Caring for Yourself","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Melody Beattie"},{"book_id":721003,"title":"Peak (Peak #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1328876929m\/721003.jpg","authors":"Roland Smith"},{"book_id":721012,"title":"The Legend of Sleepy Hollow and Other Stories","image_url":"https:\/\/images.gr-assets.com\/books\/1309285607m\/721012.jpg","authors":"Geoffrey Crayon, Washington Irving, William L. Hedges"},{"book_id":722864,"title":"Inside the Human Body (The Magic School Bus, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Joanna Cole, Bruce Degen"},{"book_id":724371,"title":"The Lady of Shalott","image_url":"https:\/\/images.gr-assets.com\/books\/1400891098m\/724371.jpg","authors":"Alfred Tennyson, Charles Keeping"},{"book_id":730501,"title":"What Katy Did (Carr Family, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327538133m\/730501.jpg","authors":"Susan Coolidge"},{"book_id":731804,"title":"Pinkalicious","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Victoria Kann, Elizabeth Kann"},{"book_id":732562,"title":"The Rime of the Ancient Mariner","image_url":"https:\/\/images.gr-assets.com\/books\/1436976206m\/732562.jpg","authors":"Samuel Taylor Coleridge, Gustave Dor\u00e9"},{"book_id":734542,"title":"Freight Train","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Donald Crews"},{"book_id":736131,"title":"The Valley of Fear","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Arthur Conan Doyle, David Timson"},{"book_id":736376,"title":"Breakfast with Buddha","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Roland Merullo"},{"book_id":737957,"title":"Michelangelo and the Pope's Ceiling","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ross King"},{"book_id":739840,"title":"Bambi","image_url":"https:\/\/images.gr-assets.com\/books\/1344401718m\/739840.jpg","authors":"Felix Salten, Barbara Cooney"},{"book_id":743599,"title":"Beyond the Highland Mist (Highlander, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1348924088m\/743599.jpg","authors":"Karen Marie Moning"},{"book_id":744615,"title":"Scott Pilgrim, Volume 4: Scott Pilgrim Gets It Together","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bryan Lee O'Malley, Steve Buccellato"},{"book_id":747061,"title":"Book of Mormon, Doctrine and Covenants, Pearl of Great Price","image_url":"https:\/\/images.gr-assets.com\/books\/1396619969m\/747061.jpg","authors":"The Church of Jesus Christ of Latter-day Saints"},{"book_id":747746,"title":"The Curious Case of Benjamin Button","image_url":"https:\/\/images.gr-assets.com\/books\/1331235364m\/747746.jpg","authors":"F. Scott Fitzgerald"},{"book_id":748862,"title":"Simple Abundance: A Daybook of Comfort and Joy","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sarah Ban Breathnach"},{"book_id":751635,"title":"The Skin I'm In","image_url":"https:\/\/images.gr-assets.com\/books\/1305064345m\/751635.jpg","authors":"Sharon G. Flake"},{"book_id":752900,"title":"Medea","image_url":"https:\/\/images.gr-assets.com\/books\/1328868366m\/752900.jpg","authors":"Euripides, Rex Warner"},{"book_id":752994,"title":"The Misanthrope","image_url":"https:\/\/images.gr-assets.com\/books\/1416873266m\/752994.jpg","authors":"Moli\u00e8re"},{"book_id":754713,"title":"His Last Bow: 8 Stories","image_url":"https:\/\/images.gr-assets.com\/books\/1368588782m\/754713.jpg","authors":"Arthur Conan Doyle"},{"book_id":758153,"title":"Born Free: A Lioness of Two Worlds (Story of Elsa, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Joy Adamson"},{"book_id":759611,"title":"Brown Bear, Brown Bear, What Do You See?","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bill Martin Jr., Eric Carle"},{"book_id":759900,"title":"The Killing Hour (Quincy & Rainie, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lisa Gardner"},{"book_id":759945,"title":"The Magic of Thinking Big","image_url":"https:\/\/images.gr-assets.com\/books\/1404632064m\/759945.jpg","authors":"David J. Schwartz"},{"book_id":759960,"title":"Rumble Fish","image_url":"https:\/\/images.gr-assets.com\/books\/1320491172m\/759960.jpg","authors":"S.E. Hinton"},{"book_id":760025,"title":"Positioning: The Battle for Your Mind: How to Be Seen and Heard in the Overcrowded Marketplace","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Al Ries, Jack Trout"},{"book_id":760110,"title":"Jedi Search (Star Wars: The Jedi Academy Trilogy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327958212m\/760110.jpg","authors":"Kevin J. Anderson"},{"book_id":760168,"title":"Just Me in the Tub (Mercer Mayer's Little Critter)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Gina Mayer, Mercer Mayer"},{"book_id":760205,"title":"There's a Nightmare in My Closet","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mercer Mayer"},{"book_id":760941,"title":"When Rabbit Howls","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Truddi Chase, Robert A. Phillips Jr."},{"book_id":761023,"title":"Books of Blood: Volume One (Books of Blood #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1429999423m\/761023.jpg","authors":"Clive Barker"},{"book_id":761575,"title":"House Atreides (Prelude to Dune #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1403181106m\/761575.jpg","authors":"Brian Herbert, Kevin J. Anderson"},{"book_id":761732,"title":"Soul of the Fire (Sword of Truth, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Terry Goodkind"},{"book_id":762053,"title":"Key of Light (Key Trilogy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1178133365m\/762053.jpg","authors":"Nora Roberts"},{"book_id":762064,"title":"Betrayal in Death (In Death, #12)","image_url":"https:\/\/images.gr-assets.com\/books\/1388255545m\/762064.jpg","authors":"J.D. Robb, Nora Roberts"},{"book_id":762134,"title":"Palace Walk (The Cairo Trilogy #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327882172m\/762134.jpg","authors":"Naguib Mahfouz, William M. Hutchins, Olive E. Kenny"},{"book_id":762288,"title":"Nothing's Fair in Fifth Grade","image_url":"https:\/\/images.gr-assets.com\/books\/1458976419m\/762288.jpg","authors":"Barthe DeClements"},{"book_id":762462,"title":"One Up On Wall Street: How To Use What You Already Know To Make Money In The Market","image_url":"https:\/\/images.gr-assets.com\/books\/1444850522m\/762462.jpg","authors":"Peter Lynch, John Rothchild"},{"book_id":762563,"title":"Ball Four","image_url":"https:\/\/images.gr-assets.com\/books\/1391414699m\/762563.jpg","authors":"Jim Bouton"},{"book_id":762806,"title":"Gorky Park (Arkady Renko, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Martin Cruz Smith"},{"book_id":763047,"title":"Straight Talking","image_url":"https:\/\/images.gr-assets.com\/books\/1320399611m\/763047.jpg","authors":"Jane Green"},{"book_id":763362,"title":"The One Minute Manager","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kenneth H. Blanchard, Spencer Johnson"},{"book_id":763429,"title":"The Walking Dead, Book Three (The Walking Dead #25-36)","image_url":"https:\/\/images.gr-assets.com\/books\/1426446934m\/763429.jpg","authors":"Robert Kirkman, Charlie Adlard, Cliff Rathburn, Rus Wooton"},{"book_id":763594,"title":"The Gemini Contenders","image_url":"https:\/\/images.gr-assets.com\/books\/1320401784m\/763594.jpg","authors":"Robert Ludlum"},{"book_id":764063,"title":"Wonderful Tonight","image_url":"https:\/\/images.gr-assets.com\/books\/1320426628m\/764063.jpg","authors":"Pattie Boyd, Penny Junor"},{"book_id":764073,"title":"When the Emperor Was Divine","image_url":"https:\/\/images.gr-assets.com\/books\/1368314069m\/764073.jpg","authors":"Julie Otsuka"},{"book_id":764165,"title":"The Snow Leopard","image_url":"https:\/\/images.gr-assets.com\/books\/1309211772m\/764165.jpg","authors":"Peter Matthiessen"},{"book_id":764347,"title":"Unwind (Unwind, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1297677706m\/764347.jpg","authors":"Neal Shusterman"},{"book_id":764434,"title":"Shroud for a Nightingale (Adam Dalgliesh #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1321172495m\/764434.jpg","authors":"P.D. James"},{"book_id":764903,"title":"Cheaper by the Dozen","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Frank B. Gilbreth Jr., Ernestine Gilbreth Carey"},{"book_id":765148,"title":"Giraffes Can't Dance","image_url":"https:\/\/images.gr-assets.com\/books\/1306505271m\/765148.jpg","authors":"Giles Andreae, Guy Parker-Rees"},{"book_id":765193,"title":"Amazing Grace","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mary Hoffman, Caroline Binch"},{"book_id":765281,"title":"Lady and the Tramp","image_url":"https:\/\/images.gr-assets.com\/books\/1420795364m\/765281.jpg","authors":"Teddy Slater, Bill Langley, Ron Dias, Walt Disney Company"},{"book_id":765427,"title":"The Faerie Queene ","image_url":"https:\/\/images.gr-assets.com\/books\/1328308492m\/765427.jpg","authors":"Edmund Spenser, Thomas P. Roche, C. Patrick O'Donnell"},{"book_id":765811,"title":"The Women of Brewster Place","image_url":"https:\/\/images.gr-assets.com\/books\/1309209011m\/765811.jpg","authors":"Gloria Naylor"},{"book_id":766020,"title":"The Rainbow Fish","image_url":"https:\/\/images.gr-assets.com\/books\/1328755881m\/766020.jpg","authors":"Marcus Pfister, J. Alison James"},{"book_id":766917,"title":"Homer Price (A Puffin Book)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert McCloskey"},{"book_id":766955,"title":"Click, Clack, Moo: Cows That Type","image_url":"https:\/\/images.gr-assets.com\/books\/1423222939m\/766955.jpg","authors":"Doreen Cronin, Betsy Lewin"},{"book_id":767171,"title":"The Rise and Fall of the Third Reich: A History of Nazi Germany","image_url":"https:\/\/images.gr-assets.com\/books\/1331223772m\/767171.jpg","authors":"William L. Shirer"},{"book_id":767307,"title":"The Angel of Darkness (Dr. Laszlo Kreizler, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1433066571m\/767307.jpg","authors":"Caleb Carr"},{"book_id":767680,"title":"If You Give a Mouse a Cookie","image_url":"https:\/\/images.gr-assets.com\/books\/1276046901m\/767680.jpg","authors":"Laura Joffe Numeroff, Felicia Bond"},{"book_id":768878,"title":"Abarat (Abarat, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Clive Barker"},{"book_id":768889,"title":"A Storm of Swords: Steel and Snow (A Song of Ice and Fire, #3: Part 1 of 2)","image_url":"https:\/\/images.gr-assets.com\/books\/1353235205m\/768889.jpg","authors":"George R.R. Martin"},{"book_id":769016,"title":"How to Talk So Kids Will Listen & Listen So Kids Will Talk","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Adele Faber, Elaine Mazlish, Kimberly Ann Coe"},{"book_id":769212,"title":"The Last Seven Months of Anne Frank","image_url":"https:\/\/images.gr-assets.com\/books\/1320487142m\/769212.jpg","authors":"Willy Lindwer"},{"book_id":769483,"title":"Magyk (Septimus Heap, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Angie Sage"},{"book_id":769658,"title":"Battlefield Earth: A Saga of the Year 3000","image_url":"https:\/\/images.gr-assets.com\/books\/1349316024m\/769658.jpg","authors":"L. Ron Hubbard"},{"book_id":769712,"title":"Palestine","image_url":"https:\/\/images.gr-assets.com\/books\/1327884409m\/769712.jpg","authors":"Joe Sacco, Edward Said"},{"book_id":770038,"title":"Is Your Mama a Llama?","image_url":"https:\/\/images.gr-assets.com\/books\/1328835648m\/770038.jpg","authors":"Deborah Guarino, Steven Kellogg"},{"book_id":770040,"title":"Llama Llama Mad at Mama","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anna Dewdney"},{"book_id":770051,"title":"Olivia","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ian Falconer"},{"book_id":771332,"title":"With the Old Breed: At Peleliu and Okinawa","image_url":"https:\/\/images.gr-assets.com\/books\/1297640051m\/771332.jpg","authors":"Eugene B. Sledge, Paul Fussell"},{"book_id":772852,"title":"The Cross and the Switchblade","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Wilkerson, John Sherrill, Elizabeth Sherrill"},{"book_id":772976,"title":"Frida Kahlo: 1907-1954 Pain and Passion","image_url":"https:\/\/images.gr-assets.com\/books\/1365526293m\/772976.jpg","authors":"Andrea Kettenmann"},{"book_id":773038,"title":"The Seven Spiritual Laws of Success: A Practical Guide to the Fulfillment of Your Dreams","image_url":"https:\/\/images.gr-assets.com\/books\/1344718433m\/773038.jpg","authors":"Deepak Chopra"},{"book_id":773276,"title":"Good Night, Gorilla","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Peggy Rathmann"},{"book_id":773480,"title":"Inside, Outside, Upside Down (Berenstain Bears Bright and Early Board Book)","image_url":"https:\/\/images.gr-assets.com\/books\/1428895593m\/773480.jpg","authors":"Stan Berenstain, Jan Berenstain"},{"book_id":773514,"title":"Emily Climbs (Emily, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1403189071m\/773514.jpg","authors":"L.M. Montgomery"},{"book_id":773606,"title":"Madeline's Rescue","image_url":"https:\/\/images.gr-assets.com\/books\/1355323337m\/773606.jpg","authors":"Ludwig Bemelmans"},{"book_id":773858,"title":"Born Standing Up: A Comic's Life","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Steve Martin"},{"book_id":773951,"title":"The Story of Ferdinand","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Munro Leaf, Robert Lawson"},{"book_id":774001,"title":"Amelia Bedelia (Amelia Bedelia #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1353400157m\/774001.jpg","authors":"Peggy Parish, Fritz Siebel"},{"book_id":774060,"title":"Prisoner of My Desire","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Johanna Lindsey"},{"book_id":775346,"title":"The Little Friend","image_url":"https:\/\/images.gr-assets.com\/books\/1327936589m\/775346.jpg","authors":"Donna Tartt"},{"book_id":775597,"title":"Caps for Sale: A Tale of a Peddler, Some Monkeys and Their Monkey Business","image_url":"https:\/\/images.gr-assets.com\/books\/1348541342m\/775597.jpg","authors":"Esphyr Slobodkina"},{"book_id":776159,"title":"The Lady in the Lake (Philip Marlowe, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1501530591m\/776159.jpg","authors":"Raymond Chandler"},{"book_id":776407,"title":"The House at Pooh Corner (Winnie-the-Pooh, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1348195621m\/776407.jpg","authors":"A.A. Milne, Ernest H. Shepard"},{"book_id":777211,"title":"Executive Power (Mitch Rapp, #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Vince Flynn"},{"book_id":780581,"title":"Bel-Ami","image_url":"https:\/\/images.gr-assets.com\/books\/1366389912m\/780581.jpg","authors":"Guy de Maupassant, Douglas Parm\u00e9e"},{"book_id":780845,"title":"Black Cat, Volume 01","image_url":"https:\/\/images.gr-assets.com\/books\/1399825755m\/780845.jpg","authors":"Kentaro Yabuki"},{"book_id":781046,"title":"When It Happens","image_url":"https:\/\/images.gr-assets.com\/books\/1268350521m\/781046.jpg","authors":"Susane Colasanti"},{"book_id":781110,"title":"Fever 1793","image_url":"https:\/\/images.gr-assets.com\/books\/1381743126m\/781110.jpg","authors":"Laurie Halse Anderson"},{"book_id":781182,"title":"Barbarians at the Gate: The Fall of RJR Nabisco","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bryan Burrough, John Helyar"},{"book_id":781498,"title":"The Day Jimmy's Boa Ate the Wash","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Trinka Hakes Noble, Steven Kellogg"},{"book_id":781787,"title":"Out of Africa","image_url":"https:\/\/images.gr-assets.com\/books\/1178296503m\/781787.jpg","authors":"Isak Dinesen, Karen Blixen"},{"book_id":781844,"title":"On Death and Dying","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Elisabeth K\u00fcbler-Ross"},{"book_id":782580,"title":"The Complete Poetry and Prose","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"William Blake, David V. Erdman, Harold Bloom"},{"book_id":782854,"title":"Eloise ","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kay Thompson, Hilary Knight"},{"book_id":783127,"title":"The 7 Habits of Highly Effective Teens: The Ultimate Teenage Success Guide","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sean Covey"},{"book_id":783291,"title":"The Almost Moon","image_url":"https:\/\/images.gr-assets.com\/books\/1310421579m\/783291.jpg","authors":"Alice Sebold"},{"book_id":784222,"title":"Vampire Knight, Vol. 3 (Vampire Knight, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1317879553m\/784222.jpg","authors":"Matsuri Hino, Tomo Kimura"},{"book_id":784911,"title":"Rise of the Evening Star (Fablehaven, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1386633982m\/784911.jpg","authors":"Brandon Mull"},{"book_id":785092,"title":"Secrets of the Millionaire Mind: Mastering the Inner Game of Wealth","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"T. Harv Eker"},{"book_id":785453,"title":"A Single Shard","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Linda Sue Park"},{"book_id":785454,"title":"Train to Pakistan","image_url":"https:\/\/images.gr-assets.com\/books\/1342220976m\/785454.jpg","authors":"Khushwant Singh"},{"book_id":786256,"title":"Stellaluna","image_url":"https:\/\/images.gr-assets.com\/books\/1275583521m\/786256.jpg","authors":"Janell Cannon"},{"book_id":787660,"title":"Heaven (Casteel, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1321683934m\/787660.jpg","authors":"V.C. Andrews"},{"book_id":789344,"title":"Encyclopedia Brown, Boy Detective (Encyclopedia Brown, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Donald J. Sobol"},{"book_id":789559,"title":"The Three Billy Goats Gruff","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Paul Galdone, Peter Christen Asbj\u00f8rnsen"},{"book_id":790171,"title":"Kon-Tiki: Across The Pacific In A Raft","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Thor Heyerdahl"},{"book_id":792161,"title":"War Horse (War Horse, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1360677423m\/792161.jpg","authors":"Michael Morpurgo"},{"book_id":792938,"title":"Having Our Say: The Delany Sisters' First 100 Years","image_url":"https:\/\/images.gr-assets.com\/books\/1403192701m\/792938.jpg","authors":"Sarah L. Delany, A. Elizabeth Delany, Amy Hill Hearth"},{"book_id":793399,"title":"Stray (Shifters, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rachel Vincent"},{"book_id":795034,"title":"To Green Angel Tower, Part 1 (Memory, Sorrow, and Thorn, #3; Part 1)","image_url":"https:\/\/images.gr-assets.com\/books\/1309992858m\/795034.jpg","authors":"Tad Williams"},{"book_id":797094,"title":"Halo: The Flood","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"William C. Dietz"},{"book_id":801178,"title":"Chicken Soup for the Soul","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jack Canfield, Mark Victor Hansen"},{"book_id":803171,"title":"Skippyjon Jones","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Judy Schachner"},{"book_id":805023,"title":"My Sweet Audrina (Audrina, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"V.C. Andrews"},{"book_id":807968,"title":"Molly Moon's Incredible Book of Hypnotism (Molly Moon, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1330953305m\/807968.jpg","authors":"Georgia Byng"},{"book_id":808853,"title":"The Complete Adventures of Curious George","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Margret Rey, H.A. Rey"},{"book_id":809849,"title":"Dear Zoo: A Lift-the-Flap Book","image_url":"https:\/\/images.gr-assets.com\/books\/1391337388m\/809849.jpg","authors":"Rod Campbell"},{"book_id":813214,"title":"The Mist","image_url":"https:\/\/images.gr-assets.com\/books\/1331317781m\/813214.jpg","authors":"Stephen King"},{"book_id":815150,"title":"The Highlander's Touch (Highlander, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1257330461m\/815150.jpg","authors":"Karen Marie Moning"},{"book_id":815158,"title":"Rapunzel","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Paul O. Zelinsky"},{"book_id":815234,"title":"The Napping House","image_url":"https:\/\/images.gr-assets.com\/books\/1410229873m\/815234.jpg","authors":"Audrey Wood, Don Wood"},{"book_id":815309,"title":"On Chesil Beach","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ian McEwan"},{"book_id":815716,"title":"The 21 Irrefutable Laws of Leadership: Follow Them and People Will Follow You","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John C. Maxwell, Zig Ziglar"},{"book_id":816720,"title":"The Witch Of Portobello","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Paulo Coelho"},{"book_id":816752,"title":"The Castle in the Attic (The Castle in the Attic, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1178654581m\/816752.jpg","authors":"Elizabeth Winthrop"},{"book_id":816870,"title":"Johnny Tremain","image_url":"https:\/\/images.gr-assets.com\/books\/1308964858m\/816870.jpg","authors":"Esther Forbes, Lynd Ward"},{"book_id":816953,"title":"Someone Like You","image_url":"https:\/\/images.gr-assets.com\/books\/1336001301m\/816953.jpg","authors":"Sarah Dessen"},{"book_id":817199,"title":"Maitreyi","image_url":"https:\/\/images.gr-assets.com\/books\/1303896468m\/817199.jpg","authors":"Mircea Eliade"},{"book_id":817791,"title":"The Blind Side: Evolution of a Game","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael Lewis"},{"book_id":818372,"title":"Night Probe! (Dirk Pitt, #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Clive Cussler"},{"book_id":818811,"title":"Escape","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Carolyn Jessop, Laura Palmer"},{"book_id":819667,"title":"Snowmen at Night","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Caralyn Buehner, Mark Buehner"},{"book_id":820273,"title":"Sheep in a Jeep","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nancy E. Shaw, Margot Apple"},{"book_id":820394,"title":"The Interpretation of Murder (Freud, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jed Rubenfeld"},{"book_id":820480,"title":"Revelation (Matthew Shardlake, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1327170369m\/820480.jpg","authors":"C.J. Sansom"},{"book_id":820517,"title":"Joey Pigza Swallowed the Key (Joey Pigza, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jack Gantos"},{"book_id":820956,"title":"Dawn on a Distant Shore (Wilderness, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1403186902m\/820956.jpg","authors":"Sara Donati"},{"book_id":821000,"title":"Now We Are Six (Winnie-the-Pooh, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1348199373m\/821000.jpg","authors":"A.A. Milne, Ernest H. Shepard"},{"book_id":821003,"title":"When We Were Very Young (Winnie-the-Pooh, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"A.A. Milne, Ernest H. Shepard"},{"book_id":821056,"title":"Hinds' Feet on High Places","image_url":"https:\/\/images.gr-assets.com\/books\/1312284337m\/821056.jpg","authors":"Hannah Hurnard"},{"book_id":821611,"title":"The Story of My Life","image_url":"https:\/\/images.gr-assets.com\/books\/1320429331m\/821611.jpg","authors":"Helen Keller"},{"book_id":822989,"title":"My Story: \"A Child Called It\", \"The Lost Boy\", \"A Man Named Dave\"","image_url":"https:\/\/images.gr-assets.com\/books\/1408928892m\/822989.jpg","authors":"Dave Pelzer"},{"book_id":823411,"title":"Three Day Road","image_url":"https:\/\/images.gr-assets.com\/books\/1327905456m\/823411.jpg","authors":"Joseph Boyden"},{"book_id":823412,"title":"Cook with Jamie","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jamie Oliver"},{"book_id":824062,"title":"God's Smuggler","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Brother Andrew, Elizabeth Sherrill, John Sherrill"},{"book_id":824204,"title":"The Little Engine That Could","image_url":"https:\/\/images.gr-assets.com\/books\/1352736875m\/824204.jpg","authors":"Watty Piper, Doris Hauman, George Hauman"},{"book_id":824318,"title":"The New Bedside, Bathtub and Armchair Companion to Agatha Christie","image_url":"https:\/\/images.gr-assets.com\/books\/1409153866m\/824318.jpg","authors":"Dick Riley, Pam McAllister, Bruce Cassiday"},{"book_id":824508,"title":"Smack","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Melvin Burgess"},{"book_id":824734,"title":"Dinosaurs Before Dark (Magic Tree House, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1320508235m\/824734.jpg","authors":"Mary Pope Osborne, Salvatore Murdocca"},{"book_id":824763,"title":"Reborn! Vol. 01: Reborn Arrives! (Reborn!, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1383918162m\/824763.jpg","authors":"Akira Amano, JN Productions, Frances E. Wall"},{"book_id":825081,"title":"Lilly's Purple Plastic Purse","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kevin Henkes"},{"book_id":825377,"title":"The Dot","image_url":"https:\/\/images.gr-assets.com\/books\/1363702319m\/825377.jpg","authors":"Peter H. Reynolds"},{"book_id":825473,"title":"The Devil's Alternative","image_url":"https:\/\/images.gr-assets.com\/books\/1333578726m\/825473.jpg","authors":"Frederick Forsyth"},{"book_id":825508,"title":"A Dangerous Fortune","image_url":"https:\/\/images.gr-assets.com\/books\/1387637715m\/825508.jpg","authors":"Ken Follett"},{"book_id":825509,"title":"A Place Called Freedom","image_url":"https:\/\/images.gr-assets.com\/books\/1320559980m\/825509.jpg","authors":"Ken Follett"},{"book_id":825576,"title":"The Saggy Baggy Elephant (A Little Golden Book)","image_url":"https:\/\/images.gr-assets.com\/books\/1320481063m\/825576.jpg","authors":"Kathryn Jackson, Byron Jackson, Gustav Tenggren"},{"book_id":826582,"title":"If You Take a Mouse to School","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Laura Joffe Numeroff, Felicia Bond"},{"book_id":826583,"title":"If You Take a Mouse to the Movies","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Laura Joffe Numeroff, Felicia Bond"},{"book_id":826584,"title":"If You Give a Moose a Muffin","image_url":"https:\/\/images.gr-assets.com\/books\/1384259273m\/826584.jpg","authors":"Laura Joffe Numeroff, Felicia Bond"},{"book_id":826585,"title":"If You Give a Pig a Pancake ","image_url":"https:\/\/images.gr-assets.com\/books\/1384260096m\/826585.jpg","authors":"Laura Joffe Numeroff, Felicia Bond"},{"book_id":826845,"title":"The Chrysalids","image_url":"https:\/\/images.gr-assets.com\/books\/1271095852m\/826845.jpg","authors":"John Wyndham"},{"book_id":827412,"title":"It Happened One Autumn (Wallflowers, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lisa Kleypas"},{"book_id":827497,"title":"One Flew Over the Cuckoo's Nest","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dale Wasserman"},{"book_id":827685,"title":"Up from Slavery","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Booker T. Washington, Ishmael Reed"},{"book_id":828015,"title":"The Breadwinner (The Breadwinner, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1388330682m\/828015.jpg","authors":"Deborah Ellis"},{"book_id":828084,"title":"Pictures of Hollis Woods","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Patricia Reilly Giff"},{"book_id":828387,"title":"A Short History of Tractors in Ukrainian","image_url":"https:\/\/images.gr-assets.com\/books\/1327935785m\/828387.jpg","authors":"Marina Lewycka"},{"book_id":828483,"title":"The Killing (Cherub, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1409557087m\/828483.jpg","authors":"Robert Muchamore"},{"book_id":829313,"title":"Miles: The Autobiography","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Miles Davis, Quincy Troupe"},{"book_id":830791,"title":"The Simple Truth","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Baldacci"},{"book_id":831194,"title":"Forest of Secrets (Warriors, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Erin Hunter"},{"book_id":831470,"title":"Bambi","image_url":"https:\/\/images.gr-assets.com\/books\/1320545771m\/831470.jpg","authors":"Bob Grant"},{"book_id":831635,"title":"Healthy Sleep Habits, Happy Child","image_url":"https:\/\/images.gr-assets.com\/books\/1380493934m\/831635.jpg","authors":"Marc Weissbluth"},{"book_id":831829,"title":"30 Days of Night, Vol. 1","image_url":"https:\/\/images.gr-assets.com\/books\/1178747918m\/831829.jpg","authors":"Steve Niles, Ben Templesmith"},{"book_id":832543,"title":"Anatomy of the Spirit: The Seven Stages of Power and Healing","image_url":"https:\/\/images.gr-assets.com\/books\/1320424261m\/832543.jpg","authors":"Caroline Myss"},{"book_id":833253,"title":"The Power of a Praying Wife","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Stormie Omartian"},{"book_id":833549,"title":"Frog and Toad All Year (Frog and Toad, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Arnold Lobel"},{"book_id":833550,"title":"Each Peach Pear Plum","image_url":"https:\/\/images.gr-assets.com\/books\/1367225641m\/833550.jpg","authors":"Janet Ahlberg, Allan Ahlberg"},{"book_id":833710,"title":"The Merchant of Death (Pendragon, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1351196725m\/833710.jpg","authors":"D.J. MacHale"},{"book_id":834378,"title":"A Pocket Full of Rye (Miss Marple, #7)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Agatha Christie"},{"book_id":835155,"title":"See Jane Date","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Melissa Senate"},{"book_id":835202,"title":"A Chair for My Mother","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Vera B. Williams"},{"book_id":835495,"title":"Time for Bed","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mem Fox, Jane Dyer"},{"book_id":835623,"title":"How the Mind Works","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Steven Pinker"},{"book_id":836606,"title":"Fruits Basket, Vol. 2","image_url":"https:\/\/images.gr-assets.com\/books\/1337807470m\/836606.jpg","authors":"Natsuki Takaya, Alethea Nibley, Athena Nibley"},{"book_id":836607,"title":"Fruits Basket, Vol. 3","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Natsuki Takaya, Alethea Nibley, Athena Nibley"},{"book_id":836611,"title":"Fruits Basket, Vol. 4","image_url":"https:\/\/images.gr-assets.com\/books\/1480179107m\/836611.jpg","authors":"Natsuki Takaya, Alethea Nibley, Athena Nibley"},{"book_id":836984,"title":"Distant Shores","image_url":"https:\/\/images.gr-assets.com\/books\/1320544877m\/836984.jpg","authors":"Kristin Hannah"},{"book_id":837501,"title":"The Twenty-One Balloons","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"William P\u00e8ne du Bois"},{"book_id":838917,"title":"The Power of a Praying Woman","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Stormie Omartian"},{"book_id":839263,"title":"David Goes To School","image_url":"https:\/\/images.gr-assets.com\/books\/1360057930m\/839263.jpg","authors":"David Shannon"},{"book_id":840163,"title":"Flight of the Old Dog (Patrick McLanahan, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dale Brown"},{"book_id":840278,"title":"Eon (The Way, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Greg Bear"},{"book_id":841628,"title":"The Hitchhiker's Guide to the Galaxy: A Trilogy in Four Parts","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Douglas Adams"},{"book_id":841973,"title":"The Gods of Mars (Barsoom, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Edgar Rice Burroughs"},{"book_id":844051,"title":"Mutiny on the Bounty (The Bounty Trilogy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1344266653m\/844051.jpg","authors":"Charles Bernard Nordhoff, James Norman Hall"},{"book_id":845403,"title":"Mufaro's Beautiful Daughters: An African Tale","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Steptoe"},{"book_id":845977,"title":"A Return to Love: Reflections on the Principles of \"A Course in Miracles\"","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Marianne Williamson"},{"book_id":846066,"title":"The Berenstain Bears Forget Their Manners","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Stan Berenstain, Jan Berenstain"},{"book_id":846984,"title":"Love, Stargirl (Stargirl, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1320395760m\/846984.jpg","authors":"Jerry Spinelli"},{"book_id":849380,"title":"The Seven Principles for Making Marriage Work: A Practical Guide from the Country's Foremost Relationship Expert","image_url":"https:\/\/images.gr-assets.com\/books\/1320521960m\/849380.jpg","authors":"John M. Gottman, Nan Silver"},{"book_id":851393,"title":"The Imitation of Christ","image_url":"https:\/\/images.gr-assets.com\/books\/1320442968m\/851393.jpg","authors":"Thomas \u00e0 Kempis, William Benham"},{"book_id":851678,"title":"What Remains: A Memoir of Fate, Friendship, and Love","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Carole Radziwill"},{"book_id":852460,"title":"Fix-It and Forget-It Cookbook: Feasting with Your Slow Cooker","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dawn J. Ranck, Phyllis Pellman Good"},{"book_id":852470,"title":"I'd Tell You I Love You, But Then I'd Have to Kill You (Gallagher Girls, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1334491180m\/852470.jpg","authors":"Ally Carter"},{"book_id":854252,"title":"Little House on Rocky Ridge (Little House: The Rocky Ridge Years, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Roger Lea MacBride, David Gilleece"},{"book_id":854757,"title":"Bet Me","image_url":"https:\/\/images.gr-assets.com\/books\/1316129534m\/854757.jpg","authors":"Jennifer Crusie"},{"book_id":856917,"title":"Absolute Boyfriend, Vol. 1","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Yuu Watase"},{"book_id":857418,"title":"The Carrot Seed","image_url":"https:\/\/images.gr-assets.com\/books\/1394411446m\/857418.jpg","authors":"Ruth Krauss, Crockett Johnson"},{"book_id":857445,"title":"Officer Buckle & Gloria","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Peggy Rathmann"},{"book_id":857448,"title":"Harry the Dirty Dog","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Gene Zion, Margaret Bloy Graham"},{"book_id":857501,"title":"Hand, Hand, Fingers, Thumb","image_url":"https:\/\/images.gr-assets.com\/books\/1397803649m\/857501.jpg","authors":"Al Perkins, Eric Gurney"},{"book_id":857502,"title":"Concerning the Spiritual in Art","image_url":"https:\/\/images.gr-assets.com\/books\/1405982387m\/857502.jpg","authors":"Wassily Kandinsky"},{"book_id":858037,"title":"Danny and the Dinosaur (An I Can Read Book)","image_url":"https:\/\/images.gr-assets.com\/books\/1406512465m\/858037.jpg","authors":"Syd Hoff"},{"book_id":858513,"title":"Chrysanthemum","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kevin Henkes"},{"book_id":858514,"title":"Wemberly Worried","image_url":"https:\/\/images.gr-assets.com\/books\/1415584914m\/858514.jpg","authors":"Kevin Henkes"},{"book_id":858719,"title":"Clifford the Big Red Dog","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Norman Bridwell"},{"book_id":861326,"title":"The Viscount Who Loved Me (Bridgertons, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1379594308m\/861326.jpg","authors":"Julia Quinn"},{"book_id":862041,"title":"Harry Potter Boxset (Harry Potter, #1-7)","image_url":"https:\/\/images.gr-assets.com\/books\/1392579059m\/862041.jpg","authors":"J.K. Rowling"},{"book_id":862350,"title":"No Humans Involved (Women of the Otherworld, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1362703261m\/862350.jpg","authors":"Kelley Armstrong"},{"book_id":866136,"title":"The Dreaming Void","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Peter F. Hamilton"},{"book_id":866222,"title":"Winning","image_url":"https:\/\/images.gr-assets.com\/books\/1366775828m\/866222.jpg","authors":"Jack Welch, Suzy Welch"},{"book_id":867247,"title":"A Book of Five Rings: The Classic Guide to Strategy","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Miyamoto Musashi, Victor Harris"},{"book_id":867248,"title":"Bear Snores On","image_url":"https:\/\/images.gr-assets.com\/books\/1344390790m\/867248.jpg","authors":"Karma Wilson, Jane Chapman"},{"book_id":867387,"title":"The Blessing Way (Leaphorn & Chee, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1179033344m\/867387.jpg","authors":"Tony Hillerman"},{"book_id":867650,"title":"The Little Red Hen (Little Golden Book)","image_url":"https:\/\/images.gr-assets.com\/books\/1320489925m\/867650.jpg","authors":"Diane Muldrow, J.P. Miller"},{"book_id":872333,"title":"Blue Bloods (Blue Bloods, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1322281515m\/872333.jpg","authors":"Melissa de la Cruz"},{"book_id":875441,"title":"Someone Knows My Name","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lawrence Hill"},{"book_id":877752,"title":"Fruits Basket, Vol. 7","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Natsuki Takaya, Alethea Nibley, Athena Nibley"},{"book_id":884288,"title":"Interesting Times (Discworld, #17; Rincewind #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1430881376m\/884288.jpg","authors":"Terry Pratchett"},{"book_id":885744,"title":"Shaman King, Vol. 1: A Shaman in Tokyo","image_url":"https:\/\/images.gr-assets.com\/books\/1444234846m\/885744.jpg","authors":"Hiroyuki Takei"},{"book_id":886066,"title":"Matter (Culture, #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1327954631m\/886066.jpg","authors":"Iain M. Banks"},{"book_id":886512,"title":"Jamberry","image_url":"https:\/\/images.gr-assets.com\/books\/1393791849m\/886512.jpg","authors":"Bruce Degen"},{"book_id":887201,"title":"Faeries","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Brian Froud, Alan Lee"},{"book_id":887877,"title":"Red Seas Under Red Skies (Gentleman Bastard, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Scott Lynch"},{"book_id":889284,"title":"The Postman","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Brin"},{"book_id":890143,"title":"The Clique (The Clique, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lisi Harrison"},{"book_id":891593,"title":"Victory of Eagles (Temeraire, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1327942237m\/891593.jpg","authors":"Naomi Novik"},{"book_id":891671,"title":"Winter in Madrid","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"C.J. Sansom"},{"book_id":891812,"title":"Gentle Rogue (Malory-Anderson Family, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1333636257m\/891812.jpg","authors":"Johanna Lindsey"},{"book_id":892295,"title":"The Annotated Sherlock Holmes: The Four Novels and the Fifty-Six Short Stories Complete (2 Volume Set)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Arthur Conan Doyle, William S. Baring-Gould"},{"book_id":893731,"title":"Big Trouble","image_url":"https:\/\/images.gr-assets.com\/books\/1429999879m\/893731.jpg","authors":"Dave Barry"},{"book_id":894072,"title":"The Little Red Caboose (Little Golden Book)","image_url":"https:\/\/images.gr-assets.com\/books\/1364853044m\/894072.jpg","authors":"Marian Potter"},{"book_id":895886,"title":"Lassie Come-Home","image_url":"https:\/\/images.gr-assets.com\/books\/1316130656m\/895886.jpg","authors":"Eric Knight, Marguerite Kirmse"},{"book_id":896622,"title":"The Wolf and the Dove","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kathleen E. Woodiwiss"},{"book_id":896623,"title":"The Flame and the Flower","image_url":"https:\/\/images.gr-assets.com\/books\/1305316569m\/896623.jpg","authors":"Kathleen E. Woodiwiss"},{"book_id":898885,"title":"Loving Frank","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nancy Horan"},{"book_id":899492,"title":"The Tell-Tale Heart","image_url":"https:\/\/images.gr-assets.com\/books\/1317724096m\/899492.jpg","authors":"Edgar Allan Poe, Byron Glaser, Bill D. Fountain"},{"book_id":899608,"title":"A Fish Out of Water","image_url":"https:\/\/images.gr-assets.com\/books\/1320551686m\/899608.jpg","authors":"Helen Marion Palmer, P.D. Eastman"},{"book_id":899962,"title":"Curious George Goes to the Hospital","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Margret Rey, H.A. Rey"},{"book_id":900065,"title":"The Berenstain Bears and the Messy Room","image_url":"https:\/\/images.gr-assets.com\/books\/1344371748m\/900065.jpg","authors":"Stan Berenstain, Jan Berenstain"},{"book_id":900070,"title":"The Berenstain Bears Go to School","image_url":"https:\/\/images.gr-assets.com\/books\/1344369033m\/900070.jpg","authors":"Stan Berenstain, Jan Berenstain"},{"book_id":900892,"title":"A Random Walk Down Wall Street","image_url":"https:\/\/images.gr-assets.com\/books\/1442952924m\/900892.jpg","authors":"Burton G. Malkiel"},{"book_id":901680,"title":"Edvard Munch: 1863-1944 (Basic Art)","image_url":"https:\/\/images.gr-assets.com\/books\/1381324687m\/901680.jpg","authors":"Ulrich Bischoff"},{"book_id":902715,"title":"Before They Are Hanged (The First Law #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Joe Abercrombie"},{"book_id":905092,"title":"The Millionaire Mind","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Thomas J. Stanley"},{"book_id":905382,"title":"Anne Frank : The Biography","image_url":"https:\/\/images.gr-assets.com\/books\/1316739030m\/905382.jpg","authors":"Melissa M\u00fcller, Rita Kimber, Robert Kimber"},{"book_id":905885,"title":"Be Careful What You Wish For","image_url":"https:\/\/images.gr-assets.com\/books\/1415581652m\/905885.jpg","authors":"Alexandra Potter"},{"book_id":906541,"title":"Bedtime for Frances","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Russell Hoban, Garth Williams"},{"book_id":906560,"title":"Tramp for the Lord","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Corrie ten Boom"},{"book_id":910863,"title":"Spin (Spin, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1406383726m\/910863.jpg","authors":"Robert Charles Wilson"},{"book_id":911579,"title":"Bread and Jam for Frances","image_url":"https:\/\/images.gr-assets.com\/books\/1384258893m\/911579.jpg","authors":"Russell Hoban, Lillian Hoban"},{"book_id":914211,"title":"Influencer: The Power to Change Anything","image_url":"https:\/\/images.gr-assets.com\/books\/1393217540m\/914211.jpg","authors":"Kerry Patterson, Joseph Grenny, David Maxfield, Ron McMillan, Al Switzler"},{"book_id":918789,"title":"West Side Story","image_url":"https:\/\/images.gr-assets.com\/books\/1350302485m\/918789.jpg","authors":"Irving Shulman"},{"book_id":920143,"title":"Little Red Riding Hood","image_url":"https:\/\/images.gr-assets.com\/books\/1314485414m\/920143.jpg","authors":"Trina Schart Hyman, Johann Grimm, Wilhelm Grimm"},{"book_id":920607,"title":"The Arrival","image_url":"https:\/\/images.gr-assets.com\/books\/1312827620m\/920607.jpg","authors":"Shaun Tan"},{"book_id":920649,"title":"An Occurrence at Owl Creek Bridge","image_url":"https:\/\/images.gr-assets.com\/books\/1453993106m\/920649.jpg","authors":"Ambrose Bierce"},{"book_id":920780,"title":"Duck On A Bike","image_url":"https:\/\/images.gr-assets.com\/books\/1328870602m\/920780.jpg","authors":"David Shannon"},{"book_id":921651,"title":"Just Go to Bed","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mercer Mayer"},{"book_id":922991,"title":"The Island","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Victoria Hislop"},{"book_id":923950,"title":"The Highly Sensitive Person: How to Thrive When the World Overwhelms You","image_url":"https:\/\/images.gr-assets.com\/books\/1320525063m\/923950.jpg","authors":"Elaine N. Aron"},{"book_id":925367,"title":"The Climb: Tragic Ambitions on Everest","image_url":"https:\/\/images.gr-assets.com\/books\/1311995989m\/925367.jpg","authors":"Anatoli Boukreev, G. Weston DeWalt"},{"book_id":926908,"title":"Gnomes","image_url":"https:\/\/images.gr-assets.com\/books\/1463189122m\/926908.jpg","authors":"Rien Poortvliet, Wil Huygen"},{"book_id":927979,"title":"Small Favor (The Dresden Files, #10)","image_url":"https:\/\/images.gr-assets.com\/books\/1298085176m\/927979.jpg","authors":"Jim Butcher"},{"book_id":929782,"title":"Martin Eden","image_url":"https:\/\/images.gr-assets.com\/books\/1344411175m\/929782.jpg","authors":"Jack London, Andrew Sinclair"},{"book_id":930612,"title":"Judy Moody (Judy Moody, # 1)","image_url":"https:\/\/images.gr-assets.com\/books\/1320540601m\/930612.jpg","authors":"Megan McDonald, Peter H. Reynolds"},{"book_id":934700,"title":"In a People House","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dr. Seuss, Theo LeSieg, Roy McKie"},{"book_id":935308,"title":"Faceless Killers (Kurt Wallander, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1487941867m\/935308.jpg","authors":"Henning Mankell, Steven T. Murray"},{"book_id":937249,"title":"Separation of Power (Mitch Rapp, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1314830847m\/937249.jpg","authors":"Vince Flynn"},{"book_id":938544,"title":"Toll the Hounds (The Malazan Book of the Fallen, #8)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Steven Erikson"},{"book_id":943402,"title":"Let the Right One In","image_url":"https:\/\/images.gr-assets.com\/books\/1327893384m\/943402.jpg","authors":"John Ajvide Lindqvist"},{"book_id":944073,"title":"The Blade Itself (The First Law, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1284167912m\/944073.jpg","authors":"Joe Abercrombie"},{"book_id":944076,"title":"Last Argument of Kings (The First Law, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1302062699m\/944076.jpg","authors":"Joe Abercrombie"},{"book_id":946899,"title":"The Measure of a Lady","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Deeanne Gist"},{"book_id":948526,"title":"The Knight at Dawn (Magic Tree House, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mary Pope Osborne, Salvatore Murdocca"},{"book_id":949709,"title":"There Was An Old Lady Who Swallowed A Fly (Classic Books)","image_url":"https:\/\/images.gr-assets.com\/books\/1413746503m\/949709.jpg","authors":"Pam Adams"},{"book_id":953260,"title":"Disney after Dark (Kingdom Keepers, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1275199267m\/953260.jpg","authors":"Ridley Pearson, David Frankland"},{"book_id":954303,"title":"Kitchen Princess, Vol. 01 (Kitchen Princess, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Natsumi Ando, Miyuki Kobayashi"},{"book_id":954674,"title":"Little Brother","image_url":"https:\/\/images.gr-assets.com\/books\/1349673129m\/954674.jpg","authors":"Cory Doctorow"},{"book_id":958277,"title":"Junie B. Jones and the Stupid Smelly Bus (Junie B. Jones, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1353109909m\/958277.jpg","authors":"Barbara Park, Denise Brunkus"},{"book_id":961831,"title":"The Shadowy Horses","image_url":"https:\/\/images.gr-assets.com\/books\/1428617658m\/961831.jpg","authors":"Susanna Kearsley"},{"book_id":961833,"title":"Mariana","image_url":"https:\/\/images.gr-assets.com\/books\/1330496361m\/961833.jpg","authors":"Susanna Kearsley"},{"book_id":967494,"title":"The Mitten","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jan Brett"},{"book_id":968403,"title":"The Descendants","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kaui Hart Hemmings"},{"book_id":969177,"title":"Ayat-Ayat Cinta","image_url":"https:\/\/images.gr-assets.com\/books\/1439347437m\/969177.jpg","authors":"Habiburrahman El-Shirazy"},{"book_id":969275,"title":"Dragon Ball, Vol. 1: The Monkey King (Dragon Ball, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1442541694m\/969275.jpg","authors":"Akira Toriyama"},{"book_id":974122,"title":"Secrets of the Vine: Breaking Through to Abundance","image_url":"https:\/\/images.gr-assets.com\/books\/1335813686m\/974122.jpg","authors":"Bruce H. Wilkinson, David Kopp"},{"book_id":975119,"title":"Close Encounters Of The Third Kind","image_url":"https:\/\/images.gr-assets.com\/books\/1396112231m\/975119.jpg","authors":"Steven Spielberg"},{"book_id":978098,"title":"Auschwitz","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Laurence Rees"},{"book_id":981161,"title":"Red Phoenix (Red Phoenix #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1298859399m\/981161.jpg","authors":"Larry Bond, Patrick Larkin"},{"book_id":981463,"title":"The Relatives Came","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Cynthia Rylant, Stephen Gammell"},{"book_id":985386,"title":"Case Closed, Vol. 1","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Gosho Aoyama"},{"book_id":988170,"title":"Tawny Scrawny Lion","image_url":"https:\/\/images.gr-assets.com\/books\/1395619387m\/988170.jpg","authors":"Kathryn Jackson, Gustav Tenggren"},{"book_id":988950,"title":"Dark of the Moon (Virgil Flowers, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Sandford"},{"book_id":989313,"title":"Heart of Darkness and Selected Short Fiction","image_url":"https:\/\/images.gr-assets.com\/books\/1328851164m\/989313.jpg","authors":"Joseph Conrad, A. Michael Matin"},{"book_id":991197,"title":"The Complete Persepolis","image_url":"https:\/\/images.gr-assets.com\/books\/1327876995m\/991197.jpg","authors":"Marjane Satrapi, Mattias Ripa, Blake Ferris, Anjali Singh"},{"book_id":994156,"title":"Supernova: Ksatria, Puteri, dan Bintang Jatuh","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dee Lestari"},{"book_id":998133,"title":"The Gathering","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anne Enright"},{"book_id":1000751,"title":"Pollyanna (Pollyanna, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Eleanor H. Porter"},{"book_id":1001896,"title":"The Real Mother Goose","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Blanche Fisher Wright"},{"book_id":1003761,"title":"Beauty Pop, Vol. 1 (Beauty Pop, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kiyoko Arai"},{"book_id":1008231,"title":"H.I.V.E. Higher Institute of Villainous Education (H.I.V.E., #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mark Walden"},{"book_id":1009996,"title":"Artisan Bread in Five Minutes a Day: The Discovery That Revolutionizes Home Baking","image_url":"https:\/\/images.gr-assets.com\/books\/1317064461m\/1009996.jpg","authors":"Jeff Hertzberg, Zo\u00eb Fran\u00e7ois, Mark Luinenburg"},{"book_id":1011359,"title":"Ouran High School Host Club, Vol. 2 (Ouran High School Host Club, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bisco Hatori"},{"book_id":1011632,"title":"Mister B. Gone","image_url":"https:\/\/images.gr-assets.com\/books\/1429998358m\/1011632.jpg","authors":"Clive Barker"},{"book_id":1013383,"title":"The Gruffalo","image_url":"https:\/\/images.gr-assets.com\/books\/1329674496m\/1013383.jpg","authors":"Julia Donaldson, Axel Scheffler"},{"book_id":1015311,"title":"Love Hina, Vol. 01","image_url":"https:\/\/images.gr-assets.com\/books\/1324954179m\/1015311.jpg","authors":"Ken Akamatsu"},{"book_id":1022866,"title":"Run Baby Run","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nicky Cruz, Jamie Buckingham"},{"book_id":1025039,"title":"Mars, Volume 01","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Fuyumi Soryo"},{"book_id":1025250,"title":"Schooled","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Gordon Korman"},{"book_id":1027760,"title":"Madeline and the Bad Hat","image_url":"https:\/\/images.gr-assets.com\/books\/1355497395m\/1027760.jpg","authors":"Ludwig Bemelmans"},{"book_id":1031461,"title":"Stone Soup","image_url":"https:\/\/images.gr-assets.com\/books\/1360057986m\/1031461.jpg","authors":"Ann McGovern, Winslow Pinney Pels, Winslow Pinn, Ey Pels"},{"book_id":1034605,"title":"The Country Mouse and the City Mouse; The Fox and the Crow; The Dog and His Bone","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Patricia M. Scarry, Richard Scarry"},{"book_id":1044141,"title":"The 8th Habit: From Effectiveness to Greatness","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Stephen R. Covey"},{"book_id":1044355,"title":"When You Are Engulfed in Flames","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Sedaris"},{"book_id":1045757,"title":"Once (Once, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Morris Gleitzman"},{"book_id":1048645,"title":"Private Peaceful","image_url":"https:\/\/images.gr-assets.com\/books\/1328868065m\/1048645.jpg","authors":"Michael Morpurgo"},{"book_id":1050383,"title":"The Sleeping Doll (Kathryn Dance, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jeffery Deaver"},{"book_id":1051620,"title":"The Innocent Mage (Kingmaker, Kingbreaker, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327918882m\/1051620.jpg","authors":"Karen Miller"},{"book_id":1055617,"title":"The Miracle of Forgiveness","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Spencer W. Kimball"},{"book_id":1056627,"title":"Become a Better You: 7 Keys to Improving Your Life Every Day","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Joel Osteen"},{"book_id":1059680,"title":"Veganomicon: The Ultimate Vegan Cookbook","image_url":"https:\/\/images.gr-assets.com\/books\/1328751476m\/1059680.jpg","authors":"Isa Chandra Moskowitz, Terry Hope Romero"},{"book_id":1062516,"title":"No, David!","image_url":"https:\/\/images.gr-assets.com\/books\/1360058223m\/1062516.jpg","authors":"David Shannon"},{"book_id":1070527,"title":"Avatar Volume 1: The Last Airbender (Avatar #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael Dante DiMartino, Bryan Konietzko"},{"book_id":1081560,"title":"The History of the Hobbit, Part One: Mr. Baggins","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John D. Rateliff, J.R.R. Tolkien"},{"book_id":1085771,"title":"The Walking Dead, Vol. 07: The Calm Before","image_url":"https:\/\/images.gr-assets.com\/books\/1289097173m\/1085771.jpg","authors":"Robert Kirkman, Charlie Adlard, Cliff Rathburn"},{"book_id":1087075,"title":"Shoe Addicts Anonymous (Shoe Addict, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1311992714m\/1087075.jpg","authors":"Beth Harbison"},{"book_id":1087204,"title":"Ouran High School Host Club, Vol. 1 (Ouran High School Host Club, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bisco Hatori"},{"book_id":1087205,"title":"Ouran High School Host Club, Vol. 3 (Ouran High School Host Club, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1393731667m\/1087205.jpg","authors":"Bisco Hatori"},{"book_id":1087207,"title":"Ouran High School Host Club, Vol. 4 (Ouran High School Host Club, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1416398307m\/1087207.jpg","authors":"Bisco Hatori"},{"book_id":1096390,"title":"The Uncommon Reader","image_url":"https:\/\/images.gr-assets.com\/books\/1317064291m\/1096390.jpg","authors":"Alan Bennett"},{"book_id":1098486,"title":"The Center Cannot Hold: My Journey Through Madness","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Elyn R. Saks"},{"book_id":1099097,"title":"The Tiger Who Came to Tea","image_url":"https:\/\/images.gr-assets.com\/books\/1369858732m\/1099097.jpg","authors":"Judith Kerr"},{"book_id":1099301,"title":"The Name of This Book Is Secret (Secret, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Pseudonymous Bosch, Gilbert Ford"},{"book_id":1105093,"title":"Braveheart","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Randall Wallace"},{"book_id":1107001,"title":"The Silver Palate Cookbook","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Julee Rosso, Sheila Lukins, Michael McLaughlin"},{"book_id":1111600,"title":"The Wheel of Time: Boxed Set (Wheel of Time, #1-8)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert Jordan"},{"book_id":1113545,"title":"The Candy Shop War (The Candy Shop War, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Brandon Mull"},{"book_id":1116393,"title":"The Awakened Mage (Kingmaker, Kingbreaker, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1327918842m\/1116393.jpg","authors":"Karen Miller"},{"book_id":1126719,"title":"House of Suns","image_url":"https:\/\/images.gr-assets.com\/books\/1447892903m\/1126719.jpg","authors":"Alastair Reynolds"},{"book_id":1127996,"title":"Betty Crocker's Cookbook","image_url":"https:\/\/images.gr-assets.com\/books\/1431198491m\/1127996.jpg","authors":"Betty Crocker"},{"book_id":1128178,"title":"The Zookeeper's Wife","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Diane Ackerman"},{"book_id":1128434,"title":"The Last Wish (The Witcher, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Andrzej Sapkowski"},{"book_id":1128437,"title":"Miecz przeznaczenia (Saga o Wied\u017aminie, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Andrzej Sapkowski"},{"book_id":1129315,"title":"The Berenstain Bears' Trouble at School","image_url":"https:\/\/images.gr-assets.com\/books\/1344369313m\/1129315.jpg","authors":"Stan Berenstain, Jan Berenstain"},{"book_id":1134122,"title":"The Power of Positive Thinking","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Norman Vincent Peale"},{"book_id":1137215,"title":"Boneshaker (The Clockwork Century, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Cherie Priest"},{"book_id":1145862,"title":"Stand Tall, Molly Lou Melon","image_url":"https:\/\/images.gr-assets.com\/books\/1314105738m\/1145862.jpg","authors":"Patty Lovell, David Catrow"},{"book_id":1149440,"title":"Heavier Than Heaven: A Biography of Kurt Cobain","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Charles R. Cross"},{"book_id":1153709,"title":"Hairy Maclary from Donaldson's Dairy","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lynley Dodd"},{"book_id":1157452,"title":"MeruPuri, Vol. 1 (MeruPuri, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1324321395m\/1157452.jpg","authors":"Matsuri Hino"},{"book_id":1158706,"title":"Strangers in Death (In Death, #26)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"J.D. Robb"},{"book_id":1158967,"title":"Garden Spells (Waverley Family, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1347309330m\/1158967.jpg","authors":"Sarah Addison Allen"},{"book_id":1162022,"title":"On the Jellicoe Road","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Melina Marchetta"},{"book_id":1162543,"title":"Breaking Dawn (Twilight, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1361039438m\/1162543.jpg","authors":"Stephenie Meyer"},{"book_id":1166131,"title":"The Recruit (Cherub, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert Muchamore"},{"book_id":1166599,"title":"The Gathering Storm (Wheel of Time, #12)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert Jordan, Brandon Sanderson"},{"book_id":1168341,"title":"Physics of the Impossible: A Scientific Exploration into the World of Phasers, Force Fields, Teleportation, and Time Travel","image_url":"https:\/\/images.gr-assets.com\/books\/1320469147m\/1168341.jpg","authors":"Michio Kaku"},{"book_id":1169808,"title":"The Fury (The Vampire Diaries, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"L.J. Smith"},{"book_id":1170158,"title":"The Earthsea Trilogy","image_url":"https:\/\/images.gr-assets.com\/books\/1295382040m\/1170158.jpg","authors":"Ursula K. Le Guin"},{"book_id":1173576,"title":"What Every Body is Saying: An Ex-FBI Agent's Guide to Speed-Reading People","image_url":"https:\/\/images.gr-assets.com\/books\/1355055362m\/1173576.jpg","authors":"Joe Navarro, Marvin Karlins"},{"book_id":1175893,"title":"Tunnels (Tunnels, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1320969639m\/1175893.jpg","authors":"Roderick Gordon, Brian Williams"},{"book_id":1176884,"title":"Body Movers (Body Movers, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Stephanie Bond"},{"book_id":1178039,"title":"The Venetian Betrayal (Cotton Malone, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Steve Berry"},{"book_id":1197646,"title":"Parts (Parts, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tedd Arnold"},{"book_id":1205297,"title":"Playing for Pizza","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Grisham"},{"book_id":1206073,"title":"Washington's Crossing","image_url":"https:\/\/images.gr-assets.com\/books\/1353284022m\/1206073.jpg","authors":"David Hackett Fischer"},{"book_id":1207904,"title":"Clapton: The Autobiography","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Eric Clapton"},{"book_id":1207980,"title":"Helmet for My Pillow","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert Leckie"},{"book_id":1210754,"title":"Sun and Moon, Ice and Snow","image_url":"https:\/\/images.gr-assets.com\/books\/1317065700m\/1210754.jpg","authors":"Jessica Day George"},{"book_id":1211904,"title":"Leven Thumps and the Eyes of the Want (Leven Thumps, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1414559844m\/1211904.jpg","authors":"Obert Skye"},{"book_id":1215032,"title":"The Wise Man's Fear (The Kingkiller Chronicle, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1452624392m\/1215032.jpg","authors":"Patrick Rothfuss"},{"book_id":1215290,"title":"Rudolph the Red-Nosed Reindeer","image_url":"https:\/\/images.gr-assets.com\/books\/1330095176m\/1215290.jpg","authors":"Barbara Shook Hazen, Robert Lewis May, Richard Scarry"},{"book_id":1217100,"title":"Thirteen Reasons Why","image_url":"https:\/\/images.gr-assets.com\/books\/1333822506m\/1217100.jpg","authors":"Jay Asher"},{"book_id":1219103,"title":"Five Weeks in a Balloon (Extraordinary Voyages, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jules Verne"},{"book_id":1219954,"title":"Beaches","image_url":"https:\/\/images.gr-assets.com\/books\/1490973062m\/1219954.jpg","authors":"Iris Rainer Dart"},{"book_id":1220507,"title":"\u0634\u064a\u0643\u0627\u062c\u0648","image_url":"https:\/\/images.gr-assets.com\/books\/1258877751m\/1220507.jpg","authors":"Alaa Al Aswany, \u0639\u0644\u0627\u0621 \u0627\u0644\u0623\u0633\u0648\u0627\u0646\u064a"},{"book_id":1225261,"title":"No Time for Goodbye (No Time For Goodbye #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Linwood Barclay"},{"book_id":1225621,"title":"The Outlaw Demon Wails (The Hollows, #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kim Harrison"},{"book_id":1231511,"title":"Dark River (Warriors: Power of Three, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1363489306m\/1231511.jpg","authors":"Erin Hunter"},{"book_id":1233478,"title":"Embrace the Night (Cassandra Palmer, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Karen Chance"},{"book_id":1237300,"title":"The Shock Doctrine: The Rise of Disaster Capitalism","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Naomi Klein"},{"book_id":1237398,"title":"One Piece, Volume 01: Romance Dawn (One Piece, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1318523719m\/1237398.jpg","authors":"Eiichir\u014d Oda, Andy Nakatani"},{"book_id":1238684,"title":"The Stonekeeper (Amulet, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327866356m\/1238684.jpg","authors":"Kazu Kibuishi"},{"book_id":1240662,"title":"Lover Enshrined (Black Dagger Brotherhood, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1327896547m\/1240662.jpg","authors":"J.R. Ward"},{"book_id":1242729,"title":"Kambing Jantan: Sebuah Catatan Harian Pelajar Bodoh ","image_url":"https:\/\/images.gr-assets.com\/books\/1406103629m\/1242729.jpg","authors":"Raditya Dika"},{"book_id":1244286,"title":"Filosofi Kopi: Kumpulan Cerita dan Prosa Satu Dekade","image_url":"https:\/\/images.gr-assets.com\/books\/1356018939m\/1244286.jpg","authors":"Dee Lestari"},{"book_id":1248179,"title":"The Appeal","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Grisham"},{"book_id":1249630,"title":"Os Maias","image_url":"https:\/\/images.gr-assets.com\/books\/1362526641m\/1249630.jpg","authors":"Jos\u00e9 Maria de E\u00e7a de Queir\u00f3s, Ester de Lemos"},{"book_id":1251032,"title":"Hero","image_url":"https:\/\/images.gr-assets.com\/books\/1311716594m\/1251032.jpg","authors":"Perry Moore"},{"book_id":1254951,"title":"The Luxe (Luxe, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1323438343m\/1254951.jpg","authors":"Anna Godbersen"},{"book_id":1255781,"title":"Have a Little Faith: a True Story","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mitch Albom"},{"book_id":1258121,"title":"The Lemonade War (The Lemonade War, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jacqueline Davies"},{"book_id":1268348,"title":"The Secret Between Us","image_url":"https:\/\/images.gr-assets.com\/books\/1320407845m\/1268348.jpg","authors":"Barbara Delinsky"},{"book_id":1268479,"title":"Warbreaker (Warbreaker, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Brandon Sanderson"},{"book_id":1270615,"title":"Buffy the Vampire Slayer: The Long Way Home (Season 8, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1331332425m\/1270615.jpg","authors":"Joss Whedon, Georges Jeanty"},{"book_id":1275105,"title":"A Charlie Brown Christmas","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Charles M. Schulz"},{"book_id":1278752,"title":"The House at Riverton","image_url":"https:\/\/images.gr-assets.com\/books\/1356452218m\/1278752.jpg","authors":"Kate Morton"},{"book_id":1279686,"title":"Genghis: Birth of an Empire (Conqueror, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Conn Iggulden"},{"book_id":1282954,"title":"The Last Anniversary","image_url":"https:\/\/images.gr-assets.com\/books\/1482971434m\/1282954.jpg","authors":"Liane Moriarty"},{"book_id":1291211,"title":"Class A (Cherub, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1356698938m\/1291211.jpg","authors":"Robert Muchamore"},{"book_id":1295102,"title":"Lock and Key","image_url":"https:\/\/images.gr-assets.com\/books\/1479691949m\/1295102.jpg","authors":"Sarah Dessen"},{"book_id":1296415,"title":"Mouse Paint","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ellen Stoll Walsh"},{"book_id":1297150,"title":"Sword Song (The Saxon Stories, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1407111536m\/1297150.jpg","authors":"Bernard Cornwell"},{"book_id":1297985,"title":"Musicophilia: Tales of Music and the Brain","image_url":"https:\/\/images.gr-assets.com\/books\/1320494159m\/1297985.jpg","authors":"Oliver Sacks"},{"book_id":1298171,"title":"Finding Nemo","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Andrew Stanton, Walt Disney Company"},{"book_id":1298205,"title":"Dumbo: A Little Golden Book","image_url":"https:\/\/images.gr-assets.com\/books\/1320426193m\/1298205.jpg","authors":"Walt Disney Company"},{"book_id":1300350,"title":"Supernova: Akar","image_url":"https:\/\/images.gr-assets.com\/books\/1410249029m\/1300350.jpg","authors":"Dee Lestari"},{"book_id":1301153,"title":"Princess Mia (The Princess Diaries, #9)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Meg Cabot"},{"book_id":1303564,"title":"Maximum Security (Cherub, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1357225650m\/1303564.jpg","authors":"Robert Muchamore"},{"book_id":1314332,"title":"Before I Die","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jenny Downham"},{"book_id":1316382,"title":"The Wednesday Letters","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jason F. Wright"},{"book_id":1316617,"title":"Succubus on Top (Georgina Kincaid, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1315977158m\/1316617.jpg","authors":"Richelle Mead"},{"book_id":1317181,"title":"Harry Potter and the Order of the Phoenix (Harry Potter, #5, Part 1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"J.K. Rowling"},{"book_id":1317696,"title":"The Enchantress of Florence","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Salman Rushdie"},{"book_id":1325218,"title":"Scary Stories to Tell in the Dark (Scary Stories, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1440189576m\/1325218.jpg","authors":"Alvin Schwartz, Stephen Gammell"},{"book_id":1326258,"title":"Chosen (House of Night, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1393192825m\/1326258.jpg","authors":"P.C. Cast, Kristin Cast"},{"book_id":1330324,"title":"Sea of Poppies (Ibis Trilogy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327376395m\/1330324.jpg","authors":"Amitav Ghosh"},{"book_id":1331653,"title":"Salmon Fishing in the Yemen","image_url":"https:\/\/images.gr-assets.com\/books\/1347617111m\/1331653.jpg","authors":"Paul Torday"},{"book_id":1333030,"title":"Sweet Surrender (Sweet, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Maya Banks"},{"book_id":1335019,"title":"Necronomicon: The Best Weird Tales","image_url":"https:\/\/images.gr-assets.com\/books\/1264059645m\/1335019.jpg","authors":"H.P. Lovecraft, Les Edwards, Stephen Jones"},{"book_id":1335184,"title":"Peter Pan (A Little Golden Book)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Eugene Bradley Coco, Ron Dias, Walt Disney Company"},{"book_id":1337448,"title":"Wir Kinder vom Bahnhof Zoo","image_url":"https:\/\/images.gr-assets.com\/books\/1463309277m\/1337448.jpg","authors":"Christiane F., Kai Hermann, Horst Rieck"},{"book_id":1347837,"title":"Rule of Two (Star Wars: Darth Bane, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1281997208m\/1347837.jpg","authors":"Drew Karpyshyn"},{"book_id":1350249,"title":"The Lion King (Disney's Wonderful World of Reading)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Justine Korman Fontes"},{"book_id":1358844,"title":"Remember Me?","image_url":"https:\/\/images.gr-assets.com\/books\/1276963901m\/1358844.jpg","authors":"Sophie Kinsella"},{"book_id":1362193,"title":"Laskar Pelangi (Tetralogi Laskar Pelangi, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1489732961m\/1362193.jpg","authors":"Andrea Hirata"},{"book_id":1365225,"title":"Las batallas en el desierto","image_url":"https:\/\/images.gr-assets.com\/books\/1304602212m\/1365225.jpg","authors":"Jos\u00e9 Emilio Pacheco"},{"book_id":1372055,"title":"Courageous (The Lost Fleet, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jack Campbell"},{"book_id":1373381,"title":"The Ship of Brides","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jojo Moyes"},{"book_id":1375896,"title":"Queste (Septimus Heap, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Angie Sage, Mark Zug"},{"book_id":1376220,"title":"Hafalan Shalat Delisa","image_url":"https:\/\/images.gr-assets.com\/books\/1303475676m\/1376220.jpg","authors":"Tere Liye"},{"book_id":1379961,"title":"People of the Book","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Geraldine Brooks"},{"book_id":1388813,"title":"Midnight Awakening (Midnight Breed, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1343539714m\/1388813.jpg","authors":"Lara Adrian"},{"book_id":1395209,"title":"Attack of the Fiend (The Last Apprentice \/ Wardstone Chronicles, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Joseph Delaney, Patrick Arrasmith"},{"book_id":1398034,"title":"Bumi Manusia","image_url":"https:\/\/images.gr-assets.com\/books\/1464891625m\/1398034.jpg","authors":"Pramoedya Ananta Toer"},{"book_id":1402668,"title":"The Gatecrasher","image_url":"https:\/\/images.gr-assets.com\/books\/1312001285m\/1402668.jpg","authors":"Madeleine Wickham"},{"book_id":1406197,"title":"A Lick of Frost (Merry Gentry, #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Laurell K. Hamilton, Laural Merlington"},{"book_id":1407874,"title":"Sang Pemimpi (Tetralogi Laskar Pelangi, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1489733383m\/1407874.jpg","authors":"Andrea Hirata"},{"book_id":1409344,"title":"Driving Miss Daisy","image_url":"https:\/\/images.gr-assets.com\/books\/1328767041m\/1409344.jpg","authors":"Alfred Uhry"},{"book_id":1412138,"title":"Iron Kissed (Mercy Thompson, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1358229529m\/1412138.jpg","authors":"Patricia Briggs"},{"book_id":1421046,"title":"Supernova: Petir","image_url":"https:\/\/images.gr-assets.com\/books\/1404292897m\/1421046.jpg","authors":"Dee Lestari"},{"book_id":1421990,"title":"Halfway to the Grave (Night Huntress, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1373855613m\/1421990.jpg","authors":"Jeaniene Frost"},{"book_id":1422250,"title":"Vampires are Forever (Argeneau #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1351280934m\/1422250.jpg","authors":"Lynsay Sands"},{"book_id":1422252,"title":"Vampire, Interrupted (Argeneau #9)","image_url":"https:\/\/images.gr-assets.com\/books\/1410758592m\/1422252.jpg","authors":"Lynsay Sands"},{"book_id":1422926,"title":"Frosty the Snow Man","image_url":"https:\/\/images.gr-assets.com\/books\/1309642075m\/1422926.jpg","authors":"Jane Werner Watson, Corinne Malvern"},{"book_id":1429082,"title":"\u7f8e\u5c11\u5973\u6226\u58eb\u30bb\u30fc\u30e9\u30fc\u30e0\u30fc\u30f3\u65b0\u88c5\u7248 1 [Bish\u014djo Senshi Sailor Moon Shins\u014dban 1]","image_url":"https:\/\/images.gr-assets.com\/books\/1308886282m\/1429082.jpg","authors":"Naoko Takeuchi, \u6b66\u5185 \u76f4\u5b50"},{"book_id":1430213,"title":"The Bone Garden ","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tess Gerritsen"},{"book_id":1432370,"title":"Breaking Night: A Memoir of Forgiveness, Survival, and My Journey from Homeless to Harvard","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Liz Murray"},{"book_id":1433337,"title":"ABNKKBSNPLAKo?! (Mga Kwentong Chalk ni Bob Ong)","image_url":"https:\/\/images.gr-assets.com\/books\/1297789858m\/1433337.jpg","authors":"Bob Ong"},{"book_id":1434105,"title":"Plum Lucky (Stephanie Plum, #13.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1217483848m\/1434105.jpg","authors":"Janet Evanovich"},{"book_id":1457790,"title":"Stenhuggaren (Patrik Hedstr\u00f6m, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1334876462m\/1457790.jpg","authors":"Camilla L\u00e4ckberg"},{"book_id":1464757,"title":"Edensor (Tetralogi Laskar Pelangi, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1489733485m\/1464757.jpg","authors":"Andrea Hirata"},{"book_id":1466455,"title":"Three Wishes","image_url":"https:\/\/images.gr-assets.com\/books\/1183888822m\/1466455.jpg","authors":"Liane Moriarty"},{"book_id":1468706,"title":"An Incomplete Revenge (Maisie Dobbs, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1329547507m\/1468706.jpg","authors":"Jacqueline Winspear"},{"book_id":1470232,"title":"Magic Hour","image_url":"https:\/\/images.gr-assets.com\/books\/1320542057m\/1470232.jpg","authors":"Kristin Hannah"},{"book_id":1472878,"title":"Firefly Lane (Firefly Lane, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1362435448m\/1472878.jpg","authors":"Kristin Hannah"},{"book_id":1474628,"title":"The Monsters of Templeton","image_url":"https:\/\/images.gr-assets.com\/books\/1328051913m\/1474628.jpg","authors":"Lauren Groff"},{"book_id":1476261,"title":"Girls of Riyadh","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rajaa Alsanea"},{"book_id":1491906,"title":"Gang Leader for a Day: A Rogue Sociologist Takes to the Streets","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sudhir Venkatesh"},{"book_id":1493253,"title":"Hunter x Hunter, Vol. 01 (Hunter x Hunter, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Yoshihiro Togashi, \u51a8\u6a2b \u7fa9\u535a"},{"book_id":1499340,"title":"5 cm","image_url":"https:\/\/images.gr-assets.com\/books\/1472231689m\/1499340.jpg","authors":"Donny Dhirgantoro"},{"book_id":1499952,"title":"Daddy-Long-Legs (Daddy-Long-Legs, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1339593021m\/1499952.jpg","authors":"Jean Webster"},{"book_id":1503274,"title":"Rhett Butler's People","image_url":"https:\/\/images.gr-assets.com\/books\/1327920861m\/1503274.jpg","authors":"Donald McCaig"},{"book_id":1524173,"title":"The Sorcerer in the North (Ranger's Apprentice, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1327918728m\/1524173.jpg","authors":"John Flanagan"},{"book_id":1528410,"title":"Night Train to Lisbon","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Pascal Mercier, Barbara Harshav"},{"book_id":1537534,"title":"Unbelievable (Pretty Little Liars, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sara Shepard"},{"book_id":1541884,"title":"Personal Demon (Women of the Otherworld, #8)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kelley Armstrong"},{"book_id":1563413,"title":"The Three Little Pigs","image_url":"https:\/\/images.gr-assets.com\/books\/1310278098m\/1563413.jpg","authors":"Elizabeth Ross, ROFry"},{"book_id":1566053,"title":"The Portable Atheist: Essential Readings for the Nonbeliever","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Christopher Hitchens, Titus Lucretius Carus, Omar Khayy\u00e1m, Thomas Hobbes, Baruch Spinoza, David Hume, James Boswell, Percy Bysshe Shelley, George Eliot, Charles Darwin, Leslie Stephen, Anatole France, Mark Twain, Joseph Conrad, Thomas Hardy, Emma Goldman, H.P. Lovecraft, Carl Van Doren, H.L. Mencken, Sigmund Freud, Albert Einstein, George Orwell, John Betjeman, Chapman Cohen, Bertrand Russell, Philip Larkin, Martin Gardner, Carl Sagan, John Updike, John Leslie Mackie, Michael Shermer, A.J. Ayer, Daniel C. Dennett, Charles Templeton, Richard Dawkins, Victor J. Stenger, Elizabeth S. Anderson, Penn Jillette, Ian McEwan, Steven Weinberg, Salman Rushdie, Ibn Warraq, Sam Harris, A.C. Grayling, Ayaan Hirsi Ali, John Stuart Mill, Karl Marx"},{"book_id":1566705,"title":"Creation in Death (In Death, #25)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"J.D. Robb"},{"book_id":1582996,"title":"City of Ashes (The Mortal Instruments, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1432730356m\/1582996.jpg","authors":"Cassandra Clare"},{"book_id":1587362,"title":"How to Cook Everything Vegetarian: Simple Meatless Recipes for Great Food","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mark Bittman"},{"book_id":1593623,"title":"Renegade's Magic (Soldier Son, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1290919036m\/1593623.jpg","authors":"Robin Hobb"},{"book_id":1603923,"title":"Beauty and the Beast","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Walt Disney Company, Ellen Titlebaum"},{"book_id":1605034,"title":"The Miracle at Speedy Motors (No.1 Ladies' Detective Agency, #9)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Alexander McCall Smith"},{"book_id":1609451,"title":"Change of Heart","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jodi Picoult"},{"book_id":1611656,"title":"Dark Needs at Night's Edge (Immortals After Dark #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1357613946m\/1611656.jpg","authors":"Kresley Cole"},{"book_id":1611988,"title":"A Prisoner of Birth","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jeffrey Archer"},{"book_id":1617875,"title":"My Best Friend's Girl","image_url":"https:\/\/images.gr-assets.com\/books\/1363730538m\/1617875.jpg","authors":"Dorothy Koomson"},{"book_id":1624920,"title":"Kitty and the Silver Bullet (Kitty Norville, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Carrie Vaughn"},{"book_id":1629007,"title":"Where Are You Now?","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mary Higgins Clark"},{"book_id":1629601,"title":"The Disreputable History of Frankie Landau-Banks","image_url":"https:\/\/images.gr-assets.com\/books\/1313980820m\/1629601.jpg","authors":"E. Lockhart"},{"book_id":1632833,"title":"Genghis: Lords of the Bow (Conqueror, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Conn Iggulden"},{"book_id":1651302,"title":"Perfect (Pretty Little Liars, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1363681820m\/1651302.jpg","authors":"Sara Shepard"},{"book_id":1653655,"title":"Swindle (Swindle, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1328843225m\/1653655.jpg","authors":"Gordon Korman"},{"book_id":1656001,"title":"The Host (The Host, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1318009171m\/1656001.jpg","authors":"Stephenie Meyer"},{"book_id":1661957,"title":"Wake (Wake, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1361417311m\/1661957.jpg","authors":"Lisa McMann"},{"book_id":1662160,"title":"Your Inner Fish: A Journey into the 3.5-Billion-Year History of the Human Body","image_url":"https:\/\/images.gr-assets.com\/books\/1320439515m\/1662160.jpg","authors":"Neil Shubin"},{"book_id":1667423,"title":"Autumn in Paris","image_url":"https:\/\/images.gr-assets.com\/books\/1409579772m\/1667423.jpg","authors":"Ilana Tan"},{"book_id":1672727,"title":"Two-Way Street","image_url":"https:\/\/images.gr-assets.com\/books\/1381750633m\/1672727.jpg","authors":"Lauren Barnholdt"},{"book_id":1675216,"title":"Found (The Missing, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Margaret Peterson Haddix"},{"book_id":1689469,"title":"Chasing Darkness (Elvis Cole, #12)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert Crais"},{"book_id":1693617,"title":"Disney's the Lion King","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Don Ferguson"},{"book_id":1713426,"title":"Predictably Irrational: The Hidden Forces That Shape Our Decisions","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dan Ariely"},{"book_id":1713912,"title":"Cross Country (Alex Cross, #14)","image_url":"https:\/\/images.gr-assets.com\/books\/1344270626m\/1713912.jpg","authors":"James Patterson"},{"book_id":1717890,"title":"Pandora Hearts 1\u5dfb","image_url":"https:\/\/images.gr-assets.com\/books\/1187333570m\/1717890.jpg","authors":"Jun Mochizuki, \u671b\u6708\u6df3"},{"book_id":1722717,"title":"The Declaration (The Declaration, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1317067021m\/1722717.jpg","authors":"Gemma Malley"},{"book_id":1728744,"title":"Sleeping Beauty (Disney Princess, 5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"A.L. Singer, Walt Disney Company"},{"book_id":1729146,"title":"Raven Rise (Pendragon, #9)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"D.J. MacHale"},{"book_id":1734639,"title":"Deceptively Delicious: Simple Secrets to Get Your Kids Eating Good Food","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jessica Seinfeld"},{"book_id":1736739,"title":"Olive Kitteridge","image_url":"https:\/\/images.gr-assets.com\/books\/1320430655m\/1736739.jpg","authors":"Elizabeth Strout"},{"book_id":1746470,"title":"Dream Chaser (Dark-Hunter #13, Dream-Hunter #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1462051552m\/1746470.jpg","authors":"Sherrilyn Kenyon"},{"book_id":1747182,"title":"Deeper Than the Dead (Oak Knoll, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1408930728m\/1747182.jpg","authors":"Tami Hoag"},{"book_id":1747896,"title":"The Suspicions of Mr. Whicher: A Shocking Murder and the Undoing of a Great Victorian Detective","image_url":"https:\/\/images.gr-assets.com\/books\/1312021413m\/1747896.jpg","authors":"Kate Summerscale"},{"book_id":1753714,"title":"Gakuen Alice, Vol. 01 (Gakuen Alice, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tachibana Higuchi, \u6a0b\u53e3 \u6a58"},{"book_id":1754206,"title":"Perfect You","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Elizabeth Scott"},{"book_id":1756703,"title":"Blue-Eyed Devil (Travises, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1311990880m\/1756703.jpg","authors":"Lisa Kleypas"},{"book_id":1767779,"title":"Five Little Monkeys Jumping on the Bed","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Eileen Christelow"},{"book_id":1768603,"title":"The White Tiger","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Aravind Adiga"},{"book_id":1772910,"title":"White Nights","image_url":"https:\/\/images.gr-assets.com\/books\/1450699039m\/1772910.jpg","authors":"Fyodor Dostoyevsky"},{"book_id":1774836,"title":"The Palace of Illusions","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Chitra Banerjee Divakaruni"},{"book_id":1776251,"title":"Jamie at Home: Cook Your Way to the Good Life","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jamie Oliver"},{"book_id":1779929,"title":"The Middle Place","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kelly Corrigan"},{"book_id":1809175,"title":"The Magic Thief (Magic Thief, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sarah Prineas, Antonio Javier Caparo"},{"book_id":1809465,"title":"Rodrick Rules (Diary of a Wimpy Kid, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1360095964m\/1809465.jpg","authors":"Jeff Kinney"},{"book_id":1811543,"title":"Magic Burns (Kate Daniels, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1311280284m\/1811543.jpg","authors":"Ilona Andrews"},{"book_id":1812457,"title":"The Shack","image_url":"https:\/\/images.gr-assets.com\/books\/1344270232m\/1812457.jpg","authors":"William Paul Young"},{"book_id":1814843,"title":"The Siege of Macindaw (Ranger's Apprentice, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1327445821m\/1814843.jpg","authors":"John Flanagan"},{"book_id":1819632,"title":"Chibi Vampire, Vol. 01","image_url":"https:\/\/images.gr-assets.com\/books\/1404303540m\/1819632.jpg","authors":"Yuna Kagesaki"},{"book_id":1820716,"title":"Gut gegen Nordwind (Gut gegen Nordwind, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Daniel Glattauer"},{"book_id":1821187,"title":"Train Dreams","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Denis Johnson, Bettina Abarbanell"},{"book_id":1821571,"title":"Snakehead (Alex Rider, #7)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anthony Horowitz"},{"book_id":1829709,"title":"The Final Warning (Maximum Ride, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Patterson"},{"book_id":1830755,"title":"Mine to Possess (Psy-Changeling #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1298434132m\/1830755.jpg","authors":"Nalini Singh"},{"book_id":1833852,"title":"A Fraction of the Whole","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Steve Toltz"},{"book_id":1838166,"title":"The Penderwicks on Gardam Street (The Penderwicks, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jeanne Birdsall"},{"book_id":1840511,"title":"Snuff","image_url":"https:\/\/images.gr-assets.com\/books\/1446089918m\/1840511.jpg","authors":"Chuck Palahniuk"},{"book_id":1848444,"title":"A Scandal in Bohemia (The Adventures of Sherlock Holmes, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ronald Holt, Arthur Conan Doyle"},{"book_id":1857440,"title":"John Dies at the End (John Dies at the End, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Wong"},{"book_id":1858013,"title":"The Reason for God: Belief in an Age of Skepticism","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Timothy J. Keller"},{"book_id":1862313,"title":"Lush Life","image_url":"https:\/\/images.gr-assets.com\/books\/1316137153m\/1862313.jpg","authors":"Richard Price"},{"book_id":1866046,"title":"Adam","image_url":"https:\/\/images.gr-assets.com\/books\/1364953816m\/1866046.jpg","authors":"Ted Dekker"},{"book_id":1876770,"title":"Chrzest ognia (Saga o Wied\u017aminie, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Andrzej Sapkowski"},{"book_id":1881621,"title":"Shugo Chara!, Vol. 1: Who Do You Want to Be? (Shugo Chara!, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1320532059m\/1881621.jpg","authors":"Peach-Pit"},{"book_id":1883838,"title":"The Heroin Diaries: A Year In The Life Of A Shattered Rock Star","image_url":"https:\/\/images.gr-assets.com\/books\/1408936840m\/1883838.jpg","authors":"Nikki Sixx"},{"book_id":1891296,"title":"The Fire Eternal (The Last Dragon Chronicles, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Chris d'Lacey"},{"book_id":1894269,"title":"The Walking Dead, Vol. 08: Made to Suffer","image_url":"https:\/\/images.gr-assets.com\/books\/1266634689m\/1894269.jpg","authors":"Robert Kirkman"},{"book_id":1895792,"title":"The Fury \/ Dark Reunion (The Vampire Diaries, #3-4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"L.J. Smith"},{"book_id":1896346,"title":"High School Debut, Vol. 01 (High School Debut, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kazune Kawahara"},{"book_id":1898916,"title":"Vampire Knight, Vol. 4 (Vampire Knight, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1318835401m\/1898916.jpg","authors":"Matsuri Hino, Tomo Kimura"},{"book_id":1902241,"title":"The Adoration of Jenna Fox (Jenna Fox Chronicles, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1388715600m\/1902241.jpg","authors":"Mary E. Pearson"},{"book_id":1908456,"title":"Presentation Zen: Simple Ideas on Presentation Design and Delivery","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Garr Reynolds"},{"book_id":1908511,"title":"The Pigeon Wants a Puppy!","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mo Willems"},{"book_id":1914973,"title":"The Likeness (Dublin Murder Squad, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tana French"},{"book_id":1918305,"title":"The Geography of Bliss: One Grump's Search for the Happiest Places in the World","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Eric Weiner"},{"book_id":1918702,"title":"Lon Po Po: A Red-Riding Hood Story from China","image_url":"https:\/\/images.gr-assets.com\/books\/1265127897m\/1918702.jpg","authors":"Ed Young"},{"book_id":1923820,"title":"Holy Bible: King James Version","image_url":"https:\/\/images.gr-assets.com\/books\/1313518530m\/1923820.jpg","authors":"Anonymous"},{"book_id":1928873,"title":"Midnight Rising (Midnight Breed, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1320404514m\/1928873.jpg","authors":"Lara Adrian"},{"book_id":1931915,"title":"Bruiser","image_url":"https:\/\/images.gr-assets.com\/books\/1318261800m\/1931915.jpg","authors":"Neal Shusterman"},{"book_id":1933181,"title":"The Lady Elizabeth","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Alison Weir"},{"book_id":1951125,"title":"The Lace Reader (The Lace Reader, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Brunonia Barry"},{"book_id":1963638,"title":"The Untethered Soul: The Journey Beyond Yourself","image_url":"https:\/\/images.gr-assets.com\/books\/1354898395m\/1963638.jpg","authors":"Michael A. Singer"},{"book_id":1966969,"title":"Fire Study (Study, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1357064290m\/1966969.jpg","authors":"Maria V. Snyder"},{"book_id":1967070,"title":"Coraline (Illustrated\/Graphic Novel Edition)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Neil Gaiman, P. Craig Russell"},{"book_id":1970449,"title":"Slash","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Slash, Anthony Bozza"},{"book_id":1971304,"title":"City of Thieves","image_url":"https:\/\/images.gr-assets.com\/books\/1392015757m\/1971304.jpg","authors":"David Benioff"},{"book_id":1991039,"title":"Flaggermusmannen (Harry Hole, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jo Nesb\u00f8, Don Bartlett"},{"book_id":1999475,"title":"A Million Miles in a Thousand Years: What I Learned While Editing My Life","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Donald Miller"},{"book_id":2003625,"title":"Dark Desires After Dusk (Immortals After Dark #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1327887013m\/2003625.jpg","authors":"Kresley Cole"},{"book_id":2003767,"title":"Tribute","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nora Roberts"},{"book_id":2017056,"title":"Skeletons at the Feast","image_url":"https:\/\/images.gr-assets.com\/books\/1320413130m\/2017056.jpg","authors":"Chris Bohjalian"},{"book_id":2020935,"title":"Sweethearts","image_url":"https:\/\/images.gr-assets.com\/books\/1336053590m\/2020935.jpg","authors":"Sara Zarr"},{"book_id":2025787,"title":"Mad Dogs (Cherub, #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1417330634m\/2025787.jpg","authors":"Robert Muchamore"},{"book_id":2029176,"title":"Sail","image_url":"https:\/\/images.gr-assets.com\/books\/1344264435m\/2029176.jpg","authors":"James Patterson, Howard Roughan"},{"book_id":2029177,"title":"Sundays at Tiffany's","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Patterson, Gabrielle Charbonnet"},{"book_id":2029927,"title":"Odd Hours (Odd Thomas, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dean Koontz"},{"book_id":2033217,"title":"Moscow Rules (Gabriel Allon, #8)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Daniel Silva"},{"book_id":2033352,"title":"The Redeemer (Harry Hole, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1418343566m\/2033352.jpg","authors":"Jo Nesb\u00f8"},{"book_id":2049993,"title":"Airman","image_url":"https:\/\/images.gr-assets.com\/books\/1327967233m\/2049993.jpg","authors":"Eoin Colfer"},{"book_id":2051840,"title":"The Coffin Club (Vampire Kisses, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1306605099m\/2051840.jpg","authors":"Ellen Schreiber"},{"book_id":2054761,"title":"The Snowball: Warren Buffett and the Business of Life","image_url":"https:\/\/images.gr-assets.com\/books\/1320458276m\/2054761.jpg","authors":"Alice Schroeder"},{"book_id":2063563,"title":"My Booky Wook","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Russell Brand"},{"book_id":2068676,"title":"Queen of Babble Gets Hitched (Queen of Babble, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Meg Cabot"},{"book_id":2071575,"title":"The Beach House","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jane Green"},{"book_id":2073686,"title":"Tales From the Hood (The Sisters Grimm, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1397791708m\/2073686.jpg","authors":"Michael Buckley, Peter Ferguson"},{"book_id":2082136,"title":"Bonk: The Curious Coupling of Science and Sex","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mary Roach"},{"book_id":2095583,"title":"Devil Bones (Temperance Brennan, #11)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kathy Reichs"},{"book_id":2102600,"title":"Zoe's Tale (Old Man's War, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1301108028m\/2102600.jpg","authors":"John Scalzi"},{"book_id":2108198,"title":"Odd and the Frost Giants","image_url":"https:\/\/images.gr-assets.com\/books\/1323790894m\/2108198.jpg","authors":"Neil Gaiman, Mark Buckingham"},{"book_id":2113260,"title":"Shades of Grey","image_url":"https:\/\/images.gr-assets.com\/books\/1327563734m\/2113260.jpg","authors":"Jasper Fforde"},{"book_id":2113410,"title":"Belong to Me","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Marisa de los Santos"},{"book_id":2118114,"title":"Sway: The Irresistible Pull of Irrational Behavior","image_url":"https:\/\/images.gr-assets.com\/books\/1320419177m\/2118114.jpg","authors":"Ori Brafman, Rom Brafman"},{"book_id":2118745,"title":"The Knife of Never Letting Go (Chaos Walking, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1277071696m\/2118745.jpg","authors":"Patrick Ness"},{"book_id":2120652,"title":"Love the One You're With","image_url":"https:\/\/images.gr-assets.com\/books\/1361466590m\/2120652.jpg","authors":"Emily Giffin"},{"book_id":2120783,"title":"The Post-American World","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Fareed Zakaria"},{"book_id":2120932,"title":"The Battle of the Labyrinth (Percy Jackson and the Olympians, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1443142158m\/2120932.jpg","authors":"Rick Riordan"},{"book_id":2122216,"title":"Special A, Vol. 1 (Special A, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1408207157m\/2122216.jpg","authors":"Maki Minami"},{"book_id":2133795,"title":"Savvy (Savvy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1480110534m\/2133795.jpg","authors":"Ingrid Law"},{"book_id":2133827,"title":"La M\u00e9canique du c\u0153ur","image_url":"https:\/\/images.gr-assets.com\/books\/1327407179m\/2133827.jpg","authors":"Mathias Malzieu"},{"book_id":2138727,"title":"Mudbound","image_url":"https:\/\/images.gr-assets.com\/books\/1296591096m\/2138727.jpg","authors":"Hillary Jordan"},{"book_id":2141830,"title":"Secrets of a Shoe Addict (Shoe Addict, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Beth Harbison"},{"book_id":2145681,"title":"A Wolf at the Table","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Augusten Burroughs"},{"book_id":2146957,"title":"Grip of the Shadow Plague (Fablehaven, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Brandon Mull"},{"book_id":2147714,"title":"Fables, Vol. 10: The Good Prince","image_url":"https:\/\/images.gr-assets.com\/books\/1375393788m\/2147714.jpg","authors":"Bill Willingham, Mark Buckingham, Steve Leialoha, Aaron Alexovich, Andrew Pepoy"},{"book_id":2149535,"title":"Blood Noir (Anita Blake, Vampire Hunter #16)","image_url":"https:\/\/images.gr-assets.com\/books\/1310494632m\/2149535.jpg","authors":"Laurell K. Hamilton"},{"book_id":2152871,"title":"Kushiel's Mercy (Imriel's Trilogy, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jacqueline Carey"},{"book_id":2153405,"title":"Still Alice","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lisa Genova"},{"book_id":2157243,"title":"Playing with Fire (Skulduggery Pleasant, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Derek Landy"},{"book_id":2159007,"title":"Downtown Owl","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Chuck Klosterman"},{"book_id":2159225,"title":"The Mysterious Benedict Society and the Perilous Journey (The Mysterious Benedict Society, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Trenton Lee Stewart, Diana Sudyka"},{"book_id":2161733,"title":"Child 44 (Leo Demidov, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1326549060m\/2161733.jpg","authors":"Tom Rob Smith"},{"book_id":2168860,"title":"One Foot in the Grave (Night Huntress, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1373857981m\/2168860.jpg","authors":"Jeaniene Frost"},{"book_id":2169506,"title":"The Dead and the Gone (Last Survivors, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1266309782m\/2169506.jpg","authors":"Susan Beth Pfeffer"},{"book_id":2173611,"title":"House of Many Ways (Howl's Moving Castle, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1293848674m\/2173611.jpg","authors":"Diana Wynne Jones"},{"book_id":2176735,"title":"Breath","image_url":"https:\/\/images.gr-assets.com\/books\/1317792624m\/2176735.jpg","authors":"Tim Winton"},{"book_id":2176873,"title":"Martha Stewart's Cookies: The Very Best Treats to Bake and to Share","image_url":"https:\/\/images.gr-assets.com\/books\/1320457250m\/2176873.jpg","authors":"Martha Stewart, Victor Schrager"},{"book_id":2177236,"title":"Hold Tight","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Harlan Coben"},{"book_id":2179276,"title":"The Time Paradox (Artemis Fowl, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1395218526m\/2179276.jpg","authors":"Eoin Colfer"},{"book_id":2179832,"title":"Bright Shiny Morning","image_url":"https:\/\/images.gr-assets.com\/books\/1415586680m\/2179832.jpg","authors":"James Frey"},{"book_id":2182780,"title":"Batman: The Man Who Laughs","image_url":"https:\/\/images.gr-assets.com\/books\/1486038991m\/2182780.jpg","authors":"Ed Brubaker, Doug Mahnke, Patrick Zircher, Aaron Sowd, Steve Bird"},{"book_id":2187270,"title":"Waiter Rant: Thanks for the Tip-Confessions of a Cynical Waiter","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"The Waiter, Steve Dublanica"},{"book_id":2195289,"title":"I Was Told There'd Be Cake","image_url":"https:\/\/images.gr-assets.com\/books\/1311282474m\/2195289.jpg","authors":"Sloane Crosley"},{"book_id":2195309,"title":"The Hollow (Sign of Seven, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nora Roberts"},{"book_id":2195464,"title":"What I Talk About When I Talk About Running","image_url":"https:\/\/images.gr-assets.com\/books\/1473397159m\/2195464.jpg","authors":"Haruki Murakami, Philip Gabriel"},{"book_id":2197227,"title":"Cemetery Dance (Pendergast, #9)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Douglas Preston, Lincoln Child"},{"book_id":2198274,"title":"The Monster of Florence","image_url":"https:\/\/images.gr-assets.com\/books\/1306075698m\/2198274.jpg","authors":"Douglas Preston, Mario Spezi"},{"book_id":2199587,"title":"Fractured (Will Trent, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Karin Slaughter"},{"book_id":2200877,"title":"The Sugar Queen","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sarah Addison Allen"},{"book_id":2202049,"title":"Such a Pretty Fat: One Narcissist's Quest to Discover If Her Life Makes Her Ass Look Big, or Why Pie Is Not the Answer","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jen Lancaster"},{"book_id":2202230,"title":"Y: The Last Man, Vol. 10: Whys and Wherefores (Y: The Last Man, #10)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Brian K. Vaughan, Pia Guerra, Jos\u00e9 Marz\u00e1n Jr."},{"book_id":2208744,"title":"Dragon Flight (Dragon Slippers, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1441437868m\/2208744.jpg","authors":"Jessica Day George"},{"book_id":2210921,"title":"Say Goodbye (Quincy & Rainie, #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lisa Gardner"},{"book_id":2211221,"title":"Nothing to Lose (Jack Reacher, #12)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lee Child"},{"book_id":2213324,"title":"Airhead (Airhead, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1260574610m\/2213324.jpg","authors":"Meg Cabot"},{"book_id":2213661,"title":"The Graveyard Book","image_url":"https:\/\/images.gr-assets.com\/books\/1303859949m\/2213661.jpg","authors":"Neil Gaiman, Dave McKean"},{"book_id":2218252,"title":"Rumors (Luxe, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anna Godbersen"},{"book_id":2223324,"title":"Harry Potter and the Chamber of Secrets: Sheet Music for Flute with C.D","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Williams"},{"book_id":2227371,"title":"The Girl with No Shadow (Chocolat, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Joanne Harris"},{"book_id":2230284,"title":"The Broken Window (Lincoln Rhyme, #8)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jeffery Deaver"},{"book_id":2233407,"title":"From Dead to Worse (Sookie Stackhouse, #8)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Charlaine Harris"},{"book_id":2235597,"title":"The Dangerous Days of Daniel X (Daniel X, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1266659390m\/2235597.jpg","authors":"James Patterson, Michael Ledwidge"},{"book_id":2241059,"title":"Identical","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ellen Hopkins"},{"book_id":2241558,"title":"The Other Queen (The Plantagenet and Tudor Novels, #15)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Philippa Gregory"},{"book_id":2247142,"title":"The Talented Mr. Ripley (Ripley, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Patricia Highsmith"},{"book_id":2248573,"title":"Brisingr (The Inheritance Cycle, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Christopher Paolini"},{"book_id":2249196,"title":"All-Star Superman, Vol. 2","image_url":"https:\/\/images.gr-assets.com\/books\/1320477944m\/2249196.jpg","authors":"Grant Morrison, Frank Quitely"},{"book_id":2251306,"title":"Brain Rules: 12 Principles for Surviving and Thriving at Work, Home, and School","image_url":"https:\/\/images.gr-assets.com\/books\/1328763686m\/2251306.jpg","authors":"John Medina"},{"book_id":2260637,"title":"The Whole Truth (A. Shaw, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Baldacci"},{"book_id":2267195,"title":"The Story of an Hour","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kate Chopin"},{"book_id":2272813,"title":"Ninth Grade Slays (The Chronicles of Vladimir Tod, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Heather Brewer"},{"book_id":2272880,"title":"The Drunkard's Walk: How Randomness Rules Our Lives","image_url":"https:\/\/images.gr-assets.com\/books\/1320392907m\/2272880.jpg","authors":"Leonard Mlodinow"},{"book_id":2277378,"title":"The Cruelest Month (Chief Inspector Armand Gamache, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1327970261m\/2277378.jpg","authors":"Louise Penny"},{"book_id":2277444,"title":"The Last Oracle (Sigma Force, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1367511748m\/2277444.jpg","authors":"James Rollins"},{"book_id":2282133,"title":"Frostbite (Vampire Academy, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1361098960m\/2282133.jpg","authors":"Richelle Mead"},{"book_id":2285777,"title":"A Summer Affair","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Elin Hilderbrand"},{"book_id":2292384,"title":"Fearless Fourteen (Stephanie Plum, #14)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Janet Evanovich"},{"book_id":2295829,"title":"Feast of Fools (The Morganville Vampires, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rachel Caine"},{"book_id":2296567,"title":"Say You're One of Them","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Uwem Akpan"},{"book_id":2299110,"title":"Acheron (Dark-Hunter #14)","image_url":"https:\/\/images.gr-assets.com\/books\/1437687512m\/2299110.jpg","authors":"Sherrilyn Kenyon"},{"book_id":2306910,"title":"Smoke Screen","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sandra Brown"},{"book_id":2309720,"title":"Wild Ones, Vol. 1 (Wild Ones, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kiyo Fujiwara"},{"book_id":2315892,"title":"Best Served Cold","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Joe Abercrombie"},{"book_id":2318271,"title":"The Last Lecture","image_url":"https:\/\/images.gr-assets.com\/books\/1388075896m\/2318271.jpg","authors":"Randy Pausch, Jeffrey Zaslow"},{"book_id":2321296,"title":"Ink Exchange (Wicked Lovely, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1275693727m\/2321296.jpg","authors":"Melissa Marr"},{"book_id":2324124,"title":"Hello, Cupcake","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Alan Richardson, Karen Tack"},{"book_id":2325825,"title":"Inkdeath (Inkworld, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1327341991m\/2325825.jpg","authors":"Cornelia Funke"},{"book_id":2331954,"title":"Infected (Infected, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Scott Sigler"},{"book_id":2334751,"title":"This Charming Man","image_url":"https:\/\/images.gr-assets.com\/books\/1328451976m\/2334751.jpg","authors":"Marian Keyes"},{"book_id":2336803,"title":"The Last Patriot (Scot Harvath, #7)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Brad Thor"},{"book_id":2350129,"title":"Preach My Gospel: A Guide To Missionary Service","image_url":"https:\/\/images.gr-assets.com\/books\/1399612262m\/2350129.jpg","authors":"The Church of Jesus Christ of Latter-day Saints"},{"book_id":2355575,"title":"Cry Wolf (Alpha & Omega, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1310494063m\/2355575.jpg","authors":"Patricia Briggs"},{"book_id":2358737,"title":"Hot, Flat, and Crowded: Why We Need a Green Revolution--and How It Can Renew America","image_url":"https:\/\/images.gr-assets.com\/books\/1312006327m\/2358737.jpg","authors":"Thomas L. Friedman"},{"book_id":2358870,"title":"Artemis Fowl Boxed Set, Bks 1-5 (Artemis Fowl, #1-5)","image_url":"https:\/\/images.gr-assets.com\/books\/1279206196m\/2358870.jpg","authors":"Eoin Colfer"},{"book_id":2364284,"title":"\u0623\u0648\u0644\u0627\u062f \u062d\u0627\u0631\u062a\u0646\u0627","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Naguib Mahfouz, \u0646\u062c\u064a\u0628 \u0645\u062d\u0641\u0648\u0638"},{"book_id":2402971,"title":"The Magician (The Secrets of the Immortal Nicholas Flamel, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1320396250m\/2402971.jpg","authors":"Michael Scott"},{"book_id":2410506,"title":"Thanks for the Memories","image_url":"https:\/\/images.gr-assets.com\/books\/1328019535m\/2410506.jpg","authors":"Cecelia Ahern"},{"book_id":2429135,"title":"The Girl with the Dragon Tattoo (Millennium, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327868566m\/2429135.jpg","authors":"Stieg Larsson, Reg Keeland"},{"book_id":2437710,"title":"August: Osage County","image_url":"https:\/\/images.gr-assets.com\/books\/1354209733m\/2437710.jpg","authors":"Tracy Letts"},{"book_id":2449962,"title":"Twenty Wishes (Blossom Street, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Debbie Macomber"},{"book_id":2454986,"title":"Fairy Tail, Vol. 1 (Fairy Tail, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Hiro Mashima, William Flanagan"},{"book_id":2458340,"title":"Ape House","image_url":"https:\/\/images.gr-assets.com\/books\/1328023833m\/2458340.jpg","authors":"Sara Gruen"},{"book_id":2467566,"title":"The Long Tail: Why the Future of Business is Selling Less of More","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Chris Anderson"},{"book_id":2474084,"title":"The Work of Art in the Age of Its Technological Reproducibility, and Other Writings on Media","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Walter Benjamin, Michael W. Jennings, Brigid Doherty, Edmund F.N. Jephcott, Rodney Livingstone, Howard Eiland, Thomas Y. Levin"},{"book_id":2475251,"title":"The Cellist of Sarajevo","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Steven Galloway"},{"book_id":2479827,"title":"Eragon, Eldest & Brisingr (Inheritance, #1-3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Christopher Paolini"},{"book_id":2485785,"title":"The Secret Life of CeeCee Wilkes","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Diane Chamberlain"},{"book_id":2493973,"title":"The Diamond of Darkhold (Book of Ember, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1320636372m\/2493973.jpg","authors":"Jeanne DuPrau"},{"book_id":2494204,"title":"Salvation in Death (In Death, #27)","image_url":"https:\/\/images.gr-assets.com\/books\/1328026886m\/2494204.jpg","authors":"J.D. Robb"},{"book_id":2498983,"title":"The Darkest Kiss (Lords of the Underworld #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1399691671m\/2498983.jpg","authors":"Gena Showalter"},{"book_id":2501453,"title":"\u0639\u0627\u0628\u0631 \u0633\u0631\u064a\u0631","image_url":"https:\/\/images.gr-assets.com\/books\/1291848845m\/2501453.jpg","authors":"\u0623\u062d\u0644\u0627\u0645 \u0645\u0633\u062a\u063a\u0627\u0646\u0645\u064a, Ahlam Mosteghanemi"},{"book_id":2501455,"title":"\u0641\u0648\u0636\u0649 \u0627\u0644\u062d\u0648\u0627\u0633","image_url":"https:\/\/images.gr-assets.com\/books\/1291848735m\/2501455.jpg","authors":"\u0623\u062d\u0644\u0627\u0645 \u0645\u0633\u062a\u063a\u0627\u0646\u0645\u064a, Ahlam Mosteghanemi"},{"book_id":2501458,"title":"\u0630\u0627\u0643\u0631\u0629 \u0627\u0644\u062c\u0633\u062f","image_url":"https:\/\/images.gr-assets.com\/books\/1291756684m\/2501458.jpg","authors":"\u0623\u062d\u0644\u0627\u0645 \u0645\u0633\u062a\u063a\u0627\u0646\u0645\u064a, Ahlam Mosteghanemi"},{"book_id":2505836,"title":"Money, and the Law of Attraction: Learning to Attract Wealth, Health, and Happiness","image_url":"https:\/\/images.gr-assets.com\/books\/1418105485m\/2505836.jpg","authors":"Esther Hicks, Jerry Hicks"},{"book_id":2508164,"title":"Ghostgirl (Ghostgirl, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tonya Hurley"},{"book_id":2508854,"title":"\u062a\u0627\u0643\u0633\u064a: \u062d\u0648\u0627\u062f\u064a\u062a \u0627\u0644\u0645\u0634\u0627\u0648\u064a\u0631","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"\u062e\u0627\u0644\u062f \u0627\u0644\u062e\u0645\u064a\u0633\u064a, Khaled Al Khamissi"},{"book_id":2527900,"title":"Nudge: Improving Decisions About Health, Wealth, and Happiness","image_url":"https:\/\/images.gr-assets.com\/books\/1328828013m\/2527900.jpg","authors":"Richard H. Thaler, Cass R. Sunstein"},{"book_id":2536134,"title":"Gone (Gone, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1357796831m\/2536134.jpg","authors":"Michael Grant"},{"book_id":2548866,"title":"James Potter and the Hall of Elders' Crossing (James Potter, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1497650972m\/2548866.jpg","authors":"G. Norman Lippert"},{"book_id":2570856,"title":"Monster Hunter International (Monster Hunter International, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Larry Correia"},{"book_id":2579284,"title":"Six Days of the Condor","image_url":"https:\/\/images.gr-assets.com\/books\/1313011780m\/2579284.jpg","authors":"James Grady"},{"book_id":2586771,"title":"The 19th Wife","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Ebershoff"},{"book_id":2595138,"title":"The Gargoyle","image_url":"https:\/\/images.gr-assets.com\/books\/1368598513m\/2595138.jpg","authors":"Andrew Davidson"},{"book_id":2615008,"title":"Netherland","image_url":"https:\/\/images.gr-assets.com\/books\/1344205853m\/2615008.jpg","authors":"Joseph O'Neill"},{"book_id":2617684,"title":"Winnie the Pooh and Tigger Too (Disney's Wonderful World of Reading)","image_url":"https:\/\/images.gr-assets.com\/books\/1329390079m\/2617684.jpg","authors":"Walt Disney Company"},{"book_id":2637138,"title":"Welcome to the Jungle (The Dresden Files, #0.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1320418408m\/2637138.jpg","authors":"Jim Butcher"},{"book_id":2642070,"title":"sTORI Telling","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tori Spelling"},{"book_id":2653622,"title":"The Keepsake (Rizzoli & Isles, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1320502170m\/2653622.jpg","authors":"Tess Gerritsen"},{"book_id":2659997,"title":"Stolen Innocence: My Story of Growing Up in a Polygamous Sect, Becoming a Teenage Bride, and Breaking Free of Warren Jeffs","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Elissa Wall, Lisa Pulitzer"},{"book_id":2678349,"title":"\u0627\u0633\u062a\u0645\u062a\u0639 \u0628\u062d\u064a\u0627\u062a\u0643","image_url":"https:\/\/images.gr-assets.com\/books\/1399206237m\/2678349.jpg","authors":"\u0645\u062d\u0645\u062f \u0639\u0628\u062f \u0627\u0644\u0631\u062d\u0645\u0646 \u0627\u0644\u0639\u0631\u064a\u0641\u064a"},{"book_id":2679633,"title":"Pleasure Unbound (Demonica, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1289064020m\/2679633.jpg","authors":"Larissa Ione"},{"book_id":2693801,"title":"History of Art","image_url":"https:\/\/images.gr-assets.com\/books\/1330064588m\/2693801.jpg","authors":"H.W. Janson, Anthony F. Janson"},{"book_id":2696181,"title":"The Compound (The Compound, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"S.A. Bodeen"},{"book_id":2702704,"title":"Faefever (Fever, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Karen Marie Moning"},{"book_id":2712967,"title":"The Darkest Pleasure (Lords of the Underworld #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Gena Showalter"},{"book_id":2714607,"title":"The Ascent of Money: A Financial History of the World","image_url":"https:\/\/images.gr-assets.com\/books\/1297236908m\/2714607.jpg","authors":"Niall Ferguson"},{"book_id":2722413,"title":"Evernight (Evernight, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1306376600m\/2722413.jpg","authors":"Claudia Gray"},{"book_id":2728527,"title":"The Guernsey Literary and Potato Peel Pie Society","image_url":"https:\/\/images.gr-assets.com\/books\/1351979318m\/2728527.jpg","authors":"Mary Ann Shaffer, Annie Barrows"},{"book_id":2731276,"title":"The Story of Edgar Sawtelle","image_url":"https:\/\/images.gr-assets.com\/books\/1310466361m\/2731276.jpg","authors":"David Wroblewski"},{"book_id":2747288,"title":"Dragonheart (Pern, #21)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Todd J. McCaffrey"},{"book_id":2750180,"title":"\u0644\u0627 \u062a\u062d\u0632\u0646","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"\u0639\u0627\u0626\u0636 \u0627\u0644\u0642\u0631\u0646\u064a"},{"book_id":2753843,"title":"Revelations (Blue Bloods, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1322343073m\/2753843.jpg","authors":"Melissa de la Cruz"},{"book_id":2754510,"title":"Storm Born (Dark Swan #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327900947m\/2754510.jpg","authors":"Richelle Mead"},{"book_id":2761356,"title":"The Sweet Gum Tree","image_url":"https:\/\/images.gr-assets.com\/books\/1367119561m\/2761356.jpg","authors":"Katherine Allred"},{"book_id":2761626,"title":"The Brass Verdict (Harry Bosch, #14; Mickey Haller, #2; Harry Bosch Universe, #17)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael Connelly"},{"book_id":2767052,"title":"The Hunger Games (The Hunger Games, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1447303603m\/2767052.jpg","authors":"Suzanne Collins"},{"book_id":2767793,"title":"The Hero of Ages (Mistborn, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1480717763m\/2767793.jpg","authors":"Brandon Sanderson"},{"book_id":2795053,"title":"The Umbrella Academy, Vol. 1: The Apocalypse Suite","image_url":"https:\/\/images.gr-assets.com\/books\/1327877097m\/2795053.jpg","authors":"Gerard Way, Gabriel B\u00e1, Dave Stewart, Nate Piekos, Tony Ong"},{"book_id":2798094,"title":"Swallowing Darkness (Merry Gentry, #7)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Laurell K. Hamilton"},{"book_id":2800905,"title":"The Summoning (Darkest Powers, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1478986944m\/2800905.jpg","authors":"Kelley Armstrong"},{"book_id":2802316,"title":"Shadow Kiss (Vampire Academy, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1361099049m\/2802316.jpg","authors":"Richelle Mead"},{"book_id":2804776,"title":"One Fifth Avenue","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Candace Bushnell, Donna Murphy"},{"book_id":2807199,"title":"American Wife","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Curtis Sittenfeld"},{"book_id":2815590,"title":"Serena","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ron Rash"},{"book_id":2815949,"title":"Barefoot Contessa Back to Basics","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ina Garten, Quentin Bacon"},{"book_id":2820533,"title":"Deadly Little Secret (Touch, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1325558484m\/2820533.jpg","authors":"Laurie Faria Stolarz"},{"book_id":2830067,"title":"The Given Day (Coughlin #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dennis Lehane"},{"book_id":2832909,"title":"An Echo in the Bone (Outlander, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1370918297m\/2832909.jpg","authors":"Diana Gabaldon"},{"book_id":2833172,"title":"Scarpetta (Kay Scarpetta, #16)","image_url":"https:\/\/images.gr-assets.com\/books\/1358277265m\/2833172.jpg","authors":"Patricia Cornwell"},{"book_id":2836109,"title":"Erak's Ransom (Ranger's Apprentice, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1327918666m\/2836109.jpg","authors":"John Flanagan"},{"book_id":2845024,"title":"Anathem","image_url":"https:\/\/images.gr-assets.com\/books\/1488349209m\/2845024.jpg","authors":"Neal Stephenson"},{"book_id":2845287,"title":"The Wordy Shipmates","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sarah Vowell"},{"book_id":2854962,"title":"Charlie Bone and the Shadow (The Children of the Red King, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1328843031m\/2854962.jpg","authors":"Jenny Nimmo"},{"book_id":2855034,"title":"Nation","image_url":"https:\/\/images.gr-assets.com\/books\/1426659151m\/2855034.jpg","authors":"Terry Pratchett"},{"book_id":2865944,"title":"If You Give a Cat a Cupcake","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Laura Joffe Numeroff, Felicia Bond"},{"book_id":2866413,"title":"The Dragon Heir (The Heir Chronicles, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1304657191m\/2866413.jpg","authors":"Cinda Williams Chima"},{"book_id":2866718,"title":"Untamed (House of Night, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1438037020m\/2866718.jpg","authors":"P.C. Cast, Kristin Cast"},{"book_id":2880715,"title":"The Black Dagger Brotherhood: An Insider's Guide","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"J.R. Ward"},{"book_id":2890090,"title":"The Republic of Thieves (Gentleman Bastard, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Scott Lynch"},{"book_id":2895896,"title":"Silver Bay","image_url":"https:\/\/images.gr-assets.com\/books\/1415583591m\/2895896.jpg","authors":"Jojo Moyes"},{"book_id":2897258,"title":"The Heretic Queen","image_url":"https:\/\/images.gr-assets.com\/books\/1422755729m\/2897258.jpg","authors":"Michelle Moran"},{"book_id":2903736,"title":"Princeps' Fury (Codex Alera, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1315082776m\/2903736.jpg","authors":"Jim Butcher"},{"book_id":2906039,"title":"Just After Sunset","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Stephen King"},{"book_id":2918374,"title":"The Red Badge of Courage and Selected Short Fiction ","image_url":"https:\/\/images.gr-assets.com\/books\/1328753104m\/2918374.jpg","authors":"Stephen Crane, George Stade, Richard Fusco"},{"book_id":2921082,"title":"The Maze of Bones (The 39 Clues, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1385117877m\/2921082.jpg","authors":"Rick Riordan"},{"book_id":2924318,"title":"Home (Gilead, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1426188598m\/2924318.jpg","authors":"Marilynne Robinson"},{"book_id":2936415,"title":"Where Men Win Glory: The Odyssey of Pat Tillman","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jon Krakauer"},{"book_id":2948832,"title":"Seduce Me at Sunrise (The Hathaways, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1390526497m\/2948832.jpg","authors":"Lisa Kleypas"},{"book_id":2954411,"title":"Living Dead Girl","image_url":"https:\/\/images.gr-assets.com\/books\/1314272108m\/2954411.jpg","authors":"Elizabeth Scott"},{"book_id":2964700,"title":"Mastiff (Beka Cooper, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1302921347m\/2964700.jpg","authors":"Tamora Pierce"},{"book_id":2967316,"title":"The Devil's Punchbowl","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Greg Iles"},{"book_id":2967752,"title":"The Elegance of the Hedgehog","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Muriel Barbery, Alison Anderson"},{"book_id":2977487,"title":"Succubus Dreams (Georgina Kincaid, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1315977451m\/2977487.jpg","authors":"Richelle Mead"},{"book_id":2983489,"title":"Why We Suck: A Feel Good Guide to Staying Fat, Loud, Lazy and Stupid","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Denis Leary"},{"book_id":2983562,"title":"Your Heart Belongs to Me","image_url":"https:\/\/images.gr-assets.com\/books\/1320422724m\/2983562.jpg","authors":"Dean Koontz"},{"book_id":2983654,"title":"Sweetheart (Archie Sheridan & Gretchen Lowell, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1311994924m\/2983654.jpg","authors":"Chelsea Cain"},{"book_id":2985500,"title":"Night World, No. 2 (Night World, #4-6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"L.J. Smith"},{"book_id":2986865,"title":"Eon: Dragoneye Reborn (Eon, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1299076175m\/2986865.jpg","authors":"Alison Goodman"},{"book_id":2992061,"title":"Born of Night (The League, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sherrilyn Kenyon"},{"book_id":2992069,"title":"Dream Warrior (Dream-Hunter #4; Dark-Hunter #17)","image_url":"https:\/\/images.gr-assets.com\/books\/1358132728m\/2992069.jpg","authors":"Sherrilyn Kenyon"},{"book_id":2998814,"title":"The Hollow (The Hollow, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jessica Verday"},{"book_id":2999282,"title":"Dexter By Design (Dexter, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jeff Lindsay"},{"book_id":3002300,"title":"Chains (Seeds of America, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Laurie Halse Anderson"},{"book_id":3009435,"title":"A Mercy","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Toni Morrison"},{"book_id":3015764,"title":"Indignation","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Philip Roth"},{"book_id":3018539,"title":"Death With Interruptions","image_url":"https:\/\/images.gr-assets.com\/books\/1327937800m\/3018539.jpg","authors":"Jos\u00e9 Saramago, Margaret Jull Costa"},{"book_id":3047848,"title":"Heartless (Pretty Little Liars, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1265496817m\/3047848.jpg","authors":"Sara Shepard"},{"book_id":3047849,"title":"Killer (Pretty Little Liars, #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sara Shepard"},{"book_id":3047850,"title":"Wicked (Pretty Little Liars, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sara Shepard"},{"book_id":3047851,"title":"Wanted (Pretty Little Liars, #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1325823986m\/3047851.jpg","authors":"Sara Shepard"},{"book_id":3052106,"title":"The Picture of Dorian Gray: A Graphic Novel","image_url":"https:\/\/images.gr-assets.com\/books\/1328766635m\/3052106.jpg","authors":"Ian Edginton, Oscar Wilde, I.N.J. Culbard"},{"book_id":3054684,"title":"Stargazer (Evernight, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1306376986m\/3054684.jpg","authors":"Claudia Gray"},{"book_id":3063499,"title":"The Lucky One","image_url":"https:\/\/images.gr-assets.com\/books\/1420816338m\/3063499.jpg","authors":"Nicholas Sparks"},{"book_id":3064985,"title":"Wondrous Strange (Wondrous Strange, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327879404m\/3064985.jpg","authors":"Lesley Livingston"},{"book_id":3080212,"title":"Heat Lightning (Virgil Flowers, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Sandford"},{"book_id":3086160,"title":"The Hour I First Believed","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Wally Lamb"},{"book_id":3090282,"title":"A Homemade Life: Stories and Recipes from My Kitchen Table","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Molly Wizenberg"},{"book_id":3090465,"title":"The Twilight Saga (Twilight, #1-4)","image_url":"https:\/\/images.gr-assets.com\/books\/1327930511m\/3090465.jpg","authors":"Stephenie Meyer, Ilyana Kadushin, Matt Walters"},{"book_id":3094593,"title":"The Pagan Stone (Sign of Seven, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nora Roberts"},{"book_id":3097601,"title":"Suicide Notes","image_url":"https:\/\/images.gr-assets.com\/books\/1424990334m\/3097601.jpg","authors":"Michael Thomas Ford"},{"book_id":3099780,"title":"The Initiation \/ The Captive Part I (The Secret Circle, #1-2)","image_url":"https:\/\/images.gr-assets.com\/books\/1341591862m\/3099780.jpg","authors":"L.J. Smith"},{"book_id":3099787,"title":"Night World, No. 1 (Night World, #1-3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"L.J. Smith"},{"book_id":3106441,"title":"Stuff White People Like: A Definitive Guide to the Unique Taste of Millions","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Christian Lander"},{"book_id":3112850,"title":"Lament: The Faerie Queen's Deception (Books of Faerie, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1265410418m\/3112850.jpg","authors":"Maggie Stiefvater"},{"book_id":3115070,"title":"Hostage to Pleasure (Psy-Changeling, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nalini Singh"},{"book_id":3116205,"title":"The Prodigal God: Recovering the Heart of the Christian Faith","image_url":"https:\/\/images.gr-assets.com\/books\/1427212055m\/3116205.jpg","authors":"Timothy J. Keller"},{"book_id":3121162,"title":"Testimony","image_url":"https:\/\/images.gr-assets.com\/books\/1328975356m\/3121162.jpg","authors":"Anita Shreve"},{"book_id":3122173,"title":"One Silent Night (Dark-Hunter #15)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sherrilyn Kenyon"},{"book_id":3124122,"title":"The Charlemagne Pursuit (Cotton Malone, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Steve Berry"},{"book_id":3124249,"title":"A Lion Among Men (The Wicked Years, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1370992593m\/3124249.jpg","authors":"Gregory Maguire, Douglas Smith"},{"book_id":3128411,"title":"Bone Crossed (Mercy Thompson, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1305738183m\/3128411.jpg","authors":"Patricia Briggs"},{"book_id":3130430,"title":"Harry, a History: The True Story of a Boy Wizard, His Fans, and Life Inside the Harry Potter Phenomenon","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Melissa Anelli, J.K. Rowling"},{"book_id":3134981,"title":"The Joker","image_url":"https:\/\/images.gr-assets.com\/books\/1334501983m\/3134981.jpg","authors":"Brian Azzarello, Lee Bermejo"},{"book_id":3147367,"title":"American Lion: Andrew Jackson in the White House","image_url":"https:\/\/images.gr-assets.com\/books\/1320480904m\/3147367.jpg","authors":"Jon Meacham"},{"book_id":3153910,"title":"The Art of Racing in the Rain","image_url":"https:\/\/images.gr-assets.com\/books\/1377206302m\/3153910.jpg","authors":"Garth Stein"},{"book_id":3157876,"title":"Do-It-Yourself Book (Diary of a Wimpy Kid)","image_url":"https:\/\/images.gr-assets.com\/books\/1261505077m\/3157876.jpg","authors":"Jeff Kinney"},{"book_id":3165162,"title":"Percy Jackson and the Olympians (Percy Jackson and the Olympians, #1-3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rick Riordan"},{"book_id":3173125,"title":"Beat the Reaper (Peter Brown #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1316092271m\/3173125.jpg","authors":"Josh Bazell"},{"book_id":3173558,"title":"Maximum Ride, Vol. 1 (Maximum Ride: The Manga, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1299863638m\/3173558.jpg","authors":"James Patterson, NaRae Lee"},{"book_id":3181564,"title":"The Housekeeper and the Professor","image_url":"https:\/\/images.gr-assets.com\/books\/1344313042m\/3181564.jpg","authors":"Y\u014dko Ogawa, Stephen Snyder"},{"book_id":3181953,"title":"The Heretic's Daughter","image_url":"https:\/\/images.gr-assets.com\/books\/1344269239m\/3181953.jpg","authors":"Kathleen Kent"},{"book_id":3188186,"title":"Run for Your Life (Michael Bennett, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Patterson, Michael Ledwidge"},{"book_id":3206011,"title":"Crazy Love: Overwhelmed by a Relentless God","image_url":"https:\/\/images.gr-assets.com\/books\/1328763220m\/3206011.jpg","authors":"Francis Chan, Danae Yankoski, Chris Tomlin"},{"book_id":3213286,"title":"Let It Snow: Three Holiday Romances","image_url":"https:\/\/images.gr-assets.com\/books\/1489409554m\/3213286.jpg","authors":"John Green, Maureen Johnson, Lauren Myracle"},{"book_id":3216451,"title":"The Gate House","image_url":"https:\/\/images.gr-assets.com\/books\/1397190673m\/3216451.jpg","authors":"Nelson DeMille"},{"book_id":3217221,"title":"Locke & Key, Vol. 1: Welcome to Lovecraft","image_url":"https:\/\/images.gr-assets.com\/books\/1377304780m\/3217221.jpg","authors":"Joe Hill, Gabriel Rodr\u00edguez"},{"book_id":3220405,"title":"Ender in Exile (Ender's Saga, #1.2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Orson Scott Card"},{"book_id":3223761,"title":"Every Soul a Star","image_url":"https:\/\/images.gr-assets.com\/books\/1330221785m\/3223761.jpg","authors":"Wendy Mass"},{"book_id":3227063,"title":"The Way of Shadows (Night Angel, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327881551m\/3227063.jpg","authors":"Brent Weeks"},{"book_id":3228917,"title":"Outliers: The Story of Success","image_url":"https:\/\/images.gr-assets.com\/books\/1344266315m\/3228917.jpg","authors":"Malcolm Gladwell"},{"book_id":3236307,"title":"Graceling (Graceling Realm, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1331548394m\/3236307.jpg","authors":"Kristin Cashore"},{"book_id":3238153,"title":"North of Beautiful","image_url":"https:\/\/images.gr-assets.com\/books\/1479868327m\/3238153.jpg","authors":"Justina Chen"},{"book_id":3240483,"title":"Always Looking Up: The Adventures of an Incurable Optimist","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael J. Fox"},{"book_id":3240691,"title":"\u0648\u0627\u062d\u0629 \u0627\u0644\u063a\u0631\u0648\u0628","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"\u0628\u0647\u0627\u0621 \u0637\u0627\u0647\u0631"},{"book_id":3243517,"title":"\u0631\u0623\u064a\u062a \u0631\u0627\u0645 \u0627\u0644\u0644\u0647","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mourid Barghouti, \u0645\u0631\u064a\u062f \u0627\u0644\u0628\u0631\u063a\u0648\u062b\u064a"},{"book_id":3253215,"title":"An Illustrated Life: Drawing Inspiration From The Private Sketchbooks Of Artists, Illustrators And Designers","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Danny Gregory"},{"book_id":3257136,"title":"Dewey: The Small-Town Library Cat Who Touched the World","image_url":"https:\/\/images.gr-assets.com\/books\/1398144610m\/3257136.jpg","authors":"Vicki Myron, Bret Witter"},{"book_id":3268926,"title":"The Christmas Sweater","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Glenn Beck"},{"book_id":3272165,"title":"Bad Science","image_url":"https:\/\/images.gr-assets.com\/books\/1327251503m\/3272165.jpg","authors":"Ben Goldacre"},{"book_id":3276012,"title":"Azincourt","image_url":"https:\/\/images.gr-assets.com\/books\/1327151016m\/3276012.jpg","authors":"Bernard Cornwell"},{"book_id":3276072,"title":"Scat","image_url":"https:\/\/images.gr-assets.com\/books\/1293763551m\/3276072.jpg","authors":"Carl Hiaasen"},{"book_id":3276637,"title":"Bones of the Hills (Conqueror, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Conn Iggulden"},{"book_id":3289281,"title":"When Will There Be Good News? (Jackson Brodie, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kate Atkinson"},{"book_id":3293821,"title":"The Last Straw (Diary of a Wimpy Kid, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1350396036m\/3293821.jpg","authors":"Jeff Kinney"},{"book_id":3295695,"title":"Dragon Actually (Dragon Kin, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1317852862m\/3295695.jpg","authors":"G.A. Aiken"},{"book_id":3301759,"title":"The Murders in the Rue Morgue","image_url":"https:\/\/images.gr-assets.com\/books\/1409105459m\/3301759.jpg","authors":"Edgar Allan Poe"},{"book_id":3313418,"title":"Extreme Measures (Mitch Rapp, #11)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Vince Flynn"},{"book_id":3320520,"title":"The 3 Mistakes of My Life","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Chetan Bhagat"},{"book_id":3331756,"title":"\u0639\u0627\u0626\u062f \u0625\u0644\u0649 \u062d\u064a\u0641\u0627","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"\u063a\u0633\u0627\u0646 \u0643\u0646\u0641\u0627\u0646\u064a"},{"book_id":3334563,"title":"The Inkheart Trilogy: Inkheart, Inkspell, Inkdeath (Inkworld, #1-3)","image_url":"https:\/\/images.gr-assets.com\/books\/1346484626m\/3334563.jpg","authors":"Cornelia Funke"},{"book_id":3338544,"title":"\u0631\u062d\u0644\u062a\u064a \u0645\u0646 \u0627\u0644\u0634\u0643 \u0625\u0644\u0649 \u0627\u0644\u0625\u064a\u0645\u0627\u0646","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"\u0645\u0635\u0637\u0641\u0649 \u0645\u062d\u0645\u0648\u062f"},{"book_id":3342764,"title":"The Magician's Apprentice (Black Magician, #0.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1344264805m\/3342764.jpg","authors":"Trudi Canavan"},{"book_id":3344411,"title":"Every Man Dies Alone","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Hans Fallada, Michael Hofmann, Geoff Wilkes"},{"book_id":3347892,"title":"Envy (Luxe, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1327928712m\/3347892.jpg","authors":"Anna Godbersen"},{"book_id":3359940,"title":"If You're Reading This, It's Too Late (Secret, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1344268358m\/3359940.jpg","authors":"Pseudonymous Bosch, Gilbert Ford"},{"book_id":3367956,"title":"Hotel on the Corner of Bitter and Sweet","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jamie Ford"},{"book_id":3373198,"title":"Veil of Midnight (Midnight Breed, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lara Adrian"},{"book_id":3389671,"title":"Jessica's Guide to Dating on the Dark Side (Jessica, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Beth Fantaskey"},{"book_id":3392089,"title":"The Winter Sea (Slains, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1410915489m\/3392089.jpg","authors":"Susanna Kearsley, Rosalyn Landor"},{"book_id":3393124,"title":"Max (Maximum Ride, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Patterson"},{"book_id":3398625,"title":"The Lost City of Z: A Tale of Deadly Obsession in the Amazon","image_url":"https:\/\/images.gr-assets.com\/books\/1320487318m\/3398625.jpg","authors":"David Grann"},{"book_id":3400816,"title":"Plum Spooky (Stephanie Plum, #14.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1320400804m\/3400816.jpg","authors":"Janet Evanovich"},{"book_id":3407877,"title":"The Forgotten Garden","image_url":"https:\/\/images.gr-assets.com\/books\/1455283767m\/3407877.jpg","authors":"Kate Morton"},{"book_id":3410425,"title":"Divine Justice (Camel Club, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1336266873m\/3410425.jpg","authors":"David Baldacci"},{"book_id":3412815,"title":"Fireproof","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Eric Wilson"},{"book_id":3419808,"title":"The Secret Scripture","image_url":"https:\/\/images.gr-assets.com\/books\/1325714117m\/3419808.jpg","authors":"Sebastian Barry"},{"book_id":3428935,"title":"The Warded Man (Demon Cycle, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1354571949m\/3428935.jpg","authors":"Peter V. Brett"},{"book_id":3432478,"title":"The Forest of Hands and Teeth (The Forest of Hands and Teeth, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1320633297m\/3432478.jpg","authors":"Carrie Ryan"},{"book_id":3437328,"title":"The Temporal Void","image_url":"https:\/\/images.gr-assets.com\/books\/1357349093m\/3437328.jpg","authors":"Peter F. Hamilton"},{"book_id":3438000,"title":"\u062b\u0644\u0627\u062b\u064a\u0629 \u063a\u0631\u0646\u0627\u0637\u0629","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Radwa Ashour, \u0631\u0636\u0648\u0649 \u0639\u0627\u0634\u0648\u0631"},{"book_id":3474186,"title":"Forever Princess (The Princess Diaries, #10)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Meg Cabot"},{"book_id":3475161,"title":"Turn Coat (The Dresden Files, #11)","image_url":"https:\/\/images.gr-assets.com\/books\/1304027128m\/3475161.jpg","authors":"Jim Butcher"},{"book_id":3475268,"title":"White Witch, Black Curse (The Hollows, #7)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kim Harrison"},{"book_id":3479967,"title":"Through Black Spruce","image_url":"https:\/\/images.gr-assets.com\/books\/1480136683m\/3479967.jpg","authors":"Joseph Boyden"},{"book_id":3491072,"title":"\u062d\u0648\u0644 \u0627\u0644\u0639\u0627\u0644\u0645 \u0641\u064a 200 \u064a\u0648\u0645","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"\u0623\u0646\u064a\u0633 \u0645\u0646\u0635\u0648\u0631"},{"book_id":3492020,"title":"Promises in Death (In Death, #28)","image_url":"https:\/\/images.gr-assets.com\/books\/1417318467m\/3492020.jpg","authors":"J.D. Robb"},{"book_id":3503947,"title":"\u064a\u0648\u062a\u0648\u0628\u064a\u0627","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"\u0623\u062d\u0645\u062f \u062e\u0627\u0644\u062f \u062a\u0648\u0641\u064a\u0642"},{"book_id":3522419,"title":"Nemesis (Harry Hole, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1327312660m\/3522419.jpg","authors":"Jo Nesb\u00f8, Don Bartlett"},{"book_id":3545387,"title":"Revenge of the Spellmans (The Spellmans, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lisa Lutz"},{"book_id":3552023,"title":"One False Note (The 39 Clues, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1357211034m\/3552023.jpg","authors":"Gordon Korman"},{"book_id":3554772,"title":"\u0639\u0632\u0627\u0632\u064a\u0644","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"\u064a\u0648\u0633\u0641 \u0632\u064a\u062f\u0627\u0646"},{"book_id":3556419,"title":"Curse the Dawn (Cassandra Palmer, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Karen Chance"},{"book_id":3558003,"title":"Lord of Misrule (The Morganville Vampires, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rachel Caine"},{"book_id":3570231,"title":"At Grave's End (Night Huntress, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1448167943m\/3570231.jpg","authors":"Jeaniene Frost"},{"book_id":3575676,"title":"Night World, No. 3 (Night World, #7-9)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"L.J. Smith"},{"book_id":3585344,"title":"Kiss of a Demon King (Immortals After Dark #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1357612809m\/3585344.jpg","authors":"Kresley Cole"},{"book_id":3591262,"title":"Cutting for Stone","image_url":"https:\/\/images.gr-assets.com\/books\/1327931601m\/3591262.jpg","authors":"Abraham Verghese"},{"book_id":3609760,"title":"Twilight: The Complete Illustrated Movie Companion","image_url":"https:\/\/images.gr-assets.com\/books\/1352539022m\/3609760.jpg","authors":"Mark Cotta Vaz"},{"book_id":3609763,"title":"The Twilight Saga: The Official Illustrated Guide (Twilight, #4.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1344265906m\/3609763.jpg","authors":"Stephenie Meyer"},{"book_id":3613997,"title":"The Associate","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Grisham"},{"book_id":3657138,"title":"Fade (Wake, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1293805966m\/3657138.jpg","authors":"Lisa McMann"},{"book_id":3665811,"title":"The Captive Part II \/ The Power (The Secret Circle, #2-3)","image_url":"https:\/\/images.gr-assets.com\/books\/1341592078m\/3665811.jpg","authors":"L.J. Smith"},{"book_id":3673357,"title":"Very Valentine","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Adriana Trigiani"},{"book_id":3675828,"title":"Long Lost (Myron Bolitar #9)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Harlan Coben"},{"book_id":3678651,"title":"Bad Girls Don't Die (Bad Girls Don't Die, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1344514129m\/3678651.jpg","authors":"Katie Alender"},{"book_id":3684856,"title":"Fool","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Christopher Moore"},{"book_id":3690427,"title":"Among the Mad (Maisie Dobbs, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1422084387m\/3690427.jpg","authors":"Jacqueline Winspear, Orlagh Cassidy"},{"book_id":3692091,"title":"1\/4 \u062c\u0631\u0627\u0645","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Essam Youssef"},{"book_id":3692151,"title":"\u0634\u0643\u0644\u0647\u0627 \u0628\u0627\u0638\u062a","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"\u0639\u0645\u0631 \u0637\u0627\u0647\u0631"},{"book_id":3697927,"title":"Princess of the Midnight Ball (The Princesses of Westfalin Trilogy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1312063284m\/3697927.jpg","authors":"Jessica Day George"},{"book_id":3698601,"title":"Food Matters: A Guide to Conscious Eating with More Than 75 Recipes","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mark Bittman"},{"book_id":3700085,"title":"Marcelo in the Real World","image_url":"https:\/\/images.gr-assets.com\/books\/1328838330m\/3700085.jpg","authors":"Francisco X. Stork"},{"book_id":3710603,"title":"Y: The Last Man - The Deluxe Edition Book One","image_url":"https:\/\/images.gr-assets.com\/books\/1288024278m\/3710603.jpg","authors":"Brian K. Vaughan, Pia Guerra, Jos\u00e9 Marz\u00e1n Jr., Pamela Rambo, Clem Robins, J.G. Jones"},{"book_id":3720975,"title":"Handle with Care","image_url":"https:\/\/images.gr-assets.com\/books\/1316440644m\/3720975.jpg","authors":"Jodi Picoult"},{"book_id":3722183,"title":"A God in Ruins","image_url":"https:\/\/images.gr-assets.com\/books\/1451442002m\/3722183.jpg","authors":"Kate Atkinson"},{"book_id":3754016,"title":"Shadow's Edge (Night Angel, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1327881435m\/3754016.jpg","authors":"Brent Weeks"},{"book_id":3754026,"title":"Beyond the Shadows (Night Angel, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1327881432m\/3754026.jpg","authors":"Brent Weeks"},{"book_id":3777732,"title":"City of Glass (The Mortal Instruments, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1369452339m\/3777732.jpg","authors":"Cassandra Clare"},{"book_id":3798703,"title":"The Spectacular Now","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tim Tharp"},{"book_id":3819326,"title":"Angels' Blood (Guild Hunter, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nalini Singh"},{"book_id":3828382,"title":"Tribes: We Need You to Lead Us","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Seth Godin"},{"book_id":3831279,"title":"\u06a4\u064a\u0631\u062a\u064a\u062c\u0648","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"\u0623\u062d\u0645\u062f \u0645\u0631\u0627\u062f"},{"book_id":3860977,"title":"How We Decide","image_url":"https:\/\/images.gr-assets.com\/books\/1382946716m\/3860977.jpg","authors":"Jonah Lehrer"},{"book_id":3863861,"title":"Just the Sexiest Man Alive","image_url":"https:\/\/images.gr-assets.com\/books\/1342552584m\/3863861.jpg","authors":"Julie James"},{"book_id":3870943,"title":"The Apothecary's Daughter","image_url":"https:\/\/images.gr-assets.com\/books\/1325356997m\/3870943.jpg","authors":"Julie Klassen"},{"book_id":3918010,"title":"Kick-Ass (Kick-Ass, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1343964935m\/3918010.jpg","authors":"Mark Millar, John Romita Jr., Rob Liefeld"},{"book_id":3925836,"title":"Shadows of the Workhouse","image_url":"https:\/\/images.gr-assets.com\/books\/1328216841m\/3925836.jpg","authors":"Jennifer Worth"},{"book_id":3934321,"title":"Nightfall (The Vampire Diaries: The Return, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1347414391m\/3934321.jpg","authors":"L.J. Smith"},{"book_id":3950967,"title":"The Tales of Beedle the Bard","image_url":"https:\/\/images.gr-assets.com\/books\/1373467575m\/3950967.jpg","authors":"J.K. Rowling"},{"book_id":3975186,"title":"True Colors","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kristin Hannah"},{"book_id":3975774,"title":"Evermore (The Immortals, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1362336360m\/3975774.jpg","authors":"Alyson Noel"},{"book_id":3992598,"title":"The Demigod Files (Percy Jackson and the Olympians)","image_url":"https:\/\/images.gr-assets.com\/books\/1293421593m\/3992598.jpg","authors":"Rick Riordan"},{"book_id":3993839,"title":"Patient Zero (Joe Ledger, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jonathan Maberry"},{"book_id":4005310,"title":"Why Evolution Is True","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jerry A. Coyne"},{"book_id":4016515,"title":"Letter to My Daughter","image_url":"https:\/\/images.gr-assets.com\/books\/1320448534m\/4016515.jpg","authors":"Maya Angelou"},{"book_id":4059448,"title":"A. Lincoln","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ronald C. White Jr."},{"book_id":4066312,"title":"Smooth Talking Stranger (Travises, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1388444124m\/4066312.jpg","authors":"Lisa Kleypas"},{"book_id":4070095,"title":"Asterios Polyp","image_url":"https:\/\/images.gr-assets.com\/books\/1327877671m\/4070095.jpg","authors":"David Mazzucchelli"},{"book_id":4070493,"title":"Need (Need, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Carrie Jones"},{"book_id":4071018,"title":"While My Sister Sleeps","image_url":"https:\/\/images.gr-assets.com\/books\/1320495122m\/4071018.jpg","authors":"Barbara Delinsky"},{"book_id":4102763,"title":"Paths of Glory","image_url":"https:\/\/images.gr-assets.com\/books\/1312068627m\/4102763.jpg","authors":"Jeffrey Archer"},{"book_id":4107256,"title":"Frostbitten (Women of the Otherworld, #10)","image_url":"https:\/\/images.gr-assets.com\/books\/1327437513m\/4107256.jpg","authors":"Kelley Armstrong"},{"book_id":4110198,"title":"The 8th Confession (Women's Murder Club, #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1408315092m\/4110198.jpg","authors":"James Patterson, Maxine Paetro"},{"book_id":4134071,"title":"Hunted (House of Night, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1438042897m\/4134071.jpg","authors":"P.C. Cast, Kristin Cast"},{"book_id":4162673,"title":"The Private Patient (Adam Dalgliesh #14)","image_url":"https:\/\/images.gr-assets.com\/books\/1409269308m\/4162673.jpg","authors":"P.D. James"},{"book_id":4201106,"title":"A Rule Against Murder (Chief Inspector Armand Gamache, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Louise Penny"},{"book_id":4212386,"title":"Maryamah Karpov: Mimpi-mimpi Lintang (Tetralogi Laskar Pelangi, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1271605823m\/4212386.jpg","authors":"Andrea Hirata"},{"book_id":4224060,"title":"The Element: How Finding Your Passion Changes Everything","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ken Robinson, Lou Aronica"},{"book_id":4268157,"title":"Perfect Chemistry (Perfect Chemistry, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1439792475m\/4268157.jpg","authors":"Simone Elkeles"},{"book_id":4279056,"title":"The Gift","image_url":"https:\/\/images.gr-assets.com\/books\/1286019892m\/4279056.jpg","authors":"Cecelia Ahern"},{"book_id":4285768,"title":"Tea Time for the Traditionally Built (No. 1 Ladies' Detective Agency, #10)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Alexander McCall Smith"},{"book_id":4313522,"title":"The School of Essential Ingredients","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Erica Bauermeister"},{"book_id":4332082,"title":"The Piano Teacher","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Janice Y.K. Lee"},{"book_id":4345290,"title":"The Crown Conspiracy (The Riyria Revelations, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1313141264m\/4345290.jpg","authors":"Michael J. Sullivan"},{"book_id":4345498,"title":"Magic Strikes (Kate Daniels, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1221738233m\/4345498.jpg","authors":"Ilona Andrews"},{"book_id":4352708,"title":"Bad Moon Rising (Dark-Hunter #18; Were-Hunter #4; Hellchaser #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1361175509m\/4352708.jpg","authors":"Sherrilyn Kenyon"},{"book_id":4374400,"title":"If I Stay (If I Stay, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1347462970m\/4374400.jpg","authors":"Gayle Forman"},{"book_id":4415692,"title":"The Soldiers of Halla (Pendragon, #10)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"D.J. MacHale"},{"book_id":4447622,"title":"Some Girls Bite (Chicagoland Vampires, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Chloe Neill"},{"book_id":4452257,"title":"The Book of Basketball: The NBA According to The Sports Guy","image_url":"https:\/\/images.gr-assets.com\/books\/1320424763m\/4452257.jpg","authors":"Bill Simmons"},{"book_id":4485966,"title":"Talent is Overrated: What Really Separates World-Class Performers from Everybody Else","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Geoff Colvin"},{"book_id":4488657,"title":"\u0631\u0628\u0627\u0639\u064a\u0627\u062a \u0635\u0644\u0627\u062d \u062c\u0627\u0647\u064a\u0646","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"\u0635\u0644\u0627\u062d \u062c\u0627\u0647\u064a\u0646, \u064a\u062d\u064a\u0649 \u062d\u0642\u064a"},{"book_id":4494917,"title":"Gone Tomorrow (Jack Reacher, #13)","image_url":"https:\/\/images.gr-assets.com\/books\/1328395497m\/4494917.jpg","authors":"Lee Child"},{"book_id":4497978,"title":"Desire Unchained (Demonica #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1344268874m\/4497978.jpg","authors":"Larissa Ione"},{"book_id":4499214,"title":"Sapphique (Incarceron, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1327885488m\/4499214.jpg","authors":"Catherine Fisher"},{"book_id":4499669,"title":"The Love Dare","image_url":"https:\/\/images.gr-assets.com\/books\/1328815507m\/4499669.jpg","authors":"Stephen Kendrick, Alex Kendrick"},{"book_id":4502507,"title":"The Last Olympian (Percy Jackson and the Olympians, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1327924597m\/4502507.jpg","authors":"Rick Riordan"},{"book_id":4502877,"title":"Midnight Sun (Twilight, #1.5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Stephenie Meyer"},{"book_id":4505161,"title":"The House on Tradd Street (Tradd Street, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1344586077m\/4505161.jpg","authors":"Karen White"},{"book_id":4527502,"title":"The Scarecrow (Jack McEvoy, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael Connelly"},{"book_id":4566934,"title":"Winter in Tokyo","image_url":"https:\/\/images.gr-assets.com\/books\/1444921235m\/4566934.jpg","authors":"Ilana Tan"},{"book_id":4570679,"title":"Going Too Far","image_url":"https:\/\/images.gr-assets.com\/books\/1276962788m\/4570679.jpg","authors":"Jennifer Echols"},{"book_id":4570768,"title":"Willow","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Julia Hoban"},{"book_id":4588949,"title":"The Sorceress (The Secrets of the Immortal Nicholas Flamel, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael Scott"},{"book_id":4601396,"title":"Pygmy","image_url":"https:\/\/images.gr-assets.com\/books\/1320495043m\/4601396.jpg","authors":"Chuck Palahniuk"},{"book_id":4609710,"title":"Knit Two (Friday Night Knitting Club, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kate Jacobs"},{"book_id":4618728,"title":"Honolulu","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Alan Brennert"},{"book_id":4618898,"title":"Prayers for Sale","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sandra Dallas"},{"book_id":4634266,"title":"NARUTO -\u30ca\u30eb\u30c8- \u5dfb\u30ce\u56db\u5341\u4e09","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Masashi Kishimoto"},{"book_id":4653511,"title":"\u0631\u062c\u0627\u0644 \u0641\u064a \u0627\u0644\u0634\u0645\u0633","image_url":"https:\/\/images.gr-assets.com\/books\/1321707850m\/4653511.jpg","authors":"\u063a\u0633\u0627\u0646 \u0643\u0646\u0641\u0627\u0646\u064a"},{"book_id":4667024,"title":"The Help","image_url":"https:\/\/images.gr-assets.com\/books\/1346100365m\/4667024.jpg","authors":"Kathryn Stockett"},{"book_id":4673605,"title":"Dean Koontz's Frankenstein, Volume 1: Prodigal Son","image_url":"https:\/\/images.gr-assets.com\/books\/1320410883m\/4673605.jpg","authors":"Dean Koontz, Kevin J. Anderson, Chuck Dixon, Brett Booth"},{"book_id":4699575,"title":"Daemon (Daemon, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1432909825m\/4699575.jpg","authors":"Daniel Suarez"},{"book_id":4701550,"title":"Passion Unleashed (Demonica #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1344267582m\/4701550.jpg","authors":"Larissa Ione"},{"book_id":4703427,"title":"Dust of Dreams (The Malazan Book of the Fallen, #9)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Steven Erikson"},{"book_id":4703450,"title":"The Dragon Keeper (Rain Wild Chronicles, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1330079386m\/4703450.jpg","authors":"Robin Hobb"},{"book_id":4703581,"title":"The City & the City","image_url":"https:\/\/images.gr-assets.com\/books\/1320475957m\/4703581.jpg","authors":"China Mi\u00e9ville"},{"book_id":4714126,"title":"The Walking Dead, Vol. 09: Here We Remain","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert Kirkman, Charlie Adlard, Cliff Rathburn"},{"book_id":4758093,"title":"L.A. Candy (L.A. Candy, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lauren Conrad"},{"book_id":4765642,"title":"Stay Hungry Stay Foolish","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rashmi Bansal"},{"book_id":4769247,"title":"Ashes of Midnight (Midnight Breed, #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lara Adrian"},{"book_id":4769651,"title":"The Everafter War (The Sisters Grimm, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1388278230m\/4769651.jpg","authors":"Michael Buckley, Peter Ferguson"},{"book_id":4772110,"title":"Nocturnes: Five Stories of Music and Nightfall","image_url":"https:\/\/images.gr-assets.com\/books\/1320430211m\/4772110.jpg","authors":"Kazuo Ishiguro"},{"book_id":4789801,"title":"Green: The Beginning and the End (The Circle, #0)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ted Dekker"},{"book_id":4800764,"title":"Sweet Persuasion (Sweet, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Maya Banks"},{"book_id":4808763,"title":"The Last Question","image_url":"https:\/\/images.gr-assets.com\/books\/1274107046m\/4808763.jpg","authors":"Isaac Asimov, Bob E. Flick, Jim Gallant"},{"book_id":4835838,"title":"11 Birthdays (Willow Falls, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Wendy Mass"},{"book_id":4836308,"title":"The Physick Book of Deliverance Dane","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Katherine Howe"},{"book_id":4837112,"title":"Percy Jackson and the Sword of Hades (Percy Jackson and the Olympians, #4.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1327349413m\/4837112.jpg","authors":"Rick Riordan"},{"book_id":4893390,"title":"The Faceless Ones (Skulduggery Pleasant, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Derek Landy"},{"book_id":4902793,"title":"Sookie Stackhouse 7-copy Boxed Set (Sookie Stackhouse, #1-7)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Charlaine Harris"},{"book_id":4912857,"title":"The Angel's Game (The Cemetery of Forgotten Books, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Carlos Ruiz Zaf\u00f3n, Lucia Graves"},{"book_id":4922079,"title":"One Second After (After, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1316728333m\/4922079.jpg","authors":"William R. Forstchen"},{"book_id":4924862,"title":"I Will Teach You To Be Rich","image_url":"https:\/\/images.gr-assets.com\/books\/1404581320m\/4924862.jpg","authors":"Ramit Sethi"},{"book_id":4929705,"title":"A Reliable Wife","image_url":"https:\/\/images.gr-assets.com\/books\/1404576577m\/4929705.jpg","authors":"Robert Goolrick"},{"book_id":4932435,"title":"Finnikin of the Rock (Lumatere Chronicles, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1346007613m\/4932435.jpg","authors":"Melina Marchetta"},{"book_id":4935682,"title":"Syren (Septimus Heap, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1327949203m\/4935682.jpg","authors":"Angie Sage"},{"book_id":4936457,"title":"The Time Traveller's Guide to Medieval England: A Handbook for Visitors to the Fourteenth Century","image_url":"https:\/\/images.gr-assets.com\/books\/1328167619m\/4936457.jpg","authors":"Ian Mortimer"},{"book_id":4946005,"title":"Relentless","image_url":"https:\/\/images.gr-assets.com\/books\/1320399029m\/4946005.jpg","authors":"Dean Koontz"},{"book_id":4954833,"title":"Brooklyn","image_url":"https:\/\/images.gr-assets.com\/books\/1489957005m\/4954833.jpg","authors":"Colm T\u00f3ib\u00edn"},{"book_id":4957350,"title":"Tinkers","image_url":"https:\/\/images.gr-assets.com\/books\/1364258693m\/4957350.jpg","authors":"Paul Harding"},{"book_id":4961048,"title":"Wishful Drinking","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Carrie Fisher"},{"book_id":4961959,"title":"The Dresden Files: Storm Front, Volume 1- The Gathering Storm","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jim Butcher, Mark Powers, Ardian Syaf"},{"book_id":5024334,"title":"Too Good to Be True","image_url":"https:\/\/images.gr-assets.com\/books\/1388920769m\/5024334.jpg","authors":"Kristan Higgins"},{"book_id":5031805,"title":"ESV Study Bible","image_url":"https:\/\/images.gr-assets.com\/books\/1410151002m\/5031805.jpg","authors":"Anonymous, Lane T. Dennis, Wayne A. Grudem"},{"book_id":5047880,"title":"Hunger (Gone, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael Grant"},{"book_id":5048174,"title":"2BR02B","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kurt Vonnegut Jr."},{"book_id":5053547,"title":"Trouble in Mudbug (Ghost-in-Law, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jana Deleon"},{"book_id":5056084,"title":"Wings (Wings, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327983077m\/5056084.jpg","authors":"Aprilynne Pike"},{"book_id":5060378,"title":"The Girl Who Played with Fire (Millennium, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1351778881m\/5060378.jpg","authors":"Stieg Larsson, Reg Keeland"},{"book_id":5061675,"title":"A Game of Thrones \/ A Clash of Kings (A Song of Ice and Fire, #1-2)","image_url":"https:\/\/images.gr-assets.com\/books\/1336020650m\/5061675.jpg","authors":"George R.R. Martin"},{"book_id":5082599,"title":"Practice Makes Perfect (Berkley Sensation)","image_url":"https:\/\/images.gr-assets.com\/books\/1342552769m\/5082599.jpg","authors":"Julie James"},{"book_id":5093760,"title":"Pretty in Plaid","image_url":"https:\/\/images.gr-assets.com\/books\/1484147603m\/5093760.jpg","authors":"Jen Lancaster"},{"book_id":5098079,"title":"Lover Avenged (Black Dagger Brotherhood, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1321039998m\/5098079.jpg","authors":"J.R. Ward"},{"book_id":5103512,"title":"Martha Stewart's Cupcakes: 175 Inspired Ideas for Everyone's Favorite Treat","image_url":"https:\/\/images.gr-assets.com\/books\/1320443899m\/5103512.jpg","authors":"Martha Stewart"},{"book_id":5111039,"title":"Royal Blood (Vampire Kisses, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1318011052m\/5111039.jpg","authors":"Ellen Schreiber"},{"book_id":5126859,"title":"The Girl Who Chased the Moon","image_url":"https:\/\/images.gr-assets.com\/books\/1320483463m\/5126859.jpg","authors":"Sarah Addison Allen"},{"book_id":5135798,"title":"Being Nikki (Airhead, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Meg Cabot"},{"book_id":5148720,"title":"Succubus Heat (Georgina Kincaid, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1363643447m\/5148720.jpg","authors":"Richelle Mead"},{"book_id":5152478,"title":"Wintergirls","image_url":"https:\/\/images.gr-assets.com\/books\/1346343878m\/5152478.jpg","authors":"Laurie Halse Anderson"},{"book_id":5152561,"title":"Fragile Eternity (Wicked Lovely, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1327813714m\/5152561.jpg","authors":"Melissa Marr"},{"book_id":5153799,"title":"Father Mine (Black Dagger Brotherhood, #6.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1272994722m\/5153799.jpg","authors":"J.R. Ward"},{"book_id":5161066,"title":"Dead and Gone (Sookie Stackhouse, #9)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Charlaine Harris"},{"book_id":5168517,"title":"Waiting For You","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Susane Colasanti"},{"book_id":5171894,"title":"The Doomsday Key (Sigma Force, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1340970015m\/5171894.jpg","authors":"James Rollins"},{"book_id":5199185,"title":"Fahrenheit 451: The Authorized Adaptation","image_url":"https:\/\/images.gr-assets.com\/books\/1416448162m\/5199185.jpg","authors":"Tim Hamilton, Ray Bradbury"},{"book_id":5201089,"title":"The Kings of Clonmel (Ranger's Apprentice, #8)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Flanagan"},{"book_id":5206937,"title":"A Modest Proposal","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jonathan Swift"},{"book_id":5212771,"title":"Carpe Corpus (The Morganville Vampires, #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rachel Caine"},{"book_id":5215879,"title":"Skin Trade (Anita Blake, Vampire Hunter #17)","image_url":"https:\/\/images.gr-assets.com\/books\/1310494564m\/5215879.jpg","authors":"Laurell K. Hamilton"},{"book_id":5217282,"title":"Secrets of the Dragon Sanctuary (Fablehaven, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Brandon Mull"},{"book_id":5231173,"title":"Twenty Boy Summer","image_url":"https:\/\/images.gr-assets.com\/books\/1342447832m\/5231173.jpg","authors":"Sarah Ockler"},{"book_id":5266667,"title":"A Kiss in Time","image_url":"https:\/\/images.gr-assets.com\/books\/1355870076m\/5266667.jpg","authors":"Alex Flinn"},{"book_id":5267365,"title":"Don't Judge a Girl by Her Cover (Gallagher Girls, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1359827132m\/5267365.jpg","authors":"Ally Carter"},{"book_id":5287473,"title":"Hex Hall (Hex Hall, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1368393885m\/5287473.jpg","authors":"Rachel Hawkins"},{"book_id":5291189,"title":"The Hole in Our Gospel: What does God expect of Us? The Answer that Changed my Life and Might Just Change the World","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Richard Stearns"},{"book_id":5292173,"title":"Relentless (The Lost Fleet, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jack Campbell"},{"book_id":5292853,"title":"Hunting Ground (Alpha & Omega, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1375461295m\/5292853.jpg","authors":"Patricia Briggs"},{"book_id":5295735,"title":"\u0627\u0644\u062d\u0631\u0627\u0641\u064a\u0634","image_url":"https:\/\/images.gr-assets.com\/books\/1347915841m\/5295735.jpg","authors":"Naguib Mahfouz, \u0646\u062c\u064a\u0628 \u0645\u062d\u0641\u0648\u0638"},{"book_id":5303373,"title":"The Chosen One","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Carol Lynch Williams"},{"book_id":5310515,"title":"When You Reach Me","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rebecca Stead"},{"book_id":5355136,"title":"Look Again","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lisa Scottoline"},{"book_id":5356711,"title":"The Winner Stands Alone","image_url":"https:\/\/images.gr-assets.com\/books\/1358266380m\/5356711.jpg","authors":"Paulo Coelho"},{"book_id":5391115,"title":"The Awakening (Darkest Powers, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1478986806m\/5391115.jpg","authors":"Kelley Armstrong"},{"book_id":5396496,"title":"The Slap","image_url":"https:\/\/images.gr-assets.com\/books\/1330062364m\/5396496.jpg","authors":"Christos Tsiolkas"},{"book_id":5422154,"title":"The Neighbor (Detective D.D. Warren, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lisa Gardner"},{"book_id":5489684,"title":"Vampire Kisses: The Beginning (Vampire Kisses, #1-3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ellen Schreiber"},{"book_id":5509321,"title":"First Family (Sean King & Michelle Maxwell, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Baldacci"},{"book_id":5509920,"title":"The Darkest Whisper (Lords of the Underworld #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1351277969m\/5509920.jpg","authors":"Gena Showalter"},{"book_id":5510384,"title":"Tricks (Tricks, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ellen Hopkins"},{"book_id":5551522,"title":"Swimsuit","image_url":"https:\/\/images.gr-assets.com\/books\/1344268075m\/5551522.jpg","authors":"James Patterson, Maxine Paetro"},{"book_id":5556466,"title":"The Last Child","image_url":"https:\/\/images.gr-assets.com\/books\/1312058481m\/5556466.jpg","authors":"John Hart"},{"book_id":5556595,"title":"A Vintage Affair","image_url":"https:\/\/images.gr-assets.com\/books\/1327878847m\/5556595.jpg","authors":"Isabel Wolff"},{"book_id":5557442,"title":"\u0638\u0644 \u0627\u0644\u0623\u0641\u0639\u0649","image_url":"https:\/\/images.gr-assets.com\/books\/1409365252m\/5557442.jpg","authors":"\u064a\u0648\u0633\u0641 \u0632\u064a\u062f\u0627\u0646"},{"book_id":5558786,"title":"Metro 2033 (METRO, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1328809143m\/5558786.jpg","authors":"Dmitry Glukhovsky, M. David Drevs"},{"book_id":5585788,"title":"Skinwalker (Jane Yellowrock, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Faith Hunter"},{"book_id":5587960,"title":"The Thing Around Your Neck","image_url":"https:\/\/images.gr-assets.com\/books\/1320413162m\/5587960.jpg","authors":"Chimamanda Ngozi Adichie"},{"book_id":5598113,"title":"Vision in White (Bride Quartet, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1316972164m\/5598113.jpg","authors":"Nora Roberts"},{"book_id":5599692,"title":"Batman: Whatever Happened to the Caped Crusader?","image_url":"https:\/\/images.gr-assets.com\/books\/1484915793m\/5599692.jpg","authors":"Neil Gaiman, Andy Kubert, Matt Wagner, Simon Bisley, Bernie Mireault, Mark Buckingham"},{"book_id":5600151,"title":"Dog on It (A Chet and Bernie Mystery #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1342376684m\/5600151.jpg","authors":"Spencer Quinn"},{"book_id":5604848,"title":"Destined for an Early Grave (Night Huntress, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1315175949m\/5604848.jpg","authors":"Jeaniene Frost"},{"book_id":5607622,"title":"\u0642\u0645\u0631 \u0639\u0644\u0649 \u0633\u0645\u0631\u0642\u0646\u062f","image_url":"https:\/\/images.gr-assets.com\/books\/1288464594m\/5607622.jpg","authors":"\u0645\u062d\u0645\u062f \u0627\u0644\u0645\u0646\u0633\u064a \u0642\u0646\u062f\u064a\u0644, Mohamed Mansi Qandil"},{"book_id":5618698,"title":"Nice Girls Don't Have Fangs (Jane Jameson, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Molly Harper"},{"book_id":5628753,"title":"Branded by Fire (Psy-Changeling #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1334968711m\/5628753.jpg","authors":"Nalini Singh"},{"book_id":5632446,"title":"Columbine","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dave Cullen"},{"book_id":5664022,"title":"\u062d\u0648\u0627\u0631 \u0645\u0639 \u0635\u062f\u064a\u0642\u064a \u0627\u0644\u0645\u0644\u062d\u062f","image_url":"https:\/\/images.gr-assets.com\/books\/1304370020m\/5664022.jpg","authors":"\u0645\u0635\u0637\u0641\u0649 \u0645\u062d\u0645\u0648\u062f"},{"book_id":5664985,"title":"Along for the Ride","image_url":"https:\/\/images.gr-assets.com\/books\/1479692098m\/5664985.jpg","authors":"Sarah Dessen"},{"book_id":5739373,"title":"The Defector (Gabriel Allon, #9)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Daniel Silva"},{"book_id":5750628,"title":"Johannes Cabal the Necromancer (Johannes Cabal, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jonathan L. Howard"},{"book_id":5764902,"title":"Undone (Will Trent, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Karin Slaughter"},{"book_id":5771014,"title":"The Talent Code: Unlocking the Secret of Skill in Sports, Art, Music, Math, and Just About Everything Else","image_url":"https:\/\/images.gr-assets.com\/books\/1404579448m\/5771014.jpg","authors":"Daniel Coyle, John Farrell"},{"book_id":5776788,"title":"Sandman Slim (Sandman Slim, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1311727590m\/5776788.jpg","authors":"Richard Kadrey"},{"book_id":5821978,"title":"The Summer I Turned Pretty (Summer, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1361666855m\/5821978.jpg","authors":"Jenny Han"},{"book_id":5861926,"title":"The Sword Thief (The 39 Clues, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1357211037m\/5861926.jpg","authors":"Peter Lerangis"},{"book_id":5883777,"title":"The Holy Bible: English Standard Version","image_url":"https:\/\/images.gr-assets.com\/books\/1328227151m\/5883777.jpg","authors":"Anonymous"},{"book_id":5886881,"title":"Dark Places","image_url":"https:\/\/images.gr-assets.com\/books\/1354988288m\/5886881.jpg","authors":"Gillian Flynn"},{"book_id":5899779,"title":"Pride and Prejudice and Zombies (Pride and Prejudice and Zombies, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1320449653m\/5899779.jpg","authors":"Seth Grahame-Smith, Jane Austen"},{"book_id":5933841,"title":"Inherent Vice","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Thomas Pynchon"},{"book_id":5941033,"title":"Let the Great World Spin","image_url":"https:\/\/images.gr-assets.com\/books\/1474988022m\/5941033.jpg","authors":"Colum McCann"},{"book_id":5941079,"title":"The Fixer Upper","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mary Kay Andrews"},{"book_id":5941233,"title":"Thirst No. 1: The Last Vampire, Black Blood, and Red Dice (Thirst, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327887604m\/5941233.jpg","authors":"Christopher Pike"},{"book_id":5943970,"title":"Kindred in Death (In Death, #29)","image_url":"https:\/\/images.gr-assets.com\/books\/1348954491m\/5943970.jpg","authors":"J.D. Robb"},{"book_id":5957702,"title":"206 Bones (Temperance Brennan, #12)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kathy Reichs"},{"book_id":5960325,"title":"Shanghai Girls (Shanghai Girls #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327968416m\/5960325.jpg","authors":"Lisa See"},{"book_id":5971165,"title":"The White Queen (The Plantagenet and Tudor Novels, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Philippa Gregory"},{"book_id":5972040,"title":"Beyond the Grave (The 39 Clues #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1385209619m\/5972040.jpg","authors":"Jude Watson"},{"book_id":5981415,"title":"Summer on Blossom Street (Blossom Street, #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Debbie Macomber"},{"book_id":5981872,"title":"The Madness of Lord Ian Mackenzie (Mackenzies & McBrides, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1322336718m\/5981872.jpg","authors":"Jennifer Ashley"},{"book_id":5983057,"title":"The Swan Thieves","image_url":"https:\/\/images.gr-assets.com\/books\/1256542427m\/5983057.jpg","authors":"Elizabeth Kostova"},{"book_id":5983694,"title":"Where the Mountain Meets the Moon","image_url":"https:\/\/images.gr-assets.com\/books\/1344265026m\/5983694.jpg","authors":"Grace Lin"},{"book_id":5986375,"title":"This Is Water: Some Thoughts, Delivered on a Significant Occasion, about Living a Compassionate Life","image_url":"https:\/\/images.gr-assets.com\/books\/1344270056m\/5986375.jpg","authors":"David Foster Wallace"},{"book_id":5989573,"title":"Scott Pilgrim, Volume 5: Scott Pilgrim Vs. the Universe","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bryan Lee O'Malley"},{"book_id":5996153,"title":"Blood Promise (Vampire Academy, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1442530605m\/5996153.jpg","authors":"Richelle Mead"},{"book_id":5996209,"title":"Thorn Queen (Dark Swan, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1304053865m\/5996209.jpg","authors":"Richelle Mead"},{"book_id":6006518,"title":"Strange Angels (Strange Angels, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1331244487m\/6006518.jpg","authors":"Lili St. Crow, Lilith Saintcrow"},{"book_id":6013511,"title":"Black Hills","image_url":"https:\/\/images.gr-assets.com\/books\/1303019108m\/6013511.jpg","authors":"Nora Roberts"},{"book_id":6021523,"title":"Summer House","image_url":"https:\/\/images.gr-assets.com\/books\/1320412131m\/6021523.jpg","authors":"Nancy Thayer"},{"book_id":6023056,"title":"Act Like a Lady, Think Like a Man: What Men Really Think About Love, Relationships, Intimacy, and Commitment","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Steve Harvey"},{"book_id":6043849,"title":"The Ask and the Answer (Chaos Walking, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1408312960m\/6043849.jpg","authors":"Patrick Ness"},{"book_id":6045456,"title":"The Secret Speech (Leo Demidov, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tom Rob Smith"},{"book_id":6048530,"title":"Finger Lickin' Fifteen (Stephanie Plum, #15)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Janet Evanovich"},{"book_id":6049585,"title":"Abandon","image_url":"https:\/\/images.gr-assets.com\/books\/1316136703m\/6049585.jpg","authors":"Blake Crouch"},{"book_id":6050298,"title":"Dreamfever (Fever, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Karen Marie Moning"},{"book_id":6050678,"title":"Leviathan (Leviathan, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1275694232m\/6050678.jpg","authors":"Scott Westerfeld"},{"book_id":6054190,"title":"Dune Road","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jane Green"},{"book_id":6054449,"title":"Tales from a Not-So-Fabulous Life (Dork Diaries, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1370064528m\/6054449.jpg","authors":"Rachel Ren\u00e9e Russell"},{"book_id":6055063,"title":"The Sweet Life in Paris: Delicious Adventures in the World's Most Glorious - and Perplexing - City","image_url":"https:\/\/images.gr-assets.com\/books\/1320533633m\/6055063.jpg","authors":"David Lebovitz"},{"book_id":6063187,"title":"Twenties Girl","image_url":"https:\/\/images.gr-assets.com\/books\/1320544759m\/6063187.jpg","authors":"Sophie Kinsella"},{"book_id":6065182,"title":"The Little Stranger","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sarah Waters"},{"book_id":6065215,"title":"The Strain (The Strain Trilogy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1326225354m\/6065215.jpg","authors":"Guillermo del Toro, Chuck Hogan"},{"book_id":6066819,"title":"Best Friends Forever","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jennifer Weiner"},{"book_id":6068551,"title":"Shiver (The Wolves of Mercy Falls, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1409283154m\/6068551.jpg","authors":"Maggie Stiefvater"},{"book_id":6070950,"title":"Bed of Roses (Bride Quartet, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1316972420m\/6070950.jpg","authors":"Nora Roberts"},{"book_id":6076387,"title":"A Gate at the Stairs","image_url":"https:\/\/images.gr-assets.com\/books\/1327909646m\/6076387.jpg","authors":"Lorrie Moore"},{"book_id":6076768,"title":"The Apostle (Scot Harvath, #8)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Brad Thor"},{"book_id":6080337,"title":"The Year of the Flood (MaddAddam, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1327906873m\/6080337.jpg","authors":"Margaret Atwood"},{"book_id":6080420,"title":"Commencement ","image_url":"https:\/\/images.gr-assets.com\/books\/1392259807m\/6080420.jpg","authors":"J. Courtney Sullivan"},{"book_id":6080822,"title":"The Castaways","image_url":"https:\/\/images.gr-assets.com\/books\/1289792088m\/6080822.jpg","authors":"Elin Hilderbrand"},{"book_id":6080889,"title":"Storm Glass (Glass, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327899480m\/6080889.jpg","authors":"Maria V. Snyder"},{"book_id":6081685,"title":"Maid-sama! Vol. 01 (Maid-sama!, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Hiro Fujiwara"},{"book_id":6081686,"title":"Maid-sama! Vol. 02 (Maid-sama! #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Hiro Fujiwara"},{"book_id":6087756,"title":"White Cat (Curse Workers, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1358274572m\/6087756.jpg","authors":"Holly Black"},{"book_id":6098691,"title":"Divine Misdemeanors (Merry Gentry, #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1327878336m\/6098691.jpg","authors":"Laurell K. Hamilton"},{"book_id":6101138,"title":"Wolf Hall (Thomas Cromwell, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1336576165m\/6101138.jpg","authors":"Hilary Mantel"},{"book_id":6101718,"title":"The Magicians (The Magicians #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1313772941m\/6101718.jpg","authors":"Lev Grossman"},{"book_id":6104943,"title":"Rumour Has It","image_url":"https:\/\/images.gr-assets.com\/books\/1328202735m\/6104943.jpg","authors":"Jill Mansell"},{"book_id":6114607,"title":"The Midwife: A Memoir of Birth, Joy, and Hard Times","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jennifer Worth"},{"book_id":6115138,"title":"Sworn to Silence (Kate Burkholder, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Linda Castillo"},{"book_id":6117055,"title":"The Greatest Show on Earth: The Evidence for Evolution","image_url":"https:\/\/images.gr-assets.com\/books\/1302127919m\/6117055.jpg","authors":"Richard Dawkins"},{"book_id":6120349,"title":"Locke & Key, Vol. 2: Head Games","image_url":"https:\/\/images.gr-assets.com\/books\/1351338040m\/6120349.jpg","authors":"Joe Hill, Gabriel Rodr\u00edguez"},{"book_id":6122735,"title":"The Night Angel Trilogy (Night Angel, #1-3)","image_url":"https:\/\/images.gr-assets.com\/books\/1450327994m\/6122735.jpg","authors":"Brent Weeks"},{"book_id":6131786,"title":"The Virgin Cure","image_url":"https:\/\/images.gr-assets.com\/books\/1320443329m\/6131786.jpg","authors":"Ami McKay"},{"book_id":6134826,"title":"Blue Moon (The Immortals, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1362336365m\/6134826.jpg","authors":"Alyson Noel"},{"book_id":6135237,"title":"South of Broad","image_url":"https:\/\/images.gr-assets.com\/books\/1320532445m\/6135237.jpg","authors":"Pat Conroy"},{"book_id":6137154,"title":"Fire (Graceling Realm, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1331535456m\/6137154.jpg","authors":"Kristin Cashore"},{"book_id":6145711,"title":"The Walking Dead, Vol. 10: What We Become","image_url":"https:\/\/images.gr-assets.com\/books\/1353969736m\/6145711.jpg","authors":"Robert Kirkman"},{"book_id":6148028,"title":"Catching Fire (The Hunger Games, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1358273780m\/6148028.jpg","authors":"Suzanne Collins"},{"book_id":6150530,"title":"Free: The Future of a Radical Price","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Chris Anderson"},{"book_id":6164358,"title":"The Mysterious Benedict Society and the Prisoner's Dilemma (The Mysterious Benedict Society, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1320473034m\/6164358.jpg","authors":"Trenton Lee Stewart, Del Roy"},{"book_id":6167746,"title":"Marked \/ Betrayed \/ Chosen \/ Untamed (House of Night, #1-4)","image_url":"https:\/\/images.gr-assets.com\/books\/1402947128m\/6167746.jpg","authors":"P.C. Cast, Kristin Cast"},{"book_id":6178065,"title":"Tenth Grade Bleeds (The Chronicles of Vladimir Tod, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Heather Brewer"},{"book_id":6178648,"title":"Nothing to Envy: Ordinary Lives in North Korea","image_url":"https:\/\/images.gr-assets.com\/books\/1320449375m\/6178648.jpg","authors":"Barbara Demick"},{"book_id":6186357,"title":"The Maze Runner (Maze Runner, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1375596592m\/6186357.jpg","authors":"James Dashner"},{"book_id":6193821,"title":"U Is for Undertow (Kinsey Millhone, #21)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sue Grafton"},{"book_id":6193923,"title":"Evil at Heart (Archie Sheridan & Gretchen Lowell, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1328137862m\/6193923.jpg","authors":"Chelsea Cain"},{"book_id":6202318,"title":"A Touch of Dead (Sookie Stackhouse, #4.1, #4.3, #5.1, #7.1, #8.1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Charlaine Harris"},{"book_id":6202342,"title":"Her Fearful Symmetry","image_url":"https:\/\/images.gr-assets.com\/books\/1327939087m\/6202342.jpg","authors":"Audrey Niffenegger"},{"book_id":6202556,"title":"The Evolution of Calpurnia Tate (Calpurnia Tate, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jacqueline Kelly"},{"book_id":6202661,"title":"I Heart New York (I Heart, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1276963692m\/6202661.jpg","authors":"Lindsey Kelk"},{"book_id":6202690,"title":"Twilight Director's Notebook : The Story of How We Made the Movie Based on the Novel by Stephenie Meyer","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Catherine Hardwicke"},{"book_id":6218007,"title":"Kimi ni Todoke: From Me to You, Vol. 1","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Karuho Shiina, Tomo Kimura"},{"book_id":6218281,"title":"The Sweetness at the Bottom of the Pie (Flavia de Luce, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Alan Bradley"},{"book_id":6219656,"title":"The Lottery","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Shirley Jackson"},{"book_id":6224826,"title":"Juliet, Naked","image_url":"https:\/\/images.gr-assets.com\/books\/1480092420m\/6224826.jpg","authors":"Nick Hornby"},{"book_id":6224895,"title":"Silver Blaze (The Memoirs of Sherlock Holmes, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Arthur Conan Doyle"},{"book_id":6224935,"title":"This is Where I Leave You","image_url":"https:\/\/images.gr-assets.com\/books\/1467397162m\/6224935.jpg","authors":"Jonathan Tropper"},{"book_id":6236809,"title":"Black Bird, Vol. 01 (Black Bird, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kanoko Sakurakouji, JN Productions, Pancha Diaz"},{"book_id":6239873,"title":"Splendor (Luxe, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1295983771m\/6239873.jpg","authors":"Anna Godbersen"},{"book_id":6250169,"title":"Unseen Academicals (Discworld, #37; Rincewind #8)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Terry Pratchett"},{"book_id":6251012,"title":"UR","image_url":"https:\/\/images.gr-assets.com\/books\/1295433746m\/6251012.jpg","authors":"Stephen King"},{"book_id":6251222,"title":"Await Your Reply","image_url":"https:\/\/images.gr-assets.com\/books\/1320525555m\/6251222.jpg","authors":"Dan Chaon"},{"book_id":6255144,"title":"The Black Circle (The 39 Clues, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1357211043m\/6255144.jpg","authors":"Patrick Carman"},{"book_id":6255949,"title":"All You Need Is Kill","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Hiroshi Sakurazaka, \u685c\u5742\u6d0b, Alexander O. Smith, Joseph Reeder"},{"book_id":6257535,"title":"New York","image_url":"https:\/\/images.gr-assets.com\/books\/1320467954m\/6257535.jpg","authors":"Edward Rutherfurd"},{"book_id":6260997,"title":"Half the Sky: Turning Oppression into Opportunity for Women Worldwide","image_url":"https:\/\/images.gr-assets.com\/books\/1320486170m\/6260997.jpg","authors":"Nicholas D. Kristof, Sheryl WuDunn"},{"book_id":6261270,"title":"The Noticer: Sometimes, All a Person Needs Is a Little Perspective","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Andy Andrews"},{"book_id":6261477,"title":"Homer's Odyssey","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Gwen Cooper"},{"book_id":6261522,"title":"The Body Finder (The Body Finder, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1358266631m\/6261522.jpg","authors":"Kimberly Derting"},{"book_id":6261961,"title":"Labor Day","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Joyce Maynard"},{"book_id":6262365,"title":"Tempted (House of Night, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1408633041m\/6262365.jpg","authors":"P.C. Cast, Kristin Cast"},{"book_id":6264710,"title":"Tempt Me at Twilight (The Hathaways, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1380326419m\/6264710.jpg","authors":"Lisa Kleypas, Rosalyn Landor"},{"book_id":6266907,"title":"Alex Cross's Trial (Alex Cross, #15)","image_url":"https:\/\/images.gr-assets.com\/books\/1336268218m\/6266907.jpg","authors":"James Patterson, Richard DiLallo"},{"book_id":6267237,"title":"The Van Alen Legacy (Blue Bloods, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1343251719m\/6267237.jpg","authors":"Melissa de la Cruz"},{"book_id":6277410,"title":"The Stonekeeper's Curse (Amulet, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1420153715m\/6277410.jpg","authors":"Kazu Kibuishi"},{"book_id":6280118,"title":"One Day","image_url":"https:\/\/images.gr-assets.com\/books\/1327873020m\/6280118.jpg","authors":"David Nicholls"},{"book_id":6280379,"title":"The Children's Book","image_url":"https:\/\/images.gr-assets.com\/books\/1320548114m\/6280379.jpg","authors":"A.S. Byatt"},{"book_id":6282334,"title":"Strength in What Remains: A Journey of Remembrance and Forgiveness","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tracy Kidder"},{"book_id":6282753,"title":"The Museum of Innocence","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Orhan Pamuk, Maureen Freely"},{"book_id":6287290,"title":"Altar of Eden","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Rollins"},{"book_id":6289283,"title":"Born to Run: A Hidden Tribe, Superathletes, and the Greatest Race the World Has Never Seen","image_url":"https:\/\/images.gr-assets.com\/books\/1320531983m\/6289283.jpg","authors":"Christopher McDougall"},{"book_id":6289920,"title":"Covet (Fallen Angels, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1373165689m\/6289920.jpg","authors":"J.R. Ward"},{"book_id":6289938,"title":"Fade Out (The Morganville Vampires, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1327067249m\/6289938.jpg","authors":"Rachel Caine"},{"book_id":6294549,"title":"Rosemary and Rue (October Daye, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Seanan McGuire"},{"book_id":6294553,"title":"Deep Kiss of Winter (Includes: Immortals After Dark, #8; Alien Huntress, #3.5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kresley Cole, Gena Showalter"},{"book_id":6303704,"title":"Does the Noise in My Head Bother You?","image_url":"https:\/\/images.gr-assets.com\/books\/1400065793m\/6303704.jpg","authors":"Steven Tyler"},{"book_id":6303733,"title":"That Old Cape Magic","image_url":"https:\/\/images.gr-assets.com\/books\/1320442735m\/6303733.jpg","authors":"Richard Russo, Arthur Morey"},{"book_id":6304335,"title":"Beautiful Creatures (Caster Chronicles, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327873282m\/6304335.jpg","authors":"Kami Garcia, Margaret Stohl"},{"book_id":6311614,"title":"The Law of Nines","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Terry Goodkind"},{"book_id":6314763,"title":"Orange Is the New Black","image_url":"https:\/\/images.gr-assets.com\/books\/1320520714m\/6314763.jpg","authors":"Piper Kerman"},{"book_id":6315602,"title":"My Soul to Take (Soul Screamers, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1454287869m\/6315602.jpg","authors":"Rachel Vincent"},{"book_id":6316171,"title":"Hate List","image_url":"https:\/\/images.gr-assets.com\/books\/1479653095m\/6316171.jpg","authors":"Jennifer Brown"},{"book_id":6316821,"title":"First Lord's Fury (Codex Alera, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1327903582m\/6316821.jpg","authors":"Jim Butcher"},{"book_id":6319978,"title":"Friday Night Bites (Chicagoland Vampires, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1304024900m\/6319978.jpg","authors":"Chloe Neill"},{"book_id":6320534,"title":"Under the Dome","image_url":"https:\/\/images.gr-assets.com\/books\/1268982908m\/6320534.jpg","authors":"Stephen King"},{"book_id":6323821,"title":"Last Night in Twisted River","image_url":"https:\/\/images.gr-assets.com\/books\/1399850194m\/6323821.jpg","authors":"John Irving"},{"book_id":6324090,"title":"Alice's Adventures in Wonderland","image_url":"https:\/\/images.gr-assets.com\/books\/1391204048m\/6324090.jpg","authors":"Lewis Carroll, John Tenniel"},{"book_id":6324903,"title":"The 5 Greatest Warriors (Jack West Jr, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Matthew Reilly"},{"book_id":6326920,"title":"The Accidental Billionaires: The Founding of Facebook, a Tale of Sex, Money, Genius and Betrayal","image_url":"https:\/\/images.gr-assets.com\/books\/1320527444m\/6326920.jpg","authors":"Ben Mezrich"},{"book_id":6329547,"title":"On the Edge (The Edge, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1307445575m\/6329547.jpg","authors":"Ilona Andrews"},{"book_id":6330323,"title":"Day After Night","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anita Diamant"},{"book_id":6332526,"title":"Inside of a Dog: What Dogs See, Smell, and Know","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Alexandra Horowitz"},{"book_id":6335026,"title":"The Weight of Silence","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Heather Gudenkauf"},{"book_id":6337006,"title":"Pleasure of a Dark Prince (Immortals After Dark #9)","image_url":"https:\/\/images.gr-assets.com\/books\/1357612049m\/6337006.jpg","authors":"Kresley Cole"},{"book_id":6338619,"title":"After","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Amy Efaw"},{"book_id":6339304,"title":"Pursuit of Honor (Mitch Rapp, #12)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Vince Flynn"},{"book_id":6339664,"title":"Hush, Hush (Hush, Hush, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1358261334m\/6339664.jpg","authors":"Becca Fitzpatrick"},{"book_id":6339989,"title":"Vampire Academy Collection (Vampire Academy, #1-3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Richelle Mead"},{"book_id":6340016,"title":"Lit","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mary Karr"},{"book_id":6340471,"title":"Cleopatra's Daughter","image_url":"https:\/\/images.gr-assets.com\/books\/1449745007m\/6340471.jpg","authors":"Michelle Moran"},{"book_id":6342491,"title":"The Demon King (Seven Realms, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1379482652m\/6342491.jpg","authors":"Cinda Williams Chima"},{"book_id":6344097,"title":"The Stand: Captain Trips","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Roberto Aguirre-Sacasa, Stephen King, Mike Perkins, Laura Martin"},{"book_id":6344423,"title":"Intertwined (Intertwined, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1388656493m\/6344423.jpg","authors":"Gena Showalter"},{"book_id":6344534,"title":"The Second Ship (The Rho Agenda, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Richard Phillips"},{"book_id":6344832,"title":"Grave Secret (Harper Connelly, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Charlaine Harris"},{"book_id":6345193,"title":"Invisible","image_url":"https:\/\/images.gr-assets.com\/books\/1317063578m\/6345193.jpg","authors":"Paul Auster"},{"book_id":6345760,"title":"The Magician's Elephant","image_url":"https:\/\/images.gr-assets.com\/books\/1320520056m\/6345760.jpg","authors":"Kate DiCamillo, Yoko Tanaka"},{"book_id":6346975,"title":"Moonwalking with Einstein: The Art and Science of Remembering Everything","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Joshua Foer"},{"book_id":6348045,"title":"Halt's Peril (Ranger's Apprentice, #9)","image_url":"https:\/\/images.gr-assets.com\/books\/1327902875m\/6348045.jpg","authors":"John Flanagan"},{"book_id":6351910,"title":"Dynasty of Evil (Star Wars: Darth Bane, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Drew Karpyshyn"},{"book_id":6351939,"title":"Sea Glass (Glass, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1327132670m\/6351939.jpg","authors":"Maria V. Snyder"},{"book_id":6356190,"title":"The Little Sisters of Eluria (The Dark Tower, #0.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1328794822m\/6356190.jpg","authors":"Stephen King, Michael Whelan"},{"book_id":6357022,"title":"Club Shadowlands (Masters of the Shadowlands, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1328014540m\/6357022.jpg","authors":"Cherise Sinclair"},{"book_id":6359434,"title":"And Another Thing...","image_url":"https:\/\/images.gr-assets.com\/books\/1327908458m\/6359434.jpg","authors":"Eoin Colfer"},{"book_id":6361871,"title":"The Pioneer Woman Cooks: Recipes from an Accidental Country Girl","image_url":"https:\/\/images.gr-assets.com\/books\/1366775743m\/6361871.jpg","authors":"Ree Drummond"},{"book_id":6365221,"title":"Mennonite in a Little Black Dress: A Memoir of Going Home","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rhoda Janzen"},{"book_id":6366437,"title":"Half Broke Horses","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jeannette Walls"},{"book_id":6368610,"title":"Radiant Shadows (Wicked Lovely, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1258758145m\/6368610.jpg","authors":"Melissa Marr"},{"book_id":6368611,"title":"Darkest Mercy (Wicked Lovely, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1278717537m\/6368611.jpg","authors":"Melissa Marr"},{"book_id":6371117,"title":"Betrayals (Strange Angels, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1331244872m\/6371117.jpg","authors":"Lili St. Crow, Lilith Saintcrow"},{"book_id":6373717,"title":"Hold Still","image_url":"https:\/\/images.gr-assets.com\/books\/1394240099m\/6373717.jpg","authors":"Nina LaCour"},{"book_id":6375845,"title":"Batman: Hush","image_url":"https:\/\/images.gr-assets.com\/books\/1342295000m\/6375845.jpg","authors":"Jeph Loeb, Jim Lee, Scott Williams, Alex Sinclair, Richard Starkings"},{"book_id":6380822,"title":"The Dark Divine (The Dark Divine, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bree Despain"},{"book_id":6381205,"title":"Soulless (Parasol Protectorate, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1314020848m\/6381205.jpg","authors":"Gail Carriger"},{"book_id":6386555,"title":"Eating the Dinosaur","image_url":"https:\/\/images.gr-assets.com\/books\/1327949106m\/6386555.jpg","authors":"Chuck Klosterman"},{"book_id":6387565,"title":"Witch & Wizard (Witch & Wizard, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Patterson, Gabrielle Charbonnet"},{"book_id":6388558,"title":"The Warlord Wants Forever (Immortals After Dark #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1254801341m\/6388558.jpg","authors":"Kresley Cole"},{"book_id":6389257,"title":"The Death of Bunny Munro","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nick Cave"},{"book_id":6389704,"title":"In Too Deep (The 39 Clues, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1357211047m\/6389704.jpg","authors":"Jude Watson"},{"book_id":6390031,"title":"The Improbable Adventures of Sherlock Holmes","image_url":"https:\/\/images.gr-assets.com\/books\/1391343317m\/6390031.jpg","authors":"John Joseph Adams, Robert J. Sawyer, Stephen King, Michael Moorcock, Sharyn McCrumb, Stephen Baxter, Anne Perry, Barbara Hambly, Tanith Lee, Neil Gaiman, Rob Rogers, Naomi Novik, Anthony Burgess, Dominic Green, Laurie R. King, Barbara Roden, Peter Tremayne, Tim Lebbon, Bradley H. Sinor, Edward D. Hoch, Vonda N. McIntyre, Darrell Schweitzer, Mary Robinette Kowal, H.Paul Jeffers, Geoffrey A. Landis, Amy Myers, Tony Pi, Chris Roberson, Mark Valentine"},{"book_id":6393047,"title":"The Viper's Nest (39 Clues, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1357211053m\/6393047.jpg","authors":"Peter Lerangis"},{"book_id":6393082,"title":"Ender's Game, Volume 1: Battle School (Ender's Saga)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Christopher Yost, Orson Scott Card, Pasqual Ferry, Frank D'Armata"},{"book_id":6393631,"title":"Smile","image_url":"https:\/\/images.gr-assets.com\/books\/1438206850m\/6393631.jpg","authors":"Raina Telgemeier"},{"book_id":6393972,"title":"This World We Live In (Last Survivors, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Susan Beth Pfeffer"},{"book_id":6395833,"title":"Guts","image_url":"https:\/\/images.gr-assets.com\/books\/1273235556m\/6395833.jpg","authors":"Chuck Palahniuk"},{"book_id":6398634,"title":"The Happiness Project: Or Why I Spent a Year Trying to Sing in the Morning, Clean My Closets, Fight Right, Read Aristotle, and Generally Have More Fun","image_url":"https:\/\/images.gr-assets.com\/books\/1256849491m\/6398634.jpg","authors":"Gretchen Rubin"},{"book_id":6398972,"title":"Ford County","image_url":"https:\/\/images.gr-assets.com\/books\/1320454906m\/6398972.jpg","authors":"John Grisham"},{"book_id":6400090,"title":"The Last Song","image_url":"https:\/\/images.gr-assets.com\/books\/1286549186m\/6400090.jpg","authors":"Nicholas Sparks"},{"book_id":6402364,"title":"SuperFreakonomics: Global Cooling, Patriotic Prostitutes And Why Suicide Bombers Should Buy Life Insurance","image_url":"https:\/\/images.gr-assets.com\/books\/1308117804m\/6402364.jpg","authors":"Steven D. Levitt, Stephen J. Dubner"},{"book_id":6403690,"title":"Counterfeit Gods: The Empty Promises of Money, Sex, and Power, and the Only Hope that Matters","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Timothy J. Keller"},{"book_id":6404621,"title":"American on Purpose: The Improbable Adventures of an Unlikely Patriot","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Craig Ferguson"},{"book_id":6405929,"title":"I, Alex Cross (Alex Cross, #16)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Patterson"},{"book_id":6406018,"title":"Soul Eater, Vol. 01 (Soul Eater, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1443900841m\/6406018.jpg","authors":"Atsushi Ohkubo"},{"book_id":6407014,"title":"Stitches","image_url":"https:\/\/images.gr-assets.com\/books\/1327728261m\/6407014.jpg","authors":"David Small"},{"book_id":6407514,"title":"Forest Born (The Books of Bayern, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Shannon Hale"},{"book_id":6408862,"title":"Stolen: A Letter to My Captor","image_url":"https:\/\/images.gr-assets.com\/books\/1311064295m\/6408862.jpg","authors":"Lucy Christopher"},{"book_id":6411016,"title":"Matterhorn","image_url":"https:\/\/images.gr-assets.com\/books\/1431983015m\/6411016.jpg","authors":"Karl Marlantes"},{"book_id":6411961,"title":"The Lost Symbol (Robert Langdon, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1358274396m\/6411961.jpg","authors":"Dan Brown"},{"book_id":6413193,"title":"Nine Dragons (Harry Bosch, #15; Mickey Haller, #3; Harry Bosch Universe, #18)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael Connelly"},{"book_id":6419566,"title":"Beast Master, Vol. 1 (Beast Master, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1256593259m\/6419566.jpg","authors":"Kyousuke Motomi"},{"book_id":6419887,"title":"The Boy Who Harnessed the Wind: Creating Currents of Electricity and Hope","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"William Kamkwamba, Bryan Mealer"},{"book_id":6420846,"title":"Lockdown (Escape from Furnace, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1409279086m\/6420846.jpg","authors":"Alexander Gordon Smith"},{"book_id":6421588,"title":"Hourglass (Evernight, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1306377308m\/6421588.jpg","authors":"Claudia Gray"},{"book_id":6422680,"title":"Lunch in Paris: A Love Story, with Recipes","image_url":"https:\/\/images.gr-assets.com\/books\/1344266322m\/6422680.jpg","authors":"Elizabeth Bard"},{"book_id":6424184,"title":"Thirst No. 2: Phantom, Evil Thirst, and Creatures of Forever (Thirst, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1327900390m\/6424184.jpg","authors":"Christopher Pike"},{"book_id":6428887,"title":"Pirate Latitudes","image_url":"https:\/\/images.gr-assets.com\/books\/1332304096m\/6428887.jpg","authors":"Michael Crichton"},{"book_id":6431790,"title":"Fang (Maximum Ride, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1344269411m\/6431790.jpg","authors":"James Patterson"},{"book_id":6433344,"title":"Fools Rush In (Weddings by Bella, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Janice Thompson"},{"book_id":6433752,"title":"The Lacuna","image_url":"https:\/\/images.gr-assets.com\/books\/1480104396m\/6433752.jpg","authors":"Barbara Kingsolver"},{"book_id":6433836,"title":"Rough Country (Virgil Flowers, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Sandford"},{"book_id":6437061,"title":"The Hundred Thousand Kingdoms (Inheritance Trilogy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1303143211m\/6437061.jpg","authors":"N.K. Jemisin"},{"book_id":6441509,"title":"Shadow Souls (The Vampire Diaries: The Return, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1347424332m\/6441509.jpg","authors":"L.J. Smith"},{"book_id":6441654,"title":"Twilight and Philosophy: Vampires, Vegetarians, and the Pursuit of Immortality","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rebecca Housel, J. Jeremy Wisnewski, William Irwin"},{"book_id":6442769,"title":"Paper Towns","image_url":"https:\/\/images.gr-assets.com\/books\/1349013610m\/6442769.jpg","authors":"John Green"},{"book_id":6443349,"title":"Percy Jackson and the Olympians Boxed Set (Percy Jackson and the Olympians, #1-5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rick Riordan, Tk"},{"book_id":6443834,"title":"1Q84 BOOK 1 (1Q84, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1329955413m\/6443834.jpg","authors":"Haruki Murakami, \u6751\u4e0a \u6625\u6a39"},{"book_id":6448470,"title":"Firelight (Firelight, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1269737893m\/6448470.jpg","authors":"Sophie Jordan"},{"book_id":6448482,"title":"Soul Eater, Vol. 02 (Soul Eater, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Atsushi Ohkubo"},{"book_id":6449290,"title":"The Girl Who Fell from the Sky","image_url":"https:\/\/images.gr-assets.com\/books\/1285276805m\/6449290.jpg","authors":"Heidi W. Durrow"},{"book_id":6449422,"title":"1Q84 BOOK 2 (1Q84, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1329955515m\/6449422.jpg","authors":"Haruki Murakami"},{"book_id":6449551,"title":"The Brutal Telling (Chief Inspector Armand Gamache, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1327952311m\/6449551.jpg","authors":"Louise Penny"},{"book_id":6452731,"title":"Justice: What's the Right Thing to Do?","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael J. Sandel"},{"book_id":6452760,"title":"Stones Into Schools: Promoting Peace With Books, Not Bombs, in Afghanistan and Pakistan","image_url":"https:\/\/images.gr-assets.com\/books\/1260845553m\/6452760.jpg","authors":"Greg Mortenson, Khaled Hosseini"},{"book_id":6452796,"title":"Drive: The Surprising Truth About What Motivates Us","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Daniel H. Pink"},{"book_id":6452806,"title":"True Compass: A Memoir","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Edward M. Kennedy"},{"book_id":6455256,"title":"Worst Case (Michael Bennett, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Patterson, Michael Ledwidge"},{"book_id":6457081,"title":"Remarkable Creatures ","image_url":"https:\/\/images.gr-assets.com\/books\/1327161912m\/6457081.jpg","authors":"Tracy Chevalier"},{"book_id":6457229,"title":"The Monstrumologist (The Monstrumologist, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1307409930m\/6457229.jpg","authors":"Rick Yancey"},{"book_id":6460331,"title":"Runaway (Airhead, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1328840338m\/6460331.jpg","authors":"Meg Cabot"},{"book_id":6463967,"title":"The Big Short: Inside the Doomsday Machine","image_url":"https:\/\/images.gr-assets.com\/books\/1453470736m\/6463967.jpg","authors":"Michael Lewis"},{"book_id":6464094,"title":"This Book Is Not Good for You (Secret, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Pseudonymous Bosch, Gilbert Ford"},{"book_id":6464937,"title":"Too Much Happiness","image_url":"https:\/\/images.gr-assets.com\/books\/1320459874m\/6464937.jpg","authors":"Alice Munro"},{"book_id":6465707,"title":"The Walking Dead, Compendium 1","image_url":"https:\/\/images.gr-assets.com\/books\/1449865699m\/6465707.jpg","authors":"Robert Kirkman"},{"book_id":6466909,"title":"New Moon: The Complete Illustrated Movie Companion (The Twilight Saga: The Official Illustrated Movie Companion, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1343724104m\/6466909.jpg","authors":"Mark Cotta Vaz"},{"book_id":6468666,"title":"The Reckoning (Darkest Powers, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1327154591m\/6468666.jpg","authors":"Kelley Armstrong"},{"book_id":6469165,"title":"What Alice Forgot","image_url":"https:\/\/images.gr-assets.com\/books\/1377159022m\/6469165.jpg","authors":"Liane Moriarty"},{"book_id":6471550,"title":"The Unwritten, Vol. 1: Tommy Taylor and the Bogus Identity","image_url":"https:\/\/images.gr-assets.com\/books\/1327887253m\/6471550.jpg","authors":"Mike Carey, Bill Willingham, Peter Gross"},{"book_id":6472246,"title":"Chelsea Chelsea Bang Bang","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Chelsea Handler"},{"book_id":6472451,"title":"Ash","image_url":"https:\/\/images.gr-assets.com\/books\/1286563960m\/6472451.jpg","authors":"Malinda Lo"},{"book_id":6474550,"title":"Crush It!: Why Now Is the Time to Cash In on Your Passion","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Gary Vaynerchuk"},{"book_id":6479259,"title":"Spirit Bound (Vampire Academy, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1291168967m\/6479259.jpg","authors":"Richelle Mead"},{"book_id":6479550,"title":"Magic Bleeds (Kate Daniels, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1407110429m\/6479550.jpg","authors":"Ilona Andrews"},{"book_id":6480781,"title":"Open","image_url":"https:\/\/images.gr-assets.com\/books\/1320520930m\/6480781.jpg","authors":"Andre Agassi, J.R. Moehringer"},{"book_id":6481245,"title":"Shades of Midnight (Midnight Breed, #7)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lara Adrian"},{"book_id":6482837,"title":"Before I Fall","image_url":"https:\/\/images.gr-assets.com\/books\/1361044695m\/6482837.jpg","authors":"Lauren Oliver"},{"book_id":6485421,"title":"The Mortal Instruments Boxed Set: City of Bones; City of Ashes; City of Glass (The Mortal Instruments, #1-3)","image_url":"https:\/\/images.gr-assets.com\/books\/1312016549m\/6485421.jpg","authors":"Cassandra Clare"},{"book_id":6486483,"title":"Emotional Intelligence 2.0","image_url":"https:\/\/images.gr-assets.com\/books\/1328765863m\/6486483.jpg","authors":"Travis Bradberry, Jean Greaves, Patrick Lencioni"},{"book_id":6487308,"title":"Fallen (Fallen, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1440619649m\/6487308.jpg","authors":"Lauren Kate"},{"book_id":6488483,"title":"The Walking Dead, Vol. 11: Fear the Hunters","image_url":"https:\/\/images.gr-assets.com\/books\/1266000285m\/6488483.jpg","authors":"Robert Kirkman, Charlie Adlard, Cliff Rathburn"},{"book_id":6489529,"title":"The Burning Land (The Saxon Stories, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1328489431m\/6489529.jpg","authors":"Bernard Cornwell"},{"book_id":6493208,"title":"The Immortal Life of Henrietta Lacks","image_url":"https:\/\/images.gr-assets.com\/books\/1327878144m\/6493208.jpg","authors":"Rebecca Skloot"},{"book_id":6493321,"title":"Logicomix: An epic search for truth","image_url":"https:\/\/images.gr-assets.com\/books\/1312031956m\/6493321.jpg","authors":"Apostolos Doxiadis, Christos H. Papadimitriou, Alecos Papadatos, Annie Di Donna"},{"book_id":6495359,"title":"The Scarpetta Factor (Kay Scarpetta, #17)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Patricia Cornwell"},{"book_id":6496815,"title":"NurtureShock: New Thinking About Children","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Po Bronson, Ashley Merryman"},{"book_id":6497645,"title":"The Paris Vendetta (Cotton Malone, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1320407237m\/6497645.jpg","authors":"Steve Berry, Scott Brick"},{"book_id":6505109,"title":"Roses","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Leila Meacham"},{"book_id":6506085,"title":"Food Inc.: A Participant Guide: How Industrial Food is Making Us Sicker, Fatter, and Poorer-And What You Can Do About It","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Karl Weber"},{"book_id":6506307,"title":"Blackout (All Clear, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Connie Willis"},{"book_id":6512140,"title":"Going Bovine","image_url":"https:\/\/images.gr-assets.com\/books\/1320391025m\/6512140.jpg","authors":"Libba Bray"},{"book_id":6512154,"title":"Zeitoun","image_url":"https:\/\/images.gr-assets.com\/books\/1296580156m\/6512154.jpg","authors":"Dave Eggers"},{"book_id":6514074,"title":"The Monuments Men: Allied Heroes, Nazi Thieves, and the Greatest Treasure Hunt in History","image_url":"https:\/\/images.gr-assets.com\/books\/1344270659m\/6514074.jpg","authors":"Robert M. Edsel, Bret Witter"},{"book_id":6515834,"title":"Forgotten God: Reversing Our Tragic Neglect of the Holy Spirit","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Francis Chan, Danae Yankoski"},{"book_id":6516450,"title":"What the Dog Saw and Other Adventures","image_url":"https:\/\/images.gr-assets.com\/books\/1344263875m\/6516450.jpg","authors":"Malcolm Gladwell"},{"book_id":6517407,"title":"The Christmas List","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Richard Paul Evans"},{"book_id":6527740,"title":"Last Sacrifice (Vampire Academy, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1319850978m\/6527740.jpg","authors":"Richelle Mead"},{"book_id":6528034,"title":"True Blue","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Baldacci"},{"book_id":6532496,"title":"Not My Daughter","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Barbara Delinsky"},{"book_id":6534132,"title":"The Lion and the Mouse","image_url":"https:\/\/images.gr-assets.com\/books\/1259865825m\/6534132.jpg","authors":"Jerry Pinkney"},{"book_id":6534932,"title":"Official Book Club Selection: A Memoir According to Kathy Griffin","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kathy Griffin"},{"book_id":6538757,"title":"Rock Chick (Rock Chick, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1266750153m\/6538757.jpg","authors":"Kristen Ashley"},{"book_id":6539596,"title":"The Brightest Star in the Sky","image_url":"https:\/\/images.gr-assets.com\/books\/1268685823m\/6539596.jpg","authors":"Marian Keyes"},{"book_id":6542645,"title":"Fantasy in Death (In Death, #30)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"J.D. Robb"},{"book_id":6545536,"title":"The Emperor's Code (The 39 Clues, #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1357211054m\/6545536.jpg","authors":"Gordon Korman"},{"book_id":6547187,"title":"First Drop of Crimson (Night Huntress World, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1255471887m\/6547187.jpg","authors":"Jeaniene Frost"},{"book_id":6547188,"title":"Black Magic Sanction (The Hollows, #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1310918991m\/6547188.jpg","authors":"Kim Harrison"},{"book_id":6553733,"title":"The Mapping of Love and Death (Maisie Dobbs, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1329659691m\/6553733.jpg","authors":"Jacqueline Winspear"},{"book_id":6555517,"title":"The Dead-Tossed Waves (The Forest of Hands and Teeth, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Carrie Ryan"},{"book_id":6559316,"title":"Bite Me (A Love Story, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Christopher Moore"},{"book_id":6562380,"title":"When the Game Was Ours","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Larry Bird, Earvin Johnson, Jackie MacMullan"},{"book_id":6566616,"title":"Crocodile Tears (Alex Rider, #8)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anthony Horowitz"},{"book_id":6566722,"title":"Heat Wave (Nikki Heat, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1257521812m\/6566722.jpg","authors":"Richard Castle"},{"book_id":6567017,"title":"Will Grayson, Will Grayson","image_url":"https:\/\/images.gr-assets.com\/books\/1368393890m\/6567017.jpg","authors":"John Green, David Levithan"},{"book_id":6570502,"title":"Switch: How to Change Things When Change Is Hard","image_url":"https:\/\/images.gr-assets.com\/books\/1422839688m\/6570502.jpg","authors":"Chip Heath, Dan Heath"},{"book_id":6571723,"title":"The Morganville Vampires, Volume 1 (The Morganville Vampires, #1-2)","image_url":"https:\/\/images.gr-assets.com\/books\/1478780633m\/6571723.jpg","authors":"Rachel Caine"},{"book_id":6574102,"title":"Heist Society (Heist Society, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1359254479m\/6574102.jpg","authors":"Ally Carter"},{"book_id":6574542,"title":"The First Rule (Elvis Cole, #13; Joe Pike, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert Crais"},{"book_id":6578293,"title":"Dog Days (Diary of a Wimpy Kid, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jeff Kinney"},{"book_id":6578507,"title":"The Postmistress","image_url":"https:\/\/images.gr-assets.com\/books\/1409169468m\/6578507.jpg","authors":"Sarah Blake, Orlagh Cassidy"},{"book_id":6581511,"title":"Shadowland (The Immortals, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1362336374m\/6581511.jpg","authors":"Alyson Noel"},{"book_id":6582637,"title":"Archangel's Kiss (Guild Hunter, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nalini Singh"},{"book_id":6584134,"title":"Nine Rules to Break When Romancing a Rake (Love By Numbers, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1286649993m\/6584134.jpg","authors":"Sarah MacLean"},{"book_id":6584188,"title":"It's Not Summer Without You (Summer, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1479864019m\/6584188.jpg","authors":"Jenny Han"},{"book_id":6585201,"title":"Changes (The Dresden Files, #12)","image_url":"https:\/\/images.gr-assets.com\/books\/1304027244m\/6585201.jpg","authors":"Jim Butcher"},{"book_id":6587387,"title":"Silver Borne (Mercy Thompson, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1258762890m\/6587387.jpg","authors":"Patricia Briggs"},{"book_id":6587879,"title":"Horns","image_url":"https:\/\/images.gr-assets.com\/books\/1402958805m\/6587879.jpg","authors":"Joe Hill"},{"book_id":6589074,"title":"Elizabeth Street","image_url":"https:\/\/images.gr-assets.com\/books\/1328420628m\/6589074.jpg","authors":"Laurie Fabiano"},{"book_id":6596542,"title":"The Man from Beijing","image_url":"https:\/\/images.gr-assets.com\/books\/1320494101m\/6596542.jpg","authors":"Henning Mankell, Laurie Thompson"},{"book_id":6596547,"title":"Mockingbird","image_url":"https:\/\/images.gr-assets.com\/books\/1301271068m\/6596547.jpg","authors":"Kathryn Erskine"},{"book_id":6597651,"title":"The Windup Girl","image_url":"https:\/\/images.gr-assets.com\/books\/1278940608m\/6597651.jpg","authors":"Paolo Bacigalupi"},{"book_id":6600137,"title":"Captivate (Need, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Carrie Jones"},{"book_id":6600807,"title":"Jealousy (Strange Angels, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1331245539m\/6600807.jpg","authors":"Lili St. Crow, Lilith Saintcrow"},{"book_id":6604209,"title":"Mistborn Trilogy Boxed Set (Mistborn, #1-3)","image_url":"https:\/\/images.gr-assets.com\/books\/1257442247m\/6604209.jpg","authors":"Brandon Sanderson"},{"book_id":6604712,"title":"Eating Animals","image_url":"https:\/\/images.gr-assets.com\/books\/1327877480m\/6604712.jpg","authors":"Jonathan Safran Foer"},{"book_id":6604794,"title":"The Sky Is Everywhere","image_url":"https:\/\/images.gr-assets.com\/books\/1496659743m\/6604794.jpg","authors":"Jandy Nelson"},{"book_id":6604887,"title":"\u0623\u0646\u062a \u0644\u064a","image_url":"https:\/\/images.gr-assets.com\/books\/1247238391m\/6604887.jpg","authors":"\u0645\u0646\u0649 \u0627\u0644\u0645\u0631\u0634\u0648\u062f"},{"book_id":6605625,"title":"The Enemy (The Enemy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1340819657m\/6605625.jpg","authors":"Charlie Higson"},{"book_id":6606456,"title":"The Scent of Rain and Lightning","image_url":"https:\/\/images.gr-assets.com\/books\/1320509039m\/6606456.jpg","authors":"Nancy Pickard"},{"book_id":6606855,"title":"Deadman Wonderland, Volume 1 (Deadman Wonderland, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1446490168m\/6606855.jpg","authors":"Jinsei Kataoka, Kazuma Kondou"},{"book_id":6609490,"title":"Night World: The Ultimate Fan Guide","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Annette Pollert, L.J. Smith"},{"book_id":6609549,"title":"By the Time You Read This, I'll Be Dead","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Julie Anne Peters, C.J. Bott"},{"book_id":6609714,"title":"The Lonely Hearts Club (The Lonely Hearts Club, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1479699351m\/6609714.jpg","authors":"Elizabeth Eulberg"},{"book_id":6609758,"title":"Numbers (Numbers, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1386036562m\/6609758.jpg","authors":"Rachel Ward"},{"book_id":6609764,"title":"One Crazy Summer (Gaither Sisters, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rita Williams-Garcia"},{"book_id":6609765,"title":"Out of My Mind","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sharon M. Draper"},{"book_id":6609864,"title":"Sweet Little Lies (L.A. Candy, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1258145375m\/6609864.jpg","authors":"Lauren Conrad"},{"book_id":6611038,"title":"Spider's Bite (Elemental Assassin, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jennifer Estep"},{"book_id":6612005,"title":"Alice in the Country of Hearts, Vol. 01 (Alice in the Country of Hearts, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"QuinRose, Soumei Hoshino"},{"book_id":6613956,"title":"The Solitude of Prime Numbers","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Paolo Giordano, Shaun Whiteside"},{"book_id":6614886,"title":"\u0632\u063a\u0627\u0632\u064a\u063a","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"\u0623\u062d\u0645\u062f \u062e\u0627\u0644\u062f \u062a\u0648\u0641\u064a\u0642"},{"book_id":6614960,"title":"House Rules","image_url":"https:\/\/images.gr-assets.com\/books\/1290479868m\/6614960.jpg","authors":"Jodi Picoult"},{"book_id":6617185,"title":"Soccernomics: Why England Loses, Why Germany and Brazil Win, and Why the U.S., Japan, Australia, Turkey--and Even Iraq--Are Destined to Become the Kings of the World's Most Popular Sport","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Simon Kuper, Stefan Szymanski"},{"book_id":6617928,"title":"Saving CeeCee Honeycutt","image_url":"https:\/\/images.gr-assets.com\/books\/1348364490m\/6617928.jpg","authors":"Beth Hoffman, Jenna Lamia"},{"book_id":6618272,"title":"The Siren","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kiera Cass"},{"book_id":6619499,"title":"Afterlife (Evernight, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1277385646m\/6619499.jpg","authors":"Claudia Gray"},{"book_id":6621101,"title":"Deception (Alex Delaware, #25)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jonathan Kellerman"},{"book_id":6621143,"title":"Something Like Fate","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Susane Colasanti"},{"book_id":6621287,"title":"com \u0646\u0633\u064a\u0627\u0646","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"\u0623\u062d\u0644\u0627\u0645 \u0645\u0633\u062a\u063a\u0627\u0646\u0645\u064a, Ahlam Mosteghanemi"},{"book_id":6630751,"title":"First to Kill (Nathan McBride, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1356545953m\/6630751.jpg","authors":"Andrew Peterson"},{"book_id":6631792,"title":"The Book of Tomorrow","image_url":"https:\/\/images.gr-assets.com\/books\/1276970678m\/6631792.jpg","authors":"Cecelia Ahern"},{"book_id":6634409,"title":"The Darkest Hour (KGI, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327927870m\/6634409.jpg","authors":"Maya Banks"},{"book_id":6642402,"title":"Something About You (FBI\/US Attorney, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327933063m\/6642402.jpg","authors":"Julie James"},{"book_id":6642715,"title":"The Forty Rules of Love","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Elif Shafak, \u0625\u0644\u064a\u0641 \u0634\u0627\u0641\u0627\u0642, \u0627\u0631\u0633\u0644\u0627\u0646 \u0641\u0635\u06cc\u062d\u06cc, \u0645\u062d\u0645\u062f \u062f\u0631\u0648\u064a\u0634"},{"book_id":6643090,"title":"Major Pettigrew's Last Stand","image_url":"https:\/\/images.gr-assets.com\/books\/1320539020m\/6643090.jpg","authors":"Helen Simonson"},{"book_id":6644117,"title":"The Iron King (The Iron Fey, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327877670m\/6644117.jpg","authors":"Julie Kagawa"},{"book_id":6647312,"title":"Nothing","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Janne Teller, Martin Aitken"},{"book_id":6654104,"title":"Percy Jackson & the Olympians: The Ultimate Guide","image_url":"https:\/\/images.gr-assets.com\/books\/1360574678m\/6654104.jpg","authors":"Mary-Jane Knight, Rick Riordan"},{"book_id":6654313,"title":"Linger (The Wolves of Mercy Falls, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1292482391m\/6654313.jpg","authors":"Maggie Stiefvater"},{"book_id":6659254,"title":"Blood Cross (Jane Yellowrock, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1255066735m\/6659254.jpg","authors":"Faith Hunter"},{"book_id":6660747,"title":"Ecstasy Unveiled (Demonica #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1327876614m\/6660747.jpg","authors":"Larissa Ione"},{"book_id":6662883,"title":"Oz: The Wonderful Wizard of Oz","image_url":"https:\/\/images.gr-assets.com\/books\/1336571208m\/6662883.jpg","authors":"Eric Shanower, Skottie Young, L. Frank Baum"},{"book_id":6665671,"title":"Please Ignore Vera Dietz","image_url":"https:\/\/images.gr-assets.com\/books\/1394240671m\/6665671.jpg","authors":"A.S. King"},{"book_id":6667514,"title":"The Checklist Manifesto: How to Get Things Right","image_url":"https:\/\/images.gr-assets.com\/books\/1312061594m\/6667514.jpg","authors":"Atul Gawande"},{"book_id":6668467,"title":"Winter Garden","image_url":"https:\/\/images.gr-assets.com\/books\/1265932201m\/6668467.jpg","authors":"Kristin Hannah"},{"book_id":6672183,"title":"Batman & Robin: Batman Reborn","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Grant Morrison, Frank Quitely, Philip Tan, Jonathan Glapion, Alex Sinclair"},{"book_id":6674372,"title":"The Murderer's Daughters","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Randy Susan Meyers"},{"book_id":6678884,"title":"Never Look Away","image_url":"https:\/\/images.gr-assets.com\/books\/1320510305m\/6678884.jpg","authors":"Linwood Barclay"},{"book_id":6681333,"title":"Eleventh Grade Burns (The Chronicles of Vladimir Tod, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Heather Brewer"},{"book_id":6681454,"title":"Caught","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Harlan Coben"},{"book_id":6686092,"title":"Lies (Gone, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1257814886m\/6686092.jpg","authors":"Michael Grant"},{"book_id":6686101,"title":"Plague (Gone, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1277829926m\/6686101.jpg","authors":"Michael Grant"},{"book_id":6686671,"title":"Electric Daisy, Vol. 1 (Dengeki Daisy, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kyousuke Motomi"},{"book_id":6687247,"title":"Too Big to Fail: The Inside Story of How Wall Street and Washington Fought to Save the Financial System from Crisis \u2014 and Themselves","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Andrew Ross Sorkin"},{"book_id":6688087,"title":"The Crossing Places (Ruth Galloway, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Elly Griffiths"},{"book_id":6688121,"title":"Negeri 5 Menara (Negeri 5 Menara, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ahmad Fuadi"},{"book_id":6690798,"title":"The Passage (The Passage, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327874267m\/6690798.jpg","authors":"Justin Cronin"},{"book_id":6690979,"title":"Black Butler, Vol. 1 (Black Butler, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1336691148m\/6690979.jpg","authors":"Yana Toboso, Tomo Kimura"},{"book_id":6691426,"title":"Angelology (Angelology, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Danielle Trussoni"},{"book_id":6692041,"title":"Mornings in Jenin","image_url":"https:\/\/images.gr-assets.com\/books\/1312020216m\/6692041.jpg","authors":"Susan Abulhawa"},{"book_id":6693332,"title":"The Necromancer (The Secrets of the Immortal Nicholas Flamel, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1320460606m\/6693332.jpg","authors":"Michael Scott"},{"book_id":6694937,"title":"Game Change: Obama and the Clintons, McCain and Palin, and the Race of a Lifetime","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Heilemann, Mark Halperin"},{"book_id":6696465,"title":"Finally (Willow Falls, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Wendy Mass"},{"book_id":6696602,"title":"Infinity (Chronicles of Nick, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sherrilyn Kenyon"},{"book_id":6697305,"title":"Storm Warning (The 39 Clues, #9)","image_url":"https:\/\/images.gr-assets.com\/books\/1357211087m\/6697305.jpg","authors":"Linda Sue Park"},{"book_id":6713071,"title":"Last Words","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"George Carlin, Tony Hendra"},{"book_id":6718608,"title":"Juliet","image_url":"https:\/\/images.gr-assets.com\/books\/1366399299m\/6718608.jpg","authors":"Anne Fortier"},{"book_id":6723348,"title":"The Fall (The Strain Trilogy, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1327934155m\/6723348.jpg","authors":"Guillermo del Toro, Chuck Hogan"},{"book_id":6726595,"title":"Flirt (Anita Blake, Vampire Hunter #18)","image_url":"https:\/\/images.gr-assets.com\/books\/1310494369m\/6726595.jpg","authors":"Laurell K. Hamilton"},{"book_id":6728738,"title":"Committed: A Skeptic Makes Peace with Marriage","image_url":"https:\/\/images.gr-assets.com\/books\/1472258183m\/6728738.jpg","authors":"Elizabeth Gilbert"},{"book_id":6732019,"title":"Rework","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jason Fried, David Heinemeier Hansson"},{"book_id":6735082,"title":"Bakuman, Band 1: Traum und Realit\u00e4t","image_url":"https:\/\/images.gr-assets.com\/books\/1346333264m\/6735082.jpg","authors":"Tsugumi Ohba, Takeshi Obata, Diana Hammermeister"},{"book_id":6736971,"title":"The Desert Spear (Demon Cycle, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Peter V. Brett"},{"book_id":6746018,"title":"The Distant Hours","image_url":"https:\/\/images.gr-assets.com\/books\/1358273860m\/6746018.jpg","authors":"Kate Morton"},{"book_id":6751356,"title":"Wench","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dolen Perkins-Valdez"},{"book_id":6752378,"title":"City of Fallen Angels (The Mortal Instruments, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1369452302m\/6752378.jpg","authors":"Cassandra Clare"},{"book_id":6758331,"title":"The Darkest Passion (Lords of the Underworld #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1351278057m\/6758331.jpg","authors":"Gena Showalter"},{"book_id":6758423,"title":"Women, Food and God: An Unexpected Path to Almost Everything","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Geneen Roth"},{"book_id":6763961,"title":"My Soul to Save (Soul Screamers, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1255722532m\/6763961.jpg","authors":"Rachel Vincent"},{"book_id":6765740,"title":"Perahu Kertas","image_url":"https:\/\/images.gr-assets.com\/books\/1356225544m\/6765740.jpg","authors":"Dee Lestari"},{"book_id":6777616,"title":"The Weed That Strings the Hangman's Bag (Flavia de Luce, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Alan Bradley"},{"book_id":6780439,"title":"Dark Visions (Dark Visions, #1-3)","image_url":"https:\/\/images.gr-assets.com\/books\/1296605183m\/6780439.jpg","authors":"L.J. Smith"},{"book_id":6781956,"title":"Savor the Moment (Bride Quartet, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1415065163m\/6781956.jpg","authors":"Nora Roberts, Angela Dawe"},{"book_id":6791212,"title":"The Lost Child of Philomena Lee: A Mother, Her Son and a 50 Year Search","image_url":"https:\/\/images.gr-assets.com\/books\/1338612242m\/6791212.jpg","authors":"Martin Sixsmith"},{"book_id":6792458,"title":"The New Jim Crow: Mass Incarceration in the Age of Colorblindness","image_url":"https:\/\/images.gr-assets.com\/books\/1328751532m\/6792458.jpg","authors":"Michelle Alexander"},{"book_id":6801582,"title":"Spells (Wings, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1328316409m\/6801582.jpg","authors":"Aprilynne Pike"},{"book_id":6801614,"title":"One Piece, Volume 38: Rocketman!! (One Piece, #38)","image_url":"https:\/\/images.gr-assets.com\/books\/1397155647m\/6801614.jpg","authors":"Eiichir\u014d Oda"},{"book_id":6801652,"title":"Vampire Knight, Vol. 9","image_url":"https:\/\/images.gr-assets.com\/books\/1329240058m\/6801652.jpg","authors":"Matsuri Hino, Tomo Kimura"},{"book_id":6818019,"title":"I Am Nujood, Age 10 and Divorced","image_url":"https:\/\/images.gr-assets.com\/books\/1320467214m\/6818019.jpg","authors":"Nujood Ali, Delphine Minoui, Linda Coverdale"},{"book_id":6828896,"title":"Delivering Happiness: A Path to Profits, Passion, and Purpose","image_url":"https:\/\/images.gr-assets.com\/books\/1344267716m\/6828896.jpg","authors":"Tony Hsieh"},{"book_id":6834410,"title":"The Imperfectionists","image_url":"https:\/\/images.gr-assets.com\/books\/1327935648m\/6834410.jpg","authors":"Tom Rachman"},{"book_id":6837103,"title":"The Kitchen House","image_url":"https:\/\/images.gr-assets.com\/books\/1463229128m\/6837103.jpg","authors":"Kathleen Grissom"},{"book_id":6839093,"title":"Chew, Vol. 1: Taster's Choice","image_url":"https:\/\/images.gr-assets.com\/books\/1409985990m\/6839093.jpg","authors":"John Layman, Rob Guillory"},{"book_id":6855294,"title":"Tell-All","image_url":"https:\/\/images.gr-assets.com\/books\/1320495064m\/6855294.jpg","authors":"Chuck Palahniuk"},{"book_id":6867952,"title":"Black Butler, Vol. 2 (Black Butler, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1403792460m\/6867952.jpg","authors":"Yana Toboso, Tomo Kimura"},{"book_id":6871616,"title":"Eternal Kiss of Darkness (Night Huntress World, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jeaniene Frost"},{"book_id":6871617,"title":"This Side of the Grave (Night Huntress, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1282659107m\/6871617.jpg","authors":"Jeaniene Frost"},{"book_id":6871646,"title":"Pete the Cat: I Love My White Shoes","image_url":"https:\/\/images.gr-assets.com\/books\/1319030278m\/6871646.jpg","authors":"Eric Litwin, James Dean"},{"book_id":6871737,"title":"Turtle in Paradise","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jennifer L. Holm"},{"book_id":6878614,"title":"Storm Prey (Lucas Davenport, #20)","image_url":"https:\/\/images.gr-assets.com\/books\/1272913373m\/6878614.jpg","authors":"John Sandford"},{"book_id":6891433,"title":"Panserhjerte (Harry Hole, #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1408635770m\/6891433.jpg","authors":"Jo Nesb\u00f8"},{"book_id":6892870,"title":"The Girl Who Kicked the Hornet's Nest (Millennium, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1327708260m\/6892870.jpg","authors":"Stieg Larsson, Reg Keeland"},{"book_id":6905012,"title":"Secret Daughter","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Shilpi Somaya Gowda"},{"book_id":6905534,"title":"Raised by Wolves (Raised by Wolves, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jennifer Lynn Barnes"},{"book_id":6907672,"title":"The Talisman (Volume 1): The Road of Trials","image_url":"https:\/\/images.gr-assets.com\/books\/1320441659m\/6907672.jpg","authors":"Robin Furth, Stephen King, Peter Straub, Tony Shasteen, Nei Ruffino"},{"book_id":6909544,"title":"Birthmarked (Birthmarked, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Caragh M. O'Brien"},{"book_id":6911529,"title":"Batwoman: Elegy","image_url":"https:\/\/images.gr-assets.com\/books\/1492568441m\/6911529.jpg","authors":"Greg Rucka, J.H. Williams III, Rachel Maddow"},{"book_id":6916963,"title":"Succubus Shadows (Georgina Kincaid, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1315977677m\/6916963.jpg","authors":"Richelle Mead"},{"book_id":6917952,"title":"Burned (House of Night, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1327944437m\/6917952.jpg","authors":"P.C. Cast, Kristin Cast"},{"book_id":6918909,"title":"Illusions (Wings, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1324797814m\/6918909.jpg","authors":"Aprilynne Pike"},{"book_id":6919272,"title":"Saphirblau (Edelstein-Trilogie, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1327251290m\/6919272.jpg","authors":"Kerstin Gier"},{"book_id":6922622,"title":"Going Rogue: An American Life","image_url":"https:\/\/images.gr-assets.com\/books\/1380033996m\/6922622.jpg","authors":"Sarah Palin, Lynn Vincent, Dewey Whetsell"},{"book_id":6926176,"title":"Her Mother's Hope (Marta's Legacy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1406510447m\/6926176.jpg","authors":"Francine Rivers"},{"book_id":6928893,"title":"One Good Dog","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Susan Wilson"},{"book_id":6931246,"title":"Kraken","image_url":"https:\/\/images.gr-assets.com\/books\/1320551670m\/6931246.jpg","authors":"China Mi\u00e9ville"},{"book_id":6931356,"title":"The DUFF: Designated Ugly Fat Friend","image_url":"https:\/\/images.gr-assets.com\/books\/1271108843m\/6931356.jpg","authors":"Kody Keplinger"},{"book_id":6933152,"title":"Web of Lies (Elemental Assassin, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1262902266m\/6933152.jpg","authors":"Jennifer Estep"},{"book_id":6933876,"title":"Changeless (Parasol Protectorate, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1292566141m\/6933876.jpg","authors":"Gail Carriger"},{"book_id":6934395,"title":"Midnight (The Vampire Diaries: The Return, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1277829186m\/6934395.jpg","authors":"L.J. Smith"},{"book_id":6936382,"title":"Anna and the French Kiss (Anna and the French Kiss, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1358271931m\/6936382.jpg","authors":"Stephanie Perkins"},{"book_id":6937878,"title":"Love Bites (Vampire Kisses, #7)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ellen Schreiber"},{"book_id":6939939,"title":"The Hand That First Held Mine","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Maggie O'Farrell"},{"book_id":6944032,"title":"Night Pleasures (Dark-Hunter, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sherrilyn Kenyon"},{"book_id":6944566,"title":"The Lonely Polygamist","image_url":"https:\/\/images.gr-assets.com\/books\/1459640976m\/6944566.jpg","authors":"Brady Udall"},{"book_id":6945530,"title":"The Night Eternal (The Strain Trilogy, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1327932900m\/6945530.jpg","authors":"Guillermo del Toro, Chuck Hogan"},{"book_id":6948436,"title":"Little Bee","image_url":"https:\/\/images.gr-assets.com\/books\/1344401905m\/6948436.jpg","authors":"Chris Cleave"},{"book_id":6950688,"title":"Only the Good Spy Young (Gallagher Girls, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ally Carter"},{"book_id":6952423,"title":"I Am Ozzy","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ozzy Osbourne, Chris Ayres"},{"book_id":6953500,"title":"Insatiable (Insatiable, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1479654144m\/6953500.jpg","authors":"Meg Cabot"},{"book_id":6954438,"title":"Sweet Tooth, Volume 1: Out of the Deep Woods","image_url":"https:\/\/images.gr-assets.com\/books\/1406510539m\/6954438.jpg","authors":"Jeff Lemire, Jos\u00e9 Villarrubia, Carlos M. Mangual"},{"book_id":6966823,"title":"The Shallows: What the Internet is Doing to Our Brains","image_url":"https:\/\/images.gr-assets.com\/books\/1368393880m\/6966823.jpg","authors":"Nicholas Carr"},{"book_id":6969361,"title":"2 States: The Story of My Marriage","image_url":"https:\/\/images.gr-assets.com\/books\/1255292027m\/6969361.jpg","authors":"Chetan Bhagat"},{"book_id":6977769,"title":"61 Hours (Jack Reacher, #14)","image_url":"https:\/\/images.gr-assets.com\/books\/1320512665m\/6977769.jpg","authors":"Lee Child"},{"book_id":6987558,"title":"Don't Blink","image_url":"https:\/\/images.gr-assets.com\/books\/1328433484m\/6987558.jpg","authors":"James Patterson, Howard Roughan"},{"book_id":6988014,"title":"Seven Days in the Art World","image_url":"https:\/\/images.gr-assets.com\/books\/1358748500m\/6988014.jpg","authors":"Sarah Thornton"},{"book_id":7005479,"title":"Island Beneath the Sea","image_url":"https:\/\/images.gr-assets.com\/books\/1501991943m\/7005479.jpg","authors":"Isabel Allende, Margaret Sayers Peden"},{"book_id":7005865,"title":"The Atlantis Complex (Artemis Fowl, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1274866326m\/7005865.jpg","authors":"Eoin Colfer"},{"book_id":7006562,"title":"Stephen King's N.","image_url":"https:\/\/images.gr-assets.com\/books\/1492728218m\/7006562.jpg","authors":"Marc Guggenheim, Alex Maleev, Stephen King"},{"book_id":7010683,"title":"Beachcombers","image_url":"https:\/\/images.gr-assets.com\/books\/1320411983m\/7010683.jpg","authors":"Nancy Thayer"},{"book_id":7011225,"title":"Caim","image_url":"https:\/\/images.gr-assets.com\/books\/1408538386m\/7011225.jpg","authors":"Jos\u00e9 Saramago"},{"book_id":7011403,"title":"Dragon Haven (Rain Wild Chronicles, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1263769185m\/7011403.jpg","authors":"Robin Hobb"},{"book_id":7011879,"title":"Of Course I Love You...! Till I Find Someone Better...","image_url":"https:\/\/images.gr-assets.com\/books\/1274597947m\/7011879.jpg","authors":"Durjoy Datta, Maanvi Ahuja"},{"book_id":7015403,"title":"The Gifts of Imperfection: Let Go of Who You Think You're Supposed to Be and Embrace Who You Are","image_url":"https:\/\/images.gr-assets.com\/books\/1369092544m\/7015403.jpg","authors":"Bren\u00e9 Brown"},{"book_id":7015635,"title":"Food Rules: An Eater's Manual","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael Pollan"},{"book_id":7023554,"title":"Sizzling Sixteen (Stephanie Plum, #16)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Janet Evanovich"},{"book_id":7025086,"title":"Ender's Game, Volume 2: Command School","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Christopher Yost, Pasqual Ferry, Orson Scott Card"},{"book_id":7027569,"title":"Heartstone (Matthew Shardlake, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1272182205m\/7027569.jpg","authors":"C.J. Sansom"},{"book_id":7039218,"title":"Once Burned (Night Prince, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1335738276m\/7039218.jpg","authors":"Jeaniene Frost"},{"book_id":7046495,"title":"Lover Mine (Black Dagger Brotherhood, #8)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"J.R. Ward"},{"book_id":7048800,"title":"The Particular Sadness of Lemon Cake","image_url":"https:\/\/images.gr-assets.com\/books\/1320541766m\/7048800.jpg","authors":"Aimee Bender"},{"book_id":7054123,"title":"The Poisoner's Handbook: Murder and the Birth of Forensic Medicine in Jazz Age New York","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Deborah Blum"},{"book_id":7058405,"title":"The Ice Princess (Patrik Hedstr\u00f6m, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Camilla L\u00e4ckberg, Steven T. Murray"},{"book_id":7059135,"title":"Inside Out (Insider, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1335383824m\/7059135.jpg","authors":"Maria V. Snyder"},{"book_id":7060582,"title":"Twice Bitten (Chicagoland Vampires, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Chloe Neill"},{"book_id":7074000,"title":"Happy Ever After (Bride Quartet, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nora Roberts"},{"book_id":7076706,"title":"The Search","image_url":"https:\/\/images.gr-assets.com\/books\/1302725483m\/7076706.jpg","authors":"Nora Roberts"},{"book_id":7078265,"title":"Think Twice (Rosato & Associates, #11)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lisa Scottoline"},{"book_id":7090290,"title":"My Fair Lazy: One Reality Television Addict's Attempt to Discover If Not Being A Dumb Ass Is the New Black, or, a Culture-Up Manifesto","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jen Lancaster"},{"book_id":7090447,"title":"The Red Pyramid (Kane Chronicles, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1366227978m\/7090447.jpg","authors":"Rick Riordan"},{"book_id":7090785,"title":"Dawn of the Dreadfuls (Pride and Prejudice and Zombies, #0.5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Steve Hockensmith, Jane Austen, Patrick Arrasmith"},{"book_id":7091370,"title":"The Carrie Diaries (The Carrie Diaries, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1366214548m\/7091370.jpg","authors":"Candace Bushnell"},{"book_id":7091488,"title":"Dead in the Family (Sookie Stackhouse, #10)","image_url":"https:\/\/images.gr-assets.com\/books\/1290479828m\/7091488.jpg","authors":"Charlaine Harris"},{"book_id":7091713,"title":"Kiss of Death (The Morganville Vampires, #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1270564957m\/7091713.jpg","authors":"Rachel Caine, Cynthia Holloway"},{"book_id":7093222,"title":"Broken (Will Trent, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Karin Slaughter"},{"book_id":7093952,"title":"Faithful Place (Dublin Murder Squad, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1291165900m\/7093952.jpg","authors":"Tana French"},{"book_id":7094569,"title":"Feed (Newsflesh Trilogy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1408500437m\/7094569.jpg","authors":"Mira Grant"},{"book_id":7095831,"title":"Ship Breaker (Ship Breaker, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327874074m\/7095831.jpg","authors":"Paolo Bacigalupi"},{"book_id":7096123,"title":"The Rembrandt Affair (Gabriel Allon, #10)","image_url":"https:\/\/images.gr-assets.com\/books\/1360176576m\/7096123.jpg","authors":"Daniel Silva"},{"book_id":7098304,"title":"Demon from the Dark (Immortals After Dark #10)","image_url":"https:\/\/images.gr-assets.com\/books\/1357611692m\/7098304.jpg","authors":"Kresley Cole"},{"book_id":7099273,"title":"The Other Wes Moore: One Name, Two Fates","image_url":"https:\/\/images.gr-assets.com\/books\/1320554118m\/7099273.jpg","authors":"Wes Moore, Tavis Smiley"},{"book_id":7099389,"title":"The Burning Wire (Lincoln Rhyme, #9)","image_url":"https:\/\/images.gr-assets.com\/books\/1441925165m\/7099389.jpg","authors":"Jeffery Deaver"},{"book_id":7100490,"title":"The Forbidden Game (The Forbidden Game, #1-3)","image_url":"https:\/\/images.gr-assets.com\/books\/1405784030m\/7100490.jpg","authors":"L.J. Smith"},{"book_id":7108001,"title":"Abraham Lincoln: Vampire Hunter","image_url":"https:\/\/images.gr-assets.com\/books\/1291165397m\/7108001.jpg","authors":"Seth Grahame-Smith"},{"book_id":7108725,"title":"Start with Why: How Great Leaders Inspire Everyone to Take Action","image_url":"https:\/\/images.gr-assets.com\/books\/1360936414m\/7108725.jpg","authors":"Simon Sinek"},{"book_id":7114761,"title":"Heart of the Matter","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Emily Giffin"},{"book_id":7116709,"title":"The Left Hand of God (The Left Hand of God, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1257742712m\/7116709.jpg","authors":"Paul Hoffman"},{"book_id":7119070,"title":"\u0623\u062d\u0628\u0628\u062a\u0643 \u0623\u0643\u062b\u0631 \u0645\u0645\u0627 \u064a\u0646\u0628\u063a\u064a","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"\u0623\u062b\u064a\u0631 \u0639\u0628\u062f\u0627\u0644\u0644\u0647 \u0627\u0644\u0646\u0634\u0645\u064a"},{"book_id":7121598,"title":"Bullet (Anita Blake, Vampire Hunter #19)","image_url":"https:\/\/images.gr-assets.com\/books\/1292915430m\/7121598.jpg","authors":"Laurell K. Hamilton"},{"book_id":7122034,"title":"Fever Dream (Pendergast, #10)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Douglas Preston, Lincoln Child"},{"book_id":7124095,"title":"Gone (Wake, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1269866682m\/7124095.jpg","authors":"Lisa McMann"},{"book_id":7124101,"title":"The Fallen and Leviathan (The Fallen, #1-2)","image_url":"https:\/\/images.gr-assets.com\/books\/1282266008m\/7124101.jpg","authors":"Thomas E. Sniegoski"},{"book_id":7124475,"title":"Endless Summer (The Boys Next Door, #1-2)","image_url":"https:\/\/images.gr-assets.com\/books\/1276962830m\/7124475.jpg","authors":"Jennifer Echols"},{"book_id":7128341,"title":"The Prince of Mist (Niebla, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1261604683m\/7128341.jpg","authors":"Carlos Ruiz Zaf\u00f3n, Lucia Graves"},{"book_id":7129588,"title":"Forget You","image_url":"https:\/\/images.gr-assets.com\/books\/1311064362m\/7129588.jpg","authors":"Jennifer Echols"},{"book_id":7129598,"title":"Nevermore (Nevermore, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1294381693m\/7129598.jpg","authors":"Kelly Creagh"},{"book_id":7130616,"title":"Bayou Moon (The Edge, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1307445460m\/7130616.jpg","authors":"Ilona Andrews"},{"book_id":7132363,"title":"Freedom\u2122 (Daemon, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Daniel Suarez"},{"book_id":7134201,"title":"The Postcard Killers","image_url":"https:\/\/images.gr-assets.com\/books\/1344271030m\/7134201.jpg","authors":"James Patterson, Liza Marklund"},{"book_id":7134202,"title":"Private (Private, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Patterson, Maxine Paetro"},{"book_id":7135858,"title":"My Name Is Memory","image_url":"https:\/\/images.gr-assets.com\/books\/1307512606m\/7135858.jpg","authors":"Ann Brashares"},{"book_id":7137327,"title":"Enclave (Razorland, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327877657m\/7137327.jpg","authors":"Ann Aguirre"},{"book_id":7137775,"title":"Rules of Attraction (Perfect Chemistry, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1439792205m\/7137775.jpg","authors":"Simone Elkeles"},{"book_id":7140220,"title":"Twilight and History","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nancy Reagin"},{"book_id":7140754,"title":"Solar","image_url":"https:\/\/images.gr-assets.com\/books\/1320510358m\/7140754.jpg","authors":"Ian McEwan"},{"book_id":7141642,"title":"The Thousand Autumns of Jacob de Zoet","image_url":"https:\/\/images.gr-assets.com\/books\/1320540908m\/7141642.jpg","authors":"David Mitchell"},{"book_id":7144426,"title":"The Bourne Objective (Jason Bourne, #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1344269869m\/7144426.jpg","authors":"Eric Van Lustbader, Robert Ludlum"},{"book_id":7145565,"title":"Flaskepost fra P (Afdeling Q, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jussi Adler-Olsen"},{"book_id":7146335,"title":"Skippy Dies","image_url":"https:\/\/images.gr-assets.com\/books\/1301970939m\/7146335.jpg","authors":"Paul Murray"},{"book_id":7147831,"title":"Min kamp 1 (Min kamp #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1262695721m\/7147831.jpg","authors":"Karl Ove Knausg\u00e5rd"},{"book_id":7148256,"title":"The Red Queen (The Plantagenet and Tudor Novels, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1281335912m\/7148256.jpg","authors":"Philippa Gregory"},{"book_id":7148931,"title":"The 4-Hour Body: An Uncommon Guide to Rapid Fat-Loss, Incredible Sex, and Becoming Superhuman","image_url":"https:\/\/images.gr-assets.com\/books\/1351861578m\/7148931.jpg","authors":"Timothy Ferriss"},{"book_id":7150174,"title":"The Strange Case of Origami Yoda (Origami Yoda, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tom Angleberger"},{"book_id":7150178,"title":"Big Nate: In a Class by Himself (Big Nate Novels, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lincoln Peirce"},{"book_id":7155145,"title":"Linchpin: Are You Indispensable?","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Seth Godin"},{"book_id":7156505,"title":"The 9th Judgment (Women's Murder Club, #9)","image_url":"https:\/\/images.gr-assets.com\/books\/1336275493m\/7156505.jpg","authors":"James Patterson, Maxine Paetro"},{"book_id":7157310,"title":"Rot & Ruin (Rot & Ruin, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1264898635m\/7157310.jpg","authors":"Jonathan Maberry"},{"book_id":7159016,"title":"The Haunted (The Hollow, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jessica Verday"},{"book_id":7159515,"title":"Still Missing","image_url":"https:\/\/images.gr-assets.com\/books\/1260468195m\/7159515.jpg","authors":"Chevy Stevens"},{"book_id":7164343,"title":"The Lion (John Corey, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1259186800m\/7164343.jpg","authors":"Nelson DeMille"},{"book_id":7165300,"title":"The Black Prism (Lightbringer, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327921884m\/7165300.jpg","authors":"Brent Weeks"},{"book_id":7165405,"title":"The Ambassador's Mission (Traitor Spy Trilogy, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Trudi Canavan"},{"book_id":7170627,"title":"The Emperor of All Maladies: A Biography of Cancer","image_url":"https:\/\/images.gr-assets.com\/books\/1280771091m\/7170627.jpg","authors":"Siddhartha Mukherjee"},{"book_id":7171637,"title":"Clockwork Angel (The Infernal Devices, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1454962884m\/7171637.jpg","authors":"Cassandra Clare"},{"book_id":7171856,"title":"The Puppet Masters","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert A. Heinlein"},{"book_id":7171876,"title":"Fallout (Crank, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ellen Hopkins"},{"book_id":7176578,"title":"Beatrice and Virgil","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Yann Martel"},{"book_id":7180727,"title":"Live to Tell (Detective D.D. Warren, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lisa Gardner"},{"book_id":7182899,"title":"Into the Gauntlet (The 39 Clues, #10)","image_url":"https:\/\/images.gr-assets.com\/books\/1357211070m\/7182899.jpg","authors":"Margaret Peterson Haddix"},{"book_id":7187395,"title":"The Walk (The Walk, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1263465492m\/7187395.jpg","authors":"Richard Paul Evans"},{"book_id":7189177,"title":"Spider Bones (Temperance Brennan, #13)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kathy Reichs"},{"book_id":7198269,"title":"Married By Morning (The Hathaways, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1380326600m\/7198269.jpg","authors":"Lisa Kleypas"},{"book_id":7198988,"title":"Dark Flame (The Immortals, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1362336376m\/7198988.jpg","authors":"Alyson Noel"},{"book_id":7199667,"title":"Princess of Glass (The Princesses of Westfalin Trilogy, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1397878579m\/7199667.jpg","authors":"Jessica Day George"},{"book_id":7200351,"title":"No Mercy (Dark-Hunter #18, Were-Hunter, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sherrilyn Kenyon"},{"book_id":7201913,"title":"Angel (Maximum Ride, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1272836170m\/7201913.jpg","authors":"James Patterson"},{"book_id":7202825,"title":"Unleashed (Ross Siblings, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1384805371m\/7202825.jpg","authors":"Cherrie Lynn"},{"book_id":7202829,"title":"The Devil Colony (Sigma Force, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1264522557m\/7202829.jpg","authors":"James Rollins"},{"book_id":7202831,"title":"Ice Cold (Rizzoli & Isles, #8)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tess Gerritsen"},{"book_id":7202841,"title":"Locke & Key, Vol. 3: Crown of Shadows","image_url":"https:\/\/images.gr-assets.com\/books\/1377306494m\/7202841.jpg","authors":"Joe Hill, Gabriel Rodr\u00edguez"},{"book_id":7203669,"title":"Galveston","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nic Pizzolatto"},{"book_id":7203690,"title":"Chasing Perfect (Fool's Gold, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1278170007m\/7203690.jpg","authors":"Susan Mallery"},{"book_id":7227174,"title":"Fly Away Home","image_url":"https:\/\/images.gr-assets.com\/books\/1267210300m\/7227174.jpg","authors":"Jennifer Weiner"},{"book_id":7234828,"title":"Glimmerglass (Faeriewalker, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1408500427m\/7234828.jpg","authors":"Jenna Black"},{"book_id":7235533,"title":"The Way of Kings (The Stormlight Archive, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1388184640m\/7235533.jpg","authors":"Brandon Sanderson"},{"book_id":7237456,"title":"Packing for Mars: The Curious Science of Life in the Void","image_url":"https:\/\/images.gr-assets.com\/books\/1290480157m\/7237456.jpg","authors":"Mary Roach"},{"book_id":7243142,"title":"Keys to the Demon Prison (Fablehaven, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1298081448m\/7243142.jpg","authors":"Brandon Mull"},{"book_id":7247854,"title":"The Disappearing Spoon: And Other True Tales of Madness, Love, and the History of the World from the Periodic Table of the Elements","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sam Kean"},{"book_id":7257982,"title":"Innocent (Kindle County Legal Thriller, #8)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Scott Turow"},{"book_id":7260188,"title":"Mockingjay (The Hunger Games, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1358275419m\/7260188.jpg","authors":"Suzanne Collins"},{"book_id":7261549,"title":"Dark Days (Skulduggery Pleasant, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Derek Landy"},{"book_id":7262166,"title":"Tough Customer (Mitchell & Associates #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1276625766m\/7262166.jpg","authors":"Sandra Brown"},{"book_id":7263429,"title":"Wolfsbane (Nightshade #2; Nightshade World #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1323140262m\/7263429.jpg","authors":"Andrea Cremer"},{"book_id":7264206,"title":"This Body of Death (Inspector Lynley, #16)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Elizabeth George"},{"book_id":7268995,"title":"A Sick Day for Amos McGee","image_url":"https:\/\/images.gr-assets.com\/books\/1312019421m\/7268995.jpg","authors":"Philip C. Stead, Erin E. Stead"},{"book_id":7274337,"title":"The Invisible Bridge","image_url":"https:\/\/images.gr-assets.com\/books\/1274139506m\/7274337.jpg","authors":"Julie Orringer, Arthur Morey"},{"book_id":7277715,"title":"Deliver Us from Evil (A. Shaw, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Baldacci"},{"book_id":7278837,"title":"Diary of a Wimpy Kid: #1-4","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jeff Kinney"},{"book_id":7285498,"title":"Angelfire (Angelfire, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1294531919m\/7285498.jpg","authors":"Courtney Allison Moulton"},{"book_id":7290826,"title":"Promises to Keep","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jane Green"},{"book_id":7296271,"title":"Beyond Exile (Day by Day Armageddon,# 2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"J.L. Bourne"},{"book_id":7304203,"title":"Shadowfever (Fever, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Karen Marie Moning"},{"book_id":7307503,"title":"Archangel's Consort (Guild Hunter, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nalini Singh"},{"book_id":7307795,"title":"Started Early, Took My Dog (Jackson Brodie, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1273446011m\/7307795.jpg","authors":"Kate Atkinson"},{"book_id":7313444,"title":"Foreign Influence (Scot Harvath, #9)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Brad Thor"},{"book_id":7315573,"title":"Fall of Giants (The Century Trilogy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1470384630m\/7315573.jpg","authors":"Ken Follett"},{"book_id":7324659,"title":"Medium Raw: A Bloody Valentine to the World of Food and the People Who Cook","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Anthony Bourdain"},{"book_id":7331435,"title":"A Visit from the Goon Squad","image_url":"https:\/\/images.gr-assets.com\/books\/1356844046m\/7331435.jpg","authors":"Jennifer Egan"},{"book_id":7332753,"title":"Hitch-22: A Memoir","image_url":"https:\/\/images.gr-assets.com\/books\/1327906136m\/7332753.jpg","authors":"Christopher Hitchens"},{"book_id":7334201,"title":"Super Sad True Love Story","image_url":"https:\/\/images.gr-assets.com\/books\/1320540909m\/7334201.jpg","authors":"Gary Shteyngart"},{"book_id":7347109,"title":"The Hundred-Foot Journey","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Richard C. Morais"},{"book_id":7351574,"title":"Eclipse: The Complete Illustrated Movie Companion (The Twilight Saga: The Official Illustrated Movie Companion, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mark Cotta Vaz"},{"book_id":7352053,"title":"My Name is Mary Sutter","image_url":"https:\/\/images.gr-assets.com\/books\/1263584183m\/7352053.jpg","authors":"Robin Oliveira"},{"book_id":7352220,"title":"Black Butler, Vol. 3 (Black Butler, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Yana Toboso"},{"book_id":7355137,"title":"Darke (Septimus Heap, #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Angie Sage, Mark Zug"},{"book_id":7362158,"title":"Girl in Translation","image_url":"https:\/\/images.gr-assets.com\/books\/1347022887m\/7362158.jpg","authors":"Jean Kwok"},{"book_id":7384801,"title":"Taken by Midnight (Midnight Breed, #8)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lara Adrian"},{"book_id":7402393,"title":"Nightshade (Nightshade #1; Nightshade World #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1333400218m\/7402393.jpg","authors":"Andrea Cremer"},{"book_id":7405450,"title":"Rock Chick Rescue (Rock Chick, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1416398897m\/7405450.jpg","authors":"Kristen Ashley"},{"book_id":7415016,"title":"Mini Shopaholic (Shopaholic, #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sophie Kinsella"},{"book_id":7438179,"title":"The Evolutionary Void","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Peter F. Hamilton"},{"book_id":7468160,"title":"Every Last One","image_url":"https:\/\/images.gr-assets.com\/books\/1320560129m\/7468160.jpg","authors":"Anna Quindlen"},{"book_id":7469133,"title":"Dexter Is Delicious (Dexter, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jeff Lindsay"},{"book_id":7469664,"title":"The Walking Dead, Vol. 12: Life Among Them","image_url":"https:\/\/images.gr-assets.com\/books\/1279748761m\/7469664.jpg","authors":"Robert Kirkman, Charlie Adlard"},{"book_id":7476122,"title":"My Soul to Keep (Soul Screamers, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1268059270m\/7476122.jpg","authors":"Rachel Vincent"},{"book_id":7488244,"title":"Unearthly (Unearthly, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1324782984m\/7488244.jpg","authors":"Cynthia Hand"},{"book_id":7491418,"title":"Love in the Afternoon (The Hathaways, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lisa Kleypas"},{"book_id":7494887,"title":"The Pacific","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Hugh Ambrose"},{"book_id":7497897,"title":"Radical: Taking Back Your Faith from the American Dream","image_url":"https:\/\/images.gr-assets.com\/books\/1333580811m\/7497897.jpg","authors":"David Platt"},{"book_id":7501962,"title":"Bonhoeffer: Pastor, Martyr, Prophet, Spy","image_url":"https:\/\/images.gr-assets.com\/books\/1298218180m\/7501962.jpg","authors":"Eric Metaxas"},{"book_id":7505716,"title":"Alice's Adventures in Wonderland & Other Stories","image_url":"https:\/\/images.gr-assets.com\/books\/1459762532m\/7505716.jpg","authors":"Lewis Carroll, John Tenniel"},{"book_id":7507825,"title":"At Home: A Short History of Private Life","image_url":"https:\/\/images.gr-assets.com\/books\/1372727082m\/7507825.jpg","authors":"Bill Bryson"},{"book_id":7507908,"title":"The Replacement","image_url":"https:\/\/images.gr-assets.com\/books\/1360176667m\/7507908.jpg","authors":"Brenna Yovanoff"},{"book_id":7514925,"title":"Tiger Lily","image_url":"https:\/\/images.gr-assets.com\/books\/1329681513m\/7514925.jpg","authors":"Jodi Lynn Anderson"},{"book_id":7519472,"title":"The Darkest Lie (Lords of the Underworld #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1333828376m\/7519472.jpg","authors":"Gena Showalter"},{"book_id":7519640,"title":"War","image_url":"https:\/\/images.gr-assets.com\/books\/1344271278m\/7519640.jpg","authors":"Sebastian Junger"},{"book_id":7519866,"title":"Imperial Bedrooms ","image_url":"https:\/\/images.gr-assets.com\/books\/1278878105m\/7519866.jpg","authors":"Bret Easton Ellis"},{"book_id":7521400,"title":"This Time Together: Laughter and Reflection","image_url":"https:\/\/images.gr-assets.com\/books\/1320390701m\/7521400.jpg","authors":"Carol Burnett"},{"book_id":7528717,"title":"The Wimpy Kid Movie Diary (Diary of a Wimpy Kid)","image_url":"https:\/\/images.gr-assets.com\/books\/1328811516m\/7528717.jpg","authors":"Jeff Kinney"},{"book_id":7531478,"title":"Scars","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Cheryl Rainfield"},{"book_id":7540092,"title":"Monsters of Men (Chaos Walking, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1467392755m\/7540092.jpg","authors":"Patrick Ness"},{"book_id":7544603,"title":"Smaragdgr\u00fcn (Edelstein-Trilogie, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1345808677m\/7544603.jpg","authors":"Kerstin Gier"},{"book_id":7557548,"title":"Men at Arms: The Play","image_url":"https:\/\/images.gr-assets.com\/books\/1353573652m\/7557548.jpg","authors":"Terry Pratchett, Stephen Briggs"},{"book_id":7558747,"title":"Revolution","image_url":"https:\/\/images.gr-assets.com\/books\/1320530843m\/7558747.jpg","authors":"Jennifer Donnelly"},{"book_id":7562764,"title":"The Quantum Thief (Jean le Flambeur, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327950631m\/7562764.jpg","authors":"Hannu Rajaniemi"},{"book_id":7569223,"title":"Last Night at Chateau Marmont","image_url":"https:\/\/images.gr-assets.com\/books\/1269790764m\/7569223.jpg","authors":"Lauren Weisberger"},{"book_id":7576115,"title":"I Shall Wear Midnight (Discworld, #38; Tiffany Aching, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1328232764m\/7576115.jpg","authors":"Terry Pratchett"},{"book_id":7592279,"title":"The Emperor of Nihon-Ja (Ranger's Apprentice, #10)","image_url":"https:\/\/images.gr-assets.com\/books\/1446448563m\/7592279.jpg","authors":"John Flanagan"},{"book_id":7600922,"title":"Ghost Town (The Morganville Vampires, #9)","image_url":"https:\/\/images.gr-assets.com\/books\/1268376325m\/7600922.jpg","authors":"Rachel Caine"},{"book_id":7600924,"title":"Forbidden","image_url":"https:\/\/images.gr-assets.com\/books\/1394239949m\/7600924.jpg","authors":"Tabitha Suzuma"},{"book_id":7614747,"title":"Venom (Elemental Assassin, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1269891027m\/7614747.jpg","authors":"Jennifer Estep"},{"book_id":7617119,"title":"I Am Not A Serial Killer (John Cleaver, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dan Wells"},{"book_id":7619057,"title":"Warm Bodies (Warm Bodies, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1323400027m\/7619057.jpg","authors":"Isaac Marion"},{"book_id":7619292,"title":"Twilight: The Graphic Novel, Vol. 1 (Twilight: The Graphic Novel, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1317294278m\/7619292.jpg","authors":"Young Kim, Stephenie Meyer"},{"book_id":7619398,"title":"American Vampire, Vol. 1","image_url":"https:\/\/images.gr-assets.com\/books\/1389666348m\/7619398.jpg","authors":"Scott Snyder, Stephen King, Rafael Albuquerque"},{"book_id":7631105,"title":"The Scorch Trials (Maze Runner, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Dashner"},{"book_id":7632329,"title":"Operation Mincemeat: How a Dead Man and a Bizarre Plan Fooled the Nazis and Assured an Allied Victory","image_url":"https:\/\/images.gr-assets.com\/books\/1327448835m\/7632329.jpg","authors":"Ben Macintyre"},{"book_id":7636774,"title":"I'd Know You Anywhere","image_url":"https:\/\/images.gr-assets.com\/books\/1277582483m\/7636774.jpg","authors":"Laura Lippman"},{"book_id":7640261,"title":"Sex at Dawn: The Prehistoric Origins of Modern Sexuality","image_url":"https:\/\/images.gr-assets.com\/books\/1291105594m\/7640261.jpg","authors":"Christopher Ryan, Cacilda Jeth\u00e1"},{"book_id":7640705,"title":"The Ring of Solomon (Bartimaeus, #0.5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jonathan Stroud, Simon Jones"},{"book_id":7646805,"title":"The Gift (Witch & Wizard, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1273009084m\/7646805.jpg","authors":"James Patterson, Ned Rust"},{"book_id":7648269,"title":"Empire of the Summer Moon: Quanah Parker and the Rise and Fall of the Comanches, the Most Powerful Indian Tribe in American History","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"S.C. Gwynne"},{"book_id":7657484,"title":"Superman: Earth One, Volume 1","image_url":"https:\/\/images.gr-assets.com\/books\/1320538241m\/7657484.jpg","authors":"J. Michael Straczynski, Shane Davis, Sandra Hope, Barbara Ciardo, Rob Leigh"},{"book_id":7664041,"title":"Inheritance (The Inheritance Cycle, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Christopher Paolini"},{"book_id":7664334,"title":"Amy & Roger's Epic Detour","image_url":"https:\/\/images.gr-assets.com\/books\/1327989202m\/7664334.jpg","authors":"Morgan Matson"},{"book_id":7683254,"title":"Monster Hunter Vendetta (Monster Hunter International, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1327904153m\/7683254.jpg","authors":"Larry Correia"},{"book_id":7685763,"title":"Indulgence in Death (In Death, #31)","image_url":"https:\/\/images.gr-assets.com\/books\/1292915498m\/7685763.jpg","authors":"J.D. Robb"},{"book_id":7696135,"title":"Making Ideas Happen: Overcoming the Obstacles Between Vision and Reality","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Scott Belsky"},{"book_id":7701043,"title":"\u0627\u0644\u062c\u0632\u0627\u0631","image_url":"https:\/\/images.gr-assets.com\/books\/1270726397m\/7701043.jpg","authors":"\u062d\u0633\u0646 \u0627\u0644\u062c\u0646\u062f\u064a"},{"book_id":7701275,"title":"The Immortals Boxed Set (The Immortals, #1-3)","image_url":"https:\/\/images.gr-assets.com\/books\/1311995373m\/7701275.jpg","authors":"Alyson Noel"},{"book_id":7704143,"title":"\u062a\u0631\u0627\u0628 \u0627\u0644\u0645\u0627\u0633","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"\u0623\u062d\u0645\u062f \u0645\u0631\u0627\u062f"},{"book_id":7707538,"title":"Sugar and Spice (L.A. Candy, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1277830544m\/7707538.jpg","authors":"Lauren Conrad"},{"book_id":7713965,"title":"Bad Blood (Virgil Flowers, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Sandford"},{"book_id":7715664,"title":"Sin Undone (Demonica #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1344263648m\/7715664.jpg","authors":"Larissa Ione"},{"book_id":7717482,"title":"1Q84 BOOK 3 (1Q84, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1327559269m\/7717482.jpg","authors":"Haruki Murakami, \u6751\u4e0a \u6625\u6a39"},{"book_id":7719245,"title":"Paranormalcy (Paranormalcy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1496938681m\/7719245.jpg","authors":"Kiersten White"},{"book_id":7719355,"title":"Blameless (Parasol Protectorate, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1293436281m\/7719355.jpg","authors":"Gail Carriger"},{"book_id":7723542,"title":"A Dog's Purpose (A Dog's Purpose, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"W. Bruce Cameron"},{"book_id":7723797,"title":"Business Model Generation","image_url":"https:\/\/images.gr-assets.com\/books\/1384676138m\/7723797.jpg","authors":"Alexander Osterwalder, Yves Pigneur"},{"book_id":7726143,"title":"Origins (The Vampire Diaries: Stefan's Diaries, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1282055412m\/7726143.jpg","authors":"L.J. Smith, Kevin Williamson, Julie Plec"},{"book_id":7726892,"title":"The Island","image_url":"https:\/\/images.gr-assets.com\/books\/1344264696m\/7726892.jpg","authors":"Elin Hilderbrand"},{"book_id":7728889,"title":"The Diviners (The Diviners, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1336424966m\/7728889.jpg","authors":"Libba Bray"},{"book_id":7735333,"title":"Matched (Matched, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1367706191m\/7735333.jpg","authors":"Ally Condie"},{"book_id":7736086,"title":"The Lightning Thief: The Graphic Novel (Percy Jackson and the Olympians, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1347899366m\/7736086.jpg","authors":"Rick Riordan, Robert Venditti, Jos\u00e9 Villarrubia, Attila Futaki"},{"book_id":7736182,"title":"The Lost Hero (The Heroes of Olympus, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1464201003m\/7736182.jpg","authors":"Rick Riordan"},{"book_id":7739934,"title":"Night Star (The Immortals, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1362336383m\/7739934.jpg","authors":"Alyson Noel"},{"book_id":7740152,"title":"Torment (Fallen, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1362339749m\/7740152.jpg","authors":"Lauren Kate"},{"book_id":7741325,"title":"Dash & Lily's Book of Dares (Dash & Lily, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327874609m\/7741325.jpg","authors":"Rachel Cohn, David Levithan"},{"book_id":7743117,"title":"Sacr\u00e9 Bleu: A Comedy d'Art","image_url":"https:\/\/images.gr-assets.com\/books\/1331321350m\/7743117.jpg","authors":"Christopher Moore"},{"book_id":7743175,"title":"A Memory of Light (Wheel of Time, #14)","image_url":"https:\/\/images.gr-assets.com\/books\/1336055749m\/7743175.jpg","authors":"Robert Jordan, Brandon Sanderson"},{"book_id":7743783,"title":"The Unidentified Redhead (Redhead, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1355688970m\/7743783.jpg","authors":"Alice Clayton"},{"book_id":7745031,"title":"Zero History (Blue Ant, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1282769471m\/7745031.jpg","authors":"William Gibson"},{"book_id":7746259,"title":"The Stand: Soul Survivors","image_url":"https:\/\/images.gr-assets.com\/books\/1313267746m\/7746259.jpg","authors":"Roberto Aguirre-Sacasa, Mike Perkins, Laura Martin, Stephen King"},{"book_id":7747064,"title":"The Iron Daughter","image_url":"https:\/\/images.gr-assets.com\/books\/1271790654m\/7747064.jpg","authors":"Julie Kagawa"},{"book_id":7747263,"title":"Misguided Angel (Blue Bloods, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1322343431m\/7747263.jpg","authors":"Melissa de la Cruz"},{"book_id":7747374,"title":"I Am Number Four (Lorien Legacies, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1305807140m\/7747374.jpg","authors":"Pittacus Lore"},{"book_id":7766027,"title":"I Hunt Killers (Jasper Dent, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1333289403m\/7766027.jpg","authors":"Barry Lyga"},{"book_id":7775611,"title":"Thirst No. 3: The Eternal Dawn (Thirst, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1327900455m\/7775611.jpg","authors":"Christopher Pike"},{"book_id":7775841,"title":"Sleepwalk With Me and Other Painfully True Stories","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mike Birbiglia"},{"book_id":7776678,"title":"Naked Heat (Nikki Heat, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1327874198m\/7776678.jpg","authors":"Richard Castle"},{"book_id":7778609,"title":"Kill the Dead (Sandman Slim, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1275103078m\/7778609.jpg","authors":"Richard Kadrey"},{"book_id":7778981,"title":"Halo (Halo, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1278885735m\/7778981.jpg","authors":"Alexandra Adornetto"},{"book_id":7779059,"title":"Side Jobs: Stories from the Dresden Files (The Dresden Files, #12.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1269115846m\/7779059.jpg","authors":"Jim Butcher"},{"book_id":7783191,"title":"The Invisible Gorilla: And Other Ways Our Intuitions Deceive Us","image_url":"https:\/\/images.gr-assets.com\/books\/1320530790m\/7783191.jpg","authors":"Christopher Chabris, Daniel Simons"},{"book_id":7783920,"title":"Because of Mr. Terupt","image_url":"https:\/\/images.gr-assets.com\/books\/1320456974m\/7783920.jpg","authors":"Rob Buyea"},{"book_id":7785194,"title":"The Moral Landscape: How Science Can Determine Human Values","image_url":"https:\/\/images.gr-assets.com\/books\/1331317058m\/7785194.jpg","authors":"Sam Harris"},{"book_id":7785207,"title":"The Mating (Law of the Lycans, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1299068605m\/7785207.jpg","authors":"Nicky Charles"},{"book_id":7791997,"title":"Crescendo (Hush, Hush, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1362408146m\/7791997.jpg","authors":"Becca Fitzpatrick"},{"book_id":7797874,"title":"Return to Paradise (Leaving Paradise, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1271357819m\/7797874.jpg","authors":"Simone Elkeles"},{"book_id":7800188,"title":"Virals (Virals, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1278653923m\/7800188.jpg","authors":"Kathy Reichs, Brendan Reichs"},{"book_id":7801229,"title":"The Exiled Queen (Seven Realms, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1285276245m\/7801229.jpg","authors":"Cinda Williams Chima"},{"book_id":7812659,"title":"Safe Haven","image_url":"https:\/\/images.gr-assets.com\/books\/1344268800m\/7812659.jpg","authors":"Nicholas Sparks"},{"book_id":7815744,"title":"The Upside of Irrationality: The Unexpected Benefits of Defying Logic at Work and at Home","image_url":"https:\/\/images.gr-assets.com\/books\/1268511997m\/7815744.jpg","authors":"Dan Ariely"},{"book_id":7817785,"title":"Bloody Valentine (Blue Bloods, #5.5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Melissa de la Cruz"},{"book_id":7818881,"title":"Twelfth Grade Kills (The Chronicles of Vladimir Tod, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1268256304m\/7818881.jpg","authors":"Heather Brewer"},{"book_id":7821447,"title":"Sh*t My Dad Says","image_url":"https:\/\/images.gr-assets.com\/books\/1370399211m\/7821447.jpg","authors":"Justin Halpern"},{"book_id":7821828,"title":"The Hare With Amber Eyes: A Family's Century of Art and Loss","image_url":"https:\/\/images.gr-assets.com\/books\/1316730175m\/7821828.jpg","authors":"Edmund de Waal"},{"book_id":7822895,"title":"The Millennium Trilogy (Millennium Trilogy, #1-3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Stieg Larsson, Reg Keeland"},{"book_id":7823038,"title":"Grave Witch (Alex Craft, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327440625m\/7823038.jpg","authors":"Kalayna Price"},{"book_id":7823678,"title":"The Ugly Truth (Diary of a Wimpy Kid, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1332046095m\/7823678.jpg","authors":"Jeff Kinney"},{"book_id":7824322,"title":"Between Shades of Gray","image_url":"https:\/\/images.gr-assets.com\/books\/1327873479m\/7824322.jpg","authors":"Ruta Sepetys"},{"book_id":7824768,"title":"\u0644\u064a\u062a\u0647\u0627 \u062a\u0642\u0631\u0623","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"\u062e\u0627\u0644\u062f \u0627\u0644\u0628\u0627\u062a\u0644\u064a"},{"book_id":7824997,"title":"Theodore Boone: Kid Lawyer (Theodore Boone, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1275094812m\/7824997.jpg","authors":"John Grisham, Richard Thomas"},{"book_id":7825557,"title":"A Tale Dark & Grimm (A Tale Dark & Grimm, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1345696603m\/7825557.jpg","authors":"Adam Gidwitz"},{"book_id":7826116,"title":"Behemoth (Leviathan, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Scott Westerfeld, Keith Thompson"},{"book_id":7827221,"title":"Desires of the Dead (The Body Finder, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1288223505m\/7827221.jpg","authors":"Kimberly Derting"},{"book_id":7828781,"title":"No Place to Run (KGI, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1390878373m\/7828781.jpg","authors":"Maya Banks"},{"book_id":7828882,"title":"Crave (Fallen Angels, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1373163501m\/7828882.jpg","authors":"J.R. Ward"},{"book_id":7830126,"title":"What the Night Knows","image_url":"https:\/\/images.gr-assets.com\/books\/1308459193m\/7830126.jpg","authors":"Dean Koontz"},{"book_id":7831145,"title":"Play of Passion (Psy-Changeling #9)","image_url":"https:\/\/images.gr-assets.com\/books\/1272490500m\/7831145.jpg","authors":"Nalini Singh"},{"book_id":7831742,"title":"The Lost Saint (The Dark Divine, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1327883674m\/7831742.jpg","authors":"Bree Despain"},{"book_id":7840156,"title":"The Emperor's Tomb (Cotton Malone, #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Steve Berry"},{"book_id":7841446,"title":"In the Plex: How Google Thinks, Works, and Shapes Our Lives","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Steven Levy"},{"book_id":7841677,"title":"The Dirty Life: On Farming, Food, and Love","image_url":"https:\/\/images.gr-assets.com\/books\/1277929135m\/7841677.jpg","authors":"Kristin Kimball"},{"book_id":7842288,"title":"Beautiful Darkness (Caster Chronicles, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1327879100m\/7842288.jpg","authors":"Kami Garcia, Margaret Stohl"},{"book_id":7849034,"title":"Goddess (Starcrossed, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1351415040m\/7849034.jpg","authors":"Josephine Angelini"},{"book_id":7849341,"title":"Tiger's Voyage (The Tiger Saga, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1320459742m\/7849341.jpg","authors":"Colleen Houck"},{"book_id":7853137,"title":"Think of a Number (Dave Gurney, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Verdon"},{"book_id":7853757,"title":"Moonlight Mile (Kenzie & Gennaro,#6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dennis Lehane"},{"book_id":7856305,"title":"Cross Fire (Alex Cross, #17)","image_url":"https:\/\/images.gr-assets.com\/books\/1287719974m\/7856305.jpg","authors":"James Patterson"},{"book_id":7857195,"title":"Squirrel Seeks Chipmunk: A Modest Bestiary","image_url":"https:\/\/images.gr-assets.com\/books\/1279831428m\/7857195.jpg","authors":"David Sedaris, Ian Falconer"},{"book_id":7862725,"title":"Branded (Fall of Angels, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1289169061m\/7862725.jpg","authors":"Keary Taylor"},{"book_id":7863274,"title":"Graffiti Moon","image_url":"https:\/\/images.gr-assets.com\/books\/1320129868m\/7863274.jpg","authors":"Cath Crowley"},{"book_id":7863423,"title":"Simply Irresistible (Lucky Harbor, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1323268405m\/7863423.jpg","authors":"Jill Shalvis"},{"book_id":7864437,"title":"The Death Cure (Maze Runner, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1303997647m\/7864437.jpg","authors":"James Dashner"},{"book_id":7870457,"title":"Chew, Vol. 2: International Flavor","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Layman, Rob Guillory"},{"book_id":7879278,"title":"Waterfall (River of Time, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lisa Tawn Bergren"},{"book_id":7894870,"title":"Bone: Tall Tales","image_url":"https:\/\/images.gr-assets.com\/books\/1328839454m\/7894870.jpg","authors":"Jeff Smith, Thomas E. Sniegoski, Steve Hamaker"},{"book_id":7896345,"title":"The Gathering (Darkness Rising, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1277820938m\/7896345.jpg","authors":"Kelley Armstrong"},{"book_id":7896527,"title":"Throne of Glass (Throne of Glass, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1495278054m\/7896527.jpg","authors":"Sarah J. Maas"},{"book_id":7897478,"title":"The Bedwetter: Stories of Courage, Redemption, and Pee","image_url":"https:\/\/images.gr-assets.com\/books\/1269295414m\/7897478.jpg","authors":"Sarah Silverman"},{"book_id":7897620,"title":"I Still Dream About You","image_url":"https:\/\/images.gr-assets.com\/books\/1320471793m\/7897620.jpg","authors":"Fannie Flagg"},{"book_id":7904429,"title":"Scott Pilgrim, Volume 6: Scott Pilgrim's Finest Hour","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bryan Lee O'Malley"},{"book_id":7904453,"title":"The Broken Kingdoms (Inheritance, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1282522268m\/7904453.jpg","authors":"N.K. Jemisin"},{"book_id":7905092,"title":"Freedom","image_url":"https:\/\/images.gr-assets.com\/books\/1316729686m\/7905092.jpg","authors":"Jonathan Franzen"},{"book_id":7905977,"title":"The Adventures of Ook and Gluk, Kung-Fu Cavemen from the Future","image_url":"https:\/\/images.gr-assets.com\/books\/1328837495m\/7905977.jpg","authors":"Dav Pilkey, George Beard, Harold Hutchins"},{"book_id":7906105,"title":"Girl, Stolen (Girl, Stolen #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1316730155m\/7906105.jpg","authors":"April Henry"},{"book_id":7907680,"title":"Secrets to the Grave (Oak Knoll, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tami Hoag"},{"book_id":7907782,"title":"Great House","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nicole Krauss"},{"book_id":7907803,"title":"An Object of Beauty","image_url":"https:\/\/images.gr-assets.com\/books\/1289520035m\/7907803.jpg","authors":"Steve Martin"},{"book_id":7908638,"title":"Star Island (Skink, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1320464091m\/7908638.jpg","authors":"Carl Hiaasen"},{"book_id":7912007,"title":"Full Dark, No Stars","image_url":"https:\/\/images.gr-assets.com\/books\/1327892855m\/7912007.jpg","authors":"Stephen King"},{"book_id":7913305,"title":"The Immortals of Meluha (Shiva Trilogy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1334659192m\/7913305.jpg","authors":"Amish Tripathi"},{"book_id":7914058,"title":"Rescue","image_url":"https:\/\/images.gr-assets.com\/books\/1289520228m\/7914058.jpg","authors":"Anita Shreve"},{"book_id":7926242,"title":"Port Mortuary (Kay Scarpetta, #18)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Patricia Cornwell"},{"book_id":7926569,"title":"Now You See Her","image_url":"https:\/\/images.gr-assets.com\/books\/1435387035m\/7926569.jpg","authors":"James Patterson, Michael Ledwidge"},{"book_id":7930335,"title":"Beautiful Redemption (Caster Chronicles, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1331049809m\/7930335.jpg","authors":"Kami Garcia, Margaret Stohl"},{"book_id":7932146,"title":"The Inner Circle (Culper Ring, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Brad Meltzer"},{"book_id":7933292,"title":"Heaven is for Real: A Little Boy's Astounding Story of His Trip to Heaven and Back","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Todd Burpo, Lynn Vincent"},{"book_id":7933437,"title":"The Confession","image_url":"https:\/\/images.gr-assets.com\/books\/1320541779m\/7933437.jpg","authors":"John Grisham"},{"book_id":7933615,"title":"Hidden (House of Night, #10)","image_url":"https:\/\/images.gr-assets.com\/books\/1340127630m\/7933615.jpg","authors":"P.C. Cast, Kristin Cast"},{"book_id":7933617,"title":"Destined (House of Night, #9)","image_url":"https:\/\/images.gr-assets.com\/books\/1406962311m\/7933617.jpg","authors":"P.C. Cast, Kristin Cast"},{"book_id":7936809,"title":"The Reversal (Harry Bosch, #16; Mickey Haller, #4; Harry Bosch Universe, #19)","image_url":"https:\/\/images.gr-assets.com\/books\/1421934033m\/7936809.jpg","authors":"Michael Connelly"},{"book_id":7937462,"title":"The Short Second Life of Bree Tanner: An Eclipse Novella (Twilight, #3.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1274335680m\/7937462.jpg","authors":"Stephenie Meyer"},{"book_id":7937744,"title":"Surface Detail (Culture #9)","image_url":"https:\/\/images.gr-assets.com\/books\/1287893375m\/7937744.jpg","authors":"Iain M. Banks"},{"book_id":7937843,"title":"Room","image_url":"https:\/\/images.gr-assets.com\/books\/1344265419m\/7937843.jpg","authors":"Emma Donoghue"},{"book_id":7938275,"title":"The Hunger Games Trilogy Boxset (The Hunger Games, #1-3)","image_url":"https:\/\/images.gr-assets.com\/books\/1360094673m\/7938275.jpg","authors":"Suzanne Collins"},{"book_id":7940589,"title":"Malcolm X: A Life of Reinvention","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Manning Marable"},{"book_id":7940591,"title":"Blockade Billy","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Stephen King"},{"book_id":7942008,"title":"Hetalia: Axis Powers, Vol. 1 (Hetalia: Axis Powers, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Hidekaz Himaruya"},{"book_id":7942786,"title":"Fair Game (Alpha & Omega, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1327472384m\/7942786.jpg","authors":"Patricia Briggs"},{"book_id":7945049,"title":"Bury Your Dead (Chief Inspector Armand Gamache, #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Louise Penny"},{"book_id":7948230,"title":"Crooked Letter, Crooked Letter","image_url":"https:\/\/images.gr-assets.com\/books\/1292689648m\/7948230.jpg","authors":"Tom Franklin"},{"book_id":7948945,"title":"Falling Under (Falling Under, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1326079906m\/7948945.jpg","authors":"Gwen Hayes"},{"book_id":7952502,"title":"Harry Potter: Film Wizardry","image_url":"https:\/\/images.gr-assets.com\/books\/1464452934m\/7952502.jpg","authors":"Brian Sibley"},{"book_id":7954556,"title":"One Grave at a Time (Night Huntress, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1315175727m\/7954556.jpg","authors":"Jeaniene Frost"},{"book_id":7955881,"title":"The Cloud Searchers (Amulet, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1422028852m\/7955881.jpg","authors":"Kazu Kibuishi"},{"book_id":7959473,"title":"American Assassin (Mitch Rapp, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1425389574m\/7959473.jpg","authors":"Vince Flynn"},{"book_id":7963189,"title":"Le bleu est une couleur chaude","image_url":"https:\/\/images.gr-assets.com\/books\/1330712998m\/7963189.jpg","authors":"Julie Maroh"},{"book_id":7963208,"title":"A Secret Kept","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tatiana de Rosnay"},{"book_id":7967299,"title":"Love You to Death: The Unofficial Companion to the Vampire Diaries","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Crissy Calhoun"},{"book_id":7968243,"title":"Cleopatra: A Life","image_url":"https:\/\/images.gr-assets.com\/books\/1294098301m\/7968243.jpg","authors":"Stacy Schiff"},{"book_id":7979073,"title":"Minding Frankie","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Maeve Binchy"},{"book_id":7981206,"title":"Dead Reckoning (Sookie Stackhouse, #11)","image_url":"https:\/\/images.gr-assets.com\/books\/1357679465m\/7981206.jpg","authors":"Charlaine Harris"},{"book_id":7981456,"title":"A Long Walk to Water: Based on a True Story","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Linda Sue Park"},{"book_id":7991200,"title":"Angel (Angel, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1326626626m\/7991200.jpg","authors":"L.A. Weatherly"},{"book_id":7992363,"title":"HHhH","image_url":"https:\/\/images.gr-assets.com\/books\/1490084601m\/7992363.jpg","authors":"Laurent Binet"},{"book_id":7992995,"title":"Eona: The Last Dragoneye (Eon, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Alison Goodman"},{"book_id":7993566,"title":"Colonel Roosevelt","image_url":"https:\/\/images.gr-assets.com\/books\/1320530371m\/7993566.jpg","authors":"Edmund Morris"},{"book_id":7997069,"title":"Dead or Alive (Jack Ryan Universe, #13)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tom Clancy, Grant Blackwood"},{"book_id":8008928,"title":"Savages","image_url":"https:\/\/images.gr-assets.com\/books\/1368577399m\/8008928.jpg","authors":"Don Winslow"},{"book_id":8034188,"title":"Where Good Ideas Come From: The Natural History of Innovation","image_url":"https:\/\/images.gr-assets.com\/books\/1311705993m\/8034188.jpg","authors":"Steven Johnson"},{"book_id":8038219,"title":"The Darkest Surrender (Lords of the Underworld #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1327883317m\/8038219.jpg","authors":"Gena Showalter"},{"book_id":8044557,"title":"All My Friends Are Dead","image_url":"https:\/\/images.gr-assets.com\/books\/1330386466m\/8044557.jpg","authors":"Avery Monsen, Jory John"},{"book_id":8045080,"title":"Hell's Corner (Camel Club, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1330171863m\/8045080.jpg","authors":"David Baldacci"},{"book_id":8046350,"title":"My Blood Approves (My Blood Approves, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1282351187m\/8046350.jpg","authors":"Amanda Hocking"},{"book_id":8046680,"title":"The Girl Who Was on Fire: Your Favorite Authors on Suzanne Collins' Hunger Games Trilogy","image_url":"https:\/\/images.gr-assets.com\/books\/1327889490m\/8046680.jpg","authors":"Leah Wilson, Jennifer Lynn Barnes, Mary Borsellino, Sarah Rees Brennan, Terri Clark, Bree Despain, Adrienne Kress, Sarah Darer Littman, Cara Lockwood, Elizabeth M. Rees, Carrie Ryan, Ned Vizzini, Lili Wilkinson, Blythe Woolston"},{"book_id":8058301,"title":"Ghost Story (The Dresden Files, #13)","image_url":"https:\/\/images.gr-assets.com\/books\/1329104700m\/8058301.jpg","authors":"Jim Butcher"},{"book_id":8069535,"title":"Entice (Need, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1305547585m\/8069535.jpg","authors":"Carrie Jones"},{"book_id":8069828,"title":"The Crimson Crown (Seven Realms, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1345041697m\/8069828.jpg","authors":"Cinda Williams Chima"},{"book_id":8070049,"title":"Winter's Passage (Iron Fey, #1.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1271790569m\/8070049.jpg","authors":"Julie Kagawa"},{"book_id":8074967,"title":"Archangel's Blade (Guild Hunter, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1327877499m\/8074967.jpg","authors":"Nalini Singh"},{"book_id":8086216,"title":"Plenty","image_url":"https:\/\/images.gr-assets.com\/books\/1327921381m\/8086216.jpg","authors":"Yotam Ottolenghi"},{"book_id":8087038,"title":"Chasing The Night (Eve Duncan, #11; Catherine Ling, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Iris Johansen"},{"book_id":8087906,"title":"River Marked (Mercy Thompson, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1305738320m\/8087906.jpg","authors":"Patricia Briggs"},{"book_id":8099187,"title":"Decision Points","image_url":"https:\/\/images.gr-assets.com\/books\/1320428975m\/8099187.jpg","authors":"George W. Bush"},{"book_id":8100267,"title":"Pathfinder (Pathfinder, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Orson Scott Card"},{"book_id":8100288,"title":"The Boy Who Came Back from Heaven: A Remarkable Account of Miracles, Angels, and Life beyond This World","image_url":"https:\/\/images.gr-assets.com\/books\/1406510843m\/8100288.jpg","authors":"Kevin Malarkey, Alex Malarkey"},{"book_id":8100979,"title":"Mercy Blade (Jane Yellowrock, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Faith Hunter"},{"book_id":8105569,"title":"Oogy: The Dog Only a Family Could Love","image_url":"https:\/\/images.gr-assets.com\/books\/1289446928m\/8105569.jpg","authors":"Larry Levin"},{"book_id":8110748,"title":"\u30ad\u30b9\u3088\u308a\u3082\u65e9\u304f1 [Kisu Yorimo Hayaku 1] (Faster than a Kiss #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1272593631m\/8110748.jpg","authors":"Meca Tanaka, \u7530\u4e2d\u30e1\u30ab"},{"book_id":8112318,"title":"The Candymakers (The Candymakers, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Wendy Mass"},{"book_id":8113344,"title":"Mortal Coil (Skulduggery Pleasant, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1442456495m\/8113344.jpg","authors":"Derek Landy"},{"book_id":8113940,"title":"Witches of East End (The Beauchamp Family, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1294433454m\/8113940.jpg","authors":"Melissa de la Cruz"},{"book_id":8130839,"title":"Bloodrose (Nightshade #3; Nightshade World #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1351196369m\/8130839.jpg","authors":"Andrea Cremer"},{"book_id":8135807,"title":"Rock Me (Ross Siblings, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Cherrie Lynn"},{"book_id":8138071,"title":"Pale Demon (The Hollows, #9)","image_url":"https:\/\/images.gr-assets.com\/books\/1280381240m\/8138071.jpg","authors":"Kim Harrison"},{"book_id":8139321,"title":"Leaving (Bailey Flanigan, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Karen Kingsbury"},{"book_id":8142508,"title":"Her Daughter's Dream (Marta's Legacy, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1276207024m\/8142508.jpg","authors":"Francine Rivers"},{"book_id":8150317,"title":"Deeper Than Midnight (Midnight Breed, #9)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lara Adrian"},{"book_id":8152697,"title":"Wishin' and Hopin'","image_url":"https:\/\/images.gr-assets.com\/books\/1328017040m\/8152697.jpg","authors":"Wally Lamb"},{"book_id":8158992,"title":"MacRieve (Immortals After Dark, #14)","image_url":"https:\/\/images.gr-assets.com\/books\/1360517706m\/8158992.jpg","authors":"Kresley Cole"},{"book_id":8163161,"title":"Ouran High School Host Club, Vol. 15 (Ouran High School Host Club, #15)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bisco Hatori"},{"book_id":8163722,"title":"Earth (The Book): A Visitor's Guide to the Human Race","image_url":"https:\/\/images.gr-assets.com\/books\/1344264519m\/8163722.jpg","authors":"Jon Stewart, Rory Albanese, Kevin Bleyer, Rich Bloomquist, Steve Bodow, Tim Carvell, Wyatt Cenac, Hallie Haglund, J.R. Havlan, David Javerbaum, Elliott Kalan, Josh Lieb, Sam Means, Jo Miller, John Oliver, Daniel Radosh, Jason Ross"},{"book_id":8167094,"title":"The Hidden Reality: Parallel Universes and the Deep Laws of the Cosmos","image_url":"https:\/\/images.gr-assets.com\/books\/1320431300m\/8167094.jpg","authors":"Brian Greene"},{"book_id":8171378,"title":"The Warmth of Other Suns: The Epic Story of America's Great Migration","image_url":"https:\/\/images.gr-assets.com\/books\/1433354252m\/8171378.jpg","authors":"Isabel Wilkerson"},{"book_id":8177526,"title":"Fate (My Blood Approves, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1282281122m\/8177526.jpg","authors":"Amanda Hocking"},{"book_id":8196732,"title":"Sister","image_url":"https:\/\/images.gr-assets.com\/books\/1320189763m\/8196732.jpg","authors":"Rosamund Lupton"},{"book_id":8204005,"title":"Love Unscripted (Love, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327889844m\/8204005.jpg","authors":"Tina Reber"},{"book_id":8205669,"title":"Wicked Appetite (Lizzy & Diesel, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Janet Evanovich"},{"book_id":8229399,"title":"Big Nate Strikes Again (Big Nate Novels, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lincoln Peirce"},{"book_id":8230409,"title":"Kamisama Kiss, Vol. 1","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Julietta Suzuki, Tomo Kimura"},{"book_id":8235178,"title":"Across the Universe (Across the Universe, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Beth Revis"},{"book_id":8239301,"title":"\u0627\u0644\u0637\u0646\u0637\u0648\u0631\u064a\u0629","image_url":"https:\/\/images.gr-assets.com\/books\/1314481218m\/8239301.jpg","authors":"Radwa Ashour, \u0631\u0636\u0648\u0649 \u0639\u0627\u0634\u0648\u0631"},{"book_id":8242117,"title":"I Remember Nothing: and Other Reflections","image_url":"https:\/\/images.gr-assets.com\/books\/1320544923m\/8242117.jpg","authors":"Nora Ephron"},{"book_id":8253920,"title":"Towers of Midnight (Wheel of Time, #13)","image_url":"https:\/\/images.gr-assets.com\/books\/1358109459m\/8253920.jpg","authors":"Robert Jordan, Brandon Sanderson"},{"book_id":8255917,"title":"Washington: A Life","image_url":"https:\/\/images.gr-assets.com\/books\/1348969179m\/8255917.jpg","authors":"Ron Chernow"},{"book_id":8257435,"title":"Hector and the Search for Happiness","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Fran\u00e7ois Lelord, Lorenza Garc\u00eda"},{"book_id":8269450,"title":"Darkest Powers Trilogy (Darkest Powers, #1-3)","image_url":"https:\/\/images.gr-assets.com\/books\/1411868332m\/8269450.jpg","authors":"Kelley Armstrong"},{"book_id":8274537,"title":"Tales from a Not-So-Popular Party Girl (Dork Diaries, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1370064608m\/8274537.jpg","authors":"Rachel Ren\u00e9e Russell"},{"book_id":8281069,"title":"The Unofficial Harry Potter Cookbook: From Cauldron Cakes to Knickerbocker Glory--More Than 150 Magical Recipes for Wizards and Non-Wizards Alike (Unofficial Cookbook)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dinah Bucholz"},{"book_id":8286216,"title":"Gideon's Sword (Gideon Crew, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Douglas Preston, Lincoln Child"},{"book_id":8288246,"title":"Red Glove (Curse Workers, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1327888670m\/8288246.jpg","authors":"Holly Black"},{"book_id":8293938,"title":"Moon Over Manifest","image_url":"https:\/\/images.gr-assets.com\/books\/1320541883m\/8293938.jpg","authors":"Clare Vanderpool"},{"book_id":8296140,"title":"Clara and Mr. Tiffany","image_url":"https:\/\/images.gr-assets.com\/books\/1320562282m\/8296140.jpg","authors":"Susan Vreeland"},{"book_id":8306745,"title":"A World Without Heroes (Beyonders, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Brandon Mull"},{"book_id":8315872,"title":"Treachery in Death (In Death, #32)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"J.D. Robb, Nora Roberts"},{"book_id":8318666,"title":"The Land of Painted Caves (Earth's Children, #6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jean M. Auel"},{"book_id":8320534,"title":"Raymond E. Feist's Magician Master","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bryan J.L. Glass, Tim Seeley, Hugo Petrus, Raymond E. Feist"},{"book_id":8341567,"title":"The Perfect Play (Play by Play, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1301853642m\/8341567.jpg","authors":"Jaci Burton"},{"book_id":8343444,"title":"Daun Yang Jatuh Tak Pernah Membenci Angin","image_url":"https:\/\/images.gr-assets.com\/books\/1485759293m\/8343444.jpg","authors":"Tere Liye"},{"book_id":8346300,"title":"Harry Potter: A Pop-Up Book: Based on the Film Phenomenon","image_url":"https:\/\/images.gr-assets.com\/books\/1328739344m\/8346300.jpg","authors":"Andrew Williamson, Andrew Williamson"},{"book_id":8349348,"title":"Flutter (My Blood Approves, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1282496658m\/8349348.jpg","authors":"Amanda Hocking"},{"book_id":8354134,"title":"The Running Dream","image_url":"https:\/\/images.gr-assets.com\/books\/1333577959m\/8354134.jpg","authors":"Wendelin Van Draanen"},{"book_id":8356487,"title":"Heartless (Parasol Protectorate, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Gail Carriger"},{"book_id":8357992,"title":"Worth Dying For (Jack Reacher, #15)","image_url":"https:\/\/images.gr-assets.com\/books\/1356095648m\/8357992.jpg","authors":"Lee Child"},{"book_id":8366402,"title":"The Tiger's Wife","image_url":"https:\/\/images.gr-assets.com\/books\/1382570044m\/8366402.jpg","authors":"T\u00e9a Obreht"},{"book_id":8369681,"title":"Prom and Prejudice","image_url":"https:\/\/images.gr-assets.com\/books\/1281991654m\/8369681.jpg","authors":"Elizabeth Eulberg"},{"book_id":8379374,"title":"Backstage Pass (Sinners on Tour, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1348192403m\/8379374.jpg","authors":"Olivia Cunning"},{"book_id":8389671,"title":"The Red Garden","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Alice Hoffman"},{"book_id":8407173,"title":"Jasper Jones","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Craig Silvey"},{"book_id":8411749,"title":"The Rogue (Traitor Spy Trilogy, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1328375255m\/8411749.jpg","authors":"Trudi Canavan"},{"book_id":8419428,"title":"A Lot like Love (FBI\/US Attorney, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1284384506m\/8419428.jpg","authors":"Julie James"},{"book_id":8428064,"title":"Demonglass (Hex Hall, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1287692542m\/8428064.jpg","authors":"Rachel Hawkins"},{"book_id":8428069,"title":"The Lying Game (The Lying Game, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1316916749m\/8428069.jpg","authors":"Sara Shepard"},{"book_id":8428195,"title":"Entwined","image_url":"https:\/\/images.gr-assets.com\/books\/1279037245m\/8428195.jpg","authors":"Heather Dixon"},{"book_id":8428984,"title":"Half Way Home","image_url":"https:\/\/images.gr-assets.com\/books\/1374845830m\/8428984.jpg","authors":"Hugh Howey"},{"book_id":8429687,"title":"Deadline (Newsflesh Trilogy, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1408500444m\/8429687.jpg","authors":"Mira Grant"},{"book_id":8435445,"title":"Scorpia Rising (Alex Rider #9)","image_url":"https:\/\/images.gr-assets.com\/books\/1417405144m\/8435445.jpg","authors":"Anthony Horowitz"},{"book_id":8437379,"title":"Call Me Irresistible (Wynette, Texas #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1327880626m\/8437379.jpg","authors":"Susan Elizabeth Phillips"},{"book_id":8437667,"title":"Live Wire (Myron Bolitar #10)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Harlan Coben"},{"book_id":8437913,"title":"Tick Tock (Michael Bennett, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1293807879m\/8437913.jpg","authors":"James Patterson, Michael Ledwidge"},{"book_id":8442457,"title":"Gone Girl","image_url":"https:\/\/images.gr-assets.com\/books\/1339602131m\/8442457.jpg","authors":"Gillian Flynn"},{"book_id":8447255,"title":"The Crippled God (The Malazan Book of the Fallen, #10)","image_url":"https:\/\/images.gr-assets.com\/books\/1320388198m\/8447255.jpg","authors":"Steven Erikson"},{"book_id":8449698,"title":"When Beauty Tamed the Beast (Fairy Tales, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1282320694m\/8449698.jpg","authors":"Eloisa James"},{"book_id":8456124,"title":"Bloodlust (The Vampire Diaries: Stefan's Diaries, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1287687704m\/8456124.jpg","authors":"L.J. Smith, Kevin Williamson, Julie Plec"},{"book_id":8458018,"title":"The Warlock (The Secrets of the Immortal Nicholas Flamel, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1386634577m\/8458018.jpg","authors":"Michael Scott"},{"book_id":8459594,"title":"Blood, Bones, and Butter: The Inadvertent Education of a Reluctant Chef","image_url":"https:\/\/images.gr-assets.com\/books\/1327889966m\/8459594.jpg","authors":"Gabrielle Hamilton"},{"book_id":8462184,"title":"The Morganville Vampires, Volume 3 (The Morganville Vampires, #5-6)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rachel Caine"},{"book_id":8471815,"title":"You Don't Have to Say You Love Me","image_url":"https:\/\/images.gr-assets.com\/books\/1296530574m\/8471815.jpg","authors":"Sarra Manning"},{"book_id":8475505,"title":"Rebel Belle (Rebel Belle, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1371650817m\/8475505.jpg","authors":"Rachel Hawkins"},{"book_id":8476248,"title":"Just Like Heaven (Smythe-Smith Quartet #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327270567m\/8476248.jpg","authors":"Julia Quinn"},{"book_id":8477057,"title":"Daytripper","image_url":"https:\/\/images.gr-assets.com\/books\/1327876816m\/8477057.jpg","authors":"F\u00e1bio Moon, Gabriel B\u00e1, Craig Thompson, Dave Stewart, Sean Konot"},{"book_id":8483233,"title":"The Pioneer Woman: Black Heels to Tractor Wheels","image_url":"https:\/\/images.gr-assets.com\/books\/1327898663m\/8483233.jpg","authors":"Ree Drummond"},{"book_id":8487363,"title":"My Soul to Steal (Soul Screamers, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rachel Vincent"},{"book_id":8490112,"title":"Daughter of Smoke & Bone (Daughter of Smoke & Bone, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1461353773m\/8490112.jpg","authors":"Laini Taylor"},{"book_id":8492319,"title":"Lover Unleashed (Black Dagger Brotherhood, #9)","image_url":"https:\/\/images.gr-assets.com\/books\/1289343390m\/8492319.jpg","authors":"J.R. Ward"},{"book_id":8492768,"title":"Left Neglected","image_url":"https:\/\/images.gr-assets.com\/books\/1285414621m\/8492768.jpg","authors":"Lisa Genova"},{"book_id":8492825,"title":"Where She Went (If I Stay, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1347810457m\/8492825.jpg","authors":"Gayle Forman"},{"book_id":8492856,"title":"What Happened to Goodbye","image_url":"https:\/\/images.gr-assets.com\/books\/1347810788m\/8492856.jpg","authors":"Sarah Dessen"},{"book_id":8492907,"title":"Physics of the Future: How Science Will Shape Human Destiny and Our Daily Lives by the Year 2100","image_url":"https:\/\/images.gr-assets.com\/books\/1320504811m\/8492907.jpg","authors":"Michio Kaku"},{"book_id":8517008,"title":"A Red Herring Without Mustard (Flavia de Luce, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Alan Bradley"},{"book_id":8519822,"title":"The Enchantress (The Secrets of the Immortal Nicholas Flamel, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1317844406m\/8519822.jpg","authors":"Michael Scott"},{"book_id":8520362,"title":"The Grand Design","image_url":"https:\/\/images.gr-assets.com\/books\/1320558363m\/8520362.jpg","authors":"Stephen Hawking, Leonard Mlodinow"},{"book_id":8520610,"title":"Quiet: The Power of Introverts in a World That Can't Stop Talking","image_url":"https:\/\/images.gr-assets.com\/books\/1328562861m\/8520610.jpg","authors":"Susan Cain"},{"book_id":8525590,"title":"Wither (The Chemical Garden, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1341532430m\/8525590.jpg","authors":"Lauren DeStefano"},{"book_id":8526694,"title":"Open City","image_url":"https:\/\/images.gr-assets.com\/books\/1327935192m\/8526694.jpg","authors":"Teju Cole"},{"book_id":8533018,"title":"The Scottish Prisoner (Lord John Grey, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1372562277m\/8533018.jpg","authors":"Diana Gabaldon"},{"book_id":8534799,"title":"Dreams of a Dark Warrior (Immortals After Dark #11)","image_url":"https:\/\/images.gr-assets.com\/books\/1285724086m\/8534799.jpg","authors":"Kresley Cole"},{"book_id":8534899,"title":"Forsaken (The Demon Trappers, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1282919119m\/8534899.jpg","authors":"Jana Oliver"},{"book_id":8535273,"title":"The Dark and Hollow Places (The Forest of Hands and Teeth, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Carrie Ryan"},{"book_id":8537327,"title":"Inside Out & Back Again","image_url":"https:\/\/images.gr-assets.com\/books\/1357771743m\/8537327.jpg","authors":"Thanhha Lai"},{"book_id":8539798,"title":"Blue exorcist, Tome 2","image_url":"https:\/\/images.gr-assets.com\/books\/1278403940m\/8539798.jpg","authors":"Kazue Kato"},{"book_id":8542839,"title":"Fire Burn and Cauldron Bubble (Jolie Wilkins, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1329352960m\/8542839.jpg","authors":"H.P. Mallory"},{"book_id":8546358,"title":"The Peach Keeper","image_url":"https:\/\/images.gr-assets.com\/books\/1320549305m\/8546358.jpg","authors":"Sarah Addison Allen"},{"book_id":8554005,"title":"Sing You Home","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jodi Picoult"},{"book_id":8559047,"title":"Magic Slays (Kate Daniels, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1288727226m\/8559047.jpg","authors":"Ilona Andrews"},{"book_id":8563789,"title":"Where Things Come Back","image_url":"https:\/\/images.gr-assets.com\/books\/1330581469m\/8563789.jpg","authors":"John Corey Whaley"},{"book_id":8564644,"title":"Little Princes: One Man's Promise to Bring Home the Lost Children of Nepal","image_url":"https:\/\/images.gr-assets.com\/books\/1279553857m\/8564644.jpg","authors":"Conor Grennan"},{"book_id":8564935,"title":"Switched (Trylle, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1288828865m\/8564935.jpg","authors":"Amanda Hocking"},{"book_id":8565083,"title":"Cinderella Ate My Daughter: Dispatches from the Frontlines of the New Girlie-Girl Culture","image_url":"https:\/\/images.gr-assets.com\/books\/1279214118m\/8565083.jpg","authors":"Peggy Orenstein"},{"book_id":8570787,"title":"Drop Dead Healthy: One Man's Humble Quest for Bodily Perfection","image_url":"https:\/\/images.gr-assets.com\/books\/1344398815m\/8570787.jpg","authors":"A.J. Jacobs"},{"book_id":8573020,"title":"The Weird Sisters","image_url":"https:\/\/images.gr-assets.com\/books\/1280449598m\/8573020.jpg","authors":"Eleanor Brown"},{"book_id":8573642,"title":"Incarnate (Newsoul, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1358271343m\/8573642.jpg","authors":"Jodi Meadows"},{"book_id":8574333,"title":"Please Look After Mom","image_url":"https:\/\/images.gr-assets.com\/books\/1320413213m\/8574333.jpg","authors":"Kyung-Sook Shin, \uc2e0\uacbd\uc219, Chi-Young Kim"},{"book_id":8575295,"title":"Wisdom (My Blood Approves, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1282281680m\/8575295.jpg","authors":"Amanda Hocking"},{"book_id":8579016,"title":"The Power (The Secret, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1366245447m\/8579016.jpg","authors":"Rhonda Byrne"},{"book_id":8581936,"title":"Supernaturally (Paranormalcy, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1371926956m\/8581936.jpg","authors":"Kiersten White"},{"book_id":8584686,"title":"Swamplandia!","image_url":"https:\/\/images.gr-assets.com\/books\/1320536498m\/8584686.jpg","authors":"Karen Russell"},{"book_id":8584913,"title":"The Dressmaker of Khair Khana: Five Sisters, One Remarkable Family, and the Woman Who Risked Everything to Keep Them Safe","image_url":"https:\/\/images.gr-assets.com\/books\/1279213493m\/8584913.jpg","authors":"Gayle Tzemach Lemmon"},{"book_id":8592946,"title":"One Thousand Gifts: A Dare to Live Fully Right Where You Are","image_url":"https:\/\/images.gr-assets.com\/books\/1393970725m\/8592946.jpg","authors":"Ann Voskamp"},{"book_id":8593026,"title":"Hostile Witness (Witness Series, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1334706916m\/8593026.jpg","authors":"Rebecca Forster"},{"book_id":8598554,"title":"The Omen Machine (Sword of Truth, #12; Richard and Kahlan, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1320450369m\/8598554.jpg","authors":"Terry Goodkind"},{"book_id":8619814,"title":"The Emerald Atlas (The Books of Beginning, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Stephens"},{"book_id":8621462,"title":"A Monster Calls","image_url":"https:\/\/images.gr-assets.com\/books\/1485991317m\/8621462.jpg","authors":"Patrick Ness, Jim Kay, Siobhan Dowd"},{"book_id":8635145,"title":"Embrace (The Violet Eden Chapters, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1284130161m\/8635145.jpg","authors":"Jessica Shirvington"},{"book_id":8643220,"title":"Vampire Academy: The Graphic Novel (Vampire Academy: The Graphic Novel, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1331468259m\/8643220.jpg","authors":"Richelle Mead, Emma Vieceli, Leigh Dragoon"},{"book_id":8643407,"title":"Hard Magic (Grimnoir Chronicles, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327951330m\/8643407.jpg","authors":"Larry Correia"},{"book_id":8649656,"title":"The Fry Chronicles (Memoir #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1376317909m\/8649656.jpg","authors":"Stephen Fry"},{"book_id":8652190,"title":"Awakened (House of Night, #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1307744664m\/8652190.jpg","authors":"P.C. Cast, Kristin Cast"},{"book_id":8659601,"title":"The Power of Six (Lorien Legacies, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1345067406m\/8659601.jpg","authors":"Pittacus Lore"},{"book_id":8662836,"title":"Chain Reaction (Perfect Chemistry, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1327881446m\/8662836.jpg","authors":"Simone Elkeles"},{"book_id":8664353,"title":"Unbroken: A World War II Story of Survival, Resilience, and Redemption","image_url":"https:\/\/images.gr-assets.com\/books\/1327861115m\/8664353.jpg","authors":"Laura Hillenbrand"},{"book_id":8664368,"title":"The Finkler Question","image_url":"https:\/\/images.gr-assets.com\/books\/1319018978m\/8664368.jpg","authors":"Howard Jacobson"},{"book_id":8667848,"title":"A Discovery of Witches (All Souls Trilogy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1322168805m\/8667848.jpg","authors":"Deborah Harkness"},{"book_id":8677937,"title":"Invincible (Chronicles of Nick, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sherrilyn Kenyon"},{"book_id":8680278,"title":"We'll Always Have Summer (Summer, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1327054226m\/8680278.jpg","authors":"Jenny Han"},{"book_id":8680417,"title":"Midnight Riot (Peter Grant, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1389055317m\/8680417.jpg","authors":"Ben Aaronovitch"},{"book_id":8680418,"title":"Moon Over Soho (Peter Grant, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1320411169m\/8680418.jpg","authors":"Ben Aaronovitch"},{"book_id":8682579,"title":"I'll Walk Alone","image_url":"https:\/\/images.gr-assets.com\/books\/1327879369m\/8682579.jpg","authors":"Mary Higgins Clark"},{"book_id":8683812,"title":"The Paris Wife","image_url":"https:\/\/images.gr-assets.com\/books\/1320545874m\/8683812.jpg","authors":"Paula McLain"},{"book_id":8685612,"title":"The Iron Queen (The Iron Fey, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1321070331m\/8685612.jpg","authors":"Julie Kagawa"},{"book_id":8686068,"title":"The Devotion of Suspect X","image_url":"https:\/\/images.gr-assets.com\/books\/1312051518m\/8686068.jpg","authors":"Keigo Higashino, Alexander O. Smith"},{"book_id":8689913,"title":"Madame Tussaud: A Novel of the French Revolution","image_url":"https:\/\/images.gr-assets.com\/books\/1320558120m\/8689913.jpg","authors":"Michelle Moran"},{"book_id":8694522,"title":"The Witch's Daughter (The Witch's Daughter, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Paula Brackston"},{"book_id":8701129,"title":"Love You More (Tessa Leoni, #1; Detective D.D. Warren, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1385141722m\/8701129.jpg","authors":"Lisa Gardner"},{"book_id":8701960,"title":"The Information: A History, a Theory, a Flood","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Gleick"},{"book_id":8702806,"title":"Eve (Eve Duncan, #12; Eve, Quinn and Bonnie #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Iris Johansen"},{"book_id":8705784,"title":"Born at Midnight (Shadow Falls, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"C.C. Hunter"},{"book_id":8706185,"title":"Among Others","image_url":"https:\/\/images.gr-assets.com\/books\/1317792367m\/8706185.jpg","authors":"Jo Walton"},{"book_id":8709523,"title":"The Golden Lily (Bloodlines, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1360599818m\/8709523.jpg","authors":"Richelle Mead"},{"book_id":8709524,"title":"Silver Shadows (Bloodlines, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1389304070m\/8709524.jpg","authors":"Richelle Mead"},{"book_id":8709526,"title":"The Indigo Spell (Bloodlines, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1438483930m\/8709526.jpg","authors":"Richelle Mead"},{"book_id":8709527,"title":"Bloodlines (Bloodlines, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1297199431m\/8709527.jpg","authors":"Richelle Mead"},{"book_id":8709528,"title":"The Ruby Circle (Bloodlines, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1409815340m\/8709528.jpg","authors":"Richelle Mead"},{"book_id":8710484,"title":"La Carte et le territoire","image_url":"https:\/\/images.gr-assets.com\/books\/1498812783m\/8710484.jpg","authors":"Michel Houellebecq"},{"book_id":8712343,"title":"Kiss of Snow (Psy-Changeling #10)","image_url":"https:\/\/images.gr-assets.com\/books\/1417116892m\/8712343.jpg","authors":"Nalini Singh"},{"book_id":8718952,"title":"Vampire Academy Box Set (Vampire Academy, #1-4)","image_url":"https:\/\/images.gr-assets.com\/books\/1281267849m\/8718952.jpg","authors":"Richelle Mead"},{"book_id":8720415,"title":"Miles to Go (The Walk, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Richard Paul Evans"},{"book_id":8720917,"title":"You Against Me","image_url":"https:\/\/images.gr-assets.com\/books\/1311064228m\/8720917.jpg","authors":"Jenny Downham"},{"book_id":8724779,"title":"Marked \/ Betrayed \/ Chosen \/ Untamed \/ Hunted (House of Night #1-5)","image_url":"https:\/\/images.gr-assets.com\/books\/1347018756m\/8724779.jpg","authors":"P.C. Cast, Kristin Cast"},{"book_id":8726744,"title":"The Twilight Saga Complete Collection (Twilight, #1-4 + 3.5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Stephenie Meyer"},{"book_id":8727466,"title":"Why We Get Fat: And What to Do About It","image_url":"https:\/\/images.gr-assets.com\/books\/1320563681m\/8727466.jpg","authors":"Gary Taubes"},{"book_id":8752885,"title":"The Dragon's Path (The Dagger and the Coin, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1292362307m\/8752885.jpg","authors":"Daniel Abraham"},{"book_id":8755555,"title":"The Troubled Man (Kurt Wallander, #10)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Henning Mankell, Laurie Thompson"},{"book_id":8755776,"title":"City of Lost Souls (The Mortal Instruments, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1460477703m\/8755776.jpg","authors":"Cassandra Clare"},{"book_id":8755785,"title":"City of Heavenly Fire (The Mortal Instruments, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1460477794m\/8755785.jpg","authors":"Cassandra Clare"},{"book_id":8765012,"title":"Mystery (Alex Delaware, #26)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jonathan Kellerman"},{"book_id":8765461,"title":"Choosing to SEE","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mary Beth Chapman, Steven Curtis Chapman"},{"book_id":8785374,"title":"Snuff (Discworld, #39; City Watch #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1302694636m\/8785374.jpg","authors":"Terry Pratchett"},{"book_id":8788554,"title":"First Grave on the Right (Charley Davidson, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Darynda Jones"},{"book_id":8793878,"title":"The Keeping (Law of the Lycans, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Nicky Charles"},{"book_id":8803932,"title":"If I Die (Soul Screamers, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1304024127m\/8803932.jpg","authors":"Rachel Vincent"},{"book_id":8805443,"title":"The Sentry (Elvis Cole, #14; Joe Pike, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert Crais"},{"book_id":8811134,"title":"Fear (Gone, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1309186708m\/8811134.jpg","authors":"Michael Grant"},{"book_id":8811139,"title":"Light (Gone, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1331533067m\/8811139.jpg","authors":"Michael Grant"},{"book_id":8835379,"title":"Ruby Red (Precious Stone Trilogy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1312036605m\/8835379.jpg","authors":"Kerstin Gier, Anthea Bell"},{"book_id":8835897,"title":"Defiance (Strange Angels, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1282840844m\/8835897.jpg","authors":"Lili St. Crow, Lilith Saintcrow"},{"book_id":8843801,"title":"Eternal Rider (Lords of Deliverance, #1, Demonica, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1305020644m\/8843801.jpg","authors":"Larissa Ione"},{"book_id":8855321,"title":"Leviathan Wakes (The Expanse, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1411013134m\/8855321.jpg","authors":"James S.A. Corey"},{"book_id":8857310,"title":"Unfamiliar Fishes","image_url":"https:\/\/images.gr-assets.com\/books\/1311706005m\/8857310.jpg","authors":"Sarah Vowell"},{"book_id":8874743,"title":"When God Was a Rabbit","image_url":"https:\/\/images.gr-assets.com\/books\/1311417203m\/8874743.jpg","authors":"Sarah Winman"},{"book_id":8879121,"title":"Zita the Spacegirl (Zita the Spacegirl, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ben Hatke"},{"book_id":8909152,"title":"Attachments","image_url":"https:\/\/images.gr-assets.com\/books\/1499377988m\/8909152.jpg","authors":"Rainbow Rowell"},{"book_id":8935153,"title":"Hit List (Anita Blake, Vampire Hunter #20)","image_url":"https:\/\/images.gr-assets.com\/books\/1315176487m\/8935153.jpg","authors":"Laurell K. Hamilton"},{"book_id":8935689,"title":"Consider Phlebas (Culture, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327951890m\/8935689.jpg","authors":"Iain M. Banks"},{"book_id":8949352,"title":"Night Road","image_url":"https:\/\/images.gr-assets.com\/books\/1282369257m\/8949352.jpg","authors":"Kristin Hannah"},{"book_id":8951449,"title":"Hollowland (The Hollows, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1299468023m\/8951449.jpg","authors":"Amanda Hocking"},{"book_id":9018370,"title":"The Walking Dead, Vol. 13: Too Far Gone","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert Kirkman, Charlie Adlard, Cliff Rathburn"},{"book_id":9064899,"title":"Endlessly (Paranormalcy, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1320349604m\/9064899.jpg","authors":"Kiersten White"},{"book_id":9065265,"title":"Retribution (Dark-Hunter, #19)","image_url":"https:\/\/images.gr-assets.com\/books\/1315222730m\/9065265.jpg","authors":"Sherrilyn Kenyon"},{"book_id":9067850,"title":"The Throne of Fire (Kane Chronicles, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1366227973m\/9067850.jpg","authors":"Rick Riordan"},{"book_id":9086994,"title":"Aleph","image_url":"https:\/\/images.gr-assets.com\/books\/1397502326m\/9086994.jpg","authors":"Paulo Coelho"},{"book_id":9118135,"title":"State of Wonder","image_url":"https:\/\/images.gr-assets.com\/books\/1454428541m\/9118135.jpg","authors":"Ann Patchett"},{"book_id":9151181,"title":"Onward: How Starbucks Fought for Its Life without Losing Its Soul","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Howard Schultz, Joanne Gordon"},{"book_id":9160695,"title":"Battle Hymn of the Tiger Mother","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Amy Chua"},{"book_id":9165406,"title":"Okay for Now","image_url":"https:\/\/images.gr-assets.com\/books\/1388860777m\/9165406.jpg","authors":"Gary D. Schmidt"},{"book_id":9166559,"title":"These Things Hidden","image_url":"https:\/\/images.gr-assets.com\/books\/1296001564m\/9166559.jpg","authors":"Heather Gudenkauf"},{"book_id":9166877,"title":"The Girl in the Steel Corset (Steampunk Chronicles, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1297987541m\/9166877.jpg","authors":"Kady Cross"},{"book_id":9182478,"title":"Hourglass (Hourglass, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1360175970m\/9182478.jpg","authors":"Myra McEntire"},{"book_id":9219901,"title":"Unbearable Lightness: A Story of Loss and Gain","image_url":"https:\/\/images.gr-assets.com\/books\/1292739170m\/9219901.jpg","authors":"Portia de Rossi"},{"book_id":9260507,"title":"5 Very Good Reasons to Punch a Dolphin in the Mouth and Other Useful Guides","image_url":"https:\/\/images.gr-assets.com\/books\/1309685137m\/9260507.jpg","authors":"Matthew Inman"},{"book_id":9265453,"title":"Embassytown","image_url":"https:\/\/images.gr-assets.com\/books\/1320470326m\/9265453.jpg","authors":"China Mi\u00e9ville"},{"book_id":9265891,"title":"The Lost Gate (Mither Mages, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1312042223m\/9265891.jpg","authors":"Orson Scott Card"},{"book_id":9266769,"title":"Summer and the City (The Carrie Diaries, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1366212836m\/9266769.jpg","authors":"Candace Bushnell"},{"book_id":9266776,"title":"Epic Fail","image_url":"https:\/\/images.gr-assets.com\/books\/1293626043m\/9266776.jpg","authors":"Claire LaZebnik"},{"book_id":9266793,"title":"Never Have I Ever (The Lying Game, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1289526446m\/9266793.jpg","authors":"Sara Shepard"},{"book_id":9266810,"title":"Ten Things We Did (and Probably Shouldn't Have)","image_url":"https:\/\/images.gr-assets.com\/books\/1293821561m\/9266810.jpg","authors":"Sarah Mlynowski"},{"book_id":9268487,"title":"The Daylight War (Demon Cycle, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1360777092m\/9268487.jpg","authors":"Peter V. Brett"},{"book_id":9275658,"title":"Legend (Legend, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1501368160m\/9275658.jpg","authors":"Marie Lu"},{"book_id":9279177,"title":"The Lover's Dictionary","image_url":"https:\/\/images.gr-assets.com\/books\/1312055996m\/9279177.jpg","authors":"David Levithan"},{"book_id":9279734,"title":"Forever Mine (The Moreno Brothers, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327166807m\/9279734.jpg","authors":"Elizabeth Reyes"},{"book_id":9284655,"title":"Tiger's Curse (The Tiger Saga, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327878915m\/9284655.jpg","authors":"Colleen Houck"},{"book_id":9293020,"title":"The Elephant Tree","image_url":"https:\/\/images.gr-assets.com\/books\/1327248026m\/9293020.jpg","authors":"R.D. Ronald"},{"book_id":9296438,"title":"Save Me","image_url":"https:\/\/images.gr-assets.com\/books\/1311983193m\/9296438.jpg","authors":"Lisa Scottoline"},{"book_id":9297774,"title":"Eve (Eve, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1389188190m\/9297774.jpg","authors":"Anna Carey"},{"book_id":9300768,"title":"The Heroes (First Law World, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1375671200m\/9300768.jpg","authors":"Joe Abercrombie"},{"book_id":9305362,"title":"Captive Prince (Captive Prince, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1356028113m\/9305362.jpg","authors":"C.S. Pacat"},{"book_id":9307674,"title":"The Last Guardian (Artemis Fowl, #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1330969364m\/9307674.jpg","authors":"Eoin Colfer"},{"book_id":9329354,"title":"The Way of Kings, Part 1 (The Stormlight Archive #1.1)","image_url":"https:\/\/images.gr-assets.com\/books\/1357609842m\/9329354.jpg","authors":"Brandon Sanderson"},{"book_id":9349915,"title":"Red Riding Hood","image_url":"https:\/\/images.gr-assets.com\/books\/1344267754m\/9349915.jpg","authors":"Sarah Blakley-Cartwright, David Leslie Johnson, Catherine Hardwicke"},{"book_id":9361589,"title":"The Night Circus","image_url":"https:\/\/images.gr-assets.com\/books\/1387124618m\/9361589.jpg","authors":"Erin Morgenstern"},{"book_id":9366879,"title":"Bone: Quest for the Spark, Vol. 1","image_url":"https:\/\/images.gr-assets.com\/books\/1328839457m\/9366879.jpg","authors":"Tom Sniegoski, Jeff Smith, Thomas E. Sniegoski, Steve Hamaker"},{"book_id":9369720,"title":"Passion (Fallen, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1362339802m\/9369720.jpg","authors":"Lauren Kate"},{"book_id":9376345,"title":"Bite Club (The Morganville Vampires, #10)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rachel Caine"},{"book_id":9378297,"title":"Anna Dressed in Blood (Anna, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1398637405m\/9378297.jpg","authors":"Kendare Blake"},{"book_id":9394010,"title":"The Darkest Secret (Lords of the Underworld #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1288316327m\/9394010.jpg","authors":"Gena Showalter"},{"book_id":9395215,"title":"Everlasting (The Immortals, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1362336387m\/9395215.jpg","authors":"Alyson Noel"},{"book_id":9397967,"title":"Abandon (Abandon, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1324767084m\/9397967.jpg","authors":"Meg Cabot"},{"book_id":9399336,"title":"The Redhead Revealed (Redhead, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1285470017m\/9399336.jpg","authors":"Alice Clayton"},{"book_id":9403947,"title":"Something like Normal","image_url":"https:\/\/images.gr-assets.com\/books\/1336837143m\/9403947.jpg","authors":"Trish Doller"},{"book_id":9409458,"title":"Forever (The Wolves of Mercy Falls, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1285771367m\/9409458.jpg","authors":"Maggie Stiefvater"},{"book_id":9409469,"title":"The Gray Wolf Throne (Seven Realms, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1312142235m\/9409469.jpg","authors":"Cinda Williams Chima"},{"book_id":9410421,"title":"Chasing Fire","image_url":"https:\/\/images.gr-assets.com\/books\/1302982596m\/9410421.jpg","authors":"Nora Roberts"},{"book_id":9413044,"title":"Everneath (Everneath, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1340210035m\/9413044.jpg","authors":"Brodi Ashton"},{"book_id":9415951,"title":"Forgotten","image_url":"https:\/\/images.gr-assets.com\/books\/1327916264m\/9415951.jpg","authors":"Cat Patrick"},{"book_id":9418327,"title":"Bossypants","image_url":"https:\/\/images.gr-assets.com\/books\/1481509554m\/9418327.jpg","authors":"Tina Fey"},{"book_id":9424367,"title":"Prized (Birthmarked, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Caragh M. O'Brien"},{"book_id":9429531,"title":"The Dry Grass of August","image_url":"https:\/\/images.gr-assets.com\/books\/1327170212m\/9429531.jpg","authors":"Anna Jean Mayhew"},{"book_id":9436632,"title":"Vanish (Firelight, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1327879019m\/9436632.jpg","authors":"Sophie Jordan"},{"book_id":9436746,"title":"10th Anniversary (Women's Murder Club, #10)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Patterson, Maxine Paetro"},{"book_id":9439303,"title":"Life","image_url":"https:\/\/images.gr-assets.com\/books\/1327960451m\/9439303.jpg","authors":"Keith Richards"},{"book_id":9439989,"title":"Touch of Frost (Mythos Academy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1301505419m\/9439989.jpg","authors":"Jennifer Estep"},{"book_id":9440324,"title":"The Midnight Palace (Niebla, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1290459336m\/9440324.jpg","authors":"Carlos Ruiz Zaf\u00f3n, Lucia Graves"},{"book_id":9440448,"title":"Buried Prey (Lucas Davenport, #21)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Sandford"},{"book_id":9442157,"title":"Rock Hard (Sinners on Tour, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1295759548m\/9442157.jpg","authors":"Olivia Cunning"},{"book_id":9443405,"title":"The Pale King","image_url":"https:\/\/images.gr-assets.com\/books\/1324405497m\/9443405.jpg","authors":"David Foster Wallace, Michael Pietsch"},{"book_id":9460487,"title":"Miss Peregrine\u2019s Home for Peculiar Children (Miss Peregrine\u2019s Peculiar Children, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1472782916m\/9460487.jpg","authors":"Ransom Riggs"},{"book_id":9461872,"title":"Sisterhood Everlasting (Sisterhood, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1327878529m\/9461872.jpg","authors":"Ann Brashares"},{"book_id":9462775,"title":"The Last Little Blue Envelope (Little Blue Envelope, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1288297853m\/9462775.jpg","authors":"Maureen Johnson"},{"book_id":9462795,"title":"Starcrossed (Starcrossed, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1358266716m\/9462795.jpg","authors":"Josephine Angelini"},{"book_id":9462812,"title":"Die for Me (Revenants, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1358427893m\/9462812.jpg","authors":"Amy Plum"},{"book_id":9464733,"title":"Beauty Queens","image_url":"https:\/\/images.gr-assets.com\/books\/1289410187m\/9464733.jpg","authors":"Libba Bray"},{"book_id":9465845,"title":"Vespers Rising (The 39 Clues, #11)","image_url":"https:\/\/images.gr-assets.com\/books\/1357211079m\/9465845.jpg","authors":"Rick Riordan, Gordon Korman, Peter Lerangis, Jude Watson"},{"book_id":9476510,"title":"Those Guys Have All the Fun: Inside the World of ESPN","image_url":"https:\/\/images.gr-assets.com\/books\/1344271458m\/9476510.jpg","authors":"James Andrew Miller, Tom Shales"},{"book_id":9484114,"title":"The Happiness Advantage: The Seven Principles of Positive Psychology That Fuel Success and Performance at Work","image_url":"https:\/\/images.gr-assets.com\/books\/1381289860m\/9484114.jpg","authors":"Shawn Achor"},{"book_id":9489502,"title":"Cold Vengeance (Pendergast, #11)","image_url":"https:\/\/images.gr-assets.com\/books\/1344264848m\/9489502.jpg","authors":"Douglas Preston, Lincoln Child"},{"book_id":9496240,"title":"The Hangman's Daughter (The Hangman's Daughter, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327868295m\/9496240.jpg","authors":"Oliver P\u00f6tzsch, Lee Chadeayne"},{"book_id":9500416,"title":"Dreams of Joy (Shanghai Girls #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lisa See"},{"book_id":9503336,"title":"Silver Girl","image_url":"https:\/\/images.gr-assets.com\/books\/1344270562m\/9503336.jpg","authors":"Elin Hilderbrand"},{"book_id":9509287,"title":"The Sixth Man (Sean King & Michelle Maxwell, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Baldacci"},{"book_id":9509289,"title":"One Summer","image_url":"https:\/\/images.gr-assets.com\/books\/1344267627m\/9509289.jpg","authors":"David Baldacci"},{"book_id":9512985,"title":"The Personal MBA: Master the Art of Business","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Josh Kaufman"},{"book_id":9520360,"title":"The Son of Neptune (The Heroes of Olympus, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1464201114m\/9520360.jpg","authors":"Rick Riordan"},{"book_id":9526658,"title":"Black Dawn (The Morganville Vampires, #12)","image_url":"https:\/\/images.gr-assets.com\/books\/1318112062m\/9526658.jpg","authors":"Rachel Caine"},{"book_id":9528186,"title":"Pretty Little Liars (TV Series)","image_url":"https:\/\/images.gr-assets.com\/books\/1379594334m\/9528186.jpg","authors":"Lambert M. Surhone"},{"book_id":9529502,"title":"Big Nate on a Roll (Big Nate Novels, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lincoln Peirce"},{"book_id":9532302,"title":"The Last Werewolf (The Last Werewolf, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1287572224m\/9532302.jpg","authors":"Glen Duncan"},{"book_id":9533378,"title":"Hounded (The Iron Druid Chronicles, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327883998m\/9533378.jpg","authors":"Kevin Hearne"},{"book_id":9542259,"title":"Envy (Fallen Angels, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1464568467m\/9542259.jpg","authors":"J.R. Ward"},{"book_id":9542439,"title":"The Lady of the Rivers (The Plantagenet and Tudor Novels, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327946219m\/9542439.jpg","authors":"Philippa Gregory"},{"book_id":9545064,"title":"The Story of Beautiful Girl","image_url":"https:\/\/images.gr-assets.com\/books\/1336851169m\/9545064.jpg","authors":"Rachel Simon"},{"book_id":9553503,"title":"Angel Fire (Angel, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1329013097m\/9553503.jpg","authors":"L.A. Weatherly"},{"book_id":9565045,"title":"Second Grave on the Left (Charley Davidson, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Darynda Jones"},{"book_id":9565548,"title":"Grave Mercy (His Fair Assassin, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1320269319m\/9565548.jpg","authors":"Robin LaFevers"},{"book_id":9565574,"title":"Grave Dance (Alex Craft, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1327953315m\/9565574.jpg","authors":"Kalayna Price"},{"book_id":9572203,"title":"The Snowman (Harry Hole, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1355881478m\/9572203.jpg","authors":"Jo Nesb\u00f8, Don Bartlett"},{"book_id":9578590,"title":"Lost in Time (Blue Bloods, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1298681924m\/9578590.jpg","authors":"Melissa de la Cruz"},{"book_id":9578677,"title":"The Silent Girl (Rizzoli & Isles, #9)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tess Gerritsen"},{"book_id":9579634,"title":"Prince of Thorns (The Broken Empire, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327917754m\/9579634.jpg","authors":"Mark Lawrence"},{"book_id":9581001,"title":"Hard Bitten (Chicagoland Vampires, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1372850762m\/9581001.jpg","authors":"Chloe Neill"},{"book_id":9581507,"title":"Don't Breathe a Word","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jennifer McMahon"},{"book_id":9583508,"title":"Smokin' Seventeen (Stephanie Plum, #17)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Janet Evanovich, Lorelei King"},{"book_id":9591398,"title":"The Girl Who Circumnavigated Fairyland in a Ship of Her Own Making (Fairyland, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Catherynne M. Valente, Ana Juan"},{"book_id":9592213,"title":"Faith","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jennifer Haigh"},{"book_id":9593911,"title":"Pandemonium (Delirium, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1310371414m\/9593911.jpg","authors":"Lauren Oliver"},{"book_id":9593913,"title":"Requiem (Delirium, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1340992438m\/9593913.jpg","authors":"Lauren Oliver"},{"book_id":9595620,"title":"Hammered (The Iron Druid Chronicles, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kevin Hearne"},{"book_id":9595650,"title":"Hexed (The Iron Druid Chronicles, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kevin Hearne"},{"book_id":9606002,"title":"The Preacher (Patrik Hedstr\u00f6m, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Camilla L\u00e4ckberg, Steven T. Murray"},{"book_id":9615347,"title":"Anya's Ghost","image_url":"https:\/\/images.gr-assets.com\/books\/1316739317m\/9615347.jpg","authors":"Vera Brosgol"},{"book_id":9627755,"title":"Isla and the Happily Ever After (Anna and the French Kiss, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1362064564m\/9627755.jpg","authors":"Stephanie Perkins"},{"book_id":9628743,"title":"The Social Animal: The Hidden Sources of Love, Character, and Achievement","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Brooks"},{"book_id":9634967,"title":"Robopocalypse (Robopocalypse, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327885891m\/9634967.jpg","authors":"Daniel H. Wilson"},{"book_id":9635495,"title":"Fallen (Will Trent, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Karin Slaughter"},{"book_id":9635657,"title":"Tales from a Not-So-Talented Pop Star (Dork Diaries, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1370064614m\/9635657.jpg","authors":"Rachel Ren\u00e9e Russell"},{"book_id":9637479,"title":"Dragon Bound (Elder Races, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1312822853m\/9637479.jpg","authors":"Thea Harrison"},{"book_id":9639197,"title":"Turn of Mind","image_url":"https:\/\/images.gr-assets.com\/books\/1320547877m\/9639197.jpg","authors":"Alice LaPlante"},{"book_id":9644151,"title":"Ashfall (Ashfall, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1301592315m\/9644151.jpg","authors":"Mike Mullin"},{"book_id":9647532,"title":"Fuzzy Nation","image_url":"https:\/\/images.gr-assets.com\/books\/1316132345m\/9647532.jpg","authors":"John Scalzi"},{"book_id":9659607,"title":"The Iron Knight (The Iron Fey, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1375920888m\/9659607.jpg","authors":"Julie Kagawa"},{"book_id":9662386,"title":"Tiger's Quest (The Tiger Saga, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Colleen Houck"},{"book_id":9666241,"title":"\u0627\u0644\u0646\u0628\u0637\u064a","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"\u064a\u0648\u0633\u0641 \u0632\u064a\u062f\u0627\u0646, Youssef Ziedan"},{"book_id":9666812,"title":"Hades (Halo, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1478985289m\/9666812.jpg","authors":"Alexandra Adornetto"},{"book_id":9670094,"title":"Through My Eyes","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tim Tebow, Nathan Whitaker"},{"book_id":9673436,"title":"The Invention of Hugo Cabret","image_url":"https:\/\/images.gr-assets.com\/books\/1422312376m\/9673436.jpg","authors":"Brian Selznick"},{"book_id":9674335,"title":"Locke & Key, Vol. 4: Keys to the Kingdom","image_url":"https:\/\/images.gr-assets.com\/books\/1377306592m\/9674335.jpg","authors":"Joe Hill, Gabriel Rodr\u00edguez"},{"book_id":9677870,"title":"Press Here","image_url":"https:\/\/images.gr-assets.com\/books\/1327934372m\/9677870.jpg","authors":"Herv\u00e9 Tullet, Christopher Franceschelli"},{"book_id":9680114,"title":"Pure (Pure, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1302743156m\/9680114.jpg","authors":"Julianna Baggott"},{"book_id":9680718,"title":"Half-Blood (Covenant, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1311865840m\/9680718.jpg","authors":"Jennifer L. Armentrout"},{"book_id":9681098,"title":"The Fifth Witness (Mickey Haller, #5; Harry Bosch Universe, #20)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Michael Connelly"},{"book_id":9681214,"title":"The Goddess Test (Goddess Test, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1387217173m\/9681214.jpg","authors":"Aimee Carter"},{"book_id":9682816,"title":"Kill Me If You Can","image_url":"https:\/\/images.gr-assets.com\/books\/1344263782m\/9682816.jpg","authors":"James Patterson, Marshall Karp"},{"book_id":9684523,"title":"Caleb's Crossing","image_url":"https:\/\/images.gr-assets.com\/books\/1303284000m\/9684523.jpg","authors":"Geraldine Brooks"},{"book_id":9712341,"title":"A Girl Like You","image_url":"https:\/\/images.gr-assets.com\/books\/1289919160m\/9712341.jpg","authors":"Gemma Burgess"},{"book_id":9712492,"title":"Providence (Providence, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1358276101m\/9712492.jpg","authors":"Jamie McGuire"},{"book_id":9722217,"title":"\u0631\u063a\u0645 \u0627\u0644\u0641\u0631\u0627\u0642","image_url":"https:\/\/images.gr-assets.com\/books\/1452204772m\/9722217.jpg","authors":"\u0646\u0648\u0631 \u0639\u0628\u062f\u0627\u0644\u0645\u062c\u064a\u062f"},{"book_id":9724798,"title":"The Violets of March","image_url":"https:\/\/images.gr-assets.com\/books\/1299776782m\/9724798.jpg","authors":"Sarah Jio"},{"book_id":9729504,"title":"Lost in Shangri-la: A True Story of Survival, Adventure, and the Most Incredible Rescue Mission of World War II","image_url":"https:\/\/images.gr-assets.com\/books\/1299264036m\/9729504.jpg","authors":"Mitchell Zuckoff"},{"book_id":9736930,"title":"Before I Go to Sleep","image_url":"https:\/\/images.gr-assets.com\/books\/1358353512m\/9736930.jpg","authors":"S.J. Watson"},{"book_id":9739365,"title":"SEAL Team Six: Memoirs of an Elite Navy SEAL Sniper","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Howard E. Wasdin, Stephen Templin"},{"book_id":9748274,"title":"A Tale of Two Cities \/ Great Expectations","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Charles Dickens"},{"book_id":9751378,"title":"Summer Rental","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mary Kay Andrews"},{"book_id":9757266,"title":"Sometimes It Happens","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lauren Barnholdt"},{"book_id":9758764,"title":"Then Came You","image_url":"https:\/\/images.gr-assets.com\/books\/1308787263m\/9758764.jpg","authors":"Jennifer Weiner"},{"book_id":9761771,"title":"Pure (Covenant, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1296780419m\/9761771.jpg","authors":"Jennifer L. Armentrout"},{"book_id":9761778,"title":"Deity (Covenant, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1323658176m\/9761778.jpg","authors":"Jennifer L. Armentrout"},{"book_id":9792287,"title":"The Rose Garden","image_url":"https:\/\/images.gr-assets.com\/books\/1327951839m\/9792287.jpg","authors":"Susanna Kearsley"},{"book_id":9798177,"title":"Middle School: The Worst Years of My Life (Midde School, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Patterson, Chris Tebbetts, Laura Park"},{"book_id":9799572,"title":"Rock Chick Redemption (Rock Chick, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1409609236m\/9799572.jpg","authors":"Kristen Ashley"},{"book_id":9802372,"title":"The Name of the Star (Shades of London, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327880449m\/9802372.jpg","authors":"Maureen Johnson"},{"book_id":9814682,"title":"A Song of Ice and Fire (A Song of Ice and Fire, #1-4)","image_url":"https:\/\/images.gr-assets.com\/books\/1328046798m\/9814682.jpg","authors":"George R.R. Martin"},{"book_id":9815702,"title":"Drink Deep (Chicagoland Vampires, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1296789716m\/9815702.jpg","authors":"Chloe Neill"},{"book_id":9827912,"title":"Incognito: The Secret Lives of the Brain","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Eagleman"},{"book_id":9832370,"title":"BookRags Summary: A Storm of Swords","image_url":"https:\/\/images.gr-assets.com\/books\/1369340463m\/9832370.jpg","authors":"BookRags"},{"book_id":9833184,"title":"The Fiery Heart (Bloodlines, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1383243238m\/9833184.jpg","authors":"Richelle Mead"},{"book_id":9835731,"title":"The Hypnotist (Joona Linna, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1482166605m\/9835731.jpg","authors":"Lars Kepler, Ann Long"},{"book_id":9838800,"title":"Shelter (Mickey Bolitar, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Harlan Coben"},{"book_id":9850443,"title":"The Sisters Brothers","image_url":"https:\/\/images.gr-assets.com\/books\/1291999900m\/9850443.jpg","authors":"Patrick deWitt, Marcelo Barb\u00e3o"},{"book_id":9858488,"title":"Dead End in Norvelt","image_url":"https:\/\/images.gr-assets.com\/books\/1371074276m\/9858488.jpg","authors":"Jack Gantos"},{"book_id":9858714,"title":"The Mind Readers (Mind Readers, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1291820285m\/9858714.jpg","authors":"Lori Brighton"},{"book_id":9862761,"title":"1493: Uncovering the New World Columbus Created","image_url":"https:\/\/images.gr-assets.com\/books\/1327900945m\/9862761.jpg","authors":"Charles C. Mann"},{"book_id":9864913,"title":"Jaya: An Illustrated Retelling of the Mahabharata","image_url":"https:\/\/images.gr-assets.com\/books\/1357361164m\/9864913.jpg","authors":"Devdutt Pattanaik"},{"book_id":9876989,"title":"Blue Exorcist, Vol. 1 (Blue Exorcist, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1432642113m\/9876989.jpg","authors":"Kazue Kato, John Werry"},{"book_id":9888775,"title":"Catching Jordan","image_url":"https:\/\/images.gr-assets.com\/books\/1327875803m\/9888775.jpg","authors":"Miranda Kenneally"},{"book_id":9893331,"title":"Twisted (Pretty Little Liars, #9)","image_url":"https:\/\/images.gr-assets.com\/books\/1316975768m\/9893331.jpg","authors":"Sara Shepard"},{"book_id":9893355,"title":"Stunning (Pretty Little Liars, #11)","image_url":"https:\/\/images.gr-assets.com\/books\/1320516289m\/9893355.jpg","authors":"Sara Shepard"},{"book_id":9897164,"title":"Apollyon (Covenant, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1350101819m\/9897164.jpg","authors":"Jennifer L. Armentrout"},{"book_id":9902804,"title":"Lies That Chelsea Handler Told Me","image_url":"https:\/\/images.gr-assets.com\/books\/1344264536m\/9902804.jpg","authors":"Chelsea Handler, Johnny Kansas, Stephanie Stehling, Heather McDonald, Roy Handler, Brad Wollack, Amber Mazzola, Josh Wolf, Shoshanna Handler, Eva Magdalenski, Amy Meyer, Glen Handler, Dave Mallow, Sarah Colonna"},{"book_id":9912994,"title":"Damned (Damned, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1296236310m\/9912994.jpg","authors":"Chuck Palahniuk"},{"book_id":9915707,"title":"Endure (Need, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1330073413m\/9915707.jpg","authors":"Carrie Jones"},{"book_id":9917879,"title":"The Unwanteds (Unwanteds, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1308432658m\/9917879.jpg","authors":"Lisa McMann"},{"book_id":9917938,"title":"Blood Red Road (Dust Lands, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1293651959m\/9917938.jpg","authors":"Moira Young"},{"book_id":9917945,"title":"Perfect (Impulse, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1296179689m\/9917945.jpg","authors":"Ellen Hopkins"},{"book_id":9917998,"title":"Dust & Decay (Rot & Ruin, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1293823083m\/9917998.jpg","authors":"Jonathan Maberry"},{"book_id":9918083,"title":"Goliath (Leviathan, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1299808712m\/9918083.jpg","authors":"Scott Westerfeld, Keith Thompson"},{"book_id":9923372,"title":"Maine","image_url":"https:\/\/images.gr-assets.com\/books\/1295996313m\/9923372.jpg","authors":"J. Courtney Sullivan"},{"book_id":9925913,"title":"Shock Wave (Virgil Flowers, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1292472145m\/9925913.jpg","authors":"John Sandford"},{"book_id":9938498,"title":"In the Garden of Beasts: Love, Terror, and an American Family in Hitler's Berlin","image_url":"https:\/\/images.gr-assets.com\/books\/1327864303m\/9938498.jpg","authors":"Erik Larson"},{"book_id":9943270,"title":"Dark Triumph (His Fair Assassin, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1346852168m\/9943270.jpg","authors":"Robin LaFevers"},{"book_id":9961796,"title":"Lola and the Boy Next Door (Anna and the French Kiss, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1358271832m\/9961796.jpg","authors":"Stephanie Perkins"},{"book_id":9962040,"title":"In Bed with a Highlander (McCabe Trilogy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1348705921m\/9962040.jpg","authors":"Maya Banks"},{"book_id":9969571,"title":"Ready Player One","image_url":"https:\/\/images.gr-assets.com\/books\/1500930947m\/9969571.jpg","authors":"Ernest Cline"},{"book_id":9970042,"title":"Whispers Under Ground (Peter Grant, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1341006340m\/9970042.jpg","authors":"Ben Aaronovitch"},{"book_id":9972053,"title":"If You Ask Me (And of Course You Won't)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Betty White"},{"book_id":9975679,"title":"Ashes (Ashes Trilogy, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ilsa J. Bick"},{"book_id":9975779,"title":"Portrait of a Spy (Gabriel Allon, #11)","image_url":"https:\/\/images.gr-assets.com\/books\/1468408664m\/9975779.jpg","authors":"Daniel Silva"},{"book_id":9995135,"title":"The Darkest Seduction (Lords of the Underworld #9)","image_url":"https:\/\/images.gr-assets.com\/books\/1316891535m\/9995135.jpg","authors":"Gena Showalter"},{"book_id":9998705,"title":"Flash and Bones (Temperance Brennan, #14)","image_url":"https:\/\/images.gr-assets.com\/books\/1306253347m\/9998705.jpg","authors":"Kathy Reichs"},{"book_id":9999107,"title":"The American Heiress","image_url":"https:\/\/images.gr-assets.com\/books\/1307342832m\/9999107.jpg","authors":"Daisy Goodwin"},{"book_id":10008056,"title":"Journal 64 (Afdeling Q, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1424299324m\/10008056.jpg","authors":"Jussi Adler-Olsen"},{"book_id":10025305,"title":"Clockwork Prince (The Infernal Devices, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1460477747m\/10025305.jpg","authors":"Cassandra Clare"},{"book_id":10032672,"title":"The Language of Flowers","image_url":"https:\/\/images.gr-assets.com\/books\/1333577674m\/10032672.jpg","authors":"Vanessa Diffenbaugh"},{"book_id":10047589,"title":"Girls in White Dresses","image_url":"https:\/\/images.gr-assets.com\/books\/1320442277m\/10047589.jpg","authors":"Jennifer Close"},{"book_id":10049436,"title":"The Single Girl's To-Do List","image_url":"https:\/\/images.gr-assets.com\/books\/1327955203m\/10049436.jpg","authors":"Lindsey Kelk"},{"book_id":10054335,"title":"Rules of Civility","image_url":"https:\/\/images.gr-assets.com\/books\/1311705045m\/10054335.jpg","authors":"Amor Towles"},{"book_id":10059498,"title":"The Midwife's Confession","image_url":"https:\/\/images.gr-assets.com\/books\/1323870279m\/10059498.jpg","authors":"Diane Chamberlain"},{"book_id":10079321,"title":"The Magician King (The Magicians, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1316177353m\/10079321.jpg","authors":"Lev Grossman"},{"book_id":10088913,"title":"\u0645\u062e\u0637\u0648\u0637\u0629 \u0628\u0646 \u0625\u0633\u062d\u0627\u0642: \u0645\u062f\u064a\u0646\u0629 \u0627\u0644\u0645\u0648\u062a\u0649","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"\u062d\u0633\u0646 \u0627\u0644\u062c\u0646\u062f\u064a"},{"book_id":10098912,"title":"Chanakya's Chant","image_url":"https:\/\/images.gr-assets.com\/books\/1327939570m\/10098912.jpg","authors":"Ashwin Sanghi"},{"book_id":10108463,"title":"The Devil All the Time","image_url":"https:\/\/images.gr-assets.com\/books\/1320561517m\/10108463.jpg","authors":"Donald Ray Pollock"},{"book_id":10111087,"title":"Turn Right at Machu Picchu: Rediscovering the Lost City One Step at a Time","image_url":"https:\/\/images.gr-assets.com\/books\/1311704972m\/10111087.jpg","authors":"Mark Adams"},{"book_id":10112885,"title":"Night Film","image_url":"https:\/\/images.gr-assets.com\/books\/1363819140m\/10112885.jpg","authors":"Marisha Pessl"},{"book_id":10115852,"title":"Love Wins: A Book About Heaven, Hell, and the Fate of Every Person Who Ever Lived","image_url":"https:\/\/images.gr-assets.com\/books\/1327878550m\/10115852.jpg","authors":"Rob Bell"},{"book_id":10127019,"title":"The Lean Startup: How Today's Entrepreneurs Use Continuous Innovation to Create Radically Successful Businesses","image_url":"https:\/\/images.gr-assets.com\/books\/1333576876m\/10127019.jpg","authors":"Eric Ries"},{"book_id":10128428,"title":"Wonderstruck","image_url":"https:\/\/images.gr-assets.com\/books\/1327885739m\/10128428.jpg","authors":"Brian Selznick"},{"book_id":10131648,"title":"The Greater Journey: Americans in Paris","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David McCullough"},{"book_id":10138607,"title":"Habibi","image_url":"https:\/\/images.gr-assets.com\/books\/1327899014m\/10138607.jpg","authors":"Craig Thompson"},{"book_id":10140661,"title":"Gabriel's Inferno (Gabriel's Inferno, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1301789770m\/10140661.jpg","authors":"Sylvain Reynard"},{"book_id":10149142,"title":"The Family Fang","image_url":"https:\/\/images.gr-assets.com\/books\/1444101399m\/10149142.jpg","authors":"Kevin Wilson"},{"book_id":10161216,"title":"Mr. Churchill's Secretary (Maggie Hope Mystery, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1333578794m\/10161216.jpg","authors":"Susan Elia MacNeal"},{"book_id":10163292,"title":"The Last Letter from Your Lover","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jojo Moyes"},{"book_id":10165727,"title":"Froi of the Exiles (Lumatere Chronicles, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1306866851m\/10165727.jpg","authors":"Melina Marchetta"},{"book_id":10169662,"title":"Never Knowing","image_url":"https:\/\/images.gr-assets.com\/books\/1294615110m\/10169662.jpg","authors":"Chevy Stevens"},{"book_id":10193062,"title":"Outpost (Razorland, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1343084394m\/10193062.jpg","authors":"Ann Aguirre"},{"book_id":10194157,"title":"Shadow and Bone (Shadow and Bone, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1339533695m\/10194157.jpg","authors":"Leigh Bardugo"},{"book_id":10194514,"title":"Pushing the Limits (Pushing the Limits, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1322770025m\/10194514.jpg","authors":"Katie McGarry"},{"book_id":10196362,"title":"The Accident","image_url":"https:\/\/images.gr-assets.com\/books\/1320390347m\/10196362.jpg","authors":"Linwood Barclay"},{"book_id":10209997,"title":"The Night Strangers","image_url":"https:\/\/images.gr-assets.com\/books\/1308866180m\/10209997.jpg","authors":"Chris Bohjalian"},{"book_id":10211494,"title":"Stories I Only Tell My Friends","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rob Lowe"},{"book_id":10215349,"title":"The Immortal Rules (Blood of Eden, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1323357921m\/10215349.jpg","authors":"Julie Kagawa"},{"book_id":10252302,"title":"Blue Nights","image_url":"https:\/\/images.gr-assets.com\/books\/1319148558m\/10252302.jpg","authors":"Joan Didion"},{"book_id":10256723,"title":"Ghost in the Wires: My Adventures as the World's Most Wanted Hacker","image_url":"https:\/\/images.gr-assets.com\/books\/1344265017m\/10256723.jpg","authors":"Kevin D. Mitnick, William L. Simon, Steve Wozniak"},{"book_id":10295484,"title":"Heart on a Chain","image_url":"https:\/\/images.gr-assets.com\/books\/1326962009m\/10295484.jpg","authors":"Cindy C. Bennett"},{"book_id":10305231,"title":"The Next Always (Inn BoonsBoro, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1491591796m\/10305231.jpg","authors":"Nora Roberts, MacLeod Andrews"},{"book_id":10305247,"title":"The Blackhouse (Lewis Trilogy, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Peter May"},{"book_id":10306358,"title":"We the Animals","image_url":"https:\/\/images.gr-assets.com\/books\/1327900720m\/10306358.jpg","authors":"Justin Torres"},{"book_id":10314376,"title":"The Prague Cemetery","image_url":"https:\/\/images.gr-assets.com\/books\/1327902035m\/10314376.jpg","authors":"Umberto Eco, Richard Dixon"},{"book_id":10324808,"title":"Dragon's Oath (House of Night Novellas, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1359740283m\/10324808.jpg","authors":"P.C. Cast, Kristin Cast"},{"book_id":10327303,"title":"Uncommon Criminals (Heist Society, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1298155996m\/10327303.jpg","authors":"Ally Carter"},{"book_id":10335308,"title":"Is Everyone Hanging Out Without Me? (And Other Concerns)","image_url":"https:\/\/images.gr-assets.com\/books\/1443264638m\/10335308.jpg","authors":"Mindy Kaling"},{"book_id":10335318,"title":"Destiny of the Republic: A Tale of Madness, Medicine and the Murder of a President","image_url":"https:\/\/images.gr-assets.com\/books\/1327883084m\/10335318.jpg","authors":"Candice Millard"},{"book_id":10343389,"title":"Kill Alex Cross (Alex Cross #18)","image_url":"https:\/\/images.gr-assets.com\/books\/1338802382m\/10343389.jpg","authors":"James Patterson"},{"book_id":10345927,"title":"A Million Suns (Across the Universe, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1330214586m\/10345927.jpg","authors":"Beth Revis"},{"book_id":10345937,"title":"Shades of Earth (Across the Universe, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1346494567m\/10345937.jpg","authors":"Beth Revis"},{"book_id":10357575,"title":"1Q84","image_url":"https:\/\/images.gr-assets.com\/books\/1483103331m\/10357575.jpg","authors":"Haruki Murakami, Jay Rubin, Philip Gabriel"},{"book_id":10357792,"title":"Up from the Grave (Night Huntress, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1367085937m\/10357792.jpg","authors":"Jeaniene Frost"},{"book_id":10364994,"title":"The Submission","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Amy Waldman"},{"book_id":10365343,"title":"Zone One","image_url":"https:\/\/images.gr-assets.com\/books\/1327888785m\/10365343.jpg","authors":"Colson Whitehead"},{"book_id":10374638,"title":"The Little Coffee Shop of Kabul","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Deborah Rodriguez"},{"book_id":10378106,"title":"Never Love a Highlander (McCabe Trilogy, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1348707357m\/10378106.jpg","authors":"Maya Banks"},{"book_id":10399742,"title":"Private London (Private #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1328415596m\/10399742.jpg","authors":"James Patterson, Mark Pearson"},{"book_id":10400407,"title":"\u0641\u064a \u062f\u064a\u0633\u0645\u0628\u0631 \u062a\u0646\u062a\u0647\u064a \u0643\u0644 \u0627\u0644\u0623\u062d\u0644\u0627\u0645","image_url":"https:\/\/images.gr-assets.com\/books\/1304699101m\/10400407.jpg","authors":"\u0623\u062b\u064a\u0631 \u0639\u0628\u062f\u0627\u0644\u0644\u0647 \u0627\u0644\u0646\u0634\u0645\u064a"},{"book_id":10401084,"title":"Storm (Elemental, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1325995724m\/10401084.jpg","authors":"Brigid Kemmerer"},{"book_id":10402992,"title":"New York to Dallas (In Death, #33)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"J.D. Robb, Susan Ericksen"},{"book_id":10407279,"title":"Deadlocked (Sookie Stackhouse, #12)","image_url":"https:\/\/images.gr-assets.com\/books\/1357995380m\/10407279.jpg","authors":"Charlaine Harris"},{"book_id":10414941,"title":"Catherine the Great: Portrait of a Woman","image_url":"https:\/\/images.gr-assets.com\/books\/1403395276m\/10414941.jpg","authors":"Robert K. Massie"},{"book_id":10421530,"title":"Kiss of Frost (Mythos Academy, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1310420615m\/10421530.jpg","authors":"Jennifer Estep"},{"book_id":10428708,"title":"The Affair (Jack Reacher, #16)","image_url":"https:\/\/images.gr-assets.com\/books\/1327982045m\/10428708.jpg","authors":"Lee Child"},{"book_id":10428803,"title":"A Rogue by Any Other Name (The Rules of Scoundrels, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327928208m\/10428803.jpg","authors":"Sarah MacLean"},{"book_id":10429025,"title":"A Beautiful Dark (A Beautiful Dark, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327916579m\/10429025.jpg","authors":"Jocelyn Davies"},{"book_id":10429037,"title":"Ruthless (Pretty Little Liars, #10)","image_url":"https:\/\/images.gr-assets.com\/books\/1314802629m\/10429037.jpg","authors":"Sara Shepard"},{"book_id":10429045,"title":"Shatter Me (Shatter Me, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1310649047m\/10429045.jpg","authors":"Tahereh Mafi"},{"book_id":10429092,"title":"The Girl of Fire and Thorns (Fire and Thorns, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1323448113m\/10429092.jpg","authors":"Rae Carson"},{"book_id":10431447,"title":"Wildwood (Wildwood Chronicles, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Colin Meloy, Carson Ellis"},{"book_id":10433900,"title":"Variant (Variant, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1298564680m\/10433900.jpg","authors":"Robison Wells"},{"book_id":10439703,"title":"Aloha from Hell (Sandman Slim, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1302271758m\/10439703.jpg","authors":"Richard Kadrey"},{"book_id":10445208,"title":"Touch of Power (Healer, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1317629193m\/10445208.jpg","authors":"Maria V. Snyder"},{"book_id":10450750,"title":"Avatar: The Last Airbender: The Lost Adventures","image_url":"https:\/\/images.gr-assets.com\/books\/1297596036m\/10450750.jpg","authors":"Bryan Konietzko, Michael Dante DiMartino, Aaron Ehasz, Alison Wilgus, Amy Kim Ganter, Brian Ralph, Corey Lewis, Dave Roman, Elsa Garagarza, Ethan Spaulding, Frank Pittarese, Gurihiru, J. Torres, Joaquim Dos Santos, Johane Matte, John O'Bryan, Joshua Hamilton, Justin Ridge, Kaite Mattila, May Chan, Rawles Marie Lumumba, Reagan Lodge, Tim Hedrick, Tom McWeeney"},{"book_id":10464963,"title":"The Buddha in the Attic","image_url":"https:\/\/images.gr-assets.com\/books\/1327878988m\/10464963.jpg","authors":"Julie Otsuka"},{"book_id":10468258,"title":"The Finding (Law of the Lycans, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1344881680m\/10468258.jpg","authors":"Nicky Charles"},{"book_id":10473214,"title":"13 Gifts (Willow Falls, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1302009711m\/10473214.jpg","authors":"Wendy Mass"},{"book_id":10503124,"title":"The Jefferson Key (Cotton Malone, #7)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Steve Berry"},{"book_id":10507293,"title":"The Selection (The Selection, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1322103400m\/10507293.jpg","authors":"Kiera Cass"},{"book_id":10508526,"title":"The Chronicles of Harris Burdick: 14 Amazing Authors Tell the Tales","image_url":"https:\/\/images.gr-assets.com\/books\/1327949098m\/10508526.jpg","authors":"Chris Van Allsburg, Lois Lowry, Kate DiCamillo, M.T. Anderson, Louis Sachar, Stephen King, Tabitha King, Jon Scieszka, Sherman Alexie, Gregory Maguire, Cory Doctorow, Jules Feiffer, Linda Sue Park, Walter Dean Myers, Lemony Snicket"},{"book_id":10517947,"title":"Full Black (Scot Harvath, #10)","image_url":"https:\/\/images.gr-assets.com\/books\/1393773645m\/10517947.jpg","authors":"Brad Thor"},{"book_id":10518110,"title":"The Bite Before Christmas (Argeneau, #15.5; Night Huntress, #6.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1328313295m\/10518110.jpg","authors":"Lynsay Sands, Jeaniene Frost"},{"book_id":10518423,"title":"The Soldier's Wife","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Margaret Leroy"},{"book_id":10532477,"title":"Heat Rises (Nikki Heat, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1302579268m\/10532477.jpg","authors":"Richard Castle"},{"book_id":10537195,"title":"The Last Council (Amulet, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1422047373m\/10537195.jpg","authors":"Kazu Kibuishi"},{"book_id":10549501,"title":"Last Breath (The Morganville Vampires, #11)","image_url":"https:\/\/images.gr-assets.com\/books\/1327900044m\/10549501.jpg","authors":"Rachel Caine"},{"book_id":10551947,"title":"The Outcasts (Brotherband Chronicles, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327968303m\/10551947.jpg","authors":"John Flanagan"},{"book_id":10552338,"title":"Reamde","image_url":"https:\/\/images.gr-assets.com\/books\/1305993115m\/10552338.jpg","authors":"Neal Stephenson"},{"book_id":10560331,"title":"Out of Sight, Out of Time (Gallagher Girls, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1314135923m\/10560331.jpg","authors":"Ally Carter"},{"book_id":10576365,"title":"The Darkest Minds (The Darkest Minds, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1343178841m\/10576365.jpg","authors":"Alexandra Bracken"},{"book_id":10586539,"title":"Wake (Watersong #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1344231690m\/10586539.jpg","authors":"Amanda Hocking"},{"book_id":10587120,"title":"Killing Lincoln: The Shocking Assassination that Changed America Forever","image_url":"https:\/\/images.gr-assets.com\/books\/1317793681m\/10587120.jpg","authors":"Bill O'Reilly, Martin Dugard"},{"book_id":10594929,"title":"Out of Oz (The Wicked Years, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1370992585m\/10594929.jpg","authors":"Gregory Maguire, Douglas Smith"},{"book_id":10596724,"title":"Horde (Razorland, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1362287692m\/10596724.jpg","authors":"Ann Aguirre"},{"book_id":10599302,"title":"Head Over Heels (Lucky Harbor, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1302052809m\/10599302.jpg","authors":"Jill Shalvis"},{"book_id":10599805,"title":"A Perfect Blood (The Hollows, #10)","image_url":"https:\/\/images.gr-assets.com\/books\/1312426322m\/10599805.jpg","authors":"Kim Harrison"},{"book_id":10600242,"title":"How to Be a Woman","image_url":"https:\/\/images.gr-assets.com\/books\/1405909800m\/10600242.jpg","authors":"Caitlin Moran"},{"book_id":10604115,"title":"Happy Accidents: A Memoir","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jane Lynch, Lisa Dickey"},{"book_id":10626594,"title":"The Scorpio Races","image_url":"https:\/\/images.gr-assets.com\/books\/1461209661m\/10626594.jpg","authors":"Maggie Stiefvater"},{"book_id":10637748,"title":"The Pledge (The Pledge, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327878861m\/10637748.jpg","authors":"Kimberly Derting"},{"book_id":10637766,"title":"Silence (Hush, Hush, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1362408152m\/10637766.jpg","authors":"Becca Fitzpatrick"},{"book_id":10644930,"title":"11\/22\/63","image_url":"https:\/\/images.gr-assets.com\/books\/1327876792m\/10644930.jpg","authors":"Stephen King"},{"book_id":10659536,"title":"Every Thing on It","image_url":"https:\/\/images.gr-assets.com\/books\/1331416624m\/10659536.jpg","authors":"Shel Silverstein"},{"book_id":10661081,"title":"Vampire Academy: The Ultimate Guide (Vampire Academy)","image_url":"https:\/\/images.gr-assets.com\/books\/1327901152m\/10661081.jpg","authors":"Michelle Rowen, Richelle Mead"},{"book_id":10664113,"title":"A Dance with Dragons (A Song of Ice and Fire, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1327885335m\/10664113.jpg","authors":"George R.R. Martin"},{"book_id":10677213,"title":"Van Gogh: The Life","image_url":"https:\/\/images.gr-assets.com\/books\/1411005913m\/10677213.jpg","authors":"Steven Naifeh, Gregory White Smith"},{"book_id":10677277,"title":"Article 5 (Article 5, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1306520962m\/10677277.jpg","authors":"Kristen Simmons"},{"book_id":10680329,"title":"A Trick of the Light (Chief Inspector Armand Gamache, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1327900478m\/10680329.jpg","authors":"Louise Penny"},{"book_id":10706120,"title":"A King's Ransom (The 39 Clues: Cahills vs. Vespers, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1329085934m\/10706120.jpg","authors":"Jude Watson"},{"book_id":10706934,"title":"\u0628\u064a\u0643\u0627\u0633\u0648 \u0648\u0633\u062a\u0627\u0631\u0628\u0643\u0633","image_url":"https:\/\/images.gr-assets.com\/books\/1319030238m\/10706934.jpg","authors":"\u064a\u0627\u0633\u0631 \u062d\u0627\u0631\u0628"},{"book_id":10710392,"title":"Chopsticks","image_url":"https:\/\/images.gr-assets.com\/books\/1364073067m\/10710392.jpg","authors":"Jessica Anthony, Rodrigo Corral"},{"book_id":10720733,"title":"The Abduction (Theodore Boone, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1328093951m\/10720733.jpg","authors":"John Grisham"},{"book_id":10746542,"title":"The Sense of an Ending","image_url":"https:\/\/images.gr-assets.com\/books\/1311704453m\/10746542.jpg","authors":"Julian Barnes"},{"book_id":10756240,"title":"Telegraph Avenue","image_url":"https:\/\/images.gr-assets.com\/books\/1335716595m\/10756240.jpg","authors":"Michael Chabon"},{"book_id":10757771,"title":"Shut Out","image_url":"https:\/\/images.gr-assets.com\/books\/1327918078m\/10757771.jpg","authors":"Kody Keplinger"},{"book_id":10757806,"title":"How to Save a Life","image_url":"https:\/\/images.gr-assets.com\/books\/1337211222m\/10757806.jpg","authors":"Sara Zarr"},{"book_id":10757833,"title":"Beautiful Chaos (Caster Chronicles, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1327878503m\/10757833.jpg","authors":"Kami Garcia, Margaret Stohl, Paz Pruneda"},{"book_id":10762469,"title":"The Leftovers","image_url":"https:\/\/images.gr-assets.com\/books\/1404872433m\/10762469.jpg","authors":"Tom Perrotta"},{"book_id":10762697,"title":"The Farseer Trilogy (Farseer Trilogy #1-3)","image_url":"https:\/\/images.gr-assets.com\/books\/1447493572m\/10762697.jpg","authors":"Robin Hobb"},{"book_id":10766509,"title":"The Best of Me","image_url":"https:\/\/images.gr-assets.com\/books\/1301685366m\/10766509.jpg","authors":"Nicholas Sparks"},{"book_id":10767466,"title":"Hark! A Vagrant","image_url":"https:\/\/images.gr-assets.com\/books\/1327877328m\/10767466.jpg","authors":"Kate Beaton"},{"book_id":10776592,"title":"The Boy in the Suitcase (Nina Borg, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1320545877m\/10776592.jpg","authors":"Lene Kaaberb\u00f8l, Agnete Friis"},{"book_id":10776793,"title":"War Brides","image_url":"https:\/\/images.gr-assets.com\/books\/1341794666m\/10776793.jpg","authors":"Helen Bryan"},{"book_id":10778410,"title":"The Fire (Witch & Wizard, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1472948949m\/10778410.jpg","authors":"James Patterson, Jill Dembowski, Elijah Wood, Spencer Locke"},{"book_id":10785687,"title":"Harry Potter Page to Screen: The Complete Filmmaking Journey","image_url":"https:\/\/images.gr-assets.com\/books\/1317345385m\/10785687.jpg","authors":"Bob McCabe"},{"book_id":10790276,"title":"Courageous","image_url":"https:\/\/images.gr-assets.com\/books\/1406505682m\/10790276.jpg","authors":"Randy Alcorn, Alex Kendrick, Stephen Kendrick"},{"book_id":10790277,"title":"Rise of Empire (The Riyria Revelations, #3-4)","image_url":"https:\/\/images.gr-assets.com\/books\/1307960500m\/10790277.jpg","authors":"Michael J. Sullivan"},{"book_id":10790290,"title":"Theft of Swords (The Riyria Revelations, #1-2)","image_url":"https:\/\/images.gr-assets.com\/books\/1307959785m\/10790290.jpg","authors":"Michael J. Sullivan"},{"book_id":10790376,"title":"A Modern Witch (A Modern Witch, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1334346928m\/10790376.jpg","authors":"Debora Geary"},{"book_id":10790516,"title":"Lothaire (Immortals After Dark #12)","image_url":"https:\/\/images.gr-assets.com\/books\/1366322959m\/10790516.jpg","authors":"Kresley Cole"},{"book_id":10798416,"title":"The Statistical Probability of Love at First Sight","image_url":"https:\/\/images.gr-assets.com\/books\/1337187623m\/10798416.jpg","authors":"Jennifer E. Smith"},{"book_id":10798418,"title":"Why We Broke Up","image_url":"https:\/\/images.gr-assets.com\/books\/1348728685m\/10798418.jpg","authors":"Daniel Handler, Maira Kalman"},{"book_id":10799881,"title":"Underworld (Abandon, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1319987494m\/10799881.jpg","authors":"Meg Cabot"},{"book_id":10800916,"title":"Awake at Dawn (Shadow Falls, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"C.C. Hunter"},{"book_id":10801027,"title":"Cross My Heart (Cross My Heart, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327886049m\/10801027.jpg","authors":"Katie Klein"},{"book_id":10803121,"title":"The Alloy of Law (Mistborn, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Brandon Sanderson"},{"book_id":10803806,"title":"Darth Paper Strikes Back (Origami Yoda, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tom Angleberger"},{"book_id":10805160,"title":"Broken Harbour (Dublin Murder Squad, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1336120776m\/10805160.jpg","authors":"Tana French"},{"book_id":10808006,"title":"Private #1 Suspect (Private, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Patterson, Maxine Paetro"},{"book_id":10813469,"title":"Rock Chick Renegade (Rock Chick, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1328299907m\/10813469.jpg","authors":"Kristen Ashley"},{"book_id":10813480,"title":"For You (The 'Burg, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327337194m\/10813480.jpg","authors":"Kristen Ashley"},{"book_id":10816297,"title":"Kill Shot (Mitch Rapp, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Vince Flynn"},{"book_id":10816908,"title":"The Crown of Embers (Fire and Thorns, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1335241091m\/10816908.jpg","authors":"Rae Carson"},{"book_id":10818853,"title":"Fifty Shades of Grey (Fifty Shades, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1385207843m\/10818853.jpg","authors":"E.L. James"},{"book_id":10822174,"title":"The Walking Dead, Vol. 14: No Way Out","image_url":"https:\/\/images.gr-assets.com\/books\/1327883131m\/10822174.jpg","authors":"Robert Kirkman, Charlie Adlard, Cliff Rathburn"},{"book_id":10822858,"title":"The Keeper of Lost Causes (Department Q, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jussi Adler-Olsen, Lisa Hartford"},{"book_id":10830444,"title":"Guilty Wives","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Patterson, David Ellis"},{"book_id":10836728,"title":"The Rook (The Checquy Files, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327619585m\/10836728.jpg","authors":"Daniel O'Malley"},{"book_id":10836810,"title":"The Last Nude","image_url":"https:\/\/images.gr-assets.com\/books\/1305496356m\/10836810.jpg","authors":"Ellis Avery"},{"book_id":10836813,"title":"The Time in Between","image_url":"https:\/\/images.gr-assets.com\/books\/1319148738m\/10836813.jpg","authors":"Mar\u00eda Due\u00f1as, Daniel Hahn"},{"book_id":10843036,"title":"Perfect Shadow (Night Angel, #0.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1360569222m\/10843036.jpg","authors":"Brent Weeks"},{"book_id":10844125,"title":"The Christmas Wedding","image_url":"https:\/\/images.gr-assets.com\/books\/1327889901m\/10844125.jpg","authors":"James Patterson, Richard DiLallo"},{"book_id":10846336,"title":"Salvage the Bones","image_url":"https:\/\/images.gr-assets.com\/books\/1317067649m\/10846336.jpg","authors":"Jesmyn Ward"},{"book_id":10852027,"title":"V is for Vengeance (Kinsey Millhone, #22)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sue Grafton"},{"book_id":10859509,"title":"Altered (Altered, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1344445982m\/10859509.jpg","authors":"Jennifer Rush"},{"book_id":10865206,"title":"The Willpower Instinct: How Self-Control Works, Why It Matters, and What You Can Do to Get More of It","image_url":"https:\/\/images.gr-assets.com\/books\/1436737104m\/10865206.jpg","authors":"Kelly McGonigal"},{"book_id":10866233,"title":"The List","image_url":"https:\/\/images.gr-assets.com\/books\/1439733432m\/10866233.jpg","authors":"Siobhan Vivian"},{"book_id":10866624,"title":"Unspoken (The Lynburn Legacy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1333397426m\/10866624.jpg","authors":"Sarah Rees Brennan"},{"book_id":10868182,"title":"The Hidden Child (Patrik Hedstr\u00f6m, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Camilla L\u00e4ckberg, Tiina Nunnally"},{"book_id":10869746,"title":"Rise of the Governor (The Walking Dead #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1366212058m\/10869746.jpg","authors":"Robert Kirkman, Jay Bonansinga"},{"book_id":10870589,"title":"Growing Up Amish","image_url":"https:\/\/images.gr-assets.com\/books\/1406514526m\/10870589.jpg","authors":"Ira Wagler"},{"book_id":10872085,"title":"Only Time Will Tell (The Clifton Chronicles, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jeffrey Archer"},{"book_id":10874177,"title":"Etiquette & Espionage (Finishing School, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1331952557m\/10874177.jpg","authors":"Gail Carriger"},{"book_id":10875239,"title":"Lethal","image_url":"https:\/\/images.gr-assets.com\/books\/1301590794m\/10875239.jpg","authors":"Sandra Brown"},{"book_id":10889279,"title":"Batman: The Black Mirror","image_url":"https:\/\/images.gr-assets.com\/books\/1503127212m\/10889279.jpg","authors":"Scott Snyder, Jock, Francesco Francavilla, Jared K. Fletcher, Sal Cipriano, David Baron"},{"book_id":10893138,"title":"The Time of My Life","image_url":"https:\/\/images.gr-assets.com\/books\/1327918581m\/10893138.jpg","authors":"Cecelia Ahern"},{"book_id":10897866,"title":"The Soulkeepers (The Soulkeepers, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1308260933m\/10897866.jpg","authors":"G.P. Ching"},{"book_id":10909804,"title":"Just My Type: A Book About Fonts","image_url":"https:\/\/images.gr-assets.com\/books\/1327886002m\/10909804.jpg","authors":"Simon Garfield"},{"book_id":10929432,"title":"The Archived (The Archived, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1338729878m\/10929432.jpg","authors":"Victoria Schwab"},{"book_id":10931321,"title":"Against All Enemies (Max Moore, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tom Clancy, Peter Telep"},{"book_id":10940958,"title":"Blue Monday (Frieda Klein, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1377323978m\/10940958.jpg","authors":"Nicci French"},{"book_id":10947600,"title":"Saving June","image_url":"https:\/\/images.gr-assets.com\/books\/1349156138m\/10947600.jpg","authors":"Hannah Harrington"},{"book_id":10950924,"title":"The Dovekeepers","image_url":"https:\/\/images.gr-assets.com\/books\/1306253903m\/10950924.jpg","authors":"Alice Hoffman"},{"book_id":10954979,"title":"The Swerve: How the World Became Modern","image_url":"https:\/\/images.gr-assets.com\/books\/1406088245m\/10954979.jpg","authors":"Stephen Greenblatt"},{"book_id":10959277,"title":"The Future of Us","image_url":"https:\/\/images.gr-assets.com\/books\/1366214559m\/10959277.jpg","authors":"Jay Asher, Carolyn Mackler"},{"book_id":10960383,"title":"A Grown-Up Kind of Pretty","image_url":"https:\/\/images.gr-assets.com\/books\/1442347366m\/10960383.jpg","authors":"Joshilyn Jackson"},{"book_id":10964693,"title":"The Marriage Plot","image_url":"https:\/\/images.gr-assets.com\/books\/1328736940m\/10964693.jpg","authors":"Jeffrey Eugenides"},{"book_id":10970532,"title":"The Siren (The Original Sinners, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1335832751m\/10970532.jpg","authors":"Tiffany Reisz"},{"book_id":10993282,"title":"Lover Reborn (Black Dagger Brotherhood, #10)","image_url":"https:\/\/images.gr-assets.com\/books\/1319144072m\/10993282.jpg","authors":"J.R. Ward"},{"book_id":10996342,"title":"The Art of Fielding","image_url":"https:\/\/images.gr-assets.com\/books\/1327882787m\/10996342.jpg","authors":"Chad Harbach"},{"book_id":11007587,"title":"Zero Day (John Puller, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"David Baldacci"},{"book_id":11010251,"title":"The Lost Wife","image_url":"https:\/\/images.gr-assets.com\/books\/1394994929m\/11010251.jpg","authors":"Alyson Richman"},{"book_id":11045709,"title":"When She Woke","image_url":"https:\/\/images.gr-assets.com\/books\/1358274814m\/11045709.jpg","authors":"Hillary Jordan"},{"book_id":11051889,"title":"The Fallen Star (Fallen Star, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1331385411m\/11051889.jpg","authors":"Jessica Sorensen"},{"book_id":11057626,"title":"Red Mist (Kay Scarpetta, #19)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Patricia Cornwell"},{"book_id":11071466,"title":"Second Chance Summer","image_url":"https:\/\/images.gr-assets.com\/books\/1337189920m\/11071466.jpg","authors":"Morgan Matson"},{"book_id":11076123,"title":"Half Blood Blues","image_url":"https:\/\/images.gr-assets.com\/books\/1309737674m\/11076123.jpg","authors":"Esi Edugyan"},{"book_id":11076177,"title":"The Cat's Table","image_url":"https:\/\/images.gr-assets.com\/books\/1327934764m\/11076177.jpg","authors":"Michael Ondaatje"},{"book_id":11082037,"title":"The Drop (Harry Bosch, #17; Harry Bosch Universe, #21)","image_url":"https:\/\/images.gr-assets.com\/books\/1327935031m\/11082037.jpg","authors":"Michael Connelly"},{"book_id":11084145,"title":"Steve Jobs","image_url":"https:\/\/images.gr-assets.com\/books\/1327861368m\/11084145.jpg","authors":"Walter Isaacson"},{"book_id":11093329,"title":"The House of Silk (Sherlock Holmes, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327877129m\/11093329.jpg","authors":"Anthony Horowitz"},{"book_id":11096647,"title":"Flat-Out Love (Flat-Out Love, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1333821470m\/11096647.jpg","authors":"Jessica Park"},{"book_id":11099729,"title":"Darth Plagueis","image_url":"https:\/\/images.gr-assets.com\/books\/1405546262m\/11099729.jpg","authors":"James Luceno"},{"book_id":11100431,"title":"Heir of Novron (The Riyria Revelations, #5-6)","image_url":"https:\/\/images.gr-assets.com\/books\/1307960132m\/11100431.jpg","authors":"Michael J. Sullivan"},{"book_id":11101772,"title":"The Scrapbook of Frankie Pratt","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Caroline Preston"},{"book_id":11104030,"title":"MWF Seeking BFF: My Yearlong Search For A New Best Friend","image_url":"https:\/\/images.gr-assets.com\/books\/1353033305m\/11104030.jpg","authors":"Rachel Bertsche"},{"book_id":11104933,"title":"Willpower: Rediscovering the Greatest Human Strength","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Roy F. Baumeister, John Tierney"},{"book_id":11106458,"title":"The Mortal Instruments (The Mortal Instruments #1-4)","image_url":"https:\/\/images.gr-assets.com\/books\/1313073526m\/11106458.jpg","authors":"Cassandra Clare"},{"book_id":11107244,"title":"The Better Angels of Our Nature: Why Violence Has Declined","image_url":"https:\/\/images.gr-assets.com\/books\/1311281857m\/11107244.jpg","authors":"Steven Pinker"},{"book_id":11112619,"title":"Fever (The Chemical Garden, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1324955449m\/11112619.jpg","authors":"Lauren DeStefano"},{"book_id":11133791,"title":"Tilt","image_url":"https:\/\/images.gr-assets.com\/books\/1346263814m\/11133791.jpg","authors":"Ellen Hopkins"},{"book_id":11166889,"title":"The Funhouse","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Owen West, Dean Koontz"},{"book_id":11166890,"title":"77 Shadow Street (Pendleton, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dean Koontz"},{"book_id":11178225,"title":"Out of the Easy","image_url":"https:\/\/images.gr-assets.com\/books\/1339784547m\/11178225.jpg","authors":"Ruta Sepetys"},{"book_id":11192642,"title":"Go the Fuck to Sleep","image_url":"https:\/\/images.gr-assets.com\/books\/1342861907m\/11192642.jpg","authors":"Adam Mansbach, Ricardo Cort\u00e9s"},{"book_id":11198312,"title":"The Medusa Plot (39 Clues: Cahills vs. Vespers, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1328836311m\/11198312.jpg","authors":"Gordon Korman"},{"book_id":11198480,"title":"Not a Fan: Becoming a Completely Committed Follower of Jesus","image_url":"https:\/\/images.gr-assets.com\/books\/1445188902m\/11198480.jpg","authors":"Kyle Idleman"},{"book_id":11201007,"title":"Hearts in Darkness (Hearts in Darkness, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1306632316m\/11201007.jpg","authors":"Laura Kaye"},{"book_id":11227040,"title":"Sweet Dreams (Colorado Mountain, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1327912890m\/11227040.jpg","authors":"Kristen Ashley"},{"book_id":11227041,"title":"The Gamble (Colorado Mountain, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327890208m\/11227041.jpg","authors":"Kristen Ashley"},{"book_id":11227043,"title":"Rock Chick Revenge (Rock Chick, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1328299988m\/11227043.jpg","authors":"Kristen Ashley"},{"book_id":11230081,"title":"Seriously... I'm Kidding","image_url":"https:\/\/images.gr-assets.com\/books\/1441195131m\/11230081.jpg","authors":"Ellen DeGeneres"},{"book_id":11233988,"title":"I Want My Hat Back","image_url":"https:\/\/images.gr-assets.com\/books\/1327888784m\/11233988.jpg","authors":"Jon Klassen"},{"book_id":11235712,"title":"Cinder (The Lunar Chronicles, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1470056948m\/11235712.jpg","authors":"Marissa Meyer"},{"book_id":11235783,"title":"About That Night (FBI\/US Attorney, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1342553249m\/11235783.jpg","authors":"Julie James"},{"book_id":11237412,"title":"Six's Legacy (Lorien Legacies: The Lost Files, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1363281063m\/11237412.jpg","authors":"Pittacus Lore"},{"book_id":11239856,"title":"Maid for the Billionaire (Legacy Collection, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1376240267m\/11239856.jpg","authors":"Ruth Cardello"},{"book_id":11250053,"title":"The Snow Child","image_url":"https:\/\/images.gr-assets.com\/books\/1327098624m\/11250053.jpg","authors":"Eowyn Ivey"},{"book_id":11250317,"title":"The Song of Achilles","image_url":"https:\/\/images.gr-assets.com\/books\/1331154660m\/11250317.jpg","authors":"Madeline Miller"},{"book_id":11254250,"title":"Cabin Fever (Diary of a Wimpy Kid, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1350396037m\/11254250.jpg","authors":"Jeff Kinney"},{"book_id":11254850,"title":"Seeds of Rebellion (Beyonders, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Brandon Mull"},{"book_id":11256293,"title":"Life is What You Make It: A Story of Love, Hope and How Determination Can Overcome Even Destiny","image_url":"https:\/\/images.gr-assets.com\/books\/1308754493m\/11256293.jpg","authors":"Preeti Shenoy"},{"book_id":11256979,"title":"The Magic of Reality: How We Know What's Really True","image_url":"https:\/\/images.gr-assets.com\/books\/1327883246m\/11256979.jpg","authors":"Richard Dawkins, Dave McKean"},{"book_id":11260526,"title":"The Twilight Saga Breaking Dawn Part 1: The Official Illustrated Movie Companion (The Twilight Saga: The Official Illustrated Movie Companion, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1327904795m\/11260526.jpg","authors":"Mark Cotta Vaz"},{"book_id":11262424,"title":"Between the Lines (Between the Lines, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1367082644m\/11262424.jpg","authors":"Tammara Webber"},{"book_id":11266880,"title":"It Chooses You","image_url":"https:\/\/images.gr-assets.com\/books\/1328693226m\/11266880.jpg","authors":"Miranda July, Brigitte Sire"},{"book_id":11275323,"title":"Raising Steam (Discworld, #40, Moist von Lipwig #3 )","image_url":"https:\/\/images.gr-assets.com\/books\/1375882313m\/11275323.jpg","authors":"Terry Pratchett"},{"book_id":11277218,"title":"I Am Half-Sick of Shadows (Flavia de Luce, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1409945571m\/11277218.jpg","authors":"Alan Bradley"},{"book_id":11281852,"title":"Kisses from Katie: A Story of Relentless Love and Redemption","image_url":"https:\/\/images.gr-assets.com\/books\/1306266117m\/11281852.jpg","authors":"Katie J. Davis, Beth Clark"},{"book_id":11300302,"title":"Alice in Zombieland (White Rabbit Chronicles, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1333628241m\/11300302.jpg","authors":"Gena Showalter"},{"book_id":11306337,"title":"EntreLeadership: 20 Years of Practical Business Wisdom from the Trenches","image_url":"https:\/\/images.gr-assets.com\/books\/1327904526m\/11306337.jpg","authors":"Dave Ramsey"},{"book_id":11309018,"title":"The Lost Stories (Ranger's Apprentice, #11)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Flanagan"},{"book_id":11324166,"title":"Timeless (Parasol Protectorate, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1327890901m\/11324166.jpg","authors":"Gail Carriger"},{"book_id":11324722,"title":"The Righteous Mind: Why Good People are Divided by Politics and Religion","image_url":"https:\/\/images.gr-assets.com\/books\/1351393217m\/11324722.jpg","authors":"Jonathan Haidt"},{"book_id":11330361,"title":"A Stolen Life","image_url":"https:\/\/images.gr-assets.com\/books\/1327928284m\/11330361.jpg","authors":"Jaycee Dugard"},{"book_id":11331421,"title":"The Art of Hearing Heartbeats","image_url":"https:\/\/images.gr-assets.com\/books\/1320437247m\/11331421.jpg","authors":"Jan-Philipp Sendker, Kevin Wiliarty"},{"book_id":11337189,"title":"A Universe from Nothing: Why There Is Something Rather Than Nothing","image_url":"https:\/\/images.gr-assets.com\/books\/1365217267m\/11337189.jpg","authors":"Lawrence M. Krauss, Richard Dawkins"},{"book_id":11337912,"title":"The Prisoner of Cell 25 (Michael Vey, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Richard Paul Evans"},{"book_id":11343348,"title":"Private Games (Private #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1498199246m\/11343348.jpg","authors":"James Patterson, Mark T. Sullivan"},{"book_id":11350430,"title":"The Mystery Knight (The Tales of Dunk and Egg, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1397654538m\/11350430.jpg","authors":"George R.R. Martin"},{"book_id":11366397,"title":"The Program (The Program, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1344986164m\/11366397.jpg","authors":"Suzanne Young"},{"book_id":11367726,"title":"Defending Jacob","image_url":"https:\/\/images.gr-assets.com\/books\/1329612158m\/11367726.jpg","authors":"William Landay"},{"book_id":11381643,"title":"Playing for Keeps (Neighbor from Hell, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1406585295m\/11381643.jpg","authors":"R.L. Mathewson"},{"book_id":11381910,"title":"Heft","image_url":"https:\/\/images.gr-assets.com\/books\/1327958826m\/11381910.jpg","authors":"Liz Moore"},{"book_id":11382346,"title":"That Boy (That Boy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1305572809m\/11382346.jpg","authors":"Jillian Dodd"},{"book_id":11387392,"title":"The Catastrophic History of You and Me","image_url":"https:\/\/images.gr-assets.com\/books\/1327879884m\/11387392.jpg","authors":"Jess Rothenberg"},{"book_id":11387515,"title":"Wonder","image_url":"https:\/\/images.gr-assets.com\/books\/1309285027m\/11387515.jpg","authors":"R.J. Palacio"},{"book_id":11389341,"title":"The Meaning of Marriage: Facing the Complexities of Commitment with the Wisdom of God","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Timothy J. Keller, Kathy Keller"},{"book_id":11389875,"title":"Edge of Eternity (The Century Trilogy, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1377871984m\/11389875.jpg","authors":"Ken Follett"},{"book_id":11391817,"title":"Drawing from Memory","image_url":"https:\/\/images.gr-assets.com\/books\/1328837508m\/11391817.jpg","authors":"Allen Say"},{"book_id":11395597,"title":"Why Be Happy When You Could Be Normal?","image_url":"https:\/\/images.gr-assets.com\/books\/1320512373m\/11395597.jpg","authors":"Jeanette Winterson"},{"book_id":11401915,"title":"The Ripper (The Vampire Diaries: Stefan's Diaries, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1314846147m\/11401915.jpg","authors":"L.J. Smith, Kevin Williamson, Julie Plec"},{"book_id":11408650,"title":"The Unbecoming of Mara Dyer (Mara Dyer, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1336655755m\/11408650.jpg","authors":"Michelle Hodkin"},{"book_id":11410104,"title":"The Summer I Turned Pretty Trilogy: The Summer I Turned Pretty; It's Not Summer Without You; We'll Always Have Summer","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jenny Han"},{"book_id":11410430,"title":"Defiance (Defiance #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1341967711m\/11410430.jpg","authors":"C.J. Redwine"},{"book_id":11431896,"title":"The Bitter Kingdom (Fire and Thorns, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1360281470m\/11431896.jpg","authors":"Rae Carson"},{"book_id":11445880,"title":"Midnight in Austenland (Austenland, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Shannon Hale"},{"book_id":11447921,"title":"Beautiful Ruins","image_url":"https:\/\/images.gr-assets.com\/books\/1338161553m\/11447921.jpg","authors":"Jess Walter"},{"book_id":11450360,"title":"Twilight: The Graphic Novel, Vol. 2 (Twilight: The Graphic Novel, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1327891963m\/11450360.jpg","authors":"Stephenie Meyer, Young Kim"},{"book_id":11450591,"title":"The Mill River Recluse","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Darcie Chan"},{"book_id":11454587,"title":"Spell Bound (Hex Hall, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1313010167m\/11454587.jpg","authors":"Rachel Hawkins"},{"book_id":11468377,"title":"Thinking, Fast and Slow","image_url":"https:\/\/images.gr-assets.com\/books\/1317793965m\/11468377.jpg","authors":"Daniel Kahneman"},{"book_id":11469379,"title":"A Walk Across the Sun","image_url":"https:\/\/images.gr-assets.com\/books\/1328767745m\/11469379.jpg","authors":"Corban Addison"},{"book_id":11479285,"title":"Breathe (Sea Breeze, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1341120438m\/11479285.jpg","authors":"Abbi Glines"},{"book_id":11488123,"title":"The House at Tyneford","image_url":"https:\/\/images.gr-assets.com\/books\/1377631578m\/11488123.jpg","authors":"Natasha Solomons"},{"book_id":11500217,"title":"Angelfall (Penryn & the End of Days, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1423238576m\/11500217.jpg","authors":"Susan Ee"},{"book_id":11505008,"title":"Wheat Belly: Lose the Wheat, Lose the Weight, and Find Your Path Back to Health","image_url":"https:\/\/images.gr-assets.com\/books\/1317793840m\/11505008.jpg","authors":"William Davis"},{"book_id":11505797,"title":"Beautiful Disaster (Beautiful, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1358259032m\/11505797.jpg","authors":"Jamie McGuire"},{"book_id":11512688,"title":"The Dead of Night (The 39 Clues: Cahills vs. Vespers, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1331686275m\/11512688.jpg","authors":"Peter Lerangis"},{"book_id":11529868,"title":"The Orphan Master's Son","image_url":"https:\/\/images.gr-assets.com\/books\/1327878601m\/11529868.jpg","authors":"Adam Johnson"},{"book_id":11532160,"title":"Requiem (Providence, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1307717182m\/11532160.jpg","authors":"Jamie McGuire"},{"book_id":11544421,"title":"Magic Rises (Kate Daniels, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1359571572m\/11544421.jpg","authors":"Ilona Andrews"},{"book_id":11544466,"title":"Breathe (Breathe, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1330286837m\/11544466.jpg","authors":"Sarah Crossan"},{"book_id":11551045,"title":"Lenobia's Vow (House of Night Novellas, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1317849415m\/11551045.jpg","authors":"P.C. Cast, Kristin Cast"},{"book_id":11556960,"title":"Crewel (Crewel World, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1376228331m\/11556960.jpg","authors":"Gennifer Albin"},{"book_id":11559200,"title":"Shadow of Night (All Souls Trilogy, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1320604137m\/11559200.jpg","authors":"Deborah Harkness"},{"book_id":11561469,"title":"Reason to Breathe (Breathing, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1329013365m\/11561469.jpg","authors":"Rebecca Donovan"},{"book_id":11563110,"title":"Hallowed (Unearthly, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1332883896m\/11563110.jpg","authors":"Cynthia Hand"},{"book_id":11566956,"title":"Are You My Mother?","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Alison Bechdel"},{"book_id":11568316,"title":"Dream Dark (Caster Chronicles, #2.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1307480317m\/11568316.jpg","authors":"Kami Garcia, Margaret Stohl"},{"book_id":11594257,"title":"Under the Never Sky (Under the Never Sky, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1356591725m\/11594257.jpg","authors":"Veronica Rossi"},{"book_id":11594337,"title":"The One and Only Ivan","image_url":"https:\/\/images.gr-assets.com\/books\/1424981397m\/11594337.jpg","authors":"Katherine Applegate, Patricia Castelao"},{"book_id":11595276,"title":"The Miseducation of Cameron Post","image_url":"https:\/\/images.gr-assets.com\/books\/1309190566m\/11595276.jpg","authors":"Emily M. Danforth"},{"book_id":11600163,"title":"The Litigators","image_url":"https:\/\/images.gr-assets.com\/books\/1320434601m\/11600163.jpg","authors":"John Grisham"},{"book_id":11607446,"title":"The Wishing Spell (The Land of Stories, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1326920505m\/11607446.jpg","authors":"Chris Colfer, Brandon Dorman"},{"book_id":11614718,"title":"Delirium (Delirium, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327890411m\/11614718.jpg","authors":"Lauren Oliver"},{"book_id":11660590,"title":"Micro","image_url":"https:\/\/images.gr-assets.com\/books\/1314593813m\/11660590.jpg","authors":"Michael Crichton, Richard Preston"},{"book_id":11665750,"title":"At Peace (The 'Burg, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1327913073m\/11665750.jpg","authors":"Kristen Ashley"},{"book_id":11699349,"title":"The Lions of Little Rock","image_url":"https:\/\/images.gr-assets.com\/books\/1442034711m\/11699349.jpg","authors":"Kristin Levine"},{"book_id":11709037,"title":"You Are Not So Smart: Why You Have Too Many Friends on Facebook, Why Your Memory Is Mostly Fiction, and 46 Other Ways You're Deluding Yourself","image_url":"https:\/\/images.gr-assets.com\/books\/1391879112m\/11709037.jpg","authors":"David McRaney"},{"book_id":11710373,"title":"Written in My Own Heart's Blood (Outlander, #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1365173799m\/11710373.jpg","authors":"Diana Gabaldon"},{"book_id":11714997,"title":"The Underworld (Fallen Star, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1417703488m\/11714997.jpg","authors":"Jessica Sorensen"},{"book_id":11720382,"title":"Catch Me (Detective D.D. Warren, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1325628802m\/11720382.jpg","authors":"Lisa Gardner"},{"book_id":11721314,"title":"Meant to Be","image_url":"https:\/\/images.gr-assets.com\/books\/1331322901m\/11721314.jpg","authors":"Lauren Morrill"},{"book_id":11734251,"title":"Death of Kings (The Saxon Stories, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1327963375m\/11734251.jpg","authors":"Bernard Cornwell"},{"book_id":11735983,"title":"Insurgent (Divergent, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1325667729m\/11735983.jpg","authors":"Veronica Roth"},{"book_id":11737271,"title":"Stay Close","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Harlan Coben"},{"book_id":11737313,"title":"Three Times Lucky (Tupelo Landing, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1424981822m\/11737313.jpg","authors":"Sheila Turnage"},{"book_id":11737387,"title":"Fated (Alex Verus, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1330906653m\/11737387.jpg","authors":"Benedict Jacka"},{"book_id":11738128,"title":"A Week to Be Wicked (Spindle Cove, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1321335382m\/11738128.jpg","authors":"Tessa Dare"},{"book_id":11742691,"title":"The Hunger Games: Official Illustrated Movie Companion","image_url":"https:\/\/images.gr-assets.com\/books\/1363678804m\/11742691.jpg","authors":"Kate Egan"},{"book_id":11746513,"title":"Explosive Eighteen (Stephanie Plum, #18)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Janet Evanovich"},{"book_id":11757975,"title":"The Look of Love (San Francisco Sullivans, #1; The Sullivans, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1398783845m\/11757975.jpg","authors":"Bella Andre"},{"book_id":11765920,"title":"The Calling (Darkness Rising, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1478986621m\/11765920.jpg","authors":"Kelley Armstrong"},{"book_id":11777020,"title":"Headhunters","image_url":"https:\/\/images.gr-assets.com\/books\/1320551831m\/11777020.jpg","authors":"Jo Nesb\u00f8, Don Bartlett"},{"book_id":11784281,"title":"Take This Regret (Take This Regret, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1347389725m\/11784281.jpg","authors":"Amy Lichtenhan, A.L. Jackson"},{"book_id":11797365,"title":"Escape from Camp 14: One Man's Remarkable Odyssey from North Korea to Freedom in the West","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Blaine Harden"},{"book_id":11801463,"title":"City of Dragons (Rain Wild Chronicles, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1322613975m\/11801463.jpg","authors":"Robin Hobb"},{"book_id":11806716,"title":"Blackout (Newsflesh Trilogy, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1317680509m\/11806716.jpg","authors":"Mira Grant"},{"book_id":11808919,"title":"Maid for Love (Gansett Island Series, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1402425002m\/11808919.jpg","authors":"Marie Force"},{"book_id":11808950,"title":"Sweet Evil (Sweet, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1337613719m\/11808950.jpg","authors":"Wendy Higgins"},{"book_id":11821514,"title":"Long Time Coming","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Edie Claire"},{"book_id":11827808,"title":"The Secret of the Nagas (Shiva Trilogy #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1308930273m\/11827808.jpg","authors":"Amish Tripathi"},{"book_id":11830394,"title":"2312","image_url":"https:\/\/images.gr-assets.com\/books\/1405778758m\/11830394.jpg","authors":"Kim Stanley Robinson"},{"book_id":11851522,"title":"The Complete Works of H.P. Lovecraft","image_url":"https:\/\/images.gr-assets.com\/books\/1327886768m\/11851522.jpg","authors":"H.P. Lovecraft"},{"book_id":11857408,"title":"Fifty Shades Darker (Fifty Shades, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1358266080m\/11857408.jpg","authors":"E.L. James"},{"book_id":11861062,"title":"Starters (Starters, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1358435131m\/11861062.jpg","authors":"Lissa Price"},{"book_id":11861815,"title":"Winger (Winger, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1367927656m\/11861815.jpg","authors":"Andrew Smith"},{"book_id":11864728,"title":"The Rising (Darkness Rising, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1340062496m\/11864728.jpg","authors":"Kelley Armstrong"},{"book_id":11866694,"title":"Arcadia","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lauren Groff"},{"book_id":11869272,"title":"Behind the Beautiful Forevers: Life, Death, and Hope in a Mumbai Undercity","image_url":"https:\/\/images.gr-assets.com\/books\/1315601232m\/11869272.jpg","authors":"Katherine Boo"},{"book_id":11870085,"title":"The Fault in Our Stars","image_url":"https:\/\/images.gr-assets.com\/books\/1360206420m\/11870085.jpg","authors":"John Green"},{"book_id":11872242,"title":"11th Hour (Women's Murder Club, #11)","image_url":"https:\/\/images.gr-assets.com\/books\/1328409443m\/11872242.jpg","authors":"James Patterson, Maxine Paetro"},{"book_id":11873368,"title":"The World of the Hunger Games (Hunger Games Trilogy)","image_url":"https:\/\/images.gr-assets.com\/books\/1327937151m\/11873368.jpg","authors":"Kate Egan"},{"book_id":11887020,"title":"American Sniper: The Autobiography of the Most Lethal Sniper in U.S. Military History","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Chris Kyle, Scott McEwen, Jim DeFelice"},{"book_id":11889938,"title":"Taken (Elvis Cole, #15; Joe Pike, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1315773532m\/11889938.jpg","authors":"Robert Crais"},{"book_id":11913681,"title":"The Boyfriend Thief (Stolen Kiss, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1395613458m\/11913681.jpg","authors":"Shana Norris"},{"book_id":11925514,"title":"Code Name Verity (Code Name Verity, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1388161911m\/11925514.jpg","authors":"Elizabeth Wein"},{"book_id":11940384,"title":"The Wicked Girls","image_url":"https:\/\/images.gr-assets.com\/books\/1340853882m\/11940384.jpg","authors":"Alex Marwood"},{"book_id":11942408,"title":"\u0634\u0627\u0628 \u0643\u0634\u0643 \u0641\u064a \u0631\u062d\u0644\u0629 \u0627\u0644\u0628\u062d\u062b \u0639\u0646 \u0627\u0644\u062c\u0627\u062f\u0648\u0646","image_url":"https:\/\/images.gr-assets.com\/books\/1309784315m\/11942408.jpg","authors":"\u0639\u0645\u0631\u0648 \u0633\u0644\u0627\u0645\u0629"},{"book_id":11942639,"title":"The Wedding Dress","image_url":"https:\/\/images.gr-assets.com\/books\/1327923985m\/11942639.jpg","authors":"Rachel Hauck"},{"book_id":11946245,"title":"Nevermore (Maximum Ride, #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1328150920m\/11946245.jpg","authors":"James Patterson"},{"book_id":11947156,"title":"Prince of Wolves (The Grey Wolves, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327878769m\/11947156.jpg","authors":"Quinn Loftis"},{"book_id":11947829,"title":"Ascend (Trylle, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1397955256m\/11947829.jpg","authors":"Amanda Hocking"},{"book_id":11966216,"title":"Torn (Trylle, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1397954544m\/11966216.jpg","authors":"Amanda Hocking"},{"book_id":11970096,"title":"Twenty-Eight and a Half Wishes (Rose Gardner Mystery, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1310178751m\/11970096.jpg","authors":"Denise Grover Swank"},{"book_id":11970747,"title":"The Hedge Knight (The Tales of Dunk and Egg, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"George R.R. Martin"},{"book_id":11981168,"title":"The One You Love (Emma Holden Suspense Mystery, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1328103463m\/11981168.jpg","authors":"Paul Pilkington"},{"book_id":11983940,"title":"Scarlet (Scarlet, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1370147602m\/11983940.jpg","authors":"A.C. Gaughen"},{"book_id":11985631,"title":"The Sworn Sword (The Tales of Dunk and Egg, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1397654143m\/11985631.jpg","authors":"George R.R. Martin"},{"book_id":11988046,"title":"Pivot Point (Pivot Point, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1356020486m\/11988046.jpg","authors":"Kasie West"},{"book_id":11995136,"title":"\u0645\u062d\u0627\u0644","image_url":"https:\/\/images.gr-assets.com\/books\/1324288676m\/11995136.jpg","authors":"\u064a\u0648\u0633\u0641 \u0632\u064a\u062f\u0627\u0646, Youssef Ziedan"},{"book_id":11996019,"title":"The King's Agent","image_url":"https:\/\/images.gr-assets.com\/books\/1313276211m\/11996019.jpg","authors":"Donna Russo Morin"},{"book_id":12000020,"title":"Aristotle and Dante Discover the Secrets of the Universe (Aristotle and Dante Discover the Secrets of the Universe, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1328320260m\/12000020.jpg","authors":"Benjamin Alire S\u00e1enz"},{"book_id":12002819,"title":"The Flight of Gemma Hardy","image_url":"https:\/\/images.gr-assets.com\/books\/1319761825m\/12002819.jpg","authors":"Margot Livesey"},{"book_id":12019355,"title":"Infamous (Chronicles of Nick, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Sherrilyn Kenyon"},{"book_id":12021559,"title":"Sophie & Carter","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Chelsea Fine"},{"book_id":12022079,"title":"Home Front","image_url":"https:\/\/images.gr-assets.com\/books\/1344319152m\/12022079.jpg","authors":"Kristin Hannah"},{"book_id":12022496,"title":"Victims (Alex Delaware, #27)","image_url":"https:\/\/images.gr-assets.com\/books\/1313220531m\/12022496.jpg","authors":"Jonathan Kellerman"},{"book_id":12027429,"title":"Scent of Magic (Healer, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1335295226m\/12027429.jpg","authors":"Maria V. Snyder"},{"book_id":12029468,"title":"Another Piece of My Heart","image_url":"https:\/\/images.gr-assets.com\/books\/1321468393m\/12029468.jpg","authors":"Jane Green"},{"book_id":12031532,"title":"The Garden of Evening Mists","image_url":"https:\/\/images.gr-assets.com\/books\/1333033941m\/12031532.jpg","authors":"Tan Twan Eng"},{"book_id":12033455,"title":"I've Got Your Number","image_url":"https:\/\/images.gr-assets.com\/books\/1327956732m\/12033455.jpg","authors":"Sophie Kinsella"},{"book_id":12037026,"title":"Come Home","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lisa Scottoline"},{"book_id":12039943,"title":"Capital","image_url":"https:\/\/images.gr-assets.com\/books\/1336769492m\/12039943.jpg","authors":"John Lanchester"},{"book_id":12040447,"title":"Shadows in Flight (Ender's Shadow, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Orson Scott Card"},{"book_id":12042279,"title":"Darker After Midnight (Midnight Breed, #10)","image_url":"https:\/\/images.gr-assets.com\/books\/1313987798m\/12042279.jpg","authors":"Lara Adrian"},{"book_id":12043770,"title":"Third Grave Dead Ahead (Charley Davidson, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1310823404m\/12043770.jpg","authors":"Darynda Jones"},{"book_id":12063467,"title":"Fury (New Species, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1311761846m\/12063467.jpg","authors":"Laurann Dohner"},{"book_id":12065943,"title":"Extra Yarn (E. B. White Read-Aloud Award. Picture Books)","image_url":"https:\/\/images.gr-assets.com\/books\/1424982446m\/12065943.jpg","authors":"Mac Barnett, Jon Klassen"},{"book_id":12067972,"title":"Where You Are (Between the Lines, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1367082773m\/12067972.jpg","authors":"Tammara Webber"},{"book_id":12070846,"title":"Mile 81","image_url":"https:\/\/images.gr-assets.com\/books\/1407138212m\/12070846.jpg","authors":"Stephen King"},{"book_id":12072362,"title":"The Pioneer Woman Cooks: Food from My Frontier ","image_url":"https:\/\/images.gr-assets.com\/books\/1344712745m\/12072362.jpg","authors":"Ree Drummond"},{"book_id":12075886,"title":"Keep Holding On","image_url":"https:\/\/images.gr-assets.com\/books\/1319236713m\/12075886.jpg","authors":"Susane Colasanti"},{"book_id":12081467,"title":"Chomp","image_url":"https:\/\/images.gr-assets.com\/books\/1320532144m\/12081467.jpg","authors":"Carl Hiaasen"},{"book_id":12099007,"title":"The Last Boyfriend (Inn BoonsBoro, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1334384607m\/12099007.jpg","authors":"Nora Roberts, MacLeod Andrews"},{"book_id":12107920,"title":"Shatterproof (The 39 Clues: Cahills vs. Vespers, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1331078007m\/12107920.jpg","authors":"Roland Smith"},{"book_id":12107925,"title":"Day of Doom (The 39 Clues: Cahills vs. Vespers, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1361785037m\/12107925.jpg","authors":"David Baldacci"},{"book_id":12107927,"title":"Trust No One (The 39 Clues: Cahills vs. Vespers, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1358266266m\/12107927.jpg","authors":"Linda Sue Park"},{"book_id":12119529,"title":"Magic Breaks (Kate Daniels, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1383236969m\/12119529.jpg","authors":"Ilona Andrews"},{"book_id":12127750,"title":"The Mark of Athena (The Heroes of Olympus, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1464201354m\/12127750.jpg","authors":"Rick Riordan"},{"book_id":12127810,"title":"The House of Hades (The Heroes of Olympus, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1464201430m\/12127810.jpg","authors":"Rick Riordan"},{"book_id":12143200,"title":"Drift: The Unmooring of American Military Power","image_url":"https:\/\/images.gr-assets.com\/books\/1318753897m\/12143200.jpg","authors":"Rachel Maddow"},{"book_id":12157365,"title":"Unraveling (Unraveling, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1337474732m\/12157365.jpg","authors":"Elizabeth Norris"},{"book_id":12158480,"title":"Why Nations Fail: The Origins of Power, Prosperity, and Poverty","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Daron Acemo\u011flu, James A. Robinson"},{"book_id":12160906,"title":"The Sins of the Father (The Clifton Chronicles, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jeffrey Archer"},{"book_id":12171769,"title":"7: An Experimental Mutiny Against Excess","image_url":"https:\/\/images.gr-assets.com\/books\/1328764395m\/12171769.jpg","authors":"Jen Hatmaker"},{"book_id":12177850,"title":"A Song of Ice and Fire (A Song of Ice and Fire, #1-5)","image_url":"https:\/\/images.gr-assets.com\/books\/1339340118m\/12177850.jpg","authors":"George R.R. Martin"},{"book_id":12191246,"title":"Second Son (Jack Reacher, #15.5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lee Child"},{"book_id":12204857,"title":"Ghost Boy","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Martin Pistorius, Megan Lloyd Davies"},{"book_id":12216302,"title":"Cold Days (The Dresden Files, #14)","image_url":"https:\/\/images.gr-assets.com\/books\/1345145377m\/12216302.jpg","authors":"Jim Butcher"},{"book_id":12232938,"title":"The Lovely Bones","image_url":"https:\/\/images.gr-assets.com\/books\/1457810586m\/12232938.jpg","authors":"Alice Sebold"},{"book_id":12254379,"title":"1Q84 #1-2 (1Q84, #1-2)","image_url":"https:\/\/images.gr-assets.com\/books\/1327925087m\/12254379.jpg","authors":"Haruki Murakami, Jay Rubin"},{"book_id":12262741,"title":"Wild: From Lost to Found on the Pacific Crest Trail","image_url":"https:\/\/images.gr-assets.com\/books\/1453189881m\/12262741.jpg","authors":"Cheryl Strayed"},{"book_id":12275680,"title":"Wicked Business (Lizzy & Diesel, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1328334213m\/12275680.jpg","authors":"Janet Evanovich"},{"book_id":12283261,"title":"Between the Lines (Between the Lines, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1326314890m\/12283261.jpg","authors":"Jodi Picoult, Samantha van Leer"},{"book_id":12287209,"title":"Wool (Wool, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327889474m\/12287209.jpg","authors":"Hugh Howey"},{"book_id":12288282,"title":"Gunmetal Magic (Kate Daniels, #5.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1331230049m\/12288282.jpg","authors":"Ilona Andrews"},{"book_id":12291438,"title":"The Madman\u2019s Daughter (The Madman\u2019s Daughter, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1354155885m\/12291438.jpg","authors":"Megan Shepherd"},{"book_id":12294652,"title":"My Life Next Door","image_url":"https:\/\/images.gr-assets.com\/books\/1394240144m\/12294652.jpg","authors":"Huntley Fitzpatrick"},{"book_id":12299419,"title":"Mystery Man (Dream Man, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1483487036m\/12299419.jpg","authors":"Kristen Ashley"},{"book_id":12326627,"title":"The White Princess (The Plantagenet and Tudor Novels, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1479698298m\/12326627.jpg","authors":"Philippa Gregory"},{"book_id":12326644,"title":"The Kingmaker's Daughter (The Plantagenet and Tudor Novels, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1332688725m\/12326644.jpg","authors":"Philippa Gregory, Mirjana Valent"},{"book_id":12331767,"title":"High-Rise","image_url":"https:\/\/images.gr-assets.com\/books\/1358752559m\/12331767.jpg","authors":"J.G. Ballard"},{"book_id":12341557,"title":"The Wind Through the Keyhole (The Dark Tower, #4.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1328001524m\/12341557.jpg","authors":"Stephen King, Jae Lee"},{"book_id":12351649,"title":"Perfection (Neighbor from Hell, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1406578931m\/12351649.jpg","authors":"R.L. Mathewson"},{"book_id":12360050,"title":"The Dark Monk (The Hangman's Daughter, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Oliver P\u00f6tzsch, Lee Chadeayne"},{"book_id":12368985,"title":"Consequences (Consequences, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1350233855m\/12368985.jpg","authors":"Aleatha Romig"},{"book_id":12383252,"title":"Kiss the Dead (Anita Blake, Vampire Hunter #21)","image_url":"https:\/\/images.gr-assets.com\/books\/1328767132m\/12383252.jpg","authors":"Laurell K. Hamilton"},{"book_id":12383869,"title":"Sever (The Chemical Garden, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1343168408m\/12383869.jpg","authors":"Lauren DeStefano"},{"book_id":12384157,"title":"The Dressmaker","image_url":"https:\/\/images.gr-assets.com\/books\/1314819502m\/12384157.jpg","authors":"Kate Alcott"},{"book_id":12389310,"title":"Crow's Row (Crow's Row, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1348076628m\/12389310.jpg","authors":"Julie Hockley"},{"book_id":12390650,"title":"Wildest Dreams (Fantasyland, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327913321m\/12390650.jpg","authors":"Kristen Ashley"},{"book_id":12391521,"title":"The Psychopath Test: A Journey Through the Madness Industry","image_url":"https:\/\/images.gr-assets.com\/books\/1364166270m\/12391521.jpg","authors":"Jon Ronson"},{"book_id":12394068,"title":"A Street Cat Named Bob: How One Man and His Cat Found Hope on the Streets","image_url":"https:\/\/images.gr-assets.com\/books\/1331779332m\/12394068.jpg","authors":"James Bowen"},{"book_id":12401556,"title":"The Age of Miracles","image_url":"https:\/\/images.gr-assets.com\/books\/1342487370m\/12401556.jpg","authors":"Karen Thompson Walker"},{"book_id":12408149,"title":"A Land More Kind Than Home","image_url":"https:\/\/images.gr-assets.com\/books\/1332536334m\/12408149.jpg","authors":"Wiley Cash"},{"book_id":12413836,"title":"Avatar: The Last Airbender (The Promise, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1335027742m\/12413836.jpg","authors":"Gene Luen Yang, Bryan Konietzko, Michael Dante DiMartino, Gurihiru"},{"book_id":12413949,"title":"White Girl Problems","image_url":"https:\/\/images.gr-assets.com\/books\/1332504951m\/12413949.jpg","authors":"Babe Walker"},{"book_id":12415695,"title":"\u0643\u062e\u0647 \u064a\u0627 \u0628\u0627\u0628\u0627","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"\u0639\u0628\u062f\u0627\u0644\u0644\u0647 \u0627\u0644\u0645\u063a\u0644\u0648\u062b"},{"book_id":12425532,"title":"Of Poseidon (The Syrena Legacy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327879889m\/12425532.jpg","authors":"Anna Banks"},{"book_id":12432220,"title":"The False Prince (The Ascendance Trilogy #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1333227435m\/12432220.jpg","authors":"Jennifer A. Nielsen"},{"book_id":12444166,"title":"Iced (Fever, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1333022535m\/12444166.jpg","authors":"Karen Marie Moning"},{"book_id":12444297,"title":"Burned (Fever, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1407503200m\/12444297.jpg","authors":"Karen Marie Moning"},{"book_id":12444298,"title":"Feverborn (Fever, #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1435195536m\/12444298.jpg","authors":"Karen Marie Moning"},{"book_id":12449167,"title":"The Orchid House","image_url":"https:\/\/images.gr-assets.com\/books\/1320957431m\/12449167.jpg","authors":"Lucinda Riley"},{"book_id":12458287,"title":"The Golden Dynasty (Fantasyland, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1327913192m\/12458287.jpg","authors":"Kristen Ashley"},{"book_id":12475019,"title":"Some Assembly Required: A Journal of My Son's First Son","image_url":"https:\/\/images.gr-assets.com\/books\/1325716296m\/12475019.jpg","authors":"Anne Lamott, Sam Lamott"},{"book_id":12476820,"title":"Partials (Partials Sequence, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1337468746m\/12476820.jpg","authors":"Dan Wells"},{"book_id":12482658,"title":"The Beginner's Goodbye","image_url":"https:\/\/images.gr-assets.com\/books\/1333577280m\/12482658.jpg","authors":"Anne Tyler"},{"book_id":12499290,"title":"The Blinding Knife (Lightbringer, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1338432693m\/12499290.jpg","authors":"Brent Weeks"},{"book_id":12507214,"title":"Girl of Nightmares (Anna, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1344463840m\/12507214.jpg","authors":"Kendare Blake"},{"book_id":12513614,"title":"Captive in the Dark (The Dark Duet, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1315343569m\/12513614.jpg","authors":"C.J. Roberts"},{"book_id":12522507,"title":"Hidden (Firelight, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1329749855m\/12522507.jpg","authors":"Sophie Jordan"},{"book_id":12546674,"title":"Wife by Wednesday (The Weekday Brides, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1355031471m\/12546674.jpg","authors":"Catherine Bybee"},{"book_id":12547098,"title":"The Baker's Daughter","image_url":"https:\/\/images.gr-assets.com\/books\/1404963150m\/12547098.jpg","authors":"Sarah McCoy"},{"book_id":12551077,"title":"Stealing Parker","image_url":"https:\/\/images.gr-assets.com\/books\/1334451985m\/12551077.jpg","authors":"Miranda Kenneally"},{"book_id":12558285,"title":"Splintered (Splintered, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1340134213m\/12558285.jpg","authors":"A.G. Howard"},{"book_id":12578077,"title":"Obsidian (Lux, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1328275091m\/12578077.jpg","authors":"Jennifer L. Armentrout"},{"book_id":12583975,"title":"The Billionaire Wins the Game (Billionaire Bachelors, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Melody Anne"},{"book_id":12588363,"title":"Fallen in Love (Fallen, #3.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1362339849m\/12588363.jpg","authors":"Lauren Kate"},{"book_id":12591698,"title":"Caliban's War (The Expanse, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1407572377m\/12591698.jpg","authors":"James S.A. Corey"},{"book_id":12598982,"title":"Afterwards","image_url":"https:\/\/images.gr-assets.com\/books\/1330957613m\/12598982.jpg","authors":"Rosamund Lupton"},{"book_id":12602078,"title":"The Tycoon's Revenge (Baby for the Billionaire, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1368675679m\/12602078.jpg","authors":"Melody Anne"},{"book_id":12605157,"title":"The $100 Startup: Reinvent the Way You Make a Living, Do What You Love, and Create a New Future","image_url":"https:\/\/images.gr-assets.com\/books\/1345666854m\/12605157.jpg","authors":"Chris Guillebeau"},{"book_id":12609433,"title":"The Power of Habit: Why We Do What We Do in Life and Business","image_url":"https:\/\/images.gr-assets.com\/books\/1366758683m\/12609433.jpg","authors":"Charles Duhigg"},{"book_id":12611073,"title":"The Harbinger: The Ancient Mystery that Holds the Secret of America's Future","image_url":"https:\/\/images.gr-assets.com\/books\/1345009097m\/12611073.jpg","authors":"Jonathan Cahn"},{"book_id":12614410,"title":"The Lost Prince (The Iron Fey: Call of the Forgotten, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1335463790m\/12614410.jpg","authors":"Julie Kagawa"},{"book_id":12615008,"title":"Revolution 2020: Love, Corruption, Ambition","image_url":"https:\/\/images.gr-assets.com\/books\/1317964666m\/12615008.jpg","authors":"Chetan Bhagat"},{"book_id":12617758,"title":"The Expats","image_url":"https:\/\/images.gr-assets.com\/books\/1325641431m\/12617758.jpg","authors":"Chris Pavone"},{"book_id":12637490,"title":"Goddess Interrupted (Goddess Test, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1397956745m\/12637490.jpg","authors":"Aimee Carter"},{"book_id":12647642,"title":"Love Unrehearsed (Love, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1347242126m\/12647642.jpg","authors":"Tina Reber"},{"book_id":12652457,"title":"The Broken Eye (Lightbringer, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1376583941m\/12652457.jpg","authors":"Brent Weeks"},{"book_id":12663646,"title":"Hana (Delirium, #1.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1324106918m\/12663646.jpg","authors":"Lauren Oliver"},{"book_id":12667194,"title":"Accordance (Significance, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1368363345m\/12667194.jpg","authors":"Shelly Crane"},{"book_id":12675109,"title":"Great by Choice: Uncertainty, Chaos, and Luck--Why Some Thrive Despite Them All","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James C. Collins, Morten T. Hansen"},{"book_id":12677913,"title":"Tiger's Destiny (The Tiger Saga, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1340738756m\/12677913.jpg","authors":"Colleen Houck"},{"book_id":12680907,"title":"Bitterblue (Graceling Realm, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1331532273m\/12680907.jpg","authors":"Kristin Cashore"},{"book_id":12687461,"title":"Locked On (Jack Ryan Universe, #14)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tom Clancy, Mark Greaney"},{"book_id":12700306,"title":"Tricked (The Iron Druid Chronicles, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1324455119m\/12700306.jpg","authors":"Kevin Hearne"},{"book_id":12700353,"title":"Me and Earl and the Dying Girl","image_url":"https:\/\/images.gr-assets.com\/books\/1337216932m\/12700353.jpg","authors":"Jesse Andrews"},{"book_id":12706435,"title":"Defiance (Significance, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1498698186m\/12706435.jpg","authors":"Shelly Crane"},{"book_id":12710035,"title":"Hot Ticket (Sinners on Tour, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1348005153m\/12710035.jpg","authors":"Olivia Cunning"},{"book_id":12710106,"title":"Double Time (Sinners on Tour, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1352579615m\/12710106.jpg","authors":"Olivia Cunning"},{"book_id":12712435,"title":"Seating Arrangements","image_url":"https:\/\/images.gr-assets.com\/books\/1329425347m\/12712435.jpg","authors":"Maggie Shipstead"},{"book_id":12716010,"title":"Rapture (Fallen, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1362339818m\/12716010.jpg","authors":"Lauren Kate"},{"book_id":12716613,"title":"The Witness","image_url":"https:\/\/images.gr-assets.com\/books\/1329921937m\/12716613.jpg","authors":"Nora Roberts"},{"book_id":12722468,"title":"Elizabeth the Queen: The Life of a Modern Monarch","image_url":"https:\/\/images.gr-assets.com\/books\/1324343095m\/12722468.jpg","authors":"Sally Bedell Smith"},{"book_id":12737118,"title":"Wife 22","image_url":"https:\/\/images.gr-assets.com\/books\/1333577694m\/12737118.jpg","authors":"Melanie Gideon"},{"book_id":12743472,"title":"Slated (Slated, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1453582609m\/12743472.jpg","authors":"Teri Terry"},{"book_id":12751687,"title":"Finale (Hush, Hush, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1362408156m\/12751687.jpg","authors":"Becca Fitzpatrick"},{"book_id":12752313,"title":"Lots of Candles, Plenty of Cake","image_url":"https:\/\/images.gr-assets.com\/books\/1330649974m\/12752313.jpg","authors":"Anna Quindlen"},{"book_id":12753231,"title":"Monument 14 (Monument 14, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1337779838m\/12753231.jpg","authors":"Emmy Laybourne"},{"book_id":12755792,"title":"A Hidden Fire (Elemental Mysteries, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1475548523m\/12755792.jpg","authors":"Elizabeth Hunter"},{"book_id":12758317,"title":"In One Person","image_url":"https:\/\/images.gr-assets.com\/books\/1379313446m\/12758317.jpg","authors":"John Irving"},{"book_id":12760903,"title":"The Vision (Fallen Star, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1328247037m\/12760903.jpg","authors":"Jessica Sorensen"},{"book_id":12782865,"title":"The Lewis Man (The Lewis Trilogy, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1328645011m\/12782865.jpg","authors":"Peter May"},{"book_id":12791521,"title":"Batman: Earth One, Volume 1","image_url":"https:\/\/images.gr-assets.com\/books\/1344369854m\/12791521.jpg","authors":"Geoff Johns, Gary Frank, Jon Sibal, Brad Anderson, Rob Leigh"},{"book_id":12792658,"title":"UnSouled (Unwind, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1378899523m\/12792658.jpg","authors":"Neal Shusterman"},{"book_id":12799058,"title":"Summerland","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Elin Hilderbrand"},{"book_id":12812550,"title":"Days of Blood & Starlight (Daughter of Smoke & Bone, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1461353798m\/12812550.jpg","authors":"Laini Taylor"},{"book_id":12813630,"title":"The Coldest Girl in Coldtown","image_url":"https:\/\/images.gr-assets.com\/books\/1367312471m\/12813630.jpg","authors":"Holly Black"},{"book_id":12813860,"title":"A Midsummer's Nightmare","image_url":"https:\/\/images.gr-assets.com\/books\/1327469139m\/12813860.jpg","authors":"Kody Keplinger"},{"book_id":12820360,"title":"Edenbrooke (Edenbrooke, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1371398291m\/12820360.jpg","authors":"Julianne Donaldson"},{"book_id":12820793,"title":"The Oath of the Vayuputras (Shiva Trilogy, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1357242702m\/12820793.jpg","authors":"Amish Tripathi"},{"book_id":12842134,"title":"Just One Year (Just One Day, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1375129683m\/12842134.jpg","authors":"Gayle Forman"},{"book_id":12846479,"title":"Destined (Wings, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1321454773m\/12846479.jpg","authors":"Aprilynne Pike"},{"book_id":12849385,"title":"The Innocent (Will Robie, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1329854216m\/12849385.jpg","authors":"David Baldacci"},{"book_id":12866426,"title":"Taken at Dusk (Shadow Falls, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1320918098m\/12866426.jpg","authors":"C.C. Hunter"},{"book_id":12867423,"title":"Girl Walks into a Bar . . .: Comedy Calamities, Dating Disasters, and a Midlife Miracle","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rachel Dratch"},{"book_id":12868761,"title":"Let's Pretend This Never Happened: A Mostly True Memoir","image_url":"https:\/\/images.gr-assets.com\/books\/1489415716m\/12868761.jpg","authors":"Jenny Lawson"},{"book_id":12872236,"title":"Canada","image_url":"https:\/\/images.gr-assets.com\/books\/1327927048m\/12872236.jpg","authors":"Richard Ford"},{"book_id":12875258,"title":"Tell the Wolves I'm Home","image_url":"https:\/\/images.gr-assets.com\/books\/1335450415m\/12875258.jpg","authors":"Carol Rifka Brunt"},{"book_id":12875355,"title":"Death Comes to Pemberley","image_url":"https:\/\/images.gr-assets.com\/books\/1318936579m\/12875355.jpg","authors":"P.D. James"},{"book_id":12878300,"title":"Fearless: The Heroic Story of One Navy SEAL's Sacrifice in the Hunt for Osama Bin Laden and the Unwavering Devotion of the Woman Who Loved Him","image_url":"https:\/\/images.gr-assets.com\/books\/1351386173m\/12878300.jpg","authors":"Eric Blehm"},{"book_id":12878667,"title":"The Red House","image_url":"https:\/\/images.gr-assets.com\/books\/1333578268m\/12878667.jpg","authors":"Mark Haddon"},{"book_id":12880428,"title":"The Wolf Gift (The Wolf Gift Chronicles, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1328214020m\/12880428.jpg","authors":"Anne Rice"},{"book_id":12881141,"title":"Wild Man (Dream Man, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1327919924m\/12881141.jpg","authors":"Kristen Ashley"},{"book_id":12888599,"title":"The Lifeboat","image_url":"https:\/\/images.gr-assets.com\/books\/1344266875m\/12888599.jpg","authors":"Charlotte Rogan"},{"book_id":12891107,"title":"King of Thorns (The Broken Empire, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1322539112m\/12891107.jpg","authors":"Mark Lawrence"},{"book_id":12893742,"title":"The Serpent's Shadow (Kane Chronicles, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1366227982m\/12893742.jpg","authors":"Rick Riordan"},{"book_id":12900174,"title":"The Vincent Boys (The Vincent Boys, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327184585m\/12900174.jpg","authors":"Abbi Glines"},{"book_id":12900491,"title":"Wicked Nights (Angels of the Dark, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1320067374m\/12900491.jpg","authors":"Gena Showalter"},{"book_id":12902549,"title":"An Invisible Thread: The True Story of an 11-Year-Old Panhandler, a Busy Sales Executive, and an Unlikely Meeting with Destiny","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Laura Schroff, Alex Tresniowski, Valerie Salembier"},{"book_id":12908877,"title":"Until I Die (Revenants, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1335240840m\/12908877.jpg","authors":"Amy Plum"},{"book_id":12922320,"title":"Criminal (Will Trent, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1334414049m\/12922320.jpg","authors":"Karin Slaughter"},{"book_id":12924253,"title":"Once (Eve, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1321127130m\/12924253.jpg","authors":"Anna Carey"},{"book_id":12924261,"title":"This Book Is Full of Spiders: Seriously, Dude, Don't Touch It (John Dies at the End, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1365496944m\/12924261.jpg","authors":"David Wong"},{"book_id":12925063,"title":"Inescapable (The Premonition, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327896605m\/12925063.jpg","authors":"Amy A. Bartol"},{"book_id":12926132,"title":"Palace of Stone (Princess Academy, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1345726316m\/12926132.jpg","authors":"Shannon Hale"},{"book_id":12926432,"title":"Lady Almina and the Real Downton Abbey: The Lost Legacy of Highclere Castle","image_url":"https:\/\/images.gr-assets.com\/books\/1344371479m\/12926432.jpg","authors":"Fiona Carnarvon"},{"book_id":12926804,"title":"One for the Murphys","image_url":"https:\/\/images.gr-assets.com\/books\/1320344047m\/12926804.jpg","authors":"Lynda Mullaly Hunt"},{"book_id":12951824,"title":"The Perfect Hope (Inn Boonsboro, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1351012631m\/12951824.jpg","authors":"Nora Roberts"},{"book_id":12954620,"title":"Falling Kingdoms (Falling Kingdoms, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1337026387m\/12954620.jpg","authors":"Morgan Rhodes, Michelle Rowen"},{"book_id":12958487,"title":"Lady Luck (Colorado Mountain, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1327912930m\/12958487.jpg","authors":"Kristen Ashley"},{"book_id":12959045,"title":"My Friend Dahmer","image_url":"https:\/\/images.gr-assets.com\/books\/1325285515m\/12959045.jpg","authors":"Derf Backderf"},{"book_id":12959086,"title":"The Demigod Diaries","image_url":"https:\/\/images.gr-assets.com\/books\/1328573978m\/12959086.jpg","authors":"Rick Riordan, Haley Riordan"},{"book_id":12959233,"title":"Winter of the World (The Century Trilogy #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1369453743m\/12959233.jpg","authors":"Ken Follett"},{"book_id":12962439,"title":"A Game of Thrones: The Graphic Novel, Vol. 1","image_url":"https:\/\/images.gr-assets.com\/books\/1369052110m\/12962439.jpg","authors":"Daniel Abraham, George R.R. Martin, Tommy Patterson"},{"book_id":12968662,"title":"Gold","image_url":"https:\/\/images.gr-assets.com\/books\/1340468522m\/12968662.jpg","authors":"Chris Cleave"},{"book_id":12971616,"title":"The Rise of Nine (Lorien Legacies, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1331740153m\/12971616.jpg","authors":"Pittacus Lore"},{"book_id":12977172,"title":"Spark (Elemental, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1329524396m\/12977172.jpg","authors":"Brigid Kemmerer"},{"book_id":12982393,"title":"Dare Me","image_url":"https:\/\/images.gr-assets.com\/books\/1342214694m\/12982393.jpg","authors":"Megan Abbott"},{"book_id":12983100,"title":"World After (Penryn & the End of Days, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1494247697m\/12983100.jpg","authors":"Susan Ee"},{"book_id":12987640,"title":"Imagine: How Creativity Works","image_url":"https:\/\/images.gr-assets.com\/books\/1327000473m\/12987640.jpg","authors":"Jonah Lehrer"},{"book_id":12987977,"title":"Where We Belong","image_url":"https:\/\/images.gr-assets.com\/books\/1340320747m\/12987977.jpg","authors":"Emily Giffin"},{"book_id":12988016,"title":"Shadow's Claim (Immortals After Dark, #13; The Dacians, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1336161703m\/12988016.jpg","authors":"Kresley Cole"},{"book_id":12988089,"title":"Rise of the Elgen (Michael Vey, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1332381957m\/12988089.jpg","authors":"Richard Paul Evans"},{"book_id":12989112,"title":"Such a Rush","image_url":"https:\/\/images.gr-assets.com\/books\/1345851913m\/12989112.jpg","authors":"Jennifer Echols"},{"book_id":12995284,"title":"Dreamless (Starcrossed, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1320248839m\/12995284.jpg","authors":"Josephine Angelini"},{"book_id":13003565,"title":"The Invaders (Brotherband Chronicles, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1327983041m\/13003565.jpg","authors":"John Flanagan"},{"book_id":13007638,"title":"Celebrity in Death (In Death, #34)","image_url":"https:\/\/images.gr-assets.com\/books\/1328318908m\/13007638.jpg","authors":"J.D. Robb"},{"book_id":13010211,"title":"Promised (Birthmarked, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1330546217m\/13010211.jpg","authors":"Caragh M. O'Brien"},{"book_id":13027304,"title":"The Hunger Games Tribute Guide","image_url":"https:\/\/images.gr-assets.com\/books\/1322760235m\/13027304.jpg","authors":"Emily Seife"},{"book_id":13030356,"title":"Bones Are Forever (Temperance Brennan, #15)","image_url":"https:\/\/images.gr-assets.com\/books\/1333675935m\/13030356.jpg","authors":"Kathy Reichs"},{"book_id":13031445,"title":"The Hunger Pains: A Parody","image_url":"https:\/\/images.gr-assets.com\/books\/1344395623m\/13031445.jpg","authors":"The Harvard Lampoon"},{"book_id":13035050,"title":"The Good Father","image_url":"https:\/\/images.gr-assets.com\/books\/1328218551m\/13035050.jpg","authors":"Diane Chamberlain"},{"book_id":13037558,"title":"I, Michael Bennett (Michael Bennett, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Patterson, Michael Ledwidge"},{"book_id":13041934,"title":"Can Love Happen Twice?","image_url":"https:\/\/images.gr-assets.com\/books\/1321016822m\/13041934.jpg","authors":"Ravinder Singh"},{"book_id":13042154,"title":"Rebel Heart (Dust Lands, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1326311073m\/13042154.jpg","authors":"Moira Young"},{"book_id":13047090,"title":"Onyx (Lux, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1329408511m\/13047090.jpg","authors":"Jennifer L. Armentrout"},{"book_id":13049981,"title":"Boundless (Unearthly, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1342208984m\/13049981.jpg","authors":"Cynthia Hand"},{"book_id":13051316,"title":"The Misremembered Man (Tailorstown #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327875304m\/13051316.jpg","authors":"Christina McKenna"},{"book_id":13055592,"title":"Redshirts","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Scalzi"},{"book_id":13056159,"title":"The Chaperone","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Laura Moriarty"},{"book_id":13056511,"title":"Heaven (Halo, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1332367132m\/13056511.jpg","authors":"Alexandra Adornetto"},{"book_id":13057939,"title":"In the Shadow of the Banyan","image_url":"https:\/\/images.gr-assets.com\/books\/1346714710m\/13057939.jpg","authors":"Vaddey Ratner"},{"book_id":13065142,"title":"Rock Chick Reckoning (Rock Chick, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1328300013m\/13065142.jpg","authors":"Kristen Ashley"},{"book_id":13065327,"title":"Wild Cards (Wild Cards, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1420836321m\/13065327.jpg","authors":"Simone Elkeles"},{"book_id":13069213,"title":"Yes, Chef","image_url":"https:\/\/images.gr-assets.com\/books\/1329368167m\/13069213.jpg","authors":"Marcus Samuelsson"},{"book_id":13069935,"title":"Ask the Passengers","image_url":"https:\/\/images.gr-assets.com\/books\/1371850438m\/13069935.jpg","authors":"A.S. King"},{"book_id":13070346,"title":"Blood Rites (The Grey Wolves, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1321501581m\/13070346.jpg","authors":"Quinn Loftis"},{"book_id":13083008,"title":"Live by Night (Coughlin, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1334590418m\/13083008.jpg","authors":"Dennis Lehane"},{"book_id":13089710,"title":"The Kill Order (Maze Runner, #0.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1330636153m\/13089710.jpg","authors":"James Dashner"},{"book_id":13093001,"title":"Stolen Prey (Lucas Davenport, #22)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Sandford"},{"book_id":13096848,"title":"Avatar: The Last Airbender (The Promise, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1335027722m\/13096848.jpg","authors":"Gene Luen Yang, Michael Dante DiMartino, Gurihiru, Bryan Konietzko"},{"book_id":13097901,"title":"Merry Christmas, Alex Cross (Alex Cross, #19)","image_url":"https:\/\/images.gr-assets.com\/books\/1322032145m\/13097901.jpg","authors":"James Patterson"},{"book_id":13099738,"title":"Steal Like an Artist: 10 Things Nobody Told You About Being Creative","image_url":"https:\/\/images.gr-assets.com\/books\/1404576602m\/13099738.jpg","authors":"Austin Kleon"},{"book_id":13104080,"title":"Unravel Me (Shatter Me, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1340287622m\/13104080.jpg","authors":"Tahereh Mafi"},{"book_id":13105527,"title":"I Wrote This For You","image_url":"https:\/\/images.gr-assets.com\/books\/1413756174m\/13105527.jpg","authors":"pleasefindthis, Iain S. Thomas, Jon Ellis"},{"book_id":13109291,"title":"Blood of Dragons (Rain Wild Chronicles, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1341265576m\/13109291.jpg","authors":"Robin Hobb"},{"book_id":13111733,"title":"Sempre (Sempre, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1340797919m\/13111733.jpg","authors":"J.M. Darhower"},{"book_id":13112023,"title":"One Breath Away","image_url":"https:\/\/images.gr-assets.com\/books\/1333763497m\/13112023.jpg","authors":"Heather Gudenkauf"},{"book_id":13115995,"title":"Everbound (Everneath, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1359138201m\/13115995.jpg","authors":"Brodi Ashton"},{"book_id":13117308,"title":"Black List (Scot Harvath, #11)","image_url":"https:\/\/images.gr-assets.com\/books\/1339809055m\/13117308.jpg","authors":"Brad Thor"},{"book_id":13125234,"title":"Twice Tempted (Night Prince, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1352947741m\/13125234.jpg","authors":"Jeaniene Frost"},{"book_id":13125947,"title":"Reached (Matched, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1330717582m\/13125947.jpg","authors":"Ally Condie"},{"book_id":13127599,"title":"The Shoemaker's Wife","image_url":"https:\/\/images.gr-assets.com\/books\/1329256279m\/13127599.jpg","authors":"Adriana Trigiani"},{"book_id":13129925,"title":"Horrorst\u00f6r","image_url":"https:\/\/images.gr-assets.com\/books\/1414314217m\/13129925.jpg","authors":"Grady Hendrix, Michael Rogalski"},{"book_id":13132816,"title":"Emmy & Oliver","image_url":"https:\/\/images.gr-assets.com\/books\/1414589813m\/13132816.jpg","authors":"Robin Benway"},{"book_id":13138635,"title":"These Broken Stars (Starbound, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1383578978m\/13138635.jpg","authors":"Amie Kaufman, Meagan Spooner"},{"book_id":13146214,"title":"Because of Low (Sea Breeze, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Abbi Glines"},{"book_id":13147230,"title":"The Long Earth (The Long Earth, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1335532694m\/13147230.jpg","authors":"Terry Pratchett, Stephen Baxter"},{"book_id":13148921,"title":"Bloodline (Sigma Force, #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1348523971m\/13148921.jpg","authors":"James Rollins"},{"book_id":13151129,"title":"Earth Unaware (The First Formic War, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327948408m\/13151129.jpg","authors":"Orson Scott Card, Aaron Johnston"},{"book_id":13151283,"title":"\u0628\u0636\u0639 \u0633\u0627\u0639\u0627\u062a \u0641\u064a \u064a\u0648\u0645 \u0645\u0627","image_url":"https:\/\/images.gr-assets.com\/books\/1410703596m\/13151283.jpg","authors":"\u0645\u062d\u0645\u062f \u0635\u0627\u062f\u0642"},{"book_id":13151637,"title":"\u0637\u0647 \u0627\u0644\u063a\u0631\u064a\u0628","image_url":"https:\/\/images.gr-assets.com\/books\/1421427887m\/13151637.jpg","authors":"\u0645\u062d\u0645\u062f \u0635\u0627\u062f\u0642"},{"book_id":13152194,"title":"Tiny Beautiful Things: Advice on Love and Life from Dear Sugar","image_url":"https:\/\/images.gr-assets.com\/books\/1339807006m\/13152194.jpg","authors":"Cheryl Strayed"},{"book_id":13152287,"title":"Bringing Up B\u00e9b\u00e9: One American Mother Discovers the Wisdom of French Parenting","image_url":"https:\/\/images.gr-assets.com\/books\/1327009243m\/13152287.jpg","authors":"Pamela Druckerman, Abby Craden"},{"book_id":13152668,"title":"Dream Team: How Michael, Magic, Larry, Charles, and the Greatest Team of All Time Conquered the World and Changed the Game of Basketball Forever","image_url":"https:\/\/images.gr-assets.com\/books\/1344619142m\/13152668.jpg","authors":"Jack McCallum"},{"book_id":13152998,"title":"Home","image_url":"https:\/\/images.gr-assets.com\/books\/1333576666m\/13152998.jpg","authors":"Toni Morrison"},{"book_id":13153693,"title":"Ghettoside: A True Story of Murder in America","image_url":"https:\/\/images.gr-assets.com\/books\/1417410395m\/13153693.jpg","authors":"Jill Leovy"},{"book_id":13154150,"title":"Attack on Titan, Vol. 1 (Attack on Titan, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1432712438m\/13154150.jpg","authors":"Hajime Isayama, Sheldon Drzka"},{"book_id":13154933,"title":"Odd Apocalypse (Odd Thomas, #5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Dean Koontz"},{"book_id":13154952,"title":"Calico Joe","image_url":"https:\/\/images.gr-assets.com\/books\/1329430545m\/13154952.jpg","authors":"John Grisham"},{"book_id":13158800,"title":"The Light Between Oceans","image_url":"https:\/\/images.gr-assets.com\/books\/1336683021m\/13158800.jpg","authors":"M.L. Stedman"},{"book_id":13163846,"title":"Darth Vader and Son","image_url":"https:\/\/images.gr-assets.com\/books\/1392020416m\/13163846.jpg","authors":"Jeffrey Brown"},{"book_id":13167062,"title":"Spring Fever","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mary Kay Andrews"},{"book_id":13167796,"title":"A Dog's Journey (A Dog's Purpose, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1327061453m\/13167796.jpg","authors":"W. Bruce Cameron"},{"book_id":13167847,"title":"Most Talkative: Stories from the Front Lines of Pop Culture","image_url":"https:\/\/images.gr-assets.com\/books\/1335383485m\/13167847.jpg","authors":"Andy Cohen"},{"book_id":13170021,"title":"Bomb: The Race to Build\u2014and Steal\u2014the World's Most Dangerous Weapon","image_url":"https:\/\/images.gr-assets.com\/books\/1424981656m\/13170021.jpg","authors":"Steve Sheinkin"},{"book_id":13170596,"title":"Fragments (Partials Sequence, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1352943797m\/13170596.jpg","authors":"Dan Wells"},{"book_id":13178410,"title":"Proper Gauge (Wool, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1323761382m\/13178410.jpg","authors":"Hugh Howey"},{"book_id":13183957,"title":"Shadows (Lux, #0.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1328414465m\/13183957.jpg","authors":"Jennifer L. Armentrout"},{"book_id":13184572,"title":"The Next Best Thing","image_url":"https:\/\/images.gr-assets.com\/books\/1334300363m\/13184572.jpg","authors":"Jennifer Weiner"},{"book_id":13184992,"title":"Rock Chick Regret (Rock Chick, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1328300035m\/13184992.jpg","authors":"Kristen Ashley"},{"book_id":13188676,"title":"Ignite Me (Shatter Me, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1375972497m\/13188676.jpg","authors":"Tahereh Mafi"},{"book_id":13193855,"title":"It Starts with Food: Discover the Whole30 and Change Your Life in Unexpected Ways","image_url":"https:\/\/images.gr-assets.com\/books\/1364140054m\/13193855.jpg","authors":"Dallas Hartwig, Melissa Hartwig"},{"book_id":13202092,"title":"Eat and Run: My Unlikely Journey to Ultramarathon Greatness","image_url":"https:\/\/images.gr-assets.com\/books\/1344746039m\/13202092.jpg","authors":"Scott Jurek, Steve Friedman"},{"book_id":13206760,"title":"Scarlet (The Lunar Chronicles, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1470056982m\/13206760.jpg","authors":"Marissa Meyer"},{"book_id":13206828,"title":"Cress (The Lunar Chronicles, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1470057005m\/13206828.jpg","authors":"Marissa Meyer"},{"book_id":13206900,"title":"Winter (The Lunar Chronicles, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1470057036m\/13206900.jpg","authors":"Marissa Meyer"},{"book_id":13223349,"title":"Batman, Volume 1: The Court of Owls","image_url":"https:\/\/images.gr-assets.com\/books\/1342307351m\/13223349.jpg","authors":"Scott Snyder, Greg Capullo, Jonathan Glapion"},{"book_id":13223520,"title":"Existence (Existence Trilogy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327184429m\/13223520.jpg","authors":"Abbi Glines"},{"book_id":13226173,"title":"The Infernal Devices: Clockwork Angel (The Infernal Devices: Manga, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1344542903m\/13226173.jpg","authors":"Cassandra Clare, Hye-Kyung Baek"},{"book_id":13227319,"title":"Wonder Woman, Volume 1: Blood","image_url":"https:\/\/images.gr-assets.com\/books\/1336978265m\/13227319.jpg","authors":"Brian Azzarello, Cliff Chiang, Tony Akins, Dan Green, Matthew Wilson, Jared K. Fletcher"},{"book_id":13227454,"title":"The Unlikely Pilgrimage of Harold Fry (Harold Fry, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1335816092m\/13227454.jpg","authors":"Rachel Joyce"},{"book_id":13230263,"title":"Mrs. Kennedy and Me: An Intimate Memoir","image_url":"https:\/\/images.gr-assets.com\/books\/1333714646m\/13230263.jpg","authors":"Clint Hill, Lisa McCubbin"},{"book_id":13235689,"title":"How Music Works","image_url":"https:\/\/images.gr-assets.com\/books\/1340792878m\/13235689.jpg","authors":"David Byrne"},{"book_id":13237327,"title":"The Magic (The Secret, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1358271749m\/13237327.jpg","authors":"Rhonda Byrne"},{"book_id":13239822,"title":"Alif the Unseen","image_url":"https:\/\/images.gr-assets.com\/books\/1325543155m\/13239822.jpg","authors":"G. Willow Wilson"},{"book_id":13241659,"title":"Ever After (The Hollows, #11)","image_url":"https:\/\/images.gr-assets.com\/books\/1345396768m\/13241659.jpg","authors":"Kim Harrison"},{"book_id":13252406,"title":"Delusion in Death (In Death, #35)","image_url":"https:\/\/images.gr-assets.com\/books\/1334022208m\/13252406.jpg","authors":"J.D. Robb"},{"book_id":13253276,"title":"Through the Ever Night (Under the Never Sky, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1340892848m\/13253276.jpg","authors":"Veronica Rossi"},{"book_id":13256064,"title":"Phantom (Harry Hole, #9)","image_url":"https:\/\/images.gr-assets.com\/books\/1333577303m\/13256064.jpg","authors":"Jo Nesb\u00f8, Don Bartlett"},{"book_id":13259270,"title":"Free Will","image_url":"https:\/\/images.gr-assets.com\/books\/1332196118m\/13259270.jpg","authors":"Sam Harris"},{"book_id":13262061,"title":"Liar & Spy","image_url":"https:\/\/images.gr-assets.com\/books\/1336000458m\/13262061.jpg","authors":"Rebecca Stead"},{"book_id":13262783,"title":"Every Day (Every Day, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1356993940m\/13262783.jpg","authors":"David Levithan"},{"book_id":13272498,"title":"Last to Die (Rizzoli & Isles, #10)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tess Gerritsen"},{"book_id":13281368,"title":"The Twelve (The Passage, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1331230956m\/13281368.jpg","authors":"Justin Cronin"},{"book_id":13281637,"title":"Intuition (The Premonition, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1327897016m\/13281637.jpg","authors":"Amy A. Bartol"},{"book_id":13282015,"title":"Wait for Me (Against All Odds, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1344212446m\/13282015.jpg","authors":"Elisabeth Naughton"},{"book_id":13312527,"title":"The Opportunist (Love Me with Lies, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1374526831m\/13312527.jpg","authors":"Tarryn Fisher"},{"book_id":13316328,"title":"The Last Dragonslayer (The Chronicles of Kazam, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1346791460m\/13316328.jpg","authors":"Jasper Fforde"},{"book_id":13320466,"title":"The Twelve Tribes of Hattie","image_url":"https:\/\/images.gr-assets.com\/books\/1354713124m\/13320466.jpg","authors":"Ayana Mathis"},{"book_id":13323842,"title":"Predestined (Existence Trilogy, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1327068385m\/13323842.jpg","authors":"Abbi Glines"},{"book_id":13324841,"title":"Son (The Giver, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1349952095m\/13324841.jpg","authors":"Lois Lowry"},{"book_id":13325079,"title":"Billy Lynn's Long Halftime Walk","image_url":"https:\/\/images.gr-assets.com\/books\/1336052759m\/13325079.jpg","authors":"Ben Fountain"},{"book_id":13326831,"title":"The Testing (The Testing, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1363452191m\/13326831.jpg","authors":"Joelle Charbonneau"},{"book_id":13330370,"title":"The Last Policeman (The Last Policeman, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1344370646m\/13330370.jpg","authors":"Ben H. Winters"},{"book_id":13330603,"title":"The Sandcastle Girls","image_url":"https:\/\/images.gr-assets.com\/books\/1332018541m\/13330603.jpg","authors":"Chris Bohjalian"},{"book_id":13330761,"title":"The Dog Stars","image_url":"https:\/\/images.gr-assets.com\/books\/1388122817m\/13330761.jpg","authors":"Peter Heller"},{"book_id":13330771,"title":"Hallucinations","image_url":"https:\/\/images.gr-assets.com\/books\/1440360108m\/13330771.jpg","authors":"Oliver Sacks"},{"book_id":13331184,"title":"Heads in Beds: A Reckless Memoir of Hotels, Hustles, and So-Called Hospitality","image_url":"https:\/\/images.gr-assets.com\/books\/1348186171m\/13331184.jpg","authors":"Jacob Tomsky"},{"book_id":13331199,"title":"The Smitten Kitchen Cookbook","image_url":"https:\/\/images.gr-assets.com\/books\/1336228481m\/13331199.jpg","authors":"Deb Perelman"},{"book_id":13333093,"title":"The Plum Tree","image_url":"https:\/\/images.gr-assets.com\/books\/1339438508m\/13333093.jpg","authors":"Ellen Marie Wiseman"},{"book_id":13335037,"title":"Divergent (Divergent, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1328559506m\/13335037.jpg","authors":"Veronica Roth"},{"book_id":13337715,"title":"A Dance with Dragons: Dreams and Dust (A Song of Ice and Fire #5, Part 1 of 2)","image_url":"https:\/\/images.gr-assets.com\/books\/1331401651m\/13337715.jpg","authors":"George R.R. Martin"},{"book_id":13337716,"title":"A Dance with Dragons: After the Feast (A Song of Ice and Fire #5, Part 2 of 2)","image_url":"https:\/\/images.gr-assets.com\/books\/1327932256m\/13337716.jpg","authors":"George R.R. Martin"},{"book_id":13345975,"title":"Avoiding Commitment (Avoiding, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1343768792m\/13345975.jpg","authors":"K.A. Linde"},{"book_id":13353667,"title":"Zoo","image_url":"https:\/\/images.gr-assets.com\/books\/1355175463m\/13353667.jpg","authors":"James Patterson, Michael Ledwidge"},{"book_id":13359067,"title":"A Wanted Man (Jack Reacher, #17)","image_url":"https:\/\/images.gr-assets.com\/books\/1333623254m\/13359067.jpg","authors":"Lee Child, Dick Hill"},{"book_id":13360101,"title":"Never Seduce a Scot (The Montgomerys and Armstrongs, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1328116176m\/13360101.jpg","authors":"Maya Banks"},{"book_id":13362536,"title":"Opal (Lux, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1348200300m\/13362536.jpg","authors":"Jennifer L. Armentrout"},{"book_id":13363270,"title":"Just One Drop (The Grey Wolves, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1325565121m\/13363270.jpg","authors":"Quinn Loftis"},{"book_id":13366259,"title":"The Yellow Birds","image_url":"https:\/\/images.gr-assets.com\/books\/1346188518m\/13366259.jpg","authors":"Kevin Powers"},{"book_id":13369678,"title":"The Vincent Brothers (The Vincent Boys, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1330071594m\/13369678.jpg","authors":"Abbi Glines"},{"book_id":13372690,"title":"Slammed (Slammed, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1328530463m\/13372690.jpg","authors":"Colleen Hoover"},{"book_id":13390528,"title":"The Fallen Angel (Gabriel Allon, #12)","image_url":"https:\/\/images.gr-assets.com\/books\/1468408514m\/13390528.jpg","authors":"Daniel Silva"},{"book_id":13402447,"title":"UnEnchanted (An Unfortunate Fairy Tale, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1327819697m\/13402447.jpg","authors":"Chanda Hahn"},{"book_id":13406425,"title":"Burn for Burn (Burn for Burn, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1332791803m\/13406425.jpg","authors":"Jenny Han, Siobhan Vivian"},{"book_id":13412515,"title":"Law Man (Dream Man, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1327911077m\/13412515.jpg","authors":"Kristen Ashley"},{"book_id":13413589,"title":"Frost Burned (Mercy Thompson, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1344299919m\/13413589.jpg","authors":"Patricia Briggs"},{"book_id":13414446,"title":"Prodigy (Legend, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1336254717m\/13414446.jpg","authors":"Marie Lu"},{"book_id":13414594,"title":"The Inn at Rose Harbor (Rose Harbor #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Debbie Macomber"},{"book_id":13414599,"title":"Happier at Home: Kiss More, Jump More, Abandon a Project, Read Samuel Johnson, and My Other Experiments in the Practice of Everyday Life","image_url":"https:\/\/images.gr-assets.com\/books\/1344014249m\/13414599.jpg","authors":"Gretchen Rubin, K\u00e4the Mazur"},{"book_id":13414676,"title":"The End of Your Life Book Club","image_url":"https:\/\/images.gr-assets.com\/books\/1333576665m\/13414676.jpg","authors":"Will Schwalbe"},{"book_id":13415554,"title":"The Assassin and the Pirate Lord (Throne of Glass, #0.1)","image_url":"https:\/\/images.gr-assets.com\/books\/1335782612m\/13415554.jpg","authors":"Sarah J. Maas"},{"book_id":13416236,"title":"Whispers at Moonrise (Shadow Falls, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1331497103m\/13416236.jpg","authors":"C.C. Hunter"},{"book_id":13417946,"title":"Eden (Providence, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1404485327m\/13417946.jpg","authors":"Jamie McGuire"},{"book_id":13419891,"title":"The Assassin and the Desert (Throne of Glass, #0.3)","image_url":"https:\/\/images.gr-assets.com\/books\/1335783827m\/13419891.jpg","authors":"Sarah J. Maas"},{"book_id":13425393,"title":"I Suck at Girls","image_url":"https:\/\/images.gr-assets.com\/books\/1335903412m\/13425393.jpg","authors":"Justin Halpern"},{"book_id":13425570,"title":"How Will You Measure Your Life?","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Clayton M. Christensen, James Allworth, Karen Dillon"},{"book_id":13426114,"title":"The Honest Truth About Dishonesty: How We Lie to Everyone - Especially Ourselves","image_url":"https:\/\/images.gr-assets.com\/books\/1331070373m\/13426114.jpg","authors":"Dan Ariely"},{"book_id":13431827,"title":"The Remaining (The Remaining, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1343344146m\/13431827.jpg","authors":"D.J. Molles"},{"book_id":13435889,"title":"How Children Succeed: Grit, Curiosity, and the Hidden Power of Character","image_url":"https:\/\/images.gr-assets.com\/books\/1344730141m\/13435889.jpg","authors":"Paul Tough"},{"book_id":13436373,"title":"Drama","image_url":"https:\/\/images.gr-assets.com\/books\/1330157763m\/13436373.jpg","authors":"Raina Telgemeier, Gurihiru"},{"book_id":13438524,"title":"Flight Behavior","image_url":"https:\/\/images.gr-assets.com\/books\/1352212134m\/13438524.jpg","authors":"Barbara Kingsolver"},{"book_id":13448656,"title":"Motorcycle Man (Dream Man, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1337615202m\/13448656.jpg","authors":"Kristen Ashley"},{"book_id":13450339,"title":"Poison Princess (The Arcana Chronicles, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1356422925m\/13450339.jpg","authors":"Kresley Cole"},{"book_id":13452375,"title":"Legion (Legion, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1338512017m\/13452375.jpg","authors":"Brandon Sanderson"},{"book_id":13453029,"title":"Wool Omnibus (Silo, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1349614200m\/13453029.jpg","authors":"Hugh Howey"},{"book_id":13454149,"title":"Barely Breathing (Breathing, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1347885288m\/13454149.jpg","authors":"Rebecca Donovan"},{"book_id":13477676,"title":"Forgive Me, Leonard Peacock","image_url":"https:\/\/images.gr-assets.com\/books\/1370282544m\/13477676.jpg","authors":"Matthew Quick"},{"book_id":13477819,"title":"Who Could That Be at This Hour? (All the Wrong Questions, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1333060600m\/13477819.jpg","authors":"Lemony Snicket, Seth"},{"book_id":13481275,"title":"Lost Lake (Lost Lake, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1455574760m\/13481275.jpg","authors":"Sarah Addison Allen"},{"book_id":13486122,"title":"The Marriage Bargain (Marriage to a Billionaire, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1329319988m\/13486122.jpg","authors":"Jennifer Probst"},{"book_id":13486632,"title":"The Hundred-Year-Old Man Who Climbed Out of the Window and Disappeared","image_url":"https:\/\/images.gr-assets.com\/books\/1334848488m\/13486632.jpg","authors":"Jonas Jonasson, Rod Bradbury"},{"book_id":13489517,"title":"28 \u062d\u0631\u0641","image_url":"https:\/\/images.gr-assets.com\/books\/1333608288m\/13489517.jpg","authors":"\u0623\u062d\u0645\u062f \u062d\u0644\u0645\u064a"},{"book_id":13489518,"title":"Out of the Dark (The Grey Wolves, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1334785691m\/13489518.jpg","authors":"Quinn Loftis"},{"book_id":13489919,"title":"The Duchess War (Brothers Sinister, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1363009176m\/13489919.jpg","authors":"Courtney Milan"},{"book_id":13490570,"title":"Locke & Key, Vol. 5: Clockworks","image_url":"https:\/\/images.gr-assets.com\/books\/1343848792m\/13490570.jpg","authors":"Joe Hill, Gabriel Rodr\u00edguez"},{"book_id":13495034,"title":"The Black Box (Harry Bosch, #18; Harry Bosch Universe, #22)","image_url":"https:\/\/images.gr-assets.com\/books\/1344765247m\/13495034.jpg","authors":"Michael Connelly"},{"book_id":13496084,"title":"Point of Retreat (Slammed, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1330543249m\/13496084.jpg","authors":"Colleen Hoover"},{"book_id":13496738,"title":"While It Lasts (Sea Breeze, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1332261619m\/13496738.jpg","authors":"Abbi Glines"},{"book_id":13497505,"title":"Love Does: Discover a Secretly Incredible Life in an Ordinary World","image_url":"https:\/\/images.gr-assets.com\/books\/1335237698m\/13497505.jpg","authors":"Bob Goff"},{"book_id":13497818,"title":"The Casual Vacancy","image_url":"https:\/\/images.gr-assets.com\/books\/1358266832m\/13497818.jpg","authors":"J.K. Rowling"},{"book_id":13497991,"title":"The Hydrogen Sonata (Culture #10)","image_url":"https:\/\/images.gr-assets.com\/books\/1340894566m\/13497991.jpg","authors":"Iain M. Banks"},{"book_id":13502963,"title":"Indebted (The Premonition, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1333739536m\/13502963.jpg","authors":"Amy A. Bartol"},{"book_id":13502970,"title":"Incendiary (The Premonition, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1352268218m\/13502970.jpg","authors":"Amy A. Bartol"},{"book_id":13503109,"title":"This Is How You Lose Her","image_url":"https:\/\/images.gr-assets.com\/books\/1342596676m\/13503109.jpg","authors":"Junot D\u00edaz"},{"book_id":13505130,"title":"The Absent One (Department Q, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1336832005m\/13505130.jpg","authors":"Jussi Adler-Olsen, K.E. Semmel"},{"book_id":13507011,"title":"Low Pressure","image_url":"https:\/\/images.gr-assets.com\/books\/1396934108m\/13507011.jpg","authors":"Sandra Brown, Stephen Lang"},{"book_id":13507212,"title":"Bring Up the Bodies (Thomas Cromwell, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1330649655m\/13507212.jpg","authors":"Hilary Mantel"},{"book_id":13508021,"title":"The Midwife of Hope River","image_url":"https:\/\/images.gr-assets.com\/books\/1344449564m\/13508021.jpg","authors":"Patricia Harman"},{"book_id":13508607,"title":"The Secret Keeper","image_url":"https:\/\/images.gr-assets.com\/books\/1455089196m\/13508607.jpg","authors":"Kate Morton"},{"book_id":13513205,"title":"A Wrinkle in Time: The Graphic Novel","image_url":"https:\/\/images.gr-assets.com\/books\/1334801023m\/13513205.jpg","authors":"Hope Larson, Madeleine L'Engle"},{"book_id":13514612,"title":"All Our Yesterdays","image_url":"https:\/\/images.gr-assets.com\/books\/1370046261m\/13514612.jpg","authors":"Cristin Terrill"},{"book_id":13516846,"title":"Dodger","image_url":"https:\/\/images.gr-assets.com\/books\/1343828971m\/13516846.jpg","authors":"Terry Pratchett"},{"book_id":13517455,"title":"Reboot (Reboot, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1350931774m\/13517455.jpg","authors":"Amy Tintera"},{"book_id":13517535,"title":"Thoughtless (Thoughtless, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1331254339m\/13517535.jpg","authors":"S.C. Stephens"},{"book_id":13519844,"title":"Independence (Significance, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1498698039m\/13519844.jpg","authors":"Shelly Crane"},{"book_id":13521299,"title":"Alex Cross, Run (Alex Cross, #20)","image_url":"https:\/\/images.gr-assets.com\/books\/1343360404m\/13521299.jpg","authors":"James Patterson"},{"book_id":13521399,"title":"Confessions of a Murder Suspect (Confessions, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1377041438m\/13521399.jpg","authors":"James Patterson, Maxine Paetro"},{"book_id":13521459,"title":"Red Country (First Law World, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1333663008m\/13521459.jpg","authors":"Joe Abercrombie"},{"book_id":13522285,"title":"The Beginning of Everything","image_url":"https:\/\/images.gr-assets.com\/books\/1366395005m\/13522285.jpg","authors":"Robyn Schneider"},{"book_id":13522957,"title":"Feral Sins (The Phoenix Pack, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1331458140m\/13522957.jpg","authors":"Suzanne Wright"},{"book_id":13523061,"title":"The Defining Decade: Why Your Twenties Matter--And How to Make the Most of Them Now","image_url":"https:\/\/images.gr-assets.com\/books\/1334798998m\/13523061.jpg","authors":"Meg Jay"},{"book_id":13525938,"title":"The Middlesteins","image_url":"https:\/\/images.gr-assets.com\/books\/1339727222m\/13525938.jpg","authors":"Jami Attenberg"},{"book_id":13526026,"title":"The Panther (John Corey, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1338763739m\/13526026.jpg","authors":"Nelson DeMille"},{"book_id":13526165,"title":"Where'd You Go, Bernadette","image_url":"https:\/\/images.gr-assets.com\/books\/1338822317m\/13526165.jpg","authors":"Maria Semple"},{"book_id":13528417,"title":"Tigers in Red Weather","image_url":"https:\/\/images.gr-assets.com\/books\/1336156424m\/13528417.jpg","authors":"Liza Klaussmann"},{"book_id":13529055,"title":"Mortality","image_url":"https:\/\/images.gr-assets.com\/books\/1337177391m\/13529055.jpg","authors":"Christopher Hitchens"},{"book_id":13530973,"title":"Antifragile: Things That Gain from Disorder","image_url":"https:\/\/images.gr-assets.com\/books\/1352422827m\/13530973.jpg","authors":"Nassim Nicholas Taleb"},{"book_id":13530981,"title":"Dear Life: Stories","image_url":"https:\/\/images.gr-assets.com\/books\/1333579320m\/13530981.jpg","authors":"Alice Munro"},{"book_id":13531024,"title":"This is Not My Hat","image_url":"https:\/\/images.gr-assets.com\/books\/1360096324m\/13531024.jpg","authors":"Jon Klassen"},{"book_id":13531832,"title":"Vampires in the Lemon Grove","image_url":"https:\/\/images.gr-assets.com\/books\/1362466523m\/13531832.jpg","authors":"Karen Russell"},{"book_id":13533740,"title":"Thomas Jefferson: The Art of Power","image_url":"https:\/\/images.gr-assets.com\/books\/1342043615m\/13533740.jpg","authors":"Jon Meacham"},{"book_id":13536649,"title":"Trapped (The Iron Druid Chronicles, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1346092123m\/13536649.jpg","authors":"Kevin Hearne"},{"book_id":13536860,"title":"Fifty Shades Freed (Fifty Shades, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1336418837m\/13536860.jpg","authors":"E.L. James"},{"book_id":13537891,"title":"NW","image_url":"https:\/\/images.gr-assets.com\/books\/1492591246m\/13537891.jpg","authors":"Zadie Smith"},{"book_id":13538552,"title":"Memoirs of an Imaginary Friend","image_url":"https:\/\/images.gr-assets.com\/books\/1343851908m\/13538552.jpg","authors":"Matthew Dicks"},{"book_id":13538641,"title":"Killing Kennedy: The End of Camelot","image_url":"https:\/\/images.gr-assets.com\/books\/1337689366m\/13538641.jpg","authors":"Bill O'Reilly, Martin Dugard"},{"book_id":13538873,"title":"Mr. Penumbra's 24-Hour Bookstore (Mr. Penumbra's 24-Hour Bookstore, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1345089845m\/13538873.jpg","authors":"Robin Sloan"},{"book_id":13538992,"title":"Fourth Grave Beneath My Feet (Charley Davidson, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1338721218m\/13538992.jpg","authors":"Darynda Jones"},{"book_id":13539044,"title":"The Silver Linings Playbook","image_url":"https:\/\/images.gr-assets.com\/books\/1358277412m\/13539044.jpg","authors":"Matthew Quick"},{"book_id":13540215,"title":"The Orchardist","image_url":"https:\/\/images.gr-assets.com\/books\/1335562453m\/13540215.jpg","authors":"Amanda Coplin"},{"book_id":13543138,"title":"Blackberry Winter","image_url":"https:\/\/images.gr-assets.com\/books\/1382760152m\/13543138.jpg","authors":"Sarah Jio"},{"book_id":13545075,"title":"UnWholly (Unwind, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1337871062m\/13545075.jpg","authors":"Neal Shusterman"},{"book_id":13545345,"title":"Tales from a Not-So-Graceful Ice Princess (Dork Diaries, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1370064558m\/13545345.jpg","authors":"Rachel Ren\u00e9e Russell"},{"book_id":13546173,"title":"The Assassin and the Underworld (Throne of Glass, #0.4)","image_url":"https:\/\/images.gr-assets.com\/books\/1336062984m\/13546173.jpg","authors":"Sarah J. Maas"},{"book_id":13547180,"title":"Brain on Fire: My Month of Madness","image_url":"https:\/\/images.gr-assets.com\/books\/1353173297m\/13547180.jpg","authors":"Susannah Cahalan"},{"book_id":13547188,"title":"Lone Wolf","image_url":"https:\/\/images.gr-assets.com\/books\/1347278865m\/13547188.jpg","authors":"Jodi Picoult"},{"book_id":13547234,"title":"The Testament of Mary","image_url":"https:\/\/images.gr-assets.com\/books\/1339797728m\/13547234.jpg","authors":"Colm T\u00f3ib\u00edn"},{"book_id":13547241,"title":"Unorthodox: The Scandalous Rejection of My Hasidic Roots","image_url":"https:\/\/images.gr-assets.com\/books\/1336676500m\/13547241.jpg","authors":"Deborah Feldman"},{"book_id":13547289,"title":"Tales from a Not-So-Smart Miss Know-It-All (Dork Diaries, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1370064645m\/13547289.jpg","authors":"Rachel Ren\u00e9e Russell"},{"book_id":13547381,"title":"Love Anthony","image_url":"https:\/\/images.gr-assets.com\/books\/1339757265m\/13547381.jpg","authors":"Lisa Genova"},{"book_id":13547504,"title":"Far from the Tree: Parents, Children, and the Search for Identity","image_url":"https:\/\/images.gr-assets.com\/books\/1363008433m\/13547504.jpg","authors":"Andrew Solomon"},{"book_id":13554713,"title":"Fairy Tales from the Brothers Grimm: A New English Version","image_url":"https:\/\/images.gr-assets.com\/books\/1339554952m\/13554713.jpg","authors":"Philip Pullman, Jacob Grimm, Wilhelm Grimm"},{"book_id":13555073,"title":"The Screaming Staircase (Lockwood & Co., #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1369670906m\/13555073.jpg","authors":"Jonathan Stroud"},{"book_id":13560262,"title":"Avoiding Responsibility (Avoiding, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1351018683m\/13560262.jpg","authors":"K.A. Linde"},{"book_id":13561164,"title":"Dare You To (Pushing the Limits, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1354200468m\/13561164.jpg","authors":"Katie McGarry"},{"book_id":13562049,"title":"Sweet Tooth","image_url":"https:\/\/images.gr-assets.com\/books\/1344373046m\/13562049.jpg","authors":"Ian McEwan"},{"book_id":13562054,"title":"\u0628\u0627\u0628 \u0627\u0644\u062e\u0631\u0648\u062c: \u0631\u0633\u0627\u0644\u0629 \u0639\u0644\u064a \u0627\u0644\u0645\u0641\u0639\u0645\u0629 \u0628\u0628\u0647\u062c\u0629 \u063a\u064a\u0631 \u0645\u062a\u0648\u0642\u0639\u0629","image_url":"https:\/\/images.gr-assets.com\/books\/1340915967m\/13562054.jpg","authors":"\u0639\u0632\u0627\u0644\u062f\u064a\u0646 \u0634\u0643\u0631\u064a \u0641\u0634\u064a\u0631"},{"book_id":13563669,"title":"The Third Wheel (Diary of a Wimpy Kid, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1366229038m\/13563669.jpg","authors":"Jeff Kinney"},{"book_id":13565676,"title":"The Assassin and the Empire (Throne of Glass, #0.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1341877441m\/13565676.jpg","authors":"Sarah J. Maas"},{"book_id":13565914,"title":"Knight (Unfinished Hero, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1333056159m\/13565914.jpg","authors":"Kristen Ashley"},{"book_id":13568322,"title":"The Zombie Room","image_url":"https:\/\/images.gr-assets.com\/books\/1348552492m\/13568322.jpg","authors":"R.D. Ronald"},{"book_id":13568619,"title":"The Shadowhunter's Codex","image_url":"https:\/\/images.gr-assets.com\/books\/1358696072m\/13568619.jpg","authors":"Cassandra Clare, Joshua Lewis"},{"book_id":13569581,"title":"Blood Song (Raven's Shadow, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1421573407m\/13569581.jpg","authors":"Anthony Ryan"},{"book_id":13570854,"title":"Lover at Last (Black Dagger Brotherhood, #11)","image_url":"https:\/\/images.gr-assets.com\/books\/1339084717m\/13570854.jpg","authors":"J.R. Ward"},{"book_id":13572249,"title":"Bared to You (Crossfire, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1477803272m\/13572249.jpg","authors":"Sylvia Day"},{"book_id":13573236,"title":"The Racketeer","image_url":"https:\/\/images.gr-assets.com\/books\/1344371438m\/13573236.jpg","authors":"John Grisham"},{"book_id":13573419,"title":"Great North Road","image_url":"https:\/\/images.gr-assets.com\/books\/1344371600m\/13573419.jpg","authors":"Peter F. Hamilton"},{"book_id":13573622,"title":"The Last Man (Mitch Rapp, #13)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Vince Flynn"},{"book_id":13573795,"title":"Ceaseless (Existence Trilogy, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1351606331m\/13573795.jpg","authors":"Abbi Glines"},{"book_id":13574417,"title":"Alienated (Alienated, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1384610045m\/13574417.jpg","authors":"Melissa Landers"},{"book_id":13578175,"title":"The Emperor's Soul","image_url":"https:\/\/images.gr-assets.com\/books\/1343059311m\/13578175.jpg","authors":"Brandon Sanderson"},{"book_id":13580846,"title":"My Life with the Walter Boys (My Life with the Walter Boys #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1486398662m\/13580846.jpg","authors":"Ali Novak, Fallzswimmer"},{"book_id":13580928,"title":"Perfect Scoundrels (Heist Society, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1340716595m\/13580928.jpg","authors":"Ally Carter"},{"book_id":13580951,"title":"United We Spy (Gallagher Girls, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1368559827m\/13580951.jpg","authors":"Ally Carter"},{"book_id":13581990,"title":"The Eternity Cure (Blood of Eden, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1362772965m\/13581990.jpg","authors":"Julie Kagawa"},{"book_id":13584236,"title":"Fifty Shades Trilogy (Fifty Shades, #1-3)","image_url":"https:\/\/images.gr-assets.com\/books\/1431573483m\/13584236.jpg","authors":"E.L. James"},{"book_id":13586707,"title":"My Brilliant Friend (The Neapolitan Novels #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1343064947m\/13586707.jpg","authors":"Elena Ferrante, Ann Goldstein"},{"book_id":13586743,"title":"One Last Thing Before I Go","image_url":"https:\/\/images.gr-assets.com\/books\/1356593893m\/13586743.jpg","authors":"Jonathan Tropper"},{"book_id":13588356,"title":"Daring Greatly: How the Courage to Be Vulnerable Transforms the Way We Live, Love, Parent, and Lead","image_url":"https:\/\/images.gr-assets.com\/books\/1337110319m\/13588356.jpg","authors":"Bren\u00e9 Brown"},{"book_id":13588394,"title":"The Signal and the Noise: Why So Many Predictions Fail - But Some Don't","image_url":"https:\/\/images.gr-assets.com\/books\/1355058876m\/13588394.jpg","authors":"Nate Silver"},{"book_id":13589182,"title":"Mastery","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert Greene"},{"book_id":13593526,"title":"City of Women","image_url":"https:\/\/images.gr-assets.com\/books\/1479779319m\/13593526.jpg","authors":"David R. Gillham"},{"book_id":13593553,"title":"To Sell Is Human: The Surprising Truth About Moving Others","image_url":"https:\/\/images.gr-assets.com\/books\/1355138750m\/13593553.jpg","authors":"Daniel H. Pink"},{"book_id":13593555,"title":"Mad River (Virgil Flowers, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1341499403m\/13593555.jpg","authors":"John Sandford"},{"book_id":13596166,"title":"Joyland","image_url":"https:\/\/images.gr-assets.com\/books\/1348154483m\/13596166.jpg","authors":"Stephen King"},{"book_id":13596809,"title":"Reflected in You (Crossfire, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1477802540m\/13596809.jpg","authors":"Sylvia Day"},{"book_id":13597723,"title":"The Naturals (The Naturals, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1374862751m\/13597723.jpg","authors":"Jennifer Lynn Barnes"},{"book_id":13597728,"title":"Asylum (Asylum, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1371333892m\/13597728.jpg","authors":"Madeleine Roux"},{"book_id":13600318,"title":"Reckless (Thoughtless, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1356986017m\/13600318.jpg","authors":"S.C. Stephens"},{"book_id":13601550,"title":"Accidentally on Purpose (Accidentally on Purpose, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1465749207m\/13601550.jpg","authors":"L.D. Davis"},{"book_id":13602426,"title":"The Round House","image_url":"https:\/\/images.gr-assets.com\/books\/1352999408m\/13602426.jpg","authors":"Louise Erdrich"},{"book_id":13603717,"title":"First Shift: Legacy (Shift, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1334528415m\/13603717.jpg","authors":"Hugh Howey"},{"book_id":13605723,"title":"Sentinel (Covenant, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1365509138m\/13605723.jpg","authors":"Jennifer L. Armentrout"},{"book_id":13605727,"title":"Elixir (Covenant, #3.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1336124504m\/13605727.jpg","authors":"Jennifer L. Armentrout"},{"book_id":13612739,"title":"Seduced in the Dark (The Dark Duet, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1335114363m\/13612739.jpg","authors":"C.J. Roberts"},{"book_id":13614836,"title":"Tempting the Best Man (Gamble Brothers, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1336112984m\/13614836.jpg","authors":"J. Lynn, Jennifer L. Armentrout"},{"book_id":13615258,"title":"Free Four: Tobias Tells the Divergent Knife-Throwing Scene (Divergent, #1.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1399503802m\/13615258.jpg","authors":"Veronica Roth"},{"book_id":13615414,"title":"Gulp: Adventures on the Alimentary Canal","image_url":"https:\/\/images.gr-assets.com\/books\/1352232547m\/13615414.jpg","authors":"Mary Roach"},{"book_id":13616278,"title":"The Red Knight (The Traitor Son Cycle, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1348037761m\/13616278.jpg","authors":"Miles Cameron"},{"book_id":13618440,"title":"Dreams of Gods & Monsters (Daughter of Smoke & Bone, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1461353810m\/13618440.jpg","authors":"Laini Taylor"},{"book_id":13623012,"title":"The Prisoner of Heaven (The Cemetery of Forgotten Books, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1335994402m\/13623012.jpg","authors":"Carlos Ruiz Zaf\u00f3n"},{"book_id":13623150,"title":"Destroy Me (Shatter Me, #1.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1340398466m\/13623150.jpg","authors":"Tahereh Mafi"},{"book_id":13623777,"title":"Ungifted","image_url":"https:\/\/images.gr-assets.com\/books\/1340757270m\/13623777.jpg","authors":"Gordon Korman"},{"book_id":13624367,"title":"Checkmate (Neighbor from Hell, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1406585363m\/13624367.jpg","authors":"R.L. Mathewson"},{"book_id":13624688,"title":"The Time Keeper","image_url":"https:\/\/images.gr-assets.com\/books\/1340478576m\/13624688.jpg","authors":"Mitch Albom"},{"book_id":13628209,"title":"The Boy Who Sneaks in My Bedroom Window","image_url":"https:\/\/images.gr-assets.com\/books\/1398682775m\/13628209.jpg","authors":"Kirsty Moseley"},{"book_id":13628812,"title":"The Rent Collector","image_url":"https:\/\/images.gr-assets.com\/books\/1340468685m\/13628812.jpg","authors":"Camron Wright"},{"book_id":13630171,"title":"The Skull Throne (Demon Cycle, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1408637760m\/13630171.jpg","authors":"Peter V. Brett"},{"book_id":13634927,"title":"A Leaf on the Wind of All Hallows (Outlander, #8.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1351354006m\/13634927.jpg","authors":"Diana Gabaldon"},{"book_id":13637412,"title":"\u0633\u0627\u0642 \u0627\u0644\u0628\u0627\u0645\u0628\u0648","image_url":"https:\/\/images.gr-assets.com\/books\/1336743682m\/13637412.jpg","authors":"\u0633\u0639\u0648\u062f \u0627\u0644\u0633\u0646\u0639\u0648\u0633\u064a, Saud Alsanousi"},{"book_id":13638125,"title":"Vicious (Villains, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1362495700m\/13638125.jpg","authors":"V.E. Schwab, Victoria Schwab"},{"book_id":13638570,"title":"Out of Breath (Breathing, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1367613888m\/13638570.jpg","authors":"Rebecca Donovan"},{"book_id":13639050,"title":"Gabriel's Rapture (Gabriel's Inferno, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1343962380m\/13639050.jpg","authors":"Sylvain Reynard"},{"book_id":13640229,"title":"Creed (Unfinished Hero, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1347468402m\/13640229.jpg","authors":"Kristen Ashley"},{"book_id":13641208,"title":"Tenth of December","image_url":"https:\/\/images.gr-assets.com\/books\/1349967540m\/13641208.jpg","authors":"George Saunders"},{"book_id":13642710,"title":"Nexus (Nexus, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1347149654m\/13642710.jpg","authors":"Ramez Naam"},{"book_id":13642929,"title":"My Beloved World","image_url":"https:\/\/images.gr-assets.com\/books\/1348791624m\/13642929.jpg","authors":"Sonia Sotomayor"},{"book_id":13642950,"title":"The Aviator's Wife","image_url":"https:\/\/images.gr-assets.com\/books\/1345153864m\/13642950.jpg","authors":"Melanie Benjamin"},{"book_id":13642963,"title":"Speaking from Among the Bones (Flavia de Luce, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1344371922m\/13642963.jpg","authors":"Alan Bradley"},{"book_id":13643567,"title":"The Evolution of Mara Dyer (Mara Dyer, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1336663149m\/13643567.jpg","authors":"Michelle Hodkin"},{"book_id":13644052,"title":"Origin (Lux, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1398100888m\/13644052.jpg","authors":"Jennifer L. Armentrout"},{"book_id":13644055,"title":"Opposition (Lux, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1398694101m\/13644055.jpg","authors":"Jennifer L. Armentrout"},{"book_id":13649056,"title":"Try Me (One Night with Sole Regret, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1347142317m\/13649056.jpg","authors":"Olivia Cunning"},{"book_id":13707738,"title":"Boomerang: Travels in the New Third World","image_url":"https:\/\/images.gr-assets.com\/books\/1345046879m\/13707738.jpg","authors":"Michael Lewis"},{"book_id":13708346,"title":"The Bone Bed (Kay Scarpetta, #20)","image_url":"https:\/\/images.gr-assets.com\/books\/1338860340m\/13708346.jpg","authors":"Patricia Cornwell"},{"book_id":13722526,"title":"The Nightmare (Joona Linna, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1340909323m\/13722526.jpg","authors":"Lars Kepler, Laura A. Wideburg"},{"book_id":13722902,"title":"A Hologram for the King","image_url":"https:\/\/images.gr-assets.com\/books\/1337179987m\/13722902.jpg","authors":"Dave Eggers"},{"book_id":13765729,"title":"Abducted (Lizzy Gardner #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1446520793m\/13765729.jpg","authors":"T.R. Ragan"},{"book_id":14060046,"title":"Obsession","image_url":"https:\/\/images.gr-assets.com\/books\/1368003139m\/14060046.jpg","authors":"Jennifer L. Armentrout"},{"book_id":14061955,"title":"Siege and Storm (Shadow and Bone, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1362166252m\/14061955.jpg","authors":"Leigh Bardugo"},{"book_id":14061957,"title":"Ruin and Rising (Shadow and Bone, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1392398530m\/14061957.jpg","authors":"Leigh Bardugo"},{"book_id":14165516,"title":"The Marriage Trap (Marriage to a Billionaire, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1346736227m\/14165516.jpg","authors":"Jennifer Probst"},{"book_id":14288998,"title":"Into the Still Blue (Under the Never Sky, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1417467183m\/14288998.jpg","authors":"Veronica Rossi"},{"book_id":14290364,"title":"Champion (Legend, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1382652310m\/14290364.jpg","authors":"Marie Lu"},{"book_id":14367051,"title":"City of Bones \/ City of Ashes \/ City of Glass \/ City of Fallen Angels \/ City of Lost Souls (The Mortal Instruments, #1-5)","image_url":"https:\/\/images.gr-assets.com\/books\/1344663518m\/14367051.jpg","authors":"Cassandra Clare"},{"book_id":14568987,"title":"The Art Forger","image_url":"https:\/\/images.gr-assets.com\/books\/1348518546m\/14568987.jpg","authors":"B.A. Shapiro"},{"book_id":14740588,"title":"Notorious Nineteen (Stephanie Plum, #19)","image_url":"https:\/\/images.gr-assets.com\/books\/1345653049m\/14740588.jpg","authors":"Janet Evanovich"},{"book_id":14744381,"title":"The Walking Dead, Compendium 2","image_url":"https:\/\/images.gr-assets.com\/books\/1344152205m\/14744381.jpg","authors":"Robert Kirkman, Charlie Adlard"},{"book_id":14745338,"title":"Fairest (An Unfortunate Fairy Tale, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1338578342m\/14745338.jpg","authors":"Chanda Hahn"},{"book_id":14759321,"title":"Family Pictures ","image_url":"https:\/\/images.gr-assets.com\/books\/1365217958m\/14759321.jpg","authors":"Jane Green"},{"book_id":14781219,"title":"Private Berlin (Private #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1340758912m\/14781219.jpg","authors":"James Patterson, Mark T. Sullivan"},{"book_id":14781501,"title":"NYPD Red (NYPD Red, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1379898888m\/14781501.jpg","authors":"James Patterson, Marshall Karp"},{"book_id":14889780,"title":"Two Graves (Pendergast, #12)","image_url":"https:\/\/images.gr-assets.com\/books\/1346937130m\/14889780.jpg","authors":"Douglas Preston, Lincoln Child"},{"book_id":14897790,"title":"Er ist wieder da","image_url":"https:\/\/images.gr-assets.com\/books\/1338925378m\/14897790.jpg","authors":"Timur Vermes"},{"book_id":15034320,"title":"Pines (Wayward Pines, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1350740525m\/15034320.jpg","authors":"Blake Crouch"},{"book_id":15059301,"title":"Captured (The Captive, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1364810534m\/15059301.jpg","authors":"Erica Stevens"},{"book_id":15062217,"title":"14","image_url":"https:\/\/images.gr-assets.com\/books\/1338999953m\/15062217.jpg","authors":"Peter Clines"},{"book_id":15096257,"title":"The Bloodletter's Daughter: A Novel of Old Bohemia","image_url":"https:\/\/images.gr-assets.com\/books\/1355074644m\/15096257.jpg","authors":"Linda Lafferty"},{"book_id":15283043,"title":"The Distance Between Us","image_url":"https:\/\/images.gr-assets.com\/books\/1358144875m\/15283043.jpg","authors":"Kasie West"},{"book_id":15451058,"title":"My Life on the Road","image_url":"https:\/\/images.gr-assets.com\/books\/1440005972m\/15451058.jpg","authors":"Gloria Steinem"},{"book_id":15505346,"title":"On the Island (On the Island, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1339162550m\/15505346.jpg","authors":"Tracey Garvis-Graves"},{"book_id":15507958,"title":"Me Before You (Me Before You, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1357108762m\/15507958.jpg","authors":"Jojo Moyes"},{"book_id":15513156,"title":"Of Triton (The Syrena Legacy, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1355733528m\/15513156.jpg","authors":"Anna Banks"},{"book_id":15698479,"title":"The Human Division (Old Man's War, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1341582413m\/15698479.jpg","authors":"John Scalzi"},{"book_id":15701217,"title":"The Woman Upstairs","image_url":"https:\/\/images.gr-assets.com\/books\/1345666863m\/15701217.jpg","authors":"Claire Messud"},{"book_id":15703770,"title":"The Runaway King (The Ascendance Trilogy, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1351133357m\/15703770.jpg","authors":"Jennifer A. Nielsen"},{"book_id":15704001,"title":"Seduction and Snacks (Chocolate Lovers, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1371178840m\/15704001.jpg","authors":"Tara Sivec"},{"book_id":15704307,"title":"Saga, Vol. 1 (Saga, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1486028947m\/15704307.jpg","authors":"Brian K. Vaughan, Fiona Staples"},{"book_id":15704459,"title":"Firefight (The Reckoners, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1413220816m\/15704459.jpg","authors":"Brandon Sanderson"},{"book_id":15704486,"title":"Calamity (The Reckoners, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1437098338m\/15704486.jpg","authors":"Brandon Sanderson"},{"book_id":15705011,"title":"The Last Runaway","image_url":"https:\/\/images.gr-assets.com\/books\/1349448072m\/15705011.jpg","authors":"Tracy Chevalier"},{"book_id":15707526,"title":"The First Confessor (The Legend of Magda Searus, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1340889153m\/15707526.jpg","authors":"Terry Goodkind"},{"book_id":15711341,"title":"Written in Red (The Others, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1411439502m\/15711341.jpg","authors":"Anne Bishop"},{"book_id":15717721,"title":"If I Were You (Inside Out, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1397227898m\/15717721.jpg","authors":"Lisa Renee Jones"},{"book_id":15717876,"title":"The Secret of Ella and Micha (The Secret, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1365638597m\/15717876.jpg","authors":"Jessica Sorensen"},{"book_id":15717943,"title":"Hopeless (Hopeless, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1353489892m\/15717943.jpg","authors":"Colleen Hoover"},{"book_id":15722284,"title":"Saint Odd (Odd Thomas, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1403303609m\/15722284.jpg","authors":"Dean Koontz"},{"book_id":15723286,"title":"Curtsies & Conspiracies (Finishing School, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1359660588m\/15723286.jpg","authors":"Gail Carriger"},{"book_id":15724396,"title":"The Sword of Summer (Magnus Chase and the Gods of Asgard, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1434701340m\/15724396.jpg","authors":"Rick Riordan"},{"book_id":15724654,"title":"The Mighty Storm (The Storm, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1345793260m\/15724654.jpg","authors":"Samantha Towle"},{"book_id":15728721,"title":"Two Ravens and One Crow (The Iron Druid Chronicles, #4.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1344336650m\/15728721.jpg","authors":"Kevin Hearne"},{"book_id":15728921,"title":"Don't Let Me Go","image_url":"https:\/\/images.gr-assets.com\/books\/1348261563m\/15728921.jpg","authors":"Catherine Ryan Hyde"},{"book_id":15729261,"title":"The Marriage Mistake (Marriage to a Billionaire, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1348628724m\/15729261.jpg","authors":"Jennifer Probst"},{"book_id":15729539,"title":"NOS4A2","image_url":"https:\/\/images.gr-assets.com\/books\/1369591617m\/15729539.jpg","authors":"Joe Hill"},{"book_id":15730101,"title":"The Call of Cthulhu","image_url":"https:\/\/images.gr-assets.com\/books\/1377787655m\/15730101.jpg","authors":"H.P. Lovecraft"},{"book_id":15731779,"title":"Entwined with You (Crossfire, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1362526983m\/15731779.jpg","authors":"Sylvia Day"},{"book_id":15732712,"title":"One Hundred Names","image_url":"https:\/\/images.gr-assets.com\/books\/1421928433m\/15732712.jpg","authors":"Cecelia Ahern"},{"book_id":15733346,"title":"Is It Just Me?","image_url":"https:\/\/images.gr-assets.com\/books\/1341274679m\/15733346.jpg","authors":"Miranda Hart"},{"book_id":15733523,"title":"The Krishna Key","image_url":"https:\/\/images.gr-assets.com\/books\/1341289060m\/15733523.jpg","authors":"Ashwin Sanghi"},{"book_id":15733851,"title":"You Had Me At Hello","image_url":"https:\/\/images.gr-assets.com\/books\/1348787624m\/15733851.jpg","authors":"Mhairi McFarlane"},{"book_id":15734464,"title":"12th of Never (Women's Murder Club, #12)","image_url":"https:\/\/images.gr-assets.com\/books\/1353436409m\/15734464.jpg","authors":"James Patterson, Maxine Paetro"},{"book_id":15737147,"title":"Help Thanks Wow: The Three Essential Prayers","image_url":"https:\/\/images.gr-assets.com\/books\/1348147479m\/15737147.jpg","authors":"Anne Lamott"},{"book_id":15738951,"title":"Deep Down (Jack Reacher, #16.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1373921650m\/15738951.jpg","authors":"Lee Child"},{"book_id":15739018,"title":"Taking Chances (Taking Chances, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1344296221m\/15739018.jpg","authors":"Molly McAdams"},{"book_id":15742039,"title":"Breathe (Colorado Mountain, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1486770372m\/15742039.jpg","authors":"Kristen Ashley"},{"book_id":15743075,"title":"Seven Years to Sin","image_url":"https:\/\/images.gr-assets.com\/books\/1355259011m\/15743075.jpg","authors":"Sylvia Day"},{"book_id":15743078,"title":"The Divergent Series 2-Book Collection (Divergent, #1-2)","image_url":"https:\/\/images.gr-assets.com\/books\/1341816250m\/15743078.jpg","authors":"Veronica Roth"},{"book_id":15745371,"title":"Chosen at Nightfall (Shadow Falls, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1345739181m\/15745371.jpg","authors":"C.C. Hunter"},{"book_id":15745753,"title":"Eleanor & Park","image_url":"https:\/\/images.gr-assets.com\/books\/1341952742m\/15745753.jpg","authors":"Rainbow Rowell"},{"book_id":15745950,"title":"Walking Disaster (Beautiful, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1352338368m\/15745950.jpg","authors":"Jamie McGuire"},{"book_id":15748335,"title":"Leave Me Breathless (Ross Siblings, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1342660909m\/15748335.jpg","authors":"Cherrie Lynn"},{"book_id":15748898,"title":"My Favorite Mistake (My Favorite Mistake, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1361713404m\/15748898.jpg","authors":"Chelsea M. Cameron"},{"book_id":15749186,"title":"To All the Boys I've Loved Before (To All the Boys I've Loved Before, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1372086100m\/15749186.jpg","authors":"Jenny Han"},{"book_id":15751404,"title":"David and Goliath: Underdogs, Misfits, and the Art of Battling Giants","image_url":"https:\/\/images.gr-assets.com\/books\/1391813567m\/15751404.jpg","authors":"Malcolm Gladwell"},{"book_id":15752115,"title":"Batman, Volume 2: The City of Owls","image_url":"https:\/\/images.gr-assets.com\/books\/1342309403m\/15752115.jpg","authors":"Scott Snyder, Greg Capullo, Jonathan Glapion, James Tynion IV, Rafael Albuquerque, Jason Fabok, Becky Cloonan, Andy Clarke, Sandu Florea"},{"book_id":15752757,"title":"Rock Chick Revolution (Rock Chick, #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1373384839m\/15752757.jpg","authors":"Kristen Ashley"},{"book_id":15753740,"title":"The Storyteller","image_url":"https:\/\/images.gr-assets.com\/books\/1356328634m\/15753740.jpg","authors":"Jodi Picoult"},{"book_id":15755201,"title":"Suspect (Scott James & Maggie, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1345131356m\/15755201.jpg","authors":"Robert Crais"},{"book_id":15757434,"title":"Crash (Crash, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1342588706m\/15757434.jpg","authors":"Nicole Williams"},{"book_id":15760001,"title":"On Dublin Street (On Dublin Street, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1490401910m\/15760001.jpg","authors":"Samantha Young"},{"book_id":15761241,"title":"The Wild Ones (The Wild Ones, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1343215803m\/15761241.jpg","authors":"M. Leighton"},{"book_id":15762186,"title":"Benediction (Plainsong, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1344619032m\/15762186.jpg","authors":"Kent Haruf"},{"book_id":15762657,"title":"Seducing Cinderella (Fighting for Love, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1342860599m\/15762657.jpg","authors":"Gina L. Maxwell"},{"book_id":15762975,"title":"Wrong Bed, Right Guy (Come Undone, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1345817565m\/15762975.jpg","authors":"Katee Robert"},{"book_id":15766776,"title":"Rump: The True Story of Rumpelstiltskin","image_url":"https:\/\/images.gr-assets.com\/books\/1343071412m\/15766776.jpg","authors":"Liesl Shurtliff"},{"book_id":15767586,"title":"Styxx (Dark-Hunter, #22)","image_url":"https:\/\/images.gr-assets.com\/books\/1359269406m\/15767586.jpg","authors":"Sherrilyn Kenyon"},{"book_id":15768191,"title":"Sweet Peril (Sweet, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1351223157m\/15768191.jpg","authors":"Wendy Higgins"},{"book_id":15768409,"title":"The Retribution of Mara Dyer (Mara Dyer, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1417969205m\/15768409.jpg","authors":"Michelle Hodkin"},{"book_id":15768536,"title":"Fall From Grace (Mad World, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1349538226m\/15768536.jpg","authors":"Christine Zolendz"},{"book_id":15769463,"title":"Futures and Frosting (Chocolate Lovers, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1344367548m\/15769463.jpg","authors":"Tara Sivec"},{"book_id":15771862,"title":"Wave","image_url":"https:\/\/images.gr-assets.com\/books\/1362126716m\/15771862.jpg","authors":"Sonali Deraniyagala"},{"book_id":15776309,"title":"Reconstructing Amelia","image_url":"https:\/\/images.gr-assets.com\/books\/1350193583m\/15776309.jpg","authors":"Kimberly McCreight"},{"book_id":15776904,"title":"The Beggar King (The Hangman's Daughter, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1346669999m\/15776904.jpg","authors":"Oliver P\u00f6tzsch, Lee Chadeayne"},{"book_id":15777621,"title":"This Song Will Save Your Life","image_url":"https:\/\/images.gr-assets.com\/books\/1362753915m\/15777621.jpg","authors":"Leila Sales"},{"book_id":15778138,"title":"Just for Now (Sea Breeze, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1348461168m\/15778138.jpg","authors":"Abbi Glines"},{"book_id":15781725,"title":"The House Girl","image_url":"https:\/\/images.gr-assets.com\/books\/1348172541m\/15781725.jpg","authors":"Tara Conklin"},{"book_id":15783307,"title":"The Perfect Game (The Perfect Game, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1345824139m\/15783307.jpg","authors":"J. Sterling"},{"book_id":15783514,"title":"The Ocean at the End of the Lane","image_url":"https:\/\/images.gr-assets.com\/books\/1497098563m\/15783514.jpg","authors":"Neil Gaiman"},{"book_id":15784909,"title":"This Girl (Slammed, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1364326075m\/15784909.jpg","authors":"Colleen Hoover"},{"book_id":15786110,"title":"Relish: My Life in the Kitchen","image_url":"https:\/\/images.gr-assets.com\/books\/1345686126m\/15786110.jpg","authors":"Lucy Knisley"},{"book_id":15786792,"title":"Paris","image_url":"https:\/\/images.gr-assets.com\/books\/1344117043m\/15786792.jpg","authors":"Edward Rutherfurd"},{"book_id":15790837,"title":"Let's Explore Diabetes with Owls","image_url":"https:\/\/images.gr-assets.com\/books\/1359704028m\/15790837.jpg","authors":"David Sedaris"},{"book_id":15790842,"title":"Life After Life","image_url":"https:\/\/images.gr-assets.com\/books\/1358173808m\/15790842.jpg","authors":"Kate Atkinson"},{"book_id":15790873,"title":"This Is What Happy Looks Like (This is What Happy Looks Like, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1344444283m\/15790873.jpg","authors":"Jennifer E. Smith"},{"book_id":15790883,"title":"Promise of Blood (Powder Mage, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1350337505m\/15790883.jpg","authors":"Brian McClellan"},{"book_id":15791154,"title":"The Hit (Will Robie, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1361749502m\/15791154.jpg","authors":"David Baldacci"},{"book_id":15791403,"title":"Mistress","image_url":"https:\/\/images.gr-assets.com\/books\/1375363772m\/15791403.jpg","authors":"James Patterson, David Ellis"},{"book_id":15793068,"title":"The Gate Thief (Mither Mages, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1360823446m\/15793068.jpg","authors":"Orson Scott Card"},{"book_id":15793074,"title":"Best Kept Secret (The Clifton Chronicles, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jeffrey Archer"},{"book_id":15793165,"title":"Don't Go","image_url":"https:\/\/images.gr-assets.com\/books\/1368362941m\/15793165.jpg","authors":"Lisa Scottoline"},{"book_id":15793184,"title":"Calling Me Home","image_url":"https:\/\/images.gr-assets.com\/books\/1359803797m\/15793184.jpg","authors":"Julie Kibler"},{"book_id":15793186,"title":"The Good House","image_url":"https:\/\/images.gr-assets.com\/books\/1392668194m\/15793186.jpg","authors":"Ann Leary"},{"book_id":15793231,"title":"If You Find Me","image_url":"https:\/\/images.gr-assets.com\/books\/1369597694m\/15793231.jpg","authors":"Emily Murdoch"},{"book_id":15795628,"title":"Blackmoore","image_url":"https:\/\/images.gr-assets.com\/books\/1366846456m\/15795628.jpg","authors":"Julianne Donaldson"},{"book_id":15796700,"title":"Americanah","image_url":"https:\/\/images.gr-assets.com\/books\/1356654499m\/15796700.jpg","authors":"Chimamanda Ngozi Adichie"},{"book_id":15797397,"title":"Salt Sugar Fat: How the Food Giants Hooked Us","image_url":"https:\/\/images.gr-assets.com\/books\/1361919312m\/15797397.jpg","authors":"Michael Moss"},{"book_id":15797722,"title":"Deeply Odd (Odd Thomas, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1364250954m\/15797722.jpg","authors":"Dean Koontz"},{"book_id":15797938,"title":"The Dinner","image_url":"https:\/\/images.gr-assets.com\/books\/1355949630m\/15797938.jpg","authors":"Herman Koch, Sam Garrett"},{"book_id":15799151,"title":"Daily Rituals: How Artists Work","image_url":"https:\/\/images.gr-assets.com\/books\/1344618847m\/15799151.jpg","authors":"Mason Currey"},{"book_id":15799166,"title":"Release Me (Stark Trilogy, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"J. Kenner"},{"book_id":15799936,"title":"How to Tell If Your Cat Is Plotting to Kill You","image_url":"https:\/\/images.gr-assets.com\/books\/1461518764m\/15799936.jpg","authors":"Matthew Inman, The Oatmeal"},{"book_id":15801381,"title":"Chasing the Prophecy (Beyonders, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1356328161m\/15801381.jpg","authors":"Brandon Mull"},{"book_id":15801668,"title":"The Girls of Atomic City: The Untold Story of the Women Who Helped Win World War II","image_url":"https:\/\/images.gr-assets.com\/books\/1352912866m\/15801668.jpg","authors":"Denise Kiernan"},{"book_id":15801967,"title":"Contagious: Why Things Catch On","image_url":"https:\/\/images.gr-assets.com\/books\/1376783352m\/15801967.jpg","authors":"Jonah Berger"},{"book_id":15802944,"title":"Carry On, Warrior: Thoughts on Life Unarmed","image_url":"https:\/\/images.gr-assets.com\/books\/1359054516m\/15802944.jpg","authors":"Glennon Doyle Melton"},{"book_id":15803037,"title":"Red Sparrow (Red Sparrow Trilogy #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1361806944m\/15803037.jpg","authors":"Jason Matthews"},{"book_id":15803059,"title":"Ordinary Grace","image_url":"https:\/\/images.gr-assets.com\/books\/1358264094m\/15803059.jpg","authors":"William Kent Krueger"},{"book_id":15803141,"title":"The Flamethrowers","image_url":"https:\/\/images.gr-assets.com\/books\/1387146199m\/15803141.jpg","authors":"Rachel Kushner"},{"book_id":15803757,"title":"The Best Man (Blue Heron, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kristan Higgins"},{"book_id":15806231,"title":"Calculated in Death (In Death, #36)","image_url":"https:\/\/images.gr-assets.com\/books\/1346079575m\/15806231.jpg","authors":"J.D. Robb"},{"book_id":15808287,"title":"Mrs. Lincoln's Dressmaker","image_url":"https:\/\/images.gr-assets.com\/books\/1350586527m\/15808287.jpg","authors":"Jennifer Chiaverini"},{"book_id":15808816,"title":"A Higher Call: An Incredible True Story of Combat and Chivalry in the War-Torn Skies of World War II","image_url":"https:\/\/images.gr-assets.com\/books\/1350889524m\/15808816.jpg","authors":"Adam Makos, Larry Alexander"},{"book_id":15810910,"title":"The Thousand Names (The Shadow Campaigns, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1355441268m\/15810910.jpg","authors":"Django Wexler"},{"book_id":15811495,"title":"Touch & Go (Tessa Leoni, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1348273633m\/15811495.jpg","authors":"Lisa Gardner"},{"book_id":15811496,"title":"Cooked: A Natural History of Transformation","image_url":"https:\/\/images.gr-assets.com\/books\/1350939053m\/15811496.jpg","authors":"Michael Pollan"},{"book_id":15811520,"title":"Detroit: An American Autopsy","image_url":"https:\/\/images.gr-assets.com\/books\/1350363602m\/15811520.jpg","authors":"Charlie LeDuff"},{"book_id":15811545,"title":"A Tale for the Time Being","image_url":"https:\/\/images.gr-assets.com\/books\/1463767452m\/15811545.jpg","authors":"Ruth Ozeki"},{"book_id":15811568,"title":"Six Years","image_url":"https:\/\/images.gr-assets.com\/books\/1348406182m\/15811568.jpg","authors":"Harlan Coben"},{"book_id":15812814,"title":"Crossed (Matched, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1374335939m\/15812814.jpg","authors":"Ally Condie"},{"book_id":15813668,"title":"Fifth Grave Past the Light (Charley Davidson, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1355718001m\/15813668.jpg","authors":"Darynda Jones"},{"book_id":15814872,"title":"No Easy Day: The Firsthand Account of the Mission That Killed Osama Bin Laden","image_url":"https:\/\/images.gr-assets.com\/books\/1345815909m\/15814872.jpg","authors":"Mark Owen, Kevin Maurer"},{"book_id":15815333,"title":"The Interestings","image_url":"https:\/\/images.gr-assets.com\/books\/1451446889m\/15815333.jpg","authors":"Meg Wolitzer"},{"book_id":15815364,"title":"How to Get Filthy Rich in Rising Asia","image_url":"https:\/\/images.gr-assets.com\/books\/1353428459m\/15815364.jpg","authors":"Mohsin Hamid"},{"book_id":15818107,"title":"Orphan Train","image_url":"https:\/\/images.gr-assets.com\/books\/1362409483m\/15818107.jpg","authors":"Christina Baker Kline"},{"book_id":15818164,"title":"The Blood Gospel (The Order of the Sanguines, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1357605320m\/15818164.jpg","authors":"James Rollins, Rebecca Cantrell"},{"book_id":15818278,"title":"The One I Left Behind","image_url":"https:\/\/images.gr-assets.com\/books\/1348689472m\/15818278.jpg","authors":"Jennifer McMahon"},{"book_id":15818333,"title":"The Death of Bees","image_url":"https:\/\/images.gr-assets.com\/books\/1358353202m\/15818333.jpg","authors":"Lisa O'Donnell"},{"book_id":15818362,"title":"Into the Darkest Corner","image_url":"https:\/\/images.gr-assets.com\/books\/1355923186m\/15818362.jpg","authors":"Elizabeth Haynes"},{"book_id":15819028,"title":"The Golem and the Jinni (The Golem and the Jinni, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1349205573m\/15819028.jpg","authors":"Helene Wecker"},{"book_id":15820492,"title":"Annabel (Delirium, #0.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1348079378m\/15820492.jpg","authors":"Lauren Oliver"},{"book_id":15820748,"title":"The Prince (The Selection, #0.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1354127071m\/15820748.jpg","authors":"Kiera Cass"},{"book_id":15823426,"title":"The Secret Race: Inside the Hidden World of the Tour de France: Doping, Cover-ups, and Winning at All Costs","image_url":"https:\/\/images.gr-assets.com\/books\/1344963275m\/15823426.jpg","authors":"Tyler Hamilton, Daniel Coyle"},{"book_id":15823461,"title":"The Burgess Boys","image_url":"https:\/\/images.gr-assets.com\/books\/1351213545m\/15823461.jpg","authors":"Elizabeth Strout"},{"book_id":15823480,"title":"Anna Karenina","image_url":"https:\/\/images.gr-assets.com\/books\/1352422904m\/15823480.jpg","authors":"Leo Tolstoy, Louise Maude, Leo Tolstoj, Aylmer Maude"},{"book_id":15824358,"title":"The First 90 Days, Updated and Expanded: Critical Success Strategies for New Leaders at All Levels","image_url":"https:\/\/images.gr-assets.com\/books\/1354903827m\/15824358.jpg","authors":"Michael D. Watkins"},{"book_id":15827066,"title":"Beyond Belief: My Secret Life Inside Scientology and My Harrowing Escape","image_url":"https:\/\/images.gr-assets.com\/books\/1354001608m\/15827066.jpg","authors":"Jenna Miscavige Hill, Lisa Pulitzer"},{"book_id":15828714,"title":"Sometimes It Lasts (Sea Breeze, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1415292563m\/15828714.jpg","authors":"Abbi Glines"},{"book_id":15832316,"title":"Dirty Red (Love Me with Lies, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1364298887m\/15832316.jpg","authors":"Tarryn Fisher"},{"book_id":15832932,"title":"What I Thought Was True","image_url":"https:\/\/images.gr-assets.com\/books\/1479774148m\/15832932.jpg","authors":"Huntley Fitzpatrick"},{"book_id":15833693,"title":"Waiting to Be Heard: A Memoir","image_url":"https:\/\/images.gr-assets.com\/books\/1367786694m\/15833693.jpg","authors":"Amanda Knox"},{"book_id":15835685,"title":"Clash (Crash, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1345393364m\/15835685.jpg","authors":"Nicole Williams"},{"book_id":15839976,"title":"Red Rising (Red Rising, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1461354651m\/15839976.jpg","authors":"Pierce Brown"},{"book_id":15839984,"title":"Cruel Beauty (Cruel Beauty Universe, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1371652590m\/15839984.jpg","authors":"Rosamund Hodge"},{"book_id":15842230,"title":"The Forgotten (John Puller, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1350923777m\/15842230.jpg","authors":"David Baldacci"},{"book_id":15842441,"title":"Effortless (Thoughtless, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1364805648m\/15842441.jpg","authors":"S.C. Stephens"},{"book_id":15843166,"title":"You Are a Badass: How to Stop Doubting Your Greatness and Start Living an Awesome Life","image_url":"https:\/\/images.gr-assets.com\/books\/1351539051m\/15843166.jpg","authors":"Jen Sincero"},{"book_id":15849910,"title":"The King's Curse (The Plantagenet and Tudor Novels, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1405267460m\/15849910.jpg","authors":"Philippa Gregory"},{"book_id":15851746,"title":"Proof of Heaven: A Neurosurgeon's Journey into the Afterlife","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Eben Alexander"},{"book_id":15852479,"title":"We Need New Names","image_url":"https:\/\/images.gr-assets.com\/books\/1352225506m\/15852479.jpg","authors":"NoViolet Bulawayo"},{"book_id":15852756,"title":"Naked (The Blackstone Affair, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1346136598m\/15852756.jpg","authors":"Raine Miller"},{"book_id":15858248,"title":"Wallbanger (Cocktail, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1352205960m\/15858248.jpg","authors":"Alice Clayton"},{"book_id":15861491,"title":"The Fall of Five (Lorien Legacies, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1375365364m\/15861491.jpg","authors":"Pittacus Lore"},{"book_id":15902792,"title":"Still Foolin' 'Em: Where I've Been, Where I'm Going, and Where the Hell Are My Keys","image_url":"https:\/\/images.gr-assets.com\/books\/1411351481m\/15902792.jpg","authors":"Billy Crystal"},{"book_id":15937108,"title":"Counting by 7s","image_url":"https:\/\/images.gr-assets.com\/books\/1396225872m\/15937108.jpg","authors":"Holly Goldberg Sloan"},{"book_id":15942636,"title":"The Firebird (Slains, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1347896972m\/15942636.jpg","authors":"Susanna Kearsley"},{"book_id":15944406,"title":"Doll Bones","image_url":"https:\/\/images.gr-assets.com\/books\/1424981042m\/15944406.jpg","authors":"Holly Black, Eliza Wheeler"},{"book_id":15954540,"title":"The Wretched of Muirwood (Legends of Muirwood, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1356123105m\/15954540.jpg","authors":"Jeff Wheeler"},{"book_id":15954546,"title":"Not Quite Dating (Not Quite, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1350588787m\/15954546.jpg","authors":"Catherine Bybee"},{"book_id":15981894,"title":"Devoured (Devoured, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1347063810m\/15981894.jpg","authors":"Emily Snow"},{"book_id":15984268,"title":"The Universe Versus Alex Woods","image_url":"https:\/\/images.gr-assets.com\/books\/1352436020m\/15984268.jpg","authors":"Gavin Extence"},{"book_id":15985348,"title":"Dead Ever After (Sookie Stackhouse, #13)","image_url":"https:\/\/images.gr-assets.com\/books\/1352158186m\/15985348.jpg","authors":"Charlaine Harris"},{"book_id":15985372,"title":"Affliction (Anita Blake, Vampire Hunter #22)","image_url":"https:\/\/images.gr-assets.com\/books\/1350942756m\/15985372.jpg","authors":"Laurell K. Hamilton"},{"book_id":15985373,"title":"Emperor of Thorns (The Broken Empire, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1352546239m\/15985373.jpg","authors":"Mark Lawrence"},{"book_id":15985392,"title":"Threat Vector (Jack Ryan Universe, #15)","image_url":"https:\/\/images.gr-assets.com\/books\/1352225908m\/15985392.jpg","authors":"Tom Clancy, Mark Greaney"},{"book_id":15990489,"title":"A Week in Winter","image_url":"https:\/\/images.gr-assets.com\/books\/1346827587m\/15990489.jpg","authors":"Maeve Binchy"},{"book_id":15990969,"title":"Ten Tiny Breaths (Ten Tiny Breaths, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1368808763m\/15990969.jpg","authors":"K.A. Tucker"},{"book_id":15993374,"title":"Charade (Games, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1357756816m\/15993374.jpg","authors":"Nyrae Dawn"},{"book_id":15994634,"title":"Z: A Novel of Zelda Fitzgerald","image_url":"https:\/\/images.gr-assets.com\/books\/1396815892m\/15994634.jpg","authors":"Therese Anne Fowler"},{"book_id":16000044,"title":"Rebel Spring (Falling Kingdoms, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1379031383m\/16000044.jpg","authors":"Morgan Rhodes, Michelle Rowen"},{"book_id":16000980,"title":"The Wanderer (Thunder Point, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robyn Carr"},{"book_id":16001443,"title":"All In (The Blackstone Affair, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1358492101m\/16001443.jpg","authors":"Raine Miller"},{"book_id":16001893,"title":"Down to You (The Bad Boys, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1347544660m\/16001893.jpg","authors":"M. Leighton"},{"book_id":16002136,"title":"Hawkeye, Volume 1: My Life as a Weapon","image_url":"https:\/\/images.gr-assets.com\/books\/1360413248m\/16002136.jpg","authors":"Matt Fraction, David Aja, Javier Pulido, Matt Hollingsworth, Chris Eliopoulos, Alan Davis"},{"book_id":16007855,"title":"Sweet Reckoning (Sweet, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1381492410m\/16007855.jpg","authors":"Wendy Higgins"},{"book_id":16029994,"title":"Sins & Needles (The Artists Trilogy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1347859611m\/16029994.jpg","authors":"Karina Halle"},{"book_id":16031620,"title":"\u0627\u0644\u0641\u064a\u0644 \u0627\u0644\u0623\u0632\u0631\u0642","image_url":"https:\/\/images.gr-assets.com\/books\/1485105416m\/16031620.jpg","authors":"\u0623\u062d\u0645\u062f \u0645\u0631\u0627\u062f"},{"book_id":16031679,"title":"Tempting the Player (Gamble Brothers, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1351035223m\/16031679.jpg","authors":"J. Lynn, Jennifer L. Armentrout"},{"book_id":16033842,"title":"La V\u00e9rit\u00e9 sur l'affaire Harry Quebert","image_url":"https:\/\/images.gr-assets.com\/books\/1347987605m\/16033842.jpg","authors":"Jo\u00ebl Dicker"},{"book_id":16033902,"title":"Rush (Breathless, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1359943771m\/16033902.jpg","authors":"Maya Banks"},{"book_id":16033906,"title":"Fever (Breathless, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1359944376m\/16033906.jpg","authors":"Maya Banks"},{"book_id":16033909,"title":"Burn (Breathless, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1359944814m\/16033909.jpg","authors":"Maya Banks"},{"book_id":16034964,"title":"Losing It (Losing It, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1348459319m\/16034964.jpg","authors":"Cora Carmack"},{"book_id":16041169,"title":"Disastrous (Disastrous, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1348436233m\/16041169.jpg","authors":"E.L. Montes"},{"book_id":16042305,"title":"Love Left Behind","image_url":"https:\/\/images.gr-assets.com\/books\/1348436759m\/16042305.jpg","authors":"S.H. Kolee"},{"book_id":16043804,"title":"The Crown Tower (The Riyria Chronicles, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1375570227m\/16043804.jpg","authors":"Michael J. Sullivan"},{"book_id":16044981,"title":"Fly Away (Firefly Lane, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1355338978m\/16044981.jpg","authors":"Kristin Hannah"},{"book_id":16045078,"title":"Ladies' Night","image_url":"https:\/\/images.gr-assets.com\/books\/1376835524m\/16045078.jpg","authors":"Mary Kay Andrews"},{"book_id":16045140,"title":"The Love Affairs of Nathaniel P.","image_url":"https:\/\/images.gr-assets.com\/books\/1361026301m\/16045140.jpg","authors":"Adelle Waldman"},{"book_id":16045144,"title":"The Beautiful Mystery (Chief Inspector Armand Gamache, #8)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Louise Penny"},{"book_id":16045855,"title":"Crush (Crush, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1348535295m\/16045855.jpg","authors":"Lacey Weatherford"},{"book_id":16047244,"title":"Rock the Heart (Black Falcon, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1403549370m\/16047244.jpg","authors":"Michelle A. Valentine"},{"book_id":16052012,"title":"Flora and Ulysses: The Illuminated Adventures","image_url":"https:\/\/images.gr-assets.com\/books\/1424980670m\/16052012.jpg","authors":"Kate DiCamillo, K.G. Campbell"},{"book_id":16053316,"title":"Wethering the Storm (The Storm, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1368083888m\/16053316.jpg","authors":"Samantha Towle"},{"book_id":16054217,"title":"The Book of Life (All Souls Trilogy, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1389281784m\/16054217.jpg","authors":"Deborah Harkness"},{"book_id":16054808,"title":"Escape from Mr. Lemoncello's Library (Mr. Lemoncello's Library #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1379335670m\/16054808.jpg","authors":"Chris Grabenstein"},{"book_id":16054811,"title":"Manuscript Found in Accra","image_url":"https:\/\/images.gr-assets.com\/books\/1362586181m\/16054811.jpg","authors":"Paulo Coelho, Margaret Jull Costa"},{"book_id":16055475,"title":"The Forever of Ella and Micha (The Secret, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1363575595m\/16055475.jpg","authors":"Jessica Sorensen"},{"book_id":16056408,"title":"Easy (Contours of the Heart, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1349370267m\/16056408.jpg","authors":"Tammara Webber"},{"book_id":16056862,"title":"The Unwanted Wife (Unwanted, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1349084566m\/16056862.jpg","authors":"Natasha Anders"},{"book_id":16058610,"title":"Whistling Past the Graveyard","image_url":"https:\/\/images.gr-assets.com\/books\/1360518751m\/16058610.jpg","authors":"Susan Crandall"},{"book_id":16061295,"title":"Sixth Grave on the Edge (Charley Davidson, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1396827029m\/16061295.jpg","authors":"Darynda Jones"},{"book_id":16061734,"title":"May We Be Forgiven","image_url":"https:\/\/images.gr-assets.com\/books\/1349221581m\/16061734.jpg","authors":"A.M. Homes"},{"book_id":16062210,"title":"Music of the Heart (Runaway Train, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1458915186m\/16062210.jpg","authors":"Katie Ashley"},{"book_id":16062211,"title":"The Proposition (The Proposition, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1355433171m\/16062211.jpg","authors":"Katie Ashley"},{"book_id":16065004,"title":"Shadows of Self (Mistborn, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1435053013m\/16065004.jpg","authors":"Brandon Sanderson"},{"book_id":16065538,"title":"The Eye of God (Sigma Force #9)","image_url":"https:\/\/images.gr-assets.com\/books\/1359823174m\/16065538.jpg","authors":"James Rollins"},{"book_id":16066586,"title":"The Cellar (The Cellar, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1349350056m\/16066586.jpg","authors":"Natasha Preston"},{"book_id":16068780,"title":"The Jewel (The Lone City, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1392220609m\/16068780.jpg","authors":"Amy Ewing"},{"book_id":16068905,"title":"Fangirl","image_url":"https:\/\/images.gr-assets.com\/books\/1499565420m\/16068905.jpg","authors":"Rainbow Rowell"},{"book_id":16069030,"title":"The Winner's Curse (The Winner's Trilogy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1377023523m\/16069030.jpg","authors":"Marie Rutkoski"},{"book_id":16070018,"title":"Truth (Consequences, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1398768721m\/16070018.jpg","authors":"Aleatha Romig"},{"book_id":16070143,"title":"Teardrop (Teardrop, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1360596375m\/16070143.jpg","authors":"Lauren Kate"},{"book_id":16070521,"title":"Come Away with Me (With Me in Seattle, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1350383614m\/16070521.jpg","authors":"Kristen Proby"},{"book_id":16070903,"title":"Fallen Too Far (Rosemary Beach, #1; Too Far, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1349565157m\/16070903.jpg","authors":"Abbi Glines"},{"book_id":16071701,"title":"Bad Monkey","image_url":"https:\/\/images.gr-assets.com\/books\/1359148688m\/16071701.jpg","authors":"Carl Hiaasen"},{"book_id":16071736,"title":"The Engagements","image_url":"https:\/\/images.gr-assets.com\/books\/1361254904m\/16071736.jpg","authors":"J. Courtney Sullivan"},{"book_id":16071745,"title":"Someday, Someday, Maybe","image_url":"https:\/\/images.gr-assets.com\/books\/1480527588m\/16071745.jpg","authors":"Lauren Graham"},{"book_id":16071748,"title":"Hunted (The Iron Druid Chronicles, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1358135117m\/16071748.jpg","authors":"Kevin Hearne"},{"book_id":16071764,"title":"Lean In: Women, Work, and the Will to Lead","image_url":"https:\/\/images.gr-assets.com\/books\/1364250803m\/16071764.jpg","authors":"Sheryl Sandberg, Nell Scovell"},{"book_id":16071767,"title":"Unseen (Will Trent, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1361517437m\/16071767.jpg","authors":"Karin Slaughter"},{"book_id":16074748,"title":"Tales from a Not-So-Happy Heartbreaker (Dork Diaries, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1418103694m\/16074748.jpg","authors":"Rachel Ren\u00e9e Russell"},{"book_id":16074758,"title":"Dangerous Girls","image_url":"https:\/\/images.gr-assets.com\/books\/1356513050m\/16074758.jpg","authors":"Abigail Haas, Abby McDonald"},{"book_id":16076787,"title":"\u0627\u0644\u0633\u0646\u062c\u0629","image_url":"https:\/\/images.gr-assets.com\/books\/1349778839m\/16076787.jpg","authors":"\u0623\u062d\u0645\u062f \u062e\u0627\u0644\u062f \u062a\u0648\u0641\u064a\u0642"},{"book_id":16077150,"title":"Instructions for a Heatwave","image_url":"https:\/\/images.gr-assets.com\/books\/1349796972m\/16077150.jpg","authors":"Maggie O'Farrell"},{"book_id":16079228,"title":"Beautifully Damaged (Beautifully Damaged, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1350800166m\/16079228.jpg","authors":"L.A. Fiore"},{"book_id":16081202,"title":"Open Road Summer","image_url":"https:\/\/images.gr-assets.com\/books\/1405104324m\/16081202.jpg","authors":"Emery Lord"},{"book_id":16081272,"title":"The Edge of Never (The Edge of Never, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1358810128m\/16081272.jpg","authors":"J.A. Redmerski"},{"book_id":16081754,"title":"Find You in the Dark (Find You in the Dark, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1359627731m\/16081754.jpg","authors":"A. Meredith Walters"},{"book_id":16081961,"title":"\u0627\u0644\u0623\u0633\u0648\u062f \u064a\u0644\u064a\u0642 \u0628\u0643","image_url":"https:\/\/images.gr-assets.com\/books\/1351004560m\/16081961.jpg","authors":"\u0623\u062d\u0644\u0627\u0645 \u0645\u0633\u062a\u063a\u0627\u0646\u0645\u064a, Ahlam Mosteghanemi"},{"book_id":16084702,"title":"Fifty Shades Duo: Fifty Shades Darker \/ Fifty Shades Freed (Fifty Shades, #2-3)","image_url":"https:\/\/images.gr-assets.com\/books\/1350174326m\/16084702.jpg","authors":"E.L. James"},{"book_id":16085481,"title":"Crazy Rich Asians (Crazy Rich Asians #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1364852559m\/16085481.jpg","authors":"Kevin Kwan"},{"book_id":16085517,"title":"TransAtlantic","image_url":"https:\/\/images.gr-assets.com\/books\/1367929787m\/16085517.jpg","authors":"Colum McCann"},{"book_id":16090636,"title":"Fight with Me (With Me in Seattle, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1355896180m\/16090636.jpg","authors":"Kristen Proby"},{"book_id":16090981,"title":"Thief (Love Me with Lies, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1361401256m\/16090981.jpg","authors":"Tarryn Fisher"},{"book_id":16093188,"title":"Up to Me (The Bad Boys, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1355328750m\/16093188.jpg","authors":"M. Leighton"},{"book_id":16096514,"title":"Crush (Crash, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1350690968m\/16096514.jpg","authors":"Nicole Williams"},{"book_id":16096824,"title":"A Court of Thorns and Roses (A Court of Thorns and Roses, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1491595796m\/16096824.jpg","authors":"Sarah J. Maas"},{"book_id":16096873,"title":"Revealed (House of Night, #11)","image_url":"https:\/\/images.gr-assets.com\/books\/1369156173m\/16096873.jpg","authors":"P.C. Cast, Kristin Cast"},{"book_id":16099159,"title":"Claim Me (Stark Trilogy, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1358614559m\/16099159.jpg","authors":"J. Kenner"},{"book_id":16099180,"title":"Sisterland","image_url":"https:\/\/images.gr-assets.com\/books\/1362466425m\/16099180.jpg","authors":"Curtis Sittenfeld"},{"book_id":16099189,"title":"The Light in the Ruins","image_url":"https:\/\/images.gr-assets.com\/books\/1355182026m\/16099189.jpg","authors":"Chris Bohjalian"},{"book_id":16101018,"title":"The Day the Crayons Quit","image_url":"https:\/\/images.gr-assets.com\/books\/1397425766m\/16101018.jpg","authors":"Drew Daywalt, Oliver Jeffers"},{"book_id":16101126,"title":"The Moon and More","image_url":"https:\/\/images.gr-assets.com\/books\/1426912781m\/16101126.jpg","authors":"Sarah Dessen"},{"book_id":16101128,"title":"The 5th Wave (The 5th Wave, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1359853842m\/16101128.jpg","authors":"Rick Yancey"},{"book_id":16102004,"title":"Beautiful Bastard (Beautiful Bastard, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1362258921m\/16102004.jpg","authors":"Christina Lauren"},{"book_id":16102880,"title":"Bad Rep (Bad Rep, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1351282857m\/16102880.jpg","authors":"A. Meredith Walters"},{"book_id":16109563,"title":"Undeniable (Undeniable, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1356218855m\/16109563.jpg","authors":"Madeline Sheehan"},{"book_id":16113737,"title":"The Reason I Jump: The Inner Voice of a Thirteen-Year-Old Boy with Autism","image_url":"https:\/\/images.gr-assets.com\/books\/1384018847m\/16113737.jpg","authors":"Naoki Higashida, K.A. Yoshida, David Mitchell"},{"book_id":16113791,"title":"The Coincidence of Callie & Kayden (The Coincidence, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1353550763m\/16113791.jpg","authors":"Jessica Sorensen"},{"book_id":16114861,"title":"Unbeautifully (Undeniable, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1356218822m\/16114861.jpg","authors":"Madeline Sheehan"},{"book_id":16114862,"title":"Unattainable (Undeniable, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1366984625m\/16114862.jpg","authors":"Madeline Sheehan"},{"book_id":16115612,"title":"And the Mountains Echoed","image_url":"https:\/\/images.gr-assets.com\/books\/1358190204m\/16115612.jpg","authors":"Khaled Hosseini"},{"book_id":16116760,"title":"Silence (Silence, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1351519075m\/16116760.jpg","authors":"Natasha Preston"},{"book_id":16117182,"title":"Broken Silence (Silence, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1388207146m\/16117182.jpg","authors":"Natasha Preston"},{"book_id":16117506,"title":"Beautiful Stranger (Beautiful Bastard, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1359073239m\/16117506.jpg","authors":"Christina Lauren"},{"book_id":16117804,"title":"The Proposal (The Proposition, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1358298141m\/16117804.jpg","authors":"Katie Ashley"},{"book_id":16119079,"title":"Forever My Girl (The Beaumont Series, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1353074232m\/16119079.jpg","authors":"Heidi McLaughlin"},{"book_id":16120760,"title":"The Shock of the Fall","image_url":"https:\/\/images.gr-assets.com\/books\/1356034436m\/16120760.jpg","authors":"Nathan Filer"},{"book_id":16122034,"title":"Frigid (Frigid, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1364364323m\/16122034.jpg","authors":"J. Lynn, Jennifer L. Armentrout"},{"book_id":16122163,"title":"From Ashes (From Ashes, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1361745082m\/16122163.jpg","authors":"Molly McAdams"},{"book_id":16122643,"title":"Eyes Wide Open (The Blackstone Affair, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1360846127m\/16122643.jpg","authors":"Raine Miller"},{"book_id":16124019,"title":"Waking Up Married (Waking Up, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1352411782m\/16124019.jpg","authors":"Mira Lyn Kelly"},{"book_id":16127237,"title":"The Life List","image_url":"https:\/\/images.gr-assets.com\/books\/1354593069m\/16127237.jpg","authors":"Lori Nelson Spielman"},{"book_id":16128105,"title":"Big Brother","image_url":"https:\/\/images.gr-assets.com\/books\/1359981310m\/16128105.jpg","authors":"Lionel Shriver"},{"book_id":16130291,"title":"The Silver Star","image_url":"https:\/\/images.gr-assets.com\/books\/1379313690m\/16130291.jpg","authors":"Jeannette Walls"},{"book_id":16130307,"title":"Revenge Wears Prada: The Devil Returns (The Devil Wears Prada, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Lauren Weisberger"},{"book_id":16130537,"title":"The Humans","image_url":"https:\/\/images.gr-assets.com\/books\/1353739654m\/16130537.jpg","authors":"Matt Haig"},{"book_id":16130549,"title":"Doctor Sleep (The Shining, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1362415596m\/16130549.jpg","authors":"Stephen King"},{"book_id":16130723,"title":"Hidden Order (Scot Harvath, #12)","image_url":"https:\/\/images.gr-assets.com\/books\/1362517340m\/16130723.jpg","authors":"Brad Thor"},{"book_id":16130986,"title":"An Innocent Client","image_url":"https:\/\/images.gr-assets.com\/books\/1352135419m\/16130986.jpg","authors":"Scott Pratt"},{"book_id":16131025,"title":"Beautiful Day","image_url":"https:\/\/images.gr-assets.com\/books\/1352225899m\/16131025.jpg","authors":"Elin Hilderbrand"},{"book_id":16131032,"title":"Abaddon's Gate (The Expanse, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1407572059m\/16131032.jpg","authors":"James S.A. Corey"},{"book_id":16131072,"title":"Second Honeymoon (Honeymoon, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1352225697m\/16131072.jpg","authors":"James Patterson, Howard Roughan"},{"book_id":16131077,"title":"The Shining Girls","image_url":"https:\/\/images.gr-assets.com\/books\/1352227705m\/16131077.jpg","authors":"Lauren Beukes"},{"book_id":16131193,"title":"The Astronaut Wives Club","image_url":"https:\/\/images.gr-assets.com\/books\/1352436564m\/16131193.jpg","authors":"Lily Koppel"},{"book_id":16131484,"title":"The Infinite Sea (The 5th Wave, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1395351812m\/16131484.jpg","authors":"Rick Yancey"},{"book_id":16131489,"title":"The Last Star (The 5th Wave, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1444237685m\/16131489.jpg","authors":"Rick Yancey"},{"book_id":16134551,"title":"Fallen Crest High (Fallen Crest High, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1355101275m\/16134551.jpg","authors":"Tijan"},{"book_id":16134782,"title":"In Flight (Up in the Air, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1397321579m\/16134782.jpg","authors":"R.K. Lilley"},{"book_id":16136599,"title":"Redeemed (House of Night, #12)","image_url":"https:\/\/images.gr-assets.com\/books\/1403302625m\/16136599.jpg","authors":"P.C. Cast, Kristin Cast"},{"book_id":16136959,"title":"Mile High (Up in the Air, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1352489991m\/16136959.jpg","authors":"R.K. Lilley"},{"book_id":16138688,"title":"The Painted Girls","image_url":"https:\/\/images.gr-assets.com\/books\/1352484200m\/16138688.jpg","authors":"Cathy Marie Buchanan"},{"book_id":16139641,"title":"Grounded (Up in the Air, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1358701028m\/16139641.jpg","authors":"R.K. Lilley"},{"book_id":16140036,"title":"This Man (This Man, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1352790466m\/16140036.jpg","authors":"Jodi Ellen Malpas"},{"book_id":16140408,"title":"Down London Road (On Dublin Street, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1363128044m\/16140408.jpg","authors":"Samantha Young"},{"book_id":16141924,"title":"Dad Is Fat","image_url":"https:\/\/images.gr-assets.com\/books\/1354052742m\/16141924.jpg","authors":"Jim Gaffigan"},{"book_id":16142053,"title":"Going Clear: Scientology, Hollywood, and the Prison of Belief","image_url":"https:\/\/images.gr-assets.com\/books\/1358119149m\/16142053.jpg","authors":"Lawrence Wright"},{"book_id":16143347,"title":"We Were Liars","image_url":"https:\/\/images.gr-assets.com\/books\/1402749479m\/16143347.jpg","authors":"E. Lockhart"},{"book_id":16148398,"title":"Saga #1","image_url":"https:\/\/images.gr-assets.com\/books\/1358637990m\/16148398.jpg","authors":"Brian K. Vaughan, Fiona Staples"},{"book_id":16148938,"title":"Second Shift: Order (Shift, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1352920738m\/16148938.jpg","authors":"Hugh Howey"},{"book_id":16150119,"title":"Wired (Wired, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1352923779m\/16150119.jpg","authors":"Douglas E. Richards"},{"book_id":16150830,"title":"Never Fade (The Darkest Minds, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1368460550m\/16150830.jpg","authors":"Alexandra Bracken"},{"book_id":16150831,"title":"In The Afterlight (The Darkest Minds, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1400697474m\/16150831.jpg","authors":"Alexandra Bracken"},{"book_id":16150996,"title":"Convicted (Consequences, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1378036825m\/16150996.jpg","authors":"Aleatha Romig"},{"book_id":16151178,"title":"The Sea of Tranquility","image_url":"https:\/\/images.gr-assets.com\/books\/1465919812m\/16151178.jpg","authors":"Katja Millay"},{"book_id":16152943,"title":"Wanted (Wanted, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1354255331m\/16152943.jpg","authors":"Kelly Elliott"},{"book_id":16158498,"title":"Give and Take: A Revolutionary Approach to Success","image_url":"https:\/\/images.gr-assets.com\/books\/1356136579m\/16158498.jpg","authors":"Adam M. Grant"},{"book_id":16158508,"title":"The Yonahlossee Riding Camp for Girls","image_url":"https:\/\/images.gr-assets.com\/books\/1364772121m\/16158508.jpg","authors":"Anton DiSclafani"},{"book_id":16158519,"title":"Whiskey Beach","image_url":"https:\/\/images.gr-assets.com\/books\/1357477045m\/16158519.jpg","authors":"Nora Roberts"},{"book_id":16158527,"title":"Silken Prey (Lucas Davenport, #23)","image_url":"https:\/\/images.gr-assets.com\/books\/1355077509m\/16158527.jpg","authors":"John Sandford"},{"book_id":16158535,"title":"A Hundred Summers","image_url":"https:\/\/images.gr-assets.com\/books\/1366561825m\/16158535.jpg","authors":"Beatriz Williams"},{"book_id":16158542,"title":"The Boys in the Boat: Nine Americans and Their Epic Quest for Gold at the 1936 Berlin Olympics","image_url":"https:\/\/images.gr-assets.com\/books\/1354683116m\/16158542.jpg","authors":"Daniel James Brown"},{"book_id":16158558,"title":"Dark Witch (The Cousins O'Dwyer Trilogy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1480131721m\/16158558.jpg","authors":"Nora Roberts"},{"book_id":16158563,"title":"The Bookman\u2019s Tale","image_url":"https:\/\/images.gr-assets.com\/books\/1360573276m\/16158563.jpg","authors":"Charlie Lovett"},{"book_id":16158596,"title":"Lexicon","image_url":"https:\/\/images.gr-assets.com\/books\/1356080172m\/16158596.jpg","authors":"Max Barry"},{"book_id":16160797,"title":"The Cuckoo's Calling (Cormoran Strike, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1358716559m\/16160797.jpg","authors":"Robert Galbraith, J.K. Rowling"},{"book_id":16163690,"title":"Own the Wind (Chaos, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1358119230m\/16163690.jpg","authors":"Kristen Ashley"},{"book_id":16164271,"title":"Locke & Key, Vol. 6: Alpha & Omega","image_url":"https:\/\/images.gr-assets.com\/books\/1391443566m\/16164271.jpg","authors":"Joe Hill, Gabriel Rodr\u00edguez"},{"book_id":16169737,"title":"The Heist (Fox and O'Hare, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1371429330m\/16169737.jpg","authors":"Janet Evanovich, Lee Goldberg"},{"book_id":16170522,"title":"\u0635\u0627\u0646\u0639 \u0627\u0644\u0638\u0644\u0627\u0645","image_url":"https:\/\/images.gr-assets.com\/books\/1353871855m\/16170522.jpg","authors":"\u062a\u0627\u0645\u0631 \u0625\u0628\u0631\u0627\u0647\u064a\u0645"},{"book_id":16170625,"title":"\u0627\u0644\u0645\u0627\u0646\u064a\u0641\u0633\u062a\u0648","image_url":"https:\/\/images.gr-assets.com\/books\/1356926142m\/16170625.jpg","authors":"\u0645\u0635\u0637\u0641\u0649 \u0625\u0628\u0631\u0627\u0647\u064a\u0645"},{"book_id":16171259,"title":"The Sound of Things Falling","image_url":"https:\/\/images.gr-assets.com\/books\/1356199047m\/16171259.jpg","authors":"Juan Gabriel V\u00e1squez, Anne McLean"},{"book_id":16171272,"title":"The Good Lord Bird","image_url":"https:\/\/images.gr-assets.com\/books\/1385349791m\/16171272.jpg","authors":"James McBride"},{"book_id":16171291,"title":"The Silent Wife","image_url":"https:\/\/images.gr-assets.com\/books\/1356094989m\/16171291.jpg","authors":"A.S.A. Harrison"},{"book_id":16172634,"title":"Faking It (Losing It, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1360560023m\/16172634.jpg","authors":"Cora Carmack"},{"book_id":16174197,"title":"Knight & Play (Knight, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1354181901m\/16174197.jpg","authors":"Kitty French"},{"book_id":16175040,"title":"Endless Knight (The Arcana Chronicles, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1369329231m\/16175040.jpg","authors":"Kresley Cole"},{"book_id":16176440,"title":"We Are All Completely Beside Ourselves","image_url":"https:\/\/images.gr-assets.com\/books\/1364850195m\/16176440.jpg","authors":"Karen Joy Fowler"},{"book_id":16181775,"title":"The Rosie Project (Don Tillman, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1371651741m\/16181775.jpg","authors":"Graeme Simsion"},{"book_id":16182601,"title":"Bread and Wine: A Love Letter to Life Around the Table with Recipes","image_url":"https:\/\/images.gr-assets.com\/books\/1364905830m\/16182601.jpg","authors":"Shauna Niequist"},{"book_id":16218778,"title":"Coming Clean","image_url":"https:\/\/images.gr-assets.com\/books\/1381962759m\/16218778.jpg","authors":"Kimberly Rae Miller"},{"book_id":16233105,"title":"Someone to Love (Someone to Love, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1355429121m\/16233105.jpg","authors":"Addison Moore"},{"book_id":16240761,"title":"The Son","image_url":"https:\/\/images.gr-assets.com\/books\/1355349098m\/16240761.jpg","authors":"Philipp Meyer"},{"book_id":16247792,"title":"Gabriel's Redemption (Gabriel's Inferno, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1366632463m\/16247792.jpg","authors":"Sylvain Reynard"},{"book_id":16248068,"title":"The Elite (The Selection, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1391454595m\/16248068.jpg","authors":"Kiera Cass"},{"book_id":16248078,"title":"The English Girl (Gabriel Allon, #13)","image_url":"https:\/\/images.gr-assets.com\/books\/1371747020m\/16248078.jpg","authors":"Daniel Silva"},{"book_id":16248113,"title":"The School for Good and Evil (The School for Good and Evil, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1490529205m\/16248113.jpg","authors":"Soman Chainani"},{"book_id":16248114,"title":"Maya's Notebook","image_url":"https:\/\/images.gr-assets.com\/books\/1356073895m\/16248114.jpg","authors":"Isabel Allende, Anne McLean"},{"book_id":16248139,"title":"The Last Original Wife","image_url":"https:\/\/images.gr-assets.com\/books\/1365988672m\/16248139.jpg","authors":"Dorothea Benton Frank"},{"book_id":16248196,"title":"The Art of Thinking Clearly","image_url":"https:\/\/images.gr-assets.com\/books\/1364848267m\/16248196.jpg","authors":"Rolf Dobelli"},{"book_id":16248223,"title":"The Ghost Bride","image_url":"https:\/\/images.gr-assets.com\/books\/1356671808m\/16248223.jpg","authors":"Yangsze Choo"},{"book_id":16248311,"title":"The Perfume Collector","image_url":"https:\/\/images.gr-assets.com\/books\/1358532124m\/16248311.jpg","authors":"Kathleen Tessaro"},{"book_id":16256798,"title":"The One Thing: The Surprisingly Simple Truth Behind Extraordinary Results","image_url":"https:\/\/images.gr-assets.com\/books\/1362177469m\/16256798.jpg","authors":"Gary Keller, Jay Papasan"},{"book_id":16277248,"title":"Avatar: The Last Airbender (The Search, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1382513568m\/16277248.jpg","authors":"Gene Luen Yang, Bryan Konietzko, Michael Dante DiMartino, Dave Marshall, Gurihiru"},{"book_id":16278318,"title":"Armada","image_url":"https:\/\/images.gr-assets.com\/books\/1377284428m\/16278318.jpg","authors":"Ernest Cline"},{"book_id":16279715,"title":"Connected (Connections, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1362012971m\/16279715.jpg","authors":"Kim Karr"},{"book_id":16279856,"title":"The Eye of Minds (The Mortality Doctrine, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1358659346m\/16279856.jpg","authors":"James Dashner"},{"book_id":16280678,"title":"Shattered (The Iron Druid Chronicles, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1387891720m\/16280678.jpg","authors":"Kevin Hearne"},{"book_id":16280689,"title":"Staked (The Iron Druid Chronicles, #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1434745650m\/16280689.jpg","authors":"Kevin Hearne"},{"book_id":16282066,"title":"Significance (Significance, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1434591910m\/16282066.jpg","authors":"Shelly Crane"},{"book_id":16299256,"title":"The Game Changer (The Perfect Game, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1358236349m\/16299256.jpg","authors":"J. Sterling"},{"book_id":16299341,"title":"Thankless in Death (In Death, #37)","image_url":"https:\/\/images.gr-assets.com\/books\/1371102498m\/16299341.jpg","authors":"J.D. Robb"},{"book_id":16299991,"title":"A Quest of Heroes (The Sorcerer's Ring, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1392626603m\/16299991.jpg","authors":"Morgan Rice"},{"book_id":16301111,"title":"Always You (Best Friend, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1438766503m\/16301111.jpg","authors":"Kirsty Moseley"},{"book_id":16303287,"title":"The Bane Chronicles","image_url":"https:\/\/images.gr-assets.com\/books\/1395159015m\/16303287.jpg","authors":"Cassandra Clare, Sarah Rees Brennan, Maureen Johnson, Cassandra Jean"},{"book_id":16429619,"title":"The Kiss of Deception (The Remnant Chronicles, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1389804901m\/16429619.jpg","authors":"Mary E. Pearson"},{"book_id":16479439,"title":"Ex-Heroes (Ex-Heroes, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1360646185m\/16479439.jpg","authors":"Peter Clines"},{"book_id":16704759,"title":"Knight & Stay (Knight, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1361513650m\/16704759.jpg","authors":"Kitty French"},{"book_id":16718083,"title":"The Redemption of Callie & Kayden (The Coincidence, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1366785115m\/16718083.jpg","authors":"Jessica Sorensen"},{"book_id":16762211,"title":"Sometimes Never (Sometimes Never, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1361989778m\/16762211.jpg","authors":"Cheryl McIntyre"},{"book_id":17029526,"title":"Never Too Far (Rosemary Beach, #2; Too Far, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1356822956m\/17029526.jpg","authors":"Abbi Glines"},{"book_id":17032328,"title":"If You Stay (Beautifully Broken, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1355661483m\/17032328.jpg","authors":"Courtney Cole"},{"book_id":17131869,"title":"Saga, Vol. 2 (Saga, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1486028954m\/17131869.jpg","authors":"Brian K. Vaughan, Fiona Staples"},{"book_id":17156015,"title":"Beauty from Pain (Beauty, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1360699932m\/17156015.jpg","authors":"Georgia Cates"},{"book_id":17158513,"title":"Captive Prince: Volume Two (Captive Prince, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1356027904m\/17158513.jpg","authors":"C.S. Pacat"},{"book_id":17158532,"title":"Kings Rising (Captive Prince, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1454160767m\/17158532.jpg","authors":"C.S. Pacat"},{"book_id":17158596,"title":"Collide (Collide, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1359831056m\/17158596.jpg","authors":"Gail McHugh"},{"book_id":17159011,"title":"White Fire (Pendergast, #13)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Douglas Preston, Lincoln Child"},{"book_id":17163514,"title":"The Rose and the Thorn (The Riyria Chronicles, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1362121827m\/17163514.jpg","authors":"Michael J. Sullivan"},{"book_id":17165932,"title":"Independent Study (The Testing, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1380034496m\/17165932.jpg","authors":"Joelle Charbonneau"},{"book_id":17166702,"title":"True Love Story","image_url":"https:\/\/images.gr-assets.com\/books\/1358169338m\/17166702.jpg","authors":"Willow Aster"},{"book_id":17167042,"title":"Fighting for Flight (Fighting, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1357067788m\/17167042.jpg","authors":"J.B. Salsbury"},{"book_id":17167084,"title":"How the Light Gets In (Chief Inspector Armand Gamache, #9)","image_url":"https:\/\/images.gr-assets.com\/books\/1364312402m\/17167084.jpg","authors":"Louise Penny"},{"book_id":17167166,"title":"Crown of Midnight (Throne of Glass, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1391580481m\/17167166.jpg","authors":"Sarah J. Maas"},{"book_id":17167572,"title":"The Long War (The Long Earth, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1368422103m\/17167572.jpg","authors":"Terry Pratchett, Stephen Baxter"},{"book_id":17171909,"title":"Brilliance (Brilliance Saga, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1437159954m\/17171909.jpg","authors":"Marcus Sakey"},{"book_id":17181905,"title":"The Arrangement: The Ferro Family (The Arrangement, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1356483152m\/17181905.jpg","authors":"H.M. Ward"},{"book_id":17182126,"title":"Steelheart (The Reckoners, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1357576738m\/17182126.jpg","authors":"Brandon Sanderson"},{"book_id":17182421,"title":"The Returned","image_url":"https:\/\/images.gr-assets.com\/books\/1372089735m\/17182421.jpg","authors":"Jason Mott"},{"book_id":17190226,"title":"Surrender Your Love (Surrender Your Love, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1359887738m\/17190226.jpg","authors":"J.C. Reed"},{"book_id":17191012,"title":"Fallen Crest Family (Fallen Crest High, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1370197330m\/17191012.jpg","authors":"Tijan"},{"book_id":17192373,"title":"Perfect","image_url":"https:\/\/images.gr-assets.com\/books\/1367838351m\/17192373.jpg","authors":"Rachel Joyce"},{"book_id":17199504,"title":"The Bone Season (The Bone Season, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1421412990m\/17199504.jpg","authors":"Samantha Shannon"},{"book_id":17200687,"title":"Rule (Marked Men, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1357012113m\/17200687.jpg","authors":"Jay Crownover, Charlotte Connan de vries"},{"book_id":17201095,"title":"Play with Me (With Me in Seattle, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1360471559m\/17201095.jpg","authors":"Kristen Proby"},{"book_id":17201104,"title":"Rock with Me (With Me in Seattle, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1364925537m\/17201104.jpg","authors":"Kristen Proby"},{"book_id":17201110,"title":"Safe with Me (With Me in Seattle, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1375455697m\/17201110.jpg","authors":"Kristen Proby"},{"book_id":17202452,"title":"One Week Girlfriend (One Week Girlfriend, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1361553462m\/17202452.jpg","authors":"Monica Murphy"},{"book_id":17204568,"title":"Crazy Little Thing (Bell Harbor, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1361951139m\/17204568.jpg","authors":"Tracy Brogan"},{"book_id":17204860,"title":"Jet (Marked Men, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1367338347m\/17204860.jpg","authors":"Jay Crownover"},{"book_id":17212231,"title":"Inferno (Robert Langdon, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1397093185m\/17212231.jpg","authors":"Dan Brown"},{"book_id":17225311,"title":"Tampa","image_url":"https:\/\/images.gr-assets.com\/books\/1393784199m\/17225311.jpg","authors":"Alissa Nutting"},{"book_id":17228280,"title":"Better off Friends","image_url":"https:\/\/images.gr-assets.com\/books\/1386372561m\/17228280.jpg","authors":"Elizabeth Eulberg"},{"book_id":17231976,"title":"Damaged (Damaged, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1363632179m\/17231976.jpg","authors":"H.M. Ward"},{"book_id":17232261,"title":"Songs of Willow Frost","image_url":"https:\/\/images.gr-assets.com\/books\/1367527068m\/17232261.jpg","authors":"Jamie Ford"},{"book_id":17233800,"title":"Crash into You (Pushing the Limits, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1370532247m\/17233800.jpg","authors":"Katie McGarry"},{"book_id":17234658,"title":"A Thousand Pieces of You (Firebird, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1400166295m\/17234658.jpg","authors":"Claudia Gray"},{"book_id":17235026,"title":"The Girl with All the Gifts","image_url":"https:\/\/images.gr-assets.com\/books\/1403033579m\/17235026.jpg","authors":"M.R. Carey"},{"book_id":17235347,"title":"Life Before Legend: Stories of the Criminal and the Prodigy (Legend, #0.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1358952957m\/17235347.jpg","authors":"Marie Lu"},{"book_id":17237214,"title":"Two Boys Kissing","image_url":"https:\/\/images.gr-assets.com\/books\/1364194940m\/17237214.jpg","authors":"David Levithan"},{"book_id":17254035,"title":"Foreplay (The Ivy Chronicles, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1367338814m\/17254035.jpg","authors":"Sophie Jordan"},{"book_id":17255186,"title":"The Phoenix Project: A Novel About IT, DevOps, and Helping Your Business Win","image_url":"https:\/\/images.gr-assets.com\/books\/1361113128m\/17255186.jpg","authors":"Gene Kim, Kevin Behr, George Spafford"},{"book_id":17255265,"title":"This Man Confessed (This Man, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1368274129m\/17255265.jpg","authors":"Jodi Ellen Malpas"},{"book_id":17255435,"title":"A Shade of Vampire (A Shade of Vampire, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1358415528m\/17255435.jpg","authors":"Bella Forrest"},{"book_id":17257484,"title":"Trouble","image_url":"https:\/\/images.gr-assets.com\/books\/1363602953m\/17257484.jpg","authors":"Samantha Towle"},{"book_id":17257990,"title":"Fire Inside (Chaos, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1419970980m\/17257990.jpg","authors":"Kristen Ashley"},{"book_id":17257993,"title":"Raid (Unfinished Hero, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1361025483m\/17257993.jpg","authors":"Kristen Ashley"},{"book_id":17262100,"title":"The Lowland","image_url":"https:\/\/images.gr-assets.com\/books\/1366930267m\/17262100.jpg","authors":"Jhumpa Lahiri"},{"book_id":17262155,"title":"Mad About the Boy (Bridget Jones, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1374883586m\/17262155.jpg","authors":"Helen Fielding"},{"book_id":17262159,"title":"Never Go Back (Jack Reacher, #18)","image_url":"https:\/\/images.gr-assets.com\/books\/1467947214m\/17262159.jpg","authors":"Lee Child"},{"book_id":17262203,"title":"MaddAddam (MaddAddam, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1366394020m\/17262203.jpg","authors":"Margaret Atwood"},{"book_id":17262206,"title":"Lawrence in Arabia: War, Deceit, Imperial Folly, and the Making of the Modern Middle East","image_url":"https:\/\/images.gr-assets.com\/books\/1363837257m\/17262206.jpg","authors":"Scott Anderson"},{"book_id":17262236,"title":"Rose Under Fire (Code Name Verity, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1368219053m\/17262236.jpg","authors":"Elizabeth Wein"},{"book_id":17262366,"title":"One Summer: America, 1927","image_url":"https:\/\/images.gr-assets.com\/books\/1380292864m\/17262366.jpg","authors":"Bill Bryson"},{"book_id":17262540,"title":"William Shakespeare's Star Wars: Verily, A New Hope (William Shakespeare's Star Wars, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1411696453m\/17262540.jpg","authors":"Ian Doescher"},{"book_id":17267122,"title":"Pulse (Collide, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1369753154m\/17267122.jpg","authors":"Gail McHugh"},{"book_id":17277800,"title":"Hawkeye, Volume 2: Little Hits","image_url":"https:\/\/images.gr-assets.com\/books\/1384620904m\/17277800.jpg","authors":"Matt Fraction, David Aja, Francesco Francavilla, Steve Lieber, Jesse Hamm, Annie Wu, Matt Hollingsworth, Chris Eliopoulos"},{"book_id":17285330,"title":"The Last Time We Say Goodbye","image_url":"https:\/\/images.gr-assets.com\/books\/1403710453m\/17285330.jpg","authors":"Cynthia Hand"},{"book_id":17285883,"title":"The Undead Pool (The Hollows, #12)","image_url":"https:\/\/images.gr-assets.com\/books\/1379687538m\/17285883.jpg","authors":"Kim Harrison"},{"book_id":17286162,"title":"Forever Black (Forever, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1359579827m\/17286162.jpg","authors":"Sandi Lynn"},{"book_id":17286747,"title":"Necessary Lies (Necessary Lies, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1362226103m\/17286747.jpg","authors":"Diane Chamberlain"},{"book_id":17286958,"title":"Killing Jesus: A History","image_url":"https:\/\/images.gr-assets.com\/books\/1361640009m\/17286958.jpg","authors":"Bill O'Reilly, Martin Dugard"},{"book_id":17287009,"title":"Humans of New York","image_url":"https:\/\/images.gr-assets.com\/books\/1384184910m\/17287009.jpg","authors":"Brandon Stanton"},{"book_id":17287028,"title":"My Story","image_url":"https:\/\/images.gr-assets.com\/books\/1367749530m\/17287028.jpg","authors":"Elizabeth Smart, Chris Stewart"},{"book_id":17288661,"title":"Sycamore Row","image_url":"https:\/\/images.gr-assets.com\/books\/1375888633m\/17288661.jpg","authors":"John Grisham"},{"book_id":17302495,"title":"One Tiny Lie (Ten Tiny Breaths, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1380903726m\/17302495.jpg","authors":"K.A. Tucker"},{"book_id":17306293,"title":"Shift (Silo, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1379003176m\/17306293.jpg","authors":"Hugh Howey"},{"book_id":17312201,"title":"The Son of Sobek (Percy Jackson & Kane Chronicles Crossover, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1367948073m\/17312201.jpg","authors":"Rick Riordan"},{"book_id":17314410,"title":"Beauty from Surrender (Beauty, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1367294723m\/17314410.jpg","authors":"Georgia Cates"},{"book_id":17314430,"title":"Wait for You (Wait for You, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1363819713m\/17314430.jpg","authors":"J. Lynn, Jennifer L. Armentrout"},{"book_id":17316075,"title":"Second Chance Boyfriend (One Week Girlfriend, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1370492442m\/17316075.jpg","authors":"Monica Murphy"},{"book_id":17317675,"title":"Epilogue (The Dark Duet, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1360713467m\/17317675.jpg","authors":"C.J. Roberts"},{"book_id":17325147,"title":"Left Drowning (Left Drowning, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1372359048m\/17325147.jpg","authors":"Jessica Park"},{"book_id":17329041,"title":"The Other Typist","image_url":"https:\/\/images.gr-assets.com\/books\/1385399311m\/17329041.jpg","authors":"Suzanne Rindell"},{"book_id":17331349,"title":"Think Like a Freak","image_url":"https:\/\/images.gr-assets.com\/books\/1395610974m\/17331349.jpg","authors":"Steven D. Levitt, Stephen J. Dubner"},{"book_id":17331518,"title":"Fracture Me (Shatter Me, #2.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1383413233m\/17331518.jpg","authors":"Tahereh Mafi"},{"book_id":17331828,"title":"Talon (Talon, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1397581124m\/17331828.jpg","authors":"Julie Kagawa"},{"book_id":17332207,"title":"Someone","image_url":"https:\/\/images.gr-assets.com\/books\/1377579911m\/17332207.jpg","authors":"Alice McDermott"},{"book_id":17332218,"title":"Words of Radiance (The Stormlight Archive, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1391535251m\/17332218.jpg","authors":"Brandon Sanderson"},{"book_id":17332564,"title":"How to Love","image_url":"https:\/\/images.gr-assets.com\/books\/1366904609m\/17332564.jpg","authors":"Katie Cotugno"},{"book_id":17332969,"title":"The 100 (The 100, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1377012321m\/17332969.jpg","authors":"Kass Morgan"},{"book_id":17333171,"title":"Magic Shifts (Kate Daniels, #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1414091260m\/17333171.jpg","authors":"Ilona Andrews"},{"book_id":17333174,"title":"Magic Binds (Kate Daniels, #9)","image_url":"https:\/\/images.gr-assets.com\/books\/1454609590m\/17333174.jpg","authors":"Ilona Andrews"},{"book_id":17333223,"title":"The Goldfinch","image_url":"https:\/\/images.gr-assets.com\/books\/1451554970m\/17333223.jpg","authors":"Donna Tartt"},{"book_id":17333227,"title":"The Gods of Guilt (Mickey Haller, #6; Harry Bosch Universe, #23)","image_url":"https:\/\/images.gr-assets.com\/books\/1362529630m\/17333227.jpg","authors":"Michael Connelly"},{"book_id":17333230,"title":"The Luminaries","image_url":"https:\/\/images.gr-assets.com\/books\/1410524246m\/17333230.jpg","authors":"Eleanor Catton"},{"book_id":17333237,"title":"Stella Bain","image_url":"https:\/\/images.gr-assets.com\/books\/1380048229m\/17333237.jpg","authors":"Anita Shreve"},{"book_id":17333277,"title":"Cross My Heart (Alex Cross, #21)","image_url":"https:\/\/images.gr-assets.com\/books\/1410755815m\/17333277.jpg","authors":"James Patterson"},{"book_id":17333279,"title":"Gone (Michael Bennett, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1369155131m\/17333279.jpg","authors":"James Patterson, Michael Ledwidge"},{"book_id":17333302,"title":"Grain Brain: The Surprising Truth about Wheat, Carbs, and Sugar--Your Brain's Silent Killers","image_url":"https:\/\/images.gr-assets.com\/books\/1395680212m\/17333302.jpg","authors":"David Perlmutter, Kristin Loberg"},{"book_id":17333319,"title":"Burial Rites","image_url":"https:\/\/images.gr-assets.com\/books\/1384207446m\/17333319.jpg","authors":"Hannah Kent"},{"book_id":17333324,"title":"Ancillary Justice (Imperial Radch #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1397215917m\/17333324.jpg","authors":"Ann Leckie"},{"book_id":17333431,"title":"King and Maxwell (Sean King & Michelle Maxwell, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1379456669m\/17333431.jpg","authors":"David Baldacci"},{"book_id":17333880,"title":"Twisted Perfection (Rosemary Beach, #5; Perfection, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1360904964m\/17333880.jpg","authors":"Abbi Glines"},{"book_id":17334079,"title":"What Really Happened in Peru (The Bane Chronicles, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1366745722m\/17334079.jpg","authors":"Cassandra Clare, Sarah Rees Brennan"},{"book_id":17334495,"title":"The Bully Pulpit: Theodore Roosevelt, William Howard Taft, and the Golden Age of Journalism","image_url":"https:\/\/images.gr-assets.com\/books\/1386557352m\/17334495.jpg","authors":"Doris Kearns Goodwin"},{"book_id":17336849,"title":"Lost & Found (Lost & Found, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1365394535m\/17336849.jpg","authors":"Nicole Williams"},{"book_id":17337562,"title":"Forever Too Far (Rosemary Beach, #3; Too Far, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1368151288m\/17337562.jpg","authors":"Abbi Glines"},{"book_id":17339590,"title":"\"\u062d\u0643\u0627\u064a\u0627\u062a \u0641\u0631\u063a\u0644\u064a \u0627\u0644\u0645\u0633\u062a\u0643\u0627\u0648\u064a \"\u062d\u0643\u0627\u064a\u062a\u0649 \u0645\u0639 \u0643\u0641\u0631 \u0627\u0644\u0633\u062d\u0644\u0627\u0648\u064a\u0629","image_url":"https:\/\/images.gr-assets.com\/books\/1360260051m\/17339590.jpg","authors":"\u062d\u0633\u0646 \u0627\u0644\u062c\u0646\u062f\u064a"},{"book_id":17340050,"title":"Losing Hope (Hopeless, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1368348507m\/17340050.jpg","authors":"Colleen Hoover"},{"book_id":17342700,"title":"Gathering Darkness (Falling Kingdoms, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1419103977m\/17342700.jpg","authors":"Morgan Rhodes, Michelle Rowen"},{"book_id":17345242,"title":"The World of Ice & Fire: The Untold History of Westeros and the Game of Thrones","image_url":"https:\/\/images.gr-assets.com\/books\/1400360220m\/17345242.jpg","authors":"George R.R. Martin, Elio M. Garc\u00eda Jr., Linda Antonsson"},{"book_id":17345258,"title":"The All-Girl Filling Station's Last Reunion","image_url":"https:\/\/images.gr-assets.com\/books\/1373052495m\/17345258.jpg","authors":"Fannie Flagg"},{"book_id":17346698,"title":"March: Book One (March, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1360539808m\/17346698.jpg","authors":"John Lewis, Andrew Aydin, Nate Powell"},{"book_id":17347389,"title":"The Dream Thieves (The Raven Cycle, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1477103777m\/17347389.jpg","authors":"Maggie Stiefvater"},{"book_id":17348985,"title":"Help for the Haunted","image_url":"https:\/\/images.gr-assets.com\/books\/1379084909m\/17348985.jpg","authors":"John Searles"},{"book_id":17349023,"title":"We Are Water","image_url":"https:\/\/images.gr-assets.com\/books\/1361329815m\/17349023.jpg","authors":"Wally Lamb"},{"book_id":17349163,"title":"Sense & Sensibility (The Austen Project, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1363291870m\/17349163.jpg","authors":"Joanna Trollope"},{"book_id":17349203,"title":"Fortunately, the Milk","image_url":"https:\/\/images.gr-assets.com\/books\/1380963103m\/17349203.jpg","authors":"Neil Gaiman, Skottie Young"},{"book_id":17349222,"title":"This is the Story of a Happy Marriage","image_url":"https:\/\/images.gr-assets.com\/books\/1375215541m\/17349222.jpg","authors":"Ann Patchett"},{"book_id":17352874,"title":"Truce (Neighbor from Hell, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1378997763m\/17352874.jpg","authors":"R.L. Mathewson"},{"book_id":17375956,"title":"Reaper's Property (Reapers MC, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1360943604m\/17375956.jpg","authors":"Joanna Wylde"},{"book_id":17377032,"title":"Bad Things (Tristan & Danika, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1364053596m\/17377032.jpg","authors":"R.K. Lilley"},{"book_id":17378508,"title":"Blue Lily, Lily Blue (The Raven Cycle, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1477103826m\/17378508.jpg","authors":"Maggie Stiefvater"},{"book_id":17378527,"title":"The Raven King (The Raven Cycle, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1477103790m\/17378527.jpg","authors":"Maggie Stiefvater"},{"book_id":17380041,"title":"Longbourn","image_url":"https:\/\/images.gr-assets.com\/books\/1452268403m\/17380041.jpg","authors":"Jo Baker"},{"book_id":17383934,"title":"The Valley of Amazement","image_url":"https:\/\/images.gr-assets.com\/books\/1362956150m\/17383934.jpg","authors":"Amy Tan"},{"book_id":17383994,"title":"Divergent Series Complete Box Set (Divergent, #1-3)","image_url":"https:\/\/images.gr-assets.com\/books\/1372682053m\/17383994.jpg","authors":"Veronica Roth"},{"book_id":17399160,"title":"Snow Like Ashes (Snow Like Ashes, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1392224823m\/17399160.jpg","authors":"Sara Raasch"},{"book_id":17401198,"title":"Only the Innocent (DCI Tom Douglas #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1361257672m\/17401198.jpg","authors":"Rachel Abbott"},{"book_id":17402288,"title":"Dept. of Speculation","image_url":"https:\/\/images.gr-assets.com\/books\/1367929545m\/17402288.jpg","authors":"Jenny Offill"},{"book_id":17402605,"title":"The Alchemyst (The Secrets of the Immortal Nicholas Flamel, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1361310229m\/17402605.jpg","authors":"Michael Scott"},{"book_id":17404452,"title":"Forever You (Forever, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1364058599m\/17404452.jpg","authors":"Sandi Lynn"},{"book_id":17406847,"title":"Defy (Defy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1371226819m\/17406847.jpg","authors":"Sara B. Larson"},{"book_id":17407233,"title":"The Submissive (Submissive, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1361512956m\/17407233.jpg","authors":"Tara Sue Me"},{"book_id":17407748,"title":"The Longest Ride","image_url":"https:\/\/images.gr-assets.com\/books\/1367536453m\/17407748.jpg","authors":"Nicholas Sparks"},{"book_id":17411703,"title":"Complete Me (Stark Trilogy, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1363420378m\/17411703.jpg","authors":"J. Kenner"},{"book_id":17412188,"title":"Second Life","image_url":"https:\/\/images.gr-assets.com\/books\/1410793297m\/17412188.jpg","authors":"S.J. Watson"},{"book_id":17443673,"title":"A Different Blue","image_url":"https:\/\/images.gr-assets.com\/books\/1364846607m\/17443673.jpg","authors":"Amy Harmon"},{"book_id":17448960,"title":"Falling into You (Falling, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1363055080m\/17448960.jpg","authors":"Jasinda Wilder"},{"book_id":17449197,"title":"Unhinged (Splintered, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1366994000m\/17449197.jpg","authors":"A.G. Howard"},{"book_id":17449417,"title":"Simple Perfection (Rosemary Beach, #6; Perfection, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1415743194m\/17449417.jpg","authors":"Abbi Glines"},{"book_id":17452179,"title":"Apple Tree Yard","image_url":"https:\/\/images.gr-assets.com\/books\/1371030400m\/17452179.jpg","authors":"Louise Doughty"},{"book_id":17455541,"title":"Happy, Happy, Happy","image_url":"https:\/\/images.gr-assets.com\/books\/1362252767m\/17455541.jpg","authors":"Phil Robertson, Mark Schlabach"},{"book_id":17455585,"title":"White Hot Kiss (The Dark Elements, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1377784515m\/17455585.jpg","authors":"Jennifer L. Armentrout"},{"book_id":17455815,"title":"Stone Cold Touch (The Dark Elements, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1394110942m\/17455815.jpg","authors":"Jennifer L. Armentrout"},{"book_id":17456328,"title":"The Paris Architect","image_url":"https:\/\/images.gr-assets.com\/books\/1375064865m\/17456328.jpg","authors":"Charles Belfoure"},{"book_id":17465453,"title":"The Signature of All Things","image_url":"https:\/\/images.gr-assets.com\/books\/1364277893m\/17465453.jpg","authors":"Elizabeth Gilbert"},{"book_id":17465470,"title":"The Royal Ranger (Ranger's Apprentice, #12)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Flanagan"},{"book_id":17465515,"title":"The Story of a New Name (The Neapolitan Novels #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1501012849m\/17465515.jpg","authors":"Elena Ferrante, Ann Goldstein"},{"book_id":17504320,"title":"Taking Shots (Assassins, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1362421812m\/17504320.jpg","authors":"Toni Aleo"},{"book_id":17524166,"title":"\u0646\u0627\u062f\u064a \u0627\u0644\u0633\u064a\u0627\u0631\u0627\u062a","image_url":"https:\/\/images.gr-assets.com\/books\/1364918924m\/17524166.jpg","authors":"Alaa Al Aswany, \u0639\u0644\u0627\u0621 \u0627\u0644\u0623\u0633\u0648\u0627\u0646\u064a"},{"book_id":17557143,"title":"The Billionaire's Obsession ~ Simon (The Billionaire's Obsession, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1362454880m\/17557143.jpg","authors":"J.S. Scott"},{"book_id":17557913,"title":"The Farm","image_url":"https:\/\/images.gr-assets.com\/books\/1391017911m\/17557913.jpg","authors":"Tom Rob Smith"},{"book_id":17558817,"title":"Be with Me (Wait for You, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1380210727m\/17558817.jpg","authors":"J. Lynn, Jennifer L. Armentrout"},{"book_id":17560674,"title":"The Bet (The Bet, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1362593639m\/17560674.jpg","authors":"Rachel Van Dyken"},{"book_id":17562900,"title":"Night Broken (Mercy Thompson, #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1379437095m\/17562900.jpg","authors":"Patricia Briggs"},{"book_id":17563080,"title":"Murder of Crows (The Others, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1371752568m\/17563080.jpg","authors":"Anne Bishop"},{"book_id":17563539,"title":"The Egg","image_url":"https:\/\/images.gr-assets.com\/books\/1431492647m\/17563539.jpg","authors":"Andy Weir"},{"book_id":17565845,"title":"Panic (Panic, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1374066076m\/17565845.jpg","authors":"Lauren Oliver"},{"book_id":17568801,"title":"Zealot: The Life and Times of Jesus of Nazareth","image_url":"https:\/\/images.gr-assets.com\/books\/1367929567m\/17568801.jpg","authors":"Reza Aslan"},{"book_id":17569860,"title":"Conquer Your Love (Surrender Your Love, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1370248780m\/17569860.jpg","authors":"J.C. Reed"},{"book_id":17570105,"title":"The Survivor (Mitch Rapp, #14)","image_url":"https:\/\/images.gr-assets.com\/books\/1443534014m\/17570105.jpg","authors":"Vince Flynn, Kyle Mills, Armand Schultz"},{"book_id":17570538,"title":"The Blood Mirror (Lightbringer, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1458663265m\/17570538.jpg","authors":"Brent Weeks"},{"book_id":17571466,"title":"The Troop","image_url":"https:\/\/images.gr-assets.com\/books\/1397768496m\/17571466.jpg","authors":"Nick Cutter"},{"book_id":17571564,"title":"Hyperbole and a Half: Unfortunate Situations, Flawed Coping Mechanisms, Mayhem, and Other Things That Happened","image_url":"https:\/\/images.gr-assets.com\/books\/1409522492m\/17571564.jpg","authors":"Allie Brosh"},{"book_id":17572903,"title":"The Girl You Left Behind","image_url":"https:\/\/images.gr-assets.com\/books\/1366558957m\/17572903.jpg","authors":"Jojo Moyes"},{"book_id":17573684,"title":"The Obituary Writer","image_url":"https:\/\/images.gr-assets.com\/books\/1364851286m\/17573684.jpg","authors":"Ann Hood"},{"book_id":17607848,"title":"Afterburn (Jax & Gia, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1369326801m\/17607848.jpg","authors":"Sylvia Day"},{"book_id":17608111,"title":"The Crimson Campaign (Powder Mage, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1363102695m\/17608111.jpg","authors":"Brian McClellan"},{"book_id":17617277,"title":"Real (Real, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1363442697m\/17617277.jpg","authors":"Katy Evans"},{"book_id":17623975,"title":"Just One Day (Just One Day, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1368722144m\/17623975.jpg","authors":"Gayle Forman"},{"book_id":17660462,"title":"The Everything Store: Jeff Bezos and the Age of Amazon","image_url":"https:\/\/images.gr-assets.com\/books\/1365394361m\/17660462.jpg","authors":"Brad Stone"},{"book_id":17661831,"title":"The Orenda","image_url":"https:\/\/images.gr-assets.com\/books\/1363710334m\/17661831.jpg","authors":"Joseph Boyden"},{"book_id":17667452,"title":"When I Found You","image_url":"https:\/\/images.gr-assets.com\/books\/1377009785m\/17667452.jpg","authors":"Catherine Ryan Hyde"},{"book_id":17667561,"title":"The Shadow Throne (The Ascendance Trilogy, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1395418016m\/17667561.jpg","authors":"Jennifer A. Nielsen"},{"book_id":17671913,"title":"Batman, Volume 3: Death of the Family","image_url":"https:\/\/images.gr-assets.com\/books\/1376507913m\/17671913.jpg","authors":"Scott Snyder, Greg Capullo, Jonathan Glapion"},{"book_id":17673271,"title":"Si-cology 1: Tales and Wisdom from Duck Dynasty\u2019s Favorite Uncle","image_url":"https:\/\/images.gr-assets.com\/books\/1379892056m\/17673271.jpg","authors":"Si Robertson, Mark Schlabach"},{"book_id":17673307,"title":"Neanderthal Seeks Human (Knitting in the City, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1364347894m\/17673307.jpg","authors":"Penny Reid"},{"book_id":17674991,"title":"Paddle Your Own Canoe: One Man's Fundamentals for Delicious Living","image_url":"https:\/\/images.gr-assets.com\/books\/1372042175m\/17674991.jpg","authors":"Nick Offerman"},{"book_id":17675031,"title":"This Star Won't Go Out: The Life and Words of Esther Grace Earl","image_url":"https:\/\/images.gr-assets.com\/books\/1392015126m\/17675031.jpg","authors":"Esther Earl, Lori Earl, Wayne Earl, John Green"},{"book_id":17675462,"title":"The Raven Boys (The Raven Cycle, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1477103737m\/17675462.jpg","authors":"Maggie Stiefvater"},{"book_id":17704902,"title":"Five Days at Memorial: Life and Death in a Storm-Ravaged Hospital","image_url":"https:\/\/images.gr-assets.com\/books\/1380120962m\/17704902.jpg","authors":"Sheri Fink"},{"book_id":17704903,"title":"Empty Mansions: The Mysterious Life of Huguette Clark and the Spending of a Great American Fortune","image_url":"https:\/\/images.gr-assets.com\/books\/1367929741m\/17704903.jpg","authors":"Bill Dedman, Paul Clark Newell Jr."},{"book_id":17707603,"title":"George Washington's Secret Six: The Spy Ring That Saved the American Revolution","image_url":"https:\/\/images.gr-assets.com\/books\/1385349402m\/17707603.jpg","authors":"Brian Kilmeade, Don Yaeger"},{"book_id":17707605,"title":"W is for Wasted (Kinsey Millhone, #23)","image_url":"https:\/\/images.gr-assets.com\/books\/1367622462m\/17707605.jpg","authors":"Sue Grafton"},{"book_id":17707654,"title":"Dust (Kay Scarpetta, #21)","image_url":"https:\/\/images.gr-assets.com\/books\/1376882052m\/17707654.jpg","authors":"Patricia Cornwell"},{"book_id":17722973,"title":"The Enchantress Returns (The Land of Stories, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1364843824m\/17722973.jpg","authors":"Chris Colfer, Brandon Dorman"},{"book_id":17726978,"title":"The Magpies","image_url":"https:\/\/images.gr-assets.com\/books\/1364934901m\/17726978.jpg","authors":"Mark Edwards"},{"book_id":17727276,"title":"Hard Choices","image_url":"https:\/\/images.gr-assets.com\/books\/1402198745m\/17727276.jpg","authors":"Hillary Rodham Clinton"},{"book_id":17729712,"title":"Beautiful Broken Rules (Broken, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1365043610m\/17729712.jpg","authors":"Kimberly Lauren"},{"book_id":17733861,"title":"A Shade of Blood (A Shade of Vampire, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1365199807m\/17733861.jpg","authors":"Bella Forrest"},{"book_id":17733898,"title":"Hard Luck (Diary of a Wimpy Kid, #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1376473492m\/17733898.jpg","authors":"Jeff Kinney"},{"book_id":17788401,"title":"Ugly Love","image_url":"https:\/\/images.gr-assets.com\/books\/1399179135m\/17788401.jpg","authors":"Colleen Hoover"},{"book_id":17792606,"title":"Mine (Real, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1377178049m\/17792606.jpg","authors":"Katy Evans"},{"book_id":17794657,"title":"The Lake (The Lake Trilogy #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1461854990m\/17794657.jpg","authors":"AnnaLisa Grant"},{"book_id":17797253,"title":"Under the Wide and Starry Sky","image_url":"https:\/\/images.gr-assets.com\/books\/1367256646m\/17797253.jpg","authors":"Nancy Horan"},{"book_id":17797381,"title":"Innocence","image_url":"https:\/\/images.gr-assets.com\/books\/1368569643m\/17797381.jpg","authors":"Dean Koontz"},{"book_id":17798233,"title":"Rome (Marked Men, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1378491674m\/17798233.jpg","authors":"Jay Crownover, Charlotte Connan de vries"},{"book_id":17798287,"title":"Driven (Driven, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1366000080m\/17798287.jpg","authors":"K. Bromberg"},{"book_id":17800786,"title":"Damaged 2 (Damaged, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1371340440m\/17800786.jpg","authors":"H.M. Ward"},{"book_id":17802724,"title":"The Husband's Secret","image_url":"https:\/\/images.gr-assets.com\/books\/1460577225m\/17802724.jpg","authors":"Liane Moriarty"},{"book_id":17802747,"title":"What She Left Behind","image_url":"https:\/\/images.gr-assets.com\/books\/1373226871m\/17802747.jpg","authors":"Ellen Marie Wiseman"},{"book_id":17825503,"title":"Leo","image_url":"https:\/\/images.gr-assets.com\/books\/1366869759m\/17825503.jpg","authors":"Mia Sheridan"},{"book_id":17828418,"title":"Fixed on You (Fixed, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1368076802m\/17828418.jpg","authors":"Laurelin Paige"},{"book_id":17830123,"title":"We Are Not Ourselves","image_url":"https:\/\/images.gr-assets.com\/books\/1418103690m\/17830123.jpg","authors":"Matthew Thomas"},{"book_id":17830559,"title":"Remy (Real, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1379702539m\/17830559.jpg","authors":"Katy Evans"},{"book_id":17831614,"title":"Beautiful Player (Beautiful Bastard, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1375285002m\/17831614.jpg","authors":"Christina Lauren"},{"book_id":17831616,"title":"Beautiful Bitch (Beautiful Bastard, #1.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1368101793m\/17831616.jpg","authors":"Christina Lauren"},{"book_id":17831617,"title":"Beautiful Bombshell (Beautiful Bastard, #2.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1373436923m\/17831617.jpg","authors":"Christina Lauren"},{"book_id":17831619,"title":"Beautiful Beginning (Beautiful Bastard, #3.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1377128262m\/17831619.jpg","authors":"Christina Lauren"},{"book_id":17833099,"title":"Price of a Kiss (Forbidden Men, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1375792540m\/17833099.jpg","authors":"Linda Kage"},{"book_id":17834834,"title":"Once We Were Brothers","image_url":"https:\/\/images.gr-assets.com\/books\/1376835596m\/17834834.jpg","authors":"Ronald H. Balson"},{"book_id":17834904,"title":"The Dead in Their Vaulted Arches (Flavia de Luce, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1432578235m\/17834904.jpg","authors":"Alan Bradley"},{"book_id":17835351,"title":"Nikola Tesla: Imagination and the Man That Invented the 20th Century","image_url":"https:\/\/images.gr-assets.com\/books\/1366561721m\/17835351.jpg","authors":"Sean Patrick"},{"book_id":17835766,"title":"One More Chance (Rosemary Beach, #8; Chance, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1397837715m\/17835766.jpg","authors":"Abbi Glines"},{"book_id":17835773,"title":"Misbehaving (Sea Breeze, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1415353706m\/17835773.jpg","authors":"Abbi Glines"},{"book_id":17838528,"title":"The Unexpected Everything","image_url":"https:\/\/images.gr-assets.com\/books\/1443203227m\/17838528.jpg","authors":"Morgan Matson"},{"book_id":17851885,"title":"I Am Malala: The Story of the Girl Who Stood Up for Education and Was Shot by the Taliban","image_url":"https:\/\/images.gr-assets.com\/books\/1375414895m\/17851885.jpg","authors":"Malala Yousafzai, Christina Lamb"},{"book_id":17853024,"title":"The Pagan Lord (The Saxon Stories, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1370529803m\/17853024.jpg","authors":"Bernard Cornwell"},{"book_id":17855756,"title":"Dust (Silo, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1369522849m\/17855756.jpg","authors":"Hugh Howey"},{"book_id":17860199,"title":"The World of Divergent: The Path to Allegiant (Divergent, #2.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1376880754m\/17860199.jpg","authors":"Veronica Roth"},{"book_id":17860217,"title":"Trust in Me (Wait for You, #1.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1493755741m\/17860217.jpg","authors":"J. Lynn, Jennifer L. Armentrout"},{"book_id":17860739,"title":"S.","image_url":"https:\/\/images.gr-assets.com\/books\/1378767595m\/17860739.jpg","authors":"J.J. Abrams, Doug Dorst"},{"book_id":17876893,"title":"Captivated by You (Crossfire, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1410020040m\/17876893.jpg","authors":"Sylvia Day"},{"book_id":17876897,"title":"One with You (Crossfire, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1458742883m\/17876897.jpg","authors":"Sylvia Day"},{"book_id":17878931,"title":"Red Queen (Red Queen, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1411472322m\/17878931.jpg","authors":"Victoria Aveyard"},{"book_id":17880708,"title":"Fueled (Driven, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1375489908m\/17880708.jpg","authors":"K. Bromberg"},{"book_id":17880714,"title":"Crashed (Driven, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1391008361m\/17880714.jpg","authors":"K. Bromberg"},{"book_id":17884042,"title":"Still Life with Bread Crumbs","image_url":"https:\/\/images.gr-assets.com\/books\/1403168088m\/17884042.jpg","authors":"Anna Quindlen"},{"book_id":17888952,"title":"The First Phone Call from Heaven","image_url":"https:\/\/images.gr-assets.com\/books\/1380034020m\/17888952.jpg","authors":"Mitch Albom"},{"book_id":17899392,"title":"First Love","image_url":"https:\/\/images.gr-assets.com\/books\/1408925704m\/17899392.jpg","authors":"James Patterson, Emily Raymond"},{"book_id":17899696,"title":"The Edge of Always (The Edge of Never, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"J.A. Redmerski"},{"book_id":17901125,"title":"The Mime Order (The Bone Season, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1421696237m\/17901125.jpg","authors":"Samantha Shannon"},{"book_id":17903381,"title":"Diary ng Panget","image_url":"https:\/\/images.gr-assets.com\/books\/1368083785m\/17903381.jpg","authors":"HaveYouSeenThisGirL, Jan Irene Villar"},{"book_id":17905709,"title":"The Narrow Road to the Deep North","image_url":"https:\/\/images.gr-assets.com\/books\/1374734363m\/17905709.jpg","authors":"Richard Flanagan"},{"book_id":17908462,"title":"Takedown Twenty (Stephanie Plum, #20)","image_url":"https:\/\/images.gr-assets.com\/books\/1373758461m\/17908462.jpg","authors":"Janet Evanovich"},{"book_id":17910048,"title":"The Goblin Emperor","image_url":"https:\/\/images.gr-assets.com\/books\/1373039517m\/17910048.jpg","authors":"Katherine Addison"},{"book_id":17910054,"title":"The Sixth Extinction: An Unnatural History","image_url":"https:\/\/images.gr-assets.com\/books\/1372677697m\/17910054.jpg","authors":"Elizabeth Kolbert"},{"book_id":17910124,"title":"The Emperor's Blades (Chronicle of the Unhewn Throne, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1369246817m\/17910124.jpg","authors":"Brian Staveley"},{"book_id":17910544,"title":"Glitter and Glue","image_url":"https:\/\/images.gr-assets.com\/books\/1403166272m\/17910544.jpg","authors":"Kelly Corrigan"},{"book_id":17910611,"title":"Wedding Night","image_url":"https:\/\/images.gr-assets.com\/books\/1396634329m\/17910611.jpg","authors":"Sophie Kinsella"},{"book_id":17920175,"title":"Wayward (Wayward Pines, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Blake Crouch"},{"book_id":17925397,"title":"A Castle of Sand (A Shade of Vampire, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1368555992m\/17925397.jpg","authors":"Bella Forrest"},{"book_id":17926775,"title":"Stolen Songbird (The Malediction Trilogy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1386265289m\/17926775.jpg","authors":"Danielle L. Jensen"},{"book_id":17927395,"title":"A Court of Mist and Fury (A Court of Thorns and Roses, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1485259138m\/17927395.jpg","authors":"Sarah J. Maas"},{"book_id":17930773,"title":"Found in You (Fixed, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1377584166m\/17930773.jpg","authors":"Laurelin Paige"},{"book_id":17934385,"title":"Tempting Fate","image_url":"https:\/\/images.gr-assets.com\/books\/1386626870m\/17934385.jpg","authors":"Jane Green"},{"book_id":17934416,"title":"Keep Quiet","image_url":"https:\/\/images.gr-assets.com\/books\/1391355179m\/17934416.jpg","authors":"Lisa Scottoline"},{"book_id":17934521,"title":"Shotgun Lovesongs","image_url":"https:\/\/images.gr-assets.com\/books\/1396818566m\/17934521.jpg","authors":"Nickolas Butler"},{"book_id":17934530,"title":"Annihilation (Southern Reach, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1403941587m\/17934530.jpg","authors":"Jeff VanderMeer"},{"book_id":17934655,"title":"The Empathy Exams: Essays","image_url":"https:\/\/images.gr-assets.com\/books\/1405924561m\/17934655.jpg","authors":"Leslie Jamison"},{"book_id":17936925,"title":"Breakable (Contours of the Heart, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1384787127m\/17936925.jpg","authors":"Tammara Webber"},{"book_id":17948485,"title":"Friend-Zoned (Friend-Zoned, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1369113567m\/17948485.jpg","authors":"Belle Aurora"},{"book_id":17950614,"title":"UnDivided (Unwind, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1392097377m\/17950614.jpg","authors":"Neal Shusterman"},{"book_id":17970255,"title":"Into the Deep (Into the Deep, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1373117694m\/17970255.jpg","authors":"Samantha Young"},{"book_id":17973653,"title":"Shine Not Burn (Shine Not Burn, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1369392331m\/17973653.jpg","authors":"Elle Casey"},{"book_id":17977710,"title":"Twisted (Tangled, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1387087236m\/17977710.jpg","authors":"Emma Chase"},{"book_id":17978144,"title":"Before We Met","image_url":"https:\/\/images.gr-assets.com\/books\/1369569396m\/17978144.jpg","authors":"Lucie Whitehouse"},{"book_id":17983690,"title":"Lick (Stage Dive, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1421855031m\/17983690.jpg","authors":"Kylie Scott"},{"book_id":17985262,"title":"CyberStorm","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Matthew Mather"},{"book_id":17989312,"title":"The Sisterhood","image_url":"https:\/\/images.gr-assets.com\/books\/1371249679m\/17989312.jpg","authors":"Helen Bryan"},{"book_id":17999892,"title":"The Atlantis Gene (The Origin Mystery, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1385398066m\/17999892.jpg","authors":"A.G. Riddle"},{"book_id":18003300,"title":"Love & Misadventure","image_url":"https:\/\/images.gr-assets.com\/books\/1370084153m\/18003300.jpg","authors":"Lang Leav"},{"book_id":18006496,"title":"Queen of Shadows (Throne of Glass, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1441230104m\/18006496.jpg","authors":"Sarah J. Maas"},{"book_id":18007532,"title":"An Officer and a Spy","image_url":"https:\/\/images.gr-assets.com\/books\/1378711003m\/18007532.jpg","authors":"Robert Harris"},{"book_id":18007533,"title":"One More Thing: Stories and Other Stories","image_url":"https:\/\/images.gr-assets.com\/books\/1393786903m\/18007533.jpg","authors":"B.J. Novak"},{"book_id":18007535,"title":"The Winter People","image_url":"https:\/\/images.gr-assets.com\/books\/1377582922m\/18007535.jpg","authors":"Jennifer McMahon"},{"book_id":18007564,"title":"The Martian","image_url":"https:\/\/images.gr-assets.com\/books\/1413706054m\/18007564.jpg","authors":"Andy Weir"},{"book_id":18039755,"title":"\u062d\u0648\u062c\u0646 [H\u0323awjan]","image_url":"https:\/\/images.gr-assets.com\/books\/1370371939m\/18039755.jpg","authors":"Ibraheem Abbas, \u0625\u0628\u0631\u0627\u0647\u064a\u0645 \u0639\u0628\u0627\u0633, Yasser Bahjatt"},{"book_id":18039963,"title":"A House in the Sky","image_url":"https:\/\/images.gr-assets.com\/books\/1370379455m\/18039963.jpg","authors":"Amanda Lindhout, Sara Corbett"},{"book_id":18045473,"title":"Last Train to Istanbul","image_url":"https:\/\/images.gr-assets.com\/books\/1370617022m\/18045473.jpg","authors":"Ay\u015fe Kulin, John W. Baker"},{"book_id":18050143,"title":"Zero to One: Notes on Startups, or How to Build the Future","image_url":"https:\/\/images.gr-assets.com\/books\/1414347376m\/18050143.jpg","authors":"Peter Thiel, Blake Masters"},{"book_id":18052985,"title":"Romancing the Duke (Castles Ever After, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1377311107m\/18052985.jpg","authors":"Tessa Dare"},{"book_id":18053060,"title":"Dorothy Must Die (Dorothy Must Die, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1381437107m\/18053060.jpg","authors":"Danielle Paige"},{"book_id":18053782,"title":"Take a Chance (Rosemary Beach, #7; Chance, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1396889528m\/18053782.jpg","authors":"Abbi Glines"},{"book_id":18054175,"title":"The Good Luck of Right Now","image_url":"https:\/\/images.gr-assets.com\/books\/1370898422m\/18054175.jpg","authors":"Matthew Quick"},{"book_id":18071296,"title":"Willing Captive","image_url":"https:\/\/images.gr-assets.com\/books\/1371600310m\/18071296.jpg","authors":"Belle Aurora"},{"book_id":18076876,"title":"Reaper's Legacy (Reapers MC, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1373565326m\/18076876.jpg","authors":"Joanna Wylde"},{"book_id":18077752,"title":"Acceptance (Southern Reach, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1403941598m\/18077752.jpg","authors":"Jeff VanderMeer"},{"book_id":18077769,"title":"Authority (Southern Reach, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1403941730m\/18077769.jpg","authors":"Jeff VanderMeer"},{"book_id":18077875,"title":"Essentialism: The Disciplined Pursuit of Less","image_url":"https:\/\/images.gr-assets.com\/books\/1403165375m\/18077875.jpg","authors":"Greg McKeown"},{"book_id":18077903,"title":"Creativity, Inc.: Overcoming the Unseen Forces That Stand in the Way of True Inspiration","image_url":"https:\/\/images.gr-assets.com\/books\/1400863577m\/18077903.jpg","authors":"Ed Catmull, Amy Wallace"},{"book_id":18079527,"title":"The Impossible Knife of Memory","image_url":"https:\/\/images.gr-assets.com\/books\/1405786728m\/18079527.jpg","authors":"Laurie Halse Anderson"},{"book_id":18079661,"title":"Fear Nothing (Detective D.D. Warren, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1372049470m\/18079661.jpg","authors":"Lisa Gardner"},{"book_id":18079683,"title":"Boy, Snow, Bird","image_url":"https:\/\/images.gr-assets.com\/books\/1391384454m\/18079683.jpg","authors":"Helen Oyeyemi"},{"book_id":18079719,"title":"Grasshopper Jungle","image_url":"https:\/\/images.gr-assets.com\/books\/1373059909m\/18079719.jpg","authors":"Andrew Smith"},{"book_id":18079757,"title":"Concealed in Death (In Death, #38)","image_url":"https:\/\/images.gr-assets.com\/books\/1457447121m\/18079757.jpg","authors":"J.D. Robb"},{"book_id":18079776,"title":"The Invention of Wings","image_url":"https:\/\/images.gr-assets.com\/books\/1386699861m\/18079776.jpg","authors":"Sue Monk Kidd"},{"book_id":18079804,"title":"Half Bad (The Half Bad Trilogy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1413889712m\/18079804.jpg","authors":"Sally Green"},{"book_id":18080889,"title":"Worth the Fight (MMA Fighter, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1376730892m\/18080889.jpg","authors":"Vi Keeland"},{"book_id":18080920,"title":"The Transfer (Divergent, #0.1)","image_url":"https:\/\/images.gr-assets.com\/books\/1420493627m\/18080920.jpg","authors":"Veronica Roth"},{"book_id":18080923,"title":"The Traitor (Divergent, #0.4)","image_url":"https:\/\/images.gr-assets.com\/books\/1393687607m\/18080923.jpg","authors":"Veronica Roth"},{"book_id":18081809,"title":"Landline","image_url":"https:\/\/images.gr-assets.com\/books\/1499378092m\/18081809.jpg","authors":"Rainbow Rowell"},{"book_id":18089551,"title":"Tall, Tatted and Tempting (The Reed Brothers, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1371580822m\/18089551.jpg","authors":"Tammy Falkner"},{"book_id":18089900,"title":"The Serpent of Venice (The Fool, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1376934009m\/18089900.jpg","authors":"Christopher Moore"},{"book_id":18089975,"title":"After I'm Gone","image_url":"https:\/\/images.gr-assets.com\/books\/1383274696m\/18089975.jpg","authors":"Laura Lippman"},{"book_id":18090061,"title":"Big Girl Panties","image_url":"https:\/\/images.gr-assets.com\/books\/1385963958m\/18090061.jpg","authors":"Stephanie Evanovich"},{"book_id":18090147,"title":"The Enchanted","image_url":"https:\/\/images.gr-assets.com\/books\/1373991244m\/18090147.jpg","authors":"Rene Denfeld"},{"book_id":18090150,"title":"Ripper","image_url":"https:\/\/images.gr-assets.com\/books\/1422871316m\/18090150.jpg","authors":"Isabel Allende, Oliver Brock, Frank Wynne"},{"book_id":18104607,"title":"Beautiful Oblivion (The Maddox Brothers, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1398284779m\/18104607.jpg","authors":"Jamie McGuire"},{"book_id":18105011,"title":"Sweet Home (Sweet Home, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1376473414m\/18105011.jpg","authors":"Tillie Cole"},{"book_id":18107951,"title":"Midnight Crossroad (Midnight, Texas, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1384456102m\/18107951.jpg","authors":"Charlaine Harris"},{"book_id":18108281,"title":"The King (Black Dagger Brotherhood, #12)","image_url":"https:\/\/images.gr-assets.com\/books\/1371919011m\/18108281.jpg","authors":"J.R. Ward"},{"book_id":18108795,"title":"High Heat (Jack Reacher #17.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1467986444m\/18108795.jpg","authors":"Lee Child"},{"book_id":18108877,"title":"Timebound (The Chronos Files, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1371864811m\/18108877.jpg","authors":"Rysa Walker"},{"book_id":18110808,"title":"Fallen Crest Public (Fallen Crest High, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1383257344m\/18110808.jpg","authors":"Tijan"},{"book_id":18111281,"title":"A Long Way Home","image_url":"https:\/\/images.gr-assets.com\/books\/1371983160m\/18111281.jpg","authors":"Saroo Brierley"},{"book_id":18114057,"title":"Influx","image_url":"https:\/\/images.gr-assets.com\/books\/1374634071m\/18114057.jpg","authors":"Daniel Suarez"},{"book_id":18114060,"title":"Missing You","image_url":"https:\/\/images.gr-assets.com\/books\/1373737793m\/18114060.jpg","authors":"Harlan Coben"},{"book_id":18114068,"title":"Redeployment","image_url":"https:\/\/images.gr-assets.com\/books\/1417987993m\/18114068.jpg","authors":"Phil Klay"},{"book_id":18114142,"title":"A Fall of Marigolds","image_url":"https:\/\/images.gr-assets.com\/books\/1385964725m\/18114142.jpg","authors":"Susan Meissner"},{"book_id":18115061,"title":"Before Jamaica Lane (On Dublin Street, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1372090894m\/18115061.jpg","authors":"Samantha Young"},{"book_id":18126198,"title":"Four: A Divergent Story Collection (Divergent, #0.1 - 0.4)","image_url":"https:\/\/images.gr-assets.com\/books\/1393687572m\/18126198.jpg","authors":"Veronica Roth"},{"book_id":18127101,"title":"Uganda Be Kidding Me","image_url":"https:\/\/images.gr-assets.com\/books\/1403174817m\/18127101.jpg","authors":"Chelsea Handler"},{"book_id":18129852,"title":"Rival (Fall Away, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1394971101m\/18129852.jpg","authors":"Penelope Douglas, Abby Craden, Nelson Hobbs"},{"book_id":18134249,"title":"Ruin (Ruin, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1374686324m\/18134249.jpg","authors":"Rachel Van Dyken"},{"book_id":18134894,"title":"Tears of Tess (Monsters in the Dark, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1372821993m\/18134894.jpg","authors":"Pepper Winters"},{"book_id":18138189,"title":"Tower Lord (Raven's Shadow, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1382486392m\/18138189.jpg","authors":"Anthony Ryan"},{"book_id":18138755,"title":"Forever with You (Fixed, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1386618209m\/18138755.jpg","authors":"Laurelin Paige"},{"book_id":18140047,"title":"Love Letters to the Dead","image_url":"https:\/\/images.gr-assets.com\/books\/1497096111m\/18140047.jpg","authors":"Ava Dellaira"},{"book_id":18142329,"title":"Police (Harry Hole, #10)","image_url":"https:\/\/images.gr-assets.com\/books\/1373049226m\/18142329.jpg","authors":"Jo Nesb\u00f8, Don Bartlett"},{"book_id":18143905,"title":"The Opposite of Loneliness: Essays and Stories","image_url":"https:\/\/images.gr-assets.com\/books\/1401056149m\/18143905.jpg","authors":"Marina Keegan"},{"book_id":18143968,"title":"I've Got You Under My Skin (Under Suspicion, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1397768065m\/18143968.jpg","authors":"Mary Higgins Clark, Alafair Burke"},{"book_id":18143977,"title":"All the Light We Cannot See","image_url":"https:\/\/images.gr-assets.com\/books\/1451445646m\/18143977.jpg","authors":"Anthony Doerr"},{"book_id":18144053,"title":"The Museum of Extraordinary Things","image_url":"https:\/\/images.gr-assets.com\/books\/1392575125m\/18144053.jpg","authors":"Alice Hoffman"},{"book_id":18144115,"title":"All Fall Down","image_url":"https:\/\/images.gr-assets.com\/books\/1394567549m\/18144115.jpg","authors":"Jennifer Weiner"},{"book_id":18144124,"title":"I Am Pilgrim (Pilgrim, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1403345411m\/18144124.jpg","authors":"Terry Hayes"},{"book_id":18149927,"title":"Beneath This Man (This Man, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1372773964m\/18149927.jpg","authors":"Jodi Ellen Malpas"},{"book_id":18161265,"title":"How to Fall in Love","image_url":"https:\/\/images.gr-assets.com\/books\/1373279911m\/18161265.jpg","authors":"Cecelia Ahern"},{"book_id":18163646,"title":"Falling into Place","image_url":"https:\/\/images.gr-assets.com\/books\/1393613084m\/18163646.jpg","authors":"Amy Zhang"},{"book_id":18166936,"title":"The Strange and Beautiful Sorrows of Ava Lavender","image_url":"https:\/\/images.gr-assets.com\/books\/1397110326m\/18166936.jpg","authors":"Leslye Walton"},{"book_id":18167006,"title":"Delicious!","image_url":"https:\/\/images.gr-assets.com\/books\/1404478598m\/18167006.jpg","authors":"Ruth Reichl"},{"book_id":18170039,"title":"The Guard (The Selection, #2.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1380307008m\/18170039.jpg","authors":"Kiera Cass"},{"book_id":18170134,"title":"NYPD Red 2 (NYPD Red, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1373501096m\/18170134.jpg","authors":"James Patterson, Marshall Karp"},{"book_id":18170143,"title":"An Astronaut's Guide to Life on Earth","image_url":"https:\/\/images.gr-assets.com\/books\/1380495144m\/18170143.jpg","authors":"Chris Hadfield"},{"book_id":18172471,"title":"The Selection Stories: The Prince & The Guard (The Selection, #0.5, 2.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1380214609m\/18172471.jpg","authors":"Kiera Cass"},{"book_id":18176747,"title":"The Hard Thing About Hard Things: Building a Business When There Are No Easy Answers","image_url":"https:\/\/images.gr-assets.com\/books\/1386609333m\/18176747.jpg","authors":"Ben Horowitz"},{"book_id":18189606,"title":"Since You've Been Gone","image_url":"https:\/\/images.gr-assets.com\/books\/1377702326m\/18189606.jpg","authors":"Morgan Matson"},{"book_id":18191814,"title":"A Blaze of Sun (A Shade of Vampire, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1375299988m\/18191814.jpg","authors":"Bella Forrest"},{"book_id":18209290,"title":"Astonish Me","image_url":"https:\/\/images.gr-assets.com\/books\/1384816768m\/18209290.jpg","authors":"Maggie Shipstead"},{"book_id":18209454,"title":"The Thousand-Dollar Tan Line (Veronica Mars, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1393100477m\/18209454.jpg","authors":"Rob Thomas, Jennifer Graham"},{"book_id":18209468,"title":"The Weight of Blood","image_url":"https:\/\/images.gr-assets.com\/books\/1395611141m\/18209468.jpg","authors":"Laura McHugh"},{"book_id":18210706,"title":"Broken Homes (Peter Grant, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1379380185m\/18210706.jpg","authors":"Ben Aaronovitch"},{"book_id":18211536,"title":"Rush Too Far (Rosemary Beach, #4; Too Far, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1393569509m\/18211536.jpg","authors":"Abbi Glines"},{"book_id":18213403,"title":"No Place to Hide: Edward Snowden, the NSA, and the U.S. Surveillance State","image_url":"https:\/\/images.gr-assets.com\/books\/1383352779m\/18213403.jpg","authors":"Glenn Greenwald"},{"book_id":18214414,"title":"The Silkworm (Cormoran Strike, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1392577290m\/18214414.jpg","authors":"Robert Galbraith, J.K. Rowling"},{"book_id":18221931,"title":"Carter Reed (Carter Reed, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1376139745m\/18221931.jpg","authors":"Tijan"},{"book_id":18222699,"title":"Graduation Day (The Testing, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1384363227m\/18222699.jpg","authors":"Joelle Charbonneau"},{"book_id":18225810,"title":"Sisters","image_url":"https:\/\/images.gr-assets.com\/books\/1411022689m\/18225810.jpg","authors":"Raina Telgemeier"},{"book_id":18228202,"title":"Bridge to Haven","image_url":"https:\/\/images.gr-assets.com\/books\/1376078910m\/18228202.jpg","authors":"Francine Rivers"},{"book_id":18232495,"title":"The Auschwitz Escape","image_url":"https:\/\/images.gr-assets.com\/books\/1415118326m\/18232495.jpg","authors":"Joel C. Rosenberg"},{"book_id":18243700,"title":"The Assassin's Blade (Throne of Glass, #0.1-0.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1384362444m\/18243700.jpg","authors":"Sarah J. Maas"},{"book_id":18243828,"title":"Jake Undone (Jake, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1374834443m\/18243828.jpg","authors":"Penelope Ward"},{"book_id":18244799,"title":"Hardwired (Hacker, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1374851880m\/18244799.jpg","authors":"Meredith Wild"},{"book_id":18246727,"title":"Mud Vein","image_url":"https:\/\/images.gr-assets.com\/books\/1379536072m\/18246727.jpg","authors":"Tarryn Fisher"},{"book_id":18263725,"title":"The Crossover","image_url":"https:\/\/images.gr-assets.com\/books\/1390427593m\/18263725.jpg","authors":"Kwame Alexander"},{"book_id":18271235,"title":"We Are Called to Rise","image_url":"https:\/\/images.gr-assets.com\/books\/1403347563m\/18271235.jpg","authors":"Laura McBride"},{"book_id":18282800,"title":"The Ladies' Room","image_url":"https:\/\/images.gr-assets.com\/books\/1453689241m\/18282800.jpg","authors":"Carolyn Brown"},{"book_id":18282915,"title":"The Chase (Fox and O'Hare, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1381528974m\/18282915.jpg","authors":"Janet Evanovich, Lee Goldberg"},{"book_id":18285151,"title":"More Than This (More Than, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1375710763m\/18285151.jpg","authors":"Jay McLean"},{"book_id":18293427,"title":"The Storied Life of A.J. Fikry","image_url":"https:\/\/images.gr-assets.com\/books\/1404582137m\/18293427.jpg","authors":"Gabrielle Zevin"},{"book_id":18295852,"title":"The Geography of You and Me","image_url":"https:\/\/images.gr-assets.com\/books\/1376408056m\/18295852.jpg","authors":"Jennifer E. Smith"},{"book_id":18295858,"title":"Frog Music","image_url":"https:\/\/images.gr-assets.com\/books\/1393227215m\/18295858.jpg","authors":"Emma Donoghue"},{"book_id":18296030,"title":"Don't Look Back","image_url":"https:\/\/images.gr-assets.com\/books\/1380803444m\/18296030.jpg","authors":"Jennifer L. Armentrout"},{"book_id":18297707,"title":"Tangled (Tangled, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1375808439m\/18297707.jpg","authors":"Emma Chase"},{"book_id":18298225,"title":"On the Fence","image_url":"https:\/\/images.gr-assets.com\/books\/1383229604m\/18298225.jpg","authors":"Kasie West"},{"book_id":18301124,"title":"Making Faces","image_url":"https:\/\/images.gr-assets.com\/books\/1378983590m\/18301124.jpg","authors":"Amy Harmon"},{"book_id":18302455,"title":"The Circle","image_url":"https:\/\/images.gr-assets.com\/books\/1376419833m\/18302455.jpg","authors":"Dave Eggers"},{"book_id":18304322,"title":"Dumplin' (Dumplin', #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1424189465m\/18304322.jpg","authors":"Julie Murphy"},{"book_id":18310201,"title":"The Painter","image_url":"https:\/\/images.gr-assets.com\/books\/1409595558m\/18310201.jpg","authors":"Peter Heller"},{"book_id":18310944,"title":"The Sandman: Overture","image_url":"https:\/\/images.gr-assets.com\/books\/1444878181m\/18310944.jpg","authors":"Neil Gaiman, J.H. Williams III, Dave Stewart, Todd Klein"},{"book_id":18316089,"title":"Lucky Us","image_url":"https:\/\/images.gr-assets.com\/books\/1400853144m\/18316089.jpg","authors":"Amy Bloom"},{"book_id":18323154,"title":"\u0627\u0644\u0645\u0631\u062d\u0648\u0645","image_url":"https:\/\/images.gr-assets.com\/books\/1376392753m\/18323154.jpg","authors":"\u062d\u0633\u0646 \u0643\u0645\u0627\u0644"},{"book_id":18331807,"title":"Vain (The Seven Deadly, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1376504907m\/18331807.jpg","authors":"Fisher Amelie"},{"book_id":18335634,"title":"Clockwork Princess (The Infernal Devices, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1436788488m\/18335634.jpg","authors":"Cassandra Clare"},{"book_id":18336965,"title":"My Heart and Other Black Holes","image_url":"https:\/\/images.gr-assets.com\/books\/1415056175m\/18336965.jpg","authors":"Jasmine Warga"},{"book_id":18337259,"title":"A Game of Thrones: Comic Book, Issue 1","image_url":"https:\/\/images.gr-assets.com\/books\/1376738412m\/18337259.jpg","authors":"Daniel Abraham, George R.R. Martin, Tommy Patterson"},{"book_id":18339630,"title":"All My Puny Sorrows","image_url":"https:\/\/images.gr-assets.com\/books\/1416181263m\/18339630.jpg","authors":"Miriam Toews"},{"book_id":18339743,"title":"Bittersweet","image_url":"https:\/\/images.gr-assets.com\/books\/1404476771m\/18339743.jpg","authors":"Miranda Beverly-Whittemore"},{"book_id":18340482,"title":"Until Trevor (Until, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1384492152m\/18340482.jpg","authors":"Aurora Rose Reynolds"},{"book_id":18341046,"title":"Until November (Until, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1376867667m\/18341046.jpg","authors":"Aurora Rose Reynolds"},{"book_id":18342283,"title":"Command Authority (Jack Ryan Universe, #16)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tom Clancy, Mark Greaney"},{"book_id":18353714,"title":"The Target (Will Robie, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1391463804m\/18353714.jpg","authors":"David Baldacci"},{"book_id":18363068,"title":"\u062d\u0628\u064a\u0628\u062a\u064a \u0628\u0643\u0645\u0627\u0621","image_url":"https:\/\/images.gr-assets.com\/books\/1377064343m\/18363068.jpg","authors":"\u0645\u062d\u0645\u062f \u0627\u0644\u0633\u0627\u0644\u0645"},{"book_id":18367581,"title":"Afterworlds (Afterworlds #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1396118779m\/18367581.jpg","authors":"Scott Westerfeld"},{"book_id":18373214,"title":"Cockroaches (Harry Hole, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1418343189m\/18373214.jpg","authors":"Jo Nesb\u00f8, Don Bartlett"},{"book_id":18387597,"title":"2 \u0636\u0628\u0627\u0637","image_url":"https:\/\/images.gr-assets.com\/books\/1377876467m\/18387597.jpg","authors":"Essam Youssef"},{"book_id":18404093,"title":"Save the Date","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mary Kay Andrews"},{"book_id":18404248,"title":"That Night","image_url":"https:\/\/images.gr-assets.com\/books\/1382569155m\/18404248.jpg","authors":"Chevy Stevens"},{"book_id":18404285,"title":"Be Careful What You Wish For (The Clifton Chronicles, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jeffrey Archer"},{"book_id":18404427,"title":"China Dolls","image_url":"https:\/\/images.gr-assets.com\/books\/1405290827m\/18404427.jpg","authors":"Lisa See"},{"book_id":18405221,"title":"Queen of Fire (Raven's Shadow, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1417350958m\/18405221.jpg","authors":"Anthony Ryan"},{"book_id":18428067,"title":"A Constellation of Vital Phenomena","image_url":"https:\/\/images.gr-assets.com\/books\/1408313066m\/18428067.jpg","authors":"Anthony Marra"},{"book_id":18453074,"title":"To Rise Again at a Decent Hour","image_url":"https:\/\/images.gr-assets.com\/books\/1391305201m\/18453074.jpg","authors":"Joshua Ferris"},{"book_id":18453095,"title":"Unlucky 13 (Women\u2019s Murder Club, #13)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"James Patterson, Maxine Paetro"},{"book_id":18453110,"title":"The Three (The Three, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1379897631m\/18453110.jpg","authors":"Sarah Lotz"},{"book_id":18460392,"title":"All the Bright Places","image_url":"https:\/\/images.gr-assets.com\/books\/1404331702m\/18460392.jpg","authors":"Jennifer Niven, \u0641\u0631\u0627\u0646\u06a9 \u0645\u0639\u0646\u0648\u06cc"},{"book_id":18461986,"title":"Deep (Stage Dive, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1397676461m\/18461986.jpg","authors":"Kylie Scott"},{"book_id":18465566,"title":"This One Summer","image_url":"https:\/\/images.gr-assets.com\/books\/1456895195m\/18465566.jpg","authors":"Mariko Tamaki, Jillian Tamaki"},{"book_id":18465657,"title":"The One & Only","image_url":"https:\/\/images.gr-assets.com\/books\/1387399626m\/18465657.jpg","authors":"Emily Giffin"},{"book_id":18465852,"title":"The Book of Unknown Americans","image_url":"https:\/\/images.gr-assets.com\/books\/1413655729m\/18465852.jpg","authors":"Cristina Henriquez"},{"book_id":18467802,"title":"Euphoria","image_url":"https:\/\/images.gr-assets.com\/books\/1418788366m\/18467802.jpg","authors":"Lily King"},{"book_id":18467818,"title":"An Untamed State","image_url":"https:\/\/images.gr-assets.com\/books\/1395145925m\/18467818.jpg","authors":"Roxane Gay"},{"book_id":18468559,"title":"Raw (RAW Family, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1380531971m\/18468559.jpg","authors":"Belle Aurora"},{"book_id":18478222,"title":"Twelve Years a Slave","image_url":"https:\/\/images.gr-assets.com\/books\/1378793462m\/18478222.jpg","authors":"Solomon Northup"},{"book_id":18498558,"title":"Bird Box","image_url":"https:\/\/images.gr-assets.com\/books\/1383949470m\/18498558.jpg","authors":"Josh Malerman"},{"book_id":18498569,"title":"The Miniaturist","image_url":"https:\/\/images.gr-assets.com\/books\/1392415313m\/18498569.jpg","authors":"Jessie Burton"},{"book_id":18500665,"title":"End of Days (Penryn & the End of Days, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1423384676m\/18500665.jpg","authors":"Susan Ee"},{"book_id":18505784,"title":"The Pearl That Broke Its Shell","image_url":"https:\/\/images.gr-assets.com\/books\/1384543130m\/18505784.jpg","authors":"Nadia Hashimi"},{"book_id":18505796,"title":"10% Happier: How I Tamed the Voice in My Head, Reduced Stress Without Losing My Edge, and Found Self-Help That Actually Works","image_url":"https:\/\/images.gr-assets.com\/books\/1451446393m\/18505796.jpg","authors":"Dan Harris"},{"book_id":18505832,"title":"Natchez Burning","image_url":"https:\/\/images.gr-assets.com\/books\/1383438264m\/18505832.jpg","authors":"Greg Iles"},{"book_id":18505836,"title":"The Girl Who Came Home","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Hazel Gaynor"},{"book_id":18527947,"title":"Shadow Spell (The Cousins O'Dwyer Trilogy, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1458263039m\/18527947.jpg","authors":"Nora Roberts"},{"book_id":18528190,"title":"Men Explain Things to Me","image_url":"https:\/\/images.gr-assets.com\/books\/1393447237m\/18528190.jpg","authors":"Rebecca Solnit"},{"book_id":18528454,"title":"A Beautiful Wedding (Beautiful, #2.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1384555141m\/18528454.jpg","authors":"Jamie McGuire"},{"book_id":18584855,"title":"Heartless","image_url":"https:\/\/images.gr-assets.com\/books\/1477740245m\/18584855.jpg","authors":"Marissa Meyer"},{"book_id":18593175,"title":"Finding Cinderella (Hopeless, #2.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1380847885m\/18593175.jpg","authors":"Colleen Hoover"},{"book_id":18594409,"title":"Can't We Talk about Something More Pleasant?","image_url":"https:\/\/images.gr-assets.com\/books\/1421087235m\/18594409.jpg","authors":"Roz Chast"},{"book_id":18594594,"title":"Cop Town","image_url":"https:\/\/images.gr-assets.com\/books\/1384822680m\/18594594.jpg","authors":"Karin Slaughter"},{"book_id":18594633,"title":"Summer House with Swimming Pool","image_url":"https:\/\/images.gr-assets.com\/books\/1384734826m\/18594633.jpg","authors":"Herman Koch"},{"book_id":18594634,"title":"Thrive: The Third Metric to Redefining Success and Creating a Life of Well-Being, Wisdom, and Wonder","image_url":"https:\/\/images.gr-assets.com\/books\/1400873884m\/18594634.jpg","authors":"Arianna Huffington"},{"book_id":18599754,"title":"Say What You Will","image_url":"https:\/\/images.gr-assets.com\/books\/1392738015m\/18599754.jpg","authors":"Cammie McGovern"},{"book_id":18602341,"title":"The Wicked Will Rise (Dorothy Must Die, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1423841142m\/18602341.jpg","authors":"Danielle Paige"},{"book_id":18607805,"title":"Kindle Paperwhite User's Guide","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Amazon"},{"book_id":18616975,"title":"Off to Be the Wizard (Magic 2.0, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1390179189m\/18616975.jpg","authors":"Scott Meyer"},{"book_id":18630542,"title":"Seconds","image_url":"https:\/\/images.gr-assets.com\/books\/1399502867m\/18630542.jpg","authors":"Bryan Lee O'Malley, Nathan Fairbairn"},{"book_id":18635016,"title":"The One (The Selection, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1395612906m\/18635016.jpg","authors":"Kiera Cass"},{"book_id":18635039,"title":"The Hurricane Sisters","image_url":"https:\/\/images.gr-assets.com\/books\/1395873591m\/18635039.jpg","authors":"Dorothea Benton Frank"},{"book_id":18635113,"title":"Elizabeth Is Missing","image_url":"https:\/\/images.gr-assets.com\/books\/1388883559m\/18635113.jpg","authors":"Emma Healey"},{"book_id":18635622,"title":"A Knight of the Seven Kingdoms (The Tales of Dunk and Egg, #1-3)","image_url":"https:\/\/images.gr-assets.com\/books\/1423281810m\/18635622.jpg","authors":"George R.R. Martin, Gary Gianni"},{"book_id":18641982,"title":"The Vacationers","image_url":"https:\/\/images.gr-assets.com\/books\/1386629708m\/18641982.jpg","authors":"Emma Straub"},{"book_id":18651980,"title":"Fourth of July Creek","image_url":"https:\/\/images.gr-assets.com\/books\/1417981221m\/18651980.jpg","authors":"Smith Henderson"},{"book_id":18652002,"title":"The Bees","image_url":"https:\/\/images.gr-assets.com\/books\/1384018069m\/18652002.jpg","authors":"Laline Paull"},{"book_id":18655937,"title":"Nash (Marked Men, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1391031509m\/18655937.jpg","authors":"Jay Crownover"},{"book_id":18656006,"title":"The Matchmaker","image_url":"https:\/\/images.gr-assets.com\/books\/1395694896m\/18656006.jpg","authors":"Elin Hilderbrand"},{"book_id":18656030,"title":"Cibola Burn (The Expanse, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1405023040m\/18656030.jpg","authors":"James S.A. Corey"},{"book_id":18656036,"title":"The Fever","image_url":"https:\/\/images.gr-assets.com\/books\/1381359885m\/18656036.jpg","authors":"Megan Abbott"},{"book_id":18656055,"title":"Invisible","image_url":"https:\/\/images.gr-assets.com\/books\/1403166141m\/18656055.jpg","authors":"James Patterson, David Ellis"},{"book_id":18659623,"title":"Through the Woods","image_url":"https:\/\/images.gr-assets.com\/books\/1414845473m\/18659623.jpg","authors":"Emily Carroll"},{"book_id":18660447,"title":"The Fill-In Boyfriend","image_url":"https:\/\/images.gr-assets.com\/books\/1414605032m\/18660447.jpg","authors":"Kasie West"},{"book_id":18666006,"title":"Close Your Eyes, Hold Hands","image_url":"https:\/\/images.gr-assets.com\/books\/1392355248m\/18666006.jpg","authors":"Chris Bohjalian"},{"book_id":18666047,"title":"Half a King (Shattered Sea, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1389378321m\/18666047.jpg","authors":"Joe Abercrombie"},{"book_id":18667307,"title":"Tokyo Ghoul, tome 1 (Tokyo Ghoul, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1498748457m\/18667307.jpg","authors":"Sui Ishida, \u77f3\u7530 \u30b9\u30a4"},{"book_id":18667779,"title":"Everything Leads to You","image_url":"https:\/\/images.gr-assets.com\/books\/1389744233m\/18667779.jpg","authors":"Nina LaCour"},{"book_id":18667817,"title":"Field of Prey (Lucas Davenport, #24)","image_url":"https:\/\/images.gr-assets.com\/books\/1382035214m\/18667817.jpg","authors":"John Sandford"},{"book_id":18667945,"title":"#GIRLBOSS","image_url":"https:\/\/images.gr-assets.com\/books\/1390931472m\/18667945.jpg","authors":"Sophia Amoruso"},{"book_id":18667976,"title":"The Secret Life of Violet Grant","image_url":"https:\/\/images.gr-assets.com\/books\/1393212446m\/18667976.jpg","authors":"Beatriz Williams"},{"book_id":18668059,"title":"The Obstacle Is the Way: The Timeless Art of Turning Trials into Triumph","image_url":"https:\/\/images.gr-assets.com\/books\/1391440316m\/18668059.jpg","authors":"Ryan Holiday"},{"book_id":18668066,"title":"The Collector","image_url":"https:\/\/images.gr-assets.com\/books\/1389532018m\/18668066.jpg","authors":"Nora Roberts"},{"book_id":18668485,"title":"The Initiate (Divergent, #0.2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Veronica Roth"},{"book_id":18680106,"title":"Hard as It Gets (Hard Ink, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1381840319m\/18680106.jpg","authors":"Laura Kaye"},{"book_id":18687079,"title":"Avatar: The Last Airbender (The Rift, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1382378982m\/18687079.jpg","authors":"Gene Luen Yang, Michael Dante DiMartino, Bryan Konietzko, Gurihiru"},{"book_id":18692431,"title":"Everything, Everything","image_url":"https:\/\/images.gr-assets.com\/books\/1450515891m\/18692431.jpg","authors":"Nicola Yoon, David Yoon"},{"book_id":18693621,"title":"Devil's Game (Reapers MC, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1433115819m\/18693621.jpg","authors":"Joanna Wylde"},{"book_id":18693716,"title":"One Plus One","image_url":"https:\/\/images.gr-assets.com\/books\/1403185695m\/18693716.jpg","authors":"Jojo Moyes"},{"book_id":18693743,"title":"Prince of Fools (The Red Queen's War, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1385072473m\/18693743.jpg","authors":"Mark Lawrence"},{"book_id":18693753,"title":"Dear Daughter","image_url":"https:\/\/images.gr-assets.com\/books\/1395618683m\/18693753.jpg","authors":"Elizabeth Little"},{"book_id":18693763,"title":"Everything I Never Told You","image_url":"https:\/\/images.gr-assets.com\/books\/1386795198m\/18693763.jpg","authors":"Celeste Ng"},{"book_id":18705209,"title":"The Blood of Olympus (The Heroes of Olympus, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1464201441m\/18705209.jpg","authors":"Rick Riordan"},{"book_id":18710190,"title":"Allegiant (Divergent, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1395582745m\/18710190.jpg","authors":"Veronica Roth"},{"book_id":18711993,"title":"\u0641\u0644\u062a\u063a\u0641\u0631\u064a","image_url":"https:\/\/images.gr-assets.com\/books\/1382532147m\/18711993.jpg","authors":"\u0623\u062b\u064a\u0631 \u0639\u0628\u062f\u0627\u0644\u0644\u0647 \u0627\u0644\u0646\u0634\u0645\u064a"},{"book_id":18712886,"title":"The Queen of the Tearling (The Queen of the Tearling, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1417685148m\/18712886.jpg","authors":"Erika Johansen"},{"book_id":18718848,"title":"Mosquitoland","image_url":"https:\/\/images.gr-assets.com\/books\/1402661616m\/18718848.jpg","authors":"David Arnold"},{"book_id":18722887,"title":"Little Mercies","image_url":"https:\/\/images.gr-assets.com\/books\/1399313845m\/18722887.jpg","authors":"Heather Gudenkauf"},{"book_id":18730158,"title":"The Heist (Gabriel Allon, #14)","image_url":"https:\/\/images.gr-assets.com\/books\/1395614308m\/18730158.jpg","authors":"Daniel Silva"},{"book_id":18736925,"title":"Capital in the Twenty-First Century","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Thomas Piketty, Arthur Goldhammer"},{"book_id":18739426,"title":"The Bands of Mourning (Mistborn, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1450134973m\/18739426.jpg","authors":"Brandon Sanderson"},{"book_id":18739485,"title":"King (King, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1434996511m\/18739485.jpg","authors":"T.M. Frazier"},{"book_id":18752959,"title":"The Staff of Serapis (Percy Jackson & Kane Chronicles Crossover #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1397002787m\/18752959.jpg","authors":"Rick Riordan"},{"book_id":18754961,"title":"Blood Magick (The Cousins O'Dwyer Trilogy, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1458263077m\/18754961.jpg","authors":"Nora Roberts"},{"book_id":18764826,"title":"The House We Grew Up In","image_url":"https:\/\/images.gr-assets.com\/books\/1407719574m\/18764826.jpg","authors":"Lisa Jewell"},{"book_id":18774020,"title":"California","image_url":"https:\/\/images.gr-assets.com\/books\/1400863574m\/18774020.jpg","authors":"Edan Lepucki"},{"book_id":18774964,"title":"A Man Called Ove","image_url":"https:\/\/images.gr-assets.com\/books\/1405259930m\/18774964.jpg","authors":"Fredrik Backman, Henning Koch"},{"book_id":18774981,"title":"Waking Up: A Guide to Spirituality Without Religion","image_url":"https:\/\/images.gr-assets.com\/books\/1415677308m\/18774981.jpg","authors":"Sam Harris"},{"book_id":18775203,"title":"Rusty Nailed (Cocktail, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1470670923m\/18775203.jpg","authors":"Alice Clayton"},{"book_id":18775247,"title":"Mr. Mercedes (Bill Hodges Trilogy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1468705326m\/18775247.jpg","authors":"Stephen King"},{"book_id":18775284,"title":"I Am Having So Much Fun Here Without You","image_url":"https:\/\/images.gr-assets.com\/books\/1403390765m\/18775284.jpg","authors":"Courtney Maum"},{"book_id":18775297,"title":"Sweet Filthy Boy (Wild Seasons, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1395723782m\/18775297.jpg","authors":"Christina Lauren"},{"book_id":18775365,"title":"The Short and Tragic Life of Robert Peace: A Brilliant Young Man Who Left Newark for the Ivy League","image_url":"https:\/\/images.gr-assets.com\/books\/1420938377m\/18775365.jpg","authors":"Jeff Hobbs"},{"book_id":18781540,"title":"Until Lilly (Until, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1390784751m\/18781540.jpg","authors":"Aurora Rose Reynolds"},{"book_id":18781543,"title":"Until Nico (Until, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1398781346m\/18781543.jpg","authors":"Aurora Rose Reynolds"},{"book_id":18798983,"title":"The Wrath and the Dawn (The Wrath and the Dawn, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1417956963m\/18798983.jpg","authors":"Renee Ahdieh"},{"book_id":18799585,"title":"Hidden (Bone Secrets. #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1386936783m\/18799585.jpg","authors":"Kendra Elliot"},{"book_id":18800655,"title":"Terms of Enlistment (Frontlines #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1391472650m\/18800655.jpg","authors":"Marko Kloos"},{"book_id":18803640,"title":"H is for Hawk","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Helen Macdonald"},{"book_id":18806240,"title":"Bone Gap","image_url":"https:\/\/images.gr-assets.com\/books\/1402928507m\/18806240.jpg","authors":"Laura Ruby"},{"book_id":18812405,"title":"The Good Girl","image_url":"https:\/\/images.gr-assets.com\/books\/1388340126m\/18812405.jpg","authors":"Mary Kubica"},{"book_id":18813530,"title":"A Shadow of Light (A Shade of Vampire, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bella Forrest"},{"book_id":18813642,"title":"Bad Feminist","image_url":"https:\/\/images.gr-assets.com\/books\/1421292744m\/18813642.jpg","authors":"Roxane Gay"},{"book_id":18815695,"title":"The Pecan Man","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Cassie Dandridge Selleck"},{"book_id":18816603,"title":"Leaving Time","image_url":"https:\/\/images.gr-assets.com\/books\/1394487223m\/18816603.jpg","authors":"Jodi Picoult"},{"book_id":18819296,"title":"Hidden","image_url":"https:\/\/images.gr-assets.com\/books\/1384805680m\/18819296.jpg","authors":"Catherine McKenzie"},{"book_id":18867685,"title":"The Atlantis Plague (The Origin Mystery, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"A.G. Riddle"},{"book_id":18869967,"title":"Jamaica Inn","image_url":"https:\/\/images.gr-assets.com\/books\/1386605082m\/18869967.jpg","authors":"Daphne du Maurier"},{"book_id":18869970,"title":"My Cousin Rachel","image_url":"https:\/\/images.gr-assets.com\/books\/1386609405m\/18869970.jpg","authors":"Daphne du Maurier"},{"book_id":18870159,"title":"Bad for You (Sea Breeze, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1390861093m\/18870159.jpg","authors":"Abbi Glines"},{"book_id":18879761,"title":"I Was Here","image_url":"https:\/\/images.gr-assets.com\/books\/1405960366m\/18879761.jpg","authors":"Gayle Forman"},{"book_id":18892134,"title":"The Son (Divergent, #0.3)","image_url":"https:\/\/images.gr-assets.com\/books\/1395049991m\/18892134.jpg","authors":"Veronica Roth"},{"book_id":18906484,"title":"The Husband's Secret Free Preview","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Liane Moriarty"},{"book_id":18943009,"title":"Rock Bottom (Tristan & Danika, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1385363364m\/18943009.jpg","authors":"R.K. Lilley"},{"book_id":18966322,"title":"Mitosis (The Reckoners, #1.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1385570447m\/18966322.jpg","authors":"Brandon Sanderson"},{"book_id":18966806,"title":"Morning Star (Red Rising, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1461354277m\/18966806.jpg","authors":"Pierce Brown"},{"book_id":18966819,"title":"Golden Son (Red Rising, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1394684475m\/18966819.jpg","authors":"Pierce Brown"},{"book_id":18982011,"title":"The Line (Witching Savannah, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1385507733m\/18982011.jpg","authors":"J.D. Horn"},{"book_id":19004663,"title":"Top Secret Twenty-One (Stephanie Plum, #21)","image_url":"https:\/\/images.gr-assets.com\/books\/1394500766m\/19004663.jpg","authors":"Janet Evanovich"},{"book_id":19030845,"title":"Batman: The Dark Knight Returns #1","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Frank Miller"},{"book_id":19090384,"title":"Clean Sweep (Innkeeper Chronicles, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1385939257m\/19090384.jpg","authors":"Ilona Andrews"},{"book_id":19095025,"title":"Play (Stage Dive, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1393202794m\/19095025.jpg","authors":"Kylie Scott"},{"book_id":19101283,"title":"The Son","image_url":"https:\/\/images.gr-assets.com\/books\/1390177620m\/19101283.jpg","authors":"Jo Nesb\u00f8, Charlotte Barslund"},{"book_id":19103097,"title":"The Magician's Land (The Magicians, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1455089828m\/19103097.jpg","authors":"Lev Grossman"},{"book_id":19138879,"title":"Attack on Titan: No Regrets, Volume 01","image_url":"https:\/\/images.gr-assets.com\/books\/1398033046m\/19138879.jpg","authors":"Hajime Isayama, Hikaru Suruga, Gan Sunaaku"},{"book_id":19156898,"title":"The Fourteenth Goldfish","image_url":"https:\/\/images.gr-assets.com\/books\/1386092727m\/19156898.jpg","authors":"Jennifer L. Holm, Tad Carpenter"},{"book_id":19161852,"title":"The Fifth Season (The Broken Earth, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1386803701m\/19161852.jpg","authors":"N.K. Jemisin"},{"book_id":19286623,"title":"Lead (Stage Dive, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1396467599m\/19286623.jpg","authors":"Kylie Scott"},{"book_id":19286669,"title":"The Silent Sister (Riley MacPherson, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1406526579m\/19286669.jpg","authors":"Diane Chamberlain"},{"book_id":19286674,"title":"Seventh Grave and No Body (Charley Davidson, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1394039455m\/19286674.jpg","authors":"Darynda Jones"},{"book_id":19288239,"title":"Colorless Tsukuru Tazaki and His Years of Pilgrimage","image_url":"https:\/\/images.gr-assets.com\/books\/1409000450m\/19288239.jpg","authors":"Haruki Murakami, Philip Gabriel"},{"book_id":19288321,"title":"Fool's Assassin (The Fitz and the Fool, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1393886110m\/19288321.jpg","authors":"Robin Hobb"},{"book_id":19346451,"title":"The Revenge of Seven (Lorien Legacies, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1398024854m\/19346451.jpg","authors":"Pittacus Lore"},{"book_id":19351043,"title":"Nimona","image_url":"https:\/\/images.gr-assets.com\/books\/1412626919m\/19351043.jpg","authors":"Noelle Stevenson"},{"book_id":19351490,"title":"Grimm's Fairy Tales","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jacob Grimm, Wilhelm Grimm, \u0645\u0646\u0649 \u0627\u0644\u062e\u0645\u064a\u0633\u064a"},{"book_id":19358975,"title":"Saga, Vol. 3 (Saga, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1486028973m\/19358975.jpg","authors":"Brian K. Vaughan, Fiona Staples"},{"book_id":19427193,"title":"I Too Had a Love Story","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ravinder Singh"},{"book_id":19486412,"title":"Big Little Lies","image_url":"https:\/\/images.gr-assets.com\/books\/1492239430m\/19486412.jpg","authors":"Liane Moriarty"},{"book_id":19486421,"title":"Skin Game (The Dresden Files, #15)","image_url":"https:\/\/images.gr-assets.com\/books\/1387236318m\/19486421.jpg","authors":"Jim Butcher"},{"book_id":19501672,"title":"Stay with Me (Wait for You, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1400524327m\/19501672.jpg","authors":"J. Lynn, Jennifer L. Armentrout"},{"book_id":19523454,"title":"Beautiful You","image_url":"https:\/\/images.gr-assets.com\/books\/1399667103m\/19523454.jpg","authors":"Chuck Palahniuk"},{"book_id":19536001,"title":"Sex Criminals, Vol. 1: One Weird Trick","image_url":"https:\/\/images.gr-assets.com\/books\/1396977214m\/19536001.jpg","authors":"Matt Fraction, Chip Zdarsky"},{"book_id":19547856,"title":"Simon vs. the Homo Sapiens Agenda","image_url":"https:\/\/images.gr-assets.com\/books\/1402915678m\/19547856.jpg","authors":"Becky Albertalli"},{"book_id":19549841,"title":"Seraphina (Seraphina, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1387577872m\/19549841.jpg","authors":"Rachel Hartman"},{"book_id":19561922,"title":"The Long Way Home (Chief Inspector Armand Gamache, #10)","image_url":"https:\/\/images.gr-assets.com\/books\/1396828238m\/19561922.jpg","authors":"Louise Penny"},{"book_id":19747756,"title":"House","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Frank E. Peretti, Ted Dekker"},{"book_id":20168816,"title":"Rogues","image_url":"https:\/\/images.gr-assets.com\/books\/1404616147m\/20168816.jpg","authors":"George R.R. Martin, Gardner R. Dozois, Joe Abercrombie, Gillian Flynn, Matthew Hughes, Joe R. Lansdale, Michael Swanwick, David Ball, Carrie Vaughn, Scott Lynch, Bradley Denton, Cherie Priest, Daniel Abraham, Paul Cornell, Steven Saylor, Garth Nix, Walter Jon Williams, Phyllis Eisenstein, Lisa Tuttle, Neil Gaiman, Connie Willis, Patrick Rothfuss"},{"book_id":20170296,"title":"Neil Patrick Harris: Choose Your Own Autobiography","image_url":"https:\/\/images.gr-assets.com\/books\/1400599072m\/20170296.jpg","authors":"Neil Patrick Harris, David Javerbaum, Antony Hare"},{"book_id":20170404,"title":"Station Eleven","image_url":"https:\/\/images.gr-assets.com\/books\/1451446835m\/20170404.jpg","authors":"Emily St. John Mandel"},{"book_id":20174424,"title":"City of Stairs (The Divine Cities, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1394545220m\/20174424.jpg","authors":"Robert Jackson Bennett"},{"book_id":20257122,"title":"Finding Me: A Decade of Darkness, a Life Reclaimed - A Memoir of the Cleveland Kidnappings","image_url":"https:\/\/images.gr-assets.com\/books\/1387770620m\/20257122.jpg","authors":"Michelle Knight, Michelle Burford"},{"book_id":20263040,"title":"Personal (Jack Reacher, #19)","image_url":"https:\/\/images.gr-assets.com\/books\/1468705564m\/20263040.jpg","authors":"Lee Child"},{"book_id":20299683,"title":"Rat Queens, Vol. 1: Sass & Sorcery","image_url":"https:\/\/images.gr-assets.com\/books\/1489284113m\/20299683.jpg","authors":"Kurtis J. Wiebe, Roc Upchurch"},{"book_id":20309175,"title":"My True Love Gave to Me: Twelve Holiday Stories","image_url":"https:\/\/images.gr-assets.com\/books\/1459353572m\/20309175.jpg","authors":"Stephanie Perkins, Holly Black, Ally Carter, Matt de la Pena, Gayle Forman, Jenny Han, David Levithan, Kelly Link, Myra McEntire, Rainbow Rowell, Laini Taylor, Kiersten White"},{"book_id":20312459,"title":"Descent","image_url":"https:\/\/images.gr-assets.com\/books\/1410170967m\/20312459.jpg","authors":"Tim Johnston"},{"book_id":20316309,"title":"\u0641\u064a \u0642\u0644\u0628\u064a \u0623\u0646\u062b\u0649 \u0639\u0628\u0631\u064a\u0629","image_url":"https:\/\/images.gr-assets.com\/books\/1387912700m\/20316309.jpg","authors":"\u062e\u0648\u0644\u0629 \u062d\u0645\u062f\u064a"},{"book_id":20317106,"title":"\u0647\u064a\u0628\u062a\u0627","image_url":"https:\/\/images.gr-assets.com\/books\/1403045796m\/20317106.jpg","authors":"\u0645\u062d\u0645\u062f \u0635\u0627\u062f\u0642"},{"book_id":20318201,"title":"Burn (Michael Bennett, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1399993770m\/20318201.jpg","authors":"James Patterson, Michael Ledwidge"},{"book_id":20329634,"title":"Lines of Departure (Frontlines, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Marko Kloos"},{"book_id":20342617,"title":"Just Mercy: A Story of Justice and Redemption","image_url":"https:\/\/images.gr-assets.com\/books\/1420795201m\/20342617.jpg","authors":"Bryan Stevenson"},{"book_id":20348781,"title":"Loving Mr. Daniels","image_url":"https:\/\/images.gr-assets.com\/books\/1392378701m\/20348781.jpg","authors":"Brittainy C. Cherry"},{"book_id":20423680,"title":"The Last Town (Wayward Pines, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1399508172m\/20423680.jpg","authors":"Blake Crouch"},{"book_id":20426917,"title":"The Witch With No Name (The Hollows, #13)","image_url":"https:\/\/images.gr-assets.com\/books\/1398700782m\/20426917.jpg","authors":"Kim Harrison"},{"book_id":20438825,"title":"Vanished (Callahan & McLane #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kendra Elliot"},{"book_id":20439328,"title":"How to Be Both","image_url":"https:\/\/images.gr-assets.com\/books\/1405890478m\/20439328.jpg","authors":"Ali Smith"},{"book_id":20443207,"title":"The Winner's Crime (The Winner's Trilogy, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1411741455m\/20443207.jpg","authors":"Marie Rutkoski"},{"book_id":20443235,"title":"The Winner's Kiss (The Winner's Trilogy, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1455809407m\/20443235.jpg","authors":"Marie Rutkoski"},{"book_id":20454076,"title":"Day 21 (The 100, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1403530593m\/20454076.jpg","authors":"Kass Morgan"},{"book_id":20454672,"title":"Mean Streak","image_url":"https:\/\/images.gr-assets.com\/books\/1399916694m\/20454672.jpg","authors":"Sandra Brown"},{"book_id":20499240,"title":"Foxglove Summer (Peter Grant, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1402338677m\/20499240.jpg","authors":"Ben Aaronovitch"},{"book_id":20505127,"title":"Daughter","image_url":"https:\/\/images.gr-assets.com\/books\/1403779092m\/20505127.jpg","authors":"Jane Shemilt"},{"book_id":20509356,"title":"Sand Omnibus (Sand, #1-5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Hugh Howey"},{"book_id":20510241,"title":"The Calling (Endgame, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1411272821m\/20510241.jpg","authors":"James Frey, Nils Johnson-Shelton"},{"book_id":20518872,"title":"The Three-Body Problem (Remembrance of Earth\u2019s Past, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1415428227m\/20518872.jpg","authors":"Liu Cixin, Ken Liu"},{"book_id":20525628,"title":"How to Build a Girl","image_url":"https:\/\/images.gr-assets.com\/books\/1410131752m\/20525628.jpg","authors":"Caitlin Moran"},{"book_id":20559676,"title":"Killing Sarai (In the Company of Killers, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1389883928m\/20559676.jpg","authors":"J.A. Redmerski"},{"book_id":20560137,"title":"An Ember in the Ashes (An Ember in the Ashes, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1417957944m\/20560137.jpg","authors":"Sabaa Tahir"},{"book_id":20575411,"title":"Lila (Gilead, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1393645345m\/20575411.jpg","authors":"Marilynne Robinson"},{"book_id":20575425,"title":"Wolf in White Van","image_url":"https:\/\/images.gr-assets.com\/books\/1393646533m\/20575425.jpg","authors":"John Darnielle"},{"book_id":20575434,"title":"Rain Reign","image_url":"https:\/\/images.gr-assets.com\/books\/1396393170m\/20575434.jpg","authors":"Ann M. Martin"},{"book_id":20575440,"title":"Deep Down Dark: The Untold Stories of 33 Men Buried in a Chilean Mine, and the Miracle That Set Them Free","image_url":"https:\/\/images.gr-assets.com\/books\/1398199578m\/20575440.jpg","authors":"H\u00e9ctor Tobar"},{"book_id":20575446,"title":"In Real Life","image_url":"https:\/\/images.gr-assets.com\/books\/1391127564m\/20575446.jpg","authors":"Cory Doctorow, Jen Wang"},{"book_id":20578940,"title":"The Iron Trial (Magisterium, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1396560808m\/20578940.jpg","authors":"Holly Black, Cassandra Clare"},{"book_id":20587777,"title":"Some Luck (Last Hundred Years: A Family Saga, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1413128987m\/20587777.jpg","authors":"Jane Smiley"},{"book_id":20588698,"title":"Not That Kind of Girl: A Young Woman Tells You What She's \"Learned\"","image_url":"https:\/\/images.gr-assets.com\/books\/1402816003m\/20588698.jpg","authors":"Lena Dunham, Joana Avillez"},{"book_id":20603820,"title":"The Will (Magdalene, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kristen Ashley"},{"book_id":20604826,"title":"Flash Boys: A Wall Street Revolt","image_url":"https:\/\/images.gr-assets.com\/books\/1404963230m\/20604826.jpg","authors":"Michael Lewis"},{"book_id":20613470,"title":"Heir of Fire (Throne of Glass, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1460846511m\/20613470.jpg","authors":"Sarah J. Maas"},{"book_id":20613761,"title":"Citizen: An American Lyric","image_url":"https:\/\/images.gr-assets.com\/books\/1420944502m\/20613761.jpg","authors":"Claudia Rankine"},{"book_id":20613920,"title":"Under Locke","image_url":"https:\/\/images.gr-assets.com\/books\/1390340678m\/20613920.jpg","authors":"Mariana Zapata"},{"book_id":20620995,"title":"Take Me with You","image_url":"https:\/\/images.gr-assets.com\/books\/1403110128m\/20620995.jpg","authors":"Catherine Ryan Hyde"},{"book_id":20639274,"title":"Archer's Voice","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mia Sheridan"},{"book_id":20646604,"title":"Night Owl (Night Owl, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"M. Pierce"},{"book_id":20662728,"title":"Clariel (Abhorsen, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1393877442m\/20662728.jpg","authors":"Garth Nix"},{"book_id":20663702,"title":"Smoke Gets in Your Eyes: And Other Lessons from the Crematory","image_url":"https:\/\/images.gr-assets.com\/books\/1416181987m\/20663702.jpg","authors":"Caitlin Doughty"},{"book_id":20685373,"title":"Without You, There Is No Us: My Time with the Sons of North Korea's Elite","image_url":"https:\/\/images.gr-assets.com\/books\/1405292426m\/20685373.jpg","authors":"Suki Kim"},{"book_id":20696006,"title":"Being Mortal: Medicine and What Matters in the End","image_url":"https:\/\/images.gr-assets.com\/books\/1408324949m\/20696006.jpg","authors":"Atul Gawande"},{"book_id":20697435,"title":"The Book of Strange New Things","image_url":"https:\/\/images.gr-assets.com\/books\/1394824754m\/20697435.jpg","authors":"Michel Faber"},{"book_id":20697471,"title":"Food: A Love Story","image_url":"https:\/\/images.gr-assets.com\/books\/1419183381m\/20697471.jpg","authors":"Jim Gaffigan"},{"book_id":20698530,"title":"P.S. I Still Love You (To All the Boys I've Loved Before, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1422881430m\/20698530.jpg","authors":"Jenny Han"},{"book_id":20701984,"title":"El Deafo","image_url":"https:\/\/images.gr-assets.com\/books\/1423770455m\/20701984.jpg","authors":"Cece Bell, David Lasky"},{"book_id":20705702,"title":"Burn for Me (Hidden Legacy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1396368355m\/20705702.jpg","authors":"Ilona Andrews"},{"book_id":20706269,"title":"Broken Monsters","image_url":"https:\/\/images.gr-assets.com\/books\/1394562848m\/20706269.jpg","authors":"Lauren Beukes"},{"book_id":20706284,"title":"Ancillary Sword (Imperial Radch, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1413464739m\/20706284.jpg","authors":"Ann Leckie"},{"book_id":20706316,"title":"Winter Street (Winter, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1394567347m\/20706316.jpg","authors":"Elin Hilderbrand"},{"book_id":20706317,"title":"The First Fifteen Lives of Harry August","image_url":"https:\/\/images.gr-assets.com\/books\/1407712314m\/20706317.jpg","authors":"Claire North"},{"book_id":20706320,"title":"A Grimm Warning (The Land of Stories, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1391709728m\/20706320.jpg","authors":"Chris Colfer, Brandon Dorman"},{"book_id":20707959,"title":"Gray Mountain","image_url":"https:\/\/images.gr-assets.com\/books\/1403704671m\/20707959.jpg","authors":"John Grisham"},{"book_id":20727654,"title":"The Paper Magician (The Paper Magician Trilogy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1405618531m\/20727654.jpg","authors":"Charlie N. Holmberg"},{"book_id":20758175,"title":"The Life We Bury","image_url":"https:\/\/images.gr-assets.com\/books\/1437077793m\/20758175.jpg","authors":"Allen Eskens"},{"book_id":20761374,"title":"Reasonable Doubt: Volume 1 (Reasonable Doubt, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1395319856m\/20761374.jpg","authors":"Whitney G."},{"book_id":20764879,"title":"A Gathering of Shadows (Shades of Magic, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1429627728m\/20764879.jpg","authors":"V.E. Schwab, Victoria Schwab"},{"book_id":20767918,"title":"The Escape (John Puller, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1404163742m\/20767918.jpg","authors":"David Baldacci"},{"book_id":20768868,"title":"Flesh and Blood (Kay Scarpetta, #22)","image_url":"https:\/\/images.gr-assets.com\/books\/1403704254m\/20768868.jpg","authors":"Patricia Cornwell"},{"book_id":20797535,"title":"A Better World (Brilliance Saga, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1394856007m\/20797535.jpg","authors":"Marcus Sakey"},{"book_id":20800147,"title":"Hope to Die (Alex Cross, #22)","image_url":"https:\/\/images.gr-assets.com\/books\/1414130505m\/20800147.jpg","authors":"James Patterson"},{"book_id":20801166,"title":"A Little Something Different","image_url":"https:\/\/images.gr-assets.com\/books\/1396394307m\/20801166.jpg","authors":"Sandy Hall"},{"book_id":20803953,"title":"Bully (Fall Away, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1392309572m\/20803953.jpg","authors":"Penelope Douglas"},{"book_id":20803962,"title":"Until You (Fall Away, #1.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1392309696m\/20803962.jpg","authors":"Penelope Douglas, Nelson Hobbs"},{"book_id":20819682,"title":"Adultery","image_url":"https:\/\/images.gr-assets.com\/books\/1406247571m\/20819682.jpg","authors":"Paulo Coelho"},{"book_id":20819685,"title":"The Bone Clocks","image_url":"https:\/\/images.gr-assets.com\/books\/1398205538m\/20819685.jpg","authors":"David Mitchell"},{"book_id":20820994,"title":"I'll Give You the Sun","image_url":"https:\/\/images.gr-assets.com\/books\/1496659336m\/20820994.jpg","authors":"Jandy Nelson"},{"book_id":20820995,"title":"Deadline (Virgil Flowers, #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1396837852m\/20820995.jpg","authors":"John Sandford"},{"book_id":20821043,"title":"The Secret Place (Dublin Murder Squad, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1396671263m\/20821043.jpg","authors":"Tana French"},{"book_id":20821087,"title":"The Paying Guests","image_url":"https:\/\/images.gr-assets.com\/books\/1396671788m\/20821087.jpg","authors":"Sarah Waters"},{"book_id":20821111,"title":"The Young Elites (The Young Elites, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1407318399m\/20821111.jpg","authors":"Marie Lu"},{"book_id":20821159,"title":"The Peripheral","image_url":"https:\/\/images.gr-assets.com\/books\/1402651292m\/20821159.jpg","authors":"William Gibson"},{"book_id":20821249,"title":"Festive in Death (In Death, #39)","image_url":"https:\/\/images.gr-assets.com\/books\/1458263204m\/20821249.jpg","authors":"J.D. Robb"},{"book_id":20821284,"title":"Brown Girl Dreaming","image_url":"https:\/\/images.gr-assets.com\/books\/1424308405m\/20821284.jpg","authors":"Jacqueline Woodson"},{"book_id":20821299,"title":"The Book with No Pictures","image_url":"https:\/\/images.gr-assets.com\/books\/1400873472m\/20821299.jpg","authors":"B.J. Novak"},{"book_id":20821376,"title":"Belzhar","image_url":"https:\/\/images.gr-assets.com\/books\/1395326170m\/20821376.jpg","authors":"Meg Wolitzer"},{"book_id":20821614,"title":"You (You, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1411958102m\/20821614.jpg","authors":"Caroline Kepnes"},{"book_id":20829994,"title":"Percy Jackson's Greek Gods (A Percy Jackson and the Olympians Guide)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rick Riordan, John Rocco"},{"book_id":20871704,"title":"Before I Go","image_url":"https:\/\/images.gr-assets.com\/books\/1397917357m\/20871704.jpg","authors":"Colleen Oakley"},{"book_id":20874139,"title":"I Am Livia","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Phyllis T. Smith"},{"book_id":20878809,"title":"The Julian Chapter (Wonder Story)","image_url":"https:\/\/images.gr-assets.com\/books\/1399502333m\/20878809.jpg","authors":"R.J. Palacio"},{"book_id":20881071,"title":"The Burning Room (Harry Bosch, #19; Harry Bosch Universe, #24)","image_url":"https:\/\/images.gr-assets.com\/books\/1392997140m\/20881071.jpg","authors":"Michael Connelly"},{"book_id":20883847,"title":"The Autumn Republic (Powder Mage, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1393261950m\/20883847.jpg","authors":"Brian McClellan"},{"book_id":20886354,"title":"Skin Deep (Legion, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1404932663m\/20886354.jpg","authors":"Brandon Sanderson, Jon Foster"},{"book_id":20890479,"title":"The Love Song of Miss Queenie Hennessy (Harold Fry, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1403202599m\/20890479.jpg","authors":"Rachel Joyce"},{"book_id":20893314,"title":"A Brief History of Seven Killings","image_url":"https:\/\/images.gr-assets.com\/books\/1399045083m\/20893314.jpg","authors":"Marlon James"},{"book_id":20894857,"title":"Sleep Tight","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rachel Abbott"},{"book_id":20897517,"title":"In the Kingdom of Ice: The Grand and Terrible Polar Voyage of the USS Jeannette","image_url":"https:\/\/images.gr-assets.com\/books\/1395935993m\/20897517.jpg","authors":"Hampton Sides"},{"book_id":20898019,"title":"Ms. Marvel, Vol. 1: No Normal","image_url":"https:\/\/images.gr-assets.com\/books\/1413031883m\/20898019.jpg","authors":"G. Willow Wilson, Adrian Alphona"},{"book_id":20910157,"title":"Yes Please","image_url":"https:\/\/images.gr-assets.com\/books\/1402815435m\/20910157.jpg","authors":"Amy Poehler"},{"book_id":20912424,"title":"The War that Saved My Life (The War That Saved My Life #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1453342842m\/20912424.jpg","authors":"Kimberly Brubaker Bradley, \u0645\u0631\u0636\u06cc\u0647 \u0648\u0631\u0634\u0648\u0633\u0627\u0632"},{"book_id":20926278,"title":"Revival","image_url":"https:\/\/images.gr-assets.com\/books\/1394651975m\/20926278.jpg","authors":"Stephen King"},{"book_id":20958632,"title":"The Darkest Part of the Forest","image_url":"https:\/\/images.gr-assets.com\/books\/1397755014m\/20958632.jpg","authors":"Holly Black"},{"book_id":20980373,"title":"Reasonable Doubt: Volume 2 (Reasonable Doubt, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1397189810m\/20980373.jpg","authors":"Whitney G."},{"book_id":20980959,"title":"Blue Labyrinth (Pendergast, #14)","image_url":"https:\/\/images.gr-assets.com\/books\/1408116686m\/20980959.jpg","authors":"Douglas Preston, Lincoln Child"},{"book_id":20980987,"title":"The Art of Asking; or, How I Learned to Stop Worrying and Let People Help","image_url":"https:\/\/images.gr-assets.com\/books\/1408547261m\/20980987.jpg","authors":"Amanda Palmer"},{"book_id":20983362,"title":"Passenger (Passenger, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1446749751m\/20983362.jpg","authors":"Alexandra Bracken"},{"book_id":21064599,"title":"Shopaholic to the Stars (Shopaholic, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1398905552m\/21064599.jpg","authors":"Sophie Kinsella"},{"book_id":21086818,"title":"Do No Harm: Stories of Life, Death and Brain Surgery","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Henry Marsh"},{"book_id":21094993,"title":"The Girl Who Saved the King of Sweden","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Jonas Jonasson, Rachel Willson-Broyles"},{"book_id":21104828,"title":"The Lake House","image_url":"https:\/\/images.gr-assets.com\/books\/1455089249m\/21104828.jpg","authors":"Kate Morton"},{"book_id":21219083,"title":"The One That Got Away","image_url":"https:\/\/images.gr-assets.com\/books\/1421800005m\/21219083.jpg","authors":"Simon Wood"},{"book_id":21393526,"title":"Magonia (Magonia, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1413479866m\/21393526.jpg","authors":"Maria Dahvana Headley"},{"book_id":21394850,"title":"\u0623\u0642\u0648\u0645 \u0642\u064a\u0644\u0627","image_url":"https:\/\/images.gr-assets.com\/books\/1394163349m\/21394850.jpg","authors":"\u0633\u0644\u0637\u0627\u0646 \u0645\u0648\u0633\u0649 \u0627\u0644\u0645\u0648\u0633\u0649"},{"book_id":21400356,"title":"Debt Inheritance (Indebted, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1395175825m\/21400356.jpg","authors":"Pepper Winters"},{"book_id":21411058,"title":"Bad Romeo (Starcrossed, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1413547825m\/21411058.jpg","authors":"Leisa Rayven"},{"book_id":21411887,"title":"You Were Mine (Rosemary Beach, #9)","image_url":"https:\/\/images.gr-assets.com\/books\/1402067293m\/21411887.jpg","authors":"Abbi Glines"},{"book_id":21412202,"title":"As You Wish: Inconceivable Tales from the Making of The Princess Bride","image_url":"https:\/\/images.gr-assets.com\/books\/1418103917m\/21412202.jpg","authors":"Cary Elwes, Joe Layden, Various, Rob Reiner"},{"book_id":21412360,"title":"Nora Webster","image_url":"https:\/\/images.gr-assets.com\/books\/1451442745m\/21412360.jpg","authors":"Colm T\u00f3ib\u00edn"},{"book_id":21412400,"title":"The First Bad Man","image_url":"https:\/\/images.gr-assets.com\/books\/1421037741m\/21412400.jpg","authors":"Miranda July"},{"book_id":21412673,"title":"Prince Lestat (The Vampire Chronicles, #11)","image_url":"https:\/\/images.gr-assets.com\/books\/1394635385m\/21412673.jpg","authors":"Anne Rice"},{"book_id":21413662,"title":"What If?: Serious Scientific Answers to Absurd Hypothetical Questions","image_url":"https:\/\/images.gr-assets.com\/books\/1451351509m\/21413662.jpg","authors":"Randall Munroe"},{"book_id":21414439,"title":"Truthwitch (The Witchlands, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1428675822m\/21414439.jpg","authors":"Susan Dennard"},{"book_id":21416690,"title":"The Invisible Library (The Invisible Library, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1416823893m\/21416690.jpg","authors":"Genevieve Cogman"},{"book_id":21418013,"title":"Lock In (Lock In, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1438701397m\/21418013.jpg","authors":"John Scalzi"},{"book_id":21418017,"title":"The Space Between (Outlander, #7.5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Diana Gabaldon"},{"book_id":21420473,"title":"The Fixed Trilogy (Fixed, #1-3)","image_url":"https:\/\/images.gr-assets.com\/books\/1394517753m\/21420473.jpg","authors":"Laurelin Paige"},{"book_id":21423525,"title":"Us","image_url":"https:\/\/images.gr-assets.com\/books\/1406116779m\/21423525.jpg","authors":"David Nicholls"},{"book_id":21433251,"title":"Manga Classics: Les Mis\u00e9rables","image_url":"https:\/\/images.gr-assets.com\/books\/1421108133m\/21433251.jpg","authors":"Stacy King, SunNeko Lee, Crystal S. Chan, Victor Hugo"},{"book_id":21437200,"title":"Mr. Kiss and Tell (Veronica Mars, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1405566768m\/21437200.jpg","authors":"Rob Thomas, Jennifer Graham"},{"book_id":21456940,"title":"1919","image_url":"https:\/\/images.gr-assets.com\/books\/1396549800m\/21456940.jpg","authors":"\u0623\u062d\u0645\u062f \u0645\u0631\u0627\u062f"},{"book_id":21457243,"title":"Vision in Silver (The Others, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1404354570m\/21457243.jpg","authors":"Anne Bishop"},{"book_id":21473305,"title":"Dominic (Slater Brothers, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1395291295m\/21473305.jpg","authors":"L.A. Casey"},{"book_id":21480734,"title":"Dataclysm: Who We Are (When We Think No One's Looking)","image_url":"https:\/\/images.gr-assets.com\/books\/1407763834m\/21480734.jpg","authors":"Christian Rudder"},{"book_id":21483760,"title":"Spell or High Water (Magic 2.0, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1395612093m\/21483760.jpg","authors":"Scott Meyer"},{"book_id":21489683,"title":"Die Again (Rizzoli & Isles, #11)","image_url":"https:\/\/images.gr-assets.com\/books\/1395144977m\/21489683.jpg","authors":"Tess Gerritsen"},{"book_id":21518647,"title":"Axel (Corps Security, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1395241107m\/21518647.jpg","authors":"Harper Sloan"},{"book_id":21518679,"title":"Cage (Corps Security, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1395241820m\/21518679.jpg","authors":"Harper Sloan"},{"book_id":21530229,"title":"The Job (Fox and O'Hare, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1410763754m\/21530229.jpg","authors":"Janet Evanovich, Lee Goldberg"},{"book_id":21531503,"title":"What I Know for Sure","image_url":"https:\/\/images.gr-assets.com\/books\/1400988917m\/21531503.jpg","authors":"Oprah Winfrey"},{"book_id":21535019,"title":"The Long Haul (Diary of a Wimpy Kid, #9)","image_url":"https:\/\/images.gr-assets.com\/books\/1408500992m\/21535019.jpg","authors":"Jeff Kinney"},{"book_id":21535271,"title":"The Slow Regard of Silent Things (The Kingkiller Chronicle #2.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1398466695m\/21535271.jpg","authors":"Patrick Rothfuss, Nate Taylor"},{"book_id":21535784,"title":"The Cinderella Murder (Under Suspicion, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1403544444m\/21535784.jpg","authors":"Mary Higgins Clark, Alafair Burke"},{"book_id":21569527,"title":"The Heart of Betrayal (The Remnant Chronicles, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1414932049m\/21569527.jpg","authors":"Mary E. Pearson"},{"book_id":21795430,"title":"Promised (One Night, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1398092254m\/21795430.jpg","authors":"Jodi Ellen Malpas"},{"book_id":21843117,"title":"Scoring Wilder","image_url":"https:\/\/images.gr-assets.com\/books\/1401806540m\/21843117.jpg","authors":"R.S. Grey"},{"book_id":21844019,"title":"The Rosie Effect (Don Tillman, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1426407990m\/21844019.jpg","authors":"Graeme Simsion"},{"book_id":21849362,"title":"The Shadows (Black Dagger Brotherhood, #13)","image_url":"https:\/\/images.gr-assets.com\/books\/1404479585m\/21849362.jpg","authors":"J.R. Ward"},{"book_id":21853621,"title":"The Nightingale","image_url":"https:\/\/images.gr-assets.com\/books\/1451446316m\/21853621.jpg","authors":"Kristin Hannah"},{"book_id":21853628,"title":"Every Fifteen Minutes","image_url":"https:\/\/images.gr-assets.com\/books\/1428638866m\/21853628.jpg","authors":"Lisa Scottoline"},{"book_id":21853633,"title":"First Frost (Waverley Family, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1410962794m\/21853633.jpg","authors":"Sarah Addison Allen"},{"book_id":21853645,"title":"Mightier Than the Sword (The Clifton Chronicles, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1407772906m\/21853645.jpg","authors":"Jeffrey Archer"},{"book_id":21856367,"title":"The Innovators: How a Group of Hackers, Geniuses and Geeks Created the Digital Revolution","image_url":"https:\/\/images.gr-assets.com\/books\/1410191571m\/21856367.jpg","authors":"Walter Isaacson"},{"book_id":21857294,"title":"Reasonable Doubt: Volume 3 (Reasonable Doubt, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1407412246m\/21857294.jpg","authors":"Whitney G."},{"book_id":21873331,"title":"If I Stay Collection (If I Stay, #1-2)","image_url":"https:\/\/images.gr-assets.com\/books\/1441837844m\/21873331.jpg","authors":"Gayle Forman"},{"book_id":21874813,"title":"As Chimney Sweepers Come to Dust (Flavia de Luce, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1406214651m\/21874813.jpg","authors":"Alan Bradley"},{"book_id":21913812,"title":"This Changes Everything: Capitalism vs. The Climate","image_url":"https:\/\/images.gr-assets.com\/books\/1418103804m\/21913812.jpg","authors":"Naomi Klein"},{"book_id":21936809,"title":"The Kind Worth Killing","image_url":"https:\/\/images.gr-assets.com\/books\/1417981750m\/21936809.jpg","authors":"Peter Swanson"},{"book_id":21943246,"title":"Black Ice","image_url":"https:\/\/images.gr-assets.com\/books\/1414369023m\/21943246.jpg","authors":"Becca Fitzpatrick"},{"book_id":21956060,"title":"Monster in His Eyes (Monster in His Eyes, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1398071281m\/21956060.jpg","authors":"J.M. Darhower"},{"book_id":21965107,"title":"The Children Act","image_url":"https:\/\/images.gr-assets.com\/books\/1405290619m\/21965107.jpg","authors":"Ian McEwan"},{"book_id":21969786,"title":"More Than This","image_url":"https:\/\/images.gr-assets.com\/books\/1398164413m\/21969786.jpg","authors":"Patrick Ness"},{"book_id":21981841,"title":"Corrupt (Devil's Night, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1398947518m\/21981841.jpg","authors":"Penelope Douglas, Jeremy York, Tatiana Sokolov"},{"book_id":22009741,"title":"The Woman Who Stole My Life","image_url":"https:\/\/images.gr-assets.com\/books\/1428674566m\/22009741.jpg","authors":"Marian Keyes"},{"book_id":22020052,"title":"It Ain't Me, Babe (Hades Hangmen, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Tillie Cole"},{"book_id":22021611,"title":"Just One Night (Just One Day, #2.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1398780998m\/22021611.jpg","authors":"Gayle Forman"},{"book_id":22027055,"title":"One Lavender Ribbon","image_url":"https:\/\/images.gr-assets.com\/books\/1401681451m\/22027055.jpg","authors":"Heather Burch"},{"book_id":22027459,"title":"The Atlantis World (The Origin Mystery, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"A.G. Riddle"},{"book_id":22040598,"title":"The Sculptor","image_url":"https:\/\/images.gr-assets.com\/books\/1418629570m\/22040598.jpg","authors":"Scott McCloud"},{"book_id":22054340,"title":"The Queen (The Selection, #0.4)","image_url":"https:\/\/images.gr-assets.com\/books\/1399581012m\/22054340.jpg","authors":"Kiera Cass"},{"book_id":22055262,"title":"A Darker Shade of Magic (Shades of Magic, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1400322851m\/22055262.jpg","authors":"V.E. Schwab, Victoria Schwab"},{"book_id":22055280,"title":"The Providence of Fire (Chronicle of the Unhewn Throne, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1405301050m\/22055280.jpg","authors":"Brian Staveley"},{"book_id":22055283,"title":"Half the World (Shattered Sea, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1402314017m\/22055283.jpg","authors":"Joe Abercrombie"},{"book_id":22062202,"title":"Marked in Flesh (The Others, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1438874868m\/22062202.jpg","authors":"Anne Bishop"},{"book_id":22131009,"title":"Where There's Smoke","image_url":"https:\/\/images.gr-assets.com\/books\/1401375667m\/22131009.jpg","authors":"Jodi Picoult"},{"book_id":22151696,"title":"Lullabies","image_url":"https:\/\/images.gr-assets.com\/books\/1404192714m\/22151696.jpg","authors":"Lang Leav"},{"book_id":22237161,"title":"The Sellout","image_url":"https:\/\/images.gr-assets.com\/books\/1403430899m\/22237161.jpg","authors":"Paul Beatty"},{"book_id":22296542,"title":"Addicted to You (Addicted, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1400803526m\/22296542.jpg","authors":"Krista Ritchie, Becca Ritchie"},{"book_id":22299763,"title":"Crooked Kingdom (Six of Crows, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1456172607m\/22299763.jpg","authors":"Leigh Bardugo"},{"book_id":22318578,"title":"The Life-Changing Magic of Tidying Up: The Japanese Art of Decluttering and Organizing","image_url":"https:\/\/images.gr-assets.com\/books\/1418767178m\/22318578.jpg","authors":"Marie Kond\u014d, Cathy Hirano"},{"book_id":22319275,"title":"Yellow Crocus","image_url":"https:\/\/images.gr-assets.com\/books\/1406315601m\/22319275.jpg","authors":"Laila Ibrahim"},{"book_id":22341276,"title":"The Glass Magician (The Paper Magician Trilogy, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1410466975m\/22341276.jpg","authors":"Charlie N. Holmberg"},{"book_id":22367526,"title":"My Sunshine Away","image_url":"https:\/\/images.gr-assets.com\/books\/1412528921m\/22367526.jpg","authors":"M.O. Walsh"},{"book_id":22381326,"title":"Half a War (Shattered Sea, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1429885218m\/22381326.jpg","authors":"Joe Abercrombie"},{"book_id":22381892,"title":"Killing Patton: The Strange Death of World War II's Most Audacious General","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bill O'Reilly, Martin Dugard"},{"book_id":22402972,"title":"Fish in a Tree","image_url":"https:\/\/images.gr-assets.com\/books\/1403181554m\/22402972.jpg","authors":"Lynda Mullaly Hunt"},{"book_id":22428828,"title":"Welcome to Shadowhunter Academy (Tales from the Shadowhunter Academy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1423801226m\/22428828.jpg","authors":"Cassandra Clare, Sarah Rees Brennan"},{"book_id":22431039,"title":"Beautiful Secret (Beautiful Bastard, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1416624825m\/22431039.jpg","authors":"Christina Lauren"},{"book_id":22443261,"title":"The Rithmatist (The Rithmatist, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Brandon Sanderson"},{"book_id":22450859,"title":"The Boston Girl","image_url":"https:\/\/images.gr-assets.com\/books\/1418103945m\/22450859.jpg","authors":"Anita Diamant"},{"book_id":22453035,"title":"Finders Keepers (Bill Hodges Trilogy, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1468705421m\/22453035.jpg","authors":"Stephen King"},{"book_id":22454958,"title":"Hardline (Hacker, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1402463128m\/22454958.jpg","authors":"Meredith Wild"},{"book_id":22457201,"title":"Hardpressed (Hacker, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1402511724m\/22457201.jpg","authors":"Meredith Wild"},{"book_id":22465597,"title":"Vanishing Girls","image_url":"https:\/\/images.gr-assets.com\/books\/1414618400m\/22465597.jpg","authors":"Lauren Oliver"},{"book_id":22471294,"title":"Black Lies","image_url":"https:\/\/images.gr-assets.com\/books\/1407450110m\/22471294.jpg","authors":"Alessandra Torre"},{"book_id":22474626,"title":"Hard Limit (Hacker, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1414594976m\/22474626.jpg","authors":"Meredith Wild"},{"book_id":22489107,"title":"Fairest (The Lunar Chronicles, #3.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1460846345m\/22489107.jpg","authors":"Marissa Meyer"},{"book_id":22501028,"title":"A Spool of Blue Thread","image_url":"https:\/\/images.gr-assets.com\/books\/1451435883m\/22501028.jpg","authors":"Anne Tyler"},{"book_id":22504701,"title":"Roller Girl","image_url":"https:\/\/images.gr-assets.com\/books\/1447914095m\/22504701.jpg","authors":"Victoria Jamieson"},{"book_id":22510983,"title":"Girl Online (Girl Online, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1410112710m\/22510983.jpg","authors":"Zoe Sugg, Siobhan Curham"},{"book_id":22522202,"title":"Until Friday Night (The Field Party, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1429191171m\/22522202.jpg","authors":"Abbi Glines"},{"book_id":22522805,"title":"The Buried Giant","image_url":"https:\/\/images.gr-assets.com\/books\/1451444392m\/22522805.jpg","authors":"Kazuo Ishiguro"},{"book_id":22522808,"title":"Trigger Warning: Short Fictions and Disturbances","image_url":"https:\/\/images.gr-assets.com\/books\/1415036119m\/22522808.jpg","authors":"Neil Gaiman"},{"book_id":22535533,"title":"Moriarty (Sherlock Holmes #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1404412525m\/22535533.jpg","authors":"Anthony Horowitz"},{"book_id":22540125,"title":"After We Collided (After, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1416788471m\/22540125.jpg","authors":"Anna Todd"},{"book_id":22543496,"title":"Elon Musk: Inventing the Future","image_url":"https:\/\/images.gr-assets.com\/books\/1404411386m\/22543496.jpg","authors":"Ashlee Vance"},{"book_id":22544024,"title":"Secrets of a Charmed Life","image_url":"https:\/\/images.gr-assets.com\/books\/1403809486m\/22544024.jpg","authors":"Susan Meissner"},{"book_id":22544764,"title":"Uprooted","image_url":"https:\/\/images.gr-assets.com\/books\/1480121122m\/22544764.jpg","authors":"Naomi Novik"},{"book_id":22551730,"title":"Dead Wake: The Last Crossing of the Lusitania","image_url":"https:\/\/images.gr-assets.com\/books\/1408923747m\/22551730.jpg","authors":"Erik Larson"},{"book_id":22551743,"title":"The Truth According to Us","image_url":"https:\/\/images.gr-assets.com\/books\/1465284604m\/22551743.jpg","authors":"Annie Barrows"},{"book_id":22551809,"title":"The Road to Character","image_url":"https:\/\/images.gr-assets.com\/books\/1422216361m\/22551809.jpg","authors":"David Brooks"},{"book_id":22554204,"title":"Lumberjanes, Vol. 1: Beware the Kitten Holy","image_url":"https:\/\/images.gr-assets.com\/books\/1435843806m\/22554204.jpg","authors":"Noelle Stevenson, Grace Ellis, Shannon Waters, Shannon Watters, Brooke A. Allen, Faith Hicks, Kat Leyh, Brooke Allen, Carolyn Nowak, Various, Carey Pietsch"},{"book_id":22557272,"title":"The Girl on the Train","image_url":"https:\/\/images.gr-assets.com\/books\/1490903702m\/22557272.jpg","authors":"Paula Hawkins"},{"book_id":22557520,"title":"After (After, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1438077259m\/22557520.jpg","authors":"Anna Todd"},{"book_id":22571275,"title":"All Fall Down (Embassy Row, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1411070285m\/22571275.jpg","authors":"Ally Carter"},{"book_id":22571540,"title":"The Stranger","image_url":"https:\/\/images.gr-assets.com\/books\/1408564426m\/22571540.jpg","authors":"Harlan Coben"},{"book_id":22571552,"title":"So You've Been Publicly Shamed","image_url":"https:\/\/images.gr-assets.com\/books\/1413749614m\/22571552.jpg","authors":"Jon Ronson"},{"book_id":22571612,"title":"Crash & Burn (Tessa Leoni, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1403630851m\/22571612.jpg","authors":"Lisa Gardner"},{"book_id":22571696,"title":"Obsession in Death (In Death, #40)","image_url":"https:\/\/images.gr-assets.com\/books\/1406509523m\/22571696.jpg","authors":"J.D. Robb"},{"book_id":22571699,"title":"Dead Heat (Alpha & Omega #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1406232150m\/22571699.jpg","authors":"Patricia Briggs"},{"book_id":22600903,"title":"Where I Belong (Alabama Summer, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1404019520m\/22600903.jpg","authors":"J. Daniels"},{"book_id":22608582,"title":"13 Hours: The Inside Account of What Really Happened In Benghazi","image_url":"https:\/\/images.gr-assets.com\/books\/1411493281m\/22608582.jpg","authors":"Mitchell Zuckoff"},{"book_id":22609080,"title":"After We Fell (After, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1420938115m\/22609080.jpg","authors":"Anna Todd"},{"book_id":22609310,"title":"Confess","image_url":"https:\/\/images.gr-assets.com\/books\/1412280173m\/22609310.jpg","authors":"Colleen Hoover"},{"book_id":22609317,"title":"Luckiest Girl Alive","image_url":"https:\/\/images.gr-assets.com\/books\/1425975301m\/22609317.jpg","authors":"Jessica Knoll"},{"book_id":22609391,"title":"The Wright Brothers","image_url":"https:\/\/images.gr-assets.com\/books\/1430942575m\/22609391.jpg","authors":"David McCullough"},{"book_id":22609522,"title":"Red Notice: A True Story of High Finance, Murder, and One Man\u2019s Fight for Justice","image_url":"https:\/\/images.gr-assets.com\/books\/1422848658m\/22609522.jpg","authors":"Bill Browder"},{"book_id":22611920,"title":"The Hook Up (Game On, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1407891923m\/22611920.jpg","authors":"Kristen Callihan"},{"book_id":22635858,"title":"The Bookseller","image_url":"https:\/\/images.gr-assets.com\/books\/1421854932m\/22635858.jpg","authors":"Cynthia Swanson"},{"book_id":22642472,"title":"Stone Mattress: Nine Tales","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Margaret Atwood"},{"book_id":22669832,"title":"Bright Side (Bright Side, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1404654413m\/22669832.jpg","authors":"Kim Holden"},{"book_id":22674105,"title":"China Rich Girlfriend (Crazy Rich Asians #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1419179404m\/22674105.jpg","authors":"Kevin Kwan"},{"book_id":22674493,"title":"NYPD Red 3 (NYPD Red, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1423508688m\/22674493.jpg","authors":"James Patterson, Marshall Karp"},{"book_id":22693182,"title":"Where They Found Her","image_url":"https:\/\/images.gr-assets.com\/books\/1406044898m\/22693182.jpg","authors":"Kimberly McCreight"},{"book_id":22693211,"title":"Girl in a Band","image_url":"https:\/\/images.gr-assets.com\/books\/1412840109m\/22693211.jpg","authors":"Kim Gordon"},{"book_id":22693222,"title":"The Residence: Inside the Private World of the White House","image_url":"https:\/\/images.gr-assets.com\/books\/1406045992m\/22693222.jpg","authors":"Kate Andersen Brower"},{"book_id":22693231,"title":"The Bone Tree","image_url":"https:\/\/images.gr-assets.com\/books\/1421259645m\/22693231.jpg","authors":"Greg Iles"},{"book_id":22698568,"title":"The Invasion of the Tearling (The Queen of the Tearling, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1461864829m\/22698568.jpg","authors":"Erika Johansen"},{"book_id":22716194,"title":"Inside the O'Briens","image_url":"https:\/\/images.gr-assets.com\/books\/1423486279m\/22716194.jpg","authors":"Lisa Genova"},{"book_id":22716447,"title":"Why Not Me?","image_url":"https:\/\/images.gr-assets.com\/books\/1442548684m\/22716447.jpg","authors":"Mindy Kaling"},{"book_id":22717015,"title":"Beautiful Redemption (The Maddox Brothers, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1418155511m\/22717015.jpg","authors":"Jamie McGuire"},{"book_id":22725443,"title":"Hausfrau","image_url":"https:\/\/images.gr-assets.com\/books\/1419180448m\/22725443.jpg","authors":"Jill Alexander Essbaum"},{"book_id":22733729,"title":"The Long Way to a Small, Angry Planet (Wayfarers, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1405532474m\/22733729.jpg","authors":"Becky Chambers"},{"book_id":22738563,"title":"We Should All Be Feminists","image_url":"https:\/\/images.gr-assets.com\/books\/1430821222m\/22738563.jpg","authors":"Chimamanda Ngozi Adichie"},{"book_id":22744701,"title":"My Sister's Grave (Tracy Crosswhite #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert Dugoni"},{"book_id":22749539,"title":"Echo","image_url":"https:\/\/images.gr-assets.com\/books\/1460587774m\/22749539.jpg","authors":"Pam Mu\u00f1oz Ryan"},{"book_id":22749750,"title":"The Turner House","image_url":"https:\/\/images.gr-assets.com\/books\/1408469614m\/22749750.jpg","authors":"Angela Flournoy"},{"book_id":22749994,"title":"Funny Girl","image_url":"https:\/\/images.gr-assets.com\/books\/1415127744m\/22749994.jpg","authors":"Nick Hornby"},{"book_id":22816087,"title":"Seveneves","image_url":"https:\/\/images.gr-assets.com\/books\/1449142000m\/22816087.jpg","authors":"Neal Stephenson"},{"book_id":22822858,"title":"A Little Life","image_url":"https:\/\/images.gr-assets.com\/books\/1446469353m\/22822858.jpg","authors":"Hanya Yanagihara"},{"book_id":22836957,"title":"The Revenant","image_url":"https:\/\/images.gr-assets.com\/books\/1409498796m\/22836957.jpg","authors":"Michael Punke"},{"book_id":22840421,"title":"My Lady Jane (The Lady Janies, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1444923765m\/22840421.jpg","authors":"Cynthia Hand, Brodi Ashton, Jodi Meadows"},{"book_id":22843341,"title":"Stepbrother Dearest","image_url":"https:\/\/images.gr-assets.com\/books\/1407407844m\/22843341.jpg","authors":"Penelope Ward"},{"book_id":22857396,"title":"Sweet Addiction (Sweet Addiction, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1407086989m\/22857396.jpg","authors":"J. Daniels"},{"book_id":22874559,"title":"Half Girlfriend","image_url":"https:\/\/images.gr-assets.com\/books\/1407223058m\/22874559.jpg","authors":"Chetan Bhagat"},{"book_id":22875451,"title":"The Royal We","image_url":"https:\/\/images.gr-assets.com\/books\/1421107274m\/22875451.jpg","authors":"Heather Cocks, Jessica Morgan"},{"book_id":22886113,"title":"A Work in Progress","image_url":"https:\/\/images.gr-assets.com\/books\/1426466460m\/22886113.jpg","authors":"Connor Franta"},{"book_id":22886612,"title":"Nemesis Games (The Expanse, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1407524221m\/22886612.jpg","authors":"James S.A. Corey"},{"book_id":22886868,"title":"The Shepherd's Crown (Discworld, #41; Tiffany Aching, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1433600285m\/22886868.jpg","authors":"Terry Pratchett"},{"book_id":22889767,"title":"Better Than Before: Mastering the Habits of Our Everyday Lives","image_url":"https:\/\/images.gr-assets.com\/books\/1415588203m\/22889767.jpg","authors":"Gretchen Rubin"},{"book_id":22892122,"title":"Manwhore (Manwhore, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1421552037m\/22892122.jpg","authors":"Katy Evans"},{"book_id":22895264,"title":"Wicked (A Wicked Saga, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1410783827m\/22895264.jpg","authors":"Jennifer L. Armentrout"},{"book_id":22910900,"title":"The Rest of Us Just Live Here","image_url":"https:\/\/images.gr-assets.com\/books\/1429800081m\/22910900.jpg","authors":"Patrick Ness"},{"book_id":22914448,"title":"The Dead Key","image_url":"https:\/\/images.gr-assets.com\/books\/1421800352m\/22914448.jpg","authors":"D.M. Pulley"},{"book_id":22915460,"title":"The Glassblower","image_url":"https:\/\/images.gr-assets.com\/books\/1408013754m\/22915460.jpg","authors":"Petra Durst-Benning, Samuel Willcocks"},{"book_id":22918050,"title":"The Heir (The Selection, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1422993526m\/22918050.jpg","authors":"Kiera Cass"},{"book_id":22923997,"title":"Overruled (The Legal Briefs, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1417712844m\/22923997.jpg","authors":"Emma Chase"},{"book_id":22929741,"title":"The Argonauts","image_url":"https:\/\/images.gr-assets.com\/books\/1410981835m\/22929741.jpg","authors":"Maggie Nelson"},{"book_id":22931009,"title":"Kindle User's Guide","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Amazon"},{"book_id":22934446,"title":"Not My Father's Son","image_url":"https:\/\/images.gr-assets.com\/books\/1429218612m\/22934446.jpg","authors":"Alan Cumming"},{"book_id":23009402,"title":"Saint Anything","image_url":"https:\/\/images.gr-assets.com\/books\/1414680105m\/23009402.jpg","authors":"Sarah Dessen"},{"book_id":23012475,"title":"The Knockoff","image_url":"https:\/\/images.gr-assets.com\/books\/1415582468m\/23012475.jpg","authors":"Lucy Sykes, Jo Piazza"},{"book_id":23013953,"title":"Gut: The Inside Story of Our Body\u2019s Most Underrated Organ","image_url":"https:\/\/images.gr-assets.com\/books\/1435168687m\/23013953.jpg","authors":"Giulia Enders, Jill Enders"},{"book_id":23014603,"title":"Those Girls","image_url":"https:\/\/images.gr-assets.com\/books\/1462090625m\/23014603.jpg","authors":"Chevy Stevens"},{"book_id":23014670,"title":"The Book of Speculation","image_url":"https:\/\/images.gr-assets.com\/books\/1422476749m\/23014670.jpg","authors":"Erika Swyler"},{"book_id":23017947,"title":"Ms. Marvel, Vol. 2: Generation Why","image_url":"https:\/\/images.gr-assets.com\/books\/1427559332m\/23017947.jpg","authors":"G. Willow Wilson, Adrian Alphona, Jacob Wyatt"},{"book_id":23019294,"title":"A Head Full of Ghosts","image_url":"https:\/\/images.gr-assets.com\/books\/1415678368m\/23019294.jpg","authors":"Paul Tremblay"},{"book_id":23093359,"title":"The Wicked + The Divine, Vol. 1: The Faust Act","image_url":"https:\/\/images.gr-assets.com\/books\/1415565992m\/23093359.jpg","authors":"Kieron Gillen, Jamie McKelvie, Matt Wilson, Clayton Cowles"},{"book_id":23093367,"title":"Saga, Vol. 4 (Saga, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1486028981m\/23093367.jpg","authors":"Brian K. Vaughan, Fiona Staples"},{"book_id":23122175,"title":"The Friend Zone (Game On, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1430227184m\/23122175.jpg","authors":"Kristen Callihan"},{"book_id":23125266,"title":"I Let You Go","image_url":"https:\/\/images.gr-assets.com\/books\/1429875945m\/23125266.jpg","authors":"Clare Mackintosh"},{"book_id":23128304,"title":"The Strange Library","image_url":"https:\/\/images.gr-assets.com\/books\/1419549475m\/23128304.jpg","authors":"Haruki Murakami, Ted Goossen"},{"book_id":23129410,"title":"Welcome to Night Vale","image_url":"https:\/\/images.gr-assets.com\/books\/1447774088m\/23129410.jpg","authors":"Joseph Fink, Jeffrey Cranor"},{"book_id":23153154,"title":"Memory Man (Amos Decker, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1421788503m\/23153154.jpg","authors":"David Baldacci"},{"book_id":23156040,"title":"Those Who Leave and Those Who Stay (The Neapolitan Novels #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1411338052m\/23156040.jpg","authors":"Elena Ferrante, Ann Goldstein"},{"book_id":23157777,"title":"Fool's Quest (The Fitz and The Fool, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1420496252m\/23157777.jpg","authors":"Robin Hobb"},{"book_id":23158207,"title":"How Google Works","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Eric Schmidt, Jonathan Rosenberg"},{"book_id":23164927,"title":"The Fold","image_url":"https:\/\/images.gr-assets.com\/books\/1416182070m\/23164927.jpg","authors":"Peter Clines"},{"book_id":23164983,"title":"Hollow City (Miss Peregrine\u2019s Peculiar Children, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1429175859m\/23164983.jpg","authors":"Ransom Riggs"},{"book_id":23168277,"title":"The Sympathizer","image_url":"https:\/\/images.gr-assets.com\/books\/1423543886m\/23168277.jpg","authors":"Viet Thanh Nguyen"},{"book_id":23168817,"title":"The Dark Forest (Remembrance of Earth\u2019s Past, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1412064931m\/23168817.jpg","authors":"Liu Cixin, Joel Martinsen"},{"book_id":23174274,"title":"Glass Sword (Red Queen, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1436460934m\/23174274.jpg","authors":"Victoria Aveyard"},{"book_id":23197269,"title":"Aurora","image_url":"https:\/\/images.gr-assets.com\/books\/1436300570m\/23197269.jpg","authors":"Kim Stanley Robinson"},{"book_id":23197346,"title":"Radiant Angel (John Corey, #7)","image_url":"https:\/\/images.gr-assets.com\/books\/1427202729m\/23197346.jpg","authors":"Nelson DeMille"},{"book_id":23207027,"title":"Three Dark Crowns (Three Dark Crowns, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1469265644m\/23207027.jpg","authors":"Kendare Blake"},{"book_id":23208397,"title":"Underground Airlines","image_url":"https:\/\/images.gr-assets.com\/books\/1443732702m\/23208397.jpg","authors":"Ben H. Winters"},{"book_id":23209924,"title":"The Water Knife","image_url":"https:\/\/images.gr-assets.com\/books\/1411059576m\/23209924.jpg","authors":"Paolo Bacigalupi"},{"book_id":23209927,"title":"At the Water's Edge","image_url":"https:\/\/images.gr-assets.com\/books\/1412194706m\/23209927.jpg","authors":"Sara Gruen"},{"book_id":23209971,"title":"Girl at War","image_url":"https:\/\/images.gr-assets.com\/books\/1414348859m\/23209971.jpg","authors":"Sara Novi\u0107"},{"book_id":23212667,"title":"All the Missing Girls","image_url":"https:\/\/images.gr-assets.com\/books\/1452098621m\/23212667.jpg","authors":"Megan Miranda"},{"book_id":23214408,"title":"After Ever Happy (After, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1417454456m\/23214408.jpg","authors":"Anna Todd"},{"book_id":23215469,"title":"Down the Rabbit Hole: Curious Adventures and Cautionary Tales of a Former Playboy Bunny","image_url":"https:\/\/images.gr-assets.com\/books\/1427158803m\/23215469.jpg","authors":"Holly Madison"},{"book_id":23245587,"title":"Summer Secrets","image_url":"https:\/\/images.gr-assets.com\/books\/1426128094m\/23245587.jpg","authors":"Jane Green"},{"book_id":23245594,"title":"Beach Town","image_url":"https:\/\/images.gr-assets.com\/books\/1430317618m\/23245594.jpg","authors":"Mary Kay Andrews"},{"book_id":23252517,"title":"The Law of Moses (The Law of Moses, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1415024195m\/23252517.jpg","authors":"Amy Harmon"},{"book_id":23278537,"title":"The Little Paris Bookshop","image_url":"https:\/\/images.gr-assets.com\/books\/1412462018m\/23278537.jpg","authors":"Nina George, Simon Pare"},{"book_id":23281640,"title":"Gathering Prey (Lucas Davenport, #25)","image_url":"https:\/\/images.gr-assets.com\/books\/1417985559m\/23281640.jpg","authors":"John Sandford"},{"book_id":23281906,"title":"The Liar","image_url":"https:\/\/images.gr-assets.com\/books\/1415980586m\/23281906.jpg","authors":"Nora Roberts"},{"book_id":23287179,"title":"Orphan Number Eight","image_url":"https:\/\/images.gr-assets.com\/books\/1416424263m\/23287179.jpg","authors":"Kim van Alkemade"},{"book_id":23289469,"title":"The Girl in the Red Coat","image_url":"https:\/\/images.gr-assets.com\/books\/1412251739m\/23289469.jpg","authors":"Kate Hamer"},{"book_id":23299512,"title":"This Savage Song (Monsters of Verity, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1445529989m\/23299512.jpg","authors":"Victoria Schwab"},{"book_id":23301545,"title":"The Sleeper and the Spindle","image_url":"https:\/\/images.gr-assets.com\/books\/1412343723m\/23301545.jpg","authors":"Neil Gaiman, Chris Riddell"},{"book_id":23305614,"title":"Finding Audrey","image_url":"https:\/\/images.gr-assets.com\/books\/1466835008m\/23305614.jpg","authors":"Sophie Kinsella"},{"book_id":23308084,"title":"The Rose & the Dagger (The Wrath & the Dawn, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1443797156m\/23308084.jpg","authors":"Renee Ahdieh"},{"book_id":23317538,"title":"Rising Strong","image_url":"https:\/\/images.gr-assets.com\/books\/1428641002m\/23317538.jpg","authors":"Bren\u00e9 Brown"},{"book_id":23341607,"title":"The Rumor","image_url":"https:\/\/images.gr-assets.com\/books\/1418769681m\/23341607.jpg","authors":"Elin Hilderbrand"},{"book_id":23341855,"title":"Ride Steady (Chaos, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1424262600m\/23341855.jpg","authors":"Kristen Ashley"},{"book_id":23341862,"title":"Blackout: Remembering the Things I Drank to Forget","image_url":"https:\/\/images.gr-assets.com\/books\/1423750824m\/23341862.jpg","authors":"Sarah Hepola"},{"book_id":23341894,"title":"Every Last Word","image_url":"https:\/\/images.gr-assets.com\/books\/1431016937m\/23341894.jpg","authors":"Tamara Ireland Stone"},{"book_id":23346377,"title":"In a Dark, Dark Wood","image_url":"https:\/\/images.gr-assets.com\/books\/1429521615m\/23346377.jpg","authors":"Ruth Ware"},{"book_id":23346719,"title":"Disclaimer","image_url":"https:\/\/images.gr-assets.com\/books\/1417259186m\/23346719.jpg","authors":"Ren\u00e9e Knight"},{"book_id":23346918,"title":"14th Deadly Sin (Women\u2019s Murder Club, #14)","image_url":"https:\/\/images.gr-assets.com\/books\/1425682789m\/23346918.jpg","authors":"James Patterson, Maxine Paetro"},{"book_id":23355069,"title":"Hero (Hero, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1413500793m\/23355069.jpg","authors":"Samantha Young"},{"book_id":23355896,"title":"The Bourbon Kings (The Bourbon Kings, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1414595442m\/23355896.jpg","authors":"J.R. Ward"},{"book_id":23357188,"title":"Bound by Honor (Born in Blood Mafia Chronicles, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1418481477m\/23357188.jpg","authors":"Cora Reilly"},{"book_id":23363874,"title":"Reasons to Stay Alive","image_url":"https:\/\/images.gr-assets.com\/books\/1418674667m\/23363874.jpg","authors":"Matt Haig"},{"book_id":23363928,"title":"The Library at Mount Char","image_url":"https:\/\/images.gr-assets.com\/books\/1416181258m\/23363928.jpg","authors":"Scott Hawkins"},{"book_id":23395680,"title":"Illuminae (The Illuminae Files, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1443433956m\/23395680.jpg","authors":"Amie Kaufman, Jay Kristoff"},{"book_id":23398625,"title":"Kitchens of the Great Midwest","image_url":"https:\/\/images.gr-assets.com\/books\/1428066565m\/23398625.jpg","authors":"J. Ryan Stradal"},{"book_id":23398806,"title":"Eeny Meeny (Helen Grace, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1418746579m\/23398806.jpg","authors":"M.J. Arlidge"},{"book_id":23398961,"title":"The Sound of Glass","image_url":"https:\/\/images.gr-assets.com\/books\/1446574357m\/23398961.jpg","authors":"Karen White"},{"book_id":23399022,"title":"Hope: A Memoir of Survival in Cleveland","image_url":"https:\/\/images.gr-assets.com\/books\/1421708177m\/23399022.jpg","authors":"Amanda Berry, Gina DeJesus, Mary Jordan, Kevin Sullivan"},{"book_id":23437156,"title":"Six of Crows (Six of Crows, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1500689111m\/23437156.jpg","authors":"Leigh Bardugo"},{"book_id":23453099,"title":"Eileen","image_url":"https:\/\/images.gr-assets.com\/books\/1479545528m\/23453099.jpg","authors":"Ottessa Moshfegh"},{"book_id":23453112,"title":"Modern Romance","image_url":"https:\/\/images.gr-assets.com\/books\/1432335014m\/23453112.jpg","authors":"Aziz Ansari, Eric Klinenberg"},{"book_id":23460830,"title":"Secondhand Souls (Grim Reaper, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1434397134m\/23460830.jpg","authors":"Christopher Moore"},{"book_id":23481669,"title":"Maude","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Donna Mabry"},{"book_id":23485372,"title":"The Master Magician (The Paper Magician Trilogy, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1422130439m\/23485372.jpg","authors":"Charlie N. Holmberg"},{"book_id":23492288,"title":"Hidden Bodies (You, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1437414470m\/23492288.jpg","authors":"Caroline Kepnes"},{"book_id":23492613,"title":"Eight Hundred Grapes","image_url":"https:\/\/images.gr-assets.com\/books\/1429742890m\/23492613.jpg","authors":"Laura Dave"},{"book_id":23492661,"title":"Maybe in Another Life","image_url":"https:\/\/images.gr-assets.com\/books\/1424970519m\/23492661.jpg","authors":"Taylor Jenkins Reid"},{"book_id":23492673,"title":"Primates of Park Avenue","image_url":"https:\/\/images.gr-assets.com\/books\/1430942586m\/23492673.jpg","authors":"Wednesday Martin"},{"book_id":23492741,"title":"The Marriage of Opposites","image_url":"https:\/\/images.gr-assets.com\/books\/1438581390m\/23492741.jpg","authors":"Alice Hoffman"},{"book_id":23503361,"title":"Among the Ten Thousand Things","image_url":"https:\/\/images.gr-assets.com\/books\/1464907467m\/23503361.jpg","authors":"Julia Pierpont"},{"book_id":23507745,"title":"Serafina and the Black Cloak (Serafina, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1420158894m\/23507745.jpg","authors":"Robert Beatty"},{"book_id":23512999,"title":"The Bazaar of Bad Dreams","image_url":"https:\/\/images.gr-assets.com\/books\/1468705688m\/23512999.jpg","authors":"Stephen King"},{"book_id":23513349,"title":"Milk and Honey","image_url":"https:\/\/images.gr-assets.com\/books\/1491595510m\/23513349.jpg","authors":"Rupi Kaur"},{"book_id":23533039,"title":"Ancillary Mercy (Imperial Radch #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1493642929m\/23533039.jpg","authors":"Ann Leckie"},{"book_id":23545800,"title":"Kaleidoscope Hearts (Hearts, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1421251011m\/23545800.jpg","authors":"Claire Contreras"},{"book_id":23553419,"title":"The Ice Twins","image_url":"https:\/\/images.gr-assets.com\/books\/1415872674m\/23553419.jpg","authors":"S.K. Tremayne"},{"book_id":23566909,"title":"The Marvels","image_url":"https:\/\/images.gr-assets.com\/books\/1453389120m\/23566909.jpg","authors":"Brian Selznick"},{"book_id":23569783,"title":"A Window Opens","image_url":"https:\/\/images.gr-assets.com\/books\/1440378428m\/23569783.jpg","authors":"Elisabeth Egan"},{"book_id":23587984,"title":"Maybe Not (Maybe, #1.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1416381591m\/23587984.jpg","authors":"Colleen Hoover"},{"book_id":23602473,"title":"God Help the Child","image_url":"https:\/\/images.gr-assets.com\/books\/1463008449m\/23602473.jpg","authors":"Toni Morrison"},{"book_id":23602504,"title":"Blood on Snow (Blood on Snow, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1422370944m\/23602504.jpg","authors":"Jo Nesb\u00f8, Neil Smith"},{"book_id":23602561,"title":"The Cartel","image_url":"https:\/\/images.gr-assets.com\/books\/1429552939m\/23602561.jpg","authors":"Don Winslow"},{"book_id":23602562,"title":"Our Souls at Night","image_url":"https:\/\/images.gr-assets.com\/books\/1418766517m\/23602562.jpg","authors":"Kent Haruf"},{"book_id":23604559,"title":"My Grandmother Asked Me to Tell You She's Sorry","image_url":"https:\/\/images.gr-assets.com\/books\/1461904020m\/23604559.jpg","authors":"Fredrik Backman, Henning Koch"},{"book_id":23638955,"title":"Pretty Baby","image_url":"https:\/\/images.gr-assets.com\/books\/1438274437m\/23638955.jpg","authors":"Mary Kubica"},{"book_id":23647129,"title":"For the Love: Fighting for Grace in a World of Impossible Standards","image_url":"https:\/\/images.gr-assets.com\/books\/1426296433m\/23647129.jpg","authors":"Jen Hatmaker"},{"book_id":23664710,"title":"Make Me (Jack Reacher, #20)","image_url":"https:\/\/images.gr-assets.com\/books\/1467905395m\/23664710.jpg","authors":"Lee Child"},{"book_id":23675858,"title":"Departure","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"A.G. Riddle"},{"book_id":23692271,"title":"Sapiens: A Brief History of Humankind","image_url":"https:\/\/images.gr-assets.com\/books\/1420585954m\/23692271.jpg","authors":"Yuval Noah Harari"},{"book_id":23705512,"title":"You're Never Weird on the Internet (Almost)","image_url":"https:\/\/images.gr-assets.com\/books\/1440565049m\/23705512.jpg","authors":"Felicia Day, Joss Whedon"},{"book_id":23714532,"title":"Beautiful Sacrifice (The Maddox Brothers, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1429578280m\/23714532.jpg","authors":"Jamie McGuire"},{"book_id":23714544,"title":"Beautiful Burn (The Maddox Brothers, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1452456357m\/23714544.jpg","authors":"Jamie McGuire"},{"book_id":23717678,"title":"The Murder House","image_url":"https:\/\/images.gr-assets.com\/books\/1464826516m\/23717678.jpg","authors":"James Patterson, David Ellis"},{"book_id":23719378,"title":"Girl Waits with Gun (Kopp Sisters, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1500687846m\/23719378.jpg","authors":"Amy Stewart"},{"book_id":23719479,"title":"Rosemary: The Hidden Kennedy Daughter","image_url":"https:\/\/images.gr-assets.com\/books\/1439253720m\/23719479.jpg","authors":"Kate Clifford Larson"},{"book_id":23731881,"title":"Very Good Lives: The Fringe Benefits of Failure and the Importance of Imagination","image_url":"https:\/\/images.gr-assets.com\/books\/1418419116m\/23731881.jpg","authors":"J.K. Rowling, Joel Holland"},{"book_id":23734628,"title":"Carry On","image_url":"https:\/\/images.gr-assets.com\/books\/1429810397m\/23734628.jpg","authors":"Rainbow Rowell"},{"book_id":23743603,"title":"Miramont's Ghost","image_url":"https:\/\/images.gr-assets.com\/books\/1418787928m\/23743603.jpg","authors":"Elizabeth Hall"},{"book_id":23745132,"title":"Wreckage","image_url":"https:\/\/images.gr-assets.com\/books\/1422826024m\/23745132.jpg","authors":"Emily Bleeker"},{"book_id":23745189,"title":"The Mermaid's Sister","image_url":"https:\/\/images.gr-assets.com\/books\/1421800056m\/23745189.jpg","authors":"Carrie Anne Noble"},{"book_id":23746004,"title":"Black-Eyed Susans","image_url":"https:\/\/images.gr-assets.com\/books\/1431975016m\/23746004.jpg","authors":"Julia Heaberlin"},{"book_id":23751850,"title":"The Hypnotist's Love Story","image_url":"https:\/\/images.gr-assets.com\/books\/1418234545m\/23751850.jpg","authors":"Liane Moriarty"},{"book_id":23754479,"title":"Purity","image_url":"https:\/\/images.gr-assets.com\/books\/1438958976m\/23754479.jpg","authors":"Jonathan Franzen"},{"book_id":23766634,"title":"A Court of Wings and Ruin (A Court of Thorns and Roses, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1485528243m\/23766634.jpg","authors":"Sarah J. Maas"},{"book_id":23844390,"title":"The Pact","image_url":"https:\/\/images.gr-assets.com\/books\/1418886372m\/23844390.jpg","authors":"Karina Halle"},{"book_id":23846013,"title":"The Rose Society (The Young Elites, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1443368070m\/23846013.jpg","authors":"Marie Lu"},{"book_id":23848559,"title":"Furiously Happy: A Funny Book About Horrible Things","image_url":"https:\/\/images.gr-assets.com\/books\/1429101901m\/23848559.jpg","authors":"Jenny Lawson"},{"book_id":23899174,"title":"In the Unlikely Event","image_url":"https:\/\/images.gr-assets.com\/books\/1421711380m\/23899174.jpg","authors":"Judy Blume"},{"book_id":23929479,"title":"Soumission","image_url":"https:\/\/images.gr-assets.com\/books\/1421431410m\/23929479.jpg","authors":"Michel Houellebecq"},{"book_id":23995231,"title":"Circling the Sun","image_url":"https:\/\/images.gr-assets.com\/books\/1426531608m\/23995231.jpg","authors":"Paula McLain"},{"book_id":24019187,"title":"Humans of New York: Stories","image_url":"https:\/\/images.gr-assets.com\/books\/1430176879m\/24019187.jpg","authors":"Brandon Stanton"},{"book_id":24040551,"title":"The Night Sister","image_url":"https:\/\/images.gr-assets.com\/books\/1427845722m\/24040551.jpg","authors":"Jennifer McMahon"},{"book_id":24041443,"title":"We Never Asked for Wings","image_url":"https:\/\/images.gr-assets.com\/books\/1432153065m\/24041443.jpg","authors":"Vanessa Diffenbaugh"},{"book_id":24044596,"title":"Kulti","image_url":"https:\/\/images.gr-assets.com\/books\/1419402858m\/24044596.jpg","authors":"Mariana Zapata"},{"book_id":24120519,"title":"Library of Souls (Miss Peregrine's Peculiar Children, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1472783347m\/24120519.jpg","authors":"Ransom Riggs"},{"book_id":24189224,"title":"City on Fire","image_url":"https:\/\/images.gr-assets.com\/books\/1422969880m\/24189224.jpg","authors":"Garth Risk Hallberg"},{"book_id":24228353,"title":"Trail of Broken Wings","image_url":"https:\/\/images.gr-assets.com\/books\/1427135077m\/24228353.jpg","authors":"Sejal Badani"},{"book_id":24378015,"title":"Never Never (Never Never, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Colleen Hoover, Tarryn Fisher"},{"book_id":24388326,"title":"The Heart Goes Last","image_url":"https:\/\/images.gr-assets.com\/books\/1493598486m\/24388326.jpg","authors":"Margaret Atwood"},{"book_id":24396884,"title":"Alert (Michael Bennett, #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1424306640m\/24396884.jpg","authors":"James Patterson, Michael Ledwidge"},{"book_id":24422492,"title":"Never Never: Part Two (Never Never, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1420928158m\/24422492.jpg","authors":"Colleen Hoover, Tarryn Fisher"},{"book_id":24429934,"title":"The Einstein Prophecy","image_url":"https:\/\/images.gr-assets.com\/books\/1434549503m\/24429934.jpg","authors":"Robert Masello"},{"book_id":24445517,"title":"Maybe Someday (Maybe, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1421002815m\/24445517.jpg","authors":"Colleen Hoover"},{"book_id":24452249,"title":"Did You Ever Have a Family","image_url":"https:\/\/images.gr-assets.com\/books\/1440378380m\/24452249.jpg","authors":"Bill Clegg"},{"book_id":24453082,"title":"Big Magic: Creative Living Beyond Fear","image_url":"https:\/\/images.gr-assets.com\/books\/1451446242m\/24453082.jpg","authors":"Elizabeth Gilbert"},{"book_id":24465724,"title":"Happily Ever After (The Selection, #0.4, 0.5, 2.5, 2.6)","image_url":"https:\/\/images.gr-assets.com\/books\/1427449095m\/24465724.jpg","authors":"Kiera Cass"},{"book_id":24473465,"title":"The English Spy (Gabriel Allon, #15)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Daniel Silva"},{"book_id":24473763,"title":"Radiance (Wraith Kings, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Grace Draven"},{"book_id":24480276,"title":"The Versions of Us","image_url":"https:\/\/images.gr-assets.com\/books\/1423155390m\/24480276.jpg","authors":"Laura Barnett"},{"book_id":24488476,"title":"The Fate of Ten (Lorien Legacies, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1429799057m\/24488476.jpg","authors":"Pittacus Lore"},{"book_id":24499258,"title":"Slade House","image_url":"https:\/\/images.gr-assets.com\/books\/1446777435m\/24499258.jpg","authors":"David Mitchell"},{"book_id":24504274,"title":"Pucked (Pucked, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1429896314m\/24504274.jpg","authors":"Helena Hunting"},{"book_id":24529123,"title":"This Is Where It Ends","image_url":"https:\/\/images.gr-assets.com\/books\/1431358364m\/24529123.jpg","authors":"Marieke Nijkamp"},{"book_id":24586590,"title":"The Nature of the Beast (Chief Inspector Armand Gamache #11)","image_url":"https:\/\/images.gr-assets.com\/books\/1429532809m\/24586590.jpg","authors":"Louise Penny"},{"book_id":24611425,"title":"The Secret Chord","image_url":"https:\/\/images.gr-assets.com\/books\/1428406962m\/24611425.jpg","authors":"Geraldine Brooks"},{"book_id":24611454,"title":"Stars of Fortune (The Guardians Trilogy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1458079016m\/24611454.jpg","authors":"Nora Roberts"},{"book_id":24612118,"title":"Fates and Furies","image_url":"https:\/\/images.gr-assets.com\/books\/1434750235m\/24612118.jpg","authors":"Lauren Groff"},{"book_id":24612624,"title":"George","image_url":"https:\/\/images.gr-assets.com\/books\/1423358952m\/24612624.jpg","authors":"Alex Gino"},{"book_id":24631990,"title":"Silent Scream (D.I. Kim Stone, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Angela Marsons"},{"book_id":24709327,"title":"Scion of Ikshvaku (RamChandra, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1428418378m\/24709327.jpg","authors":"Amish Tripathi"},{"book_id":24728470,"title":"M Train","image_url":"https:\/\/images.gr-assets.com\/books\/1429289871m\/24728470.jpg","authors":"Patti Smith"},{"book_id":24817626,"title":"Go Set a Watchman","image_url":"https:\/\/images.gr-assets.com\/books\/1451442088m\/24817626.jpg","authors":"Harper Lee"},{"book_id":24819476,"title":"Winter Stroll (Winter #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1431957489m\/24819476.jpg","authors":"Elin Hilderbrand"},{"book_id":24820165,"title":"See Me","image_url":"https:\/\/images.gr-assets.com\/books\/1439564033m\/24820165.jpg","authors":"Nicholas Sparks"},{"book_id":24859245,"title":"Stranger Child (DCI Tom Douglas, #4)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Rachel Abbott"},{"book_id":24876258,"title":"The Aeronaut's Windlass (The Cinder Spires, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1425415066m\/24876258.jpg","authors":"Jim Butcher"},{"book_id":24902492,"title":"Ruby","image_url":"https:\/\/images.gr-assets.com\/books\/1423586473m\/24902492.jpg","authors":"Cynthia Bond"},{"book_id":24903031,"title":"Blood Kiss (Black Dagger Legacy, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1426697749m\/24903031.jpg","authors":"J.R. Ward"},{"book_id":24903919,"title":"Depraved Heart (Kay Scarpetta, #23)","image_url":"https:\/\/images.gr-assets.com\/books\/1439833245m\/24903919.jpg","authors":"Patricia Cornwell"},{"book_id":24911006,"title":"Missoula: Rape and the Justice System in a College Town","image_url":"https:\/\/images.gr-assets.com\/books\/1491227618m\/24911006.jpg","authors":"Jon Krakauer"},{"book_id":24920901,"title":"The Deal (Off-Campus, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Elle Kennedy"},{"book_id":24934065,"title":"Rebel of the Sands (Rebel of the Sands, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1446829335m\/24934065.jpg","authors":"Alwyn Hamilton"},{"book_id":24937499,"title":"Her Final Breath (Tracy Crosswhite, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1430746517m\/24937499.jpg","authors":"Robert Dugoni"},{"book_id":24940998,"title":"X (Kinsey Millhone, #24)","image_url":"https:\/\/images.gr-assets.com\/books\/1429811123m\/24940998.jpg","authors":"Sue Grafton"},{"book_id":24950845,"title":"Tricky Twenty-Two (Stephanie Plum, #22)","image_url":"https:\/\/images.gr-assets.com\/books\/1431363154m\/24950845.jpg","authors":"Janet Evanovich"},{"book_id":24961498,"title":"The Midwife's Revolt (The Midwife Series, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1424233816m\/24961498.jpg","authors":"Jodi Daynard"},{"book_id":24961531,"title":"The Color of Secrets","image_url":"https:\/\/images.gr-assets.com\/books\/1424234214m\/24961531.jpg","authors":"Lindsay Ashford"},{"book_id":25005214,"title":"Queen Song (Red Queen, #0.1)","image_url":"https:\/\/images.gr-assets.com\/books\/1437677533m\/25005214.jpg","authors":"Victoria Aveyard"},{"book_id":25010281,"title":"The Crossing (Harry Bosch, #20; Mickey Haller, #7; Harry Bosch Universe, #25)","image_url":"https:\/\/images.gr-assets.com\/books\/1428347007m\/25010281.jpg","authors":"Michael Connelly"},{"book_id":25041504,"title":"After You (Me Before You, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1429029729m\/25041504.jpg","authors":"Jojo Moyes"},{"book_id":25056528,"title":"Sincerely, Carter (Sincerely Carter, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1427776502m\/25056528.jpg","authors":"Whitney G."},{"book_id":25065522,"title":"Wildflower","image_url":"https:\/\/images.gr-assets.com\/books\/1446537126m\/25065522.jpg","authors":"Drew Barrymore"},{"book_id":25065629,"title":"Hunger Makes Me a Modern Girl","image_url":"https:\/\/images.gr-assets.com\/books\/1435507354m\/25065629.jpg","authors":"Carrie Brownstein"},{"book_id":25066591,"title":"Cross Justice (Alex Cross, #23)","image_url":"https:\/\/images.gr-assets.com\/books\/1427135714m\/25066591.jpg","authors":"James Patterson"},{"book_id":25066991,"title":"The Guilty (Will Robie, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1435632658m\/25066991.jpg","authors":"David Baldacci"},{"book_id":25067046,"title":"Lost Stars (Star Wars: Journey to the Force Awakens)","image_url":"https:\/\/images.gr-assets.com\/books\/1462731623m\/25067046.jpg","authors":"Claudia Gray"},{"book_id":25074850,"title":"The Girl in the Spider's Web (Millennium, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1427843648m\/25074850.jpg","authors":"David Lagercrantz, Stieg Larsson, George Goulding"},{"book_id":25104491,"title":"The Prettiest One","image_url":"https:\/\/images.gr-assets.com\/books\/1441065786m\/25104491.jpg","authors":"James Hankins"},{"book_id":25106926,"title":"The Taming of the Queen (The Plantagenet and Tudor Novels, #11)","image_url":"https:\/\/images.gr-assets.com\/books\/1433348581m\/25106926.jpg","authors":"Philippa Gregory"},{"book_id":25111004,"title":"November 9","image_url":"https:\/\/images.gr-assets.com\/books\/1447138036m\/25111004.jpg","authors":"Colleen Hoover"},{"book_id":25114548,"title":"Friction","image_url":"https:\/\/images.gr-assets.com\/books\/1434044640m\/25114548.jpg","authors":"Sandra Brown"},{"book_id":25131600,"title":"Aftermath (Star Wars: Aftermath, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1426620007m\/25131600.jpg","authors":"Chuck Wendig"},{"book_id":25142924,"title":"The Magic Strings of Frankie Presto","image_url":"https:\/\/images.gr-assets.com\/books\/1426364478m\/25142924.jpg","authors":"Mitch Albom"},{"book_id":25152052,"title":"The Japanese Lover","image_url":"https:\/\/images.gr-assets.com\/books\/1501991754m\/25152052.jpg","authors":"Isabel Allende, Nick Caistor, Amanda Hopkinson"},{"book_id":25153134,"title":"Follow You Home","image_url":"https:\/\/images.gr-assets.com\/books\/1432662633m\/25153134.jpg","authors":"Mark Edwards"},{"book_id":25205422,"title":"Who Do You Love","image_url":"https:\/\/images.gr-assets.com\/books\/1432136838m\/25205422.jpg","authors":"Jennifer Weiner"},{"book_id":25222064,"title":"Old School (Diary of a Wimpy Kid, #10)","image_url":"https:\/\/images.gr-assets.com\/books\/1430174375m\/25222064.jpg","authors":"Jeff Kinney"},{"book_id":25228579,"title":"The Perfect Son","image_url":"https:\/\/images.gr-assets.com\/books\/1429633273m\/25228579.jpg","authors":"Barbara Claypole White"},{"book_id":25241477,"title":"Ashley Bell","image_url":"https:\/\/images.gr-assets.com\/books\/1428081712m\/25241477.jpg","authors":"Dean Koontz"},{"book_id":25242224,"title":"The Story of the Lost Child (The Neapolitan Novels, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1499781984m\/25242224.jpg","authors":"Elena Ferrante, Ann Goldstein"},{"book_id":25251757,"title":"You Will Know Me","image_url":"https:\/\/images.gr-assets.com\/books\/1467210264m\/25251757.jpg","authors":"Megan Abbott"},{"book_id":25279165,"title":"The Swans of Fifth Avenue","image_url":"https:\/\/images.gr-assets.com\/books\/1431898319m\/25279165.jpg","authors":"Melanie Benjamin"},{"book_id":25293695,"title":"The Beast (Black Dagger Brotherhood, #14)","image_url":"https:\/\/images.gr-assets.com\/books\/1437025828m\/25293695.jpg","authors":"J.R. Ward"},{"book_id":25316313,"title":"A Dark Lure","image_url":"https:\/\/images.gr-assets.com\/books\/1430780443m\/25316313.jpg","authors":"Loreth Anne White"},{"book_id":25332115,"title":"The Sound of Gravel","image_url":"https:\/\/images.gr-assets.com\/books\/1436200674m\/25332115.jpg","authors":"Ruth Wariner"},{"book_id":25337081,"title":"Brotherhood in Death (In Death, #42)","image_url":"https:\/\/images.gr-assets.com\/books\/1439226052m\/25337081.jpg","authors":"J.D. Robb"},{"book_id":25372801,"title":"All the Birds in the Sky","image_url":"https:\/\/images.gr-assets.com\/books\/1429225322m\/25372801.jpg","authors":"Charlie Jane Anders"},{"book_id":25387202,"title":"The Force Awakens (Star Wars)","image_url":"https:\/\/images.gr-assets.com\/books\/1450520344m\/25387202.jpg","authors":"Alan Dean Foster, Lawrence Kasdan, J.J. Abrams, Michael Arndt"},{"book_id":25387351,"title":"Rogue Lawyer","image_url":"https:\/\/images.gr-assets.com\/books\/1434559021m\/25387351.jpg","authors":"John Grisham"},{"book_id":25422234,"title":"Notorious RBG: The Life and Times of Ruth Bader Ginsburg","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Irin Carmon, Shana Knizhnik"},{"book_id":25430584,"title":"The Guest Room","image_url":"https:\/\/images.gr-assets.com\/books\/1432679414m\/25430584.jpg","authors":"Chris Bohjalian"},{"book_id":25451555,"title":"Saga, Vol. 5 (Saga, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1486028990m\/25451555.jpg","authors":"Brian K. Vaughan, Fiona Staples"},{"book_id":25451852,"title":"Dawn of Wonder (The Wakening, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1450681609m\/25451852.jpg","authors":"Jonathan Renshaw"},{"book_id":25454883,"title":"Never Never: Part Three (Never Never, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1443033152m\/25454883.jpg","authors":"Colleen Hoover, Tarryn Fisher"},{"book_id":25489012,"title":"The Road to Little Dribbling: Adventures of an American in Britain","image_url":"https:\/\/images.gr-assets.com\/books\/1444259875m\/25489012.jpg","authors":"Bill Bryson"},{"book_id":25489025,"title":"The Vegetarian","image_url":"https:\/\/images.gr-assets.com\/books\/1478196580m\/25489025.jpg","authors":"Han Kang, Deborah Smith"},{"book_id":25489625,"title":"Between the World and Me","image_url":"https:\/\/images.gr-assets.com\/books\/1451435027m\/25489625.jpg","authors":"Ta-Nehisi Coates"},{"book_id":25494343,"title":"Lady Midnight (The Dark Artifices, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1460477682m\/25494343.jpg","authors":"Cassandra Clare"},{"book_id":25507925,"title":"Binge","image_url":"https:\/\/images.gr-assets.com\/books\/1438341092m\/25507925.jpg","authors":"Tyler Oakley"},{"book_id":25526965,"title":"End of Watch (Bill Hodges Trilogy, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1468705472m\/25526965.jpg","authors":"Stephen King"},{"book_id":25527908,"title":"The Forgetting Time","image_url":"https:\/\/images.gr-assets.com\/books\/1442527065m\/25527908.jpg","authors":"Sharon Guskin"},{"book_id":25558608,"title":"A Torch Against the Night (An Ember in the Ashes, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1463675717m\/25558608.jpg","authors":"Sabaa Tahir"},{"book_id":25564446,"title":"The Air He Breathes (Elements, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1441375261m\/25564446.jpg","authors":"Brittainy C. Cherry"},{"book_id":25564665,"title":"The Mistake (Off-Campus, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1447598937m\/25564665.jpg","authors":"Elle Kennedy"},{"book_id":25573977,"title":"The Readers of Broken Wheel Recommend","image_url":"https:\/\/images.gr-assets.com\/books\/1452107441m\/25573977.jpg","authors":"Katarina Bivald, Alice Menzies"},{"book_id":25574782,"title":"Pretty Girls","image_url":"https:\/\/images.gr-assets.com\/books\/1432205734m\/25574782.jpg","authors":"Karin Slaughter"},{"book_id":25613617,"title":"15th Affair (Women's Murder Club #15)","image_url":"https:\/\/images.gr-assets.com\/books\/1444918177m\/25613617.jpg","authors":"James Patterson, Maxine Paetro"},{"book_id":25614492,"title":"Salt to the Sea","image_url":"https:\/\/images.gr-assets.com\/books\/1437084512m\/25614492.jpg","authors":"Ruta Sepetys"},{"book_id":25614598,"title":"Crimson Shore (Pendergast, #15)","image_url":"https:\/\/images.gr-assets.com\/books\/1435611577m\/25614598.jpg","authors":"Douglas Preston, Lincoln Child"},{"book_id":25614984,"title":"Spark Joy: An Illustrated Master Class on the Art of Organizing and Tidying Up","image_url":"https:\/\/images.gr-assets.com\/books\/1435598787m\/25614984.jpg","authors":"Marie Kond\u014d"},{"book_id":25624089,"title":"Killing Reagan: The Violent Assault That Changed a Presidency","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Bill O'Reilly, Martin Dugard"},{"book_id":25644437,"title":"Find Her (Detective D.D. Warren, #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1444071262m\/25644437.jpg","authors":"Lisa Gardner"},{"book_id":25644601,"title":"Grey (Fifty Shades, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1433182986m\/25644601.jpg","authors":"E.L. James"},{"book_id":25663717,"title":"The Two-Family House","image_url":"https:\/\/images.gr-assets.com\/books\/1479207044m\/25663717.jpg","authors":"Lynda Cohen Loigman"},{"book_id":25663888,"title":"Orphan X (Orphan X, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1435262799m\/25663888.jpg","authors":"Gregg Hurwitz"},{"book_id":25664459,"title":"The Last Painting of Sara de Vos","image_url":"https:\/\/images.gr-assets.com\/books\/1494524049m\/25664459.jpg","authors":"Dominic Smith"},{"book_id":25666046,"title":"The North Water","image_url":"https:\/\/images.gr-assets.com\/books\/1456351800m\/25666046.jpg","authors":"Ian McGuire"},{"book_id":25671827,"title":"Dirty (Dive Bar, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1444317627m\/25671827.jpg","authors":"Kylie Scott"},{"book_id":25671861,"title":"Cometh the Hour (The Clifton Chronicles, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1433791167m\/25671861.jpg","authors":"Jeffrey Archer"},{"book_id":25689074,"title":"Stars Above (The Lunar Chronicles, #4.5)","image_url":"https:\/\/images.gr-assets.com\/books\/1472473049m\/25689074.jpg","authors":"Marissa Meyer"},{"book_id":25690958,"title":"Year of Yes: How to Dance It Out, Stand In the Sun and Be Your Own Person","image_url":"https:\/\/images.gr-assets.com\/books\/1443552148m\/25690958.jpg","authors":"Shonda Rhimes"},{"book_id":25693079,"title":"Crooked Little Lies","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Barbara Taylor Sissel"},{"book_id":25711641,"title":"Tyrant (King, #2)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"T.M. Frazier"},{"book_id":25733983,"title":"Lab Girl","image_url":"https:\/\/images.gr-assets.com\/books\/1441826687m\/25733983.jpg","authors":"Hope Jahren"},{"book_id":25733990,"title":"Sleeping Giants (Themis Files, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1459785141m\/25733990.jpg","authors":"Sylvain Neuvel"},{"book_id":25734248,"title":"The Widow","image_url":"https:\/\/images.gr-assets.com\/books\/1449178687m\/25734248.jpg","authors":"Fiona Barton"},{"book_id":25735012,"title":"Career of Evil (Cormoran Strike, #3)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Robert Galbraith, J.K. Rowling"},{"book_id":25772000,"title":"Cocky Bastard","image_url":"https:\/\/images.gr-assets.com\/books\/1436524506m\/25772000.jpg","authors":"Penelope Ward, Vi Keeland"},{"book_id":25773504,"title":"Most Wanted","image_url":"https:\/\/images.gr-assets.com\/books\/1443635774m\/25773504.jpg","authors":"Lisa Scottoline"},{"book_id":25776122,"title":"The Summer Before the War","image_url":"https:\/\/images.gr-assets.com\/books\/1443294379m\/25776122.jpg","authors":"Helen Simonson"},{"book_id":25776210,"title":"Fire Touched (Mercy Thompson, #9)","image_url":"https:\/\/images.gr-assets.com\/books\/1441912000m\/25776210.jpg","authors":"Patricia Briggs"},{"book_id":25781157,"title":"The Nest","image_url":"https:\/\/images.gr-assets.com\/books\/1461354827m\/25781157.jpg","authors":"Cynthia D'Aprix Sweeney"},{"book_id":25801299,"title":"After Anna","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Alex Lake"},{"book_id":25802884,"title":"Hollywood Dirt (Hollywood Dirt, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1439214601m\/25802884.jpg","authors":"Alessandra Torre"},{"book_id":25809756,"title":"Shopaholic to the Rescue (Shopaholic, #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1439942710m\/25809756.jpg","authors":"Sophie Kinsella"},{"book_id":25813921,"title":"Grit: Passion, Perseverance, and the Science of Success","image_url":"https:\/\/images.gr-assets.com\/books\/1458533580m\/25813921.jpg","authors":"Angela Duckworth"},{"book_id":25813937,"title":"Glory over Everything: Beyond The Kitchen House","image_url":"https:\/\/images.gr-assets.com\/books\/1444246918m\/25813937.jpg","authors":"Kathleen Grissom"},{"book_id":25814512,"title":"Everyone Brave is Forgiven","image_url":"https:\/\/images.gr-assets.com\/books\/1462176457m\/25814512.jpg","authors":"Chris Cleave"},{"book_id":25816688,"title":"The Fireman","image_url":"https:\/\/images.gr-assets.com\/books\/1469316385m\/25816688.jpg","authors":"Joe Hill"},{"book_id":25817162,"title":"America's First Daughter","image_url":"https:\/\/images.gr-assets.com\/books\/1459542134m\/25817162.jpg","authors":"Stephanie Dray, Laura Kamoie"},{"book_id":25817493,"title":"News of the World","image_url":"https:\/\/images.gr-assets.com\/books\/1440342988m\/25817493.jpg","authors":"Paulette Jiles"},{"book_id":25817528,"title":"Be Frank With Me","image_url":"https:\/\/images.gr-assets.com\/books\/1449425543m\/25817528.jpg","authors":"Julia Claiborne Johnson"},{"book_id":25817531,"title":"What She Knew","image_url":"https:\/\/images.gr-assets.com\/books\/1441801604m\/25817531.jpg","authors":"Gilly Macmillan"},{"book_id":25828204,"title":"F*ck Love","image_url":"https:\/\/images.gr-assets.com\/books\/1449432878m\/25828204.jpg","authors":"Tarryn Fisher"},{"book_id":25837338,"title":"The Girl from Krakow","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Alex Rosenberg"},{"book_id":25837341,"title":"The Good Neighbor","image_url":"https:\/\/images.gr-assets.com\/books\/1465938498m\/25837341.jpg","authors":"A.J. Banner"},{"book_id":25852784,"title":"Evicted: Poverty and Profit in the American City","image_url":"https:\/\/images.gr-assets.com\/books\/1453060710m\/25852784.jpg","authors":"Matthew Desmond"},{"book_id":25852870,"title":"Eligible: A Modern Retelling of Pride and Prejudice (The Austen Project, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1460477855m\/25852870.jpg","authors":"Curtis Sittenfeld"},{"book_id":25855506,"title":"Adulthood Is a Myth (Sarah's Scribbles, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1481219756m\/25855506.jpg","authors":"Sarah Andersen"},{"book_id":25866725,"title":"Broken Grace","image_url":"https:\/\/images.gr-assets.com\/books\/1436281761m\/25866725.jpg","authors":"E.C. Diskin"},{"book_id":25877663,"title":"Babylon's Ashes (The Expanse, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1442247299m\/25877663.jpg","authors":"James S.A. Corey"},{"book_id":25883848,"title":"The Hating Game","image_url":"https:\/\/images.gr-assets.com\/books\/1467138679m\/25883848.jpg","authors":"Sally Thorne"},{"book_id":25893582,"title":"Tell Me Three Things","image_url":"https:\/\/images.gr-assets.com\/books\/1448596179m\/25893582.jpg","authors":"Julie Buxbaum"},{"book_id":25893693,"title":"Lilac Girls","image_url":"https:\/\/images.gr-assets.com\/books\/1462850258m\/25893693.jpg","authors":"Martha Hall Kelly"},{"book_id":25893709,"title":"My Name Is Lucy Barton","image_url":"https:\/\/images.gr-assets.com\/books\/1450653428m\/25893709.jpg","authors":"Elizabeth Strout, Goran Skrobonja"},{"book_id":25899336,"title":"When Breath Becomes Air","image_url":"https:\/\/images.gr-assets.com\/books\/1492677644m\/25899336.jpg","authors":"Paul Kalanithi, Abraham Verghese"},{"book_id":25912358,"title":"A Thousand Boy Kisses","image_url":"https:\/\/images.gr-assets.com\/books\/1453299050m\/25912358.jpg","authors":"Tillie Cole"},{"book_id":25937671,"title":"A Mother's Reckoning: Living in the Aftermath of Tragedy","image_url":"https:\/\/images.gr-assets.com\/books\/1453261078m\/25937671.jpg","authors":"Sue Klebold"},{"book_id":25953369,"title":"Hidden Figures: The American Dream and the Untold Story of the Black Women Mathematicians Who Helped Win the Space Race","image_url":"https:\/\/images.gr-assets.com\/books\/1481844518m\/25953369.jpg","authors":"Margot Lee Shetterly"},{"book_id":26025580,"title":"The Grownup","image_url":"https:\/\/images.gr-assets.com\/books\/1441679582m\/26025580.jpg","authors":"Gillian Flynn"},{"book_id":26025989,"title":"The Princess Diarist","image_url":"https:\/\/images.gr-assets.com\/books\/1496315917m\/26025989.jpg","authors":"Carrie Fisher"},{"book_id":26061591,"title":"Extreme Prey (Lucas Davenport, #26)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"John Sandford"},{"book_id":26072609,"title":"The Rainbow Comes and Goes: A Mother and Son On Life, Love, and Loss","image_url":"https:\/\/images.gr-assets.com\/books\/1456162664m\/26072609.jpg","authors":"Anderson Cooper, Gloria Vanderbilt"},{"book_id":26074181,"title":"The Crown (The Selection, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1446759650m\/26074181.jpg","authors":"Kiera Cass"},{"book_id":26109394,"title":"Fool Me Once","image_url":"https:\/\/images.gr-assets.com\/books\/1443190440m\/26109394.jpg","authors":"Harlan Coben"},{"book_id":26114135,"title":"All the Ugly and Wonderful Things","image_url":"https:\/\/images.gr-assets.com\/books\/1500552983m\/26114135.jpg","authors":"Bryn Greenwood"},{"book_id":26114516,"title":"The Weekenders","image_url":"https:\/\/images.gr-assets.com\/books\/1459725725m\/26114516.jpg","authors":"Mary Kay Andrews"},{"book_id":26116430,"title":"LaRose","image_url":"https:\/\/images.gr-assets.com\/books\/1445606455m\/26116430.jpg","authors":"Louise Erdrich"},{"book_id":26131641,"title":"Miller's Valley","image_url":"https:\/\/images.gr-assets.com\/books\/1447962407m\/26131641.jpg","authors":"Anna Quindlen"},{"book_id":26154406,"title":"The Passenger","image_url":"https:\/\/images.gr-assets.com\/books\/1456682660m\/26154406.jpg","authors":"Lisa Lutz"},{"book_id":26158341,"title":"The Girl With No Past","image_url":"https:\/\/images.gr-assets.com\/books\/1440440726m\/26158341.jpg","authors":"Kathryn Croft"},{"book_id":26192467,"title":"First Comes Love","image_url":"https:\/\/images.gr-assets.com\/books\/1460900049m\/26192467.jpg","authors":"Emily Giffin"},{"book_id":26192646,"title":"Sweetbitter","image_url":"https:\/\/images.gr-assets.com\/books\/1448999786m\/26192646.jpg","authors":"Stephanie Danler"},{"book_id":26200563,"title":"Hamilton: The Revolution","image_url":"https:\/\/images.gr-assets.com\/books\/1451400644m\/26200563.jpg","authors":"Lin-Manuel Miranda, Jeremy McCarter"},{"book_id":26214866,"title":"In the Clearing (Tracy Crosswhite, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1446943429m\/26214866.jpg","authors":"Robert Dugoni"},{"book_id":26224667,"title":"Wrong (Wrong, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1443007627m\/26224667.jpg","authors":"Jana Aston"},{"book_id":26228034,"title":"The Obelisk Gate (The Broken Earth, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1441406262m\/26228034.jpg","authors":"N.K. Jemisin"},{"book_id":26236956,"title":"The Obsession","image_url":"https:\/\/images.gr-assets.com\/books\/1444838367m\/26236956.jpg","authors":"Nora Roberts"},{"book_id":26245850,"title":"Before the Fall","image_url":"https:\/\/images.gr-assets.com\/books\/1462515889m\/26245850.jpg","authors":"Noah Hawley"},{"book_id":26245853,"title":"The Last Mile (Amos Decker, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1450227326m\/26245853.jpg","authors":"David Baldacci"},{"book_id":26247008,"title":"Truly Madly Guilty","image_url":"https:\/\/images.gr-assets.com\/books\/1491249206m\/26247008.jpg","authors":"Liane Moriarty"},{"book_id":26252659,"title":"Big Rock","image_url":"https:\/\/images.gr-assets.com\/books\/1485375190m\/26252659.jpg","authors":"Lauren Blakely"},{"book_id":26252859,"title":"The Hidden Oracle (The Trials of Apollo, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1449765273m\/26252859.jpg","authors":"Rick Riordan"},{"book_id":26583370,"title":"Life and Other Near-Death Experiences","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Camille Pag\u00e1n"},{"book_id":26721568,"title":"The Problem with Forever","image_url":"https:\/\/images.gr-assets.com\/books\/1452349399m\/26721568.jpg","authors":"Jennifer L. Armentrout"},{"book_id":26722820,"title":"The Curious Charms of Arthur Pepper","image_url":"https:\/\/images.gr-assets.com\/books\/1456116507m\/26722820.jpg","authors":"Phaedra Patrick"},{"book_id":26771521,"title":"Beacon 23: The Complete Novel (Beacon 23, #1-5)","image_url":"https:\/\/images.gr-assets.com\/books\/1444683708m\/26771521.jpg","authors":"Hugh Howey"},{"book_id":26827675,"title":"Troublemaker: Surviving Hollywood and Scientology","image_url":"https:\/\/images.gr-assets.com\/books\/1491248986m\/26827675.jpg","authors":"Leah Remini, Rebecca Paley"},{"book_id":26891429,"title":"The City of Mirrors (The Passage, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1447866792m\/26891429.jpg","authors":"Justin Cronin"},{"book_id":26893819,"title":"The Girls","image_url":"https:\/\/images.gr-assets.com\/books\/1492065338m\/26893819.jpg","authors":"Emma Cline"},{"book_id":27070127,"title":"Vinegar Girl","image_url":"https:\/\/images.gr-assets.com\/books\/1471553735m\/27070127.jpg","authors":"Anne Tyler"},{"book_id":27071490,"title":"Homegoing","image_url":"https:\/\/images.gr-assets.com\/books\/1448108591m\/27071490.jpg","authors":"Yaa Gyasi"},{"book_id":27083865,"title":"RoomHate","image_url":"https:\/\/images.gr-assets.com\/books\/1453991440m\/27083865.jpg","authors":"Penelope Ward"},{"book_id":27152124,"title":"Dirty English (English, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Ilsa Madden-Mills"},{"book_id":27161156,"title":"Hillbilly Elegy: A Memoir of a Family and Culture in Crisis","image_url":"https:\/\/images.gr-assets.com\/books\/1463569814m\/27161156.jpg","authors":"J.D. Vance"},{"book_id":27161845,"title":"Here's to Us","image_url":"https:\/\/images.gr-assets.com\/books\/1460900079m\/27161845.jpg","authors":"Elin Hilderbrand"},{"book_id":27170141,"title":"You'll Grow Out of It","image_url":"https:\/\/images.gr-assets.com\/books\/1462261735m\/27170141.jpg","authors":"Jessi Klein"},{"book_id":27207654,"title":"Blood Defense (Samantha Brinkman, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1454358207m\/27207654.jpg","authors":"Marcia Clark"},{"book_id":27209407,"title":"Bay of Sighs (The Guardians Trilogy, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1458263001m\/27209407.jpg","authors":"Nora Roberts"},{"book_id":27209486,"title":"Modern Lovers","image_url":"https:\/\/images.gr-assets.com\/books\/1458657735m\/27209486.jpg","authors":"Emma Straub"},{"book_id":27213121,"title":"The Black Widow (Gabriel Allon, #16)","image_url":"https:\/\/images.gr-assets.com\/books\/1460313822m\/27213121.jpg","authors":"Daniel Silva"},{"book_id":27213163,"title":"Another Brooklyn","image_url":"https:\/\/images.gr-assets.com\/books\/1491253077m\/27213163.jpg","authors":"Jacqueline Woodson"},{"book_id":27220736,"title":"Shoe Dog: A Memoir by the Creator of NIKE","image_url":"https:\/\/images.gr-assets.com\/books\/1457284880m\/27220736.jpg","authors":"Phil Knight"},{"book_id":27239265,"title":"The Short Drop (Gibson Vaughn, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Matthew FitzSimmons"},{"book_id":27252717,"title":"The Score (Off-Campus, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1493326480m\/27252717.jpg","authors":"Elle Kennedy"},{"book_id":27276262,"title":"Lily and the Octopus","image_url":"https:\/\/images.gr-assets.com\/books\/1499086357m\/27276262.jpg","authors":"Steven Rowley"},{"book_id":27362503,"title":"It Ends with Us","image_url":"https:\/\/images.gr-assets.com\/books\/1470427482m\/27362503.jpg","authors":"Colleen Hoover"},{"book_id":27401883,"title":"When I'm Gone","image_url":"https:\/\/images.gr-assets.com\/books\/1465938298m\/27401883.jpg","authors":"Emily Bleeker, Dan John Miller"},{"book_id":27406436,"title":"The Baller: A Down and Dirty Football Novel","image_url":"https:\/\/images.gr-assets.com\/books\/1447850960m\/27406436.jpg","authors":"Vi Keeland"},{"book_id":27406704,"title":"Britt-Marie Was Here","image_url":"https:\/\/images.gr-assets.com\/books\/1460442061m\/27406704.jpg","authors":"Fredrik Backman, Henning Koch, \u0633\u0645\u0627\u0646\u0647 \u067e\u0631\u0647\u06cc\u0632\u06a9\u0627\u0631\u06cc"},{"book_id":27419654,"title":"The Last Girl (The Dominion Trilogy, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Joe Hart"},{"book_id":27423283,"title":"The Moonlit Garden","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Corina Bomann, Alison Layland"},{"book_id":27810589,"title":"A Death in Sweden","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kevin Wignall"},{"book_id":27821486,"title":"Don't You Cry","image_url":"https:\/\/images.gr-assets.com\/books\/1459917062m\/27821486.jpg","authors":"Mary Kubica"},{"book_id":27824826,"title":"The Dry (Aaron Falk, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1456113132m\/27824826.jpg","authors":"Jane Harper"},{"book_id":27833670,"title":"Dark Matter","image_url":"https:\/\/images.gr-assets.com\/books\/1472119680m\/27833670.jpg","authors":"Blake Crouch"},{"book_id":27864391,"title":"The Danish Girl","image_url":"https:\/\/images.gr-assets.com\/books\/1451790312m\/27864391.jpg","authors":"David Ebershoff"},{"book_id":27868677,"title":"The House by the Lake","image_url":"https:\/\/images.gr-assets.com\/books\/1454689701m\/27868677.jpg","authors":"Ella Carey"},{"book_id":27883214,"title":"Caraval","image_url":"https:\/\/images.gr-assets.com\/books\/1465563623m\/27883214.jpg","authors":"Stephanie Garber"},{"book_id":27904311,"title":"The Hammer of Thor (Magnus Chase and the Gods of Asgard, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1463950690m\/27904311.jpg","authors":"Rick Riordan"},{"book_id":28016509,"title":"The Girl Before","image_url":"https:\/\/images.gr-assets.com\/books\/1485972587m\/28016509.jpg","authors":"J.P. Delaney"},{"book_id":28077464,"title":"Night School","image_url":"https:\/\/images.gr-assets.com\/books\/1478699350m\/28077464.jpg","authors":"Lee Child, Dick Hill"},{"book_id":28187230,"title":"The Woman in Cabin 10","image_url":"https:\/\/images.gr-assets.com\/books\/1465878007m\/28187230.jpg","authors":"Ruth Ware"},{"book_id":28204534,"title":"Paper Girls, Vol. 1 (Paper Girls, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1458578587m\/28204534.jpg","authors":"Brian K. Vaughan, Cliff Chiang, Matthew Wilson"},{"book_id":28214365,"title":"Commonwealth","image_url":"https:\/\/images.gr-assets.com\/books\/1483278132m\/28214365.jpg","authors":"Ann Patchett"},{"book_id":28220985,"title":"A Great Reckoning (Chief Inspector Armand Gamache, #12)","image_url":"https:\/\/images.gr-assets.com\/books\/1457914582m\/28220985.jpg","authors":"Louise Penny"},{"book_id":28233082,"title":"The Girl In The Ice (Detective Erika Foster, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1450369120m\/28233082.jpg","authors":"Robert Bryndza"},{"book_id":28240855,"title":"The Girl You Lost","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kathryn Croft"},{"book_id":28251002,"title":"The Nix","image_url":"https:\/\/images.gr-assets.com\/books\/1474083394m\/28251002.jpg","authors":"Nathan Hill"},{"book_id":28257707,"title":"The Subtle Art of Not Giving a F*ck: A Counterintuitive Approach to Living a Good Life","image_url":"https:\/\/images.gr-assets.com\/books\/1465761302m\/28257707.jpg","authors":"Mark Manson"},{"book_id":28260587,"title":"Empire of Storms (Throne of Glass, #5)","image_url":"https:\/\/images.gr-assets.com\/books\/1463107108m\/28260587.jpg","authors":"Sarah J. Maas"},{"book_id":28262024,"title":"The Goal (Off-Campus, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1477069102m\/28262024.jpg","authors":"Elle Kennedy"},{"book_id":28374062,"title":"The Kept Woman (Will Trent, #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1462032117m\/28374062.jpg","authors":"Karin Slaughter"},{"book_id":28390369,"title":"Swing Time","image_url":"https:\/\/images.gr-assets.com\/books\/1456491713m\/28390369.jpg","authors":"Zadie Smith"},{"book_id":28449257,"title":"The Wonder","image_url":"https:\/\/images.gr-assets.com\/books\/1463229441m\/28449257.jpg","authors":"Emma Donoghue"},{"book_id":28449270,"title":"Today Will Be Different","image_url":"https:\/\/images.gr-assets.com\/books\/1491367278m\/28449270.jpg","authors":"Maria Semple"},{"book_id":28477789,"title":"Stuck-Up Suit","image_url":"https:\/\/images.gr-assets.com\/books\/1456315337m\/28477789.jpg","authors":"Vi Keeland, Penelope Ward"},{"book_id":28587957,"title":"Small Great Things","image_url":"https:\/\/images.gr-assets.com\/books\/1468057481m\/28587957.jpg","authors":"Jodi Picoult"},{"book_id":28678119,"title":"Paper Princess (The Royals, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1476744953m\/28678119.jpg","authors":"Erin Watt, Elle Kennedy, Jen Frederick"},{"book_id":28686830,"title":"Turbo Twenty-Three (Stephanie Plum, #23)","image_url":"https:\/\/images.gr-assets.com\/books\/1453745203m\/28686830.jpg","authors":"Janet Evanovich"},{"book_id":28686840,"title":"Holding Up the Universe","image_url":"https:\/\/images.gr-assets.com\/books\/1463377718m\/28686840.jpg","authors":"Jennifer Niven"},{"book_id":28698036,"title":"Secret History (Mistborn, #3.5)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Brandon Sanderson"},{"book_id":28763485,"title":"The Sun Is Also a Star","image_url":"https:\/\/images.gr-assets.com\/books\/1459793538m\/28763485.jpg","authors":"Nicola Yoon"},{"book_id":28802599,"title":"The Light of the Fireflies","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Paul Pen, Simon Bruni"},{"book_id":28815371,"title":"The Mothers","image_url":"https:\/\/images.gr-assets.com\/books\/1460652458m\/28815371.jpg","authors":"Brit Bennett"},{"book_id":28815474,"title":"The Couple Next Door","image_url":"https:\/\/images.gr-assets.com\/books\/1471502242m\/28815474.jpg","authors":"Shari Lapena"},{"book_id":28862528,"title":"Saga, Vol. 6 (Saga, #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1486028997m\/28862528.jpg","authors":"Brian K. Vaughan, Fiona Staples"},{"book_id":28959148,"title":"We're All Damaged","image_url":"https:\/\/images.gr-assets.com\/books\/1457221465m\/28959148.jpg","authors":"Matthew Norman"},{"book_id":28965131,"title":"Behind Her Eyes","image_url":"https:\/\/images.gr-assets.com\/books\/1485279813m\/28965131.jpg","authors":"Sarah Pinborough"},{"book_id":29008738,"title":"The Bird and the Sword (The Bird and the Sword Chronicles, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1462457112m\/29008738.jpg","authors":"Amy Harmon"},{"book_id":29056083,"title":"Harry Potter and the Cursed Child - Parts One and Two (Harry Potter, #8)","image_url":"https:\/\/images.gr-assets.com\/books\/1470082995m\/29056083.jpg","authors":"John Tiffany, Jack Thorne, J.K. Rowling"},{"book_id":29072594,"title":"Born to Run","image_url":"https:\/\/images.gr-assets.com\/books\/1472979089m\/29072594.jpg","authors":"Bruce Springsteen"},{"book_id":29103028,"title":"The Queen's Poisoner (Kingfountain, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1455564888m\/29103028.jpg","authors":"Jeff Wheeler"},{"book_id":29104680,"title":"Punk 57","image_url":"https:\/\/images.gr-assets.com\/books\/1466189204m\/29104680.jpg","authors":"Penelope Douglas"},{"book_id":29154543,"title":"The Wrong Side of Goodbye (Harry Bosch, #21; Harry Bosch Universe, #26)","image_url":"https:\/\/images.gr-assets.com\/books\/1457022523m\/29154543.jpg","authors":"Michael Connelly"},{"book_id":29236299,"title":"Gemina (The Illuminae Files, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1480097137m\/29236299.jpg","authors":"Amie Kaufman, Jay Kristoff, Marie Lu"},{"book_id":29340182,"title":"Shrill: Notes from a Loud Woman","image_url":"https:\/\/images.gr-assets.com\/books\/1460015959m\/29340182.jpg","authors":"Lindy West"},{"book_id":29354916,"title":"The Whistler","image_url":"https:\/\/images.gr-assets.com\/books\/1462900031m\/29354916.jpg","authors":"John Grisham"},{"book_id":29367958,"title":"The Wall of Winnipeg and Me","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mariana Zapata"},{"book_id":29405093,"title":"The Girl with the Lower Back Tattoo","image_url":"https:\/\/images.gr-assets.com\/books\/1462657819m\/29405093.jpg","authors":"Amy Schumer"},{"book_id":29430007,"title":"Home (Myron Bolitar #11)","image_url":"https:\/\/images.gr-assets.com\/books\/1458586751m\/29430007.jpg","authors":"Harlan Coben"},{"book_id":29430012,"title":"A Gentleman in Moscow","image_url":"https:\/\/images.gr-assets.com\/books\/1459524472m\/29430012.jpg","authors":"Amor Towles"},{"book_id":29430013,"title":"The Trespasser (Dublin Murder Squad #6)","image_url":"https:\/\/images.gr-assets.com\/books\/1462998307m\/29430013.jpg","authors":"Tana French"},{"book_id":29430788,"title":"Faithful","image_url":"https:\/\/images.gr-assets.com\/books\/1478771334m\/29430788.jpg","authors":"Alice Hoffman"},{"book_id":29437949,"title":"Behind Closed Doors","image_url":"https:\/\/images.gr-assets.com\/books\/1458854462m\/29437949.jpg","authors":"B.A. Paris"},{"book_id":29519514,"title":"Broken Prince (The Royals, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1464248584m\/29519514.jpg","authors":"Erin Watt"},{"book_id":29519517,"title":"Twisted Palace (The Royals, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1474992523m\/29519517.jpg","authors":"Erin Watt"},{"book_id":29610595,"title":"Too Late","image_url":"https:\/\/images.gr-assets.com\/books\/1459520906m\/29610595.jpg","authors":"Colleen Hoover"},{"book_id":29632984,"title":"The Things We Wish Were True","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Marybeth Mayhew Whalen"},{"book_id":29639736,"title":"Everything We Keep (Everything We Keep, #1)","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Kerry Lonsdale"},{"book_id":29780253,"title":"Born a Crime: Stories From a South African Childhood","image_url":"https:\/\/images.gr-assets.com\/books\/1473867911m\/29780253.jpg","authors":"Trevor Noah"},{"book_id":29868610,"title":"Scrappy Little Nobody","image_url":"https:\/\/images.gr-assets.com\/books\/1469410391m\/29868610.jpg","authors":"Anna Kendrick"},{"book_id":29906980,"title":"Lincoln in the Bardo","image_url":"https:\/\/images.gr-assets.com\/books\/1492130850m\/29906980.jpg","authors":"George Saunders"},{"book_id":29925715,"title":"The Sister","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Louise Jensen"},{"book_id":29975458,"title":"Good as Gone","image_url":"https:\/\/images.gr-assets.com\/books\/1464329788m\/29975458.jpg","authors":"Amy Gentry"},{"book_id":29981261,"title":"The Butterfly Garden (The Collector #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1461392121m\/29981261.jpg","authors":"Dot Hutchison"},{"book_id":29991719,"title":"Royally Screwed (Royally, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1463068765m\/29991719.jpg","authors":"Emma Chase"},{"book_id":30002998,"title":"Two By Two","image_url":"https:\/\/images.gr-assets.com\/books\/1461620101m\/30002998.jpg","authors":"Nicholas Sparks"},{"book_id":30008702,"title":"Nutshell","image_url":"https:\/\/images.gr-assets.com\/books\/1498680109m\/30008702.jpg","authors":"Ian McEwan"},{"book_id":30065028,"title":"Fantastic Beasts and Where to Find Them: The Original Screenplay","image_url":"https:\/\/images.gr-assets.com\/books\/1476913365m\/30065028.jpg","authors":"J.K. Rowling"},{"book_id":30226723,"title":"King's Cage (Red Queen, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1467121158m\/30226723.jpg","authors":"Victoria Aveyard"},{"book_id":30253700,"title":"Anti-Stepbrother","image_url":"https:\/\/images.gr-assets.com\/books\/1465493571m\/30253700.jpg","authors":"Tijan"},{"book_id":30253864,"title":"Talking as Fast as I Can: From Gilmore Girls to Gilmore Girls, and Everything in Between","image_url":"https:\/\/images.gr-assets.com\/books\/1492797634m\/30253864.jpg","authors":"Lauren Graham"},{"book_id":30314465,"title":"No Man's Land (John Puller, #4)","image_url":"https:\/\/images.gr-assets.com\/books\/1469561999m\/30314465.jpg","authors":"David Baldacci"},{"book_id":30364931,"title":"Neighbor Dearest","image_url":"https:\/\/images.gr-assets.com\/books\/1467960990m\/30364931.jpg","authors":"Penelope Ward"},{"book_id":30555488,"title":"The Underground Railroad","image_url":"https:\/\/images.gr-assets.com\/books\/1493178362m\/30555488.jpg","authors":"Colson Whitehead"},{"book_id":30831912,"title":"Norse Mythology","image_url":"https:\/\/images.gr-assets.com\/books\/1473864212m\/30831912.jpg","authors":"Neil Gaiman"},{"book_id":30839185,"title":"Vicious (Sinners of Saint, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1481945407m\/30839185.jpg","authors":"L.J. Shen"},{"book_id":31140847,"title":"Bossman","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Vi Keeland"},{"book_id":31176886,"title":"The Chemist","image_url":"https:\/\/images.gr-assets.com\/books\/1468944057m\/31176886.jpg","authors":"Stephenie Meyer"},{"book_id":31194270,"title":"Evelyn, After","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Victoria Helen Stone"},{"book_id":31538614,"title":"Short Stories from Hogwarts of Power, Politics and Pesky Poltergeists (Pottermore Presents, #2)","image_url":"https:\/\/images.gr-assets.com\/books\/1471436601m\/31538614.jpg","authors":"J.K. Rowling, MinaLima"},{"book_id":31538635,"title":"Short Stories from Hogwarts of Heroism, Hardship and Dangerous Hobbies (Pottermore Presents, #1)","image_url":"https:\/\/images.gr-assets.com\/books\/1471436733m\/31538635.jpg","authors":"J.K. Rowling, MinaLima"},{"book_id":31538647,"title":"Hogwarts: An Incomplete and Unreliable Guide (Pottermore Presents, #3)","image_url":"https:\/\/images.gr-assets.com\/books\/1502156557m\/31538647.jpg","authors":"J.K. Rowling"},{"book_id":31845516,"title":"Love Warrior","image_url":"https:\/\/images.gr-assets.com\/books\/1473164102m\/31845516.jpg","authors":"Glennon Doyle Melton"},{"book_id":32075671,"title":"The Hate U Give","image_url":"https:\/\/images.gr-assets.com\/books\/1476284759m\/32075671.jpg","authors":"Angie Thomas"},{"book_id":32848471,"title":"Egomaniac","image_url":"https:\/\/images.gr-assets.com\/books\/1479387807m\/32848471.jpg","authors":"Vi Keeland"},{"book_id":33288638,"title":"Wait for It","image_url":"https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png","authors":"Mariana Zapata"}] \ No newline at end of file diff --git a/danfojs-node/tests/samples/titanic.csv b/danfojs-node/tests/samples/titanic.csv deleted file mode 100644 index 56117b2b..00000000 --- a/danfojs-node/tests/samples/titanic.csv +++ /dev/null @@ -1,888 +0,0 @@ -Survived,Pclass,Name,Sex,Age,Siblings/Spouses Aboard,Parents/Children Aboard,Fare -0,3,Mr. Owen Harris Braund,male,22,1,0,7.25 -1,1,Mrs. John Bradley (Florence Briggs Thayer) Cumings,female,38,1,0,71.2833 -1,3,Miss. Laina Heikkinen,female,26,0,0,7.925 -1,1,Mrs. Jacques Heath (Lily May Peel) Futrelle,female,35,1,0,53.1 -0,3,Mr. William Henry Allen,male,35,0,0,8.05 -0,3,Mr. James Moran,male,27,0,0,8.4583 -0,1,Mr. Timothy J McCarthy,male,54,0,0,51.8625 -0,3,Master. Gosta Leonard Palsson,male,2,3,1,21.075 -1,3,Mrs. Oscar W (Elisabeth Vilhelmina Berg) Johnson,female,27,0,2,11.1333 -1,2,Mrs. Nicholas (Adele Achem) Nasser,female,14,1,0,30.0708 -1,3,Miss. Marguerite Rut Sandstrom,female,4,1,1,16.7 -1,1,Miss. Elizabeth Bonnell,female,58,0,0,26.55 -0,3,Mr. William Henry Saundercock,male,20,0,0,8.05 -0,3,Mr. Anders Johan Andersson,male,39,1,5,31.275 -0,3,Miss. Hulda Amanda Adolfina Vestrom,female,14,0,0,7.8542 -1,2,Mrs. (Mary D Kingcome) Hewlett,female,55,0,0,16 -0,3,Master. Eugene Rice,male,2,4,1,29.125 -1,2,Mr. Charles Eugene Williams,male,23,0,0,13 -0,3,Mrs. Julius (Emelia Maria Vandemoortele) Vander Planke,female,31,1,0,18 -1,3,Mrs. Fatima Masselmani,female,22,0,0,7.225 -0,2,Mr. Joseph J Fynney,male,35,0,0,26 -1,2,Mr. Lawrence Beesley,male,34,0,0,13 -1,3,Miss. Anna McGowan,female,15,0,0,8.0292 -1,1,Mr. William Thompson Sloper,male,28,0,0,35.5 -0,3,Miss. Torborg Danira Palsson,female,8,3,1,21.075 -1,3,Mrs. Carl Oscar (Selma Augusta Emilia Johansson) Asplund,female,38,1,5,31.3875 -0,3,Mr. Farred Chehab Emir,male,26,0,0,7.225 -0,1,Mr. Charles Alexander Fortune,male,19,3,2,263 -1,3,Miss. Ellen O'Dwyer,female,24,0,0,7.8792 -0,3,Mr. Lalio Todoroff,male,23,0,0,7.8958 -0,1,Don. Manuel E Uruchurtu,male,40,0,0,27.7208 -1,1,Mrs. William Augustus (Marie Eugenie) Spencer,female,48,1,0,146.5208 -1,3,Miss. Mary Agatha Glynn,female,18,0,0,7.75 -0,2,Mr. Edward H Wheadon,male,66,0,0,10.5 -0,1,Mr. Edgar Joseph Meyer,male,28,1,0,82.1708 -0,1,Mr. Alexander Oskar Holverson,male,42,1,0,52 -1,3,Mr. Hanna Mamee,male,18,0,0,7.2292 -0,3,Mr. Ernest Charles Cann,male,21,0,0,8.05 -0,3,Miss. Augusta Maria Vander Planke,female,18,2,0,18 -1,3,Miss. Jamila Nicola-Yarred,female,14,1,0,11.2417 -0,3,Mrs. Johan (Johanna Persdotter Larsson) Ahlin,female,40,1,0,9.475 -0,2,Mrs. William John Robert (Dorothy Ann Wonnacott) Turpin,female,27,1,0,21 -1,2,Miss. Simonne Marie Anne Andree Laroche,female,3,1,2,41.5792 -1,3,Miss. Margaret Delia Devaney,female,19,0,0,7.8792 -0,3,Mr. William John Rogers,male,30,0,0,8.05 -0,3,Mr. Denis Lennon,male,20,1,0,15.5 -1,3,Miss. Bridget O'Driscoll,female,27,0,0,7.75 -0,3,Mr. Youssef Samaan,male,16,2,0,21.6792 -0,3,Mrs. Josef (Josefine Franchi) Arnold-Franchi,female,18,1,0,17.8 -0,3,Master. Juha Niilo Panula,male,7,4,1,39.6875 -0,3,Mr. Richard Cater Nosworthy,male,21,0,0,7.8 -1,1,Mrs. Henry Sleeper (Myna Haxtun) Harper,female,49,1,0,76.7292 -1,2,Mrs. Lizzie (Elizabeth Anne Wilkinson) Faunthorpe,female,29,1,0,26 -0,1,Mr. Engelhart Cornelius Ostby,male,65,0,1,61.9792 -1,1,Mr. Hugh Woolner,male,46,0,0,35.5 -1,2,Miss. Emily Rugg,female,21,0,0,10.5 -0,3,Mr. Mansouer Novel,male,28.5,0,0,7.2292 -1,2,Miss. Constance Mirium West,female,5,1,2,27.75 -0,3,Master. William Frederick Goodwin,male,11,5,2,46.9 -0,3,Mr. Orsen Sirayanian,male,22,0,0,7.2292 -1,1,Miss. Amelie Icard,female,38,0,0,80 -0,1,Mr. Henry Birkhardt Harris,male,45,1,0,83.475 -0,3,Master. Harald Skoog,male,4,3,2,27.9 -0,1,Mr. Albert A Stewart,male,64,0,0,27.7208 -1,3,Master. Gerios Moubarek,male,7,1,1,15.2458 -1,2,Mrs. (Elizabeth Ramell) Nye,female,29,0,0,10.5 -0,3,Mr. Ernest James Crease,male,19,0,0,8.1583 -1,3,Miss. Erna Alexandra Andersson,female,17,4,2,7.925 -0,3,Mr. Vincenz Kink,male,26,2,0,8.6625 -0,2,Mr. Stephen Curnow Jenkin,male,32,0,0,10.5 -0,3,Miss. Lillian Amy Goodwin,female,16,5,2,46.9 -0,2,Mr. Ambrose Jr Hood,male,21,0,0,73.5 -0,3,Mr. Apostolos Chronopoulos,male,26,1,0,14.4542 -1,3,Mr. Lee Bing,male,32,0,0,56.4958 -0,3,Mr. Sigurd Hansen Moen,male,25,0,0,7.65 -0,3,Mr. Ivan Staneff,male,23,0,0,7.8958 -0,3,Mr. Rahamin Haim Moutal,male,28,0,0,8.05 -1,2,Master. Alden Gates Caldwell,male,0.83,0,2,29 -1,3,Miss. Elizabeth Dowdell,female,30,0,0,12.475 -0,3,Mr. Achille Waelens,male,22,0,0,9 -1,3,Mr. Jan Baptist Sheerlinck,male,29,0,0,9.5 -1,3,Miss. Brigdet Delia McDermott,female,31,0,0,7.7875 -0,1,Mr. Francisco M Carrau,male,28,0,0,47.1 -1,2,Miss. Bertha Ilett,female,17,0,0,10.5 -1,3,Mrs. Karl Alfred (Maria Mathilda Gustafsson) Backstrom,female,33,3,0,15.85 -0,3,Mr. William Neal Ford,male,16,1,3,34.375 -0,3,Mr. Selman Francis Slocovski,male,20,0,0,8.05 -1,1,Miss. Mabel Helen Fortune,female,23,3,2,263 -0,3,Mr. Francesco Celotti,male,24,0,0,8.05 -0,3,Mr. Emil Christmann,male,29,0,0,8.05 -0,3,Mr. Paul Edvin Andreasson,male,20,0,0,7.8542 -0,1,Mr. Herbert Fuller Chaffee,male,46,1,0,61.175 -0,3,Mr. Bertram Frank Dean,male,26,1,2,20.575 -0,3,Mr. Daniel Coxon,male,59,0,0,7.25 -0,3,Mr. Charles Joseph Shorney,male,22,0,0,8.05 -0,1,Mr. George B Goldschmidt,male,71,0,0,34.6542 -1,1,Mr. William Bertram Greenfield,male,23,0,1,63.3583 -1,2,Mrs. John T (Ada Julia Bone) Doling,female,34,0,1,23 -0,2,Mr. Sinai Kantor,male,34,1,0,26 -0,3,Miss. Matilda Petranec,female,28,0,0,7.8958 -0,3,Mr. Pastcho Petroff,male,29,0,0,7.8958 -0,1,Mr. Richard Frasar White,male,21,0,1,77.2875 -0,3,Mr. Gustaf Joel Johansson,male,33,0,0,8.6542 -0,3,Mr. Anders Vilhelm Gustafsson,male,37,2,0,7.925 -0,3,Mr. Stoytcho Mionoff,male,28,0,0,7.8958 -1,3,Miss. Anna Kristine Salkjelsvik,female,21,0,0,7.65 -1,3,Mr. Albert Johan Moss,male,29,0,0,7.775 -0,3,Mr. Tido Rekic,male,38,0,0,7.8958 -1,3,Miss. Bertha Moran,female,28,1,0,24.15 -0,1,Mr. Walter Chamberlain Porter,male,47,0,0,52 -0,3,Miss. Hileni Zabour,female,14.5,1,0,14.4542 -0,3,Mr. David John Barton,male,22,0,0,8.05 -0,3,Miss. Katriina Jussila,female,20,1,0,9.825 -0,3,Miss. Malake Attalah,female,17,0,0,14.4583 -0,3,Mr. Edvard Pekoniemi,male,21,0,0,7.925 -0,3,Mr. Patrick Connors,male,70.5,0,0,7.75 -0,2,Mr. William John Robert Turpin,male,29,1,0,21 -0,1,Mr. Quigg Edmond Baxter,male,24,0,1,247.5208 -0,3,Miss. Ellis Anna Maria Andersson,female,2,4,2,31.275 -0,2,Mr. Stanley George Hickman,male,21,2,0,73.5 -0,3,Mr. Leonard Charles Moore,male,19,0,0,8.05 -0,2,Mr. Nicholas Nasser,male,32.5,1,0,30.0708 -1,2,Miss. Susan Webber,female,32.5,0,0,13 -0,1,Mr. Percival Wayland White,male,54,0,1,77.2875 -1,3,Master. Elias Nicola-Yarred,male,12,1,0,11.2417 -0,3,Mr. Martin McMahon,male,19,0,0,7.75 -1,3,Mr. Fridtjof Arne Madsen,male,24,0,0,7.1417 -1,3,Miss. Anna Peter,female,2,1,1,22.3583 -0,3,Mr. Johan Ekstrom,male,45,0,0,6.975 -0,3,Mr. Jozef Drazenoic,male,33,0,0,7.8958 -0,3,Mr. Domingos Fernandeo Coelho,male,20,0,0,7.05 -0,3,Mrs. Alexander A (Grace Charity Laury) Robins,female,47,1,0,14.5 -1,2,Mrs. Leopold (Mathilde Francoise Pede) Weisz,female,29,1,0,26 -0,2,Mr. Samuel James Hayden Sobey,male,25,0,0,13 -0,2,Mr. Emile Richard,male,23,0,0,15.0458 -1,1,Miss. Helen Monypeny Newsom,female,19,0,2,26.2833 -0,1,Mr. Jacques Heath Futrelle,male,37,1,0,53.1 -0,3,Mr. Olaf Elon Osen,male,16,0,0,9.2167 -0,1,Mr. Victor Giglio,male,24,0,0,79.2 -0,3,Mrs. Joseph (Sultana) Boulos,female,40,0,2,15.2458 -1,3,Miss. Anna Sofia Nysten,female,22,0,0,7.75 -1,3,Mrs. Pekka Pietari (Elin Matilda Dolck) Hakkarainen,female,24,1,0,15.85 -0,3,Mr. Jeremiah Burke,male,19,0,0,6.75 -0,2,Mr. Edgardo Samuel Andrew,male,18,0,0,11.5 -0,2,Mr. Joseph Charles Nicholls,male,19,1,1,36.75 -1,3,Mr. August Edvard Andersson,male,27,0,0,7.7958 -0,3,Miss. Robina Maggie Ford,female,9,2,2,34.375 -0,2,Mr. Michel Navratil,male,36.5,0,2,26 -0,2,Rev. Thomas Roussel Davids Byles,male,42,0,0,13 -0,2,Rev. Robert James Bateman,male,51,0,0,12.525 -1,1,Mrs. Thomas (Edith Wearne) Pears,female,22,1,0,66.6 -0,3,Mr. Alfonzo Meo,male,55.5,0,0,8.05 -0,3,Mr. Austin Blyler van Billiard,male,40.5,0,2,14.5 -0,3,Mr. Ole Martin Olsen,male,27,0,0,7.3125 -0,1,Mr. Charles Duane Williams,male,51,0,1,61.3792 -1,3,Miss. Katherine Gilnagh,female,16,0,0,7.7333 -0,3,Mr. Harry Corn,male,30,0,0,8.05 -0,3,Mr. Mile Smiljanic,male,37,0,0,8.6625 -0,3,Master. Thomas Henry Sage,male,5,8,2,69.55 -0,3,Mr. John Hatfield Cribb,male,44,0,1,16.1 -1,2,Mrs. James (Elizabeth Inglis Milne) Watt,female,40,0,0,15.75 -0,3,Mr. John Viktor Bengtsson,male,26,0,0,7.775 -0,3,Mr. Jovo Calic,male,17,0,0,8.6625 -0,3,Master. Eino Viljami Panula,male,1,4,1,39.6875 -1,3,Master. Frank John William Goldsmith,male,9,0,2,20.525 -1,1,Mrs. (Edith Martha Bowerman) Chibnall,female,48,0,1,55 -0,3,Mrs. William (Anna Bernhardina Karlsson) Skoog,female,45,1,4,27.9 -0,1,Mr. John D Baumann,male,60,0,0,25.925 -0,3,Mr. Lee Ling,male,28,0,0,56.4958 -0,1,Mr. Wyckoff Van der hoef,male,61,0,0,33.5 -0,3,Master. Arthur Rice,male,4,4,1,29.125 -1,3,Miss. Eleanor Ileen Johnson,female,1,1,1,11.1333 -0,3,Mr. Antti Wilhelm Sivola,male,21,0,0,7.925 -0,1,Mr. James Clinch Smith,male,56,0,0,30.6958 -0,3,Mr. Klas Albin Klasen,male,18,1,1,7.8542 -0,3,Master. Henry Forbes Lefebre,male,5,3,1,25.4667 -0,1,Miss. Ann Elizabeth Isham,female,50,0,0,28.7125 -0,2,Mr. Reginald Hale,male,30,0,0,13 -0,3,Mr. Lionel Leonard,male,36,0,0,0 -0,3,Miss. Constance Gladys Sage,female,8,8,2,69.55 -0,2,Mr. Rene Pernot,male,39,0,0,15.05 -0,3,Master. Clarence Gustaf Hugo Asplund,male,9,4,2,31.3875 -1,2,Master. Richard F Becker,male,1,2,1,39 -1,3,Miss. Luise Gretchen Kink-Heilmann,female,4,0,2,22.025 -0,1,Mr. Hugh Roscoe Rood,male,39,0,0,50 -1,3,Mrs. Thomas (Johanna Godfrey) O'Brien,female,26,1,0,15.5 -1,1,Mr. Charles Hallace Romaine,male,45,0,0,26.55 -0,3,Mr. John Bourke,male,40,1,1,15.5 -0,3,Mr. Stjepan Turcin,male,36,0,0,7.8958 -1,2,Mrs. (Rosa) Pinsky,female,32,0,0,13 -0,2,Mr. William Carbines,male,19,0,0,13 -1,3,Miss. Carla Christine Nielsine Andersen-Jensen,female,19,1,0,7.8542 -1,2,Master. Michel M Navratil,male,3,1,1,26 -1,1,Mrs. James Joseph (Margaret Tobin) Brown,female,44,0,0,27.7208 -1,1,Miss. Elise Lurette,female,58,0,0,146.5208 -0,3,Mr. Robert Mernagh,male,28,0,0,7.75 -0,3,Mr. Karl Siegwart Andreas Olsen,male,42,0,1,8.4042 -1,3,Miss. Margaret Madigan,female,21,0,0,7.75 -0,2,Miss. Henriette Yrois,female,24,0,0,13 -0,3,Mr. Nestor Cyriel Vande Walle,male,28,0,0,9.5 -0,3,Mr. Frederick Sage,male,17,8,2,69.55 -0,3,Mr. Jakob Alfred Johanson,male,34,0,0,6.4958 -0,3,Mr. Gerious Youseff,male,45.5,0,0,7.225 -1,3,Mr. Gurshon Cohen,male,18,0,0,8.05 -0,3,Miss. Telma Matilda Strom,female,2,0,1,10.4625 -0,3,Mr. Karl Alfred Backstrom,male,32,1,0,15.85 -1,3,Mr. Nassef Cassem Albimona,male,26,0,0,18.7875 -1,3,Miss. Helen Carr,female,16,0,0,7.75 -1,1,Mr. Henry Blank,male,40,0,0,31 -0,3,Mr. Ahmed Ali,male,24,0,0,7.05 -1,2,Miss. Clear Annie Cameron,female,35,0,0,21 -0,3,Mr. John Henry Perkin,male,22,0,0,7.25 -0,2,Mr. Hans Kristensen Givard,male,30,0,0,13 -0,3,Mr. Philip Kiernan,male,22,1,0,7.75 -1,1,Miss. Madeleine Newell,female,31,1,0,113.275 -1,3,Miss. Eliina Honkanen,female,27,0,0,7.925 -0,2,Mr. Sidney Samuel Jacobsohn,male,42,1,0,27 -1,1,Miss. Albina Bazzani,female,32,0,0,76.2917 -0,2,Mr. Walter Harris,male,30,0,0,10.5 -1,3,Mr. Victor Francis Sunderland,male,16,0,0,8.05 -0,2,Mr. James H Bracken,male,27,0,0,13 -0,3,Mr. George Henry Green,male,51,0,0,8.05 -0,3,Mr. Christo Nenkoff,male,22,0,0,7.8958 -1,1,Mr. Frederick Maxfield Hoyt,male,38,1,0,90 -0,3,Mr. Karl Ivar Sven Berglund,male,22,0,0,9.35 -1,2,Mr. William John Mellors,male,19,0,0,10.5 -0,3,Mr. John Hall Lovell,male,20.5,0,0,7.25 -0,2,Mr. Arne Jonas Fahlstrom,male,18,0,0,13 -0,3,Miss. Mathilde Lefebre,female,12,3,1,25.4667 -1,1,Mrs. Henry Birkhardt (Irene Wallach) Harris,female,35,1,0,83.475 -0,3,Mr. Bengt Edvin Larsson,male,29,0,0,7.775 -0,2,Mr. Ernst Adolf Sjostedt,male,59,0,0,13.5 -1,3,Miss. Lillian Gertrud Asplund,female,5,4,2,31.3875 -0,2,Mr. Robert William Norman Leyson,male,24,0,0,10.5 -0,3,Miss. Alice Phoebe Harknett,female,21,0,0,7.55 -0,2,Mr. Stephen Hold,male,44,1,0,26 -1,2,Miss. Marjorie Collyer,female,8,0,2,26.25 -0,2,Mr. Frederick William Pengelly,male,19,0,0,10.5 -0,2,Mr. George Henry Hunt,male,33,0,0,12.275 -0,3,Miss. Thamine Zabour,female,19,1,0,14.4542 -1,3,Miss. Katherine Murphy,female,18,1,0,15.5 -0,2,Mr. Reginald Charles Coleridge,male,29,0,0,10.5 -0,3,Mr. Matti Alexanteri Maenpaa,male,22,0,0,7.125 -0,3,Mr. Sleiman Attalah,male,30,0,0,7.225 -0,1,Dr. William Edward Minahan,male,44,2,0,90 -0,3,Miss. Agda Thorilda Viktoria Lindahl,female,25,0,0,7.775 -1,2,Mrs. William (Anna) Hamalainen,female,24,0,2,14.5 -1,1,Mr. Richard Leonard Beckwith,male,37,1,1,52.5542 -0,2,Rev. Ernest Courtenay Carter,male,54,1,0,26 -0,3,Mr. James George Reed,male,18,0,0,7.25 -0,3,Mrs. Wilhelm (Elna Matilda Persson) Strom,female,29,1,1,10.4625 -0,1,Mr. William Thomas Stead,male,62,0,0,26.55 -0,3,Mr. William Arthur Lobb,male,30,1,0,16.1 -0,3,Mrs. Viktor (Helena Wilhelmina) Rosblom,female,41,0,2,20.2125 -1,3,Mrs. Darwis (Hanne Youssef Razi) Touma,female,29,0,2,15.2458 -1,1,Mrs. Gertrude Maybelle Thorne,female,38,0,0,79.2 -1,1,Miss. Gladys Cherry,female,30,0,0,86.5 -1,1,Miss. Anna Ward,female,35,0,0,512.3292 -1,2,Mrs. (Lutie Davis) Parrish,female,50,0,1,26 -1,3,Master. Edvin Rojj Felix Asplund,male,3,4,2,31.3875 -0,1,Mr. Emil Taussig,male,52,1,1,79.65 -0,1,Mr. William Harrison,male,40,0,0,0 -0,3,Miss. Delia Henry,female,21,0,0,7.75 -0,2,Mr. David Reeves,male,36,0,0,10.5 -0,3,Mr. Ernesti Arvid Panula,male,16,4,1,39.6875 -1,3,Mr. Ernst Ulrik Persson,male,25,1,0,7.775 -1,1,Mrs. William Thompson (Edith Junkins) Graham,female,58,0,1,153.4625 -1,1,Miss. Amelia Bissette,female,35,0,0,135.6333 -0,1,Mr. Alexander Cairns,male,28,0,0,31 -1,3,Mr. William Henry Tornquist,male,25,0,0,0 -1,2,Mrs. (Elizabeth Anne Maidment) Mellinger,female,41,0,1,19.5 -0,1,Mr. Charles H Natsch,male,37,0,1,29.7 -1,3,Miss. Hanora Healy,female,33,0,0,7.75 -1,1,Miss. Kornelia Theodosia Andrews,female,63,1,0,77.9583 -0,3,Miss. Augusta Charlotta Lindblom,female,45,0,0,7.75 -0,2,Mr. Francis Parkes,male,21,0,0,0 -0,3,Master. Eric Rice,male,7,4,1,29.125 -1,3,Mrs. Stanton (Rosa Hunt) Abbott,female,35,1,1,20.25 -0,3,Mr. Frank Duane,male,65,0,0,7.75 -0,3,Mr. Nils Johan Goransson Olsson,male,28,0,0,7.8542 -0,3,Mr. Alfons de Pelsmaeker,male,16,0,0,9.5 -1,3,Mr. Edward Arthur Dorking,male,19,0,0,8.05 -0,1,Mr. Richard William Smith,male,57,0,0,26 -0,3,Mr. Ivan Stankovic,male,33,0,0,8.6625 -1,3,Mr. Theodore de Mulder,male,30,0,0,9.5 -0,3,Mr. Penko Naidenoff,male,22,0,0,7.8958 -1,2,Mr. Masabumi Hosono,male,42,0,0,13 -1,3,Miss. Kate Connolly,female,22,0,0,7.75 -1,1,Miss. Ellen Barber,female,26,0,0,78.85 -1,1,Mrs. Dickinson H (Helen Walton) Bishop,female,19,1,0,91.0792 -0,2,Mr. Rene Jacques Levy,male,36,0,0,12.875 -0,3,Miss. Aloisia Haas,female,24,0,0,8.85 -0,3,Mr. Ivan Mineff,male,24,0,0,7.8958 -0,1,Mr. Ervin G Lewy,male,30,0,0,27.7208 -0,3,Mr. Mansour Hanna,male,23.5,0,0,7.2292 -0,1,Miss. Helen Loraine Allison,female,2,1,2,151.55 -1,1,Mr. Adolphe Saalfeld,male,47,0,0,30.5 -1,1,Mrs. James (Helene DeLaudeniere Chaput) Baxter,female,50,0,1,247.5208 -1,3,Miss. Anna Katherine Kelly,female,20,0,0,7.75 -1,3,Mr. Bernard McCoy,male,24,2,0,23.25 -0,3,Mr. William Cahoone Jr Johnson,male,19,0,0,0 -1,2,Miss. Nora A Keane,female,46,0,0,12.35 -0,3,Mr. Howard Hugh Williams,male,28,0,0,8.05 -1,1,Master. Hudson Trevor Allison,male,0.92,1,2,151.55 -1,1,Miss. Margaret Fleming,female,42,0,0,110.8833 -1,1,Mrs. Victor de Satode (Maria Josefa Perez de Soto y Vallejo) Penasco y Castellana,female,17,1,0,108.9 -0,2,Mr. Samuel Abelson,male,30,1,0,24 -1,1,Miss. Laura Mabel Francatelli,female,30,0,0,56.9292 -1,1,Miss. Margaret Bechstein Hays,female,24,0,0,83.1583 -1,1,Miss. Emily Borie Ryerson,female,18,2,2,262.375 -0,2,Mrs. William (Anna Sylfven) Lahtinen,female,26,1,1,26 -0,3,Mr. Ignjac Hendekovic,male,28,0,0,7.8958 -0,2,Mr. Benjamin Hart,male,43,1,1,26.25 -1,3,Miss. Helmina Josefina Nilsson,female,26,0,0,7.8542 -1,2,Mrs. Sinai (Miriam Sternin) Kantor,female,24,1,0,26 -0,2,Dr. Ernest Moraweck,male,54,0,0,14 -1,1,Miss. Mary Natalie Wick,female,31,0,2,164.8667 -1,1,Mrs. Frederic Oakley (Margaretta Corning Stone) Spedden,female,40,1,1,134.5 -0,3,Mr. Samuel Dennis,male,22,0,0,7.25 -0,3,Mr. Yoto Danoff,male,27,0,0,7.8958 -1,2,Miss. Hilda Mary Slayter,female,30,0,0,12.35 -1,2,Mrs. Albert Francis (Sylvia Mae Harbaugh) Caldwell,female,22,1,1,29 -0,3,Mr. George John Jr Sage,male,20,8,2,69.55 -1,1,Miss. Marie Grice Young,female,36,0,0,135.6333 -0,3,Mr. Johan Hansen Nysveen,male,61,0,0,6.2375 -1,2,Mrs. (Ada E Hall) Ball,female,36,0,0,13 -1,3,Mrs. Frank John (Emily Alice Brown) Goldsmith,female,31,1,1,20.525 -1,1,Miss. Jean Gertrude Hippach,female,16,0,1,57.9792 -1,3,Miss. Agnes McCoy,female,28,2,0,23.25 -0,1,Mr. Austen Partner,male,45.5,0,0,28.5 -0,1,Mr. George Edward Graham,male,38,0,1,153.4625 -0,3,Mr. Leo Edmondus Vander Planke,male,16,2,0,18 -1,1,Mrs. Henry William (Clara Heinsheimer) Frauenthal,female,42,1,0,133.65 -0,3,Mr. Mitto Denkoff,male,30,0,0,7.8958 -0,1,Mr. Thomas Clinton Pears,male,29,1,0,66.6 -1,1,Miss. Elizabeth Margaret Burns,female,41,0,0,134.5 -1,3,Mr. Karl Edwart Dahl,male,45,0,0,8.05 -0,1,Mr. Stephen Weart Blackwell,male,45,0,0,35.5 -1,2,Master. Edmond Roger Navratil,male,2,1,1,26 -1,1,Miss. Alice Elizabeth Fortune,female,24,3,2,263 -0,2,Mr. Erik Gustaf Collander,male,28,0,0,13 -0,2,Mr. Charles Frederick Waddington Sedgwick,male,25,0,0,13 -0,2,Mr. Stanley Hubert Fox,male,36,0,0,13 -1,2,Miss. Amelia Brown,female,24,0,0,13 -1,2,Miss. Marion Elsie Smith,female,40,0,0,13 -1,3,Mrs. Thomas Henry (Mary E Finck) Davison,female,34,1,0,16.1 -1,3,Master. William Loch Coutts,male,3,1,1,15.9 -0,3,Mr. Jovan Dimic,male,42,0,0,8.6625 -0,3,Mr. Nils Martin Odahl,male,23,0,0,9.225 -0,1,Mr. Fletcher Fellows Williams-Lambert,male,43,0,0,35 -0,3,Mr. Tannous Elias,male,15,1,1,7.2292 -0,3,Mr. Josef Arnold-Franchi,male,25,1,0,17.8 -0,3,Mr. Wazli Yousif,male,23,0,0,7.225 -0,3,Mr. Leo Peter Vanden Steen,male,28,0,0,9.5 -1,1,Miss. Elsie Edith Bowerman,female,22,0,1,55 -0,2,Miss. Annie Clemmer Funk,female,38,0,0,13 -1,3,Miss. Mary McGovern,female,22,0,0,7.8792 -1,3,Miss. Helen Mary Mockler,female,23,0,0,7.8792 -0,3,Mr. Wilhelm Skoog,male,40,1,4,27.9 -0,2,Mr. Sebastiano del Carlo,male,29,1,0,27.7208 -0,3,Mrs. (Catherine David) Barbara,female,45,0,1,14.4542 -0,3,Mr. Adola Asim,male,35,0,0,7.05 -0,3,Mr. Thomas O'Brien,male,27,1,0,15.5 -0,3,Mr. Mauritz Nils Martin Adahl,male,30,0,0,7.25 -1,1,Mrs. Frank Manley (Anna Sophia Atkinson) Warren,female,60,1,0,75.25 -1,3,Mrs. (Mantoura Boulos) Moussa,female,35,0,0,7.2292 -1,3,Miss. Annie Jermyn,female,22,0,0,7.75 -1,1,Mme. Leontine Pauline Aubart,female,24,0,0,69.3 -1,1,Mr. George Achilles Harder,male,25,1,0,55.4417 -0,3,Mr. Jakob Alfred Wiklund,male,18,1,0,6.4958 -0,3,Mr. William Thomas Beavan,male,19,0,0,8.05 -0,1,Mr. Sante Ringhini,male,22,0,0,135.6333 -0,3,Miss. Stina Viola Palsson,female,3,3,1,21.075 -1,1,Mrs. Edgar Joseph (Leila Saks) Meyer,female,25,1,0,82.1708 -1,3,Miss. Aurora Adelia Landergren,female,22,0,0,7.25 -0,1,Mr. Harry Elkins Widener,male,27,0,2,211.5 -0,3,Mr. Tannous Betros,male,20,0,0,4.0125 -0,3,Mr. Karl Gideon Gustafsson,male,19,0,0,7.775 -1,1,Miss. Rosalie Bidois,female,42,0,0,227.525 -1,3,Miss. Maria Nakid,female,1,0,2,15.7417 -0,3,Mr. Juho Tikkanen,male,32,0,0,7.925 -1,1,Mrs. Alexander Oskar (Mary Aline Towner) Holverson,female,35,1,0,52 -0,3,Mr. Vasil Plotcharsky,male,27,0,0,7.8958 -0,2,Mr. Charles Henry Davies,male,18,0,0,73.5 -0,3,Master. Sidney Leonard Goodwin,male,1,5,2,46.9 -1,2,Miss. Kate Buss,female,36,0,0,13 -0,3,Mr. Matthew Sadlier,male,19,0,0,7.7292 -1,2,Miss. Bertha Lehmann,female,17,0,0,12 -1,1,Mr. William Ernest Carter,male,36,1,2,120 -1,3,Mr. Carl Olof Jansson,male,21,0,0,7.7958 -0,3,Mr. Johan Birger Gustafsson,male,28,2,0,7.925 -1,1,Miss. Marjorie Newell,female,23,1,0,113.275 -1,3,Mrs. Hjalmar (Agnes Charlotta Bengtsson) Sandstrom,female,24,0,2,16.7 -0,3,Mr. Erik Johansson,male,22,0,0,7.7958 -0,3,Miss. Elina Olsson,female,31,0,0,7.8542 -0,2,Mr. Peter David McKane,male,46,0,0,26 -0,2,Dr. Alfred Pain,male,23,0,0,10.5 -1,2,Mrs. William H (Jessie L) Trout,female,28,0,0,12.65 -1,3,Mr. Juha Niskanen,male,39,0,0,7.925 -0,3,Mr. John Adams,male,26,0,0,8.05 -0,3,Miss. Mari Aina Jussila,female,21,1,0,9.825 -0,3,Mr. Pekka Pietari Hakkarainen,male,28,1,0,15.85 -0,3,Miss. Marija Oreskovic,female,20,0,0,8.6625 -0,2,Mr. Shadrach Gale,male,34,1,0,21 -0,3,Mr. Carl/Charles Peter Widegren,male,51,0,0,7.75 -1,2,Master. William Rowe Richards,male,3,1,1,18.75 -0,3,Mr. Hans Martin Monsen Birkeland,male,21,0,0,7.775 -0,3,Miss. Ida Lefebre,female,3,3,1,25.4667 -0,3,Mr. Todor Sdycoff,male,42,0,0,7.8958 -0,3,Mr. Henry Hart,male,27,0,0,6.8583 -1,1,Miss. Daisy E Minahan,female,33,1,0,90 -0,2,Mr. Alfred Fleming Cunningham,male,22,0,0,0 -1,3,Mr. Johan Julian Sundman,male,44,0,0,7.925 -0,3,Mrs. Thomas (Annie Louise Rowley) Meek,female,32,0,0,8.05 -1,2,Mrs. James Vivian (Lulu Thorne Christian) Drew,female,34,1,1,32.5 -1,2,Miss. Lyyli Karoliina Silven,female,18,0,2,13 -0,2,Mr. William John Matthews,male,30,0,0,13 -0,3,Miss. Catharina Van Impe,female,10,0,2,24.15 -0,3,Mr. David Charters,male,21,0,0,7.7333 -0,3,Mr. Leo Zimmerman,male,29,0,0,7.875 -0,3,Mrs. Ernst Gilbert (Anna Sigrid Maria Brogren) Danbom,female,28,1,1,14.4 -0,3,Mr. Viktor Richard Rosblom,male,18,1,1,20.2125 -0,3,Mr. Phillippe Wiseman,male,54,0,0,7.25 -1,2,Mrs. Charles V (Ada Maria Winfield) Clarke,female,28,1,0,26 -1,2,Miss. Kate Florence Phillips,female,19,0,0,26 -0,3,Mr. James Flynn,male,28,0,0,7.75 -1,3,Mr. Berk (Berk Trembisky) Pickard,male,32,0,0,8.05 -1,1,Mr. Mauritz Hakan Bjornstrom-Steffansson,male,28,0,0,26.55 -1,3,Mrs. Percival (Florence Kate White) Thorneycroft,female,33,1,0,16.1 -1,2,Mrs. Charles Alexander (Alice Adelaide Slow) Louch,female,42,1,0,26 -0,3,Mr. Nikolai Erland Kallio,male,17,0,0,7.125 -0,1,Mr. William Baird Silvey,male,50,1,0,55.9 -1,1,Miss. Lucile Polk Carter,female,14,1,2,120 -0,3,Miss. Doolina Margaret Ford,female,21,2,2,34.375 -1,2,Mrs. Sidney (Emily Hocking) Richards,female,24,2,3,18.75 -0,1,Mr. Mark Fortune,male,64,1,4,263 -0,2,Mr. Johan Henrik Johannesson Kvillner,male,31,0,0,10.5 -1,2,Mrs. Benjamin (Esther Ada Bloomfield) Hart,female,45,1,1,26.25 -0,3,Mr. Leon Hampe,male,20,0,0,9.5 -0,3,Mr. Johan Emil Petterson,male,25,1,0,7.775 -1,2,Ms. Encarnacion Reynaldo,female,28,0,0,13 -1,3,Mr. Bernt Johannesen-Bratthammer,male,29,0,0,8.1125 -1,1,Master. Washington Dodge,male,4,0,2,81.8583 -1,2,Miss. Madeleine Violet Mellinger,female,13,0,1,19.5 -1,1,Mr. Frederic Kimber Seward,male,34,0,0,26.55 -1,3,Miss. Marie Catherine Baclini,female,5,2,1,19.2583 -1,1,Major. Arthur Godfrey Peuchen,male,52,0,0,30.5 -0,2,Mr. Edwy Arthur West,male,36,1,2,27.75 -0,3,Mr. Ingvald Olai Olsen Hagland,male,28,1,0,19.9667 -0,1,Mr. Benjamin Laventall Foreman,male,30,0,0,27.75 -1,1,Mr. Samuel L Goldenberg,male,49,1,0,89.1042 -0,3,Mr. Joseph Peduzzi,male,24,0,0,8.05 -1,3,Mr. Ivan Jalsevac,male,29,0,0,7.8958 -0,1,Mr. Francis Davis Millet,male,65,0,0,26.55 -1,1,Mrs. Frederick R (Marion) Kenyon,female,41,1,0,51.8625 -1,2,Miss. Ellen Toomey,female,50,0,0,10.5 -0,3,Mr. Maurice O'Connor,male,17,0,0,7.75 -1,1,Mr. Harry Anderson,male,48,0,0,26.55 -0,3,Mr. William Morley,male,34,0,0,8.05 -0,1,Mr. Arthur H Gee,male,47,0,0,38.5 -0,2,Mr. Jacob Christian Milling,male,48,0,0,13 -0,3,Mr. Simon Maisner,male,34,0,0,8.05 -0,3,Mr. Manuel Estanslas Goncalves,male,38,0,0,7.05 -0,2,Mr. William Campbell,male,21,0,0,0 -0,1,Mr. John Montgomery Smart,male,56,0,0,26.55 -0,3,Mr. James Scanlan,male,22,0,0,7.725 -1,3,Miss. Helene Barbara Baclini,female,0.75,2,1,19.2583 -0,3,Mr. Arthur Keefe,male,39,0,0,7.25 -0,3,Mr. Luka Cacic,male,38,0,0,8.6625 -1,2,Mrs. Edwy Arthur (Ada Mary Worth) West,female,33,1,2,27.75 -1,2,Mrs. Amin S (Marie Marthe Thuillard) Jerwan,female,23,0,0,13.7917 -0,3,Miss. Ida Sofia Strandberg,female,22,0,0,9.8375 -0,1,Mr. George Quincy Clifford,male,40,0,0,52 -0,2,Mr. Peter Henry Renouf,male,34,1,0,21 -0,3,Mr. Lewis Richard Braund,male,29,1,0,7.0458 -0,3,Mr. Nils August Karlsson,male,22,0,0,7.5208 -1,3,Miss. Hildur E Hirvonen,female,2,0,1,12.2875 -0,3,Master. Harold Victor Goodwin,male,9,5,2,46.9 -0,2,Mr. Anthony Wood Frost,male,37,0,0,0 -0,3,Mr. Richard Henry Rouse,male,50,0,0,8.05 -1,3,Mrs. (Hedwig) Turkula,female,63,0,0,9.5875 -1,1,Mr. Dickinson H Bishop,male,25,1,0,91.0792 -0,3,Miss. Jeannie Lefebre,female,8,3,1,25.4667 -1,1,Mrs. Frederick Maxfield (Jane Anne Forby) Hoyt,female,35,1,0,90 -0,1,Mr. Edward Austin Kent,male,58,0,0,29.7 -0,3,Mr. Francis William Somerton,male,30,0,0,8.05 -1,3,Master. Eden Leslie Coutts,male,9,1,1,15.9 -0,3,Mr. Konrad Mathias Reiersen Hagland,male,19,1,0,19.9667 -0,3,Mr. Einar Windelov,male,21,0,0,7.25 -0,1,Mr. Harry Markland Molson,male,55,0,0,30.5 -0,1,Mr. Ramon Artagaveytia,male,71,0,0,49.5042 -0,3,Mr. Edward Roland Stanley,male,21,0,0,8.05 -0,3,Mr. Gerious Yousseff,male,26,0,0,14.4583 -1,1,Miss. Elizabeth Mussey Eustis,female,54,1,0,78.2667 -0,3,Mr. Frederick William Shellard,male,55,0,0,15.1 -0,1,Mrs. Hudson J C (Bessie Waldo Daniels) Allison,female,25,1,2,151.55 -0,3,Mr. Olof Svensson,male,24,0,0,7.7958 -0,3,Mr. Petar Calic,male,17,0,0,8.6625 -0,3,Miss. Mary Canavan,female,21,0,0,7.75 -0,3,Miss. Bridget Mary O'Sullivan,female,21,0,0,7.6292 -0,3,Miss. Kristina Sofia Laitinen,female,37,0,0,9.5875 -1,1,Miss. Roberta Maioni,female,16,0,0,86.5 -0,1,Mr. Victor de Satode Penasco y Castellana,male,18,1,0,108.9 -1,2,Mrs. Frederick Charles (Jane Richards) Quick,female,33,0,2,26 -1,1,Mr. George Bradley,male,37,0,0,26.55 -0,3,Mr. Henry Margido Olsen,male,28,0,0,22.525 -1,3,Mr. Fang Lang,male,26,0,0,56.4958 -1,3,Mr. Eugene Patrick Daly,male,29,0,0,7.75 -0,3,Mr. James Webber,male,66,0,0,8.05 -1,1,Mr. James Robert McGough,male,36,0,0,26.2875 -1,1,Mrs. Martin (Elizabeth L. Barrett) Rothschild,female,54,1,0,59.4 -0,3,Mr. Satio Coleff,male,24,0,0,7.4958 -0,1,Mr. William Anderson Walker,male,47,0,0,34.0208 -1,2,Mrs. (Amelia Milley) Lemore,female,34,0,0,10.5 -0,3,Mr. Patrick Ryan,male,30,0,0,24.15 -1,2,Mrs. William A (Florence Agnes Hughes) Angle,female,36,1,0,26 -0,3,Mr. Stefo Pavlovic,male,32,0,0,7.8958 -1,1,Miss. Anne Perreault,female,30,0,0,93.5 -0,3,Mr. Janko Vovk,male,22,0,0,7.8958 -0,3,Mr. Sarkis Lahoud,male,35,0,0,7.225 -1,1,Mrs. Louis Albert (Ida Sophia Fischer) Hippach,female,44,0,1,57.9792 -0,3,Mr. Fared Kassem,male,18,0,0,7.2292 -0,3,Mr. James Farrell,male,40.5,0,0,7.75 -1,2,Miss. Lucy Ridsdale,female,50,0,0,10.5 -0,1,Mr. John Farthing,male,49,0,0,221.7792 -0,3,Mr. Johan Werner Salonen,male,39,0,0,7.925 -0,2,Mr. Richard George Hocking,male,23,2,1,11.5 -1,2,Miss. Phyllis May Quick,female,2,1,1,26 -0,3,Mr. Nakli Toufik,male,17,0,0,7.2292 -0,3,Mr. Joseph Jr Elias,male,17,1,1,7.2292 -1,3,Mrs. Catherine (Catherine Rizk) Peter,female,24,0,2,22.3583 -0,3,Miss. Marija Cacic,female,30,0,0,8.6625 -1,2,Miss. Eva Miriam Hart,female,7,0,2,26.25 -0,1,Major. Archibald Willingham Butt,male,45,0,0,26.55 -1,1,Miss. Bertha LeRoy,female,30,0,0,106.425 -0,3,Mr. Samuel Beard Risien,male,69,0,0,14.5 -1,1,Miss. Hedwig Margaritha Frolicher,female,22,0,2,49.5 -1,1,Miss. Harriet R Crosby,female,36,0,2,71 -0,3,Miss. Ingeborg Constanzia Andersson,female,9,4,2,31.275 -0,3,Miss. Sigrid Elisabeth Andersson,female,11,4,2,31.275 -1,2,Mr. Edward Beane,male,32,1,0,26 -0,1,Mr. Walter Donald Douglas,male,50,1,0,106.425 -0,1,Mr. Arthur Ernest Nicholson,male,64,0,0,26 -1,2,Mrs. Edward (Ethel Clarke) Beane,female,19,1,0,26 -1,2,Mr. Julian Padro y Manent,male,27,0,0,13.8625 -0,3,Mr. Frank John Goldsmith,male,33,1,1,20.525 -1,2,Master. John Morgan Jr Davies,male,8,1,1,36.75 -1,1,Mr. John Borland Jr Thayer,male,17,0,2,110.8833 -0,2,Mr. Percival James R Sharp,male,27,0,0,26 -0,3,Mr. Timothy O'Brien,male,21,0,0,7.8292 -1,3,Mr. Fahim Leeni,male,22,0,0,7.225 -1,3,Miss. Velin Ohman,female,22,0,0,7.775 -0,1,Mr. George Wright,male,62,0,0,26.55 -1,1,Lady. (Lucille Christiana Sutherland)Duff Gordon,female,48,1,0,39.6 -0,1,Mr. Victor Robbins,male,45,0,0,227.525 -1,1,Mrs. Emil (Tillie Mandelbaum) Taussig,female,39,1,1,79.65 -1,3,Mrs. Guillaume Joseph (Emma) de Messemaeker,female,36,1,0,17.4 -0,3,Mr. Thomas Rowan Morrow,male,30,0,0,7.75 -0,3,Mr. Husein Sivic,male,40,0,0,7.8958 -0,2,Mr. Robert Douglas Norman,male,28,0,0,13.5 -0,3,Mr. John Simmons,male,40,0,0,8.05 -0,3,Miss. (Marion Ogden) Meanwell,female,62,0,0,8.05 -0,3,Mr. Alfred J Davies,male,24,2,0,24.15 -0,3,Mr. Ilia Stoytcheff,male,19,0,0,7.8958 -0,3,Mrs. Nils (Alma Cornelia Berglund) Palsson,female,29,0,4,21.075 -0,3,Mr. Tannous Doharr,male,28,0,0,7.2292 -1,3,Mr. Carl Jonsson,male,32,0,0,7.8542 -1,2,Mr. George Harris,male,62,0,0,10.5 -1,1,Mrs. Edward Dale (Charlotte Lamson) Appleton,female,53,2,0,51.4792 -1,1,Mr. John Irwin Flynn,male,36,0,0,26.3875 -1,3,Miss. Mary Kelly,female,22,0,0,7.75 -0,3,Mr. Alfred George John Rush,male,16,0,0,8.05 -0,3,Mr. George Patchett,male,19,0,0,14.5 -1,2,Miss. Ethel Garside,female,34,0,0,13 -1,1,Mrs. William Baird (Alice Munger) Silvey,female,39,1,0,55.9 -0,3,Mrs. Joseph (Maria Elias) Caram,female,18,1,0,14.4583 -1,3,Mr. Eiriik Jussila,male,32,0,0,7.925 -1,2,Miss. Julie Rachel Christy,female,25,1,1,30 -1,1,Mrs. John Borland (Marian Longstreth Morris) Thayer,female,39,1,1,110.8833 -0,2,Mr. William James Downton,male,54,0,0,26 -0,1,Mr. John Hugo Ross,male,36,0,0,40.125 -0,3,Mr. Uscher Paulner,male,16,0,0,8.7125 -1,1,Miss. Ruth Taussig,female,18,0,2,79.65 -0,2,Mr. John Denzil Jarvis,male,47,0,0,15 -1,1,Mr. Maxmillian Frolicher-Stehli,male,60,1,1,79.2 -0,3,Mr. Eliezer Gilinski,male,22,0,0,8.05 -0,3,Mr. Joseph Murdlin,male,22,0,0,8.05 -0,3,Mr. Matti Rintamaki,male,35,0,0,7.125 -1,1,Mrs. Walter Bertram (Martha Eustis) Stephenson,female,52,1,0,78.2667 -0,3,Mr. William James Elsbury,male,47,0,0,7.25 -0,3,Miss. Mary Bourke,female,40,0,2,7.75 -0,2,Mr. John Henry Chapman,male,37,1,0,26 -0,3,Mr. Jean Baptiste Van Impe,male,36,1,1,24.15 -1,2,Miss. Jessie Wills Leitch,female,31,0,0,33 -0,3,Mr. Alfred Johnson,male,49,0,0,0 -0,3,Mr. Hanna Boulos,male,18,0,0,7.225 -1,1,Sir. Cosmo Edmund Duff Gordon,male,49,1,0,56.9292 -1,2,Mrs. Sidney Samuel (Amy Frances Christy) Jacobsohn,female,24,2,1,27 -0,3,Mr. Petco Slabenoff,male,42,0,0,7.8958 -0,1,Mr. Charles H Harrington,male,37,0,0,42.4 -0,3,Mr. Ernst William Torber,male,44,0,0,8.05 -1,1,Mr. Harry Homer,male,35,0,0,26.55 -0,3,Mr. Edvard Bengtsson Lindell,male,36,1,0,15.55 -0,3,Mr. Milan Karaic,male,30,0,0,7.8958 -1,1,Mr. Robert Williams Daniel,male,27,0,0,30.5 -1,2,Mrs. Joseph (Juliette Marie Louise Lafargue) Laroche,female,22,1,2,41.5792 -1,1,Miss. Elizabeth W Shutes,female,40,0,0,153.4625 -0,3,Mrs. Anders Johan (Alfrida Konstantia Brogren) Andersson,female,39,1,5,31.275 -0,3,Mr. Jose Neto Jardin,male,21,0,0,7.05 -1,3,Miss. Margaret Jane Murphy,female,18,1,0,15.5 -0,3,Mr. John Horgan,male,22,0,0,7.75 -0,3,Mr. William Alfred Brocklebank,male,35,0,0,8.05 -1,2,Miss. Alice Herman,female,24,1,2,65 -0,3,Mr. Ernst Gilbert Danbom,male,34,1,1,14.4 -0,3,Mrs. William Arthur (Cordelia K Stanlick) Lobb,female,26,1,0,16.1 -1,2,Miss. Marion Louise Becker,female,4,2,1,39 -0,2,Mr. Lawrence Gavey,male,26,0,0,10.5 -0,3,Mr. Antoni Yasbeck,male,27,1,0,14.4542 -1,1,Mr. Edwin Nelson Jr Kimball,male,42,1,0,52.5542 -1,3,Mr. Sahid Nakid,male,20,1,1,15.7417 -0,3,Mr. Henry Damsgaard Hansen,male,21,0,0,7.8542 -0,3,Mr. David John Bowen,male,21,0,0,16.1 -0,1,Mr. Frederick Sutton,male,61,0,0,32.3208 -0,2,Rev. Charles Leonard Kirkland,male,57,0,0,12.35 -1,1,Miss. Gretchen Fiske Longley,female,21,0,0,77.9583 -0,3,Mr. Guentcho Bostandyeff,male,26,0,0,7.8958 -0,3,Mr. Patrick D O'Connell,male,18,0,0,7.7333 -1,1,Mr. Algernon Henry Wilson Barkworth,male,80,0,0,30 -0,3,Mr. Johan Svensson Lundahl,male,51,0,0,7.0542 -1,1,Dr. Max Stahelin-Maeglin,male,32,0,0,30.5 -0,1,Mr. William Henry Marsh Parr,male,30,0,0,0 -0,3,Miss. Mabel Skoog,female,9,3,2,27.9 -1,2,Miss. Mary Davis,female,28,0,0,13 -0,3,Mr. Antti Gustaf Leinonen,male,32,0,0,7.925 -0,2,Mr. Harvey Collyer,male,31,1,1,26.25 -0,3,Mrs. Juha (Maria Emilia Ojala) Panula,female,41,0,5,39.6875 -0,3,Mr. Percival Thorneycroft,male,37,1,0,16.1 -0,3,Mr. Hans Peder Jensen,male,20,0,0,7.8542 -1,1,Mlle. Emma Sagesser,female,24,0,0,69.3 -0,3,Miss. Margit Elizabeth Skoog,female,2,3,2,27.9 -1,3,Mr. Choong Foo,male,32,0,0,56.4958 -1,3,Miss. Eugenie Baclini,female,0.75,2,1,19.2583 -1,1,Mr. Henry Sleeper Harper,male,48,1,0,76.7292 -0,3,Mr. Liudevit Cor,male,19,0,0,7.8958 -1,1,Col. Oberst Alfons Simonius-Blumer,male,56,0,0,35.5 -0,3,Mr. Edward Willey,male,21,0,0,7.55 -1,3,Miss. Amy Zillah Elsie Stanley,female,23,0,0,7.55 -0,3,Mr. Mito Mitkoff,male,23,0,0,7.8958 -1,2,Miss. Elsie Doling,female,18,0,1,23 -0,3,Mr. Johannes Halvorsen Kalvik,male,21,0,0,8.4333 -1,3,Miss. Hanora O'Leary,female,16,0,0,7.8292 -0,3,Miss. Hanora Hegarty,female,18,0,0,6.75 -0,2,Mr. Leonard Mark Hickman,male,24,2,0,73.5 -0,3,Mr. Alexander Radeff,male,27,0,0,7.8958 -0,3,Mrs. John (Catherine) Bourke,female,32,1,1,15.5 -0,2,Mr. George Floyd Eitemiller,male,23,0,0,13 -0,1,Mr. Arthur Webster Newell,male,58,0,2,113.275 -1,1,Dr. Henry William Frauenthal,male,50,2,0,133.65 -0,3,Mr. Mohamed Badt,male,40,0,0,7.225 -0,1,Mr. Edward Pomeroy Colley,male,47,0,0,25.5875 -0,3,Mr. Peju Coleff,male,36,0,0,7.4958 -1,3,Mr. Eino William Lindqvist,male,20,1,0,7.925 -0,2,Mr. Lewis Hickman,male,32,2,0,73.5 -0,2,Mr. Reginald Fenton Butler,male,25,0,0,13 -0,3,Mr. Knud Paust Rommetvedt,male,49,0,0,7.775 -0,3,Mr. Jacob Cook,male,43,0,0,8.05 -1,1,Mrs. Elmer Zebley (Juliet Cummins Wright) Taylor,female,48,1,0,52 -1,2,Mrs. Thomas William Solomon (Elizabeth Catherine Ford) Brown,female,40,1,1,39 -0,1,Mr. Thornton Davidson,male,31,1,0,52 -0,2,Mr. Henry Michael Mitchell,male,70,0,0,10.5 -1,2,Mr. Charles Wilhelms,male,31,0,0,13 -0,2,Mr. Ennis Hastings Watson,male,19,0,0,0 -0,3,Mr. Gustaf Hjalmar Edvardsson,male,18,0,0,7.775 -0,3,Mr. Frederick Charles Sawyer,male,24.5,0,0,8.05 -1,3,Miss. Anna Sofia Turja,female,18,0,0,9.8417 -0,3,Mrs. Frederick (Augusta Tyler) Goodwin,female,43,1,6,46.9 -1,1,Mr. Thomas Drake Martinez Cardeza,male,36,0,1,512.3292 -0,3,Miss. Katie Peters,female,28,0,0,8.1375 -1,1,Mr. Hammad Hassab,male,27,0,0,76.7292 -0,3,Mr. Thor Anderson Olsvigen,male,20,0,0,9.225 -0,3,Mr. Charles Edward Goodwin,male,14,5,2,46.9 -0,2,Mr. Thomas William Solomon Brown,male,60,1,1,39 -0,2,Mr. Joseph Philippe Lemercier Laroche,male,25,1,2,41.5792 -0,3,Mr. Jaako Arnold Panula,male,14,4,1,39.6875 -0,3,Mr. Branko Dakic,male,19,0,0,10.1708 -0,3,Mr. Eberhard Thelander Fischer,male,18,0,0,7.7958 -1,1,Miss. Georgette Alexandra Madill,female,15,0,1,211.3375 -1,1,Mr. Albert Adrian Dick,male,31,1,0,57 -1,3,Miss. Manca Karun,female,4,0,1,13.4167 -1,3,Mr. Ali Lam,male,37,0,0,56.4958 -0,3,Mr. Khalil Saad,male,25,0,0,7.225 -0,1,Col. John Weir,male,60,0,0,26.55 -0,2,Mr. Charles Henry Chapman,male,52,0,0,13.5 -0,3,Mr. James Kelly,male,44,0,0,8.05 -1,3,Miss. Katherine Mullens,female,19,0,0,7.7333 -0,1,Mr. John Borland Thayer,male,49,1,1,110.8833 -0,3,Mr. Adolf Mathias Nicolai Olsen Humblen,male,42,0,0,7.65 -1,1,Mrs. John Jacob (Madeleine Talmadge Force) Astor,female,18,1,0,227.525 -1,1,Mr. Spencer Victor Silverthorne,male,35,0,0,26.2875 -0,3,Miss. Saiide Barbara,female,18,0,1,14.4542 -0,3,Mr. Martin Gallagher,male,25,0,0,7.7417 -0,3,Mr. Henrik Juul Hansen,male,26,1,0,7.8542 -0,2,Mr. Henry Samuel Morley,male,39,0,0,26 -1,2,Mrs. Florence Kelly,female,45,0,0,13.5 -1,1,Mr. Edward Pennington Calderhead,male,42,0,0,26.2875 -1,1,Miss. Alice Cleaver,female,22,0,0,151.55 -1,3,Master. Halim Gonios Moubarek,male,4,1,1,15.2458 -1,1,Mlle. Berthe Antonine Mayne,female,24,0,0,49.5042 -0,1,Mr. Herman Klaber,male,41,0,0,26.55 -1,1,Mr. Elmer Zebley Taylor,male,48,1,0,52 -0,3,Mr. August Viktor Larsson,male,29,0,0,9.4833 -0,2,Mr. Samuel Greenberg,male,52,0,0,13 -0,3,Mr. Peter Andreas Lauritz Andersen Soholt,male,19,0,0,7.65 -1,1,Miss. Caroline Louise Endres,female,38,0,0,227.525 -1,2,Miss. Edwina Celia Troutt,female,27,0,0,10.5 -0,3,Mr. Malkolm Joackim Johnson,male,33,0,0,7.775 -1,2,Miss. Annie Jessie Harper,female,6,0,1,33 -0,3,Mr. Svend Lauritz Jensen,male,17,1,0,7.0542 -0,2,Mr. William Henry Gillespie,male,34,0,0,13 -0,2,Mr. Henry Price Hodges,male,50,0,0,13 -1,1,Mr. Norman Campbell Chambers,male,27,1,0,53.1 -0,3,Mr. Luka Oreskovic,male,20,0,0,8.6625 -1,2,Mrs. Peter Henry (Lillian Jefferys) Renouf,female,30,3,0,21 -1,3,Miss. Margareth Mannion,female,28,0,0,7.7375 -0,2,Mr. Kurt Arnold Gottfrid Bryhl,male,25,1,0,26 -0,3,Miss. Pieta Sofia Ilmakangas,female,25,1,0,7.925 -1,1,Miss. Elisabeth Walton Allen,female,29,0,0,211.3375 -0,3,Mr. Houssein G N Hassan,male,11,0,0,18.7875 -0,2,Mr. Robert J Knight,male,41,0,0,0 -0,2,Mr. William John Berriman,male,23,0,0,13 -0,2,Mr. Moses Aaron Troupiansky,male,23,0,0,13 -0,3,Mr. Leslie Williams,male,28.5,0,0,16.1 -0,3,Mrs. Edward (Margaret Ann Watson) Ford,female,48,1,3,34.375 -1,1,Mr. Gustave J Lesurer,male,35,0,0,512.3292 -0,3,Mr. Kanio Ivanoff,male,20,0,0,7.8958 -0,3,Mr. Minko Nankoff,male,32,0,0,7.8958 -1,1,Mr. Walter James Hawksford,male,45,0,0,30 -0,1,Mr. Tyrell William Cavendish,male,36,1,0,78.85 -1,1,Miss. Susan Parker Ryerson,female,21,2,2,262.375 -0,3,Mr. Neal McNamee,male,24,1,0,16.1 -1,3,Mr. Juho Stranden,male,31,0,0,7.925 -0,1,Capt. Edward Gifford Crosby,male,70,1,1,71 -0,3,Mr. Rossmore Edward Abbott,male,16,1,1,20.25 -1,2,Miss. Anna Sinkkonen,female,30,0,0,13 -0,1,Mr. Daniel Warner Marvin,male,19,1,0,53.1 -0,3,Mr. Michael Connaghton,male,31,0,0,7.75 -1,2,Miss. Joan Wells,female,4,1,1,23 -1,3,Master. Meier Moor,male,6,0,1,12.475 -0,3,Mr. Johannes Joseph Vande Velde,male,33,0,0,9.5 -0,3,Mr. Lalio Jonkoff,male,23,0,0,7.8958 -1,2,Mrs. Samuel (Jane Laver) Herman,female,48,1,2,65 -1,2,Master. Viljo Hamalainen,male,0.67,1,1,14.5 -0,3,Mr. August Sigfrid Carlsson,male,28,0,0,7.7958 -0,2,Mr. Percy Andrew Bailey,male,18,0,0,11.5 -0,3,Mr. Thomas Leonard Theobald,male,34,0,0,8.05 -1,1,the Countess. of (Lucy Noel Martha Dyer-Edwards) Rothes,female,33,0,0,86.5 -0,3,Mr. John Garfirth,male,23,0,0,14.5 -0,3,Mr. Iisakki Antino Aijo Nirva,male,41,0,0,7.125 -1,3,Mr. Hanna Assi Barah,male,20,0,0,7.2292 -1,1,Mrs. William Ernest (Lucile Polk) Carter,female,36,1,2,120 -0,3,Mr. Hans Linus Eklund,male,16,0,0,7.775 -1,1,Mrs. John C (Anna Andrews) Hogeboom,female,51,1,0,77.9583 -0,1,Dr. Arthur Jackson Brewe,male,46,0,0,39.6 -0,3,Miss. Mary Mangan,female,30.5,0,0,7.75 -0,3,Mr. Daniel J Moran,male,28,1,0,24.15 -0,3,Mr. Daniel Danielsen Gronnestad,male,32,0,0,8.3625 -0,3,Mr. Rene Aime Lievens,male,24,0,0,9.5 -0,3,Mr. Niels Peder Jensen,male,48,0,0,7.8542 -0,2,Mrs. (Mary) Mack,female,57,0,0,10.5 -0,3,Mr. Dibo Elias,male,29,0,0,7.225 -1,2,Mrs. Elizabeth (Eliza Needs) Hocking,female,54,1,3,23 -0,3,Mr. Pehr Fabian Oliver Malkolm Myhrman,male,18,0,0,7.75 -0,3,Mr. Roger Tobin,male,20,0,0,7.75 -1,3,Miss. Virginia Ethel Emanuel,female,5,0,0,12.475 -0,3,Mr. Thomas J Kilgannon,male,22,0,0,7.7375 -1,1,Mrs. Edward Scott (Elisabeth Walton McMillan) Robert,female,43,0,1,211.3375 -1,3,Miss. Banoura Ayoub,female,13,0,0,7.2292 -1,1,Mrs. Albert Adrian (Vera Gillespie) Dick,female,17,1,0,57 -0,1,Mr. Milton Clyde Long,male,29,0,0,30 -0,3,Mr. Andrew G Johnston,male,35,1,2,23.45 -0,3,Mr. William Ali,male,25,0,0,7.05 -0,3,Mr. Abraham (David Lishin) Harmer,male,25,0,0,7.25 -1,3,Miss. Anna Sofia Sjoblom,female,18,0,0,7.4958 -0,3,Master. George Hugh Rice,male,8,4,1,29.125 -1,3,Master. Bertram Vere Dean,male,1,1,2,20.575 -0,1,Mr. Benjamin Guggenheim,male,46,0,0,79.2 -0,3,Mr. Andrew Keane,male,20,0,0,7.75 -0,2,Mr. Alfred Gaskell,male,16,0,0,26 -0,3,Miss. Stella Anna Sage,female,21,8,2,69.55 -0,1,Mr. William Fisher Hoyt,male,43,0,0,30.6958 -0,3,Mr. Ristiu Dantcheff,male,25,0,0,7.8958 -0,2,Mr. Richard Otter,male,39,0,0,13 -1,1,Dr. Alice (Farnham) Leader,female,49,0,0,25.9292 -1,3,Mrs. Mara Osman,female,31,0,0,8.6833 -0,3,Mr. Yousseff Ibrahim Shawah,male,30,0,0,7.2292 -0,3,Mrs. Jean Baptiste (Rosalie Paula Govaert) Van Impe,female,30,1,1,24.15 -0,2,Mr. Martin Ponesell,male,34,0,0,13 -1,2,Mrs. Harvey (Charlotte Annie Tate) Collyer,female,31,1,1,26.25 -1,1,Master. William Thornton II Carter,male,11,1,2,120 -1,3,Master. Assad Alexander Thomas,male,0.42,0,1,8.5167 -1,3,Mr. Oskar Arvid Hedman,male,27,0,0,6.975 -0,3,Mr. Karl Johan Johansson,male,31,0,0,7.775 -0,1,Mr. Thomas Jr Andrews,male,39,0,0,0 -0,3,Miss. Ellen Natalia Pettersson,female,18,0,0,7.775 -0,2,Mr. August Meyer,male,39,0,0,13 -1,1,Mrs. Norman Campbell (Bertha Griggs) Chambers,female,33,1,0,53.1 -0,3,Mr. William Alexander,male,26,0,0,7.8875 -0,3,Mr. James Lester,male,39,0,0,24.15 -0,2,Mr. Richard James Slemen,male,35,0,0,10.5 -0,3,Miss. Ebba Iris Alfrida Andersson,female,6,4,2,31.275 -0,3,Mr. Ernest Portage Tomlin,male,30.5,0,0,8.05 -0,1,Mr. Richard Fry,male,39,0,0,0 -0,3,Miss. Wendla Maria Heininen,female,23,0,0,7.925 -0,2,Mr. Albert Mallet,male,31,1,1,37.0042 -0,3,Mr. John Fredrik Alexander Holm,male,43,0,0,6.45 -0,3,Master. Karl Thorsten Skoog,male,10,3,2,27.9 -1,1,Mrs. Charles Melville (Clara Jennings Gregg) Hays,female,52,1,1,93.5 -1,3,Mr. Nikola Lulic,male,27,0,0,8.6625 -0,1,Jonkheer. John George Reuchlin,male,38,0,0,0 -1,3,Mrs. (Beila) Moor,female,27,0,1,12.475 -0,3,Master. Urho Abraham Panula,male,2,4,1,39.6875 -0,3,Mr. John Flynn,male,36,0,0,6.95 -0,3,Mr. Len Lam,male,23,0,0,56.4958 -1,2,Master. Andre Mallet,male,1,0,2,37.0042 -1,3,Mr. Thomas Joseph McCormack,male,19,0,0,7.75 -1,1,Mrs. George Nelson (Martha Evelyn) Stone,female,62,0,0,80 -1,3,Mrs. Antoni (Selini Alexander) Yasbeck,female,15,1,0,14.4542 -1,2,Master. George Sibley Richards,male,0.83,1,1,18.75 -0,3,Mr. Amin Saad,male,30,0,0,7.2292 -0,3,Mr. Albert Augustsson,male,23,0,0,7.8542 -0,3,Mr. Owen George Allum,male,18,0,0,8.3 -1,1,Miss. Sara Rebecca Compton,female,39,1,1,83.1583 -0,3,Mr. Jakob Pasic,male,21,0,0,8.6625 -0,3,Mr. Maurice Sirota,male,20,0,0,8.05 -1,3,Mr. Chang Chip,male,32,0,0,56.4958 -1,1,Mr. Pierre Marechal,male,29,0,0,29.7 -0,3,Mr. Ilmari Rudolf Alhomaki,male,20,0,0,7.925 -0,2,Mr. Thomas Charles Mudd,male,16,0,0,10.5 -1,1,Miss. Augusta Serepeca,female,30,0,0,31 -0,3,Mr. Peter L Lemberopolous,male,34.5,0,0,6.4375 -0,3,Mr. Jeso Culumovic,male,17,0,0,8.6625 -0,3,Mr. Anthony Abbing,male,42,0,0,7.55 -0,3,Mr. Douglas Bullen Sage,male,18,8,2,69.55 -0,3,Mr. Marin Markoff,male,35,0,0,7.8958 -0,2,Rev. John Harper,male,28,0,1,33 -1,1,Mrs. Samuel L (Edwiga Grabowska) Goldenberg,female,40,1,0,89.1042 -0,3,Master. Sigvard Harald Elias Andersson,male,4,4,2,31.275 -0,3,Mr. Johan Svensson,male,74,0,0,7.775 -0,3,Miss. Nourelain Boulos,female,9,1,1,15.2458 -1,1,Miss. Mary Conover Lines,female,16,0,1,39.4 -0,2,Mrs. Ernest Courtenay (Lilian Hughes) Carter,female,44,1,0,26 -1,3,Mrs. Sam (Leah Rosen) Aks,female,18,0,1,9.35 -1,1,Mrs. George Dennick (Mary Hitchcock) Wick,female,45,1,1,164.8667 -1,1,Mr. Peter Denis Daly,male,51,0,0,26.55 -1,3,Mrs. Solomon (Latifa Qurban) Baclini,female,24,0,3,19.2583 -0,3,Mr. Raihed Razi,male,30,0,0,7.2292 -0,3,Mr. Claus Peter Hansen,male,41,2,0,14.1083 -0,2,Mr. Frederick Edward Giles,male,21,1,0,11.5 -1,1,Mrs. Frederick Joel (Margaret Welles Barron) Swift,female,48,0,0,25.9292 -0,3,Miss. Dorothy Edith Sage,female,14,8,2,69.55 -0,2,Mr. John William Gill,male,24,0,0,13 -1,2,Mrs. (Karolina) Bystrom,female,42,0,0,13 -1,2,Miss. Asuncion Duran y More,female,27,1,0,13.8583 -0,1,Mr. Washington Augustus II Roebling,male,31,0,0,50.4958 -0,3,Mr. Philemon van Melkebeke,male,23,0,0,9.5 -1,3,Master. Harold Theodor Johnson,male,4,1,1,11.1333 -0,3,Mr. Cerin Balkic,male,26,0,0,7.8958 -1,1,Mrs. Richard Leonard (Sallie Monypeny) Beckwith,female,47,1,1,52.5542 -0,1,Mr. Frans Olof Carlsson,male,33,0,0,5 -0,3,Mr. Victor Vander Cruyssen,male,47,0,0,9 -1,2,Mrs. Samuel (Hannah Wizosky) Abelson,female,28,1,0,24 -1,3,Miss. Adele Kiamie Najib,female,15,0,0,7.225 -0,3,Mr. Alfred Ossian Gustafsson,male,20,0,0,9.8458 -0,3,Mr. Nedelio Petroff,male,19,0,0,7.8958 -0,3,Mr. Kristo Laleff,male,23,0,0,7.8958 -1,1,Mrs. Thomas Jr (Lily Alexenia Wilson) Potter,female,56,0,1,83.1583 -1,2,Mrs. William (Imanita Parrish Hall) Shelley,female,25,0,1,26 -0,3,Mr. Johann Markun,male,33,0,0,7.8958 -0,3,Miss. Gerda Ulrika Dahlberg,female,22,0,0,10.5167 -0,2,Mr. Frederick James Banfield,male,28,0,0,10.5 -0,3,Mr. Henry Jr Sutehall,male,25,0,0,7.05 -0,3,Mrs. William (Margaret Norton) Rice,female,39,0,5,29.125 -0,2,Rev. Juozas Montvila,male,27,0,0,13 -1,1,Miss. Margaret Edith Graham,female,19,0,0,30 -0,3,Miss. Catherine Helen Johnston,female,7,1,2,23.45 -1,1,Mr. Karl Howell Behr,male,26,0,0,30 -0,3,Mr. Patrick Dooley,male,32,0,0,7.75 \ No newline at end of file diff --git a/danfojs-node/types/config/config.d.ts b/danfojs-node/types/config/config.d.ts deleted file mode 100644 index cd41525e..00000000 --- a/danfojs-node/types/config/config.d.ts +++ /dev/null @@ -1,20 +0,0 @@ -/** - * Package wide configuration class - */ -export class Configs { - table_width: number; - table_truncate: number; - dtype_test_lim: number; - table_max_row: number; - table_max_col_in_console: number; - set_width(val?: any): void; - get get_width(): number; - set_max_col_in_console(val?: any): void; - get get_max_col_in_console(): number; - set_row_num(val?: any): void; - get get_max_row(): number; - get get_truncate(): number; - set_truncate(val?: any): void; - get get_dtype_test_lim(): number; - set_dtype_test_lim(val?: any): void; -} diff --git a/danfojs-node/types/core/concat.d.ts b/danfojs-node/types/core/concat.d.ts deleted file mode 100644 index 269f31e2..00000000 --- a/danfojs-node/types/core/concat.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export class Concat { - constructor(kwargs?: any); -} -export function concat(kwargs?: any): DataFrame; -import { DataFrame } from "./frame"; diff --git a/danfojs-node/types/core/date_range.d.ts b/danfojs-node/types/core/date_range.d.ts deleted file mode 100644 index 58f7060a..00000000 --- a/danfojs-node/types/core/date_range.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -/** - * Generate date range between a specified set of date - * @param {kwargs} kwargs { - * start : string - * end : string - * period: int - * freq : string - * } - * @returns Array - */ -export class date_range { - constructor(kwargs?: any); - offset: number; - start?: any; - end?: any; - period?: any; - freq?: any; - freq_list: string[]; - range(start?: any, end?: any, period?: any, offset?: any): any; - freq_type(date?: any, ftype?: any): any; - offset_count(d_array?: any, offset?: any): any[]; - set_dateProps(date?: any, ftype?: any, val?: any): Date; - toLocalString(d_array?: any): any; - month_end(start_date?: any, end_date?: any): any; - month_range(range?: any): any; - day_end(start_date?: any, end_date?: any): number; -} diff --git a/danfojs-node/types/core/frame.d.ts b/danfojs-node/types/core/frame.d.ts deleted file mode 100644 index 4913c6f1..00000000 --- a/danfojs-node/types/core/frame.d.ts +++ /dev/null @@ -1,403 +0,0 @@ -/** - * A 2D frame object that stores data in structured tabular format - * @param {data} data, JSON, Array, 2D Tensor - * @param {kwargs} Object {columns: Array of column names, defaults to ordered numbers when not specified - * dtypes: strings of data types, automatically inferred when not specified - * index: row index for subseting array, defaults to ordered numbers when not specified} - * - * @returns DataFrame - */ -export class DataFrame extends Ndframe { - constructor(data?: any, kwargs?: any); - _set_column_property(): void; - /** - * Drop a list of rows or columns base on the specified axis - * @param {Object} kwargs Configuration object - * {columns: [Array(Columns| Index)] array of column names to drop - * axis: row=0, columns=1 - * inplace: specify whether to drop the row/column with/without creating a new DataFrame} - * @returns null | DataFrame - * - */ - drop(kwargs?: any): DataFrame; - /** - * Purely label based indexing. Can accept string label names for both rows and columns - * @param {kwargs} kwargs object {rows: Array of index, columns: Array of column name(s)} - * @return DataFrame data stucture - */ - loc(kwargs?: any): DataFrame; - /** - * Access a dataframe element using row and column index - * @param {*} kwargs object {rows: Array of index, columns: Array of column index} - * @return DataFrame data stucture - */ - iloc(kwargs?: any): DataFrame; - /** - * Prints the first n values in a dataframe - * @param {rows} rows --> int - * @returns DataFrame - */ - head(rows?: any): DataFrame; - /** - * Prints the last n values in a dataframe - * @param {rows} rows --> int - * @returns DataFrame - */ - tail(rows?: any): DataFrame; - /** - * Gets [num] number of random rows in a dataframe - * @param {rows} rows --> int - * @returns DataFrame - */ - sample(num?: number): DataFrame; - /** - * Return Addition of DataFrame and other, element-wise (binary operator add). - * @param {other} DataFrame, Series, Array or Number to add - * @returns {DataFrame} - */ - add(other?: any, axis?: any): DataFrame; - /** - * Return subtraction of DataFrame and other, element-wise (binary operator add). - * @param {other} DataFrame, Series, Array or Number to add - * @returns {DataFrame} - */ - sub(other?: any, axis?: any): DataFrame; - /** - * Return subtraction of DataFrame and other, element-wise (binary operator add). - * @param {other} DataFrame, Series, Array or Number to add - * @returns {DataFrame} - */ - mul(other?: any, axis?: any): DataFrame; - /** - * Return division of DataFrame and other, element-wise (binary operator add). - * @param {other} DataFrame, Series, Array or Number to add - * @returns {DataFrame} - */ - div(other?: any, axis?: any): DataFrame; - /** - * Return division of DataFrame and other, element-wise (binary operator add). - * @param {other} DataFrame, Series, Array or Number to add - * @returns {DataFrame} - */ - pow(other?: any, axis?: any): DataFrame; - /** - * Return division of DataFrame and other, element-wise (binary operator add). - * @param {other} DataFrame, Series, Array or Number to add - * @returns {DataFrame} - */ - mod(other?: any, axis?: any): DataFrame; - /** - * Return mean of DataFrame across specified axis. - * @param {axis} Number {0: row, 1 : column} Axis for the function to be applied on - * @returns {Series} - */ - mean(axis?: number): Series; - /** - * Return median of DataFrame across specified axis. - * @param {axis} Number {0: row, 1 : column} Axis for the function to be applied on - * @returns {Series} - */ - median(axis?: number): Series; - /** - * Return minimum element in a DataFrame across specified axis. - * @param {axis} Number {0: row, 1 : column} Axis for the function to be applied on - * @returns {Series} - */ - min(axis?: number): Series; - /** - * Return maximum element of DataFrame across specified axis. - * @param {axis} Number {0: row, 1 : column} Axis for the function to be applied on - * @returns {Series} - */ - max(axis?: number): Series; - /** - * Return standard deviation of DataFrame across specified axis. - * @param {axis} Number {0: row, 1 : column} Axis for the function to be applied on - * @returns {Series} - */ - std(axis?: number): Series; - /** - * Return variance of DataFrame across specified axis. - * @param {axis} Number {0: row, 1 : column} Axis for the function to be applied on - * @returns {Series} - */ - var(axis?: number): Series; - /** - * Return number of non-null elements in a Series - * @returns {Series}, Count of non-null values - */ - count(axis?: number): Series; - /** - * Rounds values in DataFrame to specified number of dp - * @returns {DataFrame}, New DataFrame with rounded values - */ - round(dp?: number): DataFrame; - /** - * Perform Cummulative operations - * @param {axis} axis [int] {0 or 1} - * @param {ops} ops {String} name of operation - * @return {DataFrame} - */ - __cum_ops(axis?: any, ops?: any): DataFrame; - /** - * calculate the cummulative sum along axis - * @param {kwargs} {axis: [int]} - * @returns {DataFrame} - */ - cumsum(kwargs?: {}): DataFrame; - /** - * calculate the cummulative min - * @param {kwargs} {axis: [int]} - * @returns {DataFrame} - */ - cummin(kwargs?: {}): DataFrame; - /** - * calculate the cummulative max - * @param {kwargs} {axis: [int]} - * @returns {DataFrame} - */ - cummax(kwargs?: {}): DataFrame; - /** - * calculate the cummulative prod - * @param {kwargs} {axis: [int]} - * @returns {DataFrame} - */ - cumprod(kwargs?: {}): DataFrame; - /** - * Makes a new copy of a DataFrame - * @returns {DataFrame} - */ - copy(): DataFrame; - /** - * Generate a new index for the DataFrame. - * This is useful when the index is meaningless and needs to be reset to the default before another operation. - * @param {inplace} boolean: Modify the original object or return a new one. Default to false - */ - reset_index(inplace?: boolean): DataFrame; - /** - * Set the DataFrame index (row labels) using an array of the same length. - * @param {kwargs} {index: Array of new index values} - */ - set_index(kwargs?: {}): DataFrame; - /** - * Generate descriptive statistics for all numeric columns - * Descriptive statistics include those that summarize the central tendency, - * dispersion and shape of a dataset’s distribution, excluding NaN values. - * @returns {Series} - */ - describe(): Series; - /** - * Return a subset of the DataFrame’s columns based on the column dtypes. - * @param {include} scalar or array-like. A selection of dtypes or strings to be included. At least one of these parameters must be supplied. - * @returns {DataFrame, Series} The subset of the frame including the dtypes. - */ - select_dtypes(include?: any): DataFrame; - /** - * Sort a Dataframe in ascending or descending order by a specified column name. - * @param {kwargs} Object, {by: Column name to sort by - * ascending (Bool): Whether to return sorted values in ascending order or not, - * inplace (Bool): Whether to perform sorting on the original Series or not} - * @returns {Series} - */ - /** - * Return the sum of the values in a DataFrame across a specified axis. - * @params {kwargs} {axis: 0 for row and 1 for column} - * @returns {Series}, Sum of values accross axis - */ - sum(kwargs?: { - axis: number; - }): Series; - /** - * Returns the absolute values in DataFrame - * @return {DataFrame} - */ - abs(): DataFrame; - __get_tensor_and_idx(df?: any, axis?: any): any[]; - /** - * Filter DataFrame element base on the element in a column - * @param {kwargs} kwargs {column : coumn name[string], is: String, to: string| int} - * @returns {DataFrame} - */ - query(kwargs?: any): DataFrame; - /** - * Add a column with values to the dataframe - * @param {kwargs} Object {column :[string] , value:[Array]} - * - */ - addColumn(kwargs?: any): void; - /** - * - * @param {col} col is a list of column with maximum length of two - */ - groupby(col?: any): GroupBy; - /** - * Return a sequence of axis dimension along row and columns - * @params col_name: the name of a column in the database. - * @returns tensor of shape 1 - */ - column(col_name?: any): Series; - /** - * Replace NaN or undefined with a specified value" - * @param {kwargs}, {column(s): Array of column name(s) to fill. If undefined fill all columns; - * value(s): Array | Scalar of value(s) to fill with. If single value is specified, we use it to fill all - * @return {DataFrame} - */ - fillna(kwargs?: {}): DataFrame; - /** - * Return a boolean same-sized object indicating if the values are NaN. NaN and undefined values, - * gets mapped to True values. Everything else gets mapped to False values. - * @return {DataFrame} - */ - isna(): DataFrame; - /** - * Obtain index containing nan values - * @return Array list (int) - */ - nanIndex(): number[]; - /** - * Drop all rows containing NaN - * @param {kwargs} kwargs [Object] {axis: [int]{o or 1}, inplace:[boolean]} - */ - dropna(kwargs?: any): DataFrame; - /** - * Apply a function to each element or along a specified axis of the DataFrame. Supports JavaScipt functions - * when axis is not specified, and accepts Tensorflow functions when axis is specified. - * @param {kwargs} kargs is defined as {axis: undefined, 0 or 1, callable: [FUNCTION]} - * @return Array - */ - apply(kwargs?: any): Series | DataFrame; - /** - * Returns Less than of DataFrame and other. Supports element wise operations - * @param {other} DataFrame, Series, Scalar - * @param {axis} Number {0 for row, 1 for index} Whether to compare by the index or columns - * @return {DataFrame} - */ - lt(other?: any, axis?: any): DataFrame; - /** - * Returns Greater than of DataFrame and other. Supports element wise operations - * @param {other} DataFrame, Series, Scalar - * @param {axis} Number {0 for row, 1 for index} Whether to compare by the index or columns - * @return {DataFrame} - */ - gt(other?: any, axis?: any): DataFrame; - /** - * Returns Less than or Equal to of DataFrame and other. Supports element wise operations - * @param {other} DataFrame, Series, Scalar - * @param {axis} Number {0 for row, 1 for index} Whether to compare by the index or columns - * @return {DataFrame} - */ - le(other?: any, axis?: any): DataFrame; - /** - * Returns Greater than or Equal to of DataFrame and other. Supports element wise operations - * @param {other} DataFrame, Series, Scalar - * @param {axis} Number {0 for row, 1 for index} Whether to compare by the index or columns - * @return {DataFrame} - */ - ge(other?: any, axis?: any): DataFrame; - /** - * Returns Not Equal to of DataFrame and other. Supports element wise operations - * @param {other} DataFrame, Series, Scalar - * @param {axis} Number {0 for row, 1 for index} Whether to compare by the index or columns - * @return {DataFrame} - */ - ne(other?: any, axis?: any): DataFrame; - /** - * Returns Greater than or Equal to of DataFrame and other. Supports element wise operations - * @param {other} DataFrame, Series, Scalar - * @param {axis} Number {0 for row, 1 for index} Whether to compare by the index or columns - * @return {DataFrame} - */ - eq(other?: any, axis?: any): DataFrame; - /** - * Replace all occurence of a value with a new specified value" - * @param {kwargs}, {"replace": the value you want to replace, - * "with": the new value you want to replace the olde value with - * "in": Array of column names to replace value in, If not specified, replace all columns} - * @return {Series} - */ - replace(kwargs?: {}): Series; - __logical_ops(val?: any, logical_type?: any, axis?: any): DataFrame; - __get_df_from_tensor(val?: any, col_names?: any): DataFrame; - __frame_is_compactible_for_operation(): boolean; - __get_ops_tensors(tensors?: any, axis?: any): any[]; - /** - * Transpose index and columns. - * Reflect the DataFrame over its main diagonal by writing rows as columns and vice-versa. - * The property T is an accessor to the method transpose(). - */ - transpose(): DataFrame; - /** - * The property T is an accessor to the method transpose(). - */ - get T(): DataFrame; - /** - * Returns the data types in the DataFrame - * @return {Array} list of data types for each column - */ - get ctypes(): Series; - /** - * Make plots of Series or DataFrame. - * Uses the Plotly as backend, so supports Plotly's configuration parameters - * @param {string} div Name of the div to show the plot - * @returns {Class} Plot class that expoese different plot type - */ - plot(div: string): any; - /** - * Returns the Tensorflow tensor backing the DataFrame Object - * @returns {2D tensor} - */ - get tensor(): 2; - /** - * Sets the data types of an DataFrame - * @param {Object} kwargs {column: Name of the column to cast, dtype: [float32, int32, string] data type to cast to} - * @returns {DataFrame} - */ - astype(kwargs?: any): DataFrame; - /** - * Return the unique values along an axis - * @param {axis} Int, 0 for row, and 1 for column. Default to 1 - * @return {Object} - */ - unique(axis?: number): any; - /** - * Return the number of unique value along an axis - * @param {axis} Int, 0 for row, and 1 for column. Default to 1 - * @return {Series} - */ - nunique(axis?: number): Series; - /** - * Change axes labels. Object values must be unique (1-to-1). - * Labels not contained in a dict / Series will be left as-is. Extra labels listed don’t throw an error. - * @param {Object} kwargs {mapper: Dict-like or functions transformations to apply to that axis’ values, - * axis: Int, 0 for row, and 1 for column. Default to 1, - * inplace: Whether to return a new DataFrame. If True then value of copy is ignored. - * @returns {DataFrame} - */ - rename(kwargs?: any): DataFrame; - /** - * Sort DataFrame by index - * @param {*} kwargs {inplace: Boolean, ascending: Bool} - * @returns DataFrame - */ - sort_index(kwargs?: any): DataFrame; - /** - * Sort a Dataframe in ascending or descending order by a specified column name. - * @param {kwargs} Object, {by: Column name to sort by - * ascending (Bool): Whether to return sorted values in ascending order or not, - * inplace (Bool): Whether to perform sorting on the original Series or not} - * @returns {Series} - */ - sort_values(kwargs?: {}): Series; - __set_col_property(self?: any, col_vals?: any, col_names?: any, old_col_names?: any): void; - __update_frame_in_place(row_data?: any, column_names?: any, col_obj?: any, index?: any, dtypes?: any): void; - __sort_by(col_value?: any, df_index?: any, asc?: any): any[][]; - /** - * Append rows to a DataFrame - * @param {val} val Array | Series to append to the object - * @return DataFrame - */ - append(val?: any): DataFrame; -} -import Ndframe from "./generic"; -import { Series } from "./series"; -import { GroupBy } from "./groupby"; diff --git a/danfojs-node/types/core/generic.d.ts b/danfojs-node/types/core/generic.d.ts deleted file mode 100644 index edb2146e..00000000 --- a/danfojs-node/types/core/generic.d.ts +++ /dev/null @@ -1,112 +0,0 @@ -export default class NDframe { - /** - * N-Dimensiona data structure. Stores multi-dimensional - * data in a size-mutable, labeled data structure. Analogous to the Python Pandas DataFrame. - * - * @param {data} Array JSON, Tensor. Block of data. - * @param {kwargs} Object Optional Configuration Object - * {columns: Array of column names. If not specified and data is an array of array, use range index. - * dtypes: Data types of the columns, - * index: row index for subseting array } - * - * @returns NDframe - */ - constructor(data?: any, kwargs?: {}); - kwargs: {}; - series: boolean; - /** - * - * @param {Array} data - * Read array of data into NDFrame - */ - _read_array(data?: any[]): void; - data?: any[]; - row_data_tensor?: any; - col_data?: any[][]; - col_data_tensor?: any; - index_arr?: any[]; - columns?: any; - /** - * Convert Javascript Object of arrays into NDFrame - * @param {*} data Object of Arrays - * @param {*} type type 1 object are of JSON form [{a: 1, b: 2}, {a: 30, b: 20}], - * type 2 object are of the form {a: [1,2,3,4], b: [30,20, 30, 20}] - */ - _read_object(data?: any, type?: any): void; - /** - * Sets the data type of the NDFrame. Supported types are ['float32', "int32", 'string', 'boolean'] - * @param {Array} dtypes Array of data types. - * @param {Boolean} infer Whether to automatically infer the dtypes from the Object - */ - _set_col_types(dtypes: Array, infer: boolean): void; - col_types?: any[]; - /** - * Returns the data types in the DataFrame - * @return {Array} list of data types for each column - */ - get dtypes(): any[]; - /** - * Gets dimension of the NDFrame - * @returns {Integer} dimension of NDFrame - */ - get ndim(): any; - /** - * Gets values for index and columns - * @return {Object} axes configuration for index and columns of NDFrame - */ - get axes(): any; - /** - * Gets index of the NDframe - * @return {Array} array of index from series - */ - get index(): any[]; - /** - * Sets index of the NDFrame - */ - __set_index(labels?: any): void; - /** - * Generate a new index for NDFrame. - */ - __reset_index(): void; - /** - * Gets a sequence of axis dimension along row and columns - * @returns {Array} the shape of the NDFrame - */ - get shape(): any[]; - /** - * Gets the values in the NDFrame in JS array - * @returns {Array} Arrays of arrays of data instances - */ - get values(): any[]; - /** - * Gets the column names of the data - * @returns {Array} strings of column names - */ - get column_names(): any[]; - /** - * Return a boolean same-sized object indicating if the values are NaN. NaN and undefined values - * gets mapped to True values. Everything else gets mapped to False values. - * @return {Array} - */ - __isna(): any[]; - get size(): any; - /** - * Return object data as comma-separated values (csv). - * @returns {Promise} CSV representation of Object data - */ - to_csv(): Promise; - /** - * Return object as JSON string. - * @returns {Promise } JSON representation of Object data - */ - to_json(): Promise; - /** - * Prints the data in a Series as a grid of row and columns - */ - toString(): any; - /** - * Pretty prints n number of rows in a DataFrame or Series in the console - * @param {rows} Number of rows to print - */ - print(): void; -} diff --git a/danfojs-node/types/core/get_dummies.d.ts b/danfojs-node/types/core/get_dummies.d.ts deleted file mode 100644 index a0edcaa0..00000000 --- a/danfojs-node/types/core/get_dummies.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -/** - * Generate one hot encoding for categorical variable in arrays |Serie | and Dataframe - * @param {kwargs} kwargs { data : Array | Series | DataFrame, - * prefix_sep: String e.g "_", - * prefix: String | Array of String, - * columns: [Array] columns to be encoded in DataFrame. - * } - */ -export function get_dummies(kwargs?: any): DataFrame; -import { DataFrame } from "./frame"; diff --git a/danfojs-node/types/core/groupby.d.ts b/danfojs-node/types/core/groupby.d.ts deleted file mode 100644 index c8231934..00000000 --- a/danfojs-node/types/core/groupby.d.ts +++ /dev/null @@ -1,59 +0,0 @@ -/** - * The class performs all groupby operation on a dataframe - * involveing all aggregate funciton - * @param {col_dict} col_dict Object of unique keys in the group by column - * @param {key_col} key_col Array contains the column names - * @param {data} Array the dataframe data - * @param {column_name} Array of all column name in the dataframe. - */ -export class GroupBy { - constructor(col_dict?: any, key_col?: any, data?: any, column_name?: any); - key_col?: any; - col_dict?: any; - data?: any; - column_name?: any; - data_tensors: {}; - /** - * Group the dataframe by the column by - * creating an object to store the grouping - * @returns Groupby data structure - */ - group(): GroupBy; - /** - * obtain the column for each group - * @param {col_name} col_name [Array]--> array of column names - * @return Groupby data structure - */ - col(col_names?: any): GroupBy; - group_col_name?: any[]; - group_col: {}; - /** - * Basic root of all column arithemetic in groups - * @param {operation} operatioin String - */ - arithemetic(operation?: any): {}; - count(): DataFrame; - sum(): DataFrame; - std(): DataFrame; - var(): DataFrame; - mean(): DataFrame; - cumsum(): DataFrame; - cummax(): DataFrame; - cumprod(): DataFrame; - cummin(): DataFrame; - max(): DataFrame; - min(): DataFrame; - /** - * returns dataframe of a group - * @param {*} key [Array] - */ - get_groups(key?: any): any; - /** - * Map every column to an operaton - * @param {kwargs} kwargs {column name: math operation} - * @example .agg({"A": "mean","B": "sum","C":"count"}) - */ - agg(kwargs?: any): DataFrame; - to_DataFrame(key_col?: any, col?: any, data?: any, ops?: any): DataFrame; -} -import { DataFrame } from "./frame"; diff --git a/danfojs-node/types/core/indexing.d.ts b/danfojs-node/types/core/indexing.d.ts deleted file mode 100644 index 9615effa..00000000 --- a/danfojs-node/types/core/indexing.d.ts +++ /dev/null @@ -1 +0,0 @@ -export function indexLoc(ndframe?: any, kwargs?: any): any[]; diff --git a/danfojs-node/types/core/merge.d.ts b/danfojs-node/types/core/merge.d.ts deleted file mode 100644 index 8162a6c9..00000000 --- a/danfojs-node/types/core/merge.d.ts +++ /dev/null @@ -1,19 +0,0 @@ -export class Merge { - constructor(kwargs?: any); - how?: any; - left: DataFrame; - right: DataFrame; - on?: any[]; - left_col_index?: any[]; - right_col_index?: any[]; - left_key_dict: {}; - right_key_dict: {}; - __create_columns(): void; - outer(): any[]; - inner(): any[]; - left_merge(): any[]; - right_merge(): any[]; - basic(keys?: any): any[]; -} -export function merge(kwargs?: any): DataFrame; -import { DataFrame } from "./frame"; diff --git a/danfojs-node/types/core/series.d.ts b/danfojs-node/types/core/series.d.ts deleted file mode 100644 index 58e8efb4..00000000 --- a/danfojs-node/types/core/series.d.ts +++ /dev/null @@ -1,369 +0,0 @@ -/** - * One-dimensional ndarray with axis labels (including time series). - * The object supports both integer- and label-based indexing and provides a host of methods for performing operations involving the index. - * Operations between Series (+, -, /, , *) align values based on their associated index values– they need not be the same length. - * @param {data} data Array, JSON of 1D values - * @param {kwargs} Object {columns: column names, dtypes : data type of values} - * - * @returns Series - */ -export class Series extends NDframe { - constructor(data?: any, kwargs?: any); - /** - * Returns a Series in Tensorflow's tensor format - * @returns {1D Tensor} - */ - get tensor(): 1; - /** - * Returns the first n values in a Series - * @param {rows} Number of rows to return - * @returns {Series} - */ - head(rows?: number): Series; - /** - * Returns the last n values in a Series - * @param {rows} number of rows to return - * @returns {Series} - */ - tail(rows?: number): Series; - /** - * Returns n number of random rows in a Series - * @param {rows} number of rows to return - * @returns {Series} - */ - sample(num?: number): Series; - /** - * Return Addition of series and other, element-wise (binary operator add). - * Equivalent to series + other - * @param {other} Series or Number to add - * @returns {Series} - */ - add(other?: any): Series; - /** - * Returns the subtraction between a series and other, element-wise (binary operator subtraction). - * Equivalent to series - other - * @param {other} Series, Number to subtract - * @returns {Series} - */ - sub(other?: any): Series; - /** - * Return Multiplication of series and other, element-wise (binary operator mul). - * Equivalent to series * other - * @param {other} Series, Number to multiply with. - * @returns {Series} - */ - mul(other?: any): Series; - /** - * Return division of series and other, element-wise (binary operator div). - * Equivalent to series / other - * @param {other} Series, Number to divide with. - * @returns {Series} - */ - div(other?: any, round?: boolean): Series; - /** - * Return Exponential power of series and other, element-wise (binary operator pow). - * Equivalent to series ** other - * @param {other} Series, Number to multiply with. - */ - pow(other?: any): Series; - /** - * Return Modulo of series and other, element-wise (binary operator mod). - * Equivalent to series % other - * @param {other} Series, Number - * @returns {Series} - */ - mod(other?: any): Series; - /** - * Returns the mean of elements in Series - * @returns {Series} - */ - mean(): Series; - /** - * Returns the median of elements in Series - * @returns {Series} - */ - median(): Series; - /** - * Returns the modal value of elements in Series - * @returns {Number} - */ - mode(): number; - /** - * Returns the minimum value in a Series - * @returns {Number} - */ - min(): number; - /** - * Returns the maximum value in a Series - * @returns {Number} - */ - max(): number; - /** - * Return the sum of the values in a series. - * This is equivalent to the method tf.sum - * @returns {Number}, sum of values in Series - */ - sum(): number; - /** - * Return number of non-null elements in a Series - * @returns {Number}, Count of non-null values - */ - count(): number; - /** - * Return maximum of series and other, element-wise (binary operator div). - * @param {other} Series, Numbers to check maximum against - * @returns {Series} - */ - maximum(other?: any): Series; - /** - * Return maximum of series and other, element-wise (binary operator div). - * @param {other} Series, Numbers to check maximum against - * @returns {Series} - */ - minimum(other?: any): Series; - /** - * Round each value in a Series to the given number of decimals. - * @param {dp} Number, Numbers of Decimal places to round to - * @returns {Series} - */ - round(dp?: any): Series; - /** - * Return sample standard deviation over requested axis. - * @returns {Number} - */ - std(): number; - /** - * Return unbiased variance of Series. - * @returns {Number} - */ - var(): number; - /** - * Return a boolean same-sized object indicating if the values are NaN. NaN and undefined values, - * gets mapped to True values. Everything else gets mapped to False values. - * @return {Series} - */ - isna(): Series; - /** - * Replace NaN or undefined with a specified value" - * @param {kwargs}, {"value": the new value to replace the old value with, inplace: Perform operation inplace or not} - * @return {Series} - */ - fillna(kwargs?: {}): Series; - /** - * Sort a Series in ascending or descending order by some criterion. - * @param {kwargs} Object, {ascending (Bool): Whether to return sorted values in ascending order or not, - * inplace (Bool): Whether to perform sorting on the original Series or not} - * @returns {Series} - */ - sort_values(kwargs?: {}): Series; - /** - * Makes a deep copy of a Series - * @returns {Series} - */ - copy(): Series; - /** - * Generate descriptive statistics. - * Descriptive statistics include those that summarize the central tendency, - * dispersion and shape of a dataset’s distribution, excluding NaN values. - * @returns {Series} - */ - describe(): Series; - /** - * Returns Series with the index reset. - * This is useful when index is meaningless and needs to be reset to the default before another operation. - * @param {kwargs} {inplace: Modify the Series in place (do not create a new object} - */ - reset_index(kwargs?: {}): Series; - /** - * Returns Series with the specified index. - * Set the Series index (row labels) using an array of the same length. - * @param {kwargs} {index: Array of new index values, - * inplace: If operation should happen inplace - * } - */ - set_index(kwargs?: {}): Series; - /** - * Checks if two series are compatible for a mathematical operation - * @param {Series} other Series to compare against - * @returns{boolean} - */ - __check_series_op_compactibility(other: Series): boolean; - /** - * map all the element in a column to a variable or function - * @param{callable} callable can either be a funtion or an object - * @return {Array} - */ - map(callable?: any): any[]; - /** - * Applies a function to each element of a Series - * @param {Function} Function to apply to each element of the series - * @return {Array} - */ - apply(callable?: any): any[]; - /** - * Returns the unique value(s) in a Series - * @return {Series} - */ - unique(): Series; - /** - * Return the number of unique value in a series - * @return {int} - */ - nunique(): any; - /** - * Returns unique values and their counts in a Series - * @return {Series} - */ - value_counts(): Series; - /** - * Returns the absolute values in Series - * @return {series} - */ - abs(): any; - /** - * Returns the cumulative sum over a Series - * @return {Series} - */ - cumsum(): Series; - /** - * Returns cumulative minimum over a Series - * @returns series - */ - cummin(): Series; - /** - * Returns cumulative maximum over a Series - * @returns series - */ - cummax(): Series; - /** - * Returns cumulative product over a Series - * @returns series - */ - cumprod(): Series; - /** - * Returns Less than of series and other. Supports element wise operations - * @param {other} Series, Scalar - * @return {Series} - */ - lt(other?: any): Series; - /** - * Returns Greater than of series and other. Supports element wise operations - * @param {other} Series, Scalar - * @return {Series} - */ - gt(other?: any): Series; - /** - * Returns Less than or Equal to of series and other. Supports element wise operations - * @param {other} Series, Scalar - * @return {Series} - */ - le(other?: any): Series; - /** - * Returns Greater than or Equal to of series and other. Supports element wise operations - * @param {other} Series, Scalar - * @return {Series} - */ - ge(other?: any): Series; - /** - * Returns Not Equal to of series and other. Supports element wise operations - * @param {other} Series, Scalar - * @return {Series} - */ - ne(other?: any): Series; - /** - * Returns Equal to of series and other. Supports element wise operations - * @param {other} Series, Scalar - * @return {Series} - */ - eq(other?: any): Series; - /** - * Replace all occurence of a value with a new value" - * @param {kwargs}, {"replace": the value you want to replace, - * "with": the new value you want to replace the olde value with, - * inplace: Perform operation inplace or not} - * @return {Series} - */ - replace(kwargs?: {}): Series; - /** - * Return a new Series with missing values (NaN) removed. - * @param {kwargs} {inplace: Perform operation inplace or not} - * @return {Series} - */ - dropna(kwargs?: {}): Series; - /** - * Return the integer indices that would sort the Series. - * @param {ascending} boolean true: will sort the Series in ascending order, false: will sort in descending order - * @return {Series} - */ - argsort(ascending?: boolean): Series; - /** - * Return int position of the largest value in the Series. - * @return {Number} - */ - argmax(): number; - /** - * Return int position of the smallest value in the Series. - * @param {ascending} boolean true: will sort the Series in ascending order, false: will sort in descending order - * @return {Series} - */ - argmin(): Series; - /** - * Returns dtype of Series - * @return {string} - */ - get dtype(): string; - /** - * Return Series with duplicate values removed - * @param {kwargs} {inplace: Perform operation inplace or not, - * keep: first | last which dupliate value to keep} - * @return {Series} - */ - drop_duplicates(kwargs?: {}): Series; - /** - * Perform boolean operations on bool values - * @param {*} other Other series to compare with - * @param {string} b_ops name of operation to perform [ne, ge, le, gt, lt, eq] - */ - __bool_ops(other?: any, b_ops: string): Series; - /** - * perform cumulative operation on series data - * @returns array - */ - __cum_ops(ops?: any): Series; - /** - * Cast Series to specified data type - * @param {string} dtype data type to cast to [float32, int32, string, boolean] - *@returns {Series} - */ - astype(dtype: string): Series; - /** - * Exposes numerous string methods to manipulate Series - */ - get str(): Str; - /** - * Returns Danfo Time Object that exposes different time properties - */ - get dt(): TimeSeries; - /** - * Make plots of Series or DataFrame. - * Uses the Plotly as backend, so therefore supports Plotly's configuration parameters - * @param {string} div Name of the div to show the plot - * @returns {Class} Plot class that expoese different plot type - */ - plot(div: string): any; - /** - * Slice series by index - * @param {Array} row list of index to slice by - * @returns Series - */ - iloc(row?: any[]): Series; - /** - * Adds new values to the end of a Series - * @param {Object} val Single value | Array | Series to append to the object - * @param {Boolean} inplace Whether to perform operation inplace or not - */ - append(val?: any, inplace?: boolean): Series; -} -import NDframe from "./generic"; -import { Str } from "./strings"; -import { TimeSeries } from "./timeseries"; diff --git a/danfojs-node/types/core/strings.d.ts b/danfojs-node/types/core/strings.d.ts deleted file mode 100644 index 06eb778f..00000000 --- a/danfojs-node/types/core/strings.d.ts +++ /dev/null @@ -1,133 +0,0 @@ -/** - * String methods applied on Series and DataFrames - */ -export class Str { - constructor(series?: any); - series?: any; - array?: any; - /** - * Converts all characters to lowercase. - * @return {array} - */ - toLowerCase(): any[]; - /** - * Converts all characters to uppercase. - * @return {array} - */ - toUpperCase(): any[]; - /** - * Capitalize first string - * @return {array} - */ - capitalize(): any[]; - /** - * Returns the character at the specified index (position) - * @params {index} index position of character - * @return {array} - */ - charAt(index?: number): any[]; - /** - * Joins two or more strings/arrays. 0 joins from the start - * @params {other} string|array to concatenate with. - * @params {position} where to concat the string from. O concats from the start, 1 concats from the end - * @params {isArray} whether operation is performed on Array or not - * @return {array} - */ - concat(other?: string, position?: number): any[]; - /** - * Checks whether a string begins with specified characters - * @params {String | Character} String or Character to check against - * @return {array} - */ - startsWith(str?: string): any[]; - /** - * Checks whether a string ends with specified characters - * @params {String | Character} String or Character to check against - * @return {array} - */ - endsWith(str?: string): any[]; - /** - * Checks whether a string contains the specified string/characters - * @params {String | Character} String or Character to check against - * @return {array} - */ - includes(str?: string): any[]; - /** - * Returns the position of the first found occurrence of a specified value in a string - * @params {String | Character} String or Character to check against - * @return {array} - */ - indexOf(str?: string): any[]; - /** - * Returns the position of the last found occurrence of a specified value in a string - * @params {str: String | Character} String or Character to check against - * @return {array} - */ - lastIndexOf(str?: string): any[]; - /** - * Searches a string for a specified value, or a regular expression, and returns a new string where the specified values are replaced - * @params {searchValue: String | Character} string value to replace - * @params {replaceValue: String | Character} string to replace with - * @return {array} - */ - replace(searchValue?: string | RegExp, replaceValue?: string): any[]; - /** - * Returns a new string with a specified number of copies of an existing string - * @params {num: Integer} Number of times to repeat - * @return {array} - */ - repeat(num?: number): any[]; - /** - * Searches a string for a specified value, or regular expression, and returns the position of the match - * @params {str: String | Character} String or Character to check against - * @return {array} - */ - search(str?: string): any[]; - /** - * Extracts a part of a string and returns a new string - * @params {startIndex: Int} index position of start character - * @params {endIndex: Int} index position of last character - * @return {array} - */ - slice(startIndex?: number, endIndex?: number): any[]; - /** - * Splits a string into an array of substrings - * @params {val: string} string or character to split at - * @params {endIndex: Int} index position of last character - * @return {array} - */ - split(splitVal?: string): any[]; - /** - * Extracts the characters from a string, beginning at a specified start position, and through the specified number of character - * @params {startIndex: Int} index position of start character - * @params {num: Int} number of characters to return - * @return {array} - */ - substr(startIndex?: number, num?: number): any[]; - /** - * Extracts the characters from a string, between two specified indices - * @params {startIndex: Int} index position of start character - * @params {endIndex: Int} index position of last character - * @return {array} - */ - substring(startIndex?: number, endIndex?: number): any[]; - /** - * Removes whitespace from both ends of a string - * @return {array} - */ - trim(): any[]; - /** - * Joins strings to specified value - * @params {valToJoin} string value to join to the array - * @params {joinChar} Character to Join with - * @return {array} - */ - join(valToJoin?: string, joinChar?: string): any[]; - /** - * Counts the number of characters in string - * @return {array} - */ - len(): any[]; - __create_new_sf_from(new_val?: any, series?: any): Series; -} -import { Series } from "./series"; diff --git a/danfojs-node/types/core/timeseries.d.ts b/danfojs-node/types/core/timeseries.d.ts deleted file mode 100644 index d140a554..00000000 --- a/danfojs-node/types/core/timeseries.d.ts +++ /dev/null @@ -1,98 +0,0 @@ -/** - * @class - * @description Handle all datetime operations - * @param {kwargs} Object {"data":[array of string], "format": string} - */ -export class TimeSeries { - constructor(kwargs?: any); - data?: any; - format?: any; - keys: { - Y: number; - m: number; - H: number; - M: number; - S: number; - b: number; - d: number; - "-": number; - }; - __in_format: string[]; - __monthName: string[]; - __weekName: string[]; - /** - * @description preprocessed the data into desirable structure - */ - preprocessed(): void; - date_list?: any[]; - /** - * @description if format is given, apply the format on each element of the data - * @return string - */ - __apply_format(elem?: any, format?: any): string; - /** - * @description convert format string to their respective value. - */ - generate_format(): any; - /** - * @description check if a string is a timestamp - * @param {date_string} date_string [string] - */ - is_timestamp(date_string?: any): boolean; - /** - * @description check if a date instance returns Invalid date - * @param {date_instance} instance of new Date() - */ - __is_validDate(date_instance?: any): void; - /** - * @description abstract all date operations - * @param {*} callback [FUNCTION] - * @return series - */ - __date_ops(callback?: any): Series; - /** - * @description obtain the month in a date. - * @return Series - */ - month(): Series; - /** - * @return Series - */ - hour(): Series; - /** - * @return Series - */ - day(): Series; - /** - * @description generate year frome date instance - * @return Series - */ - year(): Series; - /** - * @description generate month name - * @return Series - */ - month_name(): Series; - /** - * @description generate days of the week - * @return Series - */ - weekdays(): Series; - /** - * @description day of the month - * @return Series - */ - monthday(): Series; - /** - * @description obtain the seconds in a date - * @return Series - */ - seconds(): Series; - /** - * @description obtain the minutes in a date - * @return Series - */ - minutes(): Series; -} -export function to_datetime(kwargs?: any): TimeSeries; -import { Series } from "./series"; diff --git a/danfojs-node/types/core/utils.d.ts b/danfojs-node/types/core/utils.d.ts deleted file mode 100644 index cf122a5c..00000000 --- a/danfojs-node/types/core/utils.d.ts +++ /dev/null @@ -1,94 +0,0 @@ -export class Utils { - remove(arr?: any, index?: any): any; - __remove_arr(arr?: any, index?: any): any; - __is_string(value?: any): boolean; - __is_number(value?: any): boolean; - __is_object(value?: any): boolean; - __is_null(value?: any): boolean; - __is_undefined(value?: any): boolean; - /** - * Optimized version of random sampling from an array, as implemented in Python - * - * - Chooses k unique random elements from a population sequence or set. - - Returns a new list containing elements from the population while - leaving the original population unchanged. The resulting list is - in selection order so that all sub-slices will also be valid random - samples. This allows raffle winners (the sample) to be partitioned - into grand prize and second place winners (the subslices). - - Members of the population need not be hashable or unique. If the - population contains repeats, then each occurrence is a possible - selection in the sample. - - To choose a sample in a range of integers, use range as an argument. - This is especially fast and space efficient for sampling from a - large population: sample(range(10000000), 60) - - Sampling without replacement entails tracking either potential - selections (the array) in a list or previous selections in a set. - - When the number of selections is small compared to the - population, then tracking selections is efficient, requiring - only a small set and an occasional reselection. For - a larger number of selections, the array tracking method is - preferred since the list takes less space than the - set and it doesn't suffer from frequent reselections. - * - * @param {*} array The array to sample values from randomly - * @param {*} num The number of elements to sample randomly - */ - __sample_from_iter(array?: any, k?: any, destructive?: any): any; - __range(start?: any, end?: any): any; - __key_in_object(object?: any, key?: any): boolean; - __get_col_values(data?: any): any[][]; - /** - * retrieve row array and column names from object of the form {a: [1,2,3,4], b: [30,20, 30, 20}] - * @param {*} data - */ - _get_row_and_col_values(data?: any): (string[] | any[][])[]; - __convert_2D_to_1D(data?: any): any[]; - __replace_undefined_with_NaN(data?: any, isSeries?: any): any[]; - __get_t(arr_val?: any): any[]; - __unique(data?: any): any; - __in_object(object?: any, key?: any, message?: any): void; - __is_1D_array(arr?: any): boolean; - __arr_to_obj(arr?: any): {}; - /** - * count the NaN and non-NaN values present in an array - * @param {Array} arr Array object - * @param {Boolean} val whether to return the value count instead of the null count - * @param {Boolean} isSeries Whether the Obj is of type series or not - */ - __count_nan(arr?: any[], return_val: boolean, isSeries: boolean): number | any[]; - __median(arr?: any, isSeries?: any): any; - __mode(arr?: any): number[]; - __round(arr?: any, dp: number, isSeries?: any): any[]; - __is_function(variable?: any): boolean; - __randgen(num?: any, start?: any, end?: any): any[]; - _throw_wrong_params_error(kwargs?: any, params_needed?: any): void; - __map_int_to_bool(arr?: any, dim?: any): any[]; - __std(data?: any): any; - __zeros(row?: any, column?: any): any[][]; - __shuffle(num?: any, array?: any): any; - __sort(arr?: any, ascending?: boolean): any; - __is_browser_env(): any; - __is_node_env(): any; - _throw_str_dtype_error(obj?: any, ops?: any): void; - /** - * Remove NaN values from Array - * @param {*} arr - */ - _remove_nans(arr?: any): any; - __get_duplicate(arr?: any): {}; - /** - * Sorts an array by index - * @param {Array} arr1 - * @param {Array} arr2 - * @param {string} dtype - * - * @returns sorted index - */ - _sort_arr_with_index(arr1?: any[], arr2?: any[], dtype: string): any[]; -} diff --git a/danfojs-node/types/index.d.ts b/danfojs-node/types/index.d.ts deleted file mode 100644 index ab3b0102..00000000 --- a/danfojs-node/types/index.d.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Series } from "./core/series"; -import { DataFrame } from "./core/frame"; -import { to_datetime } from "./core/timeseries"; -import { merge } from "./core/merge"; -import { concat } from "./core/concat"; -import { date_range } from "./core/date_range"; -import { get_dummies } from "./core/get_dummies"; -import { read_csv, read_json, read_excel, read } from "./io/reader"; -import { LabelEncoder, OneHotEncoder } from "./preprocessing/encodings"; -import { MinMaxScaler, StandardScaler } from "./preprocessing/scalers"; - -declare module 'danfojs-node' { - export { Series, DataFrame, to_datetime, merge, concat, date_range, get_dummies, read_csv, read_json, read_excel, read, LabelEncoder, OneHotEncoder, MinMaxScaler, StandardScaler } -} \ No newline at end of file diff --git a/danfojs-node/types/io/reader.d.ts b/danfojs-node/types/io/reader.d.ts deleted file mode 100644 index 24fe997c..00000000 --- a/danfojs-node/types/io/reader.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export function read_csv(source?: any, chunk?: any): Promise; -export function read_json(source?: any): Promise; -export function read_excel(kwargs?: any): Promise; -export function read(path_or_descriptor?: any, configs?: object): DataFrame; -import { DataFrame } from "../core/frame"; diff --git a/danfojs-node/types/plotting/plot.d.ts b/danfojs-node/types/plotting/plot.d.ts deleted file mode 100644 index de3963e9..00000000 --- a/danfojs-node/types/plotting/plot.d.ts +++ /dev/null @@ -1,66 +0,0 @@ -/** - * Plotting methods and Functions performed on Series and DataFrames - */ -export class Plot { - constructor(ndframe?: any, div?: any); - div?: any; - ndframe?: any; - /** - * Plot Series or DataFrame as lines. This function is useful to plot lines using DataFrame’s values as coordinates. - * Make plots of Series or DataFrame. - * Uses the Plotly as backend, so supoorts Plotly's configuration parameters - * @param {string} div Name of the div to show the plot - * @param {Object} config configuration options for making Plots, supports Plotly parameters - */ - line(config?: any): void; - /** - * Plot Series or DataFrame as Bars. - * Uses the Plotly as backend, so supoorts Plotly's configuration parameters - * @param {string} div Name of the div to show the plot - * @param {Object} config configuration options for making Plots, supports Plotly parameters - */ - bar(config?: any): void; - /** - * Plot two or more columns in a DataFrame as scatter points. If Series, plot against its index - * Uses the Plotly as backend, so supoorts Plotly's configuration parameters - * @param {string} div Name of the div to show the plot - * @param {Object} config configuration options for making Plots, supports Plotly parameters - */ - scatter(config?: any): void; - /** - * Plot columns in a Series/DataFrame as Histograms. - * Uses the Plotly as backend, so supoorts Plotly's configuration parameters - * @param {string} div Name of the div to show the plot - * @param {Object} config configuration options for making Plots, supports Plotly parameters - */ - hist(config?: any): void; - /** - * Makes Pie Plots from two Columns in a DataFrame. - * Uses the Plotly as backend, so supoorts Plotly's configuration parameters - * @param {string} div Name of the div to show the plot - * @param {Object} config configuration options for making Plots, supports Plotly parameters - */ - pie(config?: any): void; - /** - * Plot Box plots from Series or DataFrame as lines. - * Uses the Plotly as backend, so supoorts Plotly's configuration parameters - * @param {Object} config configuration options for making Plots, supports Plotly parameters - */ - box(config?: any): void; - /** - * Plot Violin plots from Series or DataFrame as lines. - * Uses the Plotly as backend, so supoorts Plotly's configuration parameters - * @param {Object} config configuration options for making Plots, supports Plotly parameters - */ - violin(config?: any): void; - /** - * Display DataFrame in a div using D3.js format - * Uses the Plotly as backend, so supoorts Plotly's configuration parameters - * @param {Object} config configuration options for making Plots, supports Plotly parameters - */ - table(config?: any): void; - __get_plot_params(config?: any): (string[] | { - layout: {}; - })[]; - ____check_if_cols_exist(cols?: any): any; -} diff --git a/danfojs-node/types/preprocessing/encodings.d.ts b/danfojs-node/types/preprocessing/encodings.d.ts deleted file mode 100644 index 4b866774..00000000 --- a/danfojs-node/types/preprocessing/encodings.d.ts +++ /dev/null @@ -1,22 +0,0 @@ -export class LabelEncoder { - /** - * - * @param {data} data [Array|Series] - * @returns Array. - */ - fit(data?: any): Series; - label?: any; - /** - * Transform data using the label generated from fitting - * @param {data} data [Array|Series] - * @returns Array - */ - transform(data?: any): Series; -} -export class OneHotEncoder { - fit(data?: any): DataFrame; - label?: any; - transform(data?: any): DataFrame; -} -import { Series } from "../core/series"; -import { DataFrame } from "../core/frame"; diff --git a/danfojs-node/types/preprocessing/scalers.d.ts b/danfojs-node/types/preprocessing/scalers.d.ts deleted file mode 100644 index aade7b34..00000000 --- a/danfojs-node/types/preprocessing/scalers.d.ts +++ /dev/null @@ -1,29 +0,0 @@ -export class MinMaxScaler { - /** - * Fit minmax scaler on data, to obtain their min and max value - * @param {data} data [DataRame | Series | Array] - * @returns Array - */ - fit(data?: any): Series | DataFrame; - max?: any; - min?: any; - /** - * Transform an array using the min and max generated from the fitting on data - * @param {data} data [Array] - * @returns array - */ - transform(data?: any): Series | DataFrame; -} -export class StandardScaler { - /** - * - * @param {data} data [DataRame | Series | Array] - * @returns Array - */ - fit(data?: any): Series | DataFrame; - std?: any; - mean?: any; - transform(data?: any): Series | DataFrame; -} -import { Series } from "../core/series"; -import { DataFrame } from "../core/frame"; diff --git a/package.json b/package.json index 7520cbe9..3ac3875d 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,8 @@ "danfojs-browser/**" ], "scripts": { - "build": "cd danfojs-node && yarn build && cd ../danfojs-browser && yarn bundle", - "test": "cd danfojs-node && yarn test && cd ../danfojs-browser && yarn test" + "install": "cd src/danfojs-base && yarn && cd ../danfojs-browser && yarn && cd ../danfojs-node && yarn", + "build": "cd src/danfojs-node && yarn build:clean && cd ../danfojs-browser && yarn build:clean", + "test": "cd src/danfojs-base && yarn && cd ../danfojs-node && yarn && yarn test:clean && cd ../danfojs-browser && yarn && yarn test:clean" } } \ No newline at end of file diff --git a/src/danfojs-base/README.md b/src/danfojs-base/README.md new file mode 100644 index 00000000..69ec125c --- /dev/null +++ b/src/danfojs-base/README.md @@ -0,0 +1,46 @@ +## danfojs-base + +**danfojs-base** is the core module of Danfo.js. Danfojs-node and Danfojs-browser folders simply extends/export this functions and classes from this module. + +## Folders and Files + + - __aggregators__: All files that contain functions that aggregate data. + - __core__: Holds the core classes of Danfo.js. + - `daterange`: Class that represents a date range. + - `datetime`: Class that represents a date and time. + - `frame`: Class that represents a frame. + - `series`: Class that represents a series. + - `generic`: Class that represents a generic object. + - `indexing`: Class that represents an indexing. + - `math.ops`: Class that represents a math operation. + - `strings`: Class that represents a string. + - __io__: Holds the IO classes of Danfo.js. + - __browser__: Holds the browser IO classes. + - `io.csv`: Holds the CSV IO classes. + - `io.json`: Holds the JSON IO classes. + - `io.excel`: Holds the excel IO classes. + - __node__: Holds the node IO classes for Node.js + - `io.csv`: Holds the CSV IO classes for Node.js + - `io.json`: Holds the JSON IO classes for Node.js + - `io.excel`: Holds the excel IO classes for Node.js + - __plotting__: Holds the plotting classes + - __plotly__: Holds the plotting class for Plotly charts. + - __vega__: (Stub) Holds the plotting class for Vega charts. + - __shared__ + - `config`: Holds the configuration class. + - `defaults`: Holds the default values for the configuration class. + - `errors`: Holds the error classes. + - `tensorflowlib`: Autogenerated tensorflow library export. + - `utils`: Holds the utility classes. + - `types`: Holds the type classes. + - __transformers__: Holds the transformers files + - __encoders__: Holds the encoder classes. + - `dummy.encoder`: Holds the dummy encoder class + - `one.hot.encoder`: Holds the onehot encoder class + - `label.encoder`: Holds the label encoder class + - __scalers__ + - `min.max.scalers`: Holds the min max scaler class + - `standard.scalers`: Holds the standard scaler class + - `concat`: Holds the concatenation class + - `merge`: Holds the merge class + - `index.ts`: Entry point for the module. \ No newline at end of file diff --git a/src/danfojs-base/aggregators/groupby.ts b/src/danfojs-base/aggregators/groupby.ts new file mode 100644 index 00000000..d12a8d43 --- /dev/null +++ b/src/danfojs-base/aggregators/groupby.ts @@ -0,0 +1,652 @@ +/** +* @license +* Copyright 2022 JsData. All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ========================================================================== +*/ +import DataFrame from "../core/frame" +import { ArrayType1D, ArrayType2D } from "../shared/types" +import { variance, std, median, mode } from 'mathjs'; +import concat from "../transformers/concat" +import Series from "../core/series"; + + + +/** + * The class performs all groupby operation on a dataframe + * involving all aggregate funciton + * @param {colDict} colDict Object of unique keys in the group by column + * @param {keyCol} keyCol Array contains the column names + * @param {data} Array the dataframe data + * @param {columnName} Array of all column name in the dataframe. + * @param {colDtype} Array columns dtype + */ +export default class Groupby { + colDict: { [key: string ]: {} } = {} + keyCol: ArrayType1D + data?: ArrayType2D | null + columnName: ArrayType1D + colDtype: ArrayType1D + colIndex: ArrayType1D + groupDict?: any + groupColNames?: Array + keyToValue: { + [key: string] : ArrayType1D + } = {} + + constructor(keyCol: ArrayType1D, data: ArrayType2D | null, columnName: ArrayType1D, colDtype:ArrayType1D, colIndex: ArrayType1D) { + + this.keyCol = keyCol; + this.data = data; + this.columnName = columnName; + //this.dataTensors = {}; //store the tensor version of the groupby data + this.colDtype = colDtype; + this.colIndex = colIndex + + } + /** + * Generate group object data needed for group operations + * let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; + * let cols = [ "A", "B", "C" ]; + * let df = new dfd.DataFrame(data, { columns: cols }); + * let groupDf = df.groupby([ "A" ]); + * The following internal object is generated and save to this.colDict + * { + * '1': { A: [ 1 ], B: [ 2 ], C: [ 3 ] }, + * '4': { A: [ 4 ], B: [ 5 ], C: [ 6 ] }, + * '20': { A: [ 20 ], B: [ 30 ], C: [ 40 ] }, + * '39': { A: [ 39 ], B: [ 89 ], C: [ 78 ] } + * } + * Since for groupby using more than one columns is index via '-' + * e.g for df.groupby(['A','B']) + * the result will look like this + * { + * '1-2': {A: [ 1 ], B: [ 2 ], C: [ 3 ]}, + * '4-5': {A: [ 4 ], B: [ 5 ], C: [ 6 ]} + * } + * but in doing analysis on a specific column like this + * df.groupby(['A','B']).col(['C']) + * will have the following set of internal result + * { + * '1-2': { C: [ 3 ]}, + * '4-5': {C: [ 6 ]} + * } + * In building our multindex type of DataFrame for this data, + * we've somehow loose track of value for column A and B. + * This could actually be generated by using split('-') on the object keys + * e.g '1-2'.split('-') will give us the value for A and B. + * But we might have weird case scenerio where A and B value has '-` + * e.g + * { + * '1--2-': { C: [ 3 ]}, + * '4--5-': {C: [ 6 ]} + * } + * using `.split('-') might not work well + * Hence we create a key-value `keyToValue` object to store index and their + * associated value + * NOTE: In the previous implementation we made use of Graph representation + * for the group by data and Depth First search (DFS). But we decided to use key-value + * object in javascript as an hashmap to reduce search time compared to using Grpah and DFS + */ + group(): Groupby{ + const self = this + let keyToValue:{ + [key: string] : ArrayType1D + } = {} + const group = this.data?.reduce((prev: any, current)=>{ + let indexes= [] + for(let i in self.colIndex) { + let index = self.colIndex[i] as number + indexes.push(current[index]) + } + let index = indexes.join('-') + + if(!keyToValue[index]) { + keyToValue[index] = indexes + } + + if(prev[index]) { + let data = prev[index] + for (let i in self.columnName) { + let colName = self.columnName[i] as string + data[colName].push(current[i]) + } + } else { + prev[index] = {} + for (let i in self.columnName) { + let colName = self.columnName[i] as string + prev[index][colName] = [current[i]] + } + } + return prev + + }, {}) + this.colDict = group + this.keyToValue = keyToValue + return this + } + + /** + * Generate new internal groupby data + * group = df.groupby(['A', 'B']).col('C') + * This filter the colDict property as generated by `.group()` + * it filter each group to contain only column `C` in their internal object + * e.g + * { + * '1-2': {A: [ 1 ], B: [ 2 ], C: [ 3 ]}, + * '4-5': {A: [ 4 ], B: [ 5 ], C: [ 6 ]} + * } + * to + * { + * '1-2': { C: [ 3 ]}, + * '4-5': {C: [ 6 ]} + * } + * @param colNames column names + * @return Groupby + */ + col(colNames: ArrayType1D | undefined): Groupby { + + if (typeof colNames === "undefined") { + colNames = this.columnName.filter((_, index)=>{ + return !this.colIndex.includes(index) + }) + } + let self = this + colNames.forEach((val) => { + if (!self.columnName.includes(val)) + throw new Error(`Column ${val} does not exist in groups`) + }) + let colDict: { [key: string ]: {} } = {...this.colDict} + for(let [key, values] of Object.entries(colDict)) { + let c: { [key: string ]: [] } = {} + let keyVal: any = {...values} + for(let colKey in colNames) { + let colName = colNames[colKey] as string + c[colName] = keyVal[colName] + } + colDict[key] = c + } + const gp = new Groupby( + this.keyCol, + null, + this.columnName, + this.colDtype, + this.colIndex + ) + gp.colDict = colDict + gp.groupColNames = colNames as Array + gp.keyToValue = this.keyToValue + + return gp + } + + /** + * Perform all groupby arithmetic operations + * In the previous implementation all groups data are + * stord as DataFrame, which involve lot of memory usage + * Hence each groups are just pure javascrit object + * and all arithmetic operation is done directly on javascript + * arrays. + * e.g + * using this internal data + * { + * '1-2': {A: [ 1,3 ], B: [ 2,5 ], C: [ 3, 5 ]}, + * '4-5': {A: [ 4,1 ], B: [ 5,0 ], C: [ 6, 12 ]} + * } + * 1) using groupby(['A', 'B']).arithmetic("mean") + * result: * { + * '1-2': {A_mean: [ 2 ], B_mean: [ 3.5 ], C_mean: [ 4 ]}, + * '4-5': {A_mean: [ 2.5 ], B: [ 2.5 ], C_mean: [ 9 ]} + * } + * 2) .arithmetic({ + * A: 'mean', + * B: 'sum', + * C: 'min' + * }) + * result: + * { + * '1-2': {A_mean: [ 2 ], B_sum: [ 7 ], C_min: [ 3 ]}, + * '4-5': {A_mean: [ 2.5 ], B_sum: [ 5 ], C_min: [ 6 ]} + * } + * 3) .arithmetic({ + * A: 'mean', + * B: 'sum', + * C: ['min', 'max'] + * }) + * result: + * { + * '1-2': {A_mean: [ 2 ], B_sum: [ 7 ], C_min: [ 3 ], C_max: [5]}, + * '4-5': {A_mean: [ 2.5 ], B_sum: [ 5 ], C_min: [ 6 ], C_max: [12]} + * } + * @param operation + */ + private arithemetic(operation: {[key: string] : Array | string} | string): { [key: string ]: {} } { + + const opsName = [ "mean", "sum", "count", "mode", "std", "var", "cumsum", "cumprod", + "cummax", "cummin", "median" , "min"]; + if (typeof operation === "string" ) { + if (!opsName.includes(operation)) { + throw new Error(`group operation: ${operation} is not valid`) + } + } else { + Object.keys(operation).forEach((key)=>{ + let ops = operation[key] + if(Array.isArray(ops)) { + for(let op of ops) { + if (!opsName.includes(op)) { + throw new Error(`group operation: ${op} for column ${key} is not valid`) + } + } + } else { + if (!opsName.includes(ops)) { + throw new Error(`group operation: ${ops} for column ${key} is not valid`) + } + } + + }) + } + let colDict: { [key: string ]: {} } = {...this.colDict} + for(const [key, values] of Object.entries(colDict)) { + let colVal: { [key: string ]: Array } = {} + let keyVal: any = {...values} + let groupColNames: Array = this.groupColNames as Array + for(let colKey=0; colKey < groupColNames.length; colKey++) { + let colName = groupColNames[colKey] + let colIndex = this.columnName.indexOf(colName) + let colDtype = this.colDtype[colIndex] + if (colDtype === "string") throw new Error(`Can't perform math operation on column ${colName}`) + + if (typeof operation === "string") { + let colName2 = `${colName}_${operation}` + colVal[colName2] = this.groupMathLog(keyVal[colName], operation) + } + else { + if(Array.isArray(operation[colName])) { + for(let ops of operation[colName]) { + let colName2 = `${colName}_${ops}` + colVal[colName2] = this.groupMathLog(keyVal[colName],ops) + } + } else { + let ops: string = operation[colName] as string + let colName2 = `${colName}_${ops}` + colVal[colName2] = this.groupMathLog(keyVal[colName], ops) + } + + } + } + colDict[key] = colVal + } + return colDict + } + + /** + * Peform all arithmetic logic + * @param colVal + * @param ops + */ + private groupMathLog(colVal: Array, ops: string): Array{ + let data = [] + switch(ops) { + case "max": + let max = colVal.reduce((prev, curr)=> { + if (prev > curr) { + return prev + } + return curr + }) + data.push(max) + break; + case "min": + let min = colVal.reduce((prev, curr)=> { + if (prev < curr) { + return prev + } + return curr + }) + data.push(min) + break; + case "sum": + let sum = colVal.reduce((prev, curr)=> { + return prev + curr + }) + data.push(sum) + break; + case "count": + data.push(colVal.length) + break; + case "mean": + let sumMean = colVal.reduce((prev, curr)=> { + return prev + curr + }) + data.push(sumMean / colVal.length) + break; + case "std": + data.push(std(colVal)) + break; + case "var": + data.push(variance(colVal)) + break; + case "median": + data.push(median(colVal)) + break; + case "mode": + data.push(mode(colVal)) + break; + case "cumsum": + colVal.reduce((prev, curr) => { + let sum = prev + curr + data.push(sum) + return sum + }, 0) + break; + case "cummin": + data = [colVal[0]] + colVal.slice(1,).reduce((prev, curr)=>{ + if (prev < curr) { + data.push(prev) + return prev + } + data.push(curr) + return curr + }, data[0]) + break; + case "cummax": + data = [colVal[0]] + colVal.slice(1,).reduce((prev, curr)=> { + if (prev > curr) { + data.push(prev) + return prev + } + data.push(curr) + return curr + }, data[0]) + break; + case "cumprod": + colVal.reduce((prev, curr) => { + let sum = prev * curr + data.push(sum) + return sum + }, 1) + break; + } + return data + } + + /** + * Takes in internal groupby internal data and convert + * them to a single data frame. + * @param colDict + */ + private toDataFrame(colDict: { [key: string ]: {} }): DataFrame { + let data: { [key: string ]: ArrayType1D } = {} + + for(let key of this.colKeyDict(colDict)) { + let value = colDict[key] + let keyDict: { [key: string ]: ArrayType1D } = {} + let oneValue = Object.values(value)[0] as ArrayType1D + let valueLen = oneValue.length + for(let key1 in this.keyCol) { + let keyName = this.keyCol[key1] as string + let keyValue = this.keyToValue[key][key1] + keyDict[keyName] = Array(valueLen).fill(keyValue) + } + let combine: { [key: string ]: ArrayType1D } = {...keyDict, ...value} + if(Object.keys(data).length < 1) { + data = combine + } else { + for(let dataKey of Object.keys(data)) { + let dataValue = combine[dataKey] as ArrayType1D + data[dataKey] = [...data[dataKey], ...dataValue] + } + } + } + return new DataFrame(data) + } + + private operations(ops: string): DataFrame { + if (!this.groupColNames) { + let colGroup = this.col(undefined) + let colDict = colGroup.arithemetic(ops) + let df = colGroup.toDataFrame(colDict) + return df + } + let colDict = this.arithemetic(ops) + let df = this.toDataFrame(colDict) + return df + } + + /** + * Obtain the count for each group + * @returns DataFrame + * + */ + count(): DataFrame { + return this.operations("count") + } + + /** + * Obtain the sum of columns for each group + * @returns DataFrame + * + */ + sum(): DataFrame{ + return this.operations("sum") + } + + /** + * Obtain the variance of columns for each group + * @returns DataFrame + */ + var(): DataFrame{ + return this.operations("var") + } + + /** + * Obtain the mean of columns for each group + * @returns DataFrame + */ + mean(): DataFrame{ + return this.operations("mean") + } + + /** + * Obtain the cumsum of columns for each group + * @returns DataFrame + * + */ + cumSum(): DataFrame{ + return this.operations("cumsum") + } + + /** + * Obtain the cummax of columns for each group + * @returns DataFrame + */ + cumMax(): DataFrame{ + return this.operations("cummax") + } + + /** + * Obtain the cumprod of columns for each group + * @returns DataFrame + */ + cumProd(): DataFrame{ + return this.operations("cumprod") + } + + /** + * Obtain the cummin of columns for each group + * @returns DataFrame + */ + cumMin(): DataFrame{ + return this.operations("cummin") + } + + /** + * Obtain the max value of columns for each group + * @returns DataFrame + * + */ + max(): DataFrame{ + return this.operations("max") + } + + /** + * Obtain the min of columns for each group + * @returns DataFrame + */ + min(): DataFrame{ + return this.operations("min") + } + + /** + * Obtain a specific group + * @param keys Array + * @returns DataFrame + */ + getGroup(keys: Array): DataFrame { + let dictKey = keys.join("-") + let colDict: { [key: string ]: {} } = {} + colDict[dictKey] = {...this.colDict[dictKey]} + return this.toDataFrame(colDict) + } + + /** + * Perform aggregation on all groups + * @param ops + * @returns DataFrame + */ + agg(ops: { [key: string ]: Array | string }): DataFrame { + let columns = Object.keys(ops); + let col_gp = this.col(columns); + let data = col_gp.arithemetic(ops); + let df = col_gp.toDataFrame(data); + return df; + } + + /** + * Apply custom aggregator function + * to each group + * @param callable + * @returns DataFrame + * @example + * let grp = df.groupby(['A']) + * grp.apply((x) => x.count()) + */ + apply(callable: (x: DataFrame)=> DataFrame | Series ): DataFrame { + let colDict: { [key: string ]: DataFrame | Series } = {} + for(const key of this.colKeyDict(this.colDict)) { + let valDataframe = new DataFrame(this.colDict[key]) + colDict[key] = callable(valDataframe) + } + return this.concatGroups(colDict) + } + + private concatGroups(colDict: {[key: string]: DataFrame | Series}): DataFrame { + let data: Array = [] + for(const [key, values] of Object.entries(colDict)) { + let copyDf: DataFrame; + if (values instanceof DataFrame) { + copyDf = values.copy() + } + else { + let columns = values.index as string[] + columns = columns.length > 1 ? columns : ['applyOps'] + copyDf = new DataFrame([values.values], {columns: columns }) + } + let len = copyDf.shape[0] + let key1: any; + for(key1 in this.keyCol){ + + let keyName = this.keyCol[key1] as string + let keyValue = this.keyToValue[key][key1] + let dfValue = Array(len).fill(keyValue) + let atIndex: number = parseInt(key1) + if (this.groupColNames) { + copyDf.addColumn(keyName, dfValue, {inplace: true, atIndex: atIndex }) + } + else { + copyDf.addColumn(`${keyName}_Group`, dfValue, {inplace: true, atIndex: atIndex }) + } + + } + data.push(copyDf) + } + return concat({dfList: data, axis:0}) as DataFrame + } + + /** + * obtain the total number of groups + * @returns number + */ + get ngroups(): number{ + let keys = Object.keys(this.colDict) + return keys.length + } + + /** + * obtaind the internal group data + * @returns {[keys: string]: {}} + */ + get groups(): {[keys: string]: {}}{ + return this.colDict + } + + /** + * Obtain the first row of each group + * @returns DataFrame + */ + first(): DataFrame{ + return this.apply((x)=>{ + return x.head(1) + }) + } + + /** + * Obtain the last row of each group + * @returns DataFrame + */ + last(): DataFrame { + return this.apply((x)=>{ + return x.tail(1) + }) + } + + /** + * Obtains the dataframe se of each groups + * @returns DataFrame + */ + size(): DataFrame { + return this.apply((x)=>{ + return new Series([x.shape[0]]) + }) + } + + private colKeyDict(colDict: { [key: string ]: {} }): string[]{ + let keyDict :{ [key: string ]: string[] } = {} + + for(let key of Object.keys(colDict)) { + let firstKey = key.split("-")[0] + if (firstKey in keyDict) { + keyDict[firstKey].push(key) + } + else { + keyDict[firstKey] = [key] + } + } + let keys = [] + for(let key of Object.keys(keyDict)) { + keys.push(...keyDict[key]) + } + return keys + } + +} \ No newline at end of file diff --git a/src/danfojs-base/core/daterange.ts b/src/danfojs-base/core/daterange.ts new file mode 100644 index 00000000..7d342645 --- /dev/null +++ b/src/danfojs-base/core/daterange.ts @@ -0,0 +1,271 @@ +/** +* @license +* Copyright 2022 JsData. All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ========================================================================== +*/ +import Utils from "../shared/utils"; + +const utils = new Utils(); + +interface Params { + start?: string; + offset?: number; + end?: string; + freq?: string; + period?: number +} +class DateRange { + private offset?: number + private start?: string + private end?: string + private freq: string + private period?: number + private freqList: string[] + + constructor({start, end, offset, freq, period}: Params){ + this.start = start + this.end = end + this.offset = offset + this.freq = freq ? freq : "D" + this.period = period + this.freqList = [ "M", "D", "s", "H", "m", "Y" ] + + if (this.freq.length == 1){ + if (!this.freqList.includes(this.freq)){ + throw new Error(`invalid freq ${this.freq}`); + } + } else { + this.offset = parseInt(this.freq.slice(0, -1)); + if (!Number.isFinite(this.offset)){ + throw new Error(`invalid freq offset ${this.freq.slice(0, -1)}`); + } + this.freq = this.freq.slice(-1); + if (!this.freqList.includes(this.freq)){ + throw new Error(`invalid freq ${this.freq}`); + } + } + + } + + range(): string[] { + let start = this.start + let period = this.period + let end = this.end + let offset = this.offset + let startDate: Date + let endDate: Date + let startRange: number + let endRange: number + if (start && end) { + startDate = new Date(start) + startRange = this.freqType(startDate, this.freq) + endDate = new Date(end) + endRange = this.freqType(endDate, this.freq) + + let startYear = startDate.getFullYear() + let endYear = endDate.getFullYear() + if ((startYear <= endYear) && (startDate.getMonth() !== endDate.getMonth())){ + if (this.freq == "M") { + endRange = this.monthEnd(startDate, endDate) + } + else if (this.freq === "D") { + endRange = this.dayEnd(startDate, endDate) - startRange + } + } + let rangeArray = utils.range(startRange, endRange) + if ( offset ) { + rangeArray = this.offsetCount(rangeArray, offset) + } + let dateRange = rangeArray.map((x) => { + return this.setDateProps(startDate, this.freq, x) + }) + dateRange[dateRange.length -1] = endDate + let dateString = this.toLocalString(dateRange) + return dateString + } + else if ( start && !(end) ) { + startDate = new Date(start) + startRange = this.freqType(startDate, this.freq) + period = period as number + endRange = offset ? ((period * offset) - 1) : period -1; + + if ( startRange > endRange ) { + endRange = endRange + startRange + } + let rangeArray = utils.range(startRange, endRange) + + if ( offset ) { + rangeArray = this.offsetCount(rangeArray, offset) + } + let dateRange = rangeArray.map((x) => { + return this.setDateProps(startDate, this.freq, x) + }) + + let dateString = this.toLocalString(dateRange) + return dateString + } + // if end and not start given + endDate = new Date(end as string) + endRange = this.freqType(endDate, this.freq) + period = period as number + startRange = (endRange - period) + 1 + let rangeArray = utils.range(startRange, endRange) + + if ( offset ) { + rangeArray = this.offsetCount(rangeArray, offset) + } + let dateRange = rangeArray.map((x) => { + return this.setDateProps(endDate, this.freq, x) + }) + let dateString = this.toLocalString(dateRange) + return dateString + } + + /** + * @param date Date + * @param ftype string: frequency type, month, Year, day etc + * @param number + */ + private freqType(date: Date, ftype: string): number{ + let rslt: number = 0; + switch (ftype){ + + case "M": + rslt = date.getMonth(); + break; + case "Y": + rslt = date.getFullYear(); + break; + case "s": + rslt = date.getSeconds(); + break; + case "D": + rslt = date.getDate(); + break; + case "H": + rslt = date.getHours(); + break; + case "m": + rslt = date.getMinutes(); + break; + } + return rslt; + } + + + private offsetCount(dArray: number[], offset: number) :number[] { + let rArray: number[] = [] + for (let i = 0; i < dArray.length; i += offset){ + rArray.push(dArray[i]); + } + return rArray; + } + + private setDateProps(date: Date, ftype: string, val: number[] | number): Date { + let newDate = new Date(date.valueOf()) + switch (ftype){ + case "M": + if (Array.isArray(val)){ + + newDate.setFullYear(newDate.getFullYear() + val[0]); + newDate.setMonth(val[1]); + } else { + newDate.setMonth(val); + } + break; + case "Y": + newDate.setFullYear(val as number); + break; + case "s": + newDate.setSeconds(val as number); + break; + case "D": + newDate.setDate(val as number); + break; + case "H": + newDate.setHours(val as number); + break; + case "m": + newDate.setMinutes(val as number); + break; + } + return newDate; + } + + + private toLocalString(dArray: Date[]) { + let r_array = dArray.map((x) => { + return x.toLocaleString(); + }); + return r_array; + } + + private monthEnd(startDate: Date, endDate: Date) { + let endMonth = endDate.getMonth() + let diffYear = endDate.getFullYear() - startDate.getFullYear() + let endRange = (12 * diffYear) + endMonth + return endRange + } + + private monthRange(range: number[]): number[][] { + let minus: number; + let yVal = 0 + let dateRange: number[][] = range.map((x) => { + if (x > 11) { + if ( x % 12 == 0) { + minus = x + yVal = x / 12 + return [yVal, (x - minus)] + } + else { + return [yVal, (x -minus)] + } + } + return [yVal, x] + }) + return dateRange + } + + private dayEnd(startDate: Date, endDate: Date): number{ + let monthEnd = this.monthEnd(startDate, endDate) + let range = utils.range(startDate.getMonth(), monthEnd) + let mRange = this.monthRange(range) + + let sum = 0 + for (let i=0; i < mRange.length; i++) { + let val = mRange[i] + let dDate: number + if (i === mRange.length - 1) { + dDate = new Date(startDate.getUTCFullYear() + val[0], val[1], endDate.getDate()).getDate() + } + else { + dDate = new Date(startDate.getUTCFullYear() + val[0], val[1], 0).getDate() + } + sum += dDate + } + return sum + } +} + +/** + * Generate sequence of Dates + * @param start : signify the date to start with + * @param end : signify the date to end with + * @param period : the total number of date to generate + * @param offset : set the date range offset + * @param freq: set the date range frequency and offset + * @return string[] + */ +export default function dateRange(param: Params): string[] { + const dateRange = new DateRange(param) + return dateRange.range() +} \ No newline at end of file diff --git a/src/danfojs-base/core/datetime.ts b/src/danfojs-base/core/datetime.ts new file mode 100644 index 00000000..264f0e10 --- /dev/null +++ b/src/danfojs-base/core/datetime.ts @@ -0,0 +1,243 @@ +/** +* @license +* Copyright 2022 JsData. All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ========================================================================== +*/ +import { ArrayType1D, DateTime } from "../shared/types"; +import Series from "./series"; + +const WEEK_NAME = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]; +const MONTH_NAME = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; + +/** + * Format and handle all datetime operations on Series or Array of date strings + * @param data Series or Array of date strings + */ +export default class TimeSeries implements DateTime { + private $dateObjectArray: Array + + constructor(data: Series | ArrayType1D) { + if (data instanceof Series) { + this.$dateObjectArray = this.processData(data.values as ArrayType1D) + } else { + this.$dateObjectArray = this.processData(data) + } + } + + /** + * Processed the data values into internal structure for easy access + * @param dateArray An array of date strings + */ + private processData(dateArray: ArrayType1D): Array { + const values = dateArray.map(dateString => new Date(`${dateString}`)) + return values + } + + /** + * Returns the month, in local time. + * @example + * ``` + * import { Dataframe } from "danfojs-node" + * const data = [ + * "2019-01-01", + * "2019-02-01", + * "2019-03-01", + * "2019-04-01", + * ] + * const df = new Dataframe(data) + * const dfNew = df.dt.month() + * console.log(dfNew.values) + * // [1, 2, 3, 4] + * ``` + */ + month(): Series { + const newValues = this.$dateObjectArray.map(date => date.getMonth()) + return new Series(newValues); + } + + /** + * Returns the day of the week, in local time + * @example + * ``` + * import { Dataframe } from "danfojs-node" + * const data = [ + * "2019-01-01", + * "2019-02-01", + * "2019-03-01", + * "2019-04-01", + * ] + * const df = new Dataframe(data) + * const dayOfWeek = df.dt.dayOfWeek() + * console.log(dayOfWeek.values) + * ``` + */ + dayOfWeek() { + const newValues = this.$dateObjectArray.map(date => date.getDay()) + return new Series(newValues); + } + + /** + * Returns the year, in local time + * @example + * ``` + * import { Dataframe } from "danfojs-node" + * const data = [ + * "2019-01-01", + * "2019-02-01", + * "2021-03-01", + * "2020-04-01", + * ] + * const df = new Dataframe(data) + * const year = df.dt.year() + * console.log(year.values) + * // [2019, 2019, 2021, 2020] + * ``` + */ + year() { + const newValues = this.$dateObjectArray.map(date => date.getFullYear()) + return new Series(newValues); + } + + /** + * Returns the name of the month, in local time + * @example + * ``` + * import { Dataframe } from "danfojs-node" + * const data = [ + * "2019-01-01", + * "2019-02-01", + * "2021-03-01", + * "2020-04-01", + * ] + * const df = new Dataframe(data) + * const monthName = df.dt.monthName().values + * console.log(monthName) + * // ["January", "February", "March", "April"] + * ``` + */ + monthName() { + const newValues = this.$dateObjectArray.map(date => MONTH_NAME[date.getMonth()]) + return new Series(newValues); + } + + /** + * Returns the name of the day, of the week, in local time + * @example + * ``` + * import { Dataframe } from "danfojs-node" + * const data = [ + * "2019-01-01", + * "2019-02-01", + * "2021-03-01", + * "2020-04-01", + * ] + * const df = new Dataframe(data) + * const dayOfWeekName = df.dt.dayOfWeekName().values + * console.log(dayOfWeekName) + * ``` + */ + dayOfWeekName() { + const newValues = this.$dateObjectArray.map(date => WEEK_NAME[date.getDay()]) + return new Series(newValues); + } + + /** + * Returns the day of the month, in local time + * @example + * ``` + * import { Dataframe } from "danfojs-node" + * const data = [ + * "2019-01-01", + * "2019-02-05", + * "2021-03-02", + * "2020-04-01", + * ] + * const df = new Dataframe(data) + * const dayOfMonth = df.dt.dayOfMonth().values + * console.log(dayOfMonth) + * // [1, 5, 2, 1] + * ``` + */ + dayOfMonth() { + const newValues = this.$dateObjectArray.map(date => date.getDate()) + return new Series(newValues); + } + + /** + * Returns the hour of the day, in local time + * @example + * ``` + * import { Dataframe } from "danfojs-node" + * const data = [ + * "2019-01-01", + * "2019-02-05", + * "2021-03-02", + * "2020-04-01", + * ] + * const df = new Dataframe(data) + * const hour = df.dt.hour().values + * console.log(hour) + * // [0, 0, 0, 0] + * ``` + */ + hours() { + const newValues = this.$dateObjectArray.map(date => date.getHours()) + return new Series(newValues); + } + + /** + * Returns the second of the day, in local time + * @example + * ``` + * import { Dataframe } from "danfojs-node" + * const data = [ + * "2019-01-01", + * "2019-02-05", + * "2021-03-02", + * "2020-04-01", + * ] + * const df = new Dataframe(data) + * const second = df.dt.second().values + * console.log(second) + * ``` + */ + seconds() { + const newValues = this.$dateObjectArray.map(date => date.getSeconds()) + return new Series(newValues); + } + + /** + * Returns the minute of the day, in local time + * @example + * ``` + * import { Dataframe } from "danfojs-node" + * const data = [ + * "2019-01-01", + * "2019-02-05", + * "2021-03-02", + * "2020-04-01", + * ] + * const df = new Dataframe(data) + * const minute = df.dt.minute().values + * console.log(minute) + * ``` + */ + minutes() { + const newValues = this.$dateObjectArray.map(date => date.getMinutes()) + return new Series(newValues); + } + +} + +export const toDateTime = (data: Series | ArrayType1D) => { + return new TimeSeries(data); +}; diff --git a/src/danfojs-base/core/frame.ts b/src/danfojs-base/core/frame.ts new file mode 100644 index 00000000..7cdd004f --- /dev/null +++ b/src/danfojs-base/core/frame.ts @@ -0,0 +1,3330 @@ +/** +* @license +* Copyright 2022 JsData. All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ========================================================================== +*/ +import { toCSVBrowser, toExcelBrowser, toJSONBrowser } from "../io/browser"; +import { toCSVNode, toExcelNode, toJSONNode } from "../io/node"; +import dummyEncode from "../transformers/encoders/dummy.encoder"; +import { variance, std, median, mode, mean } from 'mathjs'; +import tensorflow from '../shared/tensorflowlib' +import { DATA_TYPES } from '../shared/defaults'; +import { _genericMathOp } from "./math.ops"; +import Groupby from '../aggregators/groupby'; +import ErrorThrower from "../shared/errors" +import { _iloc, _loc } from "./indexing"; +import { PlotlyLib } from "../plotting"; +import Utils from "../shared/utils" +import NDframe from "./generic"; +import { table } from "table"; +import Series from './series'; +import { + ArrayType1D, + ArrayType2D, + DataFrameInterface, + BaseDataOptionType, + CsvOutputOptionsBrowser, + ExcelOutputOptionsBrowser, + JsonOutputOptionsBrowser, + CsvOutputOptionsNode, + ExcelOutputOptionsNode, + JsonOutputOptionsNode +} from "../shared/types"; + +const utils = new Utils(); + +/** + * Two-dimensional ndarray with axis labels. + * The object supports both integer- and label-based indexing and provides a host of methods for performing operations involving the index. + * Operations between DataFrame (+, -, /, , *) align values based on their associated index values– they need not be the same length. + * @param data 2D Array, JSON, Tensor, Block of data. + * @param options.index Array of numeric or string names for subseting array. If not specified, indexes are auto generated. + * @param options.columns Array of column names. If not specified, column names are auto generated. + * @param options.dtypes Array of data types for each the column. If not specified, dtypes are/is inferred. + * @param options.config General configuration object for extending or setting NDframe behavior. + */ +export default class DataFrame extends NDframe implements DataFrameInterface { + [key: string]: any + constructor(data: any, options: BaseDataOptionType = {}) { + const { index, columns, dtypes, config } = options; + super({ data, index, columns, dtypes, config, isSeries: false }); + this.$setInternalColumnDataProperty(); + } + + /** + * Maps all column names to their corresponding data, and return them as Series objects. + * This makes column subsetting works. E.g this can work ==> `df["col1"]` + * @param column Optional, a single column name to map + */ + private $setInternalColumnDataProperty(column?: string) { + const self = this; + if (column && typeof column === "string") { + Object.defineProperty(self, column, { + get() { + return self.$getColumnData(column) + }, + set(arr: ArrayType1D | Series) { + self.$setColumnData(column, arr); + } + }) + } else { + const columns = this.columns; + for (let i = 0; i < columns.length; i++) { + const column = columns[i]; + Object.defineProperty(this, column, { + get() { + return self.$getColumnData(column) + }, + set(arr: ArrayType1D | Series) { + self.$setColumnData(column, arr); + } + }) + } + } + + } + + /** + * Returns the column data from the DataFrame by column name. + * @param column column name to get the column data + * @param returnSeries Whether to return the data in series format or not. Defaults to true + */ + private $getColumnData(column: string, returnSeries: boolean = true) { + const columnIndex = this.columns.indexOf(column) + + if (columnIndex == -1) { + ErrorThrower.throwColumnNotFoundError(this) + } + + const dtypes = [this.$dtypes[columnIndex]] + const index = [...this.$index] + const columns = [column] + const config = { ...this.$config } + + if (this.$config.isLowMemoryMode) { + const data: ArrayType1D = [] + for (let i = 0; i < this.values.length; i++) { + const row: any = this.values[i]; + data.push(row[columnIndex]) + } + if (returnSeries) { + return new Series(data, { + dtypes, + index, + columns, + config + }) + } else { + return data + } + + } else { + const data = this.$dataIncolumnFormat[columnIndex] + if (returnSeries) { + return new Series(data, { + dtypes, + index, + columns, + config + }) + } else { + return data + } + } + + } + + + /** + * Updates the internal column data via column name. + * @param column The name of the column to update. + * @param arr The new column data + */ + private $setColumnData(column: string, arr: ArrayType1D | Series): void { + + const columnIndex = this.$columns.indexOf(column) + + if (columnIndex == -1) { + throw new Error(`ParamError: column ${column} not found in ${this.$columns}. If you need to add a new column, use the df.addColumn method. `) + } + + let colunmValuesToAdd: ArrayType1D + + if (arr instanceof Series) { + colunmValuesToAdd = arr.values as ArrayType1D + } else if (Array.isArray(arr)) { + colunmValuesToAdd = arr; + } else { + throw new Error("ParamError: specified value not supported. It must either be an Array or a Series of the same length") + } + + if (colunmValuesToAdd.length !== this.shape[0]) { + ErrorThrower.throwColumnLengthError(this, colunmValuesToAdd.length) + } + + if (this.$config.isLowMemoryMode) { + //Update row ($data) array + for (let i = 0; i < this.$data.length; i++) { + (this.$data as any)[i][columnIndex] = colunmValuesToAdd[i] + } + //Update the dtypes + this.$dtypes[columnIndex] = utils.inferDtype(colunmValuesToAdd)[0] + } else { + //Update row ($data) array + for (let i = 0; i < this.values.length; i++) { + (this.$data as any)[i][columnIndex] = colunmValuesToAdd[i] + } + //Update column ($dataIncolumnFormat) array since it's available in object + (this.$dataIncolumnFormat as any)[columnIndex] = arr + + //Update the dtypes + this.$dtypes[columnIndex] = utils.inferDtype(colunmValuesToAdd)[0] + } + + } + + /** + * Return data with missing values removed from a specified axis + * @param axis 0 or 1. If 0, column-wise, if 1, row-wise + */ + private $getDataByAxisWithMissingValuesRemoved(axis: number): Array { + const oldValues = this.$getDataArraysByAxis(axis); + const cleanValues = []; + for (let i = 0; i < oldValues.length; i++) { + const values = oldValues[i] as number[] + cleanValues.push(utils.removeMissingValuesFromArray(values) as number[]); + } + return cleanValues; + } + + /** + * Return data aligned to the specified axis. Transposes the array if needed. + * @param axis 0 or 1. If 0, column-wise, if 1, row-wise + */ + private $getDataArraysByAxis(axis: number): ArrayType2D { + if (axis === 1) { + return this.values as ArrayType2D + } else { + let dfValues; + if (this.config.isLowMemoryMode) { + dfValues = utils.transposeArray(this.values) as ArrayType2D + } else { + dfValues = this.$dataIncolumnFormat as ArrayType2D + } + return dfValues + } + } + + /* + * checks if DataFrame is compactible for arithmetic operation + * compatible Dataframe must have only numerical dtypes + **/ + private $frameIsNotCompactibleForArithmeticOperation() { + const dtypes = this.dtypes; + const str = (element: any) => element == "string"; + return dtypes.some(str) + } + + /** + * Return Tensors in the right axis for math operations. + * @param other DataFrame or Series or number or array + * @param axis 0 or 1. If 0, column-wise, if 1, row-wise + * */ + private $getTensorsForArithmeticOperationByAxis( + other: DataFrame | Series | number | Array, + axis: number + ) { + if (typeof other === "number") { + return [this.tensor, tensorflow.scalar(other)]; + } else if (other instanceof DataFrame) { + return [this.tensor, other.tensor]; + } else if (other instanceof Series) { + if (axis === 0) { + return [this.tensor, tensorflow.tensor2d(other.values as Array, [other.shape[0], 1])]; + } else { + return [this.tensor, tensorflow.tensor2d(other.values as Array, [other.shape[0], 1]).transpose()]; + } + } else if (Array.isArray(other)) { + if (axis === 0) { + return [this.tensor, tensorflow.tensor2d(other, [other.length, 1])]; + } else { + return [this.tensor, tensorflow.tensor2d(other, [other.length, 1]).transpose()]; + } + } else { + throw new Error("ParamError: Invalid type for other parameter. other must be one of Series, DataFrame or number.") + } + + } + + /** + * Returns the dtype for a given column name + * @param column + */ + private $getColumnDtype(column: string): string { + const columnIndex = this.columns.indexOf(column) + if (columnIndex === -1) { + throw Error(`ColumnNameError: Column "${column}" does not exist`) + } + return this.dtypes[columnIndex] + } + + private $logicalOps(tensors: typeof tensorflow.Tensor[], operation: string) { + let newValues: number[] = [] + + switch (operation) { + case 'gt': + newValues = tensors[0].greater(tensors[1]).arraySync() as number[] + break; + case 'lt': + newValues = tensors[0].less(tensors[1]).arraySync() as number[] + break; + case 'ge': + newValues = tensors[0].greaterEqual(tensors[1]).arraySync() as number[] + break; + case 'le': + newValues = tensors[0].lessEqual(tensors[1]).arraySync() as number[] + break; + case 'eq': + newValues = tensors[0].equal(tensors[1]).arraySync() as number[] + break; + case 'ne': + newValues = tensors[0].notEqual(tensors[1]).arraySync() as number[] + break; + + } + + const newData = utils.mapIntegersToBooleans(newValues, 2) + return new DataFrame( + newData, + { + index: [...this.index], + columns: [...this.columns], + dtypes: [...this.dtypes], + config: { ...this.config } + }) + } + + private $MathOps(tensors: typeof tensorflow.Tensor[], operation: string, inplace: boolean) { + let tensorResult + + switch (operation) { + case 'add': + tensorResult = tensors[0].add(tensors[1]) + break; + case 'sub': + tensorResult = tensors[0].sub(tensors[1]) + break; + case 'pow': + tensorResult = tensors[0].pow(tensors[1]) + break; + case 'div': + tensorResult = tensors[0].div(tensors[1]) + break; + case 'mul': + tensorResult = tensors[0].mul(tensors[1]) + break; + case 'mod': + tensorResult = tensors[0].mod(tensors[1]) + break; + } + + if (inplace) { + const newData = tensorResult?.arraySync() as ArrayType2D + this.$setValues(newData) + } else { + return new DataFrame( + tensorResult, + { + index: [...this.index], + columns: [...this.columns], + dtypes: [...this.dtypes], + config: { ...this.config } + }) + + } + } + + /** + * Purely integer-location based indexing for selection by position. + * ``.iloc`` is primarily integer position based (from ``0`` to + * ``length-1`` of the axis), but may also be used with a boolean array. + * + * @param rows Array of row indexes + * @param columns Array of column indexes + * + * Allowed inputs are in rows and columns params are: + * + * - An array of single integer, e.g. ``[5]``. + * - A list or array of integers, e.g. ``[4, 3, 0]``. + * - A slice array string with ints, e.g. ``["1:7"]``. + * - A boolean array. + * - A ``callable`` function with one argument (the calling Series or + * DataFrame) and that returns valid output for indexing (one of the above). + * This is useful in method chains, when you don't have a reference to the + * calling object, but would like to base your selection on some value. + * + * ``.iloc`` will raise ``IndexError`` if a requested indexer is + * out-of-bounds. + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B'] }) + * const df2 = df.iloc({ rows: [1], columns: ["A"] }) + * ``` + */ + iloc({ rows, columns }: { + rows?: Array | Series, + columns?: Array + }): DataFrame { + return _iloc({ ndFrame: this, rows, columns }) as DataFrame; + } + + + /** + * Access a group of rows and columns by label(s) or a boolean array. + * ``loc`` is primarily label based, but may also be used with a boolean array. + * + * @param rows Array of row indexes + * @param columns Array of column indexes + * + * Allowed inputs are: + * + * - A single label, e.g. ``["5"]`` or ``['a']``, (note that ``5`` is interpreted as a + * *label* of the index, and **never** as an integer position along the index). + * + * - A list or array of labels, e.g. ``['a', 'b', 'c']``. + * + * - A slice object with labels, e.g. ``["a:f"]``. Note that start and the stop are included + * + * - A boolean array of the same length as the axis being sliced, + * e.g. ``[True, False, True]``. + * + * - A ``callable`` function with one argument (the calling Series or + * DataFrame) and that returns valid output for indexing (one of the above) + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B'] }) + * const df2 = df.loc({ rows: [1], columns: ["A"] }) + * ``` + */ + loc({ rows, columns }: { + rows?: Array | Series, + columns?: Array + }): DataFrame { + return _loc({ ndFrame: this, rows, columns }) as DataFrame + } + + /** + * Prints DataFrame to console as a formatted grid of row and columns. + */ + toString(): string { + const maxRow = this.config.getMaxRow; + const maxColToDisplayInConsole = this.config.getTableMaxColInConsole; + + // let data; + const dataArr: ArrayType2D = []; + const colLen = this.columns.length; + + let header = []; + + if (colLen > maxColToDisplayInConsole) { + //truncate displayed columns to fit in the console + let firstFourcolNames = this.columns.slice(0, 4); + let lastThreecolNames = this.columns.slice(colLen - 3); + //join columns with truncate ellipse in the middle + header = ["", ...firstFourcolNames, "...", ...lastThreecolNames]; + + let subIdx: Array + let firstHalfValues: ArrayType2D + let lastHalfValueS: ArrayType2D + + if (this.values.length > maxRow) { + //slice Object to show [max_rows] + let dfSubset1 = this.iloc({ + rows: [`0:${maxRow}`], + columns: ["0:4"] + }); + + let dfSubset2 = this.iloc({ + rows: [`0:${maxRow}`], + columns: [`${colLen - 3}:`] + }); + + subIdx = this.index.slice(0, maxRow); + firstHalfValues = dfSubset1.values as ArrayType2D + lastHalfValueS = dfSubset2.values as ArrayType2D + + } else { + let dfSubset1 = this.iloc({ columns: ["0:4"] }); + let dfSubset2 = this.iloc({ columns: [`${colLen - 3}:`] }); + + subIdx = this.index.slice(0, maxRow); + firstHalfValues = dfSubset1.values as ArrayType2D + lastHalfValueS = dfSubset2.values as ArrayType2D + } + + // merge subset + for (let i = 0; i < subIdx.length; i++) { + const idx = subIdx[i]; + const row = [idx, ...firstHalfValues[i], "...", ...lastHalfValueS[i]] + dataArr.push(row); + } + + } else { + //display all columns + header = ["", ...this.columns] + let subIdx + let values: ArrayType2D + if (this.values.length > maxRow) { + //slice Object to show a max of [max_rows] + let data = this.iloc({ rows: [`0:${maxRow}`] }); + subIdx = data.index; + values = data.values as ArrayType2D + } else { + values = this.values as ArrayType2D + subIdx = this.index; + } + + // merge subset + for (let i = 0; i < subIdx.length; i++) { + const idx = subIdx[i]; + const row = [idx, ...values[i]]; + dataArr.push(row); + } + } + + + const columnsConfig: any = {}; + columnsConfig[0] = { width: 10 }; //set column width for index column + + for (let index = 1; index < header.length; index++) { + columnsConfig[index] = { width: 17, truncate: 16 }; + } + + const tableData: any = [header, ...dataArr]; //Adds the column names to values before printing + + return table(tableData, { columns: columnsConfig, ...this.config.getTableDisplayConfig }); + } + + /** + * Returns the first n values in a DataFrame + * @param rows The number of rows to return + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * const df2 = df.head(1) + * ``` + */ + head(rows: number = 5): DataFrame { + if (rows > this.shape[0]) { + throw new Error("ParamError: Number of rows cannot be greater than available rows in data") + } + if (rows <= 0) { + throw new Error("ParamError: Number of rows cannot be less than 1") + } + + return this.iloc({ rows: [`0:${rows}`] }) + } + + /** + * Returns the last n values in a DataFrame + * @param rows The number of rows to return + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * const df2 = df.tail(1) + * ``` + */ + tail(rows: number = 5): any { + if (rows > this.shape[0]) { + throw new Error("ParamError: Number of rows cannot be greater than available rows in data") + } + if (rows <= 0) { + throw new Error("ParamError: Number of rows cannot be less than 1") + } + rows = this.shape[0] - rows + return this.iloc({ rows: [`${rows}:`] }) + } + + /** + * Gets n number of random rows in a dataframe. Sample is reproducible if seed is provided. + * @param num The number of rows to return. Default to 5. + * @param options.seed An integer specifying the random seed that will be used to create the distribution. + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B'] }) + * const df2 = await df.sample(1) + * ``` + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B'] }) + * const df2 = await df.sample(1, { seed: 1 }) + * ``` + */ + async sample(num = 5, options?: { seed?: number }): Promise { + const { seed } = { seed: 1, ...options } + + if (num > this.shape[0]) { + throw new Error("ParamError: Sample size cannot be bigger than number of rows"); + } + if (num <= 0) { + throw new Error("ParamError: Sample size cannot be less than 1"); + } + + const shuffledIndex = await tensorflow.data.array(this.index).shuffle(num, `${seed}`).take(num).toArray(); + const df = this.iloc({ rows: shuffledIndex }); + return df; + } + + /** + * Return Addition of DataFrame and other, element-wise (binary operator add). + * @param other DataFrame, Series, Array or Scalar number to add + * @param options.axis 0 or 1. If 0, add column-wise, if 1, add row-wise + * @param options.inplace Boolean indicating whether to perform the operation inplace or not. Defaults to false + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B'] }) + * const df2 = df.add(1) + * df2.print() + * ``` + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B'] }) + * df.add([1, 2], { axis: 0, inplace: true}) + * df.print() + * ``` + */ + add(other: DataFrame | Series | number[] | number, options?: { axis?: 0 | 1, inplace?: boolean }): DataFrame + add(other: DataFrame | Series | number[] | number, options?: { axis?: 0 | 1, inplace?: boolean }): DataFrame | void { + const { inplace, axis } = { inplace: false, axis: 1, ...options } + + if (this.$frameIsNotCompactibleForArithmeticOperation()) { + throw Error("TypeError: add operation is not supported for string dtypes"); + } + + if ([0, 1].indexOf(axis) === -1) { + throw Error("ParamError: Axis must be 0 or 1"); + } + + const tensors = this.$getTensorsForArithmeticOperationByAxis(other, axis); + return this.$MathOps(tensors, "add", inplace) + } + + /** + * Return substraction between DataFrame and other. + * @param other DataFrame, Series, Array or Scalar number to substract from DataFrame + * @param options.axis 0 or 1. If 0, compute the subtraction column-wise, if 1, row-wise + * @param options.inplace Boolean indicating whether to perform the operation inplace or not. Defaults to false + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B'] }) + * const df2 = df.sub(1) + * df2.print() + * ``` + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B'] }) + * df.sub([1, 2], { axis: 0, inplace: true}) + * df.print() + * ``` + */ + sub(other: DataFrame | Series | number[] | number, options?: { axis?: 0 | 1, inplace?: boolean }): DataFrame + sub(other: DataFrame | Series | number[] | number, options?: { axis?: 0 | 1, inplace?: boolean }): DataFrame | void { + const { inplace, axis } = { inplace: false, axis: 1, ...options } + + if (this.$frameIsNotCompactibleForArithmeticOperation()) { + throw Error("TypeError: sub operation is not supported for string dtypes"); + } + + if ([0, 1].indexOf(axis) === -1) { + throw Error("ParamError: Axis must be 0 or 1"); + } + + const tensors = this.$getTensorsForArithmeticOperationByAxis(other, axis); + return this.$MathOps(tensors, "sub", inplace) + + + } + /** + * Return multiplciation between DataFrame and other. + * @param other DataFrame, Series, Array or Scalar number to multiply with. + * @param options.axis 0 or 1. If 0, compute the multiplication column-wise, if 1, row-wise + * @param options.inplace Boolean indicating whether to perform the operation inplace or not. Defaults to false + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B'] }) + * const df2 = df.mul(2) + * df2.print() + * ``` + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B'] }) + * df.mul([1, 2], { axis: 0, inplace: true}) + * df.print() + * ``` + */ + mul(other: DataFrame | Series | number[] | number, options?: { axis?: 0 | 1, inplace?: boolean }): DataFrame + mul(other: DataFrame | Series | number[] | number, options?: { axis?: 0 | 1, inplace?: boolean }): DataFrame | void { + const { inplace, axis } = { inplace: false, axis: 1, ...options } + + if (this.$frameIsNotCompactibleForArithmeticOperation()) { + throw Error("TypeError: mul operation is not supported for string dtypes"); + } + + if ([0, 1].indexOf(axis) === -1) { + throw Error("ParamError: Axis must be 0 or 1"); + } + const tensors = this.$getTensorsForArithmeticOperationByAxis(other, axis); + return this.$MathOps(tensors, "mul", inplace) + + + } + + /** + * Return division of DataFrame with other. + * @param other DataFrame, Series, Array or Scalar number to divide with. + * @param options.axis 0 or 1. If 0, compute the division column-wise, if 1, row-wise + * @param options.inplace Boolean indicating whether to perform the operation inplace or not. Defaults to false + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B'] }) + * const df2 = df.div(2) + * df2.print() + * ``` + */ + div(other: DataFrame | Series | number[] | number, options?: { axis?: 0 | 1, inplace?: boolean }): DataFrame + div(other: DataFrame | Series | number[] | number, options?: { axis?: 0 | 1, inplace?: boolean }): DataFrame | void { + const { inplace, axis } = { inplace: false, axis: 1, ...options } + + if (this.$frameIsNotCompactibleForArithmeticOperation()) { + throw Error("TypeError: div operation is not supported for string dtypes"); + } + + if ([0, 1].indexOf(axis) === -1) { + throw Error("ParamError: Axis must be 0 or 1"); + } + + const tensors = this.$getTensorsForArithmeticOperationByAxis(other, axis); + return this.$MathOps(tensors, "div", inplace) + + + } + + /** + * Return DataFrame raised to the power of other. + * @param other DataFrame, Series, Array or Scalar number to to raise to. + * @param options.axis 0 or 1. If 0, compute the power column-wise, if 1, row-wise + * @param options.inplace Boolean indicating whether to perform the operation inplace or not. Defaults to false + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B'] }) + * const df2 = df.pow(2) + * df2.print() + * ``` + */ + pow(other: DataFrame | Series | number[] | number, options?: { axis?: 0 | 1, inplace?: boolean }): DataFrame + pow(other: DataFrame | Series | number[] | number, options?: { axis?: 0 | 1, inplace?: boolean }): DataFrame | void { + const { inplace, axis } = { inplace: false, axis: 1, ...options } + + if (this.$frameIsNotCompactibleForArithmeticOperation()) { + throw Error("TypeError: pow operation is not supported for string dtypes"); + } + + if ([0, 1].indexOf(axis) === -1) { + throw Error("ParamError: Axis must be 0 or 1"); + } + + const tensors = this.$getTensorsForArithmeticOperationByAxis(other, axis); + return this.$MathOps(tensors, "pow", inplace) + + + } + + /** + * Return modulus between DataFrame and other. + * @param other DataFrame, Series, Array or Scalar number to modulus with. + * @param options.axis 0 or 1. If 0, compute the mod column-wise, if 1, row-wise + * @param options.inplace Boolean indicating whether to perform the operation inplace or not. Defaults to false + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B'] }) + * const df2 = df.mod(2) + * df2.print() + * ``` + */ + mod(other: DataFrame | Series | number[] | number, options?: { axis?: 0 | 1, inplace?: boolean }): DataFrame + mod(other: DataFrame | Series | number[] | number, options?: { axis?: 0 | 1, inplace?: boolean }): DataFrame | void { + const { inplace, axis } = { inplace: false, axis: 1, ...options } + + if (this.$frameIsNotCompactibleForArithmeticOperation()) { + throw Error("TypeError: mod operation is not supported for string dtypes"); + } + + if ([0, 1].indexOf(axis) === -1) { + throw Error("ParamError: Axis must be 0 or 1"); + } + + const tensors = this.$getTensorsForArithmeticOperationByAxis(other, axis); + return this.$MathOps(tensors, "mod", inplace) + + } + + /** + * Return mean of DataFrame across specified axis. + * @param options.axis 0 or 1. If 0, compute the mean column-wise, if 1, row-wise. Defaults to 1 + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B'] }) + * df.mean().print() + * ``` + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B'] }) + * df.mean({ axis: 0 }).print() + * ``` + */ + mean(options?: { axis?: 0 | 1 }): Series { + const { axis } = { axis: 1, ...options } + + if (this.$frameIsNotCompactibleForArithmeticOperation()) { + throw Error("TypeError: mean operation is not supported for string dtypes"); + } + + if ([0, 1].indexOf(axis) === -1) { + throw Error("ParamError: Axis must be 0 or 1"); + } + + const newData = this.$getDataByAxisWithMissingValuesRemoved(axis) + const resultArr = newData.map(arr => arr.reduce((a, b) => a + b, 0) / arr.length) + if (axis === 0) { + return new Series(resultArr, { index: this.columns }); + } else { + return new Series(resultArr, { index: this.index }); + } + } + + /** + * Return median of DataFrame across specified axis. + * @param options.axis 0 or 1. If 0, compute the median column-wise, if 1, row-wise. Defaults to 1 + * @example + * ``` + * const df = new DataFrame([[1, 2, 4], [3, 4, 5], [6, 7, 8]], { columns: ['A', 'B', 'C'] }); + * df.median().print() + * ``` + */ + median(options?: { axis?: 0 | 1 }): Series { + const { axis } = { axis: 1, ...options } + + if (this.$frameIsNotCompactibleForArithmeticOperation()) { + throw Error("TypeError: median operation is not supported for string dtypes"); + } + + if ([0, 1].indexOf(axis) === -1) { + throw Error("ParamError: Axis must be 0 or 1"); + } + + const newData = this.$getDataByAxisWithMissingValuesRemoved(axis) + const resultArr = newData.map(arr => median(arr)) + if (axis === 0) { + return new Series(resultArr, { index: this.columns }); + } else { + return new Series(resultArr, { index: this.index }); + } + + } + + /** + * Return mode of DataFrame across specified axis. + * @param options.axis 0 or 1. If 0, compute the mode column-wise, if 1, row-wise. Defaults to 1 + * @param options.keep If there are more than one modes, returns the mode at position [keep]. Defaults to 0 + * @example + * ``` + * const df = new DataFrame([[1, 2, 4], [3, 4, 5], [6, 7, 8]], { columns: ['A', 'B', 'C'] }); + * df.mode().print() + * ``` + * @example + * ``` + * const df = new DataFrame([[1, 2, 4], [3, 4, 5], [6, 7, 8]], { columns: ['A', 'B', 'C'] }); + * df.mode({ keep: 1 }).print() + * ``` + */ + mode(options?: { axis?: 0 | 1, keep?: number }): Series { + const { axis, keep } = { axis: 1, keep: 0, ...options } + + if (this.$frameIsNotCompactibleForArithmeticOperation()) { + throw Error("TypeError: mode operation is not supported for string dtypes"); + } + + if ([0, 1].indexOf(axis) === -1) { + throw Error("ParamError: Axis must be 0 or 1"); + } + + const newData = this.$getDataByAxisWithMissingValuesRemoved(axis) + const resultArr = newData.map(arr => { + const tempMode = mode(arr) + if (tempMode.length === 1) { + return tempMode[0] + } else { + return tempMode[keep] + } + }) + if (axis === 0) { + return new Series(resultArr, { index: this.columns }); + } else { + return new Series(resultArr, { index: this.index }); + } + + } + + /** + * Return minimum of values in a DataFrame across specified axis. + * @param options.axis 0 or 1. If 0, compute the minimum value column-wise, if 1, row-wise. Defaults to 1 + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * df.min().print() + * ``` + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * df.min({ axis: 0 }).print() + * ``` + */ + min(options?: { axis?: 0 | 1 }): Series { + const { axis } = { axis: 1, ...options } + + if (this.$frameIsNotCompactibleForArithmeticOperation()) { + throw Error("TypeError: min operation is not supported for string dtypes"); + } + + if ([0, 1].indexOf(axis) === -1) { + throw Error("ParamError: Axis must be 0 or 1"); + } + + const newData = this.$getDataByAxisWithMissingValuesRemoved(axis) + + const resultArr = newData.map(arr => { + let smallestValue = arr[0] + for (let i = 0; i < arr.length; i++) { + smallestValue = smallestValue < arr[i] ? smallestValue : arr[i] + } + return smallestValue + }) + if (axis === 0) { + return new Series(resultArr, { index: this.columns }); + } else { + return new Series(resultArr, { index: this.index }); + } + } + + /** + * Return maximum of values in a DataFrame across specified axis. + * @param options.axis 0 or 1. If 0, compute the maximum column-wise, if 1, row-wise. Defaults to 1 + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * df.max().print() + * ``` + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * df.max({ axis: 0 }).print() + * ``` + */ + max(options?: { axis?: 0 | 1 }): Series { + const { axis } = { axis: 1, ...options } + + if (this.$frameIsNotCompactibleForArithmeticOperation()) { + throw Error("TypeError: max operation is not supported for string dtypes"); + } + + if ([0, 1].indexOf(axis) === -1) { + throw Error("ParamError: Axis must be 0 or 1"); + } + + const newData = this.$getDataByAxisWithMissingValuesRemoved(axis) + + const resultArr = newData.map(arr => { + let biggestValue = arr[0] + for (let i = 0; i < arr.length; i++) { + biggestValue = biggestValue > arr[i] ? biggestValue : arr[i] + } + return biggestValue + }) + if (axis === 0) { + return new Series(resultArr, { index: this.columns }); + } else { + return new Series(resultArr, { index: this.index }); + } + + } + + /** + * Return standard deviation of values in a DataFrame across specified axis. + * @param options.axis 0 or 1. If 0, compute the standard deviation column-wise, if 1, row-wise. Defaults to 1 + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * df.std().print() + * ``` + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * df.std({ axis: 0 }).print() + * ``` + */ + std(options?: { axis?: 0 | 1 }): Series { + const { axis } = { axis: 1, ...options } + + if (this.$frameIsNotCompactibleForArithmeticOperation()) { + throw Error("TypeError: std operation is not supported for string dtypes"); + } + + if ([0, 1].indexOf(axis) === -1) { + throw Error("ParamError: Axis must be 0 or 1"); + } + + const newData = this.$getDataByAxisWithMissingValuesRemoved(axis) + const resultArr = newData.map(arr => std(arr)) + if (axis === 0) { + return new Series(resultArr, { index: this.columns }); + } else { + return new Series(resultArr, { index: this.index }); + } + + } + + /** + * Return variance of values in a DataFrame across specified axis. + * @param options.axis 0 or 1. If 0, compute the variance column-wise, if 1, add row-wise. Defaults to 1 + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * df.var().print() + * ``` + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * df.var({ axis: 0 }).print() + * ``` + */ + var(options?: { axis?: 0 | 1 }): Series { + const { axis } = { axis: 1, ...options } + + if (this.$frameIsNotCompactibleForArithmeticOperation()) { + throw Error("TypeError: var operation is not supported for string dtypes"); + } + + if ([0, 1].indexOf(axis) === -1) { + throw Error("ParamError: Axis must be 0 or 1"); + } + + const newData = this.$getDataByAxisWithMissingValuesRemoved(axis) + const resultArr = newData.map(arr => variance(arr)) + if (axis === 0) { + return new Series(resultArr, { index: this.columns }); + } else { + return new Series(resultArr, { index: this.index }); + } + + } + + /** + * Get Less than of dataframe and other, element-wise (binary operator lt). + * @param other DataFrame, Series, Array or Scalar number to compare with + * @param options.axis 0 or 1. If 0, add column-wise, if 1, add row-wise + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * df.lt(2).print() + * ``` + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * df.lt([2, 3], { axis: 0 }).print() + * ``` + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * const sf = new Series([2, 3]) + * df.lt(sf, { axis: 1 }).print() + * ``` + */ + lt(other: DataFrame | Series | number | Array, options?: { axis?: 0 | 1 }): DataFrame { + const { axis } = { axis: 1, ...options } + + if (this.$frameIsNotCompactibleForArithmeticOperation()) { + throw Error("TypeError: lt operation is not supported for string dtypes"); + } + + if ([0, 1].indexOf(axis) === -1) { + throw Error("ParamError: Axis must be 0 or 1"); + } + + const tensors = this.$getTensorsForArithmeticOperationByAxis(other, axis); + return this.$logicalOps(tensors, "lt") + } + + /** + * Returns "greater than" of dataframe and other. + * @param other DataFrame, Series, Array or Scalar number to compare with + * @param options.axis 0 or 1. If 0, add column-wise, if 1, add row-wise + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * df.gt(2).print() + * ``` + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * df.gt([2, 3], { axis: 0 }).print() + * ``` + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * const sf = new Series([2, 3]) + * df.gt(sf, { axis: 1 }).print() + * ``` + */ + gt(other: DataFrame | Series | number | Array, options?: { axis?: 0 | 1 }): DataFrame { + const { axis } = { axis: 1, ...options } + + if (this.$frameIsNotCompactibleForArithmeticOperation()) { + throw Error("TypeError: gt operation is not supported for string dtypes"); + } + + if ([0, 1].indexOf(axis) === -1) { + throw Error("ParamError: Axis must be 0 or 1"); + } + + const tensors = this.$getTensorsForArithmeticOperationByAxis(other, axis); + return this.$logicalOps(tensors, "gt") + } + + /** + * Returns "equals to" of dataframe and other. + * @param other DataFrame, Series, Array or Scalar number to compare with + * @param options.axis 0 or 1. If 0, add column-wise, if 1, add row-wise + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * df.eq(2).print() + * ``` + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * df.eq([2, 3], { axis: 0 }).print() + * ``` + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * const sf = new Series([2, 3]) + * df.eq(sf, { axis: 1 }).print() + * ``` + */ + eq(other: DataFrame | Series | number | Array, options?: { axis?: 0 | 1 }): DataFrame { + const { axis } = { axis: 1, ...options } + + if (this.$frameIsNotCompactibleForArithmeticOperation()) { + throw Error("TypeError: eq operation is not supported for string dtypes"); + } + + if ([0, 1].indexOf(axis) === -1) { + throw Error("ParamError: Axis must be 0 or 1"); + } + + const tensors = this.$getTensorsForArithmeticOperationByAxis(other, axis); + return this.$logicalOps(tensors, "eq") + } + + /** + * Returns "not equal to" of dataframe and other. + * @param other DataFrame, Series, Array or Scalar number to compare with + * @param options.axis 0 or 1. If 0, add column-wise, if 1, add row-wise + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * df.ne(2).print() + * ``` + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * df.ne([2, 3], { axis: 0 }).print() + * ``` + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * const sf = new Series([2, 3]) + * df.ne(sf, { axis: 1 }).print() + * ``` + */ + ne(other: DataFrame | Series | number | Array, options?: { axis?: 0 | 1 }): DataFrame { + const { axis } = { axis: 1, ...options } + + if (this.$frameIsNotCompactibleForArithmeticOperation()) { + throw Error("TypeError: ne operation is not supported for string dtypes"); + } + + if ([0, 1].indexOf(axis) === -1) { + throw Error("ParamError: Axis must be 0 or 1"); + } + + const tensors = this.$getTensorsForArithmeticOperationByAxis(other, axis); + return this.$logicalOps(tensors, "ne") + } + + /** + * Returns "less than or equal to" of dataframe and other. + * @param other DataFrame, Series, Array or Scalar number to compare with + * @param options.axis 0 or 1. If 0, add column-wise, if 1, add row-wise + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * df.le(2).print() + * ``` + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * df.le([2, 3], { axis: 0 }).print() + * ``` + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * const sf = new Series([2, 3]) + * df.le(sf, { axis: 1 }).print() + * ``` + */ + le(other: DataFrame | Series | number | Array, options?: { axis?: 0 | 1 }): DataFrame { + const { axis } = { axis: 1, ...options } + + if (this.$frameIsNotCompactibleForArithmeticOperation()) { + throw Error("TypeError: le operation is not supported for string dtypes"); + } + + if ([0, 1].indexOf(axis) === -1) { + throw Error("ParamError: Axis must be 0 or 1"); + } + + const tensors = this.$getTensorsForArithmeticOperationByAxis(other, axis); + return this.$logicalOps(tensors, "le") + } + + /** + * Returns "greater than or equal to" between dataframe and other. + * @param other DataFrame, Series, Array or Scalar number to compare with + * @param options.axis 0 or 1. If 0, add column-wise, if 1, add row-wise + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * df.ge(2).print() + * ``` + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * df.ge([2, 3], { axis: 0 }).print() + * ``` + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * const sf = new Series([2, 3]) + * df.ge(sf, { axis: 1 }).print() + * ``` + */ + ge(other: DataFrame | Series | number | Array, options?: { axis?: 0 | 1 }): DataFrame { + const { axis } = { axis: 1, ...options } + + if (this.$frameIsNotCompactibleForArithmeticOperation()) { + throw Error("TypeError: ge operation is not supported for string dtypes"); + } + + if ([0, 1].indexOf(axis) === -1) { + throw Error("ParamError: Axis must be 0 or 1"); + } + + const tensors = this.$getTensorsForArithmeticOperationByAxis(other, axis); + return this.$logicalOps(tensors, "ge") + } + + /** + * Return number of non-null elements in a Series + * @param options.axis 0 or 1. If 0, count column-wise, if 1, add row-wise. Defaults to 1 + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * df.count().print() + * ``` + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * df.count({ axis: 0 }).print() + * ``` + */ + count(options?: { axis?: 0 | 1 }): Series { + const { axis } = { axis: 1, ...options } + + if ([0, 1].indexOf(axis) === -1) { + throw Error("ParamError: Axis must be 0 or 1"); + } + + const newData = this.$getDataByAxisWithMissingValuesRemoved(axis) + const resultArr = newData.map(arr => arr.length) + if (axis === 0) { + return new Series(resultArr, { index: this.columns }); + } else { + return new Series(resultArr, { index: this.index }); + } + + } + + /** + * Return the sum of values across an axis. + * @param options.axis 0 or 1. If 0, count column-wise, if 1, add row-wise. Defaults to 1 + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * df.sum().print() + * ``` + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * df.sum({ axis: 0 }).print() + * ``` + */ + sum(options?: { axis?: 0 | 1 }): Series { + const { axis } = { axis: 1, ...options } + + if ([0, 1].indexOf(axis) === -1) { + throw Error("ParamError: Axis must be 0 or 1"); + } + + const result = this.$getDataByAxisWithMissingValuesRemoved(axis) + const sumArr = result.map((innerArr) => { + return innerArr.reduce((a, b) => Number(a) + Number(b), 0) + }) + if (axis === 0) { + return new Series(sumArr, { + index: [...this.columns] + }) + } else { + return new Series(sumArr, { + index: [...this.index] + }) + } + + } + + /** + * Return the absolute value of elements in a DataFrame. + * @param options.inplace Boolean indicating whether to perform the operation inplace or not. Defaults to false + * @example + * ``` + * const df = new DataFrame([[1.0, 2.1], [3.1, 4]], { columns: ['A', 'B']}) + * df.abs().print() + * ``` + * + * @example + * ``` + * const df = new DataFrame([[1.0, 2], [3.3, 4]], { columns: ['A', 'B']}) + * df.abs({ inplace: true }).print() + * ``` + */ + abs(options?: { inplace?: boolean }): DataFrame + abs(options?: { inplace?: boolean }): DataFrame | void { + const { inplace } = { inplace: false, ...options } + + const newData = (this.values as number[][]).map(arr => arr.map(val => Math.abs(val))) + if (inplace) { + this.$setValues(newData) + } else { + return new DataFrame(newData, { + index: [...this.index], + columns: [...this.columns], + dtypes: [...this.dtypes], + config: { ...this.config } + }) + } + } + + /** + * Rounds all element in the DataFrame to specified number of decimal places. + * @param dp Number of decimal places to round to. Defaults to 1 + * @param options.inplace Boolean indicating whether to perform the operation inplace or not. Defaults to false + * @example + * ``` + * const df = new DataFrame([[1.12, 2.34], [3.43, 4.0]], { columns: ['A', 'B']}) + * const df2 = df.round(2) + * df2.print() + * ``` + * + * @example + * ``` + * const df = new DataFrame([[1.12, 2.34], [3.43, 4.0]], { columns: ['A', 'B']}) + * df.round(2, { inplace: true }).print() + * ``` + */ + round(dp: number, options?: { inplace: boolean }): DataFrame + round(dp: number = 1, options?: { inplace: boolean }): DataFrame | void { + const { inplace } = { inplace: false, ...options } + + if (this.$frameIsNotCompactibleForArithmeticOperation()) { + throw Error("TypeError: round operation is not supported for string dtypes"); + } + + if (typeof dp !== "number") { + throw Error("ParamError: dp must be a number"); + } + + const newData = utils.round(this.values as number[], dp, false); + + if (inplace) { + this.$setValues(newData) + } else { + return new DataFrame( + newData, + { + index: [...this.index], + columns: [...this.columns], + config: { ...this.config } + }) + } + } + + /** + * Returns cumulative product accross specified axis. + * @param options.axis 0 or 1. If 0, count column-wise, if 1, add row-wise. Defaults to 1 + * @param options.inplace Boolean indicating whether to perform the operation inplace or not. Defaults to false + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * const df2 = df.cumprod() + * df2.print() + * ``` + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * const df2 = df.cumprod({ axis: 0 }) + * df2.print() + * ``` + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * df.cumprod({ axis: 0, inplace: true }).print() + * ``` + */ + cumProd(options?: { axis?: 0 | 1, inplace?: boolean }): DataFrame + cumProd(options?: { axis?: 0 | 1, inplace?: boolean }): DataFrame | void { + const { axis, inplace } = { axis: 1, inplace: false, ...options } + return this.cumOps("prod", axis, inplace); + } + + /** + * Returns cumulative sum accross specified axis. + * @param options.axis 0 or 1. If 0, count column-wise, if 1, add row-wise. Defaults to 1 + * @param options.inplace Boolean indicating whether to perform the operation inplace or not. Defaults to false + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * const df2 = df.cumSum() + * df2.print() + * ``` + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * const df2 = df.cumSum({ axis: 0 }) + * df2.print() + * ``` + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * df.cumSum({ axis: 0, inplace: true }).print() + * ``` + */ + cumSum(options?: { axis?: 0 | 1, inplace?: boolean }): DataFrame + cumSum(options?: { axis?: 0 | 1, inplace?: boolean }): DataFrame | void { + const { axis, inplace } = { axis: 1, inplace: false, ...options } + return this.cumOps("sum", axis, inplace); + } + + /** + * Returns cumulative minimum accross specified axis. + * @param options.axis 0 or 1. If 0, count column-wise, if 1, add row-wise. Defaults to 1 + * @param options.inplace Boolean indicating whether to perform the operation inplace or not. Defaults to false + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * const df2 = df.cumMin() + * df2.print() + * ``` + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * const df2 = df.cumMin({ axis: 0 }) + * df2.print() + * ``` + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * df.cumMin({ axis: 0, inplace: true }).print() + * ``` + */ + cumMin(options?: { axis?: 0 | 1, inplace?: boolean }): DataFrame + cumMin(options?: { axis?: 0 | 1, inplace?: boolean }): DataFrame | void { + const { axis, inplace } = { axis: 1, inplace: false, ...options } + return this.cumOps("min", axis, inplace); + } + + /** + * Returns cumulative maximum accross specified axis. + * @param options.axis 0 or 1. If 0, count column-wise, if 1, add row-wise. Defaults to 1 + * @param options.inplace Boolean indicating whether to perform the operation inplace or not. Defaults to false + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * const df2 = df.cumMax() + * df2.print() + * ``` + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * const df2 = df.cumMax({ axis: 0 }) + * df2.print() + * ``` + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * df.cumMax({ axis: 0, inplace: true }).print() + * ``` + */ + cumMax(options?: { axis?: 0 | 1, inplace?: boolean }): DataFrame + cumMax(options?: { axis?: 0 | 1, inplace?: boolean }): DataFrame | void { + const { axis, inplace } = { axis: 1, inplace: false, ...options } + return this.cumOps("max", axis, inplace); + } + + /** + * Internal helper function for cumulative operation on DataFrame + */ + private cumOps(ops: string, axis: number, inplace: boolean): DataFrame + private cumOps(ops: string, axis: number, inplace: boolean): DataFrame | void { + if (this.dtypes.includes("string")) ErrorThrower.throwStringDtypeOperationError(ops) + + const result = this.$getDataByAxisWithMissingValuesRemoved(axis) + + let newData: ArrayType2D = result.map((sData) => { + let tempval = sData[0]; + const data = [tempval]; + + for (let i = 1; i < sData.length; i++) { + let currVal = sData[i]; + switch (ops) { + case "max": + if (currVal > tempval) { + data.push(currVal); + tempval = currVal; + } else { + data.push(tempval); + } + break; + case "min": + if (currVal < tempval) { + data.push(currVal); + tempval = currVal; + } else { + data.push(tempval); + } + break; + case "sum": + tempval = (tempval as number) + (currVal as number) + data.push(tempval); + break; + case "prod": + tempval = (tempval as number) * (currVal as number) + data.push(tempval); + break; + + } + } + return data; + }) + + if (axis === 0) { + newData = utils.transposeArray(newData) as ArrayType2D + } + + if (inplace) { + this.$setValues(newData) + } else { + return new DataFrame(newData, { + index: [...this.index], + columns: [...this.columns], + dtypes: [...this.dtypes], + config: { ...this.config } + }) + } + } + + /** + * Generate descriptive statistics for all numeric columns. + * Descriptive statistics include those that summarize the central tendency, + * dispersion and shape of a dataset’s distribution, excluding NaN values. + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * df.describe().print() + * ``` + */ + describe(): DataFrame { + const numericColumnNames = this.columns.filter(name => this.$getColumnDtype(name) !== "string") + const index = ["count", "mean", "std", "min", "median", "max", "variance"]; + const statsObject: any = {}; + for (let i = 0; i < numericColumnNames.length; i++) { + const colName = numericColumnNames[i]; + const $count = (this.$getColumnData(colName) as Series).count(); + const $mean = mean(this.$getColumnData(colName, false) as number[]); + const $std = std(this.$getColumnData(colName, false) as number[]); + const $min = (this.$getColumnData(colName) as Series).min(); + const $median = median(this.$getColumnData(colName, false) as number[]); + const $max = (this.$getColumnData(colName) as Series).max(); + const $variance = variance(this.$getColumnData(colName, false) as number[]); + + const stats = [$count, $mean, $std, $min, $median, $max, $variance]; + statsObject[colName] = stats; + + } + + const df = new DataFrame(statsObject, { index }); + return df + } + + /** + * Drops all rows or columns with missing values (NaN) + * @param axis 0 or 1. If 0, drop columns with NaNs, if 1, drop rows with NaNs + * @param options.inplace Boolean indicating whether to perform the operation inplace or not. Defaults to false + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4], [NaN, NaN]], { columns: ['A', 'B']}) + * const df2 = df.dropna() + * df2.print() + * ``` + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4], [NaN, NaN]], { columns: ['A', 'B']}) + * df.dropna({ axis: 0, inplace: true }).print() + * ``` + */ + dropNa(options?: { axis: 0 | 1, inplace?: boolean }): DataFrame + dropNa(options?: { axis: 0 | 1, inplace?: boolean }): DataFrame | void { + const { axis, inplace } = { axis: 1, inplace: false, ...options } + + if ([0, 1].indexOf(axis) === -1) { + throw Error("ParamError: Axis must be 0 or 1"); + } + + const newIndex: Array = []; + + if (axis == 1) { + const newData = []; + + const dfValues = this.values as ArrayType2D; + for (let i = 0; i < dfValues.length; i++) { + const values: ArrayType1D = dfValues[i]; + //@ts-ignore + if (!values.includes(NaN) && !values.includes(undefined) && !values.includes(null)) { + newData.push(values); + newIndex.push(this.index[i]) + } + } + + if (inplace) { + this.$setValues(newData, false) + this.$setIndex(newIndex) + } else { + return new DataFrame( + newData, + { + index: newIndex, + columns: [...this.columns], + dtypes: [...this.dtypes], + config: { ...this.config } + }) + } + + } else { + const newColumnNames = [] + const newDtypes = [] + let dfValues: ArrayType2D = [] + + if (this.config.isLowMemoryMode) { + dfValues = utils.transposeArray(this.values) as ArrayType2D + } else { + dfValues = this.$dataIncolumnFormat as ArrayType2D + } + const tempColArr = [] + + for (let i = 0; i < dfValues.length; i++) { + const values: ArrayType1D = dfValues[i]; + if (!values.includes(NaN)) { + tempColArr.push(values); + newColumnNames.push(this.columns[i]) + newDtypes.push(this.dtypes[i]) + } + } + + const newData = utils.transposeArray(tempColArr) as ArrayType2D + + if (inplace) { + this.$setValues(newData, false, false) + this.$setColumnNames(newColumnNames) + this.$setDtypes(newDtypes) + } else { + return new DataFrame( + newData, + { + index: [...this.index], + columns: newColumnNames, + dtypes: newDtypes, + config: { ...this.config } + }) + } + } + + } + + /** + * Adds a new column to the DataFrame. If column exists, then the column values is replaced. + * @param column The name of the column to add or replace. + * @param values An array of values to be inserted into the DataFrame. Must be the same length as the columns + * @param options.inplace Boolean indicating whether to perform the operation inplace or not. Defaults to false + * @param options.atIndex Column index to insert after. Defaults to the end of the columns. + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * const df2 = df.addColumn('C', [5, 6]) + * df2.print() + * ``` + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * df.addColumn('C', [5, 6], { inplace: true }).print() + * ``` + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * df.addColumn('C', [5, 6], { inplace: true, atIndex: 0 }).print() + * ``` + */ + addColumn( + column: string, + values: Series | ArrayType1D, + options?: { inplace?: boolean, atIndex?: number | string } + ): DataFrame + addColumn( + column: string, + values: Series | ArrayType1D, + options?: { inplace?: boolean, atIndex?: number | string } + ): DataFrame | void { + let { inplace, atIndex } = { inplace: false, atIndex: this.columns.length, ...options }; + if (typeof atIndex === "string" ) { + if (!(this.columns.includes(atIndex))){ + throw new Error(`${atIndex} not a column`) + } + atIndex = this.columns.indexOf(atIndex) + } + + if (!column) { + throw new Error("ParamError: column must be specified") + } + + if (!values) { + throw new Error("ParamError: values must be specified") + } + + const columnIndex = this.$columns.indexOf(column) + + if (columnIndex === -1) { + let colunmValuesToAdd: ArrayType1D + + if (values instanceof Series) { + colunmValuesToAdd = values.values as ArrayType1D + } else if (Array.isArray(values)) { + colunmValuesToAdd = values; + } else { + throw new Error("ParamError: specified value not supported. It must either be an Array or a Series of the same length") + } + + if (colunmValuesToAdd.length !== this.shape[0]) { + ErrorThrower.throwColumnLengthError(this, colunmValuesToAdd.length) + } + + const newData = [] + const oldValues = this.$data + for (let i = 0; i < oldValues.length; i++) { + const innerArr = [...oldValues[i]] as ArrayType1D + innerArr.splice(atIndex, 0, colunmValuesToAdd[i]) + newData.push(innerArr) + } + + if (inplace) { + this.$setValues(newData, true, false) + let columns = [...this.columns] + columns.splice(atIndex, 0, column) + this.$setColumnNames(columns) + this.$setInternalColumnDataProperty(column); + + } else { + let columns = [...this.columns] + columns.splice(atIndex, 0, column) + + const df = new DataFrame(newData, { + index: [...this.index], + columns: columns, + dtypes: [...this.dtypes, utils.inferDtype(colunmValuesToAdd)[0]], + config: { ...this.$config } + }) + return df + } + } else { + this.$setColumnData(column, values); + } + + } + + /** + * Makes a deep copy of a DataFrame. + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * const df2 = df.copy() + * df2.print() + * ``` + */ + copy(): DataFrame { + let df = new DataFrame([...this.$data], { + columns: [...this.columns], + index: [...this.index], + dtypes: [...this.dtypes], + config: { ...this.$config } + }); + return df; + } + + /** + * Return a boolean, same-sized object indicating where elements are empty (NaN, undefined, null). + * NaN, undefined and null values gets mapped to true, and everything else gets mapped to false. + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * df.isNa().print() + * ``` + */ + isNa(): DataFrame { + const newData = [] + for (let i = 0; i < this.values.length; i++) { + const valueArr = this.values[i] as ArrayType1D + const tempData = valueArr.map((value) => { + if (utils.isEmpty(value)) { + return true; + } else { + return false; + } + }) + newData.push(tempData) + } + + const df = new DataFrame(newData, + { + index: [...this.index], + columns: [...this.columns], + config: { ...this.config } + }); + return df; + } + + /** + * Replace all empty elements with a specified value. Replace params expect columns array to map to values array. + * @param values The list of values to use for replacement. + * @param options.columns The list of column names to be replaced. + * @param options.inplace Boolean indicating whether to perform the operation inplace or not. Defaults to false. + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4], [NaN, NaN]], { columns: ['A', 'B']}) + * const df2 = df.fillNa(-99) + * df2.print() + * ``` + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4], [NaN, NaN]], { columns: ['A', 'B']}) + * df.fillNa(-99, { inplace: true }).print() + * ``` + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4], [NaN, NaN]], { columns: ['A', 'B']}) + * df.fillNa(-99, { columns: ["A"], inplace: true }).print() + * ``` + * + */ + fillNa( + values: number | string | boolean | ArrayType1D, + options?: + { + columns?: Array, + inplace?: boolean + } + ): DataFrame + fillNa( + values: number | string | boolean | ArrayType1D, + options?: + { + columns?: Array, + inplace?: boolean + } + ): DataFrame | void { + let { columns, inplace } = { inplace: false, ...options } + + if (!values && typeof values !== "boolean" && typeof values !== "number") { + throw Error('ParamError: value must be specified'); + } + + if (Array.isArray(values)) { + if (!Array.isArray(columns)) { + throw Error('ParamError: value is an array, hence columns must also be an array of same length'); + } + + if (values.length !== columns.length) { + throw Error('ParamError: specified column and values must have the same length'); + } + + columns.forEach((col) => { + if (!this.columns.includes(col)) { + throw Error( + `ValueError: Specified column "${col}" must be one of ${this.columns}` + ); + } + }); + } + + const newData = [] + const oldValues = [...this.values] + + if (!columns) { + //Fill all columns + for (let i = 0; i < oldValues.length; i++) { + const valueArr = [...oldValues[i] as ArrayType1D] + + const tempArr = valueArr.map((innerVal) => { + if (utils.isEmpty(innerVal)) { + const replaceWith = Array.isArray(values) ? values[i] : values + return replaceWith + } else { + return innerVal + } + }) + newData.push(tempArr) + } + + } else { + //Fill specific columns + const tempData = [...this.values] + + for (let i = 0; i < tempData.length; i++) { + const valueArr = tempData[i] as ArrayType1D + + for (let i = 0; i < columns.length; i++) { //B + const columnIndex = this.columns.indexOf(columns[i]) + const replaceWith = Array.isArray(values) ? values[i] : values + valueArr[columnIndex] = utils.isEmpty(valueArr[columnIndex]) ? replaceWith : valueArr[columnIndex] + } + newData.push(valueArr) + } + } + + if (inplace) { + this.$setValues(newData as ArrayType2D) + } else { + const df = new DataFrame(newData, + { + index: [...this.index], + columns: [...this.columns], + dtypes: [...this.dtypes], + config: { ...this.config } + }); + return df; + } + } + + /** + * Drop specified columns or rows. + * @param options.columns Array of column names to drop. + * @param options.index Array of index to drop. + * @param options.inplace Boolean indicating whether to perform the operation inplace or not. Defaults to false. + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * const df2 = df.drop({ columns: ['A'] }) + * df2.print() + * ``` + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * df.drop({ index: [0], inplace: true }).print() + * ``` + */ + drop(options?: + { + columns?: string | Array, + index?: Array, + inplace?: boolean + } + ): DataFrame + drop(options?: + { + columns?: string | Array, + index?: Array, + inplace?: boolean + } + ): DataFrame | void { + let { columns, index, inplace } = { inplace: false, ...options } + + if (!columns && !index) { + throw Error('ParamError: Must specify one of columns or index'); + } + + if (columns && index) { + throw Error('ParamError: Can only specify one of columns or index'); + } + + if (columns) { + const columnIndices: Array = [] + + if (typeof columns === "string") { + columnIndices.push(this.columns.indexOf(columns)) + } else if (Array.isArray(columns)) { + for (let column of columns) { + if (this.columns.indexOf(column) === -1) { + throw Error(`ParamError: specified column "${column}" not found in columns`); + } + columnIndices.push(this.columns.indexOf(column)) + } + + } else { + throw Error('ParamError: columns must be an array of column names or a string of column name'); + } + + let newRowData: ArrayType2D = [] + let newColumnNames = [] + let newDtypes = [] + + for (let i = 0; i < this.values.length; i++) { + const tempInnerArr = [] + const innerArr = this.values[i] as ArrayType1D + for (let j = 0; j < innerArr.length; j++) { + if (!(columnIndices.includes(j))) { + tempInnerArr.push(innerArr[j]) + } + } + newRowData.push(tempInnerArr) + } + + for (let i = 0; i < this.columns.length; i++) { + const element = this.columns[i] + if (!(columns.includes(element))) { + newColumnNames.push(element) + newDtypes.push(this.dtypes[i]) + } + } + + if (inplace) { + this.$setValues(newRowData, true, false) + this.$setColumnNames(newColumnNames) + } else { + const df = new DataFrame(newRowData, + { + index: [...this.index], + columns: newColumnNames, + dtypes: newDtypes, + config: { ...this.config } + }); + return df; + } + + } + + if (index) { + const rowIndices: Array = [] + + if (typeof index === "string" || typeof index === "number" || typeof index === "boolean") { + rowIndices.push(this.index.indexOf(index)) + } else if (Array.isArray(index)) { + for (let indx of index) { + if (this.index.indexOf(indx) === -1) { + throw Error(`ParamError: specified index "${indx}" not found in indices`); + } + rowIndices.push(this.index.indexOf(indx)); + } + } else { + throw Error('ParamError: index must be an array of indices or a scalar index'); + } + + let newRowData: ArrayType2D = [] + let newIndex = [] + + for (let i = 0; i < this.values.length; i++) { + const innerArr = this.values[i] as ArrayType1D + if (!(rowIndices.includes(i))) { + newRowData.push(innerArr) + } + } + + for (let i = 0; i < this.index.length; i++) { + const indx = this.index[i] + if (!(index.includes(indx))) { + newIndex.push(indx) + } + } + + if (inplace) { + this.$setValues(newRowData, false) + this.$setIndex(newIndex) + } else { + const df = new DataFrame(newRowData, + { + index: newIndex, + columns: [...this.columns], + dtypes: [...this.dtypes], + config: { ...this.config } + }); + return df; + } + } + + } + + /** + * Sorts a Dataframe by a specified column values + * @param column Column name to sort by. + * @param options.ascending Whether to sort values in ascending order or not. Defaults to true. + * @param options.inplace Boolean indicating whether to perform the operation inplace or not. Defaults to false. + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * const df2 = df.sortBy('A') + * df2.print() + * ``` + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * df.sortBy('A', { ascending: false, inplace: true }).print() + * ``` + */ + sortValues( + column: string, + options?: + { + ascending?: boolean + inplace?: boolean + } + ): DataFrame + sortValues( + column: string, + options?: + { + ascending?: boolean + inplace?: boolean + } + ): DataFrame | void { + const { ascending, inplace } = { ascending: true, inplace: false, ...options } + + if (!column) { + throw Error(`ParamError: must specify a column to sort by`); + } + + if (this.columns.indexOf(column) === -1) { + throw Error(`ParamError: specified column "${column}" not found in columns`); + } + + const columnValues = this.$getColumnData(column, false) as ArrayType1D + const index = [...this.index] + + const objToSort = columnValues.map((value, i) => { + return { index: index[i], value } + }) + + const sortedObjectArr = utils.sortObj(objToSort, ascending) + const sortedIndex = sortedObjectArr.map(obj => obj.index) + + const newDf = _loc({ ndFrame: this, rows: sortedIndex }) as DataFrame + + if (inplace) { + this.$setValues(newDf.values) + this.$setIndex(newDf.index) + } else { + return newDf + } + + } + + /** + * Sets the index of the DataFrame to the specified value. + * @param options.index An array of index values to set + * @param options.column A column name whose values set in place of the index + * @param options.drop Whether to drop the column whose index was set. Defaults to false + * @param options.inplace Boolean indicating whether to perform the operation inplace or not. Defaults to false + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * const df2 = df.setIndex({ index: ['a', 'b'] }) + * df2.print() + * ``` + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * df.setIndex({ column: "A", inplace: true }) + * df.print() + * ``` + */ + setIndex( + options: + { + index?: Array, + column?: string, + drop?: boolean, + inplace?: boolean + } + ): DataFrame + setIndex( + options: + { + index?: Array, + column?: string, + drop?: boolean, + inplace?: boolean + } + ): DataFrame | void { + const { index, column, drop, inplace } = { drop: false, inplace: false, ...options } + + if (!index && !column) { + throw new Error("ParamError: must specify either index or column") + } + + let newIndex: Array = []; + + if (index) { + if (!Array.isArray(index)) { + throw Error(`ParamError: index must be an array`); + } + + if (index.length !== this.values.length) { + throw Error(`ParamError: index must be the same length as the number of rows`); + } + newIndex = index; + } + + if (column) { + if (this.columns.indexOf(column) === -1) { + throw Error(`ParamError: column not found in column names`); + } + + newIndex = this.$getColumnData(column, false) as Array + } + + if (drop) { + const dfDropped = this.drop({ columns: [column as string] }) + + const newData = dfDropped?.values as ArrayType2D + const newColumns = dfDropped?.columns + const newDtypes = dfDropped?.dtypes + + if (inplace) { + this.$setValues(newData, true, false) + this.$setIndex(newIndex) + this.$setColumnNames(newColumns) + } else { + const df = new DataFrame(newData, + { + index: newIndex, + columns: newColumns, + dtypes: newDtypes, + config: { ...this.config } + }); + return df; + } + } else { + if (inplace) { + this.$setIndex(newIndex) + } else { + const df = new DataFrame(this.values, + { + index: newIndex, + columns: [...this.columns], + dtypes: [...this.dtypes], + config: { ...this.config } + }); + return df; + } + } + + } + + /** + * Resets the index of the DataFrame to default. + * @param options.inplace Boolean indicating whether to perform the operation inplace or not. Defaults to false + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * df.resetIndex({ inplace: true }) + * df.print() + * ``` + */ + resetIndex(options?: { inplace?: boolean }): DataFrame + resetIndex(options?: { inplace?: boolean }): DataFrame | void { + const { inplace } = { inplace: false, ...options } + + if (inplace) { + this.$resetIndex() + } else { + const df = new DataFrame(this.values, + { + index: this.index.map((_, i) => i), + columns: [...this.columns], + dtypes: [...this.dtypes], + config: { ...this.config } + }); + return df; + } + + } + + /** + * Apply a function along an axis of the DataFrame. To apply a function element-wise, use `applyMap`. + * Objects passed to the function are Series values whose + * index is either the DataFrame’s index (axis=0) or the DataFrame’s columns (axis=1) + * @param callable Function to apply to each column or row. + * @param options.axis 0 or 1. If 0, compute the power column-wise, if 1, row-wise + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * const df2 = df.apply(Math.sqrt, { axis: 0 }) + * df2.print() + * ``` + */ + apply(callable: any, options?: { axis?: 0 | 1 }): DataFrame | Series { + const { axis } = { axis: 1, ...options } + + if ([0, 1].indexOf(axis) === -1) { + throw Error(`ParamError: axis must be 0 or 1`); + } + + const valuesForFunc = this.$getDataByAxisWithMissingValuesRemoved(axis) + + const result = valuesForFunc.map(row => { + return callable(row) + }) + + if (axis === 0) { + if (utils.is1DArray(result)) { + return new Series(result, { + index: [...this.columns] + }) + } else { + return new DataFrame(result, { + index: [...this.columns], + columns: [...this.columns], + dtypes: [...this.dtypes], + config: { ...this.config } + }) + } + } else { + if (utils.is1DArray(result)) { + return new Series(result, { + index: [...this.index] + }) + } else { + return new DataFrame(result, { + index: [...this.index], + columns: [...this.columns], + dtypes: [...this.dtypes], + config: { ...this.config } + }) + } + } + + } + + /** + * Apply a function to a Dataframe values element-wise. + * @param callable Function to apply to each column or row + * @param options.inplace Boolean indicating whether to perform the operation inplace or not. Defaults to false + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * function square(x) { return x * x } + * const df2 = df.applyMap(square) + * df2.print() + * ``` + */ + applyMap(callable: any, options?: { inplace?: boolean }): DataFrame + applyMap(callable: any, options?: { inplace?: boolean }): DataFrame | void { + const { inplace } = { inplace: false, ...options } + + const newData = (this.values as ArrayType2D).map((row) => { + const tempData = row.map((val) => { + return callable(val); + }); + return tempData; + }); + + if (inplace) { + this.$setValues(newData); + } else { + return new DataFrame(newData, + { + index: [...this.index], + columns: [...this.columns], + dtypes: [...this.dtypes], + config: { ...this.config } + }); + } + } + + /** + * Returns the specified column data as a Series object. + * @param column The name of the column to return + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * const sf = df.column('A') + * sf.print() + * ``` + * + */ + column(column: string): Series { + return this.$getColumnData(column) as Series + } + + /** + * Return a subset of the DataFrame based on the column dtypes. + * @param include An array of dtypes or strings to be included. + * @example + * ``` + * const df = new DataFrame([[1, 2.1, "Dog"], [3, 4.3, "Cat"]], { columns: ['A', 'B', 'C']}) + * const df2 = df.selectDtypes(['float32']) + * df2.print() + * ``` + * + * @example + * ``` + * const df = new DataFrame([[1, 2.1, "Dog"], [3, 4.3, "Cat"]], { columns: ['A', 'B', 'C']}) + * const df2 = df.selectDtypes(['float32', 'int32']) + * df2.print() + * ``` + * + */ + selectDtypes(include: Array): DataFrame { + const supportedDtypes = ["float32", "int32", "string", "boolean", 'undefined'] + + if (Array.isArray(include) === false) { + throw Error(`ParamError: include must be an array`); + } + + include.forEach(dtype => { + if (supportedDtypes.indexOf(dtype) === -1) { + throw Error(`ParamError: include must be an array of valid dtypes`); + } + }) + const newColumnNames = [] + + for (let i = 0; i < this.dtypes.length; i++) { + if (include.includes(this.dtypes[i])) { + newColumnNames.push(this.columns[i]) + } + } + return this.loc({ columns: newColumnNames }) + + } + + /** + * Returns the transpose of the DataFrame. + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * const df2 = df.transpose() + * df2.print() + * ``` + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * df.transpose({ inplace: true }) + * df.print() + * ``` + **/ + transpose(options?: { inplace?: boolean }): DataFrame + transpose(options?: { inplace?: boolean }): DataFrame | void { + const { inplace } = { inplace: false, ...options } + const newData = utils.transposeArray(this.values) + const newColNames = [...this.index.map(i => i.toString())] + + if (inplace) { + this.$setValues(newData, false, false) + this.$setIndex([...this.columns]) + this.$setColumnNames(newColNames) + } else { + return new DataFrame(newData, { + index: [...this.columns], + columns: newColNames, + config: { ...this.config } + }) + } + } + + /** + * Returns the Transpose of the DataFrame. Similar to `transpose`. + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * const df2 = df.T() + * df2.print() + * ``` + **/ + get T(): DataFrame { + const newData = utils.transposeArray(this.values) + return new DataFrame(newData, { + index: [...this.columns], + columns: [...this.index.map(i => i.toString())], + config: { ...this.config } + }) + } + + /** + * Replace all occurence of a value with a new value. + * @param oldValue The value you want to replace + * @param newValue The new value you want to replace the old value with + * @param options.columns An array of column names you want to replace. If not provided replace accross all columns. + * @param options.inplace Boolean indicating whether to perform the operation inplace or not. Defaults to false + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * const df2 = df.replace(2, 5) + * df.print() + * ``` + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [2, 20]], { columns: ['A', 'B']}) + * const df2 = df.replace(2, 5, { columns: ['A'] }) + * df2.print() + * ``` + */ + replace( + oldValue: number | string | boolean, + newValue: number | string | boolean, + options?: { + columns?: Array + inplace?: boolean + } + ): DataFrame + replace( + oldValue: number | string | boolean, + newValue: number | string | boolean, + options?: { + columns?: Array + inplace?: boolean + } + ): DataFrame | void { + const { columns, inplace } = { inplace: false, ...options } + + if (!oldValue && typeof oldValue !== 'boolean') { + throw Error(`Params Error: Must specify param 'oldValue' to replace`); + } + + if (!newValue && typeof newValue !== 'boolean') { + throw Error(`Params Error: Must specify param 'newValue' to replace with`); + } + + let newData: ArrayType2D = [] + + if (columns) { + if (!Array.isArray(columns)) { + throw Error(`Params Error: column must be an array of column(s)`); + } + const columnIndex: Array = [] + + columns.forEach(column => { + const _indx = this.columns.indexOf(column) + if (_indx === -1) { + throw Error(`Params Error: column not found in columns`); + } + columnIndex.push(_indx) + }) + + newData = (this.values as ArrayType2D).map(([...row]) => { + for (const colIndx of columnIndex) { + if (row[colIndx] === oldValue) { + row[colIndx] = newValue; + } + } + return row; + }) + } else { + newData = (this.values as ArrayType2D).map(([...row]) => { + return row.map((cell => { + if (cell === oldValue) { + return newValue + } else { + return cell + } + })) + }) + } + + if (inplace) { + this.$setValues(newData) + } else { + return new DataFrame(newData, { + index: [...this.index], + columns: [...this.columns], + dtypes: [...this.dtypes], + config: { ...this.config } + }) + } + } + + + + /** + * Cast the values of a column to specified data type + * @param column The name of the column to cast + * @param dtype Data type to cast to. One of [float32, int32, string, boolean] + * @param options.inplace Boolean indicating whether to perform the operation inplace or not. Defaults to false + * + * @example + * ``` + * const df = new DataFrame([[1, 2.2], [3, 4.3]], { columns: ['A', 'B']}) + * const df2 = df.asType('B', 'int32') + * df2.print() + * ``` + * + * @example + * ``` + * const df = new DataFrame([[1, 2.2], [3, 4.3]], { columns: ['A', 'B']}) + * df.asType('B', 'int32', { inplace: true }) + * df.print() + * ``` + */ + asType( + column: string, + dtype: "float32" | "int32" | "string" | "boolean", + options?: { inplace?: boolean } + ): DataFrame + asType( + column: string, + dtype: "float32" | "int32" | "string" | "boolean", + options?: { inplace?: boolean } + ): DataFrame | void { + const { inplace } = { inplace: false, ...options } + const columnIndex = this.columns.indexOf(column) + + if (columnIndex === -1) { + throw Error(`Params Error: column not found in columns`); + } + + if (!(DATA_TYPES.includes(dtype))) { + throw Error(`dtype ${dtype} not supported. dtype must be one of ${DATA_TYPES}`); + } + + const data = this.values as ArrayType2D + + const newData = data.map((row) => { + if (dtype === "float32") { + row[columnIndex] = Number(row[columnIndex]) + return row + } else if (dtype === "int32") { + row[columnIndex] = parseInt(row[columnIndex] as any) + return row + } else if (dtype === "string") { + row[columnIndex] = row[columnIndex].toString() + return row + } else if (dtype === "boolean") { + row[columnIndex] = Boolean(row[columnIndex]) + return row + } + }) + + if (inplace) { + this.$setValues(newData as any) + } else { + const newDtypes = [...this.dtypes] + newDtypes[columnIndex] = dtype + + return new DataFrame(newData, { + index: [...this.index], + columns: [...this.columns], + dtypes: newDtypes, + config: { ...this.config } + }) + } + } + + /** + * Return the number of unique elements in a column, across the specified axis. + * To get the values use `.unique()` instead. + * @param axis The axis to count unique elements across. Defaults to 1 + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4], [1, 2], [5, 6]], { columns: ['A', 'B'] }) + * df.nunique().print() + * ``` + * + */ + nUnique(axis: 0 | 1 = 1): Series { + if ([0, 1].indexOf(axis) === -1) { + throw Error(`ParamError: axis must be 0 or 1`); + } + const data = this.$getDataArraysByAxis(axis) + const newData = data.map(row => new Set(row).size) + + if (axis === 0) { + return new Series(newData, { + index: [...this.columns], + dtypes: ["int32"] + }) + } else { + return new Series(newData, { + index: [...this.index], + dtypes: ["int32"] + }) + } + } + + /** + * Renames a column or index to specified value. + * @param mapper An object that maps each column or index in the DataFrame to a new value + * @param options.inplace Boolean indicating whether to perform the operation inplace or not. Defaults to false + * @param options.axis The axis to perform the operation on. Defaults to 1 + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4], [1, 2], [5, 6]], { columns: ['A', 'B'] }) + * const df2 = df.rename({ A: 'a', B: 'b' }) + * df2.print() + * ``` + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4], [1, 2], [5, 6]], { columns: ['A', 'B'] }) + * df.rename({ A: 'a', B: 'b' }, { inplace: true }) + * df.print() + * ``` + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4], [1, 2], [5, 6]], { columns: ['A', 'B'] }) + * df.rename({ 0: 'a', 1: 'b' }, { axis: 0, inplace: true}) + * df.print() + * ``` + * + */ + rename( + mapper: any, + options?: { + axis?: 0 | 1 + inplace?: boolean + } + ): DataFrame + rename( + mapper: any, + options?: { + axis?: 0 | 1 + inplace?: boolean + } + ): DataFrame | void { + const { axis, inplace } = { axis: 1, inplace: false, ...options } + + if ([0, 1].indexOf(axis) === -1) { + throw Error(`ParamError: axis must be 0 or 1`); + } + + if (axis === 1) { + const colsAdded: string[] = []; + const newColumns = this.columns.map(col => { + if (mapper[col] !== undefined) { + colsAdded.push(mapper[col]); + return mapper[col] + } else { + return col + } + }) + + if (inplace) { + this.$setColumnNames(newColumns) + for (const col of colsAdded) { + this.$setInternalColumnDataProperty(col); + } + } else { + return new DataFrame([...this.values], { + index: [...this.index], + columns: newColumns, + dtypes: [...this.dtypes], + config: { ...this.config } + }) + } + } else { + const newIndex = this.index.map(col => { + if (mapper[col] !== undefined) { + return mapper[col] + } else { + return col + } + }) + + if (inplace) { + this.$setIndex(newIndex) + } else { + return new DataFrame([...this.values], { + index: newIndex, + columns: [...this.columns], + dtypes: [...this.dtypes], + config: { ...this.config } + }) + } + } + + } + + /** + * Sorts the Dataframe by the index. + * @param options.inplace Boolean indicating whether to perform the operation inplace or not. Defaults to false + * @param options.ascending Whether to sort values in ascending order or not. Defaults to true + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4], [1, 2], [5, 6]], { columns: ['A', 'B'] }) + * const df2 = df.sortIndex() + * df2.print() + * ``` + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4], [1, 2], [5, 6]], { columns: ['A', 'B'] }) + * df.sortIndex({ inplace: true }) + * df.print() + * ``` + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4], [1, 2], [5, 6]], { columns: ['A', 'B'] }) + * df.sortIndex({ ascending: false, inplace: true }) + * df.print() + * ``` + */ + sortIndex(options?: + { + inplace?: boolean + ascending?: boolean + } + ): DataFrame + sortIndex(options?: + { + inplace?: boolean + ascending?: boolean + } + ): DataFrame | void { + const { ascending, inplace } = { ascending: true, inplace: false, ...options } + + const indexPosition = utils.range(0, this.index.length - 1) + const index = [...this.index] + + const objToSort = index.map((idx, i) => { + return { index: indexPosition[i], value: idx } + }) + + const sortedObjectArr = utils.sortObj(objToSort, ascending) + let sortedIndex = sortedObjectArr.map((obj) => obj.index); + const newData = sortedIndex.map(i => (this.values as ArrayType2D)[i as number]) + sortedIndex = sortedIndex.map((i) => index[i as number]); + + if (inplace) { + this.$setValues(newData) + this.$setIndex(sortedIndex) + } else { + return new DataFrame(newData, { + index: sortedIndex, + columns: [...this.columns], + dtypes: [...this.dtypes], + config: { ...this.config } + }) + } + + } + + /** + * Add new rows at the end of the DataFrame. + * @param newValues Array, Series or DataFrame to append to the DataFrame + * @param index The new index value(s) to append to the Series. Must contain the same number of values as `newValues` + * as they map `1 - 1`. + * @param options.inplace Boolean indicating whether to perform the operation inplace or not. Defaults to false + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4], [1, 2], [5, 6]], { columns: ['A', 'B'] }) + * const values = [7, 8] + * const index = ['a', 'b'] + * const df2 = df.append(values, index) + * df2.print() + * ``` + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4], [1, 2], [5, 6]], { columns: ['A', 'B'] }) + * const values = new Series([7, 8, 9, 10]) + * const index = ['a', 'b', 'c', 'd'] + * const df2 = df.append(values, index) + * df2.print() + * ``` + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4], [1, 2], [5, 6]], { columns: ['A', 'B'] }) + * const values = new DataFrame([[7, 8], [9, 10]], { columns: ['C', 'D'] }) + * const index = ['a', 'b'] + * const df2 = df.append(values, index) + * df2.print() + * ``` + */ + append( + newValues: ArrayType1D | ArrayType2D | Series | DataFrame, + index: Array | number | string, + options?: { + inplace?: boolean, + } + ): DataFrame + append( + newValues: ArrayType1D | ArrayType2D | Series | DataFrame, + index: Array | number | string, + options?: { + inplace?: boolean, + } + ): DataFrame | void { + const { inplace } = { inplace: false, ...options } + + if (!newValues) { + throw Error(`ParamError: newValues must be a Series, DataFrame or Array`); + } + + if (!index) { + throw Error(`ParamError: index must be specified`); + } + + let rowsToAdd = [] + if (newValues instanceof Series) { + + if (newValues.values.length !== this.shape[1]) { + throw Error(`ValueError: length of newValues must be the same as the number of columns.`); + } + rowsToAdd = [newValues.values] + + } else if (newValues instanceof DataFrame) { + + if (newValues.shape[1] !== this.shape[1]) { + throw Error(`ValueError: length of newValues must be the same as the number of columns.`); + } + rowsToAdd = newValues.values + + } else if (Array.isArray(newValues)) { + + if (utils.is1DArray(newValues)) { + rowsToAdd = [newValues] + } else { + rowsToAdd = newValues + } + + if ((rowsToAdd[0] as any).length !== this.shape[1]) { + throw Error(`ValueError: length of newValues must be the same as the number of columns.`); + } + + } else { + throw Error(`ValueError: newValues must be a Series, DataFrame or Array`); + } + + + let indexInArrFormat: Array = [] + if (!Array.isArray(index)) { + indexInArrFormat = [index] + } else { + indexInArrFormat = index + } + + if (rowsToAdd.length !== indexInArrFormat.length) { + throw Error(`ParamError: index must contain the same number of values as newValues`); + } + + const newData = [...this.values] as ArrayType2D + const newIndex = [...this.index] + + rowsToAdd.forEach((row, i) => { + newData.push(row as ArrayType1D) + newIndex.push(indexInArrFormat[i]) + }) + + if (inplace) { + this.$setValues(newData) + this.$setIndex(newIndex) + } else { + return new DataFrame(newData, { + index: newIndex, + columns: [...this.columns], + dtypes: [...this.dtypes], + config: { ...this.config } + }) + } + + } + + /** + * Queries the DataFrame for rows that meet the boolean criteria. This is just a wrapper for the `iloc` method. + * @param condition An array of boolean mask, one for each row in the DataFrame. Rows where the value are true will be returned. + * @param options.inplace Boolean indicating whether to perform the operation inplace or not. Defaults to false + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4], [1, 2], [5, 6]], { columns: ['A', 'B'] }) + * const df2 = df.query([true, false, true, true]) + * df2.print() + * ``` + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4], [1, 2], [5, 6]], { columns: ['A', 'B'] }) + * const df2 = df.query(df["A"].gt(2)) + * df2.print() + * ``` + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4], [1, 2], [5, 6]], { columns: ['A', 'B'] }) + * const df2 = df.query(df["A"].gt(2).and(df["B"].lt(5))) + * df2.print() + * ``` + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4], [1, 2], [5, 6]], { columns: ['A', 'B'] }) + * df.query(df["A"].gt(2), { inplace: true }) + * df.print() + * ``` + **/ + query(condition: Series | Array, options?: { inplace?: boolean }): DataFrame + query(condition: Series | Array, options?: { inplace?: boolean }): DataFrame | void { + const { inplace } = { inplace: false, ...options } + + if (!condition) { + throw new Error("ParamError: condition must be specified"); + } + + const result = _iloc({ + ndFrame: this, + rows: condition, + }) as DataFrame + + if (inplace) { + this.$setValues(result.values, false, false) + this.$setIndex(result.index) + } else { + return result + } + + } + + /** + * Returns the data types for each column as a Series. + * @example + * ``` + * const df = new DataFrame([[1, 2.1, "Dog"], [3, 4.3, "Cat"]], { columns: ['A', 'B', 'C'] }) + * df.ctypes().print() + * ``` + */ + get ctypes(): Series { + return new Series(this.dtypes, { index: this.columns }) + } + + /** + * One-hot encode specified columns in the DataFrame. If columns are not specified, all columns of string dtype will be encoded. + * @param options Options for the operation. The following options are available: + * - `columns`: A single column name or an array of column names to encode. Defaults to all columns of dtype string. + * - `prefix`: Prefix to add to the column names. Defaults to unique labels. + * - `prefixSeparator`: Separator to use for the prefix. Defaults to '_'. + * - `inplace`: Boolean indicating whether to perform the operation inplace or not. Defaults to false + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * const df2 = df.getDummies() + * ``` + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * const df2 = df.getDummies({ columns: ['A'] }) + * ``` + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * const df2 = df.getDummies({ prefix: 'cat' }) + * ``` + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * const df2 = df.getDummies({ prefix: 'cat', prefixSeparator: '_' }) + * ``` + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * const df2 = df.getDummies({ inplace: true }) + * ``` + */ + getDummies(options?: { + columns?: string | Array, + prefix?: string | Array, + prefixSeparator?: string | Array, + inplace?: boolean + }): DataFrame + getDummies(options?: { + columns?: string | Array, + prefix?: string | Array, + prefixSeparator?: string | Array, + inplace?: boolean + }): DataFrame | void { + const { inplace } = { inplace: false, ...options } + + const encodedDF = dummyEncode(this, options) + if (inplace) { + this.$setValues(encodedDF.values, false, false) + this.$setColumnNames(encodedDF.columns) + } else { + return encodedDF + } + + } + + /** + * Groupby + * @params col a list of column + * @returns Groupby + * @example + * let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; + * let cols = [ "A", "B", "C" ]; + * let df = new dfd.DataFrame(data, { columns: cols }); + * let groupDf = df.groupby([ "A" ]); + */ + groupby(col: Array): Groupby { + const columns = this.columns + const colIndex = col.map((val) => columns.indexOf(val)) + const colDtype = this.dtypes.filter((val, index) => { + return colIndex.includes(index) + }) + + return new Groupby( + col, + this.values as ArrayType2D, + columns, + colDtype, + colIndex + ).group() + + } + + /** + * Exposes functions for creating charts from a DataFrame. + * Charts are created using the Plotly.js library, so all Plotly's configuration parameters are available. + * @param divId name of the HTML Div to render the chart in. + */ + plot(divId: string) { + //TODO: Add support for check plot library to use. So we can support other plot library like d3, vega, etc + if (utils.isBrowserEnv()) { + const plt = new PlotlyLib(this, divId); + return plt; + } else { + throw new Error("Not supported in NodeJS"); + } + } + + /** + * Converts a DataFrame to CSV. + * @param options Configuration object. Supports the following options: + * - `filePath`: Local file path to write the CSV file. If not specified, the CSV will be returned as a string. Option is only available in NodeJS. + * - `fileName`: Name of the CSV file. Defaults to `data.csv`. Option is only available in Browser. + * - `download`: If true, the CSV will be downloaded. Defaults to false. Option is only available in Browser. + * - `header`: Boolean indicating whether to include a header row in the CSV file. + * - `sep`: Character to be used as a separator in the CSV file. + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * const csv = df.toCSV() + * console.log(csv) + * //output + * "A","B" + * 1,2 + * 3,4 + * ``` + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * const csv = df.toCSV({ header: false }) + * console.log(csv) + * //output + * 1,2 + * 3,4 + * ``` + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * const csv = df.toCSV({ sep: ';' }) + * console.log(csv) + * //output + * "A";"B" + * 1;2 + * 3;4 + * ``` + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * df.toCSV({ filePath: './data.csv' }) //write to local file in NodeJS + * ``` + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * df.toCSV({ fileName: 'data.csv', download: true }) //Downloads file in Browser + * ``` + * + */ + toCSV(options?: CsvOutputOptionsBrowser | CsvOutputOptionsNode): string + toCSV(options?: CsvOutputOptionsBrowser | CsvOutputOptionsNode): string | void { + if (utils.isBrowserEnv()) { + return toCSVBrowser(this, options as CsvOutputOptionsBrowser) + } else { + return toCSVNode(this, options as CsvOutputOptionsNode) + } + } + + /** + * Converts a DataFrame to JSON. + * @param options Configuration object. Supported options: + * - `filePath`: The file path to write the JSON to. If not specified, the JSON object is returned. Option is only available in NodeJS. + * - `fileName`: The name of the JSON file. Defaults to `data.json`. Option is only available in Browser. + * - `download`: If true, the JSON will be downloaded. Defaults to false. Option is only available in Browser. + * - `format`: The format of the JSON. Supported values are `'column'` and `'row'`. Defaults to `'column'`. + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * const json = df.toJSON() + * ``` + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * const json = df.toJSON({ format: 'row' }) + * console.log(json) + * //output + * [{"A":1,"B":2},{"A":3,"B":4}] + * ``` + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * const json = df.toJSON({ format: "column" }) + * console.log(json) + * //output + * {"A":[1,3],"B":[2,4]} + * ``` + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * df.toJSON({ filePath: './data.json' }) // downloads to local file system as data.json in NodeJS + * ``` + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * df.toJSON({ fileName: 'data.json', download: true }) // downloads file browser + * ``` + */ + toJSON(options?: JsonOutputOptionsBrowser | JsonOutputOptionsNode): object + toJSON(options?: JsonOutputOptionsBrowser | JsonOutputOptionsNode): object | void { + if (utils.isBrowserEnv()) { + return toJSONBrowser(this, options as JsonOutputOptionsBrowser) + } else { + return toJSONNode(this, options as JsonOutputOptionsNode) + } + } + + + /** + * Converts a DataFrame to Excel file format. + * @param options Configuration object. Supported options: + * - `sheetName`: The sheet name to be written to. Defaults to `'Sheet1'`. + * - `filePath`: The filePath to be written to. Defaults to `'./output.xlsx'`. Option is only available in NodeJs + * - `fileName`: The fileName to be written to. Defaults to `'output.xlsx'`. Option is only available in Browser + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * df.toExcel({ filePath: './output.xlsx' }) // writes to local file system as output.xlsx in NodeJS + * ``` + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * df.toExcel({ fileName: 'output.xlsx', download: true }) // downloads file browser + * ``` + * + * @example + * ``` + * const df = new DataFrame([[1, 2], [3, 4]], { columns: ['A', 'B']}) + * df.toExcel({ sheetName: 'Sheet2' }) // writes to Sheet2 in Excel + * ``` + * + */ + toExcel(options?: ExcelOutputOptionsBrowser | ExcelOutputOptionsNode): void { + if (utils.isBrowserEnv()) { + toExcelBrowser(this, options as ExcelOutputOptionsBrowser) + } else { + return toExcelNode(this, options as ExcelOutputOptionsNode) + } + } +} diff --git a/src/danfojs-base/core/generic.ts b/src/danfojs-base/core/generic.ts new file mode 100644 index 00000000..49942d12 --- /dev/null +++ b/src/danfojs-base/core/generic.ts @@ -0,0 +1,471 @@ +/** +* @license +* Copyright 2022 JsData. All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ========================================================================== +*/ + +import Utils from "../shared/utils"; +import Configs from "../shared/config"; +import { _iloc } from "./indexing" +import { + NDframeInterface, + NdframeInputDataType, + LoadArrayDataType, + LoadObjectDataType, + AxisType, + ArrayType1D, + ArrayType2D +} from '../shared/types' +import ErrorThrower from '../shared/errors'; +import { BASE_CONFIG, DATA_TYPES } from '../shared/defaults'; +import tensorflow from '../shared/tensorflowlib' + + +const utils = new Utils(); + +/** + * N-Dimension data structure. Stores multi-dimensional + * data in a size-mutable, labeled data structure. Analogous to the Python Pandas DataFrame. + * + * @param Object + * + * data: 1D or 2D Array, JSON, Tensor, Block of data. + * + * index: Array of numeric or string names for subseting array. If not specified, indexes are auto generated. + * + * columns: Array of column names. If not specified, column names are auto generated. + * + * dtypes: Array of data types for each the column. If not specified, dtypes inferred. + * + * config: General configuration object for NDframe + * + * @returns NDframe + */ +export default class NDframe implements NDframeInterface { + $isSeries: boolean; + protected $data: any + protected $dataIncolumnFormat: ArrayType1D | ArrayType2D = [] + protected $index: Array = [] + protected $columns: string[] = [] + protected $dtypes: Array = [] + protected $config: Configs + + constructor({ data, index, columns, dtypes, config, isSeries }: NdframeInputDataType) { + this.$isSeries = isSeries + if (config) { + this.$config = new Configs({ ...BASE_CONFIG, ...config }); + } else { + this.$config = new Configs(BASE_CONFIG); + } + + if (data instanceof tensorflow.Tensor) { + data = data.arraySync(); + } + + if (data === undefined || (Array.isArray(data) && data.length === 0)) { + this.loadArrayIntoNdframe({ data: [], index: [], columns: [], dtypes: [] }); + } else if (utils.is1DArray(data)) { + this.loadArrayIntoNdframe({ data, index, columns, dtypes }); + } else { + + if (Array.isArray(data) && utils.isObject(data[0])) { + this.loadObjectIntoNdframe({ data, type: 1, index, columns, dtypes }); + + } else if (utils.isObject(data)) { + this.loadObjectIntoNdframe({ data, type: 2, index, columns, dtypes }); + + } else if ( + Array.isArray((data)[0]) || + utils.isNumber((data)[0]) || + utils.isString((data)[0]) + ) { + this.loadArrayIntoNdframe({ data, index, columns, dtypes }); + } else { + throw new Error("File format not supported!"); + } + } + } + + /** + * Internal function to load array of data into NDFrame + * @param data The array of data to load into NDFrame + * @param index Array of numeric or string names for subsetting array. + * @param columns Array of column names. + * @param dtypes Array of data types for each the column. + */ + private loadArrayIntoNdframe({ data, index, columns, dtypes }: LoadArrayDataType): void { + // this.$data = utils.replaceUndefinedWithNaN(data, this.$isSeries); + this.$data = data + if (!this.$config.isLowMemoryMode) { + //In NOT low memory mode, we transpose the array and save in column format. + //This makes column data retrieval run in constant time + this.$dataIncolumnFormat = utils.transposeArray(data) + } + this.$setIndex(index); + this.$setDtypes(dtypes); + this.$setColumnNames(columns); + } + + /** + * Internal function to format and load a Javascript object or object of arrays into NDFrame. + * @param data Object or object of arrays. + * @param type The type of the object. There are two recognized types: + * + * - type 1 object are in JSON format `[{a: 1, b: 2}, {a: 30, b: 20}]`. + * + * - type 2 object are of the form `{a: [1,2,3,4], b: [30,20, 30, 20}]}` + * @param index Array of numeric or string names for subsetting array. + * @param columns Array of column names. + * @param dtypes Array of data types for each the column. + */ + private loadObjectIntoNdframe({ data, type, index, columns, dtypes }: LoadObjectDataType): void { + if (type === 1 && Array.isArray(data)) { + const _data = (data).map((item) => { + return Object.values(item); + }); + + let _columnNames; + + if (columns) { + _columnNames = columns + } else { + _columnNames = Object.keys((data)[0]); + } + + this.loadArrayIntoNdframe({ data: _data, index, columns: _columnNames, dtypes }); + + } else { + const [_data, _colNames] = utils.getRowAndColValues(data); + let _columnNames; + + if (columns) { + _columnNames = columns + } else { + _columnNames = _colNames + } + this.loadArrayIntoNdframe({ data: _data, index, columns: _columnNames, dtypes }); + } + } + + /** + * Converts and returns the data in the NDframe as a Tensorflow.js Tensor. + */ + get tensor() { + if (this.$isSeries) { + return tensorflow.tensor1d(this.$data, this.$dtypes[0]); + } else { + return tensorflow.tensor2d(this.$data, this.shape, "float32") + } + } + + /** + * Returns the dtypes of the columns + */ + get dtypes(): Array { + return this.$dtypes + } + + /** + * Internal function to set the Dtypes of the NDFrame from an array. This function + * performs the necessary checks. + */ + $setDtypes(dtypes: Array | undefined): void { + if (this.$isSeries) { + if (dtypes) { + if (this.$data.length != 0 && dtypes.length != 1) { + ErrorThrower.throwDtypesLengthError(this, dtypes) + } + + if (!(DATA_TYPES.includes(`${dtypes[0]}`))) { + ErrorThrower.throwDtypeNotSupportedError(dtypes[0]) + } + + this.$dtypes = dtypes + } else { + this.$dtypes = utils.inferDtype(this.$data) + } + + } else { + if (dtypes) { + if (this.$data.length != 0 && dtypes.length != this.shape[1]) { + ErrorThrower.throwDtypesLengthError(this, dtypes) + } + + if (this.$data.length == 0 && dtypes.length == 0) { + this.$dtypes = dtypes + } else { + dtypes.forEach((dtype) => { + if (!(DATA_TYPES.includes(dtype))) { + ErrorThrower.throwDtypeNotSupportedError(dtype) + } + }) + + this.$dtypes = dtypes + + } + + } else { + this.$dtypes = utils.inferDtype(this.$data) + } + } + } + + /** + * Returns the dimension of the data. Series have a dimension of 1, + * while DataFrames have a dimension of 2. + */ + get ndim(): number { + if (this.$isSeries) { + return 1; + } else { + return 2 + } + } + + /** + * Returns the axis labels of the NDFrame. + */ + get axis(): AxisType { + return { + index: this.$index, + columns: this.$columns + }; + } + + /** + * Returns the configuration object of the NDFrame. + */ + get config(): Configs { + return this.$config + + } + + /** + * Internal function to set the configuration of the ndframe + */ + $setConfig(config: Configs): void { + this.$config = config + } + + /** + * Returns the indices of the NDFrame + */ + get index(): Array { + return this.$index + + } + + /** + * Internal function to set the index of the NDFrame with the specified + * array of indices. Performs all necessary checks to ensure that the + * index is valid. + */ + $setIndex(index: Array | undefined): void { + if (index) { + + if (this.$data.length != 0 && index.length != this.shape[0]) { + ErrorThrower.throwIndexLengthError(this, index) + } + if (Array.from(new Set(index)).length !== this.shape[0]) { + ErrorThrower.throwIndexDuplicateError() + } + + this.$index = index + } else { + this.$index = utils.range(0, this.shape[0] - 1) //generate index + } + } + + /** + * Internal function to reset the index of the NDFrame using a range of indices. + */ + $resetIndex(): void { + this.$index = utils.range(0, this.shape[0] - 1) + } + + /** + * Returns the column names of the NDFrame + */ + get columns(): string[] { + return this.$columns + } + + /** + * Internal function to set the column names for the NDFrame. This function + * performs a check to ensure that the column names are unique, and same length as the + * number of columns in the data. + */ + $setColumnNames(columns?: string[]) { + + if (this.$isSeries) { + if (columns) { + if (this.$data.length != 0 && columns.length != 1 && typeof columns != 'string') { + ErrorThrower.throwColumnNamesLengthError(this, columns) + } + this.$columns = columns + } else { + this.$columns = ["0"] + } + } else { + if (columns) { + + if (this.$data.length != 0 && columns.length != this.shape[1]) { + + ErrorThrower.throwColumnNamesLengthError(this, columns) + } + if (Array.from(new Set(columns)).length !== this.shape[1]) { + ErrorThrower.throwColumnDuplicateError() + } + + this.$columns = columns + } else { + this.$columns = (utils.range(0, this.shape[1] - 1)).map((val) => `${val}`) //generate columns + } + } + } + + /** + * Returns the shape of the NDFrame. Shape is determined by [row lenght, column length] + */ + get shape(): Array { + if (this.$data.length === 0) return [0, 0] + if (this.$isSeries) { + return [this.$data.length, 1]; + } else { + const rowLen = (this.$data).length + const colLen = (this.$data[0] as []).length + return [rowLen, colLen] + } + + } + + /** + * Returns the underlying data in Array format. + */ + get values(): ArrayType1D | ArrayType2D { + return this.$data; + } + + /** + * Updates the internal $data property to the specified value + * @param values An array of values to set + * @param checkLength Whether to check the length of the new values and the existing row length + * @param checkColumnLength Whether to check the length of the new values and the existing column length + * */ + $setValues(values: ArrayType1D | ArrayType2D, checkLength: boolean = true, checkColumnLength: boolean = true): void { + if (this.$isSeries) { + if (checkLength && values.length != this.shape[0]) { + ErrorThrower.throwRowLengthError(this, values.length) + } + + this.$data = values + this.$dtypes = utils.inferDtype(values) //Dtype may change depeneding on the value set + + if (!this.$config.isLowMemoryMode) { + this.$dataIncolumnFormat = values + } + + } else { + if (checkLength && values.length != this.shape[0]) { + ErrorThrower.throwRowLengthError(this, values.length) + } + + if (checkColumnLength) { + values.forEach(value => { + if ((value as ArrayType1D).length != this.shape[1]) { + ErrorThrower.throwColumnLengthError(this, values.length) + } + }) + } + + this.$data = values + this.$dtypes = utils.inferDtype(values) + + if (!this.$config.isLowMemoryMode) { + this.$dataIncolumnFormat = utils.transposeArray(values) + } + + } + + } + + /** + * Returns the underlying data in Array column format. + * Similar to this.values, but in column format. + */ + get getColumnData() { + if (this.config.isLowMemoryMode) { + return utils.transposeArray(this.values); + } else { + return this.$dataIncolumnFormat; + } + } + + /** + * Returns the size of the NDFrame object + * + */ + get size(): number { + return this.shape[0] * this.shape[1] + } + + /** + * Converts a DataFrame or Series to CSV. + * @param options Configuration object. Supports the following options: + * - `filePath`: Local file path to write the CSV file. If not specified, the CSV will be returned as a string. + * - `header`: Boolean indicating whether to include a header row in the CSV file. + * - `sep`: Character to be used as a separator in the CSV file. + */ + // toCSV(options?: CsvOutputOptionsNode): string + // toCSV(options?: CsvOutputOptionsNode): string | void { + // return toCSV(this, options); + // } + + /** + * Converts a DataFrame or Series to JSON. + * @param options Configuration object. Supported options: + * - `filePath`: The file path to write the JSON to. If not specified, the JSON object is returned. + * - `format`: The format of the JSON. Defaults to `'column'`. E.g for using `column` format: + * ``` + * [{ "a": 1, "b": 2, "c": 3, "d": 4 }, + * { "a": 5, "b": 6, "c": 7, "d": 8 }] + * ``` + * and `row` format: + * ``` + * { "a": [1, 5, 9], + * "b": [2, 6, 10] + * } + * ``` + */ + // toJSON(options?: { format?: "row" | "column", filePath?: string }): object + // toJSON(options?: { format?: "row" | "column", filePath?: string }): object | void { + // return toJSON(this, options); + // } + + + /** + * Converts a DataFrame or Series to Excel Sheet. + * @param options Configuration object. Supported options: + * - `sheetName`: The sheet name to be written to. Defaults to `'Sheet1'`. + * - `filePath`: The filePath to be written to. Defaults to `'./output.xlsx'`. + */ + // toExcel(options?: { filePath?: string, sheetName?: string }): void { + // return toExcel(this, options); + // } + + /** + * Pretty prints a DataFrame or Series to the console + */ + print() { + console.log(this + ""); + } +} \ No newline at end of file diff --git a/src/danfojs-base/core/indexing.ts b/src/danfojs-base/core/indexing.ts new file mode 100644 index 00000000..5c2b668b --- /dev/null +++ b/src/danfojs-base/core/indexing.ts @@ -0,0 +1,420 @@ +/** +* @license +* Copyright 2022 JsData. All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ========================================================================== +*/ + +import Series from "./series"; +import Utils from "../shared/utils" +import DataFrame from "./frame"; +import { NDframeInterface } from "../shared/types"; + +const utils = new Utils(); + +/** +* Internal function to slice a Series/DataFrame by index based labels +* @param Object +*/ +export function _iloc({ ndFrame, rows, columns }: { + ndFrame: NDframeInterface + rows?: Array | Series + columns?: Array +}): Series | DataFrame { + + let _rowIndexes: Array + let _columnIndexes: Array + + const _data = ndFrame.values; + const _index = ndFrame.index; + + if (rows instanceof Series) { + rows = rows.values as Array + } + + if (rows !== undefined && !Array.isArray(rows)) { + throw new Error(`rows parameter must be an Array. For example: rows: [1,2] or rows: ["0:10"]`) + } + + if (columns !== undefined && !Array.isArray(columns)) { + throw new Error(`columns parameter must be an Array. For example: columns: [1,2] or columns: ["0:10"]`) + } + + if (!rows) { + _rowIndexes = utils.range(0, ndFrame.shape[0] - 1) + + } else if (rows.length == 1 && typeof rows[0] == "string") { + const rowSplit = rows[0].split(":") + + if (rowSplit.length != 2) { + throw new Error(`Invalid row split parameter: If using row split string, it must be of the form; rows: ["start:end"]`); + } + if (isNaN(parseInt(rowSplit[0])) && rowSplit[0] != "") { + throw new Error(`Invalid row split parameter. Split parameter must be a number`); + } + + if (isNaN(parseInt(rowSplit[1])) && rowSplit[1] != "") { + throw new Error(`Invalid row split parameter. Split parameter must be a number`); + } + + const start = rowSplit[0] == "" ? 0 : parseInt(rowSplit[0]) + const end = rowSplit[1] == "" ? ndFrame.shape[0] : parseInt(rowSplit[1]) + + if (start < 0) { + throw new Error(`row slice [start] index cannot be less than 0`); + } + + if (end > ndFrame.shape[0]) { + throw new Error(`row slice [end] index cannot be bigger than ${ndFrame.shape[0]}`); + } + _rowIndexes = utils.range(start, end - 1) + } else { + const _formatedRows = [] + for (let i = 0; i < rows.length; i++) { + let _indexToUse = rows[i]; + if (_indexToUse > ndFrame.shape[0]) { + throw new Error(`Invalid row parameter: Specified index ${_indexToUse} cannot be bigger than index length ${ndFrame.shape[0]}`); + } + + if (typeof _indexToUse !== "number" && typeof _indexToUse !== "boolean") { + throw new Error(`Invalid row parameter: row index ${_indexToUse} must be a number or boolean`); + } + + if (typeof _indexToUse === "boolean" && _indexToUse === true) { + _formatedRows.push(_index[i]) + } + + if (typeof _indexToUse === "number") { + _formatedRows.push(_indexToUse) + } + } + + _rowIndexes = _formatedRows as number[] + } + + if (!columns) { + _columnIndexes = utils.range(0, ndFrame.shape[1] - 1) + + } else if (columns.length == 1 && typeof columns[0] == "string") { + const columnSplit = columns[0].split(":") + + if (columnSplit.length != 2) { + throw new Error(`Invalid column split parameter: If using column split string, it must be of the form; columns: ["start:end"]`); + } + if (isNaN(parseInt(columnSplit[0])) && columnSplit[0] != "") { + throw new Error(`Invalid column split parameter. Split parameter must be a number`); + } + + if (isNaN(parseInt(columnSplit[1])) && columnSplit[1] != "") { + throw new Error(`Invalid column split parameter. Split parameter must be a number`); + } + + const start = columnSplit[0] == "" ? 0 : parseInt(columnSplit[0]) + const end = columnSplit[1] == "" ? ndFrame.shape[1] : parseInt(columnSplit[1]) + + if (start < 0) { + throw new Error(`column slice [start] index cannot be less than 0`); + } + + if (end > ndFrame.shape[1]) { + throw new Error(`column slice [end] index cannot be bigger than ${ndFrame.shape[1]}`); + } + _columnIndexes = utils.range(start, end - 1) + } else { + + for (let i = 0; i < columns.length; i++) { + const _indexToUse = columns[i]; + if (_indexToUse > ndFrame.shape[1]) { + throw new Error(`Invalid column parameter: Specified index ${_indexToUse} cannot be bigger than index length ${ndFrame.shape[1]}`); + } + + if (typeof _indexToUse != "number") { + throw new Error(`Invalid column parameter: column index ${_indexToUse} must be a number`); + } + + } + + _columnIndexes = columns as number[] + } + + if (ndFrame instanceof Series) { + const newData = [] + const newIndex = [] + + for (let i = 0; i < _rowIndexes.length; i++) { + const rowIndx = _rowIndexes[i] + newData.push(_data[rowIndx]) + newIndex.push(_index[rowIndx]) + } + const sf = new Series( + newData, + { + index: newIndex, + columns: ndFrame.columns, + dtypes: ndFrame.dtypes, + config: ndFrame.config + }) + + return sf + } else { + const newData = [] + const newIndex = [] + const newColumnNames: string[] = [] + const newDtypes = [] + + for (let i = 0; i < _rowIndexes.length; i++) { + const rowIndx = _rowIndexes[i] + const rowData: any = _data[rowIndx] + const newRowDataWithRequiredCols = [] + + for (let j = 0; j < _columnIndexes.length; j++) { + const colIndx = _columnIndexes[j] + newRowDataWithRequiredCols.push(rowData[colIndx]) + } + newData.push(newRowDataWithRequiredCols) + newIndex.push(_index[rowIndx]) + } + + for (let i = 0; i < _columnIndexes.length; i++) { + const colIndx = _columnIndexes[i] + newColumnNames.push(ndFrame.columns[colIndx]) + newDtypes.push(ndFrame.dtypes[colIndx]) + + } + + const df = new DataFrame( + newData, + { + index: newIndex, + columns: newColumnNames, + dtypes: newDtypes, + config: ndFrame.config + }) + + return df + + } + +} + +/** +* Internal function to slice a Series/DataFrame by specified string location based labels +* @param Object +*/ +export function _loc({ ndFrame, rows, columns }: { + ndFrame: NDframeInterface + rows?: Array | Series + columns?: Array +}): Series | DataFrame { + + let _rowIndexes: Array + let _columnIndexes: Array + + const _data = ndFrame.values; + const _index = ndFrame.index; + + if (rows instanceof Series) { + rows = rows.values as Array + } + + if (rows !== undefined && !Array.isArray(rows)) { + throw new Error(`rows parameter must be an Array. For example: rows: [1,2] or rows: ["0:10"]`) + } + + if (columns !== undefined && !Array.isArray(columns)) { + throw new Error(`columns parameter must be an Array. For example: columns: ["a","b"] or columns: ["a:c"]`) + } + + if (!rows) { + _rowIndexes = _index.map(indexValue => _index.indexOf(indexValue)) // Return all row index + + } else if (rows.length == 1 && typeof rows[0] == "string") { + + if (rows[0].indexOf(":") === -1) { // Input type ==> ["1"] or [`"1"`] + let temp; + if (rows[0].startsWith(`"`) || rows[0].startsWith(`'`) || rows[0].startsWith("`")) { + temp = _index.indexOf(rows[0].replace(/['"`]/g, '')) + } else { + temp = _index.indexOf(Number(rows[0])) + } + + if (temp === -1) { + throw new Error(`IndexError: Specified index (${rows[0]}) not found`); + } + + _rowIndexes = [temp] + + } else { + // Input type ==> ["1:2"] or [`"1":"4"`] + const rowSplit = rows[0].split(":") + + if (rowSplit.length != 2) { + throw new Error(`Invalid row split parameter: If using row split string, it must be of the form; rows: ["start:end"]`); + } + + let start: number + let end: number + + if (rowSplit[0] === "") { + start = _index.indexOf(_index[0]) + } else { + if (rowSplit[0].startsWith(`"`) || rowSplit[0].startsWith(`'`) || rowSplit[0].startsWith("`")) { + start = _index.indexOf(rowSplit[0].replace(/['"`]/g, '')) + } else { + start = _index.indexOf(Number(rowSplit[0])) + } + + } + + if (rowSplit[1] === "") { + end = _index.indexOf(_index[_index.length - 1]) + 1 + } else { + if (rowSplit[0].startsWith(`"`) || rowSplit[0].startsWith(`'`) || rowSplit[0].startsWith("`")) { + end = _index.indexOf(rowSplit[1].replace(/['"`]/g, '')) + } else { + end = _index.indexOf(Number(rowSplit[1])) + } + + } + + if (start === -1) { + throw new Error(`IndexError: Specified start index not found`); + } + + if (end === -1) { + throw new Error(`IndexError: Specified end index not found`); + } + + _rowIndexes = _index.slice(start, end).map(indexValue => _index.indexOf(indexValue)) + } + + } else { + // Input type ==> ["1", "2"] or [1, 5] or [true, false] + const rowsIndexToUse = [] + for (let i = 0; i < rows.length; i++) { + const isBoolean = typeof rows[i] === "boolean" + if (isBoolean && rows[i]) { + rowsIndexToUse.push(_index.indexOf(_index[i])) + } + + if (!isBoolean) { + const rowIndex = _index.indexOf(rows[i] as number | string) + if (rowIndex === -1) { + throw new Error(`IndexError: Specified index (${rows[i]}) not found`); + } + rowsIndexToUse.push(rowIndex) + } + } + + _rowIndexes = rowsIndexToUse + } + + const _columnNames = ndFrame.columns + + if (!columns) { + _columnIndexes = _columnNames.map(columnName => _columnNames.indexOf(columnName))// Return all column index + + } else if (columns.length == 1) { + if (typeof columns[0] !== "string") { + throw new Error(`ColumnIndexError: columns parameter must be an array of a string name. For example: columns: ["b"]`) + } + + if (columns[0].indexOf(":") == -1) { // Input type ==> ["A"] + _columnIndexes = [_columnNames.indexOf(columns[0])] + + } else { // Input type ==> ["a:b"] or [`"col1":"col5"`] + const columnSplit = columns[0].split(":") + + if (columnSplit.length != 2) { + throw new Error(`ColumnIndexError: Invalid row split parameter. If using row split string, it must be of the form; rows: ["start:end"]`); + } + + const start = columnSplit[0] == "" ? _columnNames.indexOf(_columnNames[0]) : _columnNames.indexOf(columnSplit[0]) + const end = columnSplit[1] == "" ? _columnNames.indexOf(_columnNames[_columnNames.length - 1]) : _columnNames.indexOf(columnSplit[1]) + + if (start === -1) { + throw new Error(`ColumnIndexError: Specified start index not found`); + } + + if (end === -1) { + throw new Error(`ColumnIndexError: Specified end index not found`); + } + _columnIndexes = _columnNames.slice(start, end + 1).map(columnName => _columnNames.indexOf(columnName)) + _columnIndexes.pop() //Remove the last element + + } + } else {// Input type ==> ["A", "B"] or ["col1", "col2"] + for (let i = 0; i < columns.length; i++) { + if (_columnNames.indexOf(columns[i]) === -1) { + throw new Error(`ColumnIndexError: Specified column (${columns[i]}) not found`); + } + } + _columnIndexes = columns.map(columnName => _columnNames.indexOf(columnName)) + } + + if (ndFrame instanceof Series) { + const newData = [] + const newIndex = [] + + for (let i = 0; i < _rowIndexes.length; i++) { + const rowIndx = _rowIndexes[i] + newData.push(_data[rowIndx]) + newIndex.push(_index[rowIndx]) + } + const sf = new Series( + newData, + { + index: newIndex, + columns: ndFrame.columns, + dtypes: ndFrame.dtypes, + config: ndFrame.config + }) + + return sf + } else { + const newData = [] + const newIndex = [] + const newColumnNames: string[] = [] + const newDtypes = [] + + for (let i = 0; i < _rowIndexes.length; i++) { + const rowIndx: number = _rowIndexes[i] + const rowData: any = _data[rowIndx] + const newRowDataWithRequiredCols = [] + + for (let j = 0; j < _columnIndexes.length; j++) { + const colIndx = _columnIndexes[j] + newRowDataWithRequiredCols.push(rowData[colIndx]) + } + newData.push(newRowDataWithRequiredCols) + newIndex.push(_index[rowIndx]) + } + + for (let i = 0; i < _columnIndexes.length; i++) { + const colIndx = _columnIndexes[i] + newColumnNames.push(ndFrame.columns[colIndx]) + newDtypes.push(ndFrame.dtypes[colIndx]) + + } + + const df = new DataFrame( + newData, + { + index: newIndex, + columns: newColumnNames, + dtypes: newDtypes, + config: ndFrame.config + }) + return df + + } + +} \ No newline at end of file diff --git a/src/danfojs-base/core/math.ops.ts b/src/danfojs-base/core/math.ops.ts new file mode 100644 index 00000000..6b141a2e --- /dev/null +++ b/src/danfojs-base/core/math.ops.ts @@ -0,0 +1,167 @@ +/** +* @license +* Copyright 2022 JsData. All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ========================================================================== +*/ +import Series from "./series"; +import Utils from "../shared/utils" + +const utils = new Utils(); + +/** + * Generic function for performing math operations on a series + * @param object + * + * ndframe ==> The current Series + * + * other ==> The Series or number to perform math operation with + * + * operation ==> The type of operation to perform +*/ +export function _genericMathOp({ ndFrame, other, operation }: { + ndFrame: Series + other: Series | number | Array + operation: string +}) { + if (typeof other === 'number') { + //broadcast operation + let newData; + switch (operation) { + case 'add': + newData = (ndFrame.values as number[]).map((ele => ele + other)) + return newData + + case 'sub': + newData = (ndFrame.values as number[]).map((ele => ele - other)) + return newData + + case 'mul': + newData = (ndFrame.values as number[]).map((ele => ele * other)) + return newData + + case 'div': + newData = (ndFrame.values as number[]).map((ele => ele / other)) + return newData + + case 'mod': + newData = (ndFrame.values as number[]).map((ele => ele % other)) + return newData + + case 'pow': + newData = (ndFrame.values as number[]).map((ele => ele ** other)) + return newData + + case 'minimum': + newData = (ndFrame.values as number[]).map((ele => Math.min(ele, other))) + return newData + + case 'maximum': + newData = (ndFrame.values as number[]).map((ele => Math.max(ele, other))) + return newData + + default: + throw new Error(`${operation} is not implemented`); + + } + } else if (other instanceof Series) { + utils.checkSeriesOpCompactibility({ firstSeries: ndFrame, secondSeries: other, operation }) + + let newData; + switch (operation) { + case 'add': + + newData = (ndFrame.values as number[]).map((ele, index) => { return ele + (other.values as number[])[index] }) + return newData + + case 'sub': + + newData = (ndFrame.values as number[]).map((ele, index) => { return ele - (other.values as number[])[index] }) + return newData + + case 'mul': + + newData = (ndFrame.values as number[]).map((ele, index) => { return ele * (other.values as number[])[index] }) + return newData + + case 'div': + + newData = (ndFrame.values as number[]).map((ele, index) => { return ele / (other.values as number[])[index] }) + return newData + + case 'mod': + + newData = (ndFrame.values as number[]).map((ele, index) => { return ele % (other.values as number[])[index] }) + return newData + + case 'pow': + newData = (ndFrame.values as number[]).map((ele, index) => { return ele ** (other.values as number[])[index] }) + return newData + + case 'minimum': + newData = (ndFrame.values as number[]).map((ele, index) => { return Math.min(ele, (other.values as number[])[index]) }) + return newData + + case 'maximum': + newData = (ndFrame.values as number[]).map((ele, index) => { return Math.max(ele, (other.values as number[])[index]) }) + return newData + + default: + throw new Error(`${operation} is not implemented`); + } + } else if (Array.isArray(other)) { + if(other.length !== ndFrame.values.length){ + throw new Error(`ParamError: Length of array must be equal to length of Series`) + } + let newData; + switch (operation) { + case 'add': + + newData = (ndFrame.values as number[]).map((ele, index) => { return ele + (other as number[])[index] }) + return newData + + case 'sub': + + newData = (ndFrame.values as number[]).map((ele, index) => { return ele - (other as number[])[index] }) + return newData + + case 'mul': + + newData = (ndFrame.values as number[]).map((ele, index) => { return ele * (other as number[])[index] }) + return newData + + case 'div': + + newData = (ndFrame.values as number[]).map((ele, index) => { return ele / (other as number[])[index] }) + return newData + + case 'mod': + + newData = (ndFrame.values as number[]).map((ele, index) => { return ele % (other as number[])[index] }) + return newData + + case 'pow': + newData = (ndFrame.values as number[]).map((ele, index) => { return ele ** (other as number[])[index] }) + return newData + + case 'minimum': + newData = (ndFrame.values as number[]).map((ele, index) => { return Math.min(ele, (other as number[])[index]) }) + return newData + + case 'maximum': + newData = (ndFrame.values as number[]).map((ele, index) => { return Math.max(ele, (other as number[])[index]) }) + return newData + + } + } else { + throw new Error("ParamError: value for other not supported. It must be either a scalar, Array or Series"); + } +} \ No newline at end of file diff --git a/src/danfojs-base/core/series.ts b/src/danfojs-base/core/series.ts new file mode 100644 index 00000000..3b9659b0 --- /dev/null +++ b/src/danfojs-base/core/series.ts @@ -0,0 +1,2242 @@ +/** +* @license +* Copyright 2022 JsData. All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ========================================================================== +*/ +import { toCSVBrowser, toExcelBrowser, toJSONBrowser } from "../io/browser"; +import { toCSVNode, toExcelNode, toJSONNode } from "../io/node"; +import dummyEncode from "../transformers/encoders/dummy.encoder"; +import { variance, std, median, mode } from 'mathjs'; +import tensorflow from '../shared/tensorflowlib' +import { DATA_TYPES } from '../shared/defaults' +import { _genericMathOp } from "./math.ops"; +import ErrorThrower from "../shared/errors" +import { _iloc, _loc } from "./indexing"; +import { PlotlyLib } from "../plotting"; +import Utils from "../shared/utils" +import NDframe from "./generic"; +import { table } from "table"; +import Str from './strings'; +import Dt from './datetime'; +import DataFrame from "./frame"; +import { + ArrayType1D, + BaseDataOptionType, + SeriesInterface, + CsvOutputOptionsBrowser, + ExcelOutputOptionsBrowser, + JsonOutputOptionsBrowser, + CsvOutputOptionsNode, + ExcelOutputOptionsNode, + JsonOutputOptionsNode, + mapParam +} from "../shared/types"; + +const utils = new Utils(); + + +/** + * One-dimensional ndarray with axis labels. + * The object supports both integer- and label-based indexing and provides a host of methods for performing operations involving the index. + * Operations between Series (+, -, /, , *) align values based on their associated index values – they need not be the same length. + * @param data 1D Array, JSON, Tensor, Block of data. + * @param options.index Array of numeric or string index for subseting array. If not specified, indices are auto generated. + * @param options.columns Column name. This is like the name of the Series. If not specified, column name is set to 0. + * @param options.dtypes Data types of the Series data. If not specified, dtypes is inferred. + * @param options.config General configuration object for extending or setting Series behavior. + */ +export default class Series extends NDframe implements SeriesInterface { + + constructor(data: any = [], options: BaseDataOptionType = {}) { + const { index, columns, dtypes, config } = options; + if (Array.isArray(data[0]) || utils.isObject(data[0])) { + data = utils.convert2DArrayToSeriesArray(data); + super({ + data, + index, + columns, + dtypes, + config, + isSeries: true + }); + } else { + super({ + data, + index, + columns, + dtypes, + config, + isSeries: true + }); + } + } + + /** + * Purely integer-location based indexing for selection by position. + * ``.iloc`` is primarily integer position based (from ``0`` to + * ``length-1`` of the axis), but may also be used with a boolean array. + * + * @param rows Array of row indexes + * + * Allowed inputs are in rows and columns params are: + * + * - An array of single integer, e.g. ``[5]``. + * - A list or array of integers, e.g. ``[4, 3, 0]``. + * - A slice array string with ints, e.g. ``["1:7"]``. + * - A boolean array. + * - A ``callable`` function with one argument (the calling Series or + * DataFrame) and that returns valid output for indexing (one of the above). + * This is useful in method chains, when you don't have a reference to the + * calling object, but would like to base your selection on some value. + * + * ``.iloc`` will raise ``IndexError`` if a requested indexer is + * out-of-bounds. + * + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6], { index: ['a', 'b', 'c', 'd', 'e', 'f'] }); + * const sf2 = sf.iloc([0, 2, 4]); + * sf2.print(); + * ``` + */ + iloc(rows: Array): Series { + return _iloc({ ndFrame: this, rows }) as Series + } + + /** + * Access a group of rows by label(s) or a boolean array. + * ``loc`` is primarily label based, but may also be used with a boolean array. + * + * @param rows Array of row indexes + * + * Allowed inputs are: + * + * - A single label, e.g. ``["5"]`` or ``['a']``, (note that ``5`` is interpreted as a + * *label* of the index, and **never** as an integer position along the index). + * + * - A list or array of labels, e.g. ``['a', 'b', 'c']``. + * + * - A slice object with labels, e.g. ``["a:f"]``. Note that start and the stop are included + * + * - A boolean array of the same length as the axis being sliced, + * e.g. ``[True, False, True]``. + * + * - A ``callable`` function with one argument (the calling Series or + * DataFrame) and that returns valid output for indexing (one of the above) + * + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6], { index: ['a', 'b', 'c', 'd', 'e', 'f'] }); + * const sf2 = sf.loc(['a', 'c', 'e']); + * sf2.print(); + * ``` + * + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6], { index: ['a', 'b', 'c', 'd', 'e', 'f'] }); + * const sf2 = sf.loc(sf.gt(2)); + * sf2.print(); + * ``` + */ + loc(rows: Array): Series { + return _loc({ ndFrame: this, rows }) as Series + } + + /** + * Returns the first n values in a Series + * @param rows The number of rows to return + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6], { index: ['a', 'b', 'c', 'd', 'e', 'f'] }); + * const sf2 = sf.head(3); + * sf2.print(); + * ``` + */ + head(rows: number = 5): Series { + return this.iloc([`0:${rows}`]) + } + + /** + * Returns the last n values in a Series + * @param rows The number of rows to return + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6], { index: ['a', 'b', 'c', 'd', 'e', 'f'] }); + * const sf2 = sf.tail(3); + * sf2.print(); + * ``` + */ + tail(rows: number = 5): Series { + const startIdx = this.shape[0] - rows + return this.iloc([`${startIdx}:`]) + } + + /** + * Returns specified number of random rows in a Series + * @param num The number of rows to return + * @param options.seed An integer specifying the random seed that will be used to create the distribution. + * @example + * ``` + * const df = new Series([1, 2, 3, 4]) + * const df2 = await df.sample(2) + * df2.print() + * ``` + * @example + * ``` + * const df = new Series([1, 2, 3, 4]) + * const df2 = await df.sample(1, { seed: 1 }) + * df2.print() + * ``` + */ + async sample(num = 5, options?: { seed?: number }): Promise { + const { seed } = { seed: 1, ...options } + + if (num > this.shape[0]) { + throw new Error("Sample size n cannot be bigger than size of dataset"); + } + if (num < -1 || num == 0) { + throw new Error("Sample size cannot be less than -1 or be equal to 0"); + } + num = num === -1 ? this.shape[0] : num; + + const shuffledIndex = await tensorflow.data.array(this.index).shuffle(num, `${seed}`).take(num).toArray(); + const sf = this.iloc(shuffledIndex); + return sf; + } + + /** + * Return Addition of series and other, element-wise (binary operator add). + * Equivalent to series + other + * @param other Series, Array of same length or scalar number to add + * @param options.inplace Boolean indicating whether to perform the operation inplace or not. Defaults to false + * + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6], { index: ['a', 'b', 'c', 'd', 'e', 'f'] }); + * const sf2 = sf.add(2); + * console.log(sf2.values); + * //output [3, 4, 5, 6, 7, 8] + * ``` + * + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6], { index: ['a', 'b', 'c', 'd', 'e', 'f'] }); + * const sf2 = sf.add([2, 3, 4, 5, 6, 7]); + * console.log(sf2.values); + * //output [3, 5, 7, 9, 11, 13] + * ``` + * + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6], { index: ['a', 'b', 'c', 'd', 'e', 'f'] }); + * sf.add(2, { inplace: true }); + * console.log(sf.values); + * //output [3, 4, 5, 6, 7, 8] + * ``` + */ + add(other: Series | Array | number, options?: { inplace?: boolean }): Series + add(other: Series | Array | number, options?: { inplace?: boolean }): Series | void { + const { inplace } = { inplace: false, ...options } + + if (this.dtypes[0] == "string") ErrorThrower.throwStringDtypeOperationError("add") + + const newData = _genericMathOp({ ndFrame: this, other, operation: "add" }) + + if (inplace) { + this.$setValues(newData as ArrayType1D) + } else { + return utils.createNdframeFromNewDataWithOldProps({ ndFrame: this, newData, isSeries: true }) as Series + } + } + + /** + * Returns the subtraction between a series and other, element-wise (binary operator subtraction). + * Equivalent to series - other + * @param other Number to subtract + * @param options.inplace Boolean indicating whether to perform the operation inplace or not. Defaults to false + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6], { index: ['a', 'b', 'c', 'd', 'e', 'f'] }); + * const sf2 = sf.sub(2); + * console.log(sf2.values); + * //output [-1, 0, 1, 2, 3, 4] + * ``` + * + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6], { index: ['a', 'b', 'c', 'd', 'e', 'f'] }); + * const sf2 = sf.sub([2, 3, 4, 5, 6, 7]); + * console.log(sf2.values); + * //output [-1, -1, -1, -1, -1, -1] + * ``` + * + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6], { index: ['a', 'b', 'c', 'd', 'e', 'f'] }); + * sf.sub(2, { inplace: true }); + * console.log(sf.values); + * //output [-1, 0, 1, 2, 3, 4] + * ``` + */ + sub(other: Series | number | Array, options?: { inplace?: boolean }): Series + sub(other: Series | number | Array, options?: { inplace?: boolean }): Series | void { + const { inplace } = { inplace: false, ...options } + + if (this.dtypes[0] == "string") ErrorThrower.throwStringDtypeOperationError("sub") + + const newData = _genericMathOp({ ndFrame: this, other, operation: "sub" }) + + if (inplace) { + this.$setValues(newData as ArrayType1D) + } else { + return utils.createNdframeFromNewDataWithOldProps({ ndFrame: this, newData, isSeries: true }) as Series + } + + } + + /** + * Return Multiplication of series and other, element-wise (binary operator mul). + * Equivalent to series * other + * @param other Number to multiply with. + * @param options.inplace Boolean indicating whether to perform the operation inplace or not. Defaults to false + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6], { index: ['a', 'b', 'c', 'd', 'e', 'f'] }); + * const sf2 = sf.mul(2); + * console.log(sf2.values); + * //output [2, 4, 6, 8, 10, 12] + * ``` + * + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6], { index: ['a', 'b', 'c', 'd', 'e', 'f'] }); + * const sf2 = sf.mul([2, 3, 4, 5, 6, 7]); + * console.log(sf2.values); + * //output [2, 6, 12, 20, 30, 42] + * ``` + * + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6], { index: ['a', 'b', 'c', 'd', 'e', 'f'] }); + * sf.mul(2, { inplace: true }); + * console.log(sf.values); + * //output [2, 4, 6, 8, 10, 12] + * ``` + */ + mul(other: Series | number | Array, options?: { inplace?: boolean }): Series + mul(other: Series | number | Array, options?: { inplace?: boolean }): Series | void { + const { inplace } = { inplace: false, ...options } + + if (this.dtypes[0] == "string") ErrorThrower.throwStringDtypeOperationError("mul") + + const newData = _genericMathOp({ ndFrame: this, other, operation: "mul" }) + + if (inplace) { + this.$setValues(newData as ArrayType1D) + } else { + return utils.createNdframeFromNewDataWithOldProps({ ndFrame: this, newData, isSeries: true }) as Series + } + } + + /** + * Return division of series and other, element-wise (binary operator div). + * Equivalent to series / other + * @param other Series or number to divide with. + * @param options.inplace Boolean indicating whether to perform the operation inplace or not. Defaults to false + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6], { index: ['a', 'b', 'c', 'd', 'e', 'f'] }); + * const sf2 = sf.div(2); + * console.log(sf2.values); + * //output [0.5, 1, 1.5, 2, 2.5, 3] + * ``` + * + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6], { index: ['a', 'b', 'c', 'd', 'e', 'f'] }); + * const sf2 = sf.div([2, 3, 4, 5, 6, 7]); + * console.log(sf2.values); + * ``` + * + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6], { index: ['a', 'b', 'c', 'd', 'e', 'f'] }); + * sf.div(2, { inplace: true }); + * console.log(sf.values); + * //output [0.5, 1, 1.5, 2, 2.5, 3] + * ``` + */ + div(other: Series | number | Array, options?: { inplace?: boolean }): Series + div(other: Series | number | Array, options?: { inplace?: boolean }): Series | void { + const { inplace } = { inplace: false, ...options } + + if (this.dtypes[0] == "string") ErrorThrower.throwStringDtypeOperationError("div") + + const newData = _genericMathOp({ ndFrame: this, other, operation: "div" }) + + if (inplace) { + this.$setValues(newData as ArrayType1D) + } else { + return utils.createNdframeFromNewDataWithOldProps({ ndFrame: this, newData, isSeries: true }) as Series + } + } + + /** + * Return Exponential power of series and other, element-wise (binary operator pow). + * Equivalent to series ** other + * @param other Number to raise to power. + * @param options.inplace Boolean indicating whether to perform the operation inplace or not. Defaults to false + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6], { index: ['a', 'b', 'c', 'd', 'e', 'f'] }); + * const sf2 = sf.pow(2); + * console.log(sf2.values); + * //output [1, 4, 9, 16, 25, 36] + * ``` + * + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6], { index: ['a', 'b', 'c', 'd', 'e', 'f'] }); + * const sf2 = sf.pow(new Series([2, 3, 4, 5, 6, 7])); + * console.log(sf2.values); + * //output [ 1, 8, 81, 1024, 15625, 279936 ] + * ``` + * + */ + pow(other: Series | number | Array, options?: { inplace?: boolean }): Series + pow(other: Series | number | Array, options?: { inplace?: boolean }): Series | void { + const { inplace } = { inplace: false, ...options } + + if (this.dtypes[0] == "string") ErrorThrower.throwStringDtypeOperationError("pow") + + const newData = _genericMathOp({ ndFrame: this, other, operation: "pow" }) + + if (inplace) { + this.$setValues(newData as ArrayType1D) + } else { + return utils.createNdframeFromNewDataWithOldProps({ ndFrame: this, newData, isSeries: true }) as Series + } + } + + /** + * Return Modulo of series and other, element-wise (binary operator mod). + * Equivalent to series % other + * @param other Number to modulo with + * @param options.inplace Boolean indicating whether to perform the operation inplace or not. Defaults to false + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6], { index: ['a', 'b', 'c', 'd', 'e', 'f'] }); + * const sf2 = sf.mod(2); + * console.log(sf2.values); + * //output [1, 0, 1, 0, 1, 0] + * ``` + */ + mod(other: Series | number | Array, options?: { inplace?: boolean }): Series + mod(other: Series | number | Array, options?: { inplace?: boolean }): Series | void { + const { inplace } = { inplace: false, ...options } + + if (this.dtypes[0] == "string") ErrorThrower.throwStringDtypeOperationError("mod") + + const newData = _genericMathOp({ ndFrame: this, other, operation: "mod" }) + + if (inplace) { + this.$setValues(newData as ArrayType1D) + } else { + return utils.createNdframeFromNewDataWithOldProps({ ndFrame: this, newData, isSeries: true }) as Series + } + } + + /** + * Checks if the array value passed has a compatible dtype, removes NaN values, and if + * boolean values are present, converts them to integer values. + */ + private $checkAndCleanValues(values: ArrayType1D, operation: string): number[] { + if (this.dtypes[0] == "string") ErrorThrower.throwStringDtypeOperationError(operation) + values = utils.removeMissingValuesFromArray(values); + + if (this.dtypes[0] == "boolean") { + values = (utils.mapBooleansToIntegers(values as boolean[], 1) as ArrayType1D); + } + return values as number[] + } + + /** + * Returns the mean of elements in Series. + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6]); + * console.log(sf.mean()); + * //output 3.5 + * ``` + */ + mean(): number { + const values = this.$checkAndCleanValues(this.values as ArrayType1D, "mean") + return (values.reduce((a, b) => a + b) / values.length) as number + } + + + /** + * Returns the median of elements in Series + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6]); + * console.log(sf.median()); + * //output 3.5 + * ``` + */ + median(): number { + const values = this.$checkAndCleanValues(this.values as ArrayType1D, "median") + return median(values); + } + + /** + * Returns the modal value of elements in Series + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 4, 5, 6]); + * console.log(sf.mode()); + * //output [ 4 ] + * ``` + * + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 4, 5, 5, 6]); + * console.log(sf.mode()); + * //output [ 4, 5 ] + * ``` + * + */ + mode() { + const values = this.$checkAndCleanValues(this.values as ArrayType1D, "mode") + return mode(values); + } + + /** + * Returns the minimum value in a Series + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6]); + * console.log(sf.min()); + * //output 1 + * ``` + * + */ + min(): number { + const values = this.$checkAndCleanValues(this.values as ArrayType1D, "min") + let smallestValue = values[0] + for (let i = 0; i < values.length; i++) { + smallestValue = smallestValue < values[i] ? smallestValue : values[i] + } + return smallestValue + } + + /** + * Returns the maximum value in a Series + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6]); + * console.log(sf.max()); + * //output 6 + * ``` + */ + max(): number { + const values = this.$checkAndCleanValues(this.values as ArrayType1D, "max") + let biggestValue = values[0] + for (let i = 0; i < values.length; i++) { + biggestValue = biggestValue > values[i] ? biggestValue : values[i] + } + return biggestValue + } + + /** + * Return the sum of the values in a series. + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6]); + * console.log(sf.sum()); + * //output 21 + * ``` + */ + sum(): number { + const values = this.$checkAndCleanValues(this.values as ArrayType1D, "sum") + return values.reduce((sum, value) => sum + value, 0) + } + + /** + * Return number of non-null elements in a Series + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6]); + * console.log(sf.count()); + * //output 6 + * ``` + * + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6, NaN]); + * console.log(sf.count()); + * //output 6 + * ``` + */ + count(): number { + const values = utils.removeMissingValuesFromArray(this.values as ArrayType1D) + return values.length + } + + /** + * Return maximum of series and other. + * @param other Series, number or Array of numbers to check against + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6]); + * const sf2 = sf.maximum(3); + * console.log(sf2.values); + * //output [ 3, 3, 3, 4, 5, 6 ] + * ``` + * + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6]); + * const sf2 = new Series([4, 1, 3, 40, 5, 3]); + * const sf3 = sf.maximum(sf2); + * console.log(sf3.values); + * //output [ 4, 2, 3, 40, 5, 6 ] + * ``` + */ + maximum(other: Series | number | Array): Series { + if (this.dtypes[0] == "string") ErrorThrower.throwStringDtypeOperationError("maximum") + + const newData = _genericMathOp({ ndFrame: this, other, operation: "maximum" }) + return new Series(newData, { + columns: this.columns, + index: this.index + }); + } + + /** + * Return minimum of series and other. + * @param other Series, number of Array of numbers to check against + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6]); + * const sf2 = sf.minimum(3); + * console.log(sf2.values); + * //output [ 1, 2, 3, 3, 3, 3 ] + * ``` + * + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6]); + * const sf2 = new Series([4, 1, 3, 40, 5, 3]); + * const sf3 = sf.minimum(sf2); + * console.log(sf3.values); + * //output [ 1, 1, 3, 4, 5, 3 ] + * ``` + * + */ + minimum(other: Series | number | Array): Series { + if (this.dtypes[0] == "string") ErrorThrower.throwStringDtypeOperationError("maximum") + + const newData = _genericMathOp({ ndFrame: this, other, operation: "minimum" }) + return new Series(newData, { + columns: this.columns, + index: this.index + }); + } + + /** + * Round each value in a Series to the specified number of decimals. + * @param dp Number of Decimal places to round to + * @param options.inplace Boolean indicating whether to perform the operation inplace or not. Defaults to false + * + * @example + * ``` + * const sf = new Series([1.23, 2.4, 3.123, 4.1234, 5.12345]); + * const sf2 = sf.round(2); + * console.log(sf2.values); + * //output [ 1.23, 2.4, 3.12, 4.12, 5.12 ] + * ``` + * + * @example + * ``` + * const sf = new Series([1.23, 2.4, 3.123, 4.1234, 5.12345]); + * sf.round(2, { inplace: true }); + * console.log(sf.values); + * //output [ 1.23, 2.4, 3.12, 4.12, 5.12 ] + * ``` + */ + round(dp = 1, options?: { inplace?: boolean }): Series | void { + const { inplace } = { inplace: false, ...options } + + const newValues = utils.round(this.values as number[], dp, true); + + if (inplace) { + this.$setValues(newValues) + } else { + return utils.createNdframeFromNewDataWithOldProps({ + ndFrame: this, + newData: newValues, + isSeries: true + }) as Series + } + + } + + /** + * Return sample standard deviation of elements in Series + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6]); + * console.log(sf.std()); + * //output 1.8708286933869707 + * ``` + */ + std(): number { + const values = this.$checkAndCleanValues(this.values as ArrayType1D, "max") + return std(values); + } + + /** + * Return unbiased variance of elements in a Series. + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6]); + * console.log(sf.var()); + * //output 3.5 + * ``` + */ + var(): number { + const values = this.$checkAndCleanValues(this.values as ArrayType1D, "max") + return variance(values); + } + + /** + * Return a boolean same-sized object indicating where elements are NaN. + * NaN and undefined values gets mapped to true, and everything else gets mapped to false. + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, NaN, 6]); + * console.log(sf.isNaN()); + * //output [ false, false, false, false, true, false ] + * ``` + * + */ + isNa(): Series { + const newData = this.values.map((value) => { + + if (utils.isEmpty(value)) { + return true; + } else { + return false; + } + }) + const sf = new Series(newData, + { + index: this.index, + dtypes: ["boolean"], + config: this.config + }); + return sf; + } + + /** + * Replace all missing values with a specified value + * @param value The value to replace NaN with + * @param options.inplace Boolean indicating whether to perform the operation inplace or not. Defaults to false + * + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, NaN, 6]); + * const sf2 = sf.fillNa(-99); + * console.log(sf2.values); + * //output [ 1, 2, 3, 4, -99, 6 ] + * ``` + * + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, NaN, 6]); + * sf.fillNa(-99, { inplace: true }); + * console.log(sf.values); + * //output [ 1, 2, 3, 4, -99, 6 ] + * ``` + */ + fillNa(value: number | string | boolean, options?: { inplace?: boolean }): Series + fillNa(value: number | string | boolean, options?: { inplace?: boolean }): Series | void { + const { inplace } = { inplace: false, ...options } + + if (!value && typeof value !== "boolean" && typeof value !== "number") { + throw Error('ParamError: value must be specified'); + } + + const newValues: ArrayType1D = []; + (this.values as ArrayType1D).forEach((val) => { + if (utils.isEmpty(val)) { + newValues.push(value); + } else { + newValues.push(val); + } + }); + + if (inplace) { + this.$setValues(newValues) + } else { + return utils.createNdframeFromNewDataWithOldProps({ + ndFrame: this, + newData: newValues, + isSeries: true + }) as Series + } + } + + + /** + * Sort a Series in ascending or descending order by some criterion. + * @param options Method options + * @param ascending Whether to return sorted values in ascending order or not. Defaults to true + * @param options.inplace Boolean indicating whether to perform the operation inplace or not. Defaults to false + * @example + * ``` + * const sf = new Series([2, 1, 3, 4, 6, 5]); + * const sf2 = sf.sortValues(); + * console.log(sf2.values); + * //output [ 1, 2, 3, 4, 5, 6 ] + * ``` + */ + sortValues(options?: { ascending?: boolean, inplace?: boolean }): Series + sortValues(options?: { ascending?: boolean, inplace?: boolean }): Series | void { + const { ascending, inplace, } = { ascending: true, inplace: false, ...options } + + let sortedValues = []; + const rangeIdx = utils.range(0, this.index.length - 1); + let sortedIdx = utils.sortArrayByIndex(rangeIdx, this.values, this.dtypes[0]); + + for (let indx of sortedIdx) { + sortedValues.push(this.values[indx]) + } + + if (ascending) { + sortedValues = sortedValues.reverse(); + sortedIdx = sortedIdx.reverse(); + } + + if (inplace) { + this.$setValues(sortedValues as ArrayType1D) + this.$setIndex(sortedIdx); + } else { + const sf = new Series(sortedValues, { + index: sortedIdx, + dtypes: this.dtypes, + config: this.config + }); + return sf; + + } + } + + + /** + * Makes a deep copy of a Series + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6]); + * const sf2 = sf.copy(); + * ``` + * + */ + copy(): Series { + const sf = new Series([...this.values], { + columns: [...this.columns], + index: [...this.index], + dtypes: [...this.dtypes], + config: { ...this.config } + }); + return sf; + } + + + /** + * Generate descriptive statistics. + * Descriptive statistics include those that summarize the central tendency, + * dispersion and shape of a dataset’s distribution, excluding NaN values. + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6]); + * const sf2 = sf.describe(); + * sf2.print(); + * ``` + */ + describe(): Series { + if (this.dtypes[0] == "string") { + throw new Error("DType Error: Cannot generate descriptive statistics for Series with string dtype") + } else { + + const index = ['count', 'mean', 'std', 'min', 'median', 'max', 'variance']; + const count = this.count(); + const mean = this.mean(); + const std = this.std(); + const min = this.min(); + const median = this.median(); + const max = this.max(); + const variance = this.var(); + + const data = [count, mean, std, min, median, max, variance]; + const sf = new Series(data, { index: index }); + return sf; + + } + } + + + /** + * Resets the index of the Series to default values. + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6], { index: ['a', 'b', 'c', 'd', 'e', 'f'] }); + * const sf2 = sf.resetIndex(); + * console.log(sf2.index); + * //output [ 0, 1, 2, 3, 4, 5 ] + * ``` + * + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6], { index: ['a', 'b', 'c', 'd', 'e', 'f'] }); + * sf.resetIndex({ inplace: true }); + * console.log(sf.index); + * //output [ 0, 1, 2, 3, 4, 5 ] + * ``` + */ + resetIndex(options?: { inplace?: boolean }): Series + resetIndex(options?: { inplace?: boolean }): Series | void { + const { inplace } = { inplace: false, ...options } + + if (inplace) { + this.$resetIndex(); + } else { + const sf = this.copy(); + sf.$resetIndex(); + return sf; + } + } + + /** + * Set the Series index (row labels) using an array of the same length. + * @param index Array of new index values, + * @param options.inplace Boolean indicating whether to perform the operation inplace or not. Defaults to false + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6], { index: ['a', 'b', 'c', 'd', 'e', 'f'] }); + * const sf2 = sf.setIndex(['g', 'h', 'i', 'j', 'k', 'l']); + * console.log(sf2.index); + * //output [ 'g', 'h', 'i', 'j', 'k', 'l' ] + * ``` + */ + setIndex(index: Array, options?: { inplace?: boolean }): Series + setIndex(index: Array, options?: { inplace?: boolean }): Series | void { + const { inplace } = { inplace: false, ...options } + + if (!index) { + throw Error('Param Error: Must specify index array'); + } + + if (inplace) { + this.$setIndex(index) + } else { + const sf = this.copy(); + sf.$setIndex(index) + return sf; + } + } + + + /** + * map all the element in a Series to a function or object. + * @param callable callable can either be a funtion or an object. If function, then each value and the corresponding index is passed. + * @param options.inplace Boolean indicating whether to perform the operation inplace or not. Defaults to false + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6]); + * const sf2 = sf.map((x) => x * 2); + * console.log(sf2.values); + * //output [ 2, 4, 6, 8, 10, 12 ] + * ``` + * + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6]); + * const sf2 = sf.map({ + * 1: -99, + * 3: -99 + * }); + * console.log(sf2.values); + * //output [ -99, 2, -99, 4, -99, 6 ] + * ``` + */ + map(callable: mapParam, options?: { inplace?: boolean }): Series + map(callable: mapParam, options?: { inplace?: boolean }): Series | void { + const { inplace } = { inplace: false, ...options } + + const isCallable = utils.isFunction(callable); + + const data = (this.values as ArrayType1D).map((val: any, i: number) => { + if (isCallable) { + return (callable as Function)(val, i); + } else if (utils.isObject(callable)) { + if (val in callable) { + //@ts-ignore + return callable[val]; + } else { + return val + } + } else { + throw new Error("Param Error: callable must either be a function or an object"); + } + }); + + if (inplace) { + this.$setValues(data) + } else { + const sf = this.copy(); + sf.$setValues(data) + return sf; + } + } + + /** + * Applies a function to each element of a Series + * @param callable Function to apply to each element of the series + * @param options.inplace Boolean indicating whether to perform the operation inplace or not. Defaults to false + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6]); + * const sf2 = sf.apply((x) => x * 2); + * console.log(sf2.values); + * //output [ 2, 4, 6, 8, 10, 12 ] + * ``` + * + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6]); + * sf.apply((x) => x * 2, { inplace: true }); + * console.log(sf.values); + * //output [ 2, 4, 6, 8, 10, 12 ] + * ``` + * + */ + apply(callable: (value: any) => any, options?: { inplace?: boolean }): Series + apply(callable: (value: any) => any, options?: { inplace?: boolean }): Series | void { + const { inplace } = { inplace: false, ...options } + + const isCallable = utils.isFunction(callable); + if (!isCallable) { + throw new Error("Param Error: callable must be a function"); + } + + const data = this.values.map((val) => { + return callable(val); + }); + + if (inplace) { + this.$setValues(data) + } else { + const sf = this.copy(); + sf.$setValues(data) + return sf; + } + } + + /** + * Returns a Series with only the unique value(s) in the original Series + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6]); + * const sf2 = sf.unique(); + * console.log(sf2.values); + * //output [ 1, 2, 3, 4, 5, 6 ] + * ``` + */ + unique(): Series { + const newValues = new Set(this.values as ArrayType1D); + let series = new Series(Array.from(newValues)); + return series; + } + + /** + * Return the number of unique elements in a Series + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6]); + * console.log(sf.nUnique()); + * //output 6 + * ``` + * + */ + nUnique(): number { + return (new Set(this.values as ArrayType1D)).size; + } + + /** + * Returns unique values and their counts in a Series + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6]); + * const sf2 = sf.valueCounts(); + * sf2.print(); + * ``` + */ + valueCounts(): Series { + const sData = this.values; + const dataDict: any = {}; + for (let i = 0; i < sData.length; i++) { + const val = sData[i]; + if (`${val}` in dataDict) { + dataDict[`${val}`] = dataDict[`${val}`] + 1; + } else { + dataDict[`${val}`] = 1; + } + } + + const index = Object.keys(dataDict).map((x) => { + return parseInt(x) ? parseInt(x) : x; + }); + const data = Object.values(dataDict); + + const series = new Series(data, { index: index }); + return series; + + } + + /** + * Returns the absolute of values in Series + * @param options.inplace Boolean indicating whether to perform the operation inplace or not. Defaults to false + * @example + * ``` + * const sf = new Series([1, -2, 3, -4, 5, -6]); + * const sf2 = sf.abs(); + * console.log(sf2.values); + * //output [ 1, 2, 3, 4, 5, 6 ] + * ``` + * + * @example + * ``` + * const sf = new Series([1, -2, 3, -4, 5, -6]); + * sf.abs({ inplace: true }); + * console.log(sf.values); + * //output [ 1, 2, 3, 4, 5, 6 ] + * ``` + */ + abs(options?: { inplace?: boolean }): Series + abs(options?: { inplace?: boolean }): Series | void { + const { inplace } = { inplace: false, ...options } + + if (this.dtypes[0] == "string") ErrorThrower.throwStringDtypeOperationError("abs") + let newValues; + + + newValues = this.values.map(val => Math.abs(val as number)); + + if (inplace) { + this.$setValues(newValues as ArrayType1D) + } else { + const sf = this.copy(); + sf.$setValues(newValues as ArrayType1D) + return sf; + } + } + + /** + * Returns the cumulative sum over a Series + * @param options.inplace Boolean indicating whether to perform the operation inplace or not. Defaults to false + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6]); + * const sf2 = sf.cumsum(); + * console.log(sf2.values); + * //output [ 1, 3, 6, 10, 15, 21 ] + * ``` + * + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6]); + * sf.cumSum({ inplace: true }); + * console.log(sf.values); + * //output [ 1, 3, 6, 10, 15, 21 ] + * ``` + */ + cumSum(options?: { inplace?: boolean }): Series + cumSum(options?: { inplace?: boolean }): Series | void { + const ops = { inplace: false, ...options } + return this.cumOps("sum", ops); + } + + /** + * Returns cumulative minimum over a Series + * @param options.inplace Boolean indicating whether to perform the operation inplace or not. Defaults to false + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6]); + * const sf2 = sf.cumMin(); + * console.log(sf2.values); + * //output [ 1, 1, 1, 1, 1, 1 ] + * ``` + * + */ + cumMin(options?: { inplace?: boolean }): Series + cumMin(options?: { inplace?: boolean }): Series | void { + const ops = { inplace: false, ...options } + return this.cumOps("min", ops); + } + + + /** + * Returns cumulative maximum over a Series + * @param options.inplace Boolean indicating whether to perform the operation inplace or not. Defaults to false + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6]); + * const sf2 = sf.cumMax(); + * console.log(sf2.values); + * //output [ 1, 2, 3, 4, 5, 6 ] + * ``` + */ + cumMax(options?: { inplace?: boolean }): Series + cumMax(options?: { inplace?: boolean }): Series | void { + const ops = { inplace: false, ...options } + return this.cumOps("max", ops); + } + + /** + * Returns cumulative product over a Series + * @param options.inplace Boolean indicating whether to perform the operation inplace or not. Defaults to false + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6]); + * const sf2 = sf.cumProd(); + * console.log(sf2.values); + * //output [ 1, 2, 6, 24, 120, 720 ] + * ``` + */ + cumProd(options?: { inplace?: boolean }): Series + cumProd(options?: { inplace?: boolean }): Series | void { + const ops = { inplace: false, ...options } + return this.cumOps("prod", ops); + } + + /** + * Internal helper function to calculate cumulative operations on series data + */ + private cumOps(ops: string, options: { inplace: boolean }): Series | void { + if (this.dtypes[0] == "string") ErrorThrower.throwStringDtypeOperationError(ops) + const { inplace } = options; + + const sData = this.values; + let tempval = sData[0]; + const data = [tempval]; + + for (let i = 1; i < sData.length; i++) { + let currVal = sData[i]; + switch (ops) { + case "max": + if (currVal > tempval) { + data.push(currVal); + tempval = currVal; + } else { + data.push(tempval); + } + break; + case "min": + if (currVal < tempval) { + data.push(currVal); + tempval = currVal; + } else { + data.push(tempval); + } + break; + case "sum": + tempval = (tempval as number) + (currVal as number) + data.push(tempval); + break; + case "prod": + tempval = (tempval as number) * (currVal as number) + data.push(tempval); + break; + + } + } + + if (inplace) { + this.$setValues(data as ArrayType1D) + } else { + return new Series(data, { + index: this.index, + config: { ...this.config } + }); + } + } + + + /** + * Returns less than of series and other. Supports element wise operations + * @param other Series, number, or Array of numbers to compare against + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6]); + * const sf2 = sf.lt(3); + * console.log(sf2.values); + * //output [ true, true, false, false, false, false ] + * ``` + * + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6]); + * const sf2 = sf.lt([3, 4, 5, 6, 7, 8]); + * console.log(sf2.values); + * //output [ true, true, false, false, false, false ] + * ``` + */ + lt(other: Series | number | Array | boolean[]): Series { + return this.boolOps(other, "lt"); + } + + /** + * Returns Greater than of series and other. Supports element wise operations + * @param other Series, number or Array of numbers to compare against + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6]); + * const sf2 = sf.gt(3); + * console.log(sf2.values); + * //output [ false, false, true, true, true, true ] + * ``` + * + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6]); + * const sf2 = sf.gt([3, 4, 5, 6, 7, 8]); + * console.log(sf2.values); + * //output [ false, false, true, true, true, true ] + * ``` + */ + gt(other: Series | number | Array | boolean[]): Series { + return this.boolOps(other, "gt"); + } + + /** + * Returns Less than or Equal to of series and other. Supports element wise operations + * @param other Series, number or Array of numbers to compare against + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6]); + * const sf2 = sf.le(3); + * console.log(sf2.values); + * //output [ true, true, true, true, false, false ] + * ``` + * + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6]); + * const sf2 = sf.le([3, 4, 5, 6, 7, 8]); + * console.log(sf2.values); + * //output [ true, true, true, true, false, false ] + * ``` + * + */ + le(other: Series | number | Array | boolean[]): Series { + return this.boolOps(other, "le"); + } + + /** + * Returns Greater than or Equal to of series and other. Supports element wise operations + * @param other Series, number or Array of numbers to compare against + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6]); + * const sf2 = sf.ge(3); + * console.log(sf2.values); + * //output [ false, false, true, true, true, true ] + * ``` + * + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6]); + * const sf2 = sf.ge([3, 4, 5, 6, 7, 8]); + * console.log(sf2.values); + * //output [ false, false, true, true, true, true ] + * ``` + */ + ge(other: Series | number | Array | boolean[]): Series { + return this.boolOps(other, "ge"); + } + + /** + * Returns Not Equal to of series and other. Supports element wise operations + * @param other Series, number or Array of numbers to compare against + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6]); + * const sf2 = sf.ne(3); + * console.log(sf2.values); + * //output [ true, true, false, true, true, true ] + * ``` + * + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6]); + * const sf2 = sf.ne([3, 2, 5, 6, 7, 8]); + * console.log(sf2.values); + * //output [ true, false, true, true, true, true ] + * ``` + * + */ + ne(other: Series | number | Array | boolean[]): Series { + return this.boolOps(other, "ne"); + } + + /** + * Returns Equal to of series and other. Supports element wise operations + * @param other Series, number or Array of numbers to compare against + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6]); + * const sf2 = sf.eq(3); + * console.log(sf2.values); + * //output [ false, false, true, false, false, false ] + * ``` + * + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6]); + * const sf2 = sf.eq(new Series([3, 2, 5, 6, 7, 8])); + * console.log(sf2.values); + * //output [ false, true, false, false, false, false ] + * ``` + */ + eq(other: Series | number | Array | boolean[]): Series { + return this.boolOps(other, "eq"); + } + + /** + * Internal function to perform boolean operations + * @param other Other Series or number to compare with + * @param bOps Name of operation to perform [ne, ge, le, gt, lt, eq] + */ + private boolOps(other: Series | number | Array | boolean[], bOps: string) { + const data = []; + const lSeries = this.values; + let rSeries; + + if (typeof other == "number") { + rSeries = Array(this.values.length).fill(other); //create array of repeated value for broadcasting + } else if (typeof other == "string" && ["eq", "ne"].includes(bOps)) { + rSeries = Array(this.values.length).fill(other); + } else if (other instanceof Series) { + rSeries = other.values; + } else if (Array.isArray(other)) { + rSeries = other; + } else { + throw new Error("ParamError: value for other not supported. It must be either a scalar, Array or Series"); + } + + if (!(lSeries.length === rSeries.length)) { + throw new Error("LengthError: Lenght of other must be equal to length of Series"); + } + + + for (let i = 0; i < lSeries.length; i++) { + let lVal = lSeries[i]; + let rVal = rSeries[i]; + let bool = null; + switch (bOps) { + case "lt": + bool = lVal < rVal ? true : false; + data.push(bool); + break; + case "gt": + bool = lVal > rVal ? true : false; + data.push(bool); + break; + case "le": + bool = lVal <= rVal ? true : false; + data.push(bool); + break; + case "ge": + bool = lVal >= rVal ? true : false; + data.push(bool); + break; + case "ne": + bool = lVal !== rVal ? true : false; + data.push(bool); + break; + case "eq": + bool = lVal === rVal ? true : false; + data.push(bool); + break; + } + } + return new Series(data, { + index: this.index, + config: { ...this.config } + }); + } + + /** + * Replace all occurence of a value with a new value + * @param oldValue The value you want to replace + * @param newValue The new value you want to replace the old value with + * @param options.inplace Boolean indicating whether to perform the operation inplace or not. Defaults to false + * + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6]); + * const sf2 = sf.replace(3, 10); + * console.log(sf2.values); + * //output [ 1, 2, 10, 4, 5, 6 ] + * ``` + * + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6]); + * sf.replace(3, 10, { inplace: true }); + * console.log(sf.values); + * //output [ 1, 2, 10, 4, 5, 6 ] + * ``` + */ + replace( + oldValue: string | number | boolean, + newValue: string | number | boolean, + options?: { inplace?: boolean } + ): Series + replace( + oldValue: string | number | boolean, + newValue: string | number | boolean, + options?: { inplace?: boolean } + ): Series | void { + const { inplace } = { inplace: false, ...options } + + if (!oldValue && typeof oldValue !== 'boolean') { + throw Error(`Params Error: Must specify param 'oldValue' to replace`); + } + + if (!newValue && typeof newValue !== 'boolean') { + throw Error(`Params Error: Must specify param 'newValue' to replace with`); + } + + const newArr = [...this.values].map((val) => { + if (val === oldValue) { + return newValue + } else { + return val + } + }); + + if (inplace) { + this.$setValues(newArr as ArrayType1D) + } else { + const sf = this.copy(); + sf.$setValues(newArr as ArrayType1D) + return sf; + } + + } + + /** + * Drops all missing values (NaN, null, undefined) from a Series. + * @param options.inplace Boolean indicating whether to perform the operation inplace or not. Defaults to false + * + * @example + * ``` + * const sf = new Series([1, 2, NaN, 4, 5, NaN]); + * const sf2 = sf.dropNa(); + * console.log(sf2.values); + * //output [ 1, 2, 4, 5 ] + * ``` + * + * @example + * ``` + * const sf = new Series([1, 2, NaN, 4, 5, null]); + * sf.dropNa({ inplace: true }); + * console.log(sf.values); + * //output [ 1, 2, 4, 5 ] + * ``` + */ + dropNa(options?: { inplace?: boolean }): Series + dropNa(options?: { inplace?: boolean }): Series | void { + const { inplace } = { inplace: false, ...options } + + const oldValues = this.values; + const oldIndex = this.index; + const newValues: ArrayType1D = []; + const newIndex: Array = []; + const isNaVals = this.isNa().values; + + isNaVals.forEach((val, i) => { + if (!val) { + newValues.push((oldValues as ArrayType1D)[i]); + newIndex.push(oldIndex[i]) + } + }); + + if (inplace) { + this.$setValues(newValues, false) + this.$setIndex(newIndex) + } else { + const sf = this.copy(); + sf.$setValues(newValues, false) + sf.$setIndex(newIndex) + return sf; + } + + } + + /** + * Returns the integer indices that would sort the Series. + * @param ascending Boolean indicating whether to sort in ascending order or not. Defaults to true + * @example + * ``` + * const sf = new Series([3, 1, 2]); + * const sf2 = sf.argSort(); + * console.log(sf2.values); + * //output [ 1, 2, 0 ] + * ``` + * + * @example + * ``` + * const sf = new Series([3, 1, 2]); + * const sf2 = sf.argSort({ascending: false}); + * console.log(sf2.values); + * //output [ 0, 2, 1 ] + * + */ + argSort(options?: { ascending: boolean }): Series { + const { ascending } = { ascending: true, ...options } + const sortedIndex = this.sortValues({ ascending }); + const sf = new Series(sortedIndex.index); + return sf; + } + + /** + * Returns integer position of the largest value in the Series. + * @example + * ``` + * const sf = new Series([3, 1, 2]); + * const sf2 = sf.argMax(); + * console.log(sf2); + * //output 0 + * ``` + * + */ + argMax(): number { + return this.tensor.argMax().arraySync() as number + } + + + /** + * Returns integer position of the smallest value in the Series. + * @example + * ``` + * const sf = new Series([3, 1, 2]); + * const sf2 = sf.argMin(); + * console.log(sf2); + * //output 1 + * ``` + * + */ + argMin(): number { + return this.tensor.argMin().arraySync() as number + } + + /** + * Remove duplicate values from a Series + * @param keep "first" | "last", which dupliate value to keep. Defaults to "first". + * @param options.inplace Boolean indicating whether to perform the operation inplace or not. Defaults to false + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); + * const sf2 = sf.dropDuplicates(); + * console.log(sf2.values); + * //output [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] + * ``` + * + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); + * sf.dropDuplicates({ keep: "last", inplace: true }); + * console.log(sf.values); + * //output [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] + * ``` + * + */ + dropDuplicates(options?: { keep?: "first" | "last", inplace?: boolean }): Series + dropDuplicates(options?: { keep?: "first" | "last", inplace?: boolean }): Series | void { + const { keep, inplace } = { keep: "first", inplace: false, ...options } + + if (!(["first", "last"].includes(keep))) { + throw Error(`Params Error: Keep must be one of 'first' or 'last'`); + } + + let dataArr: ArrayType1D + let newArr: ArrayType1D = []; + let oldIndex: Array + let newIndex: Array = []; + + if (keep === "last") { + dataArr = (this.values as ArrayType1D).reverse(); + oldIndex = this.index.reverse(); + } else { + dataArr = (this.values as ArrayType1D) + oldIndex = this.index; + } + + dataArr.forEach((val, i) => { + if (!newArr.includes(val)) { + newIndex.push(oldIndex[i]); + newArr.push(val); + } + }); + + if (keep === "last") { + //re-reversed the array and index to its true order + newArr = newArr.reverse(); + newIndex = newIndex.reverse(); + } + + if (inplace) { + this.$setValues(newArr, false) + this.$setIndex(newIndex) + } else { + const sf = this.copy(); + sf.$setValues(newArr, false) + sf.$setIndex(newIndex) + return sf; + } + + } + + /** + * Cast Series to specified data type + * @param dtype Data type to cast to. One of [float32, int32, string, boolean, undefined] + * @param options.inplace Boolean indicating whether to perform the operation inplace or not. Defaults to false + * + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); + * const sf2 = sf.asType("float32"); + * console.log(sf2.dtype); + * //output "float32" + * ``` + * + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); + * sf.asType("float32", {inplace: true}); + * console.log(sf.dtype); + * //output "float32" + * ``` + */ + asType(dtype: "float32" | "int32" | "string" | "boolean" | "undefined", options?: { inplace?: boolean }): Series + asType(dtype: "float32" | "int32" | "string" | "boolean" | "undefined", options?: { inplace?: boolean }): Series | void { + const { inplace } = { inplace: false, ...options } + + if (!dtype) { + throw Error("Param Error: Please specify dtype to cast to"); + } + + if (!(DATA_TYPES.includes(dtype))) { + throw Error(`dtype ${dtype} not supported. dtype must be one of ${DATA_TYPES}`); + } + + const oldValues = [...this.values]; + const newValues: ArrayType1D = []; + + switch (dtype) { + case "float32": + oldValues.forEach((val) => { + newValues.push(Number(val)); + }); + break; + case "int32": + oldValues.forEach((val) => { + newValues.push(parseInt(val as any)); + }); + break; + case "string": + oldValues.forEach((val) => { + newValues.push(String(val)); + }); + break; + case "boolean": + oldValues.forEach((val) => { + newValues.push(Boolean(val)); + }); + break; + case "undefined": + oldValues.forEach((_) => { + newValues.push(NaN); + }); + break; + default: + break; + } + + if (inplace) { + this.$setValues(newValues, false) + this.$setDtypes([dtype]) + } else { + const sf = this.copy(); + sf.$setValues(newValues, false) + sf.$setDtypes([dtype]) + return sf; + } + + } + + /** + * Appends a new value or values to the end of the Series + * @param newValue Single value | Array | Series to append to the Series + * @param index The new index value(s) to append to the Series. Must contain the same number of values as `newValues` + * as they map `1 - 1`. + * @param options.inplace Boolean indicating whether to perform the operation inplace or not. Defaults to false + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); + * sf.append(11); + * console.log(sf.values); + * //output [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 ] + * ``` + * + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); + * sf.append([11, 12, 13]); + * console.log(sf.values); + * //output [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 ] + * ``` + * + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); + * sf.append(new Series([11, 12, 13]), { inplace: true}); + * console.log(sf.values); + * //output [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 ] + * ``` + */ + append( + newValue: string | number | boolean | Series | ArrayType1D, + index: Array | number | string, + options?: { inplace?: boolean } + ): Series | void { + const { inplace } = { inplace: false, ...options } + + if (!newValue && typeof newValue !== "boolean") { + throw Error("Param Error: newValues cannot be null or undefined"); + } + + if (!index) { + throw Error("Param Error: index cannot be null or undefined"); + } + + const newData = [...this.values] + const newIndx = [...this.index] + + if (Array.isArray(newValue) && Array.isArray(index)) { + + if (newValue.length !== index.length) { + throw Error("Param Error: Length of new values and index must be the same"); + } + + newValue.forEach((el, i) => { + newData.push(el); + newIndx.push(index[i]); + }); + + } else if (newValue instanceof Series) { + const _value = newValue.values; + + if (!Array.isArray(index)) { + throw Error("Param Error: index must be an array"); + } + + if (index.length !== _value.length) { + throw Error("Param Error: Length of new values and index must be the same"); + } + + _value.forEach((el, i) => { + newData.push(el); + newIndx.push(index[i]); + }); + } else { + newData.push(newValue); + newIndx.push(index as string | number); + } + + if (inplace) { + this.$setValues(newData as ArrayType1D, false) + this.$setIndex(newIndx) + } else { + const sf = new Series( + newData, + { + index: newIndx, + columns: this.columns, + dtypes: this.dtypes, + config: this.config + }) + + return sf + } + } + + /** + * Returns dtype of Series + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); + * console.log(sf.dtype); + * //output "int32" + * ``` + */ + get dtype(): string { + return this.dtypes[0]; + } + + /** + * Exposes numerous string methods to manipulate Series of string dtype + * @example + * ``` + * const sf = new Series(["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"]); + * const sfs = sf.str.join("HelloWorld", ""); + * console.log(sfs.values); + * //output ["aHelloWorld", "bHelloWorld", "cHelloWorld", "dHelloWorld", "eHelloWorld", "fHelloWorld", "gHelloWorld", "hHelloWorld", "iHelloWorld", "jHelloWorld"] + * ``` + */ + get str() { + if (this.dtypes[0] == "string") { + return new Str(this); + } else { + throw new Error("Cannot call accessor str on non-string type"); + } + } + + /** + * Returns time class that exposes different date time method + * @example + * ``` + * const sf = new Series([ + * "2020-01-01", + * "2020-01-02", + * "2020-01-03", + * "2020-01-04", + * "2020-01-05", + * ]); + * const sfd = sf.dt.dayOfWeekName(); + * console.log(sfd.values); + * //output [ 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday' ] + * ``` + */ + get dt() { + if (this.dtypes[0] == "string") { + return new Dt(this) + } else { + throw new Error("Cannot call accessor dt on non-string type"); + } + } + + /** + * Overrides default toString implementation. This essentially makes `print()` works. + */ + toString(): string { + const maxRow = this.$config.getMaxRow; + let indx: (string | number)[] + let values = [] + + if (this.shape[0] > maxRow) { + //slice rows to show [max_rows] rows + const sfSlice = this.iloc([`0:${maxRow}`]); + + indx = sfSlice.index + values = sfSlice.values; + + } else { + indx = this.index + values = this.values; + } + + const tabledata = values.map((x, i) => [indx[i], x]) + return table(tabledata as any); + } + + /** + * Returns the logical AND between Series and other. Supports element wise operations and broadcasting. + * @param other Series, Scalar, Array of Scalars + * @example + * ``` + * const sf = new Series([true, true, false, false, true]); + * const sf2 = new Series([true, false, true, false, true]); + * const sf3 = sf.and(sf2); + * console.log(sf3.values); + * //output [ true, false, false, false, false ] + * ``` + */ + and(other: any): Series { + + if (other === undefined) { + throw new Error("Param Error: other cannot be undefined"); + } + const newValues: ArrayType1D = []; + + if (other instanceof Series) { + if (this.dtypes[0] !== other.dtypes[0]) { + throw new Error("Param Error: Series must be of same dtype"); + } + + if (this.shape[0] !== other.shape[0]) { + throw new Error("Param Error: Series must be of same shape"); + } + + this.values.forEach((val, i) => { + newValues.push(Boolean(val) && Boolean(other.values[i])); + }); + + } else if (typeof other === "boolean") { + + this.values.forEach((val) => { + newValues.push(Boolean(val) && Boolean(other)); + }); + + } else if (Array.isArray(other)) { + + this.values.forEach((val, i) => { + newValues.push(Boolean(val) && Boolean(other[i])); + }); + + } else { + throw new Error("Param Error: other must be a Series, Scalar, or Array of Scalars"); + } + return new Series(newValues, { + index: this.index, + config: { ...this.config } + }); + } + + /** + * Returns the logical OR between Series and other. Supports element wise operations and broadcasting. + * @param other Series, Scalar, Array of Scalars + * @example + * ``` + * const sf = new Series([true, true, false, false, true]); + * const sf2 = new Series([true, false, true, false, true]); + * const sf3 = sf.or(sf2); + * console.log(sf3.values); + * //output [ true, true, true, false, true ] + * ``` + * + */ + or(other: any): Series { + + if (other === undefined) { + throw new Error("Param Error: other cannot be undefined"); + } + const newValues: ArrayType1D = []; + + if (other instanceof Series) { + if (this.dtypes[0] !== other.dtypes[0]) { + throw new Error("Param Error: Series must be of same dtype"); + } + + if (this.shape[0] !== other.shape[0]) { + throw new Error("Param Error: Series must be of same shape"); + } + + this.values.forEach((val, i) => { + newValues.push(Boolean(val) || Boolean(other.values[i])); + }); + + } else if (typeof other === "boolean") { + + this.values.forEach((val) => { + newValues.push(Boolean(val) || Boolean(other)); + }); + + } else if (Array.isArray(other)) { + + this.values.forEach((val, i) => { + newValues.push(Boolean(val) || Boolean(other[i])); + }); + + } else { + throw new Error("Param Error: other must be a Series, Scalar, or Array of Scalars"); + } + + return new Series(newValues, { + index: this.index, + config: { ...this.config } + }); + } + + /** + * One-hot encode values in the Series. + * @param options Options for the operation. The following options are available: + * - `prefix`: Prefix to add to the new column. Defaults to unique labels. + * - `prefixSeparator`: Separator to use for the prefix. Defaults to '_'. + * @example + * ``` + * const sf = new Series(["a", "b", "c", "a"]); + * const sf2 = sf.getDummies({ prefix: "category" }); + * console.log(sf2.values); + * //output [ [ 1, 0, 0 ], [ 0, 1, 0 ], [ 0, 0, 1 ], [ 1, 0, 0 ] ] + * ``` + * + * @example + * ``` + * const sf = new Series(["a", "b", "c", "a"]); + * const sf2 = sf.getDummies({ prefix: "category", prefixSeparator: "-" }); + * console.log(sf2.values); + * //output [ [ 1, 0, 0 ], [ 0, 1, 0 ], [ 0, 0, 1 ], [ 1, 0, 0 ] ] + * ``` + */ + getDummies(options?: { + columns?: string | Array, + prefix?: string | Array, + prefixSeparator?: string, + }): DataFrame { + return dummyEncode(this, options) + } + + + /** + * Exposes functions for creating charts from a Series. + * Charts are created using the Plotly.js library, so all Plotly's configuration parameters are available. + * @param divId name of the HTML Div to render the chart in. + * @example + * ``` + * const sf = new Series([1, 2, 3, 4, 5]); + * sf.plot("myDiv").line() //renders the chart in the div with id "myDiv" + * ``` + */ + plot(divId: string) { + //TODO: Add support for check plot library to use + // So we can support other plot library like d3, vega, etc + if (utils.isBrowserEnv()) { + const plt = new PlotlyLib(this, divId); + return plt; + } else { + throw new Error("Not supported in NodeJS"); + } + } + + /** + * Converts a Series to CSV. + * @param options Configuration object. Supports the following options: + * - `filePath`: Local file path to write the CSV file. If not specified, the CSV will be returned as a string. Option is only available in NodeJS. + * - `fileName`: Name of the CSV file. Defaults to `data.csv`. Option is only available in Browser. + * - `download`: If true, the CSV will be downloaded. Defaults to false. Option is only available in Browser. + * + * @example + * ``` + * const df = new Series([1, 2, 3, 4]) + * const csv = df.toCSV() + * console.log(csv) + * //output "1,2,3,4" + * ``` + * + * @example + * ``` + * const df = new Series([1, 2, 3, 4]) + * df.toCSV({ filePath: './data.csv' }) //write to local file in NodeJS + * ``` + * + * @example + * ``` + * const df = new Series([1, 2, 3, 4]) + * df.toCSV({ fileName: 'data.csv', download: true }) //Downloads file in Browser + * ``` + * + */ + toCSV(options?: CsvOutputOptionsBrowser | CsvOutputOptionsNode): string + toCSV(options?: CsvOutputOptionsBrowser | CsvOutputOptionsNode): string | void { + if (utils.isBrowserEnv()) { + return toCSVBrowser(this, options as CsvOutputOptionsBrowser) + } else { + return toCSVNode(this, options as CsvOutputOptionsNode) + } + } + + /** + * Converts a Series to JSON. + * @param options Configuration object. Supported options: + * - `filePath`: The file path to write the JSON to. If not specified, the JSON object is returned. Option is only available in NodeJS. + * - `fileName`: The name of the JSON file. Defaults to `data.json`. Option is only available in Browser. + * - `download`: If true, the JSON will be downloaded. Defaults to false. Option is only available in Browser. + * + * @example + * ``` + * const df = new Series([[1, 2, 3, 4]], { columns: ['A']}) + * const json = df.toJSON() + * console.log(json) + * //output { A: [ '1,2,3,4' ] } + * ``` + * + * @example + * ``` + * const df = new Series([1, 2, 3, 4]) + * df.toJSON({ filePath: './data.json' }) // downloads to local file system as data.json in NodeJS + * ``` + * + * @example + * ``` + * const df = new Series([1, 2, 3, 4]) + * df.toJSON({ fileName: 'data.json', download: true }) // downloads file browser + * ``` + */ + toJSON(options?: JsonOutputOptionsBrowser | JsonOutputOptionsNode): object + toJSON(options?: JsonOutputOptionsBrowser | JsonOutputOptionsNode): object | void { + if (utils.isBrowserEnv()) { + return toJSONBrowser(this, options as JsonOutputOptionsBrowser) + } else { + return toJSONNode(this, options as JsonOutputOptionsNode) + } + } + + + /** + * Converts a Series to Excel file format. + * @param options Configuration object. Supported options: + * - `sheetName`: The sheet name to be written to. Defaults to `'Sheet1'`. + * - `filePath`: The filePath to be written to. Defaults to `'./output.xlsx'`. Option is only available in NodeJs + * - `fileName`: The fileName to be written to. Defaults to `'output.xlsx'`. Option is only available in Browser + * + * @example + * ``` + * const df = new Series([1, 2, 3, 4]) + * df.toExcel({ filePath: './output.xlsx' }) // writes to local file system as output.xlsx in NodeJS + * ``` + * + * @example + * ``` + * const df = new Series([1, 2, 3, 4]) + * df.toExcel({ fileName: 'output.xlsx', download: true }) // downloads file browser + * ``` + * + * @example + * ``` + * const df = new Series([1, 2, 3, 4]) + * df.toExcel({ sheetName: 'Sheet2' }) // writes to Sheet2 in Excel + * ``` + * + */ + toExcel(options?: ExcelOutputOptionsBrowser | ExcelOutputOptionsNode): void { + if (utils.isBrowserEnv()) { + toExcelBrowser(this, options as ExcelOutputOptionsBrowser) + } else { + return toExcelNode(this, options as ExcelOutputOptionsNode) + } + } +} \ No newline at end of file diff --git a/src/danfojs-base/core/strings.ts b/src/danfojs-base/core/strings.ts new file mode 100644 index 00000000..0f5e2b68 --- /dev/null +++ b/src/danfojs-base/core/strings.ts @@ -0,0 +1,766 @@ +/** +* @license +* Copyright 2022 JsData. All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ========================================================================== +*/ +import { ArrayType1D } from "../shared/types"; +import Utils from "../shared/utils" +import Series from "./series"; + +const utils = new Utils(); +/** + * Exposes numerous String methods. All methods are applied Element-wise + */ +export default class Str { + private series: Series + private values: ArrayType1D + + constructor(series: Series) { + this.series = series; + this.values = (series.values as ArrayType1D); + } + + /** + * Converts all characters to lowercase. + * @param options The following optional parameters are supported: + * - `inplace` Boolean, indicating whether to perform the operation inplace or not. Defaults to `false` + * @example + * ``` + * import { Series } from "danfojs-node" + * const sf = new Series(["GooD", "Bad", "CrAzy"]) + * const newSf = sf.str.toLowerCase() + * console.log(newSf.values) + * // ["good", "bad", "crazy"] + * ``` + */ + toLowerCase(options?: { inplace?: boolean }): Series + toLowerCase(options?: { inplace?: boolean }): Series | void { + const { inplace } = { inplace: false, ...options } + const newArr: Array = []; + this.values.map((val) => { + if (utils.isEmpty(val)) { + newArr.push(NaN); + } else { + newArr.push(`${val}`.toLowerCase()); + } + + }); + + if (inplace) { + this.series.$setValues(newArr as ArrayType1D) + this.series.print() + } else { + const sf = this.series.copy() + sf.$setValues(newArr as ArrayType1D) + return sf; + } + + } + + /** + * Converts all characters to uppercase. + * @param options The following optional parameters are supported: + * - `inplace` Boolean, indicating whether to perform the operation inplace or not. Defaults to `false` + * @example + * ``` + * import { Series } from "danfojs-node" + * const sf = new Series(["GooD", "Bad", "CrAzy"]) + * const newSf = sf.str.toUpperCase() + * console.log(newSf.values) + * // ["GOOD", "BAD", "CRAZY"] + * ``` + */ + toUpperCase(options?: { inplace?: boolean }): Series + toUpperCase(options?: { inplace?: boolean }): Series | void { + const { inplace } = { inplace: false, ...options } + const newArr: Array = []; + this.values.map((val) => { + if (utils.isEmpty(val)) { + newArr.push(NaN); + } else { + newArr.push(`${val}`.toUpperCase()); + } + + }); + if (inplace) { + this.series.$setValues(newArr as ArrayType1D) + this.series.print() + } else { + const sf = this.series.copy() + sf.$setValues(newArr as ArrayType1D) + return sf; + + } + } + + /** + * Capitalize first string + * @param options The following optional parameters are supported: + * - `inplace` Boolean, indicating whether to perform the operation inplace or not. Defaults to `false` + * @example + * ``` + * import { Series } from "danfojs-node" + * const sf = new Series(["Good", "bad", "crazy"]) + * const newSf = sf.str.capitalize() + * console.log(newSf.values) + * // ["Good", "Bad", "Crazy"] + * ``` + */ + capitalize(options?: { inplace?: boolean }): Series + capitalize(options?: { inplace?: boolean }): Series | void { + const { inplace } = { inplace: false, ...options } + const newArr: Array = []; + this.values.map((val) => { + if (utils.isEmpty(val)) { + newArr.push(NaN); + } else { + let firstChar = `${val}`.slice(0, 1); + let leftChar = `${val}`.slice(1); + let newStr = `${firstChar.toUpperCase()}${leftChar.toLowerCase()}`; + newArr.push(newStr); + } + + }); + + if (inplace) { + this.series.$setValues(newArr as ArrayType1D) + this.series.print() + } else { + const sf = this.series.copy() + sf.$setValues(newArr as ArrayType1D) + return sf; + } + + } + + /** + * Returns the character at the specified index (position) + * @param index position of character + * @param options The following optional parameters are supported: + * - `inplace` Boolean, indicating whether to perform the operation inplace or not. Defaults to `false` + * @example + * ``` + * import { Series } from "danfojs-node" + * const sf = new Series(["Good", "bad", "crazy"]) + * const newSf = sf.str.charAt(1) + * console.log(newSf.values) + * // ["o", "a", "r"] + * ``` + */ + charAt(index: number, options?: { inplace?: boolean }): Series + charAt(index = 0, options?: { inplace?: boolean }): Series | void { + const { inplace } = { inplace: false, ...options } + const newArr: Array = []; + this.values.map((val) => { + if (utils.isEmpty(val)) { + newArr.push(NaN); + } else { + newArr.push(`${val}`.charAt(index)); + } + }); + if (inplace) { + this.series.$setValues(newArr as ArrayType1D) + this.series.print() + } else { + const sf = this.series.copy() + sf.$setValues(newArr as ArrayType1D) + return sf; + } + } + + /** + * Joins specified `other` with values in the Series. + * @param other string|values to concatenate with. + * @param position where to concat the string from. O concats from the start, 1 concats from the end. Defaults to 1. + * @param options The following optional parameters are supported: + * - `inplace` Boolean, indicating whether to perform the operation inplace or not. Defaults to `false` + * @example + * ``` + * import { Series } from "danfojs-node" + * const sf = new Series(["Good", "bad", "crazy"]) + * const newSf = sf.str.concat("_new") + * console.log(newSf.values) + * // ["Good_new", "bad_new", "crazy_new" + * ``` + */ + concat(other: Array | string, position: number, options?: { inplace?: boolean }): Series + concat(other: Array | string, position = 1, options?: { inplace?: boolean }): Series | void { + const { inplace } = { inplace: false, ...options } + const newArr: Array = []; + + if (Array.isArray(other)) { + for (let i = 0; i < other.length; i++) { + let leftStr = `${this.values[i]}`; + let rightStr = `${other[i]}`; + if (position == 1) { + newArr.push(leftStr.concat(rightStr)); + } else { + newArr.push(rightStr.concat(leftStr)); + } + + } + } else { + this.values.map((val) => { + if (position == 1) { + if (utils.isEmpty(val)) { + newArr.push(NaN); + } else { + newArr.push(`${val}`.concat(`${other}`)); + } + + } else { + if (utils.isEmpty(val)) { + newArr.push(NaN); + } else { + newArr.push(other.concat(`${val}`)); + } + } + }); + } + + if (inplace) { + this.series.$setValues(newArr as ArrayType1D) + this.series.print() + } else { + const sf = this.series.copy() + sf.$setValues(newArr as ArrayType1D) + return sf; + } + + } + + + /** + * Checks whether a string begins with specified characters + * @param str String or Character to check against + * @param options The following optional parameters are supported: + * - `inplace` Boolean, indicating whether to perform the operation inplace or not. Defaults to `false` + * @example + * ``` + * import { Series } from "danfojs-node" + * const sf = new Series(["Good", "bad", "crazy"]) + * const newSf = sf.str.startsWith("G") + * console.log(newSf.values) + * // [true, false, false] + * ``` + */ + startsWith(str: string, options?: { inplace?: boolean }): Series + startsWith(str = "", options?: { inplace?: boolean }): Series | void { + const { inplace } = { inplace: false, ...options } + const newArr: Array = []; + this.values.forEach((val) => { + if (utils.isEmpty(val)) { + newArr.push(NaN); + } else { + newArr.push(`${val}`.startsWith(str)); + } + }); + if (inplace) { + this.series.$setValues(newArr as ArrayType1D) + this.series.print() + } else { + const sf = this.series.copy() + sf.$setValues(newArr as ArrayType1D) + return sf; + } + } + + /** + * Checks whether a string ends with specified characters + * @param str String or Character to check against + * @param options The following optional parameters are supported: + * - `inplace` Boolean, indicating whether to perform the operation inplace or not. Defaults to `false` + * @example + * ``` + * import { Series } from "danfojs-node" + * const sf = new Series(["Good", "bad", "crazy"]) + * const newSf = sf.str.endsWith("d") + * console.log(newSf.values) + * // [true, true, false] + * ``` + */ + endsWith(str: string, options?: { inplace?: boolean }): Series + endsWith(str = "", options?: { inplace?: boolean }): Series | void { + const { inplace } = { inplace: false, ...options } + const newArr: Array = []; + this.values.map((val) => { + if (utils.isEmpty(val)) { + newArr.push(NaN); + } else { + newArr.push(`${val}`.endsWith(str)); + } + }); + if (inplace) { + this.series.$setValues(newArr as ArrayType1D) + this.series.print() + } else { + const sf = this.series.copy() + sf.$setValues(newArr as ArrayType1D) + return sf; + } + } + + /** + * Checks whether a string contains the specified string/characters + * @param str String or Character to check against + * @param options The following optional parameters are supported: + * - `inplace` Boolean, indicating whether to perform the operation inplace or not. Defaults to `false` + * @example + * ``` + * import { Series } from "danfojs-node" + * const sf = new Series(["Good", "bad", "crazy"]) + * const newSf = sf.str.includes("d") + * console.log(newSf.values) + * // [true, true, false] + * ``` + */ + includes(str: string, options?: { inplace?: boolean }): Series + includes(str = "", options?: { inplace?: boolean }): Series | void { + const { inplace } = { inplace: false, ...options } + const newArr: Array = []; + this.values.map((val) => { + if (utils.isEmpty(val)) { + newArr.push(NaN); + } else { + newArr.push(`${val}`.includes(str)); + } + }); + if (inplace) { + this.series.$setValues(newArr as ArrayType1D) + this.series.print() + } else { + const sf = this.series.copy() + sf.$setValues(newArr as ArrayType1D) + return sf; + } + } + + /** + * Returns the position of the first occurrence of a specified value in a string. + * @param str String or Character to check against + * @param options The following optional parameters are supported: + * - `inplace` Boolean, indicating whether to perform the operation inplace or not. Defaults to `false` + * @example + * ``` + * import { Series } from "danfojs-node" + * const sf = new Series(["Good", "bad", "crazy"]) + * const newSf = sf.str.indexOf("d") + * console.log(newSf.values) + * // [3, 2, -1] + * ``` + */ + indexOf(str: string, options?: { inplace?: boolean }): Series + indexOf(str = "", options?: { inplace?: boolean }): Series | void { + const { inplace } = { inplace: false, ...options } + const newArr: Array = []; + this.values.map((val) => { + if (utils.isEmpty(val)) { + newArr.push(NaN); + } else { + newArr.push(`${val}`.indexOf(str)); + } + }); + if (inplace) { + this.series.$setValues(newArr as ArrayType1D) + this.series.print() + } else { + const sf = this.series.copy() + sf.$setValues(newArr as ArrayType1D) + return sf; + } + } + + /** + * Returns the position of the last found occurrence of a specified value in a string + * @param str String or Character to check against + * @param options The following optional parameters are supported: + * - `inplace` Boolean, indicating whether to perform the operation inplace or not. Defaults to `false` + * @example + * ``` + * import { Series } from "danfojs-node" + * const sf = new Series(["Good", "odd", "crazy"]) + * const newSf = sf.str.lastIndexOf("d") + * console.log(newSf.values) + * // [3, 2, -1] + * ``` + */ + lastIndexOf(str: string, options?: { inplace?: boolean }): Series + lastIndexOf(str = "", options?: { inplace?: boolean }): Series | void { + const { inplace } = { inplace: false, ...options } + const newArr: Array = []; + this.values.map((val) => { + if (utils.isEmpty(val)) { + newArr.push(NaN); + } else { + newArr.push(`${val}`.lastIndexOf(str)); + } + }); + if (inplace) { + this.series.$setValues(newArr as ArrayType1D) + this.series.print() + } else { + const sf = this.series.copy() + sf.$setValues(newArr as ArrayType1D) + return sf; + } + } + + + /** + * Searches a string for a specified value, or a regular expression, and returns a new string where the specified values are replaced + * @param searchValue String | Character value to replace + * @param replaceValue String | Character string to replace with + * @param options The following optional parameters are supported: + * - `inplace` Boolean, indicating whether to perform the operation inplace or not. Defaults to `false` + * @example + * ``` + * import { Series } from "danfojs-node" + * const sf = new Series(["Good", "odd", "crazy"]) + * const newSf = sf.str.replace("d", 7) + * console.log(newSf.values) + * // ["Goo7", "o77", "crazy"] + * ``` + */ + replace(searchValue: string, replaceValue: string, options?: { inplace?: boolean }): Series + replace(searchValue = "", replaceValue = "", options?: { inplace?: boolean }): Series | void { + const { inplace } = { inplace: false, ...options } + const newArr: Array = []; + this.values.map((val) => { + if (utils.isEmpty(val)) { + newArr.push(NaN); + } else { + newArr.push(`${val}`.replace(searchValue, replaceValue)); + } + }); + if (inplace) { + this.series.$setValues(newArr as ArrayType1D) + this.series.print() + } else { + const sf = this.series.copy() + sf.$setValues(newArr as ArrayType1D) + return sf; + } + } + + /** + * Returns a new string with a specified number of copies of an existing string + * @param num Number of times to repeat + * @param options The following optional parameters are supported: + * - `inplace` Boolean, indicating whether to perform the operation inplace or not. Defaults to `false` + * @example + * ``` + * import { Series } from "danfojs-node" + * const sf = new Series(["Good", "odd", "crazy"]) + * const newSf = sf.str.replace(2) + * console.log(newSf.values) + * // ["GoodGood", "oddodd", "crazycrazy"] + * ``` + */ + repeat(num: number, options?: { inplace?: boolean }): Series + repeat(num = 1, options?: { inplace?: boolean }): Series | void { + const { inplace } = { inplace: false, ...options } + const newArr: Array = []; + this.values.map((val) => { + if (utils.isEmpty(val)) { + newArr.push(NaN); + } else { + newArr.push(`${val}`.repeat(num)); + } + }); + if (inplace) { + this.series.$setValues(newArr as ArrayType1D) + this.series.print() + } else { + const sf = this.series.copy() + sf.$setValues(newArr as ArrayType1D) + return sf; + } + } + + + /** + * Searches a string for a specified value, or regular expression, and returns the position of the match + * @param str String or Character to check against + * @param options The following optional parameters are supported: + * - `inplace` Boolean, indicating whether to perform the operation inplace or not. Defaults to `false` + * @example + * ``` + * import { Series } from "danfojs-node" + * const sf = new Series(["Good", "odd", "crazy"]) + * const newSf = sf.str.search("d") + * console.log(newSf.values) + * ``` + */ + search(str: string, options?: { inplace?: boolean }): Series + search(str = "", options?: { inplace?: boolean }): Series | void { + const { inplace } = { inplace: false, ...options } + const newArr: Array = []; + this.values.map((val) => { + if (utils.isEmpty(val)) { + newArr.push(NaN); + } else { + newArr.push(`${val}`.search(str)); + } + }); + if (inplace) { + this.series.$setValues(newArr as ArrayType1D) + this.series.print() + } else { + const sf = this.series.copy() + sf.$setValues(newArr as ArrayType1D) + return sf; + } + } + + /** + * Extracts a part of a string and returns a new string + * @param startIndex index position of start character + * @param endIndex index position of last character + * @param options The following optional parameters are supported: + * - `inplace` Boolean, indicating whether to perform the operation inplace or not. Defaults to `false` + * @example + * ``` + * import { Series } from "danfojs-node" + * const sf = new Series(["Good", "odd", "crazy"]) + * const newSf = sf.str.slice(0,1) + * console.log(newSf.values) + * // ["G", "o", "c"] + * ``` + */ + slice(startIndex: number, endIndex: number, options?: { inplace?: boolean }): Series + slice(startIndex = 0, endIndex = 1, options?: { inplace?: boolean }): Series | void { + const { inplace } = { inplace: false, ...options } + const newArr: Array = []; + this.values.map((val) => { + if (utils.isEmpty(val)) { + newArr.push(NaN); + } else { + newArr.push(`${val}`.slice(startIndex, endIndex)); + } + }); + if (inplace) { + this.series.$setValues(newArr as ArrayType1D) + this.series.print() + } else { + const sf = this.series.copy() + sf.$setValues(newArr as ArrayType1D) + return sf; + } + } + + /** + * Splits a string into an values of substrings + * @param splitVal string or character to split at + * @param options The following optional parameters are supported: + * - `inplace` Boolean, indicating whether to perform the operation inplace or not. Defaults to `false` + * @example + * ``` + * import { Series } from "danfojs-node" + * const sf = new Series(["Good", "odd", "grade"]) + * const newSf = sf.str.split(d) + * console.log(newSf.values) + * ``` + */ + split(splitVal: string, options?: { inplace?: boolean }): Series + split(splitVal = " ", options?: { inplace?: boolean }): Series | void { + const { inplace } = { inplace: false, ...options } + const newArr: Array = []; + this.values.map((val) => { + if (utils.isEmpty(val)) { + newArr.push(NaN); + } else { + newArr.push(`${String(val).split(splitVal)}`); + } + }); + if (inplace) { + this.series.$setValues(newArr as ArrayType1D) + this.series.print() + } else { + const sf = this.series.copy() + sf.$setValues(newArr as ArrayType1D) + return sf; + } + } + + /** + * Extracts the characters from a string, beginning at a specified start position, and through the specified number of character + * @param startIndex index position of start character + * @param num number of characters to return + * @param options The following optional parameters are supported: + * - `inplace` Boolean, indicating whether to perform the operation inplace or not. Defaults to `false` + * @example + * ``` + * import { Series } from "danfojs-node" + * const sf = new Series(["Good", "odd", "grade"]) + * const newSf = sf.str.substr(d) + * ``` + */ + substr(startIndex: number, num: number, options?: { inplace?: boolean }): Series + substr(startIndex = 0, num = 1, options?: { inplace?: boolean }): Series | void { + const { inplace } = { inplace: false, ...options } + const newArr: Array = []; + this.values.map((val) => { + if (utils.isEmpty(val)) { + newArr.push(NaN); + } else { + newArr.push(`${String(val).substr(startIndex, num)}`); + } + }); + if (inplace) { + this.series.$setValues(newArr as ArrayType1D) + this.series.print() + } else { + const sf = this.series.copy() + sf.$setValues(newArr as ArrayType1D) + return sf; + } + } + + /** + * Extracts the characters from a string, between two specified indices + * @param startIndex index position of start character + * @param endIndex index position of last character + * @param options The following optional parameters are supported: + * - `inplace` Boolean, indicating whether to perform the operation inplace or not. Defaults to `false` + * @example + * ``` + * import { Series } from "danfojs-node" + * const sf = new Series(["Good", "odd", "grade"]) + * const newSf = sf.str.substring(d) + * ``` + */ + substring(startIndex: number, endIndex: number, options?: { inplace?: boolean }): Series + substring(startIndex = 0, endIndex = 1, options?: { inplace?: boolean }): Series | void { + const { inplace } = { inplace: false, ...options } + const newArr: Array = []; + this.values.map((val) => { + if (utils.isEmpty(val)) { + newArr.push(NaN); + } else { + newArr.push(`${String(val).substring(startIndex, endIndex)}`); + } + }); + if (inplace) { + this.series.$setValues(newArr as ArrayType1D) + this.series.print() + } else { + const sf = this.series.copy() + sf.$setValues(newArr as ArrayType1D) + return sf; + } + } + + /** + * Removes whitespace from both ends of a string + * @param options The following optional parameters are supported: + * - `inplace` Boolean, indicating whether to perform the operation inplace or not. Defaults to `false` + * @example + * ``` + * import { Series } from "danfojs-node" + * const sf = new Series([" Good", "odd ", " grade "]) + * const newSf = sf.str.trim(d) + * ["Good", "odd", "grade"] + * ``` + */ + trim(options?: { inplace?: boolean }): Series + trim(options?: { inplace?: boolean }): Series | void { + const { inplace } = { inplace: false, ...options } + const newArr: Array = []; + this.values.map((val) => { + if (utils.isEmpty(val)) { + newArr.push(NaN); + } else { + newArr.push(`${val}`.trim()); + } + }); + if (inplace) { + this.series.$setValues(newArr as ArrayType1D) + this.series.print() + } else { + const sf = this.series.copy() + sf.$setValues(newArr as ArrayType1D) + return sf; + } + } + + /** + * Joins strings to specified value + * @param valToJoin string value to join to the values + * @param joinChar Character to Join with + * @param options The following optional parameters are supported: + * - `inplace` Boolean, indicating whether to perform the operation inplace or not. Defaults to `false` + * @example + * ``` + * import { Series } from "danfojs-node" + * const sf = new Series(["Good", "odd", "grade"]) + * const newSf = sf.str.join("new", "_") + * // ["Good_new", "odd_new", "grade_new"] + * ``` + */ + join(valToJoin: string, joinChar: string, options?: { inplace?: boolean }): Series + join(valToJoin = "", joinChar = " ", options?: { inplace?: boolean }): Series | void { + const { inplace } = { inplace: false, ...options } + const newArr: Array = []; + this.values.map((val) => { + if (utils.isEmpty(val)) { + newArr.push(NaN); + } else { + let leftChar = val; + let rightChar = valToJoin; + let new_char = `${leftChar}${joinChar}${rightChar}`; + newArr.push(new_char); + } + }); + if (inplace) { + this.series.$setValues(newArr as ArrayType1D) + this.series.print() + } else { + const sf = this.series.copy() + sf.$setValues(newArr as ArrayType1D) + return sf; + } + } + + /** + * Counts the number of characters in string + * @param options The following optional parameters are supported: + * - `inplace` Boolean, indicating whether to perform the operation inplace or not. Defaults to `false` + * @example + * ``` + * import { Series } from "danfojs-node" + * const sf = new Series(["Good", "odd", "grade"]) + * const newSf = sf.str.len(d) + * // [4,3,5] + * ``` + */ + len(options?: { inplace?: boolean }): Series + len(options?: { inplace?: boolean }): Series | void { + const { inplace } = { inplace: false, ...options } + const newArr: Array = []; + this.values.map((val) => { + if (utils.isEmpty(val)) { + newArr.push(NaN); + } else { + newArr.push(`${val}`.length); + } + }); + if (inplace) { + this.series.$setValues(newArr as ArrayType1D) + this.series.print() + } else { + const sf = this.series.copy() + sf.$setValues(newArr as ArrayType1D) + return sf; + } + } + +} diff --git a/src/danfojs-base/index.ts b/src/danfojs-base/index.ts new file mode 100644 index 00000000..8e3d62e5 --- /dev/null +++ b/src/danfojs-base/index.ts @@ -0,0 +1,53 @@ +/** +* @license +* Copyright 2022 JsData. All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ========================================================================== +*/ +import NDframe from "./core/generic"; +import Config from './shared/config'; +import Utils from './shared/utils'; +import Series from "./core/series"; +import DataFrame from "./core/frame"; +import Str from "./core/strings" +import Dt, { toDateTime } from "./core/datetime" +import MinMaxScaler from "./transformers/scalers/min.max.scaler"; +import StandardScaler from "./transformers/scalers/standard.scaler"; +import LabelEncoder from "./transformers/encoders/label.encoder"; +import OneHotEncoder from "./transformers/encoders/one.hot.encoder"; +import getDummies from "./transformers/encoders/dummy.encoder" +import concat from "./transformers/concat" +import merge from "./transformers/merge" +import dateRange from "./core/daterange" +import tensorflow from "./shared/tensorflowlib" + +const __version = "1.0.0" + +export { + NDframe, + Config, + Utils, + Str, + Dt, + toDateTime, + Series, + DataFrame, + MinMaxScaler, + StandardScaler, + LabelEncoder, + OneHotEncoder, + getDummies, + concat, + merge, + dateRange, + tensorflow, + __version, +} diff --git a/src/danfojs-base/io/browser/index.ts b/src/danfojs-base/io/browser/index.ts new file mode 100644 index 00000000..b3df0460 --- /dev/null +++ b/src/danfojs-base/io/browser/index.ts @@ -0,0 +1,34 @@ +/** +* @license +* Copyright 2022 JsData. All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ========================================================================== +*/ +import { + $readCSV, + $streamCSV, + $toCSV, +} from "./io.csv" +import { + $readJSON, + $toJSON, +} from "./io.json" +import { $readExcel, $toExcel } from "./io.excel" + +export { + $readCSV as readCSVBrowser, + $streamCSV as streamCSVBrowser, + $toCSV as toCSVBrowser, + $readJSON as readJSONBrowser, + $toJSON as toJSONBrowser, + $readExcel as readExcelBrowser, + $toExcel as toExcelBrowser, +} \ No newline at end of file diff --git a/src/danfojs-base/io/browser/io.csv.ts b/src/danfojs-base/io/browser/io.csv.ts new file mode 100644 index 00000000..e05d42da --- /dev/null +++ b/src/danfojs-base/io/browser/io.csv.ts @@ -0,0 +1,174 @@ +/** +* @license +* Copyright 2022 JsData. All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ========================================================================== +*/ +import { CsvInputOptionsBrowser, CsvOutputOptionsBrowser, ArrayType2D } from "../../shared/types" +import { DataFrame, NDframe, Series } from '../../' +import Papa from 'papaparse' + + +/** + * Reads a CSV file from local or remote location into a DataFrame. + * @param filePath URL or local file path to CSV file. `readCSV` uses PapaParse to parse the CSV file, + * hence all PapaParse options are supported. + * @param options Configuration object. Supports all Papaparse parse config options. + * @returns DataFrame containing the parsed CSV file. + * @example + * ``` + * import { readCSV } from "danfojs-node" + * const df = await readCSV("https://raw.githubusercontent.com/test.csv") + * ``` + * @example + * ``` + * import { readCSV } from "danfojs-node" + * const df = await readCSV("https://raw.githubusercontent.com/test.csv", { + * delimiter: ",", + * headers: { + * Accept: "text/csv", + * Authorization: "Bearer YWRtaW46YWRtaW4=" + * } + * }) + * ``` + * @example + * ``` + * import { readCSV } from "danfojs-node" + * const df = await readCSV("./data/sample.csv") + * ``` + */ +const $readCSV = async (file: any, options?: CsvInputOptionsBrowser): Promise => { + const frameConfig = options?.frameConfig || {} + + return new Promise(resolve => { + Papa.parse(file, { + header: true, + ...options, + download: true, + complete: results => { + const df = new DataFrame(results.data, frameConfig); + resolve(df); + } + }); + }); +}; + +/** + * Streams a CSV file from local or remote location in chunks. Intermediate chunks is passed as a DataFrame to the callback function. + * @param filePath URL or local file path to CSV file. `readCSV` uses PapaParse to parse the CSV file, + * hence all PapaParse options are supported. + * @param options Configuration object. Supports all Papaparse parse config options. + * @param callback Callback function to be called once the specifed rows are parsed into DataFrame. + * @example + * ``` + * import { streamCSV } from "danfojs-node" + * streamCSV("https://raw.githubusercontent.com/test.csv", (dfRow) => { + * const dfModified = dfRow["Names"].map((name) => name.split(",")[0]) + * return dfModified + * }) + * ``` + */ +const $streamCSV = async (file: string, callback: (df: DataFrame) => void, options: CsvInputOptionsBrowser,): Promise => { + const frameConfig = options?.frameConfig || {} + + return new Promise(resolve => { + let count = -1 + Papa.parse(file, { + ...options, + header: true, + download: true, + step: results => { + const df = new DataFrame([results.data], { ...frameConfig, index: [count++] }); + callback(df); + }, + complete: () => resolve(null) + }); + }); +}; + + +/** + * Converts a DataFrame or Series to CSV. + * @param df DataFrame or Series to be converted to CSV. + * @param options Configuration object. Supports the following options: + * - `filePath`: Local file path to write the CSV file. If not specified, the CSV will be returned as a string. + * - `header`: Boolean indicating whether to include a header row in the CSV file. + * - `sep`: Character to be used as a separator in the CSV file. + * @example + * ``` + * import { toCSV } from "danfojs-node" + * const df = new DataFrame([[1, 2, 3], [4, 5, 6]]) + * const csv = toCSV(df) + * ``` + * @example + * ``` + * import { toCSV } from "danfojs-node" + * const df = new DataFrame([[1, 2, 3], [4, 5, 6]]) + * toCSV(df, { + * filePath: "./data/sample.csv", + * header: true, + * sep: "+" + * }) + * ``` + */ +const $toCSV = (df: NDframe | DataFrame | Series, options?: CsvOutputOptionsBrowser): string | void => { + let { fileName, download, sep, header } = { fileName: "output.csv", sep: ",", header: true, download: false, ...options } + + if (df.$isSeries) { + const csv = df.values.join(sep); + + if (download) { + if (!(fileName.endsWith(".csv"))) { + fileName = fileName + ".csv" + } + $downloadFileInBrowser(csv, fileName); + } else { + return csv; + } + } else { + const rows = df.values as ArrayType2D + let csvStr = header === true ? `${df.columns.join(sep)}\n` : "" + + for (let i = 0; i < rows.length; i++) { + const row = `${rows[i].join(sep)}\n`; + csvStr += row; + } + + if (download) { + if (!(fileName.endsWith(".csv"))) { + fileName = fileName + ".csv" + } + $downloadFileInBrowser(csvStr, fileName); + } else { + return csvStr; + } + } +}; + +/** + * Internal function to download a CSV file in the browser. + * @param content A string of CSV file contents + * @param fileName The name of the file to be downloaded + */ +const $downloadFileInBrowser = (content: any, fileName: string) => { + var hiddenElement = document.createElement('a'); + hiddenElement.href = 'data:text/csv;charset=utf-8,' + encodeURI(content); + hiddenElement.target = '_blank'; + hiddenElement.download = fileName; + hiddenElement.click(); +} + + +export { + $readCSV, + $streamCSV, + $toCSV, +} \ No newline at end of file diff --git a/src/danfojs-base/io/browser/io.excel.ts b/src/danfojs-base/io/browser/io.excel.ts new file mode 100644 index 00000000..574171c4 --- /dev/null +++ b/src/danfojs-base/io/browser/io.excel.ts @@ -0,0 +1,126 @@ +/** +* @license +* Copyright 2022 JsData. All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ========================================================================== +*/ +import { + ArrayType1D, + ArrayType2D, + ExcelOutputOptionsBrowser, + ExcelInputOptionsBrowser +} from "../../shared/types" +import { DataFrame, NDframe, Series } from '../../' +import XLSX from 'xlsx'; + +/** + * Reads a JSON file from local or remote location into a DataFrame. + * @param file URL or local file path to JSON file. + * @param options Configuration object. Supported options: + * - `method`: The HTTP method to use. Defaults to `'GET'`. + * - `headers`: Additional headers to send with the request. Supports the `node-fetch` [HeadersInit] + * @example + * ``` + * import { readExcel } from "danfojs-node" + * const df = await readExcel("https://raw.githubusercontent.com/test.xlsx") + * ``` + * @example + * ``` + * import { readExcel } from "danfojs-node" + * const df = await readExcel("https://raw.githubusercontent.com/test.xlsx", { + * method: "GET", + * headers: { + * Accept: "text/csv", + * Authorization: "Bearer YWRtaW46YWRtaW4=" + * } + * }) + * ``` + */ +const $readExcel = async (file: any, options?: ExcelInputOptionsBrowser) => { + const { sheet, method, headers, frameConfig } = { sheet: 0, method: "GET", headers: {}, frameConfig: {}, ...options } + + if (typeof file === "string" && file.startsWith("http")) { + + return new Promise(resolve => { + fetch(file, { method, headers }).then(response => { + if (response.status !== 200) { + throw new Error(`Failed to load ${file}`) + } + response.arrayBuffer().then(arrBuf => { + const arrBufInt8 = new Uint8Array(arrBuf); + const workbook = XLSX.read(arrBufInt8, { type: "array" }) + const worksheet = workbook.Sheets[workbook.SheetNames[sheet]]; + const data = XLSX.utils.sheet_to_json(worksheet); + const df = new DataFrame(data, frameConfig); + resolve(df); + }); + }).catch((err) => { + throw new Error(err) + }) + }) + + } else if (file instanceof File) { + const arrBuf = await file.arrayBuffer() + const arrBufInt8 = new Uint8Array(arrBuf); + const workbook = XLSX.read(arrBufInt8, { type: "array" }) + const worksheet = workbook.Sheets[workbook.SheetNames[sheet]]; + const data = XLSX.utils.sheet_to_json(worksheet); + const df = new DataFrame(data, frameConfig); + return df; + } else { + throw new Error("ParamError: File not supported. file must be a url or an input File object") + } +}; + +/** + * Converts a DataFrame or Series to Excel Sheet. + * @param df DataFrame or Series to be converted to JSON. + * @param options Configuration object. Supported options: + * - `sheetName`: The sheet name to be written to. Defaults to `'Sheet1'`. + * - `file`: The file to be written to. Defaults to `'./output.xlsx'`. + * @example + * ``` + * import { toExcel } from "danfojs-node" + * const df = new DataFrame([[1, 2, 3], [4, 5, 6]]) + * toExcel(df, { + * file: "./data/sample.xlsx", + * sheetName: "MySheet", + * }) + * ``` + */ +const $toExcel = (df: NDframe | DataFrame | Series, options?: ExcelOutputOptionsBrowser) => { + let { fileName, sheetName } = { fileName: "./output.xlsx", sheetName: "Sheet1", ...options } + + if (!(fileName.endsWith(".xlsx"))) { + fileName = fileName + ".xlsx" + } + let data; + + if (df.$isSeries) { + const row = df.values as ArrayType1D + const col = df.columns + data = [col, ...(row.map(x => [x]))] + } else { + const row = df.values as ArrayType2D + const cols = df.columns + data = [cols, ...row] + } + + const worksheet = XLSX.utils.aoa_to_sheet(data); + const wb = XLSX.utils.book_new(); + XLSX.utils.book_append_sheet(wb, worksheet, sheetName); + XLSX.writeFile(wb, `${fileName}`) +}; + +export { + $readExcel, + $toExcel +} \ No newline at end of file diff --git a/src/danfojs-base/io/browser/io.json.ts b/src/danfojs-base/io/browser/io.json.ts new file mode 100644 index 00000000..131140c0 --- /dev/null +++ b/src/danfojs-base/io/browser/io.json.ts @@ -0,0 +1,187 @@ +/** +* @license +* Copyright 2022 JsData. All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ========================================================================== +*/ +import { + ArrayType1D, + ArrayType2D, + JsonInputOptionsBrowser, + JsonOutputOptionsBrowser +} from '../../shared/types' +import { DataFrame, NDframe, Series } from '../../' + +/** + * Reads a JSON file from local or remote location into a DataFrame. + * @param fileName URL or local file path to JSON file. + * @param options Configuration object. Supported options: + * - `method`: The HTTP method to use. Defaults to `'GET'`. + * - `headers`: Additional headers to send with the request. Supports the `node-fetch` [HeadersInit] + * @example + * ``` + * import { readJSON } from "danfojs-node" + * const df = await readJSON("https://raw.githubusercontent.com/test.json") + * ``` + * @example + * ``` + * import { readJSON } from "danfojs-node" + * const df = await readJSON("https://raw.githubusercontent.com/test.json", { + * headers: { + * Accept: "text/json", + * Authorization: "Bearer YWRtaW46YWRtaW4=" + * } + * }) + * ``` + * @example + * ``` + * import { readJSON } from "danfojs-node" + * const df = await readJSON("./data/sample.json") + * ``` + */ +const $readJSON = async (file: any, options?: JsonInputOptionsBrowser) => { + const { method, headers, frameConfig } = { method: "GET", headers: {}, frameConfig: {}, ...options } + + if (typeof file === "string" && file.startsWith("http")) { + + return new Promise(resolve => { + fetch(file, { method, headers }).then(response => { + if (response.status !== 200) { + throw new Error(`Failed to load ${file}`) + } + response.json().then(json => { + resolve(new DataFrame(json, frameConfig)); + }); + }).catch((err) => { + throw new Error(err) + }) + }) + + } else if (file instanceof File) { + return new Promise(resolve => { + const reader = new FileReader(); + reader.readAsText(file); + reader.onload = (event) => { + const jsonObj = JSON.parse(event?.target?.result as string); + resolve(new DataFrame(jsonObj, frameConfig)); + } + }) + } else { + throw new Error("ParamError: File not supported. file must be a url or an input File object") + } +}; + + +/** + * Converts a DataFrame or Series to JSON. + * @param df DataFrame or Series to be converted to JSON. + * @param options Configuration object. Supported options: + * - `fileName`: The file path to write the JSON to. If not specified, the JSON object is returned. + * - `format`: The format of the JSON. Defaults to `'column'`. E.g for using `column` format: + * ``` + * [{ "a": 1, "b": 2, "c": 3, "d": 4 }, + * { "a": 5, "b": 6, "c": 7, "d": 8 }] + * ``` + * and `row` format: + * ``` + * { "a": [1, 5, 9], + * "b": [2, 6, 10] + * } + * ``` + * @example + * ``` + * import { toJSON } from "danfojs-node" + * const df = new DataFrame([[1, 2, 3], [4, 5, 6]]) + * const json = toJSON(df) + * ``` + * @example + * ``` + * import { toJSON } from "danfojs-node" + * const df = new DataFrame([[1, 2, 3], [4, 5, 6]]) + * toJSON(df, { + * fileName: "./data/sample.json", + * format: "row" + * }) + * ``` + */ +const $toJSON = (df: NDframe | DataFrame | Series, options?: JsonOutputOptionsBrowser): object | void => { + let { fileName, format, download } = { fileName: "output.json", download: false, format: "column", ...options } + + if (df.$isSeries) { + const obj: { [key: string]: ArrayType1D } = {}; + obj[df.columns[0]] = df.values as ArrayType1D; + + if (download) { + if (!fileName.endsWith(".json")) { + fileName = fileName + ".json" + } + $downloadFileInBrowser(obj, fileName) + } else { + return obj + } + + } else { + if (format === "row") { + const obj: { [key: string]: ArrayType1D } = {}; + for (let i = 0; i < df.columns.length; i++) { + obj[df.columns[i]] = (df as DataFrame).column(df.columns[i]).values as ArrayType1D; + } + if (download) { + if (!(fileName.endsWith(".json"))) { + fileName = fileName + ".json" + } + + $downloadFileInBrowser(obj, fileName) + } else { + return obj + } + } else { + const values = df.values as ArrayType2D + const header = df.columns + const jsonArr: any = []; + + values.forEach((val) => { + const obj: any = {}; + header.forEach((h, i) => { + obj[h] = val[i] + }); + jsonArr.push(obj); + }); + if (download) { + if (!fileName.endsWith(".json")) { + fileName = fileName + ".json" + } + $downloadFileInBrowser(jsonArr, fileName) + } else { + return jsonArr + } + } + } +}; + +/** + * Internal function to download a JSON file in the browser. + * @param content A string of JSON file contents + * @param fileName The name of the file to be downloaded + */ +const $downloadFileInBrowser = (content: any, fileName: string) => { + var hiddenElement = document.createElement('a'); + hiddenElement.href = 'data:text/json;charset=utf-8,' + encodeURI(JSON.stringify(content)); + hiddenElement.target = '_blank'; + hiddenElement.download = fileName; + hiddenElement.click(); +} + + +export { + $readJSON, + $toJSON +} \ No newline at end of file diff --git a/src/danfojs-base/io/node/index.ts b/src/danfojs-base/io/node/index.ts new file mode 100644 index 00000000..3f5eb6ce --- /dev/null +++ b/src/danfojs-base/io/node/index.ts @@ -0,0 +1,40 @@ +/** +* @license +* Copyright 2022 JsData. All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ========================================================================== +*/ +import { + $readCSV, + $streamCSV, + $toCSV, + $openCsvInputStream, + $writeCsvOutputStream, +} from "./io.csv" +import { + $readJSON, + $toJSON, + $streamJSON +} from "./io.json" +import { $readExcel, $toExcel } from "./io.excel" + +export { + $readCSV as readCSVNode, + $streamCSV as streamCSVNode, + $toCSV as toCSVNode, + $openCsvInputStream as openCsvInputStreamNode, + $writeCsvOutputStream as writeCsvOutputStreamNode, + $readJSON as readJSONNode, + $toJSON as toJSONNode, + $streamJSON as streamJSONNode, + $readExcel as readExcelNode, + $toExcel as toExcelNode, +} \ No newline at end of file diff --git a/src/danfojs-base/io/node/io.csv.ts b/src/danfojs-base/io/node/io.csv.ts new file mode 100644 index 00000000..1de24619 --- /dev/null +++ b/src/danfojs-base/io/node/io.csv.ts @@ -0,0 +1,356 @@ +/** +* @license +* Copyright 2022 JsData. All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ========================================================================== +*/ +import { CsvInputOptionsNode, CsvOutputOptionsNode, ArrayType2D } from "../../shared/types" +import { DataFrame, NDframe, Series } from '../../' +import request from "request" +import Papa from 'papaparse' +import stream from "stream" +import fs from 'fs' + +/** + * Reads a CSV file from local or remote location into a DataFrame. + * @param filePath URL or local file path to CSV file. `readCSV` uses PapaParse to parse the CSV file, + * hence all PapaParse options are supported. + * @param options Configuration object. Supports all Papaparse parse config options. + * @returns DataFrame containing the parsed CSV file. + * @example + * ``` + * import { readCSV } from "danfojs-node" + * const df = await readCSV("https://raw.githubusercontent.com/test.csv") + * ``` + * @example + * ``` + * import { readCSV } from "danfojs-node" + * const df = await readCSV("https://raw.githubusercontent.com/test.csv", { + * delimiter: ",", + * headers: { + * Accept: "text/csv", + * Authorization: "Bearer YWRtaW46YWRtaW4=" + * } + * }) + * ``` + * @example + * ``` + * import { readCSV } from "danfojs-node" + * const df = await readCSV("./data/sample.csv") + * ``` + */ +const $readCSV = async (filePath: string, options?: CsvInputOptionsNode): Promise => { + const frameConfig = options?.frameConfig || {} + + if (filePath.startsWith("http") || filePath.startsWith("https")) { + return new Promise(resolve => { + const optionsWithDefaults = { + header: true, + ...options, + } + + const dataStream = request.get(filePath); + const parseStream: any = Papa.parse(Papa.NODE_STREAM_INPUT, optionsWithDefaults); + dataStream.pipe(parseStream); + + const data: any = []; + parseStream.on("data", (chunk: any) => { + data.push(chunk); + }); + + parseStream.on("finish", () => { + resolve(new DataFrame(data, frameConfig)); + }); + }); + + } else { + return new Promise(resolve => { + const fileStream = fs.createReadStream(filePath) + Papa.parse(fileStream, { + header: true, + ...options, + complete: results => { + const df = new DataFrame(results.data, frameConfig); + resolve(df); + } + }); + }); + } +}; + +/** + * Streams a CSV file from local or remote location in chunks. Intermediate chunks is passed as a DataFrame to the callback function. + * @param filePath URL or local file path to CSV file. `readCSV` uses PapaParse to parse the CSV file, + * hence all PapaParse options are supported. + * @param callback Callback function to be called once the specifed rows are parsed into DataFrame. + * @param options Configuration object. Supports all Papaparse parse config options. + * @example + * ``` + * import { streamCSV } from "danfojs-node" + * streamCSV("https://raw.githubusercontent.com/test.csv", (dfRow) => { + * const dfModified = dfRow["Names"].map((name) => name.split(",")[0]) + * return dfModified + * }) + * ``` + */ +const $streamCSV = async (filePath: string, callback: (df: DataFrame) => void, options?: CsvInputOptionsNode): Promise => { + const frameConfig = options?.frameConfig || {} + + if (filePath.startsWith("http") || filePath.startsWith("https")) { + const optionsWithDefaults = { + header: true, + ...options, + } + return new Promise(resolve => { + let count = -1 + const dataStream = request.get(filePath); + const parseStream: any = Papa.parse(Papa.NODE_STREAM_INPUT, optionsWithDefaults); + dataStream.pipe(parseStream); + + parseStream.on("data", (chunk: any) => { + const df = new DataFrame([chunk], { ...frameConfig, index: [count++], }); + callback(df); + }); + + parseStream.on("finish", () => { + resolve(null); + }); + + }); + } else { + const fileStream = fs.createReadStream(filePath) + + return new Promise(resolve => { + let count = -1 + Papa.parse(fileStream, { + header: true, + ...options, + step: results => { + const df = new DataFrame([results.data], { ...frameConfig, index: [count++] }); + callback(df); + }, + complete: () => resolve(null) + }); + }); + } +}; + + +/** + * Converts a DataFrame or Series to CSV. + * @param df DataFrame or Series to be converted to CSV. + * @param options Configuration object. Supports the following options: + * - `filePath`: Local file path to write the CSV file. If not specified, the CSV will be returned as a string. + * - `header`: Boolean indicating whether to include a header row in the CSV file. + * - `sep`: Character to be used as a separator in the CSV file. + * @example + * ``` + * import { toCSV } from "danfojs-node" + * const df = new DataFrame([[1, 2, 3], [4, 5, 6]]) + * const csv = toCSV(df) + * ``` + * @example + * ``` + * import { toCSV } from "danfojs-node" + * const df = new DataFrame([[1, 2, 3], [4, 5, 6]]) + * toCSV(df, { + * filePath: "./data/sample.csv", + * header: true, + * sep: "+" + * }) + * ``` + */ +const $toCSV = (df: NDframe | DataFrame | Series, options?: CsvOutputOptionsNode): string | void => { + let { filePath, sep, header } = { sep: ",", header: true, filePath: undefined, ...options } + + if (df.$isSeries) { + const csv = df.values.join(sep); + + if (filePath !== undefined) { + if (!(filePath.endsWith(".csv"))) { + filePath = filePath + ".csv" + } + fs.writeFileSync(filePath, csv, "utf8") + } else { + return csv; + } + } else { + const rows = df.values as ArrayType2D + let csvStr = header === true ? `${df.columns.join(sep)}\n` : "" + + for (let i = 0; i < rows.length; i++) { + const row = `${rows[i].join(sep)}\n`; + csvStr += row; + } + + if (filePath !== undefined) { + if (!(filePath.endsWith(".csv"))) { + filePath = filePath + ".csv" + } + fs.writeFileSync(filePath, csvStr, "utf8") + } else { + return csvStr; + } + } +}; + + +/** + * Opens a CSV file from local or remote location as a Stream. Intermediate row is returned as a DataFrame object. + * @param filePath URL or local file path to CSV file. + * @param options Configuration object. Supports all Papaparse config options. + * @example + * ``` + * import { openCsvInputStream } from "danfojs-node" + * const csvStream = openCsvInputStream("./data/sample.csv") + * ``` + */ +const $openCsvInputStream = (filePath: string, options: CsvInputOptionsNode) => { + const { header } = { header: true, ...options } + let isFirstChunk = true + let ndFrameColumnNames: any = [] + + const csvInputStream = new stream.Readable({ objectMode: true }); + csvInputStream._read = () => { }; + + if (filePath.startsWith("http") || filePath.startsWith("https")) { + const dataStream = request.get(filePath); + const parseStream: any = Papa.parse(Papa.NODE_STREAM_INPUT, { header, ...options }); + dataStream.pipe(parseStream); + let count = -1 + + parseStream.on("data", (chunk: any) => { + if (isFirstChunk) { + if (header === true) { + ndFrameColumnNames = Object.keys(chunk) + } else { + ndFrameColumnNames = chunk + } + isFirstChunk = false + return + } + + const df = new DataFrame([Object.values(chunk)], { + columns: ndFrameColumnNames, + index: [count++] + }) + csvInputStream.push(df); + }); + + parseStream.on("finish", () => { + csvInputStream.push(null); + return (null); + }); + + return csvInputStream; + } else { + const fileStream = fs.createReadStream(filePath) + let count = -1 + Papa.parse(fileStream, { + ...{ header, ...options }, + step: results => { + if (isFirstChunk) { + if (header === true) { + ndFrameColumnNames = results.meta.fields || [] + } else { + ndFrameColumnNames = results.data + } + isFirstChunk = false + return + } + + const df = new DataFrame([results.data], { + columns: ndFrameColumnNames, + index: [count++] + }) + + csvInputStream.push(df); + }, + complete: (result: any) => { + csvInputStream.push(null); + return null + }, + error: (err) => { + csvInputStream.emit("error", err); + } + }); + + return csvInputStream; + } +}; + + +/** + * Writes a file stream to local storage. Stream objects must be a Series or DataFrame. + * @param filePath URL or local file path to write to. + * @param options Configuration object. Supports all `toCSV` options. + * @example + * ``` + * import { openCsvInputStream, + * writeCsvOutputStream, + * convertFunctionTotransformer } from "danfojs-node" + * + * const csvStream = openCsvInputStream("./data/sample.csv") + * const outStream = writeCsvOutputStream("./data/sampleOut.csv") + * + * const transformer = (dfRow) => { + * const dfModified = dfRow["Names"].map((name) => name.split(",")[0]) + * return dfModified + * } + * csvStream.pipe(convertFunctionTotransformer(transformer)).pipe(outStream) + * ``` + */ +const $writeCsvOutputStream = (filePath: string, options: CsvInputOptionsNode) => { + let isFirstRow = true + const fileOutputStream = fs.createWriteStream(filePath) + const csvOutputStream = new stream.Writable({ objectMode: true }) + + csvOutputStream._write = (chunk: DataFrame | Series, encoding, callback) => { + + if (chunk instanceof DataFrame) { + + if (isFirstRow) { + isFirstRow = false + fileOutputStream.write($toCSV(chunk, { header: true, ...options })); + callback(); + } else { + fileOutputStream.write($toCSV(chunk, { header: false, ...options })); + callback(); + } + + } else if (chunk instanceof Series) { + + fileOutputStream.write($toCSV(chunk)); + callback(); + + } else { + csvOutputStream.emit("error", new Error("ValueError: Intermediate chunk must be either a Series or DataFrame")) + } + + } + + csvOutputStream.on("finish", () => { + fileOutputStream.end() + }) + + return csvOutputStream +} + + + + +export { + $readCSV, + $streamCSV, + $toCSV, + $writeCsvOutputStream, + $openCsvInputStream, +} \ No newline at end of file diff --git a/src/danfojs-base/io/node/io.excel.ts b/src/danfojs-base/io/node/io.excel.ts new file mode 100644 index 00000000..d4811949 --- /dev/null +++ b/src/danfojs-base/io/node/io.excel.ts @@ -0,0 +1,125 @@ +/** +* @license +* Copyright 2022 JsData. All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ========================================================================== +*/ +import { ArrayType1D, ArrayType2D, ExcelInputOptionsNode, ExcelOutputOptionsNode } from "../../shared/types" +import { DataFrame, NDframe, Series } from '../../' +import fetch from "node-fetch"; +import XLSX from 'xlsx'; + +/** + * Reads a JSON file from local or remote location into a DataFrame. + * @param filePath URL or local file path to JSON file. + * @param options Configuration object. Supported options: + * - `method`: The HTTP method to use. Defaults to `'GET'`. + * - `headers`: Additional headers to send with the request. Supports the `node-fetch` [HeadersInit] + * @example + * ``` + * import { readExcel } from "danfojs-node" + * const df = await readExcel("https://raw.githubusercontent.com/test.xlsx") + * ``` + * @example + * ``` + * import { readExcel } from "danfojs-node" + * const df = await readExcel("https://raw.githubusercontent.com/test.xlsx", { + * method: "GET", + * headers: { + * Accept: "text/csv", + * Authorization: "Bearer YWRtaW46YWRtaW4=" + * } + * }) + * ``` + * @example + * ``` + * import { readExcel } from "danfojs-node" + * const df = await readExcel("./data/sample.xlsx") + * ``` + */ +const $readExcel = async (filePath: string, options: ExcelInputOptionsNode = {}) => { + const { sheet, method, headers, frameConfig } = { sheet: 0, method: "GET", headers: {}, frameConfig: {}, ...options } + + if (filePath.startsWith("http") || filePath.startsWith("https")) { + + return new Promise(resolve => { + fetch(filePath, { method, headers }).then(response => { + if (response.status !== 200) { + throw new Error(`Failed to load ${filePath}`) + } + response.arrayBuffer().then(arrBuf => { + const arrBufInt8 = new Uint8Array(arrBuf); + const workbook = XLSX.read(arrBufInt8, { type: "array" }) + const worksheet = workbook.Sheets[workbook.SheetNames[sheet]]; + const data = XLSX.utils.sheet_to_json(worksheet); + const df = new DataFrame(data, frameConfig); + resolve(df); + }); + }).catch((err) => { + throw new Error(err) + }) + }) + + } else { + return new Promise(resolve => { + const workbook = XLSX.readFile(filePath); + const worksheet = workbook.Sheets[workbook.SheetNames[sheet]]; + const data = XLSX.utils.sheet_to_json(worksheet); + const df = new DataFrame(data, frameConfig); + resolve(df); + }); + } +}; + +/** + * Converts a DataFrame or Series to Excel Sheet. + * @param df DataFrame or Series to be converted to JSON. + * @param options Configuration object. Supported options: + * - `sheetName`: The sheet name to be written to. Defaults to `'Sheet1'`. + * - `filePath`: The filePath to be written to. Defaults to `'./output.xlsx'`. + * @example + * ``` + * import { toExcel } from "danfojs-node" + * const df = new DataFrame([[1, 2, 3], [4, 5, 6]]) + * toExcel(df, { + * filePath: "./data/sample.xlsx", + * sheetName: "MySheet", + * }) + * ``` + */ +const $toExcel = (df: NDframe | DataFrame | Series, options?: ExcelOutputOptionsNode) => { + let { filePath, sheetName } = { filePath: "./output.xlsx", sheetName: "Sheet1", ...options } + + if (!(filePath.endsWith(".xlsx"))) { + filePath = filePath + ".xlsx" + } + let data; + + if (df.$isSeries) { + const row = df.values as ArrayType1D + const col = df.columns + data = [col, ...(row.map(x => [x]))] + } else { + const row = df.values as ArrayType2D + const cols = df.columns + data = [cols, ...row] + } + + const worksheet = XLSX.utils.aoa_to_sheet(data); + const wb = XLSX.utils.book_new(); + XLSX.utils.book_append_sheet(wb, worksheet, sheetName); + XLSX.writeFile(wb, `${filePath}`) +}; + +export { + $readExcel, + $toExcel +} \ No newline at end of file diff --git a/src/danfojs-base/io/node/io.json.ts b/src/danfojs-base/io/node/io.json.ts new file mode 100644 index 00000000..690974f2 --- /dev/null +++ b/src/danfojs-base/io/node/io.json.ts @@ -0,0 +1,201 @@ +import { ArrayType1D, ArrayType2D, JsonInputOptionsNode, JsonOutputOptionsNode } from '../../shared/types'; +import { streamArray } from "stream-json/streamers/StreamArray" +import { DataFrame, NDframe, Series } from '../../' +import { parser } from "stream-json" +import fetch from "node-fetch"; +import request from "request" +import fs from 'fs' + +/** + * Reads a JSON file from local or remote location into a DataFrame. + * @param filePath URL or local file path to JSON file. + * @param options Configuration object. Supported options: + * - `method`: The HTTP method to use. Defaults to `'GET'`. + * - `headers`: Additional headers to send with the request. Supports the `node-fetch` [HeadersInit] + * @example + * ``` + * import { readJSON } from "danfojs-node" + * const df = await readJSON("https://raw.githubusercontent.com/test.json") + * ``` + * @example + * ``` + * import { readJSON } from "danfojs-node" + * const df = await readJSON("https://raw.githubusercontent.com/test.json", { + * headers: { + * Accept: "text/json", + * Authorization: "Bearer YWRtaW46YWRtaW4=" + * } + * }) + * ``` + * @example + * ``` + * import { readJSON } from "danfojs-node" + * const df = await readJSON("./data/sample.json") + * ``` + */ +const $readJSON = async (filePath: string, options: JsonInputOptionsNode = {}) => { + const { method, headers, frameConfig } = { method: "GET", headers: {}, frameConfig: {}, ...options } + + if (filePath.startsWith("http") || filePath.startsWith("https")) { + + return new Promise(resolve => { + fetch(filePath, { method, headers }).then(response => { + if (response.status !== 200) { + throw new Error(`Failed to load ${filePath}`) + } + response.json().then(json => { + resolve(new DataFrame(json, frameConfig)); + }); + }).catch((err) => { + throw new Error(err) + }) + }) + + } else { + return new Promise(resolve => { + const file = fs.readFileSync(filePath, "utf8") + const df = new DataFrame(JSON.parse(file), frameConfig); + resolve(df); + }); + } +}; + +/** + * Streams a JSON file from local or remote location in chunks. Intermediate chunks is passed as a DataFrame to the callback function. + * @param filePath URL or local file path to CSV file. + * @param callback Callback function to be called once the specifed rows are parsed into DataFrame. + * @param options Configuration object. We use the `request` library for reading remote json files, + * Hence all `request` parameters such as `method`, `headers`, are supported. + * @example + * ``` + * import { streamJSON } from "danfojs-node" + * streamJSON("https://raw.githubusercontent.com/test.json", {}, (dfRow) => { + * const dfModified = dfRow["Names"].map((name) => name.split(",")[0]) + * return dfModified + * }) + * ``` + */ +const $streamJSON = async ( + filePath: string, + callback: (df: DataFrame) => void, + options?: request.RequiredUriUrl & request.CoreOptions, +) => { + const { method, headers, frameConfig } = { method: "GET", headers: {}, frameConfig: {}, ...options } + if (filePath.startsWith("http") || filePath.startsWith("https")) { + return new Promise(resolve => { + let count = -1 + const dataStream = request({ url: filePath, method, headers }) + const pipeline = dataStream.pipe(parser()).pipe(streamArray()); + pipeline.on('data', ({ value }) => { + const df = new DataFrame([value], { ...frameConfig, index: [count++] }); + callback(df); + }); + pipeline.on('end', () => resolve(null)); + + }); + } else { + return new Promise(resolve => { + let count = -1 + const fileStream = fs.createReadStream(filePath) + const pipeline = fileStream.pipe(parser()).pipe(streamArray()); + pipeline.on('data', ({ value }) => { + const df = new DataFrame([value], { ...frameConfig, index: [count++] }); + callback(df); + }); + pipeline.on('end', () => resolve(null)); + }) + } +}; + + +/** + * Converts a DataFrame or Series to JSON. + * @param df DataFrame or Series to be converted to JSON. + * @param options Configuration object. Supported options: + * - `filePath`: The file path to write the JSON to. If not specified, the JSON object is returned. + * - `format`: The format of the JSON. Defaults to `'column'`. E.g for using `column` format: + * ``` + * [{ "a": 1, "b": 2, "c": 3, "d": 4 }, + * { "a": 5, "b": 6, "c": 7, "d": 8 }] + * ``` + * and `row` format: + * ``` + * { "a": [1, 5, 9], + * "b": [2, 6, 10] + * } + * ``` + * @example + * ``` + * import { toJSON } from "danfojs-node" + * const df = new DataFrame([[1, 2, 3], [4, 5, 6]]) + * const json = toJSON(df) + * ``` + * @example + * ``` + * import { toJSON } from "danfojs-node" + * const df = new DataFrame([[1, 2, 3], [4, 5, 6]]) + * toJSON(df, { + * filePath: "./data/sample.json", + * format: "row" + * }) + * ``` + */ +const $toJSON = (df: NDframe | DataFrame | Series, options?: JsonOutputOptionsNode): object | void => { + let { filePath, format } = { filePath: undefined, format: "column", ...options } + + if (df.$isSeries) { + const obj: { [key: string]: ArrayType1D } = {}; + obj[df.columns[0]] = df.values as ArrayType1D; + if (filePath) { + if (!filePath.endsWith(".json")) { + filePath = filePath + ".json" + } + fs.writeFileSync(filePath, JSON.stringify(obj)) + } else { + return obj + } + } else { + const values = df.values as ArrayType2D + const header = df.columns + const jsonArr: any = []; + + if (format === "row") { + const obj: { [key: string]: ArrayType1D } = {}; + for (let i = 0; i < df.columns.length; i++) { + obj[df.columns[i]] = (df as DataFrame).column(df.columns[i]).values as ArrayType1D; + } + if (filePath !== undefined) { + if (!(filePath.endsWith(".json"))) { + filePath = filePath + ".json" + } + + fs.writeFileSync(filePath, JSON.stringify(obj), "utf8") + } else { + return obj + } + } else { + values.forEach((val) => { + const obj: any = {}; + header.forEach((h, i) => { + obj[h] = val[i] + }); + jsonArr.push(obj); + }); + if (filePath) { + if (!filePath.endsWith(".json")) { + filePath = filePath + ".json" + } + fs.writeFileSync(filePath, JSON.stringify(jsonArr)) + } else { + return jsonArr + } + } + } +}; + + +export { + $readJSON, + $toJSON, + $streamJSON +} \ No newline at end of file diff --git a/src/danfojs-base/package.json b/src/danfojs-base/package.json new file mode 100644 index 00000000..6afeeece --- /dev/null +++ b/src/danfojs-base/package.json @@ -0,0 +1,62 @@ +{ + "name": "danfojs-base", + "version": "1.0.0", + "description": "Base package used in danfojs-node and danfojs-browser", + "main": "index.ts", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "@tensorflow/tfjs": "3.6.0", + "@tensorflow/tfjs-node": "3.6.1", + "mathjs": "^10.0.0", + "papaparse": "^5.3.1", + "request": "^2.88.2", + "stream-json": "^1.7.3", + "table": "6.7.1", + "xlsx": "^0.17.2", + "seedrandom": "^2.4.3", + "plotly.js-dist-min": "^2.8.0", + "node-fetch": "^2.6.1" + }, + "devDependencies": { + "@types/papaparse": "^5.3.1", + "@types/plotly.js-dist-min": "^2.3.0", + "dotenv": "^10.0.0", + "@babel/cli": "^7.10.5", + "@babel/core": "^7.10.5", + "@babel/plugin-transform-runtime": "^7.12.10", + "@babel/preset-env": "^7.10.4", + "@types/chai": "^4.2.19", + "@types/mocha": "^8.2.2", + "@types/node": "^15.12.5", + "@types/request": "^2.48.7", + "@types/stream-json": "^1.7.1", + "@types/table": "^6.3.2", + "@typescript-eslint/eslint-plugin": "^4.30.0", + "@typescript-eslint/parser": "^4.30.0", + "awesome-typescript-loader": "^5.2.1", + "babel-loader": "^8.1.0", + "browserify": "16.5.2", + "chai": "^4.2.0", + "coveralls": "^3.1.0", + "eslint": "^7.1.0", + "ify-loader": "^1.1.0", + "install-peers": "^1.0.3", + "karma": "5.2.3", + "karma-browserify": "7.0.0", + "karma-chai": "^0.1.0", + "karma-chrome-launcher": "^3.1.0", + "karma-mocha": "^2.0.1", + "mocha": "^8.3.0", + "nyc": "^15.1.0", + "source-map-loader": "^3.0.0", + "ts-loader": "^9.2.6", + "typescript": "^4.4.2", + "webpack": "5.21.2", + "webpack-cli": "4.5.0", + "yarn": "^1.22.10" + } +} \ No newline at end of file diff --git a/src/danfojs-base/plotting/index.ts b/src/danfojs-base/plotting/index.ts new file mode 100644 index 00000000..ef9db66b --- /dev/null +++ b/src/danfojs-base/plotting/index.ts @@ -0,0 +1,138 @@ +/** +* @license +* Copyright 2022 JsData. All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ========================================================================== +*/ +import { + linePlot, + barPlot, + scatterPlot, + histPlot, + piePlot, + boxPlot, + violinPlot, + tablePlot, +} from "./plotly/index"; +import Series from "../core/series"; +import DataFrame from "../core/frame"; +import { PlotConfigObject, IPlotlyLib } from "../shared/types" + +let Plotly: IPlotlyLib; + +if (typeof window !== "undefined") { + //check if in browser environment and require "plotly.js-dist-min" module + Plotly = require("plotly.js-dist-min") as IPlotlyLib; + +} + +class PlotlyLib implements IPlotlyLib { + divId: string; + ndframe: DataFrame | Series; + + constructor(ndframe: DataFrame | Series, divId: string) { + this.ndframe = ndframe; + this.divId = divId; + } + + private getPlotConfig(plotConfig?: PlotConfigObject) { + const _plotConfig = { + config: plotConfig && plotConfig.config ? plotConfig.config : {}, + layout: plotConfig && plotConfig.layout ? plotConfig.layout : {} + }; + return _plotConfig; + } + /** + * Plot Series or DataFrame as lines. + * Uses Plotly library as backend, so supports Plotly's configuration parameters + * @param plotConfig configuration options for making Plots, supports Plotly.js Config and Layout parameters. + */ + line(plotConfig?: PlotConfigObject) { + const _plotConfig = this.getPlotConfig(plotConfig); + linePlot(this.ndframe, this.divId, _plotConfig, Plotly); + } + + /** + * Plot Series or DataFrame as bars. + * Uses Plotly library as backend, so supports Plotly's configuration parameters + * @param plotConfig configuration options for making Plots, supports Plotly.js Config and Layout parameters. + */ + bar(plotConfig?: PlotConfigObject) { + const _plotConfig = this.getPlotConfig(plotConfig); + barPlot(this.ndframe, this.divId, _plotConfig, Plotly); + } + + /** + * Plot Series or DataFrame as scatter. + * Uses Plotly library as backend, so supports Plotly's configuration parameters + * @param plotConfig configuration options for making Plots, supports Plotly.js Config and Layout parameters. + */ + scatter(plotConfig?: PlotConfigObject) { + const _plotConfig = this.getPlotConfig(plotConfig); + scatterPlot(this.ndframe, this.divId, _plotConfig, Plotly); + } + + /** + * Plot Series or DataFrame as histogram. + * Uses Plotly library as backend, so supports Plotly's configuration parameters + * @param plotConfig configuration options for making Plots, supports Plotly.js Config and Layout parameters. + */ + hist(plotConfig?: PlotConfigObject) { + const _plotConfig = this.getPlotConfig(plotConfig); + histPlot(this.ndframe, this.divId, _plotConfig, Plotly); + } + + /** + * Plot Series or DataFrame as pie. + * Uses Plotly library as backend, so supports Plotly's configuration parameters + * @param plotConfig configuration options for making Plots, supports Plotly.js Config and Layout parameters. + */ + pie(plotConfig?: PlotConfigObject) { + const _plotConfig = this.getPlotConfig(plotConfig); + piePlot(this.ndframe, this.divId, _plotConfig, Plotly); + } + + /** + * Plot Series or DataFrame as boxplot. + * Uses Plotly library as backend, so supports Plotly's configuration parameters + * @param plotConfig configuration options for making Plots, supports Plotly.js Config and Layout parameters. + */ + box(plotConfig?: PlotConfigObject) { + const _plotConfig = this.getPlotConfig(plotConfig); + boxPlot(this.ndframe, this.divId, _plotConfig, Plotly); + } + + /** + * Plot Series or DataFrame as violinplot. + * Uses Plotly library as backend, so supports Plotly's configuration parameters + * @param plotConfig configuration options for making Plots, supports Plotly.js Config and Layout parameters. + */ + violin(plotConfig?: PlotConfigObject) { + const _plotConfig = this.getPlotConfig(plotConfig); + violinPlot(this.ndframe, this.divId, _plotConfig, Plotly); + } + + /** + * Plot Series or DataFrame as table. + * Uses Plotly library as backend, so supports Plotly's configuration parameters + * @param plotConfig configuration options for making Plots, supports Plotly.js Config and Layout parameters. + */ + table(plotConfig?: PlotConfigObject) { + const _plotConfig = this.getPlotConfig(plotConfig); + tablePlot(this.ndframe, this.divId, _plotConfig, Plotly); + } + +} + + +export { + PlotlyLib +} diff --git a/src/danfojs-base/plotting/plotly/bar.ts b/src/danfojs-base/plotting/plotly/bar.ts new file mode 100644 index 00000000..415ffba6 --- /dev/null +++ b/src/danfojs-base/plotting/plotly/bar.ts @@ -0,0 +1,142 @@ +/** +* @license +* Copyright 2022 JsData. All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ========================================================================== +*/ +import Series from "../../core/series"; +import DataFrame from "../../core/frame"; +import { Data } from "plotly.js-dist-min" +import { InternalPlotConfigObject } from "../../shared/types" +import { checkIfColsExist, throwErrorOnWrongColName } from "./utils" + + +/** +* Plot Series or DataFrame as bar. +* Uses the Plotly as backend, so supoorts Plotly's configuration parameters, +* Line plot supports different types of parameters, and the behavior will depend on data specified. +* The precedence of columns to plot is: (x and y => x => y => columns). +* @param ndframe Series or DataFrame to plot +* @param divId HTML div id to plot in. +* @param plotConfig configuration options for making Plots, supports Plotly.js Config and Layout parameters. +*/ +export const barPlot = (ndframe: DataFrame | Series, divId: string, plotConfig: InternalPlotConfigObject, Plotly: any) => { + const config = plotConfig["config"] + const layout = plotConfig["layout"] + + if (ndframe instanceof Series) { + let trace: Data = { + x: ndframe.index as any, + y: ndframe.values as any, + type: 'bar', + }; + + Plotly.newPlot(divId, [trace], layout, config); + + } else { + + if (config["x"] && config["y"]) { + //Plotting two columns against each other, when user specifies x and y column names in configuration + throwErrorOnWrongColName(ndframe, config["x"]); + throwErrorOnWrongColName(ndframe, config["y"]); + + const x = ndframe[config.x].values; + const y = ndframe[config.y].values; + + const trace: Data = { + x, + y, + type: 'bar', + }; + + const _layout = { + xaxis: { + title: config.x, + }, + yaxis: { + title: config.y, + }, + ...layout, + }; + + Plotly.newPlot(divId, [trace], _layout, config); + + } else if (config["x"] || config["y"]) { + //plot single column specified in either of param [x | y] against index + if (config["x"]) { + throwErrorOnWrongColName(ndframe, config.x); + + const x = ndframe[config.x].values; + const y = ndframe.index; + + const trace: Data = { + x, + y, + type: 'bar', + }; + const _layout = { + xaxis: { + title: config.x, + }, + yaxis: { + title: "Index", + }, + ...layout, + }; + + Plotly.newPlot(divId, [trace], _layout, config); + } + + if (config["y"]) { + throwErrorOnWrongColName(ndframe, config.y); + + const x = ndframe.index + const y = ndframe[config.y].values; + + const trace: Data = { + x, + y, + type: 'bar', + }; + const _layout = { + xaxis: { + title: "Index", + }, + yaxis: { + title: config.y, + }, + ...layout, + }; + + Plotly.newPlot(divId, [trace], _layout, config); + } + + } else { + //plot specified columns in config param against index + // if columns is not specified in config, then plot all columns + const cols = config["columns"] ? checkIfColsExist(ndframe, config['columns']) : ndframe.columns; + + const traces: Data[] = []; + cols.forEach((col) => { + const x = ndframe.index; + const y = (ndframe as DataFrame)[col].values; + + const trace: Data = { x, y, name: col, type: 'bar' }; + traces.push(trace); + }); + + Plotly.newPlot(divId, traces, layout, config); + + } + + } + +} diff --git a/src/danfojs-base/plotting/plotly/box.ts b/src/danfojs-base/plotting/plotly/box.ts new file mode 100644 index 00000000..6c8e517b --- /dev/null +++ b/src/danfojs-base/plotting/plotly/box.ts @@ -0,0 +1,143 @@ +/** +* @license +* Copyright 2022 JsData. All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ========================================================================== +*/ +import Series from "../../core/series"; +import DataFrame from "../../core/frame"; +import { Data } from "plotly.js-dist-min" +import { InternalPlotConfigObject } from "../../shared/types" +import { checkIfColsExist, throwErrorOnWrongColName } from "./utils" + + +/** +* Plot Series or DataFrame as box chart. +* Uses the Plotly as backend, so supoorts Plotly's configuration parameters, +* Line plot supports different types of parameters, and the behavior will depend on data specified. +* The precedence of columns to plot is: (x and y => x => y => columns). +* @param ndframe Series or DataFrame to plot +* @param divId HTML div id to plot in. +* @param plotConfig configuration options for making Plots, supports Plotly.js Config and Layout parameters. +*/ +export const boxPlot = (ndframe: DataFrame | Series, divId: string, plotConfig: InternalPlotConfigObject, Plotly: any) => { + const config = plotConfig["config"] + const layout = plotConfig["layout"] + + if (ndframe instanceof Series) { + let trace: Data = { + y: ndframe.values as any, + type: 'box', + }; + + Plotly.newPlot(divId, [trace], layout, config); + + } else { + + if (config["x"] && config["y"]) { + //Plotting two columns against each other, when user specifies x and y column names in configuration + throwErrorOnWrongColName(ndframe, config["x"]); + throwErrorOnWrongColName(ndframe, config["y"]); + + const x = ndframe[config.x].values; + const y = ndframe[config.y].values; + + const trace: Data = { + x, + y, + type: 'box', + }; + const _layout = { + xaxis: { + title: config.x, + }, + yaxis: { + title: config.y, + }, + ...layout, + }; + + Plotly.newPlot(divId, [trace], _layout, config); + + } else if (config["x"] || config["y"]) { + //plot single column specified in either of param [x | y] against index + if (config["x"]) { + throwErrorOnWrongColName(ndframe, config.x); + + const x = ndframe[config.x].values; + const y = ndframe.index; + + const trace: Data = { + x, + y, + type: 'box', + }; + const _layout = { + xaxis: { + title: config.x, + }, + yaxis: { + title: "Index", + }, + ...layout, + }; + + Plotly.newPlot(divId, [trace], _layout, config); + } + + if (config["y"]) { + throwErrorOnWrongColName(ndframe, config.y); + + const x = ndframe.index + const y = ndframe[config.y].values; + + const trace: Data = { + x, + y, + type: 'box', + }; + const _layout = { + xaxis: { + title: "Index", + }, + yaxis: { + title: config.y, + }, + ...layout, + }; + + Plotly.newPlot(divId, [trace], _layout, config); + } + + } else { + //plot specified columns in config param against index + // if columns is not specified in config, then plot all columns + const cols = config["columns"] ? checkIfColsExist(ndframe, config['columns']) : ndframe.columns; + + const traces: Data[] = []; + cols.forEach((col) => { + const y = (ndframe as DataFrame)[col].values; + + const trace: Data = { + y, + name: col, + type: 'box', + }; + traces.push(trace); + }); + + Plotly.newPlot(divId, traces, layout, config); + + } + + } + +} diff --git a/src/danfojs-base/plotting/plotly/hist.ts b/src/danfojs-base/plotting/plotly/hist.ts new file mode 100644 index 00000000..7946438c --- /dev/null +++ b/src/danfojs-base/plotting/plotly/hist.ts @@ -0,0 +1,106 @@ +/** +* @license +* Copyright 2022 JsData. All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ========================================================================== +*/ +import Series from "../../core/series"; +import DataFrame from "../../core/frame"; +import { Data } from "plotly.js-dist-min" +import { InternalPlotConfigObject } from "../../shared/types" +import { checkIfColsExist, throwErrorOnWrongColName } from "./utils" + + +/** +* Plot Series or DataFrame as histogram. +* Uses the Plotly as backend, so supoorts Plotly's configuration parameters, +* Line plot supports different types of parameters, and the behavior will depend on data specified. +* The precedence of columns to plot is: (x and y => x => y => columns). +* @param ndframe Series or DataFrame to plot +* @param divId HTML div id to plot in. +* @param plotConfig configuration options for making Plots, supports Plotly.js Config and Layout parameters. +*/ +export const histPlot = (ndframe: DataFrame | Series, divId: string, plotConfig: InternalPlotConfigObject, Plotly: any) => { + const config = plotConfig["config"] + const layout = plotConfig["layout"] + + if (ndframe instanceof Series) { + let trace: Data = { + x: ndframe.values as any, + type: 'histogram', + }; + + Plotly.newPlot(divId, [trace], layout, config); + + } else { + + if (config["x"] || config["y"]) { + //plot single column specified in either of param [x | y] against index + if (config["x"]) { + throwErrorOnWrongColName(ndframe, config.x); + + const x = ndframe[config.x].values; + + const trace: Data = { + x, + type: 'histogram', + }; + + const _layout = { + xaxis: { + title: config.x, + }, + ...layout, + }; + + Plotly.newPlot(divId, [trace], _layout, config); + } + + if (config["y"]) { + throwErrorOnWrongColName(ndframe, config.y); + + const y = ndframe[config.y].values; + + const trace: Data = { + y, + type: 'histogram', + }; + const _layout = { + yaxis: { + title: config.y, + }, + ...layout, + }; + + Plotly.newPlot(divId, [trace], _layout, config); + } + + } else { + //plot specified columns in config param against index + // if columns is not specified in config, then plot all columns + const cols = config["columns"] ? checkIfColsExist(ndframe, config['columns']) : ndframe.columns; + + const traces: Data[] = []; + cols.forEach((col) => { + const y = ndframe.index; + const x = (ndframe as DataFrame)[col].values; + + const trace: Data = { x, y, name: col, type: 'histogram' }; + traces.push(trace); + }); + + Plotly.newPlot(divId, traces, layout, config); + + } + + } + +} diff --git a/src/danfojs-base/plotting/plotly/index.ts b/src/danfojs-base/plotting/plotly/index.ts new file mode 100644 index 00000000..67de8e15 --- /dev/null +++ b/src/danfojs-base/plotting/plotly/index.ts @@ -0,0 +1,23 @@ +/** +* @license +* Copyright 2022 JsData. All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ========================================================================== +*/ + +export { linePlot } from "./line"; +export { barPlot } from "./bar"; +export { scatterPlot } from "./scatter"; +export { histPlot } from "./hist"; +export { piePlot } from "./pie"; +export { boxPlot } from "./box"; +export { violinPlot } from "./violin"; +export { tablePlot } from "./table"; diff --git a/src/danfojs-base/plotting/plotly/line.ts b/src/danfojs-base/plotting/plotly/line.ts new file mode 100644 index 00000000..1d238841 --- /dev/null +++ b/src/danfojs-base/plotting/plotly/line.ts @@ -0,0 +1,132 @@ +/** +* @license +* Copyright 2022 JsData. All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ========================================================================== +*/ +import Series from "../../core/series"; +import DataFrame from "../../core/frame"; +import { Data } from "plotly.js-dist-min" +import { InternalPlotConfigObject } from "../../shared/types" +import { checkIfColsExist, throwErrorOnWrongColName } from "./utils" + + +/** +* Plot Series or DataFrame as lines. +* Uses the Plotly as backend, so supoorts Plotly's configuration parameters, +* Line plot supports different types of parameters, and the behavior will depend on data specified. +* The precedence of columns to plot is: (x and y => x => y => columns). +* @param ndframe Series or DataFrame to plot +* @param divId HTML div id to plot in. +* @param plotConfig configuration options for making Plots, supports Plotly.js Config and Layout parameters. +* @param Plotly Plotly package passed from the class. +*/ +export const linePlot = (ndframe: DataFrame | Series, divId: string, plotConfig: InternalPlotConfigObject, Plotly: any) => { + const config = plotConfig["config"] + const layout = plotConfig["layout"] + + if (ndframe instanceof Series) { + const y = ndframe.values as any; + let trace: Data = { + x: ndframe.index as any, + y, + type: 'scatter', + mode: 'lines', + }; + + Plotly.newPlot(divId, [trace], layout, config); + + } else { + + if (config["x"] && config["y"]) { + //Plotting two columns against each other, when user specifies x and y column names in configuration + throwErrorOnWrongColName(ndframe, config["x"]); + throwErrorOnWrongColName(ndframe, config["y"]); + + const x = ndframe[config.x].values; + const y = ndframe[config.y].values; + + const trace: Data = { x, y }; + const _layout = { + xaxis: { + title: config.x, + }, + yaxis: { + title: config.y, + }, + ...layout, + }; + + Plotly.newPlot(divId, [trace], _layout, config); + + } else if (config["x"] || config["y"]) { + //plot single column specified in either of param [x | y] against index + if (config["x"]) { + throwErrorOnWrongColName(ndframe, config.x); + + const x = ndframe[config.x].values; + const y = ndframe.index; + + const trace: Data = { x, y }; + const _layout = { + xaxis: { + title: config.x, + }, + yaxis: { + title: "Index", + }, + ...layout, + }; + + Plotly.newPlot(divId, [trace], _layout, config); + } + + if (config["y"]) { + throwErrorOnWrongColName(ndframe, config.y); + + const x = ndframe.index + const y = ndframe[config.y].values; + + const trace: Data = { x, y }; + const _layout = { + xaxis: { + title: "Index", + }, + yaxis: { + title: config.y, + }, + ...layout, + }; + + Plotly.newPlot(divId, [trace], _layout, config); + } + + } else { + //plot specified columns in config param against index + // if columns is not specified in config, then plot all columns + const cols = config["columns"] ? checkIfColsExist(ndframe, config['columns']) : ndframe.columns; + + const traces: Data[] = []; + cols.forEach((col) => { + const x = ndframe.index; + const y = (ndframe as DataFrame)[col].values; + + const trace: Data = { x, y, name: col }; + traces.push(trace); + }); + + Plotly.newPlot(divId, traces, layout, config); + + } + + } + +} diff --git a/src/danfojs-base/plotting/plotly/pie.ts b/src/danfojs-base/plotting/plotly/pie.ts new file mode 100644 index 00000000..0428972d --- /dev/null +++ b/src/danfojs-base/plotting/plotly/pie.ts @@ -0,0 +1,144 @@ +// @ts-nocheck + +/** +* @license +* Copyright 2022 JsData. All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ========================================================================== +*/ +import Series from "../../core/series"; +import DataFrame from "../../core/frame"; +import { Data } from "plotly.js-dist-min" +import { InternalPlotConfigObject } from "../../shared/types" +import { checkIfColsExist } from "./utils" + + +/** +* Plot Series or DataFrame as pie chart. +* Uses the Plotly as backend, so supoorts Plotly's configuration parameters, +* Line plot supports different types of parameters, and the behavior will depend on data specified. +* @param ndframe Series or DataFrame to plot +* @param divId HTML div id to plot in. +* @param plotConfig configuration options for making Plots, supports Plotly.js Config and Layout parameters. +*/ +export const piePlot = (ndframe: DataFrame | Series, divId: string, plotConfig: InternalPlotConfigObject, Plotly: any) => { + const config = plotConfig["config"] + const layout = plotConfig["layout"] + + if (ndframe instanceof Series) { + let trace: Data = { + values: ndframe.values as any, + labels: config["labels"] || ndframe.index as any, + type: 'pie', + name: config.labels, + hoverinfo: 'label+percent+name', + automargin: true + }; + + Plotly.newPlot(divId, [trace], layout, config); + + } else { + if (config["labels"]) { + + if (!ndframe.columns.includes(config['labels'])) { + throw Error(`Column Error: ${config['labels']} not found in columns. Param "labels" name must be one of [ ${ndframe.columns}]`); + } + + if (config["values"]) { + + if (!ndframe.columns.includes(config['values'])) { + throw Error(`Column Error: ${config['values']} not found in columns. Param "values" name must be one of [ ${ndframe.columns}]`); + } + + let trace: Data = { + values: ndframe[config['values']].values as any, + labels: ndframe[config["labels"]].values as any, + type: 'pie', + name: config.labels, + hoverinfo: 'label+percent+name', + automargin: true + }; + + Plotly.newPlot(divId, [trace], layout, config); + + } else { + // if columns is not specified in config, then plot all columns + const cols = config["columns"] ? checkIfColsExist(ndframe, config['columns']) : ndframe.columns; + + if (config['rowPositions']) { + if (config['rowPositions'].length != cols.length) { + throw Error(`Lenght of rowPositions array must be equal to number of columns. Got ${config['rowPositions'].length}, expected ${cols.length - 1}`); + } + } else { + let tempArr = []; + for (let i = 0; i < cols.length - 1; i++) { + tempArr.push(0); + } + config['rowPositions'] = tempArr; + + } + + if (config['columnPositions']) { + if (config['columnPositions'].length != cols.length) { + throw Error(`Lenght of columnPositions array must be equal to number of columns. Got ${config['columnPositions'].length}, expected ${cols.length - 1}`); + } + } else { + let tempArr = []; + for (let i = 0; i < cols.length - 1; i++) { + tempArr.push(i); + } + config['columnPositions'] = tempArr; + + } + + const traces: Data[] = []; + cols.forEach((col, i) => { + const labels = (ndframe as DataFrame)[config["labels"]].values; + const values = (ndframe as DataFrame)[col].values; + + const trace: Data = { + labels, + values, + name: col, + type: 'pie', + domain: { + row: config['rowPositions'][i], + column: config['columnPositions'][i] + }, + hoverinfo: 'label+percent+name', + automargin: true, + textposition: 'outside' + }; + traces.push(trace); + }); + + const _layout = { + ...layout, + } + + if (!config["grid"]) { + //set default grid + let size = Number((ndframe.shape[1] / 2).toFixed()) + 1; + _layout["grid"] = { rows: size, columns: size }; + }else{ + _layout["grid"] = config["grid"]; + } + + Plotly.newPlot(divId, traces, _layout, config); + + } + } else { + throw new Error(`Param Error: Please provide a column name for "labels" param`) + } + + } + +} diff --git a/src/danfojs-base/plotting/plotly/scatter.ts b/src/danfojs-base/plotting/plotly/scatter.ts new file mode 100644 index 00000000..95e03262 --- /dev/null +++ b/src/danfojs-base/plotting/plotly/scatter.ts @@ -0,0 +1,151 @@ +/** +* @license +* Copyright 2022 JsData. All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ========================================================================== +*/ +import Series from "../../core/series"; +import DataFrame from "../../core/frame"; +import { Data } from "plotly.js-dist-min" +import { InternalPlotConfigObject } from "../../shared/types" +import { checkIfColsExist, throwErrorOnWrongColName } from "./utils" + +/** +* Plot Series or DataFrame as scatter points. +* Uses the Plotly as backend, so supoorts Plotly's configuration parameters, +* Line plot supports different types of parameters, and the behavior will depend on data specified. +* The precedence of columns to plot is: (x and y => x => y => columns). +* @param ndframe Series or DataFrame to plot +* @param divId HTML div id to plot in. +* @param plotConfig configuration options for making Plots, supports Plotly.js Config and Layout parameters. +*/ +export const scatterPlot = (ndframe: DataFrame | Series, divId: string, plotConfig: InternalPlotConfigObject, Plotly: any) => { + const config = plotConfig["config"] + const layout = plotConfig["layout"] + + if (ndframe instanceof Series) { + const y = ndframe.values as any; + let trace: Data = { + x: ndframe.index as any, + y, + type: 'scatter', + mode: 'markers', + }; + + Plotly.newPlot(divId, [trace], layout, config); + + } else { + + if (config["x"] && config["y"]) { + //Plotting two columns against each other, when user specifies x and y column names in configuration + throwErrorOnWrongColName(ndframe, config["x"]); + throwErrorOnWrongColName(ndframe, config["y"]); + + const x = ndframe[config.x].values; + const y = ndframe[config.y].values; + + const trace: Data = { + x, + y, + type: 'scatter', + mode: 'markers', + }; + const _layout = { + xaxis: { + title: config.x, + }, + yaxis: { + title: config.y, + }, + ...layout, + }; + + Plotly.newPlot(divId, [trace], _layout, config); + + } else if (config["x"] || config["y"]) { + //plot single column specified in either of param [x | y] against index + if (config["x"]) { + throwErrorOnWrongColName(ndframe, config.x); + + const x = ndframe[config.x].values; + const y = ndframe.index; + + const trace: Data = { + x, + y, + type: 'scatter', + mode: 'markers', + }; + const _layout = { + xaxis: { + title: config.x, + }, + yaxis: { + title: "Index", + }, + ...layout, + }; + + Plotly.newPlot(divId, [trace], _layout, config); + } + + if (config["y"]) { + throwErrorOnWrongColName(ndframe, config.y); + + const x = ndframe.index + const y = ndframe[config.y].values; + + const trace: Data = { + x, + y, + type: 'scatter', + mode: 'markers', + }; + const _layout = { + xaxis: { + title: "Index", + }, + yaxis: { + title: config.y, + }, + ...layout, + }; + + Plotly.newPlot(divId, [trace], _layout, config); + } + + } else { + //plot specified columns in config param against index + // if columns is not specified in config, then plot all columns + const cols = config["columns"] ? checkIfColsExist(ndframe, config['columns']) : ndframe.columns; + + const traces: Data[] = []; + cols.forEach((col) => { + const y = ndframe.index; + const x = (ndframe as DataFrame)[col].values; + + const trace: Data = { + x, + y, + name: col, + type: 'scatter', + mode: 'markers', + }; + traces.push(trace); + }); + + Plotly.newPlot(divId, traces, layout, config); + + } + + } + +} diff --git a/src/danfojs-base/plotting/plotly/table.ts b/src/danfojs-base/plotting/plotly/table.ts new file mode 100644 index 00000000..54d220e9 --- /dev/null +++ b/src/danfojs-base/plotting/plotly/table.ts @@ -0,0 +1,77 @@ +/** +* @license +* Copyright 2022 JsData. All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ========================================================================== +*/ +import Series from "../../core/series"; +import DataFrame from "../../core/frame"; +import { InternalPlotConfigObject } from "../../shared/types" + + +/** +* Display Series or DataFrame as table. +* Uses the Plotly as backend, so supoorts Plotly's configuration parameters, +* @param ndframe Series or DataFrame to plot +* @param divId HTML div id to plot in. +* @param plotConfig configuration options for making Plots, supports Plotly.js Config and Layout parameters. +*/ +export const tablePlot = (ndframe: DataFrame | Series, divId: string, plotConfig: InternalPlotConfigObject, Plotly: any) => { + const config = plotConfig["config"] + const layout = plotConfig["layout"] + let header: any = {}; + let cells: any = {}; + let colsData: any[] = []; + let cols2Show: any[] = [] + + if (config['columns']) { + + config['columns'].forEach((cname) => { + if (!ndframe.columns.includes(cname)) { + throw Error(`Column Error: ${cname} not found in columns. Columns should be one of [ ${ndframe.columns} ]`); + } + + let idx = ndframe.columns.indexOf(cname); + colsData.push(ndframe.getColumnData[idx]); + }); + + cols2Show = config['columns']; + } else { + + cols2Show = ndframe.columns; + colsData = ndframe.getColumnData; + + } + + header['values'] = cols2Show.map((col) => [col]); + cells['values'] = colsData; + + if (config['tableHeaderStyle']) { + Object.keys(config['tableHeaderStyle']).forEach((param) => { + header[param] = config['tableHeaderStyle'][param]; + }); + } + + if (config['tableCellStyle']) { + Object.keys(config['tableCellStyle']).forEach((param) => { + cells[param] = config['tableCellStyle'][param]; + }); + } + + const trace = { + type: 'table', + header, + cells + }; + /* @ts-ignore */ + Plotly.newPlot(divId, [trace], layout, config); + +} diff --git a/src/danfojs-base/plotting/plotly/utils.ts b/src/danfojs-base/plotting/plotly/utils.ts new file mode 100644 index 00000000..116ff9a7 --- /dev/null +++ b/src/danfojs-base/plotting/plotly/utils.ts @@ -0,0 +1,32 @@ +/** +* @license +* Copyright 2022 JsData. All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ========================================================================== +*/ + +import Series from "../../core/series"; +import DataFrame from "../../core/frame"; + +export const checkIfColsExist = (ndframe: DataFrame | Series, cols: string[]) => { + cols.forEach((col) => { + if (!ndframe.columns.includes(col)) { + throw Error(`Column Error: ${col} not found in columns. Columns should be one of [ ${ndframe.columns} ]`); + } + }); + return cols; +} + +export const throwErrorOnWrongColName = (ndframe: DataFrame, colName: string): void => { + if (!ndframe.columns.includes(colName)) { + throw Error(`ParamError: specified column ${colName} not found in columns`); + } +} diff --git a/src/danfojs-base/plotting/plotly/violin.ts b/src/danfojs-base/plotting/plotly/violin.ts new file mode 100644 index 00000000..c0ca5fcb --- /dev/null +++ b/src/danfojs-base/plotting/plotly/violin.ts @@ -0,0 +1,143 @@ +/** +* @license +* Copyright 2022 JsData. All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ========================================================================== +*/ +import Series from "../../core/series"; +import DataFrame from "../../core/frame"; +import { Data } from "plotly.js-dist-min" +import { InternalPlotConfigObject } from "../../shared/types" +import { checkIfColsExist, throwErrorOnWrongColName } from "./utils" + + +/** +* Plot Series or DataFrame as violin chart. +* Uses the Plotly as backend, so supoorts Plotly's configuration parameters, +* Line plot supports different types of parameters, and the behavior will depend on data specified. +* The precedence of columns to plot is: (x and y => x => y => columns). +* @param ndframe Series or DataFrame to plot +* @param divId HTML div id to plot in. +* @param plotConfig configuration options for making Plots, supports Plotly.js Config and Layout parameters. +*/ +export const violinPlot = (ndframe: DataFrame | Series, divId: string, plotConfig: InternalPlotConfigObject, Plotly: any) => { + const config = plotConfig["config"] + const layout = plotConfig["layout"] + + if (ndframe instanceof Series) { + let trace: Data = { + y: ndframe.values as any, + type: 'violin', + }; + + Plotly.newPlot(divId, [trace], layout, config); + + } else { + + if (config["x"] && config["y"]) { + //Plotting two columns against each other, when user specifies x and y column names in configuration + throwErrorOnWrongColName(ndframe, config["x"]); + throwErrorOnWrongColName(ndframe, config["y"]); + + const x = ndframe[config.x].values; + const y = ndframe[config.y].values; + + const trace: Data = { + x, + y, + type: 'violin', + }; + const _layout = { + xaxis: { + title: config.x, + }, + yaxis: { + title: config.y, + }, + ...layout, + }; + + Plotly.newPlot(divId, [trace], _layout, config); + + } else if (config["x"] || config["y"]) { + //plot single column specified in either of param [x | y] against index + if (config["x"]) { + throwErrorOnWrongColName(ndframe, config.x); + + const x = ndframe[config.x].values; + const y = ndframe.index; + + const trace: Data = { + x, + y, + type: 'violin', + }; + const _layout = { + xaxis: { + title: config.x, + }, + yaxis: { + title: "Index", + }, + ...layout, + }; + + Plotly.newPlot(divId, [trace], _layout, config); + } + + if (config["y"]) { + throwErrorOnWrongColName(ndframe, config.y); + + const x = ndframe.index + const y = ndframe[config.y].values; + + const trace: Data = { + x, + y, + type: 'violin', + }; + const _layout = { + xaxis: { + title: "Index", + }, + yaxis: { + title: config.y, + }, + ...layout, + }; + + Plotly.newPlot(divId, [trace], _layout, config); + } + + } else { + //plot specified columns in config param against index + // if columns is not specified in config, then plot all columns + const cols = config["columns"] ? checkIfColsExist(ndframe, config['columns']) : ndframe.columns; + + const traces: Data[] = []; + cols.forEach((col) => { + const y = (ndframe as DataFrame)[col].values; + + const trace: Data = { + y, + name: col, + type: 'violin', + }; + traces.push(trace); + }); + + Plotly.newPlot(divId, traces, layout, config); + + } + + } + +} diff --git a/src/danfojs-base/plotting/vega/index.ts b/src/danfojs-base/plotting/vega/index.ts new file mode 100644 index 00000000..480765d3 --- /dev/null +++ b/src/danfojs-base/plotting/vega/index.ts @@ -0,0 +1,16 @@ +/** +* @license +* Copyright 2022 JsData. All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ========================================================================== +*/ + +//TODO: Add support for vega library plots \ No newline at end of file diff --git a/src/danfojs-base/shared/config.ts b/src/danfojs-base/shared/config.ts new file mode 100644 index 00000000..faffab66 --- /dev/null +++ b/src/danfojs-base/shared/config.ts @@ -0,0 +1,90 @@ +/** +* @license +* Copyright 2022 JsData. All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ========================================================================== +*/ +import { BaseUserConfig, TableUserConfig } from 'table'; +import { ConfigsType } from './types' + +/** + * Package wide configuration class + */ +export default class Configs { + tableDisplayConfig: BaseUserConfig & TableUserConfig + tableMaxRow: number; + tableMaxColInConsole: number; + dtypeTestLim: number; + lowMemoryMode: boolean; + + constructor(options: ConfigsType) { + const { + tableDisplayConfig, + tableMaxRow, + tableMaxColInConsole, + dtypeTestLim, + lowMemoryMode, + } = { + tableDisplayConfig: {}, + tableMaxRow: 10, + tableMaxColInConsole: 10, + dtypeTestLim: 20, + lowMemoryMode: false, + ...options + } + this.tableDisplayConfig = tableDisplayConfig + this.tableMaxRow = tableMaxRow // The maximum number of rows to display in console + this.tableMaxColInConsole = tableMaxColInConsole // The maximum number of columns to display in console + this.dtypeTestLim = dtypeTestLim // The number of rows to use when inferring data type + this.lowMemoryMode = lowMemoryMode // Whether to use minimal memory or not. + } + + setTableDisplayConfig(config: BaseUserConfig & TableUserConfig) { + this.tableDisplayConfig = config; + } + + get getTableDisplayConfig(): BaseUserConfig & TableUserConfig { + return this.tableDisplayConfig; + } + + setTableMaxColInConsole(val: number) { + this.tableMaxColInConsole = val; + } + + get getTableMaxColInConsole(): number { + return this.tableMaxColInConsole; + } + + setMaxRow(val: number) { + this.tableMaxRow = val; + } + + get getMaxRow(): number { + return this.tableMaxRow; + } + + get getDtypeTestLim(): number { + return this.dtypeTestLim; + } + + setDtypeTestLim(val: number) { + this.dtypeTestLim = val; + } + + get isLowMemoryMode(): boolean { + return this.lowMemoryMode; + } + + setIsLowMemoryMode(val: boolean) { + this.lowMemoryMode = val; + } +} + diff --git a/src/danfojs-base/shared/defaults.ts b/src/danfojs-base/shared/defaults.ts new file mode 100644 index 00000000..5ba467dc --- /dev/null +++ b/src/danfojs-base/shared/defaults.ts @@ -0,0 +1,26 @@ +/** +* @license +* Copyright 2022 JsData. All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ========================================================================== +*/ + +/** + * Default config object + */ +export const BASE_CONFIG = { + tableMaxRow: 10, + tableMaxColInConsole: 10, + dtypeTestLim: 20, + lowMemoryMode: false, +} + +export const DATA_TYPES = ["float32", "int32", "string", "boolean", 'undefined']; \ No newline at end of file diff --git a/src/danfojs-base/shared/errors.ts b/src/danfojs-base/shared/errors.ts new file mode 100644 index 00000000..1d082c4c --- /dev/null +++ b/src/danfojs-base/shared/errors.ts @@ -0,0 +1,96 @@ +/** +* @license +* Copyright 2022 JsData. All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ========================================================================== +*/ +import DataFrame from "../core/frame" +import NDframe from "../core/generic" +import { DATA_TYPES } from "./defaults" + +/** + * Package wide error throwing class + */ +class ErrorThrower { + + throwColumnNamesLengthError = (ndframe: NDframe, columns: Array): void => { + const msg = `ParamError: Column names length mismatch. You provided a column of length ${columns.length} but Ndframe columns has lenght of ${ndframe.shape[1]}` + throw new Error(msg) + } + + throwIndexLengthError = (ndframe: NDframe, index: Array): void => { + const msg = `IndexError: You provided an index of length ${index.length} but Ndframe rows has lenght of ${ndframe.shape[0]}` + throw new Error(msg) + } + + throwIndexDuplicateError = (): void => { + const msg = `IndexError: Row index must contain unique values` + throw new Error(msg) + } + + throwColumnDuplicateError = (): void => { + const msg = `ColumnIndexError: Column index must contain unique values` + throw new Error(msg) + } + + throwDtypesLengthError = (ndframe: NDframe, dtypes: Array): void => { + const msg = `DtypeError: You provided a dtype array of length ${dtypes.length} but Ndframe columns has lenght of ${ndframe.shape[1]}` + throw new Error(msg) + } + + throwDtypeNotSupportedError = (dtype: string): void => { + const msg = `DtypeError: Dtype "${dtype}" not supported. dtype must be one of "${DATA_TYPES}"` + throw new Error(msg) + } + + throwColumnLengthError = (ndframe: NDframe | DataFrame, arrLen: number): void => { + const msg = `ParamError: Column data length mismatch. You provided data with length ${arrLen} but Ndframe has column of lenght ${ndframe.shape[1]}` + throw new Error(msg) + } + + throwRowLengthError = (ndframe: NDframe, arrLen: number): void => { + const msg = `ParamError: Row data length mismatch. You provided data with length ${arrLen} but Ndframe has row of lenght ${ndframe.shape[0]}` + throw new Error(msg) + } + + throwColumnNotFoundError = (ndframe: DataFrame | NDframe): void => { + const msg = `ParamError: Column not found!. Column name must be one of ${ndframe.columns}` + throw new Error(msg) + } + + throwNotImplementedError = (): void => { + const msg = `Method not implemented` + throw new Error(msg) + } + + throwIlocRowIndexError = (): void => { + const msg = `ParamError: rows parameter must be a Array. For example: rows: [1,2] or rows: ["0:10"]` + throw new Error(msg) + } + + throwIlocColumnsIndexError = (): void => { + const msg = `ParamError: columns parameter must be a Array. For example: columns: [1,2] or columns: ["0:10"]` + throw new Error(msg) + } + + throwStringDtypeOperationError = (operation: string): void => { + const msg = `DtypeError: String data type does not support ${operation} operation` + throw new Error(msg) + } + + throwSeriesMathOpLengthError = (ndframe: NDframe, other: NDframe): void => { + const msg = `ParamError: Row length mismatch. Length of other (${other.shape[0]}), must be the same as Ndframe (${ndframe.shape[0]})` + throw new Error(msg) + } + +} + +export default new ErrorThrower() \ No newline at end of file diff --git a/src/danfojs-base/shared/tensorflowlib.ts b/src/danfojs-base/shared/tensorflowlib.ts new file mode 100644 index 00000000..47ef99ee --- /dev/null +++ b/src/danfojs-base/shared/tensorflowlib.ts @@ -0,0 +1,5 @@ + + // This file is auto-generated by prebuild.js. Do not edit! + const tf = require("@tensorflow/tfjs") +export default tf + \ No newline at end of file diff --git a/src/danfojs-base/shared/types.ts b/src/danfojs-base/shared/types.ts new file mode 100644 index 00000000..3c3e23fc --- /dev/null +++ b/src/danfojs-base/shared/types.ts @@ -0,0 +1,414 @@ +/** +* @license +* Copyright 2022 JsData. All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ========================================================================== +*/ + +import { BaseUserConfig, TableUserConfig, } from "table" +import { Config, Layout } from "plotly.js-dist-min" +import { HeadersInit } from "node-fetch"; +import Groupby from '../aggregators/groupby'; +import { ParseConfig } from 'papaparse'; +import DataFrame from '../core/frame'; +import Series from '../core/series'; +import Str from '../core/strings'; +import Dt from '../core/datetime'; + +export type DTYPES = "float32" | "int32" | "string" | "boolean" | "undefined" + +export type ArrayType2D = Array< + number[] + | string[] + | boolean[] + | (number | string | boolean)[]> + +export type ArrayType1D = Array< + number + | string + | boolean + | (number | string | boolean)> + +//Start of Config class types +export type ConfigsType = { + tableDisplayConfig?: BaseUserConfig & TableUserConfig + tableMaxRow?: number; + tableMaxColInConsole?: number; + dtypeTestLim?: number; + lowMemoryMode?: boolean + tfInstance?: any +} +//End of Config class types + +//Start of Generic class types +export interface BaseDataOptionType { + type?: number; + index?: Array + columns?: string[] + dtypes?: Array + config?: ConfigsType; +} +export interface NdframeInputDataType { + data: any + type?: number; + index?: Array + columns?: string[] + dtypes?: Array + config?: ConfigsType; + isSeries: boolean; +} +export interface LoadArrayDataType { + data: ArrayType1D | ArrayType2D + index?: Array + columns?: string[] + dtypes?: Array +} + +export interface LoadObjectDataType { + data: object | Array + type?: number; + index?: Array + columns?: string[] + dtypes?: Array +} + +export type AxisType = { + index: Array + columns: Array +} +export interface NDframeInterface { + config?: ConfigsType; + $setDtypes(dtypes: Array, infer: boolean): void; + $setIndex(index: Array): void; + $resetIndex(): void; + $setColumnNames(columns: string[]): void + get dtypes(): Array; + get ndim(): number; + get axis(): AxisType; + get index(): Array; + get columns(): string[] + get shape(): Array; + get values(): ArrayType1D | ArrayType2D + get tensor(): any + get size(): number; + print(): void; +} +//End of Generic class types + + +//Start of Series class types +type mapFunc = (val: any, i: number) => any[] + +export type mapParam = object | mapFunc +export interface SeriesInterface extends NDframeInterface { + iloc(rows: Array | boolean[]): Series; + head(rows: number): Series + tail(rows: number): Series + sample(num: number, options?: { seed?: number }): Promise; + add(other: Series | number | Array, options?: { inplace?: boolean }): Series | void; + sub(other: Series | number | Array, options?: { inplace?: boolean }): Series | void; + mul(other: Series | number | Array, options?: { inplace?: boolean }): Series | void; + div(other: Series | number | Array, options?: { inplace?: boolean }): Series | void; + pow(other: Series | number | Array, options?: { inplace?: boolean }): Series | void; + mod(other: Series | number | Array, options?: { inplace?: boolean }): Series | void; + mean(): number + median(): number + mode(): any + min(): number + max(): number + sum(): number + count(): number + maximum(other: Series | number | Array): Series + minimum(other: Series | number | Array): Series + round(dp: number, options?: { inplace?: boolean }): Series | void + std(): number + var(): number + isNa(): Series + fillNa(value: number | string | boolean, options?: { inplace?: boolean }): Series | void + sortValues(options?: { ascending?: boolean, inplace?: boolean }): Series | void + copy(): Series + describe(): Series + resetIndex(options?: { inplace?: boolean }): Series | void + setIndex(index: Array, options?: { inplace?: boolean }): Series | void + map( + callable: mapParam, + options?: { inplace?: boolean }) + : Series | void + apply( + callable: (value: any) => any, + options?: { inplace?: boolean }): Series | void + unique(): Series + nUnique(): number + valueCounts(): Series + abs(options?: { inplace?: boolean }): Series | void + cumSum(options?: { inplace?: boolean }): Series | void + cumMin(options?: { inplace?: boolean }): Series | void + cumMax(options?: { inplace?: boolean }): Series | void + cumProd(options?: { inplace?: boolean }): Series | void + lt(other: Series | number | Array | boolean[]): Series + gt(other: Series | number | Array | boolean[]): Series + le(other: Series | number | Array | boolean[]): Series + ge(other: Series | number | Array | boolean[]): Series + ne(other: Series | number | Array | boolean[]): Series + eq(other: Series | number | Array | boolean[]): Series + replace(oldValue: string | number | boolean, newValue: string | number | boolean, options?: { inplace?: boolean }): Series | void + dropNa(options?: { inplace?: boolean }): Series | void + argSort(options?: { ascending: boolean }): Series + argMax(): number + argMin(): number + get dtype(): string + dropDuplicates(options?: { keep?: "first" | "last", inplace?: boolean }): Series | void + asType(dtype: "float32" | "int32" | "string" | "boolean", options?: { inplace?: boolean }): Series | void + get str(): Str + get dt(): Dt + append(values: string | number | boolean | Series | ArrayType1D, + index: Array | number | string, + options?: { inplace?: boolean }): Series | void + toString(): string; + and(other: any): Series + or(other: any): Series + getDummies(options?: { + prefix?: string | Array, + prefixSeparator?: string | Array, + inplace?: boolean + }): DataFrame + plot(divId: string): IPlotlyLib + toCSV(options?: CsvOutputOptionsBrowser): string | void + toJSON(options?: JsonOutputOptionsBrowser): object | void + toExcel(options?: ExcelOutputOptionsBrowser): void +} + +//Start of DataFrame class types +export interface DataFrameInterface extends NDframeInterface { + [key: string]: any + drop( + options: + { + columns?: string | Array, + index?: Array, + inplace?: boolean + } + ): DataFrame | void + loc(options: + { + rows?: Array, + columns?: Array + }): DataFrame; + iloc(options: + { + rows?: Array, + columns?: Array + }): DataFrame; + head(rows?: number): DataFrame + tail(rows?: number): DataFrame + sample(num: number, options?: { seed?: number }): Promise; + add(other: DataFrame | Series | number | number[], options?: { axis?: 0 | 1, inplace?: boolean }): DataFrame | void + sub(other: DataFrame | Series | number | number[], options?: { axis?: 0 | 1, inplace?: boolean }): DataFrame | void + mul(other: DataFrame | Series | number | number[], options?: { axis?: 0 | 1, inplace?: boolean }): DataFrame | void + div(other: DataFrame | Series | number | number[], options?: { axis?: 0 | 1, inplace?: boolean }): DataFrame | void + pow(other: DataFrame | Series | number | number[], options?: { axis?: 0 | 1, inplace?: boolean }): DataFrame | void + mod(other: DataFrame | Series | number | number[], options?: { axis?: 0 | 1, inplace?: boolean }): DataFrame | void + mean(options?: { axis?: 0 | 1 }): Series + median(options?: { axis?: 0 | 1 }): Series + mode(options?: { axis?: 0 | 1, keep?: number }): Series + min(options?: { axis?: 0 | 1 }): Series + max(options?: { axis?: 0 | 1 }): Series + std(options?: { axis?: 0 | 1 }): Series + var(options?: { axis?: 0 | 1 }): Series + sum(options?: { axis?: 0 | 1 }): Series + count(options?: { axis?: 0 | 1 }): Series + round(dp?: number, options?: { inplace: boolean }): DataFrame | void + cumSum(options?: { axis?: 0 | 1 }): DataFrame | void + cumMin(options?: { axis?: 0 | 1 }): DataFrame | void + cumMax(options?: { axis?: 0 | 1 }): DataFrame | void + cumProd(options?: { axis?: 0 | 1 }): DataFrame | void + copy(): DataFrame + resetIndex(options: { inplace?: boolean }): DataFrame | void + setIndex( + options: + { + index: Array, + column?: string, + drop?: boolean, + inplace?: boolean + } + ): DataFrame | void + describe(): DataFrame + selectDtypes(include: Array): DataFrame + abs(options?: { inplace?: boolean }): DataFrame | void + query(condition: Series | Array, options?: { inplace?: boolean }): DataFrame | void + addColumn( + column: string, + values: Series | ArrayType1D, + options?: { + inplace?: boolean, + atIndex?: number | string + } + ): DataFrame | void + groupby(col: Array): Groupby + column(column: string): Series + fillNa(value: ArrayType1D, + options?: + { + columns?: Array, + inplace?: boolean + }): DataFrame | void + isNa(): DataFrame + dropNa(options?: { axis: 0 | 1, inplace?: boolean }): DataFrame | void + apply(callable: any, options?: { axis?: 0 | 1 }): DataFrame | Series + applyMap(callable: any, options?: { inplace?: boolean }): DataFrame | void + lt(other: DataFrame | Series | number, options?: { axis?: 0 | 1 }): DataFrame + gt(other: DataFrame | Series | number, options?: { axis?: 0 | 1 }): DataFrame + le(other: DataFrame | Series | number, options?: { axis?: 0 | 1 }): DataFrame + ge(other: DataFrame | Series | number, options?: { axis?: 0 | 1 }): DataFrame + ne(other: DataFrame | Series | number, options?: { axis?: 0 | 1 }): DataFrame + eq(other: DataFrame | Series | number, options?: { axis?: 0 | 1 }): DataFrame + replace( + oldValue: number | string | boolean, + newValue: number | string | boolean, + options?: { + columns?: Array + inplace?: boolean + } + ): DataFrame | void + transpose(options?: { inplace?: boolean }): DataFrame | void + get T(): DataFrame + get ctypes(): Series + asType( + column: string, + dtype: "float32" | "int32" | "string" | "boolean", + options?: { inplace?: boolean } + ): DataFrame | void + nUnique(axis: 0 | 1): Series + rename( + mapper: object, + options?: { + axis?: 0 | 1 + inplace?: boolean + } + ): DataFrame | void + sortIndex(options?: + { + inplace?: boolean + ascending?: boolean + } + ): DataFrame | void + sortValues( + column: string, + options?: + { + inplace?: boolean + ascending?: boolean + } + ): DataFrame | void + append( + newValues: ArrayType1D | ArrayType2D | Series | DataFrame, + index: Array | number | string, + options?: { + inplace?: boolean, + } + ): DataFrame | void + toString(): string; + getDummies(options?: { + columns?: string | Array, + prefix?: string | Array, + prefixSeparator?: string | Array, + inplace?: boolean + }): DataFrame | void + plot(divId: string): IPlotlyLib + toCSV(options?: CsvOutputOptionsBrowser): string | void + toJSON(options?: JsonOutputOptionsBrowser): object | void + toExcel(options?: ExcelOutputOptionsBrowser): void +} + +export interface DateTime { + month(): Series + dayOfWeek(): Series + year(): Series + monthName(): Series + dayOfMonth(): Series + hours(): Series + seconds(): Series + minutes(): Series +} + +interface CustomConfig extends Config { + x: string + y: string, + values: string, + labels: string, + rowPositions: number[], + columnPositions: number[], + grid: { rows: number, columns: number }, + tableHeaderStyle: any, + tableCellStyle: any, + columns: string[]; +} + +export type PlotConfigObject = { + config?: Partial + layout?: Partial +} + +export type InternalPlotConfigObject = { + config: Partial + layout: Partial +} + +export interface IPlotlyLib { + line(plotConfig?: PlotConfigObject): void + bar(plotConfig?: PlotConfigObject): void + scatter(plotConfig?: PlotConfigObject): void + hist(plotConfig?: PlotConfigObject): void + pie(plotConfig?: PlotConfigObject): void + box(plotConfig?: PlotConfigObject): void + violin(plotConfig?: PlotConfigObject): void + table(plotConfig?: PlotConfigObject): void +} + +export interface CsvInputOptionsBrowser extends ParseConfig { + frameConfig?: BaseDataOptionType +} +export type ExcelInputOptionsBrowser = { + sheet?: number, + method?: string, + headers?: any, + frameConfig?: BaseDataOptionType +} +export type JsonInputOptionsBrowser = { + method?: string, + headers?: any, + frameConfig?: BaseDataOptionType +} + +export interface CsvInputOptionsNode extends ParseConfig { + frameConfig?: BaseDataOptionType +} + +export type ExcelInputOptionsNode = { + sheet?: number, + method?: string, + headers?: HeadersInit + frameConfig?: BaseDataOptionType +} +export type JsonInputOptionsNode = { + method?: string, + headers?: HeadersInit + frameConfig?: BaseDataOptionType +} + +export type CsvOutputOptionsBrowser = { fileName?: string, sep?: string, header?: boolean, download?: boolean }; +export type ExcelOutputOptionsBrowser = { fileName?: string, sheetName?: string }; +export type JsonOutputOptionsBrowser = { fileName?: string, format?: "row" | "column", download?: boolean }; + +export type CsvOutputOptionsNode = { filePath?: string, sep?: string, header?: boolean } +export type JsonOutputOptionsNode = { format?: "row" | "column", filePath?: string } +export type ExcelOutputOptionsNode = { filePath?: string, sheetName?: string } diff --git a/src/danfojs-base/shared/utils.ts b/src/danfojs-base/shared/utils.ts new file mode 100644 index 00000000..16a11df1 --- /dev/null +++ b/src/danfojs-base/shared/utils.ts @@ -0,0 +1,800 @@ +/** +* @license +* Copyright 2022 JsData. All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ========================================================================== +*/ + +import { BASE_CONFIG } from './defaults' +import Config from './config'; +import { ArrayType1D, ArrayType2D } from './types'; +import { Series } from '../'; +import { DataFrame } from '../'; +import ErrorThrower from '../shared/errors' + +const config = new Config(BASE_CONFIG); + +/** + * General Utility class + */ +export default class Utils { + /** + * Removes an element from a 1D array + * + * ```js + * + * ``` + * @param arr The array to filter. + * @param index The index to filter by. + */ + removeElementFromArray(arr: ArrayType1D, index: number): ArrayType1D { + const newArr = arr.filter((_, i: number) => i != index); + return newArr; + } + + /** + * Check if value is a string. + * @param value The value to check. + * @returns + */ + isString(value: T): boolean { + return typeof value === "string"; + } + + /** + * Checks if value is a number. + * @param value The value to check. + * @returns + */ + isNumber(value: T): boolean { + return typeof value === "number" && isFinite(value); + } + + /** + * Checks if value is an object. + * @param value The value to check. + * @returns + */ + isObject(value: any): boolean { + return value && typeof value === "object" && value.constructor && value.constructor.name === "Object"; + } + + /** + * Checks if a value is null + * @param value The value to check. + * @returns + */ + isNull(value: T): boolean { + return value === null; + } + + /** + * Checks if a value is undefined + * @param value The value to check. + * @returns + */ + isUndefined(value: T): boolean { + return typeof value === "undefined"; + } + + /** + * Checks if a value is empty. Empty means it's either null, undefined or NaN + * @param value The value to check. + * @returns + */ + isEmpty(value: T): boolean { + return value === undefined || value === null || (isNaN(value as any) && typeof value !== "string"); + } + + /** + * Generates an array of integers between specified range + * @param start The starting number. + * @param end The ending number. + */ + range(start: number, end: number): Array { + if (end < start) { + throw new Error("ParamError: end must be greater than start") + } + + if (start === end) { + return [start] + } + + const arr = []; + for (let i = start; i <= end; i++) { + arr.push(i); + } + return arr; + } + + /** + * Checks if object has the specified key + * @param obj The object to check. + * @param key The key to find. + */ + keyInObject(obj: object, key: number | string): boolean { + return Object.prototype.hasOwnProperty.call(obj, key) + } + + /** + * Transposes an array of array + * @param obj The object to check. + * @param key The key to find. + */ + transposeArray(arr: ArrayType1D | ArrayType2D): ArrayType1D | ArrayType2D { //old name: __get_col_values + if (arr.length === 0) return arr + + const rowLen: number = arr.length; + if (Array.isArray(arr[0])) { + const colLen: number = arr[0].length; + const newArr = []; + + for (let i = 0; i <= colLen - 1; i++) { + const temp = []; + for (let j = 0; j < rowLen; j++) { + const _elem = (arr as any)[j][i] + temp.push(_elem); + } + newArr.push(temp); + } + return newArr; + } else { + return arr; + } + } + + /** + * Retrieve row array and column names from an object of the form {a: [1,2,3,4], b: [30,20, 30, 20]} + * @param obj The object to retrieve rows and column names from. + */ + getRowAndColValues(obj: object): [ArrayType1D | ArrayType2D, string[]] { + const colNames = Object.keys(obj); + const colData = Object.values(obj); + const firstColLen = colData[0].length; + + colData.forEach((cdata) => { + if (cdata.length != firstColLen) { + throw Error("Length Error: Length of columns must be the same!"); + } + }); + + const rowsArr = this.transposeArray(colData) + return [rowsArr, colNames]; + } + + /** + * Converts a 2D array of array to 1D array for Series Class + * @param arr The array to convert. + */ + convert2DArrayToSeriesArray(arr: ArrayType2D): Array { + const newArr = arr.map((val) => { + if (this.isObject(val)) { + return JSON.stringify(val) + } else { + return `${val}` + } + }); + return newArr; + } + + /** + * Replaces all missing values with NaN. Missing values are undefined, Null and Infinity + * @param arr The array + * @param isSeries Whether the arr is a series or not + */ + replaceUndefinedWithNaN(arr: ArrayType1D | ArrayType2D, isSeries: boolean): ArrayType1D | ArrayType2D { + if (arr.length === 0) return arr; + + if (isSeries && Array.isArray(arr)) { + const newArr = arr.map((ele) => { + if (typeof ele === "undefined") { + return NaN; + } + if (typeof ele === "number" && (isNaN(ele) || ele == Infinity)) { + return NaN; + } + if (ele == null) { + return NaN; + } + return ele + }); + return newArr as ArrayType1D + } else { + const newArr = [] + if (Array.isArray(arr)) { + for (let i = 0; i < arr.length; i++) { + const innerArr = arr[i] + const temp = (innerArr as unknown as ArrayType2D).map((ele: any) => { + if (typeof ele === "undefined") { + return NaN; + } + if (typeof ele === "number" && (isNaN(ele) || ele == Infinity)) { + return NaN; + } + if (ele == null) { + return NaN; + } + return ele + }); + newArr.push(temp); + } + } + return newArr; + } + } + + /** + * Infer data type from an array or array of arrays + * @param arr An array or array of arrays + */ + inferDtype(arr: ArrayType1D | ArrayType2D) { + const self = this; + if (this.is1DArray(arr)) { + return [this.$typeChecker(arr)]; + } else { + const arrSlice = this.transposeArray(arr.slice(0, config.getDtypeTestLim)) + const dtypes = arrSlice.map((innerArr) => { + return self.$typeChecker(innerArr as any); + }); + return dtypes; + } + } + + /** + * Private type checker used by inferDtype function + * @param arr The array + */ + private $typeChecker(arr: ArrayType1D | ArrayType2D) { + let dtypes: string; + let lim: number; + let intTracker: Array = []; + let floatTracker: Array = []; + let stringTracker: Array = []; + let boolTracker: Array = []; + + if (arr.length < config.getDtypeTestLim) { + lim = arr.length; + } else { + lim = config.getDtypeTestLim; + } + + const arrSlice = arr.slice(0, lim); + + for (let i = 0; i < lim; i++) { + const ele = arrSlice[i]; + if (typeof ele == "boolean") { + floatTracker.push(false); + intTracker.push(false); + stringTracker.push(false); + boolTracker.push(true); + } else if (this.isEmpty(ele)) { + floatTracker.push(true); + intTracker.push(false); + stringTracker.push(false); + boolTracker.push(false); + } else if (!isNaN(Number(ele))) { + if ((ele as unknown as string).toString().includes(".")) { + floatTracker.push(true); + intTracker.push(false); + stringTracker.push(false); + boolTracker.push(false); + } else { + floatTracker.push(false); + intTracker.push(true); + stringTracker.push(false); + boolTracker.push(false); + } + } else { + floatTracker.push(false); + intTracker.push(false); + stringTracker.push(true); + boolTracker.push(false); + } + } + + const even = (ele: number | string | boolean) => ele == true; + + if (stringTracker.some(even)) { + dtypes = "string"; + } else if (floatTracker.some(even)) { + dtypes = "float32"; + } else if (intTracker.some(even)) { + dtypes = "int32"; + } else if (boolTracker.some(even)) { + dtypes = "boolean"; + } else { + dtypes = "undefined"; + } + + return dtypes; + } + + /** + * Returns the unique values in an 1D array + * @param arr The array + */ + unique(arr: ArrayType1D): ArrayType1D { + const uniqueArr = new Set(arr); + return Array.from(uniqueArr); + } + + /** + * Checks if array is 1D + * @param arr The array + */ + is1DArray(arr: ArrayType1D | ArrayType2D): boolean { + if ( + typeof arr[0] == "number" || + typeof arr[0] == "string" || + typeof arr[0] == "boolean" + ) { + return true; + } else { + return false; + } + } + + /** + * Converts an array to an object using array index as object keys + * @param arr The array + */ + convertArrayToObject(arr: ArrayType1D | ArrayType2D) { + const arrObj: any = {}; + for (let i = 0; i < arr.length; i++) { + arrObj[i] = arr[i]; + + } + return arrObj; + } + + /** + * Count the NaN and non-NaN values present in an array + * @param arr Array object + * @param val whether to return the value count instead of the null count + * @param isSeries Whether the array is of type series or not + */ + countNaNs(arr: ArrayType1D | ArrayType2D, returnVal: boolean = true, isSeries: boolean): number | Array { + if (isSeries) { + let nullCount = 0; + let valCount = 0; + for (let i = 0; i < arr.length; i++) { + const ele = arr[i]; + if (Number.isNaN(ele)) { + nullCount = nullCount + 1; + } else { + valCount = valCount + 1; + } + + } + if (returnVal) { + return valCount; + } else { + return nullCount; + } + } else { + const resultArr = []; + for (let i = 0; i < arr.length; i++) { + const innerArr = arr[i]; + let nullCount = 0; + let valCount = 0; + for (let i = 0; i < (innerArr as unknown as ArrayType2D).length; i++) { + const ele = (innerArr as unknown as ArrayType2D)[i]; + if (Number.isNaN(ele)) { + nullCount = nullCount + 1; + } else { + valCount = valCount + 1; + } + } + + if (returnVal) { + resultArr.push(valCount); + } else { + resultArr.push(nullCount); + } + } + return resultArr; + } + } + + /** + * Round elements of an array or array of arrays to specified dp + * @param arr The Array to round + * @param dp The number of dp to round to + * @param isSeries Whether the array is of type Series or not + */ + round(arr: Array, dp: number = 1, isSeries: boolean): ArrayType1D | ArrayType2D { + if (dp < 0) { + dp = 1; + } + + if (isSeries) { + const newArr = []; + for (let i = 0; i < arr.length; i++) { + const ele = arr[i]; + if (typeof ele == "number" && !isNaN(ele) && ele !== undefined && ele !== null) { + newArr.push(Number((ele).toFixed(dp))); + } else { + newArr.push(ele) + } + } + return newArr as ArrayType1D + } else { + const resultArr = []; + for (let i = 0; i < arr.length; i++) { + const innerVal = arr[i]; + const newArr: Array = []; + if (Array.isArray(innerVal)) { + for (let i = 0; i < innerVal.length; i++) { + const ele = innerVal[i]; + if (typeof ele == "number" && !isNaN(ele) && ele !== undefined && ele !== null) { + newArr.push(Number((ele).toFixed(dp))); + } else { + newArr.push(ele) + } + } + resultArr.push(newArr); + } else { + if (typeof innerVal == "number" && !isNaN(innerVal) && innerVal !== undefined && innerVal !== null) { + newArr.push(Number((innerVal).toFixed(dp))); + } else { + newArr.push(innerVal) + } + } + + } + return resultArr; + } + } + + /** + * Checks if a func is a function + * @param func + */ + isFunction(func: object): boolean { + return typeof func == "function"; + } + + /** + * Generates n random numbers between start and end. + * @param start + * @param end + * @param size + */ + randNumberGenerator(start: number, end: number, size: number) { + let genNum: Array = []; + + function randi(a: number, b: number) { + return Math.floor(Math.random() * (b - a) + a); + } + + function recursive(val: number, arr: Array): any { + if (!arr.includes(val)) { + return val; + } + val = randi(start, end); + recursive(val, arr); + } + + for (let i = 0; i < size; i++) { + let genVal = randi(start, end); + let recursiveVal = recursive(genVal, genNum); + genNum.push(recursiveVal); + } + return genNum; + } + + /** + * Throws error when a required parameter is missing. + * @param paramsObject The parameters passed to the function + * @param paramsNeeded The required parameters in the function + */ + throwErrorOnWrongParams(paramsObject: object, paramsNeeded: Array) { + const keys = Object.keys(paramsObject); + const bool = []; + for (let i = 0; i < keys.length; i++) { + if (paramsNeeded.includes(keys[i])) { + bool.push(true); + } else { + bool.push(false); + } + } + const truthy = (element: boolean) => element == false; + if (bool.some(truthy)) { + throw Error( + `Params Error: Required parameter not found. Your params must include the following [${paramsNeeded}]` + ); + } + } + + /** + * Maps integer values (0, 1) to boolean (false, true) + * @param arr The array of integers + * @param dim The dimension of the array + */ + mapIntegersToBooleans(arr: Array, dim: number): Array { + if (dim == 2) { + const newArr: Array = []; + arr.map((innerArr) => { + const temp: Array = []; + (innerArr as Array).map((val) => temp.push(val == 1)); + newArr.push(temp); + }); + return newArr; + } else { + const newArr: Array = []; + arr.map((val) => newArr.push(val == 1)); + return newArr; + } + } + + /** + * Maps boolean values (false, true) to integer equivalent (0, 1) + * @param arr The array of booleans + * @param dim The dimension of the array + */ + mapBooleansToIntegers(arr: Array, dim: number): Array { + if (dim == 2) { + const newArr: Array = []; + arr.map((innerArr) => { + const temp: Array = []; + (innerArr as Array).map((val) => temp.push(val ? 1 : 0)); + newArr.push(temp); + }); + return newArr; + } else { + const newArr: Array = []; + arr.map((val) => newArr.push(val ? 1 : 0)); + return newArr; + } + } + + /** + * Generates an array of dim (row x column) with inner values set to zero + * @param row + * @param column + */ + zeros(row: number, column: number): ArrayType1D | ArrayType2D { + const zeroData = []; + for (let i = 0; i < row; i++) { + const colData = Array(column); + for (let j = 0; j < column; j++) { + colData[j] = 0; + } + zeroData.push(colData); + } + return zeroData; + } + + /** + * Shuffles and returns a random slice of an array + * @param num + * @param array + */ + shuffle(array: ArrayType1D | ArrayType2D, num: number): ArrayType1D | ArrayType2D { + let i = array.length; + let j = 0; + let temp; + + while (i--) { + j = Math.floor(Math.random() * (i + 1)); + temp = array[i]; + array[i] = array[j]; + array[j] = temp; + } + + return array.slice(0, num); + } + + /** + * Sorts an array in specified order + * @param arr + * @param ascending + * @returns + */ + sort(arr: Array, ascending: boolean = true): Array { + const sorted = [...arr] + return sorted.sort((a, b) => { + if (ascending) { + if (typeof a === "string" && typeof b === "string") { + return a.charCodeAt(0) - b.charCodeAt(0); + } else { + return (a as unknown as number) - (b as unknown as number) + } + } else { + if (typeof a === "string" && typeof b === "string") { + return b.charCodeAt(0) - a.charCodeAt(0); + } else { + return (b as unknown as number) - (a as unknown as number) + } + } + }); + } + + /** + * Checks if current environment is Browser + */ + isBrowserEnv() { + const isBrowser = new Function( + "try {return this===window;}catch(e){ return false;}" + ); + return isBrowser(); + } + + /** + * Checks if current environment is Node + */ + isNodeEnv() { + const isNode = new Function( + "try {return this===global;}catch(e){return false;}" + ); + return isNode(); + } + + /** + * Remove NaN values from 1D array + * @param arr + */ + removeMissingValuesFromArray(arr: Array | ArrayType1D) { + const values = arr.filter((val) => { + return !(this.isEmpty(val)) + }) + return values; + } + + + /** + * Replace NaN with null before tensor operations + * @param arr + */ + replaceNanWithNull(arr: ArrayType1D | ArrayType2D) { + const values = arr.map((val) => { + if (isNaN(val as unknown as number)) { + return null; + } else { + return val; + } + }); + return values; + } + + /** + * Get duplicate values in a array + * @param arr + */ + getDuplicate(arr: Array) { + const tempObj: any = {}; + const resultObj: any = {}; + + for (let i = 0; i < arr.length; i++) { + const val = arr[i]; + if (this.keyInObject(tempObj, val as unknown as string | number)) { + tempObj[val]["count"] += 1; + tempObj[val]["index"].push(i); + } else { + tempObj[val] = {}; + tempObj[val]["count"] = 1; + tempObj[val]["index"] = [i]; + } + } + + for (let key in tempObj) { + if (tempObj[key]["count"] >= 2) { + resultObj[key] = {}; + resultObj[key]["count"] = tempObj[key]["count"]; + resultObj[key]["index"] = tempObj[key]["index"]; + } + } + + return resultObj; + } + + /** + * Returns the index of a sorted array + * @param arr1 The first array + * @param arr2 The second array + * @param dtype The data type of the arrays + * + * @returns sorted index + */ + sortArrayByIndex(arr1: ArrayType1D | ArrayType2D, arr2: ArrayType1D | ArrayType2D, dtype: string) { + const sortedIdx = arr1.map((item, index) => { + return [arr2[index], item]; + }); + if (dtype == "string") { + sortedIdx.sort(); + } else { + sortedIdx.sort(([arg1], [arg2]) => (arg2 as unknown as number) - (arg1 as unknown as number)); + } + + return sortedIdx.map(([, item]) => item) as number[] + } + + /** + * Returns a new series with properties of the old series + * + * @param series The series to copy + */ + createNdframeFromNewDataWithOldProps({ ndFrame, newData, isSeries }: { ndFrame: Series, newData: any, isSeries: boolean }) { + if (isSeries) { + return new Series( + newData, + { + index: [...ndFrame.index], + columns: [...ndFrame.columns], + dtypes: [...ndFrame.dtypes], + config: { ...ndFrame.config } + }) + } else { + return new DataFrame(newData, + { + index: [...ndFrame.index], + columns: [...ndFrame.columns], + dtypes: [...ndFrame.dtypes], + config: { ...ndFrame.config } + }) + } + } + + /** + * Checks if two series are compatible for a mathematical operation + * @param object + * + * firstSeries ==> First Series object + * + * secondSeries ==> Second Series object to comapre with + * + * operation ==> The mathematical operation + */ + checkSeriesOpCompactibility({ firstSeries, secondSeries, operation }: { + firstSeries: Series, secondSeries: Series, operation: string + }): void { + + if (firstSeries.shape[0] != secondSeries.shape[0]) { + ErrorThrower.throwSeriesMathOpLengthError(firstSeries, secondSeries) + } + if (firstSeries.dtypes[0] == 'string' || secondSeries.dtypes[0] == 'string') { + ErrorThrower.throwStringDtypeOperationError(operation) + } + } + + /** + * Custom sort for an array of index and values + * @param arr The array of objects to sort + * @param ascending Whether to sort in ascending order or not + */ + sortObj( + arr: Array<{ index: number | string, value: number | string | boolean }>, + ascending: boolean + ) { + return arr.sort((obj1, obj2) => { + const a = obj2.value; + const b = obj1.value; + + if (!ascending) { + if (typeof a === "string" && typeof b === "string") { + return a.charCodeAt(0) - b.charCodeAt(0); + } else if ((typeof a === "number" && typeof b === "number") || (typeof a === "boolean" && typeof b === "boolean")) { + return Number(a) - Number(b); + } else { + throw Error('ParamError: column values must be either numbers or strings'); + } + } else { + if (typeof a === "string" && typeof b === "string") { + return b.charCodeAt(0) - a.charCodeAt(0); + } else if ((typeof a === "number" && typeof b === "number") || (typeof a === "boolean" && typeof b === "boolean")) { + return Number(b) - Number(a); + } else { + throw Error('ParamError: column values must be either numbers or strings'); + } + } + }); + } +} \ No newline at end of file diff --git a/src/danfojs-base/transformers/concat.ts b/src/danfojs-base/transformers/concat.ts new file mode 100644 index 00000000..4a3c66e2 --- /dev/null +++ b/src/danfojs-base/transformers/concat.ts @@ -0,0 +1,147 @@ +/** +* @license +* Copyright 2022 JsData. All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ========================================================================== +*/ + +import Series from "../core/series" +import DataFrame from "../core/frame" +import { ArrayType1D, ArrayType2D } from "../shared/types" + +/** + * + * @param dfList Array + * @param axis number + * @returns DataFrame + */ +function processColumn(dfList: Array, axis: number ): DataFrame { + let allDf: any = {} + let dublicateColumns: any = {} + let maxLen = 0 + for(let i=0; i < dfList.length; i++) { + let df = dfList[i] + let columnData: ArrayType2D; + if ( df instanceof DataFrame) { + columnData = df.getColumnData as ArrayType2D + } else { + columnData = [df.values] as ArrayType2D + } + let columns = df.columns + for(let j=0; j < columns.length; j++) { + let column = columns[j] + let colData: ArrayType1D = columnData[j] + if (colData.length > maxLen) { + maxLen = colData.length + } + if (!(column in allDf)) { + allDf[column] = colData + dublicateColumns[column] = 0 + } else { + dublicateColumns[column] +=1 + column += dublicateColumns[column] + allDf[column] = colData + } + } + } + Object.keys(allDf).forEach(value => { + let colLength = allDf[value].length + if (colLength < maxLen) { + let residualLen = maxLen - colLength + let nanList = new Array(residualLen).fill(NaN) + allDf[value].push(...nanList) + } + }) + + return new DataFrame(allDf) +} + +/** + * Concat data along rows + * @param dfList Array + * @param axis Array + * @returns DataFrame + */ +function processRow(dfList: Array, axis: number ): DataFrame | Series { + let allDf: any = {} + let maxLen = 0 + for (let i=0; i < dfList.length; i++) { + let df = dfList[i] + let columns = df.columns + let columnData: ArrayType2D; + if ( df instanceof DataFrame) { + columnData = df.getColumnData as ArrayType2D + } else { + columnData = [df.values] as ArrayType2D + } + + + if (i ===0) { + for(let j=0; j < columns.length; j++) { + let column = columns[j] + let colData = columnData[j] + allDf[column] = colData + } + } else { + let nonColumn = Object.keys(allDf).filter( (key:any) =>{ + return !columns.includes(key) + }) + + for(let j=0; j < columns.length; j++) { + let column = columns[j] + let colData = columnData[j] + if (Object.keys(allDf).includes(column)) { + allDf[column].push(...colData) + } + else { + let residualArray = new Array(maxLen).fill(NaN) + residualArray.push(...colData) + allDf[column] = residualArray + } + } + if (nonColumn.length > 0) { + let currentDfLen = columnData[0].length + for( let j=0; j < nonColumn.length; j++) { + let column = nonColumn[j] + let residualArray = new Array(currentDfLen).fill(NaN) + allDf[column].push(...residualArray) + } + } + } + maxLen += columnData[0].length + } + + if (Object.keys(allDf).length === 1) { + return new Series(Object.values(allDf)[0]) + } + return new DataFrame(allDf) +} + +/** +* Concatenate pandas objects along a particular axis. +* @param object +* dfList: Array of DataFrame or Series +* axis: axis of concatenation 1 or 0 +* @returns {DataFrame} +* @example +* concat({dfList: [df1, df2, df3], axis: 1}) +*/ +function concat({dfList, axis}: { + dfList : Array, + axis: 1 | 0 +}): DataFrame | Series { + if (axis === 1) { + return processColumn(dfList, axis) + } + return processRow(dfList, 0) +} + +export default concat \ No newline at end of file diff --git a/src/danfojs-base/transformers/encoders/dummy.encoder.ts b/src/danfojs-base/transformers/encoders/dummy.encoder.ts new file mode 100644 index 00000000..64c13992 --- /dev/null +++ b/src/danfojs-base/transformers/encoders/dummy.encoder.ts @@ -0,0 +1,160 @@ +/** +* @license +* Copyright 2022 JsData. All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ========================================================================== +*/ +import DataFrame from "../../core/frame" +import Series from "../../core/series" +import Utils from "../../shared/utils" +import { ArrayType1D, ArrayType2D } from "../../shared/types" + +const utils = new Utils() + +/** + * Generate one-hot encoding for categorical columns in an Array, Series or Dataframe. + * @param data Series or Dataframe + * @param columns Columns to encode + * @param prefix Prefix for the new columns + * @param prefixSeparator Separator for the prefix and the column name + * @returns Encoded Dataframe + * @example + * import { DataFrame, DummyEncoder }from 'danfojs'; + * const df = new DataFrame([[1,2,3], [4,5,6]], { columns: ['a', 'b', 'c'] }); + * const df2 = new DummyEncoder({data: df, columns: ['a', 'b'], prefix: 'enc', prefixSeparator: '#'}).encode(); + * df2.print(); + */ +function dummyEncode( + data: Series | DataFrame, + options?: { + columns?: string | Array, + prefix?: string | Array, + prefixSeparator?: string | Array + }) { + let { columns, prefix, prefixSeparator } = { columns: null, prefix: null, prefixSeparator: "_", ...options } + + if (!data) { + throw new Error('ParamError: data must be one of Array, Series or DataFrame') + } + + if (data instanceof Series || data instanceof DataFrame) { + if (!columns) { + const colsWithStringDtype: Array = [] + data.dtypes.forEach((dtype, index) => { + if (dtype === "string") { + colsWithStringDtype.push(data.columns[index]) + } + }) + columns = colsWithStringDtype as string[] + } + } else { + throw new Error('ParamError: data must be one of Array, Series or DataFrame') + } + + + if (typeof columns === "string") { + columns = [columns] + if (Array.isArray(prefix) && prefix.length === 1) { + prefix = prefix + } else if (typeof prefix === "string") { + prefix = [prefix] + } else { + throw new Error('ParamError: prefix must be a string, or an array of same length as columns') + } + + if (Array.isArray(prefixSeparator) && prefixSeparator.length === 1) { + prefixSeparator = prefixSeparator + } else if (typeof prefixSeparator === "string") { + prefixSeparator = [prefixSeparator] + } else { + throw new Error('ParamError: prefix must be a string, or an array of same length as columns') + } + } else if (Array.isArray(columns)) { + if (prefix) { + if (Array.isArray(prefix) && prefix.length !== columns.length) { + throw new Error(`ParamError: prefix and data array must be of the same length. If you need to use the same prefix, then pass a string param instead. e.g {prefix: "${prefix}"}`) + } + + if (typeof prefix === "string") { + prefix = columns.map(_ => prefix as string) + } + } + + if (prefixSeparator) { + if (Array.isArray(prefixSeparator) && prefixSeparator.length !== columns.length) { + throw new Error(`ParamError: prefixSeparator and data array must be of the same length. If you need to use the same prefix separator, then pass a string param instead. e.g {prefixSeparator: "${prefixSeparator}"}`) + } + + if (typeof prefixSeparator === "string") { + prefixSeparator = columns.map(_ => prefixSeparator as string) + } + } + + } else { + throw new Error('ParamError: columns must be a string or an array of strings') + } + + if (data instanceof Series) { + const colData = data.values as ArrayType1D + const newColumnNames = [] + const uniqueValues = Array.from(new Set(colData)) + const oneHotArr: any = utils.zeros(colData.length, uniqueValues.length) + + for (let i = 0; i < colData.length; i++) { + const index = uniqueValues.indexOf(colData[i]) + oneHotArr[i][index] = 1 + } + + for (let i = 0; i < uniqueValues.length; i++) { + const prefixToAdd = prefix ? prefix[0] : i + newColumnNames.push(`${prefixToAdd}${prefixSeparator[0]}${uniqueValues[i]}`) + + } + + return new DataFrame(oneHotArr, { columns: newColumnNames }) + + } else { + + const dfWithSelectedColumnsDropped = data.drop({ columns }) + let newData = dfWithSelectedColumnsDropped?.values as ArrayType2D + const newColumnNames = dfWithSelectedColumnsDropped?.columns as Array + + for (let i = 0; i < columns.length; i++) { + const column = columns[i] + const colData = data.column(column).values as Array + + const uniqueValues = Array.from(new Set(colData)) + const oneHotArr: any = utils.zeros(colData.length, uniqueValues.length) + + for (let j = 0; j < colData.length; j++) { + const index = uniqueValues.indexOf(colData[j]) + oneHotArr[j][index] = 1 + const prefixToAdd = prefix ? prefix[i] : column + const newColName = `${prefixToAdd}${prefixSeparator[i]}${colData[j]}`; + + if (!newColumnNames.includes(newColName)) { + newColumnNames.push(newColName); + } + } + + for (let k = 0; k < newData.length; k++) { + newData[k] = [...newData[k], ...oneHotArr[k]] + + } + + } + + return new DataFrame(newData, { columns: newColumnNames }) + } + +} + +export default dummyEncode diff --git a/src/danfojs-base/transformers/encoders/label.encoder.ts b/src/danfojs-base/transformers/encoders/label.encoder.ts new file mode 100644 index 00000000..3e00121e --- /dev/null +++ b/src/danfojs-base/transformers/encoders/label.encoder.ts @@ -0,0 +1,176 @@ +/** +* @license +* Copyright 2022 JsData. All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ========================================================================== +*/ + +import tensorflow from '../../shared/tensorflowlib' +import Series from "../../core/series" +import Utils from "../../shared/utils" + +const utils = new Utils() + +/** + * Encode target labels with value between 0 and n_classes-1. + */ +export default class LabelEncoder { + private $labels: { [key: string]: number } + + constructor() { + this.$labels = {} + } + + private $getData(data: Array | typeof tensorflow.Tensor | Series) { + let $data: Array + + if (data instanceof Array) { + if (utils.is1DArray(data)) { + $data = data + } else { + throw new Error("ValueError: data must be a 1D array.") + } + } else if (data instanceof Series) { + $data = data.values as Array + } else if (data instanceof tensorflow.Tensor) { + $data = data.arraySync() as Array + } else { + throw new Error("ParamError: data must be one of Array, 1d Tensor or Series.") + } + return $data + } + + /** + * Maps values to unique integer labels between 0 and n_classes-1. + * @param data 1d array of labels, Tensor, or Series to fit. + * @example + * ``` + * const encoder = new LabelEncoder() + * encoder.fit(["a", "b", "c", "d"]) + * ``` + */ + fit(data: Array | typeof tensorflow.Tensor | Series) { + const $data = this.$getData(data) + const dataSet = Array.from(new Set($data)) + const tempObj: { [key: string | number]: number } = {} + dataSet.forEach((value, index) => { + tempObj[value] = index + }) + this.$labels = tempObj + return this + } + + /** + * Encode labels with value between 0 and n_classes-1. + * @param data 1d array of labels, Tensor, or Series to be encoded. + * @example + * ``` + * const encoder = new LabelEncoder() + * encoder.fit(["a", "b", "c", "d"]) + * console.log(encoder.transform(["a", "b", "c", "d"])) + * // [0, 1, 2, 3] + * ``` + */ + transform(data: Array | typeof tensorflow.Tensor | Series) { + const $data = this.$getData(data) + const encodedData: Array = $data.map(value => { + const label = this.$labels[value] !== undefined ? this.$labels[value] : -1 + return label + }) + + if (data instanceof Array) { + return encodedData + } else if (data instanceof Series) { + return new Series(encodedData) + } else { + return tensorflow.tensor1d(encodedData) + } + } + + /** + * Fit and transform data in one step. + * @param data 1d array of labels, Tensor, or Series to be encoded. + * @example + * ``` + * const encoder = new LabelEncoder() + * encoder.fitTransform(["a", "b", "c", "d"]) + * // [0, 1, 2, 3] + * ``` + */ + fitTransform(data: Array | typeof tensorflow.Tensor | Series) { + this.fit(data) + return this.transform(data) + } + + /** + * Inverse transform values back to original values. + * @param data 1d array of labels, Tensor, or Series to be decoded. + * @example + * ``` + * const encoder = new LabelEncoder() + * encoder.fit(["a", "b", "c", "d"]) + * console.log(encoder.inverseTransform([0, 1, 2, 3])) + * // ["a", "b", "c", "d"] + * ``` + */ + inverseTransform(data: Array | typeof tensorflow.Tensor | Series) { + const $data = this.$getData(data) + const tempData = $data.map(value => { + return Object.keys(this.$labels).find(key => this.$labels[key] === value) + }) + + const decodedData = tempData.map(value => { + if (isNaN(parseInt(value as any))) { + return value + } else { + return Number(value) + } + }) + + if (data instanceof Array) { + return decodedData + } else if (data instanceof Series) { + return new Series(decodedData) + } else { + return tensorflow.tensor1d(decodedData as any) + } + } + + /** + * Get the number of classes. + * @returns number of classes. + * @example + * ``` + * const encoder = new LabelEncoder() + * encoder.fit(["a", "b", "c", "d"]) + * console.log(encoder.nClasses) + * // 4 + * ``` + */ + get nClasses(): number { + return Object.keys(this.$labels).length + } + + /** + * Get the mapping of classes to integers. + * @returns mapping of classes to integers. + * @example + * ``` + * const encoder = new LabelEncoder() + * encoder.fit(["a", "b", "c", "d"]) + * console.log(encoder.classes) + * // {a: 0, b: 1, c: 2, d: 3} + * ``` + */ + get classes(): { [key: string]: number } { + return this.$labels + } +} \ No newline at end of file diff --git a/src/danfojs-base/transformers/encoders/one.hot.encoder.ts b/src/danfojs-base/transformers/encoders/one.hot.encoder.ts new file mode 100644 index 00000000..69b613a3 --- /dev/null +++ b/src/danfojs-base/transformers/encoders/one.hot.encoder.ts @@ -0,0 +1,117 @@ +/** +* @license +* Copyright 2022 JsData. All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ========================================================================== +*/ + +import DataFrame from "../../core/frame"; +import tensorflow from '../../shared/tensorflowlib' +import Series from "../../core/series" +import Utils from "../../shared/utils" + +const utils = new Utils() + +/** + * Fits a OneHotEncoder to the data. + * @example + * ```js + * const encoder = new OneHotEncoder() + * encoder.fit(["a", "b", "c"]) + * ``` +*/ +export default class OneHotEncoder { + private $labels: Array + + constructor() { + this.$labels = [] + } + + private $getData(data: Array | typeof tensorflow.Tensor | Series) { + let $data: Array + + if (data instanceof Array) { + if (utils.is1DArray(data)) { + $data = data + } else { + throw new Error("ValueError: data must be a 1D array.") + } + } else if (data instanceof Series) { + $data = data.values as Array + } else if (data instanceof tensorflow.Tensor) { + $data = data.arraySync() as Array + } else { + throw new Error("ParamError: data must be one of Array, 1d Tensor or Series.") + } + return $data + } + + /** + * Fits a OneHotEncoder to the data. + * @param data 1d array of labels, Tensor, or Series to be encoded. + * @returns OneHotEncoder + * @example + * ```js + * const encoder = new OneHotEncoder() + * encoder.fit(["a", "b", "c"]) + * ``` + */ + public fit(data: Array | typeof tensorflow.Tensor | Series) { + const $data = this.$getData(data) + const dataSet = Array.from(new Set($data)) + this.$labels = dataSet + return this + } + + /** + * Encodes the data using the fitted OneHotEncoder. + * @param data 1d array of labels, Tensor, or Series to be encoded. + * @example + * ```js + * const encoder = new OneHotEncoder() + * encoder.fit(["a", "b", "c"]) + * encoder.transform(["a", "b", "c"]) + * ``` + */ + public transform(data: Array | typeof tensorflow.Tensor | Series): DataFrame | typeof tensorflow.Tensor | number[][] { + const $data = this.$getData(data) + const oneHotArr: any = utils.zeros($data.length, this.$labels.length) + + for (let i = 0; i < $data.length; i++) { + const index = this.$labels.indexOf($data[i]) + oneHotArr[i][index] = 1 + } + + if (data instanceof Array) { + return oneHotArr + } else if (data instanceof Series) { + return new DataFrame(oneHotArr, { + index: data.index, + }) + } else { + return tensorflow.tensor1d(oneHotArr) + } + } + + /** + * Fit and transform the data using the fitted OneHotEncoder. + * @param data 1d array of labels, Tensor, or Series to be encoded. + * @example + * ```js + * const encoder = new OneHotEncoder() + * encoder.fitTransform(["a", "b", "c"]) + * ``` + */ + public fitTransform(data: Array | typeof tensorflow.Tensor | Series): DataFrame | typeof tensorflow.Tensor | number[][] { + this.fit(data) + return this.transform(data) + } +} \ No newline at end of file diff --git a/src/danfojs-base/transformers/merge.ts b/src/danfojs-base/transformers/merge.ts new file mode 100644 index 00000000..f449557b --- /dev/null +++ b/src/danfojs-base/transformers/merge.ts @@ -0,0 +1,387 @@ +/** +* @license +* Copyright 2022 JsData. All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ========================================================================== +*/ + +import DataFrame from "../core/frame" +import { ArrayType1D, ArrayType2D } from "../shared/types" +import Utils from "../shared/utils"; +const utils = new Utils(); + +type mergeParam = { + left: DataFrame, + right: DataFrame, + on: Array, + how: "outer" | "inner" | "left" | "right" +} + +type keyComb = { + [key: string] : { + filters: ArrayType2D, + combValues: ArrayType1D + } +} + +class Merge { + left: DataFrame + right: DataFrame + on: Array + how: "outer" | "inner" | "left" | "right" + leftColIndex: ArrayType1D = [] + rightColIndex: ArrayType1D = [] + leftCol?: ArrayType1D + rightCol?: ArrayType1D + columns?: ArrayType1D + + constructor({left, right, on, how}: mergeParam) { + this.left = left + this.right = right + this.on = on + this.how = how + + //Obtain the column index of the column will + //want to merge on for both left and right dataframe + for(let i =0; i < this.on.length; i++) { + let key = this.on[i] + if (this.left.columns.includes(key) && this.right.columns.includes(key)) { + let leftIndex = this.left.columns.indexOf(key) + let rightIndex = this.right.columns.indexOf(key) + this.leftColIndex.push(leftIndex) + this.rightColIndex.push(rightIndex) + } + } + } + + /** + * Generate key combination base on the columns we want to merge on + * e.g df = { + * key1: ["KO", "K0", "K3", "K4"], + * Key2: ["K1", "K1", "K3", "K5"], + * A: [1,2,3,4] + * B: [3,4,5,6] + * } + * keycomb = generateKeyCombination(df.values, [0,1]) + * This should output + * { + * 'k0_k1': { + * filters: [[1,3], [2,4]], # the value of other columns in thesame row with the combination keys + * combValues: ["KO", "k1"] # the combination key from column Key1 (index 2) and key2 (index 1) + * }, + * 'K3_K3 : { + * filters: [[3,5]], + * combValues: ['K3', 'k3'] + * }, + * 'k4_k5' : { + * filters: [[4,6]] + * combValues: ['K4', 'K5'] + * } + * } + * This key combination will be generated for both left and right dataframe + * @param values + * @param colIndex + */ + private generateKeyCombination(values: ArrayType2D, colIndex: ArrayType1D): keyComb { + let colKeyComb: keyComb = {} + + for (let i=0; i < values.length; i++) { + let rowValues = values[i] + let rowKeyCombValues = []; + for (let j =0; j < colIndex.length; j++) { + let index = colIndex[j] as number + rowKeyCombValues.push(rowValues[index]) + } + let rowKeyComb = rowKeyCombValues.join('_') + let otherValues = rowValues.filter((val, index) => { + return !colIndex.includes(index) + }) + if (utils.keyInObject(colKeyComb, rowKeyComb)) { + colKeyComb[rowKeyComb].filters.push(otherValues) + } else { + colKeyComb[rowKeyComb] = { + filters: [otherValues], + combValues: rowKeyCombValues + } + } + } + return colKeyComb + } + + /** + * Generate columns for the newly generated merged DataFrame + * e.g df = { + * key1: ["KO", "K0", "K3", "K4"], + * Key2: ["K1", "K1", "K3", "K5"], + * A: [1,2,3,4] + * B: [3,4,5,6] + * } + * df2 = { + * key1: ["KO", "K0", "K3", "K4"], + * Key2: ["K1", "K1", "K3", "K5"], + * A: [1,2,3,4] + * c: [3,4,5,6] + * } + * And both dataframe are to be merged on `key1` and `key2` + * the newly generated column will be of the form + * columns = ['key1', 'Key2', 'A', 'A_1', 'B', 'C'] + * Notice 'A_1' , this because both DataFrame as column A and 1 is the + * number of duplicate of that column + */ + private createColumns() { + const self = this + this.leftCol = self.left.columns.filter((_, index)=>{ + return !self.leftColIndex.includes(index) + }) + this.rightCol = self.right.columns.filter((_, index) => { + return !self.rightColIndex.includes(index) + }) + this.columns = [...this.on] + const duplicateColumn: { + [key: string] : number + } = {} + const tempColumn = [...this.leftCol] + tempColumn.push(...this.rightCol) + for (let i=0; i< tempColumn.length; i++) { + const col = tempColumn[i] as string + if (utils.keyInObject(duplicateColumn, col)) { + let columnName = `${col}_${duplicateColumn[col]}` + this.columns.push(columnName) + duplicateColumn[col] +=1 + } else { + this.columns.push(col) + duplicateColumn[col] = 1 + } + } + } + + /** + * The basic methos perform the underneath operation of generating + * the merge dataframe; using the combination keys generated from + * bothe left and right DataFrame + * e.g df = { + * key1: ["KO", "K0", "K3", "K4"], + * Key2: ["K1", "K1", "K3", "K5"], + * A: [1,2,3,4] + * B: [3,4,5,6] + * } + * df2 = { + * key1: ["KO", "K0", "K3", "K4"], + * Key2: ["K1", "K2", "K4", "K5"], + * A: [3,6,8,9] + * c: [2,4,6,8] + * } + * Running generatekeyCombination on both left and right data frame + * we should have + * leftKeyDict = { + * 'k0_k1': { + * filters: [[1,3], [2,4]], + * combValues: ["KO", "k1"] + * }, + * 'K3_K3' : { + * filters: [[3,5]], + * combValues: ['K3', 'k3'] + * }, + * 'k4_k5' : { + * filters: [[4,6]] + * combValues: ['K4', 'K5'] + * } + * } + * rightKeyDict = { + * 'k0_k1': { + * filters: [[3,2]], + * combValues: ["KO", "k1"] + * }, + * 'K0_K2': { + * filters: [[6,4]], + * combValues: ['K0', 'K2'] + * }, + * 'K3_K4' : { + * filters: [[8,9]], + * combValues: ['K3', 'k4'] + * }, + * 'k4_k5' : { + * filters: [[9,8]] + * combValues: ['K4', 'K5'] + * } + * } + * The `keys` is generated base on the type of merge operation we want to + * perform. If we assume we are performing `outer` merge (which is a set of the + * key combination from both leftKeyDict and rightKeyDict) then Keys should be + * this + * keys = ['K0_K1', 'K3_K3', 'k4_k5', 'K0_K2', 'k3_k4'] + * The Keys, leftKeyDict and rightKeyDict are used to generated DataFrame data, + * by looping through the Keys and checking if leftKeyDict and rightKeyDict as the + * key if one of them does not the column in that row will be NaN + * e.g Data for each row base on keys + * COLUMNS = ['key1', 'Key2', 'A', 'B', 'A_1', 'C'] + * 'K0_K1': ['K0', 'K1', 1, 3 , 3, 2 ] + * 'K0_K1': ['K0', 'K1', 2, 4, NaN, NaN] + * 'K3_K3': ['k3', 'K3', 3, 5, NaN, NaN] + * 'K4_K5': ['K4', 'K5', 4, 6, 9, 8] + * 'k0_K2': ['k0', 'K2' NaN, NaN, 6, 4] + * 'k3_k4': ['K3', 'K4', NaN, NaN, 8, 6] + * + * @param keys + * @param leftKeyDict + * @param rightKeyDict + */ + private basic(keys: ArrayType1D, leftKeyDict: keyComb, rightKeyDict: keyComb): ArrayType2D { + const data = [] + for (let i=0; i < keys.length; i++) { + const key = keys[i] as string + + if (utils.keyInObject(leftKeyDict, key)) { + const leftRows = leftKeyDict[key].filters + const leftCombValues = leftKeyDict[key].combValues + + for (let lIndex=0; lIndex < leftRows.length; lIndex++) { + const leftRow = leftRows[lIndex] + if (utils.keyInObject(rightKeyDict, key)) { + const rightRows = rightKeyDict[key].filters + for (let rIndex=0; rIndex < rightRows.length; rIndex++) { + const rightRow = rightRows[rIndex] + const combineData = leftCombValues.slice(0) + combineData.push(...leftRow) + combineData.push(...rightRow) + data.push(combineData) + } + } else { + const nanArray = Array(this.rightCol?.length).fill(NaN) + const combineData = leftCombValues.slice(0) + combineData.push(...leftRow) + combineData.push(...nanArray) + data.push(combineData) + } + } + } else { + const rightRows = rightKeyDict[key].filters + const rightCombValues = rightKeyDict[key].combValues + + for (let i =0; i < rightRows.length; i++) { + const rightRow = rightRows[i] + const nanArray = Array(this.leftCol?.length).fill(NaN) + const combineData = rightCombValues.slice(0) + combineData.push(...nanArray) + combineData.push(...rightRow) + data.push(combineData) + + } + } + } + return data + } + + /** + * Generate outer key from leftKeyDict and rightKeyDict + * The Key pass into basic method is the union of + * leftKeyDict and rightKeyDict + * @param leftKeyDict + * @param rightKeyDict + */ + private outer(leftKeyDict: keyComb, rightKeyDict: keyComb): ArrayType2D { + const keys = Object.keys(leftKeyDict) + keys.push(...Object.keys(rightKeyDict)) + + const UniqueKeys = Array.from(new Set(keys)) + const data = this.basic(UniqueKeys, leftKeyDict, rightKeyDict) + return data + } + + /** + * Generate Key for basic method, + * the key geneerated is the intersection of + * leftKeyDict and rightKeyDict + * @param leftKeyDict + * @param rightKeyDict + */ + private inner(leftKeyDict: keyComb, rightKeyDict: keyComb): ArrayType2D { + const leftKey = Object.keys(leftKeyDict) + const rightKey = Object.keys(rightKeyDict) + const keys = leftKey.filter((val) => rightKey.includes(val)) + const data = this.basic(keys, leftKeyDict, rightKeyDict) + return data + } + + + /** + * The key is the leftKeyDict + * @param leftKeyDict + * @param rightKeyDict + */ + private leftMerge(leftKeyDict: keyComb, rightKeyDict: keyComb): ArrayType2D { + const keys = Object.keys(leftKeyDict) + const data = this.basic(keys, leftKeyDict, rightKeyDict) + return data + } + + /** + * The key is the rightKeyDict + * @param leftKeyDict + * @param rightKeyDict + */ + private rightMerge(leftKeyDict: keyComb, rightKeyDict: keyComb): ArrayType2D { + const keys = Object.keys(rightKeyDict) + const data = this.basic(keys, leftKeyDict, rightKeyDict) + return data + } + + /** + * Perform the merge operation + * 1) Obtain both left and right dataframe values + * 2) Generate the leftkeyDict and rightKeyDict + * 3) Generate new merge columns + * 4) check how merge is to be done and apply the + * right methods + */ + operation(): DataFrame { + let leftValues = this.left.values as ArrayType2D + let rightValues = this.right.values as ArrayType2D + let leftKeyDict = this.generateKeyCombination(leftValues, this.leftColIndex) + let rightKeyDict = this.generateKeyCombination(rightValues, this.rightColIndex) + + this.createColumns() + + let data: ArrayType2D= [] + switch (this.how) { + case "outer": + data = this.outer(leftKeyDict, rightKeyDict) + break; + case "inner": + data = this.inner(leftKeyDict, rightKeyDict) + break; + case "left": + data = this.leftMerge(leftKeyDict, rightKeyDict) + break; + case "right": + data = this.rightMerge(leftKeyDict, rightKeyDict) + break; + } + const columns = this.columns as Array + return new DataFrame(data, {columns: [...columns]}) + + } + +} + +/** + * Perform merge operation between two DataFrame + * @param params : { + * left: DataFrame + * right: DataFrame + * on: Array + * how: "outer" | "inner" | "left" | "right" + * } + */ +export default function merge(params: mergeParam): DataFrame { + const mergeClass = new Merge(params) + return mergeClass.operation() +} \ No newline at end of file diff --git a/src/danfojs-base/transformers/scalers/min.max.scaler.ts b/src/danfojs-base/transformers/scalers/min.max.scaler.ts new file mode 100644 index 00000000..c69539bd --- /dev/null +++ b/src/danfojs-base/transformers/scalers/min.max.scaler.ts @@ -0,0 +1,162 @@ +/** +* @license +* Copyright 2022 JsData. All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ========================================================================== +*/ + +import Series from "../../core/series" +import DataFrame from "../../core/frame" +import Utils from "../../shared/utils" +import tensorflow from '../../shared/tensorflowlib' + +const utils = new Utils() + +/** + * Transform features by scaling each feature to a given range. + * This estimator scales and translates each feature individually such + * that it is in the given range on the training set, e.g. between the maximum and minimum value. +*/ +export default class MinMaxScaler { + private $max: typeof tensorflow.Tensor + private $min: typeof tensorflow.Tensor + + constructor() { + this.$max = tensorflow.tensor1d([]) + this.$min = tensorflow.tensor1d([]) + } + + private $getTensor(data: number[] | number[][] | typeof tensorflow.Tensor | DataFrame | Series) { + let $tensorArray: typeof tensorflow.Tensor + + if (data instanceof Array) { + if (utils.is1DArray(data)) { + $tensorArray = tensorflow.tensor1d(data as number[]) + } else { + $tensorArray = tensorflow.tensor2d(data) + } + } else if (data instanceof DataFrame || data instanceof Series) { + $tensorArray = data.tensor + } else if (data instanceof tensorflow.Tensor) { + $tensorArray = data + } else { + throw new Error("ParamError: data must be one of Array, Tensor, DataFrame or Series") + } + return $tensorArray + } + + /** + * Fits a MinMaxScaler to the data + * @param data Array, Tensor, DataFrame or Series object + * @returns MinMaxScaler + * @example + * const scaler = new MinMaxScaler() + * scaler.fit([1, 2, 3, 4, 5]) + * // MinMaxScaler { + * // $max: [5], + * // $min: [1] + * // } + * + */ + public fit(data: number[] | number[][] | typeof tensorflow.Tensor | DataFrame | Series) { + const tensorArray = this.$getTensor(data) + this.$max = tensorArray.max(0) + this.$min = tensorArray.min(0) + return this + } + + /** + * Transform the data using the fitted scaler + * @param data Array, Tensor, DataFrame or Series object + * @returns Array, Tensor, DataFrame or Series object + * @example + * const scaler = new MinMaxScaler() + * scaler.fit([1, 2, 3, 4, 5]) + * scaler.transform([1, 2, 3, 4, 5]) + * // [0, 0.25, 0.5, 0.75, 1] + * */ + public transform(data: number[] | number[][] | typeof tensorflow.Tensor | DataFrame | Series) { + const tensorArray = this.$getTensor(data) + const outputData = tensorArray + .sub(this.$min) + .div(this.$max.sub(this.$min)) + + if (Array.isArray(data)) { + return outputData.arraySync() + + } else if (data instanceof Series) { + return new Series(outputData, { + index: data.index, + }); + + } else if (data instanceof DataFrame) { + return new DataFrame(outputData, { + index: data.index, + columns: data.columns, + config: { ...data.config }, + }); + } else { + return outputData + } + } + + /** + * Fit the data and transform it + * @param data Array, Tensor, DataFrame or Series object + * @returns Array, Tensor, DataFrame or Series object + * @example + * const scaler = new MinMaxScaler() + * scaler.fitTransform([1, 2, 3, 4, 5]) + * // [0, 0.25, 0.5, 0.75, 1] + * */ + public fitTransform(data: number[] | number[][] | typeof tensorflow.Tensor | DataFrame | Series) { + this.fit(data) + return this.transform(data) + } + + /** + * Inverse transform the data using the fitted scaler + * @param data Array, Tensor, DataFrame or Series object + * @returns Array, Tensor, DataFrame or Series object + * @example + * const scaler = new MinMaxScaler() + * scaler.fit([1, 2, 3, 4, 5]) + * scaler.inverseTransform([0, 0.25, 0.5, 0.75, 1]) + * // [1, 2, 3, 4, 5] + * */ + public inverseTransform(data: number[] | number[][] | typeof tensorflow.Tensor | DataFrame | Series) { + const tensorArray = this.$getTensor(data) + const outputData = tensorArray + .mul(this.$max.sub(this.$min)) + .add(this.$min) + + if (Array.isArray(data)) { + return outputData.arraySync() + + } else if (data instanceof Series) { + return new Series(outputData, { + index: data.index, + }); + + } else if (data instanceof DataFrame) { + return new DataFrame(outputData, { + index: data.index, + columns: data.columns, + config: { ...data.config }, + }); + } else { + return outputData + } + } + +} + + diff --git a/src/danfojs-base/transformers/scalers/standard.scaler.ts b/src/danfojs-base/transformers/scalers/standard.scaler.ts new file mode 100644 index 00000000..fe0c5253 --- /dev/null +++ b/src/danfojs-base/transformers/scalers/standard.scaler.ts @@ -0,0 +1,154 @@ +/** +* @license +* Copyright 2022 JsData. All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ========================================================================== +*/ + +import tensorflow from '../../shared/tensorflowlib' +import Series from "../../core/series" +import DataFrame from "../../core/frame" +import Utils from "../../shared/utils" + +const utils = new Utils() + +/** + * Standardize features by removing the mean and scaling to unit variance. + * The standard score of a sample x is calculated as: `z = (x - u) / s`, + * where `u` is the mean of the training samples, and `s` is the standard deviation of the training samples. + */ +export default class StandardScaler { + private $std: typeof tensorflow.Tensor + private $mean: typeof tensorflow.Tensor + + constructor() { + this.$std = tensorflow.tensor1d([]) + this.$mean = tensorflow.tensor1d([]) + } + + private $getTensor(data: number[] | number[][] | typeof tensorflow.Tensor | DataFrame | Series) { + let $tensorArray + + if (data instanceof Array) { + if (utils.is1DArray(data)) { + $tensorArray = tensorflow.tensor1d(data as number[]) + } else { + $tensorArray = tensorflow.tensor2d(data) + } + } else if (data instanceof DataFrame || data instanceof Series) { + $tensorArray = data.tensor + } else if (data instanceof tensorflow.Tensor) { + $tensorArray = data + } else { + throw new Error("ParamError: data must be one of Array, DataFrame or Series") + } + return $tensorArray + } + /** + * Fit a StandardScaler to the data. + * @param data Array, Tensor, DataFrame or Series object + * @returns StandardScaler + * @example + * const scaler = new StandardScaler() + * scaler.fit([1, 2, 3, 4, 5]) + */ + public fit(data: number[] | number[][] | typeof tensorflow.Tensor | DataFrame | Series) { + const tensorArray = this.$getTensor(data) + this.$std = tensorflow.moments(tensorArray, 0).variance.sqrt(); + this.$mean = tensorArray.mean(0); + return this + } + + /** + * Transform the data using the fitted scaler + * @param data Array, Tensor, DataFrame or Series object + * @returns Array, Tensor, DataFrame or Series object + * @example + * const scaler = new StandardScaler() + * scaler.fit([1, 2, 3, 4, 5]) + * scaler.transform([1, 2, 3, 4, 5]) + * // [0.0, 0.0, 0.0, 0.0, 0.0] + * */ + public transform(data: number[] | number[][] | typeof tensorflow.Tensor | DataFrame | Series) { + const tensorArray = this.$getTensor(data) + const outputData = tensorArray.sub(this.$mean).div(this.$std) + + if (Array.isArray(data)) { + return outputData.arraySync() + + } else if (data instanceof Series) { + return new Series(outputData, { + index: data.index, + }); + + } else if (data instanceof DataFrame) { + return new DataFrame(outputData, { + index: data.index, + columns: data.columns, + config: { ...data.config }, + }); + } else { + return outputData + } + } + + /** + * Fit and transform the data using the fitted scaler + * @param data Array, Tensor, DataFrame or Series object + * @returns Array, Tensor, DataFrame or Series object + * @example + * const scaler = new StandardScaler() + * scaler.fit([1, 2, 3, 4, 5]) + * scaler.fitTransform([1, 2, 3, 4, 5]) + * // [0.0, 0.0, 0.0, 0.0, 0.0] + * */ + public fitTransform(data: number[] | number[][] | typeof tensorflow.Tensor | DataFrame | Series) { + this.fit(data) + return this.transform(data) + } + + /** + * Inverse transform the data using the fitted scaler + * @param data Array, Tensor, DataFrame or Series object + * @returns Array, Tensor, DataFrame or Series object + * @example + * const scaler = new StandardScaler() + * scaler.fit([1, 2, 3, 4, 5]) + * scaler.transform([1, 2, 3, 4, 5]) + * // [0.0, 0.0, 0.0, 0.0, 0.0] + * scaler.inverseTransform([0.0, 0.0, 0.0, 0.0, 0.0]) + * // [1, 2, 3, 4, 5] + * */ + public inverseTransform(data: number[] | number[][] | typeof tensorflow.Tensor | DataFrame | Series) { + const tensorArray = this.$getTensor(data) + const outputData = tensorArray.mul(this.$std).add(this.$mean) + + if (Array.isArray(data)) { + return outputData.arraySync() + + } else if (data instanceof Series) { + return new Series(outputData, { + index: data.index, + }); + + } else if (data instanceof DataFrame) { + return new DataFrame(outputData, { + index: data.index, + columns: data.columns, + config: { ...data.config }, + }); + } else { + return outputData + } + } +} + + diff --git a/src/danfojs-base/yarn.lock b/src/danfojs-base/yarn.lock new file mode 100644 index 00000000..af8dc9bf --- /dev/null +++ b/src/danfojs-base/yarn.lock @@ -0,0 +1,7165 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/cli@^7.10.5": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.16.7.tgz#4184b5ec6a22106e9dd64bbcaa2eb22675ff595d" + integrity sha512-0iBF+G2Qml0y3mY5dirolyToLSR88a/KB6F2Gm8J/lOnyL8wbEOHak0DHF8gjc9XZGgTDGv/jYXNiapvsYyHTA== + dependencies: + commander "^4.0.1" + convert-source-map "^1.1.0" + fs-readdir-recursive "^1.1.0" + glob "^7.0.0" + make-dir "^2.1.0" + slash "^2.0.0" + source-map "^0.5.0" + optionalDependencies: + "@nicolo-ribaudo/chokidar-2" "2.1.8-no-fsevents.3" + chokidar "^3.4.0" + +"@babel/code-frame@7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" + integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/code-frame@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" + integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== + dependencies: + "@babel/highlight" "^7.16.7" + +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.16.4": + version "7.16.4" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.16.4.tgz#081d6bbc336ec5c2435c6346b2ae1fb98b5ac68e" + integrity sha512-1o/jo7D+kC9ZjHX5v+EHrdjl3PhxMrLSOTGsOdHJ+KL8HCaEK6ehrVL2RS6oHDZp+L7xLirLrPmQtEng769J/Q== + +"@babel/core@^7.10.5", "@babel/core@^7.7.5": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.16.7.tgz#db990f931f6d40cb9b87a0dc7d2adc749f1dcbcf" + integrity sha512-aeLaqcqThRNZYmbMqtulsetOQZ/5gbR/dWruUCJcpas4Qoyy+QeagfDsPdMrqwsPRDNxJvBlRiZxxX7THO7qtA== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.16.7" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helpers" "^7.16.7" + "@babel/parser" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.7" + "@babel/types" "^7.16.7" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.1.2" + semver "^6.3.0" + source-map "^0.5.0" + +"@babel/generator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.7.tgz#b42bf46a3079fa65e1544135f32e7958f048adbb" + integrity sha512-/ST3Sg8MLGY5HVYmrjOgL60ENux/HfO/CsUh7y4MalThufhE/Ff/6EibFDHi4jiDCaWfJKoqbE6oTh21c5hrRg== + dependencies: + "@babel/types" "^7.16.7" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/helper-annotate-as-pure@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862" + integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz#38d138561ea207f0f69eb1626a418e4f7e6a580b" + integrity sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz#06e66c5f299601e6c7da350049315e83209d551b" + integrity sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA== + dependencies: + "@babel/compat-data" "^7.16.4" + "@babel/helper-validator-option" "^7.16.7" + browserslist "^4.17.5" + semver "^6.3.0" + +"@babel/helper-create-class-features-plugin@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.16.7.tgz#9c5b34b53a01f2097daf10678d65135c1b9f84ba" + integrity sha512-kIFozAvVfK05DM4EVQYKK+zteWvY85BFdGBRQBytRyY3y+6PX0DkDOn/CZ3lEuczCfrCxEzwt0YtP/87YPTWSw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-member-expression-to-functions" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + +"@babel/helper-create-regexp-features-plugin@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.16.7.tgz#0cb82b9bac358eb73bfbd73985a776bfa6b14d48" + integrity sha512-fk5A6ymfp+O5+p2yCkXAu5Kyj6v0xh0RBeNcAkYUMDvvAAoxvSKXn+Jb37t/yWFiQVDFK1ELpUTD8/aLhCPu+g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + regexpu-core "^4.7.1" + +"@babel/helper-define-polyfill-provider@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.0.tgz#c5b10cf4b324ff840140bb07e05b8564af2ae971" + integrity sha512-7hfT8lUljl/tM3h+izTX/pO3W3frz2ok6Pk+gzys8iJqDfZrZy2pXjRTZAvG2YmfHun1X4q8/UZRLatMfqc5Tg== + dependencies: + "@babel/helper-compilation-targets" "^7.13.0" + "@babel/helper-module-imports" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/traverse" "^7.13.0" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + semver "^6.1.2" + +"@babel/helper-environment-visitor@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz#ff484094a839bde9d89cd63cba017d7aae80ecd7" + integrity sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-explode-assignable-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz#12a6d8522fdd834f194e868af6354e8650242b7a" + integrity sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-function-name@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz#f1ec51551fb1c8956bc8dd95f38523b6cf375f8f" + integrity sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA== + dependencies: + "@babel/helper-get-function-arity" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/helper-get-function-arity@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz#ea08ac753117a669f1508ba06ebcc49156387419" + integrity sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-hoist-variables@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" + integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-member-expression-to-functions@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.16.7.tgz#42b9ca4b2b200123c3b7e726b0ae5153924905b0" + integrity sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" + integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-module-transforms@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz#7665faeb721a01ca5327ddc6bba15a5cb34b6a41" + integrity sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng== + dependencies: + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-simple-access" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/helper-validator-identifier" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/helper-optimise-call-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz#a34e3560605abbd31a18546bd2aad3e6d9a174f2" + integrity sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz#aa3a8ab4c3cceff8e65eb9e73d87dc4ff320b2f5" + integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA== + +"@babel/helper-remap-async-to-generator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.7.tgz#5ce2416990d55eb6e099128338848ae8ffa58a9a" + integrity sha512-C3o117GnP/j/N2OWo+oepeWbFEKRfNaay+F1Eo5Mj3A1SRjyx+qaFhm23nlipub7Cjv2azdUUiDH+VlpdwUFRg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-wrap-function" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/helper-replace-supers@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz#e9f5f5f32ac90429c1a4bdec0f231ef0c2838ab1" + integrity sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw== + dependencies: + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-member-expression-to-functions" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/traverse" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/helper-simple-access@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz#d656654b9ea08dbb9659b69d61063ccd343ff0f7" + integrity sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-skip-transparent-expression-wrappers@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz#0ee3388070147c3ae051e487eca3ebb0e2e8bb09" + integrity sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw== + dependencies: + "@babel/types" "^7.16.0" + +"@babel/helper-split-export-declaration@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" + integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== + dependencies: + "@babel/types" "^7.16.7" + +"@babel/helper-validator-identifier@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" + integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== + +"@babel/helper-validator-option@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" + integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== + +"@babel/helper-wrap-function@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.16.7.tgz#8ddf9eaa770ed43de4bc3687f3f3b0d6d5ecf014" + integrity sha512-7a9sABeVwcunnztZZ7WTgSw6jVYLzM1wua0Z4HIXm9S3/HC96WKQTkFgGEaj5W06SHHihPJ6Le6HzS5cGOQMNw== + dependencies: + "@babel/helper-function-name" "^7.16.7" + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/helpers@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.16.7.tgz#7e3504d708d50344112767c3542fc5e357fffefc" + integrity sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw== + dependencies: + "@babel/template" "^7.16.7" + "@babel/traverse" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/highlight@^7.10.4", "@babel/highlight@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.7.tgz#81a01d7d675046f0d96f82450d9d9578bdfd6b0b" + integrity sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw== + dependencies: + "@babel/helper-validator-identifier" "^7.16.7" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.7.tgz#d372dda9c89fcec340a82630a9f533f2fe15877e" + integrity sha512-sR4eaSrnM7BV7QPzGfEX5paG/6wrZM3I0HDzfIAK06ESvo9oy3xBuVBxE3MbQaKNhvg8g/ixjMWo2CGpzpHsDA== + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.16.7.tgz#4eda6d6c2a0aa79c70fa7b6da67763dfe2141050" + integrity sha512-anv/DObl7waiGEnC24O9zqL0pSuI9hljihqiDuFHC8d7/bjr/4RLGPWuc8rYOff/QPzbEPSkzG8wGG9aDuhHRg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz#cc001234dfc139ac45f6bcf801866198c8c72ff9" + integrity sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/plugin-proposal-optional-chaining" "^7.16.7" + +"@babel/plugin-proposal-async-generator-functions@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.7.tgz#739adc1212a9e4892de440cd7dfffb06172df78d" + integrity sha512-TTXBT3A5c11eqRzaC6beO6rlFT3Mo9C2e8eB44tTr52ESXSK2CIc2fOp1ynpAwQA8HhBMho+WXhMHWlAe3xkpw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-remap-async-to-generator" "^7.16.7" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-proposal-class-properties@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz#925cad7b3b1a2fcea7e59ecc8eb5954f961f91b0" + integrity sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-proposal-class-static-block@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.16.7.tgz#712357570b612106ef5426d13dc433ce0f200c2a" + integrity sha512-dgqJJrcZoG/4CkMopzhPJjGxsIe9A8RlkQLnL/Vhhx8AA9ZuaRwGSlscSh42hazc7WSrya/IK7mTeoF0DP9tEw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + +"@babel/plugin-proposal-dynamic-import@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz#c19c897eaa46b27634a00fee9fb7d829158704b2" + integrity sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + +"@babel/plugin-proposal-export-namespace-from@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz#09de09df18445a5786a305681423ae63507a6163" + integrity sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz#9732cb1d17d9a2626a08c5be25186c195b6fa6e8" + integrity sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-json-strings" "^7.8.3" + +"@babel/plugin-proposal-logical-assignment-operators@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz#be23c0ba74deec1922e639832904be0bea73cdea" + integrity sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz#141fc20b6857e59459d430c850a0011e36561d99" + integrity sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-proposal-numeric-separator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz#d6b69f4af63fb38b6ca2558442a7fb191236eba9" + integrity sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.16.7.tgz#94593ef1ddf37021a25bdcb5754c4a8d534b01d8" + integrity sha512-3O0Y4+dw94HA86qSg9IHfyPktgR7q3gpNVAeiKQd+8jBKFaU5NQS1Yatgo4wY+UFNuLjvxcSmzcsHqrhgTyBUA== + dependencies: + "@babel/compat-data" "^7.16.4" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.16.7" + +"@babel/plugin-proposal-optional-catch-binding@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz#c623a430674ffc4ab732fd0a0ae7722b67cb74cf" + integrity sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-proposal-optional-chaining@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz#7cd629564724816c0e8a969535551f943c64c39a" + integrity sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-proposal-private-methods@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.7.tgz#e418e3aa6f86edd6d327ce84eff188e479f571e0" + integrity sha512-7twV3pzhrRxSwHeIvFE6coPgvo+exNDOiGUMg39o2LiLo1Y+4aKpfkcLGcg1UHonzorCt7SNXnoMyCnnIOA8Sw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-proposal-private-property-in-object@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz#b0b8cef543c2c3d57e59e2c611994861d46a3fce" + integrity sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-create-class-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + +"@babel/plugin-proposal-unicode-property-regex@^7.16.7", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz#635d18eb10c6214210ffc5ff4932552de08188a2" + integrity sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-top-level-await@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-transform-arrow-functions@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz#44125e653d94b98db76369de9c396dc14bef4154" + integrity sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-async-to-generator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.7.tgz#646e1262ac341b587ff5449844d4492dbb10ac4b" + integrity sha512-pFEfjnK4DfXCfAlA5I98BYdDJD8NltMzx19gt6DAmfE+2lXRfPUoa0/5SUjT4+TDE1W/rcxU/1lgN55vpAjjdg== + dependencies: + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-remap-async-to-generator" "^7.16.7" + +"@babel/plugin-transform-block-scoped-functions@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz#4d0d57d9632ef6062cdf354bb717102ee042a620" + integrity sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-block-scoping@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz#f50664ab99ddeaee5bc681b8f3a6ea9d72ab4f87" + integrity sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-classes@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz#8f4b9562850cd973de3b498f1218796eb181ce00" + integrity sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.16.7" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-optimise-call-expression" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz#66dee12e46f61d2aae7a73710f591eb3df616470" + integrity sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-destructuring@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.16.7.tgz#ca9588ae2d63978a4c29d3f33282d8603f618e23" + integrity sha512-VqAwhTHBnu5xBVDCvrvqJbtLUa++qZaWC0Fgr2mqokBlulZARGyIvZDoqbPlPaKImQ9dKAcCzbv+ul//uqu70A== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-dotall-regex@^7.16.7", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz#6b2d67686fab15fb6a7fd4bd895d5982cfc81241" + integrity sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-duplicate-keys@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz#2207e9ca8f82a0d36a5a67b6536e7ef8b08823c9" + integrity sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-exponentiation-operator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz#efa9862ef97e9e9e5f653f6ddc7b665e8536fe9b" + integrity sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-for-of@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz#649d639d4617dff502a9a158c479b3b556728d8c" + integrity sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-function-name@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz#5ab34375c64d61d083d7d2f05c38d90b97ec65cf" + integrity sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA== + dependencies: + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz#254c9618c5ff749e87cb0c0cef1a0a050c0bdab1" + integrity sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-member-expression-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz#6e5dcf906ef8a098e630149d14c867dd28f92384" + integrity sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-modules-amd@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz#b28d323016a7daaae8609781d1f8c9da42b13186" + integrity sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g== + dependencies: + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-commonjs@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.7.tgz#fd119e6a433c527d368425b45df361e1e95d3c1a" + integrity sha512-h2RP2kE7He1ZWKyAlanMZrAbdv+Acw1pA8dQZhE025WJZE2z0xzFADAinXA9fxd5bn7JnM+SdOGcndGx1ARs9w== + dependencies: + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-simple-access" "^7.16.7" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-systemjs@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.16.7.tgz#887cefaef88e684d29558c2b13ee0563e287c2d7" + integrity sha512-DuK5E3k+QQmnOqBR9UkusByy5WZWGRxfzV529s9nPra1GE7olmxfqO2FHobEOYSPIjPBTr4p66YDcjQnt8cBmw== + dependencies: + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-identifier" "^7.16.7" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-umd@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz#23dad479fa585283dbd22215bff12719171e7618" + integrity sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ== + dependencies: + "@babel/helper-module-transforms" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.7.tgz#749d90d94e73cf62c60a0cc8d6b94d29305a81f2" + integrity sha512-kFy35VwmwIQwCjwrAQhl3+c/kr292i4KdLPKp5lPH03Ltc51qnFlIADoyPxc/6Naz3ok3WdYKg+KK6AH+D4utg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + +"@babel/plugin-transform-new-target@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz#9967d89a5c243818e0800fdad89db22c5f514244" + integrity sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-object-super@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz#ac359cf8d32cf4354d27a46867999490b6c32a94" + integrity sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-replace-supers" "^7.16.7" + +"@babel/plugin-transform-parameters@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz#a1721f55b99b736511cb7e0152f61f17688f331f" + integrity sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-property-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz#2dadac85155436f22c696c4827730e0fe1057a55" + integrity sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-regenerator@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.16.7.tgz#9e7576dc476cb89ccc5096fff7af659243b4adeb" + integrity sha512-mF7jOgGYCkSJagJ6XCujSQg+6xC1M77/03K2oBmVJWoFGNUtnVJO4WHKJk3dnPC8HCcj4xBQP1Egm8DWh3Pb3Q== + dependencies: + regenerator-transform "^0.14.2" + +"@babel/plugin-transform-reserved-words@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz#1d798e078f7c5958eec952059c460b220a63f586" + integrity sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-runtime@^7.12.10": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.16.7.tgz#1da184cb83a2287a01956c10c60e66dd503c18aa" + integrity sha512-2FoHiSAWkdq4L06uaDN3rS43i6x28desUVxq+zAFuE6kbWYQeiLPJI5IC7Sg9xKYVcrBKSQkVUfH6aeQYbl9QA== + dependencies: + "@babel/helper-module-imports" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + babel-plugin-polyfill-corejs2 "^0.3.0" + babel-plugin-polyfill-corejs3 "^0.4.0" + babel-plugin-polyfill-regenerator "^0.3.0" + semver "^6.3.0" + +"@babel/plugin-transform-shorthand-properties@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz#e8549ae4afcf8382f711794c0c7b6b934c5fbd2a" + integrity sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-spread@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz#a303e2122f9f12e0105daeedd0f30fb197d8ff44" + integrity sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.16.0" + +"@babel/plugin-transform-sticky-regex@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz#c84741d4f4a38072b9a1e2e3fd56d359552e8660" + integrity sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-template-literals@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz#f3d1c45d28967c8e80f53666fc9c3e50618217ab" + integrity sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-typeof-symbol@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz#9cdbe622582c21368bd482b660ba87d5545d4f7e" + integrity sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-unicode-escapes@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz#da8717de7b3287a2c6d659750c964f302b31ece3" + integrity sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q== + dependencies: + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/plugin-transform-unicode-regex@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz#0f7aa4a501198976e25e82702574c34cfebe9ef2" + integrity sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + +"@babel/preset-env@^7.10.4": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.16.7.tgz#c491088856d0b3177822a2bf06cb74d76327aa56" + integrity sha512-urX3Cee4aOZbRWOSa3mKPk0aqDikfILuo+C7qq7HY0InylGNZ1fekq9jmlr3pLWwZHF4yD7heQooc2Pow2KMyQ== + dependencies: + "@babel/compat-data" "^7.16.4" + "@babel/helper-compilation-targets" "^7.16.7" + "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-validator-option" "^7.16.7" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.16.7" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.16.7" + "@babel/plugin-proposal-async-generator-functions" "^7.16.7" + "@babel/plugin-proposal-class-properties" "^7.16.7" + "@babel/plugin-proposal-class-static-block" "^7.16.7" + "@babel/plugin-proposal-dynamic-import" "^7.16.7" + "@babel/plugin-proposal-export-namespace-from" "^7.16.7" + "@babel/plugin-proposal-json-strings" "^7.16.7" + "@babel/plugin-proposal-logical-assignment-operators" "^7.16.7" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.16.7" + "@babel/plugin-proposal-numeric-separator" "^7.16.7" + "@babel/plugin-proposal-object-rest-spread" "^7.16.7" + "@babel/plugin-proposal-optional-catch-binding" "^7.16.7" + "@babel/plugin-proposal-optional-chaining" "^7.16.7" + "@babel/plugin-proposal-private-methods" "^7.16.7" + "@babel/plugin-proposal-private-property-in-object" "^7.16.7" + "@babel/plugin-proposal-unicode-property-regex" "^7.16.7" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-transform-arrow-functions" "^7.16.7" + "@babel/plugin-transform-async-to-generator" "^7.16.7" + "@babel/plugin-transform-block-scoped-functions" "^7.16.7" + "@babel/plugin-transform-block-scoping" "^7.16.7" + "@babel/plugin-transform-classes" "^7.16.7" + "@babel/plugin-transform-computed-properties" "^7.16.7" + "@babel/plugin-transform-destructuring" "^7.16.7" + "@babel/plugin-transform-dotall-regex" "^7.16.7" + "@babel/plugin-transform-duplicate-keys" "^7.16.7" + "@babel/plugin-transform-exponentiation-operator" "^7.16.7" + "@babel/plugin-transform-for-of" "^7.16.7" + "@babel/plugin-transform-function-name" "^7.16.7" + "@babel/plugin-transform-literals" "^7.16.7" + "@babel/plugin-transform-member-expression-literals" "^7.16.7" + "@babel/plugin-transform-modules-amd" "^7.16.7" + "@babel/plugin-transform-modules-commonjs" "^7.16.7" + "@babel/plugin-transform-modules-systemjs" "^7.16.7" + "@babel/plugin-transform-modules-umd" "^7.16.7" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.16.7" + "@babel/plugin-transform-new-target" "^7.16.7" + "@babel/plugin-transform-object-super" "^7.16.7" + "@babel/plugin-transform-parameters" "^7.16.7" + "@babel/plugin-transform-property-literals" "^7.16.7" + "@babel/plugin-transform-regenerator" "^7.16.7" + "@babel/plugin-transform-reserved-words" "^7.16.7" + "@babel/plugin-transform-shorthand-properties" "^7.16.7" + "@babel/plugin-transform-spread" "^7.16.7" + "@babel/plugin-transform-sticky-regex" "^7.16.7" + "@babel/plugin-transform-template-literals" "^7.16.7" + "@babel/plugin-transform-typeof-symbol" "^7.16.7" + "@babel/plugin-transform-unicode-escapes" "^7.16.7" + "@babel/plugin-transform-unicode-regex" "^7.16.7" + "@babel/preset-modules" "^0.1.5" + "@babel/types" "^7.16.7" + babel-plugin-polyfill-corejs2 "^0.3.0" + babel-plugin-polyfill-corejs3 "^0.4.0" + babel-plugin-polyfill-regenerator "^0.3.0" + core-js-compat "^3.19.1" + semver "^6.3.0" + +"@babel/preset-modules@^0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" + integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/runtime@^7.16.0": + version "7.16.3" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.3.tgz#b86f0db02a04187a3c17caa77de69840165d42d5" + integrity sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/runtime@^7.8.4": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.7.tgz#03ff99f64106588c9c403c6ecb8c3bafbbdff1fa" + integrity sha512-9E9FJowqAsytyOY6LG+1KuueckRL+aQW+mKvXRXnuFGyRAyepJPmEo9vgMfXUA6O9u3IeEdv9MAkppFcaQwogQ== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" + integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/parser" "^7.16.7" + "@babel/types" "^7.16.7" + +"@babel/traverse@^7.13.0", "@babel/traverse@^7.16.7": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.7.tgz#dac01236a72c2560073658dd1a285fe4e0865d76" + integrity sha512-8KWJPIb8c2VvY8AJrydh6+fVRo2ODx1wYBU2398xJVq0JomuLBZmVQzLPBblJgHIGYG4znCpUZUZ0Pt2vdmVYQ== + dependencies: + "@babel/code-frame" "^7.16.7" + "@babel/generator" "^7.16.7" + "@babel/helper-environment-visitor" "^7.16.7" + "@babel/helper-function-name" "^7.16.7" + "@babel/helper-hoist-variables" "^7.16.7" + "@babel/helper-split-export-declaration" "^7.16.7" + "@babel/parser" "^7.16.7" + "@babel/types" "^7.16.7" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.16.0", "@babel/types@^7.16.7", "@babel/types@^7.4.4": + version "7.16.7" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.7.tgz#4ed19d51f840ed4bd5645be6ce40775fecf03159" + integrity sha512-E8HuV7FO9qLpx6OtoGfUQ2cjIYnbFwvZWYBS+87EwtdMvmUPJSwykpovFB+8insbpF0uJcpr8KMUi64XZntZcg== + dependencies: + "@babel/helper-validator-identifier" "^7.16.7" + to-fast-properties "^2.0.0" + +"@discoveryjs/json-ext@^0.5.0": + version "0.5.6" + resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.6.tgz#d5e0706cf8c6acd8c6032f8d54070af261bbbb2f" + integrity sha512-ws57AidsDvREKrZKYffXddNkyaF14iHNHm8VQnZH6t99E8gczjNN0GpvcGny0imC80yQ0tHz1xVUKk/KFQSUyA== + +"@eslint/eslintrc@^0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" + integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== + dependencies: + ajv "^6.12.4" + debug "^4.1.1" + espree "^7.3.0" + globals "^13.9.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + +"@humanwhocodes/config-array@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" + integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== + dependencies: + "@humanwhocodes/object-schema" "^1.2.0" + debug "^4.1.1" + minimatch "^3.0.4" + +"@humanwhocodes/object-schema@^1.2.0": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== + +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3": + version "2.1.8-no-fsevents.3" + resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz#323d72dd25103d0c4fbdce89dadf574a787b1f9b" + integrity sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@tensorflow/tfjs-backend-cpu@3.6.0": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-backend-cpu/-/tfjs-backend-cpu-3.6.0.tgz#4e64a7cf1c33b203f71f8f77cd7b0ac1ef25a871" + integrity sha512-ZpAs17hPdKXadbtNjAsymYUILe8V7+pY4fYo8j25nfDTW/HfBpyAwsHPbMcA/n5zyJ7ZJtGKFcCUv1sl24KL1Q== + dependencies: + "@types/seedrandom" "2.4.27" + seedrandom "2.4.3" + +"@tensorflow/tfjs-backend-webgl@3.6.0": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-backend-webgl/-/tfjs-backend-webgl-3.6.0.tgz#1ea1a73abea8d6324fd81aedf7f187ab6eb73692" + integrity sha512-zp7l4TmD1khgeSux/Ujaaj8M/v+e8JVIKjOci6HCGaeMNrn74lTSH9oqGPWKUCmpZME17/V0LfRHK34ddmrPSA== + dependencies: + "@tensorflow/tfjs-backend-cpu" "3.6.0" + "@types/offscreencanvas" "~2019.3.0" + "@types/seedrandom" "2.4.27" + "@types/webgl-ext" "0.0.30" + "@types/webgl2" "0.0.5" + seedrandom "2.4.3" + +"@tensorflow/tfjs-converter@3.6.0": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-converter/-/tfjs-converter-3.6.0.tgz#32b3ff31b47e29630a82e30fbe01708facad7fd6" + integrity sha512-9MtatbTSvo3gpEulYI6+byTA3OeXSMT2lzyGAegXO9nMxsvjR01zBvlZ5SmsNyecNh6fMSzdL2+cCdQfQtsIBg== + +"@tensorflow/tfjs-core@3.6.0": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-core/-/tfjs-core-3.6.0.tgz#6b4d8175790bdff78868eabe6adc6442eb4dc276" + integrity sha512-bb2c3zwK4SgXZRvkTiC7EhCpWbCGp0GMd+1/3Vo2/Z54jiLB/h3sXIgHQrTNiWwhKPtst/xxA+MsslFlvD0A5w== + dependencies: + "@types/offscreencanvas" "~2019.3.0" + "@types/seedrandom" "2.4.27" + "@types/webgl-ext" "0.0.30" + node-fetch "~2.6.1" + seedrandom "2.4.3" + +"@tensorflow/tfjs-data@3.6.0": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-data/-/tfjs-data-3.6.0.tgz#af2f03cffb75ad8e4c2f46e192e392d9b7f977ed" + integrity sha512-5KU7fnU7cj/opb4aCNDoW4qma64ggDwI0PCs5KEO41T3waVHDLk6bjlFlBVRdjfZqvM0K6EfWEyoiXzdvz/Ieg== + dependencies: + "@types/node-fetch" "^2.1.2" + node-fetch "~2.6.1" + +"@tensorflow/tfjs-layers@3.6.0": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-layers/-/tfjs-layers-3.6.0.tgz#5358af559fc8baed304b3e567319fe93f1aa46a6" + integrity sha512-B7EHwAT6KFqhKzdf0e2Sr6haj9qpqpyEATV8OCPHdk+g8z2AGXOLlFfbgW6vCMjy1wb5jzYqCyZDoY3EWdgJAw== + +"@tensorflow/tfjs-node@3.6.1": + version "3.6.1" + resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-node/-/tfjs-node-3.6.1.tgz#a1452076fe6da48f5648ca33f85d1127e6881244" + integrity sha512-JA6GE7AYx+zoXiKQmEdMc848HDOurrI3vFyiLk/8bXJDEv7L7oW5y6Q1Ja+Bz5ul7UmOxNG89hyYhfGqJK8qKw== + dependencies: + "@tensorflow/tfjs" "3.6.0" + adm-zip "^0.4.11" + google-protobuf "^3.9.2" + https-proxy-agent "^2.2.1" + node-pre-gyp "0.14.0" + progress "^2.0.0" + rimraf "^2.6.2" + tar "^4.4.6" + +"@tensorflow/tfjs@3.6.0": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@tensorflow/tfjs/-/tfjs-3.6.0.tgz#e65956cd40c96523e3f5ec7a58a4bef9ef5e349c" + integrity sha512-uLDMDzyRkJa3fYBeR6etQTFD/t+nkQIH/DznL9hxmYoIYG8PigY2gcrc482TAvsdhiuvxCZ9rl5SyDtP93MvxQ== + dependencies: + "@tensorflow/tfjs-backend-cpu" "3.6.0" + "@tensorflow/tfjs-backend-webgl" "3.6.0" + "@tensorflow/tfjs-converter" "3.6.0" + "@tensorflow/tfjs-core" "3.6.0" + "@tensorflow/tfjs-data" "3.6.0" + "@tensorflow/tfjs-layers" "3.6.0" + argparse "^1.0.10" + chalk "^4.1.0" + core-js "3" + regenerator-runtime "^0.13.5" + yargs "^16.0.3" + +"@types/caseless@*": + version "0.12.2" + resolved "https://registry.yarnpkg.com/@types/caseless/-/caseless-0.12.2.tgz#f65d3d6389e01eeb458bd54dc8f52b95a9463bc8" + integrity sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w== + +"@types/chai@^4.2.19": + version "4.3.0" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.0.tgz#23509ebc1fa32f1b4d50d6a66c4032d5b8eaabdc" + integrity sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw== + +"@types/d3@^3": + version "3.5.46" + resolved "https://registry.yarnpkg.com/@types/d3/-/d3-3.5.46.tgz#8b890138ea035b703ef4cdd2de0d86f8619c1c69" + integrity sha512-jNHfiGd41+JUV43LTMzQNidyp4Hn0XfhoSmy8baE0d/N5pGYpD+yX03JacY/MH+smFxYOQGXlz4HxkRZOuRNOQ== + +"@types/eslint-scope@^3.7.0": + version "3.7.2" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.2.tgz#11e96a868c67acf65bf6f11d10bb89ea71d5e473" + integrity sha512-TzgYCWoPiTeRg6RQYgtuW7iODtVoKu3RVL72k3WohqhjfaOLK5Mg2T4Tg1o2bSfu0vPkoI48wdQFv5b/Xe04wQ== + dependencies: + "@types/eslint" "*" + "@types/estree" "*" + +"@types/eslint@*": + version "8.2.2" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.2.2.tgz#b64dbdb64b1957cfc8a698c68297fcf8983e94c7" + integrity sha512-nQxgB8/Sg+QKhnV8e0WzPpxjIGT3tuJDDzybkDi8ItE/IgTlHo07U0shaIjzhcvQxlq9SDRE42lsJ23uvEgJ2A== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*": + version "0.0.50" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.50.tgz#1e0caa9364d3fccd2931c3ed96fdbeaa5d4cca83" + integrity sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw== + +"@types/estree@^0.0.46": + version "0.0.46" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.46.tgz#0fb6bfbbeabd7a30880504993369c4bf1deab1fe" + integrity sha512-laIjwTQaD+5DukBZaygQ79K1Z0jb1bPEMRrkXSLjtCcZm+abyp5YbrqpSLzD42FwWW6gK/aS4NYpJ804nG2brg== + +"@types/json-schema@*", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.7", "@types/json-schema@^7.0.8": + version "7.0.9" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" + integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== + +"@types/mocha@^8.2.2": + version "8.2.3" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-8.2.3.tgz#bbeb55fbc73f28ea6de601fbfa4613f58d785323" + integrity sha512-ekGvFhFgrc2zYQoX4JeZPmVzZxw6Dtllga7iGHzfbYIYkAMUx/sAFP2GdFpLff+vdHXu5fl7WX9AT+TtqYcsyw== + +"@types/node-fetch@^2.1.2": + version "2.5.12" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.12.tgz#8a6f779b1d4e60b7a57fb6fd48d84fb545b9cc66" + integrity sha512-MKgC4dlq4kKNa/mYrwpKfzQMB5X3ee5U6fSprkKpToBqBmX4nFZL9cW5jl6sWn+xpRJ7ypWh2yyqqr8UUCstSw== + dependencies: + "@types/node" "*" + form-data "^3.0.0" + +"@types/node@*": + version "16.11.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.0.tgz#4b95f2327bacd1ef8f08d8ceda193039c5d7f52e" + integrity sha512-8MLkBIYQMuhRBQzGN9875bYsOhPnf/0rgXGo66S2FemHkhbn9qtsz9ywV1iCG+vbjigE4WUNVvw37Dx+L0qsPg== + +"@types/node@^15.12.5": + version "15.14.9" + resolved "https://registry.yarnpkg.com/@types/node/-/node-15.14.9.tgz#bc43c990c3c9be7281868bbc7b8fdd6e2b57adfa" + integrity sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A== + +"@types/offscreencanvas@~2019.3.0": + version "2019.3.0" + resolved "https://registry.yarnpkg.com/@types/offscreencanvas/-/offscreencanvas-2019.3.0.tgz#3336428ec7e9180cf4566dfea5da04eb586a6553" + integrity sha512-esIJx9bQg+QYF0ra8GnvfianIY8qWB0GBx54PK5Eps6m+xTj86KLavHv6qDhzKcu5UUOgNfJ2pWaIIV7TRUd9Q== + +"@types/papaparse@^5.3.1": + version "5.3.1" + resolved "https://registry.yarnpkg.com/@types/papaparse/-/papaparse-5.3.1.tgz#fb5c613a64473c33b08fb9bc2a5ddbf25e54784e" + integrity sha512-1lbngk9wty2kCyQB42LjqSa12SEop3t9wcEC7/xYr3ujTSTmv7HWKjKYXly0GkMfQ42PRb2lFPFEibDOiMXS0g== + dependencies: + "@types/node" "*" + +"@types/plotly.js-dist-min@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@types/plotly.js-dist-min/-/plotly.js-dist-min-2.3.0.tgz#b1b86b94b86e4628d97beca95cc7dd26c2f30758" + integrity sha512-MPvZbG2RA3zuU+AYgsVysJvNLyf3bvi1nt3ywHARwMW2TB38VQuYhQFD1pTRzBuqiV5ieYif7mLY5bHWGUVZqw== + dependencies: + "@types/plotly.js" "*" + +"@types/plotly.js@*": + version "1.54.18" + resolved "https://registry.yarnpkg.com/@types/plotly.js/-/plotly.js-1.54.18.tgz#533ea4502620fe9a80e3dece8b2ece14d215497a" + integrity sha512-mtDRoEAD23rFJnTt/eKAIGAJ2QS5lVOycmXkWyol0rAalejrXnlEouHfqoA5imGusyovBjort4pEfT+TjFAJvA== + dependencies: + "@types/d3" "^3" + +"@types/request@^2.48.7": + version "2.48.8" + resolved "https://registry.yarnpkg.com/@types/request/-/request-2.48.8.tgz#0b90fde3b655ab50976cb8c5ac00faca22f5a82c" + integrity sha512-whjk1EDJPcAR2kYHRbFl/lKeeKYTi05A15K9bnLInCVroNDCtXce57xKdI0/rQaA3K+6q0eFyUBPmqfSndUZdQ== + dependencies: + "@types/caseless" "*" + "@types/node" "*" + "@types/tough-cookie" "*" + form-data "^2.5.0" + +"@types/seedrandom@2.4.27": + version "2.4.27" + resolved "https://registry.yarnpkg.com/@types/seedrandom/-/seedrandom-2.4.27.tgz#9db563937dd86915f69092bc43259d2f48578e41" + integrity sha1-nbVjk33YaRX2kJK8QyWdL0hXjkE= + +"@types/stream-chain@*": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/stream-chain/-/stream-chain-2.0.1.tgz#4d3cc47a32609878bc188de0bae420bcfd3bf1f5" + integrity sha512-D+Id9XpcBpampptkegH7WMsEk6fUdf9LlCIX7UhLydILsqDin4L0QT7ryJR0oycwC7OqohIzdfcMHVZ34ezNGg== + dependencies: + "@types/node" "*" + +"@types/stream-json@^1.7.1": + version "1.7.2" + resolved "https://registry.yarnpkg.com/@types/stream-json/-/stream-json-1.7.2.tgz#8d7f1cc3a37a9a402a4af284348499cdf5e28248" + integrity sha512-i4LE2aWVb1R3p/Z6S6Sw9kmmOs4Drhg0SybZUyfM499I1c8p7MUKZHs4Sg9jL5eu4mDmcgfQ6eGIG3+rmfUWYw== + dependencies: + "@types/node" "*" + "@types/stream-chain" "*" + +"@types/table@^6.3.2": + version "6.3.2" + resolved "https://registry.yarnpkg.com/@types/table/-/table-6.3.2.tgz#e18ad2594400d81c3da28c31b342eb5a0d87a8e7" + integrity sha512-GJ82z3vQbx2BhiUo12w2A3lyBpXPJrGHjQ7iS5aH925098w8ojqiWBhgOUy97JS2PKLmRCTLT0sI+gJI4futig== + dependencies: + table "*" + +"@types/tough-cookie@*": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.1.tgz#8f80dd965ad81f3e1bc26d6f5c727e132721ff40" + integrity sha512-Y0K95ThC3esLEYD6ZuqNek29lNX2EM1qxV8y2FTLUB0ff5wWrk7az+mLrnNFUnaXcgKye22+sFBRXOgpPILZNg== + +"@types/webgl-ext@0.0.30": + version "0.0.30" + resolved "https://registry.yarnpkg.com/@types/webgl-ext/-/webgl-ext-0.0.30.tgz#0ce498c16a41a23d15289e0b844d945b25f0fb9d" + integrity sha512-LKVgNmBxN0BbljJrVUwkxwRYqzsAEPcZOe6S2T6ZaBDIrFp0qu4FNlpc5sM1tGbXUYFgdVQIoeLk1Y1UoblyEg== + +"@types/webgl2@0.0.5": + version "0.0.5" + resolved "https://registry.yarnpkg.com/@types/webgl2/-/webgl2-0.0.5.tgz#dd925e20ab8ace80eb4b1e46fda5b109c508fb0d" + integrity sha512-oGaKsBbxQOY5+aJFV3KECDhGaXt+yZJt2y/OZsnQGLRkH6Fvr7rv4pCt3SRH1somIHfej/c4u7NSpCyd9x+1Ow== + +"@typescript-eslint/eslint-plugin@^4.30.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz#c24dc7c8069c7706bc40d99f6fa87edcb2005276" + integrity sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg== + dependencies: + "@typescript-eslint/experimental-utils" "4.33.0" + "@typescript-eslint/scope-manager" "4.33.0" + debug "^4.3.1" + functional-red-black-tree "^1.0.1" + ignore "^5.1.8" + regexpp "^3.1.0" + semver "^7.3.5" + tsutils "^3.21.0" + +"@typescript-eslint/experimental-utils@4.33.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz#6f2a786a4209fa2222989e9380b5331b2810f7fd" + integrity sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q== + dependencies: + "@types/json-schema" "^7.0.7" + "@typescript-eslint/scope-manager" "4.33.0" + "@typescript-eslint/types" "4.33.0" + "@typescript-eslint/typescript-estree" "4.33.0" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + +"@typescript-eslint/parser@^4.30.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.33.0.tgz#dfe797570d9694e560528d18eecad86c8c744899" + integrity sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA== + dependencies: + "@typescript-eslint/scope-manager" "4.33.0" + "@typescript-eslint/types" "4.33.0" + "@typescript-eslint/typescript-estree" "4.33.0" + debug "^4.3.1" + +"@typescript-eslint/scope-manager@4.33.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz#d38e49280d983e8772e29121cf8c6e9221f280a3" + integrity sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ== + dependencies: + "@typescript-eslint/types" "4.33.0" + "@typescript-eslint/visitor-keys" "4.33.0" + +"@typescript-eslint/types@4.33.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.33.0.tgz#a1e59036a3b53ae8430ceebf2a919dc7f9af6d72" + integrity sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ== + +"@typescript-eslint/typescript-estree@4.33.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz#0dfb51c2908f68c5c08d82aefeaf166a17c24609" + integrity sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA== + dependencies: + "@typescript-eslint/types" "4.33.0" + "@typescript-eslint/visitor-keys" "4.33.0" + debug "^4.3.1" + globby "^11.0.3" + is-glob "^4.0.1" + semver "^7.3.5" + tsutils "^3.21.0" + +"@typescript-eslint/visitor-keys@4.33.0": + version "4.33.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz#2a22f77a41604289b7a186586e9ec48ca92ef1dd" + integrity sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg== + dependencies: + "@typescript-eslint/types" "4.33.0" + eslint-visitor-keys "^2.0.0" + +"@ungap/promise-all-settled@1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44" + integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q== + +"@webassemblyjs/ast@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.0.tgz#a5aa679efdc9e51707a4207139da57920555961f" + integrity sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg== + dependencies: + "@webassemblyjs/helper-numbers" "1.11.0" + "@webassemblyjs/helper-wasm-bytecode" "1.11.0" + +"@webassemblyjs/floating-point-hex-parser@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz#34d62052f453cd43101d72eab4966a022587947c" + integrity sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA== + +"@webassemblyjs/helper-api-error@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz#aaea8fb3b923f4aaa9b512ff541b013ffb68d2d4" + integrity sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w== + +"@webassemblyjs/helper-buffer@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz#d026c25d175e388a7dbda9694e91e743cbe9b642" + integrity sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA== + +"@webassemblyjs/helper-numbers@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz#7ab04172d54e312cc6ea4286d7d9fa27c88cd4f9" + integrity sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ== + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.11.0" + "@webassemblyjs/helper-api-error" "1.11.0" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/helper-wasm-bytecode@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz#85fdcda4129902fe86f81abf7e7236953ec5a4e1" + integrity sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA== + +"@webassemblyjs/helper-wasm-section@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz#9ce2cc89300262509c801b4af113d1ca25c1a75b" + integrity sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew== + dependencies: + "@webassemblyjs/ast" "1.11.0" + "@webassemblyjs/helper-buffer" "1.11.0" + "@webassemblyjs/helper-wasm-bytecode" "1.11.0" + "@webassemblyjs/wasm-gen" "1.11.0" + +"@webassemblyjs/ieee754@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz#46975d583f9828f5d094ac210e219441c4e6f5cf" + integrity sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.0.tgz#f7353de1df38aa201cba9fb88b43f41f75ff403b" + integrity sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.0.tgz#86e48f959cf49e0e5091f069a709b862f5a2cadf" + integrity sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw== + +"@webassemblyjs/wasm-edit@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz#ee4a5c9f677046a210542ae63897094c2027cb78" + integrity sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ== + dependencies: + "@webassemblyjs/ast" "1.11.0" + "@webassemblyjs/helper-buffer" "1.11.0" + "@webassemblyjs/helper-wasm-bytecode" "1.11.0" + "@webassemblyjs/helper-wasm-section" "1.11.0" + "@webassemblyjs/wasm-gen" "1.11.0" + "@webassemblyjs/wasm-opt" "1.11.0" + "@webassemblyjs/wasm-parser" "1.11.0" + "@webassemblyjs/wast-printer" "1.11.0" + +"@webassemblyjs/wasm-gen@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz#3cdb35e70082d42a35166988dda64f24ceb97abe" + integrity sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ== + dependencies: + "@webassemblyjs/ast" "1.11.0" + "@webassemblyjs/helper-wasm-bytecode" "1.11.0" + "@webassemblyjs/ieee754" "1.11.0" + "@webassemblyjs/leb128" "1.11.0" + "@webassemblyjs/utf8" "1.11.0" + +"@webassemblyjs/wasm-opt@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz#1638ae188137f4bb031f568a413cd24d32f92978" + integrity sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg== + dependencies: + "@webassemblyjs/ast" "1.11.0" + "@webassemblyjs/helper-buffer" "1.11.0" + "@webassemblyjs/wasm-gen" "1.11.0" + "@webassemblyjs/wasm-parser" "1.11.0" + +"@webassemblyjs/wasm-parser@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz#3e680b8830d5b13d1ec86cc42f38f3d4a7700754" + integrity sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw== + dependencies: + "@webassemblyjs/ast" "1.11.0" + "@webassemblyjs/helper-api-error" "1.11.0" + "@webassemblyjs/helper-wasm-bytecode" "1.11.0" + "@webassemblyjs/ieee754" "1.11.0" + "@webassemblyjs/leb128" "1.11.0" + "@webassemblyjs/utf8" "1.11.0" + +"@webassemblyjs/wast-printer@1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz#680d1f6a5365d6d401974a8e949e05474e1fab7e" + integrity sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ== + dependencies: + "@webassemblyjs/ast" "1.11.0" + "@xtuc/long" "4.2.2" + +"@webpack-cli/configtest@^1.0.1": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.1.0.tgz#8342bef0badfb7dfd3b576f2574ab80c725be043" + integrity sha512-ttOkEkoalEHa7RaFYpM0ErK1xc4twg3Am9hfHhL7MVqlHebnkYd2wuI/ZqTDj0cVzZho6PdinY0phFZV3O0Mzg== + +"@webpack-cli/info@^1.2.2": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.4.0.tgz#b9179c3227ab09cbbb149aa733475fcf99430223" + integrity sha512-F6b+Man0rwE4n0409FyAJHStYA5OIZERxmnUfLVwv0mc0V1wLad3V7jqRlMkgKBeAq07jUvglacNaa6g9lOpuw== + dependencies: + envinfo "^7.7.3" + +"@webpack-cli/serve@^1.3.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.6.0.tgz#2c275aa05c895eccebbfc34cfb223c6e8bd591a2" + integrity sha512-ZkVeqEmRpBV2GHvjjUZqEai2PpUbuq8Bqd//vEYsp63J8WyexI8ppCqVS3Zs0QADf6aWuPdU+0XsPI647PVlQA== + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +JSONStream@^1.0.3: + version "1.3.5" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + +abab@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" + integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +accepts@~1.3.4: + version "1.3.7" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + +acorn-jsx@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn-node@^1.2.0, acorn-node@^1.3.0, acorn-node@^1.5.2, acorn-node@^1.6.1: + version "1.8.2" + resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.8.2.tgz#114c95d64539e53dede23de8b9d96df7c7ae2af8" + integrity sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A== + dependencies: + acorn "^7.0.0" + acorn-walk "^7.0.0" + xtend "^4.0.2" + +acorn-walk@^7.0.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" + integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== + +acorn@^7.0.0, acorn@^7.4.0: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + +acorn@^8.0.4: + version "8.7.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" + integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== + +adler-32@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/adler-32/-/adler-32-1.2.0.tgz#6a3e6bf0a63900ba15652808cb15c6813d1a5f25" + integrity sha1-aj5r8KY5ALoVZSgIyxXGgT0aXyU= + dependencies: + exit-on-epipe "~1.0.1" + printj "~1.1.0" + +adler-32@~1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/adler-32/-/adler-32-1.3.0.tgz#3cad1b71cdfa69f6c8a91f3e3615d31a4fdedc72" + integrity sha512-f5nltvjl+PRUh6YNfUstRaXwJxtfnKEWhAWWlmKvh+Y3J2+98a0KKVYDEhz6NdKGqswLhjNGznxfSsZGOvOd9g== + dependencies: + printj "~1.2.2" + +adm-zip@^0.4.11: + version "0.4.16" + resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365" + integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg== + +after@0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" + integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8= + +agent-base@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" + integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== + dependencies: + es6-promisify "^5.0.0" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^8.0.1: + version "8.8.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.8.2.tgz#01b4fef2007a28bf75f0b7fc009f62679de4abbb" + integrity sha512-x9VuX+R/jcFj1DHo/fCp99esgGDWiHENrKxaCENuCxpoMCmAt/COCGVDwA7kleEpEzJjDnvh3yGoOuLu0Dtllw== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ansi-colors@4.1.1, ansi-colors@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +anymatch@~3.1.1, anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +append-transform@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-2.0.0.tgz#99d9d29c7b38391e6f428d28ce136551f0b77e12" + integrity sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg== + dependencies: + default-require-extensions "^3.0.0" + +aproba@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + +archy@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" + integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= + +are-we-there-yet@~1.1.2: + version "1.1.7" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz#b15474a932adab4ff8a50d9adfa7e4e926f21146" + integrity sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g== + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +argparse@^1.0.10, argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +arraybuffer.slice@~0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" + integrity sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog== + +asn1.js@^5.2.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" + integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + safer-buffer "^2.1.0" + +asn1@~0.2.3: + version "0.2.6" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +assert@^1.4.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" + integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== + dependencies: + object-assign "^4.1.1" + util "0.10.3" + +assertion-error@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +awesome-typescript-loader@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/awesome-typescript-loader/-/awesome-typescript-loader-5.2.1.tgz#a41daf7847515f4925cdbaa3075d61f289e913fc" + integrity sha512-slv66OAJB8orL+UUaTI3pKlLorwIvS4ARZzYR9iJJyGsEgOqueMfOMdKySWzZ73vIkEe3fcwFgsKMg4d8zyb1g== + dependencies: + chalk "^2.4.1" + enhanced-resolve "^4.0.0" + loader-utils "^1.1.0" + lodash "^4.17.5" + micromatch "^3.1.9" + mkdirp "^0.5.1" + source-map-support "^0.5.3" + webpack-log "^1.2.0" + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" + integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== + +babel-loader@^8.1.0: + version "8.2.3" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.2.3.tgz#8986b40f1a64cacfcb4b8429320085ef68b1342d" + integrity sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw== + dependencies: + find-cache-dir "^3.3.1" + loader-utils "^1.4.0" + make-dir "^3.1.0" + schema-utils "^2.6.5" + +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== + dependencies: + object.assign "^4.1.0" + +babel-plugin-polyfill-corejs2@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.0.tgz#407082d0d355ba565af24126fb6cb8e9115251fd" + integrity sha512-wMDoBJ6uG4u4PNFh72Ty6t3EgfA91puCuAwKIazbQlci+ENb/UU9A3xG5lutjUIiXCIn1CY5L15r9LimiJyrSA== + dependencies: + "@babel/compat-data" "^7.13.11" + "@babel/helper-define-polyfill-provider" "^0.3.0" + semver "^6.1.1" + +babel-plugin-polyfill-corejs3@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.4.0.tgz#0b571f4cf3d67f911512f5c04842a7b8e8263087" + integrity sha512-YxFreYwUfglYKdLUGvIF2nJEsGwj+RhWSX/ije3D2vQPOXuyMLMtg/cCGMDpOA7Nd+MwlNdnGODbd2EwUZPlsw== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.0" + core-js-compat "^3.18.0" + +babel-plugin-polyfill-regenerator@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.0.tgz#9ebbcd7186e1a33e21c5e20cae4e7983949533be" + integrity sha512-dhAPTDLGoMW5/84wkgwiLRwMnio2i1fUe53EuvtKMv0pn2p3S8OCoV1xAzfJPl0KOX7IB89s2ib85vbYiea3jg== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.0" + +backo2@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" + integrity sha1-MasayLEpNjRj41s+u2n038+6eUc= + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base64-arraybuffer@0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz#9818c79e059b1355f97e0428a017c838e90ba812" + integrity sha1-mBjHngWbE1X5fgQooBfIOOkLqBI= + +base64-js@^1.0.2: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +base64id@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" + integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +bl@^1.0.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.3.tgz#1e8dd80142eac80d7158c9dccc047fb620e035e7" + integrity sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww== + dependencies: + readable-stream "^2.3.5" + safe-buffer "^5.1.1" + +blob@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683" + integrity sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig== + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.9: + version "4.12.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + +bn.js@^5.0.0, bn.js@^5.1.1: + version "5.2.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" + integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== + +body-parser@^1.19.0: + version "1.19.1" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.1.tgz#1499abbaa9274af3ecc9f6f10396c995943e31d4" + integrity sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA== + dependencies: + bytes "3.1.1" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.8.1" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.9.6" + raw-body "2.4.2" + type-is "~1.6.18" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +braces@^3.0.1, braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +brorand@^1.0.1, brorand@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + +browser-pack@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/browser-pack/-/browser-pack-6.1.0.tgz#c34ba10d0b9ce162b5af227c7131c92c2ecd5774" + integrity sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA== + dependencies: + JSONStream "^1.0.3" + combine-source-map "~0.8.0" + defined "^1.0.0" + safe-buffer "^5.1.1" + through2 "^2.0.0" + umd "^3.0.0" + +browser-resolve@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-2.0.0.tgz#99b7304cb392f8d73dba741bb2d7da28c6d7842b" + integrity sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ== + dependencies: + resolve "^1.17.0" + +browser-stdout@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0, browserify-rsa@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz#b2fd06b5b75ae297f7ce2dc651f918f5be158c8d" + integrity sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog== + dependencies: + bn.js "^5.0.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.2.1.tgz#eaf4add46dd54be3bb3b36c0cf15abbeba7956c3" + integrity sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg== + dependencies: + bn.js "^5.1.1" + browserify-rsa "^4.0.1" + create-hash "^1.2.0" + create-hmac "^1.1.7" + elliptic "^6.5.3" + inherits "^2.0.4" + parse-asn1 "^5.1.5" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +browserify-zlib@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== + dependencies: + pako "~1.0.5" + +browserify@16.5.2: + version "16.5.2" + resolved "https://registry.yarnpkg.com/browserify/-/browserify-16.5.2.tgz#d926835e9280fa5fd57f5bc301f2ef24a972ddfe" + integrity sha512-TkOR1cQGdmXU9zW4YukWzWVSJwrxmNdADFbqbE3HFgQWe5wqZmOawqZ7J/8MPCwk/W8yY7Y0h+7mOtcZxLP23g== + dependencies: + JSONStream "^1.0.3" + assert "^1.4.0" + browser-pack "^6.0.1" + browser-resolve "^2.0.0" + browserify-zlib "~0.2.0" + buffer "~5.2.1" + cached-path-relative "^1.0.0" + concat-stream "^1.6.0" + console-browserify "^1.1.0" + constants-browserify "~1.0.0" + crypto-browserify "^3.0.0" + defined "^1.0.0" + deps-sort "^2.0.0" + domain-browser "^1.2.0" + duplexer2 "~0.1.2" + events "^2.0.0" + glob "^7.1.0" + has "^1.0.0" + htmlescape "^1.1.0" + https-browserify "^1.0.0" + inherits "~2.0.1" + insert-module-globals "^7.0.0" + labeled-stream-splicer "^2.0.0" + mkdirp-classic "^0.5.2" + module-deps "^6.2.3" + os-browserify "~0.3.0" + parents "^1.0.1" + path-browserify "~0.0.0" + process "~0.11.0" + punycode "^1.3.2" + querystring-es3 "~0.2.0" + read-only-stream "^2.0.0" + readable-stream "^2.0.2" + resolve "^1.1.4" + shasum "^1.0.0" + shell-quote "^1.6.1" + stream-browserify "^2.0.0" + stream-http "^3.0.0" + string_decoder "^1.1.1" + subarg "^1.0.0" + syntax-error "^1.1.1" + through2 "^2.0.0" + timers-browserify "^1.0.1" + tty-browserify "0.0.1" + url "~0.11.0" + util "~0.10.1" + vm-browserify "^1.0.0" + xtend "^4.0.0" + +browserslist@^4.14.5, browserslist@^4.17.5, browserslist@^4.19.1: + version "4.19.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.19.1.tgz#4ac0435b35ab655896c31d53018b6dd5e9e4c9a3" + integrity sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A== + dependencies: + caniuse-lite "^1.0.30001286" + electron-to-chromium "^1.4.17" + escalade "^3.1.1" + node-releases "^2.0.1" + picocolors "^1.0.0" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + +buffer@~5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.2.1.tgz#dd57fa0f109ac59c602479044dca7b8b3d0b71d6" + integrity sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + +bytes@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.1.tgz#3f018291cb4cbad9accb6e6970bca9c8889e879a" + integrity sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg== + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +cached-path-relative@^1.0.0, cached-path-relative@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/cached-path-relative/-/cached-path-relative-1.0.2.tgz#a13df4196d26776220cc3356eb147a52dba2c6db" + integrity sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg== + +caching-transform@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/caching-transform/-/caching-transform-4.0.0.tgz#00d297a4206d71e2163c39eaffa8157ac0651f0f" + integrity sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA== + dependencies: + hasha "^5.0.0" + make-dir "^3.0.0" + package-hash "^4.0.0" + write-file-atomic "^3.0.0" + +call-bind@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase@^5.0.0, camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.0.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-lite@^1.0.30001286: + version "1.0.30001297" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001297.tgz#ea7776ccc4992956582cae5b8fea127fbebde430" + integrity sha512-6bbIbowYG8vFs/Lk4hU9jFt7NknGDleVAciK916tp6ft1j+D//ZwwL6LbF1wXMQ32DMSjeuUV8suhh6dlmFjcA== + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +cfb@^1.1.4: + version "1.2.1" + resolved "https://registry.yarnpkg.com/cfb/-/cfb-1.2.1.tgz#209429e4c68efd30641f6fc74b2d6028bd202402" + integrity sha512-wT2ScPAFGSVy7CY+aauMezZBnNrfnaLSrxHUHdea+Td/86vrk6ZquggV+ssBR88zNs0OnBkL2+lf9q0K+zVGzQ== + dependencies: + adler-32 "~1.3.0" + crc-32 "~1.2.0" + printj "~1.3.0" + +chai@^4.2.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.4.tgz#b55e655b31e1eac7099be4c08c21964fce2e6c49" + integrity sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.2" + deep-eql "^3.0.1" + get-func-name "^2.0.0" + pathval "^1.1.1" + type-detect "^4.0.5" + +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0, chalk@^4.1.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +check-error@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" + integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= + +chokidar@3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" + integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.5.0" + optionalDependencies: + fsevents "~2.3.1" + +chokidar@^3.4.0, chokidar@^3.4.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" + integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chownr@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +chrome-trace-event@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" + integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + +codepage@~1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/codepage/-/codepage-1.15.0.tgz#2e00519024b39424ec66eeb3ec07227e692618ab" + integrity sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA== + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +colorette@^1.2.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" + integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== + +colors@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + +colors@~0.6.0-1: + version "0.6.2" + resolved "https://registry.yarnpkg.com/colors/-/colors-0.6.2.tgz#2423fe6678ac0c5dae8852e5d0e5be08c997abcc" + integrity sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w= + +combine-source-map@^0.8.0, combine-source-map@~0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.8.0.tgz#a58d0df042c186fcf822a8e8015f5450d2d79a8b" + integrity sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos= + dependencies: + convert-source-map "~1.1.0" + inline-source-map "~0.6.0" + lodash.memoize "~3.0.3" + source-map "~0.5.3" + +combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + +commander@^7.0.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + +commander@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.1.0.tgz#d121bbae860d9992a3d517ba96f56588e47c6781" + integrity sha1-0SG7roYNmZKj1Re6lvVliOR8Z4E= + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +complex.js@^2.0.15: + version "2.0.15" + resolved "https://registry.yarnpkg.com/complex.js/-/complex.js-2.0.15.tgz#7add6848b4c1d12aa9262f7df925ebe7a51a7406" + integrity sha512-gDBvQU8IG139ZBQTSo2qvDFP+lANMGluM779csXOr6ny1NUtA3wkUnCFjlDNH/moAVfXtvClYt6G0zarFbtz5w== + +component-bind@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" + integrity sha1-AMYIq33Nk4l8AAllGx06jh5zu9E= + +component-emitter@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= + +component-emitter@^1.2.1, component-emitter@~1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +component-inherit@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" + integrity sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM= + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@^1.6.0, concat-stream@^1.6.1, concat-stream@~1.6.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +connect@^3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8" + integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ== + dependencies: + debug "2.6.9" + finalhandler "1.1.2" + parseurl "~1.3.3" + utils-merge "1.0.1" + +console-browserify@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" + integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + +constants-browserify@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +convert-source-map@^1.1.0, convert-source-map@^1.1.3, convert-source-map@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== + dependencies: + safe-buffer "~5.1.1" + +convert-source-map@~1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.1.3.tgz#4829c877e9fe49b3161f3bf3673888e204699860" + integrity sha1-SCnId+n+SbMWHzvzZziI4gRpmGA= + +cookie@~0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1" + integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +core-js-compat@^3.18.0, core-js-compat@^3.19.1: + version "3.20.2" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.20.2.tgz#d1ff6936c7330959b46b2e08b122a8b14e26140b" + integrity sha512-qZEzVQ+5Qh6cROaTPFLNS4lkvQ6mBzE3R6A6EEpssj7Zr2egMHgsy4XapdifqJDGC9CBiNv7s+ejI96rLNQFdg== + dependencies: + browserslist "^4.19.1" + semver "7.0.0" + +core-js@3: + version "3.18.3" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.18.3.tgz#86a0bba2d8ec3df860fefcc07a8d119779f01509" + integrity sha512-tReEhtMReZaPFVw7dajMx0vlsz3oOb8ajgPoHVYGxr8ErnZ6PcYEvvmjGmXlfpnxpkYSdOQttjB+MvVbCGfvLw== + +core-util-is@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +coveralls@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-3.1.1.tgz#f5d4431d8b5ae69c5079c8f8ca00d64ac77cf081" + integrity sha512-+dxnG2NHncSD1NrqbSM3dn/lE57O6Qf/koe9+I7c+wzkqRmEvcp0kgJdxKInzYzkICKkFMZsX3Vct3++tsF9ww== + dependencies: + js-yaml "^3.13.1" + lcov-parse "^1.0.0" + log-driver "^1.2.7" + minimist "^1.2.5" + request "^2.88.2" + +crc-32@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.0.tgz#cb2db6e29b88508e32d9dd0ec1693e7b41a18208" + integrity sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA== + dependencies: + exit-on-epipe "~1.0.1" + printj "~1.1.0" + +create-ecdh@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" + integrity sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A== + dependencies: + bn.js "^4.1.0" + elliptic "^6.5.3" + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crypto-browserify@^3.0.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + +custom-event@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" + integrity sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU= + +d@1, d@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" + integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== + dependencies: + es5-ext "^0.10.50" + type "^1.0.1" + +dash-ast@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dash-ast/-/dash-ast-1.0.0.tgz#12029ba5fb2f8aa6f0a861795b23c1b4b6c27d37" + integrity sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA== + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +date-format@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/date-format/-/date-format-2.1.0.tgz#31d5b5ea211cf5fd764cd38baf9d033df7e125cf" + integrity sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA== + +date-format@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/date-format/-/date-format-3.0.0.tgz#eb8780365c7d2b1511078fb491e6479780f3ad95" + integrity sha512-eyTcpKOcamdhWJXj56DpQMo1ylSQpcGtGKXcU0Tb97+K56/CF5amAqqqNj0+KvA0iw2ynxtHWFsPDSClCxe48w== + +debug@2.6.9, debug@^2.2.0, debug@^2.3.3: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + dependencies: + ms "2.1.2" + +debug@^3.1.0, debug@^3.2.6: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1: + version "4.3.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" + integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== + dependencies: + ms "2.1.2" + +debug@~3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + +debug@~4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + +decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decamelize@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" + integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== + +decimal.js@^10.3.1: + version "10.3.1" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783" + integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +deep-eql@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" + integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== + dependencies: + type-detect "^4.0.0" + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +default-require-extensions@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-3.0.0.tgz#e03f93aac9b2b6443fc52e5e4a37b3ad9ad8df96" + integrity sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg== + dependencies: + strip-bom "^4.0.0" + +define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +defined@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" + integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +deps-sort@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/deps-sort/-/deps-sort-2.0.1.tgz#9dfdc876d2bcec3386b6829ac52162cda9fa208d" + integrity sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw== + dependencies: + JSONStream "^1.0.3" + shasum-object "^1.0.0" + subarg "^1.0.0" + through2 "^2.0.0" + +des.js@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" + integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +detect-libc@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= + +detective@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/detective/-/detective-5.2.0.tgz#feb2a77e85b904ecdea459ad897cc90a99bd2a7b" + integrity sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg== + dependencies: + acorn-node "^1.6.1" + defined "^1.0.0" + minimist "^1.1.1" + +di@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" + integrity sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw= + +diff@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== + +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dom-serialize@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b" + integrity sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs= + dependencies: + custom-event "~1.0.0" + ent "~2.2.0" + extend "^3.0.0" + void-elements "^2.0.0" + +domain-browser@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== + +dotenv@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" + integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== + +duplexer2@^0.1.2, duplexer2@~0.1.0, duplexer2@~0.1.2: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" + integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME= + dependencies: + readable-stream "^2.0.2" + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + +electron-to-chromium@^1.4.17: + version "1.4.37" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.37.tgz#eedd53cad229ae2d1632b958a92a3d7d7b27f553" + integrity sha512-XIvFB1omSAxYgHYX48sC+HR8i/p7lx7R+0cX9faElg1g++h9IilCrJ12+bQuY+d96Wp7zkBiJwMOv+AhLtLrTg== + +elliptic@^6.5.3: + version "6.5.4" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + +engine.io-client@~3.5.0: + version "3.5.2" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.5.2.tgz#0ef473621294004e9ceebe73cef0af9e36f2f5fa" + integrity sha512-QEqIp+gJ/kMHeUun7f5Vv3bteRHppHH/FMBQX/esFj/fuYfjyUKWGMo3VCvIP/V8bE9KcjHmRZrhIz2Z9oNsDA== + dependencies: + component-emitter "~1.3.0" + component-inherit "0.0.3" + debug "~3.1.0" + engine.io-parser "~2.2.0" + has-cors "1.1.0" + indexof "0.0.1" + parseqs "0.0.6" + parseuri "0.0.6" + ws "~7.4.2" + xmlhttprequest-ssl "~1.6.2" + yeast "0.1.2" + +engine.io-parser@~2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.2.1.tgz#57ce5611d9370ee94f99641b589f94c97e4f5da7" + integrity sha512-x+dN/fBH8Ro8TFwJ+rkB2AmuVw9Yu2mockR/p3W8f8YtExwFgDvBDi0GWyb4ZLkpahtDGZgtr3zLovanJghPqg== + dependencies: + after "0.8.2" + arraybuffer.slice "~0.0.7" + base64-arraybuffer "0.1.4" + blob "0.0.5" + has-binary2 "~1.0.2" + +engine.io@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.5.0.tgz#9d6b985c8a39b1fe87cd91eb014de0552259821b" + integrity sha512-21HlvPUKaitDGE4GXNtQ7PLP0Sz4aWLddMPw2VTyFz1FVZqu/kZsJUO8WNpKuE/OCL7nkfRaOui2ZCJloGznGA== + dependencies: + accepts "~1.3.4" + base64id "2.0.0" + cookie "~0.4.1" + debug "~4.1.0" + engine.io-parser "~2.2.0" + ws "~7.4.2" + +enhanced-resolve@^4.0.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" + integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.5.0" + tapable "^1.0.0" + +enhanced-resolve@^5.0.0, enhanced-resolve@^5.7.0: + version "5.8.3" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz#6d552d465cce0423f5b3d718511ea53826a7b2f0" + integrity sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + +enquirer@^2.3.5, enquirer@^2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + +ent@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" + integrity sha1-6WQhkyWiHQX0RGai9obtbOX13R0= + +envinfo@^7.7.3: + version "7.8.1" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" + integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== + +errno@^0.1.3: + version "0.1.8" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== + dependencies: + prr "~1.0.1" + +es-module-lexer@^0.3.26: + version "0.3.26" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.3.26.tgz#7b507044e97d5b03b01d4392c74ffeb9c177a83b" + integrity sha512-Va0Q/xqtrss45hWzP8CZJwzGSZJjDM5/MJRE3IXXnUCcVLElR9BRaE9F62BopysASyc4nM3uwhSW7FFB9nlWAA== + +es5-ext@^0.10.35, es5-ext@^0.10.50: + version "0.10.53" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" + integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== + dependencies: + es6-iterator "~2.0.3" + es6-symbol "~3.1.3" + next-tick "~1.0.0" + +es6-error@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" + integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== + +es6-iterator@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-promise@^4.0.3: + version "4.2.8" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + +es6-promisify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= + dependencies: + es6-promise "^4.0.3" + +es6-symbol@^3.1.1, es6-symbol@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" + integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== + dependencies: + d "^1.0.1" + ext "^1.1.2" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + +escape-latex@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/escape-latex/-/escape-latex-1.2.0.tgz#07c03818cf7dac250cce517f4fda1b001ef2bca1" + integrity sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw== + +escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + +eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint@^7.1.0: + version "7.32.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" + integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== + dependencies: + "@babel/code-frame" "7.12.11" + "@eslint/eslintrc" "^0.4.3" + "@humanwhocodes/config-array" "^0.5.0" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.0.1" + doctrine "^3.0.0" + enquirer "^2.3.5" + escape-string-regexp "^4.0.0" + eslint-scope "^5.1.1" + eslint-utils "^2.1.0" + eslint-visitor-keys "^2.0.0" + espree "^7.3.1" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.1.2" + globals "^13.6.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.0.4" + natural-compare "^1.4.0" + optionator "^0.9.1" + progress "^2.0.0" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + table "^6.0.9" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^7.3.0, espree@^7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" + integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== + dependencies: + acorn "^7.4.0" + acorn-jsx "^5.3.1" + eslint-visitor-keys "^1.3.0" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +events@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/events/-/events-2.1.0.tgz#2a9a1e18e6106e0e812aa9ebd4a819b3c29c0ba5" + integrity sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg== + +events@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +executioner@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/executioner/-/executioner-2.0.1.tgz#add328e03bc45dd598f358fbb529fc0be0ec6fcd" + integrity sha1-rdMo4DvEXdWY81j7tSn8C+Dsb80= + dependencies: + mixly "^1.0.0" + +exit-on-epipe@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz#0bdd92e87d5285d267daa8171d0eb06159689692" + integrity sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw== + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +ext@^1.1.2: + version "1.6.0" + resolved "https://registry.yarnpkg.com/ext/-/ext-1.6.0.tgz#3871d50641e874cc172e2b53f919842d19db4c52" + integrity sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg== + dependencies: + type "^2.5.0" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@^3.0.0, extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" + integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^3.1.1: + version "3.2.7" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" + integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + +fast-safe-stringify@^2.0.7: + version "2.1.1" + resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" + integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== + +fastest-levenshtein@^1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2" + integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow== + +fastq@^1.6.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + dependencies: + reusify "^1.0.4" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + +find-cache-dir@^3.2.0, find-cache-dir@^3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" + integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + +find-up@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +findup@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/findup/-/findup-0.1.5.tgz#8ad929a3393bac627957a7e5de4623b06b0e2ceb" + integrity sha1-itkpozk7rGJ5V6fl3kYjsGsOLOs= + dependencies: + colors "~0.6.0-1" + commander "~2.1.0" + +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + +flatted@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" + integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== + +flatted@^3.1.0: + version "3.2.4" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.4.tgz#28d9969ea90661b5134259f312ab6aa7929ac5e2" + integrity sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw== + +follow-redirects@^1.0.0: + version "1.14.6" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.6.tgz#8cfb281bbc035b3c067d6cd975b0f6ade6e855cd" + integrity sha512-fhUl5EwSJbbl8AR+uYL2KQDxLkdSjZGR36xy46AO7cOMTrCMON6Sa28FmAnC2tRTDbd/Uuzz3aJBv7EBN7JH8A== + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +foreground-child@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-2.0.0.tgz#71b32800c9f15aa8f2f83f4a6bd9bff35d861a53" + integrity sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^3.0.2" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +form-data@^2.5.0: + version "2.5.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" + integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +form-data@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" + integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +frac@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/frac/-/frac-1.1.2.tgz#3d74f7f6478c88a1b5020306d747dc6313c74d0b" + integrity sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA== + +fraction.js@^4.1.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.1.2.tgz#13e420a92422b6cf244dff8690ed89401029fbe8" + integrity sha512-o2RiJQ6DZaR/5+Si0qJUIy637QMRudSi9kU/FFzx9EZazrIdnBgpU+3sEWCxAVhH2RtxW2Oz+T4p2o8uOPVcgA== + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +from2-array@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/from2-array/-/from2-array-0.0.4.tgz#eafc16b65f6e2719bcd57fdc1869005ac1332cd6" + integrity sha1-6vwWtl9uJxm81X/cGGkAWsEzLNY= + dependencies: + from2 "^2.0.3" + +from2@^2.0.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +fromentries@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/fromentries/-/fromentries-1.3.2.tgz#e4bca6808816bf8f93b52750f1127f5a6fd86e3a" + integrity sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg== + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-minipass@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== + dependencies: + minipass "^2.6.0" + +fs-readdir-recursive@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" + integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@~2.3.1, fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +fulcon@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/fulcon/-/fulcon-1.0.2.tgz#8a4dfda4c73fcd9cc62a79d5045c392b45547320" + integrity sha1-ik39pMc/zZzGKnnVBFw5K0VUcyA= + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-assigned-identifiers@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz#6dbf411de648cbaf8d9169ebb0d2d576191e2ff1" + integrity sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ== + +get-caller-file@^2.0.1, get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-func-name@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" + integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= + +get-intrinsic@^1.0.2: + version "1.1.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" + integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +glob-parent@^5.1.2, glob-parent@~5.1.0, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + +glob@7.1.6: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.0.0, glob@^7.1.0, glob@^7.1.1, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: + version "7.2.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^13.6.0, globals@^13.9.0: + version "13.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.12.0.tgz#4d733760304230a0082ed96e21e5c565f898089e" + integrity sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg== + dependencies: + type-fest "^0.20.2" + +globby@^11.0.3: + version "11.0.4" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5" + integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.1.1" + ignore "^5.1.4" + merge2 "^1.3.0" + slash "^3.0.0" + +google-protobuf@^3.9.2: + version "3.18.1" + resolved "https://registry.yarnpkg.com/google-protobuf/-/google-protobuf-3.18.1.tgz#31de10b65e833aa5bbd44680e8a748fa54c920f6" + integrity sha512-cDqSamZ8rGs+pOzhIsBte7wpezUKg/sggeptDWN5odhnRY/eDLa5VWLeNeQvcfiqjS3yUwgM+6OePCJMB7aWZA== + +graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: + version "4.2.9" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" + integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== + +growl@1.10.5: + version "1.10.5" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" + integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + +has-binary2@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-binary2/-/has-binary2-1.0.3.tgz#7776ac627f3ea77250cfc332dab7ddf5e4f5d11d" + integrity sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw== + dependencies: + isarray "2.0.1" + +has-cors@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" + integrity sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk= + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-symbols@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" + integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.0, has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +hasha@^5.0.0: + version "5.2.2" + resolved "https://registry.yarnpkg.com/hasha/-/hasha-5.2.2.tgz#a48477989b3b327aea3c04f53096d816d97522a1" + integrity sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ== + dependencies: + is-stream "^2.0.0" + type-fest "^0.8.0" + +hat@^0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/hat/-/hat-0.0.3.tgz#bb014a9e64b3788aed8005917413d4ff3d502d8a" + integrity sha1-uwFKnmSzeIrtgAWRdBPU/z1QLYo= + +he@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +hmac-drbg@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +htmlescape@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/htmlescape/-/htmlescape-1.1.1.tgz#3a03edc2214bca3b66424a3e7959349509cb0351" + integrity sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E= + +http-errors@1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c" + integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.1" + +http-proxy@^1.18.1: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + +https-proxy-agent@^2.2.1: + version "2.2.4" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" + integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg== + dependencies: + agent-base "^4.3.0" + debug "^3.1.0" + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +iconv-lite@0.4.24, iconv-lite@^0.4.4: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +ieee754@^1.1.4: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ify-loader@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ify-loader/-/ify-loader-1.1.0.tgz#abe0654c919b48483cf075fe4a0ed2aad2da6a8b" + integrity sha512-EiyC45FRIs+z4g98+jBzuYCfoM6TKG9p7Ek5YZUeM7rucNucaMZIseRj/5Q3I4ypkZXyC2wnU1RcYrVmshe2xw== + dependencies: + bl "^1.0.0" + findup "^0.1.5" + from2-array "0.0.4" + map-limit "0.0.1" + multipipe "^0.3.0" + read-package-json "^2.0.2" + resolve "^1.1.6" + +ignore-walk@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.4.tgz#c9a09f69b7c7b479a5d74ac1a3c0d4236d2a6335" + integrity sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ== + dependencies: + minimatch "^3.0.4" + +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +ignore@^5.1.4, ignore@^5.1.8: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== + +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-local@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" + integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +indexof@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" + integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +ini@~1.3.0: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +inline-source-map@~0.6.0: + version "0.6.2" + resolved "https://registry.yarnpkg.com/inline-source-map/-/inline-source-map-0.6.2.tgz#f9393471c18a79d1724f863fa38b586370ade2a5" + integrity sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU= + dependencies: + source-map "~0.5.3" + +insert-module-globals@^7.0.0: + version "7.2.1" + resolved "https://registry.yarnpkg.com/insert-module-globals/-/insert-module-globals-7.2.1.tgz#d5e33185181a4e1f33b15f7bf100ee91890d5cb3" + integrity sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg== + dependencies: + JSONStream "^1.0.3" + acorn-node "^1.5.2" + combine-source-map "^0.8.0" + concat-stream "^1.6.1" + is-buffer "^1.1.0" + path-is-absolute "^1.0.1" + process "~0.11.0" + through2 "^2.0.0" + undeclared-identifiers "^1.1.2" + xtend "^4.0.0" + +install-peers@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/install-peers/-/install-peers-1.0.3.tgz#6348f8f67e6bc23c19ee78adb819c43f8d1dd7d7" + integrity sha512-MAlSHlrn4p+g3fhx8ZVxQZXX+MkeinKLu/ThfAmrVnN5c2L8Vof7myb0UsgowJEiGcFNHYnTvo37r3uap5asYA== + dependencies: + executioner "^2.0.1" + +interpret@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" + integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-buffer@^1.1.0, is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-core-module@^2.8.0: + version "2.8.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" + integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== + dependencies: + has "^1.0.3" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-plain-obj@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-typedarray@^1.0.0, is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +isarray@1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isarray@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" + integrity sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4= + +isbinaryfile@^4.0.6: + version "4.0.8" + resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-4.0.8.tgz#5d34b94865bd4946633ecc78a026fc76c5b11fcf" + integrity sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.0.0-alpha.1: + version "3.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" + integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + +istanbul-lib-hook@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz#8f84c9434888cc6b1d0a9d7092a76d239ebf0cc6" + integrity sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ== + dependencies: + append-transform "^2.0.0" + +istanbul-lib-instrument@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" + integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== + dependencies: + "@babel/core" "^7.7.5" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.0.0" + semver "^6.3.0" + +istanbul-lib-processinfo@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz#e1426514662244b2f25df728e8fd1ba35fe53b9c" + integrity sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw== + dependencies: + archy "^1.0.0" + cross-spawn "^7.0.0" + istanbul-lib-coverage "^3.0.0-alpha.1" + make-dir "^3.0.0" + p-map "^3.0.0" + rimraf "^3.0.0" + uuid "^3.3.3" + +istanbul-lib-report@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.0.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.3.tgz#4bcae3103b94518117930d51283690960b50d3c2" + integrity sha512-x9LtDVtfm/t1GFiLl3NffC7hz+I1ragvgX1P/Lg1NlIagifZDKUkuuaAxH/qpwj2IuEfD8G2Bs/UKp+sZ/pKkg== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +javascript-natural-sort@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz#f9e2303d4507f6d74355a73664d1440fb5a0ef59" + integrity sha1-+eIwPUUH9tdDVac2ZNFED7Wg71k= + +jest-worker@^27.4.1: + version "27.4.6" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.4.6.tgz#5d2d93db419566cb680752ca0792780e71b3273e" + integrity sha512-gHWJF/6Xi5CTG5QCvROr6GcmpIqNYpDJyc8A1h/DyXqH1tD6SnRCM0d3U5msV31D2LB/U+E0M+W4oyvKV44oNw== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +js-string-escape@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/js-string-escape/-/js-string-escape-1.0.1.tgz#e2625badbc0d67c7533e9edc1068c587ae4137ef" + integrity sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8= + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.0.0.tgz#f426bc0ff4b4051926cd588c71113183409a121f" + integrity sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q== + dependencies: + argparse "^2.0.1" + +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + +json-parse-better-errors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-schema@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + +json-stable-stringify@~0.0.0: + version "0.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz#611c23e814db375527df851193db59dd2af27f45" + integrity sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U= + dependencies: + jsonify "~0.0.0" + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +json5@^2.1.2: + version "2.2.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" + integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== + dependencies: + minimist "^1.2.5" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= + +jsonparse@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= + +jsprim@^1.2.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" + integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.4.0" + verror "1.10.0" + +karma-browserify@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/karma-browserify/-/karma-browserify-7.0.0.tgz#60f443f991ecfbbfb5737a9fd76e73b8b6eb9a57" + integrity sha512-SLgh1dmF2eZEj3glrmTD2CMJRGZwEiKA6k2hBr2+2JDC4JMU1dlsvBKpV66Lvi/tbj3H9qA+Vl/FdIcfPRrJpA== + dependencies: + convert-source-map "^1.1.3" + hat "^0.0.3" + js-string-escape "^1.0.0" + lodash "^4.17.14" + minimatch "^3.0.0" + os-shim "^0.1.3" + +karma-chai@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/karma-chai/-/karma-chai-0.1.0.tgz#bee5ad40400517811ae34bb945f762909108b79a" + integrity sha1-vuWtQEAFF4Ea40u5RfdikJEIt5o= + +karma-chrome-launcher@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-3.1.0.tgz#805a586799a4d05f4e54f72a204979f3f3066738" + integrity sha512-3dPs/n7vgz1rxxtynpzZTvb9y/GIaW8xjAwcIGttLbycqoFtI7yo1NGnQi6oFTherRE+GIhCAHZC4vEqWGhNvg== + dependencies: + which "^1.2.1" + +karma-mocha@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/karma-mocha/-/karma-mocha-2.0.1.tgz#4b0254a18dfee71bdbe6188d9a6861bf86b0cd7d" + integrity sha512-Tzd5HBjm8his2OA4bouAsATYEpZrp9vC7z5E5j4C5Of5Rrs1jY67RAwXNcVmd/Bnk1wgvQRou0zGVLey44G4tQ== + dependencies: + minimist "^1.2.3" + +karma@5.2.3: + version "5.2.3" + resolved "https://registry.yarnpkg.com/karma/-/karma-5.2.3.tgz#3264024219bad2728e92542e0058a2492d7a46e4" + integrity sha512-tHdyFADhVVPBorIKCX8A37iLHxc6RBRphkSoQ+MLKdAtFn1k97tD8WUGi1KlEtDZKL3hui0qhsY9HXUfSNDYPQ== + dependencies: + body-parser "^1.19.0" + braces "^3.0.2" + chokidar "^3.4.2" + colors "^1.4.0" + connect "^3.7.0" + di "^0.0.1" + dom-serialize "^2.2.1" + glob "^7.1.6" + graceful-fs "^4.2.4" + http-proxy "^1.18.1" + isbinaryfile "^4.0.6" + lodash "^4.17.19" + log4js "^6.2.1" + mime "^2.4.5" + minimatch "^3.0.4" + qjobs "^1.2.0" + range-parser "^1.2.1" + rimraf "^3.0.2" + socket.io "^2.3.0" + source-map "^0.6.1" + tmp "0.2.1" + ua-parser-js "0.7.22" + yargs "^15.3.1" + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +labeled-stream-splicer@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz#42a41a16abcd46fd046306cf4f2c3576fffb1c21" + integrity sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw== + dependencies: + inherits "^2.0.1" + stream-splicer "^2.0.0" + +lcov-parse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-1.0.0.tgz#eb0d46b54111ebc561acb4c408ef9363bdc8f7e0" + integrity sha1-6w1GtUER68VhrLTECO+TY73I9+A= + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +loader-runner@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.2.0.tgz#d7022380d66d14c5fb1d496b89864ebcfd478384" + integrity sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw== + +loader-utils@^1.1.0, loader-utils@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= + +lodash.flattendeep@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" + integrity sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI= + +lodash.memoize@~3.0.3: + version "3.0.4" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-3.0.4.tgz#2dcbd2c287cbc0a55cc42328bd0c736150d53e3f" + integrity sha1-LcvSwofLwKVcxCMovQxzYVDVPj8= + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= + +lodash@^4.17.14, lodash@^4.17.19, lodash@^4.17.5: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-driver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8" + integrity sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg== + +log-symbols@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.0.0.tgz#69b3cc46d20f448eccdb75ea1fa733d9e821c920" + integrity sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA== + dependencies: + chalk "^4.0.0" + +log-symbols@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" + integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== + dependencies: + chalk "^2.0.1" + +log4js@^6.2.1: + version "6.3.0" + resolved "https://registry.yarnpkg.com/log4js/-/log4js-6.3.0.tgz#10dfafbb434351a3e30277a00b9879446f715bcb" + integrity sha512-Mc8jNuSFImQUIateBFwdOQcmC6Q5maU0VVvdC2R6XMb66/VnT+7WS4D/0EeNMZu1YODmJe5NIn2XftCzEocUgw== + dependencies: + date-format "^3.0.0" + debug "^4.1.1" + flatted "^2.0.1" + rfdc "^1.1.4" + streamroller "^2.2.4" + +loglevelnext@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/loglevelnext/-/loglevelnext-1.0.5.tgz#36fc4f5996d6640f539ff203ba819641680d75a2" + integrity sha512-V/73qkPuJmx4BcBF19xPBr+0ZRVBhc4POxvZTZdMeXpJ4NItXSJ/MSwuFT0kQJlCbXvdlZoQQ/418bS1y9Jh6A== + dependencies: + es6-symbol "^3.1.1" + object.assign "^4.1.0" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-limit@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/map-limit/-/map-limit-0.0.1.tgz#eb7961031c0f0e8d001bf2d56fab685d58822f38" + integrity sha1-63lhAxwPDo0AG/LVb6toXViCLzg= + dependencies: + once "~1.3.0" + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +mathjs@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/mathjs/-/mathjs-10.0.0.tgz#872e8e5c0d23a383760cb84e16542fad5093c6a5" + integrity sha512-PZcQ73mVvVG2GZXvE47q+j7P3ALVxWUM51wTmlVX3F/3IJMLNziNIqStwyIDAO64ZGB8u3iFlQwxT7DIijtNlw== + dependencies: + "@babel/runtime" "^7.16.0" + complex.js "^2.0.15" + decimal.js "^10.3.1" + escape-latex "^1.2.0" + fraction.js "^4.1.1" + javascript-natural-sort "^0.7.1" + seedrandom "^3.0.5" + tiny-emitter "^2.1.0" + typed-function "^2.0.0" + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + +memory-fs@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" + integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^3.1.9: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +micromatch@^4.0.0, micromatch@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" + integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== + dependencies: + braces "^3.0.1" + picomatch "^2.2.3" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mime-db@1.50.0: + version "1.50.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.50.0.tgz#abd4ac94e98d3c0e185016c67ab45d5fde40c11f" + integrity sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A== + +mime-db@1.51.0: + version "1.51.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c" + integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g== + +mime-types@^2.1.12: + version "2.1.33" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.33.tgz#1fa12a904472fafd068e48d9e8401f74d3f70edb" + integrity sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g== + dependencies: + mime-db "1.50.0" + +mime-types@^2.1.27, mime-types@~2.1.19, mime-types@~2.1.24: + version "2.1.34" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24" + integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A== + dependencies: + mime-db "1.51.0" + +mime@^2.4.5: + version "2.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" + integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + +minimatch@3.0.4, minimatch@^3.0.0, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +minipass@^2.6.0, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== + dependencies: + minipass "^2.9.0" + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mixly@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/mixly/-/mixly-1.0.0.tgz#9b5a2e1f63e6dfba0d30e6797ffae62ab1dc24ef" + integrity sha1-m1ouH2Pm37oNMOZ5f/rmKrHcJO8= + dependencies: + fulcon "^1.0.1" + +mkdirp-classic@^0.5.2: + version "0.5.3" + resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" + integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== + +mkdirp@^0.5.1, mkdirp@^0.5.5: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +mocha@^8.3.0: + version "8.4.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-8.4.0.tgz#677be88bf15980a3cae03a73e10a0fc3997f0cff" + integrity sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ== + dependencies: + "@ungap/promise-all-settled" "1.1.2" + ansi-colors "4.1.1" + browser-stdout "1.3.1" + chokidar "3.5.1" + debug "4.3.1" + diff "5.0.0" + escape-string-regexp "4.0.0" + find-up "5.0.0" + glob "7.1.6" + growl "1.10.5" + he "1.2.0" + js-yaml "4.0.0" + log-symbols "4.0.0" + minimatch "3.0.4" + ms "2.1.3" + nanoid "3.1.20" + serialize-javascript "5.0.1" + strip-json-comments "3.1.1" + supports-color "8.1.1" + which "2.0.2" + wide-align "1.1.3" + workerpool "6.1.0" + yargs "16.2.0" + yargs-parser "20.2.4" + yargs-unparser "2.0.0" + +module-deps@^6.2.3: + version "6.2.3" + resolved "https://registry.yarnpkg.com/module-deps/-/module-deps-6.2.3.tgz#15490bc02af4b56cf62299c7c17cba32d71a96ee" + integrity sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA== + dependencies: + JSONStream "^1.0.3" + browser-resolve "^2.0.0" + cached-path-relative "^1.0.2" + concat-stream "~1.6.0" + defined "^1.0.0" + detective "^5.2.0" + duplexer2 "^0.1.2" + inherits "^2.0.1" + parents "^1.0.0" + readable-stream "^2.0.2" + resolve "^1.4.0" + stream-combiner2 "^1.1.1" + subarg "^1.0.0" + through2 "^2.0.0" + xtend "^4.0.0" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3, ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multipipe@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/multipipe/-/multipipe-0.3.1.tgz#92625525761ba04feaa09605b6382bce2c91f11f" + integrity sha1-kmJVJXYboE/qoJYFtjgrziyR8R8= + dependencies: + duplexer2 "^0.1.2" + +nanoid@3.1.20: + version "3.1.20" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.20.tgz#badc263c6b1dcf14b71efaa85f6ab4c1d6cfc788" + integrity sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + +needle@^2.2.1: + version "2.9.1" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.9.1.tgz#22d1dffbe3490c2b83e301f7709b6736cd8f2684" + integrity sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ== + dependencies: + debug "^3.2.6" + iconv-lite "^0.4.4" + sax "^1.2.4" + +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + +neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +next-tick@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" + integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= + +node-fetch@^2.6.1: + version "2.6.6" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.6.tgz#1751a7c01834e8e1697758732e9efb6eeadfaf89" + integrity sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA== + dependencies: + whatwg-url "^5.0.0" + +node-fetch@~2.6.1: + version "2.6.5" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.5.tgz#42735537d7f080a7e5f78b6c549b7146be1742fd" + integrity sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ== + dependencies: + whatwg-url "^5.0.0" + +node-pre-gyp@0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz#9a0596533b877289bcad4e143982ca3d904ddc83" + integrity sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA== + dependencies: + detect-libc "^1.0.2" + mkdirp "^0.5.1" + needle "^2.2.1" + nopt "^4.0.1" + npm-packlist "^1.1.6" + npmlog "^4.0.2" + rc "^1.2.7" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^4.4.2" + +node-preload@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/node-preload/-/node-preload-0.2.1.tgz#c03043bb327f417a18fee7ab7ee57b408a144301" + integrity sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ== + dependencies: + process-on-spawn "^1.0.0" + +node-releases@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5" + integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA== + +nopt@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" + integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg== + dependencies: + abbrev "1" + osenv "^0.1.4" + +normalize-package-data@^2.0.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-bundled@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.2.tgz#944c78789bd739035b70baa2ca5cc32b8d860bc1" + integrity sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ== + dependencies: + npm-normalize-package-bin "^1.0.1" + +npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== + +npm-packlist@^1.1.6: + version "1.4.8" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" + integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + npm-normalize-package-bin "^1.0.1" + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +npmlog@^4.0.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +nyc@^15.1.0: + version "15.1.0" + resolved "https://registry.yarnpkg.com/nyc/-/nyc-15.1.0.tgz#1335dae12ddc87b6e249d5a1994ca4bdaea75f02" + integrity sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A== + dependencies: + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + caching-transform "^4.0.0" + convert-source-map "^1.7.0" + decamelize "^1.2.0" + find-cache-dir "^3.2.0" + find-up "^4.1.0" + foreground-child "^2.0.0" + get-package-type "^0.1.0" + glob "^7.1.6" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-hook "^3.0.0" + istanbul-lib-instrument "^4.0.0" + istanbul-lib-processinfo "^2.0.2" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.0.2" + make-dir "^3.0.0" + node-preload "^0.2.1" + p-map "^3.0.0" + process-on-spawn "^1.0.0" + resolve-from "^5.0.0" + rimraf "^3.0.0" + signal-exit "^3.0.2" + spawn-wrap "^2.0.0" + test-exclude "^6.0.0" + yargs "^15.0.2" + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +once@~1.3.0: + version "1.3.3" + resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" + integrity sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA= + dependencies: + wrappy "1" + +onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + +os-browserify@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + +os-shim@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/os-shim/-/os-shim-0.1.3.tgz#6b62c3791cf7909ea35ed46e17658bb417cb3917" + integrity sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc= + +os-tmpdir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +osenv@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-map@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" + integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== + dependencies: + aggregate-error "^3.0.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +package-hash@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/package-hash/-/package-hash-4.0.0.tgz#3537f654665ec3cc38827387fc904c163c54f506" + integrity sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ== + dependencies: + graceful-fs "^4.1.15" + hasha "^5.0.0" + lodash.flattendeep "^4.4.0" + release-zalgo "^1.0.0" + +pako@~1.0.5: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + +papaparse@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/papaparse/-/papaparse-5.3.1.tgz#770b7a9124d821d4b2132132b7bd7dce7194b5b1" + integrity sha512-Dbt2yjLJrCwH2sRqKFFJaN5XgIASO9YOFeFP8rIBRG2Ain8mqk5r1M6DkfvqEVozVcz3r3HaUGw253hA1nLIcA== + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parents@^1.0.0, parents@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parents/-/parents-1.0.1.tgz#fedd4d2bf193a77745fe71e371d73c3307d9c751" + integrity sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E= + dependencies: + path-platform "~0.11.15" + +parse-asn1@^5.0.0, parse-asn1@^5.1.5: + version "5.1.6" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.6.tgz#385080a3ec13cb62a62d39409cb3e88844cdaed4" + integrity sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw== + dependencies: + asn1.js "^5.2.0" + browserify-aes "^1.0.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + +parseqs@0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.6.tgz#8e4bb5a19d1cdc844a08ac974d34e273afa670d5" + integrity sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w== + +parseuri@0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.6.tgz#e1496e829e3ac2ff47f39a4dd044b32823c4a25a" + integrity sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow== + +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-browserify@~0.0.0: + version "0.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-platform@~0.11.15: + version "0.11.15" + resolved "https://registry.yarnpkg.com/path-platform/-/path-platform-0.11.15.tgz#e864217f74c36850f0852b78dc7bf7d4a5721bf2" + integrity sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I= + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pathval@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" + integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== + +pbkdf2@^3.0.3: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" + integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pkg-dir@^4.1.0, pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +plotly.js-dist-min@^2.8.0: + version "2.8.3" + resolved "https://registry.yarnpkg.com/plotly.js-dist-min/-/plotly.js-dist-min-2.8.3.tgz#0ffa317de10dd48f0c32d15c83c41f60230f50b3" + integrity sha512-TjovBrqIbedUfjGWNMMs++az3lF4hsIAB8EjqM/mC0cPrO7Wg86lBkHAsRbMra5aWyXA+M52yiQUUKBfThqwzg== + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +printj@~1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/printj/-/printj-1.1.2.tgz#d90deb2975a8b9f600fb3a1c94e3f4c53c78a222" + integrity sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ== + +printj@~1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/printj/-/printj-1.2.3.tgz#2cfb2b192a1e5385dbbe5b46658ac34aa828508a" + integrity sha512-sanczS6xOJOg7IKDvi4sGOUOe7c1tsEzjwlLFH/zgwx/uyImVM9/rgBkc8AfiQa/Vg54nRd8mkm9yI7WV/O+WA== + +printj@~1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/printj/-/printj-1.3.0.tgz#9018a918a790e43707f10625d6e10187a367cff6" + integrity sha512-017o8YIaz8gLhaNxRB9eBv2mWXI2CtzhPJALnQTP+OPpuUfP0RMWqr/mHCzqVeu1AQxfzSfAtAq66vKB8y7Lzg== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process-on-spawn@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/process-on-spawn/-/process-on-spawn-1.0.0.tgz#95b05a23073d30a17acfdc92a440efd2baefdc93" + integrity sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg== + dependencies: + fromentries "^1.2.0" + +process@~0.11.0: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + +psl@^1.1.28: + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +punycode@^1.3.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +qjobs@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.2.0.tgz#c45e9c61800bd087ef88d7e256423bdd49e5d071" + integrity sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg== + +qs@6.9.6: + version "6.9.6" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.6.tgz#26ed3c8243a431b2924aca84cc90471f35d5a0ee" + integrity sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ== + +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + +querystring-es3@~0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +range-parser@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.2.tgz#baf3e9c21eebced59dd6533ac872b71f7b61cb32" + integrity sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ== + dependencies: + bytes "3.1.1" + http-errors "1.8.1" + iconv-lite "0.4.24" + unpipe "1.0.0" + +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +read-only-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-only-stream/-/read-only-stream-2.0.0.tgz#2724fd6a8113d73764ac288d4386270c1dbf17f0" + integrity sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A= + dependencies: + readable-stream "^2.0.2" + +read-package-json@^2.0.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.1.2.tgz#6992b2b66c7177259feb8eaac73c3acd28b9222a" + integrity sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA== + dependencies: + glob "^7.1.1" + json-parse-even-better-errors "^2.3.0" + normalize-package-data "^2.0.0" + npm-normalize-package-bin "^1.0.0" + +readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.2.2, readable-stream@^2.3.5, readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" + integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" + integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== + dependencies: + picomatch "^2.2.1" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +rechoir@^0.7.0: + version "0.7.1" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.1.tgz#9478a96a1ca135b5e88fc027f03ee92d6c645686" + integrity sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg== + dependencies: + resolve "^1.9.0" + +regenerate-unicode-properties@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-9.0.0.tgz#54d09c7115e1f53dc2314a974b32c1c344efe326" + integrity sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA== + dependencies: + regenerate "^1.4.2" + +regenerate@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.5: + version "0.13.9" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" + integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== + +regenerator-transform@^0.14.2: + version "0.14.5" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" + integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== + dependencies: + "@babel/runtime" "^7.8.4" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexpp@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + +regexpu-core@^4.7.1: + version "4.8.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.8.0.tgz#e5605ba361b67b1718478501327502f4479a98f0" + integrity sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties "^9.0.0" + regjsgen "^0.5.2" + regjsparser "^0.7.0" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.0.0" + +regjsgen@^0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" + integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== + +regjsparser@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.7.0.tgz#a6b667b54c885e18b52554cb4960ef71187e9968" + integrity sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ== + dependencies: + jsesc "~0.5.0" + +release-zalgo@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/release-zalgo/-/release-zalgo-1.0.0.tgz#09700b7e5074329739330e535c5a90fb67851730" + integrity sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA= + dependencies: + es6-error "^4.0.1" + +repeat-element@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" + integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +request@^2.88.2: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@^1.1.4, resolve@^1.1.6, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.4.0, resolve@^1.9.0: + version "1.21.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.21.0.tgz#b51adc97f3472e6a5cf4444d34bc9d6b9037591f" + integrity sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA== + dependencies: + is-core-module "^2.8.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rfdc@^1.1.4: + version "1.3.0" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" + integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== + +rimraf@^2.6.1, rimraf@^2.6.2: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@^3.0.0, rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sax@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +schema-utils@^2.6.5: + version "2.7.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" + integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== + dependencies: + "@types/json-schema" "^7.0.5" + ajv "^6.12.4" + ajv-keywords "^3.5.2" + +schema-utils@^3.0.0, schema-utils@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" + integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +seedrandom@2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-2.4.3.tgz#2438504dad33917314bff18ac4d794f16d6aaecc" + integrity sha1-JDhQTa0zkXMUv/GKxNeU8W1qrsw= + +seedrandom@^2.4.3: + version "2.4.4" + resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-2.4.4.tgz#b25ea98632c73e45f58b77cfaa931678df01f9ba" + integrity sha512-9A+PDmgm+2du77B5i0Ip2cxOqqHjgNxnBgglxLcX78A2D6c2rTo61z4jnVABpF4cKeDMDG+cmXXvdnqse2VqMA== + +seedrandom@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-3.0.5.tgz#54edc85c95222525b0c7a6f6b3543d8e0b3aa0a7" + integrity sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg== + +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + +semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.2.1, semver@^7.3.4, semver@^7.3.5: + version "7.3.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" + +serialize-javascript@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" + integrity sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA== + dependencies: + randombytes "^2.1.0" + +serialize-javascript@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" + integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== + dependencies: + randombytes "^2.1.0" + +set-blocking@^2.0.0, set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +sha.js@^2.4.0, sha.js@^2.4.8, sha.js@~2.4.4: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + +shasum-object@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shasum-object/-/shasum-object-1.0.0.tgz#0b7b74ff5b66ecf9035475522fa05090ac47e29e" + integrity sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg== + dependencies: + fast-safe-stringify "^2.0.7" + +shasum@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/shasum/-/shasum-1.0.2.tgz#e7012310d8f417f4deb5712150e5678b87ae565f" + integrity sha1-5wEjENj0F/TetXEhUOVni4euVl8= + dependencies: + json-stable-stringify "~0.0.0" + sha.js "~2.4.4" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shell-quote@^1.6.1: + version "1.7.3" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.3.tgz#aa40edac170445b9a431e17bb62c0b881b9c4123" + integrity sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw== + +signal-exit@^3.0.0: + version "3.0.5" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.5.tgz#9e3e8cc0c75a99472b44321033a7702e7738252f" + integrity sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ== + +signal-exit@^3.0.2, signal-exit@^3.0.3: + version "3.0.6" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.6.tgz#24e630c4b0f03fea446a2bd299e62b4a6ca8d0af" + integrity sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ== + +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +socket.io-adapter@~1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz#ab3f0d6f66b8fc7fca3959ab5991f82221789be9" + integrity sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g== + +socket.io-client@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.4.0.tgz#aafb5d594a3c55a34355562fc8aea22ed9119a35" + integrity sha512-M6xhnKQHuuZd4Ba9vltCLT9oa+YvTsP8j9NcEiLElfIg8KeYPyhWOes6x4t+LTAC8enQbE/995AdTem2uNyKKQ== + dependencies: + backo2 "1.0.2" + component-bind "1.0.0" + component-emitter "~1.3.0" + debug "~3.1.0" + engine.io-client "~3.5.0" + has-binary2 "~1.0.2" + indexof "0.0.1" + parseqs "0.0.6" + parseuri "0.0.6" + socket.io-parser "~3.3.0" + to-array "0.1.4" + +socket.io-parser@~3.3.0: + version "3.3.2" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.3.2.tgz#ef872009d0adcf704f2fbe830191a14752ad50b6" + integrity sha512-FJvDBuOALxdCI9qwRrO/Rfp9yfndRtc1jSgVgV8FDraihmSP/MLGD5PEuJrNfjALvcQ+vMDM/33AWOYP/JSjDg== + dependencies: + component-emitter "~1.3.0" + debug "~3.1.0" + isarray "2.0.1" + +socket.io-parser@~3.4.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.4.1.tgz#b06af838302975837eab2dc980037da24054d64a" + integrity sha512-11hMgzL+WCLWf1uFtHSNvliI++tcRUWdoeYuwIl+Axvwy9z2gQM+7nJyN3STj1tLj5JyIUH8/gpDGxzAlDdi0A== + dependencies: + component-emitter "1.2.1" + debug "~4.1.0" + isarray "2.0.1" + +socket.io@^2.3.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.4.1.tgz#95ad861c9a52369d7f1a68acf0d4a1b16da451d2" + integrity sha512-Si18v0mMXGAqLqCVpTxBa8MGqriHGQh8ccEOhmsmNS3thNCGBwO8WGrwMibANsWtQQ5NStdZwHqZR3naJVFc3w== + dependencies: + debug "~4.1.0" + engine.io "~3.5.0" + has-binary2 "~1.0.2" + socket.io-adapter "~1.1.0" + socket.io-client "2.4.0" + socket.io-parser "~3.4.0" + +source-list-map@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== + +source-map-js@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.1.tgz#a1741c131e3c77d048252adfa24e23b908670caf" + integrity sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA== + +source-map-loader@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-3.0.1.tgz#9ae5edc7c2d42570934be4c95d1ccc6352eba52d" + integrity sha512-Vp1UsfyPvgujKQzi4pyDiTOnE3E4H+yHvkVRN3c/9PJmQS4CQJExvcDvaX/D+RV+xQben9HJ56jMJS3CgUeWyA== + dependencies: + abab "^2.0.5" + iconv-lite "^0.6.3" + source-map-js "^1.0.1" + +source-map-resolve@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@^0.5.3, source-map-support@~0.5.20: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" + integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== + +source-map@^0.5.0, source-map@^0.5.6, source-map@~0.5.3: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.0, source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@~0.7.2: + version "0.7.3" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + +spawn-wrap@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/spawn-wrap/-/spawn-wrap-2.0.0.tgz#103685b8b8f9b79771318827aa78650a610d457e" + integrity sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg== + dependencies: + foreground-child "^2.0.0" + is-windows "^1.0.2" + make-dir "^3.0.0" + rimraf "^3.0.0" + signal-exit "^3.0.2" + which "^2.0.1" + +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.11" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz#50c0d8c40a14ec1bf449bae69a0ea4685a9d9f95" + integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g== + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +ssf@~0.11.2: + version "0.11.2" + resolved "https://registry.yarnpkg.com/ssf/-/ssf-0.11.2.tgz#0b99698b237548d088fc43cdf2b70c1a7512c06c" + integrity sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g== + dependencies: + frac "~1.1.2" + +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +"statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +stream-browserify@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-chain@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/stream-chain/-/stream-chain-2.2.4.tgz#2e5e9858e00d25ebaf7e4339e8328ddcab5facad" + integrity sha512-9lsl3YM53V5N/I1C2uJtc3Kavyi3kNYN83VkKb/bMWRk7D9imiFyUPYa0PoZbLohSVOX1mYE9YsmwObZUsth6Q== + +stream-combiner2@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" + integrity sha1-+02KFCDqNidk4hrUeAOXvry0HL4= + dependencies: + duplexer2 "~0.1.0" + readable-stream "^2.0.2" + +stream-http@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-3.2.0.tgz#1872dfcf24cb15752677e40e5c3f9cc1926028b5" + integrity sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A== + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.4" + readable-stream "^3.6.0" + xtend "^4.0.2" + +stream-json@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/stream-json/-/stream-json-1.7.3.tgz#8a2abe8b51a2e84ffbc8d09bca9d01dc70facae3" + integrity sha512-Y6dXn9KKWSwxOqnvHGcdZy1PK+J+7alBwHCeU3W9oRqm4ilLRA0XSPmd1tWwhg7tv9EIxJTMWh7KF15tYelKJg== + dependencies: + stream-chain "^2.2.4" + +stream-splicer@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/stream-splicer/-/stream-splicer-2.0.1.tgz#0b13b7ee2b5ac7e0609a7463d83899589a363fcd" + integrity sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg== + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.2" + +streamroller@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-2.2.4.tgz#c198ced42db94086a6193608187ce80a5f2b0e53" + integrity sha512-OG79qm3AujAM9ImoqgWEY1xG4HX+Lw+yY6qZj9R1K2mhF5bEmQ849wvrb+4vt4jLMLzwXttJlQbOdPOQVRv7DQ== + dependencies: + date-format "^2.1.0" + debug "^4.1.1" + fs-extra "^8.1.0" + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2": + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + +subarg@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2" + integrity sha1-9izxdYHplrSPyWVpn1TAauJouNI= + dependencies: + minimist "^1.1.0" + +supports-color@8.1.1, supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +syntax-error@^1.1.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/syntax-error/-/syntax-error-1.4.0.tgz#2d9d4ff5c064acb711594a3e3b95054ad51d907c" + integrity sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w== + dependencies: + acorn-node "^1.2.0" + +table@*, table@^6.0.9: + version "6.8.0" + resolved "https://registry.yarnpkg.com/table/-/table-6.8.0.tgz#87e28f14fa4321c3377ba286f07b79b281a3b3ca" + integrity sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA== + dependencies: + ajv "^8.0.1" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + +table@6.7.1: + version "6.7.1" + resolved "https://registry.yarnpkg.com/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2" + integrity sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg== + dependencies: + ajv "^8.0.1" + lodash.clonedeep "^4.5.0" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.0" + strip-ansi "^6.0.0" + +tapable@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + +tapable@^2.1.1, tapable@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + +tar@^4.4.2, tar@^4.4.6: + version "4.4.19" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.19.tgz#2e4d7263df26f2b914dee10c825ab132123742f3" + integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA== + dependencies: + chownr "^1.1.4" + fs-minipass "^1.2.7" + minipass "^2.9.0" + minizlib "^1.3.3" + mkdirp "^0.5.5" + safe-buffer "^5.2.1" + yallist "^3.1.1" + +terser-webpack-plugin@^5.1.1: + version "5.3.0" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.0.tgz#21641326486ecf91d8054161c816e464435bae9f" + integrity sha512-LPIisi3Ol4chwAaPP8toUJ3L4qCM1G0wao7L3qNv57Drezxj6+VEyySpPw4B1HSO2Eg/hDY/MNF5XihCAoqnsQ== + dependencies: + jest-worker "^27.4.1" + schema-utils "^3.1.1" + serialize-javascript "^6.0.0" + source-map "^0.6.1" + terser "^5.7.2" + +terser@^5.7.2: + version "5.10.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.10.0.tgz#b86390809c0389105eb0a0b62397563096ddafcc" + integrity sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA== + dependencies: + commander "^2.20.0" + source-map "~0.7.2" + source-map-support "~0.5.20" + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +through2@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +"through@>=2.2.7 <3": + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +timers-browserify@^1.0.1: + version "1.4.2" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-1.4.2.tgz#c9c58b575be8407375cb5e2462dacee74359f41d" + integrity sha1-ycWLV1voQHN1y14kYtrO50NZ9B0= + dependencies: + process "~0.11.0" + +tiny-emitter@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423" + integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q== + +tmp@0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== + dependencies: + rimraf "^3.0.0" + +to-array@0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" + integrity sha1-F+bBH3PdTz10zaek/zI46a2b+JA= + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= + +ts-loader@^9.2.6: + version "9.2.6" + resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-9.2.6.tgz#9937c4dd0a1e3dbbb5e433f8102a6601c6615d74" + integrity sha512-QMTC4UFzHmu9wU2VHZEmWWE9cUajjfcdcws+Gh7FhiO+Dy0RnR1bNz0YCHqhI0yRowCE9arVnNxYHqELOy9Hjw== + dependencies: + chalk "^4.1.0" + enhanced-resolve "^5.0.0" + micromatch "^4.0.0" + semver "^7.3.4" + +tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + +tty-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.1.tgz#3f05251ee17904dfd0677546670db9651682b811" + integrity sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw== + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-detect@^4.0.0, type-detect@^4.0.5: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.8.0: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +type@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" + integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== + +type@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/type/-/type-2.5.0.tgz#0a2e78c2e77907b252abe5f298c1b01c63f0db3d" + integrity sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw== + +typed-function@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/typed-function/-/typed-function-2.0.0.tgz#15ab3825845138a8b1113bd89e60cd6a435739e8" + integrity sha512-Hhy1Iwo/e4AtLZNK10ewVVcP2UEs408DS35ubP825w/YgSBK1KVLwALvvIG4yX75QJrxjCpcWkzkVRB0BwwYlA== + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +typescript@^4.4.2: + version "4.5.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.4.tgz#a17d3a0263bf5c8723b9c52f43c5084edf13c2e8" + integrity sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg== + +ua-parser-js@0.7.22: + version "0.7.22" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.22.tgz#960df60a5f911ea8f1c818f3747b99c6e177eae3" + integrity sha512-YUxzMjJ5T71w6a8WWVcMGM6YWOTX27rCoIQgLXiWaxqXSx9D7DNjiGWn1aJIRSQ5qr0xuhra77bSIh6voR/46Q== + +umd@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/umd/-/umd-3.0.3.tgz#aa9fe653c42b9097678489c01000acb69f0b26cf" + integrity sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow== + +undeclared-identifiers@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz#9254c1d37bdac0ac2b52de4b6722792d2a91e30f" + integrity sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw== + dependencies: + acorn-node "^1.3.0" + dash-ast "^1.0.0" + get-assigned-identifiers "^1.2.0" + simple-concat "^1.0.0" + xtend "^4.0.1" + +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== + +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + +unicode-match-property-value-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz#1a01aa57247c14c568b89775a54938788189a714" + integrity sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw== + +unicode-property-aliases-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" + integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +url@~0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= + dependencies: + inherits "2.0.1" + +util@~0.10.1: + version "0.10.4" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" + integrity sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A== + dependencies: + inherits "2.0.3" + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + +uuid@^3.1.0, uuid@^3.3.2, uuid@^3.3.3: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +v8-compile-cache@^2.0.3, v8-compile-cache@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +vm-browserify@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" + integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== + +void-elements@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" + integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w= + +watchpack@^2.0.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.3.1.tgz#4200d9447b401156eeca7767ee610f8809bc9d25" + integrity sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA== + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= + +webpack-cli@4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.5.0.tgz#b5213b84adf6e1f5de6391334c9fa53a48850466" + integrity sha512-wXg/ef6Ibstl2f50mnkcHblRPN/P9J4Nlod5Hg9HGFgSeF8rsqDGHJeVe4aR26q9l62TUJi6vmvC2Qz96YJw1Q== + dependencies: + "@discoveryjs/json-ext" "^0.5.0" + "@webpack-cli/configtest" "^1.0.1" + "@webpack-cli/info" "^1.2.2" + "@webpack-cli/serve" "^1.3.0" + colorette "^1.2.1" + commander "^7.0.0" + enquirer "^2.3.6" + execa "^5.0.0" + fastest-levenshtein "^1.0.12" + import-local "^3.0.2" + interpret "^2.2.0" + rechoir "^0.7.0" + v8-compile-cache "^2.2.0" + webpack-merge "^5.7.3" + +webpack-log@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-1.2.0.tgz#a4b34cda6b22b518dbb0ab32e567962d5c72a43d" + integrity sha512-U9AnICnu50HXtiqiDxuli5gLB5PGBo7VvcHx36jRZHwK4vzOYLbImqT4lwWwoMHdQWwEKw736fCHEekokTEKHA== + dependencies: + chalk "^2.1.0" + log-symbols "^2.1.0" + loglevelnext "^1.0.1" + uuid "^3.1.0" + +webpack-merge@^5.7.3: + version "5.8.0" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61" + integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== + dependencies: + clone-deep "^4.0.1" + wildcard "^2.0.0" + +webpack-sources@^2.1.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-2.3.1.tgz#570de0af163949fe272233c2cefe1b56f74511fd" + integrity sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA== + dependencies: + source-list-map "^2.0.1" + source-map "^0.6.1" + +webpack@5.21.2: + version "5.21.2" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.21.2.tgz#647507e50d3637695be28af58a6a8246050394e7" + integrity sha512-xHflCenx+AM4uWKX71SWHhxml5aMXdy2tu/vdi4lClm7PADKxlyDAFFN1rEFzNV0MAoPpHtBeJnl/+K6F4QBPg== + dependencies: + "@types/eslint-scope" "^3.7.0" + "@types/estree" "^0.0.46" + "@webassemblyjs/ast" "1.11.0" + "@webassemblyjs/wasm-edit" "1.11.0" + "@webassemblyjs/wasm-parser" "1.11.0" + acorn "^8.0.4" + browserslist "^4.14.5" + chrome-trace-event "^1.0.2" + enhanced-resolve "^5.7.0" + es-module-lexer "^0.3.26" + eslint-scope "^5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.4" + json-parse-better-errors "^1.0.2" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^3.0.0" + tapable "^2.1.1" + terser-webpack-plugin "^5.1.1" + watchpack "^2.0.0" + webpack-sources "^2.1.1" + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@2.0.2, which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +which@^1.2.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +wide-align@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + dependencies: + string-width "^1.0.2 || 2" + +wide-align@^1.1.0: + version "1.1.5" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.5.tgz#df1d4c206854369ecf3c9a4898f1b23fbd9d15d3" + integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg== + dependencies: + string-width "^1.0.2 || 2 || 3 || 4" + +wildcard@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" + integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== + +wmf@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wmf/-/wmf-1.0.2.tgz#7d19d621071a08c2bdc6b7e688a9c435298cc2da" + integrity sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw== + +word-wrap@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + +word@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/word/-/word-0.3.0.tgz#8542157e4f8e849f4a363a288992d47612db9961" + integrity sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA== + +workerpool@6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.1.0.tgz#a8e038b4c94569596852de7a8ea4228eefdeb37b" + integrity sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg== + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +ws@~7.4.2: + version "7.4.6" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" + integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== + +xlsx@^0.17.2: + version "0.17.4" + resolved "https://registry.yarnpkg.com/xlsx/-/xlsx-0.17.4.tgz#dc3e3a0954c835f4d0fdd643645db6f4ac3f28f2" + integrity sha512-9aKt8g9ZLP0CUdBX8L5xnoMDFwSiLI997eQnDThCaqQMYB9AEBIRzblSSNN/ICMGLYIHUO3VKaItcedZJ3ijIg== + dependencies: + adler-32 "~1.2.0" + cfb "^1.1.4" + codepage "~1.15.0" + crc-32 "~1.2.0" + ssf "~0.11.2" + wmf "~1.0.1" + word "~0.3.0" + +xmlhttprequest-ssl@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.6.3.tgz#03b713873b01659dfa2c1c5d056065b27ddc2de6" + integrity sha512-3XfeQE/wNkvrIktn2Kf0869fC0BN6UpydVasGIeSm2B1Llihf7/0UfZM+eCkOw3P7bP4+qPgqhm7ZoxuJtFU0Q== + +xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" + integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^3.0.0, yallist@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yargs-parser@20.2.4: + version "20.2.4" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== + +yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^20.2.2: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-unparser@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" + integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== + dependencies: + camelcase "^6.0.0" + decamelize "^4.0.0" + flat "^5.0.2" + is-plain-obj "^2.1.0" + +yargs@16.2.0, yargs@^16.0.3: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yargs@^15.0.2, yargs@^15.3.1: + version "15.4.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.2" + +yarn@^1.22.10: + version "1.22.17" + resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.22.17.tgz#bf910747d22497b573131f7341c0e1d15c74036c" + integrity sha512-H0p241BXaH0UN9IeH//RT82tl5PfNraVpSpEoW+ET7lmopNC61eZ+A+IDvU8FM6Go5vx162SncDL8J1ZjRBriQ== + +yeast@0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" + integrity sha1-AI4G2AlDIMNy28L47XagymyKxBk= + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== diff --git a/danfojs-browser/.babelrc b/src/danfojs-browser/.babelrc similarity index 100% rename from danfojs-browser/.babelrc rename to src/danfojs-browser/.babelrc diff --git a/danfojs-browser/.coveralls.yml b/src/danfojs-browser/.coveralls.yml similarity index 100% rename from danfojs-browser/.coveralls.yml rename to src/danfojs-browser/.coveralls.yml diff --git a/src/danfojs-browser/.eslintrc b/src/danfojs-browser/.eslintrc new file mode 100644 index 00000000..66ee5d14 --- /dev/null +++ b/src/danfojs-browser/.eslintrc @@ -0,0 +1,3 @@ +{ + "extends": ["plugin:@typescript-eslint/recommended"] + } \ No newline at end of file diff --git a/danfojs-browser/.eslintrc.json b/src/danfojs-browser/.eslintrc.json similarity index 99% rename from danfojs-browser/.eslintrc.json rename to src/danfojs-browser/.eslintrc.json index 89438352..f247ca42 100644 --- a/danfojs-browser/.eslintrc.json +++ b/src/danfojs-browser/.eslintrc.json @@ -58,6 +58,7 @@ ], "comma-style": "error", "no-unused-vars": [ "off"] // Use @typescript-eslint/no-unused-vars instead, otherwise there will be checked twice - } + +} } diff --git a/danfojs-browser/.gitignore b/src/danfojs-browser/.gitignore similarity index 84% rename from danfojs-browser/.gitignore rename to src/danfojs-browser/.gitignore index 0ee6caa9..3e6fe8d0 100644 --- a/danfojs-browser/.gitignore +++ b/src/danfojs-browser/.gitignore @@ -6,4 +6,6 @@ danfojs/data .DS_Store .idea/ -dist/ \ No newline at end of file +dist +build +lib \ No newline at end of file diff --git a/danfojs-browser/.npmignore b/src/danfojs-browser/.npmignore similarity index 100% rename from danfojs-browser/.npmignore rename to src/danfojs-browser/.npmignore diff --git a/danfojs-browser/README.md b/src/danfojs-browser/README.md similarity index 58% rename from danfojs-browser/README.md rename to src/danfojs-browser/README.md index 10c907ac..8f880afe 100644 --- a/danfojs-browser/README.md +++ b/src/danfojs-browser/README.md @@ -47,146 +47,170 @@ easy and intuitive. It is heavily inspired by [Pandas](https://pandas.pydata.org - Robust data preprocessing functions like [OneHotEncoders](https://danfo.jsdata.org/api-reference/general-functions/danfo.onehotencoder), [LabelEncoders](https://danfo.jsdata.org/api-reference/general-functions/danfo.labelencoder), and scalers like [StandardScaler](https://danfo.jsdata.org/api-reference/general-functions/danfo.standardscaler) and [MinMaxScaler](https://danfo.jsdata.org/api-reference/general-functions/danfo.minmaxscaler) are supported on DataFrame and Series +## Installation +There are three ways to install and use Danfo.js in your application +* For Nodejs applications, you can install the [__danfojs-node__]() version via package managers like yarn and/or npm: -To use Danfo.js via script tags, copy and paste the CDN below to the body of your HTML file +```bash +npm install danfojs-node + +or + +yarn add danfojs-node +``` +For client-side applications built with frameworks like React, Vue, Next.js, etc, you can install the [__danfojs__]() version: + +```bash +npm install danfojs + +or + +yarn add danfojs +``` + +For use directly in HTML files, you can add the latest script tag from [JsDelivr](https://www.jsdelivr.com/package/npm/danfojs) to your HTML file: + ```html - + ``` +See all available versions [here](https://www.jsdelivr.com/package/npm/danfojs) ### Example Usage in the Browser -> See the example below in [Code Sandbox](https://codepen.io/risingodegua/pen/bGwPGMG) +> Run in [Code Sandbox](https://codepen.io/risingodegua/pen/bGwPGMG) ```html - - - - - + + + + Document - - - + +
- - - + + ``` Output in Browser: ![](assets/browser-out.gif) -## How to install -Danfo.js is hosted on NPM, and can installed via package managers like npm and yarn - -```sh -npm install danfojs-node -``` - ### Example usage in Nodejs ```javascript const dfd = require("danfojs-node") +const file_url = "https://web.stanford.edu/class/archive/cs/cs109/cs109.1166/stuff/titanic.csv" +dfd.readCSV(file_url) + .then(df => { + //prints the first five columns + df.head().print() + + // Calculate descriptive statistics for all numerical columns + df.describe().print() -dfd.read_csv("https://web.stanford.edu/class/archive/cs/cs109/cs109.1166/stuff/titanic.csv") - .then(df => { - //prints the first five columns - df.head().print() + //prints the shape of the data + console.log(df.shape); - //Calculate descriptive statistics for all numerical columns - df.describe().print() + //prints all column names + console.log(df.columns); - //prints the shape of the data - console.log(df.shape); + // //prints the inferred dtypes of each column + df.ctypes.print() - //prints all column names - console.log(df.column_names); + //selecting a column by subsetting + df['Name'].print() - //prints the inferred dtypes of each column - df.ctypes.print() + //drop columns by names + cols_2_remove = ['Age', 'Pclass'] + df_drop = df.drop({ columns: cols_2_remove, axis: 1 }) + df_drop.print() - //selecting a column by subsetting - df['Name'].print() - //drop columns by names - cols_2_remove = ['Age', 'Pclass'] - df_drop = df.drop({ columns: cols_2_remove, axis: 1 }) - df_drop.print() + //select columns by dtypes + let str_cols = df_drop.selectDtypes(["string"]) + let num_cols = df_drop.selectDtypes(["int32", "float32"]) + str_cols.print() + num_cols.print() - //select columns by dtypes - let str_cols = df_drop.select_dtypes(["string"]) - let num_cols = df_drop.select_dtypes(["int32", "float32"]) - str_cols.print() - num_cols.print() + //add new column to Dataframe + let new_vals = df['Fare'].round(1) + df_drop.addColumn("fare_round", new_vals, { inplace: true }) + df_drop.print() - //add new column to Dataframe - let new_vals = df['Fare'].round().values - df_drop.addColumn({ column: "fare_round", value: new_vals}) - df_drop.print() + df_drop['fare_round'].round(2).print(5) - df_drop['fare_round'].print(5) + //prints the number of occurence each value in the column + df_drop['Survived'].valueCounts().print() - //prints the number of occurence each value in the column - df_drop['Survived'].value_counts().print() + //print the last ten elementa of a DataFrame + df_drop.tail(10).print() - //print the last ten elementa of a DataFrame - df_drop.tail(10).print() + //prints the number of missing values in a DataFrame + df_drop.isNa().sum().print() - //prints the number of missing values in a DataFrame - df_drop.isna().sum().print() + }).catch(err => { + console.log(err); + }) - }).catch(err => { - console.log(err); - }) ``` Output in Node Console: ![](assets/node-rec.gif) - -> If you want to use Danfo in frontend frameworks like React/Vue, read this [guide](https://danfo.jsdata.org/examples/using-danfojs-in-react) - -#### You can play with Danfo.js on Dnotebooks playground [here](https://playnotebook.jsdata.org/demo) +## Notebook support +* You can use Danfo.js on Dnotebooks playground [here](https://playnotebook.jsdata.org/demo) +* VsCode nodejs notebook extension now supports Danfo.js. See guide [here](https://marketplace.visualstudio.com/items?itemName=donjayamanne.typescript-notebook) #### [See the Official Getting Started Guide](https://danfo.jsdata.org/getting-started) ## Documentation The official documentation can be found [here](https://danfo.jsdata.org) +## Danfo.js Official Book + +![image](https://user-images.githubusercontent.com/29900845/134811659-25ff6b05-8e0d-415f-a60c-03ab1d33fd71.jpeg) + + +We recently published a book titled "Building Data Driven Applications with Danfo.js". Read more about it [here](https://danfo.jsdata.org/building-data-driven-applications-with-danfo.js-book) + ## Discussion and Development -Development discussions take place on our [issues](https://github.com/opensource9ja/danfojs/issues) tab. +Development discussions take place [here](https://github.com/opensource9ja/danfojs/discussions). ## Contributing to Danfo All contributions, bug reports, bug fixes, documentation improvements, enhancements, and ideas are welcome. A detailed overview on how to contribute can be found in the [contributing guide](https://danfo.jsdata.org/contributing-guide). @@ -195,4 +219,4 @@ All contributions, bug reports, bug fixes, documentation improvements, enhanceme #### Created by [Rising Odegua](https://github.com/risenW) and [Stephen Oni](https://github.com/steveoni) -Danfo.js - Open Source JavaScript library for manipulating data. | Product Hunt Embed +Danfo.js - Open Source JavaScript library for manipulating data. | Product Hunt Embed \ No newline at end of file diff --git a/danfojs-browser/babel.config.json b/src/danfojs-browser/babel.config.json similarity index 100% rename from danfojs-browser/babel.config.json rename to src/danfojs-browser/babel.config.json diff --git a/danfojs-browser/karma.conf.js b/src/danfojs-browser/karma.conf.js similarity index 94% rename from danfojs-browser/karma.conf.js rename to src/danfojs-browser/karma.conf.js index d4e213dd..922b7d82 100644 --- a/danfojs-browser/karma.conf.js +++ b/src/danfojs-browser/karma.conf.js @@ -8,7 +8,7 @@ module.exports = function (config) { frameworks: [ "mocha", "chai", "browserify" ], // list of files / patterns to load in the browser - files: [ "lib/bundle.js", "tests/**/*.js" ], + files: [ "lib/bundle.js", "tests/**/*.test.js" ], // list of files / patterns to exclude exclude: [], @@ -16,7 +16,7 @@ module.exports = function (config) { // preprocess matching files before serving them to the browser // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor preprocessors: { - "tests/**/*.js": [ "browserify" ] + "tests/**/*.test.js": [ "browserify" ] }, // test results reporter to use diff --git a/src/danfojs-browser/nodemon.json b/src/danfojs-browser/nodemon.json new file mode 100644 index 00000000..5131f099 --- /dev/null +++ b/src/danfojs-browser/nodemon.json @@ -0,0 +1,6 @@ +{ + "watch": ["src"], + "ext": ".ts,.js", + "ignore": [], + "exec": "ts-node ./src/index.ts" + } \ No newline at end of file diff --git a/danfojs-browser/package.json b/src/danfojs-browser/package.json similarity index 57% rename from danfojs-browser/package.json rename to src/danfojs-browser/package.json index 7cf9788e..01f7939d 100644 --- a/danfojs-browser/package.json +++ b/src/danfojs-browser/package.json @@ -1,9 +1,9 @@ { "name": "danfojs", - "version": "0.2.7", + "version": "1.0.0", "description": "JavaScript library providing high performance, intuitive, and easy to use data structures for manipulating and processing structured data.", - "main": "lib/bundle.js", - "types": "types/index.d.ts", + "main": "dist/danfojs-browser/src/index.js", + "types": "dist/danfojs-browser/src/index.d.ts", "directories": { "test": "tests" }, @@ -17,20 +17,27 @@ ], "files": [ "lib/", - "src/", - "types" + "dist/" ], "dependencies": { - "@tensorflow/tfjs": "3.6.0", - "mathjs": "7.5.1", - "table": "^5.4.6", - "xlsx": "^0.16.7" + "@tensorflow/tfjs": "^3.11.0", + "mathjs": "9.4.4", + "papaparse": "^5.3.1", + "plotly.js-dist-min": "^2.8.0", + "request": "^2.88.2", + "seedrandom": "^2.4.3", + "stream-json": "^1.7.3", + "table": "6.7.1", + "xlsx": "^0.17.2" }, "scripts": { - "test": "yarn run bundle && karma start --single-run --browsers ChromeHeadless karma.conf.js", - "build": "babel ./src -d ./dist --no-comments", + "test": "karma start --single-run --browsers ChromeHeadless karma.conf.js", + "test:clean": "yarn build:clean && yarn run test", + "build": "node ./scripts/prebuild.js && tsc && yarn run bundle", + "build:clean": "rimraf ./dist && rimraf ./lib && node ./scripts/prebuild.js && yarn run build", + "dev": "nodemon", "lint": "eslint ./src", - "bundle": "webpack --mode production", + "bundle": "webpack --mode development", "coveralls": "cat ./coverage/lcov.info | ./node_modules/.bin/coveralls", "coverage": "nyc report --reporter=text-lcov | coveralls && nyc report --reporter=lcov", "patch": "npm version patch" @@ -62,11 +69,26 @@ "@babel/core": "^7.10.5", "@babel/plugin-transform-runtime": "^7.12.10", "@babel/preset-env": "^7.10.4", + "@types/chai": "^4.2.19", + "@types/mocha": "^8.2.2", + "@types/node": "^15.12.5", + "@types/papaparse": "^5.2.6", + "@types/plotly.js-dist-min": "^2.3.0", + "@types/request": "^2.48.7", + "@types/stream-json": "^1.7.1", + "@types/table": "^6.3.2", + "@typescript-eslint/eslint-plugin": "^4.30.0", + "@typescript-eslint/parser": "^4.30.0", + "awesome-typescript-loader": "^5.2.1", "babel-loader": "^8.1.0", "browserify": "16.5.2", "chai": "^4.2.0", "coveralls": "^3.1.0", + "dotenv": "^10.0.0", "eslint": "^7.1.0", + "ify-loader": "^1.1.0", + "install-peers": "^1.0.3", + "json-loader": "^0.5.7", "karma": "5.2.3", "karma-browserify": "7.0.0", "karma-chai": "^0.1.0", @@ -74,6 +96,9 @@ "karma-mocha": "^2.0.1", "mocha": "^8.3.0", "nyc": "^15.1.0", + "source-map-loader": "^3.0.0", + "ts-loader": "^9.2.6", + "typescript": "^4.4.2", "webpack": "5.21.2", "webpack-cli": "4.5.0", "yarn": "^1.22.10" @@ -85,4 +110,4 @@ ] }, "sideEffects": false -} \ No newline at end of file +} diff --git a/src/danfojs-browser/scripts/prebuild.js b/src/danfojs-browser/scripts/prebuild.js new file mode 100644 index 00000000..2cc91ece --- /dev/null +++ b/src/danfojs-browser/scripts/prebuild.js @@ -0,0 +1,32 @@ +/** +* @license +* Copyright 2022 JsData. All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ========================================================================== +*/ + +/** + * Danfojs-node version uses Tensorflowjs-node package. Hence on bundling, we set the tensorflow lib + * to use the Tensorflowjs-node package, and vice-versa for browser. + * */ + +/* eslint-disable no-undef */ +const fs = require('fs'); + +function updateTensorflowLib(tensorflowLibPath) { + const importStatement = ` + // This file is auto-generated by prebuild.js. Do not edit! + const tf = require("@tensorflow/tfjs")\nexport default tf + `; + fs.writeFileSync(tensorflowLibPath, importStatement); +} + +updateTensorflowLib('../danfojs-base/shared/tensorflowlib.ts'); diff --git a/src/danfojs-browser/src/core/frame.ts b/src/danfojs-browser/src/core/frame.ts new file mode 100644 index 00000000..5cc0940d --- /dev/null +++ b/src/danfojs-browser/src/core/frame.ts @@ -0,0 +1,34 @@ +/** +* @license +* Copyright 2022 JsData. All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ========================================================================== +*/ +import { BaseDataOptionType } from "../../../danfojs-base/shared/types"; +import BaseDataFrame from "../../../danfojs-base/core/frame" + + +/** + * Two-dimensional ndarray with axis labels. + * The object supports both integer- and label-based indexing and provides a host of methods for performing operations involving the index. + * Operations between DataFrame (+, -, /, , *) align values based on their associated index values– they need not be the same length. + * @param data 2D Array, JSON, Tensor, Block of data. + * @param options.index Array of numeric or string names for subseting array. If not specified, indexes are auto generated. + * @param options.columns Array of column names. If not specified, column names are auto generated. + * @param options.dtypes Array of data types for each the column. If not specified, dtypes are/is inferred. + * @param options.config General configuration object for extending or setting NDframe behavior. + */ +export default class DataFrame extends BaseDataFrame { + [key: string]: any + constructor(data?: any, options: BaseDataOptionType = {}) { + super(data, options) + } +} \ No newline at end of file diff --git a/src/danfojs-browser/src/core/series.ts b/src/danfojs-browser/src/core/series.ts new file mode 100644 index 00000000..58e3489b --- /dev/null +++ b/src/danfojs-browser/src/core/series.ts @@ -0,0 +1,34 @@ +/** +* @license +* Copyright 2022 JsData. All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ========================================================================== +*/ +import { BaseDataOptionType } from "../../../danfojs-base/shared/types"; +import BaseSeries from "../../../danfojs-base/core/series" + + +/** + * One-dimensional ndarray with axis labels. + * The object supports both integer- and label-based indexing and provides a host of methods for performing operations involving the index. + * Operations between Series (+, -, /, , *) align values based on their associated index values – they need not be the same length. + * @param data 1D Array, JSON, Tensor, Block of data. + * @param options.index Array of numeric or string index for subseting array. If not specified, indices are auto generated. + * @param options.columns Column name. This is like the name of the Series. If not specified, column name is set to 0. + * @param options.dtypes Data types of the Series data. If not specified, dtypes is inferred. + * @param options.config General configuration object for extending or setting Series behavior. + */ +export default class Series extends BaseSeries { + [key: string]: any + constructor(data?: any, options: BaseDataOptionType = {}) { + super(data, options) + } +} \ No newline at end of file diff --git a/src/danfojs-browser/src/index.ts b/src/danfojs-browser/src/index.ts new file mode 100644 index 00000000..91a0d01e --- /dev/null +++ b/src/danfojs-browser/src/index.ts @@ -0,0 +1,73 @@ +/** +* @license +* Copyright 2022 JsData. All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ========================================================================== +*/ +import { + NDframe, + Config, + Utils, + Str, + Dt, + MinMaxScaler, + StandardScaler, + LabelEncoder, + OneHotEncoder, + getDummies, + concat, + merge, + toDateTime, + dateRange, + tensorflow, + __version, +} from "../../danfojs-base"; + +import { + readCSVBrowser as readCSV, + streamCSVBrowser as streamCSV, + toCSVBrowser as toCSV, + readJSONBrowser as readJSON, + toJSONBrowser as toJSON, + readExcelBrowser as readExcel, + toExcelBrowser as toExcel, +} from "../../danfojs-base/io/browser" + +import DataFrame from "./core/frame" +import Series from "./core/series" + +export { + NDframe, + Config, + Utils, + Str, + Dt, + toDateTime, + Series, + DataFrame, + readCSV, + streamCSV, + toCSV, + readJSON, + toJSON, + readExcel, + toExcel, + MinMaxScaler, + StandardScaler, + LabelEncoder, + OneHotEncoder, + getDummies, + concat, + merge, + dateRange, + tensorflow, + __version, +} diff --git a/danfojs-browser/tests/core/groupby.js b/src/danfojs-browser/tests/aggregators/groupby.test.js similarity index 58% rename from danfojs-browser/tests/core/groupby.js rename to src/danfojs-browser/tests/aggregators/groupby.test.js index 4bb433db..e56a2aa8 100644 --- a/danfojs-browser/tests/core/groupby.js +++ b/src/danfojs-browser/tests/aggregators/groupby.test.js @@ -1,21 +1,21 @@ +/* eslint-disable no-undef */ describe("groupby", function () { it("Check group by One column data", function () { - let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; let cols = [ "A", "B", "C" ]; let df = new dfd.DataFrame(data, { columns: cols }); - let group_df = df.groupby([ "A" ]); + let groupDf = df.groupby([ "A" ]); - let group_dict = { - '1': [ [ 1, 2, 3 ] ], - '4': [ [ 4, 5, 6 ] ], - '20': [ [ 20, 30, 40 ] ], - '39': [ [ 39, 89, 78 ] ] + let groupDict = { + '1': { A: [ 1 ], B: [ 2 ], C: [ 3 ] }, + '4': { A: [ 4 ], B: [ 5 ], C: [ 6 ] }, + '20': { A: [ 20 ], B: [ 30 ], C: [ 40 ] }, + '39': { A: [ 39 ], B: [ 89 ], C: [ 78 ] } }; - - assert.deepEqual(group_df.col_dict, group_dict); + assert.deepEqual(groupDf.colDict, groupDict); }); + it("Obtain the DataFrame of one of the group", function () { let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; @@ -23,9 +23,9 @@ describe("groupby", function () { let df = new dfd.DataFrame(data, { columns: cols }); let group_df = df.groupby([ "A" ]); let new_data = [ [ 1, 2, 3 ] ]; - - assert.deepEqual(group_df.get_groups([ 1 ]).values, new_data); + assert.deepEqual(group_df.getGroup([ 1 ]).values, new_data); }); + it("Check group by Two column data", function () { let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; @@ -33,13 +33,12 @@ describe("groupby", function () { let df = new dfd.DataFrame(data, { columns: cols }); let group_df = df.groupby([ "A", "B" ]); let new_data = { - '1': { '2': [ [ 1, 2, 3 ] ] }, - '4': { '5': [ [ 4, 5, 6 ] ] }, - '20': { '30': [ [ 20, 30, 40 ] ] }, - '39': { '89': [ [ 39, 89, 78 ] ] } + '1-2': { A: [ 1 ], B: [ 2 ], C: [ 3 ] }, + '4-5': { A: [ 4 ], B: [ 5 ], C: [ 6 ] }, + '20-30': { A: [ 20 ], B: [ 30 ], C: [ 40 ] }, + '39-89': { A: [ 39 ], B: [ 89 ], C: [ 78 ] } }; - - assert.deepEqual(group_df.col_dict, new_data); + assert.deepEqual(group_df.colDict, new_data); }); it("Obtain the DataFrame of one of the group, grouped by two column", function () { @@ -50,7 +49,7 @@ describe("groupby", function () { let group_df = df.groupby([ "A", "B" ]); let new_data = [ [ 1, 2, 3 ] ]; - assert.deepEqual(group_df.get_groups([ 1, 2 ]).values, new_data); + assert.deepEqual(group_df.getGroup([ 1, 2 ]).values, new_data); }); it("Count column in group", function () { @@ -68,6 +67,7 @@ describe("groupby", function () { assert.deepEqual(group_df.col([ "C" ]).count().values, new_data); }); + it("sum column element in group", function () { let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; @@ -83,7 +83,7 @@ describe("groupby", function () { assert.deepEqual(group_df.col([ "C" ]).sum().values, new_data); }); - it("sum column element group by one column", function () { + it("sum column element group by two column", function () { let data = [ [ 1, 2, 3 ], [ 1, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; let cols = [ "A", "B", "C" ]; @@ -113,8 +113,9 @@ describe("groupby", function () { [ 39, 89, 89, 1 ] ]; - assert.deepEqual(group_df.agg({ "B": "mean", "C": "count" }).values, new_data); + assert.deepEqual(group_df.agg({ B: "mean", C: "count" }).values, new_data); }); + it("cummulative sum for groupby", function () { let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; @@ -127,8 +128,9 @@ describe("groupby", function () { [ 20, 30, 30, 40 ], [ 39, 89, 89, 78 ] ]; - assert.deepEqual(group_df.col([ "B", "C" ]).cumsum().values, new_data); + assert.deepEqual(group_df.col([ "B", "C" ]).cumSum().values, new_data); }); + it("cummulative max for groupby", function () { let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; @@ -138,8 +140,9 @@ describe("groupby", function () { let new_data = [ [ 1, 3 ], [ 4, 6 ], [ 20, 40 ], [ 39, 78 ] ]; - assert.deepEqual(group_df.col([ "C" ]).cummax().values, new_data); + assert.deepEqual(group_df.col([ "C" ]).cumMax().values, new_data); }); + it("cummulative min for groupby", function () { let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; @@ -148,7 +151,7 @@ describe("groupby", function () { let group_df = df.groupby([ "A" ]); let new_data = [ [ 1, 3 ], [ 4, 6 ], [ 20, 40 ], [ 39, 78 ] ]; - assert.deepEqual(group_df.col([ "C" ]).cummin().values, new_data); + assert.deepEqual(group_df.col([ "C" ]).cumMin().values, new_data); }); it("cummulative prod for groupby", function () { @@ -159,8 +162,9 @@ describe("groupby", function () { let group_df = df.groupby([ "A" ]); let new_data = [ [ 1, 3 ], [ 4, 6 ], [ 20, 40 ], [ 39, 78 ] ]; - assert.deepEqual(group_df.col([ "C" ]).cumprod().values, new_data); + assert.deepEqual(group_df.col([ "C" ]).cumProd().values, new_data); }); + it("mean for groupby", function () { let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; @@ -177,119 +181,176 @@ describe("groupby", function () { assert.deepEqual(group_df.col([ "B", "C" ]).mean().values, new_data); }); - it("printing multiindex table, example with cumsum operation for dataframe group by one column", function(){ + it("should apply grouby operation to all column", function(){ let data = { 'A': [ 'foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo' ], 'B': [ 'one', 'one', 'two', 'three', 'two', 'two', 'one', 'three' ], 'C': [ 1, 3, 2, 4, 5, 2, 6, 7 ], - 'D': [ 3, 2, 4, 1, 5, 6, 7, 8 ] }; - - + 'D': [ 3, 2, 4, 1, 5, 6, 7, 8 ] + }; let df = new dfd.DataFrame(data); - - let grp = df.groupby([ "A" ]); + let grp = df.groupby([ "A", "B" ]); let rslt = [ - [ 'foo', 1 ], - [ 'foo', 3 ], - [ 'foo', 8 ], - [ 'foo', 14 ], - [ 'foo', 21 ], - [ 'bar', 3 ], - [ 'bar', 7 ], - [ 'bar', 9 ] + [ 'foo', 'one', 2, 2 ], + [ 'foo', 'two', 2, 2 ], + [ 'foo', 'three', 1, 1 ], + [ 'bar', 'one', 1, 1 ], + [ 'bar', 'three', 1, 1 ], + [ 'bar', 'two', 1, 1 ] ]; - assert.deepEqual(grp.col([ "C" ]).cumsum().values, rslt); + assert.deepEqual(grp.count().values, rslt); }); - it("printing multiindex table, example with cumsum operation for dataframe group by one column", function(){ + it("should apply function to specific column", function () { + let data = { 'A': [ 'foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo' ], 'B': [ 'one', 'one', 'two', 'three', 'two', 'two', 'one', 'three' ], 'C': [ 1, 3, 2, 4, 5, 2, 6, 7 ], - 'D': [ 3, 2, 4, 1, 5, 6, 7, 8 ] }; - + 'D': [ 3, 2, 4, 1, 5, 6, 7, 8 ] + }; let df = new dfd.DataFrame(data); + let group_df = df.groupby([ "A" ]); + let rslt = [ + [ 'foo', 5, 3 ], + [ 'foo', 6, 4 ], + [ 'foo', 7, 7 ], + [ 'foo', 9, 8 ], + [ 'foo', 10, 9 ], + [ 'bar', 4, 5 ], + [ 'bar', 3, 6 ], + [ 'bar', 8, 4 ] + ]; + assert.deepEqual(group_df.col([ 'D', 'C' ]).apply((x) => x.add(2)).values, rslt); + }); - - let grp = df.groupby([ "A", "B" ]); + it("should apply function to group column", function () { + let data = { 'A': [ 'foo', 'bar', 'foo', 'bar', + 'foo', 'bar', 'foo', 'foo' ], + 'B': [ 'one', 'one', 'two', 'three', + 'two', 'two', 'one', 'three' ], + 'C': [ 1, 3, 2, 4, 5, 2, 6, 7 ], + 'D': [ 3, 2, 4, 1, 5, 6, 7, 8 ] + }; + let df = new dfd.DataFrame(data); + let group_df = df.groupby([ "A", "B" ]); let rslt = [ - [ 'foo', 'one', 1, 3 ], - [ 'foo', 'one', 7, 10 ], - [ 'foo', 'two', 2, 4 ], - [ 'foo', 'two', 7, 9 ], - [ 'foo', 'three', 7, 8 ], - [ 'bar', 'one', 3, 2 ], - [ 'bar', 'two', 2, 6 ], - [ 'bar', 'three', 4, 1 ] + [ 'foo', 'one', 2, 2, 2, 2 ], + [ 'foo', 'two', 2, 2, 2, 2 ], + [ 'foo', 'three', 1, 1, 1, 1 ], + [ 'bar', 'one', 1, 1, 1, 1 ], + [ 'bar', 'three', 1, 1, 1, 1 ], + [ 'bar', 'two', 1, 1, 1, 1 ] ]; - assert.deepEqual(grp.col([ "C", "D" ]).cumsum().values, rslt); + assert.deepEqual(group_df.apply((x) => x.count({ axis:0 })).values, rslt); + }); + it("should obtain the number of groups", function () { + let data = { 'A': [ 'foo', 'bar', 'foo', 'bar', + 'foo', 'bar', 'foo', 'foo' ], + 'B': [ 'one', 'one', 'two', 'three', + 'two', 'two', 'one', 'three' ], + 'C': [ 1, 3, 2, 4, 5, 2, 6, 7 ], + 'D': [ 3, 2, 4, 1, 5, 6, 7, 8 ] + }; + let df = new dfd.DataFrame(data); + let group_df = df.groupby([ "A", "B" ]); + let rslt = 6; + assert.equal(group_df.ngroups, rslt); }); - it("should apply grouby operation to all column", function(){ + it("should obtain all groups", function () { let data = { 'A': [ 'foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo' ], 'B': [ 'one', 'one', 'two', 'three', 'two', 'two', 'one', 'three' ], 'C': [ 1, 3, 2, 4, 5, 2, 6, 7 ], - 'D': [ 3, 2, 4, 1, 5, 6, 7, 8 ] }; - + 'D': [ 3, 2, 4, 1, 5, 6, 7, 8 ] + }; let df = new dfd.DataFrame(data); + let group_df = df.groupby([ "A", "B" ]); + let rslt = { + 'foo-one': { + A: [ 'foo', 'foo' ], + B: [ 'one', 'one' ], + C: [ 1, 6 ], + D: [ 3, 7 ] + }, + 'bar-one': { A: [ 'bar' ], B: [ 'one' ], C: [ 3 ], D: [ 2 ] }, + 'foo-two': { + A: [ 'foo', 'foo' ], + B: [ 'two', 'two' ], + C: [ 2, 5 ], + D: [ 4, 5 ] + }, + 'bar-three': { A: [ 'bar' ], B: [ 'three' ], C: [ 4 ], D: [ 1 ] }, + 'bar-two': { A: [ 'bar' ], B: [ 'two' ], C: [ 2 ], D: [ 6 ] }, + 'foo-three': { A: [ 'foo' ], B: [ 'three' ], C: [ 7 ], D: [ 8 ] } + }; + assert.deepEqual(group_df.groups, rslt); + }); - let grp = df.groupby([ "A", "B" ]); + it("should obtain the first row of all groups", function () { + let data = { 'A': [ 'foo', 'bar', 'foo', 'bar', + 'foo', 'bar', 'foo', 'foo' ], + 'B': [ 'one', 'one', 'one', 'three', + 'two', 'two', 'one', 'three' ], + 'C': [ 1, 3, 2, 4, 5, 2, 6, 7 ], + 'D': [ 3, 2, 4, 1, 5, 6, 7, 8 ] + }; + let df = new dfd.DataFrame(data); + let group_df = df.groupby([ "A", "B" ]); let rslt = [ - [ 'foo', 'one', 2, 2 ], - [ 'foo', 'two', 2, 2 ], - [ 'foo', 'three', 1, 1 ], - [ 'bar', 'one', 1, 1 ], - [ 'bar', 'two', 1, 1 ], - [ 'bar', 'three', 1, 1 ] + [ 'foo', 'one', 'foo', 'one', 1, 3 ], + [ 'foo', 'two', 'foo', 'two', 5, 5 ], + [ 'foo', 'three', 'foo', 'three', 7, 8 ], + [ 'bar', 'one', 'bar', 'one', 3, 2 ], + [ 'bar', 'three', 'bar', 'three', 4, 1 ], + [ 'bar', 'two', 'bar', 'two', 2, 6 ] ]; - - assert.deepEqual(grp.count().values, rslt); + assert.deepEqual(group_df.first().values, rslt); }); - it("should apply function to specific column", function () { + it("should obtain the last row of all groups", function () { let data = { 'A': [ 'foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo' ], - 'B': [ 'one', 'one', 'two', 'three', + 'B': [ 'one', 'one', 'one', 'three', 'two', 'two', 'one', 'three' ], 'C': [ 1, 3, 2, 4, 5, 2, 6, 7 ], - 'D': [ 3, 2, 4, 1, 5, 6, 7, 8 ] }; + 'D': [ 3, 2, 4, 1, 5, 6, 7, 8 ] + }; let df = new dfd.DataFrame(data); - let group_df = df.groupby([ "A"]); + let group_df = df.groupby([ "A", "B" ]); let rslt = [ - [ 'foo', 5, 3 ], - [ 'foo', 6, 4 ], - [ 'foo', 7, 7 ], - [ 'foo', 9, 8 ], - [ 'foo', 10, 9 ], - [ 'bar', 4, 5 ], - [ 'bar', 3, 6 ], - [ 'bar', 8, 4 ] + [ 'foo', 'one', 'foo', 'one', 6, 7 ], + [ 'foo', 'two', 'foo', 'two', 5, 5 ], + [ 'foo', 'three', 'foo', 'three', 7, 8 ], + [ 'bar', 'one', 'bar', 'one', 3, 2 ], + [ 'bar', 'three', 'bar', 'three', 4, 1 ], + [ 'bar', 'two', 'bar', 'two', 2, 6 ] ]; - assert.deepEqual(group_df.col(['D', 'C']).apply((x) => x.add(2)).values, rslt); + assert.deepEqual(group_df.last().values, rslt); }); - it("should apply function to group column", function () { + it("should obtain the number of rows of each groups", function () { let data = { 'A': [ 'foo', 'bar', 'foo', 'bar', 'foo', 'bar', 'foo', 'foo' ], - 'B': [ 'one', 'one', 'two', 'three', + 'B': [ 'one', 'one', 'one', 'three', 'two', 'two', 'one', 'three' ], 'C': [ 1, 3, 2, 4, 5, 2, 6, 7 ], - 'D': [ 3, 2, 4, 1, 5, 6, 7, 8 ] }; + 'D': [ 3, 2, 4, 1, 5, 6, 7, 8 ] + }; let df = new dfd.DataFrame(data); - let group_df = df.groupby([ "A", "B"]); + let group_df = df.groupby([ "A", "B" ]); let rslt = [ - [ 'foo', 'one', 2, 2 ], - [ 'foo', 'two', 2, 2 ], - [ 'foo', 'three', 1, 1 ], - [ 'bar', 'one', 1, 1 ], - [ 'bar', 'two', 1, 1 ], - [ 'bar', 'three', 1, 1 ] + [ 'foo', 'one', 3 ], + [ 'foo', 'two', 1 ], + [ 'foo', 'three', 1 ], + [ 'bar', 'one', 1 ], + [ 'bar', 'three', 1 ], + [ 'bar', 'two', 1 ] ]; - assert.deepEqual(group_df.apply((x) => x.count()).values, rslt); + assert.deepEqual(group_df.size().values, rslt); }); - }); diff --git a/src/danfojs-browser/tests/core/daterange.test.js b/src/danfojs-browser/tests/core/daterange.test.js new file mode 100644 index 00000000..95b5eef4 --- /dev/null +++ b/src/danfojs-browser/tests/core/daterange.test.js @@ -0,0 +1,87 @@ +describe("dfd.dateRange", function(){ + + // it("Obtain date between start and end specified", function(){ + // let d = dfd.dateRange({start:'2018-04-24',end:'2018-04-27'}) + // let rslt = [ + // '4/24/2018, 1:00:00 AM', + // '4/25/2018, 1:00:00 AM', + // '4/26/2018, 1:00:00 AM', + // '4/27/2018, 1:00:00 AM' + // ] + // assert.deepEqual(d,rslt) + // }); + it("Obtain date between start with end not specified, but period and freq specified", function(){ + let d = dfd.dateRange({ start:'1/1/2018', period:5, freq:'M' }); + let rslt = [ + '1/1/2018, 12:00:00 AM', + '2/1/2018, 12:00:00 AM', + '3/1/2018, 12:00:00 AM', + '4/1/2018, 12:00:00 AM', + '5/1/2018, 12:00:00 AM' + ]; + assert.deepEqual(d, rslt); + }); + it("Obtain date between start with end not specified, but period and freq specified, plus offset", function(){ + let d = dfd.dateRange({ start:'1/1/2018', period:5, freq:'3M' }); + let rslt = [ + '1/1/2018, 12:00:00 AM', + '4/1/2018, 12:00:00 AM', + '7/1/2018, 12:00:00 AM', + '10/1/2018, 12:00:00 AM', + '1/1/2019, 12:00:00 AM' + ]; + assert.deepEqual(d, rslt); + }); + it("Obtain date between start with end not specified, but period and freq specified, plus offset, longer freq", function(){ + let d = dfd.dateRange({ start:'1/1/2018', period:5, freq:'35m' }); + let rslt = [ + "1/1/2018, 12:00:00 AM", + "1/1/2018, 12:35:00 AM", + "1/1/2018, 1:10:00 AM", + "1/1/2018, 1:45:00 AM", + "1/1/2018, 2:20:00 AM" + ]; + assert.deepEqual(d, rslt); + }); + it("Obtain date range with start not specified but end and period is given", function(){ + let d = dfd.dateRange({ end:'1/1/2018', period:8 }); + let rslt = [ + '12/25/2017, 12:00:00 AM', + '12/26/2017, 12:00:00 AM', + '12/27/2017, 12:00:00 AM', + '12/28/2017, 12:00:00 AM', + '12/29/2017, 12:00:00 AM', + '12/30/2017, 12:00:00 AM', + '12/31/2017, 12:00:00 AM', + '1/1/2018, 12:00:00 AM' + ]; + assert.deepEqual(d, rslt); + }); + it("inputing wrong freq", function(){ + assert.throws(function () { dfd.dateRange({ end:'1/1/2018', period:8, freq:"d" }); }, Error, 'invalid freq d'); + }); + it("inputing wrong freq with offset", function(){ + assert.throws(function () { dfd.dateRange({ end:'1/1/2018', period:8, freq:"4d" }); }, Error, 'invalid freq d'); + }); + it("inputing wrong freq offset", function(){ + assert.throws(function () { dfd.dateRange({ end:'1/1/2018', period:8, freq:"abcm" }); }, Error, 'invalid freq offset abc'); + }); + // it("Obtain date between start and end specified with different month", function(){ + + // let d = dfd.dateRange({start:'2018-04-24',end:'2018-05-27'}) + // let rslt = [ + // '4/24/2018, 1:00:00 AM', + // '4/25/2018, 1:00:00 AM', + // '4/26/2018, 1:00:00 AM', + // '4/27/2018, 1:00:00 AM', + // '4/28/2018, 1:00:00 AM', + // '4/29/2018, 1:00:00 AM', + // '4/30/2018, 1:00:00 AM', + // '5/1/2018, 1:00:00 AM', + // '5/2/2018, 1:00:00 AM', + // '5/3/2018, 1:00:00 AM', + // '5/27/2018, 1:00:00 AM' + // ] + // assert.deepEqual(d,rslt) + // }); +}); diff --git a/src/danfojs-browser/tests/core/datetime.test.js b/src/danfojs-browser/tests/core/datetime.test.js new file mode 100644 index 00000000..1562e743 --- /dev/null +++ b/src/danfojs-browser/tests/core/datetime.test.js @@ -0,0 +1,91 @@ +/* eslint-disable no-undef */ + +describe("TimeSeries", function () { + + it("Returns correct month number", function () { + const data = [ "02Sep2019", "03Aug2019", "04July2019" ]; + const dateTime = dfd.toDateTime(data); + const expected = [ 8, 7, 6 ]; + assert.deepEqual(dateTime.month().values, expected); + }); + + it("Returns correct year number", function () { + const data = [ "02Sep2019", "03Aug2029", "04July2020" ]; + const dateTime = dfd.toDateTime(data); + const expected = [ 2019, 2029, 2020 ]; + assert.deepEqual(dateTime.year().values, expected); + }); + + it("Return month name generated", function () { + const data = [ "06-30-02019", "07-29-2019", "08-28-2019" ]; + const dateTime = dfd.toDateTime(data); + const expected = [ "June", "July", "August" ]; + assert.deepEqual(dateTime.monthName().values, expected); + }); + + it("Return day of the week generated", function () { + const data = [ "06-30-02019", "07-29-2019", "08-28-2019" ]; + const dateTime = dfd.toDateTime(data); + const expected = [ "Sunday", "Monday", "Wednesday" ]; + assert.deepEqual(dateTime.dayOfWeekName().values, expected); + }); + + it("Return day of the month generated", function () { + const data = [ "06-30-02019", "07-29-2019", "08-28-2019" ]; + const dateTime = dfd.toDateTime(data); + const expected = [ 30, 29, 28 ]; + assert.deepEqual(dateTime.dayOfMonth().values, expected); + }); + + it("Return seconds generated", function () { + const data = [ "06-30-02019 00:00:12", "07-29-2019 00:30:40", "08-28-2019 00:12:04" ]; + const dateTime = dfd.toDateTime(data); + const expected = [ 12, 40, 4 ]; + assert.deepEqual(dateTime.seconds().values, expected); + }); + + it("Return minutes generated", function () { + const data = [ "06-30-02019 00:00:12", "07-29-2019 00:30:40", "08-28-2019 00:12:04" ]; + const dateTime = dfd.toDateTime(data); + const expected = [ 0, 30, 12 ]; + assert.deepEqual(dateTime.minutes().values, expected); + }); + + it("Return hours generated", function () { + const data = [ "06-30-02019 05:00:12", "07-29-2019 01:30:40", "08-28-2019 06:12:04" ]; + const dateTime = dfd.toDateTime(data); + const expected = [ 5, 1, 6 ]; + assert.deepEqual(dateTime.hours().values, expected); + }); + + it("Return correct date from Series format 1", function () { + const data = new dfd.Series([ "12/30/19 00:01", "12/29/19 07:03", "11/12/20 18:21" ]); + const dateTime = dfd.toDateTime(data); + + const expectedMonth = [ 11, 11, 10 ]; + const expectedYear = [ 2019, 2019, 2020 ]; + const expectedDayOfMonth = [ 30, 29, 12 ]; + const expectedMonthName = [ "December", "December", "November" ]; + + assert.deepEqual(dateTime.month().values, expectedMonth); + assert.deepEqual(dateTime.year().values, expectedYear); + assert.deepEqual(dateTime.dayOfMonth().values, expectedDayOfMonth); + assert.deepEqual(dateTime.monthName().values, expectedMonthName); + }); + + it("Return correct date from Series format 2", function () { + const data = new dfd.Series([ "12.30.19", "12.22.19", "11.01.20" ]); + const dateTime = dfd.toDateTime(data); + + const expectedMonth = [ 11, 11, 10 ]; + const expectedYear = [ 2019, 2019, 2020 ]; + const expectedDay = [ 1, 0, 0 ]; + const expectedMonthName = [ "December", "December", "November" ]; + + assert.deepEqual(dateTime.month().values, expectedMonth); + assert.deepEqual(dateTime.year().values, expectedYear); + assert.deepEqual(dateTime.dayOfWeek().values, expectedDay); + assert.deepEqual(dateTime.monthName().values, expectedMonthName); + + }); +}); diff --git a/src/danfojs-browser/tests/core/frame.test.js b/src/danfojs-browser/tests/core/frame.test.js new file mode 100644 index 00000000..d564bebd --- /dev/null +++ b/src/danfojs-browser/tests/core/frame.test.js @@ -0,0 +1,2906 @@ +/* eslint-disable no-undef */ + +describe("DataFrame", function () { + + describe("Subsetting by column names", function () { + it("retrieves the col data created from an df with two columns", function () { + let data = { alpha: [ "A", "B", "C", "D" ], count: [ 1, 2, 3, 4 ] }; + let df = new dfd.DataFrame(data); + assert.deepEqual(df["alpha"].values, [ "A", "B", "C", "D" ]); + assert.deepEqual(df["count"].values, [ 1, 2, 3, 4 ]); + }); + it("retrieves the column data from an df with three columns", function () { + let data = { alpha: [ "A", "B", "C", "D" ], count: [ 1, 2, 3, 4 ], sum: [ 20.3, 30.456, 40.90, 90.1 ] }; + let df = new dfd.DataFrame(data); + assert.deepEqual(df["alpha"].values, [ "A", "B", "C", "D" ]); + assert.deepEqual(df["count"].values, [ 1, 2, 3, 4 ]); + assert.deepEqual(df["sum"].values, [ 20.3, 30.456, 40.90, 90.1 ]); + }); + + it("Set column count by subseting", function () { + let data = { alpha: [ "A", "B", "C", "D" ], count: [ 1, 2, 3, 4 ], sum: [ 20.3, 30.456, 40.90, 90.1 ] }; + let df = new dfd.DataFrame(data); + df["alpha"] = [ "E", "F", "G", "H" ]; + assert.deepEqual(df["alpha"].values, [ "E", "F", "G", "H" ]); + assert.deepEqual(df.values[0], [ 'E', 1, 20.3 ]); + assert.deepEqual(df.dtypes, [ "string", "int32", "float32" ]); + assert.deepEqual(df["count"].values, [ 1, 2, 3, 4 ]); + assert.deepEqual(df["sum"].values, [ 20.3, 30.456, 40.90, 90.1 ]); + }); + + it("Correct dtype is set after setting a column by subseting", function () { + let data = { alpha: [ "A", "B", "C", "D" ], count: [ 1, 2, 3, 4 ], sum: [ 20.3, 30.456, 40.90, 90.1 ] }; + let df = new dfd.DataFrame(data); + df["alpha"] = [ 2.4, 5.6, 32.5, 1 ]; + + assert.deepEqual(df["alpha"].values, [ 2.4, 5.6, 32.5, 1 ]); + assert.deepEqual(df.values[0], [ 2.4, 1, 20.3 ]); + assert.deepEqual(df.values[1], [ 5.6, 2, 30.456 ]); + assert.deepEqual(df.values[2], [ 32.5, 3, 40.90 ]); + assert.deepEqual(df.values[3], [ 1, 4, 90.1 ]); + + df["count"] = [ "A", "B", "C", "D" ]; + assert.deepEqual(df["count"].values, [ "A", "B", "C", "D" ]); + assert.deepEqual(df.dtypes, [ "float32", "string", "float32" ]); + }); + + it("retrieves the col data created from an df with two columns in low memory mode", function () { + let data = { alpha: [ "A", "B", "C", "D" ], count: [ 1, 2, 3, 4 ] }; + let df = new dfd.DataFrame(data, { lowMemoryMode: true }); + assert.deepEqual(df["alpha"].values, [ "A", "B", "C", "D" ]); + assert.deepEqual(df["count"].values, [ 1, 2, 3, 4 ]); + }); + it("retrieves the column data from an df with threee columns in low memory mode", function () { + let data = { alpha: [ "A", "B", "C", "D" ], count: [ 1, 2, 3, 4 ], sum: [ 20.3, 30.456, 40.90, 90.1 ] }; + let df = new dfd.DataFrame(data, { lowMemoryMode: true }); + assert.deepEqual(df["alpha"].values, [ "A", "B", "C", "D" ]); + assert.deepEqual(df["count"].values, [ 1, 2, 3, 4 ]); + assert.deepEqual(df["sum"].values, [ 20.3, 30.456, 40.90, 90.1 ]); + }); + + it("Set column count by subseting (low memory mode) ", function () { + let data = { alpha: [ "A", "B", "C", "D" ], count: [ 1, 2, 3, 4 ], sum: [ 20.3, 30.456, 40.90, 90.1 ] }; + let df = new dfd.DataFrame(data, { lowMemoryMode: true }); + df["alpha"] = [ "E", "F", "G", "H" ]; + assert.deepEqual(df["alpha"].values, [ "E", "F", "G", "H" ]); + assert.deepEqual(df.values[0], [ 'E', 1, 20.3 ]); + assert.deepEqual(df.dtypes, [ "string", "int32", "float32" ]); + assert.deepEqual(df["count"].values, [ 1, 2, 3, 4 ]); + assert.deepEqual(df["sum"].values, [ 20.3, 30.456, 40.90, 90.1 ]); + }); + + it("Correct dtype is set after setting a column by subseting (low memory mode) ", function () { + let data = { alpha: [ "A", "B", "C", "D" ], count: [ 1, 2, 3, 4 ], sum: [ 20.3, 30.456, 40.90, 90.1 ] }; + let df = new dfd.DataFrame(data, { lowMemoryMode: true }); + df["alpha"] = [ 2.4, 5.6, 32.5, 1 ]; + assert.deepEqual(df["alpha"].values, [ 2.4, 5.6, 32.5, 1 ]); + assert.deepEqual(df.values[0], [ 2.4, 1, 20.3 ]); + assert.deepEqual(df.values[1], [ 5.6, 2, 30.456 ]); + assert.deepEqual(df.values[2], [ 32.5, 3, 40.90 ]); + assert.deepEqual(df.values[3], [ 1, 4, 90.1 ]); + assert.deepEqual(df.dtypes, [ "float32", "int32", "float32" ]); + }); + }); + + describe("addColumn", function () { + it("Add new array values to DataFrame works", function () { + let data = { alpha: [ "A", "B", "C", "D" ], count: [ 1, 2, 3, 4 ], sum: [ 20.3, 30.456, 40.90, 90.1 ] }; + let df = new dfd.DataFrame(data); + const newdf = df.addColumn("new_column", [ "a", "b", "c", "d" ]); + assert.deepEqual(newdf["new_column"].values, [ "a", "b", "c", "d" ]); + assert.deepEqual(newdf.columns, [ "alpha", "count", "sum", "new_column" ]); + assert.deepEqual(newdf.dtypes, [ "string", "int32", "float32", "string" ]); + assert.deepEqual(newdf.index, [ 0, 1, 2, 3 ]); + }); + it("Add new array values to DataFrame inplace works", function () { + let data = { alpha: [ "A", "B", "C", "D" ], count: [ 1, 2, 3, 4 ], sum: [ 20.3, 30.456, 40.90, 90.1 ] }; + let df = new dfd.DataFrame(data); + df.addColumn("new_column", [ "a", "b", "c", "d" ], { inplace: true }); + assert.deepEqual(df["new_column"].values, [ "a", "b", "c", "d" ]); + assert.deepEqual(df.columns, [ "alpha", "count", "sum", "new_column" ]); + assert.deepEqual(df.dtypes, [ "string", "int32", "float32", "string" ]); + assert.deepEqual(df.index, [ 0, 1, 2, 3 ]); + }); + it("Add new Series to DataFrame works", function () { + let data = { alpha: [ "A", "B", "C", "D" ], count: [ 1, 2, 3, 4 ], sum: [ 20.3, 30.456, 40.90, 90.1 ] }; + let df = new dfd.DataFrame(data); + const newdf = df.addColumn("new_column", new dfd.Series([ "a", "b", "c", "d" ])); + assert.deepEqual(newdf["new_column"].values, [ "a", "b", "c", "d" ]); + assert.deepEqual(newdf.columns, [ "alpha", "count", "sum", "new_column" ]); + assert.deepEqual(newdf.dtypes, [ "string", "int32", "float32", "string" ]); + assert.deepEqual(newdf.index, [ 0, 1, 2, 3 ]); + }); + it("Correct column data is set", function () { + let data = { alpha: [ "A", "B", "C", "D" ], count: [ 1, 2, 3, 4 ], sum: [ 20.3, 30.456, 40.90, 90.1 ] }; + let df = new dfd.DataFrame(data); + df.addColumn("new_column", [ "a", "b", "c", "d" ], { inplace: true }); + assert.deepEqual(df["new_column"].values, [ "a", "b", "c", "d" ]); + assert.deepEqual(df["alpha"].values, [ "A", "B", "C", "D" ]); + assert.deepEqual(df["count"].values, [ 1, 2, 3, 4 ]); + assert.deepEqual(df["sum"].values, [ 20.3, 30.456, 40.90, 90.1 ]); + }); + it("throw error for wrong column lenght", function () { + const data = { alpha: [ "A", "B", "C", "D" ], count: [ 1, 2, 3, 4 ], sum: [ 20.3, 30.456, 40.90, 90.1 ] }; + const df = new dfd.DataFrame(data); + + assert.throws(function () { + df.addColumn("new_column", new dfd.Series([ "a", "b", "c" ])), + Error, + 'ParamError: Column data length mismatch. You provided data with length 3 but Ndframe has column of lenght 4'; + }); + + }); + it("Ensure add column does not mutate parent when not in place", function () { + const data = { alpha: [ "A", "B", "C", "D" ], count: [ 1, 2, 3, 4 ], sum: [ 20.3, 30.456, 40.90, 90.1 ] }; + const df = new dfd.DataFrame(data); + const dfNew = df.addColumn("new_column", [ "a", "b", "c", "d" ]); + assert.notDeepEqual(df, dfNew); + assert.deepEqual(dfNew["new_column"].values, [ "a", "b", "c", "d" ]); + assert.deepEqual(df["alpha"].values, [ "A", "B", "C", "D" ]); + assert.deepEqual(df["count"].values, [ 1, 2, 3, 4 ]); + assert.deepEqual(df["sum"].values, [ 20.3, 30.456, 40.90, 90.1 ]); + }); + + it("Add new array values to DataFrame works", function () { + let data = { alpha: [ "A", "B", "C", "D" ], val_count: [ 1, 2, 3, 4 ], val_sum: [ 20.3, 30.456, 40.90, 90.1 ] }; + let df = new dfd.DataFrame(data); + const newdf = df.addColumn("new_column", [ "a", "b", "c", "d" ], { atIndex: 0 }); + assert.deepEqual(newdf["new_column"].values, [ "a", "b", "c", "d" ]); + assert.deepEqual(newdf.columns, [ "new_column", "alpha", "val_count", "val_sum" ]); + assert.deepEqual(newdf.dtypes, [ "string", "int32", "float32", "string" ]); + assert.deepEqual(newdf.index, [ 0, 1, 2, 3 ]); + }); + + it("Add new array values to specific column index", function () { + let data = { alpha: [ "A", "B", "C", "D" ], val_count: [ 1, 2, 3, 4 ], val_sum: [ 20.3, 30.456, 40.90, 90.1 ] }; + let df = new dfd.DataFrame(data); + const newdf = df.addColumn("new_column", [ "a", "b", "c", "d" ], { atIndex: 'alpha' }); + assert.deepEqual(newdf["new_column"].values, [ "a", "b", "c", "d" ]); + assert.deepEqual(newdf.columns, [ "new_column", "alpha", "val_count", "val_sum" ]); + assert.deepEqual(newdf.dtypes, [ "string", "int32", "float32", "string" ]); + assert.deepEqual(newdf.index, [ 0, 1, 2, 3 ]); + }); + }); + + describe("drop", function () { + it("throw error for wrong column name", function () { + const data = [ [ 1, 2, 3 ], [ 4, 5, 6 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols }); + assert.throws(function () { + df.drop({ columns: [ 3 ] }); + }, + Error, + 'ParamError: specified column "3" not found in columns'); + }); + it("throw error for wrong row index", function () { + const data = [ [ 1, 2, 3 ], [ 4, 5, 6 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols }); + assert.throws(function () { df.drop({ index: [ 10 ] }); }, + Error, 'ParamError: specified index "10" not found in indices'); + }); + + it("drop a column inplace", function () { + const data = [ [ 1, 2, 3 ], [ 4, 5, 6 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols }); + df.drop({ columns: [ "C", "B" ], inplace: true }); + assert.deepEqual(df.columns, [ "A" ]); + assert.deepEqual(df.values, [ [ 1 ], [ 4 ] ]); + assert.deepEqual(df["A"].values, [ 1, 4 ]); + assert.deepEqual(df.dtypes, [ "int32" ]); + }); + it("drop a column inplace in low memory mode", function () { + const data = [ [ 1, 2, 3 ], [ 4, 5, 6 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols, config: { lowMemoryMode: true } }); + df.drop({ columns: [ "C", "B" ], inplace: true }); + assert.deepEqual(df.columns, [ "A" ]); + assert.deepEqual(df.values, [ [ 1 ], [ 4 ] ]); + assert.deepEqual(df["A"].values, [ 1, 4 ]); + assert.deepEqual(df.dtypes, [ "int32" ]); + }); + it("drop a scalar column inplace", function () { + const data = [ [ 1, 2, 3 ], [ 4, 5, 6 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols }); + df.drop({ columns: "C", inplace: true }); + assert.deepEqual(df.columns, [ "A", "B" ]); + assert.deepEqual(df.values, [ [ 1, 2 ], [ 4, 5 ] ]); + assert.deepEqual(df["A"].values, [ 1, 4 ]); + assert.deepEqual(df["B"].values, [ 2, 5 ]); + }); + it("check if data is updated after column is dropped", function () { + const data = [ [ 1, 2, 3 ], [ 4, 5, 6 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols }); + df.drop({ columns: [ "C" ], axis: 1, inplace: true }); + const new_data = [ [ 1, 2 ], [ 4, 5 ] ]; + assert.deepEqual(df.values, new_data); + assert.deepEqual(df.dtypes.length, 2); + + }); + + it("check if data is updated after row is dropped", function () { + const data = [ [ 1, 2, 3 ], [ 4, 5, 6 ] ]; + const cols = [ "A", "B", "C" ]; + const dfNew = new dfd.DataFrame(data, { columns: cols }); + const df = dfNew.drop({ index: [ 0 ] }); + const new_data = [ [ 4, 5, 6 ] ]; + assert.deepEqual(df.values, new_data); + assert.deepEqual(df.dtypes, [ "int32", "int32", "int32" ]); + assert.deepEqual(df["A"].values, [ 4 ]); + assert.deepEqual(df["B"].values, [ 5 ]); + assert.deepEqual(df["C"].values, [ 6 ]); + assert.deepEqual(df.columns, cols); + assert.notDeepEqual(dfNew, df); + }); + it("check if data is updated after row is dropped (inplace)", function () { + const data = [ [ 1, 2, 3 ], [ 4, 5, 6 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols }); + df.drop({ index: [ 0 ], inplace: true }); + const new_data = [ [ 4, 5, 6 ] ]; + assert.deepEqual(df.values, new_data); + assert.deepEqual(df.dtypes, [ "int32", "int32", "int32" ]); + assert.deepEqual(df["A"].values, [ 4 ]); + assert.deepEqual(df["B"].values, [ 5 ]); + assert.deepEqual(df["C"].values, [ 6 ]); + assert.deepEqual(df.columns, cols); + }); + it("check if new dfd.dataframe is properly created after column is dropped (not-in-inplace)", function () { + const data = [ [ 1, 2, 3 ], [ 4, 5, 6 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols }); + const df_drop = df.drop({ columns: [ "C" ], axis: 1, inplace: false }); + + const expected_data = [ [ 1, 2 ], [ 4, 5 ] ]; + const expected_cols = [ "A", "B" ]; + const expected_df = new dfd.DataFrame(expected_data, { columns: expected_cols }); + assert.deepEqual(df_drop.values, expected_df.values); + }); + it("check that the dtype is updated after column drop", function () { + const data = [ [ 1, 2, 3 ], [ 4, 5, 6 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols }); + df.drop({ columns: [ "A" ], axis: 1, inplace: true }); + const dtype = [ 'int32', 'int32' ]; + assert.deepEqual(df.dtypes, dtype); + }); + it("drop row by single string labels", function () { + const data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 34, 5 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols, index: [ "a", "b", "c" ] }); + df.drop({ index: [ "a" ], inplace: true }); + const new_data = [ [ 4, 5, 6 ], [ 20, 34, 5 ] ]; + assert.deepEqual(df.values, new_data); + }); + it("drop row by two or more string labels", function () { + const data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 34, 5 ], [ 2, 3.4, 5 ], [ 2.0, 340, 5 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols, index: [ "a", "b", "c", "d", "e" ] }); + df.drop({ index: [ "a", "b" ], inplace: true }); + const new_data = [ [ 20, 34, 5 ], [ 2, 3.4, 5 ], [ 2.0, 340, 5 ] ]; + assert.deepEqual(df.values, new_data); + + }); + it("drop row by two or more string labels with numeric index", function () { + const data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 34, 5 ], [ 2, 3.4, 5 ], [ 2.0, 340, 5 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols, index: [ "a", "b", 1, "d", "e" ] }); + df.drop({ index: [ 1, "b" ], inplace: true }); + const new_data = [ [ 1, 2, 3 ], [ 2, 3.4, 5 ], [ 2.0, 340, 5 ] ]; + assert.deepEqual(df.values, new_data); + assert.deepEqual(df.index, [ "a", "d", "e" ]); + + }); + }); + + describe("head", function () { + it("Gets the first n rows in a DataFrame", function () { + const data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols }); + assert.deepEqual(df.head(2).values, [ [ 1, 2, 3 ], [ 4, 5, 6 ] ]); + }); + it("Throws error if row specified is greater than values", function () { + const data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols }); + assert.throws(() => df.head(10), Error, + "ParamError: Number of rows cannot be greater than available rows in data"); + }); + it("Throws error if row specified is less than 0", function () { + const data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols }); + assert.throws(() => df.head(-1), Error, + "ParamError: Number of rows cannot be less than 1"); + }); + + }); + + describe("tail", function () { + it("Prints the last n rows of a DataFrame", function () { + const data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols }); + assert.deepEqual(df.tail(2).values, [ [ 20, 30, 40 ], [ 39, 89, 78 ] ]); + }); + it("Throws error if row specified is greater than values", function () { + const data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols }); + assert.throws(() => df.tail(10), Error, + "ParamError: Number of rows cannot be greater than available rows in data"); + }); + it("Throws error if row specified is less than 0", function () { + const data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols }); + assert.throws(() => df.tail(-1), Error, + "ParamError: Number of rows cannot be less than 1"); + }); + it("Return last 3 row index in a DataFrame", function () { + const data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols }); + assert.deepEqual(df.tail(2).index, [ 2, 3 ]); + }); + it("Check print format on head call", function () { + const data = [ [ 1, 2, 34, 5, 0, 6, 4, 5, 6, 7 ], [ 20, 30, 40, 39, 89, 78, 45, 56, 56, 45 ] ]; + const df = new dfd.DataFrame(data); + assert.deepEqual(df.tail(2).values, [ [ 1, 2, 34, 5, 0, 6, 4, 5, 6, 7 ], [ 20, 30, 40, 39, 89, 78, 45, 56, 56, 45 ] ]); + }); + }); + + describe("sample", function () { + it("Samples n number of random elements from a DataFrame", async function () { + const data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ], [ 100, 200, 300 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols }); + const expected = [ [ 1, 2, 3 ], [ 20, 30, 40 ] ]; + const values = (await df.sample(2)).values; + assert.deepEqual(values, expected); + }); + it("Throw error if n is greater than lenght of Dataframe", async function () { + const data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ], [ 100, 200, 300 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols }); + try { + await df.sample(100); + } catch (e) { + expect(e).to.be.instanceOf(Error); + expect(e.message).to.eql('ParamError: Sample size cannot be bigger than number of rows'); + } + }); + it("Throw error if n is less than 0", async function () { + const data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ], [ 100, 200, 300 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols }); + try { + await df.sample(-2); + } catch (e) { + expect(e).to.be.instanceOf(Error); + expect(e.message).to.eql('ParamError: Sample size cannot be less than 1'); + } + }); + it("Throw error if n is 0", async function () { + const data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ], [ 100, 200, 300 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols }); + try { + await df.sample(0); + } catch (e) { + expect(e).to.be.instanceOf(Error); + expect(e.message).to.eql('ParamError: Sample size cannot be less than 1'); + } + }); + it("Seed works and random number is reproducible", async function () { + const data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ], [ 100, 200, 300 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols }); + const values1 = (await df.sample(2, { seed: 453 })).values; + const values2 = (await df.sample(2, { seed: 453 })).values; + const values3 = (await df.sample(2, { seed: 1 })).values; + + assert.deepEqual(values1, values2); + assert.notDeepEqual(values1, values3); + + }); + }); + + describe("loc", function () { + + it("throw error for wrong column name", function () { + const data = [ [ 1, 2, 3 ], [ 4, 5, 6 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols }); + assert.throws(function () { + df.loc({ "rows": [ 0, 1 ], "columns": [ "A", "D" ] }); + }, + Error, + "IndexError: Specified column (D) not found"); + }); + + it(`check data after selecting { "rows": ["0", "1"], "columns": ["B", "C"] }`, function () { + const data = [ [ 1, 2, 3 ], [ 4, 5, 6 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols, index: [ "0", "1" ] }); + + const colDf = df.loc({ "rows": [ "0", "1" ], "columns": [ "B", "C" ] }); + const expected = [ [ 2, 3 ], [ 5, 6 ] ]; + + assert.deepEqual(colDf.values, expected); + + }); + it("check data after selecting row index", function () { + const data = [ [ 1, 2, 3 ], [ 4, 5, 6 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols, index: [ 0, 1 ] }); + + const colDf = df.loc({ "rows": [ "1" ], "columns": [ "B" ] }); + const expected = [ [ 5 ] ]; + + assert.deepEqual(colDf.values, expected); + + }); + it("check data after selecting with single row index", function () { + const data = [ [ 1, 2, 3 ], [ 4, 5, 6 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols, index: [ "0", "1" ] }); + + const colDf = df.loc({ "rows": [ `"1"` ], "columns": [ "B", "C" ] }); + const expected = [ [ 5, 6 ] ]; + + assert.deepEqual(colDf.values, expected); + + }); + it("check data after selecting with single column index", function () { + const data = [ [ 1, 2, 3 ], [ 4, 5, 6 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols, index: [ "0", "1" ] }); + + const colDf = df.loc({ "rows": [ `"0"` ], "columns": [ "A" ] }); + const expected = [ [ 1 ] ]; + + assert.deepEqual(colDf.values, expected); + + }); + it("check data after row and column slice", function () { + const data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols, index: [ "0", "1", "2", "3" ] }); + + const colDf = df.loc({ "rows": [ `'0':'2'` ], "columns": [ "B:C" ] }); + const expected = [ [ 2 ], [ 5 ] ]; + + assert.deepEqual(colDf.values, expected); + + }); + it("check data after row slice", function () { + const data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols }); + + const colDf = df.loc({ "rows": [ `0:2` ], "columns": [ "B", "C" ] }); + const expected = [ [ 2, 3 ], [ 5, 6 ] ]; + + assert.deepEqual(colDf.values, expected); + + }); + it(`check data after column slice ["A:C"]`, function () { + const data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols, index: [ "0", "1", "2", "3" ] }); + + const colDf = df.loc({ "rows": [ "0", "1" ], "columns": [ "A:C" ] }); + const expected = [ [ 1, 2 ], [ 4, 5 ] ]; + assert.deepEqual(colDf.values, expected); + + }); + it("check data after numeric row slice", function () { + const data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols }); + + const colDf = df.loc({ "rows": [ 0, 1 ], "columns": [ "A:C" ] }); + const expected = [ [ 1, 2 ], [ 4, 5 ] ]; + assert.deepEqual(colDf.values, expected); + + }); + it("loc by single string index", function () { + const data = { + "Name": [ "Apples", "Mango", "Banana", "Pear" ], + "Count": [ 21, 5, 30, 10 ], + "Price": [ 200, 300, 40, 250 ] + }; + + const df = new dfd.DataFrame(data, { index: [ "a", "b", "c", "d" ] }); + const subDf = df.loc({ rows: [ `"a"` ], columns: [ "Name", "Count" ] }); + const expected = [ [ 'Apples', 21 ] ]; + assert.deepEqual(subDf.values, expected); + + }); + + it("loc by slice string index", function () { + const data = { + "Name": [ "Apples", "Mango", "Banana", "Pear" ], + "Count": [ 21, 5, 30, 10 ], + "Price": [ 200, 300, 40, 250 ] + }; + + const df = new dfd.DataFrame(data, { index: [ "a", "b", "c", "d" ] }); + const subDf = df.loc({ rows: [ `"a":"c"` ], columns: [ "Name", "Count" ] }); + const expected = [ [ "Apples", 21 ], [ "Mango", 5 ] ]; + assert.deepEqual(subDf.values, expected); + + }); + + + }); + + describe("DataFrame iloc", function () { + + it("throw error for wrong row index (array format)", function () { + const data = [ [ 1, 2, 3 ], [ 4, 5, 6 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols }); + assert.throws(function () { + df.iloc({ "rows": [ 0, 1, 3 ] }); + }, + Error, + "Invalid row parameter: Specified index 3 cannot be bigger than index length 2"); + }); + + it("throw error for wrong row index (string slice format)", function () { + const data = [ [ 1, 2, 3 ], [ 4, 5, 6 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols }); + assert.throws(function () { + df.iloc({ "rows": [ "1:5" ] }); + }, + Error, + "row slice [end] index cannot be bigger than 2"); + }); + + it("throw error for wrong column index (array format)", function () { + const data = [ [ 1, 2, 3 ], [ 4, 5, 6 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols }); + assert.throws(function () { + df.iloc({ "columns": [ 1, 4 ] }); + }, + Error, + "Invalid column parameter: Specified index 4 cannot be bigger than index length 3"); + }); + + it("throw error for wrong column index (string slice format)", function () { + const data = [ [ 1, 2, 3 ], [ 4, 5, 6 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols }); + assert.throws(function () { + df.iloc({ "columns": [ "A:C" ] }); + }, + Error, + "Invalid column split parameter. Split parameter must be a number"); + }); + + it("iloc works for {row: [0, 1], column: [1, 2]}", function () { + const data = [ [ 1, 2, 3 ], [ 4, 5, 6 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols }); + + const colDf = df.iloc({ "rows": [ 0, 1 ], "columns": [ 1, 2 ] }); + const expected = [ [ 2, 3 ], [ 5, 6 ] ]; + + assert.deepEqual(colDf.values, expected); + + }); + + it(`iloc works for { "rows": [1], "columns": [1, 2] }`, function () { + const data = [ [ 1, 2, 3 ], [ 4, 5, 6 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols }); + const colDf = df.iloc({ "rows": [ 1 ], "columns": [ 1, 2 ] }); + const expected = [ [ 5, 6 ] ]; + assert.deepEqual(colDf.values, expected); + + }); + it("check data after row and column slice", function () { + const data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols }); + + const colDf = df.iloc({ "rows": [ "0:2" ], "columns": [ "1:2" ] }); + const expected = [ [ 2 ], [ 5 ] ]; + + assert.deepEqual(colDf.values, expected); + + }); + it("check data after row slice", function () { + const data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols }); + + const colDf = df.iloc({ "rows": [ "0:2" ], "columns": [ 1, 2 ] }); + const expected = [ [ 2, 3 ], [ 5, 6 ] ]; + + assert.deepEqual(colDf.values, expected); + + }); + it("check data after column slice", function () { + const data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols }); + + const colDf = df.iloc({ "rows": [ 0, 1, 2 ], "columns": [ "1:2" ] }); + const expected = [ [ 2 ], [ 5 ], [ 30 ] ]; + assert.deepEqual(colDf.values, expected); + + }); + it("Return all columns if columns parameter is not specified", function () { + const data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols }); + + const colDf = df.iloc({ "rows": [ 0, 1, 2 ] }); + const expected = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ] ]; + assert.deepEqual(colDf.values, expected); + + }); + it("Return all rows if rows parameter is not specified", function () { + const data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols }); + + const colDf = df.iloc({ "columns": [ "1:2" ] }); + const expected = [ [ 2 ], [ 5 ], [ 30 ], [ 89 ] ]; + assert.deepEqual(colDf.values, expected); + + }); + it("column slice starting with 0 and returning a single result works", function () { + const data = { + "Name": [ "Apples", "Mango", "Banana", "Pear" ], + "Count": [ 21, 5, 30, 10 ], + "Price": [ 200, 300, 40, 250 ], + "index": [ 1, 2, 3, 4 ] + }; + const df = new dfd.DataFrame(data); + const subDf = df.iloc({ rows: [ "2:3" ], columns: [ "0:1" ] }); + const result = [ [ "Banana" ] ]; + assert.deepEqual(subDf.values, result); + + }); + it("column slice with format '0:' works", function () { + const data = { + "Name": [ "Apples", "Mango", "Banana", "Pear" ], + "Count": [ 21, 5, 30, 10 ], + "Price": [ 200, 300, 40, 250 ] + }; + const df = new dfd.DataFrame(data); + const subDf = df.iloc({ rows: [ "2:3" ], columns: [ "0:" ] }); + const result = [ [ "Banana", 30, 40 ] ]; + assert.deepEqual(subDf.values, result); + + }); + it("column slice with format ':2' works", function () { + const data = { + "Name": [ "Apples", "Mango", "Banana", "Pear" ], + "Count": [ 21, 5, 30, 10 ], + "Price": [ 200, 300, 40, 250 ] + }; + const df = new dfd.DataFrame(data); + const subDf = df.iloc({ rows: [ "2:3" ], columns: [ ":2" ] }); + const result = [ [ "Banana", 30 ] ]; + assert.deepEqual(subDf.values, result); + + }); + it("row slice with format ':2' works", function () { + const data = { + "Name": [ "Apples", "Mango", "Banana", "Pear" ], + "Count": [ 21, 5, 30, 10 ], + "Price": [ 200, 300, 40, 250 ] + }; + const df = new dfd.DataFrame(data); + const subDf = df.iloc({ rows: [ ":2" ], columns: [ ":1" ] }); + const result = [ [ 'Apples' ], [ 'Mango' ] ]; + assert.deepEqual(subDf.values, result); + + }); + it("row slice with format '1:' works", function () { + const data = { + "Name": [ "Apples", "Mango", "Banana", "Pear" ], + "Count": [ 21, 5, 30, 10 ], + "Price": [ 200, 300, 40, 250 ] + }; + const df = new dfd.DataFrame(data); + const subDf = df.iloc({ rows: [ ":2" ], columns: [ ":2" ] }); + const result = [ [ 'Apples', 21 ], [ 'Mango', 5 ] ]; + assert.deepEqual(subDf.values, result); + + }); + + }); + + describe("toString", function () { + it("Prints a DataFrame to console", function () { + const data = { + "Name": [ "Apples", "Mango", "Banana", "Pear" ], + "Count": [ 21, 5, 30, 10 ], + "Price": [ 200, 300, 40, 250 ] + }; + const df = new dfd.DataFrame(data); + df.print(); + }); + it("User config works when printing a DataFrame to console", function () { + const data = { + "Name": [ "Apples", "Mango", "Banana", "Pear" ], + "Count": [ 21, 5, 30, 10 ], + "Price": [ 200, 300, 40, 250 ] + }; + const df = new dfd.DataFrame(data, { + config: { + tableDisplayConfig: { + header: { + alignment: 'center', + content: 'THE HEADER\nThis is the table about something' + } + } + } + }); + df.print(); + }); + it("Long columns are properly truncated before printing", function () { + const data = { + "Name": [ "Apples", "Mango", "Banana", "Pear" ], + "Count": [ 21, 5, 30, 10 ], + "Price": [ 200, 300, 40, 250 ], + "Name2": [ "Apples", "Mango", "Banana", "Pear" ], + "Count2": [ 21, 5, 30, 10 ], + "Price2": [ 200, 300, 40, 250 ], + "Name3": [ "Apples", "Mango", "Banana", "Pear" ], + "Count3": [ 21, 5, 30, 10 ], + "Price3": [ 200, 300, 40, 250 ], + "Name4": [ "Apples", "Mango", "Banana", "Pear" ], + "Count4": [ 21, 5, 30, 10 ], + "Price4": [ 200, 300, 40, 250 ], + "Name5": [ "Apples", "Mango", "Banana", "Pear" ], + "Count5": [ 21, 5, 30, 10 ], + "Price6": [ 200, 300, 40, 250 ], + "Name7": [ "Apples", "Mango", "Banana", "Pear" ], + "Count7": [ 21, 5, 30, 10 ], + "Price7": [ 200, 300, 40, 250 ], + "Name8": [ "Apples", "Mango", "Banana", "Pear" ], + "Count8": [ 21, 5, 30, 10 ], + "Price8": [ 200, 300, 40, 250 ], + "Name9": [ "Apples", "Mango", "Banana", "Pear" ], + "Count9": [ 21, 5, 30, 10 ], + "Price9": [ 200, 300, 40, 250 ], + "Name10": [ "Apples", "Mango", "Banana", "Pear" ], + "Count10": [ 21, 5, 30, 10 ], + "Price10": [ 200, 300, 40, 250 ] + }; + const df = new dfd.DataFrame(data); + df.print(); + }); + + it("Long rows are automatically truncated", function () { + const data = { + "Name": [ "Apples", "Mango", "Banana", "Pear", "Apples", "Mango", "Banana", "Pear", "Apples", "Mango", "Banana", "Pear" ], + "Count": [ 21, 5, 30, 10, 21, 5, 30, 10, 21, 5, 30, 10 ], + "Price": [ 200, 300, 40, 250, 200, 300, 40, 250, 200, 300, 40, 250 ] + }; + const df = new dfd.DataFrame(data); + df.print(); + }); + }); + + describe("add", function () { + it("Return Addition of DataFrame with a single Number", function () { + const data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; + const df = new dfd.DataFrame(data); + assert.deepEqual(df.add(2).values, [ [ 2, 4, 6 ], [ 362, 182, 362 ] ]); + }); + it("Return addition of a DataFrame with a Series along default axis 1", function () { + const data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; + const sf = new dfd.Series([ 1, 2, 1 ]); + const df = new dfd.DataFrame(data); + assert.deepEqual(df.add(sf).values, [ [ 1, 4, 5 ], [ 361, 182, 361 ] ]); + }); + it("Return addition of a DataFrame with a Series along default axis 1", function () { + const data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; + const sf = [ 1, 2, 1 ]; + const df = new dfd.DataFrame(data); + assert.deepEqual(df.add(sf).values, [ [ 1, 4, 5 ], [ 361, 182, 361 ] ]); + }); + it("Return addition of a DataFrame with a Series along axis 0", function () { + const data = [ [ 0, 2, 4 ], + [ 360, 180, 360 ] ]; + const sf = new dfd.Series([ 1, 2 ]); + const df = new dfd.DataFrame(data); + assert.deepEqual(df.add(sf, { axis: 0 }).values, [ [ 1, 3, 5 ], [ 362, 182, 362 ] ]); + }); + it("Return addition of a DataFrame with a Array along axis 0", function () { + const data = [ [ 0, 2, 4 ], + [ 360, 180, 360 ] ]; + const sf = [ 1, 2 ]; + const df = new dfd.DataFrame(data); + assert.deepEqual(df.add(sf, { axis: 0 }).values, [ [ 1, 3, 5 ], [ 362, 182, 362 ] ]); + }); + it("Return addition of a DataFrame with a DataFrame along default axis 1", function () { + const df1 = new dfd.DataFrame([ [ 0, 2, 4 ], [ 360, 180, 360 ] ]); + const df2 = new dfd.DataFrame([ [ 1, 2, 4 ], [ 10, 5, 0 ] ]); + assert.deepEqual(df1.add(df2).values, [ [ 1, 4, 8 ], [ 370, 185, 360 ] ]); + }); + it("Return addition of a DataFrame with a DataFrame along axis 0", function () { + const df1 = new dfd.DataFrame([ [ 0, 2, 4 ], [ 360, 180, 360 ] ]); + const df2 = new dfd.DataFrame([ [ 1, 2, 4 ], [ 10, 5, 0 ] ]); + assert.deepEqual(df1.add(df2).values, [ [ 1, 4, 8 ], [ 370, 185, 360 ] ]); + }); + it("Return addition of a DataFrame with a Series along default axis 1 (inplace)", function () { + const data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; + const sf = new dfd.Series([ 1, 2, 1 ]); + const df = new dfd.DataFrame(data); + df.add(sf, { axis: 1, inplace: true }); + assert.deepEqual(df.values, [ [ 1, 4, 5 ], [ 361, 182, 361 ] ]); + }); + + it("Return addition of a DataFrame with a DataFrame along axis 0 (inplace)", function () { + const df1 = new dfd.DataFrame([ [ 0, 2, 4 ], [ 360, 180, 360 ] ]); + const df2 = new dfd.DataFrame([ [ 1, 2, 4 ], [ 10, 5, 0 ] ]); + df1.add(df2, { axis: 0, inplace: true }); + assert.deepEqual(df1.values, [ [ 1, 4, 8 ], [ 370, 185, 360 ] ]); + }); + it("Adds work for DataFrame with undefined and null values", function () { + const df1 = new dfd.DataFrame([ [ undefined, 2, 4 ], [ 360, NaN, 360 ] ]); + const df2 = new dfd.DataFrame([ [ 1, 2, 4 ], [ 10, 5, 0 ] ]); + df1.add(df2, { axis: 0, inplace: true }); + assert.deepEqual(df1.values, [ [ NaN, 4, 8 ], [ 370, NaN, 360 ] ]); + }); + + }); + + describe("sub", function () { + it("Return subtraction of DataFrame with a single Number", function () { + const data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; + const df = new dfd.DataFrame(data); + assert.deepEqual(df.sub(2).values, [ [ -2, 0, 2 ], [ 358, 178, 358 ] ]); + }); + it("Return subtraction of a DataFrame with a Series along default axis 1", function () { + const data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; + const sf = new dfd.Series([ 1, 2, 1 ]); + const df = new dfd.DataFrame(data); + assert.deepEqual(df.sub(sf).values, [ [ -1, 0, 3 ], [ 359, 178, 359 ] ]); + }); + it("Return subtraction of a DataFrame with a Series along axis 0", function () { + const data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; + const sf = new dfd.Series([ 1, 2 ]); + const df = new dfd.DataFrame(data); + assert.deepEqual(df.sub(sf, { axis: 0 }).values, [ [ -1, 1, 3 ], [ 358, 178, 358 ] ]); + }); + it("Return subtraction of a DataFrame with a DataFrame along default axis 1", function () { + const df1 = new dfd.DataFrame([ [ 0, 2, 4 ], [ 360, 180, 360 ] ]); + const df2 = new dfd.DataFrame([ [ 1, 2, 4 ], [ 10, 5, 0 ] ]); + assert.deepEqual(df1.sub(df2).values, [ [ -1, 0, 0 ], [ 350, 175, 360 ] ]); + }); + it("Return subtraction of a DataFrame with a DataFrame along axis 0", function () { + const df1 = new dfd.DataFrame([ [ 0, 2, 4 ], [ 360, 180, 360 ] ]); + const df2 = new dfd.DataFrame([ [ 1, 2, 4 ], [ 10, 5, 0 ] ]); + assert.deepEqual(df1.sub(df2).values, [ [ -1, 0, 0 ], [ 350, 175, 360 ] ]); + }); + + }); + + describe("mul", function () { + it("Return multiplication of DataFrame with a single Number", function () { + const data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; + const df = new dfd.DataFrame(data); + assert.deepEqual(df.mul(2).values, [ [ 0, 4, 8 ], [ 720, 360, 720 ] ]); + }); + it("Return multiplication of a DataFrame with a Series along default axis 1", function () { + const data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; + const sf = new dfd.Series([ 1, 2, 1 ]); + const df = new dfd.DataFrame(data); + assert.deepEqual(df.mul(sf).values, [ [ 0, 4, 4 ], [ 360, 360, 360 ] ]); + }); + it("Return multiplication of a DataFrame with a Series along axis 0", function () { + const data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; + const sf = new dfd.Series([ 1, 2 ]); + const df = new dfd.DataFrame(data); + assert.deepEqual(df.mul(sf, { axis: 0 }).values, [ [ 0, 2, 4 ], [ 720, 360, 720 ] ]); + }); + it("Return multiplication of a DataFrame with a DataFrame along default axis 1", function () { + const df1 = new dfd.DataFrame([ [ 0, 2, 4 ], [ 360, 180, 360 ] ]); + const df2 = new dfd.DataFrame([ [ 1, 2, 4 ], [ 10, 5, 0 ] ]); + assert.deepEqual(df1.mul(df2).values, [ [ 0, 4, 16 ], [ 3600, 900, 0 ] ]); + }); + it("Return multiplication of a DataFrame with a DataFrame along axis 0", function () { + const df1 = new dfd.DataFrame([ [ 0, 2, 4 ], [ 360, 180, 360 ] ]); + const df2 = new dfd.DataFrame([ [ 1, 2, 4 ], [ 10, 5, 0 ] ]); + assert.deepEqual(df1.mul(df2, { axis: 0 }).values, [ [ 0, 4, 16 ], [ 3600, 900, 0 ] ]); + }); + + }); + + describe("div", function () { + it("Return division of DataFrame with a single Number", function () { + const data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; + const df = new dfd.DataFrame(data); + assert.deepEqual(df.div(2).values, [ [ 0, 1, 2 ], [ 180, 90, 180 ] ]); + }); + it("Return division of a DataFrame with a Series along default axis 1", function () { + const data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; + const sf = new dfd.Series([ 1, 2, 1 ]); + const df = new dfd.DataFrame(data); + assert.deepEqual(df.div(sf).values, [ [ 0, 1, 4 ], [ 360, 90, 360 ] ]); + }); + it("Return division of a DataFrame with a Series along axis 0", function () { + const data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; + const sf = new dfd.Series([ 1, 2 ]); + const df = new dfd.DataFrame(data); + assert.deepEqual(df.div(sf, { axis: 0 }).values, [ [ 0, 2, 4 ], [ 180, 90, 180 ] ]); + }); + it("Return division of a DataFrame with a DataFrame along default axis 1", function () { + const df1 = new dfd.DataFrame([ [ 0, 2, 4 ], [ 360, 180, 360 ] ]); + const df2 = new dfd.DataFrame([ [ 1, 2, 4 ], [ 10, 5, 0 ] ]); + assert.deepEqual(df1.div(df2).values, [ [ 0, 1, 1 ], [ 36, 36, Infinity ] ]); + }); + it("Return division of a DataFrame with a DataFrame along axis 0", function () { + const df1 = new dfd.DataFrame([ [ 0, 2, 4 ], [ 360, 180, 360 ] ]); + const df2 = new dfd.DataFrame([ [ 1, 2, 4 ], [ 10, 5, 0 ] ]); + assert.deepEqual(df1.div(df2).values, [ [ 0, 1, 1 ], [ 36, 36, Infinity ] ]); + }); + + }); + + //So CI test result varies depending on where it is run. This is difficult to test. + //so I'm commenting it out. See https://github.com/javascriptdata/danfojs/issues/329 + // describe("pow", function () { + // it("Return exponential of DataFrame with a single Number", function () { + // const data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; + // const df = new dfd.DataFrame(data); + // assert.deepEqual(df.pow(2).values, [ [ 0, 4, 16 ], [ 129600, 32400, 129600 ] ]); + // }); + // it("Return exponential of a DataFrame with a Series along default axis 1", function () { + // const data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; + // const sf = new dfd.Series([ 1, 2, 1 ]); + // const df = new dfd.DataFrame(data); + // assert.deepEqual(df.pow(sf).values, [ [ 0, 4, 4 ], [ 360, 32400, 360 ] ]); + // }); + // it("Return exponential of a DataFrame with a Series along axis 0", function () { + // const data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; + // const sf = new dfd.Series([ 1, 2 ]); + // const df = new dfd.DataFrame(data); + // assert.deepEqual(df.pow(sf, { axis: 0 }).values, [ [ 0, 2, 4 ], [ 129600, 32400, 129600 ] ]); + // }); + // it("Return exponential of a DataFrame with another DataFrame along default axis 1", function () { + // const df1 = new dfd.DataFrame([ [ 0, 2, 4 ], [ 3, 10, 4 ] ]); + // const df2 = new dfd.DataFrame([ [ 1, 2, 4 ], [ 10, 5, 0 ] ]); + // assert.deepEqual(df1.pow(df2).values, [ [ 0, 4, 256 ], [ 59049, 100000, 1 ] ]); + // }); + // it("Return exponential of a DataFrame with another DataFrame along axis 0", function () { + // const df1 = new dfd.DataFrame([ [ 0, 2, 4 ], [ 3, 10, 4 ] ]); + // const df2 = new dfd.DataFrame([ [ 1, 2, 4 ], [ 10, 5, 0 ] ]); + // assert.deepEqual(df1.pow(df2, { axis: 0 }).values, [ [ 0, 4, 256 ], [ 59049, 100000, 1 ] ]); + // }); + + // }); + + describe("mod", function () { + it("Return modulus of DataFrame with a single Number", function () { + const data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; + const df = new dfd.DataFrame(data); + assert.deepEqual(df.mod(2).values, [ [ 0, 0, 0 ], [ 0, 0, 0 ] ]); + }); + it("Return modulus of a DataFrame with a Series along default axis 1", function () { + const data = [ [ 0, 2, 4 ], [ 31, 15, 360 ] ]; + const sf = new dfd.Series([ 1, 2, 1 ]); + const df = new dfd.DataFrame(data); + assert.deepEqual(df.mod(sf).values, [ [ 0, 0, 0 ], [ 0, 1, 0 ] ]); + }); + it("Return modulus of a DataFrame with a Series along axis 0", function () { + const data = [ [ 0, 2, 4 ], [ 31, 15, 360 ] ]; + const sf = new dfd.Series([ 1, 2 ]); + const df = new dfd.DataFrame(data); + assert.deepEqual(df.mod(sf, { axis: 0 }).values, [ [ 0, 0, 0 ], [ 1, 1, 0 ] ]); + }); + it("Return modulus of a DataFrame with a DataFrame along default axis 1", function () { + const df1 = new dfd.DataFrame([ [ 0, 2, 4 ], [ 31, 15, 360 ] ]); + const df2 = new dfd.DataFrame([ [ 1, 2, 4 ], [ 10, 5, 0 ] ]); + assert.deepEqual(df1.mod(df2).values, [ [ 0, 0, 0 ], [ 1, 0, NaN ] ]); + }); + it("Return modulus of a DataFrame with a DataFrame along axis 0", function () { + const df1 = new dfd.DataFrame([ [ 0, 2, 4 ], [ 360, 180, 360 ] ]); + const df2 = new dfd.DataFrame([ [ 1, 2, 4 ], [ 10, 5, 0 ] ]); + assert.deepEqual(df1.mod(df2).values, [ [ 0, 0, 0 ], [ 0, 0, NaN ] ]); + }); + + }); + + describe("mean", function () { + it("Returns the mean of a DataFrame (Default axis is [1:column])", function () { + const data = [ [ 0, 2, 4 ], + [ 360, 180, 360 ] ]; + const df = new dfd.DataFrame(data, { columns: [ "col1", "col2", "col3" ], index: [ "row1", "row2" ] }); + assert.deepEqual(df.mean().values, [ 2, 300 ]); + assert.deepEqual(df.mean().index, [ "row1", "row2" ]); + }); + it("Return mean of a DataFrame along axis 1 (column)", function () { + const data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; + const df = new dfd.DataFrame(data); + assert.deepEqual(df.mean({ "axis": 1 }).values, [ 2, 300 ]); + }); + it("Removes NaN before calculating mean of a DataFrame", function () { + const data = [ [ 11, 20, 3 ], + [ NaN, 15, 6 ], + [ 2, 30, 40 ], + [ 2, 89, 78 ] ]; + const df = new dfd.DataFrame(data); + assert.deepEqual(df.mean({ "axis": 1 }).values, [ 11.333333333333334, 10.5, 24, 56.333333333333336 ]); + }); + it("Return mean of a DataFrame along axis 0 (column)", function () { + const data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; + const df = new dfd.DataFrame(data); + assert.deepEqual(df.mean({ "axis": 0 }).values, [ 180, 91, 182 ]); + }); + it("Removes NaN before calculating mean of a DataFrame along axis 0 (column)", function () { + const data = [ [ 11, 20, 3 ], + [ NaN, 15, 6 ], + [ 2, 30, 40 ], + [ 2, 89, 78 ] ]; + const df = new dfd.DataFrame(data); + assert.deepEqual(df.mean({ "axis": 0 }).values, [ 5, 38.5, 31.75 ]); + }); + it("Throws error on wrong axis specified", function () { + const data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; + const df = new dfd.DataFrame(data); + assert.throws(() => df.mean({ "axis": 2 }), Error, "ParamError: Axis must be 0 or 1"); + }); + }); + + describe("median", function () { + it("Returns the median of a DataFrame (Default axis is [1:column])", function () { + const data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; + const df = new dfd.DataFrame(data); + assert.deepEqual(df.median().values, [ 2, 360 ]); + }); + it("Return median of a DataFrame along axis 0 (row)", function () { + const data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; + const df = new dfd.DataFrame(data); + assert.deepEqual(df.median({ "axis": 0 }).values, [ 180, 91, 182 ]); + }); + + }); + + describe("mode", function () { + it("Returns the mode of a DataFrame (Default axis is [1:column])", function () { + const data = [ [ 0, 2, 4, 2 ], [ 360, 180, 360 ] ]; + const df = new dfd.DataFrame(data); + assert.deepEqual(df.mode().values, [ 2, 360 ]); + }); + it("Returns the mode of a DataFrame with keep set to 1", function () { + const data = [ [ 0, 2, 4, 2, 4 ], [ 360, 180, 360, 360 ] ]; + const df = new dfd.DataFrame(data); + assert.deepEqual(df.mode({ keep: 1 }).values, [ 4, 360 ]); + }); + it("Returns mode of a DataFrame along axis 0 (row)", function () { + const data = [ [ 0, 2, 4 ], + [ 360, 180, 360 ], + [ 0, 2, 360 ] ]; + const df = new dfd.DataFrame(data); + assert.deepEqual(df.mode({ "axis": 0 }).values, [ 0, 2, 360 ]); + }); + it("Returns mode of a DataFrame along axis 0 for objects", function () { + const data = { "col1": [ 0, 2, 4, 0 ], "col2": [ 360, 180, 360, 360 ] }; + const df = new dfd.DataFrame(data); + assert.deepEqual(df.mode({ "axis": 0 }).values, [ 0, 360 ]); + }); + + }); + + describe("min", function () { + it("Returns the minimum values in a DataFrame (Default axis is [1:column])", function () { + const data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; + const df = new dfd.DataFrame(data); + assert.deepEqual(df.min().values, [ 0, 180 ]); + }); + it("Returns the minimum values of a DataFrame along axis 0 (row)", function () { + const data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; + const df = new dfd.DataFrame(data); + assert.deepEqual(df.min({ "axis": 0 }).values, [ 0, 2, 4 ]); + }); + it("Returns the minimum values of a DataFrame along axis 0 (row) using TFJS", function () { + const data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; + const df = new dfd.DataFrame(data, { config: { useTfjsMathFunctions: true } }); + assert.deepEqual(df.min({ "axis": 0 }).values, [ 0, 2, 4 ]); + }); + it("Returns the minimum values in a DataFrame-Default axis 1 using TFJS", function () { + const data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; + const df = new dfd.DataFrame(data, { config: { useTfjsMathFunctions: true } }); + assert.deepEqual(df.min().values, [ 0, 180 ]); + }); + + }); + + describe("max", function () { + it("Returns the maximum values in a DataFrame (Default axis is [1:column])", function () { + const data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; + const df = new dfd.DataFrame(data); + assert.deepEqual(df.max().values, [ 4, 360 ]); + }); + it("Returns the maximum values of a DataFrame along axis 0 (row)", function () { + const data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; + const df = new dfd.DataFrame(data); + assert.deepEqual(df.max({ "axis": 0 }).values, [ 360, 180, 360 ]); + }); + + }); + + describe("std", function () { + it("Returns the standard deviations of values in a DataFrame (Default axis is [1:column])", function () { + const data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; + const df = new dfd.DataFrame(data); + assert.deepEqual(df.std().values, [ 2, 103.92304845413264 ]); + }); + it("Return the standard deviations of values of a DataFrame along axis 0 (row)", function () { + const data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; + const df = new dfd.DataFrame(data); + assert.deepEqual(df.std({ axis: 0 }).values, [ 254.55844122715712, 125.86500705120545, 251.7300141024109 ]); + }); + + + }); + + describe("var", function () { + it("Returns the variance of values in a DataFrame (Default axis is [1:column])", function () { + const data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; + const df = new dfd.DataFrame(data); + assert.deepEqual(df.var().values, [ 4, 10800 ]); + }); + it("Return the variance of values of a DataFrame along axis 0 (row)", function () { + const data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; + const df = new dfd.DataFrame(data); + assert.deepEqual(df.var({ axis: 0 }).values, [ 64800, 15842, 63368 ]); + }); + + + }); + + describe("describe", function () { + it("Returns descriptive statistics of columns in a DataFrame created from an array", function () { + const data = [ [ 0, 2, 4, "a" ], + [ 360, 180, 360, "b" ], + [ 2, 4, 6, "c" ] ]; + + const df = new dfd.DataFrame(data); + const res = [ [ 3, 3, 3 ], [ 120.66666666666667, 62, 123.33333333333333 ], + [ 207.27115895206774, 102.19589032832974, 204.961785055979 ], + [ 0, 2, 4 ], [ 2, 4, 6 ], + [ 360, 180, 360 ], + [ 42961.33333333333, 10444, 42009.333333333336 ] ]; + assert.deepEqual(df.describe().values, res); + }); + it("Returns descriptive statistics of columns in a DataFrame created from an Object", function () { + const data = { + "col1": [ 0, 2, 4 ], + "col2": [ 360, 180, 360 ], + "col3": [ 2, 4, 6 ], + "col4": [ "boy", "girl", "man" ], + "col5": [ "apple", "car", "bee" ] + }; + const df = new dfd.DataFrame(data); + + const res = [ [ 3, 3, 3 ], [ 2, 300, 4 ], + [ 2, 103.92304845413264, 2 ], + [ 0, 180, 2 ], [ 2, 360, 4 ], + [ 4, 360, 6 ], + [ 4, 10800, 4 ] ]; + assert.deepEqual(df.describe().values, res); + }); + + }); + + describe("count", function () { + it("Returns the count of non-nan values in a DataFrame (Default axis is [1:column])", function () { + const data = [ [ 0, 2, 4 ], + [ 360, 180.1, 360.11 ], + [ NaN, 2, 4 ], + [ 360, undefined, 360 ] ]; + const df = new dfd.DataFrame(data); + assert.deepEqual(df.count().values, [ 3, 3, 2, 2 ]); + }); + it("Return the count of non NaN values of a DataFrame along axis 0", function () { + const data = [ [ 0, 2, 4, NaN ], + [ 360, undefined, 360, 70 ] ]; + const df = new dfd.DataFrame(data); + assert.deepEqual(df.count({ axis: 0 }).values, [ 2, 1, 2, 1 ]); + }); + + }); + + describe("round", function () { + it("Rounds values in a DataFrame to 3dp", function () { + const data = [ [ 10.1, 2.092, 4.23 ], [ 360.232244, 180.0190290, 36.902612 ] ]; + const df = new dfd.DataFrame(data); + const expected = [ [ 10.1, 2.092, 4.23 ], [ 360.232, 180.0190, 36.903 ] ]; + assert.deepEqual(df.round(3).values, expected); + }); + it("Rounds values in a DataFrame to 1dp, inplace", function () { + const data = [ [ 10.1, 2.092, 4.23 ], [ 360.232244, 180.0190290, 36.902612 ] ]; + const df = new dfd.DataFrame(data); + const expected = [ [ 10.1, 2.1, 4.2 ], [ 360.2, 180.0, 36.9 ] ]; + df.round(1, { inplace: true }); + assert.deepEqual(df.values, expected); + }); + it("Rounds values in a DataFrame to 3dp with missing values", function () { + const data = [ [ 10.1, 2.092, NaN ], [ 360.232244, undefined, 36.902612 ] ]; + const df = new dfd.DataFrame(data); + const expected = [ [ 10.1, 2.092, NaN ], [ 360.232, undefined, 36.903 ] ]; + assert.deepEqual(df.round(3, { axis: 0 }).values, expected); + }); + + }); + + describe("sortValues", function () { + it("Sort values in DataFrame by specified column in ascending order (Default)", function () { + const data = [ [ 0, 2, 4, "a" ], + [ 360, 180, 360, "b" ], + [ 2, 4, 6, "c" ] ]; + + const df = new dfd.DataFrame(data, { "columns": [ "col1", "col2", "col3", "col4" ], index: [ "a", 1, "c" ] }); + df.sortValues("col1", { inplace: true }); + const expected = [ [ 0, 2, 4, "a" ], [ 2, 4, 6, "c" ], [ 360, 180, 360, "b" ] ]; + assert.deepEqual(df.values, expected); + assert.deepEqual(df.index, [ "a", "c", 1 ]); + + }); + + it("Sort values in DataFrame by specified column in ascending order (Default)", function () { + const data = [ [ 0, 2, 4, "a" ], + [ 360, 180, 1, "b" ], + [ 2, 4, 6, "c" ] ]; + + const df = new dfd.DataFrame(data, { "columns": [ "col1", "col2", "col3", "col4" ] }); + const df_sort = df.sortValues("col3"); + const expected = [ [ 360, 180, 1, "b" ], [ 0, 2, 4, "a" ], [ 2, 4, 6, "c" ] ]; + assert.deepEqual(df_sort.values, expected); + assert.deepEqual(df_sort.index, [ 1, 0, 2 ]); + + }); + it("Sort values in DataFrame by specified column in descending order", function () { + const data = [ [ 0, 2, 4, "a" ], + [ 360, 180, 360, "b" ], + [ 2, 4, 6, "c" ] ]; + + const df = new dfd.DataFrame(data, { "columns": [ "col1", "col2", "col3", "col4" ] }); + const expected = [ [ 360, 180, 360, "b" ], [ 2, 4, 6, "c" ], [ 0, 2, 4, "a" ] ]; + assert.deepEqual(df.sortValues("col1", { "ascending": false }).values, expected); + }); + + it("Sort values in DataFrame by specified column in descending order (second col)", function () { + const data = [ [ 0, 2, 4, "a" ], + [ 360, 180, 1, "b" ], + [ 2, 4, 6, "c" ] ]; + + const df = new dfd.DataFrame(data, { "columns": [ "col1", "col2", "col3", "col4" ] }); + const expected = [ [ 2, 4, 6, "c" ], [ 0, 2, 4, "a" ], [ 360, 180, 1, "b" ] ]; + assert.deepEqual(df.sortValues("col3", { "ascending": false }).values, expected); + }); + it("Sort values in DataFrame by specified column containing alpha(numeric) values", function () { + const data = [ [ 0, 2, 4, "a" ], + [ 360, 180, 1, "b" ], + [ 2, 4, 6, "c" ] ]; + + const df = new dfd.DataFrame(data, { "columns": [ "col1", "col2", "col3", "col4" ] }); + const expected = [ [ 2, 4, 6, 'c' ], [ 360, 180, 1, 'b' ], [ 0, 2, 4, 'a' ] ]; + assert.deepEqual(df.sortValues("col4", { "ascending": false }).values, expected); + }); + it("Sort duplicate DataFrame with duplicate columns", function () { + + const data = { + "A": [ 1, 2, 3, 4, 5, 3, 5, 6, 4, 5, 3, 4 ], + "B": [ 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4 ] + }; + + const df = new dfd.DataFrame(data); + const expected = [ [ 1, 2 ], + [ 2, 3 ], + [ 3, 4 ], + [ 3, 7 ], + [ 3, 3 ], + [ 4, 5 ], + [ 4, 1 ], + [ 4, 4 ], + [ 5, 6 ], + [ 5, 8 ], + [ 5, 2 ], + [ 6, 9 ] ]; + assert.deepEqual(df.sortValues("A", { "ascending": true }).values, expected); + }); + }); + + describe("copy", function () { + it("Makes a deep copy of DataFrame", function () { + const data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; + const df = new dfd.DataFrame(data); + const df_copy = df.copy(); + assert.deepEqual(df_copy.values, [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]); + }); + it("Confirms child copy modification does not affect parent DataFrame", function () { + const data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; + const df = new dfd.DataFrame(data); + const df_copy = df.copy(); + df_copy.addColumn("col_new", [ "boy", "girl" ], { inplace: true }); + assert.notDeepEqual(df_copy.values, df.values); + assert.notDeepEqual(df_copy, df); + }); + + }); + + + describe("setIndex", function () { + it("Sets the index of a DataFrame created from an Object inplace", function () { + const data = [ { alpha: "A", count: 1 }, { alpha: "B", count: 2 }, { alpha: "C", count: 3 } ]; + const df = new dfd.DataFrame(data); + df.setIndex({ index: [ "one", "two", "three" ], inplace: true }); + assert.deepEqual(df.index, [ "one", "two", "three" ]); + }); + it("Sets the index of a DataFrame from column name", function () { + const data = [ { alpha: "A", count: 1 }, { alpha: "B", count: 2 }, { alpha: "C", count: 3 } ]; + const df = new dfd.DataFrame(data); + const df_new = df.setIndex({ column: "alpha" }); + assert.deepEqual(df_new.index, [ "A", "B", "C" ]); + }); + it("Sets the index of a DataFrame from column name", function () { + const data = [ { alpha: "A", count: 1 }, { alpha: "B", count: 2 }, { alpha: "C", count: 3 } ]; + const df = new dfd.DataFrame(data); + const df_new = df.setIndex({ column: "alpha" }); + assert.deepEqual(df_new.index, [ "A", "B", "C" ]); + }); + it("Sets the index of a DataFrame from column name and drop column data (inplace)", function () { + const data = [ { alpha: "A", count: 1 }, { alpha: "B", count: 2 }, { alpha: "C", count: 3 } ]; + const df = new dfd.DataFrame(data); + df.setIndex({ column: "alpha", drop: true, inplace: true }); + assert.deepEqual(df.index, [ "A", "B", "C" ]); + assert.deepEqual(df.columns, [ "count" ]); + assert.deepEqual(df.values, [ [ 1 ], [ 2 ], [ 3 ] ]); + assert.throws(() => df["alpha"], Error, + "ParamError: Column not found!. Column name must be one of count" + ); + }); + it("Throw error if index and column not passed", function () { + const data = [ { alpha: "A", count: 1 }, { alpha: "B", count: 2 }, { alpha: "C", count: 3 } ]; + const df = new dfd.DataFrame(data); + assert.throws(() => df.setIndex({ drop: true, inplace: true }), Error, + "ParamError: must specify either index or column" + ); + }); + + it("Sets the index of a DataFrame from column name and drop column data", function () { + const data = [ { alpha: "A", count: 1 }, { alpha: "B", count: 2 }, { alpha: "C", count: 3 } ]; + const df = new dfd.DataFrame(data); + const df_new = df.setIndex({ column: "alpha", drop: true }); + assert.deepEqual(df_new.index, [ "A", "B", "C" ]); + assert.deepEqual(df_new.columns, [ "count" ]); + assert.deepEqual(df_new.values, [ [ 1 ], [ 2 ], [ 3 ] ]); + assert.deepEqual(df_new["alpha"], undefined); + }); + it("Sets the index of a DataFrame created from an Array inplace", function () { + const data = [ [ 0, 2, 4 ], [ 360, 180, 360 ], [ 0, 2, 4 ], [ 360, 180, 360 ], [ 0, 2, 4 ] ]; + const df = new dfd.DataFrame(data); + df.setIndex({ index: [ "one", "two", "three", "four", "five" ], "inplace": true }); + assert.deepEqual(df.index, [ "one", "two", "three", "four", "five" ]); + }); + it("Throws error on wrong row length", function () { + const data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; + const df = new dfd.DataFrame(data); + assert.throws(() => df.setIndex({ index: [ "one", "two", "three", "four", "five" ], "inplace": true }), Error, + "ParamError: index must be the same length as the number of rows" + ); + }); + it("Throws error on column not found", function () { + const data = [ [ 0, 2, 4 ], [ 360, 180, 360 ] ]; + const df = new dfd.DataFrame(data); + assert.throws(() => df.setIndex({ column: "alpha", inplace: true }), Error, + "ParamError: column not found in column names" + ); + }); + + }); + + describe("resetIndex", function () { + it("Resets the index of a DataFrame created from an Object", function () { + const data = [ { alpha: "A", count: 1 }, { alpha: "B", count: 2 }, { alpha: "C", count: 3 } ]; + const df = new dfd.DataFrame(data, { index: [ "one", "two", "three" ] }); + const df_reset = df.resetIndex(); + assert.deepEqual(df_reset.index, [ 0, 1, 2 ]); + }); + it("Resets the index of a DataFrame created from an Array inplace", function () { + const data = [ [ 0, 2, 4 ], [ 360, 180, 360 ], [ 0, 2, 4 ], [ 360, 180, 360 ], [ 0, 2, 4 ] ]; + const df = new dfd.DataFrame(data, { index: [ "one", "two", "three", "four", "five" ] }); + df.resetIndex({ inplace: true }); + assert.deepEqual(df.index, [ 0, 1, 2, 3, 4 ]); + }); + }); + + + describe("apply", function () { + + it("Apply an aggregation function to a DataFrame axis = 1", function () { + const data = [ [ 0, 2, 4 ], + [ 3, 2, 2 ], + [ 0, 2, 1 ] ]; + const df = new dfd.DataFrame(data); + + const sum = (x) => { + return x.reduce((a, b) => a + b, 0); + }; + const expected = [ 6, 7, 3 ]; + const dfApply = df.apply(sum, { axis: 1 }); + assert.deepEqual(dfApply.values, expected); + assert.deepEqual(dfApply.index, [ 0, 1, 2 ]); + + }); + it("Apply an aggregation function to a DataFrame axis = 0", function () { + const data = [ [ 0, 2, 4 ], + [ 3, 2, 2 ], + [ 0, 2, 1 ] ]; + const df = new dfd.DataFrame(data, { columns: [ "col1", "col2", "col3" ] }); + + const sum = (x) => { + return x.reduce((a, b) => a + b, 0); + }; + const expected = [ 3, 6, 7 ]; + const dfApply = df.apply(sum, { axis: 0 }); + assert.deepEqual(dfApply.values, expected); + assert.deepEqual(dfApply.index, [ "col1", "col2", "col3" ]); + }); + + }); + + describe("applyMap", function () { + it("Apply an element-wise function to a DataFrame", function () { + const data = [ [ 0, 2, 4 ], + [ 360, 180, 360 ], + [ 0, 2, 4 ] ]; + const df = new dfd.DataFrame(data); + + const add = (x) => { + return x + 1000; + }; + const expected = [ [ 1000, 1002, 1004 ], [ 1360, 1180, 1360 ], [ 1000, 1002, 1004 ] ]; + const dfApply = df.applyMap(add); + assert.deepEqual(dfApply.values, expected); + }); + + it("Apply an element-wise function to a DataFrame", function () { + const data = [ [ 0, 2, 4 ], + [ 360, 180, 360 ], + [ 0, 2, 4 ], + [ 0, 2, 4 ] ]; + const df = new dfd.DataFrame(data); + const add = (x) => { + return x + 1000; + }; + const expected = [ [ 1000, 1002, 1004 ], [ 1360, 1180, 1360 ], [ 1000, 1002, 1004 ], [ 1000, 1002, 1004 ] ]; + const dfApply = df.applyMap(add); + assert.deepEqual(dfApply.values, expected); + }); + + it("Apply an element-wise function to a DataFrame inplace", function () { + const data = [ [ 0, 2, 4 ], + [ 360, 180, 360 ], + [ 0, 2, 4 ] ]; + const df = new dfd.DataFrame(data); + + const add = (x) => { + return x + 1000; + }; + const expected = [ [ 1000, 1002, 1004 ], [ 1360, 1180, 1360 ], [ 1000, 1002, 1004 ] ]; + df.applyMap(add, { inplace: true }); + assert.deepEqual(df.values, expected); + }); + + it("Apply an element-wise function to a DataFrame inplace", function () { + const data = [ [ 0, 2, 4 ], + [ 360, 180, 360 ], + [ 0, 2, 4 ], + [ 0, 2, 4 ] ]; + const df = new dfd.DataFrame(data); + + const add = (x) => { + return x + 1000; + }; + const expected = [ [ 1000, 1002, 1004 ], [ 1360, 1180, 1360 ], [ 1000, 1002, 1004 ], [ 1000, 1002, 1004 ] ]; + df.applyMap(add, { inplace: true }); + assert.deepEqual(df.values, expected); + }); + }); + + describe("column", function () { + it("Obtain a column from a dataframe created from object", function () { + const data = [ { alpha: "A", count: 1 }, { alpha: "B", count: 2 }, { alpha: "C", count: 3 } ]; + const options = { columns: [ "Gender", "count" ] }; + const df = new dfd.DataFrame(data, options); + const expected = df.column("count"); + const rslt_data = [ 1, 2, 3 ]; + assert.deepEqual(expected.values, rslt_data); + }); + it("Obtain a column from a dataframe", function () { + const data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols }); + const expected = df.column("C"); + const rslt_data = [ 3, 6, 40, 78 ]; + assert.deepEqual(expected.values, rslt_data); + }); + it("Throw Error for wrong column", function () { + const data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols }); + assert.throws(() => { df.column("D"); }, Error, "ParamError: Column not found!. Column name must be one of A,B,C"); + + }); + }); + + + describe("dropNa", function () { + it("drop NaNs along axis 0", function () { + const data = [ [ 0, 2, 4 ], + [ 360, 180, 360 ], + [ NaN, 180, 360 ] ]; + const column = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: column }); + const df_val = [ [ 2, 4 ], + [ 180, 360 ], + [ 180, 360 ] ]; + assert.deepEqual(df.dropNa({ axis: 0 }).values, df_val); + + }); + it("drop NaNs along axis 1", function () { + const data = [ [ 0, 2, 4 ], + [ 360, 180, 360 ], + [ NaN, 180, 360 ] ]; + const column = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: column }); + const df_val = [ [ 0, 2, 4 ], + [ 360, 180, 360 ] ]; + assert.deepEqual(df.dropNa({ axis: 1 }).values, df_val); + + }); + it("drop NaNs along axis 1", function () { + const data = [ [ NaN, 1, 2, 3 ], [ 3, 4, NaN, 9 ], [ 5, 6, 7, 8 ] ]; + const column = [ "A", "B", "C", "D" ]; + const df = new dfd.DataFrame(data, { columns: column }); + const df_val = [ [ 5, 6, 7, 8 ] ]; + assert.deepEqual(df.dropNa({ axis: 1 }).values, df_val); + + }); + it("drop inplace at axis 0, inplace false ", function () { + const data = [ [ NaN, 1, 2, 3 ], [ 3, 4, NaN, 9 ], [ 5, 6, 7, 8 ] ]; + const column = [ "A", "B", "C", "D" ]; + const df = new dfd.DataFrame(data, { columns: column }); + + const df_val = [ [ 1, 3 ], [ 4, 9 ], [ 6, 8 ] ]; + + assert.deepEqual(df.dropNa({ axis: 0 }).values, df_val); + + }); + it("drop inplace at axis 0, inplace true ", function () { + const data = [ [ NaN, 1, 2, 3 ], [ 3, 4, NaN, 9 ], [ 5, 6, 7, 8 ] ]; + const column = [ "A", "B", "C", "D" ]; + const df = new dfd.DataFrame(data, { columns: column }); + + const df_val = [ [ 1, 3 ], [ 4, 9 ], [ 6, 8 ] ]; + df.dropNa({ axis: 0, inplace: true }); + assert.deepEqual(df.values, df_val); + + }); + it("drop inplace at axis 1 at inplace true", function () { + const data = [ [ NaN, 1, 2, 3 ], [ 3, 4, NaN, 9 ], [ 5, 6, 7, 8 ] ]; + const column = [ "A", "B", "C", "D" ]; + const df = new dfd.DataFrame(data, { columns: column }); + + const df_val = [ [ 5, 6, 7, 8 ] ]; + + df.dropNa({ axis: 1, inplace: true }); + assert.deepEqual(df.values, df_val); + + }); + + it("drop works for undefined values", function () { + let data = [ [ null, 1, 2, 3 ], [ 3, 4, undefined, 9 ], [ 5, 6, 7, 8 ] ]; + let column = [ "A", "B", "C", "D" ]; + let df = new dfd.DataFrame(data, { columns: column }); + + let df_val = [ [ 5, 6, 7, 8 ] ]; + + df.dropNa({ axis: 1, inplace: true }); + assert.deepEqual(df.values, df_val); + + }); + }); + + describe("isNa", function () { + + it("check if values are empty (element-wise", function () { + const data = [ [ NaN, 1, 2, 3 ], [ 3, 4, undefined, 9 ], [ 5, 6, 7, 8 ] ]; + const column = [ "A", "B", "C", "D" ]; + const df = new dfd.DataFrame(data, { columns: column }); + + const df_val = [ + [ true, false, false, false ], + [ false, false, true, false ], + [ false, false, false, false ] + ]; + const dfNew = df.isNa(); + assert.deepEqual(dfNew.values, df_val); + assert.deepEqual(dfNew.dtypes, [ "boolean", "boolean", "boolean", "boolean" ]); + assert.deepEqual(dfNew.columns, column); + }); + }); + + describe("fillNa", function () { + + it("replace all NaN value inplace", function () { + const data = [ [ NaN, 1, 2, 3 ], [ 3, 4, NaN, 9 ], [ 5, 6, 7, 8 ] ]; + const columns = [ "A", "B", "C", "D" ]; + const df = new dfd.DataFrame(data, { columns: columns }); + + const expected = [ [ -999, 1, 2, 3 ], [ 3, 4, -999, 9 ], [ 5, 6, 7, 8 ] ]; + df.fillNa(-999, { inplace: true }); + assert.deepEqual(df.values, expected); + }); + it("replace all undefined value", function () { + const data = [ [ undefined, 1, 2, 3 ], [ 3, 4, undefined, 9 ], [ 5, 6, 7, 8 ] ]; + const columns = [ "A", "B", "C", "D" ]; + const df = new dfd.DataFrame(data, { columns: columns }); + + const expected = [ [ -999, 1, 2, 3 ], [ 3, 4, -999, 9 ], [ 5, 6, 7, 8 ] ]; + + const df_filled = df.fillNa(-999); + assert.deepEqual(df_filled.values, expected); + }); + it("replace all undefined value with 0 works", function () { + const data = [ [ undefined, 1, 2, 3 ], [ 3, 4, null, 9 ], [ 5, NaN, 7, 8 ] ]; + const columns = [ "A", "B", "C", "D" ]; + const df = new dfd.DataFrame(data, { columns: columns }); + + const expected = [ [ 0, 1, 2, 3 ], [ 3, 4, 0, 9 ], [ 5, 0, 7, 8 ] ]; + + const df_filled = df.fillNa(0); + assert.deepEqual(df_filled.values, expected); + }); + it("Fills only a specified column", function () { + const data = [ [ 1, 2, 3 ], + [ 4, 5, 6 ], + [ 20, NaN, 40 ], + [ 39, NaN, NaN ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols }); + const expected = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 2, 40 ], [ 39, 2, NaN ] ]; + const df_filled = df.fillNa([ 2 ], { columns: [ "B" ] }); + + assert.deepEqual(df_filled.values, expected); + }); + it("Fills column with specified values not in place", function () { + const data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ NaN, 20, 40 ], [ NaN, -1, 78 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols }); + const new_vals = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ -2, 20, 40 ], [ -2, -1, 78 ] ]; + const df_filled = df.fillNa([ -2 ], { columns: [ "A" ] }); + + assert.deepEqual(df_filled.values, new_vals); + }); + + it("Fills a list of columns with specified values", function () { + const data = [ [ 1, undefined, 3 ], [ 4, undefined, 6 ], [ NaN, "boy", 40 ], [ NaN, "girl", NaN ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols }); + const new_vals = [ [ 1, "girl", 3 ], [ 4, "girl", 6 ], [ 200, "boy", 40 ], [ 200, "girl", NaN ] ]; + const df_filled = df.fillNa([ 200, "girl" ], { columns: [ "A", "B" ] }); + assert.deepEqual(df_filled.values, new_vals); + }); + it("Fills a list of columns with specified values inplace", function () { + const data = [ [ 1, undefined, 3 ], [ 4, undefined, 6 ], [ NaN, "boy", 40 ], [ NaN, "girl", 78 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols }); + const new_vals = [ [ 1, "girl", 3 ], [ 4, "girl", 6 ], [ 200, "boy", 40 ], [ 200, "girl", 78 ] ]; + df.fillNa([ 200, "girl" ], { columns: [ "A", "B" ], inplace: true }); + assert.deepEqual(df.values, new_vals); + }); + }); + + describe("selectDtypes", function () { + + it("Returns float columns in a DataFrame", function () { + const data = [ [ 30, 1, 2, "boy" ], [ 3.2, 4, 30, "girl" ], [ 5.09, 6, 7, "cat" ] ]; + const column = [ "A", "B", "C", "D" ]; + const df = new dfd.DataFrame(data, { columns: column }); + const df_sub = df.selectDtypes([ 'float32' ]); + assert.deepEqual(df_sub.values, [ [ 30 ], [ 3.2 ], [ 5.09 ] ]); + }); + + it("Returns int columns in a DataFrame", function () { + const data = [ [ 30, 1, 2, "boy" ], + [ 3.2, 4, 30, "girl" ], + [ 5.09, 6, 7, "cat" ] ]; + const column = [ "A", "B", "C", "D" ]; + const df = new dfd.DataFrame(data, { columns: column }); + const df_sub = df.selectDtypes([ 'int32' ]); + assert.deepEqual(df_sub.values, [ [ 1, 2 ], [ 4, 30 ], [ 6, 7 ] ]); + }); + + it("Returns string columns in a DataFrame", function () { + const data = [ [ 30, 1, 2, "boy" ], + [ 3.2, 4, 30, "girl" ], + [ 5.09, 6, 7, "cat" ] ]; + const column = [ "A", "B", "C", "D" ]; + const df = new dfd.DataFrame(data, { columns: column }); + const df_sub = df.selectDtypes([ 'string' ]); + assert.deepEqual(df_sub.values, [ [ "boy" ], [ "girl" ], [ "cat" ] ]); + }); + + it("Returns string and float columns in a DataFrame", function () { + const data = [ [ 30, 1, 2, "boy" ], + [ 3.2, 4, 30, "girl" ], + [ 5.09, 6, 7, "cat" ] ]; + const column = [ "A", "B", "C", "D" ]; + const df = new dfd.DataFrame(data, { columns: column }); + const df_sub = df.selectDtypes([ 'string', 'float32' ]); + assert.deepEqual(df_sub.values, [ [ 30, "boy" ], [ 3.2, "girl" ], [ 5.09, "cat" ] ]); + }); + + it("Returns int and float columns in a DataFrame", function () { + const data = [ [ 30, 1, 2, "boy" ], + [ 3.2, 4, 30, "girl" ], + [ 5.09, 6, 7, "cat" ] ]; + const column = [ "A", "B", "C", "D" ]; + const df = new dfd.DataFrame(data, { columns: column }); + const df_sub = df.selectDtypes([ 'int32', 'float32' ]); + assert.deepEqual(df_sub.values, [ [ 30, 1, 2 ], [ 3.2, 4, 30 ], [ 5.09, 6, 7 ] ]); + }); + }); + + + describe("lt", function () { + it("Returns Less than of DataFrame and other DataFrame (element-wise)", function () { + const data1 = [ [ 10, 45, 56, 10 ], [ 25, 23, 20, 10 ] ]; + const data2 = [ [ 100, 450, 590, 5 ], [ 25, 2, 0, 10 ] ]; + + const df = new dfd.DataFrame(data1); + const df2 = new dfd.DataFrame(data2); + const expected = [ [ true, true, true, false ], + [ false, false, false, false ] ]; + assert.deepEqual(df.lt(df2).values, expected); + }); + + it("Return Less than of series and scalar (element-wise)", function () { + const data1 = [ [ 10, 45, 56, 10 ], [ 25, 23, 20, 10 ] ]; + const sf = new dfd.DataFrame(data1); + const expected = [ [ true, false, false, true ], + [ true, true, true, true ] ]; + assert.deepEqual(sf.lt(30).values, expected); + }); + it("Return Less than of series and DataFrame along axis 1", function () { + const data1 = [ [ 10, 45, 56, 10 ], + [ 23, 20, 10, 10 ] ]; + const sf = new dfd.Series([ 10, 23, 56, 100 ]); + const df = new dfd.DataFrame(data1); + const expected = [ [ false, false, false, true ], [ false, true, true, true ] ]; + assert.deepEqual(df.lt(sf, { axis: 1 }).values, expected); + }); + + it("Return Less than of Array and DataFrame along axis 1", function () { + const data1 = [ [ 10, 45, 56, 10 ], [ 23, 20, 10, 10 ] ]; + const sf = [ 10, 23, 56, 100 ]; + const df = new dfd.DataFrame(data1); + const expected = [ [ false, false, false, true ], [ false, true, true, true ] ]; + assert.deepEqual(df.lt(sf, { axis: 1 }).values, expected); + }); + it("Return Less than of series and DataFrame along axis 0", function () { + const data1 = [ [ 10, 45, 56, 10 ], + [ 23, 20, 10, 10 ] ]; + const sf = new dfd.Series([ 10, 23 ]); + const df = new dfd.DataFrame(data1); + const expected = [ [ false, false, false, false ], [ false, true, true, true ] ]; + const result = df.lt(sf, { axis: 0 }); + assert.deepEqual(result.values, expected); + }); + + it("Return Less than of Array and DataFrame along axis 0", function () { + const data1 = [ [ 10, 45, 56, 10 ], [ 23, 20, 10, 10 ] ]; + const sf = [ 10, 23 ]; + const df = new dfd.DataFrame(data1); + const expected = [ [ false, false, false, false ], [ false, true, true, true ] ]; + const result = df.lt(sf, { axis: 0 }); + assert.deepEqual(result.values, expected); + }); + + }); + + describe("gt", function () { + it("Return Greater than of series and other series (element-wise)", function () { + const data1 = [ [ 10, 45, 56, 10 ], [ 25, 23, 20, 10 ] ]; + const data2 = [ [ 100, 450, 590, 5 ], [ 25, 2, 0, 10 ] ]; + + const df = new dfd.DataFrame(data1); + const df2 = new dfd.DataFrame(data2); + const expected = [ [ false, false, false, true ], [ false, true, true, false ] ]; + assert.deepEqual(df.gt(df2).values, expected); + }); + + it("Return Greater than of series scalar (element-wise)", function () { + const data1 = [ [ 10, 45, 56, 10 ], [ 25, 23, 20, 10 ] ]; + const sf = new dfd.DataFrame(data1); + const expected = [ [ false, true, true, false ], [ false, false, false, false ] ]; + assert.deepEqual(sf.gt(30).values, expected); + }); + + it("Return Less than of Array and DataFrame scalar along axis 1", function () { + const data1 = [ [ 10, 45, 56, 10 ], [ 23, 20, 10, 10 ] ]; + const sf = [ 10, 23, 56, 100 ]; + const df = new dfd.DataFrame(data1); + const expected = [ [ false, true, false, false ], [ true, false, false, false ] ]; + assert.deepEqual(df.gt(sf, { axis: 1 }).values, expected); + }); + it("Return Less than of Array and DataFrame scalar along axis 0", function () { + const data1 = [ [ 10, 45, 56, 10 ], [ 23, 20, 10, 10 ] ]; + const sf = [ 10, 23 ]; + const df = new dfd.DataFrame(data1); + const expected = [ [ false, true, true, false ], [ false, false, false, false ] ]; + assert.deepEqual(df.gt(sf, { axis: 0 }).values, expected); + }); + + }); + + describe("le", function () { + it("Return Less than or Equal to of series and other series (element-wise)", function () { + const data1 = [ [ 10, 45, 56, 10 ], [ 25, 23, 20, 10 ] ]; + const data2 = [ [ 100, 450, 590, 5 ], [ 25, 2, 0, 10 ] ]; + + const df = new dfd.DataFrame(data1); + const df2 = new dfd.DataFrame(data2); + const expected = [ [ true, true, true, false ], [ true, false, false, true ] ]; + assert.deepEqual(df.le(df2).values, expected); + }); + + it("Return Less than or Equal to of series scalar (element-wise)", function () { + const data1 = [ [ 10, 45, 56, 10 ], [ 25, 23, 30, 10 ] ]; + const sf = new dfd.DataFrame(data1); + const expected = [ [ true, false, false, true ], [ true, true, true, true ] ]; + assert.deepEqual(sf.le(30).values, expected); + }); + + }); + + describe("ge", function () { + it("Return Greater than or Equal to of series and other series (element-wise)", function () { + const data1 = [ [ 10, 45, 56, 10 ], [ 25, 23, 20, 10 ] ]; + const data2 = [ [ 100, 450, 590, 5 ], [ 25, 2, 0, 10 ] ]; + + const df = new dfd.DataFrame(data1); + const df2 = new dfd.DataFrame(data2); + const expected = [ [ false, false, false, true ], [ true, true, true, true ] ]; + assert.deepEqual(df.ge(df2).values, expected); + }); + + it("Return Greater than or Equal to of series scalar (element-wise)", function () { + const data1 = [ [ 10, 45, 56, 10 ], [ 25, 23, 30, 10 ] ]; + const sf = new dfd.DataFrame(data1); + const expected = [ [ false, true, true, false ], [ false, false, true, false ] ]; + assert.deepEqual(sf.ge(30).values, expected); + }); + + }); + + describe("ne", function () { + it("Return Not Equal to of series and other series (element-wise)", function () { + const data1 = [ [ 10, 45, 56, 10 ], [ 25, 23, 20, 10 ] ]; + const data2 = [ [ 100, 450, 590, 5 ], [ 25, 2, 0, 10 ] ]; + + const df = new dfd.DataFrame(data1); + const df2 = new dfd.DataFrame(data2); + const expected = [ [ true, true, true, true ], [ false, true, true, false ] ]; + assert.deepEqual(df.ne(df2).values, expected); + }); + + it("Return Not Equal to of series scalar (element-wise)", function () { + const data1 = [ [ 10, 45, 56, 10 ], [ 25, 23, 30, 10 ] ]; + const sf = new dfd.DataFrame(data1); + const expected = [ [ true, true, true, true ], [ true, true, false, true ] ]; + assert.deepEqual(sf.ne(30).values, expected); + }); + it("Return Less than of Array and DataFrame along axis 1 (column)", function () { + const data = { + 'cost': [ 250, 150, 100 ], + 'revenue': [ 100, 250, 300 ] + }; + const sf = [ 100, 300 ]; + const df = new dfd.DataFrame(data, { index: [ 'A', 'B', 'C' ] }); + const expected = [ [ true, true ], [ true, true ], [ false, false ] ]; + const result = df.ne(sf, { axis: 1 }); + assert.deepEqual(result.values, expected); + }); + + }); + + describe("eq", function () { + it("Return Equal to of DataFrame and other DataFrame (element-wise)", function () { + const data1 = [ [ 10, 45, 56, 10 ], [ 25, 23, 20, 10 ] ]; + const data2 = [ [ 100, 450, 590, 5 ], [ 25, 2, 0, 10 ] ]; + + const df = new dfd.DataFrame(data1); + const df2 = new dfd.DataFrame(data2); + const expected = [ [ false, false, false, false ], [ true, false, false, true ] ]; + assert.deepEqual(df.eq(df2).values, expected); + }); + + it("Return Equal to of DataFrame with scalar (element-wise)", function () { + const data1 = [ [ 10, 45, 56, 10 ], [ 25, 23, 30, 10 ] ]; + const sf = new dfd.DataFrame(data1); + const expected = [ [ false, false, false, false ], [ false, false, true, false ] ]; + assert.deepEqual(sf.eq(30).values, expected); + }); + it("Return Equal to of series and DataFrame scalar along axis 1", function () { + const data1 = { "Col1": [ 10, 45, 56, 10 ], "Col2": [ 23, 20, 10, 10 ] }; + const sf = new dfd.Series([ 10, 23 ]); + const df = new dfd.DataFrame(data1); + const expected = [ [ true, true ], [ false, false ], [ false, false ], [ true, false ] ]; + assert.deepEqual(df.eq(sf, { axis: 1 }).values, expected); + }); + it("Return Less than of Array and DataFrame along axis 0", function () { + const data = { + 'cost': [ 250, 150, 100 ], + 'revenue': [ 100, 250, 300 ] + }; + const sf = [ 250, 250, 100 ]; + const df = new dfd.DataFrame(data, { index: [ 'A', 'B', 'C' ] }); + const expected = [ [ true, false ], [ false, true ], [ true, false ] ]; + const result = df.eq(sf, { axis: 0 }); + assert.deepEqual(result.values, expected); + }); + + }); + + describe("replace", function () { + it("Replace across all columns", function () { + const data1 = [ [ 10, 45, 56, 25 ], [ 23, 20, 10, 24 ] ]; + const df = new dfd.DataFrame(data1); + const expected = [ [ -999, 45, 56, 25 ], [ 23, 20, -999, 24 ] ]; + const df_rep = df.replace(10, -999); + assert.deepEqual(df_rep.values, expected); + }); + + it("Replace accross all columns inplace", function () { + const data1 = [ [ "A", "A", "A", "B" ], [ "B", "C", "C", "D" ] ]; + const df = new dfd.DataFrame(data1); + const expected = [ [ "boy", "boy", "boy", "B" ], [ "B", "C", "C", "D" ] ]; + df.replace("A", "boy", { inplace: true }); + assert.deepEqual(df.values, expected); + }); + it("Replace values in specified two column(s)", function () { + const data1 = [ [ "A", "A", 1, "girl" ], + [ "B", "A", 2, "woman" ], + [ "A", "B", 3, "man" ] ]; + const df = new dfd.DataFrame(data1, { columns: [ "col1", "col2", "col3", "col4" ] }); + const expected = [ [ "boy", "boy", 1, "girl" ], + [ "B", "boy", 2, "woman" ], + [ "boy", "B", 3, "man" ] ]; + const df_rep = df.replace("A", "boy", { columns: [ "col1", "col2" ] }); + assert.deepEqual(df_rep.values, expected); + }); + + it("Replace values in specified single column(s)", function () { + const data1 = [ [ 2, "A", 1, "girl" ], + [ 3, "A", 2, "woman" ], + [ 4, "B", 3, "man" ] ]; + const df = new dfd.DataFrame(data1, { columns: [ "col1", "col2", "col3", "col4" ] }); + const expected = [ [ 2, "A", 1, "girl" ], + [ 100, "A", 2, "woman" ], + [ 4, "B", 3, "man" ] ]; + const df_rep = df.replace(3, 100, { columns: [ "col1" ] }); + assert.deepEqual(df_rep.values, expected); + assert.notDeepEqual(df_rep, df); + assert.notDeepEqual(df_rep.values, df.values); + }); + + it("Replace values in specified two column(s) inplace", function () { + const data1 = [ [ "A", "A", 1, "girl" ], + [ "B", "A", 2, "woman" ], + [ "A", "B", 3, "man" ] ]; + const df = new dfd.DataFrame(data1, { columns: [ "col1", "col2", "col3", "col4" ] }); + const expected = [ [ "boy", "boy", 1, "girl" ], + [ "B", "boy", 2, "woman" ], + [ "boy", "B", 3, "man" ] ]; + df.replace("A", "boy", { columns: [ "col1", "col2" ], inplace: true }); + assert.deepEqual(df.values, expected); + }); + + it("Replace values in specified single column(s) inplace", function () { + const data1 = [ [ 2, "A", 1, "girl" ], + [ 3, "A", 2, "woman" ], + [ 4, "B", 3, "man" ] ]; + const df = new dfd.DataFrame(data1, { columns: [ "col1", "col2", "col3", "col4" ] }); + const expected = [ [ 2, "A", 1, "girl" ], + [ 100, "A", 2, "woman" ], + [ 4, "B", 3, "man" ] ]; + df.replace(3, 100, { columns: [ "col1" ], inplace: true }); + assert.deepEqual(df.values, expected); + }); + + }); + + describe("sum", function () { + it("Sum values of a DataFrame by Default axis column (axis=1)", function () { + const data1 = [ [ 30, 40, 3.1 ], + [ 5, 5, 5.1 ], + [ 5, 5, 3.2 ] ]; + const sf = new dfd.DataFrame(data1); + const res = [ 73.1, 15.1, 13.2 ]; + assert.deepEqual(sf.sum().values, res); + }); + it("Sum values of a DataFrame along row axis (axis=0)", function () { + const data1 = [ [ 30, 40, 3.1 ], + [ 5, 5, 5.1 ], + [ 5, 5, 3.2 ] ]; + const df = new dfd.DataFrame(data1); + const res = [ 40, 50, 11.399999999999999 ]; + assert.deepEqual(df.sum({ axis: 0 }).values, res); + }); + it("Sum values of a mixed DataFrame along row axis (axis=0)", function () { + const data1 = [ [ 30, 40, 3.1, true ], + [ 5, 5, 5.1, true ], + [ 5, 5, 3.2, true ] ]; + const df = new dfd.DataFrame(data1); + const res = [ 40, 50, 11.399999999999999, 3 ]; + assert.deepEqual(df.sum({ axis: 0 }).values, res); + }); + it("Sum values of a boolean DataFrame along row axis (axis=0)", function () { + const data1 = [ [ true, true, false, true ], + [ false, false, false, false ], + [ false, true, true, false ] ]; + const df = new dfd.DataFrame(data1); + const res = [ 1, 2, 1, 1 ]; + assert.deepEqual(df.sum({ axis: 0 }).values, res); + }); + it("Sum values of a boolean DataFrame along default column axis (axis=1)", function () { + const data1 = [ [ true, true, false, true ], + [ false, false, false, false ], + [ false, true, true, false ] ]; + const df = new dfd.DataFrame(data1); + const res = [ 3, 0, 2 ]; + assert.deepEqual(df.sum().values, res); + }); + it("Sum values of a df with missing values", function () { + const data1 = [ [ 11, 20, 3 ], [ null, 15, 6 ], [ 2, 30, 40 ], [ 2, 89, 78 ] ]; + const df = new dfd.DataFrame(data1); + const res = [ 34, 21, 72, 169 ]; + assert.deepEqual(df.sum({ axis: 1 }).values, res); + }); + + }); + + describe("abs", function () { + it("Returns the absolute values in DataFrame of ints", function () { + const data1 = [ [ -10, 45, 56, 10 ], [ -25, 23, 20, -10 ] ]; + const df = new dfd.DataFrame(data1); + const expected = [ [ 10, 45, 56, 10 ], [ 25, 23, 20, 10 ] ]; + assert.deepEqual(df.abs().values, expected); + }); + + it("Returns the absolute values in mixed DataFrame", function () { + const data1 = [ [ -10, -45.1, 56, 10 ], [ -25, -23.2, 20, -10 ] ]; + const df = new dfd.DataFrame(data1); + const expected = [ [ 10, 45.1, 56, 10 ], [ 25, 23.2, 20, 10 ] ]; + assert.deepEqual(df.abs().values, expected); + }); + }); + + describe("T", function () { + it("Return the Transpose of a DataFrame", function () { + const data1 = [ [ 10, 45, 56, 10 ], + [ 25, 23, 20, 10 ] ]; + + const cols = [ "a", "b", "c", "d" ]; + const df = new dfd.DataFrame(data1, { columns: cols }); + const df_trans = df.T; + const expected_vals = [ [ 10, 25 ], [ 45, 23 ], [ 56, 20 ], [ 10, 10 ] ]; + const expected_index = cols; + const expected_col_names = [ "0", "1" ]; + assert.deepEqual(df_trans.index, expected_index); + assert.deepEqual(df_trans.values, expected_vals); + assert.deepEqual(df_trans.columns, expected_col_names); + + }); + }); + + describe("transpose", function () { + it("Return the Transpose of a DataFrame", function () { + const data1 = [ [ 10, 45, 56, 10 ], + [ 25, 23, 20, 10 ] ]; + + const cols = [ "a", "b", "c", "d" ]; + const df = new dfd.DataFrame(data1, { columns: cols }); + const df_trans = df.T; + const expected_vals = [ [ 10, 25 ], [ 45, 23 ], [ 56, 20 ], [ 10, 10 ] ]; + const expected_index = cols; + const expected_col_names = [ "0", "1" ]; + assert.deepEqual(df_trans.index, expected_index); + assert.deepEqual(df_trans.values, expected_vals); + assert.deepEqual(df_trans.columns, expected_col_names); + + }); + it("Transpose a DataFrame inplace", function () { + const data1 = [ [ 10, 45, 56, 10 ], + [ 25, 23, 20, 10 ] ]; + + const cols = [ "a", "b", "c", "d" ]; + const df = new dfd.DataFrame(data1, { columns: cols }); + df.transpose({ inplace: true }); + const expected_vals = [ [ 10, 25 ], [ 45, 23 ], [ 56, 20 ], [ 10, 10 ] ]; + const expected_index = cols; + const expected_col_names = [ "0", "1" ]; + assert.deepEqual(df.index, expected_index); + assert.deepEqual(df.values, expected_vals); + assert.deepEqual(df.columns, expected_col_names); + + }); + }); + + + describe("asType", function () { + it("set type of float column to int", function () { + const data = { + "A": [ -20.1, 30, 47.3, -20 ], + "B": [ 34, -4, 5, 6 ], + "C": [ 20.1, -20.23, 30.3, 40.11 ], + "D": [ "a", "b", "c", "c" ] + }; + const df = new dfd.DataFrame(data); + const dfNew = df.asType("A", "int32"); + dfNew["D"] = [ "a", "b", "c", "F" ]; + assert.deepEqual(dfNew.dtypes, [ 'int32', 'int32', 'float32', 'string' ]); + assert.deepEqual(dfNew['A'].values, [ -20, 30, 47, -20 ]); + assert.notDeepEqual(dfNew["D"].values, df["D"].values); + + }); + it("set type of int column to float", function () { + const data = { + "A": [ -20.1, 30, 47.3, -20 ], + "B": [ 34, -4, 5, 6 ], + "C": [ 20.1, -20.23, 30.3, 40.11 ], + "D": [ "a", "b", "c", "c" ] + }; + const df = new dfd.DataFrame(data); + const dfNew = df.asType("B", "float32"); + + assert.deepEqual(dfNew.dtypes, [ 'float32', 'float32', 'float32', 'string' ]); + assert.deepEqual(dfNew['B'].values, [ 34, -4, 5, 6 ]); + + }); + it("set type of string column to int", function () { + const data = { + "A": [ -20.1, 30, 47.3, -20 ], + "B": [ 34, -4, 5, 6 ], + "C": [ 20.1, -20.23, 30.3, 40.11 ], + "D": [ "20.1", "21", "23.4", "50.78" ] + }; + const df = new dfd.DataFrame(data); + const dfNew = df.asType("D", "int32"); + + assert.deepEqual(dfNew.dtypes, [ 'float32', 'int32', 'float32', 'int32' ]); + assert.deepEqual(dfNew['D'].values, [ 20, 21, 23, 50 ]); + + }); + it("set type of string column to float", function () { + const data = { + "A": [ -20.1, 30, 47.3, -20 ], + "B": [ 34, -4, 5, 6 ], + "C": [ 20.1, -20.23, 30.3, 40.11 ], + "D": [ "20.1", "21", "23.4", "50.78" ] + }; + const df = new dfd.DataFrame(data); + const dfNew = df.asType("D", "float32"); + + assert.deepEqual(dfNew.dtypes, [ 'float32', 'int32', 'float32', 'float32' ]); + assert.deepEqual(dfNew['D'].values, [ 20.1, 21, 23.4, 50.78 ]); + + }); + }); + + describe("nUnique", function () { + it("Returns the number of unique elements along axis 1", function () { + const data = { + "A": [ -20, 30, 47.3, -20, 2 ], + "B": [ 34, -4, 5, 6, 2 ], + "C": [ 20, 20, 30, 30, 2 ], + "D": [ "a", "b", "c", "c", "d" ] + }; + + const df = new dfd.DataFrame(data); + const res = [ 4, 4, 4, 4, 2 ]; + assert.deepEqual(df.nUnique(1).values, res); + + }); + it("Returns the number of unique elements along axis 0", function () { + const data = { + "A": [ 20, 30, 47.3, 30 ], + "B": [ 34, -4, 5, 30 ], + "C": [ 20, 20, 30, 30 ], + "D": [ "a", "b", "c", "c" ] + }; + + const df = new dfd.DataFrame(data); + const res = [ 3, 4, 2, 3 ]; + assert.deepEqual(df.nUnique(0).values, res); + + }); + + }); + + + describe("rename", function () { + it("Rename columns along axis 1", function () { + const data = { + "A": [ -20, 30, 47.3, -20 ], + "B": [ 34, -4, 5, 6 ], + "C": [ 20, 20, 30, 30 ] + }; + + const df = new dfd.DataFrame(data); + const dfNew = df.rename({ "A": "a1", "B": "b1" }); + const res = [ "a1", "b1", "C" ]; + assert.deepEqual(dfNew.columns, res); + + }); + it("confirms original column name is not modified along axis 1", function () { + const data = { + "A": [ -20, 30, 47.3, -20 ], + "B": [ 34, -4, 5, 6 ], + "D": [ "a", "b", "c", "c" ] + }; + + const df = new dfd.DataFrame(data); + const dfNew = df.rename({ "A": "a1", "B": "b1" }, { axis: 1 }); + const res = [ "A", "B", "D" ]; + assert.deepEqual(df.columns, res); + + }); + it("Rename columns along axis 1 inplace", function () { + const data = { + "A": [ -20, 30, 47.3, -20 ], + "B": [ 34, -4, 5, 6 ], + "C": [ 20, 20, 30, 30 ] + }; + + const df = new dfd.DataFrame(data); + df.rename({ "A": "a1", "B": "b1" }, { inplace: true }); + const res = [ "a1", "b1", "C" ]; + assert.deepEqual(df.columns, res); + + }); + it("Rename string index along axis 0", function () { + const data = { + "A": [ -20, 30, 47.3, -20 ], + "B": [ 34, -4, 5, 6 ], + "C": [ 20, 20, 30, 30 ] + }; + + const df = new dfd.DataFrame(data, { index: [ "a", "b", "c", "d" ] }); + const dfNew = df.rename({ "a": 0, "b": 1 }, { axis: 0 }); + const res = [ 0, 1, "c", "d" ]; + assert.deepEqual(dfNew.index, res); + + }); + it("Rename string index along axis 0 inplace", function () { + const data = { + "A": [ -20, 30, 47.3, -20 ], + "B": [ 34, -4, 5, 6 ], + "C": [ 20, 20, 30, 30 ] + }; + + const df = new dfd.DataFrame(data, { index: [ "a", "b", "c", "d" ] }); + df.rename({ "a": 0, "b": 1 }, { axis: 0, inplace: true }); + const res = [ 0, 1, "c", "d" ]; + assert.deepEqual(df.index, res); + + }); + + it("Get new column via subseting works after rename (inplace)", function () { + let data = { + "A": [ -20, 30, 47.3 ], + "B": [ 34, -4, 5 ], + "C": [ 20, 2, 30 ] + }; + let df = new dfd.DataFrame(data); + df.rename({ "A": "new_name" }, { inplace: true }); + df["new_name"].print(); + assert.deepEqual(df["new_name"].values, data["A"]); + }); + + it("Get new column via subseting works after rename (not-inplace)", function () { + let data = { + "A": [ -20, 30, 47.3 ], + "B": [ 34, -4, 5 ], + "C": [ 20, 2, 30 ] + }; + let df = new dfd.DataFrame(data); + let new_df = df.rename({ "A": "new_name" }); + assert.deepEqual(new_df["new_name"].values, data["A"]); + }); + }); + + describe("sortIndex", function () { + + it("sort index in ascending order", function () { + const data = [ [ 0, 2, 4, "b" ], + [ 360, 180, 360, "a" ], + [ 2, 4, 6, "c" ] ]; + + const df = new dfd.DataFrame(data, { "columns": [ "col1", "col2", "col3", "col4" ], index: [ "b", "a", "c" ] }); + const df2 = df.sortIndex(); + const rslt = [ [ 360, 180, 360, 'a' ], [ 0, 2, 4, 'b' ], [ 2, 4, 6, 'c' ] ]; + + assert.deepEqual(df2.values, rslt); + }); + it("sort index in ascending order - inplace", function () { + const data = [ [ 0, 2, 4, "b" ], + [ 360, 180, 360, "a" ], + [ 2, 4, 6, "c" ] ]; + + const df = new dfd.DataFrame(data, { "columns": [ "col1", "col2", "col3", "col4" ], index: [ "b", "a", "c" ] }); + df.sortIndex({ inplace: true }); + const rslt = [ [ 360, 180, 360, 'a' ], [ 0, 2, 4, 'b' ], [ 2, 4, 6, 'c' ] ]; + assert.deepEqual(df.values, rslt); + }); + it("sort index in descending order", function () { + const data = [ [ 0, 2, 4, "b" ], + [ 360, 180, 360, "a" ], + [ 2, 4, 6, "c" ] ]; + + const df = new dfd.DataFrame(data, { "columns": [ "col1", "col2", "col3", "col4" ], index: [ "b", "a", "c" ] }); + const df2 = df.sortIndex({ ascending: false }); + const rslt = [ [ 2, 4, 6, 'c' ], [ 0, 2, 4, 'b' ], [ 360, 180, 360, 'a' ] ]; + + assert.deepEqual(df2.values, rslt); + }); + it("sort index in descending order with inplace set to true", function () { + const data = [ [ 0, 2, 4, "b" ], + [ 360, 180, 360, "a" ], + [ 2, 4, 6, "c" ] ]; + + const df = new dfd.DataFrame(data, { "columns": [ "col1", "col2", "col3", "col4" ], index: [ 4, 2, 5 ] }); + df.sortIndex({ ascending: false, inplace: true }); + const rslt = [ [ 2, 4, 6, 'c' ], [ 0, 2, 4, 'b' ], [ 360, 180, 360, 'a' ] ]; + assert.deepEqual(df.values, rslt); + }); + + it("sort index in descending order and retains index", function () { + let data = [ [ 0, 2, 4, "b" ], + [ 360, 180, 360, "a" ], + [ 2, 4, 6, "c" ] ]; + + let df = new dfd.DataFrame(data, { "columns": [ "col1", "col2", "col3", "col4" ], index: [ "b", "a", "c" ] }); + let df2 = df.sortIndex({ ascending: false }); + let rslt = [ "c", "b", "a" ]; + + assert.deepEqual(df2.index, rslt); + }); + }); + + describe("append", function () { + + it("Append works for an array", function () { + const data = [ [ 0, 2, 4, "b" ], + [ 360, 180, 360, "a" ], + [ 2, 4, 6, "c" ] ]; + + const df = new dfd.DataFrame(data); + const expected_val = [ [ 0, 2, 4, "b" ], + [ 360, 180, 360, "a" ], + [ 2, 4, 6, "c" ], + [ 20, 40, 60, "d" ] ]; + + const newDf = df.append([ 20, 40, 60, "d" ], [ "n1" ]); + assert.deepEqual(newDf.values, expected_val); + assert.deepEqual(newDf.index, [ 0, 1, 2, "n1" ]); + }); + it("Append works for an array of arrays", function () { + const data = [ [ 0, 2, 4, "b" ], + [ 360, 180, 360, "a" ], + [ 2, 4, 6, "c" ] ]; + + const df = new dfd.DataFrame(data); + const expected_val = [ [ 0, 2, 4, "b" ], + [ 360, 180, 360, "a" ], + [ 2, 4, 6, "c" ], + [ 20, 40, 60, "d" ], + [ 21, 42, 61, "y" ] ]; + + const newDf = df.append([ [ 20, 40, 60, "d" ], [ 21, 42, 61, "y" ] ], [ "n1", "n2" ]); + assert.deepEqual(newDf.values, expected_val); + assert.deepEqual(newDf.index, [ 0, 1, 2, "n1", "n2" ]); + }); + + it("Append works for DataFrame", function () { + const data = [ [ 0, 2, 4, "b" ], + [ 360, 180, 360, "a" ], + [ 2, 4, 6, "c" ] ]; + + const df = new dfd.DataFrame(data, { "columns": [ "col1", "col2", "col3", "col4" ] }); + const df2 = new dfd.DataFrame([ [ 20, 40, 60, "d" ] ], { "columns": [ "col1", "col2", "col3", "col4" ] }); + + const expected_val = [ [ 0, 2, 4, "b" ], + [ 360, 180, 360, "a" ], + [ 2, 4, 6, "c" ], + [ 20, 40, 60, "d" ] ]; + + const newDf = df.append(df2, [ "n1" ]); + assert.deepEqual(newDf.values, expected_val); + + }); + it("Append works for Series", function () { + const data = [ [ 0, 2, 4, "b" ], + [ 360, 180, 360, "a" ], + [ 2, 4, 6, "c" ] ]; + + const df = new dfd.DataFrame(data, { "columns": [ "col1", "col2", "col3", "col4" ] }); + const sf = new dfd.Series([ 20, 40, 60, "d" ]); + + const expected_val = [ [ 0, 2, 4, "b" ], + [ 360, 180, 360, "a" ], + [ 2, 4, 6, "c" ], + [ 20, 40, 60, "d" ] ]; + + const newDf = df.append(sf, [ "n1" ]); + assert.deepEqual(newDf.values, expected_val); + + }); + }); + + describe("cumProd", function () { + + it("cumProd works for axis 1", function () { + const data = [ [ 2, 1, 2, 3 ], [ 3, 4, 11, 9 ], [ 5, 6, 7, 8 ] ]; + const column = [ "A", "B", "C", "D" ]; + const df = new dfd.DataFrame(data, { columns: column }); + const rslt = [ [ 2, 2, 4, 12 ], + [ 3, 12, 132, 1188 ], + [ 5, 30, 210, 1680 ] ]; + + const newDf = df.cumProd(); + assert.deepEqual(newDf.values, rslt); + }); + it("cumProd axis 0 works", function () { + const data = [ [ 2, 1, 2, 3 ], [ 3, 4, 11, 9 ], [ 5, 6, 7, 8 ] ]; + const column = [ "A", "B", "C", "D" ]; + const df = new dfd.DataFrame(data, { columns: column }); + const rslt = [ [ 2, 1, 2, 3 ], + [ 6, 4, 22, 27 ], + [ 30, 24, 154, 216 ] ]; + + assert.deepEqual(df.cumProd({ axis: 0 }).values, rslt); + }); + + it("cumProd works for axis 1 inplace", function () { + const data = [ [ 2, 1, 2, 3 ], [ 3, 4, 11, 9 ], [ 5, 6, 7, 8 ] ]; + const column = [ "A", "B", "C", "D" ]; + const df = new dfd.DataFrame(data, { columns: column }); + const rslt = [ [ 2, 2, 4, 12 ], + [ 3, 12, 132, 1188 ], + [ 5, 30, 210, 1680 ] ]; + + df.cumProd({ inplace: true }); + assert.deepEqual(df.values, rslt); + }); + it("cumProd axis 0 works inplace", function () { + const data = [ [ 2, 1, 2, 3 ], [ 3, 4, 11, 9 ], [ 5, 6, 7, 8 ] ]; + const column = [ "A", "B", "C", "D" ]; + const df = new dfd.DataFrame(data, { columns: column }); + const rslt = [ [ 2, 1, 2, 3 ], + [ 6, 4, 22, 27 ], + [ 30, 24, 154, 216 ] ]; + df.cumProd({ axis: 0, inplace: true }); + assert.deepEqual(df.values, rslt); + }); + }); + + describe("cumSum", function () { + + it("cumSum works for axis 1", function () { + const data = [ [ 2, 1, 2, 3 ], [ 3, 4, 11, 9 ], [ 5, 6, 7, 8 ] ]; + const column = [ "A", "B", "C", "D" ]; + const df = new dfd.DataFrame(data, { columns: column }); + const rslt = [ [ 2, 3, 5, 8 ], + [ 3, 7, 18, 27 ], + [ 5, 11, 18, 26 ] ]; + + const newDf = df.cumSum(); + assert.deepEqual(newDf.values, rslt); + }); + it("cumSum axis 0 works", function () { + const data = [ [ 2, 1, 2, 3 ], [ 3, 4, 11, 9 ], [ 5, 6, 7, 8 ] ]; + const column = [ "A", "B", "C", "D" ]; + const df = new dfd.DataFrame(data, { columns: column }); + const rslt = [ [ 2, 1, 2, 3 ], + [ 5, 5, 13, 12 ], + [ 10, 11, 20, 20 ] ]; + + assert.deepEqual(df.cumSum({ axis: 0 }).values, rslt); + }); + + it("cumSum works for axis 1 inplace", function () { + const data = [ [ 2, 1, 2, 3 ], [ 3, 4, 11, 9 ], [ 5, 6, 7, 8 ] ]; + const column = [ "A", "B", "C", "D" ]; + const df = new dfd.DataFrame(data, { columns: column }); + const rslt = [ [ 2, 3, 5, 8 ], + [ 3, 7, 18, 27 ], + [ 5, 11, 18, 26 ] ]; + + df.cumSum({ inplace: true }); + assert.deepEqual(df.values, rslt); + }); + it("cumSum axis 0 works inplace", function () { + const data = [ [ 2, 1, 2, 3 ], [ 3, 4, 11, 9 ], [ 5, 6, 7, 8 ] ]; + const column = [ "A", "B", "C", "D" ]; + const df = new dfd.DataFrame(data, { columns: column }); + const rslt = [ [ 2, 1, 2, 3 ], + [ 5, 5, 13, 12 ], + [ 10, 11, 20, 20 ] ]; + df.cumSum({ axis: 0, inplace: true }); + assert.deepEqual(df.values, rslt); + }); + }); + + describe("cumMin", function () { + + it("cumMin works for axis 1", function () { + const data = [ [ 2, 1, 2, 3 ], [ 3, 4, 11, 9 ], [ 5, 6, 7, 8 ] ]; + const column = [ "A", "B", "C", "D" ]; + const df = new dfd.DataFrame(data, { columns: column }); + const rslt = [ [ 2, 1, 1, 1 ], + [ 3, 3, 3, 3 ], + [ 5, 5, 5, 5 ] ]; + + const newDf = df.cumMin(); + assert.deepEqual(newDf.values, rslt); + }); + it("cumMin axis 0 works", function () { + const data = [ [ 2, 1, 2, 3 ], [ 3, 4, 11, 9 ], [ 5, 6, 7, 8 ] ]; + const column = [ "A", "B", "C", "D" ]; + const df = new dfd.DataFrame(data, { columns: column }); + const rslt = [ [ 2, 1, 2, 3 ], + [ 2, 1, 2, 3 ], + [ 2, 1, 2, 3 ] ]; + + assert.deepEqual(df.cumMin({ axis: 0 }).values, rslt); + }); + + it("cumMin works for axis 1 inplace", function () { + const data = [ [ 2, 1, 2, 3 ], [ 3, 4, 11, 9 ], [ 5, 6, 7, 8 ] ]; + const column = [ "A", "B", "C", "D" ]; + const df = new dfd.DataFrame(data, { columns: column }); + const rslt = [ [ 2, 1, 1, 1 ], + [ 3, 3, 3, 3 ], + [ 5, 5, 5, 5 ] ]; + + df.cumMin({ inplace: true }); + assert.deepEqual(df.values, rslt); + }); + it("cumMin axis 0 works inplace", function () { + const data = [ [ 2, 1, 2, 3 ], [ 3, 4, 11, 9 ], [ 5, 6, 7, 8 ] ]; + const column = [ "A", "B", "C", "D" ]; + const df = new dfd.DataFrame(data, { columns: column }); + const rslt = [ [ 2, 1, 2, 3 ], + [ 2, 1, 2, 3 ], + [ 2, 1, 2, 3 ] ]; + df.cumMin({ axis: 0, inplace: true }); + assert.deepEqual(df.values, rslt); + }); + }); + + describe("cumMax", function () { + + it("cumMax works for axis 1", function () { + const data = [ [ 2, 1, 2, 3 ], [ 3, 4, 11, 9 ], [ 5, 6, 7, 8 ] ]; + const column = [ "A", "B", "C", "D" ]; + const df = new dfd.DataFrame(data, { columns: column }); + const rslt = [ [ 2, 2, 2, 3 ], + [ 3, 4, 11, 11 ], + [ 5, 6, 7, 8 ] ]; + + const newDf = df.cumMax(); + assert.deepEqual(newDf.values, rslt); + }); + it("cumMax axis 0 works", function () { + const data = [ [ 2, 1, 2, 3 ], [ 3, 4, 11, 9 ], [ 5, 6, 7, 8 ] ]; + const column = [ "A", "B", "C", "D" ]; + const df = new dfd.DataFrame(data, { columns: column }); + const rslt = [ [ 2, 1, 2, 3 ], + [ 3, 4, 11, 9 ], + [ 5, 6, 11, 9 ] ]; + + assert.deepEqual(df.cumMax({ axis: 0 }).values, rslt); + }); + + it("cumMax works for axis 1 inplace", function () { + const data = [ [ 2, 1, 2, 3 ], [ 3, 4, 11, 9 ], [ 5, 6, 7, 8 ] ]; + const column = [ "A", "B", "C", "D" ]; + const df = new dfd.DataFrame(data, { columns: column }); + const rslt = [ [ 2, 2, 2, 3 ], + [ 3, 4, 11, 11 ], + [ 5, 6, 7, 8 ] ]; + + df.cumMax({ inplace: true }); + assert.deepEqual(df.values, rslt); + }); + it("cumMax axis 0 works inplace", function () { + const data = [ [ 2, 1, 2, 3 ], [ 3, 4, 11, 9 ], [ 5, 6, 7, 8 ] ]; + const column = [ "A", "B", "C", "D" ]; + const df = new dfd.DataFrame(data, { columns: column }); + const rslt = [ [ 2, 1, 2, 3 ], + [ 3, 4, 11, 9 ], + [ 5, 6, 11, 9 ] ]; + df.cumMax({ axis: 0, inplace: true }); + assert.deepEqual(df.values, rslt); + }); + }); + + + describe("query", function () { + + it("Get the DataFrame containing rows with the filtered column", function () { + const data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols }); + const query_df = df.query(df["B"].ge(5)); + const query_data = [ [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; + assert.deepEqual(query_df.values, query_data); + }); + it("Get the Dataframe containing rows with the filtered column in String values", function () { + const data = { "Abs": [ 20, 30, 47 ], "Count": [ 34, 4, 5 ], "country code": [ "NG", "FR", "GH" ] }; + const cols = [ "Abs", "Count", "country code" ]; + const df = new dfd.DataFrame(data, { columns: cols }); + const query_df = df.query(df["country code"].str.includes("NG")); + + const query_data = [ [ 20, 34, "NG" ] ]; + assert.deepEqual(query_df.values, query_data); + }); + it("Get the Dataframe containing rows with the filtered column in String values inplace", function () { + const data = { "Abs": [ 20, 30, 47 ], "Count": [ 34, 4, 5 ], "country code": [ "NG", "FR", "GH" ] }; + const cols = [ "Abs", "Count", "country code" ]; + const df = new dfd.DataFrame(data, { columns: cols }); + df.query(df["country code"].eq("NG"), { inplace: true }); + const query_data = [ [ 20, 34, "NG" ] ]; + assert.deepEqual(df.values, query_data); + }); + it("Confirms that query index are updated", function () { + + const data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols }); + const query_df = df.query(df["B"].ge(5)); + assert.deepEqual(query_df.index, [ 1, 2, 3 ]); + }); + + it("Confirms chaining boolean queries work", function () { + + const data = [ [ 1, 2, 3 ], + [ 4, 5, 60 ], + [ 20, 30, 4 ], + [ 39, 89, 7 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols }); + + const query_df = df.query( + df["B"].ge(5).and(df["C"].lt(10)) + ); + const query_data = [ [ 20, 30, 4 ], [ 39, 89, 7 ] ]; + assert.deepEqual(query_df.values, query_data); + assert.deepEqual(query_df.index, [ 2, 3 ]); + }); + + it("Confirms chaining boolean queries work and returns empty DF", function () { + + const data = [ [ 1, 2, 3 ], + [ 4, 5, 60 ], + [ 20, 30, 40 ], + [ 39, 89, 70 ] ]; + const cols = [ "A", "B", "C" ]; + const df = new dfd.DataFrame(data, { columns: cols }); + + const query_df = df.query( + df["B"].ge(5).and(df["C"].lt(10)) + ); + assert.deepEqual(query_df.values, []); + assert.deepEqual(query_df.index, []); + }); + + it("Confirms that column names are not changed", function () { + + let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; + let cols = [ "A", "B", "C" ]; + let df = new dfd.DataFrame(data, { columns: cols }); + let df_query = df.query( df["B"].ge(5)); + assert.deepEqual(df_query.index, [ 1, 2, 3 ]); + assert.deepEqual(df_query.columns, [ "A", "B", "C" ]); + }); + + }); + + describe("cTypes", function () { + + it("Returns the correct dtype in a DataFrame", function () { + const data = [ [ "boy", 1.2, 2, 3 ], [ "girl", 4.32, 11, 9 ], [ '4', 6.1, 7, 8 ] ]; + const column = [ "A", "B", "C", "D" ]; + const df = new dfd.DataFrame(data, { columns: column }); + const rslt = [ "string", "float32", "int32", "int32" ]; + assert.deepEqual(df.ctypes.values, rslt); + }); + }); + + // describe("IO outputs", function () { + // it("toExcel works", async function () { + // const data = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] + // const df = new dfd.DataFrame(data, { columns: ["a", "b", "c", "d"] }); + + // const filePath = path.join(process.cwd(), "test", "samples", "test.xlsx"); + // df.toExcel({ filePath }) + + // const dfNew = await readExcel(filePath, {}); + // assert.equal(fs.existsSync(filePath), true) + // assert.deepEqual(dfNew.columns, [ + // 'a', + // 'b', + // 'c', + // 'd', + // ]); + // assert.deepEqual(dfNew.dtypes, [ + // 'int32', 'int32', + // 'int32', 'int32', + // ]); + // assert.deepEqual(dfNew.shape, [3, 4]) + // }); + + // it("toCSV works for specified seperator", async function () { + // const data = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] + // let df = new dfd.DataFrame(data, { columns: ["a", "b", "c", "d"] }); + // assert.deepEqual(df.toCSV({ sep: "+" }), `a+b+c+d\n1+2+3+4\n5+6+7+8\n9+10+11+12\n`); + // }); + // it("toCSV write to local file works", async function () { + // const data = [[1, 2, 3, "4"], [5, 6, 7, "8"], [9, 10, 11, "12"]] + // let df = new dfd.DataFrame(data, { columns: ["a", "b", "c", "d"] }); + + // const filePath = path.join(process.cwd(), "test", "samples", "test_write.csv"); + + // df.toCSV({ sep: ",", filePath }); + // assert.equal(fs.existsSync(filePath), true); + // }); + // it("toJSON works for row format", async function () { + // const data = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] + // const df = new dfd.DataFrame(data, { columns: ["a", "b", "c", "d"] }); + // const expected = { + // "a": [1, 5, 9], + // "b": [2, 6, 10], + // "c": [3, 7, 11], + // "d": [4, 8, 12], + // } + // const json = df.toJSON({ format: "row" }) + // assert.deepEqual(json, expected); + // }); + // it("toJSON writes file to local path", async function () { + // const data = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] + // const df = new dfd.DataFrame(data, { columns: ["a", "b", "c", "d"] }); + + // const rowfilePath = path.join(process.cwd(), "test", "samples", "test_row_write.json"); + // const colfilePath = path.join(process.cwd(), "test", "samples", "test_col_write.json"); + + // df.toJSON({ format: "row", filePath: rowfilePath }) + // df.toJSON({ format: "column", filePath: colfilePath }) + // assert.equal(fs.existsSync(rowfilePath), true); + // assert.equal(fs.existsSync(colfilePath), true); + // }); + // }) + + describe("getDummies", function () { + it("getDummies works on DataFrame", function () { + + const data = [ [ 1, "dog", 1.0, "fat" ], [ 3, "fog", 2.0, "good" ], [ 4, "gof", 3.0, "best" ] ]; + const columns = [ "A", "B", "C", "d" ]; + const df = new dfd.DataFrame(data, { columns: columns }); + + const df1 = df.getDummies({ prefixSeparator: [ "_", "#" ], columns: [ "A", "d" ], prefix: "test" }); + const expectedColumns = [ 'B', 'C', 'test_1', 'test_3', 'test_4', 'test#fat', 'test#good', 'test#best' ]; + const expected = [ [ 'dog', 1.0, 1, 0, 0, 1, 0, 0 ], + [ 'fog', 2.0, 0, 1, 0, 0, 1, 0 ], + [ 'gof', 3.0, 0, 0, 1, 0, 0, 1 ] ]; + assert.deepEqual(df1.values, expected); + assert.deepEqual(df1.columns, expectedColumns); + + }); + it("Throw error if the prefix specified is not equal to the column specified", function () { + + const data = [ [ 1, "dog", 1.0, "fat" ], [ 3, "fog", 2.0, "good" ], [ 4, "gof", 3.0, "best" ] ]; + const columns = [ "A", "B", "C", "d" ]; + const df = new dfd.DataFrame(data, { columns: columns }); + + assert.throws(function () { df.getDummies({ prefix: [ "fg" ], prefixSeparator: "_", columns: [ "A", "d" ] }); }, Error, + `ParamError: prefix and data array must be of the same length. If you need to use the same prefix, then pass a string param instead. e.g {prefix: "fg"}`); + + }); + it("replace column sepecified with prefix", function () { + + const data = [ [ 1, "dog", 1.0, "fat" ], [ 3, "fog", 2.0, "good" ], [ 4, "gof", 3.0, "best" ] ]; + const columns = [ "A", "B", "C", "d" ]; + const df = new dfd.DataFrame(data, { columns: columns }); + + const df1 = df.getDummies({ prefix: [ "F", "G" ], prefixSeparator: "_", columns: [ "A", "d" ] }); + const expectedColumns = [ + 'B', 'C', + 'F_1', 'F_3', + 'F_4', 'G_fat', + 'G_good', 'G_best' + ]; + + const expected = [ [ 'dog', 1.0, 1, 0, 0, 1, 0, 0 ], + [ 'fog', 2.0, 0, 1, 0, 0, 1, 0 ], + [ 'gof', 3.0, 0, 0, 1, 0, 0, 1 ] ]; + + assert.deepEqual(df1.values, expected); + assert.deepEqual(df1.columns, expectedColumns); + + }); + + it("getDummies auto infers and encode columns with string dtype", function () { + + const data = [ [ 1, "dog", 1.0, "fat" ], [ 3, "fog", 2.0, "good" ], [ 4, "gof", 3.0, "best" ] ]; + const columns = [ "A", "B", "C", "d" ]; + const df = new dfd.DataFrame(data, { columns: columns }); + + const df1 = df.getDummies({ prefixSeparator: "_" }); + const expectedColumns = [ + 'A', 'C', + 'B_dog', 'B_fog', + 'B_gof', 'd_fat', + 'd_good', 'd_best' + ]; + const expected = [ + [ + 1, 1, 1, 0, + 0, 1, 0, 0 + ], + [ + 3, 2, 0, 1, + 0, 0, 1, 0 + ], + [ + 4, 3, 0, 0, + 1, 0, 0, 1 + ] + ]; + assert.deepEqual(df1.values, expected); + assert.deepEqual(df1.columns, expectedColumns); + + }); + + it("should one hot encode all other columns", function () { + + const data = [ [ 1, "dog", 1.0, "fat" ], [ 3, "fog", 2.0, "good" ], [ 4, "gof", 3.0, "best" ] ]; + const columns = [ "A", "B", "C", "d" ]; + const df = new dfd.DataFrame(data, { columns: columns }); + const rslt = [ + [ 1, 'dog', 1, 1, 0, 0 ], + [ 3, 'fog', 2, 0, 1, 0 ], + [ 4, 'gof', 3, 0, 0, 1 ] + ]; + + assert.deepEqual(df.getDummies({ columns: [ "d" ] }).values, rslt); + + }); + }); + + +}); diff --git a/src/danfojs-browser/tests/core/generic.test.js b/src/danfojs-browser/tests/core/generic.test.js new file mode 100644 index 00000000..554d8408 --- /dev/null +++ b/src/danfojs-browser/tests/core/generic.test.js @@ -0,0 +1,421 @@ +/* eslint-disable no-undef */ +const tensor = require('@tensorflow/tfjs').tensor; + +describe("Generic (NDFrame)", function () { + describe("NDframe Created from Array", function () { + it("prints the shape of a 1D array", function () { + let data = [ 1, 2, 3, "Boy", "Girl" ]; + let ndframe = new dfd.NDframe({ data, isSeries: true }); + assert.deepEqual(ndframe.shape, [ 5, 1 ]); + }); + it("prints the default assigned column name in a series", function () { + let data = [ "Boy", 20, 25 ]; + let ndframe = new dfd.NDframe({ data, isSeries: true }); + assert.deepEqual(ndframe.columns, [ "0" ]); + }); + it("prints the assigned column name in a series", function () { + let data = [ "Boy", 20, 25 ]; + let ndframe = new dfd.NDframe({ data, columns: [ "Records" ], isSeries: true }); + assert.deepEqual(ndframe.columns, [ "Records" ]); + }); + it("prints the shape of a 2D array", function () { + let data = [ [ "Boy", 20 ], [ "Girl", 25 ] ]; + let ndframe = new dfd.NDframe({ data, isSeries: false }); + assert.deepEqual(ndframe.shape, [ 2, 2 ]); + }); + it("prints the default assigned column names in 2D frame", function () { + let data = [ [ "Boy", 20 ], [ "Girl", 25 ] ]; + let ndframe = new dfd.NDframe({ data, isSeries: false }); + assert.deepEqual(ndframe.columns, [ "0", "1" ]); + }); + it("prints the assigned column names", function () { + let data = [ [ "Boy", 20 ], [ "Girl", 25 ] ]; + let options = { "columns": [ "Gender", "Age" ], "isSeries": false }; + let ndframe = new dfd.NDframe({ data, ...options }); + assert.deepEqual(ndframe.columns, [ "Gender", "Age" ]); + }); + it("prints the size of a frame", function () { + let data = [ [ "Boy", 20, 1 ], [ "Girl", 25, 3 ] ]; + let options = { "columns": [ "Gender", "Age", "count" ], "isSeries": false }; + let ndframe = new dfd.NDframe({ data, ...options }); + assert.deepEqual(ndframe.size, 6); + }); + it("prints the dimension of a frame", function () { + let data = [ [ "Boy", 20, 1 ], [ "Girl", 25, 3 ] ]; + let options = { "columns": [ "Gender", "Age", "count" ], "isSeries": false }; + let ndframe = new dfd.NDframe({ data, ...options }); + assert.deepEqual(ndframe.ndim, 2); + }); + it("prints the values of a frame", function () { + let data = [ [ 21, 20, 1 ], [ 20, 25, 3 ] ]; + let ndframe = new dfd.NDframe({ data, isSeries: false }); + assert.deepEqual(ndframe.values, data); + }); + it("prints the values of a frame", function () { + let data = [ [ 21, 20, 1 ], [ 20, 25, 3 ] ]; + let ndframe = new dfd.NDframe({ data, isSeries: false }); + assert.deepEqual(ndframe.values, data); + }); + + it("Throws error on duplicate column name", function () { + let data = [ [ 21, 20, 1 ], [ 20, 25, 3 ] ]; + assert.throws(() => { + new dfd.NDframe({ data, isSeries: false, columns: [ "A", "A", "C" ] }), + Error, + "ColumnIndexError: Column index must contain unique values"; + }); + }); + + it("Throws error on duplicate index", function () { + let data = [ [ 21, 20, 1 ], [ 20, 25, 3 ] ]; + assert.throws(() => { + new dfd.NDframe({ data, isSeries: false, index: [ 1, 1, 2 ] }), + Error, + "IndexError: Row index must contain unique values"; + }); + }); + }); + + describe("NDframe Created from JavaScript Object", function () { + + it("prints the shape of a 2D frame created from an Object", function () { + let data = [ { alpha: "A", count: 1 }, { alpha: "B", count: 2 }, { alpha: "C", count: 3 } ]; + let ndframe = new dfd.NDframe({ data, isSeries: false }); + assert.deepEqual(ndframe.shape, [ 3, 2 ]); + }); + it("prints the column names of frame created from an Object", function () { + let data = [ { alpha: "A", count: 1 }, { alpha: "B", count: 2 }, { alpha: "C", count: 3 } ]; + let ndframe = new dfd.NDframe({ data, isSeries: false }); + assert.deepEqual(ndframe.columns, [ "alpha", "count" ]); + }); + it("prints the shape of a 1D frame created from an Object", function () { + let data = [ { alpha: "A", count: 1 } ]; + let ndframe = new dfd.NDframe({ data, isSeries: false }); + assert.deepEqual(ndframe.shape, [ 1, 2 ]); + }); + + it("prints the size of a frame created from an Object", function () { + let data = [ { alpha: "A", count: 1 }, { alpha: "B", count: 2 }, { alpha: "C", count: 3 } ]; + let ndframe = new dfd.NDframe({ data, isSeries: false }); + assert.deepEqual(ndframe.size, 6); + }); + it("prints the dimension of a frame created from an Object", function () { + let data = [ { alpha: "A", count: 1 }, { alpha: "B", count: 2 } ]; + let ndframe = new dfd.NDframe({ data, isSeries: false }); + assert.deepEqual(ndframe.ndim, 2); + }); + it("prints the values of a frame created from an Object", function () { + let data = [ { alpha: "A", count: 1 }, { alpha: "B", count: 2 } ]; + let ndframe = new dfd.NDframe({ data, isSeries: false }); + assert.deepEqual(ndframe.values, [ [ "A", 1 ], [ "B", 2 ] ]); + }); + it("prints the values of a frame created from an Object with undefined values", function () { + let data = [ { alpha: "A", count: undefined }, { alpha: undefined, count: 2 } ]; + let ndframe = new dfd.NDframe({ data, isSeries: false }); + assert.deepEqual(ndframe.values, [ [ "A", undefined ], [ undefined, 2 ] ]); + }); + + it("prints the values of a frame created from an Object with NaN values", function () { + let data = [ { alpha: "A", count: NaN }, { alpha: NaN, count: 2 } ]; + let ndframe = new dfd.NDframe({ data, isSeries: false }); + assert.deepEqual(ndframe.values, [ [ "A", NaN ], [ NaN, 2 ] ]); + }); + + // it("NDframe created from json takes key position into consideration", function () { + // let json_data = [ { A: "A", B: "B", C: "C" }, + // { A: "A", B: "B", C: "C" }, + // { C: "C", B: "B", A: "A" }, + // { A: "A", C: "C", B: "B" } ]; + + // let output = [ + // [ + // 'A', + // 'B', + // 'C' + // ], + // [ + // 'A', + // 'B', + // 'C' + // ], + // [ + // 'A', + // 'B', + // 'C' + // ], + // [ + // 'A', + // 'B', + // 'C' + // ] + // ]; + // let ndframe = new dfd.NDframe({ json_data, isSeries: false }); + // assert.deepEqual(ndframe.values, output); + // }); + + // it("NDframe created from json sets value to NaN if not present", function () { + // let json_data = [ { A: "A", B: "B", C: "C" }, + // { A: "A", B: "B", C: "C" }, + // { C: "C", B: "B", A: "A" }, + // { A: "A", C: "C" } ]; + + // let output = [ + // [ + // 'A', + // 'B', + // 'C' + // ], + // [ + // 'A', + // 'B', + // 'C' + // ], + // [ + // 'A', + // 'B', + // 'C' + // ], + // [ + // 'A', + // 'B', + // NaN + // ] + // ]; + // let ndframe = new dfd.NDframe({ json_data, isSeries: false }); + // assert.deepEqual(ndframe.values, output); + // }); + + }); + + describe("Replacing row data", function () { + it("retrieves the col data after row data is replaced in a DataFrame", function () { + let data = { alpha: [ "A", "B" ], count: [ 1, 2 ] }; + let ndframe = new dfd.NDframe({ data, isSeries: false }); + ndframe.$setValues([ [ "A", 20 ], [ "D", 211 ] ]); + assert.deepEqual(ndframe.values, [ [ "A", 20 ], [ "D", 211 ] ]); + + }); + it("Correct dtypes is inferred after row data is replaced in a DataFrame", function () { + let data = { alpha: [ "A", "B" ], count: [ 1, 2 ] }; + let ndframe = new dfd.NDframe({ data, isSeries: false }); + ndframe.$setValues([ [ 20, 20 ], [ 11.4, 211 ] ]); + assert.deepEqual(ndframe.dtypes, [ "float32", "int32" ]); + + }); + it("Throws row length error on invalid data length in DataFrame", function () { + let data = { alpha: [ "A", "B" ], count: [ 1, 2 ] }; + let ndframe = new dfd.NDframe({ data, isSeries: false }); + assert.throws( + () => { + ndframe.$setValues([ [ 20, 20 ], [ 11.4, 211 ], [ 11.4, 211 ] ]); + }, + Error, + "Row data length mismatch. You provided data with length 3 but Ndframe has row of lenght 2" + ); + }); + it("Throws column length error on invalid data length in DataFrame", function () { + let data = { alpha: [ "A", "B" ], count: [ 1, 2 ] }; + let ndframe = new dfd.NDframe({ data, isSeries: false }); + assert.throws( + () => { + ndframe.$setValues([ [ 20, 211 ], [ 20, 20, 11.4, 211 ] ]); + }, + Error, + "Column data length mismatch. You provided data with length 2 but Ndframe has column of lenght 2" + ); + }); + it("retrieves the col data after row data is replaced in a Series", function () { + let data = [ "A", "B", 1, 2 ]; + let ndframe = new dfd.NDframe({ data, isSeries: true }); + ndframe.$setValues([ "A", "D", "E", "O" ]); + assert.deepEqual(ndframe.values, [ "A", "D", "E", "O" ]); + assert.deepEqual(ndframe.$dataIncolumnFormat, [ "A", "D", "E", "O" ]); + + }); + it("Correct dtypes is inferred after updating values", function () { + let data = [ "A", "D", "E", "O" ]; + let ndframe = new dfd.NDframe({ data, isSeries: true }); + ndframe.$setValues([ 1, 2, 3, 4 ]); + assert.deepEqual(ndframe.values, [ 1, 2, 3, 4 ]); + assert.deepEqual(ndframe.dtypes[0], "int32"); + }); + it("Correct dtypes is inferred after updating values in low memory mode", function () { + let data = [ "A", "D", "E", "O" ]; + let ndframe = new dfd.NDframe({ data, isSeries: true, config: { lowMemoryMode: true } }); + ndframe.$setValues([ 1, 2, 3, 4 ]); + assert.deepEqual(ndframe.values, [ 1, 2, 3, 4 ]); + assert.deepEqual(ndframe.dtypes[0], "int32"); + }); + it("Throws row length error on invalid data length", function () { + let data = [ "A", "D", "E", "O" ]; + let ndframe = new dfd.NDframe({ data, isSeries: true, config: { lowMemoryMode: true } }); + assert.throws( + () => { + ndframe.$setValues([ 1, 2, 3, 4, 1, 3 ]); + }, + Error, + "Row data length mismatch. You provided data with length 6 but Ndframe has row of lenght 4" + ); + }); + + }); + + describe("NDframe Created from a Tensor", function () { + + it("prints the shape of a 2D frame created from a 2D tensor", function () { + let data = tensor([ 1, 2, 3, 4 ]); + let ndframe = new dfd.NDframe({ data, isSeries: true }); + assert.deepEqual(ndframe.ndim, 1); + assert.deepEqual(ndframe.values, [ 1, 2, 3, 4 ]); + + }); + it("prints the shape of a 2D frame created from a 1D tensor", function () { + let data = tensor([ [ 2, 3, 4 ], [ 4, 5, 6 ] ]); + let ndframe = new dfd.NDframe({ data, columns: [ "alpha", "count", "sum" ], isSeries: false }); + assert.deepEqual(ndframe.columns, [ "alpha", "count", "sum" ]); + }); + + }); + + describe("index", function () { + it("Returns the index of an NDframe", function () { + let data = [ { alpha: "A", count: 1 }, { alpha: "B", count: 2 }, { alpha: "C", count: 3 } ]; + let df = new dfd.NDframe({ data, isSeries: false }); + assert.deepEqual(df.index, [ 0, 1, 2 ]); + }); + it("Returns the index of an NDframe created from an Array", function () { + let data = [ [ 12, 2, 20 ], [ 90, 5, 23 ], [ 45, 56, 70 ], [ 9, 10, 19 ] ]; + let df = new dfd.NDframe({ data, isSeries: false }); + assert.deepEqual(df.index, [ 0, 1, 2, 3 ]); + }); + }); + + describe("NDframe Created from JavaScript Object of Arrays", function () { + + it("retrieves the col data created from OA ", function () { + let data = { alpha: [ "A", "B", "C", "D" ], count: [ 1, 2, 3, 4 ] }; + let ndframe = new dfd.NDframe({ data, isSeries: false }); + assert.deepEqual(ndframe.values, [ [ 'A', 1 ], [ 'B', 2 ], [ 'C', 3 ], [ 'D', 4 ] ]); + }); + it("retrieves the data 2", function () { + let data = { alpha: [ "A", "B", "C", "D" ], count: [ 1, 2, 3, 4 ], sum: [ 20.3, 30.456, 40.90, 90.1 ] }; + let ndframe = new dfd.NDframe({ data, isSeries: false }); + let res = [ + [ 'A', 1, 20.3 ], + [ 'B', 2, 30.456 ], + [ 'C', 3, 40.9 ], + [ 'D', 4, 90.1 ] + ]; + assert.deepEqual(ndframe.values, res); + }); + it("retrieves the row data created from OA ", function () { + let data = { alpha: [ "A", "B" ], count: [ 1, 2 ] }; + let ndframe = new dfd.NDframe({ data, isSeries: false }); + assert.deepEqual(ndframe.values, [ [ "A", 1 ], [ "B", 2 ] ]); + }); + }); + + describe("setIndex", function () { + it("sets the index of an NDframe", function () { + let data = [ { alpha: "A", count: 1 }, { alpha: "B", count: 2 }, { alpha: "C", count: 3 } ]; + let df = new dfd.NDframe({ data, isSeries: false }); + df.$setIndex([ "A", "B", "C" ]); + assert.deepEqual(df.index, [ "A", "B", "C" ]); + }); + it("Returns the index of an NDframe created from an Array", function () { + let data = [ [ 12, 2, 20 ], [ 90, 5, 23 ], [ 45, 56, 70 ], [ 9, 10, 19 ] ]; + let df = new dfd.NDframe({ data, isSeries: false }); + df.$setIndex([ 10, 20, 30, 40 ]); + assert.deepEqual(df.index, [ 10, 20, 30, 40 ]); + }); + }); + + + describe("dtype", function () { + it("Returns int dtype set during creation of 1DFrame (Series) from an Object", function () { + let data = [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]; + let options = { dtypes: [ 'int32' ], isSeries: true }; + let ndframe = new dfd.NDframe({ data, ...options }); + assert.deepEqual(ndframe.dtypes, [ 'int32' ]); + }); + + it("Returns string dtype set during creation of 1DFrame (Series) from an Array", function () { + let data = [ "Alice", "Yemi", "Rising", "Mark" ]; + let options = { dtypes: [ 'string' ], isSeries: true }; + let ndframe = new dfd.NDframe({ data, ...options }); + assert.deepEqual(ndframe.dtypes, [ "string" ]); + }); + + it("Returns string dtype automatically inferred from 1DFrame (Series)", function () { + let data = [ "Alice", "Yemi", "Rising", "Mark" ]; + let options = { columns: 'Names', isSeries: true }; + let ndframe = new dfd.NDframe({ data, ...options }); + assert.deepEqual(ndframe.dtypes, [ "string" ]); + }); + + it("Returns int dtype automatically inferred from 1DFrame (Series)", function () { + let data = [ 20, 30, 20, 20 ]; + let options = { columns: 'Size', isSeries: true }; + let ndframe = new dfd.NDframe({ data, ...options }); + assert.deepEqual(ndframe.dtypes, [ "int32" ]); + }); + it("Returns float dtype automatically inferred from 1DFrame (Series)", function () { + let data = [ 20.1, 30.4, 20.2, 4.23, 20.1 ]; + let options = { columns: 'Size', isSeries: true }; + let ndframe = new dfd.NDframe({ data, ...options }); + assert.deepEqual(ndframe.dtypes, [ "float32" ]); + }); + + + it("Returns dtype set during creation of 2DFrame from an Object", function () { + let data = [ { alpha: "A", count: 1 }, { alpha: "B", count: 2 } ]; + let options = { dtypes: [ 'string', 'int32' ] }; + let ndframe = new dfd.NDframe({ data, ...options }); + assert.deepEqual(ndframe.dtypes, [ 'string', 'int32' ]); + }); + it("Returns dtype set during creation of 2DFrame from an Array", function () { + let data = [ [ "Alice", 2, 3.0 ], [ "Boy", 5, 6.1 ], [ "Girl", 30, 40 ], [ 39, 89, 78.2 ] ]; + let cols = [ "Name", "Count", "Score" ]; + let options = { columns: cols, dtypes: [ 'string', 'int32', 'float32' ] }; + let ndframe = new dfd.NDframe({ data, ...options }); + assert.deepEqual(ndframe.dtypes, [ "string", "int32", "float32" ]); + }); + + it("Returns dtype automatically inferred from 2DFrame", function () { + let data = [ [ "Alice", 2, 3.1 ], [ "Boy", 5, 6.1 ], [ "Girl", 30, 40.2 ], [ 39, 89, 78.2 ] ]; + let cols = [ "Name", "Count", "Score" ]; + let options = { columns: cols }; + let ndframe = new dfd.NDframe({ data, ...options }); + assert.deepEqual(ndframe.dtypes, [ "string", "int32", "float32" ]); + }); + + }); + + describe("Empty NDFrame", function () { + it("Can successfully create an empty NDframe from empty array", function () { + let data = []; + let sf = new dfd.NDframe({ data, isSeries: false }); + assert.deepEqual(sf.shape, [ 0, 0 ]); + assert.deepEqual(sf.columns, []); + assert.deepEqual(sf.dtypes, []); + assert.deepEqual(sf.values, []); + }); + it("Can successfully create an empty NDframe from undefined data", function () { + let data = undefined; + let sf = new dfd.NDframe({ data, isSeries: true }); + assert.deepEqual(sf.shape, [ 0, 0 ]); + assert.deepEqual(sf.columns, []); + assert.deepEqual(sf.dtypes, []); + assert.deepEqual(sf.values, []); + }); + + it("Can successfully create an empty NDframe", function () { + let sf = new dfd.NDframe({ isSeries: true }); + assert.deepEqual(sf.shape, [ 0, 0 ]); + assert.deepEqual(sf.columns, []); + assert.deepEqual(sf.dtypes, []); + assert.deepEqual(sf.values, []); + }); + }); + +}); diff --git a/src/danfojs-browser/tests/core/indexing.test.js b/src/danfojs-browser/tests/core/indexing.test.js new file mode 100644 index 00000000..48602c6c --- /dev/null +++ b/src/danfojs-browser/tests/core/indexing.test.js @@ -0,0 +1,413 @@ +/* eslint-disable no-undef */ + +describe("Iloc and Loc based Indexing", function () { + describe("Iloc Index", function () { + it("throw error for wrong row index value", function () { + let data = [ 1, 2, 34, 5, 6 ]; + let df = new dfd.Series(data); + assert.throws(function () { df.iloc(0); }, Error, `rows parameter must be an Array. For example: rows: [1,2] or rows: ["0:10"]`); + }); + + it("throw error for wrong string split parameter", function () { + let data = [ 1, 2, 34, 5, 6 ]; + let df = new dfd.Series(data); + assert.throws(function () { df.iloc([ "0;1" ]); }, Error, `Invalid row split parameter: If using row split string, it must be of the form; rows: ["start:end"]`); + }); + + it("throw error for wrong string split value", function () { + let data = [ 1, 2, 34, 5, 6 ]; + let df = new dfd.Series(data); + assert.throws(function () { df.iloc([ "0:a" ]); }, Error, `Invalid row split parameter. Split parameter must be a number`); + }); + + it("throw error for string split values greater than 2", function () { + let data = [ 1, 2, 34, 5, 6 ]; + let df = new dfd.Series(data); + assert.throws(function () { df.iloc([ "0:4:2" ]); }, Error, `Invalid row split parameter: If using row split string, it must be of the form; rows: ["start:end"]`); + }); + + it("throw error for row index larger than series length", function () { + let data = [ 1, 2, 34, 5, 6 ]; + + let df = new dfd.Series(data); + assert.throws(function () { df.iloc([ 0, 8 ]); }, Error, "Invalid row parameter: Specified index 8 cannot be bigger than index length 5"); + }); + + it("throw error for non-numeric row index", function () { + let data = [ 1, 2, 34, 5, 6 ]; + let df = new dfd.Series(data); + assert.throws(function () { df.iloc([ 0, "4" ]); }, Error, "Invalid row parameter: row index 4 must be a number"); + }); + + + it("df.iloc works for rows:[0,1]", function () { + let data = [ 1, 2, 34, 5, 6 ]; + + let df = new dfd.Series(data); + + let sf = df.iloc([ 0, 1 ]); + let expected = [ 1, 2 ]; + + assert.deepEqual(sf.values, expected); + }); + + it("df.iloc works for rows:[1]", function () { + let data = [ 1, 2, 34, 5, 6 ]; + + let df = new dfd.Series(data); + + let sf = df.iloc([ 1 ]); + let expected = [ 2 ]; + + assert.deepEqual(sf.values, expected); + }); + + it("correct index is returned for df.iloc rows:[1, 2]", function () { + let data = [ 1, 2, 34, 5, 6 ]; + let df = new dfd.Series(data, { index: [ "a", "b", "c", "d", "e" ] }); + + let sf = df.iloc([ 1, 4 ]); + let expected = [ "b", "e" ]; + + assert.deepEqual(sf.index, expected); + }); + + + it("row slice with string param works [0:2]", function () { + let data = [ 1, 2, 4, 5, 6, 20, 30, 40, 39, 89, 78 ]; + let df = new dfd.Series(data); + + let sf = df.iloc([ "0:2" ]); + let expected = [ 1, 2 ]; + + assert.deepEqual(sf.values, expected); + + }); + it("row slice with string param works [1:]", function () { + let data = [ 1, 2, 34, 5, 620, 30, 409, 89, 78 ]; + let df = new dfd.Series(data); + + let sf = df.iloc([ "1:" ]); + let expected = [ 2, 34, 5, 620, 30, 409, 89, 78 ]; + + assert.deepEqual(sf.values, expected); + + }); + it("row slice with string param works [:2]", function () { + let data = [ 1, 2, 34, 5, 6, 20, 30, 40, 39, 89, 78 ]; + let df = new dfd.Series(data); + let sf = df.iloc([ ":2" ]); + let expected = [ 1, 2 ]; + + assert.deepEqual(sf.values, expected); + + }); + it("row slice with string param works [:]", function () { + let data = [ 1, 2, 3, 5, 20, 30, 4039, 89, 78 ]; + let df = new dfd.Series(data); + let expected = [ 1, 2, 3, 5, 20, 30, 4039, 89, 78 ]; + + let sf = df.iloc([ ":" ]); + assert.deepEqual(sf.values, expected); + + }); + + it(`throw error for wrong start index size ["0:20"]`, function () { + let data = [ 1, 2, 34, 5, 6 ]; + let df = new dfd.Series(data); + assert.throws(function () { df.iloc([ "0:20" ]); }, Error, `row slice [end] index cannot be bigger than 5`); + }); + + it(`throw error for wrong start index size ["-1:2"]`, function () { + let data = [ 1, 2, 34, 5, 6 ]; + let df = new dfd.Series(data); + assert.throws(function () { df.iloc([ "-1:2" ]); }, Error, `row slice [start] index cannot be less than 0`); + }); + + it("check data after column slice", function () { + let data = [ 1, 2, 34, 5, 620, 30, 4039, 89, 78 ]; + let df = new dfd.Series(data); + + let sf = df.iloc([ 0, 1, 6 ]); + let expected = [ 1, 2, 4039 ]; + assert.deepEqual(sf.values, expected); + + }); + + it("iloc works for boolean array", function () { + let data = [ 1, 2, 34, 5, 620 ]; + let df = new dfd.Series(data); + + let sf = df.iloc([ true, true, false, true, false ]); + let expected = [ 1, 2, 5 ]; + assert.deepEqual(sf.values, expected); + + }); + + it("iloc works for boolean array (all true)", function () { + let data = [ 1, 2, 34, 5, 620 ]; + let df = new dfd.Series(data); + + let sf = df.iloc([ true, true, true, true, true ]); + let expected = [ 1, 2, 34, 5, 620 ]; + assert.deepEqual(sf.values, expected); + + }); + it("iloc works for boolean array (all false)", function () { + let data = [ 1, 2, 34, 5, 620 ]; + let df = new dfd.Series(data); + + let sf = df.iloc([ false, false, false, false, false ]); + let expected = []; + assert.deepEqual(sf.values, expected); + + }); + + it("boolean iloc works for DataFrame", function () { + const data = { + "Name": [ "Apples", "Mango", "Banana", "Pear" ], + "Count": [ 21, 5, 30, 10 ], + "Price": [ 200, 300, 40, 250 ] + }; + const df = new dfd.DataFrame(data); + const subDf = df.iloc({ rows: [ false, false, false, true ] }); + const result = [ [ 'Pear', 10, 250 ] ]; + assert.deepEqual(subDf.values, result); + + }); + + + it("boolean iloc works for DataFrame with specified columns", function () { + const data = { + "Name": [ "Apples", "Mango", "Banana", "Pear" ], + "Count": [ 21, 5, 30, 10 ], + "Price": [ 200, 300, 40, 250 ] + }; + const df = new dfd.DataFrame(data); + const subDf = df.iloc({ rows: [ false, false, false, true ], columns: [ 0, 2 ] }); + const result = [ [ 'Pear', 250 ] ]; + assert.deepEqual(subDf.values, result); + + }); + + it("boolean iloc works for DataFrame with Series bool selector", function () { + const data = { + "Name": [ "Apples", "Mango", "Banana", "Pear" ], + "Count": [ 21, 5, 30, 10 ], + "Price": [ 200, 300, 40, 250 ] + }; + const df = new dfd.DataFrame(data); + const subDf = df.iloc({ rows: df["Count"].gt(10), columns: [ 0, 2 ] }); + const result = [ [ 'Apples', 200 ], [ 'Banana', 40 ] ]; + assert.deepEqual(subDf.values, result); + + }); + }); + + describe("Loc Index", function () { + it("throw error for wrong row index value", function () { + let data = [ 1, 2, 34, 5, 6 ]; + let df = new dfd.Series(data); + assert.throws(function () { df.loc(0); }, Error, `rows parameter must be an Array. For example: rows: [1,2] or rows: ["0:10"]`); + }); + + it("throw error for wrong string split parameter", function () { + let data = [ 1, 2, 34, 5, 6 ]; + let df = new dfd.Series(data); + assert.throws(function () { df.loc([ "a;1" ]); }, Error, `IndexError: Specified index (a;1) not found`); + }); + it(`throw error for wrong string split parameter ("0;1")`, function () { + let data = [ 1, 2, 34, 5, 6 ]; + let df = new dfd.Series(data); + assert.throws(function () { df.loc([ "0;1" ]); }, Error, `IndexError: Specified index (0;1) not found`); + }); + + it("throw error for wrong string split end value", function () { + let data = [ 1, 2, 34, 5, 6 ]; + let df = new dfd.Series(data); + assert.throws(function () { df.loc([ "0:a" ]); }, Error, `IndexError: Specified end index not found`); + }); + + it("throw error for string split values greater than 2", function () { + let data = [ 1, 2, 34, 5, 6 ]; + let df = new dfd.Series(data); + assert.throws(function () { df.loc([ "0:4:2" ]); }, Error, `Invalid row split parameter: If using row split string, it must be of the form; rows: ["start:end"]`); + }); + + it("throw error for row index larger than series length", function () { + let data = [ 1, 2, 34, 5, 6 ]; + + let df = new dfd.Series(data); + assert.throws(function () { df.loc([ 0, 8 ]); }, Error, "IndexError: Specified index (8) not found"); + }); + + it("throw error for non-numeric row index not found", function () { + let data = [ 1, 2, 34, 5, 6 ]; + let df = new dfd.Series(data); + assert.throws(function () { df.loc([ 0, "4" ]); }, Error, "IndexError: Specified index (4) not found"); + }); + + + it("df.iloc works for rows:[0,1]", function () { + let data = [ 1, 2, 34, 5, 6 ]; + + let df = new dfd.Series(data); + + let sf = df.loc([ 0, 1 ]); + let expected = [ 1, 2 ]; + + assert.deepEqual(sf.values, expected); + }); + + it("df.iloc works for rows:[1]", function () { + let data = [ 1, 2, 34, 5, 6 ]; + + let df = new dfd.Series(data); + + let sf = df.loc([ 1 ]); + let expected = [ 2 ]; + + assert.deepEqual(sf.values, expected); + }); + + it("correct index is returned for df.loc([1, 4])", function () { + let data = [ 1, 2, 34, 5, 6 ]; + let df = new dfd.Series(data, { index: [ "a", "b", "c", "d", "e" ] }); + + let sf = df.loc([ "b", "e" ]); + let expected = [ "b", "e" ]; + assert.deepEqual(sf.index, expected); + }); + + it("row slice with string param works [0:2]", function () { + let data = [ 1, 2, 4, 5, 6, 20, 30, 40, 39, 89, 78 ]; + let df = new dfd.Series(data); + + let sf = df.loc([ "0:2" ]); + let expected = [ 1, 2 ]; + + assert.deepEqual(sf.values, expected); + + }); + it("row slice with string param works [1:]", function () { + let data = [ 1, 2, 34, 5, 620, 30, 409, 89, 78 ]; + let df = new dfd.Series(data); + + let sf = df.loc([ "1:" ]); + let expected = [ 2, 34, 5, 620, 30, 409, 89, 78 ]; + + assert.deepEqual(sf.values, expected); + + }); + it("row slice with string param works [:2]", function () { + let data = [ 1, 2, 34, 5, 6, 20, 30, 40, 39, 89, 78 ]; + let df = new dfd.Series(data); + let sf = df.loc([ ":2" ]); + let expected = [ 1, 2 ]; + + assert.deepEqual(sf.values, expected); + + }); + it("row slice with string param works [:]", function () { + let data = [ 1, 2, 3, 5, 20, 30, 4039, 89, 78 ]; + let df = new dfd.Series(data); + let expected = [ 1, 2, 3, 5, 20, 30, 4039, 89, 78 ]; + + let sf = df.loc([ ":" ]); + assert.deepEqual(sf.values, expected); + + }); + + it(`throw error for wrong start index size ["0:20"]`, function () { + let data = [ 1, 2, 34, 5, 6 ]; + let df = new dfd.Series(data); + assert.throws(function () { df.iloc([ "0:20" ]); }, Error, `row slice [end] index cannot be bigger than 5`); + }); + + it(`throw error for wrong start index size ["-1:2"]`, function () { + let data = [ 1, 2, 34, 5, 6 ]; + let df = new dfd.Series(data); + assert.throws(function () { df.iloc([ "-1:2" ]); }, Error, `row slice [start] index cannot be less than 0`); + }); + + it("check data after column slice", function () { + let data = [ 1, 2, 34, 5, 620, 30, 4039, 89, 78 ]; + let df = new dfd.Series(data); + + let sf = df.loc([ 0, 1, 6 ]); + let expected = [ 1, 2, 4039 ]; + assert.deepEqual(sf.values, expected); + + }); + + it("loc works for boolean array", function () { + let data = [ 1, 2, 34, 5, 620 ]; + let df = new dfd.Series(data); + + let sf = df.loc([ true, true, false, true, false ]); + let expected = [ 1, 2, 5 ]; + assert.deepEqual(sf.values, expected); + + }); + + it("loc works for boolean array (all true)", function () { + let data = [ 1, 2, 34, 5, 620 ]; + let df = new dfd.Series(data); + + let sf = df.loc([ true, true, true, true, true ]); + let expected = [ 1, 2, 34, 5, 620 ]; + assert.deepEqual(sf.values, expected); + + }); + it("loc works for boolean array (all false)", function () { + let data = [ 1, 2, 34, 5, 620 ]; + let df = new dfd.Series(data); + + let sf = df.loc([ false, false, false, false, false ]); + let expected = []; + assert.deepEqual(sf.values, expected); + + }); + + it("boolean loc works for DataFrame", function () { + const data = { + "Name": [ "Apples", "Mango", "Banana", "Pear" ], + "Count": [ 21, 5, 30, 10 ], + "Price": [ 200, 300, 40, 250 ] + }; + const df = new dfd.DataFrame(data); + const subDf = df.loc({ rows: [ false, false, false, true ] }); + const result = [ [ 'Pear', 10, 250 ] ]; + assert.deepEqual(subDf.values, result); + + }); + + + it("boolean loc works for DataFrame with specified columns", function () { + const data = { + "Name": [ "Apples", "Mango", "Banana", "Pear" ], + "Count": [ 21, 5, 30, 10 ], + "Price": [ 200, 300, 40, 250 ] + }; + const df = new dfd.DataFrame(data); + const subDf = df.loc({ rows: [ false, false, false, true ], columns: [ "Name", "Price" ] }); + const result = [ [ 'Pear', 250 ] ]; + assert.deepEqual(subDf.values, result); + + }); + + it("boolean loc works for DataFrame with Series bool selector", function () { + const data = { + "Name": [ "Apples", "Mango", "Banana", "Pear" ], + "Count": [ 21, 5, 30, 10 ], + "Price": [ 200, 300, 40, 250 ] + }; + const df = new dfd.DataFrame(data); + const subDf = df.loc({ rows: df["Count"].gt(10), columns: [ "Name", "Price" ] }); + const result = [ [ 'Apples', 200 ], [ 'Banana', 40 ] ]; + assert.deepEqual(subDf.values, result); + + }); + }); + +}); diff --git a/src/danfojs-browser/tests/core/series.test.js b/src/danfojs-browser/tests/core/series.test.js new file mode 100644 index 00000000..2a5f4680 --- /dev/null +++ b/src/danfojs-browser/tests/core/series.test.js @@ -0,0 +1,1586 @@ +/* eslint-disable no-undef */ + +describe("Series Functions", () => { + + describe("head", function () { + it("Gets the first 2 rows in a Series", function () { + const data = [ 1, 2, 3, 4, 5, 620, 30, 40, 39, 89, 78 ]; + const cols = [ "A" ]; + const sf = new dfd.Series(data, { columns: cols }); + assert.deepEqual(sf.head(2).values, [ 1, 2 ]); + assert.deepEqual(sf.head(5).values, [ 1, 2, 3, 4, 5 ]); + }); + it("throw error when row specified is greater than values", function () { + const data = [ "Boy", "Girl", "Man", "Woman", "Tall" ]; + const cols = [ "Items" ]; + const sf = new dfd.Series(data, { columns: cols }); + assert.throws(function () { assert.deepEqual(sf.head(10).values, data); }, Error, `row slice [end] index cannot be bigger than 5`); + }); + + it("throw error when row specified is less than 0", function () { + const data = [ 1, 2, 3, 4, 5, 620, 30, 40, 39, 89, 78 ]; + const sf = new dfd.Series(data); + assert.throws(function () { assert.deepEqual(sf.head(-1).values, data); }, Error, `ParamError: end must be greater than start`); + }); + }); + + + describe("tail", function () { + it("Prints the last n rows of a Series", function () { + const data = [ 1, 2, 3, 4, 5, 620, 30, 40, 39, 89, 78 ]; + const sf = new dfd.Series(data); + assert.deepEqual(sf.tail(2).values, [ 89, 78 ]); + assert.deepEqual(sf.tail(4).values, [ 40, 39, 89, 78 ]); + + }); + it("throw error when row specified is greater than values", function () { + const data = [ "Boy", "Girl", "Man", "Woman", "Tall" ]; + const cols = [ "Items" ]; + const sf = new dfd.Series(data, { columns: cols }); + assert.throws(function () { assert.deepEqual(sf.tail(15).values, data); }, Error, `row slice [start] index cannot be less than 0`); + }); + + it("throw error when row specified is less than 0", function () { + const data = [ "Boy", "Girl", "Man", "Woman", "Tall" ]; + const cols = [ "Items" ]; + const sf = new dfd.Series(data, { columns: cols }); + assert.throws(function () { assert.deepEqual(sf.tail(-1).values, data); }, Error, `ParamError: end must be greater than start`); + }); + }); + + describe("sample", function () { + it("Samples n number of random elements from a DataFrame", async function () { + const data = [ 1, 2, 3, 4, 5, 620, 30, 40, 39, 89, 78 ]; + const sf = new dfd.Series(data); + assert.deepEqual((await sf.sample(7)).values.length, 7); + }); + it("Return all values if n of sample -1", async function () { + const data = [ 1, 2, 3, 4, 5, 620, 30, 40, 39, 89, 78 ]; + const sf = new dfd.Series(data); + assert.deepEqual((await sf.sample(-1)).values.length, data.length); + }); + + it("Throw error if n is greater than lenght of Series", async function () { + const data = [ 1, 2, 3, 4, 5, 620, 30, 40, 39, 89, 78 ]; + const sf = new dfd.Series(data); + try { + await sf.sample(100); + } catch (e) { + expect(e.message).to.eql('Sample size n cannot be bigger than size of dataset'); + } + }); + }); + + describe("add", function () { + it("Return Addition of series with another series", function () { + const data = [ 1, 2, 3, 4, 5, 6 ]; + const data2 = [ 30, 40, 39, 1, 2, 1 ]; + const sf = new dfd.Series(data); + const sf2 = new dfd.Series(data2); + assert.deepEqual(sf.add(sf2).values, [ 31, 42, 42, 5, 7, 7 ]); + }); + it("Return Addition of series with a single value (Broadcasting)", function () { + const data = [ 1, 2, 3, 4, 5 ]; + const sf = new dfd.Series(data); + assert.deepEqual(sf.add(1).values, [ 2, 3, 4, 5, 6 ]); + }); + it("Return Addition of series with another series inplace", function () { + const data = [ 1, 2, 3, 4, 5, 6 ]; + const data2 = [ 30, 40, 39, 1, 2, 1 ]; + const sf = new dfd.Series(data); + const sf2 = new dfd.Series(data2); + sf.add(sf2, { inplace: true }); + assert.deepEqual(sf.values, [ 31, 42, 42, 5, 7, 7 ]); + }); + it("Return Addition of series with a single value (Broadcasting) inplace", function () { + const data = [ 1, 2, 3, 4, 5 ]; + const sf = new dfd.Series(data); + sf.add(1, { inplace: true }); + assert.deepEqual(sf.values, [ 2, 3, 4, 5, 6 ]); + }); + it("Dtype is properly updated on addition of series with a single float value inplace", function () { + const data = [ 1, 2, 3, 4, 5 ]; + const sf = new dfd.Series(data); + sf.add(1.23, { inplace: true }); + assert.deepEqual(sf.dtypes[0], "float32"); + assert.deepEqual(sf.values, [ 2.23, 3.23, 4.23, 5.23, 6.23 ]); + }); + it("Add works properly when using tfjs add function", function () { + const data = [ 1, 2, 3, 4, 5 ]; + const sf = new dfd.Series(data); + sf.add(1.23, { inplace: true }); + assert.deepEqual(sf.dtypes[0], "float32"); + assert.deepEqual(sf.values, [ 2.23, 3.23, 4.23, 5.23, 6.23 ]); + }); + it("Add works properly when using tfjs add function on Series", function () { + const data = [ 1, 2, 3, 4, 5 ]; + const sf = new dfd.Series(data); + const sf2 = new dfd.Series([ 1.23, 1.23, 1.23, 1.23, 1.23 ]); + sf.add(sf2, { inplace: true }); + assert.deepEqual(sf.values, [ 2.23, 3.23, 4.23, 5.23, 6.23 ]); + }); + it("Throws type error on addition of string type", function () { + const data = [ 1, 2, 3, 4 ]; + const data2 = [ "A", "B", "C", "d" ]; + const sf = new dfd.Series(data); + const sf2 = new dfd.Series(data2); + assert.throws( + () => { + sf.add(sf2); + }, + Error, + "DtypeError: String data type does not support add operation" + ); + }); + it("Throws length error if series lenght mixmatch", function () { + const data = [ 1, 2, 3, 4 ]; + const data2 = [ 1, 2, 3, 4, 5, 6 ]; + const sf = new dfd.Series(data); + const sf2 = new dfd.Series(data2); + assert.throws(() => { sf.add(sf2); }, Error, "Row length mismatch. Length of other (6), must be the same as Ndframe (4)"); + }); + }); + + describe("sub", function () { + it("Return Subtraction of series with another series", function () { + const data1 = [ 30, 40, 39, 1, 2, 1 ]; + const data2 = [ 1, 2, 3, 4, 5, 6 ]; + const sf1 = new dfd.Series(data1); + const sf2 = new dfd.Series(data2); + assert.deepEqual(sf1.sub(sf2).values, [ 29, 38, 36, -3, -3, -5 ]); + }); + it("Return Subtraction of series with a single value (Broadcasting)", function () { + const data = [ 1, 2, 3, 4, 5 ]; + const sf = new dfd.Series(data); + assert.deepEqual(sf.sub(1).values, [ 0, 1, 2, 3, 4 ]); + }); + it("Throws type error on Subtraction of string type", function () { + const data = [ 1, 2, 3, 4 ]; + const data2 = [ "A", "B", "C", "d" ]; + const sf = new dfd.Series(data); + const sf2 = new dfd.Series(data2); + assert.throws( + () => { + sf.sub(sf2); + }, + Error, + "DtypeError: String data type does not support sub operation" + ); + }); + it("Throws length error if series lenght mixmatch", function () { + const data = [ 1, 2, 3, 4 ]; + const data2 = [ 1, 2, 3, 4, 5, 6 ]; + const sf = new dfd.Series(data); + const sf2 = new dfd.Series(data2); + assert.throws(() => { sf.sub(sf2); }, Error, "Row length mismatch. Length of other (6), must be the same as Ndframe (4)"); + }); + }); + + describe("mul", function () { + it("Return multiplication of series with another series", function () { + const data1 = [ 30, 40, 3, 5 ]; + const data2 = [ 1, 2, 3, 4 ]; + const sf1 = new dfd.Series(data1); + const sf2 = new dfd.Series(data2); + assert.deepEqual(sf1.mul(sf2).values, [ 30, 80, 9, 20 ]); + }); + it("Return multiplication of series with a single value (Broadcasting)", function () { + const data = [ 1, 2, 3, 4, 5 ]; + const sf = new dfd.Series(data); + assert.deepEqual(sf.mul(1).values, [ 1, 2, 3, 4, 5 ]); + }); + it("Throws type error on multiplication of string type", function () { + const data = [ 1, 2, 3, 4 ]; + const data2 = [ "A", "B", "C", "d" ]; + const sf = new dfd.Series(data); + const sf2 = new dfd.Series(data2); + assert.throws(() => { sf.mul(sf2); }, Error, "DtypeError: String data type does not support mul operation"); + }); + it("Throws length error if series lenght mixmatch", function () { + const data = [ 1, 2, 3, 4 ]; + const data2 = [ 1, 2, 3, 4, 5, 6 ]; + const sf = new dfd.Series(data); + const sf2 = new dfd.Series(data2); + assert.throws(() => { sf.mul(sf2); }, Error, "ParamError: Row length mismatch. Length of other (6), must be the same as Ndframe (4)"); + }); + }); + + + describe("div", function () { + it("Return float division of series with another series", function () { + const data1 = [ 30, 40, 3, 5 ]; + const data2 = [ 1, 2, 3, 4 ]; + const sf1 = new dfd.Series(data1); + const sf2 = new dfd.Series(data2); + assert.deepEqual(sf1.div(sf2).values, [ 30, 20, 1, 1.25 ]); + }); + it("Return integer division of series with another series", function () { + const data1 = [ 30, 40, 3, 5 ]; + const data2 = [ 1, 2, 3, 4 ]; + const sf1 = new dfd.Series(data1); + const sf2 = new dfd.Series(data2); + assert.deepEqual(sf1.div(sf2, false).values, [ 30, 20, 1, 1.25 ]); + }); + it("Return division of series with a single value (Broadcasting)", function () { + const data = [ 10, 2, 3, 90 ]; + const sf = new dfd.Series(data); + assert.deepEqual(sf.div(2).values, [ 5, 1, 1.5, 45 ]); + }); + it("Throws type error on division of string type", function () { + const data = [ 1, 2, 3, 4 ]; + const data2 = [ "A", "B", "C", "d" ]; + const sf = new dfd.Series(data); + const sf2 = new dfd.Series(data2); + assert.throws(() => { sf.div(sf2); }, Error, `DtypeError: String data type does not support div operation`); + }); + it("Throws length error if series lenght mixmatch", function () { + const data = [ 1, 2, 3, 4 ]; + const data2 = [ 1, 2, 3, 4, 5, 6 ]; + const sf = new dfd.Series(data); + const sf2 = new dfd.Series(data2); + assert.throws(() => { sf.div(sf2); }, Error, "ParamError: Row length mismatch. Length of other (6), must be the same as Ndframe (4)"); + }); + }); + + describe("pow", function () { + it("Return Exponetial power of series with another series", function () { + const data1 = [ 2, 3, 4, 5 ]; + const data2 = [ 1, 2, 3, 0 ]; + const sf1 = new dfd.Series(data1); + const sf2 = new dfd.Series(data2); + assert.deepEqual(sf1.pow(sf2).values, [ 2, 9, 64, 1 ]); + }); + it("Return Exponetial power of series with a single value (Broadcasting)", function () { + const data = [ 1, 2, 3, 4, 5 ]; + const sf = new dfd.Series(data); + assert.deepEqual(sf.pow(2).values, [ 1, 4, 9, 16, 25 ]); + }); + }); + + describe("mod", function () { + it("Return modulo of series with another float series", function () { + const data1 = [ 2, 30, 4, 5 ]; + const data2 = [ 1.1, 2.2, 3.3, 2.4 ]; + const sf1 = new dfd.Series(data1); + const sf2 = new dfd.Series(data2); + const expected = [ + 0.8999999999999999, + 1.3999999999999977, + 0.7000000000000002, + 0.20000000000000018 + ]; + assert.deepEqual(sf1.mod(sf2).values, expected); + }); + it("Return modulo of series with another int series", function () { + const data1 = [ 2, 30, 4, 5 ]; + const data2 = [ 1, 2, 3, 1 ]; + const sf1 = new dfd.Series(data1); + const sf2 = new dfd.Series(data2); + assert.deepEqual(sf1.mod(sf2).values, [ 0, 0, 1, 0 ]); + }); + it("Return modulo power of series with a single value (Broadcasting)", function () { + const data = [ 1, 2, 3, 4, 5 ]; + const sf = new dfd.Series(data); + assert.deepEqual(sf.mod(2).values, [ 1, 0, 1, 0, 1 ]); + }); + }); + + describe("toString", function () { + it("Prints a series to the console", async function () { + const data = [ 1, 2, 3, 4, 5, 620, 30, 40, 39, 89, 78 ]; + const sf = new dfd.Series(data); + sf.print(); + }); + it("Prints a series to the console", async function () { + const data = [ "This is a long text group and I want it to print in full", + "This is a long text group and I want it to print in full" ]; + const sf = new dfd.Series(data); + sf.print(); + }); + }); + + describe("Empty Series", function () { + it("Can successfully create an empty Series from empty array", function () { + const data = []; + const sf = new dfd.Series(data); + assert.deepEqual(sf.shape, [ 0, 0 ]); + assert.deepEqual(sf.columns, []); + assert.deepEqual(sf.dtypes, []); + assert.deepEqual(sf.values, []); + }); + + it("Can successfully create an empty Series", function () { + const sf = new dfd.Series(); + assert.deepEqual(sf.shape, [ 0, 0 ]); + assert.deepEqual(sf.columns, []); + assert.deepEqual(sf.dtypes, []); + assert.deepEqual(sf.values, []); + }); + }); + + describe("mean", function () { + it("Computes the mean of elements in a int series", function () { + const data1 = [ 30, 40, 3, 5, NaN ]; + const sf = new dfd.Series(data1); + assert.deepEqual(sf.mean(), 19.5); + }); + it("Computes the mean of elements in a int series using TFJS", function () { + const data1 = [ 30, 40, 3, 5, NaN ]; + const sf = new dfd.Series(data1, { config: { useTfjsMathFunctions: true } }); + assert.deepEqual(sf.mean(), 19.5); + }); + it("Computes the mean of elements in a float series", function () { + const data1 = [ 30.1, 40.2, 3.1, 5.1 ]; + const sf = new dfd.Series(data1); + assert.deepEqual(sf.mean(), 19.625); + }); + it("Computes the mean of elements in a float series with NaN", function () { + const data1 = [ 30.1, 40.2, 3.1, 5.1, NaN ]; + const sf = new dfd.Series(data1); + assert.deepEqual(sf.mean(), 19.625); + }); + it("Computes the mean of a boolean series", function () { + const data1 = [ true, false, false, false, true, true, false, true ]; + const sf = new dfd.Series(data1); + assert.deepEqual(sf.mean(), 0.5); + }); + it("Throws error if dtype is string", function () { + const data1 = [ "boy", "girl", "Man" ]; + const sf = new dfd.Series(data1); + assert.throws( + () => { + sf.mean(); + }, + Error, + "DtypeError: String data type does not support mean operation" + ); + }); + }); + + describe("median", function () { + it("Computes the median value of elements across int Series", function () { + const data1 = [ 30, 40, 3, 5 ]; + const sf = new dfd.Series(data1); + assert.deepEqual(sf.median(), 17.5); + }); + it("Computes the median value of elements across float Series", function () { + const data1 = [ 30.1, 40.2, 3.1, 5.1, NaN ]; + const sf = new dfd.Series(data1); + assert.deepEqual(sf.median(), 17.6); + }); + }); + + describe("sum", function () { + it("Sum values of a Int Series", function () { + const data1 = [ 30, 40, 3, 5, 5, 5, 5, 5, 3, 3, 3, 21, 3 ]; + const sf = new dfd.Series(data1); + assert.deepEqual(sf.sum(), 131); + }); + it("Sum values of a Float Series", function () { + const data1 = [ 30.1, 3.1, 40.2, 3.1, 5.1 ]; + const sf = new dfd.Series(data1); + assert.deepEqual(sf.sum(), 81.6); + }); + it("Sum values of a bool Series", function () { + const data1 = [ true, true, false, false, false ]; + const sf = new dfd.Series(data1); + assert.deepEqual(sf.sum(), 2); + }); + it("Sum values a Series with missing values", function () { + const data1 = [ 11, NaN, 2, 2 ]; + const sf = new dfd.Series(data1); + assert.deepEqual(sf.sum(), 15); + }); + }); + + describe("mode", function () { + it("Computes the multi-modal values of a Series", function () { + const data1 = [ 30, 40, 3, 5, 5, 5, 5, 5, 3, 3, 3, 21, 3 ]; + const sf = new dfd.Series(data1); + assert.deepEqual(sf.mode(), [ 5, 3 ]); + }); + it("Computes the modal value of a Series", function () { + const data1 = [ 30.1, 3.1, 40.2, 3.1, 5.1 ]; + const sf = new dfd.Series(data1); + assert.deepEqual(sf.mode(), [ 3.1 ]); + }); + }); + + describe("min", function () { + it("Returns the single smallest elementin a Series", function () { + const data = [ 30, 40, 3, 5 ]; + const sf = new dfd.Series(data); + assert.deepEqual(sf.min(), 3); + }); + it("Computes the minimum of elements across an float Series", function () { + const data1 = [ 30.1, 40.2, 3.12, 5.1 ]; + const sf = new dfd.Series(data1, { dtypes: [ "float32" ] }); + assert.deepEqual(Number(sf.min().toFixed(2)), 3.12); + }); + }); + + describe("max", function () { + it("Computes the maximum of elements across dimensions of a Series", function () { + const data1 = [ 30, 40, 3, 5 ]; + const sf = new dfd.Series(data1); + assert.deepEqual(sf.max(), 40); + }); + it("Return sum of float values in a series", function () { + const data1 = [ 30.1, 40.21, 3.1, 5.1 ]; + const sf = new dfd.Series(data1); + assert.deepEqual(Number(sf.max().toFixed(2)), 40.21); + }); + it("Throws error on addition of string Series", function () { + const data1 = [ "boy", "gitl", "woman", "man" ]; + const sf = new dfd.Series(data1); + assert.throws( + () => { + sf.max(); + }, + Error, + "DtypeError: String data type does not support max operation" + ); + }); + }); + + describe("count", function () { + it("Returns the count of non NaN values in a string Series", function () { + const data = [ "boy", "gitl", "woman", NaN ]; + const sf = new dfd.Series(data); + assert.deepEqual(sf.count(), 3); + }); + it("Returns the count of values in a string Series without NaN", function () { + const data = [ "boy", "gitl", "woman", "Man" ]; + const sf = new dfd.Series(data); + assert.deepEqual(sf.count(), 4); + }); + it("Returns the count of non NaN values in a int Series", function () { + const data = [ 20, 30, NaN, 2, NaN, 30, 21 ]; + const sf = new dfd.Series(data); + assert.deepEqual(sf.count(), 5); + }); + it("Returns the count of non NaN values in a float Series", function () { + const data = [ 20.1, 30.4, NaN, 2.1, NaN, 30.0, 21.3 ]; + const sf = new dfd.Series(data); + assert.deepEqual(sf.count(), 5); + }); + }); + + describe("std", function () { + it("Computes the standard of elements in a int series", function () { + const data1 = [ 30, 40, 3, 5 ]; + const sf = new dfd.Series(data1); + assert.deepEqual(sf.std(), 18.375708603116962); + }); + it("Computes the standard deviation of elements in a float series", function () { + const data1 = [ 30.1, 40.2, 3.1, 5.1 ]; + const sf = new dfd.Series(data1); + assert.deepEqual(sf.std(), 18.412925713566906); + }); + it("Computes the standard deviation of elements in a float series with missing values", function () { + const data1 = [ 30, 40, 3, 5, undefined ]; + const sf = new dfd.Series(data1); + assert.deepEqual(sf.std(), 18.375708603116962); + }); + }); + + describe("var", function () { + it("Computes the variance of elements in a int series", function () { + const data1 = [ 30, 40, 3, 5 ]; + const sf = new dfd.Series(data1); + assert.deepEqual(sf.var(), 337.6666666666667); + }); + it("Computes the variance of elements in a float series", function () { + const data1 = [ 30.1, 40.2, 3.1, 5.1 ]; + const sf = new dfd.Series(data1); + assert.deepEqual(sf.var(), 339.03583333333336); + }); + it("Computes the variance of elements in a int series with missing values", function () { + const data1 = [ 30, undefined, 40, 3, 5 ]; + const sf = new dfd.Series(data1); + assert.deepEqual(sf.var(), 337.6666666666667); + }); + }); + + describe("round", function () { + it("Rounds elements in a Series to nearest whole number", function () { + const data1 = [ 30.21091, 40.190901, 3.564, 5.0212 ]; + const sf = new dfd.Series(data1); + assert.deepEqual(sf.round().values, [ 30.2, 40.2, 3.6, 5 ]); + }); + it("Rounds elements in a Series to 1dp", function () { + const data1 = [ 30.21091, 40.190901, 3.564, 5.0212 ]; + const sf = new dfd.Series(data1); + assert.deepEqual(sf.round(1).values, [ 30.2, 40.2, 3.6, 5.0 ]); + }); + it("Rounds elements in a Series to 2dp", function () { + const data1 = [ 30.2191, 40.190901, 3.564, 5.0212 ]; + const sf = new dfd.Series(data1); + assert.deepEqual(sf.round(2).values, [ 30.22, 40.19, 3.56, 5.02 ]); + }); + + it("Rounds elements in a Series to 2dp inplace", function () { + const data1 = [ 30.2191, 40.190901, 3.564, 5.0212 ]; + const sf = new dfd.Series(data1); + sf.round(2, { inplace: true }); + assert.deepEqual(sf.values, [ 30.22, 40.19, 3.56, 5.02 ]); + }); + + it("Rounds elements in a Series with missing values to 2dp", function () { + const data1 = [ 30.2191, undefined, 3.564, NaN ]; + const sf = new dfd.Series(data1); + sf.round(2, { inplace: true }); + assert.deepEqual(sf.values, [ 30.22, undefined, 3.56, NaN ]); + }); + + }); + + describe("maximum", function () { + it("Returns the maximum of two series", function () { + const data1 = [ 30, 40, 3, 5 ]; + const data2 = [ 10, 41, 2, 0 ]; + const sf1 = new dfd.Series(data1); + const sf2 = new dfd.Series(data2); + assert.deepEqual(sf1.maximum(sf2).values, [ 30, 41, 3, 5 ]); + }); + it("Returns the maximum of series and Array", function () { + const data1 = [ 30, 40, 3, 5 ]; + const data2 = [ 10, 41, 2, 0 ]; + const sf1 = new dfd.Series(data1); + assert.deepEqual(sf1.maximum([ 10, 41, 2, 0 ]).values, [ 30, 41, 3, 5 ]); + }); + it("Returns the maximum of series and scalar", function () { + const data1 = [ 30, 40, 3, 5 ]; + const sf1 = new dfd.Series(data1); + assert.deepEqual(sf1.maximum(10).values, [ 30, 40, 10, 10 ]); + }); + it("Throws error on checking maximum of incompatible Series", function () { + const data1 = [ 30, 40, 3, 5 ]; + const data2 = [ 10, 41, 2 ]; + const sf1 = new dfd.Series(data1); + const sf2 = new dfd.Series(data2); + assert.throws( + () => { + sf1.maximum(sf2); + }, + Error, + "ParamError: Row length mismatch. Length of other (3), must be the same as Ndframe (4)" + ); + }); + }); + + describe("minimum", function () { + it("Returns the minimum of two series", function () { + const data1 = [ 30, 40, 3, 5 ]; + const data2 = [ 10, 41, 2, 0 ]; + const sf1 = new dfd.Series(data1); + const sf2 = new dfd.Series(data2); + assert.deepEqual(sf1.minimum(sf2).values, [ 10, 40, 2, 0 ]); + }); + it("Returns the minimum of series and array", function () { + const data1 = [ 30, 40, 3, 5 ]; + const data2 = [ 10, 41, 2, 0 ]; + const sf1 = new dfd.Series(data1); + assert.deepEqual(sf1.minimum(data2).values, [ 10, 40, 2, 0 ]); + }); + it("Returns the minimum of two series", function () { + const data1 = [ 30, 40, 3, 5 ]; + const sf1 = new dfd.Series(data1); + assert.deepEqual(sf1.minimum(10).values, [ 10, 10, 3, 5 ]); + }); + }); + + describe("isNa", function () { + it("Return a boolean same-sized object indicating if string Series contain NaN", function () { + const data1 = [ NaN, undefined, "girl", "Man" ]; + const sf = new dfd.Series(data1); + assert.deepEqual(sf.isNa().values, [ true, true, false, false ]); + }); + it("Return a boolean same-sized object indicating if float Series values are NaN", function () { + const data1 = [ 30.21091, NaN, 3.564, undefined ]; + const sf = new dfd.Series(data1); + assert.deepEqual(sf.isNa().values, [ false, true, false, true ]); + }); + it("Return a boolean same-sized object indicating if int Series values are NaN", function () { + const data1 = [ 30, 40, 3, 5, undefined, null ]; + const sf = new dfd.Series(data1); + assert.deepEqual(sf.isNa().values, [ + false, + false, + false, + false, + true, + true + ]); + }); + }); + + describe("fillNa", function () { + it("replace all NaN value with specified value", function () { + const data = [ NaN, 1, 2, 33, 4, null, 5, 6, 7, 8 ]; + const sf = new dfd.Series(data); + const sfVal = [ -999, 1, 2, 33, 4, -999, 5, 6, 7, 8 ]; + sf.fillNa(-999, { inplace: true }); + assert.deepEqual(sf.values, sfVal); + }); + it("replace all NaN value in string Series with specified value", function () { + const data = [ NaN, "boy", NaN, "hey", "Man", undefined ]; + const sf = new dfd.Series(data); + const sfVal = [ "filled", "boy", "filled", "hey", "Man", "filled" ]; + const sfFill = sf.fillNa("filled"); + assert.deepEqual(sfFill.values, sfVal); + }); + it("Data is in right format after filling", function () { + const data = [ NaN, "boy", NaN, "hey", "Man", undefined ]; + const sf = new dfd.Series(data); + const sfVal = [ "filled", "boy", "filled", "hey", "Man", "filled" ]; + const sfFill = sf.fillNa("filled"); + assert.deepEqual(sfFill.values, sfVal); + assert.deepEqual(sfFill.$dataIncolumnFormat, sfVal); + + }); + }); + + describe("sortValues", function () { + it("Sort values in a Series in ascending order (not inplace)", function () { + const sf = new dfd.Series([ 20, 30, 1, 2, 4, 57, 89, 0, 4 ]); + const result = [ 0, 1, 2, 4, 4, 20, 30, 57, 89 ]; + const sortedSf = sf.sortValues(); + assert.deepEqual(sortedSf.values, result); + assert.deepEqual(sortedSf.$dataIncolumnFormat, result); + + }); + it("confirms that sortValues in ascending order does not happen inplace", function () { + const sf = new dfd.Series([ 20, 30, 1, 2, 4, 57, 89, 0, 4 ]); + const result = [ 0, 1, 2, 4, 4, 20, 30, 57, 89 ]; + const expectedIndex = [ 7, 2, 3, 8, 4, 0, 1, 5, 6 ]; + sf.sortValues({ ascending:true, inplace: true }); + assert.deepEqual(sf.values, result); + assert.deepEqual(sf.index, expectedIndex); + }); + it("Sort values in a Series in Descending order", function () { + const sf = new dfd.Series([ 20, 30, 1, 2, 4, 57, 89, 0, 4 ]); + const result = [ 89, 57, 30, 20, 4, 4, 2, 1, 0 ]; + const sortedSf = sf.sortValues({ ascending: false }); + assert.deepEqual(sortedSf.values, result); + }); + it("confirms that sortValues in descending order happens inplace", function () { + const sf = new dfd.Series([ 20, 30, 1, 2, 4, 57, 89, 0, 4 ]); + const result = [ 89, 57, 30, 20, 4, 4, 2, 1, 0 ]; + sf.sortValues({ ascending: false, inplace: true }); + assert.deepEqual(sf.values, result); + }); + it("Confirms that series index is sorted in ascending order (not in inplace)", function () { + const sf = new dfd.Series([ 20, 30, 1, 2, 4, 57, 89, 0, 4 ]); + const result = [ 7, 2, 3, 8, 4, 0, 1, 5, 6 ]; + const sortedSf = sf.sortValues(); + assert.deepEqual(sortedSf.index, result); + }); + it("Confirms that series index is sorted in descending order (not in inplace)", function () { + const sf = new dfd.Series([ 20, 30, 1, 2, 4, 57, 89, 0, 4 ]); + const result = [ 6, 5, 1, 0, 4, 8, 3, 2, 7 ]; + const sortedSf = sf.sortValues({ ascending: false }); + assert.deepEqual(sortedSf.index, result); + }); + it("Sort string values in a Series", function () { + const sf = new dfd.Series([ "boy", "zebra", "girl", "man" ]); + const result = [ "boy", "girl", "man", "zebra" ]; + const sortedSf = sf.sortValues({ ascending: false }); + assert.deepEqual(sortedSf.values, result); + }); + }); + + describe("describe", function () { + it("Computes the descriptive statistics on an int Series", function () { + const data1 = [ 10, 45, 56, 25, 23, 20, 10 ]; + const sf = new dfd.Series(data1); + assert.deepEqual(sf.describe().round().values, [ + 7, + 27, + 17.4, + 10, + 23, + 56, + 302 + ]); + }); + it("Computes the descriptive statistics on a float Series", function () { + const data1 = [ 30.1, 40.2, 3.1, 5.1 ]; + const sf = new dfd.Series(data1); + assert.deepEqual(sf.describe().round().values, [ + 4, + 19.6, + 18.4, + 3.1, + 17.6, + 40.2, + 339 + ]); + }); + it("Computes the descriptive statistics on a float Series", function () { + const data1 = [ 30.1, 40.2, 3.1, 5.1 ]; + const sf = new dfd.Series(data1); + assert.deepEqual(sf.describe().index, [ + "count", + "mean", + "std", + "min", + "median", + "max", + "variance" + ]); + }); + }); + + describe("resetIndex", function () { + it("resets the index of a Series", function () { + const data = [ + { alpha: "A", count: 1 }, + { alpha: "B", count: 2 }, + { alpha: "C", count: 3 } + ]; + const df = new dfd.Series(data, { index: [ "one", "two", "three" ] }); + const dfReset = df.resetIndex(); + assert.deepEqual(dfReset.index, [ 0, 1, 2 ]); + }); + it("Reset the index of a Series created from an Array", function () { + const data = [ 1, 2, 3, 4, 5, 6 ]; + const df = new dfd.Series(data, { index: [ "one", "two", "three", "four", "five", "six" ] }); + const dfNew = df.resetIndex(); + assert.deepEqual(dfNew.index, [ 0, 1, 2, 3, 4, 5 ]); + }); + it("checks that the original series changed after reseting new index inplace", function () { + const data = [ + { index: "A", count: 1 }, + { index: "B", count: 2 }, + { index: "C", count: 3 } + ]; + const df = new dfd.Series(data, { index: [ "one", "two", "three" ] }); + df.resetIndex({ inplace: true }); + assert.deepEqual(df.index, [ 0, 1, 2 ]); + }); + }); + + describe("setIndex", function () { + it("sets the index of an Series", function () { + const data = [ + { alpha: "A", count: 1 }, + { alpha: "B", count: 2 }, + { alpha: "C", count: 3 } + ]; + const df = new dfd.Series(data); + const dfNew = df.setIndex([ "one", "two", "three" ]); + assert.deepEqual(dfNew.index, [ "one", "two", "three" ]); + assert.notDeepEqual(df.index, dfNew.index); + }); + it("checks that the original series is not modified after setting new index not-inplace", function () { + const data = [ + { alpha: "A", count: 1 }, + { alpha: "B", count: 2 }, + { alpha: "C", count: 3 } + ]; + const df = new dfd.Series(data); + const dfNew = df.setIndex([ "one", "two", "three" ]); + assert.notDeepEqual(df.index, dfNew.index); + }); + it("sets the index of an Series inplace", function () { + const data = [ 12, 2, 20, 50 ]; + const df = new dfd.Series(data); + df.setIndex([ "one", "two", "three", "four" ], { inplace: true }); + assert.deepEqual(df.index, [ "one", "two", "three", "four" ]); + }); + it("Throws index not found error", function () { + const data = [ 12, 2, 20, 50 ]; + const df = new dfd.Series(data); + assert.throws(() => { + df.setIndex(); + }, Error, + "Param Error: Must specify index array" + ); + }); + }); + + describe("Map", function () { + it("map series element to object keys", function () { + const sf = new dfd.Series([ 1, 2, 3, 4 ]); + const map = { 1: "ok", 2: "okie", 3: "frit", 4: "gop" }; + const rslt = [ "ok", "okie", "frit", "gop" ]; + assert.deepEqual(sf.map(map).values, rslt); + }); + it("map series element to object keys inplace", function () { + const sf = new dfd.Series([ 1, 2, 3, 4 ]); + const map = { 1: "ok", 2: "okie", 3: "frit", 4: "gop" }; + const rslt = [ "ok", "okie", "frit", "gop" ]; + sf.map(map, { inplace: true }); + assert.deepEqual(sf.values, rslt); + }); + it("map series element to incomplete object keys", function () { + const sf = new dfd.Series([ 1, 2, 3, 4 ]); + const map = { 1: "ok", 2: "okie", 4: "gop" }; + const rslt = [ "ok", "okie", 3, "gop" ]; + sf.map(map, { inplace: true }); + assert.deepEqual(sf.values, rslt); + }); + it("map series element to a function statement", function () { + const sf = new dfd.Series([ 1, 2, 3, 4 ]); + const func_map = (x) => { + return x + 1; + }; + const rslt = [ 2, 3, 4, 5 ]; + assert.deepEqual(sf.map(func_map).values, rslt); + }); + + it("map series element to a function statement inplace", function () { + const sf = new dfd.Series([ 1, 2, 3, 4 ]); + const func_map = (x) => { + return x + 1; + }; + const rslt = [ 2, 3, 4, 5 ]; + sf.map(func_map, { inplace: true }); + assert.deepEqual(sf.values, rslt); + }); + + it("map passes along the index", function () { + const sf = new dfd.Series([ 1, 2, 3, 4 ]); + const func_map = (x, i) => { + return x + i; + }; + const rslt = [ 1, 3, 5, 7 ]; + sf.map(func_map, { inplace: true }); + assert.deepEqual(sf.values, rslt); + }); + }); + + describe("Apply", function () { + it("apply a function to a series element", function () { + const sf = new dfd.Series([ 1, 2, 3, 4, 5, 6, 7, 8 ]); + const applyFunc = (x) => { + return x + x; + }; + + const rslt = [ 2, 4, 6, 8, 10, 12, 14, 16 ]; + assert.deepEqual(sf.apply(applyFunc).values, rslt); + }); + + it("apply a function to a series element inplace", function () { + const sf = new dfd.Series([ 1, 2, 3, 4, 5, 6, 7, 8 ]); + const applyFunc = (x) => { + return x + x; + }; + + const rslt = [ 2, 4, 6, 8, 10, 12, 14, 16 ]; + sf.apply(applyFunc, { inplace: true }); + assert.deepEqual(sf.values, rslt); + }); + }); + + describe("unique", function () { + it("returns the unique values in a Series of type int", function () { + const sf = new dfd.Series([ 1, 2, 3, 4, 5, 6, 7, 8, 1, 1, 22, 8, 5, 5, 5 ]); + const expected = [ 1, 2, 3, 4, 5, 6, 7, 8, 22 ]; + assert.deepEqual(sf.unique().values, expected); + }); + it("returns the unique values in a Series of type string", function () { + const sf = new dfd.Series([ "a", "a", "b", "c", "c", "d", "e", "d", "d", "e" ]); + const expected = [ "a", "b", "c", "d", "e" ]; + assert.deepEqual(sf.unique().values, expected); + }); + it("returns the unique values in a Series of type string", function () { + const sf = new dfd.Series([ "a", "a", "b", "c", "c", "d", "e", "d", "d", "e" ]); + const expected = [ "a", "b", "c", "d", "e" ]; + assert.deepEqual(sf.unique().values, expected); + }); + }); + + describe("nUnique", function () { + it("returns the number of unique values in a Series of type string", function () { + const sf = new dfd.Series([ "a", "a", "b", "c", "c", "d", "e", "d", "d", "e" ]); + assert.deepEqual(sf.nUnique(), 5); + }); + it("returns the number of unique values in a Series of type int32", function () { + const sf = new dfd.Series([ 1, 2, 3, 4, 3, 4, 3, 50, 4, 4, 4, 1 ]); + assert.deepEqual(sf.nUnique(), 5); + }); + }); + + describe("valueCounts", function () { + it("returns the unique values and their counts in a Series of type int", function () { + const sf = new dfd.Series([ 1, 2, 3, 4, 5, 6, 7, 8, 1, 1, 22, 8, 5, 5, 5 ]); + const expectedIndex = [ 1, 2, 3, 4, 5, 6, 7, 8, 22 ]; + const expectedVals = [ 3, 1, 1, 1, 4, 1, 1, 2, 1 ]; + assert.deepEqual(sf.valueCounts().values, expectedVals); + assert.deepEqual(sf.valueCounts().index, expectedIndex); + }); + it("returns the unique values and their counts in a Series of type string", function () { + const sf = new dfd.Series([ "a", "a", "b", "c", "c", "d", "e", "d", "d", "e" ]); + const expectedVals = [ 2, 1, 2, 3, 2 ]; + const expectedIndex = [ "a", "b", "c", "d", "e" ]; + assert.deepEqual(sf.valueCounts().values, expectedVals); + assert.deepEqual(sf.valueCounts().index, expectedIndex); + }); + it("returns the unique values and their counts in a Series of type boolean", function () { + const sf = new dfd.Series([ true, false, false, true, true ]); + const expectedVals = [ 3, 2 ]; + const expectedIndex = [ "true", "false" ]; + assert.deepEqual(sf.valueCounts().values, expectedVals); + assert.deepEqual(sf.valueCounts().index, expectedIndex); + }); + }); + + describe("abs", function () { + it("Returns the absolute values in Series", function () { + const data1 = [ -10, 45, 56, -25, 23, -20, 10 ]; + const sf = new dfd.Series(data1); + assert.deepEqual(sf.abs().values, [ 10, 45, 56, 25, 23, 20, 10 ]); + }); + it("Computes the descriptive statistics on a float Series", function () { + const data1 = [ -30.1, -40.2, -3.1, -5.1 ]; + const sf = new dfd.Series(data1); + assert.deepEqual(sf.abs().values, [ 30.1, 40.2, 3.1, 5.1 ]); + }); + }); + + describe("cumSum", function () { + it("Return cumulative sum over a Series", function () { + const data1 = [ 10, 45, 56, 25, 23, 20, 10 ]; + const sf = new dfd.Series(data1); + assert.deepEqual(sf.cumSum().values, [ 10, 55, 111, 136, 159, 179, 189 ]); + }); + it("Return cumulative sum over a Series inplace", function () { + const data1 = [ 10, 45, 56, 25, 23, 20, 10 ]; + const sf = new dfd.Series(data1); + sf.cumSum({ inplace: true }); + assert.deepEqual(sf.values, [ 10, 55, 111, 136, 159, 179, 189 ]); + }); + }); + + describe("cumMax", function () { + it("Return cumulative maximum over a Series", function () { + const data1 = [ 10, 45, 56, 25, 23, 20, 10 ]; + const sf = new dfd.Series(data1); + assert.deepEqual(sf.cumMax().values, [ 10, 45, 56, 56, 56, 56, 56 ]); + }); + it("Return cumulative maximum over a Series inplace", function () { + const data1 = [ 10, 45, 56, 25, 23, 20, 10 ]; + const sf = new dfd.Series(data1); + sf.cumMax({ inplace: true }); + assert.deepEqual(sf.values, [ 10, 45, 56, 56, 56, 56, 56 ]); + }); + }); + + describe("cumMin", function () { + it("Return cumulative minimum over a Series", function () { + const data1 = [ 10, 45, 56, 25, 23, 20, 10 ]; + const sf = new dfd.Series(data1); + assert.deepEqual(sf.cumMin().values, [ 10, 10, 10, 10, 10, 10, 10 ]); + }); + }); + + describe("cumProd", function () { + it("Return cumulative product over a Series", function () { + const data1 = [ 1, 2, 10, 3, 12, 14, 1 ]; + const sf = new dfd.Series(data1); + const rslt = [ 1, 2, 20, 60, 720, 10080, 10080 ]; + assert.deepEqual(sf.cumProd().values, rslt); + }); + }); + + describe("lt", function () { + it("Return Less than of series and other series (element-wise)", function () { + const data1 = [ 10, 45, 56, 25, 23, 20, 10 ]; + const data2 = [ 100, 450, 590, 5, 25, 2, 0 ]; + + const sf = new dfd.Series(data1); + const sf2 = new dfd.Series(data2); + const expected = [ true, true, true, false, true, false, false ]; + assert.deepEqual(sf.lt(sf2).values, expected); + }); + + it("Return Less than of series scalar (element-wise)", function () { + const data1 = [ 10, 45, 56, 25, 23, 20, 10 ]; + const sf = new dfd.Series(data1); + const expected = [ true, false, false, true, true, true, true ]; + assert.deepEqual(sf.lt(30).values, expected); + }); + + it("Correct index is returned after operation", function () { + const data1 = [ true, true, true, false, false ]; + const data2 = [ true, false, true, true, false ]; + const sf = new dfd.Series(data1, { index: [ "one", "two", "three", "four", "five" ] }); + + const expected = [ "one", "two", "three", "four", "five" ]; + assert.deepEqual(sf.lt(data2).index, expected); + }); + }); + + describe("gt", function () { + it("Return Greater than of series and other series (element-wise)", function () { + const data1 = [ 10, 45, 56, 25, 23, 20, 10 ]; + const data2 = [ 100, 450, 590, 5, 25, 2, 0 ]; + + const sf = new dfd.Series(data1); + const sf2 = new dfd.Series(data2); + const expected = [ false, false, false, true, false, true, true ]; + assert.deepEqual(sf.gt(sf2).values, expected); + }); + + it("Return Greater than of series scalar (element-wise)", function () { + const data1 = [ 10, 45, 56, 25, 23, 20, 10 ]; + const sf = new dfd.Series(data1); + const expected = [ false, true, true, false, false, false, false ]; + assert.deepEqual(sf.gt(30).values, expected); + }); + + it("Correct index is returned after operation", function () { + const data1 = [ true, true, true, false, false ]; + const data2 = [ true, false, true, true, false ]; + const sf = new dfd.Series(data1, { index: [ "one", "two", "three", "four", "five" ] }); + + const expected = [ "one", "two", "three", "four", "five" ]; + assert.deepEqual(sf.and(data2).index, expected); + }); + }); + + describe("le", function () { + it("Return Less than or Equal to of series and other series (element-wise)", function () { + const data1 = [ 10, 45, 56, 25, 23, 20, 10 ]; + const data2 = [ 100, 450, 590, 5, 25, 2, 0 ]; + + const sf = new dfd.Series(data1); + const sf2 = new dfd.Series(data2); + const expected = [ true, true, true, false, true, false, false ]; + assert.deepEqual(sf.le(sf2).values, expected); + }); + + it("Return Less than or Equal to of series scalar (element-wise)", function () { + const data1 = [ 10, 45, 56, 25, 23, 20, 10 ]; + const sf = new dfd.Series(data1); + const expected = [ true, false, false, true, true, true, true ]; + assert.deepEqual(sf.le(30).values, expected); + }); + }); + + describe("ge", function () { + it("Return Greater than or Equal to of series and other series (element-wise)", function () { + const data1 = [ 10, 45, 56, 25, 23, 20, 10 ]; + const data2 = [ 100, 450, 56, 5, 25, 20, 0 ]; + + const sf = new dfd.Series(data1); + const sf2 = new dfd.Series(data2); + const expected = [ false, false, true, true, false, true, true ]; + assert.deepEqual(sf.ge(sf2).values, expected); + }); + + it("Return Greater than or Equal to of series scalar (element-wise)", function () { + const data1 = [ 30, 45, 56, 25, 23, 20, 10 ]; + const sf = new dfd.Series(data1); + const expected = [ true, true, true, false, false, false, false ]; + assert.deepEqual(sf.ge(30).values, expected); + }); + }); + + describe("ne", function () { + it("Return Not Equal to of series and other series (element-wise)", function () { + const data1 = [ 10, 45, 56, 25, 23, 20, 10 ]; + const data2 = [ 10, 450, 56, 5, 25, 2, 0 ]; + + const sf = new dfd.Series(data1); + const sf2 = new dfd.Series(data2); + const expected = [ false, true, false, true, true, true, true ]; + assert.deepEqual(sf.ne(sf2).values, expected); + }); + + it("Return Not Equal to of series scalar (element-wise)", function () { + const data1 = [ 10, 30, 56, 30, 23, 20, 10 ]; + const sf = new dfd.Series(data1); + const expected = [ true, false, true, false, true, true, true ]; + assert.deepEqual(sf.ne(30).values, expected); + }); + }); + + describe("eq", function () { + it("Return Equal to of series and other series (element-wise)", function () { + const data1 = [ 10, 45, 56, 25, 23, 20, 10 ]; + const data2 = [ 100, 450, 590, 25, 25, 2, 0 ]; + + const sf = new dfd.Series(data1); + const sf2 = new dfd.Series(data2); + const expected = [ false, false, false, true, false, false, false ]; + assert.deepEqual(sf.eq(sf2).values, expected); + }); + + it("Return Equal to of series scalar (element-wise)", function () { + const data1 = [ 10, 45, 56, 25, 23, 20, 30 ]; + const sf = new dfd.Series(data1); + const expected = [ false, false, false, false, false, false, true ]; + assert.deepEqual(sf.eq(30).values, expected); + }); + }); + + describe("replace", function () { + it("Replace values with new value", function () { + const data1 = [ 10, 45, 56, 25, 23, 20, 10 ]; + const sf = new dfd.Series(data1); + const expected = [ -50, 45, 56, 25, 23, 20, -50 ]; + const dfRep = sf.replace(10, -50); + assert.deepEqual(dfRep.values, expected); + }); + + it("Replace values given in replace param with value (String type)", function () { + const data1 = [ "A", "A", "A", "B", "B", "C", "C", "D" ]; + const sf = new dfd.Series(data1); + const expected = [ "boy", "boy", "boy", "B", "B", "C", "C", "D" ]; + sf.replace("A", "boy", { inplace: true }); + assert.deepEqual(sf.values, expected); + }); + it("Replace values given in replace param with value (boolean type)", function () { + const data1 = [ true, true, false, false ]; + const sf = new dfd.Series(data1); + const expected = [ false, false, false, false ]; + sf.replace(true, false, { inplace: true }); + assert.deepEqual(sf.values, expected); + }); + it("Throw error on wrong param passed", function () { + const data1 = [ "A", "A", "A", "B", "B", "C", "C", "D" ]; + const sf = new dfd.Series(data1); + assert.throws( + () => { + sf.replace(null, "boy", { inplace: true }); + }, + Error, + "Params Error: Must specify param 'oldValue' to replace" + ); + }); + }); + + describe("dropDuplicates", function () { + it("Return Series with duplicate values removed (Default, first values kept)", function () { + const data1 = [ 10, 45, 56, 10, 23, 20, 10, 10 ]; + const sf = new dfd.Series(data1); + const expected = [ 10, 45, 56, 23, 20 ]; + const expectedIndex = [ 0, 1, 2, 4, 5 ]; + const df_drop = sf.dropDuplicates(); + assert.deepEqual(df_drop.values, expected); + assert.deepEqual(df_drop.index, expectedIndex); + }); + + it("Return Series with duplicate values removed (last values kept)", function () { + const data1 = [ 10, 45, 56, 10, 23, 20, 10, 10 ]; + const sf = new dfd.Series(data1); + const expected = [ 45, 56, 23, 20, 10 ]; + const expectedIndex = [ 1, 2, 4, 5, 7 ]; + const df_drop = sf.dropDuplicates({ keep: "last" }); + assert.deepEqual(df_drop.values, expected); + assert.deepEqual(df_drop.index, expectedIndex); + }); + + it("Return Series with duplicate values removed (String)", function () { + const data1 = [ "A", "A", "A", "B", "B", "C", "C", "D" ]; + const sf = new dfd.Series(data1); + const expected = [ "A", "B", "C", "D" ]; + const expectedIndex = [ 0, 3, 5, 7 ]; + sf.dropDuplicates({ keep: "first", inplace: true }); + assert.deepEqual(sf.values, expected); + assert.deepEqual(sf.index, expectedIndex); + }); + }); + + describe("dropNa", function () { + it("Return a new dfd.Series with missing values removed (Int)", function () { + const data1 = [ 10, 45, undefined, 10, 23, 20, undefined, 10 ]; + const sf = new dfd.Series(data1); + const expected = [ 10, 45, 10, 23, 20, 10 ]; + const expectedIndex = [ 0, 1, 3, 4, 5, 7 ]; + const sfDrop = sf.dropNa(); + assert.deepEqual(sfDrop.values, expected); + assert.deepEqual(sfDrop.index, expectedIndex); + assert.deepEqual(sfDrop.shape, [ 6, 1 ]); + }); + + it("Return a new dfd.Series with missing values removed (String)", function () { + const data1 = [ "A", NaN, "A", "B", "B", NaN, "C", undefined ]; + const sf = new dfd.Series(data1); + const expected = [ "A", "A", "B", "B", "C" ]; + const expectedIndex = [ 0, 2, 3, 4, 6 ]; + + sf.dropNa({ inplace: true }); + assert.deepEqual(sf.values, expected); + assert.deepEqual(sf.index, expectedIndex); + assert.deepEqual(sf.shape, [ 5, 1 ]); + }); + }); + + describe("argSort", function () { + it("Return the integer indices that would sort the Series values", function () { + const data1 = [ 10, 45, 20, 10, 23, 20, 30, 11 ]; + const sf = new dfd.Series(data1); + const expected = [ 3, 0, 7, 5, 2, 4, 6, 1 ]; + const sf_sort = sf.argSort(); + assert.deepEqual(sf_sort.values, expected); + }); + + it("Return the integer indices that would sort the Series values", function () { + const data1 = [ 10.22, 4.5, 2.0, 10, 23.23, 20.1, 30, 11 ]; + const sf = new dfd.Series(data1); + const expected = [ 6, 4, 5, 7, 0, 3, 1, 2 ]; + const sf_sort = sf.argSort({ ascending: false }); + assert.deepEqual(sf_sort.values, expected); + }); + }); + + describe("argMax", function () { + it("Return int position of the largest value in the Series.", function () { + const data1 = [ 10, 45, 20, 10, 23, 20, 30, 11 ]; + const sf = new dfd.Series(data1); + const expected = 1; + const argMax = sf.argMax(); + assert.deepEqual(argMax, expected); + }); + + it("Return int position of the largest value in the Float Series.", function () { + const data1 = [ 10.22, 4.5, 2.0, 10, 23.23, 20.1, 30, 11 ]; + const sf = new dfd.Series(data1); + const expected = 6; + const argMax = sf.argMax(); + assert.deepEqual(argMax, expected); + }); + }); + + describe("argMin", function () { + it("Return int position of the smallest value in the Series", function () { + const data1 = [ 10, 45, 20, 122, 23, 20, 30, 11 ]; + const sf = new dfd.Series(data1); + const expected = 0; + const argMin = sf.argMin(); + assert.deepEqual(argMin, expected); + }); + + it("Return int position of the smallest value in a Float Series", function () { + const data1 = [ 10.22, 4.5, 2.0, 10, 23.23, 20.1, 30, 11 ]; + const sf = new dfd.Series(data1); + const expected = 2; + const argMin = sf.argMin(); + assert.deepEqual(argMin, expected); + }); + }); + + describe("Str", function () { + it("Converts all characters to lowercase inplace", function () { + const data = [ "lower", "CAPITALS", "this is a sentence", "SwApCaSe" ]; + const res = [ "lower", "capitals", "this is a sentence", "swapcase" ]; + const sf = new dfd.Series(data); + sf.str.toLowerCase({ inplace: true }); + assert.deepEqual(sf.values, res); + }); + it("Converts all characters to lowercase", function () { + const data = [ "lower", "CAPITALS", "this is a sentence", "SwApCaSe" ]; + const res = [ "lower", "capitals", "this is a sentence", "swapcase" ]; + const sf = new dfd.Series(data); + assert.deepEqual(sf.str.toLowerCase().values, res); + }); + it("Converts all characters to capital case.", function () { + const data = [ "lower", "CAPITALS", "this is a sentence", "SwApCaSe" ]; + const res = [ "Lower", "Capitals", "This is a sentence", "Swapcase" ]; + const sf = new dfd.Series(data); + assert.deepEqual(sf.str.capitalize().values, res); + }); + + it("Returns the character at the specified index (position)", function () { + const data = [ "lower", "CAPITALS", "this is a sentence", "SwApCaSe" ]; + const res = [ "w", "P", "i", "A" ]; + const sf = new dfd.Series(data); + assert.deepEqual(sf.str.charAt(2).values, res); + }); + + it("Throws error on concat of numeric series", function () { + const data = [ 1, 2, 3, 4, 5, 6 ]; + const sf = new dfd.Series(data); + assert.throws( + () => { + sf.str.concat("20", 1); + }, + Error, + "Cannot call accessor str on non-string type" + ); + + }); + }); + + describe("dt", function () { + it("check month generated", function () { + const data = [ "02Sep2019", "03Dec2019", "04Jan2019" ]; + const sf = new dfd.Series(data); + const expected = [ 8, 11, 0 ]; + assert.deepEqual(sf.dt.month().values, expected); + }); + + it("check month Name generated", function () { + const data = [ "06-30-2019", "07-29-2019", "08-28-2019" ]; + const sf = new dfd.Series(data); + const expected = [ "June", "July", "August" ]; + assert.deepEqual(sf.dt.monthName().values, expected); + }); + + it("check days of the weeks generated", function () { + const data = [ "06-30-2019", "07-29-2019", "08-28-2019" ]; + const sf = new dfd.Series(data); + const expected = [ "Sunday", "Monday", "Wednesday" ]; + assert.deepEqual(sf.dt.dayOfWeekName().values, expected); + }); + + it("check day of the month generated", function () { + const data = [ "06-30-2019", "07-29-2019", "08-28-2019" ]; + const sf = new dfd.Series(data); + const expected = [ 30, 29, 28 ]; + assert.deepEqual(sf.dt.dayOfMonth().values, expected); + }); + }); + + describe("astype", function () { + it("set type of float column to int", function () { + const data = [ -20.1, 30, 47.3, -20 ]; + const ndframe = new dfd.Series(data); + const df = ndframe.asType("int32"); + + assert.deepEqual(df.dtypes[0], "int32"); + assert.deepEqual(df.values, [ -20, 30, 47, -20 ]); + }); + it("set type of int column to float", function () { + const data = [ 34, -4, 5, 6 ]; + const ndframe = new dfd.Series(data); + const df = ndframe.asType("float32"); + assert.deepEqual(df.dtypes[0], "float32"); + assert.deepEqual(df.values, [ 34, -4, 5, 6 ]); + }); + it("set type of string column to int", function () { + const data = [ "20.1", "21", "23.4", "50.78" ]; + const ndframe = new dfd.Series(data); + const df = ndframe.asType("int32"); + + assert.deepEqual(df.dtypes[0], "int32"); + assert.deepEqual(df.values, [ 20, 21, 23, 50 ]); + }); + it("set type of string column to float", function () { + const data = [ "20.1", "21", "23.4", "50.78" ]; + const ndframe = new dfd.Series(data); + const df = ndframe.asType("float32"); + + assert.deepEqual(df.dtypes[0], "float32"); + assert.deepEqual(df.values, [ 20.1, 21, 23.4, 50.78 ]); + }); + it("set type of float column to string", function () { + const data = [ -20.1, 30, 47.3, -20 ]; + const ndframe = new dfd.Series(data); + const df = ndframe.asType("string"); + assert.deepEqual(df.dtypes[0], "string"); + assert.deepEqual(df.values, [ "-20.1", "30", "47.3", "-20" ]); + }); + it("set type of int column to string", function () { + const data = [ 34, -4, 5, 6 ]; + const ndframe = new dfd.Series(data); + const df = ndframe.asType("string"); + assert.deepEqual(df.dtypes[0], "string"); + assert.deepEqual(df.values, [ "34", "-4", "5", "6" ]); + }); + it("set type of int column to string inplace", function () { + const data = [ 34, -4, 5, 6 ]; + const ndframe = new dfd.Series(data); + ndframe.asType("string", { inplace: true }); + assert.deepEqual(ndframe.dtypes[0], "string"); + assert.deepEqual(ndframe.values, [ "34", "-4", "5", "6" ]); + }); + }); + + describe("append", function () { + it("Add a new single value to the end of a Series inplace", function () { + const data = [ 1, 2, 3, 4, "a", "b", "c" ]; + const sf = new dfd.Series(data); + const expected_val = [ 1, 2, 3, 4, "a", "b", "c", "d" ]; + sf.append("d", 7, { inplace: true }); + assert.deepEqual(sf.values, expected_val); + }); + it("Add a new array of values to the end of a Series inplace", function () { + const data = [ 1, 2, 3, 4 ]; + const to_add = [ "a", "b", "c" ]; + const index = [ 4, 5, 6 ]; + const sf = new dfd.Series(data); + const expected_val = [ 1, 2, 3, 4, "a", "b", "c" ]; + sf.append(to_add, index, { inplace: true }); + assert.deepEqual(sf.values, expected_val); + }); + it("Add a Series to the end of another Series inplace", function () { + const sf1 = new dfd.Series([ 1, 2, 3, 4 ]); + const sf2 = new dfd.Series([ "a", "b", "c" ]); + const index = [ 4, 5, 6 ]; + const expected_val = [ 1, 2, 3, 4, "a", "b", "c" ]; + sf1.append(sf2, index, { inplace: true }); + assert.deepEqual(sf1.values, expected_val); + }); + it("Add a new single value to the end of a Series", function () { + const data = [ 1, 2, 3, 4, "a", "b", "c" ]; + const sf = new dfd.Series(data); + const expected_val = [ 1, 2, 3, 4, "a", "b", "c", "d" ]; + const sf2 = sf.append("d", 7); + assert.deepEqual(sf2.values, expected_val); + }); + it("Add a new array of values to the end of a Series", function () { + const data = [ 1, 2, 3, 4 ]; + const to_add = [ "a", "b", "c" ]; + const index = [ 4, 5, 6 ]; + const sf = new dfd.Series(data); + const expected_val = [ 1, 2, 3, 4, "a", "b", "c" ]; + const sf2 = sf.append(to_add, index); + assert.deepEqual(sf2.values, expected_val); + }); + it("Add a Series to the end of another Series", function () { + const sf1 = new dfd.Series([ 1, 2, 3, 4 ]); + const sf2 = new dfd.Series([ "a", "b", "c" ]); + const index = [ 4, 5, 6 ]; + const expected_val = [ 1, 2, 3, 4, "a", "b", "c" ]; + const sf3 = sf1.append(sf2, index); + assert.deepEqual(sf3.values, expected_val); + }); + it("Confirm index Change after append", function () { + const sf1 = new dfd.Series([ 1, 2, 3, 4 ]); + const sf2 = new dfd.Series([ "a", "b", "c" ]); + const index = [ 4, 5, 6 ]; + const sf3 = sf1.append(sf2, index); + assert.deepEqual(sf3.index, [ 0, 1, 2, 3, 4, 5, 6 ]); + }); + it("Confirm index Change after append inplace", function () { + const sf1 = new dfd.Series([ 1, 2, 3, 4 ]); + const sf2 = new dfd.Series([ "a", "b", "c" ]); + const index = [ 4, 5, 6 ]; + sf1.append(sf2, index, { inplace: true }); + assert.deepEqual(sf1.index, [ 0, 1, 2, 3, 4, 5, 6 ]); + }); + }); + + describe("and", function () { + it("Return logical AND of series and other series (element-wise)", function () { + const data1 = [ true, true, true, false, false ]; + const data2 = [ true, false, true, true, false ]; + const sf = new dfd.Series(data1); + const sf2 = new dfd.Series(data2); + + const expected = [ true, false, true, false, false ]; + assert.deepEqual(sf.and(sf2).values, expected); + }); + + it("Return logical AND of series and other scalar", function () { + const data1 = [ true, true, true, false, false ]; + const sf = new dfd.Series(data1); + + const expected = [ true, true, true, false, false ]; + assert.deepEqual(sf.and(true).values, expected); + }); + + it("Return logical AND of series and other array (element-wise)", function () { + const data1 = [ true, true, true, false, false ]; + const data2 = [ true, false, true, true, false ]; + const sf = new dfd.Series(data1); + + const expected = [ true, false, true, false, false ]; + assert.deepEqual(sf.and(data2).values, expected); + }); + + it("Chaining works for logical AND of series and other array (element-wise)", function () { + const data1 = [ true, true, true, false, false ]; + const data2 = [ true, false, true, true, false ]; + const data3 = [ true, false, false, true, false ]; + + const sf = new dfd.Series(data1); + const expected = [ true, false, false, false, false ]; + assert.deepEqual(sf.and(data2).and(data3).values, expected); + }); + + it("Chaining works for logical AND and OR combined", function () { + const data1 = [ true, true, true, false, false ]; + const data2 = [ true, false, true, true, false ]; + const data3 = [ true, false, false, true, false ]; + + const sf = new dfd.Series(data1); + const expected = [ true, false, true, true, false ]; + assert.deepEqual(sf.and(data2).or(data3).values, expected); + }); + it("Correct index is returned after operation", function () { + const data1 = [ true, true, true, false, false ]; + const data2 = [ true, false, true, true, false ]; + const sf = new dfd.Series(data1, { index: [ "one", "two", "three", "four", "five" ] }); + + const expected = [ "one", "two", "three", "four", "five" ]; + assert.deepEqual(sf.and(data2).index, expected); + }); + }); + + describe("or", function () { + it("Return logical OR of series and other series (element-wise)", function () { + const data1 = [ true, true, true, false, false ]; + const data2 = [ true, false, true, true, false ]; + const sf = new dfd.Series(data1); + const sf2 = new dfd.Series(data2); + + const expected = [ true, true, true, true, false ]; + assert.deepEqual(sf.or(sf2).values, expected); + }); + + it("Return logical OR of series and other scalar", function () { + const data1 = [ true, true, true, false, false ]; + const sf = new dfd.Series(data1); + + const expected = [ true, true, true, true, true ]; + assert.deepEqual(sf.or(true).values, expected); + }); + + it("Return logical OR of series and other array (element-wise)", function () { + const data1 = [ true, true, true, false, false ]; + const data2 = [ true, false, true, true, false ]; + const sf = new dfd.Series(data1); + + const expected = [ true, true, true, true, false ]; + assert.deepEqual(sf.or(data2).values, expected); + }); + }); + + describe("getDummies", function () { + it("getDummies works on Series", function () { + + const data = [ "dog", "male", "female", "male", "female", "male", "dog" ]; + const sf = new dfd.Series(data); + const df = sf.getDummies({ prefix: "test", prefixSeparator: "/" }); + + const dfValues = [ + [ 1, 0, 0 ], + [ 0, 1, 0 ], + [ 0, 0, 1 ], + [ 0, 1, 0 ], + [ 0, 0, 1 ], + [ 0, 1, 0 ], + [ 1, 0, 0 ] + ]; + const dfColumns = [ 'test/dog', 'test/male', 'test/female' ]; + assert.deepEqual(df.values, dfValues); + assert.deepEqual(df.columns, dfColumns); + }); + it("getDummies works on Series with default prefix and prefixSeperator", function () { + + const data = [ "dog", "male", "female", "male", "female", "male", "dog" ]; + const sf = new dfd.Series(data); + const df = sf.getDummies(); + + const dfValues = [ + [ 1, 0, 0 ], + [ 0, 1, 0 ], + [ 0, 0, 1 ], + [ 0, 1, 0 ], + [ 0, 0, 1 ], + [ 0, 1, 0 ], + [ 1, 0, 0 ] + ]; + const dfColumns = [ '0_dog', '1_male', '2_female' ]; + assert.deepEqual(df.values, dfValues); + assert.deepEqual(df.columns, dfColumns); + }); + + }); +}); diff --git a/danfojs-browser/tests/core/strings.js b/src/danfojs-browser/tests/core/strings.test.js similarity index 85% rename from danfojs-browser/tests/core/strings.js rename to src/danfojs-browser/tests/core/strings.test.js index 96738afe..74c16108 100644 --- a/danfojs-browser/tests/core/strings.js +++ b/src/danfojs-browser/tests/core/strings.test.js @@ -1,29 +1,29 @@ - +/* eslint-disable no-undef */ describe("Str", function () { it("Converts all characters to lowercase.", function () { let data = [ 'lower', 'CAPITALS', 'this is a sentence', 'SwApCaSe' ]; let res = [ 'lower', 'capitals', 'this is a sentence', 'swapcase' ]; - let str = new dfd.Str(new dfd.Series(data)); + let str = new dfd.Series(data).str; assert.deepEqual(str.toLowerCase().values, res); }); it("Converts all characters to uppercase.", function () { let data = [ 'lower', 'CAPITALS', 'this is a sentence', 'SwApCaSe' ]; let res = [ 'LOWER', 'CAPITALS', 'THIS IS A SENTENCE', 'SWAPCASE' ]; - let str = new dfd.Str(new dfd.Series(data)); + let str = new dfd.Series(data).str; assert.deepEqual(str.toUpperCase().values, res); }); it("Converts all characters to capital case.", function () { let data = [ 'lower', 'CAPITALS', 'this is a sentence', 'SwApCaSe' ]; let res = [ 'Lower', 'Capitals', 'This is a sentence', 'Swapcase' ]; - let str = new dfd.Str(new dfd.Series(data)); + let str = new dfd.Series(data).str; assert.deepEqual(str.capitalize().values, res); }); it("Returns the character at the specified index (position)", function () { let data = [ 'lower', 'CAPITALS', 'this is a sentence', 'SwApCaSe' ]; let res = [ "w", "P", "i", "A" ]; - let str = new dfd.Str(new dfd.Series(data)); + let str = new dfd.Series(data).str; assert.deepEqual(str.charAt(2).values, res); }); it("Joins two or more strings. 0 joins from the start", function () { @@ -31,7 +31,7 @@ describe("Str", function () { let data2 = [ 'XX', 'YY', 'BB', '01' ]; let res = [ 'XXlower', 'YYCAPITALS', 'BBsentence', '01SwApCaSe' ]; - let str = new dfd.Str(new dfd.Series(data)); + let str = new dfd.Series(data).str; assert.deepEqual(str.concat(data2, 0).values, res); }); @@ -40,125 +40,125 @@ describe("Str", function () { let data2 = [ 'XX', 'YY', 'BB', '01' ]; let res = [ 'lowerXX', 'CAPITALSYY', 'sentenceBB', 'SwApCaSe01' ]; - let str = new dfd.Str(new dfd.Series(data)); + let str = new dfd.Series(data).str; assert.deepEqual(str.concat(data2, 1).values, res); }); it("Joins two arrays of strings. 0 joins from the start", function () { let data = [ 'lower', 'CAPITALS', 'sentence', 'SwApCaSe' ]; let res = [ 'prelower', 'preCAPITALS', 'presentence', 'preSwApCaSe' ]; - let str = new dfd.Str(new dfd.Series(data)); + let str = new dfd.Series(data).str; assert.deepEqual(str.concat("pre", 0).values, res); }); it("Joins two or more strings. 1 joins from the end", function () { let data = [ 'lower', 'CAPITALS', 'this is a sentence', 'SwApCaSe' ]; let res = [ 'lowerpost', 'CAPITALSpost', 'this is a sentencepost', 'SwApCaSepost' ]; - let str = new dfd.Str(new dfd.Series(data)); + let str = new dfd.Series(data).str; assert.deepEqual(str.concat("post", 1).values, res); }); it("Checks whether a string begins with specified characters", function () { let data = [ 'lower', 'CAPITALS', 'this is a sentence', 'SwApCaSe' ]; let res = [ true, false, false, false ]; - let str = new dfd.Str(new dfd.Series(data)); + let str = new dfd.Series(data).str; assert.deepEqual(str.startsWith("l").values, res); }); it("Checks whether a string ends with specified characters", function () { let data = [ 'lower', 'CAPITALS', 'this is a sentence', 'SwApCaSe' ]; let res = [ false, false, true, true ]; - let str = new dfd.Str(new dfd.Series(data)); + let str = new dfd.Series(data).str; assert.deepEqual(str.endsWith("e").values, res); }); it("Checks whether a string contains the specified string/characters", function () { let data = [ 'lower', 'CAPITALS', 'this is a sentence', 'SwApCaSe' ]; let res = [ false, false, true, false ]; - let str = new dfd.Str(new dfd.Series(data)); + let str = new dfd.Series(data).str; assert.deepEqual(str.includes("sentence").values, res); }); it("Returns the position of the first found occurrence of a specified value in a string", function () { let data = [ 'lower', 'CAPITALS', 'this is a sentence', 'SwApCaSe' ]; let res = [ -1, 0, -1, 4 ]; - let str = new dfd.Str(new dfd.Series(data)); + let str = new dfd.Series(data).str; assert.deepEqual(str.indexOf("C").values, res); }); it("Returns the position of the last found occurrence of a specified value in a string", function () { let data = [ 'lower', 'CAPITALS', 'this is a sentence', 'SwApCaSe' ]; let res = [ 4, -1, -1, -1 ]; - let str = new dfd.Str(new dfd.Series(data)); + let str = new dfd.Series(data).str; assert.deepEqual(str.lastIndexOf("r").values, res); }); it("Returns a new string with a specified number of copies of an existing string", function () { let data = [ 'a', 'b', 'c', 'd' ]; let res = [ 'aaa', 'bbb', 'ccc', 'ddd' ]; - let str = new dfd.Str(new dfd.Series(data)); + let str = new dfd.Series(data).str; assert.deepEqual(str.repeat(3).values, res); }); it("Searches a string for a specified value, or a regular expression, and returns a new string where the specified values are replaced", function () { let data = [ 'lower', 'CAPITALS', 'this is a sentence', 'SwApCaSe' ]; let res = [ 'lower', 'CXXXPITALS', 'this is a sentence', 'SwXXXpCaSe' ]; - let str = new dfd.Str(new dfd.Series(data)); + let str = new dfd.Series(data).str; assert.deepEqual(str.replace("A", "XXX").values, res); }); it("Searches a string for a specified value, or regular expression, and returns the position of the match", function () { let data = [ 'lower', 'CAPITALS', 'this is a sentence', 'SwApCaSe' ]; let res = [ -1, 1, -1, 2 ]; - let str = new dfd.Str(new dfd.Series(data)); + let str = new dfd.Series(data).str; assert.deepEqual(str.search("A").values, res); }); it("Extracts a part of a string and returns a new string", function () { let data = [ 'lower', 'CAPITALS', 'this is a sentence', 'SwApCaSe' ]; let res = [ 'ow', 'AP', 'hi', 'wA' ]; - let str = new dfd.Str(new dfd.Series(data)); + let str = new dfd.Series(data).str; assert.deepEqual(str.slice(1, 3).values, res); }); it("Splits a string into an array of substrings", function () { let data = [ 'lower part', 'CAPITALS city', 'is a sentence', 'SwAp CaSe' ]; let res = [ "lower,part", "CAPITALS,city", "is,a,sentence", "SwAp,CaSe" ]; - let str = new dfd.Str(new dfd.Series(data)); + let str = new dfd.Series(data).str; assert.deepEqual(str.split(" ").values, res); }); it("Extracts the characters from a string, beginning at a specified start position, and through the specified number of character", function () { let data = [ 'lower part', 'CAPITALS city', 'this is a sentence', 'SwAp CaSe' ]; let res = [ " p", "AL", "is", "Ca" ]; - let str = new dfd.Str(new dfd.Series(data)); + let str = new dfd.Series(data).str; assert.deepEqual(str.substr(5, 2).values, res); }); it("Extracts the characters from a string, between two specified indices", function () { let data = [ 'lower part', 'CAPITALS city', 'this is a sentence', 'SwAp CaSe' ]; let res = [ "w", "P", "i", "A" ]; - let str = new dfd.Str(new dfd.Series(data)); + let str = new dfd.Series(data).str; assert.deepEqual(str.substring(2, 3).values, res); }); it("Removes whitespace from both ends of a string", function () { let data = [ 'lower part ', ' CAPITALS city', ' this is a sentence', ' SwAp CaSe' ]; let res = [ 'lower part', 'CAPITALS city', 'this is a sentence', 'SwAp CaSe' ]; - let str = new dfd.Str(new dfd.Series(data)); + let str = new dfd.Series(data).str; assert.deepEqual(str.trim().values, res); }); it("Joins strings to specified value", function () { let data = [ 'lower part', 'CAPITALS city', 'this is a sentence', 'SwAp CaSe' ]; let res = [ 'lower part,new', 'CAPITALS city,new', 'this is a sentence,new', 'SwAp CaSe,new' ]; - let str = new dfd.Str(new dfd.Series(data)); + let str = new dfd.Series(data).str; assert.deepEqual(str.join("new", ",").values, res); }); it("Counts the number of characters in string", function () { let data = [ 'lower part', 'CAPITALS', 'this is a sentence', 'SwApCaSe' ]; let res = [ 10, 8, 18, 8 ]; - let str = new dfd.Str(new dfd.Series(data)); + let str = new dfd.Series(data).str; assert.deepEqual(str.len().values, res); }); diff --git a/src/danfojs-browser/tests/io/csv.reader.test.js b/src/danfojs-browser/tests/io/csv.reader.test.js new file mode 100644 index 00000000..34aad9f7 --- /dev/null +++ b/src/danfojs-browser/tests/io/csv.reader.test.js @@ -0,0 +1,108 @@ +/* eslint-disable no-undef */ + +describe("readCSV", function () { + this.timeout(10000); + it("Read remote csv file works", async function () { + const remoteFile = "https://raw.githubusercontent.com/opensource9ja/danfojs/dev/danfojs-node/tests/samples/titanic.csv"; + let df = await dfd.readCSV(remoteFile, { header: true, preview: 5 }); + assert.deepEqual(df.shape, [ 5, 8 ]); + assert.deepEqual(df.columns, [ + 'Survived', + 'Pclass', + 'Name', + 'Sex', + 'Age', + 'Siblings/Spouses Aboard', + 'Parents/Children Aboard', + 'Fare' + ]); + assert.deepEqual(df.dtypes, [ + 'int32', 'int32', + 'string', 'string', + 'int32', 'int32', + 'int32', 'float32' + ]); + }); + + it("Read remote csv file with config works", async function () { + const remoteFile = "https://raw.githubusercontent.com/opensource9ja/danfojs/dev/danfojs-node/tests/samples/titanic.csv"; + const frameConfig = { + columns: [ + 'A', + 'B', + 'C', + 'D', + 'E', + 'F', + 'G', + 'H' + ] + }; + let df = await dfd.readCSV(remoteFile, { header: true, preview: 5, frameConfig }); + assert.deepEqual(df.shape, [ 5, 8 ]); + assert.deepEqual(df.columns, [ + 'A', + 'B', + 'C', + 'D', + 'E', + 'F', + 'G', + 'H' + ]); + assert.deepEqual(df.dtypes, [ + 'int32', 'int32', + 'string', 'string', + 'int32', 'int32', + 'int32', 'float32' + ]); + }); + +}); + +// describe("streamCSV", function () { +// this.timeout(100000); + +// it("Streaming remote csv file with callback works", async function () { +// const remoteFile = "https://raw.githubusercontent.com/opensource9ja/danfojs/dev/danfojs-node/tests/samples/titanic.csv"; +// await dfd.streamCSV(remoteFile, (df) => { +// if (df) { +// assert.deepEqual(df.shape, [ 1, 8 ]); +// assert.deepEqual(df.columns, [ +// 'Survived', +// 'Pclass', +// 'Name', +// 'Sex', +// 'Age', +// 'Siblings/Spouses Aboard', +// 'Parents/Children Aboard', +// 'Fare' +// ]); +// } else { +// assert.deepEqual(df, null); +// } +// }, { header: true, preview: 3 }); + +// }); + +// }); + + +describe("toCSV", function () { + it("toCSV works", async function () { + const data = [ [ 1, 2, 3, 4 ], [ 5, 6, 7, 8 ], [ 9, 10, 11, 12 ] ]; + let df = new dfd.DataFrame(data, { columns: [ "a", "b", "c", "d" ] }); + assert.deepEqual(dfd.toCSV(df, { download: false }), `a,b,c,d\n1,2,3,4\n5,6,7,8\n9,10,11,12\n`); + }); + it("toCSV works for specified seperator", async function () { + const data = [ [ 1, 2, 3, 4 ], [ 5, 6, 7, 8 ], [ 9, 10, 11, 12 ] ]; + let df = new dfd.DataFrame(data, { columns: [ "a", "b", "c", "d" ] }); + assert.deepEqual(dfd.toCSV(df, { sep: "+", download: false }), `a+b+c+d\n1+2+3+4\n5+6+7+8\n9+10+11+12\n`); + }); + it("toCSV works for series", async function () { + const data = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ]; + let df = new dfd.Series(data); + assert.deepEqual(dfd.toCSV(df, { sep: "+", download: false }), `1+2+3+4+5+6+7+8+9+10+11+12`); + }); + +}); diff --git a/src/danfojs-browser/tests/io/excel.reader.test.js b/src/danfojs-browser/tests/io/excel.reader.test.js new file mode 100644 index 00000000..4c4735e9 --- /dev/null +++ b/src/danfojs-browser/tests/io/excel.reader.test.js @@ -0,0 +1,45 @@ +/* eslint-disable no-undef */ + +describe("readExcel", function () { + this.timeout(100000); + it("Read remote excel file works", async function () { + const remoteFile = "https://raw.githubusercontent.com/opensource9ja/danfojs/dev/danfojs-node/tests/samples/SampleData.xlsx"; + let df = await dfd.readExcel(remoteFile); + assert.deepEqual(df.columns, [ + 'Year', + 'Stocks', + 'T.Bills', + 'T.Bonds' + ]); + assert.deepEqual(df.dtypes, [ + 'int32', 'float32', + 'float32', 'float32' + ]); + assert.deepEqual(df.shape, [ 82, 4 ]); + }); + + it("Read remote excel file with config works", async function () { + const remoteFile = "https://raw.githubusercontent.com/opensource9ja/danfojs/dev/danfojs-node/tests/samples/SampleData.xlsx"; + const frameConfig = { + columns: [ + 'A', + 'B', + 'C', + 'D' + ] + }; + let df = await dfd.readExcel(remoteFile, { frameConfig }); + assert.deepEqual(df.columns, [ + 'A', + 'B', + 'C', + 'D' + ]); + assert.deepEqual(df.dtypes, [ + 'int32', 'float32', + 'float32', 'float32' + ]); + assert.deepEqual(df.shape, [ 82, 4 ]); + }); +}); + diff --git a/src/danfojs-browser/tests/io/json.reader.test.js b/src/danfojs-browser/tests/io/json.reader.test.js new file mode 100644 index 00000000..203b84f4 --- /dev/null +++ b/src/danfojs-browser/tests/io/json.reader.test.js @@ -0,0 +1,76 @@ +/* eslint-disable no-undef */ + +describe("readJSON", function () { + this.timeout(100000); + + it("Read remote csv file works", async function () { + const remoteFile = "https://raw.githubusercontent.com/opensource9ja/danfojs/dev/danfojs-node/tests/samples/book.json"; + const df = await dfd.readJSON(remoteFile); + assert.deepEqual(df.columns, [ + 'book_id', + 'title', + 'image_url', + 'authors' + ]); + assert.deepEqual(df.dtypes, [ + 'int32', 'string', + 'string', 'string' + ]); + }); + + it("Read remote csv file with config works", async function () { + const remoteFile = "https://raw.githubusercontent.com/opensource9ja/danfojs/dev/danfojs-node/tests/samples/book.json"; + const frameConfig = { + columns: [ + 'A', + 'B', + 'C', + 'D' + ] + }; + const df = await dfd.readJSON(remoteFile, { frameConfig }); + assert.deepEqual(df.columns, [ + 'A', + 'B', + 'C', + 'D' + ]); + assert.deepEqual(df.dtypes, [ + 'int32', 'string', + 'string', 'string' + ]); + }); +}); + +describe("toJSON", function () { + it("toJSON works", async function () { + const data = [ [ 1, 2, 3, 4 ], [ 5, 6, 7, 8 ], [ 9, 10, 11, 12 ] ]; + const df = new dfd.DataFrame(data, { columns: [ "a", "b", "c", "d" ] }); + const expected = [ + { "a": 1, "b": 2, "c": 3, "d": 4 }, + { "a": 5, "b": 6, "c": 7, "d": 8 }, + { "a": 9, "b": 10, "c": 11, "d": 12 } + ]; + const json = dfd.toJSON(df, { download: false }); + assert.deepEqual(json, expected); + }); + it("toJSON works for row format", async function () { + const data = [ [ 1, 2, 3, 4 ], [ 5, 6, 7, 8 ], [ 9, 10, 11, 12 ] ]; + const df = new dfd.DataFrame(data, { columns: [ "a", "b", "c", "d" ] }); + const expected = { + "a": [ 1, 5, 9 ], + "b": [ 2, 6, 10 ], + "c": [ 3, 7, 11 ], + "d": [ 4, 8, 12 ] + }; + const json = dfd.toJSON(df, { format: "row", download: false }); + assert.deepEqual(json, expected); + }); + + it("toJSON works for series", async function () { + const data = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ]; + const df = new dfd.Series(data); + assert.deepEqual(dfd.toJSON(df, { download: false }), { "0": [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ] }); + }); + +}); diff --git a/danfojs-browser/tests/core/concat.js b/src/danfojs-browser/tests/transformers/concat.test.js similarity index 65% rename from danfojs-browser/tests/core/concat.js rename to src/danfojs-browser/tests/transformers/concat.test.js index cc7f396b..1d3aca5a 100644 --- a/danfojs-browser/tests/core/concat.js +++ b/src/danfojs-browser/tests/transformers/concat.test.js @@ -1,5 +1,6 @@ -describe("Concatenate", function () { +/* eslint-disable no-undef */ +describe("Concat", () => { it("Check the axis 0 concatenation", function () { let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; let cols = [ "A", "B", "C" ]; @@ -13,7 +14,7 @@ describe("Concatenate", function () { let cols2 = [ "A", "B", "C", "D" ]; let df2 = new dfd.DataFrame(data2, { columns: cols2 }); - let new_df = dfd.concat({ "df_list": [ df, df1, df2 ], "axis": 0 }); + let new_df = dfd.concat({ dfList: [ df, df1, df2 ], axis: 0 }); let data_values = [ [ 1, 2, 3, NaN ], [ 4, 5, 6, NaN ], [ 20, 30, 40, NaN ], [ 39, 89, 78, NaN ], [ 1, 2, 3, NaN ], [ 4, 5, 6, NaN ], [ 20, 30, 40, NaN ], [ 39, 89, 78, NaN ], @@ -35,7 +36,7 @@ describe("Concatenate", function () { let cols2 = [ "A", "B", "C", "D" ]; let df2 = new dfd.DataFrame(data2, { columns: cols2 }); - let new_df = dfd.concat({ "df_list": [ df, df1, df2 ], "axis": 1 }); + let new_df = dfd.concat({ dfList: [ df, df1, df2 ], axis: 1 }); let data_values = [ [ 1, 2, 3, 1, 2, 3, 1, 2, 3, 5 ], [ 4, 5, 6, 4, 5, 6, 4, 5, 6, 8 ], [ 20, 30, 40, 20, 30, 40, 20, 30, 40, 10 ], [ 39, 89, 78, 39, 89, 78, NaN, @@ -53,20 +54,18 @@ describe("Concatenate", function () { let df = new dfd.DataFrame(data, { columns: cols }); let s1 = new dfd.Series(data1); - let s2 = new dfd.Series(data2); let rslt = [ - [ 1, 2, 3, NaN ], - [ 4, 5, 6, NaN ], - [ 20, 30, 40, NaN ], - [ 39, 89, 78, NaN ], - [ NaN, NaN, NaN, 1 ], - [ NaN, NaN, NaN, 2 ], - [ NaN, NaN, NaN, 3 ], - [ NaN, NaN, NaN, 4 ] + [ NaN, 1, 2, 3 ], + [ NaN, 4, 5, 6 ], + [ NaN, 20, 30, 40 ], + [ NaN, 39, 89, 78 ], + [ 1, NaN, NaN, NaN ], + [ 2, NaN, NaN, NaN ], + [ 3, NaN, NaN, NaN ], + [ 4, NaN, NaN, NaN ] ]; - - let con = dfd.concat({ "df_list": [ df, s1 ], "axis": 0 }); + let con = dfd.concat({ dfList: [ df, s1 ], axis: 0 }); assert.deepEqual(con.values, rslt); @@ -81,14 +80,14 @@ describe("Concatenate", function () { let data1 = [ 1, 2, 3, 4 ]; let s1 = new dfd.Series(data1); let rslt = [ - [ 1, 2, 3, 1 ], - [ 4, 5, 6, 2 ], - [ 20, 30, 40, 3 ], - [ 39, 89, 78, 4 ] + [ 1, 1, 2, 3 ], + [ 2, 4, 5, 6 ], + [ 3, 20, 30, 40 ], + [ 4, 39, 89, 78 ] ]; - let con = dfd.concat({ "df_list": [ df, s1 ], "axis": 1 }); + let con = dfd.concat({ dfList: [ df, s1 ], axis: 1 }); assert.deepEqual(con.values, rslt); @@ -103,7 +102,7 @@ describe("Concatenate", function () { let rslt = [ [ 1, 3 ], [ 2, 4 ], [ 3, 5 ], [ 4, 6 ] ]; - let con = dfd.concat({ "df_list": [ s1, s2 ], "axis": 1 }); + let con = dfd.concat({ dfList: [ s1, s2 ], axis: 1 }); assert.deepEqual(con.values, rslt); @@ -120,38 +119,10 @@ describe("Concatenate", function () { 3, 4, 5, 6 ]; - let con = dfd.concat({ "df_list": [ s1, s2 ], "axis": 0 }); - - assert.deepEqual(con.values, rslt); - - }); - - it("test if df_list is an array", function(){ - - assert.throws(function () { dfd.concat({ "df_list":23, "axis":0 }); }, Error, 'df_list must be an Array of dataFrames/Series'); - - }); - it("assign default axis for concating", function(){ - let data1 = [ 1, 2, 3, 4 ]; - let data2 = [ 3, 4, 5, 6 ]; - - let s1 = new dfd.Series(data1); - let s2 = new dfd.Series(data2); - let rslt = [ [ 1, 3 ], [ 2, 4 ], [ 3, 5 ], [ 4, 6 ] ]; - - - let con = dfd.concat({ "df_list": [ s1, s2 ], "axis": 12 }); + let con = dfd.concat({ dfList: [ s1, s2 ], axis: 0 }); assert.deepEqual(con.values, rslt); - }); - it("ensure axis is a number", function(){ - let data1 = [ 1, 2, 3, 4 ]; - let data2 = [ 3, 4, 5, 6 ]; - - let s1 = new dfd.Series(data1); - let s2 = new dfd.Series(data2); - assert.throws(function () { dfd.concat({ "df_list":[ s1, s2 ], "axis":"r" }); }, Error, 'axis must be a number'); }); }); diff --git a/src/danfojs-browser/tests/transformers/dummy.encoder.test.js b/src/danfojs-browser/tests/transformers/dummy.encoder.test.js new file mode 100644 index 00000000..a15d79d6 --- /dev/null +++ b/src/danfojs-browser/tests/transformers/dummy.encoder.test.js @@ -0,0 +1,173 @@ +/* eslint-disable no-undef */ + +describe("DummyEncoder", function () { + it("getDummies works on Series", function () { + + const data = [ "dog", "male", "female", "male", "female", "male", "dog" ]; + const series = new dfd.Series(data); + const df = dfd.getDummies(series, { prefix: "test", prefixSeparator: "/" }); + + const dfValues = [ + [ 1, 0, 0 ], + [ 0, 1, 0 ], + [ 0, 0, 1 ], + [ 0, 1, 0 ], + [ 0, 0, 1 ], + [ 0, 1, 0 ], + [ 1, 0, 0 ] + ]; + const dfColumns = [ 'test/dog', 'test/male', 'test/female' ]; + assert.deepEqual(df.values, dfValues); + assert.deepEqual(df.columns, dfColumns); + }); + it("getDummies works on Series with default prefix and prefixSeperator", function () { + + const data = [ "dog", "male", "female", "male", "female", "male", "dog" ]; + const series = new dfd.Series(data); + const df = dfd.getDummies(series); + + const dfValues = [ + [ 1, 0, 0 ], + [ 0, 1, 0 ], + [ 0, 0, 1 ], + [ 0, 1, 0 ], + [ 0, 0, 1 ], + [ 0, 1, 0 ], + [ 1, 0, 0 ] + ]; + const dfColumns = [ '0_dog', '1_male', '2_female' ]; + assert.deepEqual(df.values, dfValues); + assert.deepEqual(df.columns, dfColumns); + }); + + it("getDummies works on DataFrame", function () { + + const data = [ [ 1, "dog", 1.0, "fat" ], [ 3, "fog", 2.0, "good" ], [ 4, "gof", 3.0, "best" ] ]; + const columns = [ "A", "B", "C", "d" ]; + const df = new dfd.DataFrame(data, { columns: columns }); + + const df1 = dfd.getDummies(df, { prefixSeparator: [ "_", "#" ], columns: [ "A", "d" ], prefix: "test" }); + const expectedColumns = [ 'B', 'C', 'test_1', 'test_3', 'test_4', 'test#fat', 'test#good', 'test#best' ]; + const expected = [ [ 'dog', 1.0, 1, 0, 0, 1, 0, 0 ], + [ 'fog', 2.0, 0, 1, 0, 0, 1, 0 ], + [ 'gof', 3.0, 0, 0, 1, 0, 0, 1 ] ]; + assert.deepEqual(df1.values, expected); + assert.deepEqual(df1.columns, expectedColumns); + + }); + it("Throw error if the prefix specified is not equal to the column specified", function () { + + const data = [ [ 1, "dog", 1.0, "fat" ], [ 3, "fog", 2.0, "good" ], [ 4, "gof", 3.0, "best" ] ]; + const columns = [ "A", "B", "C", "d" ]; + const df = new dfd.DataFrame(data, { columns: columns }); + + assert.throws(function () { dfd.getDummies(df, { prefix: [ "fg" ], prefixSeparator: "_", columns: [ "A", "d" ] }); }, Error, + `ParamError: prefix and data array must be of the same length. If you need to use the same prefix, then pass a string param instead. e.g {prefix: "fg"}`); + + }); + it("replace column sepecified with prefix", function () { + + const data = [ [ 1, "dog", 1.0, "fat" ], [ 3, "fog", 2.0, "good" ], [ 4, "gof", 3.0, "best" ] ]; + const columns = [ "A", "B", "C", "d" ]; + const df = new dfd.DataFrame(data, { columns: columns }); + + const df1 = dfd.getDummies(df, { prefix: [ "F", "G" ], prefixSeparator: "_", columns: [ "A", "d" ] }); + const expectedColumns = [ + 'B', 'C', + 'F_1', 'F_3', + 'F_4', 'G_fat', + 'G_good', 'G_best' + ]; + + const expected = [ [ 'dog', 1.0, 1, 0, 0, 1, 0, 0 ], + [ 'fog', 2.0, 0, 1, 0, 0, 1, 0 ], + [ 'gof', 3.0, 0, 0, 1, 0, 0, 1 ] ]; + + assert.deepEqual(df1.values, expected); + assert.deepEqual(df1.columns, expectedColumns); + + }); + + it("getDummies auto infers and encode columns with string dtype", function () { + + const data = [ [ 1, "dog", 1.0, "fat" ], [ 3, "fog", 2.0, "good" ], [ 4, "gof", 3.0, "best" ] ]; + const columns = [ "A", "B", "C", "d" ]; + const df = new dfd.DataFrame(data, { columns: columns }); + + const df1 = dfd.getDummies(df, { prefixSeparator: "_" }); + const expectedColumns = [ + 'A', 'C', + 'B_dog', 'B_fog', + 'B_gof', 'd_fat', + 'd_good', 'd_best' + ]; + const expected = [ + [ + 1, 1, 1, 0, + 0, 1, 0, 0 + ], + [ + 3, 2, 0, 1, + 0, 0, 1, 0 + ], + [ + 4, 3, 0, 0, + 1, 0, 0, 1 + ] + ]; + assert.deepEqual(df1.values, expected); + assert.deepEqual(df1.columns, expectedColumns); + + }); + + it("should one hot encode all other columns", function () { + + const data = [ [ 1, "dog", 1.0, "fat" ], [ 3, "fog", 2.0, "good" ], [ 4, "gof", 3.0, "best" ] ]; + const columns = [ "A", "B", "C", "d" ]; + const df = new dfd.DataFrame(data, { columns: columns }); + const rslt = [ + [ 1, 'dog', 1, 1, 0, 0 ], + [ 3, 'fog', 2, 0, 1, 0 ], + [ 4, 'gof', 3, 0, 0, 1 ] + ]; + + assert.deepEqual(dfd.getDummies(df, { columns: [ "d" ] }).values, rslt); + + }); + it("Dummification works for object DF", function () { + + let data = { + fruits: [ 'pear', 'mango', "pawpaw", "mango", "bean" ], + Count: [ 20, 30, 89, 12, 30 ], + Country: [ "NG", "NG", "GH", "RU", "RU" ] + }; + + let df = new dfd.DataFrame(data); + const expected = [ + [ + 20, 1, 0, 0, + 0, 1, 0, 0 + ], + [ + 30, 0, 1, 0, + 0, 1, 0, 0 + ], + [ + 89, 0, 0, 1, + 0, 0, 1, 0 + ], + [ + 12, 0, 1, 0, + 0, 0, 0, 1 + ], + [ + 30, 0, 0, 0, + 1, 0, 0, 1 + ] + ]; + + let dum_df = dfd.getDummies(df, { prefixSeparator: "_" }); + assert.deepEqual(dum_df.values, expected); + + }); +}); diff --git a/src/danfojs-browser/tests/transformers/label.encoder.test.js b/src/danfojs-browser/tests/transformers/label.encoder.test.js new file mode 100644 index 00000000..a1a63e60 --- /dev/null +++ b/src/danfojs-browser/tests/transformers/label.encoder.test.js @@ -0,0 +1,51 @@ +/* eslint-disable no-undef */ + +describe("LabelEncoder", function () { + + it("LabelEncoder works for Series", function () { + const sf = new dfd.Series([ 1, 2, 2, 6 ]); + const scaler = new dfd.LabelEncoder(); + scaler.fit(sf); + const expected = [ 0, 1, 1, 2 ]; + assert.deepEqual(scaler.transform(sf).values, expected); + }); + it("LabelEncoder works for 1D array", function () { + const sf = [ 1, 2, 2, "boy", "git", "git" ]; + const scaler = new dfd.LabelEncoder(); + scaler.fit(sf); + const expected = [ 0, 1, 1, 2, 3, 3 ]; + assert.deepEqual(scaler.transform(sf), expected); + }); + it("LabelEncoder works for values not found", function () { + const sf = new dfd.Series([ 1, 2, 2, 6 ]); + const scaler = new dfd.LabelEncoder(); + scaler.fit(sf); + + const expected = [ 0, 1, 1, 2, -1 ]; + assert.deepEqual((scaler.transform(new dfd.Series([ 1, 2, 2, 6, 7 ]))).values, expected); + }); + it("fitTransform works for 1D array", function () { + const sf = [ 1, 2, 2, "boy", "git", "git" ]; + const scaler = new dfd.LabelEncoder(); + const result = scaler.fitTransform(sf); + const expected = [ 0, 1, 1, 2, 3, 3 ]; + assert.deepEqual(result, expected); + }); + it("inverseTransform works for 1D array", function () { + const sf = [ 1, 2, 2, "boy", "git", "git" ]; + const scaler = new dfd.LabelEncoder(); + scaler.fit(sf); + const result = scaler.inverseTransform([ 0, 1, 1, 2, 3, 3 ]); + assert.deepEqual(result, [ 1, 2, 2, "boy", "git", "git" ]); + }); + it("Get properties from LabelEncoder", function () { + const sf = [ 1, 2, 2, "boy", "git", "git" ]; + const scaler = new dfd.LabelEncoder(); + scaler.fit(sf); + const classes = scaler.classes; + const nClasses = scaler.nClasses; + + assert.deepEqual(classes, { 1: 0, 2: 1, boy: 2, git: 3 }); + assert.equal(nClasses, 4); + }); +}); diff --git a/danfojs-browser/tests/core/merge.js b/src/danfojs-browser/tests/transformers/merge.test.js similarity index 89% rename from danfojs-browser/tests/core/merge.js rename to src/danfojs-browser/tests/transformers/merge.test.js index 2acd35da..d44a97dd 100644 --- a/danfojs-browser/tests/core/merge.js +++ b/src/danfojs-browser/tests/transformers/merge.test.js @@ -1,3 +1,4 @@ +/* eslint-disable no-undef */ describe("Merge", function () { @@ -13,7 +14,7 @@ describe("Merge", function () { let df1 = new dfd.DataFrame(data, { columns: colum1 }); let df2 = new dfd.DataFrame(data2, { columns: colum2 }); - let merge_df = dfd.merge({ "left": df1, "right": df2, "on": [ "Key1", "Key2" ], "how": "outer" }); + let merge_df = dfd.merge({ left: df1, right: df2, on: [ "Key1", "Key2" ], how: "outer" }); let output_data = [ [ 'K0', 'k0', 'A0', 'B0', 'C0', 'D0' ], @@ -24,7 +25,6 @@ describe("Merge", function () { [ 'K2', 'K0', NaN, NaN, 'C3', 'D3' ] ]; - assert.deepEqual(merge_df.values, output_data); }); @@ -40,7 +40,7 @@ describe("Merge", function () { let df1 = new dfd.DataFrame(data, { columns: colum1 }); let df2 = new dfd.DataFrame(data2, { columns: colum2 }); - let merge_df = dfd.merge({ "left": df1, "right": df2, "on": [ "Key1", "Key2" ], "how": "inner" }); + let merge_df = dfd.merge({ left: df1, right: df2, on: [ "Key1", "Key2" ], how: "inner" }); let output_data = [ [ 'K0', 'k0', 'A0', 'B0', 'C0', 'D0' ], @@ -63,7 +63,7 @@ describe("Merge", function () { let df1 = new dfd.DataFrame(data, { columns: colum1 }); let df2 = new dfd.DataFrame(data2, { columns: colum2 }); - let merge_df = dfd.merge({ "left": df1, "right": df2, "on": [ "Key1", "Key2" ], "how": "left" }); + let merge_df = dfd.merge({ left: df1, right: df2, on: [ "Key1", "Key2" ], how: "left" }); let output_data = [ [ 'K0', 'k0', 'A0', 'B0', 'C0', 'D0' ], @@ -88,7 +88,7 @@ describe("Merge", function () { let df1 = new dfd.DataFrame(data, { columns: colum1 }); let df2 = new dfd.DataFrame(data2, { columns: colum2 }); - let merge_df = dfd.merge({ "left": df1, "right": df2, "on": [ "Key1", "Key2" ], "how": "right" }); + let merge_df = dfd.merge({ left: df1, right: df2, on: [ "Key1", "Key2" ], how: "right" }); let output_data = [ [ 'K0', 'k0', 'A0', 'B0', 'C0', 'D0' ], diff --git a/src/danfojs-browser/tests/transformers/min.max.scaler.test.js b/src/danfojs-browser/tests/transformers/min.max.scaler.test.js new file mode 100644 index 00000000..4ae1071f --- /dev/null +++ b/src/danfojs-browser/tests/transformers/min.max.scaler.test.js @@ -0,0 +1,54 @@ +/* eslint-disable no-undef */ + +describe("MinMaxscaler", function () { + + it("Standardize values in a DataFrame using a MinMaxScaler", function () { + const data = [ [ -1, 2 ], [ -0.5, 6 ], [ 0, 10 ], [ 1, 18 ] ]; + const scaler = new dfd.MinMaxScaler(); + + const expected = [ [ 0, 0 ], [ 0.25, 0.25 ], [ 0.5, 0.5 ], [ 1, 1 ] ]; + const transformedData = [ [ 1.5, 0. ] ]; + + scaler.fit(new dfd.DataFrame(data)); + const resultDf = scaler.transform(new dfd.DataFrame(data)); + assert.deepEqual(resultDf.values, expected); + assert.deepEqual(scaler.transform([ [ 2, 2 ] ]), transformedData); + }); + it("fitTransform using a MinMaxScaler", function () { + const data = [ [ -1, 2 ], [ -0.5, 6 ], [ 0, 10 ], [ 1, 18 ] ]; + const scaler = new dfd.MinMaxScaler(); + const resultDf = scaler.fitTransform(new dfd.DataFrame(data)); + + const expected = [ [ 0, 0 ], [ 0.25, 0.25 ], [ 0.5, 0.5 ], [ 1, 1 ] ]; + assert.deepEqual(resultDf.values, expected); + }); + it("InverseTransform with MinMaxScaler", function () { + const scaler = new dfd.MinMaxScaler(); + scaler.fit([ 1, 2, 3, 4, 5 ]); + const resultTransform = scaler.transform([ 1, 2, 3, 4, 5 ]); + const resultInverse = scaler.inverseTransform([ 0, 0.25, 0.5, 0.75, 1 ]); + + assert.deepEqual(resultTransform, [ 0, 0.25, 0.5, 0.75, 1 ]); + assert.deepEqual([ 1, 2, 3, 4, 5 ], resultInverse); + }); + it("Index and columns are kept after transformation", function () { + const data = [ [ -1, 2 ], [ -0.5, 6 ], [ 0, 10 ], [ 1, 18 ] ]; + const df = new dfd.DataFrame(data, { index: [ 1, 2, 3, 4 ], columns: [ "a", "b" ] }); + + const scaler = new dfd.MinMaxScaler(); + scaler.fit(df); + const resultDf = scaler.transform(df); + + assert.deepEqual(resultDf.index, [ 1, 2, 3, 4 ]); + assert.deepEqual(resultDf.columns, [ "a", "b" ]); + }); + it("Standardize values in a Series using a MinMaxScaler", function () { + const data = [ -1, 2, -0.5, 60, 101, 18 ]; + const scaler = new dfd.MinMaxScaler(); + const result = [ 0, 0.029411764815449715, 0.0049019609577953815, 0.5980392098426819, 1, 0.18627451360225677 ]; + const transformedData = [ 0.029411764815449715, 0.029411764815449715 ]; + scaler.fit(new dfd.Series(data)); + assert.deepEqual(scaler.transform(new dfd.Series(data)).values, result); + assert.deepEqual(scaler.transform([ 2, 2 ]), transformedData); + }); +}); diff --git a/src/danfojs-browser/tests/transformers/one.hot.encoder.test.js b/src/danfojs-browser/tests/transformers/one.hot.encoder.test.js new file mode 100644 index 00000000..a8b001fc --- /dev/null +++ b/src/danfojs-browser/tests/transformers/one.hot.encoder.test.js @@ -0,0 +1,82 @@ +/* eslint-disable no-undef */ + +describe("OneHotEncoder", function () { + it("OneHotEncoder works on array", function () { + const data = [ "dog", "cat", "man", "dog", "cat", "man", "man", "cat" ]; + const encode = new dfd.OneHotEncoder(); + encode.fit(data); + + const expected = [ + [ 1, 0, 0 ], + [ 0, 1, 0 ], + [ 0, 0, 1 ], + [ 1, 0, 0 ], + [ 0, 1, 0 ], + [ 0, 0, 1 ], + [ 0, 0, 1 ], + [ 0, 1, 0 ] + ]; + assert.deepEqual(encode.transform(data), expected); + assert.deepEqual(encode.transform([ "man", "cat" ]), [ [ 0, 0, 1 ], [ 0, 1, 0 ] ]); + }); + it("OneHotEncoder works on Series", function () { + const data = [ "dog", "cat", "man", "dog", "cat", "man", "man", "cat" ]; + const series = new dfd.Series(data); + const encoder = new dfd.OneHotEncoder(); + encoder.fit(series); + + const expected = [ + [ 1, 0, 0 ], + [ 0, 1, 0 ], + [ 0, 0, 1 ], + [ 1, 0, 0 ], + [ 0, 1, 0 ], + [ 0, 0, 1 ], + [ 0, 0, 1 ], + [ 0, 1, 0 ] + ]; + assert.deepEqual(encoder.transform(series).values, expected); + }); + + it("fitTransform works on OneHotEncoder", function () { + const data = [ "dog", "cat", "man", "dog", "cat", "man", "man", "cat" ]; + const series = new dfd.Series(data); + const encoder = new dfd.OneHotEncoder(); + const result = encoder.fitTransform(series); + + const expected = [ + [ 1, 0, 0 ], + [ 0, 1, 0 ], + [ 0, 0, 1 ], + [ 1, 0, 0 ], + [ 0, 1, 0 ], + [ 0, 0, 1 ], + [ 0, 0, 1 ], + [ 0, 1, 0 ] + ]; + assert.deepEqual(result.values, expected); + }); + + it("Correct index is returned after transformation", function () { + const data = [ "dog", "cat", "man", "dog", "cat", "man", "man", "cat" ]; + const series = new dfd.Series(data, + { index: [ "a", "b", "c", "d", "e", "f", "g", "h" ] + }); + const encoder = new dfd.OneHotEncoder(); + const result = encoder.fitTransform(series); + + const expected = [ + [ 1, 0, 0 ], + [ 0, 1, 0 ], + [ 0, 0, 1 ], + [ 1, 0, 0 ], + [ 0, 1, 0 ], + [ 0, 0, 1 ], + [ 0, 0, 1 ], + [ 0, 1, 0 ] + ]; + assert.deepEqual(result.values, expected); + assert.deepEqual(result.index, [ "a", "b", "c", "d", "e", "f", "g", "h" ]); + assert.deepEqual(result.columns, [ "0", "1", "2" ]); + }); +}); diff --git a/src/danfojs-browser/tests/transformers/standard.scaler.test.js b/src/danfojs-browser/tests/transformers/standard.scaler.test.js new file mode 100644 index 00000000..1363fe71 --- /dev/null +++ b/src/danfojs-browser/tests/transformers/standard.scaler.test.js @@ -0,0 +1,55 @@ +/* eslint-disable no-undef */ + +describe("StandardScaler", function () { + + it("StandardScaler works for DataFrame", function () { + const data = [ [ 0, 0 ], [ 0, 0 ], [ 1, 1 ], [ 1, 1 ] ]; + + const scaler = new dfd.StandardScaler(); + scaler.fit(new dfd.DataFrame(data)); + + const expected = [ [ -1, -1 ], [ -1, -1 ], [ 1, 1 ], [ 1, 1 ] ]; + const resultDf = scaler.transform(new dfd.DataFrame(data)); + assert.deepEqual(resultDf.values, expected); + assert.deepEqual(scaler.transform([ [ 2, 2 ] ]), [ [ 3, 3 ] ]); + }); + it("fitTransform works for StandardScaler", function () { + const data = [ [ 0, 0 ], [ 0, 0 ], [ 1, 1 ], [ 1, 1 ] ]; + + const scaler = new dfd.StandardScaler(); + const resultDf = scaler.fitTransform(new dfd.DataFrame(data)); + + const expected = [ [ -1, -1 ], [ -1, -1 ], [ 1, 1 ], [ 1, 1 ] ]; + assert.deepEqual(resultDf.values, expected); + }); + it("inverseTransform works for StandardScaler", function () { + const data = [ [ 0, 0 ], [ 0, 0 ], [ 1, 1 ], [ 1, 1 ] ]; + + const scaler = new dfd.StandardScaler(); + scaler.fit(new dfd.DataFrame(data)); + const resultDf = scaler.inverseTransform([ [ -1, -1 ], [ -1, -1 ], [ 1, 1 ], [ 1, 1 ] ]); + + assert.deepEqual(resultDf, data); + }); + it("StandardScaler works for Array", function () { + const data = [ [ 0, 0 ], [ 0, 0 ], [ 1, 1 ], [ 1, 1 ] ]; + + const scaler = new dfd.StandardScaler(); + scaler.fit(data); + const expected = [ [ -1, -1 ], [ -1, -1 ], [ 1, 1 ], [ 1, 1 ] ]; + + assert.deepEqual(scaler.transform(data), expected); + assert.deepEqual(scaler.transform([ [ 2, 2 ] ]), [ [ 3, 3 ] ]); + }); + + it("StandardScaler works for Series", function () { + const data = [ 0, 0, 0, 0, 1, 1, 1, 1 ]; + + const scaler = new dfd.StandardScaler(); + scaler.fit(new dfd.Series(data)); + const expected = [ -1, -1, -1, -1, 1, 1, 1, 1 ]; + + assert.deepEqual(scaler.transform(new dfd.Series(data)).values, expected); + assert.deepEqual(scaler.transform([ 2, 2 ]), [ 3, 3 ]); + }); +}); diff --git a/src/danfojs-browser/tests/utils.test.js b/src/danfojs-browser/tests/utils.test.js new file mode 100644 index 00000000..d29ecf42 --- /dev/null +++ b/src/danfojs-browser/tests/utils.test.js @@ -0,0 +1,218 @@ +/* eslint-disable no-undef */ + +const utils = new dfd.Utils(); + +describe("Utils", function () { + it("removes an element from an array", function () { + let arr = [ 1, 2, 3, 4 ]; + assert.deepEqual(utils.removeElementFromArray(arr, 2), [ 1, 2, 4 ]); + }); + + it("Checks if variable is a string", function () { + let arr = [ "1", "2" ]; + assert.isTrue(utils.isString(arr[0])); + }); + + it("Checks if variable is a number", function () { + let arr = [ 1, 2, 3, 4 ]; + assert.isTrue(utils.isNumber(arr[0])); + }); + + it("Checks if value is null", function () { + let val = null; + let val2 = 1; + assert.isTrue(utils.isNull(val)); + assert.isFalse(utils.isNull(val2)); + }); + + it("Checks if value is undefined", function () { + let arr; + assert.isTrue(utils.isUndefined(arr)); + }); + + it("Generate numbers between two set of values [both inclusive]", function () { + let start = 0; + let end = 5; + let data = [ 0, 1, 2, 3, 4, 5 ]; + assert.deepEqual(utils.range(start, end), data); + }); + + it("transposes an array", function () { + let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ] ]; + let result = [ [ 1, 4, 20 ], [ 2, 5, 30 ], [ 3, 6, 40 ] ]; + assert.deepEqual(utils.transposeArray(data), result); + }); + + describe("inferDtype", function () { + it("Returns string type present in an 1D array", function () { + let data = [ 'Alice', 'Boy', 'Girl', "39" ]; + let result = [ 'string' ]; + assert.deepEqual(utils.inferDtype(data), result); + }); + + it("Returns float type present in an 1D array", function () { + let data = [ 1.1, 2.1, 3.2, 4.4 ]; + let result = [ 'float32' ]; + assert.deepEqual(utils.inferDtype(data), result); + }); + + it("Returns int type present in an 1D array", function () { + let data = [ 1, 2, 3, 45 ]; + let result = [ 'int32' ]; + assert.deepEqual(utils.inferDtype(data), result); + }); + it("Returns float when there's a mixture of int and float in a 1D array", function () { + let data = [ 1, 2.1, 3, 45 ]; + let result = [ 'float32' ]; + assert.deepEqual(utils.inferDtype(data), result); + }); + + it("Returns float type when NaN is present in an 1D array", function () { + let data = [ 1, 2, 3, 45, NaN ]; + let result = [ 'float32' ]; + assert.deepEqual(utils.inferDtype(data), result); + }); + + it("Returns correct dtype if NaN present in data", function () { + let data = utils.transposeArray([ + [ 18.7, 17.4, 18, NaN, 19.3 ], + [ 20, NaN, 19, 18, 20 ] ]); + let result = [ 'float32', 'float32' ]; + assert.deepEqual(utils.inferDtype(data), result); + }); + + it("Returns the data type present in an 2D array", function () { + let data = utils.transposeArray([ [ 'Alice', 'Boy', 'Girl', "39" ], [ 2, 5, 30, 89 ], [ 3.1, 6.1, 40.1, 78.2 ] ]); + let result = [ 'string', 'int32', 'float32' ]; + assert.deepEqual(utils.inferDtype(data), result); + }); + + it("Returns the string dtype when there's a mixture of dtypes in a 2D array", function () { + let data = utils.transposeArray([ [ 'Alice', 'Boy', 'Girl', 21 ], [ 2, 5, 30, "hey" ], [ 3, 6, 40.1, 78.2 ] ]); + let result = [ 'string', 'string', 'float32' ]; + assert.deepEqual(utils.inferDtype(data), result); + }); + + it("Returns bool type in a 1D array", function () { + let data = [ true, true, false, false, false, true ]; + let result = [ 'boolean' ]; + assert.deepEqual(utils.inferDtype(data), result); + }); + it("Returns bool type in a 2D array", function () { + let data = utils.transposeArray([ [ true, false, true ], [ "boy", "girl", "man" ], [ 20, 30, 24 ] ]); + let result = [ 'boolean', 'string', 'int32' ]; + assert.deepEqual(utils.inferDtype(data), result); + }); + + it("Returns string type if values are all NaN", function () { + let data = utils.transposeArray([ [ true, false, true ], [ "boy", "girl", "boy" ], [ NaN, NaN, NaN ] ]); + let result = [ 'boolean', 'string', 'float32' ]; + assert.deepEqual(utils.inferDtype(data), result); + }); + + }); + + describe("mapIntegersToBooleans", function () { + it("map ints to bools in array of arrays", function () { + let data = [ [ 1, 0, 1 ], [ 1, 1, 0 ] ]; + assert.deepEqual(utils.mapIntegersToBooleans(data, 2), [ [ true, false, true ], [ true, true, false ] ]); + }); + + it("map ints to bools in array", function () { + let data = [ 1, 0, 0, 1, 1 ]; + assert.deepEqual(utils.mapIntegersToBooleans(data, 1), [ true, false, false, true, true ]); + }); + }); + + describe("round", function () { + it("round elements in array to 1 dp", function () { + let data = [ 10.01, 2.2, 3.11, 20.505, 20.22, 40.0909 ]; + assert.deepEqual(utils.round(data, 1, true), [ 10.0, 2.2, 3.1, 20.5, 20.2, 40.1 ]); + }); + + it("round elements in array to 2 dp", function () { + let data = [ 10.019, 2.2099, 3.1145, 20.506, 20.22, 40.0909 ]; + assert.deepEqual(utils.round(data, 2, true), [ 10.02, 2.21, 3.11, 20.51, 20.22, 40.09 ]); + }); + }); + + describe("replaceUndefinedWithNaN", function () { + it("replace undefined in Series with NaN", function () { + let data = [ 10.01, 2.2, undefined, 20.505, 20.22, undefined ]; + assert.deepEqual(utils.replaceUndefinedWithNaN(data, true), [ 10.01, 2.2, NaN, 20.505, 20.22, NaN ]); + }); + + it("replace undefined in DataFrame with NaN", function () { + let data = [ [ 10.01, 2.2, undefined, 20.505, 20.22, undefined ], + [ 10.01, undefined, undefined, 20.505, 20, undefined ] ]; + + let result = [ [ 10.01, 2.2, NaN, 20.505, 20.22, NaN ], + [ 10.01, NaN, NaN, 20.505, 20, NaN ] ]; + assert.deepEqual(utils.replaceUndefinedWithNaN(data, false), result); + }); + + it("replace null in Series with NaN", function () { + let data = [ 10.01, 2.2, null, 20.505, 20.22, null ]; + assert.deepEqual(utils.replaceUndefinedWithNaN(data, true), [ 10.01, 2.2, NaN, 20.505, 20.22, NaN ]); + }); + + it("replace null in DataFrame with NaN", function () { + let data = [ [ 10.01, 2.2, null, 20.505, 20.22, null ], + [ 10.01, null, null, 20.505, 20, null ] ]; + + let result = [ [ 10.01, 2.2, NaN, 20.505, 20.22, NaN ], + [ 10.01, NaN, NaN, 20.505, 20, NaN ] ]; + assert.deepEqual(utils.replaceUndefinedWithNaN(data, false), result); + }); + }); + + describe("convert2DArrayToSeriesArray", function () { + it("convert 2D array of array to 1D of string values", function () { + let data = [ [ 10.01, 2.2, "a" ], [ 20.505, 20.22, "boy" ] ]; + assert.deepEqual(utils.convert2DArrayToSeriesArray(data), [ "10.01,2.2,a", "20.505,20.22,boy" ]); + }); + + }); + + describe("throwErrorOnWrongParams", function () { + it("check if the right params are passed to a function", function () { + let paramsNeeded = [ "replace", "with", "inplace" ]; + let kwargs = { "replae": 2, "with": 12, "inplace": true }; + + assert.throws(() => { + utils.throwErrorOnWrongParams(kwargs, paramsNeeded); + }, Error, `Params Error: Required parameter not found. Your params must include the following [${paramsNeeded}]`); + }); + + it("check if the right params are passed to a function 2", function () { + let paramsNeeded = [ "replace", "with", "inplace" ]; + let kwargs = { "replace": 2, "with": 12, "inplace": true }; + utils.throwErrorOnWrongParams(kwargs, paramsNeeded); + }); + + }); + + describe("getRowAndColValues", function () { + it("retreive rows and labels from column object", function () { + let data = { "Alpha": [ "A", "B", "C", "D" ], count: [ 1, 2, 3, 4 ], sum: [ 20.3, 30.456, 40.90, 90.1 ] }; + let res = [ [ "A", 1, 20.3 ], [ "B", 2, 30.456 ], [ "C", 3, 40.90 ], [ "D", 4, 90.1 ] ]; + assert.deepEqual(utils.getRowAndColValues(data)[0], res); + assert.deepEqual(utils.getRowAndColValues(data)[1], [ "Alpha", "count", "sum" ]); + }); + + }); + + + describe("getDuplicate", function () { + it("obtain duplicates and their index", function () { + let data = [ 1, 2, 3, 4, 5, 3, 4, 6, 4, 5 ]; + let res = { + '3': { count: 2, index: [ 2, 5 ] }, + '4': { count: 3, index: [ 3, 6, 8 ] }, + '5': { count: 2, index: [ 4, 9 ] } + }; + assert.deepEqual(utils.getDuplicate(data), res); + }); + }); + +}); diff --git a/src/danfojs-browser/tsconfig.json b/src/danfojs-browser/tsconfig.json new file mode 100644 index 00000000..3e83d96e --- /dev/null +++ b/src/danfojs-browser/tsconfig.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "target": "es5", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */ + "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */ + "lib": ["es6", "dom"], /* Specify library files to be included in the compilation. */ + "allowJs": true, /* Allow javascript files to be compiled. */ + "outDir": "./dist", /* Redirect output structure to the directory. */ + "strict": true, /* Enable all strict type-checking options. */ + "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ + // "noUnusedLocals": true, /* Report errors on unused locals. */ + // "noUnusedParameters": true, /* Report errors on unused parameters. */ + "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ + "resolveJsonModule": true, /* Include modules imported with '.json' extension */ + "skipLibCheck": true, /* Skip type checking of declaration files. */ + "forceConsistentCasingInFileNames": true, /* Disallow inconsistently-cased references to the same file. */ + "declaration": true, + "baseUrl": "./src", + }, + "include": [ + "./src/**/*" +], +} diff --git a/src/danfojs-browser/webpack.config.js b/src/danfojs-browser/webpack.config.js new file mode 100644 index 00000000..3fb037b9 --- /dev/null +++ b/src/danfojs-browser/webpack.config.js @@ -0,0 +1,58 @@ +/* eslint-disable no-undef */ +const path = require("path"); +const webpack = require("webpack"); + +const createConfig = (target) => { + return { + mode: "production", + devtool: "source-map", + context: path.resolve(__dirname), + entry: { + index: `./src/index.ts` + }, + target: target, + output: { + path: path.resolve(__dirname, "lib"), + filename: `bundle.js`, + library: "dfd" + }, + plugins: [ + // Work around for Buffer is undefined: + // https://github.com/webpack/changelog-v5/issues/10 + new webpack.ProvidePlugin({ + Buffer: [ 'buffer', 'Buffer' ] + }), + new webpack.ProvidePlugin({ + process: 'process/browser' + }) + ], + module: { + rules: [ + { + test: /\.tsx?$/, + use: [ 'ts-loader', 'ify-loader' ], + exclude: /node_modules/ + } + ] + }, + resolve: { + extensions: [ '.tsx', '.ts', '.js' ], + fallback: { + "fs": false, + "path": require.resolve("path-browserify"), + "dotenv": require.resolve('dotenv'), + "os": require.resolve('os-browserify/browser'), + "stream": require.resolve('stream-browserify'), + "buffer": require.resolve('buffer'), + "crypto": require.resolve('crypto-browserify'), + "http": require.resolve('stream-http'), + "https": require.resolve("https-browserify"), + "zlib": require.resolve("browserify-zlib"), + "net": false, + "tls": false + } + } + }; +}; + +module.exports = [ createConfig("web") ]; diff --git a/danfojs-browser/yarn-error.log b/src/danfojs-browser/yarn-error.log similarity index 100% rename from danfojs-browser/yarn-error.log rename to src/danfojs-browser/yarn-error.log diff --git a/danfojs-browser/yarn.lock b/src/danfojs-browser/yarn.lock similarity index 83% rename from danfojs-browser/yarn.lock rename to src/danfojs-browser/yarn.lock index 61f11255..79804963 100644 --- a/danfojs-browser/yarn.lock +++ b/src/danfojs-browser/yarn.lock @@ -800,6 +800,13 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" +"@babel/runtime@^7.14.6": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.4.tgz#fd17d16bfdf878e6dd02d19753a39fa8a8d9c84a" + integrity sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw== + dependencies: + regenerator-runtime "^0.13.4" + "@babel/runtime@^7.8.4": version "7.12.5" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.5.tgz#410e7e487441e1b360c29be715d870d9b985882e" @@ -894,72 +901,115 @@ readdirp "^2.2.1" upath "^1.1.1" -"@tensorflow/tfjs-backend-cpu@3.6.0": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-backend-cpu/-/tfjs-backend-cpu-3.6.0.tgz#4e64a7cf1c33b203f71f8f77cd7b0ac1ef25a871" - integrity sha512-ZpAs17hPdKXadbtNjAsymYUILe8V7+pY4fYo8j25nfDTW/HfBpyAwsHPbMcA/n5zyJ7ZJtGKFcCUv1sl24KL1Q== +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@tensorflow/tfjs-backend-cpu@3.11.0": + version "3.11.0" + resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-backend-cpu/-/tfjs-backend-cpu-3.11.0.tgz#01d5d68b91faf12bee4854adae56bc956b794f1a" + integrity sha512-ShLkrZ4/rmhZwzGKenMFDfQnaEbyZgWA5F8JRa52Iob/vptlZeuOzjq87CZKmZMUmDswR9A2kjzovT/H1bJdWQ== dependencies: "@types/seedrandom" "2.4.27" seedrandom "2.4.3" -"@tensorflow/tfjs-backend-webgl@3.6.0": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-backend-webgl/-/tfjs-backend-webgl-3.6.0.tgz#1ea1a73abea8d6324fd81aedf7f187ab6eb73692" - integrity sha512-zp7l4TmD1khgeSux/Ujaaj8M/v+e8JVIKjOci6HCGaeMNrn74lTSH9oqGPWKUCmpZME17/V0LfRHK34ddmrPSA== +"@tensorflow/tfjs-backend-webgl@3.11.0": + version "3.11.0" + resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-backend-webgl/-/tfjs-backend-webgl-3.11.0.tgz#fbd7f24c164d17c11d964206b4b075b073b1a3bc" + integrity sha512-rNnc/dZ7LIl9O/Pn9W24I1h8kgpJ+XvG8NrdNSfIoWPCW4fvPSlU7B3yMeZXvRneny+z+T3xRs96nWyU2mZBJw== dependencies: - "@tensorflow/tfjs-backend-cpu" "3.6.0" + "@tensorflow/tfjs-backend-cpu" "3.11.0" "@types/offscreencanvas" "~2019.3.0" "@types/seedrandom" "2.4.27" "@types/webgl-ext" "0.0.30" - "@types/webgl2" "0.0.5" + "@types/webgl2" "0.0.6" seedrandom "2.4.3" -"@tensorflow/tfjs-converter@3.6.0": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-converter/-/tfjs-converter-3.6.0.tgz#32b3ff31b47e29630a82e30fbe01708facad7fd6" - integrity sha512-9MtatbTSvo3gpEulYI6+byTA3OeXSMT2lzyGAegXO9nMxsvjR01zBvlZ5SmsNyecNh6fMSzdL2+cCdQfQtsIBg== +"@tensorflow/tfjs-converter@3.11.0": + version "3.11.0" + resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-converter/-/tfjs-converter-3.11.0.tgz#0842269a83599b52fd167a8a05372018a9a1ca6a" + integrity sha512-rTRIKvBoqL0qdPYpm8UXauZycOiaBHZB2E2v3OoXoHnjvle/Xn/09uZJdrixgGhR+Kahs3Vz27BEEFz6RI5j2w== -"@tensorflow/tfjs-core@3.6.0": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-core/-/tfjs-core-3.6.0.tgz#6b4d8175790bdff78868eabe6adc6442eb4dc276" - integrity sha512-bb2c3zwK4SgXZRvkTiC7EhCpWbCGp0GMd+1/3Vo2/Z54jiLB/h3sXIgHQrTNiWwhKPtst/xxA+MsslFlvD0A5w== +"@tensorflow/tfjs-core@3.11.0": + version "3.11.0" + resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-core/-/tfjs-core-3.11.0.tgz#1e3986533faaed922bbfc2fe86da506d0e9e5c79" + integrity sha512-JOp+1+LCd0Xg3hu7fu6iQPWZnN8Hc6ssfP7B+625XH5GYY1/OhVASa7Ahe2mJr9gZovY2lw8FUejLh1jMmBb1Q== dependencies: + "@types/long" "^4.0.1" "@types/offscreencanvas" "~2019.3.0" "@types/seedrandom" "2.4.27" "@types/webgl-ext" "0.0.30" + long "4.0.0" node-fetch "~2.6.1" seedrandom "2.4.3" -"@tensorflow/tfjs-data@3.6.0": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-data/-/tfjs-data-3.6.0.tgz#af2f03cffb75ad8e4c2f46e192e392d9b7f977ed" - integrity sha512-5KU7fnU7cj/opb4aCNDoW4qma64ggDwI0PCs5KEO41T3waVHDLk6bjlFlBVRdjfZqvM0K6EfWEyoiXzdvz/Ieg== +"@tensorflow/tfjs-data@3.11.0": + version "3.11.0" + resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-data/-/tfjs-data-3.11.0.tgz#90dd23a7181f0a744f2882a12c3442b27047383d" + integrity sha512-+cUHUHzjM/zs0JVOwHQm9wP15Y+BZdRcUpMoYWia8r3kaGSyvoz6WqzacEP1PeXgJVnr2gtU3D+bF32th8fZfQ== dependencies: "@types/node-fetch" "^2.1.2" node-fetch "~2.6.1" -"@tensorflow/tfjs-layers@3.6.0": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-layers/-/tfjs-layers-3.6.0.tgz#5358af559fc8baed304b3e567319fe93f1aa46a6" - integrity sha512-B7EHwAT6KFqhKzdf0e2Sr6haj9qpqpyEATV8OCPHdk+g8z2AGXOLlFfbgW6vCMjy1wb5jzYqCyZDoY3EWdgJAw== - -"@tensorflow/tfjs@3.6.0": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@tensorflow/tfjs/-/tfjs-3.6.0.tgz#e65956cd40c96523e3f5ec7a58a4bef9ef5e349c" - integrity sha512-uLDMDzyRkJa3fYBeR6etQTFD/t+nkQIH/DznL9hxmYoIYG8PigY2gcrc482TAvsdhiuvxCZ9rl5SyDtP93MvxQ== - dependencies: - "@tensorflow/tfjs-backend-cpu" "3.6.0" - "@tensorflow/tfjs-backend-webgl" "3.6.0" - "@tensorflow/tfjs-converter" "3.6.0" - "@tensorflow/tfjs-core" "3.6.0" - "@tensorflow/tfjs-data" "3.6.0" - "@tensorflow/tfjs-layers" "3.6.0" +"@tensorflow/tfjs-layers@3.11.0": + version "3.11.0" + resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-layers/-/tfjs-layers-3.11.0.tgz#456d8dc3fe93937ced329d5d06310da294d3758c" + integrity sha512-BtLgLucJZHv5te1K3yjT3iZdHXgMJArrLuOb/oRPOtTp4R2ad5N0V2m5RtuZJ3sI5/ah0h72xtmTWNyTv3/5dw== + +"@tensorflow/tfjs@^3.11.0": + version "3.11.0" + resolved "https://registry.yarnpkg.com/@tensorflow/tfjs/-/tfjs-3.11.0.tgz#63d5231f41d57ca11b910664632a8e349eba3967" + integrity sha512-TTYrKdkoh1sHnt4vn6MboLbpi1Es4U1Aw+L3PqwadRvXW4+7ySUtc00McrQ+ooK0q3Qhl3N7cvgchgM7nED3Mg== + dependencies: + "@tensorflow/tfjs-backend-cpu" "3.11.0" + "@tensorflow/tfjs-backend-webgl" "3.11.0" + "@tensorflow/tfjs-converter" "3.11.0" + "@tensorflow/tfjs-core" "3.11.0" + "@tensorflow/tfjs-data" "3.11.0" + "@tensorflow/tfjs-layers" "3.11.0" argparse "^1.0.10" chalk "^4.1.0" core-js "3" regenerator-runtime "^0.13.5" yargs "^16.0.3" +"@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + +"@types/caseless@*": + version "0.12.2" + resolved "https://registry.yarnpkg.com/@types/caseless/-/caseless-0.12.2.tgz#f65d3d6389e01eeb458bd54dc8f52b95a9463bc8" + integrity sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w== + +"@types/chai@^4.2.19": + version "4.2.21" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.21.tgz#9f35a5643129df132cf3b5c1ec64046ea1af0650" + integrity sha512-yd+9qKmJxm496BOV9CMNaey8TWsikaZOwMRwPHQIjcOJM9oV+fi9ZMNw3JsVnbEEbo2gRTDnGEBv8pjyn67hNg== + +"@types/d3@^3": + version "3.5.46" + resolved "https://registry.yarnpkg.com/@types/d3/-/d3-3.5.46.tgz#8b890138ea035b703ef4cdd2de0d86f8619c1c69" + integrity sha512-jNHfiGd41+JUV43LTMzQNidyp4Hn0XfhoSmy8baE0d/N5pGYpD+yX03JacY/MH+smFxYOQGXlz4HxkRZOuRNOQ== + "@types/eslint-scope@^3.7.0": version "3.7.0" resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.0.tgz#4792816e31119ebd506902a482caec4951fabd86" @@ -986,6 +1036,21 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== +"@types/json-schema@^7.0.7": + version "7.0.9" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" + integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== + +"@types/long@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.1.tgz#459c65fa1867dafe6a8f322c4c51695663cc55e9" + integrity sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w== + +"@types/mocha@^8.2.2": + version "8.2.3" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-8.2.3.tgz#bbeb55fbc73f28ea6de601fbfa4613f58d785323" + integrity sha512-ekGvFhFgrc2zYQoX4JeZPmVzZxw6Dtllga7iGHzfbYIYkAMUx/sAFP2GdFpLff+vdHXu5fl7WX9AT+TtqYcsyw== + "@types/node-fetch@^2.1.2": version "2.5.8" resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.8.tgz#e199c835d234c7eb0846f6618012e558544ee2fb" @@ -999,25 +1064,157 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.22.tgz#0d29f382472c4ccf3bd96ff0ce47daf5b7b84b18" integrity sha512-g+f/qj/cNcqKkc3tFqlXOYjrmZA+jNBiDzbP3kH+B+otKFqAdPgVTGP1IeKRdMml/aE69as5S4FqtxAbl+LaMw== +"@types/node@^15.12.5": + version "15.14.9" + resolved "https://registry.yarnpkg.com/@types/node/-/node-15.14.9.tgz#bc43c990c3c9be7281868bbc7b8fdd6e2b57adfa" + integrity sha512-qjd88DrCxupx/kJD5yQgZdcYKZKSIGBVDIBE1/LTGcNm3d2Np/jxojkdePDdfnBHJc5W7vSMpbJ1aB7p/Py69A== + "@types/offscreencanvas@~2019.3.0": version "2019.3.0" resolved "https://registry.yarnpkg.com/@types/offscreencanvas/-/offscreencanvas-2019.3.0.tgz#3336428ec7e9180cf4566dfea5da04eb586a6553" integrity sha512-esIJx9bQg+QYF0ra8GnvfianIY8qWB0GBx54PK5Eps6m+xTj86KLavHv6qDhzKcu5UUOgNfJ2pWaIIV7TRUd9Q== +"@types/papaparse@^5.2.6": + version "5.2.6" + resolved "https://registry.yarnpkg.com/@types/papaparse/-/papaparse-5.2.6.tgz#0bba18de4d15eff65883bc7c0794e0134de9e7c7" + integrity sha512-xGKSd0UTn58N1h0+zf8mW863Rv8BvXcGibEgKFtBIXZlcDXAmX/T4RdDO2mwmrmOypUDt5vRgo2v32a78JdqUA== + dependencies: + "@types/node" "*" + +"@types/plotly.js-dist-min@^2.3.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@types/plotly.js-dist-min/-/plotly.js-dist-min-2.3.0.tgz#b1b86b94b86e4628d97beca95cc7dd26c2f30758" + integrity sha512-MPvZbG2RA3zuU+AYgsVysJvNLyf3bvi1nt3ywHARwMW2TB38VQuYhQFD1pTRzBuqiV5ieYif7mLY5bHWGUVZqw== + dependencies: + "@types/plotly.js" "*" + +"@types/plotly.js@*": + version "1.54.17" + resolved "https://registry.yarnpkg.com/@types/plotly.js/-/plotly.js-1.54.17.tgz#346844049bed5675907122f83e29640ada4cf411" + integrity sha512-2nk1jEDQ85Ix6SQsC7M7Otl5M8OoYwTl7V/x2ptyX373slUJAj+vQ3njYGy/h9p/rxTq7W0fn3JvXjuxXuA0Qg== + dependencies: + "@types/d3" "^3" + +"@types/request@^2.48.7": + version "2.48.7" + resolved "https://registry.yarnpkg.com/@types/request/-/request-2.48.7.tgz#a962d11a26e0d71d9a9913d96bb806dc4d4c2f19" + integrity sha512-GWP9AZW7foLd4YQxyFZDBepl0lPsWLMEXDZUjQ/c1gqVPDPECrRZyEzuhJdnPWioFCq3Tv0qoGpMD6U+ygd4ZA== + dependencies: + "@types/caseless" "*" + "@types/node" "*" + "@types/tough-cookie" "*" + form-data "^2.5.0" + "@types/seedrandom@2.4.27": version "2.4.27" resolved "https://registry.yarnpkg.com/@types/seedrandom/-/seedrandom-2.4.27.tgz#9db563937dd86915f69092bc43259d2f48578e41" integrity sha1-nbVjk33YaRX2kJK8QyWdL0hXjkE= +"@types/stream-chain@*": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/stream-chain/-/stream-chain-2.0.1.tgz#4d3cc47a32609878bc188de0bae420bcfd3bf1f5" + integrity sha512-D+Id9XpcBpampptkegH7WMsEk6fUdf9LlCIX7UhLydILsqDin4L0QT7ryJR0oycwC7OqohIzdfcMHVZ34ezNGg== + dependencies: + "@types/node" "*" + +"@types/stream-json@^1.7.1": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@types/stream-json/-/stream-json-1.7.1.tgz#58b82a41161f2936c9bfc6c725a30e956bbd443b" + integrity sha512-BNIK/ix6iJvWvoXbDVVJhw5LNG1wie/rXcUo7jw4hBqY3FhIrg0e+RMXFN5UreKclBIStl9FDEHNSDLuuQ9/MQ== + dependencies: + "@types/node" "*" + "@types/stream-chain" "*" + +"@types/table@^6.3.2": + version "6.3.2" + resolved "https://registry.yarnpkg.com/@types/table/-/table-6.3.2.tgz#e18ad2594400d81c3da28c31b342eb5a0d87a8e7" + integrity sha512-GJ82z3vQbx2BhiUo12w2A3lyBpXPJrGHjQ7iS5aH925098w8ojqiWBhgOUy97JS2PKLmRCTLT0sI+gJI4futig== + dependencies: + table "*" + +"@types/tough-cookie@*": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.1.tgz#8f80dd965ad81f3e1bc26d6f5c727e132721ff40" + integrity sha512-Y0K95ThC3esLEYD6ZuqNek29lNX2EM1qxV8y2FTLUB0ff5wWrk7az+mLrnNFUnaXcgKye22+sFBRXOgpPILZNg== + "@types/webgl-ext@0.0.30": version "0.0.30" resolved "https://registry.yarnpkg.com/@types/webgl-ext/-/webgl-ext-0.0.30.tgz#0ce498c16a41a23d15289e0b844d945b25f0fb9d" integrity sha512-LKVgNmBxN0BbljJrVUwkxwRYqzsAEPcZOe6S2T6ZaBDIrFp0qu4FNlpc5sM1tGbXUYFgdVQIoeLk1Y1UoblyEg== -"@types/webgl2@0.0.5": - version "0.0.5" - resolved "https://registry.yarnpkg.com/@types/webgl2/-/webgl2-0.0.5.tgz#dd925e20ab8ace80eb4b1e46fda5b109c508fb0d" - integrity sha512-oGaKsBbxQOY5+aJFV3KECDhGaXt+yZJt2y/OZsnQGLRkH6Fvr7rv4pCt3SRH1somIHfej/c4u7NSpCyd9x+1Ow== +"@types/webgl2@0.0.6": + version "0.0.6" + resolved "https://registry.yarnpkg.com/@types/webgl2/-/webgl2-0.0.6.tgz#1ea2db791362bd8521548d664dbd3c5311cdf4b6" + integrity sha512-50GQhDVTq/herLMiqSQkdtRu+d5q/cWHn4VvKJtrj4DJAjo1MNkWYa2MA41BaBO1q1HgsUjuQvEOk0QHvlnAaQ== + +"@typescript-eslint/eslint-plugin@^4.30.0": + version "4.30.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.30.0.tgz#4a0c1ae96b953f4e67435e20248d812bfa55e4fb" + integrity sha512-NgAnqk55RQ/SD+tZFD9aPwNSeHmDHHe5rtUyhIq0ZeCWZEvo4DK9rYz7v9HDuQZFvn320Ot+AikaCKMFKLlD0g== + dependencies: + "@typescript-eslint/experimental-utils" "4.30.0" + "@typescript-eslint/scope-manager" "4.30.0" + debug "^4.3.1" + functional-red-black-tree "^1.0.1" + regexpp "^3.1.0" + semver "^7.3.5" + tsutils "^3.21.0" + +"@typescript-eslint/experimental-utils@4.30.0": + version "4.30.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.30.0.tgz#9e49704fef568432ae16fc0d6685c13d67db0fd5" + integrity sha512-K8RNIX9GnBsv5v4TjtwkKtqMSzYpjqAQg/oSphtxf3xxdt6T0owqnpojztjjTcatSteH3hLj3t/kklKx87NPqw== + dependencies: + "@types/json-schema" "^7.0.7" + "@typescript-eslint/scope-manager" "4.30.0" + "@typescript-eslint/types" "4.30.0" + "@typescript-eslint/typescript-estree" "4.30.0" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + +"@typescript-eslint/parser@^4.30.0": + version "4.30.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.30.0.tgz#6abd720f66bd790f3e0e80c3be77180c8fcb192d" + integrity sha512-HJ0XuluSZSxeboLU7Q2VQ6eLlCwXPBOGnA7CqgBnz2Db3JRQYyBDJgQnop6TZ+rsbSx5gEdWhw4rE4mDa1FnZg== + dependencies: + "@typescript-eslint/scope-manager" "4.30.0" + "@typescript-eslint/types" "4.30.0" + "@typescript-eslint/typescript-estree" "4.30.0" + debug "^4.3.1" + +"@typescript-eslint/scope-manager@4.30.0": + version "4.30.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.30.0.tgz#1a3ffbb385b1a06be85cd5165a22324f069a85ee" + integrity sha512-VJ/jAXovxNh7rIXCQbYhkyV2Y3Ac/0cVHP/FruTJSAUUm4Oacmn/nkN5zfWmWFEanN4ggP0vJSHOeajtHq3f8A== + dependencies: + "@typescript-eslint/types" "4.30.0" + "@typescript-eslint/visitor-keys" "4.30.0" + +"@typescript-eslint/types@4.30.0": + version "4.30.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.30.0.tgz#fb9d9b0358426f18687fba82eb0b0f869780204f" + integrity sha512-YKldqbNU9K4WpTNwBqtAerQKLLW/X2A/j4yw92e3ZJYLx+BpKLeheyzoPfzIXHfM8BXfoleTdiYwpsvVPvHrDw== + +"@typescript-eslint/typescript-estree@4.30.0": + version "4.30.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.30.0.tgz#ae57833da72a753f4846cd3053758c771670c2ac" + integrity sha512-6WN7UFYvykr/U0Qgy4kz48iGPWILvYL34xXJxvDQeiRE018B7POspNRVtAZscWntEPZpFCx4hcz/XBT+erenfg== + dependencies: + "@typescript-eslint/types" "4.30.0" + "@typescript-eslint/visitor-keys" "4.30.0" + debug "^4.3.1" + globby "^11.0.3" + is-glob "^4.0.1" + semver "^7.3.5" + tsutils "^3.21.0" + +"@typescript-eslint/visitor-keys@4.30.0": + version "4.30.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.30.0.tgz#a47c6272fc71b0c627d1691f68eaecf4ad71445e" + integrity sha512-pNaaxDt/Ol/+JZwzP7MqWc8PJQTUhZwoee/PVlQ+iYoYhagccvoHnC9e4l+C/krQYYkENxznhVSDwClIbZVxRw== + dependencies: + "@typescript-eslint/types" "4.30.0" + eslint-visitor-keys "^2.0.0" "@ungap/promise-all-settled@1.1.2": version "1.1.2" @@ -1180,6 +1377,11 @@ JSONStream@^1.0.3: jsonparse "^1.2.0" through ">=2.2.7 <3" +abab@^2.0.3, abab@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" + integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== + accepts@~1.3.4: version "1.3.7" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" @@ -1188,6 +1390,14 @@ accepts@~1.3.4: mime-types "~2.1.24" negotiator "0.6.2" +acorn-globals@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" + integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== + dependencies: + acorn "^7.1.1" + acorn-walk "^7.1.1" + acorn-jsx@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" @@ -1202,12 +1412,12 @@ acorn-node@^1.2.0, acorn-node@^1.3.0, acorn-node@^1.5.2, acorn-node@^1.6.1: acorn-walk "^7.0.0" xtend "^4.0.2" -acorn-walk@^7.0.0: +acorn-walk@^7.0.0, acorn-walk@^7.1.1: version "7.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== -acorn@^7.0.0, acorn@^7.4.0: +acorn@^7.0.0, acorn@^7.1.1, acorn@^7.4.0: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== @@ -1217,6 +1427,11 @@ acorn@^8.0.4: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.0.5.tgz#a3bfb872a74a6a7f661bc81b9849d9cac12601b7" integrity sha512-v+DieK/HJkJOpFBETDJioequtc3PfxsWMaxIdIwujtF7FEV/MAyDQLlm6/zPvr7Mix07mLh6ccVwIsloceodlg== +acorn@^8.2.4: + version "8.5.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.5.0.tgz#4512ccb99b3698c752591e9bb4472e38ad43cee2" + integrity sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q== + adler-32@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/adler-32/-/adler-32-1.2.0.tgz#6a3e6bf0a63900ba15652808cb15c6813d1a5f25" @@ -1225,11 +1440,25 @@ adler-32@~1.2.0: exit-on-epipe "~1.0.1" printj "~1.1.0" +adler-32@~1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/adler-32/-/adler-32-1.3.0.tgz#3cad1b71cdfa69f6c8a91f3e3615d31a4fdedc72" + integrity sha512-f5nltvjl+PRUh6YNfUstRaXwJxtfnKEWhAWWlmKvh+Y3J2+98a0KKVYDEhz6NdKGqswLhjNGznxfSsZGOvOd9g== + dependencies: + printj "~1.2.2" + after@0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8= +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + aggregate-error@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" @@ -1243,7 +1472,7 @@ ajv-keywords@^3.5.2: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: +ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -1263,6 +1492,16 @@ ajv@^7.0.2: require-from-string "^2.0.2" uri-js "^4.2.2" +ajv@^8.0.1: + version "8.6.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.6.2.tgz#2fb45e0e5fcbc0813326c1c3da535d1881bb0571" + integrity sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + ansi-colors@4.1.1, ansi-colors@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" @@ -1273,17 +1512,12 @@ ansi-regex@^3.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= -ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== - ansi-regex@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== -ansi-styles@^3.2.0, ansi-styles@^3.2.1: +ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== @@ -1352,6 +1586,11 @@ arr-union@^3.1.0: resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" @@ -1402,11 +1641,6 @@ assign-symbols@^1.0.0: resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== - astral-regex@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" @@ -1427,6 +1661,20 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== +awesome-typescript-loader@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/awesome-typescript-loader/-/awesome-typescript-loader-5.2.1.tgz#a41daf7847515f4925cdbaa3075d61f289e913fc" + integrity sha512-slv66OAJB8orL+UUaTI3pKlLorwIvS4ARZzYR9iJJyGsEgOqueMfOMdKySWzZ73vIkEe3fcwFgsKMg4d8zyb1g== + dependencies: + chalk "^2.4.1" + enhanced-resolve "^4.0.0" + loader-utils "^1.1.0" + lodash "^4.17.5" + micromatch "^3.1.9" + mkdirp "^0.5.1" + source-map-support "^0.5.3" + webpack-log "^1.2.0" + aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" @@ -1514,6 +1762,14 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== +bl@^1.0.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.3.tgz#1e8dd80142eac80d7158c9dccc047fb620e035e7" + integrity sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww== + dependencies: + readable-stream "^2.3.5" + safe-buffer "^5.1.1" + blob@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683" @@ -1569,7 +1825,7 @@ braces@^2.3.1, braces@^2.3.2: split-string "^3.0.2" to-regex "^3.0.1" -braces@^3.0.2, braces@~3.0.2: +braces@^3.0.1, braces@^3.0.2, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== @@ -1593,6 +1849,11 @@ browser-pack@^6.0.1: through2 "^2.0.0" umd "^3.0.0" +browser-process-hrtime@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" + integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== + browser-resolve@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-2.0.0.tgz#99b7304cb392f8d73dba741bb2d7da28c6d7842b" @@ -1822,14 +2083,14 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -cfb@^1.1.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/cfb/-/cfb-1.2.0.tgz#6a4d0872b525ed60349e1ef51fb4b0bf73eca9a8" - integrity sha512-sXMvHsKCICVR3Naq+J556K+ExBo9n50iKl6LGarlnvuA2035uMlGA/qVrc0wQtow5P1vJEw9UyrKLCbtIKz+TQ== +cfb@^1.1.4, cfb@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/cfb/-/cfb-1.2.1.tgz#209429e4c68efd30641f6fc74b2d6028bd202402" + integrity sha512-wT2ScPAFGSVy7CY+aauMezZBnNrfnaLSrxHUHdea+Td/86vrk6ZquggV+ssBR88zNs0OnBkL2+lf9q0K+zVGzQ== dependencies: - adler-32 "~1.2.0" + adler-32 "~1.3.0" crc-32 "~1.2.0" - printj "~1.1.2" + printj "~1.3.0" chai@^4.2.0: version "4.2.0" @@ -1843,7 +2104,7 @@ chai@^4.2.0: pathval "^1.1.0" type-detect "^4.0.5" -chalk@^2.0.0: +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -1937,13 +2198,10 @@ clone-deep@^4.0.1: kind-of "^6.0.2" shallow-clone "^3.0.0" -codepage@~1.14.0: - version "1.14.0" - resolved "https://registry.yarnpkg.com/codepage/-/codepage-1.14.0.tgz#8cbe25481323559d7d307571b0fff91e7a1d2f99" - integrity sha1-jL4lSBMjVZ19MHVxsP/5HnodL5k= - dependencies: - commander "~2.14.1" - exit-on-epipe "~1.0.1" +codepage@~1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/codepage/-/codepage-1.15.0.tgz#2e00519024b39424ec66eeb3ec07227e692618ab" + integrity sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA== collection-visit@^1.0.0: version "1.0.0" @@ -1987,6 +2245,11 @@ colors@^1.4.0: resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== +colors@~0.6.0-1: + version "0.6.2" + resolved "https://registry.yarnpkg.com/colors/-/colors-0.6.2.tgz#2423fe6678ac0c5dae8852e5d0e5be08c997abcc" + integrity sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w= + combine-source-map@^0.8.0, combine-source-map@~0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.8.0.tgz#a58d0df042c186fcf822a8e8015f5450d2d79a8b" @@ -2019,10 +2282,10 @@ commander@^7.0.0: resolved "https://registry.yarnpkg.com/commander/-/commander-7.0.0.tgz#3e2bbfd8bb6724760980988fb5b22b7ee6b71ab2" integrity sha512-ovx/7NkTrnPuIV8sqk/GjUIIM1+iUQeqA3ye2VNpq9sVoiZsooObWlQy+OPWGI17GDaEoybuAGJm6U8yC077BA== -commander@~2.14.1: - version "2.14.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.14.1.tgz#2235123e37af8ca3c65df45b026dbd357b01b9aa" - integrity sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw== +commander@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.1.0.tgz#d121bbae860d9992a3d517ba96f56588e47c6781" + integrity sha1-0SG7roYNmZKj1Re6lvVliOR8Z4E= commander@~2.17.1: version "2.17.1" @@ -2034,10 +2297,10 @@ commondir@^1.0.1: resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= -complex.js@^2.0.11: - version "2.0.11" - resolved "https://registry.yarnpkg.com/complex.js/-/complex.js-2.0.11.tgz#09a873fbf15ffd8c18c9c2201ccef425c32b8bf1" - integrity sha512-6IArJLApNtdg1P1dFtn3dnyzoZBEF0MwMnrfF1exSBRpZYoy4yieMkpZhQDC0uwctw48vii0CFVyHfpgZ/DfGw== +complex.js@^2.0.15: + version "2.0.15" + resolved "https://registry.yarnpkg.com/complex.js/-/complex.js-2.0.15.tgz#7add6848b4c1d12aa9262f7df925ebe7a51a7406" + integrity sha512-gDBvQU8IG139ZBQTSo2qvDFP+lANMGluM779csXOr6ny1NUtA3wkUnCFjlDNH/moAVfXtvClYt6G0zarFbtz5w== component-bind@1.0.0: version "1.0.0" @@ -2215,11 +2478,36 @@ crypto-browserify@^3.0.0: randombytes "^2.0.0" randomfill "^1.0.3" +cssom@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" + integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== + +cssom@~0.3.6: + version "0.3.8" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== + +cssstyle@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" + integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== + dependencies: + cssom "~0.3.6" + custom-event@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" integrity sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU= +d@1, d@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" + integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== + dependencies: + es5-ext "^0.10.50" + type "^1.0.1" + dash-ast@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/dash-ast/-/dash-ast-1.0.0.tgz#12029ba5fb2f8aa6f0a861795b23c1b4b6c27d37" @@ -2232,6 +2520,15 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" +data-urls@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" + integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== + dependencies: + abab "^2.0.3" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.0.0" + date-format@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/date-format/-/date-format-2.1.0.tgz#31d5b5ea211cf5fd764cd38baf9d033df7e125cf" @@ -2249,6 +2546,13 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3: dependencies: ms "2.0.0" +debug@4, debug@^4.3.1: + version "4.3.2" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" + integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== + dependencies: + ms "2.1.2" + debug@4.3.1, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: version "4.3.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" @@ -2280,10 +2584,10 @@ decamelize@^4.0.0: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== -decimal.js@^10.2.1: - version "10.2.1" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.1.tgz#238ae7b0f0c793d3e3cea410108b35a2c01426a3" - integrity sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw== +decimal.js@^10.2.1, decimal.js@^10.3.1: + version "10.3.1" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783" + integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== decode-uri-component@^0.2.0: version "0.2.0" @@ -2302,6 +2606,11 @@ deep-is@^0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= +deep-is@~0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + default-require-extensions@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-3.0.0.tgz#e03f93aac9b2b6443fc52e5e4a37b3ad9ad8df96" @@ -2399,6 +2708,13 @@ diffie-hellman@^5.0.0: miller-rabin "^4.0.0" randombytes "^2.0.0" +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + doctrine@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" @@ -2421,6 +2737,18 @@ domain-browser@^1.2.0: resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== +domexception@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" + integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== + dependencies: + webidl-conversions "^5.0.0" + +dotenv@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" + integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== + duplexer2@^0.1.2, duplexer2@~0.1.0, duplexer2@~0.1.2: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" @@ -2459,11 +2787,6 @@ elliptic@^6.5.3: minimalistic-assert "^1.0.1" minimalistic-crypto-utils "^1.0.1" -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" @@ -2519,6 +2842,23 @@ engine.io@~3.5.0: engine.io-parser "~2.2.0" ws "~7.4.2" +enhanced-resolve@^4.0.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" + integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.5.0" + tapable "^1.0.0" + +enhanced-resolve@^5.0.0: + version "5.8.3" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz#6d552d465cce0423f5b3d718511ea53826a7b2f0" + integrity sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + enhanced-resolve@^5.7.0: version "5.7.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.7.0.tgz#525c5d856680fbd5052de453ac83e32049958b5c" @@ -2544,16 +2884,49 @@ envinfo@^7.7.3: resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.7.4.tgz#c6311cdd38a0e86808c1c9343f667e4267c4a320" integrity sha512-TQXTYFVVwwluWSFis6K2XKxgrD22jEv0FTuLCQI+OjH7rn93+iY0fSSFM5lrSxFY+H1+B0/cvvlamr3UsBivdQ== +errno@^0.1.3: + version "0.1.8" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== + dependencies: + prr "~1.0.1" + es-module-lexer@^0.3.26: version "0.3.26" resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.3.26.tgz#7b507044e97d5b03b01d4392c74ffeb9c177a83b" integrity sha512-Va0Q/xqtrss45hWzP8CZJwzGSZJjDM5/MJRE3IXXnUCcVLElR9BRaE9F62BopysASyc4nM3uwhSW7FFB9nlWAA== +es5-ext@^0.10.35, es5-ext@^0.10.50: + version "0.10.53" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" + integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== + dependencies: + es6-iterator "~2.0.3" + es6-symbol "~3.1.3" + next-tick "~1.0.0" + es6-error@^4.0.1: version "4.1.1" resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== +es6-iterator@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-symbol@^3.1.1, es6-symbol@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" + integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== + dependencies: + d "^1.0.1" + ext "^1.1.2" + escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" @@ -2579,6 +2952,18 @@ escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= +escodegen@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" + integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== + dependencies: + esprima "^4.0.1" + estraverse "^5.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + eslint-scope@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" @@ -2594,6 +2979,13 @@ eslint-utils@^2.1.0: dependencies: eslint-visitor-keys "^1.1.0" +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== + dependencies: + eslint-visitor-keys "^2.0.0" + eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" @@ -2656,7 +3048,7 @@ espree@^7.3.0, espree@^7.3.1: acorn-jsx "^5.3.1" eslint-visitor-keys "^1.3.0" -esprima@^4.0.0: +esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== @@ -2728,6 +3120,13 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" +executioner@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/executioner/-/executioner-2.0.1.tgz#add328e03bc45dd598f358fbb529fc0be0ec6fcd" + integrity sha1-rdMo4DvEXdWY81j7tSn8C+Dsb80= + dependencies: + mixly "^1.0.0" + exit-on-epipe@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz#0bdd92e87d5285d267daa8171d0eb06159689692" @@ -2746,6 +3145,13 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" +ext@^1.1.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244" + integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A== + dependencies: + type "^2.0.0" + extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" @@ -2795,12 +3201,23 @@ fast-deep-equal@^3.1.1: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== +fast-glob@^3.1.1: + version "3.2.7" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" + integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -fast-levenshtein@^2.0.6: +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= @@ -2815,6 +3232,13 @@ fastest-levenshtein@^1.0.12: resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2" integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow== +fastq@^1.6.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.12.0.tgz#ed7b6ab5d62393fb2cc591c853652a5c318bf794" + integrity sha512-VNX0QkHK3RsXVKr9KrlUv/FoTa0NdbYoHHl7uXHv2rzyHSlxjdNAKug2twd9luJxpcyNeAgf5iPPMutJO67Dfg== + dependencies: + reusify "^1.0.4" + fflate@^0.3.8: version "0.3.11" resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.3.11.tgz#2c440d7180fdeb819e64898d8858af327b042a5d" @@ -2882,6 +3306,14 @@ find-up@^4.0.0, find-up@^4.1.0: locate-path "^5.0.0" path-exists "^4.0.0" +findup@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/findup/-/findup-0.1.5.tgz#8ad929a3393bac627957a7e5de4623b06b0e2ceb" + integrity sha1-itkpozk7rGJ5V6fl3kYjsGsOLOs= + dependencies: + colors "~0.6.0-1" + commander "~2.1.0" + flat-cache@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" @@ -2928,6 +3360,15 @@ forever-agent@~0.6.1: resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= +form-data@^2.5.0: + version "2.5.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" + integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + form-data@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.0.tgz#31b7e39c85f1355b7139ee0c647cf0de7f83c682" @@ -2951,10 +3392,10 @@ frac@~1.1.2: resolved "https://registry.yarnpkg.com/frac/-/frac-1.1.2.tgz#3d74f7f6478c88a1b5020306d747dc6313c74d0b" integrity sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA== -fraction.js@^4.0.12: - version "4.0.13" - resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.0.13.tgz#3c1c315fa16b35c85fffa95725a36fa729c69dfe" - integrity sha512-E1fz2Xs9ltlUp+qbiyx9wmt2n9dRzPsS11Jtdb8D2o+cC7wr9xkkKsVKJuBX0ST+LVS+LhLO+SbLJNtfWcJvXA== +fraction.js@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.1.1.tgz#ac4e520473dae67012d618aab91eda09bcb400ff" + integrity sha512-MHOhvvxHTfRFpF1geTK9czMIZ6xclsEor2wkIGYYq+PxcQqT7vStJqjhe6S1TenZrMZzo+wlqOufBDVepUEgPg== fragment-cache@^0.2.1: version "0.2.1" @@ -2963,6 +3404,21 @@ fragment-cache@^0.2.1: dependencies: map-cache "^0.2.2" +from2-array@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/from2-array/-/from2-array-0.0.4.tgz#eafc16b65f6e2719bcd57fdc1869005ac1332cd6" + integrity sha1-6vwWtl9uJxm81X/cGGkAWsEzLNY= + dependencies: + from2 "^2.0.3" + +from2@^2.0.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + fromentries@^1.2.0: version "1.3.2" resolved "https://registry.yarnpkg.com/fromentries/-/fromentries-1.3.2.tgz#e4bca6808816bf8f93b52750f1127f5a6fd86e3a" @@ -2992,6 +3448,11 @@ fsevents@~2.3.1: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.1.tgz#b209ab14c61012636c8863507edf7fb68cc54e9f" integrity sha512-YR47Eg4hChJGAB1O3yEAOkGO+rlzutoICGqGo9EZ4lKWokzZRSyIW1QmTzqjtw8MJdj9srP869CuWw/hyzSiBw== +fulcon@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/fulcon/-/fulcon-1.0.2.tgz#8a4dfda4c73fcd9cc62a79d5045c392b45547320" + integrity sha1-ik39pMc/zZzGKnnVBFw5K0VUcyA= + function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -3068,6 +3529,13 @@ glob-parent@^5.0.0, glob-parent@~5.1.0: dependencies: is-glob "^4.0.1" +glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + glob-to-regexp@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" @@ -3085,6 +3553,18 @@ glob@7.1.6, glob@^7.0.0, glob@^7.1.0, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" +glob@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" @@ -3097,6 +3577,18 @@ globals@^12.1.0: dependencies: type-fest "^0.8.1" +globby@^11.0.3: + version "11.0.4" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.4.tgz#2cbaff77c2f2a62e71e9b2813a67b97a3a3001a5" + integrity sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.1.1" + ignore "^5.1.4" + merge2 "^1.3.0" + slash "^3.0.0" + graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: version "4.2.4" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" @@ -3229,6 +3721,18 @@ hmac-drbg@^1.0.1: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + +html-encoding-sniffer@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" + integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== + dependencies: + whatwg-encoding "^1.0.5" + html-escaper@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" @@ -3250,6 +3754,15 @@ http-errors@1.7.2: statuses ">= 1.5.0 < 2" toidentifier "1.0.0" +http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + dependencies: + "@tootallnate/once" "1" + agent-base "6" + debug "4" + http-proxy@^1.18.1: version "1.18.1" resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" @@ -3273,6 +3786,14 @@ https-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= +https-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" + integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== + dependencies: + agent-base "6" + debug "4" + human-signals@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" @@ -3285,16 +3806,41 @@ iconv-lite@0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + ieee754@^1.1.4: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== +ify-loader@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ify-loader/-/ify-loader-1.1.0.tgz#abe0654c919b48483cf075fe4a0ed2aad2da6a8b" + integrity sha512-EiyC45FRIs+z4g98+jBzuYCfoM6TKG9p7Ek5YZUeM7rucNucaMZIseRj/5Q3I4ypkZXyC2wnU1RcYrVmshe2xw== + dependencies: + bl "^1.0.0" + findup "^0.1.5" + from2-array "0.0.4" + map-limit "0.0.1" + multipipe "^0.3.0" + read-package-json "^2.0.2" + resolve "^1.1.6" + ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== +ignore@^5.1.4: + version "5.1.8" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" @@ -3372,6 +3918,13 @@ insert-module-globals@^7.0.0: undeclared-identifiers "^1.1.2" xtend "^4.0.0" +install-peers@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/install-peers/-/install-peers-1.0.3.tgz#6348f8f67e6bc23c19ee78adb819c43f8d1dd7d7" + integrity sha512-MAlSHlrn4p+g3fhx8ZVxQZXX+MkeinKLu/ThfAmrVnN5c2L8Vof7myb0UsgowJEiGcFNHYnTvo37r3uap5asYA== + dependencies: + executioner "^2.0.1" + interpret@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" @@ -3514,6 +4067,11 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" +is-potential-custom-element-name@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== + is-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" @@ -3671,6 +4229,39 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= +jsdom@^16.2.2: + version "16.7.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" + integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== + dependencies: + abab "^2.0.5" + acorn "^8.2.4" + acorn-globals "^6.0.0" + cssom "^0.4.4" + cssstyle "^2.3.0" + data-urls "^2.0.0" + decimal.js "^10.2.1" + domexception "^2.0.1" + escodegen "^2.0.0" + form-data "^3.0.0" + html-encoding-sniffer "^2.0.1" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-potential-custom-element-name "^1.0.1" + nwsapi "^2.2.0" + parse5 "6.0.1" + saxes "^5.0.1" + symbol-tree "^3.2.4" + tough-cookie "^4.0.0" + w3c-hr-time "^1.0.2" + w3c-xmlserializer "^2.0.0" + webidl-conversions "^6.1.0" + whatwg-encoding "^1.0.5" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.5.0" + ws "^7.4.6" + xml-name-validator "^3.0.0" + jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" @@ -3681,11 +4272,21 @@ jsesc@~0.5.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= +json-loader@^0.5.7: + version "0.5.7" + resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" + integrity sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w== + json-parse-better-errors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -3864,12 +4465,20 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + loader-runner@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.2.0.tgz#d7022380d66d14c5fb1d496b89864ebcfd478384" integrity sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw== -loader-utils@^1.4.0: +loader-utils@^1.1.0, loader-utils@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== @@ -3892,6 +4501,11 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= + lodash.flattendeep@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" @@ -3902,7 +4516,12 @@ lodash.memoize@~3.0.3: resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-3.0.4.tgz#2dcbd2c287cbc0a55cc42328bd0c736150d53e3f" integrity sha1-LcvSwofLwKVcxCMovQxzYVDVPj8= -lodash@^4.17.14, lodash@^4.17.19, lodash@^4.17.20: +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= + +lodash@^4.17.14, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.5, lodash@^4.7.0: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -3919,6 +4538,13 @@ log-symbols@4.0.0: dependencies: chalk "^4.0.0" +log-symbols@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" + integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== + dependencies: + chalk "^2.0.1" + log4js@^6.2.1: version "6.3.0" resolved "https://registry.yarnpkg.com/log4js/-/log4js-6.3.0.tgz#10dfafbb434351a3e30277a00b9879446f715bcb" @@ -3930,6 +4556,19 @@ log4js@^6.2.1: rfdc "^1.1.4" streamroller "^2.2.4" +loglevelnext@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/loglevelnext/-/loglevelnext-1.0.5.tgz#36fc4f5996d6640f539ff203ba819641680d75a2" + integrity sha512-V/73qkPuJmx4BcBF19xPBr+0ZRVBhc4POxvZTZdMeXpJ4NItXSJ/MSwuFT0kQJlCbXvdlZoQQ/418bS1y9Jh6A== + dependencies: + es6-symbol "^3.1.1" + object.assign "^4.1.0" + +long@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" + integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== + lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -3957,6 +4596,13 @@ map-cache@^0.2.2: resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= +map-limit@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/map-limit/-/map-limit-0.0.1.tgz#eb7961031c0f0e8d001bf2d56fab685d58822f38" + integrity sha1-63lhAxwPDo0AG/LVb6toXViCLzg= + dependencies: + once "~1.3.0" + map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" @@ -3964,17 +4610,18 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" -mathjs@7.5.1: - version "7.5.1" - resolved "https://registry.yarnpkg.com/mathjs/-/mathjs-7.5.1.tgz#eb125295310a99ddcaf6145c47b09aab36e48274" - integrity sha512-H2q/Dq0qxBLMw+G84SSXmGqo/znihuxviGgAQwAcyeFLwK2HksvSGNx4f3dllZF51bWOnu2op60VZxH2Sb51Pw== +mathjs@9.4.4: + version "9.4.4" + resolved "https://registry.yarnpkg.com/mathjs/-/mathjs-9.4.4.tgz#29acd67563c1e720910213062824c3faf61bc858" + integrity sha512-5EEJXnWOzLDgMHSFyw623nH+MTBZxquWwXtrzTsingOouJJ6UZG2VNO1lwH31IMt9aMno1axO6TYleIP4YSDaQ== dependencies: - complex.js "^2.0.11" - decimal.js "^10.2.1" + "@babel/runtime" "^7.14.6" + complex.js "^2.0.15" + decimal.js "^10.3.1" escape-latex "^1.2.0" - fraction.js "^4.0.12" + fraction.js "^4.1.1" javascript-natural-sort "^0.7.1" - seed-random "^2.2.0" + seedrandom "^3.0.5" tiny-emitter "^2.1.0" typed-function "^2.0.0" @@ -3992,12 +4639,25 @@ media-typer@0.3.0: resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= +memory-fs@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" + integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA== + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== -micromatch@^3.1.10, micromatch@^3.1.4: +merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.9: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== @@ -4016,6 +4676,14 @@ micromatch@^3.1.10, micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.2" +micromatch@^4.0.0, micromatch@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" + integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== + dependencies: + braces "^3.0.1" + picomatch "^2.2.3" + miller-rabin@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" @@ -4076,11 +4744,25 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" +mixly@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/mixly/-/mixly-1.0.0.tgz#9b5a2e1f63e6dfba0d30e6797ffae62ab1dc24ef" + integrity sha1-m1ouH2Pm37oNMOZ5f/rmKrHcJO8= + dependencies: + fulcon "^1.0.1" + mkdirp-classic@^0.5.2: version "0.5.3" resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== +mkdirp@^0.5.1: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + mocha@^8.3.0: version "8.3.1" resolved "https://registry.yarnpkg.com/mocha/-/mocha-8.3.1.tgz#b9eda6da1eb8cb8d29860a9c2205de5b8a076560" @@ -4148,6 +4830,13 @@ ms@2.1.3, ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== +multipipe@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/multipipe/-/multipipe-0.3.1.tgz#92625525761ba04feaa09605b6382bce2c91f11f" + integrity sha1-kmJVJXYboE/qoJYFtjgrziyR8R8= + dependencies: + duplexer2 "^0.1.2" + nanoid@3.1.20: version "3.1.20" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.20.tgz#badc263c6b1dcf14b71efaa85f6ab4c1d6cfc788" @@ -4185,6 +4874,11 @@ neo-async@^2.6.2: resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== +next-tick@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" + integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= + node-fetch@~2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" @@ -4202,6 +4896,16 @@ node-releases@^1.1.71: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.72.tgz#14802ab6b1039a79a0c7d662b610a5bbd76eacbe" integrity sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw== +normalize-package-data@^2.0.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" @@ -4214,6 +4918,11 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== +npm-normalize-package-bin@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== + npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" @@ -4221,6 +4930,11 @@ npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" +nwsapi@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" + integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== + nyc@^15.1.0: version "15.1.0" resolved "https://registry.yarnpkg.com/nyc/-/nyc-15.1.0.tgz#1335dae12ddc87b6e249d5a1994ca4bdaea75f02" @@ -4316,6 +5030,13 @@ once@^1.3.0: dependencies: wrappy "1" +once@~1.3.0: + version "1.3.3" + resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" + integrity sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA= + dependencies: + wrappy "1" + onetime@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" @@ -4323,6 +5044,18 @@ onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" +optionator@^0.8.1: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + optionator@^0.9.1: version "0.9.1" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" @@ -4400,6 +5133,11 @@ pako@~1.0.5: resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== +papaparse@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/papaparse/-/papaparse-5.3.1.tgz#770b7a9124d821d4b2132132b7bd7dce7194b5b1" + integrity sha512-Dbt2yjLJrCwH2sRqKFFJaN5XgIASO9YOFeFP8rIBRG2Ain8mqk5r1M6DkfvqEVozVcz3r3HaUGw253hA1nLIcA== + parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -4425,6 +5163,11 @@ parse-asn1@^5.0.0, parse-asn1@^5.1.5: pbkdf2 "^3.0.3" safe-buffer "^5.1.1" +parse5@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + parseqs@0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.6.tgz#8e4bb5a19d1cdc844a08ac974d34e273afa670d5" @@ -4480,6 +5223,11 @@ path-platform@~0.11.15: resolved "https://registry.yarnpkg.com/path-platform/-/path-platform-0.11.15.tgz#e864217f74c36850f0852b78dc7bf7d4a5721bf2" integrity sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I= +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + pathval@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0" @@ -4506,6 +5254,11 @@ picomatch@^2.0.4, picomatch@^2.2.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== +picomatch@^2.2.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" + integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== + pify@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" @@ -4518,6 +5271,11 @@ pkg-dir@^4.1.0, pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" +plotly.js-dist-min@^2.8.0: + version "2.8.3" + resolved "https://registry.yarnpkg.com/plotly.js-dist-min/-/plotly.js-dist-min-2.8.3.tgz#0ffa317de10dd48f0c32d15c83c41f60230f50b3" + integrity sha512-TjovBrqIbedUfjGWNMMs++az3lF4hsIAB8EjqM/mC0cPrO7Wg86lBkHAsRbMra5aWyXA+M52yiQUUKBfThqwzg== + posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" @@ -4528,11 +5286,26 @@ prelude-ls@^1.2.1: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -printj@~1.1.0, printj@~1.1.2: +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +printj@~1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/printj/-/printj-1.1.2.tgz#d90deb2975a8b9f600fb3a1c94e3f4c53c78a222" integrity sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ== +printj@~1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/printj/-/printj-1.2.3.tgz#2cfb2b192a1e5385dbbe5b46658ac34aa828508a" + integrity sha512-sanczS6xOJOg7IKDvi4sGOUOe7c1tsEzjwlLFH/zgwx/uyImVM9/rgBkc8AfiQa/Vg54nRd8mkm9yI7WV/O+WA== + +printj@~1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/printj/-/printj-1.3.0.tgz#9018a918a790e43707f10625d6e10187a367cff6" + integrity sha512-017o8YIaz8gLhaNxRB9eBv2mWXI2CtzhPJALnQTP+OPpuUfP0RMWqr/mHCzqVeu1AQxfzSfAtAq66vKB8y7Lzg== + process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -4555,7 +5328,12 @@ progress@^2.0.0: resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== -psl@^1.1.28: +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + +psl@^1.1.28, psl@^1.1.33: version "1.8.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== @@ -4612,6 +5390,11 @@ querystring@0.2.0: resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5, randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -4649,7 +5432,17 @@ read-only-stream@^2.0.0: dependencies: readable-stream "^2.0.2" -readable-stream@^2.0.2, readable-stream@^2.2.2, readable-stream@~2.3.6: +read-package-json@^2.0.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.1.2.tgz#6992b2b66c7177259feb8eaac73c3acd28b9222a" + integrity sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA== + dependencies: + glob "^7.1.1" + json-parse-even-better-errors "^2.3.0" + normalize-package-data "^2.0.0" + npm-normalize-package-bin "^1.0.0" + +readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.2.2, readable-stream@^2.3.5, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -4853,7 +5646,7 @@ resolve@^1.1.4, resolve@^1.17.0, resolve@^1.4.0: is-core-module "^2.1.0" path-parse "^1.0.6" -resolve@^1.9.0: +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.9.0: version "1.20.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== @@ -4866,6 +5659,11 @@ ret@~0.1.10: resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + rfdc@^1.1.4: version "1.2.0" resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.2.0.tgz#9e9894258f48f284b43c3143c68070a4f373b949" @@ -4886,6 +5684,13 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" @@ -4903,11 +5708,18 @@ safe-regex@^1.1.0: dependencies: ret "~0.1.10" -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== +saxes@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" + integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== + dependencies: + xmlchars "^2.2.0" + schema-utils@^2.6.5: version "2.7.1" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" @@ -4926,26 +5738,31 @@ schema-utils@^3.0.0: ajv "^6.12.5" ajv-keywords "^3.5.2" -seed-random@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/seed-random/-/seed-random-2.2.0.tgz#2a9b19e250a817099231a5b99a4daf80b7fbed54" - integrity sha1-KpsZ4lCoFwmSMaW5mk2vgLf77VQ= - seedrandom@2.4.3: version "2.4.3" resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-2.4.3.tgz#2438504dad33917314bff18ac4d794f16d6aaecc" integrity sha1-JDhQTa0zkXMUv/GKxNeU8W1qrsw= -semver@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" - integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== +seedrandom@^2.4.3: + version "2.4.4" + resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-2.4.4.tgz#b25ea98632c73e45f58b77cfaa931678df01f9ba" + integrity sha512-9A+PDmgm+2du77B5i0Ip2cxOqqHjgNxnBgglxLcX78A2D6c2rTo61z4jnVABpF4cKeDMDG+cmXXvdnqse2VqMA== + +seedrandom@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-3.0.5.tgz#54edc85c95222525b0c7a6f6b3543d8e0b3aa0a7" + integrity sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg== -semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: +"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== +semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + semver@^6.0.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" @@ -4958,6 +5775,13 @@ semver@^7.2.1: dependencies: lru-cache "^6.0.0" +semver@^7.3.4, semver@^7.3.5: + version "7.3.5" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" + serialize-javascript@5.0.1, serialize-javascript@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-5.0.1.tgz#7886ec848049a462467a97d3d918ebb2aaf934f4" @@ -5047,14 +5871,10 @@ slash@^2.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== -slice-ansi@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== - dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== slice-ansi@^4.0.0: version "4.0.0" @@ -5152,6 +5972,20 @@ source-list-map@^2.0.1: resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== +source-map-js@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-0.6.2.tgz#0bb5de631b41cfbda6cfba8bd05a80efdfd2385e" + integrity sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug== + +source-map-loader@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-3.0.0.tgz#f2a04ee2808ad01c774dea6b7d2639839f3b3049" + integrity sha512-GKGWqWvYr04M7tn8dryIWvb0s8YM41z82iQv01yBtIylgxax0CwvSy6gc2Y02iuXwEfGWRlMicH0nvms9UZphw== + dependencies: + abab "^2.0.5" + iconv-lite "^0.6.2" + source-map-js "^0.6.2" + source-map-resolve@^0.5.0: version "0.5.3" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" @@ -5163,7 +5997,7 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@~0.5.19: +source-map-support@^0.5.3, source-map-support@~0.5.19: version "0.5.19" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== @@ -5181,7 +6015,7 @@ source-map@^0.5.0, source-map@^0.5.6, source-map@~0.5.3: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= -source-map@^0.6.0, source-map@^0.6.1: +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== @@ -5203,6 +6037,32 @@ spawn-wrap@^2.0.0: signal-exit "^3.0.2" which "^2.0.1" +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.11" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz#50c0d8c40a14ec1bf449bae69a0ea4685a9d9f95" + integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g== + split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" @@ -5258,6 +6118,11 @@ stream-browserify@^2.0.0: inherits "~2.0.1" readable-stream "^2.0.2" +stream-chain@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/stream-chain/-/stream-chain-2.2.4.tgz#2e5e9858e00d25ebaf7e4339e8328ddcab5facad" + integrity sha512-9lsl3YM53V5N/I1C2uJtc3Kavyi3kNYN83VkKb/bMWRk7D9imiFyUPYa0PoZbLohSVOX1mYE9YsmwObZUsth6Q== + stream-combiner2@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" @@ -5276,6 +6141,13 @@ stream-http@^3.0.0: readable-stream "^3.6.0" xtend "^4.0.2" +stream-json@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/stream-json/-/stream-json-1.7.3.tgz#8a2abe8b51a2e84ffbc8d09bca9d01dc70facae3" + integrity sha512-Y6dXn9KKWSwxOqnvHGcdZy1PK+J+7alBwHCeU3W9oRqm4ilLRA0XSPmd1tWwhg7tv9EIxJTMWh7KF15tYelKJg== + dependencies: + stream-chain "^2.2.4" + stream-splicer@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/stream-splicer/-/stream-splicer-2.0.1.tgz#0b13b7ee2b5ac7e0609a7463d83899589a363fcd" @@ -5301,15 +6173,6 @@ streamroller@^2.2.4: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" -string-width@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - string-width@^4.1.0, string-width@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" @@ -5340,13 +6203,6 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" -strip-ansi@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - strip-ansi@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" @@ -5397,6 +6253,11 @@ supports-color@^7.0.0, supports-color@^7.1.0: dependencies: has-flag "^4.0.0" +symbol-tree@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + syntax-error@^1.1.1: version "1.4.0" resolved "https://registry.yarnpkg.com/syntax-error/-/syntax-error-1.4.0.tgz#2d9d4ff5c064acb711594a3e3b95054ad51d907c" @@ -5404,15 +6265,17 @@ syntax-error@^1.1.1: dependencies: acorn-node "^1.2.0" -table@^5.4.6: - version "5.4.6" - resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" - integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== +table@*, table@6.7.1: + version "6.7.1" + resolved "https://registry.yarnpkg.com/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2" + integrity sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg== dependencies: - ajv "^6.10.2" - lodash "^4.17.14" - slice-ansi "^2.1.0" - string-width "^3.0.0" + ajv "^8.0.1" + lodash.clonedeep "^4.5.0" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.0" + strip-ansi "^6.0.0" table@^6.0.4: version "6.0.7" @@ -5424,6 +6287,11 @@ table@^6.0.4: slice-ansi "^4.0.0" string-width "^4.2.0" +tapable@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + tapable@^2.1.1, tapable@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.0.tgz#5c373d281d9c672848213d0e037d1c4165ab426b" @@ -5543,6 +6411,15 @@ toidentifier@1.0.0: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== +tough-cookie@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" + integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== + dependencies: + psl "^1.1.33" + punycode "^2.1.1" + universalify "^0.1.2" + tough-cookie@~2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" @@ -5551,11 +6428,35 @@ tough-cookie@~2.5.0: psl "^1.1.28" punycode "^2.1.1" -tslib@^1.9.0: +tr46@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" + integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== + dependencies: + punycode "^2.1.1" + +ts-loader@^9.2.6: + version "9.2.6" + resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-9.2.6.tgz#9937c4dd0a1e3dbbb5e433f8102a6601c6615d74" + integrity sha512-QMTC4UFzHmu9wU2VHZEmWWE9cUajjfcdcws+Gh7FhiO+Dy0RnR1bNz0YCHqhI0yRowCE9arVnNxYHqELOy9Hjw== + dependencies: + chalk "^4.1.0" + enhanced-resolve "^5.0.0" + micromatch "^4.0.0" + semver "^7.3.4" + +tslib@^1.8.1, tslib@^1.9.0: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +tsutils@^3.21.0: + version "3.21.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" + integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== + dependencies: + tslib "^1.8.1" + tty-browserify@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.1.tgz#3f05251ee17904dfd0677546670db9651682b811" @@ -5580,6 +6481,13 @@ type-check@^0.4.0, type-check@~0.4.0: dependencies: prelude-ls "^1.2.1" +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + type-detect@^4.0.0, type-detect@^4.0.5: version "4.0.8" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" @@ -5598,6 +6506,16 @@ type-is@~1.6.17: media-typer "0.3.0" mime-types "~2.1.24" +type@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" + integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== + +type@^2.0.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/type/-/type-2.5.0.tgz#0a2e78c2e77907b252abe5f298c1b01c63f0db3d" + integrity sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw== + typed-function@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/typed-function/-/typed-function-2.0.0.tgz#15ab3825845138a8b1113bd89e60cd6a435739e8" @@ -5615,6 +6533,11 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= +typescript@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.2.tgz#6d618640d430e3569a1dfb44f7d7e600ced3ee86" + integrity sha512-gzP+t5W4hdy4c+68bfcv0t400HVJMMd2+H9B7gae1nQlBzCqvrXX+6GL/b3GAgyTH966pzrZ70/fRjwAtZksSQ== + ua-parser-js@0.7.22: version "0.7.22" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.22.tgz#960df60a5f911ea8f1c818f3747b99c6e177eae3" @@ -5669,7 +6592,7 @@ union-value@^1.0.0: is-extendable "^0.1.1" set-value "^2.0.1" -universalify@^0.1.0: +universalify@^0.1.0, universalify@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== @@ -5741,7 +6664,7 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -uuid@^3.3.2, uuid@^3.3.3: +uuid@^3.1.0, uuid@^3.3.2, uuid@^3.3.3: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== @@ -5751,6 +6674,14 @@ v8-compile-cache@^2.0.3, v8-compile-cache@^2.2.0: resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132" integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q== +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + verror@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" @@ -5770,6 +6701,20 @@ void-elements@^2.0.0: resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w= +w3c-hr-time@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" + integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== + dependencies: + browser-process-hrtime "^1.0.0" + +w3c-xmlserializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" + integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== + dependencies: + xml-name-validator "^3.0.0" + watchpack@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.1.1.tgz#e99630550fca07df9f90a06056987baa40a689c7" @@ -5778,6 +6723,16 @@ watchpack@^2.0.0: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" +webidl-conversions@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" + integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== + +webidl-conversions@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" + integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== + webpack-cli@4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.5.0.tgz#b5213b84adf6e1f5de6391334c9fa53a48850466" @@ -5798,6 +6753,16 @@ webpack-cli@4.5.0: v8-compile-cache "^2.2.0" webpack-merge "^5.7.3" +webpack-log@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-1.2.0.tgz#a4b34cda6b22b518dbb0ab32e567962d5c72a43d" + integrity sha512-U9AnICnu50HXtiqiDxuli5gLB5PGBo7VvcHx36jRZHwK4vzOYLbImqT4lwWwoMHdQWwEKw736fCHEekokTEKHA== + dependencies: + chalk "^2.1.0" + log-symbols "^2.1.0" + loglevelnext "^1.0.1" + uuid "^3.1.0" + webpack-merge@^5.7.3: version "5.7.3" resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.7.3.tgz#2a0754e1877a25a8bbab3d2475ca70a052708213" @@ -5843,6 +6808,27 @@ webpack@5.21.2: watchpack "^2.0.0" webpack-sources "^2.1.1" +whatwg-encoding@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== + dependencies: + iconv-lite "0.4.24" + +whatwg-mimetype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + +whatwg-url@^8.0.0, whatwg-url@^8.5.0: + version "8.7.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" + integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== + dependencies: + lodash "^4.7.0" + tr46 "^2.1.0" + webidl-conversions "^6.1.0" + which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" @@ -5879,15 +6865,18 @@ wmf@~1.0.1: resolved "https://registry.yarnpkg.com/wmf/-/wmf-1.0.2.tgz#7d19d621071a08c2bdc6b7e688a9c435298cc2da" integrity sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw== -word-wrap@^1.2.3: +word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== -word@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/word/-/word-0.3.0.tgz#8542157e4f8e849f4a363a288992d47612db9961" - integrity sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA== +word@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/word/-/word-0.4.0.tgz#691272aaecb9da96388fc873d2ecb48a17cbee54" + integrity sha512-Aq84KjS7Z9HSU14qf4l/NEouaqfJAZtE9zEz7TIvw9V/3oJeUbjQwhz7ggqbL7I7REt4Bz+9HuCWsBO5N7xChw== + dependencies: + cfb "^1.2.0" + jsdom "^16.2.2" workerpool@6.1.0: version "6.1.0" @@ -5927,26 +6916,41 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" +ws@^7.4.6: + version "7.5.5" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.5.tgz#8b4bc4af518cfabd0473ae4f99144287b33eb881" + integrity sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w== + ws@~7.4.2: version "7.4.6" resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== -xlsx@^0.16.7: - version "0.16.9" - resolved "https://registry.yarnpkg.com/xlsx/-/xlsx-0.16.9.tgz#dacd5bb46bda6dd3743940c9c3dc1e2171826256" - integrity sha512-gxi1I3EasYvgCX1vN9pGyq920Ron4NO8PNfhuoA3Hpq6Y8f0ECXiy4OLrK4QZBnj1jx3QD+8Fq5YZ/3mPZ5iXw== +xlsx@^0.17.2: + version "0.17.2" + resolved "https://registry.yarnpkg.com/xlsx/-/xlsx-0.17.2.tgz#032bcca02ca01b5ebf7da93dcb035891f2c092af" + integrity sha512-RIhN6/oc/ZqYZqY4jz4AX92yNfULhtNrcZP1lknIcsyR+Ra8Zu/9F1lAZWncYbDex95iYQX/XNNNzNFXZjlNOQ== dependencies: adler-32 "~1.2.0" cfb "^1.1.4" - codepage "~1.14.0" + codepage "~1.15.0" commander "~2.17.1" crc-32 "~1.2.0" exit-on-epipe "~1.0.1" fflate "^0.3.8" ssf "~0.11.2" wmf "~1.0.1" - word "~0.3.0" + word "~0.4.0" + +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== + +xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== xmlhttprequest-ssl@~1.5.4: version "1.5.5" @@ -6032,9 +7036,9 @@ yargs@^15.0.2, yargs@^15.3.1: yargs-parser "^18.1.2" yarn@^1.22.10: - version "1.22.10" - resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.22.10.tgz#c99daa06257c80f8fa2c3f1490724e394c26b18c" - integrity sha512-IanQGI9RRPAN87VGTF7zs2uxkSyQSrSPsju0COgbsKQOOXr5LtcVPeyXWgwVa0ywG3d8dg6kSYKGBuYK021qeA== + version "1.22.11" + resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.22.11.tgz#d0104043e7349046e0e2aec977c24be106925ed6" + integrity sha512-AWje4bzqO9RUn3sdnM5N8n4ZJ0BqCc/kqFJvpOI5/EVkINXui0yuvU7NDCEF//+WaxHuNay2uOHxA4+tq1P3cg== yeast@0.1.2: version "0.1.2" diff --git a/danfojs-node/.babelrc b/src/danfojs-node/.babelrc similarity index 100% rename from danfojs-node/.babelrc rename to src/danfojs-node/.babelrc diff --git a/danfojs-node/.coveralls.yml b/src/danfojs-node/.coveralls.yml similarity index 100% rename from danfojs-node/.coveralls.yml rename to src/danfojs-node/.coveralls.yml diff --git a/danfojs-node/.eslintrc.json b/src/danfojs-node/.eslintrc.json similarity index 100% rename from danfojs-node/.eslintrc.json rename to src/danfojs-node/.eslintrc.json diff --git a/danfojs-node/.gitignore b/src/danfojs-node/.gitignore similarity index 64% rename from danfojs-node/.gitignore rename to src/danfojs-node/.gitignore index f013b3e4..c2db4c55 100644 --- a/danfojs-node/.gitignore +++ b/src/danfojs-node/.gitignore @@ -5,3 +5,8 @@ coverage danfojs/data .DS_Store .idea/ +build +lib/* +dist +*.xlsx +tensorflowlib.ts diff --git a/danfojs-node/.npmignore b/src/danfojs-node/.npmignore similarity index 100% rename from danfojs-node/.npmignore rename to src/danfojs-node/.npmignore diff --git a/src/danfojs-node/.prettierrc b/src/danfojs-node/.prettierrc new file mode 100644 index 00000000..ed799517 --- /dev/null +++ b/src/danfojs-node/.prettierrc @@ -0,0 +1,7 @@ +{ + "trailingComma": "es5", + "tabWidth": 2, + "semi": true, + "singleQuote": true, + "printWidth": 79 +} \ No newline at end of file diff --git a/danfojs-node/README.md b/src/danfojs-node/README.md similarity index 58% rename from danfojs-node/README.md rename to src/danfojs-node/README.md index 10c907ac..8f880afe 100644 --- a/danfojs-node/README.md +++ b/src/danfojs-node/README.md @@ -47,146 +47,170 @@ easy and intuitive. It is heavily inspired by [Pandas](https://pandas.pydata.org - Robust data preprocessing functions like [OneHotEncoders](https://danfo.jsdata.org/api-reference/general-functions/danfo.onehotencoder), [LabelEncoders](https://danfo.jsdata.org/api-reference/general-functions/danfo.labelencoder), and scalers like [StandardScaler](https://danfo.jsdata.org/api-reference/general-functions/danfo.standardscaler) and [MinMaxScaler](https://danfo.jsdata.org/api-reference/general-functions/danfo.minmaxscaler) are supported on DataFrame and Series +## Installation +There are three ways to install and use Danfo.js in your application +* For Nodejs applications, you can install the [__danfojs-node__]() version via package managers like yarn and/or npm: -To use Danfo.js via script tags, copy and paste the CDN below to the body of your HTML file +```bash +npm install danfojs-node + +or + +yarn add danfojs-node +``` +For client-side applications built with frameworks like React, Vue, Next.js, etc, you can install the [__danfojs__]() version: + +```bash +npm install danfojs + +or + +yarn add danfojs +``` + +For use directly in HTML files, you can add the latest script tag from [JsDelivr](https://www.jsdelivr.com/package/npm/danfojs) to your HTML file: + ```html - + ``` +See all available versions [here](https://www.jsdelivr.com/package/npm/danfojs) ### Example Usage in the Browser -> See the example below in [Code Sandbox](https://codepen.io/risingodegua/pen/bGwPGMG) +> Run in [Code Sandbox](https://codepen.io/risingodegua/pen/bGwPGMG) ```html - - - - - + + + + Document - - - + +
- - - + + ``` Output in Browser: ![](assets/browser-out.gif) -## How to install -Danfo.js is hosted on NPM, and can installed via package managers like npm and yarn - -```sh -npm install danfojs-node -``` - ### Example usage in Nodejs ```javascript const dfd = require("danfojs-node") +const file_url = "https://web.stanford.edu/class/archive/cs/cs109/cs109.1166/stuff/titanic.csv" +dfd.readCSV(file_url) + .then(df => { + //prints the first five columns + df.head().print() + + // Calculate descriptive statistics for all numerical columns + df.describe().print() -dfd.read_csv("https://web.stanford.edu/class/archive/cs/cs109/cs109.1166/stuff/titanic.csv") - .then(df => { - //prints the first five columns - df.head().print() + //prints the shape of the data + console.log(df.shape); - //Calculate descriptive statistics for all numerical columns - df.describe().print() + //prints all column names + console.log(df.columns); - //prints the shape of the data - console.log(df.shape); + // //prints the inferred dtypes of each column + df.ctypes.print() - //prints all column names - console.log(df.column_names); + //selecting a column by subsetting + df['Name'].print() - //prints the inferred dtypes of each column - df.ctypes.print() + //drop columns by names + cols_2_remove = ['Age', 'Pclass'] + df_drop = df.drop({ columns: cols_2_remove, axis: 1 }) + df_drop.print() - //selecting a column by subsetting - df['Name'].print() - //drop columns by names - cols_2_remove = ['Age', 'Pclass'] - df_drop = df.drop({ columns: cols_2_remove, axis: 1 }) - df_drop.print() + //select columns by dtypes + let str_cols = df_drop.selectDtypes(["string"]) + let num_cols = df_drop.selectDtypes(["int32", "float32"]) + str_cols.print() + num_cols.print() - //select columns by dtypes - let str_cols = df_drop.select_dtypes(["string"]) - let num_cols = df_drop.select_dtypes(["int32", "float32"]) - str_cols.print() - num_cols.print() + //add new column to Dataframe + let new_vals = df['Fare'].round(1) + df_drop.addColumn("fare_round", new_vals, { inplace: true }) + df_drop.print() - //add new column to Dataframe - let new_vals = df['Fare'].round().values - df_drop.addColumn({ column: "fare_round", value: new_vals}) - df_drop.print() + df_drop['fare_round'].round(2).print(5) - df_drop['fare_round'].print(5) + //prints the number of occurence each value in the column + df_drop['Survived'].valueCounts().print() - //prints the number of occurence each value in the column - df_drop['Survived'].value_counts().print() + //print the last ten elementa of a DataFrame + df_drop.tail(10).print() - //print the last ten elementa of a DataFrame - df_drop.tail(10).print() + //prints the number of missing values in a DataFrame + df_drop.isNa().sum().print() - //prints the number of missing values in a DataFrame - df_drop.isna().sum().print() + }).catch(err => { + console.log(err); + }) - }).catch(err => { - console.log(err); - }) ``` Output in Node Console: ![](assets/node-rec.gif) - -> If you want to use Danfo in frontend frameworks like React/Vue, read this [guide](https://danfo.jsdata.org/examples/using-danfojs-in-react) - -#### You can play with Danfo.js on Dnotebooks playground [here](https://playnotebook.jsdata.org/demo) +## Notebook support +* You can use Danfo.js on Dnotebooks playground [here](https://playnotebook.jsdata.org/demo) +* VsCode nodejs notebook extension now supports Danfo.js. See guide [here](https://marketplace.visualstudio.com/items?itemName=donjayamanne.typescript-notebook) #### [See the Official Getting Started Guide](https://danfo.jsdata.org/getting-started) ## Documentation The official documentation can be found [here](https://danfo.jsdata.org) +## Danfo.js Official Book + +![image](https://user-images.githubusercontent.com/29900845/134811659-25ff6b05-8e0d-415f-a60c-03ab1d33fd71.jpeg) + + +We recently published a book titled "Building Data Driven Applications with Danfo.js". Read more about it [here](https://danfo.jsdata.org/building-data-driven-applications-with-danfo.js-book) + ## Discussion and Development -Development discussions take place on our [issues](https://github.com/opensource9ja/danfojs/issues) tab. +Development discussions take place [here](https://github.com/opensource9ja/danfojs/discussions). ## Contributing to Danfo All contributions, bug reports, bug fixes, documentation improvements, enhancements, and ideas are welcome. A detailed overview on how to contribute can be found in the [contributing guide](https://danfo.jsdata.org/contributing-guide). @@ -195,4 +219,4 @@ All contributions, bug reports, bug fixes, documentation improvements, enhanceme #### Created by [Rising Odegua](https://github.com/risenW) and [Stephen Oni](https://github.com/steveoni) -Danfo.js - Open Source JavaScript library for manipulating data. | Product Hunt Embed +Danfo.js - Open Source JavaScript library for manipulating data. | Product Hunt Embed \ No newline at end of file diff --git a/danfojs-node/babel.config.json b/src/danfojs-node/babel.config.json similarity index 100% rename from danfojs-node/babel.config.json rename to src/danfojs-node/babel.config.json diff --git a/src/danfojs-node/nodemon.json b/src/danfojs-node/nodemon.json new file mode 100644 index 00000000..0c84bd97 --- /dev/null +++ b/src/danfojs-node/nodemon.json @@ -0,0 +1,6 @@ +{ + "watch": ["src"], + "ext": ".ts,.js", + "ignore": [], + "exec": "yarn test" + } \ No newline at end of file diff --git a/danfojs-node/package.json b/src/danfojs-node/package.json similarity index 61% rename from danfojs-node/package.json rename to src/danfojs-node/package.json index 57663645..aa24f2aa 100644 --- a/danfojs-node/package.json +++ b/src/danfojs-node/package.json @@ -1,11 +1,11 @@ { "name": "danfojs-node", - "version": "0.2.7", + "version": "1.0.0", "description": "JavaScript library providing high performance, intuitive, and easy to use data structures for manipulating and processing structured data.", - "main": "dist/index.js", - "types": "types/index.d.ts", + "main": "dist/danfojs-node/src/index.js", + "types": "dist/danfojs-node/src/index.d.ts", "directories": { - "test": "tests" + "test": "test" }, "contributors": [ { @@ -16,23 +16,27 @@ } ], "files": [ - "dist/", - "src/", - "types" + "dist/" ], "dependencies": { "@tensorflow/tfjs-node": "3.6.1", - "frictionless.js": "0.13.4", - "mathjs": "7.5.1", + "mathjs": "^9.4.4", "node-fetch": "^2.6.1", - "stream-to-array": "^2.3.0", - "table": "^5.4.6", - "@babel/runtime": "^7.13.10" + "papaparse": "^5.3.1", + "request": "^2.88.2", + "seedrandom": "^2.4.3", + "stream-json": "^1.7.3", + "table": "6.7.1", + "xlsx": "^0.17.2", + "plotly.js-dist-min": "^2.8.0" + }, "scripts": { - "test": "yarn run build && nyc mocha --require @babel/register tests/*", - "dev": "yarn run lint && babel ./src -d dist --no-comments", - "build": "babel ./src -d ./dist --no-comments", + "test": "nyc mocha --require ts-node/register test/**/*.test.ts", + "test:clean": "yarn build:clean && yarn test", + "dev": "nodemon", + "build": "tsc", + "build:clean": "rimraf ./build && node ./scripts/prebuild.js && tsc", "lint": "eslint ./src", "coveralls": "cat ./coverage/lcov.info | ./node_modules/.bin/coveralls", "coverage": "nyc report --reporter=text-lcov | coveralls && nyc report --reporter=lcov", @@ -66,11 +70,24 @@ "@babel/plugin-transform-runtime": "^7.12.10", "@babel/preset-env": "^7.10.4", "@babel/register": "^7.10.1", + "@types/chai": "^4.2.19", + "@types/mocha": "^9.0.0", + "@types/node": "^16.9.6", + "@types/papaparse": "^5.2.6", + "@types/request": "^2.48.7", + "@types/stream-json": "^1.7.1", + "@types/table": "^6.3.2", "chai": "^4.2.0", "coveralls": "^3.1.0", + "dotenv": "^10.0.0", + "dts-bundle-generator": "^5.9.0", "eslint": "^7.1.0", "mocha": "^7.2.0", + "nodemon": "^2.0.7", "nyc": "^15.1.0", + "rimraf": "^3.0.2", + "ts-node": "^10.0.0", + "typescript": "^4.4.2", "yarn": "^1.22.10" }, "nyc": { @@ -79,4 +96,4 @@ "text" ] } -} \ No newline at end of file +} diff --git a/src/danfojs-node/scripts/prebuild.js b/src/danfojs-node/scripts/prebuild.js new file mode 100644 index 00000000..222ba6c8 --- /dev/null +++ b/src/danfojs-node/scripts/prebuild.js @@ -0,0 +1,29 @@ +/** +* @license +* Copyright 2022 JsData. All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ========================================================================== +*/ + +/** + * Danfojs-node version uses Tensorflowjs-node package. Hence on bundling, we set the tensorflow lib + * to use the Tensorflowjs-node package. + * */ + +/* eslint-disable no-undef */ +const fs = require('fs'); + +function updateTensorflowLib(tensorflowLibPath) { + const importStatement = `const tf = require("@tensorflow/tfjs-node")\nexport default tf`; + fs.writeFileSync(tensorflowLibPath, importStatement); +} + +updateTensorflowLib('../danfojs-base/shared/tensorflowlib.ts'); diff --git a/src/danfojs-node/src/core/frame.ts b/src/danfojs-node/src/core/frame.ts new file mode 100644 index 00000000..0a6e6891 --- /dev/null +++ b/src/danfojs-node/src/core/frame.ts @@ -0,0 +1,36 @@ +/** +* @license +* Copyright 2022 JsData. All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ========================================================================== +*/ +import BaseDataFrame from "../../../danfojs-base/core/frame" +import { + BaseDataOptionType +} from "../../../danfojs-base/shared/types"; + + +/** + * Two-dimensional ndarray with axis labels. + * The object supports both integer- and label-based indexing and provides a host of methods for performing operations involving the index. + * Operations between DataFrame (+, -, /, , *) align values based on their associated index values– they need not be the same length. + * @param data 2D Array, JSON, Tensor, Block of data. + * @param options.index Array of numeric or string names for subseting array. If not specified, indices are auto generated. + * @param options.columns Array of column names. If not specified, column names are auto generated. + * @param options.dtypes Array of data types for each the column. If not specified, dtypes are/is inferred. + * @param options.config General configuration object for extending or setting NDframe behavior. + */ +export default class DataFrame extends BaseDataFrame { + [key: string]: any + constructor(data?: any, options: BaseDataOptionType = {}) { + super(data, options) + } +} \ No newline at end of file diff --git a/src/danfojs-node/src/core/series.ts b/src/danfojs-node/src/core/series.ts new file mode 100644 index 00000000..931b8941 --- /dev/null +++ b/src/danfojs-node/src/core/series.ts @@ -0,0 +1,36 @@ +/** +* @license +* Copyright 2022 JsData. All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ========================================================================== +*/ + +import { BaseDataOptionType } from "../../../danfojs-base/shared/types"; +import BaseSeries from "../../../danfojs-base/core/series" + + + +/** + * One-dimensional ndarray with axis labels. + * The object supports both integer- and label-based indexing and provides a host of methods for performing operations involving the index. + * Operations between Series (+, -, /, , *) align values based on their associated index values – they need not be the same length. + * @param data 1D Array, JSON, Tensor, Block of data. + * @param options.index Array of numeric or string index for subseting array. If not specified, indices are auto generated. + * @param options.columns Column name. This is like the name of the Series. If not specified, column name is set to 0. + * @param options.dtypes Data types of the Series data. If not specified, dtypes is inferred. + * @param options.config General configuration object for extending or setting Series behavior. + */ +export default class Series extends BaseSeries { + [key: string]: any + constructor(data?: any, options: BaseDataOptionType = {}) { + super(data, options) + } +} \ No newline at end of file diff --git a/src/danfojs-node/src/index.ts b/src/danfojs-node/src/index.ts new file mode 100644 index 00000000..8a40e1e5 --- /dev/null +++ b/src/danfojs-node/src/index.ts @@ -0,0 +1,80 @@ +/** +* @license +* Copyright 2022 JsData. All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ========================================================================== +*/ +import { + NDframe, + Config, + Utils, + Str, + Dt, + MinMaxScaler, + StandardScaler, + LabelEncoder, + OneHotEncoder, + getDummies, + concat, + merge, + toDateTime, + dateRange, + tensorflow, + __version +} from "../../danfojs-base"; +import { + streamCsvTransformer, + convertFunctionTotransformer +} from "./streams/csv.stream.transformer" +import { + readCSVNode as readCSV, + streamCSVNode as streamCSV, + toCSVNode as toCSV, + readJSONNode as readJSON, + toJSONNode as toJSON, + streamJSONNode as streamJSON, + readExcelNode as readExcel, + toExcelNode as toExcel +} from "../../danfojs-base/io/node" + +import DataFrame from "./core/frame" +import Series from "./core/series" + +export { + NDframe, + Config, + Utils, + Str, + Dt, + toDateTime, + Series, + DataFrame, + readCSV, + streamCSV, + toCSV, + streamCsvTransformer, + convertFunctionTotransformer, + readJSON, + toJSON, + streamJSON, + readExcel, + toExcel, + MinMaxScaler, + StandardScaler, + LabelEncoder, + OneHotEncoder, + getDummies, + concat, + merge, + dateRange, + tensorflow, + __version +} diff --git a/src/danfojs-node/src/streams/csv.stream.transformer.ts b/src/danfojs-node/src/streams/csv.stream.transformer.ts new file mode 100644 index 00000000..8e8bd736 --- /dev/null +++ b/src/danfojs-node/src/streams/csv.stream.transformer.ts @@ -0,0 +1,114 @@ +/** +* @license +* Copyright 2022 JsData. All rights reserved. +* +* This source code is licensed under the MIT license found in the +* LICENSE file in the root directory of this source tree. + +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* ========================================================================== +*/ +import { CsvInputOptionsNode, CsvOutputOptionsNode } from "../../../danfojs-base/shared/types" +import { writeCsvOutputStreamNode, openCsvInputStreamNode } from "../../../danfojs-base/io/node" +import DataFrame from "../core/frame" +import stream from "stream" + +/** + * Converts a function to a pipe transformer. + * @param func The function to convert to a pipe transformer. + * @returns A pipe transformer that applies the function to each row of object. + * @example + * ``` + * import { convertFunctionTotransformer } from "danfojs-node" + * + * const renamer = (dfRow) => { + * const dfModified = dfRow["Names"].map((name) => name.split(",")[0]) + * return dfModified + * } + * const transformer = convertFunctionTotransformer(renamer) + * ``` + * +*/ +const convertFunctionTotransformer = (func: (df: DataFrame) => DataFrame) => { + const transformStream = new stream.Transform({ objectMode: true }) + transformStream._transform = (chunk: any, encoding, callback) => { + const outputChunk = func(chunk) + transformStream.push(outputChunk) + callback() + } + return transformStream +} + + +/** + * A pipeline transformer to stream a CSV file from local storage, + * transform it with custom transformer, and write to the output stream. + * @param inputFilePath The path to the CSV file to stream from. + * @param transformer The transformer function to apply to each row. Note that each row + * of the CSV file is passed as a DataFrame with a single row to the transformer function, and + * the transformer function is expected to return a transformed DataFrame. + * @param options Configuration options for the pipeline. Includes: + * - `outputFilePath` The local file path to write the transformed CSV file to. + * - `customCSVStreamWriter` A custom CSV stream writer function. This is applied at the end of each transform. + * If not provided, the default CSV stream writer is used, and this writes to local storage. + * - `inputStreamOptions` Configuration options for the input stream. Supports all Papaparse csv reader config options. + * - `outputStreamOptions` Configuration options for the output stream. This only applies when + * using the default CSV stream writer. Supports all `toCSV` options. + * @returns A promise that resolves when the pipeline is complete. + * @example + * ``` + * import { streamCsvTransformer } from "danfojs-node" + * + * const transformer = (dfRow) => { + * const dfModified = dfRow["Names"].map((name) => name.split(",")[0]) + * return dfModified + * } + * const inputFilePath = "./data/input.csv" + * const outputFilePath = "./data/output.csv" + * + * streamCsvTransformer(inputFilePath, transformer, { outputFilePath }) + * ``` +*/ +const streamCsvTransformer = ( + inputFilePath: string, + transformer: (df: DataFrame) => DataFrame, + options: { + outputFilePath?: string, + customCSVStreamWriter?: any, + inputStreamOptions?: CsvInputOptionsNode, + outputStreamOptions?: CsvOutputOptionsNode + }) => { + const { outputFilePath, customCSVStreamWriter, inputStreamOptions, outputStreamOptions } = { + outputFilePath: "./", + inputStreamOptions: {}, + outputStreamOptions: {}, + ...options + } + + if (customCSVStreamWriter) { + openCsvInputStreamNode(inputFilePath, inputStreamOptions) + .pipe(convertFunctionTotransformer(transformer)) + .pipe(customCSVStreamWriter()) + .on("error", (err: any) => { + console.error("An error occurred while transforming the CSV file") + console.error(err) + }) + } else { + openCsvInputStreamNode(inputFilePath, inputStreamOptions) + .pipe(convertFunctionTotransformer(transformer)) + .pipe(writeCsvOutputStreamNode(outputFilePath, outputStreamOptions)) + .on("error", (err: any) => { + console.error("An error occurred while transforming the CSV file") + console.error(err) + }) + } +} + +export { + streamCsvTransformer, + convertFunctionTotransformer +} \ No newline at end of file diff --git a/src/danfojs-node/test/aggregators/groupby.test.ts b/src/danfojs-node/test/aggregators/groupby.test.ts new file mode 100644 index 00000000..ad7953f6 --- /dev/null +++ b/src/danfojs-node/test/aggregators/groupby.test.ts @@ -0,0 +1,367 @@ +import { assert } from "chai"; +import { describe, it } from "mocha"; +import { DataFrame } from '../../dist/danfojs-node/src'; + + +describe("groupby", function () { + it("Check group by One column data", function () { + let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; + let cols = ["A", "B", "C"]; + let df = new DataFrame(data, { columns: cols }); + let groupDf = df.groupby(["A"]); + + let groupDict = { + '1': { A: [1], B: [2], C: [3] }, + '4': { A: [4], B: [5], C: [6] }, + '20': { A: [20], B: [30], C: [40] }, + '39': { A: [39], B: [89], C: [78] } + } + assert.deepEqual(groupDf.colDict, groupDict); + }); + + it("Obtain the DataFrame of one of the group", function () { + + let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; + let cols = ["A", "B", "C"]; + let df = new DataFrame(data, { columns: cols }); + let group_df = df.groupby(["A"]); + let new_data = [[1, 2, 3]]; + assert.deepEqual(group_df.getGroup([1]).values, new_data); + }); + + it("Check group by Two column data", function () { + + let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; + let cols = ["A", "B", "C"]; + let df = new DataFrame(data, { columns: cols }); + let group_df = df.groupby(["A", "B"]); + let new_data = { + '1-2': { A: [1], B: [2], C: [3] }, + '4-5': { A: [4], B: [5], C: [6] }, + '20-30': { A: [20], B: [30], C: [40] }, + '39-89': { A: [39], B: [89], C: [78] } + } + assert.deepEqual(group_df.colDict, new_data); + }); + + it("Obtain the DataFrame of one of the group, grouped by two column", function () { + + let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; + let cols = ["A", "B", "C"]; + let df = new DataFrame(data, { columns: cols }); + let group_df = df.groupby(["A", "B"]); + let new_data = [[1, 2, 3]]; + + assert.deepEqual(group_df.getGroup([1, 2]).values, new_data); + }); + + it("Count column in group", function () { + + let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; + let cols = ["A", "B", "C"]; + let df = new DataFrame(data, { columns: cols }); + let group_df = df.groupby(["A", "B"]); + let new_data = [ + [1, 2, 1], + [4, 5, 1], + [20, 30, 1], + [39, 89, 1] + ]; + + assert.deepEqual(group_df.col(["C"]).count().values, new_data); + }); + + it("sum column element in group", function () { + + let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; + let cols = ["A", "B", "C"]; + let df = new DataFrame(data, { columns: cols }); + let group_df = df.groupby(["A", "B"]); + let new_data = [ + [1, 2, 3], + [4, 5, 6], + [20, 30, 40], + [39, 89, 78] + ]; + assert.deepEqual(group_df.col(["C"]).sum().values, new_data); + }); + + it("sum column element group by two column", function () { + + let data = [[1, 2, 3], [1, 5, 6], [20, 30, 40], [39, 89, 78]]; + let cols = ["A", "B", "C"]; + let df = new DataFrame(data, { columns: cols }); + let group_df = df.groupby(["A", "B"]); + + let new_data = [ + [1, 2, 2, 3], + [1, 5, 5, 6], + [20, 30, 30, 40], + [39, 89, 89, 78] + ]; + + assert.deepEqual(group_df.col(["B", "C"]).sum().values, new_data); + }); + + it("Perform aggregate on column for groupby", function () { + + let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; + let cols = ["A", "B", "C"]; + let df = new DataFrame(data, { columns: cols }); + let group_df = df.groupby(["A", "B"]); + let new_data = [ + [1, 2, 2, 1], + [4, 5, 5, 1], + [20, 30, 30, 1], + [39, 89, 89, 1] + ]; + + assert.deepEqual(group_df.agg({ B: "mean", C: "count" }).values, new_data); + }); + + it("cummulative sum for groupby", function () { + + let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; + let cols = ["A", "B", "C"]; + let df = new DataFrame(data, { columns: cols }); + let group_df = df.groupby(["A", "B"]); + let new_data = [ + [1, 2, 2, 3], + [4, 5, 5, 6], + [20, 30, 30, 40], + [39, 89, 89, 78] + ]; + assert.deepEqual(group_df.col(["B", "C"]).cumSum().values, new_data); + }); + + it("cummulative max for groupby", function () { + + let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; + let cols = ["A", "B", "C"]; + let df = new DataFrame(data, { columns: cols }); + let group_df = df.groupby(["A"]); + let new_data = [[1, 3], [4, 6], [20, 40], [39, 78]]; + + + assert.deepEqual(group_df.col(["C"]).cumMax().values, new_data); + }); + + it("cummulative min for groupby", function () { + + let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; + let cols = ["A", "B", "C"]; + let df = new DataFrame(data, { columns: cols }); + let group_df = df.groupby(["A"]); + let new_data = [[1, 3], [4, 6], [20, 40], [39, 78]]; + + assert.deepEqual(group_df.col(["C"]).cumMin().values, new_data); + }); + + it("cummulative prod for groupby", function () { + + let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; + let cols = ["A", "B", "C"]; + let df = new DataFrame(data, { columns: cols }); + let group_df = df.groupby(["A"]); + let new_data = [[1, 3], [4, 6], [20, 40], [39, 78]]; + + assert.deepEqual(group_df.col(["C"]).cumProd().values, new_data); + }); + + it("mean for groupby", function () { + + let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; + let cols = ["A", "B", "C"]; + let df = new DataFrame(data, { columns: cols }); + let group_df = df.groupby(["A", "B"]); + let new_data = [ + [1, 2, 2, 3], + [4, 5, 5, 6], + [20, 30, 30, 40], + [39, 89, 89, 78] + ]; + + assert.deepEqual(group_df.col(["B", "C"]).mean().values, new_data); + }); + + it("should apply grouby operation to all column", function () { + let data = { + 'A': ['foo', 'bar', 'foo', 'bar', + 'foo', 'bar', 'foo', 'foo'], + 'B': ['one', 'one', 'two', 'three', + 'two', 'two', 'one', 'three'], + 'C': [1, 3, 2, 4, 5, 2, 6, 7], + 'D': [3, 2, 4, 1, 5, 6, 7, 8] + }; + let df = new DataFrame(data); + let grp = df.groupby(["A", "B"]); + let rslt = [ + ['foo', 'one', 2, 2], + ['foo', 'two', 2, 2], + ['foo', 'three', 1, 1], + ['bar', 'one', 1, 1], + ['bar', 'three', 1, 1], + ['bar', 'two', 1, 1] + ]; + + assert.deepEqual(grp.count().values, rslt); + }); + it("should apply function to specific column", function () { + + let data = { + 'A': ['foo', 'bar', 'foo', 'bar', + 'foo', 'bar', 'foo', 'foo'], + 'B': ['one', 'one', 'two', 'three', + 'two', 'two', 'one', 'three'], + 'C': [1, 3, 2, 4, 5, 2, 6, 7], + 'D': [3, 2, 4, 1, 5, 6, 7, 8] + }; + let df = new DataFrame(data); + let group_df = df.groupby(["A"]); + let rslt = [ + ['foo', 5, 3], + ['foo', 6, 4], + ['foo', 7, 7], + ['foo', 9, 8], + ['foo', 10, 9], + ['bar', 4, 5], + ['bar', 3, 6], + ['bar', 8, 4] + ] + assert.deepEqual(group_df.col(['D', 'C']).apply((x) => x.add(2)).values, rslt); + }); + + it("should apply function to group column", function () { + let data = { + 'A': ['foo', 'bar', 'foo', 'bar', + 'foo', 'bar', 'foo', 'foo'], + 'B': ['one', 'one', 'two', 'three', + 'two', 'two', 'one', 'three'], + 'C': [1, 3, 2, 4, 5, 2, 6, 7], + 'D': [3, 2, 4, 1, 5, 6, 7, 8] + }; + let df = new DataFrame(data); + let group_df = df.groupby(["A", "B"]); + let rslt = [ + ['foo', 'one', 2, 2, 2, 2], + ['foo', 'two', 2, 2, 2, 2], + ['foo', 'three', 1, 1, 1, 1], + ['bar', 'one', 1, 1, 1, 1], + ['bar', 'three', 1, 1, 1, 1], + ['bar', 'two', 1, 1, 1, 1] + ] + assert.deepEqual(group_df.apply((x) => x.count({ axis: 0 })).values, rslt); + }); + + it("should obtain the number of groups", function () { + let data = { + 'A': ['foo', 'bar', 'foo', 'bar', + 'foo', 'bar', 'foo', 'foo'], + 'B': ['one', 'one', 'two', 'three', + 'two', 'two', 'one', 'three'], + 'C': [1, 3, 2, 4, 5, 2, 6, 7], + 'D': [3, 2, 4, 1, 5, 6, 7, 8] + }; + let df = new DataFrame(data); + let group_df = df.groupby(["A", "B"]); + let rslt = 6 + assert.equal(group_df.ngroups, rslt); + }); + it("should obtain all groups", function () { + let data = { + 'A': ['foo', 'bar', 'foo', 'bar', + 'foo', 'bar', 'foo', 'foo'], + 'B': ['one', 'one', 'two', 'three', + 'two', 'two', 'one', 'three'], + 'C': [1, 3, 2, 4, 5, 2, 6, 7], + 'D': [3, 2, 4, 1, 5, 6, 7, 8] + }; + let df = new DataFrame(data); + let group_df = df.groupby(["A", "B"]); + let rslt = { + 'foo-one': { + A: ['foo', 'foo'], + B: ['one', 'one'], + C: [1, 6], + D: [3, 7] + }, + 'bar-one': { A: ['bar'], B: ['one'], C: [3], D: [2] }, + 'foo-two': { + A: ['foo', 'foo'], + B: ['two', 'two'], + C: [2, 5], + D: [4, 5] + }, + 'bar-three': { A: ['bar'], B: ['three'], C: [4], D: [1] }, + 'bar-two': { A: ['bar'], B: ['two'], C: [2], D: [6] }, + 'foo-three': { A: ['foo'], B: ['three'], C: [7], D: [8] } + } + assert.deepEqual(group_df.groups, rslt); + }); + + it("should obtain the first row of all groups", function () { + let data = { + 'A': ['foo', 'bar', 'foo', 'bar', + 'foo', 'bar', 'foo', 'foo'], + 'B': ['one', 'one', 'one', 'three', + 'two', 'two', 'one', 'three'], + 'C': [1, 3, 2, 4, 5, 2, 6, 7], + 'D': [3, 2, 4, 1, 5, 6, 7, 8] + }; + let df = new DataFrame(data); + let group_df = df.groupby(["A", "B"]); + let rslt = [ + ['foo', 'one', 'foo', 'one', 1, 3], + ['foo', 'two', 'foo', 'two', 5, 5], + ['foo', 'three', 'foo', 'three', 7, 8], + ['bar', 'one', 'bar', 'one', 3, 2], + ['bar', 'three', 'bar', 'three', 4, 1], + ['bar', 'two', 'bar', 'two', 2, 6] + ] + assert.deepEqual(group_df.first().values, rslt); + }); + + it("should obtain the last row of all groups", function () { + let data = { + 'A': ['foo', 'bar', 'foo', 'bar', + 'foo', 'bar', 'foo', 'foo'], + 'B': ['one', 'one', 'one', 'three', + 'two', 'two', 'one', 'three'], + 'C': [1, 3, 2, 4, 5, 2, 6, 7], + 'D': [3, 2, 4, 1, 5, 6, 7, 8] + }; + let df = new DataFrame(data); + let group_df = df.groupby(["A", "B"]); + let rslt = [ + ['foo', 'one', 'foo', 'one', 6, 7], + ['foo', 'two', 'foo', 'two', 5, 5], + ['foo', 'three', 'foo', 'three', 7, 8], + ['bar', 'one', 'bar', 'one', 3, 2], + ['bar', 'three', 'bar', 'three', 4, 1], + ['bar', 'two', 'bar', 'two', 2, 6] + ] + assert.deepEqual(group_df.last().values, rslt); + }); + + it("should obtain the number of rows of each groups", function () { + let data = { + 'A': ['foo', 'bar', 'foo', 'bar', + 'foo', 'bar', 'foo', 'foo'], + 'B': ['one', 'one', 'one', 'three', + 'two', 'two', 'one', 'three'], + 'C': [1, 3, 2, 4, 5, 2, 6, 7], + 'D': [3, 2, 4, 1, 5, 6, 7, 8] + }; + let df = new DataFrame(data); + let group_df = df.groupby(["A", "B"]); + let rslt = [ + ['foo', 'one', 3], + ['foo', 'two', 1], + ['foo', 'three', 1], + ['bar', 'one', 1], + ['bar', 'three', 1], + ['bar', 'two', 1] + ] + assert.deepEqual(group_df.size().values, rslt); + }); +}) \ No newline at end of file diff --git a/src/danfojs-node/test/core/daterange.test.ts b/src/danfojs-node/test/core/daterange.test.ts new file mode 100644 index 00000000..ba7edd17 --- /dev/null +++ b/src/danfojs-node/test/core/daterange.test.ts @@ -0,0 +1,92 @@ +import { assert } from "chai"; +import { describe, it } from "mocha"; +import { dateRange } from '../../dist/danfojs-node/src'; + + +describe("dateRange", function(){ + + // it("Obtain date between start and end specified", function(){ + // let d = dateRange({start:'2018-04-24',end:'2018-04-27'}) + // let rslt = [ + // '4/24/2018, 1:00:00 AM', + // '4/25/2018, 1:00:00 AM', + // '4/26/2018, 1:00:00 AM', + // '4/27/2018, 1:00:00 AM' + // ] + // assert.deepEqual(d,rslt) + // }); + it("Obtain date between start with end not specified, but period and freq specified", function(){ + let d = dateRange({ start:'1/1/2018', period:5, freq:'M' }); + let rslt = [ + '1/1/2018, 12:00:00 AM', + '2/1/2018, 12:00:00 AM', + '3/1/2018, 12:00:00 AM', + '4/1/2018, 12:00:00 AM', + '5/1/2018, 12:00:00 AM' + ]; + assert.deepEqual(d, rslt); + }); + it("Obtain date between start with end not specified, but period and freq specified, plus offset", function(){ + let d = dateRange({ start:'1/1/2018', period:5, freq:'3M' }); + let rslt = [ + '1/1/2018, 12:00:00 AM', + '4/1/2018, 12:00:00 AM', + '7/1/2018, 12:00:00 AM', + '10/1/2018, 12:00:00 AM', + '1/1/2019, 12:00:00 AM' + ]; + assert.deepEqual(d, rslt); + }); + it("Obtain date between start with end not specified, but period and freq specified, plus offset, longer freq", function(){ + let d = dateRange({ start:'1/1/2018', period:5, freq:'35m' }); + let rslt = [ + "1/1/2018, 12:00:00 AM", + "1/1/2018, 12:35:00 AM", + "1/1/2018, 1:10:00 AM", + "1/1/2018, 1:45:00 AM", + "1/1/2018, 2:20:00 AM" + ]; + assert.deepEqual(d, rslt); + }); + it("Obtain date range with start not specified but end and period is given", function(){ + let d = dateRange({ end:'1/1/2018', period:8 }); + let rslt = [ + '12/25/2017, 12:00:00 AM', + '12/26/2017, 12:00:00 AM', + '12/27/2017, 12:00:00 AM', + '12/28/2017, 12:00:00 AM', + '12/29/2017, 12:00:00 AM', + '12/30/2017, 12:00:00 AM', + '12/31/2017, 12:00:00 AM', + '1/1/2018, 12:00:00 AM' + ]; + assert.deepEqual(d, rslt); + }); + it("inputing wrong freq", function(){ + assert.throws(function () { dateRange({ end:'1/1/2018', period:8, freq:"d" }); }, Error, 'invalid freq d'); + }); + it("inputing wrong freq with offset", function(){ + assert.throws(function () { dateRange({ end:'1/1/2018', period:8, freq:"4d" }); }, Error, 'invalid freq d'); + }); + it("inputing wrong freq offset", function(){ + assert.throws(function () { dateRange({ end:'1/1/2018', period:8, freq:"abcm" }); }, Error, 'invalid freq offset abc'); + }); + // it("Obtain date between start and end specified with different month", function(){ + + // let d = dateRange({start:'2018-04-24',end:'2018-05-27'}) + // let rslt = [ + // '4/24/2018, 1:00:00 AM', + // '4/25/2018, 1:00:00 AM', + // '4/26/2018, 1:00:00 AM', + // '4/27/2018, 1:00:00 AM', + // '4/28/2018, 1:00:00 AM', + // '4/29/2018, 1:00:00 AM', + // '4/30/2018, 1:00:00 AM', + // '5/1/2018, 1:00:00 AM', + // '5/2/2018, 1:00:00 AM', + // '5/3/2018, 1:00:00 AM', + // '5/27/2018, 1:00:00 AM' + // ] + // assert.deepEqual(d,rslt) + // }); +}); diff --git a/src/danfojs-node/test/core/datetime.test.ts b/src/danfojs-node/test/core/datetime.test.ts new file mode 100644 index 00000000..94d0c122 --- /dev/null +++ b/src/danfojs-node/test/core/datetime.test.ts @@ -0,0 +1,94 @@ +import { assert } from "chai"; +import { describe, it } from "mocha"; +import { Series } from "../../dist/danfojs-node/src"; +import { toDateTime } from '../../dist/danfojs-node/src'; + +describe("TimeSeries", function () { + + it("Returns correct month number", function () { + const data = ["02Sep2019", "03Aug2019", "04July2019"]; + const dateTime = toDateTime(data); + const expected = [8, 7, 6]; + assert.deepEqual(dateTime.month().values, expected); + }); + + it("Returns correct year number", function () { + const data = ["02Sep2019", "03Aug2029", "04July2020"]; + const dateTime = toDateTime(data); + const expected = [2019, 2029, 2020]; + assert.deepEqual(dateTime.year().values, expected); + }); + + it("Return month name generated", function () { + const data = ["06-30-02019", "07-29-2019", "08-28-2019"]; + const dateTime = toDateTime(data); + const expected = ["June", "July", "August"]; + assert.deepEqual(dateTime.monthName().values, expected); + }); + + it("Return day of the week generated", function () { + const data = ["06-30-02019", "07-29-2019", "08-28-2019"]; + const dateTime = toDateTime(data); + const expected = ["Sunday", "Monday", "Wednesday"]; + assert.deepEqual(dateTime.dayOfWeekName().values, expected); + }); + + it("Return day of the month generated", function () { + const data = ["06-30-02019", "07-29-2019", "08-28-2019"]; + const dateTime = toDateTime(data); + const expected = [30, 29, 28]; + assert.deepEqual(dateTime.dayOfMonth().values, expected); + }); + + it("Return seconds generated", function () { + const data = ["06-30-02019 00:00:12", "07-29-2019 00:30:40", "08-28-2019 00:12:04"]; + const dateTime = toDateTime(data); + const expected = [12, 40, 4]; + assert.deepEqual(dateTime.seconds().values, expected); + }); + + it("Return minutes generated", function () { + const data = ["06-30-02019 00:00:12", "07-29-2019 00:30:40", "08-28-2019 00:12:04"]; + const dateTime = toDateTime(data); + const expected = [0, 30, 12]; + assert.deepEqual(dateTime.minutes().values, expected); + }); + + it("Return hours generated", function () { + const data = ["06-30-02019 05:00:12", "07-29-2019 01:30:40", "08-28-2019 06:12:04"]; + const dateTime = toDateTime(data); + const expected = [5, 1, 6]; + assert.deepEqual(dateTime.hours().values, expected); + }); + + it("Return correct date from Series format 1", function () { + const data = new Series(["12/30/19 00:01", "12/29/19 07:03", "11/12/20 18:21"]); + const dateTime = toDateTime(data); + + const expectedMonth = [11, 11, 10]; + const expectedYear = [2019, 2019, 2020]; + const expectedDayOfMonth = [30, 29, 12]; + const expectedMonthName = ["December", "December", "November"]; + + assert.deepEqual(dateTime.month().values, expectedMonth); + assert.deepEqual(dateTime.year().values, expectedYear); + assert.deepEqual(dateTime.dayOfMonth().values, expectedDayOfMonth); + assert.deepEqual(dateTime.monthName().values, expectedMonthName); + }); + + it("Return correct date from Series format 2", function () { + const data = new Series(["12.30.19", "12.22.19", "11.01.20"]); + const dateTime = toDateTime(data); + + const expectedMonth = [11, 11, 10]; + const expectedYear = [2019, 2019, 2020]; + const expectedDay = [1, 0, 0]; + const expectedMonthName = ["December", "December", "November"]; + + assert.deepEqual(dateTime.month().values, expectedMonth); + assert.deepEqual(dateTime.year().values, expectedYear); + assert.deepEqual(dateTime.dayOfWeek().values, expectedDay); + assert.deepEqual(dateTime.monthName().values, expectedMonthName); + + }); +}); diff --git a/src/danfojs-node/test/core/frame.test.ts b/src/danfojs-node/test/core/frame.test.ts new file mode 100644 index 00000000..a6bf5108 --- /dev/null +++ b/src/danfojs-node/test/core/frame.test.ts @@ -0,0 +1,2909 @@ +import { assert, expect } from "chai"; +import { describe, it } from "mocha"; +import fs from "fs"; +import path from "path"; +import { DataFrame, readExcel, Series } from '../../dist/danfojs-node/src'; + + +describe("DataFrame", function () { + + describe("Subsetting by column names", function () { + it("retrieves the col data created from an df with two columns", function () { + let data = { alpha: ["A", "B", "C", "D"], val_count: [1, 2, 3, 4] }; + let df = new DataFrame(data); + assert.deepEqual(df["alpha"].values, ["A", "B", "C", "D"]); + assert.deepEqual(df["val_count"].values, [1, 2, 3, 4]); + }); + it("retrieves the column data from an df with three columns", function () { + let data = { alpha: ["A", "B", "C", "D"], val_count: [1, 2, 3, 4], val_sum: [20.3, 30.456, 40.90, 90.1] }; + let df = new DataFrame(data); + assert.deepEqual(df["alpha"].values, ["A", "B", "C", "D"]); + assert.deepEqual(df["val_count"].values, [1, 2, 3, 4]); + assert.deepEqual(df["val_sum"].values, [20.3, 30.456, 40.90, 90.1]); + }); + + it("Set column count by subseting", function () { + let data = { alpha: ["A", "B", "C", "D"], val_count: [1, 2, 3, 4], val_sum: [20.3, 30.456, 40.90, 90.1] }; + let df = new DataFrame(data); + df["alpha"] = ["E", "F", "G", "H"] + assert.deepEqual(df["alpha"].values, ["E", "F", "G", "H"]); + assert.deepEqual(df.values[0], ['E', 1, 20.3]); + assert.deepEqual(df.dtypes, ["string", "int32", "float32",]); + assert.deepEqual(df["val_count"].values, [1, 2, 3, 4]); + assert.deepEqual(df["val_sum"].values, [20.3, 30.456, 40.90, 90.1]); + }); + + it("Correct dtype is set after setting a column by subseting", function () { + let data = { alpha: ["A", "B", "C", "D"], val_count: [1, 2, 3, 4], val_sum: [20.3, 30.456, 40.90, 90.1] }; + let df = new DataFrame(data); + df["alpha"] = [2.4, 5.6, 32.5, 1] + + assert.deepEqual(df["alpha"].values, [2.4, 5.6, 32.5, 1]); + assert.deepEqual(df.values[0], [2.4, 1, 20.3]); + assert.deepEqual(df.values[1], [5.6, 2, 30.456]); + assert.deepEqual(df.values[2], [32.5, 3, 40.90]); + assert.deepEqual(df.values[3], [1, 4, 90.1]); + + df["val_count"] = ["A", "B", "C", "D"] + assert.deepEqual(df["val_count"].values, ["A", "B", "C", "D"]); + assert.deepEqual(df.dtypes, ["float32", "string", "float32",]); + }); + + it("retrieves the col data created from an df with two columns in low memory mode", function () { + let data = { alpha: ["A", "B", "C", "D"], val_count: [1, 2, 3, 4] }; + let df = new DataFrame(data, { config: { lowMemoryMode: true } }); + assert.deepEqual(df["alpha"].values, ["A", "B", "C", "D"]); + assert.deepEqual(df["val_count"].values, [1, 2, 3, 4]); + }); + it("retrieves the column data from an df with threee columns in low memory mode", function () { + let data = { alpha: ["A", "B", "C", "D"], val_count: [1, 2, 3, 4], val_sum: [20.3, 30.456, 40.90, 90.1] }; + let df = new DataFrame(data, { config: { lowMemoryMode: true } }); + assert.deepEqual(df["alpha"].values, ["A", "B", "C", "D"]); + assert.deepEqual(df["val_count"].values, [1, 2, 3, 4]); + assert.deepEqual(df["val_sum"].values, [20.3, 30.456, 40.90, 90.1]); + }); + + it("Set column count by subseting (low memory mode) ", function () { + let data = { alpha: ["A", "B", "C", "D"], val_count: [1, 2, 3, 4], val_sum: [20.3, 30.456, 40.90, 90.1] }; + let df = new DataFrame(data, { config: { lowMemoryMode: true } }); + df["alpha"] = ["E", "F", "G", "H"] + assert.deepEqual(df["alpha"].values, ["E", "F", "G", "H"]); + assert.deepEqual(df.values[0], ['E', 1, 20.3]); + assert.deepEqual(df.dtypes, ["string", "int32", "float32",]); + assert.deepEqual(df["val_count"].values, [1, 2, 3, 4]); + assert.deepEqual(df["val_sum"].values, [20.3, 30.456, 40.90, 90.1]); + }); + + it("Correct dtype is set after setting a column by subseting (low memory mode) ", function () { + let data = { alpha: ["A", "B", "C", "D"], val_count: [1, 2, 3, 4], val_sum: [20.3, 30.456, 40.90, 90.1] }; + let df = new DataFrame(data, { config: { lowMemoryMode: true } }); + df["alpha"] = [2.4, 5.6, 32.5, 1] + assert.deepEqual(df["alpha"].values, [2.4, 5.6, 32.5, 1]); + assert.deepEqual(df.values[0], [2.4, 1, 20.3]); + assert.deepEqual(df.values[1], [5.6, 2, 30.456]); + assert.deepEqual(df.values[2], [32.5, 3, 40.90]); + assert.deepEqual(df.values[3], [1, 4, 90.1]); + assert.deepEqual(df.dtypes, ["float32", "int32", "float32",]); + }); + }) + + describe("addColumn", function () { + it("Add new array values to DataFrame works", function () { + let data = { alpha: ["A", "B", "C", "D"], val_count: [1, 2, 3, 4], val_sum: [20.3, 30.456, 40.90, 90.1] }; + let df = new DataFrame(data); + const newdf = df.addColumn("new_column", ["a", "b", "c", "d"]) as DataFrame; + assert.deepEqual(newdf["new_column"].values, ["a", "b", "c", "d"]); + assert.deepEqual(newdf.columns, ["alpha", "val_count", "val_sum", "new_column"]); + assert.deepEqual(newdf.dtypes, ["string", "int32", "float32", "string"]); + assert.deepEqual(newdf.index, [0, 1, 2, 3]); + }); + it("Add new array values to DataFrame inplace works", function () { + let data = { alpha: ["A", "B", "C", "D"], val_count: [1, 2, 3, 4], val_sum: [20.3, 30.456, 40.90, 90.1] }; + let df = new DataFrame(data); + df.addColumn("new_column", ["a", "b", "c", "d"], { inplace: true }); + assert.deepEqual(df["new_column"].values, ["a", "b", "c", "d"]); + assert.deepEqual(df.columns, ["alpha", "val_count", "val_sum", "new_column"]); + assert.deepEqual(df.dtypes, ["string", "int32", "float32", "string"]); + assert.deepEqual(df.index, [0, 1, 2, 3]); + }); + it("Add new Series to DataFrame works", function () { + let data = { alpha: ["A", "B", "C", "D"], val_count: [1, 2, 3, 4], val_sum: [20.3, 30.456, 40.90, 90.1] }; + let df = new DataFrame(data); + const newdf = df.addColumn("new_column", new Series(["a", "b", "c", "d"])) as DataFrame; + assert.deepEqual(newdf["new_column"].values, ["a", "b", "c", "d"]); + assert.deepEqual(newdf.columns, ["alpha", "val_count", "val_sum", "new_column"]); + assert.deepEqual(newdf.dtypes, ["string", "int32", "float32", "string"]); + assert.deepEqual(newdf.index, [0, 1, 2, 3]); + }); + it("Correct column data is set", function () { + let data = { alpha: ["A", "B", "C", "D"], val_count: [1, 2, 3, 4], val_sum: [20.3, 30.456, 40.90, 90.1] }; + let df = new DataFrame(data); + df.addColumn("new_column", ["a", "b", "c", "d"], { inplace: true }); + assert.deepEqual(df["new_column"].values, ["a", "b", "c", "d"]); + assert.deepEqual(df["alpha"].values, ["A", "B", "C", "D"]); + assert.deepEqual(df["val_count"].values, [1, 2, 3, 4]); + assert.deepEqual(df["val_sum"].values, [20.3, 30.456, 40.90, 90.1]); + }); + it("throw error for wrong column lenght", function () { + const data = { alpha: ["A", "B", "C", "D"], val_count: [1, 2, 3, 4], val_sum: [20.3, 30.456, 40.90, 90.1] }; + const df = new DataFrame(data); + + assert.throws(function () { + df.addColumn("new_column", new Series(["a", "b", "c"])), + Error, + 'ParamError: Column data length mismatch. You provided data with length 3 but Ndframe has column of lenght 4' + }) + + }); + it("Ensure add column does not mutate parent when not in place", function () { + const data = { alpha: ["A", "B", "C", "D"], val_count: [1, 2, 3, 4], val_sum: [20.3, 30.456, 40.90, 90.1] }; + const df = new DataFrame(data); + const dfNew = df.addColumn("new_column", ["a", "b", "c", "d"]) as DataFrame + assert.notDeepEqual(df, dfNew) + assert.deepEqual(dfNew["new_column"].values, ["a", "b", "c", "d"]); + assert.deepEqual(df["alpha"].values, ["A", "B", "C", "D"]); + assert.deepEqual(df["val_count"].values, [1, 2, 3, 4]); + assert.deepEqual(df["val_sum"].values, [20.3, 30.456, 40.90, 90.1]); + }); + it("Add new array values to DataFrame works", function () { + let data = { alpha: ["A", "B", "C", "D"], val_count: [1, 2, 3, 4], val_sum: [20.3, 30.456, 40.90, 90.1] }; + let df = new DataFrame(data); + const newdf = df.addColumn("new_column", ["a", "b", "c", "d"], { atIndex: 0 }) as DataFrame; + assert.deepEqual(newdf["new_column"].values, ["a", "b", "c", "d"]); + assert.deepEqual(newdf.columns, ["new_column", "alpha", "val_count", "val_sum"]); + assert.deepEqual(newdf.dtypes, ["string", "int32", "float32", "string"]); + assert.deepEqual(newdf.index, [0, 1, 2, 3]); + }); + + it("Add new array values to specific column index", function () { + let data = { alpha: ["A", "B", "C", "D"], val_count: [1, 2, 3, 4], val_sum: [20.3, 30.456, 40.90, 90.1] }; + let df = new DataFrame(data); + const newdf = df.addColumn("new_column", ["a", "b", "c", "d"], { atIndex: 'alpha' }) as DataFrame; + assert.deepEqual(newdf["new_column"].values, ["a", "b", "c", "d"]); + assert.deepEqual(newdf.columns, ["new_column", "alpha", "val_count", "val_sum"]); + assert.deepEqual(newdf.dtypes, ["string", "int32", "float32", "string"]); + assert.deepEqual(newdf.index, [0, 1, 2, 3]); + }); + }) + + describe("drop", function () { + it("throw error for wrong column name", function () { + const data = [[1, 2, 3], [4, 5, 6]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols }); + assert.throws(function () { + df.drop({ columns: ["3"] }); + }, + Error, + 'ParamError: specified column "3" not found in columns'); + }); + it("throw error for wrong row index", function () { + const data = [[1, 2, 3], [4, 5, 6]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols }); + assert.throws(function () { df.drop({ index: [10] }); }, + Error, 'ParamError: specified index "10" not found in indices'); + }); + + it("drop a column inplace", function () { + const data = [[1, 2, 3], [4, 5, 6]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols }); + df.drop({ columns: ["C", "B"], inplace: true }); + assert.deepEqual(df.columns, ["A"]); + assert.deepEqual(df.values, [[1], [4]]); + assert.deepEqual(df["A"].values, [1, 4]); + assert.deepEqual(df.dtypes, ["int32"]); + }); + it("drop a column inplace in low memory mode", function () { + const data = [[1, 2, 3], [4, 5, 6]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols, config: { lowMemoryMode: true } }); + df.drop({ columns: ["C", "B"], inplace: true }); + assert.deepEqual(df.columns, ["A"]); + assert.deepEqual(df.values, [[1], [4]]); + assert.deepEqual(df["A"].values, [1, 4]); + assert.deepEqual(df.dtypes, ["int32"]); + }); + it("drop a scalar column inplace", function () { + const data = [[1, 2, 3], [4, 5, 6]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols }); + df.drop({ columns: "C", inplace: true }); + assert.deepEqual(df.columns, ["A", "B"]); + assert.deepEqual(df.values, [[1, 2], [4, 5]]); + assert.deepEqual(df["A"].values, [1, 4]); + assert.deepEqual(df["B"].values, [2, 5]); + }); + it("check if data is updated after column is dropped", function () { + const data = [[1, 2, 3], [4, 5, 6]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols }); + df.drop({ columns: ["C"], inplace: true }); + const new_data = [[1, 2], [4, 5]]; + assert.deepEqual(df.values, new_data); + assert.deepEqual(df.dtypes.length, 2); + + }); + + it("check if data is updated after row is dropped", function () { + const data = [[1, 2, 3], [4, 5, 6]]; + const cols = ["A", "B", "C"]; + const dfNew = new DataFrame(data, { columns: cols }); + const df = dfNew.drop({ index: [0] }) as DataFrame; + const new_data = [[4, 5, 6]]; + assert.deepEqual(df.values, new_data); + assert.deepEqual(df.dtypes, ["int32", "int32", "int32"]); + assert.deepEqual(df["A"].values, [4]); + assert.deepEqual(df["B"].values, [5]); + assert.deepEqual(df["C"].values, [6]); + assert.deepEqual(df.columns, cols); + assert.notDeepEqual(dfNew, df) + }); + it("check if data is updated after row is dropped (inplace)", function () { + const data = [[1, 2, 3], [4, 5, 6]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols }); + df.drop({ index: [0], inplace: true }); + const new_data = [[4, 5, 6]]; + assert.deepEqual(df.values, new_data); + assert.deepEqual(df.dtypes, ["int32", "int32", "int32"]); + assert.deepEqual(df["A"].values, [4]); + assert.deepEqual(df["B"].values, [5]); + assert.deepEqual(df["C"].values, [6]); + assert.deepEqual(df.columns, cols); + }); + it("check if new dataframe is properly created after column is dropped (not-in-inplace)", function () { + const data = [[1, 2, 3], [4, 5, 6]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols }); + const df_drop = df.drop({ columns: ["C"], inplace: false }) as DataFrame; + + const expected_data = [[1, 2], [4, 5]]; + const expected_cols = ["A", "B"]; + const expected_df = new DataFrame(expected_data, { columns: expected_cols }); + assert.deepEqual(df_drop.values, expected_df.values); + }); + it("check that the dtype is updated after column drop", function () { + const data = [[1, 2, 3], [4, 5, 6]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols }); + df.drop({ columns: ["A"], inplace: true }); + const dtype = ['int32', 'int32']; + assert.deepEqual(df.dtypes, dtype); + }); + it("drop row by single string labels", function () { + const data = [[1, 2, 3], [4, 5, 6], [20, 34, 5]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols, index: ["a", "b", "c"] }); + df.drop({ index: ["a"], inplace: true }); + const new_data = [[4, 5, 6], [20, 34, 5]]; + assert.deepEqual(df.values, new_data); + }); + it("drop row by two or more string labels", function () { + const data = [[1, 2, 3], [4, 5, 6], [20, 34, 5], [2, 3.4, 5], [2.0, 340, 5]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols, index: ["a", "b", "c", "d", "e"] }); + df.drop({ index: ["a", "b"], inplace: true }); + const new_data = [[20, 34, 5], [2, 3.4, 5], [2.0, 340, 5]]; + assert.deepEqual(df.values, new_data); + + }); + it("drop row by two or more string labels with numeric index", function () { + const data = [[1, 2, 3], [4, 5, 6], [20, 34, 5], [2, 3.4, 5], [2.0, 340, 5]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols, index: ["a", "b", 1, "d", "e"] }); + df.drop({ index: [1, "b"], inplace: true }); + const new_data = [[1, 2, 3], [2, 3.4, 5], [2.0, 340, 5]] + assert.deepEqual(df.values, new_data); + assert.deepEqual(df.index, ["a", "d", "e"]); + + }); + }); + + describe("head", function () { + it("Gets the first n rows in a DataFrame", function () { + const data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols }); + assert.deepEqual(df.head(2).values, [[1, 2, 3], [4, 5, 6]]); + }); + it("Throws error if row specified is greater than values", function () { + const data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols }); + assert.throws(() => df.head(10), Error, + "ParamError: Number of rows cannot be greater than available rows in data"); + }); + it("Throws error if row specified is less than 0", function () { + const data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols }); + assert.throws(() => df.head(-1), Error, + "ParamError: Number of rows cannot be less than 1"); + }); + + }); + + describe("tail", function () { + it("Prints the last n rows of a DataFrame", function () { + const data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols }); + assert.deepEqual(df.tail(2).values, [[20, 30, 40], [39, 89, 78]]); + }); + it("Throws error if row specified is greater than values", function () { + const data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols }); + assert.throws(() => df.tail(10), Error, + "ParamError: Number of rows cannot be greater than available rows in data"); + }); + it("Throws error if row specified is less than 0", function () { + const data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols }); + assert.throws(() => df.tail(-1), Error, + "ParamError: Number of rows cannot be less than 1"); + }); + it("Return last 3 row index in a DataFrame", function () { + const data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols }); + assert.deepEqual(df.tail(2).index, [2, 3]); + }); + it("Check print format on head call", function () { + const data = [[1, 2, 34, 5, 0, 6, 4, 5, 6, 7], [20, 30, 40, 39, 89, 78, 45, 56, 56, 45]]; + const df = new DataFrame(data); + assert.deepEqual(df.tail(2).values, [[1, 2, 34, 5, 0, 6, 4, 5, 6, 7], [20, 30, 40, 39, 89, 78, 45, 56, 56, 45]]); + }); + }); + + describe("sample", function () { + it("Samples n number of random elements from a DataFrame", async function () { + const data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78], [100, 200, 300]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols }); + const expected = [[1, 2, 3], [20, 30, 40]]; + const values = (await df.sample(2)).values; + assert.deepEqual(values, expected); + }); + it("Throw error if n is greater than lenght of Dataframe", async function () { + const data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78], [100, 200, 300]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols }); + try { + await df.sample(100); + } catch (e: any) { + expect(e).to.be.instanceOf(Error); + expect(e.message).to.eql('ParamError: Sample size cannot be bigger than number of rows'); + } + }); + it("Throw error if n is less than 0", async function () { + const data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78], [100, 200, 300]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols }); + try { + await df.sample(-2); + } catch (e: any) { + expect(e).to.be.instanceOf(Error); + expect(e.message).to.eql('ParamError: Sample size cannot be less than 1'); + } + }); + it("Throw error if n is 0", async function () { + const data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78], [100, 200, 300]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols }); + try { + await df.sample(0); + } catch (e: any) { + expect(e).to.be.instanceOf(Error); + expect(e.message).to.eql('ParamError: Sample size cannot be less than 1'); + } + }); + it("Seed works and random number is reproducible", async function () { + const data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78], [100, 200, 300]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols }); + const values1 = (await df.sample(2, { seed: 453 })).values; + const values2 = (await df.sample(2, { seed: 453 })).values; + const values3 = (await df.sample(2, { seed: 1 })).values; + + assert.deepEqual(values1, values2); + assert.notDeepEqual(values1, values3); + + }); + }); + + describe("loc", function () { + + it("throw error for wrong column name", function () { + const data = [[1, 2, 3], [4, 5, 6]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols }); + assert.throws(function () { + df.loc({ "rows": [0, 1], "columns": ["A", "D"] }); + }, + Error, + "IndexError: Specified column (D) not found"); + }); + + it(`check data after selecting { "rows": ["0", "1"], "columns": ["B", "C"] }`, function () { + const data = [[1, 2, 3], [4, 5, 6]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols, index: ["0", "1"] }); + + const colDf = df.loc({ "rows": ["0", "1"], "columns": ["B", "C"] }); + const expected = [[2, 3], [5, 6]]; + + assert.deepEqual(colDf.values, expected); + + }); + it("check data after selecting row index", function () { + const data = [[1, 2, 3], [4, 5, 6]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols, index: [0, 1] }); + + const colDf = df.loc({ "rows": ["1"], "columns": ["B"] }); + const expected = [[5]]; + + assert.deepEqual(colDf.values, expected); + + }); + it("check data after selecting with single row index", function () { + const data = [[1, 2, 3], [4, 5, 6]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols, index: ["0", "1"] }); + + const colDf = df.loc({ "rows": [`"1"`], "columns": ["B", "C"] }); + const expected = [[5, 6]]; + + assert.deepEqual(colDf.values, expected); + + }); + it("check data after selecting with single column index", function () { + const data = [[1, 2, 3], [4, 5, 6]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols, index: ["0", "1"] }); + + const colDf = df.loc({ "rows": [`"0"`], "columns": ["A"] }); + const expected = [[1]]; + + assert.deepEqual(colDf.values, expected); + + }); + it("check data after row and column slice", function () { + const data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols, index: ["0", "1", "2", "3"] }); + + const colDf = df.loc({ "rows": [`'0':'2'`], "columns": ["B:C"] }); + const expected = [[2], [5]]; + + assert.deepEqual(colDf.values, expected); + + }); + it("check data after row slice", function () { + const data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols }); + + const colDf = df.loc({ "rows": [`0:2`], "columns": ["B", "C"] }); + const expected = [[2, 3], [5, 6]]; + + assert.deepEqual(colDf.values, expected); + + }); + it(`check data after column slice ["A:C"]`, function () { + const data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols, index: ["0", "1", "2", "3"] }); + + const colDf = df.loc({ "rows": ["0", "1"], "columns": ["A:C"] }); + const expected = [[1, 2], [4, 5]]; + assert.deepEqual(colDf.values, expected); + + }); + it("check data after numeric row slice", function () { + const data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols }); + + const colDf = df.loc({ "rows": [0, 1], "columns": ["A:C"] }); + const expected = [[1, 2], [4, 5]]; + assert.deepEqual(colDf.values, expected); + + }); + it("loc by single string index", function () { + const data = { + "Name": ["Apples", "Mango", "Banana", "Pear"], + "Count": [21, 5, 30, 10], + "Price": [200, 300, 40, 250] + }; + + const df = new DataFrame(data, { index: ["a", "b", "c", "d"] }); + const subDf = df.loc({ rows: [`"a"`], columns: ["Name", "Count"] }); + const expected = [['Apples', 21]]; + assert.deepEqual(subDf.values, expected); + + }); + + it("loc by slice string index", function () { + const data = { + "Name": ["Apples", "Mango", "Banana", "Pear"], + "Count": [21, 5, 30, 10], + "Price": [200, 300, 40, 250] + }; + + const df = new DataFrame(data, { index: ["a", "b", "c", "d"] }); + const subDf = df.loc({ rows: [`"a":"c"`], columns: ["Name", "Count"] }); + const expected = [["Apples", 21], ["Mango", 5]]; + assert.deepEqual(subDf.values, expected); + + }); + + + }); + + describe("DataFrame iloc", function () { + + it("throw error for wrong row index (array format)", function () { + const data = [[1, 2, 3], [4, 5, 6]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols }); + assert.throws(function () { + df.iloc({ "rows": [0, 1, 3] }); + }, + Error, + "Invalid row parameter: Specified index 3 cannot be bigger than index length 2"); + }); + + it("throw error for wrong row index (string slice format)", function () { + const data = [[1, 2, 3], [4, 5, 6]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols }); + assert.throws(function () { + df.iloc({ "rows": ["1:5"] }); + }, + Error, + "row slice [end] index cannot be bigger than 2"); + }); + + it("throw error for wrong column index (array format)", function () { + const data = [[1, 2, 3], [4, 5, 6]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols }); + assert.throws(function () { + df.iloc({ "columns": [1, 4] }); + }, + Error, + "Invalid column parameter: Specified index 4 cannot be bigger than index length 3"); + }); + + it("throw error for wrong column index (string slice format)", function () { + const data = [[1, 2, 3], [4, 5, 6]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols }); + assert.throws(function () { + df.iloc({ "columns": ["A:C"] }); + }, + Error, + "Invalid column split parameter. Split parameter must be a number"); + }); + + it("iloc works for {row: [0, 1], column: [1, 2]}", function () { + const data = [[1, 2, 3], [4, 5, 6]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols }); + + const colDf = df.iloc({ "rows": [0, 1], "columns": [1, 2] }); + const expected = [[2, 3], [5, 6]]; + + assert.deepEqual(colDf.values, expected); + + }); + + it(`iloc works for { "rows": [1], "columns": [1, 2] }`, function () { + const data = [[1, 2, 3], [4, 5, 6]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols }); + const colDf = df.iloc({ "rows": [1], "columns": [1, 2] }); + const expected = [[5, 6]]; + assert.deepEqual(colDf.values, expected); + + }); + it("check data after row and column slice", function () { + const data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols }); + + const colDf = df.iloc({ "rows": ["0:2"], "columns": ["1:2"] }); + const expected = [[2], [5]]; + + assert.deepEqual(colDf.values, expected); + + }); + it("check data after row slice", function () { + const data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols }); + + const colDf = df.iloc({ "rows": ["0:2"], "columns": [1, 2] }); + const expected = [[2, 3], [5, 6]]; + + assert.deepEqual(colDf.values, expected); + + }); + it("check data after column slice", function () { + const data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols }); + + const colDf = df.iloc({ "rows": [0, 1, 2], "columns": ["1:2"] }); + const expected = [[2], [5], [30]]; + assert.deepEqual(colDf.values, expected); + + }); + it("Return all columns if columns parameter is not specified", function () { + const data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols }); + + const colDf = df.iloc({ "rows": [0, 1, 2] }); + const expected = [[1, 2, 3], [4, 5, 6], [20, 30, 40]]; + assert.deepEqual(colDf.values, expected); + + }); + it("Return all rows if rows parameter is not specified", function () { + const data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols }); + + const colDf = df.iloc({ "columns": ["1:2"] }); + const expected = [[2], [5], [30], [89]]; + assert.deepEqual(colDf.values, expected); + + }); + it("column slice starting with 0 and returning a single result works", function () { + const data = { + "Name": ["Apples", "Mango", "Banana", "Pear"], + "Count": [21, 5, 30, 10], + "Price": [200, 300, 40, 250], + "index": [1, 2, 3, 4] + }; + const df = new DataFrame(data); + const subDf = df.iloc({ rows: ["2:3"], columns: ["0:1"] }); + const result = [["Banana"]]; + assert.deepEqual(subDf.values, result); + + }); + it("column slice with format '0:' works", function () { + const data = { + "Name": ["Apples", "Mango", "Banana", "Pear"], + "Count": [21, 5, 30, 10], + "Price": [200, 300, 40, 250] + }; + const df = new DataFrame(data); + const subDf = df.iloc({ rows: ["2:3"], columns: ["0:"] }); + const result = [["Banana", 30, 40]]; + assert.deepEqual(subDf.values, result); + + }); + it("column slice with format ':2' works", function () { + const data = { + "Name": ["Apples", "Mango", "Banana", "Pear"], + "Count": [21, 5, 30, 10], + "Price": [200, 300, 40, 250] + }; + const df = new DataFrame(data); + const subDf = df.iloc({ rows: ["2:3"], columns: [":2"] }); + const result = [["Banana", 30]]; + assert.deepEqual(subDf.values, result); + + }); + it("row slice with format ':2' works", function () { + const data = { + "Name": ["Apples", "Mango", "Banana", "Pear"], + "Count": [21, 5, 30, 10], + "Price": [200, 300, 40, 250] + }; + const df = new DataFrame(data); + const subDf = df.iloc({ rows: [":2"], columns: [":1"] }); + const result = [['Apples'], ['Mango']]; + assert.deepEqual(subDf.values, result); + + }); + it("row slice with format '1:' works", function () { + const data = { + "Name": ["Apples", "Mango", "Banana", "Pear"], + "Count": [21, 5, 30, 10], + "Price": [200, 300, 40, 250] + }; + const df = new DataFrame(data); + const subDf = df.iloc({ rows: [":2"], columns: [":2"] }); + const result = [['Apples', 21], ['Mango', 5]]; + assert.deepEqual(subDf.values, result); + + }); + + }); + + describe("toString", function () { + it("Prints a DataFrame to console", function () { + const data = { + "Name": ["Apples", "Mango", "Banana", "Pear"], + "Count": [21, 5, 30, 10], + "Price": [200, 300, 40, 250] + }; + const df = new DataFrame(data); + df.print() + }) + it("User config works when printing a DataFrame to console", function () { + const data = { + "Name": ["Apples", "Mango", "Banana", "Pear"], + "Count": [21, 5, 30, 10], + "Price": [200, 300, 40, 250] + }; + const df = new DataFrame(data, { + config: { + tableDisplayConfig: { + header: { + alignment: 'center', + content: 'THE HEADER\nThis is the table about something', + }, + }, + } + }); + df.print() + }) + it("Long columns are properly truncated before printing", function () { + const data = { + "Name": ["Apples", "Mango", "Banana", "Pear"], + "Count": [21, 5, 30, 10], + "Price": [200, 300, 40, 250], + "Name2": ["Apples", "Mango", "Banana", "Pear"], + "Count2": [21, 5, 30, 10], + "Price2": [200, 300, 40, 250], + "Name3": ["Apples", "Mango", "Banana", "Pear"], + "Count3": [21, 5, 30, 10], + "Price3": [200, 300, 40, 250], + "Name4": ["Apples", "Mango", "Banana", "Pear"], + "Count4": [21, 5, 30, 10], + "Price4": [200, 300, 40, 250], + "Name5": ["Apples", "Mango", "Banana", "Pear"], + "Count5": [21, 5, 30, 10], + "Price6": [200, 300, 40, 250], + "Name7": ["Apples", "Mango", "Banana", "Pear"], + "Count7": [21, 5, 30, 10], + "Price7": [200, 300, 40, 250], + "Name8": ["Apples", "Mango", "Banana", "Pear"], + "Count8": [21, 5, 30, 10], + "Price8": [200, 300, 40, 250], + "Name9": ["Apples", "Mango", "Banana", "Pear"], + "Count9": [21, 5, 30, 10], + "Price9": [200, 300, 40, 250], + "Name10": ["Apples", "Mango", "Banana", "Pear"], + "Count10": [21, 5, 30, 10], + "Price10": [200, 300, 40, 250] + }; + const df = new DataFrame(data); + df.print() + }) + + it("Long rows are automatically truncated", function () { + const data = { + "Name": ["Apples", "Mango", "Banana", "Pear", "Apples", "Mango", "Banana", "Pear", "Apples", "Mango", "Banana", "Pear"], + "Count": [21, 5, 30, 10, 21, 5, 30, 10, 21, 5, 30, 10], + "Price": [200, 300, 40, 250, 200, 300, 40, 250, 200, 300, 40, 250] + }; + const df = new DataFrame(data); + df.print() + }) + }) + + describe("add", function () { + it("Return Addition of DataFrame with a single Number", function () { + const data = [[0, 2, 4], [360, 180, 360]]; + const df = new DataFrame(data) + assert.deepEqual(df.add(2).values, [[2, 4, 6], [362, 182, 362]]); + }); + it("Return addition of a DataFrame with a Series along default axis 1", function () { + const data = [[0, 2, 4], [360, 180, 360]]; + const sf = new Series([1, 2, 1]); + const df = new DataFrame(data); + assert.deepEqual((df.add(sf) as DataFrame).values, [[1, 4, 5], [361, 182, 361]]); + }); + it("Return addition of a DataFrame with a Series along default axis 1", function () { + const data = [[0, 2, 4], [360, 180, 360]]; + const sf = [1, 2, 1] + const df = new DataFrame(data); + assert.deepEqual((df.add(sf) as DataFrame).values, [[1, 4, 5], [361, 182, 361]]); + }); + it("Return addition of a DataFrame with a Series along axis 0", function () { + const data = [[0, 2, 4], + [360, 180, 360]]; + const sf = new Series([1, 2]); + const df = new DataFrame(data); + assert.deepEqual((df.add(sf, { axis: 0 }) as DataFrame).values, [[1, 3, 5], [362, 182, 362]]); + }); + it("Return addition of a DataFrame with a Array along axis 0", function () { + const data = [[0, 2, 4], + [360, 180, 360]]; + const sf = [1, 2] + const df = new DataFrame(data); + assert.deepEqual((df.add(sf, { axis: 0 }) as DataFrame).values, [[1, 3, 5], [362, 182, 362]]); + }); + it("Return addition of a DataFrame with a DataFrame along default axis 1", function () { + const df1 = new DataFrame([[0, 2, 4], [360, 180, 360]]); + const df2 = new DataFrame([[1, 2, 4], [10, 5, 0]]); + assert.deepEqual((df1.add(df2) as DataFrame).values, [[1, 4, 8], [370, 185, 360]]); + }); + it("Return addition of a DataFrame with a DataFrame along axis 0", function () { + const df1 = new DataFrame([[0, 2, 4], [360, 180, 360]]); + const df2 = new DataFrame([[1, 2, 4], [10, 5, 0]]); + assert.deepEqual((df1.add(df2) as DataFrame).values, [[1, 4, 8], [370, 185, 360]]); + }); + it("Return addition of a DataFrame with a Series along default axis 1 (inplace)", function () { + const data = [[0, 2, 4], [360, 180, 360]]; + const sf = new Series([1, 2, 1]); + const df = new DataFrame(data); + df.add(sf, { axis: 1, inplace: true }) + assert.deepEqual(df.values, [[1, 4, 5], [361, 182, 361]]); + }); + + it("Return addition of a DataFrame with a DataFrame along axis 0 (inplace)", function () { + const df1 = new DataFrame([[0, 2, 4], [360, 180, 360]]); + const df2 = new DataFrame([[1, 2, 4], [10, 5, 0]]); + df1.add(df2, { axis: 0, inplace: true }) + assert.deepEqual(df1.values, [[1, 4, 8], [370, 185, 360]]); + }); + it("Adds work for DataFrame with undefined and null values", function () { + const df1 = new DataFrame([[undefined, 2, 4], [360, NaN, 360]]); + const df2 = new DataFrame([[1, 2, 4], [10, 5, 0]]); + df1.add(df2, { axis: 0, inplace: true }) + assert.deepEqual(df1.values, [[NaN, 4, 8], [370, NaN, 360]]); + }); + + }); + + describe("sub", function () { + it("Return subtraction of DataFrame with a single Number", function () { + const data = [[0, 2, 4], [360, 180, 360]]; + const df = new DataFrame(data); + assert.deepEqual((df.sub(2) as DataFrame).values, [[-2, 0, 2], [358, 178, 358]]); + }); + it("Return subtraction of a DataFrame with a Series along default axis 1", function () { + const data = [[0, 2, 4], [360, 180, 360]]; + const sf = new Series([1, 2, 1]); + const df = new DataFrame(data); + assert.deepEqual((df.sub(sf) as DataFrame).values, [[-1, 0, 3], [359, 178, 359]]); + }); + it("Return subtraction of a DataFrame with a Series along axis 0", function () { + const data = [[0, 2, 4], [360, 180, 360]]; + const sf = new Series([1, 2]); + const df = new DataFrame(data); + assert.deepEqual((df.sub(sf, { axis: 0 }) as DataFrame).values, [[-1, 1, 3], [358, 178, 358]]); + }); + it("Return subtraction of a DataFrame with a DataFrame along default axis 1", function () { + const df1 = new DataFrame([[0, 2, 4], [360, 180, 360]]); + const df2 = new DataFrame([[1, 2, 4], [10, 5, 0]]); + assert.deepEqual((df1.sub(df2) as DataFrame).values, [[-1, 0, 0], [350, 175, 360]]); + }); + it("Return subtraction of a DataFrame with a DataFrame along axis 0", function () { + const df1 = new DataFrame([[0, 2, 4], [360, 180, 360]]); + const df2 = new DataFrame([[1, 2, 4], [10, 5, 0]]); + assert.deepEqual((df1.sub(df2) as DataFrame).values, [[-1, 0, 0], [350, 175, 360]]); + }); + + }); + + describe("mul", function () { + it("Return multiplication of DataFrame with a single Number", function () { + const data = [[0, 2, 4], [360, 180, 360]]; + const df = new DataFrame(data); + assert.deepEqual((df.mul(2) as DataFrame).values, [[0, 4, 8], [720, 360, 720]]); + }); + it("Return multiplication of a DataFrame with a Series along default axis 1", function () { + const data = [[0, 2, 4], [360, 180, 360]]; + const sf = new Series([1, 2, 1]); + const df = new DataFrame(data); + assert.deepEqual((df.mul(sf) as DataFrame).values, [[0, 4, 4], [360, 360, 360]]); + }); + it("Return multiplication of a DataFrame with a Series along axis 0", function () { + const data = [[0, 2, 4], [360, 180, 360]]; + const sf = new Series([1, 2]); + const df = new DataFrame(data); + assert.deepEqual((df.mul(sf, { axis: 0 }) as DataFrame).values, [[0, 2, 4], [720, 360, 720]]); + }); + it("Return multiplication of a DataFrame with a DataFrame along default axis 1", function () { + const df1 = new DataFrame([[0, 2, 4], [360, 180, 360]]); + const df2 = new DataFrame([[1, 2, 4], [10, 5, 0]]); + assert.deepEqual((df1.mul(df2) as DataFrame).values, [[0, 4, 16], [3600, 900, 0]]); + }); + it("Return multiplication of a DataFrame with a DataFrame along axis 0", function () { + const df1 = new DataFrame([[0, 2, 4], [360, 180, 360]]); + const df2 = new DataFrame([[1, 2, 4], [10, 5, 0]]); + assert.deepEqual((df1.mul(df2, { axis: 0 }) as DataFrame).values, [[0, 4, 16], [3600, 900, 0]]); + }); + + }); + + describe("div", function () { + it("Return division of DataFrame with a single Number", function () { + const data = [[0, 2, 4], [360, 180, 360]]; + const df = new DataFrame(data); + assert.deepEqual((df.div(2) as DataFrame).values, [[0, 1, 2], [180, 90, 180]]); + }); + it("Return division of a DataFrame with a Series along default axis 1", function () { + const data = [[0, 2, 4], [360, 180, 360]]; + const sf = new Series([1, 2, 1]); + const df = new DataFrame(data); + assert.deepEqual((df.div(sf) as DataFrame).values, [[0, 1, 4], [360, 90, 360]]); + }); + it("Return division of a DataFrame with a Series along axis 0", function () { + const data = [[0, 2, 4], [360, 180, 360]]; + const sf = new Series([1, 2]); + const df = new DataFrame(data); + assert.deepEqual((df.div(sf, { axis: 0 }) as DataFrame).values, [[0, 2, 4], [180, 90, 180]]); + }); + it("Return division of a DataFrame with a DataFrame along default axis 1", function () { + const df1 = new DataFrame([[0, 2, 4], [360, 180, 360]]); + const df2 = new DataFrame([[1, 2, 4], [10, 5, 0]]); + assert.deepEqual((df1.div(df2) as DataFrame).values, [[0, 1, 1], [36, 36, Infinity]]); + }); + it("Return division of same DataFrame along axis 0", function () { + const df1 = new DataFrame([[0, 2, 4], [360, 180, 360]]); + assert.deepEqual((df1.div(df1) as DataFrame).values, [[NaN, 1, 1], [1, 1, 1]]); + }); + it("Return division of a DataFrame with a DataFrame along axis 0", function () { + const df1 = new DataFrame([[0, 2, 4], [360, 180, 360]]); + const df2 = new DataFrame([[1, 2, 4], [10, 5, 0]]); + assert.deepEqual((df1.div(df2) as DataFrame).values, [[0, 1, 1], [36, 36, Infinity]]); + }); + + }); + + describe("pow", function () { + it("Return exponential of DataFrame with a single Number", function () { + const data = [[0, 2, 4], [360, 180, 360]]; + const df = new DataFrame(data); + assert.deepEqual((df.pow(2) as DataFrame).values, [[0, 4, 16], [129600, 32400, 129600]]); + }); + it("Return exponential of a DataFrame with a Series along default axis 1", function () { + const data = [[0, 2, 4], [360, 180, 360]]; + const sf = new Series([1, 2, 1]); + const df = new DataFrame(data); + assert.deepEqual((df.pow(sf) as DataFrame).values, [[0, 4, 4], [360, 32400, 360]]); + }); + it("Return exponential of a DataFrame with a Series along axis 0", function () { + const data = [[0, 2, 4], [360, 180, 360]]; + const sf = new Series([1, 2]); + const df = new DataFrame(data); + assert.deepEqual((df.pow(sf, { axis: 0 }) as DataFrame).values, [[0, 2, 4], [129600, 32400, 129600]]); + }); + it("Return exponential of a DataFrame with another DataFrame along default axis 1", function () { + const df1 = new DataFrame([[0, 2, 4], [3, 10, 4]]); + const df2 = new DataFrame([[1, 2, 4], [10, 5, 0]]); + assert.deepEqual((df1.pow(df2) as DataFrame).values, [[0, 4, 256], [59049, 100000, 1]]); + }); + it("Return exponential of a DataFrame with another DataFrame along axis 0", function () { + const df1 = new DataFrame([[0, 2, 4], [3, 10, 4]]); + const df2 = new DataFrame([[1, 2, 4], [10, 5, 0]]); + assert.deepEqual((df1.pow(df2, { axis: 0 }) as DataFrame).values, [[0, 4, 256], [59049, 100000, 1]]); + }); + + }); + + describe("mod", function () { + it("Return modulus of DataFrame with a single Number", function () { + const data = [[0, 2, 4], [360, 180, 360]]; + const df = new DataFrame(data); + assert.deepEqual((df.mod(2) as DataFrame).values, [[0, 0, 0], [0, 0, 0]]); + }); + it("Return modulus of a DataFrame with a Series along default axis 1", function () { + const data = [[0, 2, 4], [31, 15, 360]]; + const sf = new Series([1, 2, 1]); + const df = new DataFrame(data); + assert.deepEqual((df.mod(sf) as DataFrame).values, [[0, 0, 0], [0, 1, 0]]); + }); + it("Return modulus of a DataFrame with a Series along axis 0", function () { + const data = [[0, 2, 4], [31, 15, 360]]; + const sf = new Series([1, 2]); + const df = new DataFrame(data); + assert.deepEqual((df.mod(sf, { axis: 0 }) as DataFrame).values, [[0, 0, 0], [1, 1, 0]]); + }); + it("Return modulus of a DataFrame with a DataFrame along default axis 1", function () { + const df1 = new DataFrame([[0, 2, 4], [31, 15, 360]]); + const df2 = new DataFrame([[1, 2, 4], [10, 5, 0]]); + assert.deepEqual((df1.mod(df2) as DataFrame).values, [[0, 0, 0], [1, 0, NaN]]); + }); + it("Return modulus of a DataFrame with a DataFrame along axis 0", function () { + const df1 = new DataFrame([[0, 2, 4], [360, 180, 360]]); + const df2 = new DataFrame([[1, 2, 4], [10, 5, 0]]); + assert.deepEqual((df1.mod(df2) as DataFrame).values, [[0, 0, 0], [0, 0, NaN]]); + }); + + }); + + describe("mean", function () { + it("Returns the mean of a DataFrame (Default axis is [1:column])", function () { + const data = [[0, 2, 4], + [360, 180, 360]]; + const df = new DataFrame(data, { columns: ["col1", "col2", "col3"], index: ["row1", "row2"] }); + assert.deepEqual(df.mean().values, [2, 300]); + assert.deepEqual(df.mean().index, ["row1", "row2"]); + }); + it("Return mean of a DataFrame along axis 1 (column)", function () { + const data = [[0, 2, 4], [360, 180, 360]]; + const df = new DataFrame(data); + assert.deepEqual(df.mean({ "axis": 1 }).values, [2, 300]); + }); + it("Removes NaN before calculating mean of a DataFrame", function () { + const data = [[11, 20, 3], + [NaN, 15, 6], + [2, 30, 40], + [2, 89, 78]]; + const df = new DataFrame(data); + assert.deepEqual(df.mean({ "axis": 1 }).values, [11.333333333333334, 10.5, 24, 56.333333333333336]); + }); + it("Return mean of a DataFrame along axis 0 (column)", function () { + const data = [[0, 2, 4], [360, 180, 360]]; + const df = new DataFrame(data, { columns: ["col1", "col2", "col3"] }); + assert.deepEqual(df.mean({ "axis": 0 }).values, [180, 91, 182]); + assert.deepEqual(df.mean({ "axis": 0 }).index, ["col1", "col2", "col3"]); + + }); + it("Removes NaN before calculating mean of a DataFrame along axis 0 (column)", function () { + const data = [[11, 20, 3], + [NaN, 15, 6], + [2, 30, 40], + [2, 89, 78]]; + const df = new DataFrame(data); + assert.deepEqual(df.mean({ "axis": 0 }).values, [5, 38.5, 31.75]); + }); + }); + + describe("median", function () { + it("Returns the median of a DataFrame (Default axis is [1:column])", function () { + const data = [[0, 2, 4], [360, 180, 360]]; + const df = new DataFrame(data); + assert.deepEqual(df.median().values, [2, 360]); + }); + it("Return median of a DataFrame along axis 0 (row)", function () { + const data = [[0, 2, 4], [360, 180, 360]]; + const df = new DataFrame(data); + assert.deepEqual(df.median({ "axis": 0 }).values, [180, 91, 182]); + }); + + }); + + describe("mode", function () { + it("Returns the mode of a DataFrame (Default axis is [1:column])", function () { + const data = [[0, 2, 4, 2], [360, 180, 360]] + const df = new DataFrame(data) + assert.deepEqual(df.mode().values, [2, 360]) + }) + it("Returns the mode of a DataFrame with keep set to 1", function () { + const data = [[0, 2, 4, 2, 4], [360, 180, 360, 360]] + const df = new DataFrame(data) + assert.deepEqual(df.mode({ keep: 1 }).values, [4, 360]) + }) + it("Returns mode of a DataFrame along axis 0 (row)", function () { + const data = [[0, 2, 4], + [360, 180, 360], + [0, 2, 360]] + const df = new DataFrame(data) + assert.deepEqual(df.mode({ "axis": 0 }).values, [0, 2, 360]) + }) + it("Returns mode of a DataFrame along axis 0 for objects", function () { + const data = { "col1": [0, 2, 4, 0], "col2": [360, 180, 360, 360] } + const df = new DataFrame(data) + assert.deepEqual(df.mode({ "axis": 0 }).values, [0, 360]) + }) + + }) + + describe("min", function () { + it("Returns the minimum values in a DataFrame (Default axis is [1:column])", function () { + const data = [[0, 2, 4], [360, 180, 360]]; + const df = new DataFrame(data); + assert.deepEqual(df.min().values, [0, 180]); + }); + it("Returns the minimum values of a DataFrame along axis 0 (row)", function () { + const data = [[0, 2, 4], [360, 180, 360]]; + const df = new DataFrame(data); + assert.deepEqual(df.min({ "axis": 0 }).values, [0, 2, 4]); + }); + it("Returns the minimum values of a DataFrame along axis 0 (row)", function () { + const data = [[0, 2, 4], [360, 180, 360]]; + const df = new DataFrame(data); + assert.deepEqual(df.min({ "axis": 0 }).values, [0, 2, 4]); + }); + it("Returns the minimum values in a DataFrame-Default axis 1", function () { + const data = [[0, 2, 4], [360, 180, 360]]; + const df = new DataFrame(data); + assert.deepEqual(df.min().values, [0, 180]); + }); + + }); + + describe("max", function () { + it("Returns the maximum values in a DataFrame (Default axis is [1:column])", function () { + const data = [[0, 2, 4], [360, 180, 360]]; + const df = new DataFrame(data); + assert.deepEqual(df.max().values, [4, 360]); + }); + it("Returns the maximum values of a DataFrame along axis 0 (row)", function () { + const data = [[0, 2, 4], [360, 180, 360]]; + const df = new DataFrame(data); + assert.deepEqual(df.max({ "axis": 0 }).values, [360, 180, 360]); + }); + + }); + + describe("std", function () { + it("Returns the standard deviations of values in a DataFrame (Default axis is [1:column])", function () { + const data = [[0, 2, 4], [360, 180, 360]]; + const df = new DataFrame(data); + assert.deepEqual(df.std().values, [2, 103.92304845413264]); + }); + it("Return the standard deviations of values of a DataFrame along axis 0 (row)", function () { + const data = [[0, 2, 4], [360, 180, 360]]; + const df = new DataFrame(data); + assert.deepEqual(df.std({ axis: 0 }).values, [254.55844122715712, 125.86500705120545, 251.7300141024109]); + }); + + + }); + + describe("var", function () { + it("Returns the variance of values in a DataFrame (Default axis is [1:column])", function () { + const data = [[0, 2, 4], [360, 180, 360]]; + const df = new DataFrame(data); + assert.deepEqual(df.var().values, [4, 10800]); + }); + it("Return the variance of values of a DataFrame along axis 0 (row)", function () { + const data = [[0, 2, 4], [360, 180, 360]]; + const df = new DataFrame(data); + assert.deepEqual(df.var({ axis: 0 }).values, [64800, 15842, 63368]); + }); + + + }); + + describe("describe", function () { + it("Returns descriptive statistics of columns in a DataFrame created from an array", function () { + const data = [[0, 2, 4, "a"], + [360, 180, 360, "b"], + [2, 4, 6, "c"]]; + + const df = new DataFrame(data); + const res = [[3, 3, 3], [120.66666666666667, 62, 123.33333333333333], + [207.27115895206774, 102.19589032832974, 204.961785055979], + [0, 2, 4], [2, 4, 6], + [360, 180, 360], + [42961.33333333333, 10444, 42009.333333333336]]; + assert.deepEqual(df.describe().values, res); + }); + it("Returns descriptive statistics of columns in a DataFrame created from an Object", function () { + const data = { + "col1": [0, 2, 4], + "col2": [360, 180, 360], + "col3": [2, 4, 6], + "col4": ["boy", "girl", "man"], + "col5": ["apple", "car", "bee"] + }; + const df = new DataFrame(data); + + const res = [[3, 3, 3], [2, 300, 4], + [2, 103.92304845413264, 2], + [0, 180, 2], [2, 360, 4], + [4, 360, 6], + [4, 10800, 4]]; + assert.deepEqual(df.describe().values, res); + }); + + }); + + describe("count", function () { + it("Returns the count of non-nan values in a DataFrame (Default axis is [1:column])", function () { + const data = [[0, 2, 4], + [360, 180.1, 360.11], + [NaN, 2, 4], + [360, undefined, 360]]; + const df = new DataFrame(data); + assert.deepEqual(df.count().values, [3, 3, 2, 2]); + }); + it("Return the count of non NaN values of a DataFrame along axis 0", function () { + const data = [[0, 2, 4, NaN], + [360, undefined, 360, 70]]; + const df = new DataFrame(data); + assert.deepEqual(df.count({ axis: 0 }).values, [2, 1, 2, 1]); + }); + + }); + + describe("round", function () { + it("Rounds values in a DataFrame to 3dp", function () { + const data = [[10.1, 2.092, 4.23], [360.232244, 180.0190290, 36.902612]]; + const df = new DataFrame(data); + const expected = [[10.1, 2.092, 4.23], [360.232, 180.0190, 36.903]]; + assert.deepEqual((df.round(3) as DataFrame).values as number[][], expected); + }); + it("Rounds values in a DataFrame to 1dp, inplace", function () { + const data = [[10.1, 2.092, 4.23], [360.232244, 180.0190290, 36.902612]]; + const df = new DataFrame(data); + const expected = [[10.1, 2.1, 4.2], [360.2, 180.0, 36.9]]; + df.round(1, { inplace: true }) as DataFrame + assert.deepEqual(df.values as number[][], expected); + }); + it("Rounds values in a DataFrame to 3dp with missing values", function () { + const data = [[10.1, 2.092, null], [360.232244, null, 36.902612]]; + const df = new DataFrame(data); + const expected = [[10.1, 2.092, null], [360.232, null, 36.903]]; + assert.deepEqual((df.round(3) as DataFrame).values as number[][], expected); + }); + + }); + + describe("sortValues", function () { + it("Sort values in DataFrame by specified column in ascending order (Default)", function () { + const data = [[0, 2, 4, "a"], + [360, 180, 360, "b"], + [2, 4, 6, "c"]]; + + const df = new DataFrame(data, { "columns": ["col1", "col2", "col3", "col4"], index: ["a", 1, "c"] }); + df.sortValues("col1", { inplace: true }); + const expected = [[0, 2, 4, "a"], [2, 4, 6, "c"], [360, 180, 360, "b"]]; + assert.deepEqual(df.values, expected); + assert.deepEqual(df.index, ["a", "c", 1]); + + }); + + it("Sort values in DataFrame by specified column in ascending order (Default)", function () { + const data = [[0, 2, 4, "a"], + [360, 180, 1, "b"], + [2, 4, 6, "c"]]; + + const df = new DataFrame(data, { "columns": ["col1", "col2", "col3", "col4"] }); + const df_sort = df.sortValues("col3") as DataFrame + const expected = [[360, 180, 1, "b"], [0, 2, 4, "a"], [2, 4, 6, "c"]]; + assert.deepEqual(df_sort.values, expected); + assert.deepEqual(df_sort.index, [1, 0, 2]); + + }); + it("Sort values in DataFrame by specified column in descending order", function () { + const data = [[0, 2, 4, "a"], + [360, 180, 360, "b"], + [2, 4, 6, "c"]]; + + const df = new DataFrame(data, { "columns": ["col1", "col2", "col3", "col4"] }); + const expected = [[360, 180, 360, "b"], [2, 4, 6, "c"], [0, 2, 4, "a"]]; + assert.deepEqual((df.sortValues("col1", { "ascending": false }) as DataFrame).values, expected); + }); + + it("Sort values in DataFrame by specified column in descending order (second col)", function () { + const data = [[0, 2, 4, "a"], + [360, 180, 1, "b"], + [2, 4, 6, "c"]]; + + const df = new DataFrame(data, { "columns": ["col1", "col2", "col3", "col4"] }); + const expected = [[2, 4, 6, "c"], [0, 2, 4, "a"], [360, 180, 1, "b"]]; + assert.deepEqual((df.sortValues("col3", { "ascending": false }) as DataFrame).values, expected); + }); + it("Sort values in DataFrame by specified column containing alpha(numeric) values", function () { + const data = [[0, 2, 4, "a"], + [360, 180, 1, "b"], + [2, 4, 6, "c"]]; + + const df = new DataFrame(data, { "columns": ["col1", "col2", "col3", "col4"] }); + const expected = [[2, 4, 6, 'c'], [360, 180, 1, 'b'], [0, 2, 4, 'a']]; + assert.deepEqual((df.sortValues("col4", { "ascending": false }) as DataFrame).values, expected); + }); + it("Sort duplicate DataFrame with duplicate columns", function () { + + const data = { + "A": [1, 2, 3, 4, 5, 3, 5, 6, 4, 5, 3, 4], + "B": [2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4] + }; + + const df = new DataFrame(data); + const expected = [[1, 2], + [2, 3], + [3, 4], + [3, 7], + [3, 3], + [4, 5], + [4, 1], + [4, 4], + [5, 6], + [5, 8], + [5, 2], + [6, 9]]; + assert.deepEqual((df.sortValues("A", { "ascending": true }) as DataFrame).values, expected); + }); + it("sort index in descending order and retains index", function () { + let data = [[0, 2, 4, "b"], + [360, 180, 360, "a"], + [2, 4, 6, "c"]]; + + let df = new DataFrame(data, { "columns": ["col1", "col2", "col3", "col4"], index: ["b", "a", "c"] }); + let df2 = df.sortIndex({ ascending: false }); + let rslt = ["c", "b", "a"]; + + assert.deepEqual(df2.index, rslt); + }); + }); + + describe("copy", function () { + it("Makes a deep copy of DataFrame", function () { + const data = [[0, 2, 4], [360, 180, 360]]; + const df = new DataFrame(data); + const df_copy = df.copy(); + assert.deepEqual(df_copy.values, [[0, 2, 4], [360, 180, 360]]); + }); + it("Confirms child copy modification does not affect parent DataFrame", function () { + const data = [[0, 2, 4], [360, 180, 360]]; + const df = new DataFrame(data); + const df_copy = df.copy(); + df_copy.addColumn("col_new", ["boy", "girl"], { inplace: true }); + assert.notDeepEqual(df_copy.values, df.values); + assert.notDeepEqual(df_copy, df); + }); + + }); + + + describe("setIndex", function () { + it("Sets the index of a DataFrame created from an Object inplace", function () { + const data = [{ alpha: "A", val_count: 1 }, { alpha: "B", val_count: 2 }, { alpha: "C", val_count: 3 }]; + const df = new DataFrame(data); + df.setIndex({ index: ["one", "two", "three"], inplace: true }) + assert.deepEqual(df.index, ["one", "two", "three"]); + }); + it("Sets the index of a DataFrame from column name", function () { + const data = [{ alpha: "A", val_count: 1 }, { alpha: "B", val_count: 2 }, { alpha: "C", val_count: 3 }]; + const df = new DataFrame(data); + const df_new = df.setIndex({ column: "alpha" }) as DataFrame + assert.deepEqual(df_new.index, ["A", "B", "C"]); + }); + it("Sets the index of a DataFrame from column name", function () { + const data = [{ alpha: "A", val_count: 1 }, { alpha: "B", val_count: 2 }, { alpha: "C", val_count: 3 }]; + const df = new DataFrame(data); + const df_new = df.setIndex({ column: "alpha" }) as DataFrame + assert.deepEqual(df_new.index, ["A", "B", "C"]); + }); + it("Sets the index of a DataFrame from column name and drop column data (inplace)", function () { + const data = [{ alpha: "A", val_count: 1 }, { alpha: "B", val_count: 2 }, { alpha: "C", val_count: 3 }]; + const df = new DataFrame(data); + df.setIndex({ column: "alpha", drop: true, inplace: true }); + assert.deepEqual(df.index, ["A", "B", "C"]); + assert.deepEqual(df.columns, ["val_count"]); + assert.deepEqual(df.values, [[1], [2], [3]]); + assert.throws(() => df["alpha"], Error, + "ParamError: Column not found!. Column name must be one of val_count" + ); + }); + it("Throw error if index and column not passed", function () { + const data = [{ alpha: "A", val_count: 1 }, { alpha: "B", val_count: 2 }, { alpha: "C", val_count: 3 }]; + const df = new DataFrame(data); + assert.throws(() => df.setIndex({ drop: true, inplace: true }), Error, + "ParamError: must specify either index or column" + ); + }); + + it("Sets the index of a DataFrame from column name and drop column data", function () { + const data = [{ alpha: "A", val_count: 1 }, { alpha: "B", val_count: 2 }, { alpha: "C", val_count: 3 }]; + const df = new DataFrame(data); + const df_new = df.setIndex({ column: "alpha", drop: true }) as DataFrame + assert.deepEqual(df_new.index, ["A", "B", "C"]); + assert.deepEqual(df_new.columns, ["val_count"]); + assert.deepEqual(df_new.values, [[1], [2], [3]]); + assert.deepEqual(df_new["alpha"], undefined); + }); + it("Sets the index of a DataFrame created from an Array inplace", function () { + const data = [[0, 2, 4], [360, 180, 360], [0, 2, 4], [360, 180, 360], [0, 2, 4]]; + const df = new DataFrame(data); + df.setIndex({ index: ["one", "two", "three", "four", "five"], "inplace": true }); + assert.deepEqual(df.index, ["one", "two", "three", "four", "five"]); + }); + it("Throws error on wrong row length", function () { + const data = [[0, 2, 4], [360, 180, 360]]; + const df = new DataFrame(data); + assert.throws(() => df.setIndex({ index: ["one", "two", "three", "four", "five"], "inplace": true }), Error, + "ParamError: index must be the same length as the number of rows" + ); + }) + it("Throws error on column not found", function () { + const data = [[0, 2, 4], [360, 180, 360]]; + const df = new DataFrame(data); + assert.throws(() => df.setIndex({ column: "alpha", inplace: true }), Error, + "ParamError: column not found in column names" + ); + }) + + }); + + describe("resetIndex", function () { + it("Resets the index of a DataFrame created from an Object", function () { + const data = [{ alpha: "A", val_count: 1 }, { alpha: "B", val_count: 2 }, { alpha: "C", val_count: 3 }]; + const df = new DataFrame(data, { index: ["one", "two", "three"] }); + const df_reset = df.resetIndex() as DataFrame + assert.deepEqual(df_reset.index, [0, 1, 2]); + }); + it("Resets the index of a DataFrame created from an Array inplace", function () { + const data = [[0, 2, 4], [360, 180, 360], [0, 2, 4], [360, 180, 360], [0, 2, 4]]; + const df = new DataFrame(data, { index: ["one", "two", "three", "four", "five"] }); + df.resetIndex({ inplace: true }); + assert.deepEqual(df.index, [0, 1, 2, 3, 4]); + }); + }); + + + describe("apply", function () { + + it("Apply an aggregation function to a DataFrame axis = 1", function () { + const data = [[0, 2, 4], + [3, 2, 2], + [0, 2, 1]] + const df = new DataFrame(data) + + const sum = (x: any) => { + return x.reduce((a: any, b: any) => a + b, 0) + } + const expected = [6, 7, 3] + const dfApply = df.apply(sum, { axis: 1 }) + assert.deepEqual(dfApply.values, expected) + assert.deepEqual(dfApply.index, [0, 1, 2]) + + }); + it("Apply an aggregation function to a DataFrame axis = 0", function () { + const data = [[0, 2, 4], + [3, 2, 2], + [0, 2, 1]] + const df = new DataFrame(data, { columns: ["col1", "col2", "col3"] }) + + const sum = (x: any) => { + return x.reduce((a: any, b: any) => a + b, 0) + } + const expected = [3, 6, 7] + const dfApply = df.apply(sum, { axis: 0 }) + assert.deepEqual(dfApply.values, expected) + assert.deepEqual(dfApply.index, ["col1", "col2", "col3"]) + }); + + }); + + describe("applyMap", function () { + it("Apply an element-wise function to a DataFrame", function () { + const data = [[0, 2, 4], + [360, 180, 360], + [0, 2, 4]] + const df = new DataFrame(data) + + const add = (x: any) => { + return x + 1000 + } + const expected = [[1000, 1002, 1004], [1360, 1180, 1360], [1000, 1002, 1004]] + const dfApply = df.applyMap(add) as DataFrame + assert.deepEqual(dfApply.values, expected) + }); + + it("Apply an element-wise function to a DataFrame", function () { + const data = [[0, 2, 4], + [360, 180, 360], + [0, 2, 4], + [0, 2, 4]] + const df = new DataFrame(data) + + const add = (x: any) => { + return x + 1000 + } + const expected = [[1000, 1002, 1004], [1360, 1180, 1360], [1000, 1002, 1004], [1000, 1002, 1004]] + const dfApply = df.applyMap(add) as DataFrame + assert.deepEqual(dfApply.values, expected) + }); + + it("Apply an element-wise function to a DataFrame inplace", function () { + const data = [[0, 2, 4], + [360, 180, 360], + [0, 2, 4]] + const df = new DataFrame(data) + + const add = (x: any) => { + return x + 1000 + } + const expected = [[1000, 1002, 1004], [1360, 1180, 1360], [1000, 1002, 1004]] + df.applyMap(add, { inplace: true }) + assert.deepEqual(df.values, expected) + }); + + it("Apply an element-wise function to a DataFrame inplace", function () { + const data = [[0, 2, 4], + [360, 180, 360], + [0, 2, 4], + [0, 2, 4]] + const df = new DataFrame(data) + + const add = (x: any) => { + return x + 1000 + } + const expected = [[1000, 1002, 1004], [1360, 1180, 1360], [1000, 1002, 1004], [1000, 1002, 1004]] + df.applyMap(add, { inplace: true }) + assert.deepEqual(df.values, expected) + }); + }); + + describe("column", function () { + it("Obtain a column from a dataframe created from object", function () { + const data = [{ alpha: "A", val_count: 1 }, { alpha: "B", val_count: 2 }, { alpha: "C", val_count: 3 }]; + const options = { columns: ["Gender", "count"] }; + const df = new DataFrame(data, options); + const expected = df.column("count"); + const rslt_data = [1, 2, 3]; + assert.deepEqual(expected.values, rslt_data); + }); + it("Obtain a column from a dataframe", function () { + const data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols }); + const expected = df.column("C"); + const rslt_data = [3, 6, 40, 78]; + assert.deepEqual(expected.values, rslt_data); + }); + it("Throw Error for wrong column", function () { + const data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols }); + assert.throws(() => { df.column("D"); }, Error, "ParamError: Column not found!. Column name must be one of A,B,C"); + + }); + }); + + + describe("dropNa", function () { + it("drop NaNs along axis 0", function () { + const data = [[0, 2, 4], + [360, 180, 360], + [NaN, 180, 360]] + const column = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: column }); + const df_val = [[2, 4], + [180, 360], + [180, 360]] + assert.deepEqual((df.dropNa({ axis: 0 }) as DataFrame).values, df_val); + + }); + it("drop NaNs along axis 1", function () { + const data = [[0, 2, 4], + [360, 180, 360], + [NaN, 180, 360]] + const column = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: column }); + const df_val = [[0, 2, 4], + [360, 180, 360]] + assert.deepEqual((df.dropNa({ axis: 1 }) as DataFrame).values, df_val); + + }); + it("drop NaNs along axis 1", function () { + const data = [[NaN, 1, 2, 3], [3, 4, NaN, 9], [5, 6, 7, 8]]; + const column = ["A", "B", "C", "D"]; + const df = new DataFrame(data, { columns: column }); + const df_val = [[5, 6, 7, 8]]; + assert.deepEqual((df.dropNa({ axis: 1 }) as DataFrame).values, df_val); + + }); + it("drop inplace at axis 0, inplace false ", function () { + const data = [[NaN, 1, 2, 3], [3, 4, NaN, 9], [5, 6, 7, 8]]; + const column = ["A", "B", "C", "D"]; + const df = new DataFrame(data, { columns: column }); + + const df_val = [[1, 3], [4, 9], [6, 8]]; + + assert.deepEqual((df.dropNa({ axis: 0 }) as DataFrame).values, df_val); + + }); + it("drop inplace at axis 0, inplace true ", function () { + const data = [[NaN, 1, 2, 3], [3, 4, NaN, 9], [5, 6, 7, 8]]; + const column = ["A", "B", "C", "D"]; + const df = new DataFrame(data, { columns: column }); + + const df_val = [[1, 3], [4, 9], [6, 8]]; + df.dropNa({ axis: 0, inplace: true }); + assert.deepEqual(df.values, df_val); + + }); + it("drop inplace at axis 1 at inplace true", function () { + const data = [[NaN, 1, 2, 3], [3, 4, NaN, 9], [5, 6, 7, 8]]; + const column = ["A", "B", "C", "D"]; + const df = new DataFrame(data, { columns: column }); + + const df_val = [[5, 6, 7, 8]]; + + df.dropNa({ axis: 1, inplace: true }); + assert.deepEqual(df.values, df_val); + + }); + it("drop works for undefined values", function () { + let data = [[null, 1, 2, 3], [3, 4, undefined, 9], [5, 6, 7, 8]]; + let column = ["A", "B", "C", "D"]; + let df = new DataFrame(data, { columns: column }); + + let df_val = [[5, 6, 7, 8]]; + + df.dropNa({ axis: 1, inplace: true }); + assert.deepEqual(df.values, df_val); + + }); + }); + + describe("isNa", function () { + + it("check if values are empty (element-wise", function () { + const data = [[NaN, 1, 2, 3], [3, 4, undefined, 9], [5, 6, 7, 8]]; + const column = ["A", "B", "C", "D"]; + const df = new DataFrame(data, { columns: column }); + + const df_val = [ + [true, false, false, false], + [false, false, true, false], + [false, false, false, false] + ]; + const dfNew = df.isNa() + assert.deepEqual(dfNew.values, df_val); + assert.deepEqual(dfNew.dtypes, ["boolean", "boolean", "boolean", "boolean"]); + assert.deepEqual(dfNew.columns, column); + }); + }); + + describe("fillNa", function () { + + it("replace all NaN value inplace", function () { + const data = [[NaN, 1, 2, 3], [3, 4, NaN, 9], [5, 6, 7, 8]]; + const columns = ["A", "B", "C", "D"]; + const df = new DataFrame(data, { columns: columns }); + + const expected = [[-999, 1, 2, 3], [3, 4, -999, 9], [5, 6, 7, 8]]; + df.fillNa(-999, { inplace: true }); + assert.deepEqual(df.values, expected); + }); + it("replace all undefined value", function () { + const data = [[undefined, 1, 2, 3], [3, 4, null, 9], [5, 6, 7, 8]]; + const columns = ["A", "B", "C", "D"]; + const df = new DataFrame(data, { columns: columns }); + + const expected = [[-999, 1, 2, 3], [3, 4, -999, 9], [5, 6, 7, 8]]; + + const df_filled = df.fillNa(-999) as DataFrame + assert.deepEqual(df_filled.values, expected); + }); + it("replace all undefined value with 0 works", function () { + const data = [[undefined, 1, 2, 3], [3, 4, null, 9], [5, NaN, 7, 8]]; + const columns = ["A", "B", "C", "D"]; + const df = new DataFrame(data, { columns: columns }); + + const expected = [[0, 1, 2, 3], [3, 4, 0, 9], [5, 0, 7, 8]]; + + const df_filled = df.fillNa(0) as DataFrame + assert.deepEqual(df_filled.values, expected); + }); + + + it("Fills only a specified column", function () { + const data = [[1, 2, 3], + [4, 5, 6], + [20, NaN, 40], + [39, NaN, NaN]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols }); + const expected = [[1, 2, 3], [4, 5, 6], [20, 2, 40], [39, 2, NaN]]; + const df_filled = df.fillNa([2], { columns: ["B"] }) as DataFrame; + + assert.deepEqual(df_filled.values, expected); + }); + it("Fills column with specified values not in place", function () { + const data = [[1, 2, 3], [4, 5, 6], [NaN, 20, 40], [NaN, -1, 78]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols }); + const new_vals = [[1, 2, 3], [4, 5, 6], [-2, 20, 40], [-2, -1, 78]]; + const df_filled = df.fillNa([-2], { columns: ["A"] }) as DataFrame + + assert.deepEqual(df_filled.values, new_vals); + }); + + it("Fills a list of columns with specified values", function () { + const data = [[1, undefined, 3], [4, undefined, 6], [NaN, "boy", 40], [NaN, "girl", NaN]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols }); + const new_vals = [[1, "girl", 3], [4, "girl", 6], [200, "boy", 40], [200, "girl", NaN]]; + const df_filled = df.fillNa([200, "girl"], { columns: ["A", "B"] }) as DataFrame + assert.deepEqual(df_filled.values, new_vals); + }); + it("Fills a list of columns with specified values inplace", function () { + const data = [[1, undefined, 3], [4, undefined, 6], [NaN, "boy", 40], [NaN, "girl", 78]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols }); + const new_vals = [[1, "girl", 3], [4, "girl", 6], [200, "boy", 40], [200, "girl", 78]]; + df.fillNa([200, "girl"], { columns: ["A", "B"], inplace: true }); + assert.deepEqual(df.values, new_vals); + }); + }); + + describe("selectDtypes", function () { + + it("Returns float columns in a DataFrame", function () { + const data = [[30, 1, 2, "boy"], [3.2, 4, 30, "girl"], [5.09, 6, 7, "cat"]]; + const column = ["A", "B", "C", "D"]; + const df = new DataFrame(data, { columns: column }); + const df_sub = df.selectDtypes(['float32']); + assert.deepEqual(df_sub.values, [[30], [3.2], [5.09]]); + }); + + it("Returns int columns in a DataFrame", function () { + const data = [[30, 1, 2, "boy"], + [3.2, 4, 30, "girl"], + [5.09, 6, 7, "cat"]]; + const column = ["A", "B", "C", "D"]; + const df = new DataFrame(data, { columns: column }); + const df_sub = df.selectDtypes(['int32']); + assert.deepEqual(df_sub.values, [[1, 2], [4, 30], [6, 7]]); + }); + + it("Returns string columns in a DataFrame", function () { + const data = [[30, 1, 2, "boy"], + [3.2, 4, 30, "girl"], + [5.09, 6, 7, "cat"]]; + const column = ["A", "B", "C", "D"]; + const df = new DataFrame(data, { columns: column }); + const df_sub = df.selectDtypes(['string']); + assert.deepEqual(df_sub.values, [["boy"], ["girl"], ["cat"]]); + }); + + it("Returns string and float columns in a DataFrame", function () { + const data = [[30, 1, 2, "boy"], + [3.2, 4, 30, "girl"], + [5.09, 6, 7, "cat"]]; + const column = ["A", "B", "C", "D"]; + const df = new DataFrame(data, { columns: column }); + const df_sub = df.selectDtypes(['string', 'float32']); + assert.deepEqual(df_sub.values, [[30, "boy"], [3.2, "girl"], [5.09, "cat"]]); + }); + + it("Returns int and float columns in a DataFrame", function () { + const data = [[30, 1, 2, "boy"], + [3.2, 4, 30, "girl"], + [5.09, 6, 7, "cat"]]; + const column = ["A", "B", "C", "D"]; + const df = new DataFrame(data, { columns: column }); + const df_sub = df.selectDtypes(['int32', 'float32']); + assert.deepEqual(df_sub.values, [[30, 1, 2], [3.2, 4, 30], [5.09, 6, 7]]); + }); + }); + + + describe("lt", function () { + it("Returns Less than of DataFrame and other DataFrame (element-wise)", function () { + const data1 = [[10, 45, 56, 10], [25, 23, 20, 10]]; + const data2 = [[100, 450, 590, 5], [25, 2, 0, 10]]; + + const df = new DataFrame(data1); + const df2 = new DataFrame(data2); + const expected = [[true, true, true, false], + [false, false, false, false]]; + assert.deepEqual(df.lt(df2).values, expected); + }); + + it("Return Less than of series and scalar (element-wise)", function () { + const data1 = [[10, 45, 56, 10], [25, 23, 20, 10]]; + const sf = new DataFrame(data1); + const expected = [[true, false, false, true], + [true, true, true, true]]; + assert.deepEqual(sf.lt(30).values, expected); + }); + it("Return Less than of series and DataFrame along axis 1", function () { + const data1 = [[10, 45, 56, 10], + [23, 20, 10, 10]]; + const sf = new Series([10, 23, 56, 100]); + const df = new DataFrame(data1); + const expected = [[false, false, false, true], [false, true, true, true]]; + assert.deepEqual(df.lt(sf, { axis: 1 }).values, expected); + }); + + it("Return Less than of Array and DataFrame along axis 1", function () { + const data1 = [[10, 45, 56, 10], [23, 20, 10, 10]]; + const sf = [10, 23, 56, 100]; + const df = new DataFrame(data1); + const expected = [[false, false, false, true], [false, true, true, true]]; + assert.deepEqual(df.lt(sf, { axis: 1 }).values, expected); + }); + it("Return Less than of series and DataFrame along axis 0", function () { + const data1 = [[10, 45, 56, 10], + [23, 20, 10, 10]]; + const sf = new Series([10, 23]); + const df = new DataFrame(data1); + const expected = [[false, false, false, false], [false, true, true, true]]; + const result = df.lt(sf, { axis: 0 }) + assert.deepEqual(result.values, expected); + }); + + it("Return Less than of Array and DataFrame along axis 0", function () { + const data1 = [[10, 45, 56, 10], [23, 20, 10, 10]]; + const sf = [10, 23]; + const df = new DataFrame(data1); + const expected = [[false, false, false, false], [false, true, true, true]]; + const result = df.lt(sf, { axis: 0 }) + assert.deepEqual(result.values, expected); + }); + + }); + + describe("gt", function () { + it("Return Greater than of series and other series (element-wise)", function () { + const data1 = [[10, 45, 56, 10], [25, 23, 20, 10]]; + const data2 = [[100, 450, 590, 5], [25, 2, 0, 10]]; + + const df = new DataFrame(data1); + const df2 = new DataFrame(data2); + const expected = [[false, false, false, true], [false, true, true, false]]; + assert.deepEqual(df.gt(df2).values, expected); + }); + + it("Return Greater than of series scalar (element-wise)", function () { + const data1 = [[10, 45, 56, 10], [25, 23, 20, 10]]; + const sf = new DataFrame(data1); + const expected = [[false, true, true, false], [false, false, false, false]]; + assert.deepEqual(sf.gt(30).values, expected); + }); + + it("Return Less than of Array and DataFrame scalar along axis 1", function () { + const data1 = [[10, 45, 56, 10], [23, 20, 10, 10]]; + const sf = [10, 23, 56, 100]; + const df = new DataFrame(data1); + const expected = [[false, true, false, false], [true, false, false, false]]; + assert.deepEqual(df.gt(sf, { axis: 1 }).values, expected); + }); + it("Return Less than of Array and DataFrame scalar along axis 0", function () { + const data1 = [[10, 45, 56, 10], [23, 20, 10, 10]]; + const sf = [10, 23]; + const df = new DataFrame(data1); + const expected = [[false, true, true, false], [false, false, false, false]]; + assert.deepEqual(df.gt(sf, { axis: 0 }).values, expected); + }); + + }); + + describe("le", function () { + it("Return Less than or Equal to of series and other series (element-wise)", function () { + const data1 = [[10, 45, 56, 10], [25, 23, 20, 10]]; + const data2 = [[100, 450, 590, 5], [25, 2, 0, 10]]; + + const df = new DataFrame(data1); + const df2 = new DataFrame(data2); + const expected = [[true, true, true, false], [true, false, false, true]]; + assert.deepEqual(df.le(df2).values, expected); + }); + + it("Return Less than or Equal to of series scalar (element-wise)", function () { + const data1 = [[10, 45, 56, 10], [25, 23, 30, 10]]; + const sf = new DataFrame(data1); + const expected = [[true, false, false, true], [true, true, true, true]]; + assert.deepEqual(sf.le(30).values, expected); + }); + + }); + + describe("ge", function () { + it("Return Greater than or Equal to of series and other series (element-wise)", function () { + const data1 = [[10, 45, 56, 10], [25, 23, 20, 10]]; + const data2 = [[100, 450, 590, 5], [25, 2, 0, 10]]; + + const df = new DataFrame(data1); + const df2 = new DataFrame(data2); + const expected = [[false, false, false, true], [true, true, true, true]]; + assert.deepEqual(df.ge(df2).values, expected); + }); + + it("Return Greater than or Equal to of series scalar (element-wise)", function () { + const data1 = [[10, 45, 56, 10], [25, 23, 30, 10]]; + const sf = new DataFrame(data1); + const expected = [[false, true, true, false], [false, false, true, false]]; + assert.deepEqual(sf.ge(30).values, expected); + }); + + }); + + describe("ne", function () { + it("Return Not Equal to of series and other series (element-wise)", function () { + const data1 = [[10, 45, 56, 10], [25, 23, 20, 10]]; + const data2 = [[100, 450, 590, 5], [25, 2, 0, 10]]; + + const df = new DataFrame(data1); + const df2 = new DataFrame(data2); + const expected = [[true, true, true, true], [false, true, true, false]]; + assert.deepEqual(df.ne(df2).values, expected); + }); + + it("Return Not Equal to of series scalar (element-wise)", function () { + const data1 = [[10, 45, 56, 10], [25, 23, 30, 10]]; + const sf = new DataFrame(data1); + const expected = [[true, true, true, true], [true, true, false, true]]; + assert.deepEqual(sf.ne(30).values, expected); + }); + it("Return Less than of Array and DataFrame along axis 1 (column)", function () { + const data = { + 'cost': [250, 150, 100], + 'revenue': [100, 250, 300] + } + const sf = [100, 300] + const df = new DataFrame(data, { index: ['A', 'B', 'C'] }) + const expected = [[true, true], [true, true], [false, false]]; + const result = df.ne(sf, { axis: 1 }) + assert.deepEqual(result.values, expected); + }); + + }); + + describe("eq", function () { + it("Return Equal to of DataFrame and other DataFrame (element-wise)", function () { + const data1 = [[10, 45, 56, 10], [25, 23, 20, 10]]; + const data2 = [[100, 450, 590, 5], [25, 2, 0, 10]]; + + const df = new DataFrame(data1); + const df2 = new DataFrame(data2); + const expected = [[false, false, false, false], [true, false, false, true]]; + assert.deepEqual(df.eq(df2).values, expected); + }); + + it("Return Equal to of DataFrame with scalar (element-wise)", function () { + const data1 = [[10, 45, 56, 10], [25, 23, 30, 10]]; + const sf = new DataFrame(data1); + const expected = [[false, false, false, false], [false, false, true, false]]; + assert.deepEqual(sf.eq(30).values, expected); + }); + it("Return Equal to of series and DataFrame scalar along axis 1", function () { + const data1 = { "Col1": [10, 45, 56, 10], "Col2": [23, 20, 10, 10] }; + const sf = new Series([10, 23]); + const df = new DataFrame(data1); + const expected = [[true, true], [false, false], [false, false], [true, false]]; + assert.deepEqual(df.eq(sf, { axis: 1 }).values, expected); + }); + it("Return Less than of Array and DataFrame along axis 0", function () { + const data = { + 'cost': [250, 150, 100], + 'revenue': [100, 250, 300] + } + const sf = [250, 250, 100] + const df = new DataFrame(data, { index: ['A', 'B', 'C'] }) + const expected = [[true, false], [false, true], [true, false]]; + const result = df.eq(sf, { axis: 0 }) + assert.deepEqual(result.values, expected); + }); + + }); + + describe("replace", function () { + it("Replace across all columns", function () { + const data1 = [[10, 45, 56, 25], [23, 20, 10, 24]]; + const df = new DataFrame(data1); + const expected = [[-999, 45, 56, 25], [23, 20, -999, 24]]; + const df_rep = df.replace(10, -999) as DataFrame + assert.deepEqual(df_rep.values, expected); + }); + + it("Replace accross all columns inplace", function () { + const data1 = [["A", "A", "A", "B"], ["B", "C", "C", "D"]]; + const df = new DataFrame(data1); + const expected = [["boy", "boy", "boy", "B"], ["B", "C", "C", "D"]]; + df.replace("A", "boy", { inplace: true }); + assert.deepEqual(df.values, expected); + }); + it("Replace values in specified two column(s)", function () { + const data1 = [["A", "A", 1, "girl"], + ["B", "A", 2, "woman"], + ["A", "B", 3, "man"]]; + const df = new DataFrame(data1, { columns: ["col1", "col2", "col3", "col4"] }); + const expected = [["boy", "boy", 1, "girl"], + ["B", "boy", 2, "woman"], + ["boy", "B", 3, "man"]]; + const df_rep = df.replace("A", "boy", { columns: ["col1", "col2"] }) as DataFrame + assert.deepEqual(df_rep.values, expected); + }); + + it("Replace values in specified single column(s)", function () { + const data1 = [[2, "A", 1, "girl"], + [3, "A", 2, "woman"], + [4, "B", 3, "man"]]; + const df = new DataFrame(data1, { columns: ["col1", "col2", "col3", "col4"] }); + const expected = [[2, "A", 1, "girl"], + [100, "A", 2, "woman"], + [4, "B", 3, "man"]]; + const df_rep = df.replace(3, 100, { columns: ["col1"] }) as DataFrame + assert.deepEqual(df_rep.values, expected); + assert.notDeepEqual(df_rep, df); + assert.notDeepEqual(df_rep.values, df.values); + }); + + it("Replace values in specified two column(s) inplace", function () { + const data1 = [["A", "A", 1, "girl"], + ["B", "A", 2, "woman"], + ["A", "B", 3, "man"]]; + const df = new DataFrame(data1, { columns: ["col1", "col2", "col3", "col4"] }); + const expected = [["boy", "boy", 1, "girl"], + ["B", "boy", 2, "woman"], + ["boy", "B", 3, "man"]]; + df.replace("A", "boy", { columns: ["col1", "col2"], inplace: true }); + assert.deepEqual(df.values, expected); + }); + + it("Replace values in specified single column(s) inplace", function () { + const data1 = [[2, "A", 1, "girl"], + [3, "A", 2, "woman"], + [4, "B", 3, "man"]]; + const df = new DataFrame(data1, { columns: ["col1", "col2", "col3", "col4"] }); + const expected = [[2, "A", 1, "girl"], + [100, "A", 2, "woman"], + [4, "B", 3, "man"]]; + df.replace(3, 100, { columns: ["col1"], inplace: true }); + assert.deepEqual(df.values, expected); + }); + + }); + + describe("sum", function () { + it("Sum values of a DataFrame by Default axis column (axis=1)", function () { + const data1 = [[30, 40, 3.1], + [5, 5, 5.1], + [5, 5, 3.2]]; + const sf = new DataFrame(data1); + const res = [73.1, 15.1, 13.2]; + assert.deepEqual(sf.sum().values, res); + }); + it("Sum values of a DataFrame along row axis (axis=0)", function () { + const data1 = [[30, 40, 3.1], + [5, 5, 5.1], + [5, 5, 3.2]]; + const df = new DataFrame(data1); + const res = [40, 50, 11.399999999999999]; + assert.deepEqual(df.sum({ axis: 0 }).values, res); + }); + it("Sum values of a mixed DataFrame along row axis (axis=0)", function () { + const data1 = [[30, 40, 3.1, true], + [5, 5, 5.1, true], + [5, 5, 3.2, true]]; + const df = new DataFrame(data1); + const res = [40, 50, 11.399999999999999, 3]; + assert.deepEqual(df.sum({ axis: 0 }).values, res); + }); + it("Sum values of a boolean DataFrame along row axis (axis=0)", function () { + const data1 = [[true, true, false, true], + [false, false, false, false], + [false, true, true, false]]; + const df = new DataFrame(data1); + const res = [1, 2, 1, 1]; + assert.deepEqual(df.sum({ axis: 0 }).values, res); + }); + it("Sum values of a boolean DataFrame along default column axis (axis=1)", function () { + const data1 = [[true, true, false, true], + [false, false, false, false], + [false, true, true, false]]; + const df = new DataFrame(data1); + const res = [3, 0, 2]; + assert.deepEqual(df.sum().values, res); + }); + it("Sum values of a df with missing values", function () { + const data1 = [[11, 20, 3], [null, 15, 6], [2, 30, 40], [2, 89, 78]]; + const df = new DataFrame(data1); + const res = [34, 21, 72, 169] + assert.deepEqual(df.sum({ axis: 1 }).values, res); + }); + + }); + + describe("abs", function () { + it("Returns the absolute values in DataFrame of ints", function () { + const data1 = [[-10, 45, 56, 10], [-25, 23, 20, -10]]; + const df = new DataFrame(data1); + const expected = [[10, 45, 56, 10], [25, 23, 20, 10]]; + assert.deepEqual((df.abs() as DataFrame).values, expected); + }); + + it("Returns the absolute values in mixed DataFrame", function () { + const data1 = [[-10, -45.1, 56, 10], [-25, -23.2, 20, -10]]; + const df = new DataFrame(data1); + const expected = [[10, 45.1, 56, 10], [25, 23.2, 20, 10]]; + assert.deepEqual((df.abs() as DataFrame).values, expected); + }); + }); + + describe("T", function () { + it("Return the Transpose of a DataFrame", function () { + const data1 = [[10, 45, 56, 10], + [25, 23, 20, 10]]; + + const cols = ["a", "b", "c", "d"]; + const df = new DataFrame(data1, { columns: cols }); + const df_trans = df.T; + const expected_vals = [[10, 25], [45, 23], [56, 20], [10, 10]]; + const expected_index = cols; + const expected_col_names = ["0", "1"]; + assert.deepEqual(df_trans.index, expected_index); + assert.deepEqual(df_trans.values, expected_vals); + assert.deepEqual(df_trans.columns, expected_col_names); + + }); + }); + + describe("transpose", function () { + it("Return the Transpose of a DataFrame", function () { + const data1 = [[10, 45, 56, 10], + [25, 23, 20, 10]]; + + const cols = ["a", "b", "c", "d"]; + const df = new DataFrame(data1, { columns: cols }); + const df_trans = df.T; + const expected_vals = [[10, 25], [45, 23], [56, 20], [10, 10]]; + const expected_index = cols; + const expected_col_names = ["0", "1"]; + assert.deepEqual(df_trans.index, expected_index); + assert.deepEqual(df_trans.values, expected_vals); + assert.deepEqual(df_trans.columns, expected_col_names); + + }); + it("Transpose a DataFrame inplace", function () { + const data1 = [[10, 45, 56, 10], + [25, 23, 20, 10]]; + + const cols = ["a", "b", "c", "d"]; + const df = new DataFrame(data1, { columns: cols }); + df.transpose({ inplace: true }); + const expected_vals = [[10, 25], [45, 23], [56, 20], [10, 10]]; + const expected_index = cols; + const expected_col_names = ["0", "1"]; + assert.deepEqual(df.index, expected_index); + assert.deepEqual(df.values, expected_vals); + assert.deepEqual(df.columns, expected_col_names); + + }); + }); + + + describe("asType", function () { + it("set type of float column to int", function () { + const data = { + "A": [-20.1, 30, 47.3, -20], + "B": [34, -4, 5, 6], + "C": [20.1, -20.23, 30.3, 40.11], + "D": ["a", "b", "c", "c"] + }; + const df = new DataFrame(data); + const dfNew = df.asType("A", "int32") as DataFrame + dfNew["D"] = ["a", "b", "c", "F"]; + assert.deepEqual(dfNew.dtypes, ['int32', 'int32', 'float32', 'string']); + assert.deepEqual(dfNew['A'].values, [-20, 30, 47, -20]); + assert.notDeepEqual(dfNew["D"].values, df["D"].values); + + }); + it("set type of int column to float", function () { + const data = { + "A": [-20.1, 30, 47.3, -20], + "B": [34, -4, 5, 6], + "C": [20.1, -20.23, 30.3, 40.11], + "D": ["a", "b", "c", "c"] + }; + const df = new DataFrame(data); + const dfNew = df.asType("B", "float32") as DataFrame + + assert.deepEqual(dfNew.dtypes, ['float32', 'float32', 'float32', 'string']); + assert.deepEqual(dfNew['B'].values, [34, -4, 5, 6]); + + }); + it("set type of string column to int", function () { + const data = { + "A": [-20.1, 30, 47.3, -20], + "B": [34, -4, 5, 6], + "C": [20.1, -20.23, 30.3, 40.11], + "D": ["20.1", "21", "23.4", "50.78"] + }; + const df = new DataFrame(data); + const dfNew = df.asType("D", "int32") as DataFrame + + assert.deepEqual(dfNew.dtypes, ['float32', 'int32', 'float32', 'int32']); + assert.deepEqual(dfNew['D'].values, [20, 21, 23, 50]); + + }); + it("set type of string column to float", function () { + const data = { + "A": [-20.1, 30, 47.3, -20], + "B": [34, -4, 5, 6], + "C": [20.1, -20.23, 30.3, 40.11], + "D": ["20.1", "21", "23.4", "50.78"] + }; + const df = new DataFrame(data); + const dfNew = df.asType("D", "float32") as DataFrame + + assert.deepEqual(dfNew.dtypes, ['float32', 'int32', 'float32', 'float32']); + assert.deepEqual(dfNew['D'].values, [20.1, 21, 23.4, 50.78]); + + }); + }); + + describe("nUnique", function () { + it("Returns the number of unique elements along axis 1", function () { + const data = { + "A": [-20, 30, 47.3, -20, 2], + "B": [34, -4, 5, 6, 2], + "C": [20, 20, 30, 30, 2], + "D": ["a", "b", "c", "c", "d"] + }; + + const df = new DataFrame(data); + const res = [4, 4, 4, 4, 2]; + assert.deepEqual(df.nUnique(1).values, res); + + }); + it("Returns the number of unique elements along axis 0", function () { + const data = { + "A": [20, 30, 47.3, 30], + "B": [34, -4, 5, 30], + "C": [20, 20, 30, 30], + "D": ["a", "b", "c", "c"] + }; + + const df = new DataFrame(data); + const res = [3, 4, 2, 3]; + assert.deepEqual(df.nUnique(0).values, res); + + }); + + }); + + + describe("rename", function () { + it("Rename columns along axis 1", function () { + const data = { + "A": [-20, 30, 47.3, -20], + "B": [34, -4, 5, 6], + "C": [20, 20, 30, 30], + }; + + const df = new DataFrame(data); + const dfNew = df.rename({ "A": "a1", "B": "b1" }) as DataFrame + const res = ["a1", "b1", "C",]; + assert.deepEqual(dfNew.columns, res); + + }); + it("confirms original column name is not modified along axis 1", function () { + const data = { + "A": [-20, 30, 47.3, -20], + "B": [34, -4, 5, 6], + "D": ["a", "b", "c", "c"] + }; + + const df = new DataFrame(data); + const dfNew = df.rename({ "A": "a1", "B": "b1" }, { axis: 1 }) + const res = ["A", "B", "D"]; + assert.deepEqual(df.columns, res); + + }); + it("Rename columns along axis 1 inplace", function () { + const data = { + "A": [-20, 30, 47.3, -20], + "B": [34, -4, 5, 6], + "C": [20, 20, 30, 30], + }; + + const df = new DataFrame(data); + df.rename({ "A": "a1", "B": "b1" }, { inplace: true }); + const res = ["a1", "b1", "C"]; + assert.deepEqual(df.columns, res); + + }); + it("Rename string index along axis 0", function () { + const data = { + "A": [-20, 30, 47.3, -20], + "B": [34, -4, 5, 6], + "C": [20, 20, 30, 30], + }; + + const df = new DataFrame(data, { index: ["a", "b", "c", "d"] }); + const dfNew = df.rename({ "a": 0, "b": 1 }, { axis: 0 }) as DataFrame + const res = [0, 1, "c", "d"]; + assert.deepEqual(dfNew.index, res); + + }); + it("Rename string index along axis 0 inplace", function () { + const data = { + "A": [-20, 30, 47.3, -20], + "B": [34, -4, 5, 6], + "C": [20, 20, 30, 30], + }; + + const df = new DataFrame(data, { index: ["a", "b", "c", "d"] }); + df.rename({ "a": 0, "b": 1 }, { axis: 0, inplace: true }); + const res = [0, 1, "c", "d"]; + assert.deepEqual(df.index, res); + + }); + it("Get new column via subseting works after rename (inplace)", function () { + let data = { + "A": [-20, 30, 47.3], + "B": [34, -4, 5], + "C": [20, 2, 30] + }; + let df = new DataFrame(data); + df.rename({ "A": "new_name" }, { inplace: true }); + df["new_name"].print(); + assert.deepEqual(df["new_name"].values, data["A"]); + }); + + it("Get new column via subseting works after rename (not-inplace)", function () { + let data = { + "A": [-20, 30, 47.3], + "B": [34, -4, 5], + "C": [20, 2, 30] + }; + let df = new DataFrame(data); + let new_df = df.rename({ "A": "new_name" }); + assert.deepEqual(new_df["new_name"].values, data["A"]); + }); + }); + + describe("sortIndex", function () { + + it("sort index in ascending order", function () { + const data = [[0, 2, 4, "b"], + [360, 180, 360, "a"], + [2, 4, 6, "c"]]; + + const df = new DataFrame(data, { "columns": ["col1", "col2", "col3", "col4"], index: ["b", "a", "c"] }); + const df2 = df.sortIndex() as DataFrame + const rslt = [[360, 180, 360, 'a'], [0, 2, 4, 'b'], [2, 4, 6, 'c']]; + + assert.deepEqual(df2.values, rslt); + }); + it("sort index in ascending order - inplace", function () { + const data = [[0, 2, 4, "b"], + [360, 180, 360, "a"], + [2, 4, 6, "c"]]; + + const df = new DataFrame(data, { "columns": ["col1", "col2", "col3", "col4"], index: ["b", "a", "c"] }); + df.sortIndex({ inplace: true }); + const rslt = [[360, 180, 360, 'a'], [0, 2, 4, 'b'], [2, 4, 6, 'c']]; + assert.deepEqual(df.values, rslt); + }); + it("sort index in descending order", function () { + const data = [[0, 2, 4, "b"], + [360, 180, 360, "a"], + [2, 4, 6, "c"]]; + + const df = new DataFrame(data, { "columns": ["col1", "col2", "col3", "col4"], index: ["b", "a", "c"] }); + const df2 = df.sortIndex({ ascending: false }) as DataFrame + const rslt = [[2, 4, 6, 'c'], [0, 2, 4, 'b'], [360, 180, 360, 'a']]; + + assert.deepEqual(df2.values, rslt); + }); + it("sort index in descending order with inplace set to true", function () { + const data = [[0, 2, 4, "b"], + [360, 180, 360, "a"], + [2, 4, 6, "c"]]; + + const df = new DataFrame(data, { "columns": ["col1", "col2", "col3", "col4"], index: [4, 2, 5] }); + df.sortIndex({ ascending: false, inplace: true }); + const rslt = [[2, 4, 6, 'c'], [0, 2, 4, 'b'], [360, 180, 360, 'a']]; + assert.deepEqual(df.values, rslt); + }); + }); + + describe("append", function () { + + it("Append works for an array", function () { + const data = [[0, 2, 4, "b"], + [360, 180, 360, "a"], + [2, 4, 6, "c"]]; + + const df = new DataFrame(data); + const expected_val = [[0, 2, 4, "b"], + [360, 180, 360, "a"], + [2, 4, 6, "c"], + [20, 40, 60, "d"]]; + + const newDf = df.append([20, 40, 60, "d"], ["n1"]) as DataFrame + assert.deepEqual(newDf.values, expected_val); + assert.deepEqual(newDf.index, [0, 1, 2, "n1"]); + }); + it("Append works for an array of arrays", function () { + const data = [[0, 2, 4, "b"], + [360, 180, 360, "a"], + [2, 4, 6, "c"]]; + + const df = new DataFrame(data); + const expected_val = [[0, 2, 4, "b"], + [360, 180, 360, "a"], + [2, 4, 6, "c"], + [20, 40, 60, "d"], + [21, 42, 61, "y"]]; + + const newDf = df.append([[20, 40, 60, "d"], [21, 42, 61, "y"]], ["n1", "n2"]) as DataFrame + assert.deepEqual(newDf.values, expected_val); + assert.deepEqual(newDf.index, [0, 1, 2, "n1", "n2"]); + }); + + it("Append works for DataFrame", function () { + const data = [[0, 2, 4, "b"], + [360, 180, 360, "a"], + [2, 4, 6, "c"]]; + + const df = new DataFrame(data, { "columns": ["col1", "col2", "col3", "col4"] }); + const df2 = new DataFrame([[20, 40, 60, "d"]], { "columns": ["col1", "col2", "col3", "col4"] }); + + const expected_val = [[0, 2, 4, "b"], + [360, 180, 360, "a"], + [2, 4, 6, "c"], + [20, 40, 60, "d"]]; + + const newDf = df.append(df2, ["n1"]) as DataFrame + assert.deepEqual(newDf.values, expected_val); + + }); + it("Append works for Series", function () { + const data = [[0, 2, 4, "b"], + [360, 180, 360, "a"], + [2, 4, 6, "c"]]; + + const df = new DataFrame(data, { "columns": ["col1", "col2", "col3", "col4"] }); + const sf = new Series([20, 40, 60, "d"]); + + const expected_val = [[0, 2, 4, "b"], + [360, 180, 360, "a"], + [2, 4, 6, "c"], + [20, 40, 60, "d"]]; + + const newDf = df.append(sf, ["n1"]) as DataFrame + assert.deepEqual(newDf.values, expected_val); + + }); + }); + + describe("cumProd", function () { + + it("cumProd works for axis 1", function () { + const data = [[2, 1, 2, 3], [3, 4, 11, 9], [5, 6, 7, 8]]; + const column = ["A", "B", "C", "D"]; + const df = new DataFrame(data, { columns: column }); + const rslt = [[2, 2, 4, 12], + [3, 12, 132, 1188], + [5, 30, 210, 1680]] + + const newDf = df.cumProd() as DataFrame + assert.deepEqual(newDf.values, rslt); + }); + it("cumProd axis 0 works", function () { + const data = [[2, 1, 2, 3], [3, 4, 11, 9], [5, 6, 7, 8]]; + const column = ["A", "B", "C", "D"]; + const df = new DataFrame(data, { columns: column }); + const rslt = [[2, 1, 2, 3], + [6, 4, 22, 27], + [30, 24, 154, 216]] + + assert.deepEqual((df.cumProd({ axis: 0 }) as DataFrame).values, rslt); + }); + + it("cumProd works for axis 1 inplace", function () { + const data = [[2, 1, 2, 3], [3, 4, 11, 9], [5, 6, 7, 8]]; + const column = ["A", "B", "C", "D"]; + const df = new DataFrame(data, { columns: column }); + const rslt = [[2, 2, 4, 12], + [3, 12, 132, 1188], + [5, 30, 210, 1680]] + + df.cumProd({ inplace: true }) + assert.deepEqual(df.values, rslt); + }); + it("cumProd axis 0 works inplace", function () { + const data = [[2, 1, 2, 3], [3, 4, 11, 9], [5, 6, 7, 8]]; + const column = ["A", "B", "C", "D"]; + const df = new DataFrame(data, { columns: column }); + const rslt = [[2, 1, 2, 3], + [6, 4, 22, 27], + [30, 24, 154, 216]] + df.cumProd({ axis: 0, inplace: true }) + assert.deepEqual(df.values, rslt); + }); + }); + + describe("cumSum", function () { + + it("cumSum works for axis 1", function () { + const data = [[2, 1, 2, 3], [3, 4, 11, 9], [5, 6, 7, 8]]; + const column = ["A", "B", "C", "D"]; + const df = new DataFrame(data, { columns: column }); + const rslt = [[2, 3, 5, 8], + [3, 7, 18, 27], + [5, 11, 18, 26]] + + const newDf = df.cumSum() as DataFrame + assert.deepEqual(newDf.values, rslt); + }); + it("cumSum axis 0 works", function () { + const data = [[2, 1, 2, 3], [3, 4, 11, 9], [5, 6, 7, 8]]; + const column = ["A", "B", "C", "D"]; + const df = new DataFrame(data, { columns: column }); + const rslt = [[2, 1, 2, 3], + [5, 5, 13, 12], + [10, 11, 20, 20]] + + assert.deepEqual((df.cumSum({ axis: 0 }) as DataFrame).values, rslt); + }); + + it("cumSum works for axis 1 inplace", function () { + const data = [[2, 1, 2, 3], [3, 4, 11, 9], [5, 6, 7, 8]]; + const column = ["A", "B", "C", "D"]; + const df = new DataFrame(data, { columns: column }); + const rslt = [[2, 3, 5, 8], + [3, 7, 18, 27], + [5, 11, 18, 26]] + + df.cumSum({ inplace: true }) + assert.deepEqual(df.values, rslt); + }); + it("cumSum axis 0 works inplace", function () { + const data = [[2, 1, 2, 3], [3, 4, 11, 9], [5, 6, 7, 8]]; + const column = ["A", "B", "C", "D"]; + const df = new DataFrame(data, { columns: column }); + const rslt = [[2, 1, 2, 3], + [5, 5, 13, 12], + [10, 11, 20, 20]] + df.cumSum({ axis: 0, inplace: true }) + assert.deepEqual(df.values, rslt); + }); + }); + + describe("cumMin", function () { + + it("cumMin works for axis 1", function () { + const data = [[2, 1, 2, 3], [3, 4, 11, 9], [5, 6, 7, 8]]; + const column = ["A", "B", "C", "D"]; + const df = new DataFrame(data, { columns: column }); + const rslt = [[2, 1, 1, 1], + [3, 3, 3, 3], + [5, 5, 5, 5]] + + const newDf = df.cumMin() as DataFrame + assert.deepEqual(newDf.values, rslt); + }); + it("cumMin axis 0 works", function () { + const data = [[2, 1, 2, 3], [3, 4, 11, 9], [5, 6, 7, 8]]; + const column = ["A", "B", "C", "D"]; + const df = new DataFrame(data, { columns: column }); + const rslt = [[2, 1, 2, 3], + [2, 1, 2, 3], + [2, 1, 2, 3]] + + assert.deepEqual((df.cumMin({ axis: 0 }) as DataFrame).values, rslt); + }); + + it("cumMin works for axis 1 inplace", function () { + const data = [[2, 1, 2, 3], [3, 4, 11, 9], [5, 6, 7, 8]]; + const column = ["A", "B", "C", "D"]; + const df = new DataFrame(data, { columns: column }); + const rslt = [[2, 1, 1, 1], + [3, 3, 3, 3], + [5, 5, 5, 5]] + + df.cumMin({ inplace: true }) + assert.deepEqual(df.values, rslt); + }); + it("cumMin axis 0 works inplace", function () { + const data = [[2, 1, 2, 3], [3, 4, 11, 9], [5, 6, 7, 8]]; + const column = ["A", "B", "C", "D"]; + const df = new DataFrame(data, { columns: column }); + const rslt = [[2, 1, 2, 3], + [2, 1, 2, 3], + [2, 1, 2, 3]] + df.cumMin({ axis: 0, inplace: true }) + assert.deepEqual(df.values, rslt); + }); + }); + + describe("cumMax", function () { + + it("cumMax works for axis 1", function () { + const data = [[2, 1, 2, 3], [3, 4, 11, 9], [5, 6, 7, 8]]; + const column = ["A", "B", "C", "D"]; + const df = new DataFrame(data, { columns: column }); + const rslt = [[2, 2, 2, 3], + [3, 4, 11, 11], + [5, 6, 7, 8]] + + const newDf = df.cumMax() as DataFrame + assert.deepEqual(newDf.values, rslt); + }); + it("cumMax axis 0 works", function () { + const data = [[2, 1, 2, 3], [3, 4, 11, 9], [5, 6, 7, 8]]; + const column = ["A", "B", "C", "D"]; + const df = new DataFrame(data, { columns: column }); + const rslt = [[2, 1, 2, 3], + [3, 4, 11, 9], + [5, 6, 11, 9]] + + assert.deepEqual((df.cumMax({ axis: 0 }) as DataFrame).values, rslt); + }); + + it("cumMax works for axis 1 inplace", function () { + const data = [[2, 1, 2, 3], [3, 4, 11, 9], [5, 6, 7, 8]]; + const column = ["A", "B", "C", "D"]; + const df = new DataFrame(data, { columns: column }); + const rslt = [[2, 2, 2, 3], + [3, 4, 11, 11], + [5, 6, 7, 8]] + + df.cumMax({ inplace: true }) + assert.deepEqual(df.values, rslt); + }); + it("cumMax axis 0 works inplace", function () { + const data = [[2, 1, 2, 3], [3, 4, 11, 9], [5, 6, 7, 8]]; + const column = ["A", "B", "C", "D"]; + const df = new DataFrame(data, { columns: column }); + const rslt = [[2, 1, 2, 3], + [3, 4, 11, 9], + [5, 6, 11, 9]] + df.cumMax({ axis: 0, inplace: true }) + assert.deepEqual(df.values, rslt); + }); + }); + + + describe("query", function () { + + it("Get the DataFrame containing rows with the filtered column", function () { + const data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols }); + const query_df = df.query(df["B"].ge(5)) as DataFrame + const query_data = [[4, 5, 6], [20, 30, 40], [39, 89, 78]] + assert.deepEqual(query_df.values, query_data); + }); + it("Get the Dataframe containing rows with the filtered column in String values", function () { + const data = { "Abs": [20, 30, 47], "Count": [34, 4, 5], "country code": ["NG", "FR", "GH"] }; + const cols = ["Abs", "Count", "country code"]; + const df = new DataFrame(data, { columns: cols }); + const query_df = df.query(df["country code"].str.includes("NG")) as DataFrame + + const query_data = [[20, 34, "NG"]]; + assert.deepEqual(query_df.values, query_data); + }); + it("Get the Dataframe containing rows with the filtered column in String values inplace", function () { + const data = { "Abs": [20, 30, 47], "Count": [34, 4, 5], "country code": ["NG", "FR", "GH"] }; + const cols = ["Abs", "Count", "country code"]; + const df = new DataFrame(data, { columns: cols }); + df.query(df["country code"].eq("NG"), { inplace: true }); + const query_data = [[20, 34, "NG"]]; + assert.deepEqual(df.values, query_data); + }); + it("Confirms that query index are updated", function () { + + const data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols }); + const query_df = df.query(df["B"].ge(5)) as DataFrame + assert.deepEqual(query_df.index, [1, 2, 3]); + }); + + it("Confirms chaining boolean queries work", function () { + + const data = [[1, 2, 3], + [4, 5, 60], + [20, 30, 4], + [39, 89, 7]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols }); + + const query_df = df.query( + df["B"].ge(5).and(df["C"].lt(10)) + ) as DataFrame + const query_data = [[20, 30, 4], [39, 89, 7]]; + assert.deepEqual(query_df.values, query_data) + assert.deepEqual(query_df.index, [2, 3]); + }); + + it("Confirms chaining boolean queries work and returns empty DF", function () { + + const data = [[1, 2, 3], + [4, 5, 60], + [20, 30, 40], + [39, 89, 70]]; + const cols = ["A", "B", "C"]; + const df = new DataFrame(data, { columns: cols }); + + const query_df = df.query( + df["B"].ge(5).and(df["C"].lt(10)) + ) as DataFrame + assert.deepEqual(query_df.values, []); + assert.deepEqual(query_df.index, []); + }); + + it("Confirms that column names are not changed", function () { + + let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40], [39, 89, 78]]; + let cols = ["A", "B", "C"]; + let df = new DataFrame(data, { columns: cols }); + let df_query = df.query(df["B"].ge(5)); + assert.deepEqual(df_query.index, [1, 2, 3]); + assert.deepEqual(df_query.columns, ["A", "B", "C"]); + }); + + }); + + describe("cTypes", function () { + + it("Returns the correct dtype in a DataFrame", function () { + const data = [["boy", 1.2, 2, 3], ["girl", 4.32, 11, 9], ['4', 6.1, 7, 8]]; + const column = ["A", "B", "C", "D"]; + const df = new DataFrame(data, { columns: column }); + const rslt = ["string", "float32", "int32", "int32"] + assert.deepEqual(df.ctypes.values, rslt); + }); + }); + + describe("IO outputs", function () { + it("toExcel works", async function () { + const data = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] + const df: any = new DataFrame(data, { columns: ["a", "b", "c", "d"] }); + + const filePath = path.join(process.cwd(), "test", "samples", "test.xlsx"); + df.toExcel({ filePath }) + + const dfNew: any = await readExcel(filePath, {}); + assert.equal(fs.existsSync(filePath), true) + assert.deepEqual(dfNew.columns, [ + 'a', + 'b', + 'c', + 'd', + ]); + assert.deepEqual(dfNew.dtypes, [ + 'int32', 'int32', + 'int32', 'int32', + ]); + assert.deepEqual(dfNew.shape, [3, 4]) + }); + + it("toCSV works for specified seperator", async function () { + const data = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] + let df: any = new DataFrame(data, { columns: ["a", "b", "c", "d"] }); + assert.deepEqual(df.toCSV({ sep: "+" }), `a+b+c+d\n1+2+3+4\n5+6+7+8\n9+10+11+12\n`); + }); + it("toCSV write to local file works", async function () { + const data = [[1, 2, 3, "4"], [5, 6, 7, "8"], [9, 10, 11, "12"]] + let df: any = new DataFrame(data, { columns: ["a", "b", "c", "d"] }); + + const filePath = path.join(process.cwd(), "test", "samples", "test_write.csv"); + + df.toCSV({ sep: ",", filePath }); + assert.equal(fs.existsSync(filePath), true); + }); + it("toJSON works for row format", async function () { + const data = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] + const df: any = new DataFrame(data, { columns: ["a", "b", "c", "d"] }); + const expected: any = { + "a": [1, 5, 9], + "b": [2, 6, 10], + "c": [3, 7, 11], + "d": [4, 8, 12], + } + const json = df.toJSON({ format: "row" }) + assert.deepEqual(json, expected); + }); + it("toJSON writes file to local path", async function () { + const data = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] + const df: any = new DataFrame(data, { columns: ["a", "b", "c", "d"] }); + + const rowfilePath = path.join(process.cwd(), "test", "samples", "test_row_write.json"); + const colfilePath = path.join(process.cwd(), "test", "samples", "test_col_write.json"); + + df.toJSON({ format: "row", filePath: rowfilePath }) + df.toJSON({ format: "column", filePath: colfilePath }) + assert.equal(fs.existsSync(rowfilePath), true); + assert.equal(fs.existsSync(colfilePath), true); + }); + }) + + describe("getDummies", function () { + it("getDummies works on DataFrame", function () { + + const data = [[1, "dog", 1.0, "fat"], [3, "fog", 2.0, "good"], [4, "gof", 3.0, "best"]]; + const columns = ["A", "B", "C", "d"]; + const df = new DataFrame(data, { columns: columns }); + + const df1 = df.getDummies({ prefixSeparator: ["_", "#"], columns: ["A", "d"], prefix: "test" }) as DataFrame + const expectedColumns = ['B', 'C', 'test_1', 'test_3', 'test_4', 'test#fat', 'test#good', 'test#best'] + const expected = [['dog', 1.0, 1, 0, 0, 1, 0, 0], + ['fog', 2.0, 0, 1, 0, 0, 1, 0], + ['gof', 3.0, 0, 0, 1, 0, 0, 1]] + assert.deepEqual(df1.values, expected); + assert.deepEqual(df1.columns, expectedColumns); + + }); + it("Throw error if the prefix specified is not equal to the column specified", function () { + + const data = [[1, "dog", 1.0, "fat"], [3, "fog", 2.0, "good"], [4, "gof", 3.0, "best"]]; + const columns = ["A", "B", "C", "d"]; + const df = new DataFrame(data, { columns: columns }); + + assert.throws(function () { df.getDummies({ prefix: ["fg"], prefixSeparator: "_", columns: ["A", "d"] }); }, Error, + `ParamError: prefix and data array must be of the same length. If you need to use the same prefix, then pass a string param instead. e.g {prefix: "fg"}`); + + }); + it("replace column sepecified with prefix", function () { + + const data = [[1, "dog", 1.0, "fat"], [3, "fog", 2.0, "good"], [4, "gof", 3.0, "best"]]; + const columns = ["A", "B", "C", "d"]; + const df = new DataFrame(data, { columns: columns }); + + const df1 = df.getDummies({ prefix: ["F", "G"], prefixSeparator: "_", columns: ["A", "d"] }) as DataFrame + const expectedColumns = [ + 'B', 'C', + 'F_1', 'F_3', + 'F_4', 'G_fat', + 'G_good', 'G_best' + ]; + + const expected = [['dog', 1.0, 1, 0, 0, 1, 0, 0], + ['fog', 2.0, 0, 1, 0, 0, 1, 0], + ['gof', 3.0, 0, 0, 1, 0, 0, 1]] + + assert.deepEqual(df1.values, expected); + assert.deepEqual(df1.columns, expectedColumns); + + }); + + it("getDummies auto infers and encode columns with string dtype", function () { + + const data = [[1, "dog", 1.0, "fat"], [3, "fog", 2.0, "good"], [4, "gof", 3.0, "best"]]; + const columns = ["A", "B", "C", "d"]; + const df = new DataFrame(data, { columns: columns }); + + const df1 = df.getDummies({ prefixSeparator: "_" }) as DataFrame + const expectedColumns = [ + 'A', 'C', + 'B_dog', 'B_fog', + 'B_gof', 'd_fat', + 'd_good', 'd_best' + ]; + const expected = [ + [ + 1, 1, 1, 0, + 0, 1, 0, 0 + ], + [ + 3, 2, 0, 1, + 0, 0, 1, 0 + ], + [ + 4, 3, 0, 0, + 1, 0, 0, 1 + ] + ]; + assert.deepEqual(df1.values, expected); + assert.deepEqual(df1.columns, expectedColumns); + + }); + + it("should one hot encode all other columns", function () { + + const data = [[1, "dog", 1.0, "fat"], [3, "fog", 2.0, "good"], [4, "gof", 3.0, "best"]]; + const columns = ["A", "B", "C", "d"]; + const df = new DataFrame(data, { columns: columns }) + const rslt = [ + [1, 'dog', 1, 1, 0, 0], + [3, 'fog', 2, 0, 1, 0], + [4, 'gof', 3, 0, 0, 1] + ] + + assert.deepEqual((df.getDummies({ columns: ["d"] }) as DataFrame).values, rslt) + + }); + }); + + +}); diff --git a/src/danfojs-node/test/core/generic.test.ts b/src/danfojs-node/test/core/generic.test.ts new file mode 100644 index 00000000..ddd09a37 --- /dev/null +++ b/src/danfojs-node/test/core/generic.test.ts @@ -0,0 +1,421 @@ +import { assert } from "chai"; +import { describe, it } from "mocha"; +import { NDframe } from '../../dist/danfojs-node/src'; +import { tensor } from '@tensorflow/tfjs-node'; + + +describe("Generic (NDFrame)", function () { + describe("NDframe Created from Array", function () { + it("prints the shape of a 1D array", function () { + let data = [1, 2, 3, "Boy", "Girl"]; + let ndframe = new NDframe({ data, isSeries: true }); + assert.deepEqual(ndframe.shape, [5, 1]); + }); + it("prints the default assigned column name in a series", function () { + let data = ["Boy", 20, 25]; + let ndframe = new NDframe({ data, isSeries: true }); + assert.deepEqual(ndframe.columns, ["0"]); + }); + it("prints the assigned column name in a series", function () { + let data = ["Boy", 20, 25]; + let ndframe = new NDframe({ data, columns: ["Records"], isSeries: true }); + assert.deepEqual(ndframe.columns, ["Records"]); + }); + it("prints the shape of a 2D array", function () { + let data = [["Boy", 20], ["Girl", 25]]; + let ndframe = new NDframe({ data, isSeries: false }); + assert.deepEqual(ndframe.shape, [2, 2]); + }); + it("prints the default assigned column names in 2D frame", function () { + let data = [["Boy", 20], ["Girl", 25]]; + let ndframe = new NDframe({ data, isSeries: false }); + assert.deepEqual(ndframe.columns, ["0", "1"]); + }); + it("prints the assigned column names", function () { + let data = [["Boy", 20], ["Girl", 25]]; + let options = { "columns": ["Gender", "Age"], "isSeries": false }; + let ndframe = new NDframe({ data, ...options }); + assert.deepEqual(ndframe.columns, ["Gender", "Age"]); + }); + it("prints the size of a frame", function () { + let data = [["Boy", 20, 1], ["Girl", 25, 3]]; + let options = { "columns": ["Gender", "Age", "count"], "isSeries": false }; + let ndframe = new NDframe({ data, ...options }); + assert.deepEqual(ndframe.size, 6); + }); + it("prints the dimension of a frame", function () { + let data = [["Boy", 20, 1], ["Girl", 25, 3]]; + let options = { "columns": ["Gender", "Age", "count"], "isSeries": false }; + let ndframe = new NDframe({ data, ...options }); + assert.deepEqual(ndframe.ndim, 2); + }); + it("prints the values of a frame", function () { + let data = [[21, 20, 1], [20, 25, 3]]; + let ndframe = new NDframe({ data, isSeries: false }); + assert.deepEqual(ndframe.values, data); + }); + it("prints the values of a frame", function () { + let data = [[21, 20, 1], [20, 25, 3]]; + let ndframe = new NDframe({ data, isSeries: false }); + assert.deepEqual(ndframe.values, data); + }); + + it("Throws error on duplicate column name", function () { + let data = [[21, 20, 1], [20, 25, 3]]; + assert.throws(() => { + new NDframe({ data, isSeries: false, columns: ["A", "A", "C"] }), + Error, + "ColumnIndexError: Column index must contain unique values" + }); + }); + + it("Throws error on duplicate index", function () { + let data = [[21, 20, 1], [20, 25, 3]]; + assert.throws(() => { + new NDframe({ data, isSeries: false, index: [1, 1, 2] }), + Error, + "IndexError: Row index must contain unique values" + }); + }); + }) + + describe("NDframe Created from JavaScript Object", function () { + + it("prints the shape of a 2D frame created from an Object", function () { + let data = [{ alpha: "A", count: 1 }, { alpha: "B", count: 2 }, { alpha: "C", count: 3 }]; + let ndframe = new NDframe({ data, isSeries: false }); + assert.deepEqual(ndframe.shape, [3, 2]); + }); + it("prints the column names of frame created from an Object", function () { + let data = [{ alpha: "A", count: 1 }, { alpha: "B", count: 2 }, { alpha: "C", count: 3 }]; + let ndframe = new NDframe({ data, isSeries: false }); + assert.deepEqual(ndframe.columns, ["alpha", "count"]); + }); + it("prints the shape of a 1D frame created from an Object", function () { + let data = [{ alpha: "A", count: 1 }]; + let ndframe = new NDframe({ data, isSeries: false }); + assert.deepEqual(ndframe.shape, [1, 2]); + }); + + it("prints the size of a frame created from an Object", function () { + let data = [{ alpha: "A", count: 1 }, { alpha: "B", count: 2 }, { alpha: "C", count: 3 }]; + let ndframe = new NDframe({ data, isSeries: false }); + assert.deepEqual(ndframe.size, 6); + }); + it("prints the dimension of a frame created from an Object", function () { + let data = [{ alpha: "A", count: 1 }, { alpha: "B", count: 2 }]; + let ndframe = new NDframe({ data, isSeries: false }); + assert.deepEqual(ndframe.ndim, 2); + }); + it("prints the values of a frame created from an Object", function () { + let data = [{ alpha: "A", count: 1 }, { alpha: "B", count: 2 }]; + let ndframe = new NDframe({ data, isSeries: false }); + assert.deepEqual(ndframe.values as any, [["A", 1], ["B", 2]]); + }); + it("prints the values of a frame created from an Object with undefined values", function () { + let data = [{ alpha: "A", count: undefined }, { alpha: undefined, count: 2 }]; + let ndframe = new NDframe({ data, isSeries: false }); + assert.deepEqual(ndframe.values as any, [["A", undefined], [undefined, 2]]); + }); + + it("prints the values of a frame created from an Object with NaN values", function () { + let data = [{ alpha: "A", count: NaN }, { alpha: NaN, count: 2 }]; + let ndframe = new NDframe({ data, isSeries: false }); + assert.deepEqual(ndframe.values as any, [["A", NaN], [NaN, 2]]); + }); + // it("NDframe created from json takes key position into consideration", function () { + // let json_data = [{ A: "A", B: "B", C: "C" }, + // { A: "A", B: "B", C: "C" }, + // { C: "C", B: "B", A: "A" }, + // { A: "A", C: "C", B: "B" }]; + + // let output = [ + // [ + // 'A', + // 'B', + // 'C' + // ], + // [ + // 'A', + // 'B', + // 'C' + // ], + // [ + // 'A', + // 'B', + // 'C' + // ], + // [ + // 'A', + // 'B', + // 'C' + // ] + // ]; + // let ndframe = new NDframe({ data: json_data, isSeries: false }); + // assert.deepEqual(ndframe.values, output); + // }); + + // it("NDframe created from json sets value to NaN if not present", function () { + // let json_data = [{ A: "A", B: "B", C: "C" }, + // { A: "A", B: "B", C: "C" }, + // { C: "C", B: "B", A: "A" }, + // { A: "A", C: "C" }]; + + // let output = [ + // [ + // 'A', + // 'B', + // 'C' + // ], + // [ + // 'A', + // 'B', + // 'C' + // ], + // [ + // 'A', + // 'B', + // 'C' + // ], + // [ + // 'A', + // 'B', + // NaN + // ] + // ]; + // let ndframe = new NDframe({ data: json_data, isSeries: false }); + // assert.deepEqual(ndframe.values, output); + // }); + + }); + + describe("Replacing row data", function () { + it("retrieves the col data after row data is replaced in a DataFrame", function () { + let data = { alpha: ["A", "B"], count: [1, 2] }; + let ndframe = new NDframe({ data, isSeries: false }); + ndframe.$setValues([["A", 20], ["D", 211]]) + assert.deepEqual(ndframe.values, [["A", 20], ["D", 211]]); + + }); + it("Correct dtypes is inferred after row data is replaced in a DataFrame", function () { + let data = { alpha: ["A", "B"], count: [1, 2] }; + let ndframe = new NDframe({ data, isSeries: false }); + ndframe.$setValues([[20, 20], [11.4, 211]]) + assert.deepEqual(ndframe.dtypes, ["float32", "int32"]); + + }); + it("Throws row length error on invalid data length in DataFrame", function () { + let data = { alpha: ["A", "B"], count: [1, 2] }; + let ndframe = new NDframe({ data, isSeries: false }); + assert.throws( + () => { + ndframe.$setValues([[20, 20], [11.4, 211], [11.4, 211]]) + }, + Error, + "Row data length mismatch. You provided data with length 3 but Ndframe has row of lenght 2" + ); + }); + it("Throws column length error on invalid data length in DataFrame", function () { + let data = { alpha: ["A", "B"], count: [1, 2] }; + let ndframe = new NDframe({ data, isSeries: false }); + assert.throws( + () => { + ndframe.$setValues([[20, 211], [20, 20, 11.4, 211]]) + }, + Error, + "Column data length mismatch. You provided data with length 2 but Ndframe has column of lenght 2" + ); + }); + it("retrieves the col data after row data is replaced in a Series", function () { + let data = ["A", "B", 1, 2] + let ndframe = new NDframe({ data, isSeries: true }); + ndframe.$setValues(["A", "D", "E", "O"]) + assert.deepEqual(ndframe.values, ["A", "D", "E", "O"]); + + }); + it("Correct dtypes is inferred after updating values", function () { + let data = ["A", "D", "E", "O"] + let ndframe = new NDframe({ data, isSeries: true }); + ndframe.$setValues([1, 2, 3, 4]) + assert.deepEqual(ndframe.values, [1, 2, 3, 4]); + assert.deepEqual(ndframe.dtypes[0], "int32"); + }); + it("Correct dtypes is inferred after updating values in low memory mode", function () { + let data = ["A", "D", "E", "O"] + let ndframe = new NDframe({ data, isSeries: true, config: { lowMemoryMode: true } }); + ndframe.$setValues([1, 2, 3, 4]) + assert.deepEqual(ndframe.values, [1, 2, 3, 4]); + assert.deepEqual(ndframe.dtypes[0], "int32"); + }); + it("Throws row length error on invalid data length", function () { + let data = ["A", "D", "E", "O"] + let ndframe = new NDframe({ data, isSeries: true, config: { lowMemoryMode: true } }); + assert.throws( + () => { + ndframe.$setValues([1, 2, 3, 4, 1, 3]) + }, + Error, + "Row data length mismatch. You provided data with length 6 but Ndframe has row of lenght 4" + ); + }); + + }) + + describe("NDframe Created from a Tensor", function () { + + it("prints the shape of a 2D frame created from a 2D tensor", function () { + let data = tensor([1, 2, 3, 4]); + let ndframe = new NDframe({ data, isSeries: true }); + assert.deepEqual(ndframe.ndim, 1); + assert.deepEqual(ndframe.values, [1, 2, 3, 4]); + + }); + it("prints the shape of a 2D frame created from a 1D tensor", function () { + let data = tensor([[2, 3, 4], [4, 5, 6]]); + let ndframe = new NDframe({ data, columns: ["alpha", "count", "sum"], isSeries: false }); + assert.deepEqual(ndframe.columns, ["alpha", "count", "sum"]); + }); + + }); + + describe("index", function () { + it("Returns the index of an NDframe", function () { + let data = [{ alpha: "A", count: 1 }, { alpha: "B", count: 2 }, { alpha: "C", count: 3 }]; + let df = new NDframe({ data, isSeries: false }); + assert.deepEqual(df.index, [0, 1, 2]); + }); + it("Returns the index of an NDframe created from an Array", function () { + let data = [[12, 2, 20], [90, 5, 23], [45, 56, 70], [9, 10, 19]]; + let df = new NDframe({ data, isSeries: false }); + assert.deepEqual(df.index, [0, 1, 2, 3]); + }); + }); + + describe("NDframe Created from JavaScript Object of Arrays", function () { + + it("retrieves the col data created from OA ", function () { + let data = { alpha: ["A", "B", "C", "D"], count: [1, 2, 3, 4] }; + let ndframe = new NDframe({ data, isSeries: false }); + assert.deepEqual(ndframe.values, [['A', 1], ['B', 2], ['C', 3], ['D', 4]]); + }); + it("retrieves the data 2", function () { + let data = { alpha: ["A", "B", "C", "D"], count: [1, 2, 3, 4], sum: [20.3, 30.456, 40.90, 90.1] }; + let ndframe = new NDframe({ data, isSeries: false }); + let res = [ + ['A', 1, 20.3], + ['B', 2, 30.456], + ['C', 3, 40.9], + ['D', 4, 90.1] + ] + assert.deepEqual(ndframe.values, res); + }); + it("retrieves the row data created from OA ", function () { + let data = { alpha: ["A", "B"], count: [1, 2] }; + let ndframe = new NDframe({ data, isSeries: false }); + assert.deepEqual(ndframe.values, [["A", 1], ["B", 2]]); + }); + }); + + describe("setIndex", function () { + it("sets the index of an NDframe", function () { + let data = [{ alpha: "A", count: 1 }, { alpha: "B", count: 2 }, { alpha: "C", count: 3 }]; + let df = new NDframe({ data, isSeries: false }); + df.$setIndex(["A", "B", "C"]); + assert.deepEqual(df.index, ["A", "B", "C"]); + }); + it("Returns the index of an NDframe created from an Array", function () { + let data = [[12, 2, 20], [90, 5, 23], [45, 56, 70], [9, 10, 19]]; + let df = new NDframe({ data, isSeries: false }); + df.$setIndex([10, 20, 30, 40]); + assert.deepEqual(df.index, [10, 20, 30, 40]); + }); + }); + + + describe("dtype", function () { + it("Returns int dtype set during creation of 1DFrame (Series) from an Object", function () { + let data = [1, 2, 3, 4, 5, 6, 7, 8, 9]; + let options = { dtypes: ['int32'], isSeries: true }; + let ndframe = new NDframe({ data, ...options }); + assert.deepEqual(ndframe.dtypes, ['int32']); + }); + + it("Returns string dtype set during creation of 1DFrame (Series) from an Array", function () { + let data = ["Alice", "Yemi", "Rising", "Mark"]; + let options = { dtypes: ['string'], isSeries: true }; + let ndframe = new NDframe({ data, ...options }); + assert.deepEqual(ndframe.dtypes, ["string"]); + }); + + it("Returns string dtype automatically inferred from 1DFrame (Series)", function () { + let data = ["Alice", "Yemi", "Rising", "Mark"]; + let options = { columns: ['Names'], isSeries: true }; + let ndframe = new NDframe({ data, ...options }); + assert.deepEqual(ndframe.dtypes, ["string"]); + }); + + it("Returns int dtype automatically inferred from 1DFrame (Series)", function () { + let data = [20, 30, 20, 20]; + let options = { columns: ['Size'], isSeries: true }; + let ndframe = new NDframe({ data, ...options }); + assert.deepEqual(ndframe.dtypes, ["int32"]); + }); + it("Returns float dtype automatically inferred from 1DFrame (Series)", function () { + let data = [20.1, 30.4, 20.2, 4.23, 20.1]; + let options = { columns: ['Size'], isSeries: true }; + let ndframe = new NDframe({ data, ...options }); + assert.deepEqual(ndframe.dtypes, ["float32"]); + }); + + + it("Returns dtype set during creation of 2DFrame from an Object", function () { + let data = [{ alpha: "A", count: 1 }, { alpha: "B", count: 2 }]; + let options = { dtypes: ['string', 'int32'] }; + let ndframe = new NDframe({ data, ...options, isSeries: false }); + assert.deepEqual(ndframe.dtypes, ['string', 'int32']); + }); + it("Returns dtype set during creation of 2DFrame from an Array", function () { + let data = [["Alice", 2, 3.0], ["Boy", 5, 6.1], ["Girl", 30, 40], [39, 89, 78.2]]; + let cols = ["Name", "Count", "Score"]; + let options = { columns: cols, dtypes: ['string', 'int32', 'float32'] }; + let ndframe = new NDframe({ data, ...options, isSeries: false }); + assert.deepEqual(ndframe.dtypes, ["string", "int32", "float32"]); + }); + + it("Returns dtype automatically inferred from 2DFrame", function () { + let data = [["Alice", 2, 3.1], ["Boy", 5, 6.1], ["Girl", 30, 40.2], [39, 89, 78.2]]; + let cols = ["Name", "Count", "Score"]; + let options = { columns: cols, isSeries: false }; + let ndframe = new NDframe({ data, ...options }); + assert.deepEqual(ndframe.dtypes, ["string", "int32", "float32"]); + }); + + }); + + describe("Empty NDFrame", function () { + it("Can successfully create an empty NDframe from empty array", function () { + let data: any = []; + let sf = new NDframe({ data, isSeries: false }); + assert.deepEqual(sf.shape, [0, 0]); + assert.deepEqual(sf.columns, []); + assert.deepEqual(sf.dtypes, []); + assert.deepEqual(sf.values, []); + }); + it("Can successfully create an empty NDframe from undefined data", function () { + let data = undefined; + let sf = new NDframe({ data, isSeries: true }); + assert.deepEqual(sf.shape, [0, 0]); + assert.deepEqual(sf.columns, []); + assert.deepEqual(sf.dtypes, []); + assert.deepEqual(sf.values, []); + }); + + it("Can successfully create an empty NDframe", function () { + let sf = new NDframe({ data: [], isSeries: true }); + assert.deepEqual(sf.shape, [0, 0]); + assert.deepEqual(sf.columns, []); + assert.deepEqual(sf.dtypes, []); + assert.deepEqual(sf.values, []); + }); + }); +}); diff --git a/src/danfojs-node/test/core/indexing.test.ts b/src/danfojs-node/test/core/indexing.test.ts new file mode 100644 index 00000000..70327449 --- /dev/null +++ b/src/danfojs-node/test/core/indexing.test.ts @@ -0,0 +1,416 @@ +import { assert } from "chai"; +import { describe, it } from "mocha"; +import { DataFrame, Series } from "../../dist/danfojs-node/src"; + +describe("Iloc and Loc based Indexing", function () { + describe("Iloc Index", function () { + it("throw error for wrong row index value", function () { + let data = [1, 2, 34, 5, 6]; + let df = new Series(data); + + assert.throws(function () { df.iloc(0 as any) }, Error, `rows parameter must be an Array. For example: rows: [1,2] or rows: ["0:10"]`); + }); + + it("throw error for wrong string split parameter", function () { + let data = [1, 2, 34, 5, 6]; + let df = new Series(data); + assert.throws(function () { df.iloc(["0;1"]); }, Error, `Invalid row split parameter: If using row split string, it must be of the form; rows: ["start:end"]`); + }); + + it("throw error for wrong string split value", function () { + let data = [1, 2, 34, 5, 6]; + let df = new Series(data); + assert.throws(function () { df.iloc(["0:a"]); }, Error, `Invalid row split parameter. Split parameter must be a number`); + }); + + it("throw error for string split values greater than 2", function () { + let data = [1, 2, 34, 5, 6]; + let df = new Series(data); + assert.throws(function () { df.iloc(["0:4:2"]); }, Error, `Invalid row split parameter: If using row split string, it must be of the form; rows: ["start:end"]`); + }); + + it("throw error for row index larger than series length", function () { + let data = [1, 2, 34, 5, 6]; + + let df = new Series(data); + assert.throws(function () { df.iloc([0, 8]); }, Error, "Invalid row parameter: Specified index 8 cannot be bigger than index length 5"); + }); + + it("throw error for non-numeric row index", function () { + let data = [1, 2, 34, 5, 6]; + let df = new Series(data); + assert.throws(function () { df.iloc([0, "4"]); }, Error, "Invalid row parameter: row index 4 must be a number"); + }); + + + it("df.iloc works for rows:[0,1]", function () { + let data = [1, 2, 34, 5, 6]; + + let df = new Series(data); + + let sf = df.iloc([0, 1]); + let expected = [1, 2]; + + assert.deepEqual(sf.values, expected); + }); + + it("df.iloc works for rows:[1]", function () { + let data = [1, 2, 34, 5, 6]; + + let df = new Series(data); + + let sf = df.iloc([1]); + let expected = [2]; + + assert.deepEqual(sf.values, expected); + }); + + it("correct index is returned for df.iloc rows:[1, 2]", function () { + let data = [1, 2, 34, 5, 6]; + let df = new Series(data, { index: ["a", "b", "c", "d", "e"] }); + + let sf = df.iloc([1, 4]); + let expected = ["b", "e"]; + + assert.deepEqual(sf.index, expected); + }); + + + it("row slice with string param works [0:2]", function () { + let data = [1, 2, 4, 5, 6, 20, 30, 40, 39, 89, 78]; + let df = new Series(data); + + let sf = df.iloc(["0:2"]); + let expected = [1, 2]; + + assert.deepEqual(sf.values, expected); + + }); + it("row slice with string param works [1:]", function () { + let data = [1, 2, 34, 5, 620, 30, 409, 89, 78]; + let df = new Series(data); + + let sf = df.iloc(["1:"]); + let expected = [2, 34, 5, 620, 30, 409, 89, 78]; + + assert.deepEqual(sf.values, expected); + + }); + it("row slice with string param works [:2]", function () { + let data = [1, 2, 34, 5, 6, 20, 30, 40, 39, 89, 78]; + let df = new Series(data); + let sf = df.iloc([":2"]); + let expected = [1, 2]; + + assert.deepEqual(sf.values, expected); + + }); + it("row slice with string param works [:]", function () { + let data = [1, 2, 3, 5, 20, 30, 4039, 89, 78]; + let df = new Series(data); + let expected = [1, 2, 3, 5, 20, 30, 4039, 89, 78]; + + let sf = df.iloc([":"]); + assert.deepEqual(sf.values, expected); + + }); + + it(`throw error for wrong start index size ["0:20"]`, function () { + let data = [1, 2, 34, 5, 6]; + let df = new Series(data); + assert.throws(function () { df.iloc(["0:20"]); }, Error, `row slice [end] index cannot be bigger than 5`); + }); + + it(`throw error for wrong start index size ["-1:2"]`, function () { + let data = [1, 2, 34, 5, 6]; + let df = new Series(data); + assert.throws(function () { df.iloc(["-1:2"]); }, Error, `row slice [start] index cannot be less than 0`); + }); + + it("check data after column slice", function () { + let data = [1, 2, 34, 5, 620, 30, 4039, 89, 78]; + let df = new Series(data); + + let sf = df.iloc([0, 1, 6]); + let expected = [1, 2, 4039]; + assert.deepEqual(sf.values, expected); + + }); + + it("iloc works for boolean array", function () { + let data = [1, 2, 34, 5, 620]; + let df = new Series(data); + + let sf = df.iloc([true, true, false, true, false]); + let expected = [1, 2, 5]; + assert.deepEqual(sf.values, expected); + + }); + + it("iloc works for boolean array (all true)", function () { + let data = [1, 2, 34, 5, 620]; + let df = new Series(data); + + let sf = df.iloc([true, true, true, true, true]); + let expected = [1, 2, 34, 5, 620]; + assert.deepEqual(sf.values, expected); + + }); + it("iloc works for boolean array (all false)", function () { + let data = [1, 2, 34, 5, 620]; + let df = new Series(data); + + let sf = df.iloc([false, false, false, false, false]); + let expected: any = []; + assert.deepEqual(sf.values, expected); + + }); + + it("boolean iloc works for DataFrame", function () { + const data = { + "Name": ["Apples", "Mango", "Banana", "Pear"], + "Count": [21, 5, 30, 10], + "Price": [200, 300, 40, 250] + }; + const df = new DataFrame(data); + const subDf = df.iloc({ rows: [false, false, false, true] }); + const result = [['Pear', 10, 250]]; + assert.deepEqual(subDf.values, result); + + }); + + + it("boolean iloc works for DataFrame with specified columns", function () { + const data = { + "Name": ["Apples", "Mango", "Banana", "Pear"], + "Count": [21, 5, 30, 10], + "Price": [200, 300, 40, 250] + }; + const df = new DataFrame(data); + const subDf = df.iloc({ rows: [false, false, false, true], columns: [0, 2] }); + const result = [['Pear', 250]]; + assert.deepEqual(subDf.values, result); + + }); + + it("boolean iloc works for DataFrame with Series bool selector", function () { + const data = { + "Name": ["Apples", "Mango", "Banana", "Pear"], + "Count": [21, 5, 30, 10], + "Price": [200, 300, 40, 250] + }; + const df = new DataFrame(data); + const subDf = df.iloc({ rows: df["Count"].gt(10), columns: [0, 2] }); + const result = [['Apples', 200], ['Banana', 40]] + assert.deepEqual(subDf.values, result); + + }); + }) + + describe("Loc Index", function () { + it("throw error for wrong row index value", function () { + let data = [1, 2, 34, 5, 6]; + let df = new Series(data); + assert.throws(function () { df.loc(0 as any) }, Error, `rows parameter must be an Array. For example: rows: [1,2] or rows: ["0:10"]`); + }); + + it("throw error for wrong string split parameter", function () { + let data = [1, 2, 34, 5, 6]; + let df = new Series(data); + assert.throws(function () { df.loc(["a;1"]); }, Error, `IndexError: Specified index (a;1) not found`); + }); + it(`throw error for wrong string split parameter ("0;1")`, function () { + let data = [1, 2, 34, 5, 6]; + let df = new Series(data); + assert.throws(function () { df.loc(["0;1"]); }, Error, `IndexError: Specified index (0;1) not found`); + }); + + it("throw error for wrong string split end value", function () { + let data = [1, 2, 34, 5, 6]; + let df = new Series(data); + assert.throws(function () { df.loc(["0:a"]); }, Error, `IndexError: Specified end index not found`); + }); + + it("throw error for string split values greater than 2", function () { + let data = [1, 2, 34, 5, 6]; + let df = new Series(data); + assert.throws(function () { df.loc(["0:4:2"]); }, Error, `Invalid row split parameter: If using row split string, it must be of the form; rows: ["start:end"]`); + }); + + it("throw error for row index larger than series length", function () { + let data = [1, 2, 34, 5, 6]; + + let df = new Series(data); + assert.throws(function () { df.loc([0, 8]); }, Error, "IndexError: Specified index (8) not found"); + }); + + it("throw error for non-numeric row index not found", function () { + let data = [1, 2, 34, 5, 6]; + let df = new Series(data); + assert.throws(function () { df.loc([0, "4"]); }, Error, "IndexError: Specified index (4) not found"); + }); + + + it("df.iloc works for rows:[0,1]", function () { + let data = [1, 2, 34, 5, 6]; + + let df = new Series(data); + + let sf = df.loc([0, 1]); + let expected = [1, 2]; + + assert.deepEqual(sf.values, expected); + }); + + it("df.iloc works for rows:[1]", function () { + let data = [1, 2, 34, 5, 6]; + + let df = new Series(data); + + let sf = df.loc([1]); + let expected = [2]; + + assert.deepEqual(sf.values, expected); + }); + + it("correct index is returned for df.loc([1, 4])", function () { + let data = [1, 2, 34, 5, 6]; + let df = new Series(data, { index: ["a", "b", "c", "d", "e"] }); + + let sf = df.loc(["b", "e"]); + let expected = ["b", "e"]; + assert.deepEqual(sf.index, expected); + }); + + it("row slice with string param works [0:2]", function () { + let data = [1, 2, 4, 5, 6, 20, 30, 40, 39, 89, 78]; + let df = new Series(data); + + let sf = df.loc(["0:2"]); + let expected = [1, 2]; + + assert.deepEqual(sf.values, expected); + + }); + it("row slice with string param works [1:]", function () { + let data = [1, 2, 34, 5, 620, 30, 409, 89, 78]; + let df = new Series(data); + + let sf = df.loc(["1:"]); + let expected = [2, 34, 5, 620, 30, 409, 89, 78]; + + assert.deepEqual(sf.values, expected); + + }); + it("row slice with string param works [:2]", function () { + let data = [1, 2, 34, 5, 6, 20, 30, 40, 39, 89, 78]; + let df = new Series(data); + let sf = df.loc([":2"]); + let expected = [1, 2]; + + assert.deepEqual(sf.values, expected); + + }); + it("row slice with string param works [:]", function () { + let data = [1, 2, 3, 5, 20, 30, 4039, 89, 78]; + let df = new Series(data); + let expected = [1, 2, 3, 5, 20, 30, 4039, 89, 78]; + + let sf = df.loc([":"]); + assert.deepEqual(sf.values, expected); + + }); + + it(`throw error for wrong start index size ["0:20"]`, function () { + let data = [1, 2, 34, 5, 6]; + let df = new Series(data); + assert.throws(function () { df.iloc(["0:20"]); }, Error, `row slice [end] index cannot be bigger than 5`); + }); + + it(`throw error for wrong start index size ["-1:2"]`, function () { + let data = [1, 2, 34, 5, 6]; + let df = new Series(data); + assert.throws(function () { df.iloc(["-1:2"]); }, Error, `row slice [start] index cannot be less than 0`); + }); + + it("check data after column slice", function () { + let data = [1, 2, 34, 5, 620, 30, 4039, 89, 78]; + let df = new Series(data); + + let sf = df.loc([0, 1, 6]); + let expected = [1, 2, 4039]; + assert.deepEqual(sf.values, expected); + + }); + + it("loc works for boolean array", function () { + let data = [1, 2, 34, 5, 620]; + let df = new Series(data); + + let sf = df.loc([true, true, false, true, false]); + let expected = [1, 2, 5]; + assert.deepEqual(sf.values, expected); + + }); + + it("loc works for boolean array (all true)", function () { + let data = [1, 2, 34, 5, 620]; + let df = new Series(data); + + let sf = df.loc([true, true, true, true, true]); + let expected = [1, 2, 34, 5, 620]; + assert.deepEqual(sf.values, expected); + + }); + it("loc works for boolean array (all false)", function () { + let data = [1, 2, 34, 5, 620]; + let df = new Series(data); + + let sf = df.loc([false, false, false, false, false]); + let expected: any = []; + assert.deepEqual(sf.values, expected); + + }); + + it("boolean loc works for DataFrame", function () { + const data = { + "Name": ["Apples", "Mango", "Banana", "Pear"], + "Count": [21, 5, 30, 10], + "Price": [200, 300, 40, 250] + }; + const df = new DataFrame(data); + const subDf = df.loc({ rows: [false, false, false, true] }); + const result = [['Pear', 10, 250]]; + assert.deepEqual(subDf.values, result); + + }); + + + it("boolean loc works for DataFrame with specified columns", function () { + const data = { + "Name": ["Apples", "Mango", "Banana", "Pear"], + "Count": [21, 5, 30, 10], + "Price": [200, 300, 40, 250] + }; + const df = new DataFrame(data); + const subDf = df.loc({ rows: [false, false, false, true], columns: ["Name", "Price"] }); + const result = [['Pear', 250]]; + assert.deepEqual(subDf.values, result); + + }); + + it("boolean loc works for DataFrame with Series bool selector", function () { + const data = { + "Name": ["Apples", "Mango", "Banana", "Pear"], + "Count": [21, 5, 30, 10], + "Price": [200, 300, 40, 250] + }; + const df = new DataFrame(data); + const subDf = df.loc({ rows: df["Count"].gt(10), columns: ["Name", "Price"] }); + const result = [['Apples', 200], ['Banana', 40]] + assert.deepEqual(subDf.values, result); + + }); + }) + +}); \ No newline at end of file diff --git a/src/danfojs-node/test/core/series.test.ts b/src/danfojs-node/test/core/series.test.ts new file mode 100644 index 00000000..9ec573cc --- /dev/null +++ b/src/danfojs-node/test/core/series.test.ts @@ -0,0 +1,1594 @@ +import { assert, expect } from "chai"; +import { describe, it } from "mocha"; +import { Series } from "../../dist/danfojs-node/src"; + +describe("Series Functions", () => { + + describe("head", function () { + it("Gets the first 2 rows in a Series", function () { + const data = [1, 2, 3, 4, 5, 620, 30, 40, 39, 89, 78]; + const cols = ["A"]; + const sf = new Series(data, { columns: cols }); + assert.deepEqual(sf.head(2).values, [1, 2]); + assert.deepEqual(sf.head(5).values, [1, 2, 3, 4, 5]); + }); + it("throw error when row specified is greater than values", function () { + const data = ["Boy", "Girl", "Man", "Woman", "Tall"]; + const cols = ["Items"]; + const sf = new Series(data, { columns: cols }); + assert.throws(function () { assert.deepEqual(sf.head(10).values, data) }, Error, `row slice [end] index cannot be bigger than 5`); + }); + + it("throw error when row specified is less than 0", function () { + const data = [1, 2, 3, 4, 5, 620, 30, 40, 39, 89, 78]; + const sf = new Series(data); + assert.throws(function () { assert.deepEqual(sf.head(-1).values, data) }, Error, `ParamError: end must be greater than start`); + }); + }); + + + describe("tail", function () { + it("Prints the last n rows of a Series", function () { + const data = [1, 2, 3, 4, 5, 620, 30, 40, 39, 89, 78]; + const sf = new Series(data); + assert.deepEqual(sf.tail(2).values, [89, 78]); + assert.deepEqual(sf.tail(4).values, [40, 39, 89, 78]); + + }); + it("throw error when row specified is greater than values", function () { + const data = ["Boy", "Girl", "Man", "Woman", "Tall"]; + const cols = ["Items"]; + const sf = new Series(data, { columns: cols }); + assert.throws(function () { assert.deepEqual(sf.tail(15).values, data) }, Error, `row slice [start] index cannot be less than 0`); + }); + + it("throw error when row specified is less than 0", function () { + const data = ["Boy", "Girl", "Man", "Woman", "Tall"]; + const cols = ["Items"]; + const sf = new Series(data, { columns: cols }); + assert.throws(function () { assert.deepEqual(sf.tail(-1).values, data) }, Error, `ParamError: end must be greater than start`); + }); + }); + + describe("sample", function () { + it("Samples n number of random elements from a DataFrame", async function () { + const data = [1, 2, 3, 4, 5, 620, 30, 40, 39, 89, 78]; + const sf = new Series(data); + assert.deepEqual((await sf.sample(7)).values.length, 7); + }); + it("Return all values if n of sample -1", async function () { + const data = [1, 2, 3, 4, 5, 620, 30, 40, 39, 89, 78]; + const sf = new Series(data); + assert.deepEqual((await sf.sample(-1)).values.length, data.length); + }); + + it("Throw error if n is greater than lenght of Series", async function () { + const data = [1, 2, 3, 4, 5, 620, 30, 40, 39, 89, 78]; + const sf = new Series(data); + try { + await sf.sample(100); + } catch (e: any) { + expect(e.message).to.eql('Sample size n cannot be bigger than size of dataset'); + } + }); + }); + + describe("add", function () { + it("Return Addition of series with another series", function () { + const data = [1, 2, 3, 4, 5, 6]; + const data2 = [30, 40, 39, 1, 2, 1]; + const sf = new Series(data); + const sf2 = new Series(data2); + assert.deepEqual((sf.add(sf2) as Series).values, [31, 42, 42, 5, 7, 7]); + }); + it("Return Addition of series with a single value (Broadcasting)", function () { + const data = [1, 2, 3, 4, 5]; + const sf = new Series(data); + assert.deepEqual((sf.add(1) as Series).values, [2, 3, 4, 5, 6]); + }); + it("Return Addition of series with another series inplace", function () { + const data = [1, 2, 3, 4, 5, 6]; + const data2 = [30, 40, 39, 1, 2, 1]; + const sf = new Series(data); + const sf2 = new Series(data2); + sf.add(sf2, { inplace: true }) + assert.deepEqual(sf.values, [31, 42, 42, 5, 7, 7]); + }); + it("Return Addition of series with a single value (Broadcasting) inplace", function () { + const data = [1, 2, 3, 4, 5]; + const sf = new Series(data); + sf.add(1, { inplace: true }) + assert.deepEqual(sf.values, [2, 3, 4, 5, 6]); + }); + it("Dtype is properly updated on addition of series with a single float value inplace", function () { + const data = [1, 2, 3, 4, 5]; + const sf = new Series(data); + sf.add(1.23, { inplace: true }) + assert.deepEqual(sf.dtypes[0], "float32"); + assert.deepEqual(sf.values, [2.23, 3.23, 4.23, 5.23, 6.23]); + }); + it("Add works properly when using tfjs add function", function () { + const data = [1, 2, 3, 4, 5]; + const sf = new Series(data); + sf.add(1.23, { inplace: true }) + assert.deepEqual(sf.dtypes[0], "float32"); + assert.deepEqual(sf.values, [2.23, 3.23, 4.23, 5.23, 6.23]); + }); + it("Add works properly when using tfjs add function on Series", function () { + const data = [1, 2, 3, 4, 5]; + const sf = new Series(data); + const sf2 = new Series([1.23, 1.23, 1.23, 1.23, 1.23]); + sf.add(sf2, { inplace: true }) + assert.deepEqual(sf.values, [2.23, 3.23, 4.23, 5.23, 6.23]); + }); + it("Throws type error on addition of string type", function () { + const data = [1, 2, 3, 4]; + const data2 = ["A", "B", "C", "d"]; + const sf = new Series(data); + const sf2 = new Series(data2); + assert.throws( + () => { + sf.add(sf2); + }, + Error, + "DtypeError: String data type does not support add operation" + ); + }); + it("Throws length error if series lenght mixmatch", function () { + const data = [1, 2, 3, 4] + const data2 = [1, 2, 3, 4, 5, 6] + const sf = new Series(data) + const sf2 = new Series(data2) + assert.throws(() => { sf.add(sf2) }, Error, "Row length mismatch. Length of other (6), must be the same as Ndframe (4)") + }) + }); + + describe("sub", function () { + it("Return Subtraction of series with another series", function () { + const data1 = [30, 40, 39, 1, 2, 1]; + const data2 = [1, 2, 3, 4, 5, 6]; + const sf1 = new Series(data1); + const sf2 = new Series(data2); + assert.deepEqual((sf1.sub(sf2) as Series).values, [29, 38, 36, -3, -3, -5]); + }); + it("Return Subtraction of series with a single value (Broadcasting)", function () { + const data = [1, 2, 3, 4, 5]; + const sf = new Series(data); + assert.deepEqual((sf.sub(1) as Series).values, [0, 1, 2, 3, 4]); + }); + it("Throws type error on Subtraction of string type", function () { + const data = [1, 2, 3, 4]; + const data2 = ["A", "B", "C", "d"]; + const sf = new Series(data); + const sf2 = new Series(data2); + assert.throws( + () => { + sf.sub(sf2); + }, + Error, + "DtypeError: String data type does not support sub operation" + ); + }); + it("Throws length error if series lenght mixmatch", function () { + const data = [1, 2, 3, 4] + const data2 = [1, 2, 3, 4, 5, 6] + const sf = new Series(data) + const sf2 = new Series(data2) + assert.throws(() => { sf.sub(sf2) }, Error, "Row length mismatch. Length of other (6), must be the same as Ndframe (4)") + }) + }); + + describe("mul", function () { + it("Return multiplication of series with another series", function () { + const data1 = [30, 40, 3, 5]; + const data2 = [1, 2, 3, 4]; + const sf1 = new Series(data1); + const sf2 = new Series(data2); + assert.deepEqual((sf1.mul(sf2) as Series).values, [30, 80, 9, 20]); + }); + it("Return multiplication of series with a single value (Broadcasting)", function () { + const data = [1, 2, 3, 4, 5]; + const sf = new Series(data); + assert.deepEqual((sf.mul(1) as Series).values, [1, 2, 3, 4, 5]); + }); + it("Throws type error on multiplication of string type", function () { + const data = [1, 2, 3, 4] + const data2 = ["A", "B", "C", "d"] + const sf = new Series(data) + const sf2 = new Series(data2) + assert.throws(() => { sf.mul(sf2) }, Error, "DtypeError: String data type does not support mul operation") + }) + it("Throws length error if series lenght mixmatch", function () { + const data = [1, 2, 3, 4] + const data2 = [1, 2, 3, 4, 5, 6] + const sf = new Series(data) + const sf2 = new Series(data2) + assert.throws(() => { sf.mul(sf2) }, Error, "ParamError: Row length mismatch. Length of other (6), must be the same as Ndframe (4)") + }) + }); + + + describe("div", function () { + it("Return float division of series with another series", function () { + const data1 = [30, 40, 3, 5]; + const data2 = [1, 2, 3, 4]; + const sf1 = new Series(data1); + const sf2 = new Series(data2); + assert.deepEqual((sf1.div(sf2) as Series).values, [30, 20, 1, 1.25]); + }); + it("Return integer division of series with another series", function () { + const data1 = [30, 40, 3, 5]; + const data2 = [1, 2, 3, 4]; + const sf1 = new Series(data1); + const sf2 = new Series(data2); + assert.deepEqual((sf1.div(sf2) as Series).values, [30, 20, 1, 1.25]); + }); + it("Return division of series with a single value (Broadcasting)", function () { + const data = [10, 2, 3, 90]; + const sf = new Series(data); + assert.deepEqual((sf.div(2) as Series).values, [5, 1, 1.5, 45]); + }); + it("Throws type error on division of string type", function () { + const data = [1, 2, 3, 4] + const data2 = ["A", "B", "C", "d"] + const sf = new Series(data) + const sf2 = new Series(data2) + assert.throws(() => { sf.div(sf2) }, Error, `DtypeError: String data type does not support div operation`) + }) + it("Throws length error if series lenght mixmatch", function () { + const data = [1, 2, 3, 4] + const data2 = [1, 2, 3, 4, 5, 6] + const sf = new Series(data) + const sf2 = new Series(data2) + assert.throws(() => { sf.div(sf2) }, Error, "ParamError: Row length mismatch. Length of other (6), must be the same as Ndframe (4)") + }) + }); + + describe("pow", function () { + it("Return Exponetial power of series with another series", function () { + const data1 = [2, 3, 4, 5]; + const data2 = [1, 2, 3, 0]; + const sf1 = new Series(data1); + const sf2 = new Series(data2); + assert.deepEqual((sf1.pow(sf2) as Series).values, [2, 9, 64, 1]); + }); + it("Return Exponetial power of series with a single value (Broadcasting)", function () { + const data = [1, 2, 3, 4, 5]; + const sf = new Series(data); + assert.deepEqual((sf.pow(2) as Series).values, [1, 4, 9, 16, 25]); + }); + }); + + describe("mod", function () { + it("Return modulo of series with another float series", function () { + const data1 = [2, 30, 4, 5]; + const data2 = [1.1, 2.2, 3.3, 2.4]; + const sf1 = new Series(data1); + const sf2 = new Series(data2); + const expected = [ + 0.8999999999999999, + 1.3999999999999977, + 0.7000000000000002, + 0.20000000000000018 + ]; + assert.deepEqual((sf1.mod(sf2) as Series).values, expected); + }); + it("Return modulo of series with another int series", function () { + const data1 = [2, 30, 4, 5]; + const data2 = [1, 2, 3, 1]; + const sf1 = new Series(data1); + const sf2 = new Series(data2); + assert.deepEqual((sf1.mod(sf2) as Series).values, [0, 0, 1, 0]); + }); + it("Return modulo power of series with a single value (Broadcasting)", function () { + const data = [1, 2, 3, 4, 5]; + const sf = new Series(data); + assert.deepEqual((sf.mod(2) as Series).values, [1, 0, 1, 0, 1]); + }); + }); + + describe("toString", function () { + it("Prints a series to the console", async function () { + const data = [1, 2, 3, 4, 5, 620, 30, 40, 39, 89, 78]; + const sf = new Series(data); + sf.print() + }); + it("Prints a series to the console", async function () { + const data = ["This is a long text group and I want it to print in full", + "This is a long text group and I want it to print in full"]; + const sf = new Series(data); + sf.print() + }); + }); + + describe("Empty Series", function () { + it("Can successfully create an empty Series from empty array", function () { + const data: any = []; + const sf = new Series(data); + assert.deepEqual(sf.shape, [0, 0]); + assert.deepEqual(sf.columns, []); + assert.deepEqual(sf.dtypes, []); + assert.deepEqual(sf.values, []); + }); + + it("Can successfully create an empty Series", function () { + const sf = new Series(); + assert.deepEqual(sf.shape, [0, 0]); + assert.deepEqual(sf.columns, []); + assert.deepEqual(sf.dtypes, []); + assert.deepEqual(sf.values, []); + }); + }); + + describe("mean", function () { + it("Computes the mean of elements in a int series", function () { + const data1 = [30, 40, 3, 5, NaN]; + const sf = new Series(data1); + assert.deepEqual(sf.mean(), 19.5); + }); + it("Computes the mean of elements in a int series", function () { + const data1 = [30, 40, 3, 5, NaN]; + const sf = new Series(data1); + assert.deepEqual(sf.mean(), 19.5); + }); + it("Computes the mean of elements in a float series", function () { + const data1 = [30.1, 40.2, 3.1, 5.1]; + const sf = new Series(data1); + assert.deepEqual(sf.mean(), 19.625); + }); + it("Computes the mean of elements in a float series with NaN", function () { + const data1 = [30.1, 40.2, 3.1, 5.1, NaN]; + const sf = new Series(data1); + assert.deepEqual(sf.mean(), 19.625); + }); + it("Computes the mean of a boolean series", function () { + const data1 = [true, false, false, false, true, true, false, true]; + const sf = new Series(data1); + assert.deepEqual(sf.mean(), 0.5); + }); + it("Throws error if dtype is string", function () { + const data1 = ["boy", "girl", "Man"]; + const sf = new Series(data1); + assert.throws( + () => { + sf.mean(); + }, + Error, + "DtypeError: String data type does not support mean operation" + ); + }); + }); + + describe("median", function () { + it("Computes the median value of elements across int Series", function () { + const data1 = [30, 40, 3, 5]; + const sf = new Series(data1); + assert.deepEqual(sf.median(), 17.5); + }); + it("Computes the median value of elements across float Series", function () { + const data1 = [30.1, 40.2, 3.1, 5.1, NaN]; + const sf = new Series(data1); + assert.deepEqual(sf.median(), 17.6); + }); + }); + + describe("sum", function () { + it("Sum values of a Int Series", function () { + const data1 = [30, 40, 3, 5, 5, 5, 5, 5, 3, 3, 3, 21, 3]; + const sf = new Series(data1); + assert.deepEqual(sf.sum(), 131); + }); + it("Sum values of a Float Series", function () { + const data1 = [30.1, 3.1, 40.2, 3.1, 5.1]; + const sf = new Series(data1); + assert.deepEqual(sf.sum(), 81.6); + }); + it("Sum values of a bool Series", function () { + const data1 = [true, true, false, false, false]; + const sf = new Series(data1); + assert.deepEqual(sf.sum(), 2); + }); + it("Sum values a Series with missing values", function () { + const data1 = [11, NaN, 2, 2]; + const sf = new Series(data1); + assert.deepEqual(sf.sum(), 15); + }); + }); + + describe("mode", function () { + it("Computes the multi-modal values of a Series", function () { + const data1 = [30, 40, 3, 5, 5, 5, 5, 5, 3, 3, 3, 21, 3]; + const sf = new Series(data1); + assert.deepEqual(sf.mode(), [5, 3]); + }); + it("Computes the modal value of a Series", function () { + const data1 = [30.1, 3.1, 40.2, 3.1, 5.1]; + const sf = new Series(data1); + assert.deepEqual(sf.mode(), [3.1]); + }); + }); + + describe("min", function () { + it("Returns the single smallest elementin a Series", function () { + const data = [30, 40, 3, 5]; + const sf = new Series(data); + assert.deepEqual(sf.min(), 3); + }); + it("Computes the minimum of elements across an float Series", function () { + const data1 = [30.1, 40.2, 3.12, 5.1]; + const sf = new Series(data1, { dtypes: ["float32"] }); + assert.deepEqual(Number(sf.min().toFixed(2)), 3.12); + }); + }); + + describe("max", function () { + it("Computes the maximum of elements across dimensions of a Series", function () { + const data1 = [30, 40, 3, 5]; + const sf = new Series(data1); + assert.deepEqual(sf.max(), 40); + }); + it("Return sum of float values in a series", function () { + const data1 = [30.1, 40.21, 3.1, 5.1]; + const sf = new Series(data1); + assert.deepEqual(Number(sf.max().toFixed(2)), 40.21); + }); + it("Throws error on addition of string Series", function () { + const data1 = ["boy", "gitl", "woman", "man"]; + const sf = new Series(data1); + assert.throws( + () => { + sf.max(); + }, + Error, + "DtypeError: String data type does not support max operation" + ); + }); + }); + + describe("count", function () { + it("Returns the count of non NaN values in a string Series", function () { + const data = ["boy", "gitl", "woman", NaN]; + const sf = new Series(data); + assert.deepEqual(sf.count(), 3); + }); + it("Returns the count of values in a string Series without NaN", function () { + const data = ["boy", "gitl", "woman", "Man"]; + const sf = new Series(data); + assert.deepEqual(sf.count(), 4); + }); + it("Returns the count of non NaN values in a int Series", function () { + const data = [20, 30, NaN, 2, NaN, 30, 21]; + const sf = new Series(data); + assert.deepEqual(sf.count(), 5); + }); + it("Returns the count of non NaN values in a float Series", function () { + const data = [20.1, 30.4, NaN, 2.1, NaN, 30.0, 21.3]; + const sf = new Series(data); + assert.deepEqual(sf.count(), 5); + }); + }); + + describe("std", function () { + it("Computes the standard of elements in a int series", function () { + const data1 = [30, 40, 3, 5]; + const sf = new Series(data1); + assert.deepEqual(sf.std(), 18.375708603116962); + }); + it("Computes the standard deviation of elements in a float series", function () { + const data1 = [30.1, 40.2, 3.1, 5.1]; + const sf = new Series(data1); + assert.deepEqual(sf.std(), 18.412925713566906); + }); + it("Computes the standard deviation of elements in a float series with missing values", function () { + const data1 = [30, 40, 3, 5, undefined]; + const sf = new Series(data1); + assert.deepEqual(sf.std(), 18.375708603116962); + }); + }); + + describe("var", function () { + it("Computes the variance of elements in a int series", function () { + const data1 = [30, 40, 3, 5]; + const sf = new Series(data1); + assert.deepEqual(sf.var(), 337.6666666666667); + }); + it("Computes the variance of elements in a float series", function () { + const data1 = [30.1, 40.2, 3.1, 5.1]; + const sf = new Series(data1); + assert.deepEqual(sf.var(), 339.03583333333336); + }); + it("Computes the variance of elements in a int series with missing values", function () { + const data1 = [30, undefined, 40, 3, 5]; + const sf = new Series(data1); + assert.deepEqual(sf.var(), 337.6666666666667); + }); + }); + + describe("round", function () { + it("Rounds elements in a Series to nearest whole number", function () { + const data1 = [30.21091, 40.190901, 3.564, 5.0212]; + const sf = new Series(data1); + assert.deepEqual((sf.round() as Series).values, [30.2, 40.2, 3.6, 5]); + }); + it("Rounds elements in a Series to 1dp", function () { + const data1 = [30.21091, 40.190901, 3.564, 5.0212]; + const sf = new Series(data1); + assert.deepEqual((sf.round(1) as Series).values, [30.2, 40.2, 3.6, 5.0]); + }); + it("Rounds elements in a Series to 2dp", function () { + const data1 = [30.2191, 40.190901, 3.564, 5.0212]; + const sf = new Series(data1); + assert.deepEqual((sf.round(2) as Series).values, [30.22, 40.19, 3.56, 5.02]); + }); + + it("Rounds elements in a Series to 2dp inplace", function () { + const data1 = [30.2191, 40.190901, 3.564, 5.0212]; + const sf = new Series(data1); + sf.round(2, { inplace: true }) + assert.deepEqual(sf.values, [30.22, 40.19, 3.56, 5.02]); + }); + + it("Rounds elements in a Series with missing values to 2dp", function () { + const data1 = [30.2191, undefined, 3.564, NaN]; + const sf = new Series(data1); + sf.round(2, { inplace: true }) + assert.deepEqual(sf.values as number[], [30.22, undefined, 3.56, NaN]); + }); + + }); + + describe("maximum", function () { + it("Returns the maximum of two series", function () { + const data1 = [30, 40, 3, 5]; + const data2 = [10, 41, 2, 0]; + const sf1 = new Series(data1); + const sf2 = new Series(data2); + assert.deepEqual(sf1.maximum(sf2).values, [30, 41, 3, 5]); + }); + it("Returns the maximum of series and Array", function () { + const data1 = [30, 40, 3, 5]; + const data2 = [10, 41, 2, 0]; + const sf1 = new Series(data1); + assert.deepEqual(sf1.maximum([10, 41, 2, 0]).values, [30, 41, 3, 5]); + }); + it("Returns the maximum of series and scalar", function () { + const data1 = [30, 40, 3, 5]; + const sf1 = new Series(data1); + assert.deepEqual(sf1.maximum(10).values, [30, 40, 10, 10]); + }); + it("Throws error on checking maximum of incompatible Series", function () { + const data1 = [30, 40, 3, 5]; + const data2 = [10, 41, 2]; + const sf1 = new Series(data1); + const sf2 = new Series(data2); + assert.throws( + () => { + sf1.maximum(sf2); + }, + Error, + "ParamError: Row length mismatch. Length of other (3), must be the same as Ndframe (4)" + ); + }); + }); + + describe("minimum", function () { + it("Returns the minimum of two series", function () { + const data1 = [30, 40, 3, 5]; + const data2 = [10, 41, 2, 0]; + const sf1 = new Series(data1); + const sf2 = new Series(data2); + assert.deepEqual(sf1.minimum(sf2).values, [10, 40, 2, 0]); + }); + it("Returns the minimum of series and array", function () { + const data1 = [30, 40, 3, 5]; + const data2 = [10, 41, 2, 0]; + const sf1 = new Series(data1); + assert.deepEqual(sf1.minimum(data2).values, [10, 40, 2, 0]); + }); + it("Returns the minimum of two series", function () { + const data1 = [30, 40, 3, 5]; + const sf1 = new Series(data1); + assert.deepEqual(sf1.minimum(10).values, [10, 10, 3, 5]); + }); + }); + + describe("isNa", function () { + it("Return a boolean same-sized object indicating if string Series contain NaN", function () { + const data1 = [NaN, undefined, "girl", "Man"]; + const sf = new Series(data1); + assert.deepEqual(sf.isNa().values, [true, true, false, false]); + }); + it("Return a boolean same-sized object indicating if float Series values are NaN", function () { + const data1 = [30.21091, NaN, 3.564, undefined]; + const sf = new Series(data1); + assert.deepEqual(sf.isNa().values, [false, true, false, true]); + }); + it("Return a boolean same-sized object indicating if int Series values are NaN", function () { + const data1 = [30, 40, 3, 5, null, undefined]; + const sf = new Series(data1); + assert.deepEqual(sf.isNa().values, [ + false, + false, + false, + false, + true, + true + ]); + }); + }); + + describe("fillNa", function () { + it("replace all NaN value with specified value", function () { + const data = [NaN, 1, 2, 33, 4, NaN, 5, 6, 7, 8]; + const sf = new Series(data); + const sfVal = [-999, 1, 2, 33, 4, -999, 5, 6, 7, 8]; + sf.fillNa(-999, { inplace: true }); + assert.deepEqual(sf.values, sfVal); + }); + it("replace all NaN value in string Series with specified value", function () { + const data = [NaN, "boy", null, "hey", "Man", undefined]; + const sf = new Series(data); + const sfVal = ["filled", "boy", "filled", "hey", "Man", "filled"]; + const sfFill = sf.fillNa("filled"); + assert.deepEqual((sfFill as Series).values, sfVal); + }); + it("Data is in right format after filling", function () { + const data = [NaN, "boy", NaN, "hey", "Man", undefined]; + const sf = new Series(data); + const sfVal = ["filled", "boy", "filled", "hey", "Man", "filled"]; + const sfFill = sf.fillNa("filled"); + assert.deepEqual((sfFill as Series).values, sfVal); + }); + }); + + describe("sortValues", function () { + it("Sort values in a Series in ascending order (not inplace)", function () { + const sf = new Series([20, 30, 1, 2, 4, 57, 89, 0, 4]); + const result = [0, 1, 2, 4, 4, 20, 30, 57, 89]; + const sortedSf = sf.sortValues(); + assert.deepEqual((sortedSf as Series).values, result); + + }); + it("confirms that sortValues in ascending order does not happen inplace", function () { + const sf = new Series([20, 30, 1, 2, 4, 57, 89, 0, 4]); + const result = [0, 1, 2, 4, 4, 20, 30, 57, 89]; + const expectedIndex = [7, 2, 3, 8, 4, 0, 1, 5, 6]; + sf.sortValues({ ascending: true, inplace: true }); + assert.deepEqual(sf.values, result); + assert.deepEqual(sf.index, expectedIndex); + }); + it("Sort values in a Series in Descending order", function () { + const sf = new Series([20, 30, 1, 2, 4, 57, 89, 0, 4]); + const result = [89, 57, 30, 20, 4, 4, 2, 1, 0]; + const sortedSf = sf.sortValues({ascending: false}); + assert.deepEqual((sortedSf as Series).values, result); + }); + it("confirms that sortValues in descending order happens inplace", function () { + const sf = new Series([20, 30, 1, 2, 4, 57, 89, 0, 4]); + const result = [89, 57, 30, 20, 4, 4, 2, 1, 0]; + sf.sortValues({ ascending: false, inplace: true }); + assert.deepEqual(sf.values, result); + }); + it("Confirms that series index is sorted in ascending order (not in inplace)", function () { + const sf = new Series([20, 30, 1, 2, 4, 57, 89, 0, 4]); + const result = [7, 2, 3, 8, 4, 0, 1, 5, 6]; + const sortedSf = sf.sortValues() as Series + assert.deepEqual(sortedSf.index, result); + }); + it("Confirms that series index is sorted in descending order (not in inplace)", function () { + const sf = new Series([20, 30, 1, 2, 4, 57, 89, 0, 4]); + const result = [6, 5, 1, 0, 4, 8, 3, 2, 7]; + const sortedSf = sf.sortValues({ ascending: false}) as Series + assert.deepEqual(sortedSf.index, result); + }); + it("Sort string values in a Series", function () { + const sf = new Series(["boy", "zebra", "girl", "man"]); + const result = ["boy", "girl", "man", "zebra"]; + const sortedSf = sf.sortValues({ ascending: false}) as Series + assert.deepEqual(sortedSf.values, result); + }); + }); + + describe("describe", function () { + it("Computes the descriptive statistics on an int Series", function () { + const data1 = [10, 45, 56, 25, 23, 20, 10]; + const sf = new Series(data1) + assert.deepEqual((sf.describe().round() as Series).values, [ + 7, + 27, + 17.4, + 10, + 23, + 56, + 302 + ]); + }); + it("Computes the descriptive statistics on a float Series", function () { + const data1 = [30.1, 40.2, 3.1, 5.1]; + const sf = new Series(data1); + assert.deepEqual((sf.describe().round() as Series).values, [ + 4, + 19.6, + 18.4, + 3.1, + 17.6, + 40.2, + 339 + ]); + }); + it("Computes the descriptive statistics on a float Series", function () { + const data1 = [30.1, 40.2, 3.1, 5.1]; + const sf = new Series(data1); + assert.deepEqual(sf.describe().index, [ + "count", + "mean", + "std", + "min", + "median", + "max", + "variance" + ]); + }); + }); + + describe("resetIndex", function () { + it("resets the index of a Series", function () { + const data = [ + { alpha: "A", count: 1 }, + { alpha: "B", count: 2 }, + { alpha: "C", count: 3 } + ]; + const df = new Series(data, { index: ["one", "two", "three"] }); + const dfReset = df.resetIndex() as Series + assert.deepEqual(dfReset.index, [0, 1, 2]); + }); + it("Reset the index of a Series created from an Array", function () { + const data = [1, 2, 3, 4, 5, 6]; + const df = new Series(data, { index: ["one", "two", "three", "four", "five", "six"] }); + const dfNew = df.resetIndex() as Series + assert.deepEqual(dfNew.index, [0, 1, 2, 3, 4, 5]); + }); + it("checks that the original series changed after reseting new index inplace", function () { + const data = [ + { index: "A", count: 1 }, + { index: "B", count: 2 }, + { index: "C", count: 3 } + ]; + const df = new Series(data, { index: ["one", "two", "three"] }); + df.resetIndex({ inplace: true }); + assert.deepEqual(df.index, [0, 1, 2]); + }); + }); + + describe("setIndex", function () { + it("sets the index of an Series", function () { + const data = [ + { alpha: "A", count: 1 }, + { alpha: "B", count: 2 }, + { alpha: "C", count: 3 } + ]; + const df = new Series(data); + const dfNew = df.setIndex(["one", "two", "three"]) as Series + assert.deepEqual(dfNew.index, ["one", "two", "three"]); + assert.notDeepEqual(df.index, dfNew.index); + }); + it("checks that the original series is not modified after setting new index not-inplace", function () { + const data = [ + { alpha: "A", count: 1 }, + { alpha: "B", count: 2 }, + { alpha: "C", count: 3 } + ]; + const df = new Series(data); + const dfNew = df.setIndex(["one", "two", "three"]) as Series + assert.notDeepEqual(df.index, dfNew.index); + }); + it("sets the index of an Series inplace", function () { + const data = [12, 2, 20, 50]; + const df = new Series(data); + df.setIndex(["one", "two", "three", "four"], { inplace: true }); + assert.deepEqual(df.index, ["one", "two", "three", "four"]); + }); + it("Throws index not found error", function () { + const data = [12, 2, 20, 50]; + const df = new Series(data); + assert.throws(() => { + // @ts-ignore: + df.setIndex() + }, Error, + "Param Error: Must specify index array" + ) + }); + }); + + describe("Map", function () { + it("map series element to object keys", function () { + const sf = new Series([1, 2, 3, 4]); + const map = { 1: "ok", 2: "okie", 3: "frit", 4: "gop" }; + const rslt = ["ok", "okie", "frit", "gop"]; + assert.deepEqual((sf.map(map) as Series).values, rslt); + }); + it("map series element to object keys inplace", function () { + const sf = new Series([1, 2, 3, 4]); + const map = { 1: "ok", 2: "okie", 3: "frit", 4: "gop" }; + const rslt = ["ok", "okie", "frit", "gop"]; + sf.map(map, { inplace: true }) + assert.deepEqual(sf.values, rslt); + }); + it("map series element to incomplete object keys", function () { + const sf = new Series([1, 2, 3, 4]); + const map = { 1: "ok", 2: "okie", 4: "gop" }; + const rslt = ["ok", "okie", 3, "gop"]; + sf.map(map, { inplace: true }) + assert.deepEqual(sf.values, rslt); + }); + it("map series element to a function statement", function () { + const sf = new Series([1, 2, 3, 4]); + const func_map = (x: any) => { + return x + 1; + }; + const rslt = [2, 3, 4, 5]; + assert.deepEqual((sf.map(func_map) as Series).values, rslt); + }); + + it("map series element to a function statement inplace", function () { + const sf = new Series([1, 2, 3, 4]); + const func_map = (x: any) => { + return x + 1; + }; + const rslt = [2, 3, 4, 5]; + sf.map(func_map, { inplace: true }) + assert.deepEqual(sf.values, rslt); + }); + + it("map passes along the index", function () { + const sf = new Series([ 1, 2, 3, 4 ]); + const func_map = (x: any, i: any) => { + return x + i; + }; + const rslt = [ 1, 3, 5, 7 ]; + sf.map(func_map, { inplace: true }); + assert.deepEqual(sf.values, rslt); + }); + }); + + describe("Apply", function () { + it("apply a function to a series element", function () { + const sf = new Series([1, 2, 3, 4, 5, 6, 7, 8]); + const applyFunc = (x: any) => { + return x + x; + }; + + const rslt = [2, 4, 6, 8, 10, 12, 14, 16]; + assert.deepEqual((sf.apply(applyFunc) as Series).values, rslt); + }); + + it("apply a function to a series element inplace", function () { + const sf = new Series([1, 2, 3, 4, 5, 6, 7, 8]); + const applyFunc = (x: any) => { + return x + x; + }; + + const rslt = [2, 4, 6, 8, 10, 12, 14, 16]; + sf.apply(applyFunc, { inplace: true }) + assert.deepEqual(sf.values, rslt); + }); + }); + + describe("unique", function () { + it("returns the unique values in a Series of type int", function () { + const sf = new Series([1, 2, 3, 4, 5, 6, 7, 8, 1, 1, 22, 8, 5, 5, 5]); + const expected = [1, 2, 3, 4, 5, 6, 7, 8, 22]; + assert.deepEqual(sf.unique().values, expected); + }); + it("returns the unique values in a Series of type string", function () { + const sf = new Series(["a", "a", "b", "c", "c", "d", "e", "d", "d", "e"]); + const expected = ["a", "b", "c", "d", "e"]; + assert.deepEqual(sf.unique().values, expected); + }); + it("returns the unique values in a Series of type string", function () { + const sf = new Series(["a", "a", "b", "c", "c", "d", "e", "d", "d", "e"]); + const expected = ["a", "b", "c", "d", "e"]; + assert.deepEqual(sf.unique().values, expected); + }); + }); + + describe("nUnique", function () { + it("returns the number of unique values in a Series of type string", function () { + const sf = new Series(["a", "a", "b", "c", "c", "d", "e", "d", "d", "e"]); + assert.deepEqual(sf.nUnique(), 5); + }); + it("returns the number of unique values in a Series of type int32", function () { + const sf = new Series([1, 2, 3, 4, 3, 4, 3, 50, 4, 4, 4, 1]); + assert.deepEqual(sf.nUnique(), 5); + }); + }); + + describe("valueCounts", function () { + it("returns the unique values and their counts in a Series of type int", function () { + const sf = new Series([1, 2, 3, 4, 5, 6, 7, 8, 1, 1, 22, 8, 5, 5, 5]); + const expectedIndex = [1, 2, 3, 4, 5, 6, 7, 8, 22]; + const expectedVals = [3, 1, 1, 1, 4, 1, 1, 2, 1]; + assert.deepEqual(sf.valueCounts().values, expectedVals); + assert.deepEqual(sf.valueCounts().index, expectedIndex); + }); + it("returns the unique values and their counts in a Series of type string", function () { + const sf = new Series(["a", "a", "b", "c", "c", "d", "e", "d", "d", "e"]); + const expectedVals = [2, 1, 2, 3, 2]; + const expectedIndex = ["a", "b", "c", "d", "e"]; + assert.deepEqual(sf.valueCounts().values, expectedVals); + assert.deepEqual(sf.valueCounts().index, expectedIndex); + }); + it("returns the unique values and their counts in a Series of type boolean", function () { + const sf = new Series([true, false, false, true, true]); + const expectedVals = [3, 2]; + const expectedIndex = ["true", "false"]; + assert.deepEqual(sf.valueCounts().values, expectedVals); + assert.deepEqual(sf.valueCounts().index, expectedIndex); + }); + }); + + describe("abs", function () { + it("Returns the absolute values in Series", function () { + const data1 = [-10, 45, 56, -25, 23, -20, 10]; + const sf = new Series(data1); + assert.deepEqual((sf.abs() as Series).values, [10, 45, 56, 25, 23, 20, 10]); + }); + it("Computes the descriptive statistics on a float Series", function () { + const data1 = [-30.1, -40.2, -3.1, -5.1]; + const sf = new Series(data1); + assert.deepEqual((sf.abs() as Series).values, [30.1, 40.2, 3.1, 5.1]); + }); + }); + + describe("cumSum", function () { + it("Return cumulative sum over a Series", function () { + const data1 = [10, 45, 56, 25, 23, 20, 10]; + const sf = new Series(data1); + assert.deepEqual((sf.cumSum() as Series).values, [10, 55, 111, 136, 159, 179, 189]); + }); + it("Return cumulative sum over a Series inplace", function () { + const data1 = [10, 45, 56, 25, 23, 20, 10]; + const sf = new Series(data1); + sf.cumSum({ inplace: true }); + assert.deepEqual(sf.values, [10, 55, 111, 136, 159, 179, 189]); + }); + }); + + describe("cumMax", function () { + it("Return cumulative maximum over a Series", function () { + const data1 = [10, 45, 56, 25, 23, 20, 10]; + const sf = new Series(data1); + assert.deepEqual((sf.cumMax() as Series).values, [10, 45, 56, 56, 56, 56, 56]); + }); + it("Return cumulative maximum over a Series inplace", function () { + const data1 = [10, 45, 56, 25, 23, 20, 10]; + const sf = new Series(data1); + sf.cumMax({ inplace: true }); + assert.deepEqual(sf.values, [10, 45, 56, 56, 56, 56, 56]); + }); + }); + + describe("cumMin", function () { + it("Return cumulative minimum over a Series", function () { + const data1 = [10, 45, 56, 25, 23, 20, 10]; + const sf = new Series(data1); + assert.deepEqual((sf.cumMin() as Series).values, [10, 10, 10, 10, 10, 10, 10]); + }); + }); + + describe("cumProd", function () { + it("Return cumulative product over a Series", function () { + const data1 = [1, 2, 10, 3, 12, 14, 1]; + const sf = new Series(data1); + const rslt = [1, 2, 20, 60, 720, 10080, 10080]; + assert.deepEqual((sf.cumProd() as Series).values, rslt); + }); + }); + + describe("lt", function () { + it("Return Less than of series and other series (element-wise)", function () { + const data1 = [10, 45, 56, 25, 23, 20, 10]; + const data2 = [100, 450, 590, 5, 25, 2, 0]; + + const sf = new Series(data1); + const sf2 = new Series(data2); + const expected = [true, true, true, false, true, false, false]; + assert.deepEqual(sf.lt(sf2).values, expected); + }); + + it("Return Less than of series scalar (element-wise)", function () { + const data1 = [10, 45, 56, 25, 23, 20, 10]; + const sf = new Series(data1); + const expected = [true, false, false, true, true, true, true]; + assert.deepEqual(sf.lt(30).values, expected); + }); + + it("Correct index is returned after operation", function () { + const data1 = [true, true, true, false, false]; + const data2 = [true, false, true, true, false]; + const sf = new Series(data1, { index: ["one", "two", "three", "four", "five"] }); + + const expected = ["one", "two", "three", "four", "five"]; + assert.deepEqual(sf.lt(data2).index, expected); + }); + }); + + describe("gt", function () { + it("Return Greater than of series and other series (element-wise)", function () { + const data1 = [10, 45, 56, 25, 23, 20, 10]; + const data2 = [100, 450, 590, 5, 25, 2, 0]; + + const sf = new Series(data1); + const sf2 = new Series(data2); + const expected = [false, false, false, true, false, true, true]; + assert.deepEqual(sf.gt(sf2).values, expected); + }); + + it("Return Greater than of series scalar (element-wise)", function () { + const data1 = [10, 45, 56, 25, 23, 20, 10]; + const sf = new Series(data1); + const expected = [false, true, true, false, false, false, false]; + assert.deepEqual(sf.gt(30).values, expected); + }); + + it("Correct index is returned after operation", function () { + const data1 = [true, true, true, false, false]; + const data2 = [true, false, true, true, false]; + const sf = new Series(data1, { index: ["one", "two", "three", "four", "five"] }); + + const expected = ["one", "two", "three", "four", "five"]; + assert.deepEqual(sf.and(data2).index, expected); + }); + }); + + describe("le", function () { + it("Return Less than or Equal to of series and other series (element-wise)", function () { + const data1 = [10, 45, 56, 25, 23, 20, 10]; + const data2 = [100, 450, 590, 5, 25, 2, 0]; + + const sf = new Series(data1); + const sf2 = new Series(data2); + const expected = [true, true, true, false, true, false, false]; + assert.deepEqual(sf.le(sf2).values, expected); + }); + + it("Return Less than or Equal to of series scalar (element-wise)", function () { + const data1 = [10, 45, 56, 25, 23, 20, 10]; + const sf = new Series(data1); + const expected = [true, false, false, true, true, true, true]; + assert.deepEqual(sf.le(30).values, expected); + }); + }); + + describe("ge", function () { + it("Return Greater than or Equal to of series and other series (element-wise)", function () { + const data1 = [10, 45, 56, 25, 23, 20, 10]; + const data2 = [100, 450, 56, 5, 25, 20, 0]; + + const sf = new Series(data1); + const sf2 = new Series(data2); + const expected = [false, false, true, true, false, true, true]; + assert.deepEqual(sf.ge(sf2).values, expected); + }); + + it("Return Greater than or Equal to of series scalar (element-wise)", function () { + const data1 = [30, 45, 56, 25, 23, 20, 10]; + const sf = new Series(data1); + const expected = [true, true, true, false, false, false, false]; + assert.deepEqual(sf.ge(30).values, expected); + }); + }); + + describe("ne", function () { + it("Return Not Equal to of series and other series (element-wise)", function () { + const data1 = [10, 45, 56, 25, 23, 20, 10]; + const data2 = [10, 450, 56, 5, 25, 2, 0]; + + const sf = new Series(data1); + const sf2 = new Series(data2); + const expected = [false, true, false, true, true, true, true]; + assert.deepEqual(sf.ne(sf2).values, expected); + }); + + it("Return Not Equal to of series scalar (element-wise)", function () { + const data1 = [10, 30, 56, 30, 23, 20, 10]; + const sf = new Series(data1); + const expected = [true, false, true, false, true, true, true]; + assert.deepEqual(sf.ne(30).values, expected); + }); + }); + + describe("eq", function () { + it("Return Equal to of series and other series (element-wise)", function () { + const data1 = [10, 45, 56, 25, 23, 20, 10]; + const data2 = [100, 450, 590, 25, 25, 2, 0]; + + const sf = new Series(data1); + const sf2 = new Series(data2); + const expected = [false, false, false, true, false, false, false]; + assert.deepEqual(sf.eq(sf2).values, expected); + }); + + it("Return Equal to of series scalar (element-wise)", function () { + const data1 = [10, 45, 56, 25, 23, 20, 30]; + const sf = new Series(data1); + const expected = [false, false, false, false, false, false, true]; + assert.deepEqual(sf.eq(30).values, expected); + }); + }); + + describe("replace", function () { + it("Replace values with new value", function () { + const data1 = [10, 45, 56, 25, 23, 20, 10]; + const sf = new Series(data1); + const expected = [-50, 45, 56, 25, 23, 20, -50]; + const dfRep = sf.replace(10, -50) as Series + assert.deepEqual(dfRep.values, expected); + }); + + it("Replace values given in replace param with value (String type)", function () { + const data1 = ["A", "A", "A", "B", "B", "C", "C", "D"]; + const sf = new Series(data1); + const expected = ["boy", "boy", "boy", "B", "B", "C", "C", "D"]; + sf.replace("A", "boy", { inplace: true }); + assert.deepEqual(sf.values, expected); + }); + it("Replace values given in replace param with value (boolean type)", function () { + const data1 = [true, true, false, false]; + const sf = new Series(data1); + const expected = [false, false, false, false]; + sf.replace(true, false, { inplace: true }); + assert.deepEqual(sf.values, expected); + }); + // it("Throw error on wrong param passed", function () { + // const data1 = ["A", "A", "A", "B", "B", "C", "C", "D"]; + // const sf = new Series(data1); + // assert.throws( + // () => { + // sf.replace(null, "boy", { inplace: true }); + // }, + // Error, + // "Params Error: Must specify param 'oldValue' to replace" + // ); + // }); + }); + + describe("dropDuplicates", function () { + it("Return Series with duplicate values removed (Default, first values kept)", function () { + const data1 = [10, 45, 56, 10, 23, 20, 10, 10]; + const sf = new Series(data1); + const expected = [10, 45, 56, 23, 20]; + const expectedIndex = [0, 1, 2, 4, 5]; + const df_drop = sf.dropDuplicates() as Series + assert.deepEqual(df_drop.values, expected); + assert.deepEqual(df_drop.index, expectedIndex); + }); + + it("Return Series with duplicate values removed (last values kept)", function () { + const data1 = [10, 45, 56, 10, 23, 20, 10, 10]; + const sf = new Series(data1); + const expected = [45, 56, 23, 20, 10]; + const expectedIndex = [1, 2, 4, 5, 7]; + const df_drop = sf.dropDuplicates({ keep: "last" }) as Series + assert.deepEqual(df_drop.values, expected); + assert.deepEqual(df_drop.index, expectedIndex); + }); + + it("Return Series with duplicate values removed (String)", function () { + const data1 = ["A", "A", "A", "B", "B", "C", "C", "D"]; + const sf = new Series(data1); + const expected = ["A", "B", "C", "D"]; + const expectedIndex = [0, 3, 5, 7]; + sf.dropDuplicates({ keep: "first", inplace: true }); + assert.deepEqual(sf.values, expected); + assert.deepEqual(sf.index, expectedIndex); + }); + }); + + describe("dropNa", function () { + it("Return a new Series with missing values removed (Int)", function () { + const data1 = [10, 45, undefined, 10, 23, 20, undefined, 10]; + const sf = new Series(data1); + const expected = [10, 45, 10, 23, 20, 10]; + const expectedIndex = [0, 1, 3, 4, 5, 7]; + const sfDrop = sf.dropNa() as Series + assert.deepEqual(sfDrop.values, expected); + assert.deepEqual(sfDrop.index, expectedIndex); + assert.deepEqual(sfDrop.shape, [6, 1]); + }); + + it("Return a new Series with missing values removed (String)", function () { + const data1 = ["A", NaN, "A", "B", "B", NaN, "C", undefined]; + const sf = new Series(data1); + const expected = ["A", "A", "B", "B", "C"]; + const expectedIndex = [0, 2, 3, 4, 6]; + + sf.dropNa({ inplace: true }) as Series + assert.deepEqual(sf.values, expected); + assert.deepEqual(sf.index, expectedIndex); + assert.deepEqual(sf.shape, [5, 1]); + }); + }); + + describe("argSort", function () { + it("Return the integer indices that would sort the Series values", function () { + const data1 = [10, 45, 20, 10, 23, 20, 30, 11]; + const sf = new Series(data1); + const expected = [3, 0, 7, 5, 2, 4, 6, 1]; + const sf_sort = sf.argSort(); + assert.deepEqual(sf_sort.values, expected); + }); + + it("Return the integer indices that would sort the Series values", function () { + const data1 = [10.22, 4.5, 2.0, 10, 23.23, 20.1, 30, 11]; + const sf = new Series(data1); + const expected = [6, 4, 5, 7, 0, 3, 1, 2]; + const sf_sort = sf.argSort({ ascending: false}); + assert.deepEqual(sf_sort.values, expected); + }); + }); + + describe("argMax", function () { + it("Return int position of the largest value in the Series.", function () { + const data1 = [10, 45, 20, 10, 23, 20, 30, 11]; + const sf = new Series(data1); + const expected = 1; + const argMax = sf.argMax(); + assert.deepEqual(argMax, expected); + }); + + it("Return int position of the largest value in the Float Series.", function () { + const data1 = [10.22, 4.5, 2.0, 10, 23.23, 20.1, 30, 11]; + const sf = new Series(data1); + const expected = 6; + const argMax = sf.argMax(); + assert.deepEqual(argMax, expected); + }); + }); + + describe("argMin", function () { + it("Return int position of the smallest value in the Series", function () { + const data1 = [10, 45, 20, 122, 23, 20, 30, 11]; + const sf = new Series(data1); + const expected = 0; + const argMin = sf.argMin(); + assert.deepEqual(argMin, expected); + }); + + it("Return int position of the smallest value in a Float Series", function () { + const data1 = [10.22, 4.5, 2.0, 10, 23.23, 20.1, 30, 11]; + const sf = new Series(data1); + const expected = 2; + const argMin = sf.argMin(); + assert.deepEqual(argMin, expected); + }); + }); + + describe("Str", function () { + it("Converts all characters to lowercase inplace", function () { + const data = ["lower", "CAPITALS", "this is a sentence", "SwApCaSe"]; + const res = ["lower", "capitals", "this is a sentence", "swapcase"]; + const sf = new Series(data); + sf.str.toLowerCase({ inplace: true }) + assert.deepEqual(sf.values, res); + }); + it("Converts all characters to lowercase", function () { + const data = ["lower", "CAPITALS", "this is a sentence", "SwApCaSe"]; + const res = ["lower", "capitals", "this is a sentence", "swapcase"]; + const sf = new Series(data); + assert.deepEqual((sf.str.toLowerCase() as Series).values, res); + }); + it("Converts all characters to capital case.", function () { + const data = ["lower", "CAPITALS", "this is a sentence", "SwApCaSe"]; + const res = ["Lower", "Capitals", "This is a sentence", "Swapcase"]; + const sf = new Series(data); + assert.deepEqual((sf.str.capitalize() as Series).values, res); + }); + + it("Returns the character at the specified index (position)", function () { + const data = ["lower", "CAPITALS", "this is a sentence", "SwApCaSe"]; + const res = ["w", "P", "i", "A"]; + const sf = new Series(data); + assert.deepEqual((sf.str.charAt(2) as Series).values, res); + }); + + it("Throws error on concat of numeric series", function () { + const data = [1, 2, 3, 4, 5, 6]; + const sf = new Series(data); + assert.throws( + () => { + sf.str.concat("20", 1); + }, + Error, + "Cannot call accessor str on non-string type" + ); + + }); + }); + + describe("dt", function () { + it("check month generated", function () { + const data = ["02Sep2019", "03Dec2019", "04Jan2019"]; + const sf = new Series(data); + const expected = [8, 11, 0]; + assert.deepEqual(sf.dt.month().values, expected); + }); + + it("check month Name generated", function () { + const data = ["06-30-2019", "07-29-2019", "08-28-2019"]; + const sf = new Series(data); + const expected = ["June", "July", "August"]; + assert.deepEqual(sf.dt.monthName().values, expected); + }); + + it("check days of the weeks generated", function () { + const data = ["06-30-2019", "07-29-2019", "08-28-2019"]; + const sf = new Series(data); + const expected = ["Sunday", "Monday", "Wednesday"]; + assert.deepEqual(sf.dt.dayOfWeekName().values, expected); + }); + + it("check day of the month generated", function () { + const data = ["06-30-2019", "07-29-2019", "08-28-2019"]; + const sf = new Series(data); + const expected = [30, 29, 28]; + assert.deepEqual(sf.dt.dayOfMonth().values, expected); + }); + }); + + describe("astype", function () { + it("set type of float column to int", function () { + const data = [-20.1, 30, 47.3, -20]; + const ndframe = new Series(data); + const df = ndframe.asType("int32") as Series + + assert.deepEqual(df.dtypes[0], "int32"); + assert.deepEqual(df.values, [-20, 30, 47, -20]); + }); + it("set type of int column to float", function () { + const data = [34, -4, 5, 6]; + const ndframe = new Series(data); + const df = ndframe.asType("float32") as Series + assert.deepEqual(df.dtypes[0], "float32"); + assert.deepEqual(df.values, [34, -4, 5, 6]); + }); + it("set type of string column to int", function () { + const data = ["20.1", "21", "23.4", "50.78"]; + const ndframe = new Series(data); + const df = ndframe.asType("int32") as Series + + assert.deepEqual(df.dtypes[0], "int32"); + assert.deepEqual(df.values, [20, 21, 23, 50]); + }); + it("set type of string column to float", function () { + const data = ["20.1", "21", "23.4", "50.78"]; + const ndframe = new Series(data); + const df = ndframe.asType("float32") as Series + + assert.deepEqual(df.dtypes[0], "float32"); + assert.deepEqual(df.values, [20.1, 21, 23.4, 50.78]); + }); + it("set type of float column to string", function () { + const data = [-20.1, 30, 47.3, -20]; + const ndframe = new Series(data); + const df = ndframe.asType("string") as Series + assert.deepEqual(df.dtypes[0], "string"); + assert.deepEqual(df.values, ["-20.1", "30", "47.3", "-20"]); + }); + it("set type of int column to string", function () { + const data = [34, -4, 5, 6]; + const ndframe = new Series(data); + const df = ndframe.asType("string") as Series + assert.deepEqual(df.dtypes[0], "string"); + assert.deepEqual(df.values, ["34", "-4", "5", "6"]); + }); + it("set type of int column to string inplace", function () { + const data = [34, -4, 5, 6]; + const ndframe = new Series(data); + ndframe.asType("string", { inplace: true }); + assert.deepEqual(ndframe.dtypes[0], "string"); + assert.deepEqual(ndframe.values, ["34", "-4", "5", "6"]); + }); + }); + + describe("append", function () { + it("Add a new single value to the end of a Series inplace", function () { + const data = [1, 2, 3, 4, "a", "b", "c"]; + const sf = new Series(data); + const expected_val = [1, 2, 3, 4, "a", "b", "c", "d"]; + sf.append("d", 7, { inplace: true }); + assert.deepEqual(sf.values, expected_val); + }); + it("Add a new array of values to the end of a Series inplace", function () { + const data = [1, 2, 3, 4]; + const to_add = ["a", "b", "c"]; + const index = [4, 5, 6]; + const sf = new Series(data); + const expected_val = [1, 2, 3, 4, "a", "b", "c"]; + sf.append(to_add, index, { inplace: true }); + assert.deepEqual(sf.values, expected_val); + }); + it("Add a Series to the end of another Series inplace", function () { + const sf1 = new Series([1, 2, 3, 4]); + const sf2 = new Series(["a", "b", "c"]); + const index = [4, 5, 6]; + const expected_val = [1, 2, 3, 4, "a", "b", "c"]; + sf1.append(sf2, index, { inplace: true }); + assert.deepEqual(sf1.values, expected_val); + }); + it("Add a new single value to the end of a Series", function () { + const data = [1, 2, 3, 4, "a", "b", "c"]; + const sf = new Series(data); + const expected_val = [1, 2, 3, 4, "a", "b", "c", "d"]; + const sf2 = sf.append("d", 7) as Series + assert.deepEqual(sf2.values, expected_val); + }); + it("Add a new array of values to the end of a Series", function () { + const data = [1, 2, 3, 4]; + const to_add = ["a", "b", "c"]; + const index = [4, 5, 6]; + const sf = new Series(data); + const expected_val = [1, 2, 3, 4, "a", "b", "c"]; + const sf2 = sf.append(to_add, index) as Series; + assert.deepEqual(sf2.values, expected_val); + }); + it("Add a Series to the end of another Series", function () { + const sf1 = new Series([1, 2, 3, 4]); + const sf2 = new Series(["a", "b", "c"]); + const index = [4, 5, 6]; + const expected_val = [1, 2, 3, 4, "a", "b", "c"]; + const sf3 = sf1.append(sf2, index) as Series; + assert.deepEqual(sf3.values, expected_val); + }); + it("Confirm index Change after append", function () { + const sf1 = new Series([1, 2, 3, 4]); + const sf2 = new Series(["a", "b", "c"]); + const index = [4, 5, 6]; + const sf3 = sf1.append(sf2, index) as Series; + assert.deepEqual(sf3.index, [0, 1, 2, 3, 4, 5, 6]); + }); + it("Confirm index Change after append inplace", function () { + const sf1 = new Series([1, 2, 3, 4]); + const sf2 = new Series(["a", "b", "c"]); + const index = [4, 5, 6]; + sf1.append(sf2, index, { inplace: true }); + assert.deepEqual(sf1.index, [0, 1, 2, 3, 4, 5, 6]); + }); + }); + + describe("and", function () { + it("Return logical AND of series and other series (element-wise)", function () { + const data1 = [true, true, true, false, false]; + const data2 = [true, false, true, true, false]; + const sf = new Series(data1); + const sf2 = new Series(data2); + + const expected = [true, false, true, false, false]; + assert.deepEqual(sf.and(sf2).values, expected); + }); + + it("Return logical AND of series and other scalar", function () { + const data1 = [true, true, true, false, false]; + const sf = new Series(data1); + + const expected = [true, true, true, false, false]; + assert.deepEqual(sf.and(true).values, expected); + }); + + it("Return logical AND of series and other array (element-wise)", function () { + const data1 = [true, true, true, false, false]; + const data2 = [true, false, true, true, false]; + const sf = new Series(data1); + + const expected = [true, false, true, false, false]; + assert.deepEqual(sf.and(data2).values, expected); + }); + + it("Chaining works for logical AND of series and other array (element-wise)", function () { + const data1 = [true, true, true, false, false]; + const data2 = [true, false, true, true, false]; + const data3 = [true, false, false, true, false]; + + const sf = new Series(data1); + const expected = [true, false, false, false, false]; + assert.deepEqual(sf.and(data2).and(data3).values, expected); + }); + + it("Chaining works for logical AND and OR combined", function () { + const data1 = [true, true, true, false, false]; + const data2 = [true, false, true, true, false]; + const data3 = [true, false, false, true, false]; + + const sf = new Series(data1); + const expected = [true, false, true, true, false]; + assert.deepEqual(sf.and(data2).or(data3).values, expected); + }); + }); + + describe("or", function () { + it("Return logical OR of series and other series (element-wise)", function () { + const data1 = [true, true, true, false, false]; + const data2 = [true, false, true, true, false]; + const sf = new Series(data1); + const sf2 = new Series(data2); + + const expected = [true, true, true, true, false]; + assert.deepEqual(sf.or(sf2).values, expected); + }); + + it("Return logical OR of series and other scalar", function () { + const data1 = [true, true, true, false, false]; + const sf = new Series(data1); + + const expected = [true, true, true, true, true]; + assert.deepEqual(sf.or(true).values, expected); + }); + + it("Return logical OR of series and other array (element-wise)", function () { + const data1 = [true, true, true, false, false]; + const data2 = [true, false, true, true, false]; + const sf = new Series(data1); + + const expected = [true, true, true, true, false]; + assert.deepEqual(sf.or(data2).values, expected); + }); + }); + + describe("and", function () { + it("Return logical AND of series and other series (element-wise)", function () { + const data1 = [true, true, true, false, false]; + const data2 = [true, false, true, true, false]; + const sf = new Series(data1); + const sf2 = new Series(data2); + + const expected = [true, false, true, false, false]; + assert.deepEqual(sf.and(sf2).values, expected); + }); + + it("Return logical AND of series and other scalar", function () { + const data1 = [true, true, true, false, false]; + const sf = new Series(data1); + + const expected = [true, true, true, false, false]; + assert.deepEqual(sf.and(true).values, expected); + }); + + it("Return logical AND of series and other array (element-wise)", function () { + const data1 = [true, true, true, false, false]; + const data2 = [true, false, true, true, false]; + const sf = new Series(data1); + + const expected = [true, false, true, false, false]; + assert.deepEqual(sf.and(data2).values, expected); + }); + + it("Chaining works for logical AND of series and other array (element-wise)", function () { + const data1 = [true, true, true, false, false]; + const data2 = [true, false, true, true, false]; + const data3 = [true, false, false, true, false]; + + const sf = new Series(data1); + const expected = [true, false, false, false, false]; + assert.deepEqual(sf.and(data2).and(data3).values, expected); + }); + + it("Chaining works for logical AND and OR combined", function () { + const data1 = [true, true, true, false, false]; + const data2 = [true, false, true, true, false]; + const data3 = [true, false, false, true, false]; + + const sf = new Series(data1); + const expected = [true, false, true, true, false]; + assert.deepEqual(sf.and(data2).or(data3).values, expected); + }); + + it("Correct index is returned after operation", function () { + const data1 = [true, true, true, false, false]; + const data2 = [true, false, true, true, false]; + const sf = new Series(data1, { index: ["one", "two", "three", "four", "five"] }); + + const expected = ["one", "two", "three", "four", "five"]; + assert.deepEqual(sf.and(data2).index, expected); + }); + }); +}) \ No newline at end of file diff --git a/src/danfojs-node/test/core/strings.test.ts b/src/danfojs-node/test/core/strings.test.ts new file mode 100644 index 00000000..55b57182 --- /dev/null +++ b/src/danfojs-node/test/core/strings.test.ts @@ -0,0 +1,167 @@ +import { assert, expect } from "chai"; +import { describe, it } from "mocha"; +import { Series} from "../../dist/danfojs-node/src"; + +describe("Str", function () { + it("Converts all characters to lowercase.", function () { + let data = ['lower', 'CAPITALS', 'this is a sentence', 'SwApCaSe']; + let res = ['lower', 'capitals', 'this is a sentence', 'swapcase']; + let str = new Series(data).str + assert.deepEqual((str.toLowerCase()as Series).values, res); + }); + it("Converts all characters to uppercase.", function () { + let data = ['lower', 'CAPITALS', 'this is a sentence', 'SwApCaSe']; + let res = ['LOWER', 'CAPITALS', 'THIS IS A SENTENCE', 'SWAPCASE']; + let str = new Series(data).str; + assert.deepEqual((str.toUpperCase()as Series).values, res); + }); + it("Converts all characters to capital case.", function () { + let data = ['lower', 'CAPITALS', 'this is a sentence', 'SwApCaSe']; + let res = ['Lower', 'Capitals', 'This is a sentence', 'Swapcase']; + let str = new Series(data).str; + assert.deepEqual((str.capitalize()as Series).values, res); + }); + + it("Returns the character at the specified index (position)", function () { + let data = ['lower', 'CAPITALS', 'this is a sentence', 'SwApCaSe']; + let res = ["w", "P", "i", "A"]; + let str = new Series(data).str; + assert.deepEqual((str.charAt(2)as Series).values, res); + }); + it("Joins two or more strings. 0 joins from the start", function () { + let data = ['lower', 'CAPITALS', 'sentence', 'SwApCaSe']; + let data2 = ['XX', 'YY', 'BB', '01']; + + let res = ['XXlower', 'YYCAPITALS', 'BBsentence', '01SwApCaSe']; + let str = new Series(data).str; + assert.deepEqual((str.concat(data2, 0)as Series).values, res); + }); + + it("Joins two or more strings. 1 joins from the end", function () { + let data = ['lower', 'CAPITALS', 'sentence', 'SwApCaSe']; + let data2 = ['XX', 'YY', 'BB', '01']; + + let res = ['lowerXX', 'CAPITALSYY', 'sentenceBB', 'SwApCaSe01']; + let str = new Series(data).str; + assert.deepEqual((str.concat(data2, 1)as Series).values, res); + }); + + it("Joins two arrays of strings. 0 joins from the start", function () { + let data = ['lower', 'CAPITALS', 'sentence', 'SwApCaSe']; + let res = ['prelower', 'preCAPITALS', 'presentence', 'preSwApCaSe']; + let str = new Series(data).str; + assert.deepEqual((str.concat("pre", 0)as Series).values, res); + }); + + it("Joins two or more strings. 1 joins from the end", function () { + let data = ['lower', 'CAPITALS', 'this is a sentence', 'SwApCaSe']; + let res = ['lowerpost', 'CAPITALSpost', 'this is a sentencepost', 'SwApCaSepost']; + let str = new Series(data).str; + assert.deepEqual((str.concat("post", 1)as Series).values, res); + }); + + it("Checks whether a string begins with specified characters", function () { + let data = ['lower', 'CAPITALS', 'this is a sentence', 'SwApCaSe']; + let res = [true, false, false, false]; + let str = new Series(data).str; + assert.deepEqual((str.startsWith("l")as Series).values, res); + }); + it("Checks whether a string ends with specified characters", function () { + let data = ['lower', 'CAPITALS', 'this is a sentence', 'SwApCaSe']; + let res = [false, false, true, true]; + let str = new Series(data).str; + assert.deepEqual((str.endsWith("e")as Series).values, res); + }); + + it("Checks whether a string contains the specified string/characters", function () { + let data = ['lower', 'CAPITALS', 'this is a sentence', 'SwApCaSe']; + let res = [false, false, true, false]; + let str = new Series(data).str; + assert.deepEqual((str.includes("sentence")as Series).values, res); + }); + + it("Returns the position of the first found occurrence of a specified value in a string", function () { + let data = ['lower', 'CAPITALS', 'this is a sentence', 'SwApCaSe']; + let res = [-1, 0, -1, 4]; + let str = new Series(data).str; + assert.deepEqual((str.indexOf("C")as Series).values, res); + }); + + it("Returns the position of the last found occurrence of a specified value in a string", function () { + let data = ['lower', 'CAPITALS', 'this is a sentence', 'SwApCaSe']; + let res = [4, -1, -1, -1]; + let str = new Series(data).str; + assert.deepEqual((str.lastIndexOf("r")as Series).values, res); + }); + + it("Returns a new string with a specified number of copies of an existing string", function () { + let data = ['a', 'b', 'c', 'd']; + let res = ['aaa', 'bbb', 'ccc', 'ddd']; + let str = new Series(data).str; + assert.deepEqual((str.repeat(3)as Series).values, res); + }); + + it("Searches a string for a specified value, or a regular expression, and returns a new string where the specified values are replaced", function () { + let data = ['lower', 'CAPITALS', 'this is a sentence', 'SwApCaSe']; + let res = ['lower', 'CXXXPITALS', 'this is a sentence', 'SwXXXpCaSe']; + let str = new Series(data).str; + assert.deepEqual((str.replace("A", "XXX")as Series).values, res); + }); + + it("Searches a string for a specified value, or regular expression, and returns the position of the match", function () { + let data = ['lower', 'CAPITALS', 'this is a sentence', 'SwApCaSe']; + let res = [-1, 1, -1, 2]; + let str = new Series(data).str; + assert.deepEqual((str.search("A")as Series).values, res); + }); + + it("Extracts a part of a string and returns a new string", function () { + let data = ['lower', 'CAPITALS', 'this is a sentence', 'SwApCaSe']; + let res = ['ow', 'AP', 'hi', 'wA']; + let str = new Series(data).str; + assert.deepEqual((str.slice(1, 3)as Series).values, res); + }); + + it("Splits a string into an array of substrings", function () { + let data = ['lower part', 'CAPITALS city', 'is a sentence', 'SwAp CaSe']; + let res = ["lower,part", "CAPITALS,city", "is,a,sentence", "SwAp,CaSe"]; + let str = new Series(data).str; + assert.deepEqual((str.split(" ")as Series).values, res); + }); + + it("Extracts the characters from a string, beginning at a specified start position, and through the specified number of character", function () { + let data = ['lower part', 'CAPITALS city', 'this is a sentence', 'SwAp CaSe']; + let res = [" p", "AL", "is", "Ca"]; + let str = new Series(data).str; + assert.deepEqual((str.substr(5, 2)as Series).values, res); + }); + + it("Extracts the characters from a string, between two specified indices", function () { + let data = ['lower part', 'CAPITALS city', 'this is a sentence', 'SwAp CaSe']; + let res = ["w", "P", "i", "A"]; + let str = new Series(data).str; + assert.deepEqual((str.substring(2, 3)as Series).values, res); + }); + + it("Removes whitespace from both ends of a string", function () { + let data = ['lower part ', ' CAPITALS city', ' this is a sentence', ' SwAp CaSe']; + let res = ['lower part', 'CAPITALS city', 'this is a sentence', 'SwAp CaSe']; + let str = new Series(data).str; + assert.deepEqual((str.trim()as Series).values, res); + }); + + it("Joins strings to specified value", function () { + let data = ['lower part', 'CAPITALS city', 'this is a sentence', 'SwAp CaSe']; + let res = ['lower part,new', 'CAPITALS city,new', 'this is a sentence,new', 'SwAp CaSe,new']; + let str = new Series(data).str; + assert.deepEqual((str.join("new", ",")as Series).values, res); + }); + + it("Counts the number of characters in string", function () { + let data = ['lower part', 'CAPITALS', 'this is a sentence', 'SwApCaSe']; + let res = [10, 8, 18, 8]; + let str = new Series(data).str; + assert.deepEqual((str.len()as Series).values, res); + }); + +}); diff --git a/src/danfojs-node/test/io/csv.reader.test.ts b/src/danfojs-node/test/io/csv.reader.test.ts new file mode 100644 index 00000000..752f7ed2 --- /dev/null +++ b/src/danfojs-node/test/io/csv.reader.test.ts @@ -0,0 +1,164 @@ +import path from "path" +import { assert } from "chai"; +import { describe, it } from "mocha"; +import { DataFrame, readCSV, Series, streamCSV, toCSV } from "../../dist/danfojs-node/src"; + +describe("readCSV", function () { + this.timeout(10000); + it("Read local csv file works", async function () { + const filePath = path.join(process.cwd(), "test", "samples", "titanic.csv"); + let df: any = await readCSV(filePath, { header: true, preview: 5 }); + assert.deepEqual(df.shape, [5, 8]); + assert.deepEqual(df.columns, [ + 'Survived', + 'Pclass', + 'Name', + 'Sex', + 'Age', + 'Siblings/Spouses Aboard', + 'Parents/Children Aboard', + 'Fare' + ]); + assert.deepEqual(df.dtypes, [ + 'int32', 'int32', + 'string', 'string', + 'int32', 'int32', + 'int32', 'float32' + ]); + }); + it("Read local CSV file with config works", async function () { + const filePath = path.join(process.cwd(), "test", "samples", "titanic.csv"); + const frameConfig = { + columns: [ + 'A', + 'B', + 'C', + 'D', + 'E', + 'F', + 'G', + 'H' + ] + } + let df: any = await readCSV(filePath, { frameConfig, header: true, preview: 5 }); + assert.deepEqual(df.shape, [5, 8]); + assert.deepEqual(df.columns, [ + 'A', + 'B', + 'C', + 'D', + 'E', + 'F', + 'G', + 'H' + ]); + assert.deepEqual(df.dtypes, [ + 'int32', 'int32', + 'string', 'string', + 'int32', 'int32', + 'int32', 'float32' + ]); + }); + + // it("Read remote csv file works", async function () { + // const remoteFile = "https://raw.githubusercontent.com/opensource9ja/danfojs/dev/danfojs-node/tests/samples/titanic.csv" + // let df: any = await readCSV(remoteFile, { header: true, preview: 5 }); + // assert.deepEqual(df.shape, [5, 8]); + // assert.deepEqual(df.columns, [ + // 'Survived', + // 'Pclass', + // 'Name', + // 'Sex', + // 'Age', + // 'Siblings/Spouses Aboard', + // 'Parents/Children Aboard', + // 'Fare' + // ]); + // assert.deepEqual(df.dtypes, [ + // 'int32', 'int32', + // 'string', 'string', + // 'int32', 'int32', + // 'int32', 'float32' + // ]); + // }); + +}) + +describe("streamCSV", function () { + this.timeout(100000); + it("Streaming local csv file with callback works", async function () { + const filePath = path.join(process.cwd(), "test", "samples", "titanic.csv"); + await streamCSV(filePath, (df: any) => { + if (df) { + assert.deepEqual(df.shape, [1, 8]) + assert.deepEqual(df.columns, [ + 'Survived', + 'Pclass', + 'Name', + 'Sex', + 'Age', + 'Siblings/Spouses Aboard', + 'Parents/Children Aboard', + 'Fare' + ]); + } else { + assert.deepEqual(df, null); + } + }, { header: true }); + + }); + + // it("Streaming remote csv file with callback works", async function () { + // const remoteFile = "https://raw.githubusercontent.com/opensource9ja/danfojs/dev/danfojs-node/tests/samples/titanic.csv" + // await streamCSV(remoteFile, { header: true }, (df: any) => { + // if (df) { + // assert.deepEqual(df.shape, [1, 8]) + // assert.deepEqual(df.columns, [ + // 'Survived', + // 'Pclass', + // 'Name', + // 'Sex', + // 'Age', + // 'Siblings/Spouses Aboard', + // 'Parents/Children Aboard', + // 'Fare' + // ]); + // } else { + // assert.deepEqual(df, null); + // } + // }); + + // }); + +}) + + +describe("toCSV", function () { + it("toCSV works", async function () { + const data = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] + let df: any = new DataFrame(data, { columns: ["a", "b", "c", "d"] }); + assert.deepEqual(toCSV(df, {}), `a,b,c,d\n1,2,3,4\n5,6,7,8\n9,10,11,12\n`); + }); + it("toCSV works for specified seperator", async function () { + const data = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] + let df: any = new DataFrame(data, { columns: ["a", "b", "c", "d"] }); + assert.deepEqual(toCSV(df, { sep: "+" }), `a+b+c+d\n1+2+3+4\n5+6+7+8\n9+10+11+12\n`); + }); + it("toCSV write to local file works", async function () { + const data = [[1, 2, 3, "4"], [5, 6, 7, "8"], [9, 10, 11, "12"]] + let df: any = new DataFrame(data, { columns: ["a", "b", "c", "d"] }); + const filePath = path.join(process.cwd(), "test", "samples", "test_write.csv"); + toCSV(df, { sep: ",", filePath }); + }); + it("toCSV works for series", async function () { + const data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] + let df: any = new Series(data); + assert.deepEqual(toCSV(df, { sep: "+" }), `1+2+3+4+5+6+7+8+9+10+11+12`); + }); + it("calling df.toCSV works", async function () { + const data = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] + let df: any = new DataFrame(data, { columns: ["a", "b", "c", "d"] }); + assert.deepEqual(df.toCSV(), `a,b,c,d\n1,2,3,4\n5,6,7,8\n9,10,11,12\n`); + }); + +}) \ No newline at end of file diff --git a/src/danfojs-node/test/io/excel.reader.test.ts b/src/danfojs-node/test/io/excel.reader.test.ts new file mode 100644 index 00000000..04160837 --- /dev/null +++ b/src/danfojs-node/test/io/excel.reader.test.ts @@ -0,0 +1,109 @@ +import fs from "fs"; +import path from "path" +import { assert } from "chai"; +import { describe, it } from "mocha"; +import { DataFrame, readExcel, Series, toExcel } from "../../dist/danfojs-node/src"; + +describe("readExcel", function () { + this.timeout(100000); + it("Read local excel file works", async function () { + const filePath = path.join(process.cwd(), "test", "samples", "sample.xlsx"); + let df: any = await readExcel(filePath, {}); + assert.deepEqual(df.columns, [ + 'Year', + 'Stocks', + 'T.Bills', + 'T.Bonds', + ]); + assert.deepEqual(df.dtypes, [ + 'int32', 'float32', + 'float32', 'float32', + ]); + assert.deepEqual(df.shape, [82, 4]) + }); + it("Read local excel file with config works", async function () { + const filePath = path.join(process.cwd(), "test", "samples", "sample.xlsx"); + const frameConfig = { + columns: [ + 'A', + 'B', + 'C', + 'D', + ] + } + let df: any = await readExcel(filePath, { frameConfig }); + assert.deepEqual(df.columns, [ + 'A', + 'B', + 'C', + 'D', + ]); + assert.deepEqual(df.dtypes, [ + 'int32', 'float32', + 'float32', 'float32', + ]); + assert.deepEqual(df.shape, [82, 4]) + }); + it("Read local excel file works for selected sheet", async function () { + const filePath = path.join(process.cwd(), "test", "samples", "sample.xlsx"); + let df: any = await readExcel(filePath, { sheet: 1 }); + assert.deepEqual(df.columns, []); + assert.deepEqual(df.shape, [0, 0]) + }); + + it("Read remote excel file works", async function () { + const remoteFile = "https://raw.githubusercontent.com/opensource9ja/danfojs/dev/danfojs-node/tests/samples/SampleData.xlsx" + let df: any = await readExcel(remoteFile, {}); + assert.deepEqual(df.columns, [ + 'Year', + 'Stocks', + 'T.Bills', + 'T.Bonds', + ]); + assert.deepEqual(df.dtypes, [ + 'int32', 'float32', + 'float32', 'float32', + ]); + assert.deepEqual(df.shape, [82, 4]) + }); +}); + + +describe("toExcel", function () { + it("toExcel works", async function () { + const data = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] + const df: any = new DataFrame(data, { columns: ["a", "b", "c", "d"] }); + const filePath = path.join(process.cwd(), "test", "samples", "sampleOut.xlsx"); + toExcel(df, { filePath }) + + const dfNew: any = await readExcel(filePath, {}); + + assert.equal(fs.existsSync(filePath), true) + assert.deepEqual(dfNew.columns, [ + 'a', + 'b', + 'c', + 'd', + ]); + assert.deepEqual(dfNew.dtypes, [ + 'int32', 'int32', + 'int32', 'int32', + ]); + assert.deepEqual(dfNew.shape, [3, 4]) + }); + it("toExcel works for series", async function () { + const data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] + const df: any = new Series(data); + const filePath = path.join(process.cwd(), "test", "samples", "testSeries.xlsx"); + toExcel(df, { filePath }) + assert.equal(fs.existsSync(filePath), true) + }); + it("calling df.toExcel works", async function () { + const data = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] + const df: any = new DataFrame(data, { columns: ["a", "b", "c", "d"] }); + const filePath = path.join(process.cwd(), "test", "samples", "sampleOut.xlsx"); + df.toExcel({ filePath }) + assert.equal(fs.existsSync(filePath), true) + }); + +}) diff --git a/src/danfojs-node/test/io/json.reader.test.ts b/src/danfojs-node/test/io/json.reader.test.ts new file mode 100644 index 00000000..2a716d19 --- /dev/null +++ b/src/danfojs-node/test/io/json.reader.test.ts @@ -0,0 +1,154 @@ +import fs from "fs"; +import path from "path" +import { assert } from "chai"; +import { describe, it } from "mocha"; +import { DataFrame, Series, readJSON, toJSON, streamJSON } from "../../dist/danfojs-node/src"; + +describe("readJSON", function () { + this.timeout(100000); + it("Read local json file works", async function () { + const filePath = path.join(process.cwd(), "test", "samples", "book.json"); + const df: any = await readJSON(filePath, {}); + assert.deepEqual(df.columns, [ + 'book_id', + 'title', + 'image_url', + 'authors', + ]); + assert.deepEqual(df.dtypes, [ + 'int32', 'string', + 'string', 'string', + ]); + }); + + it("Read local json file with config works", async function () { + const filePath = path.join(process.cwd(), "test", "samples", "book.json"); + const frameConfig = { + columns: ["A", "B", "C", "D"] + } + const df: any = await readJSON(filePath, { frameConfig }); + assert.deepEqual(df.columns, ["A", "B", "C", "D"]); + assert.deepEqual(df.dtypes, [ + 'int32', 'string', + 'string', 'string', + ]); + }); + // it("Read remote json file works", async function () { + // const remoteFile = "https://raw.githubusercontent.com/opensource9ja/danfojs/dev/danfojs-node/tests/samples/book.json" + // const df: any = await readJSON(remoteFile, {}); + // assert.deepEqual(df.columns, [ + // 'book_id', + // 'title', + // 'image_url', + // 'authors', + // ]); + // assert.deepEqual(df.dtypes, [ + // 'int32', 'string', + // 'string', 'string', + // ]); + // }); +}); + + +describe("streamJSON", function () { + this.timeout(100000); + it("Streaming local csv file with callback works", async function () { + const filePath = path.join(process.cwd(), "test", "samples", "book_small.json"); + await streamJSON(filePath, (df: any) => { + if (df) { + df.print(); + assert.deepEqual(df.shape, [1, 4]) + assert.deepEqual(df.columns, [ + 'book_id', + 'title', + 'image_url', + 'authors', + ]); + assert.deepEqual(df.dtypes, [ + 'int32', 'string', + 'string', 'string', + ]); + } else { + assert.deepEqual(df, null); + } + }); + }); + + // it("Streaming remote json file with callback works", async function () { + // const remoteFile = "https://raw.githubusercontent.com/opensource9ja/danfojs/dev/danfojs-node/tests/samples/book.json" + // await streamJSON(remoteFile, { header: true }, (df: any) => { + // if (df) { + // df.print(); + // assert.deepEqual(df.shape, [1, 4]) + // assert.deepEqual(df.columns, [ + // 'book_id', + // 'title', + // 'image_url', + // 'authors', + // ]); + // } else { + // assert.deepEqual(df, null); + // } + // }); + + // }); + +}) + + +describe("toJSON", function () { + it("toJSON works", async function () { + const data = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] + const df: any = new DataFrame(data, { columns: ["a", "b", "c", "d"] }); + const expected: any = [ + { "a": 1, "b": 2, "c": 3, "d": 4 }, + { "a": 5, "b": 6, "c": 7, "d": 8 }, + { "a": 9, "b": 10, "c": 11, "d": 12 }, + ] + const json = toJSON(df, {}) + assert.deepEqual(json, expected); + }); + it("toJSON works for row format", async function () { + const data = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] + const df: any = new DataFrame(data, { columns: ["a", "b", "c", "d"] }); + const expected: any = { + "a": [1, 5, 9], + "b": [2, 6, 10], + "c": [3, 7, 11], + "d": [4, 8, 12], + } + const json = toJSON(df, { format: "row" }) + assert.deepEqual(json, expected); + }); + it("toJSON writes file to local path", async function () { + const data = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] + const df: any = new DataFrame(data, { columns: ["a", "b", "c", "d"] }); + + const colFilePath = path.join(process.cwd(), "test", "samples", "test_col_write.json"); + const rowFilePath = path.join(process.cwd(), "test", "samples", "test_row_write.json"); + + toJSON(df, { format: "row", filePath: rowFilePath }) + toJSON(df, { format: "column", filePath: colFilePath }) + + assert.equal(fs.existsSync(rowFilePath), true); + assert.equal(fs.existsSync(colFilePath), true); + }); + it("toJSON works for series", async function () { + const data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] + const df: any = new Series(data); + assert.deepEqual(toJSON(df, {}), { "0": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] }); + }); + it("df.toJSON works", async function () { + const data = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] + const df: any = new DataFrame(data, { columns: ["a", "b", "c", "d"] }); + const expected: any = { + "a": [1, 5, 9], + "b": [2, 6, 10], + "c": [3, 7, 11], + "d": [4, 8, 12], + } + const json = df.toJSON({ format: "row" }) + assert.deepEqual(json, expected); + }); + +}) diff --git a/danfojs-browser/tests/samples/book.json b/src/danfojs-node/test/samples/book.json similarity index 100% rename from danfojs-browser/tests/samples/book.json rename to src/danfojs-node/test/samples/book.json diff --git a/src/danfojs-node/test/samples/book_small.json b/src/danfojs-node/test/samples/book_small.json new file mode 100644 index 00000000..e56276db --- /dev/null +++ b/src/danfojs-node/test/samples/book_small.json @@ -0,0 +1,80 @@ +[ + { + "book_id": 30555488, + "title": "The Underground Railroad", + "image_url": "https:\/\/images.gr-assets.com\/books\/1493178362m\/30555488.jpg", + "authors": "Colson Whitehead" + }, + { + "book_id": 30831912, + "title": "Norse Mythology", + "image_url": "https:\/\/images.gr-assets.com\/books\/1473864212m\/30831912.jpg", + "authors": "Neil Gaiman" + }, + { + "book_id": 30839185, + "title": "Vicious (Sinners of Saint, #1)", + "image_url": "https:\/\/images.gr-assets.com\/books\/1481945407m\/30839185.jpg", + "authors": "L.J. Shen" + }, + { + "book_id": 31140847, + "title": "Bossman", + "image_url": "https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png", + "authors": "Vi Keeland" + }, + { + "book_id": 31176886, + "title": "The Chemist", + "image_url": "https:\/\/images.gr-assets.com\/books\/1468944057m\/31176886.jpg", + "authors": "Stephenie Meyer" + }, + { + "book_id": 31194270, + "title": "Evelyn, After", + "image_url": "https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png", + "authors": "Victoria Helen Stone" + }, + { + "book_id": 31538614, + "title": "Short Stories from Hogwarts of Power, Politics and Pesky Poltergeists (Pottermore Presents, #2)", + "image_url": "https:\/\/images.gr-assets.com\/books\/1471436601m\/31538614.jpg", + "authors": "J.K. Rowling, MinaLima" + }, + { + "book_id": 31538635, + "title": "Short Stories from Hogwarts of Heroism, Hardship and Dangerous Hobbies (Pottermore Presents, #1)", + "image_url": "https:\/\/images.gr-assets.com\/books\/1471436733m\/31538635.jpg", + "authors": "J.K. Rowling, MinaLima" + }, + { + "book_id": 31538647, + "title": "Hogwarts: An Incomplete and Unreliable Guide (Pottermore Presents, #3)", + "image_url": "https:\/\/images.gr-assets.com\/books\/1502156557m\/31538647.jpg", + "authors": "J.K. Rowling" + }, + { + "book_id": 31845516, + "title": "Love Warrior", + "image_url": "https:\/\/images.gr-assets.com\/books\/1473164102m\/31845516.jpg", + "authors": "Glennon Doyle Melton" + }, + { + "book_id": 32075671, + "title": "The Hate U Give", + "image_url": "https:\/\/images.gr-assets.com\/books\/1476284759m\/32075671.jpg", + "authors": "Angie Thomas" + }, + { + "book_id": 32848471, + "title": "Egomaniac", + "image_url": "https:\/\/images.gr-assets.com\/books\/1479387807m\/32848471.jpg", + "authors": "Vi Keeland" + }, + { + "book_id": 33288638, + "title": "Wait for It", + "image_url": "https:\/\/s.gr-assets.com\/assets\/nophoto\/book\/111x148-bcc042a9c91a29c1d680899eff700a03.png", + "authors": "Mariana Zapata" + } +] \ No newline at end of file diff --git a/danfojs-browser/tests/samples/SampleData.xlsx b/src/danfojs-node/test/samples/sample.xlsx similarity index 100% rename from danfojs-browser/tests/samples/SampleData.xlsx rename to src/danfojs-node/test/samples/sample.xlsx diff --git a/src/danfojs-node/test/samples/sampleOut.xlsx b/src/danfojs-node/test/samples/sampleOut.xlsx new file mode 100644 index 00000000..f2136730 Binary files /dev/null and b/src/danfojs-node/test/samples/sampleOut.xlsx differ diff --git a/src/danfojs-node/test/samples/test.xlsx b/src/danfojs-node/test/samples/test.xlsx new file mode 100644 index 00000000..e657c177 Binary files /dev/null and b/src/danfojs-node/test/samples/test.xlsx differ diff --git a/src/danfojs-node/test/samples/testSeries.xlsx b/src/danfojs-node/test/samples/testSeries.xlsx new file mode 100644 index 00000000..2a5fbf3b Binary files /dev/null and b/src/danfojs-node/test/samples/testSeries.xlsx differ diff --git a/src/danfojs-node/test/samples/test_col_write.json b/src/danfojs-node/test/samples/test_col_write.json new file mode 100644 index 00000000..1e0a6dec --- /dev/null +++ b/src/danfojs-node/test/samples/test_col_write.json @@ -0,0 +1 @@ +[{"a":1,"b":2,"c":3,"d":4},{"a":5,"b":6,"c":7,"d":8},{"a":9,"b":10,"c":11,"d":12}] \ No newline at end of file diff --git a/src/danfojs-node/test/samples/test_row_write.json b/src/danfojs-node/test/samples/test_row_write.json new file mode 100644 index 00000000..d4df0231 --- /dev/null +++ b/src/danfojs-node/test/samples/test_row_write.json @@ -0,0 +1 @@ +{"a":[1,5,9],"b":[2,6,10],"c":[3,7,11],"d":[4,8,12]} \ No newline at end of file diff --git a/src/danfojs-node/test/samples/test_write.csv b/src/danfojs-node/test/samples/test_write.csv new file mode 100644 index 00000000..0932371e --- /dev/null +++ b/src/danfojs-node/test/samples/test_write.csv @@ -0,0 +1,4 @@ +a,b,c,d +1,2,3,4 +5,6,7,8 +9,10,11,12 diff --git a/danfojs-browser/tests/samples/titanic.csv b/src/danfojs-node/test/samples/titanic.csv similarity index 100% rename from danfojs-browser/tests/samples/titanic.csv rename to src/danfojs-node/test/samples/titanic.csv diff --git a/src/danfojs-node/test/samples/titanicOutLocal.csv b/src/danfojs-node/test/samples/titanicOutLocal.csv new file mode 100644 index 00000000..489234db --- /dev/null +++ b/src/danfojs-node/test/samples/titanicOutLocal.csv @@ -0,0 +1,888 @@ +Survived,Pclass,Name,Sex,Age,Siblings/Spouses Aboard,Parents/Children Aboard,Fare,titles +0,3, Owen Harris Braund,male,22,1,0,7.25,Mr +1,1, John Bradley (Florence Briggs Thayer) Cumings,female,38,1,0,71.2833,Mrs +1,3, Laina Heikkinen,female,26,0,0,7.925,Miss +1,1, Jacques Heath (Lily May Peel) Futrelle,female,35,1,0,53.1,Mrs +0,3, William Henry Allen,male,35,0,0,8.05,Mr +0,3, James Moran,male,27,0,0,8.4583,Mr +0,1, Timothy J McCarthy,male,54,0,0,51.8625,Mr +0,3, Gosta Leonard Palsson,male,2,3,1,21.075,Master +1,3, Oscar W (Elisabeth Vilhelmina Berg) Johnson,female,27,0,2,11.1333,Mrs +1,2, Nicholas (Adele Achem) Nasser,female,14,1,0,30.0708,Mrs +1,3, Marguerite Rut Sandstrom,female,4,1,1,16.7,Miss +1,1, Elizabeth Bonnell,female,58,0,0,26.55,Miss +0,3, William Henry Saundercock,male,20,0,0,8.05,Mr +0,3, Anders Johan Andersson,male,39,1,5,31.275,Mr +0,3, Hulda Amanda Adolfina Vestrom,female,14,0,0,7.8542,Miss +1,2, (Mary D Kingcome) Hewlett,female,55,0,0,16,Mrs +0,3, Eugene Rice,male,2,4,1,29.125,Master +1,2, Charles Eugene Williams,male,23,0,0,13,Mr +0,3, Julius (Emelia Maria Vandemoortele) Vander Planke,female,31,1,0,18,Mrs +1,3, Fatima Masselmani,female,22,0,0,7.225,Mrs +0,2, Joseph J Fynney,male,35,0,0,26,Mr +1,2, Lawrence Beesley,male,34,0,0,13,Mr +1,3, Anna McGowan,female,15,0,0,8.0292,Miss +1,1, William Thompson Sloper,male,28,0,0,35.5,Mr +0,3, Torborg Danira Palsson,female,8,3,1,21.075,Miss +1,3, Carl Oscar (Selma Augusta Emilia Johansson) Asplund,female,38,1,5,31.3875,Mrs +0,3, Farred Chehab Emir,male,26,0,0,7.225,Mr +0,1, Charles Alexander Fortune,male,19,3,2,263,Mr +1,3, Ellen O'Dwyer,female,24,0,0,7.8792,Miss +0,3, Lalio Todoroff,male,23,0,0,7.8958,Mr +0,1, Manuel E Uruchurtu,male,40,0,0,27.7208,Don +1,1, William Augustus (Marie Eugenie) Spencer,female,48,1,0,146.5208,Mrs +1,3, Mary Agatha Glynn,female,18,0,0,7.75,Miss +0,2, Edward H Wheadon,male,66,0,0,10.5,Mr +0,1, Edgar Joseph Meyer,male,28,1,0,82.1708,Mr +0,1, Alexander Oskar Holverson,male,42,1,0,52,Mr +1,3, Hanna Mamee,male,18,0,0,7.2292,Mr +0,3, Ernest Charles Cann,male,21,0,0,8.05,Mr +0,3, Augusta Maria Vander Planke,female,18,2,0,18,Miss +1,3, Jamila Nicola-Yarred,female,14,1,0,11.2417,Miss +0,3, Johan (Johanna Persdotter Larsson) Ahlin,female,40,1,0,9.475,Mrs +0,2, William John Robert (Dorothy Ann Wonnacott) Turpin,female,27,1,0,21,Mrs +1,2, Simonne Marie Anne Andree Laroche,female,3,1,2,41.5792,Miss +1,3, Margaret Delia Devaney,female,19,0,0,7.8792,Miss +0,3, William John Rogers,male,30,0,0,8.05,Mr +0,3, Denis Lennon,male,20,1,0,15.5,Mr +1,3, Bridget O'Driscoll,female,27,0,0,7.75,Miss +0,3, Youssef Samaan,male,16,2,0,21.6792,Mr +0,3, Josef (Josefine Franchi) Arnold-Franchi,female,18,1,0,17.8,Mrs +0,3, Juha Niilo Panula,male,7,4,1,39.6875,Master +0,3, Richard Cater Nosworthy,male,21,0,0,7.8,Mr +1,1, Henry Sleeper (Myna Haxtun) Harper,female,49,1,0,76.7292,Mrs +1,2, Lizzie (Elizabeth Anne Wilkinson) Faunthorpe,female,29,1,0,26,Mrs +0,1, Engelhart Cornelius Ostby,male,65,0,1,61.9792,Mr +1,1, Hugh Woolner,male,46,0,0,35.5,Mr +1,2, Emily Rugg,female,21,0,0,10.5,Miss +0,3, Mansouer Novel,male,28.5,0,0,7.2292,Mr +1,2, Constance Mirium West,female,5,1,2,27.75,Miss +0,3, William Frederick Goodwin,male,11,5,2,46.9,Master +0,3, Orsen Sirayanian,male,22,0,0,7.2292,Mr +1,1, Amelie Icard,female,38,0,0,80,Miss +0,1, Henry Birkhardt Harris,male,45,1,0,83.475,Mr +0,3, Harald Skoog,male,4,3,2,27.9,Master +0,1, Albert A Stewart,male,64,0,0,27.7208,Mr +1,3, Gerios Moubarek,male,7,1,1,15.2458,Master +1,2, (Elizabeth Ramell) Nye,female,29,0,0,10.5,Mrs +0,3, Ernest James Crease,male,19,0,0,8.1583,Mr +1,3, Erna Alexandra Andersson,female,17,4,2,7.925,Miss +0,3, Vincenz Kink,male,26,2,0,8.6625,Mr +0,2, Stephen Curnow Jenkin,male,32,0,0,10.5,Mr +0,3, Lillian Amy Goodwin,female,16,5,2,46.9,Miss +0,2, Ambrose Jr Hood,male,21,0,0,73.5,Mr +0,3, Apostolos Chronopoulos,male,26,1,0,14.4542,Mr +1,3, Lee Bing,male,32,0,0,56.4958,Mr +0,3, Sigurd Hansen Moen,male,25,0,0,7.65,Mr +0,3, Ivan Staneff,male,23,0,0,7.8958,Mr +0,3, Rahamin Haim Moutal,male,28,0,0,8.05,Mr +1,2, Alden Gates Caldwell,male,0.83,0,2,29,Master +1,3, Elizabeth Dowdell,female,30,0,0,12.475,Miss +0,3, Achille Waelens,male,22,0,0,9,Mr +1,3, Jan Baptist Sheerlinck,male,29,0,0,9.5,Mr +1,3, Brigdet Delia McDermott,female,31,0,0,7.7875,Miss +0,1, Francisco M Carrau,male,28,0,0,47.1,Mr +1,2, Bertha Ilett,female,17,0,0,10.5,Miss +1,3, Karl Alfred (Maria Mathilda Gustafsson) Backstrom,female,33,3,0,15.85,Mrs +0,3, William Neal Ford,male,16,1,3,34.375,Mr +0,3, Selman Francis Slocovski,male,20,0,0,8.05,Mr +1,1, Mabel Helen Fortune,female,23,3,2,263,Miss +0,3, Francesco Celotti,male,24,0,0,8.05,Mr +0,3, Emil Christmann,male,29,0,0,8.05,Mr +0,3, Paul Edvin Andreasson,male,20,0,0,7.8542,Mr +0,1, Herbert Fuller Chaffee,male,46,1,0,61.175,Mr +0,3, Bertram Frank Dean,male,26,1,2,20.575,Mr +0,3, Daniel Coxon,male,59,0,0,7.25,Mr +0,3, Charles Joseph Shorney,male,22,0,0,8.05,Mr +0,1, George B Goldschmidt,male,71,0,0,34.6542,Mr +1,1, William Bertram Greenfield,male,23,0,1,63.3583,Mr +1,2, John T (Ada Julia Bone) Doling,female,34,0,1,23,Mrs +0,2, Sinai Kantor,male,34,1,0,26,Mr +0,3, Matilda Petranec,female,28,0,0,7.8958,Miss +0,3, Pastcho Petroff,male,29,0,0,7.8958,Mr +0,1, Richard Frasar White,male,21,0,1,77.2875,Mr +0,3, Gustaf Joel Johansson,male,33,0,0,8.6542,Mr +0,3, Anders Vilhelm Gustafsson,male,37,2,0,7.925,Mr +0,3, Stoytcho Mionoff,male,28,0,0,7.8958,Mr +1,3, Anna Kristine Salkjelsvik,female,21,0,0,7.65,Miss +1,3, Albert Johan Moss,male,29,0,0,7.775,Mr +0,3, Tido Rekic,male,38,0,0,7.8958,Mr +1,3, Bertha Moran,female,28,1,0,24.15,Miss +0,1, Walter Chamberlain Porter,male,47,0,0,52,Mr +0,3, Hileni Zabour,female,14.5,1,0,14.4542,Miss +0,3, David John Barton,male,22,0,0,8.05,Mr +0,3, Katriina Jussila,female,20,1,0,9.825,Miss +0,3, Malake Attalah,female,17,0,0,14.4583,Miss +0,3, Edvard Pekoniemi,male,21,0,0,7.925,Mr +0,3, Patrick Connors,male,70.5,0,0,7.75,Mr +0,2, William John Robert Turpin,male,29,1,0,21,Mr +0,1, Quigg Edmond Baxter,male,24,0,1,247.5208,Mr +0,3, Ellis Anna Maria Andersson,female,2,4,2,31.275,Miss +0,2, Stanley George Hickman,male,21,2,0,73.5,Mr +0,3, Leonard Charles Moore,male,19,0,0,8.05,Mr +0,2, Nicholas Nasser,male,32.5,1,0,30.0708,Mr +1,2, Susan Webber,female,32.5,0,0,13,Miss +0,1, Percival Wayland White,male,54,0,1,77.2875,Mr +1,3, Elias Nicola-Yarred,male,12,1,0,11.2417,Master +0,3, Martin McMahon,male,19,0,0,7.75,Mr +1,3, Fridtjof Arne Madsen,male,24,0,0,7.1417,Mr +1,3, Anna Peter,female,2,1,1,22.3583,Miss +0,3, Johan Ekstrom,male,45,0,0,6.975,Mr +0,3, Jozef Drazenoic,male,33,0,0,7.8958,Mr +0,3, Domingos Fernandeo Coelho,male,20,0,0,7.05,Mr +0,3, Alexander A (Grace Charity Laury) Robins,female,47,1,0,14.5,Mrs +1,2, Leopold (Mathilde Francoise Pede) Weisz,female,29,1,0,26,Mrs +0,2, Samuel James Hayden Sobey,male,25,0,0,13,Mr +0,2, Emile Richard,male,23,0,0,15.0458,Mr +1,1, Helen Monypeny Newsom,female,19,0,2,26.2833,Miss +0,1, Jacques Heath Futrelle,male,37,1,0,53.1,Mr +0,3, Olaf Elon Osen,male,16,0,0,9.2167,Mr +0,1, Victor Giglio,male,24,0,0,79.2,Mr +0,3, Joseph (Sultana) Boulos,female,40,0,2,15.2458,Mrs +1,3, Anna Sofia Nysten,female,22,0,0,7.75,Miss +1,3, Pekka Pietari (Elin Matilda Dolck) Hakkarainen,female,24,1,0,15.85,Mrs +0,3, Jeremiah Burke,male,19,0,0,6.75,Mr +0,2, Edgardo Samuel Andrew,male,18,0,0,11.5,Mr +0,2, Joseph Charles Nicholls,male,19,1,1,36.75,Mr +1,3, August Edvard Andersson,male,27,0,0,7.7958,Mr +0,3, Robina Maggie Ford,female,9,2,2,34.375,Miss +0,2, Michel Navratil,male,36.5,0,2,26,Mr +0,2, Thomas Roussel Davids Byles,male,42,0,0,13,Rev +0,2, Robert James Bateman,male,51,0,0,12.525,Rev +1,1, Thomas (Edith Wearne) Pears,female,22,1,0,66.6,Mrs +0,3, Alfonzo Meo,male,55.5,0,0,8.05,Mr +0,3, Austin Blyler van Billiard,male,40.5,0,2,14.5,Mr +0,3, Ole Martin Olsen,male,27,0,0,7.3125,Mr +0,1, Charles Duane Williams,male,51,0,1,61.3792,Mr +1,3, Katherine Gilnagh,female,16,0,0,7.7333,Miss +0,3, Harry Corn,male,30,0,0,8.05,Mr +0,3, Mile Smiljanic,male,37,0,0,8.6625,Mr +0,3, Thomas Henry Sage,male,5,8,2,69.55,Master +0,3, John Hatfield Cribb,male,44,0,1,16.1,Mr +1,2, James (Elizabeth Inglis Milne) Watt,female,40,0,0,15.75,Mrs +0,3, John Viktor Bengtsson,male,26,0,0,7.775,Mr +0,3, Jovo Calic,male,17,0,0,8.6625,Mr +0,3, Eino Viljami Panula,male,1,4,1,39.6875,Master +1,3, Frank John William Goldsmith,male,9,0,2,20.525,Master +1,1, (Edith Martha Bowerman) Chibnall,female,48,0,1,55,Mrs +0,3, William (Anna Bernhardina Karlsson) Skoog,female,45,1,4,27.9,Mrs +0,1, John D Baumann,male,60,0,0,25.925,Mr +0,3, Lee Ling,male,28,0,0,56.4958,Mr +0,1, Wyckoff Van der hoef,male,61,0,0,33.5,Mr +0,3, Arthur Rice,male,4,4,1,29.125,Master +1,3, Eleanor Ileen Johnson,female,1,1,1,11.1333,Miss +0,3, Antti Wilhelm Sivola,male,21,0,0,7.925,Mr +0,1, James Clinch Smith,male,56,0,0,30.6958,Mr +0,3, Klas Albin Klasen,male,18,1,1,7.8542,Mr +0,3, Henry Forbes Lefebre,male,5,3,1,25.4667,Master +0,1, Ann Elizabeth Isham,female,50,0,0,28.7125,Miss +0,2, Reginald Hale,male,30,0,0,13,Mr +0,3, Lionel Leonard,male,36,0,0,0,Mr +0,3, Constance Gladys Sage,female,8,8,2,69.55,Miss +0,2, Rene Pernot,male,39,0,0,15.05,Mr +0,3, Clarence Gustaf Hugo Asplund,male,9,4,2,31.3875,Master +1,2, Richard F Becker,male,1,2,1,39,Master +1,3, Luise Gretchen Kink-Heilmann,female,4,0,2,22.025,Miss +0,1, Hugh Roscoe Rood,male,39,0,0,50,Mr +1,3, Thomas (Johanna Godfrey) O'Brien,female,26,1,0,15.5,Mrs +1,1, Charles Hallace Romaine,male,45,0,0,26.55,Mr +0,3, John Bourke,male,40,1,1,15.5,Mr +0,3, Stjepan Turcin,male,36,0,0,7.8958,Mr +1,2, (Rosa) Pinsky,female,32,0,0,13,Mrs +0,2, William Carbines,male,19,0,0,13,Mr +1,3, Carla Christine Nielsine Andersen-Jensen,female,19,1,0,7.8542,Miss +1,2, Michel M Navratil,male,3,1,1,26,Master +1,1, James Joseph (Margaret Tobin) Brown,female,44,0,0,27.7208,Mrs +1,1, Elise Lurette,female,58,0,0,146.5208,Miss +0,3, Robert Mernagh,male,28,0,0,7.75,Mr +0,3, Karl Siegwart Andreas Olsen,male,42,0,1,8.4042,Mr +1,3, Margaret Madigan,female,21,0,0,7.75,Miss +0,2, Henriette Yrois,female,24,0,0,13,Miss +0,3, Nestor Cyriel Vande Walle,male,28,0,0,9.5,Mr +0,3, Frederick Sage,male,17,8,2,69.55,Mr +0,3, Jakob Alfred Johanson,male,34,0,0,6.4958,Mr +0,3, Gerious Youseff,male,45.5,0,0,7.225,Mr +1,3, Gurshon Cohen,male,18,0,0,8.05,Mr +0,3, Telma Matilda Strom,female,2,0,1,10.4625,Miss +0,3, Karl Alfred Backstrom,male,32,1,0,15.85,Mr +1,3, Nassef Cassem Albimona,male,26,0,0,18.7875,Mr +1,3, Helen Carr,female,16,0,0,7.75,Miss +1,1, Henry Blank,male,40,0,0,31,Mr +0,3, Ahmed Ali,male,24,0,0,7.05,Mr +1,2, Clear Annie Cameron,female,35,0,0,21,Miss +0,3, John Henry Perkin,male,22,0,0,7.25,Mr +0,2, Hans Kristensen Givard,male,30,0,0,13,Mr +0,3, Philip Kiernan,male,22,1,0,7.75,Mr +1,1, Madeleine Newell,female,31,1,0,113.275,Miss +1,3, Eliina Honkanen,female,27,0,0,7.925,Miss +0,2, Sidney Samuel Jacobsohn,male,42,1,0,27,Mr +1,1, Albina Bazzani,female,32,0,0,76.2917,Miss +0,2, Walter Harris,male,30,0,0,10.5,Mr +1,3, Victor Francis Sunderland,male,16,0,0,8.05,Mr +0,2, James H Bracken,male,27,0,0,13,Mr +0,3, George Henry Green,male,51,0,0,8.05,Mr +0,3, Christo Nenkoff,male,22,0,0,7.8958,Mr +1,1, Frederick Maxfield Hoyt,male,38,1,0,90,Mr +0,3, Karl Ivar Sven Berglund,male,22,0,0,9.35,Mr +1,2, William John Mellors,male,19,0,0,10.5,Mr +0,3, John Hall Lovell,male,20.5,0,0,7.25,Mr +0,2, Arne Jonas Fahlstrom,male,18,0,0,13,Mr +0,3, Mathilde Lefebre,female,12,3,1,25.4667,Miss +1,1, Henry Birkhardt (Irene Wallach) Harris,female,35,1,0,83.475,Mrs +0,3, Bengt Edvin Larsson,male,29,0,0,7.775,Mr +0,2, Ernst Adolf Sjostedt,male,59,0,0,13.5,Mr +1,3, Lillian Gertrud Asplund,female,5,4,2,31.3875,Miss +0,2, Robert William Norman Leyson,male,24,0,0,10.5,Mr +0,3, Alice Phoebe Harknett,female,21,0,0,7.55,Miss +0,2, Stephen Hold,male,44,1,0,26,Mr +1,2, Marjorie Collyer,female,8,0,2,26.25,Miss +0,2, Frederick William Pengelly,male,19,0,0,10.5,Mr +0,2, George Henry Hunt,male,33,0,0,12.275,Mr +0,3, Thamine Zabour,female,19,1,0,14.4542,Miss +1,3, Katherine Murphy,female,18,1,0,15.5,Miss +0,2, Reginald Charles Coleridge,male,29,0,0,10.5,Mr +0,3, Matti Alexanteri Maenpaa,male,22,0,0,7.125,Mr +0,3, Sleiman Attalah,male,30,0,0,7.225,Mr +0,1, William Edward Minahan,male,44,2,0,90,Dr +0,3, Agda Thorilda Viktoria Lindahl,female,25,0,0,7.775,Miss +1,2, William (Anna) Hamalainen,female,24,0,2,14.5,Mrs +1,1, Richard Leonard Beckwith,male,37,1,1,52.5542,Mr +0,2, Ernest Courtenay Carter,male,54,1,0,26,Rev +0,3, James George Reed,male,18,0,0,7.25,Mr +0,3, Wilhelm (Elna Matilda Persson) Strom,female,29,1,1,10.4625,Mrs +0,1, William Thomas Stead,male,62,0,0,26.55,Mr +0,3, William Arthur Lobb,male,30,1,0,16.1,Mr +0,3, Viktor (Helena Wilhelmina) Rosblom,female,41,0,2,20.2125,Mrs +1,3, Darwis (Hanne Youssef Razi) Touma,female,29,0,2,15.2458,Mrs +1,1, Gertrude Maybelle Thorne,female,38,0,0,79.2,Mrs +1,1, Gladys Cherry,female,30,0,0,86.5,Miss +1,1, Anna Ward,female,35,0,0,512.3292,Miss +1,2, (Lutie Davis) Parrish,female,50,0,1,26,Mrs +1,3, Edvin Rojj Felix Asplund,male,3,4,2,31.3875,Master +0,1, Emil Taussig,male,52,1,1,79.65,Mr +0,1, William Harrison,male,40,0,0,0,Mr +0,3, Delia Henry,female,21,0,0,7.75,Miss +0,2, David Reeves,male,36,0,0,10.5,Mr +0,3, Ernesti Arvid Panula,male,16,4,1,39.6875,Mr +1,3, Ernst Ulrik Persson,male,25,1,0,7.775,Mr +1,1, William Thompson (Edith Junkins) Graham,female,58,0,1,153.4625,Mrs +1,1, Amelia Bissette,female,35,0,0,135.6333,Miss +0,1, Alexander Cairns,male,28,0,0,31,Mr +1,3, William Henry Tornquist,male,25,0,0,0,Mr +1,2, (Elizabeth Anne Maidment) Mellinger,female,41,0,1,19.5,Mrs +0,1, Charles H Natsch,male,37,0,1,29.7,Mr +1,3, Hanora Healy,female,33,0,0,7.75,Miss +1,1, Kornelia Theodosia Andrews,female,63,1,0,77.9583,Miss +0,3, Augusta Charlotta Lindblom,female,45,0,0,7.75,Miss +0,2, Francis Parkes,male,21,0,0,0,Mr +0,3, Eric Rice,male,7,4,1,29.125,Master +1,3, Stanton (Rosa Hunt) Abbott,female,35,1,1,20.25,Mrs +0,3, Frank Duane,male,65,0,0,7.75,Mr +0,3, Nils Johan Goransson Olsson,male,28,0,0,7.8542,Mr +0,3, Alfons de Pelsmaeker,male,16,0,0,9.5,Mr +1,3, Edward Arthur Dorking,male,19,0,0,8.05,Mr +0,1, Richard William Smith,male,57,0,0,26,Mr +0,3, Ivan Stankovic,male,33,0,0,8.6625,Mr +1,3, Theodore de Mulder,male,30,0,0,9.5,Mr +0,3, Penko Naidenoff,male,22,0,0,7.8958,Mr +1,2, Masabumi Hosono,male,42,0,0,13,Mr +1,3, Kate Connolly,female,22,0,0,7.75,Miss +1,1, Ellen Barber,female,26,0,0,78.85,Miss +1,1, Dickinson H (Helen Walton) Bishop,female,19,1,0,91.0792,Mrs +0,2, Rene Jacques Levy,male,36,0,0,12.875,Mr +0,3, Aloisia Haas,female,24,0,0,8.85,Miss +0,3, Ivan Mineff,male,24,0,0,7.8958,Mr +0,1, Ervin G Lewy,male,30,0,0,27.7208,Mr +0,3, Mansour Hanna,male,23.5,0,0,7.2292,Mr +0,1, Helen Loraine Allison,female,2,1,2,151.55,Miss +1,1, Adolphe Saalfeld,male,47,0,0,30.5,Mr +1,1, James (Helene DeLaudeniere Chaput) Baxter,female,50,0,1,247.5208,Mrs +1,3, Anna Katherine Kelly,female,20,0,0,7.75,Miss +1,3, Bernard McCoy,male,24,2,0,23.25,Mr +0,3, William Cahoone Jr Johnson,male,19,0,0,0,Mr +1,2, Nora A Keane,female,46,0,0,12.35,Miss +0,3, Howard Hugh Williams,male,28,0,0,8.05,Mr +1,1, Hudson Trevor Allison,male,0.92,1,2,151.55,Master +1,1, Margaret Fleming,female,42,0,0,110.8833,Miss +1,1, Victor de Satode (Maria Josefa Perez de Soto y Vallejo) Penasco y Castellana,female,17,1,0,108.9,Mrs +0,2, Samuel Abelson,male,30,1,0,24,Mr +1,1, Laura Mabel Francatelli,female,30,0,0,56.9292,Miss +1,1, Margaret Bechstein Hays,female,24,0,0,83.1583,Miss +1,1, Emily Borie Ryerson,female,18,2,2,262.375,Miss +0,2, William (Anna Sylfven) Lahtinen,female,26,1,1,26,Mrs +0,3, Ignjac Hendekovic,male,28,0,0,7.8958,Mr +0,2, Benjamin Hart,male,43,1,1,26.25,Mr +1,3, Helmina Josefina Nilsson,female,26,0,0,7.8542,Miss +1,2, Sinai (Miriam Sternin) Kantor,female,24,1,0,26,Mrs +0,2, Ernest Moraweck,male,54,0,0,14,Dr +1,1, Mary Natalie Wick,female,31,0,2,164.8667,Miss +1,1, Frederic Oakley (Margaretta Corning Stone) Spedden,female,40,1,1,134.5,Mrs +0,3, Samuel Dennis,male,22,0,0,7.25,Mr +0,3, Yoto Danoff,male,27,0,0,7.8958,Mr +1,2, Hilda Mary Slayter,female,30,0,0,12.35,Miss +1,2, Albert Francis (Sylvia Mae Harbaugh) Caldwell,female,22,1,1,29,Mrs +0,3, George John Jr Sage,male,20,8,2,69.55,Mr +1,1, Marie Grice Young,female,36,0,0,135.6333,Miss +0,3, Johan Hansen Nysveen,male,61,0,0,6.2375,Mr +1,2, (Ada E Hall) Ball,female,36,0,0,13,Mrs +1,3, Frank John (Emily Alice Brown) Goldsmith,female,31,1,1,20.525,Mrs +1,1, Jean Gertrude Hippach,female,16,0,1,57.9792,Miss +1,3, Agnes McCoy,female,28,2,0,23.25,Miss +0,1, Austen Partner,male,45.5,0,0,28.5,Mr +0,1, George Edward Graham,male,38,0,1,153.4625,Mr +0,3, Leo Edmondus Vander Planke,male,16,2,0,18,Mr +1,1, Henry William (Clara Heinsheimer) Frauenthal,female,42,1,0,133.65,Mrs +0,3, Mitto Denkoff,male,30,0,0,7.8958,Mr +0,1, Thomas Clinton Pears,male,29,1,0,66.6,Mr +1,1, Elizabeth Margaret Burns,female,41,0,0,134.5,Miss +1,3, Karl Edwart Dahl,male,45,0,0,8.05,Mr +0,1, Stephen Weart Blackwell,male,45,0,0,35.5,Mr +1,2, Edmond Roger Navratil,male,2,1,1,26,Master +1,1, Alice Elizabeth Fortune,female,24,3,2,263,Miss +0,2, Erik Gustaf Collander,male,28,0,0,13,Mr +0,2, Charles Frederick Waddington Sedgwick,male,25,0,0,13,Mr +0,2, Stanley Hubert Fox,male,36,0,0,13,Mr +1,2, Amelia Brown,female,24,0,0,13,Miss +1,2, Marion Elsie Smith,female,40,0,0,13,Miss +1,3, Thomas Henry (Mary E Finck) Davison,female,34,1,0,16.1,Mrs +1,3, William Loch Coutts,male,3,1,1,15.9,Master +0,3, Jovan Dimic,male,42,0,0,8.6625,Mr +0,3, Nils Martin Odahl,male,23,0,0,9.225,Mr +0,1, Fletcher Fellows Williams-Lambert,male,43,0,0,35,Mr +0,3, Tannous Elias,male,15,1,1,7.2292,Mr +0,3, Josef Arnold-Franchi,male,25,1,0,17.8,Mr +0,3, Wazli Yousif,male,23,0,0,7.225,Mr +0,3, Leo Peter Vanden Steen,male,28,0,0,9.5,Mr +1,1, Elsie Edith Bowerman,female,22,0,1,55,Miss +0,2, Annie Clemmer Funk,female,38,0,0,13,Miss +1,3, Mary McGovern,female,22,0,0,7.8792,Miss +1,3, Helen Mary Mockler,female,23,0,0,7.8792,Miss +0,3, Wilhelm Skoog,male,40,1,4,27.9,Mr +0,2, Sebastiano del Carlo,male,29,1,0,27.7208,Mr +0,3, (Catherine David) Barbara,female,45,0,1,14.4542,Mrs +0,3, Adola Asim,male,35,0,0,7.05,Mr +0,3, Thomas O'Brien,male,27,1,0,15.5,Mr +0,3, Mauritz Nils Martin Adahl,male,30,0,0,7.25,Mr +1,1, Frank Manley (Anna Sophia Atkinson) Warren,female,60,1,0,75.25,Mrs +1,3, (Mantoura Boulos) Moussa,female,35,0,0,7.2292,Mrs +1,3, Annie Jermyn,female,22,0,0,7.75,Miss +1,1, Leontine Pauline Aubart,female,24,0,0,69.3,Mme +1,1, George Achilles Harder,male,25,1,0,55.4417,Mr +0,3, Jakob Alfred Wiklund,male,18,1,0,6.4958,Mr +0,3, William Thomas Beavan,male,19,0,0,8.05,Mr +0,1, Sante Ringhini,male,22,0,0,135.6333,Mr +0,3, Stina Viola Palsson,female,3,3,1,21.075,Miss +1,1, Edgar Joseph (Leila Saks) Meyer,female,25,1,0,82.1708,Mrs +1,3, Aurora Adelia Landergren,female,22,0,0,7.25,Miss +0,1, Harry Elkins Widener,male,27,0,2,211.5,Mr +0,3, Tannous Betros,male,20,0,0,4.0125,Mr +0,3, Karl Gideon Gustafsson,male,19,0,0,7.775,Mr +1,1, Rosalie Bidois,female,42,0,0,227.525,Miss +1,3, Maria Nakid,female,1,0,2,15.7417,Miss +0,3, Juho Tikkanen,male,32,0,0,7.925,Mr +1,1, Alexander Oskar (Mary Aline Towner) Holverson,female,35,1,0,52,Mrs +0,3, Vasil Plotcharsky,male,27,0,0,7.8958,Mr +0,2, Charles Henry Davies,male,18,0,0,73.5,Mr +0,3, Sidney Leonard Goodwin,male,1,5,2,46.9,Master +1,2, Kate Buss,female,36,0,0,13,Miss +0,3, Matthew Sadlier,male,19,0,0,7.7292,Mr +1,2, Bertha Lehmann,female,17,0,0,12,Miss +1,1, William Ernest Carter,male,36,1,2,120,Mr +1,3, Carl Olof Jansson,male,21,0,0,7.7958,Mr +0,3, Johan Birger Gustafsson,male,28,2,0,7.925,Mr +1,1, Marjorie Newell,female,23,1,0,113.275,Miss +1,3, Hjalmar (Agnes Charlotta Bengtsson) Sandstrom,female,24,0,2,16.7,Mrs +0,3, Erik Johansson,male,22,0,0,7.7958,Mr +0,3, Elina Olsson,female,31,0,0,7.8542,Miss +0,2, Peter David McKane,male,46,0,0,26,Mr +0,2, Alfred Pain,male,23,0,0,10.5,Dr +1,2, William H (Jessie L) Trout,female,28,0,0,12.65,Mrs +1,3, Juha Niskanen,male,39,0,0,7.925,Mr +0,3, John Adams,male,26,0,0,8.05,Mr +0,3, Mari Aina Jussila,female,21,1,0,9.825,Miss +0,3, Pekka Pietari Hakkarainen,male,28,1,0,15.85,Mr +0,3, Marija Oreskovic,female,20,0,0,8.6625,Miss +0,2, Shadrach Gale,male,34,1,0,21,Mr +0,3, Carl/Charles Peter Widegren,male,51,0,0,7.75,Mr +1,2, William Rowe Richards,male,3,1,1,18.75,Master +0,3, Hans Martin Monsen Birkeland,male,21,0,0,7.775,Mr +0,3, Ida Lefebre,female,3,3,1,25.4667,Miss +0,3, Todor Sdycoff,male,42,0,0,7.8958,Mr +0,3, Henry Hart,male,27,0,0,6.8583,Mr +1,1, Daisy E Minahan,female,33,1,0,90,Miss +0,2, Alfred Fleming Cunningham,male,22,0,0,0,Mr +1,3, Johan Julian Sundman,male,44,0,0,7.925,Mr +0,3, Thomas (Annie Louise Rowley) Meek,female,32,0,0,8.05,Mrs +1,2, James Vivian (Lulu Thorne Christian) Drew,female,34,1,1,32.5,Mrs +1,2, Lyyli Karoliina Silven,female,18,0,2,13,Miss +0,2, William John Matthews,male,30,0,0,13,Mr +0,3, Catharina Van Impe,female,10,0,2,24.15,Miss +0,3, David Charters,male,21,0,0,7.7333,Mr +0,3, Leo Zimmerman,male,29,0,0,7.875,Mr +0,3, Ernst Gilbert (Anna Sigrid Maria Brogren) Danbom,female,28,1,1,14.4,Mrs +0,3, Viktor Richard Rosblom,male,18,1,1,20.2125,Mr +0,3, Phillippe Wiseman,male,54,0,0,7.25,Mr +1,2, Charles V (Ada Maria Winfield) Clarke,female,28,1,0,26,Mrs +1,2, Kate Florence Phillips,female,19,0,0,26,Miss +0,3, James Flynn,male,28,0,0,7.75,Mr +1,3, Berk (Berk Trembisky) Pickard,male,32,0,0,8.05,Mr +1,1, Mauritz Hakan Bjornstrom-Steffansson,male,28,0,0,26.55,Mr +1,3, Percival (Florence Kate White) Thorneycroft,female,33,1,0,16.1,Mrs +1,2, Charles Alexander (Alice Adelaide Slow) Louch,female,42,1,0,26,Mrs +0,3, Nikolai Erland Kallio,male,17,0,0,7.125,Mr +0,1, William Baird Silvey,male,50,1,0,55.9,Mr +1,1, Lucile Polk Carter,female,14,1,2,120,Miss +0,3, Doolina Margaret Ford,female,21,2,2,34.375,Miss +1,2, Sidney (Emily Hocking) Richards,female,24,2,3,18.75,Mrs +0,1, Mark Fortune,male,64,1,4,263,Mr +0,2, Johan Henrik Johannesson Kvillner,male,31,0,0,10.5,Mr +1,2, Benjamin (Esther Ada Bloomfield) Hart,female,45,1,1,26.25,Mrs +0,3, Leon Hampe,male,20,0,0,9.5,Mr +0,3, Johan Emil Petterson,male,25,1,0,7.775,Mr +1,2, Encarnacion Reynaldo,female,28,0,0,13,Ms +1,3, Bernt Johannesen-Bratthammer,male,29,0,0,8.1125,Mr +1,1, Washington Dodge,male,4,0,2,81.8583,Master +1,2, Madeleine Violet Mellinger,female,13,0,1,19.5,Miss +1,1, Frederic Kimber Seward,male,34,0,0,26.55,Mr +1,3, Marie Catherine Baclini,female,5,2,1,19.2583,Miss +1,1, Arthur Godfrey Peuchen,male,52,0,0,30.5,Major +0,2, Edwy Arthur West,male,36,1,2,27.75,Mr +0,3, Ingvald Olai Olsen Hagland,male,28,1,0,19.9667,Mr +0,1, Benjamin Laventall Foreman,male,30,0,0,27.75,Mr +1,1, Samuel L Goldenberg,male,49,1,0,89.1042,Mr +0,3, Joseph Peduzzi,male,24,0,0,8.05,Mr +1,3, Ivan Jalsevac,male,29,0,0,7.8958,Mr +0,1, Francis Davis Millet,male,65,0,0,26.55,Mr +1,1, Frederick R (Marion) Kenyon,female,41,1,0,51.8625,Mrs +1,2, Ellen Toomey,female,50,0,0,10.5,Miss +0,3, Maurice O'Connor,male,17,0,0,7.75,Mr +1,1, Harry Anderson,male,48,0,0,26.55,Mr +0,3, William Morley,male,34,0,0,8.05,Mr +0,1, Arthur H Gee,male,47,0,0,38.5,Mr +0,2, Jacob Christian Milling,male,48,0,0,13,Mr +0,3, Simon Maisner,male,34,0,0,8.05,Mr +0,3, Manuel Estanslas Goncalves,male,38,0,0,7.05,Mr +0,2, William Campbell,male,21,0,0,0,Mr +0,1, John Montgomery Smart,male,56,0,0,26.55,Mr +0,3, James Scanlan,male,22,0,0,7.725,Mr +1,3, Helene Barbara Baclini,female,0.75,2,1,19.2583,Miss +0,3, Arthur Keefe,male,39,0,0,7.25,Mr +0,3, Luka Cacic,male,38,0,0,8.6625,Mr +1,2, Edwy Arthur (Ada Mary Worth) West,female,33,1,2,27.75,Mrs +1,2, Amin S (Marie Marthe Thuillard) Jerwan,female,23,0,0,13.7917,Mrs +0,3, Ida Sofia Strandberg,female,22,0,0,9.8375,Miss +0,1, George Quincy Clifford,male,40,0,0,52,Mr +0,2, Peter Henry Renouf,male,34,1,0,21,Mr +0,3, Lewis Richard Braund,male,29,1,0,7.0458,Mr +0,3, Nils August Karlsson,male,22,0,0,7.5208,Mr +1,3, Hildur E Hirvonen,female,2,0,1,12.2875,Miss +0,3, Harold Victor Goodwin,male,9,5,2,46.9,Master +0,2, Anthony Wood Frost,male,37,0,0,0,Mr +0,3, Richard Henry Rouse,male,50,0,0,8.05,Mr +1,3, (Hedwig) Turkula,female,63,0,0,9.5875,Mrs +1,1, Dickinson H Bishop,male,25,1,0,91.0792,Mr +0,3, Jeannie Lefebre,female,8,3,1,25.4667,Miss +1,1, Frederick Maxfield (Jane Anne Forby) Hoyt,female,35,1,0,90,Mrs +0,1, Edward Austin Kent,male,58,0,0,29.7,Mr +0,3, Francis William Somerton,male,30,0,0,8.05,Mr +1,3, Eden Leslie Coutts,male,9,1,1,15.9,Master +0,3, Konrad Mathias Reiersen Hagland,male,19,1,0,19.9667,Mr +0,3, Einar Windelov,male,21,0,0,7.25,Mr +0,1, Harry Markland Molson,male,55,0,0,30.5,Mr +0,1, Ramon Artagaveytia,male,71,0,0,49.5042,Mr +0,3, Edward Roland Stanley,male,21,0,0,8.05,Mr +0,3, Gerious Yousseff,male,26,0,0,14.4583,Mr +1,1, Elizabeth Mussey Eustis,female,54,1,0,78.2667,Miss +0,3, Frederick William Shellard,male,55,0,0,15.1,Mr +0,1, Hudson J C (Bessie Waldo Daniels) Allison,female,25,1,2,151.55,Mrs +0,3, Olof Svensson,male,24,0,0,7.7958,Mr +0,3, Petar Calic,male,17,0,0,8.6625,Mr +0,3, Mary Canavan,female,21,0,0,7.75,Miss +0,3, Bridget Mary O'Sullivan,female,21,0,0,7.6292,Miss +0,3, Kristina Sofia Laitinen,female,37,0,0,9.5875,Miss +1,1, Roberta Maioni,female,16,0,0,86.5,Miss +0,1, Victor de Satode Penasco y Castellana,male,18,1,0,108.9,Mr +1,2, Frederick Charles (Jane Richards) Quick,female,33,0,2,26,Mrs +1,1, George Bradley,male,37,0,0,26.55,Mr +0,3, Henry Margido Olsen,male,28,0,0,22.525,Mr +1,3, Fang Lang,male,26,0,0,56.4958,Mr +1,3, Eugene Patrick Daly,male,29,0,0,7.75,Mr +0,3, James Webber,male,66,0,0,8.05,Mr +1,1, James Robert McGough,male,36,0,0,26.2875,Mr +1,1, Martin (Elizabeth L,female,54,1,0,59.4,Mrs +0,3, Satio Coleff,male,24,0,0,7.4958,Mr +0,1, William Anderson Walker,male,47,0,0,34.0208,Mr +1,2, (Amelia Milley) Lemore,female,34,0,0,10.5,Mrs +0,3, Patrick Ryan,male,30,0,0,24.15,Mr +1,2, William A (Florence Agnes Hughes) Angle,female,36,1,0,26,Mrs +0,3, Stefo Pavlovic,male,32,0,0,7.8958,Mr +1,1, Anne Perreault,female,30,0,0,93.5,Miss +0,3, Janko Vovk,male,22,0,0,7.8958,Mr +0,3, Sarkis Lahoud,male,35,0,0,7.225,Mr +1,1, Louis Albert (Ida Sophia Fischer) Hippach,female,44,0,1,57.9792,Mrs +0,3, Fared Kassem,male,18,0,0,7.2292,Mr +0,3, James Farrell,male,40.5,0,0,7.75,Mr +1,2, Lucy Ridsdale,female,50,0,0,10.5,Miss +0,1, John Farthing,male,49,0,0,221.7792,Mr +0,3, Johan Werner Salonen,male,39,0,0,7.925,Mr +0,2, Richard George Hocking,male,23,2,1,11.5,Mr +1,2, Phyllis May Quick,female,2,1,1,26,Miss +0,3, Nakli Toufik,male,17,0,0,7.2292,Mr +0,3, Joseph Jr Elias,male,17,1,1,7.2292,Mr +1,3, Catherine (Catherine Rizk) Peter,female,24,0,2,22.3583,Mrs +0,3, Marija Cacic,female,30,0,0,8.6625,Miss +1,2, Eva Miriam Hart,female,7,0,2,26.25,Miss +0,1, Archibald Willingham Butt,male,45,0,0,26.55,Major +1,1, Bertha LeRoy,female,30,0,0,106.425,Miss +0,3, Samuel Beard Risien,male,69,0,0,14.5,Mr +1,1, Hedwig Margaritha Frolicher,female,22,0,2,49.5,Miss +1,1, Harriet R Crosby,female,36,0,2,71,Miss +0,3, Ingeborg Constanzia Andersson,female,9,4,2,31.275,Miss +0,3, Sigrid Elisabeth Andersson,female,11,4,2,31.275,Miss +1,2, Edward Beane,male,32,1,0,26,Mr +0,1, Walter Donald Douglas,male,50,1,0,106.425,Mr +0,1, Arthur Ernest Nicholson,male,64,0,0,26,Mr +1,2, Edward (Ethel Clarke) Beane,female,19,1,0,26,Mrs +1,2, Julian Padro y Manent,male,27,0,0,13.8625,Mr +0,3, Frank John Goldsmith,male,33,1,1,20.525,Mr +1,2, John Morgan Jr Davies,male,8,1,1,36.75,Master +1,1, John Borland Jr Thayer,male,17,0,2,110.8833,Mr +0,2, Percival James R Sharp,male,27,0,0,26,Mr +0,3, Timothy O'Brien,male,21,0,0,7.8292,Mr +1,3, Fahim Leeni,male,22,0,0,7.225,Mr +1,3, Velin Ohman,female,22,0,0,7.775,Miss +0,1, George Wright,male,62,0,0,26.55,Mr +1,1, (Lucille Christiana Sutherland)Duff Gordon,female,48,1,0,39.6,Lady +0,1, Victor Robbins,male,45,0,0,227.525,Mr +1,1, Emil (Tillie Mandelbaum) Taussig,female,39,1,1,79.65,Mrs +1,3, Guillaume Joseph (Emma) de Messemaeker,female,36,1,0,17.4,Mrs +0,3, Thomas Rowan Morrow,male,30,0,0,7.75,Mr +0,3, Husein Sivic,male,40,0,0,7.8958,Mr +0,2, Robert Douglas Norman,male,28,0,0,13.5,Mr +0,3, John Simmons,male,40,0,0,8.05,Mr +0,3, (Marion Ogden) Meanwell,female,62,0,0,8.05,Miss +0,3, Alfred J Davies,male,24,2,0,24.15,Mr +0,3, Ilia Stoytcheff,male,19,0,0,7.8958,Mr +0,3, Nils (Alma Cornelia Berglund) Palsson,female,29,0,4,21.075,Mrs +0,3, Tannous Doharr,male,28,0,0,7.2292,Mr +1,3, Carl Jonsson,male,32,0,0,7.8542,Mr +1,2, George Harris,male,62,0,0,10.5,Mr +1,1, Edward Dale (Charlotte Lamson) Appleton,female,53,2,0,51.4792,Mrs +1,1, John Irwin Flynn,male,36,0,0,26.3875,Mr +1,3, Mary Kelly,female,22,0,0,7.75,Miss +0,3, Alfred George John Rush,male,16,0,0,8.05,Mr +0,3, George Patchett,male,19,0,0,14.5,Mr +1,2, Ethel Garside,female,34,0,0,13,Miss +1,1, William Baird (Alice Munger) Silvey,female,39,1,0,55.9,Mrs +0,3, Joseph (Maria Elias) Caram,female,18,1,0,14.4583,Mrs +1,3, Eiriik Jussila,male,32,0,0,7.925,Mr +1,2, Julie Rachel Christy,female,25,1,1,30,Miss +1,1, John Borland (Marian Longstreth Morris) Thayer,female,39,1,1,110.8833,Mrs +0,2, William James Downton,male,54,0,0,26,Mr +0,1, John Hugo Ross,male,36,0,0,40.125,Mr +0,3, Uscher Paulner,male,16,0,0,8.7125,Mr +1,1, Ruth Taussig,female,18,0,2,79.65,Miss +0,2, John Denzil Jarvis,male,47,0,0,15,Mr +1,1, Maxmillian Frolicher-Stehli,male,60,1,1,79.2,Mr +0,3, Eliezer Gilinski,male,22,0,0,8.05,Mr +0,3, Joseph Murdlin,male,22,0,0,8.05,Mr +0,3, Matti Rintamaki,male,35,0,0,7.125,Mr +1,1, Walter Bertram (Martha Eustis) Stephenson,female,52,1,0,78.2667,Mrs +0,3, William James Elsbury,male,47,0,0,7.25,Mr +0,3, Mary Bourke,female,40,0,2,7.75,Miss +0,2, John Henry Chapman,male,37,1,0,26,Mr +0,3, Jean Baptiste Van Impe,male,36,1,1,24.15,Mr +1,2, Jessie Wills Leitch,female,31,0,0,33,Miss +0,3, Alfred Johnson,male,49,0,0,0,Mr +0,3, Hanna Boulos,male,18,0,0,7.225,Mr +1,1, Cosmo Edmund Duff Gordon,male,49,1,0,56.9292,Sir +1,2, Sidney Samuel (Amy Frances Christy) Jacobsohn,female,24,2,1,27,Mrs +0,3, Petco Slabenoff,male,42,0,0,7.8958,Mr +0,1, Charles H Harrington,male,37,0,0,42.4,Mr +0,3, Ernst William Torber,male,44,0,0,8.05,Mr +1,1, Harry Homer,male,35,0,0,26.55,Mr +0,3, Edvard Bengtsson Lindell,male,36,1,0,15.55,Mr +0,3, Milan Karaic,male,30,0,0,7.8958,Mr +1,1, Robert Williams Daniel,male,27,0,0,30.5,Mr +1,2, Joseph (Juliette Marie Louise Lafargue) Laroche,female,22,1,2,41.5792,Mrs +1,1, Elizabeth W Shutes,female,40,0,0,153.4625,Miss +0,3, Anders Johan (Alfrida Konstantia Brogren) Andersson,female,39,1,5,31.275,Mrs +0,3, Jose Neto Jardin,male,21,0,0,7.05,Mr +1,3, Margaret Jane Murphy,female,18,1,0,15.5,Miss +0,3, John Horgan,male,22,0,0,7.75,Mr +0,3, William Alfred Brocklebank,male,35,0,0,8.05,Mr +1,2, Alice Herman,female,24,1,2,65,Miss +0,3, Ernst Gilbert Danbom,male,34,1,1,14.4,Mr +0,3, William Arthur (Cordelia K Stanlick) Lobb,female,26,1,0,16.1,Mrs +1,2, Marion Louise Becker,female,4,2,1,39,Miss +0,2, Lawrence Gavey,male,26,0,0,10.5,Mr +0,3, Antoni Yasbeck,male,27,1,0,14.4542,Mr +1,1, Edwin Nelson Jr Kimball,male,42,1,0,52.5542,Mr +1,3, Sahid Nakid,male,20,1,1,15.7417,Mr +0,3, Henry Damsgaard Hansen,male,21,0,0,7.8542,Mr +0,3, David John Bowen,male,21,0,0,16.1,Mr +0,1, Frederick Sutton,male,61,0,0,32.3208,Mr +0,2, Charles Leonard Kirkland,male,57,0,0,12.35,Rev +1,1, Gretchen Fiske Longley,female,21,0,0,77.9583,Miss +0,3, Guentcho Bostandyeff,male,26,0,0,7.8958,Mr +0,3, Patrick D O'Connell,male,18,0,0,7.7333,Mr +1,1, Algernon Henry Wilson Barkworth,male,80,0,0,30,Mr +0,3, Johan Svensson Lundahl,male,51,0,0,7.0542,Mr +1,1, Max Stahelin-Maeglin,male,32,0,0,30.5,Dr +0,1, William Henry Marsh Parr,male,30,0,0,0,Mr +0,3, Mabel Skoog,female,9,3,2,27.9,Miss +1,2, Mary Davis,female,28,0,0,13,Miss +0,3, Antti Gustaf Leinonen,male,32,0,0,7.925,Mr +0,2, Harvey Collyer,male,31,1,1,26.25,Mr +0,3, Juha (Maria Emilia Ojala) Panula,female,41,0,5,39.6875,Mrs +0,3, Percival Thorneycroft,male,37,1,0,16.1,Mr +0,3, Hans Peder Jensen,male,20,0,0,7.8542,Mr +1,1, Emma Sagesser,female,24,0,0,69.3,Mlle +0,3, Margit Elizabeth Skoog,female,2,3,2,27.9,Miss +1,3, Choong Foo,male,32,0,0,56.4958,Mr +1,3, Eugenie Baclini,female,0.75,2,1,19.2583,Miss +1,1, Henry Sleeper Harper,male,48,1,0,76.7292,Mr +0,3, Liudevit Cor,male,19,0,0,7.8958,Mr +1,1, Oberst Alfons Simonius-Blumer,male,56,0,0,35.5,Col +0,3, Edward Willey,male,21,0,0,7.55,Mr +1,3, Amy Zillah Elsie Stanley,female,23,0,0,7.55,Miss +0,3, Mito Mitkoff,male,23,0,0,7.8958,Mr +1,2, Elsie Doling,female,18,0,1,23,Miss +0,3, Johannes Halvorsen Kalvik,male,21,0,0,8.4333,Mr +1,3, Hanora O'Leary,female,16,0,0,7.8292,Miss +0,3, Hanora Hegarty,female,18,0,0,6.75,Miss +0,2, Leonard Mark Hickman,male,24,2,0,73.5,Mr +0,3, Alexander Radeff,male,27,0,0,7.8958,Mr +0,3, John (Catherine) Bourke,female,32,1,1,15.5,Mrs +0,2, George Floyd Eitemiller,male,23,0,0,13,Mr +0,1, Arthur Webster Newell,male,58,0,2,113.275,Mr +1,1, Henry William Frauenthal,male,50,2,0,133.65,Dr +0,3, Mohamed Badt,male,40,0,0,7.225,Mr +0,1, Edward Pomeroy Colley,male,47,0,0,25.5875,Mr +0,3, Peju Coleff,male,36,0,0,7.4958,Mr +1,3, Eino William Lindqvist,male,20,1,0,7.925,Mr +0,2, Lewis Hickman,male,32,2,0,73.5,Mr +0,2, Reginald Fenton Butler,male,25,0,0,13,Mr +0,3, Knud Paust Rommetvedt,male,49,0,0,7.775,Mr +0,3, Jacob Cook,male,43,0,0,8.05,Mr +1,1, Elmer Zebley (Juliet Cummins Wright) Taylor,female,48,1,0,52,Mrs +1,2, Thomas William Solomon (Elizabeth Catherine Ford) Brown,female,40,1,1,39,Mrs +0,1, Thornton Davidson,male,31,1,0,52,Mr +0,2, Henry Michael Mitchell,male,70,0,0,10.5,Mr +1,2, Charles Wilhelms,male,31,0,0,13,Mr +0,2, Ennis Hastings Watson,male,19,0,0,0,Mr +0,3, Gustaf Hjalmar Edvardsson,male,18,0,0,7.775,Mr +0,3, Frederick Charles Sawyer,male,24.5,0,0,8.05,Mr +1,3, Anna Sofia Turja,female,18,0,0,9.8417,Miss +0,3, Frederick (Augusta Tyler) Goodwin,female,43,1,6,46.9,Mrs +1,1, Thomas Drake Martinez Cardeza,male,36,0,1,512.3292,Mr +0,3, Katie Peters,female,28,0,0,8.1375,Miss +1,1, Hammad Hassab,male,27,0,0,76.7292,Mr +0,3, Thor Anderson Olsvigen,male,20,0,0,9.225,Mr +0,3, Charles Edward Goodwin,male,14,5,2,46.9,Mr +0,2, Thomas William Solomon Brown,male,60,1,1,39,Mr +0,2, Joseph Philippe Lemercier Laroche,male,25,1,2,41.5792,Mr +0,3, Jaako Arnold Panula,male,14,4,1,39.6875,Mr +0,3, Branko Dakic,male,19,0,0,10.1708,Mr +0,3, Eberhard Thelander Fischer,male,18,0,0,7.7958,Mr +1,1, Georgette Alexandra Madill,female,15,0,1,211.3375,Miss +1,1, Albert Adrian Dick,male,31,1,0,57,Mr +1,3, Manca Karun,female,4,0,1,13.4167,Miss +1,3, Ali Lam,male,37,0,0,56.4958,Mr +0,3, Khalil Saad,male,25,0,0,7.225,Mr +0,1, John Weir,male,60,0,0,26.55,Col +0,2, Charles Henry Chapman,male,52,0,0,13.5,Mr +0,3, James Kelly,male,44,0,0,8.05,Mr +1,3, Katherine Mullens,female,19,0,0,7.7333,Miss +0,1, John Borland Thayer,male,49,1,1,110.8833,Mr +0,3, Adolf Mathias Nicolai Olsen Humblen,male,42,0,0,7.65,Mr +1,1, John Jacob (Madeleine Talmadge Force) Astor,female,18,1,0,227.525,Mrs +1,1, Spencer Victor Silverthorne,male,35,0,0,26.2875,Mr +0,3, Saiide Barbara,female,18,0,1,14.4542,Miss +0,3, Martin Gallagher,male,25,0,0,7.7417,Mr +0,3, Henrik Juul Hansen,male,26,1,0,7.8542,Mr +0,2, Henry Samuel Morley,male,39,0,0,26,Mr +1,2, Florence Kelly,female,45,0,0,13.5,Mrs +1,1, Edward Pennington Calderhead,male,42,0,0,26.2875,Mr +1,1, Alice Cleaver,female,22,0,0,151.55,Miss +1,3, Halim Gonios Moubarek,male,4,1,1,15.2458,Master +1,1, Berthe Antonine Mayne,female,24,0,0,49.5042,Mlle +0,1, Herman Klaber,male,41,0,0,26.55,Mr +1,1, Elmer Zebley Taylor,male,48,1,0,52,Mr +0,3, August Viktor Larsson,male,29,0,0,9.4833,Mr +0,2, Samuel Greenberg,male,52,0,0,13,Mr +0,3, Peter Andreas Lauritz Andersen Soholt,male,19,0,0,7.65,Mr +1,1, Caroline Louise Endres,female,38,0,0,227.525,Miss +1,2, Edwina Celia Troutt,female,27,0,0,10.5,Miss +0,3, Malkolm Joackim Johnson,male,33,0,0,7.775,Mr +1,2, Annie Jessie Harper,female,6,0,1,33,Miss +0,3, Svend Lauritz Jensen,male,17,1,0,7.0542,Mr +0,2, William Henry Gillespie,male,34,0,0,13,Mr +0,2, Henry Price Hodges,male,50,0,0,13,Mr +1,1, Norman Campbell Chambers,male,27,1,0,53.1,Mr +0,3, Luka Oreskovic,male,20,0,0,8.6625,Mr +1,2, Peter Henry (Lillian Jefferys) Renouf,female,30,3,0,21,Mrs +1,3, Margareth Mannion,female,28,0,0,7.7375,Miss +0,2, Kurt Arnold Gottfrid Bryhl,male,25,1,0,26,Mr +0,3, Pieta Sofia Ilmakangas,female,25,1,0,7.925,Miss +1,1, Elisabeth Walton Allen,female,29,0,0,211.3375,Miss +0,3, Houssein G N Hassan,male,11,0,0,18.7875,Mr +0,2, Robert J Knight,male,41,0,0,0,Mr +0,2, William John Berriman,male,23,0,0,13,Mr +0,2, Moses Aaron Troupiansky,male,23,0,0,13,Mr +0,3, Leslie Williams,male,28.5,0,0,16.1,Mr +0,3, Edward (Margaret Ann Watson) Ford,female,48,1,3,34.375,Mrs +1,1, Gustave J Lesurer,male,35,0,0,512.3292,Mr +0,3, Kanio Ivanoff,male,20,0,0,7.8958,Mr +0,3, Minko Nankoff,male,32,0,0,7.8958,Mr +1,1, Walter James Hawksford,male,45,0,0,30,Mr +0,1, Tyrell William Cavendish,male,36,1,0,78.85,Mr +1,1, Susan Parker Ryerson,female,21,2,2,262.375,Miss +0,3, Neal McNamee,male,24,1,0,16.1,Mr +1,3, Juho Stranden,male,31,0,0,7.925,Mr +0,1, Edward Gifford Crosby,male,70,1,1,71,Capt +0,3, Rossmore Edward Abbott,male,16,1,1,20.25,Mr +1,2, Anna Sinkkonen,female,30,0,0,13,Miss +0,1, Daniel Warner Marvin,male,19,1,0,53.1,Mr +0,3, Michael Connaghton,male,31,0,0,7.75,Mr +1,2, Joan Wells,female,4,1,1,23,Miss +1,3, Meier Moor,male,6,0,1,12.475,Master +0,3, Johannes Joseph Vande Velde,male,33,0,0,9.5,Mr +0,3, Lalio Jonkoff,male,23,0,0,7.8958,Mr +1,2, Samuel (Jane Laver) Herman,female,48,1,2,65,Mrs +1,2, Viljo Hamalainen,male,0.67,1,1,14.5,Master +0,3, August Sigfrid Carlsson,male,28,0,0,7.7958,Mr +0,2, Percy Andrew Bailey,male,18,0,0,11.5,Mr +0,3, Thomas Leonard Theobald,male,34,0,0,8.05,Mr +1,1, of (Lucy Noel Martha Dyer-Edwards) Rothes,female,33,0,0,86.5,the Countess +0,3, John Garfirth,male,23,0,0,14.5,Mr +0,3, Iisakki Antino Aijo Nirva,male,41,0,0,7.125,Mr +1,3, Hanna Assi Barah,male,20,0,0,7.2292,Mr +1,1, William Ernest (Lucile Polk) Carter,female,36,1,2,120,Mrs +0,3, Hans Linus Eklund,male,16,0,0,7.775,Mr +1,1, John C (Anna Andrews) Hogeboom,female,51,1,0,77.9583,Mrs +0,1, Arthur Jackson Brewe,male,46,0,0,39.6,Dr +0,3, Mary Mangan,female,30.5,0,0,7.75,Miss +0,3, Daniel J Moran,male,28,1,0,24.15,Mr +0,3, Daniel Danielsen Gronnestad,male,32,0,0,8.3625,Mr +0,3, Rene Aime Lievens,male,24,0,0,9.5,Mr +0,3, Niels Peder Jensen,male,48,0,0,7.8542,Mr +0,2, (Mary) Mack,female,57,0,0,10.5,Mrs +0,3, Dibo Elias,male,29,0,0,7.225,Mr +1,2, Elizabeth (Eliza Needs) Hocking,female,54,1,3,23,Mrs +0,3, Pehr Fabian Oliver Malkolm Myhrman,male,18,0,0,7.75,Mr +0,3, Roger Tobin,male,20,0,0,7.75,Mr +1,3, Virginia Ethel Emanuel,female,5,0,0,12.475,Miss +0,3, Thomas J Kilgannon,male,22,0,0,7.7375,Mr +1,1, Edward Scott (Elisabeth Walton McMillan) Robert,female,43,0,1,211.3375,Mrs +1,3, Banoura Ayoub,female,13,0,0,7.2292,Miss +1,1, Albert Adrian (Vera Gillespie) Dick,female,17,1,0,57,Mrs +0,1, Milton Clyde Long,male,29,0,0,30,Mr +0,3, Andrew G Johnston,male,35,1,2,23.45,Mr +0,3, William Ali,male,25,0,0,7.05,Mr +0,3, Abraham (David Lishin) Harmer,male,25,0,0,7.25,Mr +1,3, Anna Sofia Sjoblom,female,18,0,0,7.4958,Miss +0,3, George Hugh Rice,male,8,4,1,29.125,Master +1,3, Bertram Vere Dean,male,1,1,2,20.575,Master +0,1, Benjamin Guggenheim,male,46,0,0,79.2,Mr +0,3, Andrew Keane,male,20,0,0,7.75,Mr +0,2, Alfred Gaskell,male,16,0,0,26,Mr +0,3, Stella Anna Sage,female,21,8,2,69.55,Miss +0,1, William Fisher Hoyt,male,43,0,0,30.6958,Mr +0,3, Ristiu Dantcheff,male,25,0,0,7.8958,Mr +0,2, Richard Otter,male,39,0,0,13,Mr +1,1, Alice (Farnham) Leader,female,49,0,0,25.9292,Dr +1,3, Mara Osman,female,31,0,0,8.6833,Mrs +0,3, Yousseff Ibrahim Shawah,male,30,0,0,7.2292,Mr +0,3, Jean Baptiste (Rosalie Paula Govaert) Van Impe,female,30,1,1,24.15,Mrs +0,2, Martin Ponesell,male,34,0,0,13,Mr +1,2, Harvey (Charlotte Annie Tate) Collyer,female,31,1,1,26.25,Mrs +1,1, William Thornton II Carter,male,11,1,2,120,Master +1,3, Assad Alexander Thomas,male,0.42,0,1,8.5167,Master +1,3, Oskar Arvid Hedman,male,27,0,0,6.975,Mr +0,3, Karl Johan Johansson,male,31,0,0,7.775,Mr +0,1, Thomas Jr Andrews,male,39,0,0,0,Mr +0,3, Ellen Natalia Pettersson,female,18,0,0,7.775,Miss +0,2, August Meyer,male,39,0,0,13,Mr +1,1, Norman Campbell (Bertha Griggs) Chambers,female,33,1,0,53.1,Mrs +0,3, William Alexander,male,26,0,0,7.8875,Mr +0,3, James Lester,male,39,0,0,24.15,Mr +0,2, Richard James Slemen,male,35,0,0,10.5,Mr +0,3, Ebba Iris Alfrida Andersson,female,6,4,2,31.275,Miss +0,3, Ernest Portage Tomlin,male,30.5,0,0,8.05,Mr +0,1, Richard Fry,male,39,0,0,0,Mr +0,3, Wendla Maria Heininen,female,23,0,0,7.925,Miss +0,2, Albert Mallet,male,31,1,1,37.0042,Mr +0,3, John Fredrik Alexander Holm,male,43,0,0,6.45,Mr +0,3, Karl Thorsten Skoog,male,10,3,2,27.9,Master +1,1, Charles Melville (Clara Jennings Gregg) Hays,female,52,1,1,93.5,Mrs +1,3, Nikola Lulic,male,27,0,0,8.6625,Mr +0,1, John George Reuchlin,male,38,0,0,0,Jonkheer +1,3, (Beila) Moor,female,27,0,1,12.475,Mrs +0,3, Urho Abraham Panula,male,2,4,1,39.6875,Master +0,3, John Flynn,male,36,0,0,6.95,Mr +0,3, Len Lam,male,23,0,0,56.4958,Mr +1,2, Andre Mallet,male,1,0,2,37.0042,Master +1,3, Thomas Joseph McCormack,male,19,0,0,7.75,Mr +1,1, George Nelson (Martha Evelyn) Stone,female,62,0,0,80,Mrs +1,3, Antoni (Selini Alexander) Yasbeck,female,15,1,0,14.4542,Mrs +1,2, George Sibley Richards,male,0.83,1,1,18.75,Master +0,3, Amin Saad,male,30,0,0,7.2292,Mr +0,3, Albert Augustsson,male,23,0,0,7.8542,Mr +0,3, Owen George Allum,male,18,0,0,8.3,Mr +1,1, Sara Rebecca Compton,female,39,1,1,83.1583,Miss +0,3, Jakob Pasic,male,21,0,0,8.6625,Mr +0,3, Maurice Sirota,male,20,0,0,8.05,Mr +1,3, Chang Chip,male,32,0,0,56.4958,Mr +1,1, Pierre Marechal,male,29,0,0,29.7,Mr +0,3, Ilmari Rudolf Alhomaki,male,20,0,0,7.925,Mr +0,2, Thomas Charles Mudd,male,16,0,0,10.5,Mr +1,1, Augusta Serepeca,female,30,0,0,31,Miss +0,3, Peter L Lemberopolous,male,34.5,0,0,6.4375,Mr +0,3, Jeso Culumovic,male,17,0,0,8.6625,Mr +0,3, Anthony Abbing,male,42,0,0,7.55,Mr +0,3, Douglas Bullen Sage,male,18,8,2,69.55,Mr +0,3, Marin Markoff,male,35,0,0,7.8958,Mr +0,2, John Harper,male,28,0,1,33,Rev +1,1, Samuel L (Edwiga Grabowska) Goldenberg,female,40,1,0,89.1042,Mrs +0,3, Sigvard Harald Elias Andersson,male,4,4,2,31.275,Master +0,3, Johan Svensson,male,74,0,0,7.775,Mr +0,3, Nourelain Boulos,female,9,1,1,15.2458,Miss +1,1, Mary Conover Lines,female,16,0,1,39.4,Miss +0,2, Ernest Courtenay (Lilian Hughes) Carter,female,44,1,0,26,Mrs +1,3, Sam (Leah Rosen) Aks,female,18,0,1,9.35,Mrs +1,1, George Dennick (Mary Hitchcock) Wick,female,45,1,1,164.8667,Mrs +1,1, Peter Denis Daly,male,51,0,0,26.55,Mr +1,3, Solomon (Latifa Qurban) Baclini,female,24,0,3,19.2583,Mrs +0,3, Raihed Razi,male,30,0,0,7.2292,Mr +0,3, Claus Peter Hansen,male,41,2,0,14.1083,Mr +0,2, Frederick Edward Giles,male,21,1,0,11.5,Mr +1,1, Frederick Joel (Margaret Welles Barron) Swift,female,48,0,0,25.9292,Mrs +0,3, Dorothy Edith Sage,female,14,8,2,69.55,Miss +0,2, John William Gill,male,24,0,0,13,Mr +1,2, (Karolina) Bystrom,female,42,0,0,13,Mrs +1,2, Asuncion Duran y More,female,27,1,0,13.8583,Miss +0,1, Washington Augustus II Roebling,male,31,0,0,50.4958,Mr +0,3, Philemon van Melkebeke,male,23,0,0,9.5,Mr +1,3, Harold Theodor Johnson,male,4,1,1,11.1333,Master +0,3, Cerin Balkic,male,26,0,0,7.8958,Mr +1,1, Richard Leonard (Sallie Monypeny) Beckwith,female,47,1,1,52.5542,Mrs +0,1, Frans Olof Carlsson,male,33,0,0,5,Mr +0,3, Victor Vander Cruyssen,male,47,0,0,9,Mr +1,2, Samuel (Hannah Wizosky) Abelson,female,28,1,0,24,Mrs +1,3, Adele Kiamie Najib,female,15,0,0,7.225,Miss +0,3, Alfred Ossian Gustafsson,male,20,0,0,9.8458,Mr +0,3, Nedelio Petroff,male,19,0,0,7.8958,Mr +0,3, Kristo Laleff,male,23,0,0,7.8958,Mr +1,1, Thomas Jr (Lily Alexenia Wilson) Potter,female,56,0,1,83.1583,Mrs +1,2, William (Imanita Parrish Hall) Shelley,female,25,0,1,26,Mrs +0,3, Johann Markun,male,33,0,0,7.8958,Mr +0,3, Gerda Ulrika Dahlberg,female,22,0,0,10.5167,Miss +0,2, Frederick James Banfield,male,28,0,0,10.5,Mr +0,3, Henry Jr Sutehall,male,25,0,0,7.05,Mr +0,3, William (Margaret Norton) Rice,female,39,0,5,29.125,Mrs +0,2, Juozas Montvila,male,27,0,0,13,Rev +1,1, Margaret Edith Graham,female,19,0,0,30,Miss +0,3, Catherine Helen Johnston,female,7,1,2,23.45,Miss +1,1, Karl Howell Behr,male,26,0,0,30,Mr +0,3, Patrick Dooley,male,32,0,0,7.75,Mr diff --git a/src/danfojs-node/test/samples/titanicOutRemote.csv b/src/danfojs-node/test/samples/titanicOutRemote.csv new file mode 100644 index 00000000..78f7e4b4 --- /dev/null +++ b/src/danfojs-node/test/samples/titanicOutRemote.csv @@ -0,0 +1,887 @@ +Survived,Pclass,Name,Sex,Age,Siblings/Spouses Aboard,Parents/Children Aboard,Fare,titles +1,1, John Bradley (Florence Briggs Thayer) Cumings,female,38,1,0,71.2833,Mrs +1,3, Laina Heikkinen,female,26,0,0,7.925,Miss +1,1, Jacques Heath (Lily May Peel) Futrelle,female,35,1,0,53.1,Mrs +0,3, William Henry Allen,male,35,0,0,8.05,Mr +0,3, James Moran,male,27,0,0,8.4583,Mr +0,1, Timothy J McCarthy,male,54,0,0,51.8625,Mr +0,3, Gosta Leonard Palsson,male,2,3,1,21.075,Master +1,3, Oscar W (Elisabeth Vilhelmina Berg) Johnson,female,27,0,2,11.1333,Mrs +1,2, Nicholas (Adele Achem) Nasser,female,14,1,0,30.0708,Mrs +1,3, Marguerite Rut Sandstrom,female,4,1,1,16.7,Miss +1,1, Elizabeth Bonnell,female,58,0,0,26.55,Miss +0,3, William Henry Saundercock,male,20,0,0,8.05,Mr +0,3, Anders Johan Andersson,male,39,1,5,31.275,Mr +0,3, Hulda Amanda Adolfina Vestrom,female,14,0,0,7.8542,Miss +1,2, (Mary D Kingcome) Hewlett,female,55,0,0,16,Mrs +0,3, Eugene Rice,male,2,4,1,29.125,Master +1,2, Charles Eugene Williams,male,23,0,0,13,Mr +0,3, Julius (Emelia Maria Vandemoortele) Vander Planke,female,31,1,0,18,Mrs +1,3, Fatima Masselmani,female,22,0,0,7.225,Mrs +0,2, Joseph J Fynney,male,35,0,0,26,Mr +1,2, Lawrence Beesley,male,34,0,0,13,Mr +1,3, Anna McGowan,female,15,0,0,8.0292,Miss +1,1, William Thompson Sloper,male,28,0,0,35.5,Mr +0,3, Torborg Danira Palsson,female,8,3,1,21.075,Miss +1,3, Carl Oscar (Selma Augusta Emilia Johansson) Asplund,female,38,1,5,31.3875,Mrs +0,3, Farred Chehab Emir,male,26,0,0,7.225,Mr +0,1, Charles Alexander Fortune,male,19,3,2,263,Mr +1,3, Ellen O'Dwyer,female,24,0,0,7.8792,Miss +0,3, Lalio Todoroff,male,23,0,0,7.8958,Mr +0,1, Manuel E Uruchurtu,male,40,0,0,27.7208,Don +1,1, William Augustus (Marie Eugenie) Spencer,female,48,1,0,146.5208,Mrs +1,3, Mary Agatha Glynn,female,18,0,0,7.75,Miss +0,2, Edward H Wheadon,male,66,0,0,10.5,Mr +0,1, Edgar Joseph Meyer,male,28,1,0,82.1708,Mr +0,1, Alexander Oskar Holverson,male,42,1,0,52,Mr +1,3, Hanna Mamee,male,18,0,0,7.2292,Mr +0,3, Ernest Charles Cann,male,21,0,0,8.05,Mr +0,3, Augusta Maria Vander Planke,female,18,2,0,18,Miss +1,3, Jamila Nicola-Yarred,female,14,1,0,11.2417,Miss +0,3, Johan (Johanna Persdotter Larsson) Ahlin,female,40,1,0,9.475,Mrs +0,2, William John Robert (Dorothy Ann Wonnacott) Turpin,female,27,1,0,21,Mrs +1,2, Simonne Marie Anne Andree Laroche,female,3,1,2,41.5792,Miss +1,3, Margaret Delia Devaney,female,19,0,0,7.8792,Miss +0,3, William John Rogers,male,30,0,0,8.05,Mr +0,3, Denis Lennon,male,20,1,0,15.5,Mr +1,3, Bridget O'Driscoll,female,27,0,0,7.75,Miss +0,3, Youssef Samaan,male,16,2,0,21.6792,Mr +0,3, Josef (Josefine Franchi) Arnold-Franchi,female,18,1,0,17.8,Mrs +0,3, Juha Niilo Panula,male,7,4,1,39.6875,Master +0,3, Richard Cater Nosworthy,male,21,0,0,7.8,Mr +1,1, Henry Sleeper (Myna Haxtun) Harper,female,49,1,0,76.7292,Mrs +1,2, Lizzie (Elizabeth Anne Wilkinson) Faunthorpe,female,29,1,0,26,Mrs +0,1, Engelhart Cornelius Ostby,male,65,0,1,61.9792,Mr +1,1, Hugh Woolner,male,46,0,0,35.5,Mr +1,2, Emily Rugg,female,21,0,0,10.5,Miss +0,3, Mansouer Novel,male,28.5,0,0,7.2292,Mr +1,2, Constance Mirium West,female,5,1,2,27.75,Miss +0,3, William Frederick Goodwin,male,11,5,2,46.9,Master +0,3, Orsen Sirayanian,male,22,0,0,7.2292,Mr +1,1, Amelie Icard,female,38,0,0,80,Miss +0,1, Henry Birkhardt Harris,male,45,1,0,83.475,Mr +0,3, Harald Skoog,male,4,3,2,27.9,Master +0,1, Albert A Stewart,male,64,0,0,27.7208,Mr +1,3, Gerios Moubarek,male,7,1,1,15.2458,Master +1,2, (Elizabeth Ramell) Nye,female,29,0,0,10.5,Mrs +0,3, Ernest James Crease,male,19,0,0,8.1583,Mr +1,3, Erna Alexandra Andersson,female,17,4,2,7.925,Miss +0,3, Vincenz Kink,male,26,2,0,8.6625,Mr +0,2, Stephen Curnow Jenkin,male,32,0,0,10.5,Mr +0,3, Lillian Amy Goodwin,female,16,5,2,46.9,Miss +0,2, Ambrose Jr Hood,male,21,0,0,73.5,Mr +0,3, Apostolos Chronopoulos,male,26,1,0,14.4542,Mr +1,3, Lee Bing,male,32,0,0,56.4958,Mr +0,3, Sigurd Hansen Moen,male,25,0,0,7.65,Mr +0,3, Ivan Staneff,male,23,0,0,7.8958,Mr +0,3, Rahamin Haim Moutal,male,28,0,0,8.05,Mr +1,2, Alden Gates Caldwell,male,0.83,0,2,29,Master +1,3, Elizabeth Dowdell,female,30,0,0,12.475,Miss +0,3, Achille Waelens,male,22,0,0,9,Mr +1,3, Jan Baptist Sheerlinck,male,29,0,0,9.5,Mr +1,3, Brigdet Delia McDermott,female,31,0,0,7.7875,Miss +0,1, Francisco M Carrau,male,28,0,0,47.1,Mr +1,2, Bertha Ilett,female,17,0,0,10.5,Miss +1,3, Karl Alfred (Maria Mathilda Gustafsson) Backstrom,female,33,3,0,15.85,Mrs +0,3, William Neal Ford,male,16,1,3,34.375,Mr +0,3, Selman Francis Slocovski,male,20,0,0,8.05,Mr +1,1, Mabel Helen Fortune,female,23,3,2,263,Miss +0,3, Francesco Celotti,male,24,0,0,8.05,Mr +0,3, Emil Christmann,male,29,0,0,8.05,Mr +0,3, Paul Edvin Andreasson,male,20,0,0,7.8542,Mr +0,1, Herbert Fuller Chaffee,male,46,1,0,61.175,Mr +0,3, Bertram Frank Dean,male,26,1,2,20.575,Mr +0,3, Daniel Coxon,male,59,0,0,7.25,Mr +0,3, Charles Joseph Shorney,male,22,0,0,8.05,Mr +0,1, George B Goldschmidt,male,71,0,0,34.6542,Mr +1,1, William Bertram Greenfield,male,23,0,1,63.3583,Mr +1,2, John T (Ada Julia Bone) Doling,female,34,0,1,23,Mrs +0,2, Sinai Kantor,male,34,1,0,26,Mr +0,3, Matilda Petranec,female,28,0,0,7.8958,Miss +0,3, Pastcho Petroff,male,29,0,0,7.8958,Mr +0,1, Richard Frasar White,male,21,0,1,77.2875,Mr +0,3, Gustaf Joel Johansson,male,33,0,0,8.6542,Mr +0,3, Anders Vilhelm Gustafsson,male,37,2,0,7.925,Mr +0,3, Stoytcho Mionoff,male,28,0,0,7.8958,Mr +1,3, Anna Kristine Salkjelsvik,female,21,0,0,7.65,Miss +1,3, Albert Johan Moss,male,29,0,0,7.775,Mr +0,3, Tido Rekic,male,38,0,0,7.8958,Mr +1,3, Bertha Moran,female,28,1,0,24.15,Miss +0,1, Walter Chamberlain Porter,male,47,0,0,52,Mr +0,3, Hileni Zabour,female,14.5,1,0,14.4542,Miss +0,3, David John Barton,male,22,0,0,8.05,Mr +0,3, Katriina Jussila,female,20,1,0,9.825,Miss +0,3, Malake Attalah,female,17,0,0,14.4583,Miss +0,3, Edvard Pekoniemi,male,21,0,0,7.925,Mr +0,3, Patrick Connors,male,70.5,0,0,7.75,Mr +0,2, William John Robert Turpin,male,29,1,0,21,Mr +0,1, Quigg Edmond Baxter,male,24,0,1,247.5208,Mr +0,3, Ellis Anna Maria Andersson,female,2,4,2,31.275,Miss +0,2, Stanley George Hickman,male,21,2,0,73.5,Mr +0,3, Leonard Charles Moore,male,19,0,0,8.05,Mr +0,2, Nicholas Nasser,male,32.5,1,0,30.0708,Mr +1,2, Susan Webber,female,32.5,0,0,13,Miss +0,1, Percival Wayland White,male,54,0,1,77.2875,Mr +1,3, Elias Nicola-Yarred,male,12,1,0,11.2417,Master +0,3, Martin McMahon,male,19,0,0,7.75,Mr +1,3, Fridtjof Arne Madsen,male,24,0,0,7.1417,Mr +1,3, Anna Peter,female,2,1,1,22.3583,Miss +0,3, Johan Ekstrom,male,45,0,0,6.975,Mr +0,3, Jozef Drazenoic,male,33,0,0,7.8958,Mr +0,3, Domingos Fernandeo Coelho,male,20,0,0,7.05,Mr +0,3, Alexander A (Grace Charity Laury) Robins,female,47,1,0,14.5,Mrs +1,2, Leopold (Mathilde Francoise Pede) Weisz,female,29,1,0,26,Mrs +0,2, Samuel James Hayden Sobey,male,25,0,0,13,Mr +0,2, Emile Richard,male,23,0,0,15.0458,Mr +1,1, Helen Monypeny Newsom,female,19,0,2,26.2833,Miss +0,1, Jacques Heath Futrelle,male,37,1,0,53.1,Mr +0,3, Olaf Elon Osen,male,16,0,0,9.2167,Mr +0,1, Victor Giglio,male,24,0,0,79.2,Mr +0,3, Joseph (Sultana) Boulos,female,40,0,2,15.2458,Mrs +1,3, Anna Sofia Nysten,female,22,0,0,7.75,Miss +1,3, Pekka Pietari (Elin Matilda Dolck) Hakkarainen,female,24,1,0,15.85,Mrs +0,3, Jeremiah Burke,male,19,0,0,6.75,Mr +0,2, Edgardo Samuel Andrew,male,18,0,0,11.5,Mr +0,2, Joseph Charles Nicholls,male,19,1,1,36.75,Mr +1,3, August Edvard Andersson,male,27,0,0,7.7958,Mr +0,3, Robina Maggie Ford,female,9,2,2,34.375,Miss +0,2, Michel Navratil,male,36.5,0,2,26,Mr +0,2, Thomas Roussel Davids Byles,male,42,0,0,13,Rev +0,2, Robert James Bateman,male,51,0,0,12.525,Rev +1,1, Thomas (Edith Wearne) Pears,female,22,1,0,66.6,Mrs +0,3, Alfonzo Meo,male,55.5,0,0,8.05,Mr +0,3, Austin Blyler van Billiard,male,40.5,0,2,14.5,Mr +0,3, Ole Martin Olsen,male,27,0,0,7.3125,Mr +0,1, Charles Duane Williams,male,51,0,1,61.3792,Mr +1,3, Katherine Gilnagh,female,16,0,0,7.7333,Miss +0,3, Harry Corn,male,30,0,0,8.05,Mr +0,3, Mile Smiljanic,male,37,0,0,8.6625,Mr +0,3, Thomas Henry Sage,male,5,8,2,69.55,Master +0,3, John Hatfield Cribb,male,44,0,1,16.1,Mr +1,2, James (Elizabeth Inglis Milne) Watt,female,40,0,0,15.75,Mrs +0,3, John Viktor Bengtsson,male,26,0,0,7.775,Mr +0,3, Jovo Calic,male,17,0,0,8.6625,Mr +0,3, Eino Viljami Panula,male,1,4,1,39.6875,Master +1,3, Frank John William Goldsmith,male,9,0,2,20.525,Master +1,1, (Edith Martha Bowerman) Chibnall,female,48,0,1,55,Mrs +0,3, William (Anna Bernhardina Karlsson) Skoog,female,45,1,4,27.9,Mrs +0,1, John D Baumann,male,60,0,0,25.925,Mr +0,3, Lee Ling,male,28,0,0,56.4958,Mr +0,1, Wyckoff Van der hoef,male,61,0,0,33.5,Mr +0,3, Arthur Rice,male,4,4,1,29.125,Master +1,3, Eleanor Ileen Johnson,female,1,1,1,11.1333,Miss +0,3, Antti Wilhelm Sivola,male,21,0,0,7.925,Mr +0,1, James Clinch Smith,male,56,0,0,30.6958,Mr +0,3, Klas Albin Klasen,male,18,1,1,7.8542,Mr +0,3, Henry Forbes Lefebre,male,5,3,1,25.4667,Master +0,1, Ann Elizabeth Isham,female,50,0,0,28.7125,Miss +0,2, Reginald Hale,male,30,0,0,13,Mr +0,3, Lionel Leonard,male,36,0,0,0,Mr +0,3, Constance Gladys Sage,female,8,8,2,69.55,Miss +0,2, Rene Pernot,male,39,0,0,15.05,Mr +0,3, Clarence Gustaf Hugo Asplund,male,9,4,2,31.3875,Master +1,2, Richard F Becker,male,1,2,1,39,Master +1,3, Luise Gretchen Kink-Heilmann,female,4,0,2,22.025,Miss +0,1, Hugh Roscoe Rood,male,39,0,0,50,Mr +1,3, Thomas (Johanna Godfrey) O'Brien,female,26,1,0,15.5,Mrs +1,1, Charles Hallace Romaine,male,45,0,0,26.55,Mr +0,3, John Bourke,male,40,1,1,15.5,Mr +0,3, Stjepan Turcin,male,36,0,0,7.8958,Mr +1,2, (Rosa) Pinsky,female,32,0,0,13,Mrs +0,2, William Carbines,male,19,0,0,13,Mr +1,3, Carla Christine Nielsine Andersen-Jensen,female,19,1,0,7.8542,Miss +1,2, Michel M Navratil,male,3,1,1,26,Master +1,1, James Joseph (Margaret Tobin) Brown,female,44,0,0,27.7208,Mrs +1,1, Elise Lurette,female,58,0,0,146.5208,Miss +0,3, Robert Mernagh,male,28,0,0,7.75,Mr +0,3, Karl Siegwart Andreas Olsen,male,42,0,1,8.4042,Mr +1,3, Margaret Madigan,female,21,0,0,7.75,Miss +0,2, Henriette Yrois,female,24,0,0,13,Miss +0,3, Nestor Cyriel Vande Walle,male,28,0,0,9.5,Mr +0,3, Frederick Sage,male,17,8,2,69.55,Mr +0,3, Jakob Alfred Johanson,male,34,0,0,6.4958,Mr +0,3, Gerious Youseff,male,45.5,0,0,7.225,Mr +1,3, Gurshon Cohen,male,18,0,0,8.05,Mr +0,3, Telma Matilda Strom,female,2,0,1,10.4625,Miss +0,3, Karl Alfred Backstrom,male,32,1,0,15.85,Mr +1,3, Nassef Cassem Albimona,male,26,0,0,18.7875,Mr +1,3, Helen Carr,female,16,0,0,7.75,Miss +1,1, Henry Blank,male,40,0,0,31,Mr +0,3, Ahmed Ali,male,24,0,0,7.05,Mr +1,2, Clear Annie Cameron,female,35,0,0,21,Miss +0,3, John Henry Perkin,male,22,0,0,7.25,Mr +0,2, Hans Kristensen Givard,male,30,0,0,13,Mr +0,3, Philip Kiernan,male,22,1,0,7.75,Mr +1,1, Madeleine Newell,female,31,1,0,113.275,Miss +1,3, Eliina Honkanen,female,27,0,0,7.925,Miss +0,2, Sidney Samuel Jacobsohn,male,42,1,0,27,Mr +1,1, Albina Bazzani,female,32,0,0,76.2917,Miss +0,2, Walter Harris,male,30,0,0,10.5,Mr +1,3, Victor Francis Sunderland,male,16,0,0,8.05,Mr +0,2, James H Bracken,male,27,0,0,13,Mr +0,3, George Henry Green,male,51,0,0,8.05,Mr +0,3, Christo Nenkoff,male,22,0,0,7.8958,Mr +1,1, Frederick Maxfield Hoyt,male,38,1,0,90,Mr +0,3, Karl Ivar Sven Berglund,male,22,0,0,9.35,Mr +1,2, William John Mellors,male,19,0,0,10.5,Mr +0,3, John Hall Lovell,male,20.5,0,0,7.25,Mr +0,2, Arne Jonas Fahlstrom,male,18,0,0,13,Mr +0,3, Mathilde Lefebre,female,12,3,1,25.4667,Miss +1,1, Henry Birkhardt (Irene Wallach) Harris,female,35,1,0,83.475,Mrs +0,3, Bengt Edvin Larsson,male,29,0,0,7.775,Mr +0,2, Ernst Adolf Sjostedt,male,59,0,0,13.5,Mr +1,3, Lillian Gertrud Asplund,female,5,4,2,31.3875,Miss +0,2, Robert William Norman Leyson,male,24,0,0,10.5,Mr +0,3, Alice Phoebe Harknett,female,21,0,0,7.55,Miss +0,2, Stephen Hold,male,44,1,0,26,Mr +1,2, Marjorie Collyer,female,8,0,2,26.25,Miss +0,2, Frederick William Pengelly,male,19,0,0,10.5,Mr +0,2, George Henry Hunt,male,33,0,0,12.275,Mr +0,3, Thamine Zabour,female,19,1,0,14.4542,Miss +1,3, Katherine Murphy,female,18,1,0,15.5,Miss +0,2, Reginald Charles Coleridge,male,29,0,0,10.5,Mr +0,3, Matti Alexanteri Maenpaa,male,22,0,0,7.125,Mr +0,3, Sleiman Attalah,male,30,0,0,7.225,Mr +0,1, William Edward Minahan,male,44,2,0,90,Dr +0,3, Agda Thorilda Viktoria Lindahl,female,25,0,0,7.775,Miss +1,2, William (Anna) Hamalainen,female,24,0,2,14.5,Mrs +1,1, Richard Leonard Beckwith,male,37,1,1,52.5542,Mr +0,2, Ernest Courtenay Carter,male,54,1,0,26,Rev +0,3, James George Reed,male,18,0,0,7.25,Mr +0,3, Wilhelm (Elna Matilda Persson) Strom,female,29,1,1,10.4625,Mrs +0,1, William Thomas Stead,male,62,0,0,26.55,Mr +0,3, William Arthur Lobb,male,30,1,0,16.1,Mr +0,3, Viktor (Helena Wilhelmina) Rosblom,female,41,0,2,20.2125,Mrs +1,3, Darwis (Hanne Youssef Razi) Touma,female,29,0,2,15.2458,Mrs +1,1, Gertrude Maybelle Thorne,female,38,0,0,79.2,Mrs +1,1, Gladys Cherry,female,30,0,0,86.5,Miss +1,1, Anna Ward,female,35,0,0,512.3292,Miss +1,2, (Lutie Davis) Parrish,female,50,0,1,26,Mrs +1,3, Edvin Rojj Felix Asplund,male,3,4,2,31.3875,Master +0,1, Emil Taussig,male,52,1,1,79.65,Mr +0,1, William Harrison,male,40,0,0,0,Mr +0,3, Delia Henry,female,21,0,0,7.75,Miss +0,2, David Reeves,male,36,0,0,10.5,Mr +0,3, Ernesti Arvid Panula,male,16,4,1,39.6875,Mr +1,3, Ernst Ulrik Persson,male,25,1,0,7.775,Mr +1,1, William Thompson (Edith Junkins) Graham,female,58,0,1,153.4625,Mrs +1,1, Amelia Bissette,female,35,0,0,135.6333,Miss +0,1, Alexander Cairns,male,28,0,0,31,Mr +1,3, William Henry Tornquist,male,25,0,0,0,Mr +1,2, (Elizabeth Anne Maidment) Mellinger,female,41,0,1,19.5,Mrs +0,1, Charles H Natsch,male,37,0,1,29.7,Mr +1,3, Hanora Healy,female,33,0,0,7.75,Miss +1,1, Kornelia Theodosia Andrews,female,63,1,0,77.9583,Miss +0,3, Augusta Charlotta Lindblom,female,45,0,0,7.75,Miss +0,2, Francis Parkes,male,21,0,0,0,Mr +0,3, Eric Rice,male,7,4,1,29.125,Master +1,3, Stanton (Rosa Hunt) Abbott,female,35,1,1,20.25,Mrs +0,3, Frank Duane,male,65,0,0,7.75,Mr +0,3, Nils Johan Goransson Olsson,male,28,0,0,7.8542,Mr +0,3, Alfons de Pelsmaeker,male,16,0,0,9.5,Mr +1,3, Edward Arthur Dorking,male,19,0,0,8.05,Mr +0,1, Richard William Smith,male,57,0,0,26,Mr +0,3, Ivan Stankovic,male,33,0,0,8.6625,Mr +1,3, Theodore de Mulder,male,30,0,0,9.5,Mr +0,3, Penko Naidenoff,male,22,0,0,7.8958,Mr +1,2, Masabumi Hosono,male,42,0,0,13,Mr +1,3, Kate Connolly,female,22,0,0,7.75,Miss +1,1, Ellen Barber,female,26,0,0,78.85,Miss +1,1, Dickinson H (Helen Walton) Bishop,female,19,1,0,91.0792,Mrs +0,2, Rene Jacques Levy,male,36,0,0,12.875,Mr +0,3, Aloisia Haas,female,24,0,0,8.85,Miss +0,3, Ivan Mineff,male,24,0,0,7.8958,Mr +0,1, Ervin G Lewy,male,30,0,0,27.7208,Mr +0,3, Mansour Hanna,male,23.5,0,0,7.2292,Mr +0,1, Helen Loraine Allison,female,2,1,2,151.55,Miss +1,1, Adolphe Saalfeld,male,47,0,0,30.5,Mr +1,1, James (Helene DeLaudeniere Chaput) Baxter,female,50,0,1,247.5208,Mrs +1,3, Anna Katherine Kelly,female,20,0,0,7.75,Miss +1,3, Bernard McCoy,male,24,2,0,23.25,Mr +0,3, William Cahoone Jr Johnson,male,19,0,0,0,Mr +1,2, Nora A Keane,female,46,0,0,12.35,Miss +0,3, Howard Hugh Williams,male,28,0,0,8.05,Mr +1,1, Hudson Trevor Allison,male,0.92,1,2,151.55,Master +1,1, Margaret Fleming,female,42,0,0,110.8833,Miss +1,1, Victor de Satode (Maria Josefa Perez de Soto y Vallejo) Penasco y Castellana,female,17,1,0,108.9,Mrs +0,2, Samuel Abelson,male,30,1,0,24,Mr +1,1, Laura Mabel Francatelli,female,30,0,0,56.9292,Miss +1,1, Margaret Bechstein Hays,female,24,0,0,83.1583,Miss +1,1, Emily Borie Ryerson,female,18,2,2,262.375,Miss +0,2, William (Anna Sylfven) Lahtinen,female,26,1,1,26,Mrs +0,3, Ignjac Hendekovic,male,28,0,0,7.8958,Mr +0,2, Benjamin Hart,male,43,1,1,26.25,Mr +1,3, Helmina Josefina Nilsson,female,26,0,0,7.8542,Miss +1,2, Sinai (Miriam Sternin) Kantor,female,24,1,0,26,Mrs +0,2, Ernest Moraweck,male,54,0,0,14,Dr +1,1, Mary Natalie Wick,female,31,0,2,164.8667,Miss +1,1, Frederic Oakley (Margaretta Corning Stone) Spedden,female,40,1,1,134.5,Mrs +0,3, Samuel Dennis,male,22,0,0,7.25,Mr +0,3, Yoto Danoff,male,27,0,0,7.8958,Mr +1,2, Hilda Mary Slayter,female,30,0,0,12.35,Miss +1,2, Albert Francis (Sylvia Mae Harbaugh) Caldwell,female,22,1,1,29,Mrs +0,3, George John Jr Sage,male,20,8,2,69.55,Mr +1,1, Marie Grice Young,female,36,0,0,135.6333,Miss +0,3, Johan Hansen Nysveen,male,61,0,0,6.2375,Mr +1,2, (Ada E Hall) Ball,female,36,0,0,13,Mrs +1,3, Frank John (Emily Alice Brown) Goldsmith,female,31,1,1,20.525,Mrs +1,1, Jean Gertrude Hippach,female,16,0,1,57.9792,Miss +1,3, Agnes McCoy,female,28,2,0,23.25,Miss +0,1, Austen Partner,male,45.5,0,0,28.5,Mr +0,1, George Edward Graham,male,38,0,1,153.4625,Mr +0,3, Leo Edmondus Vander Planke,male,16,2,0,18,Mr +1,1, Henry William (Clara Heinsheimer) Frauenthal,female,42,1,0,133.65,Mrs +0,3, Mitto Denkoff,male,30,0,0,7.8958,Mr +0,1, Thomas Clinton Pears,male,29,1,0,66.6,Mr +1,1, Elizabeth Margaret Burns,female,41,0,0,134.5,Miss +1,3, Karl Edwart Dahl,male,45,0,0,8.05,Mr +0,1, Stephen Weart Blackwell,male,45,0,0,35.5,Mr +1,2, Edmond Roger Navratil,male,2,1,1,26,Master +1,1, Alice Elizabeth Fortune,female,24,3,2,263,Miss +0,2, Erik Gustaf Collander,male,28,0,0,13,Mr +0,2, Charles Frederick Waddington Sedgwick,male,25,0,0,13,Mr +0,2, Stanley Hubert Fox,male,36,0,0,13,Mr +1,2, Amelia Brown,female,24,0,0,13,Miss +1,2, Marion Elsie Smith,female,40,0,0,13,Miss +1,3, Thomas Henry (Mary E Finck) Davison,female,34,1,0,16.1,Mrs +1,3, William Loch Coutts,male,3,1,1,15.9,Master +0,3, Jovan Dimic,male,42,0,0,8.6625,Mr +0,3, Nils Martin Odahl,male,23,0,0,9.225,Mr +0,1, Fletcher Fellows Williams-Lambert,male,43,0,0,35,Mr +0,3, Tannous Elias,male,15,1,1,7.2292,Mr +0,3, Josef Arnold-Franchi,male,25,1,0,17.8,Mr +0,3, Wazli Yousif,male,23,0,0,7.225,Mr +0,3, Leo Peter Vanden Steen,male,28,0,0,9.5,Mr +1,1, Elsie Edith Bowerman,female,22,0,1,55,Miss +0,2, Annie Clemmer Funk,female,38,0,0,13,Miss +1,3, Mary McGovern,female,22,0,0,7.8792,Miss +1,3, Helen Mary Mockler,female,23,0,0,7.8792,Miss +0,3, Wilhelm Skoog,male,40,1,4,27.9,Mr +0,2, Sebastiano del Carlo,male,29,1,0,27.7208,Mr +0,3, (Catherine David) Barbara,female,45,0,1,14.4542,Mrs +0,3, Adola Asim,male,35,0,0,7.05,Mr +0,3, Thomas O'Brien,male,27,1,0,15.5,Mr +0,3, Mauritz Nils Martin Adahl,male,30,0,0,7.25,Mr +1,1, Frank Manley (Anna Sophia Atkinson) Warren,female,60,1,0,75.25,Mrs +1,3, (Mantoura Boulos) Moussa,female,35,0,0,7.2292,Mrs +1,3, Annie Jermyn,female,22,0,0,7.75,Miss +1,1, Leontine Pauline Aubart,female,24,0,0,69.3,Mme +1,1, George Achilles Harder,male,25,1,0,55.4417,Mr +0,3, Jakob Alfred Wiklund,male,18,1,0,6.4958,Mr +0,3, William Thomas Beavan,male,19,0,0,8.05,Mr +0,1, Sante Ringhini,male,22,0,0,135.6333,Mr +0,3, Stina Viola Palsson,female,3,3,1,21.075,Miss +1,1, Edgar Joseph (Leila Saks) Meyer,female,25,1,0,82.1708,Mrs +1,3, Aurora Adelia Landergren,female,22,0,0,7.25,Miss +0,1, Harry Elkins Widener,male,27,0,2,211.5,Mr +0,3, Tannous Betros,male,20,0,0,4.0125,Mr +0,3, Karl Gideon Gustafsson,male,19,0,0,7.775,Mr +1,1, Rosalie Bidois,female,42,0,0,227.525,Miss +1,3, Maria Nakid,female,1,0,2,15.7417,Miss +0,3, Juho Tikkanen,male,32,0,0,7.925,Mr +1,1, Alexander Oskar (Mary Aline Towner) Holverson,female,35,1,0,52,Mrs +0,3, Vasil Plotcharsky,male,27,0,0,7.8958,Mr +0,2, Charles Henry Davies,male,18,0,0,73.5,Mr +0,3, Sidney Leonard Goodwin,male,1,5,2,46.9,Master +1,2, Kate Buss,female,36,0,0,13,Miss +0,3, Matthew Sadlier,male,19,0,0,7.7292,Mr +1,2, Bertha Lehmann,female,17,0,0,12,Miss +1,1, William Ernest Carter,male,36,1,2,120,Mr +1,3, Carl Olof Jansson,male,21,0,0,7.7958,Mr +0,3, Johan Birger Gustafsson,male,28,2,0,7.925,Mr +1,1, Marjorie Newell,female,23,1,0,113.275,Miss +1,3, Hjalmar (Agnes Charlotta Bengtsson) Sandstrom,female,24,0,2,16.7,Mrs +0,3, Erik Johansson,male,22,0,0,7.7958,Mr +0,3, Elina Olsson,female,31,0,0,7.8542,Miss +0,2, Peter David McKane,male,46,0,0,26,Mr +0,2, Alfred Pain,male,23,0,0,10.5,Dr +1,2, William H (Jessie L) Trout,female,28,0,0,12.65,Mrs +1,3, Juha Niskanen,male,39,0,0,7.925,Mr +0,3, John Adams,male,26,0,0,8.05,Mr +0,3, Mari Aina Jussila,female,21,1,0,9.825,Miss +0,3, Pekka Pietari Hakkarainen,male,28,1,0,15.85,Mr +0,3, Marija Oreskovic,female,20,0,0,8.6625,Miss +0,2, Shadrach Gale,male,34,1,0,21,Mr +0,3, Carl/Charles Peter Widegren,male,51,0,0,7.75,Mr +1,2, William Rowe Richards,male,3,1,1,18.75,Master +0,3, Hans Martin Monsen Birkeland,male,21,0,0,7.775,Mr +0,3, Ida Lefebre,female,3,3,1,25.4667,Miss +0,3, Todor Sdycoff,male,42,0,0,7.8958,Mr +0,3, Henry Hart,male,27,0,0,6.8583,Mr +1,1, Daisy E Minahan,female,33,1,0,90,Miss +0,2, Alfred Fleming Cunningham,male,22,0,0,0,Mr +1,3, Johan Julian Sundman,male,44,0,0,7.925,Mr +0,3, Thomas (Annie Louise Rowley) Meek,female,32,0,0,8.05,Mrs +1,2, James Vivian (Lulu Thorne Christian) Drew,female,34,1,1,32.5,Mrs +1,2, Lyyli Karoliina Silven,female,18,0,2,13,Miss +0,2, William John Matthews,male,30,0,0,13,Mr +0,3, Catharina Van Impe,female,10,0,2,24.15,Miss +0,3, David Charters,male,21,0,0,7.7333,Mr +0,3, Leo Zimmerman,male,29,0,0,7.875,Mr +0,3, Ernst Gilbert (Anna Sigrid Maria Brogren) Danbom,female,28,1,1,14.4,Mrs +0,3, Viktor Richard Rosblom,male,18,1,1,20.2125,Mr +0,3, Phillippe Wiseman,male,54,0,0,7.25,Mr +1,2, Charles V (Ada Maria Winfield) Clarke,female,28,1,0,26,Mrs +1,2, Kate Florence Phillips,female,19,0,0,26,Miss +0,3, James Flynn,male,28,0,0,7.75,Mr +1,3, Berk (Berk Trembisky) Pickard,male,32,0,0,8.05,Mr +1,1, Mauritz Hakan Bjornstrom-Steffansson,male,28,0,0,26.55,Mr +1,3, Percival (Florence Kate White) Thorneycroft,female,33,1,0,16.1,Mrs +1,2, Charles Alexander (Alice Adelaide Slow) Louch,female,42,1,0,26,Mrs +0,3, Nikolai Erland Kallio,male,17,0,0,7.125,Mr +0,1, William Baird Silvey,male,50,1,0,55.9,Mr +1,1, Lucile Polk Carter,female,14,1,2,120,Miss +0,3, Doolina Margaret Ford,female,21,2,2,34.375,Miss +1,2, Sidney (Emily Hocking) Richards,female,24,2,3,18.75,Mrs +0,1, Mark Fortune,male,64,1,4,263,Mr +0,2, Johan Henrik Johannesson Kvillner,male,31,0,0,10.5,Mr +1,2, Benjamin (Esther Ada Bloomfield) Hart,female,45,1,1,26.25,Mrs +0,3, Leon Hampe,male,20,0,0,9.5,Mr +0,3, Johan Emil Petterson,male,25,1,0,7.775,Mr +1,2, Encarnacion Reynaldo,female,28,0,0,13,Ms +1,3, Bernt Johannesen-Bratthammer,male,29,0,0,8.1125,Mr +1,1, Washington Dodge,male,4,0,2,81.8583,Master +1,2, Madeleine Violet Mellinger,female,13,0,1,19.5,Miss +1,1, Frederic Kimber Seward,male,34,0,0,26.55,Mr +1,3, Marie Catherine Baclini,female,5,2,1,19.2583,Miss +1,1, Arthur Godfrey Peuchen,male,52,0,0,30.5,Major +0,2, Edwy Arthur West,male,36,1,2,27.75,Mr +0,3, Ingvald Olai Olsen Hagland,male,28,1,0,19.9667,Mr +0,1, Benjamin Laventall Foreman,male,30,0,0,27.75,Mr +1,1, Samuel L Goldenberg,male,49,1,0,89.1042,Mr +0,3, Joseph Peduzzi,male,24,0,0,8.05,Mr +1,3, Ivan Jalsevac,male,29,0,0,7.8958,Mr +0,1, Francis Davis Millet,male,65,0,0,26.55,Mr +1,1, Frederick R (Marion) Kenyon,female,41,1,0,51.8625,Mrs +1,2, Ellen Toomey,female,50,0,0,10.5,Miss +0,3, Maurice O'Connor,male,17,0,0,7.75,Mr +1,1, Harry Anderson,male,48,0,0,26.55,Mr +0,3, William Morley,male,34,0,0,8.05,Mr +0,1, Arthur H Gee,male,47,0,0,38.5,Mr +0,2, Jacob Christian Milling,male,48,0,0,13,Mr +0,3, Simon Maisner,male,34,0,0,8.05,Mr +0,3, Manuel Estanslas Goncalves,male,38,0,0,7.05,Mr +0,2, William Campbell,male,21,0,0,0,Mr +0,1, John Montgomery Smart,male,56,0,0,26.55,Mr +0,3, James Scanlan,male,22,0,0,7.725,Mr +1,3, Helene Barbara Baclini,female,0.75,2,1,19.2583,Miss +0,3, Arthur Keefe,male,39,0,0,7.25,Mr +0,3, Luka Cacic,male,38,0,0,8.6625,Mr +1,2, Edwy Arthur (Ada Mary Worth) West,female,33,1,2,27.75,Mrs +1,2, Amin S (Marie Marthe Thuillard) Jerwan,female,23,0,0,13.7917,Mrs +0,3, Ida Sofia Strandberg,female,22,0,0,9.8375,Miss +0,1, George Quincy Clifford,male,40,0,0,52,Mr +0,2, Peter Henry Renouf,male,34,1,0,21,Mr +0,3, Lewis Richard Braund,male,29,1,0,7.0458,Mr +0,3, Nils August Karlsson,male,22,0,0,7.5208,Mr +1,3, Hildur E Hirvonen,female,2,0,1,12.2875,Miss +0,3, Harold Victor Goodwin,male,9,5,2,46.9,Master +0,2, Anthony Wood Frost,male,37,0,0,0,Mr +0,3, Richard Henry Rouse,male,50,0,0,8.05,Mr +1,3, (Hedwig) Turkula,female,63,0,0,9.5875,Mrs +1,1, Dickinson H Bishop,male,25,1,0,91.0792,Mr +0,3, Jeannie Lefebre,female,8,3,1,25.4667,Miss +1,1, Frederick Maxfield (Jane Anne Forby) Hoyt,female,35,1,0,90,Mrs +0,1, Edward Austin Kent,male,58,0,0,29.7,Mr +0,3, Francis William Somerton,male,30,0,0,8.05,Mr +1,3, Eden Leslie Coutts,male,9,1,1,15.9,Master +0,3, Konrad Mathias Reiersen Hagland,male,19,1,0,19.9667,Mr +0,3, Einar Windelov,male,21,0,0,7.25,Mr +0,1, Harry Markland Molson,male,55,0,0,30.5,Mr +0,1, Ramon Artagaveytia,male,71,0,0,49.5042,Mr +0,3, Edward Roland Stanley,male,21,0,0,8.05,Mr +0,3, Gerious Yousseff,male,26,0,0,14.4583,Mr +1,1, Elizabeth Mussey Eustis,female,54,1,0,78.2667,Miss +0,3, Frederick William Shellard,male,55,0,0,15.1,Mr +0,1, Hudson J C (Bessie Waldo Daniels) Allison,female,25,1,2,151.55,Mrs +0,3, Olof Svensson,male,24,0,0,7.7958,Mr +0,3, Petar Calic,male,17,0,0,8.6625,Mr +0,3, Mary Canavan,female,21,0,0,7.75,Miss +0,3, Bridget Mary O'Sullivan,female,21,0,0,7.6292,Miss +0,3, Kristina Sofia Laitinen,female,37,0,0,9.5875,Miss +1,1, Roberta Maioni,female,16,0,0,86.5,Miss +0,1, Victor de Satode Penasco y Castellana,male,18,1,0,108.9,Mr +1,2, Frederick Charles (Jane Richards) Quick,female,33,0,2,26,Mrs +1,1, George Bradley,male,37,0,0,26.55,Mr +0,3, Henry Margido Olsen,male,28,0,0,22.525,Mr +1,3, Fang Lang,male,26,0,0,56.4958,Mr +1,3, Eugene Patrick Daly,male,29,0,0,7.75,Mr +0,3, James Webber,male,66,0,0,8.05,Mr +1,1, James Robert McGough,male,36,0,0,26.2875,Mr +1,1, Martin (Elizabeth L,female,54,1,0,59.4,Mrs +0,3, Satio Coleff,male,24,0,0,7.4958,Mr +0,1, William Anderson Walker,male,47,0,0,34.0208,Mr +1,2, (Amelia Milley) Lemore,female,34,0,0,10.5,Mrs +0,3, Patrick Ryan,male,30,0,0,24.15,Mr +1,2, William A (Florence Agnes Hughes) Angle,female,36,1,0,26,Mrs +0,3, Stefo Pavlovic,male,32,0,0,7.8958,Mr +1,1, Anne Perreault,female,30,0,0,93.5,Miss +0,3, Janko Vovk,male,22,0,0,7.8958,Mr +0,3, Sarkis Lahoud,male,35,0,0,7.225,Mr +1,1, Louis Albert (Ida Sophia Fischer) Hippach,female,44,0,1,57.9792,Mrs +0,3, Fared Kassem,male,18,0,0,7.2292,Mr +0,3, James Farrell,male,40.5,0,0,7.75,Mr +1,2, Lucy Ridsdale,female,50,0,0,10.5,Miss +0,1, John Farthing,male,49,0,0,221.7792,Mr +0,3, Johan Werner Salonen,male,39,0,0,7.925,Mr +0,2, Richard George Hocking,male,23,2,1,11.5,Mr +1,2, Phyllis May Quick,female,2,1,1,26,Miss +0,3, Nakli Toufik,male,17,0,0,7.2292,Mr +0,3, Joseph Jr Elias,male,17,1,1,7.2292,Mr +1,3, Catherine (Catherine Rizk) Peter,female,24,0,2,22.3583,Mrs +0,3, Marija Cacic,female,30,0,0,8.6625,Miss +1,2, Eva Miriam Hart,female,7,0,2,26.25,Miss +0,1, Archibald Willingham Butt,male,45,0,0,26.55,Major +1,1, Bertha LeRoy,female,30,0,0,106.425,Miss +0,3, Samuel Beard Risien,male,69,0,0,14.5,Mr +1,1, Hedwig Margaritha Frolicher,female,22,0,2,49.5,Miss +1,1, Harriet R Crosby,female,36,0,2,71,Miss +0,3, Ingeborg Constanzia Andersson,female,9,4,2,31.275,Miss +0,3, Sigrid Elisabeth Andersson,female,11,4,2,31.275,Miss +1,2, Edward Beane,male,32,1,0,26,Mr +0,1, Walter Donald Douglas,male,50,1,0,106.425,Mr +0,1, Arthur Ernest Nicholson,male,64,0,0,26,Mr +1,2, Edward (Ethel Clarke) Beane,female,19,1,0,26,Mrs +1,2, Julian Padro y Manent,male,27,0,0,13.8625,Mr +0,3, Frank John Goldsmith,male,33,1,1,20.525,Mr +1,2, John Morgan Jr Davies,male,8,1,1,36.75,Master +1,1, John Borland Jr Thayer,male,17,0,2,110.8833,Mr +0,2, Percival James R Sharp,male,27,0,0,26,Mr +0,3, Timothy O'Brien,male,21,0,0,7.8292,Mr +1,3, Fahim Leeni,male,22,0,0,7.225,Mr +1,3, Velin Ohman,female,22,0,0,7.775,Miss +0,1, George Wright,male,62,0,0,26.55,Mr +1,1, (Lucille Christiana Sutherland)Duff Gordon,female,48,1,0,39.6,Lady +0,1, Victor Robbins,male,45,0,0,227.525,Mr +1,1, Emil (Tillie Mandelbaum) Taussig,female,39,1,1,79.65,Mrs +1,3, Guillaume Joseph (Emma) de Messemaeker,female,36,1,0,17.4,Mrs +0,3, Thomas Rowan Morrow,male,30,0,0,7.75,Mr +0,3, Husein Sivic,male,40,0,0,7.8958,Mr +0,2, Robert Douglas Norman,male,28,0,0,13.5,Mr +0,3, John Simmons,male,40,0,0,8.05,Mr +0,3, (Marion Ogden) Meanwell,female,62,0,0,8.05,Miss +0,3, Alfred J Davies,male,24,2,0,24.15,Mr +0,3, Ilia Stoytcheff,male,19,0,0,7.8958,Mr +0,3, Nils (Alma Cornelia Berglund) Palsson,female,29,0,4,21.075,Mrs +0,3, Tannous Doharr,male,28,0,0,7.2292,Mr +1,3, Carl Jonsson,male,32,0,0,7.8542,Mr +1,2, George Harris,male,62,0,0,10.5,Mr +1,1, Edward Dale (Charlotte Lamson) Appleton,female,53,2,0,51.4792,Mrs +1,1, John Irwin Flynn,male,36,0,0,26.3875,Mr +1,3, Mary Kelly,female,22,0,0,7.75,Miss +0,3, Alfred George John Rush,male,16,0,0,8.05,Mr +0,3, George Patchett,male,19,0,0,14.5,Mr +1,2, Ethel Garside,female,34,0,0,13,Miss +1,1, William Baird (Alice Munger) Silvey,female,39,1,0,55.9,Mrs +0,3, Joseph (Maria Elias) Caram,female,18,1,0,14.4583,Mrs +1,3, Eiriik Jussila,male,32,0,0,7.925,Mr +1,2, Julie Rachel Christy,female,25,1,1,30,Miss +1,1, John Borland (Marian Longstreth Morris) Thayer,female,39,1,1,110.8833,Mrs +0,2, William James Downton,male,54,0,0,26,Mr +0,1, John Hugo Ross,male,36,0,0,40.125,Mr +0,3, Uscher Paulner,male,16,0,0,8.7125,Mr +1,1, Ruth Taussig,female,18,0,2,79.65,Miss +0,2, John Denzil Jarvis,male,47,0,0,15,Mr +1,1, Maxmillian Frolicher-Stehli,male,60,1,1,79.2,Mr +0,3, Eliezer Gilinski,male,22,0,0,8.05,Mr +0,3, Joseph Murdlin,male,22,0,0,8.05,Mr +0,3, Matti Rintamaki,male,35,0,0,7.125,Mr +1,1, Walter Bertram (Martha Eustis) Stephenson,female,52,1,0,78.2667,Mrs +0,3, William James Elsbury,male,47,0,0,7.25,Mr +0,3, Mary Bourke,female,40,0,2,7.75,Miss +0,2, John Henry Chapman,male,37,1,0,26,Mr +0,3, Jean Baptiste Van Impe,male,36,1,1,24.15,Mr +1,2, Jessie Wills Leitch,female,31,0,0,33,Miss +0,3, Alfred Johnson,male,49,0,0,0,Mr +0,3, Hanna Boulos,male,18,0,0,7.225,Mr +1,1, Cosmo Edmund Duff Gordon,male,49,1,0,56.9292,Sir +1,2, Sidney Samuel (Amy Frances Christy) Jacobsohn,female,24,2,1,27,Mrs +0,3, Petco Slabenoff,male,42,0,0,7.8958,Mr +0,1, Charles H Harrington,male,37,0,0,42.4,Mr +0,3, Ernst William Torber,male,44,0,0,8.05,Mr +1,1, Harry Homer,male,35,0,0,26.55,Mr +0,3, Edvard Bengtsson Lindell,male,36,1,0,15.55,Mr +0,3, Milan Karaic,male,30,0,0,7.8958,Mr +1,1, Robert Williams Daniel,male,27,0,0,30.5,Mr +1,2, Joseph (Juliette Marie Louise Lafargue) Laroche,female,22,1,2,41.5792,Mrs +1,1, Elizabeth W Shutes,female,40,0,0,153.4625,Miss +0,3, Anders Johan (Alfrida Konstantia Brogren) Andersson,female,39,1,5,31.275,Mrs +0,3, Jose Neto Jardin,male,21,0,0,7.05,Mr +1,3, Margaret Jane Murphy,female,18,1,0,15.5,Miss +0,3, John Horgan,male,22,0,0,7.75,Mr +0,3, William Alfred Brocklebank,male,35,0,0,8.05,Mr +1,2, Alice Herman,female,24,1,2,65,Miss +0,3, Ernst Gilbert Danbom,male,34,1,1,14.4,Mr +0,3, William Arthur (Cordelia K Stanlick) Lobb,female,26,1,0,16.1,Mrs +1,2, Marion Louise Becker,female,4,2,1,39,Miss +0,2, Lawrence Gavey,male,26,0,0,10.5,Mr +0,3, Antoni Yasbeck,male,27,1,0,14.4542,Mr +1,1, Edwin Nelson Jr Kimball,male,42,1,0,52.5542,Mr +1,3, Sahid Nakid,male,20,1,1,15.7417,Mr +0,3, Henry Damsgaard Hansen,male,21,0,0,7.8542,Mr +0,3, David John Bowen,male,21,0,0,16.1,Mr +0,1, Frederick Sutton,male,61,0,0,32.3208,Mr +0,2, Charles Leonard Kirkland,male,57,0,0,12.35,Rev +1,1, Gretchen Fiske Longley,female,21,0,0,77.9583,Miss +0,3, Guentcho Bostandyeff,male,26,0,0,7.8958,Mr +0,3, Patrick D O'Connell,male,18,0,0,7.7333,Mr +1,1, Algernon Henry Wilson Barkworth,male,80,0,0,30,Mr +0,3, Johan Svensson Lundahl,male,51,0,0,7.0542,Mr +1,1, Max Stahelin-Maeglin,male,32,0,0,30.5,Dr +0,1, William Henry Marsh Parr,male,30,0,0,0,Mr +0,3, Mabel Skoog,female,9,3,2,27.9,Miss +1,2, Mary Davis,female,28,0,0,13,Miss +0,3, Antti Gustaf Leinonen,male,32,0,0,7.925,Mr +0,2, Harvey Collyer,male,31,1,1,26.25,Mr +0,3, Juha (Maria Emilia Ojala) Panula,female,41,0,5,39.6875,Mrs +0,3, Percival Thorneycroft,male,37,1,0,16.1,Mr +0,3, Hans Peder Jensen,male,20,0,0,7.8542,Mr +1,1, Emma Sagesser,female,24,0,0,69.3,Mlle +0,3, Margit Elizabeth Skoog,female,2,3,2,27.9,Miss +1,3, Choong Foo,male,32,0,0,56.4958,Mr +1,3, Eugenie Baclini,female,0.75,2,1,19.2583,Miss +1,1, Henry Sleeper Harper,male,48,1,0,76.7292,Mr +0,3, Liudevit Cor,male,19,0,0,7.8958,Mr +1,1, Oberst Alfons Simonius-Blumer,male,56,0,0,35.5,Col +0,3, Edward Willey,male,21,0,0,7.55,Mr +1,3, Amy Zillah Elsie Stanley,female,23,0,0,7.55,Miss +0,3, Mito Mitkoff,male,23,0,0,7.8958,Mr +1,2, Elsie Doling,female,18,0,1,23,Miss +0,3, Johannes Halvorsen Kalvik,male,21,0,0,8.4333,Mr +1,3, Hanora O'Leary,female,16,0,0,7.8292,Miss +0,3, Hanora Hegarty,female,18,0,0,6.75,Miss +0,2, Leonard Mark Hickman,male,24,2,0,73.5,Mr +0,3, Alexander Radeff,male,27,0,0,7.8958,Mr +0,3, John (Catherine) Bourke,female,32,1,1,15.5,Mrs +0,2, George Floyd Eitemiller,male,23,0,0,13,Mr +0,1, Arthur Webster Newell,male,58,0,2,113.275,Mr +1,1, Henry William Frauenthal,male,50,2,0,133.65,Dr +0,3, Mohamed Badt,male,40,0,0,7.225,Mr +0,1, Edward Pomeroy Colley,male,47,0,0,25.5875,Mr +0,3, Peju Coleff,male,36,0,0,7.4958,Mr +1,3, Eino William Lindqvist,male,20,1,0,7.925,Mr +0,2, Lewis Hickman,male,32,2,0,73.5,Mr +0,2, Reginald Fenton Butler,male,25,0,0,13,Mr +0,3, Knud Paust Rommetvedt,male,49,0,0,7.775,Mr +0,3, Jacob Cook,male,43,0,0,8.05,Mr +1,1, Elmer Zebley (Juliet Cummins Wright) Taylor,female,48,1,0,52,Mrs +1,2, Thomas William Solomon (Elizabeth Catherine Ford) Brown,female,40,1,1,39,Mrs +0,1, Thornton Davidson,male,31,1,0,52,Mr +0,2, Henry Michael Mitchell,male,70,0,0,10.5,Mr +1,2, Charles Wilhelms,male,31,0,0,13,Mr +0,2, Ennis Hastings Watson,male,19,0,0,0,Mr +0,3, Gustaf Hjalmar Edvardsson,male,18,0,0,7.775,Mr +0,3, Frederick Charles Sawyer,male,24.5,0,0,8.05,Mr +1,3, Anna Sofia Turja,female,18,0,0,9.8417,Miss +0,3, Frederick (Augusta Tyler) Goodwin,female,43,1,6,46.9,Mrs +1,1, Thomas Drake Martinez Cardeza,male,36,0,1,512.3292,Mr +0,3, Katie Peters,female,28,0,0,8.1375,Miss +1,1, Hammad Hassab,male,27,0,0,76.7292,Mr +0,3, Thor Anderson Olsvigen,male,20,0,0,9.225,Mr +0,3, Charles Edward Goodwin,male,14,5,2,46.9,Mr +0,2, Thomas William Solomon Brown,male,60,1,1,39,Mr +0,2, Joseph Philippe Lemercier Laroche,male,25,1,2,41.5792,Mr +0,3, Jaako Arnold Panula,male,14,4,1,39.6875,Mr +0,3, Branko Dakic,male,19,0,0,10.1708,Mr +0,3, Eberhard Thelander Fischer,male,18,0,0,7.7958,Mr +1,1, Georgette Alexandra Madill,female,15,0,1,211.3375,Miss +1,1, Albert Adrian Dick,male,31,1,0,57,Mr +1,3, Manca Karun,female,4,0,1,13.4167,Miss +1,3, Ali Lam,male,37,0,0,56.4958,Mr +0,3, Khalil Saad,male,25,0,0,7.225,Mr +0,1, John Weir,male,60,0,0,26.55,Col +0,2, Charles Henry Chapman,male,52,0,0,13.5,Mr +0,3, James Kelly,male,44,0,0,8.05,Mr +1,3, Katherine Mullens,female,19,0,0,7.7333,Miss +0,1, John Borland Thayer,male,49,1,1,110.8833,Mr +0,3, Adolf Mathias Nicolai Olsen Humblen,male,42,0,0,7.65,Mr +1,1, John Jacob (Madeleine Talmadge Force) Astor,female,18,1,0,227.525,Mrs +1,1, Spencer Victor Silverthorne,male,35,0,0,26.2875,Mr +0,3, Saiide Barbara,female,18,0,1,14.4542,Miss +0,3, Martin Gallagher,male,25,0,0,7.7417,Mr +0,3, Henrik Juul Hansen,male,26,1,0,7.8542,Mr +0,2, Henry Samuel Morley,male,39,0,0,26,Mr +1,2, Florence Kelly,female,45,0,0,13.5,Mrs +1,1, Edward Pennington Calderhead,male,42,0,0,26.2875,Mr +1,1, Alice Cleaver,female,22,0,0,151.55,Miss +1,3, Halim Gonios Moubarek,male,4,1,1,15.2458,Master +1,1, Berthe Antonine Mayne,female,24,0,0,49.5042,Mlle +0,1, Herman Klaber,male,41,0,0,26.55,Mr +1,1, Elmer Zebley Taylor,male,48,1,0,52,Mr +0,3, August Viktor Larsson,male,29,0,0,9.4833,Mr +0,2, Samuel Greenberg,male,52,0,0,13,Mr +0,3, Peter Andreas Lauritz Andersen Soholt,male,19,0,0,7.65,Mr +1,1, Caroline Louise Endres,female,38,0,0,227.525,Miss +1,2, Edwina Celia Troutt,female,27,0,0,10.5,Miss +0,3, Malkolm Joackim Johnson,male,33,0,0,7.775,Mr +1,2, Annie Jessie Harper,female,6,0,1,33,Miss +0,3, Svend Lauritz Jensen,male,17,1,0,7.0542,Mr +0,2, William Henry Gillespie,male,34,0,0,13,Mr +0,2, Henry Price Hodges,male,50,0,0,13,Mr +1,1, Norman Campbell Chambers,male,27,1,0,53.1,Mr +0,3, Luka Oreskovic,male,20,0,0,8.6625,Mr +1,2, Peter Henry (Lillian Jefferys) Renouf,female,30,3,0,21,Mrs +1,3, Margareth Mannion,female,28,0,0,7.7375,Miss +0,2, Kurt Arnold Gottfrid Bryhl,male,25,1,0,26,Mr +0,3, Pieta Sofia Ilmakangas,female,25,1,0,7.925,Miss +1,1, Elisabeth Walton Allen,female,29,0,0,211.3375,Miss +0,3, Houssein G N Hassan,male,11,0,0,18.7875,Mr +0,2, Robert J Knight,male,41,0,0,0,Mr +0,2, William John Berriman,male,23,0,0,13,Mr +0,2, Moses Aaron Troupiansky,male,23,0,0,13,Mr +0,3, Leslie Williams,male,28.5,0,0,16.1,Mr +0,3, Edward (Margaret Ann Watson) Ford,female,48,1,3,34.375,Mrs +1,1, Gustave J Lesurer,male,35,0,0,512.3292,Mr +0,3, Kanio Ivanoff,male,20,0,0,7.8958,Mr +0,3, Minko Nankoff,male,32,0,0,7.8958,Mr +1,1, Walter James Hawksford,male,45,0,0,30,Mr +0,1, Tyrell William Cavendish,male,36,1,0,78.85,Mr +1,1, Susan Parker Ryerson,female,21,2,2,262.375,Miss +0,3, Neal McNamee,male,24,1,0,16.1,Mr +1,3, Juho Stranden,male,31,0,0,7.925,Mr +0,1, Edward Gifford Crosby,male,70,1,1,71,Capt +0,3, Rossmore Edward Abbott,male,16,1,1,20.25,Mr +1,2, Anna Sinkkonen,female,30,0,0,13,Miss +0,1, Daniel Warner Marvin,male,19,1,0,53.1,Mr +0,3, Michael Connaghton,male,31,0,0,7.75,Mr +1,2, Joan Wells,female,4,1,1,23,Miss +1,3, Meier Moor,male,6,0,1,12.475,Master +0,3, Johannes Joseph Vande Velde,male,33,0,0,9.5,Mr +0,3, Lalio Jonkoff,male,23,0,0,7.8958,Mr +1,2, Samuel (Jane Laver) Herman,female,48,1,2,65,Mrs +1,2, Viljo Hamalainen,male,0.67,1,1,14.5,Master +0,3, August Sigfrid Carlsson,male,28,0,0,7.7958,Mr +0,2, Percy Andrew Bailey,male,18,0,0,11.5,Mr +0,3, Thomas Leonard Theobald,male,34,0,0,8.05,Mr +1,1, of (Lucy Noel Martha Dyer-Edwards) Rothes,female,33,0,0,86.5,the Countess +0,3, John Garfirth,male,23,0,0,14.5,Mr +0,3, Iisakki Antino Aijo Nirva,male,41,0,0,7.125,Mr +1,3, Hanna Assi Barah,male,20,0,0,7.2292,Mr +1,1, William Ernest (Lucile Polk) Carter,female,36,1,2,120,Mrs +0,3, Hans Linus Eklund,male,16,0,0,7.775,Mr +1,1, John C (Anna Andrews) Hogeboom,female,51,1,0,77.9583,Mrs +0,1, Arthur Jackson Brewe,male,46,0,0,39.6,Dr +0,3, Mary Mangan,female,30.5,0,0,7.75,Miss +0,3, Daniel J Moran,male,28,1,0,24.15,Mr +0,3, Daniel Danielsen Gronnestad,male,32,0,0,8.3625,Mr +0,3, Rene Aime Lievens,male,24,0,0,9.5,Mr +0,3, Niels Peder Jensen,male,48,0,0,7.8542,Mr +0,2, (Mary) Mack,female,57,0,0,10.5,Mrs +0,3, Dibo Elias,male,29,0,0,7.225,Mr +1,2, Elizabeth (Eliza Needs) Hocking,female,54,1,3,23,Mrs +0,3, Pehr Fabian Oliver Malkolm Myhrman,male,18,0,0,7.75,Mr +0,3, Roger Tobin,male,20,0,0,7.75,Mr +1,3, Virginia Ethel Emanuel,female,5,0,0,12.475,Miss +0,3, Thomas J Kilgannon,male,22,0,0,7.7375,Mr +1,1, Edward Scott (Elisabeth Walton McMillan) Robert,female,43,0,1,211.3375,Mrs +1,3, Banoura Ayoub,female,13,0,0,7.2292,Miss +1,1, Albert Adrian (Vera Gillespie) Dick,female,17,1,0,57,Mrs +0,1, Milton Clyde Long,male,29,0,0,30,Mr +0,3, Andrew G Johnston,male,35,1,2,23.45,Mr +0,3, William Ali,male,25,0,0,7.05,Mr +0,3, Abraham (David Lishin) Harmer,male,25,0,0,7.25,Mr +1,3, Anna Sofia Sjoblom,female,18,0,0,7.4958,Miss +0,3, George Hugh Rice,male,8,4,1,29.125,Master +1,3, Bertram Vere Dean,male,1,1,2,20.575,Master +0,1, Benjamin Guggenheim,male,46,0,0,79.2,Mr +0,3, Andrew Keane,male,20,0,0,7.75,Mr +0,2, Alfred Gaskell,male,16,0,0,26,Mr +0,3, Stella Anna Sage,female,21,8,2,69.55,Miss +0,1, William Fisher Hoyt,male,43,0,0,30.6958,Mr +0,3, Ristiu Dantcheff,male,25,0,0,7.8958,Mr +0,2, Richard Otter,male,39,0,0,13,Mr +1,1, Alice (Farnham) Leader,female,49,0,0,25.9292,Dr +1,3, Mara Osman,female,31,0,0,8.6833,Mrs +0,3, Yousseff Ibrahim Shawah,male,30,0,0,7.2292,Mr +0,3, Jean Baptiste (Rosalie Paula Govaert) Van Impe,female,30,1,1,24.15,Mrs +0,2, Martin Ponesell,male,34,0,0,13,Mr +1,2, Harvey (Charlotte Annie Tate) Collyer,female,31,1,1,26.25,Mrs +1,1, William Thornton II Carter,male,11,1,2,120,Master +1,3, Assad Alexander Thomas,male,0.42,0,1,8.5167,Master +1,3, Oskar Arvid Hedman,male,27,0,0,6.975,Mr +0,3, Karl Johan Johansson,male,31,0,0,7.775,Mr +0,1, Thomas Jr Andrews,male,39,0,0,0,Mr +0,3, Ellen Natalia Pettersson,female,18,0,0,7.775,Miss +0,2, August Meyer,male,39,0,0,13,Mr +1,1, Norman Campbell (Bertha Griggs) Chambers,female,33,1,0,53.1,Mrs +0,3, William Alexander,male,26,0,0,7.8875,Mr +0,3, James Lester,male,39,0,0,24.15,Mr +0,2, Richard James Slemen,male,35,0,0,10.5,Mr +0,3, Ebba Iris Alfrida Andersson,female,6,4,2,31.275,Miss +0,3, Ernest Portage Tomlin,male,30.5,0,0,8.05,Mr +0,1, Richard Fry,male,39,0,0,0,Mr +0,3, Wendla Maria Heininen,female,23,0,0,7.925,Miss +0,2, Albert Mallet,male,31,1,1,37.0042,Mr +0,3, John Fredrik Alexander Holm,male,43,0,0,6.45,Mr +0,3, Karl Thorsten Skoog,male,10,3,2,27.9,Master +1,1, Charles Melville (Clara Jennings Gregg) Hays,female,52,1,1,93.5,Mrs +1,3, Nikola Lulic,male,27,0,0,8.6625,Mr +0,1, John George Reuchlin,male,38,0,0,0,Jonkheer +1,3, (Beila) Moor,female,27,0,1,12.475,Mrs +0,3, Urho Abraham Panula,male,2,4,1,39.6875,Master +0,3, John Flynn,male,36,0,0,6.95,Mr +0,3, Len Lam,male,23,0,0,56.4958,Mr +1,2, Andre Mallet,male,1,0,2,37.0042,Master +1,3, Thomas Joseph McCormack,male,19,0,0,7.75,Mr +1,1, George Nelson (Martha Evelyn) Stone,female,62,0,0,80,Mrs +1,3, Antoni (Selini Alexander) Yasbeck,female,15,1,0,14.4542,Mrs +1,2, George Sibley Richards,male,0.83,1,1,18.75,Master +0,3, Amin Saad,male,30,0,0,7.2292,Mr +0,3, Albert Augustsson,male,23,0,0,7.8542,Mr +0,3, Owen George Allum,male,18,0,0,8.3,Mr +1,1, Sara Rebecca Compton,female,39,1,1,83.1583,Miss +0,3, Jakob Pasic,male,21,0,0,8.6625,Mr +0,3, Maurice Sirota,male,20,0,0,8.05,Mr +1,3, Chang Chip,male,32,0,0,56.4958,Mr +1,1, Pierre Marechal,male,29,0,0,29.7,Mr +0,3, Ilmari Rudolf Alhomaki,male,20,0,0,7.925,Mr +0,2, Thomas Charles Mudd,male,16,0,0,10.5,Mr +1,1, Augusta Serepeca,female,30,0,0,31,Miss +0,3, Peter L Lemberopolous,male,34.5,0,0,6.4375,Mr +0,3, Jeso Culumovic,male,17,0,0,8.6625,Mr +0,3, Anthony Abbing,male,42,0,0,7.55,Mr +0,3, Douglas Bullen Sage,male,18,8,2,69.55,Mr +0,3, Marin Markoff,male,35,0,0,7.8958,Mr +0,2, John Harper,male,28,0,1,33,Rev +1,1, Samuel L (Edwiga Grabowska) Goldenberg,female,40,1,0,89.1042,Mrs +0,3, Sigvard Harald Elias Andersson,male,4,4,2,31.275,Master +0,3, Johan Svensson,male,74,0,0,7.775,Mr +0,3, Nourelain Boulos,female,9,1,1,15.2458,Miss +1,1, Mary Conover Lines,female,16,0,1,39.4,Miss +0,2, Ernest Courtenay (Lilian Hughes) Carter,female,44,1,0,26,Mrs +1,3, Sam (Leah Rosen) Aks,female,18,0,1,9.35,Mrs +1,1, George Dennick (Mary Hitchcock) Wick,female,45,1,1,164.8667,Mrs +1,1, Peter Denis Daly,male,51,0,0,26.55,Mr +1,3, Solomon (Latifa Qurban) Baclini,female,24,0,3,19.2583,Mrs +0,3, Raihed Razi,male,30,0,0,7.2292,Mr +0,3, Claus Peter Hansen,male,41,2,0,14.1083,Mr +0,2, Frederick Edward Giles,male,21,1,0,11.5,Mr +1,1, Frederick Joel (Margaret Welles Barron) Swift,female,48,0,0,25.9292,Mrs +0,3, Dorothy Edith Sage,female,14,8,2,69.55,Miss +0,2, John William Gill,male,24,0,0,13,Mr +1,2, (Karolina) Bystrom,female,42,0,0,13,Mrs +1,2, Asuncion Duran y More,female,27,1,0,13.8583,Miss +0,1, Washington Augustus II Roebling,male,31,0,0,50.4958,Mr +0,3, Philemon van Melkebeke,male,23,0,0,9.5,Mr +1,3, Harold Theodor Johnson,male,4,1,1,11.1333,Master +0,3, Cerin Balkic,male,26,0,0,7.8958,Mr +1,1, Richard Leonard (Sallie Monypeny) Beckwith,female,47,1,1,52.5542,Mrs +0,1, Frans Olof Carlsson,male,33,0,0,5,Mr +0,3, Victor Vander Cruyssen,male,47,0,0,9,Mr +1,2, Samuel (Hannah Wizosky) Abelson,female,28,1,0,24,Mrs +1,3, Adele Kiamie Najib,female,15,0,0,7.225,Miss +0,3, Alfred Ossian Gustafsson,male,20,0,0,9.8458,Mr +0,3, Nedelio Petroff,male,19,0,0,7.8958,Mr +0,3, Kristo Laleff,male,23,0,0,7.8958,Mr +1,1, Thomas Jr (Lily Alexenia Wilson) Potter,female,56,0,1,83.1583,Mrs +1,2, William (Imanita Parrish Hall) Shelley,female,25,0,1,26,Mrs +0,3, Johann Markun,male,33,0,0,7.8958,Mr +0,3, Gerda Ulrika Dahlberg,female,22,0,0,10.5167,Miss +0,2, Frederick James Banfield,male,28,0,0,10.5,Mr +0,3, Henry Jr Sutehall,male,25,0,0,7.05,Mr +0,3, William (Margaret Norton) Rice,female,39,0,5,29.125,Mrs +0,2, Juozas Montvila,male,27,0,0,13,Rev +1,1, Margaret Edith Graham,female,19,0,0,30,Miss +0,3, Catherine Helen Johnston,female,7,1,2,23.45,Miss +1,1, Karl Howell Behr,male,26,0,0,30,Mr +0,3, Patrick Dooley,male,32,0,0,7.75,Mr diff --git a/danfojs-node/tests/core/concat.js b/src/danfojs-node/test/transformers/concat.test.ts similarity index 63% rename from danfojs-node/tests/core/concat.js rename to src/danfojs-node/test/transformers/concat.test.ts index ee4d6010..0dd84947 100644 --- a/danfojs-node/tests/core/concat.js +++ b/src/danfojs-node/test/transformers/concat.test.ts @@ -1,11 +1,8 @@ import { assert } from "chai"; -import { DataFrame } from '../../src/core/frame'; -import { concat } from '../../src/core/concat'; -import { Series } from "../../src/core/series"; - - -describe("Concatenate", function () { +import { describe, it } from "mocha"; +import { DataFrame, concat , Series } from "../../dist/danfojs-node/src"; +describe("Concat", ()=>{ it("Check the axis 0 concatenation", function () { let data = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 20, 30, 40 ], [ 39, 89, 78 ] ]; let cols = [ "A", "B", "C" ]; @@ -19,7 +16,7 @@ describe("Concatenate", function () { let cols2 = [ "A", "B", "C", "D" ]; let df2 = new DataFrame(data2, { columns: cols2 }); - let new_df = concat({ "df_list": [ df, df1, df2 ], "axis": 0 }); + let new_df = concat({ dfList: [ df, df1, df2 ], axis: 0 }); let data_values = [ [ 1, 2, 3, NaN ], [ 4, 5, 6, NaN ], [ 20, 30, 40, NaN ], [ 39, 89, 78, NaN ], [ 1, 2, 3, NaN ], [ 4, 5, 6, NaN ], [ 20, 30, 40, NaN ], [ 39, 89, 78, NaN ], @@ -41,7 +38,7 @@ describe("Concatenate", function () { let cols2 = [ "A", "B", "C", "D" ]; let df2 = new DataFrame(data2, { columns: cols2 }); - let new_df = concat({ "df_list": [ df, df1, df2 ], "axis": 1 }); + let new_df = concat({ dfList: [ df, df1, df2 ], axis: 1 }); let data_values = [ [ 1, 2, 3, 1, 2, 3, 1, 2, 3, 5 ], [ 4, 5, 6, 4, 5, 6, 4, 5, 6, 8 ], [ 20, 30, 40, 20, 30, 40, 20, 30, 40, 10 ], [ 39, 89, 78, 39, 89, 78, NaN, @@ -59,20 +56,18 @@ describe("Concatenate", function () { let df = new DataFrame(data, { columns: cols }); let s1 = new Series(data1); - let s2 = new Series(data2); let rslt = [ - [ 1, 2, 3, NaN ], - [ 4, 5, 6, NaN ], - [ 20, 30, 40, NaN ], - [ 39, 89, 78, NaN ], - [ NaN, NaN, NaN, 1 ], - [ NaN, NaN, NaN, 2 ], - [ NaN, NaN, NaN, 3 ], - [ NaN, NaN, NaN, 4 ] + [ NaN, 1, 2, 3 ], + [ NaN, 4, 5, 6 ], + [ NaN, 20, 30, 40], + [ NaN, 39, 89, 78 ], + [ 1, NaN, NaN, NaN ], + [ 2, NaN, NaN, NaN ], + [ 3, NaN, NaN, NaN], + [ 4, NaN, NaN, NaN ] ]; - - let con = concat({ "df_list": [ df, s1 ], "axis": 0 }); + let con = concat({ dfList: [ df, s1 ], axis: 0 }); assert.deepEqual(con.values, rslt); @@ -87,14 +82,14 @@ describe("Concatenate", function () { let data1 = [ 1, 2, 3, 4 ]; let s1 = new Series(data1); let rslt = [ - [ 1, 2, 3, 1 ], - [ 4, 5, 6, 2 ], - [ 20, 30, 40, 3 ], - [ 39, 89, 78, 4 ] + [ 1, 1, 2, 3 ], + [ 2, 4, 5, 6 ], + [ 3, 20, 30, 40 ], + [ 4, 39, 89, 78] ]; - let con = concat({ "df_list": [ df, s1 ], "axis": 1 }); + let con = concat({ dfList: [ df, s1 ], axis: 1 }); assert.deepEqual(con.values, rslt); @@ -109,7 +104,7 @@ describe("Concatenate", function () { let rslt = [ [ 1, 3 ], [ 2, 4 ], [ 3, 5 ], [ 4, 6 ] ]; - let con = concat({ "df_list": [ s1, s2 ], "axis": 1 }); + let con = concat({ dfList: [ s1, s2 ], axis: 1 }); assert.deepEqual(con.values, rslt); @@ -126,38 +121,10 @@ describe("Concatenate", function () { 3, 4, 5, 6 ]; - let con = concat({ "df_list": [ s1, s2 ], "axis": 0 }); - - assert.deepEqual(con.values, rslt); - - }); - - it("test if df_list is an array", function(){ - - assert.throws(function () { concat({ "df_list":23, "axis":0 }); }, Error, 'df_list must be an Array of dataFrames/Series'); - - }); - it("assign default axis for concating", function(){ - let data1 = [ 1, 2, 3, 4 ]; - let data2 = [ 3, 4, 5, 6 ]; - - let s1 = new Series(data1); - let s2 = new Series(data2); - let rslt = [ [ 1, 3 ], [ 2, 4 ], [ 3, 5 ], [ 4, 6 ] ]; - - - let con = concat({ "df_list": [ s1, s2 ], "axis": 12 }); + let con = concat({ dfList: [ s1, s2 ], axis: 0 }); assert.deepEqual(con.values, rslt); - }); - it("ensure axis is a number", function(){ - let data1 = [ 1, 2, 3, 4 ]; - let data2 = [ 3, 4, 5, 6 ]; - - let s1 = new Series(data1); - let s2 = new Series(data2); - assert.throws(function () { concat({ "df_list":[ s1, s2 ], "axis":"r" }); }, Error, 'axis must be a number'); }); -}); +}) \ No newline at end of file diff --git a/src/danfojs-node/test/transformers/csv.stream.transformer.test.ts b/src/danfojs-node/test/transformers/csv.stream.transformer.test.ts new file mode 100644 index 00000000..2d56b080 --- /dev/null +++ b/src/danfojs-node/test/transformers/csv.stream.transformer.test.ts @@ -0,0 +1,63 @@ +import { DataFrame, Series, streamCsvTransformer } from "../../dist/danfojs-node/src"; +import stream from "stream" +import path from "path" +import { describe, it } from "mocha"; + +describe("pipeCsvTransform", function () { + it("streamCsvTransformer works for local files", async function () { + const inputFilePath = path.join(process.cwd(), "test", "samples", "titanic.csv"); + const outputFilePath = path.join(process.cwd(), "test", "samples", "titanicOutLocal.csv"); + + const transformer = (df: DataFrame) => { + const titles = df["Name"].map((name: string) => name.split(".")[0]); + const names = df["Name"].map((name: string) => name.split(".")[1]); + df["Name"] = names + df.addColumn("titles", titles, { inplace: true }) + return df + } + streamCsvTransformer(inputFilePath, transformer, { outputFilePath, inputStreamOptions: { header: false } }) + }); + + it("streamCsvTransformer works for remote files", async function () { + const inputFilePath = "https://raw.githubusercontent.com/opensource9ja/danfojs/dev/danfojs-node/tests/samples/titanic.csv" + const outputFilePath = path.join(process.cwd(), "test", "samples", "titanicOutRemote.csv"); + const transformer = (df: DataFrame) => { + const titles = df["Name"].map((name: string) => name.split(".")[0]); + const names = df["Name"].map((name: string) => name.split(".")[1]); + df["Name"] = names + df.addColumn("titles", titles, { inplace: true }) + return df + } + streamCsvTransformer(inputFilePath, transformer, { outputFilePath, inputStreamOptions: { header: true } }) + }); + + it("streamCsvTransformer works for custom writers", async function () { + const inputFilePath = "https://raw.githubusercontent.com/opensource9ja/danfojs/dev/danfojs-node/tests/samples/titanic.csv" + const transformer = (df: DataFrame) => { + const titles = df["Name"].map((name: string) => name.split(".")[0]); + const names = df["Name"].map((name: string) => name.split(".")[1]); + df["Name"] = names + df.addColumn("titles", titles, { inplace: true }) + return df + } + let count = 0 + + const customWriter = function () { + const csvOutputStream = new stream.Writable({ objectMode: true }) + csvOutputStream._write = (chunk: DataFrame | Series, encoding, callback) => { + count += 1 + callback() + + } + return csvOutputStream + } + + streamCsvTransformer( + inputFilePath, + transformer, + { + customCSVStreamWriter: customWriter, + inputStreamOptions: { header: true } + }) + }); +}) \ No newline at end of file diff --git a/src/danfojs-node/test/transformers/dummy.encoder.test.ts b/src/danfojs-node/test/transformers/dummy.encoder.test.ts new file mode 100644 index 00000000..3ed921a3 --- /dev/null +++ b/src/danfojs-node/test/transformers/dummy.encoder.test.ts @@ -0,0 +1,177 @@ +import { assert } from "chai"; +import { describe, it } from "mocha"; +import { DataFrame, Series, getDummies } from "../../dist/danfojs-node/src"; + +describe("DummyEncoder", function () { + it("getDummies works on Series", function () { + + const data = ["dog", "male", "female", "male", "female", "male", "dog"]; + const series = new Series(data); + const df = getDummies(series, { prefix: "test", prefixSeparator: "/" }); + + const dfValues = [ + [1, 0, 0], + [0, 1, 0], + [0, 0, 1], + [0, 1, 0], + [0, 0, 1], + [0, 1, 0], + [1, 0, 0] + ]; + const dfColumns = ['test/dog', 'test/male', 'test/female']; + assert.deepEqual(df.values, dfValues); + assert.deepEqual(df.columns, dfColumns); + }); + it("getDummies works on Series with default prefix and prefixSeperator", function () { + + const data = ["dog", "male", "female", "male", "female", "male", "dog"]; + const series = new Series(data); + const df = getDummies(series); + + const dfValues = [ + [1, 0, 0], + [0, 1, 0], + [0, 0, 1], + [0, 1, 0], + [0, 0, 1], + [0, 1, 0], + [1, 0, 0] + ]; + const dfColumns = ['0_dog', '1_male', '2_female']; + assert.deepEqual(df.values, dfValues); + assert.deepEqual(df.columns, dfColumns); + }); + + it("getDummies works on DataFrame", function () { + + const data = [[1, "dog", 1.0, "fat"], [3, "fog", 2.0, "good"], [4, "gof", 3.0, "best"]]; + const columns = ["A", "B", "C", "d"]; + const df = new DataFrame(data, { columns: columns }); + + const df1 = getDummies(df, { prefixSeparator: ["_", "#"], columns: ["A", "d"], prefix: "test" }); + const expectedColumns = ['B', 'C', 'test_1', 'test_3', 'test_4', 'test#fat', 'test#good', 'test#best'] + const expected = [['dog', 1.0, 1, 0, 0, 1, 0, 0], + ['fog', 2.0, 0, 1, 0, 0, 1, 0], + ['gof', 3.0, 0, 0, 1, 0, 0, 1]] + assert.deepEqual(df1.values, expected); + assert.deepEqual(df1.columns, expectedColumns); + + }); + it("Throw error if the prefix specified is not equal to the column specified", function () { + + const data = [[1, "dog", 1.0, "fat"], [3, "fog", 2.0, "good"], [4, "gof", 3.0, "best"]]; + const columns = ["A", "B", "C", "d"]; + const df = new DataFrame(data, { columns: columns }); + + assert.throws(function () { getDummies(df, { prefix: ["fg"], prefixSeparator: "_", columns: ["A", "d"] }); }, Error, + `ParamError: prefix and data array must be of the same length. If you need to use the same prefix, then pass a string param instead. e.g {prefix: "fg"}`); + + }); + it("replace column sepecified with prefix", function () { + + const data = [[1, "dog", 1.0, "fat"], [3, "fog", 2.0, "good"], [4, "gof", 3.0, "best"]]; + const columns = ["A", "B", "C", "d"]; + const df = new DataFrame(data, { columns: columns }); + + const df1 = getDummies(df, { prefix: ["F", "G"], prefixSeparator: "_", columns: ["A", "d"] }); + const expectedColumns = [ + 'B', 'C', + 'F_1', 'F_3', + 'F_4', 'G_fat', + 'G_good', 'G_best' + ]; + + const expected = [['dog', 1.0, 1, 0, 0, 1, 0, 0], + ['fog', 2.0, 0, 1, 0, 0, 1, 0], + ['gof', 3.0, 0, 0, 1, 0, 0, 1]] + + assert.deepEqual(df1.values, expected); + assert.deepEqual(df1.columns, expectedColumns); + + }); + + it("getDummies auto infers and encode columns with string dtype", function () { + + const data = [[1, "dog", 1.0, "fat"], [3, "fog", 2.0, "good"], [4, "gof", 3.0, "best"]]; + const columns = ["A", "B", "C", "d"]; + const df = new DataFrame(data, { columns: columns }); + + const df1 = getDummies(df, { prefixSeparator: "_" }); + const expectedColumns = [ + 'A', 'C', + 'B_dog', 'B_fog', + 'B_gof', 'd_fat', + 'd_good', 'd_best' + ]; + const expected = [ + [ + 1, 1, 1, 0, + 0, 1, 0, 0 + ], + [ + 3, 2, 0, 1, + 0, 0, 1, 0 + ], + [ + 4, 3, 0, 0, + 1, 0, 0, 1 + ] + ]; + assert.deepEqual(df1.values, expected); + assert.deepEqual(df1.columns, expectedColumns); + + }); + + it("should one hot encode all other columns", function () { + + const data = [[1, "dog", 1.0, "fat"], [3, "fog", 2.0, "good"], [4, "gof", 3.0, "best"]]; + const columns = ["A", "B", "C", "d"]; + const df = new DataFrame(data, { columns: columns }); + const rslt = [ + [1, 'dog', 1, 1, 0, 0], + [3, 'fog', 2, 0, 1, 0], + [4, 'gof', 3, 0, 0, 1] + ] + + assert.deepEqual(getDummies(df, { columns: ["d"] }).values, rslt) + + }); + + + it("Dummification works for object DF", function () { + + let data = { + fruits: ['pear', 'mango', "pawpaw", "mango", "bean"], + Count: [20, 30, 89, 12, 30], + Country: ["NG", "NG", "GH", "RU", "RU"] + }; + + let df = new DataFrame(data); + const expected = [ + [ + 20, 1, 0, 0, + 0, 1, 0, 0 + ], + [ + 30, 0, 1, 0, + 0, 1, 0, 0 + ], + [ + 89, 0, 0, 1, + 0, 0, 1, 0 + ], + [ + 12, 0, 1, 0, + 0, 0, 0, 1 + ], + [ + 30, 0, 0, 0, + 1, 0, 0, 1 + ] + ]; + + let dum_df = getDummies(df, { prefixSeparator: "_" }); + assert.deepEqual(dum_df.values, expected); + + }); +}); diff --git a/src/danfojs-node/test/transformers/label.encoder.test.ts b/src/danfojs-node/test/transformers/label.encoder.test.ts new file mode 100644 index 00000000..1eda8862 --- /dev/null +++ b/src/danfojs-node/test/transformers/label.encoder.test.ts @@ -0,0 +1,53 @@ +import { assert } from "chai"; +import { describe, it } from "mocha"; +import { DataFrame, Series, LabelEncoder } from "../../dist/danfojs-node/src"; + +describe("LabelEncoder", function () { + + it("LabelEncoder works for Series", function () { + const sf = new Series([1, 2, 2, 6]) + const scaler = new LabelEncoder(); + scaler.fit(sf); + const expected = [0, 1, 1, 2]; + assert.deepEqual((scaler.transform(sf) as Series).values, expected); + }); + it("LabelEncoder works for values not found", function () { + const sf = new Series([1, 2, 2, 6]) + const scaler = new LabelEncoder(); + scaler.fit(sf); + + const expected = [0, 1, 1, 2, -1]; + assert.deepEqual((scaler.transform(new Series([1, 2, 2, 6, 7])) as Series).values, expected); + }); + it("LabelEncoder works for 1D array", function () { + const sf = [1, 2, 2, "boy", "git", "git"] + const scaler = new LabelEncoder(); + scaler.fit(sf); + const expected = [0, 1, 1, 2, 3, 3] + assert.deepEqual(scaler.transform(sf), expected); + }); + it("fitTransform works for 1D array", function () { + const sf = [1, 2, 2, "boy", "git", "git"] + const scaler = new LabelEncoder(); + const result = scaler.fitTransform(sf) + const expected = [0, 1, 1, 2, 3, 3] + assert.deepEqual(result, expected); + }); + it("inverseTransform works for 1D array", function () { + const sf = [1, 2, 2, "boy", "git", "git"] + const scaler = new LabelEncoder(); + scaler.fit(sf); + const result = scaler.inverseTransform([0, 1, 1, 2, 3, 3]) + assert.deepEqual(result, [1, 2, 2, "boy", "git", "git"]); + }); + it("Get properties from LabelEncoder", function () { + const sf = [1, 2, 2, "boy", "git", "git"] + const scaler = new LabelEncoder(); + scaler.fit(sf); + const classes = scaler.classes + const nClasses = scaler.nClasses + + assert.deepEqual(classes, { 1: 0, 2: 1, boy: 2, git: 3 }); + assert.equal(nClasses, 4) + }); +}); diff --git a/danfojs-node/tests/core/merge.js b/src/danfojs-node/test/transformers/merge.test.ts similarity index 87% rename from danfojs-node/tests/core/merge.js rename to src/danfojs-node/test/transformers/merge.test.ts index ab82527f..809701e3 100644 --- a/danfojs-node/tests/core/merge.js +++ b/src/danfojs-node/test/transformers/merge.test.ts @@ -1,6 +1,7 @@ import { assert } from "chai"; -import { DataFrame } from '../../src/core/frame'; -import { merge } from '../../src/core/merge'; +import { describe, it } from "mocha"; +import { DataFrame, merge } from "../../dist/danfojs-node/src"; + describe("Merge", function () { @@ -16,7 +17,7 @@ describe("Merge", function () { let df1 = new DataFrame(data, { columns: colum1 }); let df2 = new DataFrame(data2, { columns: colum2 }); - let merge_df = merge({ "left": df1, "right": df2, "on": [ "Key1", "Key2" ], "how": "outer" }); + let merge_df = merge({ left: df1, right: df2, on: [ "Key1", "Key2" ], how: "outer" }); let output_data = [ [ 'K0', 'k0', 'A0', 'B0', 'C0', 'D0' ], @@ -27,7 +28,6 @@ describe("Merge", function () { [ 'K2', 'K0', NaN, NaN, 'C3', 'D3' ] ]; - assert.deepEqual(merge_df.values, output_data); }); @@ -43,7 +43,7 @@ describe("Merge", function () { let df1 = new DataFrame(data, { columns: colum1 }); let df2 = new DataFrame(data2, { columns: colum2 }); - let merge_df = merge({ "left": df1, "right": df2, "on": [ "Key1", "Key2" ], "how": "inner" }); + let merge_df = merge({ left: df1, right: df2, on: [ "Key1", "Key2" ], how: "inner" }); let output_data = [ [ 'K0', 'k0', 'A0', 'B0', 'C0', 'D0' ], @@ -66,7 +66,7 @@ describe("Merge", function () { let df1 = new DataFrame(data, { columns: colum1 }); let df2 = new DataFrame(data2, { columns: colum2 }); - let merge_df = merge({ "left": df1, "right": df2, "on": [ "Key1", "Key2" ], "how": "left" }); + let merge_df = merge({ left: df1, right: df2, on: [ "Key1", "Key2" ], how: "left" }); let output_data = [ [ 'K0', 'k0', 'A0', 'B0', 'C0', 'D0' ], @@ -91,7 +91,7 @@ describe("Merge", function () { let df1 = new DataFrame(data, { columns: colum1 }); let df2 = new DataFrame(data2, { columns: colum2 }); - let merge_df = merge({ "left": df1, "right": df2, "on": [ "Key1", "Key2" ], "how": "right" }); + let merge_df = merge({ left: df1, right: df2, on: [ "Key1", "Key2" ], how: "right" }); let output_data = [ [ 'K0', 'k0', 'A0', 'B0', 'C0', 'D0' ], @@ -102,4 +102,5 @@ describe("Merge", function () { assert.deepEqual(merge_df.values, output_data); }); -}); +}) + diff --git a/src/danfojs-node/test/transformers/min.max.scaler.test.ts b/src/danfojs-node/test/transformers/min.max.scaler.test.ts new file mode 100644 index 00000000..8c32340b --- /dev/null +++ b/src/danfojs-node/test/transformers/min.max.scaler.test.ts @@ -0,0 +1,56 @@ +import { assert } from "chai"; +import { describe, it } from "mocha"; +import { DataFrame, Series, MinMaxScaler } from "../../dist/danfojs-node/src"; + +describe("MinMaxscaler", function () { + + it("Standardize values in a DataFrame using a MinMaxScaler", function () { + const data = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]]; + const scaler = new MinMaxScaler(); + + const expected = [[0, 0], [0.25, 0.25], [0.5, 0.5], [1, 1]]; + const transformedData = [[1.5, 0.]]; + + scaler.fit(new DataFrame(data)); + const resultDf = scaler.transform(new DataFrame(data)) as DataFrame; + assert.deepEqual(resultDf.values, expected); + assert.deepEqual(scaler.transform([[2, 2]]) as any, transformedData); + }); + it("fitTransform using a MinMaxScaler", function () { + const data = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]]; + const scaler = new MinMaxScaler(); + const resultDf = scaler.fitTransform(new DataFrame(data)) as DataFrame; + + const expected = [[0, 0], [0.25, 0.25], [0.5, 0.5], [1, 1]]; + assert.deepEqual(resultDf.values, expected); + }); + it("InverseTransform with MinMaxScaler", function () { + const scaler = new MinMaxScaler(); + scaler.fit([1, 2, 3, 4, 5]) + const resultTransform = scaler.transform([1, 2, 3, 4, 5]) + const resultInverse = scaler.inverseTransform([0, 0.25, 0.5, 0.75, 1]) + + assert.deepEqual(resultTransform, [0, 0.25, 0.5, 0.75, 1]); + assert.deepEqual([1, 2, 3, 4, 5], resultInverse); + }); + it("Index and columns are kept after transformation", function () { + const data = [[-1, 2], [-0.5, 6], [0, 10], [1, 18]]; + const df = new DataFrame(data, { index: [1, 2, 3, 4], columns: ["a", "b"] }); + + const scaler = new MinMaxScaler(); + scaler.fit(df); + const resultDf = scaler.transform(df) as DataFrame + + assert.deepEqual(resultDf.index, [1, 2, 3, 4]); + assert.deepEqual(resultDf.columns, ["a", "b"]); + }); + it("Standardize values in a Series using a MinMaxScaler", function () { + const data = [-1, 2, -0.5, 60, 101, 18]; + const scaler = new MinMaxScaler(); + const result = [0, 0.029411764815449715, 0.0049019609577953815, 0.5980392098426819, 1, 0.18627451360225677]; + const transformedData = [0.029411764815449715, 0.029411764815449715]; + scaler.fit(new Series(data)) + assert.deepEqual((scaler.transform(new Series(data)) as Series).values, result); + assert.deepEqual(scaler.transform([2, 2]), transformedData); + }); +}); diff --git a/src/danfojs-node/test/transformers/one.hot.encoder.test.ts b/src/danfojs-node/test/transformers/one.hot.encoder.test.ts new file mode 100644 index 00000000..9885a89a --- /dev/null +++ b/src/danfojs-node/test/transformers/one.hot.encoder.test.ts @@ -0,0 +1,84 @@ +import { assert } from "chai"; +import { describe, it } from "mocha"; +import { Series, OneHotEncoder, DataFrame } from "../../dist/danfojs-node/src"; + +describe("OneHotEncoder", function () { + it("OneHotEncoder works on array", function () { + const data = ["dog", "cat", "man", "dog", "cat", "man", "man", "cat"]; + const encode = new OneHotEncoder(); + encode.fit(data) + + const expected = [ + [1, 0, 0], + [0, 1, 0], + [0, 0, 1], + [1, 0, 0], + [0, 1, 0], + [0, 0, 1], + [0, 0, 1], + [0, 1, 0] + ]; + assert.deepEqual(encode.transform(data), expected); + assert.deepEqual(encode.transform(["man", "cat"]), [[0, 0, 1], [0, 1, 0]]); + }); + it("OneHotEncoder works on Series", function () { + const data = ["dog", "cat", "man", "dog", "cat", "man", "man", "cat"]; + const series = new Series(data); + const encoder = new OneHotEncoder(); + encoder.fit(series); + + const expected = [ + [1, 0, 0], + [0, 1, 0], + [0, 0, 1], + [1, 0, 0], + [0, 1, 0], + [0, 0, 1], + [0, 0, 1], + [0, 1, 0] + ]; + assert.deepEqual((encoder.transform(series) as DataFrame).values, expected); + }); + + it("fitTransform works on OneHotEncoder", function () { + const data = ["dog", "cat", "man", "dog", "cat", "man", "man", "cat"]; + const series = new Series(data); + const encoder = new OneHotEncoder(); + const result = encoder.fitTransform(series) as DataFrame + + const expected = [ + [1, 0, 0], + [0, 1, 0], + [0, 0, 1], + [1, 0, 0], + [0, 1, 0], + [0, 0, 1], + [0, 0, 1], + [0, 1, 0] + ]; + assert.deepEqual(result.values, expected); + }); + + it("Correct index is returned after transformation", function () { + const data = ["dog", "cat", "man", "dog", "cat", "man", "man", "cat"]; + const series = new Series(data, + { index: ["a", "b", "c", "d", "e", "f", "g", "h"], + }); + const encoder = new OneHotEncoder(); + const result = encoder.fitTransform(series) as DataFrame + + const expected = [ + [1, 0, 0], + [0, 1, 0], + [0, 0, 1], + [1, 0, 0], + [0, 1, 0], + [0, 0, 1], + [0, 0, 1], + [0, 1, 0] + ]; + assert.deepEqual(result.values, expected); + assert.deepEqual(result.index, ["a", "b", "c", "d", "e", "f", "g", "h"]); + assert.deepEqual(result.columns, ["0", "1", "2"]); + }); +}); diff --git a/src/danfojs-node/test/transformers/standard.scaler.test.ts b/src/danfojs-node/test/transformers/standard.scaler.test.ts new file mode 100644 index 00000000..ffe2d955 --- /dev/null +++ b/src/danfojs-node/test/transformers/standard.scaler.test.ts @@ -0,0 +1,58 @@ +import { assert } from "chai"; +import { describe, it } from "mocha"; +import { DataFrame, Series, StandardScaler } from "../../dist/danfojs-node/src"; + + +describe("StandardScaler", function () { + + it("StandardScaler works for DataFrame", function () { + const data = [[0, 0], [0, 0], [1, 1], [1, 1]]; + + const scaler = new StandardScaler(); + scaler.fit(new DataFrame(data)) + + const expected = [[-1, -1], [-1, -1], [1, 1], [1, 1]]; + const resultDf = scaler.transform(new DataFrame(data)) as DataFrame + assert.deepEqual(resultDf.values, expected); + assert.deepEqual(scaler.transform([[2, 2]]) as any, [[3, 3]]); + }); + it("fitTransform works for StandardScaler", function () { + const data = [[0, 0], [0, 0], [1, 1], [1, 1]]; + + const scaler = new StandardScaler(); + const resultDf = scaler.fitTransform(new DataFrame(data)) as DataFrame; + + const expected = [[-1, -1], [-1, -1], [1, 1], [1, 1]]; + assert.deepEqual(resultDf.values, expected); + }); + it("inverseTransform works for StandardScaler", function () { + const data = [[0, 0], [0, 0], [1, 1], [1, 1]]; + + const scaler = new StandardScaler(); + scaler.fit(new DataFrame(data)) + const resultDf = scaler.inverseTransform([[-1, -1], [-1, -1], [1, 1], [1, 1]]) as any + + assert.deepEqual(resultDf, data); + }); + it("StandardScaler works for Array", function () { + const data = [[0, 0], [0, 0], [1, 1], [1, 1]]; + + const scaler = new StandardScaler(); + scaler.fit(data) + const expected = [[-1, -1], [-1, -1], [1, 1], [1, 1]]; + + assert.deepEqual(scaler.transform(data) as any, expected); + assert.deepEqual(scaler.transform([[2, 2]]) as any, [[3, 3]]); + }); + + it("StandardScaler works for Series", function () { + const data = [0, 0, 0, 0, 1, 1, 1, 1] + + const scaler = new StandardScaler(); + scaler.fit(new Series(data)) + const expected = [-1, -1, -1, -1, 1, 1, 1, 1] + + assert.deepEqual((scaler.transform(new Series(data)) as Series).values, expected); + assert.deepEqual(scaler.transform([2, 2]), [3, 3]); + }); +}); diff --git a/src/danfojs-node/test/utils.test.ts b/src/danfojs-node/test/utils.test.ts new file mode 100644 index 00000000..a9d1ab39 --- /dev/null +++ b/src/danfojs-node/test/utils.test.ts @@ -0,0 +1,227 @@ +import { assert } from "chai"; +import { describe, it } from "mocha"; +import { Utils, __version } from "../dist/danfojs-node/src"; +import packagejson from "../package.json"; + +const pversion = packagejson.version; + +const utils = new Utils(); + +describe("Utils", function () { + it("should have a version", function () { + assert.equal(__version, pversion); + }); + + it("removes an element from an array", function () { + let arr = [1, 2, 3, 4]; + assert.deepEqual(utils.removeElementFromArray(arr, 2), [1, 2, 4]); + }); + + it("Checks if variable is a string", function () { + let arr = ["1", "2"]; + assert.isTrue(utils.isString(arr[0])); + }); + + it("Checks if variable is a number", function () { + let arr = [1, 2, 3, 4]; + assert.isTrue(utils.isNumber(arr[0])); + }); + + it("Checks if value is null", function () { + let val = null; + let val2 = 1; + assert.isTrue(utils.isNull(val)); + assert.isFalse(utils.isNull(val2)); + }); + + it("Checks if value is undefined", function () { + let arr; + assert.isTrue(utils.isUndefined(arr)); + }); + + it("Generate numbers between two set of values [both inclusive]", function () { + let start = 0; + let end = 5; + let data = [0, 1, 2, 3, 4, 5]; + assert.deepEqual(utils.range(start, end), data); + }); + + it("transposes an array", function () { + let data = [[1, 2, 3], [4, 5, 6], [20, 30, 40]]; + let result = [[1, 4, 20], [2, 5, 30], [3, 6, 40]]; + assert.deepEqual(utils.transposeArray(data), result); + }); + + describe("inferDtype", function () { + it("Returns string type present in an 1D array", function () { + let data = ['Alice', 'Boy', 'Girl', "39"]; + let result = ['string']; + assert.deepEqual(utils.inferDtype(data), result); + }); + + it("Returns float type present in an 1D array", function () { + let data = [1.1, 2.1, 3.2, 4.4]; + let result = ['float32']; + assert.deepEqual(utils.inferDtype(data), result); + }); + + it("Returns int type present in an 1D array", function () { + let data = [1, 2, 3, 45]; + let result = ['int32']; + assert.deepEqual(utils.inferDtype(data), result); + }); + it("Returns float when there's a mixture of int and float in a 1D array", function () { + let data = [1, 2.1, 3, 45]; + let result = ['float32']; + assert.deepEqual(utils.inferDtype(data), result); + }); + + it("Returns float type when NaN is present in an 1D array", function () { + let data = [1, 2, 3, 45, NaN]; + let result = ['float32']; + assert.deepEqual(utils.inferDtype(data), result); + }); + + it("Returns correct dtype if NaN present in data", function () { + let data = utils.transposeArray([ + [18.7, 17.4, 18, NaN, 19.3], + [20, NaN, 19, 18, 20]]) + let result = ['float32', 'float32']; + assert.deepEqual(utils.inferDtype(data), result); + }); + + it("Returns the data type present in an 2D array", function () { + let data = utils.transposeArray([['Alice', 'Boy', 'Girl', "39"], [2, 5, 30, 89], [3.1, 6.1, 40.1, 78.2]]) + let result = ['string', 'int32', 'float32']; + assert.deepEqual(utils.inferDtype(data), result); + }); + + it("Returns the string dtype when there's a mixture of dtypes in a 2D array", function () { + let data = utils.transposeArray([['Alice', 'Boy', 'Girl', 21], [2, 5, 30, "hey"], [3, 6, 40.1, 78.2]]) + let result = ['string', 'string', 'float32']; + assert.deepEqual(utils.inferDtype(data), result); + }); + + it("Returns bool type in a 1D array", function () { + let data = [true, true, false, false, false, true]; + let result = ['boolean']; + assert.deepEqual(utils.inferDtype(data), result); + }); + it("Returns bool type in a 2D array", function () { + let data = utils.transposeArray([[true, false, true], ["boy", "girl", "man"], [20, 30, 24]]) + let result = ['boolean', 'string', 'int32']; + assert.deepEqual(utils.inferDtype(data), result); + }); + + it("Returns string type if values are all NaN", function () { + let data = utils.transposeArray([[true, false, true], ["boy", "girl", "boy"], [NaN, NaN, NaN]]) + let result = ['boolean', 'string', 'float32']; + assert.deepEqual(utils.inferDtype(data), result); + }); + + }); + + describe("mapIntegersToBooleans", function () { + it("map ints to bools in array of arrays", function () { + let data = [[1, 0, 1], [1, 1, 0]]; + assert.deepEqual(utils.mapIntegersToBooleans(data, 2), [[true, false, true], [true, true, false]]); + }); + + it("map ints to bools in array", function () { + let data = [1, 0, 0, 1, 1]; + assert.deepEqual(utils.mapIntegersToBooleans(data, 1), [true, false, false, true, true]); + }); + }); + + describe("round", function () { + it("round elements in array to 1 dp", function () { + let data = [10.01, 2.2, 3.11, 20.505, 20.22, 40.0909]; + assert.deepEqual(utils.round(data, 1, true), [10.0, 2.2, 3.1, 20.5, 20.2, 40.1]); + }); + + it("round elements in array to 2 dp", function () { + let data = [10.019, 2.2099, 3.1145, 20.506, 20.22, 40.0909]; + assert.deepEqual(utils.round(data, 2, true), [10.02, 2.21, 3.11, 20.51, 20.22, 40.09]); + }); + }); + + describe("replaceUndefinedWithNaN", function () { + it("replace undefined in Series with NaN", function () { + let data = [10.01, 2.2, undefined, 20.505, 20.22, undefined]; + assert.deepEqual(utils.replaceUndefinedWithNaN(data, true), [10.01, 2.2, NaN, 20.505, 20.22, NaN]); + }); + + it("replace undefined in DataFrame with NaN", function () { + let data = [[10.01, 2.2, undefined, 20.505, 20.22, undefined], + [10.01, undefined, undefined, 20.505, 20, undefined]]; + + let result = [[10.01, 2.2, NaN, 20.505, 20.22, NaN], + [10.01, NaN, NaN, 20.505, 20, NaN]]; + assert.deepEqual(utils.replaceUndefinedWithNaN(data, false), result); + }); + + it("replace null in Series with NaN", function () { + let data = [10.01, 2.2, null, 20.505, 20.22, null]; + assert.deepEqual(utils.replaceUndefinedWithNaN(data, true), [10.01, 2.2, NaN, 20.505, 20.22, NaN]); + }); + + it("replace null in DataFrame with NaN", function () { + let data = [[10.01, 2.2, null, 20.505, 20.22, null], + [10.01, null, null, 20.505, 20, null]]; + + let result = [[10.01, 2.2, NaN, 20.505, 20.22, NaN], + [10.01, NaN, NaN, 20.505, 20, NaN]]; + assert.deepEqual(utils.replaceUndefinedWithNaN(data, false), result); + }); + }); + + describe("convert2DArrayToSeriesArray", function () { + it("convert 2D array of array to 1D of string values", function () { + let data = [[10.01, 2.2, "a"], [20.505, 20.22, "boy"]]; + assert.deepEqual(utils.convert2DArrayToSeriesArray(data), ["10.01,2.2,a", "20.505,20.22,boy"]); + }); + + }); + + describe("throwErrorOnWrongParams", function () { + it("check if the right params are passed to a function", function () { + let paramsNeeded = ["replace", "with", "inplace"] + let kwargs = { "replae": 2, "with": 12, "inplace": true } + + assert.throws(() => { + utils.throwErrorOnWrongParams(kwargs, paramsNeeded) + }, Error, `Params Error: Required parameter not found. Your params must include the following [${paramsNeeded}]`); + }) + + it("check if the right params are passed to a function 2", function () { + let paramsNeeded = ["replace", "with", "inplace"] + let kwargs = { "replace": 2, "with": 12, "inplace": true } + utils.throwErrorOnWrongParams(kwargs, paramsNeeded) + }) + + }) + + describe("getRowAndColValues", function () { + it("retreive rows and labels from column object", function () { + let data = { "Alpha": ["A", "B", "C", "D"], count: [1, 2, 3, 4], sum: [20.3, 30.456, 40.90, 90.1] }; + let res = [["A", 1, 20.3], ["B", 2, 30.456], ["C", 3, 40.90], ["D", 4, 90.1]]; + assert.deepEqual(utils.getRowAndColValues(data)[0], res as any); + assert.deepEqual(utils.getRowAndColValues(data)[1], ["Alpha", "count", "sum"]); + }); + + }); + + + describe("getDuplicate", function () { + it("obtain duplicates and their index", function () { + let data = [1, 2, 3, 4, 5, 3, 4, 6, 4, 5]; + let res = { + '3': { count: 2, index: [2, 5] }, + '4': { count: 3, index: [3, 6, 8] }, + '5': { count: 2, index: [4, 9] } + }; + assert.deepEqual(utils.getDuplicate(data), res); + }); + }); + +}); diff --git a/src/danfojs-node/tsconfig.json b/src/danfojs-node/tsconfig.json new file mode 100644 index 00000000..3c52c2a7 --- /dev/null +++ b/src/danfojs-node/tsconfig.json @@ -0,0 +1,27 @@ +{ + "compilerOptions": { + "target": "es5", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */ + "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */ + "lib": ["es6", "DOM"], /* Specify library files to be included in the compilation. */ + "allowJs": true, /* Allow javascript files to be compiled. */ + "outDir": "./dist", /* Redirect output structure to the directory. */ + "strict": true, /* Enable all strict type-checking options. */ + "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ + // "noUnusedLocals": true, /* Report errors on unused locals. */ + // "noUnusedParameters": true, /* Report errors on unused parameters. */ + "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ + "resolveJsonModule": true, /* Include modules imported with '.json' extension */ + "skipLibCheck": true, /* Skip type checking of declaration files. */ + "forceConsistentCasingInFileNames": true, /* Disallow inconsistently-cased references to the same file. */ + "declaration": true, + "baseUrl": "./src", + }, + "include": [ + "./src/**/*" +], +"exclude": [ + "test.ts", + "**/*.spec.ts" +] +} diff --git a/src/danfojs-node/yarn-error.log b/src/danfojs-node/yarn-error.log new file mode 100644 index 00000000..eecc46ae --- /dev/null +++ b/src/danfojs-node/yarn-error.log @@ -0,0 +1,5663 @@ +Arguments: + /usr/local/bin/node /usr/local/Cellar/yarn/1.22.5/libexec/bin/yarn.js test + +PATH: + /Users/mac/.poetry/bin:/Users/mac/Downloads/google-cloud-sdk/bin:/Users/mac/opt/anaconda3/condabin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin + +Yarn version: + 1.22.5 + +Node version: + 14.17.0 + +Platform: + darwin x64 + +Trace: + SyntaxError: /Users/mac/Documents/Opensource/danfojs/src/danfojs-node/package.json: Unexpected token y in JSON at position 750 + at JSON.parse () + at /usr/local/Cellar/yarn/1.22.5/libexec/lib/cli.js:1625:59 + at Generator.next () + at step (/usr/local/Cellar/yarn/1.22.5/libexec/lib/cli.js:310:30) + at /usr/local/Cellar/yarn/1.22.5/libexec/lib/cli.js:321:13 + +npm manifest: + { + "name": "danfojs-node", + "version": "1.0.0", + "description": "JavaScript library providing high performance, intuitive, and easy to use data structures for manipulating and processing structured data.", + "main": "dist/danfojs-node/src/index.js", + "types": "dist/danfojs-node/src/index.d.ts", + "directories": { + "test": "test" + }, + "contributors": [ + { + "name": "Rising Odegua" + }, + { + "name": "Stephen Oni" + } + ], + "files": [ + "dist/" + ], + "dependencies": { + "@tensorflow/tfjs-node": "3.6.1", + "mathjs": "^9.4.4", + "node-fetch": "^2.6.1", + "papaparse": "^5.3.1", + "request": "^2.88.2", + "stream-json": "^1.7.3", + "table": "6.7.1", + "xlsx": "^0.17.2", + "seedrandom": "^2.4.3" + }, + yarn "scripts": { + "test": "nyc mocha --require ts-node/register test/**/*.test.ts", + "test:clean": "yarn build:clean && yarn test", + "dev": "nodemon", + "build": "tsc", + "build:clean": "rimraf ./build && node ./scripts/prebuild.js && tsc", + "lint": "eslint ./src", + "coveralls": "cat ./coverage/lcov.info | ./node_modules/.bin/coveralls", + "coverage": "nyc report --reporter=text-lcov | coveralls && nyc report --reporter=lcov", + "patch": "npm version patch" + }, + "publishConfig": { + "access": "public", + "branches": [ + "master" + ] + }, + "repository": { + "type": "git", + "url": "git+https://github.com/opensource9ja/danfojs.git" + }, + "keywords": [ + "pandas", + "data-analysis", + "data-manipulation", + "analysis" + ], + "author": "Rising Odegua ", + "license": "MIT", + "bugs": { + "url": "https://github.com/opensource9ja/danfojs/issues" + }, + "homepage": "https://github.com/opensource9ja/danfojs#readme", + "devDependencies": { + "@babel/cli": "^7.10.5", + "@babel/core": "^7.10.5", + "@babel/plugin-transform-runtime": "^7.12.10", + "@babel/preset-env": "^7.10.4", + "@babel/register": "^7.10.1", + "@types/chai": "^4.2.19", + "@types/mocha": "^8.2.2", + "@types/node": "^16.9.6", + "@types/papaparse": "^5.2.6", + "@types/request": "^2.48.7", + "@types/stream-json": "^1.7.1", + "@types/table": "^6.3.2", + "chai": "^4.2.0", + "coveralls": "^3.1.0", + "dotenv": "^10.0.0", + "dts-bundle-generator": "^5.9.0", + "eslint": "^7.1.0", + "mocha": "^7.2.0", + "nodemon": "^2.0.7", + "nyc": "^15.1.0", + "rimraf": "^3.0.2", + "ts-node": "^10.0.0", + "typescript": "^4.4.2", + "yarn": "^1.22.10" + }, + "nyc": { + "reporter": [ + "lcov", + "text" + ] + } + } + +yarn manifest: + No manifest + +Lockfile: + # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. + # yarn lockfile v1 + + + "@babel/cli@^7.10.5": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.12.10.tgz#67a1015b1cd505bde1696196febf910c4c339a48" + integrity sha512-+y4ZnePpvWs1fc/LhZRTHkTesbXkyBYuOB+5CyodZqrEuETXi3zOVfpAQIdgC3lXbHLTDG9dQosxR9BhvLKDLQ== + dependencies: + commander "^4.0.1" + convert-source-map "^1.1.0" + fs-readdir-recursive "^1.1.0" + glob "^7.0.0" + lodash "^4.17.19" + make-dir "^2.1.0" + slash "^2.0.0" + source-map "^0.5.0" + optionalDependencies: + "@nicolo-ribaudo/chokidar-2" "2.1.8-no-fsevents" + chokidar "^3.4.0" + + "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" + integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== + dependencies: + "@babel/highlight" "^7.10.4" + + "@babel/compat-data@^7.12.5", "@babel/compat-data@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.12.7.tgz#9329b4782a7d6bbd7eef57e11addf91ee3ef1e41" + integrity sha512-YaxPMGs/XIWtYqrdEOZOCPsVWfEoriXopnsz3/i7apYPXQ3698UFhS6dVT1KN5qOsWmVgw/FOrmQgpRaZayGsw== + + "@babel/core@^7.10.5", "@babel/core@^7.7.5": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.10.tgz#b79a2e1b9f70ed3d84bbfb6d8c4ef825f606bccd" + integrity sha512-eTAlQKq65zHfkHZV0sIVODCPGVgoo1HdBlbSLi9CqOzuZanMv2ihzY+4paiKr1mH+XmYESMAmJ/dpZ68eN6d8w== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.10" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helpers" "^7.12.5" + "@babel/parser" "^7.12.10" + "@babel/template" "^7.12.7" + "@babel/traverse" "^7.12.10" + "@babel/types" "^7.12.10" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + semver "^5.4.1" + source-map "^0.5.0" + + "@babel/generator@^7.12.10", "@babel/generator@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.11.tgz#98a7df7b8c358c9a37ab07a24056853016aba3af" + integrity sha512-Ggg6WPOJtSi8yYQvLVjG8F/TlpWDlKx0OpS4Kt+xMQPs5OaGYWy+v1A+1TvxI6sAMGZpKWWoAQ1DaeQbImlItA== + dependencies: + "@babel/types" "^7.12.11" + jsesc "^2.5.1" + source-map "^0.5.0" + + "@babel/helper-annotate-as-pure@^7.10.4": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.10.tgz#54ab9b000e60a93644ce17b3f37d313aaf1d115d" + integrity sha512-XplmVbC1n+KY6jL8/fgLVXXUauDIB+lD5+GsQEh6F6GBF1dq1qy4DP4yXWzDKcoqXB3X58t61e85Fitoww4JVQ== + dependencies: + "@babel/types" "^7.12.10" + + "@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz#bb0b75f31bf98cbf9ff143c1ae578b87274ae1a3" + integrity sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.10.4" + "@babel/types" "^7.10.4" + + "@babel/helper-compilation-targets@^7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.5.tgz#cb470c76198db6a24e9dbc8987275631e5d29831" + integrity sha512-+qH6NrscMolUlzOYngSBMIOQpKUGPPsc61Bu5W10mg84LxZ7cmvnBHzARKbDoFxVvqqAbj6Tg6N7bSrWSPXMyw== + dependencies: + "@babel/compat-data" "^7.12.5" + "@babel/helper-validator-option" "^7.12.1" + browserslist "^4.14.5" + semver "^5.5.0" + + "@babel/helper-create-class-features-plugin@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz#3c45998f431edd4a9214c5f1d3ad1448a6137f6e" + integrity sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-member-expression-to-functions" "^7.12.1" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-replace-supers" "^7.12.1" + "@babel/helper-split-export-declaration" "^7.10.4" + + "@babel/helper-create-regexp-features-plugin@^7.12.1": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.7.tgz#2084172e95443fa0a09214ba1bb328f9aea1278f" + integrity sha512-idnutvQPdpbduutvi3JVfEgcVIHooQnhvhx0Nk9isOINOIGYkZea1Pk2JlJRiUnMefrlvr0vkByATBY/mB4vjQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + regexpu-core "^4.7.1" + + "@babel/helper-define-map@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz#b53c10db78a640800152692b13393147acb9bb30" + integrity sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/types" "^7.10.5" + lodash "^4.17.19" + + "@babel/helper-explode-assignable-expression@^7.10.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz#8006a466695c4ad86a2a5f2fb15b5f2c31ad5633" + integrity sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA== + dependencies: + "@babel/types" "^7.12.1" + + "@babel/helper-function-name@^7.10.4", "@babel/helper-function-name@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.12.11.tgz#1fd7738aee5dcf53c3ecff24f1da9c511ec47b42" + integrity sha512-AtQKjtYNolKNi6nNNVLQ27CP6D9oFR6bq/HPYSizlzbp7uC1M59XJe8L+0uXjbIaZaUJF99ruHqVGiKXU/7ybA== + dependencies: + "@babel/helper-get-function-arity" "^7.12.10" + "@babel/template" "^7.12.7" + "@babel/types" "^7.12.11" + + "@babel/helper-get-function-arity@^7.12.10": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.10.tgz#b158817a3165b5faa2047825dfa61970ddcc16cf" + integrity sha512-mm0n5BPjR06wh9mPQaDdXWDoll/j5UpCAPl1x8fS71GHm7HA6Ua2V4ylG1Ju8lvcTOietbPNNPaSilKj+pj+Ag== + dependencies: + "@babel/types" "^7.12.10" + + "@babel/helper-hoist-variables@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz#d49b001d1d5a68ca5e6604dda01a6297f7c9381e" + integrity sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA== + dependencies: + "@babel/types" "^7.10.4" + + "@babel/helper-member-expression-to-functions@^7.12.1", "@babel/helper-member-expression-to-functions@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.7.tgz#aa77bd0396ec8114e5e30787efa78599d874a855" + integrity sha512-DCsuPyeWxeHgh1Dus7APn7iza42i/qXqiFPWyBDdOFtvS581JQePsc1F/nD+fHrcswhLlRc2UpYS1NwERxZhHw== + dependencies: + "@babel/types" "^7.12.7" + + "@babel/helper-module-imports@^7.12.1", "@babel/helper-module-imports@^7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz#1bfc0229f794988f76ed0a4d4e90860850b54dfb" + integrity sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA== + dependencies: + "@babel/types" "^7.12.5" + + "@babel/helper-module-transforms@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz#7954fec71f5b32c48e4b303b437c34453fd7247c" + integrity sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w== + dependencies: + "@babel/helper-module-imports" "^7.12.1" + "@babel/helper-replace-supers" "^7.12.1" + "@babel/helper-simple-access" "^7.12.1" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/helper-validator-identifier" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.1" + "@babel/types" "^7.12.1" + lodash "^4.17.19" + + "@babel/helper-optimise-call-expression@^7.10.4", "@babel/helper-optimise-call-expression@^7.12.10": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.10.tgz#94ca4e306ee11a7dd6e9f42823e2ac6b49881e2d" + integrity sha512-4tpbU0SrSTjjt65UMWSrUOPZTsgvPgGG4S8QSTNHacKzpS51IVWGDj0yCwyeZND/i+LSN2g/O63jEXEWm49sYQ== + dependencies: + "@babel/types" "^7.12.10" + + "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" + integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== + + "@babel/helper-remap-async-to-generator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz#8c4dbbf916314f6047dc05e6a2217074238347fd" + integrity sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-wrap-function" "^7.10.4" + "@babel/types" "^7.12.1" + + "@babel/helper-replace-supers@^7.12.1": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.11.tgz#ea511658fc66c7908f923106dd88e08d1997d60d" + integrity sha512-q+w1cqmhL7R0FNzth/PLLp2N+scXEK/L2AHbXUyydxp828F4FEa5WcVoqui9vFRiHDQErj9Zof8azP32uGVTRA== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.12.7" + "@babel/helper-optimise-call-expression" "^7.12.10" + "@babel/traverse" "^7.12.10" + "@babel/types" "^7.12.11" + + "@babel/helper-simple-access@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz#32427e5aa61547d38eb1e6eaf5fd1426fdad9136" + integrity sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA== + dependencies: + "@babel/types" "^7.12.1" + + "@babel/helper-skip-transparent-expression-wrappers@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf" + integrity sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA== + dependencies: + "@babel/types" "^7.12.1" + + "@babel/helper-split-export-declaration@^7.10.4", "@babel/helper-split-export-declaration@^7.11.0", "@babel/helper-split-export-declaration@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.11.tgz#1b4cc424458643c47d37022223da33d76ea4603a" + integrity sha512-LsIVN8j48gHgwzfocYUSkO/hjYAOJqlpJEc7tGXcIm4cubjVUf8LGW6eWRyxEu7gA25q02p0rQUWoCI33HNS5g== + dependencies: + "@babel/types" "^7.12.11" + + "@babel/helper-validator-identifier@^7.10.4", "@babel/helper-validator-identifier@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" + integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== + + "@babel/helper-validator-option@^7.12.1", "@babel/helper-validator-option@^7.12.11": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.11.tgz#d66cb8b7a3e7fe4c6962b32020a131ecf0847f4f" + integrity sha512-TBFCyj939mFSdeX7U7DDj32WtzYY7fDcalgq8v3fBZMNOJQNn7nOYzMaUCiPxPYfCup69mtIpqlKgMZLvQ8Xhw== + + "@babel/helper-wrap-function@^7.10.4": + version "7.12.3" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz#3332339fc4d1fbbf1c27d7958c27d34708e990d9" + integrity sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + + "@babel/helpers@^7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.5.tgz#1a1ba4a768d9b58310eda516c449913fe647116e" + integrity sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA== + dependencies: + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.5" + "@babel/types" "^7.12.5" + + "@babel/highlight@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" + integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + chalk "^2.0.0" + js-tokens "^4.0.0" + + "@babel/parser@^7.12.10", "@babel/parser@^7.12.11", "@babel/parser@^7.12.7": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.11.tgz#9ce3595bcd74bc5c466905e86c535b8b25011e79" + integrity sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg== + + "@babel/plugin-proposal-async-generator-functions@^7.12.1": + version "7.12.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.12.tgz#04b8f24fd4532008ab4e79f788468fd5a8476566" + integrity sha512-nrz9y0a4xmUrRq51bYkWJIO5SBZyG2ys2qinHsN0zHDHVsUaModrkpyWWWXfGqYQmOL3x9sQIcTNN/pBGpo09A== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.12.1" + "@babel/plugin-syntax-async-generators" "^7.8.0" + + "@babel/plugin-proposal-class-properties@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz#a082ff541f2a29a4821065b8add9346c0c16e5de" + integrity sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + + "@babel/plugin-proposal-dynamic-import@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz#43eb5c2a3487ecd98c5c8ea8b5fdb69a2749b2dc" + integrity sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + + "@babel/plugin-proposal-export-namespace-from@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz#8b9b8f376b2d88f5dd774e4d24a5cc2e3679b6d4" + integrity sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + + "@babel/plugin-proposal-json-strings@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz#d45423b517714eedd5621a9dfdc03fa9f4eb241c" + integrity sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.0" + + "@babel/plugin-proposal-logical-assignment-operators@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz#f2c490d36e1b3c9659241034a5d2cd50263a2751" + integrity sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + + "@babel/plugin-proposal-nullish-coalescing-operator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz#3ed4fff31c015e7f3f1467f190dbe545cd7b046c" + integrity sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + + "@babel/plugin-proposal-numeric-separator@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.7.tgz#8bf253de8139099fea193b297d23a9d406ef056b" + integrity sha512-8c+uy0qmnRTeukiGsjLGy6uVs/TFjJchGXUeBqlG4VWYOdJWkhhVPdQ3uHwbmalfJwv2JsV0qffXP4asRfL2SQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + + "@babel/plugin-proposal-object-rest-spread@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz#def9bd03cea0f9b72283dac0ec22d289c7691069" + integrity sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-transform-parameters" "^7.12.1" + + "@babel/plugin-proposal-optional-catch-binding@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz#ccc2421af64d3aae50b558a71cede929a5ab2942" + integrity sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + + "@babel/plugin-proposal-optional-chaining@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.7.tgz#e02f0ea1b5dc59d401ec16fb824679f683d3303c" + integrity sha512-4ovylXZ0PWmwoOvhU2vhnzVNnm88/Sm9nx7V8BPgMvAzn5zDou3/Awy0EjglyubVHasJj+XCEkr/r1X3P5elCA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + + "@babel/plugin-proposal-private-methods@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz#86814f6e7a21374c980c10d38b4493e703f4a389" + integrity sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + + "@babel/plugin-proposal-unicode-property-regex@^7.12.1", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz#2a183958d417765b9eae334f47758e5d6a82e072" + integrity sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + + "@babel/plugin-syntax-async-generators@^7.8.0": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + + "@babel/plugin-syntax-class-properties@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz#bcb297c5366e79bebadef509549cd93b04f19978" + integrity sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + + "@babel/plugin-syntax-dynamic-import@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + + "@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + + "@babel/plugin-syntax-json-strings@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + + "@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + + "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + + "@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + + "@babel/plugin-syntax-object-rest-spread@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + + "@babel/plugin-syntax-optional-catch-binding@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + + "@babel/plugin-syntax-optional-chaining@^7.8.0": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + + "@babel/plugin-syntax-top-level-await@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz#dd6c0b357ac1bb142d98537450a319625d13d2a0" + integrity sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + + "@babel/plugin-transform-arrow-functions@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz#8083ffc86ac8e777fbe24b5967c4b2521f3cb2b3" + integrity sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + + "@babel/plugin-transform-async-to-generator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz#3849a49cc2a22e9743cbd6b52926d30337229af1" + integrity sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A== + dependencies: + "@babel/helper-module-imports" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.12.1" + + "@babel/plugin-transform-block-scoped-functions@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz#f2a1a365bde2b7112e0a6ded9067fdd7c07905d9" + integrity sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + + "@babel/plugin-transform-block-scoping@^7.12.11": + version "7.12.12" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.12.tgz#d93a567a152c22aea3b1929bb118d1d0a175cdca" + integrity sha512-VOEPQ/ExOVqbukuP7BYJtI5ZxxsmegTwzZ04j1aF0dkSypGo9XpDHuOrABsJu+ie+penpSJheDJ11x1BEZNiyQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + + "@babel/plugin-transform-classes@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz#65e650fcaddd3d88ddce67c0f834a3d436a32db6" + integrity sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-define-map" "^7.10.4" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.12.1" + "@babel/helper-split-export-declaration" "^7.10.4" + globals "^11.1.0" + + "@babel/plugin-transform-computed-properties@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz#d68cf6c9b7f838a8a4144badbe97541ea0904852" + integrity sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + + "@babel/plugin-transform-destructuring@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz#b9a570fe0d0a8d460116413cb4f97e8e08b2f847" + integrity sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + + "@babel/plugin-transform-dotall-regex@^7.12.1", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz#a1d16c14862817b6409c0a678d6f9373ca9cd975" + integrity sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + + "@babel/plugin-transform-duplicate-keys@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz#745661baba295ac06e686822797a69fbaa2ca228" + integrity sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + + "@babel/plugin-transform-exponentiation-operator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz#b0f2ed356ba1be1428ecaf128ff8a24f02830ae0" + integrity sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + + "@babel/plugin-transform-for-of@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz#07640f28867ed16f9511c99c888291f560921cfa" + integrity sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + + "@babel/plugin-transform-function-name@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz#2ec76258c70fe08c6d7da154003a480620eba667" + integrity sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + + "@babel/plugin-transform-literals@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz#d73b803a26b37017ddf9d3bb8f4dc58bfb806f57" + integrity sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + + "@babel/plugin-transform-member-expression-literals@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz#496038602daf1514a64d43d8e17cbb2755e0c3ad" + integrity sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + + "@babel/plugin-transform-modules-amd@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz#3154300b026185666eebb0c0ed7f8415fefcf6f9" + integrity sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ== + dependencies: + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" + + "@babel/plugin-transform-modules-commonjs@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz#fa403124542636c786cf9b460a0ffbb48a86e648" + integrity sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag== + dependencies: + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-simple-access" "^7.12.1" + babel-plugin-dynamic-import-node "^2.3.3" + + "@babel/plugin-transform-modules-systemjs@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz#663fea620d593c93f214a464cd399bf6dc683086" + integrity sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q== + dependencies: + "@babel/helper-hoist-variables" "^7.10.4" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-validator-identifier" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" + + "@babel/plugin-transform-modules-umd@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz#eb5a218d6b1c68f3d6217b8fa2cc82fec6547902" + integrity sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q== + dependencies: + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + + "@babel/plugin-transform-named-capturing-groups-regex@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz#b407f5c96be0d9f5f88467497fa82b30ac3e8753" + integrity sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.1" + + "@babel/plugin-transform-new-target@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz#80073f02ee1bb2d365c3416490e085c95759dec0" + integrity sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + + "@babel/plugin-transform-object-super@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz#4ea08696b8d2e65841d0c7706482b048bed1066e" + integrity sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.12.1" + + "@babel/plugin-transform-parameters@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz#d2e963b038771650c922eff593799c96d853255d" + integrity sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + + "@babel/plugin-transform-property-literals@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz#41bc81200d730abb4456ab8b3fbd5537b59adecd" + integrity sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + + "@babel/plugin-transform-regenerator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz#5f0a28d842f6462281f06a964e88ba8d7ab49753" + integrity sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng== + dependencies: + regenerator-transform "^0.14.2" + + "@babel/plugin-transform-reserved-words@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz#6fdfc8cc7edcc42b36a7c12188c6787c873adcd8" + integrity sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + + "@babel/plugin-transform-runtime@^7.12.10": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.10.tgz#af0fded4e846c4b37078e8e5d06deac6cd848562" + integrity sha512-xOrUfzPxw7+WDm9igMgQCbO3cJKymX7dFdsgRr1eu9n3KjjyU4pptIXbXPseQDquw+W+RuJEJMHKHNsPNNm3CA== + dependencies: + "@babel/helper-module-imports" "^7.12.5" + "@babel/helper-plugin-utils" "^7.10.4" + semver "^5.5.1" + + "@babel/plugin-transform-shorthand-properties@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz#0bf9cac5550fce0cfdf043420f661d645fdc75e3" + integrity sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + + "@babel/plugin-transform-spread@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz#527f9f311be4ec7fdc2b79bb89f7bf884b3e1e1e" + integrity sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + + "@babel/plugin-transform-sticky-regex@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.7.tgz#560224613ab23987453948ed21d0b0b193fa7fad" + integrity sha512-VEiqZL5N/QvDbdjfYQBhruN0HYjSPjC4XkeqW4ny/jNtH9gcbgaqBIXYEZCNnESMAGs0/K/R7oFGMhOyu/eIxg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + + "@babel/plugin-transform-template-literals@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz#b43ece6ed9a79c0c71119f576d299ef09d942843" + integrity sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + + "@babel/plugin-transform-typeof-symbol@^7.12.10": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.10.tgz#de01c4c8f96580bd00f183072b0d0ecdcf0dec4b" + integrity sha512-JQ6H8Rnsogh//ijxspCjc21YPd3VLVoYtAwv3zQmqAt8YGYUtdo5usNhdl4b9/Vir2kPFZl6n1h0PfUz4hJhaA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + + "@babel/plugin-transform-unicode-escapes@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz#5232b9f81ccb07070b7c3c36c67a1b78f1845709" + integrity sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + + "@babel/plugin-transform-unicode-regex@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz#cc9661f61390db5c65e3febaccefd5c6ac3faecb" + integrity sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + + "@babel/preset-env@^7.10.4": + version "7.12.11" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.11.tgz#55d5f7981487365c93dbbc84507b1c7215e857f9" + integrity sha512-j8Tb+KKIXKYlDBQyIOy4BLxzv1NUOwlHfZ74rvW+Z0Gp4/cI2IMDPBWAgWceGcE7aep9oL/0K9mlzlMGxA8yNw== + dependencies: + "@babel/compat-data" "^7.12.7" + "@babel/helper-compilation-targets" "^7.12.5" + "@babel/helper-module-imports" "^7.12.5" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-validator-option" "^7.12.11" + "@babel/plugin-proposal-async-generator-functions" "^7.12.1" + "@babel/plugin-proposal-class-properties" "^7.12.1" + "@babel/plugin-proposal-dynamic-import" "^7.12.1" + "@babel/plugin-proposal-export-namespace-from" "^7.12.1" + "@babel/plugin-proposal-json-strings" "^7.12.1" + "@babel/plugin-proposal-logical-assignment-operators" "^7.12.1" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.12.1" + "@babel/plugin-proposal-numeric-separator" "^7.12.7" + "@babel/plugin-proposal-object-rest-spread" "^7.12.1" + "@babel/plugin-proposal-optional-catch-binding" "^7.12.1" + "@babel/plugin-proposal-optional-chaining" "^7.12.7" + "@babel/plugin-proposal-private-methods" "^7.12.1" + "@babel/plugin-proposal-unicode-property-regex" "^7.12.1" + "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-class-properties" "^7.12.1" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/plugin-syntax-top-level-await" "^7.12.1" + "@babel/plugin-transform-arrow-functions" "^7.12.1" + "@babel/plugin-transform-async-to-generator" "^7.12.1" + "@babel/plugin-transform-block-scoped-functions" "^7.12.1" + "@babel/plugin-transform-block-scoping" "^7.12.11" + "@babel/plugin-transform-classes" "^7.12.1" + "@babel/plugin-transform-computed-properties" "^7.12.1" + "@babel/plugin-transform-destructuring" "^7.12.1" + "@babel/plugin-transform-dotall-regex" "^7.12.1" + "@babel/plugin-transform-duplicate-keys" "^7.12.1" + "@babel/plugin-transform-exponentiation-operator" "^7.12.1" + "@babel/plugin-transform-for-of" "^7.12.1" + "@babel/plugin-transform-function-name" "^7.12.1" + "@babel/plugin-transform-literals" "^7.12.1" + "@babel/plugin-transform-member-expression-literals" "^7.12.1" + "@babel/plugin-transform-modules-amd" "^7.12.1" + "@babel/plugin-transform-modules-commonjs" "^7.12.1" + "@babel/plugin-transform-modules-systemjs" "^7.12.1" + "@babel/plugin-transform-modules-umd" "^7.12.1" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.1" + "@babel/plugin-transform-new-target" "^7.12.1" + "@babel/plugin-transform-object-super" "^7.12.1" + "@babel/plugin-transform-parameters" "^7.12.1" + "@babel/plugin-transform-property-literals" "^7.12.1" + "@babel/plugin-transform-regenerator" "^7.12.1" + "@babel/plugin-transform-reserved-words" "^7.12.1" + "@babel/plugin-transform-shorthand-properties" "^7.12.1" + "@babel/plugin-transform-spread" "^7.12.1" + "@babel/plugin-transform-sticky-regex" "^7.12.7" + "@babel/plugin-transform-template-literals" "^7.12.1" + "@babel/plugin-transform-typeof-symbol" "^7.12.10" + "@babel/plugin-transform-unicode-escapes" "^7.12.1" + "@babel/plugin-transform-unicode-regex" "^7.12.1" + "@babel/preset-modules" "^0.1.3" + "@babel/types" "^7.12.11" + core-js-compat "^3.8.0" + semver "^5.5.0" + + "@babel/preset-modules@^0.1.3": + version "0.1.4" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" + integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + + "@babel/register@^7.10.1": + version "7.12.10" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.12.10.tgz#19b87143f17128af4dbe7af54c735663b3999f60" + integrity sha512-EvX/BvMMJRAA3jZgILWgbsrHwBQvllC5T8B29McyME8DvkdOxk4ujESfrMvME8IHSDvWXrmMXxPvA/lx2gqPLQ== + dependencies: + find-cache-dir "^2.0.0" + lodash "^4.17.19" + make-dir "^2.1.0" + pirates "^4.0.0" + source-map-support "^0.5.16" + + "@babel/runtime@^7.14.6": + version "7.15.3" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.3.tgz#2e1c2880ca118e5b2f9988322bd8a7656a32502b" + integrity sha512-OvwMLqNXkCXSz1kSm58sEsNuhqOx/fKpnUnKnFB5v8uDda5bLNEHNgKPvhDN6IU0LDcnHQ90LlJ0Q6jnyBSIBA== + dependencies: + regenerator-runtime "^0.13.4" + + "@babel/runtime@^7.8.4": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.5.tgz#410e7e487441e1b360c29be715d870d9b985882e" + integrity sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg== + dependencies: + regenerator-runtime "^0.13.4" + + "@babel/template@^7.10.4", "@babel/template@^7.12.7": + version "7.12.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.12.7.tgz#c817233696018e39fbb6c491d2fb684e05ed43bc" + integrity sha512-GkDzmHS6GV7ZeXfJZ0tLRBhZcMcY0/Lnb+eEbXDBfCAcZCjrZKe6p3J4we/D24O9Y8enxWAg1cWwof59yLh2ow== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/parser" "^7.12.7" + "@babel/types" "^7.12.7" + + "@babel/traverse@^7.10.4", "@babel/traverse@^7.12.1", "@babel/traverse@^7.12.10", "@babel/traverse@^7.12.5": + version "7.12.12" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.12.tgz#d0cd87892704edd8da002d674bc811ce64743376" + integrity sha512-s88i0X0lPy45RrLM8b9mz8RPH5FqO9G9p7ti59cToE44xFm1Q+Pjh5Gq4SXBbtb88X7Uy7pexeqRIQDDMNkL0w== + dependencies: + "@babel/code-frame" "^7.12.11" + "@babel/generator" "^7.12.11" + "@babel/helper-function-name" "^7.12.11" + "@babel/helper-split-export-declaration" "^7.12.11" + "@babel/parser" "^7.12.11" + "@babel/types" "^7.12.12" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.19" + + "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.12.1", "@babel/types@^7.12.10", "@babel/types@^7.12.11", "@babel/types@^7.12.12", "@babel/types@^7.12.5", "@babel/types@^7.12.7", "@babel/types@^7.4.4": + version "7.12.12" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.12.tgz#4608a6ec313abbd87afa55004d373ad04a96c299" + integrity sha512-lnIX7piTxOH22xE7fDXDbSHg9MM1/6ORnafpJmov5rs0kX5g4BZxeXNJLXsMRiO0U5Rb8/FvMS6xlTnTHvxonQ== + dependencies: + "@babel/helper-validator-identifier" "^7.12.11" + lodash "^4.17.19" + to-fast-properties "^2.0.0" + + "@eslint/eslintrc@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.3.0.tgz#d736d6963d7003b6514e6324bec9c602ac340318" + integrity sha512-1JTKgrOKAHVivSvOYw+sJOunkBjUOvjqWk1DPja7ZFhIS2mX/4EgTT8M7eTK9jrKhL/FvXXEbQwIs3pg1xp3dg== + dependencies: + ajv "^6.12.4" + debug "^4.1.1" + espree "^7.3.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + lodash "^4.17.20" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + + "@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + + "@istanbuljs/schema@^0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" + integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== + + "@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents": + version "2.1.8-no-fsevents" + resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.tgz#da7c3996b8e6e19ebd14d82eaced2313e7769f9b" + integrity sha512-+nb9vWloHNNMFHjGofEam3wopE3m1yuambrrd/fnPc+lFOMB9ROTqQlche9ByFWNkdNqfSgR/kkQtQ8DzEWt2w== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + + "@sindresorhus/is@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" + integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== + + "@szmarczak/http-timer@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" + integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== + dependencies: + defer-to-connect "^1.0.1" + + "@tensorflow/tfjs-backend-cpu@3.6.0": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-backend-cpu/-/tfjs-backend-cpu-3.6.0.tgz#4e64a7cf1c33b203f71f8f77cd7b0ac1ef25a871" + integrity sha512-ZpAs17hPdKXadbtNjAsymYUILe8V7+pY4fYo8j25nfDTW/HfBpyAwsHPbMcA/n5zyJ7ZJtGKFcCUv1sl24KL1Q== + dependencies: + "@types/seedrandom" "2.4.27" + seedrandom "2.4.3" + + "@tensorflow/tfjs-backend-webgl@3.6.0": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-backend-webgl/-/tfjs-backend-webgl-3.6.0.tgz#1ea1a73abea8d6324fd81aedf7f187ab6eb73692" + integrity sha512-zp7l4TmD1khgeSux/Ujaaj8M/v+e8JVIKjOci6HCGaeMNrn74lTSH9oqGPWKUCmpZME17/V0LfRHK34ddmrPSA== + dependencies: + "@tensorflow/tfjs-backend-cpu" "3.6.0" + "@types/offscreencanvas" "~2019.3.0" + "@types/seedrandom" "2.4.27" + "@types/webgl-ext" "0.0.30" + "@types/webgl2" "0.0.5" + seedrandom "2.4.3" + + "@tensorflow/tfjs-converter@3.6.0": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-converter/-/tfjs-converter-3.6.0.tgz#32b3ff31b47e29630a82e30fbe01708facad7fd6" + integrity sha512-9MtatbTSvo3gpEulYI6+byTA3OeXSMT2lzyGAegXO9nMxsvjR01zBvlZ5SmsNyecNh6fMSzdL2+cCdQfQtsIBg== + + "@tensorflow/tfjs-core@3.6.0": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-core/-/tfjs-core-3.6.0.tgz#6b4d8175790bdff78868eabe6adc6442eb4dc276" + integrity sha512-bb2c3zwK4SgXZRvkTiC7EhCpWbCGp0GMd+1/3Vo2/Z54jiLB/h3sXIgHQrTNiWwhKPtst/xxA+MsslFlvD0A5w== + dependencies: + "@types/offscreencanvas" "~2019.3.0" + "@types/seedrandom" "2.4.27" + "@types/webgl-ext" "0.0.30" + node-fetch "~2.6.1" + seedrandom "2.4.3" + + "@tensorflow/tfjs-data@3.6.0": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-data/-/tfjs-data-3.6.0.tgz#af2f03cffb75ad8e4c2f46e192e392d9b7f977ed" + integrity sha512-5KU7fnU7cj/opb4aCNDoW4qma64ggDwI0PCs5KEO41T3waVHDLk6bjlFlBVRdjfZqvM0K6EfWEyoiXzdvz/Ieg== + dependencies: + "@types/node-fetch" "^2.1.2" + node-fetch "~2.6.1" + + "@tensorflow/tfjs-layers@3.6.0": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-layers/-/tfjs-layers-3.6.0.tgz#5358af559fc8baed304b3e567319fe93f1aa46a6" + integrity sha512-B7EHwAT6KFqhKzdf0e2Sr6haj9qpqpyEATV8OCPHdk+g8z2AGXOLlFfbgW6vCMjy1wb5jzYqCyZDoY3EWdgJAw== + + "@tensorflow/tfjs-node@3.6.1": + version "3.6.1" + resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-node/-/tfjs-node-3.6.1.tgz#a1452076fe6da48f5648ca33f85d1127e6881244" + integrity sha512-JA6GE7AYx+zoXiKQmEdMc848HDOurrI3vFyiLk/8bXJDEv7L7oW5y6Q1Ja+Bz5ul7UmOxNG89hyYhfGqJK8qKw== + dependencies: + "@tensorflow/tfjs" "3.6.0" + adm-zip "^0.4.11" + google-protobuf "^3.9.2" + https-proxy-agent "^2.2.1" + node-pre-gyp "0.14.0" + progress "^2.0.0" + rimraf "^2.6.2" + tar "^4.4.6" + + "@tensorflow/tfjs@3.6.0": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@tensorflow/tfjs/-/tfjs-3.6.0.tgz#e65956cd40c96523e3f5ec7a58a4bef9ef5e349c" + integrity sha512-uLDMDzyRkJa3fYBeR6etQTFD/t+nkQIH/DznL9hxmYoIYG8PigY2gcrc482TAvsdhiuvxCZ9rl5SyDtP93MvxQ== + dependencies: + "@tensorflow/tfjs-backend-cpu" "3.6.0" + "@tensorflow/tfjs-backend-webgl" "3.6.0" + "@tensorflow/tfjs-converter" "3.6.0" + "@tensorflow/tfjs-core" "3.6.0" + "@tensorflow/tfjs-data" "3.6.0" + "@tensorflow/tfjs-layers" "3.6.0" + argparse "^1.0.10" + chalk "^4.1.0" + core-js "3" + regenerator-runtime "^0.13.5" + yargs "^16.0.3" + + "@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + + "@tsconfig/node10@^1.0.7": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.8.tgz#c1e4e80d6f964fbecb3359c43bd48b40f7cadad9" + integrity sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg== + + "@tsconfig/node12@^1.0.7": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.9.tgz#62c1f6dee2ebd9aead80dc3afa56810e58e1a04c" + integrity sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw== + + "@tsconfig/node14@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.1.tgz#95f2d167ffb9b8d2068b0b235302fafd4df711f2" + integrity sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg== + + "@tsconfig/node16@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.1.tgz#a6ca6a9a0ff366af433f42f5f0e124794ff6b8f1" + integrity sha512-FTgBI767POY/lKNDNbIzgAX6miIDBs6NTCbdlDb8TrWovHsSvaVIZDlTqym29C6UqhzwcJx4CYr+AlrMywA0cA== + + "@types/caseless@*": + version "0.12.2" + resolved "https://registry.yarnpkg.com/@types/caseless/-/caseless-0.12.2.tgz#f65d3d6389e01eeb458bd54dc8f52b95a9463bc8" + integrity sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w== + + "@types/chai@^4.2.19": + version "4.2.19" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.19.tgz#80f286b515897413c7a35bdda069cc80f2344233" + integrity sha512-jRJgpRBuY+7izT7/WNXP/LsMO9YonsstuL+xuvycDyESpoDoIAsMd7suwpB4h9oEWB+ZlPTqJJ8EHomzNhwTPQ== + + "@types/mocha@^8.2.2": + version "8.2.2" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-8.2.2.tgz#91daa226eb8c2ff261e6a8cbf8c7304641e095e0" + integrity sha512-Lwh0lzzqT5Pqh6z61P3c3P5nm6fzQK/MMHl9UKeneAeInVflBSz1O2EkX6gM6xfJd7FBXBY5purtLx7fUiZ7Hw== + + "@types/node-fetch@^2.1.2": + version "2.5.8" + resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.8.tgz#e199c835d234c7eb0846f6618012e558544ee2fb" + integrity sha512-fbjI6ja0N5ZA8TV53RUqzsKNkl9fv8Oj3T7zxW7FGv1GSH7gwJaNF8dzCjrqKaxKeUpTz4yT1DaJFq/omNpGfw== + dependencies: + "@types/node" "*" + form-data "^3.0.0" + + "@types/node@*": + version "14.14.22" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.22.tgz#0d29f382472c4ccf3bd96ff0ce47daf5b7b84b18" + integrity sha512-g+f/qj/cNcqKkc3tFqlXOYjrmZA+jNBiDzbP3kH+B+otKFqAdPgVTGP1IeKRdMml/aE69as5S4FqtxAbl+LaMw== + + "@types/node@^16.9.6": + version "16.9.6" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.9.6.tgz#040a64d7faf9e5d9e940357125f0963012e66f04" + integrity sha512-YHUZhBOMTM3mjFkXVcK+WwAcYmyhe1wL4lfqNtzI0b3qAy7yuSetnM7QJazgE5PFmgVTNGiLOgRFfJMqW7XpSQ== + + "@types/offscreencanvas@~2019.3.0": + version "2019.3.0" + resolved "https://registry.yarnpkg.com/@types/offscreencanvas/-/offscreencanvas-2019.3.0.tgz#3336428ec7e9180cf4566dfea5da04eb586a6553" + integrity sha512-esIJx9bQg+QYF0ra8GnvfianIY8qWB0GBx54PK5Eps6m+xTj86KLavHv6qDhzKcu5UUOgNfJ2pWaIIV7TRUd9Q== + + "@types/papaparse@^5.2.6": + version "5.2.6" + resolved "https://registry.yarnpkg.com/@types/papaparse/-/papaparse-5.2.6.tgz#0bba18de4d15eff65883bc7c0794e0134de9e7c7" + integrity sha512-xGKSd0UTn58N1h0+zf8mW863Rv8BvXcGibEgKFtBIXZlcDXAmX/T4RdDO2mwmrmOypUDt5vRgo2v32a78JdqUA== + dependencies: + "@types/node" "*" + + "@types/request@^2.48.7": + version "2.48.7" + resolved "https://registry.yarnpkg.com/@types/request/-/request-2.48.7.tgz#a962d11a26e0d71d9a9913d96bb806dc4d4c2f19" + integrity sha512-GWP9AZW7foLd4YQxyFZDBepl0lPsWLMEXDZUjQ/c1gqVPDPECrRZyEzuhJdnPWioFCq3Tv0qoGpMD6U+ygd4ZA== + dependencies: + "@types/caseless" "*" + "@types/node" "*" + "@types/tough-cookie" "*" + form-data "^2.5.0" + + "@types/seedrandom@2.4.27": + version "2.4.27" + resolved "https://registry.yarnpkg.com/@types/seedrandom/-/seedrandom-2.4.27.tgz#9db563937dd86915f69092bc43259d2f48578e41" + integrity sha1-nbVjk33YaRX2kJK8QyWdL0hXjkE= + + "@types/stream-chain@*": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/stream-chain/-/stream-chain-2.0.1.tgz#4d3cc47a32609878bc188de0bae420bcfd3bf1f5" + integrity sha512-D+Id9XpcBpampptkegH7WMsEk6fUdf9LlCIX7UhLydILsqDin4L0QT7ryJR0oycwC7OqohIzdfcMHVZ34ezNGg== + dependencies: + "@types/node" "*" + + "@types/stream-json@^1.7.1": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@types/stream-json/-/stream-json-1.7.1.tgz#58b82a41161f2936c9bfc6c725a30e956bbd443b" + integrity sha512-BNIK/ix6iJvWvoXbDVVJhw5LNG1wie/rXcUo7jw4hBqY3FhIrg0e+RMXFN5UreKclBIStl9FDEHNSDLuuQ9/MQ== + dependencies: + "@types/node" "*" + "@types/stream-chain" "*" + + "@types/table@^6.3.2": + version "6.3.2" + resolved "https://registry.yarnpkg.com/@types/table/-/table-6.3.2.tgz#e18ad2594400d81c3da28c31b342eb5a0d87a8e7" + integrity sha512-GJ82z3vQbx2BhiUo12w2A3lyBpXPJrGHjQ7iS5aH925098w8ojqiWBhgOUy97JS2PKLmRCTLT0sI+gJI4futig== + dependencies: + table "*" + + "@types/tough-cookie@*": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.1.tgz#8f80dd965ad81f3e1bc26d6f5c727e132721ff40" + integrity sha512-Y0K95ThC3esLEYD6ZuqNek29lNX2EM1qxV8y2FTLUB0ff5wWrk7az+mLrnNFUnaXcgKye22+sFBRXOgpPILZNg== + + "@types/webgl-ext@0.0.30": + version "0.0.30" + resolved "https://registry.yarnpkg.com/@types/webgl-ext/-/webgl-ext-0.0.30.tgz#0ce498c16a41a23d15289e0b844d945b25f0fb9d" + integrity sha512-LKVgNmBxN0BbljJrVUwkxwRYqzsAEPcZOe6S2T6ZaBDIrFp0qu4FNlpc5sM1tGbXUYFgdVQIoeLk1Y1UoblyEg== + + "@types/webgl2@0.0.5": + version "0.0.5" + resolved "https://registry.yarnpkg.com/@types/webgl2/-/webgl2-0.0.5.tgz#dd925e20ab8ace80eb4b1e46fda5b109c508fb0d" + integrity sha512-oGaKsBbxQOY5+aJFV3KECDhGaXt+yZJt2y/OZsnQGLRkH6Fvr7rv4pCt3SRH1somIHfej/c4u7NSpCyd9x+1Ow== + + abab@^2.0.3, abab@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" + integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== + + abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + + acorn-globals@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" + integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== + dependencies: + acorn "^7.1.1" + acorn-walk "^7.1.1" + + acorn-jsx@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" + integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== + + acorn-walk@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" + integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== + + acorn@^7.1.1, acorn@^7.4.0: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + + acorn@^8.2.4: + version "8.5.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.5.0.tgz#4512ccb99b3698c752591e9bb4472e38ad43cee2" + integrity sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q== + + adler-32@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/adler-32/-/adler-32-1.2.0.tgz#6a3e6bf0a63900ba15652808cb15c6813d1a5f25" + integrity sha1-aj5r8KY5ALoVZSgIyxXGgT0aXyU= + dependencies: + exit-on-epipe "~1.0.1" + printj "~1.1.0" + + adler-32@~1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/adler-32/-/adler-32-1.3.0.tgz#3cad1b71cdfa69f6c8a91f3e3615d31a4fdedc72" + integrity sha512-f5nltvjl+PRUh6YNfUstRaXwJxtfnKEWhAWWlmKvh+Y3J2+98a0KKVYDEhz6NdKGqswLhjNGznxfSsZGOvOd9g== + dependencies: + printj "~1.2.2" + + adm-zip@^0.4.11: + version "0.4.16" + resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365" + integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg== + + agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + + agent-base@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" + integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== + dependencies: + es6-promisify "^5.0.0" + + aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + + ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + + ajv@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-7.0.3.tgz#13ae747eff125cafb230ac504b2406cf371eece2" + integrity sha512-R50QRlXSxqXcQP5SvKUrw8VZeypvo12i2IX0EeR5PiZ7bEKeHWgzgo264LDadUsCU42lTJVhFikTqJwNeH34gQ== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + + ajv@^8.0.1: + version "8.6.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.6.1.tgz#ae65764bf1edde8cd861281cda5057852364a295" + integrity sha512-42VLtQUOLefAvKFAQIxIZDaThq6om/PrfP0CYk3/vn+y4BMNkKnbli8ON2QCiHov4KkzOSJ/xSoBJdayiiYvVQ== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + + ansi-align@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" + integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== + dependencies: + string-width "^3.0.0" + + ansi-colors@3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" + integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== + + ansi-colors@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + + ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + + ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + + ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + + ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + + ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + + ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + + anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + + anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + + anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + + append-transform@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-2.0.0.tgz#99d9d29c7b38391e6f428d28ce136551f0b77e12" + integrity sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg== + dependencies: + default-require-extensions "^3.0.0" + + aproba@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + + archy@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" + integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= + + are-we-there-yet@~1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + + arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + + argparse@^1.0.10, argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + + arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + + arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + + arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + + array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + + asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + dependencies: + safer-buffer "~2.1.0" + + assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + + assertion-error@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== + + assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + + astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + + async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + + asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + + atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + + aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + + aws4@^1.8.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" + integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== + + babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== + dependencies: + object.assign "^4.1.0" + + balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + + base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + + bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + + binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== + + binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + + boxen@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64" + integrity sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ== + dependencies: + ansi-align "^3.0.0" + camelcase "^5.3.1" + chalk "^3.0.0" + cli-boxes "^2.2.0" + string-width "^4.1.0" + term-size "^2.1.0" + type-fest "^0.8.1" + widest-line "^3.1.0" + + brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + + braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + + braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + + browser-process-hrtime@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" + integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== + + browser-stdout@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== + + browserslist@^4.14.5, browserslist@^4.16.1: + version "4.16.6" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2" + integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ== + dependencies: + caniuse-lite "^1.0.30001219" + colorette "^1.2.2" + electron-to-chromium "^1.3.723" + escalade "^3.1.1" + node-releases "^1.1.71" + + buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + + cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + + cacheable-request@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" + integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^3.0.0" + lowercase-keys "^2.0.0" + normalize-url "^4.1.0" + responselike "^1.0.2" + + caching-transform@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/caching-transform/-/caching-transform-4.0.0.tgz#00d297a4206d71e2163c39eaffa8157ac0651f0f" + integrity sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA== + dependencies: + hasha "^5.0.0" + make-dir "^3.0.0" + package-hash "^4.0.0" + write-file-atomic "^3.0.0" + + call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + + callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + + camelcase@^5.0.0, camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + + caniuse-lite@^1.0.30001219: + version "1.0.30001230" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001230.tgz#8135c57459854b2240b57a4a6786044bdc5a9f71" + integrity sha512-5yBd5nWCBS+jWKTcHOzXwo5xzcj4ePE/yjtkZyUV1BTUmrBaA9MRGC+e7mxnqXSA90CmCA8L3eKLaSUkt099IQ== + + caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + + cfb@^1.1.4, cfb@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/cfb/-/cfb-1.2.1.tgz#209429e4c68efd30641f6fc74b2d6028bd202402" + integrity sha512-wT2ScPAFGSVy7CY+aauMezZBnNrfnaLSrxHUHdea+Td/86vrk6ZquggV+ssBR88zNs0OnBkL2+lf9q0K+zVGzQ== + dependencies: + adler-32 "~1.3.0" + crc-32 "~1.2.0" + printj "~1.3.0" + + chai@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.2.0.tgz#760aa72cf20e3795e84b12877ce0e83737aa29e5" + integrity sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.2" + deep-eql "^3.0.1" + get-func-name "^2.0.0" + pathval "^1.1.0" + type-detect "^4.0.5" + + chalk@^2.0.0, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + + chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + + chalk@^4.0.0, chalk@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + + check-error@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" + integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= + + chokidar@3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.0.tgz#12c0714668c55800f659e262d4962a97faf554a6" + integrity sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.2.0" + optionalDependencies: + fsevents "~2.1.1" + + chokidar@^3.2.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" + integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + + chokidar@^3.4.0: + version "3.5.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" + integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.5.0" + optionalDependencies: + fsevents "~2.3.1" + + chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + + ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + + class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + + clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + + cli-boxes@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" + integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== + + cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + + cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + + cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + + clone-response@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" + integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= + dependencies: + mimic-response "^1.0.0" + + code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + + codepage@~1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/codepage/-/codepage-1.15.0.tgz#2e00519024b39424ec66eeb3ec07227e692618ab" + integrity sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA== + + collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + + color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + + color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + + color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + + color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + + colorette@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" + integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== + + combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + + commander@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + + commander@~2.17.1: + version "2.17.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" + integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== + + commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + + complex.js@^2.0.15: + version "2.0.15" + resolved "https://registry.yarnpkg.com/complex.js/-/complex.js-2.0.15.tgz#7add6848b4c1d12aa9262f7df925ebe7a51a7406" + integrity sha512-gDBvQU8IG139ZBQTSo2qvDFP+lANMGluM779csXOr6ny1NUtA3wkUnCFjlDNH/moAVfXtvClYt6G0zarFbtz5w== + + component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + + concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + + configstore@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" + integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== + dependencies: + dot-prop "^5.2.0" + graceful-fs "^4.1.2" + make-dir "^3.0.0" + unique-string "^2.0.0" + write-file-atomic "^3.0.0" + xdg-basedir "^4.0.0" + + console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + + convert-source-map@^1.1.0, convert-source-map@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + dependencies: + safe-buffer "~5.1.1" + + copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + + core-js-compat@^3.8.0: + version "3.8.3" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.8.3.tgz#9123fb6b9cad30f0651332dc77deba48ef9b0b3f" + integrity sha512-1sCb0wBXnBIL16pfFG1Gkvei6UzvKyTNYpiC41yrdjEv0UoJoq9E/abTMzyYJ6JpTkAj15dLjbqifIzEBDVvog== + dependencies: + browserslist "^4.16.1" + semver "7.0.0" + + core-js@3: + version "3.8.3" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.8.3.tgz#c21906e1f14f3689f93abcc6e26883550dd92dd0" + integrity sha512-KPYXeVZYemC2TkNEkX/01I+7yd+nX3KddKwZ1Ww7SKWdI2wQprSgLmrTddT8nw92AjEklTsPBoSdQBhbI1bQ6Q== + + core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + + coveralls@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-3.1.0.tgz#13c754d5e7a2dd8b44fe5269e21ca394fb4d615b" + integrity sha512-sHxOu2ELzW8/NC1UP5XVLbZDzO4S3VxfFye3XYCznopHy02YjNkHcj5bKaVw2O7hVaBdBjEdQGpie4II1mWhuQ== + dependencies: + js-yaml "^3.13.1" + lcov-parse "^1.0.0" + log-driver "^1.2.7" + minimist "^1.2.5" + request "^2.88.2" + + crc-32@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.0.tgz#cb2db6e29b88508e32d9dd0ec1693e7b41a18208" + integrity sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA== + dependencies: + exit-on-epipe "~1.0.1" + printj "~1.1.0" + + create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + + cross-spawn@^7.0.0, cross-spawn@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + + crypto-random-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" + integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== + + cssom@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" + integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== + + cssom@~0.3.6: + version "0.3.8" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== + + cssstyle@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" + integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== + dependencies: + cssom "~0.3.6" + + dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + + data-urls@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" + integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== + dependencies: + abab "^2.0.3" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.0.0" + + debug@3.2.6: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + + debug@4: + version "4.3.2" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" + integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== + dependencies: + ms "2.1.2" + + debug@^2.2.0, debug@^2.3.3: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + + debug@^3.1.0, debug@^3.2.6: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + + debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + dependencies: + ms "2.1.2" + + decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + + decimal.js@^10.2.1, decimal.js@^10.3.1: + version "10.3.1" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783" + integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== + + decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + + decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= + dependencies: + mimic-response "^1.0.0" + + deep-eql@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" + integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== + dependencies: + type-detect "^4.0.0" + + deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + + deep-is@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + + deep-is@~0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + + default-require-extensions@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-3.0.0.tgz#e03f93aac9b2b6443fc52e5e4a37b3ad9ad8df96" + integrity sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg== + dependencies: + strip-bom "^4.0.0" + + defer-to-connect@^1.0.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" + integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== + + define-properties@^1.1.2, define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + + define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + + define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + + define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + + delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + + delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + + detect-libc@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= + + diff@3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" + integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== + + diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + + doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + + domexception@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" + integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== + dependencies: + webidl-conversions "^5.0.0" + + dot-prop@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + + dotenv@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" + integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== + + dts-bundle-generator@^5.9.0: + version "5.9.0" + resolved "https://registry.yarnpkg.com/dts-bundle-generator/-/dts-bundle-generator-5.9.0.tgz#454e8e62e9425bd5ff03afad66c1ea9cc02f7f99" + integrity sha512-wzxUa9nfGL09Sg+gD3jqA8kYIA9A/olenvP2MmZ6IGTlUxR8G1z4U+0+OfUEL6OH1mzn6xsD8EOVgpNnGDi8tQ== + dependencies: + typescript ">=3.0.1" + yargs "^15.3.1" + + duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= + + ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + + electron-to-chromium@^1.3.723: + version "1.3.739" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.739.tgz#f07756aa92cabd5a6eec6f491525a64fe62f98b9" + integrity sha512-+LPJVRsN7hGZ9EIUUiWCpO7l4E3qBYHNadazlucBfsXBbccDFNKUBAgzE68FnkWGJPwD/AfKhSzL+G+Iqb8A4A== + + emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + + emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + + end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + + enquirer@^2.3.5: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + + es-abstract@^1.18.0-next.1: + version "1.18.0-next.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.2.tgz#088101a55f0541f595e7e057199e27ddc8f3a5c2" + integrity sha512-Ih4ZMFHEtZupnUh6497zEL4y2+w8+1ljnCyaTa+adcoafI1GOvMwFlDjBLfWR7y9VLfrjRJe9ocuHY1PSR9jjw== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.2.2" + is-negative-zero "^2.0.1" + is-regex "^1.1.1" + object-inspect "^1.9.0" + object-keys "^1.1.1" + object.assign "^4.1.2" + string.prototype.trimend "^1.0.3" + string.prototype.trimstart "^1.0.3" + + es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + + es6-error@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" + integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== + + es6-promise@^4.0.3: + version "4.2.8" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + + es6-promisify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= + dependencies: + es6-promise "^4.0.3" + + escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + + escape-goat@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" + integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== + + escape-latex@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/escape-latex/-/escape-latex-1.2.0.tgz#07c03818cf7dac250cce517f4fda1b001ef2bca1" + integrity sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw== + + escape-string-regexp@1.0.5, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + + escodegen@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" + integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== + dependencies: + esprima "^4.0.1" + estraverse "^5.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + + eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + + eslint-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + + eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + + eslint-visitor-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" + integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== + + eslint@^7.1.0: + version "7.18.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.18.0.tgz#7fdcd2f3715a41fe6295a16234bd69aed2c75e67" + integrity sha512-fbgTiE8BfUJZuBeq2Yi7J3RB3WGUQ9PNuNbmgi6jt9Iv8qrkxfy19Ds3OpL1Pm7zg3BtTVhvcUZbIRQ0wmSjAQ== + dependencies: + "@babel/code-frame" "^7.0.0" + "@eslint/eslintrc" "^0.3.0" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.0.1" + doctrine "^3.0.0" + enquirer "^2.3.5" + eslint-scope "^5.1.1" + eslint-utils "^2.1.0" + eslint-visitor-keys "^2.0.0" + espree "^7.3.1" + esquery "^1.2.0" + esutils "^2.0.2" + file-entry-cache "^6.0.0" + functional-red-black-tree "^1.0.1" + glob-parent "^5.0.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash "^4.17.20" + minimatch "^3.0.4" + natural-compare "^1.4.0" + optionator "^0.9.1" + progress "^2.0.0" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + table "^6.0.4" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + + espree@^7.3.0, espree@^7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" + integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== + dependencies: + acorn "^7.4.0" + acorn-jsx "^5.3.1" + eslint-visitor-keys "^1.3.0" + + esprima@^4.0.0, esprima@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + + esquery@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" + integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== + dependencies: + estraverse "^5.1.0" + + esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + + estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + + estraverse@^5.1.0, estraverse@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + + esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + + exit-on-epipe@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz#0bdd92e87d5285d267daa8171d0eb06159689692" + integrity sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw== + + expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + + extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + + extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + + extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + + extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + + extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + + extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + + fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + + fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + + fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + + fflate@^0.3.8: + version "0.3.11" + resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.3.11.tgz#2c440d7180fdeb819e64898d8858af327b042a5d" + integrity sha512-Rr5QlUeGN1mbOHlaqcSYMKVpPbgLy0AWT/W0EHxA6NGI12yO1jpoui2zBBvU2G824ltM6Ut8BFgfHSBGfkmS0A== + + file-entry-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.0.tgz#7921a89c391c6d93efec2169ac6bf300c527ea0a" + integrity sha512-fqoO76jZ3ZnYrXLDRxBR1YvOvc0k844kcOg40bgsPrE25LAb/PDqTY+ho64Xh2c8ZXgIKldchCFHczG2UVRcWA== + dependencies: + flat-cache "^3.0.4" + + fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + + fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + + find-cache-dir@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== + dependencies: + commondir "^1.0.1" + make-dir "^2.0.0" + pkg-dir "^3.0.0" + + find-cache-dir@^3.2.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" + integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + + find-up@3.0.0, find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + + find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + + flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + + flat@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.1.tgz#a392059cc382881ff98642f5da4dde0a959f309b" + integrity sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA== + dependencies: + is-buffer "~2.0.3" + + flatted@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469" + integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== + + for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + + foreground-child@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-2.0.0.tgz#71b32800c9f15aa8f2f83f4a6bd9bff35d861a53" + integrity sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^3.0.2" + + forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + + form-data@^2.5.0: + version "2.5.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" + integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + + form-data@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.0.tgz#31b7e39c85f1355b7139ee0c647cf0de7f83c682" + integrity sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + + form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + + frac@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/frac/-/frac-1.1.2.tgz#3d74f7f6478c88a1b5020306d747dc6313c74d0b" + integrity sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA== + + fraction.js@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.1.1.tgz#ac4e520473dae67012d618aab91eda09bcb400ff" + integrity sha512-MHOhvvxHTfRFpF1geTK9czMIZ6xclsEor2wkIGYYq+PxcQqT7vStJqjhe6S1TenZrMZzo+wlqOufBDVepUEgPg== + + fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + + fromentries@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/fromentries/-/fromentries-1.3.2.tgz#e4bca6808816bf8f93b52750f1127f5a6fd86e3a" + integrity sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg== + + fs-minipass@^1.2.5: + version "1.2.7" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== + dependencies: + minipass "^2.6.0" + + fs-readdir-recursive@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" + integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== + + fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + + fsevents@~2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== + + fsevents@~2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.1.tgz#b209ab14c61012636c8863507edf7fb68cc54e9f" + integrity sha512-YR47Eg4hChJGAB1O3yEAOkGO+rlzutoICGqGo9EZ4lKWokzZRSyIW1QmTzqjtw8MJdj9srP869CuWw/hyzSiBw== + + fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + + function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + + functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + + gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + + gensync@^1.0.0-beta.1: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + + get-caller-file@^2.0.1, get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + + get-func-name@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" + integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= + + get-intrinsic@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.0.2.tgz#6820da226e50b24894e08859469dc68361545d49" + integrity sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + + get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + + get-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + + get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + + get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + + getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + + glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + + glob-parent@^5.0.0, glob-parent@~5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + dependencies: + is-glob "^4.0.1" + + glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + + glob@7.1.3: + version "7.1.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" + integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + + glob@^7.0.0, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + + global-dirs@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.1.0.tgz#e9046a49c806ff04d6c1825e196c8f0091e8df4d" + integrity sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ== + dependencies: + ini "1.3.7" + + globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + + globals@^12.1.0: + version "12.4.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" + integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== + dependencies: + type-fest "^0.8.1" + + google-protobuf@^3.9.2: + version "3.14.0" + resolved "https://registry.yarnpkg.com/google-protobuf/-/google-protobuf-3.14.0.tgz#20373d22046e63831a5110e11a84f713cc43651e" + integrity sha512-bwa8dBuMpOxg7COyqkW6muQuvNnWgVN8TX/epDRGW5m0jcrmq2QJyCyiV8ZE2/6LaIIqJtiv9bYokFhfpy/o6w== + + got@^9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" + integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== + dependencies: + "@sindresorhus/is" "^0.14.0" + "@szmarczak/http-timer" "^1.1.2" + cacheable-request "^6.0.0" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^4.1.0" + lowercase-keys "^1.0.1" + mimic-response "^1.0.1" + p-cancelable "^1.0.0" + to-readable-stream "^1.0.0" + url-parse-lax "^3.0.0" + + graceful-fs@^4.1.11, graceful-fs@^4.1.15: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + + graceful-fs@^4.1.2: + version "4.2.6" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" + integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== + + growl@1.10.5: + version "1.10.5" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" + integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== + + har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + + har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + + has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + + has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + + has-symbols@^1.0.0, has-symbols@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== + + has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + + has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + + has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + + has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + + has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + + has-yarn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" + integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== + + has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + + hasha@^5.0.0: + version "5.2.2" + resolved "https://registry.yarnpkg.com/hasha/-/hasha-5.2.2.tgz#a48477989b3b327aea3c04f53096d816d97522a1" + integrity sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ== + dependencies: + is-stream "^2.0.0" + type-fest "^0.8.0" + + he@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + + html-encoding-sniffer@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" + integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== + dependencies: + whatwg-encoding "^1.0.5" + + html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + + http-cache-semantics@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + + http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + dependencies: + "@tootallnate/once" "1" + agent-base "6" + debug "4" + + http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + + https-proxy-agent@^2.2.1: + version "2.2.4" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" + integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg== + dependencies: + agent-base "^4.3.0" + debug "^3.1.0" + + https-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" + integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== + dependencies: + agent-base "6" + debug "4" + + iconv-lite@0.4.24, iconv-lite@^0.4.4: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + + ignore-by-default@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" + integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk= + + ignore-walk@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" + integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== + dependencies: + minimatch "^3.0.4" + + ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + + import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + + import-lazy@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= + + imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + + indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + + inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + + inherits@2, inherits@^2.0.3, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + + ini@1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84" + integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ== + + ini@~1.3.0: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + + is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + + is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + + is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + dependencies: + binary-extensions "^1.0.0" + + is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + + is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + + is-buffer@~2.0.3: + version "2.0.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" + integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== + + is-callable@^1.1.4, is-callable@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9" + integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA== + + is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + + is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + + is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + + is-date-object@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + + is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + + is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + + is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + + is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + + is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + + is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + + is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + + is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + + is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + dependencies: + is-extglob "^2.1.0" + + is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + + is-installed-globally@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.3.2.tgz#fd3efa79ee670d1187233182d5b0a1dd00313141" + integrity sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g== + dependencies: + global-dirs "^2.0.1" + is-path-inside "^3.0.1" + + is-negative-zero@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" + integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== + + is-npm@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d" + integrity sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig== + + is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + + is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + + is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + + is-path-inside@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + + is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + + is-potential-custom-element-name@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== + + is-regex@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" + integrity sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg== + dependencies: + has-symbols "^1.0.1" + + is-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + + is-symbol@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== + dependencies: + has-symbols "^1.0.1" + + is-typedarray@^1.0.0, is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + + is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + + is-yarn-global@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" + integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== + + isarray@1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + + isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + + isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + + isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + + isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + + istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.0.0-alpha.1: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" + integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== + + istanbul-lib-hook@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz#8f84c9434888cc6b1d0a9d7092a76d239ebf0cc6" + integrity sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ== + dependencies: + append-transform "^2.0.0" + + istanbul-lib-instrument@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" + integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== + dependencies: + "@babel/core" "^7.7.5" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.0.0" + semver "^6.3.0" + + istanbul-lib-processinfo@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz#e1426514662244b2f25df728e8fd1ba35fe53b9c" + integrity sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw== + dependencies: + archy "^1.0.0" + cross-spawn "^7.0.0" + istanbul-lib-coverage "^3.0.0-alpha.1" + make-dir "^3.0.0" + p-map "^3.0.0" + rimraf "^3.0.0" + uuid "^3.3.3" + + istanbul-lib-report@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" + + istanbul-lib-source-maps@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9" + integrity sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + + istanbul-reports@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b" + integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + + javascript-natural-sort@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz#f9e2303d4507f6d74355a73664d1440fb5a0ef59" + integrity sha1-+eIwPUUH9tdDVac2ZNFED7Wg71k= + + js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + + js-yaml@3.13.1: + version "3.13.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" + integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + + js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + + jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + + jsdom@^16.2.2: + version "16.7.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" + integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== + dependencies: + abab "^2.0.5" + acorn "^8.2.4" + acorn-globals "^6.0.0" + cssom "^0.4.4" + cssstyle "^2.3.0" + data-urls "^2.0.0" + decimal.js "^10.2.1" + domexception "^2.0.1" + escodegen "^2.0.0" + form-data "^3.0.0" + html-encoding-sniffer "^2.0.1" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-potential-custom-element-name "^1.0.1" + nwsapi "^2.2.0" + parse5 "6.0.1" + saxes "^5.0.1" + symbol-tree "^3.2.4" + tough-cookie "^4.0.0" + w3c-hr-time "^1.0.2" + w3c-xmlserializer "^2.0.0" + webidl-conversions "^6.1.0" + whatwg-encoding "^1.0.5" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.5.0" + ws "^7.4.6" + xml-name-validator "^3.0.0" + + jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + + jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + + json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= + + json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + + json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + + json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + + json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + + json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + + json5@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" + integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== + dependencies: + minimist "^1.2.5" + + jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + + keyv@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" + integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== + dependencies: + json-buffer "3.0.0" + + kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + + kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + + kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + + kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + + latest-version@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" + integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== + dependencies: + package-json "^6.3.0" + + lcov-parse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-1.0.0.tgz#eb0d46b54111ebc561acb4c408ef9363bdc8f7e0" + integrity sha1-6w1GtUER68VhrLTECO+TY73I9+A= + + levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + + levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + + locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + + locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + + lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= + + lodash.flattendeep@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" + integrity sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI= + + lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= + + lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20: + version "4.17.20" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" + integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== + + lodash@^4.7.0: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + + log-driver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8" + integrity sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg== + + log-symbols@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" + integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== + dependencies: + chalk "^2.4.2" + + lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + + lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + + lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + + make-dir@^2.0.0, make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + + make-dir@^3.0.0, make-dir@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + + make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + + map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + + map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + + mathjs@^9.4.4: + version "9.4.4" + resolved "https://registry.yarnpkg.com/mathjs/-/mathjs-9.4.4.tgz#29acd67563c1e720910213062824c3faf61bc858" + integrity sha512-5EEJXnWOzLDgMHSFyw623nH+MTBZxquWwXtrzTsingOouJJ6UZG2VNO1lwH31IMt9aMno1axO6TYleIP4YSDaQ== + dependencies: + "@babel/runtime" "^7.14.6" + complex.js "^2.0.15" + decimal.js "^10.3.1" + escape-latex "^1.2.0" + fraction.js "^4.1.1" + javascript-natural-sort "^0.7.1" + seedrandom "^3.0.5" + tiny-emitter "^2.1.0" + typed-function "^2.0.0" + + micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + + mime-db@1.45.0: + version "1.45.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea" + integrity sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w== + + mime-types@^2.1.12, mime-types@~2.1.19: + version "2.1.28" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.28.tgz#1160c4757eab2c5363888e005273ecf79d2a0ecd" + integrity sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ== + dependencies: + mime-db "1.45.0" + + mimic-response@^1.0.0, mimic-response@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + + minimatch@3.0.4, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + + minimist@^1.2.0, minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + + minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + + minizlib@^1.2.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== + dependencies: + minipass "^2.9.0" + + mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + + mkdirp@0.5.5, mkdirp@^0.5.0, mkdirp@^0.5.1: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + + mocha@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-7.2.0.tgz#01cc227b00d875ab1eed03a75106689cfed5a604" + integrity sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ== + dependencies: + ansi-colors "3.2.3" + browser-stdout "1.3.1" + chokidar "3.3.0" + debug "3.2.6" + diff "3.5.0" + escape-string-regexp "1.0.5" + find-up "3.0.0" + glob "7.1.3" + growl "1.10.5" + he "1.2.0" + js-yaml "3.13.1" + log-symbols "3.0.0" + minimatch "3.0.4" + mkdirp "0.5.5" + ms "2.1.1" + node-environment-flags "1.0.6" + object.assign "4.1.0" + strip-json-comments "2.0.1" + supports-color "6.0.0" + which "1.3.1" + wide-align "1.1.3" + yargs "13.3.2" + yargs-parser "13.1.2" + yargs-unparser "1.6.0" + + ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + + ms@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + + ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + + ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + + nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + + natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + + needle@^2.2.1: + version "2.6.0" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.6.0.tgz#24dbb55f2509e2324b4a99d61f413982013ccdbe" + integrity sha512-KKYdza4heMsEfSWD7VPUIz3zX2XDwOyX2d+geb4vrERZMT5RMU6ujjaD+I5Yr54uZxQ2w6XRTAhHBbSCyovZBg== + dependencies: + debug "^3.2.6" + iconv-lite "^0.4.4" + sax "^1.2.4" + + node-environment-flags@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.6.tgz#a30ac13621f6f7d674260a54dede048c3982c088" + integrity sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw== + dependencies: + object.getownpropertydescriptors "^2.0.3" + semver "^5.7.0" + + node-fetch@^2.6.1, node-fetch@~2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" + integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== + + node-modules-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" + integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= + + node-pre-gyp@0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz#9a0596533b877289bcad4e143982ca3d904ddc83" + integrity sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA== + dependencies: + detect-libc "^1.0.2" + mkdirp "^0.5.1" + needle "^2.2.1" + nopt "^4.0.1" + npm-packlist "^1.1.6" + npmlog "^4.0.2" + rc "^1.2.7" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^4.4.2" + + node-preload@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/node-preload/-/node-preload-0.2.1.tgz#c03043bb327f417a18fee7ab7ee57b408a144301" + integrity sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ== + dependencies: + process-on-spawn "^1.0.0" + + node-releases@^1.1.71: + version "1.1.72" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.72.tgz#14802ab6b1039a79a0c7d662b610a5bbd76eacbe" + integrity sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw== + + nodemon@^2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.7.tgz#6f030a0a0ebe3ea1ba2a38f71bf9bab4841ced32" + integrity sha512-XHzK69Awgnec9UzHr1kc8EomQh4sjTQ8oRf8TsGrSmHDx9/UmiGG9E/mM3BuTfNeFwdNBvrqQq/RHL0xIeyFOA== + dependencies: + chokidar "^3.2.2" + debug "^3.2.6" + ignore-by-default "^1.0.1" + minimatch "^3.0.4" + pstree.remy "^1.1.7" + semver "^5.7.1" + supports-color "^5.5.0" + touch "^3.1.0" + undefsafe "^2.0.3" + update-notifier "^4.1.0" + + nopt@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" + integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg== + dependencies: + abbrev "1" + osenv "^0.1.4" + + nopt@~1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" + integrity sha1-bd0hvSoxQXuScn3Vhfim83YI6+4= + dependencies: + abbrev "1" + + normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + + normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + + normalize-url@^4.1.0: + version "4.5.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" + integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== + + npm-bundled@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" + integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== + dependencies: + npm-normalize-package-bin "^1.0.1" + + npm-normalize-package-bin@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== + + npm-packlist@^1.1.6: + version "1.4.8" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" + integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + npm-normalize-package-bin "^1.0.1" + + npmlog@^4.0.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + + number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + + nwsapi@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" + integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== + + nyc@^15.1.0: + version "15.1.0" + resolved "https://registry.yarnpkg.com/nyc/-/nyc-15.1.0.tgz#1335dae12ddc87b6e249d5a1994ca4bdaea75f02" + integrity sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A== + dependencies: + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + caching-transform "^4.0.0" + convert-source-map "^1.7.0" + decamelize "^1.2.0" + find-cache-dir "^3.2.0" + find-up "^4.1.0" + foreground-child "^2.0.0" + get-package-type "^0.1.0" + glob "^7.1.6" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-hook "^3.0.0" + istanbul-lib-instrument "^4.0.0" + istanbul-lib-processinfo "^2.0.2" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.0.2" + make-dir "^3.0.0" + node-preload "^0.2.1" + p-map "^3.0.0" + process-on-spawn "^1.0.0" + resolve-from "^5.0.0" + rimraf "^3.0.0" + signal-exit "^3.0.2" + spawn-wrap "^2.0.0" + test-exclude "^6.0.0" + yargs "^15.0.2" + + oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + + object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + + object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + + object-inspect@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" + integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== + + object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + + object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + + object.assign@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + + object.assign@^4.1.0, object.assign@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" + + object.getownpropertydescriptors@^2.0.3: + version "2.1.1" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.1.tgz#0dfda8d108074d9c563e80490c883b6661091544" + integrity sha512-6DtXgZ/lIZ9hqx4GtZETobXLR/ZLaa0aqV0kzbn80Rf8Z2e/XFnhA0I7p07N2wH8bBBltr2xQPi6sbKWAY2Eng== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + + object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + + once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + + optionator@^0.8.1: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + + optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + + os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + + os-tmpdir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + + osenv@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + + p-cancelable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" + integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== + + p-limit@^2.0.0, p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + + p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + + p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + + p-map@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" + integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== + dependencies: + aggregate-error "^3.0.0" + + p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + + package-hash@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/package-hash/-/package-hash-4.0.0.tgz#3537f654665ec3cc38827387fc904c163c54f506" + integrity sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ== + dependencies: + graceful-fs "^4.1.15" + hasha "^5.0.0" + lodash.flattendeep "^4.4.0" + release-zalgo "^1.0.0" + + package-json@^6.3.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" + integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== + dependencies: + got "^9.6.0" + registry-auth-token "^4.0.0" + registry-url "^5.0.0" + semver "^6.2.0" + + papaparse@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/papaparse/-/papaparse-5.3.1.tgz#770b7a9124d821d4b2132132b7bd7dce7194b5b1" + integrity sha512-Dbt2yjLJrCwH2sRqKFFJaN5XgIASO9YOFeFP8rIBRG2Ain8mqk5r1M6DkfvqEVozVcz3r3HaUGw253hA1nLIcA== + + parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + + parse5@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + + pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + + path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + + path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + + path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + + path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + + path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + + pathval@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0" + integrity sha1-uULm1L3mUwBe9rcTYd74cn0GReA= + + performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + + picomatch@^2.0.4, picomatch@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + + pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + + pirates@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" + integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== + dependencies: + node-modules-regexp "^1.0.0" + + pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + + pkg-dir@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + + posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + + prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + + prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + + prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= + + printj@~1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/printj/-/printj-1.1.2.tgz#d90deb2975a8b9f600fb3a1c94e3f4c53c78a222" + integrity sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ== + + printj@~1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/printj/-/printj-1.2.3.tgz#2cfb2b192a1e5385dbbe5b46658ac34aa828508a" + integrity sha512-sanczS6xOJOg7IKDvi4sGOUOe7c1tsEzjwlLFH/zgwx/uyImVM9/rgBkc8AfiQa/Vg54nRd8mkm9yI7WV/O+WA== + + printj@~1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/printj/-/printj-1.3.0.tgz#9018a918a790e43707f10625d6e10187a367cff6" + integrity sha512-017o8YIaz8gLhaNxRB9eBv2mWXI2CtzhPJALnQTP+OPpuUfP0RMWqr/mHCzqVeu1AQxfzSfAtAq66vKB8y7Lzg== + + process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + + process-on-spawn@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/process-on-spawn/-/process-on-spawn-1.0.0.tgz#95b05a23073d30a17acfdc92a440efd2baefdc93" + integrity sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg== + dependencies: + fromentries "^1.2.0" + + progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + + psl@^1.1.28, psl@^1.1.33: + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + + pstree.remy@^1.1.7: + version "1.1.8" + resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" + integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== + + pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + + punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + + pupa@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" + integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== + dependencies: + escape-goat "^2.0.0" + + qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + + rc@^1.2.7, rc@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + + readable-stream@^2.0.2, readable-stream@^2.0.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + + readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + + readdirp@~3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.2.0.tgz#c30c33352b12c96dfb4b895421a49fd5a9593839" + integrity sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ== + dependencies: + picomatch "^2.0.4" + + readdirp@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" + integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== + dependencies: + picomatch "^2.2.1" + + readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + + regenerate-unicode-properties@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" + integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== + dependencies: + regenerate "^1.4.0" + + regenerate@^1.4.0: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + + regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.5: + version "0.13.7" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" + integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== + + regenerator-transform@^0.14.2: + version "0.14.5" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" + integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== + dependencies: + "@babel/runtime" "^7.8.4" + + regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + + regexpp@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" + integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== + + regexpu-core@^4.7.1: + version "4.7.1" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" + integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^8.2.0" + regjsgen "^0.5.1" + regjsparser "^0.6.4" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.2.0" + + registry-auth-token@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250" + integrity sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw== + dependencies: + rc "^1.2.8" + + registry-url@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" + integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== + dependencies: + rc "^1.2.8" + + regjsgen@^0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" + integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== + + regjsparser@^0.6.4: + version "0.6.6" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.6.tgz#6d8c939d1a654f78859b08ddcc4aa777f3fa800a" + integrity sha512-jjyuCp+IEMIm3N1H1LLTJW1EISEJV9+5oHdEyrt43Pg9cDSb6rrLZei2cVWpl0xTjmmlpec/lEQGYgM7xfpGCQ== + dependencies: + jsesc "~0.5.0" + + release-zalgo@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/release-zalgo/-/release-zalgo-1.0.0.tgz#09700b7e5074329739330e535c5a90fb67851730" + integrity sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA= + dependencies: + es6-error "^4.0.1" + + remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + + repeat-element@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + + repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + + request@^2.88.2: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + + require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + + require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + + require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + + resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + + resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + + resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + + responselike@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= + dependencies: + lowercase-keys "^1.0.0" + + ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + + rimraf@^2.6.1, rimraf@^2.6.2: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + + rimraf@^3.0.0, rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + + safe-buffer@^5.0.1, safe-buffer@^5.1.2: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + + safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + + safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + + "safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + + sax@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + + saxes@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" + integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== + dependencies: + xmlchars "^2.2.0" + + seedrandom@2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-2.4.3.tgz#2438504dad33917314bff18ac4d794f16d6aaecc" + integrity sha1-JDhQTa0zkXMUv/GKxNeU8W1qrsw= + + seedrandom@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-3.0.5.tgz#54edc85c95222525b0c7a6f6b3543d8e0b3aa0a7" + integrity sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg== + + semver-diff@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" + integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== + dependencies: + semver "^6.3.0" + + semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + + semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + + semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + + semver@^7.2.1: + version "7.3.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97" + integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw== + dependencies: + lru-cache "^6.0.0" + + set-blocking@^2.0.0, set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + + set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + + shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + + shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + + signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + + slash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== + + slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + + snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + + snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + + snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + + source-map-resolve@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + + source-map-support@^0.5.16, source-map-support@^0.5.17: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + + source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + + source-map@^0.5.0, source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + + source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + + spawn-wrap@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/spawn-wrap/-/spawn-wrap-2.0.0.tgz#103685b8b8f9b79771318827aa78650a610d457e" + integrity sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg== + dependencies: + foreground-child "^2.0.0" + is-windows "^1.0.2" + make-dir "^3.0.0" + rimraf "^3.0.0" + signal-exit "^3.0.2" + which "^2.0.1" + + split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + + sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + + ssf@~0.11.2: + version "0.11.2" + resolved "https://registry.yarnpkg.com/ssf/-/ssf-0.11.2.tgz#0b99698b237548d088fc43cdf2b70c1a7512c06c" + integrity sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g== + dependencies: + frac "~1.1.2" + + sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + + static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + + stream-chain@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/stream-chain/-/stream-chain-2.2.4.tgz#2e5e9858e00d25ebaf7e4339e8328ddcab5facad" + integrity sha512-9lsl3YM53V5N/I1C2uJtc3Kavyi3kNYN83VkKb/bMWRk7D9imiFyUPYa0PoZbLohSVOX1mYE9YsmwObZUsth6Q== + + stream-json@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/stream-json/-/stream-json-1.7.3.tgz#8a2abe8b51a2e84ffbc8d09bca9d01dc70facae3" + integrity sha512-Y6dXn9KKWSwxOqnvHGcdZy1PK+J+7alBwHCeU3W9oRqm4ilLRA0XSPmd1tWwhg7tv9EIxJTMWh7KF15tYelKJg== + dependencies: + stream-chain "^2.2.4" + + string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + + "string-width@^1.0.2 || 2": + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + + string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + + string-width@^4.0.0: + version "4.2.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" + integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + + string-width@^4.1.0, string-width@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + + string.prototype.trimend@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz#a22bd53cca5c7cf44d7c9d5c732118873d6cd18b" + integrity sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + + string.prototype.trimstart@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz#9b4cb590e123bb36564401d59824298de50fd5aa" + integrity sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + + string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + + strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + + strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + + strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + + strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + + strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + + strip-json-comments@2.0.1, strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + + strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + + supports-color@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a" + integrity sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg== + dependencies: + has-flag "^3.0.0" + + supports-color@^5.3.0, supports-color@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + + supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + + symbol-tree@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + + table@*, table@6.7.1: + version "6.7.1" + resolved "https://registry.yarnpkg.com/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2" + integrity sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg== + dependencies: + ajv "^8.0.1" + lodash.clonedeep "^4.5.0" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.0" + strip-ansi "^6.0.0" + + table@^6.0.4: + version "6.0.7" + resolved "https://registry.yarnpkg.com/table/-/table-6.0.7.tgz#e45897ffbcc1bcf9e8a87bf420f2c9e5a7a52a34" + integrity sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g== + dependencies: + ajv "^7.0.2" + lodash "^4.17.20" + slice-ansi "^4.0.0" + string-width "^4.2.0" + + tar@^4.4.2, tar@^4.4.6: + version "4.4.13" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" + integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== + dependencies: + chownr "^1.1.1" + fs-minipass "^1.2.5" + minipass "^2.8.6" + minizlib "^1.2.1" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.3" + + term-size@^2.1.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" + integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== + + test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + + text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + + tiny-emitter@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423" + integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q== + + to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + + to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + + to-readable-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" + integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== + + to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + + to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + + to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + + touch@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" + integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== + dependencies: + nopt "~1.0.10" + + tough-cookie@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" + integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== + dependencies: + psl "^1.1.33" + punycode "^2.1.1" + universalify "^0.1.2" + + tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + + tr46@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" + integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== + dependencies: + punycode "^2.1.1" + + ts-node@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.0.0.tgz#05f10b9a716b0b624129ad44f0ea05dac84ba3be" + integrity sha512-ROWeOIUvfFbPZkoDis0L/55Fk+6gFQNZwwKPLinacRl6tsxstTF1DbAcLKkovwnpKMVvOMHP1TIbnwXwtLg1gg== + dependencies: + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + source-map-support "^0.5.17" + yn "3.1.1" + + tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + + tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + + type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + + type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + + type-detect@^4.0.0, type-detect@^4.0.5: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + + type-fest@^0.8.0, type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + + typed-function@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/typed-function/-/typed-function-2.0.0.tgz#15ab3825845138a8b1113bd89e60cd6a435739e8" + integrity sha512-Hhy1Iwo/e4AtLZNK10ewVVcP2UEs408DS35ubP825w/YgSBK1KVLwALvvIG4yX75QJrxjCpcWkzkVRB0BwwYlA== + + typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + + typescript@>=3.0.1: + version "4.4.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.3.tgz#bdc5407caa2b109efd4f82fe130656f977a29324" + integrity sha512-4xfscpisVgqqDfPaJo5vkd+Qd/ItkoagnHpufr+i2QCHBsNYp+G7UAoyFl8aPtx879u38wPV65rZ8qbGZijalA== + + typescript@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.2.tgz#6d618640d430e3569a1dfb44f7d7e600ced3ee86" + integrity sha512-gzP+t5W4hdy4c+68bfcv0t400HVJMMd2+H9B7gae1nQlBzCqvrXX+6GL/b3GAgyTH966pzrZ70/fRjwAtZksSQ== + + undefsafe@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.3.tgz#6b166e7094ad46313b2202da7ecc2cd7cc6e7aae" + integrity sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A== + dependencies: + debug "^2.2.0" + + unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== + + unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== + dependencies: + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" + + unicode-match-property-value-ecmascript@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" + integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== + + unicode-property-aliases-ecmascript@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" + integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== + + union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + + unique-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" + integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== + dependencies: + crypto-random-string "^2.0.0" + + universalify@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + + unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + + upath@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + + update-notifier@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-4.1.3.tgz#be86ee13e8ce48fb50043ff72057b5bd598e1ea3" + integrity sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A== + dependencies: + boxen "^4.2.0" + chalk "^3.0.0" + configstore "^5.0.1" + has-yarn "^2.1.0" + import-lazy "^2.1.0" + is-ci "^2.0.0" + is-installed-globally "^0.3.1" + is-npm "^4.0.0" + is-yarn-global "^0.3.0" + latest-version "^5.0.0" + pupa "^2.0.1" + semver-diff "^3.1.1" + xdg-basedir "^4.0.0" + + uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + + urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + + url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= + dependencies: + prepend-http "^2.0.0" + + use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + + util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + + uuid@^3.3.2, uuid@^3.3.3: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + + v8-compile-cache@^2.0.3: + version "2.2.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132" + integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q== + + verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + + w3c-hr-time@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" + integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== + dependencies: + browser-process-hrtime "^1.0.0" + + w3c-xmlserializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" + integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== + dependencies: + xml-name-validator "^3.0.0" + + webidl-conversions@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" + integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== + + webidl-conversions@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" + integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== + + whatwg-encoding@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== + dependencies: + iconv-lite "0.4.24" + + whatwg-mimetype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + + whatwg-url@^8.0.0, whatwg-url@^8.5.0: + version "8.7.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" + integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== + dependencies: + lodash "^4.7.0" + tr46 "^2.1.0" + webidl-conversions "^6.1.0" + + which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + + which@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + + which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + + wide-align@1.1.3, wide-align@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + dependencies: + string-width "^1.0.2 || 2" + + widest-line@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== + dependencies: + string-width "^4.0.0" + + wmf@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wmf/-/wmf-1.0.2.tgz#7d19d621071a08c2bdc6b7e688a9c435298cc2da" + integrity sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw== + + word-wrap@^1.2.3, word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + + word@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/word/-/word-0.4.0.tgz#691272aaecb9da96388fc873d2ecb48a17cbee54" + integrity sha512-Aq84KjS7Z9HSU14qf4l/NEouaqfJAZtE9zEz7TIvw9V/3oJeUbjQwhz7ggqbL7I7REt4Bz+9HuCWsBO5N7xChw== + dependencies: + cfb "^1.2.0" + jsdom "^16.2.2" + + wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + + wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + + wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + + wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + + write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + + ws@^7.4.6: + version "7.5.5" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.5.tgz#8b4bc4af518cfabd0473ae4f99144287b33eb881" + integrity sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w== + + xdg-basedir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" + integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== + + xlsx@^0.17.2: + version "0.17.2" + resolved "https://registry.yarnpkg.com/xlsx/-/xlsx-0.17.2.tgz#032bcca02ca01b5ebf7da93dcb035891f2c092af" + integrity sha512-RIhN6/oc/ZqYZqY4jz4AX92yNfULhtNrcZP1lknIcsyR+Ra8Zu/9F1lAZWncYbDex95iYQX/XNNNzNFXZjlNOQ== + dependencies: + adler-32 "~1.2.0" + cfb "^1.1.4" + codepage "~1.15.0" + commander "~2.17.1" + crc-32 "~1.2.0" + exit-on-epipe "~1.0.1" + fflate "^0.3.8" + ssf "~0.11.2" + wmf "~1.0.1" + word "~0.4.0" + + xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== + + xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + + y18n@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" + integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== + + y18n@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.5.tgz#8769ec08d03b1ea2df2500acef561743bbb9ab18" + integrity sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg== + + yallist@^3.0.0, yallist@^3.0.3: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + + yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + + yargs-parser@13.1.2, yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + + yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + + yargs-parser@^20.2.2: + version "20.2.4" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== + + yargs-unparser@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-1.6.0.tgz#ef25c2c769ff6bd09e4b0f9d7c605fb27846ea9f" + integrity sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw== + dependencies: + flat "^4.1.0" + lodash "^4.17.15" + yargs "^13.3.0" + + yargs@13.3.2, yargs@^13.3.0: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.2" + + yargs@^15.0.2, yargs@^15.3.1: + version "15.4.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.2" + + yargs@^16.0.3: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + + yarn@^1.22.10: + version "1.22.10" + resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.22.10.tgz#c99daa06257c80f8fa2c3f1490724e394c26b18c" + integrity sha512-IanQGI9RRPAN87VGTF7zs2uxkSyQSrSPsju0COgbsKQOOXr5LtcVPeyXWgwVa0ywG3d8dg6kSYKGBuYK021qeA== + + yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== diff --git a/danfojs-node/yarn.lock b/src/danfojs-node/yarn.lock similarity index 81% rename from danfojs-node/yarn.lock rename to src/danfojs-node/yarn.lock index 1b837cae..f1558dc1 100644 --- a/danfojs-node/yarn.lock +++ b/src/danfojs-node/yarn.lock @@ -811,10 +811,10 @@ pirates "^4.0.0" source-map-support "^0.5.16" -"@babel/runtime@^7.13.10": - version "7.13.10" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.13.10.tgz#47d42a57b6095f4468da440388fdbad8bebf0d7d" - integrity sha512-4QPkjJq6Ns3V/RgpEahRk+AGfL0eO6RHHtTWoNNr5mO49G6B5+X6d6THgWEAvTrznU5xYpbAlVKRYcsCgh/Akw== +"@babel/runtime@^7.14.6": + version "7.15.3" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.3.tgz#2e1c2880ca118e5b2f9988322bd8a7656a32502b" + integrity sha512-OvwMLqNXkCXSz1kSm58sEsNuhqOx/fKpnUnKnFB5v8uDda5bLNEHNgKPvhDN6IU0LDcnHQ90LlJ0Q6jnyBSIBA== dependencies: regenerator-runtime "^0.13.4" @@ -907,6 +907,18 @@ readdirp "^2.2.1" upath "^1.1.1" +"@sindresorhus/is@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" + integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== + +"@szmarczak/http-timer@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" + integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== + dependencies: + defer-to-connect "^1.0.1" + "@tensorflow/tfjs-backend-cpu@3.6.0": version "3.6.0" resolved "https://registry.yarnpkg.com/@tensorflow/tfjs-backend-cpu/-/tfjs-backend-cpu-3.6.0.tgz#4e64a7cf1c33b203f71f8f77cd7b0ac1ef25a871" @@ -987,12 +999,45 @@ regenerator-runtime "^0.13.5" yargs "^16.0.3" -"@types/csv-parse@^1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@types/csv-parse/-/csv-parse-1.2.2.tgz#713486235759d615dc8e6a6a979170ada76701d5" - integrity sha512-k33tLtRKTQxf7hQfMlkWoS2TQYsnpk1ibZN+rzbuCkeBs8m23nHTeDTF1wb/e7/MSLdtgCzqu3oM1I101kd6yw== - dependencies: - csv-parse "*" +"@tootallnate/once@1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" + integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== + +"@tsconfig/node10@^1.0.7": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.8.tgz#c1e4e80d6f964fbecb3359c43bd48b40f7cadad9" + integrity sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg== + +"@tsconfig/node12@^1.0.7": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.9.tgz#62c1f6dee2ebd9aead80dc3afa56810e58e1a04c" + integrity sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw== + +"@tsconfig/node14@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.1.tgz#95f2d167ffb9b8d2068b0b235302fafd4df711f2" + integrity sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg== + +"@tsconfig/node16@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.1.tgz#a6ca6a9a0ff366af433f42f5f0e124794ff6b8f1" + integrity sha512-FTgBI767POY/lKNDNbIzgAX6miIDBs6NTCbdlDb8TrWovHsSvaVIZDlTqym29C6UqhzwcJx4CYr+AlrMywA0cA== + +"@types/caseless@*": + version "0.12.2" + resolved "https://registry.yarnpkg.com/@types/caseless/-/caseless-0.12.2.tgz#f65d3d6389e01eeb458bd54dc8f52b95a9463bc8" + integrity sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w== + +"@types/chai@^4.2.19": + version "4.2.19" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.19.tgz#80f286b515897413c7a35bdda069cc80f2344233" + integrity sha512-jRJgpRBuY+7izT7/WNXP/LsMO9YonsstuL+xuvycDyESpoDoIAsMd7suwpB4h9oEWB+ZlPTqJJ8EHomzNhwTPQ== + +"@types/mocha@^9.0.0": + version "9.0.0" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-9.0.0.tgz#3205bcd15ada9bc681ac20bef64e9e6df88fd297" + integrity sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA== "@types/node-fetch@^2.1.2": version "2.5.8" @@ -1007,16 +1052,65 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.22.tgz#0d29f382472c4ccf3bd96ff0ce47daf5b7b84b18" integrity sha512-g+f/qj/cNcqKkc3tFqlXOYjrmZA+jNBiDzbP3kH+B+otKFqAdPgVTGP1IeKRdMml/aE69as5S4FqtxAbl+LaMw== +"@types/node@^16.9.6": + version "16.9.6" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.9.6.tgz#040a64d7faf9e5d9e940357125f0963012e66f04" + integrity sha512-YHUZhBOMTM3mjFkXVcK+WwAcYmyhe1wL4lfqNtzI0b3qAy7yuSetnM7QJazgE5PFmgVTNGiLOgRFfJMqW7XpSQ== + "@types/offscreencanvas@~2019.3.0": version "2019.3.0" resolved "https://registry.yarnpkg.com/@types/offscreencanvas/-/offscreencanvas-2019.3.0.tgz#3336428ec7e9180cf4566dfea5da04eb586a6553" integrity sha512-esIJx9bQg+QYF0ra8GnvfianIY8qWB0GBx54PK5Eps6m+xTj86KLavHv6qDhzKcu5UUOgNfJ2pWaIIV7TRUd9Q== +"@types/papaparse@^5.2.6": + version "5.2.6" + resolved "https://registry.yarnpkg.com/@types/papaparse/-/papaparse-5.2.6.tgz#0bba18de4d15eff65883bc7c0794e0134de9e7c7" + integrity sha512-xGKSd0UTn58N1h0+zf8mW863Rv8BvXcGibEgKFtBIXZlcDXAmX/T4RdDO2mwmrmOypUDt5vRgo2v32a78JdqUA== + dependencies: + "@types/node" "*" + +"@types/request@^2.48.7": + version "2.48.7" + resolved "https://registry.yarnpkg.com/@types/request/-/request-2.48.7.tgz#a962d11a26e0d71d9a9913d96bb806dc4d4c2f19" + integrity sha512-GWP9AZW7foLd4YQxyFZDBepl0lPsWLMEXDZUjQ/c1gqVPDPECrRZyEzuhJdnPWioFCq3Tv0qoGpMD6U+ygd4ZA== + dependencies: + "@types/caseless" "*" + "@types/node" "*" + "@types/tough-cookie" "*" + form-data "^2.5.0" + "@types/seedrandom@2.4.27": version "2.4.27" resolved "https://registry.yarnpkg.com/@types/seedrandom/-/seedrandom-2.4.27.tgz#9db563937dd86915f69092bc43259d2f48578e41" integrity sha1-nbVjk33YaRX2kJK8QyWdL0hXjkE= +"@types/stream-chain@*": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/stream-chain/-/stream-chain-2.0.1.tgz#4d3cc47a32609878bc188de0bae420bcfd3bf1f5" + integrity sha512-D+Id9XpcBpampptkegH7WMsEk6fUdf9LlCIX7UhLydILsqDin4L0QT7ryJR0oycwC7OqohIzdfcMHVZ34ezNGg== + dependencies: + "@types/node" "*" + +"@types/stream-json@^1.7.1": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@types/stream-json/-/stream-json-1.7.1.tgz#58b82a41161f2936c9bfc6c725a30e956bbd443b" + integrity sha512-BNIK/ix6iJvWvoXbDVVJhw5LNG1wie/rXcUo7jw4hBqY3FhIrg0e+RMXFN5UreKclBIStl9FDEHNSDLuuQ9/MQ== + dependencies: + "@types/node" "*" + "@types/stream-chain" "*" + +"@types/table@^6.3.2": + version "6.3.2" + resolved "https://registry.yarnpkg.com/@types/table/-/table-6.3.2.tgz#e18ad2594400d81c3da28c31b342eb5a0d87a8e7" + integrity sha512-GJ82z3vQbx2BhiUo12w2A3lyBpXPJrGHjQ7iS5aH925098w8ojqiWBhgOUy97JS2PKLmRCTLT0sI+gJI4futig== + dependencies: + table "*" + +"@types/tough-cookie@*": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.1.tgz#8f80dd965ad81f3e1bc26d6f5c727e132721ff40" + integrity sha512-Y0K95ThC3esLEYD6ZuqNek29lNX2EM1qxV8y2FTLUB0ff5wWrk7az+mLrnNFUnaXcgKye22+sFBRXOgpPILZNg== + "@types/webgl-ext@0.0.30": version "0.0.30" resolved "https://registry.yarnpkg.com/@types/webgl-ext/-/webgl-ext-0.0.30.tgz#0ce498c16a41a23d15289e0b844d945b25f0fb9d" @@ -1027,21 +1121,44 @@ resolved "https://registry.yarnpkg.com/@types/webgl2/-/webgl2-0.0.5.tgz#dd925e20ab8ace80eb4b1e46fda5b109c508fb0d" integrity sha512-oGaKsBbxQOY5+aJFV3KECDhGaXt+yZJt2y/OZsnQGLRkH6Fvr7rv4pCt3SRH1somIHfej/c4u7NSpCyd9x+1Ow== +abab@^2.0.3, abab@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" + integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== + abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== +acorn-globals@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" + integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== + dependencies: + acorn "^7.1.1" + acorn-walk "^7.1.1" + acorn-jsx@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== -acorn@^7.4.0: +acorn-walk@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" + integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== + +acorn@^7.1.1, acorn@^7.4.0: version "7.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== +acorn@^8.2.4: + version "8.5.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.5.0.tgz#4512ccb99b3698c752591e9bb4472e38ad43cee2" + integrity sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q== + adler-32@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/adler-32/-/adler-32-1.2.0.tgz#6a3e6bf0a63900ba15652808cb15c6813d1a5f25" @@ -1050,11 +1167,25 @@ adler-32@~1.2.0: exit-on-epipe "~1.0.1" printj "~1.1.0" +adler-32@~1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/adler-32/-/adler-32-1.3.0.tgz#3cad1b71cdfa69f6c8a91f3e3615d31a4fdedc72" + integrity sha512-f5nltvjl+PRUh6YNfUstRaXwJxtfnKEWhAWWlmKvh+Y3J2+98a0KKVYDEhz6NdKGqswLhjNGznxfSsZGOvOd9g== + dependencies: + printj "~1.2.2" + adm-zip@^0.4.11: version "0.4.16" resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365" integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg== +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + agent-base@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" @@ -1070,7 +1201,7 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4: +ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -1090,6 +1221,23 @@ ajv@^7.0.2: require-from-string "^2.0.2" uri-js "^4.2.2" +ajv@^8.0.1: + version "8.6.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.6.1.tgz#ae65764bf1edde8cd861281cda5057852364a295" + integrity sha512-42VLtQUOLefAvKFAQIxIZDaThq6om/PrfP0CYk3/vn+y4BMNkKnbli8ON2QCiHov4KkzOSJ/xSoBJdayiiYvVQ== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ansi-align@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" + integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== + dependencies: + string-width "^3.0.0" + ansi-colors@3.2.3: version "3.2.3" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" @@ -1134,11 +1282,6 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" -any-promise@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" - integrity sha1-q8av7tzqUugJzcA3au0845Y10X8= - anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -1155,6 +1298,14 @@ anymatch@~3.1.1: normalize-path "^3.0.0" picomatch "^2.0.4" +anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + append-transform@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-2.0.0.tgz#99d9d29c7b38391e6f428d28ce136551f0b77e12" @@ -1180,6 +1331,11 @@ are-we-there-yet@~1.1.2: delegates "^1.0.0" readable-stream "^2.0.6" +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + argparse@^1.0.10, argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -1229,11 +1385,6 @@ assign-symbols@^1.0.0: resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== - astral-regex@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" @@ -1264,13 +1415,6 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== -axios@^0.19.2: - version "0.19.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27" - integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA== - dependencies: - follow-redirects "1.5.10" - babel-plugin-dynamic-import-node@^2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" @@ -1313,6 +1457,20 @@ binary-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== +boxen@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64" + integrity sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ== + dependencies: + ansi-align "^3.0.0" + camelcase "^5.3.1" + chalk "^3.0.0" + cli-boxes "^2.2.0" + string-width "^4.1.0" + term-size "^2.1.0" + type-fest "^0.8.1" + widest-line "^3.1.0" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -1344,6 +1502,11 @@ braces@~3.0.2: dependencies: fill-range "^7.0.1" +browser-process-hrtime@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" + integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== + browser-stdout@1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" @@ -1380,6 +1543,19 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +cacheable-request@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" + integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^3.0.0" + lowercase-keys "^2.0.0" + normalize-url "^4.1.0" + responselike "^1.0.2" + caching-transform@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/caching-transform/-/caching-transform-4.0.0.tgz#00d297a4206d71e2163c39eaffa8157ac0651f0f" @@ -1418,14 +1594,14 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -cfb@^1.1.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/cfb/-/cfb-1.2.0.tgz#6a4d0872b525ed60349e1ef51fb4b0bf73eca9a8" - integrity sha512-sXMvHsKCICVR3Naq+J556K+ExBo9n50iKl6LGarlnvuA2035uMlGA/qVrc0wQtow5P1vJEw9UyrKLCbtIKz+TQ== +cfb@^1.1.4, cfb@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/cfb/-/cfb-1.2.1.tgz#209429e4c68efd30641f6fc74b2d6028bd202402" + integrity sha512-wT2ScPAFGSVy7CY+aauMezZBnNrfnaLSrxHUHdea+Td/86vrk6ZquggV+ssBR88zNs0OnBkL2+lf9q0K+zVGzQ== dependencies: - adler-32 "~1.2.0" + adler-32 "~1.3.0" crc-32 "~1.2.0" - printj "~1.1.2" + printj "~1.3.0" chai@^4.2.0: version "4.2.0" @@ -1448,6 +1624,14 @@ chalk@^2.0.0, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chalk@^4.0.0, chalk@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" @@ -1456,11 +1640,6 @@ chalk@^4.0.0, chalk@^4.1.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chardet@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-1.3.0.tgz#a56ed2d9e4517a7128721340a0cb9a10a8fac238" - integrity sha512-cyTQGGptIjIT+CMGT5J/0l9c6Fb+565GCFjjeUTKxUO7w3oR+FcNCMEKTn5xtVKaLFmladN7QF68IiQsv5Fbdw== - check-error@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" @@ -1481,6 +1660,21 @@ chokidar@3.3.0: optionalDependencies: fsevents "~2.1.1" +chokidar@^3.2.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" + integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + chokidar@^3.4.0: version "3.5.1" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" @@ -1501,6 +1695,11 @@ chownr@^1.1.1: resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" @@ -1516,6 +1715,11 @@ clean-stack@^2.0.0: resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== +cli-boxes@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" + integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== + cliui@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" @@ -1543,18 +1747,22 @@ cliui@^7.0.2: strip-ansi "^6.0.0" wrap-ansi "^7.0.0" +clone-response@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" + integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= + dependencies: + mimic-response "^1.0.0" + code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= -codepage@~1.14.0: - version "1.14.0" - resolved "https://registry.yarnpkg.com/codepage/-/codepage-1.14.0.tgz#8cbe25481323559d7d307571b0fff91e7a1d2f99" - integrity sha1-jL4lSBMjVZ19MHVxsP/5HnodL5k= - dependencies: - commander "~2.14.1" - exit-on-epipe "~1.0.1" +codepage@~1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/codepage/-/codepage-1.15.0.tgz#2e00519024b39424ec66eeb3ec07227e692618ab" + integrity sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA== collection-visit@^1.0.0: version "1.0.0" @@ -1605,11 +1813,6 @@ commander@^4.0.1: resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== -commander@~2.14.1: - version "2.14.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.14.1.tgz#2235123e37af8ca3c65df45b026dbd357b01b9aa" - integrity sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw== - commander@~2.17.1: version "2.17.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" @@ -1620,10 +1823,10 @@ commondir@^1.0.1: resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= -complex.js@^2.0.11: - version "2.0.11" - resolved "https://registry.yarnpkg.com/complex.js/-/complex.js-2.0.11.tgz#09a873fbf15ffd8c18c9c2201ccef425c32b8bf1" - integrity sha512-6IArJLApNtdg1P1dFtn3dnyzoZBEF0MwMnrfF1exSBRpZYoy4yieMkpZhQDC0uwctw48vii0CFVyHfpgZ/DfGw== +complex.js@^2.0.15: + version "2.0.15" + resolved "https://registry.yarnpkg.com/complex.js/-/complex.js-2.0.15.tgz#7add6848b4c1d12aa9262f7df925ebe7a51a7406" + integrity sha512-gDBvQU8IG139ZBQTSo2qvDFP+lANMGluM779csXOr6ny1NUtA3wkUnCFjlDNH/moAVfXtvClYt6G0zarFbtz5w== component-emitter@^1.2.1: version "1.3.0" @@ -1635,6 +1838,18 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= +configstore@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" + integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== + dependencies: + dot-prop "^5.2.0" + graceful-fs "^4.1.2" + make-dir "^3.0.0" + unique-string "^2.0.0" + write-file-atomic "^3.0.0" + xdg-basedir "^4.0.0" + console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" @@ -1689,6 +1904,11 @@ crc-32@~1.2.0: exit-on-epipe "~1.0.1" printj "~1.1.0" +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + cross-spawn@^7.0.0, cross-spawn@^7.0.2: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" @@ -1698,25 +1918,27 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2: shebang-command "^2.0.0" which "^2.0.1" -csv-parse@*: - version "4.15.0" - resolved "https://registry.yarnpkg.com/csv-parse/-/csv-parse-4.15.0.tgz#d86d447e88d5f9a539e8768874f89a8d86d8fd78" - integrity sha512-y2wGeU/ybvUlyw6F+eanM6lxxE4JthCuHuaoTgPXdw6ImmfYXqtP0nrCLqd6Ew/a0FgPEz36y5HznI0W5oJ+cg== +crypto-random-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" + integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== -csv-parse@4.12.0: - version "4.12.0" - resolved "https://registry.yarnpkg.com/csv-parse/-/csv-parse-4.12.0.tgz#fd42d6291bbaadd51d3009f6cadbb3e53b4ce026" - integrity sha512-wPQl3H79vWLPI8cgKFcQXl0NBgYYEqVnT1i6/So7OjMpsI540oD7p93r3w6fDSyPvwkTepG05F69/7AViX2lXg== +cssom@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" + integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== -csv-parse@~4.8.8: - version "4.8.9" - resolved "https://registry.yarnpkg.com/csv-parse/-/csv-parse-4.8.9.tgz#0d3f0973f415677b01d17abaa221fbffc6125760" - integrity sha512-uDxIDIDLb89gxqixSgGqDj3EA5A8D0pgUeyp9Qut8u+eCIC8IXkTtaxJEnnWDb6N2HqBY64suSlcOGg5ZBtsAQ== +cssom@~0.3.6: + version "0.3.8" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== -csv-sniffer@0.1.1, csv-sniffer@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/csv-sniffer/-/csv-sniffer-0.1.1.tgz#d641017728004615767b6dce89ce2076efb0f0b7" - integrity sha1-1kEBdygARhV2e23Oic4gdu+w8Lc= +cssstyle@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" + integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== + dependencies: + cssom "~0.3.6" dashdash@^1.12.0: version "1.14.1" @@ -1725,6 +1947,15 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" +data-urls@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" + integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== + dependencies: + abab "^2.0.3" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.0.0" + debug@3.2.6: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" @@ -1732,12 +1963,12 @@ debug@3.2.6: dependencies: ms "^2.1.1" -debug@=3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== +debug@4: + version "4.3.2" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" + integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== dependencies: - ms "2.0.0" + ms "2.1.2" debug@^2.2.0, debug@^2.3.3: version "2.6.9" @@ -1765,16 +1996,23 @@ decamelize@^1.2.0: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= -decimal.js@^10.2.1: - version "10.2.1" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.2.1.tgz#238ae7b0f0c793d3e3cea410108b35a2c01426a3" - integrity sha512-KaL7+6Fw6i5A2XSnsbhm/6B+NuEA7TZ4vqxnd5tXz9sbKtrN9Srj8ab4vKVdK8YAqZO9P1kg45Y6YLoduPf+kw== +decimal.js@^10.2.1, decimal.js@^10.3.1: + version "10.3.1" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783" + integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= + dependencies: + mimic-response "^1.0.0" + deep-eql@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" @@ -1792,6 +2030,11 @@ deep-is@^0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= +deep-is@~0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + default-require-extensions@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-3.0.0.tgz#e03f93aac9b2b6443fc52e5e4a37b3ad9ad8df96" @@ -1799,6 +2042,11 @@ default-require-extensions@^3.0.0: dependencies: strip-bom "^4.0.0" +defer-to-connect@^1.0.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" + integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== + define-properties@^1.1.2, define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" @@ -1848,6 +2096,11 @@ diff@3.5.0: resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + doctrine@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" @@ -1855,6 +2108,38 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" +domexception@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" + integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== + dependencies: + webidl-conversions "^5.0.0" + +dot-prop@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + +dotenv@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" + integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== + +dts-bundle-generator@^5.9.0: + version "5.9.0" + resolved "https://registry.yarnpkg.com/dts-bundle-generator/-/dts-bundle-generator-5.9.0.tgz#454e8e62e9425bd5ff03afad66c1ea9cc02f7f99" + integrity sha512-wzxUa9nfGL09Sg+gD3jqA8kYIA9A/olenvP2MmZ6IGTlUxR8G1z4U+0+OfUEL6OH1mzn6xsD8EOVgpNnGDi8tQ== + dependencies: + typescript ">=3.0.1" + yargs "^15.3.1" + +duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= + ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" @@ -1878,6 +2163,13 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + enquirer@^2.3.5: version "2.3.6" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" @@ -1914,7 +2206,7 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -es6-error@^4.0.1, es6-error@^4.1.1: +es6-error@^4.0.1: version "4.1.1" resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== @@ -1936,6 +2228,11 @@ escalade@^3.1.1: resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== +escape-goat@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" + integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== + escape-latex@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/escape-latex/-/escape-latex-1.2.0.tgz#07c03818cf7dac250cce517f4fda1b001ef2bca1" @@ -1946,6 +2243,18 @@ escape-string-regexp@1.0.5, escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= +escodegen@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" + integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== + dependencies: + esprima "^4.0.1" + estraverse "^5.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + eslint-scope@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" @@ -2023,7 +2332,7 @@ espree@^7.3.0, espree@^7.3.1: acorn-jsx "^5.3.1" eslint-visitor-keys "^1.3.0" -esprima@^4.0.0: +esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== @@ -2129,11 +2438,16 @@ fast-json-stable-stringify@^2.0.0: resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -fast-levenshtein@^2.0.6: +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= +fflate@^0.3.8: + version "0.3.11" + resolved "https://registry.yarnpkg.com/fflate/-/fflate-0.3.11.tgz#2c440d7180fdeb819e64898d8858af327b042a5d" + integrity sha512-Rr5QlUeGN1mbOHlaqcSYMKVpPbgLy0AWT/W0EHxA6NGI12yO1jpoui2zBBvU2G824ltM6Ut8BFgfHSBGfkmS0A== + file-entry-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.0.tgz#7921a89c391c6d93efec2169ac6bf300c527ea0a" @@ -2211,13 +2525,6 @@ flatted@^3.1.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469" integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== -follow-redirects@1.5.10: - version "1.5.10" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" - integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== - dependencies: - debug "=3.1.0" - for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" @@ -2236,6 +2543,15 @@ forever-agent@~0.6.1: resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= +form-data@^2.5.0: + version "2.5.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" + integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + form-data@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.0.tgz#31b7e39c85f1355b7139ee0c647cf0de7f83c682" @@ -2259,10 +2575,10 @@ frac@~1.1.2: resolved "https://registry.yarnpkg.com/frac/-/frac-1.1.2.tgz#3d74f7f6478c88a1b5020306d747dc6313c74d0b" integrity sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA== -fraction.js@^4.0.12: - version "4.0.13" - resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.0.13.tgz#3c1c315fa16b35c85fffa95725a36fa729c69dfe" - integrity sha512-E1fz2Xs9ltlUp+qbiyx9wmt2n9dRzPsS11Jtdb8D2o+cC7wr9xkkKsVKJuBX0ST+LVS+LhLO+SbLJNtfWcJvXA== +fraction.js@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.1.1.tgz#ac4e520473dae67012d618aab91eda09bcb400ff" + integrity sha512-MHOhvvxHTfRFpF1geTK9czMIZ6xclsEor2wkIGYYq+PxcQqT7vStJqjhe6S1TenZrMZzo+wlqOufBDVepUEgPg== fragment-cache@^0.2.1: version "0.2.1" @@ -2271,25 +2587,6 @@ fragment-cache@^0.2.1: dependencies: map-cache "^0.2.2" -frictionless.js@0.13.4: - version "0.13.4" - resolved "https://registry.yarnpkg.com/frictionless.js/-/frictionless.js-0.13.4.tgz#4570b788073bad928fc2166afaa693e333c42f62" - integrity sha512-hB2noLCOl0pQZjSopcjwg+IeGcIg2FAQDO5EdJ9IsYZuoj45rzgM9ZLVMacTXLtEnftfML21e8ERQl38F4KpqA== - dependencies: - chardet "1.3.0" - csv-parse "4.12.0" - csv-sniffer "0.1.1" - iconv-lite "0.6.2" - lodash "4.17.20" - mime-types "2.1.27" - node-fetch "2.6.1" - readable-web-to-node-stream "^2.0.0" - stream-to-array "2.3.0" - stream-to-string "1.2.0" - tableschema "1.12.3" - url-join "4.0.1" - xlsx "0.16.7" - fromentries@^1.2.0: version "1.3.2" resolved "https://registry.yarnpkg.com/fromentries/-/fromentries-1.3.2.tgz#e4bca6808816bf8f93b52750f1127f5a6fd86e3a" @@ -2322,6 +2619,11 @@ fsevents@~2.3.1: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.1.tgz#b209ab14c61012636c8863507edf7fb68cc54e9f" integrity sha512-YR47Eg4hChJGAB1O3yEAOkGO+rlzutoICGqGo9EZ4lKWokzZRSyIW1QmTzqjtw8MJdj9srP869CuWw/hyzSiBw== +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -2375,6 +2677,20 @@ get-package-type@^0.1.0: resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== +get-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" @@ -2402,6 +2718,13 @@ glob-parent@^5.0.0, glob-parent@~5.1.0: dependencies: is-glob "^4.0.1" +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + glob@7.1.3: version "7.1.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" @@ -2426,6 +2749,13 @@ glob@^7.0.0, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: once "^1.3.0" path-is-absolute "^1.0.0" +global-dirs@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.1.0.tgz#e9046a49c806ff04d6c1825e196c8f0091e8df4d" + integrity sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ== + dependencies: + ini "1.3.7" + globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" @@ -2443,11 +2773,33 @@ google-protobuf@^3.9.2: resolved "https://registry.yarnpkg.com/google-protobuf/-/google-protobuf-3.14.0.tgz#20373d22046e63831a5110e11a84f713cc43651e" integrity sha512-bwa8dBuMpOxg7COyqkW6muQuvNnWgVN8TX/epDRGW5m0jcrmq2QJyCyiV8ZE2/6LaIIqJtiv9bYokFhfpy/o6w== +got@^9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" + integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== + dependencies: + "@sindresorhus/is" "^0.14.0" + "@szmarczak/http-timer" "^1.1.2" + cacheable-request "^6.0.0" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^4.1.0" + lowercase-keys "^1.0.1" + mimic-response "^1.0.1" + p-cancelable "^1.0.0" + to-readable-stream "^1.0.0" + url-parse-lax "^3.0.0" + graceful-fs@^4.1.11, graceful-fs@^4.1.15: version "4.2.4" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== +graceful-fs@^4.1.2: + version "4.2.6" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" + integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== + growl@1.10.5: version "1.10.5" resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" @@ -2517,6 +2869,11 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" +has-yarn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" + integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== + has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" @@ -2537,11 +2894,32 @@ he@1.2.0: resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== +html-encoding-sniffer@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" + integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== + dependencies: + whatwg-encoding "^1.0.5" + html-escaper@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== +http-cache-semantics@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + +http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + dependencies: + "@tootallnate/once" "1" + agent-base "6" + debug "4" + http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" @@ -2559,20 +2937,26 @@ https-proxy-agent@^2.2.1: agent-base "^4.3.0" debug "^3.1.0" -iconv-lite@0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.2.tgz#ce13d1875b0c3a674bd6a04b7f76b01b1b6ded01" - integrity sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ== +https-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" + integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" + agent-base "6" + debug "4" -iconv-lite@^0.4.4: +iconv-lite@0.4.24, iconv-lite@^0.4.4: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" +ignore-by-default@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" + integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk= + ignore-walk@^3.0.1: version "3.0.3" resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" @@ -2593,6 +2977,11 @@ import-fresh@^3.0.0, import-fresh@^3.2.1: parent-module "^1.0.0" resolve-from "^4.0.0" +import-lazy@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= + imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -2611,11 +3000,16 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: +inherits@2, inherits@^2.0.3, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +ini@1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84" + integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ== + ini@~1.3.0: version "1.3.8" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" @@ -2664,6 +3058,13 @@ is-callable@^1.1.4, is-callable@^1.2.2: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9" integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA== +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -2749,11 +3150,24 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" +is-installed-globally@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.3.2.tgz#fd3efa79ee670d1187233182d5b0a1dd00313141" + integrity sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g== + dependencies: + global-dirs "^2.0.1" + is-path-inside "^3.0.1" + is-negative-zero@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== +is-npm@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d" + integrity sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig== + is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -2766,6 +3180,16 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-path-inside@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" @@ -2773,6 +3197,11 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" +is-potential-custom-element-name@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== + is-regex@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.1.tgz#c6f98aacc546f6cec5468a07b7b153ab564a57b9" @@ -2802,6 +3231,11 @@ is-windows@^1.0.2: resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== +is-yarn-global@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" + integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== + isarray@1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -2921,6 +3355,39 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= +jsdom@^16.2.2: + version "16.7.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" + integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== + dependencies: + abab "^2.0.5" + acorn "^8.2.4" + acorn-globals "^6.0.0" + cssom "^0.4.4" + cssstyle "^2.3.0" + data-urls "^2.0.0" + decimal.js "^10.2.1" + domexception "^2.0.1" + escodegen "^2.0.0" + form-data "^3.0.0" + html-encoding-sniffer "^2.0.1" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-potential-custom-element-name "^1.0.1" + nwsapi "^2.2.0" + parse5 "6.0.1" + saxes "^5.0.1" + symbol-tree "^3.2.4" + tough-cookie "^4.0.0" + w3c-hr-time "^1.0.2" + w3c-xmlserializer "^2.0.0" + webidl-conversions "^6.1.0" + whatwg-encoding "^1.0.5" + whatwg-mimetype "^2.3.0" + whatwg-url "^8.5.0" + ws "^7.4.6" + xml-name-validator "^3.0.0" + jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" @@ -2931,6 +3398,11 @@ jsesc@~0.5.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= + json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -2973,6 +3445,13 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" +keyv@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" + integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== + dependencies: + json-buffer "3.0.0" + kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -2997,6 +3476,13 @@ kind-of@^6.0.0, kind-of@^6.0.2: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== +latest-version@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" + integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== + dependencies: + package-json "^6.3.0" + lcov-parse@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-1.0.0.tgz#eb0d46b54111ebc561acb4c408ef9363bdc8f7e0" @@ -3010,6 +3496,14 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + locate-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" @@ -3025,16 +3519,31 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= + lodash.flattendeep@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" integrity sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI= -lodash@4.17.20, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20: +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= + +lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20: version "4.17.20" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== +lodash@^4.7.0: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + log-driver@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8" @@ -3047,6 +3556,16 @@ log-symbols@3.0.0: dependencies: chalk "^2.4.2" +lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -3069,6 +3588,11 @@ make-dir@^3.0.0, make-dir@^3.0.2: dependencies: semver "^6.0.0" +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" @@ -3081,17 +3605,18 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" -mathjs@7.5.1: - version "7.5.1" - resolved "https://registry.yarnpkg.com/mathjs/-/mathjs-7.5.1.tgz#eb125295310a99ddcaf6145c47b09aab36e48274" - integrity sha512-H2q/Dq0qxBLMw+G84SSXmGqo/znihuxviGgAQwAcyeFLwK2HksvSGNx4f3dllZF51bWOnu2op60VZxH2Sb51Pw== +mathjs@^9.4.4: + version "9.4.4" + resolved "https://registry.yarnpkg.com/mathjs/-/mathjs-9.4.4.tgz#29acd67563c1e720910213062824c3faf61bc858" + integrity sha512-5EEJXnWOzLDgMHSFyw623nH+MTBZxquWwXtrzTsingOouJJ6UZG2VNO1lwH31IMt9aMno1axO6TYleIP4YSDaQ== dependencies: - complex.js "^2.0.11" - decimal.js "^10.2.1" + "@babel/runtime" "^7.14.6" + complex.js "^2.0.15" + decimal.js "^10.3.1" escape-latex "^1.2.0" - fraction.js "^4.0.12" + fraction.js "^4.1.1" javascript-natural-sort "^0.7.1" - seed-random "^2.2.0" + seedrandom "^3.0.5" tiny-emitter "^2.1.0" typed-function "^2.0.0" @@ -3114,23 +3639,11 @@ micromatch@^3.1.10, micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.2" -mime-db@1.44.0: - version "1.44.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" - integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== - mime-db@1.45.0: version "1.45.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea" integrity sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w== -mime-types@2.1.27: - version "2.1.27" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" - integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== - dependencies: - mime-db "1.44.0" - mime-types@^2.1.12, mime-types@~2.1.19: version "2.1.28" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.28.tgz#1160c4757eab2c5363888e005273ecf79d2a0ecd" @@ -3138,6 +3651,11 @@ mime-types@^2.1.12, mime-types@~2.1.19: dependencies: mime-db "1.45.0" +mimic-response@^1.0.0, mimic-response@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + minimatch@3.0.4, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -3210,11 +3728,6 @@ mocha@^7.2.0: yargs-parser "13.1.2" yargs-unparser "1.6.0" -moment@~2.24.0: - version "2.24.0" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b" - integrity sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg== - ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -3274,7 +3787,7 @@ node-environment-flags@1.0.6: object.getownpropertydescriptors "^2.0.3" semver "^5.7.0" -node-fetch@2.6.1, node-fetch@^2.6.1, node-fetch@~2.6.1: +node-fetch@^2.6.1, node-fetch@~2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== @@ -3312,6 +3825,22 @@ node-releases@^1.1.71: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.72.tgz#14802ab6b1039a79a0c7d662b610a5bbd76eacbe" integrity sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw== +nodemon@^2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.7.tgz#6f030a0a0ebe3ea1ba2a38f71bf9bab4841ced32" + integrity sha512-XHzK69Awgnec9UzHr1kc8EomQh4sjTQ8oRf8TsGrSmHDx9/UmiGG9E/mM3BuTfNeFwdNBvrqQq/RHL0xIeyFOA== + dependencies: + chokidar "^3.2.2" + debug "^3.2.6" + ignore-by-default "^1.0.1" + minimatch "^3.0.4" + pstree.remy "^1.1.7" + semver "^5.7.1" + supports-color "^5.5.0" + touch "^3.1.0" + undefsafe "^2.0.3" + update-notifier "^4.1.0" + nopt@^4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" @@ -3320,6 +3849,13 @@ nopt@^4.0.1: abbrev "1" osenv "^0.1.4" +nopt@~1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" + integrity sha1-bd0hvSoxQXuScn3Vhfim83YI6+4= + dependencies: + abbrev "1" + normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" @@ -3332,6 +3868,11 @@ normalize-path@^3.0.0, normalize-path@~3.0.0: resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== +normalize-url@^4.1.0: + version "4.5.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" + integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== + npm-bundled@^1.0.1: version "1.1.1" resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" @@ -3368,6 +3909,11 @@ number-is-nan@^1.0.0: resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= +nwsapi@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" + integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== + nyc@^15.1.0: version "15.1.0" resolved "https://registry.yarnpkg.com/nyc/-/nyc-15.1.0.tgz#1335dae12ddc87b6e249d5a1994ca4bdaea75f02" @@ -3473,13 +4019,25 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" -once@^1.3.0: +once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= dependencies: wrappy "1" +optionator@^0.8.1: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + optionator@^0.9.1: version "0.9.1" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" @@ -3510,6 +4068,11 @@ osenv@^0.1.4: os-homedir "^1.0.0" os-tmpdir "^1.0.0" +p-cancelable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" + integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== + p-limit@^2.0.0, p-limit@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" @@ -3553,6 +4116,21 @@ package-hash@^4.0.0: lodash.flattendeep "^4.4.0" release-zalgo "^1.0.0" +package-json@^6.3.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" + integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== + dependencies: + got "^9.6.0" + registry-auth-token "^4.0.0" + registry-url "^5.0.0" + semver "^6.2.0" + +papaparse@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/papaparse/-/papaparse-5.3.1.tgz#770b7a9124d821d4b2132132b7bd7dce7194b5b1" + integrity sha512-Dbt2yjLJrCwH2sRqKFFJaN5XgIASO9YOFeFP8rIBRG2Ain8mqk5r1M6DkfvqEVozVcz3r3HaUGw253hA1nLIcA== + parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -3560,6 +4138,11 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" +parse5@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" @@ -3631,6 +4214,11 @@ pkg-dir@^4.1.0: dependencies: find-up "^4.0.0" +plotly.js-dist-min@^2.8.0: + version "2.8.3" + resolved "https://registry.yarnpkg.com/plotly.js-dist-min/-/plotly.js-dist-min-2.8.3.tgz#0ffa317de10dd48f0c32d15c83c41f60230f50b3" + integrity sha512-TjovBrqIbedUfjGWNMMs++az3lF4hsIAB8EjqM/mC0cPrO7Wg86lBkHAsRbMra5aWyXA+M52yiQUUKBfThqwzg== + posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" @@ -3641,11 +4229,31 @@ prelude-ls@^1.2.1: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -printj@~1.1.0, printj@~1.1.2: +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= + +printj@~1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/printj/-/printj-1.1.2.tgz#d90deb2975a8b9f600fb3a1c94e3f4c53c78a222" integrity sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ== +printj@~1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/printj/-/printj-1.2.3.tgz#2cfb2b192a1e5385dbbe5b46658ac34aa828508a" + integrity sha512-sanczS6xOJOg7IKDvi4sGOUOe7c1tsEzjwlLFH/zgwx/uyImVM9/rgBkc8AfiQa/Vg54nRd8mkm9yI7WV/O+WA== + +printj@~1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/printj/-/printj-1.3.0.tgz#9018a918a790e43707f10625d6e10187a367cff6" + integrity sha512-017o8YIaz8gLhaNxRB9eBv2mWXI2CtzhPJALnQTP+OPpuUfP0RMWqr/mHCzqVeu1AQxfzSfAtAq66vKB8y7Lzg== + process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -3663,27 +4271,42 @@ progress@^2.0.0: resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== -promise-polyfill@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-1.1.6.tgz#cd04eff46f5c95c3a7d045591d79b5e3e01f12d7" - integrity sha1-zQTv9G9clcOn0EVZHXm14+AfEtc= - -psl@^1.1.28: +psl@^1.1.28, psl@^1.1.33: version "1.8.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== +pstree.remy@^1.1.7: + version "1.1.8" + resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" + integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== +pupa@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" + integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== + dependencies: + escape-goat "^2.0.0" + qs@~6.5.2: version "6.5.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== -rc@^1.2.7: +rc@^1.2.7, rc@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== @@ -3693,15 +4316,6 @@ rc@^1.2.7: minimist "^1.2.0" strip-json-comments "~2.0.1" -"readable-stream@2 || 3": - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - readable-stream@^2.0.2, readable-stream@^2.0.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" @@ -3715,11 +4329,6 @@ readable-stream@^2.0.2, readable-stream@^2.0.6: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-web-to-node-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/readable-web-to-node-stream/-/readable-web-to-node-stream-2.0.0.tgz#751e632f466552ac0d5c440cc01470352f93c4b7" - integrity sha512-+oZJurc4hXpaaqsN68GoZGQAQIA3qr09Or4fqEsargABnbe5Aau8hFn6ISVleT3cpY/0n/8drn7huyyEvTbghA== - readdirp@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" @@ -3743,6 +4352,13 @@ readdirp@~3.5.0: dependencies: picomatch "^2.2.1" +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + regenerate-unicode-properties@^8.2.0: version "8.2.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" @@ -3792,6 +4408,20 @@ regexpu-core@^4.7.1: unicode-match-property-ecmascript "^1.0.4" unicode-match-property-value-ecmascript "^1.2.0" +registry-auth-token@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250" + integrity sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw== + dependencies: + rc "^1.2.8" + +registry-url@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" + integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== + dependencies: + rc "^1.2.8" + regjsgen@^0.5.1: version "0.5.2" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" @@ -3882,6 +4512,13 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= +responselike@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= + dependencies: + lowercase-keys "^1.0.0" + ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" @@ -3901,7 +4538,7 @@ rimraf@^3.0.0, rimraf@^3.0.2: dependencies: glob "^7.1.3" -safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: +safe-buffer@^5.0.1, safe-buffer@^5.1.2: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -3918,7 +4555,7 @@ safe-regex@^1.1.0: dependencies: ret "~0.1.10" -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -3928,27 +4565,46 @@ sax@^1.2.4: resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -seed-random@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/seed-random/-/seed-random-2.2.0.tgz#2a9b19e250a817099231a5b99a4daf80b7fbed54" - integrity sha1-KpsZ4lCoFwmSMaW5mk2vgLf77VQ= +saxes@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" + integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== + dependencies: + xmlchars "^2.2.0" seedrandom@2.4.3: version "2.4.3" resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-2.4.3.tgz#2438504dad33917314bff18ac4d794f16d6aaecc" integrity sha1-JDhQTa0zkXMUv/GKxNeU8W1qrsw= +seedrandom@^2.4.3: + version "2.4.4" + resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-2.4.4.tgz#b25ea98632c73e45f58b77cfaa931678df01f9ba" + integrity sha512-9A+PDmgm+2du77B5i0Ip2cxOqqHjgNxnBgglxLcX78A2D6c2rTo61z4jnVABpF4cKeDMDG+cmXXvdnqse2VqMA== + +seedrandom@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-3.0.5.tgz#54edc85c95222525b0c7a6f6b3543d8e0b3aa0a7" + integrity sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg== + +semver-diff@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" + integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== + dependencies: + semver "^6.3.0" + semver@7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== -semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0: +semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@^6.0.0, semver@^6.3.0: +semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== @@ -3997,15 +4653,6 @@ slash@^2.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== -slice-ansi@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== - dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" - slice-ansi@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" @@ -4056,7 +4703,7 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@^0.5.16: +source-map-support@^0.5.16, source-map-support@^0.5.17: version "0.5.19" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== @@ -4074,7 +4721,7 @@ source-map@^0.5.0, source-map@^0.5.6: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= -source-map@^0.6.0, source-map@^0.6.1: +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== @@ -4133,24 +4780,17 @@ static-extend@^0.1.1: define-property "^0.2.5" object-copy "^0.1.0" -stream-to-array@2.3.0, stream-to-array@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/stream-to-array/-/stream-to-array-2.3.0.tgz#bbf6b39f5f43ec30bc71babcb37557acecf34353" - integrity sha1-u/azn19D7DC8cbq8s3VXrOzzQ1M= - dependencies: - any-promise "^1.1.0" - -stream-to-async-iterator@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/stream-to-async-iterator/-/stream-to-async-iterator-0.2.0.tgz#bef5c885e9524f98b2fa5effecc357bd58483780" - integrity sha1-vvXIhelST5iy+l7/7MNXvVhIN4A= +stream-chain@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/stream-chain/-/stream-chain-2.2.4.tgz#2e5e9858e00d25ebaf7e4339e8328ddcab5facad" + integrity sha512-9lsl3YM53V5N/I1C2uJtc3Kavyi3kNYN83VkKb/bMWRk7D9imiFyUPYa0PoZbLohSVOX1mYE9YsmwObZUsth6Q== -stream-to-string@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/stream-to-string/-/stream-to-string-1.2.0.tgz#3ca506a097ecbf78b0e0aee0b6fa5c4565412a15" - integrity sha512-8drZlFIKBHSMdX9GCWv8V9AAWnQcTqw0iAI6/GC7UJ0H0SwKeFKjOoZfGY1tOU00GGU7FYZQoJ/ZCUEoXhD7yQ== +stream-json@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/stream-json/-/stream-json-1.7.3.tgz#8a2abe8b51a2e84ffbc8d09bca9d01dc70facae3" + integrity sha512-Y6dXn9KKWSwxOqnvHGcdZy1PK+J+7alBwHCeU3W9oRqm4ilLRA0XSPmd1tWwhg7tv9EIxJTMWh7KF15tYelKJg== dependencies: - promise-polyfill "^1.1.6" + stream-chain "^2.2.4" string-width@^1.0.1: version "1.0.2" @@ -4178,6 +4818,15 @@ string-width@^3.0.0, string-width@^3.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" +string-width@^4.0.0: + version "4.2.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" + integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + string-width@^4.1.0, string-width@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" @@ -4203,13 +4852,6 @@ string.prototype.trimstart@^1.0.3: call-bind "^1.0.0" define-properties "^1.1.3" -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -4267,7 +4909,7 @@ supports-color@6.0.0: dependencies: has-flag "^3.0.0" -supports-color@^5.3.0: +supports-color@^5.3.0, supports-color@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== @@ -4281,15 +4923,22 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" -table@^5.4.6: - version "5.4.6" - resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" - integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== +symbol-tree@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + +table@*, table@6.7.1: + version "6.7.1" + resolved "https://registry.yarnpkg.com/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2" + integrity sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg== dependencies: - ajv "^6.10.2" - lodash "^4.17.14" - slice-ansi "^2.1.0" - string-width "^3.0.0" + ajv "^8.0.1" + lodash.clonedeep "^4.5.0" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.0" + strip-ansi "^6.0.0" table@^6.0.4: version "6.0.7" @@ -4301,24 +4950,6 @@ table@^6.0.4: slice-ansi "^4.0.0" string-width "^4.2.0" -tableschema@1.12.3: - version "1.12.3" - resolved "https://registry.yarnpkg.com/tableschema/-/tableschema-1.12.3.tgz#624f2919d98382099831a3fd86dcea4fcdb08c49" - integrity sha512-957Zzq8NKVAzv3fp33NXbmDOp+oj5NaGjoyb9ZAh4LLwNYRJZSaYvo5zkLO+3St/Tc7ECbeEdfX11cAYZZKgLw== - dependencies: - "@types/csv-parse" "^1.2.2" - axios "^0.19.2" - csv-parse "~4.8.8" - csv-sniffer "^0.1.1" - es6-error "^4.1.1" - lodash "^4.17.15" - moment "~2.24.0" - regenerator-runtime "^0.13.5" - stream-to-async-iterator "^0.2.0" - through2 "^3.0.1" - tv4 "^1.3.0" - validator "^13.0.0" - tar@^4.4.2, tar@^4.4.6: version "4.4.13" resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" @@ -4332,6 +4963,11 @@ tar@^4.4.2, tar@^4.4.6: safe-buffer "^5.1.2" yallist "^3.0.3" +term-size@^2.1.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" + integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== + test-exclude@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" @@ -4346,14 +4982,6 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= -through2@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.2.tgz#99f88931cfc761ec7678b41d5d7336b5b6a07bf4" - integrity sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ== - dependencies: - inherits "^2.0.4" - readable-stream "2 || 3" - tiny-emitter@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423" @@ -4371,6 +4999,11 @@ to-object-path@^0.3.0: dependencies: kind-of "^3.0.2" +to-readable-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" + integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== + to-regex-range@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" @@ -4396,6 +5029,22 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" +touch@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" + integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== + dependencies: + nopt "~1.0.10" + +tough-cookie@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" + integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== + dependencies: + psl "^1.1.33" + punycode "^2.1.1" + universalify "^0.1.2" + tough-cookie@~2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" @@ -4404,6 +5053,29 @@ tough-cookie@~2.5.0: psl "^1.1.28" punycode "^2.1.1" +tr46@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" + integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== + dependencies: + punycode "^2.1.1" + +ts-node@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.0.0.tgz#05f10b9a716b0b624129ad44f0ea05dac84ba3be" + integrity sha512-ROWeOIUvfFbPZkoDis0L/55Fk+6gFQNZwwKPLinacRl6tsxstTF1DbAcLKkovwnpKMVvOMHP1TIbnwXwtLg1gg== + dependencies: + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + source-map-support "^0.5.17" + yn "3.1.1" + tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -4411,11 +5083,6 @@ tunnel-agent@^0.6.0: dependencies: safe-buffer "^5.0.1" -tv4@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/tv4/-/tv4-1.3.0.tgz#d020c846fadd50c855abb25ebaecc68fc10f7963" - integrity sha1-0CDIRvrdUMhVq7JeuuzGj8EPeWM= - tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" @@ -4428,6 +5095,13 @@ type-check@^0.4.0, type-check@~0.4.0: dependencies: prelude-ls "^1.2.1" +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + type-detect@^4.0.0, type-detect@^4.0.5: version "4.0.8" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" @@ -4450,6 +5124,23 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" +typescript@>=3.0.1: + version "4.4.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.3.tgz#bdc5407caa2b109efd4f82fe130656f977a29324" + integrity sha512-4xfscpisVgqqDfPaJo5vkd+Qd/ItkoagnHpufr+i2QCHBsNYp+G7UAoyFl8aPtx879u38wPV65rZ8qbGZijalA== + +typescript@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.2.tgz#6d618640d430e3569a1dfb44f7d7e600ced3ee86" + integrity sha512-gzP+t5W4hdy4c+68bfcv0t400HVJMMd2+H9B7gae1nQlBzCqvrXX+6GL/b3GAgyTH966pzrZ70/fRjwAtZksSQ== + +undefsafe@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.3.tgz#6b166e7094ad46313b2202da7ecc2cd7cc6e7aae" + integrity sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A== + dependencies: + debug "^2.2.0" + unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" @@ -4483,6 +5174,18 @@ union-value@^1.0.0: is-extendable "^0.1.1" set-value "^2.0.1" +unique-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" + integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== + dependencies: + crypto-random-string "^2.0.0" + +universalify@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" @@ -4496,6 +5199,25 @@ upath@^1.1.1: resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== +update-notifier@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-4.1.3.tgz#be86ee13e8ce48fb50043ff72057b5bd598e1ea3" + integrity sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A== + dependencies: + boxen "^4.2.0" + chalk "^3.0.0" + configstore "^5.0.1" + has-yarn "^2.1.0" + import-lazy "^2.1.0" + is-ci "^2.0.0" + is-installed-globally "^0.3.1" + is-npm "^4.0.0" + is-yarn-global "^0.3.0" + latest-version "^5.0.0" + pupa "^2.0.1" + semver-diff "^3.1.1" + xdg-basedir "^4.0.0" + uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -4508,17 +5230,19 @@ urix@^0.1.0: resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= -url-join@4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7" - integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA== +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= + dependencies: + prepend-http "^2.0.0" use@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== -util-deprecate@^1.0.1, util-deprecate@~1.0.1: +util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= @@ -4533,11 +5257,6 @@ v8-compile-cache@^2.0.3: resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz#9471efa3ef9128d2f7c6a7ca39c4dd6b5055b132" integrity sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q== -validator@^13.0.0: - version "13.5.2" - resolved "https://registry.yarnpkg.com/validator/-/validator-13.5.2.tgz#c97ae63ed4224999fb6f42c91eaca9567fe69a46" - integrity sha512-mD45p0rvHVBlY2Zuy3F3ESIe1h5X58GPfAtslBjY7EtTqGquZTj+VX/J4RnHWN8FKq0C9WRVt1oWAcytWRuYLQ== - verror@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" @@ -4547,6 +5266,51 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" +w3c-hr-time@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" + integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== + dependencies: + browser-process-hrtime "^1.0.0" + +w3c-xmlserializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" + integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== + dependencies: + xml-name-validator "^3.0.0" + +webidl-conversions@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" + integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== + +webidl-conversions@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" + integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== + +whatwg-encoding@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== + dependencies: + iconv-lite "0.4.24" + +whatwg-mimetype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + +whatwg-url@^8.0.0, whatwg-url@^8.5.0: + version "8.7.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" + integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== + dependencies: + lodash "^4.7.0" + tr46 "^2.1.0" + webidl-conversions "^6.1.0" + which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" @@ -4573,20 +5337,30 @@ wide-align@1.1.3, wide-align@^1.1.0: dependencies: string-width "^1.0.2 || 2" +widest-line@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== + dependencies: + string-width "^4.0.0" + wmf@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/wmf/-/wmf-1.0.2.tgz#7d19d621071a08c2bdc6b7e688a9c435298cc2da" integrity sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw== -word-wrap@^1.2.3: +word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== -word@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/word/-/word-0.3.0.tgz#8542157e4f8e849f4a363a288992d47612db9961" - integrity sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA== +word@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/word/-/word-0.4.0.tgz#691272aaecb9da96388fc873d2ecb48a17cbee54" + integrity sha512-Aq84KjS7Z9HSU14qf4l/NEouaqfJAZtE9zEz7TIvw9V/3oJeUbjQwhz7ggqbL7I7REt4Bz+9HuCWsBO5N7xChw== + dependencies: + cfb "^1.2.0" + jsdom "^16.2.2" wrap-ansi@^5.1.0: version "5.1.0" @@ -4630,20 +5404,41 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" -xlsx@0.16.7: - version "0.16.7" - resolved "https://registry.yarnpkg.com/xlsx/-/xlsx-0.16.7.tgz#62fd6590addac7c4419daaaa2b0c5388015d5f69" - integrity sha512-Xc4NRjci2Grbh9NDk/XoaWycJurxEug1wwn0aJCmB0NvIMyQuHYq2muWLWGidYNZPf94aUbqm6K8Fbjd7gKTZg== +ws@^7.4.6: + version "7.5.5" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.5.tgz#8b4bc4af518cfabd0473ae4f99144287b33eb881" + integrity sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w== + +xdg-basedir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" + integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== + +xlsx@^0.17.2: + version "0.17.2" + resolved "https://registry.yarnpkg.com/xlsx/-/xlsx-0.17.2.tgz#032bcca02ca01b5ebf7da93dcb035891f2c092af" + integrity sha512-RIhN6/oc/ZqYZqY4jz4AX92yNfULhtNrcZP1lknIcsyR+Ra8Zu/9F1lAZWncYbDex95iYQX/XNNNzNFXZjlNOQ== dependencies: adler-32 "~1.2.0" cfb "^1.1.4" - codepage "~1.14.0" + codepage "~1.15.0" commander "~2.17.1" crc-32 "~1.2.0" exit-on-epipe "~1.0.1" + fflate "^0.3.8" ssf "~0.11.2" wmf "~1.0.1" - word "~0.3.0" + word "~0.4.0" + +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== + +xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== y18n@^4.0.0: version "4.0.1" @@ -4711,7 +5506,7 @@ yargs@13.3.2, yargs@^13.3.0: y18n "^4.0.0" yargs-parser "^13.1.2" -yargs@^15.0.2: +yargs@^15.0.2, yargs@^15.3.1: version "15.4.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== @@ -4745,3 +5540,8 @@ yarn@^1.22.10: version "1.22.10" resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.22.10.tgz#c99daa06257c80f8fa2c3f1490724e394c26b18c" integrity sha512-IanQGI9RRPAN87VGTF7zs2uxkSyQSrSPsju0COgbsKQOOXr5LtcVPeyXWgwVa0ywG3d8dg6kSYKGBuYK021qeA== + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 00000000..fb57ccd1 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,4 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + +